[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n*.sln    merge=union\n*.csproj merge=union\n*.vbproj merge=union\n*.fsproj merge=union\n*.dbproj merge=union\n\n# Standard to msysgit\n*.doc\t diff=astextplain\n*.DOC\t diff=astextplain\n*.docx diff=astextplain\n*.DOCX diff=astextplain\n*.dot  diff=astextplain\n*.DOT  diff=astextplain\n*.pdf  diff=astextplain\n*.PDF\t diff=astextplain\n*.rtf\t diff=astextplain\n*.RTF\t diff=astextplain\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\nbin\ngen\ntarget\n*.keystore\n*.swp\n*.orig\n*.log\n*.userprefs\nseed.txt\nmap.txt\n.metadata\nsdk/android/src/notifications-handler/libs/google-play-services.jar\nsdk/android/src/sdk/libs/gson-2.2.2.jar\nsdk/android/src/sdk/libs/guava-16.0.1.jar\nsdk/android/test/sdk.testapp.tests/libs/gson-2.2.2.jar\n*.mdf\n*.ldf\nobj\n*.csproj.user\ntest/ZumoE2EServerApp/Properties/PublishProfiles/\nsdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/sqlite3.dll\nStyleCop.Cache\npackages\n*.suo\n*.jar\n*.xccheckout\nderiveddata\n\n*.iml\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"sdk/Javascript/src/External/esprima\"]\n\tpath = sdk/Javascript/src/External/esprima\n\turl = https://github.com/ariya/esprima.git\n[submodule \"sdk/Javascript/src/External/queryjs\"]\n\tpath = sdk/Javascript/src/External/queryjs\n\turl = https://github.com/WindowsAzure/queryjs.git\n[submodule \"sdk/Managed/src/External/Xamarin.Auth\"]\n\tpath = sdk/Managed/src/External/Xamarin.Auth\n\turl = https://github.com/azure/azure-mobile-services-xamarin-auth.git\n"
  },
  {
    "path": "CHANGELOG.android.md",
    "content": "# Azure Mobile Services Android SDK Change Log\n\n### Android SDK: Version 2.0.3\n- Fix in the incremental sync query building logic [#720](https://github.com/Azure/azure-mobile-services/issues/720) to use correct parentheses and skip logic [c58d4e8](https://github.com/Azure/azure-mobile-services/commit/c58d4e8) \n- Fix for the deserialization bug [#718](https://github.com/Azure/azure-mobile-services/issues/718) on OperationErrorList table with datatype mismatch [15e9f9b](https://github.com/Azure/azure-mobile-services/commit/15e9f9b)\n\n### Android SDK: Version 2.0.2\n- Support for operation state tracking\n- Fix for type incompatibility from datetime to datetimeoffset \n- Methods added for CancelAndDiscard and CancelAndUpdate for customized conflict handling \n- Fix for the local store database connection issue caused due to race condition in asynchronous operations\n- Updated end to end test\n- Support for binary data type on queries (for instance to query using the __version column)\n- Improvements on the DateSerializer\n\n### Android SDK: Version 2.0.2-Beta2\n- Fix for the pull action with SQLite\n\n### Android SDK: Version 2.0.2-Beta\n- Mobile Services SDK version indicator with user-agent\n- Introduced conflict exception to facilitate handling of 409 conflict\n- Fix for the cropped UI for Facebook authentication\n- Fix for SQL ordering issue\n- Support for Incremental Sync to pull data with flexibility\n- Support for Soft Delete\n- Improved SQLite insert performance on pull\n- Purge no longer pushes, instead it throws an exception as user expects\n- Local item deletion exception is handled properly according to server state\n- Support for continuation tokens in queries for paging\n- InsertAsync throws expected exception on duplicate insert\n- Fix for Local store & SQLite missing/mismatch table columns (i.e. “_deleted”)\n- Support for Android Studio\n- Send custom query string parameters with loginAsync Android\n\n### Android SDK: Version 1.1.5\n- Added support for Windows Azure Notification Hub integration\n\n### Android SDK: Version 1.1.3\n- Support for optimistic concurrency (version / ETag) validation\n- Support for `__createdAt` / `__updatedAt` table columns\n- Added support for the Windows Azure Active Directory authentication in the `MobileServiceAuthenticationProvider` enum.\n- Also added a mapping from that name to the value used in the service REST API (`/login/aad`)\n\n### Android SDK: Version 1.1.0\n- Support for tables with string ids\n- Overload for log in which takes the provider as a string, in addition to the one with enums\n "
  },
  {
    "path": "CHANGELOG.ios.md",
    "content": "# Azure Mobile Services iOS SDK Change Log\n\n## SDK Downloads\n- [Latest iOS 2.x SDK](http://aka.ms/gc6fex)\n - **requires XCode 7**\n- [iOS 1.2.4 SDK](http://aka.ms/kymw2g)\n\n### Version 2.2.2\n- Updated build tooling to use XCode 7 and include BitCode [issue #794](https://github.com/Azure/azure-mobile-services/issues/794)\n - Note: Framework now requires using XCode 7\n- Fixed issue with MSCoreDataStore.h that prevented it from bring used as part of a cocoapod\n\n### Version 2.2.1\n- Fixed [issue #768](https://github.com/Azure/azure-mobile-services/issues/768) that was causing a memory leak when using NSURLSession [204f210](https://github.com/Azure/azure-mobile-services/commit/204f210)\n- Fix NSNull templateName [9347390](https://github.com/Azure/azure-mobile-services/commit/9347390)\n\n### Version 2.2.0\n- Updated offline sync logic to do a case-insensitive comparison on the ID column  [328aadf](https://github.com/Azure/azure-mobile-services/commit/328aadf)\n- Added support for returning the underlying NSOperation when performing push, pull and purge operations [7c37f60](https://github.com/Azure/azure-mobile-services/commit/7c37f60)\n- Added support for configuring the page size of a pull operation [0c31aa3](https://github.com/Azure/azure-mobile-services/commit/0c31aa3)\n- Added support for NSUUID in PredicateTranslator [24c5a61](https://github.com/Azure/azure-mobile-services/commit/24c5a61)\n- Fixed [issue #699] (https://github.com/Azure/azure-mobile-services/issues/699) that prevented properties with value nil from being sent to server [bf41081](https://github.com/Azure/azure-mobile-services/commit/bf41081)\n- Fixed handling of network errors during push operations [1a9fdf4](https://github.com/Azure/azure-mobile-services/commit/1a9fdf4)\n- Fixed potential race conditions while performing table operations [15581be](https://github.com/Azure/azure-mobile-services/commit/15581be)\n- Fixed incorrect ID validation during insert operations [f5e44d4](https://github.com/Azure/azure-mobile-services/commit/f5e44d4)\n\n### Version 2.1.0\n- Fix cancelAndUpdate and cancelAndDiscard actions on the MSTableOperationError class\n- Fix issues with sync operations not firing their completion blocks on the correct queue\n\n### Version 2.0.0\n- GA of offline sync changes from previous betas\n- Now requires iOS 7 or newer to use\n\n### Version 2.0.0 beta2\n- **[Breaking]** Changed MSReadQueryBlock to return MSQueryResult instead of items and totalCount. See [this blog post](http://azure.microsoft.com/blog/2014/10/07/mobile-services-beta-ios-sdk-released/) for more information.\n- Added support for incremental sync\n- Added support for query parameters in pull operations\n- Added support for following link headers returned from the .NET backend\n- Fixed issue with login controller completing before animation completes\n- Added a method for force purge of local data\n- Added a helper method to return an NSDictionary from an NSManagedObject\n- Fixed issue with the __includeDeleted flag sending the wrong value\n\n### Version 2.0.0 beta1\n\n- Added support for incremental sync\n- Added support for query parameters in pull operations\n- Fixed issue with login controller completing before animation completes\n- Added a method for force purge of local data\n- Added a helper method to return an NSDictionary from an NSManagedObject\n- Fixed issue with the __includeDeleted flag sending the wrong value\n\n### Version 1.3 alpha1\n- Added support for offline and sync\n\n### Version 1.2.4\n- Address bug where version property was returned to the caller even when not asked for\n- Fixes Swift QS for syntax changes up to Xcode Beta 7\n\n### Version 1.2.3\n- Fix issue with const when using both Azure Messaging and Mobile Services frameworks\n- Fix issue [#306](https://github.com/Azure/azure-mobile-services/issues/306) with how arrays passed as query string params to table and custom APIs are converted\n- Fix issue where system properties (__version, __updatedAt, etc) were returned to the caller when they were not requested\n\n### Version 1.2.2\n- Added support for APNS Azure Notification Hub integration\n- Support for optimistic concurrency on delete\n\n### iOS SDK\n- - Fix issue [#218](https://github.com/WindowsAzure/azure-mobile-services/issues/218) in which some dates coming from the mobile services with the .NET runtime weren't parsed correctly\n\n### Version 1.1.3\n- Added a mapping in the authentication provider from WindowsAzureActiveDirectory to the value used in the REST API (`/login/aad`)\n\n### Version 1.1.2\n- Supports the arm64 architecture\n- Now requires iOS 6 or newer to use\n\n### Version 1.1.1\n- Support for optimistic concurrency (version / ETag) validation\n- Support for `__createdAt` / `__updatedAt` table columns\n- Fix bug with using arrays in invokeAPI\n\n### Version 1.1.0\n- Support for tables with string ids\n"
  },
  {
    "path": "CHANGELOG.javascript.md",
    "content": "# Azure Mobile Services JavaScript SDK Change Log\n\n### JavaScript SDK: Version 1.2.7\n- Added support for phonegap/cordova with [plugin repo](https://github.com/Azure/azure-mobile-services-cordova)\n\n### JavaScript SDK: Version 1.2.5\n- Added support for sending provider specific query string parameters in login using new loginWithOptions method\n- Added support for registering devices with notification hubs for apns and gcm\n- Fixed issue with InAppBrowser on iOS devices during auth workflows when using Cordova/PhoneGap\n\n### JavaScript SDK: Version 1.2.4\n- Fixed crash when server response did not have a Content-Type header\n\n### JavaScript SDK: Version 1.2.2 \n- Support for optimistic concurrency on delete\n\n### JavaScript SDK: Version 1.1.5\n- Fix issue [#218](https://github.com/WindowsAzure/azure-mobile-services/issues/218) in which some dates coming from the mobile services with the .NET runtime weren't parsed correctly\n- [WinJS only] Fix race condition on notification hub integration initialization when storage was corrupted\n\n### JavaScript SDK: Version 1.1.4\n- Added support for Windows Azure Notification Hub integration for WinJS.\n\n### JavaScript SDK: Version 1.1.3\n- Added a mapping in the authentication provider from WindowsAzureActiveDirectory to the value used in the REST API (`/login/aad`)\n\n### JavaScript SDK: Version 1.1.2\n- Support for optimistic concurrency (version / ETag) validation\n- Support for `__createdAt` / `__updatedAt` table columns\n\n### JavaScript SDK: Version 1.1.0\n- Support for tables with string ids\n- Removed client restriction on valid providers for login\n- Files are now served from http://ajax.aspnetcdn.com/ajax/mobileservices/MobileServices.Web-[version].min.js (or [version].js for the non minified copy)\n\n### JavaScript SDK: Version 1.0.3:\n- Added support for `String.substr` inside functions on `where` clauses\n- Fix [#152](https://github.com/WindowsAzure/azure-mobile-services/issues/152) - InvokeApi method crashes on IE9 and IE8\n- Fixed issue with login popup not being closed when using IE11\n"
  },
  {
    "path": "CHANGELOG.managed.md",
    "content": "# Azure Mobile Services Managed SDK Change Log\n\n### Managed SDK: Version 1.3.2\n- Added workaround for WinRT issue [#658](https://github.com/WindowsAzure/azure-mobile-services/issues/658) by removing localization in SQLiteStore and in the SDK  [6af8b30](https://github.com/Azure/azure-mobile-services/commit/6af8b30) [58c5a44](https://github.com/Azure/azure-mobile-services/commit/58c5a44)\n- Added partial fix for issue [#615](https://github.com/WindowsAzure/azure-mobile-services/issues/615), by removing operations from the queue before releasing the operation's lock. [a28ae32](https://github.com/Azure/azure-mobile-services/commit/a28ae32)\n\n### Managed SDK: Version 1.3.1\n- Update to latest version of sqlite pcl [ce1aa67](https://github.com/Azure/azure-mobile-services/commit/ce1aa67)\n- Fix iOS classic compilation issues [316a57a](https://github.com/Azure/azure-mobile-services/commit/316a57a)\n- Update Xamarin unified support for Xamarin.iOS 8.6\n[da537b1](https://github.com/Azure/azure-mobile-services/commit/da537b1)\n- Xamarin.iOS Unified API Support [d778c60](https://github.com/Azure/azure-mobile-services/commit/d778c60)\n- Relax queryId restrictions #521 [offline] \n[3e2f645](https://github.com/Azure/azure-mobile-services/commit/3e2f645)\n- Work around for resource missing error on windows phone [offline]\n\n### Managed SDK: Version 1.3 \n\n- allow underscore and hyphen in queryId [7d192a3](https://github.com/Azure/azure-mobile-services/commit/7d192a3)\n- added force option to purge data and pending operations on data [aa51d9f](https://github.com/Azure/azure-mobile-services/commit/aa51d9f)\n- delete errors with operation on cancel and collapse [372ba61](https://github.com/Azure/azure-mobile-services/commit/372ba61)\n- rename queryKey to queryId [93e59f7](https://github.com/Azure/azure-mobile-services/commit/93e59f7)\n- insert should throw if the item already exists [#491](https://github.com/Azure/azure-mobile-services/issues/491) [fc13891](https://github.com/Azure/azure-mobile-services/commit/fc13891)\n- **[Breaking]** Removed PullAsync overloads that do not take queryId [88cac8c](https://github.com/Azure/azure-mobile-services/commit/88cac8c)\n\n### Managed SDK: Version 1.3 beta3\n- Improved the push failure error message [d49a72e](https://github.com/Azure/azure-mobile-services/commit/d49a72e)\n- Implement true upsert [c5b0b38](https://github.com/Azure/azure-mobile-services/commit/c5b0b38)\n- Use more fine grained types in sqlite store [de49712](https://github.com/Azure/azure-mobile-services/commit/de49712)\n- Speedup store table creation [eb7cc8d](https://github.com/Azure/azure-mobile-services/commit/eb7cc8d)\n- Allow query on member name datetime [7d831cd](https://github.com/Azure/azure-mobile-services/commit/7d831cd)\n- Make the sync handler optional as there is alternate way for handling sync errors [edc04e5](https://github.com/Azure/azure-mobile-services/commit/edc04e5)\n- Drop the unused createdat column in operations table [8a30df4](https://github.com/Azure/azure-mobile-services/commit/8a30df4)\n- Remove redundant overloads in interface and move them to extensions [d0a46b6](https://github.com/Azure/azure-mobile-services/commit/d0a46b6)\n- Support relative and absolute uri in pull same as table.read [c9d8e39](https://github.com/Azure/azure-mobile-services/commit/c9d8e39)\n- Allow relative URI in invokeapi [5b3c6b3](https://github.com/Azure/azure-mobile-services/commit/5b3c6b3)\n- Fixed the like implementation in sqlite store [77a0180](https://github.com/Azure/azure-mobile-services/commit/77a0180)\n- Purge should forget the deltatoken [18f1803](https://github.com/Azure/azure-mobile-services/commit/18f1803)\n- Renamed fromServer to ignoreMissingColumns [8b047eb](https://github.com/Azure/azure-mobile-services/commit/8b047eb)\n- **[Breaking]** Removed PullAsync overloads that do not take queryKey [d4ff784](https://github.com/Azure/azure-mobile-services/commit/d4ff784)\n- Save tableKind in the errors table [23f2ef0](https://github.com/Azure/azure-mobile-services/commit/23f2ef0)\n\n### Managed SDK: Version 1.3 beta2\n- Updated Nuget references\n- Request __deleted system property for sync\n- Default delta token set to 1970-01-01 for compatibility with Table Storage \n- Expose protected methods from the MobileServiceSQLiteStore for intercepting sql\n- **[Breaking]** Expose a ReadOnlyCollection instead of IEnumerable from MobileServiceTableOperationError\n\n### Managed SDK: Version 1.3 beta\n- Added support for incremental sync for .NET backend\n- Added support for byte[] properties in offline\n- Fixed issue with timezone roundtripping in incremental sync\n- Improved exception handling for 409 conflicts\n- Improved error handling for timeout errors during sync\n- Follow link headers returned from .NET backend and use skip and top for PullAsync()\n- Introduced the SupportedOptions enum on IMobileServiceSyncTable to configure the pull strategy\n- **[Breaking]** Do not Push changes on PurgeAsync() instead throw an exception\n- **[Breaking]** Renamed ToQueryString method to ToODataString on MobileServiceTableQueryDescription class\n\n### Managed SDK: Version 1.3 alpha2\n- Added support for incremental sync (currently, for Mobile Services JavaScript backend only)\n- Added client support for soft delete\n- Added support for offline pull with query string\n\n### Managed SDK: Version 1.3 alpha2\n- Added support for offline and sync\n- Added support for soft delete\n\n### Managed SDK: Version 1.2.6\n- Fixed an issue on Xamarin.iOS and Xamarin.Android where UI popups occur during failed user authentication flows. These popups are now suppressed so that the developer can handle the error however they want.\n\n### Managed SDK: Version 1.2.5\n- Updated to use a modified build of Xamarin.Auth that will not conflict with any user-included version of Xamarin.Auth\n\n### Managed SDK: Version 1.2.4\n- Added support for following link headers returned from the .NET backend\n- Added a MobileServiceConflictException to detect duplicate inserts\n- Added support for datetimeoffsets in queries\n- Added support for sending provider specific query string parameters in LoginAsync()\n- Fixed an issue causing duplicate registrations in Xamarin.iOS against .NET backends\n\n### Managed SDK: Version 1.2.3\n- Added support for Xamarin iOS Azure Notification Hub integration\n\n### Managed SDK: Version 1.2.2\n- Support for optimistic concurrency on delete\n- Update to Push surface area with minor object model changes. Added Registration base class in PCL and changed name within each extension to match the push notifcation surface. Example: WnsRegistration, WnsTemplateRegistration\n- Added support for Xamarin Android Azure Notification Hub integration\n\n### Managed SDK: Version 1.2.1\n- Added support for Windows Phone 8.1, requires using Visual Studio 2013 Update 2 RC\n\n### Managed SDK: Version 1.1.5\n- Added support for Xamarin (iOS / Android)\n- Clean-up id validation on insert operations\n\n### Managed SDK: Version 1.1.4\n- Added support for Windows Azure Notification Hub integration.\n\n### Managed SDK: Version 1.1.3\n- Added support for the Windows Azure Active Directory authentication in the `MobileServiceAuthenticationProvider` enumeration.\n- Also added a mapping from that name to the value used in the service REST API (`/login/aad`)\n- Fixed a issue [#213](https://github.com/WindowsAzure/azure-mobile-services/issues/213) in which SDK prevented calls to custom APIs with query string parameters starting with `$`\n\n### Managed SDK: Version 1.1.2\n- Fix [#192](https://github.com/WindowsAzure/azure-mobile-services/issues/192) - Serialized query is ambiguous if double literal has no fractional part\n- Fixed Nuget support for Windows Phone 8\n\n### Managed SDK: Version 1.1.1\n- Fix bug when inserting a derived type\n- Dropped support for Windows Phone 7.x clients (WP7.5 can still use the client version 1.1.0)\n\n### Managed SDK: Version 1.1.0\n- Support for tables with string ids\n- Support for optimistic concurrency (version / ETag) validation\n- Support for `__createdAt` / `__updatedAt` table columns\n- Overload for log in which takes the provider as a string, in addition to the one with enums\n- Fix [#121](https://github.com/WindowsAzure/azure-mobile-services/issues/121) - exceptions in `MobileServiceIncrementalLoadingCollection.LoadMoreItemsAsync` causes the app to crash\n\n### Managed SDK: Version 1.0.3:\n- Fixed query issues in Visual Basic expressions\n\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Azure Mobile Services Change Log\n\n## [iOS SDK](CHANGELOG.ios.md)\n\n## [Managed SDK](CHANGELOG.managed.md)\n\n## [Android SDK](CHANGELOG.android.md)\n\n## [JavaScript SDK](CHANGELOG.javascript.md)\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS"
  },
  {
    "path": "README.md",
    "content": "# Microsoft Azure Mobile Services\n\nAzure Mobile Services has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [Mobile Apps in Azure App Service](https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-value-prop).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Download Source Code\n\nTo get the source code of our SDKs and samples via **git** just type:\n\n    git clone https://github.com/Azure/azure-mobile-services.git\n    cd ./azure-mobile-services/\n\n## Reference Documentation\n\n#### Azure App Service Mobile Apps\n* [iOS](http://azure.github.io/azure-mobile-services/iOS/v3)\n\n#### Mobile Services\n* [iOS](http://azure.github.io/azure-mobile-services/iOS/v2)\n* [Android](http://dl.windowsazure.com/androiddocs/)\n\n## Change log\n\n- [iOS SDK](CHANGELOG.ios.md)\n- [Managed SDK](CHANGELOG.managed.md)\n- [Android SDK](CHANGELOG.android.md)\n- [JavaScript SDK](CHANGELOG.javascript.md)\n\n## Managed Windows Client SDK\n\nOur managed portable library for Windows 8, Windows Phone 8, Windows Phone 8.1, and Windows Runtime Universal C# Client SDK makes it incredibly easy to use Mobile Services from your Windows applications. The [Microsoft Azure Mobile Services SDK](http://nuget.org/packages/WindowsAzure.MobileServices/) is available \nas a Nuget package or you can download the source using the instructions above. The managed portable library also supports the full .NET 4.5 platform.\n\n### Prerequisites\n\nThe SDK requires Visual Studio 2013.\n\n### Building and Referencing the SDK\n\nThe managed portable library solution includes a core portable assembly and platform-specific assemblies for each of the supported platforms: Windows 8,\nWindows Phone 8 and .NET 4.5. The core portable platform project is ```Microsoft.WindowsAzure.Mobile```. The platform-specific assembly projects are\nnamed using a ```Microsoft.WindowsAzure.Mobile.Ext.<Platform>``` convention. The Windows Phone 8 platform also\ninclude a ```Microsoft.WindowsAzure.Mobile.UI.<Platform>``` project that contain UI components. To build the Managed Portable Libray:\n\n1. Open the ```sdk\\Managed\\Microsoft.WindowsAzure.Mobile.Managed.sln``` solution file in Visual Studio 2012.\n2. Press F6 to build the solution.\n\n### Running the Tests\n\nThe managed portable library ```Microsoft.WindowsAzure.Mobile.Managed.sln``` has a test application for each of the supported platforms: Windows 8,\nWindows Phone 8 and .NET 4.5.\n\n1. Open the ```sdk\\Managed\\Microsoft.WindowsAzure.Mobile.Managed.sln``` solution file in Visual Studio 2012.\n2. Right-click on the test project for a given platform in the Solution Explorer and select ```Set as StartUp Project```.\n3. Press F5 to run the application in debug mode.\n4. An application will appear with a prompt for a runtime Uri and Tags. You can safely ignore this prompt and just click the Start button.\n5. The test suite will run and display the results.\n\n## iOS Client SDK\nAdd a cloud backend to your iOS application in minutes with our iOS client SDK. You can [download the iOS SDK](https://go.microsoft.com/fwLink/?LinkID=266533&clcid=0x409) directly or you can download the source code using the instructions above.  \n\n### Prerequisites\n\nThe SDK requires Xcode 4.6.3 or greater.\n\n### Building and Referencing the SDK\n\n1. Open the ```sdk\\iOS\\WindowsAzureMobileServices.xcodeproj``` file in Xcode.\n2. Set the active scheme option to ```Framework\\iOS Device```.\n3. Build the project using Command-B. The ```WindowsAzureMobileServices.framework``` folder should be found in the build output folder under ```Products\\<build configuration>-iphoneos```.\n4. Drag and drop the ```WindowsAzureMobileServices.framework``` from a Finder window into the Frameworks folder of the Project Navigator panel of your iOS application Xcode project.\n\n### Running the Tests\n\n1. Open the ```sdk\\iOS\\WindowsAzureMobileServices.xcodeproj``` file in Xcode.\n2. Set the active scheme option to ```WindowsAzureMobileServices\\* Simulator```.\n3. Open the ```Test\\WindowsAzureMobileServicesFunctionalTests.m``` file in the Project Navigator panel of Xcode.\n4. In the ```settings.plist``` file, set ```TestAppUrl``` and ```TestAppApplicationKey``` to a valid URL and Application Key for a working Mobile Service.\n5. Run the tests using Command-U.\n\n## Android SDK\nMicrosoft Azure Mobile Services can be used with an Android-based device using our Android SDK. You can get the Android SDK in one of the following two ways or you can download the source code using the instructions above.\n\n1. For an Android studio project, include the line `compile 'com.microsoft.azure:azure-mobile-services-android-sdk:2.0.3'` in the dependencies section of build.gradle file of the app\n2. Eclipse users can [download the Android SDK](https://go.microsoft.com/fwLink/?LinkID=280126&clcid=0x409) directly or can download the source code using the instructions above.\n\n### Prerequisites\nThe SDK requires Android Studio.\n\n### Building and Referencing the SDK\n1. Open the folder `\\azure-mobile-services\\sdk\\android` using the option `Open an existing Android Studio Project` in Android Studio.\n2. Project should be built automatically, In case it does not build, Right click on `sdk` folder and select `Make Module 'sdk'`\n3. The file `sdk-release.aar` should be present at `\\azure-mobile-services\\sdk\\android\\src\\sdk\\build\\outputs\\aar` \n4. Rename the file `sdk-release.aar` to `sdk-release.zip`\n5. Extract the zip file, `classes.jar` should be present in the root folder.\n\n### Running the Tests\n\nThe SDK has a suite of unit tests that you can easily run.\n\n1. Open the folder `\\azure-mobile-services\\sdk\\android` using the option `Open an existing Android Studio Project` in Android Studio.\n2. Project should be built automatically, In case it does not build, Right click on `sdk` folder and select `Make Module 'sdk.testapp'`\n3. Expand `sdk.testapp` and sub folder `java`\n4. Right click on `com.microsoft.windowsazure.mobileservices.sdk.testapp`, Select `Run`, Select `Tests in com.microsoft.windowsazure.mobileservices.sdk.testapp` (with Android tests icon)\n\n## JavaScript SDK\n\nOur JavaScript SDK makes it easy to use our Microsoft Azure Mobile Services in a Windows 8 application or an HTML client. The [Microsoft Azure Mobile Services for WinJS SDK](http://nuget.org/packages/WindowsAzure.MobileServices.WinJS/) is available as a Nuget package or you can download the source for both WinJS and HTML using the instructions above. \n\n### Prerequisites\n\nThe Microsoft Azure Mobile Services for WinJS SDK requires Windows 8.1 and Visual Studio 2013 Update 3. \n\n### Building and Referencing the SDK\n\n1. Install Node.js and grunt-cli (globally) for building in Visual Studio\n2. Install the Task Runner Explorer(https://visualstudiogallery.msdn.microsoft.com/8e1b4368-4afb-467a-bc13-9650572db708) add on for VS 2013 \n3. Open the ```sdk\\JavaScript\\Microsoft.WindowsAzure.Mobile.JS.sln``` file in Visual Studio.\n4. Right click on the gruntfile.js in the solution, and select Task Runner Explorer\n5. Run the default build option\n\nAlternatively, you can use Grunt from the command line to build the project as well.\n\nFor WinJS Windows Store apps, copy the ```Generated/MobileServices[.min].js```, ```Generated/MobileServices.DevIntellisense.js``` and ```Generated/MobileService.pri``` files into your WinJS project. For HTML applications, copy the ```Generated/MobileServices.Web[.min].js``` and the ```Generated/MobileServices.DevIntellisense.js``` files into your HTML\\JavaScript project.\n\n### Running the Tests\n\nTo run the WinJS Windows Store test app:\n\n1. Open the ```sdk\\JavaScript\\Microsoft.WindowsAzure.Mobile.JS.sln``` file in Visual Studio.\n2. In the Solution Explorer, right-click on the ```Microsoft.WindowsAzure.Mobile.WinJS.Test``` project in the Solution Explorer and select ```Set as StartUp Project```.\n3. Press F5 to run the application in debug mode.\n4. A Windows Store application will appear with a prompt for a Runtime Uri and Tags. You can safely ignore this prompt and just click the Start button.\n5. The test suite will run and display the results.\n\nTo run the HTML tests:\n\n1. Open the ```sdk\\JavaScript\\Microsoft.WindowsAzure.Mobile.JS.sln``` file in Visual Studio.\n2. In the Solution Explorer, select the Microsoft.WindowsAzure.Mobile.WinJS.Test project and right-click to select 'View in Browser'.\n3. The default browser will launch and run the test HTML application. Some tests may fail because due to an 'Unexpected connection failure'. This is because the test is configured to connect to a Mobile Service that does not exist. These failures can be ignored.\n\n## Useful Resources\n\n* [Quickstarts](https://github.com/Azure/azure-mobile-services-quickstarts)\n* [E2E Test Suite](https://github.com/Azure/azure-mobile-services-test)\n* [Samples](https://github.com/Azure/mobile-services-samples)\n* Tutorials and product overview are available at [Microsoft Azure Mobile Services Developer Center](http://azure.microsoft.com/en-us/develop/mobile).\n* Our product team actively monitors the [Mobile Services Developer Forum](http://social.msdn.microsoft.com/Forums/en-US/azuremobile/) to assist you with any troubles.\n\n## Contribute Code or Provide Feedback\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.\n\nIf you would like to become an active contributor to this project please follow the instructions provided in [Microsoft Azure Projects Contribution Guidelines](http://azure.github.com/guidelines.html).\n\nIf you encounter any bugs with the library please file an issue in the [Issues](https://github.com/Azure/azure-mobile-services/issues) section of the project.\n"
  },
  {
    "path": "component/.gitignore",
    "content": "*.xam\nxpkg\n*.suo\nbin\nobj\nlib"
  },
  {
    "path": "component/Details.md",
    "content": "Add structured storage, authentication, push notifications and more to your Xamarin based mobile application in minutes using Microsoft Azure Mobile Services.\n\nTo get started, follow the tutorial for the appropriate platform:\n\n- [Xamarin.iOS](https://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-xamarin-ios/)\n- [Xamarin.Android](https://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-xamarin-android/)\n\nTo learn about more Mobile Services, visit the [Microsoft Azure Mobile Developer Center](https://www.windowsazure.com/en-us/develop/mobile/).\n"
  },
  {
    "path": "component/GettingStarted.md",
    "content": "## Getting Started\n\nFollow the tutorial for the appropriate platform:\n\n- [Xamarin.iOS](https://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-xamarin-ios/)\n- [Xamarin.Android](https://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-xamarin-android/)\n\n### Source Code\n\n- GitHub: https://github.com/WindowsAzure/azure-mobile-services\n\n### Documentation\n\n- Tutorials: https://www.windowsazure.com/en-us/develop/mobile/resources/\n- Developer Center: http://www.windowsazure.com/mobile\n- API Library: http://msdn.microsoft.com/en-us/library/windowsazure/jj710108.aspx\n- Xamarin Mobile Services client framework GitHub Repo: https://github.com/xamarin/azure-mobile-services\n\n### Contact\n\n- Developer Forum: http://social.msdn.microsoft.com/Forums/en-US/azuremobile/threads\n- Feature Requests: http://mobileservices.uservoice.com\n- Contact: mobileservices@microsoft.com\n- Twitter: @paulbatum @joshtwist @cloudnick @chrisrisner @mlunes90\n\n### Legal \n\n- Terms & Conditions: http://www.windowsazure.com/en-us/support/legal/\n"
  },
  {
    "path": "component/License.md",
    "content": "# Apache License\nVersion 2.0, January 2004<br />\n[http://www.apache.org/licenses/](http://www.apache.org/licenses/)\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n   \"License\" shall mean the terms and conditions for use, reproduction,\n   and distribution as defined by Sections 1 through 9 of this document.\n\n   \"Licensor\" shall mean the copyright owner or entity authorized by\n   the copyright owner that is granting the License.\n\n   \"Legal Entity\" shall mean the union of the acting entity and all\n   other entities that control, are controlled by, or are under common\n   control with that entity. For the purposes of this definition,\n   \"control\" means (i) the power, direct or indirect, to cause the\n   direction or management of such entity, whether by contract or\n   otherwise, or (ii) ownership of fifty percent (50%) or more of the\n   outstanding shares, or (iii) beneficial ownership of such entity.\n\n   \"You\" (or \"Your\") shall mean an individual or Legal Entity\n   exercising permissions granted by this License.\n\n   \"Source\" form shall mean the preferred form for making modifications,\n   including but not limited to software source code, documentation\n   source, and configuration files.\n\n   \"Object\" form shall mean any form resulting from mechanical\n   transformation or translation of a Source form, including but\n   not limited to compiled object code, generated documentation,\n   and conversions to other media types.\n\n   \"Work\" shall mean the work of authorship, whether in Source or\n   Object form, made available under the License, as indicated by a\n   copyright notice that is included in or attached to the work\n   (an example is provided in the Appendix below).\n\n   \"Derivative Works\" shall mean any work, whether in Source or Object\n   form, that is based on (or derived from) the Work and for which the\n   editorial revisions, annotations, elaborations, or other modifications\n   represent, as a whole, an original work of authorship. For the purposes\n   of this License, Derivative Works shall not include works that remain\n   separable from, or merely link (or bind by name) to the interfaces of,\n   the Work and Derivative Works thereof.\n\n   \"Contribution\" shall mean any work of authorship, including\n   the original version of the Work and any modifications or additions\n   to that Work or Derivative Works thereof, that is intentionally\n   submitted to Licensor for inclusion in the Work by the copyright owner\n   or by an individual or Legal Entity authorized to submit on behalf of\n   the copyright owner. For the purposes of this definition, \"submitted\"\n   means any form of electronic, verbal, or written communication sent\n   to the Licensor or its representatives, including but not limited to\n   communication on electronic mailing lists, source code control systems,\n   and issue tracking systems that are managed by, or on behalf of, the\n   Licensor for the purpose of discussing and improving the Work, but\n   excluding communication that is conspicuously marked or otherwise\n   designated in writing by the copyright owner as \"Not a Contribution.\"\n\n   \"Contributor\" shall mean Licensor and any individual or Legal Entity\n   on behalf of whom a Contribution has been received by Licensor and\n   subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   copyright license to reproduce, prepare Derivative Works of,\n   publicly display, publicly perform, sublicense, and distribute the\n   Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   (except as stated in this section) patent license to make, have made,\n   use, offer to sell, sell, import, and otherwise transfer the Work,\n   where such license applies only to those patent claims licensable\n   by such Contributor that are necessarily infringed by their\n   Contribution(s) alone or by combination of their Contribution(s)\n   with the Work to which such Contribution(s) was submitted. If You\n   institute patent litigation against any entity (including a\n   cross-claim or counterclaim in a lawsuit) alleging that the Work\n   or a Contribution incorporated within the Work constitutes direct\n   or contributory patent infringement, then any patent licenses\n   granted to You under this License for that Work shall terminate\n   as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\n   Work or Derivative Works thereof in any medium, with or without\n   modifications, and in Source or Object form, provided that You\n   meet the following conditions:\n\n   (a) You must give any other recipients of the Work or\n       Derivative Works a copy of this License; and\n\n   (b) You must cause any modified files to carry prominent notices\n       stating that You changed the files; and\n\n   (c) You must retain, in the Source form of any Derivative Works\n       that You distribute, all copyright, patent, trademark, and\n       attribution notices from the Source form of the Work,\n       excluding those notices that do not pertain to any part of\n       the Derivative Works; and\n\n   (d) If the Work includes a \"NOTICE\" text file as part of its\n       distribution, then any Derivative Works that You distribute must\n       include a readable copy of the attribution notices contained\n       within such NOTICE file, excluding those notices that do not\n       pertain to any part of the Derivative Works, in at least one\n       of the following places: within a NOTICE text file distributed\n       as part of the Derivative Works; within the Source form or\n       documentation, if provided along with the Derivative Works; or,\n       within a display generated by the Derivative Works, if and\n       wherever such third-party notices normally appear. The contents\n       of the NOTICE file are for informational purposes only and\n       do not modify the License. You may add Your own attribution\n       notices within Derivative Works that You distribute, alongside\n       or as an addendum to the NOTICE text from the Work, provided\n       that such additional attribution notices cannot be construed\n       as modifying the License.\n\n   You may add Your own copyright statement to Your modifications and\n   may provide additional or different license terms and conditions\n   for use, reproduction, or distribution of Your modifications, or\n   for any such Derivative Works as a whole, provided Your use,\n   reproduction, and distribution of the Work otherwise complies with\n   the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\n   any Contribution intentionally submitted for inclusion in the Work\n   by You to the Licensor shall be under the terms and conditions of\n   this License, without any additional terms or conditions.\n   Notwithstanding the above, nothing herein shall supersede or modify\n   the terms of any separate license agreement you may have executed\n   with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\n   names, trademarks, service marks, or product names of the Licensor,\n   except as required for reasonable and customary use in describing the\n   origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\n   agreed to in writing, Licensor provides the Work (and each\n   Contributor provides its Contributions) on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n   implied, including, without limitation, any warranties or conditions\n   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n   PARTICULAR PURPOSE. You are solely responsible for determining the\n   appropriateness of using or redistributing the Work and assume any\n   risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\n   whether in tort (including negligence), contract, or otherwise,\n   unless required by applicable law (such as deliberate and grossly\n   negligent acts) or agreed to in writing, shall any Contributor be\n   liable to You for damages, including any direct, indirect, special,\n   incidental, or consequential damages of any character arising as a\n   result of this License or out of the use or inability to use the\n   Work (including but not limited to damages for loss of goodwill,\n   work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses), even if such Contributor\n   has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\n   the Work or Derivative Works thereof, You may choose to offer,\n   and charge a fee for, acceptance of support, warranty, indemnity,\n   or other liability obligations and/or rights consistent with this\n   License. However, in accepting such obligations, You may act only\n   on Your own behalf and on Your sole responsibility, not on behalf\n   of any other Contributor, and only if You agree to indemnify,\n   defend, and hold each Contributor harmless for any liability\n   incurred by, or claims asserted against, such Contributor by reason\n   of your accepting any such warranty or additional liability."
  },
  {
    "path": "component/component.yaml",
    "content": "﻿id: azure-mobile-services\nversion: 1.2.1\nname: Azure Mobile Services\npublisher: Microsoft\npublisher-url: http://www.windowsazure.com/en-us/develop/mobile/\nsummary: Store data in the cloud, authenticate users, and send push notifications.\nlicense: LICENSE.md\ndetails: Details.md\ngetting-started: GettingStarted.md\nicons:\n  - azure-mobile-services_512x512.png\n  - azure-mobile-services_128x128.png\nlibraries:\n  ios: \n    - ..\\..\\bin\\Signed\\Release\\Managed\\iOS-Classic\\Microsoft.WindowsAzure.Mobile.dll\n    - ..\\..\\bin\\Signed\\Release\\Managed\\iOS-Classic\\Microsoft.WindowsAzure.Mobile.Ext.dll    \n    - ..\\..\\bin\\Signed\\Release\\Managed\\iOS-Classic\\Newtonsoft.Json.dll    \n    - ..\\..\\bin\\Signed\\Release\\Managed\\iOS-Classic\\System.Net.Http.Extensions.dll\n    - ..\\..\\bin\\Signed\\Release\\Managed\\iOS-Classic\\System.Net.Http.Primitives.dll\n  ios-unified: \n    - ..\\..\\bin\\Signed\\Release\\Managed\\iOS\\Microsoft.WindowsAzure.Mobile.dll\n    - ..\\..\\bin\\Signed\\Release\\Managed\\iOS\\Microsoft.WindowsAzure.Mobile.Ext.dll    \n    - ..\\..\\bin\\Signed\\Release\\Managed\\iOS\\Newtonsoft.Json.dll    \n    - ..\\..\\bin\\Signed\\Release\\Managed\\iOS\\System.Net.Http.Extensions.dll\n    - ..\\..\\bin\\Signed\\Release\\Managed\\iOS\\System.Net.Http.Primitives.dll\n  android:\n    - ..\\..\\bin\\Signed\\Release\\Managed\\Android\\Microsoft.WindowsAzure.Mobile.dll\n    - ..\\..\\bin\\Signed\\Release\\Managed\\Android\\Microsoft.WindowsAzure.Mobile.Ext.dll    \n    - ..\\..\\bin\\Signed\\Release\\Managed\\Android\\Newtonsoft.Json.dll\n    - ..\\..\\bin\\Signed\\Release\\Managed\\Android\\System.Net.Http.Extensions.dll\n    - ..\\..\\bin\\Signed\\Release\\Managed\\Android\\System.Net.Http.Primitives.dll\n  mobile:\n    - ..\\..\\bin\\Signed\\Release\\Managed\\Portable\\Microsoft.WindowsAzure.Mobile.dll\n    - ..\\..\\bin\\Signed\\Release\\Managed\\Portable\\Newtonsoft.Json.dll\nsamples:\n  - name: Android Sample\n    path: samples\\androidsample\\androidsample.sln\n  - name: iOS Unified API Sample\n    path: samples\\iOSsample\\iOSsample.sln\nscreenshots:\n  - screenshots/WAMS-New.PNG\n  - screenshots/WAMS-SQLdb1.png\n  - screenshots/WAMS-SQLdb2.png\n  - screenshots/WAMS-userauth.png\n  - screenshots/WAMS-push1.png\n  - screenshots/WAMS-push2.png\n  - screenshots/WAMS-Create.png\n  - screenshots/WAMS-Script1.png\n  - screenshots/WAMS-Script2.png\n  - screenshots/WAMS-Scheduler2.png\n  - screenshots/WAMS-Keys.png\n  - screenshots/WAMS-EmptyData.png\n  - screenshots/WAMS-DataPermissions.png\n"
  },
  {
    "path": "component/samples/androidsample/androidsample/Assets/AboutAssets.txt",
    "content": "Any raw assets you want to be deployed with your application can be placed in\nthis directory (and child directories) and given a Build Action of \"AndroidAsset\".\n\nThese files will be deployed with your package and will be accessible using Android's\nAssetManager, like this:\n\npublic class ReadAsset : Activity\n{\n\tprotected override void OnCreate (Bundle bundle)\n\t{\n\t\tbase.OnCreate (bundle);\n\n\t\tInputStream input = Assets.Open (\"my_asset.txt\");\n\t}\n}\n\nAdditionally, some Android functions will automatically load asset files:\n\nTypeface tf = Typeface.CreateFromAsset (Context.Assets, \"fonts/samplefont.ttf\");\n"
  },
  {
    "path": "component/samples/androidsample/androidsample/Properties/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" android:versionCode=\"1\" android:versionName=\"1.0\" package=\"androidsample.androidsample\">\n\t<uses-sdk android:minSdkVersion=\"8\" />\n\t<application android:allowBackup=\"true\" android:icon=\"@drawable/ic_launcher\" android:label=\"@string/app_name\" android:theme=\"@style/AppTheme\"></application>\n\t<uses-permission android:name=\"android.permission.INTERNET\" />\n</manifest>"
  },
  {
    "path": "component/samples/androidsample/androidsample/Properties/AssemblyInfo.cs",
    "content": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing Android.App;\n\n// Information about this assembly is defined by the following attributes. \n// Change them to the values specific to your project.\n\n[assembly: AssemblyTitle(\"androidsample\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"\")]\n[assembly: AssemblyCopyright(\"billholmes\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// The assembly version has the format \"{Major}.{Minor}.{Build}.{Revision}\".\n// The form \"{Major}.{Minor}.*\" will automatically update the build and revision,\n// and \"{Major}.{Minor}.{Build}.*\" will update just the revision.\n\n[assembly: AssemblyVersion(\"1.0.0\")]\n\n// The following attributes are used to specify the signing key for the assembly, \n// if desired. See the Mono documentation for more information about signing.\n\n//[assembly: AssemblyDelaySign(false)]\n//[assembly: AssemblyKeyFile(\"\")]\n\n"
  },
  {
    "path": "component/samples/androidsample/androidsample/Resources/AboutResources.txt",
    "content": "Images, layout descriptions, binary blobs and string dictionaries can be included \nin your application as resource files.  Various Android APIs are designed to \noperate on the resource IDs instead of dealing with images, strings or binary blobs \ndirectly.\n\nFor example, a sample Android app that contains a user interface layout (main.axml),\nan internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) \nwould keep its resources in the \"Resources\" directory of the application:\n\nResources/\n    drawable/\n        icon.png\n\n    layout/\n        main.axml\n\n    values/\n        strings.xml\n\nIn order to get the build system to recognize Android resources, set the build action to\n\"AndroidResource\".  The native Android APIs do not operate directly with filenames, but \ninstead operate on resource IDs.  When you compile an Android application that uses resources, \nthe build system will package the resources for distribution and generate a class called \"R\" \n(this is an Android convention) that contains the tokens for each one of the resources \nincluded. For example, for the above Resources layout, this is what the R class would expose:\n\npublic class R {\n    public class drawable {\n        public const int icon = 0x123;\n    }\n\n    public class layout {\n        public const int main = 0x456;\n    }\n\n    public class strings {\n        public const int first_string = 0xabc;\n        public const int second_string = 0xbcd;\n    }\n}\n\nYou would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main \nto reference the layout/main.axml file, or R.strings.first_string to reference the first \nstring in the dictionary file values/strings.xml.\n"
  },
  {
    "path": "component/samples/androidsample/androidsample/Resources/Resource.designer.cs",
    "content": "#pragma warning disable 1591\n//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34011\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\n[assembly: global::Android.Runtime.ResourceDesignerAttribute(\"androidsample.Resource\", IsApplication=true)]\n\nnamespace androidsample\n{\n\t\n\t\n\t[System.CodeDom.Compiler.GeneratedCodeAttribute(\"Xamarin.Android.Build.Tasks\", \"1.0.0.0\")]\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tstatic Resource()\n\t\t{\n\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t}\n\t\t\n\t\tpublic static void UpdateIdValues()\n\t\t{\n\t\t}\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\tstatic Attribute()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Drawable\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020000\n\t\t\tpublic const int ic_launcher = 2130837504;\n\t\t\t\n\t\t\tstatic Drawable()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Drawable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Id\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070000\n\t\t\tpublic const int LinearLayout1 = 2131165184;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070004\n\t\t\tpublic const int buttonAddToDo = 2131165188;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070006\n\t\t\tpublic const int checkToDoItem = 2131165190;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070005\n\t\t\tpublic const int listViewToDo = 2131165189;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070002\n\t\t\tpublic const int loadingProgressBar = 2131165186;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070007\n\t\t\tpublic const int menu_refresh = 2131165191;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070003\n\t\t\tpublic const int textNewToDo = 2131165187;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070001\n\t\t\tpublic const int textViewTitle = 2131165185;\n\t\t\t\n\t\t\tstatic Id()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Id()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Layout\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030000\n\t\t\tpublic const int Activity_To_Do = 2130903040;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030001\n\t\t\tpublic const int Row_List_To_Do = 2130903041;\n\t\t\t\n\t\t\tstatic Layout()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Layout()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Menu\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f060000\n\t\t\tpublic const int activity_main = 2131099648;\n\t\t\t\n\t\t\tstatic Menu()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Menu()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class String\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040002\n\t\t\tpublic const int add_button_text = 2130968578;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040001\n\t\t\tpublic const int add_textbox_hint = 2130968577;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040000\n\t\t\tpublic const int app_name = 2130968576;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040005\n\t\t\tpublic const int checkbox_text = 2130968581;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040004\n\t\t\tpublic const int menu_refresh = 2130968580;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040003\n\t\t\tpublic const int mobile_services = 2130968579;\n\t\t\t\n\t\t\tstatic String()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate String()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Style\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050000\n\t\t\tpublic const int AppBaseTheme = 2131034112;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050001\n\t\t\tpublic const int AppTheme = 2131034113;\n\t\t\t\n\t\t\tstatic Style()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Style()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n#pragma warning restore 1591\n"
  },
  {
    "path": "component/samples/androidsample/androidsample/Resources/layout/Activity_To_Do.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/LinearLayout1\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"#71BCFA\"\n        android:padding=\"6dip\">\n        <TextView\n            android:id=\"@+id/textViewTitle\"\n            android:layout_width=\"0dip\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"2dp\"\n            android:layout_weight=\"0.12\"\n            android:text=\"@string/mobile_services\"\n            android:textAppearance=\"?android:attr/textAppearanceLarge\" />\n        <ProgressBar\n            android:id=\"@+id/loadingProgressBar\"\n            android:layout_width=\"28dp\"\n            android:layout_height=\"28dp\" />\n    </LinearLayout>\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"#71BCFA\"\n        android:padding=\"6dip\">\n        <EditText\n            android:id=\"@+id/textNewToDo\"\n            android:layout_width=\"0dip\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:ems=\"10\"\n            android:hint=\"@string/add_textbox_hint\">\n            <requestFocus />\n        </EditText>\n        <Button\n            android:id=\"@+id/buttonAddToDo\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:onClick=\"AddItem\"\n            android:text=\"@string/add_button_text\" />\n    </LinearLayout>\n    <ListView\n        android:id=\"@+id/listViewToDo\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        tools:listitem=\"@layout/row_list_to_do\"\n        android:padding=\"6dip\" />\n</LinearLayout>"
  },
  {
    "path": "component/samples/androidsample/androidsample/Resources/layout/Row_List_To_Do.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"horizontal\">\n    \n    <CheckBox\n        android:id=\"@+id/checkToDoItem\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/checkbox_text\" />\n\n</LinearLayout>"
  },
  {
    "path": "component/samples/androidsample/androidsample/Resources/menu/activity_main.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n    <item android:id=\"@+id/menu_refresh\" android:orderInCategory=\"101\" android:showAsAction=\"always\" android:title=\"@string/menu_refresh\"></item>\n\n</menu>"
  },
  {
    "path": "component/samples/androidsample/androidsample/Resources/values/Strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">androidsample</string>\n    <string name=\"add_textbox_hint\">Add a ToDo item</string>\n    <string name=\"add_button_text\">Add</string>\n    <string name=\"mobile_services\">Mobile Services </string>\n    <string name=\"menu_refresh\">Refresh</string>\n    <string name=\"checkbox_text\">Item Text</string>\n</resources>\n"
  },
  {
    "path": "component/samples/androidsample/androidsample/Resources/values/styles.xml",
    "content": "<resources>\n\n    <!--\n        Base application theme, dependent on API level. This theme is replaced\n        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.\n    -->\n    <style name=\"AppBaseTheme\" parent=\"android:Theme.Light\">\n        <!--\n            Theme customizations available in newer API levels can go in\n            res/values-vXX/styles.xml, while customizations related to\n            backward-compatibility can go here.\n        -->\n    </style>\n\n    <!-- Application theme. -->\n    <style name=\"AppTheme\" parent=\"AppBaseTheme\">\n        <!-- All customizations that are NOT specific to a particular API-level can go here. -->\n    </style>\n\n</resources>"
  },
  {
    "path": "component/samples/androidsample/androidsample/Resources/values-v11/styles.xml",
    "content": "<resources>\n\n    <!--\n        Base application theme for API 11+. This theme completely replaces\n        AppBaseTheme from res/values/styles.xml on API 11+ devices.\n    -->\n    <style name=\"AppBaseTheme\" parent=\"android:Theme.Holo.Light\">\n        <!-- API 11 theme customizations can go here. -->\n    </style>\n\n</resources>"
  },
  {
    "path": "component/samples/androidsample/androidsample/Resources/values-v14/styles.xml",
    "content": "<resources>\n\n    <!--\n        Base application theme for API 14+. This theme completely replaces\n        AppBaseTheme from BOTH res/values/styles.xml and\n        res/values-v11/styles.xml on API 14+ devices.\n    -->\n    <style name=\"AppBaseTheme\" parent=\"android:Theme.Holo.Light.DarkActionBar\">\n        <!-- API 14 theme customizations can go here. -->\n    </style>\n\n</resources>"
  },
  {
    "path": "component/samples/androidsample/androidsample/ToDoActivity.cs",
    "content": "using System;\nusing Android.OS;\nusing Android.App;\nusing Android.Views;\nusing Android.Widget;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices;\n\n\nnamespace androidsample\n{\n\t[Activity (MainLauncher = true, \n\t           Icon=\"@drawable/ic_launcher\", Label=\"@string/app_name\",\n\t           Theme=\"@style/AppTheme\")]\n\tpublic class ToDoActivity : Activity\n\t{\n\t\t//Mobile Service Client reference\n\t\tprivate MobileServiceClient client;\n\n\t\t//Mobile Service Table used to access data\n\t\tprivate IMobileServiceTable<ToDoItem> toDoTable;\n\n\t\t//Adapter to sync the items list with the view\n\t\tprivate ToDoItemAdapter adapter;\n\n\t\t//EditText containing the \"New ToDo\" text\n\t\tprivate EditText textNewToDo;\n\n\t\t//Progress spinner to use for table operations\n\t\tprivate ProgressBar progressBar;\n\n        const string applicationURL = @\"MOBILE SERVICE URL\";\n\t\tconst string applicationKey = @\"APPLICATION KEY\";\n\n\t\tprotected override async void OnCreate (Bundle bundle)\n\t\t{\n\t\t\tbase.OnCreate (bundle);\n\n\t\t\t// Set our view from the \"main\" layout resource\n\t\t\tSetContentView (Resource.Layout.Activity_To_Do);\n\n\t\t\tprogressBar = FindViewById<ProgressBar> (Resource.Id.loadingProgressBar);\n\n\t\t\t// Initialize the progress bar\n\t\t\tprogressBar.Visibility = ViewStates.Gone;\n\n\t\t\t// Create ProgressFilter to handle busy state\n\t\t\tvar progressHandler = new ProgressHandler ();\n\t\t\tprogressHandler.BusyStateChange += (busy) => {\n\t\t\t\tif (progressBar != null) \n\t\t\t\t\tprogressBar.Visibility = busy ? ViewStates.Visible : ViewStates.Gone;\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tCurrentPlatform.Init ();\n\n\t\t\t\t// Create the Mobile Service Client instance, using the provided\n\t\t\t\t// Mobile Service URL and key\n\t\t\t\tclient = new MobileServiceClient (\n\t\t\t\t\tapplicationURL,\n\t\t\t\t\tapplicationKey, progressHandler);\n\n\t\t\t\t// Get the Mobile Service Table instance to use\n\t\t\t\ttoDoTable = client.GetTable <ToDoItem> ();\n\n\t\t\t\ttextNewToDo = FindViewById<EditText> (Resource.Id.textNewToDo);\n\n\t\t\t\t// Create an adapter to bind the items with the view\n\t\t\t\tadapter = new ToDoItemAdapter (this, Resource.Layout.Row_List_To_Do);\n\t\t\t\tvar listViewToDo = FindViewById<ListView> (Resource.Id.listViewToDo);\n\t\t\t\tlistViewToDo.Adapter = adapter;\n\n\t\t\t\t// Load the items from the Mobile Service\n\t\t\t\tawait RefreshItemsFromTableAsync ();\n\n\t\t\t} catch (Java.Net.MalformedURLException) {\n\t\t\t\tCreateAndShowDialog (new Exception (\"There was an error creating the Mobile Service. Verify the URL\"), \"Error\");\n\t\t\t} catch (Exception e) {\n\t\t\t\tCreateAndShowDialog (e, \"Error\");\n\t\t\t}\n\t\t}\n\n\t\t//Initializes the activity menu\n\t\tpublic override bool OnCreateOptionsMenu (IMenu menu)\n\t\t{\n\t\t\tMenuInflater.Inflate (Resource.Menu.activity_main, menu);\n\t\t\treturn true;\n\t\t}\n\n\t\t//Select an option from the menu\n\t\tpublic override bool OnOptionsItemSelected (IMenuItem item)\n\t\t{\n\t\t\tif (item.ItemId == Resource.Id.menu_refresh) {\n\t\t\t\tOnRefreshItemsSelected ();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t// Called when the refresh menu opion is selected\n\t\tasync void OnRefreshItemsSelected ()\n\t\t{\n\t\t\tawait RefreshItemsFromTableAsync ();\n\t\t}\n\n\t\t//Refresh the list with the items in the Mobile Service Table\n\t\tasync Task RefreshItemsFromTableAsync ()\n\t\t{\n\t\t\ttry {\n\t\t\t\t// Get the items that weren't marked as completed and add them in the\n\t\t\t\t// adapter\n\t\t\t\tvar list = await toDoTable.Where (item => item.Complete == false).ToListAsync ();\n\n\t\t\t\tadapter.Clear ();\n\n\t\t\t\tforeach (ToDoItem current in list)\n\t\t\t\t\tadapter.Add (current);\n\n\t\t\t} catch (Exception e) {\n\t\t\t\tCreateAndShowDialog (e, \"Error\");\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task CheckItem (ToDoItem item)\n\t\t{\n\t\t\tif (client == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the item as completed and update it in the table\n\t\t\titem.Complete = true;\n\t\t\ttry {\n\t\t\t\tawait toDoTable.UpdateAsync (item);\n\t\t\t\tif (item.Complete)\n\t\t\t\t\tadapter.Remove (item);\n\n\t\t\t} catch (Exception e) {\n\t\t\t\tCreateAndShowDialog (e, \"Error\");\n\t\t\t}\n\t\t}\n\n\t\t[Java.Interop.Export()]\n\t\tpublic async void AddItem (View view)\n\t\t{\n\t\t\tif (client == null || string.IsNullOrWhiteSpace (textNewToDo.Text)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Create a new item\n\t\t\tvar item = new ToDoItem {\n\t\t\t\tText = textNewToDo.Text,\n\t\t\t\tComplete = false\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\t// Insert the new item\n\t\t\t\tawait toDoTable.InsertAsync (item);\n\n\t\t\t\tif (!item.Complete) {\n\t\t\t\t\tadapter.Add (item);\n\t\t\t\t}\n\t\t\t} catch (Exception e) {\n\t\t\t\tCreateAndShowDialog (e, \"Error\");\n\t\t\t}\n\n\t\t\ttextNewToDo.Text = \"\";\n\t\t}\n\n\t\tvoid CreateAndShowDialog (Exception exception, String title)\n\t\t{\n\t\t\tCreateAndShowDialog (exception.Message, title);\n\t\t}\n\n\t\tvoid CreateAndShowDialog (string message, string title)\n\t\t{\n\t\t\tAlertDialog.Builder builder = new AlertDialog.Builder (this);\n\n\t\t\tbuilder.SetMessage (message);\n\t\t\tbuilder.SetTitle (title);\n\t\t\tbuilder.Create ().Show ();\n\t\t}\n\n\t\tclass ProgressHandler : DelegatingHandler\n\t\t{\n\t\t\tint busyCount = 0;\n\n\t\t\tpublic event Action<bool> BusyStateChange;\n\n\t\t\t#region implemented abstract members of HttpMessageHandler\n\n\t\t\tprotected override async Task<HttpResponseMessage> SendAsync (HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\t //assumes always executes on UI thread\n\t\t\t\tif (busyCount++ == 0 && BusyStateChange != null)\n\t\t\t\t\tBusyStateChange (true);\n\n\t\t\t\tvar response = await base.SendAsync (request, cancellationToken);\n\n\t\t\t\t// assumes always executes on UI thread\n\t\t\t\tif (--busyCount == 0 && BusyStateChange != null)\n\t\t\t\t\tBusyStateChange (false);\n\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\t#endregion\n\n\t\t}\n\t}\n}\n\n\n"
  },
  {
    "path": "component/samples/androidsample/androidsample/ToDoItem.cs",
    "content": "using System;\nusing Newtonsoft.Json;\n\nnamespace androidsample\n{\n\tpublic class ToDoItem\n\t{\n\t\tpublic string Id { get; set; }\n\n\t\t[JsonProperty(PropertyName = \"text\")]\n\t\tpublic string Text { get; set; }\n\n\t\t[JsonProperty(PropertyName = \"complete\")]\n\t\tpublic bool Complete { get; set; }\n\t}\n\n\tpublic class ToDoItemWrapper : Java.Lang.Object\n\t{\n\t\tpublic ToDoItemWrapper (ToDoItem item)\n\t\t{\n\t\t\tToDoItem = item;\n\t\t}\n\n\t\tpublic ToDoItem ToDoItem { get; private set; }\n\t}\n}\n\n"
  },
  {
    "path": "component/samples/androidsample/androidsample/ToDoItemAdapter.cs",
    "content": "using System;\nusing Android.App;\nusing Android.Views;\nusing Android.Widget;\nusing System.Collections.Generic;\n\nnamespace androidsample\n{\n\tpublic class ToDoItemAdapter : BaseAdapter<ToDoItem>\n\t{\n\t\tActivity activity;\n\t\tint layoutResourceId;\n\t\tList<ToDoItem> items = new List<ToDoItem> ();\n\n\t\tpublic ToDoItemAdapter (Activity activity, int layoutResourceId)\n\t\t{\n\t\t\tthis.activity = activity;\n\t\t\tthis.layoutResourceId = layoutResourceId;\n\t\t}\n\n\t\t//Returns the view for a specific item on the list\n\t\tpublic override View GetView (int position, Android.Views.View convertView, Android.Views.ViewGroup parent)\n\t\t{\n\t\t\tvar row = convertView;\n\t\t\tvar currentItem = this [position];\n\t\t\tCheckBox checkBox;\n\n\t\t\tif (row == null) {\n\t\t\t\tvar inflater = activity.LayoutInflater;\n\t\t\t\trow = inflater.Inflate (layoutResourceId, parent, false);\n\n\t\t\t\tcheckBox = row.FindViewById <CheckBox> (Resource.Id.checkToDoItem);\n\n\t\t\t\tcheckBox.CheckedChange += async (sender, e) => {\n\t\t\t\t\tvar cbSender = sender as CheckBox;\n\t\t\t\t\tif (cbSender != null && cbSender.Tag is ToDoItemWrapper && cbSender.Checked) {\n\t\t\t\t\t\tcbSender.Enabled = false;\n\t\t\t\t\t\tif (activity is ToDoActivity)\n\t\t\t\t\t\t\tawait ((ToDoActivity)activity).CheckItem ((cbSender.Tag as ToDoItemWrapper).ToDoItem);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else\n\t\t\t\tcheckBox = row.FindViewById <CheckBox> (Resource.Id.checkToDoItem);\n\n\t\t\tcheckBox.Text = currentItem.Text;\n\t\t\tcheckBox.Checked = false;\n\t\t\tcheckBox.Enabled = true;\n\t\t\tcheckBox.Tag = new ToDoItemWrapper (currentItem);\n\n\t\t\treturn row;\n\t\t}\n\n\t\tpublic void Add (ToDoItem item)\n\t\t{\n\t\t\titems.Add (item);\n\t\t\tNotifyDataSetChanged ();\n\t\t}\n\n\t\tpublic void Clear ()\n\t\t{\n\t\t\titems.Clear ();\n\t\t\tNotifyDataSetChanged ();\n\t\t}\n\n\t\tpublic void Remove (ToDoItem item)\n\t\t{\n\t\t\titems.Remove (item);\n\t\t\tNotifyDataSetChanged ();\n\t\t}\n\n\t\t#region implemented abstract members of BaseAdapter\n\n\t\tpublic override long GetItemId (int position)\n\t\t{\n\t\t\treturn position;\n\t\t}\n\n\t\tpublic override int Count {\n\t\t\tget {\n\t\t\t\treturn items.Count;\n\t\t\t}\n\t\t}\n\n\t\tpublic override ToDoItem this [int position] {\n\t\t\tget {\n\t\t\t\treturn items [position];\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\t}\n}\n\n"
  },
  {
    "path": "component/samples/androidsample/androidsample/androidsample.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{8E1FCCF4-1FA7-4C23-86B0-19C78B155AA3}</ProjectGuid>\n    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <RootNamespace>androidsample</RootNamespace>\n    <AndroidApplication>True</AndroidApplication>\n    <AndroidResgenFile>Resources\\Resource.designer.cs</AndroidResgenFile>\n    <AndroidResgenClass>Resource</AndroidResgenClass>\n    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>\n    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>\n    <AssemblyName>androidsample</AssemblyName>\n    <AndroidManifest>Properties\\AndroidManifest.xml</AndroidManifest>\n    <AndroidUseLatestPlatformSdk>true</AndroidUseLatestPlatformSdk>\n    <TargetFrameworkVersion>\n    </TargetFrameworkVersion>\n    <AndroidSupportedAbis>armeabi,armeabi-v7a,x86</AndroidSupportedAbis>\n    <AndroidStoreUncompressedFileExtensions />\n    <MandroidI18n />\n    <JavaMaximumHeapSize />\n    <JavaOptions />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AndroidLinkMode>None</AndroidLinkMode>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>full</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>\n    <ConsolePause>false</ConsolePause>\n    <AndroidSupportedAbis>armeabi,armeabi-v7a</AndroidSupportedAbis>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\lib\\android\\Microsoft.WindowsAzure.Mobile.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile.Ext, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\lib\\android\\Microsoft.WindowsAzure.Mobile.Ext.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\lib\\android\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.15.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\lib\\android\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.15.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\lib\\android\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"Mono.Android\" />\n    <Reference Include=\"Mono.Android.Export\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Resources\\Resource.designer.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"ToDoActivity.cs\" />\n    <Compile Include=\"ToDoItem.cs\" />\n    <Compile Include=\"ToDoItemAdapter.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"Resources\\AboutResources.txt\" />\n    <None Include=\"Assets\\AboutAssets.txt\" />\n    <None Include=\"Properties\\AndroidManifest.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AndroidResource Include=\"Resources\\values\\Strings.xml\" />\n    <AndroidResource Include=\"Resources\\layout\\Activity_To_Do.axml\" />\n    <AndroidResource Include=\"Resources\\layout\\Row_List_To_Do.axml\" />\n    <AndroidResource Include=\"Resources\\values\\styles.xml\" />\n    <AndroidResource Include=\"Resources\\drawable-ldpi\\ic_launcher.png\" />\n    <AndroidResource Include=\"Resources\\drawable-mdpi\\ic_launcher.png\" />\n    <AndroidResource Include=\"Resources\\drawable-xhdpi\\ic_launcher.png\" />\n    <AndroidResource Include=\"Resources\\drawable-hdpi\\ic_launcher.png\" />\n    <AndroidResource Include=\"Resources\\menu\\activity_main.xml\" />\n    <AndroidResource Include=\"Resources\\values-v11\\styles.xml\" />\n    <AndroidResource Include=\"Resources\\values-v14\\styles.xml\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Novell\\Novell.MonoDroid.CSharp.targets\" />\n  <ItemGroup>\n    <Folder Include=\"Resources\\drawable\\\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "component/samples/androidsample/androidsample/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"2.5.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "component/samples/androidsample/androidsample.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"androidsample\", \"androidsample\\androidsample.csproj\", \"{8E1FCCF4-1FA7-4C23-86B0-19C78B155AA3}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8E1FCCF4-1FA7-4C23-86B0-19C78B155AA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8E1FCCF4-1FA7-4C23-86B0-19C78B155AA3}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8E1FCCF4-1FA7-4C23-86B0-19C78B155AA3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{8E1FCCF4-1FA7-4C23-86B0-19C78B155AA3}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8E1FCCF4-1FA7-4C23-86B0-19C78B155AA3}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8E1FCCF4-1FA7-4C23-86B0-19C78B155AA3}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(MonoDevelopProperties) = preSolution\n\t\tStartupItem = androidsample\\androidsample.csproj\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "component/samples/iOSsample/iOSsample/AppDelegate.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Foundation;\nusing UIKit;\n\nnamespace iOSsample\n{\n\t// The UIApplicationDelegate for the application. This class is responsible for launching the \n\t// User Interface of the application, as well as listening (and optionally responding) to \n\t// application events from iOS.\n\t[Foundation.Register(\"AppDelegate\")]\n\tpublic partial class AppDelegate : UIApplicationDelegate\n\t{\n\t\t// class-level declarations\n\t\tpublic override UIWindow Window {get; set;}\n\t}\n}\n\n"
  },
  {
    "path": "component/samples/iOSsample/iOSsample/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>UIDeviceFamily</key>\n\t<array>\n\t\t<integer>1</integer>\n\t\t<integer>2</integer>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t</array>\n\t<key>UIMainStoryboardFile</key>\n\t<string>MainStoryboard_iPhone</string>\n\t<key>UIMainStoryboardFile~ipad</key>\n\t<string>MainStoryboard_iPad</string>\n\t<key>MinimumOSVersion</key>\n\t<string>7.0</string>\n\t<key>CFBundleIconFiles</key>\n\t<array>\n\t\t<string>Icon.png</string>\n\t\t<string>Icon@2x.png</string>\n\t\t<string>Icon-72.png</string>\n\t\t<string>Icon-72@2x.png</string>\n\t\t<string>Default.png</string>\n\t\t<string>Default@2x.png</string>\n\t\t<string>Default-568h@2x.png</string>\n\t\t<string>Default-Landscape.png</string>\n\t\t<string>Default-Landscape@2x.png</string>\n\t\t<string>Default-Portrait.png</string>\n\t\t<string>Default-Portrait@2x.png</string>\n\t</array>\n\t<key>CFBundleDisplayName</key>\n\t<string>iOSsample</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>net.azure-mobile.iOSsample</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>NSMainNibFile</key>\n\t<string></string>\n\t<key>NSMainNibFile~ipad</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "component/samples/iOSsample/iOSsample/Main.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Foundation;\nusing UIKit;\n\nnamespace iOSsample\n{\n\tpublic class Application\n\t{\n\t\t// This is the main entry point of the application.\n\t\tstatic void Main (string[] args)\n\t\t{\n\t\t\t// if you want to use a different Application Delegate class from \"AppDelegate\"\n\t\t\t// you can specify it here.\n\t\t\tUIApplication.Main (args, null, \"AppDelegate\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "component/samples/iOSsample/iOSsample/MainStoryboard_iPad.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"4510\" systemVersion=\"12F45\" targetRuntime=\"iOS.CocoaTouch.iPad\" propertyAccessControl=\"none\" initialViewController=\"551-os-lVi\">\n    <dependencies>\n        <deployment version=\"1280\" identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"3742\"/>\n    </dependencies>\n    <scenes>\n        <!--Todo List View Controller-->\n        <scene sceneID=\"OmJ-hW-MIu\">\n            <objects>\n                <tableViewController id=\"551-os-lVi\" customClass=\"QSTodoListViewController\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"default\" allowsSelection=\"NO\" showsSelectionImmediatelyOnTouchBegin=\"NO\" rowHeight=\"95\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" id=\"xrR-li-BWs\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"768\" height=\"1024\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <view key=\"tableHeaderView\" contentMode=\"scaleToFill\" id=\"qBK-sY-jQV\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"768\" height=\"142\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <subviews>\n                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" placeholder=\"Enter text to create a new item\" minimumFontSize=\"17\" clearButtonMode=\"always\" id=\"ALC-rm-TZz\">\n                                    <rect key=\"frame\" x=\"20\" y=\"92\" width=\"604\" height=\"30\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                                    <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"18\" maxX=\"0.0\" maxY=\"-18\"/>\n                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                    <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\" returnKeyType=\"done\"/>\n                                    <connections>\n                                        <outlet property=\"delegate\" destination=\"551-os-lVi\" id=\"Akp-2J-66j\"/>\n                                    </connections>\n                                </textField>\n                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"ltD-J6-53a\">\n                                    <rect key=\"frame\" x=\"632\" y=\"92\" width=\"116\" height=\"31\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" flexibleMinX=\"YES\" flexibleMaxY=\"YES\"/>\n                                    <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"18\" maxX=\"0.0\" maxY=\"-18\"/>\n                                    <state key=\"normal\" title=\"add item\">\n                                        <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                    </state>\n                                    <connections>\n                                        <action selector=\"OnAdd:\" destination=\"551-os-lVi\" eventType=\"touchUpInside\" id=\"Kom-et-hWR\"/>\n                                    </connections>\n                                </button>\n                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"MICROSOFT AZURE\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"1cc-xK-Rin\">\n                                    <rect key=\"frame\" x=\"20\" y=\"38\" width=\"190\" height=\"21\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                    <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"18\" maxX=\"0.0\" maxY=\"-18\"/>\n                                    <fontDescription key=\"fontDescription\" name=\"Helvetica-Light\" family=\"Helvetica\" pointSize=\"15\"/>\n                                    <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"MOBILE SERVICES\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"dTJ-Ul-k3q\">\n                                    <rect key=\"frame\" x=\"20\" y=\"61\" width=\"216\" height=\"21\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                    <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"18\" maxX=\"0.0\" maxY=\"-18\"/>\n                                    <fontDescription key=\"fontDescription\" name=\"Helvetica-Light\" family=\"Helvetica\" pointSize=\"22\"/>\n                                    <color key=\"textColor\" white=\"0.33333333333333331\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <activityIndicatorView hidden=\"YES\" opaque=\"NO\" contentMode=\"scaleToFill\" hidesWhenStopped=\"YES\" style=\"whiteLarge\" id=\"fIF-wW-bwk\">\n                                    <rect key=\"frame\" x=\"711\" y=\"30\" width=\"37\" height=\"37\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" flexibleMinX=\"YES\" flexibleMaxY=\"YES\"/>\n                                    <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"18\" maxX=\"0.0\" maxY=\"-18\"/>\n                                </activityIndicatorView>\n                            </subviews>\n                            <color key=\"backgroundColor\" red=\"0.29069221090000003\" green=\"0.69721934539999997\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                            <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"0.0\" maxX=\"0.0\" maxY=\"-18\"/>\n                        </view>\n                        <prototypes>\n                            <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"blue\" hidesAccessoryWhenEditing=\"NO\" indentationLevel=\"1\" indentationWidth=\"0.0\" reuseIdentifier=\"Cell\" rowHeight=\"95\" id=\"Xjk-I7-Xkr\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"164\" width=\"768\" height=\"95\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Xjk-I7-Xkr\" id=\"Flm-V9-LDa\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"768\" height=\"94\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" tag=\"1\" contentMode=\"left\" text=\"Label\" lineBreakMode=\"wordWrap\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"Ev4-LY-G6R\">\n                                            <rect key=\"frame\" x=\"20\" y=\"12\" width=\"728\" height=\"70\"/>\n                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                                            <fontDescription key=\"fontDescription\" name=\"Helvetica-Light\" family=\"Helvetica\" pointSize=\"23\"/>\n                                            <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                            <color key=\"highlightedColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                        </label>\n                                    </subviews>\n                                </tableViewCellContentView>\n                            </tableViewCell>\n                        </prototypes>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"551-os-lVi\" id=\"x7a-n5-jA7\"/>\n                            <outlet property=\"delegate\" destination=\"551-os-lVi\" id=\"2cX-8J-yDT\"/>\n                        </connections>\n                    </tableView>\n                    <connections>\n                        <outlet property=\"activityIndicator\" destination=\"fIF-wW-bwk\" id=\"USI-OS-I5E\"/>\n                        <outlet property=\"itemText\" destination=\"ALC-rm-TZz\" id=\"Ked-U0-enb\"/>\n                    </connections>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"KZM-yb-nnR\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-389\" y=\"-201\"/>\n        </scene>\n    </scenes>\n    <simulatedMetricsContainer key=\"defaultSimulatedMetrics\">\n        <simulatedStatusBarMetrics key=\"statusBar\"/>\n        <simulatedOrientationMetrics key=\"orientation\"/>\n        <simulatedScreenMetrics key=\"destination\"/>\n    </simulatedMetricsContainer>\n</document>"
  },
  {
    "path": "component/samples/iOSsample/iOSsample/MainStoryboard_iPhone.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"4510\" systemVersion=\"12F45\" targetRuntime=\"iOS.CocoaTouch\" variant=\"6xAndEarlier\" propertyAccessControl=\"none\" initialViewController=\"PsD-7a-zsW\">\n    <dependencies>\n        <deployment version=\"1296\" identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"3742\"/>\n    </dependencies>\n    <scenes>\n        <!--Todo List View Controller-->\n        <scene sceneID=\"cCY-SB-wT5\">\n            <objects>\n                <tableViewController id=\"PsD-7a-zsW\" customClass=\"QSTodoListViewController\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" opaque=\"NO\" clipsSubviews=\"YES\" clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"50\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" id=\"lJ7-Ej-a4P\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"20\" width=\"320\" height=\"460\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <view key=\"tableHeaderView\" contentMode=\"scaleToFill\" id=\"Zzr-0r-JZE\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"114\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <subviews>\n                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"MICROSOFT AZURE\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"MOv-Tv-Dw1\">\n                                    <rect key=\"frame\" x=\"21\" y=\"11\" width=\"245\" height=\"21\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                    <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"18\" maxX=\"0.0\" maxY=\"-18\"/>\n                                    <fontDescription key=\"fontDescription\" name=\"Helvetica-Light\" family=\"Helvetica\" pointSize=\"11\"/>\n                                    <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"MOBILE SERVICES\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"kaZ-ps-3HH\">\n                                    <rect key=\"frame\" x=\"20\" y=\"29\" width=\"245\" height=\"23\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                    <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"18\" maxX=\"0.0\" maxY=\"-18\"/>\n                                    <fontDescription key=\"fontDescription\" name=\"Helvetica-Light\" family=\"Helvetica\" pointSize=\"16\"/>\n                                    <color key=\"textColor\" white=\"0.33333333333333331\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" borderStyle=\"roundedRect\" placeholder=\"Enter text to create a new item\" minimumFontSize=\"17\" clearButtonMode=\"always\" id=\"nO8-cY-LyE\">\n                                    <rect key=\"frame\" x=\"20\" y=\"61\" width=\"239\" height=\"30\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                                    <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"18\" maxX=\"0.0\" maxY=\"-18\"/>\n                                    <fontDescription key=\"fontDescription\" name=\"Helvetica-Light\" family=\"Helvetica\" pointSize=\"14\"/>\n                                    <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\" returnKeyType=\"done\"/>\n                                    <connections>\n                                        <outlet property=\"delegate\" destination=\"PsD-7a-zsW\" id=\"F5p-Ky-maM\"/>\n                                    </connections>\n                                </textField>\n                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"yMs-Fo-DAR\">\n                                    <rect key=\"frame\" x=\"267\" y=\"60\" width=\"33\" height=\"31\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" flexibleMinX=\"YES\" flexibleMaxY=\"YES\"/>\n                                    <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"18\" maxX=\"0.0\" maxY=\"-18\"/>\n                                    <state key=\"normal\" title=\"+\">\n                                        <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                    </state>\n                                    <connections>\n                                        <action selector=\"OnAdd:\" destination=\"PsD-7a-zsW\" eventType=\"touchUpInside\" id=\"ca9-fm-Ukn\"/>\n                                    </connections>\n                                </button>\n                                <activityIndicatorView hidden=\"YES\" opaque=\"NO\" contentMode=\"scaleToFill\" hidesWhenStopped=\"YES\" style=\"whiteLarge\" id=\"oKL-Dt-wFv\">\n                                    <rect key=\"frame\" x=\"263\" y=\"11\" width=\"37\" height=\"37\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                    <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"18\" maxX=\"0.0\" maxY=\"-18\"/>\n                                </activityIndicatorView>\n                            </subviews>\n                            <color key=\"backgroundColor\" red=\"0.35138999355116407\" green=\"0.72893445696778558\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                            <inset key=\"insetFor6xAndEarlier\" minX=\"0.0\" minY=\"0.0\" maxX=\"0.0\" maxY=\"-18\"/>\n                        </view>\n                        <prototypes>\n                            <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" hidesAccessoryWhenEditing=\"NO\" indentationLevel=\"1\" indentationWidth=\"0.0\" reuseIdentifier=\"Cell\" id=\"kgS-w8-LCj\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"136\" width=\"320\" height=\"50\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"kgS-w8-LCj\" id=\"3QP-vz-80h\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"49\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" tag=\"1\" contentMode=\"TopLeft\" text=\"Label\" lineBreakMode=\"wordWrap\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"v25-fG-XJA\">\n                                            <rect key=\"frame\" x=\"20\" y=\"3\" width=\"280\" height=\"43\"/>\n                                            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMinY=\"YES\" flexibleMaxY=\"YES\"/>\n                                            <fontDescription key=\"fontDescription\" name=\"Helvetica-Light\" family=\"Helvetica\" pointSize=\"17\"/>\n                                            <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                            <color key=\"highlightedColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                        </label>\n                                    </subviews>\n                                </tableViewCellContentView>\n                            </tableViewCell>\n                        </prototypes>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"PsD-7a-zsW\" id=\"1kc-wy-iWs\"/>\n                            <outlet property=\"delegate\" destination=\"PsD-7a-zsW\" id=\"32f-Tu-X3C\"/>\n                        </connections>\n                    </tableView>\n                    <toolbarItems/>\n                    <connections>\n                        <outlet property=\"activityIndicator\" destination=\"oKL-Dt-wFv\" id=\"9no-GR-SBX\"/>\n                        <outlet property=\"itemText\" destination=\"nO8-cY-LyE\" id=\"hXs-U6-qt6\"/>\n                    </connections>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"rQM-X1-JbL\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"162\" y=\"64\"/>\n        </scene>\n    </scenes>\n    <simulatedMetricsContainer key=\"defaultSimulatedMetrics\">\n        <simulatedStatusBarMetrics key=\"statusBar\"/>\n        <simulatedOrientationMetrics key=\"orientation\"/>\n        <simulatedScreenMetrics key=\"destination\"/>\n    </simulatedMetricsContainer>\n</document>"
  },
  {
    "path": "component/samples/iOSsample/iOSsample/QSTodoListViewController.cs",
    "content": "// This file has been autogenerated from parsing an Objective-C header file added in Xcode.\nusing System;\nusing UIKit;\nusing Foundation;\nusing System.Threading.Tasks;\n\nnamespace iOSsample\n{\n\tpublic partial class QSTodoListViewController : UITableViewController\n\t{\n\n\t\tQSTodoService todoService;\n\t\tbool useRefreshControl = false;\n\n\t\tpublic QSTodoListViewController (IntPtr handle) : base (handle)\n\t\t{\n\t\t}\n\n\t\tpublic override async void ViewDidLoad ()\n\t\t{\n\t\t\tbase.ViewDidLoad ();\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\ttodoService = new QSTodoService();\n\t\t\t}\n\t\t\tcatch (UriFormatException)\n\t\t\t{\n\t\t\t\tvar alert = new UIAlertView(\"Error\", \"Please make sure you update the applicationURL and applicationKey to match the mobile service you have created.\", null, \"OK\");\n\t\t\t\talert.Show();\n\t\t\t\treturn;\t\t        \n\t\t\t}\n\n\t\t\ttodoService.BusyUpdate += (bool busy) => {\n\t\t\t\tif (busy)\n\t\t\t\t\tactivityIndicator.StartAnimating ();\n\t\t\t\telse \n\t\t\t\t\tactivityIndicator.StopAnimating ();\n\t\t\t};\n\n\t\t\tawait RefreshAsync ();\n\n\t\t\tAddRefreshControl ();\n\t\t}\n\n\t\tasync Task RefreshAsync ()\n\t\t{\n\t\t\t// only activate the refresh control if the feature is available\n\t\t\tif (useRefreshControl)\n\t\t\t\tRefreshControl.BeginRefreshing ();\n\n\t\t\tawait todoService.RefreshDataAsync ();\n\n\t\t\tif (useRefreshControl) \n\t\t\t\tRefreshControl.EndRefreshing ();\n\n\t\t\tTableView.ReloadData ();\n\t\t}\n\n\t\t#region UITableView methods\n\t\tpublic override nint RowsInSection (UITableView tableview, nint section)\n\t\t{\n\t\t\tif (todoService == null || todoService.Items == null)\n\t\t\t\treturn 0;\n\n\t\t\treturn todoService.Items.Count;\n\t\t}\n\n\t\tpublic override nint NumberOfSections (UITableView tableView)\n\t\t{\n\t\t\treturn 1;\n\t\t}\n\n\t\tpublic override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)\n\t\t{\n\t\t\tconst string CellIdentifier = @\"Cell\";\n\t\t\tvar cell = tableView.DequeueReusableCell (CellIdentifier);\n\t\t\tif (cell == null) {\n\t\t\t\tcell = new UITableViewCell (UITableViewCellStyle.Default, CellIdentifier);\n\t\t\t}\n\n\t\t\t// Set the label on the cell and make sure the label color is black (in case this cell\n\t\t\t// has been reused and was previously greyed out\n\t\t\tvar label = (UILabel)cell.ViewWithTag ((nint)1);\n\t\t\tlabel.TextColor = UIColor.Black;\n\t\t\tlabel.Text = todoService.Items [indexPath.Row].Text;\n\n\t\t\treturn cell;\n\t\t}\n\n\t\tpublic override string TitleForDeleteConfirmation (UITableView tableView, NSIndexPath indexPath)\n\t\t{\n\t\t\t// Customize the Delete button to say \"complete\"\n\t\t\treturn @\"complete\";\n\t\t}\n\n\t\tpublic override UITableViewCellEditingStyle EditingStyleForRow (UITableView tableView, NSIndexPath indexPath)\n\t\t{\n\t\t\t// Find the item that is about to be edited\n\t\t\tvar item = todoService.Items [indexPath.Row];\n\n\t\t\t// If the item is complete, then this is just pending upload. Editing is not allowed\n\t\t\tif (item.Complete)\n\t\t\t\treturn UITableViewCellEditingStyle.None;\n\n\t\t\t// Otherwise, allow the delete button to appear\n\t\t\treturn UITableViewCellEditingStyle.Delete;\n\t\t}\n\n\t\tasync public override void CommitEditingStyle (UITableView tableView, UITableViewCellEditingStyle editingStyle, NSIndexPath indexPath)\n\t\t{\n\t\t\t// Find item that was commited for editing (completed)\n\t\t\tvar item = todoService.Items [indexPath.Row];\n\n\t\t\t// Change the appearance to look greyed out until we remove the item\n\t\t\tvar label = (UILabel)TableView.CellAt (indexPath).ViewWithTag (1);\n\t\t\tlabel.TextColor = UIColor.Gray;\n\n\t\t\t// Ask the todoService to set the item's complete value to YES, and remove the row if successful\n\t\t\tawait todoService.CompleteItemAsync (item);\n\n\t\t\t// Remove the row from the UITableView\n\t\t\ttableView.DeleteRows (new [] { indexPath }, UITableViewRowAnimation.Top);\n\t\t}\n\n\t\t#endregion\n\n\t\t#region UI Actions\n\t\tasync partial void OnAdd (NSObject sender)\n\t\t{\n\t\t\tif (string.IsNullOrWhiteSpace (itemText.Text))\n\t\t\t\treturn;\n\n\t\t\tvar newItem = new ToDoItem {\n\t\t\t\tText = itemText.Text, \n\t\t\t\tComplete = false\n\t\t\t};\n\n\t\t\tawait todoService.InsertTodoItemAsync (newItem);\n\n\t\t\tvar index = todoService.Items.FindIndex (item => item.Id == newItem.Id);\n\n\t\t\tTableView.InsertRows (new [] { NSIndexPath.FromItemSection (index, 0) },\n\t\t\tUITableViewRowAnimation.Top);\n\n\t\t\titemText.Text = \"\";\n\t\t}\n\n\t\t#endregion\n\n\t\t#region UITextFieldDelegate methods\n\t\t[Foundation.Export(\"textFieldShouldReturn:\")]\n\t\tpublic virtual bool ShouldReturn (UITextField textField)\n\t\t{\n\t\t\ttextField.ResignFirstResponder ();\n\t\t\treturn true;\n\t\t}\n\t\t#endregion\n\n\t\t#region * iOS Specific Code\n\t\t// This method will add the UIRefreshControl to the table view if\n\t\t// it is available, ie, we are running on iOS 6+\n\t\tvoid AddRefreshControl ()\n\t\t{\n\t\t\tif (UIDevice.CurrentDevice.CheckSystemVersion (6, 0)) {\n\t\t\t\t// the refresh control is available, let's add it\n\t\t\t\tRefreshControl = new UIRefreshControl ();\n\t\t\t\tRefreshControl.ValueChanged += async (sender, e) => {\n\t\t\t\t\tawait RefreshAsync ();\n\t\t\t\t};\n\t\t\t\tuseRefreshControl = true;\n\t\t\t}\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "component/samples/iOSsample/iOSsample/QSTodoListViewController.designer.cs",
    "content": "// WARNING\n//\n// This file has been generated automatically by Xamarin Studio to store outlets and\n// actions made in the Xcode designer. If it is removed, they will be lost.\n// Manual changes to this file may not be handled correctly.\n//\nusing Foundation;\n\nnamespace iOSsample\n{\n\t[Foundation.Register(\"QSTodoListViewController\")]\n\tpartial class QSTodoListViewController\n\t{\n\t\t[Foundation.Outlet]\n\t\tUIKit.UIActivityIndicatorView activityIndicator { get; set; }\n\n\t\t[Foundation.Outlet]\n\t\tUIKit.UITextField itemText { get; set; }\n\n\t\t[Foundation.Action(\"OnAdd:\")]\n\t\tpartial void OnAdd (Foundation.NSObject sender);\n\t\t\n\t\tvoid ReleaseDesignerOutlets ()\n\t\t{\n\t\t\tif (itemText != null) {\n\t\t\t\titemText.Dispose ();\n\t\t\t\titemText = null;\n\t\t\t}\n\n\t\t\tif (activityIndicator != null) {\n\t\t\t\tactivityIndicator.Dispose ();\n\t\t\t\tactivityIndicator = null;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "component/samples/iOSsample/iOSsample/QSTodoService.cs",
    "content": "using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing Microsoft.WindowsAzure.MobileServices;\n\nnamespace iOSsample\n{\n\tpublic class QSTodoService : DelegatingHandler\n\t{\t\t\n        const string applicationURL = @\"MOBILE SERVICE URL\";\n\t\tconst string applicationKey = @\"APPLICATION KEY\";\n\t\tMobileServiceClient client;\n\t\tIMobileServiceTable<ToDoItem> todoTable;\n\t\tint busyCount = 0;\n\n\t\tpublic event Action<bool> BusyUpdate;\n\n\t\tpublic QSTodoService ()\n\t\t{\n\t\t\tCurrentPlatform.Init ();\n\n\t\t\t// Initialize the Mobile Service client with your URL and key\n\t\t\tclient = new MobileServiceClient (applicationURL, applicationKey, this);\n\n\t\t\t// Create an MSTable instance to allow us to work with the TodoItem table\n\t\t\ttodoTable = client.GetTable <ToDoItem> ();\n\t\t}\n     \n\t\tpublic List<ToDoItem> Items { get; private set;}\n\n\t\tasync public Task<List<ToDoItem>> RefreshDataAsync ()\n\t\t{\n\t\t\ttry {\n\t\t\t\t// This code refreshes the entries in the list view by querying the TodoItems table.\n\t\t\t\t// The query excludes completed TodoItems\n\t\t\t\tItems = await todoTable\n\t\t\t\t\t.Where (todoItem => todoItem.Complete == false).ToListAsync ();\n\n\t\t\t} catch (MobileServiceInvalidOperationException e) {\n\t\t\t\tConsole.Error.WriteLine (@\"ERROR {0}\", e.Message);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn Items;\n\t\t}\n\n\t\tpublic async Task InsertTodoItemAsync (ToDoItem todoItem)\n\t\t{\n\t\t\ttry {\n\t\t\t\t// This code inserts a new TodoItem into the database. When the operation completes\n\t\t\t\t// and Mobile Services has assigned an Id, the item is added to the CollectionView\n\t\t\t\tawait todoTable.InsertAsync (todoItem);\n\t\t\t\tItems.Add (todoItem); \n\n\t\t\t} catch (MobileServiceInvalidOperationException e) {\n\t\t\t\tConsole.Error.WriteLine (@\"ERROR {0}\", e.Message);\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task CompleteItemAsync (ToDoItem item)\n\t\t{\n\t\t\ttry {\n\t\t\t\t// This code takes a freshly completed TodoItem and updates the database. When the MobileService \n\t\t\t\t// responds, the item is removed from the list \n\t\t\t\titem.Complete = true;\n\t\t\t\tawait todoTable.UpdateAsync (item);\n\t\t\t\tItems.Remove (item);\n\n\t\t\t} catch (MobileServiceInvalidOperationException e) {\n\t\t\t\tConsole.Error.WriteLine (@\"ERROR {0}\", e.Message);\n\t\t\t}\n\t\t}\n\n\t\tvoid Busy (bool busy)\n\t\t{\n\t\t\t// assumes always executes on UI thread\n\t\t\tif (busy) {\n\t\t\t\tif (busyCount++ == 0 && BusyUpdate != null)\n\t\t\t\t\tBusyUpdate (true);\n\n\t\t\t} else {\n\t\t\t\tif (--busyCount == 0 && BusyUpdate != null)\n\t\t\t\t\tBusyUpdate (false);\n\n\t\t\t}\n\t\t}\n\n\t\t#region implemented abstract members of HttpMessageHandler\n\n\t\tprotected override async Task<System.Net.Http.HttpResponseMessage> SendAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)\n\t\t{\n\t\t\tBusy (true);\n\t\t\tvar response = await base.SendAsync (request, cancellationToken);\n\n\t\t\tBusy (false);\n\t\t\treturn response;\n\t\t}\n\n\t\t#endregion\n\t}\n}\n\n"
  },
  {
    "path": "component/samples/iOSsample/iOSsample/ToDoItem.cs",
    "content": "using System;\nusing Newtonsoft.Json;\n\nnamespace iOSsample\n{\n\tpublic class ToDoItem\n\t{\n\t\tpublic string Id { get; set; }\n\n\t\t[JsonProperty(PropertyName = \"text\")]\n\t\tpublic string Text { get; set; }\n\n\t\t[JsonProperty(PropertyName = \"complete\")]\n\t\tpublic bool Complete { get; set; }\n\t}\n}\n\n"
  },
  {
    "path": "component/samples/iOSsample/iOSsample/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"2.5.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "component/samples/iOSsample/iOSsample/iOSsample.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">iPhoneSimulator</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}</ProjectGuid>\n    <ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>iOSsample</RootNamespace>\n    <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>\n    <AssemblyName>iOSsample</AssemblyName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Debug</OutputPath>\n    <DefineConstants>DEBUG;</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <MtouchLink>SdkOnly</MtouchLink>\n    <ConsolePause>false</ConsolePause>\n    <MtouchDebug>True</MtouchDebug>\n    <MtouchSdkVersion>8.1</MtouchSdkVersion>\n    <MtouchProfiling>False</MtouchProfiling>\n    <MtouchExtraArgs />\n    <MtouchFastDev>False</MtouchFastDev>\n    <MtouchEnableGenericValueTypeSharing>True</MtouchEnableGenericValueTypeSharing>\n    <MtouchArch>Default, i386</MtouchArch>\n    <MtouchUseLlvm>False</MtouchUseLlvm>\n    <MtouchUseThumb>False</MtouchUseThumb>\n    <MtouchUseSGen>False</MtouchUseSGen>\n    <MtouchUseRefCounting>False</MtouchUseRefCounting>\n    <MtouchOptimizePNGs>False</MtouchOptimizePNGs>\n    <MtouchI18n />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' \">\n    <DebugType>full</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <MtouchLink>None</MtouchLink>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhone' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhone\\Debug</OutputPath>\n    <DefineConstants>DEBUG;</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <MtouchDebug>true</MtouchDebug>\n    <ConsolePause>false</ConsolePause>\n    <CodesignKey>iPhone Developer</CodesignKey>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhone' \">\n    <DebugType>full</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhone\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Ad-Hoc|iPhone' \">\n    <DebugType>full</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhone\\Ad-Hoc</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <BuildIpa>true</BuildIpa>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'AppStore|iPhone' \">\n    <DebugType>full</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhone\\AppStore</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodesignKey>iPhone Distribution</CodesignKey>\n    <ConsolePause>false</ConsolePause>\n    <CodesignProvision>Automatic:AppStore</CodesignProvision>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\lib\\ios-unified\\Microsoft.WindowsAzure.Mobile.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile.Ext, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\lib\\ios-unified\\Microsoft.WindowsAzure.Mobile.Ext.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\lib\\ios-unified\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.15.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\lib\\ios-unified\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.15.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\lib\\ios-unified\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"Xamarin.iOS\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"Info.plist\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Main.cs\" />\n    <Compile Include=\"AppDelegate.cs\" />\n    <Compile Include=\"QSTodoListViewController.cs\" />\n    <Compile Include=\"QSTodoListViewController.designer.cs\">\n      <DependentUpon>QSTodoListViewController.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"QSTodoService.cs\" />\n    <Compile Include=\"ToDoItem.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <InterfaceDefinition Include=\"MainStoryboard_iPhone.storyboard\" />\n    <InterfaceDefinition Include=\"MainStoryboard_iPad.storyboard\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Xamarin\\iOS\\Xamarin.iOS.CSharp.targets\" />\n  <ItemGroup>\n    <BundleResource Include=\"Resources\\Icon.png\" />\n    <BundleResource Include=\"Resources\\Icon%402x.png\" />\n    <BundleResource Include=\"Resources\\Icon-72.png\" />\n    <BundleResource Include=\"Resources\\Icon-72%402x.png\" />\n    <BundleResource Include=\"Resources\\Default.png\" />\n    <BundleResource Include=\"Resources\\Default%402x.png\" />\n    <BundleResource Include=\"Resources\\Default-568h%402x.png\" />\n    <BundleResource Include=\"Resources\\Default-Portrait.png\" />\n    <BundleResource Include=\"Resources\\Default-Landscape.png\" />\n    <BundleResource Include=\"Resources\\Default-Portrait%402x.png\" />\n    <BundleResource Include=\"Resources\\Default-Landscape%402x.png\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "component/samples/iOSsample/iOSsample.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.30110.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"iOSsample\", \"iOSsample\\iOSsample.csproj\", \"{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|iPhone = Debug|iPhone\n\t\tDebug|iPhoneSimulator = Debug|iPhoneSimulator\n\t\tRelease|iPhone = Release|iPhone\n\t\tRelease|iPhoneSimulator = Release|iPhoneSimulator\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}.Debug|iPhone.ActiveCfg = Debug|iPhone\n\t\t{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}.Debug|iPhone.Build.0 = Debug|iPhone\n\t\t{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}.Debug|iPhone.Deploy.0 = Debug|iPhone\n\t\t{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator\n\t\t{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator\n\t\t{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator\n\t\t{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}.Release|iPhone.ActiveCfg = Release|iPhone\n\t\t{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}.Release|iPhone.Build.0 = Release|iPhone\n\t\t{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}.Release|iPhone.Deploy.0 = Release|iPhone\n\t\t{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator\n\t\t{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator\n\t\t{07F1CD1B-626F-4BE5-9840-97B44CBB94C9}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(MonoDevelopProperties) = preSolution\n\t\tStartupItem = iOSsample\\iOSsample.csproj\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "docs/README.md",
    "content": "# Azure Mobile Services Documentation\n\nAzure Mobile Services has been deprecated.  This documentation is a copy of the\ndocumentation at the point at which the service was deprecated.  No further\nupdates will be made to these documents.\n\nThis service has been superseded by Azure App Service Mobile Apps.  We recommend\nusing Azure Mobile Apps for all new mobile backend deployments.  Read\n[this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/)\nto learn more about the pending deprecation of this service.  \n\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nList of documents (from the original left-hand navigation)\n\nAdditional documents can be accessed by browsing the directory.\n\n* Get started\n  * [Get started with iOS](mobile-services-ios-get-started.md)\n  * [Get started with Xamarin Android](partner-xamarin-mobile-services-android-get-started.md)\n  * [Get started with Xamarin iOS](partner-xamarin-mobile-services-ios-get-started.md)\n  * [Get started with Android](mobile-services-android-get-started.md)\n  * [Get started with Windows](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n\n* Store data\n  * [Connect your app to Table storage](mobile-services-dotnet-backend-store-data-table-storage.md)\n  * [Connect your app to DocumentDB](http://giventocode.com/how-to-use-azure-documentdb-with-azure-mobile-services#.VOZ7csJ0x9C)\n  * [Connect your app to an on-premise SQL Database](mobile-services-dotnet-backend-hybrid-connections-get-started.md)\n  * [Connect your app to an existing SQL Database](mobile-services-dotnet-backend-use-existing-sql-database.md)\n\n* Enable offline & Sync\n  * [Sync your app data and work offline](mobile-services-ios-get-started-offline-data.md)\n  * [Handle conflicts with offline data Sync](mobile-services-ios-handling-conflicts-offline-data.md)\n\n* Authentication users\n  * [Add Active Directory authentication to your app](mobile-services-dotnet-backend-ios-adal-sso-authentication.md)\n  * [Add Facebook, Google or Twitter authentication to your app](mobile-services-ios-get-started-users.md)\n  * [Add custom authentication to your app](mobile-services-dotnet-backend-get-started-custom-authentication.md)\n\n* Send push notifications\n  * [Add push notifications to your app](mobile-services-javascript-backend-ios-get-started-push.md)\n  * [Send push notifications to authenticated users](mobile-services-javascript-backend-ios-push-notifications-app-users.md)\n  * [Send personalized and localized push notifications](https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-ios-xplat-localized-apns-push-notification/)\n  * [Troubleshoot sending push](https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-push-notification-fixer/)\n\n* How to manage\n  * [Define a custom endpoint](mobile-services-javascript-backend-define-custom-api.md)\n  * [Use multiple clients with a single mobile service](mobile-services-how-to-use-multiple-clients-single-service.md)\n  * [Build scalable apps that talk to Azure SQL database](mobile-services-sql-scale-guidance.md)\n  * [Prepare for disaster recovery](mobile-services-disaster-recovery.md)\n\n* Automate\n  * [Deploy and manage a mobile service using command-line Tools](mobile-services-manage-command-line-interface.md)\n  * [Deploy a mobile service using source control](mobile-services-store-scripts-source-control.md)\n  * [Execute backend tasks on a schedule](mobile-services-schedule-recurring-tasks.md)\n"
  },
  {
    "path": "docs/mobile-services-android-get-started-data.md",
    "content": "<properties\n\tpageTitle=\"Get started with data on Android  (JavaScript backend) | Microsoft Azure\"\n\tdescription=\"Learn how to get started using Mobile Services to leverage data in your Android app  (JavaScript backend).\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"android\"\n\tauthors=\"RickSaling\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-android\"\n\tms.devlang=\"java\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ricksal\"/>\n\n# Add Mobile Services to an existing Android app (JavaScript backend)\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Summary\n\nThis topic shows you how to use Azure Mobile Services to add persistent data to an Android app. In this tutorial, you will download an app that stores data in memory, create a new mobile service, integrate the app with the mobile service so that it stores and updates data in Azure Mobile Services instead of locally, and then use the Azure classic portal to view changes to data that were made by running the app.\n\nThis tutorial helps you understand in more detail how Azure Mobile Services can store and retrieve data from an Android app. So it walks you through many of the steps that are already completed for you in the Mobile Services quickstart tutorial. If this is your first experience with Mobile Services, consider first completing the tutorial [Get started with Mobile Services](mobile-services-android-get-started.md).\n\n## Prerequisites\n\nTo complete this tutorial, you need the following:\n\n- an Azure account. If you don't have an account, you can create a free trial account in just a couple of minutes. For details, see [Azure Free Trial](http://azure.microsoft.com/pricing/free-trial/?WT.mc_id=AED8DE357).\n\n- the [Azure Mobile Services Android SDK];\n- the [Android Studio integrated development environment](https://developer.android.com/sdk/index.html), which includes the Android SDK; and Android 4.2 or a later version. The downloaded GetStartedWithData project requires Android 4.2 or a later version. However, the Mobile Services SDK requires only Android 2.2 or a later version.\n\n## Sample Code\n\nTo see the completed source code, go [here](https://github.com/Azure/mobile-services-samples/tree/master/GettingStartedWithData/AndroidStudio).\n\n## Download the GetStartedWithData project\n\n### Get the sample code\n\nThis tutorial is built on **GetStartedWithData**, which is an Android app. The UI for this app is identical to the one in the Mobile Services Android quickstart, except that items that are added to the list are stored locally in memory. You will add the code needed to persist the data to storage.\n\n\n1. Download the samples repository from gitHub by clicking <a href=\"https://github.com/Azure/mobile-services-samples\" target=\"blank\">here</a> and then Click **Download ZIP**.\n\n2. Unzip the downloaded file and make a note of its location, or move it to your Android Studio projects directory.\n\n3. Open Android Studio. If you are working with a different project and it appears, close the project (**File => Close Project**).\n\n4. Select **Open an existing Android Studio project**, browse to the project location in the *AndroidStudio* folder of *GettingStartedWithData*, and then click **OK.**\n\n\n \t![](./media/mobile-services-android-get-started/android-studio-import-project.png)\n\n\tThe project is now ready for you to work with.\n\n### Inspect and run the sample code\n\n1. In Project Explorer, expand **app** => **src** => **main** => **java** => **com.example.GetStartedWithData** and then open the *ToDoActivity.java* file.\n\n   \t![](./media/download-android-sample-code/mobile-services-android-studio-project.png)\n\n   \tNotice that there are `//TODO` comments that specify the steps you must take to make this app work with your mobile service.\n\n2. From the **Run** menu, click **Run app**.\n\n3. The **Choose Device** dialog will appear.\n\n\t![](./media/mobile-services-android-run-sample-code/android-studio-choose-device.png)\n\n\t> [AZURE.NOTE] You can run this project using an Android phone, or using the Android emulator. Running with an Android phone  requires you to download a phone-specific USB driver.\n\t>\n\t> To run the project in the Android emulator, you must define a least one Android Virtual Device (AVD). Use the AVD Manager to create and manage these devices.\n\n4. Choose either a connected device, or *Launch Emulator*.\n\n5. When the app appears, type meaningful text, such as _Complete the tutorial_, and then click **Add**.\n\n   \t![](./media/download-android-sample-code/mobile-quickstart-startup-android.png)\n\n   \tNotice that the saved text is stored in an in-memory collection and displayed in the list below.\n\n## Create a new mobile service in the Azure classic portal\n\nNext, you will create a new mobile service to replace the in-memory list for data storage. Follow these steps to create a new mobile service.\n\n1. Log into the [Azure classic portal](https://manage.windowsazure.com/).\n2.\tAt the bottom of the navigation pane, click **+NEW**.\n\n\t![plus-new](./media/mobile-services-create-new-service-data/plus-new.png)\n\n3.\tExpand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![mobile-create](./media/mobile-services-create-new-service-data/mobile-create.png)\n\n    This displays the **New Mobile Service** dialog.\n\n4.\tIn the **Create a mobile service** page, select **Create a free 20 MB SQL Database**, then type a subdomain name for the new mobile service in the **URL** textbox and wait for name verification. Once name verification completes, click the right arrow button to go to the next page.\n\n\t![mobile-create-page1](./media/mobile-services-create-new-service-data/mobile-create-page1.png)\n\n    This displays the **Specify database settings** page.\n\n\t> [AZURE.NOTE] As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n5.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\n\t![mobile-create-page2](./media/mobile-services-create-new-service-data/mobile-create-page2.png)\n\n\t> [AZURE.NOTE] When the password that you supply does not meet the minimum requirements or when there is a mismatch, a warning is displayed.  \n\t>\n\t> We recommend that you make a note of the administrator login name and password that you specify; you will need this information to reuse the SQL Database instance or the server in the future.\n\nYou have now created a new mobile service that can be used by your mobile apps. Next, you will add a new table in which to store app data. This table will be used by the app in place of the in-memory collection.\n\n## Add a new table to the mobile service\n\nTo be able to store app data in the new mobile service, you must first create a new table in the associated SQL Database instance.\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, and then click the mobile service that you just created.\n\n2. Click the **Data** tab, then click **+Create**.\n\n   \tThis displays the **Create new table** dialog.\n\n3. In **Table name** type _TodoItem_, then click the check button. This creates a new storage table **TodoItem** with the default permissions set. This means that anyone with the application key, which is distributed with your app, can access and change data in the table.\n\n    >[AZURE.NOTE] The same table name is used in Mobile Services quickstart. However, each table is created in a schema that is specific to a given mobile service. This is to prevent data collisions when multiple mobile services use the same database.\n\n4. Click the new **TodoItem** table and verify that there are no data rows.\n\n5. Click the **Columns** tab. Verify that the following default columns are automatically created for you:\n\n\t<table border=\"1\" cellpadding=\"10\">\n \t<tr>\n \t<th>Column Name</th>\n \t<th>Type</th>\n \t<th>Index</th>\n \t</tr>\n \t<tr>\n \t<td>id</td>\n \t<td>string</td>\n \t<td>Indexed</td>\n \t</tr>\n \t<tr>\n \t<td>__createdAt</td>\n \t<td>date</td>\n \t<td>Indexed</td>\n \t</tr>\n \t<tr>\n \t<td>__updatedAt</td>\n \t<td>date</td>\n \t<td><font color=\"transparent\">-</font></td>\n \t</tr>\n \t<tr>\n \t<td>__version</td>\n \t<td>timestamp (MSSQL)</td>\n \t<td><font color=\"transparent\">-</font></td>\n \t</tr> \t\n \t</table> \t\n\n\n  \tThis is the minimum requirement for a table in Mobile Services.\n\n    > [AZURE.NOTE] When dynamic schema is enabled on your mobile service, new columns are created automatically when JSON objects are sent to the mobile service by an insert or update operation.\n\nYou are now ready to use the new mobile service as data storage for the app.\n\n\n## Update the app to use the mobile service for data access\n\nNow that your mobile service is ready, you can update the app to store items in Mobile Services instead of the local collection.\n\n1. Verify that you have the following lines in the **dependencies** tag in the *build.gradle (Module app)* file, and if not add them. This adds references to the Mobile Services Android Client SDK.\n\n\t\tcompile 'com.android.support:support-v4:21.0.3'\n    \tcompile 'com.google.code.gson:gson:2.2.2'\n\t    compile 'com.google.guava:guava:18.0'\n\t    compile 'com.microsoft.azure:azure-mobile-services-android-sdk:2.0.2+'\n\n\n2. Now rebuild the project by clicking on **Sync Project with Gradle Files**.\n\n3. Open the AndroidManifest.xml file and add the following line, which enables the app to access Mobile Services in Azure.\n\n\t\t<uses-permission android:name=\"android.permission.INTERNET\" />\n\n\n4. In Project Explorer, open the TodoActivity.java file located in  the **GetStartedWithData => app => src => java** folder, and uncomment the following lines of code:\n\n\n\n\t\timport java.net.MalformedURLException;\n\t\timport android.os.AsyncTask;\n\t\timport com.google.common.util.concurrent.FutureCallback;\n\t\timport com.google.common.util.concurrent.Futures;\n\t\timport com.google.common.util.concurrent.ListenableFuture;\n\t\timport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\n\t\timport com.microsoft.windowsazure.mobileservices.MobileServiceList;\n\t\timport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\n\t\timport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\n\t\timport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\n\t\timport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\t\timport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\n\n\n5. Comment out the following lines:\n\n\t\timport java.util.ArrayList;\n\t\timport java.util.List;\n\n6. We will remove the in-memory list currently used by the app, so we can replace it with a mobile service. In the **ToDoActivity** class, comment out the following line of code, which defines the existing **toDoItemList** list.\n\n\t\tpublic List<ToDoItem> toDoItemList = new ArrayList<ToDoItem>();\n\n7. Save the file, and the project will indicate build errors. Search for the three remaining locations where the `toDoItemList` variable is used and comment out the sections indicated. This fully removes the in-memory list.\n\n8. We now add our mobile service. Uncomment the following lines of code:\n\n\t\tprivate MobileServiceClient mClient;\n\t\tprivate private MobileServiceTable<ToDoItem> mToDoTable;\n\n9. Find the *ProgressFilter* class at the bottom of the file and uncomment it. This class displays a 'loading' indicator while *MobileServiceClient* is running network operations.\n\n\n10. In the Azure classic portal, click **Mobile Services**, and then click the mobile service you just created.\n\n11. Click the **Dashboard** tab and make a note of the **Site URL**, then click **Manage keys** and make a note of the **Application key**.\n\n   \t![](./media/download-android-sample-code/mobile-dashboard-tab.png)\n\n  \tYou will need these values when accessing the mobile service from your app code.\n\n12. In the **onCreate** method, uncomment the following lines of code that define the **MobileServiceClient** variable:\n\n\t\ttry {\n\t\t// Create the Mobile Service Client instance, using the provided\n\t\t// Mobile Service URL and key\n\t\t\tmClient = new MobileServiceClient(\n\t\t\t\t\t\"MobileServiceUrl\",\n\t\t\t\t\t\"AppKey\",\n\t\t\t\t\tthis).withFilter(new ProgressFilter());\n\n\t\t\t// Get the Mobile Service Table instance to use\n\t\t\tmToDoTable = mClient.getTable(ToDoItem.class);\n\t\t} catch (MalformedURLException e) {\n\t\t\tcreateAndShowDialog(new Exception(\"There was an error creating the Mobile Service. Verify the URL\"), \"Error\");\n\t\t}\n\n  \tThis creates a new instance of *MobileServiceClient* that is used to access your mobile service. It also creates the *MobileServiceTable* instance that is used to proxy data storage in the mobile service.\n\n13. In the code above, replace `MobileServiceUrl` and `AppKey` with the URL and application key from your mobile service, in that order.\n\n\n\n14. Uncommment these lines of the **checkItem** method:\n\n\t    new AsyncTask<Void, Void, Void>() {\n\t        @Override\n\t        protected Void doInBackground(Void... params) {\n\t            try {\n\t                mToDoTable.update(item).get();\n\t                runOnUiThread(new Runnable() {\n\t                    public void run() {\n\t                        if (item.isComplete()) {\n\t                            mAdapter.remove(item);\n\t                        }\n\t                        refreshItemsFromTable();\n\t                    }\n\t                });\n\t            } catch (Exception exception) {\n\t                createAndShowDialog(exception, \"Error\");\n\t            }\n\t            return null;\n\t        }\n\t    }.execute();\n\n   \tThis sends an item update to the mobile service and removes checked items from the adapter.\n\n15. Uncommment these lines of the **addItem** method:\n\n\t\t// Insert the new item\n\t\tnew AsyncTask<Void, Void, Void>() {\n\t        @Override\n\t        protected Void doInBackground(Void... params) {\n\t            try {\n\t                mToDoTable.insert(item).get();\n\t                if (!item.isComplete()) {\n\t                    runOnUiThread(new Runnable() {\n\t                        public void run() {\n\t                            mAdapter.add(item);\n\t                        }\n\t                    });\n\t                }\n\t            } catch (Exception exception) {\n\t                createAndShowDialog(exception, \"Error\");\n\t            }\n\t            return null;\n\t        }\n\t    }.execute();\n\n\n  \tThis code creates a new item and inserts it into the table in the remote mobile service.\n\n16. Uncommment these lines of the **refreshItemsFromTable** method:\n\n\t\t// Get the items that weren't marked as completed and add them in the adapter\n\t    new AsyncTask<Void, Void, Void>() {\n\t        @Override\n\t        protected Void doInBackground(Void... params) {\n\t            try {\n\t                final MobileServiceList<ToDoItem> result = mToDoTable.where().field(\"complete\").eq(false).execute().get();\n\t                runOnUiThread(new Runnable() {\n\t                    @Override\n\t                    public void run() {\n\t                        mAdapter.clear();\n\n\t                        for (ToDoItem item : result) {\n\t                            mAdapter.add(item);\n\t                        }\n\t                    }\n\t                });\n\t            } catch (Exception exception) {\n\t                createAndShowDialog(exception, \"Error\");\n\t            }\n\t            return null;\n\t        }\n\t    }.execute();\n\n\tThis queries the mobile service and returns all items that are not marked as complete. Items are added to the adapter for binding.\n\n## Test the app against your new mobile service\n\nNow that the app has been updated to use Mobile Services for back end storage, you can test it against Mobile Services, using either the Android emulator or an Android phone.\n\n1. From the **Run** menu, click **Run app** to start the project.\n\n\tThis executes your app, built with the Android SDK, that uses the client library to send a query that returns items from your mobile service.\n\n5. As before, type meaningful text, then click **Add**.\n\n   \tThis sends a new item as an insert to the mobile service.\n\n3. In the [Azure classic portal], click **Mobile Services**, and then click your mobile service.\n\n4. Click the **Data** tab, then click **Browse**.\n\n   \t![][9]\n\n   \tNotice that the **TodoItem** table now contains data, with some values generated by Mobile Services, and that columns have been automatically added to the table to match the TodoItem class in the app.\n\nThis concludes the **Get started with data** tutorial for Android.\n\n## Troubleshooting\n\n### Verify Android SDK Version\n\nBecause of ongoing development, the Android SDK version installed in Android Studio might not match the version in the code. The Android SDK referenced in this tutorial is version 21, the latest at the time of writing. The version number may increase as new releases of the SDK appear, and we recomend using the latest version available.\n\nTwo symptoms of version mismatch are:\n\n1. When you Build or Rebuild the project, you may get Gradle error messages like \"**failed to find target Google Inc.:Google APIs:n**\".\n\n2. Standard Android objects in code that should resolve based on `import` statements may be generating error messages.\n\nIf either of these appear, the version of the Android SDK installed in Android Studio might not match the SDK target of the downloaded project.  To verify the version, make the following changes:\n\n\n1. In Android Studio, click **Tools** => **Android** => **SDK Manager**. If you have not installed the latest version of the SDK Platform, then click to install it. Make a note of the version number.\n\n2. In the Project Explorer tab, under **Gradle Scripts**, open the file **build.gradle (modeule: app)**. Ensure that the **compileSdkVersion** and **buildToolsVersion** are set to the latest  SDK version installed. The tags might look like this:\n\n\t \t    compileSdkVersion 'Google Inc.:Google APIs:21'\n    \t\tbuildToolsVersion \"21.1.2\"\n\n3. In the Android Studio Project Explorer right-click the project node, choose **Properties**, and in the left column choose **Android**. Ensure that the **Project Build Target** is set to the same SDK version as the **targetSdkVersion**.\n\n4. In Android Studio, the manifest file is no longer used to specify the target SDK and minimum SDK version, unlike the case with Eclipse.\n\n## Next steps\n\nThis tutorial demonstrated the basics of enabling an Android app to work with data in Mobile Services. Try these other Android tutorials:\n\n* [Get started with authentication](mobile-services-android-get-started-users.md)\n\t<br/>Learn how to authenticate users of your app.\n\n* [Get started with push notifications](mobile-services-javascript-backend-android-get-started-push.md)\n  <br/>Learn how to send a very basic push notification to your app with Mobile Services.\n\n<!-- Anchors. -->\n[Download the Android app project]: #download-app\n[Create the mobile service]: #create-service\n[Add a data table for storage]: #add-table\n[Update the app to use Mobile Services]: #update-app\n[Test the app against Mobile Services]: #test-app\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n[8]: ./media/mobile-services-android-get-started-data/mobile-dashboard-tab.png\n[9]: ./media/mobile-services-android-get-started-data/mobile-todoitem-data-browse.png\n[12]: ./media/mobile-services-android-get-started-data/mobile-eclipse-project.png\n[13]: ./media/mobile-services-android-get-started-data/mobile-quickstart-startup-android.png\n[14]: ./media/mobile-services-android-get-started-data/mobile-services-import-android-workspace.png\n[15]: ./media/mobile-services-android-get-started-data/mobile-services-import-android-project.png\n\n\n<!-- URLs. -->\n[Mobile Services Android SDK]: http://aka.ms/Iajk6q\n[Azure classic portal]: https://manage.windowsazure.com/\n[Azure Mobile Services Android SDK]: http://aka.ms/Iajk6q\n[GitHub]:  http://go.microsoft.com/fwlink/p/?LinkID=282122\n[Android SDK]: https://go.microsoft.com/fwLink/p/?LinkID=280125\n"
  },
  {
    "path": "docs/mobile-services-android-get-started-offline-data.md",
    "content": "<properties\n\tpageTitle=\"Add Offline Data Sync to your Android Mobile Services app | Microsoft Azure\"\n\tdescription=\"Learn how to use Azure Mobile Services to cache and sync offline data in your Android application\"\n\tdocumentationCenter=\"android\"\n\tauthors=\"RickSaling\"\n\tmanager=\"dwrede\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-android\"\n\tms.devlang=\"java\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ricksal\"/>\n\n# Add Offline Data Sync to your Android Mobile Services app\n\n> [AZURE.SELECTOR]\n- [Android)](mobile-services-android-get-started-offline-data.md)\n- [iOS](mobile-services-ios-get-started-offline-data.md)\n- [Windows](mobile-services-windows-store-dotnet-get-started-offline-data.md)\n- [Xamarin.Android](mobile-services-xamarin-android-get-started-offline-data.md)\n- [Xamarin.iOS](mobile-services-xamarin-ios-get-started-offline-data.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Summary\n\nMobile apps can lose network connectivity when moving to an area without service, or due to network issues. For example, a construction industry app used at a remote construction site might need to enter scheduling data that is synced up to Azure later. With Azure Mobile Services offline sync, you can keep working when network connectivity is lost, which is essential to many mobile apps. With offline sync, you work with a local copy of your Azure SQL Server table, and periodically re-sync the two.\n\nIn this tutorial, you'll update the app from the [Mobile Services Quick Start tutorial] to enable offline sync, and then test the app by adding data offline,  syncing those items to the online database, and verifying the changes in the Azure classic portal.\n\nWhether you are offline or connected, conflicts can arise any time multiple changes are made to data.  A future tutorial will explore handling sync conflicts, where you choose which version of the changes to accept. In this tutorial, we assume no sync conflicts and any changes you make to existing data will be applied directly to the Azure SQL Server.\n\n\n## What you need to get started\n\nThis tutorial is based on the code you download in the Mobile Services quickstart. Before you start this tutorial, you must first complete either [Get started with Mobile Services] or [Add Mobile Services to an existing app].\n\n> [AZURE.IMPORTANT] If you completed the quickstart tutorial prior to the release of Azure Mobile Services Android SDK 2.0, you must re-do it, because the SDK is not backwards compatible. To verify the version, check the **dependencies** section of your project's **build.gradle** file.\n\n## Update the app to support offline sync\n\nWith offline sync you read to and write from a *sync table* (using the *IMobileServiceSyncTable* interface), which is part of a **SQLite** database on your device.\n\nTo push and pull changes between the device and Azure Mobile Services, you use a *synchronization context* (*MobileServiceClient.SyncContext*), which you initialize with the local database that you use to store data locally.\n\n1. Add permission to check for network connectivity by adding this code to the *AndroidManifest.xml* file:\n\n\t    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n\n\n2. Add the following **import** statements to *ToDoActivity.java*:\n\n\t\timport java.util.Map;\n\n\t\timport android.widget.Toast;\n\n\t\timport com.microsoft.windowsazure.mobileservices.table.query.Query;\n\t\timport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext;\n\t\timport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncTable;\n\t\timport com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType;\n\t\timport com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore;\n\n3. Near the top of the `ToDoActivity` class, change the declaration of the `mToDoTable` variable from a `MobileServiceTable<ToDoItem>` class to a `MobileServiceSyncTable<ToDoItem>` class.\n\n\t\t private MobileServiceSyncTable<ToDoItem> mToDoTable;\n\n\tThis is where you define the sync table.\n\n4. To handle initialization of the local store, in the `onCreate` method, add the following lines after creating the `MobileServiceClient` instance:\n\n\t\t\t// Saves the query which will be used for pulling data\n\t\t\tmPullQuery = mClient.getTable(ToDoItem.class).where().field(\"complete\").eq(false);\n\n\t\t\tSQLiteLocalStore localStore = new SQLiteLocalStore(mClient.getContext(), \"ToDoItem\", null, 1);\n\t\t\tSimpleSyncHandler handler = new SimpleSyncHandler();\n\t\t\tMobileServiceSyncContext syncContext = mClient.getSyncContext();\n\n\t\t\tMap<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n\t\t\ttableDefinition.put(\"id\", ColumnDataType.String);\n\t\t\ttableDefinition.put(\"text\", ColumnDataType.String);\n\t\t\ttableDefinition.put(\"complete\", ColumnDataType.Boolean);\n\t\t\ttableDefinition.put(\"__version\", ColumnDataType.String);\n\n\t\t\tlocalStore.defineTable(\"ToDoItem\", tableDefinition);\n\t\t\tsyncContext.initialize(localStore, handler).get();\n\n\t\t\t// Get the Mobile Service Table instance to use\n\t\t\tmToDoTable = mClient.getSyncTable(ToDoItem.class);\n\n5. Following the preceding code, which is inside a `try` block, add an additional `catch` block following the `MalformedURLException` one:\n\n\t\t} catch (Exception e) {\n\t\t\tThrowable t = e;\n\t\t\twhile (t.getCause() != null) {\n\t\t\t\t\tt = t.getCause();\n\t\t\t\t}\n\t\t\tcreateAndShowDialog(new Exception(\"Unknown error: \" + t.getMessage()), \"Error\");\n\t\t}\n\n6. Add this method to verify network connectivity:\n\n\t\tprivate boolean isNetworkAvailable() {\n\t\t\tConnectivityManager connectivityManager\n\t\t\t\t\t= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);\n\t\t\tNetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();\n\t\t\treturn activeNetworkInfo != null && activeNetworkInfo.isConnected();\n\t\t}\n\n\n7. Add this method to sync between the local *SQL Light* store and the Azure SQL Server:\n\n\t\tpublic void syncAsync(){\n\t\t\tif (isNetworkAvailable()) {\n\t\t\t\tnew AsyncTask<Void, Void, Void>() {\n\n\t\t\t\t\t@Override\n\t\t\t\t\tprotected Void doInBackground(Void... params) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tmClient.getSyncContext().push().get();\n\t\t\t\t\t\t\tmToDoTable.pull(mPullQuery).get();\n\n\t\t\t\t\t\t} catch (Exception exception) {\n\t\t\t\t\t\t\tcreateAndShowDialog(exception, \"Error\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}.execute();\n\t\t\t} else {\n\t\t\t\tToast.makeText(this, \"You are not online, re-sync later!\" +\n\t\t\t\t\t\t\"\", Toast.LENGTH_LONG).show();\n\t\t\t}\n\t\t}\n\n\n8. In the `onCreate` method, add this code as the next-to-the-last line, right before the call to `refreshItemsFromTable`:\n\n\t\t\tsyncAsync();\n\n\tThis causes the device on startup to sync with the Azure table. Otherwise you would display the last offline contents of the local store.\n\n\n\n9. Update the code in the `refreshItemsFromTable` method to use this query (first line of code inside the `try` block):\n\n\t\tfinal MobileServiceList<ToDoItem> result = mToDoTable.read(mPullQuery).get();\n\n10. In the `onOptionsItemSelected` method replace the contents of the `if` block with this code:\n\n\t\t\tsyncAsync();\n\t\t\trefreshItemsFromTable();\n\n\tThis code runs when you press the **Refresh** button in the upper right corner. This is the main way you sync your local store to Azure, in addition to syncing at startup. This encourages batching of sync changes, and is efficient given that the pull from Azure is a relatively expensive operation. You could also design this app to sync on every change by adding a call to `syncAsync` to the `addItem` and `checkItem` methods, if your app required this.\n\n\n## Test the app\n\nIn this section, you will test the behavior with WiFi on, and then turn off WiFi to create an offline scenario.\n\nWhen you add data items, they are held in the local SQL Light store, but not synced to the mobile service until you press the **Refresh** button. Other apps may have different requirements regarding when data needs to be synchronized, but for demo purposes this tutorial has the user explicitly request it.\n\nWhen you press that button, a new background task starts, and first pushes all the changes made to the local store, by using the synchronization context, and then pulls all changed data from Azure to the local table.\n\n\n### Online testing\n\nLets test the following scenarios.\n\n1. Add some new items on your device;\n2. Verify the items don't show in the portal;\n3. next press **Refresh** and verify that they then show up.\n4. Change or add an item in the portal, then press **Refresh** and verify that the changes show up on your device.\n\n### Offline testing\n\n<!-- Now if you run the app and tap the refresh button, you should see all the items from the server. At that point you should be able to turn off the networking from the device by placing it in *Airplane Mode*, and continue making changes ??? the app will work just fine. When it???s time to sync the changes to the server, turn the network back on, and tap the **Refresh** button again.\n\nOne thing which is important to point out: if there are pending changes in the local store, a pull operation will first push those changes to the server (so that if there are changes in the same row, the push operation will fail and the application has an opportunity to handle the conflicts appropriately). That means that the push call in the code above isn???t necessarily required, but I think it???s always a good practice to be explicit about what the code is doing.\n-->\n\n1. Place the device or simulator in *Airplane Mode*. This creates an offline scenario.\n\n2. Add some *ToDo* items, or mark some items as complete. Quit the device or simulator (or forcibly close the app) and restart. Verify that your changes have been persisted on the device because they are held in the local SQL Light store.\n\n3. View the contents of the Azure *TodoItem* table. Verify that the new items have _not_ been synced to the server:\n\n   - For the JavaScript backend, go to the Azure classic portal, and click the Data tab to view the contents of the `TodoItem` table.\n   - For the .NET backend, view the table contents either with a SQL tool such as *SQL Server Management Studio*, or a REST client such as *Fiddler* or *Postman*.\n\n4. Turn on WiFi in the device or simulator. Next, press the **Refresh** button.\n\n5. View the TodoItem data again in the Azure classic portal. The new and changed TodoItems should now appear.\n\n\n## Next Steps\n\n* [Using Soft Delete in Mobile Services][Soft Delete]\n\n## Additional Resources\n\n* [Cloud Cover: Offline Sync in Azure Mobile Services]\n\n* [Azure Friday: Offline-enabled apps in Azure Mobile Services] \\(note: demos are for Windows, but feature discussion applies to all platforms\\)\n\n\n<!-- URLs. -->\n\n[Get the sample app]: #get-app\n[Review the Core Data model]: #review-core-data\n[Review the Mobile Services sync code]: #review-sync\n[Change the sync behavior of the app]: #setup-sync\n[Test the app]: #test-app\n\n[Get started with Mobile Services]: mobile-services-android-get-started.md\n[Add Mobile Services to an existing app]: mobile-services-android-get-started-data.md\n[Mobile Services sample repository on GitHub]: https://github.com/Azure/mobile-services-samples\n[Handling Conflicts with Offline Support for Mobile Services]:  mobile-services-android-handling-conflicts-offline-data.md\n[Soft Delete]: mobile-services-using-soft-delete.md\n\n[Cloud Cover: Offline Sync in Azure Mobile Services]: http://channel9.msdn.com/Shows/Cloud+Cover/Episode-155-Offline-Storage-with-Donna-Malayeri\n[Azure Friday: Offline-enabled apps in Azure Mobile Services]: http://azure.microsoft.com/documentation/videos/azure-mobile-services-offline-enabled-apps-with-donna-malayeri/\n\n[Mobile Services Quick Start tutorial]: mobile-services-android-get-started.md\n"
  },
  {
    "path": "docs/mobile-services-android-get-started-users.md",
    "content": "<properties\n\tpageTitle=\"Get started with authentication on Android (JavaScript backend) | Microsoft Azure\"\n\tdescription=\"Learn how to use Mobile Services to authenticate users of your Android app through a variety of identity providers, including Google, Facebook, Twitter, and Microsoft  (JavaScript backend).\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"android\"\n\tauthors=\"RickSaling\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-android\"\n\tms.devlang=\"java\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ricksal\"/>\n\n# Add authentication to your Mobile Services Android app (JavaScript backend)\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-users.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-users.md)\n- [(Android | Javascript)](mobile-services-android-get-started-users.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started-users.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-users.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-users.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-users.md)\n- [(HTML | Javascript)](mobile-services-html-get-started-users.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Summary\n\nThis topic shows you how to authenticate users in Azure Mobile Services from your app. In this tutorial, you add authentication to the quickstart project using an identity provider that is supported by Mobile Services. After being successfully authenticated and authorized by Mobile Services, the user ID value is displayed.\n\n> [AZURE.VIDEO android-getting-started-with-authentication-in-windows-azure-mobile-services]\n\nThis tutorial walks you through the basic steps to enable authentication in your app.\n\n\n## Prerequisites\n\nThis tutorial is based on the code you download in the Mobile Services quickstart. Before you start this tutorial, you must first complete either [Get started with Mobile Services] or [Add Mobile Services to an existing app].\n\n> [AZURE.IMPORTANT] If you completed the quickstart tutorial prior to the release of Azure Mobile Services Android SDK 2.0, you must re-do it, because the SDK is not backwards compatible. To verify the version, check the **dependencies** section of your project's **build.gradle** file.\n\n\n<!-- URLs.\n[Get started with Mobile Services]: mobile-services-android-get-started.md\n[Add Mobile Services to an existing app]: mobile-services-android-get-started-data.md\n-->\n\n## Register your app for authentication and configure Mobile Services\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Dashboard**, and make a note of the **Mobile Service URL** value.\n\n2. Register your app with one or more of the following authentication providers:\n   * [Google](./\nmobile-services-how-to-register-google-authentication.md)\n   * [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n   * [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n   * [Microsoft](./\nmobile-services-how-to-register-microsoft-authentication.md)\n   * [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md).\n\n    Make a note of the client identity and client secret values generated by the provider. Do not distribute or share the client secret.\n\n3. Back in the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Identity** > your identity provider settings, then enter the client ID and secret value from your provider.\n\nYou've now configured both your app and your mobile service to work with your auth provider. You may optionally repeat all these steps for each additional identity provider you'd like to support.\n\n> [AZURE.IMPORTANT] Verify that you've set the correct redirect URI on your identity provider's developer site. As described in the linked instructions for each provider above, the redirect URI may be different for a .NET backend service vs. for a JavaScript backend service. An incorrectly configured redirect URI may result in the login screen not being displayed properly and the app malfunctioning in unexpected ways.\n\n\n## Restrict permissions to authenticated users\n\n\nTo secure your endpoints, you must restrict access to only authenticated clients.\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), navigate to your mobile service, then click  **Data** > your table name (**TodoItem**) > **Permissions**.\n\n2. Set all of the table operation permissions to **Only authenticated users**.\n\n\t This ensures that all operations against the table require an authenticated user, which is required for this tutorial. You can set different permissions on each operations to support your specific scenario.  \n\n1. In Android Studio, open the project that you created when you completed the tutorial [Get started with Mobile Services].\n\n2. From the **Run** menu, then click **Run app**; verify that an unhandled exception with a status code of 401 (Unauthorized) is raised after the app starts.\n\n\t This happens because the app attempts to access Mobile Services as an unauthenticated user, but the _TodoItem_ table now requires authentication.\n\nNext, you will update the app to authenticate users before requesting resources from the mobile service.\n\n## Add authentication to the app\n\n\n1. In **Project Explorer** in Android Studio, open the ToDoActivity.java file and add the following import statements.\n\n\t\timport java.util.concurrent.ExecutionException;\n\t\timport java.util.concurrent.atomic.AtomicBoolean;\n\n\t\timport android.content.Context;\n\t\timport android.content.SharedPreferences;\n\t\timport android.content.SharedPreferences.Editor;\n\n\t\timport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider;\n\t\timport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;\n\n2. Add the following method to the **ToDoActivity** class:\n\n\t\tprivate void authenticate() {\n\t\t    // Login using the Google provider.\n\n\t\t\tListenableFuture<MobileServiceUser> mLogin = mClient.login(MobileServiceAuthenticationProvider.Google);\n\n\t    \tFutures.addCallback(mLogin, new FutureCallback<MobileServiceUser>() {\n\t    \t\t@Override\n\t    \t\tpublic void onFailure(Throwable exc) {\n\t    \t\t\tcreateAndShowDialog((Exception) exc, \"Error\");\n\t    \t\t}   \t\t\n\t    \t\t@Override\n\t    \t\tpublic void onSuccess(MobileServiceUser user) {\n\t    \t\t\tcreateAndShowDialog(String.format(\n\t                        \"You are now logged in - %1$2s\",\n\t                        user.getUserId()), \"Success\");\n\t    \t\t\tcreateTable();\n\t    \t\t}\n\t    \t});   \t\n\t\t}\n\n\n\tThis creates a new method to handle the authentication process. The user is authenticated by using a Google login. A dialog is displayed which displays the ID of the authenticated user. You cannot proceed without a positive authentication.\n\n    > [AZURE.NOTE] If you are using an identity provider other than Google, change the value passed to the **login** method above to one of the following: _MicrosoftAccount_, _Facebook_, _Twitter_, or _windowsazureactivedirectory_.\n\n3. In the **onCreate** method, add the following line of code after the code that instantiates the `MobileServiceClient` object.\n\n\t\tauthenticate();\n\n\tThis call starts the authentication process.\n\n4. Move the remaining code after `authenticate();` in the **onCreate** method to a new **createTable** method, which looks like this:\n\n\t\tprivate void createTable() {\n\n\t\t\t// Get the table instance to use.\n\t\t\tmToDoTable = mClient.getTable(ToDoItem.class);\n\n\t\t\tmTextNewToDo = (EditText) findViewById(R.id.textNewToDo);\n\n\t\t\t// Create an adapter to bind the items with the view.\n\t\t\tmAdapter = new ToDoItemAdapter(this, R.layout.row_list_to_do);\n\t\t\tListView listViewToDo = (ListView) findViewById(R.id.listViewToDo);\n\t\t\tlistViewToDo.setAdapter(mAdapter);\n\n\t\t\t// Load the items from Azure.\n\t\t\trefreshItemsFromTable();\n\t\t}\n\n9. From the **Run** menu, then click **Run app** to start the app and sign in with your chosen identity provider.\n\n   \tWhen you are successfully logged-in, the app should run without errors, and you should be able to query the backend service and make updates to data.\n\n\n## <a name=\"cache-tokens\"></a>Cache authentication tokens on the client\n\n\nThe previous example showed a standard sign-in, which requires the client to contact both the identity provider and the backend Azure service every time that the app starts. Not only is this method inefficient, you can run into usage-related issues should many customers try to start you app at the same time. A better approach is to cache the authorization token returned by the Azure service and try to use this first before using a provider-based sign-in.\n\n>[AZURE.NOTE]You can cache the token issued by the backend Azure service regardless of whether you are using client-managed or service-managed authentication. This tutorial uses service-managed authentication.\n\n\n1. Open the ToDoActivity.java file and add the following import statements:\n\n        import android.content.Context;\n        import android.content.SharedPreferences;\n        import android.content.SharedPreferences.Editor;\n\n2. Add the the following members to the `ToDoActivity` class.\n\n    \tpublic static final String SHAREDPREFFILE = \"temp\";\n\t    public static final String USERIDPREF = \"uid\";\n    \tpublic static final String TOKENPREF = \"tkn\";\n\n\n3. In the ToDoActivity.java file, add the the following definition for the `cacheUserToken` method.\n\n    \tprivate void cacheUserToken(MobileServiceUser user)\n\t    {\n    \t\tSharedPreferences prefs = getSharedPreferences(SHAREDPREFFILE, Context.MODE_PRIVATE);\n    \t    Editor editor = prefs.edit();\n\t        editor.putString(USERIDPREF, user.getUserId());\n    \t    editor.putString(TOKENPREF, user.getAuthenticationToken());\n\t        editor.commit();\n    \t}\n\n    This method stores the user id and token in a preference file that is marked private. This should protect access to the cache so that other apps on the device do not have access to the token because the preference is sandboxed for the app. However, if someone gains access to the device, it is possible that they may gain access to the token cache through other means.\n\n    >[AZURE.NOTE]You can further protect the token with encryption if token access to your data is considered highly sensitive and someone may gain access to the device. However, a completely secure solution is beyond the scope of this tutorial and dependent on your security requirements.\n\n\n4. In the ToDoActivity.java file, add the the following definition for the `loadUserTokenCache` method.\n\n    \tprivate boolean loadUserTokenCache(MobileServiceClient client)\n\t    {\n\t        SharedPreferences prefs = getSharedPreferences(SHAREDPREFFILE, Context.MODE_PRIVATE);\n    \t    String userId = prefs.getString(USERIDPREF, null);\n\t        if (userId == null)\n\t            return false;\n    \t    String token = prefs.getString(TOKENPREF, null);\n    \t    if (token == null)\n    \t        return false;\n\n    \t    MobileServiceUser user = new MobileServiceUser(userId);\n    \t    user.setAuthenticationToken(token);\n    \t    client.setCurrentUser(user);\n\n    \t    return true;\n\t    }\n\n\n\n5. In the *ToDoActivity.java* file, replace the `authenticate` method with the following method which uses a token cache. Change the login provider if you want to use an account other than Google.\n\n\t\tprivate void authenticate() {\n\t\t\t// We first try to load a token cache if one exists.\n\t\t    if (loadUserTokenCache(mClient))\n\t\t    {\n\t\t        createTable();\n\t\t    }\n\t\t    // If we failed to load a token cache, login and create a token cache\n\t\t    else\n\t\t    {\n\t\t\t    // Login using the Google provider.    \n\t\t\t\tListenableFuture<MobileServiceUser> mLogin = mClient.login(MobileServiceAuthenticationProvider.Google);\n\n\t\t    \tFutures.addCallback(mLogin, new FutureCallback<MobileServiceUser>() {\n\t\t    \t\t@Override\n\t\t    \t\tpublic void onFailure(Throwable exc) {\n\t\t    \t\t\tcreateAndShowDialog(\"You must log in. Login Required\", \"Error\");\n\t\t    \t\t}   \t\t\n\t\t    \t\t@Override\n\t\t    \t\tpublic void onSuccess(MobileServiceUser user) {\n\t\t    \t\t\tcreateAndShowDialog(String.format(\n\t\t                        \"You are now logged in - %1$2s\",\n\t\t                        user.getUserId()), \"Success\");\n\t\t    \t\t\tcacheUserToken(mClient.getCurrentUser());\n\t\t    \t\t\tcreateTable();\n\t\t    \t\t}\n\t\t    \t});\n\t\t    }\n\t\t}\n\n6. Build the app and test authentication using a valid account. Run it at least twice. During the first run, you should receive a prompt to login and create the token cache. After that, each run will attempt to load the token cache for authentication and you should not be required to login.\n\n\n\n\n\n## <a name=\"refresh-tokens\"></a>Refresh the token cache\n\nOur token cache should work in a simple case but, what happens when the token expires or is revoked? The token could expire when the app is not running. This would mean the token cache is invalid. The token could also expire while the app is actually running. The result is an HTTP status code 401 \"Unauthorized\".\n\nWe need to be able to detect an expired token, and refresh it. To do this we use a [ServiceFilter](http://dl.windowsazure.com/androiddocs/com/microsoft/windowsazure/mobileservices/ServiceFilter.html) from the [Android client library](http://dl.windowsazure.com/androiddocs/).\n\nIn this section you will define a ServiceFilter that will detect a HTTP status code 401 response and trigger a refresh of the token and the token cache. Additionally, this ServiceFilter will block other outbound requests during authentication so that those requests can use the refreshed token.\n\n1. Open the ToDoActivity.java file and add the following import statements:\n\n        import java.util.concurrent.atomic.AtomicBoolean;\n\t\timport java.util.concurrent.ExecutionException;\n\n\t\timport com.microsoft.windowsazure.mobileservices.MobileServiceException;\n\n2. Add the following members to the `ToDoActivity` class.\n\n    \tpublic boolean bAuthenticating = false;\n\t    public final Object mAuthenticationLock = new Object();\n\n    These will be used to help synchronize the authentication of the user. We only want to authenticate once. Any calls during an authentication should wait and use the new token from the authentication in progress.\n\n3. In the ToDoActivity.java file, add the following method to the ToDoActivity class that will be used to block outbound calls on other threads while authentication is in progress.\n\n\t    /**\n    \t * Detects if authentication is in progress and waits for it to complete.\n         * Returns true if authentication was detected as in progress. False otherwise.\n    \t */\n    \tpublic boolean detectAndWaitForAuthentication()\n    \t{\n    \t\tboolean detected = false;\n    \t\tsynchronized(mAuthenticationLock)\n    \t\t{\n    \t\t\tdo\n    \t\t\t{\n    \t\t\t\tif (bAuthenticating == true)\n    \t\t\t\t\tdetected = true;\n    \t\t\t\ttry\n    \t\t\t\t{\n    \t\t\t\t\tmAuthenticationLock.wait(1000);\n    \t\t\t\t}\n    \t\t\t\tcatch(InterruptedException e)\n    \t\t\t\t{}\n    \t\t\t}\n    \t\t\twhile(bAuthenticating == true);\n    \t\t}\n    \t\tif (bAuthenticating == true)\n    \t\t\treturn true;\n\n    \t\treturn detected;\n    \t}\n\n\n4. In the ToDoActivity.java file, add the following method to the ToDoActivity class. This method triggers the wait and then update the token on outbound requests when authentication is complete.\n\n\n    \t/**\n    \t * Waits for authentication to complete then adds or updates the token\n    \t * in the X-ZUMO-AUTH request header.\n    \t *\n    \t * @param request\n    \t *            The request that receives the updated token.\n    \t */\n    \tprivate void waitAndUpdateRequestToken(ServiceFilterRequest request)\n    \t{\n    \t\tMobileServiceUser user = null;\n    \t\tif (detectAndWaitForAuthentication())\n    \t\t{\n    \t\t\tuser = mClient.getCurrentUser();\n    \t\t\tif (user != null)\n    \t\t\t{\n    \t\t\t\trequest.removeHeader(\"X-ZUMO-AUTH\");\n    \t\t\t\trequest.addHeader(\"X-ZUMO-AUTH\", user.getAuthenticationToken());\n    \t\t\t}\n    \t\t}\n    \t}\n\n\n5. In the ToDoActivity.java file, update the `authenticate` method of the ToDoActivity class so that it accepts a boolean parameter to allow forcing the refresh of the token and token cache. We also need to notify any blocked threads when authentication is completed so they can pick up the new token.\n\n\t    /**\n    \t * Authenticates with the desired login provider. Also caches the token.\n    \t *\n    \t * If a local token cache is detected, the token cache is used instead of an actual\n\t     * login unless bRefresh is set to true forcing a refresh.\n    \t *\n\t     * @param bRefreshCache\n    \t *            Indicates whether to force a token refresh.\n\t     */\n    \tprivate void authenticate(boolean bRefreshCache) {\n\n\t\t    bAuthenticating = true;\n\n\t\t    if (bRefreshCache || !loadUserTokenCache(mClient))\n\t        {\n\t            // New login using the provider and update the token cache.\n\t            mClient.login(MobileServiceAuthenticationProvider.MicrosoftAccount,\n\t                    new UserAuthenticationCallback() {\n\t                        @Override\n\t                        public void onCompleted(MobileServiceUser user,\n\t                                Exception exception, ServiceFilterResponse response) {\n\n\t                    \t\tsynchronized(mAuthenticationLock)\n\t                    \t\t{\n\t\t                        \tif (exception == null) {\n\t\t                                cacheUserToken(mClient.getCurrentUser());\n                                        createTable();\n\t\t                            } else {\n\t\t                                createAndShowDialog(exception.getMessage(), \"Login Error\");\n\t\t                            }\n\t\t            \t\t\t\tbAuthenticating = false;\n\t\t            \t\t\t\tmAuthenticationLock.notifyAll();\n\t                    \t\t}\n\t                        }\n\t                    });\n\t        }\n\t\t    else\n\t\t    {\n\t\t    \t// Other threads may be blocked waiting to be notified when\n\t\t    \t// authentication is complete.\n\t\t    \tsynchronized(mAuthenticationLock)\n\t\t    \t{\n\t\t    \t\tbAuthenticating = false;\n\t\t    \t\tmAuthenticationLock.notifyAll();\n\t\t    \t}\n                createTable();\n\t\t    }\n\t    }   \n\n\n\n6. In the ToDoActivity.java file, add this code for a new `RefreshTokenCacheFilter` class inside the ToDoActivity class:\n\n\t\t/**\n\t\t* The RefreshTokenCacheFilter class filters responses for HTTP status code 401.\n\t\t * When 401 is encountered, the filter calls the authenticate method on the\n\t\t * UI thread. Out going requests and retries are blocked during authentication.\n\t\t * Once authentication is complete, the token cache is updated and\n\t\t * any blocked request will receive the X-ZUMO-AUTH header added or updated to\n\t\t * that request.   \n\t\t */\n\t\tprivate class RefreshTokenCacheFilter implements ServiceFilter {\n\n\t        AtomicBoolean mAtomicAuthenticatingFlag = new AtomicBoolean();                     \n\n\t        @Override\n\t        public ListenableFuture<ServiceFilterResponse> handleRequest(\n\t        \t\tfinal ServiceFilterRequest request,\n\t        \t\tfinal NextServiceFilterCallback nextServiceFilterCallback\n\t        \t\t)\n\t        {\n\t            // In this example, if authentication is already in progress we block the request\n\t            // until authentication is complete to avoid unnecessary authentications as\n\t            // a result of HTTP status code 401.\n\t            // If authentication was detected, add the token to the request.\n\t            waitAndUpdateRequestToken(request);\n\n\t            // Send the request down the filter chain\n\t            // retrying up to 5 times on 401 response codes.\n\t            ListenableFuture<ServiceFilterResponse> future = null;\n\t            ServiceFilterResponse response = null;\n\t            int responseCode = 401;\n\t            for (int i = 0; (i < 5 ) && (responseCode == 401); i++)\n\t            {\n\t                future = nextServiceFilterCallback.onNext(request);\n\t                try {\n\t                    response = future.get();\n\t                    responseCode = response.getStatus().getStatusCode();\n\t                } catch (InterruptedException e) {\n\t                   e.printStackTrace();\n\t                } catch (ExecutionException e) {\n\t                    if (e.getCause().getClass() == MobileServiceException.class)\n\t                    {\n\t                        MobileServiceException mEx = (MobileServiceException) e.getCause();\n\t                        responseCode = mEx.getResponse().getStatus().getStatusCode();\n\t                        if (responseCode == 401)\n\t                        {\n\t                            // Two simultaneous requests from independent threads could get HTTP status 401.\n\t                            // Protecting against that right here so multiple authentication requests are\n\t                            // not setup to run on the UI thread.\n\t                            // We only want to authenticate once. Requests should just wait and retry\n\t                            // with the new token.\n\t                            if (mAtomicAuthenticatingFlag.compareAndSet(false, true))                                                                                                      \n\t                            {\n\t                                // Authenticate on UI thread\n\t                                runOnUiThread(new Runnable() {\n\t                                    @Override\n\t                                    public void run() {\n\t                                        // Force a token refresh during authentication.\n\t                                        authenticate(true);\n\t                                    }\n\t                                });\n\t                            }\n\n\t\t\t\t                // Wait for authentication to complete then update the token in the request.\n\t\t\t\t                waitAndUpdateRequestToken(request);\n\t\t\t\t                mAtomicAuthenticatingFlag.set(false);                                                  \n\t                        }\n\t                    }\n\t                }\n\t            }\n\t            return future;\n\t        }\n\t\t}\n\n\n    This service filter will check each response for HTTP status code 401 \"Unauthorized\". If a 401 is encountered, a new login request to obtain a new token will be setup on the UI thread. Other calls will be blocked until the login is completed, or until 5 attempts have failed. If the new token is obtained, the request that triggered the 401 will be retried with the new token and any blocked calls will be retried with the new token.\n\n7. In the ToDoActivity.java file, add this code for a new `ProgressFilter` class inside the ToDoActivity class:\n\n\t\t/**\n\t\t* The ProgressFilter class renders a progress bar on the screen during the time the App is waiting for the response of a previous request.\n\t\t* the filter shows the progress bar on the beginning of the request, and hides it when the response arrived.\n\t\t*/\n\t\tprivate class ProgressFilter implements ServiceFilter {\n\t\t\t@Override\n\t\t\tpublic ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n\t\t\t\tfinal SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n\t\t\t\trunOnUiThread(new Runnable() {\n\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic void run() {\n\t\t\t\t\t\tif (mProgressBar != null) mProgressBar.setVisibility(ProgressBar.VISIBLE);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tListenableFuture<ServiceFilterResponse> future = nextServiceFilterCallback.onNext(request);\n\n\t\t\t\tFutures.addCallback(future, new FutureCallback<ServiceFilterResponse>() {\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic void onFailure(Throwable e) {\n\t\t\t\t\t\tresultFuture.setException(e);\n\t\t\t\t\t}\n\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic void onSuccess(ServiceFilterResponse response) {\n\t\t\t\t\t\trunOnUiThread(new Runnable() {\n\n\t\t\t\t\t\t\t@Override\n\t\t\t\t\t\t\tpublic void run() {\n\t\t\t\t\t\t\t\tif (mProgressBar != null) mProgressBar.setVisibility(ProgressBar.GONE);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tresultFuture.set(response);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn resultFuture;\n\t\t\t}\n\t\t}\n\n\tThis filter will show the progress bar on the beginning of the request and will hide it when the response arrived.\n\n8. In the ToDoActivity.java file, update the `onCreate` method as follows:\n\n\t\t@Override\n\t    public void onCreate(Bundle savedInstanceState) {\n\t\t    super.onCreate(savedInstanceState);\n\n\t\t    setContentView(R.layout.activity_to_do);\n\t\t    mProgressBar = (ProgressBar) findViewById(R.id.loadingProgressBar);\n\n\t\t    // Initialize the progress bar\n\t\t    mProgressBar.setVisibility(ProgressBar.GONE);\n\n\t\t    try {\n\t\t    \t// Create the Mobile Service Client instance, using the provided\n\t\t    \t// Mobile Service URL and key\n\t\t    \tmClient = new MobileServiceClient(\n\t\t    \t\t\t\"https://<YOUR MOBILE SERVICE>.azure-mobile.net/\",\n\t\t    \t\t\t\"<YOUR MOBILE SERVICE KEY>\", this)\n                           .withFilter(new ProgressFilter())\n                           .withFilter(new RefreshTokenCacheFilter());\n\n\t\t    \t// Authenticate passing false to load the current token cache if available.\n\t\t    \tauthenticate(false);\n\n\t\t    } catch (MalformedURLException e) {\n\t\t\t    createAndShowDialog(new Exception(\"Error creating the Mobile Service. \" +\n\t\t\t        \"Verify the URL\"), \"Error\");\n\t\t    }\n\t    }\n\n\n       In this code, `RefreshTokenCacheFilter` is used in addition to `ProgressFilter`. Also during `onCreate` we want to load the token cache. So `false` is passed in to the `authenticate` method.\n\n\n\n\n\n\n## <a name=\"next-steps\"></a>Next steps\n\nIn the next tutorial, [Authorize users with scripts], you will take the user ID value provided by Mobile Services based on an authenticated user and use it to filter the data returned by Mobile Services.\n\n<!-- Anchors. -->\n[Register your app for authentication and configure Mobile Services]: #register\n[Restrict table permissions to authenticated users]: #permissions\n[Add authentication to the app]: #add-authentication\n[Store authentication tokens on the client]: #cache-tokens\n[Refresh expired tokens]: #refresh-tokens\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n\n\n\n\n[4]: ./media/mobile-services-android-get-started-users/mobile-services-selection.png\n[5]: ./media/mobile-services-android-get-started-users/mobile-service-uri.png\n\n\n\n\n\n\n\n[13]: ./media/mobile-services-android-get-started-users/mobile-identity-tab.png\n[14]: ./media/mobile-services-android-get-started-users/mobile-portal-data-tables.png\n[15]: ./media/mobile-services-android-get-started-users/mobile-portal-change-table-perms.png\n\n\n<!-- URLs. -->\n\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[My Applications]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n[Live SDK for Windows]: http://go.microsoft.com/fwlink/p/?LinkId=262253\n[Get started with Mobile Services]: mobile-services-android-get-started.md\n[Authorize users with scripts]: mobile-services-javascript-backend-service-side-authorization.md\n"
  },
  {
    "path": "docs/mobile-services-android-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Azure Mobile Services for Android apps (JavaScript backend)\"\n\tdescription=\"Follow this tutorial to get started using Azure Mobile Services for Android development (JavaScript backend).\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"android\"\n\tauthors=\"RickSaling\"\n\tmanager=\"reikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-android\"\n\tms.devlang=\"java\"\n\tms.topic=\"hero-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ricksal\"/>\n\n# Get started with Mobile Services for Android  (JavaScript backend)\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis tutorial shows you how to add a cloud-based backend service to an Android app using Azure Mobile Services. In this tutorial, you will create both a new mobile service and a simple **To do list** app that stores app data in the new mobile service.\n\n> [AZURE.VIDEO mobile-get-started-android]\n\nA screenshot from the completed app is below:\n\n![](./media/mobile-services-android-get-started/mobile-quickstart-completed-android.png)\n\n## Prerequisites\n\nCompleting this tutorial requires the [Android Developer Tools](https://developer.android.com/sdk/index.html), which includes the Android Studio integrated development environment, and the latest Android platform. Android 4.2 or a later version is required.\n\nThe downloaded quickstart project contains the Azure Mobile Services SDK for Android.\n\n> [AZURE.IMPORTANT] To complete this tutorial, you need an Azure account. If you don't have an account, you can create a free trial account in just a couple of minutes. For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=AE564AB28).\n\n\n## Create a new mobile service\n\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** dialog, select **Create a free 20 MB SQL Database**, select **JavaScript** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t>[AZURE.NOTE]As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n\n## Create a new Android app\n\nOnce you have created your mobile service, you can follow an easy quickstart in the Azure classic portal to either create a new app or modify an existing app to connect to your mobile service.\n\nIn this section you will create a new Android app that is connected to your mobile service.\n\n1.  In the Azure classic portal, click **Mobile Services**, and then click the mobile service that you just created.\n\n2. In the quickstart tab, click **Android** under **Choose platform** and expand **Create a new Android app**.\n\n   \t![](./media/mobile-services-android-get-started/mobile-portal-quickstart-android1.png)\n\n   \tThis displays the three easy steps to create an Android app connected to your mobile service.\n\n  \t![](./media/mobile-services-android-get-started/mobile-quickstart-steps-android-AS.png)\n\n3. If you haven't already done so, download and install the [Android Developer Tools](https://go.microsoft.com/fwLink/p/?LinkID=280125) on your local computer or virtual machine.\n\n4. Click **Create TodoItem table** to create a table to store app data.\n\n\n5. Now download your app by pressing the **Download** button.\n\n## Run your Android app\n\nThe final stage of this tutorial is to build and run your new app.\n\n### Load project into Android Studio and sync Gradle\n\n1. Browse to the location where you saved the compressed project files and expand the files on your computer into your Android Studio projects directory.\n\n2. Open Android Studio. If you are working with a project and it appears, close the project (File => Close Project).\n\n3. Select **Open an existing Android Studio project**, browse to the project location, and then click **OK.** This will load the project and start to sync it with Gradle.\n\n \t![](./media/mobile-services-android-get-started/android-studio-import-project.png)\n\n4. Wait for the Gradle sync activity to complete. If you see a \"failed to find target\" error, this is because the version used in Android Studio doesn't match that of the sample. The easiest way to fix this is to click the **Install missing platform(s) and sync project** link in the error message. You might get additional version error messages, and you simply repeat this process until no errors appear.\n    - There is another way to fix this if you want to run with the \"latest and greatest\" version of Android. You can update the **targetSdkVersion** in the *build.gradle* file in the *app* directory to match the version already installed on your machine, which you can discover by clicking the **SDK Manager** icon and seeing what version is listed. Next you press the **Sync Project with Gradle Files**. You may get an error message for the version of Build Tools, and you fix that the same way.\n\n### Running the app\n\nYou can run the app using the emulator, or using an actual device.\n\n1. To run from a device, connect it to your computer with a USB cable. You must [set up the device for development](https://developer.android.com/training/basics/firstapp/running-app.html). If you are developing on a Windows machine, you must also download and install a USB driver.\n\n2. To run using the Android emulator, you must define at least one Android Virtual Device (AVD). Click the AVD Manager icon to create and manage these devices.\n\n3. From the **Run** menu, click **Run** to start the project. and choose a device or emulator from the dialog box that appears.\n\n4. When the app appears, type meaningful text, such as _Complete the tutorial_, and then click **Add**.\n\n   \t![](./media/mobile-services-android-get-started/mobile-quickstart-startup-android.png)\n\n   \tThis sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the TodoItem table. Items stored in the table are returned by the mobile service, and the data is displayed in the list.\n\n\t> [AZURE.NOTE] You can review the code that accesses your mobile service to query and insert data, which is found in the ToDoActivity.java file.\n\n8. Back in the Azure classic portal, click the **Data** tab and then click the **TodoItems** table.\n\n   \t![](./media/mobile-services-android-get-started/mobile-data-tab1.png)\n\n   \tThis lets you browse the data inserted by the app into the table.\n\n   \t![](./media/mobile-services-android-get-started/mobile-data-browse.png)\n\n\n\n## <a name=\"next-steps\"> </a>Next Steps\nNow that you have completed the quickstart, learn how to perform additional important tasks in Mobile Services:\n\n* [Get started with data]\n  <br/>Learn more about storing and querying data using Mobile Services.\n\n* [Get started with authentication]\n  <br/>Learn how to authenticate users of your app with an identity provider.\n\n* [Get started with push notifications]\n  <br/>Learn how to send a very basic push notification to your app.\n\n\n\n\n\n\n<!-- URLs. -->\n[Get started (Eclipse)]: mobile-services-android-get-started-ec.md\n[Get started with data]: mobile-services-android-get-started-data.md\n[Get started with authentication]: mobile-services-android-get-started-users.md\n[Get started with push notifications]: mobile-services-javascript-backend-android-get-started-push.md\n[Mobile Services Android SDK]: https://go.microsoft.com/fwLink/p/?LinkID=266533\n"
  },
  {
    "path": "docs/mobile-services-android-how-to-use-client-library.md",
    "content": "<properties\n\tpageTitle=\"Working with the Mobile Services Android Client Library\"\n\tdescription=\"Learn how to use an Android client for Azure Mobile Services.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"android\"\n\tauthors=\"RickSaling\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-android\"\n\tms.devlang=\"java\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ricksal\"/>\n\n\n# How to use the Android client library for Mobile Services\n\n> [AZURE.SELECTOR]\n- [Android](mobile-services-android-how-to-use-client-library.md)\n- [HTML/JavaScript](mobile-services-html-how-to-use-client-library.md)\n- [iOS](mobile-services-ios-how-to-use-client-library.md)\n- [Managed (Windows/Xamarin)](mobile-services-dotnet-how-to-use-client-library.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis guide shows you how to perform common scenarios using the Android client for Azure Mobile Services.  The scenarios covered include querying for data; inserting, updating, and deleting data, authenticating users, handling errors, and customizing the client.\n\nIf you are new to Mobile Services, you should first complete the quickstart tutorial [Get started with Mobile Services]. Successfully completing that tutorial ensures that you will have  installed Android Studio; it will help you configure your account and create your first mobile service, and install the Mobile Services SDK, which supports Android version 2.2 or later, but we recommend building against Android version 4.2 or later.\n\nYou can find the Javadocs API reference for the Android client library [here](http://go.microsoft.com/fwlink/p/?LinkId=298735).\n\n## <a name=\"what-is\"></a>What is Mobile Services\n\nAzure Mobile Services is a highly scalable mobile application development platform that lets you add enhanced functionality to your mobile device apps by using Azure.\n\nWith Mobile Services you can:\n\n+ **Build native and cross platform apps** - Connect your iOS, Android, Windows, or cross-platform Xamarin or Cordova (Phonegap) apps to your backend mobile service using native SDKs.  \n+ **Send push notifications to your users** - Send push notifications to your users of your app.\n+ **Authenticate your users** - Leverage popular identity providers like Facebook and Twitter to authenticate your app users.\n+ **Store data in the cloud** - Store user data in a SQL Database (by default) or in Mongo DB, DocumentDB, Azure Tables, or Azure Blobs.\n+ **Build offline-ready apps with sync** - Make your apps work offline and use Mobile Services to sync data in the background.\n+ **Monitor and scale your apps** - Monitor app usage and scale your backend as demand grows.\n\n## <a name=\"concepts\"> </a>Mobile Services Concepts\n\nThe following are important features and concepts in the Mobile Services:\n\n+ **Application key:** a unique value that is used to limit access to your mobile service from random clients; this \"key\" is not a security token and is not used to authenticate users of your app.    \n+ **Backend:** the mobile service instance that supports your app. A mobile service is implemented either as an ASP.NET Web API project (*.NET backend* ) or as a Node.js project (*JavaScript backend*).\n+ **Identity provider:** an external service, trusted by Mobile Services, that authenticates your app's users. Supported providers include: Facebook, Twitter, Google, Microsoft Account, and Azure Active Directory.\n+ **Push notification:** Service-initiated message that is sent to a registered device or user using Azure Notification Hubs.\n+ **Scale:** The ability to add, for an additional cost, more processing power, performance, and storage as your app becomes more popular.\n+ **Scheduled job:** Custom code that is run either on a pre-determined schedule or on-demand.\n\nFor more information, see [Mobile Services Concepts](./\nmobile-services-concepts-links.md).\n\n## <a name=\"setup\"></a>Setup and Prerequisites\n\nWe assume that you have created a mobile service and a table. For more information see [Create a table](http://go.microsoft.com/fwlink/p/?LinkId=298592). In the code used in this topic, we assume the table is named *ToDoItem*, and that it has the following columns:\n\n- id\n- text\n- complete\n\nThe corresponding typed client side object is the following:\n\n\tpublic class ToDoItem {\n\t\tprivate String id;\n\t\tprivate String text;\n\t\tprivate Boolean complete;\n\t}\n\nWhen dynamic schema is enabled, Azure Mobile Services automatically generates new columns based on the object in the insert or update request. For more information, see [Dynamic schema](http://go.microsoft.com/fwlink/p/?LinkId=296271).\n\n## <a name=\"create-client\"></a>How to: Create the Mobile Services client\nThe following code creates the [MobileServiceClient](http://dl.windowsazure.com/androiddocs/com/microsoft/windowsazure/mobileservices/MobileServiceClient.html) object that is used to access your mobile service. The code goes in the `onCreate` method of the Activity class specified in *AndroidManifest.xml* as a **MAIN** action and **LAUNCHER** category.\n\n\t\tMobileServiceClient mClient = new MobileServiceClient(\n\t\t\t\t\"MobileServiceUrl\", // Replace with the above Site URL\n\t\t\t\t\"AppKey\", \t\t\t// replace with the Application Key\n\t\t\t\tthis)\n\nIn the code above, replace `MobileServiceUrl` and `AppKey` with the mobile service URL and application key, in that order. Both of these are available on the Azure classic portal, by selecting your mobile service and then clicking on *Dashboard*.\n\n## <a name=\"instantiating\"></a>How to: Create a table reference\n\nThe easiest way to query or modify data in the mobile service is by using the *typed programming model*, since Java is a strongly typed language (later on we will discuss the *untyped* model). This model provides seamless serialization and deserialization to JSON using the [gson](http://go.microsoft.com/fwlink/p/?LinkId=290801) library when sending data between the client and the mobile service: the developer doesn't have to do anything, the framework handles it all.\n\nThe first thing you do to query or modify data is to create a [MobileServiceTable](http://go.microsoft.com/fwlink/p/?LinkId=296835) object by calling the **getTable** method on the [**MobileServiceClient**](http://dl.windowsazure.com/androiddocs/com/microsoft/windowsazure/mobileservices/MobileServiceClient.html).  We will look at two overloads of this method:\n\n\tpublic class MobileServiceClient {\n\t    public <E> MobileServiceTable<E> getTable(Class<E> clazz);\n\t    public <E> MobileServiceTable<E> getTable(String name, Class<E> clazz);\n\t}\n\nIn the following code, *mClient* is a reference to your mobile service client.\n\nThe [first overload](http://go.microsoft.com/fwlink/p/?LinkId=296839) is used where the class name and the table name are the same:\n\n\t\tMobileServiceTable<ToDoItem> mToDoTable = mClient.getTable(ToDoItem.class);\n\n\nThe [2nd overload](http://go.microsoft.com/fwlink/p/?LinkId=296840) is used when the table name is different from the type name.\n\n\t\tMobileServiceTable<ToDoItem> mToDoTable = mClient.getTable(\"ToDoItemBackup\", ToDoItem.class);\n\n## <a name=\"api\"></a>The API structure\n\nSince version 2.0 of the client library, mobile services table operations use the [Future](http://developer.android.com/reference/java/util/concurrent/Future.html) and [AsyncTask](http://developer.android.com/reference/android/os/AsyncTask.html) objects in all of the asynchronous operations such as methods involving queries and operations like inserts, updates and deletes. This makes it easier to perform multiple operations (while on a background thread) without having to deal with multiple nested callbacks.\n\n\n## <a name=\"querying\"></a>How to: Query data from a mobile service\n\nThis section describes how to issue queries to the mobile service. Subsections describe diffent aspects such as sorting, filtering, and paging. Finally, we discuss how you can concatenate these operations together.\n\n### <a name=\"showAll\"></a>How to: Return all Items from a Table\n\nThe following code returns all items in the *ToDoItem* table. It displays them in the UI by adding the items to an adapter. This code is similar to what is in the the quickstart tutorial [Get started with Mobile Services].\n\n\t\tnew AsyncTask<Void, Void, Void>() {\n\n            @Override\n            protected Void doInBackground(Void... params) {\n                try {\n\n\t\t\t\t\tfinal MobileServiceList<ToDoItem> result = mToDoTable.execute().get();\n                    runOnUiThread(new Runnable() {\n\n                        @Override\n                        public void run() {\n                            mAdapter.clear();\n                            for (ToDoItem item : result) {\n                                mAdapter.add(item);\n                            }\n                        }\n                    });\n               } catch (Exception exception) {\n                    createAndShowDialog(exception, \"Error\");\n               }\n               return result;\n            }\n\t\t}.execute();\n\n\nQueries like this one use the [AsyncTask](http://developer.android.com/reference/android/os/AsyncTask.html) object.\n\nThe *result* variable returns the result set from the query, and the code following the `mToDoTable.execute().get()` statement shows how to display the individual rows.\n\n\n### <a name=\"filtering\"></a>How to: Filter returned data\n\nThe following code returns all items from the *ToDoItem* table whose *complete* field equals *false*. *mToDoTable* is the reference to the mobile service table that we created previously.\n\n        new AsyncTask<Void, Void, Void>() {\n            @Override\n            protected Void doInBackground(Void... params) {\n                try {\n                    final MobileServiceList<ToDoItem> result =\n\t\t\t\t\t\tmToDoTable.where().field(\"complete\").eq(false).execute().get();\n\t\t\t\t\tfor (ToDoItem item : result) {\n                \t\tLog.i(TAG, \"Read object with ID \" + item.id);\n\t\t\t\t\t}\n                } catch (Exception exception) {\n                    createAndShowDialog(exception, \"Error\");\n                }\n                return null;\n            }\n        }.execute();\n\n\n\nYou start a filter with a [**where**](http://go.microsoft.com/fwlink/p/?LinkId=296867) method call on the table reference. This is followed by a [**field**](http://go.microsoft.com/fwlink/p/?LinkId=296869) method call followed by a method call that specifies the logical predicate. Possible predicate methods include [**eq**](http://go.microsoft.com/fwlink/p/?LinkId=298461), [**ne**](http://go.microsoft.com/fwlink/p/?LinkId=298462), [**gt**](http://go.microsoft.com/fwlink/p/?LinkId=298463), [**ge**](http://go.microsoft.com/fwlink/p/?LinkId=298464), [**lt**](http://go.microsoft.com/fwlink/p/?LinkId=298465), [**le**](http://go.microsoft.com/fwlink/p/?LinkId=298466) etc.\n\nThis is sufficient for comparing number and string fields to specific values. But you can do a lot more.\n\nFor example, you can filter on dates. You can compare the entire date field, but you can also compare parts of the date, with methods such as [**year**](http://go.microsoft.com/fwlink/p/?LinkId=298467), [**month**](http://go.microsoft.com/fwlink/p/?LinkId=298468), [**day**](http://go.microsoft.com/fwlink/p/?LinkId=298469), [**hour**](http://go.microsoft.com/fwlink/p/?LinkId=298470), [**minute**](http://go.microsoft.com/fwlink/p/?LinkId=298471) and [**second**](http://go.microsoft.com/fwlink/p/?LinkId=298472). The following partial code adds a filter for items whose *due date* equals 2013.\n\n\t\tmToDoTable.where().year(\"due\").eq(2013).execute().get();\n\nYou can do a wide variety of complex filters on string fields with methods like [**startsWith**](http://go.microsoft.com/fwlink/p/?LinkId=298473), [**endsWith**](http://go.microsoft.com/fwlink/p/?LinkId=298474), [**concat**](http://go.microsoft.com/fwlink/p/?LinkId=298475), [**subString**](http://go.microsoft.com/fwlink/p/?LinkId=298477), [**indexOf**](http://go.microsoft.com/fwlink/p/?LinkId=298488), [**replace**](http://go.microsoft.com/fwlink/p/?LinkId=298491), [**toLower**](http://go.microsoft.com/fwlink/p/?LinkId=298492), [**toUpper**](http://go.microsoft.com/fwlink/p/?LinkId=298493), [**trim**](http://go.microsoft.com/fwlink/p/?LinkId=298495), and [**length**](http://go.microsoft.com/fwlink/p/?LinkId=298496). The following partial code filters for table rows where the *text* column starts with \"PRI0\".\n\n\t\tmToDoTable.where().startsWith(\"text\", \"PRI0\").execute().get();\n\nNumber fields also allow a wide variety of more complex filters with methods like [**add**](http://go.microsoft.com/fwlink/p/?LinkId=298497), [**sub**](http://go.microsoft.com/fwlink/p/?LinkId=298499), [**mul**](http://go.microsoft.com/fwlink/p/?LinkId=298500), [**div**](http://go.microsoft.com/fwlink/p/?LinkId=298502), [**mod**](http://go.microsoft.com/fwlink/p/?LinkId=298503), [**floor**](http://go.microsoft.com/fwlink/p/?LinkId=298505), [**ceiling**](http://go.microsoft.com/fwlink/p/?LinkId=298506), and [**round**](http://go.microsoft.com/fwlink/p/?LinkId=298507). The following partial code filters for table rows where the *duration* is an even number.\n\n\t\tmToDoTable.where().field(\"duration\").mod(2).eq(0).execute().get();\n\n\nYou can combine predicates with methods like [**and**](http://go.microsoft.com/fwlink/p/?LinkId=298512), [**or**](http://go.microsoft.com/fwlink/p/?LinkId=298514) and [**not**](http://go.microsoft.com/fwlink/p/?LinkId=298515). This partial code combines two of the above examples.\n\n\t\tmToDoTable.where().year(\"due\").eq(2013).and().startsWith(\"text\", \"PRI0\")\n\t\t\t\t\t.execute().get();\n\nAnd you can group and nest logical operators, as shown in this partial code:\n\n\t\tmToDoTable.where()\n\t\t\t\t\t.year(\"due\").eq(2013)\n\t\t\t\t\t\t.and\n\t\t\t\t\t(startsWith(\"text\", \"PRI0\").or().field(\"duration\").gt(10))\n\t\t\t\t\t.execute().get();\n\nFor more detailed discussion and examples of filtering, see [Exploring the richness of the Mobile Services Android client query model](http://hashtagfail.com/post/46493261719/mobile-services-android-querying).\n\n### <a name=\"sorting\"></a>How to: Sort returned data\n\nThe following code returns all items from a table of *ToDoItems* sorted ascending by the *text* field. *mToDoTable* is the reference to the mobile mervice table that you created previously.\n\n\t\tmToDoTable.orderBy(\"text\", QueryOrder.Ascending).execute().get();\n\nThe first parameter of the [**orderBy**](http://go.microsoft.com/fwlink/p/?LinkId=298519) method is a string equal to the name of the field on which to sort.\n\nThe second parameter uses the [**QueryOrder**](http://go.microsoft.com/fwlink/p/?LinkId=298521) enumeration to specify whether to sort ascending or descending.\n\nNote that if you are filtering using the ***where*** method, the ***where*** method must be invoked prior to the ***orderBy*** method.\n\n### <a name=\"paging\"></a>How to: Return data in pages\n\nThe first example shows how to select the top 5 items from a table. The query returns the items from a table of  *ToDoItems*. *mToDoTable* is the reference to the mobile service table that you created previously.\n\n       final MobileServiceList<ToDoItem> result = mToDoTable.top(5).execute().get();\n\n\nNext, we define a query that skips the first 5 items, and then returns the next 5.\n\n\t\tmToDoTable.skip(5).top(5).execute().get();\n\n\n### <a name=\"selecting\"></a>How to: Select specific columns\n\nThe following code illustrates how to return all items from a table of  *ToDoItems*, but only displays the *complete* and *text* fields. *mToDoTable* is the reference to the mobile service table that we created previously.\n\n\t\tmToDoTable.select(\"complete\", \"text\").execute().get();\n\n\nHere the parameters to the select function are the string names of the table's columns that you want to return.\n\nThe [**select**](http://go.microsoft.com/fwlink/p/?LinkId=290689) method needs to follow methods like [**where**](http://go.microsoft.com/fwlink/p/?LinkId=296296) and [**orderBy**](http://go.microsoft.com/fwlink/p/?LinkId=296313), if they are present. It can be followed by methods like [**top**](http://go.microsoft.com/fwlink/p/?LinkId=298731).\n\n### <a name=\"chaining\"></a>How to: Concatenate query methods\n\nThe methods used in querying mobile mervice tables can be concatenated. This allows you to do things like select specific columns of filtered rows that are sorted and paged. You can create quite complex logical filters.\n\nWhat makes this work is that the query methods you use return [**MobileServiceQuery&lt;T&gt;**](http://go.microsoft.com/fwlink/p/?LinkId=298551) objects, which can in turn have additional methods invoked on them. To end the series of methods and actually run the query, you call the [**execute**](http://go.microsoft.com/fwlink/p/?LinkId=298554) method.\n\nHere's a code sample where *mToDoTable* is a reference to the mobile services *ToDoItem* table.\n\n\t\tmToDoTable.where().year(\"due\").eq(2013)\n\t\t\t\t\t\t.and().startsWith(\"text\", \"PRI0\")\n\t\t\t\t\t\t.or().field(\"duration\").gt(10)\n\t\t\t\t\t.select(\"id\", \"complete\", \"text\", \"duration\")\n\t\t\t\t\t.orderBy(duration, QueryOrder.Ascending).top(20)\n\t\t\t\t\t.execute().get();\n\nThe main requirement in chaining methods together is that the *where* method and predicates need to come first. After that, you can call subsequent methods in the order that best meets the needs of your application.\n\n\n## <a name=\"inserting\"></a>How to: Insert data into a mobile service\n\nThe following code shows how to insert a new row into a table.\n\nFirst you instantiate an instance of the *ToDoItem* class and set its properties.\n\n\t\tToDoItem mToDoItem = new ToDoItem();\n\t\tmToDoItem.text = \"Test Program\";\n\t\tmToDoItem.complete = false;\n\n Next you execute the following code:\n\n\t\t// Insert the new item\n\t    new AsyncTask<Void, Void, Void>() {\n\n\t        @Override\n\t        protected Void doInBackground(Void... params) {\n\t            try {\n\t                mToDoTable.insert(item).get();\n\t                if (!item.isComplete()) {\n\t                    runOnUiThread(new Runnable() {\n\t                        public void run() {\n\t                            mAdapter.add(item);\n\t                        }\n\t                    });\n\t                }\n\t            } catch (Exception exception) {\n\t                createAndShowDialog(exception, \"Error\");\n\t            }\n\t            return null;\n\t        }\n\t    }.execute();\n\n\nThis code inserts the new item, and adds it to the adapter so it displays in the UI.\n\nMobile Services supports unique custom string values for the table id. This allows applications to use custom values such as email addresses or usernames for the id column of a Mobile Services table. For example if you wanted to identify each record by an email address, you could use the following JSON object.\n\n\t\tToDoItem mToDoItem = new ToDoItem();\n\t\tmToDoItem.id = \"myemail@mydomain.com\";\n\t\tmToDoItem.text = \"Test Program\";\n\t\tmToDoItem.complete = false;\n\nIf a string id value is not provided when inserting new records into a table, Mobile Services will generate a unique value for the id.\n\nSupporting string ids provides the following advantages to developers\n\n+ Ids can be generated without making a roundtrip to the database.\n+ Records are easier to merge from different tables or databases.\n+ Ids values can integrate better with an application's logic.\n\nYou can also use server scripts to set id values. The script example below generates a custom GUID and assigns it to a new record's id. This is similar to the id value that Mobile Services would generate if you didn't pass in a value for a record's id.\n\n\t//Example of generating an id. This is not required since Mobile Services\n\t//will generate an id if one is not passed in.\n\titem.id = item.id || newGuid();\n\trequest.execute();\n\n\tfunction newGuid() {\n\t\tvar pad4 = function(str) { return \"0000\".substring(str.length) + str; };\n\t\tvar hex4 = function () { return pad4(Math.floor(Math.random() * 0x10000 /* 65536 */ ).toString(16)); };\n\t\treturn (hex4() + hex4() + \"-\" + hex4() + \"-\" + hex4() + \"-\" + hex4() + \"-\" + hex4() + hex4() + hex4());\n\t}\n\n\nIf an application provides a value for an id, Mobile Services will store it as is. This includes leading or trailing white spaces. White space will not be trimmed from value.\n\nThe value for the `id` must be unique and it must not include characters from the following sets:\n\n+ Control characters: [0x0000-0x001F] and [0x007F-0x009F]. For more information, see [ASCII control codes C0 and C1].\n+  Printable characters: **\"**(0x0022), **\\+** (0x002B), **/** (0x002F), **?** (0x003F), **\\\\** (0x005C), **`** (0x0060)\n+  The ids \".\" and \"..\"\n\nYou can alternatively use integer Ids for your tables. In order to use an integer Id you must create your table with the `mobile table create` command using the `--integerId` option. This command is used with the Command-line Interface (CLI) for Azure. For more information on using the CLI, see [CLI to manage Mobile Services tables].\n\n\n## <a name=\"updating\"></a>How to: Update data in a mobile service\n\nThe following code shows how to update data in a table. In this example, *item* is a reference to a row in the *ToDoItem* table, which has had some changes made to it. The following method updates the table and the UI adapter.\n\n\tprivate void updateItem(final ToDoItem item) {\n\t    if (mClient == null) {\n\t        return;\n\t    }\n\n\t    new AsyncTask<Void, Void, Void>() {\n\n\t        @Override\n\t        protected Void doInBackground(Void... params) {\n\t            try {\n\t                mToDoTable.update(item).get();\n\t                runOnUiThread(new Runnable() {\n\t                    public void run() {\n\t                        if (item.isComplete()) {\n\t                            mAdapter.remove(item);\n\t                        }\n\t                        refreshItemsFromTable();\n\t                    }\n\t                });\n\t            } catch (Exception exception) {\n\t                createAndShowDialog(exception, \"Error\");\n\t            }\n\t            return null;\n\t        }\n\t    }.execute();\n\t}\n\n## <a name=\"deleting\"></a>How to: Delete data in a mobile service\n\nThe following code shows how to delete data from a table. It deletes an existing item from the ToDoItem table that has had the **Completed** check box on the UI checked.\n\n\tpublic void checkItem(final ToDoItem item) {\n\t\tif (mClient == null) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Set the item as completed and update it in the table\n\t\titem.setComplete(true);\n\n\t\tnew AsyncTask<Void, Void, Void>() {\n\n            @Override\n            protected Void doInBackground(Void... params) {\n                try {\n                    mToDoTable.delete(item);\n                    runOnUiThread(new Runnable() {\n                        public void run() {\n                            if (item.isComplete()) {\n                                mAdapter.remove(item);\n                            }\n                            refreshItemsFromTable();\n                        }\n                    });\n                } catch (Exception exception) {\n                    createAndShowDialog(exception, \"Error\");\n                }\n                return null;\n            }\n        }.execute();\n\t}\n\n\nThe following code illustrates another way to do this. It deletes an existing item in the ToDoItem table by specifying the value of the id field of the row to delete (assumed to equal \"2FA404AB-E458-44CD-BC1B-3BC847EF0902\"). In an actual app you would pick up the ID somehow and pass it in as a variable. Here, to simplify testing, you can go to your service in the Azure classic portal, click **Data** and copy an ID that you wish to test with.\n\n    public void deleteItem(View view) {\n\n        final String ID = \"2FA404AB-E458-44CD-BC1B-3BC847EF0902\";\n        new AsyncTask<Void, Void, Void>() {\n\n            @Override\n            protected Void doInBackground(Void... params) {\n                try {\n                    mToDoTable.delete(ID);\n                    runOnUiThread(new Runnable() {\n                        public void run() {\n                            refreshItemsFromTable();\n                        }\n               });\n                } catch (Exception exception) {\n                    createAndShowDialog(exception, \"Error\");\n                }\n                return null;\n            }\n        }.execute();\n    }\n\n## <a name=\"lookup\"></a>How to: Look up a specific item\nSometimes you want to look up a specific item by its *id*, unlike querying where you typically get a collection of items that satisfy some criteria. The following code shows how to do this, for an *id* value of `0380BAFB-BCFF-443C-B7D5-30199F730335`. In an actual app you would pick up the ID somehow and pass it in as a variable. Here, to simplify testing, you can go to your service in the Azure classic portal, click the **Data** tab and copy an ID that you wish to test with.\n\n    /**\n     * Lookup specific item from table and UI\n     */\n    public void lookup(View view) {\n\n        final String ID = \"0380BAFB-BCFF-443C-B7D5-30199F730335\";\n        new AsyncTask<Void, Void, Void>() {\n\n            @Override\n            protected Void doInBackground(Void... params) {\n                try {\n                    final ToDoItem result = mToDoTable.lookUp(ID).get();\n                    runOnUiThread(new Runnable() {\n                        public void run() {\n                            mAdapter.clear();\n                            mAdapter.add(result);\n                        }\n               });\n                } catch (Exception exception) {\n                    createAndShowDialog(exception, \"Error\");\n                }\n                return null;\n            }\n        }.execute();\n    }\n\n## <a name=\"untyped\"></a>How to: Work with untyped data\n\nThe untyped programming model gives you exact control over the JSON serialization, and there are some scenarios where you may wish to use it, for example, if your mobile service table contains a large number of columns and you only need to reference a few of them. Using the typed model requires you to define all of the mobile service table's columns in your data class. But with the untyped model you only define the columns you need to use.\n\nMost of the API calls for accessing data are similar to the typed programming calls. The main difference is that in the untyped model you invoke methods on the **MobileServiceJsonTable** object, instead of the **MobileServiceTable** object.\n\n\n### <a name=\"json_instance\"></a>How to: Create an instance of an untyped table\n\nSimilar to the typed model, you start by getting a table reference, but in this case it's a [MobileServicesJsonTable](http://go.microsoft.com/fwlink/p/?LinkId=298733) object. You get the reference by calling the [getTable()](http://go.microsoft.com/fwlink/p/?LinkId=298734) method on an instance of the Mobile Services client.\n\nFirst you define the variable:\n\n    /**\n     * Mobile Service Json Table used to access untyped data\n     */\n    private MobileServiceJsonTable mJsonToDoTable;\n\n\n\nOnce you create an instance of the Mobile Services client in the **onCreate** method (here, the *mClient* variable), you next create an instance of a **MobileServiceJsonTable**, with the following code.\n\n\n            // Get the Mobile Service Json Table to use\n            mJsonToDoTable = mClient.getTable(\"ToDoItem\");\n\nOnce you have created an instance of the **MobileServiceJsonTable**, you can call almost all of the methods on it that you can with the typed programming model. However in some cases the methods take an untyped parameter, as we see in the following examples.\n\n### <a name=\"json_insert\"></a>How to: Insert into an untyped table\n\nThe following code shows how to do an insert. The first step is to create a [**JsonObject**](http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/JsonObject.html), which is part of the <a href=\" http://go.microsoft.com/fwlink/p/?LinkId=290801\" target=\"_blank\">gson</a> library.\n\n\t\tJsonObject item = new JsonObject();\n\t\titem.addProperty(\"text\", \"Wake up\");\n\t\titem.addProperty(\"complete\", false);\n\nThe next step is to insert the object. The callback function passed to the [**insert**](http://go.microsoft.com/fwlink/p/?LinkId=298535) method is an instance of the [**TableJsonOperationCallback**](http://go.microsoft.com/fwlink/p/?LinkId=298532) class. Note how the parameter of the *insert* method is a JsonObject.\n\n        // Insert the new item\n        new AsyncTask<Void, Void, Void>() {\n\n            @Override\n            protected Void doInBackground(Void... params) {\n                try {\n                    mJsonToDoTable.insert(item).get();\n                    refreshItemsFromTable();\n                } catch (Exception exception) {\n                    createAndShowDialog(exception, \"Error\");\n                }\n                return null;\n            }\n        }.execute();\n\n\nIf you need to get the ID of the inserted object, use this method call:\n\n\t\t        jsonObject.getAsJsonPrimitive(\"id\").getAsInt());\n\n\n### <a name=\"json_delete\"></a>How to: Delete from an untyped table\n\nThe following code shows how to delete an instance, in this case, the same instance of a **JsonObject** that was created in the prior *insert* example. Note that the code is the same as with the typed case, but the method has a different signature since it references an **JsonObject**.\n\n\n         mToDoTable.delete(item);\n\n\nYou can also delete an instance directly by using its ID:\n\n\t\t mToDoTable.delete(ID);\n\n\n\n### <a name=\"json_get\"></a>How to: Return all rows from an untyped table\n\nThe following code shows how to retrieve an entire table. Since you are using a JSON Table, you can selectively retrieve only some of the table's columns.\n\n    public void showAllUntyped(View view) {\n        new AsyncTask<Void, Void, Void>() {\n            @Override\n            protected Void doInBackground(Void... params) {\n                try {\n                    final JsonElement result = mJsonToDoTable.execute().get();\n                    final JsonArray results = result.getAsJsonArray();\n                    runOnUiThread(new Runnable() {\n\n                        @Override\n                        public void run() {\n                            mAdapter.clear();\n                            for (JsonElement item : results) {\n                                String ID = item.getAsJsonObject().getAsJsonPrimitive(\"id\").getAsString();\n                                String mText = item.getAsJsonObject().getAsJsonPrimitive(\"text\").getAsString();\n                                Boolean mComplete = item.getAsJsonObject().getAsJsonPrimitive(\"complete\").getAsBoolean();\n                                ToDoItem mToDoItem = new ToDoItem();\n                                mToDoItem.setId(ID);\n                                mToDoItem.setText(mText);\n                                mToDoItem.setComplete(mComplete);\n                                mAdapter.add(mToDoItem);\n                            }\n                        }\n                    });\n                } catch (Exception exception) {\n                    createAndShowDialog(exception, \"Error\");\n                }\n                return null;\n            }\n        }.execute();\n    }\n\nYou can do filtering, sorting and paging by concatenating  methods that have the same names as those used in the typed programming model.\n\n\n## <a name=\"binding\"></a>How to: Bind data to the user interface\n\nData binding involves three components:\n\n- the data source\n- the screen layout\n- and the adapter that ties the two together.\n\nIn our sample code, we return the data from the mobile service table *ToDoItem* into an array. This is one very common pattern for data applications: database queries typically return a collection of rows which the client gets in a list or array. In this sample the array is the data source.\n\nThe code specifies a screen layout that defines the view of the data that will appear on the device.\n\nAnd the two are bound together with an adapter, which in this code is an extension of the *ArrayAdapter&lt;ToDoItem&gt;* class.\n\n### <a name=\"layout\"></a>How to: Define the Layout\n\nThe layout is defined by several snippets of XML code. Given an existing layout, let's assume the following code represents the **ListView** we want to populate with our server data.\n\n    <ListView\n        android:id=\"@+id/listViewToDo\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        tools:listitem=\"@layout/row_list_to_do\" >\n    </ListView>\n\n\nIn the above code the *listitem* attribute specifies the id of the layout for an individual row in the list. Here is that code, which specifies a check box and its associated text. This gets instantiated once for each item in the list. A more complex layout would specify additional fields in the display. This code is in the *row_list_to_do.xml* file.\n\n\t<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\t<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\t    android:layout_width=\"match_parent\"\n\t    android:layout_height=\"match_parent\"\n\t    android:orientation=\"horizontal\">\n\t    <CheckBox\n\t        android:id=\"@+id/checkToDoItem\"\n\t        android:layout_width=\"wrap_content\"\n\t        android:layout_height=\"wrap_content\"\n\t        android:text=\"@string/checkbox_text\" />\n\t</LinearLayout>\n\n\n### <a name=\"adapter\"></a>How to: Define the adapter\n\nSince the data source of our view is an array of *ToDoItem*, we subclass our adapter from a *ArrayAdapter&lt;ToDoItem&gt;* class. This subclass will produce a View for every *ToDoItem* using the *row_list_to_do* layout.\n\nIn our code we define the following class which is an extension of the *ArrayAdapter&lt;E&gt;* class:\n\n\tpublic class ToDoItemAdapter extends ArrayAdapter<ToDoItem> {\n\n\nYou must override the adapter's *getView* method. This sample code is one example of how to do this: details will vary with your application.\n\n\tpublic View getView(int position, View convertView, ViewGroup parent) {\n\t\tView row = convertView;\n\n\t\tfinal ToDoItem currentItem = getItem(position);\n\n\t\tif (row == null) {\n\t\t\tLayoutInflater inflater = ((Activity) mContext).getLayoutInflater();\n\t\t\trow = inflater.inflate(R.layout.row_list_to_do, parent, false);\n\t\t}\n\n\t\trow.setTag(currentItem);\n\n\t\tfinal CheckBox checkBox = (CheckBox) row.findViewById(R.id.checkToDoItem);\n\t\tcheckBox.setText(currentItem.getText());\n\t\tcheckBox.setChecked(false);\n\t\tcheckBox.setEnabled(true);\n\n\t\treturn row;\n\t}\n\nWe create an instance of this class in our Activity as follows:\n\n\tToDoItemAdapter mAdapter;\n\tmAdapter = new ToDoItemAdapter(this, R.layout.row_list_to_do);\n\nNote that the second parameter to the ToDoItemAdapter constructor is a reference to the layout. The call to the constructor is followed by the following code which first gets a reference to the **ListView**, and next calls *setAdapter* to configure itself to use the adapter we just created:\n\n\tListView listViewToDo = (ListView) findViewById(R.id.listViewToDo);\n\tlistViewToDo.setAdapter(mAdapter);\n\n\n### <a name=\"use-adapter\"></a>How to: Use the adapter\n\nYou are now ready to use data binding. The following code shows how to get the items in the mobile service table, clear the apapter, and then call the adapter's *add* method to fill it with the returned items.\n\n    public void showAll(View view) {\n        new AsyncTask<Void, Void, Void>() {\n            @Override\n            protected Void doInBackground(Void... params) {\n                try {\n                    final MobileServiceList<ToDoItem> result = mToDoTable.execute().get();\n                    runOnUiThread(new Runnable() {\n\n                        @Override\n                        public void run() {\n                            mAdapter.clear();\n                            for (ToDoItem item : result) {\n                                mAdapter.add(item);\n                            }\n                        }\n                    });\n                } catch (Exception exception) {\n                    createAndShowDialog(exception, \"Error\");\n                }\n                return null;\n            }\n        }.execute();\n    }\n\nYou must also call the adapter any time you modify the *ToDoItem* table if you want to display the results of doing that. Since modifications are done on a record by record basis, you will be dealing with a single row instead of a collection. When you insert an item you call the *add* method on the adapter, when deleting, you call the *remove* method.\n\n## <a name=\"custom-api\"></a>How to: Call a custom API\n\nA custom API enables you to define custom endpoints that expose server functionality that does not map to an insert, update, delete, or read operation. By using a custom API, you can have more control over messaging, including reading and setting HTTP message headers and defining a message body format other than JSON. For an example of how to create a custom API in your mobile service, see [How to: define a custom API endpoint](mobile-services-dotnet-backend-define-custom-api.md).\n\n\n\n### <a name=\"update-app\"></a>Update the app to call the custom API\n\n1. We will add a button labelled \"Complete All\" next to the existing button, and move both buttons down a line. In Android Studio, open the *res\\layout\\activity_to_do.xml* file in your quickstart project, locate the **LinearLayout** element that contains the **Button** element named `buttonAddToDo`. Copy the **LinearLayout** and paste it immediately following the original one. Delete the **Button** element from the first **LinearLayout**.\n\n2. In the second **LinearLayout**, delete the **EditText** element, and add the following  code immediately following the existing **Button** element:\n\n        <Button\n            android:id=\"@+id/buttonCompleteItem\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:onClick=\"completeItem\"\n            android:text=\"@string/complete_button_text\" />\n\n\tThis adds a new button to the page, on a separate line, next to the existing button.\n\n3. The second **LinearLayout** now looks like this:\n\n\t     <LinearLayout\n\t        android:layout_width=\"match_parent\"\n\t        android:layout_height=\"wrap_content\"\n\t        android:background=\"#71BCFA\"\n\t        android:padding=\"6dip\"  >\n\t        <Button\n\t            android:id=\"@+id/buttonAddToDo\"\n\t            android:layout_width=\"wrap_content\"\n\t            android:layout_height=\"wrap_content\"\n\t            android:onClick=\"addItem\"\n\t            android:text=\"@string/add_button_text\" />\n\t        <Button\n\t            android:id=\"@+id/buttonCompleteItem\"\n\t            android:layout_width=\"wrap_content\"\n\t            android:layout_height=\"wrap_content\"\n\t            android:onClick=\"completeItem\"\n\t            android:text=\"@string/complete_button_text\" />\n\t    </LinearLayout>\n\n\n4. Open the res\\values\\string.xml file and add the following line of code:\n\n    \t<string name=\"complete_button_text\">Complete All</string>\n\n\n\n5. In Project Explorer, right click the project name in the *src* folder (`com.example.{your projects name}`), choose **New** then **Class**. In the dialog, enter **MarkAllResult** in the class name field, choose OK, and replace the resulting class definition with the following code:\n\n\t\timport com.google.gson.annotations.SerializedName;\n\n\t\tpublic class MarkAllResult {\n\t\t    @SerializedName(\"count\")\n\t\t    public int mCount;\n\n\t\t    public int getCount() {\n\t\t        return mCount;\n\t\t\t}\n\n\t\t\tpublic void setCount(int count) {\n\t\t\t        this.mCount = count;\n\t\t\t}\n\t\t}\n\n\tThis class is used to hold the row count value returned by the custom API.\n\n6. Locate the **refreshItemsFromTable** method in the **ToDoActivity.java** file, and make sure that the first line of code in the `try` block looks like this:\n\n        final MobileServiceList<ToDoItem> result = mToDoTable.where().field(\"complete\").eq(false).execute().get();\n\n\tThis filters the items so that completed items are not returned by the query.\n\n7. Make sure that **ToDoActivity.java** contains the following imports at the beginning of the file:\n\n\t\timport com.google.common.util.concurrent.FutureCallback;\n\t\timport com.google.common.util.concurrent.Futures;\n\t\timport com.google.common.util.concurrent.ListenableFuture;\n\n8. In the **ToDoActivity.java** file, add the following method:\n\n\tpublic void completeItem(View view) {\n\n\t    ListenableFuture<MarkAllResult> result = mClient.invokeApi( \"completeAll2\", MarkAllResult.class );\n\n\t    \tFutures.addCallback(result, new FutureCallback<MarkAllResult>() {\n\t    \t\t@Override\n\t    \t\tpublic void onFailure(Throwable exc) {\n\t    \t\t\tcreateAndShowDialog((Exception) exc, \"Error\");\n\t    \t\t}\n\n\t    \t\t@Override\n\t    \t\tpublic void onSuccess(MarkAllResult result) {\n\t    \t\t\tcreateAndShowDialog(result.getCount() + \" item(s) marked as complete.\", \"Completed Items\");\n\t                refreshItemsFromTable();\n\t    \t\t}\n\t    \t});\n\t    }\n\n\tThis method handles the **Click** event for the new button. The **invokeApi** method is called on the client, which sends a POST request to the new custom API. The result returned by the custom API is displayed in a message dialog, as are any errors.\n\n### Test the app\n\n1. From the **Run** menu, click **Run app** to start the project in the Android emulator, or in a connected Android device.\n\n\tThis executes your app, built with the Android SDK, that uses the client library to send a query that returns items from your mobile service.\n\n\n2. In the app, type some text in **Insert a TodoItem**, then click **Add**.\n\n3. Repeat the previous step until you have added several todo items to the list.\n\n4. Click the **Complete All** button.\n\n  \t![](./media/mobile-services-android-call-custom-api/mobile-custom-api-android-completed.png)\n\n\tA message dialog is displayed that indicates the number of items marked complete and the filtered query is executed again, which clears all items from the list.\n\n\n## <a name=\"authentication\"></a>How to: Authenticate users\n\nMobile Services supports authenticating and authorizing app users using a variety of external identity providers: Facebook, Google, Microsoft Account, Twitter, and Azure Active Directory. You can set permissions on tables to restrict access for specific operations to only authenticated users. You can also use the identity of authenticated users to implement authorization rules in your backend. For more information, see [Get started with authentication](http://go.microsoft.com/fwlink/p/?LinkId=296316).\n\nTwo authentication flows are supported: a *server* flow and a *client* flow. The server flow provides the simplest authentication experience, as it relies on the provider's web authentication interface. The client flow allows for deeper integration with device-specific capabilities such as single-sign-on as it relies on provider-specific device-specific SDKs.\n\nThree steps are required to enable authentication in your app:\n\n- Register your app for authentication with a provider, and configure Mobile Services\n- Restrict table permissions to authenticated users only\n- Add authentication code to your app\n\n\nMobile Services supports the following existing identity providers that you can use to authenticate users:\n\n- Microsoft Account\n- Facebook\n- Twitter\n- Google\n- Azure Active Directory\n\nYou can set permissions on tables to restrict access for specific operations to only authenticated users. You can also use the ID of an authenticated user to modify requests.\n\nThese first two tasks are done using the [Azure classic portal](https://manage.windowsazure.com/). For more information, see [Get started with authentication](http://go.microsoft.com/fwlink/p/?LinkId=296316).\n\n### <a name=\"caching\"></a>How to: Add authentication code to your app\n\n1.  Add the following import statements to your app's activity file.\n\n\t\timport java.util.concurrent.ExecutionException;\n\t\timport java.util.concurrent.atomic.AtomicBoolean;\n\n\t\timport android.content.Context;\n\t\timport android.content.SharedPreferences;\n\t\timport android.content.SharedPreferences.Editor;\n\n\t\timport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider;\n\t\timport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;\n\n2. In the **onCreate** method of the activity class, add the following line of code after the code that creates the `MobileServiceClient` object: we assume that the reference to the `MobileServiceClient` object is *mClient*.\n\n\t    // Login using the Google provider.\n\n\t\tListenableFuture<MobileServiceUser> mLogin = mClient.login(MobileServiceAuthenticationProvider.Google);\n\n    \tFutures.addCallback(mLogin, new FutureCallback<MobileServiceUser>() {\n    \t\t@Override\n    \t\tpublic void onFailure(Throwable exc) {\n    \t\t\tcreateAndShowDialog((Exception) exc, \"Error\");\n    \t\t}\n    \t\t@Override\n    \t\tpublic void onSuccess(MobileServiceUser user) {\n    \t\t\tcreateAndShowDialog(String.format(\n                        \"You are now logged in - %1$2s\",\n                        user.getUserId()), \"Success\");\n    \t\t\tcreateTable();\n    \t\t}\n    \t});\n\n    This code authenticates the user using a Google login. A dialog is displayed which displays the ID of the authenticated user. You cannot proceed without a positive authentication.\n\n    > [AZURE.NOTE] If you are using an identity provider other than Google, change the value passed to the **login** method above to one of the following: _MicrosoftAccount_, _Facebook_, _Twitter_, or _WindowsAzureActiveDirectory_.\n\n\n3. When you run the app, sign in with your chosen identity provider.\n\n\n### <a name=\"caching\"></a>How to: Cache authentication tokens\n\nThis section shows how to cache an authentication token. Do this to prevent users from having to authenticate again if app is \"hibernated\" while the token is still valid.\n\nCaching authentication tokens requires you to store the User ID and authentication token locally on the device. The next time the app starts, you check the cache, and if these values are present, you can skip the log in procedure and re-hydrate the client with this data. However this data is sensitive, and it should be stored encrypted for safety in case the phone gets stolen.\n\nThe following code snippet demonstrates obtaining a token for a Microsoft Account log in. The token is cached and reloaded if the cache is found.\n\n\tprivate void authenticate() {\n\t\tif (LoadCache())\n\t\t{\n\t\t\tcreateTable();\n\t\t}\n\t\telse\n\t\t{\n\t\t\t    // Login using the Google provider.\n\t\t\t\tListenableFuture<MobileServiceUser> mLogin = mClient.login(MobileServiceAuthenticationProvider.Google);\n\n\t\t    \tFutures.addCallback(mLogin, new FutureCallback<MobileServiceUser>() {\n\t\t    \t\t@Override\n\t\t    \t\tpublic void onFailure(Throwable exc) {\n\t\t    \t\t\tcreateAndShowDialog(\"You must log in. Login Required\", \"Error\");\n\t\t    \t\t}\n\t\t    \t\t@Override\n\t\t    \t\tpublic void onSuccess(MobileServiceUser user) {\n\t\t    \t\t\tcreateAndShowDialog(String.format(\n\t\t                        \"You are now logged in - %1$2s\",\n\t\t                        user.getUserId()), \"Success\");\n\t\t    \t\t\tcacheUserToken(mClient.getCurrentUser());\n\t\t    \t\t\tcreateTable();\n\t\t    \t\t}\n\t\t    \t});\t\t}\n\t}\n\n\n\tprivate boolean LoadCache()\n\t{\n\t\tSharedPreferences prefs = getSharedPreferences(\"temp\", Context.MODE_PRIVATE);\n\t\tString tmp1 = prefs.getString(\"tmp1\", \"undefined\");\n\t\tif (tmp1 == \"undefined\")\n\t\t\treturn false;\n\t\tString tmp2 = prefs.getString(\"tmp2\", \"undefined\");\n\t\tif (tmp2 == \"undefined\")\n\t\t\treturn false;\n\t\tMobileServiceUser user = new MobileServiceUser(tmp1);\n\t\tuser.setAuthenticationToken(tmp2);\n\t\tmClient.setCurrentUser(user);\n\t\treturn true;\n\t}\n\n\n\tprivate void cacheUser(MobileServiceUser user)\n\t{\n\t\tSharedPreferences prefs = getSharedPreferences(\"temp\", Context.MODE_PRIVATE);\n\t\tEditor editor = prefs.edit();\n\t\teditor.putString(\"tmp1\", user.getUserId());\n\t\teditor.putString(\"tmp2\", user.getAuthenticationToken());\n\t\teditor.commit();\n\t}\n\n\nSo what happens if your token expires? In this case, when you try to use it to connect, you will get a *401 unauthorized* response. The user must then log in to obtain new tokens. You can avoid having to write code to handle this in every place in your app that calls your mobile service by using filters, which allow you to intercept calls to and responses from Mobile Services. The filter code will then test the response for a 401, trigger the sign-in process if needed, and then resume the request that generated the 401.\n\n\n## <a name=\"customizing\"></a>How to: Customize the client\n\nThere are several ways for you to customize the default behavior of the Mobile Services client.\n\n### <a name=\"headers\"></a>How to: Customize request headers\n\nYou might want to attach a custom header to every outgoing request. You can accomplish that by configuring a **ServiceFilter** like this:\n\n\tprivate class CustomHeaderFilter implements ServiceFilter {\n\n        @Override\n        public ListenableFuture<ServiceFilterResponse> handleRequest(\n                \tServiceFilterRequest request,\n\t\t\t\t\tNextServiceFilterCallback next) {\n\n            runOnUiThread(new Runnable() {\n\n                @Override\n                public void run() {\n\t        \t\trequest.addHeader(\"My-Header\", \"Value\");\t                }\n            });\n\n            SettableFuture<ServiceFilterResponse> result = SettableFuture.create();\n            try {\n                ServiceFilterResponse response = next.onNext(request).get();\n                result.set(response);\n            } catch (Exception exc) {\n                result.setException(exc);\n            }\n        }\n\n### <a name=\"serialization\"></a>How to: Customize serialization\n\nMobile Services assumes by default that the table names, column names and data types on the server all match exactly what is on the client. But there can be any number of reasons why the server and client names might not match. One example might be if you have an existing client that you want to change so that it uses Mobile Services instead of a competitor's product.\n\nYou might want to do the following kinds of customizations:\n\n- The column names used in the mobile-  service table don't match the names you are using in the client\n- Use a mobile service table that has a different name than the class it maps to in the client\n- Turn on automatic property capitalization\n- Add complex properties to an object\n\n### <a name=\"columns\"></a>How to: Map different client and server names\n\nSuppose that your Java client code uses standard Java-style names for the *ToDoItem* object properties, such as the following.\n\n- mId\n- mText\n- mComplete\n- mDuration\n\n\nYou must serialize the client names into JSON names that match the column names of the *ToDoItem* table on the server. The following code, which makes use of the <a href=\" http://go.microsoft.com/fwlink/p/?LinkId=290801\" target=\"_blank\">gson</a> library does this.\n\n\t@com.google.gson.annotations.SerializedName(\"text\")\n\tprivate String mText;\n\n\t@com.google.gson.annotations.SerializedName(\"id\")\n\tprivate int mId;\n\n\t@com.google.gson.annotations.SerializedName(\"complete\")\n\tprivate boolean mComplete;\n\n\t@com.google.gson.annotations.SerializedName(\"duration\")\n\tprivate String mDuration;\n\n### <a name=\"table\"></a>How to: Map different table names between client and mobile services\n\nMapping the client table name to a different mobile services table name is easy, we just use one of the overrides of the\n<a href=\"http://go.microsoft.com/fwlink/p/?LinkId=296840\" target=\"_blank\">getTable()</a> function, as seen in the following code.\n\n\tmToDoTable = mClient.getTable(\"ToDoItemBackup\", ToDoItem.class);\n\n\n### <a name=\"conversions\"></a>How to: Automate column name mappings\n\nMapping column names for a narrow table with only a few columns isn't a big deal, as we saw in the prior section. But suppose our table has a lot of columns, say 20 or 30. It turns out that we can call the <a href=\" http://go.microsoft.com/fwlink/p/?LinkId=290801\" target=\"_blank\">gson</a> API and specify a conversion strategy that will apply to every column, and avoid having to annotate every single column name.\n\nTo do this we use the <a href=\" http://go.microsoft.com/fwlink/p/?LinkId=290801\" target=\"_blank\">gson</a> library which the Android client library uses behind the scenes to serialize Java objects to JSON data, which is sent to Azure Mobile Services.\n\nThe following code uses the *setFieldNamingStrategy()* method, in which we define a *FieldNamingStrategy()* method. This method says to delete the initial character (an \"m\"), and then lower-case the next character, for every field name. This code also enables pretty-printing of the output JSON.\n\n\tclient.setGsonBuilder(\n\t    MobileServiceClient\n\t    .createMobileServiceGsonBuilder()\n\t    .setFieldNamingStrategy(new FieldNamingStrategy() {\n\t        public String translateName(Field field) {\n\t            String name = field.getName();\n\t            return Character.toLowerCase(name.charAt(1))\n\t                + name.substring(2);\n\t            }\n\t        })\n\t        .setPrettyPrinting());\n\n\n\nThis code must be executed prior to any method calls on the Mobile Services client object.\n\n### <a name=\"complex\"></a>How to: Store an object or array property into a table\n\nSo far all of our serialization examples have involved primitive types such as integers and strings which easily serialize into JSON and into the mobile services table. Suppose we want to add a complex object to our client type, which doesn't automatically serialize to JSON and to the table. For example we might want to add an array of strings to the client object. It is now up to us to specify how to do the serialization, and how to store the array into the mobile services table.\n\nTo see an example of how to do this, check out the blog post <a href=\"http://hashtagfail.com/post/44606137082/mobile-services-android-serialization-gson\" target=\"_blank\">Customizing serialization using the <a href=\" http://go.microsoft.com/fwlink/p/?LinkId=290801\" target=\"_blank\">gson</a> library in the Mobile Services Android client</a>.\n\nThis general method can be used whenever we have a complex object that is not automatically serializable into JSON and the mobile services table.\n\n<!-- Anchors. -->\n\n[What is Mobile Services]: #what-is\n[Concepts]: #concepts\n[How to: Create the Mobile Services client]: #create-client\n[How to: Create a table reference]: #instantiating\n[The API structure]: #api\n[How to: Query data from a mobile service]: #querying\n[Return all Items]: #showAll\n[Filter returned data]: #filtering\n[Sort returned data]: #sorting\n[Return data in pages]: #paging\n[Select specific columns]: #selecting\n[How to: Concatenate query methods]: #chaining\n[How to: Bind data to the user interface]: #binding\n[How to: Define the layout]: #layout\n[How to: Define the adapter]: #adapter\n[How to: Use the adapter]: #use-adapter\n[How to: Insert data into a mobile service]: #inserting\n[How to: update data in a mobile service]: #updating\n[How to: Delete data in a mobile service]: #deleting\n[How to: Look up a specific item]: #lookup\n[How to: Work with untyped data]: #untyped\n[How to: Authenticate users]: #authentication\n[Cache authentication tokens]: #caching\n[How to: Handle errors]: #errors\n[How to: Design unit tests]: #tests\n[How to: Customize the client]: #customizing\n[Customize request headers]: #headers\n[Customize serialization]: #serialization\n[Next Steps]: #next-steps\n[Setup and Prerequisites]: #setup\n\n<!-- Images. -->\n\n\n\n<!-- URLs. -->\n[Get started with Mobile Services]: mobile-services-android-get-started.md\n[ASCII control codes C0 and C1]: http://en.wikipedia.org/wiki/Data_link_escape_character#C1_set\n"
  },
  {
    "path": "docs/mobile-services-android-upload-data-blob-storage.md",
    "content": "<properties\n\tpageTitle=\"Use Mobile Services to upload images to blob storage (Android) | Mobile Services\"\n\tdescription=\"Learn how to use Mobile Services to upload images to Azure Storage and access the images from your Android app.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"android\"\n\tauthors=\"RickSaling\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-android\"\n\tms.devlang=\"java\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ricksal\"/>\n\n# Upload images to Azure Storage from an Android  device\n\n> [AZURE.SELECTOR-LIST (Platform | Backend)]\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-upload-data-blob-storage.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-upload-data-blob-storage.md)\n- [(Android | Javascript)](mobile-services-android-upload-data-blob-storage.md)\n\n&nbsp;&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows how to enable your Android Azure Mobile Services app to upload images to Azure Storage.\n\nMobile Services uses a SQL Database to store data. However, it's more efficient to store binary large object (BLOB) data in Azure Storage. In this tutorial you enable the Mobile Services quickstart app to take pictures with the Android camera, and upload the images to Azure Storage.\n\n\n## What you need to get started\n\nBefore you start this tutorial, you must first complete the Mobile Services quickstart: [Get started with Mobile Services].\n\nThis tutorial also requires the following:\n\n+ An [Azure Storage account](https://azure.microsoft.com/en-us/documentation/articles/storage-create-storage-account/)\n+ An Android device with a camera\n\n## How the app works\n\nUploading the photo image is a multistep process:\n\n- First you take a photo, and insert a TodoItem row into the SQL database that contains  new meta-data fields used by Azure Storage.\n- A new mobile service SQL **insert** script asks Azure Storage for a Shared Access Signature (SAS).\n- That script returns the SAS and a URI for the blob to the client.\n- The client uploads the photo, using the SAS and blob URI.\n\nSo what is a SAS?\n\nIt's not safe to store the credentials needed to upload data to the Azure Storage service inside your client app. Instead, you store these credentials in your mobile service and use them to generate a Shared Access Signature (SAS) that grants permission to upload a new image. The SAS, a credential with a 5 minute expiration, is returned securely by Mobile Services to the client app. The app then uses this temporary credential to upload the image. For more information, see [Shared Access Signatures, Part 1: Understanding the SAS Model](https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-shared-access-signature-part-1/)\n\n## Code Sample\n[Here](https://github.com/Azure/mobile-services-samples/tree/master/UploadImages) is the completed client source code part of this app. To run it you must complete the Mobile Services backend parts of this tutorial.\n\n## Update the registered insert script in the Azure classic portal\n\nA new insert script is registered that generates an SAS when a new Todo item is inserted.\n\n0. If you haven't yet created your storage account, see [How To Create a Storage Account](https://azure.microsoft.com/en-us/documentation/articles/storage-create-storage-account/).\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Storage**, click the storage account, then click **Manage Keys**.\n\n2. Make a note of the **Storage Account Name** and **Access Key**.\n\n   \t![](./media/mobile-services-configure-blob-storage/mobile-blob-storage-account-keys.png)\n\n3. In your mobile service, click the **Configure** tab, scroll down to **App settings** and enter a **Name** and **Value** pair for each of the following that you obtained from the storage account, then click **Save**.\n\n\t+ `STORAGE_ACCOUNT_NAME`\n\t+ `STORAGE_ACCOUNT_ACCESS_KEY`\n\n\t![](./media/mobile-services-configure-blob-storage/mobile-blob-storage-app-settings.png)\n\n\tThe storage account access key is stored encrypted in app settings. You can access this key from any server script at runtime. For more information, see [App settings].\n\n4. In the Configure tab, make sure that [Dynamic schema](http://msdn.microsoft.com/library/windowsazure/b6bb7d2d-35ae-47eb-a03f-6ee393e170f7) is enabled. You need dynamic schema enabled to be able to add new columns to the TodoItem table. Dynamic schema should not be enabled in any production service.\n\n4. Click the **Data** tab and then click the **TodoItem** table.\n\n5.  In **todoitem**, click the **Script** tab and select **Insert**, replace the insert function with the following code, then click **Save**:\n\n\t\tvar azure = require('azure');\n\t\tvar qs = require('querystring');\n\t\tvar appSettings = require('mobileservice-config').appSettings;\n\n\t\tfunction insert(item, user, request) {\n\t\t    // Get storage account settings from app settings.\n\t\t    var accountName = appSettings.STORAGE_ACCOUNT_NAME;\n\t\t    var accountKey = appSettings.STORAGE_ACCOUNT_ACCESS_KEY;\n\t\t    var host = accountName + '.blob.core.windows.net';\n\n\t\t    if ((typeof item.containerName !== \"undefined\") && (\n\t\t    item.containerName !== null)) {\n\t\t        // Set the BLOB store container name on the item, which must be lowercase.\n\t\t        item.containerName = item.containerName.toLowerCase();\n\n\t\t        // If it does not already exist, create the container\n\t\t        // with public read access for blobs.        \n\t\t        var blobService = azure.createBlobService(accountName, accountKey, host);\n\t\t        blobService.createContainerIfNotExists(item.containerName, {\n\t\t            publicAccessLevel: 'blob'\n\t\t        }, function(error) {\n\t\t            if (!error) {\n\n\t\t                // Provide write access to the container for the next 5 mins.        \n\t\t                var sharedAccessPolicy = {\n\t\t                    AccessPolicy: {\n\t\t                        Permissions: azure.Constants.BlobConstants.SharedAccessPermissions.WRITE,\n\t\t                        Expiry: new Date(new Date().getTime() + 5 * 60 * 1000)\n\t\t                    }\n\t\t                };\n\n\t\t                // Generate the upload URL with SAS for the new image.\n\t\t                var sasQueryUrl =\n\t\t                blobService.generateSharedAccessSignature(item.containerName,\n\t\t                item.resourceName, sharedAccessPolicy);\n\n\t\t                // Set the query string.\n\t\t                item.sasQueryString = qs.stringify(sasQueryUrl.queryString);\n\n\t\t                // Set the full path on the new new item,\n\t\t                // which is used for data binding on the client.\n\t\t                item.imageUri = sasQueryUrl.baseUrl + sasQueryUrl.path;\n\n\t\t            } else {\n\t\t                console.error(error);\n\t\t            }\n\t\t            request.execute();\n\t\t        });\n\t\t    } else {\n\t\t        request.execute();\n\t\t    }\n\t\t}\n\n   \tThis replaces the function that is invoked when an insert occurs in the TodoItem table with a new script. This new script generates a new SAS for the insert, which is valid for 5 minutes, and assigns the value of the generated SAS to the `sasQueryString` property of the returned item. The `imageUri` property is also set to the resource path of the new BLOB to enable image display during binding in the client UI.\n\n\t>[AZURE.NOTE] This code creates an SAS for an individual BLOB. If you need to upload multiple blobs to a container using the same SAS, you can instead call the [generateSharedAccessSignature method](http://go.microsoft.com/fwlink/?LinkId=390455)</a> with an empty blob resource name, like this:\n\t>                 \n\t>     blobService.generateSharedAccessSignature(containerName, '', sharedAccessPolicy);\n\nNext, you will update the quickstart app to add image upload functionality by using the SAS generated on insert.\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[App settings]: http://msdn.microsoft.com/library/windowsazure/b6bb7d2d-35ae-47eb-a03f-6ee393e170f7\n\n\n## Update the quickstart app to capture and upload images.\n\n### Reference the Azure Storage Android client library\n\n1. To add the reference to the library, in the **app** > **build.gradle** file, add this line to the `dependencies` section:\n\n\t\tcompile 'com.microsoft.azure.android:azure-storage-android:0.6.0@aar'\n\n\n2. Change the `minSdkVersion` value to 15 (required by the camera API).\n\n3. Press the **Sync Project with Gradle Files** icon.\n\n### Update the manifest file for camera and storage\n\n1. Specify your app requires having a camera available by adding this line to **AndroidManifest.xml**:\n\n\t    <uses-feature android:name=\"android.hardware.camera\"\n\t        android:required=\"true\" />\n\n2. Specify your app needs permission to write to external storage by adding this line to **AndroidManifest.xml**:\n\n\t    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n\n\tNote that Android external storage is not necessarily an SD card: for more see [Saving Files](http://developer.android.com/training/basics/data-storage/files.html).\n\n### Update resource files for the new user interface\n\n1. Add titles for new buttons by adding the following to the **strings.xml** file in the *values* directory:\n\n\t    <string name=\"preview_button_text\">Take Photo</string>\n\t    <string name=\"upload_button_text\">Upload</string>\n\n2. In the **activity_to_do.xml** file in the **res => layout** folder,  add this code before the existing code for the **Add** button.\n\n         <Button\n             android:id=\"@+id/buttonPreview\"\n             android:layout_width=\"120dip\"\n             android:layout_height=\"wrap_content\"\n             android:onClick=\"takePicture\"\n             android:text=\"@string/preview_button_text\" />\n\n3. Replace the **Add** button element with the following code:\n\n         <Button\n             android:id=\"@+id/buttonUpload\"\n             android:layout_width=\"100dip\"\n             android:layout_height=\"wrap_content\"\n             android:onClick=\"uploadPhoto\"\n             android:text=\"@string/upload_button_text\" />\n\n\n### Add code for photo capture\n\n1. In **ToDoActivity.java** add this code to create a **File** object with a unique name.\n\n\t\t// Create a File object for storing the photo\n\t    private File createImageFile() throws IOException {\n\t        // Create an image file name\n\t        String timeStamp = new SimpleDateFormat(\"yyyyMMdd_HHmmss\").format(new Date());\n\t        String imageFileName = \"JPEG_\" + timeStamp + \"_\";\n\t        File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);\n\t        File image = File.createTempFile(\n\t                imageFileName,  /* prefix */\n\t                \".jpg\",         /* suffix */\n\t                storageDir      /* directory */\n\t        );\n\t        return image;\n\t    }\n\n5. Add this code to start the Android camera app. You can then take pictures, and when one looks OK, press **Save**, which will store it in the file you just created.\n\n\t\t// Run an Intent to start up the Android camera\n\t    static final int REQUEST_TAKE_PHOTO = 1;\n\t    public Uri mPhotoFileUri = null;\n\t    public File mPhotoFile = null;\n\n\t    public void takePicture(View view) {\n\t        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);\n\t        // Ensure that there's a camera activity to handle the intent\n\t        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {\n\t            // Create the File where the photo should go\n\t            try {\n\t                mPhotoFile = createImageFile();\n\t            } catch (IOException ex) {\n\t                // Error occurred while creating the File\n\t                //\n\t            }\n\t            // Continue only if the File was successfully created\n\t            if (mPhotoFile != null) {\n\t                mPhotoFileUri = Uri.fromFile(mPhotoFile);\n\t                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mPhotoFileUri);\n\t                startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);\n\t            }\n\t        }\n\t    }\n\n### Add code to upload photo file to blob storage\n\n\n1. First we add some new meta-data fields to the `ToDoItem` object by adding this code to **ToDoItem.java**.\n\n\t\t/**\n\t     *  imageUri - points to location in storage where photo will go\n\t     */\n\t    @com.google.gson.annotations.SerializedName(\"imageUri\")\n\t    private String mImageUri;\n\n\t    /**\n\t     * Returns the item ImageUri\n\t     */\n\t    public String getImageUri() {\n\t        return mImageUri;\n\t    }\n\n\t    /**\n\t     * Sets the item ImageUri\n\t     *\n\t     * @param ImageUri\n\t     *            Uri to set\n\t     */\n\t    public final void setImageUri(String ImageUri) {\n\t        mImageUri = ImageUri;\n\t    }\n\n\t    /**\n\t     * ContainerName - like a directory, holds blobs\n\t     */\n\t    @com.google.gson.annotations.SerializedName(\"containerName\")\n\t    private String mContainerName;\n\n\t    /**\n\t     * Returns the item ContainerName\n\t     */\n\t    public String getContainerName() {\n\t        return mContainerName;\n\t    }\n\n\t    /**\n\t     * Sets the item ContainerName\n\t     *\n\t     * @param ContainerName\n\t     *            Uri to set\n\t     */\n\t    public final void setContainerName(String ContainerName) {\n\t        mContainerName = ContainerName;\n\t    }\n\n\t    /**\n\t     *  ResourceName\n\t     */\n\t    @com.google.gson.annotations.SerializedName(\"resourceName\")\n\t    private String mResourceName;\n\n\t    /**\n\t     * Returns the item ResourceName\n\t     */\n\t    public String getResourceName() {\n\t        return mResourceName;\n\t    }\n\n\t    /**\n\t     * Sets the item ResourceName\n\t     *\n\t     * @param ResourceName\n\t     *            Uri to set\n\t     */\n\t    public final void setResourceName(String ResourceName) {\n\t        mResourceName = ResourceName;\n\t    }\n\n\t    /**\n\t     *  SasQueryString - permission to write to storage\n\t     */\n\t    @com.google.gson.annotations.SerializedName(\"sasQueryString\")\n\t    private String mSasQueryString;\n\n\t    /**\n\t     * Returns the item SasQueryString\n\t     */\n\t    public String getSasQueryString() {\n\t        return mSasQueryString;\n\t    }\n\n\t    /**\n\t     * Sets the item SasQueryString\n\t     *\n\t     * @param SasQueryString\n\t     *            Uri to set\n\t     */\n\t    public final void setSasQueryString(String SasQueryString) {\n\t        mSasQueryString = SasQueryString;\n\t    }\n\n2. Replace the 0-parameter constructor with this code:\n\n\t    /**\n\t     * ToDoItem constructor\n\t     */\n\t    public ToDoItem() {\n\t        mContainerName = \"\";\n\t        mResourceName = \"\";\n\t        mImageUri = \"\";\n\t        mSasQueryString = \"\";\n\t    }\n\n3. Replace the multi-parameter constructor with this code:\n\n\t    /**\n\t     * Initializes a new ToDoItem\n\t     *\n\t     * @param text\n\t     *            The item text\n\t     * @param id\n\t     *            The item id\n\t     */\n\t    public ToDoItem(String text,\n\t                    String id,\n\t                    String containerName,\n\t                    String resourceName,\n\t                    String imageUri,\n\t                    String sasQueryString) {\n\t        this.setText(text);\n\t        this.setId(id);\n\t        this.setContainerName(containerName);\n\t        this.setResourceName(resourceName);\n\t        this.setImageUri(imageUri);\n\t        this.setSasQueryString(sasQueryString);\n\t    }\n\n\n4. In the **ToDoActivity.java** file, replace the **addItem** method in **ToDoActivity.java**  with the following code that uploads the image.\n\n\t    /**\n\t     * Add a new item\n\t     *\n\t     * @param view\n\t     *            The view that originated the call\n\t     */\n\t    public void uploadPhoto(View view) {\n\t        if (mClient == null) {\n\t            return;\n\t        }\n\n\t        // Create a new item\n\t        final ToDoItem item = new ToDoItem();\n\n\t        item.setText(mTextNewToDo.getText().toString());\n\t        item.setComplete(false);\n\t        item.setContainerName(\"todoitemimages\");\n\n\t        // Use a unigue GUID to avoid collisions.\n\t        UUID uuid = UUID.randomUUID();\n\t        String uuidInString = uuid.toString();\n\t        item.setResourceName(uuidInString);\n\n\t        // Send the item to be inserted. When blob properties are set this\n\t        // generates an SAS in the response.\n\t        AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>(){\n\t            @Override\n\t            protected Void doInBackground(Void... params) {\n\t                try {\n\t\t                    final ToDoItem entity = addItemInTable(item);\n\n\t\t                    // If we have a returned SAS, then upload the blob.\n\t\t                    if (entity.getSasQueryString() != null) {\n\n\t                       // Get the URI generated that contains the SAS\n\t                        // and extract the storage credentials.\n\t                        StorageCredentials cred =\n\t\t\t\t\t\t\t\tnew StorageCredentialsSharedAccessSignature(entity.getSasQueryString());\n\t                        URI imageUri = new URI(entity.getImageUri());\n\n\t                        // Upload the new image as a BLOB from a stream.\n\t                        CloudBlockBlob blobFromSASCredential =\n\t                                new CloudBlockBlob(imageUri, cred);\n\n\t                        blobFromSASCredential.uploadFromFile(mPhotoFileUri.getPath());\n  \t                    }\n\n\t                    runOnUiThread(new Runnable() {\n\t                        @Override\n\t                        public void run() {\n\t                            if(!entity.isComplete()){\n\t                                mAdapter.add(entity);\n\t                            }\n\t                        }\n\t                    });\n\t                } catch (final Exception e) {\n\t                    createAndShowDialogFromTask(e, \"Error\");\n\t                }\n\t                return null;\n\t            }\n\t        };\n\n\t        runAsyncTask(task);\n\n\t        mTextNewToDo.setText(\"\");\n\t    }\n\n\nThis code sends a request to the mobile service to insert a new TodoItem. The response contains the SAS, which is then used to upload the image from local storage to a blob in Azure storage.\n\n\n## Test uploading the images\n\n1. In Android Studio press **Run**. In the dialogue, choose the device to use.\n\n2. When the app UI appears, enter text in the textbox labeled **Add a ToDo item**.\n\n3. Press **Take Photo**. When the camera app starts, take a photo. Press the check mark to accept the photo.\n\n4. Press **Upload**. Note how the ToDoItem has been added to the list, as usual.\n\n5. In the Azure classic portal, go to your storage account and press the **Containers** tab, and press the name of your container in the list.\n\n6. A list of your uploaded blob files will appear. Select one and press **Download**.\n\n7. The image that you uploaded now appears in a browser window.\n\n\n## <a name=\"next-steps\"> </a>Next steps\n\nNow that you have been able to securely upload images by integrating your mobile service with the Blob service, check out some of the other backend service and integration topics:\n\n+ [Send email from Mobile Services with SendGrid]\n\n  Learn how to add email functionality to your Mobile Service using the SendGrid email service. This topic demonstrates how to add server side scripts to send email using SendGrid.\n\n+ [Schedule backend jobs in Mobile Services]\n\n  Learn how to use the Mobile Services job scheduler functionality to define server script code that is executed on a schedule that you define.\n\n+ [Mobile Services server script reference]\n\n  Reference topics for using server scripts to perform server-side tasks and integration with other Azure components and external resources.\n\n+ [Mobile Services .NET How-to Conceptual Reference]\n\n  Learn more about how to use Mobile Services with .NET\n\n\n<!-- Anchors. -->\n[Install the Storage Client library]: #install-storage-client\n[Update the client app to capture images]: #add-select-images\n[Update the insert script to generate an SAS]: #update-scripts\n[Upload images to test the app]: #test\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n\n[2]: ./media/mobile-services-windows-store-dotnet-upload-data-blob-storage/mobile-add-storage-nuget-package-dotnet.png\n\n\n<!-- URLs. -->\n[Send email from Mobile Services with SendGrid]: store-sendgrid-mobile-services-send-email-scripts.md\n[Schedule backend jobs in Mobile Services]: mobile-services-schedule-recurring-tasks.md\n[Send push notifications to Windows Store apps using Service Bus from a .NET back-end]: http://go.microsoft.com/fwlink/?LinkId=277073&clcid=0x409\n[Mobile Services server script reference]: mobile-services-how-to-use-server-scripts.md\n[Get started with Mobile Services]: mobile-services-javascript-backend-windows-store-dotnet-get-started.md\n\n[Azure classic portal]: https://manage.windowsazure.com/\n[How To Create a Storage Account]: https://azure.microsoft.com/en-us/documentation/articles/storage-create-storage-account/\n[Azure Storage Client library for Store apps]: http://go.microsoft.com/fwlink/p/?LinkId=276866\n[Mobile Services .NET How-to Conceptual Reference]: mobile-services-windows-dotnet-how-to-use-client-library.md\n[App settings]: http://msdn.microsoft.com/library/windowsazure/b6bb7d2d-35ae-47eb-a03f-6ee393e170f7\n"
  },
  {
    "path": "docs/mobile-services-concepts-links.md",
    "content": "<properties\n\tpageTitle=\"Mobile Services Concepts\"\n\tdescription=\"Links to Mobile Services concepts topics found in the Help Drawer in the Azure classic portal.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"na\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-multiple\"\n\tms.devlang=\"na\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Mobile Services concepts\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThe topics linked below provide information about specific behaviors of Microsoft Azure Mobile Services. These same topics are available as help in the Azure classic portal.\n\n## <a name=\"what-is\"></a>What is Mobile Services\n\nAzure Mobile Services is a highly scalable mobile application development platform that lets you add enhanced functionality to your mobile device apps by using Azure. \n\nWith Mobile Services you can: \n\n+ **Build native and cross platform apps** - Connect your iOS, Android, Windows, or cross-platform Xamarin or Cordova (Phonegap) apps to your backend mobile service using native SDKs.  \n+ **Send push notifications to your users** - Send push notifications to your users of your app.\n+ **Authenticate your users** - Leverage popular identity providers like Facebook and Twitter to authenticate your app users.\n+ **Store data in the cloud** - Store user data in a SQL Database (by default) or in Mongo DB, DocumentDB, Azure Tables, or Azure Blobs. \n+ **Build offline-ready apps with sync** - Make your apps work offline and use Mobile Services to sync data in the background.\n+ **Monitor and scale your apps** - Monitor app usage and scale your backend as demand grows. \n\n## <a name=\"concepts\"> </a>Mobile Services Concepts\n\nThe following are important features and concepts in the Mobile Services:\n\n+ **Application key:** a unique value that is used to limit access to your mobile service from random clients; this \"key\" is not a security token and is not used to authenticate users of your app.    \n+ **Backend:** the mobile service instance that supports your app. A mobile service is implemented either as an ASP.NET Web API project (*.NET backend* ) or as a Node.js project (*JavaScript backend*).\n+ **Identity provider:** an external service, trusted by Mobile Services, that authenticates your app's users. Supported providers include: Facebook, Twitter, Google, Microsoft Account, and Azure Active Directory. \n+ **Push notification:** Service-initiated message that is sent to a registered device or user using Azure Notification Hubs.\n+ **Scale:** The ability to add, for an additional cost, more processing power, performance, and storage as your app becomes more popular.\n+ **Scheduled job:** Custom code that is run either on a pre-determined schedule or on-demand.\n\nFor more information, see [Mobile Services Concepts](./\nmobile-services-concepts-links.md).\n\nThe [overview topic](https://msdn.microsoft.com/library/azure/jj193167.aspx) describes the benefits of using Mobile Services and what tasks can be performed in the Azure classic portal. For more general information about Mobile Services and examples of how to use Mobile Services in your apps, see [Mobile Services Tutorials and Resources](https://azure.microsoft.com/documentation/services/mobile-services/).\n\n## Configuration\nThe following topics provide information about creating, deleting and configuring Mobile Services:\n\n- [Create a mobile service](https://msdn.microsoft.com/library/azure/jj193169.aspx)\n- [Delete a mobile service](https://msdn.microsoft.com/library/azure/jj193173.aspx)\n- [Manage keys](https://msdn.microsoft.com/library/azure/jj193164.aspx)\n- [Change the database](https://msdn.microsoft.com/library/azure/jj193170.aspx)\n- [Scaling a mobile service](https://msdn.microsoft.com/library/azure/jj193178.aspx)\n- [Configure identity](https://msdn.microsoft.com/library/azure/jj591527.aspx)\n\n## Data access\nThe following topics provide information about accessing and changing app data stored in Mobile Services:\n\n- [Work with data](https://msdn.microsoft.com/library/azure/jj631634.aspx)\n- [Create a table](https://msdn.microsoft.com/library/azure/jj193162.aspx)\n- [Permissions](https://msdn.microsoft.com/library/azure/jj193161.aspx)\n- [Dynamic schema](https://msdn.microsoft.com/library/azure/jj193175.aspx)\n- [Browse records](https://msdn.microsoft.com/library/azure/jj193171.aspx)\n- [Delete data](https://msdn.microsoft.com/library/azure/jj908633.aspx)\n- [Manage columns](https://msdn.microsoft.com/library/azure/jj193177.aspx)\n- [System columns](https://msdn.microsoft.com/library/azure/dn518225.aspx)\n\n## Push notifications\nThe following topics provide information about configuring push notifications in Mobile Services:\n\n- [Configure push notifications](https://msdn.microsoft.com/library/azure/jj591526.aspx)\n- [Register endpoint](https://msdn.microsoft.com/library/azure/dn771685.aspx)\n- [Send push notifications](https://msdn.microsoft.com/library/azure/jj631630.aspx)\n\n## Scheduled jobs\nThe following topics provide information about working with scheduled jobs:\n\n- [Schedule jobs](https://msdn.microsoft.com/library/azure/jj860528.aspx)\n- [Configure jobs](https://msdn.microsoft.com/library/azure/jj899833.aspx)\n- [Register job scripts](https://msdn.microsoft.com/library/azure/jj899832.aspx)\n\n## Custom APIs\nThe following topics provide information about defining custom HTTP endpoints in Mobile Services:\n\n- [Custom API](https://msdn.microsoft.com/library/azure/dn280974.aspx)\n- [Content types and headers](https://msdn.microsoft.com/library/azure/dn303369.aspx)\n\n## JavaScript backend server scripts\nThe following topics provide examples of how to perform tasks using server scripts in a JavaScript backend mobile services:\n\n- [Using scripts](https://msdn.microsoft.com/library/azure/jj193174.aspx)\n- [Script debugging](https://msdn.microsoft.com/library/azure/jj631636.aspx)\n- [Read and write data](https://msdn.microsoft.com/library/azure/jj631640.aspx)\n- [Modify the request](https://msdn.microsoft.com/library/azure/jj631635.aspx)\n- [Modify the response](https://msdn.microsoft.com/library/azure/jj631631.aspx)\n- [Validate data](https://msdn.microsoft.com/library/azure/jj631638.aspx)\n- [Send push notification](https://msdn.microsoft.com/library/azure/jj631630.aspx)\n- [Send HTTP request](https://msdn.microsoft.com/library/azure/jj631641.aspx)\n- [Authorize user](https://msdn.microsoft.com/library/azure/jj631637.aspx)\n- [Restrict access to admins](https://msdn.microsoft.com/library/azure/jj712649.aspx)\n- [Error handling](https://msdn.microsoft.com/library/azure/jj631632.aspx)\n- [Shortcut keys](https://msdn.microsoft.com/library/azure/jj552469.aspx)\n\n\n\n\n\n\n\n"
  },
  {
    "path": "docs/mobile-services-disaster-recovery.md",
    "content": "<properties\n\tpageTitle=\"Recover your mobile service in the event of a disaster | Microsoft Azure\"\n\tdescription=\"Learn how to recover your mobile service in the event of a disaster.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"christopheranderson\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"christopheranderson\"/>\n\n# Recover your mobile service in the event of a disaster\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\nWhen you use Azure Mobile Services to deploy an app, you can use its built-in features to ensure business continuity in the event of availability problems, such as server failures, network disruptions, data loss, and widespread facilities loss. By deploying your app using Azure Mobile Services you are taking advantage of many fault tolerance and infrastructure capabilities that you would have to design, implement, and manage if you were to deploy a traditional on-premise solution. Azure mitigates a large fraction of potential failures at a fraction of the cost.\n\n## <a name=\"prepare\"></a> Prepare for possible disasters\n\nTo make recovery easier in case of an availability problem, you can prepare for it in advance:\n\n+ **Back up your data in the Azure mobile service SQL Database**\n\tYour mobile service application data is stored in an Azure SQL Database. We recommend that you back it up as prescribed in the [SQL Database business continuity guidance].\n+ **Back up your mobile service scripts**\n\tWe recommend that you store your mobile service scripts in a source-control system such as [Team Foundation Service] or [GitHub] and not rely only on the copies in the mobile service itself. You can download the scripts via the Azure classic portal, using the Mobile Services [source control feature], or [using the Azure CLI]. Pay close attention to features labeled as \"preview\" in the Azure classic portal, as recovery for those scripts is not guaranteed and you might need to recover them from your own source control original.\n+ **Reserve a secondary mobile service**\n\tIn the event of an availability problem with your mobile service, you may have to redeploy it to an alternate Azure region. To ensure capacity is available (for example under rare circumstances such as the loss of an entire region), we recommend that you create a secondary mobile service in your alternate region and set its mode the same as or higher than the mode of your primary service. (If your primary service is in Basic mode, you can make the secondary service either Basic or Standard. But if the primary is Standard, then the secondary must also be Standard.)\n\n## <a name=\"watch\"></a>Watch for signs of a problem\n\nThese circumstances indicate a problem that might require a recovery operation:\n\n+ Apps that are connected to your mobile service can't communicate with it for an extended period of time.\n+ Mobile service status is displayed as **Unhealthy** in the [Azure classic portal].\n+ An **Unhealthy** banner appears at the top of every tab for your mobile service in the Azure classic portal, and management operations produce error messages.\n+ The [Azure Service Dashboard] indicates an availability problem.\n\n## <a name=\"recover\"></a>Recover from a disaster\n\nWhen a problem occurs, use the Service Dashboard to get guidance and updates.\n\nIf you're prompted by the Service Dashboard, execute the following steps to restore your mobile service to a running state in an alternate Azure region. If you created a secondary service in advance, its capacity will be used to restore the primary service. Because the URL and application key of the primary service is unchanged after recovery, you don't have to update any apps that refer to it.\n\nTo recover your mobile service after an outage:\n\n1. In the Azure classic portal, ensure that the status of your service is reported as **Unhealthy**.\n\n2. If you already reserved a secondary mobile service, you can skip this step.\n\n   If you haven't already reserved a secondary mobile service, create one now in another Azure region. Set its scale mode the same as the mode of your primary service.\n\n3. Configure the Azure Command-Line Interface (Azure CLI) to work with your subscription, as described in [Automate mobile services with the Azure CLI].\n\n4. Now you can use your secondary service to recover your primary one.\n\n\t> [AZURE.IMPORTANT] In addition to migrating your files, the migrate command also updates the host name of your primary service to point to your secondary service so that client applications do not need to be updated. However, it will take up to 30 minutes for the host name to resolve to the new service. For this reason, it is recommended that the migrate command only be used in disaster recovery scenarios.\n\n\t> [AZURE.IMPORTANT] When you execute the command in this step, the secondary service is deleted so that its capacity can be used to recover the primary service. We recommend that you back up your scripts and settings before you run the command, if you would like to keep them.\n\n\tWhen you're ready, execute this command:\n\n\t\tazure mobile migrate PrimaryService SecondaryService\n\t\tinfo:    Executing command mobile migrate\n\t\tWarning: this action will use the capacity from the mobile service 'SecondaryService' and delete it and the host name for 'PrimaryService' may not resolve for up to 30 minutes. Do you want to migrate the mobile service 'PrimaryService'? [y/n]: y\n\t\t+ Performing migration\n\t\t+ Migration with id '0123456789abcdef0123456789abcdef' started. The migration may take several minutes to complete.\n\t\t+ Cleaning up\n\t\tinfo:    Migration complete. It may take 30 minutes for DNS to resolve to the migrated site.\n\t\tinfo:    mobile migrate command OK\n\n    > [AZURE.NOTE] It may take a few minutes after the command completes until you can see the changes in the Azure classic portal.\n\n5. Verify that all scripts have been recovered correctly by comparing them to your originals in source control. In most cases, scripts are automatically recovered without data loss, but if you find a discrepancy, you can recover that script manually.\n\n6. Make sure that your recovered service is communicating with your Azure SQL Database. The recover command recovers the mobile service, but retains the connection to the original database. If the problem in the primary Azure region also affects the database, the recovered service may still not be running correctly. You can use the Azure Service Dashboard to examine the database status for a given region. If the original database is not working, you can recover it:\n\t+ Recover your Azure SQL Database to the Azure region where you just recovered your mobile service, as described in [SQL Database business continuity guidance].\n\t+ In the Azure classic portal, on the **\"Configure\"** tab of your mobile service, choose \"Change database\" and then select the newly recovered database.\n\n7. Your mobile service is now hosted in a different physical location. You'll need to update your publishing and/or git credentials to allow for updating your running site.\n\n\t+ If you are using a **.NET backend**, set up your publishing profile again, as described in [Publish your mobile service](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md#publish-your-mobile-service). This will update your publishing details to point to the new service location.\n\t+ If you are using a **Javascript backend** and managing your service with the Portal, you don't need to take any extra action.\n\n\t+ If you are using a **Javascript backend** and managing your service with node, update your git remote to point to the new repository. To do this, you remove the .git file path from your git remote:\n\n\t\t1. Find your current origin remote:\n\n\t\t\t\tgit remote -v\n\t\t\t\t origin  https://myservice.scm.azure-mobile.net/myservice.git (fetch)\n\t\t\t\t origin  https://myservice.scm.azure-mobile.net/myservice.git (push)\n\n\t\t3. Update the remote using the same url, but without the final .git file path:\n\t\t\t\tgit remote set-url origin https://myservice.scm.azure-mobile.net\n\t\t4. Pull from origin to verify that it is working correctly.\n\nNow you should be in a state where your mobile service has been recovered to a new Azure region and is now accepting traffic from your store apps using its original URL.\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[SQL Database business continuity guidance]: http://msdn.microsoft.com/library/windowsazure/hh852669.aspx\n[Team Foundation Service]: http://tfs.visualstudio.com/\n[Github]: https://github.com/\n[source control feature]: http://www.windowsazure.comhttps://azure.microsoft.com/develop/mobile/tutorials/store-scripts-in-source-control/\n[using the Azure CLI]: http://www.windowsazure.comhttps://azure.microsoft.com/develop/mobile/tutorials/command-line-administration/\n[Azure classic portal]: http://manage.windowsazure.com/\n[Azure Service Dashboard]: http://www.windowsazure.com/support/service-dashboard/\n[Automate mobile services with the Azure CLI]: http://www.windowsazure.comhttps://azure.microsoft.com/develop/mobile/tutorials/command-line-administration/\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-android-get-started-push.md",
    "content": "<properties\n\tpageTitle=\"Get started with push (Android) | Microsoft Azure\"\n\tdescription=\"Learn how to use Azure Mobile Services to send push notifications to your Android .Net app.\"\n\tservices=\"mobile-services, notification-hubs\"\n\tdocumentationCenter=\"android\"\n\tauthors=\"RickSaling\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-android\"\n\tms.devlang=\"java\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ricksal\"/>\n\n# Add push notifications to your Mobile Services app\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-push.md)\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-javascript-backend-windows-phone-get-started-push.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started-push.md)\n- [(Android | Javascript)](mobile-services-javascript-backend-android-get-started-push.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-push.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-push.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-push.md)\n- [(Xamarin.Forms | JavaScript)](partner-xamarin-mobile-services-xamarin-forms-get-started-push.md)\n\nThis topic shows how to use Azure Mobile Services to send push notifications to your Android app. In this tutorial you add push notifications using Google Cloud Messaging (GCM) to the quickstart project. When complete, your mobile service will send a push notification each time a record is inserted.\n\nThis tutorial is based on the Mobile Services quickstart. Before you start this tutorial, you must first complete [Get started with Mobile Services] to connect your project to the mobile service. As such, this tutorial also requires Visual Studio 2013.\n\n## Sample code\nTo see the completed source code go [here](https://github.com/RickSaling/mobile-services-samples/tree/push/GettingStartedWithPush).\n\n## Enable Google Cloud Messaging\n\n\n1. Navigate to the [Google Cloud Console](https://console.developers.google.com/project), sign in with your Google account credentials.\n\n2. Click **Create Project**, type a project name, then click **Create**. If requested, carry out the SMS Verification, and click **Create** again.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/mobile-services-google-new-project.png)   \n\n\t Type in your new **Project name** and click **Create project**.\n\n3. Click the **Utilities and More** button and then click **Project Information**. Make a note of the **Project Number**. You will need to set this value as the `SenderId` variable in the client app.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/notification-hubs-utilities-and-more.png)\n\n\n4. In the project dashboard, under **Mobile APIs**, click **Google Cloud Messaging**, then on the next page click **Enable API** and accept the terms of service.\n\n\t![Enabling GCM](./media/mobile-services-enable-google-cloud-messaging/enable-GCM.png)\n\n\t![Enabling GCM](./media/mobile-services-enable-google-cloud-messaging/enable-gcm-2.png)\n\n5. In the project dashboard, Click **Credentials** > **Create Credential** > **API Key**.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/mobile-services-google-create-server-key.png)\n\n6. In **Create a new key**, click **Server key**, type a name for your key, then click **Create**.\n\n7. Make a note of the **API KEY** value.\n\n\tYou will use this API key value to enable Azure to authenticate with GCM and send push notifications on behalf of your app.\n\n\n## Configure your mobile service to send push requests\n\n\n1. Log on to the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, and then click your app.\n\n2. Click the **Push** tab, enter the **API Key** value obtained from GCM in the previous procedure, then click **Save**.\n\n   \t![](./media/mobile-services-android-configure-push/mobile-push-tab-android.png)\n\n    >[AZURE.NOTE]When you set your GCM credentials for enhanced push notifications in the Push tab in the portal, they are shared with Notification Hubs to configure the notification hub with your app.\n\nBoth your mobile service and your app are now configured to work with GCM and Notification Hubs.\n\n## Update the mobile service to send push notifications\n\n\n1. In Visual Studio Solution Explorer, expand the **Controllers** folder in the mobile service project. Open TodoItemController.cs. At the top of the file, add the following `using` statements:\n\n\t\tusing System;\n\t\tusing System.Collections.Generic;\n\n2. Update the `PostTodoItem` method definition with the following code:  \n\n        public async Task<IHttpActionResult> PostTodoItem(TodoItem item)\n        {\n            TodoItem current = await InsertAsync(item);\n\n            Dictionary<string, string> data = new Dictionary<string, string>()\n            {\n                { \"message\", item.Text}\n            };\n            GooglePushMessage message = new GooglePushMessage(data, TimeSpan.FromHours(1));\n\n            try\n            {\n                var result = await Services.Push.SendAsync(message);\n                Services.Log.Info(result.State.ToString());\n            }\n            catch (System.Exception ex)\n            {\n                Services.Log.Error(ex.Message, null, \"Push.SendAsync Error\");\n            }\n            return CreatedAtRoute(\"Tables\", new { id = current.Id }, current);\n        }\n\n    This code will send a push notification (with the text of the inserted item) after inserting a todo item. In the event of an error, the code will add an error log entry which is viewable on the **Logs** tab of the mobile service in the [Azure classic portal](https://manage.windowsazure.com/).\n\n3. Republish your mobile service project to Azure.\n\n## Add push notifications to your app\n\n### Verify Android SDK Version\n\nBecause of ongoing development, the Android SDK version installed in Android Studio might not match the version in the code. The Android SDK referenced in this tutorial is version 21, the latest at the time of writing. The version number may increase as new releases of the SDK appear, and we recomend using the latest version available.\n\nTwo symptoms of version mismatch are:\n\n1. When you Build or Rebuild the project, you may get Gradle error messages like \"**failed to find target Google Inc.:Google APIs:n**\".\n\n2. Standard Android objects in code that should resolve based on `import` statements may be generating error messages.\n\nIf either of these appear, the version of the Android SDK installed in Android Studio might not match the SDK target of the downloaded project.  To verify the version, make the following changes:\n\n\n1. In Android Studio, click **Tools** => **Android** => **SDK Manager**. If you have not installed the latest version of the SDK Platform, then click to install it. Make a note of the version number.\n\n2. In the Project Explorer tab, under **Gradle Scripts**, open the file **build.gradle (modeule: app)**. Ensure that the **compileSdkVersion** and **buildToolsVersion** are set to the latest  SDK version installed. The tags might look like this:\n\n\t \t    compileSdkVersion 'Google Inc.:Google APIs:21'\n    \t\tbuildToolsVersion \"21.1.2\"\n\n3. In the Android Studio Project Explorer right-click the project node, choose **Properties**, and in the left column choose **Android**. Ensure that the **Project Build Target** is set to the same SDK version as the **targetSdkVersion**.\n\n4. In Android Studio, the manifest file is no longer used to specify the target SDK and minimum SDK version, unlike the case with Eclipse.\n\n\nYour next step is to install Google Play services. Google Cloud Messaging has some minimum API level requirements for development and testing, which the **minSdkVersion** property in the Manifest must conform to.\n\nIf you will be testing with an older device, then consult [Set Up Google Play Services SDK] to determine how low you can set this value, and set it appropriately.\n\n### Add Google Play Services to the project\n\n1. Open the Android SDK Manager by clicking the icon on the toolbar of Android Studio or by clicking **Tools** -> **Android** -> **SDK Manager** on the menu. Locate the target version of the Android SDK that is used in your project , open it, and choose **Google APIs**, if it is not already installed.\n\n2. Scroll down to **Extras**, expand it, and choose **Google Play Services**, as shown below. Click **Install Packages**. Note the SDK path, for use in the following step.\n\n   \t![](./media/notification-hubs-android-get-started/notification-hub-create-android-app4.png)\n\n\n3. Open the **build.gradle** file in the app directory.\n\n\t![](./media/mobile-services-android-get-started-push/android-studio-push-build-gradle.png)\n\n4. Add this line under *dependencies*:\n\n   \t\tcompile 'com.google.android.gms:play-services-gcm:8.4.0'\n\n5. Under *defaultConfig*, change *minSdkVersion* to 9.\n\n6. Click the **Sync Project with Gradle Files** icon in the tool bar.\n\n7. Open **AndroidManifest.xml** and add this tag to the *application* tag.\n\n        <meta-data android:name=\"com.google.android.gms.version\"\n            android:value=\"@integer/google_play_services_version\" />\n\n\n\n\n\n\n### Add code\n\n1. In your **app** project, open the file `AndroidManifest.xml`. In the code in the next two steps, replace _`**my_app_package**`_ with the name of the app package for your project, which is the value of the `package` attribute of the `manifest` tag.\n\n2. Add the following new permissions after the existing `uses-permission` element:\n\n        <permission android:name=\"**my_app_package**.permission.C2D_MESSAGE\"\n            android:protectionLevel=\"signature\" />\n        <uses-permission android:name=\"**my_app_package**.permission.C2D_MESSAGE\" />\n        <uses-permission android:name=\"com.google.android.c2dm.permission.RECEIVE\" />\n        <uses-permission android:name=\"android.permission.GET_ACCOUNTS\" />\n        <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n\n3. Add the following code after the `application` opening tag:\n\n        <receiver android:name=\"com.microsoft.windowsazure.notifications.NotificationsBroadcastReceiver\"\n            \t\t\t\t\t\t \tandroid:permission=\"com.google.android.c2dm.permission.SEND\">\n            <intent-filter>\n                <action android:name=\"com.google.android.c2dm.intent.RECEIVE\" />\n                <category android:name=\"**my_app_package**\" />\n            </intent-filter>\n        </receiver>\n\n\n4. Add this line under *dependencies* in the **build.gradle** file in the app directory and re-sync gradle with the project:\n\n\t    compile(group: 'com.microsoft.azure', name: 'azure-notifications-handler', version: '1.0.1', ext: 'jar')\n\n\n5. Open the file *ToDoItemActivity.java*, and add the following import statement:\n\n\t\timport com.microsoft.windowsazure.notifications.NotificationsManager;\n\n\n6. Add the following private variable to the class: replace _`<PROJECT_NUMBER>`_ with the Project Number assigned by Google to your app in the preceding procedure:\n\n\t\tpublic static final String SENDER_ID = \"<PROJECT_NUMBER>\";\n\n7. Change the definition of the *MobileServiceClient* from **private** to **public static**, so it now looks like this:\n\n\t\tpublic static MobileServiceClient mClient;\n\n\n\n8. Next we need to add a new class to handle notifications. In the Project Explorer, open the **src** => **main** => **java** nodes, and right-click the  package name node: click **New**, then click **Java Class**.\n\n9. In **Name** type `MyHandler`, then click **OK**.\n\n\n\t![](./media/mobile-services-android-get-started-push/android-studio-create-class.png)\n\n\n10. In the MyHandler file, replace the class declaration with\n\n\t\tpublic class MyHandler extends NotificationsHandler {\n\n\n11. Add the following import statements for the `MyHandler` class:\n\n\t\timport android.app.NotificationManager;\n\t\timport android.app.PendingIntent;\n\t\timport android.content.Context;\n\t\timport android.content.Intent;\n\t\timport android.os.AsyncTask;\n\t\timport android.os.Bundle;\n\t\timport android.support.v4.app.NotificationCompat;\n\n\n12. Next add the following members for the `MyHandler` class:\n\n\t\tpublic static final int NOTIFICATION_ID = 1;\n\t\tprivate NotificationManager mNotificationManager;\n\t\tNotificationCompat.Builder builder;\n\t\tContext ctx;\n\n\n13. In the `MyHandler` class, add the following code to override the **onRegistered** method, which registers your device with the mobile service Notification Hub.\n\n\t\t@Override\n\t\tpublic void onRegistered(Context context,  final String gcmRegistrationId) {\n\t\t    super.onRegistered(context, gcmRegistrationId);\n\n\t\t    new AsyncTask<Void, Void, Void>() {\n\n\t\t    \tprotected Void doInBackground(Void... params) {\n\t\t    \t\ttry {\n\t\t    \t\t    ToDoActivity.mClient.getPush().register(gcmRegistrationId, null);\n\t\t    \t\t    return null;\n\t    \t\t    }\n\t    \t\t    catch(Exception e) {\n\t\t\t    \t\t// handle error    \t\t    \n\t    \t\t    }\n\t\t\t\t\treturn null;  \t\t    \n\t    \t\t}\n\t\t    }.execute();\n\t\t}\n\n\n\n14. In the `MyHandler` class, add the following code to override the **onReceive** method, which causes the notification to display when it is received.\n\n\t\t@Override\n\t\tpublic void onReceive(Context context, Bundle bundle) {\n\t\t    ctx = context;\n\t\t    String nhMessage = bundle.getString(\"message\");\n\n\t\t    sendNotification(nhMessage);\n\t\t}\n\n\t\tprivate void sendNotification(String msg) {\n\t\t\tmNotificationManager = (NotificationManager)\n\t\t              ctx.getSystemService(Context.NOTIFICATION_SERVICE);\n\n\t\t    PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,\n\t\t          new Intent(ctx, ToDoActivity.class), 0);\n\n\t\t    NotificationCompat.Builder mBuilder =\n\t\t          new NotificationCompat.Builder(ctx)\n\t\t          .setSmallIcon(R.drawable.ic_launcher)\n\t\t          .setContentTitle(\"Notification Hub Demo\")\n\t\t          .setStyle(new NotificationCompat.BigTextStyle()\n\t\t                     .bigText(msg))\n\t\t          .setContentText(msg);\n\n\t\t     mBuilder.setContentIntent(contentIntent);\n\t\t     mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());\n\t\t}\n\n\n15. Back in the TodoActivity.java file, update the **onCreate** method of the *ToDoActivity* class to register the notification handler class. Make sure to add this code after the *MobileServiceClient* is instantiated.\n\n\n\t\tNotificationsManager.handleNotifications(this, SENDER_ID, MyHandler.class);\n\n    Your app is now updated to support push notifications.\n\n<!-- URLs. -->\n[Mobile Services Android SDK]: http://aka.ms/Iajk6q\n\n## Test the app against the published mobile service\n\nYou can test the app by directly attaching an Android phone with a USB cable, or by using a virtual device in the emulator.\n\n### Enable push notifications for local testing\n\n\nYou can optionally test push notifications with your mobile service running on the local computer or VM before you publish to Azure. To do this, you must set information about the notification hub used by your app in the web.config file. This information is only used when running locally to connect to the notification hub; it is ignored when published to Azure.\n\n1. Back in the **Push** tab of your mobile service, click the **Notification Hub** link.\n\n\t![](./media/mobile-services-dotnet-backend-configure-local-push/link-to-notification-hub.png)\n\n\tThis navigates to the notification hub used by your mobile service.\n\n2. In the notification hub page, make a note of the name of your notification hub, then click **View Connection String**.\n\n\t![](./media/mobile-services-dotnet-backend-configure-local-push/notification-hub-page.png)\n\n3. In the **Access connection information**, copy the **DefaultFullSharedAccessSignature** connection string.\n\n\t![](./media/mobile-services-dotnet-backend-configure-local-push/notification-hub-connection-string.png)\n\n4. In your mobile service project in Visual Studio, open the Web.config file for the service and in **connectionStrings**, replace the connection string for **MS_NotificationHubConnectionString** with the connection string from the previous step.\n\n5. In **appSettings**, replace the value of the **MS_NotificationHubName** app setting with the name of the notification hub.\n\nNow, the mobile service project is configured to connect to the notification hub in Azure when running locally. Note that it is important to use the same notification hub name and connection string as the portal because these Web.config project settings are overridden by the portal settings when running in Azure.\n\n\n4. Create a new class in the project called `ToDoBroadcastReceiver`.\n\n5. Add the following using statements to **ToDoBroadcastReceiver** class:\n\n\t\tusing Gcm.Client;\n\t\tusing Microsoft.WindowsAzure.MobileServices;\n\n6. Add the following permission requests between the **using** statements and the **namespace** declaration:\n\n\t\t[assembly: Permission(Name = \"@PACKAGE_NAME@.permission.C2D_MESSAGE\")]\n\t\t[assembly: UsesPermission(Name = \"@PACKAGE_NAME@.permission.C2D_MESSAGE\")]\n\t\t[assembly: UsesPermission(Name = \"com.google.android.c2dm.permission.RECEIVE\")]\n\n\t\t//GET_ACCOUNTS is only needed for android versions 4.0.3 and below\n\t\t[assembly: UsesPermission(Name = \"android.permission.GET_ACCOUNTS\")]\n\t\t[assembly: UsesPermission(Name = \"android.permission.INTERNET\")]\n\t\t[assembly: UsesPermission(Name = \"android.permission.WAKE_LOCK\")]\n\n7. Replace the existing **ToDoBroadcastReceiver** class definition with the following:\n\n\t    [BroadcastReceiver(Permission = Gcm.Client.Constants.PERMISSION_GCM_INTENTS)]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_MESSAGE },\n\t        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_REGISTRATION_CALLBACK },\n\t        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_LIBRARY_RETRY },\n        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n        public class ToDoBroadcastReceiver : GcmBroadcastReceiverBase<PushHandlerService>\n        {\n\t        // Set the Google app ID.\n\t        public static string[] senderIDs = new string[] { \"<PROJECT_NUMBER>\" };\n        }\n\n\tIn the above code, you must replace _`<PROJECT_NUMBER>`_ with the project number assigned by Google when you provisioned your app in the Google developer portal.\n\n8. In the ToDoBroadcastReceiver.cs project file, add the following code that defines the **PushHandlerService** class:\n\n\t\t// The ServiceAttribute must be applied to the class.\n    \t[Service]\n    \tpublic class PushHandlerService : GcmServiceBase\n    \t{\n        \tpublic static string RegistrationID { get; private set; }\n\n### Setting up the Android emulator for testing\nWhen you run this app in the emulator, make sure that you use an Android Virtual Device (AVD) that supports Google APIs.\n\n> [AZURE.IMPORTANT] In order to receive push notifications, you must set up a Google account on your Android Virtual Device (in the emulator, navigate to **Settings** and click **Add Account**). Also, make sure that the emulator is connected to the Internet.\n\n1. From **Tools**, click **Open Android Emulator Manager**, select your device, and then click **Edit**.\n\n   \t![Android Virtual Device Manager](./media/mobile-services-android-push-notifications-test/notification-hub-create-android-app7.png)\n\n2. Select **Google APIs** in **Target**, then click **OK**.\n\n   \t![Edit the Android Virtual Device](./media/mobile-services-android-push-notifications-test/notification-hub-create-android-app8.png)\n\n3. On the top toolbar, click **Run**, and then select your app. This starts the emulator and runs the app.\n\n  The app retrieves the *registrationId* from GCM and registers with the Notification Hub.\n\n### Inserting a new item generates a notification.\n\n1. In the app, type meaningful text, such as _A new Mobile Services task_ and then click the **Add** button.\n\n2. Swipe down from the top of the screen to open the device's Notification Center to see the notification.\n\n\t![View notification in the Notification Center](./media/mobile-services-android-push-notifications-test/notification-area-received.png)\n\nYou have successfully completed this tutorial.\n\n## Next steps\n\nThis tutorial demonstrated the basics of enabling an Android app to use Mobile Services and Notification Hubs to send push notifications. Next, consider completing the next tutorial, [Send push notifications to authenticated users], which shows how to use tags to send push notifications from your mobile service to only an authenticated user.\n\n+ [Send broadcast notifications to subscribers]\n\t<br/>Learn how users can register and receive push notifications for categories they're interested in.\n\n+ [Send template-based notifications to subscribers]\n\t<br/>Learn how to use templates to send push notifications from a Mobile Service, without having to craft platform-specific payloads in your back-end.\n\nLearn more about Mobile Services and Notification Hubs in the following topics:\n\n* [What are Notification Hubs?]\n  <br/>Learn more about how Notification Hubs works to deliver notifications to your apps across all major client platforms.\n\n* [Debug Notification Hubs applications](http://go.microsoft.com/fwlink/p/?linkid=386630)\n  </br>Get guidance troubleshooting and debugging Notification Hubs solutions.\n\n* [How to use the Android client library for Mobile Services]\n  <br/>Learn more about how to use Mobile Services with Android.\n\n<!-- Anchors. -->\n\n[Create a new mobile service]: #create-service\n[Download the service locally]: #download-the-service-locally\n[Test the mobile service]: #test-the-service\n[Download the GetStartedWithData project]: #download-app\n[Update the app to use the mobile service for data access]: #update-app\n[Test the Android App against the service hosted locally]: #test-locally-hosted\n[Publish the mobile service to Azure]: #publish-mobile-service\n[Test the Android App against the service hosted in Azure]: #test-azure-hosted\n[Test the app against the published mobile service]: #test-app\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[Get started with push notifications (Eclipse)]: mobile-services-dotnet-backend-android-get-started-push-ec.md\n[Get started with Mobile Services]: mobile-services-dotnet-backend-android-get-started.md\n[Mobile Services SDK]: http://go.microsoft.com/fwlink/p/?LinkId=257545\n\n[How to use the Android client library for Mobile Services]: mobile-services-android-how-to-use-client-library.md\n\n[What are Notification Hubs?]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-push-notification-overview/\n[Send broadcast notifications to subscribers]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-aspnet-backend-android-xplat-segmented-gcm-push-notification/\n[Send template-based notifications to subscribers]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-aspnet-backend-android-xplat-segmented-gcm-push-notification/\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-android-get-started-users.md",
    "content": "<properties\n\tpageTitle=\"Get started with authentication (Android) | Microsoft Azure\"\n\tdescription=\"Learn how to use Mobile Services to authenticate users of your Windows Store app through a variety of identity providers, including Google, Facebook, Twitter, and Microsoft.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"android\"\n\tauthors=\"RickSaling\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-android\"\n\tms.devlang=\"java\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ricksal\"/>\n\n# Add authentication to your Mobile Services Android app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-users.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-users.md)\n- [(Android | Javascript)](mobile-services-android-get-started-users.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started-users.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-users.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-users.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-users.md)\n- [(HTML | Javascript)](mobile-services-html-get-started-users.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Summary\n\nThis topic shows you how to authenticate users in Azure Mobile Services from your app. In this tutorial, you add authentication to the quickstart project using an identity provider that is supported by Mobile Services. After being successfully authenticated and authorized by Mobile Services, the user ID value is displayed.\n\nThis tutorial walks you through the basic steps to enable authentication in your app.\n\n\n## Prerequisites\n\nThis tutorial is based on the code you download in the Mobile Services quickstart. Before you start this tutorial, you must first complete either [Get started with Mobile Services] or [Add Mobile Services to an existing app].\n\n> [AZURE.IMPORTANT] If you completed the quickstart tutorial prior to the release of Azure Mobile Services Android SDK 2.0, you must re-do it, because the SDK is not backwards compatible. To verify the version, check the **dependencies** section of your project's **build.gradle** file.\n\n\n<!-- URLs.\n[Get started with Mobile Services]: mobile-services-android-get-started.md\n[Add Mobile Services to an existing app]: mobile-services-android-get-started-data.md\n-->\n\n## <a name=\"register\"></a>Register your app for authentication and configure Mobile Services\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Dashboard**, and make a note of the **Mobile Service URL** value.\n\n2. Register your app with one or more of the following authentication providers:\n   * [Google](./\nmobile-services-how-to-register-google-authentication.md)\n   * [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n   * [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n   * [Microsoft](./\nmobile-services-how-to-register-microsoft-authentication.md)\n   * [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md).\n\n    Make a note of the client identity and client secret values generated by the provider. Do not distribute or share the client secret.\n\n3. Back in the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Identity** > your identity provider settings, then enter the client ID and secret value from your provider.\n\nYou've now configured both your app and your mobile service to work with your auth provider. You may optionally repeat all these steps for each additional identity provider you'd like to support.\n\n> [AZURE.IMPORTANT] Verify that you've set the correct redirect URI on your identity provider's developer site. As described in the linked instructions for each provider above, the redirect URI may be different for a .NET backend service vs. for a JavaScript backend service. An incorrectly configured redirect URI may result in the login screen not being displayed properly and the app malfunctioning in unexpected ways.\n\n\n### (Optional) Configure your .NET Mobile Service for Azure Active Directory\n\n>[AZURE.NOTE] These steps are optional because they only apply to the Azure Active Directory login provider.\n\n1. Install the [WindowsAzure.MobileServices.Backend.Security NuGet package](https://www.nuget.org/packages/WindowsAzure.MobileServices.Backend.Security).\n\n2. In Visual Studio expand App_Start and open WebApiConfig.cs. Add the following `using` statement at the top:\n\n        using Microsoft.WindowsAzure.Mobile.Service.Security.Providers;\n\n3. Also in WebApiConfig.cs, add the following code to the `Register` method, immediately after `options` is instantiated:\n\n        options.LoginProviders.Remove(typeof(AzureActiveDirectoryLoginProvider));\n        options.LoginProviders.Add(typeof(AzureActiveDirectoryExtendedLoginProvider));\n\n## <a name=\"permissions\"></a>Restrict permissions to authenticated users\n\n\n\nBy default, all requests to mobile service resources are restricted to clients that present the application key, which does not strictly secure access to resources. To secure your resources, you must restrict access to only authenticated clients.\n\n1. In Visual Studio, open your mobile service project, expand the Controllers folder, and open **TodoItemController.cs**. The **TodoItemController** class implements data access for the TodoItem table. Add the following `using` statement:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\n2. Apply the following _AuthorizeLevel_ attribute to the **TodoItemController** class.\n\n\t\t[AuthorizeLevel(AuthorizationLevel.User)]\n\n\tThis makes sure that all operations against the _TodoItem_ table require an authenticated user. You can also apply the *AuthorizeLevel* attribute at the method level.\n\n3. (Optional) If you wish to debug authentication locally, expand the `App_Start` folder, open **WebApiConfig.cs**, and add the following code to the **Register** method.  \n\n\t\tconfig.SetIsHosted(true);\n\n\tThis tells the local mobile service project to run as if it is being hosted in Azure, including honoring the *AuthorizeLevel* settings. Without this setting, all HTTP requests to localhost are permitted without authentication despite the *AuthorizeLevel* setting. When you enable self-hosted mode, you also need to set a value for the local application key.\n\n4. (Optional) In the web.config project file, set a string value for the `MS_ApplicationKey` app setting.\n\n\tThis is the password that you use (with no username) to test the API help pages when you run the service locally.  This string value is not used by the live site in Azure, and you do not need to use the actual application key; any valid string value will work.\n\n4. Republish your project.\n\n3. Open the project that you created when you completed the tutorial [Get started with Mobile Services].\n\n4. From the **Run** menu, then click **Run app** to start the app; verify that an unhandled exception with a status code of 401 (Unauthorized) is raised after the app starts.\n\n\t This happens because the app attempts to access Mobile Services as an unauthenticated user, but the _TodoItem_ table now requires authentication.\n\nNext, you will update the app to authenticate users before requesting resources from the mobile service.\n\n## <a name=\"add-authentication\"></a>Add authentication to the app\n\n\n1. In **Project Explorer** in Android Studio, open the ToDoActivity.java file and add the following import statements.\n\n\t\timport java.util.concurrent.ExecutionException;\n\t\timport java.util.concurrent.atomic.AtomicBoolean;\n\n\t\timport android.content.Context;\n\t\timport android.content.SharedPreferences;\n\t\timport android.content.SharedPreferences.Editor;\n\n\t\timport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider;\n\t\timport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;\n\n2. Add the following method to the **ToDoActivity** class:\n\n\t\tprivate void authenticate() {\n\t\t    // Login using the Google provider.\n\n\t\t\tListenableFuture<MobileServiceUser> mLogin = mClient.login(MobileServiceAuthenticationProvider.Google);\n\n\t    \tFutures.addCallback(mLogin, new FutureCallback<MobileServiceUser>() {\n\t    \t\t@Override\n\t    \t\tpublic void onFailure(Throwable exc) {\n\t    \t\t\tcreateAndShowDialog((Exception) exc, \"Error\");\n\t    \t\t}   \t\t\n\t    \t\t@Override\n\t    \t\tpublic void onSuccess(MobileServiceUser user) {\n\t    \t\t\tcreateAndShowDialog(String.format(\n\t                        \"You are now logged in - %1$2s\",\n\t                        user.getUserId()), \"Success\");\n\t    \t\t\tcreateTable();\n\t    \t\t}\n\t    \t});   \t\n\t\t}\n\n\n\tThis creates a new method to handle the authentication process. The user is authenticated by using a Google login. A dialog is displayed which displays the ID of the authenticated user. You cannot proceed without a positive authentication.\n\n    > [AZURE.NOTE] If you are using an identity provider other than Google, change the value passed to the **login** method above to one of the following: _MicrosoftAccount_, _Facebook_, _Twitter_, or _windowsazureactivedirectory_.\n\n3. In the **onCreate** method, add the following line of code after the code that instantiates the `MobileServiceClient` object.\n\n\t\tauthenticate();\n\n\tThis call starts the authentication process.\n\n4. Move the remaining code after `authenticate();` in the **onCreate** method to a new **createTable** method, which looks like this:\n\n\t\tprivate void createTable() {\n\n\t\t\t// Get the table instance to use.\n\t\t\tmToDoTable = mClient.getTable(ToDoItem.class);\n\n\t\t\tmTextNewToDo = (EditText) findViewById(R.id.textNewToDo);\n\n\t\t\t// Create an adapter to bind the items with the view.\n\t\t\tmAdapter = new ToDoItemAdapter(this, R.layout.row_list_to_do);\n\t\t\tListView listViewToDo = (ListView) findViewById(R.id.listViewToDo);\n\t\t\tlistViewToDo.setAdapter(mAdapter);\n\n\t\t\t// Load the items from Azure.\n\t\t\trefreshItemsFromTable();\n\t\t}\n\n9. From the **Run** menu, then click **Run app** to start the app and sign in with your chosen identity provider.\n\n   \tWhen you are successfully logged-in, the app should run without errors, and you should be able to query the backend service and make updates to data.\n\n\n## <a name=\"cache-tokens\"></a>Cache authentication tokens on the client\n\n\nThe previous example showed a standard sign-in, which requires the client to contact both the identity provider and the backend Azure service every time that the app starts. Not only is this method inefficient, you can run into usage-related issues should many customers try to start you app at the same time. A better approach is to cache the authorization token returned by the Azure service and try to use this first before using a provider-based sign-in.\n\n>[AZURE.NOTE]You can cache the token issued by the backend Azure service regardless of whether you are using client-managed or service-managed authentication. This tutorial uses service-managed authentication.\n\n\n1. Open the ToDoActivity.java file and add the following import statements:\n\n        import android.content.Context;\n        import android.content.SharedPreferences;\n        import android.content.SharedPreferences.Editor;\n\n2. Add the the following members to the `ToDoActivity` class.\n\n    \tpublic static final String SHAREDPREFFILE = \"temp\";\n\t    public static final String USERIDPREF = \"uid\";\n    \tpublic static final String TOKENPREF = \"tkn\";\n\n\n3. In the ToDoActivity.java file, add the the following definition for the `cacheUserToken` method.\n\n    \tprivate void cacheUserToken(MobileServiceUser user)\n\t    {\n    \t\tSharedPreferences prefs = getSharedPreferences(SHAREDPREFFILE, Context.MODE_PRIVATE);\n    \t    Editor editor = prefs.edit();\n\t        editor.putString(USERIDPREF, user.getUserId());\n    \t    editor.putString(TOKENPREF, user.getAuthenticationToken());\n\t        editor.commit();\n    \t}\n\n    This method stores the user id and token in a preference file that is marked private. This should protect access to the cache so that other apps on the device do not have access to the token because the preference is sandboxed for the app. However, if someone gains access to the device, it is possible that they may gain access to the token cache through other means.\n\n    >[AZURE.NOTE]You can further protect the token with encryption if token access to your data is considered highly sensitive and someone may gain access to the device. However, a completely secure solution is beyond the scope of this tutorial and dependent on your security requirements.\n\n\n4. In the ToDoActivity.java file, add the the following definition for the `loadUserTokenCache` method.\n\n    \tprivate boolean loadUserTokenCache(MobileServiceClient client)\n\t    {\n\t        SharedPreferences prefs = getSharedPreferences(SHAREDPREFFILE, Context.MODE_PRIVATE);\n    \t    String userId = prefs.getString(USERIDPREF, null);\n\t        if (userId == null)\n\t            return false;\n    \t    String token = prefs.getString(TOKENPREF, null);\n    \t    if (token == null)\n    \t        return false;\n\n    \t    MobileServiceUser user = new MobileServiceUser(userId);\n    \t    user.setAuthenticationToken(token);\n    \t    client.setCurrentUser(user);\n\n    \t    return true;\n\t    }\n\n\n\n5. In the *ToDoActivity.java* file, replace the `authenticate` method with the following method which uses a token cache. Change the login provider if you want to use an account other than Google.\n\n\t\tprivate void authenticate() {\n\t\t\t// We first try to load a token cache if one exists.\n\t\t    if (loadUserTokenCache(mClient))\n\t\t    {\n\t\t        createTable();\n\t\t    }\n\t\t    // If we failed to load a token cache, login and create a token cache\n\t\t    else\n\t\t    {\n\t\t\t    // Login using the Google provider.    \n\t\t\t\tListenableFuture<MobileServiceUser> mLogin = mClient.login(MobileServiceAuthenticationProvider.Google);\n\n\t\t    \tFutures.addCallback(mLogin, new FutureCallback<MobileServiceUser>() {\n\t\t    \t\t@Override\n\t\t    \t\tpublic void onFailure(Throwable exc) {\n\t\t    \t\t\tcreateAndShowDialog(\"You must log in. Login Required\", \"Error\");\n\t\t    \t\t}   \t\t\n\t\t    \t\t@Override\n\t\t    \t\tpublic void onSuccess(MobileServiceUser user) {\n\t\t    \t\t\tcreateAndShowDialog(String.format(\n\t\t                        \"You are now logged in - %1$2s\",\n\t\t                        user.getUserId()), \"Success\");\n\t\t    \t\t\tcacheUserToken(mClient.getCurrentUser());\n\t\t    \t\t\tcreateTable();\n\t\t    \t\t}\n\t\t    \t});\n\t\t    }\n\t\t}\n\n6. Build the app and test authentication using a valid account. Run it at least twice. During the first run, you should receive a prompt to login and create the token cache. After that, each run will attempt to load the token cache for authentication and you should not be required to login.\n\n\n\n\n\n## <a name=\"refresh-tokens\"></a>Refresh the token cache\n\nOur token cache should work in a simple case but, what happens when the token expires or is revoked? The token could expire when the app is not running. This would mean the token cache is invalid. The token could also expire while the app is actually running. The result is an HTTP status code 401 \"Unauthorized\".\n\nWe need to be able to detect an expired token, and refresh it. To do this we use a [ServiceFilter](http://dl.windowsazure.com/androiddocs/com/microsoft/windowsazure/mobileservices/ServiceFilter.html) from the [Android client library](http://dl.windowsazure.com/androiddocs/).\n\nIn this section you will define a ServiceFilter that will detect a HTTP status code 401 response and trigger a refresh of the token and the token cache. Additionally, this ServiceFilter will block other outbound requests during authentication so that those requests can use the refreshed token.\n\n1. Open the ToDoActivity.java file and add the following import statements:\n\n        import java.util.concurrent.atomic.AtomicBoolean;\n\t\timport java.util.concurrent.ExecutionException;\n\n\t\timport com.microsoft.windowsazure.mobileservices.MobileServiceException;\n\n2. Add the following members to the `ToDoActivity` class.\n\n    \tpublic boolean bAuthenticating = false;\n\t    public final Object mAuthenticationLock = new Object();\n\n    These will be used to help synchronize the authentication of the user. We only want to authenticate once. Any calls during an authentication should wait and use the new token from the authentication in progress.\n\n3. In the ToDoActivity.java file, add the following method to the ToDoActivity class that will be used to block outbound calls on other threads while authentication is in progress.\n\n\t    /**\n    \t * Detects if authentication is in progress and waits for it to complete.\n         * Returns true if authentication was detected as in progress. False otherwise.\n    \t */\n    \tpublic boolean detectAndWaitForAuthentication()\n    \t{\n    \t\tboolean detected = false;\n    \t\tsynchronized(mAuthenticationLock)\n    \t\t{\n    \t\t\tdo\n    \t\t\t{\n    \t\t\t\tif (bAuthenticating == true)\n    \t\t\t\t\tdetected = true;\n    \t\t\t\ttry\n    \t\t\t\t{\n    \t\t\t\t\tmAuthenticationLock.wait(1000);\n    \t\t\t\t}\n    \t\t\t\tcatch(InterruptedException e)\n    \t\t\t\t{}\n    \t\t\t}\n    \t\t\twhile(bAuthenticating == true);\n    \t\t}\n    \t\tif (bAuthenticating == true)\n    \t\t\treturn true;\n\n    \t\treturn detected;\n    \t}\n\n\n4. In the ToDoActivity.java file, add the following method to the ToDoActivity class. This method triggers the wait and then update the token on outbound requests when authentication is complete.\n\n\n    \t/**\n    \t * Waits for authentication to complete then adds or updates the token\n    \t * in the X-ZUMO-AUTH request header.\n    \t *\n    \t * @param request\n    \t *            The request that receives the updated token.\n    \t */\n    \tprivate void waitAndUpdateRequestToken(ServiceFilterRequest request)\n    \t{\n    \t\tMobileServiceUser user = null;\n    \t\tif (detectAndWaitForAuthentication())\n    \t\t{\n    \t\t\tuser = mClient.getCurrentUser();\n    \t\t\tif (user != null)\n    \t\t\t{\n    \t\t\t\trequest.removeHeader(\"X-ZUMO-AUTH\");\n    \t\t\t\trequest.addHeader(\"X-ZUMO-AUTH\", user.getAuthenticationToken());\n    \t\t\t}\n    \t\t}\n    \t}\n\n\n5. In the ToDoActivity.java file, update the `authenticate` method of the ToDoActivity class so that it accepts a boolean parameter to allow forcing the refresh of the token and token cache. We also need to notify any blocked threads when authentication is completed so they can pick up the new token.\n\n\t    /**\n    \t * Authenticates with the desired login provider. Also caches the token.\n    \t *\n    \t * If a local token cache is detected, the token cache is used instead of an actual\n\t     * login unless bRefresh is set to true forcing a refresh.\n    \t *\n\t     * @param bRefreshCache\n    \t *            Indicates whether to force a token refresh.\n\t     */\n    \tprivate void authenticate(boolean bRefreshCache) {\n\n\t\t    bAuthenticating = true;\n\n\t\t    if (bRefreshCache || !loadUserTokenCache(mClient))\n\t        {\n\t            // New login using the provider and update the token cache.\n\t            mClient.login(MobileServiceAuthenticationProvider.MicrosoftAccount,\n\t                    new UserAuthenticationCallback() {\n\t                        @Override\n\t                        public void onCompleted(MobileServiceUser user,\n\t                                Exception exception, ServiceFilterResponse response) {\n\n\t                    \t\tsynchronized(mAuthenticationLock)\n\t                    \t\t{\n\t\t                        \tif (exception == null) {\n\t\t                                cacheUserToken(mClient.getCurrentUser());\n                                        createTable();\n\t\t                            } else {\n\t\t                                createAndShowDialog(exception.getMessage(), \"Login Error\");\n\t\t                            }\n\t\t            \t\t\t\tbAuthenticating = false;\n\t\t            \t\t\t\tmAuthenticationLock.notifyAll();\n\t                    \t\t}\n\t                        }\n\t                    });\n\t        }\n\t\t    else\n\t\t    {\n\t\t    \t// Other threads may be blocked waiting to be notified when\n\t\t    \t// authentication is complete.\n\t\t    \tsynchronized(mAuthenticationLock)\n\t\t    \t{\n\t\t    \t\tbAuthenticating = false;\n\t\t    \t\tmAuthenticationLock.notifyAll();\n\t\t    \t}\n                createTable();\n\t\t    }\n\t    }   \n\n\n\n6. In the ToDoActivity.java file, add this code for a new `RefreshTokenCacheFilter` class inside the ToDoActivity class:\n\n\t\t/**\n\t\t* The RefreshTokenCacheFilter class filters responses for HTTP status code 401.\n\t\t * When 401 is encountered, the filter calls the authenticate method on the\n\t\t * UI thread. Out going requests and retries are blocked during authentication.\n\t\t * Once authentication is complete, the token cache is updated and\n\t\t * any blocked request will receive the X-ZUMO-AUTH header added or updated to\n\t\t * that request.   \n\t\t */\n\t\tprivate class RefreshTokenCacheFilter implements ServiceFilter {\n\n\t        AtomicBoolean mAtomicAuthenticatingFlag = new AtomicBoolean();                     \n\n\t        @Override\n\t        public ListenableFuture<ServiceFilterResponse> handleRequest(\n\t        \t\tfinal ServiceFilterRequest request,\n\t        \t\tfinal NextServiceFilterCallback nextServiceFilterCallback\n\t        \t\t)\n\t        {\n\t            // In this example, if authentication is already in progress we block the request\n\t            // until authentication is complete to avoid unnecessary authentications as\n\t            // a result of HTTP status code 401.\n\t            // If authentication was detected, add the token to the request.\n\t            waitAndUpdateRequestToken(request);\n\n\t            // Send the request down the filter chain\n\t            // retrying up to 5 times on 401 response codes.\n\t            ListenableFuture<ServiceFilterResponse> future = null;\n\t            ServiceFilterResponse response = null;\n\t            int responseCode = 401;\n\t            for (int i = 0; (i < 5 ) && (responseCode == 401); i++)\n\t            {\n\t                future = nextServiceFilterCallback.onNext(request);\n\t                try {\n\t                    response = future.get();\n\t                    responseCode = response.getStatus().getStatusCode();\n\t                } catch (InterruptedException e) {\n\t                   e.printStackTrace();\n\t                } catch (ExecutionException e) {\n\t                    if (e.getCause().getClass() == MobileServiceException.class)\n\t                    {\n\t                        MobileServiceException mEx = (MobileServiceException) e.getCause();\n\t                        responseCode = mEx.getResponse().getStatus().getStatusCode();\n\t                        if (responseCode == 401)\n\t                        {\n\t                            // Two simultaneous requests from independent threads could get HTTP status 401.\n\t                            // Protecting against that right here so multiple authentication requests are\n\t                            // not setup to run on the UI thread.\n\t                            // We only want to authenticate once. Requests should just wait and retry\n\t                            // with the new token.\n\t                            if (mAtomicAuthenticatingFlag.compareAndSet(false, true))                                                                                                      \n\t                            {\n\t                                // Authenticate on UI thread\n\t                                runOnUiThread(new Runnable() {\n\t                                    @Override\n\t                                    public void run() {\n\t                                        // Force a token refresh during authentication.\n\t                                        authenticate(true);\n\t                                    }\n\t                                });\n\t                            }\n\n\t\t\t\t                // Wait for authentication to complete then update the token in the request.\n\t\t\t\t                waitAndUpdateRequestToken(request);\n\t\t\t\t                mAtomicAuthenticatingFlag.set(false);                                                  \n\t                        }\n\t                    }\n\t                }\n\t            }\n\t            return future;\n\t        }\n\t\t}\n\n\n    This service filter will check each response for HTTP status code 401 \"Unauthorized\". If a 401 is encountered, a new login request to obtain a new token will be setup on the UI thread. Other calls will be blocked until the login is completed, or until 5 attempts have failed. If the new token is obtained, the request that triggered the 401 will be retried with the new token and any blocked calls will be retried with the new token.\n\n7. In the ToDoActivity.java file, add this code for a new `ProgressFilter` class inside the ToDoActivity class:\n\n\t\t/**\n\t\t* The ProgressFilter class renders a progress bar on the screen during the time the App is waiting for the response of a previous request.\n\t\t* the filter shows the progress bar on the beginning of the request, and hides it when the response arrived.\n\t\t*/\n\t\tprivate class ProgressFilter implements ServiceFilter {\n\t\t\t@Override\n\t\t\tpublic ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n\t\t\t\tfinal SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n\t\t\t\trunOnUiThread(new Runnable() {\n\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic void run() {\n\t\t\t\t\t\tif (mProgressBar != null) mProgressBar.setVisibility(ProgressBar.VISIBLE);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tListenableFuture<ServiceFilterResponse> future = nextServiceFilterCallback.onNext(request);\n\n\t\t\t\tFutures.addCallback(future, new FutureCallback<ServiceFilterResponse>() {\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic void onFailure(Throwable e) {\n\t\t\t\t\t\tresultFuture.setException(e);\n\t\t\t\t\t}\n\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic void onSuccess(ServiceFilterResponse response) {\n\t\t\t\t\t\trunOnUiThread(new Runnable() {\n\n\t\t\t\t\t\t\t@Override\n\t\t\t\t\t\t\tpublic void run() {\n\t\t\t\t\t\t\t\tif (mProgressBar != null) mProgressBar.setVisibility(ProgressBar.GONE);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tresultFuture.set(response);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn resultFuture;\n\t\t\t}\n\t\t}\n\n\tThis filter will show the progress bar on the beginning of the request and will hide it when the response arrived.\n\n8. In the ToDoActivity.java file, update the `onCreate` method as follows:\n\n\t\t@Override\n\t    public void onCreate(Bundle savedInstanceState) {\n\t\t    super.onCreate(savedInstanceState);\n\n\t\t    setContentView(R.layout.activity_to_do);\n\t\t    mProgressBar = (ProgressBar) findViewById(R.id.loadingProgressBar);\n\n\t\t    // Initialize the progress bar\n\t\t    mProgressBar.setVisibility(ProgressBar.GONE);\n\n\t\t    try {\n\t\t    \t// Create the Mobile Service Client instance, using the provided\n\t\t    \t// Mobile Service URL and key\n\t\t    \tmClient = new MobileServiceClient(\n\t\t    \t\t\t\"https://<YOUR MOBILE SERVICE>.azure-mobile.net/\",\n\t\t    \t\t\t\"<YOUR MOBILE SERVICE KEY>\", this)\n                           .withFilter(new ProgressFilter())\n                           .withFilter(new RefreshTokenCacheFilter());\n\n\t\t    \t// Authenticate passing false to load the current token cache if available.\n\t\t    \tauthenticate(false);\n\n\t\t    } catch (MalformedURLException e) {\n\t\t\t    createAndShowDialog(new Exception(\"Error creating the Mobile Service. \" +\n\t\t\t        \"Verify the URL\"), \"Error\");\n\t\t    }\n\t    }\n\n\n       In this code, `RefreshTokenCacheFilter` is used in addition to `ProgressFilter`. Also during `onCreate` we want to load the token cache. So `false` is passed in to the `authenticate` method.\n\n\n\n\n## <a name=\"next-steps\"></a>Next steps\n\nIn the next tutorial, [Service-side authorization of Mobile Services users][Authorize users with scripts], you will take the user ID value provided by Mobile Services based on an authenticated user and use it to filter the data returned by Mobile Services.\n\n\n<!-- Anchors. -->\n[Register your app for authentication and configure Mobile Services]: #register\n[Restrict table permissions to authenticated users]: #permissions\n[Add authentication to the app]: #add-authentication\n[Store authentication tokens on the client]: #cache-tokens\n[Refresh expired tokens]: #refresh-tokens\n[Next Steps]:#next-steps\n\n<!-- URLs. -->\n[Get started with Mobile Services]: mobile-services-dotnet-backend-android-get-started.md\n[Get started with authentication]: mobile-services-dotnet-backend-android-get-started-users.md\n[Get started with push notifications]: mobile-services-dotnet-backend-android-get-started-push.md\n[Authorize users with scripts]: mobile-services-dotnet-backend-service-side-authorization.md\n\n[Mobile Services .NET How-to Conceptual Reference]: https://azure.microsoft.com/develop/mobile/how-to-guides/work-with-net-client-library\n[Register your Windows Store app package for Microsoft authentication]: mobile-services-how-to-register-store-app-package-microsoft-authentication.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-android-get-started.md",
    "content": "\n<properties\n\tpageTitle=\"Get Started with Azure Mobile Services for Android apps\"\n\tdescription=\"Follow this tutorial to get started using Azure Mobile Services for Android development.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"android\"\n\tauthors=\"RickSaling\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-android\"\n\tms.devlang=\"java\"\n\tms.topic=\"get-started-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ricksal\"/>\n\n\n# <a name=\"getting-started\"> </a>Get started with Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis tutorial shows you how to add a cloud-based backend service to an Android app using Azure Mobile Services. In this tutorial, you will create both a new mobile service and a simple _To do list_ app that stores app data in the new mobile service. The mobile service that you will create uses the supported .NET languages using Visual Studio for server-side business logic and to manage the mobile service. To create a mobile service that lets you write your server-side business logic in JavaScript, see the [JavaScript backend version](mobile-services-android-get-started.md) of this topic.\n\nA screenshot from the completed app is below:\n\n![](./media/mobile-services-dotnet-backend-android-get-started/mobile-quickstart-completed-android.png)\n\nCompleting this tutorial requires the [Android Developer Tools][Android Studio], which includes the Android Studio integrated development environment, and the latest Android platform. Android 4.2 or a later version is required.\n\nThe downloaded quickstart project contains the Mobile Services SDK for Android.\n\n> [AZURE.IMPORTANT] To complete this tutorial, you need an Azure account. If you don't have an account, you can sign up for an Azure trial and get up to 10 free mobile services that you can keep using even after your trial ends. For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=AE564AB28).\n\n\n## <a name=\"create-new-service\"> </a>Create a new mobile service\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** page, select **Create a free 20 MB SQL Database**, select **.NET** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t> [AZURE.NOTE] As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n## Download the mobile service to your local computer\n\nNow that you have created the mobile service, download your personalized mobile service project that you can run on your local computer or virtual machine.\n\n1. Click the mobile service that you just created, then in the quickstart tab, click **Android** under **Choose platform** and expand **Create a new Android app**.\n\n\t![][1]\n\n2. If you haven't already done so, download and install [Visual Studio Professional 2013](https://go.microsoft.com/fwLink/p/?LinkID=391934), or a later version.\n\n3. In Step 2, click **Download** under **Download and publish your service to the cloud**.\n\n\tThis downloads the Visual Studio project that implements your mobile service. Save the compressed project file to your local computer, and make a note of where you saved it.\n\n## Test the mobile service\n\n\n\nThe mobile service project lets you run your new mobile service locally. This makes it easy to debug your service code before you even publish it to Azure.\n\n1. On your Windows PC, download your personalized server project, extract it, and then open it in Visual Studio.\n\n2. Press the **F5** key to rebuild the project and start the mobile service locally. A web page is displayed after the mobile service starts successfully.\n\n## Publish your mobile service\n\n\n1. In Visual Studio, right-click the project, click **Publish** > **Microsoft Azure Mobile Services**. Instead of using Visual Studio, [you may also use Git](./\nmobile-services-dotnet-backend-store-code-source-control.md).\n\n2. Sign in with Azure credentials and select your service from **Existing Mobile Services**. Visual Studio downloads your publish settings directly from Azure. Finally, click **Publish**.\n\n## Create a new Android app\n\nIn this section you will create a new Android app that is connected to your mobile service.\n\n1. In the [Azure classic portal], click **Mobile Services**, and then click the mobile service that you just created.\n\n2. In the quickstart tab, click **Android** under **Choose platform** and expand **Create a new Android app**.\n\n\t![][2]\n\n3. If you haven't already done so, download and install the [Android Developer Tools][Android SDK] on your local computer or virtual machine.\n\n4. Under **Download and run your app**, click **Download**.\n\n  \tThis downloads the project for the sample _To do list_ application that is connected to your mobile service. Save the compressed project file to your local computer, and make a note of where you save it.\n\n## Run your Android app\n\nThe final stage of this tutorial is to build and run your new app.\n\n### Load project into Android Studio and sync Gradle\n\n1. Browse to the location where you saved the compressed project files and expand the files on your computer into your Android Studio projects directory.\n\n2. Open Android Studio. If you are working with a project and it appears, close the project (File => Close Project).\n\n3. Select **Open an existing Android Studio project**, browse to the project location, and then click **OK.** This will load the project and start to sync it with Gradle.\n\n \t![](./media/mobile-services-android-get-started/android-studio-import-project.png)\n\n4. Wait for the Gradle sync activity to complete. If you see a \"failed to find target\" error, this is because the version used in Android Studio doesn't match that of the sample. The easiest way to fix this is to click the **Install missing platform(s) and sync project** link in the error message. You might get additional version error messages, and you simply repeat this process until no errors appear.\n    - There is another way to fix this if you want to run with the \"latest and greatest\" version of Android. You can update the **targetSdkVersion** in the *build.gradle* file in the *app* directory to match the version already installed on your machine, which you can discover by clicking the **SDK Manager** icon and seeing what version is listed. Next you press the **Sync Project with Gradle Files**. You may get an error message for the version of Build Tools, and you fix that the same way.\n\n### Running the app\n\nYou can run the app using the emulator, or using an actual device.\n\n1. To run from a device, connect it to your computer with a USB cable. You must [set up the device for development](https://developer.android.com/training/basics/firstapp/running-app.html). If you are developing on a Windows machine, you must also download and install a USB driver.\n\n2. To run using the Android emulator, you must define at least one Android Virtual Device (AVD). Click the AVD Manager icon to create and manage these devices.\n\n3. From the **Run** menu, click **Run** to start the project. and choose a device or emulator from the dialog box that appears.\n\n4. When the app appears, type meaningful text, such as _Complete the tutorial_, and then click **Add**.\n\n   \t![](./media/mobile-services-android-get-started/mobile-quickstart-startup-android.png)\n\n   \tThis sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the TodoItem table. Items stored in the table are returned by the mobile service, and the data is displayed in the list.\n\n\t> [AZURE.NOTE] You can review the code that accesses your mobile service to query and insert data, which is found in the ToDoActivity.java file.\n\n8. Back in the Azure classic portal, click the **Data** tab and then click the **TodoItems** table.\n\n   \t![](./media/mobile-services-android-get-started/mobile-data-tab1.png)\n\n   \tThis lets you browse the data inserted by the app into the table.\n\n   \t![](./media/mobile-services-android-get-started/mobile-data-browse.png)\n\n\n## <a name=\"next-steps\"> </a>Next Steps\nNow that you have completed the quickstart, learn how to perform additional important tasks in Mobile Services:\n\n* [Add push notifications to your app]\n  <br/>Learn how to send a very basic push notification to your app.\n\n* [Add authentication to your app]\n  <br/>Learn how to restrict access to your backend data to specific registered users of your app.\n\n* [Troubleshoot a Mobile Services .NET backend]\n  <br/> Learn how to diagnose and fix issues that can arise with a Mobile Services .NET backend.\n\n<!-- Anchors. -->\n[Getting started with Mobile Services]:#getting-started\n[Create a new mobile service]:#create-new-service\n[Define the mobile service instance]:#define-mobile-service-instance\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n[0]: ./media/mobile-services-dotnet-backend-android-get-started/mobile-quickstart-completed-android.png\n[1]: ./media/mobile-services-dotnet-backend-android-get-started/mobile-quickstart-steps-vs-AS.png\n[2]: ./media/mobile-services-dotnet-backend-android-get-started/mobile-quickstart-steps-android-AS.png\n\n\n[6]: ./media/mobile-services-dotnet-backend-android-get-started/mobile-portal-quickstart-android.png\n[7]: ./media/mobile-services-dotnet-backend-android-get-started/mobile-quickstart-steps-android.png\n[8]: ./media/mobile-services-dotnet-backend-android-get-started/mobile-eclipse-quickstart.png\n\n[10]: ./media/mobile-services-dotnet-backend-android-get-started/mobile-quickstart-startup-android.png\n[11]: ./media/mobile-services-dotnet-backend-android-get-started/mobile-data-tab.png\n[12]: ./media/mobile-services-dotnet-backend-android-get-started/mobile-data-browse.png\n\n[14]: ./media/mobile-services-dotnet-backend-android-get-started/mobile-services-import-android-workspace.png\n[15]: ./media/mobile-services-dotnet-backend-android-get-started/mobile-services-import-android-project.png\n\n<!-- URLs. -->\n[Get started (Eclipse)]: mobile-services-dotnet-backend-android-get-started-ec.md\n[Add push notifications to your app]: mobile-services-dotnet-backend-android-get-started-push.md\n[Add authentication to your app]: mobile-services-dotnet-backend-android-get-started-auth.md\n[Android SDK]: https://go.microsoft.com/fwLink/p/?LinkID=280125\n[Android Studio]: https://developer.android.com/sdk/index.html\n[Mobile Services Android SDK]: https://go.microsoft.com/fwLink/p/?LinkID=266533\n[Troubleshoot a Mobile Services .NET backend]: mobile-services-dotnet-backend-how-to-troubleshoot.md\n\n[Azure classic portal]: https://manage.windowsazure.com/\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-define-custom-api.md",
    "content": "<properties\n\tpageTitle=\"How to define a custom API in a .NET backend mobile service | Azure Mobile Services\"\n\tdescription=\"Learn how to define a custom API endpoint in a .NET backend mobile service.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-multiple\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n\n# How to: define a custom API endpoint in a .NET backend mobile service\n> [AZURE.SELECTOR]\n- [JavaScript backend](./mobile-services-javascript-backend-define-custom-api.md)\n- [.NET backend](./mobile-services-dotnet-backend-define-custom-api.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows you how to define a custom API endpoint in a .NET backend mobile service. A custom API lets you define custom endpoints with server functionality, but it does not map to a database insert, update, delete, or read operation. By using a custom API, you have more control over messaging, including HTTP headers and body format.\n\n\n\n1. In Visual Studio, right-click the Controllers folder, expand **Add**, then click **New Scaffolded Item**. This displays the Add Scaffold dialog.\n\n2. Expand **Azure Mobile Services**, click **Azure Mobile Services Custom Controller**,  click **Add**, supply a **Controller name** of `CompleteAllController`, and click **Add** again.\n\n\t![Web API Add Scaffold dialog](./media/mobile-services-dotnet-backend-create-custom-api/add-custom-api-controller.png)\n\n\tThis creates a new empty controller class named **CompleteAllController**.\n\n\t>[AZURE.NOTE]If your dialog doesn't have Mobile Services-specific scaffolds, instead create a new **Web API Controller - Empty**. In this new controller class, add a public **Services** property, which returns the **ApiServices** type. This property is used to access server-specific settings from inside your controller.\n\n3. In **CompleteAllController.cs**, add the following **using** statements. \tReplace `todolistService` with the namespace of your mobile service project, which should be the mobile service name appended with `Service`.\n\n\t\tusing System.Threading.Tasks;\n\t\tusing todolistService.Models;\n\n4. In **CompleteAllController.cs**, add the following class to wrap the response sent to the client.\n\n        // We use this class to keep parity with other Mobile Services\n        // that use the JavaScript backend. This way the same client\n        // code can call either type of Mobile Service backend.\n        public class MarkAllResult\n        {\n            public int count;\n        }\n\n5. Add the following code to the new controller. Replace `todolistContext` with the name of the DbContext for your data model, which should be the mobile service name appended with `Context`. Similarly, replace the schema name in the UPDATE statement with the name of your mobile service. This code uses the [Database Class](http://msdn.microsoft.com/library/system.data.entity.database.aspx) to access the **TodoItems** table directly to set the completed flag on all items. This method supports a POST request, and the number of changed rows is returned to the client as an integer value.\n\n\n\t    // POST api/completeall\n        public async Task<MarkAllResult> Post()\n        {\n            using (todolistContext context = new todolistContext())\n            {\n                // Get the database from the context.\n                var database = context.Database;\n\n                // Create a SQL statement that sets all uncompleted items\n                // to complete and execute the statement asynchronously.\n                var sql = @\"UPDATE todolist.TodoItems SET Complete = 1 \" +\n                            @\"WHERE Complete = 0; SELECT @@ROWCOUNT as count\";\n\n                var result = new MarkAllResult();\n                result.count = await database.ExecuteSqlCommandAsync(sql);\n\n                // Log the result.\n                Services.Log.Info(string.Format(\"{0} items set to 'complete'.\",\n                    result.count.ToString()));\n\n                return result;\n            }\n        }\n\n\t> [AZURE.TIP] With default permissions, anyone with the app key may call the custom API. However, the application key is not considered a secure credential because it may not be distributed or stored securely. Consider restricting access to only authenticated users for additional security.\n\nFor information on how to invoke a custom API in your app using a Mobile Services client library, see [Call a custom API](mobile-services-windows-dotnet-how-to-use-client-library.md#custom-api) in the client SDK reference.\n\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n<!-- URLs. -->\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-get-started-custom-authentication.md",
    "content": "<properties\n\tpageTitle=\"Get started with custom authentication | Microsoft Azure\"\n\tdescription=\"Learn how to authenticate users with a username and password.\"\n\tdocumentationCenter=\"Mobile\"\n\tauthors=\"mattchenderson\"\n\tmanager=\"dwrede\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-multiple\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"mahender\"/>\n\n# Get started with custom authentication\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n\n## Overview\nThis topic shows you how to authenticate users in the Azure Mobile Services .NET backend by issuing your own Mobile Services authentication token. In this tutorial, you add authentication to the quickstart project using a custom username and password for your app.\n\n>[AZURE.NOTE] This tutorial demonstrates an advanced method of authenticating your Mobile Services with custom credentials. Many apps will be best suited to instead use the built-in social identity providers, allowing users to log in via Facebook, Twitter, Google, Microsoft Account, and Azure Active Directory. If this is your first experience with authentication in Mobile Services, please see the [Add authentication to your app] tutorial.\n\nThis tutorial is based on the Mobile Services quickstart. You must also first complete the tutorial [Get started with Mobile Services].\n\n>[AZURE.IMPORTANT] The purpose of this tutorial is to show you how to issue an authentication token for Mobile Services. This is not to be taken as security guidance. In developing your app, you need to be aware of the security implications of password storage, and you need to have a strategy for managing brute-force attacks.\n\n## Set up the accounts table\n\nBecause you are using custom authentication and not relying on another identity provider, you will need to store your users' sign-in information. In this section, you will create a table for your accounts and set up the basic security mechanisms. The accounts table will contain the usernames and the salted and hashed passwords, and you can also include additional user information if needed.\n\n1. In the **DataObjects** folder of your backend project, add a new entity called `Account`.\n\n2. Add the following `using` statement:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service;\n\n3. Replace the class definition with the following code:\n\n\t    public class Account : EntityData\n\t    {\n\t        public string Username { get; set; }\n\t        public byte[] Salt { get; set; }\n\t        public byte[] SaltedAndHashedPassword { get; set; }\n\t    }\n\n    This represents a row in a new Account table, which contains the username, that user's salt, and the securly stored password.\n\n2. Under the **Models** folder, you will find a **DbContext** derived class named after your mobile service. Open your context and add the accounts table to your data model by including the following:\n\n        public DbSet<Account> Accounts { get; set; }\n\n\t>[AZURE.NOTE]The code snippets in this tutorial use `todoContext` as the context name. You must update the code snippets for your project's context.\n        &nbsp;\n\tNext, you will set up the security functions for working with this data.\n\n5. Create a class called `CustomLoginProviderUtils` and add the following `using` statement:\n\n\t\tusing System.Security.Cryptography;\n\n6. Add the following code methods to the new class:\n\n\n        public static byte[] hash(string plaintext, byte[] salt)\n        {\n            SHA512Cng hashFunc = new SHA512Cng();\n            byte[] plainBytes = System.Text.Encoding.ASCII.GetBytes(plaintext);\n            byte[] toHash = new byte[plainBytes.Length + salt.Length];\n            plainBytes.CopyTo(toHash,0);\n            salt.CopyTo(toHash, plainBytes.Length);\n            return hashFunc.ComputeHash(toHash);\n        }\n\n        public static byte[] generateSalt()\n        {\n            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();\n            byte[] salt = new byte[256];\n            rng.GetBytes(salt);\n            return salt;\n        }\n\n        public static bool slowEquals(byte[] a, byte[] b)\n        {\n            int diff = a.Length ^ b.Length;\n            for (int i = 0; i < a.Length && i < b.Length; i++)\n            {\n                diff |= a[i] ^ b[i];\n            }\n            return diff == 0;\n        }\n\n\tThis lets you generate a new long salt, adds the ability to hash a salted password, and provides a secure way of comparing two hashes.\n\n## Create the registration endpoint\n\nAt this point, you have everything you need to begin creating user accounts. In this section, you will set up a registration endpoint to handle new registration requests. This is where you will enforce new username and password policies and ensure that the username is not taken. Then you will safely store the user information in your database.\n\n1. Create the following new class to represent an incoming registration attempt:\n\n        public class RegistrationRequest\n        {\n            public String username { get; set; }\n            public String password { get; set; }\n        }\n\n    If you need to collect and store other information during registration, you should do it here.\n\n2. In your mobile service backend project, right-click **Controllers**, click **Add** and **Controller**, create a new **Microsoft Azure Mobile Services Custom Controller** named `CustomRegistrationController`, then add the following `using` statements:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\t\tusing System.Text.RegularExpressions;\n\t\tusing <my_project_namespace>.DataObjects;\n\t\tusing <my_project_namespace>.Models;\n\n\tIn the above code, replace the placeholder with your project's namespace.\n\n4. Replace the class definition with the following code:\n\n\t    [AuthorizeLevel(AuthorizationLevel.Anonymous)]\n\t    public class CustomRegistrationController : ApiController\n\t    {\n\t        public ApiServices Services { get; set; }\n\n\t        // POST api/CustomRegistration\n\t        public HttpResponseMessage Post(RegistrationRequest registrationRequest)\n\t        {\n\t            if (!Regex.IsMatch(registrationRequest.username, \"^[a-zA-Z0-9]{4,}$\"))\n\t            {\n\t                return this.Request.CreateResponse(HttpStatusCode.BadRequest, \"Invalid username (at least 4 chars, alphanumeric only)\");\n\t            }\n\t            else if (registrationRequest.password.Length < 8)\n\t            {\n\t                return this.Request.CreateResponse(HttpStatusCode.BadRequest, \"Invalid password (at least 8 chars required)\");\n\t            }\n\n\t            todoContext context = new todoContext();\n\t            Account account = context.Accounts.Where(a => a.Username == registrationRequest.username).SingleOrDefault();\n\t            if (account != null)\n\t            {\n\t                return this.Request.CreateResponse(HttpStatusCode.BadRequest, \"That username already exists.\");\n\t            }\n\t            else\n\t            {\n\t                byte[] salt = CustomLoginProviderUtils.generateSalt();\n\t                Account newAccount = new Account\n\t                {\n\t                    Id = Guid.NewGuid().ToString(),\n\t                    Username = registrationRequest.username,\n\t                    Salt = salt,\n\t                    SaltedAndHashedPassword = CustomLoginProviderUtils.hash(registrationRequest.password, salt)\n\t                };\n\t                context.Accounts.Add(newAccount);\n\t                context.SaveChanges();\n\t                return this.Request.CreateResponse(HttpStatusCode.Created);\n\t            }\n\t        }\n\t    }\n\n    Remember to replace the *todoContext* variable with the name of your project's **DbContext**. Note that this controller uses the following attribute to allow all traffic to this endpoint:\n\n        [AuthorizeLevel(AuthorizationLevel.Anonymous)]\n\n>[AZURE.IMPORTANT]This registration endpoint can be accessed by any client via HTTP. Before you publish this service to a production environment, you should implement some sort of scheme to validate registrations, such as a SMS or email-based verification. This can help prevent a malicious user from creating fraudulent registrations.\n\n## Create the LoginProvider\n\nOne of the fundamental constructs in the Mobile Services authentication pipeline is the **LoginProvider**. In this section, you will create your own `CustomLoginProvider`. It will not be plugged into the pipeline like the built-in providers, but it will provide you with some convenient functionality.\nIf you use the visual studio 2013, you maybe need to install the `WindowsAzure.MobileServices.Backend.Security` nuget package to add the references to `LoginProvider` class.\n\n1. Create a new class, `CustomLoginProvider`, which derives from **LoginProvider**, and add the following `using` statements:\n\n\t    using Microsoft.WindowsAzure.Mobile.Service;\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\t\tusing Newtonsoft.Json.Linq;\n\t\tusing Owin;\n\t\tusing System.Security.Claims;\n\n3. replace the **CustomLoginProvider** class definition with the following code:\n\n        public class CustomLoginProvider : LoginProvider\n        {\n            public const string ProviderName = \"custom\";\n\n            public override string Name\n            {\n                get { return ProviderName; }\n            }\n\n            public CustomLoginProvider(IServiceTokenHandler tokenHandler)\n                : base(tokenHandler)\n            {\n                this.TokenLifetime = new TimeSpan(30, 0, 0, 0);\n            }\n\n        }\n\n       If you try to build the project now it will fail. `LoginProvider` has three abstract methods that you need to implement, which you will do later.\n\n2. Create a new class named `CustomLoginProviderCredentials` in the same code file.\n\n        public class CustomLoginProviderCredentials : ProviderCredentials\n        {\n            public CustomLoginProviderCredentials()\n                : base(CustomLoginProvider.ProviderName)\n            {\n            }\n        }\n\n\tThis represents information about your user and will be made available to you on the backend via [GetIdentitiesAsync](https://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobile.service.security.serviceuser.getidentitiesasync.aspx). If you are adding custom claims, make sure that they are captured in this object.\n\n3. Add the following implementation of the abstract method `ConfigureMiddleware` to **CustomLoginProvider**.\n\n        public override void ConfigureMiddleware(IAppBuilder appBuilder, ServiceSettingsDictionary settings)\n        {\n            // Not Applicable - used for federated identity flows\n            return;\n        }\n\n\tThis method is not implemented because **CustomLoginProvider** is not integrating with the authentication pipeline.\n\n4. Add the following implementation of the abstract method `ParseCredentials` to **CustomLoginProvider**.\n\n        public override ProviderCredentials ParseCredentials(JObject serialized)\n        {\n            if (serialized == null)\n            {\n                throw new ArgumentNullException(\"serialized\");\n            }\n\n            return serialized.ToObject<CustomLoginProviderCredentials>();\n        }\n\n\tThis method will allow the backend to deserialize user information from an incoming authentication token.\n\n5. Add the following implementation of the abstract method `CreateCredentials` to **CustomLoginProvider**.\n\n        public override ProviderCredentials CreateCredentials(ClaimsIdentity claimsIdentity)\n        {\n            if (claimsIdentity == null)\n            {\n                throw new ArgumentNullException(\"claimsIdentity\");\n            }\n\n            string username = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier).Value;\n            CustomLoginProviderCredentials credentials = new CustomLoginProviderCredentials\n            {\n                UserId = this.TokenHandler.CreateUserId(this.Name, username)\n            };\n\n            return credentials;\n        }\n\n\tThis method translates a [ClaimsIdentity] into a [ProviderCredentials] object that is used in the authentication token issuance phase. You will again want to capture any additional claims in this method.\n\n6. Open the WebApiConfig.cs project file in the App_Start folder and the following line of code after the **ConfigOptions** is created:\n\n\t\toptions.LoginProviders.Add(typeof(CustomLoginProvider));\n\n\n\n## Create the sign-in endpoint\n\nNext, you create an endpoint for your users to sign-in. The username and password that you receive is checked against the database by first applying the user's salt, hashing the password, and making sure that the incoming value matches that of the database. If it does, then you can create a [ClaimsIdentity] and pass it to the **CustomLoginProvider**. The client app receives a user ID and an authentication token for further access to your mobile service.\n\n1. In your mobile service backend project, create the following new `LoginRequest` class:\n\n        public class LoginRequest\n        {\n            public String username { get; set; }\n            public String password { get; set; }\n        }\n\n\tThis class represents an incoming sign-in attempt.\n\n2. Create the following new `CustomLoginResult` class:\n\n\t    public class CustomLoginResult\n\t    {\n\t        public string UserId { get; set; }\n\t        public string MobileServiceAuthenticationToken { get; set; }\n\n\t    }\n\n\tThis class represents a successful login with the user ID and the authentication token. Note that this class has the same shape as the MobileServiceUser class on the client, which makes it easier to hand the login response on a strongly-typed client.\n\n2. Right-click **Controllers**, click **Add** and **Controller**, create a new **Microsoft Azure Mobile Services Custom Controller** named `CustomLoginController`, then add the following `using` statements:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\t\tusing System.Security.Claims;\n\t\tusing <my_project_namespace>.DataObjects;\n\t\tusing <my_project_namespace>.Models;\n\n3. Replace the **CustomLoginController** class definition with following code:\n\n\t    [AuthorizeLevel(AuthorizationLevel.Anonymous)]\n\t    public class CustomLoginController : ApiController\n\t    {\n\t        public ApiServices Services { get; set; }\n\t        public IServiceTokenHandler handler { get; set; }\n\n\t        // POST api/CustomLogin\n\t        public HttpResponseMessage Post(LoginRequest loginRequest)\n\t        {\n\t            todoContext context = new todoContext();\n\t            Account account = context.Accounts\n\t                .Where(a => a.Username == loginRequest.username).SingleOrDefault();\n\t            if (account != null)\n\t            {\n\t                byte[] incoming = CustomLoginProviderUtils\n\t                    .hash(loginRequest.password, account.Salt);\n\n\t                if (CustomLoginProviderUtils.slowEquals(incoming, account.SaltedAndHashedPassword))\n\t                {\n\t                    ClaimsIdentity claimsIdentity = new ClaimsIdentity();\n\t                    claimsIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, loginRequest.username));\n\t                    LoginResult loginResult = new CustomLoginProvider(handler)\n\t                        .CreateLoginResult(claimsIdentity, Services.Settings.MasterKey);\n\t                    var customLoginResult = new CustomLoginResult()\n\t                    {\n\t                        UserId = loginResult.User.UserId,\n\t                        MobileServiceAuthenticationToken = loginResult.AuthenticationToken\n\t                    };\n\t                    return this.Request.CreateResponse(HttpStatusCode.OK, customLoginResult);\n\t                }\n\t            }\n\t            return this.Request.CreateResponse(HttpStatusCode.Unauthorized,\n\t                \"Invalid username or password\");\n\t        }\n\t    }\n\n       Remember to replace the *todoContext* variable with the name of your project's **DbContext**. Note that this controller uses the following attribute to allow all traffic to this endpoint:\n\n        [AuthorizeLevel(AuthorizationLevel.Anonymous)]\n\n>[AZURE.IMPORTANT] Your `CustomLoginController` for production use should also contain a brute-force detection strategy. Otherwise your sign-in solution may be vulnerable to attack.\n\n## Configure the mobile service to require authentication\n\n\n\nBy default, all requests to mobile service resources are restricted to clients that present the application key, which does not strictly secure access to resources. To secure your resources, you must restrict access to only authenticated clients.\n\n1. In Visual Studio, open your mobile service project, expand the Controllers folder, and open **TodoItemController.cs**. The **TodoItemController** class implements data access for the TodoItem table. Add the following `using` statement:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\n2. Apply the following _AuthorizeLevel_ attribute to the **TodoItemController** class.\n\n\t\t[AuthorizeLevel(AuthorizationLevel.User)]\n\n\tThis makes sure that all operations against the _TodoItem_ table require an authenticated user. You can also apply the *AuthorizeLevel* attribute at the method level.\n\n3. (Optional) If you wish to debug authentication locally, expand the `App_Start` folder, open **WebApiConfig.cs**, and add the following code to the **Register** method.  \n\n\t\tconfig.SetIsHosted(true);\n\n\tThis tells the local mobile service project to run as if it is being hosted in Azure, including honoring the *AuthorizeLevel* settings. Without this setting, all HTTP requests to localhost are permitted without authentication despite the *AuthorizeLevel* setting. When you enable self-hosted mode, you also need to set a value for the local application key.\n\n4. (Optional) In the web.config project file, set a string value for the `MS_ApplicationKey` app setting.\n\n\tThis is the password that you use (with no username) to test the API help pages when you run the service locally.  This string value is not used by the live site in Azure, and you do not need to use the actual application key; any valid string value will work.\n\n4. Republish your project.\n\n\n## Test the sign-in flow using the test client\n\nIn your client app, you must develop a custom sign-in screen which takes usernames and passwords and sends them as a JSON payload to your registration and sign-in endpoints. To complete this tutorial, you will instead just use the built-in test client for the Mobile Services .NET backend.\n\n1. In Visual Studio, right-click the mobile service project, then click **Debug** and **Start New Instance**.\n\n\tThis starts a new debugging instance of your mobile service backend project. After the service starts successfully, you will see a start page that says **This mobile service is up and running**.\n\n2. On the service start page, click **Try it out**, then type the password that you set for the **MS_ApplicationKey** app setting in the web.config file with a blank username into the authentication dialog.\n\n3. In the help page, click the **CustomRegistration** endpoint, then click **Try this out**.\n\n    ![][2]\n\n4. In the body, replace the sample strings with a username and password, which meet the criteria you specified before, then click **Send**.\n\n    ![][3]\n\n\tThe response should be **201/Created**.\n\n5. Click the browser's back button and repeat steps 2 and 3 for the **CustomLogin** endpoint, using the same username and password that you registered in the previous step.\n\n    ![][4]\n\n\tYou should receive response message with a body that contains a **user** JSON object that has both the *userId* and an *authenticationToken*, which is the Mobile Services authentication token generated by your custom authentication. This token is sufficient to grant the client app access to the TodoItem endpoint.\n\n\tMake a copy of the *authenticationToken* value. You will use this to access the restricted TodoItem endpoint.\n\n6. Click the browser's back button, then in the API documentation page, click **GetTables**, click **Try this out**.\n\n7. In the GET request dialog, click the plus sign next to **Headers**, type the value `X-ZUMO-AUTH` in the left box, paste the copied *authenticationToken* value in the right box, then click **Send**.\n\n \t![](./media/mobile-services-dotnet-backend-get-started-custom-authentication/mobile-services-dotnet-backend-custom-auth-access-endpoint.png)\n\n\tThe mobile service should grant access to the endpoint and return a **200/OK** status along with a list of TodoItems in the table.\n\n \t![](./media/mobile-services-dotnet-backend-get-started-custom-authentication/mobile-services-dotnet-backend-custom-auth-access-success.png)\n\n>[AZURE.IMPORTANT] If you choose to also publish this mobile service project to Azure for testing, remember that your sign-in and authentication providers will be vulnerable to attack. Make sure that they are either hardened appropriately or that the test data being protected is not important to you. Take great caution before using a custom authentication scheme to secure a production service.\n\n## Sign in using custom authentication from the client\n\nThis section describes the steps needed to access the custom authentication endpoints from the client to obtain the authentication token needed to access the mobile service. Because the specific client code you need depends on your client, the guidance provided here is platform agnostic.\n\n>[AZURE.NOTE] The Mobile Services client libraries communicate with the service over HTTPS. Because this solution requires you to send passwords as plaintext, you must make sure that you use HTTPS when you call these endpoint using direct REST requests.\n\n1. Create the required UI elements in your client app to allow users to enter a username and password.\n\n2. Use the appropriate **invokeApi** method on the **MobileServiceClient** in the client library to call the **CustomRegistration** endpoint, passing the runtime-supplied username and password in the message body.\n\n\tYou only need to call the **CustomRegistration** endpoint once to create an account for a given user, as long as you keep the user login information in the Accounts table. For examples of how to call a custom API on the various supported client platforms, see the article [Custom API in Azure Mobile Services ??? client SDKs](http://blogs.msdn.com/b/carlosfigueira/archive/2013/06/19/custom-api-in-azure-mobile-services-client-sdks.aspx).\n\n\t> [AZURE.IMPORTANT] Because this user provisioning step occurs only once, you should consider creating the user account in some out-of-band fashion. For a public registration endpoint, you should also consider implementing an SMS-based or email-based verification process, or some other safeguard to prevent the generation of fruadulent accounts. You can use Twilio to send SMS messages from Mobile services. You can also use SendGrid to send emails from Mobile Services. For more inforation on using SendGrid, see [Send email from Mobile Services with SendGrid](store-sendgrid-mobile-services-send-email-scripts.md).\n\n3. Use the appropriate **invokeApi** method again, this time to call the **CustomLogin** endpoint, passing the runtime-supplied username and password in the message body.\n\n\tThis time, you must capture the *userId* and *authenticationToken* values returned in the response object after a successful login.\n\n4. Use the returned *userId* and *authenticationToken* values to create a new **MobileServiceUser** object and set it as the current user for your **MobileServiceClient** instance, as shown in the topic [Add authentication to existing app](mobile-services-dotnet-backend-ios-get-started-users.md). Because the CustomLogin result is the same shape as the **MobileServiceUser** object, you should be able to make a direct cast of the result.\n\nThis completes this tutorial.\n\n\n<!-- Anchors. -->\n\n\n<!-- Images. -->\n[0]: ./media/mobile-services-dotnet-backend-get-started-custom-authentication/mobile-services-dotnet-backend-debug-start.png\n[1]: ./media/mobile-services-dotnet-backend-get-started-custom-authentication/mobile-services-dotnet-backend-try-out.png\n[2]: ./media/mobile-services-dotnet-backend-get-started-custom-authentication/mobile-services-dotnet-backend-custom-auth-test-client.png\n[3]: ./media/mobile-services-dotnet-backend-get-started-custom-authentication/mobile-services-dotnet-backend-custom-auth-send-register.png\n[4]: ./media/mobile-services-dotnet-backend-get-started-custom-authentication/mobile-services-dotnet-backend-custom-auth-login-result.png\n\n\n<!-- URLs. -->\n[Add authentication to your app]: mobile-services-dotnet-backend-windows-store-dotnet-get-started-users.md\n[Get started with Mobile Services]: mobile-services-dotnet-backend-windows-store-dotnet-get-started.md\n\n[ClaimsIdentity]: https://msdn.microsoft.com/library/system.security.claims.claimsidentity(v=vs.110).aspx\n[ProviderCredentials]: https://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobile.service.security.providercredentials.aspx\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-how-to-configure-iis-express.md",
    "content": "<properties\n\tpageTitle=\"Configure IIS Express for local mobile service testing | Azure Mobile Services\"\n\tdescription=\"Learn how to configure IIS Express to allow connections to a local mobile service project for testing.\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Configure the local web server to allow connections to a local mobile service\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\nAzure Mobile Services enables you create your mobile service in Visual Studio using one of the supported .NET languages and then publish it to Azure. One of the major benefits of using a .NET backend for your mobile service is the ability to run, test, and debug the mobile service on your local computer or virtual machine before publishing it to Azure.\n\nTo be able to test a mobile service locally with clients running on an emulator, virtual machine or on a separate workstation, you have to configure the local Web server and host computer to allow connections to the workstation's IP address and port. This topic shows you how to configure IIS Express to enable connections to your locally hosted mobile service.\n\n\n1. Make sure to stop the mobile service if it is currently running in IIS Express. Right click the IIS Express tray icon and click **stop** for the mobile service.\n\n    ![](./media/mobile-services-how-to-configure-iis-express/iis-express-tray-stop-site.png)\n\n\n2. In a command prompt window, run the **ipconfig** command to look up a valid local IP address for your workstation.\n\n    ![](./media/mobile-services-how-to-configure-iis-express/ipconfig.png)\n\n\n3. In Visual Studio, open the applicationhost.config file for IIS Express. This file is located in the following subdirectory of your user profile directory.\n\n        C:\\Users\\<your profile name>\\Documents\\IISExpress\\config\\applicationhost.config\n\n4. Configure IIS Express to allow remote connection requests to the service. To do this, in the applicationhost.config file, find the site element for your mobile service and add a new `binding` element for the port using the IP address you noted above. Then save the applicationhost.config file. \n\n    Your updated site element should look similar to the following:\n\n        <site name=\"todolist_Service(1)\" id=\"2\">\n            <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                <virtualDirectory path=\"/\" physicalPath=\"C:\\Archive\\GetStartedDataWP8\\C#\\todolist_Service\" />\n            </application>\n            <bindings>\n                <binding protocol=\"http\" bindingInformation=\"*:58203:localhost\" />\n                <binding protocol=\"http\" bindingInformation=\"*:58203:192.168.137.72\" />\n            </bindings>\n        </site>\n\n5. Open the Windows Firewall console and create a new port rule to allow connections to the port. For more information on creating a new Windows Firewall port rule, see [How to add a new Windows Firewall port rule].\n\n    >[AZURE.NOTE] If your test machine is joined to a domain, firewall exceptions may be controlled by a domain policy. In this case, you would need to contact your domain adminstrator to get an exemption for the port on your machine.\n\n    You should now be configured to test with IIS Express hosting your mobile service. \n\n    >[AZURE.NOTE] Once you finish your testing of the service locally, you should delete the Windows Firewall rule you created. \n\n\n<!-- URLs. -->\n[How to add a new Windows Firewall port rule]:  http://go.microsoft.com/fwlink/?LinkId=392240\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-how-to-troubleshoot.md",
    "content": "<properties\n\tpageTitle=\"Troubleshoot the Mobile Services .NET Backend | Microsoft Azure\"\n\tdescription=\"Learn how to diagnose and fix issues with your mobile services using the .NET backend\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"wesmc7777\"\n\tmanager=\"erikre\"\n\teditor=\"mollybos\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"multiple\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\" \n\tms.author=\"wesmc;ricksal\"/>\n\n# Troubleshoot the Mobile Services .NET Backend\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\nDeveloping with Mobile Services is usually easy and painless, but even then things can sometimes go wrong. This tutorial covers some techniques that let you troubleshoot common problems that can arise with the Mobile Services .NET backend.\n\n1. [HTTP Debugging](#HttpDebugging)\n2. [Runtime Debugging](#RuntimeDebugging)\n3. [Analyzing Diagnostic Logs](#Logs)\n4. [Debugging Cloud Assembly Resolution](#AssemblyResolution)\n5. [Troubleshooting Entity Framework Migrations](#EFMigrations)\n\n<a name=\"HttpDebugging\"></a>\n## HTTP Debugging\n\nWhen developing apps with Mobile Services, you usually take advantage of the Mobile Services client SDK for the platform you are using (Windows Store, iOS, Android, etc). However some times it is helpful to drop down to the HTTP level and observe the raw calls as they happen on the network. This approach is particularly useful when debugging connectivity and serialization issues. With the Mobile Services .NET backend you can use this approach in combination with Visual Studio local and remote debugging (more on that in the next section) to get a complete idea of the the path a HTTP call makes before it invokes your service code.\n\nYou can use any HTTP debugger to send and inspect HTTP traffic. [Fiddler](http://www.telerik.com/fiddler) is a popular tool commonly used by developers for this purpose. To make developers' lives easier, Mobile Services bundles a web-based HTTP debugger (also referred to as the \"test client) right with your mobile service, reducing the need for external tooling. When hosting your mobile service locally, it will be available at a URI similar to `http://localhost:59233` and when hosting in the cloud, the URI will be of the form `http://todo-list.azure-mobile.net`. The following steps work the same way regardless of where the service is hosted:\n\n1. Start with a Mobile Services server project open in **Visual Studio 2013 Update 2** or later. If you don't have one handy, you can create one by selecting **File**, **New**, **Project**, then selecting the **Cloud** node and then the **Microsoft Azure Mobile Services** template.\n2. Hit **F5**, which will build and run the project. On the start page, select **try it out**.\n\n    >[AZURE.NOTE]\n    > If the service is hosted locally, clicking the link will direct you to the next page. However, if hosting in the cloud, you will be prompted for a set of credentials. This is to ensure that unauthenticated users don't have access to information about your API and payloads. In order to see the page, you need to log in with a **blank username** and your **application key** as the password. Your application key is available in the Azure classic portal by navigating to the **Dashboard** tab for your mobile service and selecting **Manage keys**.\n    >\n    > ![Authentication prompt to access help page][HelpPageAuth]\n\n3. The page you see (referred to as the \"help page\") shows a list of all HTTP APIs that your mobile service is making available. Select one of the APIs (if you started using the Mobile Services project template in Visual Studio, you should see **GET tables/TodoItem**).\n\n    ![Help page][HelpPage]\n\n4. The  resulting page shows any documentation and JSON examples of the request and response that the API expects. Select the **try this out** button.\n\n    ![Test page for an API][HelpPageApi]\n\n5. This is the \"test client\", which lets you send a HTTP request to try out your API. Select **send**.\n\n    ![Test client][TestClient]\n\n6. You will see the HTTP response coming back from your mobile service right in the browser window.\n\n    ![Test client with HTTP response][TestClientResponse]\n\nNow you are ready to explore the different HTTP APIs exposed by your mobile service in the convenience of your web browser.\n\n<a name=\"RuntimeDebugging\"></a>\n## Runtime Debugging\n\nOne of the key features of the .NET backend is the ability to debug the service code locally, but also to debug the code running live in the cloud environment. Follow these steps:\n\n1. Open the mobile service project you would like to debug in **Visual Studio 2013 Update 2** or later.\n2. Configure symbol loading. Navigate to the **Debug** menu and select **Options and Settings**. Ensure that **Enable Just My Code** is unchecked and that **Enable source server support** is checked.\n\n    ![Configure symbol loading][SymbolLoading]\n\n3. Select the **Symbols** node on the left and add a reference to the [SymbolSource] server using the URI `http://srv.symbolsource.org/pdb/Public`. Symbols for the Mobile Services .NET backend are made available there with every new release.\n\n    ![Configure symbol server][SymbolServer]\n\n4. Set a breakpoint in the piece of code you would like to debug. For example set a breakpoint in the **GetAllTodoItems()** method of the **TodoItemController** that comes with the Mobile Services project template in Visual Studio.\n5. Debug the service locally by pressing **F5**. The first load may be slow as Visual Studio is downloading symbols for the Mobile Services .NET backend.\n6. As described in the previous section on HTTP debugging, use the test client to send a HTTP request to the method where you set the breakpoint. For example you can send a request to the **GetAllTodoItems()** method by selecting **GET tables/TodoItem** on the help page, then selecting **try this out** and then **send**.\n7. Visual Studio should break at the breakpoint you set, and a full stack trace with source code should be available in the **Call Stack** window in Visual Studio.\n\n    ![Hitting a breakpoint][Breakpoint]\n\n8. You can now publish the service to Azure, and we will be able to use debugging just like we did above. Publish the project by right-clicking it in **Solution Explorer** and selecting **Publish**.\n9. On the **Settings** tab of the Publish wizard, select the **Debug** configuration. This ensures that the relevant debugging symbols are published with your code.\n\n    ![Publish debug][PublishDebug]\n\n10. Once the service has published successfully, open **Server Explorer** and expand the **Azure** and **Mobile Services** nodes. Sign in if necessary.\n11. Right click the mobile service you just published to and select **Attach Debugger**.\n\n    ![Attach debugger][AttachDebugger]\n\n12. Just as you did in step 6, send a HTTP request to invoke the method where you set the breakpoint. This time use the help page and test client for the Azure-hosted mobile service.\n13. Visual Studio will break at the breakpoint.\n\nYou now have access the the full power of the Visual Studio debugger when developing locally and against your live mobile service in Azure.\n\n<a name=\"Logs\"></a>\n## Analyzing Diagnostic Logs\n\nAs your mobile service handles requests from your customers, it generates a variety of useful diagnostic information, and also captures any exceptions encountered. In addition to that, you can instrument your controller code with additional logs by taking advantage of the [**Log**](http://msdn.microsoft.com/library/microsoft.windowsazure.mobile.service.apiservices.log.aspx) property available on the [**Services**](http://msdn.microsoft.com/library/microsoft.windowsazure.mobile.service.tables.tablecontroller.services.aspx) property of every [**TableController**](http://msdn.microsoft.com/library/microsoft.windowsazure.mobile.service.tables.tablecontroller.aspx).\n\nWhen debugging locally, the logs will appear in the Visual Studio **Output** window.\n\n![Logs in Visual Studio Output window][LogsOutputWindow]\n\nAfter you publish your service to Azure, the logs for the service instance running in the cloud are available by right-clicking the mobile service in Visual Studio's **Server Explorer** and then selecting **View Logs**.\n\n![Logs in Visual Studio Server Explorer][LogsServerExplorer]\n\nThe same logs are also available in the Azure classic portal on the **Logs** tab for your mobile service.\n\n![Logs in Azure classic portal][LogsPortal]\n\n<a name=\"AssemblyResolution\"></a>\n## Debugging Cloud Assembly Resolution\n\nWhen you publish your mobile service to Azure, it gets loaded by the Mobile Services hosting environment, which ensures seamless upgrades and patches to the HTTP pipeline hosting your controller code. This includes all assemblies referenced by the [.NET backend NuGet packages](http://www.nuget.org/packages?q=%22mobile+services+.net+backend%22): the team constantly updates the service to use the latest versions of those assemblies.\n\nIt is sometimes possible to introduce versioning conflicts by referencing *different major versions* of required assemblies (different *minor* versions are allowed). Frequently this happens when NuGet prompts you to upgrade to the latest version of one of the packages used by the Mobile Services .NET backend.\n\n>[AZURE.NOTE] Mobile Services is currently compatible only with ASP.NET 5.1; ASP.NET 5.2 is not presently supported. Upgrading your ASP.NET NuGet packages to 5.2.* may result in an error after deployment.\n\nIf you do upgrade any such packages, when you publish the updated service to Azure, you will see a warning page indicating the conflict:\n\n![Help page indicating assembly loading conflict][HelpConflict]\n\nThis will be accompanied by an exception message similar to the following being recored in your service logs:\n\n    Found conflicts between different versions of the same dependent assembly 'Microsoft.ServiceBus': 2.2.0.0, 2.3.0.0. Please change your project to use version '2.2.0.0' which is the one currently supported by the hosting environment.\n\nThis problem is easy to correct: simply revert to a supported version of the required assembly and republish your service.\n\n<a name=\"EFMigrations\"></a>\n## Troubleshooting Entity Framework Migrations\n\nWhen using the Mobile Services .NET backend with a SQL Database, Entity Framework (EF) is used as the data access technology that enables you to query the database and persist objects into it. One important aspect that EF handles on behalf of the developer is how the database columns (also known as *schema*) change as the model classes specified in code change. This process is known as [Code First Migrations](http://msdn.microsoft.com/data/jj591621).\n\nMigrations can be complex and require that the database state be kept in sync with the EF model in order to succeed. For instructions on how to handle migrations with you mobile service and errors that can arise, see [How to make data model changes to a .NET backend mobile service](mobile-services-dotnet-backend-how-to-use-code-first-migrations.md).\n\n<!-- IMAGES -->\n\n[HelpPageAuth]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/6.png\n[HelpPage]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/7.png\n[HelpPageApi]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/8.png\n[TestClient]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/9.png\n[TestClientResponse]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/10.png\n[SymbolLoading]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/1.png\n[SymbolServer]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/2.png\n[Breakpoint]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/3.png\n[PublishDebug]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/4.png\n[AttachDebugger]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/5.png\n[LogsOutputWindow]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/11.png\n[LogsServerExplorer]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/12.png\n[LogsPortal]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/13.png\n[HelpConflict]: ./media/mobile-services-dotnet-backend-how-to-troubleshoot/14.png\n\n\n<!-- Links -->\n[SymbolSource]:http://www.symbolsource.org/Public"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-how-to-use-code-first-migrations.md",
    "content": "<properties\n\tpageTitle=\"How to make data model changes to a .NET backend mobile service\"\n\tdescription=\"This topic describes data model initializers and how to make data model changes in a .NET backend mobile service.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\twriter=\"glenga\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"NA\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# How to make data model changes to a .NET backend mobile service\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\nThis topic shows how to use Code First Migrations in Entity Framework to make data model changes to an existing Azure SQL Database to avoid losing existing data. This procedure assumes that you have already published your .NET backend project to Azure, that there is existing data in your database, and that the remote and local data models are still in sync. This topic also describes the default Code First initializers implemented by Azure Mobile Services that are used during development. These initializers let you easily make schema changes without using Code First Migrations when it is not necessary to maintain you existing data.\n\n>[AZURE.NOTE]The schema name that is used to prefix your tables in the SQL Database is defined by the MS_MobileServiceName app setting in the web.config file. When you download the starter project from the portal, this value is already set to the mobile service name. When your schema name matches the mobile service, multiple mobile services can safely share the same database instance.\n\nNote that automatic migrations are not supported in a .NET backend project.\n\n## Updating the data model\n\nAs you add functionality to your .NET backend mobile service, you add new controllers to expose new endpoints in your API. You create a new API as either a custom controller or a table controller. A [TableController<TEntity>] exposes a data type that inherits from [EntityData]. To enable data to be persisted to the database, this data type must also be added to the data model as a new [DbSet<T>] in the [DbContext]. To learn more about Code First in the Entity Framework, see [Creating a Model with Code First](https://msdn.microsoft.com/data/ee712907#codefirst).\n\nVisual Studio makes it easy to create a new table controller to expose a new data type to client apps. For more information, see [How to use controllers to access data in mobile services](https://msdn.microsoft.com/library/windows/apps/xaml/dn614132.aspx).\n\n## Data model initializers\n\nMobile Services provides two data model initializer base classes in a .NET backend mobile service project. Both initializers drop and recreate tables in the database when the Entity Framework detects a data model change in your [DbContext]. These initializers are designed to work both when you mobile service is running on a local computer and when it is hosted in Azure.\n\n>[AZURE.NOTE]When you publish a .NET backend mobile service, the initializer is not run until a data access operation occurs. This means that for a newly published service, the data tables used for storage aren't created until a data access operation, such as a query, is requested by the client.\n>\n>You can also execute a data access operation by using the built-in API help functionality, accessed from the **Try it out** link on the start page. For more information on using the API pages to test your mobile service, see the section Test the mobile service project locally in [Add Mobile Services to an existing app](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-data.md#test-the-service-locally).\n\nBoth initializers delete from the database all tables, views, functions, and procedures in the schema used by the mobile service.\n\n+ **ClearDatabaseSchemaIfModelChanges** <br/> Schema objects are deleted only when Code First detects a change in the data model. The default initializer in a .NET backend project downloaded from the [Azure classic portal] inherits from this base class.\n\n+ **ClearDatabaseSchemaAlways**: <br/> Schema objects are deleted every time that the data model is accessed. Use this base class to reset the database without having to make a data model change.\n\nYou can use other Code First data model initializers when running on a local computer. However, initializers that attempt to drop the database will fail in Azure because the user does not have permissions to drop the database, which is a good thing.\n\nYou may continue to use initializers during local development of your mobile service, and the .NET backend tutorials assume that you are using initializers. However, for situations where you want to make data model changes and maintain existing data in the database, you must use Code First Migrations.\n\n>[AZURE.IMPORTANT]When developing and testing your mobile service project against live Azure services, you should always use a mobile service instance that is dedicated for testing. You should never develop or test against a mobile service that is currently in production or being used by client apps.\n\nIn the downloaded quickstart project, the Code First initializer is defined in the WebApiConfig.cs file. Override the **Seed** method to add initial rows of data to new tables. For examples of seeding data, see [Seeding data in migrations].\n\n## <a name=\"migrations\"></a>Enable Code First Migrations\n\nCode First Migrations uses a snapshot method to generate code that, when executed, makes schema changes to the database. With Migrations, you can make incremental changes to your data model and maintain existing data in the database.\n\n>[AZURE.NOTE]If you have already published your .NET backend mobile service project to Azure, and your SQL Database table schema does not match the current data model of your project, you must use an initializer, drop the tables manually, or otherwise get the schema and data model in sync before you try to publish using Code First Migrations.\n\nThe following steps turn on Migrations and apply data model changes in the project, the local database, and in Azure.\n\n1. In Visual Studio in the Solution Explorer, right-click the mobile service project and click **Set as startup project**.\n\n2. From the **Tools** menu, expand **NuGet Package Manager**, then click **Package Manager Console**.\n\n\tThis displays the Package Manager Console, which you will use to manage your Code First Migrations.\n\n3. In the Package Manager Console, run the following command:\n\n\t\tPM> Enable-Migrations\n\n\tThis turns on Code First Migrations for your project.\n\n4. In the console, run the following command:\n\n\t\tPM> Add-Migration Initial\n\n\tThis creates a new migration named *Initial*. Migration code is stored in the Migrations project folder.\n\n5. Expand the App_Start folder, open the WebApiConfig.cs project file and add the following **using** statements:\n\n\t\tusing System.Data.Entity.Migrations;\n\t\tusing todolistService.Migrations;\n\n\tIn the above code, you must replace the _todolistService_ string with the namespace of your project, which for the downloaded quickstart project is <em>mobile&#95;service&#95;name</em>Service.\n\n6. In this same code file, comment-out the call to the **Database.SetInitializer** method and add the following code after it:\n\n        var migrator = new DbMigrator(new Configuration());\n        migrator.Update();\n\n\tThis disables the default Code First database initializer that drops and recreates the database and replaces it with an explicit request to apply the latest migration. At this point, any data model changes will result in an InvalidOperationException when the data is accessed, unless a migration has been created for it. Going forward, your service must use Code First Migrations to migrate data model changes to the database.\n\n7.  Press F5 to start the mobile service project on the local computer.\n\n\tAt this point, the database is in sync with the data model. If you provided seed data, you can verify it by clicking **Try it out**, **GET tables/todoitem**, then **Try this out** and **Send**. For more information, see [Seeding data in migrations].\n\n8.   Now make a change to your data model, such as adding a new UserId property to the TodoItem type, rebuild the project, and then in the Package Manager, run the following command:\n\n\t\tPM> Add-Migration NewUserId\n\n\tThis creates a new migration named *NewUserId*. A new code file, which implements this change, is added in the Migrations folder\n\n9.  Press F5 again to restart the mobile service project on the local computer.\n\n\tThe migration is applied to the database and the database is again in sync with the data model. If you provided seed data, you can verify it by clicking **Try it out**, **GET tables/todoitem**, then **Try this out** and **Send**. For more information, see [Seeding data in migrations].\n\n10. Republish the mobile service to Azure, then run the client app to access the data and verify that data loads and no error occur.\n\n13. (Optional) In the [Azure classic portal], select your mobile service, click **Configure** > **SQL Database**. This navigates to the SQL Database page for your mobile service's database.\n\n14. (Optional) Click **Manage**, log in to your SQL Database server, then click **Design** and verify that the schema changes have been made in Azure.\n\n\n## Using Code First Migrations without an initializer\nBefore you use Code First Migrations with your .NET backend project, you should run a data model initializer. When you do NOT use an initializer, errors can occur when trying to apply migrations. If you choose not to use one of the pre-defined data model initializers, make sure that migrations is configured to use the EntityTableSqlGenerator as the SqlGenerator in the Migrations\\Configuration.cs file, as in the following example:\n\n    public Configuration()\n    {\n        AutomaticMigrationsEnabled = false;\n        SetSqlGenerator(\"System.Data.SqlClient\", new EntityTableSqlGenerator());\n    }\n\n## <a name=\"seeding\"></a>Seeding data in migrations\n\nYou can have Migrations add seed data to the database when a migration is executed. The **Configuration** class has a **Seed** method that you can override to insert or update data. The Configuration.cs code file is added to the Migrations folder when Migrations are enabled. These examples show how to override the [Seed] method to seed data to the **TodoItems** table. The [Seed] method is called after migrating to the latest version.\n\n### Seed a new table\n\nThe following code seeds the **TodoItems** table with new rows of data:\n\n        List<TodoItem> todoItems = new List<TodoItem>\n        {\n            new TodoItem { Id = \"1\", Text = \"First item\", Complete = false },\n            new TodoItem { Id = \"2\", Text = \"Second item\", Complete = false },\n        };\n\n        foreach (TodoItem todoItem in todoItems)\n        {\n            context.Set<TodoItem>().Add(todoItem);\n        }\n        base.Seed(context);\n\n### Seed a new column in a table\n\nThe following code seeds just the UserId column:\n\n        context.TodoItems.AddOrUpdate(\n            t => t.UserId,\n                new TodoItem { UserId = 1 },\n                new TodoItem { UserId = 1 },\n                new TodoItem { UserId = 2 }\n            );\n        base.Seed(context);\n\nThis code calls the [AddOrUpdate] helper extension method to add seed data to the new UserId column. By using [AddOrUpdate], duplicate rows are not created.\n\n<!-- Anchors -->\n[Migrations]: #migrations\n[Seeding data in migrations]: #seeding\n\n<!-- Images -->\n[0]: ./media/mobile-services-dotnet-backend-how-to-use-code-first-migrations/navagate-to-sql-database.png\n[1]: ./media/mobile-services-dotnet-backend-how-to-use-code-first-migrations/manage-sql-database.png\n[2]: ./media/mobile-services-dotnet-backend-how-to-use-code-first-migrations/sql-database-drop-tables.png\n\n<!-- URLs -->\n[DropCreateDatabaseIfModelChanges]: http://msdn.microsoft.com/library/gg679604(v=vs.113).aspx\n[Seed]: http://msdn.microsoft.com/library/hh829453(v=vs.113).aspx\n[Azure classic portal]: https://manage.windowsazure.com/\n[DbContext]: http://msdn.microsoft.com/library/system.data.entity.dbcontext(v=vs.113).aspx\n[AddOrUpdate]: http://msdn.microsoft.com/library/system.data.entity.migrations.idbsetextensions.addorupdate(v=vs.103).aspx\n[TableController<TEntity>]: https://msdn.microsoft.com/library/azure/dn643359.aspx\n[EntityData]: https://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobile.service.entitydata.aspx\n[DbSet<T>]: https://msdn.microsoft.com/library/azure/gg696460.aspx\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-hybrid-connections-get-started.md",
    "content": "<properties\n\tpageTitle=\"Connect to an on-premises SQL Server from a .NET backend mobile service using Hybrid Connections |  Azure Mobile Services\"\n\tdescription=\"Learn how to connect to an on-premises SQL Server from a .NET backend mobile service using Azure Hybrid Connections\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n\n# Connect to an on-premises SQL Server from Azure Mobile Services using Hybrid Connections\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nWhen your enterprise transitions to the cloud, you might not be able to migrate all of your assets to Azure right away. Hybrid Connections lets Azure Mobile Services securely connect to your on-premises assets. In this way, you can make your on-premises data accessible to your mobile clients by using Azure. Supported assets include any resource that runs on a static TCP port, including Microsoft SQL Server, MySQL, HTTP Web APIs, and most custom web services. Hybrid Connections use Shared Access Signature (SAS) authorization to secure the connections from your mobile service and the on-premises Hybrid Connection Manager to the hybrid connection. For more information, see [Hybrid Connections Overview](https://azure.microsoft.com/en-us/documentation/articles/integration-hybrid-connection-overview/).\n\nIn this tutorial, you will learn how to modify a .NET backend mobile service to use a local on-premises SQL Server database instead of the default Azure SQL Database provisioned with your service. Hybrid Connections are also supported for a JavaScript backend mobile service, as described in [this article](http://blogs.msdn.com/b/azuremobile/archive/2014/05/12/connecting-to-an-external-database-with-node-js-backend-in-azure-mobile-services.aspx).\n\n## Prerequisites ##\n\nThis tutorial requires you to have the following:\n\n- **An existing .NET backend mobile service** <br/>Follow the tutorial [Get started with Mobile Services] to create and download a new .NET backend mobile service from the [Azure classic portal].\n\n\n- **Visual Studio 2013** <br/>This a requirement for using To download a free trial version of Visual Studio 2013, see [Visual Studio Downloads](http://www.visualstudio.com/downloads/download-visual-studio-vs).\n\n- **SQL Server 2014 Express with Tools** <br/>Download Microsoft SQL Server Express for free at the [Microsoft SQL Server Express Edition page](http://www.microsoft.com/en-us/server-cloud/Products/sql-server-editions/sql-server-express.aspx). Choose the **Download SQL Server Express** and fill out your profile, choosing **SQL Server 2014 Express with Tools**, then click continue. This starts the download of the installer for both SQL Server Express and the SQL Server Express Management Tools. Save the installer package to your on-premises computer.\n\n- **An on-premises computer** <br/>You can run the Hybrid Connections Manger on the same on-premises computer as your SQL Server instance, or you can run each on a separate computer. The computer on which the Hybrid Connection Manager runs must meet the following criteria:\n\n\t- Be able to connect to Azure over port 5671.\n\t- Be able to access the *hostname*:*portnumber* of the computer running your SQL Server instance.  \n\n\tFor more information see [Hybrid Connections Overview](https://azure.microsoft.com/en-us/documentation/articles/integration-hybrid-connection-overview/).\n\n## Install SQL Server Express, enable TCP/IP, and create a SQL Server database on-premises\n\n\nThis section shows you how to install a SQL Server Express, enable TCP/IP, set a static port, and create a database that can be used with Hybrid Connections.  \n\n### Install SQL Server Express\n\nTo use an on-premises SQL Server or SQL Server Express database with a hybrid connection, TCP/IP needs to be enabled on a static port. Default instances on SQL Server use static port 1433, whereas named instances do not. Because of this, we will install the default instance. If you already have the default instance of SQL Server Express installed, you can skip this section.\n\n1. To install SQL Server Express, run the **SQLEXPRWT_x64_ENU.exe** or **SQLEXPR_x86_ENU.exe** file that you downloaded. The SQL Server Installation Center wizard appears.\n\n2. Choose **New SQL Server stand-alone installation or add features to an existing installation**, follow the instructions, accepting the default choices and settings, until you get to the **Instance Configuration** page.\n\n3. On the **Instance Configuration** page, choose **Default instance**, then accept the default settings on the **Server Configuration** page.\n\n\t>[AZURE.NOTE]If you already have a default instance of SQL Server installed, you can skip to the next section and use this instance with Hybrid Connections.\n\n5. On the **Database Engine Configuration** page, under **Authentication Mode**, choose **Mixed Mode (SQL Server authentication and Windows authentication)**, and provide a secure password for the built-in **sa** administrator account.\n\n\tIn this tutorial, you will be using SQL Server authentication. Be sure to remember the password that you provide, because you will need it later.\n\n6. Finish the wizard to complete the installation.\n\n### Enable TCP/IP and setting a static port\n\nThis section uses SQL Server Configuration Manager, which was installed when you installed SQL Server Express, to enable TCP/IP and set a static IP address.\n\n1. Follow the steps in [Enable TCP/IP Network Protocol for SQL Server](http://technet.microsoft.com/library/hh231672%28v=sql.110%29.aspx) to enable TCP/IP access to the instance.\n\n2. (Optional) If you are not able to use the default instance, you must follow the steps in [Configure a Server to Listen on a Specific TCP Port ](https://msdn.microsoft.com/library/ms177440.aspx) to set a static port for the instance. If you complete this step, you will connect using the new port that you define, instead of port 1433.\n\n3. (Optional) If needed, add exceptions in the firewall to allow remote access to the SQL Server process (sqlservr.exe).\n\n### Create a new database in the on-premises SQL Server instance\n\n1. In SQL Server Management Studio, connect to the SQL Server you just installed. (If the **Connect to Server** dialog does not appear automatically, navigate to **Object Explorer** in the left pane, click **Connect**, and then click **Database Engine**.) \t\n\n\t![Connect to Server](./media/hybrid-connections-create-on-premises-database/A04SSMSConnectToServer.png)\n\n\tFor **Server type**, choose **Database Engine**. For **Server name**, you can use **localhost** or the name of the computer where you installed SQL Server. Choose **SQL Server authentication**, and supply the password for the sa login that you created earlier.\n\n2. To create a new database by using SQL Server Management Studio, right-click **Databases** in Object Explorer, and then click **New Database**.\n\n3. In the **New Database** dialog, type `OnPremisesDB`, and then click **OK**.\n\n4. In Object Explorer, if you expand **Databases**, you will see that the new database is created.\n\n### Create a new SQL Server login and set permissions\n\nFinally, you will create a new SQL Server login with restricted permissions. Your Azure service will connect to the on-premise SQL Server using this login instead of the built-in sa login, which has full permissions on the server.\n\n1. In SQL Server Management Studio Object Explorer, right-click the **OnPremisesDB** database and click **New Query**.\n\n2.  Paste the following TSQL query into the query window.\n\n\t\tUSE [master]\n\t\tGO\n\n\t\t/* Replace the PASSWORD in the following statement with a secure password.\n\t\t   If you save this script, make sure that you secure the file to\n\t\t   securely maintain the password. */\n\t\tCREATE LOGIN [HybridConnectionLogin] WITH PASSWORD=N'<**secure_password**>',\n\t\t\tDEFAULT_DATABASE=[OnPremisesDB], DEFAULT_LANGUAGE=[us_english],\n\t\t\tCHECK_EXPIRATION=OFF, CHECK_POLICY=ON\n\t\tGO\n\n\t\tUSE [OnPremisesDB]\n\t\tGO\n\n\t\tCREATE USER [HybridConnectionLogin] FOR LOGIN [HybridConnectionLogin]\n\t\tWITH DEFAULT_SCHEMA=[dbo]\n\t\tGO\n\n\t\tGRANT CONNECT TO [HybridConnectionLogin]\n\t\tGRANT CREATE TABLE TO [HybridConnectionLogin]\n\t\tGRANT CREATE SCHEMA TO [HybridConnectionLogin]\n\t\tGO  \n\n3. In the above script, replace the string `<**secure_password**>` with a secure password for the new *HybridConnectionsLogin*.\n\n4. **Execute** the query to create the new login and grant the required permissions in the on-premises database.\n\n\n## Create a Hybrid Connection\n\n\n1. On the on-premises machine, log on to the [Azure Management Portal](http://manager.windowsazure.com) (this is the old portal).\n\n2. At the bottom of the navigation pane, select **+NEW** > **App Services** > **BizTalk Service** > **Custom Create**.\n\n3. Provide a **BizTalk Service Name** and select an **Edition**.\n\n\tThis tutorial uses **mobile1**. You will need to supply a unique name for your new BizTalk Service.\n\n4. Once the BizTalk Service has been created, select the **Hybrid Connections** tab, then click **Add**.\n\n\t![Add Hybrid Connection](./media/hybrid-connections-create-new/3.png)\n\n\tThis creates a new hybrid connection.\n\n5. Provide a **Name** and **Host Name** for your hybrid connection and set **Port** to `1433`.\n\n\t![Configure Hybrid Connection](./media/hybrid-connections-create-new/4.png)\n\n\tThe host name is the name of the on-premises server. This configures the hybrid connection to access SQL Server running on port 1433. If you are using a named SQL Server instance, instead use the static port you defined earlier.\n\n6. After the new connection is created, the status of the of the new connection shows **On-premises setup incomplete**.\n\n7. Navigate back to your mobile service, click **Configure**, scroll down to **Hybrid connections** and click **Add hybrid connection**, then select the hybrid connection that you just created and click **OK**.\n\n    This enables your mobile service to use your new hybrid connection.\n\nNext, you'll need to install the Hybrid Connection Manager on the on-premises computer.\n\n## Install the on-premises Hybrid Connection Manager to complete the connection\n\n\nThe Hybrid Connection Manager enables your on-premises machine to connect to Azure and relay TCP traffic. You must  install the manager to an on-premises computer that can connect to the your SQL Server instance.\n\n1. The connection you just created should have a **Status** of **On-premesis setup incomplete**. Click this connection and click **On-premises Setup**.\n\n\t![On-Premises Setup](./media/hybrid-connections-install-connection-manager/5-1.png)\n\n2. Click **Install and Configure**.\n\n\tThis installs a customized instance of the Connection Manager, which is already pre-configured to work with the hybrid connection you just created.\n\n3. Complete the rest of the setup steps for the Connection Manager.\n\n\tAfter the installation is complete, the hybrid connection status will change to **1 Instance Connected**. You may need to refresh the browser and wait a few minutes.\n\nThe hybrid connection setup is now complete.\n\n## Configure the mobile service project to connect to the SQL Server database\n\nIn this step, you define a connection string for the on-premises database and modify the mobile service to use this connection.\n\n1. In Visual Studio 2013, open the project that defines your .NET backend mobile service.\n\n\tTo learn how to download your .NET backend project, see [Get started with Mobile Services](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md) .\n\n2. In Solution Explorer, open the Web.config file, locate the **connectionStrings** section, add a new SqlClient entry like the following, which points to the on-premises SQL Server database:\n\n\t    <add name=\"OnPremisesDBConnection\"\n         connectionString=\"Data Source=OnPremisesServer,1433;\n         Initial Catalog=OnPremisesDB;\n         User ID=HybridConnectionLogin;\n         Password=<**secure_password**>;\n         MultipleActiveResultSets=True\"\n         providerName=\"System.Data.SqlClient\" />\n\n\tRemember to replace `<**secure_password**>` in this string with the password you created for the *HbyridConnectionLogin*.\n\n3. Click **Save** in Visual Studio to save the Web.config file.\n\n\t> [AZURE.NOTE]This connection setting is used when running on the local computer. When running in Azure, this setting is overriden by the connection setting defined in the portal.\n\n4. Expand the **Models** folder and open the data model file, which ends in *Context.cs*.\n\n6. Modify the **DbContext** instance constructor to pass the value `OnPremisesDBConnection` to the base **DbContext** constructor, similar to the following snippet:\n\n        public class hybridService1Context : DbContext\n        {\n            public hybridService1Context()\n                : base(\"OnPremisesDBConnection\")\n            {\n            }\n        }\n\n\tThe service will now use the new connection to the SQL Server database.\n\n## Test the database connection locally\n\nBefore publishing to Azure and using the hybrid connection, it's a good idea to make sure that the database connection works when running locally. That way you can more easily diagnose and correct any connection issues before you republish and start using the hybrid connection.\n\n\n1. In Visual Studio in Solution Explorer, right click the service project and click **Start new instance** under the **Debug** context menu.\n\n    ![start mobile service project locally](./media/mobile-services-dotnet-backend-test-local-service-api-documentation/vs-start-debug-service-project.png)\n\n    Visual Studio opens the default web page for your service. By default, Visual Studio hosts your mobile service locally in IIS Express.\n\n2. Right-click the tray icon for IIS Express on the Windows taskbar and verify that your mobile service has started.\n\n\t ![verify the mobile service in the taskbar](./media/mobile-services-dotnet-backend-test-local-service-api-documentation/iis-express-tray.png)\n\n3. On the start page of your .NET backend, click **try it out**.\n\n    ![mobile service start up page](./media/mobile-services-dotnet-backend-test-local-service-api-documentation/service-welcome-page.png)\n\n    This displays the API documentation page, which you can use to test the mobile service.\n\n\t>[AZURE.NOTE]Authentication is not required to access this page when running locally. When running in Azure, you must supply the application key as the password (with no username) to access this page.\n\n4. Click the **GET tables/TodoItem** link.\n\n\t![](./media/mobile-services-dotnet-backend-test-local-service-api-documentation/service-api-documentation-page.png)\n\n\tThis displays the GET response page for the API.\n\n5. Click **try this out** and then click **send**.\n\n\t![](./media/mobile-services-dotnet-backend-test-local-service-api-documentation/service-try-this-out-get-todoitems.png)\n\n\tThis sends a GET request to the local mobile service to return all rows in the TodoItem table. Because the table is seeded by the initializer, two TodoItem objects are returned in the body of the response message. For more information about initializers, see [How to make data model changes to a .NET backend mobile service](mobile-services-dotnet-backend-how-to-use-code-first-migrations.md).\n\n\t![](./media/mobile-services-dotnet-backend-test-local-service-api-documentation/service-try-this-out-get-response.png)\n\n## Update Azure to use the on-premises connection string\n\nNow that you have verified the database connection, you need to add an app setting for this new connection string so that it can be used from Azure and publish the mobile service to Azure.\n\n1. In the [Azure classic portal], browse to your mobile service.\n\n1. Click the **Configure** tab, and locate **Connection Strings** section.\n\n\t![Connection string for on-premises database](./media/mobile-services-dotnet-backend-hybrid-connections-get-started/11.png)\n\n2. Add an new connection **SQL Server** string named `OnPremisesDBConnection` with a value like the following:\n\n\t\tServer=OnPremisesServer,1433;Database=OnPremisesDB;User ID=HybridConnectionsLogin;Password=<**secure_password**>\n\n\n\tReplace `<**secure_password**>` with the secure password for *HybridConnectionLogin*.\n\n2. Press **Save** to save the hybrid connection and connection string you just created.\n\n3. Using Visual Studio, publish your updated mobile service project to Azure.\n\n\tThe service start page is displayed.\n\n4. Using either the **Try it now** button on the start page as before or using a client app connected to your mobile service, invoke some operations that generate database changes.\n\n\t>[AZURE.NOTE]When you use the **Try it now** button to launch the Help API pages, remember to supply your application key as the password (with a blank username).\n\n4. In SQL Server Management Studio, connect to your SQL Server instance, open the Object Explorer, expand the **OnPremisesDB** database and expand **Tables**.\n\n5. Right-click the **hybridService1.TodoItems** table and choose **Select Top 1000 Rows** to view the results.\n\n\tNote that changes generated in your app have been saved by your mobile service to your on-premises database using the hybrid connection.\n\n## See Also ##\n\n+ [Hybrid Connections web site](https://azure.microsoft.com/services/biztalk-services/)\n+ [Hybrid Connections overview](https://azure.microsoft.com/en-us/documentation/articles/integration-hybrid-connection-overview/)\n+ [BizTalk Services: Dashboard, Monitor, Scale, Configure, and Hybrid Connection tabs](https://azure.microsoft.com/en-us/documentation/articles/biztalk-dashboard-monitor-scale-tabs/)\n+ [How to make data model changes to a .NET backend mobile service](mobile-services-dotnet-backend-how-to-use-code-first-migrations.md)\n\n<!-- IMAGES -->\n\n\n<!-- Links -->\n[Azure classic portal]: http://manage.windowsazure.com\n[Get started with Mobile Services]: mobile-services-dotnet-backend-windows-store-dotnet-get-started.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-ios-adal-sso-authentication.md",
    "content": "<properties\n\tpageTitle=\"Authenticate your app with Active Directory Authentication Library Single Sign-On (iOS) | Microsoft Azure\"\n\tdescription=\"Learn how to authentication users for single sign-on with ADAL in your iOS application.\"\n\tdocumentationCenter=\"ios\"\n\tauthors=\"mattchenderson\"\n\tmanager=\"dwrede\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"mahender\"/>\n\n# Authenticate your app with Active Directory Authentication Library Single Sign-On\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR-LIST (Platform | Backend)]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-adal-sso-authentication.md)\n- [(Windows 8.x Store C# | .NET)](mobile-services-windows-store-dotnet-adal-sso-authentication.md)\n\n## Overview\n\nIn this tutorial, you add authentication to the quickstart project using the Active Directory Authentication Library.\n\nTo be able to authenticate users, you must register your application with the Azure Active Directory (AAD). This is done in two steps. First, you must register your mobile service and expose permissions on it. Second, you must register your iOS app and grant it access to those permissions\n\n\n>[AZURE.NOTE] This tutorial is intended to help you better understand how Mobile Services enables you to do single sign-on Azure Active Directory authentication for iOS apps. If this is your first experience with Mobile Services, complete the tutorial [Get started with Mobile Services].\n\n\n## Prerequisites\n\n\nThis tutorial requires the following:\n\n* XCode 4.5 and iOS 6.0 (or later versions)\n* Completion of the [Get started with Mobile Services] tutorial.\n* Completion of the [Register your apps to use an Azure Active Directory Account login]\n* Microsoft Azure Mobile Services SDK\n* The [Active Directory Authentication Library for iOS]\n\n## <a name=\"register-app-aad\"></a>Register your client app with the Azure Active Directory\n\n1. Navigate to **Active Directory** in the [Azure classic portal](https://manage.windowsazure.com/), then click your directory.\n\n   ![](./media/mobile-services-dotnet-adal-register-client/mobile-services-select-aad.png)\n\n2. Click the **Applications** tab at the top, then click to **ADD** an app. \n\n   ![](./media/mobile-services-dotnet-adal-register-client/mobile-services-aad-applications-tab.png)\n\n3. Click **Add an application my organization is developing**.\n\n4. In the Add Application Wizard, enter a **Name** for your application and click the  **Native Client Application** type. Then click to continue.\n\n   ![](./media/mobile-services-dotnet-adal-register-client/mobile-services-native-selection.png)\n\n5. In the **Redirect URI** box, enter the /login/done endpoint for your mobile service. This value should be similar to https://todolist.azure-mobile.net/login/done.\n\n   ![](./media/mobile-services-dotnet-adal-register-client/mobile-services-native-redirect-uri.png)\n\n6. Click the **Configure** tab for the native application and copy the **Client ID**. You will need this later.\n\n   ![](./media/mobile-services-dotnet-adal-register-client/mobile-services-native-client-id.png)\n\n7. Scroll the page down to the **permissions to other applications** section and click the **Add application** button. Choose **Other** from the Show menu and search for todo. Click **TodoList** to add it the mobile service you registered earlier and click the checkmark for done. Grant access to the mobile service application. Then click **Save**\n\n   ![](./media/mobile-services-dotnet-adal-register-client/mobile-services-native-add-permissions.png)\n\nYour mobile service is now configured in AAD to receive single sign-on logins from your app.\n\n## Configure the mobile service to require authentication\n\n\n\nBy default, all requests to mobile service resources are restricted to clients that present the application key, which does not strictly secure access to resources. To secure your resources, you must restrict access to only authenticated clients.\n\n1. In Visual Studio, open your mobile service project, expand the Controllers folder, and open **TodoItemController.cs**. The **TodoItemController** class implements data access for the TodoItem table. Add the following `using` statement:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\n2. Apply the following _AuthorizeLevel_ attribute to the **TodoItemController** class. \n\n\t\t[AuthorizeLevel(AuthorizationLevel.User)]\n\n\tThis makes sure that all operations against the _TodoItem_ table require an authenticated user. You can also apply the *AuthorizeLevel* attribute at the method level.\n\n3. (Optional) If you wish to debug authentication locally, expand the `App_Start` folder, open **WebApiConfig.cs**, and add the following code to the **Register** method.  \n\n\t\tconfig.SetIsHosted(true);\n\n\tThis tells the local mobile service project to run as if it is being hosted in Azure, including honoring the *AuthorizeLevel* settings. Without this setting, all HTTP requests to localhost are permitted without authentication despite the *AuthorizeLevel* setting. When you enable self-hosted mode, you also need to set a value for the local application key.\n\n4. (Optional) In the web.config project file, set a string value for the `MS_ApplicationKey` app setting. \n\n\tThis is the password that you use (with no username) to test the API help pages when you run the service locally.  This string value is not used by the live site in Azure, and you do not need to use the actual application key; any valid string value will work.\n \n4. Republish your project.\n\n## Add authentication code to the client app\n\n1. Download the [Active Directory Authentication Library for iOS] and include it in your project. Be sure to also add the storyboards from the ADAL source.\n\n2. In the QSTodoListViewController, include ADAL with the following:\n\n        #import \"ADALiOS/ADAuthenticationContext.h\"\n\n2. Then add the following method:\n\n        - (void) loginAndGetData\n        {\n            MSClient *client = self.todoService.client;\n            if (client.currentUser != nil) {\n                return;\n            }\n\n            NSString *authority = @\"<INSERT-AUTHORITY-HERE>\";\n            NSString *resourceURI = @\"<INSERT-RESOURCE-URI-HERE>\";\n            NSString *clientID = @\"<INSERT-CLIENT-ID-HERE>\";\n            NSString *redirectURI = @\"<INSERT-REDIRECT-URI-HERE>\";\n\n            ADAuthenticationError *error;\n            ADAuthenticationContext *authContext = [ADAuthenticationContext authenticationContextWithAuthority:authority error:&error];\n            NSURL *redirectUri = [[NSURL alloc]initWithString:redirectURI];\n\n            [authContext acquireTokenWithResource:resourceURI clientId:clientID redirectUri:redirectUri completionBlock:^(ADAuthenticationResult *result) {\n                if (result.tokenCacheStoreItem == nil)\n                {\n                    return;\n                }\n                else\n                {\n                    NSDictionary *payload = @{\n                        @\"access_token\" : result.tokenCacheStoreItem.accessToken\n                    };\n                    [client loginWithProvider:@\"windowsazureactivedirectory\" token:payload completion:^(MSUser *user, NSError *error) {\n                        [self refresh];\n                    }];\n                }\n            }];\n        }\n\n\n6. In the code for the `loginAndGetData` method above, replace **INSERT-AUTHORITY-HERE** with the name of the tenant in which you provisioned your application, the format should be https://login.windows.net/tenant-name.onmicrosoft.com. This value can be copied out of the Domain tab in your Azure Active Directory in the [Azure classic portal].\n\n7. In the code for the `loginAndGetData` method above, replace **INSERT-RESOURCE-URI-HERE** with the **App ID URI** for your mobile service. If you followed the [How to Register with the Azure Active Directory] topic your App ID URI should be similar to https://todolist.azure-mobile.net/login/aad.\n\n8. In the code for the `loginAndGetData` method above, replace **INSERT-CLIENT-ID-HERE** with the client ID you copied from the native client application.\n\n9. In the code for the `loginAndGetData` method above, replace **INSERT-REDIRECT-URI-HERE** with the /login/done endpoint for your mobile service. This should be similar to https://todolist.azure-mobile.net/login/done.\n\n\n3. In the QSTodoListViewController, modify `ViewDidLoad` by replacing `[self refresh]` with the following:\n\n        [self loginAndGetData];\n\n## Test the client using authentication\n\n1. From the Product menu, click Run to start the app\n2. You will receive a prompt to login against your Azure Active Directory.\n3. The app authenticates and returns the todo items.\n\n   ![](./media/mobile-services-dotnet-backend-ios-adal-sso-authentication/mobile-services-app-run.png)\n\n\n\n<!-- URLs. -->\n[Get started with Mobile Services]: mobile-services-dotnet-backend-ios-get-started.md\n[Register your apps to use an Azure Active Directory Account login]:mobile-services-how-to-register-active-directory-authentication.md\n[How to Register with the Azure Active Directory]: mobile-services-how-to-register-active-directory-authentication.md\n[Azure classic portal]: https://manage.windowsazure.com/\n[Active Directory Authentication Library for iOS]: https://github.com/MSOpenTech/azure-activedirectory-library-for-ios\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-ios-get-started-push.md",
    "content": "<properties\n\tpageTitle=\"Add Push Notifications to App (iOS) | .NET Backend\"\n\tdescription=\"Learn how to use Azure Mobile Services to send push notifications to your iOS app.\"\n\tservices=\"mobile-services,notification-hubs\"\n\tdocumentationCenter=\"ios\"\n\tmanager=\"dwrede\"\n\teditor=\"\"\n\tauthors=\"krisragh\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh\"/>\n\n\n# Add Push Notifications to iOS App and .NET Backend\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-push.md)\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-javascript-backend-windows-phone-get-started-push.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started-push.md)\n- [(Android | Javascript)](mobile-services-javascript-backend-android-get-started-push.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-push.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-push.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-push.md)\n- [(Xamarin.Forms | JavaScript)](partner-xamarin-mobile-services-xamarin-forms-get-started-push.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows you how to add push notifications to the [quickstart project](mobile-services-dotnet-backend-ios-get-started.md), so that your mobile service sends a push notification each time a record is inserted. You must complete [Get Started with Mobile Services] first.\n\n\n* [Register an App ID for your app](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingProfiles/MaintainingProfiles.html#//apple_ref/doc/uid/TP40012582-CH30-SW991). Create an explicit App ID (not a wildcard App ID) and for **Bundle ID**, use the exact **Bundle ID** that is in your Xcode quickstart project. It is also crucial that you check the **Push Notifications** option.\n\n* Next, [configuring push notifications](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/AddingCapabilities/AddingCapabilities.html#//apple_ref/doc/uid/TP40012582-CH26-SW6). You may create either a \"Development\" or \"Distribution\" SSL certificate (remember to select the corresponding option in the Azure portal later.)\n\n## <a id=\"configure\"></a>Configure Azure to Send Push Notifications\n\n\n* Follow the steps at [Installing a Client SSL Signing Identity on the Server](https://developer.apple.com/library/prerelease/ios/documentation/IDEs/Conceptual/AppDistributionGuide/AddingCapabilities/AddingCapabilities.html#//apple_ref/doc/uid/TP40012582-CH26-SW16) to export the certificate you downloaded in the previous step to a .p12 file.\n\n* In the Azure classic portal, click **Mobile Services** > your app > the **Push** tab > **apple push notification settings** > \"**Upload**. Upload the .p12 file, making sure that the correct **Mode** is selected (either Sandbox or Production, corresponding to whether the client SSL certificate you generated was Development or Distribution.) Your mobile service is now configured to work with push notifications on iOS!\n\n## <a id=\"update-server\"></a>Update Backend Code to Send Push Notifications\n\n* Open Visual Studio project > **Controllers** folder > **TodoItemController.cs** > method `PostTodoItem`. Replace the method with the following. When a todo item is inserted, this code sends out a push notification with the item text. If there's an error, the code adds an error log entry that is viewable via the logs section of the portal.\n\n\n```\n        public async Task<IHttpActionResult> PostTodoItem(TodoItem item)\n        {\n            TodoItem current = await InsertAsync(item);\n\n            ApplePushMessage message = new ApplePushMessage(item.Text, System.TimeSpan.FromHours(1));\n\n            try\n            {\n                var result = await Services.Push.SendAsync(message);\n                Services.Log.Info(result.State.ToString());\n            }\n            catch (System.Exception ex)\n            {\n                Services.Log.Error(ex.Message, null, \"Push.SendAsync Error\");\n            }\n            return CreatedAtRoute(\"Tables\", new { id = current.Id }, current);\n        }\n```\n\n## <a name=\"publish-the-service\"></a>Publish Mobile Service to Azure\n\n\n1. In Visual Studio, right-click the project, click **Publish** > **Microsoft Azure Mobile Services**. Instead of using Visual Studio, [you may also use Git](./\nmobile-services-dotnet-backend-store-code-source-control.md).\n\n2. Sign in with Azure credentials and select your service from **Existing Mobile Services**. Visual Studio downloads your publish settings directly from Azure. Finally, click **Publish**.\n\n\n## <a id=\"add-push\"></a>Add Push Notifications to App\n\n* In QSAppDelegate.m, import the iOS SDK and QSTodoService.h:\n\n```\n        #import <WindowsAzureMobileServices/WindowsAzureMobileServices.h>\n        #import \"QSTodoService.h\"\n```\n\n* In `didFinishLaunchingWithOptions` in QSAppDelegate.m, insert the following lines right before `return YES;`:\n\n```\n        UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];\n        [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];\n        [[UIApplication sharedApplication] registerForRemoteNotifications];\n```\n\n* In QSAppDelegate.m, add the following handler methods. Your app is now updated to support push notifications.\n\n```\n        // Registration with APNs is successful\n        - (void)application:(UIApplication *)application\n        didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {\n\n            QSTodoService *todoService = [QSTodoService defaultService];\n            MSClient *client = todoService.client;\n\n            [client.push registerNativeWithDeviceToken:deviceToken tags:nil completion:^(NSError *error) {\n                if (error != nil) {\n                    NSLog(@\"Error registering for notifications: %@\", error);\n                }\n            }];\n        }\n\n        // Handle any failure to register\n        - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:\n        (NSError *)error {\n            NSLog(@\"Failed to register for remote notifications: %@\", error);\n        }\n\n        // Use userInfo in the payload to display a UIAlertView.\n        - (void)application:(UIApplication *)application\n              didReceiveRemoteNotification:(NSDictionary *)userInfo {\n            NSLog(@\"%@\", userInfo);\n\n            NSDictionary *apsPayload = userInfo[@\"aps\"];\n            NSString *alertString = apsPayload[@\"alert\"];\n\n            UIAlertView *alert = [[UIAlertView alloc]\n              initWithTitle:@\"Notification\"\n              message:alertString\n              delegate:nil\n              cancelButtonTitle:@\"OK\"\n              otherButtonTitles:nil];\n            [alert show];\n        }\n```\n\n\n* In Xcode, press **Run** and start the app on an iOS device (not the simulator.) Click **OK** to accept push notifications; this request occurs the first time the app runs.\n\n* In the app, add a new item and click **+**.\n\n* Verify that a notification is received, then click **OK** to dismiss the notification. You have now successfully completed this tutorial.\n\n  \t![](media/mobile-services-ios-get-started-push/mobile-quickstart-push3-ios.png)\n\n<!-- Anchors.  -->\n[Generate the certificate signing request]: #certificates\n[Register your app and enable push notifications]: #register\n[Create a provisioning profile for the app]: #profile\n[Configure Mobile Services]: #configure\n[Update scripts to send push notifications]: #update-scripts\n[Add push notifications to the app]: #add-push\n[Insert data to receive notifications]: #test\n[Test the app against the published mobile service]: #test-app\n[Next Steps]:#next-steps\n[Download the service locally]: #download-the-service-locally\n[Test the mobile service]: #test-the-service\n[Publish the mobile service to Azure]: #publish-mobile-service\n\n<!-- Images. -->\n[5]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step5.png\n[6]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step6.png\n[7]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step7.png\n\n[9]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step9.png\n[10]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step10.png\n[17]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step17.png\n[18]: ./media/mobile-services-ios-get-started-push/mobile-services-selection.png\n[19]: ./media/mobile-services-ios-get-started-push/mobile-push-tab-ios.png\n[20]: ./media/mobile-services-ios-get-started-push/mobile-push-tab-ios-upload.png\n[21]: ./media/mobile-services-ios-get-started-push/mobile-portal-data-tables.png\n[22]: ./media/mobile-services-ios-get-started-push/mobile-insert-script-push2.png\n[23]: ./media/mobile-services-ios-get-started-push/mobile-quickstart-push1-ios.png\n[24]: ./media/mobile-services-ios-get-started-push/mobile-quickstart-push2-ios.png\n[25]: ./media/mobile-services-ios-get-started-push/mobile-quickstart-push3-ios.png\n[26]: ./media/mobile-services-ios-get-started-push/mobile-quickstart-push4-ios.png\n[28]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step18.png\n\n[101]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-01.png\n[102]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-02.png\n[103]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-03.png\n[104]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-04.png\n[105]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-05.png\n[106]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-06.png\n[107]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-07.png\n[108]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-08.png\n\n[110]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-10.png\n[111]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-11.png\n[112]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-12.png\n[113]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-13.png\n[114]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-14.png\n[115]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-15.png\n[116]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-16.png\n[117]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-17.png\n\n<!-- URLs. -->\n[Install Xcode]: https://go.microsoft.com/fwLink/p/?LinkID=266532\n[iOS Provisioning Portal]: http://go.microsoft.com/fwlink/p/?LinkId=272456\n[Mobile Services iOS SDK]: https://go.microsoft.com/fwLink/p/?LinkID=266533\n[Apple Push Notification Service]: http://go.microsoft.com/fwlink/p/?LinkId=272584\n[Get started with Mobile Services]: mobile-services-dotnet-backend-ios-get-started.md\n[apns object]: http://go.microsoft.com/fwlink/p/?LinkId=272333\n\n[Get started with authentication]: mobile-services-dotnet-backend-ios-get-started-users.md\n[Mobile Services Objective-C how-to conceptual reference]: mobile-services-windows-dotnet-how-to-use-client-library.md\n[What are Notification Hubs?]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-push-notification-overview/\n[Send broadcast notifications to subscribers]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-ios-xplat-segmented-apns-push-notification/\n[Send template-based notifications to subscribers]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-ios-xplat-localized-apns-push-notification/\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-ios-get-started-users.md",
    "content": "<properties\n\tpageTitle=\"Add Authentication to Existing Azure Mobile Services App (iOS) | .NET Backend | Microsoft Azure\"\n\tdescription=\"Learn how to use Mobile Services to authenticate users of your iOS app through a variety of identity providers, including Google, Facebook, Twitter, and Microsoft.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"ios\"\n\tauthors=\"krisragh\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh\"/>\n\n# Add Authentication to Existing Azure Mobile Services app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-users.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-users.md)\n- [(Android | Javascript)](mobile-services-android-get-started-users.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started-users.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-users.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-users.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-users.md)\n- [(HTML | Javascript)](mobile-services-html-get-started-users.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nIn this tutorial, you add authentication to the Quick Start project using a supported identity provider. This tutorial is based on the [Mobile Services Quick Start tutorial], which you must complete first.\n\n## <a name=\"register\"></a>Register app for authentication and configure Mobile Services\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Dashboard**, and make a note of the **Mobile Service URL** value.\n\n2. Register your app with one or more of the following authentication providers:\n   * [Google](./\nmobile-services-how-to-register-google-authentication.md)\n   * [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n   * [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n   * [Microsoft](./\nmobile-services-how-to-register-microsoft-authentication.md)\n   * [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md).\n\n    Make a note of the client identity and client secret values generated by the provider. Do not distribute or share the client secret.\n\n3. Back in the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Identity** > your identity provider settings, then enter the client ID and secret value from your provider.\n\nYou've now configured both your app and your mobile service to work with your auth provider. You may optionally repeat all these steps for each additional identity provider you'd like to support.\n\n> [AZURE.IMPORTANT] Verify that you've set the correct redirect URI on your identity provider's developer site. As described in the linked instructions for each provider above, the redirect URI may be different for a .NET backend service vs. for a JavaScript backend service. An incorrectly configured redirect URI may result in the login screen not being displayed properly and the app malfunctioning in unexpected ways.\n\n\n### (Optional) Configure your .NET Mobile Service for Azure Active Directory\n\n>[AZURE.NOTE] These steps are optional because they only apply to the Azure Active Directory login provider.\n\n1. Install the [WindowsAzure.MobileServices.Backend.Security NuGet package](https://www.nuget.org/packages/WindowsAzure.MobileServices.Backend.Security).\n\n2. In Visual Studio expand App_Start and open WebApiConfig.cs. Add the following `using` statement at the top:\n\n        using Microsoft.WindowsAzure.Mobile.Service.Security.Providers;\n\n3. Also in WebApiConfig.cs, add the following code to the `Register` method, immediately after `options` is instantiated:\n\n        options.LoginProviders.Remove(typeof(AzureActiveDirectoryLoginProvider));\n        options.LoginProviders.Add(typeof(AzureActiveDirectoryExtendedLoginProvider));\n\n## <a name=\"permissions\"></a>Restrict permissions to authenticated users\n\n\n\nBy default, all requests to mobile service resources are restricted to clients that present the application key, which does not strictly secure access to resources. To secure your resources, you must restrict access to only authenticated clients.\n\n1. In Visual Studio, open your mobile service project, expand the Controllers folder, and open **TodoItemController.cs**. The **TodoItemController** class implements data access for the TodoItem table. Add the following `using` statement:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\n2. Apply the following _AuthorizeLevel_ attribute to the **TodoItemController** class.\n\n\t\t[AuthorizeLevel(AuthorizationLevel.User)]\n\n\tThis makes sure that all operations against the _TodoItem_ table require an authenticated user. You can also apply the *AuthorizeLevel* attribute at the method level.\n\n3. (Optional) If you wish to debug authentication locally, expand the `App_Start` folder, open **WebApiConfig.cs**, and add the following code to the **Register** method.  \n\n\t\tconfig.SetIsHosted(true);\n\n\tThis tells the local mobile service project to run as if it is being hosted in Azure, including honoring the *AuthorizeLevel* settings. Without this setting, all HTTP requests to localhost are permitted without authentication despite the *AuthorizeLevel* setting. When you enable self-hosted mode, you also need to set a value for the local application key.\n\n4. (Optional) In the web.config project file, set a string value for the `MS_ApplicationKey` app setting.\n\n\tThis is the password that you use (with no username) to test the API help pages when you run the service locally.  This string value is not used by the live site in Azure, and you do not need to use the actual application key; any valid string value will work.\n\n4. Republish your project.\n\nIn Xcode, open the project. Press the **Run** button to  start the app. Verify that an exception with a status code of 401 (Unauthorized) is raised after the app starts. This happens because the app attempts to access Mobile Services as an unauthenticated user, but the _TodoItem_ table now requires authentication.\n\n## <a name=\"add-authentication\"></a>Add authentication to app\n\n* Open **QSTodoListViewController.m** and add the following method. Change _facebook_ to _microsoftaccount_, _twitter_, _google_, or _windowsazureactivedirectory_ if you're not using Facebook as your identity provider.\n\n```\n        - (void) loginAndGetData\n        {\n            MSClient *client = self.todoService.client;\n            if (client.currentUser != nil) {\n                return;\n            }\n\n            [client loginWithProvider:@\"facebook\" controller:self animated:YES completion:^(MSUser *user, NSError *error) {\n                [self refresh];\n            }];\n        }\n```\n\n* Replace `[self refresh]` in `viewDidLoad` with the following:\n\n```\n        [self loginAndGetData];\n```\n\n* Press  **Run** to start the app, and then log in. When you are logged in, you should be able to view the Todo list and make updates.\n\n## <a name=\"store-authentication\"></a>Store authentication tokens in app\n\n\nThe previous example contacts both the identity provider and the mobile service every time the app starts. Instead, you can cache the authorization token and try to use it first.\n\n* The recommended way to encrypt and store authentication tokens on an iOS client is use the iOS Keychain. We'll use [SSKeychain](https://github.com/soffes/sskeychain) -- a simple wrapper around the iOS Keychain. Follow the instructions on the SSKeychain page and add it to your project. Verify that the **Enable Modules** setting is enabled in the project's **Build Settings** (section **Apple LLVM - Languages - Modules**.)\n\n* Open **QSTodoListViewController.m** and add the following code:\n\n```\n\t\t- (void) saveAuthInfo {\n\t\t\t\t[SSKeychain setPassword:self.todoService.client.currentUser.mobileServiceAuthenticationToken forService:@\"AzureMobileServiceTutorial\" account:self.todoService.client.currentUser.userId]\n\t\t}\n\n\n\t\t- (void)loadAuthInfo {\n\t\t\t\tNSString *userid = [[SSKeychain accountsForService:@\"AzureMobileServiceTutorial\"][0] valueForKey:@\"acct\"];\n\t\t    if (userid) {\n\t\t        NSLog(@\"userid: %@\", userid);\n\t\t        self.todoService.client.currentUser = [[MSUser alloc] initWithUserId:userid];\n\t\t         self.todoService.client.currentUser.mobileServiceAuthenticationToken = [SSKeychain passwordForService:@\"AzureMobileServiceTutorial\" account:userid];\n\n\t\t    }\n\t\t}\n```\n\n* In `loginAndGetData`, modify  `loginWithProvider:controller:animated:completion:`'s completion block. Add the following line right before `[self refresh]` to store the user ID and token properties:\n\n```\n\t\t\t\t[self saveAuthInfo];\n```\n\n* Let's load the user ID and token when the app starts. In the `viewDidLoad` in **QSTodoListViewController.m**, add this right after`self.todoService` is initialized.\n\n```\n\t\t\t\t[self loadAuthInfo];\n```\n\n## <a name=\"next-steps\"></a>Next steps\n\nIn the next tutorial, [Service-side authorization of Mobile Services users], you will user the user ID value to filter returned data.\n\n<!-- Anchors. -->\n[Register your app for authentication and configure Mobile Services]: #register\n[Restrict table permissions to authenticated users]: #permissions\n[Add authentication to the app]: #add-authentication\n[Next Steps]:#next-steps\n[Storing authentication tokens in your app]:#store-authentication\n\n<!-- URLs. -->\n[Service-side authorization of Mobile Services users]: mobile-services-dotnet-backend-service-side-authorization.md\n[Mobile Services Quick Start tutorial]: mobile-services-dotnet-backend-ios-get-started.md\n[Get started with authentication]: mobile-services-dotnet-backend-ios-get-started-users.md\n[Get started with push notifications]: mobile-services-dotnet-backend-ios-get-started-push.md\n[Authorize users with scripts]: mobile-services-dotnet-backend-service-side-authorization.md\n[Mobile Services .NET How-to Conceptual Reference]: https://azure.microsoft.com/develop/mobile/how-to-guides/work-with-net-client-library\n[Register your Windows Store app package for Microsoft authentication]: mobile-services-how-to-register-store-app-package-microsoft-authentication.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-ios-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Azure Mobile Services for iOS apps\"\n\tdescription=\"Follow this tutorial to get started using Azure Mobile Services for iOS development.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"ios\"\n\tauthors=\"krisragh\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh\"/>\n\n# <a name=\"getting-started\"> </a>Get started with Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis tutorial shows you how to add a cloud-based backend service to an iOS app using Azure Mobile Services. In this tutorial, you will create both a new mobile service and a simple _To do list_ app that stores app data in the new mobile service. The mobile service uses .NET and Visual Studio for server-side business logic. To create a mobile service with server-side business logic in JavaScript, see the [JavaScript backend version] of this topic.\n\n> [AZURE.NOTE] To complete this tutorial, you need an Azure account. If you don't have an account, you can sign up for an Azure trial and get [free mobile services that you can keep using even after your trial ends](https://azure.microsoft.com/pricing/details/mobile-services/).  For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=AE564AB28&amp;returnurl=http%3A%2F%2Fazure.microsoft.com%2Fdocumentation%2Farticles%2Fmobile-services-dotnet-backend-ios-get-started%2F).\n\n## <a name=\"create-new-service\"> </a>Create a new mobile service\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** page, select **Create a free 20 MB SQL Database**, select **.NET** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t> [AZURE.NOTE] As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n## Download the mobile service and app to your local computer\n\nNow that you have created the mobile service, download projects that you can run locally.\n\n1. Click the mobile service that you just created, then in the Quick Start tab, click **iOS** under **Choose a platform** and expand **Create a new iOS app**.\n\n2. On your Windows PC, click **Download** under **Download and publish your service to the cloud**. This downloads the Visual Studio project that implements your mobile service. Save the compressed project file to your local computer, and make a note of where you saved it.\n\n3. On your Mac, click **Download** under **Download and run your app**. This downloads the project for the sample _To do list_ application that is connected to your mobile service, along with the Mobile Services iOS SDK. Save the compressed project file to your local computer, and make a note of where you saved it.\n\n## Test the mobile service\n\n\n\nThe mobile service project lets you run your new mobile service locally. This makes it easy to debug your service code before you even publish it to Azure.\n\n1. On your Windows PC, download your personalized server project, extract it, and then open it in Visual Studio.\n\n2. Press the **F5** key to rebuild the project and start the mobile service locally. A web page is displayed after the mobile service starts successfully.\n\n## Publish your mobile service\n\n\n1. In Visual Studio, right-click the project, click **Publish** > **Microsoft Azure Mobile Services**. Instead of using Visual Studio, [you may also use Git](./\nmobile-services-dotnet-backend-store-code-source-control.md).\n\n2. Sign in with Azure credentials and select your service from **Existing Mobile Services**. Visual Studio downloads your publish settings directly from Azure. Finally, click **Publish**.\n\n\n## Run your new iOS app\n\n\n\n\nThe final stage of this tutorial is to build and run your new app.\n\n1. Browse to the location where you saved the compressed project files, expand the files on your computer, and open the project file using Xcode.\n\n2. Press the **Run** button to build the project and start the app in the iPhone emulator.\n\n3. In the app, type meaningful text, such as _Complete the tutorial_ and then click the plus (**+**) icon.\n\n   \t![](./media/mobile-services-ios-run-app/mobile-quickstart-startup-ios.png)\n\n   \tThis sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the TodoItem table. Items stored in the table are returned by the mobile service, and the data is displayed in the list.\n\n \t</div>\n\n\n## <a name=\"next-steps\"> </a>Next Steps\n\nThis shows how to run your new client app against the mobile service running in Azure. Before you can test the iOS app with the mobile service running on a local computer, you must configure the Web server and firewall to allow access from your iOS development computer. For more information, see [Configure the local web server to allow connections to a local mobile service](mobile-services-dotnet-backend-how-to-configure-iis-express.md).\n\nLearn how to perform additional important tasks in Mobile Services:\n\n* [Get started with offline data sync]\n  <br/>Learn how to use offline data sync to make your app responsive and robust.\n\n* [Add authentication to an existing app]\n  <br/>Learn how to authenticate users of your app with an identity provider.\n\n* [Add push notifications to an existing app]\n  <br/>Learn how to send a very basic push notification to your app.\n\n* [Troubleshoot Mobile Services .NET backend]\n  <br/> Learn how to diagnose and fix issues that can arise with a Mobile Services .NET backend.\n\n\n\n\n<!-- Anchors. -->\n[Getting started with Mobile Services]:#getting-started\n[Create a new mobile service]:#create-new-service\n[Define the mobile service instance]:#define-mobile-service-instance\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n[0]: ./media/mobile-services-dotnet-backend-ios-get-started/mobile-quickstart-completed-ios.png\n[1]: ./media/mobile-services-dotnet-backend-ios-get-started/mobile-quickstart-steps-vs.png\n\n[6]: ./media/mobile-services-dotnet-backend-ios-get-started/mobile-portal-quickstart-ios.png\n[7]: ./media/mobile-services-dotnet-backend-ios-get-started/mobile-quickstart-steps-ios.png\n[8]: ./media/mobile-services-dotnet-backend-ios-get-started/mobile-xcode-project.png\n\n[10]: ./media/mobile-services-dotnet-backend-ios-get-started/mobile-quickstart-startup-ios.png\n[11]: ./media/mobile-services-dotnet-backend-ios-get-started/mobile-data-tab.png\n[12]: ./media/mobile-services-dotnet-backend-ios-get-started/mobile-data-browse.png\n\n\n<!-- URLs. -->\n[Get started with offline data sync]: mobile-services-ios-get-started-offline-data.md\n[Add authentication to an existing app]: mobile-services-dotnet-backend-ios-get-started-users.md\n[Add push notifications to an existing app]: mobile-services-dotnet-backend-ios-get-started-push.md\n[Troubleshoot Mobile Services .NET backend]: mobile-services-dotnet-backend-how-to-troubleshoot.md\n[Mobile Services iOS SDK]: https://go.microsoft.com/fwLink/p/?LinkID=266533\n[XCode]: https://go.microsoft.com/fwLink/p/?LinkID=266532\n[JavaScript backend version]: mobile-services-ios-get-started.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-ios-push-notifications-app-users.md",
    "content": "<properties\n\tpageTitle=\"Send Push Notifications to Authenticated Users (.NET Backend)\"\n\tdescription=\"Learn how to send push notifications to specific\"\n\tservices=\"mobile-services,notification-hubs\"\n\tdocumentationCenter=\"ios\"\n\tauthors=\"krisragh\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh\"/>\n\n# Send push notifications to authenticated users\n> [AZURE.SELECTOR-LIST (Platform | Backend)]\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-push-notifications-app-users.md)\n- [(Windows 8.x Store C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-push-notifications-app-users.md)\n- [(Windows 8.x Store C# | JavaScript)](mobile-services-javascript-backend-windows-store-dotnet-push-notifications-app-users.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nIn this topic, you learn how to send push notifications to an authenticated user on iOS. Before starting this tutorial, complete [Get started with authentication] and [Get started with push notifications] first.\n\nIn this tutorial, you require users to authenticate first, register with the notification hub for push notifications, and update server scripts to send those notifications to only authenticated users.\n\n## <a name=\"register\"></a>Update service to require authentication to register\n\n\n1. In Solution Explorer in Visual Studio, expand the App_Start folder and open the WebApiConfig.cs project file.\n\n2. Add the following line of code to the Register method after the **ConfigOptions** definition:\n\n        options.PushAuthorization =\n            Microsoft.WindowsAzure.Mobile.Service.Security.AuthorizationLevel.User;\n\n\tThis enforces user authentication before registering for push notifications.\n\n2. Right-click the project, click **Add** then click **Class...**.\n\n3. Name the new empty class `PushRegistrationHandler` then click **Add**.\n\n4. At the top of the code page, add the following **using** statements:\n\n\t\tusing System.Threading.Tasks;\n\t\tusing System.Web.Http;\n\t\tusing System.Web.Http.Controllers;\n\t\tusing Microsoft.WindowsAzure.Mobile.Service;\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Notifications;\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\n5. Replace the existing **PushRegistrationHandler** class with the following code:\n\n\t    public class PushRegistrationHandler : INotificationHandler\n\t    {\n\t        public Task Register(ApiServices services, HttpRequestContext context,\n            NotificationRegistration registration)\n\t        {\n\t            try\n\t            {\n\t                // Perform a check here for user ID tags, which are not allowed.\n\t                if(!ValidateTags(registration))\n\t                {\n\t                    throw new InvalidOperationException(\n\t                        \"You cannot supply a tag that is a user ID.\");                    \n\t                }\n\n\t                // Get the logged-in user.\n\t                var currentUser = context.Principal as ServiceUser;\n\n\t                // Add a new tag that is the user ID.\n\t                registration.Tags.Add(currentUser.Id);\n\n\t                services.Log.Info(\"Registered tag for userId: \" + currentUser.Id);\n\t            }\n\t            catch(Exception ex)\n\t            {\n\t                services.Log.Error(ex.ToString());\n\t            }\n\t                return Task.FromResult(true);\n\t        }\n\n\t        private bool ValidateTags(NotificationRegistration registration)\n\t        {\n\t            // Create a regex to search for disallowed tags.\n\t            System.Text.RegularExpressions.Regex searchTerm =\n\t            new System.Text.RegularExpressions.Regex(@\"facebook:|google:|twitter:|microsoftaccount:\",\n\t                System.Text.RegularExpressions.RegexOptions.IgnoreCase);\n\n\t            foreach (string tag in registration.Tags)\n\t            {\n\t                if (searchTerm.IsMatch(tag))\n\t                {\n\t                    return false;\n\t                }\n\t            }\n\t            return true;\n\t        }\n\n\t        public Task Unregister(ApiServices services, HttpRequestContext context,\n\t            string deviceId)\n\t        {\n\t            // This is where you can hook into registration deletion.\n\t            return Task.FromResult(true);\n\t        }\n\t    }\n\n\tThe **Register** method is called during registration. This lets you add a tag to the registration that is the ID of the logged-in user. The supplied tags are validated to prevent a user from registering for another user's ID. When a notification is sent to this user, it is received on this and any other device registered by the user.\n\n6. Expand the Controllers folder, open the TodoItemController.cs project file, locate the **PostTodoItem** method and replace the line of code that calls **SendAsync** with the following code:\n\n        // Get the logged-in user.\n\t\tvar currentUser = this.User as ServiceUser;\n\n\t\t// Use a tag to only send the notification to the logged-in user.\n        var result = await Services.Push.SendAsync(message, currentUser.Id);\n\n7. Republish the mobile service project.\n\nNow, the service uses the user ID tag to send a push notification (with the text of the inserted item) to all registrations created by the logged-in user.\n\n\n## <a name=\"update-app\"></a>Update app to sign in before registration\n\n\nNext, you need to change the way that push notifications are registered so that a user is authenticated before registration is attempted.\n\n1. In **QSAppDelegate.m**, remove the implementation of **didFinishLaunchingWithOptions** altogether.\n\n2. Open **QSTodoListViewController.m** and add the following code to the end of the **viewDidLoad** method:\n\n```\n// Register for remote notifications\n[[UIApplication sharedApplication] registerForRemoteNotificationTypes:\nUIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];\n```\n\n## <a name=\"test\"></a>Test app\n\n\n1. Press **Run** to start the app on a physical iOS device. In the app, add a new item, such as _A new Mobile Services task_, to the todo list.\n\n2. Verify that a notification is received. Additionally -- and optionally -- repeat the above steps on a different physical iOS device, once using the same log-in account and another time using a different log-in account. Verify that notifications are received only by devices authenticating with the same user account.\n\n<!-- Anchors. -->\n[Updating the service to require authentication for registration]: #register\n[Updating the app to log in before registration]: #update-app\n[Testing the app]: #test\n[Next Steps]:#next-steps\n\n\n<!-- URLs. -->\n[Get started with authentication]: mobile-services-dotnet-backend-ios-get-started-users.md\n[Get started with push notifications]: mobile-services-dotnet-backend-ios-get-started-push.md\n[Mobile Services .NET How-to Conceptual Reference]: https://azure.microsoft.com/develop/mobile/how-to-guides/work-with-net-client-library\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-schedule-recurring-tasks.md",
    "content": "<properties\n\tpageTitle=\"Schedule backend tasks in a .NET backend mobile service | Microsoft Azure\"\n\tdescription=\"Use the scheduler in Azure Mobile Services to define .NET backend jobs that run on a schedule.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-multiple\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Schedule recurring jobs in Mobile Services\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR]\n- [.NET backend](mobile-services-dotnet-backend-schedule-recurring-tasks.md)\n- [Javascript backend](mobile-services-schedule-recurring-tasks.md)\n\nThis topic shows you how to use the job scheduler functionality in the Azure classic portal to define server script code that is executed based on a schedule that you define. In this case, the script periodically check with a remote service, in this case Twitter, and stores the results in a new table. Some other periodic tasks that can be scheduled include:\n\n+ Archiving old or duplicate data records.\n+ Requesting and storing external data, such as tweets, RSS entries, and location information.\n+ Processing or resizing stored images.\n\nThis tutorial walks you through how to use the job scheduler to create a scheduled job that requests tweet data from Twitter and stores the tweets in a new Updates table.\n\n>[AZURE.NOTE]This tutorial uses the third-party LINQ to Twitter library to simplify OAuth 2.0 access to Twitter v1.1. APIs. You must download and install the LINQ to Twitter NuGet package to complete this tutorial. For more information, see the [LINQ to Twitter CodePlex project].\n\n## <a name=\"get-oauth-credentials\"></a>Register for access to Twitter v1.1 APIs and store credentials\n\n\n\nThe new Twitter v1.1 APIs requires your app to authenticate before accessing resources. First, you need to get the credentials needed to request access by using OAuth 2.0. Then, you will store them securely in the app settings for your mobile service.\n\n1. If you haven't already done so, complete the steps in the topic [Register your apps for Twitter login with Mobile Services](./\nmobile-services-how-to-register-twitter-authentication.md). \n  \n  \tTwitter generates the credentials needed to enable you to access Twitter v1.1 APIs. You can get these credentials from the Twitter Developers website. \n\n2. Navigate to the [Twitter Developers](http://go.microsoft.com/fwlink/p/?LinkId=268300) website, sign-in with your Twitter account credentials and select your Twitter app.\n\n3. In the **Keys and Access Tokens** tab for the app, make a note of the following values:\n\n\t+ **Consumer key**\n\t+ **Consumer secret**\n\t+ **Access token**\n\t+ **Access token secret**\n\n4. Log on to the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, and then click your mobile service.\n\n5. Click the **Identity** tab, enter the **Consumer key** and **Consumer secret** values obtained from Twitter, and click **Save**. \n\n\t![](./media/mobile-services-register-twitter-access/mobile-identity-tab-twitter-only.png)\n\n2. Click the **Configure** tab, scroll down to **App settings** and enter a **Name** and **Value** pair for each of the following that you obtained from the Twitter site, then click **Save**.\n\n\t+ `TWITTER_ACCESS_TOKEN`\n\t+ `TWITTER_ACCESS_TOKEN_SECRET`\n\n\t![](./media/mobile-services-register-twitter-access/mobile-schedule-job-app-settings.png)\n\n\tThis stores the Twitter access token in app settings. Like the consumer credentials on the **Identity** tab, the access credentials are also stored encrypted in app settings, and you can access them in your server scripts without hard-coding them in the script file. For more information, see [App settings].\n\n<!-- URLs. -->\n[Mobile Services server script reference]: http://go.microsoft.com/fwlink/?LinkId=262293\n[Register your apps for Twitter login with Mobile Services]: ./\nmobile-services-how-to-register-twitter-authentication.md\n[Twitter Developers]: http://go.microsoft.com/fwlink/p/?LinkId=268300\n[App settings]: http://msdn.microsoft.com/library/azure/b6bb7d2d-35ae-47eb-a03f-6ee393e170f7\n\n&nbsp;&nbsp;7. In Solution Explorer in Visual Studio, open the web.config file for the mobile service project, locate the `MS_TwitterConsumerKey` and `MS_TwitterConsumerSecret` app settings and replace the values of these keys with Twitter consumer key and consumer secret values that you set in the portal.\n\n&nbsp;&nbsp;8. In the same section, add the following new app settings, replacing the placeholders with the Twitter access token and access token secret values that you set as app settings in the portal:\n\n\t<add key=\"TWITTER_ACCESS_TOKEN\" value=\"**your_access_token**\" />\n\t<add key=\"TWITTER_ACCESS_TOKEN_SECRET\" value=\"**your_access_token_secret**\" />\n\nThe mobile service uses these stored settings when it runs on the local computer, which lets you test the scheduled job before you publish it. When running in Azure, the mobile service instead uses values set in the portal and ignores these project settings.\n\n## <a name=\"install-linq2twitter\"></a>Download and install the LINQ to Twitter library\n\n1. In **Solution Explorer** in Visual Studio, right-click the project name, and then select **Manage NuGet Packages**.\n\n2. In the left pane, select the **Online** category, search for `linq2twitter`, click **Install** on the **linqtotwitter** package, then read and accept the license agreements.\n\n  \t![][1]\n\n  \tThis adds the Linq to Twitter library to your mobile service project.\n\nNext, you need to create a new table in which to store tweets.\n\n## <a name=\"create-table\"></a>Create the new Updates table\n\n1. In the Solution Explorer in Visual Studio, right-click the DataObjects folder, expand **Add**, click **Class**,   type `Updates` for **Name**, then click **Add**.\n\n\tThis creates a new project file for the Updates class.\n\n2. Right-click **References** > **Add Reference...** > **Framework** under **Assemblies**, then check **System.ComponentModel.DataAnnotations** and click **OK**.\n\n\t![][7]\n\n\tThis adds a new assembly reference.\n\n2. In this new class, add the following **using** statements:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service;\n\t\tusing System.ComponentModel.DataAnnotations;\n\n3. Replace the **Updates** class definition with the following code:\n\n\t\tpublic class Updates\n\t    {\n\t        [Key]\n\t        public int UpdateId { get; set; }\n\t        public long TweetId { get; set; }\n\t        public string Text { get; set; }\n\t        public string Author { get; set; }\n\t        public DateTime Date { get; set; }\n    \t}\n\n4. Expand the Models folder, open the data model context file (named *service_name*Context.cs) and add the following property that returns a typed **DbSet**:\n\n\t\tpublic DbSet<Updates> Updates { get; set; }\n\n\tThe Updates table, which is created in the database when the DbSet is first accessed, is used by the service to store tweet data.\n\n\t>[AZURE.NOTE] When using the default database initializer, Entity Framework will drop and recreate the database whenever it detects a data model change in the Code First model definition. To make this data model change and maintain existing data in the database, you must use Code First Migrations. The default initializer cannot be used against a SQL Database in Azure. For more information, see [How to Use Code First Migrations to Update the Data Model](mobile-services-dotnet-backend-use-code-first-migrations.md).\n\nNext, you create the scheduled job that accesses Twitter and stores tweet data in the new Updates table.\n\n## <a name=\"add-job\"></a>Create a new scheduled job\n\n1. Expand the ScheduledJobs folder and open the SampleJob.cs project file.\n\n\tThis class, which inherits from **ScheduledJob**, represents a job that can be scheduled, in the Azure classic portal, to run on a fixed schedule or on demand.\n\n2. Replace the contents of SampleJob.cs with the following code:\n\n\t\tusing System;\n\t\tusing System.Linq;\n\t\tusing System.Threading;\n\t\tusing System.Threading.Tasks;\n\t\tusing System.Web.Http;\n\t\tusing Microsoft.WindowsAzure.Mobile.Service;\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.ScheduledJobs;\n\t\tusing LinqToTwitter;\n\t\tusing todolistService.Models;\n\t\tusing todolistService.DataObjects;\n\n\t\tnamespace todolistService\n\t\t{\n\t\t    // A simple scheduled job which can be invoked manually by submitting an HTTP\n\t\t    // POST request to the path \"/jobs/sample\".\n\t\t    public class SampleJob : ScheduledJob\n\t\t    {\n\t\t        private todolistContext context;\n\t\t        private string accessToken;\n\t\t        private string accessTokenSecret;\n\n\t\t        protected override void Initialize(ScheduledJobDescriptor scheduledJobDescriptor,\n\t\t\t\t\tCancellationToken cancellationToken)\n\t\t        {\n\t\t            base.Initialize(scheduledJobDescriptor, cancellationToken);\n\n\t\t            // Create a new context with the supplied schema name.\n\t\t            context = new todolistContext();\n\t\t        }\n\n\t\t        public async override Task ExecuteAsync()\n\t\t        {\n\t\t            // Try to get the stored Twitter access token from app settings.\n\t\t            if (!(Services.Settings.TryGetValue(\"TWITTER_ACCESS_TOKEN\", out accessToken) |\n\t\t            Services.Settings.TryGetValue(\"TWITTER_ACCESS_TOKEN_SECRET\", out accessTokenSecret)))\n\t\t            {\n\t\t                Services.Log.Error(\"Could not retrieve Twitter access credentials.\");\n\t\t            }\n\n\t\t            // Create a new authorizer to access Twitter v1.1 APIs\n\t\t            // using single-user OAUth 2.0 credentials.\n\t\t            MvcAuthorizer auth = new MvcAuthorizer();\n\t\t            SingleUserInMemoryCredentialStore store =\n\t\t                new SingleUserInMemoryCredentialStore()\n\t\t            {\n\t\t                ConsumerKey = Services.Settings.TwitterConsumerKey,\n\t\t                ConsumerSecret = Services.Settings.TwitterConsumerSecret,\n\t\t                OAuthToken = accessToken,\n\t\t                OAuthTokenSecret = accessTokenSecret\n\t\t            };\n\n\t\t            // Set the credentials for the authorizer.\n\t\t            auth.CredentialStore = store;\n\n\t\t            // Create a new LINQ to Twitter context.\n\t\t            TwitterContext twitter = new TwitterContext(auth);\n\n\t\t            // Get the ID of the most recent stored tweet.\n\t\t            long lastTweetId = 0;\n\t\t            if (context.Updates.Count() > 0)\n\t\t            {\n\t\t                lastTweetId = (from u in context.Updates\n\t\t                               orderby u.TweetId descending\n\t\t                               select u).Take(1).SingleOrDefault()\n\t\t                                            .TweetId;\n\t\t            }\n\n\t\t            // Execute a search that returns a filtered result.\n\t\t            var response = await (from s in twitter.Search\n\t\t                                  where s.Type == SearchType.Search\n\t\t                                  && s.Query == \"%23mobileservices\"\n\t\t                                  && s.SinceID == Convert.ToUInt64(lastTweetId + 1)\n\t\t                                  && s.ResultType == ResultType.Recent\n\t\t                                  select s).SingleOrDefaultAsync();\n\n\t\t            // Remove retweets and replies and log the number of tweets.\n\t\t            var filteredTweets = response.Statuses\n\t\t                .Where(t => !t.Text.StartsWith(\"RT\") && t.InReplyToUserID == 0);\n\t\t            Services.Log.Info(\"Fetched \" + filteredTweets.Count()\n\t\t                + \" new tweets from Twitter.\");\n\n\t\t            // Store new tweets in the Updates table.\n\t\t            foreach (Status tweet in filteredTweets)\n\t\t            {\n\t\t                Updates newTweet =\n\t\t                    new Updates\n\t\t                    {\n\t\t                        TweetId = Convert.ToInt64(tweet.StatusID),\n\t\t                        Text = tweet.Text,\n\t\t                        Author = tweet.User.Name,\n\t\t                        Date = tweet.CreatedAt\n\t\t                    };\n\n\t\t                context.Updates.Add(newTweet);\n\t\t            }\n\n\t\t            await context.SaveChangesAsync();\n\t\t        }\n\t\t        protected override void Dispose(bool disposing)\n\t\t        {\n\t\t            base.Dispose(disposing);\n\t\t            if (disposing)\n\t\t            {\n\t\t                context.Dispose();\n\t\t            }\n\t\t        }\n\t\t    }\n\t\t}\n\n\tIn the above code, you must replace the strings _todolistService_ and _todolistContext_ with the namespace and DbContext of your downloaded project, which are *mobile&#95;service&#95;name*Service and *mobile&#95;service&#95;name*Context, respective.\n\n\tIn the above code, the **ExecuteAsync** override method calls the Twitter query API using stored credentials to request recent tweets that contain the hashtag `#mobileservices`. Duplicate tweets and replies are removed from the results before they are stored in the table.\n\n## <a name=\"run-job-locally\"></a>Test the scheduled job locally\n\nSchedule jobs can be tested locally before being published to Azure and registered in the portal.\n\n1. In Visual Studio, with the mobile service project set as the startup project, press F5.\n\n\tThis starts the mobile service project and displays a new browser window with the welcome page.\n\n2. Click **try it out**, then click **POST jobs/{jobName}**.\n\n\t![][8]\n\n4. Click **try this out**, type `Sample` as the **{jobName}** parameter value, then click **Send**.\n\n\t![][9]\n\n\tThis sends a new POST request to the Sample job endpoint. In the local service, the **ExecuteAsync** method is started. You can set a break point in this method to debug the code.\n\n3. In Server Explorer, expand **Data Connections**, **MSTableConnectionString**, and **tables**; right-click **Updates** and click **Show Table Data**.\n\n\tThe new tweets are entered as rows in the data table.\n\n## <a name=\"register-job\"></a>Publish the service and register the new job\n\nThe job must be registered in the **Scheduler** tab so that Mobile Services can run it on the schedule that you define.\n\n3. Republish the mobile service project to Azure.\n\n4. In the [Azure classic portal], click Mobile Services, and then click your app.\n\n2. Click the **Scheduler** tab, then click **+Create**.\n\n    >[AZURE.NOTE]When you run your mobile service in <em>Free</em> tier, you are only able to run one scheduled job at a time. In paid tiers, you can run up to ten scheduled jobs at a time.\n\n3. In the scheduler dialog, enter _Sample_ for the **Job Name**, set the schedule interval and units, then click the check button.\n\n   \t![][4]\n\n   \tThis creates a new job named **Sample**.\n\n4. Click the new job you just created, then click **Run Once** to test the script.\n\n   \tThis executes the job while it remains disabled in the scheduler. From this page, you can enable the job and change its schedule at any time.\n\n\t>[AZURE.NOTE]A POST request can still be used to start the scheduled job. However, the authorization defaults to user, which means that the request must include the application key in the header.\n\n4. (Optional) In the [Azure classic portal], click manage for the database associated with your mobile service.\n\n    ![][6]\n\n5. In the Azure classic portal, execute a query to view the changes made by the app. Your query will be similar to the following query but use your mobile service name as schema name instead of `todolist`.\n\n        SELECT * FROM [todolist].[Updates]\n\nCongratulations, you have successfully created a new scheduled job in your mobile service. This job will be executed as scheduled until you disable or modify it.\n\n<!-- Anchors. -->\n[Register for Twitter access and store credentials]: #get-oauth-credentials\n[Download and install the LINQ to Twitter library]: #install-linq2twitter\n[Create the new Updates table]: #create-table\n[Create a new scheduled job]: #add-job\n[Test the scheduled job locally]: #run-job-locally\n[Publish the service and register the job]: #register-job\n[Next steps]: #next-steps\n\n<!-- Images. -->\n[1]: ./media/mobile-services-dotnet-backend-schedule-recurring-tasks/add-linq2twitter-nuget-package.png\n[2]: ./media/mobile-services-dotnet-backend-schedule-recurring-tasks/mobile-services-selection.png\n[3]: ./media/mobile-services-dotnet-backend-schedule-recurring-tasks/mobile-schedule-new-job-cli.png\n[4]: ./media/mobile-services-dotnet-backend-schedule-recurring-tasks/create-new-job.png\n[5]: ./media/mobile-services-dotnet-backend-schedule-recurring-tasks/sample-job-run-once.png\n[6]: ./media/mobile-services-dotnet-backend-schedule-recurring-tasks/manage-sql-azure-database.png\n[7]: ./media/mobile-services-dotnet-backend-schedule-recurring-tasks/add-component-model-reference.png\n[8]: ./media/mobile-services-dotnet-backend-schedule-recurring-tasks/mobile-service-start-page.png\n[9]: ./media/mobile-services-dotnet-backend-schedule-recurring-tasks/mobile-service-try-this-out.png\n\n<!-- URLs. -->\n[Azure classic portal]: https://manage.windowsazure.com/\n[Register your apps for Twitter login with Mobile Services]: mobile-services-how-to-register-twitter-authentication.md\n[Twitter Developers]: http://go.microsoft.com/fwlink/p/?LinkId=268300\n[App settings]: http://msdn.microsoft.com/library/windowsazure/b6bb7d2d-35ae-47eb-a03f-6ee393e170f7\n[LINQ to Twitter CodePlex project]: http://linqtotwitter.codeplex.com/"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-service-side-authorization.md",
    "content": "<properties\n\tpageTitle=\"Service-side authorization of users in a .NET backend mobile service | Microsoft Azure\"\n\tdescription=\"Learn how to restrict access for authorize users in a .NET backend mobile service\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"krisragh\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-multiple\"\n\tms.topic=\"article\"\n\tms.devlang=\"dotnet\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh\"/>\n\n# Service-side authorization of users in Mobile Services\n> [AZURE.SELECTOR]\n- [.NET backend](mobile-services-dotnet-backend-service-side-authorization.md)\n- [Javascript backend](mobile-services-javascript-backend-service-side-authorization.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n\nThis topic shows you how to use server-side logic to authorize users.  In this tutorial, you modify table controllers, filter queries based on user IDs, and give users access to only their own data. Filtering a user's query results by the user ID is the most basic form of authorization. Depending on your specific scenario, you might also want to create Users or Roles tables to track more detailed user authorization information, such as which endpoints a given user is permitted to access.\n\nThis tutorial is based on the Mobile Services Quick Start and builds on the [Add Authentication to Existing Mobile Services App] tutorial. Please complete [Add Authentication to Existing Mobile Services App] first.\n\n## <a name=\"register-scripts\"></a>Modify data access methods\n\n1. In Visual Studio, open your mobile project, expand the DataObjects folder, and open **TodoItem.cs**. The **TodoItem** class defines the data object, and you need to add a **UserId** property to use for filtering. Add the following new UserId property to the **TodoItem** class:\n\n\t\tpublic string UserId { get; set; }\n\n\t>[AZURE.NOTE] To make this data model change and maintain existing data in the database, you must use [Code First Migrations](mobile-services-dotnet-backend-how-to-use-code-first-migrations.md).\n\n2. In Visual Studio, expand the Controllers folder,  open **TodoItemController.cs** and add the following using statement:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\n3. Locate the **PostTodoItem** method and add the following code at the beginning of the method.\n\n\t\t// Get the logged in user\n\t\tvar currentUser = User as ServiceUser;\n\n\t\t// Set the user ID on the item\n\t\titem.UserId = currentUser.Id;\n\n\tThis code adds the user ID of the authenticated user to the item, before it is inserted into the TodoItem table.\n\n3. Locate the **GetAllTodoItems** method and replace the existing **return** statement with the following line of code:\n\n\t\t// Get the logged in user\n\t\tvar currentUser = User as ServiceUser;\n\n\t\treturn Query().Where(todo => todo.UserId == currentUser.Id);\n\n\tThis query filters the returned TodoItem objects so that each user only receives the items that they inserted.\n\n4. Republish the mobile service project to Azure.\n\n\n## <a name=\"test-app\"></a>Test the app\n\n1. Notice that when you now run your client-side app, although there are items already in the database from previous tutorials, no items are returned. This happens because previous items were inserted without the user ID column and now have null values.\n\n2. If you have additional login accounts, verify that users can only see their own data by closing and deleting the app and running it again. When the login credentials dialog is displayed, enter a different login and verify that the items entered under the previous login are not displayed.\n\n\n\n<!-- Anchors. -->\n[Register server scripts]: #register-scripts\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n\n[3]: ./media/mobile-services-dotnet-backend-ios-authorize-users-in-scripts/mobile-quickstart-startup-ios.png\n\n<!-- URLs. -->\n[Add Authentication to Existing Mobile Services App]: mobile-services-dotnet-backend-ios-get-started-users.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-store-code-source-control.md",
    "content": "<properties\n\tpageTitle=\"Store you .NET backend project code in source control | Azure Mobile Services\"\n\tdescription=\"Learn how to store your .NET backend project in and publish from a local Git repo on your computer.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Store your mobile service project code in source control\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR]\n- [.NET backend](mobile-services-dotnet-backend-store-code-source-control.md)\n- [Javascript backend](mobile-services-store-scripts-source-control.md)\n\nThis topic shows you how to use the source control provided by Azure Mobile Services to store your .NET backend service project. Your project can be published by simply uploading from your local Git repository to your production mobile service.\n\nTo complete this tutorial, you must have already created a mobile service by completing either the [Get started with Mobile Services] tutorial.\n\n## <a name=\"enable-source-control\"></a>Enable source control in your mobile service\n\nTo be able to store app data in the new mobile service, you must first create a new table in the associated SQL Database instance.\n\n1. Log on to the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, click your mobile service, then click the **Dashboard** tab.\n\n2. (Optional) If you have already set the Mobile Services or Websites source control credentials for your Azure subscription, then you can skip down to step 4. Otherwise, click **Set up source control** under **Quick glance** and click **Yes** to confirm.\n\n\t![Set up source control](./media/mobile-services-enable-source-control/mobile-setup-source-control.png)\n\n3. Supply a **User name**, **New password**, confirm the password, then click the check button. \n\n\tThe Git repository is created in your mobile service. Make a note of the credentials you just supplied; you will use them to access this and other Mobile Services repositories in your subscription.\n\n4. Click the **Configure** tab and notice the **Source control** fields.\n\n\t![Configure source control](./media/mobile-services-enable-source-control/mobile-source-control-configure.png)\n\n\tThe URL of the Git repository is displayed. You will use this URL to clone the repository to your local computer.\n\nWith source control enabled in your mobile service, you can use Git to clone the repository to your local computer.\n \n\n## <a name=\"clone-repo\"></a>Install Git and create the local repository\n\n1. Install Git on your local computer.\n\n\tThe steps required to install Git vary between operating systems. See [Installing Git] for operating system specific distributions and installation guidance.\n\n\t> [AZURE.NOTE]\n\t> On some operating systems, both a command-line and GUI version of Git are available. The instructions provided in this article use the command-line version.\n\n2. Open a command-line, such as **GitBash** (Windows) or **Bash** (Unix Shell). On OS X systems you can access the command-line through the **Terminal** application.\n\n3. From the command line, change to the directory where you will store your scripts. For example, `cd SourceControl`.\n\n4. Use the following command to create a local copy of your new Git repository, replacing `<your_git_URL>` with the URL of the Git repository for your mobile service:\n\n\t\tgit clone <your_git_URL>\n\n5. When prompted, type in the user name and password that you set when you enabled source control in your mobile service. After successful authentication, you will see a series of responses like this:\n\n\t\tremote: Counting objects: 8, done.\n\t\tremote: Compressing objects: 100% (4/4), done.\n\t\tremote: Total 8 (delta 1), reused 0 (delta 0)\n\t\tUnpacking objects: 100% (8/8), done.\n\n6. Browse to the directory from which you ran the `git clone` command, and notice that a new directory is created with the name of the mobile service. For a .NET backend mobile service, the git repository is initial empty.\n\nNow that you have created your local repository, you can publish your .NET backend service project from this repository.\n\n## <a name=\"deploy-scripts\"></a>Publish your project by using Git\n\n1. Create a new .NET backend mobile service project in Visual Studio 2013, or move an existing project into your new local repository.\n\n\tFor a quick test, download and save the Mobile Services quickstart project to this folder.\n\n2. Remove any NuGet package folders, leaving the packages.config file.\n\n\tMobile Services will automatically restore your NuGet packages based on the packages.confign file. You can also define a .gitignore file to prevent the package directories from being added.\n\n3. In the Git command prompt, type the following command to start tracking the new script file:\n\n\t\t$ git add .\n\n4. Type the following command to commit changes:\n\n\t\t$ git commit -m \"adding the .NET backend service project\"\n\n5. Type the following command to upload the changes to the remote repository, and supply your credentials:\n\n\t\t$ git push origin master\n\n\tYou should see a series of commands that indicates that the project is deployed to Mobile Services, packages are added, and the service is restarted.\n\n6. Browse to the URL of your .NET backend mobile service, and you should see the following:\n\n\t![Mobile Services startup page](./media/mobile-services-dotnet-backend-store-code-source-control/mobile-service-startup.png)\n\nNow, your mobile service project is maintained in source control, and you can publish service updates by simply pushing updates from your local repository. For information about making data model changes in a .NET backend mobile service that uses a SQL Database, see [How to make data model changes to a .NET backend mobile service].\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[Git website]: http://git-scm.com\n[Source control]: http://msdn.microsoft.com/library/windowsazure/c25aaede-c1f0-4004-8b78-113708761643\n[Installing Git]: http://git-scm.com/book/en/Getting-Started-Installing-Git\n[Get started with Mobile Services]: mobile-services-dotnet-backend-ios-get-started.md\n[How to make data model changes to a .NET backend mobile service]: mobile-services-dotnet-backend-how-to-use-code-first-migrations.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-store-data-table-storage.md",
    "content": "<properties\n\tpageTitle=\"Build a .NET backend mobile service that uses Table storage | Azure Mobile Services\"\n\tdescription=\"Learn how to use Azure Table storage with your .NET backend mobile service.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Build a .NET backend mobile service that uses Table storage\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows you how to use a non-relational data store for your .NET backend mobile service. In this tutorial, you will modify the Azure Mobile Services quickstart project to use Azure Table storage instead of the default Azure SQL Database data store.\n\nThe tutorial requires completion of the [Get started with Mobile Services] tutorial. You will also need an Azure storage account.\n\n## Configure Azure Table storage in your .NET backend mobile service\n\nFirst, you need to configure your mobile service and .NET backend code project to connect to Azure storage.\n\n1. In **Solution Explorer** in Visual Studio, right-click the .NET backend project, and then select **Manage NuGet Packages**.\n\n2. In the left pane, select the **Online** category, select **Stabile Only**, search for **MobileServices**, click **Install** on the **Microsoft Azure Mobile Services .NET Backend Azure Storage Extension** package, then accept the license agreements.\n\n  \t![](./media/mobile-services-dotnet-backend-store-data-table-storage/mobile-add-storage-nuget-package-dotnet.png)\n\n  \tThis adds support for Azure storage services to the .NET backend mobile service project.\n\n3. If you haven't yet created your storage account, see [How To Create a Storage Account](https://azure.microsoft.com/en-us/documentation/articles/storage-create-storage-account/).\n\n4. In the [Azure classic portal], click **Storage**, click the storage account, then click **Manage Keys**.\n\n5. Make a note of the **Storage Account Name** and **Access Key**.\n\n6. In your mobile service, click the **Configure** tab, scroll down to **Connection strings** and enter a new connection string with a **Name** of `StorageConnectionString` and a **Value** that is your storage account connection string in the following format.\n\n\t\tDefaultEndpointsProtocol=https;AccountName=<ACCOUNT_NAME>;AccountKey=<ACCESS_KEY>;\n\n\t![](./media/mobile-services-dotnet-backend-store-data-table-storage/mobile-blob-storage-app-settings.png)\n\n7. In the above string, replace the values of `<ACCOUNT_NAME>` and `<ACCESS_KEY>` with the values from the portal, then click **Save**.\n\n\tThe storage account connection string is stored encrypted in app settings. You can access this string in any table controller at runtime.\n\n8. In Solution Explorer in Visual Studio, open the Web.config file for the mobile service project and add the following new connection string:\n\n\t\t<add name=\"StorageConnectionString\" connectionString=\"<STORAGE_CONNECTION_STRING>\" />\n\n9. Replace the `<STORAGE_CONNECTION_STRING>` placeholder with the connection string from step 6.\n\n\tThe mobile service uses this connection string when it runs on your local computer, which lets you test the code before you publish it. When running in Azure, the mobile service instead uses the connection string value set in the portal and ignores the connection string in the project.\n\n## <a name=\"modify-service\"></a>Modify data types and table controllers\n\nBecause the TodoList quickstart project is designed to work with a SQL Database using Entity Framework, you need to make some updates in the project to work with Table storage.\n\n1. Modify the **TodoItem** data type to derive from **StorageData** instead of **EntityData**, as follows.\n\n\t    public class TodoItem : StorageData\n\t    {\n\t        public string Text { get; set; }\n\t        public bool Complete { get; set; }\n\t    }\n\n\t>[AZURE.NOTE]The **StorageData** type has an Id property that requires a compound key that is a string in the format *partitionId*,*rowValue*.\n\n2. In **TodoItemController**, add the following using statement.\n\n\t\tusing System.Web.Http.OData.Query;\n\t\tusing System.Collections.Generic;\n\n3. Replace the **Initialize** method of the **TodoItemController** with the following.\n\n        protected override void Initialize(HttpControllerContext controllerContext)\n        {\n            base.Initialize(controllerContext);\n\n            // Create a new Azure Storage domain manager using the stored\n            // connection string and the name of the table exposed by the controller.\n            string connectionStringName = \"StorageConnectionString\";\n            var tableName = controllerContext.ControllerDescriptor.ControllerName.ToLowerInvariant();\n            DomainManager = new StorageDomainManager<TodoItem>(connectionStringName,\n                tableName, Request, Services);\n        }\n\n\tThis create a new storage domain manager for the requested controller using the storage account connection string.\n\n3. Replace the existing **GetAllTodoItems** method with the following code.\n\n\t\tpublic Task<IEnumerable<TodoItem>> GetAllTodoItems(ODataQueryOptions options)\n        {\n            // Call QueryAsync, passing the supplied query options.\n            return DomainManager.QueryAsync(options);\n        }\n\n\tUnlike a SQL Database, this version doesn't return IQueryable<TEntity>, so the result can be bound to but not futher composed in a query.\n\n## Update the client app\n\nYou need to make one change on the client side to make the quickstart app work with the .NET backend using Table storage. This is due to the compound key expected by the table storage provider.\n\n1. Open the client code file that contains the data access code and find the method where the insert operation performed.\n\n2. Update the TodoItem instance being added to explicitly set the Id field in the string format `<partitionID>,<rowValue>`.\n\n\tThis is an example of how this ID might be set in a C# app, where the partition part is fixed and the row part is GUID-based.\n\n\t\t todoItem.Id = string.Format(\"partition,{0}\", Guid.NewGuid());\n\nYou are now ready to test the app.\n\n## <a name=\"test-application\"></a>Test the application\n\n1. (Optional) Republish your mobile service .NET backend project.\n\n\tYou can also test your mobile service locally before you publish the .NET backend project to Azure. Whether you test locally or in Azure, the mobile service will be using the Azure Table storage.\n\n4. Run the quickstart client app connected to your mobile service.\n\n\tNote that you do not see items that you previously added using the quickstart tutorial. This is because the Table store is currently empty.\n\n5. Add new items to generate database changes.\n\n\tThe app and mobile service should behave as before, except now your data is being stored in your non-relational store instead of in the SQL Database.\n\n## Next Steps\n\nNow that you have seen how easy it is to use Table storage with .NET backend, consider exploring some other backend storage options:\n\n+ [Connect to an on-premises SQL Server using Hybrid Connections](mobile-services-dotnet-backend-hybrid-connections-get-started.md)</br>Hybrid Connections lets your mobile service securely connect to your on-premises assets. In this way, you can make your on-premises data accessible to your mobile clients by using Azure. Supported assets include any resource that runs on a static TCP port, including Microsoft SQL Server, MySQL, HTTP Web APIs, and most custom web services.\n\n+ [Upload images to Azure Storage using Mobile Services](mobile-services-dotnet-backend-windows-universal-dotnet-upload-data-blob-storage.md)</br>Shows you how to extend the TodoList sample project to let you upload images from your app to Azure Blob storage.\n\n<!-- Anchors. -->\n[Create a non-relational store]: #create-store\n[Modify data and controllers]: #modify-service\n[Test the application]: #test-application\n\n\n<!-- Images. -->\n\n\n<!-- URLs. -->\n[Get started with Mobile Services]: mobile-services-dotnet-backend-windows-store-dotnet-get-started.md\n[Azure classic portal]: https://manage.windowsazure.com/\n[What is the Table Service]: https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-tables/#what-is\n[MongoLab Add-on Page]: /gallery/store/mongolab/mongolab\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-use-existing-sql-database.md",
    "content": "<properties\n\tpageTitle=\"Build a service using an existing SQL database with the Mobile Services .NET backend | Microsoft Azure\"\n\tdescription=\"Learn how to use an existing cloud or on-premises SQL database with your .NET based mobile service\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"mollybos\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n\n# Build a service using an existing SQL database with the Mobile Services .NET backend\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\nThe Mobile Services .NET backend makes it easy to take advantage of existing assets in building a mobile service. One particularly interesting scenario is using an existing SQL database (either on-premises or in the cloud), that may already be used by other applications, to make existing data available to mobile clients. In this case it's a requirement that database model (or *schema*) remain unchanged, in order for existing solutions to continue working.\n\n<a name=\"ExistingModel\"></a>\n## Exploring the existing database model\n\nFor this tutorial we will use the database that was created with your mobile service, but we will not use the default model that is created. Instead, we will manually create an arbitrary model that will represent an existing application that you may have. For full details about how to connect to an on-premises database instead, check out [Connect to an on-premises SQL Server from an Azure mobile service using Hybrid Connections](mobile-services-dotnet-backend-hybrid-connections-get-started.md).\n\n1. Start by creating a Mobile Services server project in **Visual Studio 2013 Update 2** or by using the quickstart project that you can download on the Mobile Services tab for your service in the [Azure classic portal](http://manage.windowsazure.com). For the purposes of this tutorial, we will assume your server project name is **ShoppingService**.\n\n2. Create a **Customer.cs** file inside the **Models** folder and use the following implementation. You will need to add an assembly reference to **System.ComponentModel.DataAnnotations** to your project.\n\n        using System.Collections.Generic;\n        using System.ComponentModel.DataAnnotations;\n\n        namespace ShoppingService.Models\n        {\n            public class Customer\n            {\n                [Key]\n                public int CustomerId { get; set; }\n\n                public string Name { get; set; }\n\n                public virtual ICollection<Order> Orders { get; set; }\n\n            }\n        }\n\n3. Create an **Order.cs** file inside the **Models** folder and use the following implementation:\n\n        using System.ComponentModel.DataAnnotations;\n\n        namespace ShoppingService.Models\n        {\n            public class Order\n            {\n                [Key]\n                public int OrderId { get; set; }\n\n                public string Item { get; set; }\n\n                public int Quantity { get; set; }\n\n                public bool Completed { get; set; }\n\n                public int CustomerId { get; set; }\n\n                public virtual Customer Customer { get; set; }\n\n            }\n        }\n\n    You will note that these two classes have a *relationship*: every **Order** is associated with a single **Customer** and a **Customer** can be associated with multiple **Orders**. Having relationships is common in existing data models.\n\n4. Create an **ExistingContext.cs** file inside the **Models** folder and implement it as so:\n\n        using System.Data.Entity;\n\n        namespace ShoppingService.Models\n        {\n            public class ExistingContext : DbContext\n            {\n                public ExistingContext()\n                    : base(\"Name=MS_TableConnectionString\")\n                {\n                }\n\n                public DbSet<Customer> Customers { get; set; }\n\n                public DbSet<Order> Orders { get; set; }\n\n            }\n        }\n\nThe structure above approximates an existing Entity Framework model that you may already be using for an existing application. Please note that the model is not aware of Mobile Services in any way at this stage.\n\n<a name=\"DTOs\"></a>\n## Creating data transfer objects (DTOs) for your mobile service\n\nThe data model you would like to use with your mobile service may be arbitrarily complex; it could contain hundreds of entities with a variety of relationships between them. When building a mobile app, it is usually desirable to simplify the data model and eliminate relationships (or handle them manually) in order to minimize the payload being sent back and forth between the app and the service. In this section, we will create a set of simplified objects (known as \"data transfer objects\" or \"DTOs\"), that are mapped to the data you have in your database, yet contain only the minimal set of properties needed by your mobile app.\n\n1. Create the **MobileCustomer.cs** file in the **DataObjects** folder of your service project and use the following implementation:\n\n        using Microsoft.WindowsAzure.Mobile.Service;\n\n        namespace ShoppingService.DataObjects\n        {\n            public class MobileCustomer : EntityData\n            {\n                public string Name { get; set; }\n            }\n        }\n\n    Note that this class is similar to the **Customer** class in the model, except the relationship property to **Order** is removed. For an object to work correctly with Mobile Services offline sync, it needs a set of *system properties* for optimistic concurrency, so you will notice that the DTO inherits from [**EntityData**](http://msdn.microsoft.com/library/microsoft.windowsazure.mobile.service.entitydata.aspx), which contains those properties. The int-based **CustomerId** property from the original model is replaced by the string-based **Id** property from **EntityData**, which will be the **Id** that Mobile Services will use.\n\n2. Create the **MobileOrder.cs** file in the **DataObjects** folder of your service project.\n\n        using Microsoft.WindowsAzure.Mobile.Service;\n        using Newtonsoft.Json;\n        using System.ComponentModel.DataAnnotations;\n        using System.ComponentModel.DataAnnotations.Schema;\n\n        namespace ShoppingService.DataObjects\n        {\n            public class MobileOrder : EntityData\n            {\n                public string Item { get; set; }\n\n                public int Quantity { get; set; }\n\n                public bool Completed { get; set; }\n\n                [NotMapped]\n                public int CustomerId { get; set; }\n\n                [Required]\n                public string MobileCustomerId { get; set; }\n\n                public string MobileCustomerName { get; set; }\n            }\n        }\n\n    The **Customer** relationship property has been replaced with the **Customer** name and a **MobileCustomerId** property that can be used to manually model the relationship on the client. For now you can ignore the **CustomerId** property, it is only used later on.\n\n3. You might notice that with the addition of the system properties on the **EntityData** base class, our DTOs now have more properties than the model types. Clearly we need a place to store these properties, so we will add a few extra columns to the original database. While this does change the database, it will not break existing applications since the changes are purely additive (adding new columns to the schema). To do that, add the following statements to the top of **Customer.cs** and **Order.cs**:\n\n        using System.ComponentModel.DataAnnotations.Schema;\n        using Microsoft.WindowsAzure.Mobile.Service.Tables;\n        using System;\n\n4. Next, add these extra properties to each of the classes:\n\n        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]\n        [Index]\n        [TableColumn(TableColumnType.CreatedAt)]\n        public DateTimeOffset? CreatedAt { get; set; }\n\n        [TableColumn(TableColumnType.Deleted)]\n        public bool Deleted { get; set; }\n\n        [Index]\n        [TableColumn(TableColumnType.Id)]\n        [MaxLength(36)]\n        public string Id { get; set; }\n\n        [DatabaseGenerated(DatabaseGeneratedOption.Computed)]\n        [TableColumn(TableColumnType.UpdatedAt)]\n        public DateTimeOffset? UpdatedAt { get; set; }\n\n        [TableColumn(TableColumnType.Version)]\n        [Timestamp]\n        public byte[] Version { get; set; }\n\n4. The system properties just added have some built-in behaviors (for example automatic update of created/updated at) that happen transparently with database operations. To enable these behaviors, we need to make a change to **ExistingContext.cs**. At the top of the file, add the following:\n\n        using System.Data.Entity.ModelConfiguration.Conventions;\n        using Microsoft.WindowsAzure.Mobile.Service.Tables;\n        using System.Linq;\n\n5. In the body of **ExistingContext**, override [**OnModelCreating**](http://msdn.microsoft.com/library/system.data.entity.dbcontext.onmodelcreating.aspx):\n\n        protected override void OnModelCreating(DbModelBuilder modelBuilder)\n        {\n            modelBuilder.Conventions.Add(\n                new AttributeToColumnAnnotationConvention<TableColumnAttribute, string>(\n                    \"ServiceTableColumn\", (property, attributes) => attributes.Single().ColumnType.ToString()));\n\n            base.OnModelCreating(modelBuilder);\n        }\n\n5. Let's populate the database with some example data. Open the file **WebApiConfig.cs**. Create a new [**IDatabaseInitializer**](http://msdn.microsoft.com/library/gg696323.aspx) and configure it in the **Register** method as shown below.\n\n        using Microsoft.WindowsAzure.Mobile.Service;\n        using ShoppingService.Models;\n        using System;\n        using System.Collections.Generic;\n        using System.Collections.ObjectModel;\n        using System.Data.Entity;\n        using System.Web.Http;\n\n        namespace ShoppingService\n        {\n            public static class WebApiConfig\n            {\n                public static void Register()\n                {\n                    ConfigOptions options = new ConfigOptions();\n\n                    HttpConfiguration config = ServiceConfig.Initialize(new ConfigBuilder(options));\n\n                    Database.SetInitializer(new ExistingInitializer());\n                }\n            }\n\n            public class ExistingInitializer : ClearDatabaseSchemaIfModelChanges<ExistingContext>\n            {\n                protected override void Seed(ExistingContext context)\n                {\n                    List<Order> orders = new List<Order>\n                    {\n                        new Order { OrderId = 10, Item = \"Guitars\", Quantity = 2, Id = Guid.NewGuid().ToString()},\n                        new Order { OrderId = 20, Item = \"Drums\", Quantity = 10, Id = Guid.NewGuid().ToString()},\n                        new Order { OrderId = 30, Item = \"Tambourines\", Quantity = 20, Id = Guid.NewGuid().ToString() }\n                    };\n\n                    List<Customer> customers = new List<Customer>\n                    {\n                        new Customer { CustomerId = 1, Name = \"John\", Orders = new Collection<Order> {\n                            orders[0]}, Id = Guid.NewGuid().ToString()},\n                        new Customer { CustomerId = 2, Name = \"Paul\", Orders = new Collection<Order> {\n                            orders[1]}, Id = Guid.NewGuid().ToString()},\n                        new Customer { CustomerId = 3, Name = \"Ringo\", Orders = new Collection<Order> {\n                            orders[2]}, Id = Guid.NewGuid().ToString()},\n                    };\n\n                    foreach (Customer c in customers)\n                    {\n                        context.Customers.Add(c);\n                    }\n\n                    base.Seed(context);\n                }\n            }\n        }\n\n<a name=\"Mapping\"></a>\n## Establishing a mapping between DTOs and model\n\nWe now have the model types **Customer** and **Order** and the DTOs **MobileCustomer** and **MobileOrder**, but we  need to instruct the backend to automatically transform between the two. Here Mobile Services relies on [**AutoMapper**](http://automapper.org/), an object relational mapper, which is already referenced in the project.\n\n1. Add the following to the top of **WebApiConfig.cs**:\n\n        using AutoMapper;\n        using ShoppingService.DataObjects;\n\n2. To define the mapping, add the following to the **Register** method of the **WebApiConfig** class.\n\n        Mapper.Initialize(cfg =>\n        {\n            cfg.CreateMap<MobileOrder, Order>();\n            cfg.CreateMap<MobileCustomer, Customer>();\n            cfg.CreateMap<Order, MobileOrder>()\n                .ForMember(dst => dst.MobileCustomerId, map => map.MapFrom(x => x.Customer.Id))\n                .ForMember(dst => dst.MobileCustomerName, map => map.MapFrom(x => x.Customer.Name));\n            cfg.CreateMap<Customer, MobileCustomer>();\n\n        });\n\nAutoMapper will now map the objects to one another. All properties with corresponding names will be matched, for example **MobileOrder.CustomerId** will get automatically mapped to **Order.CustomerId**. Custom mappings can be configured as shown above, where we map the **MobileCustomerName** property to the **Name** property of the **Customer** relationship property.\n\n<a name=\"DomainManager\"></a>\n## Implementing domain-specific logic\n\nThe next step is to implement a [**MappedEntityDomainManager**](http://msdn.microsoft.com/library/dn643300.aspx), which serves as an abstraction layer between our mapped data store and the controller which will serve HTTP traffic from our clients. We will be able to write our controller in the next section purely in terms of the DTOs and the **MappedEntityDomainManager** we add here will handle the communication with the original data store, while also giving us a place to implement any logic specific to it.\n\n1. Add a **MobileCustomerDomainManager.cs** to the **Models** folder of your project. Paste in the following implementation:\n\n        using AutoMapper;\n        using Microsoft.WindowsAzure.Mobile.Service;\n        using ShoppingService.DataObjects;\n        using System.Data.Entity;\n        using System.Linq;\n        using System.Net.Http;\n        using System.Threading.Tasks;\n        using System.Web.Http;\n        using System.Web.Http.OData;\n\n        namespace ShoppingService.Models\n        {\n            public class MobileCustomerDomainManager : MappedEntityDomainManager<MobileCustomer, Customer>\n            {\n                private ExistingContext context;\n\n                public MobileCustomerDomainManager(ExistingContext context, HttpRequestMessage request, ApiServices services)\n                    : base(context, request, services)\n                {\n                    Request = request;\n                    this.context = context;\n                }\n\n                public static int GetKey(string mobileCustomerId, DbSet<Customer> customers, HttpRequestMessage request)\n                {\n                    int customerId = customers\n                       .Where(c => c.Id == mobileCustomerId)\n                       .Select(c => c.CustomerId)\n                       .FirstOrDefault();\n\n                    if (customerId == 0)\n                    {\n                        throw new HttpResponseException(request.CreateNotFoundResponse());\n                    }\n                    return customerId;\n                }\n\n                protected override T GetKey<T>(string mobileCustomerId)\n                {\n                    return (T)(object)GetKey(mobileCustomerId, this.context.Customers, this.Request);\n                }\n\n                public override SingleResult<MobileCustomer> Lookup(string mobileCustomerId)\n                {\n                    int customerId = GetKey<int>(mobileCustomerId);\n                    return LookupEntity(c => c.CustomerId == customerId);\n                }\n\n                public override async Task<MobileCustomer> InsertAsync(MobileCustomer mobileCustomer)\n                {\n                    return await base.InsertAsync(mobileCustomer);\n                }\n\n                public override async Task<MobileCustomer> UpdateAsync(string mobileCustomerId, Delta<MobileCustomer> patch)\n                {\n                    int customerId = GetKey<int>(mobileCustomerId);\n\n                    Customer existingCustomer = await this.Context.Set<Customer>().FindAsync(customerId);\n                    if (existingCustomer == null)\n                    {\n                        throw new HttpResponseException(this.Request.CreateNotFoundResponse());\n                    }\n\n                    MobileCustomer existingCustomerDTO = Mapper.Map<Customer, MobileCustomer>(existingCustomer);\n                    patch.Patch(existingCustomerDTO);\n                    Mapper.Map<MobileCustomer, Customer>(existingCustomerDTO, existingCustomer);\n\n                    await this.SubmitChangesAsync();\n\n                    MobileCustomer updatedCustomerDTO = Mapper.Map<Customer, MobileCustomer>(existingCustomer);\n\n                    return updatedCustomerDTO;\n                }\n\n                public override async Task<MobileCustomer> ReplaceAsync(string mobileCustomerId, MobileCustomer mobileCustomer)\n                {\n                    return await base.ReplaceAsync(mobileCustomerId, mobileCustomer);\n                }\n\n                public override async Task<bool> DeleteAsync(string mobileCustomerId)\n                {\n                    int customerId = GetKey<int>(mobileCustomerId);\n                    return await DeleteItemAsync(customerId);\n                }\n            }\n        }\n\n    An important part of this class is the **GetKey** method where we indicate how to locate the ID property of the object in the original data model.\n\n2. Add a **MobileOrderDomainManager.cs** to the **Models** folder of your project:\n\n        using AutoMapper;\n        using Microsoft.WindowsAzure.Mobile.Service;\n        using ShoppingService.DataObjects;\n        using System.Linq;\n        using System.Net.Http;\n        using System.Threading.Tasks;\n        using System.Web.Http;\n        using System.Web.Http.OData;\n\n        namespace ShoppingService.Models\n        {\n            public class MobileOrderDomainManager : MappedEntityDomainManager<MobileOrder, Order>\n            {\n                private ExistingContext context;\n\n                public MobileOrderDomainManager(ExistingContext context, HttpRequestMessage request, ApiServices services)\n                    : base(context, request, services)\n                {\n                    Request = request;\n                    this.context = context;\n                }\n\n                protected override T GetKey<T>(string mobileOrderId)\n                {\n                    int orderId = this.context.Orders\n                        .Where(o => o.Id == mobileOrderId)\n                        .Select(o => o.OrderId)\n                        .FirstOrDefault();\n\n                    if (orderId == 0)\n                    {\n                        throw new HttpResponseException(this.Request.CreateNotFoundResponse());\n                    }\n                    return (T)(object)orderId;\n                }\n\n                public override SingleResult<MobileOrder> Lookup(string mobileOrderId)\n                {\n                    int orderId = GetKey<int>(mobileOrderId);\n                    return LookupEntity(o => o.OrderId == orderId);\n                }\n\n                private async Task<Customer> VerifyMobileCustomer(string mobileCustomerId, string mobileCustomerName)\n                {\n                    int customerId = MobileCustomerDomainManager.GetKey(mobileCustomerId, this.context.Customers, this.Request);\n                    Customer customer = await this.context.Customers.FindAsync(customerId);\n                    if (customer == null)\n                    {\n                        throw new HttpResponseException(Request.CreateBadRequestResponse(\"Customer with name '{0}' was not found\", mobileCustomerName));\n                    }\n                    return customer;\n                }\n\n                public override async Task<MobileOrder> InsertAsync(MobileOrder mobileOrder)\n                {\n                    Customer customer = await VerifyMobileCustomer(mobileOrder.MobileCustomerId, mobileOrder.MobileCustomerName);\n                    mobileOrder.CustomerId = customer.CustomerId;\n                    return await base.InsertAsync(mobileOrder);\n                }\n\n                public override async Task<MobileOrder> UpdateAsync(string mobileOrderId, Delta<MobileOrder> patch)\n                {\n                    Customer customer = await VerifyMobileCustomer(patch.GetEntity().MobileCustomerId, patch.GetEntity().MobileCustomerName);\n\n                    int orderId = GetKey<int>(mobileOrderId);\n\n                    Order existingOrder = await this.Context.Set<Order>().FindAsync(orderId);\n                    if (existingOrder == null)\n                    {\n                        throw new HttpResponseException(this.Request.CreateNotFoundResponse());\n                    }\n\n                    MobileOrder existingOrderDTO = Mapper.Map<Order, MobileOrder>(existingOrder);\n                    patch.Patch(existingOrderDTO);\n                    Mapper.Map<MobileOrder, Order>(existingOrderDTO, existingOrder);\n\n                    // This is required to map the right Id for the customer\n                    existingOrder.CustomerId = customer.CustomerId;\n\n                    await this.SubmitChangesAsync();\n\n                    MobileOrder updatedOrderDTO = Mapper.Map<Order, MobileOrder>(existingOrder);\n\n                    return updatedOrderDTO;\n                }\n\n                public override async Task<MobileOrder> ReplaceAsync(string mobileOrderId, MobileOrder mobileOrder)\n                {\n                    await VerifyMobileCustomer(mobileOrder.MobileCustomerId, mobileOrder.MobileCustomerName);\n\n                    return await base.ReplaceAsync(mobileOrderId, mobileOrder);\n                }\n\n                public override Task<bool> DeleteAsync(string mobileOrderId)\n                {\n                    int orderId = GetKey<int>(mobileOrderId);\n                    return DeleteItemAsync(orderId);\n                }\n            }\n        }\n\n    In this case the **InsertAsync** and **UpdateAsync** methods are interesting; that's where we enforce the relationship that each **Order** must have a valid associated **Customer**. In **InsertAsync** you'll notice that we populate the **MobileOrder.CustomerId** property, which maps to the **Order.CustomerId** property. We get that value based by looking up the **Customer** with the matching **MobileOrder.MobileCustomerId**. This is because by default the client is only aware of the Mobile Services ID (**MobileOrder.MobileCustomerId**) of the **Customer**, which is different than its actual primary key needed to set the foreign key (**MobileOrder.CustomerId**) from **Order** to **Customer**. This is only used internally within the service to facilitate the insert operation.\n\nWe are now ready to create controllers to expose our DTOs to our clients.\n\n<a name=\"Controller\"></a>\n## Implementing a TableController using DTOs\n\n1. In the **Controllers** folder, add the file **MobileCustomerController.cs**:\n\n        using Microsoft.WindowsAzure.Mobile.Service;\n        using Microsoft.WindowsAzure.Mobile.Service.Security;\n        using ShoppingService.DataObjects;\n        using ShoppingService.Models;\n        using System.Linq;\n        using System.Threading.Tasks;\n        using System.Web.Http;\n        using System.Web.Http.Controllers;\n        using System.Web.Http.OData;\n\n        namespace ShoppingService.Controllers\n        {\n            public class MobileCustomerController : TableController<MobileCustomer>\n            {\n                protected override void Initialize(HttpControllerContext controllerContext)\n                {\n                    base.Initialize(controllerContext);\n                    var context = new ExistingContext();\n                    DomainManager = new MobileCustomerDomainManager(context, Request, Services);\n                }\n\n                public IQueryable<MobileCustomer> GetAllMobileCustomers()\n                {\n                    return Query();\n                }\n\n                public SingleResult<MobileCustomer> GetMobileCustomer(string id)\n                {\n                    return Lookup(id);\n                }\n\n                [AuthorizeLevel(AuthorizationLevel.Admin)]\n                protected override Task<MobileCustomer> PatchAsync(string id, Delta<MobileCustomer> patch)\n                {\n                    return base.UpdateAsync(id, patch);\n                }\n\n                [AuthorizeLevel(AuthorizationLevel.Admin)]\n                protected override Task<MobileCustomer> PostAsync(MobileCustomer item)\n                {\n                    return base.InsertAsync(item);\n                }\n\n                [AuthorizeLevel(AuthorizationLevel.Admin)]\n                protected override Task DeleteAsync(string id)\n                {\n                    return base.DeleteAsync(id);\n                }\n            }\n        }\n\n    You will note the use of the AuthorizeLevel attribute to restrict public access to the Insert/Update/Delete operations on the controller. For the purposes of this scenario, the list of Customers will be read-only, but we will allow the creation of new Orders and associating them with existing customers.\n\n2. In the **Controllers** folder, add the file **MobileOrderController.cs**:\n\n        using Microsoft.WindowsAzure.Mobile.Service;\n        using ShoppingService.DataObjects;\n        using ShoppingService.Models;\n        using System.Linq;\n        using System.Threading.Tasks;\n        using System.Web.Http;\n        using System.Web.Http.Controllers;\n        using System.Web.Http.Description;\n        using System.Web.Http.OData;\n\n        namespace ShoppingService.Controllers\n        {\n            public class MobileOrderController : TableController<MobileOrder>\n            {\n                protected override void Initialize(HttpControllerContext controllerContext)\n                {\n                    base.Initialize(controllerContext);\n                    ExistingContext context = new ExistingContext();\n                    DomainManager = new MobileOrderDomainManager(context, Request, Services);\n                }\n\n                public IQueryable<MobileOrder> GetAllMobileOrders()\n                {\n                    return Query();\n                }\n\n                public SingleResult<MobileOrder> GetMobileOrder(string id)\n                {\n                    return Lookup(id);\n                }\n\n                public Task<MobileOrder> PatchMobileOrder(string id, Delta<MobileOrder> patch)\n                {\n                    return UpdateAsync(id, patch);\n                }\n\n                [ResponseType(typeof(MobileOrder))]\n                public async Task<IHttpActionResult> PostMobileOrder(MobileOrder item)\n                {\n                    MobileOrder current = await InsertAsync(item);\n                    return CreatedAtRoute(\"Tables\", new { id = current.Id }, current);\n                }\n\n                public Task DeleteMobileOrder(string id)\n                {\n                    return DeleteAsync(id);\n                }\n            }\n        }\n\n3. You are now ready to run your service. Press **F5** and use the test client built into the help page to modify the data.\n\nPlease note that both controller implementations make exclusive use of the DTOs **MobileCustomer** and **MobileOrder** and are agnostic of the underlying model. These DTOs are readily serialized to JSON and can be used to exchange data with the  Mobile Services client SDK on all platforms. For example, building a Windows Store app, the corresponding client-side type would look as shown below. The type would be analogous on other client platforms.\n\n    using Microsoft.WindowsAzure.MobileServices;\n    using System;\n\n    namespace ShoppingClient\n    {\n        public class MobileCustomer\n        {\n            public string Id { get; set; }\n\n            public string Name { get; set; }\n\n            [CreatedAt]\n            public DateTimeOffset? CreatedAt { get; set; }\n\n            [UpdatedAt]\n            public DateTimeOffset? UpdatedAt { get; set; }\n\n            public bool Deleted { get; set; }\n\n            [Version]\n            public string Version { get; set; }\n\n        }\n\n    }\n\nAs a next step, you can now build out the client app to access the service.\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-windows-store-dotnet-aad-rbac.md",
    "content": "<properties\n\tpageTitle=\"Role Based Access Control in Mobile Services using .NET and the Azure Active Directory (Windows Store) | Microsoft Azure\"\n\tdescription=\"Learn how to control access based on Azure Active Directory roles in your Windows Store application using a Mobile Service with a .NET backend.\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"wesmc7777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-multiple\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"wesmc\"/>\n\n# Role Based Access Control in Mobile Services using JavaScript and the Azure Active Directory\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR-LIST (Platform | Backend)]\n- [(Windows 8.x Store C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-aad-rbac.md)\n \n\n## Overview\n\nRoles-based access control (RBAC) is the practice of assigning permissions to roles that your users can hold. It nicely defines boundaries on what certain classes of users can and cannot do. This tutorial will walk you through how to add basic RBAC to Azure Mobile Services.\n\nThis tutorial will demonstrate role based access control, checking each user's membership to a Sales group defined in the Azure Active Directory (AAD). The access check will be done with .NET Mobile Service backend using the [Graph REST API] for Azure Active Directory. Only users who belong to the Sales group will be allowed to query the data.\n\n\n>[AZURE.NOTE] The intent of this tutorial is to extend your knowledge of authentication to include authorization practices. It is expected that you first complete the [Add Authentication to your app] tutorial using the Azure Active Directory authentication provider. This tutorial continues to update the TodoItem application used in the [Add Authentication to your app] tutorial.\n\n## Prerequisites\n\nThis tutorial requires the following:\n\n* Visual Studio 2013 running on Windows 8.1.\n* Completion of the [Add Authentication to your app] tutorial using the Azure Active Directory authentication provider.\n\n\n\n\n## Generate a key for the Integrated Application\n\n\nDuring the [Add Authentication to your app] tutorial, you created a registration for the integrated application when you completed the [Register to use an Azure Active Directory Login] step. In this section you generate a key to be used when reading directory information with that integrated application's client ID.\n\n1. Click **Applications** tab on your directory page in the [Azure classic portal](https://manage.windowsazure.com/).\n  \n2. Click your integrated application registration.\n\n3. Click **Configure** on the application page and scroll down the the **keys** section of the page. \n4. Click **1 year** duration for a new key. Then click **Save** and the portal will display your new key value.\n5. Copy the **Client ID** and **Key** shown after you save. Note that the key value will only be shown to you a single time after you have saved. \n\n    ![](./media/mobile-services-generate-aad-app-registration-access-key/client-id-and-key.png)\n\n6. Scroll down to the bottom of the integrated application configuration page and enable the **Read directory data** permission for the application and click **Save**.\n\n    ![](./media/mobile-services-generate-aad-app-registration-access-key/app-perms.png)\n\n\n7. In the [Azure classic portal](https://manage.windowsazure.com/), navigate back to your mobile service and click the **Configure** tab. Scroll down to the **app settings** section and add the following app settings and click **Save**. \n\n    <table border=\"1\">\n    <tr>\n    <th>App Setting Name</th><th>Description</th>\n    </tr>\n    <tr>\n    <td>AAD_CLIENT_ID</td><td>The client id you copied from your integrated app in the steps above.</td>\n    </tr>\n    <tr>\n    <td>AAD_CLIENT_KEY</td><td>The app key you generated in your AAD integrated app in the steps above.</td>\n    </tr>\n    <tr>\n    <td>AAD_TENANT_DOMAIN</td><td>Your AAD domain name. Should be similar to \"mydomain.onmicrosoft.com\"</td>\n    </tr>\n    </table><br/>\n\n \n    ![](./media/mobile-services-generate-aad-app-registration-access-key/aad-app-settings.png)\n  \n\n\n\n## Create a Sales group with membership\n\nIn this section you add two new users to your directory along with the new Sales group. One of the users will be granted membership to the sales group. The other user will not be granted membership to the group. \n\n### Create the users\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com) navigate to the directory that you previously configured for authentication when you completed the tutorial to add authentication to your app.\n2. Click **Users** at the top of the page. Then click the **Add User** button at the bottom. \n3. Complete the new user dialogs creating to create a user named **Bob**. Note the temporary password for the user. \n4. Create another user named **Dave**. Note the temporary password for the user.\n5. The new users should look similar to what is shown below.\n\n    ![](./media/mobile-services-aad-rbac-create-sales-group/users.png)    \n\n\n### Create the Sales group\n\n\n1. On the directory page, click **Groups** at the top of the page. Then click the **Add Group** button at the bottom. \n2. Enter **Sales** for the name of the group and press the complete button on the dialog to create the group. \n\n    ![](./media/mobile-services-aad-rbac-create-sales-group/sales-group.png)\n\n### Add user membership to the Sales group.\n\n\n1. Click **Groups** at the top of the directory page. Then click the **Sales** group to go to the sales group page. \n2. On the Sales group page, click **Add Members**. Add the user named **Bob** to the sales group. The user named **Dave** should not be a member of the group.\n\n    ![](./media/mobile-services-aad-rbac-create-sales-group/group-membership.png)\n\n3. On the Sales group page, click **Properties**, then copy the **Object ID** for the sales group at the bottom of the page. \n\n   \n    ![](./media/mobile-services-aad-rbac-create-sales-group/sales-group-id.png)\n\n4. Navigate back to your mobile service configuration page and add the object id as an app setting named **AAD\\_SALES\\_GROUP\\_ID**. This tutorial uses group's object id as an app setting instead of looking up the id based on the group name. This is because the group name may change where the id stays the same.\n\n    ![](./media/mobile-services-aad-rbac-create-sales-group/sales-group-id-app-setting.png)\n\n\n\n## Create a custom authorization attribute on the mobile service\n\nIn this section you will create a new custom authorization attribute that can be used to perform access checks on mobile service operations. The attribute will look up an Active Directory group based on the role name passed to it. It will then perform access checks based on that group's membership.\n\n1. In Visual Studio, right click mobile service .NET backend project and click **Manage NuGet Packages**.\n\n2. In the NuGet Package Manager dialog, enter **ADAL** in the search criteria to find and install the **Active Directory Authentication Library** for your mobile service. This tutorial was most recently tested with the 3.3.205061641-alpha (Prerelease) version of the ADAL package.\n\n3. In Visual Studio, right click your mobile service project and click **Add** then **New Folder**. Name the new folder **Utilities**.\n\n4. In Visual Studio, right click the new **Utilities** folder and add a new class file named **AuthorizeAadRole.cs**.\n\n    ![][0]\n\n5. In the AuthorizeAadRole.cs file, add the following `using` statements at the top of the file.\n\n\t\tusing System.Net;\n\t\tusing System.Net.Http;\n\t\tusing System.Web.Http;\n\t\tusing System.Web.Http.Controllers;\n\t\tusing System.Web.Http.Filters;\n\t\tusing Newtonsoft.Json;\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\t\tusing Microsoft.WindowsAzure.Mobile.Service;\n\t\tusing Microsoft.IdentityModel.Clients.ActiveDirectory;\n\t\tusing System.Globalization;\n\t\tusing System.IO;\n\n6. In AuthorizeAadRole.cs, add the following enumerated type to the Utilities namespace. In this example we only deal with the **Sales** role. The others are just examples of groups you might use.\n\n        public enum AadRoles\n        {\n            Sales,\n            Management,\n            Development\n        }\n\n7. In AuthorizeAadRole.cs, add the following `AuthorizeAadRole` class definition to the Utilities namespace.\n\n        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]\n        public class AuthorizeAadRole : AuthorizationFilterAttribute\n        {\n            private bool isInitialized;\n            private bool isHosted;\n\t        private ApiServices services = null;\n\n\t        // Constants used with ADAL and the Graph REST API for AAD\n\t        private const string AadInstance = \"https://login.windows.net/{0}\";\n\t        private const string GraphResourceId = \"https://graph.windows.net/\";\n\t        private const string APIVersion = \"?api-version=2013-04-05\";\n\n\t        // App settings pulled from the Mobile Service\n\t        private string tenantdomain;\n\t        private string clientid;\n\t        private string clientkey;\n\t        private Dictionary<int, string> groupIds = new Dictionary<int, string>();\n\n\t        private string token = null;\n\n            public AuthorizeAadRole(AadRoles role)\n            {\n                this.Role = role;\n            }\n\n\t        // private class used to serialize the Graph REST API web response\n\t        private class MembershipResponse\n\t        {\n\t            public bool value;\n\t        }\n\n            public AadRoles Role { get; private set; }\n\n            // Generate a local dictionary for the role group ids configured as\n            // Mobile Service app settings\n            private void InitGroupIds()\n            {\n            }\n\n            // Use ADAL and the authentication app settings from the Mobile Service to\n            // get an AAD access token\n            private string GetAADToken()\n            {\n            }\n\n            // Given an AAD user id, check membership against the group associated with the role.\n            private bool CheckMembership(string memberId)\n            {\n            }\n\n            // Called when the user is attempting authorization\n            public override void OnAuthorization(HttpActionContext actionContext)\n            {\n            }\n        }\n\n\n\n8. In AuthorizeAadRole.cs, update the `InitGroupIds` method on the `AuthorizeAadRole` class as follows. This method creates a dictionary mapping of the group ids to each role.\n\n        private void InitGroupIds()\n        {\n            string groupId;\n\n            if (services == null)\n                return;\n\n            if (!groupIds.ContainsKey((int)AadRoles.Sales))\n            {\n                if (services.Settings.TryGetValue(\"AAD_SALES_GROUP_ID\", out groupId))\n                {\n                    groupIds.Add((int)AadRoles.Sales, groupId);\n                }\n                else\n                    services.Log.Error(\"AAD_SALES_GROUP_ID app setting not found.\");\n            }\n        }\n\n\n9. In AuthorizeAadRole.cs, update the `GetAADToken` method on the `AuthorizeAadRole` class. This method uses the app settings stored in the Mobile Service to get an access token to the AAD from ADAL.\n\n    >[AZURE.NOTE] ADAL for .NET includes an in-memory token cache by default to help alleviate extra network traffic against your Active Directory. However, you can write your own cache implementation or disable caching entirely. For more information see [ADAL for .NET].\n\n        // Use ADAL and the authentication app settings from the Mobile Service to get an AAD access token\n        private async Task<string> GetAADToken()\n        {\n            // Try to get the required AAD authentication app settings from the mobile service.\n            if (!(services.Settings.TryGetValue(\"AAD_CLIENT_ID\", out clientid) &\n                  services.Settings.TryGetValue(\"AAD_CLIENT_KEY\", out clientkey) &\n                  services.Settings.TryGetValue(\"AAD_TENANT_DOMAIN\", out tenantdomain)))\n            {\n                services.Log.Error(\"GetAADToken() : Could not retrieve mobile service app settings.\");\n                return null;\n            }\n\n            ClientCredential clientCred = new ClientCredential(clientid, clientkey);\n            string authority = String.Format(CultureInfo.InvariantCulture, AadInstance, tenantdomain);\n            AuthenticationContext authContext = new AuthenticationContext(authority);\n\n            AuthenticationResult result = await authContext.AcquireTokenAsync(GraphResourceId, clientCred);\n            if (result != null)\n                token = result.AccessToken;\n            else\n                services.Log.Error(\"GetAADToken() : Failed to return a token.\");\n\n            return token;\n        }\n\n10. In AuthorizeAadRole.cs, update the `CheckMembership` method on the `AuthorizeAadRole` class. This method receives a user's object id. It then uses the AAD Graph REST API to check that object id to see if it is a member id for the group associated to the role selected on the `AuthorizeAadRole` class\n\n        private bool CheckMembership(string memberId)\n        {\n            bool membership = false;\n            string url = GraphResourceId + tenantdomain + \"/isMemberOf\" + APIVersion;\n            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);\n\n            // Use the Graph REST API to check group membership in the AAD\n            try\n            {\n                request.Method = \"POST\";\n                request.ContentType = \"application/json\";\n                request.Headers.Add(\"Authorization\", token);\n                using (var sw = new StreamWriter(request.GetRequestStream()))\n                {\n                    // Request body must have the group id and a member id to check for membership\n                    string body = String.Format(\"\\\"groupId\\\":\\\"{0}\\\",\\\"memberId\\\":\\\"{1}\\\"\",\n                        groupIds[(int)Role], memberId);\n                    sw.Write(\"{\" + body + \"}\");\n                }\n\n                WebResponse response = request.GetResponse();\n                StreamReader sr = new StreamReader(response.GetResponseStream());\n                string json = sr.ReadToEnd();\n                MembershipResponse membershipResponse = JsonConvert.DeserializeObject<MembershipResponse>(json);\n                membership = membershipResponse.value;\n            }\n            catch (Exception e)\n            {\n                services.Log.Error(\"OnAuthorization() exception : \" + e.Message);\n            }\n\n            return membership;\n        }\n\n\n11. In AuthorizeAadRole.cs, update the `OnAuthorization` method in the `AuthorizeAadRole` class with the following code. This code expects that the user calling into the Mobiile Service has authenticated with the AAD.  It then gets the user's AAD object id and checks membership with the Active Directory group that corresponds to the role.\n\n    >[AZURE.NOTE] You could look up the Active Directory group by name. However, in many cases it's a better practice to store the group id as a mobile service app setting. This is because the group name is more likely to change but, the id stays the same.\n\n        public override void OnAuthorization(HttpActionContext actionContext)\n        {\n            if (actionContext == null)\n            {\n                throw new ArgumentNullException(\"actionContext\");\n            }\n\n            services = new ApiServices(actionContext.ControllerContext.Configuration);\n\n            // Check whether we are running in a mode where local host access is allowed\n            // through without authentication.\n            if (!this.isInitialized)\n            {\n                HttpConfiguration config = actionContext.ControllerContext.Configuration;\n                this.isHosted = config.GetIsHosted();\n                this.isInitialized = true;\n            }\n\n            // No security when hosted locally\n            if (!this.isHosted && actionContext.RequestContext.IsLocal)\n            {\n                services.Log.Warn(\"AuthorizeAadRole: Local Hosting.\");\n                return;\n            }\n\n            ApiController controller = actionContext.ControllerContext.Controller as ApiController;\n            if (controller == null)\n            {\n                services.Log.Error(\"AuthorizeAadRole: No ApiController.\");\n            }\n\n            bool isAuthorized = false;\n            try\n            {\n                // Initialize a mapping for the group id to our enumerated type\n                InitGroupIds();\n\n                // Retrieve a AAD token from ADAL\n                GetAADToken();\n                if (token == null)\n                {\n                    services.Log.Error(\"AuthorizeAadRole: Failed to get an AAD access token.\");\n                }\n                else\n                {\n                    // Check group membership to see if the user is part of the group that corresponds to the role\n                    if (!string.IsNullOrEmpty(groupIds[(int)Role]))\n                    {\n                        ServiceUser serviceUser = controller.User as ServiceUser;\n                        if (serviceUser != null && serviceUser.Level == AuthorizationLevel.User)\n                        {\n                            var idents = serviceUser.GetIdentitiesAsync().Result;\n                            AzureActiveDirectoryCredentials clientAadCredentials =\n                                idents.OfType<AzureActiveDirectoryCredentials>().FirstOrDefault();\n                            if (clientAadCredentials != null)\n                            {\n                                isAuthorized = CheckMembership(clientAadCredentials.ObjectId);\n                            }\n                        }\n                    }\n                }\n            }\n            catch (Exception e)\n            {\n                services.Log.Error(e.Message);\n            }\n            finally\n            {\n                if (isAuthorized == false)\n                {\n                    services.Log.Error(\"Denying access\");\n\n                    actionContext.Response = actionContext.Request\n                        .CreateErrorResponse(HttpStatusCode.Forbidden,\n                            \"User is not logged in or not a member of the required group\");\n                }\n            }\n        }\n\n12. Save your changes to AuthorizeAadRole.cs.\n\n## Add role based access checking to the database operations\n\n1. In Visual Studio, expand the **Controllers** folder under the mobile service project. Open TodoItemController.cs.\n\n2. In TodoItemController.cs, add a `using` statement for your utilities namespace that contains the custom authorization attribute.\n\n        using todolistService.Utilities;\n\n3. In TodoItemController.cs, you can add the attribute to your controller class or individual methods depending on how you want access checked. If you want all controller operations to check access based on the same role, just add the attribute to the class. Add the attribute to the class as follows for testing this tutorial.\n\n        [AuthorizeAadRole(AadGroups.Sales)]\n        public class TodoItemController : TableController<TodoItem>\n\n    If you only wanted to access check insert, update, and delete operations, you would set the attribute only on those methods as follows.\n\n        // PATCH tables/TodoItem\n        [AuthorizeAadRole(AadGroups.Sales)]\n        public Task<TodoItem> PatchTodoItem(string id, Delta<TodoItem> patch)\n        {\n            return UpdateAsync(id, patch);\n        }\n\n        // POST tables/TodoItem\n        [AuthorizeAadRole(AadGroups.Sales)]\n        public async Task<IHttpActionResult> PostTodoItem(TodoItem item)\n        {\n            TodoItem current = await InsertAsync(item);\n            return CreatedAtRoute(\"Tables\", new { id = current.Id }, current);\n        }\n\n        // DELETE tables/TodoItem\n        [AuthorizeAadRole(AadGroups.Sales)]\n        public Task DeleteTodoItem(string id)\n        {\n            return DeleteAsync(id);\n        }\n\n\n4. Save TodoItemController.cs and build the mobile service to verify no syntax errors.\n5. Publish the mobile service to your Azure account.\n\n\n## Test the client's access\n\n\nThe instructions and screenshots below apply to testing a Windows Store client but, you can test this on any of the other platforms supported by Azure Mobile Services. \n\n1. In Visual Studio,run the client app and attempt to authenticate with the user account we created named Dave. \n\n    ![](./media/mobile-services-aad-rbac-test-app/dave-login.png)\n\n2. Dave doesn't have membership to the Sales group. So the role based access check will denied access to the table operations. Close the client app.\n\n    ![](./media/mobile-services-aad-rbac-test-app/unauthorized.png)\n\n3. In Visual Studio, run the client app again. This time authenticate with the user account we created named Bob.\n\n    ![](./media/mobile-services-aad-rbac-test-app/bob-login.png)\n\n4. Bob does have membership to the Sales group. So the role based access check will allow access to the table operations.\n\n    ![](./media/mobile-services-aad-rbac-test-app/success.png)\n\n\n\n\n\n\n\n\n\n\n<!-- Images -->\n[0]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-aad-rbac/add-authorize-aad-role-class.png\n\n<!-- URLs. -->\n[Add Authentication to your app]: mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md\n[How to Register with the Azure Active Directory]: mobile-services-how-to-register-active-directory-authentication.md\n[Directory Sync Scenarios]: http://msdn.microsoft.com/library/azure/jj573653.aspx\n[Store Server Scripts]: mobile-services-store-scripts-source-control.md\n[Register to use an Azure Active Directory Login]: mobile-services-how-to-register-active-directory-authentication.md\n[Graph REST API]: http://msdn.microsoft.com/library/azure/hh974478.aspx\n[IsMemberOf]: http://msdn.microsoft.com/library/azure/dn151601.aspx\n[ADAL for .NET]: https://msdn.microsoft.com/library/azure/jj573266.aspx\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-windows-store-dotnet-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Mobile Services for Windows Universal apps | Microsoft Azure\"\n\tdescription=\"Follow this tutorial to get started using Azure Mobile Services for universal Windows app development in C#.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"hero-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n\n# <a name=\"getting-started\"> </a>Get started with Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis tutorial shows you how to add a cloud-based backend service to a universal Windows app using Azure Mobile Services. Universal Windows app solutions include projects for both Windows Store 8.1 and Windows Phone Store 8.1 apps and a common shared project. For more information, see [Build universal Windows apps that target Windows and Windows Phone](http://msdn.microsoft.com/library/windows/apps/xaml/dn609832.aspx).\n\nIn this tutorial, you will create both a new mobile service and a simple *To do list* app that stores app data in the new mobile service. The mobile service that you will create uses the supported .NET languages using Visual Studio for server-side business logic and to manage the mobile service. To create a mobile service that lets you write your server-side business logic in JavaScript, see the JavaScript backend version of this topic.\n\n>[AZURE.NOTE]This topic shows you how to create a new mobile service project and universal Windows app by using the Azure classic portal. By using Visual Studio 2013 Update 3, you can also add a new mobile service project to an existing Visual Studio solution. For more information, see [Add Mobile Services to an existing app](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-data.md).\n\n>To add a mobile service to an Windows Phone 8.0 or Windows Phone Silverlight 8.1 app project, see [Add Mobile Services to an existing Windows Phone app](mobile-services-windows-phone-get-started-data.md).\n\n\nThe following are screen captures from the completed app:\n\n![](./media/mobile-services-windows-universal-get-started/mobile-quickstart-completed.png)\n<br/>Windows Store app\n\n![](./media/mobile-services-windows-universal-get-started/mobile-quickstart-completed-wp8.png)\n<br/>Windows Phone Store app\n\nCompleting this tutorial is a prerequisite for all other Mobile Services tutorials for Windows Store and Windows Phone Store apps.\n\nTo complete this tutorial, you need the following:\n\n* An active Azure account. If you don't have an account, you can sign up for an Azure trial and get up to 10 free mobile services that you can keep using even after your trial ends. For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=A0E0E5C02&amp;returnurl=http%3A%2F%2Fazure.microsoft.com%2Fen-us%2Fdocumentation%2Farticles%2Fmobile-services-dotnet-backend-windows-store-dotnet-get-started%2F).\n* [Visual Studio 2013].\n\n## Create a new mobile service\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** page, select **Create a free 20 MB SQL Database**, select **.NET** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t> [AZURE.NOTE] As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n## Create a new universal Windows app\n\nOnce you have created your mobile service, you can follow an easy quickstart in the Azure classic portal to either create a new app or modify an existing app to connect to your mobile service.\n\nIn this section you will create a new universal Windows app that is connected to your mobile service.\n\n1. In the [Azure classic portal], click **Mobile Services**, and then click the mobile service that you just created.\n\n2. In the quickstart tab, click **Windows** under **Choose platform** and expand **Create a new Windows Store app**.\n\n   \tThis displays the three easy steps to create a Windows Store app connected to your mobile service.\n\n  \t![Mobile Services quickstart steps](./media/mobile-services-dotnet-backend-windows-store-dotnet-get-started/mobile-quickstart-steps.png)\n\n3. If you haven't already done so, download and install [Visual Studio 2013] on your local computer or virtual machine.\n\n4. Under **Download and run your app and service locally**, select a language for your Windows Store app, then click **Download**.\n\n  \tThis downloads a solution contains projects for both the mobile service and for the sample _To do list_ application that is connected to your mobile service. Save the compressed project file to your local computer, and make a note of where you save it.\n\n## Test the app against the local mobile service\n\n\nThe mobile service project that you download lets you to run your new mobile service right on your local computer or virtual machine. This makes it easy to debug your service code before you even publish it to Azure.\n\nIn this section, you will test your new app against the mobile service running locally.\n\n1. Browse to the location where you saved the compressed project files, expand the files on your computer, and open the solution file in Visual Studio.\n\n2. In the Solution Explorer in Visual Studio, right-click your service project, click **Set as StartUp Project**, and then press the **F5** key to build the project and start the mobile service locally.\n\n\t![](./media/mobile-services-dotnet-backend-test-local-service-dotnet/mobile-service-startup.png)\n\n\tA web page is displayed after the mobile service starts successfully.\n\n3. To test the store app, right-click your client app project, click **Set as StartUp Project**, and then press the **F5** key to rebuild the project and start the app.\n\n\tThis starts the app, which connects to the local mobile service instance.\n\n4. In the app, type meaningful text, such as _Complete the tutorial_, in **Insert a TodoItem**, and then click **Save**.\n\n\tThis sends a POST request to the local mobile service. Data from the request is inserted into the TodoItem table. Items stored in the table are returned by the mobile service, and the data is displayed in the second column in the app.\n\n>[AZURE.NOTE]You can review the code that accesses your mobile service to query and insert data, which is found in the MainPage.xaml.cs file.\n\n\n## Publish your mobile service\n\n\n1. In Visual Studio, right-click the project, click **Publish** > **Microsoft Azure Mobile Services**. Instead of using Visual Studio, [you may also use Git](./\nmobile-services-dotnet-backend-store-code-source-control.md).\n\n2. Sign in with Azure credentials and select your service from **Existing Mobile Services**. Visual Studio downloads your publish settings directly from Azure. Finally, click **Publish**.\n\n\n<ol start=\"4\">\n<li><p>In the Shared code project, open the App.xaml.cs file, locate the code that creates a <a href=\"http://msdn.microsoft.com/library/Windowsazure/microsoft.windowsazure.mobileservices.mobileserviceclient.aspx\" target=\"_blank\">MobileServiceClient</a> instance, comment-out the code that creates this client using <em>localhost</em> and uncomment the code that creates the client using the remote mobile service URL, which looks like the following:</p>\n\n        <pre><code>public static MobileServiceClient MobileService = new MobileServiceClient(\n            \"https://todolist.azure-mobile.net/\",\n            \"XXXX-APPLICATION-KEY-XXXXX\");</code></pre>\n\n\t<p>The client will now access the mobile service published to Azure.</p></li>\n</ol>\n\n## Test the app against the mobile service hosted in Azure\n\nNow that the mobile service is published and the client is connected to the remote mobile service hosted in Azure, we can run the app using Azure for item storage.\n\n\n1. Press the F5 key to rebuild the project and start the Windows Store app.\n\n2. In the app, type meaningful text, such as *Complete the tutorial*, in **Insert a TodoItem**, and then click **Save**.\n\n\t![](./media/mobile-services-windows-universal-test-app/mobile-quickstart-startup.png)\n\n\tThis sends a POST request to the new mobile service hosted in Azure.\n\n3. Stop debugging and change the default start up project in the universal Windows solution to the Windows Phone Store app and press F5 again.\n\n\t![](./media/mobile-services-windows-universal-test-app/mobile-quickstart-completed-wp8.png)\n\n\tNotice that data saved from the previous step is loaded from the mobile service after the app starts.\n\n\n## Next Steps\nNow that you have completed the quickstart, learn how to perform additional important tasks in Mobile Services:\n\n* [Add Mobile Services to an existing app][Get started with data]\n  <br/>Learn more about storing and querying data using Mobile Services.\n\n* [Get started with offline data sync]\n  <br/>Learn how to use offline data sync to make your app responsive and robust.\n\n* [Add authentication to your Mobile Services app ][Get started with authentication]\n  <br/>Learn how to authenticate users of your app with an identity provider.\n\n* [Add push notifications to your app][Get started with push notifications]\n  <br/>Learn how to send a very basic push notification to your app.\n\n* [Troubleshoot a Mobile Services .NET backend]\n  <br/> Learn how to diagnose and fix issues that can arise with a Mobile Services .NET backend.\n\nFor more information about universal Windows apps, see [Supporting multiple device platforms from a single mobile service](mobile-services-how-to-use-multiple-clients-single-service.md#shared-vs).\n\n\n\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n\n\n<!-- URLs. -->\n[Visual Studio 2013]: https://go.microsoft.com/fwLink/p/?LinkID=257546\n[Get started with data]: mobile-services-dotnet-backend-windows-universal-dotnet-get-started-data.md\n[Get started with offline data sync]: mobile-services-windows-store-dotnet-get-started-offline-data.md\n[Get started with authentication]: mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md\n[Get started with push notifications]: mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md\n[Visual Studio Professional 2013]: https://go.microsoft.com/fwLink/p/?LinkID=257546\n[Mobile Services SDK]: http://go.microsoft.com/fwlink/?LinkId=257545\n[JavaScript and HTML]: mobile-services-win8-javascript/\n[Azure classic portal]: https://manage.windowsazure.com/\n[Troubleshoot a Mobile Services .NET backend]: mobile-services-dotnet-backend-how-to-troubleshoot.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard.md",
    "content": "<properties\n\tpageTitle=\"Creating a Windows Store leaderboard app with .NET Backend | Azure Mobile Services\"\n\tdescription=\"Learn how to build a Windows Store leaderboard app using Azure Mobile Services with a .NET backend.\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"rmcmurray\"\n\tmanager=\"wpickett\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows-store\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Creating a Leaderboard App with Azure Mobile Services .NET Backend\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\nThis tutorial shows how build a Windows Store app using Azure Mobile Services with a .NET backend. Azure Mobile Services provides a scalable and secure backend with built-in authentication, monitoring, push notifications, and other features, plus a cross-platform client library for building mobile apps. The .NET backend for Mobile Services is based on [ASP.NET Web API](http://asp.net/web-api), and gives .NET developers a first-class way to create REST APIs.\n\n## Overview\n\nWeb API is an open-source framework that gives .NET developers a first-class way to create REST APIs. You can host a Web API solution on Azure Websites, on Azure Mobile Services using the .NET backend, or even self-hosted in a custom process. Mobile Services is a hosting environment that is designed especially for mobile apps. When you host your Web API service on Mobile Services, you get the following advantages in addition to data storage:\n\n- Built-in authentication with social providers and Azure Active Directory (AAD).\n- Push notifications to apps using device-specific notification services.\n- A full set of client libraries that make it easy to access your service from any app.\n- Built-in logging and diagnostics.\n\nIn this tutorial you will:\n\n- Create a REST API using Azure Mobile Services.\n- Publish the service to Azure.\n- Create a Windows Store app that consumes the service.\n- Use Entity Framework (EF) to create foreign key relations and data transfer objects (DTOs).\n- Use ASP.NET Web API to define a custom API.\n\nThis tutorial uses [Visual Studio 2013 latest update](http://go.microsoft.com/fwlink/p/?LinkID=390465).\n\n\n## About the sample app\n\nA *leaderboard* shows a list of players for a game, along with their scores and the rank of each player. A leaderboard might be part of a larger game, or could be a separate app. A leaderboard is a real-world application, but is simple enough for a tutorial. Here is a screen shot of the app:\n\n![][1]\n\nTo keep the app simple, there is no actual game. Instead, you can add players and submit a score for each player. When you submit a score, the mobile service calculates the new rankings. On the back end, the mobile service creates a database with two tables:\n\n- Player. Contains the player ID and name.\n- PlayerRank. Contains a player's score and rank.\n\nPlayerRank has a foreign key to Player. Each player has zero or one PlayerRank.\n\nIn a real leaderboard app, PlayerRank might also have a game ID, so that a player could submit scores for more than one game.\n\n![][2]\n\nThe client app can perform the full set of CRUD operations on Players. It can read or delete existing PlayerRank entities, but it cannot create or update them directly. That's because the rank value is calculated by the service. Instead, the client submits a score, and the service updates the ranks for all players.\n\nDownload the completed project [here](http://code.msdn.microsoft.com/Leaderboard-App-with-Azure-9acf63af).\n\n\n## Create the project\n\nLaunch Visual Studio and create a new ASP.NET Web Application project. Name the project Leaderboard.\n\n![][3]\n\nIn Visual Studio 2013, the ASP.NET Web Application project includes a template for Azure Mobile Service. Select this template and click **OK**.\n\n![][4]\n\nThe project template includes an example controller and data object.\n\n![][5]\n\nThese aren't needed for the tutorial, so you can delete them from the project. Also remove the references to TodoItem  in WebApiConfig.cs and LeaderboardContext.cs.\n\n## Add data models\n\nYou will use [EF Code First](http://msdn.microsoft.com/data/ee712907#codefirst) to define the database tables. Under the DataObjects folder, add a class named `Player`.\n\n\tusing Microsoft.WindowsAzure.Mobile.Service;\n\n\tnamespace Leaderboard.DataObjects\n\t{\n\t    public class Player : EntityData\n\t    {\n\t        public string Name { get; set; }\n\t    }\n\t}\n\nAdd another class named `PlayerRank`.\n\n\tusing Microsoft.WindowsAzure.Mobile.Service;\n\tusing System.ComponentModel.DataAnnotations.Schema;\n\n\tnamespace Leaderboard.DataObjects\n\t{\n\t    public class PlayerRank : EntityData\n\t    {\n\t        public int Score { get; set; }\n\t        public int Rank { get; set; }\n\n\t        [ForeignKey(\"Id\")]\n\t        public virtual Player Player { get; set; }\n\t    }\n\t}\n\nNotice that both classes inherit from the **EntityData** class. Deriving from **EntityData** makes it easy for the app consume the data, using the cross-platform client library for Azure Mobile Services. **EntityData** also makes it easier for an app to [handle database write conflicts](mobile-services-windows-store-dotnet-handle-database-conflicts.md).\n\nThe `PlayerRank` class has a [navigation property](http://msdn.microsoft.com/data/jj713564.aspx) that points to the related `Player` entity. The **[ForeignKey]** attribute tells EF that the `Player` property represents a foreign key.\n\n## Add Web API controllers\n\nNext, you will add Web API controllers for `Player` and `PlayerRank`. Instead of plain Web API controllers, you will add a special kind of controller called a *table controller*, designed specifically for Azure Mobile Services.\n\nRight click the Controllers folder >  **Add** > **New Scaffolded Item**.\n\n![][6]\n\nIn the **Add Scaffold** dialog, expand **Common** on the left and select **Azure Mobile Services**. Then select **Azure Mobile Services Table Controller**. Click **Add**.\n\n![][7]\n\nIn the **Add Controller** dialog:\n\n1.\tUnder **Model class**, select Player.\n2.\tUnder **Data context class**, select MobileServiceContext.\n3.\tName the controller \"PlayerController\".\n4.\tClick **Add**.\n\n\nThis step adds a file named PlayerController.cs to the project.\n\n![][8]\n\nThe controller derives from **TableController<T>**. This class inherits **ApiController**, but is specialized for Azure Mobile Services.\n\n- Routing: The default route for a **TableController** is `/tables/{table_name}/{id}`, where *table_name* matches the entity name. So the route for the Player controller is */tables/player/{id}*. This routing convention makes **TableController** consistent with the Mobile Services [REST API](http://msdn.microsoft.com/library/azure/jj710104.aspx).\n- Data access: For database operations, the **TableController** class uses the **IDomainManager** interface, which defines an abstraction for data access.  The scaffolding uses **EntityDomainManager**, which is a concrete implementation of **IDomainManager** that wraps an EF context.\n\nNow add a second controller for PlayerRank entities. Follow the same steps, but choose PlayerRank for the model class. Use the same data context class; don't create a new one. Name the controller \"PlayerRankController\".\n\n## Use a DTO to return related entities\n\nRecall that `PlayerRank` has a related `Player` entity:\n\n    public class PlayerRank : EntityData\n    {\n        public int Score { get; set; }\n        public int Rank { get; set; }\n\n        [ForeignKey(\"Id\")]\n        public virtual Player Player { get; set; }\n    }\n\nThe Mobile Service client library does not support navigation properties, and they will not be serialized. For example, here is the raw HTTP response for GET `/tables/PlayerRank`:\n\n\tHTTP/1.1 200 OK\n\tCache-Control: no-cache\n\tPragma: no-cache\n\tContent-Length: 97\n\tContent-Type: application/json; charset=utf-8\n\tExpires: 0\n\tServer: Microsoft-IIS/8.0\n\tDate: Mon, 21 Apr 2014 17:58:43 GMT\n\n\t[{\"id\":\"1\",\"rank\":1,\"score\":150},{\"id\":\"2\",\"rank\":3,\"score\":100},{\"id\":\"3\",\"rank\":1,\"score\":150}]\n\nNotice that `Player` is not included in the object graph. To include the player, we can flatten the object graph by defining a *data transfer object* (DTO).\n\nA DTO is an object that defines how data is sent over the network. DTOs are useful whenever you want the wire format to look different than your database model. To create a DTO for `PlayerRank`, add a new class named `PlayerRankDto` in the DataObjects folder.\n\n\tnamespace Leaderboard.DataObjects\n\t{\n\t    public class PlayerRankDto\n\t    {\n\t        public string Id { get; set; }\n\t        public string PlayerName { get; set; }\n\t        public int Score { get; set; }\n\t        public int Rank { get; set; }\n\t    }\n\t}\n\nIn the `PlayerRankController` class, we'll use the LINQ **Select** method to convert `PlayerRank` instances to `PlayerRankDto` instances. Update the `GetAllPlayerRank` and `GetPlayerRank` controller methods as follows:\n\n\t// GET tables/PlayerRank\n\tpublic IQueryable<PlayerRankDto> GetAllPlayerRank()\n\t{\n\t    return Query().Select(x => new PlayerRankDto()\n\t    {\n\t        Id = x.Id,\n\t        PlayerName = x.Player.Name,\n\t        Score = x.Score,\n\t        Rank = x.Rank\n\t    });\n\t}\n\n\t// GET tables/PlayerRank/48D68C86-6EA6-4C25-AA33-223FC9A27959\n\tpublic SingleResult<PlayerRankDto> GetPlayerRank(string id)\n\t{\n\t    var result = Lookup(id).Queryable.Select(x => new PlayerRankDto()\n\t    {\n\t        Id = x.Id,\n\t        PlayerName = x.Player.Name,\n\t        Score = x.Score,\n\t        Rank = x.Rank\n\t    });\n\n\t    return SingleResult<PlayerRankDto>.Create(result);\n\t}\n\nWith these changes, the two GET methods return `PlayerRankDto` objects to the client. The `PlayerRankDto.PlayerName` property is set to the player name. Here is an example response after making this change:\n\n\tHTTP/1.1 200 OK\n\tCache-Control: no-cache\n\tPragma: no-cache\n\tContent-Length: 160\n\tContent-Type: application/json; charset=utf-8\n\tExpires: 0\n\tServer: Microsoft-IIS/8.0\n\tDate: Mon, 21 Apr 2014 19:57:08 GMT\n\n\t[{\"id\":\"1\",\"playerName\":\"Alice\",\"score\":150,\"rank\":1},{\"id\":\"2\",\"playerName\":\"Bob\",\"score\":100,\"rank\":3},{\"id\":\"3\",\"playerName\":\"Charles\",\"score\":150,\"rank\":1}]\n\nNotice that the JSON payload now includes the player names.\n\nInstead of using LINQ Select statements, another option is to use AutoMapper. This option requires some additional setup code, but enables automatic mapping from domain entities to DTOs. For more information, see [Mapping between Database Types and Client Types in the .NET Backend using AutoMapper](http://blogs.msdn.com/b/azuremobile/archive/2014/05/19/mapping-between-database-types-and-client-type-in-the-net-backend-using-automapper.aspx).\n\n## Define a custom API to submit scores\n\nThe `PlayerRank` entity includes a `Rank` property. This value is calculated by the server, and we don't want clients setting it. Instead, clients will use a custom API to submit a player's score.  When the server gets a new score, it will update all of the player ranks.\n\nFirst, add a class named `PlayerScore` to the DataObjects folder.\n\n\tnamespace Leaderboard.DataObjects\n\t{\n\t    public class PlayerScore\n\t    {\n\t        public string PlayerId { get; set; }\n\t        public int Score { get; set; }\n\t    }\n\t}\n\nIn the `PlayerRankController` class, move the `MobileServiceContext` variable from the constructor to a class variable:\n\n    public class PlayerRankController : TableController<PlayerRank>\n    {\n        // Add this:\n        MobileServiceContext context = new MobileServiceContext();\n\n        protected override void Initialize(HttpControllerContext controllerContext)\n        {\n            base.Initialize(controllerContext);\n\n            // Delete this:\n            // MobileServiceContext context = new MobileServiceContext();\n            DomainManager = new EntityDomainManager<PlayerRank>(context, Request, Services);\n        }\n\n\nDelete the following methods from `PlayerRankController`:\n\n- `PatchPlayerRank`\n- `PostPlayerRank`\n- `DeletePlayerRank`\n\nThen add the following code to `PlayerRankController`:\n\n    [Route(\"api/score\")]\n    public async Task<IHttpActionResult> PostPlayerScore(PlayerScore score)\n    {\n        // Does this player exist?\n        var count = context.Players.Where(x => x.Id == score.PlayerId).Count();\n        if (count < 1)\n        {\n            return BadRequest();\n        }\n\n        // Try to find the PlayerRank entity for this player. If not found, create a new one.\n        PlayerRank rank = await context.PlayerRanks.FindAsync(score.PlayerId);\n        if (rank == null)\n        {\n            rank = new PlayerRank { Id = score.PlayerId };\n            rank.Score = score.Score;\n            context.PlayerRanks.Add(rank);\n        }\n        else\n        {\n            rank.Score = score.Score;\n        }\n\n        await context.SaveChangesAsync();\n\n        // Update rankings\n        // See http://stackoverflow.com/a/575799\n        const string updateCommand =\n            \"UPDATE r SET Rank = ((SELECT COUNT(*)+1 from {0}.PlayerRanks \" +\n            \"where Score > (select score from {0}.PlayerRanks where Id = r.Id)))\" +\n            \"FROM {0}.PlayerRanks as r\";\n\n        string command = String.Format(updateCommand, ServiceSettingsDictionary.GetSchemaName());\n        await context.Database.ExecuteSqlCommandAsync(command);\n\n        return Ok();\n    }\n\nThe `PostPlayerScore` method takes a `PlayerScore` instance as input. (The client will send the `PlayerScore` in an HTTP POST request.) The method does the following:\n\n1.\tAdds a new `PlayerRank` for the player, if there isn't one in the database already.\n2.\tUpdates the player's score.\n3.\tRun a SQL query that batch updates all of the player ranks.\n\nThe **[Route]** attribute defines a custom route for this method:\n\n\t[Route(\"api/score\")]\n\nYou could also put the method into a separate controller. There is no particular advantage either way, it just depends how you want to organize your code.\nTo learn more about the **[Route]** attribute, see [Attribute Routing in Web API](http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2).\n\n## Create the Windows Store app\n\nIn this section, I'll describe the Windows Store app that consumes the mobile service. However, I won't focus much on the XAML or the UI. Instead, I want to focus on the application logic. You can download the complete project [here](http://code.msdn.microsoft.com/Leaderboard-App-with-Azure-9acf63af).\n\nAdd a new Windows Store App project to the solution. I used the Blank App (Windows) template.\n\n![][10]\n\nUse NuGet Package Manager to add the Mobile Services client library. In Visual Studio, from the **Tools** menu, select **NuGet Package Manager**. Then select **Package Manager Console**. In the Package Manager Console window, type the following command.\n\n\tInstall-Package WindowsAzure.MobileServices -Project LeaderboardApp\n\nThe -Project switch specifies which project to install the package to.\n\n## Add model classes\n\nCreate a folder named Models and add the following classes:\n\n\tnamespace LeaderboardApp.Models\n\t{\n\t    public class Player\n\t    {\n\t        public string Id { get; set; }\n\t        public string Name { get; set; }\n\t    }\n\n\t    public class PlayerRank\n\t    {\n\t        public string Id { get; set; }\n\t        public string PlayerName { get; set; }\n\t        public int Score { get; set; }\n\t        public int Rank { get; set; }\n\t    }\n\n\t    public class PlayerScore\n\t    {\n\t        public string PlayerId { get; set; }\n\t        public int Score { get; set; }\n\t    }\n\t}\n\nThese classes correspond directly to the data entities in the mobile service.\n\n## Create a view model\n\nModel-View-ViewModel (MVVM) is a variant of Model-View-Controller (MVC). The MVVM pattern helps separate application logic from presentation.\n\n- The model represents the domain data (player, player rank, and player score).\n- The view model is an abstract representation of the view.\n- The view displays the view model and sends user input to the view model. For a Windows Store app, the view is defined in XAML.\n\n![][11]\n\nAdd a class named `LeaderboardViewModel`.\n\n\tusing LeaderboardApp.Models;\n\tusing Microsoft.WindowsAzure.MobileServices;\n\tusing System.ComponentModel;\n\tusing System.Net.Http;\n\tusing System.Threading.Tasks;\n\n\tnamespace LeaderboardApp.ViewModel\n\t{\n\t    class LeaderboardViewModel : INotifyPropertyChanged\n\t    {\n\t        MobileServiceClient _client;\n\n\t        public LeaderboardViewModel(MobileServiceClient client)\n\t        {\n\t            _client = client;\n\t        }\n\t    }\n\t}\n\nImplement **INotifyPropertyChanged** on the view model, so the view model can participate in data binding.\n\n    class LeaderboardViewModel : INotifyPropertyChanged\n    {\n        MobileServiceClient _client;\n\n        public LeaderboardViewModel(MobileServiceClient client)\n        {\n            _client = client;\n        }\n\n        // New code:\n        // INotifyPropertyChanged implementation\n        public event PropertyChangedEventHandler PropertyChanged;\n\n        public void NotifyPropertyChanged(string propertyName)\n        {\n            if (PropertyChanged != null)\n            {\n                PropertyChanged(this,\n                    new PropertyChangedEventArgs(propertyName));\n            }\n        }\n    }\n\nNext, add observable properties. The XAML will data bind to these properties.\n\n    class LeaderboardViewModel : INotifyPropertyChanged\n    {\n        // ...\n\n        // New code:\n        // View model properties\n        private MobileServiceCollection<Player, Player> _Players;\n        public MobileServiceCollection<Player, Player> Players\n        {\n            get { return _Players; }\n            set\n            {\n                _Players = value;\n                NotifyPropertyChanged(\"Players\");\n            }\n        }\n\n        private MobileServiceCollection<PlayerRank, PlayerRank> _Ranks;\n        public MobileServiceCollection<PlayerRank, PlayerRank> Ranks\n        {\n            get { return _Ranks; }\n            set\n            {\n                _Ranks = value;\n                NotifyPropertyChanged(\"Ranks\");\n            }\n        }\n\n        private bool _IsPending;\n        public bool IsPending\n        {\n            get { return _IsPending; }\n            set\n            {\n                _IsPending = value;\n                NotifyPropertyChanged(\"IsPending\");\n            }\n        }\n\n        private string _ErrorMessage = null;\n        public string ErrorMessage\n        {\n            get { return _ErrorMessage; }\n            set\n            {\n                _ErrorMessage = value;\n                NotifyPropertyChanged(\"ErrorMessage\");\n            }\n        }\n    }\n\nThe `IsPending` property is true while an async operation is pending on the service. The `ErrorMessage` property holds any error message from the service.\n\nFinally, add methods that call through to the service layer.\n\n    class LeaderboardViewModel : INotifyPropertyChanged\n    {\n        // ...\n\n        // New code:\n        // Service operations\n        public async Task GetAllPlayersAsync()\n        {\n            IsPending = true;\n            ErrorMessage = null;\n\n            try\n            {\n                IMobileServiceTable<Player> table = _client.GetTable<Player>();\n                Players = await table.OrderBy(x => x.Name).ToCollectionAsync();\n            }\n            catch (MobileServiceInvalidOperationException ex)\n            {\n                ErrorMessage = ex.Message;\n            }\n            catch (HttpRequestException ex2)\n            {\n                ErrorMessage = ex2.Message;\n            }\n            finally\n            {\n                IsPending = false;\n            }\n        }\n\n        public async Task AddPlayerAsync(Player player)\n        {\n            IsPending = true;\n            ErrorMessage = null;\n\n            try\n            {\n                IMobileServiceTable<Player> table = _client.GetTable<Player>();\n                await table.InsertAsync(player);\n                Players.Add(player);\n            }\n            catch (MobileServiceInvalidOperationException ex)\n            {\n                ErrorMessage = ex.Message;\n            }\n            catch (HttpRequestException ex2)\n            {\n                ErrorMessage = ex2.Message;\n            }\n            finally\n            {\n                IsPending = false;\n            }\n        }\n\n        public async Task SubmitScoreAsync(Player player, int score)\n        {\n            IsPending = true;\n            ErrorMessage = null;\n\n            var playerScore = new PlayerScore()\n            {\n                PlayerId = player.Id,\n                Score = score\n            };\n\n            try\n            {\n                await _client.InvokeApiAsync<PlayerScore, object>(\"score\", playerScore);\n                await GetAllRanksAsync();\n            }\n            catch (MobileServiceInvalidOperationException ex)\n            {\n                ErrorMessage = ex.Message;\n            }\n            catch (HttpRequestException ex2)\n            {\n                ErrorMessage = ex2.Message;\n            }\n            finally\n            {\n                IsPending = false;\n            }\n        }\n\n        public async Task GetAllRanksAsync()\n        {\n            IsPending = true;\n            ErrorMessage = null;\n\n            try\n            {\n                IMobileServiceTable<PlayerRank> table = _client.GetTable<PlayerRank>();\n                Ranks = await table.OrderBy(x => x.Rank).ToCollectionAsync();\n            }\n            catch (MobileServiceInvalidOperationException ex)\n            {\n                ErrorMessage = ex.Message;\n            }\n            catch (HttpRequestException ex2)\n            {\n                ErrorMessage = ex2.Message;\n            }\n            finally\n            {\n                IsPending = false;\n            }\n         }\n    }\n\n## Add a MobileServiceClient instance\n\nOpen the *App.xaml.cs*file and add a **MobileServiceClient** instance to the `App` class.\n\n\t// New code:\n\tusing Microsoft.WindowsAzure.MobileServices;\n\n\tnamespace LeaderboardApp\n\t{\n\t    sealed partial class App : Application\n\t    {\n\t        // New code.\n\t        // TODO: Replace 'port' with the actual port number.\n\t        const string serviceUrl = \"http://localhost:port/\";\n\t        public static MobileServiceClient MobileService = new MobileServiceClient(serviceUrl);\n\n\n\t        // ...\n\t    }\n\t}\n\nWhen you debug locally, the mobile service runs on IIS express. Visual Studio assigns a random port number, so the local URL is http://localhost:*port*, where *port* is the port number. To get the port number, start the service in Visual Studio by pressing F5 to debug. Visual Studio will launch a browser and navigate to the service URL.  You can also find the local URL in the project properties, under **Web**.\n\n## Create the main page\n\nIn the main page, add an instance of the view model. Then set the view model as the **DataContext** for the page.\n\n    public sealed partial class MainPage : Page\n    {\n        // New code:\n        LeaderboardViewModel viewModel = new LeaderboardViewModel(App.MobileService);\n\n        public MainPage()\n        {\n            this.InitializeComponent();\n            // New code:\n            this.DataContext = viewModel;\n        }\n\n       // ...\n\n\nAs I mentioned earlier, I won't show all of the XAML for the app. One benefit of the MVVM pattern is to separate presentation from app logic, so it's easy to change the UI, if you don't like the sample app.\n\nThe list of players is displayed in a **ListBox**:\n\n\t<ListBox Width=\"200\" Height=\"400\" x:Name=\"PlayerListBox\"\n\t    ItemsSource=\"{Binding Players}\" DisplayMemberPath=\"Name\"/>\n\nRankings are displayed in a **ListView**:\n\n\t<ListView x:Name=\"RankingsListView\" ItemsSource=\"{Binding Ranks}\" SelectionMode=\"None\">\n\t    <!-- Header and styles not shown -->\n\t    <ListView.ItemTemplate>\n\t        <DataTemplate>\n\t            <Grid>\n\t                <Grid.ColumnDefinitions>\n\t                    <ColumnDefinition Width=\"*\"/>\n\t                    <ColumnDefinition Width=\"2*\"/>\n\t                    <ColumnDefinition Width=\"*\"/>\n\t                </Grid.ColumnDefinitions>\n\t                <TextBlock Text=\"{Binding Path=Rank}\"/>\n\t                <TextBlock Text=\"{Binding Path=PlayerName}\" Grid.Column=\"1\"/>\n\t                <TextBlock Text=\"{Binding Path=Score}\" Grid.Column=\"2\"/>\n\t            </Grid>\n\t        </DataTemplate>\n\t    </ListView.ItemTemplate>\n\t</ListView>\n\nAll data binding happens through the view model.\n\n## Publish your mobile service\n\nIn this step, you will publish your mobile service to Microsoft Azure and modify the app to use the live service.\n\nIn Solution Explorer, right-click the Leaderboard project and select **Publish**.\n\n![][12]\n\nIn the **Publish** dialog, click **Azure Mobile Services**.\n\n![][13]\n\nIf you are not signed into your Azure account already, click **Sign In**.\n\n![][14]\n\n\nSelect an existing Mobile Service, or click **New** to create a new one. Then click **OK** to publish.\n\n![][15]\n\nThe publishing process automatically creates the database. You don't need to configure a connection string.\n\nNow you are ready to connect the leaderboard app to the live service. You need two things:\n\n- The URL of the service\n- The application key\n\nYou can get both from the Azure classic portal. In the portal, click **Mobile Services**, and then click the mobile service. The service URL is listed on the dashboard tab. To get the application key, click **Manage Keys**.\n\n![][16]\n\nIn the **Manage Access Keys** dialog, copy the value for the application key.\n\n![][17]\n\n\nPass the service URL and the application key to the **MobileServiceClient** constructor.\n\n    sealed partial class App : Application\n    {\n        // TODO: Replace these strings with the real URL and key.\n        const string serviceUrl = \"https://yourapp.azure-mobile.net/\";\n        const string appKey = \"YOUR ACCESSS KEY\";\n\n        public static MobileServiceClient MobileService = new MobileServiceClient(serviceUrl, appKey);\n\n       // ...\n\nNow when you run the app, it communicates with the real service.\n\n## Next Steps\n\n* [Learn more about Azure Mobile Services]\n* [Learn more about Web API]\n* [Handle database write conflicts]\n* [Add push notifications]; for example, when someone adds a new player or updates a score.\n* [Get started with authentication]\n\n<!-- Anchors. -->\n[Overview]: #overview\n[About the sample app]: #about-the-sample-app\n[Create the project]: #create-the-project\n[Add data models]: #add-data-models\n[Add Web API controllers]: #add-web-api-controllers\n[Use a DTO to return related entities]: #use-a-dto-to-return-related-entities\n[Define a custom API to submit scores]: #define-a-custom-api-to-submit-scores\n[Create the Windows Store app]: #create-the-windows-store-app\n[Add model classes]: #add-model-classes\n[Create a view model]: #create-a-view-model\n[Add a MobileServiceClient instance]: #add-a-mobileserviceclient-instance\n[Create the main page]: #create-the-main-page\n[Publish your mobile service]: #publish-your-mobile-service\n[Next Steps]: #next-steps\n\n<!-- Images. -->\n\n[1]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/01leaderboard.png\n[2]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/02leaderboard.png\n[3]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/03leaderboard.png\n[4]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/04leaderboard.png\n[5]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/05leaderboard.png\n[6]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/06leaderboard.png\n[7]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/07leaderboard.png\n[8]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/08leaderboard.png\n[9]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/09leaderboard.png\n[10]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/10leaderboard.png\n[11]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/11leaderboard.png\n[12]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/12leaderboard.png\n[13]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/13leaderboard.png\n[14]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/14leaderboard.png\n[15]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/15leaderboard.png\n[16]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/16leaderboard.png\n[17]: ./media/mobile-services-dotnet-backend-windows-store-dotnet-leaderboard/17leaderboard.png\n\n<!-- URLs. -->\n\n[Learn more about Azure Mobile Services]: https://azure.microsoft.com/develop/mobile/resources/\n[Learn more about Web API]: http://asp.net/web-api\n[Handle database write conflicts]: mobile-services-windows-store-dotnet-handle-database-conflicts.md\n[Add push notifications]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-store-dotnet-get-started-wns-push-notification/\n[Get started with authentication]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-users-dotnet\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-windows-store-dotnet-push-notifications-app-users.md",
    "content": "<properties\n\tpageTitle=\"Send push notifications to authenticated users (Universal Windows 8.1) | Azure Mobile Services\"\n\tdescription=\"Learn how to use Azure Mobile Services to send push notifications to a specific authenticated user running your Universal Windows 8.1 app.\"\n\tservices=\"mobile-services,notification-hubs\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Send push notifications to authenticated users\n> [AZURE.SELECTOR-LIST (Platform | Backend)]\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-push-notifications-app-users.md)\n- [(Windows 8.x Store C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-push-notifications-app-users.md)\n- [(Windows 8.x Store C# | JavaScript)](mobile-services-javascript-backend-windows-store-dotnet-push-notifications-app-users.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Overview\n\nThis topic shows you how to send push notifications to an authenticate user on any registered device. Unlike the previous [push notification][Get started with push notifications] tutorial, this tutorial changes your mobile service to require that a user be authenticated before the client can register with the notification hub for push notifications. Registration is also modified to add a tag based on the assigned user ID. Finally, the server code is updated to send the notification only to the authenticated user instead of to all registrations.\n\nThis tutorial supports both Windows Store and Windows Phone Store apps.\n\n## Prerequisites\n\nBefore you start this tutorial, you must have already completed these Mobile Services tutorials:\n\n+ [Get started with authentication]\nAdds a login requirement to the TodoList sample app.\n\n+ [Get started with push notifications]\nConfigures the TodoList sample app for push notifications by using Notification Hubs.\n\nAfter you have completed both tutorials, you can prevent unauthenticated users from registering for push notifications from your mobile service.\n\n## <a name=\"register\"></a>Update the service to require authentication to register\n\n\n1. In Solution Explorer in Visual Studio, expand the App_Start folder and open the WebApiConfig.cs project file.\n\n2. Add the following line of code to the Register method after the **ConfigOptions** definition:\n\n        options.PushAuthorization =\n            Microsoft.WindowsAzure.Mobile.Service.Security.AuthorizationLevel.User;\n\n\tThis enforces user authentication before registering for push notifications.\n\n2. Right-click the project, click **Add** then click **Class...**.\n\n3. Name the new empty class `PushRegistrationHandler` then click **Add**.\n\n4. At the top of the code page, add the following **using** statements:\n\n\t\tusing System.Threading.Tasks;\n\t\tusing System.Web.Http;\n\t\tusing System.Web.Http.Controllers;\n\t\tusing Microsoft.WindowsAzure.Mobile.Service;\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Notifications;\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\n5. Replace the existing **PushRegistrationHandler** class with the following code:\n\n\t    public class PushRegistrationHandler : INotificationHandler\n\t    {\n\t        public Task Register(ApiServices services, HttpRequestContext context,\n            NotificationRegistration registration)\n\t        {\n\t            try\n\t            {\n\t                // Perform a check here for user ID tags, which are not allowed.\n\t                if(!ValidateTags(registration))\n\t                {\n\t                    throw new InvalidOperationException(\n\t                        \"You cannot supply a tag that is a user ID.\");                    \n\t                }\n\n\t                // Get the logged-in user.\n\t                var currentUser = context.Principal as ServiceUser;\n\n\t                // Add a new tag that is the user ID.\n\t                registration.Tags.Add(currentUser.Id);\n\n\t                services.Log.Info(\"Registered tag for userId: \" + currentUser.Id);\n\t            }\n\t            catch(Exception ex)\n\t            {\n\t                services.Log.Error(ex.ToString());\n\t            }\n\t                return Task.FromResult(true);\n\t        }\n\n\t        private bool ValidateTags(NotificationRegistration registration)\n\t        {\n\t            // Create a regex to search for disallowed tags.\n\t            System.Text.RegularExpressions.Regex searchTerm =\n\t            new System.Text.RegularExpressions.Regex(@\"facebook:|google:|twitter:|microsoftaccount:\",\n\t                System.Text.RegularExpressions.RegexOptions.IgnoreCase);\n\n\t            foreach (string tag in registration.Tags)\n\t            {\n\t                if (searchTerm.IsMatch(tag))\n\t                {\n\t                    return false;\n\t                }\n\t            }\n\t            return true;\n\t        }\n\n\t        public Task Unregister(ApiServices services, HttpRequestContext context,\n\t            string deviceId)\n\t        {\n\t            // This is where you can hook into registration deletion.\n\t            return Task.FromResult(true);\n\t        }\n\t    }\n\n\tThe **Register** method is called during registration. This lets you add a tag to the registration that is the ID of the logged-in user. The supplied tags are validated to prevent a user from registering for another user's ID. When a notification is sent to this user, it is received on this and any other device registered by the user.\n\n6. Expand the Controllers folder, open the TodoItemController.cs project file, locate the **PostTodoItem** method and replace the line of code that calls **SendAsync** with the following code:\n\n        // Get the logged-in user.\n\t\tvar currentUser = this.User as ServiceUser;\n\n\t\t// Use a tag to only send the notification to the logged-in user.\n        var result = await Services.Push.SendAsync(message, currentUser.Id);\n\n7. Republish the mobile service project.\n\nNow, the service uses the user ID tag to send a push notification (with the text of the inserted item) to all registrations created by the logged-in user.\n\n\n## <a name=\"update-app\"></a>Update the app to log in before registration\n\n\nNext, you need to change the way that push notifications are registered to make sure that the user is authenticated before registration is attempted. The client app updates depend on the way in which you implemented push notifications.\n\n### Using the Add Push Notification Wizard in Visual Studio 2013 Update 2 or a later version\n\nIn this method, the wizard generated a new push.register.cs file in your project.\n\n1. In Visual Studio in Solution Explorer, open the app.xaml.cs project file and in the **OnLaunched** event handler comment-out or delete the call to the **UploadChannel** method.\n\n2. Open the push.register.cs project file and replace the **UploadChannel** method, with the following code:\n\n\t\tpublic async static void UploadChannel()\n\t\t{\n\t\t    var channel =\n\t\t        await Windows.Networking.PushNotifications.PushNotificationChannelManager\n\t\t        .CreatePushNotificationChannelForApplicationAsync();\n\n\t\t    try\n\t\t    {\n\t\t        // Create a native push notification registration.\n\t\t        await App.MobileService.GetPush().RegisterNativeAsync(channel.Uri);\t\t        \n\n\t\t    }\n\t\t    catch (Exception exception)\n\t\t    {\n\t\t        HandleRegisterException(exception);\n\t\t    }\n\t\t}\n\n\tThis makes sure that registration is done using the same client instance that has the authenticated user credentials. Otherwise, registration will fail with an Unauthorized (401) error.\n\n3. Open the shared MainPage.cs project file, and replace the **ButtonLogin_Click** handler with the following:\n\n        private async void ButtonLogin_Click(object sender, RoutedEventArgs e)\n        {\n            // Login the user and then load data from the mobile service.\n            await AuthenticateAsync();\n\t\t\ttodolistPush.UploadChannel();\n\n            // Hide the login button and load items from the mobile service.\n            this.ButtonLogin.Visibility = Windows.UI.Xaml.Visibility.Collapsed;\n            await RefreshTodoItems();\n        }\n\n\tThis makes sure that authentication occurs before push registration is attempted.\n\n4. \tIn the previous code, replace the generated push class name (`todolistPush`) with the name of class generated by the wizard, usually in the format <code><em>mobile_service</em>Push</code>.\n\n### Manually enabled push notifications\t\t\n\nIn this method, you added registration code from the tutorial directly to the app.xaml.cs project file.\n\n1. In Visual Studio in Solution Explorer, open the app.xaml.cs project file and in the **OnLaunched** event handler comment-out or delete the call to **InitNotificationsAsync**.\n\n2. Change the accessibility of the **InitNotificationsAsync** method from `private` to `public` and add the `static` modifier.\n\n3. Open the shared MainPage.cs project file, and replace the **ButtonLogin_Click** handler with the following:\n\n        private async void ButtonLogin_Click(object sender, RoutedEventArgs e)\n        {\n            // Login the user and then load data from the mobile service.\n            await AuthenticateAsync();\n\t\t\tApp.InitNotificationsAsync();\n\n            // Hide the login button and load items from the mobile service.\n            this.ButtonLogin.Visibility = Windows.UI.Xaml.Visibility.Collapsed;\n            await RefreshTodoItems();\n        }\n\n\tThis makes sure that authentication occurs before push registration is attempted.\n\n## <a name=\"test\"></a>Test the app\n\n\n1. In Visual Studio, press the F5 key to run the app.\n\n2. Log in using the selected identity provider and verify that authentication succeeds.\n\n3. In the app, type text in **Insert a TodoItem**, and then click **Save**.\n\n   \tNote that after the insert completes, the app receives a push notification from WNS.\n\n4. (Optional) Repeat steps 1-3 on a different client device and using a different account when logging in.  \n\n\tVerify that the notification is received only on this device, since the previous device was not tagged with the current user ID.\n\n\n\n<!-- Anchors. -->\n[Updating the service to require authentication for registration]: #register\n[Updating the app to log in before registration]: #update-app\n[Testing the app]: #test\n[Next Steps]:#next-steps\n\n\n<!-- URLs. -->\n[Get started with authentication]: mobile-services-dotnet-backend-windows-store-dotnet-get-started-users.md\n[Get started with push notifications]: mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-windows-universal-dotnet-get-started-data.md",
    "content": "<properties\n\tpageTitle=\"Add Mobile Services to an existing universal Windows Store app | Microsoft Azure\"\n\tdescription=\"Learn how to get started using Mobile Services to leverage data in your Windows Store app.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Add Mobile Services to an existing app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-data.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-data.md)\n- [(Android | Javascript)](mobile-services-android-get-started-data.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Overview\n\nThis topic shows you how to use Azure Mobile Services as a backend data source for a Windows Store app. In this tutorial, you will download a Visual Studio 2013 project for an app that stores data in memory, create a new mobile service, integrate the mobile service with the app, and view the changes to data made when running the app.\n\nThe mobile service that you will create in this tutorial is a .NET backend mobile service. .NET backend enables you to use .NET languages and Visual Studio for server-side business logic in the mobile service, and you can run and debug your mobile service on your local computer. To create a mobile service that lets you write your server-side business logic in JavaScript, see the JavaScript backend version of this topic.\n\n>[AZURE.NOTE]This topic shows you how to use the tooling in Visual Studio Professional 2013 with Update 3 to connect a new mobile service to a universal Windows app. The same steps can be used to connect a mobile service to a Windows Store or Windows Phone Store 8.1 app. To connect a mobile service to a Windows Phone 8.0 or Windows Phone Silverlight 8.1 app, see [Get started with data for Windows Phone](mobile-services-windows-phone-get-started-data.md).\n\n## Prerequisites\n\nTo complete this tutorial, you need the following:\n\n* An active Azure account. If you don't have an account, you can create a free trial account in just a couple of minutes. For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=A0E0E5C02&amp;returnurl=http%3A%2F%2Fazure.microsoft.com%2Fdocumentation%2Farticles%2Fmobile-services-dotnet-backend-windows-universal-dotnet-get-started-data%2F).\n* <a href=\"https://go.microsoft.com/fwLink/p/?LinkID=391934\" target=\"_blank\">Visual Studio 2013</a> (Update 3 or a later version).\n\n## Download the GetStartedWithData project\n\n\nThis tutorial is built on the [GetStartedWithMobileServices app](http://go.microsoft.com/fwlink/p/?LinkID=510826), which is a universal Windows app project in Visual Studio 2013. The UI for this app is identical to the app generated by the Mobile Services quickstart, except that added items are stored locally in memory.\n\n1. Download the C# version of the GetStartedWithMobileServices sample app from the [Developer Code Samples site].\n\n2. In Visual Studio 2013, open the downloaded project and examine the MainPage.xaml.cs file found in the GetStartedWithData.Shared project folder.\n\n   \tNotice that added **TodoItem** objects are stored in an in-memory **ObservableCollection&lt;TodoItem&gt;**.\n\n3. Press the **F5** key to rebuild the project and start the app.\n\n4. In the app, type some text in **Insert a TodoItem**, then click **Save**.\n\n   \t![](./media/mobile-services-windows-universal-dotnet-download-project/mobile-quickstart-startup.png)\n\n   \tNotice that the saved text is displayed.\n\n5. Right-click the Windows Phone 8.1 project, click **Set as Start-up Project**, then press **F5** to start the Windows Phone Store app.  \n\n\t![](./media/mobile-services-windows-universal-dotnet-download-project/mobile-quickstart-startup-wp8.png)\n\n6. Repeat steps 3 and 4 to verify that the sample behaves the same way.\n\n## Create a new mobile service from Visual Studio\n\n\n\nThe following steps create a new mobile service in Azure and add code to your project that connects your app to this new service. Visual Studio 2013 connects to Azure on your behalf to create the new mobile service by using the credentials that you provide. When you create a new mobile service, you must specify an Azure SQL Database that is used by the mobile service to store app data.\n\n1. In Visual Studio 2013, open Solution Explorer, right-click the Windows Store app project, click **Add**, and then click **Connected Service...**. \n\n2. In the Services Manager dialog, click **Create service...**, then select **&lt;Manage...&gt;** from  **Subscription** in the Create Mobile Service dialog.  \n\n\t![create service manage subscriptions](./media/mobile-services-dotnet-backend-create-new-service-vs2013/mobile-create-service-from-vs2013.png)\n\n3. In Manage Microsoft Azure Subscriptions, click **Sign In...** to sign in to your Azure account (if required), select an available subscription, then click **Close**.\n\n\tWhen your subscription already has one or more existing mobile services, the service names are displayed.\n\n5. Back in the **Create Mobile Service** dialog, select your **Subscription**, the **.NET Framework** backend  in **Runtime** and a **Region** for your mobile service, then type a **Name** for your mobile service.\n\n\t>[AZURE.NOTE]Mobile service names must be unique. A red X is displayed next to **Name** when the name you supplied is not available.\n\n6. In **Database**, select **&lt;Create a free SQL Database&gt;**, supply the **Server user name**, **Server password**, and **Server password confirmation** then click **Create**.\n\n  \t![create new mobile service in VS 2013](./media/mobile-services-dotnet-backend-create-new-service-vs2013/mobile-create-service-from-vs2013-2.png)\n\n\t> [AZURE.NOTE]\n\t> As part of this tutorial, you create a new free SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. You can only have one free database instance. If you already have a database in the same region as the new mobile service, you can instead choose the existing database. When you choose an existing database, make sure that you supply correct login credentials. If you supply incorrect login credentials, the mobile service is created in an unhealthy state.\n\n7. After the mobile service is created, select the newly created mobile service from the list in Service Manager and click **OK**.\n\n   \tAfter the wizard completes, the mobile service project is added to your solution, the required NuGet packages are installed, a reference to the Mobile Services client library is added to the project, and your project source code is updated.\n\n\n&nbsp;&nbsp;7. In Solution Explorer, open the App.xaml.cs code file in the GetStartedWithData.Shared project folder, and notice the new static field that was added to the **App** class inside a Windows Store app conditional compilation block, which looks like the following example:\n\n\tpublic static Microsoft.WindowsAzure.MobileServices.MobileServiceClient\n\t    todolistClient = new Microsoft.WindowsAzure.MobileServices.MobileServiceClient(\n\t        \"https://todolist.azure-mobile.net/\",\n\t        \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\");\n\n\n&nbsp;&nbsp;This code provides access to your new mobile service in your app by using an instance of the [MobileServiceClient](http://go.microsoft.com/fwlink/p/?LinkId=302030) class. The client is created by supplying the URI and the application key of the new mobile service. This static field is available to all pages in your app.\n\n&nbsp;&nbsp;8. Right-click the Windows Phone app project, click **Add**, click **Connected Service...**, select the mobile service that you just created, and then click **OK**. The same code is added to the shared App.xaml.cs file, but this time within a Windows Phone app conditional compilation block.\n\nAt this point, both the Windows Store and Windows Phone Store apps are connected to the new mobile service. The next step is to test the new mobile service project.\n\n\n## Test the mobile service project locally\n\n\n1. In Visual Studio in Solution Explorer, right click the service project and click **Start new instance** under the **Debug** context menu.\n\n    ![start mobile service project locally](./media/mobile-services-dotnet-backend-test-local-service-api-documentation/vs-start-debug-service-project.png)\n\n    Visual Studio opens the default web page for your service. By default, Visual Studio hosts your mobile service locally in IIS Express.\n\n2. Right-click the tray icon for IIS Express on the Windows taskbar and verify that your mobile service has started.\n\n\t ![verify the mobile service in the taskbar](./media/mobile-services-dotnet-backend-test-local-service-api-documentation/iis-express-tray.png)\n\n3. On the start page of your .NET backend, click **try it out**.\n\n    ![mobile service start up page](./media/mobile-services-dotnet-backend-test-local-service-api-documentation/service-welcome-page.png)\n\n    This displays the API documentation page, which you can use to test the mobile service.\n\n\t>[AZURE.NOTE]Authentication is not required to access this page when running locally. When running in Azure, you must supply the application key as the password (with no username) to access this page.\n\n4. Click the **GET tables/TodoItem** link.\n\n\t![](./media/mobile-services-dotnet-backend-test-local-service-api-documentation/service-api-documentation-page.png)\n\n\tThis displays the GET response page for the API.\n\n5. Click **try this out** and then click **send**.\n\n\t![](./media/mobile-services-dotnet-backend-test-local-service-api-documentation/service-try-this-out-get-todoitems.png)\n\n\tThis sends a GET request to the local mobile service to return all rows in the TodoItem table. Because the table is seeded by the initializer, two TodoItem objects are returned in the body of the response message. For more information about initializers, see [How to make data model changes to a .NET backend mobile service](mobile-services-dotnet-backend-how-to-use-code-first-migrations.md).\n\n\t![](./media/mobile-services-dotnet-backend-test-local-service-api-documentation/service-try-this-out-get-response.png)\n\n\n## Update the app to use the mobile service\n\nIn this section you will update the universal Windows app to use the mobile service as a backend service for the application. You only need to make changes to the MainPage.cs project file in the GetStartedWithData.Shared project folder.\n\n\n2. Replace the TodoItem class definition with the following code:\n\n\t    public class TodoItem\n\t    {\n\t        public string Id { get; set; }\n\n\t        [Newtonsoft.Json.JsonProperty(PropertyName = \"text\")]  \n\t        public string Text { get; set; }\n\n\t        [Newtonsoft.Json.JsonProperty(PropertyName = \"complete\")]  \n\t        public bool Complete { get; set; }\n\t    }\n\n\tThe **JsonPropertyAttribute** is used to define the mapping between property names in the client type to column names in the underlying data table.\n\n\t>[AZURE.NOTE] In a universal Windows app project, the TodoItem class is defined in the seperate code file in the shared DataModel folder.\n\n1. In the file MainPage.cs, add or uncomment the following using statements:\n\n\t\tusing Microsoft.WindowsAzure.MobileServices;\n\n\n4. Comment-out or delete the line that defines the existing items collection, then uncomment or add the following lines, replacing _&lt;yourClient&gt;_ with the `MobileServiceClient` field added to the App.xaml.cs file when you connected your project to the mobile service:\n\n\t\tprivate MobileServiceCollection<TodoItem, TodoItem> items;\n\t\tprivate IMobileServiceTable<TodoItem> todoTable =\n\t\t    App.<yourClient>.GetTable<TodoItem>();\n\n\tThis code creates a mobile services-aware binding collection (items) and a proxy class for the database table (todoTable).\n\n\n4. In the **InsertTodoItem** method, remove the line of code that sets the **TodoItem.Id** property, add the **async** modifier to the method, and uncomment the following line of code:\n\n\t\tawait todoTable.InsertAsync(todoItem);\n\n\n\tThis code inserts a new item into the table.\n\n5. Replace the **RefreshTodoItems** method with the following code:\n\n\t\tprivate async void RefreshTodoItems()\n        {\n            MobileServiceInvalidOperationException exception = null;\n            try\n            {\n                // Query that returns all items.   \n                items = await todoTable.ToCollectionAsync();             \n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                exception = e;\n            }\n            if (exception != null)\n            {\n                await new MessageDialog(exception.Message, \"Error loading items\").ShowAsync();\n            }\n            else\n            {\n                ListItems.ItemsSource = items;\n                this.ButtonSave.IsEnabled = true;\n            }    \n        }\n\n\tThis sets the binding to the collection of items in `todoTable`, which contains all of the **TodoItem** objects returned from the mobile service. If there is a problem executing the query, a message box is raised to display the errors.\n\n6. In the **UpdateCheckedTodoItem** method, add the **async** modifier to the method, and uncomment the following line of code:\n\n\t\tawait todoTable.UpdateAsync(item);\n\n\tThis sends an item update to the mobile service.\n\nNow that the app has been updated to use Mobile Services for backend storage, it's time to test the app against Mobile Services.\n\n\n## Publish the mobile service to Azure\n\n\n1. In Visual Studio, right-click the project, click **Publish** > **Microsoft Azure Mobile Services**. Instead of using Visual Studio, [you may also use Git](./\nmobile-services-dotnet-backend-store-code-source-control.md).\n\n2. Sign in with Azure credentials and select your service from **Existing Mobile Services**. Visual Studio downloads your publish settings directly from Azure. Finally, click **Publish**.\n\n\n## Test the mobile service hosted in Azure\n\nNow we can test both versions of the universal Windows app against the mobile service hosted in Azure.\n\n\n1. Press the F5 key to rebuild the project and start the Windows Store app.\n\n2. In the app, type meaningful text, such as *Complete the tutorial*, in **Insert a TodoItem**, and then click **Save**.\n\n\t![](./media/mobile-services-windows-universal-test-app/mobile-quickstart-startup.png)\n\n\tThis sends a POST request to the new mobile service hosted in Azure.\n\n3. Stop debugging and change the default start up project in the universal Windows solution to the Windows Phone Store app and press F5 again.\n\n\t![](./media/mobile-services-windows-universal-test-app/mobile-quickstart-completed-wp8.png)\n\n\tNotice that data saved from the previous step is loaded from the mobile service after the app starts.\n\n## View the data stored in the SQL Database\n\n\nThe final optional step of this tutorial is to check in the SQL Database associated with the mobile service an review the stored data.\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click manage for the database associated with your mobile service.\n\n\t![sign-in to manage SQL Database](./media/mobile-services-dotnet-backend-view-sql-data/manage-sql-azure-database.png)\n\n2. In the portal execute a query to view the changes made by the Windows Store app. Your query will be similar to the following query but use your database name instead of <code>todolist</code>.</p>\n\n        SELECT * FROM [todolist].[todoitems]\n\n    ![query SQL Database for stored items](./media/mobile-services-dotnet-backend-view-sql-data/sql-azure-query.png)\n\n\tNote that the table includes Id, __createdAt, __updatedAt, and __version columns. These columns support offline data sync and are implemented in the [EntityData](http://msdn.microsoft.com/library/microsoft.windowsazure.mobile.service.entitydata.aspx) base class. For more information, see [Get started with offline data sync].\n\nThis concludes the tutorial.\n\n## Next steps\n\nThis tutorial demonstrated the basics of enabling a universal Windows app project to work with data in Mobile Services. Next, consider reading up on one of these other topics:\n\n* [Get started with authentication]\n  <br/>Learn how to authenticate users of your app.\n\n* [Get started with push notifications]\n  <br/>Learn how to send a very basic push notification to your app.\n\n* [Mobile Services C# How-to Conceptual Reference](mobile-services-dotnet-how-to-use-client-library.md)\n  <br/>Learn more about how to use Mobile Services with .NET.\n\n\n<!-- Images. -->\n\n\n\n<!-- URLs. -->\n[Validate and modify data with scripts]: https://azure.microsoft.com/develop/mobile/tutorials/validate-modify-and-augment-data-dotnet\n[Refine queries with paging]: https://azure.microsoft.com/develop/mobile/tutorials/add-paging-to-data-dotnet\n[Get started with Mobile Services]: mobile-services-dotnet-backend-windows-store-dotnet-get-started.md\n[Get started with authentication]: mobile-services-dotnet-backend-windows-store-dotnet-get-started-users.md\n[Get started with push notifications]: mobile-services-dotnet-backend-windows-store-dotnet-get-started-push.md\n\n[Get started with offline data sync]: mobile-services-windows-store-dotnet-get-started-offline-data.md\n\n[Mobile Services SDK]: http://go.microsoft.com/fwlink/p/?LinkId=257545\n[Developer Code Samples site]:  http://go.microsoft.com/fwlink/p/?LinkID=510826\n[Mobile Services .NET How-to Conceptual Reference]: mobile-services-windows-dotnet-how-to-use-client-library.md\n[MobileServiceClient class]: http://go.microsoft.com/fwlink/p/?LinkId=302030\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md",
    "content": "<properties\n\tpageTitle=\"Add push notifications to your universal Windows 8.1 app | Microsoft Azure\"\n\tdescription=\"Learn how to send push notifications to your universal Windows 8.1 app from your .NET backend mobile service using Azure Notification Hubs.\"\n\tservices=\"mobile-services,notification-hubs\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows-store\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Add push notifications to your Mobile Services app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-push.md)\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-javascript-backend-windows-phone-get-started-push.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started-push.md)\n- [(Android | Javascript)](mobile-services-javascript-backend-android-get-started-push.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-push.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-push.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-push.md)\n- [(Xamarin.Forms | JavaScript)](partner-xamarin-mobile-services-xamarin-forms-get-started-push.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Overview\nThis topic shows you how to use Azure Mobile Services with a .NET backend to send push notifications to a universal Windows app. In this tutorial you enable push notifications using Azure Notification Hubs in a universal Windows app project. When complete, your mobile service will send a push notification from the .NET backend to all registered Windows Store and Windows Phone Store apps each time a record is inserted in the TodoList table. The notification hub that you create is free with your mobile service, can be managed independent of the mobile service, and can be used by other applications and services.\n\nTo complete this tutorial, you need the following:\n\n* An active [Microsoft Store account](http://go.microsoft.com/fwlink/p/?LinkId=280045).\n* [Visual Studio Community 2013](https://go.microsoft.com/fwLink/p/?LinkID=391934).\n\n## <a id=\"register\"></a>Register your app for push notifications\n\nThe following steps registers your app with the Windows Store, configure your mobile service to enable push notifications, and add code to your app to register a device channel with your notification hub. Visual Studio 2013 connects to Azure and to the Windows Store by using the credentials that you provide.\n\n1. In Visual Studio 2013, open Solution Explorer, right-click the Windows Store app project, click **Add** then **Push Notification...**. \n\n\t![Add Push Notification wizard in Visual Studio 2013](./media/mobile-services-create-new-push-vs2013/mobile-add-push-notifications-vs2013.png)\n\n\tThis starts the Add Push Notification Wizard.\n\n2. Click **Next**, sign in to your Windows Store account, then supply a name in **Reserve a new name** and click **Reserve**.\n\n\tThis creates a new app registration.\n\n3. Click the new registration in the **App Name** list, then click **Next**.\n\n4. In the **Select a service** page, click the name of your mobile service, then click **Next** and **Finish**.\n\n\tThe notification hub used by your mobile service is updated with the Windows Notification Services (WNS) registration. You can now use Azure Notification Hubs to send notifications from Mobile Services to your app by using WNS.\n\n\t>[AZURE.NOTE]This tutorial demonstrates sending notifications from a mobile service backend. You can use the same notification hub registration to send notifications from any backend service. For more information, see [Notification Hubs Overview](http://msdn.microsoft.com/library/azure/jj927170.aspx).\n\n5. When you complete the wizard, a new **Push setup is almost complete** page is opened in Visual Studio. This page details an alternate method to configure your mobile service project to send notifications that is different from this tutorial.\n\n\tThe code that is added to your universal Windows app solution by the Add Push Notification wizard is platform-specific. Later in this section, you will remove this redundancy by sharing the Mobile Services client code, which makes the universal app easier to maintain.  \n\n<!-- URLs. -->\n[Get started with Mobile Services]: https://azure.microsoft.com/develop/mobile/tutorials/get-started/\n[Get started with data]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-data-dotnet/\n\n&nbsp;&nbsp;6. Browse to the `\\Services\\MobileServices\\your_service_name` project folder, open the generated push.register.cs code file, and inspect the **UploadChannel** method that registers the device's channel URL with the notification hub.\n\n&nbsp;&nbsp;7. Open the shared App.xaml.cs code file and notice that a call to the new **UploadChannel** method was added in the **OnLaunched** event handler. This makes sure that registration of the device is attempted whenever the app is launched.\n\n&nbsp;&nbsp;8. Repeat the previous steps to add push notifications to the Windows Phone Store app project, then in the shared App.xaml.cs file, remove the extra call to **UploadChannel** and the remaining `#if...#endif` conditional wrapper. Both projects can now share a single call to **UploadChannel**.\n\n> [AZURE.NOTE] You can also simplify the generated code by unifying the `#if...#endif` wrapped [MobileServiceClient](http://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobileservices.mobileserviceclient.aspx) definitions into a single unwrapped definition used by both versions of the app.\n\nNow that push notifications are enabled in the app, you must update the mobile service to send push notifications.\n\n## <a id=\"update-service\"></a>Update the service to send push notifications\n\nThe following steps update the existing TodoItemController class to send a push notification to all registered devices when a new item is inserted. You can implement similar code in any custom [ApiController](https://msdn.microsoft.com/library/system.web.http.apicontroller.aspx), [TableController](https://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobile.service.tables.tablecontroller.aspx), or anywhere else in your backend services.\n\n\n1. In Visual Studio Solution Explorer, expand the **Controllers** folder in the mobile service project. Open TodoItemController.cs and update the `PostTodoItem` method definition with the following code:  \n\n        public async Task<IHttpActionResult> PostTodoItem(TodoItem item)\n        {\n            TodoItem current = await InsertAsync(item);\n\n            // Create a WNS native toast.\n            WindowsPushMessage message = new WindowsPushMessage();\n\n            // Define the XML paylod for a WNS native toast notification\n\t\t\t// that contains the text of the inserted item.\n            message.XmlPayload = @\"<?xml version=\"\"1.0\"\" encoding=\"\"utf-8\"\"?>\" +\n                                 @\"<toast><visual><binding template=\"\"ToastText01\"\">\" +\n                                 @\"<text id=\"\"1\"\">\" + item.Text + @\"</text>\" +\n                                 @\"</binding></visual></toast>\";\n            try\n            {\n                var result = await Services.Push.SendAsync(message);\n                Services.Log.Info(result.State.ToString());\n            }\n            catch (System.Exception ex)\n            {\n                Services.Log.Error(ex.Message, null, \"Push.SendAsync Error\");\n            }\n            return CreatedAtRoute(\"Tables\", new { id = current.Id }, current);\n        }\n\n    This code sends a push notification (with the text of the inserted item) after inserting a todo item. In the event of an error, the code will add an error log entry which is viewable on the **Logs** tab of the mobile service in the [Azure classic portal](https://manage.windowsazure.com/).\n\n\t>[AZURE.NOTE] You can use template notifications to send a single push notification to clients on multiple platforms. For more information, see [Supporting multiple device platforms from a single mobile service](mobile-services-how-to-use-multiple-clients-single-service.md#push).\n\n2. Republish the mobile service project to Azure.\n\n\n\n## <a id=\"local-testing\"></a> Enable push notifications for local testing\n\n\nYou can optionally test push notifications with your mobile service running on the local computer or VM before you publish to Azure. To do this, you must set information about the notification hub used by your app in the web.config file. This information is only used when running locally to connect to the notification hub; it is ignored when published to Azure.\n\n1. Open the readme.html file in the mobile service project folder.\n\n\tThis displays the **Push setup is almost complete** page, if you don't still have it open. The section **Step 3: Modify Web Config** contains the notification hub connection information.\n\n2. In your mobile service project in Visual Studio, open the Web.config file for the service, then in **connectionStrings**, add the **MS_NotificationHubConnectionString** connection string from the **Push setup is almost complete** page.\n\n3. In **appSettings**, replace the value of the **MS_NotificationHubName** app setting with the name of the notification hub found in the **Push setup is almost complete** page.\n\n4. Right-click the mobile service project and click **Debug** then **Start new instance** and make a note of the service root URL of the start up page displayed in the browser.\n\n\tThis is the URL of the local host for the .NET backend project. You will use this URL to test the app against the mobile service running on the local computer.\n\nNow, the mobile service project is configured to connect to the notification hub in Azure when running locally. Note that it is important to use the same notification hub name and connection string as the portal because these project settings in the Web.config file are overridden by the portal settings when running in Azure.\n\nThe remaining steps in this section are optional. They allow you to test your app against your mobile service running on a local computer. If you plan to test push notifications using the mobile service running in Azure, you can just skip to the last section. This is because the Add Push Notification wizard already configured your app to connect to your service running in Azure.\n\n>[AZURE.NOTE]Never use a production mobile service for testing and development work. Always publish your mobile service project to a separate staging service for testing.\n\n&nbsp;&nbsp;5. Open the shared App.xaml.cs project file and locate any the lines of code that create a new instance of the [MobileServiceClient] class to access the mobile service running in Azure.\n\n&nbsp;&nbsp;6. Comment-out this code and add code that creates a new [MobileServiceClient] of the same name but using the URL of the local host in the constructor, similar to the following:\n\n\t// This MobileServiceClient has been configured to communicate with your local\n\t// test project for debugging purposes.\n\tpublic static MobileServiceClient todolistClient = new MobileServiceClient(\n\t\t\"http://localhost:4584\"\n\t);\n\n&nbsp;&nbsp;Using this [MobileServiceClient], the app will connect to the local service instead of the version hosted in Azure. When you want to switch back and run app against the mobile service hosted in Azure, change back to the original [MobileServiceClient] definitions.\n\n## <a id=\"test\"></a> Test push notifications in your app\n\n\n1. Right-click the Windows Store project, click **Set as StartUp Project**, then press the F5 key to run the Windows Store app.\n\n\tAfter the app starts, the device is registered for push notifications.\n\n2. Stop the Windows Store app and repeat the previous step to run the Windows Phone Store app.\n\n\tAt this point, both devices are registered to receive push notifications.\n\n3. Run the Windows Store app again, and type text in **Insert a TodoItem**, and then click **Save**.\n\n   \t![](./media/mobile-services-javascript-backend-windows-universal-test-push/mobile-quickstart-push1.png)\n\n   \tNote that after the insert completes, both the Windows Store and the Windows Phone apps receive a push notification from WNS.\n\n   \t![](./media/mobile-services-javascript-backend-windows-universal-test-push/mobile-quickstart-push2.png)\n\n\tThe notification is displayed on Windows Phone even when the app isn't running.\n\n   \t![](./media/mobile-services-javascript-backend-windows-universal-test-push/mobile-quickstart-push5-wp8.png)\n\n\n## <a name=\"next-steps\"> </a>Next steps\n\nThis tutorial demonstrated the basics of enabling a Windows Store app to use Mobile Services and Notification Hubs to send push notifications. Next, consider completing the next tutorial, [Send push notifications to authenticated users], which shows how to use tags to send push notifications from a Mobile Service to only an authenticated user.\n\nLearn more about Mobile Services and Notification Hubs in the following topics:\n\n* [Add Mobile Services to an existing app][Get started with data]\n  <br/>Learn more about storing and querying data using mobile services.\n\n* [Add authentication to your app][Get started with authentication]\n  <br/>Learn how to authenticate users of your app with different account types using mobile services.\n\n* [What are Notification Hubs?]\n  <br/>Learn more about how Notification Hubs works to deliver notifications to your apps across all major client platforms.\n\n* [Debug Notification Hubs applications](http://go.microsoft.com/fwlink/p/?linkid=386630)\n  </br>Get guidance troubleshooting and debugging Notification Hubs solutions.\n\n* [How to use a .NET client for Azure Mobile Services]\n  <br/>Learn more about how to use Mobile Services from C# Windows apps.\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[My Applications]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n[Live SDK for Windows]: http://go.microsoft.com/fwlink/p/?LinkId=262253\n[Get started with Mobile Services]: mobile-services-dotnet-backend-windows-store-dotnet-get-started.md\n[Get started with data]: mobile-services-dotnet-backend-windows-universal-dotnet-get-started-data.md\n[Get started with authentication]: mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md\n\n[Send push notifications to authenticated users]: mobile-services-dotnet-backend-windows-store-dotnet-push-notifications-app-users.md\n\n[What are Notification Hubs?]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-push-notification-overview/\n\n[How to use a .NET client for Azure Mobile Services]: mobile-services-windows-dotnet-how-to-use-client-library.md\n[MobileServiceClient]: http://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobileservices.mobileserviceclient.aspx\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md",
    "content": "<properties\n\tpageTitle=\"Add authentication to your Universal Windows 8.1 app | Microsoft Azure\"\n\tdescription=\"Learn how to use Mobile Services to authenticate users of your Universal Windows 8.1 app by using various identity providers, including Google, Facebook, Twitter, and Microsoft.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Add authentication to your Mobile Services app\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-users.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-users.md)\n- [(Android | Javascript)](mobile-services-android-get-started-users.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started-users.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-users.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-users.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-users.md)\n- [(HTML | Javascript)](mobile-services-html-get-started-users.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Overview\n\nThis topic shows you how to authenticate users in Azure Mobile Services from your universal Windows app. In this tutorial, you add authentication to the quickstart project using an identity provider that is supported by Mobile Services. After being successfully authenticated and authorized by Mobile Services, the user ID value is displayed.\n\nThis tutorial is based on the Mobile Services quickstart. You must also first complete the tutorial [Get started with Mobile Services] or [Add Mobile Services to an existing app](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-data.md).\n\n>[AZURE.NOTE]This tutorial shows you how to use server-directed authentication for users in Windows Store and Windows Phone Store 8.1 apps. Fore information about client-directed authentication, see [Logging in with Google, Microsoft and Facebook SDKs to Azure Mobile Services](https://azure.microsoft.com/blog/2014/10/27/logging-in-with-google-microsoft-and-facebook-sdks-to-azure-mobile-services/).\n\n## <a name=\"register\"></a>Register your app for authentication and configure Mobile Services\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Dashboard**, and make a note of the **Mobile Service URL** value.\n\n2. Register your app with one or more of the following authentication providers:\n   * [Google](./\nmobile-services-how-to-register-google-authentication.md)\n   * [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n   * [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n   * [Microsoft](./\nmobile-services-how-to-register-microsoft-authentication.md)\n   * [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md).\n\n    Make a note of the client identity and client secret values generated by the provider. Do not distribute or share the client secret.\n\n3. Back in the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Identity** > your identity provider settings, then enter the client ID and secret value from your provider.\n\nYou've now configured both your app and your mobile service to work with your auth provider. You may optionally repeat all these steps for each additional identity provider you'd like to support.\n\n> [AZURE.IMPORTANT] Verify that you've set the correct redirect URI on your identity provider's developer site. As described in the linked instructions for each provider above, the redirect URI may be different for a .NET backend service vs. for a JavaScript backend service. An incorrectly configured redirect URI may result in the login screen not being displayed properly and the app malfunctioning in unexpected ways.\n\n\n### (Optional) Configure your .NET Mobile Service for Azure Active Directory\n\n>[AZURE.NOTE] These steps are optional because they only apply to the Azure Active Directory login provider.\n\n1. Install the [WindowsAzure.MobileServices.Backend.Security NuGet package](https://www.nuget.org/packages/WindowsAzure.MobileServices.Backend.Security).\n\n2. In Visual Studio expand App_Start and open WebApiConfig.cs. Add the following `using` statement at the top:\n\n        using Microsoft.WindowsAzure.Mobile.Service.Security.Providers;\n\n3. Also in WebApiConfig.cs, add the following code to the `Register` method, immediately after `options` is instantiated:\n\n        options.LoginProviders.Remove(typeof(AzureActiveDirectoryLoginProvider));\n        options.LoginProviders.Add(typeof(AzureActiveDirectoryExtendedLoginProvider));\n\n## <a name=\"permissions\"></a>Restrict permissions to authenticated users\n\n\n\nBy default, all requests to mobile service resources are restricted to clients that present the application key, which does not strictly secure access to resources. To secure your resources, you must restrict access to only authenticated clients.\n\n1. In Visual Studio, open your mobile service project, expand the Controllers folder, and open **TodoItemController.cs**. The **TodoItemController** class implements data access for the TodoItem table. Add the following `using` statement:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\n2. Apply the following _AuthorizeLevel_ attribute to the **TodoItemController** class.\n\n\t\t[AuthorizeLevel(AuthorizationLevel.User)]\n\n\tThis makes sure that all operations against the _TodoItem_ table require an authenticated user. You can also apply the *AuthorizeLevel* attribute at the method level.\n\n3. (Optional) If you wish to debug authentication locally, expand the `App_Start` folder, open **WebApiConfig.cs**, and add the following code to the **Register** method.  \n\n\t\tconfig.SetIsHosted(true);\n\n\tThis tells the local mobile service project to run as if it is being hosted in Azure, including honoring the *AuthorizeLevel* settings. Without this setting, all HTTP requests to localhost are permitted without authentication despite the *AuthorizeLevel* setting. When you enable self-hosted mode, you also need to set a value for the local application key.\n\n4. (Optional) In the web.config project file, set a string value for the `MS_ApplicationKey` app setting.\n\n\tThis is the password that you use (with no username) to test the API help pages when you run the service locally.  This string value is not used by the live site in Azure, and you do not need to use the actual application key; any valid string value will work.\n\n4. Republish your project.\n\n&nbsp;&nbsp;6. In Visual Studio, right-click the Windows Store project for the TodoList app and click **Set as StartUp Project**.\n\n&nbsp;&nbsp;7. In the shared project, open the App.xaml.cs project file, locate the definition for the [MobileServiceClient](http://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobileservices.mobileserviceclient.aspx), and make sure that it is configured to connect to the mobile service running in Azure.\n\n>[AZURE.NOTE]When you use Visual Studio tools to connect your app to a Mobile Service, the tool generate two sets of **MobileServiceClient** definitions, one for each client platform. This is a good time to simplify the generated code by unifying the `#if...#endif` wrapped **MobileServiceClient** definitions into a single unwrapped definition used by both versions of the app. You won't need to do this when you downloaded the quickstart app from the [Azure classic portal].\n\n&nbsp;&nbsp;8. Press the F5 key to run the Windows store app, and verify that an unhandled exception with a status code of 401 (Unauthorized) is raised after the app starts.\n\n&nbsp;&nbsp;This happens because the app attempts to access Mobile Services as an unauthenticated user, but the *TodoItem* table now requires authentication.\n\nNext, you will update the app to authenticate users before requesting resources from the mobile service.\n\n## <a name=\"add-authentication\"></a>Add authentication to the app\n\n\n## Install the storage client in the mobile service project\n\nTo be able to generate an SAS to upload images to Blob storage, you must first add the NuGet package that installs Storage client library in the mobile service project.\n\n1. In **Solution Explorer** in Visual Studio, right-click the mobile service project, and then select **Manage NuGet Packages**.\n\n2. In the left pane, select the **Online** category, select **Stabile Only**, search for **WindowsAzure.Storage**, click **Install** on the **Azure Storage** package, then accept the license agreements.\n\n  \t![](./media/mobile-services-configure-blob-storage/mobile-add-storage-nuget-package-dotnet.png)\n\n  \tThis adds the client library for Azure storage services to the mobile service project.\n\n\n1. Open the shared project file MainPage.cs and add the following code snippet to the MainPage class:\n\n\t\t// Define a member variable for storing the signed-in user.\n        private MobileServiceUser user;\n\n        // Define a method that performs the authentication process\n        // using a Facebook sign-in.\n        private async System.Threading.Tasks.Task<bool> AuthenticateAsync()\n        {\n            string message;\n            bool success = false;\n            try\n            {\n                // Change 'MobileService' to the name of your MobileServiceClient instance.\n                // Sign-in using Facebook authentication.\n                user = await App.MobileService\n                    .LoginAsync(MobileServiceAuthenticationProvider.Facebook);\n                message =\n                    string.Format(\"You are now signed in - {0}\", user.UserId);\n\n                success = true;\n            }\n            catch (InvalidOperationException)\n            {\n                message = \"You must log in. Login Required\";\n            }\n\n            var dialog = new MessageDialog(message);\n            dialog.Commands.Add(new UICommand(\"OK\"));\n            await dialog.ShowAsync();\n            return success;\n        }\n\n    This code authenticates the user with a Facebook login. If you are using an identity provider other than Facebook, change the value of **MobileServiceAuthenticationProvider** above to the value for your provider.\n\n3. Comment-out or delete the call to the **RefreshTodoItems** method in the existing **OnNavigatedTo** method override.\n\n\tThis prevents the data from being loaded before the user is authenticated. Next, you will add a **Sign in** button to the app that triggers authentication.\n\n4. Add the following code snippet to the MainPage class:\n\n        private async void ButtonLogin_Click(object sender, RoutedEventArgs e)\n        {\n            // Login the user and then load data from the mobile app.\n            if (await AuthenticateAsync())\n            {\n                // Hide the login button and load items from the mobile app.\n                ButtonLogin.Visibility = Windows.UI.Xaml.Visibility.Collapsed;\n                //await InitLocalStoreAsync(); //offline sync support.\n                await RefreshTodoItems();\n            }\n        }\n\n5. In the Windows Store app project, open the MainPage.xaml project file and add the following **Button** element just before the element that defines the **Save** button:\n\n\t\t<Button Name=\"ButtonLogin\" Click=\"ButtonLogin_Click\"\n                        Visibility=\"Visible\">Sign in</Button>\n\n6. In the Windows Phone Store app project, add the following **Button** element in the **ContentPanel**, after the **TextBox** element:\n\n        <Button Grid.Row =\"1\" Grid.Column=\"1\" Name=\"ButtonLogin\" Click=\"ButtonLogin_Click\"\n        \tMargin=\"10, 0, 0, 0\" Visibility=\"Visible\">Sign in</Button>\n\n8. Open the shared App.xaml.cs project file and add the following code:\n\n        protected override void OnActivated(IActivatedEventArgs args)\n        {\n\t\t\t// Windows Phone 8.1 requires you to handle the respose from the WebAuthenticationBroker.\n            #if WINDOWS_PHONE_APP\n            if (args.Kind == ActivationKind.WebAuthenticationBrokerContinuation)\n            {\n\t\t\t\t// Completes the sign-in process started by LoginAsync.\n\t\t\t\t// Change 'MobileService' to the name of your MobileServiceClient instance.\n                App.MobileService.LoginComplete(args as WebAuthenticationBrokerContinuationEventArgs);\n            }\n            #endif\n\n            base.OnActivated(args);\n        }\n\n\tIf the **OnActivated** method already exists, just add the `#if...#endif` code block.\n\n9. Press the F5 key to run the Windows Store app, click the **Sign in** button, and sign into the app with your chosen identity provider.\n\n   \tWhen you are successfully logged-in, the app should run without errors, and you should be able to query your backend and make updates to data.\n\n10. Right-click the Windows Phone Store app project, click **Set as StartUp Project**, then repeat the previous step to verify that the Windows Phone Store app also runs correctly.  \n\n\n\n>[AZURE.NOTE]If you registered your Windows Store app package information with Mobile Services, you should call the <a href=\"http://go.microsoft.com/fwlink/p/?LinkId=311594\" target=\"_blank\">LoginAsync</a> method by supplying a value of **true** for the *useSingleSignOn* parameter. If you do not do this, your users will continue to be presented with a login prompt every time that the login method is called.\n\n## <a name=\"tokens\"></a>Store the authorization tokens on the client\n\nThe previous example showed a standard sign-in, which requires the client to contact both the identity provider and the mobile service every time that the app starts. Not only is this method inefficient, you can run into usage-related issues should many customers try to start your app at the same time. A better approach is to cache the authorization token returned by Mobile Services and try to use this first before using a provider-based sign-in.\n\n>[AZURE.NOTE]You can cache the token issued by Mobile Services regardless of whether you are using client-managed or service-managed authentication. This tutorial uses service-managed authentication.\n\n\n1. In the MainPage.xaml.cs project file, add the following **using** statements:\n\n\t\tusing System.Linq;\t\t\n\t\tusing Windows.Security.Credentials;\n\n2. Replace the **AuthenticateAsync** method with the following code:\n\n        private async System.Threading.Tasks.Task<bool> AuthenticateAsync()\n        {\n            string message;\n            bool success = false;\n\n            // This sample uses the Facebook provider.\n            var provider = MobileServiceAuthenticationProvider.Facebook;\n\n            // Use the PasswordVault to securely store and access credentials.\n            PasswordVault vault = new PasswordVault();\n            PasswordCredential credential = null;\n\n            try\n            {\n                // Try to get an existing credential from the vault.\n                credential = vault.FindAllByResource(provider.ToString()).FirstOrDefault();\n            }\n            catch (Exception)\n            {\n                // When there is no matching resource an error occurs, which we ignore.\n            }\n\n            if (credential != null)\n            {\n                // Create a user from the stored credentials.\n                user = new MobileServiceUser(credential.UserName);\n                credential.RetrievePassword();\n                user.MobileServiceAuthenticationToken = credential.Password;\n\n                // Set the user from the stored credentials.\n                App.MobileService.CurrentUser = user;\n\n                // Consider adding a check to determine if the token is\n                // expired, as shown in this post: http://aka.ms/jww5vp.\n\n                success = true;\n                message = string.Format(\"Cached credentials for user - {0}\", user.UserId);\n            }\n            else\n            {\n                try\n                {\n                    // Login with the identity provider.\n                    user = await App.MobileService\n                        .LoginAsync(provider);\n\n                    // Create and store the user credentials.\n                    credential = new PasswordCredential(provider.ToString(),\n                        user.UserId, user.MobileServiceAuthenticationToken);\n                    vault.Add(credential);\n\n                    success = true;\n                    message = string.Format(\"You are now logged in - {0}\", user.UserId);\n                }\n                catch (MobileServiceInvalidOperationException)\n                {\n                    message = \"You must log in. Login Required\";\n                }\n            }\n\n            var dialog = new MessageDialog(message);\n            dialog.Commands.Add(new UICommand(\"OK\"));\n            await dialog.ShowAsync();\n\n            return success;\n        }\n\n\tIn this version of **AuthenticateAsync**, the app tries to use credentials stored in the **PasswordVault** to access the service. A regular sign-in is also performed when there is no stored credential.\n\n\t>[AZURE.NOTE]A cached token may be expired, and token expiration can also occur after authentication when the app is in use. To learn how to determine if a token is expired, see [Check for expired authentication tokens](http://aka.ms/jww5vp). For a solution to handling authorization errors related to expiring tokens, see the post [Caching and handling expired tokens in Azure Mobile Services managed SDK](http://blogs.msdn.com/b/carlosfigueira/archive/2014/03/13/caching-and-handling-expired-tokens-in-azure-mobile-services-managed-sdk.aspx).\n\n3. Restart the app twice.\n\n\tNotice that on the first start-up, sign-in with the provider is again required. However, on the second restart the cached credentials are used and sign-in is bypassed.\n\n\n\n## <a name=\"next-steps\"> </a>Next steps\n\nIn the next tutorial, [Service-side authorization of Mobile Services users][Authorize users with scripts], you will take the user ID value provided by Mobile Services based on an authenticated user and use it to filter the data returned by Mobile Services.\n\n## See also\n\n+ [Enhanced users feature](https://azure.microsoft.com/blog/2014/10/02/custom-login-scopes-single-sign-on-new-asp-net-web-api-updates-to-the-azure-mobile-services-net-backend/)<br/>\nYou can get additional user data maintained by the identity provider in your mobile service by by calling the **ServiceUser.GetIdentitiesAsync()** method in a .NET backend.\n\n+ [Mobile Services .NET How-to Conceptual Reference]<br/>Learn more about how to use Mobile Services with a .NET client.\n\n\n<!-- Anchors. -->\n[Register your app for authentication and configure Mobile Services]: #register\n[Restrict table permissions to authenticated users]: #permissions\n[Add authentication to the app]: #add-authentication\n[Store authentication tokens on the client]: #tokens\n[Next Steps]:#next-steps\n\n\n<!-- URLs. -->\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[My Applications]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n[Live SDK for Windows]: http://go.microsoft.com/fwlink/p/?LinkId=262253\n[Get started with Mobile Services]: mobile-services-dotnet-backend-windows-store-dotnet-get-started.md\n[Get started with data]: mobile-services-dotnet-backend-windows-store-dotnet-get-started-data.md\n[Get started with authentication]: mobile-services-dotnet-backend-windows-store-dotnet-get-started-users.md\n[Get started with push notifications]: mobile-services-dotnet-backend-windows-store-dotnet-get-started-push.md\n[Authorize users with scripts]: mobile-services-dotnet-backend-service-side-authorization.md\n[JavaScript and HTML]: mobile-services-dotnet-backend-windows-store-javascript-get-started-users.md\n\n[Azure classic portal]: https://manage.windowsazure.com/\n[Mobile Services .NET How-to Conceptual Reference]: mobile-services-windows-dotnet-how-to-use-client-library.md\n[Register your Windows Store app package for Microsoft authentication]: mobile-services-how-to-register-store-app-package-microsoft-authentication.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-windows-universal-dotnet-upload-data-blob-storage.md",
    "content": "<properties\n\tpageTitle=\"Upload images to Azure Blob storage from a universal Windows app | Microsoft Azure\"\n\tdescription=\"Learn how to use a .NET backend mobile service to upload images to Azure Blob Storage and access the images from your universal Windows app.\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tservices=\"mobile-services,storage\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows-store\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Upload images to Azure Storage by using Mobile Services\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR-LIST (Platform | Backend)]\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-upload-data-blob-storage.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-upload-data-blob-storage.md)\n- [(Android | Javascript)](mobile-services-android-upload-data-blob-storage.md)\n\n## Overview\nThis topic shows you how to use Azure Mobile Services to enable your app to upload and store user-generated images in Azure Storage. Mobile Services uses a SQL Database to store data. However, binary large object (BLOB) data is more efficiently stored in Azure Blob storage service.\n\nYou cannot securely distribute with the client app the credentials required to securely upload data to the Blob Storage service. Instead, you must store these credentials in your mobile service and use them to generate a Shared Access Signature (SAS) that is used to upload a new image. The SAS, a credential with a short expiration&mdash;in this case 5 minutes, is returned securely by Mobile Services to the client app. The app then uses this temporary credential to upload the image. In this example, downloads from the Blob service are public.\n\nIn this tutorial you add functionality to the Mobile Services quickstart app to take pictures and upload the images to Azure by using an SAS generated by Mobile Services.\n\n## Prerequisites\n\nThis tutorial requires the following:\n\n+ Microsoft Visual Studio 2013 Update 3, or a later version.\n+ [Azure Storage account](https://azure.microsoft.com/en-us/documentation/articles/storage-create-storage-account/)\n+ A camera or other image capture device attached to your computer.\n\nThis tutorial is based on the Mobile Services quickstart. Before you start this tutorial, you must first complete [Get started with Mobile Services].\n\n\n## Install the storage client in the mobile service project\n\nTo be able to generate an SAS to upload images to Blob storage, you must first add the NuGet package that installs Storage client library in the mobile service project.\n\n1. In **Solution Explorer** in Visual Studio, right-click the mobile service project, and then select **Manage NuGet Packages**.\n\n2. In the left pane, select the **Online** category, select **Stabile Only**, search for **WindowsAzure.Storage**, click **Install** on the **Azure Storage** package, then accept the license agreements.\n\n  \t![](./media/mobile-services-configure-blob-storage/mobile-add-storage-nuget-package-dotnet.png)\n\n  \tThis adds the client library for Azure storage services to the mobile service project.\n\n## Update the TodoItem definition in the data model\n\nThe TodoItem class defines the data object, and you need to add the same properties to this class as you did on the client.\n\n1. In Visual Studio 2013, open your mobile service project, expand the DataObjects folder, then open the TodoItem.cs project file.\n\n2. Add the following new properties to the **TodoItem** class:\n\n        public string containerName { get; set; }\n\t\tpublic string resourceName { get; set; }\n\t\tpublic string sasQueryString { get; set; }\n\t\tpublic string imageUri { get; set; }\n\n\tThese properties are used to generate the SAS and to store image information. Note that the casing on these properties matches the JavaScript backend version.\n\n\t>[AZURE.NOTE] When using the default database initializer, Entity Framework will drop and recreate the database when it detects a data model change in the Code First definition. To make this data model change and maintain existing data in the database, you must use Code First Migrations. The default initializer cannot be used against a SQL Database in Azure. For more information, see [How to Use Code First Migrations to Update the Data Model](mobile-services-dotnet-backend-how-to-use-code-first-migrations.md).\n\n## Update the TodoItem controller to generate a shared access signature\n\nThe existing **TodoItemController** is updated so that the **PostTodoItem** method generates an SAS when a new TodoItem is inserted. You also\n\n0. If you haven't yet created your storage account, see [How To Create a Storage Account].\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Storage**, click the storage account, then click **Manage Keys**.\n\n2. Make a note of the **Storage Account Name** and **Access Key**.\n\n3. In your mobile service, click the **Configure** tab, scroll down to **App settings** and enter a **Name** and **Value** pair for each of the following that you obtained from the storage account, then click **Save**.\n\n\t+ `STORAGE_ACCOUNT_NAME`\n\t+ `STORAGE_ACCOUNT_ACCESS_KEY`\n\n\t![](./media/mobile-services-configure-blob-storage/mobile-blob-storage-app-settings.png)\n\n\tThe storage account access key is stored encrypted in app settings. You can access this key from any server script at runtime. For more information, see [App settings].\n\n4. In Solution Explorer in Visual Studio, open the Web.config file for the mobile service project and add the following new app settings, replacing the placeholders with the storage account name and access key that you just set in the portal:\n\n\t\t<add key=\"STORAGE_ACCOUNT_NAME\" value=\"**your_account_name**\" />\n\t\t<add key=\"STORAGE_ACCOUNT_ACCESS_KEY\" value=\"**your_access_token_secret**\" />\n\n\tThe mobile service uses these stored settings when it runs on the local computer, which lets you test the code before you publish it. When running in Azure, the mobile service instead uses app settings values set in the portal and ignores these project settings.\n\n7.  In the Controllers folder, open the TodoItemController.cs file and add the following **using** directives:\n\n\t\tusing System;\n\t\tusing Microsoft.WindowsAzure.Storage.Auth;\n\t\tusing Microsoft.WindowsAzure.Storage.Blob;\n\n8.  Replace the existing **PostTodoItem** method with the following code:\n\n        public async Task<IHttpActionResult> PostTodoItem(TodoItem item)\n        {\n            string storageAccountName;\n            string storageAccountKey;\n\n            // Try to get the Azure storage account token from app settings.  \n            if (!(Services.Settings.TryGetValue(\"STORAGE_ACCOUNT_NAME\", out storageAccountName) |\n            Services.Settings.TryGetValue(\"STORAGE_ACCOUNT_ACCESS_KEY\", out storageAccountKey)))\n            {\n                Services.Log.Error(\"Could not retrieve storage account settings.\");\n            }\n\n            // Set the URI for the Blob Storage service.\n            Uri blobEndpoint = new Uri(string.Format(\"https://{0}.blob.core.windows.net\", storageAccountName));\n\n            // Create the BLOB service client.\n            CloudBlobClient blobClient = new CloudBlobClient(blobEndpoint,\n                new StorageCredentials(storageAccountName, storageAccountKey));\n\n            if (item.containerName != null)\n            {\n                // Set the BLOB store container name on the item, which must be lowercase.\n                item.containerName = item.containerName.ToLower();\n\n                // Create a container, if it doesn't already exist.\n                CloudBlobContainer container = blobClient.GetContainerReference(item.containerName);\n                await container.CreateIfNotExistsAsync();\n\n                // Create a shared access permission policy.\n                BlobContainerPermissions containerPermissions = new BlobContainerPermissions();\n\n                // Enable anonymous read access to BLOBs.\n                containerPermissions.PublicAccess = BlobContainerPublicAccessType.Blob;\n                container.SetPermissions(containerPermissions);\n\n                // Define a policy that gives write access to the container for 5 minutes.                                   \n                SharedAccessBlobPolicy sasPolicy = new SharedAccessBlobPolicy()\n                {\n                    SharedAccessStartTime = DateTime.UtcNow,\n                    SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(5),\n                    Permissions = SharedAccessBlobPermissions.Write\n                };\n\n                // Get the SAS as a string.\n                item.sasQueryString = container.GetSharedAccessSignature(sasPolicy);\n\n                // Set the URL used to store the image.\n                item.imageUri = string.Format(\"{0}{1}/{2}\", blobEndpoint.ToString(),\n                    item.containerName, item.resourceName);\n            }\n\n            // Complete the insert operation.\n            TodoItem current = await InsertAsync(item);\n            return CreatedAtRoute(\"Tables\", new { id = current.Id }, current);\n        }\n\n   \tThis POST method now generates a new SAS for the inserted item, which is valid for 5 minutes, and assigns the value of the generated SAS to the `sasQueryString` property of the returned item. The `imageUri` property is also set to the resource path of the new BLOB to enable image display during binding in the client UI.\n\n\t>[AZURE.NOTE] This code creates an SAS for an individual BLOB. If you need to upload multiple blobs to a container using the same SAS, you can instead call the <a href=\"http://go.microsoft.com/fwlink/?LinkId=390455\" target=\"_blank\">generateSharedAccessSignature method</a> with an empty blob resource name, like this:\n\t<pre><code>blobService.generateSharedAccessSignature(containerName, '', sharedAccessPolicy);</code></pre>\n\nNext, you will update the quickstart app to add image upload functionality by using the SAS generated on insert.\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[How To Create a Storage Account]: https://azure.microsoft.com/en-us/documentation/articles/storage-create-storage-account/\n[App settings]: http://msdn.microsoft.com/library/windowsazure/b6bb7d2d-35ae-47eb-a03f-6ee393e170f7\n\n## Install the Storage client for Windows Store apps\n\nTo be able to use an SAS to upload images to Blob storage, you must first add the NuGet package that installs Storage client library for Windows Store apps.\n\n1. In **Solution Explorer** in Visual Studio, right-click the project name, and then select **Manage NuGet Packages**.\n\n2. In the left pane, select the **Online** category, search for `WindowsAzure.Storage`, click **Install** on the **Azure Storage** package, then accept the license agreements.\n\n  \t![](./media/mobile-services-windows-universal-dotnet-upload-to-blob-storage/mobile-add-storage-nuget-package-dotnet.png)\n\n  \tThis adds the client library for Azure storage services to the project.\n\nNext, you will update the quickstart app to capture and upload images.\n\n## Update the quickstart client app to capture and upload images\n\n1. In Visual Studio, open the Package.appxmanifest file for the Windows app project and in the **Capabilities** tab enable the **Webcam** and **Microphone** capabilities.\n\n   \t![](./media/mobile-services-windows-universal-dotnet-upload-to-blob-storage/mobile-app-manifest-camera.png)\n\n   \tThis makes sure that your app can use a camera attached to the computer. Users will be requested to allow camera access the first time that the app is run.\n\n2. Repeat the step above for the Windows Phone app project.\n\n3. In the Windows app project, open the MainPage.xaml file and replace the **StackPanel** element directly after the first **QuickStartTask** element with the following code:\n\n\t\t<StackPanel Orientation=\"Horizontal\" Margin=\"72,0,0,0\">\n            <TextBox Name=\"TextInput\" Margin=\"5\" MaxHeight=\"40\" MinWidth=\"300\"></TextBox>\n            <AppBarButton Label=\"Photo\" Icon=\"Camera\" Name=\"ButtonCapture\" Click=\"ButtonCapture_Click\" />\n            <AppBarButton Label=\"Upload\" Icon=\"Upload\" Name=\"ButtonSave\" Click=\"ButtonSave_Click\"/>\n        </StackPanel>\n        <Grid Name=\"captureGrid\" Margin=\"62,0,0,0\" Visibility=\"Collapsed\" >\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"*\" />\n                <RowDefinition Height=\"Auto\" />\n            </Grid.RowDefinitions>\n            <CaptureElement x:Name=\"previewElement\" Grid.Row=\"0\" Tapped=\"previewElement_Tapped\" />\n            <Image Name=\"imagePreview\" Grid.Row=\"0\"  />\n            <StackPanel Name=\"captureButtons\" Orientation=\"Horizontal\" Grid.Row=\"1\">\n                <TextBlock Name=\"TextCapture\" />\n                <AppBarButton Label=\"Retake\" Icon=\"Redo\" Name=\"ButtonRetake\" Click=\"ButtonCapture_Click\" />\n                <AppBarButton Label=\"Cancel\" Icon=\"Cancel\" Name=\"ButtonCancel\" Click=\"ButtonCancel_Click\" />\n            </StackPanel>\n        </Grid>\n\n2. Replace the **StackPanel** element in the **DataTemplate** with the following code:\n\n        <StackPanel Orientation=\"Vertical\">\n            <CheckBox Name=\"CheckBoxComplete\" IsChecked=\"{Binding Complete, Mode=TwoWay}\"\n                        Checked=\"CheckBoxComplete_Checked\" Content=\"{Binding Text}\"\n                        Margin=\"10,5\" VerticalAlignment=\"Center\"/>\n            <Image Name=\"ImageUpload\" Source=\"{Binding ImageUri, Mode=OneWay}\"\n                    MaxHeight=\"250\"/>\n        </StackPanel>\n\n   \tThis adds an image to the **ItemTemplate** and sets its binding source as the URI of the uploaded image in the Blob Storage service.\n\n3. In the Windows Phone app project, open the MainPage.xaml file and replace the **ButtonSave** element with the following code:\n\n        <StackPanel Grid.Row =\"1\" Grid.Column=\"1\"  Orientation=\"Horizontal\">\n            <AppBarButton Label=\"Photo\" Icon=\"Camera\" Name=\"ButtonCapture\"\n                          Click=\"ButtonCapture_Click\" Height=\"78\" Width=\"62\" />\n            <AppBarButton Label=\"Upload\" Icon=\"Upload\" Name=\"ButtonSave\"\n                          Click=\"ButtonSave_Click\"/>\n        </StackPanel>\n        <Grid Grid.Row=\"2\" Name=\"captureGrid\" Grid.RowSpan=\"3\" Grid.ColumnSpan=\"2\"\n              Canvas.ZIndex=\"99\" Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\"\n              Visibility=\"Collapsed\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"*\" />\n                <RowDefinition Height=\"Auto\" />\n            </Grid.RowDefinitions>\n            <CaptureElement Grid.Row=\"0\" x:Name=\"previewElement\" Tapped=\"previewElement_Tapped\" />                    \n            <Image Grid.Row=\"0\" Name=\"imagePreview\" Visibility=\"Collapsed\" />\n            <StackPanel Grid.Row=\"1\" Name=\"captureButtons\"\n                        Orientation=\"Horizontal\" Visibility=\"Collapsed\">\n                <TextBlock Name=\"TextCapture\" VerticalAlignment=\"Bottom\" />\n                <AppBarButton Label=\"Retake\" Icon=\"Redo\" Name=\"ButtonRetake\"\n                              Click=\"ButtonRetake_Click\" />\n                <AppBarButton Label=\"Cancel\" Icon=\"Cancel\" Name=\"ButtonCancel\"\n                              Click=\"ButtonCancel_Click\" />\n            </StackPanel>\n        </Grid>\n\n2. Replace the **StackPanel** element in the **DataTemplate** with the following code:\n\n        <StackPanel Orientation=\"Vertical\">\n            <CheckBox Name=\"CheckBoxComplete\" IsChecked=\"{Binding Complete, Mode=TwoWay}\"\n                      Checked=\"CheckBoxComplete_Checked\" Content=\"{Binding Text}\"\n                      Margin=\"10,5\" VerticalAlignment=\"Center\"/>\n            <Image Name=\"ImageUpload\" Source=\"{Binding ImageUri, Mode=OneWay}\"\n                   MaxHeight=\"150\"/>\n        </StackPanel>\n\n4. In the shared DataModel folder, open the TodoItem.cs project file and add add the following properties to the TodoItem class:\n\n        [JsonProperty(PropertyName = \"containerName\")]\n        public string ContainerName { get; set; }\n\n        [JsonProperty(PropertyName = \"resourceName\")]\n        public string ResourceName { get; set; }\n\n        [JsonProperty(PropertyName = \"sasQueryString\")]\n        public string SasQueryString { get; set; }\n\n        [JsonProperty(PropertyName = \"imageUri\")]\n        public string ImageUri { get; set; }\n\n3. Open the shared MainPage.cs project file and add the following **using** statements:\n\n\t\tusing Windows.Media.Capture;\n\t\tusing Windows.Media.MediaProperties;\n\t\tusing Windows.Storage;\n\t\tusing Windows.UI.Xaml.Input;\n\t\tusing Microsoft.WindowsAzure.Storage.Auth;\n\t\tusing Microsoft.WindowsAzure.Storage.Blob;\n\t\tusing Windows.UI.Xaml.Media.Imaging;\n\n5. Add the following code to the MainPage class:\n\n        // Use a StorageFile to hold the captured image for upload.\n        StorageFile media = null;\n        MediaCapture cameraCapture;\n        bool IsCaptureInProgress;\n\n        private async Task CaptureImage()\n        {\n            // Capture a new photo or video from the device.\n            cameraCapture = new MediaCapture();\n            cameraCapture.Failed += cameraCapture_Failed;\n\n            // Initialize the camera for capture.\n            await cameraCapture.InitializeAsync();\n\n            #if WINDOWS_PHONE_APP\n            cameraCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees);\n            cameraCapture.SetRecordRotation(VideoRotation.Clockwise90Degrees);\n            #endif\n\n            captureGrid.Visibility = Windows.UI.Xaml.Visibility.Visible;\n            previewElement.Visibility = Windows.UI.Xaml.Visibility.Visible;\n            previewElement.Source = cameraCapture;\n            await cameraCapture.StartPreviewAsync();\n        }\n\n        private async void previewElement_Tapped(object sender, TappedRoutedEventArgs e)\n        {\n            // Block multiple taps.\n            if (!IsCaptureInProgress)\n            {                \n                IsCaptureInProgress = true;\n\n                // Create the temporary storage file.\n                media = await ApplicationData.Current.LocalFolder\n                    .CreateFileAsync(\"capture_file.jpg\", CreationCollisionOption.ReplaceExisting);\n\n                // Take the picture and store it locally as a JPEG.\n                await cameraCapture.CapturePhotoToStorageFileAsync(\n                    ImageEncodingProperties.CreateJpeg(), media);\n\n                captureButtons.Visibility = Visibility.Visible;\n\n\t\t\t\t// Use the stored image as the preview source.\n                BitmapImage tempBitmap = new BitmapImage(new Uri(media.Path));\n                imagePreview.Source = tempBitmap;\n                imagePreview.Visibility = Visibility.Visible;\n                previewElement.Visibility = Visibility.Collapsed;\n                IsCaptureInProgress = false;\n            }\n        }\n\n        private async void cameraCapture_Failed(MediaCapture sender, MediaCaptureFailedEventArgs errorEventArgs)\n        {\n            // It's safest to return this back onto the UI thread to show the message dialog.\n            MessageDialog dialog = new MessageDialog(errorEventArgs.Message);\n            await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,\n                async () => { await dialog.ShowAsync(); });            \n        }\n\n        private async void ButtonCapture_Click(object sender, RoutedEventArgs e)\n        {\n            // Prevent multiple initializations.\n            ButtonCapture.IsEnabled = false;\n\n            await CaptureImage();\n        }\n\n        private async void ButtonRetake_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)\n        {\n            // Reset the capture and then start again.\n            await ResetCaptureAsync();\n            await CaptureImage();\n        }\n\n        private async void ButtonCancel_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)\n        {\n            await ResetCaptureAsync();\n        }\n\n        private async Task ResetCaptureAsync()\n        {\n            captureGrid.Visibility = Windows.UI.Xaml.Visibility.Collapsed;\n            imagePreview.Visibility = Visibility.Collapsed;\n            captureButtons.Visibility = Visibility.Collapsed;\n            previewElement.Source = null;\n            ButtonCapture.IsEnabled = true;\n\n            // Make sure we stop the preview and release resources.\n            await cameraCapture.StopPreviewAsync();\n            cameraCapture.Dispose();\n            media = null;\n        }\n\n  \tThis code displays the UI used to capture an image, and saves the image to a storage file.\n\n6. Replace the existing `InsertTodoItem` method with the following code:\n\n        private async Task InsertTodoItem(TodoItem todoItem)\n        {\n            string errorString = string.Empty;\n\n            if (media != null)\n            {\n                // Set blob properties of TodoItem.\n                todoItem.ContainerName = \"todoitemimages\";\n\n                // Use a unigue GUID to avoid collisions.\n                todoItem.ResourceName = Guid.NewGuid().ToString();\n            }\n\n            // Send the item to be inserted. When blob properties are set this\n            // generates an SAS in the response.\n            await todoTable.InsertAsync(todoItem);\n\n            // If we have a returned SAS, then upload the blob.\n            if (!string.IsNullOrEmpty(todoItem.SasQueryString))\n            {\n                // Get the URI generated that contains the SAS\n                // and extract the storage credentials.\n                StorageCredentials cred = new StorageCredentials(todoItem.SasQueryString);\n                var imageUri = new Uri(todoItem.ImageUri);\n\n                // Instantiate a Blob store container based on the info in the returned item.\n                CloudBlobContainer container = new CloudBlobContainer(\n                    new Uri(string.Format(\"https://{0}/{1}\",\n                        imageUri.Host, todoItem.ContainerName)), cred);\n\n                // Get the new image as a stream.\n                using (var inputStream = await media.OpenReadAsync())\n                {\n                    // Upload the new image as a BLOB from the stream.\n                    CloudBlockBlob blobFromSASCredential =\n                        container.GetBlockBlobReference(todoItem.ResourceName);\n                    await blobFromSASCredential.UploadFromStreamAsync(inputStream);\n                }\n\n                // When you request an SAS at the container-level instead of the blob-level,\n                // you are able to upload multiple streams using the same container credentials.\n\n                await ResetCaptureAsync();\n            }\n\n            // Add the new item to the collection.\n            items.Add(todoItem);\n        }\n\n\tThis code sends a request to the mobile service to insert a new TodoItem. The response contains the SAS, which is then used to upload the image from local storage to Azure Blob storage. The URL of the uploaded image is used in data binding.\n\nThe final step is to test both versions of the app and validate that uploads succeed from both devices.\n\n## <a name=\"test\"></a>Test uploading the images in your app\n\n1. In Visual Studio, make sure that the Windows project is set as the default project, then press the F5 key to run the app.\n\n2. Enter text in the textbox under **Insert a TodoItem**, then click **Photo**.\n\n3. Click or tap the preview to take a picture, then click **Upload** to insert the new item and upload the image.\n\n\t![](./media/mobile-services-windows-universal-dotnet-upload-to-blob-storage/mobile-quickstart-blob-appbar2.png)\n\n4. The new item, along with the uploaded image, is displayed in the list view.\n\n\t![](./media/mobile-services-windows-universal-dotnet-upload-to-blob-storage/mobile-quickstart-blob-ie.png)\n\n   \t>[AZURE.NOTE]The image is downloaded automatically from Blob storage when the *imageUri* property of the new item is bound to the **Image** control.\n\n5. Stop the app and restart the Windows Phone project version of the app.\n\n\tThe previously uploaded image is displayed.\n\n6. As before, enter some text in the textbox, then click **Photo**.\n\n   \t![](./media/mobile-services-windows-universal-dotnet-upload-to-blob-storage/mobile-upload-blob-app-view-wp8.png)\n\n3. Tap the preview to take a picture, then click **Upload** to insert the new item and upload the image.\n\n\t![](./media/mobile-services-windows-universal-dotnet-upload-to-blob-storage/mobile-upload-blob-app-view-final-wp8.png)\n\nYou have completed the upload images tutorial.\n\n## Next steps\n\nNow that you have been able to securely upload images by integrating your mobile service with the Blob service, check out some of the other backend service and integration topics:\n\n+ [Schedule backend jobs in Mobile Services](mobile-services-dotnet-backend-schedule-recurring-tasks.md)\n\n     Learn how to use the Mobile Services job scheduler functionality to define server script code that is executed on a schedule that you define.\n\n+ [Mobile Services .NET How-to Conceptual Reference](mobile-services-dotnet-how-to-use-client-library.md)\n\n     Learn more about how to use Mobile Services with .NET\n\n<!-- Anchors. -->\n[Install the Storage Client library]: #install-storage-client\n[Update the client app to capture images]: #add-select-images\n[Install the storage client in the mobile service project]: #storage-client-server\n[Update the TodoItem definition in the data model]: #update-data-model\n[Update the table controller to generate an SAS]: #update-scripts\n[Upload images to test the app]: #test\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[Get started with Mobile Services]: mobile-services-windows-store-dotnet-get-started.md\n[How To Create a Storage Account]: https://azure.microsoft.com/en-us/documentation/articles/storage-create-storage-account/\n[Azure Storage Client library for Store apps]: http://go.microsoft.com/fwlink/p/?LinkId=276866\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-xamarin-android-get-started-push.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Mobile Services for Xamarin Android apps | Microsoft Azure\"\n\tdescription=\"Learn how to use Azure Mobile Services and Notification Hubs to send push notifications to your Xamarin Android app\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"xamarin\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"mollybos\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-xamarin-android\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Add push notifications to your Mobile Services app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-push.md)\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-javascript-backend-windows-phone-get-started-push.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started-push.md)\n- [(Android | Javascript)](mobile-services-javascript-backend-android-get-started-push.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-push.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-push.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-push.md)\n- [(Xamarin.Forms | JavaScript)](partner-xamarin-mobile-services-xamarin-forms-get-started-push.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Overview\n\nThis topic shows you how to use Azure Mobile Services to send push notifications to a Xamarin.Android app. In this tutorial you add push notifications using the Google Cloud Messaging (GCM) service to the [Get started with Mobile Services] project. When complete, your mobile service will send a push notification each time a record is inserted.\n\nThis tutorial requires the following:\n\n+ An active Google account.\n+ [Google Cloud Messaging Client Component]. You will add this component during the tutorial.\n\nYou should already have the Xamarin.Android and [Azure Mobile Services][Azure Mobile Services Component] components installed in your project from when you completed [Get started with Mobile Services].\n\n## <a id=\"register\"></a>Enable Google Cloud Messaging\n\n\n1. Navigate to the [Google Cloud Console](https://console.developers.google.com/project), sign in with your Google account credentials.\n\n2. Click **Create Project**, type a project name, then click **Create**. If requested, carry out the SMS Verification, and click **Create** again.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/mobile-services-google-new-project.png)   \n\n\t Type in your new **Project name** and click **Create project**.\n\n3. Click the **Utilities and More** button and then click **Project Information**. Make a note of the **Project Number**. You will need to set this value as the `SenderId` variable in the client app.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/notification-hubs-utilities-and-more.png)\n\n\n4. In the project dashboard, under **Mobile APIs**, click **Google Cloud Messaging**, then on the next page click **Enable API** and accept the terms of service.\n\n\t![Enabling GCM](./media/mobile-services-enable-google-cloud-messaging/enable-GCM.png)\n\n\t![Enabling GCM](./media/mobile-services-enable-google-cloud-messaging/enable-gcm-2.png)\n\n5. In the project dashboard, Click **Credentials** > **Create Credential** > **API Key**.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/mobile-services-google-create-server-key.png)\n\n6. In **Create a new key**, click **Server key**, type a name for your key, then click **Create**.\n\n7. Make a note of the **API KEY** value.\n\n\tYou will use this API key value to enable Azure to authenticate with GCM and send push notifications on behalf of your app.\n\n\n## <a id=\"configure\"></a>Configure your mobile service to send push requests\n\n\n1. Log on to the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, and then click your app.\n\n2. Click the **Push** tab, enter the **API Key** value obtained from GCM in the previous procedure, then click **Save**.\n\n   \t![](./media/mobile-services-android-configure-push/mobile-push-tab-android.png)\n\n    >[AZURE.NOTE]When you set your GCM credentials for enhanced push notifications in the Push tab in the portal, they are shared with Notification Hubs to configure the notification hub with your app.\n\nBoth your mobile service and your app are now configured to work with GCM and Notification Hubs.\n\n## <a id=\"update-server\"></a>Update the mobile service to send push notifications\n\n\n1. In Visual Studio Solution Explorer, expand the **Controllers** folder in the mobile service project. Open TodoItemController.cs. At the top of the file, add the following `using` statements:\n\n\t\tusing System;\n\t\tusing System.Collections.Generic;\n\n2. Update the `PostTodoItem` method definition with the following code:  \n\n        public async Task<IHttpActionResult> PostTodoItem(TodoItem item)\n        {\n            TodoItem current = await InsertAsync(item);\n\n            Dictionary<string, string> data = new Dictionary<string, string>()\n            {\n                { \"message\", item.Text}\n            };\n            GooglePushMessage message = new GooglePushMessage(data, TimeSpan.FromHours(1));\n\n            try\n            {\n                var result = await Services.Push.SendAsync(message);\n                Services.Log.Info(result.State.ToString());\n            }\n            catch (System.Exception ex)\n            {\n                Services.Log.Error(ex.Message, null, \"Push.SendAsync Error\");\n            }\n            return CreatedAtRoute(\"Tables\", new { id = current.Id }, current);\n        }\n\n    This code will send a push notification (with the text of the inserted item) after inserting a todo item. In the event of an error, the code will add an error log entry which is viewable on the **Logs** tab of the mobile service in the [Azure classic portal](https://manage.windowsazure.com/).\n\n3. Republish your mobile service project to Azure.\n\n## <a id=\"configure-app\"></a>Configure the existing project for push notifications\n\n\n1. In the Solution view (or **Solution Explorer** in Visual Studio), right-click the **Components** folder, click  **Get More Components...**, search for the **Google Cloud Messaging Client** component and add it to the project.\n\n2. Open the ToDoActivity.cs project file and add the following using statement to the class:\n\n\t\tusing Gcm.Client;\n\n3. In the **ToDoActivity** class, add the following new code:\n\n        // Create a new instance field for this activity.\n        static ToDoActivity instance = new ToDoActivity();\n\n        // Return the current activity instance.\n        public static ToDoActivity CurrentActivity\n        {\n            get\n            {\n                return instance;\n            }\n        }\n        // Return the Mobile Services client.\n        public MobileServiceClient CurrentClient\n        {\n            get\n            {\n                return client;\n            }\n        }\n\n\tThis enables you to access the mobile client instance from the push handler service process.\n\n4.\tAdd the following code to the **OnCreate** method, after the **MobileServiceClient** is created:\n\n        // Set the current instance of TodoActivity.\n        instance = this;\n\n        // Make sure the GCM client is set up correctly.\n        GcmClient.CheckDevice(this);\n        GcmClient.CheckManifest(this);\n\n        // Register the app for push notifications.\n        GcmClient.Register(this, ToDoBroadcastReceiver.senderIDs);\n\nYour **ToDoActivity** is now prepared for adding push notifications.\n\n## <a id=\"add-push\"></a>Add push notifications code to your app\n\n\n4. Create a new class in the project called `ToDoBroadcastReceiver`.\n\n5. Add the following using statements to **ToDoBroadcastReceiver** class:\n\n\t\tusing Gcm.Client;\n\t\tusing Microsoft.WindowsAzure.MobileServices;\n\n6. Add the following permission requests between the **using** statements and the **namespace** declaration:\n\n\t\t[assembly: Permission(Name = \"@PACKAGE_NAME@.permission.C2D_MESSAGE\")]\n\t\t[assembly: UsesPermission(Name = \"@PACKAGE_NAME@.permission.C2D_MESSAGE\")]\n\t\t[assembly: UsesPermission(Name = \"com.google.android.c2dm.permission.RECEIVE\")]\n\n\t\t//GET_ACCOUNTS is only needed for android versions 4.0.3 and below\n\t\t[assembly: UsesPermission(Name = \"android.permission.GET_ACCOUNTS\")]\n\t\t[assembly: UsesPermission(Name = \"android.permission.INTERNET\")]\n\t\t[assembly: UsesPermission(Name = \"android.permission.WAKE_LOCK\")]\n\n7. Replace the existing **ToDoBroadcastReceiver** class definition with the following:\n\n\t    [BroadcastReceiver(Permission = Gcm.Client.Constants.PERMISSION_GCM_INTENTS)]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_MESSAGE },\n\t        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_REGISTRATION_CALLBACK },\n\t        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_LIBRARY_RETRY },\n        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n        public class ToDoBroadcastReceiver : GcmBroadcastReceiverBase<PushHandlerService>\n        {\n\t        // Set the Google app ID.\n\t        public static string[] senderIDs = new string[] { \"<PROJECT_NUMBER>\" };\n        }\n\n\tIn the above code, you must replace _`<PROJECT_NUMBER>`_ with the project number assigned by Google when you provisioned your app in the Google developer portal.\n\n8. In the ToDoBroadcastReceiver.cs project file, add the following code that defines the **PushHandlerService** class:\n\n\t\t// The ServiceAttribute must be applied to the class.\n    \t[Service]\n    \tpublic class PushHandlerService : GcmServiceBase\n    \t{\n        \tpublic static string RegistrationID { get; private set; }\n\n        \tpublic PushHandlerService() : base(ToDoBroadcastReceiver.senderIDs) { }\n    \t}\n\n\tNote that this class derives from **GcmServiceBase** and that the **Service** attribute must be applied to this class.\n\n\t>[AZURE.NOTE]The **GcmServiceBase** class implements the **OnRegistered()**, **OnUnRegistered()**, **OnMessage()** and **OnError()** methods. You must override these methods in the **PushHandlerService** class.\n\n5. Add the following code to the **PushHandlerService** class that overrides the **OnRegistered** event handler.\n\n        protected override void OnRegistered(Context context, string registrationId)\n        {\n            System.Diagnostics.Debug.WriteLine(\"The device has been registered with GCM.\", \"Success!\");\n\n            // Get the MobileServiceClient from the current activity instance.\n            MobileServiceClient client = ToDoActivity.CurrentActivity.CurrentClient;           \n            var push = client.GetPush();\n\n            List<string> tags = null;\n\n            //// (Optional) Uncomment to add tags to the registration.\n            //var tags = new List<string>() { \"myTag\" }; // create tags if you want\n\n            try\n            {\n                // Make sure we run the registration on the same thread as the activity,\n                // to avoid threading errors.\n                ToDoActivity.CurrentActivity.RunOnUiThread(\n                    async () => await push.RegisterNativeAsync(registrationId, tags));\n            }\n            catch (Exception ex)\n            {\n                System.Diagnostics.Debug.WriteLine(\n                    string.Format(\"Error with Azure push registration: {0}\", ex.Message));                \n            }\n        }\n\n\tThis method uses the returned GCM registration ID to register with Azure for push notifications.\n\n10. Override the **OnMessage** method in **PushHandlerService** with the following code:\n\n        protected override void OnMessage(Context context, Intent intent)\n        {          \n            string message = string.Empty;\n\n            // Extract the push notification message from the intent.\n            if (intent.Extras.ContainsKey(\"message\"))\n            {\n                message = intent.Extras.Get(\"message\").ToString();\n                var title = \"New item added:\";\n\n                // Create a notification manager to send the notification.\n                var notificationManager =\n                    GetSystemService(Context.NotificationService) as NotificationManager;\n\n                // Create a new intent to show the notification in the UI.\n                PendingIntent contentIntent =\n\t\t\t\t\tPendingIntent.GetActivity(context, 0,\n\t\t\t\t\tnew Intent(this, typeof(ToDoActivity)), 0);\t          \n\n                // Create the notification using the builder.\n                var builder = new Notification.Builder(context);\n                builder.SetAutoCancel(true);\n                builder.SetContentTitle(title);\n                builder.SetContentText(message);\n                builder.SetSmallIcon(Resource.Drawable.ic_launcher);\n                builder.SetContentIntent(contentIntent);\n                var notification = builder.Build();\n\n                // Display the notification in the Notifications Area.\n                notificationManager.Notify(1, notification);\n\n            }\n        }\n\n12. Override the **OnUnRegistered()** and **OnError()** methods with the following code.\n\n        protected override void OnUnRegistered(Context context, string registrationId)\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void OnError(Context context, string errorId)\n        {\n            System.Diagnostics.Debug.WriteLine(\n                string.Format(\"Error occurred in the notification: {0}.\", errorId));\n        }\n\n## <a name=\"test-app\"></a>Test the app against the published mobile service\n\nYou can test the app by directly attaching an Android phone with a USB cable, or by using a virtual device in the emulator.\n\n### <a id=\"local-testing\"></a> Enable push notifications for local testing\n\n\nYou can optionally test push notifications with your mobile service running on the local computer or VM before you publish to Azure. To do this, you must set information about the notification hub used by your app in the web.config file. This information is only used when running locally to connect to the notification hub; it is ignored when published to Azure.\n\n1. Back in the **Push** tab of your mobile service, click the **Notification Hub** link.\n\n\t![](./media/mobile-services-dotnet-backend-configure-local-push/link-to-notification-hub.png)\n\n\tThis navigates to the notification hub used by your mobile service.\n\n2. In the notification hub page, make a note of the name of your notification hub, then click **View Connection String**.\n\n\t![](./media/mobile-services-dotnet-backend-configure-local-push/notification-hub-page.png)\n\n3. In the **Access connection information**, copy the **DefaultFullSharedAccessSignature** connection string.\n\n\t![](./media/mobile-services-dotnet-backend-configure-local-push/notification-hub-connection-string.png)\n\n4. In your mobile service project in Visual Studio, open the Web.config file for the service and in **connectionStrings**, replace the connection string for **MS_NotificationHubConnectionString** with the connection string from the previous step.\n\n5. In **appSettings**, replace the value of the **MS_NotificationHubName** app setting with the name of the notification hub.\n\nNow, the mobile service project is configured to connect to the notification hub in Azure when running locally. Note that it is important to use the same notification hub name and connection string as the portal because these Web.config project settings are overridden by the portal settings when running in Azure.\n\n\n4. Create a new class in the project called `ToDoBroadcastReceiver`.\n\n5. Add the following using statements to **ToDoBroadcastReceiver** class:\n\n\t\tusing Gcm.Client;\n\t\tusing Microsoft.WindowsAzure.MobileServices;\n\n6. Add the following permission requests between the **using** statements and the **namespace** declaration:\n\n\t\t[assembly: Permission(Name = \"@PACKAGE_NAME@.permission.C2D_MESSAGE\")]\n\t\t[assembly: UsesPermission(Name = \"@PACKAGE_NAME@.permission.C2D_MESSAGE\")]\n\t\t[assembly: UsesPermission(Name = \"com.google.android.c2dm.permission.RECEIVE\")]\n\n\t\t//GET_ACCOUNTS is only needed for android versions 4.0.3 and below\n\t\t[assembly: UsesPermission(Name = \"android.permission.GET_ACCOUNTS\")]\n\t\t[assembly: UsesPermission(Name = \"android.permission.INTERNET\")]\n\t\t[assembly: UsesPermission(Name = \"android.permission.WAKE_LOCK\")]\n\n7. Replace the existing **ToDoBroadcastReceiver** class definition with the following:\n\n\t    [BroadcastReceiver(Permission = Gcm.Client.Constants.PERMISSION_GCM_INTENTS)]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_MESSAGE },\n\t        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_REGISTRATION_CALLBACK },\n\t        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_LIBRARY_RETRY },\n        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n        public class ToDoBroadcastReceiver : GcmBroadcastReceiverBase<PushHandlerService>\n        {\n\t        // Set the Google app ID.\n\t        public static string[] senderIDs = new string[] { \"<PROJECT_NUMBER>\" };\n        }\n\n\tIn the above code, you must replace _`<PROJECT_NUMBER>`_ with the project number assigned by Google when you provisioned your app in the Google developer portal.\n\n8. In the ToDoBroadcastReceiver.cs project file, add the following code that defines the **PushHandlerService** class:\n\n\t\t// The ServiceAttribute must be applied to the class.\n    \t[Service]\n    \tpublic class PushHandlerService : GcmServiceBase\n    \t{\n        \tpublic static string RegistrationID { get; private set; }\n\n### Setting up the Android emulator for testing\nWhen you run this app in the emulator, make sure that you use an Android Virtual Device (AVD) that supports Google APIs.\n\n> [AZURE.IMPORTANT] In order to receive push notifications, you must set up a Google account on your Android Virtual Device (in the emulator, navigate to **Settings** and click **Add Account**). Also, make sure that the emulator is connected to the Internet.\n\n1. From **Tools**, click **Open Android Emulator Manager**, select your device, and then click **Edit**.\n\n   \t![Android Virtual Device Manager](./media/mobile-services-android-push-notifications-test/notification-hub-create-android-app7.png)\n\n2. Select **Google APIs** in **Target**, then click **OK**.\n\n   \t![Edit the Android Virtual Device](./media/mobile-services-android-push-notifications-test/notification-hub-create-android-app8.png)\n\n3. On the top toolbar, click **Run**, and then select your app. This starts the emulator and runs the app.\n\n  The app retrieves the *registrationId* from GCM and registers with the Notification Hub.\n\n### Inserting a new item generates a notification.\n\n1. In the app, type meaningful text, such as _A new Mobile Services task_ and then click the **Add** button.\n\n2. Swipe down from the top of the screen to open the device's Notification Center to see the notification.\n\n\t![View notification in the Notification Center](./media/mobile-services-android-push-notifications-test/notification-area-received.png)\n\n<!-- URLs. -->\n[Get started with Mobile Services]: mobile-services-dotnet-backend-xamarin-android-get-started.md\n[Google Cloud Messaging Client Component]: http://components.xamarin.com/view/GCMClient/\n[Azure Mobile Services Component]: http://components.xamarin.com/view/azure-mobile-services/\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-xamarin-android-get-started-users.md",
    "content": "<properties\n\tpageTitle=\"Get Started with authentication in Mobile Services for Xamarin Android apps | Microsoft Azure\"\n\tdescription=\"Learn how to use Mobile Services to authenticate users of your Xamarin Android app through a variety of identity providers, including Google, Facebook, Twitter, and Microsoft.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"xamarin\"\n\tauthors=\"lindydonna\"\n\tmanager=\"dwrede\"\n\teditor=\"mollybos\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-xamarin-android\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"donnam\"/>\n\n# Get started with authentication in Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-users.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-users.md)\n- [(Android | Javascript)](mobile-services-android-get-started-users.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started-users.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-users.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-users.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-users.md)\n- [(HTML | Javascript)](mobile-services-html-get-started-users.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows you how to authenticate users in Azure Mobile Services from your app. In this tutorial, you add authentication to the quickstart project using an identity provider that is supported by Mobile Services. After being successfully authenticated and authorized by Mobile Services, the user ID value is displayed.\n\nThis tutorial walks you through these basic steps to enable authentication in your app:\n\n1. [Register your app for authentication and configure Mobile Services]\n2. [Restrict table permissions to authenticated users]\n3. [Add authentication to the app]\n\nThis tutorial is based on the Mobile Services quickstart. You must also first complete the tutorial [Get started with Mobile Services].\n\n## <a name=\"register\"></a>Register your app for authentication and configure Mobile Services\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Dashboard**, and make a note of the **Mobile Service URL** value.\n\n2. Register your app with one or more of the following authentication providers:\n   * [Google](./\nmobile-services-how-to-register-google-authentication.md)\n   * [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n   * [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n   * [Microsoft](./\nmobile-services-how-to-register-microsoft-authentication.md)\n   * [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md).\n\n    Make a note of the client identity and client secret values generated by the provider. Do not distribute or share the client secret.\n\n3. Back in the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Identity** > your identity provider settings, then enter the client ID and secret value from your provider.\n\nYou've now configured both your app and your mobile service to work with your auth provider. You may optionally repeat all these steps for each additional identity provider you'd like to support.\n\n> [AZURE.IMPORTANT] Verify that you've set the correct redirect URI on your identity provider's developer site. As described in the linked instructions for each provider above, the redirect URI may be different for a .NET backend service vs. for a JavaScript backend service. An incorrectly configured redirect URI may result in the login screen not being displayed properly and the app malfunctioning in unexpected ways.\n\n\n### (Optional) Configure your .NET Mobile Service for Azure Active Directory\n\n>[AZURE.NOTE] These steps are optional because they only apply to the Azure Active Directory login provider.\n\n1. Install the [WindowsAzure.MobileServices.Backend.Security NuGet package](https://www.nuget.org/packages/WindowsAzure.MobileServices.Backend.Security).\n\n2. In Visual Studio expand App_Start and open WebApiConfig.cs. Add the following `using` statement at the top:\n\n        using Microsoft.WindowsAzure.Mobile.Service.Security.Providers;\n\n3. Also in WebApiConfig.cs, add the following code to the `Register` method, immediately after `options` is instantiated:\n\n        options.LoginProviders.Remove(typeof(AzureActiveDirectoryLoginProvider));\n        options.LoginProviders.Add(typeof(AzureActiveDirectoryExtendedLoginProvider));\n\n## <a name=\"permissions\"></a>Restrict permissions to authenticated users\n\n\n\nBy default, all requests to mobile service resources are restricted to clients that present the application key, which does not strictly secure access to resources. To secure your resources, you must restrict access to only authenticated clients.\n\n1. In Visual Studio, open your mobile service project, expand the Controllers folder, and open **TodoItemController.cs**. The **TodoItemController** class implements data access for the TodoItem table. Add the following `using` statement:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\n2. Apply the following _AuthorizeLevel_ attribute to the **TodoItemController** class.\n\n\t\t[AuthorizeLevel(AuthorizationLevel.User)]\n\n\tThis makes sure that all operations against the _TodoItem_ table require an authenticated user. You can also apply the *AuthorizeLevel* attribute at the method level.\n\n3. (Optional) If you wish to debug authentication locally, expand the `App_Start` folder, open **WebApiConfig.cs**, and add the following code to the **Register** method.  \n\n\t\tconfig.SetIsHosted(true);\n\n\tThis tells the local mobile service project to run as if it is being hosted in Azure, including honoring the *AuthorizeLevel* settings. Without this setting, all HTTP requests to localhost are permitted without authentication despite the *AuthorizeLevel* setting. When you enable self-hosted mode, you also need to set a value for the local application key.\n\n4. (Optional) In the web.config project file, set a string value for the `MS_ApplicationKey` app setting.\n\n\tThis is the password that you use (with no username) to test the API help pages when you run the service locally.  This string value is not used by the live site in Azure, and you do not need to use the actual application key; any valid string value will work.\n\n4. Republish your project.\n\n<ol start=\"6\">\n<li><p>In Visual Studio or Xamarin Studio, run the client project on a device or simulator. Verify that an unhandled exception with a status code of 401 (Unauthorized) is raised after the app starts.</p>\n   \t<p>This happens because the app attempts to access Mobile Services as an unauthenticated user, but the <em>TodoItem</em> table now requires authentication.</p></li>\n</ol>\n\nNext, you will update the app to authenticate users before requesting resources from the mobile service.\n\n## <a name=\"add-authentication\"></a>Add authentication to the app\n\n1. Add the following property to the **TodoActivity** class:\n\n\t\t\tprivate MobileServiceUser user;\n\n2. Add the following method to the **TodoActivity** class:\n\n\t        private async Task Authenticate()\n\t        {\n\t            try\n\t            {\n\t                user = await client.LoginAsync(this, MobileServiceAuthenticationProvider.Facebook);\n\t                CreateAndShowDialog(string.Format(\"you are now logged in - {0}\", user.UserId), \"Logged in!\");\n\t            }\n\t            catch (Exception ex)\n\t            {\n\t                CreateAndShowDialog(ex, \"Authentication failed\");\n\t            }\n\t        }\n\n    This creates a new method to handle the authentication process. The user is authenticated by using a Facebook login. A dialog is displayed which displays the ID of the authenticated user.\n\n    > [AZURE.NOTE] If you are using an identity provider other than a Facebook, change the value passed to **LoginAsync** above to one of the following: _MicrosoftAccount_, _Twitter_, _Google_, or _WindowsAzureActiveDirectory_.\n\n3. In the **OnCreate** method, add the following line of code after the code that instantiates the `MobileServiceClient` object.\n\n\t\tawait Authenticate(); // add this line\n\n\tThis call starts the authentication process and awaits it asynchronously.\n\n\n4. From the **Run** menu, click **Start debugging** to start the app and sign in with your chosen identity provider.\n\n   \tWhen you are successfully logged-in, the app should run without errors, and you should be able to query Mobile Services and make updates to data.\n\n\n<!-- ## <a name=\"next-steps\"> </a>Next steps\n\nIn the next tutorial, [Service-side authorization of Mobile Services users][Authorize users with scripts], you will take the user ID value provided by Mobile Services based on an authenticated user and use it to filter the data returned by Mobile Services.\n -->\n\n<!-- Anchors. -->\n[Register your app for authentication and configure Mobile Services]: #register\n[Restrict table permissions to authenticated users]: #permissions\n[Add authentication to the app]: #add-authentication\n[Next Steps]:#next-steps\n\n\n<!-- URLs. -->\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[My Applications]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n[Live SDK for Windows]: http://go.microsoft.com/fwlink/p/?LinkId=262253\n[Get started with Mobile Services]: mobile-services-dotnet-backend-xamarin-android-get-started.md\n[Get started with authentication]: mobile-services-dotnet-backend-xamarin-android-get-started-users.md\n[Get started with push notifications]: mobile-services-dotnet-backend-xamarin-android-get-started-push.md\n[Authorize users with scripts]: mobile-services-dotnet-backend-service-side-authorization.md\n[JavaScript and HTML]: mobile-services-dotnet-backend-windows-store-javascript-get-started-users.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-xamarin-android-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Mobile Services for Xamarin Android apps | Microsoft Azure\"\n\tdescription=\"Follow this tutorial to get started using Azure Mobile Services for Xamarin Android development\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"xamarin\"\n\tauthors=\"lindydonna\"\n\tmanager=\"dwrede\"\n\teditor=\"mollybos\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-xamarin-android\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"get-started-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"donnam\"/>\n\n# <a name=\"getting-started\"> </a>Get started with Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis tutorial shows you how to add a cloud-based backend service to a Xamarin Android app using Azure Mobile Services. In this tutorial, you will create both a new mobile service and a simple _To do list_ app that stores app data in the new mobile service. The mobile service that you will create uses the supported .NET languages using Visual Studio for server-side business logic and to manage the mobile service. To create a mobile service that lets you write your server-side business logic in JavaScript, see the [JavaScript backend version] of this topic.\n\n>[AZURE.NOTE]This topic shows you how to create a new mobile service project by using the Azure classic portal. By using Visual Studio 2013 Update 2, you can also add a new mobile service project to an existing Visual Studio solution. For more information, see [Quickstart: Add a mobile service (.NET backend)](http://msdn.microsoft.com/library/windows/apps/dn629482.aspx)\n\nA screenshot from the completed app is below:\n\n![][0]\n\nCompleting this tutorial is a prerequisite for all other Mobile Services tutorials for Xamarin Android apps.\n\n>[AZURE.NOTE]To complete this tutorial, you need an Azure account. If you don't have an account, you can sign up for an Azure trial and get up to 10 free mobile services that you can keep using even after your trial ends. For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=A0E0E5C02&amp;returnurl=http%3A%2F%2Fazure.microsoft.com%2Fen-us%2Fdocumentation%2Farticles%2Fmobile-services-dotnet-backend-xamarin-android-get-started).\n>This tutorial requires [Visual Studio Professional 2013](https://go.microsoft.com/fwLink/p/?LinkID=257546). A free trial version is available.\n\n## Create a new mobile service\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** page, select **Create a free 20 MB SQL Database**, select **.NET** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t> [AZURE.NOTE] As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n## Create a new Xamarin Android app\n\nOnce you have created your mobile service, you can follow an easy quickstart in the classic portal to either create a new app or modify an existing app to connect to your mobile service.\n\nIn this section you will download a new Xamarin Android app and a service project for your mobile service.\n\n1. If you haven't already done so, install Visual Studio with Xamarin. Instructions can be found on [Setup and Install for Visual Studio and Xamarin](https://msdn.microsoft.com/library/mt613162.aspx). You can also use Xamarin Studio on a Mac OS X machine, see [Setup, install, and verifications for Mac users](https://msdn.microsoft.com/library/mt488770.aspx).  \n\n2. In the [classic portal], click **Mobile Services**, and then click the mobile service that you just created.\n\n3. In the quickstart tab, click **Xamarin** under **Choose platform** and expand **Create a new Xamarin app**.\n\n   \t![][6]\n\n   \tThis displays the three easy steps to create a Xamarin Android app connected to your mobile service.\n\n  \t![][7]\n\n4. Under **Download and publish your service to the cloud**, select **Android** and click **Download**.\n\n  \tThis downloads a solution containing projects for both the mobile service and for the sample _To do list_ application that is connected to your mobile service. Save the compressed project file to your local computer, and make a note of where you save it.\n\n5. Download your publish profile, save the downloaded file to your local computer, and make a note of where you save it.\n\n## Test the mobile service\n\n\n\nThe mobile service project lets you run your new mobile service locally. This makes it easy to debug your service code before you even publish it to Azure.\n\n1. On your Windows PC, download your personalized server project, extract it, and then open it in Visual Studio.\n\n2. Press the **F5** key to rebuild the project and start the mobile service locally. A web page is displayed after the mobile service starts successfully.\n\n## Publish your mobile service\n\n\n1. In Visual Studio, right-click the project, click **Publish** > **Microsoft Azure Mobile Services**. Instead of using Visual Studio, [you may also use Git](./\nmobile-services-dotnet-backend-store-code-source-control.md).\n\n2. Sign in with Azure credentials and select your service from **Existing Mobile Services**. Visual Studio downloads your publish settings directly from Azure. Finally, click **Publish**.\n\n## Run the Xamarin Android app\n\nThe final stage of this tutorial is to build and run your new app.\n\n1. Navigate to the client project within the mobile service solution, in either Visual Studio or Xamarin Studio.\n\n2. Press the **Run** button to build the project and start the app. You will be asked to select an emulator or a connected USB device.\n\n\t> [AZURE.NOTE] To be able to run the project in the Android emulator, you must define a least one Android Virtual Device (AVD). Use the AVD Manager to create and manage these devices.\n\n3. In the app, type meaningful text, such as _Complete the tutorial_ and then click the plus (**+**) icon.\n\n\t![][10]\n\n\tThis sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the TodoItem table. Items stored in the table are returned by the mobile service, and the data is displayed in the list.\n\n\t> [AZURE.NOTE]\n   \t> You can review the code that accesses your mobile service to query and insert data, which is found in the ToDoActivity.cs C# file.\n\n## Next Steps\nNow that you have completed the quickstart, learn how to perform additional important tasks in Mobile Services:\n\n* [Get started with offline data sync]\n  <br/>Learn how the quickstart uses offline data sync to make the app responsive and robust.\n\n* [Get started with authentication]\n  <br/>Learn how to authenticate users of your app with an identity provider.\n\n* [Get started with push notifications]\n  <br/>Learn how to send a very basic push notification to your app.\n\n* [Troubleshoot a Mobile Services .NET backend]\n  <br/> Learn how to diagnose and fix issues that can arise with a Mobile Services .NET backend.\n\n<!-- Anchors. -->\n[Getting started with Mobile Services]:#getting-started\n[Create a new mobile service]:#create-new-service\n[Next Steps]:#next-steps\n\n\n\n<!-- Images. -->\n[0]: ./media/mobile-services-dotnet-backend-xamarin-android-get-started/mobile-quickstart-completed-android.png\n[6]: ./media/mobile-services-dotnet-backend-xamarin-android-get-started/mobile-portal-quickstart-xamarin.png\n[7]: ./media/mobile-services-dotnet-backend-xamarin-android-get-started/mobile-quickstart-steps-xamarin-android.png\n[8]: ./media/mobile-services-dotnet-backend-xamarin-android-get-started/mobile-xamarin-project-android-vs.png\n[9]: ./media/mobile-services-dotnet-backend-xamarin-android-get-started/mobile-xamarin-project-android-xs.png\n[10]: ./media/mobile-services-dotnet-backend-xamarin-android-get-started/mobile-quickstart-startup-android.png\n\n<!-- URLs. -->\n[Get started with offline data sync]: mobile-services-xamarin-android-get-started-offline-data.md\n[Get started with authentication]: mobile-services-dotnet-backend-xamarin-android-get-started-users.md\n[Get started with push notifications]: mobile-services-dotnet-backend-xamarin-android-get-started-push.md\n[Visual Studio Professional 2013]: https://go.microsoft.com/fwLink/p/?LinkID=257546\n[Mobile Services SDK]: http://go.microsoft.com/fwlink/?LinkId=257545\n[JavaScript and HTML]: mobile-services-win8-javascript/\n[Azure classic portal]: https://manage.windowsazure.com/\n[classic portal]: https://manage.windowsazure.com/\n[JavaScript backend version]: mobile-services-android-get-started.md\n[Troubleshoot a Mobile Services .NET backend]: mobile-services-dotnet-backend-how-to-troubleshoot.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-xamarin-ios-get-started-users.md",
    "content": "<properties\n\tpageTitle=\"Get Started with authentication in Mobile Services for Xamarin iOS apps | Microsoft Azure\"\n\tdescription=\"Learn how to use Mobile Services to authenticate users of your Xamarin iOS app through a variety of identity providers, including Google, Facebook, Twitter, and Microsoft.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"xamarin\"\n\tauthors=\"lindydonna\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-xamarin-ios\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"donnam\"/>\n\n# Add authentication to your Mobile Services app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-users.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-users.md)\n- [(Android | Javascript)](mobile-services-android-get-started-users.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started-users.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-users.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-users.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-users.md)\n- [(HTML | Javascript)](mobile-services-html-get-started-users.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows you how to authenticate users in Mobile Services from your app. In this tutorial, you add authentication to the quickstart project using an identity provider that is supported by Mobile Services. After being successfully authenticated and authorized by Mobile Services, the user ID value is displayed.\n\nThis tutorial walks you through these basic steps to enable authentication in your app:\n\n1. [Register your app for authentication and configure Mobile Services]\n2. [Restrict table permissions to authenticated users]\n3. [Add authentication to the app]\n\nThis tutorial is based on the Mobile Services quickstart. You must also first complete the tutorial [Get started with Mobile Services].\n\n## <a name=\"register\"></a>Register your app for authentication and configure Mobile Services\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Dashboard**, and make a note of the **Mobile Service URL** value.\n\n2. Register your app with one or more of the following authentication providers:\n   * [Google](./\nmobile-services-how-to-register-google-authentication.md)\n   * [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n   * [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n   * [Microsoft](./\nmobile-services-how-to-register-microsoft-authentication.md)\n   * [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md).\n\n    Make a note of the client identity and client secret values generated by the provider. Do not distribute or share the client secret.\n\n3. Back in the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Identity** > your identity provider settings, then enter the client ID and secret value from your provider.\n\nYou've now configured both your app and your mobile service to work with your auth provider. You may optionally repeat all these steps for each additional identity provider you'd like to support.\n\n> [AZURE.IMPORTANT] Verify that you've set the correct redirect URI on your identity provider's developer site. As described in the linked instructions for each provider above, the redirect URI may be different for a .NET backend service vs. for a JavaScript backend service. An incorrectly configured redirect URI may result in the login screen not being displayed properly and the app malfunctioning in unexpected ways.\n\n\n### (Optional) Configure your .NET Mobile Service for Azure Active Directory\n\n>[AZURE.NOTE] These steps are optional because they only apply to the Azure Active Directory login provider.\n\n1. Install the [WindowsAzure.MobileServices.Backend.Security NuGet package](https://www.nuget.org/packages/WindowsAzure.MobileServices.Backend.Security).\n\n2. In Visual Studio expand App_Start and open WebApiConfig.cs. Add the following `using` statement at the top:\n\n        using Microsoft.WindowsAzure.Mobile.Service.Security.Providers;\n\n3. Also in WebApiConfig.cs, add the following code to the `Register` method, immediately after `options` is instantiated:\n\n        options.LoginProviders.Remove(typeof(AzureActiveDirectoryLoginProvider));\n        options.LoginProviders.Add(typeof(AzureActiveDirectoryExtendedLoginProvider));\n\n## <a name=\"permissions\"></a>Restrict permissions to authenticated users\n\n\n\nBy default, all requests to mobile service resources are restricted to clients that present the application key, which does not strictly secure access to resources. To secure your resources, you must restrict access to only authenticated clients.\n\n1. In Visual Studio, open your mobile service project, expand the Controllers folder, and open **TodoItemController.cs**. The **TodoItemController** class implements data access for the TodoItem table. Add the following `using` statement:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\n2. Apply the following _AuthorizeLevel_ attribute to the **TodoItemController** class.\n\n\t\t[AuthorizeLevel(AuthorizationLevel.User)]\n\n\tThis makes sure that all operations against the _TodoItem_ table require an authenticated user. You can also apply the *AuthorizeLevel* attribute at the method level.\n\n3. (Optional) If you wish to debug authentication locally, expand the `App_Start` folder, open **WebApiConfig.cs**, and add the following code to the **Register** method.  \n\n\t\tconfig.SetIsHosted(true);\n\n\tThis tells the local mobile service project to run as if it is being hosted in Azure, including honoring the *AuthorizeLevel* settings. Without this setting, all HTTP requests to localhost are permitted without authentication despite the *AuthorizeLevel* setting. When you enable self-hosted mode, you also need to set a value for the local application key.\n\n4. (Optional) In the web.config project file, set a string value for the `MS_ApplicationKey` app setting.\n\n\tThis is the password that you use (with no username) to test the API help pages when you run the service locally.  This string value is not used by the live site in Azure, and you do not need to use the actual application key; any valid string value will work.\n\n4. Republish your project.\n\n&nbsp;&nbsp;&nbsp;6. In Visual Studio or Xamarin Studio, run the client project on a device or simulator. Verify that an unhandled exception with a status code of 401 (Unauthorized) is raised after the app starts.\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This happens because the app attempts to access Mobile Services as an unauthenticated user, but the *TodoItem* table now requires authentication.\n\nNext, you will update the app to authenticate users before requesting resources from the mobile service.\n\n## <a name=\"add-authentication\"></a>Add authentication to the app\n\nIn this section, you will modify the app to display a login screen before displaying data. When the app starts, it will not connect to your mobile service and will not display any data. After the first time that the user performs the refresh gesture, the login screen will appear; after successful login the list of todo items will be displayed.\n\n1. In the client project, open the file **QSTodoService.cs** and add the following declarations to QSTodoService:\n\n\t\t// Mobile Service logged in user\n\t\tprivate MobileServiceUser user;\n\t\tpublic MobileServiceUser User { get { return user; } }\n\n2. Add a new method **Authenticate** to **QSTodoService** with the following definition:\n\n        private async Task Authenticate(UIViewController view)\n        {\n            try\n            {\n                user = await client.LoginAsync(view, MobileServiceAuthenticationProvider.Facebook);\n            }\n            catch (Exception ex)\n            {\n                Console.Error.WriteLine (@\"ERROR - AUTHENTICATION FAILED {0}\", ex.Message);\n            }\n        }\n\n\t> [AZURE.NOTE] When you use an identity provider other than a Facebook, change the value passed to **LoginAsync** above to one of the following: _MicrosoftAccount_, _Twitter_, _Google_, or _WindowsAzureActiveDirectory_.\n\n3. Open **QSTodoListViewController.cs** and modify the method definition of **ViewDidLoad** to remove or comment-out the call to **RefreshAsync()** near the end.\n\n4. Add the following code at the top of the **RefreshAsync** method definition:\n\n\t\t// Add at the start of the RefreshAsync method.\n\t\tif (todoService.User == null) {\n\t\t\tawait QSTodoService.DefaultService.Authenticate (this);\n\t\t\tif (todoService.User == null) {\n\t\t\t\tConsole.WriteLine (\"You must sign in.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\tThis displays a sign-in screen to attempt authentication when the **User** property is null. When the login is successful the **User** is set.\n\n5. Press the **Run** button to build the project and start the app in the iPhone simulator. Verify that the app displays no data. **RefreshAsync()** has not yet been called.\n\n6. Perform the refresh gesture by pulling down the list of items, which calls **RefreshAsync()**. This calls **Authenticate()** to start authentication and the login screen is displayed. After you have successfully authenticated, the app displays the list of todo items and you can make updates to the data.\n\n## <a name=\"next-steps\"> </a>Next steps\n\nIn the next tutorial, [Service-side authorization of Mobile Services users][Authorize users with scripts], you will take the user ID value provided by Mobile Services based on an authenticated user and use it to filter the data returned by Mobile Services.\n\n\n<!-- Anchors. -->\n[Register your app for authentication and configure Mobile Services]: #register\n[Restrict table permissions to authenticated users]: #permissions\n[Add authentication to the app]: #add-authentication\n[Next Steps]:#next-steps\n\n\n<!-- URLs. -->\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[My Applications]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n[Live SDK for Windows]: http://go.microsoft.com/fwlink/p/?LinkId=262253\n[Get started with Mobile Services]: mobile-services-dotnet-backend-xamarin-ios-get-started.md\n[Get started with authentication]: mobile-services-dotnet-backend-xamarin-ios-get-started-users.md\n[Get started with push notifications]: mobile-services-dotnet-backend-xamarin-ios-get-started-push.md\n[Authorize users with scripts]: mobile-services-dotnet-backend-service-side-authorization.md\n[JavaScript and HTML]: mobile-services-dotnet-backend-windows-store-javascript-get-started-users.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-backend-xamarin-ios-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Mobile Services for Xamarin iOS apps | Microsoft Azure\"\n\tdescription=\"Follow this tutorial to get started using Azure Mobile Services for Xamarin iOS development\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"xamarin\"\n\tauthors=\"lindydonna\"\n\tmanager=\"dwrede\"\n\teditor=\"mollybos\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-xamarin-ios\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"get-started-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"donnam\"/>\n\n# <a name=\"getting-started\"> </a>Get started with Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis tutorial shows you how to add a cloud-based backend service to a Xamarin iOS app using Azure Mobile Services. In this tutorial, you will create both a new mobile service and a simple _To do list_ app that stores app data in the new mobile service. The mobile service that you will create uses the supported .NET languages using Visual Studio for server-side business logic and to manage the mobile service. To create a mobile service that lets you write your server-side business logic in JavaScript, see the [JavaScript backend version] of this topic.\n\n>[AZURE.NOTE]This topic shows you how to create a new mobile service project by using the Azure classic portal. By using Visual Studio 2013 Update 2, you can also add a new mobile service project to an existing Visual Studio solution. For more information, see [Quickstart: Add a mobile service (.NET backend)](http://msdn.microsoft.com/library/windows/apps/dn629482.aspx)\n\nA screenshot from the completed app is below:\n\n![][0]\n\n\nCompleting this tutorial is a prerequisite for all other Mobile Services tutorials for Xamarin iOS apps.\n\n>[AZURE.NOTE]To complete this tutorial, you need an Azure account. If you don't have an account, you can sign up for an Azure trial and get up to 10 free mobile services that you can keep using even after your trial ends. For details, see <a href=\"http://www.windowsazure.com/pricing/free-trial/?WT.mc_id=A0E0E5C02&amp;returnurl=http%3A%2F%2Fwww.windowsazure.com%2Fen-us%2Fdocumentation%2Farticles%2Fmobile-services-dotnet-backend-xamarin-ios-get-started\" target=\"_blank\">Azure Free Trial</a>.<br />This tutorial requires <a href=\"https://go.microsoft.com/fwLink/p/?LinkID=257546\" target=\"_blank\">Visual Studio Professional 2013</a>. A free trial version is available.\n\n## Create a new mobile service\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** page, select **Create a free 20 MB SQL Database**, select **.NET** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t> [AZURE.NOTE] As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-dotnet-backend-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n## Create a new Xamarin iOS app\n\nOnce you have created your mobile service, you can follow an easy quickstart in the Azure classic portal to either create a new app or modify an existing app to connect to your mobile service.\n\nIn this section you will download a new Xamarin iOS app and a service project for your mobile service.\n\n1. If you haven't already done so, install Visual Studio with Xamarin. Instructions can be found on [Setup and Install for Visual Studio and Xamarin](https://msdn.microsoft.com/library/mt613162.aspx). You can also use Xamarin Studio on a Mac OS X machine, see [Setup, install, and verifications for Mac users](https://msdn.microsoft.com/library/mt488770.aspx).\n\n2. In the [Azure classic portal], click **Mobile Services**, and then click the mobile service that you just created.\n\n3. In the quickstart tab, click **Xamarin** under **Choose platform** and expand **Create a new Xamarin app**.\n\n   \t![][6]\n\n   \tThis displays the three easy steps to create a Xamarin iOS app connected to your mobile service.\n\n  \t![][7]\n\n4. Under **Download and publish your service to the cloud**, select **iOS** and click **Download**.\n\n  \tThis downloads a solution contains projects for both the mobile service and for the sample _To do list_ application that is connected to your mobile service. Save the compressed project file to your local computer, and make a note of where you save it.\n\n5. Download your publish profile, save the downloaded file to your local computer, and make a note of where you save it.\n\n## Test the mobile service\n\n\n\nThe mobile service project lets you run your new mobile service locally. This makes it easy to debug your service code before you even publish it to Azure.\n\n1. On your Windows PC, download your personalized server project, extract it, and then open it in Visual Studio.\n\n2. Press the **F5** key to rebuild the project and start the mobile service locally. A web page is displayed after the mobile service starts successfully.\n\n## Publish your mobile service\n\n\n1. In Visual Studio, right-click the project, click **Publish** > **Microsoft Azure Mobile Services**. Instead of using Visual Studio, [you may also use Git](./\nmobile-services-dotnet-backend-store-code-source-control.md).\n\n2. Sign in with Azure credentials and select your service from **Existing Mobile Services**. Visual Studio downloads your publish settings directly from Azure. Finally, click **Publish**.\n\n## Run the Xamarin iOS app\n\nThe final stage of this tutorial is to build and run your new app.\n\n1. Navigate to the client project within the mobile service solution, in either Visual Studio or Xamarin Studio.\n\n\t![][8]\n\n\t![][9]\n\n2. Press the **Run** button to build the client project and start the app in the iPhone emulator.\n\n3. In the app, type meaningful text, such as _Complete the tutorial_ and then click the plus (**+**) icon.\n\n\t![][10]\n\n\tThis sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the TodoItem table. Items stored in the table are returned by the mobile service, and the data is displayed in the list.\n\n>[AZURE.NOTE]You can review the code that accesses your mobile service to query and insert data in the QSTodoService.cs C# file.\n\n\n## Next Steps\nNow that you have completed the quickstart, learn how to perform additional important tasks in Mobile Services:\n\n* [Get started with offline data sync]\n  <br/>Learn how the quickstart uses offline data sync to make the app responsive and robust.\n\n* [Get started with authentication]\n  <br/>Learn how to authenticate users of your app with an identity provider.\n\n* [Get started with push notifications]\n  <br/>Learn how to send a very basic push notification to your app.\n\n* [Troubleshoot a Mobile Services .NET backend]\n  <br/> Learn how to diagnose and fix issues that can arise with a Mobile Services .NET backend.\n\n<!-- Anchors. -->\n[Getting started with Mobile Services]:#getting-started\n[Create a new mobile service]:#create-new-service\n[Next Steps]:#next-steps\n\n\n\n<!-- Images. -->\n[0]: ./media/mobile-services-dotnet-backend-xamarin-ios-get-started/mobile-quickstart-completed-ios.png\n[6]: ./media/mobile-services-dotnet-backend-xamarin-ios-get-started/mobile-portal-quickstart-xamarin-ios.png\n[7]: ./media/mobile-services-dotnet-backend-xamarin-ios-get-started/mobile-quickstart-steps-xamarin-ios.png\n[8]: ./media/mobile-services-dotnet-backend-xamarin-ios-get-started/mobile-xamarin-project-ios-vs.png\n[9]: ./media/mobile-services-dotnet-backend-xamarin-ios-get-started/mobile-xamarin-project-ios-xs.png\n[10]: ./media/mobile-services-dotnet-backend-xamarin-ios-get-started/mobile-quickstart-startup-ios.png\n\n<!-- URLs. -->\n[Get started with offline data sync]: mobile-services-xamarin-ios-get-started-offline-data.md\n[Get started with authentication]: mobile-services-dotnet-backend-xamarin-ios-get-started-users.md\n[Get started with push notifications]: mobile-services-dotnet-backend-xamarin-ios-get-started-push.md\n[Visual Studio Professional 2013]: https://go.microsoft.com/fwLink/p/?LinkID=257546\n[Mobile Services SDK]: http://go.microsoft.com/fwlink/?LinkId=257545\n[JavaScript and HTML]: mobile-services-win8-javascript/\n[Azure classic portal]: https://manage.windowsazure.com/\n[JavaScript backend version]: mobile-services-ios-get-started.md\n[Troubleshoot a Mobile Services .NET backend]: mobile-services-dotnet-backend-how-to-troubleshoot.md\n"
  },
  {
    "path": "docs/mobile-services-dotnet-how-to-use-client-library.md",
    "content": "<properties\n\tpageTitle=\"Working with the Mobile Services managed client library (Windows | Xamarin) | Microsoft Azure\"\n\tdescription=\"Learn how to use a .NET client for Azure Mobile Services with Windows and Xamarin apps.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-multiple\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# How to use the managed client library for Azure Mobile Services\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR]\n- [Android](mobile-services-android-how-to-use-client-library.md)\n- [HTML/JavaScript](mobile-services-html-how-to-use-client-library.md)\n- [iOS](mobile-services-ios-how-to-use-client-library.md)\n- [Managed (Windows/Xamarin)](mobile-services-dotnet-how-to-use-client-library.md)\n\n## Overview\n\nThis guide shows you how to perform common scenarios using the managed client library for Azure Mobile Services in Windows and Xamarin apps. The scenarios covered include querying for data, inserting, updating, and deleting data, authenticating users, and handling errors. If you are new to Mobile Services, you should consider first completing the [Mobile Services quickstart](mobile-services-dotnet-backend-xamarin-ios-get-started.md) tutorial.\n\n## <a name=\"what-is\"></a>What is Mobile Services\n\nAzure Mobile Services is a highly scalable mobile application development platform that lets you add enhanced functionality to your mobile device apps by using Azure.\n\nWith Mobile Services you can:\n\n+ **Build native and cross platform apps** - Connect your iOS, Android, Windows, or cross-platform Xamarin or Cordova (Phonegap) apps to your backend mobile service using native SDKs.  \n+ **Send push notifications to your users** - Send push notifications to your users of your app.\n+ **Authenticate your users** - Leverage popular identity providers like Facebook and Twitter to authenticate your app users.\n+ **Store data in the cloud** - Store user data in a SQL Database (by default) or in Mongo DB, DocumentDB, Azure Tables, or Azure Blobs.\n+ **Build offline-ready apps with sync** - Make your apps work offline and use Mobile Services to sync data in the background.\n+ **Monitor and scale your apps** - Monitor app usage and scale your backend as demand grows.\n\n## <a name=\"concepts\"> </a>Mobile Services Concepts\n\nThe following are important features and concepts in the Mobile Services:\n\n+ **Application key:** a unique value that is used to limit access to your mobile service from random clients; this \"key\" is not a security token and is not used to authenticate users of your app.    \n+ **Backend:** the mobile service instance that supports your app. A mobile service is implemented either as an ASP.NET Web API project (*.NET backend* ) or as a Node.js project (*JavaScript backend*).\n+ **Identity provider:** an external service, trusted by Mobile Services, that authenticates your app's users. Supported providers include: Facebook, Twitter, Google, Microsoft Account, and Azure Active Directory.\n+ **Push notification:** Service-initiated message that is sent to a registered device or user using Azure Notification Hubs.\n+ **Scale:** The ability to add, for an additional cost, more processing power, performance, and storage as your app becomes more popular.\n+ **Scheduled job:** Custom code that is run either on a pre-determined schedule or on-demand.\n\nFor more information, see [Mobile Services Concepts](./\nmobile-services-concepts-links.md).\n\n## <a name=\"setup\"></a>Setup and Prerequisites\n\nWe assume that you have created a mobile service and a table. For more information see [Create a table](http://go.microsoft.com/fwlink/?LinkId=298592). In the code used in this topic, the table is named `TodoItem` and it will have the following columns: `Id`, `Text`, and `Complete`.\n\nThe corresponding typed client-side .NET type is the following:\n\n\n\tpublic class TodoItem\n\t{\n\t\tpublic string Id { get; set; }\n\n\t\t[JsonProperty(PropertyName = \"text\")]\n\t\tpublic string Text { get; set; }\n\n\t\t[JsonProperty(PropertyName = \"complete\")]\n\t\tpublic bool Complete { get; set; }\n\t}\n\nNote that the [JsonPropertyAttribute](http://www.newtonsoft.com/json/help/html/Properties_T_Newtonsoft_Json_JsonPropertyAttribute.htm) is used to define the mapping between the PropertyName mapping between the client type and the table.\n\nWhen dynamic schema is enabled in a JavaScript backend mobile service, Azure Mobile Services automatically generates new columns based on the object in insert or update requests. For more information, see [Dynamic schema](http://go.microsoft.com/fwlink/?LinkId=296271). In a .NET backend mobile service, the table is defined in the data model of the project.\n\n## <a name=\"create-client\"></a>How to: Create the Mobile Services client\n\nThe following code creates the `MobileServiceClient` object that is used to access your mobile service.\n\n\n\tMobileServiceClient client = new MobileServiceClient(\n\t\t\"AppUrl\",\n\t\t\"AppKey\"\n\t);\n\nIn the code above, replace `AppUrl` and `AppKey` with the mobile service URL and application key, in that order. Both of these are available on the Azure classic portal, by selecting your mobile service and then clicking on \"Dashboard\".\n\n>[AZURE.IMPORTANT]The application key is intended to filter-out random request against your mobile service, and it is distributed with the application. Because this key is not encrypted, it cannot be considered secure. To truly secure your mobile service data, you must instead authenticate users before allowing access. For more information, see [How to: Authenticate users](#authentication).\n\n## <a name=\"instantiating\"></a>How to: Create a table reference\n\nAll of the code that accesses or modifies data in the Mobile Services table calls functions on the `MobileServiceTable` object. You get a reference to the table by calling the [GetTable](https://msdn.microsoft.com/library/azure/jj554275.aspx) method on an instance of the `MobileServiceClient`, as follows:\n\n    IMobileServiceTable<TodoItem> todoTable =\n\t\tclient.GetTable<TodoItem>();\n\nThis is the typed serialization model; see the discussion of the [untyped serialization model](#untyped) below.\n\n## <a name=\"querying\"></a>How to: Query data from a mobile service\n\nThis section describes how to issue queries to the mobile service, which includes the following functionality:\n\n- [Filter returned data]\n- [Sort returned data]\n- [Return data in pages]\n- [Select specific columns]\n- [Look up data by ID]\n\n>[AZURE.NOTE] A server-driven page size is enforced to prevent all rows from being returned. This keeps default requests for large data sets from negatively impacting the service. To return more than 50 rows, use the `Take` method, as described in [Return data in pages].\n\n### <a name=\"filtering\"></a>How to: Filter returned data\n\nThe following code illustrates how to filter data by including a `Where` clause in a query. It returns all items from `todoTable` whose `Complete` property is equal to `false`. The `Where` function applies a row filtering predicate to the query against the table.\n\n\t// This query filters out completed TodoItems and\n\t// items without a timestamp.\n\tList<TodoItem> items = await todoTable\n\t   .Where(todoItem => todoItem.Complete == false)\n\t   .ToListAsync();\n\nYou can view the URI of the request sent to the mobile service by using message inspection software, such as browser developer tools or [Fiddler]. If you look at the request URI below,  notice that we are modifying the query string itself:\n\n\tGET /tables/todoitem?$filter=(complete+eq+false) HTTP/1.1\nThis request would normally be translated roughly into the following SQL query on the server side:\n\n\tSELECT *\n\tFROM TodoItem\n\tWHERE ISNULL(complete, 0) = 0\n\nThe function which is passed to the `Where` method can have an arbitrary number of conditions. For example, the line below:\n\n\t// This query filters out completed TodoItems where Text isn't null\n\tList<TodoItem> items = await todoTable\n\t   .Where(todoItem => todoItem.Complete == false\n\t\t   && todoItem.Text != null)\n\t   .ToListAsync();\n\nWould be roughly translated (for the same request shown before) as\n\n\tSELECT *\n\tFROM TodoItem\n\tWHERE ISNULL(complete, 0) = 0\n\t      AND ISNULL(text, 0) = 0\n\nThe `where` statement above will find items with `Complete` status set to false with non-null `Text`.\n\nWe also could have written that in multiple lines instead:\n\n\tList<TodoItem> items = await todoTable\n\t   .Where(todoItem => todoItem.Complete == false)\n\t   .Where(todoItem => todoItem.Text != null)\n\t   .ToListAsync();\n\nThe two methods are equivalent and may be used interchangeably.  The former option -- of concatenating multiple predicates in one query -- is more compact and recommended.\n\nThe `where` clause supports operations that be translated into the Mobile Services OData subset. This includes relational operators (==, !=, <, <=, >, >=), arithmetic operators (+, -, /, *, %), number precision (Math.Floor, Math.Ceiling), string functions (Length, Substring, Replace, IndexOf, StartsWith, EndsWith), date properties (Year, Month, Day, Hour, Minute, Second), access properties of an object, and expressions combining all of these.\n\n### <a name=\"sorting\"></a>How to: Sort returned data\n\nThe following code illustrates how to sort data by including an `OrderBy` or `OrderByDescending` function in the query. It returns items from `todoTable` sorted ascending by the `Text` field.\n\n\t// Sort items in ascending order by Text field\n\tMobileServiceTableQuery<TodoItem> query = todoTable\n\t\t\t\t\t.OrderBy(todoItem => todoItem.Text)\n \tList<TodoItem> items = await query.ToListAsync();\n\n\t// Sort items in descending order by Text field\n\tMobileServiceTableQuery<TodoItem> query = todoTable\n\t\t\t\t\t.OrderByDescending(todoItem => todoItem.Text)\n \tList<TodoItem> items = await query.ToListAsync();\n\n### <a name=\"paging\"></a>How to: Return data in pages\n\nBy default, the server returns only the first 50 rows. You can increase the number of returned rows by calling the [Take] method. Use `Take` along with the [Skip] method to request a specific \"page\" of the total dataset returned by the query. The following query, when executed, returns the top three items in the table.\n\n\t// Define a filtered query that returns the top 3 items.\n\tMobileServiceTableQuery<TodoItem> query = todoTable\n\t\t\t\t\t.Take(3);\n\tList<TodoItem> items = await query.ToListAsync();\n\nThe following revised query skips the first three results and returns the next three after that. This is effectively the second \"page\" of data, where the page size is three items.\n\n\t// Define a filtered query that skips the top 3 items and returns the next 3 items.\n\tMobileServiceTableQuery<TodoItem> query = todoTable\n\t\t\t\t\t.Skip(3)\n\t\t\t\t\t.Take(3);\n\tList<TodoItem> items = await query.ToListAsync();\n\nYou can also use the [IncludeTotalCount] method to ensure that the query will get the total count for <i>all</i> the records that would have been returned, ignoring any take paging/limit clause specified:\n\n\tquery = query.IncludeTotalCount();\n\nThis is a simplified scenario of passing hard-coded paging values to the `Take` and `Skip` methods. In a real-world app, you can use queries similar to the above with a pager control or comparable UI to let users navigate to previous and next pages.\n\n#### Paging considerations for a .NET backend mobile service\n\nTo override the 50 row limit in a .NET backend mobile service, you must also apply the [EnableQueryAttribute](https://msdn.microsoft.com/library/system.web.http.odata.enablequeryattribute.aspx) to the public GET method and specify the paging behavior. When applied to the method, the following sets the maximum returned rows to 1000:\n\n    [EnableQuery(MaxTop=1000)]\n\n\n### <a name=\"selecting\"></a>How to: Select specific columns\n\nYou can specify which set of properties to include in the results by adding a `Select` clause to your query. For example, the following code shows how to select just one field and also how to select and format multiple fields:\n\n\t// Select one field -- just the Text\n\tMobileServiceTableQuery<TodoItem> query = todoTable\n\t\t\t\t\t.Select(todoItem => todoItem.Text);\n\tList<string> items = await query.ToListAsync();\n\n\t// Select multiple fields -- both Complete and Text info\n\tMobileServiceTableQuery<TodoItem> query = todoTable\n\t\t\t\t\t.Select(todoItem => string.Format(\"{0} -- {1}\", todoItem.Text.PadRight(30), todoItem.Complete ? \"Now complete!\" : \"Incomplete!\"));\n\tList<string> items = await query.ToListAsync();\n\nAll the functions described so far are additive, so we can just keep calling them and we'll each time affect more of the query. One more example:\n\n\tMobileServiceTableQuery<TodoItem> query = todoTable\n\t\t\t\t\t.Where(todoItem => todoItem.Complete == false)\n\t\t\t\t\t.Select(todoItem => todoItem.Text)\n\t\t\t\t\t.Skip(3).\n\t\t\t\t\t.Take(3);\n\tList<string> items = await query.ToListAsync();\n\n### <a name=\"lookingup\"></a>How to: Look up data by ID\n\nThe `LookupAsync` function can be used to look up objects from the database with a particular ID.\n\n\t// This query filters out the item with the ID of 37BBF396-11F0-4B39-85C8-B319C729AF6D\n\tTodoItem item = await todoTable.LookupAsync(\"37BBF396-11F0-4B39-85C8-B319C729AF6D\");\n\n## <a name=\"inserting\"></a>How to: Insert data into a mobile service\n\n> [AZURE.NOTE] If you want to perform insert, lookup, delete, or update operations on a type, then you need to create a member called **Id**. This is why the example class **TodoItem** has a member of name **Id**. A valid id value must always be present in update and delete operations.\n\nThe following code illustrates how to insert new rows into a table. The parameter contains the data to be inserted as a .NET object.\n\n\tawait todoTable.InsertAsync(todoItem);\n\nIf a unique custom ID value is not included in the `todoItem` passed to the `todoTable.InsertAsync` call, a value for ID is generated by the server and is set in the `todoItem` object returned to the client.\n\nTo insert untyped data, you may take advantage of Json.NET as shown below.\n\n\tJObject jo = new JObject();\n\tjo.Add(\"Text\", \"Hello World\");\n\tjo.Add(\"Complete\", false);\n\tvar inserted = await table.InsertAsync(jo);\n\nHere is an example using an email address as a unique string id.\n\n\tJObject jo = new JObject();\n\tjo.Add(\"id\", \"myemail@emaildomain.com\");\n\tjo.Add(\"Text\", \"Hello World\");\n\tjo.Add(\"Complete\", false);\n\tvar inserted = await table.InsertAsync(jo);\n\n\n### Working with ID values\n\nMobile Services supports unique custom string values for the table's **id** column. This allows applications to use custom values such as email addresses or user names for the ID.\n\nString IDs provide you with the following benefits:\n\n+ IDs are generated without making a round-trip to the database.\n+ Records are easier to merge from different tables or databases.\n+ IDs values can integrate better with an application's logic.\n\nWhen a string ID value is not set on an inserted record, Mobile Services generates a unique value for the ID. You can use the `Guid.NewGuid()` method To generate your own ID values, either on the client or in a .NET mobile backend service. To learn more about generating GUIDs in a JavaScript backend mobile service, see [How to: Generate unique ID values](mobile-services-how-to-use-server-scripts.md#generate-guids).\n\nYou can also use integer IDs for your tables. To use an integer ID, you must create your table with the `mobile table create` command using the `--integerId` option. This command is used with the Command-line Interface (CLI) for Azure. For more information on using the CLI, see [CLI to manage Mobile Services tables](https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-command-line-tools/#Mobile_Tables).\n\n## <a name=\"modifying\"></a>How to: Modify data in a mobile service\n\nThe following code illustrates how to update an existing instance with the same ID with new information. The parameter contains the data to be updated as a .NET object.\n\n\tawait todoTable.UpdateAsync(todoItem);\n\n\nTo insert untyped data, you may take advantage of Json.NET like so. Note that when making an update, an ID must be specified, as that is how the mobile service identifies which instance to update. The ID can be obtained from the result of the `InsertAsync` call.\n\n\tJObject jo = new JObject();\n\tjo.Add(\"Id\", \"37BBF396-11F0-4B39-85C8-B319C729AF6D\");\n\tjo.Add(\"Text\", \"Hello World\");\n\tjo.Add(\"Complete\", false);\n\tvar inserted = await table.UpdateAsync(jo);\n\nIf you attempt to update an item without providing the \"Id\" value, there is no way for the service to tell which instance to update, so the Mobile Services SDK will throw an `ArgumentException`.\n\n\n## <a name=\"deleting\"></a>How to: Delete data in a mobile service\n\nThe following code illustrates how to delete an existing instance. The instance is identified by the \"Id\" field set on the `todoItem`.\n\n\tawait todoTable.DeleteAsync(todoItem);\n\nTo delete untyped data, you may take advantage of Json.NET like so. Note that when making a delete request, an ID must be specified, as that is how the mobile service identifies which instance to delete. A delete request needs only the ID; other properties are not passed to the service, and if any are passed, they are ignored at the service. The result of a `DeleteAsync` call is usually `null` as well. The ID to pass in can be obtained from the result of the `InsertAsync` call.\n\n\tJObject jo = new JObject();\n\tjo.Add(\"Id\", \"37BBF396-11F0-4B39-85C8-B319C729AF6D\");\n\tawait table.DeleteAsync(jo);\n\nIf you attempt to delete an item without the \"Id\" field already set, there is no way for the service to tell which instance to delete, so you will get back a `MobileServiceInvalidOperationException` from the service. Similarly, if you attempt to delete an untyped item without the \"Id\" field already set, you will again get back a `MobileServiceInvalidOperationException` from the service.\n\n## <a name=\"#custom-api\"></a>How to: Call a custom API\n\nA custom API enables you to define custom endpoints that expose server functionality that does not map to an insert, update, delete, or read operation. By using a custom API, you can have more control over messaging, including reading and setting HTTP message headers and defining a message body format other than JSON. For an example of how to create a custom API in your mobile service, see [How to: define a custom API endpoint](mobile-services-dotnet-backend-define-custom-api.md).\n\nYou call a custom API by calling one of the [InvokeApiAsync] method overloads on the client. For example, the following line of code sends a POST request to the **completeAll** API on the mobile service:\n\n    var result = await App.MobileService\n        .InvokeApiAsync<MarkAllResult>(\"completeAll\",\n        System.Net.Http.HttpMethod.Post, null);\n\nNote that this a typed method call, which requires that the **MarkAllResult** return type be defined. Both typed and untyped methods are supported. This is an almost trivial example as it is typed, sends no payload, has no query parameters, and doesn't change the request headers. For more realistic examples and a more a complete discussion of [InvokeApiAsync], see [Custom API in Azure Mobile Services Client SDKs].\n\n## How to: Register for push notifications\n\nThe Mobile Services client enables you to register for push notifications with Azure Notification Hubs. When registering, you obtain a handle that you obtain from the platform-specific Push Notification Service (PNS). You then provide this value along with any tags when you create the registration. The following code registers your Windows app for push notifications with the Windows Notification Service (WNS):\n\n\tprivate async void InitNotificationsAsync()\n\t{\n\t    // Request a push notification channel.\n\t    var channel =\n\t        await PushNotificationChannelManager\n\t            .CreatePushNotificationChannelForApplicationAsync();\n\n\t    // Register for notifications using the new channel and a tag collection.\n\t\tvar tags = new List<string>{ \"mytag1\", \"mytag2\"};\n\t    await MobileService.GetPush().RegisterNativeAsync(channel.Uri, tags);\n\t}\n\nNote that in this example, two tags are included with the registration. For more information on Windows apps, see [Add push notifications to your app](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md).\n\nXamarin apps require some additional code to be able to register a Xamarin app running on iOS or Android app with the Apple Push Notification Service (APNS) and Google Cloud Messaging (GCM) services, respectively. For more information see **Add push notifications to your app** ([Xamarin.iOS](partner-xamarin-mobile-services-ios-get-started-push.md#add-push) | [Xamarin.Android](partner-xamarin-mobile-services-android-get-started-push.md#add-push)).\n\n>[AZURE.NOTE]When you need to send notifications to specific registered users, it is important to require authentication before registration, and then verify that the user is authorized to register with a specific tag. For example, you must check to make sure a user doesn't register with a tag that is someone else's user ID. For more information, see [Send push notifications to authenticated users](mobile-services-dotnet-backend-windows-store-dotnet-push-notifications-app-users.md).\n\n## <a name=\"pull-notifications\"></a>How to: Use periodic notifications in a Windows app\n\nWindows supports period notifications (pull notifications) to update live tiles. With periodic notifications enabled, Windows will periodically access a custom API endpoint to update the app tile on the start menu. To use periodic notifications, you must [define a custom API](mobile-services-javascript-backend-define-custom-api.md) that returns XML data in a tile-specific format. For more information, see [Periodic notifications](https://msdn.microsoft.com/library/windows/apps/hh761461.aspx).\n\nThe following example turns on period notifications to request tile template data from a *tiles* custom endpoint:\n\n    TileUpdateManager.CreateTileUpdaterForApplication().StartPeriodicUpdate(\n        new System.Uri(MobileService.ApplicationUri, \"/api/tiles\"),\n        PeriodicUpdateRecurrence.Hour\n    );\n\nSelect a [PeriodicUpdateRecurrance](https://msdn.microsoft.com/library/windows/apps/windows.ui.notifications.periodicupdaterecurrence.aspx) value that best matches the update frequency of your data.\n\n## <a name=\"optimisticconcurrency\"></a>How to: Use optimistic concurrency\n\nTwo or more clients may write changes to the same item, at the same time, in some scenarios. Without any conflict detection, the last write would overwrite any previous updates even if this was not the desired result. Optimistic Concurrency Control assumes that each transaction can commit and therefore does not use any resource locking. Before committing a transaction, optimistic concurrency control verifies that no other transaction has modified the data. If the data has been modified, the committing transaction is rolled back.\n\nMobile Services supports optimistic concurrency control by tracking changes to each item using the `__version` system property column that is defined for each table created by Mobile Services. Each time a record is updated, Mobile Services sets the `__version` property for that record to a new value. During each update request, the `__version` property of the record included with the request is compared to the same property for the record on the server. If the version passed with the request does not match the server, then the Mobile Services .NET client library throws a `MobileServicePreconditionFailedException<T>`. The type included with the exception is the record from the server containing the server's version of the record. The application can then use this information to decide whether to execute the update request again with the correct `__version` value from the server to commit changes.\n\nTo enable optimistic concurrency the application defines a column on the table class for the `__version` system property. The following definition provides an example.\n\n    public class TodoItem\n    {\n        public string Id { get; set; }\n\n        [JsonProperty(PropertyName = \"text\")]\n        public string Text { get; set; }\n\n        [JsonProperty(PropertyName = \"complete\")]\n        public bool Complete { get; set; }\n\n\t\t// *** Enable Optimistic Concurrency *** //\n        [JsonProperty(PropertyName = \"__version\")]\n        public byte[] Version { set; get; }\n    }\n\n\nApplications using untyped tables enable optimistic concurrency by setting the `Version` flag on the `SystemProperties` of the table as follows.\n\n\t//Enable optimistic concurrency by retrieving __version\n\ttodoTable.SystemProperties |= MobileServiceSystemProperties.Version;\n\n\nThe following code shows how to resolve a write conflict once detected. The correct `__version` value must be included in the `UpdateAsync()` call to commit a resolution.\n\n\tprivate async void UpdateToDoItem(TodoItem item)\n\t{\n    \tMobileServicePreconditionFailedException<TodoItem> exception = null;\n\n\t    try\n    \t{\n\t        //update at the remote table\n    \t    await todoTable.UpdateAsync(item);\n    \t}\n    \tcatch (MobileServicePreconditionFailedException<TodoItem> writeException)\n\t    {\n        \texception = writeException;\n\t    }\n\n    \tif (exception != null)\n    \t{\n\t\t\t// Conflict detected, the item has changed since the last query\n        \t// Resolve the conflict between the local and server item\n\t        await ResolveConflict(item, exception.Item);\n    \t}\n\t}\n\n\n\tprivate async Task ResolveConflict(TodoItem localItem, TodoItem serverItem)\n\t{\n    \t//Ask user to choose the resoltion between versions\n\t    MessageDialog msgDialog = new MessageDialog(String.Format(\"Server Text: \\\"{0}\\\" \\nLocal Text: \\\"{1}\\\"\\n\",\n        \t                                        serverItem.Text, localItem.Text),\n                                                \t\"CONFLICT DETECTED - Select a resolution:\");\n\n\t    UICommand localBtn = new UICommand(\"Commit Local Text\");\n    \tUICommand ServerBtn = new UICommand(\"Leave Server Text\");\n    \tmsgDialog.Commands.Add(localBtn);\n\t    msgDialog.Commands.Add(ServerBtn);\n\n    \tlocalBtn.Invoked = async (IUICommand command) =>\n\t    {\n        \t// To resolve the conflict, update the version of the\n\t        // item being committed. Otherwise, you will keep\n        \t// catching a MobileServicePreConditionFailedException.\n\t        localItem.Version = serverItem.Version;\n\n    \t    // Updating recursively here just in case another\n        \t// change happened while the user was making a decision\n\t        UpdateToDoItem(localItem);\n    \t};\n\n\t    ServerBtn.Invoked = async (IUICommand command) =>\n    \t{\n\t        RefreshTodoItems();\n    \t};\n\n\t    await msgDialog.ShowAsync();\n\t}\n\n\nFor a more complete example of using optimistic concurrency for Mobile Services, see the [Optimistic Concurrency Tutorial].\n\n\n## <a name=\"binding\"></a>How to: Bind mobile service data to a Windows user interface\n\nThis section shows how to display returned data objects using UI elements in a Windows app. To query incomplete items in `todoTable` and display it in a very simple list, you can run the following example code to bind the source of the list with a query. Using `MobileServiceCollection` creates a mobile services-aware binding collection.\n\n\t// This query filters out completed TodoItems.\n\tMobileServiceCollection<TodoItem, TodoItem> items = await todoTable\n\t\t.Where(todoItem => todoItem.Complete == false)\n\t\t.ToCollectionAsync();\n\n\t// itemsControl is an IEnumerable that could be bound to a UI list control\n\tIEnumerable itemsControl  = items;\n\n\t// Bind this to a ListBox\n\tListBox lb = new ListBox();\n\tlb.ItemsSource = items;\n\nSome controls in the managed runtime support an interface called [ISupportIncrementalLoading](http://msdn.microsoft.com/library/windows/apps/Hh701916). This interface allows controls to request extra data when the user scrolls. There is built-in support for this interface for universal Windows 8.1 apps via `MobileServiceIncrementalLoadingCollection`, which automatically handles the calls from the controls. To use `MobileServiceIncrementalLoadingCollection` in Windows apps, do the following:\n\n\t\t\tMobileServiceIncrementalLoadingCollection<TodoItem,TodoItem> items;\n\t\titems =  todoTable.Where(todoItem => todoItem.Complete == false)\n\t\t\t\t\t.ToIncrementalLoadingCollection();\n\n\t\tListBox lb = new ListBox();\n\t\tlb.ItemsSource = items;\n\n\nTo use the new collection on Windows Phone 8 and \"Silverlight\" apps, use the `ToCollection` extension methods on `IMobileServiceTableQuery<T>` and `IMobileServiceTable<T>`. To actually load data, call `LoadMoreItemsAsync()`.\n\n\tMobileServiceCollection<TodoItem, TodoItem> items = todoTable.Where(todoItem => todoItem.Complete==false).ToCollection();\n\tawait items.LoadMoreItemsAsync();\n\nWhen you use the collection created by calling `ToCollectionAsync` or `ToCollection`, you get a collection which can be bound to UI controls. This collection is paging-aware, i.e., a control can ask the collection to \"load more items\", and the collection will do it for the control. At that point there is no user code involved, the control will start the flow. However, since the collection is loading data from the network, it's expected that some times this loading will fail. To handle such failures, you may override the `OnException` method on `MobileServiceIncrementalLoadingCollection` to handle exceptions resulting from calls to `LoadMoreItemsAsync` performed by controls.\n\nFinally, imagine that your table has many fields, but you only want to display some of them in your control. You may use the guidance in the section \"[Select specific columns](#selecting)\" above to select specific columns to display in the UI.\n\n## <a name=\"authentication\"></a>How to: Authenticate users\n\nMobile Services supports authenticating and authorizing app users using a variety of external identity providers: Facebook, Google, Microsoft Account, Twitter, and Azure Active Directory. You can set permissions on tables to restrict access for specific operations to only authenticated users. You can also use the identity of authenticated users to implement authorization rules in server scripts. For more information, see the tutorial [Add authentication to your app].\n\nTwo authentication flows are supported: a _server flow_ and a _client flow_. The server flow provides the simplest authentication experience, as it relies on the provider's web authentication interface. The client flow allows for deeper integration with device-specific capabilities as it relies on provider-specific device-specific SDKs.\n\n### Server flow\nTo have Mobile Services manage the authentication process in your Windows apps,\nyou must register your app with your identity provider. Then in your mobile service, you need to configure the application ID and secret provided by your provider. For more information, see the tutorial [Add authentication to your app].\n\nOnce you have registered your identity provider, simply call the [LoginAsync method] with the [MobileServiceAuthenticationProvider] value of your provider. For example, the following code initiates a server flow sign-in by using Facebook.\n\n\tprivate MobileServiceUser user;\n\tprivate async System.Threading.Tasks.Task Authenticate()\n\t{\n\t\twhile (user == null)\n\t\t{\n\t\t\tstring message;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tuser = await client\n\t\t\t\t\t.LoginAsync(MobileServiceAuthenticationProvider.Facebook);\n\t\t\t\tmessage =\n\t\t\t\t\tstring.Format(\"You are now logged in - {0}\", user.UserId);\n\t\t\t}\n\t\t\tcatch (InvalidOperationException)\n\t\t\t{\n\t\t\t\tmessage = \"You must log in. Login Required\";\n\t\t\t}\n\n\t\t\tvar dialog = new MessageDialog(message);\n\t\t\tdialog.Commands.Add(new UICommand(\"OK\"));\n\t\t\tawait dialog.ShowAsync();\n\t\t}\n\t}\n\nIf you are using an identity provider other than Facebook, change the value of [MobileServiceAuthenticationProvider] above to the value for your provider.\n\nIn this case, Mobile Services manages the OAuth 2.0 authentication flow by displaying the sign-in page of the selected provider and generating a Mobile Services authentication token after successful sign-on with the identity provider. The [LoginAsync method] returns a [MobileServiceUser], which provides both the [userId] of the authenticated user and the [MobileServiceAuthenticationToken], as a JSON web token (JWT). This token can be cached and re-used until it expires. For more information, see [Caching the authentication token].\n\n### Client flow\n\nYour app can also independently contact the identity provider and then provide the returned token to Mobile Services for authentication. This client flow enables you to provide a single sign-in experience for users or to retrieve additional user data from the identity provider.\n\n#### Single sign-in using a token from Facebook or Google\n\nIn the most simplified form, you can use the client flow as shown in this snippet for Facebook or Google.\n\n\tvar token = new JObject();\n\t// Replace access_token_value with actual value of your access token obtained\n\t// using the Facebook or Google SDK.\n\ttoken.Add(\"access_token\", \"access_token_value\");\n\n\tprivate MobileServiceUser user;\n\tprivate async System.Threading.Tasks.Task Authenticate()\n\t{\n\t\twhile (user == null)\n\t\t{\n\t\t\tstring message;\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// Change MobileServiceAuthenticationProvider.Facebook\n\t\t\t\t// to MobileServiceAuthenticationProvider.Google if using Google auth.\n\t\t\t\tuser = await client\n\t\t\t\t\t.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token);\n\t\t\t\tmessage =\n\t\t\t\t\tstring.Format(\"You are now logged in - {0}\", user.UserId);\n\t\t\t}\n\t\t\tcatch (InvalidOperationException)\n\t\t\t{\n\t\t\t\tmessage = \"You must log in. Login Required\";\n\t\t\t}\n\n\t\t\tvar dialog = new MessageDialog(message);\n\t\t\tdialog.Commands.Add(new UICommand(\"OK\"));\n\t\t\tawait dialog.ShowAsync();\n\t\t}\n\t}\n\n\n#### Single sign-in using Microsoft Account with the Live SDK\n\nTo be able to authenticate users, you must register your app at the Microsoft account Developer Center. You must then connect this registration with your mobile service. Complete the steps in [Register your app to use a Microsoft account login](mobile-services-how-to-register-microsoft-authentication.md) to create a Microsoft account registration and connect it to your mobile service. If you have both Windows Store and Windows Phone 8/Silverlight versions of your app, register the Windows Store version first.\n\nThe following code authenticates using Live SDK and uses the returned token to sign-in to your mobile service.\n\n\tprivate LiveConnectSession session;\n \t//private static string clientId = \"<microsoft-account-client-id>\";\n    private async System.Threading.Tasks.Task AuthenticateAsync()\n    {\n\n        // Get the URL the mobile service.\n        var serviceUrl = App.MobileService.ApplicationUri.AbsoluteUri;\n\n        // Create the authentication client for Windows Store using the mobile service URL.\n        LiveAuthClient liveIdClient = new LiveAuthClient(serviceUrl);\n        //// Create the authentication client for Windows Phone using the client ID of the registration.\n        //LiveAuthClient liveIdClient = new LiveAuthClient(clientId);\n\n        while (session == null)\n        {\n            // Request the authentication token from the Live authentication service.\n\t\t\t// The wl.basic scope is requested.\n            LiveLoginResult result = await liveIdClient.LoginAsync(new string[] { \"wl.basic\" });\n            if (result.Status == LiveConnectSessionStatus.Connected)\n            {\n                session = result.Session;\n\n                // Get information about the logged-in user.\n                LiveConnectClient client = new LiveConnectClient(session);\n                LiveOperationResult meResult = await client.GetAsync(\"me\");\n\n                // Use the Microsoft account auth token to sign in to Mobile Services.\n                MobileServiceUser loginResult = await App.MobileService\n                    .LoginWithMicrosoftAccountAsync(result.Session.AuthenticationToken);\n\n                // Display a personalized sign-in greeting.\n                string title = string.Format(\"Welcome {0}!\", meResult.Result[\"first_name\"]);\n                var message = string.Format(\"You are now logged in - {0}\", loginResult.UserId);\n                var dialog = new MessageDialog(message, title);\n                dialog.Commands.Add(new UICommand(\"OK\"));\n                await dialog.ShowAsync();\n            }\n            else\n            {\n                session = null;\n                var dialog = new MessageDialog(\"You must log in.\", \"Login Required\");\n                dialog.Commands.Add(new UICommand(\"OK\"));\n                await dialog.ShowAsync();\n            }\n        }\n    }\n\n\n### <a name=\"caching\"></a>Caching the authentication token\nIn some cases, the call to the login method can be avoided after the first time the user authenticates. You can use [PasswordVault] for Windows Store apps to cache the current user identity the first time they log in and every subsequent time you check whether you already have the user identity in our cache. When the cache is empty, you still need to send the user through the login process.\n\n\t// After logging in\n\tPasswordVault vault = new PasswordVault();\n\tvault.Add(new PasswordCredential(\"Facebook\", user.UserId, user.MobileServiceAuthenticationToken));\n\n\t// Log in\n\tvar creds = vault.FindAllByResource(\"Facebook\").FirstOrDefault();\n\tif (creds != null)\n\t{\n\t\tuser = new MobileServiceUser(creds.UserName);\n\t\tuser.MobileServiceAuthenticationToken = vault.Retrieve(\"Facebook\", creds.UserName).Password;\n\t}\n\telse\n\t{\n\t\t// Regular login flow\n\t\tuser = new MobileServiceuser( await client\n\t\t\t.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token);\n\t\tvar token = new JObject();\n\t\t// Replace access_token_value with actual value of your access token\n\t\ttoken.Add(\"access_token\", \"access_token_value\");\n\t}\n\n\t // Log out\n\tclient.Logout();\n\tvault.Remove(vault.Retrieve(\"Facebook\", user.UserId));\n\n\nFor Windows Phone apps, you may encrypt and cache data using the [ProtectedData] class and store sensitive information in isolated storage.\n\n## <a name=\"errors\"></a>How to: Handle errors\n\nThere are several ways to encounter, validate, and work around errors in Mobile Services.\n\nAs an example, server scripts are registered in a mobile service and can be used to perform a wide range of operations on data being inserted and updated, including validation and data modification. Imagine defining and registering a server script that validate and modify data, like so:\n\n\tfunction insert(item, user, request)\n\t{\n\t   if (item.text.length > 10) {\n\t\t  request.respond(statusCodes.BAD_REQUEST, { error: \"Text cannot exceed 10 characters\" });\n\t   } else {\n\t\t  request.execute();\n\t   }\n\t}\n\nThis server-side script validates the length of string data sent to the mobile service and rejects strings that are too long, in this case longer than 10 characters.\n\nNow that the mobile service is validating data and sending error responses on the server-side, you can update your .NET app to be able to handle error responses from validation.\n\n\tprivate async void InsertTodoItem(TodoItem todoItem)\n\t{\n\t\t// This code inserts a new TodoItem into the database. When the operation completes\n\t\t// and Mobile Services has assigned an Id, the item is added to the CollectionView\n\t\ttry\n\t\t{\n\t\t\tawait todoTable.InsertAsync(todoItem);\n\t\t\titems.Add(todoItem);\n\t\t}\n\t\tcatch (MobileServiceInvalidOperationException e)\n\t\t{\n\t\t\t// Handle error\n\t\t}\n\t}\n\n## <a name=\"untyped\"></a>How to: Work with untyped data\n\nThe .NET client is designed for strongly typed scenarios. However, sometimes, a more loosely typed experience is convenient; for example, this could be when dealing with objects with open schema. That scenario is enabled as follows. In queries, you forego LINQ and use the wire format.\n\n\t// Get an untyped table reference\n\tIMobileServiceTable untypedTodoTable = client.GetTable(\"TodoItem\");\n\n\t// Lookup untyped data using OData\n\tJToken untypedItems = await untypedTodoTable.ReadAsync(\"$filter=complete eq 0&$orderby=text\");\n\nYou get back JSON values that you can use like a property bag. For more information on JToken and Json.NET, see [Json.NET](http://json.codeplex.com/)\n\n## <a name=\"unit-testing\"></a>How to: Design unit tests\n\nThe value returned by `MobileServiceClient.GetTable` and the queries are interfaces. That makes them easily \"mockable\" for testing purposes, so you could create a `MyMockTable : IMobileServiceTable<TodoItem>` that implements your testing logic.\n\n## <a name=\"customizing\"></a>How to: Customize the client\n\nThis section shows ways in which you can customize the request headers and customize the serialization of JSON objects in the response.\n\n### <a name=\"headers\"></a>How to: Customize request headers\n\nTo support your specific app scenario, you might need to customize communication with the mobile service. For example, you may want to add a custom header to every outgoing request or even change responses status codes. You can do this by providing a custom DelegatingHandler, as in the following example:\n\n\tpublic async Task CallClientWithHandler()\n\t{\n\t\tMobileServiceClient client = new MobileServiceClient(\n\t\t\t\"AppUrl\",\n\t\t\t\"AppKey\" ,\n\t\t\tnew MyHandler()\n\t\t\t);\n\t\tIMobileServiceTable<TodoItem> todoTable = client.GetTable<TodoItem>();\n\t\tvar newItem = new TodoItem { Text = \"Hello world\", Complete = false };\n\t\tawait table.InsertAsync(newItem);\n\t}\n\n    public class MyHandler : DelegatingHandler\n    {\n        protected override async Task<HttpResponseMessage>\n            SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n        {\n            // Add a custom header to the request.\n            request.Headers.Add(\"x-my-header\", \"my value\");\n            var response = await base.SendAsync(request, cancellationToken);\n            // Set a differnt response status code.\n            response.StatusCode = HttpStatusCode.ServiceUnavailable;\n            return response;\n        }\n    }\n\nThis code adds a new **x-my-header** header in the request and arbitrarily sets the response code to unavailable. In a real-world scenario, you would set the response status code based on some custom logic required by your app.\n\n### <a name=\"serialization\"></a>How to: Customize serialization\n\nThe Mobile Services client library uses Json.NET to convert a JSON response into .NET objects on the client. You can configure the behavior of this serialization between .NET types and JSON in the messages. The [MobileServiceClient](http://msdn.microsoft.com/library/microsoft.windowsazure.mobileservices.mobileserviceclient.aspx) class exposes a `SerializerSettings` property of type [JsonSerializerSettings](http://james.newtonking.com/projects/json/help/?topic=html/T_Newtonsoft_Json_JsonSerializerSettings.htm)\n\nUsing this property, you may set one of the many Json.NET properties, such as the following:\n\n\tvar settings = new JsonSerializerSettings();\n\tsettings.ContractResolver = new CamelCasePropertyNamesContractResolver();\n\tclient.SerializerSettings = settings;\n\nThis property converts all properties to lower case during serialization.\n\n<!-- Anchors. -->\n[What is Mobile Services]: #what-is\n[Concepts]: #concepts\n[How to: Create the Mobile Services client]: #create-client\n[How to: Create a table reference]: #instantiating\n[How to: Query data from a mobile service]: #querying\n[Filter returned data]: #filtering\n[Sort returned data]: #sorting\n[Return data in pages]: #paging\n[Select specific columns]: #selecting\n[Look up data by ID]: #lookingup\n[How to: Bind data to user interface in a mobile service]: #binding\n[How to: Insert data into a mobile service]: #inserting\n[How to: Modify data in a mobile service]: #modifying\n[How to: Delete data in a mobile service]: #deleting\n[How to: Use Optimistic Concurrency]: #optimisticconcurrency\n[How to: Authenticate users]: #authentication\n[How to: Handle errors]: #errors\n[How to: Design unit tests]: #unit-testing\n[How to: Query data from a mobile service]: #querying\n[How to: Customize the client]: #customizing\n[How to: Work with untyped data]: #untyped\n[Customize request headers]: #headers\n[Customize serialization]: #serialization\n[Next steps]: #nextsteps\n[Caching the authentication token]: #caching\n[How to: Call a custom API]: #custom-api\n\n<!-- Images. -->\n\n\n\n<!-- URLs. -->\n[Add authentication to your app]: mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md\n[PasswordVault]: http://msdn.microsoft.com/library/windows/apps/windows.security.credentials.passwordvault.aspx\n[ProtectedData]: http://msdn.microsoft.com/library/system.security.cryptography.protecteddata%28VS.95%29.aspx\n[LoginAsync method]: http://msdn.microsoft.com/library/windowsazure/microsoft.windowsazure.mobileservices.mobileserviceclientextensions.loginasync.aspx\n[MobileServiceAuthenticationProvider]: http://msdn.microsoft.com/library/windowsazure/microsoft.windowsazure.mobileservices.mobileserviceauthenticationprovider.aspx\n[MobileServiceUser]: http://msdn.microsoft.com/library/windowsazure/microsoft.windowsazure.mobileservices.mobileserviceuser.aspx\n[UserID]: http://msdn.microsoft.com/library/windowsazure/microsoft.windowsazure.mobileservices.mobileserviceuser.userid.aspx\n[MobileServiceAuthenticationToken]: http://msdn.microsoft.com/library/windowsazure/microsoft.windowsazure.mobileservices.mobileserviceuser.mobileserviceauthenticationtoken.aspx\n[ASCII control codes C0 and C1]: http://en.wikipedia.org/wiki/Data_link_escape_character#C1_set\n[CLI to manage Mobile Services tables]: https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-command-line-tools/#Commands_to_manage_mobile_services\n[Optimistic Concurrency Tutorial]: mobile-services-windows-store-dotnet-handle-database-conflicts.md\n[MobileServiceClient]: https://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobileservices.mobileserviceclient.aspx\n\n[IncludeTotalCount]: http://msdn.microsoft.com/library/windowsazure/dn250560.aspx\n[Skip]: http://msdn.microsoft.com/library/windowsazure/dn250573.aspx\n[Take]: http://msdn.microsoft.com/library/windowsazure/dn250574.aspx\n[Fiddler]: http://www.telerik.com/fiddler\n[Custom API in Azure Mobile Services Client SDKs]: http://blogs.msdn.com/b/carlosfigueira/archive/2013/06/19/custom-api-in-azure-mobile-services-client-sdks.aspx\n[InvokeApiAsync]: http://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobileservices.mobileserviceclient.invokeapiasync.aspx\n"
  },
  {
    "path": "docs/mobile-services-how-to-register-active-directory-authentication.md",
    "content": "<properties\n\tpageTitle=\"Register for Azure Active Directory authentication | Microsoft Azure\"\n\tdescription=\"Learn how to register for Azure Active Directory authentication in your Mobile Services application.\"\n\tauthors=\"wesmc7777\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"multiple\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ricksal\"/>\n\n# Register your apps to use an Azure Active Directory Account login\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR]\n- [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md)\n- [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n- [Google](./\nmobile-services-how-to-register-google-authentication.md)\n- [Microsoft account](./\nmobile-services-how-to-register-microsoft-authentication.md)\n- [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n\n## Overview\n\nThis topic shows you how to register your apps to be able to use Azure Active Directory as an authentication provider for your mobile service.\n\n## Registering your app\n\n>[AZURE.NOTE] The steps outlined in this topic are intended to be used with [Add Authentication to your Mobile Services app](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md) tutorial when you want to use [Service-directed login operations](http://msdn.microsoft.com/library/azure/dn283952.aspx) with your app. Alternatively, if your app has a requirement for [client-directed login operations](http://msdn.microsoft.com/library/azure/jj710106.aspx) for Azure Active Directory and a .NET backend mobile service you should start with the [Authenticate your app with Active Directory Authentication Library Single Sign-On](mobile-services-windows-store-dotnet-adal-sso-authentication.md) tutorial.\n\n1. Log on to the [Azure classic portal], navigate to your mobile service, click the **Identity** tab, then scroll down to the **Azure active directory** identity provider section and copy the **App URL** shown there.\n\n    ![Mobile service app URL for AAD](./media/mobile-services-how-to-register-active-directory-authentication/mobile-services-copy-app-url-waad-auth.png)\n\n2. Navigate to **Active Directory** in the [classic portal], click your directory then **Domains** and make a note of your directory's default domain.\n\n3. Click **Applications** > **Add** > **Add an application my organization is developing**.\n\n4. In the Add Application Wizard, enter a **Name** for your application and click the  **Web application and/or Web API** type.\n\n    ![Name your AAD app](./media/mobile-services-how-to-register-active-directory-authentication/mobile-services-add-app-wizard-1-waad-auth.png)\n\n5. In the **Sign-on URL** box, paste the app URL value you copied from your mobile service. Enter the same unique value in the **App ID URI** box, then click to continue.\n\n    ![Set the AAD app properties](./media/mobile-services-how-to-register-active-directory-authentication/mobile-services-add-app-wizard-2-waad-auth.png)\n\n6. After the application has been added, click the **Configure** tab and copy the **Client ID** for the app.\n\n    >[AZURE.NOTE]For a .NET backend mobile service, you must also edit the **Reply URL** value under **Single Sign-on** to be the URL of your mobile service appended with the path, _signin-aad_. For example,  `https://todolist.azure-mobile.net/signin-aad`\n\n7. Return to your mobile service's **Identity** tab and paste the copied **Client ID** value for the azure active directory identity provider.\n\n    ![](./media/mobile-services-how-to-register-active-directory-authentication/mobile-services-clientid-pasted-waad-auth.png)\n\n8.  In the **Allowed Tenants** list, type the domain of the directory in which you registered the application (such as `contoso.onmicrosoft.com`), then click **Save**.\n\nYou are now ready to use an Azure Active Directory for authentication in your app.\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n\n<!-- URLs. -->\n[Azure classic portal]: https://manage.windowsazure.com/\n[classic portal]: https://manage.windowsazure.com/\n\n\n"
  },
  {
    "path": "docs/mobile-services-how-to-register-facebook-authentication.md",
    "content": "<properties\n\tpageTitle=\"Register for Facebook authentication | Azure Mobile Services\"\n\tdescription=\"Learn how to use Facebook authentication in your Azure Mobile Services app.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Register your apps for Facebook authentication with Mobile Services\n\n> [AZURE.SELECTOR]\n- [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md)\n- [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n- [Google](./\nmobile-services-how-to-register-google-authentication.md)\n- [Microsoft account](./\nmobile-services-how-to-register-microsoft-authentication.md)\n- [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n&nbsp;\n\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows you how to register your apps to be able to use Facebook to authenticate with Azure Mobile Services. This page supports the [Get Started with Authentication](mobile-services-ios-get-started-users.md) tutorial which shows how to log users into your app. If this is your first experience with Mobile Services, please complete the tutorial [Get Started with Mobile Services](mobile-services-ios-get-started.md).\n\nTo complete the procedure in this topic, you must have a Facebook account that has a verified email address and a mobile phone number. To create a new Facebook account, go to [facebook.com](http://go.microsoft.com/fwlink/p/?LinkId=268285).\n\n1. Navigate to the [Facebook Developers](http://go.microsoft.com/fwlink/p/?LinkId=268285) website and sign-in with your Facebook account credentials.\n\n2. (Optional) If you have not already registered, click **My Apps** then click **Register as a Developer**, accept the policy and follow the registration steps.\n\n3. Click **My Apps** > **Add a New App** > **Website** > **Skip and Create App ID**. \n\n4. In **Display Name**, enter a unique name for your app, choose a **Category** for you app, then click **Create App ID** and complete the security check. This takes you to the developer dashboard for your new Facebook app.\n\n5. On the **App Secret** field, click **Show**, provide your password if requested, then make a note of the values of **App ID** and **App Secret**. You will uses these later to configure your application in Azure.\n\n\t> [AZURE.NOTE] **Security Note**\n\tThe app secret is an important security credential. Do not share this secret with anyone or distribute it within a client application.\n\n5. In the left navigation bar, click **Settings**, type the domain of your mobile service in **App Domains**, enter an optional **Contact Email**, click **Add Platform** and select **Website**.\n\n   \t![][3]\n\n6. Type the URL of your mobile service in **Site URL**, then click **Save Changes**.\n\n7. Click **Show**, provide your password if requested, then make a note of the values of **App ID** and **App Secret**.\n\n   \t![][5]\n\t&nbsp;\n\n    >[AZURE.IMPORTANT] The app secret is an important security credential. Do not share this secret with anyone or distribute it with your app.\n\t&nbsp;\n\n8. Click the **Advanced** tab, type one of the following URL formats in **Valid OAuth redirect URIs**, then click **Save Changes**:\n\n\t+ **.NET backend**: `https://<mobile_service>.azure-mobile.net/signin-facebook`\n\t+ **JavaScript backend**: `https://<mobile_service>.azure-mobile.net/login/facebook`\n\n\t >[AZURE.NOTE]Make sure that you use the correct redirect URL path format for your type of Mobile Services backend, using the *HTTPS* scheme. When this is incorrect, authentication will not succeed.\n\n\n12. The Facebook account which was used to register the application is an administrator of the app. At this point, only administrators can sign into this application. To authenticate other Facebook accounts, click **App Review** and enable **Make todolist-complete-nodejs public** to enable general public access using Facebook authentication.\n\nYou are now ready to use a Facebook login for authentication in your app by providing the App ID and App Secret values to Mobile Services.\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n[3]: ./media/mobile-services-how-to-register-facebook-authentication/mobile-services-facebook-configure-app.png\n[5]: ./media/mobile-services-how-to-register-facebook-authentication/mobile-services-facebook-completed.png\n\n<!-- URLs. -->\n[Facebook Developers]: http://go.microsoft.com/fwlink/p/?LinkId=268286\n[Get started with authentication]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-users-dotnet/\n[Azure Mobile Services]: http://azure.microsoft.com/services/mobile-services/\n"
  },
  {
    "path": "docs/mobile-services-how-to-register-google-authentication.md",
    "content": "<properties\n\tpageTitle=\"Register for Google authentication | Microsoft Azure\"\n\tdescription=\"Learn how to register your apps to use Google to authenticate with Azure Mobile Services.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"android\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n\n<tags \n\tms.service=\"mobile-services\" \n\tms.workload=\"mobile\" \n\tms.tgt_pltfrm=\"mobile-android\" \n\tms.devlang=\"multiple\" \n\tms.topic=\"article\" \n\tms.date=\"07/21/2016\" \n\tms.author=\"glenga\"/>\n\n# Register your apps for Google login with Mobile Services\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR]\n- [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md)\n- [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n- [Google](./\nmobile-services-how-to-register-google-authentication.md)\n- [Microsoft account](./\nmobile-services-how-to-register-microsoft-authentication.md)\n- [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n\nThis topic shows you how to register your apps to be able to use Google to authenticate with Azure Mobile Services.\n\n>[AZURE.NOTE] This tutorial is about [Azure Mobile Services](https://azure.microsoft.com/services/mobile-services/), a solution to help you build scalable mobile applications for any platform. Mobile Services makes it easy to sync data, authenticate users, and send push notifications. This page supports the [Get Started with Authentication](mobile-services-ios-get-started-users.md) tutorial, which shows how to sign in users to your app.\n<br/>If this is your first experience with Mobile Services, please complete the tutorial [Get Started with Mobile Services](mobile-services-ios-get-started.md).\n\nTo complete the procedure in this topic, you must have a Google account that has a verified email address. To create a new Google account, go to <a href=\"http://go.microsoft.com/fwlink/p/?LinkId=268302\" target=\"_blank\">accounts.google.com</a>.\n\n3. Navigate to the [Google apis](http://go.microsoft.com/fwlink/p/?LinkId=268303) website, sign-in with your Google account credentials, click **Create Project**, provide a **Project name**, then click **Create**.\n\n4. In the **Products & services** drop down menu, click **API Manager**, then under **Social APIs** click **Google+ API** > **Enable API**.\n\n5. Click **Credentials** > **OAuth consent screen**, then select your **Email address**,  enter a **Product Name**, and click **Save**.\n\n6. In the **Credentials** tab, click **Add credentials** > **OAuth 2.0 client ID**, then select **Web application**.\n\n\n7. Type your mobile service URL in **Authorized JavaScript Origins**, replace the generated URL in **Authorized Redirect URI** with one of the following URL formats, and then click **Create**:\n \n\n\t+ **.NET backend**: `https://<mobile_service>.azure-mobile.net/signin-google`\n\t+ **JavaScript backend**: `https://<mobile_service>.azure-mobile.net/login/google`\n\n\t >[AZURE.NOTE]Make sure that you use the correct redirect URL path format for your type of Mobile Services backend. When this is incorrect, authentication will not succeed.\n\n8. On the next screen, make a note of the values of the client ID and client secret.\n\n    > [AZURE.IMPORTANT] The client secret is an important security credential. Do not share this secret with anyone or distribute it within a client application.\n\nYou are now ready to configure your mobile service to use Google sign-in for authentication in your app.\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n<!-- URLs. -->\n\n[Google apis]: http://go.microsoft.com/fwlink/p/?LinkId=268303\n[Get started with authentication]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-users-dotnet/\n"
  },
  {
    "path": "docs/mobile-services-how-to-register-microsoft-authentication.md",
    "content": "<properties\n\tpageTitle=\"Register for Microsoft authentication | Microsoft Azure\"\n\tdescription=\"Learn how to register for Microsoft authentication in your Azure Mobile Services application.\"\n\tauthors=\"ggailey777\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"Mobile\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags \n\tms.service=\"mobile-services\" \n\tms.workload=\"mobile\" \n\tms.tgt_pltfrm=\"NA\" \n\tms.devlang=\"multiple\" \n\tms.topic=\"article\" \n\tms.date=\"07/21/2016\" \n\tms.author=\"glenga\"/>\n\n# Register your app to use Microsoft account for authentication\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR]\n- [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md)\n- [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n- [Google](./\nmobile-services-how-to-register-google-authentication.md)\n- [Microsoft account](./\nmobile-services-how-to-register-microsoft-authentication.md)\n- [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n\n## Overview\n\nThis topic shows you how to register your mobile app to be able to use Microsoft account as an identity provider with Azure Mobile Services. The same steps apply for both service-directed authentication and client-directed authentication using the Live SDK.\n\n## Register your Windows Store app at the Windows Dev Center\n\nWindows Store apps must first be registered with the Windows Dev Center. By registering, your Windows app will be able to use single sign-on behaviors.\n\n>[AZURE.NOTE]Windows Phone 8, Windows Phone 8.1 Silverlight, and non-Windows apps can skip this section.\n\n1. If you have not already registered your app, navigate to the [Windows Dev Center](https://dev.windows.com/dashboard/Application/New), log on with your Microsoft account, type a name for your app, then click **Reserve app name**.\n\n3. Open your Windows app project in Visual Studio, then in Solution Explorer right-click the Windows Store app project, click **Store** > **Associate App with the Store...**.\n\n  \t![](./media/mobile-services-how-to-register-microsoft-authentication/mobile-services-store-association.png)\n\n5. In the wizard, click **Sign in** and sign-in with your Microsoft account, select the app name you reserved, then click **Next** > **Associate**.\n\n6. (Optional) For a universal Windows 8.1 app, repeat steps 4 and 5 for the Windows Phone Store project.\n\n6. Back in the Windows Dev Center page for your new app, click **Services** > **Push notifications**.\n\n7. In the **Push notifications** page, click **Live Services site** under **Windows Push Notification Services (WNS) and Microsoft Azure Mobile Services**.\n \n\tThis displays the Microsoft account app settings page for your app. \n\n8. Make a note of the **Package SID** value. You can save this SID in the Azure portal to both enable single sign-on and push notifications for your Windows app.\n\nNext, you will configure Microsoft account authentication for your Windows app, starting with step 4 in the next section.\n\n## Configure your Microsoft account registration and connect to Mobile Services\n\nIf you have already registered your Windows app in the previous section, you can skip to step 2. \n\n1. For a non-Windows Store app, navigate to the [My Applications](http://go.microsoft.com/fwlink/p/?LinkId=262039) page in the Microsoft account Developer Center, log on with your Microsoft account (if required), click **Create application**, type an **Application name**, then click **I accept**.\n\n   \tThis reserves you app name with Microsoft account and displays the Microsoft account page for your app.\n\n2. In the Microsoft account page for your app, click **API Settings**, enable **Mobile or desktop client app**, set the mobile service URL as the **Target domain**, then supply one of the following URL formats in **Redirect URL** and click **Save**:\n\n\t+ **.NET backend**: `https://<mobile_service>.azure-mobile.net/signin-microsoft`\n\t+ **JavaScript backend**: `https://<mobile_service>.azure-mobile.net/login/microsoftaccount`\n\n\t >[AZURE.NOTE]Make sure that you use the correct redirect URL path format for your type of Mobile Services backend. When this is incorrect, authentication will not succeed. The **Root domain** should fill in automatically.\n&nbsp;\n\n    ![Microsoft account API settings](./media/mobile-services-how-to-register-microsoft-authentication/mobile-services-win8-app-push-auth-2.png)\n\n\n4. Click **App Settings** and make a note of the values of the **Client ID**, **Client secret** and **Package SID**.\n\n   \t![Microsoft account app settings](./media/mobile-services-how-to-register-microsoft-authentication/mobile-services-win8-app-push-auth.png)\n\n\n    > [AZURE.NOTE] The client secret is an important security credential. Do not share the client secret with anyone or distribute it with your app. Only Windows Store app registrations will see a Package SID field.\n\n4. In the [Azure classic portal], click the **Identity** tab for the mobile service, enter the client ID, client secret and package SID obtained from your identity provider, then click **Save**.\n\n\t>[AZURE.NOTE]You do not need to supply a Package SID value for a Windows Phone 8, Windows Phone Store 8.1 Silverlight, or a non-Windows app.\n\nBoth your mobile service and your app are now configured to work with Microsoft account.\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n<!-- URLs. -->\n\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[My Applications]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n\n[Azure classic portal]: https://manage.windowsazure.com/\n"
  },
  {
    "path": "docs/mobile-services-how-to-register-twitter-authentication.md",
    "content": "<properties\n\tpageTitle=\"Register for Twitter authentication | Microsoft Azure\"\n\tdescription=\"Learn how to use Twitter authentication with your Azure Mobile Services application.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n\n<tags \n\tms.service=\"mobile-services\" \n\tms.workload=\"mobile\" \n\tms.tgt_pltfrm=\"na\" \n\tms.devlang=\"multiple\" \n\tms.topic=\"article\" \n\tms.date=\"07/21/2016\" \n\tms.author=\"glenga\"/>\n\n# Register your apps for Twitter login with Mobile Services\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR]\n- [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md)\n- [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n- [Google](./\nmobile-services-how-to-register-google-authentication.md)\n- [Microsoft account](./\nmobile-services-how-to-register-microsoft-authentication.md)\n- [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n\nThis topic shows you how to register your apps to be able to use Twitter to authenticate with Azure Mobile Services.\n\n>[AZURE.NOTE] This tutorial is about [Azure Mobile Services](https://azure.microsoft.com/services/mobile-services/), a solution to help you build scalable mobile applications for any platform. Mobile Services makes it easy to sync data, authenticate users, and send push notifications. This page supports the [Add authentication to your app](mobile-services-ios-get-started-users.md) tutorial which shows how to sign users into your app. If this is your first experience with Mobile Services, please complete the tutorial [Get Started with Mobile Services](mobile-services-ios-get-started.md).\n\nTo complete the procedure in this topic, you must have a Twitter account that has a verified email address. To create a new Twitter account, go to <a href=\"http://go.microsoft.com/fwlink/p/?LinkID=268287\" target=\"_blank\">twitter.com</a>.\n\n1. Navigate to the [Twitter Developers](http://go.microsoft.com/fwlink/p/?LinkId=268300) website, sign-in with your Twitter account credentials, and click **Create new app**.\n\n2. Type the **Name**, **Description**, and **Website** values for your app, then type one of the following URL formats in **Callback URL**.\n\n\t+ **.NET backend**: `https://<mobile_service>.azure-mobile.net/signin-twitter`\n\t+ **JavaScript backend**: `https://<mobile_service>.azure-mobile.net/login/twitter`\n\n\t >[AZURE.NOTE]Make sure that you use the correct redirect URL path format for your type of Mobile Services backend. When this is incorrect, authentication will not succeed.\n\t&nbsp;\n\n   \t![][2]\n\n3.  At the bottom the page, read and accept the terms, and then click **Create your Twitter application**.\n\n   \tThis registers the app displays the application details.\n\n6. Click the **Keys and Access Tokens** tab in your app dashboard and make a note of the values of **Consumer key** and **Consumer secret**.\n\n    > [AZURE.NOTE] The consumer secret is an important security credential. Do not share this secret with anyone or distribute it with your app.\n\n7. Click the **Settings** tab, scroll down and make sure the **Allow this application to be used to sign in with Twitter** checkbox is checked, then click **Update Settings**.\n\nYou are now ready to use a Twitter login for authentication in your app by providing the consumer key and consumer secret values to Mobile Services.\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n[1]: ./media/mobile-services-how-to-register-twitter-authentication/mobile-services-twitter-developers.png\n[2]: ./media/mobile-services-how-to-register-twitter-authentication/mobile-services-twitter-register-app1.png\n\n<!-- URLs. -->\n\n[Twitter Developers]: http://go.microsoft.com/fwlink/p/?LinkId=268300\n[Get started with authentication]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-users-dotnet/\n"
  },
  {
    "path": "docs/mobile-services-how-to-use-multiple-clients-single-service.md",
    "content": "<properties\n\tpageTitle=\"How to use multiple clients with a single mobile service backend | Azure Mobile Services\"\n\tdescription=\"Learn how to use a single mobile service back-end from multiple client apps that target different mobile platforms.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"mollybos\"/>\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-multiple\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Supporting multiple device platforms from a single mobile service\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\nOne of the major benefits of using Azure Mobile Services in your mobile app development is the ability to use a single backend service that supports your app on multiple client platforms. Mobile Services provides native client libraries for all major device platforms, which makes it easier to develop apps using a single backend service and by using cross-platform developer tools. This topic discusses considerations for getting your app running on multiple client platforms while using a single mobile service backend.\n\n## <a id=\"push\"></a>Cross-platform push notifications\n\nMobile Services uses Azure Notification Hubs for sending push notifications to your client apps on all major device platforms. Notification Hubs provide a consistent and unified infrastructure for creating and managing device registrations and for sending cross-platform push notifications. Notification Hubs supports sending push notifications by using the following platform-specific notification services:\n\n+ Apple Push Notification Service (APNS) for iOS apps\n+ Google Cloud Messaging (GCM) service for Android apps\n+ Windows Notification Service (WNS) for Windows Store, Windows Phone 8.1 Store, and universal Windows apps\n+ Microsoft Push Notification Service (MPNS) for Windows Phone Silverlight apps\n\nFor more information, see [Azure Notification Hubs].\n\nClient registrations are created by using the register function in the platform-specific Mobile Services client library or by using the Mobile Services REST APIs. Notification Hubs supports two kinds of device registrations:\n\n+ **Native registration**<br/>Native registrations are tailored to the platform-specific push notification service. When sending notifications to devices registered using native registrations, you must call platform-specific APIs in your mobile service. To send a notification to devices on multiple platforms requires multiple platform-specific calls.\n\n+ **Template registration**<br/>Notification Hubs also supports platform-specific template registrations. By using template registrations, you can use a single API call to send a notification to your app running on any registered platform. For more information, see [Send cross-platform notifications to users].\n\nTables in the following sections link to the client-specific tutorials that show you how to implement push notifications from both .NET and JavaScript backend mobile services.\n\n### .NET backend\n\nIn a .NET backend mobile service, you send notifications by calling the [SendAsync] method on the [PushClient](http://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobile.service.notifications.pushclient.aspx) object obtained from the [ApiServices.Push](http://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobile.service.apiservices.push.aspx) property. The push notification sent (native or template) depends on the specific [IPushMessage](http://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobile.service.notifications.ipushmessage.aspx)-derived object that is passed to the [SendAsync] method, as shown in the following table:\n\n|Platform |[APNS](mobile-services-dotnet-backend-ios-get-started-push.md)|[GCM](mobile-services-dotnet-backend-android-get-started-push.md) |[WNS](mobile-services-dotnet-backend-windows-store-dotnet-get-started-push.md) | MPNS\n|-----|-----|----|----|-----|\n|Native|[ApplePushMessage](http://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobile.service.applepushmessage.aspx)   |[GooglePushMessage](http://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobile.service.googlepushmessage.aspx)     |[WindowsPushMessage](http://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobile.service.windowspushmessage.aspx) | [MpnsPushMessage](http://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobile.service.mpnspushmessage.aspx) |\n\nThe following code sends a push notification from a .NET backend service to all iOS and Windows Store device registrations:\n\n\t// Define a push notification for APNS.\n\tApplePushMessage apnsMessage = new ApplePushMessage(item.Text, TimeSpan.FromHours(1));\n\n\t// Define a push notification for WNS.\n\tWindowsPushMessage wnsMessage = new WindowsPushMessage();\n    wnsMessage.XmlPayload = @\"<?xml version=\"\"1.0\"\" encoding=\"\"utf-8\"\"?>\" +\n                         @\"<toast><visual><binding template=\"\"ToastText01\"\">\" +\n                         @\"<text id=\"\"1\"\">\" + item.Text + @\"</text>\" +\n                         @\"</binding></visual></toast>\";\n\n\t// Send push notifications to all registered iOS and Windows Store devices.\n    await Services.Push.SendAsync(apnsMessage);\n\tawait Services.Push.SendAsync(wnsMessage);\n\nFor examples of how to send push notifications to the other native client platforms, click the platform links in the header of the above table.\n\nWhen you use template client registrations rather than native client registrations, you can send the same notification with only a single call to [SendAsync], supplying a [TemplatePushMessage] object, as follows:\n\n\t// Create a new template message and add the 'message' parameter.\n\tvar templatePayload = new TemplatePushMessage();\n    templatePayload.Add(\"message\", item.Text);\n\n\t// Send a push notification to all template registrations.\n    await Services.Push.SendAsync(templatePayload);\n\n### JavaScript backend\n\nIn a JavaScript backend mobile service, you send notifications by calling the **send** method on the platform-specific object obtained from the global [push object], as shown in the following table:\n\n|Platform |[APNS](mobile-services-javascript-backend-ios-get-started-push.md)|[GCM](mobile-services-javascript-backend-android-get-started-push.md) |[WNS](mobile-services-javascript-backend-windows-store-dotnet-get-started-push.md) |[MPNS](mobile-services-javascript-backend-windows-phone-get-started-push.md)|\n|-----|-----|----|----|-----|\n|Native|[apns object](http://msdn.microsoft.com/library/azure/jj839711.aspx)   |[gcm object](http://msdn.microsoft.com/library/azure/dn126137.aspx)     |[wns object](http://msdn.microsoft.com/library/azure/jj860484.aspx) | [mpns object](http://msdn.microsoft.com/library/azure/jj871025.aspx) |\n\nThe following code sends push notification to all Android and Windows Phone registrations:\n\n\t// Define a push notification for GCM.\n\tvar gcmPayload =\n    '{\"data\":{\"message\" : item.text }}';\n\n\t// Define the payload for a Windows Phone toast notification.\n\tvar mpnsPayload = '<?xml version=\"1.0\" encoding=\"utf-8\"?>' +\n    '<wp:Notification xmlns:wp=\"WPNotification\"><wp:Toast>' +\n    '<wp:Text1>New Item</wp:Text1><wp:Text2>' + item.text +\n    '</wp:Text2></wp:Toast></wp:Notification>';\n\n\t// Send push notifications to all registered Android and Windows Phone 8.0 devices.\n\tpush.mpns.send(null, mpnsPayload, 'toast', 22, {\n            success: function(pushResponse) {\n                // Push succeeds.\n                },\n                error: function (pushResponse) {\n                    // Push fails.\n                    }\n                });\n    push.gcm.send(null, gcmPayload, {\n            success: function(pushResponse) {\n                // Push succeeds.\n                },\n                error: function (pushResponse) {\n                    // Push fails.\n                    }\n                });\n\nFor examples of how to send push notifications to the other native client platforms, click the platform links in the header of the above table.\n\nWhen you use template client registrations rather than native client registrations, you can send the same notification with only a single call the **send** function on the global [push object], supplying a template message payload, as follows:\n\n\t// Create a new template message with the 'message' parameter.\n\tvar templatePayload = { \"message\": item.text };\n\n\t// Send a push notification to all template registrations.\n    push.send(null, templatePayload, {\n            success: function(pushResponse) {\n                // Push succeeds.\n                },\n                error: function (pushResponse) {\n                    // Push fails.\n                    }\n                });\n\n## <a id=\"xplat-app-dev\"></a>Cross-platform app development\nDeveloping native mobile device apps for all of the major mobile device platforms requires you (or your organization) to have expertise in at least Objective-C, Java, and C# or JavaScript programming languages. Because of the expense of developing across these disparate platforms, some developers choose a fully web browser-based experience for their apps. However, such web-based experiences cannot access most of the native resources that provide the rich experience that users have come to expect on their mobile devices.\n\nCross-platform tools are available that provide a richer native experience on a mobile device, while still sharing a single code base, usually JavaScript. Mobile Services makes it easy to create and manage a backend service for cross-platform app development platforms by providing quickstart tutorials for the following development platforms:\n\n+ [**PhoneGap**](https://go.microsoft.com/fwLink/p/?LinkID=390707)**/**[**Cordova**](http://cordova.apache.org/)<br/>PhoneGap (a distribution of the Apache Cordova project) is a free and open source framework that lets you use standardized web APIs, HTML and JavaScript to develop a single app that runs on Android, iOS and Windows devices. PhoneGap provides a web view based UI, but with a user experience enhanced by accessing native resources on the device, such as such as push notifications, the accelerometer, camera, storage, geolocation, and the in-app browser. For more information, see the [PhoneGap quickstart tutorial][PhoneGap].\n\n\tVisual Studio now also enables you to build cross-platform Cordova apps by using the Multi-Device Hybrid Apps extension for Visual Studio, which is pre-release software. For more information, see [Getting Started with Multi-Device Hybrid Apps Using HTML and JavaScript](http://msdn.microsoft.com/library/dn771545.aspx).\n\n+ [**Sencha Touch**](http://go.microsoft.com/fwlink/p/?LinkId=509988)<br/>Sencha Touch provides a set of controls, optimized for touch screens, that provide a like-native experience on a wide variety of mobile devices from a single HTML and JavaScript code base. Sencha Touch can be used along with PhoneGap or Cordova libraries to provide users access to native device resources. For more information, see the [Sencha Touch quickstart tutorial][Sencha].\n\n+ [**Xamarin**](https://go.microsoft.com/fwLink/p/?LinkID=330242)<br/>Xamarin lets you create fully native apps for both iOS and Android devices, with fully native UI and access to all device resources. Xamarin apps are coded in C# instead of Objective-C and Java. This enables .NET developers to publish apps to iOS and Android and share code from Windows projects. Xamarin provides a fully native user experience on both iOS and Android devices from C# code. This enables you to reuse some of your Mobile Services code from Windows apps on iOS and Android devices. For more information, see [Xamarin development](#xamarin) below.\n\n\n<!-- URLs -->\n[Azure Notification Hubs]: /develop/net/how-to-guides/service-bus-notification-hubs/\n[SSO Windows Store]: https://azure.microsoft.com/develop/mobile/tutorials/single-sign-on-windows-8-dotnet/\n[SSO Windows Phone]: https://azure.microsoft.com/develop/mobile/tutorials/single-sign-on-wp8/\n[Tutorials and resources]: https://azure.microsoft.com/develop/mobile/resources/\n[Get started with Notification Hubs]: /manage/services/notification-hubs/getting-started-windows-dotnet/\n[Send cross-platform notifications to users]: /manage/services/notification-hubs/notify-users-xplat-mobile-services/\n[Get started with push Windows dotnet]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-dotnet-vs2012/\n[Get started with push Windows js]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-js-vs2012/\n[Get started with push Windows Phone]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-wp8/\n[Get started with push iOS]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-ios/\n[Get started with push Android]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-android/\n[Dynamic schema]: http://msdn.microsoft.com/library/windowsazure/jj193175.aspx\n[How to use a .NET client with Mobile Services]: documentation/articles/mobile-services-windows-dotnet-how-to-use-client-library/\n[push object]: http://msdn.microsoft.com/library/windowsazure/jj554217.aspx\n[TemplatePushMessage]:http://msdn.microsoft.com/library/azure/microsoft.windowsazure.mobile.service.templatepushmessage.aspx\n[PhoneGap]: mobile-services-javascript-backend-phonegap-get-started.md\n[Sencha]: partner-sencha-mobile-services-get-started.md\n[Appcelerator]: partner-appcelerator-mobile-services-javascript-backend-appcelerator-get-started.md\n[SendAsync]: http://msdn.microsoft.com/library/microsoft.windowsazure.mobile.service.notifications.pushclient.sendasync.aspx\n[What's next for Windows Phone 8 developers]: http://msdn.microsoft.com/library/windows/apps/dn655121(v=vs.105).aspx\n[Building universal Windows apps for all Windows devices]: http://go.microsoft.com/fwlink/p/?LinkId=509905\n[Universal Windows app project for Azure Mobile Services using MVVM]: http://code.msdn.microsoft.com/Universal-Windows-app-for-db3564de\n"
  },
  {
    "path": "docs/mobile-services-how-to-use-server-scripts.md",
    "content": "<properties\n\tpageTitle=\"Work with a JavaScript backend mobile service\"\n\tdescription=\"Provides examples on how to define, register, and use server scripts in Azure Mobile Services.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"RickSaling\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"javascript\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ricksal\"/>\n\n\n# Work with a JavaScript backend mobile service\n\nThis article provides detailed information about and examples of how to work with a JavaScript backend in Azure Mobile Services.\n\n## <a name=\"intro\"></a>Introduction\n\nIn a JavaScript backend mobile service, you can define custom business logic as JavaScript code that's stored and executed on the server. This server script code is assigned to one of the following server functions:\n\n+ [Insert, read, update, or delete operations on a given table][Table operations].\n+ [Scheduled jobs][Job Scheduler].\n+ [HTTP methods defined in a custom API][Custom API anchor].\n\nThe signature of the main function in the server script depends on the context of where the script is used. You can also define common script code as nodes.js modules that are shared across scripts. For more information, see [Source control and shared code][Source control, shared code, and helper functions].\n\nFor descriptions of individual server script objects and functions, see [Mobile Services server script reference].\n\n\n## <a name=\"table-scripts\"></a>Table operations\n\nA table operation script is a server script that is registered to an operation on a table&mdash;insert, read, update, or delete (*del*). This section describes how to work with table operations in a JavaScript backend, which includes the following sections:\n\n+ [Overview of table operations][Basic table operations]\n+ [How to: Register for table operations]\n+ [How to: Override the default response]\n+ [How to: Override execute success]\n+ [How to: Override default error handling]\n+ [How to: Generate unique ID values](#generate-guids)\n+ [How to: Add custom parameters]\n+ [How to: Work with table users][How to: Work with users]\n\n### <a name=\"basic-table-ops\"></a>Overview of table operations\n\nThe name of the script must match the kind of operation for which it is registered. Only one script can be registered for a given table operation. The script is executed every time that the given operation is invoked by a REST request&mdash;for example, when a POST request is received to insert an item into the table. Mobile Services does not preserve state between script executions. Because a new global context is created every time a script is run, any state variables that are defined in the script are reinitialized. If you want to store state from one request to another, create a table in your mobile service, and then read and write the state to the table. For more information, see [How to: Access tables from scripts].\n\nYou write table operation scripts if you need to enforce customized business logic when the operation is executed. For example, the following script rejects insert operations where the string length of the `text` field is greater than ten characters:\n\n\tfunction insert(item, user, request) {\n\t    if (item.text.length > 10) {\n\t        request.respond(statusCodes.BAD_REQUEST,\n\t\t\t\t'Text length must be less than 10 characters');\n\t    } else {\n\t        request.execute();\n\t    }\n\t}\n\nA table script function always takes three arguments.\n\n- The first argument varies depending on the table operation.\n\n\t- For inserts and updates, it is an **item** object, which is a JSON representation of the row being affected by the operation. This allows you to access column values by name, for example, *item.Owner*, where *Owner* is one of the names in the JSON representation.\n\t- For a delete, it is the ID of the record to delete.\n\t- And for a read, it is a [query object] that specifies the rowset to return.\n\n- The second argument is always a [user object][User object] that represents the user that submitted the request.\n\n- The third argument is always a [request object][request object], by which you can control execution of the requested operation and the response that's sent to the client.\n\nHere are the canonical main-function signatures for the table operations:\n\n+ [Insert][insert function]: `function insert (item, user, request) { ... }`\n+ [Update][update function]: `function update (item, user, request) { ... }`\n+ [Delete][delete function]: `function del (id, user, request) { ... }`\n+ [Read][read function]: `function read (query, user, request) { ... }`\n\n>[AZURE.NOTE]A function that's registered to the delete operation must be named _del_ because delete is a reserved keyword in JavaScript.\n\nEvery server script has a main function, and may have optional helper functions. Even though a server script may have been created for a specific table, it can also reference other tables in the same database. You can also define common functions as modules that can be shared across scripts. For more information, see [Source control and shared code][Source control, shared code, and helper functions].\n\n### <a name=\"register-table-scripts\"></a>How to: Register table scripts\n\nYou can define server scripts that are registered to a table operation in one of the following ways:\n\n+ In the [Azure classic portal]. Scripts for table operations are accessed in the **Scripts** tab for a given table. The following shows the default code registered to the insert script for the `TodoItem` table. You can override this code with your own custom business logic.\n\n\t![1][1]\n\n\tTo learn how to do this, see [Validate and modify data in Mobile Services by using server scripts].  \n\n+ By using source control. When you have source control enabled, simply create a file named <em>`<table>`</em>.<em>`<operation>`</em>.js in the .\\service\\table subfolder in your git repository, where <em>`<table>`</em> is the name of the table and <em>`<operation>`</em> is the table operation being registered. For more information, see [Source control and shared code][Source control, shared code, and helper functions].\n\n+ From the command prompt by using the Azure command line tool. For more information, see [Using the command line tool].\n\n\nA table operation script must call at least one of the following functions of the [request object] to make sure that the client receives a response.\n\n+ **execute function**: The operation is completed as requested and the standard response is returned.\n\n+ **respond function**: A custom response is returned.\n\n> [AZURE.IMPORTANT] When a script has a code path in which neither **execute** nor **respond** is invoked, the operation may become unresponsive.\n\nThe following script calls the **execute** function to complete the data operation requested by the client:\n\n\tfunction insert(item, user, request) {\n\t    request.execute();\n\t}\n\nIn this example, the item is inserted into the database and the appropriate status code is returned to the user.\n\nWhen the **execute** function is called, the `item`, [query][query object], or `id` value that was passed as the first argument into the script function is used to perform the operation. For an insert, update or query operation, you can modify the item or query before you call **execute**:\n\n\tfunction insert(item, user, request) {\n\t    item.scriptComment =\n\t\t\t'this was added by a script and will be saved to the database';\n\t    request.execute();\n\t}\n\n\tfunction update(item, user, request) {\n\t    item.scriptComment =\n\t\t\t'this was added by a script and will be saved to the database';\n\t    request.execute();\n\t}\n\n\tfunction read(query, user, request) {\n\t\t// Only return records for the current user \t    \n\t\tquery.where({ userid: user.userId});\n\t    request.execute();\n\t}\n\n>[AZURE.NOTE]In a delete script, changing the value of the supplied userId variable does not affect which record gets deleted.\n\nFor more examples, see [Read and write data], [Modify the request] and [Validate data].\n\n\n### <a name=\"override-response\"></a>How to: Override the default response\n\nYou can also use a script to implement validation logic that can override the default response behavior. If validation fails, just call the **respond** function instead of the **execute** function and write the response to the client:\n\n\tfunction insert(item, user, request) {\n\t    if (item.userId !== user.userId) {\n\t        request.respond(statusCodes.FORBIDDEN,\n\t        'You may only insert records with your userId.');\n\t    } else {\n\t        request.execute();\n\t    }\n\t}\n\nIn this example, the request is rejected when the inserted item does not have a `userId` property that matches the `userId` of the [user object] that's supplied for the authenticated client. In this case, a database operation (*insert*) does not occur, and a response that has a 403 HTTP status code and a custom error message is returned to the client. For more examples, see [Modify the response].\n\n### <a name=\"override-success\"></a>How to: Override execute success\n\nBy default in a table operation, the **execute** function writes responses automatically. However, you can pass two optional parameters to the execute function that override its behavior on success and/or on error.\n\nBy passing in a **success** handler when you call execute, you can modify the results of a query before you write them to the response. The following example calls `execute({ success: function(results) { ... })` to perform additional work after data is read from the database but before the response is written:\n\n\tfunction read(query, user, request) {\n\t    request.execute({\n\t        success: function(results) {\n\t            results.forEach(function(r) {\n\t                r.scriptComment =\n\t                'this was added by a script after querying the database';\n\t            });\n\t            request.respond();\n\t        }\n\t    });\n\t}\n\nWhen you provide a **success** handler to the **execute** function, you must also call the **respond** function as part of the **success** handler so that the runtime knows that the script has completed and that a response can be written. When you call **respond** without passing any arguments, Mobile Services generates the default response.\n\n>[AZURE.NOTE]You can call **respond** without arguments to invoke the default response only after you first call the **execute** function.\n\n### <a name=\"override-error\"></a>How to: Override default error handling\n\nThe **execute** function can fail if there is a loss of connectivity to the database, an invalid object, or an incorrect query. By default when an error occurs, server scripts log the error and write an error result to the response. Because Mobile Services provides default error handling, you don't have to handle errors that may occur in the service.\n\nYou can override the default error handling by implementing explicit error handling if you want a particular compensating action or when you want to use the global console object to write more detailed information to the log. Do this by supplying an **error** handler to the **execute** function:\n\n\tfunction update(item, user, request) {\n\t  request.execute({\n\t    error: function(err) {\n\t      // Do some custom logging, then call respond.\n\t      request.respond();\n\t    }\n\t  });\n\t}\n\n\nWhen you provide an error handler, Mobile Services returns an error result to the client when **respond** is called.\n\nYou can also provide both a **success** and an **error** handler if you wish.\n\n### <a name=\"generate-guids\"></a>How to: Generate unique ID values\n\nMobile Services supports unique custom string values for the table's **id** column. This allows applications to use custom values such as email addresses or user names for the ID.\n\nString IDs provide you with the following benefits:\n\n+ IDs are generated without making a round-trip to the database.\n+ Records are easier to merge from different tables or databases.\n+ IDs values can integrate better with an application's logic.\n\nWhen a string ID value is not set on an inserted records, Mobile Services generates a unique value for the ID. You can generate your own unique ID values in server scripts. The script example below generates a custom GUID and assigns it to a new record's ID. This is similar to the id value that Mobile Services would generate if you didn't pass in a value for a record's ID.\n\n\t// Example of generating an id. This is not required since Mobile Services\n\t// will generate an id if one is not passed in.\n\titem.id = item.id || newGuid();\n\trequest.execute();\n\n\tfunction newGuid() {\n\t\tvar pad4 = function(str) { return \"0000\".substring(str.length) + str; };\n\t\tvar hex4 = function () { return pad4(Math.floor(Math.random() * 0x10000 /* 65536 */ ).toString(16)); };\n\t\treturn (hex4() + hex4() + \"-\" + hex4() + \"-\" + hex4() + \"-\" + hex4() + \"-\" + hex4() + hex4() + hex4());\n\t}\n\n\nWhen an application provides a value for an ID, Mobile Services stores it as-is. This includes leading or trailing white spaces. White space are not trimmed from value.\n\nThe value for the `id` must be unique and it must not include characters from the following sets:\n\n+ Control characters: [0x0000-0x001F] and [0x007F-0x009F]. For more information, see [ASCII control codes C0 and C1](http://en.wikipedia.org/wiki/Data_link_escape_character#C1_set).\n+  Printable characters: **\"**(0x0022), **\\+** (0x002B), **/** (0x002F), **?** (0x003F), **\\\\** (0x005C), **`** (0x0060)\n+  The ids \".\" and \"..\"\n\nYou can also use integer IDs for your tables. To use an integer ID, you must create your table with the `mobile table create` command using the `--integerId` option. This command is used with the Command-line Interface (CLI) for Azure. For more information on using the CLI, see [CLI to manage Mobile Services tables](https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-command-line-tools/#Mobile_Tables).\n\n\n### <a name=\"access-headers\"></a>How to: Access custom parameters\n\nWhen you send a request to your mobile service, you can include custom parameters in the URI of the request to instruct your table operation scripts how to process a given request. You then modify your script to inspect the parameter to determine the processing path.\n\nFor example, the following URI for a POST request tells the service to not permit the insertion of a new *TodoItem* that has the same text value:\n\n\t\thttps://todolist.azure-mobile.net/tables/TodoItem?duplicateText=false\n\nThese custom query parameters are accessed as JSON values from the **parameters** property of the [request object]. The **request** object is supplied by Mobile Services to any function registered to a table operation. The following server script for the insert operation checks the value of the `duplicateText` parameter before the insert operation is run:\n\n\t\tfunction insert(item, user, request) {\n\t\t    var todoItemTable = tables.getTable('TodoItem');\n\t\t    // Check the supplied custom parameter to see if\n\t\t    // we should allow duplicate text items to be inserted.\t\t   \n\t\t    if (request.parameters.duplicateText === 'false') {\n\t\t        // Find all existing items with the same text\n\t\t        // and that are not marked 'complete'.\n\t\t        todoItemTable.where({\n\t\t            text: item.text,\n\t\t            complete: false\n\t\t        }).read({\n\t\t            success: insertItemIfNotComplete\n\t\t        });\n\t\t    } else {\n\t\t        request.execute();\n\t\t    }\n\n\t\t    function insertItemIfNotComplete(existingItems) {\n\t\t        if (existingItems.length > 0) {\n\t\t            request.respond(statusCodes.CONFLICT,\n                        \"Duplicate items are not allowed.\");\n\t\t        } else {\n\t\t            // Insert the item as normal.\n\t\t            request.execute();\n\t\t        }\n\t\t    }\n\t\t}\n\nNote that in **insertItemIfNotComplete** the **execute** function of the [request object] is invoked to insert the item when there is no duplicate text; otherwise the **respond** function is invoked to notify the client of the duplicate.\n\nNote the syntax of the call to the **success** function in the above code:\n\n \t\t        }).read({\n\t\t            success: insertItemIfNotComplete\n\t\t        });\n\nIn JavaScript it is a compact version of the lengthier equivalent:\n\n\t\tsuccess: function(results)\n\t\t{\n\t\t\tinsertItemIfNotComplete(results);\n\t\t}\n\n\n### <a name=\"work-with-users\"></a>How to: Work with users\n\nIn Azure Mobile Services, you can use an identity provider to authenticate users. For more information, see [Get started with authentication]. When an authenticated user invokes a table operation, Mobile Services uses the [user object] to supply information about the user to the registered script function. The **userId** property can be used to store and retrieve user-specific information. The following example sets the owner property of an item based on the **userId** of an authenticated user:\n\n\tfunction insert(item, user, request) {\n\t    item.owner = user.userId;\n\t    request.execute();\n\t}\n\nThe next example adds an additional filter to the query based on the **userId** of an authenticated user. This filter restricts the result to only items that belong to the current user:  \n\n\tfunction read(query, user, request) {\n\t    query.where({\n\t        owner: user.userId\n\t    });\n\t    request.execute();\n\t}\n\n## <a name=\"custom-api\"></a>Custom APIs\n\nThis section describes how you create and work with custom API endpoints, which includes the following sections:\n\n+ [Overview of custom APIs](#custom-api-overview)\n+ [How to: Define a custom API]\n+ [How to: Implement HTTP methods]\n+ [How to: Send and receive data as XML]\n+ [How to: Work with users and headers in a custom API]\n+ [How to: Define multiple routes in a custom API]\n\n### <a name=\"custom-api-overview\"></a>Overview of custom APIs\n\nA custom API is an endpoint in your mobile service that is accessed by one or more of the standard HTTP methods: GET, POST, PUT, PATCH, DELETE. A separate function export can be defined for each HTTP method supported by the custom API, all in a single script file. The registered script is invoked when a request to the custom API using the given method is received. For more information, see [Custom API].\n\nWhen custom API functions are called by the Mobile Services runtime, both a [request][request object] and [response][response object] object are supplied. These objects expose the functionality of the [express.js library], which can be leveraged by your scripts. The following custom API named **hello** is a very simple example that returns _Hello, world!_ in response to a POST request:\n\n\t\texports.post = function(request, response) {\n\t\t    response.send(200, \"{ message: 'Hello, world!' }\");\n\t\t}\n\nThe **send** function on the [response object] returns your desired response to the client. This code is invoked by sending a POST request to the following URL:\n\n\t\thttps://todolist.azure-mobile.net/api/hello  \n\nThe global state is maintained between executions.\n\n### <a name=\"define-custom-api\"></a>How to: Define a custom API\n\nYou can define server scripts that are registered to HTTP methods in a custom API endpoint in one of the following ways:\n\n+ In the [Azure classic portal]. Custom API scripts are created and modified in the **API** tab. The server script code is in the **Scripts** tab of a given custom API. The following shows the script that is invoked by a POST request to the `CompleteAll` custom API endpoint.\n\n\t![2][2]\n\n\tAccess permissions to custom API methods are assigned in the Permissions tab. To see how this custom API was created, see [Call a custom API from the client].  \n\n+ By using source control. When you have source control enabled, simply create a file named <em>`<custom_api>`</em>.js in the .\\service\\api subfolder in your git repository, where <em>`<custom_api>`</em> is the name of the custom API being registered. This script file contains an _exported_ function for each HTTP method exposed by the custom API. Permissions are defined in a companion .json file. For more information, see [Source control and shared code][Source control, shared code, and helper functions].\n\n+ From the command prompt by using the Azure command line tool. For more information, see [Using the command line tool].\n\n### <a name=\"handle-methods\"></a>How to: Implement HTTP methods\n\nA custom API can handle one or more of the HTTP methods, GET, POST, PUT, PATCH, and DELETE. An exported function is defined for each HTTP method handled by the custom API. A single custom API code file can export one or all of the following functions:\n\n\t\texports.get = function(request, response) { ... };\n\t\texports.post = function(request, response) { ... };\n\t\texports.patch = function(request, response) { ... };\n\t\texports.put = function(request, response) { ... };\n\t\texports.delete = function(request, response) { ... };\n\nThe custom API endpoint cannot be called using an HTTP method that has not been implemented in the server script, and a 405 (Method Not Allowed) error response is returned. Separate permission levels can be assigned to each support HTTP method.\n\n### <a name=\"api-return-xml\"></a>How to: Send and receive data as XML\n\nWhen clients store and retrieve data, Mobile Services uses JavaScript Object Notation (JSON) to represent data in the message body. However, there are scenarios where you instead want to use an XML payload. For example, Windows Store apps have a built-in periodic notifications functionality that requires the service to emit XML. For more information, see [Define a custom API that supports periodic notifications].\n\nThe following **OrderPizza** custom API function returns a simple XML document as the response payload:\n\n\t\texports.get = function(request, response) {\n\t\t  response.set('content-type', 'application/xml');\n\t\t  var xml = '<?xml version=\"1.0\"?><PizzaOrderForm><PizzaOrderForm/>';\n\t\t  response.send(200, xml);\n\t\t};\n\nThis custom API function is invoked by an HTTP GET request to the following endpoint:\n\n\t\thttps://todolist.azure-mobile.net/api/orderpizza\n\n### <a name=\"get-api-user\"></a>How to: Work with users and headers in a custom API\n\nIn Azure Mobile Services, you can use an identity provider to authenticate users. For more information, see [Get started with authentication]. When an authenticated user requests a custom API, Mobile Services uses the [user object] to provide information about the user to custom API code. The [user object] is accessed from the user property of the [request object]. The **userId** property can be used to store and retrieve user-specific information.\n\nThe following **OrderPizza** custom API function sets the owner property of an item based on the **userId** of an authenticated user:\n\n\t\texports.post = function(request, response) {\n\t\t\tvar userTable = request.service.tables.getTable('user');\n\t\t\tuserTable.lookup(request.user.userId, {\n\t\t\t\tsuccess: function(userRecord) {\n\t\t\t\t\tcallPizzaAPI(userRecord, request.body, function(orderResult) {\n\t\t\t\t\t\tresponse.send(201, orderResult);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t};\n\nThis custom API function is invoked by an HTTP POST request to the following endpoint:\n\n\t\thttps://<service>.azure-mobile.net/api/orderpizza\n\nYou can also access a specific HTTP header from the [request object], as shown in the following code:\n\n\t\texports.get = function(request, response) {    \n    \t\tvar header = request.header('my-custom-header');\n    \t\tresponse.send(200, \"You sent: \" + header);\n\t\t};\n\nThis simple example reads a custom header named `my-custom-header`, then returns the value in the response.\n\n### <a name=\"api-routes\"></a>How to: Define multiple routes in a custom API\n\nMobile Services enables you to define multiple paths, or routes, in a custom API. For example, HTTP GET requests to the following URLs in a **calculator** custom API will invoke an **add** or **subtract** function, respectively:\n\n+ `https://<service>.azure-mobile.net/api/calculator/add`\n+ `https://<service>.azure-mobile.net/api/calculator/sub`\n\nMultiple routes are defined by exporting a **register** function, which is passed an **api** object (similar to the [express object in express.js]) that is used to register routes under the custom API endpoint. The following example implements the **add** and **sub** methods in the **calculator** custom API:\n\n\t\texports.register = function (api) {\n\t\t    api.get('add', add);\n\t\t    api.get('sub', subtract);\n\t\t}\n\n\t\tfunction add(req, res) {\n\t\t    var result = parseInt(req.query.a) + parseInt(req.query.b);\n\t\t    res.send(200, { result: result });\n\t\t}\n\n\t\tfunction subtract(req, res) {\n\t\t    var result = parseInt(req.query.a) - parseInt(req.query.b);\n\t\t    res.send(200, { result: result });\n\t\t}\n\nThe **api** object passed to the **register** function exposes a function for each HTTP method (**get**, **post**, **put**, **patch**, **delete**). These functions register a route to a defined function for a specific HTTP method. Each function takes two parameters, the first is the route name and the second is the function registered to the route.\n\nThe two routes in the above custom API example can be invoked by HTTP GET requests as follows (shown with the response):\n\n+ `https://<service>.azure-mobile.net/api/calculator/add?a=1&b=2`\n\n\t\t{\"result\":3}\n\n+ `https://<service>.azure-mobile.net/api/calculator/sub?a=3&b=5`\n\n\t\t{\"result\":-2}\n\n## <a name=\"scheduler-scripts\"></a>Job Scheduler\n\nMobile Services enables you to define server scripts that are executed either as jobs on a fixed schedule or on-demand from the Azure classic portal. Scheduled jobs are useful for performing periodic tasks such as cleaning-up table data and batch processing. For more information, see [Schedule jobs].\n\nScripts that are registered to scheduled jobs have a main function with the same name as the scheduled job. Because a scheduled script is not invoked by an HTTP request, there is no context that can be passed by the server runtime and the function takes no parameters. Like other kinds of scripts, you can have subroutine functions and require shared modules. For more information, see [Source control, shared code, and helper functions].\n\n### <a name=\"scheduler-scripts\"></a>How to: Define scheduled job scripts\n\nA server script can be assigned to a job that's defined in the Mobile Services Scheduler. These scripts belong to the job and are executed according to the job schedule. (You can also use the [Azure classic portal] to run jobs on demand.) A script that defines a scheduled job has no parameters because Mobile Services doesn't pass it any data; it's executed as a regular JavaScript function and doesn't interact with Mobile Services directly.\n\nYou define scheduled jobs in one of the following ways:\n\n+ In the [Azure classic portal] in the **Script** tab in the scheduler:\n\n\t![3][3]\n\n\tFor more information about how to do this, see [Schedule backend jobs in Mobile Services].\n\n+ From the command prompt by using the Azure command line tool. For more information, see [Using the command line tool].\n\n>[AZURE.NOTE]When you have source control enabled, you can edit scheduled job script files directly in the .\\service\\scheduler subfolder in your git repository. For more information, see [How to: Share code by using source control].\n\n## <a name=\"shared-code\"></a>Source control, shared code, and helper functions\n\nThis sections shows you how to leverage source control to add your own custom node.js modules, shared code and other code reuse strategies, including the following sections:\n\n+ [Overview of leveraging shared code](#leverage-source-control)\n+ [How to: Load Node.js modules]\n+ [How to: Use helper functions]\n+ [How to: Share code by using source control]\n+ [How to: Work with app settings]\n\n### <a name=\"leverage-source-control\"></a>Overview of leveraging shared code\n\nBecause Mobile Services uses Node.js on the server, your scripts already have access to the built-in Node.js modules. You can also use source control to define your own modules or add other Node.js modules to your service.\n\nThe following are just some of the more useful modules that can be leveraged in your scripts by using the global **require** function:\n\n+ **azure**: Exposes the functionality of the Azure SDK for Node.js. For more information, see the [Azure SDK for Node.js].\n+ **crypto**: Provides crypto functionality of OpenSSL. For more information, see the [Node.js documentation][crypto API].\n+ **path**: Contains utilities for working with file paths. For more information, see the [Node.js documentation][path API].\n+ **querystring**: Contains utilities for working with query strings. For more information, see the [Node.js documentation][querystring API].\n+ **request**: Sends HTTP requests to external REST services, such as Twitter and Facebook. For more information, see [Send HTTP request].\n+ **sendgrid**: Sends email by using the Sendgrid email service in Azure. For more information, see [Send email from Mobile Services with SendGrid].\n+ **url**: Contains utilities to parse and resolve URLs. For more information, see the [Node.js documentation][url API].\n+ **util**: Contains various utilities, such as string formatting and object type checking. For more information, see the [Node.js documentation][util API].\n+ **zlib**: Exposes compression functionality, such as gzip and deflate. For more information, see the [Node.js documentation][zlib API].\n\n### <a name=\"modules-helper-functions\"></a>How to: Leverage modules\n\nMobile Services exposes a set of modules that scripts can load by using the global **require** function. For example, a script can require **request** to make HTTP requests:\n\n\tfunction update(item, user, request) {\n\t    var httpRequest = require('request');\n\t    httpRequest('http://www.google.com', function(err, response, body) {\n\t    \t...\n\t    });\n\t}\n\n\n### <a name=\"shared-code-source-control\"></a>How to: Share code by using source control\n\nYou can use source control with the Node.js package manager (npm) to control which modules are available to your mobile service. There are two ways to do this:\n\n+ For modules that are published to and installed by npm, use the package.json file to declare which packages you want to be installed by your mobile service. In this way, your service always has access to the latest version of the required packages. The package.json file lives in the `.\\service` directory. For more information, see [Support for package.json in Azure Mobile Services].\n\n+ For private or custom modules, you can use npm to manually install the module into the `.\\service\\node_modules` directory of your source control. For an example of how to manually upload a module, see [Leverage shared code and Node.js modules in your server scripts].\n\n\t>[AZURE.NOTE]When `node_modules` already exists in the directory hierarchy, NPM will create the `\\node-uuid` subdirectory there instead of creating a new `node_modules` in the repository. In this case, just delete the existing `node_modules` directory.\n\nAfter you commit the package.json file or custom modules to the repository for your mobile service, use **require** to reference the modules by name.   \n\n>[AZURE.NOTE] Modules that you specify in package.json or upload to your mobile service are only used in your server script code. These modules are not used by the Mobile Services runtime.\n\n### <a name=\"helper-functions\"></a>How to: Use helper functions\n\nIn addition to requiring modules, individual server scripts can include helper functions. These are functions that are separate from the main function, which can be used to factor code in the script.\n\nIn the following example, a table script is registered to the insert operation, which includes the helper function **handleUnapprovedItem**:\n\n\n\tfunction insert(item, user, request) {\n\t    if (!item.approved) {\n\t        handleUnapprovedItem(item, user, request);\n\t    } else {\n\t        request.execute();\n\t    }\n\t}\n\n\tfunction handleUnapprovedItem(item, user, request) {\n\t    // Do something with the supplied item, user, or request objects.\n\t}\n\nIn a script, helper functions must be declared after the main function. You must declare all variables in your script. Undeclared variables cause an error.\n\nHelper functions can also be defined once and shared between server scripts. To share a function between scripts, functions must be exported and the script file must exist in the `.\\service\\shared\\` directory. The following is a template for how to export a shared function in a file `.\\services\\shared\\helpers.js`:\n\n\t\texports.handleUnapprovedItem = function (tables, user, callback) {\n\n\t\t    // Do something with the supplied tables or user objects and\n\t\t\t// return a value to the callback function.\n\t\t};\n\nYou can then use a function like this in a table operation script:\n\n\t\tfunction insert(item, user, request) {\n\t\t    var helper = require('../shared/helper');\n\t\t    helper.handleUnapprovedItem(tables, user, function(result) {\n\n\t\t\t\t\t// Do something based on the result.\n\t\t            request.execute();\n\t\t        }\n\t\t    }\n\t\t}\n\nIn this example, you must pass both a [tables object] and a [user object] to the shared function. This is because shared scripts cannot access the global [tables object], and the [user object] only exists in the context of a request.\n\nScript files are uploaded to the shared directory either by using [source control][How to: Share code by using source control] or by using the [command line tool][Using the command line tool].\n\n### <a name=\"app-settings\"></a>How to: Work with app settings\n\nMobile Services enables you to securely store values as app settings, which can be accessed by your server scripts at runtime.  When you add data to the app settings of your mobile service, the name/value pairs are stored encrypted and you can access them in your server scripts without hard-coding them in the script file. For more information, see [App settings].\n\nThe following custom API example uses the supplied [service object] to retrieve an app setting value.  \n\n\t\texports.get = function(request, response) {\n\n\t\t\t// Get the MY_CUSTOM_SETTING value from app settings.\n\t\t    var customSetting =\n\t\t        request.service.config.appSettings.my_custom_setting;\n\n\t\t\t// Do something and then send a response.\n\n\t\t}\n\nThe following code uses the configuration module to retrieve Twitter access token values, stored in app settings, that are used in a scheduled job script:\n\n\t\t// Get the service configuration module.\n\t\tvar config = require('mobileservice-config');\n\n\t\t// Get the stored Twitter consumer key and secret.\n\t\tvar consumerKey = config.twitterConsumerKey,\n\t\t    consumerSecret = config.twitterConsumerSecret\n\t\t// Get the Twitter access token from app settings.    \n\t\tvar accessToken= config.appSettings.TWITTER_ACCESS_TOKEN,\n\t\t    accessTokenSecret = config.appSettings.TWITTER_ACCESS_TOKEN_SECRET;\n\nNote that this code also retrieves Twitter consumer key values stored in the **Identity** tab in the portal. Because a **config object** is not available in table operation and scheduled job scripts, you must require the configuration module to access app settings. For a complete example, see [Schedule backend jobs in Mobile Services].\n\n<h2><a name=\"command-prompt\"></a>Using the command line tool</h2>\n\nIn Mobile Services, you can create, modify, and delete server scripts by using the Azure command line tool. Before uploading your scripts, make sure that you are using the following directory structure:\n\n![4][4]\n\nNote that this directory structure is the same as the git repository when using source control.\n\nWhen uploading script files from the command line tool, you must first navigate to the `.\\services\\` directory. The following command uploads a script named `todoitem.insert.js` from the `table` subdirectory:\n\n\t\t~$azure mobile script upload todolist table/todoitem.insert.js\n\t\tinfo:    Executing command mobile script upload\n\t\tinfo:    mobile script upload command OK\n\nThe following command returns information about every script file maintained in your mobile service:\n\n\t\t~$ azure mobile script list todolist\n\t\tinfo:    Executing command mobile script list\n\t\t+ Retrieving script information\n\t\tinfo:    Table scripts\n\t\tdata:    Name                       Size\n\t\tdata:    -------------------------  ----\n\t\tdata:    table/channels.insert      1980\n\t\tdata:    table/TodoItem.insert      5504\n\t\tdata:    table/TodoItem.read        64\n\t\tinfo:    Shared scripts\n\t\tdata:    Name              Size\n\t\tdata:    ----------------  ----\n\t\tdata:    shared/helper.js  62\n\t\tdata:    shared/uuid.js    7452\n\t\tinfo:    Scheduled job scripts\n\t\tdata:    Job name    Script name           Status    Interval     Last run  Next run\n\t\tdata:    ----------  --------------------  --------  -----------  --------  --------\n\t\tdata:    getUpdates  scheduler/getUpdates  disabled  15 [minute]  N/A       N/A\n\t\tinfo:    Custom API scripts\n\t\tdata:    Name                    Get          Put          Post         Patch        Delete\n\t\tdata:    ----------------------  -----------  -----------  -----------  -----------  -----------\n\t\tdata:    completeall             application  application  application  application  application\n\t\tdata:    register_notifications  application  application  user         application  application\n\t\tinfo:    mobile script list command OK\n\nFor more information, see [Commands to manage Azure Mobile Services].\n\n## <a name=\"working-with-tables\"></a>Working with tables\n\nThis section details strategies for working directly with SQL Database table data, including the following sections:\n\n+ [Overview of working with tables](#overview-tables)\n+ [How to: Access tables from scripts]\n+ [How to: Perform Bulk Inserts]\n+ [How to: Map JSON types to database types]\n+ [Using Transact-SQL to access tables]\n\n### <a name=\"overview-tables\"></a>Overview of working with tables\n\nMany scenarios in Mobile Services require server scripts to access tables in the database. For example. because Mobile Services does not preserve state between script executions, any data that needs to be persisted between script executions must be stored in tables. You might also want to examine entries in a permissions table or store audit data instead of just writing to the log, where data has a limited duration and cannot be accessed programmatically.\n\nMobile Services has two ways of accessing tables, either by using a [table object] proxy or by composing Transact-SQL queries using the [mssql object]. The [table object] makes it easy to access table data from your sever script code, but the [mssql object] supports more complex data operations and provides the most flexibility.\n\n### <a name=\"access-tables\"></a>How to: Access tables from scripts\n\nThe easiest way to access tables from your script is by using the [tables object]. The **getTable** function returns a [table object] instance that's a proxy for accessing the requested table. You can then call functions on the proxy to access and change data.\n\nScripts registered to both table operations and scheduled jobs can access the [tables object] as a global object. This line of code gets a proxy for the *TodoItems* table from the global [tables object]:\n\n\t\tvar todoItemsTable = tables.getTable('TodoItems');\n\nCustom API scripts can access the [tables object] from the <strong>service</strong> property of the supplied [request object]. This line of code gets [tables object] from the request:\n\n\t\tvar todoItemsTable = request.service.tables.getTable('TodoItem');\n\n> [AZURE.NOTE] Shared functions cannot access the **tables** object directly. In a shared function, you must pass the tables object to the function.\n\nOnce you have a [table object], you can call one or more table operation functions: insert, update, delete or read. This example reads user permissions from a permissions table:\n\n\tfunction insert(item, user, request) {\n\t\tvar permissionsTable = tables.getTable('permissions');\n\n\t\tpermissionsTable\n\t\t\t.where({ userId: user.userId, permission: 'submit order'})\n\t\t\t.read({ success: checkPermissions });\n\n\t\tfunction checkPermissions(results) {\n\t\t\tif(results.length > 0) {\n\t\t\t\t// Permission record was found. Continue normal execution.\n\t\t\t\trequest.execute();\n\t\t\t} else {\n\t\t\t\tconsole.log('User %s attempted to submit an order without permissions.', user.userId);\n\t\t\t\trequest.respond(statusCodes.FORBIDDEN, 'You do not have permission to submit orders.');\n\t\t\t}\n\t\t}\n\t}\n\nThe next example writes auditing information to an **audit** table:\n\n\tfunction update(item, user, request) {\n\t\trequest.execute({ success: insertAuditEntry });\n\n\t\tfunction insertAuditEntry() {\n\t\t\tvar auditTable = tables.getTable('audit');\n\t\t\tvar audit = {\n\t\t\t\trecord: 'checkins',\n\t\t\t\trecordId: item.id,\n\t\t\t\ttimestamp: new Date(),\n\t\t\t\tvalues: JSON.stringify(item)\n\t\t\t};\n\t\t\tauditTable.insert(audit, {\n\t\t\t\tsuccess: function() {\n\t\t\t\t\t// Write to the response now that all data operations are complete\n\t\t\t\t\trequest.respond();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\nA final example is in the code sample here: [How to: Access custom parameters][How to: Add custom parameters].\n\n### <a name=\"bulk-inserts\"></a>How to: Perform Bulk Inserts\n\nIf you use a **for** or **while** loop to directly insert a large number of items (1000, for example) into a  table , you may encounter a SQL connection limit that causes some of the inserts to fail. Your request may never complete or it may return a HTTP 500 Internal Server Error.  To avoid this problem, you can insert the items in batches of 10 or so. After the first batch is inserted, submit the next batch, and so on.\n\nBy using the following script, you can set the size of a batch of records to insert in parallel. We recomend that you keep the number of records small. The function **insertItems** calls itself recursively when an async insert batch has completed. The for loop at the end inserts one record at a time, and calls **insertComplete** on success and **errorHandler** on error. **insertComplete**  controls whether **insertItems** will be called recursively for the next batch, or whether the job is done and the script should exit.\n\n\t\tvar todoTable = tables.getTable('TodoItem');\n\t\tvar recordsToInsert = 1000;\n\t\tvar batchSize = 10;\n\t\tvar totalCount = 0;\n\t\tvar errorCount = 0;\n\n\t\tfunction insertItems() {        \n\t\t    var batchCompletedCount = 0;  \n\n\t\t    var insertComplete = function() {\n\t\t        batchCompletedCount++;\n\t\t        totalCount++;\n\t\t        if(batchCompletedCount === batchSize || totalCount === recordsToInsert) {                        \n\t\t            if(totalCount < recordsToInsert) {\n\t\t                // kick off the next batch\n\t\t                insertItems();\n\t\t            } else {\n\t\t                // or we are done, report the status of the job\n\t\t                // to the log and don't do any more processing\n\t\t                console.log(\"Insert complete. %d Records processed. There were %d errors.\", totalCount, errorCount);\n\t\t            }\n\t\t        }\n\t\t    };\n\n\t\t    var errorHandler = function(err) {\n\t\t        errorCount++;\n\t\t        console.warn(\"Ignoring insert failure as part of batch.\", err);\n\t\t        insertComplete();\n\t\t    };\n\n\t\t    for(var i = 0; i < batchSize; i++) {\n\t\t        var item = { text: \"This is item number: \" + totalCount + i };\n\t\t        todoTable.insert(item, {\n\t\t            success: insertComplete,\n\t\t            error: errorHandler\n\t\t        });\n\t\t    }\n\t\t}\n\n\t\tinsertItems();\n\n\nThe entire code sample, and accompanying discussion, can be found in this [blog posting](http://blogs.msdn.com/b/jpsanders/archive/2013/03/20/server-script-to-insert-table-items-in-windows-azure-mobile-services.aspx). If you use this code, you can adapt it to your specific situation, and thoroughly test it.\n\n### <a name=\"JSON-types\"></a>How to: Map JSON types to database types\n\nThe collections of data types on the client and in a Mobile Services database table are different. Sometimes they map easily to one another, and other times they don't. Mobile Services performs a number of type transformations in the mapping:\n\n- The client language-specific types are serialized into JSON.\n- The JSON representation is translated into JavaScript before it appears in server scripts.\n- The JavaScript data types are converted to SQL database types when saved using the [tables object].\n\nThe transformation from client schema into JSON varies across platforms.  JSON.NET is used in Windows Store and Windows Phone clients. The Android client uses the gson library.  The iOS client uses the NSJSONSerialization class. The default serialization behavior of each of these libraries is used, except that date objects are converted to JSON strings that contain the date that's encoded by using ISO 8601.\n\nWhen you are writing server scripts that use [insert], [update], [read] or [delete] functions, you can access the JavaScript representation of your data. Mobile Services uses the Node.js's deserialization function ([JSON.parse](http://es5.github.io/#x15.12)) to transform JSON on the wire into JavaScript objects. However Mobile Services does  a transformation to extract **Date** objects from ISO 8601 strings.\n\nWhen you use the [tables object] or the [mssql object], or just let your table scripts execute, the deserialized JavaScript objects are inserted into your SQL database. In that process, object properties are mapped to T-SQL types:\n\nJavaScript property|T-SQL type\n---|---\nNumber|Float(53)\nBoolean|Bit\nDate|DateTimeOffset(3)|\nString|Nvarchar(max)\nBuffer|Not supported\nObject|Not supported\nArray|Not supported\nStream|Not supported\n\n### <a name=\"TSQL\"></a>Using Transact-SQL to access tables\n\nThe easiest way to work table data from server scripts is by using a [table object] proxy. However, there are more advanced scenarios that are not supported by the [table object], such as as join queries and other complex queries and invoking stored procedures. In these cases, you must execute Transact-SQL statements directly against the relational table by using the [mssql object]. This object provides the following functions:\n\n- **query**: executes a query, specified by a TSQL string; the results are returned to the **success** callback on the **options** object. The query can include parameters if the *params* parameter is present.\n- **queryRaw**: like *query* except that the result set returned from the query is in a \"raw\" format (see example below).\n- **open**: used to get a connection to your Mobile Services database, and you can then use the connection object to invoke database operations such as transactions.\n\nThese methods give you increasingly more low-level control over the query processing.\n\n+ [How to: Run a static query]\n+ [How to: Run a dynamic query]\n+ [How to: Join relational tables]\n+ [How to: Run a query that returns *raw* results]\n+ [How to: Get access to a database connection]\n\n#### <a name=\"static-query\"></a>How to: Run a static query\n\nThe following query has no parameters and returns three records from the `statusupdate` table. The rowset is in standard JSON format.\n\n\t\tmssql.query('select top 3 * from statusupdates', {\n\t\t    success: function(results) {\n\t\t        console.log(results);\n\t\t    },\n            error: function(err) {\n                console.log(\"error is: \" + err);\n\t\t\t}\n\t\t});\n\n\n#### <a name=\"dynamic-query\"></a>How to: Run a dynamic parameterized query\n\nThe following example implements custom authorization by reading permissions for each user from the permissions table. The placeholder (?) is replaced with the supplied parameter when the query is executed.\n\n\t\t    var sql = \"SELECT _id FROM permissions WHERE userId = ? AND permission = 'submit order'\";\n\t\t    mssql.query(sql, [user.userId], {\n\t\t        success: function(results) {\n\t\t            if (results.length > 0) {\n\t\t                // Permission record was found. Continue normal execution.\n\t\t                request.execute();\n\t\t            } else {\n\t\t                console.log('User %s attempted to submit an order without permissions.', user.userId);\n\t\t                request.respond(statusCodes.FORBIDDEN, 'You do not have permission to submit orders.');\n\t\t            }\n\t\t        },\n            \terror: function(err) {\n                \tconsole.log(\"error is: \" + err);\n\t\t\t\t}\n\t\t    });\n\n\n#### <a name=\"joins\"></a>How to: Join relational tables\n\nYou can join two tables by using the **query** method of the [mssql object] to pass in the TSQL code that implements the join. Let's assume we have some items in our **ToDoItem** table and each item in the table has a **priority** property, which corresponds to a column in the table. An item may look like this:\n\n\t\t{ text: 'Take out the trash', complete: false, priority: 1}\n\nLet's also assume we have an additional table called **Priority** with rows that contain a priority **number** and a text **description**. For example, the priority number 1 might have the description of \"Critical\", with the object looking as follows:\n\n\t\t{ number: 1, description: 'Critical'}\n\nWe can now replace the **priority** number in our item with the text description of the priority number. We do this with a relational join of the two tables.\n\n\t\tmssql.query('SELECT t.text, t.complete, p.description FROM ToDoItem as t INNER JOIN Priority as p ON t.priority = p.number', {\n\t\t\tsuccess: function(results) {\n\t\t\t\tconsole.log(results);\n\t\t\t},\n            error: function(err) {\n                console.log(\"error is: \" + err);\n\t\t});\n\nThe script joins the two tables and writes the results to the log. The resulting objects could look like this:\n\n\t\t{ text: 'Take out the trash', complete: false, description: 'Critical'}\n\n\n#### <a name=\"raw\"></a>How to: Run a query that returns *raw* results\n\nThis example executes the query, as before, but returns the resultset in \"raw\" format which requires you to parse it, row by row, and column by column. A possible scenario for this is if you need access to data types that Mobile Services does not support. This code simply writes the output to the console log so you can inspect the raw format.\n\n\t\tmssql.queryRaw('SELECT * FROM ToDoItem', {\n\t\t    success: function(results) {\n\t\t        console.log(results);\n\t\t    },\n            error: function(err) {\n                console.log(\"error is: \" + err);\n\t\t\t}\n\t\t});\n\nHere is the output from running this query. It contains metadata about each column in the table, followed by a representation of the rows and columns.\n\n\t\t{ meta:\n\t\t   [ { name: 'id',\n\t\t       size: 19,\n\t\t       nullable: false,\n\t\t       type: 'number',\n\t\t       sqlType: 'bigint identity' },\n\t\t     { name: 'text',\n\t\t       size: 0,\n\t\t       nullable: true,\n\t\t       type: 'text',\n\t\t       sqlType: 'nvarchar' },\n\t\t     { name: 'complete',\n\t\t       size: 1,\n\t\t       nullable: true,\n\t\t       type: 'boolean',\n\t\t       sqlType: 'bit' },\n\t\t     { name: 'priority',\n\t\t       size: 53,\n\t\t       nullable: true,\n\t\t       type: 'number',\n\t\t       sqlType: 'float' } ],\n\t\t  rows:\n\t\t   [ [ 1, 'good idea for the future', null, 3 ],\n\t\t     [ 2, 'this is important but not so much', null, 2 ],\n\t\t     [ 3, 'fix this bug now', null, 0 ],\n\t\t     [ 4, 'we need to fix this one real soon now', null, 1 ],\n\t\t   ] }\n\n#### <a name=\"connection\"></a>How to: Get access to a database connection\n\nYou can use the **open** method to get access to the database connection. One reason to do this might be if you need to use database transactions.\n\nSuccessful execution of the **open** causes the database connection to be passed into the **success** function as a parameter. You can invoke any of the following functions on the **connection** object: *close*, *queryRaw*, *query*, *beginTransaction*, *commit*, and *rollback*.\n\n\t\t    mssql.open({\n\t\t        success: function(connection) {\n\t\t            connection.query(//query to execute);\n\t\t        },\n\t            error: function(err) {\n\t                console.log(\"error is: \" + err);\n\t\t\t\t}\n\t\t    });\n\n## <a name=\"debugging\"></a>Debugging and troubleshooting\n\nThe primary way to debug and troubleshoot your server scripts is by writing to the service log. By default, Mobile Services writes errors that occur during service script execution to the service logs. Your scripts can also write to the logs. Writing to logs is great way to debug your scripts and validate that they are behaving as desired.\n\n### <a name=\"write-to-logs\"></a>How to: Write output to the mobile service logs\n\nTo write to the logs, use the global [console object]. Use the **log** or **info** function to log information-level warnings. The **warning** and **error** functions log their respective levels, which are called-out in the logs.\n\n> [AZURE.NOTE] To view the logs for your mobile service, log on to the [Azure classic portal](https://manage.windowsazure.com/), select your mobile service, and then choose the **Logs** tab.\n\nYou can also use the logging functions of the [console object] to format your messages using parameters. The following example supplies a JSON object as a parameter to the message string:\n\n\tfunction insert(item, user, request) {\n\t    console.log(\"Inserting item '%j' for user '%j'.\", item, user);  \n\t    request.execute();\n\t}\n\nNotice that the string `%j` is used as the placeholder for a JSON object and that parameters are supplied in sequential order.\n\nTo avoid overloading your log, you should remove or disable calls to console.log() that aren't needed for production use.\n\n<!-- Anchors. -->\n[Introduction]: #intro\n[Table operations]: #table-scripts\n[Basic table operations]: #basic-table-ops\n[How to: Register for table operations]: #register-table-scripts\n[How to: Define table scripts]: #execute-operation\n[How to: override the default response]: #override-response\n[How to: Modify an operation]: #modify-operation\n[How to: Override success and error]: #override-success-error\n[How to: Override execute success]: #override-success\n[How to: Override default error handling]: #override-error\n[How to: Access tables from scripts]: #access-tables\n[How to: Add custom parameters]: #access-headers\n[How to: Work with users]: #work-with-users\n[How to: Define scheduled job scripts]: #scheduler-scripts\n[How to: Refine access to tables]: #authorize-tables\n[Using Transact-SQL to access tables]: #TSQL\n[How to: Run a static query]: #static-query\n[How to: Run a dynamic query]: #dynamic-query\n[How to: Run a query that returns *raw* results]: #raw\n[How to: Get access to a database connection]: #connection\n[How to: Join relational tables]: #joins\n[How to: Perform Bulk Inserts]: #bulk-inserts\n[How to: Map JSON types to database types]: #JSON-types\n[How to: Load Node.js modules]: #modules-helper-functions\n[How to: Write output to the mobile service logs]: #write-to-logs\n[Source control, shared code, and helper functions]: #shared-code\n[Using the command line tool]: #command-prompt\n[Working with tables]: #working-with-tables\n[Custom API anchor]: #custom-api\n[How to: Define a custom API]: #define-custom-api\n[How to: Share code by using source control]: #shared-code-source-control\n[How to: Use helper functions]: #helper-functions\n[Debugging and troubleshooting]: #debugging\n[How to: Implement HTTP methods]: #handle-methods\n[How to: Work with users and headers in a custom API]: #get-api-user\n[How to: Access custom API request headers]: #get-api-headers\n[Job Scheduler]: #scheduler-scripts\n[How to: Define multiple routes in a custom API]: #api-routes\n[How to: Send and receive data as XML]: #api-return-xml\n[How to: Work with app settings]: #app-settings\n\n[1]: ./media/mobile-services-how-to-use-server-scripts/1-mobile-insert-script-users.png\n[2]: ./media/mobile-services-how-to-use-server-scripts/2-mobile-custom-api-script.png\n[3]: ./media/mobile-services-how-to-use-server-scripts/3-mobile-schedule-job-script.png\n[4]: ./media/mobile-services-how-to-use-server-scripts/4-mobile-source-local-cli.png\n\n<!-- URLs. -->\n[Mobile Services server script reference]: http://msdn.microsoft.com/library/windowsazure/jj554226.aspx\n[Schedule backend jobs in Mobile Services]: https://azure.microsoft.com/develop/mobile/tutorials/schedule-backend-tasks/\n[request object]: http://msdn.microsoft.com/library/windowsazure/jj554218.aspx\n[response object]: http://msdn.microsoft.com/library/windowsazure/dn303373.aspx\n[User object]: http://msdn.microsoft.com/library/windowsazure/jj554220.aspx\n[push object]: http://msdn.microsoft.com/library/windowsazure/jj554217.aspx\n[insert function]: http://msdn.microsoft.com/library/windowsazure/jj554229.aspx\n[insert]: http://msdn.microsoft.com/library/windowsazure/jj554229.aspx\n[update function]: http://msdn.microsoft.com/library/windowsazure/jj554214.aspx\n[delete function]: http://msdn.microsoft.com/library/windowsazure/jj554215.aspx\n[read function]: http://msdn.microsoft.com/library/windowsazure/jj554224.aspx\n[update]: http://msdn.microsoft.com/library/windowsazure/jj554214.aspx\n[delete]: http://msdn.microsoft.com/library/windowsazure/jj554215.aspx\n[read]: http://msdn.microsoft.com/library/windowsazure/jj554224.aspx\n[query object]: http://msdn.microsoft.com/library/windowsazure/jj613353.aspx\n[apns object]: http://msdn.microsoft.com/library/windowsazure/jj839711.aspx\n[mpns object]: http://msdn.microsoft.com/library/windowsazure/jj871025.aspx\n[wns object]: http://msdn.microsoft.com/library/windowsazure/jj860484.aspx\n[table object]: http://msdn.microsoft.com/library/windowsazure/jj554210.aspx\n[tables object]: http://msdn.microsoft.com/library/windowsazure/jj614364.aspx\n[mssql object]: http://msdn.microsoft.com/library/windowsazure/jj554212.aspx\n[console object]: http://msdn.microsoft.com/library/windowsazure/jj554209.aspx\n[Read and write data]: http://msdn.microsoft.com/library/windowsazure/jj631640.aspx\n[Validate data]: http://msdn.microsoft.com/library/windowsazure/jj631638.aspx\n[Modify the request]: http://msdn.microsoft.com/library/windowsazure/jj631635.aspx\n[Modify the response]: http://msdn.microsoft.com/library/windowsazure/jj631631.aspx\n[Azure classic portal]: https://manage.windowsazure.com/\n[Schedule jobs]: http://msdn.microsoft.com/library/windowsazure/jj860528.aspx\n[Validate and modify data in Mobile Services by using server scripts]: https://azure.microsoft.com/develop/mobile/tutorials/validate-modify-and-augment-data-dotnet/\n[Commands to manage Azure Mobile Services]: https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-command-line-tools/#Mobile_Scripts\n[Windows Store Push]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-dotnet/\n[Windows Phone Push]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-wp8/\n[iOS Push]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-ios/\n[Android Push]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-android/\n[Azure SDK for Node.js]: http://go.microsoft.com/fwlink/p/?LinkId=275539\n[Send HTTP request]: http://msdn.microsoft.com/library/windowsazure/jj631641.aspx\n[Send email from Mobile Services with SendGrid]: https://azure.microsoft.com/develop/mobile/tutorials/send-email-with-sendgrid/\n[Get started with authentication]: http://go.microsoft.com/fwlink/p/?LinkId=287177\n[crypto API]: http://go.microsoft.com/fwlink/p/?LinkId=288802\n[path API]: http://go.microsoft.com/fwlink/p/?LinkId=288803\n[querystring API]: http://go.microsoft.com/fwlink/p/?LinkId=288804\n[url API]: http://go.microsoft.com/fwlink/p/?LinkId=288805\n[util API]: http://go.microsoft.com/fwlink/p/?LinkId=288806\n[zlib API]: http://go.microsoft.com/fwlink/p/?LinkId=288807\n[Custom API]: http://msdn.microsoft.com/library/windowsazure/dn280974.aspx\n[Call a custom API from the client]: https://azure.microsoft.com/develop/mobile/tutorials/call-custom-api-dotnet/#define-custom-api\n[express.js library]: http://go.microsoft.com/fwlink/p/?LinkId=309046\n[Define a custom API that supports periodic notifications]: https://azure.microsoft.com/develop/mobile/tutorials/create-pull-notifications-dotnet/\n[express object in express.js]: http://expressjs.com/api.html#express\n[Store server scripts in source control]: https://azure.microsoft.com/develop/mobile/tutorials/store-scripts-in-source-control/\n[Leverage shared code and Node.js modules in your server scripts]: https://azure.microsoft.com/develop/mobile/tutorials/store-scripts-in-source-control/#use-npm\n[service object]: http://msdn.microsoft.com/library/windowsazure/dn303371.aspx\n[App settings]: http://msdn.microsoft.com/library/dn529070.aspx\n[config module]: http://msdn.microsoft.com/library/dn508125.aspx\n[Support for package.json in Azure Mobile Services]: http://go.microsoft.com/fwlink/p/?LinkId=391036\n"
  },
  {
    "path": "docs/mobile-services-html-get-started-users.md",
    "content": "<properties \n\tpageTitle=\"Add authentication to your HTML/JavaScript app | Microsoft Azure\" \n\tdescription=\"Learn how to use Mobile Services to authenticate users of your HTML app through a variety of identity providers, including Google, Facebook, Twitter, and Microsoft account.\" \n\tservices=\"mobile-services\" \n\tdocumentationCenter=\"\" \n\tauthors=\"ggailey777\" \n\tmanager=\"dwrede\" \n\teditor=\"\"/>\n\n<tags \n\tms.service=\"mobile-services\" \n\tms.workload=\"mobile\" \n\tms.tgt_pltfrm=\"mobile-multiple\" \n\tms.devlang=\"javascript\" \n\tms.topic=\"article\" \n\tms.date=\"07/21/2016\" \n\tms.author=\"glenga\"/>\n\n# Add authentication to your Mobile Services app \n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-users.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-users.md)\n- [(Android | Javascript)](mobile-services-android-get-started-users.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started-users.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-users.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-users.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-users.md)\n- [(HTML | Javascript)](mobile-services-html-get-started-users.md)\n\n\nThis topic shows you how to authenticate users in Azure Mobile Services from your HTML app, including PhoneGap or Cordova apps.  In this tutorial, you add authentication to the quickstart project using an identity provider that is supported by Mobile Services. After being successfully authenticated and authorized by Mobile Services, the user ID value is displayed.  \n\nThis tutorial is based on the Mobile Services quickstart. You must also first complete the tutorial [Get started with Mobile Services]. \n\n## <a name=\"register\"></a>Register your app for authentication and configure Mobile Services\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Dashboard**, and make a note of the **Mobile Service URL** value.\n\n2. Register your app with one or more of the following authentication providers:\n   * [Google](./\nmobile-services-how-to-register-google-authentication.md)\n   * [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n   * [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n   * [Microsoft](./\nmobile-services-how-to-register-microsoft-authentication.md)\n   * [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md). \n   \n    Make a note of the client identity and client secret values generated by the provider. Do not distribute or share the client secret.\n\n3. Back in the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Identity** > your identity provider settings, then enter the client ID and secret value from your provider. \n \nYou've now configured both your app and your mobile service to work with your auth provider. You may optionally repeat all these steps for each additional identity provider you'd like to support.\n\n> [AZURE.IMPORTANT] Verify that you've set the correct redirect URI on your identity provider's developer site. As described in the linked instructions for each provider above, the redirect URI may be different for a .NET backend service vs. for a JavaScript backend service. An incorrectly configured redirect URI may result in the login screen not being displayed properly and the app malfunctioning in unexpected ways.\n \n\n## <a name=\"permissions\"></a>Restrict permissions to authenticated users\n\n\nTo secure your endpoints, you must restrict access to only authenticated clients. \n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), navigate to your mobile service, then click  **Data** > your table name (**TodoItem**) > **Permissions**. \n\n2. Set all of the table operation permissions to **Only authenticated users**. \n\n\t This ensures that all operations against the table require an authenticated user, which is required for this tutorial. You can set different permissions on each operations to support your specific scenario.   \n\n\n3. In the app directory, launch one of the following command files from the **server** subfolder.\n\n\t+ **launch-windows** (Windows computers) \n\t+ **launch-mac.command** (Mac OS X computers)\n\t+ **launch-linux.sh** (Linux computers)\n\n\t>[AZURE.NOTE]On a Windows computer, type `R` when PowerShell asks you to confirm that you want to run the script. Your web browser might warn you to not run the script because it was downloaded from the internet. When this happens, you must request that the browser proceed to load the script.\n\n\tThis starts a web server on your local computer to host the new app.\n\n2. Open the URL <a href=\"http://localhost:8000/\" target=\"_blank\">http://localhost:8000/</a> in a web browser to start the app. \n\n\tThe data fails to load. This happens because the app attempts to access Mobile Services as an unauthenticated user, but the _TodoItem_ table now requires authentication.\n\n3. (Optional) Open the script debugger for your web browser and reload the page. Verify that an access denied error occurs. \n\nNext, you will update the app to allow authentication before requesting resources from the mobile service.\n\n## <a name=\"add-authentication\"></a>Add authentication to the app\n\n>[AZURE.NOTE]Because the login is performed in a popup, you should invoke the **login** method from a button's click event. Otherwise, many browsers will suppress the login window.\n\n1. Open the project file index.html, locate the H1 element and under it add the following code snippet:\n\n\t    <div id=\"logged-in\">\n            You are logged in as <span id=\"login-name\"></span>.\n            <button id=\"log-out\">Log out</button>\n        </div>\n        <div id=\"logged-out\">\n            You are not logged in.\n            <button>Log in</button>\n        </div>\n\n\tThis enables you to login to Mobile Services from the page.\n\n2. In the page.js file, locate the line of code at the very bottom of the file that calls to the refreshTodoItems function, and replace it with the following code: \n\t\n\t\tfunction refreshAuthDisplay() {\n\t\t\tvar isLoggedIn = client.currentUser !== null;\n\t\t\t$(\"#logged-in\").toggle(isLoggedIn);\n\t\t\t$(\"#logged-out\").toggle(!isLoggedIn);\n\n\t\t\tif (isLoggedIn) {\n\t\t\t\t$(\"#login-name\").text(client.currentUser.userId);\n\t\t\t\trefreshTodoItems();\n\t\t\t}\n\t\t}\n\n\t\tfunction logIn() {\n\t\t\tclient.login(\"facebook\").then(refreshAuthDisplay, function(error){\n\t\t\t\talert(error);\n\t\t\t});\n\t\t}\n\n\t\tfunction logOut() {\n\t\t\tclient.logout();\n\t\t\trefreshAuthDisplay();\n\t\t\t$('#summary').html('<strong>You must login to access data.</strong>');\n\t\t}\n\n\t\t// On page init, fetch the data and set up event handlers\n\t\t$(function () {\n\t\t\trefreshAuthDisplay();\n\t\t\t$('#summary').html('<strong>You must login to access data.</strong>');\t\t    \n\t\t\t$(\"#logged-out button\").click(logIn);\n\t\t\t$(\"#logged-in button\").click(logOut);\n\t\t});\n\n    This creates a set of functions to handle the authentication process. The user is authenticated by using a Facebook login. If you are using an identity provider other than Facebook, change the value passed to the **login** method above to one of the following: *microsoftaccount*, *facebook*, *twitter*, *google*, or *aad*.\n\n\t>[AZURE.IMPORTANT]In a PhoneGap app, you must also add the following plugins to the project:\n\t><ul><li><code>phonegap plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git</code></li>\n\t><li><code>phonegap plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git</code></li></ul>\n\n9. Go back to the browser where your app is running, and refresh the page. \n\n\tWhen you are successfully logged-in, the app should run without errors, and you should be able to query Mobile Services and make updates to data.\n\n\t>[AZURE.NOTE]When you use Internet Explorer, you may receive the error after login: <code>Cannot reach window opener. It may be on a different Internet Explorer zone</code>. This occurs because the pop-up runs in a different security zone (internet) from localhost (intranet). This only affects apps during development using localhost. As a workaround, open the **Security** tab of **Internet Options**, click **Local Intranet**, click **Sites**, and disable **Automatically detect intranet network**. Remember to change this setting back when you are done testing.\n\n## <a name=\"next-steps\"> </a>Next steps\n\nIn the next tutorial, [Authorize users with scripts], you will take the user ID value provided by Mobile Services based on an authenticated user and use it to filter the data returned by Mobile Services. Learn more about how to use Mobile Services with HTML/JavaScript in [Mobile Services HTML/JavaScript How-to Conceptual Reference]\n\n<!-- Anchors. -->\n[Register your app for authentication and configure Mobile Services]: #register\n[Restrict table permissions to authenticated users]: #permissions\n[Add authentication to the app]: #add-authentication\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n\n[4]: ./media/mobile-services-html-get-started-users/mobile-services-selection.png\n[5]: ./media/mobile-services-html-get-started-users/mobile-service-uri.png\n[13]: ./media/mobile-services-html-get-started-users/mobile-identity-tab.png\n[14]: ./media/mobile-services-html-get-started-users/mobile-portal-data-tables.png\n[15]: ./media/mobile-services-html-get-started-users/mobile-portal-change-table-perms.png\n\n<!-- URLs. -->\n[Get started with Mobile Services]: mobile-services-html-get-started.md\n[Authorize users with scripts]: mobile-services-javascript-backend-service-side-authorization.md\n[Mobile Services HTML/JavaScript How-to Conceptual Reference]: mobile-services-html-how-to-use-client-library.md\n \n"
  },
  {
    "path": "docs/mobile-services-html-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Azure Mobile Services for HTML/JavaScript apps | Microsoft Azure\"\n\tdescription=\"Follow this tutorial to get started using Azure Mobile Services for HTML development.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-html5\"\n\tms.devlang=\"javascript\"\n\tms.topic=\"get-started-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n\n# <a name=\"getting-started\"> </a>Get started with Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n&nbsp;\n\n>[AZURE.TIP] This topic shows you how to get started with Mobile Services as quickly as possible. It is designed for customers new to this Azure feature. If you are already familiar with Mobile Services or are looking for more in-depth information, please select a topic from the left-navigation or see the relevant links in [Next steps](#next-steps).\n\n\n## Overview\n\nThis tutorial shows you how to add a cloud-based backend service to an HTML app using Azure Mobile Services. In this tutorial, you will create both a new mobile service and a simple *To do list* app that stores app data in the new mobile service. You can view the following video version of this tutorial.\n\n> [AZURE.VIDEO mobile-get-started-html]\n\nA screenshot from the completed app is below:\n\n![][0]\n\nCompleting this tutorial is a prerequisite for all other Mobile Services tutorials for HTML apps. For a PhoneGap/Cordova app, see the the [PhoneGap/Cordova version](mobile-services-javascript-backend-phonegap-get-started.md) of this tutorial.\n\n## Prerequisites\n\nThe following are required to complete this tutorial:\n\n+ You must have one of the following web servers running on your local computer:\n\n\t+  **On Windows**: IIS Express. IIS Express is installed by the [Microsoft Web Platform Installer].\n\t+  **On MacOS X**: Python, which should already be installed.\n\t+  **On Linux**: Python. You must install the [latest version of Python].\n\n\tYou can use any web server to host the app, but these are the web servers that are supported by the downloaded scripts.  \n\n+ A web browser that supports HTML5.\n+ An Azure account. If you don't have an account, you can create a free trial account in just a couple of minutes. For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=A0E0E5C02&amp;returnurl=http%3A%2F%2Fazure.microsoft.com%2Fen-us%2Fdevelop%2Fmobile%2Ftutorials%2Fget-started-html%2F\"%20target=\"_blank).\n\n\n## <a name=\"create-new-service\"> </a>Create a new mobile service\n\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** dialog, select **Create a free 20 MB SQL Database**, select **JavaScript** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t>[AZURE.NOTE]As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n\n## Create a new HTML app\n\nOnce you have created your mobile service, you can follow an easy quickstart in the Azure classic portal to either create a new app or modify an existing app to connect to your mobile service.\n\nIn this section you will create a new HTML app that is connected to your mobile service.\n\n1.  In the [Azure classic portal], click **Mobile Services**, and then click the mobile service that you just created.\n\n\n2. In the quickstart tab, click **Windows** under **Choose platform** and expand **Create a new HTML app**.\n\n   \t![][6]\n\n   \tThis displays the three easy steps to create and host an HTML app connected to your mobile service.\n\n  \t![][7]\n\n3. Click **Create TodoItems table** to create a table to store app data.\n\n4. Under **Download and run your app**, click **Download**.\n\n  \tThis downloads the website files for the sample _To do list_ application that is connected to your mobile service. Save the compressed file to your local computer, and make a note of where you save it.\n\n5. In the **Configure** tab, verify that `localhost` is already listed in the **Allow requests from host names** list under **Cross-Origin Resource Sharing (CORS)**. If it's not, type `localhost` in the **Host name** field and then click **Save**.\n\n  \t![][9]\n\n\t> [AZURE.IMPORTANT] If you deploy the quickstart app to a web server other than localhost, you must add the host name of the web server to the **Allow requests from host names** list. For more information, see [Cross-origin resource sharing](http://msdn.microsoft.com/library/windowsazure/dn155871.aspx).\n\n## Host and run your HTML app\n\nThe final stage of this tutorial is to host and run your new app on your local computer.\n\n1. Browse to the location where you saved the compressed project files, expand the files on your computer, and launch one of the following command files from the **server** subfolder.\n\n\t+ **launch-windows** (Windows computers)\n\t+ **launch-mac.command** (Mac OS X computers)\n\t+ **launch-linux.sh** (Linux computers)\n\n\t> [AZURE.NOTE] On a Windows computer, type `R` when PowerShell asks you to confirm that you want to run the script. Your web browser might warn you to not run the script because it was downloaded from the internet. When this happens, you must request that the browser proceed to load the script.\n\n\tThis starts a web server on your local computer to host the new app.\n\n2. Open the URL <a href=\"http://localhost:8000/\" target=\"_blank\">http://localhost:8000/</a> in a web browser to start the app.\n\n3. In the app, type meaningful text, such as _Complete the tutorial_, in **Enter new task**, and then click **Add**.\n\n   \t![][10]\n\n   \tThis sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the TodoItem table. Items stored in the table are returned by the mobile service, and the data is displayed in the second column in the app.\n\n\t> [AZURE.NOTE] You can review the code that accesses your mobile service to query and insert data, which is found in the page.js file.\n\n4. Back in the [Azure classic portal], click the **Data** tab and then click the **TodoItems** table.\n\n   \t![][11]\n\n   \tThis lets you browse the data inserted by the app into the table.\n\n   \t![][12]\n\n## <a name=\"next-steps\"> </a>Next Steps\nNow that you have completed the quickstart, learn how to perform additional important tasks in Mobile Services:\n\n* **[Add authentication to your app]**  \n  Learn how to authenticate users of your app with an identity provider.\n\n* **[Mobile Services HTML/JavaScript How-to Conceptual Reference]**  \n  Learn more about how to use Mobile Services with HTML/JavaScript\n\n<!-- Anchors. -->\n[Getting started with Mobile Services]:#getting-started\n[Create a new mobile service]:#create-new-service\n[Define the mobile service instance]:#define-mobile-service-instance\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n[0]: ./media/mobile-services-html-get-started/mobile-quickstart-completed-html.png\n\n[6]: ./media/mobile-services-html-get-started/mobile-portal-quickstart-html.png\n[7]: ./media/mobile-services-html-get-started/mobile-quickstart-steps-html.png\n\n[9]: ./media/mobile-services-html-get-started/mobile-services-set-cors-localhost.png\n[10]: ./media/mobile-services-html-get-started/mobile-quickstart-startup-html.png\n[11]: ./media/mobile-services-html-get-started/mobile-data-tab.png\n[12]: ./media/mobile-services-html-get-started/mobile-data-browse.png\n\n\n<!-- URLs. -->\n[Add authentication to your app]: mobile-services-html-get-started-users.md\n\n[Azure classic portal]: https://manage.windowsazure.com/\n[Microsoft Web Platform Installer]:  http://go.microsoft.com/fwlink/p/?LinkId=286333\n[latest version of Python]: http://go.microsoft.com/fwlink/p/?LinkId=286342\n[Mobile Services HTML/JavaScript How-to Conceptual Reference]: mobile-services-html-how-to-use-client-library.md\n[Cross-origin resource sharing]: http://msdn.microsoft.com/library/azure/dn155871.aspx\n"
  },
  {
    "path": "docs/mobile-services-html-how-to-use-client-library.md",
    "content": "<properties\n\tpageTitle=\"How to use an HTML client with Azure Mobile Services | Microsoft Azure\"\n\tdescription=\"Learn how to use an HTML client for Azure Mobile Services.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-html\"\n\tms.devlang=\"javascript\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# How to use an HTML/JavaScript client for Azure Mobile Services\n\n> [AZURE.SELECTOR]\n- [Android](mobile-services-android-how-to-use-client-library.md)\n- [HTML/JavaScript](mobile-services-html-how-to-use-client-library.md)\n- [iOS](mobile-services-ios-how-to-use-client-library.md)\n- [Managed (Windows/Xamarin)](mobile-services-dotnet-how-to-use-client-library.md)\n\n## Overview\n\nThis guide shows you how to perform common scenarios using an HTML/JavaScript client for Azure Mobile Services, which includes Windows Store JavaScript and PhoneGap/Cordova apps. The scenarios covered include querying for data, inserting, updating, and deleting data, authenticating users, and handling errors. If you are new to Mobile Services, you should consider first completing the [Mobile Services quickstart](mobile-services-html-get-started.md). The quickstart tutorial helps you configure your account and create your first mobile service.\n\n## <a name=\"what-is\"></a>What is Mobile Services\n\nAzure Mobile Services is a highly scalable mobile application development platform that lets you add enhanced functionality to your mobile device apps by using Azure.\n\nWith Mobile Services you can:\n\n+ **Build native and cross platform apps** - Connect your iOS, Android, Windows, or cross-platform Xamarin or Cordova (Phonegap) apps to your backend mobile service using native SDKs.  \n+ **Send push notifications to your users** - Send push notifications to your users of your app.\n+ **Authenticate your users** - Leverage popular identity providers like Facebook and Twitter to authenticate your app users.\n+ **Store data in the cloud** - Store user data in a SQL Database (by default) or in Mongo DB, DocumentDB, Azure Tables, or Azure Blobs.\n+ **Build offline-ready apps with sync** - Make your apps work offline and use Mobile Services to sync data in the background.\n+ **Monitor and scale your apps** - Monitor app usage and scale your backend as demand grows.\n\n## <a name=\"concepts\"> </a>Mobile Services Concepts\n\nThe following are important features and concepts in the Mobile Services:\n\n+ **Application key:** a unique value that is used to limit access to your mobile service from random clients; this \"key\" is not a security token and is not used to authenticate users of your app.    \n+ **Backend:** the mobile service instance that supports your app. A mobile service is implemented either as an ASP.NET Web API project (*.NET backend* ) or as a Node.js project (*JavaScript backend*).\n+ **Identity provider:** an external service, trusted by Mobile Services, that authenticates your app's users. Supported providers include: Facebook, Twitter, Google, Microsoft Account, and Azure Active Directory.\n+ **Push notification:** Service-initiated message that is sent to a registered device or user using Azure Notification Hubs.\n+ **Scale:** The ability to add, for an additional cost, more processing power, performance, and storage as your app becomes more popular.\n+ **Scheduled job:** Custom code that is run either on a pre-determined schedule or on-demand.\n\nFor more information, see [Mobile Services Concepts](./\nmobile-services-concepts-links.md).\n\n## <a name=\"create-client\"></a>How to: Create the Mobile Services client\n\nThe way that you add a reference to the Mobile Services client depends on your app platform, which includes the following:\n\n- For a web-based application, open the HTML file and add the following to the script references for the page:\n\n        <script src=\"http://ajax.aspnetcdn.com/ajax/mobileservices/MobileServices.Web-1.2.7.min.js\"></script>\n\n- For a Windows Store app written in JavaScript/HTML, add the **WindowsAzure.MobileServices.WinJS** NuGet package to your project.\n\n- For a PhoneGap or Cordova app, add the [Mobile Services plugin](https://github.com/Azure/azure-mobile-services-cordova) to your project. This plugin supports [push notifications](#push-notifications).\n\nIn the editor, open or create a JavaScript file, and add the following code that defines the `MobileServiceClient` variable, and supply the application URL and application key from the mobile service in the `MobileServiceClient` constructor, in that order.\n\n\tvar MobileServiceClient = WindowsAzure.MobileServiceClient;\n    var client = new MobileServiceClient('AppUrl', 'AppKey');\n\nYou must replace the placeholder `AppUrl` with the application URL of your mobile service and `AppKey` with the application key, which you obtain from the [Azure classic portal](http://manage.windowsazure.com/).\n\n>[AZURE.IMPORTANT]The application key is intended to filter-out random request against your mobile service, and it is distributed with the application. Because this key is not encrypted, it cannot be considered secure. To truly secure your mobile service data, you must instead authenticate users before allowing access. For more information, see [How to: Authenticate users](#authentication).\n\n## <a name=\"querying\"></a>How to: Query data from a mobile service\n\nAll of the code that accesses or modifies data in the SQL Database table calls functions on the `MobileServiceTable` object. You get a reference to the table by calling the `getTable()` function on an instance of the `MobileServiceClient`.\n\n    var todoItemTable = client.getTable('todoitem');\n\n\n### <a name=\"filtering\"></a>How to: Filter returned data\n\nThe following code illustrates how to filter data by including a `where` clause in a query. It returns all items from `todoItemTable` whose complete field is equal to `false`. `todoItemTable` is the reference to the mobile service table that we created previously. The where function applies a row filtering predicate to the query against the table. It accepts as its argument a JSON object or function that defines the row filter, and returns a query that can be further composed.\n\n\tvar query = todoItemTable.where({\n\t    complete: false\n\t}).read().done(function (results) {\n\t    alert(JSON.stringify(results));\n\t}, function (err) {\n\t    alert(\"Error: \" + err);\n\t});\n\nBy calling `where` on the Query object and passing an object as a parameter, we are  instructing Mobile Services to return only the rows whose `complete` column contains the `false` value. Also, look at the request URI below, and notice that we are modifying the query string  itself:\n\n\tGET /tables/todoitem?$filter=(complete+eq+false) HTTP/1.1\n\nYou can view the URI of the request sent to the mobile service by using message inspection software, such as browser developer tools or Fiddler.\n\nThis request would normally be translated roughly into the following SQL query on the server side:\n\n\tSELECT *\n\tFROM TodoItem\n\tWHERE ISNULL(complete, 0) = 0\n\nThe object which is passed to the `where` method can have an arbitrary number of parameters, and they'll all be interpreted as AND clauses to the query. For example, the line below:\n\n\tquery.where({\n\t   complete: false,\n\t   assignee: \"david\",\n\t   difficulty: \"medium\"\n\t}).read().done(function (results) {\n\t   alert(JSON.stringify(results));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t});\n\nWould be roughly translated (for the same request shown before) as\n\n\tSELECT *\n\tFROM TodoItem\n\tWHERE ISNULL(complete, 0) = 0\n\t      AND assignee = 'david'\n\t      AND difficulty = 'medium'\n\nThe `where` statement above and the SQL query above find incomplete items assigned to \"david\" of \"medium\" difficulty.\n\nThere is, however, another way to write the same query. A `.where` call on the Query object will add an `AND` expression to the `WHERE` clause, so we could have written that in three lines instead:\n\n\tquery.where({\n\t   complete: false\n\t});\n\tquery.where({\n\t   assignee: \"david\"\n\t});\n\tquery.where({\n\t   difficulty: \"medium\"\n\t});\n\nOr using the fluent API:\n\n\tquery.where({\n\t   complete: false\n\t})\n\t   .where({\n\t   assignee: \"david\"\n\t})\n\t   .where({\n\t   difficulty: \"medium\"\n\t});\n\nThe two methods are equivalent and may be used interchangeably. All the `where` calls so far take an object with some parameters, and are compared for equality against the data from the database. There is, however, another overload for the query method, which takes a function instead of the object. In this function we can then write more complex expressions, using operators such as inequality and other relational operations. In these functions, the keyword `this` binds to the server object.\n\nThe body of the function is translated into an Open Data Protocol (OData) boolean expression which is passed to a query string parameter. It is possible to pass in a function that takes no parameters, like so:\n\n    query.where(function () {\n       return this.assignee == \"david\" && (this.difficulty == \"medium\" || this.difficulty == \"low\");\n    }).read().done(function (results) {\n       alert(JSON.stringify(results));\n    }, function (err) {\n       alert(\"Error: \" + err);\n    });\n\n\nIf passing in a function with parameters, any arguments after the `where` clause are bound to the function parameters in order. Any objects which come from the outside of the function scope MUST be passed as parameters - the function cannot capture any external variables. In the next two examples, the argument \"david\" is bound to the parameter `name` and in the first example, the argument \"medium\" is also bound to the parameter `level`. Also, the function must consist of a single `return` statement with a supported expression, like so:\n\n\t query.where(function (name, level) {\n\t    return this.assignee == name && this.difficulty == level;\n\t }, \"david\", \"medium\").read().done(function (results) {\n\t    alert(JSON.stringify(results));\n\t }, function (err) {\n\t    alert(\"Error: \" + err);\n\t });\n\nSo, as long as we follow the rules, we can add more complex filters to our database queries, like so:\n\n    query.where(function (name) {\n       return this.assignee == name &&\n          (this.difficulty == \"medium\" || this.difficulty == \"low\");\n    }, \"david\").read().done(function (results) {\n       alert(JSON.stringify(results));\n    }, function (err) {\n       alert(\"Error: \" + err);\n    });\n\nIt is possible to combine `where` with `orderBy`, `take`, and `skip`. See the next section for details.\n\n### <a name=\"sorting\"></a>How to: Sort returned data\n\nThe following code illustrates how to sort data by including an `orderBy` or `orderByDescending` function in the query. It returns items from `todoItemTable` sorted ascending by the `text` field. By default, the server returns only the first 50 elements.\n\n> [AZURE.NOTE] A server-driven page size us used by default to prevent all elements from being returned. This keeps default requests for large data sets from negatively impacting the service.\nYou may increase the number of items to be returned by calling `take` as described in the next section. `todoItemTable` is the reference to the mobile service table that we created previously.\n\n\tvar ascendingSortedTable = todoItemTable.orderBy(\"text\").read().done(function (results) {\n\t   alert(JSON.stringify(results));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t});\n\n\tvar descendingSortedTable = todoItemTable.orderByDescending(\"text\").read().done(function (results) {\n\t   alert(JSON.stringify(results));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t});\n\n\tvar descendingSortedTable = todoItemTable.orderBy(\"text\").orderByDescending(\"text\").read().done(function (results) {\n\t   alert(JSON.stringify(results));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t});\n\n### <a name=\"paging\"></a>How to: Return data in pages\n\nBy default, Mobile Services only returns 50 rows in a given request, unless the client explicitly asks for more data in the response. The following code shows how to implement paging in returned data by using the `take` and `skip` clauses in the query.  The following query, when executed, returns the top three items in the table.\n\n\tvar query = todoItemTable.take(3).read().done(function (results) {\n\t   alert(JSON.stringify(results));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t});\n\nNotice that the `take(3)` method was translated into the query option `$top=3` in the query URI.\n\nThe following revised query skips the first three results and returns the next three after that. This is effectively the second \"page\" of data, where the page size is three items.\n\n\tvar query = todoItemTable.skip(3).take(3).read().done(function (results) {\n\t   alert(JSON.stringify(results));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t});\n\nAgain, you can view the URI of the request sent to the mobile service. Notice that the `skip(3)` method was translated into the query option `$skip=3` in the query URI.\n\nThis is a simplified scenario of passing hard-coded paging values to the `take` and `skip` functions. In a real-world app, you can use queries similar to the above with a pager control or comparable UI to let users navigate to previous and next pages.\n\n### <a name=\"selecting\"></a>How to: Select specific columns\n\nYou can specify which set of properties to include in the results by adding a `select` clause to your query. For example, the following code returns the `id`, `complete`, and `text` properties from each row in the `todoItemTable`:\n\n\tvar query = todoItemTable.select(\"id\", \"complete\", \"text\").read().done(function (results) {\n\t   alert(JSON.stringify(results));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t})\n\nHere the parameters to the select function are the names of the table's columns that you want to return.\n\n\nAll the functions described so far are additive, so we can just keep calling them and we'll each time affect more of the query. One more example:\n\n    query.where({\n       complete: false\n    })\n       .select('id', 'assignee')\n       .orderBy('assignee')\n       .take(10)\n       .read().done(function (results) {\n       alert(JSON.stringify(results));\n    }, function (err) {\n       alert(\"Error: \" + err);\n\n### <a name=\"lookingup\"></a>How to: Look up data by ID\n\nThe `lookup` function takes only the `id` value, and returns the object from the database with that ID. Database tables are created with either an integer or string `id` column. A string `id` column is the default.\n\n\ttodoItemTable.lookup(\"37BBF396-11F0-4B39-85C8-B319C729AF6D\").done(function (result) {\n\t   alert(JSON.stringify(result));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t})\n\n## <a name=\"odata-query\"></a>Execute an OData query operation\n\nMobile Services uses the OData query URI conventions for composing and executing REST queries.  Not all OData queries can be composed by using the built-in query functions, especially complex filter operations like searching for a substring in a property. For these kinds of complex queries, you can pass any valid OData query option string to the `read` function, as follows:\n\n\tfunction refreshTodoItems() {\n\t    todoItemTable.read(\"$filter=substringof('search_text',text)\").then(function(items) {\n\t        var itemElements = $.map(items, createUiForTodoItem);\n\t        $(\"#todo-items\").empty().append(itemElements);\n\t        $(\"#no-items\").toggle(items.length === 0);\n\t    }, handleError);\n\t}\n\n>[AZURE.NOTE]When you provide a raw OData query option string into the `read` function, you cannot also use the query builder methods in the same query. In this case, you must compose your whole query as an OData query string. For more information on OData system query options, see the [OData system query options reference].\n\n## <a name=\"inserting\"></a>How to: Insert data into a mobile service\n\nThe following code illustrates how to insert new rows into a table. The client requests that a row of data be inserted by sending a POST request to the mobile service. The request body contains the data to be inserted, as a JSON object.\n\n\ttodoItemTable.insert({\n\t   text: \"New Item\",\n\t   complete: false\n\t})\n\nThis inserts data from the supplied JSON object into the table. You can also specify a callback function to be invoked when the insertion is complete:\n\n\ttodoItemTable.insert({\n\t   text: \"New Item\",\n\t   complete: false\n\t}).done(function (result) {\n\t   alert(JSON.stringify(result));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t});\n\n### Working with ID values\n\nMobile Services supports unique custom string values for the table's **id** column. This allows applications to use custom values such as email addresses or user names for the ID. For example, the following code inserts a new item as a JSON object, where the unique ID is an email address:\n\n\ttodoItemTable.insert({\n\t   id: \"myemail@domain.com\",\n\t   text: \"New Item\",\n\t   complete: false\n\t});\n\nString IDs provide you with the following benefits:\n\n+ IDs are generated without making a round-trip to the database.\n+ Records are easier to merge from different tables or databases.\n+ IDs values can integrate better with an application's logic.\n\nWhen a string ID value is not already set on an inserted record, Mobile Services generates a unique value for the ID. For more information on how to generate your own ID values, either on the client or in a .NET backend, see [How to: Generate unique ID values](mobile-services-how-to-use-server-scripts.md#generate-guids).\n\nYou can also use integer IDs for your tables. To use an integer ID, you must create your table with the `mobile table create` command using the `--integerId` option. This command is used with the Command-line Interface (CLI) for Azure. For more information on using the CLI, see [CLI to manage Mobile Services tables](https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-command-line-tools/#Mobile_Tables).\n\n## <a name=\"modifying\"></a>How to: Modify data in a mobile service\n\nThe following code illustrates how to update data in a table. The client requests that a row of data be updated by sending a PATCH request to the mobile service. The request body contains the specific fields to be updated, as a JSON object. It updates an existing item in the table `todoItemTable`.\n\n\ttodoItemTable.update({\n\t   id: idToUpdate,\n\t   text: newText\n\t})\n\nThe first parameter specifies the instance to update in the table, as specified by its ID.\n\nYou can also specify a callback function to be invoked when the update is complete:\n\n\ttodoItemTable.update({\n\t   id: idToUpdate,\n\t   text: newText\n\t}).done(function (result) {\n\t   alert(JSON.stringify(result));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t});\n\n## <a name=\"deleting\"></a>How to: Delete data in a mobile service\n\nThe following code illustrates how to delete data from a table. The client requests that a row of data be deleted by sending a DELETE request to the mobile service. It deletes an existing item in the table todoItemTable.\n\n\ttodoItemTable.del({\n\t   id: idToDelete\n\t})\n\nThe first parameter specifies the instance to delete in the table, as specified by its ID.\n\nYou can also specify a callback function to be invoked when the delete is complete:\n\n\ttodoItemTable.del({\n\t   id: idToDelete\n\t}).done(function () {\n\t   /* Do something */\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t});\n\n## <a name=\"binding\"></a>How to: Display data in the user interface\n\nThis section shows how to display returned data objects using UI elements. To query items in `todoItemTable` and display it in a very simple list, you can run the following example code. No selection, filtering or sorting of any kind is done.\n\n\tvar query = todoItemTable;\n\n\tquery.read().then(function (todoItems) {\n\t   // The space specified by 'placeToInsert' is an unordered list element <ul> ... </ul>\n\t   var listOfItems = document.getElementById('placeToInsert');\n\t   for (var i = 0; i < todoItems.length; i++) {\n\t      var li = document.createElement('li');\n\t      var div = document.createElement('div');\n\t      div.innerText = todoItems[i].text;\n\t      li.appendChild(div);\n\t      listOfItems.appendChild(li);\n\t   }\n\t}).read().done(function (results) {\n\t   alert(JSON.stringify(results));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t});\n\nIn a Windows Store app, the results of a query can be used to create a [WinJS.Binding.List] object, which can be bound as the data source for a [ListView] object. For more information, see [Data binding (Windows Store apps using JavaScript and HTML)].\n\n## <a name=\"custom-api\"></a>How to: Call a custom API\n\nA custom API enables you to define custom endpoints that expose server functionality that does not map to an insert, update, delete, or read operation. By using a custom API, you can have more control over messaging, including reading and setting HTTP message headers and defining a message body format other than JSON. For an example of how to create a custom API in your mobile service, see [How to: define a custom API endpoint](mobile-services-dotnet-backend-define-custom-api.md).\n\nYou call a custom API from the client by calling the [invokeApi](https://github.com/Azure/azure-mobile-services/blob/master/sdk/Javascript/src/MobileServiceClient.js#L337) method on **MobileServiceClient**. For example, the following line of code sends a POST request to the **completeAll** API on the mobile service:\n\n    client.invokeApi(\"completeall\", {\n        body: null,\n        method: \"post\"\n    }).done(function (results) {\n        var message = results.result.count + \" item(s) marked as complete.\";\n        alert(message);\n        refreshTodoItems();\n    }, function(error) {\n        alert(error.message);\n    });\n\n\nFor more realistic examples and a more a complete discussion of **invokeApi**, see [Custom API in Azure Mobile Services Client SDKs](http://blogs.msdn.com/b/carlosfigueira/archive/2013/06/19/custom-api-in-azure-mobile-services-client-sdks.aspx).\n\n## <a name=\"authentication\"></a>How to: Authenticate users\n\nMobile Services supports authenticating and authorizing app users using a variety of external identity providers: Facebook, Google, Microsoft Account, and Twitter. You can set permissions on tables to restrict access for specific operations to only authenticated users. You can also use the identity of authenticated users to implement authorization rules in server scripts. For more information, see the [Get started with authentication] tutorial.\n\n>[AZURE.NOTE] When using authentication in a PhoneGap or Cordova app, you must also add the following plugins to the project:\n>\n>+ https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git\n>+ https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git\n\n\nTwo authentication flows are supported: a _server flow_ and a _client flow_. The server flow provides the simplest authentication experience, as it relies on the provider's web authentication interface. The client flow allows for deeper integration with device-specific capabilities such as single-sign-on as it relies on provider-specific device-specific SDKs.\n\n### Server flow\nTo have Mobile Services manage the authentication process in your Windows Store or HTML5 app,\nyou must register your app with your identity provider. Then in your mobile service, you need to configure the application ID and secret provided by your provider. For more information, see the tutorial [Add authentication to your app](mobile-services-html-get-started-users.md).\n\nOnce you have registered your identity provider, simply call the [LoginAsync method] with the [MobileServiceAuthenticationProvider] value of your provider. For example, to login with Facebook use the following code.\n\n\tclient.login(\"facebook\").done(function (results) {\n\t     alert(\"You are now logged in as: \" + results.userId);\n\t}, function (err) {\n\t     alert(\"Error: \" + err);\n\t});\n\nIf you are using an identity provider other than Facebook, change the value passed to the `login` method above to one of the following: `microsoftaccount`, `facebook`, `twitter`, `google`, or `windowsazureactivedirectory`.\n\nIn this case, Mobile Services manages the OAuth 2.0 authentication flow by displaying the login page of the selected provider and generating a Mobile Services authentication token after successful login with the identity provider. The [login] function, when complete, returns a JSON object (**user**) that exposes both the user ID and Mobile Services authentication token in the **userId** and **authenticationToken** fields, respectively. This token can be cached and re-used until it expires. For more information, see [Caching the authentication token].\n\n### Client flow\nYour app can also independently contact the identity provider and then provide the returned token to Mobile Services for authentication. This client flow enables you to provide a single sign-in experience for users or to retrieve additional user data from the identity provider.\n\n#### Facebook/Google SDK basic example\n\nThis example uses Facebook client SDK for authentication:\n\n\tclient.login(\n\t     \"facebook\",\n\t     {\"access_token\": token})\n\t.done(function (results) {\n\t     alert(\"You are now logged in as: \" + results.userId);\n\t}, function (err) {\n\t     alert(\"Error: \" + err);\n\t});\n\nThis example assumes that the token provided by the respective provider SDK is stored in the `token` variable.\nTwitter cannot be used for client authentication at this time.\n\n#### Microsoft Account basic example\nThe following example uses the Live SDK, which supports single-sign-on for Windows Store apps by using Microsoft Account:\n\n\tWL.login({ scope: \"wl.basic\"}).then(function (result) {\n\t      client.login(\n\t            \"microsoftaccount\",\n\t            {\"authenticationToken\": result.session.authentication_token})\n\t      .done(function(results){\n\t            alert(\"You are now logged in as: \" + results.userId);\n\t      },\n\t      function(error){\n\t            alert(\"Error: \" + err);\n\t      });\n\t});\n\nThis simplified example gets a token from Live Connect, which is supplied to Mobile Services by calling the [login] function.\n\n\n#### Microsoft Account complete example\n\nThe following example shows how to use the Live SDK with WinJS APIs to provide an enhanced single-sign-on experience:\n\n\t// Set the mobileClient variable to client variable generated by the tooling.\n\tvar mobileClient = <yourClient>;\n\n\tvar session = null;\n\tvar login = function () {\n\t\treturn new WinJS.Promise(function (complete) {\n\t\t\tWL.login({ scope: \"wl.basic\" }).then(function (result) {\n\t\t\t\tsession = result.session;\n\n\t\t\t\tWinJS.Promise.join([\n\t\t\t\t\tWL.api({ path: \"me\", method: \"GET\" }),\n\t\t\t\t\tmobileClient.login(result.session.authentication_token)\n\t\t\t\t]).done(function (results) {\n\t\t\t\t\t// Build the welcome message from the Microsoft account info.\n\t\t\t\t\tvar profile = results[0];\n\t\t\t\t\tvar title = \"Welcome \" + profile.first_name + \"!\";\n\t\t\t\t\tvar message = \"You are now logged in as: \"\n\t\t\t\t\t\t+ mobileClient.currentUser.userId;\n\t\t\t\t\tvar dialog = new Windows.UI.Popups.MessageDialog(message, title);\n\t\t\t\t\tdialog.showAsync().then(function () {\n\t\t\t\t\t\t// Reload items from the mobile service.\n\t\t\t\t\t\trefreshTodoItems();\n\t\t\t\t\t}).done(complete);\n\n\t\t\t\t}, function (error) {\n\n\t\t\t\t});\n\t\t\t}, function (error) {\n\t\t\t\tsession = null;\n\t\t\t\tvar dialog = new Windows.UI.Popups.MessageDialog(\"You must log in.\", \"Login Required\");\n\t\t\t\tdialog.showAsync().done(complete);\n\t\t\t});\n\t\t});\n\t}\n\n\tvar authenticate = function () {\n\t\t// Block until sign-in is successful.\n\t\tlogin().then(function () {\n\t\t\tif (session === null) {\n\t\t\t\t// Authentication failed, try again.\n\t\t\t\tauthenticate();\n\t\t\t}\n\t\t});\n\t}\n\n\t// Initialize the Live client.\n\tWL.init({\n\t\tredirect_uri: mobileClient.applicationUrl\n\t});\n\n\t// Start the sign-in process.\n\tauthenticate();\n\nThis initializes the Live Connect client, sends a new login request to Microsoft account, sends the returned authentication token to Mobile Services, and then displays information about the signed-in user. The app does not start until authentication succeeds.\n<!--- //this guidance may be bad from an XSS vulnerability standpoint. We need to find better guidance for this\n### Caching the authentication token\nIn some cases, the call to the login method can be avoided after the first time the user authenticates. We can use [sessionStorage] or [localStorage] to cache the current user identity the first time they log in and every subsequent time we check whether we already have the user identity in our cache. If the cache is empty or calls fail (meaning the current login session has expired), we still need to go through the login process.\n\n    // After logging in\n    sessionStorage.loggedInUser = JSON.stringify(client.currentUser);\n\n    // Log in\n    if (sessionStorage.loggedInUser) {\n       client.currentUser = JSON.parse(sessionStorage.loggedInUser);\n    } else {\n       // Regular login flow\n   }\n\n     // Log out\n    client.logout();\n    sessionStorage.loggedInUser = null;\n-->\n\n## <a name=\"push-notifications\"></a>How to: Register for push notifications\n\nWhen your app is a PhoneGap or Apache Cordova HTML/JavaScript app, the native mobile platform enables you to receive push notifications on the device. The [Apache Cordova plugin for Azure Mobile Services](https://github.com/Azure/azure-mobile-services-cordova) enables you to register for push notifications with Azure Notification Hubs. The specific notification service used depends on the native device platform on which the code executes. For an example of how to do this, see the sample, [Use Microsoft Azure to push notifications to Cordova apps](https://github.com/Azure/mobile-services-samples/tree/master/CordovaNotificationsArticle).\n\n>[AZURE.NOTE]This plugin currently only supports iOS and Android devices. For a solution that also includes Windows devices, see the article [Push Notifications to PhoneGap Apps using Notification Hubs Integration](http://blogs.msdn.com/b/azuremobile/archive/2014/06/17/push-notifications-to-phonegap-apps-using-notification-hubs-integration.aspx).\n\n## <a name=\"errors\"></a>How to: Handle errors\n\nThere are several ways to encounter, validate, and work around errors in Mobile Services.\n\nAs an example, server scripts are registered in a mobile service and can be used to perform a wide range of operations on data being inserted and updated, including validation and data modification. Imagine defining and registering a server script that validate and modify data, like so:\n\n\tfunction insert(item, user, request) {\n\t   if (item.text.length > 10) {\n\t\t  request.respond(statusCodes.BAD_REQUEST, { error: \"Text cannot exceed 10 characters\" });\n\t   } else {\n\t      request.execute();\n\t   }\n\t}\n\nThis server-side script validates the length of string data sent to the mobile service and rejects strings that are too long, in this case longer than 10 characters.\n\nNow that the mobile service is validating data and sending error responses on the server-side, you can update your HTML app to be able to handle error responses from validation.\n\n\ttodoItemTable.insert({\n\t   text: itemText,\n\t   complete: false\n\t})\n\t   .then(function (results) {\n\t   alert(JSON.stringify(results));\n\t}, function (error) {\n\t   alert(JSON.parse(error.request.responseText).error);\n\t});\n\n\nTo tease this out even further, you pass in the error handler as the second argument each time you perform data access:\n\n\tfunction handleError(message) {\n\t   if (window.console && window.console.error) {\n\t      window.console.error(message);\n\t   }\n\t}\n\n\tclient.getTable(\"tablename\").read()\n\t\t.then(function (data) { /* do something */ }, handleError);\n\n## <a name=\"promises\"></a>How to: Use promises\n\nPromises provide a mechanism to schedule work to be done on a value that has not yet been computed. It is an abstraction for managing interactions with asynchronous APIs.\n\nThe `done` promise is executed as soon as the function provided to it has either successfully completed or has gotten an error. Unlike the `then` promise, it is guaranteed to throw any error that is not handled inside the function, and after the handlers have finished executing, this function throws any error that would have been returned from then as a promise in the error state. For more information, see [done].\n\n\tpromise.done(onComplete, onError);\n\nLike so:\n\n\tvar query = todoItemTable;\n\tquery.read().done(function (results) {\n\t   alert(JSON.stringify(results));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t});\n\nThe `then` promise is the same as the as the `done` promise, but unlike the `then` promise, `done` is guaranteed to throw any error that is not handled inside the function. If you do not provide an error handler to `then` and the operation has an error, it does not throw an exception but rather returns a promise in the error state. For more information, see [then].\n\n\tpromise.then(onComplete, onError).done( /* Your success and error handlers */ );\n\nLike so:\n\n\tvar query = todoItemTable;\n\tquery.read().done(function (results) {\n\t   alert(JSON.stringify(results));\n\t}, function (err) {\n\t   alert(\"Error: \" + err);\n\t});\n\nYou can use promises in a number of different ways. You can chain promise operations by calling `then` or `done` on the promise that is returned by the previous `then` function. Use `then` for an intermediate stage of the operation (for example `.then().then()`), and `done` for the final stage of the operation (for example `.then().then().done()`).  You can chain multiple `then` functions, because `then` returns a promise. You cannot chain more than one `done` method, because it returns undefined. [Learn more about the  differences between then and done].\n\n\ttodoItemTable.insert({\n\t   text: \"foo\"\n\t}).then(function (inserted) {\n\t   inserted.newField = 123;\n\t   return todoItemTable.update(inserted);\n\t}).done(function (insertedAndUpdated) {\n\t   alert(JSON.stringify(insertedAndUpdated));\n\t})\n\n## <a name=\"customizing\"></a>How to: Customize client request headers\n\nYou can send custom request headers using the `withFilter` function, reading and writing arbitrary properties of the request about to be sent within the filter. You may want to add such a custom HTTP header if a server-side script needs it or may be enhanced by it.\n\n\tvar client = new WindowsAzure.MobileServiceClient('https://your-app-url', 'your-key')\n\t   .withFilter(function (request, next, callback) {\n\t   request.headers.MyCustomHttpHeader = \"Some value\";\n\t   next(request, callback);\n\t});\n\nFilters are used for a lot more than customizing request headers. They can be used to examine or change requests, examine or change  responses, bypass networking calls, send multiple calls, etc.\n\n## <a name=\"hostnames\"></a>How to: Use cross-origin resource sharing\n\nTo control which websites are allowed to interact with and send requests to your mobile service, make sure to add the host name of the website you use to host it to the Cross-Origin Resource Sharing (CORS) whitelist. For a JavaScript backend mobile service, you can configure the whitelist on the Configure tab in the [Azure classic portal](https://manage.windowsazure.com). You can use wildcards if required. By default, new Mobile Services instruct browsers to permit access only from `localhost`, and Cross-Origin Resource Sharing (CORS) allows JavaScript code running in a browser on an external hostname to interact with your Mobile Service.  This configuration is not necessary for WinJS applications.\n\n<!-- Anchors. -->\n[What is Mobile Services]: #what-is\n[Concepts]: #concepts\n[How to: Create the Mobile Services client]: #create-client\n[How to: Query data from a mobile service]: #querying\n[Filter returned data]: #filtering\n[Sort returned data]: #sorting\n[Return data in pages]: #paging\n[Select specific columns]: #selecting\n[Look up data by ID]: #lookingup\n[How to: Display data in the user interface]: #binding\n[How to: Insert data into a mobile service]: #inserting\n[How to: Modify data in a mobile service]: #modifying\n[How to: Delete data in a mobile service]: #deleting\n[How to: Authenticate users]: #authentication\n[How to: Handle errors]: #errors\n[How to: Use promises]: #promises\n[How to: Customize request headers]: #customizing\n[How to: Use cross-origin resource sharing]: #hostnames\n[Next steps]: #nextsteps\n[Execute an OData query operation]: #odata-query\n\n\n\n<!-- URLs. -->\n[then]: http://msdn.microsoft.com/library/windows/apps/br229728.aspx\n[done]: http://msdn.microsoft.com/library/windows/apps/hh701079.aspx\n[Learn more about the  differences between then and done]: http://msdn.microsoft.com/library/windows/apps/hh700334.aspx\n[how to handle errors in promises]: http://msdn.microsoft.com/library/windows/apps/hh700337.aspx\n\n[sessionStorage]: http://msdn.microsoft.com/library/cc197062(v=vs.85).aspx\n[localStorage]: http://msdn.microsoft.com/library/cc197062(v=vs.85).aspx\n\n[ListView]: http://msdn.microsoft.com/library/windows/apps/br211837.aspx\n[Data binding (Windows Store apps using JavaScript and HTML)]: http://msdn.microsoft.com/library/windows/apps/hh758311.aspx\n[login]: https://github.com/Azure/azure-mobile-services/blob/master/sdk/Javascript/src/MobileServiceClient.js#L301\n[ASCII control codes C0 and C1]: http://en.wikipedia.org/wiki/Data_link_escape_character#C1_set\n[OData system query options reference]: http://go.microsoft.com/fwlink/p/?LinkId=444502\n"
  },
  {
    "path": "docs/mobile-services-ios-get-started-offline-data.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Offline Data Sync in Mobile Services (iOS) | Microsoft Azure\"\n\tdescription=\"Learn how to use Azure Mobile Services to cache and sync offline data in your iOS application\"\n\tdocumentationCenter=\"ios\"\n\tauthors=\"krisragh\"\n\tmanager=\"erikre\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh;donnam\"/>\n\n# Get Started with Offline Data Sync in Mobile Services\n\n> [AZURE.SELECTOR]\n- [Android)](mobile-services-android-get-started-offline-data.md)\n- [iOS](mobile-services-ios-get-started-offline-data.md)\n- [Windows](mobile-services-windows-store-dotnet-get-started-offline-data.md)\n- [Xamarin.Android](mobile-services-xamarin-android-get-started-offline-data.md)\n- [Xamarin.iOS](mobile-services-xamarin-ios-get-started-offline-data.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nOffline sync allows you to view, add, or modify data in a mobile app even when there is no network connection. In this tutorial, you'll learn how your app can automatically store changes in a local offline database and sync those changes whenever it's back online.\n\nOffline sync has several advantages:\n\n* Improves app responsiveness by caching server data locally on device\n* Makes apps resilient against intermittent network connectivity\n* Allows you to create and modify data even with little or no connectivity\n* Syncs data across multiple devices\n* Detects conflicts when same record is modified by two devices\n\n> [AZURE.NOTE] To complete this tutorial, you need an Azure account. If you don't have an account, you can sign up for an Azure trial and get [free mobile services that you can keep using even after your trial ends](https://azure.microsoft.com/pricing/details/mobile-services/). For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=AE564AB28 target=\"_blank\").\n\nThis tutorial is based on the [Mobile Services Quick Start tutorial], which you must complete first. Let's first review the code related to offline sync already in the Quick Start.\n\n## <a name=\"review-sync\"></a>Review Mobile Services Sync Code\n\nAzure Mobile Services offline sync allows end users to interact with a local database when the network is not accessible. To use these features in your app, you initialize the sync context of `MSClient` and reference a local store. Then reference your table through the `MSSyncTable` interface.\n\n* In **QSTodoService.m**, notice the type of member `syncTable` is `MSSyncTable`. Offline sync uses this instead of `MSTable`. When a sync table is used, all operations go to the local store and are synchronized with the remote service only with explicit push and pull operations.\n\n```\n\t\t@property (nonatomic, strong)   MSSyncTable *syncTable;\n```\n\nTo get a reference to a sync table, use the method `syncTableWithName`. To remove offline sync functionality, use `tableWithName` instead.\n\n* In **QSTodoService.m**, before table operations are performed, the local store is initialized in `QSTodoService.init`:\n\n```\n\t\tMSCoreDataStore *store = [[MSCoreDataStore alloc] initWithManagedObjectContext:context];\n\t\tself.client.syncContext = [[MSSyncContext alloc] initWithDelegate:nil dataSource:store callback:nil];\n```\n\nThis creates a local store using the `MSCoreDataStore` interface. You may provide a different local store by implementing the `MSSyncContextDataSource` protocol.\n\nThe first parameter of `initWithDelegate` specifies a conflict handler, but since we've passed `nil`, we get the default conflict handler which fails on any conflict. For details on how to implement a custom conflict handler, see [Handling Conflicts with Offline Support for Mobile Services].\n\n* In **QSTodoService.m**, `syncData` first pushes new changes, and then calls `pullData` to get data from the remote service.     In `syncData`, we first call `pushWithCompletion` on the sync context. This method is a member of `MSSyncContext` -- rather than the sync table itself -- because it pushes changes across all tables. Only records that are modified in some way locally -- through creation, update, or delete operations -- are sent to the server. At the end of `syncData`, we call the helper `pullData`.\n\nIn this example, the push operation is not strictly necessary. If there are changes pending in the sync context for the table that is doing a push operation, pull always issues a push first. However, if you have more than one sync table, call push explicitly to have consistency across tables.\n\n```\n      -(void)syncData:(QSCompletionBlock)completion\n      {\n          // push all changes in the sync context, then pull new data\n          [self.client.syncContext pushWithCompletion:^(NSError *error) {\n              [self logErrorIfNotNil:error];\n              [self pullData:completion];\n          }];\n      }\n\n```\n\n* Next in **QSTodoService.m**, `pullData` gets new data that matches a query. `pullData` calls `MSSyncTable.pullWithQuery` to retrieve remote data and store it locally. `pullWithQuery` also allows you to specify a query to filter the records you wish to retrieve. In this example, the query just retrieves all records in the remote `TodoItem` table.\n\nThe second parameter to `pullWithQuery` is a query ID for _incremental sync_. Incremental sync retrieves only those records modified since the last sync, using the record's `UpdatedAt` timestamp, called `ms_updatedAt` in the local store. The query ID is descriptive string that is unique for each logical query in your app. To opt-out of incremental sync, pass `nil` as the query ID. This is inefficient since it will retrieve all records on every pull operation.\n\n```\n      -(void)pullData:(QSCompletionBlock)completion\n      {\n          MSQuery *query = [self.syncTable query];\n\n          // Pulls data from the remote server into the local table.\n          // We're pulling all items and filtering in the view\n          // query ID is used for incremental sync\n          [self.syncTable pullWithQuery:query queryId:@\"allTodoItems\" completion:^(NSError *error) {\n              [self logErrorIfNotNil:error];\n\n              // Let the caller know that we have finished\n              if (completion != nil) {\n                  dispatch_async(dispatch_get_main_queue(), completion);\n              }\n          }];\n      }\n```\n\n\n>[AZURE.NOTE] To remove records from the device local store when they have been deleted in your mobile service database, enable [Soft Delete]. Otherwise, your app should periodically call `MSSyncTable.purgeWithQuery` to purge the local store.\n\n\n* In **QSTodoService.m**, the methods `addItem` and `completeItem` invoke `syncData` after modifying data. In **QSTodoListViewController.m**, the method `refresh` also invokes `syncData` so that the UI displays the latest data on every refresh and at launch (`init` calls `refresh`.)\n\nBecause the app calls `syncData` whenever you modify data, the app assumes you are online whenever you edit data in the app.\n\n## <a name=\"review-core-data\"></a>Review Core Data Model\n\nWhen using the Core Data offline store, you need to define particular tables and fields in your data model. The sample app already includes a data model with the right format. In this section we walk through these tables and how they are used.\n\n- Open **QSDataModel.xcdatamodeld**. There are four tables defined, three used by the SDK and one for the todo items themselves:\n\n      * MS_TableOperations: For tracking items to be synchronized with server\n      * MS_TableOperationErrors: For tracking errors that happen during offline sync\n      * MS_TableConfig: For tracking last updated time for last sync operation for all pull operations\n      * TodoItem: For storing todo items. The system columns **ms_createdAt**, **ms_updatedAt**, and **ms_version** are optional system properties.\n\n>[AZURE.NOTE] The Mobile Services SDK reserves column names that begin with \"**`ms_`**\". Do not use this prefix on anything other than system columns. Otherwise, your column names will be modified when using the remote service.\n\n- When using the offline sync feature, you must define the system tables as shown below.\n\n    ### System Tables\n\n    #### MS_TableOperations\n\n    | Attribute     |    Type     |\n    |-------------- |   ------    |\n    | id (required) | Integer 64  |\n    | itemId        | String      |\n    | properties    | Binary Data |\n    | table         | String      |\n    | tableKind     | Integer 16  |\n\n    #### MS_TableOperationErrors\n\n    | Attribute     |    Type     |\n    |-------------- | ----------  |\n    | id (required) | String      |\n    | operationId   | Integer 64  |\n    | properties    | Binary Data |\n    | tableKind     | Integer 16  |\n\n    #### MS_TableConfig\n\n\n    | Attribute     |    Type     |\n    |-------------- | ----------  |\n    | id (required) | String      |\n    | key           | String      |\n    | keyType       | Integer 64  |\n    | table         | String      |\n    | value         | String      |\n\n    ### Data Table\n\n    #### TodoItem\n\n    | Attribute     |  Type   | Note                                                   |\n    |-------------- |  ------ | -------------------------------------------------------|\n    | id (required) | String  | primary key in remote store (required)                 |\n    | complete      | Boolean | todo item field                                        |\n    | text          | String  | todo item field                                        |\n    | ms_createdAt  | Date    | (optional) maps to __createdAt system property         |\n    | ms_updatedAt  | Date    | (optional) maps to __updatedAt system property         |\n    | ms_version    | String  | (optional) used to detect conflicts, maps to __version |\n\n\n\n## <a name=\"setup-sync\"></a>Change Sync Behavior of App\n\nIn this section, you modify the app so that it does not sync on app start, or when inserting and updating items, but only when the refresh gesture  is performed.\n\n* In **QSTodoListViewController.m**, change `viewDidLoad` to remove the call to `[self refresh]` at the end of the method. Now, the data will not be synced with the server on app start, but instead will be only stored locally.\n\n* In **QSTodoService.m**, modify `addItem` so that it doesn't sync after the item is inserted. Remove the `self syncData` block and replace it with the following:\n\n```\n        if (completion != nil) {\n            dispatch_async(dispatch_get_main_queue(), completion);\n        }\n```\n\n* Similarly, again in **QSTodoService.m**, in `completeItem`, remove the block for `self syncData` and replace with the following:\n\n```\n        if (completion != nil) {\n            dispatch_async(dispatch_get_main_queue(), completion);\n        }\n```\n\n## <a name=\"test-app\"></a>Test App\n\nIn this section, you will turn of Wi-Fi in the simulator to create an offline scenario. When you add data items, they will be held in the local Core Data store, but not synced to the mobile service.\n\n1. Turn off the internet connection on your Mac. Turning off WiFi in just iOS simulator may not have an effect, since the simulator may still use the host Mac's internet connection, so turn off internet for the computer itself. This simulates an offline scenario.\n\n2. Add some todo items or complete some items. Quit the simulator (or forcibly close the app) and restart. Verify that your changes have been persisted. Notice that the data items are still displayed because they are held in the local Core Data store.\n\n3. View the contents of the remote TodoItem table. Verify that the new items have _not_ been synced to the server.\n\n   - For the JavaScript backend, go to the [Azure classic portal](http://manage.windowsazure.com), and click the Data tab to view the contents of the `TodoItem` table.\n   - For the .NET backend, view the table contents either with a SQL tool such as SQL Server Management Studio, or a REST client such as Fiddler or Postman.\n\n4. Turn on Wi-Fi in the iOS simulator. Next, perform the refresh gesture by pulling down the list of items. You will see a progress spinner and the text \"Syncing...\".\n\n5. View the TodoItem data again. The new and changed TodoItems should now appear.\n\n## Summary\n\nIn order to support the offline features of mobile services, you used the `MSSyncTable` interface and initialized `MSClient.syncContext` with a local store. In this case the local store was a Core Data-based database.\n\nWhen using a Core Data local store, you define several tables with the [correct system properties][Review the Core Data model]. The normal  operations for mobile services work as if the app is still connected but all the operations occur against the local store.\n\nTo synchronize the local store with the server, you used `MSSyncTable.pullWithQuery` and `MSClient.syncContext.pushWithCompletion`:\n\n\t\t* To push changes to the server, you called `pushWithCompletion`. This method is in `MSSyncContext` instead of the sync table because it will push changes across all tables. Only records that are modified in some way locally (through CUD operations) are be sent to the server.\n\n\t\t* To pull data from a table on the server to the app, you called `MSSyncTable.pullWithQuery`. A pull always issues a push first. This is to ensure all tables in the local store along with relationships remain consistent. `pullWithQuery` can also be used to filter the data that is stored on the client, by customizing the `query` parameter.\n\n## Next Steps\n\n* [Handling Conflicts with Offline Support for Mobile Services]\n\n* [Using Soft Delete in Mobile Services][Soft Delete]\n\n## Additional Resources\n\n* [Cloud Cover: Offline Sync in Azure Mobile Services]\n\n* [Azure Friday: Offline-enabled apps in Azure Mobile Services] \\(note: demos are for Windows, but feature discussion applies to all platforms\\)\n\n<!-- URLs. -->\n\n[Get the sample app]: #get-app\n[Review the Core Data model]: #review-core-data\n[Review the Mobile Services sync code]: #review-sync\n[Change the sync behavior of the app]: #setup-sync\n[Test the app]: #test-app\n\n[core-data-1]: ./media/mobile-services-ios-get-started-offline-data/core-data-1.png\n[core-data-2]: ./media/mobile-services-ios-get-started-offline-data/core-data-2.png\n[core-data-3]: ./media/mobile-services-ios-get-started-offline-data/core-data-3.png\n[defining-core-data-main-screen]: ./media/mobile-services-ios-get-started-offline-data/defining-core-data-main-screen.png\n[defining-core-data-model-editor]: ./media/mobile-services-ios-get-started-offline-data/defining-core-data-model-editor.png\n[defining-core-data-tableoperationerrors-entity]: ./media/mobile-services-ios-get-started-offline-data/defining-core-data-tableoperationerrors-entity.png\n[defining-core-data-tableoperations-entity]: ./media/mobile-services-ios-get-started-offline-data/defining-core-data-tableoperations-entity.png\n[defining-core-data-tableconfig-entity]: ./media/mobile-services-ios-get-started-offline-data/defining-core-data-tableconfig-entity.png\n[defining-core-data-todoitem-entity]: ./media/mobile-services-ios-get-started-offline-data/defining-core-data-todoitem-entity.png\n[update-framework-1]: ./media/mobile-services-ios-get-started-offline-data/update-framework-1.png\n[update-framework-2]: ./media/mobile-services-ios-get-started-offline-data/update-framework-2.png\n\n[Core Data Model Editor Help]: https://developer.apple.com/library/mac/recipes/xcode_help-core_data_modeling_tool/Articles/about_cd_modeling_tool.html\n[Creating an Outlet Connection]: https://developer.apple.com/library/mac/recipes/xcode_help-interface_builder/articles-connections_bindings/CreatingOutlet.html\n[Build a User Interface]: https://developer.apple.com/library/mac/documentation/ToolsLanguages/Conceptual/Xcode_Overview/Edit_User_Interfaces/edit_user_interface.html\n[Adding a Segue Between Scenes in a Storyboard]: https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/chapters/StoryboardSegue.html#//apple_ref/doc/uid/TP40014225-CH25-SW1\n[Adding a Scene to a Storyboard]: https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/chapters/StoryboardScene.html\n\n[Core Data]: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html\n[Download the preview SDK here]: http://aka.ms/Gc6fex\n[How to use the Mobile Services client library for iOS]: mobile-services-ios-how-to-use-client-library.md\n[Offline iOS Sample]: https://github.com/Azure/mobile-services-samples/tree/master/TodoOffline/iOS/blog20140611\n[Mobile Services sample repository on GitHub]: https://github.com/Azure/mobile-services-samples\n\n\n[Get started with Mobile Services]: mobile-services-ios-get-started.md\n[Handling Conflicts with Offline Support for Mobile Services]:  mobile-services-ios-handling-conflicts-offline-data.md\n[Soft Delete]: mobile-services-using-soft-delete.md\n\n[Cloud Cover: Offline Sync in Azure Mobile Services]: http://channel9.msdn.com/Shows/Cloud+Cover/Episode-155-Offline-Storage-with-Donna-Malayeri\n[Azure Friday: Offline-enabled apps in Azure Mobile Services]: http://azure.microsoft.com/documentation/videos/azure-mobile-services-offline-enabled-apps-with-donna-malayeri/\n\n[Mobile Services Quick Start tutorial]: mobile-services-ios-get-started.md\n"
  },
  {
    "path": "docs/mobile-services-ios-get-started-users.md",
    "content": "<properties\n\tpageTitle=\"Add Authentication to Existing Azure Mobile Services App (iOS) | JavaScript Backend | Microsoft Azure\"\n\tdescription=\"Learn how to use Mobile Services to authenticate users of your iOS app through a variety of identity providers, including Google, Facebook, Twitter, and Microsoft.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"ios\"\n\tauthors=\"krisragh\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh\"/>\n\n# Add Authentication to Existing App\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-users.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-users.md)\n- [(Android | Javascript)](mobile-services-android-get-started-users.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started-users.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-users.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-users.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-users.md)\n- [(HTML | Javascript)](mobile-services-html-get-started-users.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nIn this tutorial, you add authentication to the [Mobile Services Quick Start tutorial] using a supported identity provider.\n\nWe recommend that you complete the [Mobile Services Quick Start tutorial] first. Alternatively, just download the Quick Start iOS project from the [Azure classic portal] click  **Mobile Services** > your mobile service > the cloud sign on top left > **iOS** > **Create a New iOS App** > **Download and run your app** > **Objective-C** > **Download**. Remember to click **Create TodoItem Table** before you click **Download**, if you haven't already created the table.\n\n## <a name=\"register\"></a>Register App for Authentication\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Dashboard**, and make a note of the **Mobile Service URL** value.\n\n2. Register your app with one or more of the following authentication providers:\n   * [Google](./\nmobile-services-how-to-register-google-authentication.md)\n   * [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n   * [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n   * [Microsoft](./\nmobile-services-how-to-register-microsoft-authentication.md)\n   * [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md).\n\n    Make a note of the client identity and client secret values generated by the provider. Do not distribute or share the client secret.\n\n3. Back in the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Identity** > your identity provider settings, then enter the client ID and secret value from your provider.\n\nYou've now configured both your app and your mobile service to work with your auth provider. You may optionally repeat all these steps for each additional identity provider you'd like to support.\n\n> [AZURE.IMPORTANT] Verify that you've set the correct redirect URI on your identity provider's developer site. As described in the linked instructions for each provider above, the redirect URI may be different for a .NET backend service vs. for a JavaScript backend service. An incorrectly configured redirect URI may result in the login screen not being displayed properly and the app malfunctioning in unexpected ways.\n\n\n## <a name=\"permissions\"></a>Restrict Data Permissions to Authenticated Users\n\n\nTo secure your endpoints, you must restrict access to only authenticated clients.\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), navigate to your mobile service, then click  **Data** > your table name (**TodoItem**) > **Permissions**.\n\n2. Set all of the table operation permissions to **Only authenticated users**.\n\n\t This ensures that all operations against the table require an authenticated user, which is required for this tutorial. You can set different permissions on each operations to support your specific scenario.  \n\n## <a name=\"add-authentication\"></a>Add Authentication to App\n\n* Open **QSTodoListViewController.m** and add the following method. Change _facebook_ to _microsoftaccount_, _twitter_, _google_, or _windowsazureactivedirectory_ if you're not using Facebook as your identity provider.\n\n```\n        - (void) loginAndGetData\n        {\n            MSClient *client = self.todoService.client;\n            if (client.currentUser != nil) {\n                return;\n            }\n\n            [client loginWithProvider:@\"facebook\" controller:self animated:YES completion:^(MSUser *user, NSError *error) {\n                [self refresh];\n            }];\n        }\n```\n\n* Replace `[self refresh]` in `viewDidLoad` with the following:\n\n```\n        [self loginAndGetData];\n```\n\n* Press  **Run** to start the app, and then log in. When you are logged in, you should be able to view the Todo list and make updates.\n\n## <a name=\"store-authentication\"></a>Store Authentication Tokens in App\n\n\nThe previous example contacts both the identity provider and the mobile service every time the app starts. Instead, you can cache the authorization token and try to use it first.\n\n* The recommended way to encrypt and store authentication tokens on an iOS client is use the iOS Keychain. We'll use [SSKeychain](https://github.com/soffes/sskeychain) -- a simple wrapper around the iOS Keychain. Follow the instructions on the SSKeychain page and add it to your project. Verify that the **Enable Modules** setting is enabled in the project's **Build Settings** (section **Apple LLVM - Languages - Modules**.)\n\n* Open **QSTodoListViewController.m** and add the following code:\n\n```\n\t\t- (void) saveAuthInfo {\n\t\t\t\t[SSKeychain setPassword:self.todoService.client.currentUser.mobileServiceAuthenticationToken forService:@\"AzureMobileServiceTutorial\" account:self.todoService.client.currentUser.userId]\n\t\t}\n\n\n\t\t- (void)loadAuthInfo {\n\t\t\t\tNSString *userid = [[SSKeychain accountsForService:@\"AzureMobileServiceTutorial\"][0] valueForKey:@\"acct\"];\n\t\t    if (userid) {\n\t\t        NSLog(@\"userid: %@\", userid);\n\t\t        self.todoService.client.currentUser = [[MSUser alloc] initWithUserId:userid];\n\t\t         self.todoService.client.currentUser.mobileServiceAuthenticationToken = [SSKeychain passwordForService:@\"AzureMobileServiceTutorial\" account:userid];\n\n\t\t    }\n\t\t}\n```\n\n* In `loginAndGetData`, modify  `loginWithProvider:controller:animated:completion:`'s completion block. Add the following line right before `[self refresh]` to store the user ID and token properties:\n\n```\n\t\t\t\t[self saveAuthInfo];\n```\n\n* Let's load the user ID and token when the app starts. In the `viewDidLoad` in **QSTodoListViewController.m**, add this right after`self.todoService` is initialized.\n\n```\n\t\t\t\t[self loadAuthInfo];\n```\n\n## <a name=\"next-steps\"></a>Next Steps\n\nNext, learn [how to use the user ID value to filter returned data](mobile-services-javascript-backend-service-side-authorization.md).\n\n<!-- Anchors. -->\n[Register your app for authentication and configure Mobile Services]: #register\n[Restrict table permissions to authenticated users]: #permissions\n[Add authentication to the app]: #add-authentication\n[Next Steps]:#next-steps\n[Storing authentication tokens in your app]:#store-authentication\n\n<!-- Images. -->\n\n\n\n\n[4]: ./media/mobile-services-ios-get-started-users/mobile-services-selection.png\n[5]: ./media/mobile-services-ios-get-started-users/mobile-service-uri.png\n\n\n\n\n\n\n\n[13]: ./media/mobile-services-ios-get-started-users/mobile-identity-tab.png\n[14]: ./media/mobile-services-ios-get-started-users/mobile-portal-data-tables.png\n[15]: ./media/mobile-services-ios-get-started-users/mobile-portal-change-table-perms.png\n\n\n<!-- URLs. -->\n[Service-side authorization of Mobile Services users]: mobile-services-javascript-backend-service-side-authorization.md\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[My Applications]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n[Live SDK for Windows]: http://go.microsoft.com/fwlink/p/?LinkId=262253\n[Single sign-on for Windows Store apps by using Live Connect]: https://azure.microsoft.com/develop/mobile/tutorials/single-sign-on-windows-8-dotnet\n[Mobile Services Quick Start tutorial]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-ios\n[Get started with data]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-data-ios\n[Get started with authentication]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-users-ios\n[Get started with push notifications]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-ios\n[Authorize users with scripts]: https://azure.microsoft.com/develop/mobile/tutorials/authorize-users-in-scripts-ios\n\n[Azure classic portal]: https://manage.windowsazure.com/\n"
  },
  {
    "path": "docs/mobile-services-ios-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Azure Mobile Services for iOS apps | JavaScript Backend\"\n\tdescription=\"Follow this tutorial to get started using Azure Mobile Services for iOS development.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"ios\"\n\tauthors=\"krisragh\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"hero-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh\"/>\n\n# <a name=\"getting-started\"> </a>Get started with Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis tutorial shows you how to add a cloud-based backend service to an iOS app using Azure Mobile Services.\n\nIn this tutorial, you will create both a new mobile service and a simple _To do list_ app that stores app data in the new mobile service. The mobile service that you will create uses JavaScript for server-side business logic. To create a mobile service with server-side business logic in .NET, see the [.NET backend version] of this topic.\n\n> [AZURE.NOTE] To complete this tutorial, you need an Azure account. If you don't have an account, you can sign up for an Azure trial and get [free mobile services that you can keep using even after your trial ends](https://azure.microsoft.com/pricing/details/mobile-services/). For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=AE564AB28&amp;returnurl=http%3A%2F%2Fazure.microsoft.com%2Fen-us%2Fdevelop%2Fmobile%2Ftutorials%2Fget-started-ios%2F%20).\n\n## <a name=\"create-new-service\"> </a>Create a new mobile service\n\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** dialog, select **Create a free 20 MB SQL Database**, select **JavaScript** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t>[AZURE.NOTE]As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n\n## Create a new iOS app\n\nYou can follow an easy Quick Start in the Azure classic portal to create a new app connected to your mobile service:\n\n1. In the [Azure classic portal], click **Mobile Services**, and then click the mobile service that you just created.\n\n2. In the Quick Start tab, click **iOS** under **Choose a platform** and expand **Create a new iOS app**. This displays the steps to create an iOS app connected to your mobile service.\n\n3. Click **Create TodoItem table** to create a table to store app data.\n\n4. Under **Download and run your app**, click **Download**. This downloads the project for the sample _To do list_ application that is connected to your mobile service, along with the Mobile Services iOS SDK. Save the compressed project file to your local computer, and make a note of where you saved it.\n\n## Run your new iOS app\n\n\n\n\nThe final stage of this tutorial is to build and run your new app.\n\n1. Browse to the location where you saved the compressed project files, expand the files on your computer, and open the project file using Xcode.\n\n2. Press the **Run** button to build the project and start the app in the iPhone emulator.\n\n3. In the app, type meaningful text, such as _Complete the tutorial_ and then click the plus (**+**) icon.\n\n   \t![](./media/mobile-services-ios-run-app/mobile-quickstart-startup-ios.png)\n\n   \tThis sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the TodoItem table. Items stored in the table are returned by the mobile service, and the data is displayed in the list.\n\n \t</div>\n\n<ol start=\"4\">\n<li><p>Back in the [Azure classic portal], click the **DATA** tab and then click the **TodoItem** table. This lets you browse the data inserted by the app into the table.<p></li></ol></p>\n\n## <a name=\"next-steps\"> </a>Next Steps\nLearn how to perform additional important tasks in Mobile Services:\n\n* [Get started with offline data sync]\n\t<br/>Learn how to use offline data sync to make your app responsive and robust.\n\n* [Add authentication to an existing app]\n\t<br/>Learn how to authenticate users of your app with an identity provider.\n\n* [Add push notifications to an existing app]\n\t<br/>Learn how to send a very basic push notification to your app.\n\n\n<!-- Anchors. -->\n[Getting started with Mobile Services]:#getting-started\n[Create a new mobile service]:#create-new-service\n[Define the mobile service instance]:#define-mobile-service-instance\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n[6]: ./media/mobile-services-ios-get-started/mobile-portal-quickstart-ios.png\n[7]: ./media/mobile-services-ios-get-started/mobile-quickstart-steps-ios.png\n[8]: ./media/mobile-services-ios-get-started/mobile-xcode-project.png\n\n[10]: ./media/mobile-services-ios-get-started/mobile-quickstart-startup-ios.png\n[11]: ./media/mobile-services-ios-get-started/mobile-data-tab.png\n[12]: ./media/mobile-services-ios-get-started/mobile-data-browse.png\n\n\n<!-- URLs. -->\n[Get started with offline data sync]: mobile-services-ios-get-started-offline-data.md\n[Add authentication to an existing app]: mobile-services-dotnet-backend-ios-get-started-users.md\n[Add push notifications to an existing app]: mobile-services-dotnet-backend-ios-get-started-push.md\n\n\n[Mobile Services iOS SDK]: https://go.microsoft.com/fwLink/p/?LinkID=266533\n[Azure classic portal]: https://manage.windowsazure.com/\n[XCode]: https://go.microsoft.com/fwLink/p/?LinkID=266532\n[.NET backend version]: mobile-services-dotnet-backend-ios-get-started.md\n"
  },
  {
    "path": "docs/mobile-services-ios-handling-conflicts-offline-data.md",
    "content": "<properties\n\tpageTitle=\"Handle conflicts with offline data in Mobile Services (iOS) | Mobile Dev Center\"\n\tdescription=\"Learn how to use Azure Mobile Services to handle conflicts when syncing offline data in your iOS application\"\n\tdocumentationCenter=\"ios\"\n\tauthors=\"krisragh\"\n\tmanager=\"erikre\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh;donnam\"/>\n\n\n# Handling Conflicts with Offline Data Sync in Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend)]\n- [(iOS | Any)](mobile-services-ios-handling-conflicts-offline-data.md)\n- [(Windows Runtime 8.1 universal C# | Any)](mobile-services-windows-store-dotnet-handling-conflicts-offline-data.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows you how to synchronize data and handle conflicts when using the offline capabilities of Azure Mobile Services. This tutorial builds on the [Get Started with Offline Data] tutorial.\n\n>[AZURE.NOTE] To complete this tutorial, you need a Azure account. If you don't have an account, you can create a free trial account in just a couple of minutes. For details, see <a href=\"http://www.windowsazure.com/pricing/free-trial/?WT.mc_id=AE564AB28\" target=\"_blank\">Azure Free Trial</a>.\n\n\n## Download iOS Project\n\nFor this tutorial, download [an updated Xcode project from Github](https://github.com/Azure/mobile-services-samples/tree/master/TodoOffline/iOS). We've  used the Xcode project from the end of [Get Started with Offline Data] tutorial as a starting point, and then updated it to allow the editing of items. We've also added supporting classes and methods so we can add a conflict handler in the next section.\n\nAt the end of this tutorial, if you you run this app on two phones, change the same item on both phones locally, and push the changes back to the server, you'll allow the user on each phone to choose which version to keep:\n  * keep the client version (which overrides the version on the server),\n  * keep the server version (which updates the client local table), or\n  * keep neither version (cancels push and leaves the operation pending).\n\nNow, let's add the conflict handler to enable this capability.\n\n## <a name=\"add-conflict-handling\"></a>Add Conflict Handler to Todo List View Controller\n\n1. In **QSTodoListViewController.m**, edit **viewDidLoad**. Replace the call to **defaultService** with a call to **defaultServiceWithDelegate** instead:\n\n        self.todoService = [QSTodoService defaultServiceWithDelegate:self];\n\n2. In **QSTodoListViewController.h**, add **&lt;MSSyncContextDelegate&gt;** to the interface declaration so we're implementing the **MSSyncContextDelegate** protocol.\n\n        @interface QSTodoListViewController : UITableViewController<MSSyncContextDelegate, NSFetchedResultsControllerDelegate>\n\n3. Add the following import statement at the top of **QSTodoListViewController.m**:\n\n        #import \"QSUIAlertViewWithBlock.h\"\n\n4. Finally, let's add the following two operations to **QSTodoListViewController.m** to use this helper class and prompt the user to reconcile the conflict in one of three ways.\n\n        - (void)tableOperation:(MSTableOperation *)operation onComplete:(MSSyncItemBlock)completion\n        {\n            [self doOperation:operation complete:completion];\n        }\n\n        -(void)doOperation:(MSTableOperation *)operation complete:(MSSyncItemBlock)completion\n        {\n            [operation executeWithCompletion:^(NSDictionary *item, NSError *error) {\n\n                NSDictionary *serverItem = [error.userInfo objectForKey:MSErrorServerItemKey];\n\n                if (error.code == MSErrorPreconditionFailed) {\n                    QSUIAlertViewWithBlock *alert = [[QSUIAlertViewWithBlock alloc] initWithCallback:^(NSInteger buttonIndex) {\n                        if (buttonIndex == 1) { // Client\n                            NSMutableDictionary *adjustedItem = [operation.item mutableCopy];\n\n                            [adjustedItem setValue:[serverItem objectForKey:MSSystemColumnVersion] forKey:MSSystemColumnVersion];\n                            operation.item = adjustedItem;\n\n                            [self doOperation:operation complete:completion];\n                            return;\n\n                        } else if (buttonIndex == 2) { // Server\n                            NSDictionary *serverItem = [error.userInfo objectForKey:MSErrorServerItemKey];\n                            completion(serverItem, nil);\n                        } else { // Cancel\n                            [operation cancelPush];\n                            completion(nil, error);\n                        }\n                    }];\n\n                    NSString *message = [NSString stringWithFormat:@\"Client value: %@\\nServer value: %@\", operation.item[@\"text\"], serverItem[@\"text\"]];\n\n                    [alert showAlertWithTitle:@\"Server Conflict\"\n                                      message:message\n                            cancelButtonTitle:@\"Cancel\"\n                            otherButtonTitles:[NSArray arrayWithObjects:@\"Use Client\", @\"Use Server\", nil]];\n                } else {\n                    completion(item, error);\n                }\n            }];\n        }\n\n## <a name=\"test-app\"></a>Test the App\n\nLet's test the application with conflicts! Edit the same item in two different instances of the app running at the same time, or using the app and a REST client.\n\nPerform the refresh gesture in the app instances by dragging from the top. Now you'll see a prompt to reconcile the conflict:\n\n![][conflict-ui]\n\n<!-- URLs. -->\n\n[Update the App Project to Allow Editing]: #update-app\n[Update Todo List View Controller]: #update-list-view\n[Add Todo Item View Controller]: #add-view-controller\n[Add Todo Item View Controller and Segue to Storyboard]: #add-segue\n[Add Item Details to Todo Item View Controller]: #add-item-details\n[Add Support for Saving Edits]: #saving-edits\n[Conflict Handling Problem]: #conflict-handling-problem\n[Update QSTodoService to Support Conflict Handling]: #service-add-conflict-handling\n[Add UI Alert View Helper to Support Conflict Handling]: #add-alert-view\n[Add Conflict Handler to Todo List View Controller]: #add-conflict-handling\n[Test the App]: #test-app\n\n\n[add-todo-item-view-controller-3]: ./media/mobile-services-ios-handling-conflicts-offline-data/add-todo-item-view-controller-3.png\n[add-todo-item-view-controller-4]: ./media/mobile-services-ios-handling-conflicts-offline-data/add-todo-item-view-controller-4.png\n[add-todo-item-view-controller-5]: ./media/mobile-services-ios-handling-conflicts-offline-data/add-todo-item-view-controller-5.png\n[add-todo-item-view-controller-6]: ./media/mobile-services-ios-handling-conflicts-offline-data/add-todo-item-view-controller-6.png\n[todo-list-view-controller-add-segue]: ./media/mobile-services-ios-handling-conflicts-offline-data/todo-list-view-controller-add-segue.png\n[update-todo-list-view-controller-2]: ./media/mobile-services-ios-handling-conflicts-offline-data/update-todo-list-view-controller-2.png\n[conflict-handling-problem-1]: ./media/mobile-services-ios-handling-conflicts-offline-data/conflict-handling-problem-1.png\n[conflict-ui]: ./media/mobile-services-ios-handling-conflicts-offline-data/conflict-ui.png\n\n\n[Segmented Controls]: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/UIKitUICatalog/UISegmentedControl.html\n[Core Data Model Editor Help]: https://developer.apple.com/library/mac/recipes/xcode_help-core_data_modeling_tool/Articles/about_cd_modeling_tool.html\n[Creating an Outlet Connection]: https://developer.apple.com/library/mac/recipes/xcode_help-interface_builder/articles-connections_bindings/CreatingOutlet.html\n[Build a User Interface]: https://developer.apple.com/library/mac/documentation/ToolsLanguages/Conceptual/Xcode_Overview/Edit_User_Interfaces/edit_user_interface.html\n[Adding a Segue Between Scenes in a Storyboard]: https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/chapters/StoryboardSegue.html#//apple_ref/doc/uid/TP40014225-CH25-SW1\n[Adding a Scene to a Storyboard]: https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/chapters/StoryboardScene.html\n[Core Data]: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html\n[Download the preview SDK here]: http://aka.ms/Gc6fex\n[How to use the Mobile Services client library for iOS]: mobile-services-ios-how-to-use-client-library.md\n[Getting Started Offline iOS Sample]: https://github.com/Azure/mobile-services-samples/tree/master/TodoOffline/iOS/blog20140611\n[Get Started with Offline Data]: mobile-services-ios-get-started-offline-data.md\n[Get started with Mobile Services]: mobile-services-ios-get-started.md\n"
  },
  {
    "path": "docs/mobile-services-ios-how-to-use-client-library.md",
    "content": "<properties\n\tpageTitle=\"How to Use iOS Client Library for Azure Mobile Services\"\n\tdescription=\"How to Use iOS Client Library for Mobile Services\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"ios\"\n\tauthors=\"krisragh\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh\"/>\n\n# How to Use iOS Client Library for Azure Mobile Services\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR]\n- [Android](mobile-services-android-how-to-use-client-library.md)\n- [HTML/JavaScript](mobile-services-html-how-to-use-client-library.md)\n- [iOS](mobile-services-ios-how-to-use-client-library.md)\n- [Managed (Windows/Xamarin)](mobile-services-dotnet-how-to-use-client-library.md)\n\nThis guide teaches you to perform common scenarios using the Azure Mobile Services [iOS SDK]. If you are new to Mobile Services, first complete [Mobile Services Quick Start] to configure your account, create a table, and create a mobile service.\n\n> [AZURE.NOTE] This guide uses the latest [iOS Mobile Services SDK](https://go.microsoft.com/fwLink/?LinkID=266533&clcid=0x409). If your project uses an older version of the SDK, first upgrade the framework in Xcode.\n\n## <a name=\"what-is\"></a>What is Mobile Services\n\nAzure Mobile Services is a highly scalable mobile application development platform that lets you add enhanced functionality to your mobile device apps by using Azure.\n\nWith Mobile Services you can:\n\n+ **Build native and cross platform apps** - Connect your iOS, Android, Windows, or cross-platform Xamarin or Cordova (Phonegap) apps to your backend mobile service using native SDKs.  \n+ **Send push notifications to your users** - Send push notifications to your users of your app.\n+ **Authenticate your users** - Leverage popular identity providers like Facebook and Twitter to authenticate your app users.\n+ **Store data in the cloud** - Store user data in a SQL Database (by default) or in Mongo DB, DocumentDB, Azure Tables, or Azure Blobs.\n+ **Build offline-ready apps with sync** - Make your apps work offline and use Mobile Services to sync data in the background.\n+ **Monitor and scale your apps** - Monitor app usage and scale your backend as demand grows.\n\n## <a name=\"concepts\"> </a>Mobile Services Concepts\n\nThe following are important features and concepts in the Mobile Services:\n\n+ **Application key:** a unique value that is used to limit access to your mobile service from random clients; this \"key\" is not a security token and is not used to authenticate users of your app.    \n+ **Backend:** the mobile service instance that supports your app. A mobile service is implemented either as an ASP.NET Web API project (*.NET backend* ) or as a Node.js project (*JavaScript backend*).\n+ **Identity provider:** an external service, trusted by Mobile Services, that authenticates your app's users. Supported providers include: Facebook, Twitter, Google, Microsoft Account, and Azure Active Directory.\n+ **Push notification:** Service-initiated message that is sent to a registered device or user using Azure Notification Hubs.\n+ **Scale:** The ability to add, for an additional cost, more processing power, performance, and storage as your app becomes more popular.\n+ **Scheduled job:** Custom code that is run either on a pre-determined schedule or on-demand.\n\nFor more information, see [Mobile Services Concepts](./\nmobile-services-concepts-links.md).\n\n## <a name=\"Setup\"></a>Setup and Prerequisites\n\nThis guide assumes that you have created a mobile service with a table. For more information see [Create a table], or reuse the `TodoItem` table created in [Mobile Services Quick Start]. This guide assumes that the table has the same schema as the tables in those tutorials. This guide also assumes that your Xcode references `WindowsAzureMobileServices.framework` and imports `WindowsAzureMobileServices/WindowsAzureMobileServices.h`.\n\n## <a name=\"create-client\"></a>How to: Create Mobile Services Client\n\nTo access an Azure mobile service in your project, create an `MSClient` client object. Replace `AppUrl` and `AppKey` with the mobile service URL and the application key Dashboard values, respectively.\n\n```\nMSClient *client = [MSClient clientWithApplicationURLString:@\"AppUrl\" applicationKey:@\"AppKey\"];\n```\n\n## <a name=\"table-reference\"></a>How to: Create Table Reference\n\nTo access or update data for your Azure mobile service, create a reference to the table. Replace `TodoItem` with the name of your table.\n\n```\n\tMSTable *table = [client tableWithName:@\"TodoItem\"];\n```\n\n## <a name=\"querying\"></a>How to: Query Data\n\nTo create a database query, query the `MSTable` object. The following query gets all the items in `TodoItem` and logs the text of each item.\n\n```\n[table readWithCompletion:^(MSQueryResult *result, NSError *error) {\n\t\tif(error) { // error is nil if no error occured\n\t\t\t\tNSLog(@\"ERROR %@\", error);\n\t\t} else {\n\t\t\t\tfor(NSDictionary *item in result.items) { // items is NSArray of records that match query\n\t\t\t\t\t\tNSLog(@\"Todo Item: %@\", [item objectForKey:@\"text\"]);\n\t\t\t\t}\n\t\t}\n}];\n```\n\n## <a name=\"filtering\"></a>How to: Filter Returned Data\n\nTo filter results, there are many available options.\n\nTo filter using a predicate, use an `NSPredicate` and `readWithPredicate`. The following filters returned data to find only incomplete Todo items.\n\n```\n// Create a predicate that finds items where complete is false\nNSPredicate * predicate = [NSPredicate predicateWithFormat:@\"complete == NO\"];\n// Query the TodoItem table and update the items property with the results from the service\n[table readWithPredicate:predicate completion:^(MSQueryResult *result, NSError *error) {\n\t\tif(error) {\n\t\t\t\tNSLog(@\"ERROR %@\", error);\n\t\t} else {\n\t\t\t\tfor(NSDictionary *item in result.items) {\n\t\t\t\t\t\tNSLog(@\"Todo Item: %@\", [item objectForKey:@\"text\"]);\n\t\t\t\t}\n\t\t}\n}];\n```\n\n## <a name=\"query-object\"></a>How to: Use MSQuery\n\nTo perform a complex query (including sorting and paging), create an `MSQuery` object, directly or by using a predicate:\n\n```\n    MSQuery *query = [table query];\n    MSQuery *query = [table queryWithPredicate: [NSPredicate predicateWithFormat:@\"complete == NO\"]];\n```\n\n`MSQuery` lets you control several query behaviors, including the following. Execute an `MSQuery` query by calling `readWithCompletion` on it, as shown in the next example.\n* Specify order of results\n* Limit which fields to return\n* Limit how many records to return\n* Specify total count in response\n* Specify custom query string parameters in request\n* Apply additional functions\n\n\n## <a name=\"sorting\"></a>How to: Sort Data with MSQuery\n\nTo sort results, let's look at an example. To first ascendingly by field `text` and then descendingly by field `completion`, invoke `MSQuery` like so:\n\n```\n[query orderByAscending:@\"text\"];\n[query orderByDescending:@\"complete\"];\n[query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n\t\tif(error) {\n\t\t\t\tNSLog(@\"ERROR %@\", error);\n\t\t} else {\n\t\t\t\tfor(NSDictionary *item in result.items) {\n\t\t\t\t\t\tNSLog(@\"Todo Item: %@\", [item objectForKey:@\"text\"]);\n\t\t\t\t}\n\t\t}\n}];\n```\n\n## <a name=\"paging\"></a>How to: Return Data in Pages with MSQuery\n\nMobile Services limits the amount of records that are returned in a single response. To control the number of records displayed to your users you must implement a paging system.  Paging is performed by using the following three properties of the **MSQuery** object:\n\n```\n+\t`BOOL includeTotalCount`\n+\t`NSInteger fetchLimit`\n+\t`NSInteger fetchOffset`\n```\n\nIn the following example, a simple function requests 5 records from the server and then appends them to the local collection of previously loaded records:\n\n```\n// Create and initialize these properties\n@property (nonatomic, strong)   NSMutableArray *loadedItems; // Init via [[NSMutableArray alloc] init]\n@property (nonatomic)   \t\t\t\tBOOL moreResults;\n```\n\n```\n-(void)loadResults\n{\n    MSQuery *query = [self.table query];\n\n    query.includeTotalCount = YES;\n    query.fetchLimit = 5;\n    query.fetchOffset = self.loadedItems.count;\n\n\n    [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n        if(!error) {\n            // Add the items to our local copy\n            [self.loadedItems addObjectsFromArray:result.items];\n\n            // Set a flag to keep track if there are any additional records we need to load\n            self.moreResults = (self.loadedItems.count <= result.totalCount);\n        }\n    }];\n}\n\n```\n\n## <a name=\"selecting\"></a><a name=\"parameters\"></a>How to: Limit Fields and Expand Query String Parameters with MSQuery\n\nTo limit fields to be returned in a query, specify the names of the fields in the **selectFields** property. This returns only the text and completed fields:\n\n```\n\tquery.selectFields = @[@\"text\", @\"completed\"];\n```\n\nTo include additional query string parameters in the server request (for example, because a custom server-side script uses them), populate `query.parameters` like so:\n\n```\n\tquery.parameters = @{\n\t\t@\"myKey1\" : @\"value1\",\n\t\t@\"myKey2\" : @\"value2\",\n\t};\n```\n\n## <a name=\"inserting\"></a>How to: Insert Data\n\nTo insert a new table row, create a new `NSDictionary` and invoke `table insert`. Mobile Services automatically generates new columns based on the `NSDictionary` if [Dynamic Schema] is not disabled.\n\nIf `id` is not provided, the backend automatically generates a new unique ID. Provide your own `id` to use email addresses, usernames, or your own custom values as ID. Providing your own ID may ease joins and business-oriented database logic.\n\n```\n\tNSDictionary *newItem = @{@\"id\": @\"custom-id\", @\"text\": @\"my new item\", @\"complete\" : @NO};\n\t[self.table insert:newItem completion:^(NSDictionary *result, NSError *error) {\n\t\t// The result contains the new item that was inserted,\n\t\t// depending on your server scripts it may have additional or modified\n\t\t// data compared to what was passed to the server.\n\t\tif(error) {\n\t\t\t\tNSLog(@\"ERROR %@\", error);\n\t\t} else {\n\t\t\t\t\t\tNSLog(@\"Todo Item: %@\", [result objectForKey:@\"text\"]);\n\t\t}\n\t}];\n```\n\n## <a name=\"modifying\"></a>How to: Modify Data\n\nTo update an existing row, modify an item and call `update`:\n\n```\n\tNSMutableDictionary *newItem = [oldItem mutableCopy]; // oldItem is NSDictionary\n\t[newItem setValue:@\"Updated text\" forKey:@\"text\"];\n\t[self.table update:newItem completion:^(NSDictionary *item, NSError *error) {\n\t\t// Handle error or perform additional logic as needed\n\t}];\n```\n\nAlternatively, supply the row ID and the updated field:\n\n```\n\t[self.table update:@{@\"id\":@\"37BBF396-11F0-4B39-85C8-B319C729AF6D\", @\"Complete\":@YES} completion:^(NSDictionary *item, NSError *error) {\n\t\t// Handle error or perform additional logic as needed\n\t}];\n```\n\nAt minimum, the `id` attribute must be set when making updates.\n\n## <a name=\"deleting\"></a>How to: Delete Data\n\nTo delete an item, invoke `delete` with the item:\n\n```\n\t[self.table delete:item completion:^(id itemId, NSError *error) {\n\t\t// Handle error or perform additional logic as needed\n\t}];\n```\n\nAlternatively, delete by providing a row ID:\n\n```\n\t[self.table deleteWithId:@\"37BBF396-11F0-4B39-85C8-B319C729AF6D\" completion:^(id itemId, NSError *error) {\n\t\t// Handle error or perform additional logic as needed\n\t}];\n```\n\nAt minimum, the `id` attribute must be set when making deletes.\n\n## <a name=\"#custom-api\"></a>How to: Call a custom API\n\nA custom API enables you to define custom endpoints that expose server functionality that does not map to an insert, update, delete, or read operation. By using a custom API, you can have more control over messaging, including reading and setting HTTP message headers and defining a message body format other than JSON. For an example of how to create a custom API in your mobile service, see [How to: define a custom API endpoint](mobile-services-dotnet-backend-define-custom-api.md).\n\n\n### Call custom API from iOS app\n\nTo call this custom API from an iOS client, use the `MSClient invokeAPI` method. There are two versions of this method, one for JSON-formatted requests, and one for any data type:\n\n\t/// Invokes a user-defined API of the Mobile Service.  The HTTP request and\n\t/// response content will be treated as JSON.\n\t-(void)invokeAPI:(NSString *)APIName\n\t            body:(id)body\n\t      HTTPMethod:(NSString *)method\n\t      parameters:(NSDictionary *)parameters\n\t         headers:(NSDictionary *)headers\n\t      completion:(MSAPIBlock)completion;\n\n\t/// Invokes a user-defined API of the Mobile Service.  The HTTP request and\n\t/// response content can be of any media type.\n\t-(void)invokeAPI:(NSString *)APIName\n\t            data:(NSData *)data\n\t      HTTPMethod:(NSString *)method\n\t      parameters:(NSDictionary *)parameters\n\t         headers:(NSDictionary *)headers\n\t      completion:(MSAPIDataBlock)completion;\n\n\nFor example, to send a JSON request to a custom API named \"sendEmail\", pass an `NSDictionary` for the request parameters:\n\n\tNSDictionary *emailHeader = @{ @\"to\": @\"email.com\", @\"subject\" : @\"value\" };\n\n\t[self.client invokeAPI:@\"sendEmail\"\n\t     body:emailBody\n\t     HTTPMethod:@\"POST\"\n\t     parameters:emailHeader\n\t     headers:nil\n\t     completion:completion ];\n\nIf you need the data returned then you can use something like this:\n\n\t[self.client invokeAPI:apiName\n                 body:yourBody\n           HTTPMethod:httpMethod\n           parameters:parameters\n              headers:headers\n           completion:  ^(NSData *result,\n                          NSHTTPURLResponse *response,\n                          NSError *error){\n               // error is nil if no error occured\n               if(error) {\n                   NSLog(@\"ERROR %@\", error);\n               } else {\n\n\t\t// do something with the result\n               }\n\n\n           }];\n\n\n\n\n\n## <a name=\"authentication\"></a>How to: Authenticate Users\n\nAzure Mobile Services supports various identity providers. For a basic tutorial, see [Authentication].\n\nAzure Mobile Services supports two authentication workflows:\n\n- **Server-managed Login**: Azure Mobile Services manages the login process on behalf of your app. It displays a provider-specific login page and authenticates with the chosen provider.\n\n- **Client-managed Login**: The _app_ requests a token from the identity provider and presents this token to Azure Mobile Services for authentication.\n\nWhen authentication succeeds, you get back a user object with a user ID value and the auth token. To use this user ID to authorize users, see [Service-side Authorization]. To restrict table access to only authenticated users, see [Permissions].\n\n### Server-managed Login\n\nHere is how you can add server-managed login to the [Mobile Services Quick Start] project; you may use similar code for your other projects. For more information and to see an end-to-end example in action, see [Authentication].\n\n* Open **QSTodoListViewController.m** and add the following method. Change _facebook_ to _microsoftaccount_, _twitter_, _google_, or _windowsazureactivedirectory_ if you're not using Facebook as your identity provider.\n\n```\n        - (void) loginAndGetData\n        {\n            MSClient *client = self.todoService.client;\n            if (client.currentUser != nil) {\n                return;\n            }\n\n            [client loginWithProvider:@\"facebook\" controller:self animated:YES completion:^(MSUser *user, NSError *error) {\n                [self refresh];\n            }];\n        }\n```\n\n* Replace `[self refresh]` in `viewDidLoad` with the following:\n\n```\n        [self loginAndGetData];\n```\n\n* Press  **Run** to start the app, and then log in. When you are logged in, you should be able to view the Todo list and make updates.\n\n### Client-managed Login (Single Sign-on)\n\nYou may do the login process outside the Mobile Services client, either to enable single sign-on or if your app contacts the identity provider directly. In such cases, you can log in to Mobile Services by providing a token obtained independently from a supported identity provider.\n\nThe following example uses the [Live Connect SDK] to enable single sign-on for iOS apps. It assumes that you have a **LiveConnectClient** instance named `liveClient` in the controller and the user is logged in.\n\n```\n\t[client loginWithProvider:@\"microsoftaccount\"\n\t\ttoken:@{@\"authenticationToken\" : self.liveClient.session.authenticationToken}\n\t\tcompletion:^(MSUser *user, NSError *error) {\n\t\t\t\t// Handle success and errors\n\t}];\n```\n\n## <a name=\"caching-tokens\"></a>How to: Cache Authentication Tokens\n\nLet's see how you may cache tokens in the [Mobile Services Quick Start] project; you may apply similar steps to any project.\n\n* The recommended way to encrypt and store authentication tokens on an iOS client is use the iOS Keychain. We'll use [SSKeychain](https://github.com/soffes/sskeychain) -- a simple wrapper around the iOS Keychain. Follow the instructions on the SSKeychain page and add it to your project. Verify that the **Enable Modules** setting is enabled in the project's **Build Settings** (section **Apple LLVM - Languages - Modules**.)\n\n\n## <a name=\"errors\"></a>How to: Handle Errors\n\nWhen you call a mobile service, the completion block contains an `NSError *error` parameter. When an error occurs, this parameter is non-nil. In your code, you should check this parameter and handle the error as needed.\n\nThe file [`<WindowsAzureMobileServices/MSError.h>`](https://github.com/Azure/azure-mobile-services/blob/master/sdk/iOS/src/MSError.h) defines the constants `MSErrorResponseKey`, `MSErrorRequestKey`, and `MSErrorServerItemKey` to get more data related to the error. In addition, the file defines constants for each error code. For an example on how to use these constants, see [Conflict-Handler] for its usage of `MSErrorServerItemKey` and `MSErrorPreconditionFailed`.\n\n<!-- Anchors. -->\n\n[What is Mobile Services]: #what-is\n[Concepts]: #concepts\n[Setup and Prerequisites]: #Setup\n[How to: Create the Mobile Services client]: #create-client\n[How to: Create a table reference]: #table-reference\n[How to: Query data from a mobile service]: #querying\n[Filter returned data]: #filtering\n[Sort returned data]: #sorting\n[Return data in pages]: #paging\n[Select specific columns]: #selecting\n[How to: Bind data to the user interface]: #binding\n[How to: Insert data into a mobile service]: #inserting\n[How to: Modify data in a mobile service]: #modifying\n[How to: Authenticate users]: #authentication\n[Cache authentication tokens]: #caching-tokens\n[How to: Upload images and large files]: #blobs\n[How to: Handle errors]: #errors\n[How to: Design unit tests]: #unit-testing\n[How to: Customize the client]: #customizing\n[Customize request headers]: #custom-headers\n[Customize data type serialization]: #custom-serialization\n[Next Steps]: #next-steps\n[How to: Use MSQuery]: #query-object\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[Mobile Services Quick Start]: mobile-services-ios-get-started.md\n[Get started with Mobile Services]: mobile-services-ios-get-started.md\n[Mobile Services SDK]: https://go.microsoft.com/fwLink/p/?LinkID=266533\n[Authentication]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-users-ios\n[iOS SDK]: https://developer.apple.com/xcode\n\n[Handling Expired Tokens]: http://go.microsoft.com/fwlink/p/?LinkId=301955\n[Live Connect SDK]: http://go.microsoft.com/fwlink/p/?LinkId=301960\n[Permissions]: http://msdn.microsoft.com/library/windowsazure/jj193161.aspx\n[Service-side Authorization]: mobile-services-javascript-backend-service-side-authorization.md\n[Dynamic Schema]: http://go.microsoft.com/fwlink/p/?LinkId=296271\n[Create a table]: http://msdn.microsoft.com/library/windowsazure/jj193162.aspx\n[NSDictionary object]: http://go.microsoft.com/fwlink/p/?LinkId=301965\n[ASCII control codes C0 and C1]: http://en.wikipedia.org/wiki/Data_link_escape_character#C1_set\n[CLI to manage Mobile Services tables]: https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-command-line-tools/#Mobile_Tables\n[Conflict-Handler]: mobile-services-ios-handling-conflicts-offline-data.md#add-conflict-handling\n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-android-get-started-push.md",
    "content": "\n<properties\n\tpageTitle=\"Get started with push notifications (Android JavaScript) | Microsoft Azure\"\n\tdescription=\"Learn how to use Azure Mobile Services to send push notifications to your Android JavaScript app.\"\n\tservices=\"mobile-services, notification-hubs\"\n\tdocumentationCenter=\"android\"\n\tauthors=\"RickSaling\"\n\twriter=\"ricksal\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-android\"\n\tms.devlang=\"java\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ricksal\"/>\n\n\n# Add push notifications to your Mobile Services Android app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-push.md)\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-javascript-backend-windows-phone-get-started-push.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started-push.md)\n- [(Android | Javascript)](mobile-services-javascript-backend-android-get-started-push.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-push.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-push.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-push.md)\n- [(Xamarin.Forms | JavaScript)](partner-xamarin-mobile-services-xamarin-forms-get-started-push.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Summary\n\nThis topic shows how to use Azure Mobile Services to send push notifications to your Android app using Google Cloud Messaging (\"GCM\"). You will add push notifications to the quickstart project that is a prerequisite for this tutorial. Push notifications are enabled by using the Azure Notification Hub that is included in your mobile service. When complete, your mobile service will send a push notification each time a record is inserted.\n\n## Prerequisites\n\nThis tutorial is based on the code you download in the Mobile Services quickstart. Before you start this tutorial, you must first complete either [Get started with Mobile Services] or [Add Mobile Services to an existing app].\n\n> [AZURE.IMPORTANT] If you completed the quickstart tutorial prior to the release of Azure Mobile Services Android SDK 2.0, you must re-do it, because the SDK is not backwards compatible. To verify the version, check the **dependencies** section of your project's **build.gradle** file.\n\n\n<!-- URLs.\n[Get started with Mobile Services]: mobile-services-android-get-started.md\n[Add Mobile Services to an existing app]: mobile-services-android-get-started-data.md\n-->\n\n## Sample code\nTo see the completed source code go [here](https://github.com/Azure/mobile-services-samples/tree/master/GettingStartedWithPush).\n\n## Enable Google Cloud Messaging\n\n\n1. Navigate to the [Google Cloud Console](https://console.developers.google.com/project), sign in with your Google account credentials.\n\n2. Click **Create Project**, type a project name, then click **Create**. If requested, carry out the SMS Verification, and click **Create** again.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/mobile-services-google-new-project.png)   \n\n\t Type in your new **Project name** and click **Create project**.\n\n3. Click the **Utilities and More** button and then click **Project Information**. Make a note of the **Project Number**. You will need to set this value as the `SenderId` variable in the client app.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/notification-hubs-utilities-and-more.png)\n\n\n4. In the project dashboard, under **Mobile APIs**, click **Google Cloud Messaging**, then on the next page click **Enable API** and accept the terms of service.\n\n\t![Enabling GCM](./media/mobile-services-enable-google-cloud-messaging/enable-GCM.png)\n\n\t![Enabling GCM](./media/mobile-services-enable-google-cloud-messaging/enable-gcm-2.png)\n\n5. In the project dashboard, Click **Credentials** > **Create Credential** > **API Key**.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/mobile-services-google-create-server-key.png)\n\n6. In **Create a new key**, click **Server key**, type a name for your key, then click **Create**.\n\n7. Make a note of the **API KEY** value.\n\n\tYou will use this API key value to enable Azure to authenticate with GCM and send push notifications on behalf of your app.\n\n\n## Configure Mobile Services to send push requests\n\n\n1. Log on to the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, and then click your app.\n\n2. Click the **Push** tab, enter the **API Key** value obtained from GCM in the previous procedure, then click **Save**.\n\n   \t![](./media/mobile-services-android-configure-push/mobile-push-tab-android.png)\n\n    >[AZURE.NOTE]When you set your GCM credentials for enhanced push notifications in the Push tab in the portal, they are shared with Notification Hubs to configure the notification hub with your app.\n\nBoth your mobile service and your app are now configured to work with GCM and Notification Hubs.\n\n## Add push notifications to your app\n\n\n\nYour next step is to install Google Play services. Google Cloud Messaging has some minimum API level requirements for development and testing, which the **minSdkVersion** property in the Manifest must conform to.\n\nIf you will be testing with an older device, then consult [Set Up Google Play Services SDK] to determine how low you can set this value, and set it appropriately.\n\n### Add Google Play Services to the project\n\n1. Open the Android SDK Manager by clicking the icon on the toolbar of Android Studio or by clicking **Tools** -> **Android** -> **SDK Manager** on the menu. Locate the target version of the Android SDK that is used in your project , open it, and choose **Google APIs**, if it is not already installed.\n\n2. Scroll down to **Extras**, expand it, and choose **Google Play Services**, as shown below. Click **Install Packages**. Note the SDK path, for use in the following step.\n\n   \t![](./media/notification-hubs-android-get-started/notification-hub-create-android-app4.png)\n\n\n3. Open the **build.gradle** file in the app directory.\n\n\t![](./media/mobile-services-android-get-started-push/android-studio-push-build-gradle.png)\n\n4. Add this line under *dependencies*:\n\n   \t\tcompile 'com.google.android.gms:play-services-gcm:8.4.0'\n\n5. Under *defaultConfig*, change *minSdkVersion* to 9.\n\n6. Click the **Sync Project with Gradle Files** icon in the tool bar.\n\n7. Open **AndroidManifest.xml** and add this tag to the *application* tag.\n\n        <meta-data android:name=\"com.google.android.gms.version\"\n            android:value=\"@integer/google_play_services_version\" />\n\n\n\n\n\n\n### Add code\n\n1. In your **app** project, open the file `AndroidManifest.xml`. In the code in the next two steps, replace _`**my_app_package**`_ with the name of the app package for your project, which is the value of the `package` attribute of the `manifest` tag.\n\n2. Add the following new permissions after the existing `uses-permission` element:\n\n        <permission android:name=\"**my_app_package**.permission.C2D_MESSAGE\"\n            android:protectionLevel=\"signature\" />\n        <uses-permission android:name=\"**my_app_package**.permission.C2D_MESSAGE\" />\n        <uses-permission android:name=\"com.google.android.c2dm.permission.RECEIVE\" />\n        <uses-permission android:name=\"android.permission.GET_ACCOUNTS\" />\n        <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n\n3. Add the following code after the `application` opening tag:\n\n        <receiver android:name=\"com.microsoft.windowsazure.notifications.NotificationsBroadcastReceiver\"\n            \t\t\t\t\t\t \tandroid:permission=\"com.google.android.c2dm.permission.SEND\">\n            <intent-filter>\n                <action android:name=\"com.google.android.c2dm.intent.RECEIVE\" />\n                <category android:name=\"**my_app_package**\" />\n            </intent-filter>\n        </receiver>\n\n\n4. Add this line under *dependencies* in the **build.gradle** file in the app directory and re-sync gradle with the project:\n\n\t    compile(group: 'com.microsoft.azure', name: 'azure-notifications-handler', version: '1.0.1', ext: 'jar')\n\n\n5. Open the file *ToDoItemActivity.java*, and add the following import statement:\n\n\t\timport com.microsoft.windowsazure.notifications.NotificationsManager;\n\n\n6. Add the following private variable to the class: replace _`<PROJECT_NUMBER>`_ with the Project Number assigned by Google to your app in the preceding procedure:\n\n\t\tpublic static final String SENDER_ID = \"<PROJECT_NUMBER>\";\n\n7. Change the definition of the *MobileServiceClient* from **private** to **public static**, so it now looks like this:\n\n\t\tpublic static MobileServiceClient mClient;\n\n\n\n8. Next we need to add a new class to handle notifications. In the Project Explorer, open the **src** => **main** => **java** nodes, and right-click the  package name node: click **New**, then click **Java Class**.\n\n9. In **Name** type `MyHandler`, then click **OK**.\n\n\n\t![](./media/mobile-services-android-get-started-push/android-studio-create-class.png)\n\n\n10. In the MyHandler file, replace the class declaration with\n\n\t\tpublic class MyHandler extends NotificationsHandler {\n\n\n11. Add the following import statements for the `MyHandler` class:\n\n\t\timport android.app.NotificationManager;\n\t\timport android.app.PendingIntent;\n\t\timport android.content.Context;\n\t\timport android.content.Intent;\n\t\timport android.os.AsyncTask;\n\t\timport android.os.Bundle;\n\t\timport android.support.v4.app.NotificationCompat;\n\n\n12. Next add the following members for the `MyHandler` class:\n\n\t\tpublic static final int NOTIFICATION_ID = 1;\n\t\tprivate NotificationManager mNotificationManager;\n\t\tNotificationCompat.Builder builder;\n\t\tContext ctx;\n\n\n13. In the `MyHandler` class, add the following code to override the **onRegistered** method, which registers your device with the mobile service Notification Hub.\n\n\t\t@Override\n\t\tpublic void onRegistered(Context context,  final String gcmRegistrationId) {\n\t\t    super.onRegistered(context, gcmRegistrationId);\n\n\t\t    new AsyncTask<Void, Void, Void>() {\n\n\t\t    \tprotected Void doInBackground(Void... params) {\n\t\t    \t\ttry {\n\t\t    \t\t    ToDoActivity.mClient.getPush().register(gcmRegistrationId, null);\n\t\t    \t\t    return null;\n\t    \t\t    }\n\t    \t\t    catch(Exception e) {\n\t\t\t    \t\t// handle error    \t\t    \n\t    \t\t    }\n\t\t\t\t\treturn null;  \t\t    \n\t    \t\t}\n\t\t    }.execute();\n\t\t}\n\n\n\n14. In the `MyHandler` class, add the following code to override the **onReceive** method, which causes the notification to display when it is received.\n\n\t\t@Override\n\t\tpublic void onReceive(Context context, Bundle bundle) {\n\t\t    ctx = context;\n\t\t    String nhMessage = bundle.getString(\"message\");\n\n\t\t    sendNotification(nhMessage);\n\t\t}\n\n\t\tprivate void sendNotification(String msg) {\n\t\t\tmNotificationManager = (NotificationManager)\n\t\t              ctx.getSystemService(Context.NOTIFICATION_SERVICE);\n\n\t\t    PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,\n\t\t          new Intent(ctx, ToDoActivity.class), 0);\n\n\t\t    NotificationCompat.Builder mBuilder =\n\t\t          new NotificationCompat.Builder(ctx)\n\t\t          .setSmallIcon(R.drawable.ic_launcher)\n\t\t          .setContentTitle(\"Notification Hub Demo\")\n\t\t          .setStyle(new NotificationCompat.BigTextStyle()\n\t\t                     .bigText(msg))\n\t\t          .setContentText(msg);\n\n\t\t     mBuilder.setContentIntent(contentIntent);\n\t\t     mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());\n\t\t}\n\n\n15. Back in the TodoActivity.java file, update the **onCreate** method of the *ToDoActivity* class to register the notification handler class. Make sure to add this code after the *MobileServiceClient* is instantiated.\n\n\n\t\tNotificationsManager.handleNotifications(this, SENDER_ID, MyHandler.class);\n\n    Your app is now updated to support push notifications.\n\n<!-- URLs. -->\n[Mobile Services Android SDK]: http://aka.ms/Iajk6q\n\n\n\n## Update the registered insert script in the Azure classic portal\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click the **Data** tab and then click the **TodoItem** table.\n\n2. In **todoitem**, click the **Script** tab and select **Insert**.\n\n   \tThis displays the function that is invoked when an insert occurs in the **TodoItem** table.\n\n3. Replace the insert function with the following code, and then click **Save**:\n\n\t\tfunction insert(item, user, request) {\n\t\t// Define a simple payload for a GCM notification.\n\t    var payload = {\n\t        \"data\": {\n\t            \"message\": item.text\n\t        }\n\t    };\t\t\n\t\trequest.execute({\n\t\t    success: function() {\n\t\t        // If the insert succeeds, send a notification.\n\t\t        push.gcm.send(null, payload, {\n\t\t            success: function(pushResponse) {\n\t\t                console.log(\"Sent push:\", pushResponse, payload);\n\t\t                request.respond();\n\t\t                },              \n\t\t            error: function (pushResponse) {\n\t\t                console.log(\"Error Sending push:\", pushResponse);\n\t\t                request.respond(500, { error: pushResponse });\n\t\t                }\n\t\t            });\n\t\t        },\n\t\t    error: function(err) {\n\t\t        console.log(\"request.execute error\", err)\n\t\t        request.respond();\n\t\t    }\n\t\t  });\n\t\t}\n\n   \tThis registers a new insert script, which uses the [gcm object](http://go.microsoft.com/fwlink/p/?LinkId=282645) to send a push notification to all registered devices after the insert succeeds.\n\n\n## Test push notifications in your app\n\nYou can test the app by directly attaching an Android phone with a USB cable, or by using a virtual device in the emulator.\n\n### Setting up the Android emulator for testing\n\nWhen you run this app in the emulator, make sure that you use an Android Virtual Device (AVD) that supports Google APIs.\n\n1. From the right end of the toolbar, select the Android Virtual Device Manager, select your device, click the edit icon on the right.\n\n\t![](./media/mobile-services-javascript-backend-android-get-started-push/mobile-services-android-virtual-device-manager.png)\n\n2. Select **Change** on the device description line, select **Google APIs**,  then click OK.\n\n   \t![](./media/mobile-services-javascript-backend-android-get-started-push/mobile-services-android-virtual-device-manager-edit.png)\n\n\tThis targets the AVD to use Google APIs.\n\n### Running the test\n\n1. From the **Run** menu item, click **Run app** to start the app.\n\n2. In the app, type meaningful text, such as _A new Mobile Services task_ and then click the **Add** button.\n\n  \t![](./media/mobile-services-javascript-backend-android-get-started-push/mobile-quickstart-push1-android.png)\n\n3. Swipe down from the top of the screen to open the device's Notification Drawer to see the notification.\n\n\nYou have successfully completed this tutorial.\n\n## Troubleshooting\n\n### Verify Android SDK Version\n\nBecause of ongoing development, the Android SDK version installed in Android Studio might not match the version in the code. The Android SDK referenced in this tutorial is version 21, the latest at the time of writing. The version number may increase as new releases of the SDK appear, and we recomend using the latest version available.\n\nTwo symptoms of version mismatch are:\n\n1. When you Build or Rebuild the project, you may get Gradle error messages like \"**failed to find target Google Inc.:Google APIs:n**\".\n\n2. Standard Android objects in code that should resolve based on `import` statements may be generating error messages.\n\nIf either of these appear, the version of the Android SDK installed in Android Studio might not match the SDK target of the downloaded project.  To verify the version, make the following changes:\n\n\n1. In Android Studio, click **Tools** => **Android** => **SDK Manager**. If you have not installed the latest version of the SDK Platform, then click to install it. Make a note of the version number.\n\n2. In the Project Explorer tab, under **Gradle Scripts**, open the file **build.gradle (modeule: app)**. Ensure that the **compileSdkVersion** and **buildToolsVersion** are set to the latest  SDK version installed. The tags might look like this:\n\n\t \t    compileSdkVersion 'Google Inc.:Google APIs:21'\n    \t\tbuildToolsVersion \"21.1.2\"\n\n3. In the Android Studio Project Explorer right-click the project node, choose **Properties**, and in the left column choose **Android**. Ensure that the **Project Build Target** is set to the same SDK version as the **targetSdkVersion**.\n\n4. In Android Studio, the manifest file is no longer used to specify the target SDK and minimum SDK version, unlike the case with Eclipse.\n\n## Next steps\n\n<!---This tutorial demonstrated the basics of enabling an Android app to use Mobile Services and Notification Hubs to send push notifications. Next, consider completing the next tutorial, [Send push notifications to authenticated users], which shows how to use tags to send push notifications from a Mobile Service to only an authenticated user.\n\n+ [Send broadcast notifications to subscribers]\n\t<br/>Learn how users can register and receive push notifications for categories they're interested in.\n\n+ [Send template-based notifications to subscribers]\n\t<br/>Learn how to use templates to send push notifications from a Mobile Service, without having to craft platform-specific payloads in your back-end.\n-->\n\nLearn more about Mobile Services and Notification Hubs in the following topics:\n\n* [Get started with authentication]\n  <br/>Learn how to authenticate users of your app with different account types using mobile services.\n\n* [What are Notification Hubs?]\n  <br/>Learn more about how Notification Hubs works to deliver notifications to your apps across all major client platforms.\n\n* [Debug Notification Hubs applications](http://go.microsoft.com/fwlink/p/?linkid=386630)\n  </br>Get guidance troubleshooting and debugging Notification Hubs solutions.\n\n* [How to use the Android client library for Mobile Services]\n  <br/>Learn more about how to use Mobile Services with Android.\n\n* [Mobile Services server script reference]\n  <br/>Learn more about how to implement business logic in your mobile service.\n\n\n<!-- Anchors. -->\n[Register your app for push notifications and configure Mobile Services]: #register\n[Update the generated push notification code]: #update-scripts\n[Insert data to receive notifications]: #test\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n[13]: ./media/mobile-services-windows-store-javascript-get-started-push/mobile-quickstart-push1.png\n[14]: ./media/mobile-services-windows-store-javascript-get-started-push/mobile-quickstart-push2.png\n\n\n<!-- URLs. -->\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[My Applications]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n[Get started with Mobile Services]: mobile-services-android-get-started.md\n[Get started with authentication]: mobile-services-android-get-started-users.md\n[Get started with push notifications]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-js\n[Push notifications to app users]: https://azure.microsoft.com/develop/mobile/tutorials/push-notifications-to-users-js\n[Authorize users with scripts]: https://azure.microsoft.com/develop/mobile/tutorials/authorize-users-in-scripts-js\n[JavaScript and HTML]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-js\n[Set Up Google Play Services SDK]: http://go.microsoft.com/fwlink/?LinkId=389801\n[Azure classic portal]: https://manage.windowsazure.com/\n[How to use the Android client library for Mobile Services]: mobile-services-android-how-to-use-client-library.md\n\n[gcm object]: http://go.microsoft.com/fwlink/p/?LinkId=282645\n\n[Mobile Services server script reference]: http://go.microsoft.com/fwlink/?LinkId=262293\n[What are Notification Hubs?]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-push-notification-overview/\n[Send broadcast notifications to subscribers]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-aspnet-backend-android-xplat-segmented-gcm-push-notification/\n[Send template-based notifications to subscribers]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-aspnet-backend-android-xplat-segmented-gcm-push-notification/\n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-define-custom-api.md",
    "content": "<properties\n\tpageTitle=\"How to define a custom API in a JavaScript backend mobile service | Azure Mobile Services\"\n\tdescription=\"Learn how to define a custom API endpoint in a JavaScript backend mobile service.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-multiple\"\n\tms.devlang=\"javascript\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n\n# How to: define a custom API endpoint in a JavaScript backend mobile service\n\n> [AZURE.SELECTOR]\n- [JavaScript backend](./mobile-services-javascript-backend-define-custom-api.md)\n- [.NET backend](./mobile-services-dotnet-backend-define-custom-api.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows you how to define a custom API endpoint in a JavaScript backend mobile service. A custom API lets you define custom endpoints with server functionality, but it does not map to a database insert, update, delete, or read operation. By using a custom API, you have more control over messaging, including HTTP headers and body format.\n\n\n\n1. Log into the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, and then select your mobile service.\n\n2. Click the **API** tab, and then click **Create**. This displays the **Create a new custom API** dialog.\n\n3. Type _completeall_ in **API name**, and then click the check button to create the new API.\n\n\t> [AZURE.TIP] With default permissions, anyone with the app key may call the custom API. However, the application key is not considered a secure credential because it may not be distributed or stored securely. Consider restricting access to only authenticated users for additional security.\n\n4. Click on **completeall** in the API table.\n\n5. Click the **Script** tab, replace the existing code with the following code, then click **Save**. \tThis code uses the [mssql object] to access the **todoitem** table directly to set the `complete` flag on all items. Because the **exports.post** function is used, clients send a POST request to perform the operation. The number of changed rows is returned to the client as an integer value.\n\n\n\t\texports.post = function(request, response) {\n\t\t\tvar mssql = request.service.mssql;\n\t\t\tvar sql = \"UPDATE todoitem SET complete = 1 \" +\n                \"WHERE complete = 0; SELECT @@ROWCOUNT as count\";\n\t\t\tmssql.query(sql, {\n\t\t\t\tsuccess: function(results) {\n\t\t\t\t\tif(results.length == 1)\n\t\t\t\t\t\tresponse.send(200, results[0]);\n\t\t\t\t}\n\t\t\t})\n\t\t};\n\n\n> [AZURE.NOTE] The [request](http://msdn.microsoft.com/library/windowsazure/jj554218.aspx) and [response](http://msdn.microsoft.com/library/windowsazure/dn303373.aspx) object supplied to custom API functions are implemented by the [Express.js library](http://go.microsoft.com/fwlink/p/?LinkId=309046).\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[mssql object]: http://msdn.microsoft.com/library/windowsazure/jj554212.aspx\n\nFor information on how to invoke a custom API in your app using a Mobile Services client library, see [Call a custom API](mobile-services-windows-dotnet-how-to-use-client-library.md#custom-api) in the client SDK reference.\n\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n<!-- URLs. -->\n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-ios-get-started-push.md",
    "content": "<properties\n\tpageTitle=\"Add Push Notifications to App (iOS) | JavaScript Backend\"\n\tdescription=\"Learn how to use Azure Mobile Services to send push notifications to your iOS app.\"\n\tservices=\"mobile-services,notification-hubs\"\n\tdocumentationCenter=\"ios\"\n\tmanager=\"dwrede\"\n\teditor=\"\"\n\tauthors=\"krisragh\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh\"/>\n\n# Add Push Notifications to iOS App and JavaScript Backend\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-push.md)\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-javascript-backend-windows-phone-get-started-push.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started-push.md)\n- [(Android | Javascript)](mobile-services-javascript-backend-android-get-started-push.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-push.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-push.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-push.md)\n- [(Xamarin.Forms | JavaScript)](partner-xamarin-mobile-services-xamarin-forms-get-started-push.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows you how to add push notifications to the [quickstart project](mobile-services-ios-get-started.md), so that your mobile service sends a push notification each time a record is inserted. You must complete [Get Started with Mobile Services] first.\n\n> [AZURE.NOTE] The [iOS simulator does not support push notifications](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/iOS_Simulator_Guide/TestingontheiOSSimulator.html), so you must use a physical iOS device. You'll also need to sign up for a paid [Apple Developer Program membership](https://developer.apple.com/programs/ios/).\n\n\n* [Register an App ID for your app](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingProfiles/MaintainingProfiles.html#//apple_ref/doc/uid/TP40012582-CH30-SW991). Create an explicit App ID (not a wildcard App ID) and for **Bundle ID**, use the exact **Bundle ID** that is in your Xcode quickstart project. It is also crucial that you check the **Push Notifications** option.\n\n* Next, [configuring push notifications](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/AddingCapabilities/AddingCapabilities.html#//apple_ref/doc/uid/TP40012582-CH26-SW6). You may create either a \"Development\" or \"Distribution\" SSL certificate (remember to select the corresponding option in the Azure portal later.)\n\n\n## <a id=\"configure\"></a>Configure Azure to Send Push Notifications\n\n\n* Follow the steps at [Installing a Client SSL Signing Identity on the Server](https://developer.apple.com/library/prerelease/ios/documentation/IDEs/Conceptual/AppDistributionGuide/AddingCapabilities/AddingCapabilities.html#//apple_ref/doc/uid/TP40012582-CH26-SW16) to export the certificate you downloaded in the previous step to a .p12 file.\n\n* In the Azure classic portal, click **Mobile Services** > your app > the **Push** tab > **apple push notification settings** > \"**Upload**. Upload the .p12 file, making sure that the correct **Mode** is selected (either Sandbox or Production, corresponding to whether the client SSL certificate you generated was Development or Distribution.) Your mobile service is now configured to work with push notifications on iOS!\n\n## <a id=\"update-scripts\"></a>Update Backend Script to Send Push Notifications\n\n* In the [Azure classic portal], click the **Data** tab and then click **TodoItem**. In **TodoItem**, click the **Script** tab and select **Insert**. This displays the function that is invoked when an insert occurs in the **TodoItem** table.\n\n* Replace the insert function with the following code, and then click **Save**.  This registers a new insert script, which uses the [apns object] to send a push notification (the inserted text) to the device provided in the insert request. This script delays sending the notification to give you time to close the app to receive a push notification.\n\n\n```\n        function insert(item, user, request) {\n            request.execute();\n            // Set timeout to delay the notification, to provide time for the\n            // app to be closed on the device to demonstrate push notifications\n            setTimeout(function() {\n                push.apns.send(null, {\n                    alert: \"Alert: \" + item.text,\n                    payload: {\n                        inAppMessage: \"Hey, a new item arrived: '\" + item.text + \"'\"\n                    }\n                });\n            }, 2500);\n        }\n```\n\n\n## <a id=\"add-push\"></a>Add Push Notifications to App\n\n* In QSAppDelegate.m, import the iOS SDK and QSTodoService.h:\n\n```\n        #import <WindowsAzureMobileServices/WindowsAzureMobileServices.h>\n        #import \"QSTodoService.h\"\n```\n\n* In `didFinishLaunchingWithOptions` in QSAppDelegate.m, insert the following lines right before `return YES;`:\n\n```\n        UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];\n        [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];\n        [[UIApplication sharedApplication] registerForRemoteNotifications];\n```\n\n* In QSAppDelegate.m, add the following handler methods. Your app is now updated to support push notifications.\n\n```\n        // Registration with APNs is successful\n        - (void)application:(UIApplication *)application\n        didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {\n\n            QSTodoService *todoService = [QSTodoService defaultService];\n            MSClient *client = todoService.client;\n\n            [client.push registerNativeWithDeviceToken:deviceToken tags:nil completion:^(NSError *error) {\n                if (error != nil) {\n                    NSLog(@\"Error registering for notifications: %@\", error);\n                }\n            }];\n        }\n\n        // Handle any failure to register\n        - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:\n        (NSError *)error {\n            NSLog(@\"Failed to register for remote notifications: %@\", error);\n        }\n\n        // Use userInfo in the payload to display a UIAlertView.\n        - (void)application:(UIApplication *)application\n              didReceiveRemoteNotification:(NSDictionary *)userInfo {\n            NSLog(@\"%@\", userInfo);\n\n            NSDictionary *apsPayload = userInfo[@\"aps\"];\n            NSString *alertString = apsPayload[@\"alert\"];\n\n            UIAlertView *alert = [[UIAlertView alloc]\n              initWithTitle:@\"Notification\"\n              message:alertString\n              delegate:nil\n              cancelButtonTitle:@\"OK\"\n              otherButtonTitles:nil];\n            [alert show];\n        }\n```\n\n\n* In Xcode, press **Run** and start the app on an iOS device (not the simulator.) Click **OK** to accept push notifications; this request occurs the first time the app runs.\n\n* In the app, add a new item and click **+**.\n\n* Verify that a notification is received, then click **OK** to dismiss the notification. You have now successfully completed this tutorial.\n\n  \t![](media/mobile-services-ios-get-started-push/mobile-quickstart-push3-ios.png)\n\n\n<!-- Anchors. -->\n\n\n<!-- Images. -->\n[5]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step5.png\n[6]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step6.png\n[7]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step7.png\n\n[9]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step9.png\n[10]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step10.png\n[17]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step17.png\n[18]: ./media/mobile-services-ios-get-started-push/mobile-services-selection.png\n[19]: ./media/mobile-services-ios-get-started-push/mobile-push-tab-ios.png\n[20]: ./media/mobile-services-ios-get-started-push/mobile-push-tab-ios-upload.png\n[21]: ./media/mobile-services-ios-get-started-push/mobile-portal-data-tables.png\n[22]: ./media/mobile-services-ios-get-started-push/mobile-insert-script-push2.png\n[23]: ./media/mobile-services-ios-get-started-push/mobile-quickstart-push1-ios.png\n[24]: ./media/mobile-services-ios-get-started-push/mobile-quickstart-push2-ios.png\n[25]: ./media/mobile-services-ios-get-started-push/mobile-quickstart-push3-ios.png\n[26]: ./media/mobile-services-ios-get-started-push/mobile-quickstart-push4-ios.png\n[28]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-step18.png\n\n[101]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-01.png\n[102]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-02.png\n[103]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-03.png\n[104]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-04.png\n[105]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-05.png\n[106]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-06.png\n[107]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-07.png\n[108]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-08.png\n\n[110]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-10.png\n[111]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-11.png\n[112]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-12.png\n[113]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-13.png\n[114]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-14.png\n[115]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-15.png\n[116]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-16.png\n[117]: ./media/mobile-services-ios-get-started-push/mobile-services-ios-push-17.png\n\n<!-- URLs.   -->\n[Install Xcode]: https://go.microsoft.com/fwLink/p/?LinkID=266532\n[iOS Provisioning Portal]: http://go.microsoft.com/fwlink/p/?LinkId=272456\n[Mobile Services iOS SDK]: https://go.microsoft.com/fwLink/p/?LinkID=266533\n[Apple Push Notification Service]: http://go.microsoft.com/fwlink/p/?LinkId=272584\n[Get started with Mobile Services]: mobile-services-ios-get-started.md\n[Get started with authentication]: mobile-services-ios-get-started-users.md\n[Azure classic portal]: https://manage.windowsazure.com/\n[apns object]: http://go.microsoft.com/fwlink/p/?LinkId=272333\n\n[Mobile Services server script reference]: http://go.microsoft.com/fwlink/?LinkId=262293\n\n[Send push notifications to authenticated users]: mobile-services-javascript-backend-ios-push-notifications-app-users.md\n[What are Notification Hubs?]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-push-notification-overview/\n[Send broadcast notifications to subscribers]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-ios-xplat-segmented-apns-push-notification/\n[Send template-based notifications to subscribers]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-ios-xplat-localized-apns-push-notification/\n[Mobile Services Objective-C how-to conceptual reference]: mobile-services-windows-dotnet-how-to-use-client-library.md\n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-ios-push-notifications-app-users.md",
    "content": "<properties\n\tpageTitle=\"Send Push Notifications to Authenticated Users in iOS (JavaScript backend)\"\n\tdescription=\"Learn how to send push notifications to specific users\"\n\tservices=\"mobile-services,notification-hubs\"\n\tdocumentationCenter=\"ios\"\n\tauthors=\"krisragh\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh\"/>\n\n# Send Push Notifications to Authenticated Users\n\n> [AZURE.SELECTOR-LIST (Platform | Backend)]\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-push-notifications-app-users.md)\n- [(Windows 8.x Store C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-push-notifications-app-users.md)\n- [(Windows 8.x Store C# | JavaScript)](mobile-services-javascript-backend-windows-store-dotnet-push-notifications-app-users.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nIn this topic, you learn how to send push notifications to an authenticated user on iOS. Before starting this tutorial, complete [Get started with authentication] and [Get started with push notifications] first.\n\nIn this tutorial, you require users to authenticate first, register with the notification hub for push notifications, and update server scripts to send those notifications to only authenticated users.\n\n\n## <a name=\"register\"></a>Update Service to Require Authentication to Register\n\n\n1. Log on to the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, and then click your mobile service.\n\n2. Click the **Push** tab, select **Only Authenticated Users** for **Permissions**, click **Save**, and then click **Edit Script**.\n\n\tThis allows you to customize the push notification registration callback function. If you use Git to edit your source code, this same registration function is found in `.\\service\\extensions\\push.js`.\n\n3. Replace the existing **register** function with the following code and then click **Save**:\n\n\t\texports.register = function (registration, registrationContext, done) {   \n\t\t    // Get the ID of the logged-in user.\n\t\t\tvar userId = registrationContext.user.userId;    \n\n\t\t\t// Perform a check here for any disallowed tags.\n\t\t\tif (!validateTags(registration))\n\t\t\t{\n\t\t\t\t// Return a service error when the client tries\n\t\t        // to set a user ID tag, which is not allowed.\t\t\n\t\t\t\tdone(\"You cannot supply a tag that is a user ID\");\t\t\n\t\t\t}\n\t\t\telse{\n\t\t\t\t// Add a new tag that is the user ID.\n\t\t\t\tregistration.tags.push(userId);\n\n\t\t\t\t// Complete the callback as normal.\n\t\t\t\tdone();\n\t\t\t}\n\t\t};\n\n\t\tfunction validateTags(registration){\n\t\t    for(var i = 0; i < registration.tags.length; i++) {\n\t\t        console.log(registration.tags[i]);           \n\t\t\t\tif (registration.tags[i]\n\t\t\t\t.search(/facebook:|twitter:|google:|microsoft:/i) !== -1){\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\tThis adds a tag to the registration that is the ID of the logged-in user. The supplied tags are validated to prevent a user from registering for another user's ID. When a notification is sent to this user, it is received on this and any other device registered by the user.\n\n4. Click the back arrow, click the **Data** tab, click **TodoItem**, click **Script**, and then select **Insert**.\n\nReplace the `insert` function with the following code, then click **Save**. This insert script uses the user ID tag to send a push notification to all iOS app registrations from the logged-in user:\n\n```\n// Get the ID of the logged-in user.\nvar userId = user.userId;\n\nfunction insert(item, user, request) {\n    request.execute();\n    setTimeout(function() {\n        push.apns.send(userId, {\n            alert: \"Alert: \" + item.text,\n            payload: {\n                \"Hey, a new item arrived: '\" + item.text + \"'\"\n            }\n        });\n    }, 2500);\n}\n```\n\n## <a name=\"update-app\"></a>Update App to Login Before Registration\n\n\nNext, you need to change the way that push notifications are registered so that a user is authenticated before registration is attempted.\n\n1. In **QSAppDelegate.m**, remove the implementation of **didFinishLaunchingWithOptions** altogether.\n\n2. Open **QSTodoListViewController.m** and add the following code to the end of the **viewDidLoad** method:\n\n```\n// Register for remote notifications\n[[UIApplication sharedApplication] registerForRemoteNotificationTypes:\nUIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];\n```\n\n## <a name=\"test\"></a>Test App\n\n\n1. Press **Run** to start the app on a physical iOS device. In the app, add a new item, such as _A new Mobile Services task_, to the todo list.\n\n2. Verify that a notification is received. Additionally -- and optionally -- repeat the above steps on a different physical iOS device, once using the same log-in account and another time using a different log-in account. Verify that notifications are received only by devices authenticating with the same user account.\n\n\n\n<!-- Anchors. -->\n[Updating the service to require authentication for registration]: #register\n[Updating the app to log in before registration]: #update-app\n[Testing the app]: #test\n[Next Steps]:#next-steps\n\n\n<!-- URLs. -->\n[Get started with authentication]: mobile-services-ios-get-started-users.md\n[Get started with push notifications]: mobile-services-javascript-backend-ios-get-started-push.md\n[Mobile Services .NET How-to Conceptual Reference]: mobile-services-ios-how-to-use-client-library.md\n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-phonegap-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get started with Azure Mobile Services for PhoneGap/cordova apps | Microsoft Azure\"\n\tdescription=\"Follow this tutorial to get started using Azure Mobile Services for PhoneGap development for iOS, Android, and Windows Phone.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-phonegap\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"get-started-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"ggailey777\"/>\n\n# Get started with Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n&nbsp;\n\n>[AZURE.TIP] This topic shows you how to get started with Mobile Services as quickly as possible. It is designed for customers new to this Azure feature. If you are already familiar with Mobile Services or are looking for more in-depth information, please select a topic from the left-navigation or see the relevant links in [Next steps](#next-steps).\n\n\nThis tutorial shows you how to add a cloud-based backend service to an app using Azure Mobile Services. In this tutorial, you will create both a new mobile service and a simple _To do list_ app that stores app data in the new mobile service.\n\nA screenshot from the completed app is below:\n\n![][3]\n\n### Additional Requirements\n\nCompleting this tutorial requires the following:\n\n+ PhoneGap tools (v3.2+ required for Windows Phone 8 projects).\n\n+ An active Microsoft Azure account.\n\n+ PhoneGap supports developing for multiple platforms. In addition to the PhoneGap tools themselves, you must install the tools for each platform you are targeting:\n\n\t- Windows Phone: Install [Visual Studio 2012 Express for Windows Phone](https://go.microsoft.com/fwLink/p/?LinkID=268374)\n\t- iOS: Install [Xcode] (v4.4+ required)\n\t- Android: Install the [Android Developer Tools][Android SDK]\n\t\t<br/>(The Mobile Services SDK for Android supports apps for Android 2.2 or a later version. Android 4.2 or higher is required to run the quick start app.)\n\n## Create a new mobile service\n\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** dialog, select **Create a free 20 MB SQL Database**, select **JavaScript** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t>[AZURE.NOTE]As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n\n## Create a new PhoneGap app\n\nIn this section you will create a new PhoneGap app that is connected to your mobile service.\n\n1.  In the [Azure classic portal], click **Mobile Services**, and then click the mobile service that you just created.\n\n2. In the quickstart tab, click **PhoneGap** under **Choose platform** and expand **Create a new PhoneGap app**.\n\n   \t![][0]\n\n   \tThis displays the three easy steps to create a PhoneGap app connected to your mobile service.\n\n  \t![][1]\n\n3. If you haven't already done so, download and install PhoneGap and at least one of the platform development tools (Windows Phone, iOS, or Android).\n\n4. Click **Create TodoItem table** to create a table to store app data.\n\n5. Under **Download and run your app**, click **Download**.\n\n\tThis downloads the project for the sample _To do list_ application that is connected to your mobile service, along with the Mobile Services JavaScript SDK. Save the compressed project file to your local computer, and make a note of where you saved it.\n\n## Run your new PhoneGap app\n\nThe final stage of this tutorial is to build and run your new app.\n\n1.\tBrowse to the location where you saved the compressed project files and expand the files on your computer.\n\n2.\tOpen and run the project according to the instructions below for each platform.\n\n\t+ **Windows Phone 8**\n\n\t\t1. Windows Phone 8: Open the .sln file in the **platforms\\wp8** folder in Visual Studio 2012 Express for Windows Phone.\n\n\t\t2. Press the **F5** key to rebuild the project and start the app.\n\n\t  \t![][2]\n\n\t+ **iOS**\n\n\t\t1. Open the project in the **platforms/ios** folder in Xcode.\n\n\t\t2. Press the **Run** button to build the project and start the app in the iPhone emulator, which is the default for this project.\n\n\t  \t![][3]\n\n\t+ **Android**\n\n\t\t1. In Eclipse, click **File** then **Import**, expand **Android**, click **Existing Android Code into Workspace**, and then click **Next.**\n\n\t\t2. Click **Browse**, browse to the location of the expanded project files, click **OK**, make sure that the TodoActivity project is checked, then click **Finish**. <p>This imports the project files into the current workspace.</p>\n\n\t\t3. From the **Run** menu, click **Run** to start the project in the Android emulator.\n\n\t\t\t![][4]\n\n\t\t>[AZURE.NOTE]To be able to run the project in the Android emulator, you must define a least one Android Virtual Device (AVD). Use the AVD Manager to create and manage these devices.\n\n\n3. After launching the app in one of the mobile emulators above, type some text into the textbox and then click **Add**.\n\n\tThis sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the **TodoItem** table. Items stored in the table are returned by the mobile service, and the data is displayed in the list.\n\n\t> [AZURE.IMPORTANT] Changes to this platform project will be overwritten if the main project is rebuilt with the PhoneGap tools. Instead, make changes in the project's root www directory as outlined in the section below.\n\n4. Back in the [Azure classic portal], click the **Data** tab and then click the **TodoItem** table.\n\n\t![](./media/mobile-services-javascript-backend-phonegap-get-started/mobile-data-tab.png)\n\n\tThis lets you browse the data inserted by the app into the table.\n\n\t![](./media/mobile-services-javascript-backend-phonegap-get-started/mobile-data-browse.png)\n\n\n## Make app updates and rebuild projects for each platform\n\n1. Make changes to code files in the ´www´ directory, which in this case is ´todolist/www´.\n\n2. Verify that all of the target platform tools are accessible in the system path.\n\n2. Open a command prompt in the root project directory, and run one of the following platform-specific commands:\n\n\t+ **Windows Phone**\n\n\t\tRun the following command from the Visual Studio Developer command prompt:\n\n    \t\tphonegap local build wp8\n\n\t+ **iOS**\n\n\t\tOpen terminal and run the following command:\n\n    \t\tphonegap local build ios\n\n\t+ **Android**\n\n\t\tOpen a command prompt or terminal window and run the following command.\n\n\t\t    phonegap local build android\n\n4. Open each project in the appropriate development environment as outlined in the previous section.\n\n>[AZURE.NOTE]You can review the code that accesses your mobile service to query and insert data, which is found in the js/index.js file.\n\n## Next Steps\nNow that you have completed the quickstart, learn how to perform additional important tasks in Mobile Services:\n\n* **[Add authentication to your app]**  \n  Learn how to authenticate users of your app with an identity provider.  \n\n* **[Add push notifications to your app](https://msdn.microsoft.com/magazine/dn879353.aspx)**  \n  Learn how to register for and send push notifications to your app.\n\n* **[Mobile Services HTML/JavaScript How-to Conceptual Reference](mobile-services-html-how-to-use-client-library.md)**  \n  Learn more about how to use the JavaScript client library to access data, call custom APIs, and perform authentication.\n\n<!-- Images. -->\n[0]: ./media/mobile-services-javascript-backend-phonegap-get-started/portal-screenshot1.png\n[1]: ./media/mobile-services-javascript-backend-phonegap-get-started/portal-screenshot2.png\n[2]: ./media/mobile-services-javascript-backend-phonegap-get-started/mobile-portal-quickstart-wp8.png\n[3]: ./media/mobile-services-javascript-backend-phonegap-get-started/mobile-portal-quickstart-ios.png\n[4]: ./media/mobile-services-javascript-backend-phonegap-get-started/mobile-portal-quickstart-android.png\n\n<!-- URLs. -->\n[Add authentication to your app]: mobile-services-html-get-started-users.md\n[Android SDK]: https://go.microsoft.com/fwLink/p/?LinkID=280125\n[Azure classic portal]: https://manage.windowsazure.com/\n[Xcode]: https://go.microsoft.com/fwLink/p/?LinkID=266532\n[Visual Studio 2012 Express for Windows Phone]: https://go.microsoft.com/fwLink/p/?LinkID=268374\n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-service-side-authorization.md",
    "content": "<properties\n\tpageTitle=\"Service-side authorization of users in a JavaScript backend mobile service | Microsoft Azure\"\n\tdescription=\"Learn how to authorize users in JavaScript backend of Azure Mobile Services\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"krisragh\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-multiple\"\n\tms.topic=\"article\"\n\tms.devlang=\"javascript\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"krisragh\"/>\n\n# Service-side authorization of users in Mobile Services\n> [AZURE.SELECTOR]\n- [.NET backend](mobile-services-dotnet-backend-service-side-authorization.md)\n- [Javascript backend](mobile-services-javascript-backend-service-side-authorization.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n> For the equivalent Mobile Apps version of this topic, see [this sample code](https://github.com/Azure/azure-mobile-apps-node/blob/master/samples/personal-table/tables/TodoItem.js#L38). \n\nThis topic shows you how to use server-side scripts to authorize users. In this tutorial, you register scripts with Azure Mobile Services, filter queries based on user IDs, and give users access to only their own data. Filtering a user's query results by the user ID is the most basic form of authorization. Depending on your specific scenario, you might also want to create Users or Roles tables to track more detailed user authorization information, such as which endpoints a given user is permitted to access.\n\nThis tutorial is based on the Mobile Services Quick Start and builds on the [Add Authentication to Existing Mobile Services App] tutorial. Please complete [Add Authentication to Existing Mobile Services App] first.\n\n## <a name=\"register-scripts\"></a>Register scripts\n\n1. Log on to the [Azure classic portal], click **Mobile Services**, and then click on your mobile service. Click the **Data** tab, then click the **TodoItem** table.\n\n2. Click **Script**, select the **Insert** operation, replace the existing script with the following function, and then click **Save**.\n\n        function insert(item, user, request) {\n          item.userId = user.userId;\n          request.execute();\n        }\n\n\tThis script adds the user ID of the authenticated user to the item before insertion.\n\n    >[AZURE.NOTE] Make sure that [dynamic schema](https://msdn.microsoft.com/library/azure/jj193175.aspx) is enabled. Otherwise, the *userId* column is not added automatically. This setting is enabled by default for a new mobile service.\n\n3. Similarly, replace the existing **Read** operation with the following function. This script filters returned TodoItem objects so that a user receives only the items that they insert themselves.\n\n        function read(query, user, request) {\n           query.where({ userId: user.userId });\n           request.execute();\n        }\n\n## <a name=\"test-app\"></a>Test the app\n\n1. Notice that when you now run your client-side app, although there are items already in the _TodoItem_ table from previous tutorials, no items are returned. This happens because previous items were inserted without the user ID column and now have null values. Verify newly added items have an associated userId value in the _TodoItem_ table.\n\n2. If you have additional login accounts, verify that users can only see their own data by closing and deleting the app and running it again. When the login credentials dialog is displayed, enter a different login and verify that items entered under the previous login are not displayed.\n\n<!-- Anchors. -->\n[Register server scripts]: #register-scripts\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n\n<!-- URLs. -->\n\n[Windows Push Notifications & Live Connect]: http://go.microsoft.com/fwlink/p/?LinkID=257677\n[Mobile Services server script reference]: http://go.microsoft.com/fwlink/p/?LinkId=262293\n[My Apps dashboard]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n[Add Authentication to Existing Mobile Services App]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-users-ios\n\n[Azure classic portal]: https://manage.windowsazure.com/\n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-windows-phone-get-started-push.md",
    "content": "<properties\n\tpageTitle=\"Add push notifications to your Mobile Services app (Windows Phone) | Microsoft Azure\"\n\tdescription=\"Learn how to use Azure Mobile Services and Notification Hubs to send push notifications to your Windows Phone app.\"\n\tservices=\"mobile-services,notification-hubs\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows-phone\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n\n# Add push notifications to your Mobile Services app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-push.md)\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-javascript-backend-windows-phone-get-started-push.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started-push.md)\n- [(Android | Javascript)](mobile-services-javascript-backend-android-get-started-push.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-push.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-push.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-push.md)\n- [(Xamarin.Forms | JavaScript)](partner-xamarin-mobile-services-xamarin-forms-get-started-push.md)\n\n## Overview\n\nThis topic shows you how to use Azure Mobile Services to send push notifications to a Windows Phone Silverlight app. In this tutorial you enable push notifications using Azure Notification Hubs to the quickstart project. When complete, your mobile service will send a push notification using Notification Hubs each time a record is inserted. The notification hub that you create is free with your mobile service, can be managed independent of the mobile service, and can be used by other applications and services.\n\nThis tutorial is based on the TodoList sample app. Before you start this tutorial, you must first complete the topic [Add Mobile Services to an existing app] to connect your project to the mobile service. When a mobile service has not been connected, the Add Push Notification wizard can create this connection for you.\n\n>[AZURE.NOTE] To send push notifications to a Windows Phone 8.1 Store app, follow the [Windows Store app](mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md) version of this tutorial.\n\n## <a id=\"update-app\"></a> Update the app to register for notifications\n\nBefore your app can receive push notifications, you must register a notification channel.\n\n1. In Visual Studio, open the file App.xaml.cs and add the following `using` statement:\n\n        using Microsoft.Phone.Notification;\n\n3. Add the following to App.xaml.cs:\n\n        public static HttpNotificationChannel CurrentChannel { get; private set; }\n\n        private void AcquirePushChannel()\n        {\n            CurrentChannel = HttpNotificationChannel.Find(\"MyPushChannel\");\n\n            if (CurrentChannel == null)\n            {\n                CurrentChannel = new HttpNotificationChannel(\"MyPushChannel\");\n                CurrentChannel.Open();\n                CurrentChannel.BindToShellToast();\n            }\n\n            CurrentChannel.ChannelUriUpdated +=\n                new EventHandler<NotificationChannelUriEventArgs>(async (o, args) =>\n                {\n\n                    // Register for notifications using the new channel\n                    await MobileService.GetPush()\n                        .RegisterNativeAsync(CurrentChannel.ChannelUri.ToString());\n                });\n        }\n\n    This code retrieves the ChannelURI for the app from the Microsoft Push Notification Service (MPNS) used by Windows Phone 8.x \"Silverlight\", and then registers that ChannelURI for push notifications.\n\n\t>[AZURE.NOTE]In this this tutorial, the mobile service sends a toast notification to the device. When you send a tile notification, you must instead call the **BindToShellTile** method on the channel.\n\n4. At the top of the **Application_Launching** event handler in App.xaml.cs, add the following call to the new **AcquirePushChannel** method:\n\n        AcquirePushChannel();\n\n\tThis makes sure that registration is requested every time that the page is loaded. In your app, you may only want to make this registration periodically to ensure that the registration is current.\n\n5. Press the **F5** key to run the app. A popup dialog with the registration key is displayed.\n\n6.\tIn the Solution Explorer, expand **Properties**, open the WMAppManifest.xml file, click the **Capabilities** tab and make sure that the **ID___CAP___PUSH_NOTIFICATION** capability is checked.\n\n   \t![Enable notifications in VS](./media/mobile-services-javascript-backend-windows-phone-get-started-push/mobile-app-enable-push-wp8.png)\n\n   \tThis makes sure that your app can raise toast notifications.\n\n## <a id=\"update-scripts\"></a> Update server scripts to send push notifications\n\nFinally, you must update the script registered to the insert operation on the TodoItem table to send notifications.\n\n1. Click **TodoItem**, click **Script** and select **Insert**.\n\n2. Replace the insert function with the following code, and then click **Save**:\n\n\t\tfunction insert(item, user, request) {\n\t\t// Define a payload for the Windows Phone toast notification.\n\t\tvar payload = '<?xml version=\"1.0\" encoding=\"utf-8\"?>' +\n\t\t    '<wp:Notification xmlns:wp=\"WPNotification\"><wp:Toast>' +\n\t\t    '<wp:Text1>New Item</wp:Text1><wp:Text2>' + item.text +\n\t\t    '</wp:Text2></wp:Toast></wp:Notification>';\n\n\t\trequest.execute({\n\t\t    success: function() {\n\t\t        // If the insert succeeds, send a notification.\n\t\t    \tpush.mpns.send(null, payload, 'toast', 22, {\n\t\t            success: function(pushResponse) {\n\t\t                console.log(\"Sent push:\", pushResponse);\n\t\t\t\t\t\trequest.respond();\n\t\t                },              \n\t\t                error: function (pushResponse) {\n\t\t                    console.log(\"Error Sending push:\", pushResponse);\n\t\t\t\t\t\t\trequest.respond(500, { error: pushResponse });\n\t\t                    }\n\t\t                });\n\t\t            }\n\t\t        });      \n\t\t}\n\n\tThis insert script sends a push notification (with the text of the inserted item) to all Windows Phone app registrations after the insert succeeds.\n\n3. Click the **Push** tab, check **Enable unauthenticated push notifications**, then click **Save**.\n\n\tThis enables the mobile service to connect to MPNS in unauthenticated mode to send push notifications.\n\n\t>[AZURE.NOTE]This tutorial uses MPNS in unauthenticated mode. In this mode, MPNS limits the number of notifications that can be sent to a device channel. To remove this restriction, you must generate and upload a certificate by clicking **Upload** and selecting the certificate. For more information on generating the certificate, see [Setting up an authenticated web service to send push notifications for Windows Phone].\n\n## <a id=\"test\"></a> Test push notifications in your app\n\n1. In Visual Studio, press the F5 key to run the app.\n\n    >[AZURE.NOTE] You may encounter a 401 Unauthorized RegistrationAuthorizationException when testing on the Windows Phone emulator. This can occur during the `RegisterNativeAsync()` call because of the way the Windows Phone emulator syncs it's clock with the host PC. It can result in a security token that will be rejected. To resolve this simply manually set the clock in the emulator before testing.\n\n5. In the app, enter the text \"hello push\" in the textbox, click **Save**, then immediately click the start button or back button to leave the app.\n\n   \t![Enter text into the app](./media/mobile-services-javascript-backend-windows-phone-get-started-push/mobile-quickstart-push3-wp8.png)\n\n  \tThis sends an insert request to the mobile service to store the added item. Notice that the device receives a toast notification that says **hello push**.\n\n\t![Toast notification received](./media/mobile-services-javascript-backend-windows-phone-get-started-push/mobile-quickstart-push5-wp8.png)\n\n\t>[AZURE.NOTE]You will not receive the notification when you are still in the app. To receive a toast notification while the app is active, you must handle the [ShellToastNotificationReceived](http://msdn.microsoft.com/library/windowsphone/develop/microsoft.phone.notification.httpnotificationchannel.shelltoastnotificationreceived.aspx) event.\n\n## <a name=\"next-steps\"> </a>Next steps\n\nThis tutorial demonstrated the basics of enabling a Windows Store app to use Mobile Services and Notification Hubs to send push notifications. Next, consider completing one of the following tutorials:\n\n+ [Send broadcast notifications to subscribers](https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-phone-push-xplat-segmented-mpns-notification/)\n\t<br/>Learn how users can register and receive push notifications for categories they're interested in.\n\n+ [Send platform-agnostic notifications to subscribers](https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-aspnet-cross-platform-notification/)\n\t<br/>Learn how to use templates to send push notifications from your mobile service, without having to craft platform-specific payloads in your back-end.\n\n\nLearn more about Mobile Services and Notification Hubs in the following topics:\n\n* [Azure Notification Hubs - Diagnosis guidelines](https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-push-notification-fixer/)\n\t<br/>Learn how to troubleshoot your push notification issues.\n\n* [Get started with authentication]\n  <br/>Learn how to authenticate users of your app with different account types using mobile services.\n\n* [What are Notification Hubs?]\n  <br/>Learn more about how Notification Hubs works to deliver notifications to your apps across all major client platforms.\n\n* [Mobile Services .NET How-to Conceptual Reference]\n  <br/>Learn more about how to use Mobile Services with .NET.\n\n* [Mobile Services server script reference]\n  <br/>Learn more about how to implement business logic in your mobile service.\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n\n<!-- URLs. -->\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[My Applications]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n[Live SDK for Windows]: http://go.microsoft.com/fwlink/p/?LinkId=262253\n[Add Mobile Services to an existing app]: mobile-services-windows-phone-get-started-data.md\n[Get started with authentication]: mobile-services-windows-phone-get-started-users.md\n\n[Setting up an authenticated web service to send push notifications for Windows Phone]: http://msdn.microsoft.com/library/windowsphone/develop/ff941099(v=vs.105).aspx\n\n[Mobile Services server script reference]: http://go.microsoft.com/fwlink/?LinkId=262293\n[Mobile Services .NET How-to Conceptual Reference]: mobile-services-windows-dotnet-how-to-use-client-library.md\n\n[What are Notification Hubs?]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-push-notification-overview/\n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-windows-store-dotnet-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Mobile Services for Windows Store apps (C#) | Microsoft Azure\"\n\tdescription=\"Follow this tutorial to get started using Azure Mobile Services for Windows Store development in C#.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"get-started-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# <a name=\"getting-started\"> </a>Get started with Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis tutorial shows you how to add a cloud-based backend service to a universal Windows app using Azure Mobile Services. Universal Windows app solutions include projects for both Windows Store 8.1 and Windows Phone Store 8.1 apps and a common shared project. For more information, see [Build universal Windows apps that target Windows and Windows Phone](http://msdn.microsoft.com/library/windows/apps/xaml/dn609832.aspx).\n\nIn this tutorial, you will create both a new mobile service and a simple *To do list* app that stores app data in the new mobile service. The mobile service that you will create uses JavaScript for server-side business logic. To create a mobile service that lets you write your server-side business logic in the supported .NET languages using Visual Studio, see the .NET backend version of this topic.\n\n\nThe following are screen captures from the completed app:\n\n![](./media/mobile-services-windows-universal-get-started/mobile-quickstart-completed.png)\n<br/>Windows Store app\n\n![](./media/mobile-services-windows-universal-get-started/mobile-quickstart-completed-wp8.png)\n<br/>Windows Phone Store app\n\nCompleting this tutorial is a prerequisite for all other Mobile Services tutorials for Windows Store and Windows Phone Store apps.\n\nTo complete this tutorial, you need the following:\n\n* An active Azure account. If you don't have an account, you can sign up for an Azure trial and get up to 10 free mobile services that you can keep using even after your trial ends. For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=A0E0E5C02&amp;returnurl=http%3A%2F%2Fazure.microsoft.com%2Fen-us%2Fdocumentation%2Farticles%2Fmobile-services-javascript-backend-windows-store-javascript-get-started%2F).\n* [Visual Studio 2013 Express for Windows]\n\n## Create a new mobile service\n\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** dialog, select **Create a free 20 MB SQL Database**, select **JavaScript** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t>[AZURE.NOTE]As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n\n## Create a new universal Windows app\n\nOnce you have created your mobile service, you can follow an easy quickstart in the Azure classic portal to either create a new universal Windows app or modify an existing Windows Store or Windows Phone app project to connect to your mobile service.\n\nIn this section you will create a new universal Windows app that is connected to your mobile service.\n\n1.  In the [Azure classic portal], click **Mobile Services**, and then click the mobile service that you just created.\n\n\n2. In the quickstart tab, click **Windows** under **Choose platform** and expand **Create a new Windows Store app**.\n\n   \tThis displays the three easy steps to create a Windows Store app connected to your mobile service.\n\n  \t![Mobile Services quickstart steps](./media/mobile-services-javascript-backend-windows-store-dotnet-get-started/mobile-quickstart-steps.png)\n\n3. If you haven't already done so, download and install [Visual Studio 2013 Express for Windows] on your local computer or virtual machine.\n\n4. Click **Create TodoItem table** to create a table to store app data.\n\n5. Under **Download and run your app**, select a language for your app, then click **Download**.\n\n  \tThis downloads the project for the sample *To do list* application that is connected to your mobile service. Save the compressed project file to your local computer, and make a note of where you save it.\n\n## Run your Windows app\n\n\nThe final stage of this tutorial is to build and run your new app.\n\n1. Browse to the location where you saved the compressed project files, expand the files on your computer, and open the solution file in Visual Studio.\n\n2. Press the **F5** key to rebuild the project and start the app.\n\n3. In the app, type meaningful text, such as *Complete the tutorial*, in **Insert a TodoItem**, and then click **Save**.\n\n   \tThis sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the TodoItem table. Items stored in the table are returned by the mobile service, and the data is displayed in the second column in the app.\n\n4. (Optional) In a universal Windows solution, change the default start up project to the other app and run the app again.\n\n\tNotice that data saved from the previous step is loaded from the mobile service after the app starts.\n\n4. Back in the [Azure classic portal](https://manage.windowsazure.com/), click the **Data** tab and then click the **TodoItems** table.\n\n   \tThis lets you browse the data inserted by the app into the table.\n\n   \t![](./media/mobile-services-javascript-backend-run-app/mobile-data-browse.png)\n\n>[AZURE.NOTE]You can review the code that accesses your mobile service to query and insert data, which is found in the MainPage.xaml.cs file.\n\n## Next Steps\nNow that you have completed the quickstart, learn how to perform additional important tasks in Mobile Services:\n\n* [Get started with offline data sync]  \n  Learn how to use offline data sync to make your app responsive and robust.\n\n* [Add authentication to your Mobile Services app ][Get started with authentication]  \n  Learn how to authenticate users of your app with an identity provider.\n\n* [Add push notifications to your app][Get started with push notifications]  \n  Learn how to send a very basic push notification to your app.\n\n* [How to use the .NET client library](mobile-services-dotnet-how-to-use-client-library.md)  \n Learn how to query the mobile service, work with data, and access custom APIs.\n\n\n<!-- Anchors. -->\n[Getting started with Mobile Services]:#getting-started\n[Create a new mobile service]:#create-new-service\n[Define the mobile service instance]:#define-mobile-service-instance\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n\n\n\n<!-- URLs. -->\n[Get started with offline data sync]: mobile-services-windows-store-dotnet-get-started-offline-data.md\n[Get started with authentication]: mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md\n[Get started with push notifications]: mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md\n[Visual Studio 2013 Express for Windows]: http://go.microsoft.com/fwlink/?LinkId=257546\n[Mobile Services SDK]: http://go.microsoft.com/fwlink/?LinkId=257545\n[Azure classic portal]: https://manage.windowsazure.com/\n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-windows-store-dotnet-push-notifications-app-users.md",
    "content": "<properties\n\tpageTitle=\"Send push notifications to authenticated universal Windows app users.\"\n\tdescription=\"Learn how to send push notifications from Azure Mobile Services to specific users of your universal Windows C# app.\"\n\tservices=\"mobile-services,notification-hubs\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows-phone\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Send push notifications to authenticated users\n\n> [AZURE.SELECTOR-LIST (Platform | Backend)]\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-push-notifications-app-users.md)\n- [(Windows 8.x Store C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-push-notifications-app-users.md)\n- [(Windows 8.x Store C# | JavaScript)](mobile-services-javascript-backend-windows-store-dotnet-push-notifications-app-users.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Overview\nThis topic shows you how to send push notifications to an authenticated user on any registered device. Unlike the previous [Add push notifications to your app] tutorial, this tutorial changes your mobile service to require that a user be authenticated before the client can register with the notification hub for push notifications. Registration is also modified to add a tag based on the assigned user ID. Finally, the server script is updated to send the notification only to the authenticated user instead of to all registrations.\n\nThis tutorial walks you through the following process:\n\n1. [Updating the service to require authentication for registration]\n2. [Updating the app to log in before registration]\n3. [Testing the app]\n\nThis tutorial supports both Windows Store and Windows Phone Store apps.\n\n## Prerequisites\n\nBefore you start this tutorial, you must have already completed these Mobile Services tutorials:\n\n+ [Add authentication to your app]<br/>Adds a login requirement to the TodoList sample app.\n\n+ [Add push notifications to your app]<br/>Configures the TodoList sample app for push notifications by using Notification Hubs.\n\nAfter you have completed both tutorials, you can prevent unauthenticated users from registering for push notifications from your mobile service.\n\n## <a name=\"register\"></a>Update the service to require authentication to register\n\n\n1. Log on to the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, and then click your mobile service.\n\n2. Click the **Push** tab, select **Only Authenticated Users** for **Permissions**, click **Save**, and then click **Edit Script**.\n\n\tThis allows you to customize the push notification registration callback function. If you use Git to edit your source code, this same registration function is found in `.\\service\\extensions\\push.js`.\n\n3. Replace the existing **register** function with the following code and then click **Save**:\n\n\t\texports.register = function (registration, registrationContext, done) {   \n\t\t    // Get the ID of the logged-in user.\n\t\t\tvar userId = registrationContext.user.userId;    \n\n\t\t\t// Perform a check here for any disallowed tags.\n\t\t\tif (!validateTags(registration))\n\t\t\t{\n\t\t\t\t// Return a service error when the client tries\n\t\t        // to set a user ID tag, which is not allowed.\t\t\n\t\t\t\tdone(\"You cannot supply a tag that is a user ID\");\t\t\n\t\t\t}\n\t\t\telse{\n\t\t\t\t// Add a new tag that is the user ID.\n\t\t\t\tregistration.tags.push(userId);\n\n\t\t\t\t// Complete the callback as normal.\n\t\t\t\tdone();\n\t\t\t}\n\t\t};\n\n\t\tfunction validateTags(registration){\n\t\t    for(var i = 0; i < registration.tags.length; i++) {\n\t\t        console.log(registration.tags[i]);           \n\t\t\t\tif (registration.tags[i]\n\t\t\t\t.search(/facebook:|twitter:|google:|microsoft:/i) !== -1){\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\tThis adds a tag to the registration that is the ID of the logged-in user. The supplied tags are validated to prevent a user from registering for another user's ID. When a notification is sent to this user, it is received on this and any other device registered by the user.\n\n4. Click the back arrow, click the **Data** tab, click **TodoItem**, click **Script**, and then select **Insert**.\n\n&nbsp;&nbsp;5. Replace the insert function with the following code, then click **Save**:\n\n\tfunction insert(item, user, request) {\n    // Define a payload for the Windows Store toast notification.\n    var payload = '<?xml version=\"1.0\" encoding=\"utf-8\"?><toast><visual>' +    \n    '<binding template=\"ToastText01\"><text id=\"1\">' +\n    item.text + '</text></binding></visual></toast>';\n\n    // Get the ID of the logged-in user.\n    var userId = user.userId;\t\t\n\n    request.execute({\n        success: function() {\n            // If the insert succeeds, send a notification to all devices\n\t    \t// registered to the logged-in user as a tag.\n            \tpush.wns.send(userId, payload, 'wns/toast', {\n                success: function(pushResponse) {\n                    console.log(\"Sent push:\", pushResponse);\n\t    \t\t\trequest.respond();\n                    },              \n                    error: function (pushResponse) {\n                            console.log(\"Error Sending push:\", pushResponse);\n\t    \t\t\t\trequest.respond(500, { error: pushResponse });\n                        }\n                    });\n                }\n            });\n\t}\n\n&nbsp;&nbsp;This insert script uses the user ID tag to send a push notification (with the text of the inserted item) to all Windows Store app registrations created by the logged-in user.\n\n## <a name=\"update-app\"></a>Update the app to log in before registration\n\n\nNext, you need to change the way that push notifications are registered to make sure that the user is authenticated before registration is attempted. The client app updates depend on the way in which you implemented push notifications.\n\n### Using the Add Push Notification Wizard in Visual Studio 2013 Update 2 or a later version\n\nIn this method, the wizard generated a new push.register.cs file in your project.\n\n1. In Visual Studio in Solution Explorer, open the app.xaml.cs project file and in the **OnLaunched** event handler comment-out or delete the call to the **UploadChannel** method.\n\n2. Open the push.register.cs project file and replace the **UploadChannel** method, with the following code:\n\n\t\tpublic async static void UploadChannel()\n\t\t{\n\t\t    var channel =\n\t\t        await Windows.Networking.PushNotifications.PushNotificationChannelManager\n\t\t        .CreatePushNotificationChannelForApplicationAsync();\n\n\t\t    try\n\t\t    {\n\t\t        // Create a native push notification registration.\n\t\t        await App.MobileService.GetPush().RegisterNativeAsync(channel.Uri);\t\t        \n\n\t\t    }\n\t\t    catch (Exception exception)\n\t\t    {\n\t\t        HandleRegisterException(exception);\n\t\t    }\n\t\t}\n\n\tThis makes sure that registration is done using the same client instance that has the authenticated user credentials. Otherwise, registration will fail with an Unauthorized (401) error.\n\n3. Open the shared MainPage.cs project file, and replace the **ButtonLogin_Click** handler with the following:\n\n        private async void ButtonLogin_Click(object sender, RoutedEventArgs e)\n        {\n            // Login the user and then load data from the mobile service.\n            await AuthenticateAsync();\n\t\t\ttodolistPush.UploadChannel();\n\n            // Hide the login button and load items from the mobile service.\n            this.ButtonLogin.Visibility = Windows.UI.Xaml.Visibility.Collapsed;\n            await RefreshTodoItems();\n        }\n\n\tThis makes sure that authentication occurs before push registration is attempted.\n\n4. \tIn the previous code, replace the generated push class name (`todolistPush`) with the name of class generated by the wizard, usually in the format <code><em>mobile_service</em>Push</code>.\n\n### Manually enabled push notifications\t\t\n\nIn this method, you added registration code from the tutorial directly to the app.xaml.cs project file.\n\n1. In Visual Studio in Solution Explorer, open the app.xaml.cs project file and in the **OnLaunched** event handler comment-out or delete the call to **InitNotificationsAsync**.\n\n2. Change the accessibility of the **InitNotificationsAsync** method from `private` to `public` and add the `static` modifier.\n\n3. Open the shared MainPage.cs project file, and replace the **ButtonLogin_Click** handler with the following:\n\n        private async void ButtonLogin_Click(object sender, RoutedEventArgs e)\n        {\n            // Login the user and then load data from the mobile service.\n            await AuthenticateAsync();\n\t\t\tApp.InitNotificationsAsync();\n\n            // Hide the login button and load items from the mobile service.\n            this.ButtonLogin.Visibility = Windows.UI.Xaml.Visibility.Collapsed;\n            await RefreshTodoItems();\n        }\n\n\tThis makes sure that authentication occurs before push registration is attempted.\n\n## <a name=\"test\"></a>Test the app\n\n\n1. In Visual Studio, press the F5 key to run the app.\n\n2. Log in using the selected identity provider and verify that authentication succeeds.\n\n3. In the app, type text in **Insert a TodoItem**, and then click **Save**.\n\n   \tNote that after the insert completes, the app receives a push notification from WNS.\n\n4. (Optional) Repeat steps 1-3 on a different client device and using a different account when logging in.  \n\n\tVerify that the notification is received only on this device, since the previous device was not tagged with the current user ID.\n\n<!-- Anchors. -->\n[Updating the service to require authentication for registration]: #register\n[Updating the app to log in before registration]: #update-app\n[Testing the app]: #test\n[Next Steps]:#next-steps\n\n\n<!-- URLs. -->\n[Add authentication to your app]: mobile-services-windows-store-dotnet-get-started-users.md\n[Add push notifications to your app]: mobile-services-javascript-backend-windows-store-dotnet-get-started-push.md \n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-windows-store-javascript-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Mobile Services for Windows Store JavaScript apps | Azure Mobile Services\"\n\tdescription=\"Follow this tutorial to get started using Azure Mobile Services for Windows Store development in JavaScript.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows-store\"\n\tms.devlang=\"javascript\"\n\tms.topic=\"get-started-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Get started with Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis tutorial shows you how to add a cloud-based backend service to a Windows Store JavaScript app using Azure Mobile Services. In this tutorial, you will create both a new mobile service and a simple *To do list* app that stores app data in the new mobile service. The mobile service that you will create uses JavaScript for server-side business logic.\n\nTo complete this tutorial, you need the following:\n\n* An active Azure account. If you don't have an account, you can create a free trial account in just a couple of minutes. For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=A0E0E5C02&amp;returnurl=http%3A%2F%2Fazure.microsoft.com%2Fdocumentation%2Farticles%2Fmobile-services-javascript-backend-windows-store-javascript-get-started%2F).\n* [Visual Studio 2013 Express for Windows]\n\n## Create a new mobile service\n\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** dialog, select **Create a free 20 MB SQL Database**, select **JavaScript** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t>[AZURE.NOTE]As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n\n## Create a new Windows Store app\n\nOnce you have created your mobile service, you can follow an easy quickstart in the Azure classic portal to create a new Windows Store 8.1 JavaScript app that connects to your mobile service.\n\n1.  In the [Azure classic portal], click **Mobile Services**, and then click the mobile service that you just created.\n\n\n2. In the quickstart tab, click **Windows** under **Choose platform** and expand **Create a new Windows Store app**.\n\n3. If you haven't already done so, download and install [Visual Studio 2013][Visual Studio 2013 Express for Windows] on your local computer or virtual machine.\n\n4. Click **Create TodoItem table** to create a table to store app data.\n\n5. Under **Download and run your app**, select a language for your app, then click **Download**.\n\n  \tThis downloads the project for the sample *To do list* application that is connected to your mobile service. Save the compressed project file to your local computer, and make a note of where you save it.\n\n## Run your Windows app\n\nThe final stage of this tutorial is to build and run your new app.\n\n1. Browse to the location where you saved the compressed project files, expand the files on your computer, and open the solution file in Visual Studio.\n\n2. Press the **F5** key to rebuild the project and start the app.\n\n3. In the app, type meaningful text, such as *Complete the tutorial*, in **Insert a TodoItem**, and then click **Save**.\n\n   \tThis sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the TodoItem table. Items stored in the table are returned by the mobile service, and the data is displayed in the second column in the app.\n\n4. (Optional) Run the app again, and notice that data saved from the previous step is loaded from the mobile service after the app starts.\n\n4. Back in the [Azure classic portal], click the **Data** tab and then click the **TodoItems** table.\n\n   \tThis lets you browse the data inserted by the app into the table.\n\n>[AZURE.NOTE] You can review the code that accesses your mobile service to query and insert data, which is found in the default.js file.\n\n## Next Steps\nNow that you have completed the quickstart, learn how to work with the [Mobile Services client for HTML/JavaScript](mobile-services-html-how-to-use-client-library.md).\n\n\n<!-- Anchors. -->\n[Getting started with Mobile Services]:#getting-started\n[Create a new mobile service]:#create-new-service\n[Define the mobile service instance]:#define-mobile-service-instance\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[Visual Studio 2013 Express for Windows]: http://go.microsoft.com/fwlink/?LinkId=257546\n[Mobile Services SDK]: http://go.microsoft.com/fwlink/?LinkId=257545\n[Azure classic portal]: https://manage.windowsazure.com/\n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md",
    "content": "<properties\n\tpageTitle=\"Add push notifications to your universal Windows 8.1 app | Microsoft Azure\"\n\tdescription=\"Learn how to send push notifications to your universal Windows 8.1 app from your JavaScript backend mobile service using Azure Notification Hubs.\"\n\tservices=\"mobile-services,notification-hubs\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n\n# Add push notifications to your Mobile Services app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-push.md)\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-javascript-backend-windows-phone-get-started-push.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started-push.md)\n- [(Android | Javascript)](mobile-services-javascript-backend-android-get-started-push.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-push.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-push.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-push.md)\n- [(Xamarin.Forms | JavaScript)](partner-xamarin-mobile-services-xamarin-forms-get-started-push.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows you how to use Azure Mobile Services with a JavaScript backend to send push notifications to a universal Windows app. In this tutorial you enable push notifications using Azure Notification Hubs in a universal Windows app project. When complete, your mobile service will send a push notification from the JavaScript backend to all registered Windows Store and Windows Phone Store apps each time a record is inserted in the TodoList table. The notification hub that you create is free with your mobile service, can be managed independent of the mobile service, and can be used by other applications and services.\n\n>[AZURE.NOTE]This topic shows you how to use the tooling in Visual Studio 2013 with Update 3 to add support for push notifications from Mobile Services to a universal Windows app. The same steps can be used to add push notifications from Mobile Services to a Windows Store or Windows Phone Store 8.1 app. To add push notifications to a Windows Phone 8 or Windows Phone Silverlight 8.1 app, see this version of [Get started with push notifications in Mobile Services](mobile-services-javascript-backend-windows-phone-get-started-push.md).\n\nThis tutorial walks you through these basic steps to enable push notifications:\n\n1. [Register your app for push notifications](#register)\n2. [Update the service to send push notifications](#update-service)\n3. [Test push notifications in your app](#test)\n\nTo complete this tutorial, you need the following:\n\n* An active [Microsoft Store account](http://go.microsoft.com/fwlink/p/?LinkId=280045).\n* [Visual Studio 2013 Express for Windows](http://go.microsoft.com/fwlink/?LinkId=257546) with Update 3, or a later version\n\n## <a id=\"register\"></a>Register your app for push notifications\n\nThe following steps registers your app with the Windows Store, configure your mobile service to enable push notifications, and add code to your app to register a device channel with your notification hub. Visual Studio 2013 connects to Azure and to the Windows Store by using the credentials that you provide.\n\n1. In Visual Studio 2013, open Solution Explorer, right-click the Windows Store app project, click **Add** then **Push Notification...**.\n\n\t![Add Push Notification wizard in Visual Studio 2013](./media/mobile-services-create-new-push-vs2013/mobile-add-push-notifications-vs2013.png)\n\n\tThis starts the Add Push Notification Wizard.\n\n2. Click **Next**, sign in to your Windows Store account, then supply a name in **Reserve a new name** and click **Reserve**.\n\n\tThis creates a new app registration.\n\n3. Click the new registration in the **App Name** list, then click **Next**.\n\n4. In the **Select a service** page, click the name of your mobile service, then click **Next** and **Finish**.\n\n\tThe notification hub used by your mobile service is updated with the Windows Notification Services (WNS) registration. You can now use Azure Notification Hubs to send notifications from Mobile Services to your app by using WNS.\n\n\t>[AZURE.NOTE]This tutorial demonstrates sending notifications from a mobile service backend. You can use the same notification hub registration to send notifications from any backend service. For more information, see [Notification Hubs Overview](http://msdn.microsoft.com/library/azure/jj927170.aspx).\n\n5. When you complete the wizard, a new **Push setup is almost complete** page is opened in Visual Studio. This page details an alternate method to configure your mobile service project to send notifications that is different from this tutorial.\n\n\tThe code that is added to your universal Windows app solution by the Add Push Notification wizard is platform-specific. Later in this section, you will remove this redundancy by sharing the Mobile Services client code, which makes the universal app easier to maintain.  \n\n<!-- URLs. -->\n[Get started with Mobile Services]: https://azure.microsoft.com/develop/mobile/tutorials/get-started/\n[Get started with data]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-data-dotnet/\n\n&nbsp;&nbsp;6. Browse to the `\\Services\\MobileServices\\your_service_name` project folder, open the generated push.register.cs code file, and inspect the **UploadChannel** method that registers the device's channel URL with the notification hub.\n\n&nbsp;&nbsp;7. Open the shared App.xaml.cs code file and notice that a call to the new **UploadChannel** method was added in the **OnLaunched** event handler. This makes sure that registration of the device is attempted whenever the app is launched.\n\n&nbsp;&nbsp;8. Repeat the previous steps to add push notifications to the Windows Phone Store app project, then in the shared App.xaml.cs file, remove the extra call to **Mobile Service Client**, **UploadChannel** and the remaining `#if...#endif` conditional wrapper. Both projects can now share a single call to **UploadChannel**.\n\n&nbsp;&nbsp;Note that you can also simplify the generated code by unifying the `#if...#endif` wrapped [MobileServiceClient] definitions into a single  unwrapped definition used by both versions of the app.\n\nNow that push notifications are enabled in the app, you must update the mobile service to send push notifications.\n\n## <a id=\"update-service\"></a>Update the service to send push notifications\n\nThe following steps update the insert script registered to the TodoItem table. You can implement similar code in any server script or anywhere else in your backend services.\n\n\n\nFinally, you must update the script registered to the insert operation on the TodoItem table to send notifications.\n\n1. Click **TodoItem**, click **Script** and select **Insert**.\n\n2. Replace the insert function with the following code, and then click **Save**:\n\n\t\tfunction insert(item, user, request) {\n\t\t// Define a payload for the Windows Store toast notification.\n\t\tvar payload = '<?xml version=\"1.0\" encoding=\"utf-8\"?><toast><visual>' +    \n\t\t    '<binding template=\"ToastText01\">  <text id=\"1\">' +\n\t\t    item.text + '</text></binding></visual></toast>';\n\n\t\trequest.execute({\n\t\t    success: function() {\n\t\t        // If the insert succeeds, send a notification.\n\t\t    \tpush.wns.send(null, payload, 'wns/toast', {\n\t\t            success: function(pushResponse) {\n\t\t                console.log(\"Sent push:\", pushResponse);\n\t\t\t\t\t\trequest.respond();\n\t\t                },              \n\t\t                error: function (pushResponse) {\n\t\t                    console.log(\"Error Sending push:\", pushResponse);\n\t\t\t\t\t\t\trequest.respond(500, { error: pushResponse });\n\t\t                    }\n\t\t                });\n\t\t            }\n\t\t        });\n\t\t}\n\n\tThis insert script sends a push notification (with the text of the inserted item) to all Windows Store app registrations after the insert succeeds.\n\n\n\n## <a id=\"test\"></a> Test push notifications in your app\n\n\n1. In Visual Studio, right-click the Windows Store project, click **Set as StartUp Project**, then press the F5 key to run the Windows Store app.\n\n\tAfter the app starts, the device is registered for push notifications.\n\n2. Stop the Windows Store app and repeat the previous step to run the Windows Phone Store app.\n\n\tAt this point, both devices are registered to receive push notifications.\n\n3. Run the Windows Store app again, and type text in **Insert a TodoItem**, and then click **Save**.\n\n   \t![](./media/mobile-services-javascript-backend-windows-universal-test-push/mobile-quickstart-push1.png)\n\n   \tNote that after the insert completes, both the Windows Store and the Windows Phone apps receive a push notification from WNS.\n\n   \t![](./media/mobile-services-javascript-backend-windows-universal-test-push/mobile-quickstart-push2.png)\n\n\tThe notification is displayed on Windows Phone even when the app isn't running.\n\n   \t![](./media/mobile-services-javascript-backend-windows-universal-test-push/mobile-quickstart-push5-wp8.png)\n\n\n## <a name=\"next-steps\"> </a>Next steps\n\nThis tutorial demonstrated the basics of enabling a Windows Store app to use Mobile Services and Notification Hubs to send push notifications. Next, consider completing one of the following tutorials:\n\n+ [Send push notifications to authenticated users](mobile-services-javascript-backend-windows-store-dotnet-push-notifications-app-users.md)\n\t<br/>Learn how to use tags to send push notifications from your mobile service to only an authenticated user.\n\n+ [Send broadcast notifications to subscribers](https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-notification-dotnet-push-xplat-segmented-wns/)\n\t<br/>Learn how users can register and receive push notifications for categories they're interested in.\n\n+ [Send platform-agnostic notifications to subscribers](https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-aspnet-cross-platform-notification/)\n\t<br/>Learn how to use templates to send push notifications from your mobile service, without having to craft platform-specific payloads in your back-end.\n\nLearn more about Mobile Services and Notification Hubs in the following topics:\n\n* [Azure Notification Hubs - Diagnosis guidelines](https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-push-notification-fixer/)\n\t<br/>Learn how to troubleshoot your push notification issues.\n\n* [Get started with authentication]\n  <br/>Learn how to authenticate users of your app with different account types using mobile services.\n\n* [What are Notification Hubs?]\n  <br/>Learn more about how Notification Hubs works to deliver notifications to your apps across all major client platforms.\n\n* [How to use a .NET client for Azure Mobile Services]\n  <br/>Learn more about how to use Mobile Services from C# Windows apps.\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[My Applications]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n[Live SDK for Windows]: http://go.microsoft.com/fwlink/p/?LinkId=262253\n[Get started with Mobile Services]: mobile-services-dotnet-backend-windows-store-dotnet-get-started.md\n[Get started with authentication]: mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md\n\n[Send push notifications to authenticated users]: mobile-services-javascript-backend-windows-store-dotnet-push-notifications-app-users.md\n\n[What are Notification Hubs?]: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-push-notification-overview/\n\n[How to use a .NET client for Azure Mobile Services]: mobile-services-windows-dotnet-how-to-use-client-library.md\n[MobileServiceClient]: http://go.microsoft.com/fwlink/p/?LinkId=302030\n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md",
    "content": "<properties\n\tpageTitle=\"Add authentication to your universal Windows 8.1 app | Azure Mobile Services\"\n\tdescription=\"Learn how to use Mobile Services to authenticate users of your Windows Store app through a variety of identity providers, including Google, Facebook, Twitter, and Microsoft.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"erikre\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows-store\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Add authentication to your universal Windows 8.1 app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-users.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-users.md)\n- [(Android | Javascript)](mobile-services-android-get-started-users.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started-users.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-users.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-users.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-users.md)\n- [(HTML | Javascript)](mobile-services-html-get-started-users.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows you how to authenticate users in Azure Mobile Services from your universal Windows 8.1 app. In this tutorial, you add authentication to the quickstart project using an identity provider that is supported by Mobile Services. After being successfully authenticated and authorized by Mobile Services, the user ID value is displayed.\n\nThis tutorial is based on the Mobile Services quickstart. You must also first complete the tutorial [Get started with Mobile Services].\n\n>[AZURE.NOTE]This tutorial shows you how to authenticate users in Windows Store and Windows Phone Store 8.1 apps. For a Windows Phone 8.0 or Windows Phone Silverlight 8.1 app, see this version of [Get started with authentication in Mobile Services](mobile-services-windows-phone-get-started-users.md).\n\n## <a name=\"register\"></a> Register your app for authentication and configure Mobile Services\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Dashboard**, and make a note of the **Mobile Service URL** value.\n\n2. Register your app with one or more of the following authentication providers:\n   * [Google](./\nmobile-services-how-to-register-google-authentication.md)\n   * [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n   * [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n   * [Microsoft](./\nmobile-services-how-to-register-microsoft-authentication.md)\n   * [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md).\n\n    Make a note of the client identity and client secret values generated by the provider. Do not distribute or share the client secret.\n\n3. Back in the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Identity** > your identity provider settings, then enter the client ID and secret value from your provider.\n\nYou've now configured both your app and your mobile service to work with your auth provider. You may optionally repeat all these steps for each additional identity provider you'd like to support.\n\n> [AZURE.IMPORTANT] Verify that you've set the correct redirect URI on your identity provider's developer site. As described in the linked instructions for each provider above, the redirect URI may be different for a .NET backend service vs. for a JavaScript backend service. An incorrectly configured redirect URI may result in the login screen not being displayed properly and the app malfunctioning in unexpected ways.\n\n\n## <a name=\"permissions\"></a> Restrict permissions to authenticated users\n\n\n1. In the Server Explorer in Visual Studio, expand the **Azure** node, **Mobile Services**, and your mobile service.\n\n2. Right-click the **TodoItem** table, click **Edit Permissions**, set all permissions to **Only authenticated users**, and then click **Apply**. This ensures that all operations against the _TodoItem_ table require an authenticated user.\n\n3. Right-click the client app project, click **Debug**, then **Start new instance**; verify that an unhandled exception with a status code of 401 (Unauthorized) is raised after the app starts.\n\n\tThis happens because the app attempts to access Mobile Services as an unauthenticated user, but the *TodoItem* table now requires authentication.\n\nNext, you will update the app to authenticate users before requesting resources from the mobile service.\n\n>[AZURE.NOTE] When you use Visual Studio tools to connect your app to a Mobile Service, the tool generate two sets of **MobileServiceClient** definitions, one for each client platform. This is a good time to simplify the generated code by unifying the `#if...#endif` wrapped **MobileServiceClient** definitions into a single unwrapped definition used by both versions of the app. You won't need to do this if you downloaded the quickstart app from the [Azure classic portal].\n\n## <a name=\"add-authentication\"></a> Add authentication to the app\n\n\n1. Open the shared project file MainPage.cs and add the following code snippet to the MainPage class:\n\n\t\t// Define a member variable for storing the signed-in user.\n        private MobileServiceUser user;\n\n        // Define a method that performs the authentication process\n        // using a Facebook sign-in.\n        private async System.Threading.Tasks.Task<bool> AuthenticateAsync()\n        {\n            string message;\n            bool success = false;\n            try\n            {\n                // Change 'MobileService' to the name of your MobileServiceClient instance.\n                // Sign-in using Facebook authentication.\n                user = await App.MobileService\n                    .LoginAsync(MobileServiceAuthenticationProvider.Facebook);\n                message =\n                    string.Format(\"You are now signed in - {0}\", user.UserId);\n\n                success = true;\n            }\n            catch (InvalidOperationException)\n            {\n                message = \"You must log in. Login Required\";\n            }\n\n            var dialog = new MessageDialog(message);\n            dialog.Commands.Add(new UICommand(\"OK\"));\n            await dialog.ShowAsync();\n            return success;\n        }\n\n    This code authenticates the user with a Facebook login. If you are using an identity provider other than Facebook, change the value of **MobileServiceAuthenticationProvider** above to the value for your provider.\n\n3. Comment-out or delete the call to the **RefreshTodoItems** method in the existing **OnNavigatedTo** method override.\n\n\tThis prevents the data from being loaded before the user is authenticated. Next, you will add a **Sign in** button to the app that triggers authentication.\n\n4. Add the following code snippet to the MainPage class:\n\n        private async void ButtonLogin_Click(object sender, RoutedEventArgs e)\n        {\n            // Login the user and then load data from the mobile app.\n            if (await AuthenticateAsync())\n            {\n                // Hide the login button and load items from the mobile app.\n                ButtonLogin.Visibility = Windows.UI.Xaml.Visibility.Collapsed;\n                //await InitLocalStoreAsync(); //offline sync support.\n                await RefreshTodoItems();\n            }\n        }\n\n5. In the Windows Store app project, open the MainPage.xaml project file and add the following **Button** element just before the element that defines the **Save** button:\n\n\t\t<Button Name=\"ButtonLogin\" Click=\"ButtonLogin_Click\"\n                        Visibility=\"Visible\">Sign in</Button>\n\n6. In the Windows Phone Store app project, add the following **Button** element in the **ContentPanel**, after the **TextBox** element:\n\n        <Button Grid.Row =\"1\" Grid.Column=\"1\" Name=\"ButtonLogin\" Click=\"ButtonLogin_Click\"\n        \tMargin=\"10, 0, 0, 0\" Visibility=\"Visible\">Sign in</Button>\n\n8. Open the shared App.xaml.cs project file and add the following code:\n\n        protected override void OnActivated(IActivatedEventArgs args)\n        {\n\t\t\t// Windows Phone 8.1 requires you to handle the respose from the WebAuthenticationBroker.\n            #if WINDOWS_PHONE_APP\n            if (args.Kind == ActivationKind.WebAuthenticationBrokerContinuation)\n            {\n\t\t\t\t// Completes the sign-in process started by LoginAsync.\n\t\t\t\t// Change 'MobileService' to the name of your MobileServiceClient instance.\n                App.MobileService.LoginComplete(args as WebAuthenticationBrokerContinuationEventArgs);\n            }\n            #endif\n\n            base.OnActivated(args);\n        }\n\n\tIf the **OnActivated** method already exists, just add the `#if...#endif` code block.\n\n9. Press the F5 key to run the Windows Store app, click the **Sign in** button, and sign into the app with your chosen identity provider.\n\n   \tWhen you are successfully logged-in, the app should run without errors, and you should be able to query your backend and make updates to data.\n\n10. Right-click the Windows Phone Store app project, click **Set as StartUp Project**, then repeat the previous step to verify that the Windows Phone Store app also runs correctly.  \n\n\n\nNow, any user authenticated by your trusted identity providers can access the *TodoItem* table. To better secure user-specific data, you must also implement authorization. To do this you get the user ID of a given user, which can then be used to determine what level of access that user should have for a given resource.\n\n## <a name=\"tokens\"></a>Store the authorization token on the client\n\nThe previous example showed a standard sign-in, which requires the client to contact both the identity provider and the mobile service every time that the app starts. Not only is this method inefficient, you can run into usage-related issues should many customers try to start your app at the same time. A better approach is to cache the authorization token returned by Mobile Services and try to use this first before using a provider-based sign-in.\n\n>[AZURE.NOTE]You can cache the token issued by Mobile Services regardless of whether you are using client-managed or service-managed authentication. This tutorial uses service-managed authentication.\n\n\n1. In the MainPage.xaml.cs project file, add the following **using** statements:\n\n\t\tusing System.Linq;\t\t\n\t\tusing Windows.Security.Credentials;\n\n2. Replace the **AuthenticateAsync** method with the following code:\n\n        private async System.Threading.Tasks.Task<bool> AuthenticateAsync()\n        {\n            string message;\n            bool success = false;\n\n            // This sample uses the Facebook provider.\n            var provider = MobileServiceAuthenticationProvider.Facebook;\n\n            // Use the PasswordVault to securely store and access credentials.\n            PasswordVault vault = new PasswordVault();\n            PasswordCredential credential = null;\n\n            try\n            {\n                // Try to get an existing credential from the vault.\n                credential = vault.FindAllByResource(provider.ToString()).FirstOrDefault();\n            }\n            catch (Exception)\n            {\n                // When there is no matching resource an error occurs, which we ignore.\n            }\n\n            if (credential != null)\n            {\n                // Create a user from the stored credentials.\n                user = new MobileServiceUser(credential.UserName);\n                credential.RetrievePassword();\n                user.MobileServiceAuthenticationToken = credential.Password;\n\n                // Set the user from the stored credentials.\n                App.MobileService.CurrentUser = user;\n\n                // Consider adding a check to determine if the token is\n                // expired, as shown in this post: http://aka.ms/jww5vp.\n\n                success = true;\n                message = string.Format(\"Cached credentials for user - {0}\", user.UserId);\n            }\n            else\n            {\n                try\n                {\n                    // Login with the identity provider.\n                    user = await App.MobileService\n                        .LoginAsync(provider);\n\n                    // Create and store the user credentials.\n                    credential = new PasswordCredential(provider.ToString(),\n                        user.UserId, user.MobileServiceAuthenticationToken);\n                    vault.Add(credential);\n\n                    success = true;\n                    message = string.Format(\"You are now logged in - {0}\", user.UserId);\n                }\n                catch (MobileServiceInvalidOperationException)\n                {\n                    message = \"You must log in. Login Required\";\n                }\n            }\n\n            var dialog = new MessageDialog(message);\n            dialog.Commands.Add(new UICommand(\"OK\"));\n            await dialog.ShowAsync();\n\n            return success;\n        }\n\n\tIn this version of **AuthenticateAsync**, the app tries to use credentials stored in the **PasswordVault** to access the service. A regular sign-in is also performed when there is no stored credential.\n\n\t>[AZURE.NOTE]A cached token may be expired, and token expiration can also occur after authentication when the app is in use. To learn how to determine if a token is expired, see [Check for expired authentication tokens](http://aka.ms/jww5vp). For a solution to handling authorization errors related to expiring tokens, see the post [Caching and handling expired tokens in Azure Mobile Services managed SDK](http://blogs.msdn.com/b/carlosfigueira/archive/2014/03/13/caching-and-handling-expired-tokens-in-azure-mobile-services-managed-sdk.aspx).\n\n3. Restart the app twice.\n\n\tNotice that on the first start-up, sign-in with the provider is again required. However, on the second restart the cached credentials are used and sign-in is bypassed.\n\n## <a name=\"next-steps\"> </a>Next steps\n\nIn the next tutorial, [Service-side authorization of Mobile Services users](mobile-services-javascript-backend-service-side-authorization.md), you will take the user ID value provided by Mobile Services based on an authenticated user and use it to filter the data returned by Mobile Services.\n\n## See also\n\n+ [Enhanced users feature](http://go.microsoft.com/fwlink/p/?LinkId=506605)<br/>\nYou can get additional user data maintained by the identity provider in your mobile service by by calling the **user.getIdentities()** function in server scripts.\n\n+ [Mobile Services .NET How-to Conceptual Reference]<br/>Learn more about how to use Mobile Services with a .NET client.\n\n\n<!-- Anchors. -->\n[Register your app for authentication and configure Mobile Services]: #register\n[Restrict table permissions to authenticated users]: #permissions\n[Add authentication to the app]: #add-authentication\n[Store authentication tokens on the client]: #tokens\n[Next Steps]:#next-steps\n\n\n<!-- URLs. -->\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[My Applications]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n[Live SDK for Windows]: http://go.microsoft.com/fwlink/p/?LinkId=262253\n\n[Get started with Mobile Services]: mobile-services-javascript-backend-windows-store-dotnet-get-started.md\n[Get started with authentication]: mobile-services-javascript-backend-windows-store-dotnet-get-started-users.md\n[Get started with push notifications]: mobile-services-javascript-backend-windows-store-dotnet-get-started-push.md\n[Authorize users with scripts]: mobile-services-windows-store-dotnet-authorize-users-in-scripts.md\n\n[Azure classic portal]: https://manage.windowsazure.com/\n[Mobile Services .NET How-to Conceptual Reference]: mobile-services-windows-dotnet-how-to-use-client-library.md\n[Register your Windows Store app package for Microsoft authentication]: mobile-services-how-to-register-store-app-package-microsoft-authentication.md\n"
  },
  {
    "path": "docs/mobile-services-javascript-backend-windows-universal-dotnet-upload-data-blob-storage.md",
    "content": "<properties\n\tpageTitle=\"Upload images to Azure Blob storage from a universal Windows app | Microsoft Azure\"\n\tdescription=\"Learn how to use a JavaScript backend mobile service to upload images to Azure Blob Storage and access the images from your universal Windows app.\"\n\tservices=\"mobile-services,storage\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows-store\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Upload images to Azure Blob storage by using Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend)]\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-upload-data-blob-storage.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-upload-data-blob-storage.md)\n- [(Android | Javascript)](mobile-services-android-upload-data-blob-storage.md)\n\n## Overview\n\nThis topic shows you how to use Azure Mobile Services to enable your app to upload and store user-generated images in Azure Storage. Mobile Services uses a SQL Database to store data. However, binary large object (BLOB) data is more efficiently stored in Azure Blob storage service.\n\nYou cannot securely distribute with the client app the credentials required to securely upload data to the Blob Storage service. Instead, you must store these credentials in your mobile service and use them to generate a Shared Access Signature (SAS) that is used to upload a new image. The SAS, a credential with a short expiration&mdash;in this case 5 minutes, is returned securely by Mobile Services to the client app. The app then uses this temporary credential to upload the image. In this example, downloads from the Blob service are public.\n\nIn this tutorial you add functionality to the Mobile Services quickstart app to take pictures and upload the images to Azure by using an SAS generated by Mobile Services.\n\n## Prerequisites\n\nThis tutorial requires the following:\n\n+ Microsoft Visual Studio 2013 Update 3, or a later version\n+ [Azure Storage account](https://azure.microsoft.com/en-us/documentation/articles/storage-create-storage-account/)\n+ A camera or other image capture device attached to your computer.\n\nThis tutorial is based on the Mobile Services quickstart. Before you start this tutorial, you must first complete [Get started with Mobile Services].\n\n## Update the registered insert script in the Azure classic portal\n\nA new insert script is registered that generates an SAS when a new Todo item is inserted.\n\n0. If you haven't yet created your storage account, see [How To Create a Storage Account](https://azure.microsoft.com/en-us/documentation/articles/storage-create-storage-account/).\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Storage**, click the storage account, then click **Manage Keys**.\n\n2. Make a note of the **Storage Account Name** and **Access Key**.\n\n   \t![](./media/mobile-services-configure-blob-storage/mobile-blob-storage-account-keys.png)\n\n3. In your mobile service, click the **Configure** tab, scroll down to **App settings** and enter a **Name** and **Value** pair for each of the following that you obtained from the storage account, then click **Save**.\n\n\t+ `STORAGE_ACCOUNT_NAME`\n\t+ `STORAGE_ACCOUNT_ACCESS_KEY`\n\n\t![](./media/mobile-services-configure-blob-storage/mobile-blob-storage-app-settings.png)\n\n\tThe storage account access key is stored encrypted in app settings. You can access this key from any server script at runtime. For more information, see [App settings].\n\n4. In the Configure tab, make sure that [Dynamic schema](http://msdn.microsoft.com/library/windowsazure/b6bb7d2d-35ae-47eb-a03f-6ee393e170f7) is enabled. You need dynamic schema enabled to be able to add new columns to the TodoItem table. Dynamic schema should not be enabled in any production service.\n\n4. Click the **Data** tab and then click the **TodoItem** table.\n\n5.  In **todoitem**, click the **Script** tab and select **Insert**, replace the insert function with the following code, then click **Save**:\n\n\t\tvar azure = require('azure');\n\t\tvar qs = require('querystring');\n\t\tvar appSettings = require('mobileservice-config').appSettings;\n\n\t\tfunction insert(item, user, request) {\n\t\t    // Get storage account settings from app settings.\n\t\t    var accountName = appSettings.STORAGE_ACCOUNT_NAME;\n\t\t    var accountKey = appSettings.STORAGE_ACCOUNT_ACCESS_KEY;\n\t\t    var host = accountName + '.blob.core.windows.net';\n\n\t\t    if ((typeof item.containerName !== \"undefined\") && (\n\t\t    item.containerName !== null)) {\n\t\t        // Set the BLOB store container name on the item, which must be lowercase.\n\t\t        item.containerName = item.containerName.toLowerCase();\n\n\t\t        // If it does not already exist, create the container\n\t\t        // with public read access for blobs.        \n\t\t        var blobService = azure.createBlobService(accountName, accountKey, host);\n\t\t        blobService.createContainerIfNotExists(item.containerName, {\n\t\t            publicAccessLevel: 'blob'\n\t\t        }, function(error) {\n\t\t            if (!error) {\n\n\t\t                // Provide write access to the container for the next 5 mins.        \n\t\t                var sharedAccessPolicy = {\n\t\t                    AccessPolicy: {\n\t\t                        Permissions: azure.Constants.BlobConstants.SharedAccessPermissions.WRITE,\n\t\t                        Expiry: new Date(new Date().getTime() + 5 * 60 * 1000)\n\t\t                    }\n\t\t                };\n\n\t\t                // Generate the upload URL with SAS for the new image.\n\t\t                var sasQueryUrl =\n\t\t                blobService.generateSharedAccessSignature(item.containerName,\n\t\t                item.resourceName, sharedAccessPolicy);\n\n\t\t                // Set the query string.\n\t\t                item.sasQueryString = qs.stringify(sasQueryUrl.queryString);\n\n\t\t                // Set the full path on the new new item,\n\t\t                // which is used for data binding on the client.\n\t\t                item.imageUri = sasQueryUrl.baseUrl + sasQueryUrl.path;\n\n\t\t            } else {\n\t\t                console.error(error);\n\t\t            }\n\t\t            request.execute();\n\t\t        });\n\t\t    } else {\n\t\t        request.execute();\n\t\t    }\n\t\t}\n\n   \tThis replaces the function that is invoked when an insert occurs in the TodoItem table with a new script. This new script generates a new SAS for the insert, which is valid for 5 minutes, and assigns the value of the generated SAS to the `sasQueryString` property of the returned item. The `imageUri` property is also set to the resource path of the new BLOB to enable image display during binding in the client UI.\n\n\t>[AZURE.NOTE] This code creates an SAS for an individual BLOB. If you need to upload multiple blobs to a container using the same SAS, you can instead call the [generateSharedAccessSignature method](http://go.microsoft.com/fwlink/?LinkId=390455)</a> with an empty blob resource name, like this:\n\t>                 \n\t>     blobService.generateSharedAccessSignature(containerName, '', sharedAccessPolicy);\n\nNext, you will update the quickstart app to add image upload functionality by using the SAS generated on insert.\n\n<!-- Anchors. -->\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[App settings]: http://msdn.microsoft.com/library/windowsazure/b6bb7d2d-35ae-47eb-a03f-6ee393e170f7\n\n## Install the Storage client for Windows Store apps\n\nTo be able to use an SAS to upload images to Blob storage, you must first add the NuGet package that installs Storage client library for Windows Store apps.\n\n1. In **Solution Explorer** in Visual Studio, right-click the project name, and then select **Manage NuGet Packages**.\n\n2. In the left pane, select the **Online** category, search for `WindowsAzure.Storage`, click **Install** on the **Azure Storage** package, then accept the license agreements.\n\n  \t![](./media/mobile-services-windows-universal-dotnet-upload-to-blob-storage/mobile-add-storage-nuget-package-dotnet.png)\n\n  \tThis adds the client library for Azure storage services to the project.\n\nNext, you will update the quickstart app to capture and upload images.\n\n## Update the quickstart client app to capture and upload images\n\n1. In Visual Studio, open the Package.appxmanifest file for the Windows app project and in the **Capabilities** tab enable the **Webcam** and **Microphone** capabilities.\n\n   \t![](./media/mobile-services-windows-universal-dotnet-upload-to-blob-storage/mobile-app-manifest-camera.png)\n\n   \tThis makes sure that your app can use a camera attached to the computer. Users will be requested to allow camera access the first time that the app is run.\n\n2. Repeat the step above for the Windows Phone app project.\n\n3. In the Windows app project, open the MainPage.xaml file and replace the **StackPanel** element directly after the first **QuickStartTask** element with the following code:\n\n\t\t<StackPanel Orientation=\"Horizontal\" Margin=\"72,0,0,0\">\n            <TextBox Name=\"TextInput\" Margin=\"5\" MaxHeight=\"40\" MinWidth=\"300\"></TextBox>\n            <AppBarButton Label=\"Photo\" Icon=\"Camera\" Name=\"ButtonCapture\" Click=\"ButtonCapture_Click\" />\n            <AppBarButton Label=\"Upload\" Icon=\"Upload\" Name=\"ButtonSave\" Click=\"ButtonSave_Click\"/>\n        </StackPanel>\n        <Grid Name=\"captureGrid\" Margin=\"62,0,0,0\" Visibility=\"Collapsed\" >\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"*\" />\n                <RowDefinition Height=\"Auto\" />\n            </Grid.RowDefinitions>\n            <CaptureElement x:Name=\"previewElement\" Grid.Row=\"0\" Tapped=\"previewElement_Tapped\" />\n            <Image Name=\"imagePreview\" Grid.Row=\"0\"  />\n            <StackPanel Name=\"captureButtons\" Orientation=\"Horizontal\" Grid.Row=\"1\">\n                <TextBlock Name=\"TextCapture\" />\n                <AppBarButton Label=\"Retake\" Icon=\"Redo\" Name=\"ButtonRetake\" Click=\"ButtonCapture_Click\" />\n                <AppBarButton Label=\"Cancel\" Icon=\"Cancel\" Name=\"ButtonCancel\" Click=\"ButtonCancel_Click\" />\n            </StackPanel>\n        </Grid>\n\n2. Replace the **StackPanel** element in the **DataTemplate** with the following code:\n\n        <StackPanel Orientation=\"Vertical\">\n            <CheckBox Name=\"CheckBoxComplete\" IsChecked=\"{Binding Complete, Mode=TwoWay}\"\n                        Checked=\"CheckBoxComplete_Checked\" Content=\"{Binding Text}\"\n                        Margin=\"10,5\" VerticalAlignment=\"Center\"/>\n            <Image Name=\"ImageUpload\" Source=\"{Binding ImageUri, Mode=OneWay}\"\n                    MaxHeight=\"250\"/>\n        </StackPanel>\n\n   \tThis adds an image to the **ItemTemplate** and sets its binding source as the URI of the uploaded image in the Blob Storage service.\n\n3. In the Windows Phone app project, open the MainPage.xaml file and replace the **ButtonSave** element with the following code:\n\n        <StackPanel Grid.Row =\"1\" Grid.Column=\"1\"  Orientation=\"Horizontal\">\n            <AppBarButton Label=\"Photo\" Icon=\"Camera\" Name=\"ButtonCapture\"\n                          Click=\"ButtonCapture_Click\" Height=\"78\" Width=\"62\" />\n            <AppBarButton Label=\"Upload\" Icon=\"Upload\" Name=\"ButtonSave\"\n                          Click=\"ButtonSave_Click\"/>\n        </StackPanel>\n        <Grid Grid.Row=\"2\" Name=\"captureGrid\" Grid.RowSpan=\"3\" Grid.ColumnSpan=\"2\"\n              Canvas.ZIndex=\"99\" Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\"\n              Visibility=\"Collapsed\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"*\" />\n                <RowDefinition Height=\"Auto\" />\n            </Grid.RowDefinitions>\n            <CaptureElement Grid.Row=\"0\" x:Name=\"previewElement\" Tapped=\"previewElement_Tapped\" />                    \n            <Image Grid.Row=\"0\" Name=\"imagePreview\" Visibility=\"Collapsed\" />\n            <StackPanel Grid.Row=\"1\" Name=\"captureButtons\"\n                        Orientation=\"Horizontal\" Visibility=\"Collapsed\">\n                <TextBlock Name=\"TextCapture\" VerticalAlignment=\"Bottom\" />\n                <AppBarButton Label=\"Retake\" Icon=\"Redo\" Name=\"ButtonRetake\"\n                              Click=\"ButtonRetake_Click\" />\n                <AppBarButton Label=\"Cancel\" Icon=\"Cancel\" Name=\"ButtonCancel\"\n                              Click=\"ButtonCancel_Click\" />\n            </StackPanel>\n        </Grid>\n\n2. Replace the **StackPanel** element in the **DataTemplate** with the following code:\n\n        <StackPanel Orientation=\"Vertical\">\n            <CheckBox Name=\"CheckBoxComplete\" IsChecked=\"{Binding Complete, Mode=TwoWay}\"\n                      Checked=\"CheckBoxComplete_Checked\" Content=\"{Binding Text}\"\n                      Margin=\"10,5\" VerticalAlignment=\"Center\"/>\n            <Image Name=\"ImageUpload\" Source=\"{Binding ImageUri, Mode=OneWay}\"\n                   MaxHeight=\"150\"/>\n        </StackPanel>\n\n4. In the shared DataModel folder, open the TodoItem.cs project file and add add the following properties to the TodoItem class:\n\n        [JsonProperty(PropertyName = \"containerName\")]\n        public string ContainerName { get; set; }\n\n        [JsonProperty(PropertyName = \"resourceName\")]\n        public string ResourceName { get; set; }\n\n        [JsonProperty(PropertyName = \"sasQueryString\")]\n        public string SasQueryString { get; set; }\n\n        [JsonProperty(PropertyName = \"imageUri\")]\n        public string ImageUri { get; set; }\n\n3. Open the shared MainPage.cs project file and add the following **using** statements:\n\n\t\tusing Windows.Media.Capture;\n\t\tusing Windows.Media.MediaProperties;\n\t\tusing Windows.Storage;\n\t\tusing Windows.UI.Xaml.Input;\n\t\tusing Microsoft.WindowsAzure.Storage.Auth;\n\t\tusing Microsoft.WindowsAzure.Storage.Blob;\n\t\tusing Windows.UI.Xaml.Media.Imaging;\n\n5. Add the following code to the MainPage class:\n\n        // Use a StorageFile to hold the captured image for upload.\n        StorageFile media = null;\n        MediaCapture cameraCapture;\n        bool IsCaptureInProgress;\n\n        private async Task CaptureImage()\n        {\n            // Capture a new photo or video from the device.\n            cameraCapture = new MediaCapture();\n            cameraCapture.Failed += cameraCapture_Failed;\n\n            // Initialize the camera for capture.\n            await cameraCapture.InitializeAsync();\n\n            #if WINDOWS_PHONE_APP\n            cameraCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees);\n            cameraCapture.SetRecordRotation(VideoRotation.Clockwise90Degrees);\n            #endif\n\n            captureGrid.Visibility = Windows.UI.Xaml.Visibility.Visible;\n            previewElement.Visibility = Windows.UI.Xaml.Visibility.Visible;\n            previewElement.Source = cameraCapture;\n            await cameraCapture.StartPreviewAsync();\n        }\n\n        private async void previewElement_Tapped(object sender, TappedRoutedEventArgs e)\n        {\n            // Block multiple taps.\n            if (!IsCaptureInProgress)\n            {                \n                IsCaptureInProgress = true;\n\n                // Create the temporary storage file.\n                media = await ApplicationData.Current.LocalFolder\n                    .CreateFileAsync(\"capture_file.jpg\", CreationCollisionOption.ReplaceExisting);\n\n                // Take the picture and store it locally as a JPEG.\n                await cameraCapture.CapturePhotoToStorageFileAsync(\n                    ImageEncodingProperties.CreateJpeg(), media);\n\n                captureButtons.Visibility = Visibility.Visible;\n\n\t\t\t\t// Use the stored image as the preview source.\n                BitmapImage tempBitmap = new BitmapImage(new Uri(media.Path));\n                imagePreview.Source = tempBitmap;\n                imagePreview.Visibility = Visibility.Visible;\n                previewElement.Visibility = Visibility.Collapsed;\n                IsCaptureInProgress = false;\n            }\n        }\n\n        private async void cameraCapture_Failed(MediaCapture sender, MediaCaptureFailedEventArgs errorEventArgs)\n        {\n            // It's safest to return this back onto the UI thread to show the message dialog.\n            MessageDialog dialog = new MessageDialog(errorEventArgs.Message);\n            await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,\n                async () => { await dialog.ShowAsync(); });            \n        }\n\n        private async void ButtonCapture_Click(object sender, RoutedEventArgs e)\n        {\n            // Prevent multiple initializations.\n            ButtonCapture.IsEnabled = false;\n\n            await CaptureImage();\n        }\n\n        private async void ButtonRetake_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)\n        {\n            // Reset the capture and then start again.\n            await ResetCaptureAsync();\n            await CaptureImage();\n        }\n\n        private async void ButtonCancel_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)\n        {\n            await ResetCaptureAsync();\n        }\n\n        private async Task ResetCaptureAsync()\n        {\n            captureGrid.Visibility = Windows.UI.Xaml.Visibility.Collapsed;\n            imagePreview.Visibility = Visibility.Collapsed;\n            captureButtons.Visibility = Visibility.Collapsed;\n            previewElement.Source = null;\n            ButtonCapture.IsEnabled = true;\n\n            // Make sure we stop the preview and release resources.\n            await cameraCapture.StopPreviewAsync();\n            cameraCapture.Dispose();\n            media = null;\n        }\n\n  \tThis code displays the UI used to capture an image, and saves the image to a storage file.\n\n6. Replace the existing `InsertTodoItem` method with the following code:\n\n        private async Task InsertTodoItem(TodoItem todoItem)\n        {\n            string errorString = string.Empty;\n\n            if (media != null)\n            {\n                // Set blob properties of TodoItem.\n                todoItem.ContainerName = \"todoitemimages\";\n\n                // Use a unigue GUID to avoid collisions.\n                todoItem.ResourceName = Guid.NewGuid().ToString();\n            }\n\n            // Send the item to be inserted. When blob properties are set this\n            // generates an SAS in the response.\n            await todoTable.InsertAsync(todoItem);\n\n            // If we have a returned SAS, then upload the blob.\n            if (!string.IsNullOrEmpty(todoItem.SasQueryString))\n            {\n                // Get the URI generated that contains the SAS\n                // and extract the storage credentials.\n                StorageCredentials cred = new StorageCredentials(todoItem.SasQueryString);\n                var imageUri = new Uri(todoItem.ImageUri);\n\n                // Instantiate a Blob store container based on the info in the returned item.\n                CloudBlobContainer container = new CloudBlobContainer(\n                    new Uri(string.Format(\"https://{0}/{1}\",\n                        imageUri.Host, todoItem.ContainerName)), cred);\n\n                // Get the new image as a stream.\n                using (var inputStream = await media.OpenReadAsync())\n                {\n                    // Upload the new image as a BLOB from the stream.\n                    CloudBlockBlob blobFromSASCredential =\n                        container.GetBlockBlobReference(todoItem.ResourceName);\n                    await blobFromSASCredential.UploadFromStreamAsync(inputStream);\n                }\n\n                // When you request an SAS at the container-level instead of the blob-level,\n                // you are able to upload multiple streams using the same container credentials.\n\n                await ResetCaptureAsync();\n            }\n\n            // Add the new item to the collection.\n            items.Add(todoItem);\n        }\n\n\tThis code sends a request to the mobile service to insert a new TodoItem. The response contains the SAS, which is then used to upload the image from local storage to Azure Blob storage. The URL of the uploaded image is used in data binding.\n\nThe final step is to test both versions of the app and validate that uploads succeed from both devices.\n\n## <a name=\"test\"></a>Test uploading the images in your app\n\n1. In Visual Studio, make sure that the Windows project is set as the default project, then press the F5 key to run the app.\n\n2. Enter text in the textbox under **Insert a TodoItem**, then click **Photo**.\n\n3. Click or tap the preview to take a picture, then click **Upload** to insert the new item and upload the image.\n\n\t![](./media/mobile-services-windows-universal-dotnet-upload-to-blob-storage/mobile-quickstart-blob-appbar2.png)\n\n4. The new item, along with the uploaded image, is displayed in the list view.\n\n\t![](./media/mobile-services-windows-universal-dotnet-upload-to-blob-storage/mobile-quickstart-blob-ie.png)\n\n   \t>[AZURE.NOTE]The image is downloaded automatically from Blob storage when the *imageUri* property of the new item is bound to the **Image** control.\n\n5. Stop the app and restart the Windows Phone project version of the app.\n\n\tThe previously uploaded image is displayed.\n\n6. As before, enter some text in the textbox, then click **Photo**.\n\n   \t![](./media/mobile-services-windows-universal-dotnet-upload-to-blob-storage/mobile-upload-blob-app-view-wp8.png)\n\n3. Tap the preview to take a picture, then click **Upload** to insert the new item and upload the image.\n\n\t![](./media/mobile-services-windows-universal-dotnet-upload-to-blob-storage/mobile-upload-blob-app-view-final-wp8.png)\n\nYou have completed the upload images tutorial.\n\n## Next steps\n\nNow that you have been able to securely upload images by integrating your mobile service with the Blob service, check out some of the other backend service and integration topics:\n\n+ [Schedule backend jobs in Mobile Services]\n\n  \tLearn how to use the Mobile Services job scheduler functionality to define server script code that is executed on a schedule that you define.\n\n+ [Mobile Services server script reference]\n\n    Reference topics for using server scripts to perform server-side tasks and integration with other Azure components and external resources.\n\n+ [Mobile Services .NET How-to Conceptual Reference]\n\n    Learn more about how to use Mobile Services with .NET\n\n\n<!-- Anchors. -->\n[Install the Storage Client library]: #install-storage-client\n[Update the client app to capture images]: #add-select-images\n[Update the insert script to generate an SAS]: #update-scripts\n[Upload images to test the app]: #test\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n\n[2]: ./media/mobile-services-windows-store-dotnet-upload-data-blob-storage/mobile-add-storage-nuget-package-dotnet.png\n\n\n<!-- URLs. -->\n[Send email from Mobile Services with SendGrid]: store-sendgrid-mobile-services-send-email-scripts.md\n[Schedule backend jobs in Mobile Services]: mobile-services-schedule-recurring-tasks.md\n[Send push notifications to Windows Store apps using Service Bus from a .NET back-end]: http://go.microsoft.com/fwlink/?LinkId=277073&clcid=0x409\n[Mobile Services server script reference]: mobile-services-how-to-use-server-scripts.md\n[Get started with Mobile Services]: mobile-services-javascript-backend-windows-store-dotnet-get-started.md\n[How To Create a Storage Account]: https://azure.microsoft.com/en-us/documentation/articles/storage-create-storage-account/\n[Azure Storage Client library for Store apps]: http://go.microsoft.com/fwlink/p/?LinkId=276866\n[Mobile Services .NET How-to Conceptual Reference]: mobile-services-windows-dotnet-how-to-use-client-library.md\n[App settings]: http://msdn.microsoft.com/library/windowsazure/b6bb7d2d-35ae-47eb-a03f-6ee393e170f7\n"
  },
  {
    "path": "docs/mobile-services-manage-command-line-interface.md",
    "content": "<properties\n\tpageTitle=\"Administering a Mobile Service from the command line | Microsoft Azure\"\n\tdescription=\"Learn how to create, deploy, and manage your Azure Mobile Service using command-line tools.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"Mobile\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"NA\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Automate mobile services with command-line tools\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n## Overview\n\nThis topic shows you how to use the Azure command-line tools to automate the creation and management of Azure Mobile Services. This topic shows you how to install and get started using the command-line tools and use them to perform key Mobile Services.\n\nWhen combined into a single script or batch file, these individual commands automate the creation, verification, and deletion process of a mobile service.\n\nThis topic covers a selection of common administration tasks supported by the Azure command-line tools. For more information, see [Azure command-line tools documentation][reference-docs].\n\n## Install the Azure Command-Line Tools\n\nThe following list contains information for installing the command-line tools, depending on your operating system:\n\n* **Windows**: Download the [Azure Command-Line Tools Installer][windows-installer]. Open the downloaded .msi file and complete the installation steps as you are prompted.\n\n* **Mac**: Download the [Azure SDK Installer][mac-installer]. Open the downloaded .pkg file and complete the installation steps as you are prompted.\n\n* **Linux**: Install the latest version of [Node.js][nodejs-org] (see [Install Node.js via Package Manager][install-node-linux]), then run the following command:\n\n\tnpm install azure-cli -g\n\nTo test the installation, type `azure` at the command prompt. When the installation is successful, you will see a list of all the available `azure` commands.\n\n## How to download and import publish settings\n\nTo get started, you must first download and import your publish settings. Then you can use the tools to create and manage Azure Services. To download your publish settings, use the `account download` command:\n\n\tazure account download\n\nThis opens your default browser and prompts you to sign in to the Azure classic portal. After signing in, your `.publishsettings` file is downloaded. Note the location of this saved file.\n\nNext, import the `.publishsettings` file by running the following command, replacing `<path-to-settings-file>` with the path to your `.publishsettings` file:\n\n\tazure account import <path-to-settings-file>\n\nYou can remove all of the information stored by the <code>import</code> command by using the <code>account clear</code> command:\n\n\tazure account clear\n\nTo see a list of options for `account` commands, use the `-help` option:\n\n\tazure account -help\n\nAfter importing your publish settings, you should delete the `.publishsettings` file for security reasons. For more information, see [How to install the Azure Command-Line Tools for Mac and Linux]. You are now ready to begin creating and managing Azure Mobile Services from the command line or in batch files.\n\n## How to create a mobile service\n\nYou can use the command-line tools to create a new mobile service instance. While creating the mobile service, you also create a SQL Database instance in a new server.\n\nThe following command creates a new mobile service instance in your subscription, where `<service-name>` is the name of the new mobile service, `<server-admin>` is the login name of the new server, and `<server-password>` is the password for the new login:\n\n\tazure mobile create <service-name> <server-admin> <server-password>\n\nThe `mobile create` command fails when the specified mobile service exists. In your automation scripts, you should attempt to delete a mobile service before attempting to recreate it.\n\n## How to list existing mobile services in a subscription\n\n> [AZURE.NOTE] Commands in the CLI related to \"list\" and \"script\" only work with the JavaScript backend.\n\nThe following command returns a list of all the mobile services in an Azure subscription:\n\n\tazure mobile list\n\nThis command also shows the current state and URL of each mobile service.\n\n## How to delete an existing mobile service\n\nYou can use the command-line tools to delete an existing mobile service, along with the related SQL Database and server. The following command deletes the mobile service, where `<service-name>` is the name of the mobile service to delete:\n\n\tazure mobile delete <service-name> -a -q\n\nBy including `-a` and `-q` parameters, this command also deletes the SQL Database and server used by the mobile service without displaying a prompt.\n\n> [AZURE.NOTE] If you do not specify the <code>-q</code> parameter along with <code>-a</code> or <code>-d</code>, execution is paused and you are prompted to select delete options for your SQL Database. Only use the <code>-a</code> parameter when no other service uses the database or server; otherwise use the <code>-d</code> parameter to only delete data that belongs to the mobile service being deleted.\n\n## How to create a table in the mobile service\n\nThe following command creates a table in the specified mobile service, where `<service-name>` is the name of the mobile service and `<table-name>` is the name of the table to create:\n\n\tazure mobile table create <service-name> <table-name>\n\nThis creates a new table with the default permissions, `application`, for the table operations: `insert`, `read`, `update`, and `delete`.\n\nThe following command creates a new table with public `read` permission but with `delete` permission granted only to administrators:\n\n\tazure mobile table create <service-name> <table-name> -p read=public,delete=admin\n\nThe following table shows the script permission value compared to the permission value in the [Azure classic portal].\n\n|Script value|Portal value|\n|========|========|\n|`public`|Everyone|\n|`application`(default)|Anybody with the application key|\n|`user`|Only authenticated users|\n|`admin`|Only scripts and admins|\n\nThe `mobile table create` command fails when the specified table already exists. In your automation scripts, you should attempt to delete a table before attempting to recreate it.\n\n## How to list existing tables in a mobile service\n\nThe following command returns a list of all of the tables in a mobile service, where `<service-name>` is the name of the mobile service:\n\n\tazure mobile table list <service-name>\n\nThis command also shows the number of indexes on each table and the number of data rows currently in the table.\n\n## How to delete an existing table from the mobile service\n\nThe following command deletes a table from the mobile service, where `<service-name>` is the name of the mobile service and `<table-name>` is the name of the table to delete:\n\n\tazure mobile table delete <service-name> <table-name> -q\n\nIn automation scripts, use the `-q` parameter to delete the table without displaying a confirmation prompt that blocks execution.\n\n## How to register a script to a table operation\n\nThe following command uploads and registers a function to an operation on a table, where `<service-name>` is the name of the mobile service, `<table-name>` is the name of the table, and `<operation>` is the table operation, which can be `read`, `insert`, `update`, or `delete`:\n\n\tazure mobile script upload <service-name> table/<table-name>.<operation>.js\n\nNote that this operation uploads a JavaScript (.js) file from the local computer. The name of the file must be composed  from the table and operation names, and it must be located in the `table` subfolder relative to the location where the command is executed. For example, the following operation uploads and registers a new `insert` script that belongs to the `TodoItems` table:\n\n\tazure mobile script upload todolist table/todoitems.insert.js\n\nThe function declaration in the script file must also match the registered table operation. This means that for an `insert` script, the uploaded script contains a function with the following signature:\n\n\tfunction insert(item, user, request) {\n\t    ...\n\t}\n\nFor more information about registering scripts, see [Mobile Services server script reference].\n\n<!-- Anchors. -->\n[Download and install the command-line tools]: #install\n[Download and import publish settings]: #import\n[Create a new mobile service]: #create-service\n[Get the master key]: #get-master-key\n[Create a new table]: #create-table\n[Register a new table script]: #register-script\n[Delete an existing table]: #delete-table\n[Delete an existing mobile service]: #delete-service\n[Test the mobile service]: #test-service\n[List mobile services]: #list-services\n[List tables]: #list-tables\n[Next steps]: #next-steps\n\n<!-- Images. -->\n\n\n\n\n\n\n\n\n\n\n\n<!-- URLs. -->\n[Mobile Services server script reference]: http://go.microsoft.com/fwlink/p?LinkId=262293\n\n[Azure classic portal]: https://manage.windowsazure.com/\n[nodejs-org]: http://nodejs.org/\n[install-node-linux]: https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager\n\n[mac-installer]: http://go.microsoft.com/fwlink/p?LinkId=252249\n[windows-installer]: http://go.microsoft.com/fwlink/p?LinkID=275464\n[reference-docs]: http://azure.microsoft.com/documentation/articles/virtual-machines-command-line-tools/#Commands_to_manage_mobile_services\n[How to install the Azure Command-Line Tools for Mac and Linux]: http://go.microsoft.com/fwlink/p/?LinkId=275795\n\n"
  },
  {
    "path": "docs/mobile-services-schedule-recurring-tasks.md",
    "content": "<properties\n\tpageTitle=\"Schedule backend tasks in a JavaScript backend mobile service | Microsoft Azure\"\n\tdescription=\"Use the scheduler in Azure Mobile Services to define JavaScript backend jobs that run on a schedule.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-multiple\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Schedule recurring jobs in Mobile Services\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR]\n- [.NET backend](mobile-services-dotnet-backend-schedule-recurring-tasks.md)\n- [Javascript backend](mobile-services-schedule-recurring-tasks.md)\n\nThis topic shows you how to use the job scheduler functionality in the Azure classic portal to define server script code that is executed based on a schedule that you define. In this case, the script periodically check with a remote service, in this case Twitter, and stores the results in a new table. Some other periodic tasks that can be scheduled include:\n\n+ Archiving old or duplicate data records.\n+ Requesting and storing external data, such as tweets, RSS entries, and location information.\n+ Processing or resizing stored images.\n\nThis tutorial shows you how to use the job scheduler to create a scheduled job that requests tweet data from Twitter and stores the tweets in a new Updates table.\n\n## <a name=\"get-oauth-credentials\"></a>Register for access to Twitter v1.1 APIs and store credentials\n\n\n\nThe new Twitter v1.1 APIs requires your app to authenticate before accessing resources. First, you need to get the credentials needed to request access by using OAuth 2.0. Then, you will store them securely in the app settings for your mobile service.\n\n1. If you haven't already done so, complete the steps in the topic [Register your apps for Twitter login with Mobile Services](./\nmobile-services-how-to-register-twitter-authentication.md). \n  \n  \tTwitter generates the credentials needed to enable you to access Twitter v1.1 APIs. You can get these credentials from the Twitter Developers website. \n\n2. Navigate to the [Twitter Developers](http://go.microsoft.com/fwlink/p/?LinkId=268300) website, sign-in with your Twitter account credentials and select your Twitter app.\n\n3. In the **Keys and Access Tokens** tab for the app, make a note of the following values:\n\n\t+ **Consumer key**\n\t+ **Consumer secret**\n\t+ **Access token**\n\t+ **Access token secret**\n\n4. Log on to the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, and then click your mobile service.\n\n5. Click the **Identity** tab, enter the **Consumer key** and **Consumer secret** values obtained from Twitter, and click **Save**. \n\n\t![](./media/mobile-services-register-twitter-access/mobile-identity-tab-twitter-only.png)\n\n2. Click the **Configure** tab, scroll down to **App settings** and enter a **Name** and **Value** pair for each of the following that you obtained from the Twitter site, then click **Save**.\n\n\t+ `TWITTER_ACCESS_TOKEN`\n\t+ `TWITTER_ACCESS_TOKEN_SECRET`\n\n\t![](./media/mobile-services-register-twitter-access/mobile-schedule-job-app-settings.png)\n\n\tThis stores the Twitter access token in app settings. Like the consumer credentials on the **Identity** tab, the access credentials are also stored encrypted in app settings, and you can access them in your server scripts without hard-coding them in the script file. For more information, see [App settings].\n\n<!-- URLs. -->\n[Mobile Services server script reference]: http://go.microsoft.com/fwlink/?LinkId=262293\n[Register your apps for Twitter login with Mobile Services]: ./\nmobile-services-how-to-register-twitter-authentication.md\n[Twitter Developers]: http://go.microsoft.com/fwlink/p/?LinkId=268300\n[App settings]: http://msdn.microsoft.com/library/azure/b6bb7d2d-35ae-47eb-a03f-6ee393e170f7\n\n## <a name=\"create-table\"></a>Create the new Updates table\n\nNext, you need to create a new table in which to store tweets.\n\n2. In the [Azure classic portal], click the **Data** tab for your mobile service, then click **+Create**.\n\n3. In **Table name** type _Updates_, then click the check button.\n\n## <a name=\"add-job\"></a>Create a new scheduled job\n\nNow, you can create the scheduled job that accesses Twitter and stores tweet data in the new Updates table.\n\n2. Click the **Scheduler** tab, then click **+Create**.\n\n    >[AZURE.NOTE]When you run your mobile service in <em>Free</em> tier, you are only able to run one scheduled job at a time. In paid tiers, you can run up to ten scheduled jobs at a time.\n\n3. In the scheduler dialog, enter _getUpdates_ for the **Job Name**, set the schedule interval and units, then click the check button.\n\n   \tThis creates a new job named **getUpdates**.\n\n4. Click the new job you just created, click the **Script** tab and replace the placeholder function **getUpdates** with the following code:\n\n\t\tvar updatesTable = tables.getTable('Updates');\n\t\tvar request = require('request');\n\t\tvar twitterUrl = \"https://api.twitter.com/1.1/search/tweets.json?q=%23mobileservices&result_type=recent\";\n\n\t\t// Get the service configuration module.\n\t\tvar config = require('mobileservice-config');\n\n\t\t// Get the stored Twitter consumer key and secret.\n\t\tvar consumerKey = config.twitterConsumerKey,\n\t\t    consumerSecret = config.twitterConsumerSecret\n\t\t// Get the Twitter access token from app settings.\n\t\tvar accessToken= config.appSettings.TWITTER_ACCESS_TOKEN,\n\t\t    accessTokenSecret = config.appSettings.TWITTER_ACCESS_TOKEN_SECRET;\n\n\t\tfunction getUpdates() {\n\t\t    // Check what is the last tweet we stored when the job last ran\n\t\t    // and ask Twitter to only give us more recent tweets\n\t\t    appendLastTweetId(\n\t\t        twitterUrl,\n\t\t        function twitterUrlReady(url){\n\t\t            // Create a new request with OAuth credentials.\n\t\t            request.get({\n\t\t                url: url,\n\t\t                oauth: {\n\t\t                    consumer_key: consumerKey,\n\t\t                    consumer_secret: consumerSecret,\n\t\t                    token: accessToken,\n\t\t                    token_secret: accessTokenSecret\n\t\t                }},\n\t\t                function (error, response, body) {\n\t\t                if (!error && response.statusCode == 200) {\n\t\t                    var results = JSON.parse(body).statuses;\n\t\t                    if(results){\n\t\t                        console.log('Fetched ' + results.length + ' new results from Twitter');\n\t\t                        results.forEach(function (tweet){\n\t\t                            if(!filterOutTweet(tweet)){\n\t\t                                var update = {\n\t\t                                    twitterId: tweet.id,\n\t\t                                    text: tweet.text,\n\t\t                                    author: tweet.user.screen_name,\n\t\t                                    date: tweet.created_at\n\t\t                                };\n\t\t                                updatesTable.insert(update);\n\t\t                            }\n\t\t                        });\n\t\t                    }\n\t\t                } else {\n\t\t                    console.error('Could not contact Twitter');\n\t\t                }\n\t\t            });\n\n\t\t        });\n\t\t }\n\t\t// Find the largest (most recent) tweet ID we have already stored\n\t\t// (if we have stored any) and ask Twitter to only return more\n\t\t// recent ones\n\t\tfunction appendLastTweetId(url, callback){\n\t\t    updatesTable\n\t\t    .orderByDescending('twitterId')\n\t\t    .read({success: function readUpdates(updates){\n\t\t        if(updates.length){\n\t\t            callback(url + '&since_id=' + (updates[0].twitterId + 1));\n\t\t        } else {\n\t\t            callback(url);\n\t\t        }\n\t\t    }});\n\t\t}\n\n\t\tfunction filterOutTweet(tweet){\n\t\t    // Remove retweets and replies\n\t\t    return (tweet.text.indexOf('RT') === 0 || tweet.to_user_id);\n\t\t}\n\n\n   \tThis script calls the Twitter query API using stored credentials to request recent tweets that contain the hashtag `#mobileservices`. Duplicate tweets and replies are removed from the results before they are stored in the table.\n\n    >[AZURE.NOTE]This sample assumes that only a few rows are inserted into the table during each scheduled run. In cases where many rows are inserted in a loop you may run out of connections when running on the Free tier. In this case, you should perform inserts in batches. For more information, see [How to: Perform bulk inserts](mobile-services-how-to-use-server-scripts.md#bulk-inserts).\n\n6. Click **Run Once** to test the script.\n\n   \tThis saves and executes the job while it remains disabled in the scheduler.\n\n7. Click the back button, click **Data**, click the **Updates** table, click **Browse**, and verify that Twitter data has been inserted into the table.\n\n8. Click the back button, click **Scheduler**, select **getUpdates**, then click **Enable**.\n\n   \tThis enables the job to run on the specified schedule, in this case every hour.\n\nCongratulations, you have successfully created a new scheduled job in your mobile service. This job will be executed as scheduled until you disable or modify it.\n\n## <a name=\"nextsteps\"> </a>See also\n\n* [Mobile Services server script reference]\n  <br/>Learn more about registering and using server scripts.\n\n<!-- Anchors. -->\n[Register for Twitter access and store credentials]: #get-oauth-credentials\n[Create the new Updates table]: #create-table\n[Create a new scheduled job]: #add-job\n[Next steps]: #next-steps\n\n<!-- Images. -->\n\n<!-- URLs. -->\n[Mobile Services server script reference]: http://go.microsoft.com/fwlink/?LinkId=262293\n[WindowsAzure.com]: http://www.windowsazure.com/\n[Azure classic portal]: https://manage.windowsazure.com/\n[Register your apps for Twitter login with Mobile Services]: https://azure.microsoft.com/develop/mobile/how-to-guides/register-for-twitter-authentication\n[Twitter Developers]: http://go.microsoft.com/fwlink/p/?LinkId=268300\n[App settings]: http://msdn.microsoft.com/library/windowsazure/b6bb7d2d-35ae-47eb-a03f-6ee393e170f7\n"
  },
  {
    "path": "docs/mobile-services-sql-scale-guidance.md",
    "content": "<properties\n\tpageTitle=\"Scale mobile services backed by Azure SQL Database | Microsoft Azure\"\n\tdescription=\"Learn how to diagnose and fix scalability issues in your mobile services backed by SQL Database\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"lindydonna\"\n\tmanager=\"dwrede\"\n\teditor=\"mollybos\"/>\n\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"donnam;ricksal\"/>\n\n# Scale mobile services backed by Azure SQL Database\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\nAzure Mobile Services makes it very easy to get started and build an app that connects to a cloud-hosted backend that stores data in a SQL database. As your app grows, scaling your service instances is as simple as adjusting scale settings in the portal to add more computational and networking capacity. However, scaling the SQL database backing your service requires some proactive planning and monitoring as the service receives more load. This document will walk you through a set of best practices to ensure continued great performance of your SQL-backed mobile services.\n\nThis topic walks you through these basic sections:\n\n1. [Diagnosing Problems](#Diagnosing)\n2. [Indexing](#Indexing)\n3. [Schema Design](#Schema)\n4. [Query Design](#Query)\n5. [Service Architecture](#Architecture)\n6. [Advanced Troubleshooting](#Advanced)\n\n<a name=\"Diagnosing\"></a>\n## Diagnosing Problems\n\nIf you suspect your mobile service is experiencing problems under load, the first place to check is the **Dashboard** tab for your service in the [Azure classic portal]. Some of the things to verify here:\n\n- Your usage meters including **API Calls** and **Active Devices** meters are not over quota\n- **Endpoint Monitoring** status indicates service is up (only available if service is using the Standard tier and Endpoint Monitoring is enabled)\n\nIf any of the above is not true, consider adjusting your scale settings on the *Scale* tab. If that does not address the issue, you can proceed and investigate whether Azure SQL Database may be the source of the issue. The next few sections cover a few different approaches to diagnose what may be going wrong.\n\n### Choosing the Right SQL Database Tier\n\nIt is important to understand the different database tiers you have at your disposal to ensure you've picked the right tier given your app's needs. Azure SQL Database offers three different service tiers:\n\n- Basic\n- Standard\n- Premium\n\n\nHere are some recommendations on selecting the right tier for your database:\n\n- **Basic** - use at development time or for small production services where you only expect to make a single database query at a time\n- **Standard** - use for production services where you expect multiple concurrent database queries\n- **Premium** - use for large scale production services with many concurrent queries, high peak load, and expected low latency for every request.\n\nFor more information on when to use each tier, see [Reasons to Use the New Service Tiers]\n\n### Analyzing Database Metrics\n\nOnce you are familiar with the different database tiers, we can explore database performance metrics to help us reason about scaling within and among the tiers.\n\n1. Launch the [Azure classic portal].\n2. On the Mobile Services tab, select the service you want to work with.\n3. Select the **Configure** tab.\n4. Select the **SQL Database** name in the **Database Settings** section. This will navigate to the Azure SQL Database tab in the portal.\n5. Navigate to the **Monitor** tab\n6. Ensure the relevant metrics are displayed by using the **Add Metrics** button. Include the following\n    - *CPU Percentage* (available only in Basic/Standard/Premium tiers)\n\n    - *Data IO Percentage* (available only in Basic/Standard/Premium tiers)\n    - *Log IO Percentage* (available only in Basic/Standard/Premium tiers)\n    - *Storage*\n7. Inspect the metrics over the time window when your service was experiencing issues.\n\n    ![Azure classic portal - SQL Database Metrics][PortalSqlMetrics]\n\nIf any metric exceeds 80% utilization for an extended period of time, this could indicate a performance problem. For more detailed information on understanding database utilization, see [Understanding Resource Use](http://msdn.microsoft.com/library/azure/dn369873.aspx#Resource).\n\nIf the metrics indicate your database is incurring high utilization, consider **scaling up the database to a higher service tier** as a first mitigation step. To immediately resolve issues, consider using the **Scale** tab for your database to scale up your database. This will result in an increase in your bill.\n![Azure classic portal - SQL Database Scale][PortalSqlScale]\n\nAs soon as possible, consider these additional mitigation steps:\n\n- **Tune your database.**\n  It is frequently possible to reduce database utilization and avoid having to scale to a higher tier by optimizing your database.\n- **Consider your service architecture.**\n  Frequently your service load is not distributed evenly over time but contains \"spikes\" of high demand. Instead of scaling the database up to handle the spikes, and having it go underutilized during periods of low demand, it is frequently possible to adjust the service architecture to avoid such spikes, or to handle them without incurring database hits.\n\nThe remaining sections of this document contain tailored guidance to help with implementing these mitigations.\n\n\n### Configuring Alerts\n\nIt is frequently useful to configure alerts for key database metrics as a proactive step to ensure you have plenty of time to react in case of resource exhaustion.\n\n1. Navigate to the **Monitoring** tab for the database you want to set up alerts for\n2. Ensure the relevant metrics are displayed as described in the previous section\n3. Select the metric you want to set an alert for and select **Add Rule**\n\n    ![Azure Management Portal - SQL Alert][PortalSqlAddAlert]\n\n4. Provide a name and description for the alert\n    ![Azure Management Portal - SQL Alert Name and Description][PortalSqlAddAlert2]\n\n5. Specify the value to use as the alert threshold. Consider using **80%** to allow for some reaction time. Also be sure to specify an email address that you actively monitor.\n\n    ![Azure Management Portal - SQL Alert Threshold and Email][PortalSqlAddAlert3]\n\n\nFor more information on diagnosing SQL issues, see [Advanced Diagnostics](#AdvancedDiagnosing) at the bottom of this document.\n\n<a name=\"Indexing\"></a>\n## Indexing\n\nWhen you start to see problems with your query performance, the first thing you should investigate is the design of your indexes. Indexes are important because they directly affect how the SQL engine executes a query. \n\nFor instance, if you often need to look up an element by a certain field, you should consider adding an index for that column. Otherwise, the SQL engine will be forced to perform a table scan and read each physical record (or at least the query column) and the records could be substantially spread out on disk.\n\nSo, if you are frequently doing WHERE or JOIN statements on particular columns, you should make sure you index them. See the section [Creating Indexes](#CreatingIndexes) for more information.\n\nIf indexes are so great and table scans are so bad, does that mean you should index every column in your table, just to be safe?  The short answer is, \"probably not.\" Indexes take up space and have overhead themselves: every time there is an insert in a table, the index structures for each of the indexed columns need to be updated. See below for guidelines on how to choose your column indexes.\n\n### Index Design Guidelines\n\nAs mentioned above, it's not always better to add more indexes to a table, because indexes themselves can be costly, both in terms of performance and storage overhead.\n\n#### Query considerations\n\n- Consider adding indexes to columns that are frequently used in predicates (e.g., WHERE clauses) and join conditions, while balancing the database considerations below.\n- Write queries that insert or modify as many rows as possible in a single statement, instead of using multiple queries to update the same rows. When there is only one statement, the database engine can better optimize how it maintains indexes.\n\n#### Database considerations\n\nLarge numbers of indexes on a table affect the performance of INSERT, UPDATE, DELETE, and MERGE statements because all indexes must be adjusted appropriately as data in the table changes.\n\n- For **heavily updated** tables, avoid indexing heavily updated columns.\n- For tables that are **not frequently updated** but that have large volumes of data, use many indexes. This can improve the performance of queries that do not modify data (such as SELECT statements) because the query optimizer will have more options for finding the best access method.\n\nIndexing small tables may not be optimal because it can take the query optimizer longer to traverse the index searching for data than to perform a simple table scan. Therefore, indexes on small tables might never be used, but must still be maintained as data in the table changes.\n\n\n<a name=\"CreatingIndexes\"></a>\n### Creating Indexes\n\n#### JavaScript backend\n\nTo set the index for a column in the JavaScript backend, do the following:\n\n1. Open your mobile service in the [Azure classic portal].\n2. Click the **Data** tab.\n3. Select the table you want to modify.\n4. Click the **Columns** tab.\n5. Select the column. In the command bar, click **Set Index**:\n\n\t![Mobile Services Portal - Set Index][SetIndexJavaScriptPortal]\n\nYou can also remove indexes within this view.\n\n#### .NET backend\n\nTo define an index in Entity Framework, use the attribute `[Index]` on the fields that you want to index. For example:\n\n    public class TodoItem : EntityData\n    {\n        public string Text { get; set; }\n\n\t\t[Index]\n        public bool Complete { get; set; }\n    }\n\nFor more information on indexes, see [Index Annotations in Entity Framework][]. For further tips on optimizing indexes, see [Advanced Indexing](#AdvancedIndexing) at the bottom of this document.\n\n<a name=\"Schema\"></a>\n## Schema Design\n\nHere are a few issues to be aware of when picking the data types for your objects, which in turn translates to the schema of your SQL database. Tuning the schema can frequently bring significant performance improvements since SQL has custom optimized ways of handling indexing and storage for different data types:\n\n- **Use the provided ID column**. Every mobile service table comes with a default ID column configured as the primary key and has an index set on it. There is no need to create an additional ID column.\n- **Use the correct datatypes in your model.** If you know a certain property of your model will be a numeric or boolean, be sure to define it that way in your model instead of as a string. In the JavaScript backend, use literals such as `true` instead of `\"true\"` and `5` instead of `\"5\"`. In the .NET backend, use the `int` and `bool` types when you declare the properties of your model. This enables SQL to create the correct schema for those types, which makes queries more efficient.\n\n<a name=\"Query\"></a>\n## Query Design\n\nHere are some guidelines to consider when querying the database:\n\n- **Always execute join operations in the database.** Frequently you will need to combine records from two or more tables where the records being combined share a common field (also known as a *join*). This operation can be inefficient if performed incorrectly since it may involve pulling down all the entities from both tables and then iterating through all of them. This kind of operation is best left to the database itself, but it is sometimes easy to mistakenly perform it on the client or in the mobile service code.\n    - Don't perform joins in your app code\n    - Don't perform joins in your mobile service code. When using the JavaScript backend, be aware that the [table object](http://msdn.microsoft.com/library/windowsazure/jj554210.aspx) does not handle joins. Be sure to use the [mssql object](http://msdn.microsoft.com/library/windowsazure/jj554212.aspx) directly to ensure the join happens in the database. For more information, see [Join relational tables](mobile-services-how-to-use-server-scripts.md#joins). If using the .NET backend and querying via LINQ, joins are automatically handled at the database level by Entity Framework.\n- **Implement paging.** Querying the database can sometimes result in a large number of records being returned to the client. To minimize the size and latency of operations, consider implementing paging.\n\n    - By default your mobile service will limit any incoming queries to a page size of 50, and you can manually request up to 1,000 records. For more information, see \"Return data in pages\" for [Windows Store](mobile-services-windows-dotnet-how-to-use-client-library.md#paging), [iOS](mobile-services-ios-how-to-use-client-library.md#paging), [Android](mobile-services-android-how-to-use-client-library.md#paging), [HTML/JavaScript](mobile-services-html-how-to-use-client-library#paging), and [Xamarin](partner-xamarin-mobile-services-how-to-use-client-library.md#paging).\n    - There is no default page size for queries made from your mobile service code. If your app does not implement paging, or as a defensive measure, consider applying default limits to your queries. In the JavaScript backend, use the **take** operator on the [query object](http://msdn.microsoft.com/library/azure/jj613353.aspx). If using the .NET backend, consider using the [Take method] as part of your LINQ query.  \n\n\nFor more information on improving query design, including how to analyze query plans, see [Advanced Query Design](#AdvancedQuery) at the bottom of this document.\n\n<a name=\"Architecture\"></a>\n## Service Architecture\n\nImagine a scenario where you are about to send a push notification to all your customers to check out some new content in your app. As they tap on the notification, the app launches, which possibly triggers a call to your mobile service and a query execution against your SQL database. As potentially millions of customers take this action over the span of just a few minutes, this will generate a surge of SQL load, which may be orders of magnitude higher than your app's steady state load. This could be addressed by scaling your app to a higher SQL tier during the spike and then scaling it back down, however that solution requires manual intervention and comes with increased cost. Frequently slight tweaks in your mobile service architecture can significantly balance out the load clients drive to your SQL database and eliminate problematic spikes in demand. These modifications can often be implemented easily with minimal impact to your customer's experience. Here are some examples:\n\n- **Spread out the load over time.** If you control the timing of certain events (for example, a broadcast push notification), which are expected to generate a spike in demand, and the timing of those events is not critical, consider spreading them out over time. In the example above, perhaps it is acceptable for your app customers to get notified of the new app content in batches over the span of a day instead of nearly simultaneously. Consider batching up your customers into groups which will allow staggered delivery to each batch. If using Notification Hubs, applying an additional tag to track the batch, and then delivering a push notification to that tag provides an easy way to implement this strategy. For more information on tags, see [Use Notification Hubs to send breaking news](https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-notification-dotnet-push-xplat-segmented-wns/).\n- **Use Blob and Table Storage whenever appropriate.** Frequently the content that the customers will view during the spike is fairly static and doesn't need to be stored in a SQL database since you are unlikely to need relational querying capabilities over that content. In that case, consider storing the content in Blob or Table Storage. You can access public blobs in Blob Storage directly from the device. To access blobs in a secure way or use Table Storage, you will need to go through a Mobile Services Custom API in order to protect your storage access key. For more information, see [Upload images to Azure Storage by using Mobile Services](mobile-services-dotnet-backend-windows-universal-dotnet-upload-data-blob-storage.md).\n- **Use an in-memory cache**. Another alternative is to store data, which would commonly be accessed during a traffic spike, in an in-memory cache such as [Azure Cache](https://azure.microsoft.com/services/cache/). This means incoming requests would be able to fetch the information they need from memory, instead of repeatedly querying the database.\n\n<a name=\"Advanced\"></a>\n## Advanced Troubleshooting\nThis section covers some more advanced diagnostic tasks, which may be useful if the steps so far have not addressed the issue fully.\n\n### Prerequisites\nTo perform some of the diagnostic tasks in this section, you need access to a management tool for SQL databases such as **SQL Server Management Studio** or the management functionality built into the **Azure classic portal**.\n\n\nSQL Server Management Studio is a free Windows application, which offers the most advanced capabilities. If you do not have access to a Windows machine (for example if you are using a Mac), consider provisioning a Virtual Machine in Azure as shown in [Create a Virtual Machine Running Windows Server](https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-windows-hero-tutorial/) and then connecting remotely to it. If you intend to use the VM primarily for the purpose of running SQL Server Management Studio, a **Basic A0** (formerly \"Extra Small\") instance should be sufficient.\n\n\nThe Azure classic portal offers a built-in management experience, which is more limited, but is available without a local install.\n\nThe following steps walk you through obtaining the connection information for the SQL database backing your mobile service and then using either of the two tools to connect to it. You may pick whichever tool you prefer.\n\n#### Obtain SQL connection information\n1. Launch the [Azure classic portal].\n2. On the Mobile Services tab, select the service you want to work with.\n3. Select the **Configure** tab.\n4. Select the **SQL Database** name in the **Database Settings** section. This will navigate to the Azure SQL Database tab in the portal.\n5. Select **Set up Azure firewall rules for this IP address**.\n6. Make a note of the server address in the **Connect to your database** section, for example: *mcml4otbb9.database.windows.net*.\n\n#### SQL Server Management Studio\n1. Navigate to [SQL Server Editions - Express](http://www.microsoft.com/server-cloud/products/sql-server-editions/sql-server-express.aspx)\n2. Find the **SQL Server Management Studio** section and select the **Download** button underneath.\n3. Complete the setup steps until you can successfully run the application:\n\n    ![SQL Server Management Studio][SSMS]\n\n4. In the **Connect to Server** dialog enter the following values\n    - Server name: *server address you obtained earlier*\n    - Authentication: *SQL Server Authentication*\n    - Login: *login you picked when creating server*\n    - Password: *password you picked when creating server*\n5. You should now be connected.\n\n#### SQL Database Management Portal\n1. On Azure SQL Database tab for your database, select the **Manage** button\n2. Configure the connection with the following values\n    - Server: *should be pre-set to the right value*\n    - Database: *leave blank*\n    - Username: *login you picked when creating server*\n    - Password: *password you picked when creating server*\n3. You should now be connected.\n\n    ![Azure classic portal - SQL Database][PortalSqlManagement]\n\n<a name=\"AdvancedDiagnosing\" />\n### Advanced Diagnostics\n\nA lot of diagnostic tasks can be completed easily right in the **Azure classic portal**, however some advanced diagnostic tasks are only possible via **SQL Server Management Studio** or the **SQL Database Management Portal**.  We will take advantage of dynamic management views, a set of views populated automatically with diagnostic information about your database. This section provides a set of queries we can run against these views to examine various metrics. For more information, see [Monitoring SQL Database Using Dynamic Management Views][].\n\nAfter completing the steps in the previous section to connect to your database in SQL Server Management Studio, select your database in **Object Explorer**. Expanding **Views** and then **System Views** reveals a list of the management views. To execute the queries below, select **New Query**, while you have selected your database in **Object Explorer**, then paste the query and select **Execute**.\n\n![SQL Server management Studio - dynamic management views][SSMSDMVs]\n\nAlternatively if you are using the SQL Database Management Portal, first select your database and then pick **New Query**.\n\n![SQL Database Management Portal - new query][PortalSqlManagementNewQuery]\n\nTo execute any of the queries below, paste it into the window and select **Run**.\n\n![SQL Database Management Portal - run query][PortalSqlManagementRunQuery]\n\n#### Advanced Metrics\n\n\nThe management portal makes certain metrics readily available if using the Basic, Standard, and Premium tiers. It is easy to obtain these and other metrics using the **[sys.resource\\_stats](http://msdn.microsoft.com/library/dn269979.aspx)** management view, regardless of what tier you're using. Consider the following query:\n\n    SELECT TOP 10 *\n    FROM sys.resource_stats\n    WHERE database_name = 'todoitem_db'\n    ORDER BY start_time DESC\n\n> [AZURE.NOTE]\n> Please execute this query on the **master** database on your server, the **sys.resource\\_stats** view is only present on that database.\n\nThe result will contain the following useful metrics: CPU (% of tier limit), Storage (megabytes), Physical Data Reads (% of tier limit), Log Writes (% of tier limit), Memory (% of tier limit), Worker Count, Session Count, etc.\n\n#### SQL connectivity events\n\nThe **[sys.event\\_log](http://msdn.microsoft.com/library/azure/jj819229.aspx)** view contains the details of connectivity-related events.\n\n    select * from sys.event_log\n    where database_name = 'todoitem_db'\n    and event_type like 'throttling%'\n    order by start_time desc\n\n> [AZURE.NOTE]\n> Please execute this query on the **master** database on your server, the **sys.event\\_log** view is only present on that database.\n\n<a name=\"AdvancedIndexing\" ></a>\n### Advanced Indexing\n\nA table or view can contain the following types of indexes:\n\n- **Clustered**. A clustered index specifies how records are physically stored on disk. There must be only one clustered index per table, because the data rows themselves can be sorted in only one order.\n\n- **Nonclustered**. Nonclustered indexes are stored separately from data rows and are used to do a lookup based on the index value. All nonclustered indexes on a table use the key values from the clustered index as lookup key.\n\nTo provide a real-world analogy: consider a book or a technical manual. The contents of each page are a record, the page number is the clustered index, and the topic index in the back of the book is a nonclustered index. Each entry in the topic index points to the clustered index, the page number.\n\n> [AZURE.NOTE]\n> By default, the JavaScript backend of Azure Mobile Services sets **\\_createdAt** as the clustered index. If you remove this column, or if you want a different clustered index, be sure to follow the [clustered index design guidelines](#ClusteredIndexes) below. In the .NET backend, the class `EntityData` defines `CreatedAt` as a clustered index using the annotation `[Index(IsClustered = true)]`.\n\n<a name=\"ClusteredIndexes\"></a>\n#### Clustered index design guidelines\n\nEvery table should have a clustered index on the column (or columns, in the case of a composite key) with the following properties:\n\n- Narrow - uses a small datatype, or is a [composite key][Primary and Foreign Key Constraints] of a small number of narrow columns\n- Unique, or mostly unique\n- Static - value is not frequently changed\n- Ever-increasing\n- (Optional) Fixed-width\n- (Optional) nonnull\n\nThe reason for the **narrow** property is that all other indexes on a table use the key values from the clustered index as lookup keys. In the example of a topic index at the back of a book, the clustered index is a page number and is a small number. If the chapter title were instead included in the clustered index, then the topic index would itself be much longer, because the key value would then be (chapter name, page number).\n\nThe key should be **static** and **ever-increasing** to avoid having to maintain the physical location of the records (which means either moving records physically, or potentially fragmenting storage by splitting the pages where the records are stored).\n\nThe clustered index will be most valuable for queries that do the following:\n\n- Return a range of values by using operators such as BETWEEN, >, >=, <, and <=.\n\t- After the row with the first value is found by using the clustered index, rows with subsequent indexed values are guaranteed to be physically adjacent.\n- Use JOIN clauses; typically these are foreign key columns.\n- Use ORDER BY, or GROUP BY clauses.\n\t- An index on the columns specified in the ORDER BY or GROUP BY clause may remove the need for the Database Engine to sort the data, because the rows are already sorted. This improves query performance.\n\n#### Creating clustered indexes in Entity Framework\n\nTo set the clustered index in the .NET backend using Entity Framework, set the `IsClustered` property of the annotation. For example, this is the definition of `CreatedAt` in `Microsoft.WindowsAzure.Mobile.Service.EntityData`:\n\n\t[Index(IsClustered = true)]\n\t[DatabaseGenerated(DatabaseGeneratedOption.Identity)]\n\t[TableColumnAttribute(TableColumnType.CreatedAt)]\n\tpublic DateTimeOffset? CreatedAt { get; set; }\n\n#### Creating indexes in the database schema\n\nFor the JavaScript backend, you can only modify the clustered index of a table by changing the database schema directly, either through SQL Server Management Studio or the Azure SQL Database Portal.\n\nThe following guides describe how to set a clustered or nonclustered index by modifying the database schema directly:\n\n- [Creating and Modifying PRIMARY KEY Constraints][]\n- [Create Nonclustered Indexes][]\n- [Create Clustered Indexes][]\n- [Create Unique Indexes][]\n\n#### Find top N missing indexes\nYou can write SQL queries on dynamic management views that will tell you more detailed information about the resource usage of individual queries or give you heuristics on what indexes to add. The following query determines which 10 missing indexes would produce the highest anticipated cumulative improvement, in descending order, for user queries.\n\n    SELECT TOP 10 *\n    FROM sys.dm_db_missing_index_group_stats\n    ORDER BY avg_total_user_cost * avg_user_impact * (user_seeks + user_scans)\n    DESC;\n\nThe following example query runs a join across these tables to get a list of the columns that should be part of each missing index and calculates an 'index advantage' to determine if the given index should be considered:\n\n    SELECT * from\n    (\n        SELECT\n        (user_seeks+user_scans) * avg_total_user_cost * (avg_user_impact * 0.01) AS index_advantage, migs.*\n        FROM sys.dm_db_missing_index_group_stats migs\n    ) AS migs_adv,\n      sys.dm_db_missing_index_groups mig,\n      sys.dm_db_missing_index_details mid\n    WHERE\n      migs_adv.group_handle = mig.index_group_handle and\n      mig.index_handle = mid.index_handle\n      AND migs_adv.index_advantage > 10\n    ORDER BY migs_adv.index_advantage DESC;\n\nFor more information, see [Monitoring SQL Database Using Dynamic Management Views][] and [Missing Index Dynamic Management Views][].\n\n<a name=\"AdvancedQuery\" ></a>\n### Advanced Query Design\n\nFrequently it's difficult to diagnose what queries are most expensive for the database.\n\n\n#### Finding top N queries\n\nThe following example returns information about the top five queries ranked by average CPU time. This example aggregates the queries according to their query hash, so that logically equivalent queries are grouped by their cumulative resource consumption.\n\n\tSELECT TOP 5 query_stats.query_hash AS \"Query Hash\",\n\t    SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS \"Avg CPU Time\",\n\t    MIN(query_stats.statement_text) AS \"Statement Text\"\n\tFROM\n\t    (SELECT QS.*,\n\t    SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1,\n\t    ((CASE statement_end_offset\n\t        WHEN -1 THEN DATALENGTH(st.text)\n\t        ELSE QS.statement_end_offset END\n\t            - QS.statement_start_offset)/2) + 1) AS statement_text\n\t     FROM sys.dm_exec_query_stats AS QS\n\t     CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats\n\tGROUP BY query_stats.query_hash\n\tORDER BY 2 DESC;\n\nFor more information, see [Monitoring SQL Database Using Dynamic Management Views][]. In addition to executing the query, the **SQL Database Management Portal** gives you a nice shortcut to see this data, by selecting **Summary** for your database and then selecting **Query Performance**:\n\n![SQL Database Management Portal - query performance][PortalSqlManagementQueryPerformance]\n\n#### Analyzing the query plan\n\nOnce you have identified expensive queries or if you are about to deploy code using new queries and you would like to investigate their performance, the tooling offers great support for analyzing the **query plan**. The query plan enables you to see what operations take up the builk of CPU time and IO resources when a given SQL query runs. To analyze the query plan in **SQL Server Management Studio**, use the highlighted toolbar buttons.\n\n![SQL Server Management Studio - query plan][SSMSQueryPlan]\n\nTo analyze the query plan in the **SQL Database Management Portal**, use the highlighted toolbar buttons.\n\n![SQL Database Management Portal - query plan][PortalSqlManagementQueryPlan]\n\n## See Also\n\n- [Azure SQL Database Documentation][]\n- [Azure SQL Database performance and scaling][]\n- [Troubleshooting Azure SQL Database][]\n\n### Indexing\n\n- [Index Basics][]\n- [General Index Design Guidelines][]\n- [Unique Index Design Guidelines][]\n- [Clustered Index Design Guidelines][]\n- [Primary and Foreign Key Constraints][]\n- [How much does that key cost?][]\n\n### Entity Framework\n- [Performance Considerations for Entity Framework 5][]\n- [Code First Data Annotations][]\n\n<!-- IMAGES -->\n\n[SSMS]: ./media/mobile-services-sql-scale-guidance/1.png\n[PortalSqlManagement]: ./media/mobile-services-sql-scale-guidance/2.png\n[PortalSqlMetrics]: ./media/mobile-services-sql-scale-guidance/3.png\n[PortalSqlScale]: ./media/mobile-services-sql-scale-guidance/4.png\n[PortalSqlAddAlert]: ./media/mobile-services-sql-scale-guidance/5.png\n[PortalSqlAddAlert2]: ./media/mobile-services-sql-scale-guidance/6.png\n[PortalSqlAddAlert3]: ./media/mobile-services-sql-scale-guidance/7.png\n[SetIndexJavaScriptPortal]: ./media/mobile-services-sql-scale-guidance/set-index-portal-ui.png\n[SSMSDMVs]: ./media/mobile-services-sql-scale-guidance/8.png\n[PortalSqlManagementNewQuery]: ./media/mobile-services-sql-scale-guidance/9.png\n[PortalSqlManagementRunQuery]: ./media/mobile-services-sql-scale-guidance/10.png\n[PortalSqlManagementQueryPerformance]: ./media/mobile-services-sql-scale-guidance/11.png\n[SSMSQueryPlan]: ./media/mobile-services-sql-scale-guidance/12.png\n[PortalSqlManagementQueryPlan]: ./media/mobile-services-sql-scale-guidance/13.png\n\n<!-- LINKS -->\n\n[Azure classic portal]: http://manage.windowsazure.com\n\n[Azure SQL Database Documentation]: http://azure.microsoft.com/documentation/services/sql-database/\n[Managing SQL Database using SQL Server Management Studio]: http://go.microsoft.com/fwlink/p/?linkid=309723&clcid=0x409\n[Monitoring SQL Database Using Dynamic Management Views]: http://go.microsoft.com/fwlink/p/?linkid=309725&clcid=0x409\n[Azure SQL Database performance and scaling]: http://go.microsoft.com/fwlink/p/?linkid=397217&clcid=0x409\n[Troubleshooting Azure SQL Database]: http://msdn.microsoft.com/library/azure/ee730906.aspx\n[Reasons to Use the New Service Tiers]:http://msdn.microsoft.com/library/azure/dn369873.aspx#Reasons\n\n[Take method]:http://msdn.microsoft.com/library/vstudio/bb503062(v=vs.110).aspx\n\n<!-- MSDN -->\n[Creating and Modifying PRIMARY KEY Constraints]: http://technet.microsoft.com/library/ms181043(v=sql.105).aspx\n[Create Clustered Indexes]: http://technet.microsoft.com/library/ms186342(v=sql.120).aspx\n[Create Unique Indexes]: http://technet.microsoft.com/library/ms187019.aspx\n[Create Nonclustered Indexes]: http://technet.microsoft.com/library/ms189280.aspx\n\n[Primary and Foreign Key Constraints]: http://msdn.microsoft.com/library/ms179610(v=sql.120).aspx\n[Index Basics]: http://technet.microsoft.com/library/ms190457(v=sql.105).aspx\n[General Index Design Guidelines]: http://technet.microsoft.com/library/ms191195(v=sql.105).aspx\n[Unique Index Design Guidelines]: http://technet.microsoft.com/library/ms187019(v=sql.105).aspx\n[Clustered Index Design Guidelines]: http://technet.microsoft.com/library/ms190639(v=sql.105).aspx\n\n[Missing Index Dynamic Management Views]: http://technet.microsoft.com/library/ms345421.aspx\n\n<!-- EF -->\n[Performance Considerations for Entity Framework 5]: http://msdn.microsoft.com/data/hh949853\n[Code First Data Annotations]: http://msdn.microsoft.com/data/jj591583.aspx\n[Index Annotations in Entity Framework]:http://msdn.microsoft.com/data/jj591583.aspx#Index\n\n<!-- BLOG LINKS -->\n[How much does that key cost?]: http://www.sqlskills.com/blogs/kimberly/how-much-does-that-key-cost-plus-sp_helpindex9/\n"
  },
  {
    "path": "docs/mobile-services-store-scripts-source-control.md",
    "content": "<properties\n\tpageTitle=\"Store JavaScript backend project code in source control | Azure Mobile Services\"\n\tdescription=\"Learn how to store your server script files and modules in a local Git repo on your computer.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Store your mobile service project code in source control\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR]\n- [.NET backend](mobile-services-dotnet-backend-store-code-source-control.md)\n- [Javascript backend](mobile-services-store-scripts-source-control.md)\n\nThis topic shows you how to use the source control provided by Azure Mobile Services to store your server scripts. Scripts and other JavaScript backend code files can be promoted from your local Git repository to your production mobile service. It also shows how to define shared code that can be required by multiple scripts and how to use the package.json file to add Node.js modules to your mobile service.\n\nTo complete this tutorial, you must have already created a mobile service by completing the [Get started with Mobile Services] tutorial.\n\n## <a name=\"enable-source-control\"></a>Enable source control in your mobile service\n\nTo be able to store app data in the new mobile service, you must first create a new table in the associated SQL Database instance.\n\n1. Log on to the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, click your mobile service, then click the **Dashboard** tab.\n\n2. (Optional) If you have already set the Mobile Services or Websites source control credentials for your Azure subscription, then you can skip down to step 4. Otherwise, click **Set up source control** under **Quick glance** and click **Yes** to confirm.\n\n\t![Set up source control](./media/mobile-services-enable-source-control/mobile-setup-source-control.png)\n\n3. Supply a **User name**, **New password**, confirm the password, then click the check button. \n\n\tThe Git repository is created in your mobile service. Make a note of the credentials you just supplied; you will use them to access this and other Mobile Services repositories in your subscription.\n\n4. Click the **Configure** tab and notice the **Source control** fields.\n\n\t![Configure source control](./media/mobile-services-enable-source-control/mobile-source-control-configure.png)\n\n\tThe URL of the Git repository is displayed. You will use this URL to clone the repository to your local computer.\n\nWith source control enabled in your mobile service, you can use Git to clone the repository to your local computer.\n \n\n## <a name=\"clone-repo\"></a>Install Git and create the local repository\n\n1. Install Git on your local computer.\n\n\tThe steps required to install Git vary between operating systems. See [Installing Git] for operating system specific distributions and installation guidance.\n\n\t> [AZURE.NOTE]\n\t> On some operating systems, both a command-line and GUI version of Git are available. The instructions provided in this article use the command-line version.\n\n2. Open a command-line, such as **GitBash** (Windows) or **Bash** (Unix Shell). On OS X systems you can access the command-line through the **Terminal** application.\n\n3. From the command line, change to the directory where you will store your scripts. For example, `cd SourceControl`.\n\n4. Use the following command to create a local copy of your new Git repository, replacing `<your_git_URL>` with the URL of the Git repository for your mobile service:\n\n\t\tgit clone <your_git_URL>\n\n5. When prompted, type in the user name and password that you set when you enabled source control in your mobile service. After successful authentication, you will see a series of responses like this:\n\n\t\tremote: Counting objects: 8, done.\n\t\tremote: Compressing objects: 100% (4/4), done.\n\t\tremote: Total 8 (delta 1), reused 0 (delta 0)\n\t\tUnpacking objects: 100% (8/8), done.\n\n6. Browse to the directory from which you ran the `git clone` command, and notice the following directory structure:\n\n\t![4][4]\n\n\tIn this case, a new directory is created with the name of the mobile service, which is the local repository for the data service.\n\n7. Open the .\\service\\table subfolder and notice that it contains a TodoItem.json file, which is a JSON representation of the operation permissions on the TodoItem table.\n\n\tWhen server scripts have been defined on this table, you will also have one or more files named <code>TodoItem._&lt;operation&gt;_.js</code> that contain the scripts for the given table operation. Scheduler and custom API scripts are maintained in separate folders with those respective names. For more information, see [Source control].\n\nNow that you have created your local repository, you can make changes to server scripts and push the changes back to the mobile service.\n\n## <a name=\"deploy-scripts\"></a>Deploy updated script files to your mobile service\n\n1. Browse to the .\\service\\table subfolder, and if a file todoitem.insert.js files doesn't already exist, create it now.\n\n2. Open the new file todoitem.insert.js in a text editor and paste in the following code and save your changes:\n\n\t\tfunction insert(item, user, request) {\n\t\t    request.execute();\n\t\t    console.log(JSON.stringify(item, null, 4));\n\t\t}\n\n\tThis code simply writes the inserted item to the log. If this file already contains code, simply add some valid JavaScript code to this file, such as a call to `console.log()`, then save your changes.\n\n3. In the Git command prompt, type the following command to start tracking the new script file:\n\n\t\t$ git add .\n\n\n4. Type the following command to commit changes:\n\n\t\t$ git commit -m \"updated the insert script\"\n\n5. Type the following command to upload the changes to the remote repository:\n\n\t\t$ git push origin master\n\n\tYou should see a series of commands that indicates that the commit is deployed to the mobile service.\n\n6. Back in the [Azure classic portal], click the **Data** tab, then click the **TodoItem** table, click  **Script**, then select the **Insert** operation. Notice that the displayed insert operation script is the same as the JavaScript code that you just uploaded to the repository.\n\n## <a name=\"use-npm\"></a>Leverage shared code and Node.js modules in your server scripts\n\nMobile Services provides access to the full set of core Node.js modules, which you can use in your code by using the **require** function. Your mobile service can also use Node.js modules that are not part of the core Node.js package, and you can even define your own shared code as Node.js modules. For more information about creating modules, see [Modules] in the Node.js API reference documentation.\n\nThe recommended way to add Node.js modules to your mobile service is by adding references to the service's package.json file. Next, you will add the [node-uuid] Node.js module to your mobile service by updating the package.json file. When the update is pushed to Azure, the mobile service is restarted and the module is installed. This module is then used to generate a new GUID value for the **uuid** property on inserted items.\n\n2. Navigate to the `.\\service` folder of your local Git repository, and open the package.json file in a text editor, and add the following field to the **dependencies** object:\n\n\t\t\"node-uuid\": \"~1.4.3\"\n\n\t>[AZURE.NOTE]This update to the package.json file will cause a restart in your mobile service after the commit is pushed.\n\n4. Now browse to the .\\service\\table subfolder, open the todoitem.insert.js file and modify it as follows:\n\n\t\tfunction insert(item, user, request) {\n\t\t    var uuid = require('node-uuid');\n\t\t    item.uuid = uuid.v1();\n\t\t    request.execute();\n\t\t    console.log(item);\n\t\t}\n\n\tThis code adds a uuid column to the table, populating it with unique GUID identifiers.\n\n5. As in the previous section, type the following command in the Git command prompt:\n\n\t\t$ git add .\n\t\t$ git commit -m \"added node-uuid module\"\n\t\t$ git push origin master\n\n\tThis adds the new file, commits your changes, and pushes the new node-uuid module and changes to the todoitem.insert.js script to your mobile service.\n\n## <a name=\"next-steps\"> </a>Next steps\n\nNow that you have completed this tutorial you know how to store your scripts in source control. Consider learning more about working with server scripts and with custom APIs:\n\n+ [Work with server scripts in Mobile Services]\n\t<br/>Shows how to work with server scripts, job scheduler, and custom APIs.\n\n<!-- Anchors. -->\n[Enable source control in your mobile service]: #enable-source-control\n[Install Git and create the local repository]: #clone-repo\n[Deploy updated script files to your mobile service]: #deploy-scripts\n[Leverage shared code and Node.js modules in your server scripts]: #use-npm\n\n<!-- Images. -->\n[4]: ./media/mobile-services-store-scripts-source-control/mobile-source-local-repo.png\n[5]: ./media/mobile-services-store-scripts-source-control/mobile-portal-data-tables.png\n[6]: ./media/mobile-services-store-scripts-source-control/mobile-insert-script-source-control.png\n\n<!-- URLs. -->\n[Git website]: http://git-scm.com\n[Source control]: http://msdn.microsoft.com/library/windowsazure/c25aaede-c1f0-4004-8b78-113708761643\n[Installing Git]: http://git-scm.com/book/en/Getting-Started-Installing-Git\n[Get started with Mobile Services]: mobile-services-ios-get-started.md\n[Work with server scripts in Mobile Services]: mobile-services-how-to-use-server-scripts.md\n[Azure classic portal]: https://manage.windowsazure.com/\n[Modules]: http://nodejs.org/api/modules.html\n[node-uuid]: https://npmjs.org/package/node-uuid\n"
  },
  {
    "path": "docs/mobile-services-using-soft-delete.md",
    "content": "<properties\n\tpageTitle=\"Using soft delete in Mobile Services (Windows Store) | Microsoft Azure\"\n\tdescription=\"Learn how to use Azure Mobile Services soft delete feature in your application\"\n\tdocumentationCenter=\"\"\n\tauthors=\"wesmc7777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"wesmc\"/>\n\n# Using soft delete in Mobile Services\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n## Overview\n\nTables created with either the JavaScript or .NET backend can optionally have soft delete enabled. When using soft delete, a new column called *\\__deleted* of [SQL bit type] is added to the database. With soft delete enabled, a delete operation does not physically delete rows from the database, but rather sets the value of the deleted column to TRUE.\n\nWhen querying records on a table with soft delete enabled, deleted rows are not returned in the query by default. In order to request these rows, you must pass a query parameter *\\__includeDeleted=true* in your [REST Query operation](http://msdn.microsoft.com/library/azure/jj677199.aspx). In the .NET client SDK, you can also use the helper method `IMobileServiceTable.IncludeDeleted()`.\n\nSoft delete support for the .NET backend first released with version 1.0.402 of the Microsoft Azure Mobile Services .NET Backend. The latest NuGet packages are available here, [Microsoft Azure Mobile Services .NET Backend](http://go.microsoft.com/fwlink/?LinkId=513165).\n\n\nSome of the potential benefits of using soft delete:\n\n* When using the [Offline data Sync for Mobile Services] feature, the client SDK automatically queries for deleted records and removes them from the local database. Without soft delete enabled, you need to write additional code on the backend so that the client SDK knows which records to remove from the local store. Otherwise, the client local store and backend will be inconsistent with regard to these deleted records and the client method `PurgeAsync()` must be called to clear the local store.\n* Some applications have a business requirement to never physically delete data, or to delete data only after it has been audited. The soft delete feature can be useful in this scenario.\n* Soft delete can be used to implement an \"undelete\" feature, so that data deleted by accident can be recovered.\nHowever, soft deleted records take up space in the database, so you should consider creating a scheduled job to periodically hard delete the soft deleted records. For an example of this, see [Using soft delete with the .NET backend](#using-with-dotnet) and [Using soft delete with the JavaScript backend](#using-with-javascript). Your client code should also periodically call `PurgeAsync()` so that these hard deleted records do not remain in the device's local data store.\n\n\n\n\n\n## Enabling soft delete for the .NET backend\n\nSoft delete support for the .NET backend first released with version 1.0.402 of the Microsoft Azure Mobile Services .NET Backend. The latest NuGet packages are available here, [Microsoft Azure Mobile Services .NET Backend](http://go.microsoft.com/fwlink/?LinkId=513165).\n\nThe following steps guide you on how to enable soft delete for a .NET backend mobile service.\n\n1. Open your .NET backend mobile service project in Visual Studio.\n2. Right click the .NET backend project and click **Manage NuGet Packages**.\n3. In the package manager dialog, click **Nuget.org** under updates and install version 1.0.402 or later of the [Microsoft Azure Mobile Services .NET Backend](http://go.microsoft.com/fwlink/?LinkId=513165) NuGet packages.\n3. In Solution Explorer for Visual Studio, expand the **Controllers** node under your .NET backend project and open your controller source for. For example, *TodoItemController.cs*.\n4. In the `Initialize()` method of your controller, pass the `enableSoftDelete: true` parameter to the EntityDomainManager constructor.\n\n        protected override void Initialize(HttpControllerContext controllerContext)\n        {\n            base.Initialize(controllerContext);\n            MobileService1Context context = new MobileService1Context();\n            DomainManager = new EntityDomainManager<TodoItem>(context, Request, Services, enableSoftDelete: true);\n        }\n\n\n## Enabling soft delete for the JavaScript backend\n\nIf you are creating a new table for your mobile service, you can enable soft delete on the table creation page.\n\n![][2]\n\nTo enable soft delete on an existing table in the JavaScript backend:\n\n1. In the [Azure classic portal], click your mobile service. Then click the Data tab.\n2. On the data page, click to select the desired table. Then click the **Enable Soft Delete** button in the command bar. If the table already has soft delete enabled, this button will not appear but you will be able to see the *\\__deleted* column when clicking the **Browse** or **Columns** tab for the table.\n\n    ![][0]\n\n    To disable soft delete for your table, click the **Columns** tab and then click the *\\__deleted* column and the **Delete** button.\n\n    ![][1]\n\n## <a name=\"using-with-dotnet\"></a>Using soft delete with the .NET backend\n\n\nThe following scheduled job purges soft deleted records that are more than a month old:\n\n    public class SampleJob : ScheduledJob\n    {\n        private MobileService1Context context;\n\n        protected override void Initialize(ScheduledJobDescriptor scheduledJobDescriptor,\n            CancellationToken cancellationToken)\n        {\n            base.Initialize(scheduledJobDescriptor, cancellationToken);\n            context = new MobileService1Context();\n        }\n\n        public override Task ExecuteAsync()\n        {\n            Services.Log.Info(\"Purging old records\");\n            var monthAgo = DateTimeOffset.UtcNow.AddDays(-30);\n\n            var toDelete = context.TodoItems.Where(x => x.Deleted == true && x.UpdatedAt <= monthAgo).ToArray();\n            context.TodoItems.RemoveRange(toDelete);\n            context.SaveChanges();\n\n            return Task.FromResult(true);\n        }\n    }\n\nTo learn more about schedule jobs with .NET backend Mobile Services, see: [Schedule recurring jobs with JavaScript backend Mobile Services](mobile-services-dotnet-backend-schedule-recurring-tasks.md)\n\n\n\n\n## <a name=\"using-with-javascript\"></a> Using soft delete with the JavaScript backend\n\nYou use table scripts to add logic around the soft delete feature with JavaScript backend mobile services.\n\nTo detect an undelete request, use the property \"undelete\" in your update table script:\n\n    function update(item, user, request) {\n        if (request.undelete) { /* any undelete specific code */; }\n    }\nTo include deleted records in query result in a script, set the \"includeDeleted\" parameter to true:\n\n    tables.getTable('softdelete_scenarios').read({\n        includeDeleted: true,\n        success: function (results) {\n            request.respond(200, results)\n        }\n    });\n\nTo retrieve deleted records via an HTTP request, add the query parameter \"__includedeleted=true\":\n\n    http://youservice.azure-mobile.net/tables/todoitem?__includedeleted=true\n\n### Sample scheduled job for purging soft deleted records.\n\nThis is a sample scheduled job that deletes records that were updated prior to a particular date:\n\n    function purgedeleted() {\n         mssql.query('DELETE FROM softdelete WHERE __deleted=1', {\n            success: function(results) {\n                console.log(results);\n            },\n            error: function(err) {\n                console.log(\"error is: \" + err);\n        }});\n    }\n\nTo learn more about scheduled jobs with JavaScript backend Mobile Services, see: [Schedule recurring jobs with JavaScript backend Mobile Services](mobile-services-schedule-recurring-tasks.md).\n\n\n\n\n\n<!-- Images -->\n[0]: ./media/mobile-services-using-soft-delete/enable-soft-delete-button.png\n[1]: ./media/mobile-services-using-soft-delete/disable-soft-delete.png\n[2]: ./media/mobile-services-using-soft-delete/enable-soft-delete-new-table.png\n\n<!-- URLs. -->\n[SQL bit type]: http://msdn.microsoft.com/library/ms177603.aspx\n[Offline data Sync for Mobile Services]: mobile-services-windows-store-dotnet-get-started-offline-data.md\n[Azure classic portal]: https://manage.windowsazure.com/\n\n\n"
  },
  {
    "path": "docs/mobile-services-windows-phone-get-started-data.md",
    "content": "<properties\n\tpageTitle=\"Add Mobile Services to an existing app (WP8) | Microsoft Azure\"\n\tdescription=\"Learn how to get started using data from your Azure Mobile Services Windows Phone 8 app.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows-phone\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n\n# Add Mobile Services to an existing app\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-data.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-data.md)\n- [(Android | Javascript)](mobile-services-android-get-started-data.md)\n\n## Overview\n\nThis topic shows you how to use Azure Mobile Services to leverage data in a Windows Phone 8 app. In this tutorial, you will download an app that stores data in memory, create a new mobile service, integrate the mobile service with the app, and then login to the [Azure classic portal] to view changes to data made when running the app.\n\nYou can also see Nick Harris demonstrate this in the following video:\n>[AZURE.VIDEO mobile-get-started-with-data-windows-phone]\n\n## Prerequisites\n\n+ Visual Studio 2012 Express for Windows Phone 8 and the [Windows Phone 8 SDK] running on Windows 8. To complete this tutorial to create a Windows Phone 8.1 app, you must use Visual Studio 2013 Update 2, or a later version.\n\n+ An Azure account. If you don't have an account, you can create a free trial account in just a couple of minutes. For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=A756A2826&amp;returnurl=http%3A%2F%2Fazure.microsoft.com%2Farticles%2Fdocumentation%2Fmobile-services-windows-phone-get-started-data%2F).\n\n## <a name=\"download-app\"></a>Download the GetStartedWithData project\n\nThis tutorial is built on the [GetStartedWithData app][Developer Code Samples site], which is a Windows Phone Silverlight 8 app project.\n\n1. Download the GetStartedWithData sample app project from the [Developer Code Samples site].\n\n\t>[AZURE.NOTE]To create a Windows Phone Silverlght 8.1 app, just change the target OS in the downloaded Windows Phone Silverlight 8 app project to Windows Phone 8.1. To create a Windows Phone Store app, download the [Windows Phone Store app version](http://go.microsoft.com/fwlink/p/?LinkId=397372) of the GetStartedWithData sample app project.\n\n2. In Visual Studio, open the downloaded project and examine the MainPage.xaml.cs file.\n\n   \tNotice that added **TodoItem** objects are stored in an in-memory **ObservableCollection&lt;TodoItem&gt;**.\n\n3. Press the **F5** key to rebuild the project and start the app.\n\n4. In the app, type some text in the text box, then click the **Save** button.\n\n   \t![][0]\n\n   \tNotice that the saved text is displayed in the list below.\n\n## <a name=\"create-service\"></a>Create a new mobile service in the Azure classic portal\n\n\n\nNext, you will create a new mobile service to replace the in-memory list for data storage. Follow these steps to create a new mobile service.\n\n1. Log into the [Azure classic portal](https://manage.windowsazure.com/). \n2.\tAt the bottom of the navigation pane, click **+NEW**.\n\n\t![plus-new](./media/mobile-services-create-new-service-data/plus-new.png)\n\n3.\tExpand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![mobile-create](./media/mobile-services-create-new-service-data/mobile-create.png)\n\n    This displays the **New Mobile Service** dialog.\n\n4.\tIn the **Create a mobile service** page, select **Create a free 20 MB SQL Database**, then type a subdomain name for the new mobile service in the **URL** textbox and wait for name verification. Once name verification completes, click the right arrow button to go to the next page.\t\n\n\t![mobile-create-page1](./media/mobile-services-create-new-service-data/mobile-create-page1.png)\n\n    This displays the **Specify database settings** page.\n\n    \n\t> [AZURE.NOTE] As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n5.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\n\t![mobile-create-page2](./media/mobile-services-create-new-service-data/mobile-create-page2.png)\n\n    \n\t> [AZURE.NOTE] When the password that you supply does not meet the minimum requirements or when there is a mismatch, a warning is displayed.  \n\t>\n\t> We recommend that you make a note of the administrator login name and password that you specify; you will need this information to reuse the SQL Database instance or the server in the future.\n\nYou have now created a new mobile service that can be used by your mobile apps. Next, you will add a new table in which to store app data. This table will be used by the app in place of the in-memory collection.\n\n\n## <a name=\"add-table\"></a>Add a new table to the mobile service\n\nTo be able to store app data in the new mobile service, you must first create a new table in the associated SQL Database instance.\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, and then click the mobile service that you just created.\n\n2. Click the **Data** tab, then click **+Create**.\n\n   \tThis displays the **Create new table** dialog.\n\n3. In **Table name** type _TodoItem_, then click the check button. This creates a new storage table **TodoItem** with the default permissions set. This means that anyone with the application key, which is distributed with your app, can access and change data in the table. \n\n    >[AZURE.NOTE] The same table name is used in Mobile Services quickstart. However, each table is created in a schema that is specific to a given mobile service. This is to prevent data collisions when multiple mobile services use the same database.\n\n4. Click the new **TodoItem** table and verify that there are no data rows.\n\n5. Click the **Columns** tab. Verify that the following default columns are automatically created for you: \n\t\n\t<table border=\"1\" cellpadding=\"10\">\n \t<tr>\n \t<th>Column Name</th>\n \t<th>Type</th>\n \t<th>Index</th>\n \t</tr>\n \t<tr>\n \t<td>id</td>\n \t<td>string</td>\n \t<td>Indexed</td>\n \t</tr>\n \t<tr>\n \t<td>__createdAt</td>\n \t<td>date</td>\n \t<td>Indexed</td>\n \t</tr>\n \t<tr>\n \t<td>__updatedAt</td>\n \t<td>date</td>\n \t<td><font color=\"transparent\">-</font></td>\n \t</tr>\n \t<tr>\n \t<td>__version</td>\n \t<td>timestamp (MSSQL)</td>\n \t<td><font color=\"transparent\">-</font></td>\n \t</tr> \t\n \t</table> \t\n\t\t\n\n  \tThis is the minimum requirement for a table in Mobile Services. \n\n    > [AZURE.NOTE] When dynamic schema is enabled on your mobile service, new columns are created automatically when JSON objects are sent to the mobile service by an insert or update operation.\n\nYou are now ready to use the new mobile service as data storage for the app.\n\n## <a name=\"update-app\"></a>Update the app to use the mobile service for data access\n\nNow that your mobile service is ready, you can update the app to store items in Mobile Services instead of the local collection.\n\n1. In **Solution Explorer** in Visual Studio, right-click the project name, and then select **Manage NuGet Packages**.\n\n2. In the left pane, select the **Online** category, search for `WindowsAzure.MobileServices`, click **Install** on the **Azure Mobile Services** package, then accept the license agreement.\n\n  \t![][7]\n\n  \tThis adds the Mobile Services client library to the project.\n\n3. In the [Azure classic portal], click **Mobile Services**, and then click the mobile service you just created.\n\n4. Click the **Dashboard** tab and make a note of the **Site URL**, then click **Manage keys** and make a note of the **Application key**.\n\n   \t![][8]\n\n  \tYou will need these values when accessing the mobile service from your app code.\n\n5. In Visual Studio, open the file App.xaml.cs and add or uncomment the following `using` statement:\n\n       \tusing Microsoft.WindowsAzure.MobileServices;\n\n6. In this same file, uncomment the following code that defines the **MobileService** variable, and supply the URL and application key from the mobile service in the **MobileServiceClient** constructor, in that order.\n\n\t\t//public static MobileServiceClient MobileService = new MobileServiceClient(\n        //    \"AppUrl\",\n        //    \"AppKey\"\n        //);\n\n  \tThis creates a new instance of **MobileServiceClient** that is used to access your mobile service.\n\n6. In the file MainPage.cs, add or uncomment the following `using` statements:\n\n       \tusing Microsoft.WindowsAzure.MobileServices;\n\t\tusing Newtonsoft.Json;\n\n7. In this DataModel folder, replace the **TodoItem** class definition with the following code:\n\n        public class TodoItem\n        {\n            public string Id { get; set; }\n\n            [JsonProperty(PropertyName = \"text\")]\n            public string Text { get; set; }\n\n            [JsonProperty(PropertyName = \"complete\")]\n            public bool Complete { get; set; }\n        }\n\n7. Comment the line that defines the existing **items** collection, then uncomment the following lines:\n\n        private MobileServiceCollection<TodoItem, TodoItem> items;\n        private IMobileServiceTable<TodoItem> todoTable =\n\t\t\tApp.MobileService.GetTable<TodoItem>();\n\n   \tThis code creates a mobile services-aware binding collection (**items**) and a proxy class for the SQL Database table **TodoItem** (**todoTable**).\n\n7. In the **InsertTodoItem** method, remove the line of code that sets the **TodoItem**.**Id** property, add the **async** modifier to the method, and uncomment the following line of code:\n\n        await todoTable.InsertAsync(todoItem);\n\n  \tThis code inserts a new item into the table.\n\n8. In the **RefreshTodoItems** method, add the **async** modifier to the method, then uncomment the following line of code:\n\n        items = await todoTable.ToCollectionAsync();\n\n   \tThis sets the binding to the collection of items in the todoTable, which contains all TodoItem objects returned from the mobile service.\n\n9. In the **UpdateCheckedTodoItem** method, add the **async** modifier to the method, and uncomment the following line of code:\n\n         await todoTable.UpdateAsync(item);\n\n   \tThis sends an item update to the mobile service.\n\nNow that the app has been updated to use Mobile Services for backend storage, it's time to test the app against Mobile Services.\n\n## <a name=\"test-app\"></a>Test the app against your new mobile service\n\n1. In Visual Studio, press the F5 key to run the app.\n\n2. As before, type text in the textbox, and then click **Save**.\n\n   \tThis sends a new item as an insert to the mobile service.\n\n3. In the [Azure classic portal], click **Mobile Services**, and then click your mobile service.\n\n4. Click the **Data** tab, then click **Browse**.\n\n   \t![][9]\n\n   \tNotice that the **TodoItem** table now contains data, with id values generated by Mobile Services, and that columns have been automatically added to the table to match the TodoItem class in the app.\n\nThis concludes the tutorial.\n\n## <a name=\"next-steps\"> </a>Next steps\n\nThis tutorial demonstrated the basics of enabling a Windows Phone 8 app to work with data in Mobile Services. Next, consider reading up on one of these other topics:\n\n* [Add authentication to your app](mobile-services-windows-phone-get-started-users.md)\n  <br/>Learn how to authenticate users of your app.\n\n* [Add push notifications to your app](mobile-services-javascript-backend-windows-phone-get-started-push.md)\n  <br/>Learn how to send a very basic push notification to your app with Mobile Services.\n\n* [Mobile Services C# How-to Conceptual Reference](mobile-services-dotnet-how-to-use-client-library.md)\n  <br/>Learn more about how to use Mobile Services with .NET.\n\n<!-- Anchors. -->\n[Download the Windows Phone 8 app project]: #download-app\n[Create the mobile service]: #create-service\n[Add a data table for storage]: #add-table\n[Update the app to use Mobile Services]: #update-app\n[Test the app against Mobile Services]: #test-app\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n[0]: ./media/mobile-services-windows-phone-get-started-data/mobile-quickstart-startup-wp8.png\n[7]: ./media/mobile-services-windows-phone-get-started-data/mobile-add-nuget-package-wp.png\n[8]: ./media/mobile-services-windows-phone-get-started-data/mobile-dashboard-tab.png\n[9]: ./media/mobile-services-windows-phone-get-started-data/mobile-todoitem-data-browse.png\n\n<!-- URLs. -->\n\n[Azure classic portal]: https://manage.windowsazure.com/\n[Windows Phone 8 SDK]: http://go.microsoft.com/fwlink/p/?LinkID=268374\n[Mobile Services SDK]: http://go.microsoft.com/fwlink/p/?LinkID=268375\n[Developer Code Samples site]:  http://go.microsoft.com/fwlink/p/?LinkId=271146\n"
  },
  {
    "path": "docs/mobile-services-windows-phone-get-started-users.md",
    "content": "<properties\n\tpageTitle=\"Get started with authentication (Windows Phone) | Microsoft Azure\"\n\tdescription=\"Learn how to use Mobile Services to authenticate users of your Windows Phone app through a variety of identity providers, including Google, Facebook, Twitter, and Microsoft.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows-phone\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Add authentication to your Mobile Services app\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-users.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started-users.md)\n- [(Windows 8.x Store C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started-users.md)\n- [(Windows 8.x Store C# | Javascript)](mobile-services-windows-store-dotnet-get-started-users.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-users.md)\n- [(Android | Javascript)](mobile-services-android-get-started-users.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started-users.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-users.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-users.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-users.md)\n- [(HTML | Javascript)](mobile-services-html-get-started-users.md)\n\n## Overview\n\nThis topic shows you how to authenticate users in Azure Mobile Services from your app. In this tutorial, you add authentication to the quickstart project using an identity provider that is supported by Mobile Services. After being successfully authenticated and authorized by Mobile Services, the user ID value is displayed.\n\nThis tutorial is also demonstrated by Nick Harris in the following video:\n\n> [AZURE.VIDEO mobile-authorize-users-in-scripts-windows-phone]\n\nThis tutorial is based on the Mobile Services quickstart. You must also first complete the tutorial [Add Mobile Services to an existing app].\n\n>[AZURE.NOTE]This tutorial demonstrates the authentication flow managed by Mobile Services using a variety of identity providers. This method is easy to configure and supports multiple providers. By using client-managed authentication, your app has access to additional user data maintained by the identity provider. You can get the same user data in your mobile service by by calling the **user.getIdentities()** function in server scripts. For more information, see [this post](http://go.microsoft.com/fwlink/p/?LinkId=506605).\n\n## <a name=\"register\"></a>Register your app for authentication and configure Mobile Services\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Dashboard**, and make a note of the **Mobile Service URL** value.\n\n2. Register your app with one or more of the following authentication providers:\n   * [Google](./\nmobile-services-how-to-register-google-authentication.md)\n   * [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n   * [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n   * [Microsoft](./\nmobile-services-how-to-register-microsoft-authentication.md)\n   * [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md).\n\n    Make a note of the client identity and client secret values generated by the provider. Do not distribute or share the client secret.\n\n3. Back in the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Identity** > your identity provider settings, then enter the client ID and secret value from your provider.\n\nYou've now configured both your app and your mobile service to work with your auth provider. You may optionally repeat all these steps for each additional identity provider you'd like to support.\n\n> [AZURE.IMPORTANT] Verify that you've set the correct redirect URI on your identity provider's developer site. As described in the linked instructions for each provider above, the redirect URI may be different for a .NET backend service vs. for a JavaScript backend service. An incorrectly configured redirect URI may result in the login screen not being displayed properly and the app malfunctioning in unexpected ways.\n\n\n## <a name=\"permissions\"></a>Restrict permissions to authenticated users\n\n\nTo secure your endpoints, you must restrict access to only authenticated clients.\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), navigate to your mobile service, then click  **Data** > your table name (**TodoItem**) > **Permissions**.\n\n2. Set all of the table operation permissions to **Only authenticated users**.\n\n\t This ensures that all operations against the table require an authenticated user, which is required for this tutorial. You can set different permissions on each operations to support your specific scenario.  \n\n\n&nbsp;&nbsp;3. In Visual Studio, open the project that you created when you completed the tutorial [Add Mobile Services to an existing app](mobile-services-windows-phone-get-started-data.md).\n\n&nbsp;&nbsp;4. Press the F5 key to run this quickstart-based app; verify that an unhandled exception with a status code of 401 (Unauthorized) is raised after the app starts. This happens because the app attempts to access Mobile Services as an unauthenticated user, but the *TodoItem* table now requires authentication.\n\nNext, you will update the app to authenticate users before requesting resources from the mobile service.\n\n## <a name=\"add-authentication\"></a>Add authentication to the app\n\n1. Open the project file mainpage.xaml.cs and add the following code snippet to the MainPage class:\n\n        private MobileServiceUser user;\n        private async Task Authenticate()\n        {\n            while (user == null)\n            {\n                string message;\n                try\n                {\n                    user = await App.MobileServiceDotNetClient.LoginAsync(MobileServiceAuthenticationProvider.Twitter);\n                    message = string.Format(\"You are now logged in - {0}\", user.UserId);\n                }\n                catch (InvalidOperationException)\n                {\n                    message = \"You must log in. Login Required\";\n                }\n\n                var dialog = new MessageDialog(message);\n                await dialog.ShowAsync();\n            }\n        }\n\n    This creates a member variable for storing the current user and a method to handle the authentication process. The user is authenticated by using a Twitter login.\n\n    >[AZURE.NOTE]If you are using an identity provider other than Twitter, change the value of <strong>MobileServiceAuthenticationProvider</strong> above to the value for your provider.</p>\n    </div>\n\n2. Delete or comment-out the existing **OnNavigatedTo** method override and replace it with the following method that handles the **Loaded** event for the page.\n\n        async void MainPage_Loaded(object sender, RoutedEventArgs e)\n        {\n            await Authenticate();\n            RefreshTodoItems();\n        }\n\n   \tThis method calls the new **Authenticate** method.\n\n3. Replace the MainPage constructor with the following code:\n\n        // Constructor\n        public MainPage()\n        {\n            InitializeComponent();\n            this.Loaded += MainPage_Loaded;\n        }\n\n   \tThis constructor also registers the handler for the Loaded event.\n\n4. Press the F5 key to run the app and sign into the app with your chosen identity provider.\n\n   \tWhen you are successfully logged-in, the app should run without errors, and you should be able to query Mobile Services and make updates to data.\n\n## <a name=\"tokens\"></a>Store the authorization tokens on the client\n\n\nThe previous example showed a standard sign-in, which requires the client to contact both the identity provider and the mobile service every time that the app starts. Not only is this method inefficient, you can run into usage-relates issues should many customers try to start you app at the same time. A better approach is to cache the authorization token returned by Mobile Services and try to use this first before using a provider-based sign-in.\n\n>[AZURE.NOTE]You can cache the token issued by Mobile Services regardless of whether you are using client-managed or service-managed authentication. This tutorial uses service-managed authentication.\n\n1. In the MainPage.xaml.cs project file, add the following **using** statements:\n\n\t\tusing System.IO.IsolatedStorage;\n\t\tusing System.Security.Cryptography;\t\t\n\n2. Replace the **AuthenticateAsync** method with the following code:\n\n        private async System.Threading.Tasks.Task AuthenticateAsync()\n        {\n            string message;\n            // This sample uses the Facebook provider.\n            var provider = \"Facebook\";\n\n            // Provide some additional app-specific security for the encryption.\n            byte [] entropy = { 1, 8, 3, 6, 5 };\n\n            // Authorization credential.\n            MobileServiceUser user = null;\n\n            // Isolated storage for the app.\n            IsolatedStorageSettings settings =\n                IsolatedStorageSettings.ApplicationSettings;\n\n            while (user == null)\n            {\n                // Try to get an existing encrypted credential from isolated storage.                    \n                if (settings.Contains(provider))\n                {\n                    // Get the encrypted byte array, decrypt and deserialize the user.\n                    var encryptedUser = settings[provider] as byte[];\n                    var userBytes = ProtectedData.Unprotect(encryptedUser, entropy);\n                    user = JsonConvert.DeserializeObject<MobileServiceUser>(\n                        System.Text.Encoding.Unicode.GetString(userBytes, 0, userBytes.Length));\n                }\n                if (user != null)\n                {\n                    // Set the user from the stored credentials.\n                    App.MobileService.CurrentUser = user;\n\n                    try\n                    {\n                        // Try to return an item now to determine if the cached credential has expired.\n                        await App.MobileService.GetTable<TodoItem>().Take(1).ToListAsync();\n                    }\n                    catch (MobileServiceInvalidOperationException ex)\n                    {\n                        if (ex.Response.StatusCode == System.Net.HttpStatusCode.Unauthorized)\n                        {\n                            // Remove the credential with the expired token.\n                            settings.Remove(provider);\n                            user = null;\n                            continue;\n                        }\n                    }\n                }\n                else\n                {\n                    try\n                    {\n                        // Login with the identity provider.\n                        user = await App.MobileService\n                            .LoginAsync(provider);\n\n                        // Serialize the user into an array of bytes and encrypt with DPAPI.\n                        var userBytes = System.Text.Encoding.Unicode\n                            .GetBytes(JsonConvert.SerializeObject(user));\n                        byte[] encryptedUser = ProtectedData.Protect(userBytes, entropy);\n\n                        // Store the encrypted user credentials in local settings.\n                        settings.Add(provider, encryptedUser);\n                        settings.Save();\n                    }\n                    catch (MobileServiceInvalidOperationException ex)\n                    {\n                        message = \"You must log in. Login Required\";\n                    }\n                }\n                message = string.Format(\"You are now logged in - {0}\", user.UserId);\n                MessageBox.Show(message);\n            }\n        }\n\n\tIn this version of **AuthenticateAsync**, the app tries to use credentials stored encrypted in local storage to access the mobile service. A simple query is sent to verify that the stored token is not expired. When a 401 is returned, a regular provider-based sign-in is attempted. A regular sign-in is also performed when there is no stored credential.\n\n\t>[AZURE.NOTE]This app tests for expired tokens during login, but token expiration can occur after authentication when the app is in use. For a solution to handling authorization errors related to expiring tokens, see the post [Caching and handling expired tokens in Azure Mobile Services managed SDK](http://blogs.msdn.com/b/carlosfigueira/archive/2014/03/13/caching-and-handling-expired-tokens-in-azure-mobile-services-managed-sdk.aspx).\n\n3. Restart the app twice.\n\n\tNotice that on the first start-up, sign-in with the provider is again required. However, on the second restart the cached credentials are used and sign-in is bypassed.\n\n## <a name=\"next-steps\"> </a>Next steps\n\nIn the next tutorial, [Service-side authorization of Mobile Services users](mobile-services-javascript-backend-service-side-authorization.md), you will take the user ID value provided by Mobile Services based on an authenticated user and use it to filter the data returned by Mobile Services.\n\n<!-- Anchors. -->\n[Register your app for authentication and configure Mobile Services]: #register\n[Restrict table permissions to authenticated users]: #permissions\n[Add authentication to the app]: #add-authentication\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n[1]: ./media/mobile-services-wp8-get-started-users/mobile-services-selection.png\n[2]: ./media/mobile-services-wp8-get-started-users/mobile-service-uri.png\n[3]: ./media/mobile-services-wp8-get-started-users/mobile-identity-tab.png\n[4]: ./media/mobile-services-wp8-get-started-users/mobile-portal-data-tables.png\n[5]: ./media/mobile-services-wp8-get-started-users/mobile-portal-change-table-perms.png\n\n<!-- URLs. -->\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[Add Mobile Services to an existing app]: mobile-services-windows-phone-get-started-data.md\n[Authorize users with scripts]: mobile-services-windows-phone-authorize-users-in-scripts.md\n"
  },
  {
    "path": "docs/mobile-services-windows-store-dotnet-adal-sso-authentication.md",
    "content": "<properties\n\tpageTitle=\"Authenticate your app with Active Directory Authentication Library Single Sign-On (Windows Store) | Microsoft Azure\"\n\tdescription=\"Learn how to authentication users for single sign-on with ADAL in your Windows Store application.\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"wesmc7777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows-store\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"wesmc\"/>\n\n# Authenticate your app with Active Directory Authentication Library Single Sign-On\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR-LIST (Platform | Backend)]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-adal-sso-authentication.md)\n- [(Windows 8.x Store C# | .NET)](mobile-services-windows-store-dotnet-adal-sso-authentication.md)\n\n## Overview\n\nIn this tutorial, you add authentication to the quickstart project using the Active Directory Authentication Library to support [client-directed login operations](http://msdn.microsoft.com/library/azure/jj710106.aspx) with Azure Active Directory. To support [service-directed login operations](http://msdn.microsoft.com/library/azure/dn283952.aspx) with Azure Active Directory, start with the [Add authentication to your Mobile Services app](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md) tutorial.\n\nTo be able to authenticate users, you must register your application with the Azure Active Directory (AAD). This is done in two steps. First, you must register your mobile service and expose permissions on it. Second, you must register your Windows Store app and grant it access to those permissions\n\n\n>[AZURE.NOTE] This tutorial is intended to help you better understand how Mobile Services enables you to do single sign-on Azure Active Directory authentication for Windows Store apps using a [client-directed login operation](http://msdn.microsoft.com/library/azure/jj710106.aspx). If this is your first experience with Mobile Services, complete the tutorial [Get started with Mobile Services].\n\n\n## Prerequisites\n\nThis tutorial requires the following:\n\n* Visual Studio 2013 running on Windows 8.1.\n* Completion of the [Get started with Mobile Services] tutorial.\n* Microsoft Azure Mobile Services SDK NuGet package\n* Active Directory Authentication Library NuGet package\n\n## <a name=\"register-mobile-service-aad\"></a>Register your mobile service with the Azure Active Directory\n\n\nIn this section you will register your mobile service with the Azure Active Directory and configure permissions to allow single sign-on impersonation.\n\n1. Register your application with your Azure Active Directory by following the [How to Register with the Azure Active Directory] topic.\n\n2. In the [Azure classic portal](https://manage.windowsazure.com/), go back to the Azure Active Directory extension and click on your active directory\n\n3. Click the **Applications** tab and then click your application.\n\n4. Click **Manage Manifest**. Then click **Download Manifest** and save the application manifest to a local directory.\n\n   ![](./media/mobile-services-dotnet-adal-register-service/mobile-services-aad-app-manage-manifest.png)\n\n5. Open the application manifest file with Visual Studio. At the top of the file find the app permissions line that looks as follows:\n\n        \"oauth2Permissions\": [],\n\n    Replace that line with the following app permissions and save the file.\n\n        \"oauth2Permissions\": [\n            {\n                \"adminConsentDescription\": \"Allow the application access to the mobile service\",\n                \"adminConsentDisplayName\": \"Have full access to the mobile service\",\n                \"id\": \"b69ee3c9-c40d-4f2a-ac80-961cd1534e40\",\n                \"isEnabled\": true,\n                \"origin\": \"Application\",\n                \"type\": \"User\",\n                \"userConsentDescription\": \"Allow the application full access to the mobile service on your behalf\",\n                \"userConsentDisplayName\": \"Have full access to the mobile service\",\n                \"value\": \"user_impersonation\"\n            }\n        ],\n\n6. In the [Azure classic portal](https://manage.windowsazure.com/), click **Manage Manifest** for the application again and click **Upload Manifest**.  Browse to the location of the application manifest that you just updated and upload the manifest.\n\n<!-- URLs. -->\n[How to Register with the Azure Active Directory]: ./\nmobile-services-how-to-register-active-directory-authentication.md\n\n## Register your app with the Azure Active Directory\n\nTo register the app with Azure Active Directory, you must associate it to the Windows Store and have a package security identifier (SID) for the app. The package SID gets registered with the native application settings in the Azure Active Directory.\n\n\n### Associate the app with a new store app name\n\n1. In Visual Studio, right click the client app project and click **Store** and **Associate App with the Store**\n\n    ![][1]\n\n2. Sign into your Dev Center account.\n\n3. Enter the app name you want to reserve for the app and click **Reserve**.\n\n    ![][2]\n\n4. Select the new app name and click **Next**.\n\n5. Click **Associate** to associate the app with the store name.\n\n\n### Retrieve the package SID for your app.\n\nNow you need to retrieve your package SID which will be configured with the native app settings.\n\n1. Log into your [Windows Dev Center Dashboard] and click **Edit** on the app.\n\n    ![][3]\n\n2. Then click **App management** > **App identity** and Copy your package SID from the page.\n\n    ![][4]\n\n\n### Create the native app registration\n\n1. Navigate to **Active Directory** in the [classic portal], then click your directory.\n\n    ![][7]\n\n2. Click the **Applications** tab at the top, then click to **ADD** an app.\n\n    ![][8]\n\n3. Click **Add an application my organization is developing**.\n\n4. In the Add Application Wizard, enter a **Name** for your application and click the  **Native Client Application** type. Then click to continue.\n\n    ![][9]\n\n5. In the **Redirect URI** box, paste the App package SID you copied earlier then click to complete the native app registration.\n\n    ![][10]\n\n6. Click the **Configure** tab for the native application and copy the **Client ID**. You will need this later.\n\n    ![][11]\n\n7. Scroll the page down to the **permissions to other applications** section and grant full access to the mobile service application that you registered earlier. Then click **Save**\n\n    ![][12]\n\nYour mobile service is now configured in AAD to receive single sign-on logins from your app.\n\n\n\n## Configure the mobile service to require authentication\n\n\n\nBy default, all requests to mobile service resources are restricted to clients that present the application key, which does not strictly secure access to resources. To secure your resources, you must restrict access to only authenticated clients.\n\n1. In Visual Studio, open your mobile service project, expand the Controllers folder, and open **TodoItemController.cs**. The **TodoItemController** class implements data access for the TodoItem table. Add the following `using` statement:\n\n\t\tusing Microsoft.WindowsAzure.Mobile.Service.Security;\n\n2. Apply the following _AuthorizeLevel_ attribute to the **TodoItemController** class. \n\n\t\t[AuthorizeLevel(AuthorizationLevel.User)]\n\n\tThis makes sure that all operations against the _TodoItem_ table require an authenticated user. You can also apply the *AuthorizeLevel* attribute at the method level.\n\n3. (Optional) If you wish to debug authentication locally, expand the `App_Start` folder, open **WebApiConfig.cs**, and add the following code to the **Register** method.  \n\n\t\tconfig.SetIsHosted(true);\n\n\tThis tells the local mobile service project to run as if it is being hosted in Azure, including honoring the *AuthorizeLevel* settings. Without this setting, all HTTP requests to localhost are permitted without authentication despite the *AuthorizeLevel* setting. When you enable self-hosted mode, you also need to set a value for the local application key.\n\n4. (Optional) In the web.config project file, set a string value for the `MS_ApplicationKey` app setting. \n\n\tThis is the password that you use (with no username) to test the API help pages when you run the service locally.  This string value is not used by the live site in Azure, and you do not need to use the actual application key; any valid string value will work.\n \n4. Republish your project.\n\n## Add authentication code to the client app\n\n1. Open your Windows store client app project in Visual Studio.\n\n1. In the Solution Explorer window of Visual Studio, right click the project and click **Manage NuGet Packages**.\n\n2. In the NuGet Package manager, click **Online**. Enter **Microsoft.IdentityModel.Clients.ActiveDirectory** as a search term. Then click **Install** to install the Active Directory Authentication Library Nuget package. \n\n   ![](./media/mobile-services-dotnet-adal-install-nuget/mobile-services-adal-nuget-package.png)\n\n4. In the Solution Explorer window of Visual Studio, open the MainPage.cs file and add the following using statements.\n\n        using Windows.UI.Popups;\n        using Microsoft.IdentityModel.Clients.ActiveDirectory;\n        using Newtonsoft.Json.Linq;\n\n\n5. Add the following code to the MainPage class which declares the `AuthenticateAsync` method.\n\n        private MobileServiceUser user;\n        private async Task AuthenticateAsync()\n        {\n            string authority = \"<INSERT-AUTHORITY-HERE>\";\n            string resourceURI = \"<INSERT-RESOURCE-URI-HERE>\";\n            string clientID = \"<INSERT-CLIENT-ID-HERE>\";\n            while (user == null)\n            {\n                string message;\n                try\n                {\n                  AuthenticationContext ac = new AuthenticationContext(authority);\n                  AuthenticationResult ar = await ac.AcquireTokenAsync(resourceURI, clientID, (Uri) null);\n                  JObject payload = new JObject();\n                  payload[\"access_token\"] = ar.AccessToken;\n                  user = await App.MobileService.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload);\n                  message = string.Format(\"You are now logged in - {0}\", user.UserId);\n                }\n                catch (InvalidOperationException)\n                {\n                  message = \"You must log in. Login Required\";\n                }\n                var dialog = new MessageDialog(message);\n                dialog.Commands.Add(new UICommand(\"OK\"));\n                await dialog.ShowAsync();\n            }\n        }\n\n6. In the code for the `AuthenticateAsync` method above, replace **INSERT-AUTHORITY-HERE** with the name of the tenant in which you provisioned your application, the format should be https://login.windows.net/tenant-name.onmicrosoft.com. This value can be copied out of the Domain tab in your Azure Active Directory in the [Azure classic portal].\n\n7. In the code for the `AuthenticateAsync` method above, replace **INSERT-RESOURCE-URI-HERE** with the **App ID URI** for your mobile service. If you followed the [How to Register with the Azure Active Directory] topic your App ID URI should be similar to https://todolist.azure-mobile.net/login/aad.\n\n8. In the code for the `AuthenticateAsync` method above, replace **INSERT-CLIENT-ID-HERE** with the client ID you copied from the native client application.\n\n9. In the Solution Explorer window for Visual Studio, open the Package.appxmanifest file in the client project. Click the **Capabilities** tab and enable **Enterprise Application** and **Private Networks (Client & Server)**. Save the file.\n\n    ![][14]\n\n10. In the MainPage.cs file, update the `OnNavigatedTo` event handler to call the `AuthenticateAsync` method as follows.\n\n        protected override async void OnNavigatedTo(NavigationEventArgs e)\n        {\n            await AuthenticateAsync();\n            await RefreshTodoItems();\n        }\n\n\n## Test the client using authentication\n\n1. In Visual Studio,run the client app.\n2. You will receive a prompt to login against your Azure Active Directory.\n3. The app authenticates and returns the todo items.\n\n    ![][15]\n\n\n\n\n<!-- Images -->\n[0]: ./media/mobile-services-windows-store-dotnet-adal-sso-authenticate/mobile-services-aad-app-manage-manifest.png\n[1]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-vs-associate-app.png\n[2]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-vs-reserve-store-appname.png\n[3]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-store-app-edit.png\n[4]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-store-app-services.png\n[5]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-live-services-site.png\n[6]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-store-app-package-sid.png\n[7]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-select-aad.png\n[8]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-aad-applications-tab.png\n[9]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-native-selection.png\n[10]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-native-sid-redirect-uri.png\n[11]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-native-client-id.png\n[12]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-native-add-permissions.png\n[14]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-package-appxmanifest.png\n[15]: ./media/mobile-services-windows-store-dotnet-adal-sso-authentication/mobile-services-app-run.png\n\n<!-- URLs. -->\n[How to Register with the Azure Active Directory]: mobile-services-how-to-register-active-directory-authentication.md\n[Azure classic portal]: https://manage.windowsazure.com/\n[classic portal]: https://manage.windowsazure.com/\n[Get started with Mobile Services]: mobile-services-dotnet-backend-windows-store-dotnet-get-started.md\n[Windows Dev Center Dashboard]: http://go.microsoft.com/fwlink/p/?LinkID=266734\n"
  },
  {
    "path": "docs/mobile-services-windows-store-dotnet-get-started-offline-data.md",
    "content": "<properties\n\tpageTitle=\"Using offline data in your universal Windows app | Microsoft Azure\"\n\tdescription=\"Learn how to use Azure Mobile Services to cache and sync offline data in your universal Windows app.\"\n\tdocumentationCenter=\"mobile-services\"\n\tauthors=\"lindydonna\"\n\tmanager=\"dwrede\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"donnam\"/>\n\n# Using offline data sync in Mobile Services\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR]\n- [Android)](mobile-services-android-get-started-offline-data.md)\n- [iOS](mobile-services-ios-get-started-offline-data.md)\n- [Windows](mobile-services-windows-store-dotnet-get-started-offline-data.md)\n- [Xamarin.Android](mobile-services-xamarin-android-get-started-offline-data.md)\n- [Xamarin.iOS](mobile-services-xamarin-ios-get-started-offline-data.md)\n\n\nThis tutorial shows you how to add offline support to a Windows Universal Store app using Azure Mobile Services. Offline support will allow you to interact with a local database when your app is in an offline scenario. Once your app is online with the backend database, you sync your local changes using the offline features.\n\nIf you prefer to watch a video, the clip to the right follows the same steps as this tutorial.\n\n> [AZURE.VIDEO build-offline-apps-with-mobile-services]\n\nIn this tutorial, you update the Universal app project from the [Get started with Mobile Services] tutorial to support the offline features of Azure Mobile Services. Then you will add data in a disconnected offline scenario, sync those items to the online database, and then log in to the [Azure classic portal] to view changes to data made when running the app.\n\n>[AZURE.NOTE] This tutorial is intended to help you better understand how Mobile Services enables you to use Azure to store and retrieve data in a Windows Store app. If this is your first experience with Mobile Services, you should complete the tutorial [Get started with Mobile Services] first.\n\n## Prerequisites\n\nThis tutorial requires the following:\n\n* Visual Studio 2013 running on Windows 8.1.\n* Completion of the [Get started with Mobile Services].\n* [Azure Mobile Services SDK version 1.3.0 (or later)][Mobile Services SDK Nuget]\n* [Azure Mobile Services SQLite Store version 1.0.0 (or later)][SQLite store nuget]\n* [SQLite for Windows 8.1](http://www.sqlite.org/download.html)\n* An Azure account. If you don't have an account, you can sign up for an Azure trial and get up to 10 free mobile services that you can keep using even after your trial ends. For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=AE564AB28).\n\n## <a name=\"enable-offline-app\"></a>Update the app to support offline features\n\nAzure Mobile Services offline features allow you to interact with a local database when you are in an offline scenario with your Mobile Service. To use these features in your app, you initialize a `MobileServiceClient.SyncContext` to a local store. Then reference your table through the `IMobileServiceSyncTable` interface. In this tutorial we use SQLite for the local store.\n\n>[AZURE.NOTE] You can skip this section and just get the example project that already has offline support from the GitHub samples repository for Mobile Services. The sample project with offline support enabled is located here, [TodoList Offline Sample].\n\n1. Install the SQLite runtime for Windows 8.1 and Windows Phone 8.1.\n\n    * **Windows 8.1 Runtime:** Install [SQLite for Windows 8.1].\n    * **Windows Phone 8.1:** Install [SQLite for Windows Phone 8.1].\n\n    >[AZURE.NOTE] If you are using Internet Explorer, clicking the link to install SQLite may prompt you to download the .vsix as a .zip file. Save the file to a location on your hard drive with the .vsix extension instead of .zip. The double click the .vsix file in Windows Explorer to run the installation.\n\n2. In Visual Studio open the project that you completed in the [Get started with Mobile Services] tutorial. Install the **WindowsAzure.MobileServices.SQLiteStore** NuGet package for the Windows 8.1 runtime and Windows Phone 8.1 projects.\n\n    * **Windows 8.1:** In Solution Explorer, right click the Windows 8.1 project and click **Manage Nuget Packages** to run NuGet Package Manager. Search for **SQLiteStore** to install the `WindowsAzure.MobileServices.SQLiteStore` package.\n    * **Windows Phone 8.1:** Right click the Windows Phone 8.1 project and click **Manage Nuget Packages** to run NuGet Package Manager. Search for **SQLiteStore** to install the `WindowsAzure.MobileServices.SQLiteStore` package.\n\n    >[AZURE.NOTE] If the installation creates a reference to an older version of SQLite, you can just delete that duplicate reference.\n\n    ![][2]\n\n2. In Solution Explorer, right click **References** for the Windows 8.1 Runtime and Windows Phone 8.1 platform projects and ensure there is a reference to SQLite, which is located in the **Extensions** section.\n\n    ![][1]\n    </br>\n\n    **Windows 8.1 Runtime**\n\n    ![][11]\n    </br>\n\n    **Windows Phone 8.1**\n\n3. The SQLite Runtime requires you to change the processor architecture of the project being built to **x86**, **x64**, or **ARM**. **Any CPU** is not supported. In Solution Explorer, click the Solution at the top, then change the processor architecture drop down box to one of the supported settings that you want to test.\n\n    ![][13]\n\n5. In Solution Explorer, in the shared project, open the MainPage.cs file. Uncomment the following using statements at the top of the file:\n\n        using Microsoft.WindowsAzure.MobileServices.SQLiteStore;  // offline sync\n        using Microsoft.WindowsAzure.MobileServices.Sync;         // offline sync\n\n6. In MainPage.cs, comment the definition of `todoTable` and uncomment the one on the following line that calls `MobileServicesClient.GetSyncTable()`:\n\n        //private IMobileServiceTable<TodoItem> todoTable = App.MobileService.GetTable<TodoItem>();\n        private IMobileServiceSyncTable<TodoItem> todoTable = App.MobileService.GetSyncTable<TodoItem>(); // offline sync\n\n\n7. In MainPage.cs, in the region marked `Offline sync`, uncomment the methods `InitLocalStoreAsync` and `SyncAsync`. The method `InitLocalStoreAsync` initializes the client sync context with a SQLite store.\n\n        private async Task InitLocalStoreAsync()\n        {\n            if (!App.MobileService.SyncContext.IsInitialized)\n            {\n                var store = new MobileServiceSQLiteStore(\"localstore.db\");\n                store.DefineTable<TodoItem>();\n                await App.MobileService.SyncContext.InitializeAsync(store);\n            }\n\n            await SyncAsync();\n        }\n\n        private async Task SyncAsync()\n        {\n            await App.MobileService.SyncContext.PushAsync();\n            await todoTable.PullAsync(\"todoItems\", todoTable.CreateQuery());\n        }\n\n8. In the `OnNavigatedTo` event handler, uncomment the call to `InitLocalStoreAsync`:\n\n        protected override async void OnNavigatedTo(NavigationEventArgs e)\n        {\n            await InitLocalStoreAsync(); // offline sync\n            await RefreshTodoItems();\n        }\n\n9. Uncommment the 3 calls to `SyncAsync` in the methods `InsertTodoItem`, `UpdateCheckedTodoItem`, and `ButtonRefresh_Click`:\n\n        private async Task InsertTodoItem(TodoItem todoItem)\n        {\n            await todoTable.InsertAsync(todoItem);\n            items.Add(todoItem);\n\n            await SyncAsync(); // offline sync\n        }\n\n        private async Task UpdateCheckedTodoItem(TodoItem item)\n        {\n            await todoTable.UpdateAsync(item);\n            items.Remove(item);\n            ListItems.Focus(Windows.UI.Xaml.FocusState.Unfocused);\n\n            await SyncAsync(); // offline sync\n        }\n\n        private async void ButtonRefresh_Click(object sender, RoutedEventArgs e)\n        {\n            ButtonRefresh.IsEnabled = false;\n\n            await SyncAsync(); // offline sync\n            await RefreshTodoItems();\n\n            ButtonRefresh.IsEnabled = true;\n        }\n\n10. Add exception handlers in the `SyncAsync` method:\n\n        private async Task SyncAsync()\n        {\n            String errorString = null;\n\n            try\n            {\n                await App.MobileService.SyncContext.PushAsync();\n                await todoTable.PullAsync(\"todoItems\", todoTable.CreateQuery()); // first param is query ID, used for incremental sync\n            }\n\n            catch (MobileServicePushFailedException ex)\n            {\n                errorString = \"Push failed because of sync errors: \" +\n                  ex.PushResult.Errors.Count + \" errors, message: \" + ex.Message;\n            }\n            catch (Exception ex)\n            {\n                errorString = \"Pull failed: \" + ex.Message +\n                  \"\\n\\nIf you are still in an offline scenario, \" +\n                  \"you can try your Pull again when connected with your Mobile Serice.\";\n            }\n\n            if (errorString != null)\n            {\n                MessageDialog d = new MessageDialog(errorString);\n                await d.ShowAsync();\n            }\n        }\n\n    In this example, we retrieve all records in the remote `todoTable`, but it is also possible to filter records by passing a query. The first parameter to `PullAsync` is a query ID that is used for incremental sync, which uses the `UpdatedAt` timestamp to get only records modified since the last sync. The query ID should be a descriptive string that is unique for each logical query in your app. To opt-out of incremental sync, pass `null` as the query ID. This will retrieve all records on each pull operation, which is potentially inefficient.\n\n    >[AZURE.NOTE] * To remove records from the device local store when they have been deleted in your mobile service database, you should enable [Soft Delete]. Otherwise, your app should periodically call `IMobileServiceSyncTable.PurgeAsync()` to purge the local store.\n\n    Note that the `MobileServicePushFailedException` can occur for both a push and a pull operation. It can occur for a pull because the pull operation internally executes a push to make sure all tables along with any relationships are consistent. The next tutorial, [Handling conflicts with offline support for Mobile Services], shows how to handle these sync related exceptions.\n\n11. In Visual Studio, press the **F5** key to rebuild and run the app. The app will behave the same as it did before the offline sync changes, because it does a sync operation on the insert, update, and refresh operations.\n\n## <a name=\"update-sync\"></a>Update the sync behavior of the app\n\nIn this section, you will modify the app so that it does not sync on the insert and update operations, but only when the **Refresh** button is pressed. Then, you will break the app connection with the mobile service to simulate an offline scenario. When you add data items, they will be held in the local store, but not synced to the mobile service.\n\n1. Open MainPage.cs in the shared project. Edit the methods `InsertTodoItem` and `UpdateCheckedTodoItem` to comment out the calls to `SyncAsync`.\n\n2. Edit App.xaml.cs in the shared project. Comment out the initialization of the **MobileServiceClient** and add the following lines, which use an invalid mobile service URL:\n\n         public static MobileServiceClient MobileService = new MobileServiceClient(\n            \"https://your-mobile-service.azure-mobile.xxx/\",\n            \"AppKey\"\n        );\n\n3. In `InitLocalStoreAsync()`, comment out the call to `SyncAsync()`, so that the app does not perform a sync on launch.\n\n4. Press **F5** to build and run the app. Enter some new todo items and click **Save** for each one. The new todo items exist only in the local store until they can be pushed to the mobile service. The client app behaves as if its connected to the mobile service supporting all create, read, update, delete (CRUD) operations.\n\n5. Close the app and restart it to verify that the new items you created are persisted to the local store.\n\n## <a name=\"update-online-app\"></a>Update the app to reconnect your mobile service\n\nIn this section you reconnect the app to the mobile service. This simulates the app moving from an offline state to an online state with the mobile service. When you press the Refresh button, data will be synced to your mobile service.\n\n1. Open App.xaml.cs in the shared project. Uncomment your previous initialization of `MobileServiceClient` to add back the correct mobile service URL and app key.\n\n2. Press the **F5** key to rebuild and run the app. Notice that the data looks the same as the offline scenario even though the app is now connected to the mobile service. This is because this app always works with the `IMobileServiceSyncTable` that is pointed to the local store.\n\n3. Log into the [Azure classic portal] and look at the database for your mobile service. If your service uses the JavaScript backend for mobile services, you can browse the data from the **Data** tab of the mobile service.\n\n    If you are using the .NET backend for your mobile service, in Visual Studio go to **Server Explorer** -> **Azure** -> **SQL Databases**. Right click your database and select **Open in SQL Server Object Explorer**.\n\n    Notice the data has not been synchronized between the database and the local store.\n\n    ![][6]\n\n4. In the app, press the **Refresh** button. This causes the app to call `PushAsync` and `PullAsync`. This push operation sends the local store items to the mobile service, then retrieves new data from the mobile service.\n\n    A push operation is executed off the `MobileServiceClient.SyncContext` instead of the `IMobileServicesSyncTable` and pushes changes on all tables associated with that sync context. This is to cover scenarios where there are relationships between tables.\n\n    ![][7]\n\n5. In the app, click the check box beside a few items to complete them in the local store.\n\n    ![][8]\n\n6. Push the **Refresh** button again, which causes `SyncAsync` to be called. `SyncAsync` calls both push and pull, but in this case we could have removed the call to `PushAsync`. This is because a **pull always does a push first**. This is to ensure all tables in the local store along with relationships remain consistent.\n\n    ![][10]\n\n\n## Summary\n\nIn order to support the offline features of mobile services, we used the `IMobileServiceSyncTable` interface and initialized `MobileServiceClient.SyncContext` with a local store. In this case the local store was a SQLite database.\n\nThe normal CRUD operations for mobile services work as if the app is still connected but, all the operations occur against the local store.\n\nWhen we wanted to synchronize the local store with the server, we used the `IMobileServiceSyncTable.PullAsync` and `MobileServiceClient.SyncContext.PushAsync` methods.\n\n*  To push changes to the server, we called `IMobileServiceSyncContext.PushAsync()`. This method is a member of `IMobileServicesSyncContext` instead of the sync table because it will push changes across all tables.\n\n    Only records that have been modified in some way locally (through CUD operations) will be sent to the server.\n\n* To pull data from a table on the server to the app, we called `IMobileServiceSyncTable.PullAsync`.\n\n    A pull always issues a push first. This is to ensure all tables in the local store along with relationships remain consistent.\n\n    There are also overloads of `PullAsync()` that allow a query to be specified in order to filter the data that is stored on the client. If a query is not passed, `PullAsync()` will pull all rows in the corresponding table (or query). You can pass the query to filter only the changes your app needs to sync with.\n\n* To enable incremental sync, pass a query ID to `PullAsync()`. The query ID is used to store the last updated timestamp from the results of the last pull operation. The query ID should be a descriptive string that is unique for each logical query in your app. If the query has a parameter, then the same parameter value has to be part of the query ID.\n\n    For instance, if you are filtering on userid, it needs to be part of the query ID:\n\n        await PullAsync(\"todoItems\" + userid, syncTable.Where(u => u.UserId = userid));\n\n    If you want to opt out of incremental sync, pass `null` as the query ID. In this case, all records will be retrieved on every call to `PullAsync`, which is potentially inefficient.\n\n* To remove records from the device local store when they have been deleted in your mobile service database, you should enable [Soft Delete]. Otherwise, your app should periodically call `IMobileServiceSyncTable.PurgeAsync()` to purge the local store.\n\n\n## Next steps\n\n* [Handling conflicts with offline support for Mobile Services]\n\n* [Using Soft Delete in Mobile Services][Soft Delete]\n\n<!-- Anchors. -->\n[Update the app to support offline features]: #enable-offline-app\n[Update the sync behavior of the app]: #update-sync\n[Update the app to reconnect your mobile service]: #update-online-app\n[Next Steps]:#next-steps\n\n<!-- Images -->\n[1]: ./media/mobile-services-windows-store-dotnet-get-started-offline-data/mobile-services-add-reference-sqlite-dialog.png\n[2]: ./media/mobile-services-windows-store-dotnet-get-started-offline-data/mobile-services-sqlitestore-nuget.png\n[6]: ./media/mobile-services-windows-store-dotnet-get-started-offline-data/mobile-data-browse.png\n[7]: ./media/mobile-services-windows-store-dotnet-get-started-offline-data/mobile-data-browse2.png\n[8]: ./media/mobile-services-windows-store-dotnet-get-started-offline-data/mobile-services-online-app-run2.png\n[10]: ./media/mobile-services-windows-store-dotnet-get-started-offline-data/mobile-data-browse3.png\n[11]: ./media/mobile-services-windows-store-dotnet-get-started-offline-data/mobile-services-add-wp81-reference-sqlite-dialog.png\n[12]: ./media/mobile-services-windows-store-dotnet-get-started-offline-data/new-synchandler-class.png\n[13]: ./media/mobile-services-windows-store-dotnet-get-started-offline-data/cpu-architecture.png\n\n\n<!-- URLs. -->\n[Handling conflicts with offline support for Mobile Services]: mobile-services-windows-store-dotnet-handling-conflicts-offline-data.md\n[TodoList Offline Sample]: http://go.microsoft.com/fwlink/?LinkId=394777\n[Get started with Mobile Services]: https://azure.microsoft.com/develop/mobile/tutorials/get-started/#create-new-service\n[Getting Started]: mobile-services-dotnet-backend-windows-phone-get-started.md\n[Get started with Mobile Services]: mobile-services-windows-store-get-started.md\n[SQLite for Windows 8.1]: http://go.microsoft.com/fwlink/?LinkId=394776\n[SQLite for Windows Phone 8.1]: http://go.microsoft.com/fwlink/?LinkId=397953\n[Soft Delete]: mobile-services-using-soft-delete.md\n\n\n[Mobile Services SDK Nuget]: http://www.nuget.org/packages/WindowsAzure.MobileServices/1.3.0\n[SQLite store nuget]: http://www.nuget.org/packages/WindowsAzure.MobileServices.SQLiteStore/1.0.0\n[Azure classic portal]: https://manage.windowsazure.com\n"
  },
  {
    "path": "docs/mobile-services-windows-store-dotnet-handle-database-conflicts.md",
    "content": "<properties\n\tpageTitle=\"Handle database write conflicts with optimistic concurrency (Windows Store) | Microsoft Azure\"\n\tdescription=\"Learn how to handle database write conflicts on both the server and in your Windows Store application.\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"wesmc7777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"wesmc\"/>\n\n# Handling database write conflicts\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n\n\n## Overview\n\nThis tutorial is intended to help you better understand how to handle conflicts that occur when two or more clients write to the same database record in a Windows Store app. Two or more clients may write changes to the same item, at the same time, in some scenarios. Without any conflict detection, the last write would overwrite any previous updates even if this was not the desired result. Azure Mobile Services provides support for detecting and resolving these conflicts. This topic walks you through the steps that allow you to handle database write conflicts on both the server and in your application.\n\nIn this tutorial you will add functionality to the quickstart app to handle contentions that can occur when updating the TodoItem database.\n\n\n## Prerequisites\n\nThis tutorial requires the following\n\n+ Microsoft Visual Studio 2013 or later.\n+ This tutorial is based on the Mobile Services quickstart. Before you start this tutorial, you must first complete [Get started with Mobile Services].\n+ [Azure Account]\n+ Azure Mobile Services NuGet Package 1.1.0 or later. To get the latest version, follow these steps below:\n\t1. In Visual Studio, open the project and right-click the project in Solution Explorer then click **Manage Nuget Packages**.\n\n\t\t![][19]\n\n\t2. Expand **Online** and click **Microsoft and .NET**. In the search text box enter **Azure Mobile Services**. Click **Install** on the **Azure Mobile Services** NuGet Package.\n\n\t\t![][20]\n\n\n\n\n## Update the application to allow updates\n\nIn this section you will update the TodoList user interface to allow updating the text of each item in a ListBox control. The ListBox will contain a CheckBox and TextBox control for each item in the database table. You will be able to update the text field of the TodoItem. The application will handle the `LostFocus` event from that TextBox to update the item in the database.\n\n\n1. In Visual Studio, open the TodoList project you downloaded in the [Get started with Mobile Services] tutorial.\n2. In the Visual Studio Solution Explorer, open MainPage.xaml and replace the `ListView` definition with the `ListView` shown below and save the change.\n\n\t\t<ListView Name=\"ListItems\" Margin=\"62,10,0,0\" Grid.Row=\"1\">\n\t\t\t<ListView.ItemTemplate>\n\t\t\t\t<DataTemplate>\n\t\t\t\t\t<StackPanel Orientation=\"Horizontal\">\n\t\t\t\t\t\t<CheckBox Name=\"CheckBoxComplete\" IsChecked=\"{Binding Complete, Mode=TwoWay}\" Checked=\"CheckBoxComplete_Checked\" Margin=\"10,5\" VerticalAlignment=\"Center\"/>\n\t\t\t\t\t\t<TextBox x:Name=\"ToDoText\" Height=\"25\" Width=\"300\" Margin=\"10\" Text=\"{Binding Text, Mode=TwoWay}\" AcceptsReturn=\"False\" LostFocus=\"ToDoText_LostFocus\"/>\n\t\t\t\t\t</StackPanel>\n\t\t\t\t</DataTemplate>\n\t\t\t</ListView.ItemTemplate>\n\t\t</ListView>\n\n\n4. In the Visual Studio Solution Explorer, open MainPage.cs in the shared project. Add the event handler to the MainPage for the TextBox `LostFocus` event as shown below.\n\n\n        private async void ToDoText_LostFocus(object sender, RoutedEventArgs e)\n        {\n            TextBox tb = (TextBox)sender;\n            TodoItem item = tb.DataContext as TodoItem;\n            //let's see if the text changed\n            if (item.Text != tb.Text)\n            {\n                item.Text = tb.Text;\n                await UpdateToDoItem(item);\n            }\n        }\n\n4. In MainPage.cs for the shared project, add the definition for the MainPage `UpdateToDoItem()` method referenced in the event handler as shown below.\n\n        private async Task UpdateToDoItem(TodoItem item)\n        {\n            Exception exception = null;\n            try\n            {\n                //update at the remote table\n                await todoTable.UpdateAsync(item);\n            }\n            catch (Exception ex)\n            {\n                exception = ex;\n            }\n            if (exception != null)\n            {\n                await new MessageDialog(exception.Message, \"Update Failed\").ShowAsync();\n            }\n        }\n\nThe application now writes the text changes to each item back to the database when the TextBox loses focus.\n\n## Enable Conflict Detection in your application\n\nTwo or more clients may write changes to the same item, at the same time, in some scenarios. Without any conflict detection, the last write would overwrite any previous updates even if this was not the desired result. [Optimistic Concurrency Control] assumes that each transaction can commit and therefore does not use any resource locking. Before committing a transaction, optimistic concurrency control verifies that no other transaction has modified the data. If the data has been modified, the committing transaction is rolled back. Azure Mobile Services supports optimistic concurrency control by tracking changes to each item using the `__version` system property column that is added to each table. In this section, we will enable the application to detect these write conflicts through the `__version` system property. The application will be notified by a `MobileServicePreconditionFailedException` during an update attempt if the record has changed since the last query. It will then be able to make a choice of whether to commit its change to the database or leave the last change to the database intact. For more information on the System Properties for Mobile Services, see [System Properties].\n\n1. Open TodoItem.cs in the shared project and update the `TodoItem` class definition with the following code to include the `__version` system property enabling support for write conflict detection.\n\n\t\tpublic class TodoItem\n\t\t{\n\t\t\tpublic string Id { get; set; }\n\t\t\t[JsonProperty(PropertyName = \"text\")]\n\t\t\tpublic string Text { get; set; }\n\t\t\t[JsonProperty(PropertyName = \"complete\")]\n\t\t\tpublic bool Complete { get; set; }\n\t\t\t[JsonProperty(PropertyName = \"__version\")]\n\t\t\tpublic string Version { set; get; }\n\t\t}\n\n\t> [AZURE.NOTE] When using untyped tables, enable optimistic concurrency by adding the Version flag to the SystemProperties of the table.\n\t>\n\t>`````\n\t>//Enable optimistic concurrency by retrieving __version\n\t>todoTable.SystemProperties |= MobileServiceSystemProperties.Version;\n\t>`````\n\n\n2. By adding the `Version` property to the `TodoItem` class, the application will be notified with a `MobileServicePreconditionFailedException` exception during an update if the record has changed since the last query. This exception includes the latest version of the item from the server. In MainPage.cs for the shared project, add the following code to handle the exception in the `UpdateToDoItem()` method.\n\n        private async Task UpdateToDoItem(TodoItem item)\n        {\n            Exception exception = null;\n            try\n            {\n                //update at the remote table\n                await todoTable.UpdateAsync(item);\n            }\n            catch (MobileServicePreconditionFailedException<TodoItem> writeException)\n            {\n                exception = writeException;\n            }\n            catch (Exception ex)\n            {\n                exception = ex;\n            }\n            if (exception != null)\n            {\n                if (exception is MobileServicePreconditionFailedException)\n                {\n                    //Conflict detected, the item has changed since the last query\n                    //Resolve the conflict between the local and server item\n                    await ResolveConflict(item, ((MobileServicePreconditionFailedException<TodoItem>) exception).Item);\n                }\n                else\n                {\n                    await new MessageDialog(exception.Message, \"Update Failed\").ShowAsync();\n                }\n            }\n        }\n\n\n3. In MainPage.cs, add the definition for the `ResolveConflict()` method referenced in `UpdateToDoItem()`. Notice that in order to resolve the conflict, you set the local item's version to the updated version from the server before committing the user's decision. Otherwise, you will continually encounter the conflict.\n\n\n        private async Task ResolveConflict(TodoItem localItem, TodoItem serverItem)\n        {\n            //Ask user to choose the resolution between versions\n            MessageDialog msgDialog = new MessageDialog(String.Format(\"Server Text: \\\"{0}\\\" \\nLocal Text: \\\"{1}\\\"\\n\",\n                                                        serverItem.Text, localItem.Text),\n                                                        \"CONFLICT DETECTED - Select a resolution:\");\n            UICommand localBtn = new UICommand(\"Commit Local Text\");\n            UICommand ServerBtn = new UICommand(\"Leave Server Text\");\n            msgDialog.Commands.Add(localBtn);\n            msgDialog.Commands.Add(ServerBtn);\n            localBtn.Invoked = async (IUICommand command) =>\n            {\n                // To resolve the conflict, update the version of the\n                // item being committed. Otherwise, you will keep\n                // catching a MobileServicePreConditionFailedException.\n                localItem.Version = serverItem.Version;\n                // Updating recursively here just in case another\n                // change happened while the user was making a decision\n                await UpdateToDoItem(localItem);\n            };\n            ServerBtn.Invoked = async (IUICommand command) =>\n            {\n\t\t\t\tRefreshTodoItems();\n            };\n            await msgDialog.ShowAsync();\n        }\n\n\n\n## Test database write conflicts in the application\n\nIn this section you will build a Windows Store app package to install the app on a second machine or virtual machine. Then you will run the app on both machines generating a write conflict to test the code. Both instances of the app will attempt to update the same item's `text` property requiring the user to resolve the conflict.\n\n\n1. Create a Windows Store app package to install on second machine or virtual machine. To do this, click **Project**->**Store**->**Create App Packages** in Visual Studio.\n\n\t![][0]\n\n2. On the Create Your Packages screen, click **No** as this package will not be uploaded to the Windows Store. Then click **Next**.\n\n\t![][1]\n\n3. On the Select and Configure Packages screen, accept the defaults and click **Create**.\n\n\t![][10]\n\n4. On the Package Creation Completed screen, click the **Output location** link to open the package location.\n\n   \t![][11]\n\n5. Copy the package folder, \"todolist_1.0.0.0_AnyCPU_Debug_Test\", to the second machine. On that machine, open the package folder and right click on the **Add-AppDevPackage.ps1** PowerShell script and click **Run with PowerShell** as shown below. Follow the prompts to install the app.\n\n\t![][12]\n\n5. Run instance 1 of the app in Visual Studio by clicking **Debug**->**Start Debugging**. On the Start screen of the second machine, click the down arrow to see \"Apps by name\". Then click the **todolist** app to run instance 2 of the app.\n\n\tApp Instance 1\n\t![][2]\n\n\tApp Instance 2\n\t![][2]\n\n\n6. In instance 1 of the app, update the text of the last item to **Test Write 1**, then click another text box so that the `LostFocus` event handler updates the database. The screenshot below shows an example.\n\n\tApp Instance 1\n\t![][3]\n\n\tApp Instance 2\n\t![][2]\n\n7. At this point the corresponding item in instance 2 of the app has an old version of the item. In that instance of the app, enter **Test Write 2** for the `text` property. Then click another text box so the `LostFocus` event handler attempts to update the database with the old `_version` property.\n\n\tApp Instance 1\n\t![][4]\n\n\tApp Instance 2\n\t![][5]\n\n8. Since the `__version` value used with the update attempt didn't match the server `__version` value, the Mobile Services SDK throws a `MobileServicePreconditionFailedException` allowing the app to resolve this conflict. To resolve the conflict, you can click **Commit Local Text** to commit the values from instance 2. Alternatively, click **Leave Server Text** to discard the values in instance 2, leaving the values from instance 1 of the app committed.\n\n\tApp Instance 1\n\t![][4]\n\n\tApp Instance 2\n\t![][6]\n\n\n\n## Automatically handling conflict resolution in server scripts\n\nYou can detect and resolve write conflicts in server scripts. This is a good idea when you can use scripted logic instead of user interaction to resolve the conflict. In this section, you will add a server side script to the TodoItem table for the application. The logic this script will use to resolve conflicts is as follows:\n\n+  If the TodoItem's ` complete` field is set to true, then it is considered completed and `text` can no longer be changed.\n+  If the TodoItem's ` complete` field is still false, then attempts to update `text` will be comitted.\n\nThe following steps walk you through adding the server update script and testing it.\n\n1. Log into the [Azure classic portal], click **Mobile Services**, and then click your app.\n\n   \t![][7]\n\n2. Click the **Data** tab, then click the **TodoItem** table.\n\n   \t![][8]\n\n3. Click **Script**, then select the **Update** operation.\n\n   \t![][9]\n\n4. Replace the existing script with the following function, and then click **Save**.\n\n\t\tfunction update(item, user, request) {\n\t\t\trequest.execute({\n\t\t\t\tconflict: function (serverRecord) {\n\t\t\t\t\t// Only committing changes if the item is not completed.\n\t\t\t\t\tif (serverRecord.complete === false) {\n\t\t\t\t\t\t//write the updated item to the table\n\t\t\t\t\t\trequest.execute();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\trequest.respond(statusCodes.FORBIDDEN, 'The item is already completed.');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n5. Run the **todolist** app on both machines. Change the TodoItem `text` for the last item in instance 2. Then click another text box so the `LostFocus` event handler updates the database.\n\n\tApp Instance 1\n\t![][4]\n\n\tApp Instance 2\n\t![][5]\n\n6. In instance 1 of the app, enter a different value for the last text property. Then click another text box so the `LostFocus` event handler attempts to update the database with an incorrect `__version` property.\n\n\tApp Instance 1\n\t![][13]\n\n\tApp Instance 2\n\t![][14]\n\n7. Notice that no exception was encountered in the app since the server script resolved the conflict allowing the update since the item is not marked complete. To see that the update was truly successful, click **Refresh** in instance 2 to re-query the database.\n\n\tApp Instance 1\n\t![][15]\n\n\tApp Instance 2\n\t![][15]\n\n8. In instance 1, click the check box to complete the last Todo item.\n\n\tApp Instance 1\n\t![][16]\n\n\tApp Instance 2\n\t![][15]\n\n9. In instance 2, try to update the last TodoItem's text and trigger the `LostFocus` event. In response to the conflict, the script resolved it by refusing the update because the item was already completed.\n\n\tApp Instance 1\n\t![][17]\n\n\tApp Instance 2\n\t![][18]\n\n## Next steps\n\nThis tutorial demonstrated how to enable a Windows Store app to handle write conflicts when working with data in Mobile Services. Next, consider completing one of the following Windows Store tutorials:\n\n* [Add authentication to your app]\n  <br/>Learn how to authenticate users of your app.\n\n* [Add push notifications to your app]\n  <br/>Learn how to send a very basic push notification to your app with Mobile Services.\n\n\n\n<!-- Images. -->\n[0]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-create-app-package1.png\n[1]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-create-app-package2.png\n[2]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-app1.png\n[3]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-app1-write1.png\n[4]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-app1-write2.png\n[5]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-app2-write2.png\n[6]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-app2-write2-conflict.png\n[7]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/mobile-services-selection.png\n[8]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/mobile-portal-data-tables.png\n[9]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/mobile-insert-script-users.png\n[10]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-create-app-package3.png\n[11]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-create-app-package4.png\n[12]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-install-app-package.png\n[13]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-app1-write3.png\n[14]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-app2-write3.png\n[15]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-write3.png\n[16]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-checkbox.png\n[17]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-2-items.png\n[18]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/Mobile-oc-store-already-complete.png\n[19]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/mobile-manage-nuget-packages-VS.png\n[20]: ./media/mobile-services-windows-store-dotnet-handle-database-conflicts/mobile-manage-nuget-packages-dialog.png\n\n<!-- URLs. -->\n[Optimistic Concurrency Control]: http://go.microsoft.com/fwlink/?LinkId=330935\n[Get started with Mobile Services]: https://azure.microsoft.com/develop/mobile/tutorials/get-started/#create-new-service\n[Azure Account]: http://www.windowsazure.com/pricing/free-trial/\n[Validate and modify data with scripts]: https://azure.microsoft.com/develop/mobile/tutorials/validate-modify-and-augment-data-dotnet\n[Refine queries with paging]: https://azure.microsoft.com/develop/mobile/tutorials/add-paging-to-data-dotnet\n[Get started with Mobile Services]: https://azure.microsoft.com/develop/mobile/tutorials/get-started\n[Get started with data]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-data-dotnet\n[Add authentication to your app]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-users-dotnet\n[Add push notifications to your app]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-dotnet\n\n[Azure classic portal]: https://manage.windowsazure.com/\n[Windows Phone 8 SDK]: http://go.microsoft.com/fwlink/p/?LinkID=268374\n[Mobile Services SDK]: http://go.microsoft.com/fwlink/p/?LinkID=268375\n[Developer Code Samples site]:  http://go.microsoft.com/fwlink/p/?LinkId=271146\n[System Properties]: http://go.microsoft.com/fwlink/?LinkId=331143\n"
  },
  {
    "path": "docs/mobile-services-windows-store-dotnet-handling-conflicts-offline-data.md",
    "content": "<properties\n\tpageTitle=\"Handle conflicts with offline data in universal Windows apps | Microsoft Azure\"\n\tdescription=\"Learn how to use Azure Mobile Services handle conflicts when syncing offline data in your universal Windows application\"\n\tdocumentationCenter=\"windows\"\n\tauthors=\"wesmc7777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-windows-store\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n\n# Handling conflicts with offline data sync in Mobile Services\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR-LIST (Platform | Backend)]\n- [(iOS | Any)](mobile-services-ios-handling-conflicts-offline-data.md)\n- [(Windows Runtime 8.1 universal C# | Any)](mobile-services-windows-store-dotnet-handling-conflicts-offline-data.md)\n\n\n## Overview\n\nThis topic shows you how to synchronize data and handle conflicts when using the offline capabilities of Azure Mobile Services.\n\nIf you prefer to watch a video, the clip below follows the same steps as this tutorial.\n\n> [AZURE.VIDEO build-offline-apps-with-mobile-services]\n\nIn this tutorial, you download a universal Windows C# solution for an app that supports handling offline synchronization conflicts. You will integrate a mobile service with the app, and then run the Windows Store 8.1 and Windows Phone 8.1 clients to generate a sync conflict and resolve it.\n\nThis tutorial builds on the steps and the sample app from the previous tutorial [Get started with offline data]. Before you begin this tutorial, you should first complete [Get started with offline data].\n\n\n## Prerequisites\n\nThis tutorial requires Visual Studio 2013 running on Windows 8.1.\n\n\n## Download the sample project\n\n![][0]\n\nThis tutorial is a walkthrough of how the [Todo Offline Mobile Services sample] handles sync conflicts between the local offline store and the Mobile Service database in Azure.\n\n1. Download the zip file for the [Mobile Services Samples GitHub Repository] and extract it to a working directory.\n\n2. If you haven't already installed SQLite for Windows 8.1 and Windows Phone 8.1 as mentioned in the [Get started with offline data] tutorial, install both runtimes.\n\n3. In Visual Studio 2013, open the *mobile-services-samples\\TodoOffline\\WindowsUniversal\\TodoOffline-Universal.sln* solution file. Press the **F5** key to rebuild and run the project. Verify the NuGet packages are restored and the references are correctly set.\n\n    >[AZURE.NOTE] You may need to delete any old references to the SQLite runtime and replace them with the updated reference as mentioned in the [Get started with offline data] tutorial.\n\n4. In the app, type some text in **Insert a TodoItem**, then click **Save** to add some todo items to the local store. Then close the app.\n\nNote that the app is not yet connected to any mobile service, so the buttons **Push** and **Pull** will throw exceptions.\n\n\n\n\n## Test the app against your  mobile service\n\nNow it's time to test the app against Mobile Services.\n\n1. In the [Azure classic portal], find your mobile service's application key by clicking **Manage Keys** on the command bar of the **Dashboard** tab. Copy the **Application Key**.\n\n2. In Solution Explorer for Visual Studio, open the App.xaml.cs file in the client sample project. Change the initialization of the **MobileServiceClient** to use your mobile service URL and application key:\n\n         public static MobileServiceClient MobileService = new MobileServiceClient(\n            \"https://your-mobile-service.azure-mobile.net/\",\n            \"Your AppKey\"\n        );\n\n3. In Visual Studio, press the **F5** key to build and run the app again.\n\n    ![][0]\n\n\n## Update the data in the backend to create a conflict\n\nIn a real world scenario, a sync conflict would occur when one app pushes updates to a record in the database, and then another app tries to push an update to the same record using an outdated version field in that record. If you recall from the [Get started with offline data], the version system property is required to support the offline syncing features. This version information is examined with each database update. If an instance of the app tries to update a record using an outdated version, a conflict will occur and be caught as a `MobileServicePreconditionFailedException` in the app. If the app doesn't catch the `MobileServicePreconditionFailedException` then a `MobileServicePushFailedException` will end up being thrown describing how many sync errors were encountered.\n\n>[AZURE.NOTE] To support synchronization of deleted records with offline data sync, you should enable [Soft Delete](mobile-services-using-soft-delete.md). Otherwise, you have to manually remove records in the local store, or call `IMobileServiceSyncTable::PurgeAsync()` to purge the local store.\n\n\nThe following steps show the Windows Phone 8.1 and Windows Store 8.1 clients running at the same time to cause and resolve a conflict using the sample.\n\n1. In Visual Studio, right click the Windows Phone 8.1 project and click **Set as Startup Project**. Then press **Ctrl+F5** keys to run the Windows Phone 8.1 client without debugging. Once you have the Windows Phone 8.1 client up and running in the emulator, click the **Pull** button to sync the local store with the current state of the database.\n\n    ![][3]\n\n\n2. In Visual Studio, right click the Windows 8.1 runtime project and click **Set as Startup Project** to set it back to the start up project. Then press **F5** to run it. Once you have the Windows Store 8.1 client up and running, click the **Pull** button to sync the local store with the current state of the database.\n\n    ![][4]\n\n3. At this point point both clients are synchronized with the database. The code for both clients are also using incremental sync, so that they will only sync incomplete todo items. Completed todo items will be ignored. Choose one of the items and edit the text of the same item in both clients to a different value. Click the **Push** button to sync both changes with the database on the server.\n\n    ![][5]\n\n    ![][6]\n\n\n4. The client whose push was executing last encounters the conflict and allows the user to decide which value to commit to the database. The exception provides the correct version value which is used for resolving the conflict.\n\n    ![][7]\n\n\n\n## Review of the code for handling sync conflicts\n\nIn order to use the offline features for Mobile Services, you must include the version column in both your local database and your data transfer object. This is accomplished by updating the `TodoItem` class the following member:\n\n        [Version]\n        public string Version { get; set; }\n\nThe `__version` column is included in the local database in the  `OnNavigatedTo()` method when the `TodoItem` class is used to define the local store.\n\nTo handle offline sync conflicts in your code, you create a class that implements `IMobileServiceSyncHandler`. Pass an object of this type in the call to `MobileServiceClient.SyncContext.InitializeAsync()`. This also occurs in the  `OnNavigatedTo()` method of the sample.\n\n     await App.MobileService.SyncContext.InitializeAsync(store, new SyncHandler(App.MobileService));\n\nThe class `SyncHandler` in **SyncHandler.cs** implements `IMobileServiceSyncHandler`. The method `ExecuteTableOperationAsync` is called when each push operation is sent to the server. If an exception of type `MobileServicePreconditionFailedException` is thrown, this means that there is a conflict between the local and remote versions of an item.\n\nTo resolve conflicts in favor of the local item, you should simply retry the operation. Once a conflict has occurred, the local item version will be updated to match the server version, so executing the operation again will overwrite the server changes with the local changes:\n\n    await operation.ExecuteAsync();\n\nTo resolve conflicts in favor of the server item, simply return from the `ExecuteTableOperationAsync`. The local version of the object will be discarded and replaced with the value from the server.\n\nTo stop the push operation (but retain the queued changes), use the method `AbortPush()`:\n\n    operation.AbortPush();\n\nThis will stop the current push operation but will keep all pending changes, including the current operation if `AbortPush` is called from `ExecuteTableOperationAsync`. The next time that `PushAsync()` is called, these changes will be sent to the server.\n\nWhen a push is canceled, `PushAsync` will throw a `MobileServicePushFailedException`, and the exception property `PushResult.Status` will have the value `MobileServicePushStatus.CancelledByOperation`.\n\n\n\n<!-- Images -->\n[0]: ./media/mobile-services-windows-store-dotnet-handling-conflicts-offline-data/mobile-services-handling-conflicts-app-run1.png\n[1]: ./media/mobile-services-windows-store-dotnet-handling-conflicts-offline-data/javascript-backend-database.png\n[2]: ./media/mobile-services-windows-store-dotnet-handling-conflicts-offline-data/dotnet-backend-database.png\n[3]: ./media/mobile-services-windows-store-dotnet-handling-conflicts-offline-data/wp81-view.png\n[4]: ./media/mobile-services-windows-store-dotnet-handling-conflicts-offline-data/win81-view.png\n[5]: ./media/mobile-services-windows-store-dotnet-handling-conflicts-offline-data/wp81-edit-text.png\n[6]: ./media/mobile-services-windows-store-dotnet-handling-conflicts-offline-data/win81-edit-text.png\n[7]: ./media/mobile-services-windows-store-dotnet-handling-conflicts-offline-data/conflict.png\n\n\n\n\n<!-- URLs -->\n[Handling conflicts code sample]: http://go.microsoft.com/fwlink/?LinkId=394787\n[Get started with Mobile Services]: mobile-services-windows-store-get-started.md\n[Get started with offline data]: mobile-services-windows-store-dotnet-get-started-offline-data.md\n[SQLite for Windows 8.1]: http://go.microsoft.com/fwlink/?LinkId=394776\n[Azure classic portal]: https://manage.windowsazure.com/\n[Handling Database Conflicts]: mobile-services-windows-store-dotnet-handle-database-conflicts.md#test-app\n[Mobile Services Samples GitHub Repository]: http://go.microsoft.com/fwlink/?LinkId=512865\n[Todo Offline Mobile Services sample]: http://go.microsoft.com/fwlink/?LinkId=512866\n"
  },
  {
    "path": "docs/mobile-services-xamarin-android-get-started-offline-data.md",
    "content": "<properties\n\tpageTitle=\"Using offline data in Mobile Services (Xamarin Android) | Microsoft Azure\"\n\tdescription=\"Learn how to use Azure Mobile Services to cache and sync offline data in your Xamarin Android application\"\n\tdocumentationCenter=\"xamarin\"\n\tauthors=\"lindydonna\"\n\teditor=\"wesmc\"\n\tmanager=\"dwrede\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-xamarin-android\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"donnam\"/>\n\n# Using offline data sync in Mobile Services\n\n> [AZURE.SELECTOR]\n- [Android)](mobile-services-android-get-started-offline-data.md)\n- [iOS](mobile-services-ios-get-started-offline-data.md)\n- [Windows](mobile-services-windows-store-dotnet-get-started-offline-data.md)\n- [Xamarin.Android](mobile-services-xamarin-android-get-started-offline-data.md)\n- [Xamarin.iOS](mobile-services-xamarin-ios-get-started-offline-data.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic walks through the offline sync capabilities of Azure Mobile Services in the todo list quickstart app. Offline sync allows you to easily create apps that are usable even when the end user has no network access.\n\nOffline sync has several potential uses:\n\n* Improve app responsiveness by caching server data locally on the device\n* Make apps resilient against intermittent network connectivity\n* Allow end-users to create and modify data even when there is no network access, supporting scenarios with little or no connectivity\n* Sync data across multiple devices and detect conflicts when the same record is modified by two devices\n\n>[AZURE.NOTE] To complete this tutorial, you need a Azure account. If you don't have an account, you can sign up for an Azure trial and get up to 10 free mobile services that you can keep using even after your trial ends. For details, see <a href=\"http://www.windowsazure.com/pricing/free-trial/?WT.mc_id=AE564AB28\" target=\"_blank\">Azure Free Trial</a>.\n>\n> If this is your first experience with Mobile Services, you should first complete [Get started with Mobile Services].\n\nThis tutorial walks you through these basic steps:\n\n1. [Review the Mobile Services sync code]\n2. [Update the sync behavior of the app]\n3. [Update the app to reconnect your mobile service]\n\nThis tutorial requires the following:\n\n* Visual Studio with Xamarin on Windows or Xamarin Studio on Mac OS X. Complete installation instructions are on [Setup and Install for Visual Studio and Xamarin](https://msdn.microsoft.com/library/mt613162.aspx).\n* Completion of the [Get started with Mobile Services] tutorial.\n\n## <a name=\"review-offline\"></a>Review the Mobile Services sync code\n\nAzure Mobile Services offline sync allows end users to interact with a local database when the network is not accessible. To use these features in your app, you initialize `MobileServiceClient.SyncContext` to a local store. Then reference your table through the `IMobileServiceSyncTable` interface.\nThis section walks through the offline sync related code in `ToDoActivity.cs`.\n\n1. In Visual Studio or Xamarin Studio, open the project that you completed in the [Get started with Mobile Services] tutorial. Open the file `ToDoActivity.cs`.\n\n2. Notice the type of the member `toDoTable` is `IMobileServiceSyncTable`. Offline sync uses this sync table interface instead of `IMobileServiceTable`. When a sync table is used, all operations go to the local store and are only synchronized with the remote service with explicit push and pull operations.\n\n    To get a reference to a sync table, the method `GetSyncTable()` is used. To remove the offline sync functionality, you would instead use `GetTable()`.\n\n3. Before any table operations can be performed, the local store must be initialized. This is done in the `InitLocalStoreAsync` method:\n\n        private async Task InitLocalStoreAsync()\n        {\n            // new code to initialize the SQLite store\n            string path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), localDbFilename);\n\n            if (!File.Exists(path))\n            {\n                File.Create(path).Dispose();\n            }\n\n            var store = new MobileServiceSQLiteStore(path);\n            store.DefineTable<ToDoItem>();\n\n            // Uses the default conflict handler, which fails on conflict\n            await client.SyncContext.InitializeAsync(store);\n        }\n\n    This creates a local store using the class `MobileServiceSQLiteStore`, which is provided in the Mobile Services SDK. You can also a provide a different local store implementation by implementing `IMobileServiceLocalStore`.\n\n    The `DefineTable` method creates a table in the local store that matches the fields in the provided type, `ToDoItem` in this case. The type doesn't have to include all of the columns that are in the remote database--it is possible to store just a subset of columns.\n\n    This overload of `InitializeAsync` uses the default conflict handler, which fails whenever there is a conflict. To provide a custom conflict handler, see the tutorial [Handling conflicts with offline support for Mobile Services].\n\n4. The method `SyncAsync` triggers the actual sync operation:\n\n        private async Task SyncAsync()\n        {\n            await client.SyncContext.PushAsync();\n            await toDoTable.PullAsync(\"allTodoItems\", toDoTable.CreateQuery()); // query ID is used for incremental sync\n        }\n\n    First, there is a call to `IMobileServiceSyncContext.PushAsync()`. This method is a member of `IMobileServicesSyncContext` instead of the sync table because it will push changes across all tables. Only records that have been modified in some way locally (through CUD operations) will be sent to the server.\n\n    Next, the method calls `IMobileServiceSyncTable.PullAsync()` to pull data from a table on the server to the app. Note that if there are any changes pending in the sync context, a pull always issues a push first. This is to ensure all tables in the local store along with relationships are consistent. In this case, we have called push explicitly.\n\n    In this example, we retrieve all records in the remote `TodoItem` table, but it is also possible to filter records by passing a query. The first parameter to `PullAsync()` is a query ID that is used for incremental sync, which uses the `UpdatedAt` timestamp to get only those records modified since the last sync. The query ID should be a descriptive string that is unique for each logical query in your app. To opt-out of incremental sync, pass `null` as the query ID. This will retrieve all records on each pull operation, which is potentially inefficient.\n\n    >[AZURE.NOTE] To remove records from the device local store when they have been deleted in your mobile service database, you should enable [Soft Delete]. Otherwise, your app should periodically call `IMobileServiceSyncTable.PurgeAsync()` to purge the local store.\n\n    Note that the `MobileServicePushFailedException` can occur for both a push and a pull operation. The next tutorial, [Handling conflicts with offline support for Mobile Services], shows how to handle these sync related exceptions.\n\n5. In the class `ToDoActivity`, the method `SyncAsync()` is called after the operations that modify data, `AddItem()` and `CheckItem()`. It is also called from `OnRefreshItemsSelected()`, so that users get the latest data whenever they push the **Refresh** button. The app also performs a sync on launch, since `ToDoActivity.OnCreate()` calls `OnRefreshItemsSelected()`.\n\n    Because `SyncAsync()` is called whenever data is modified, this app assumes that the user is online whenever they are editing data. In the next section, we will update the app so that users can edit even when they are offline.\n\n## <a name=\"update-sync\"></a>Update the sync behavior of the app\n\nIn this section, you will modify the app so that it does not sync on app launch or on the insert and update operations, but only when the refresh button is pushed. Then, you will break the app connection with the mobile service to simulate an offline scenario. When you add data items, they will be held in the local store, but not immediately synced to the mobile service.\n\n1. In the class `ToDoActivity`, edit the methods `AddItem()` and `CheckItem()` to comment out the calls to `SyncAsync()`.\n\n2. In `ToDoActivity`, comment out the definitions of the members `applicationURL` and `applicationKey`. Add the following lines, which reference an invalid mobile service URL:\n\n        const string applicationURL = @\"https://your-mobile-service.azure-mobile.xxx/\";\n        const string applicationKey = @\"AppKey\";\n\n3. In `ToDoActivity.OnCreate()`, remove the call to `OnRefreshItemsSelected()` and replace with:\n\n        // Load the items from the Mobile Service\n        // OnRefreshItemsSelected (); // don't sync on app launch\n        await RefreshItemsFromTableAsync(); // load UI only\n\n4. Build and run the app. Add some new todo items. These new items exist only in the local store until they can be pushed to the mobile service. The client app behaves as if is connected to the mobile service supporting all create, read, update, delete (CRUD) operations.\n\n5. Close the app and restart it to verify that the new items you created are persisted to the local store.\n\n## <a name=\"update-online-app\"></a>Update the app to reconnect your mobile service\n\nIn this section you will reconnect the app to the mobile service. This simulates the app moving from an offline state to an online state with the mobile service. When you push the **Refresh** button, data will be synced to your mobile service.\n\n1. Open `ToDoActivity.cs`. Remove the invalid mobile service URL and add back the correct URL and app key.\n\n2. Rebuild and run the app. Notice that the data looks the same as the offline scenario even though the app is now connected to the mobile service. This is because this app always uses the `IMobileServiceSyncTable` that is pointed to the local store.\n\n3. Log into the [Azure classic portal] and look at the database for your mobile service. If your service uses the JavaScript backend, you can browse the data from the **Data** tab of the mobile service.\n\n    If you are using the .NET backend for your mobile service, in Visual Studio go to **Server Explorer** > **Azure** > **SQL Databases**. Right click your database and select **Open in SQL Server Object Explorer**.\n\n    Notice the data has *not* been synchronized between the database and the local store.\n\n4. In the app, push the refresh button. This calls `OnRefreshItemsSelected()`, which in turn calls `SyncAsync()`. This will perform the push and pull operations, first sending the local store items to the mobile service, then retrieving new data from the service.\n\n5. Check the database for your mobile service to confirm that changes have been synchronized.\n\n## Summary\n\nIn order to support the offline features of mobile services, we used the `IMobileServiceSyncTable` interface and initialized `MobileServiceClient.SyncContext` with a local store. In this case the local store was a SQLite database.\n\nThe normal CRUD operations for mobile services work as if the app is still connected but, all the operations occur against the local store.\n\nWhen we wanted to synchronize the local store with the server, we used the `IMobileServiceSyncTable.PullAsync` and `MobileServiceClient.SyncContext.PushAsync` methods.\n\n*  To push changes to the server, we called `IMobileServiceSyncContext.PushAsync()`. This method is a member of `IMobileServicesSyncContext` instead of the sync table because it will push changes across all tables.\n\n    Only records that have been modified in some way locally (through CUD operations) will be sent to the server.\n\n* To pull data from a table on the server to the app, we called `IMobileServiceSyncTable.PullAsync`.\n\n    A pull always issues a push first. This is to ensure all tables in the local store along with relationships remain consistent.\n\n    There are also overloads of `PullAsync()` that allow a query to be specified in order to filter the data that is stored on the client. If a query is not passed, `PullAsync()` will pull all rows in the corresponding table (or query). You can pass the query to filter only the changes your app needs to sync with.\n\n* To enable incremental sync, pass a query ID to `PullAsync()`. The query ID is used to store the last updated timestamp from the results of the last pull operation. The query ID should be a descriptive string that is unique for each logical query in your app. If the query has a parameter, then the same parameter value has to be part of the query ID.\n\n    For instance, if you are filtering on userid, it needs to be part of the query ID:\n\n        await PullAsync(\"todoItems\" + userid, syncTable.Where(u => u.UserId = userid));\n\n    If you want to opt out of incremental sync, pass `null` as the query ID. In this case, all records will be retrieved on every call to `PullAsync`, which is potentially inefficient.\n\n* To remove records from the device local store when they have been deleted in your mobile service database, you should enable [Soft Delete]. Otherwise, your app should periodically call `IMobileServiceSyncTable.PurgeAsync()` to purge the local store.\n\n\n## Next steps\n\n* [Handling conflicts with offline support for Mobile Services]\n\n* [How to use the Xamarin Component client for Azure Mobile Services]\n\n<!-- Anchors. -->\n[Review the Mobile Services sync code]: #review-offline\n[Update the sync behavior of the app]: #update-sync\n[Update the app to reconnect your mobile service]: #update-online-app\n\n<!-- Images -->\n\n\n<!-- URLs. -->\n[Handling conflicts with offline support for Mobile Services]: mobile-services-windows-store-dotnet-handling-conflicts-offline-data.md\n[Get started with Mobile Services]: mobile-services-android-get-started.md\n[How to use the Xamarin Component client for Azure Mobile Services]: partner-xamarin-mobile-services-how-to-use-client-library.md\n[Soft Delete]: mobile-services-using-soft-delete.md\n\n[Mobile Services SDK Nuget]: http://www.nuget.org/packages/WindowsAzure.MobileServices/1.3.0\n[SQLite store nuget]: http://www.nuget.org/packages/WindowsAzure.MobileServices.SQLiteStore/1.0.0\n[Azure classic portal]: https://manage.windowsazure.com\n"
  },
  {
    "path": "docs/mobile-services-xamarin-ios-get-started-offline-data.md",
    "content": "<properties\n\tpageTitle=\"Using offline data in Mobile Services (Xamarin iOS) | Microsoft Azure\"\n\tdescription=\"Learn how to use Azure Mobile Services to cache and sync offline data in your Xamarin iOS application\"\n\tdocumentationCenter=\"xamarin\"\n\tauthors=\"lindydonna\"\n\teditor=\"wesmc\"\n\tmanager=\"dwrede\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"donnam\"/>\n\n# Using offline data sync in Mobile Services\n\n> [AZURE.SELECTOR]\n- [Android)](mobile-services-android-get-started-offline-data.md)\n- [iOS](mobile-services-ios-get-started-offline-data.md)\n- [Windows](mobile-services-windows-store-dotnet-get-started-offline-data.md)\n- [Xamarin.Android](mobile-services-xamarin-android-get-started-offline-data.md)\n- [Xamarin.iOS](mobile-services-xamarin-ios-get-started-offline-data.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic walks through the offline sync capabilities of Azure Mobile Services in the todo list quickstart app. Offline sync allows you to easily create apps that are usable even when the end user has no network access.\n\nOffline sync has several potential uses:\n\n* Improve app responsiveness by caching server data locally on the device\n* Make apps resilient against intermittent network connectivity\n* Allow end-users to create and modify data even when there is no network access, supporting scenarios with little or no connectivity\n* Sync data across multiple devices and detect conflicts when the same record is modified by two devices\n\n>[AZURE.NOTE] To complete this tutorial, you need a Azure account. If you don't have an account, you can sign up for an Azure trial and get up to 10 free mobile services that you can keep using even after your trial ends. For details, see <a href=\"http://www.windowsazure.com/pricing/free-trial/?WT.mc_id=AE564AB28\" target=\"_blank\">Azure Free Trial</a>.\n>\n> If this is your first experience with Mobile Services, you should first complete [Get started with Mobile Services].\n\nThis tutorial walks you through these basic steps:\n\n1. [Review the Mobile Services sync code]\n2. [Update the sync behavior of the app]\n3. [Update the app to reconnect your mobile service]\n\nThis tutorial requires the following:\n\n* Visual Studio with Xamarin. See [Setup and install for Visual Studio and Xamarin](https://msdn.microsoft.com/library/mt613162.aspx) for instructions.\n* A Mac with Xcode v7.0 or later and Xamarin Studio Community installed. See [Setup and install for Visual Studio and Xamarin](https://msdn.microsoft.com/library/mt613162.aspx) and [Setup, install, and verifications for Mac users](https://msdn.microsoft.com/library/mt488770.aspx) (MSDN).\n* Completion of the [Get started with Mobile Services] tutorial.\n\n\n## <a name=\"review-offline\"></a>Review the Mobile Services sync code\n\nAzure Mobile Services offline sync allows end users to interact with a local database when the network is not accessible. To use these features in your app, you initialize `MobileServiceClient.SyncContext` to a local store. Then reference your table through the `IMobileServiceSyncTable` interface.\nThis section walks through the offline sync related code in `QSTodoService.cs`.\n\n1. In Visual Studio, open the project that you completed in the [Get started with Mobile Services] tutorial. Open the file `QSTodoService.cs`.\n\n2. Notice the type of the member `todoTable` is `IMobileServiceSyncTable`. Offline sync uses this sync table interface instead of `IMobileServiceTable`. When a sync table is used, all operations go to the local store and are only synchronized with the remote service with explicit push and pull operations.\n\n    To get a reference to a sync table, the method `GetSyncTable()` is used. To remove the offline sync functionality, you would instead use `GetTable()`.\n\n3. Before any table operations can be performed, the local store must be initialized. This is done in the `InitializeStoreAsync` method:\n\n        public async Task InitializeStoreAsync()\n        {\n            var store = new MobileServiceSQLiteStore(localDbPath);\n            store.DefineTable<ToDoItem>();\n\n            // Uses the default conflict handler, which fails on conflict\n            await client.SyncContext.InitializeAsync(store);\n        }\n\n    This creates a local store using the class `MobileServiceSQLiteStore`, which is provided in the Mobile Services SDK. You can also provide a different local store implementation by implementing `IMobileServiceLocalStore`.\n\n    The `DefineTable` method creates a table in the local store that matches the fields in the provided type, `ToDoItem` in this case. The type doesn't have to include all of the columns that are in the remote database--it is possible to store just a subset of columns.\n\n    This overload of `InitializeAsync` uses the default conflict handler, which fails whenever there is a conflict. To provide a custom conflict handler, see the tutorial [Handling conflicts with offline support for Mobile Services].\n\n4. The method `SyncAsync` triggers the actual sync operation:\n\n        public async Task SyncAsync()\n        {\n            try\n            {\n                await client.SyncContext.PushAsync();\n                await todoTable.PullAsync(\"allTodoItems\", todoTable.CreateQuery()); // query ID is used for incremental sync\n            }\n\n            catch (MobileServiceInvalidOperationException e)\n            {\n                Console.Error.WriteLine(@\"Sync Failed: {0}\", e.Message);\n            }\n        }\n\n    First, there is a call to `IMobileServiceSyncContext.PushAsync()`. This method is a member of `IMobileServicesSyncContext` instead of the sync table because it will push changes across all tables. Only records that have been modified in some way locally (through CUD operations) will be sent to the server.\n\n    Next, the method calls `IMobileServiceSyncTable.PullAsync()` to pull data from a table on the server to the app. Note that if there are any changes pending in the sync context, a pull always issues a push first. This is to ensure all tables in the local store along with relationships are consistent. In this case, we have called push explicitly.\n\n    In this example, we retrieve all records in the remote `TodoItem` table, but it is also possible to filter records by passing a query. The first parameter to `PullAsync()` is a query ID that is used for incremental sync, which uses the `UpdatedAt` timestamp to get only those records modified since the last sync. The query ID should be a descriptive string that is unique for each logical query in your app. To opt-out of incremental sync, pass `null` as the query ID. This will retrieve all records on each pull operation, which is potentially inefficient.\n\n    >[AZURE.NOTE] To remove records from the device local store when they have been deleted in your mobile service database, you should enable [Soft Delete]. Otherwise, your app should periodically call `IMobileServiceSyncTable.PurgeAsync()` to purge the local store.\n\n    Note that the `MobileServicePushFailedException` can occur for both a push and a pull operation. The next tutorial, [Handling conflicts with offline support for Mobile Services], shows how to handle these sync related exceptions.\n\n5. In the class `QSTodoService`, the method `SyncAsync()` is called after the operations that modify data, `InsertTodoItemAsync()` and `CompleteItemAsync`. It is also called from `RefreshDataAsync()`, so that the user gets the latest data whenever they perform the refresh gesture. The app also performs a sync on launch, since `QSTodoListViewController.ViewDidLoad()` calls `RefreshDataAsync()`.\n\n    Because `SyncAsync()` is called whenever data is modified, this app assumes that the user is online whenever they are editing data. In the next section, we will update the app so that users can edit even when they are offline.\n\n## <a name=\"update-sync\"></a>Update the sync behavior of the app\n\nIn this section, you will modify the app so that it does not sync on app launch or on the insert and update operations, but only when the refresh gesture is performed. Then, you will break the app connection with the mobile service to simulate an offline scenario. When you add data items, they will be held in the local store, but not immediately synced to the mobile service.\n\n1. Open `QSTodoService.cs`. Comment out the calls to `SyncAsync()` in the following methods:\n\n    - `InsertTodoItemAsync`\n    - `CompleteItemAsync`\n    - `RefreshDataAsync`\n\n    Now, `RefreshAsync()` will only load data from the local store, but will not connect to the app backend.\n\n2. In `QSTodoService.cs`, comment out the definitions of the members `applicationURL` and `applicationKey`. Add the following lines, which reference an invalid mobile service URL:\n\n        const string applicationURL = @\"https://your-mobile-service.azure-mobile.xxx/\";\n        const string applicationKey = @\"AppKey\";\n\n3. To ensure that data is synchronized when the refresh gesture is performed, edit the method `QSTodoListViewController.RefreshAsync()`. Add a call to `SyncAsync()` before the call to `RefreshDataAsync()`:\n\n        private async Task RefreshAsync ()\n        {\n            RefreshControl.BeginRefreshing ();\n\n            await todoService.SyncAsync();\n            await todoService.RefreshDataAsync (); // add this line\n\n            RefreshControl.EndRefreshing ();\n\n            TableView.ReloadData ();\n        }\n\n4. Build and run the app. Add some new todo items. These new items exist only in the local store until they can be pushed to the mobile service. The client app behaves as if is connected to the mobile service supporting all create, read, update, delete (CRUD) operations.\n\n5. Close the app and restart it to verify that the new items you created are persisted to the local store.\n\n## <a name=\"update-online-app\"></a>Update the app to reconnect your mobile service\n\nIn this section you will reconnect the app to the mobile service. This simulates the app moving from an offline state to an online state with the mobile service. When you perform the refresh gesture, data will be synced to your mobile service.\n\n1. Open `QSTodoService.cs`. Remove the invalid mobile service URL and add back the correct URL and app key.\n\n2. Rebuild and run the app. Notice that the data looks the same as the offline scenario even though the app is now connected to the mobile service. This is because this app always uses the `IMobileServiceSyncTable` that is pointed to the local store.\n\n3. Log into the [Azure classic portal] and look at the database for your mobile service. If your service uses the JavaScript backend, you can browse the data from the **Data** tab of the mobile service.\n\n    If you are using the .NET backend for your mobile service, in Visual Studio go to **Server Explorer** > **Azure** > **SQL Databases**. Right click your database and select **Open in SQL Server Object Explorer**.\n\n    Notice the data has *not* been synchronized between the database and the local store.\n\n4. In the app, perform the refresh gesture by pulling down the list of items. This causes the app to call `RefreshDataAsync()`, which in turn calls `SyncAsync()`. This will perform the push and pull operations, first sending the local store items to the mobile service, then retrieving new data from the service.\n\n5. Check the database for your mobile service to confirm that changes have been synchronized.\n\n## Summary\n\nIn order to support the offline features of mobile services, we used the `IMobileServiceSyncTable` interface and initialized `MobileServiceClient.SyncContext` with a local store. In this case the local store was a SQLite database.\n\nThe normal CRUD operations for mobile services work as if the app is still connected but, all the operations occur against the local store.\n\nWhen we wanted to synchronize the local store with the server, we used the `IMobileServiceSyncTable.PullAsync` and `MobileServiceClient.SyncContext.PushAsync` methods.\n\n*  To push changes to the server, we called `IMobileServiceSyncContext.PushAsync()`. This method is a member of `IMobileServicesSyncContext` instead of the sync table because it will push changes across all tables.\n\n    Only records that have been modified in some way locally (through CUD operations) will be sent to the server.\n\n* To pull data from a table on the server to the app, we called `IMobileServiceSyncTable.PullAsync`.\n\n    A pull always issues a push first. This is to ensure all tables in the local store along with relationships remain consistent.\n\n    There are also overloads of `PullAsync()` that allow a query to be specified in order to filter the data that is stored on the client. If a query is not passed, `PullAsync()` will pull all rows in the corresponding table (or query). You can pass the query to filter only the changes your app needs to sync with.\n\n* To enable incremental sync, pass a query ID to `PullAsync()`. The query ID is used to store the last updated timestamp from the results of the last pull operation. The query ID should be a descriptive string that is unique for each logical query in your app. If the query has a parameter, then the same parameter value has to be part of the query ID.\n\n    For instance, if you are filtering on userid, it needs to be part of the query ID:\n\n        await PullAsync(\"todoItems\" + userid, syncTable.Where(u => u.UserId = userid));\n\n    If you want to opt out of incremental sync, pass `null` as the query ID. In this case, all records will be retrieved on every call to `PullAsync`, which is potentially inefficient.\n\n* To remove records from the device local store when they have been deleted in your mobile service database, you should enable [Soft Delete]. Otherwise, your app should periodically call `IMobileServiceSyncTable.PurgeAsync()` to purge the local store.\n\n\n## Next steps\n\n* [How to use the Xamarin Component client for Azure Mobile Services]\n\n<!-- Anchors. -->\n[Review the Mobile Services sync code]: #review-offline\n[Update the sync behavior of the app]: #update-sync\n[Update the app to reconnect your mobile service]: #update-online-app\n\n<!-- Images -->\n\n<!-- URLs. -->\n[Handling conflicts with offline support for Mobile Services]: mobile-services-xamarin-ios-handling-conflicts-offline-data.md\n[Get started with Mobile Services]: mobile-services-ios-get-started.md\n[How to use the Xamarin Component client for Azure Mobile Services]: partner-xamarin-mobile-services-how-to-use-client-library.md\n[Soft Delete]: mobile-services-using-soft-delete.md\n[Azure classic portal]: https://manage.windowsazure.com\n"
  },
  {
    "path": "docs/partner-sencha-mobile-services-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Azure Mobile Services and Sencha\"\n\tdescription=\"Follow this tutorial to get started developing with Mobile Services and the Sencha HTML5 mobile app framework.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-sencha\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"get-started-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# <a name=\"getting-started\"> </a>Get started with Mobile Services and Sencha Touch\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n&nbsp;\n\n>[AZURE.TIP] This topic shows you how to get started with Mobile Services as quickly as possible. It is designed for customers new to this Azure feature. If you are already familiar with Mobile Services or are looking for more in-depth information, please select a topic from the left-navigation or see the relevant links in [Next steps](#next-steps).\n\n\n## Overview\n\nThis tutorial shows you how to leverage Azure Mobile Services in your Sencha Touch application. You will create a simple *To Do List* app using Sencha Touch that utilizes a mobile service you define through the Azure classic portal. This tutorial is intended for intermediate to advanced web application developers who have a good understanding of JavaScript and who are familiar with the Sencha Touch framework.\n\nIf you prefer to watch a video, this clip follows the same steps as this tutorial. In the video, Arthur Kay  explains how to build a Sencha Touch application using an Azure Mobile Services backend.\n\n> [AZURE.VIDEO getting-started-with-sencha-touch]\n\n\nA screenshot from the completed app is shown below:\n\n![][0]\n\n## Requirements\n\n- Download and install [Sencha Touch](http://wwww.sencha.com/products/touch/download\" target=\"_blank\").\n\n- Download and install [Sencha Cmd Tool](http://www.sencha.com/products/sencha-cmd/download\" target=\"_blank\").\n\n- Java Runtime Environment (JRE), or Java Development Kit (if you are creating Android apps)\n- Ruby and SASS gem.\n\n## <a name=\"create-new-service\"> </a>Create a new mobile service\n\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** dialog, select **Create a free 20 MB SQL Database**, select **JavaScript** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t>[AZURE.NOTE]As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n\n## Create a TodoItems Table\n\nOnce you have created your mobile service, you can follow an easy quickstart in the Azure classic portal to create\na new database table for use in your mobile service.\n\n1. In the [Azure classic portal], click **Mobile Services**, and then click the mobile service that you just created.\n\n2. In the quickstart tab, click **HTML** under **Choose platform** and expand **Create a new HTML app**.\n\n    ![Mobile quickstart html](./media/partner-sencha-mobile-services-get-started/mobile-portal-quickstart-html.png)\n\n    This displays the three easy steps to create and host an HTML app connected to your mobile service.\n\n    ![Mobile quickstart html](./media/partner-sencha-mobile-services-get-started/mobile-quickstart-steps-html.png)\n\n3. Click **Create TodoItems table** to create a table to store app data.\n\n\t> [AZURE.NOTE] Do NOT download the HTML app from the Azure classic portal. Instead, we will manually create a Sencha Touch application in the section below.\n\n\n1. Take note of the **appKey** and **appUrl** in the Azure classic portal. You will use them in other sections of this tutorial.\n\n    ![app key](./media/partner-sencha-mobile-services-get-started/mobile-app-key-portal.png)\n\n1. In the **Configure** tab, verify that `localhost` is already listed in the **Allow requests from host names** list under **Cross-Origin Resource Sharing (CORS)**. If it's not, type `localhost` in the **Host name** field and then click **Save**.\n\n    ![Setup CORS for localhost](./media/partner-sencha-mobile-services-get-started/mobile-services-set-cors-localhost.png)\n\n## Generate your Touch application\n\nGenerating a Sencha Touch template application is a simple task using Sencha Cmd and is a great way to get an application up and running very quickly.\n\nFrom the directory where you installed the Touch framework, issue the following command:\n\n\t$ sencha generate app Basic /path/to/application\n\nThis generates a template Touch application with an application name of 'Basic'. To launch your application, simply point your browser to the directory /path/to/application and you should be presented with the standard Touch sample application.\n\n## Installing the Sencha Touch Extensions for Azure\n\nThe extension for Azure is installed either manually or as a Sencha Package. The method you use is totally up to you.\n\n### Manual installation\n\nIn most Touch applications, if you wish to add an external library of classes, you simply download the package, unpack it in your application directory and configure the Touch loader with the location of the library.\n\nYou can manually add the Azure extensions to your application using the following steps:\n\n1. Download the Azure extensions package from [here](https://market.sencha.com/extensions/sencha-extensions-for-microsoft-azure). (You may use your Sencha Forums ID to access this area.)\n\n2. Copy the Azure extensions package from the download directory to where you would ultimately want it to reside and unpack it :\n\n        $ cd /path/to/application\n\t    $ mv /download-location/azure.zip .\n    \t$ unzip azure.zip\n\n    This creates an **azure** directory containing the entire package source, examples and documentation. The source will reside in the **azure/src** directory.\n\n\n### Installation as a Sencha package\n\n> [AZURE.NOTE] You can only use this method when you have generated your application using the <code>sencha generate app</code> command.\n\nAll applications generated by Sencha Cmd have a \"packages\" folder at the root. The location of this folder can be configured, but regardless of its location, the role of the \"packages\" folder is to serve as the storage of all packages used by your application (or applications if you have created a Sencha Workspace).\n\nAs Ext.Azure is a Sencha Cmd \"package\", the source code can be easily installed and included in your application using Sencha Cmd. (See [Sencha Cmd Packages](http://docs.sencha.com/cmd/6.x/cmd_packages/cmd_packages.html) for more information).\n\nTo download and install the Azure extensions package from the Sencha Packages repository, you will need to add the package name to your **app.json** file and build your application:\n\n1. Add the Azure package to the requires section of your app.json file:\n\n\t    {\n            \"name\": \"Basic\",\n\t        \"requires\": [\n    \t        \"touch-azure\"\n        \t]\n    \t}\n\n2. Rebuild your application using **sencha cmd** to fetch and install the package:\n\n\t    $ sencha app build\n\nBoth **sencha app build** and **sencha app refresh** will both now perform the steps needed to integrate the package in to your application. Typically, after changing package requirements, you will need to run **sencha app refresh** so that the metadata required to support \"dev mode\" is up to date.\n\nWhichever command you run, Sencha Cmd will download and expand the package to your \"packages\" folder. After this you will find a \"packages/touch-azure\" folder in your workspace.\n\n## Include and configure Azure\n\n**Filename**: app.js\n\nNow that the Azure extension has been downloaded and installed in your application directory, the next step is to tell your application where to find the source files, and to require those files:\n\n1. Configure the Sencha Loader with the location of the source code:\n\n        Ext.Loader.setConfig({\n       \t    enabled : true,\n           \tpaths   : {\n               \t'Ext'       : 'touch/src',\n               \t'Ext.azure' : '/path-to/azure-for-touch/azure/src'\n            }\n        });\n\n\n2. Require the Azure class files:\n\n\t\tExt.application({\n\n\t\t\trequires: [ 'Ext.azure.Azure' ],\n\n\t\t\t// ...\n\n\t\t});\n\n\n3. Configuring Azure\n\n\tThe Azure package is initialized by calling the **Ext.Azure.init** method in the launch section of your application. This method is passed a configuration object containing mobile service credentials as well as other credentials and features you wish to utilize.\n\n\tWhile you can pass the configuration object directly to the init method, we suggest creating a Sencha application configuration property called **azure** and placing all the appropriate information there. You can then pass this property value to the Ext.Azure.init method.\n\n\tWhen you create a mobile service in Azure (see [Getting Started with Azure](http://senchaazuredocs.azurewebsites.net/#!/guide/getting_started)), an application key and URL are assigned to that service. This information must be provided to your Azure package so it can connect to your service.\n\n\tThis example shows a very simple Azure configuration and initialization supplying only the application key and URL:\n\n\t    Ext.application({\n    \t    name: 'Basic',\n\n        \trequires: [ 'Ext.azure.Azure' ],\n\n\t        azure: {\n    \t        appKey: 'myazureservice-access-key',\n        \t    appUrl: 'myazure-service.azure-mobile.net'\n\t        },\n\n    \t    launch: function() {\n\n        \t    // Call Azure initialization\n\n            \tExt.Azure.init(this.config.azure);\n\n \t       }\n    \t});\n\n\tFor more information on the Azure configuration options, please consult the Ext.Azure API documentation.\n\n\nCongratulations! Your application should now have access to your mobile service.\n\n## Build the ToDo app\n\nNow that we have configured your application to include the Azure extension, and provided it with your mobile service credentials, we can move on to creating a Touch application which utilizes your mobile service for viewing and editing your ToDo list data stored in the service.\n\n### Configure the Azure data proxy\n\n**Filename:** app/model/TodoItem.js\n\nYour Touch application will be communicating with your mobile service via a data proxy. The proxy does all the work of both sending requests to, and receiving data from, the mobile service. Used in combination with a Touch data model and store, all the hard work of processing remote data and getting it into your application is removed and handled by Touch itself.\n\nSencha Touch models provide the definition of the data records you will be using in your application. They allow you to not only define the data fields but also provide configuration about the proxy that will be handling the communication between the application and the Azure mobile service.\n\nIn the code below you can see that we define the fields (and their types) for the model, and also provide a proxy configuration. When configuring your proxy, you need to give it a type (in this case 'azure'), the mobile service tablename (ToDoItem) and other optional parameters. In this example, we will be turning on proxy paging so that we can seamlessly page forward and backward through list items.\n\nThe Azure proxy will automatically set all HTTP headers with the appropriate CRUD operations expected by the Azure API (including authentication credentials, if they exist).\n\n\tExt.define('Basic.model.TodoItem', {\n    \textend : 'Ext.data.Model',\n\n\t    requires : [\n    \t    'Ext.azure.Proxy'\n    \t],\n\n\t    config : {\n    \t    idProperty : 'id',\n        \tuseCache   : false,\n\n\t        fields     : [\n    \t        {\n        \t        name : 'id',\n            \t    type : 'int'\n            \t},\n            \t{\n                \tname : 'text',\n                \ttype : 'string'\n            \t},\n            \t{\n\t                name : 'complete',\n    \t            type : 'boolean'\n        \t    }\n\t        ],\n\n\t        proxy : {\n    \t        type               : 'azure',\n        \t    tableName          : 'TodoItem',\n            \tenablePagingParams : true\n        \t}\n    \t}\n\t});\n\n\n### Store your ToDo items\n\n**Filename**: app/store/TodoItems.js\n\nSencha Touch stores are used to store collections of data records (models) which can be used as sources for Touch components for displaying the records in a variety of different ways. This can include Grids, Charts, Lists and more.\n\nHere we define a store which will be used to hold all your store ToDo list items which are retrieved from your Azure mobile service. Notice that the store configuration contains the name of the model type (Basic.model.TodoItem - defined above). This defines the structure of the records which will be contained in the store.\n\nWe also have some additional configuration options for the store such as specifying the page size (8 records), and that the sorting of records for this store is done remotely by the Azure mobile service (no sorting is done locally within the store itself).\n\n\tExt.define('Basic.store.TodoItems', {\n    \textend : 'Ext.data.Store',\n\n\t    requires : [\n    \t    'Basic.model.TodoItem'\n\t    ],\n\n\t    config : {\n    \t    model        : 'Basic.model.TodoItem',\n        \tpageSize     : 8,\n\t        remoteSort   : true,\n    \t    remoteFilter : true\n    \t}\n\t});\n\n\n### View and edit your ToDo items\n\n**Filename**: app/view/DataItem.js\n\nNow that we have defined the structure of each ToDo item, and created a store to place all the records in, we should think about how we wish to display this information to the user of the app. We normally display information to the user through the use of **Views**. A view can be one of any number of Touch components, individually or combined with others.\n\nThe view below is comprised of a ListItem which defines how each record will be displayed along with some buttons which will accommodate actions to delete each item.\n\n\tExt.define('Basic.view.DataItem', {\n    \textend : 'Ext.dataview.component.ListItem',\n    \txtype  : 'basic-dataitem',\n\n\t    requires : [\n    \t    'Ext.Button',\n        \t'Ext.layout.HBox',\n        \t'Ext.field.Checkbox'\n    \t],\n\n\t    config : {\n    \t    checkbox : {\n        \t    docked     : 'left',\n            \txtype      : 'checkboxfield',\n            \twidth      : 50,\n            \tlabelWidth : 0\n        \t},\n\n\t        text : {\n    \t        flex : 1\n        \t},\n\n\t        button : {\n    \t        docked   : 'right',\n        \t    xtype    : 'button',\n            \tui       : 'plain',\n\t            iconMask : true,\n    \t        iconCls  : 'delete',\n        \t    style    : 'color: red;'\n        \t},\n\n\t        dataMap : {\n    \t        getText : {\n        \t        setHtml : 'text'\n            \t},\n\n\t            getCheckbox : {\n    \t            setChecked : 'complete'\n        \t    }\n        \t},\n\n\t        layout : {\n    \t        type : 'hbox',\n        \t    align: 'stretch'\n        \t}\n    \t},\n\n\t    applyCheckbox : function(config) {\n    \t    return Ext.factory(config, Ext.field.Checkbox, this.getCheckbox());\n    \t},\n\n\t    updateCheckbox : function (cmp) {\n    \t    if (cmp) {\n        \t    this.add(cmp);\n        \t}\n    \t},\n\n\t    applyButton : function(config) {\n    \t    return Ext.factory(config, Ext.Button, this.getButton());\n    \t},\n\n\t    updateButton : function (cmp) {\n    \t    if (cmp) {\n        \t    this.add(cmp);\n        \t}\n    \t}\n\n\t});\n\n\n### Create your primary view\n\n**Filename**: app/view/Main.js\n\nNow that we have defined the layout of an individual ToDo list item (above) we want to wrap a full user interface around that list which defines the actual list of items, an application title, and a button to add a new task.\n\n\tExt.define('Basic.view.Main', {\n    \textend : 'Ext.dataview.List',\n    \txtype  : 'main',\n\n\t    requires : [\n    \t    'Ext.TitleBar',\n        \t'Ext.dataview.List',\n        \t'Ext.data.Store',\n        \t'Ext.plugin.PullRefresh',\n        \t'Ext.plugin.ListPaging',\n        \t'Basic.view.DataItem'\n    \t],\n\n\t    config : {\n    \t    store : 'TodoItems',\n\n        \tuseSimpleItems : false,\n        \tdefaultType    : 'basic-dataitem',\n\n\t        plugins : [\n    \t        {\n        \t        xclass          : 'Ext.plugin.PullRefresh',\n            \t    pullRefreshText : 'Pull down to refresh!'\n            \t},\n            \t{\n                \txclass     : 'Ext.plugin.ListPaging',\n                \tautoPaging : true\n            \t}\n        \t],\n\n\t        scrollable : {\n    \t        direction     : 'vertical',\n        \t    directionLock : true\n        \t},\n\n\t        items : [\n    \t        {\n        \t        docked : 'top',\n            \t    xtype  : 'titlebar',\n                \ttitle  : 'Azure Mobile - Basic Data Example'\n            \t},\n            \t{\n                \txtype  : 'toolbar',\n                \tdocked : 'bottom',\n                \titems  : [\n                    \t{\n                        \txtype       : 'textfield',\n                        \tplaceHolder : 'Enter new task',\n                        \tflex        : 1\n                    \t},\n                    \t{\n                        \txtype  : 'button',\n                        \taction : 'add',\n                        \ttext   : 'Add'\n                    \t}\n                \t]\n            \t}\n        \t]\n    \t}\n\t});\n\n### Make everything work together\n\n**Filename**: app/controller/Main.js\n\nThe final step in our application is to respond to button presses (delete, save, etc) and provide the logic behind all these requests. Sencha Touch utilizes controllers which listen for these events and responds accordingly.\n\n\tExt.define('Basic.controller.Main', {\n    \textend : 'Ext.app.Controller',\n\n\t    config : {\n    \t    refs : {\n        \t    todoField : 'main toolbar textfield',\n            \tmain      : 'main'\n        \t},\n\n\t        control : {\n    \t        'button[action=add]'    : {\n        \t        tap : 'onAddItem'\n            \t},\n            \t'button[action=reload]' : {\n                \ttap : 'onReload'\n            \t},\n\n\t            main : {\n    \t            activate      : 'loadInitialData',\n        \t        itemdoubletap : 'onItemEdit'\n            \t},\n\n\t            'basic-dataitem checkboxfield' : {\n    \t            change : 'onItemCompleteTap'\n        \t    },\n\n            \t'basic-dataitem button' : {\n                \ttap : 'onItemDeleteTap'\n            \t}\n        \t}\n    \t},\n\n\t    loadInitialData : function () {\n    \t    Ext.getStore('TodoItems').load();\n    \t},\n\n\t    onItemDeleteTap : function (button, e, eOpts) {\n    \t    var store    = Ext.getStore('TodoItems'),\n        \t    dataItem = button.up('dataitem'),\n            \trec      = dataItem.getRecord();\n\n\t        rec.erase({\n    \t        success: function (rec, operation) {\n        \t        store.remove(rec);\n            \t},\n            \tfailure: function (rec, operation) {\n                \tExt.Msg.alert(\n                    \t'Error',\n                    \tExt.util.Format.format('There was an error deleting this task.<br/><br/>\tStatus Code: {0}<br/>Status Text: {1}',\n                    \toperation.error.status,\n                    \toperation.error.statusText)\n                \t);\n            \t}\n        \t});\n    \t},\n\n\t    onItemCompleteTap : function (checkbox, newVal, oldVal, eOpts) {\n    \t    var dataItem = checkbox.up('dataitem'),\n        \t    rec      = dataItem.getRecord(),\n            \trecVal   = rec.get('complete');\n\n\t        // this check is needed to prevent an issue where multiple creates get triggered from one create\n        \tif (newVal !== recVal) {\n            \trec.set('complete', newVal);\n            \trec.save({\n                \tsuccess: function (rec, operation) {\n                    \trec.commit();\n                \t},\n                \tfailure: function (rec, operation) {\n                    \t// since there was a failure doing the update on the server then silently reject the change\n\t                    rec.reject(true);\n    \t                Ext.Msg.alert(\n        \t                'Error',\n            \t            Ext.util.Format.format('There was an error updating this task.<br/><br/>Status Code: {0}<br/>Status Text: {1}',\n            \t            operation.error.status,\n            \t            operation.error.statusText)\n\t                    );\n    \t            }\n        \t    });\n        \t}\n    \t},\n\n\t    onItemEdit : function (list, index, target, record, e, eOpts) {\n    \t    var rec = list.getSelection()[0];\n\n        \tExt.Msg.prompt('Edit', 'Rename task',\n            \tfunction (buttonId, value) {\n                \tif (buttonId === 'ok') {\n                    \trec.set('text', value);\n                    \trec.save({\n                        \tsuccess: function (rec, operation) {\n                            \trec.commit();\n                        \t},\n                        \tfailure: function (rec, operation) {\n                            \t// since there was a failure doing the update on the server then reject the change\n                            \trec.reject();\n                            \tExt.Msg.alert(\n                                \t'Error',\n                                \tExt.util.Format.format('There was an error updating this task.<br/><br/>Status Code: {0}<br/>Status Text: {1}',\n                                \toperation.error.status,\n                                \toperation.error.statusText)\n                            \t);\n                        \t}\n                    \t});\n                \t}\n            \t},\n            \tnull,\n            \tfalse,\n            \trecord.get('text')\n        \t);\n    \t},\n\n\t    onReload : function () {\n    \t    Ext.getStore('TodoItems').load();\n    \t},\n\n\t    onAddItem : function () {\n    \t    var me = this,\n        \t    rec,\n            \tstore = Ext.getStore('TodoItems'),\n            \tfield = me.getTodoField(),\n            \tvalue = field.getValue();\n\n\t        if (value === '') {\n    \t        Ext.Msg.alert('Error', 'Please enter Task name', Ext.emptyFn);\n        \t}\n        \telse {\n            \trec = Ext.create('Basic.model.TodoItem', {\n                \tcomplete : false,\n                \ttext     : value\n            \t});\n            \t//store.insert(0, rec); //insert at the top\n            \t//store.sync();\n            \trec.save({\n                \tsuccess: function (rec, operation) {\n                    \tstore.insert(0, rec); //insert at the top\n                    \tfield.setValue('');\n                \t},\n                \tfailure: function (rec, operation) {\n                    \tExt.Msg.alert(\n                        \t'Error',\n                        \tExt.util.Format.format('There was an error creating this task.<br/><br/>Status Code: {0}<br/>Status Text: {1}',\n                        \toperation.error.status,\n                        \toperation.error.statusText)\n                    \t);\n                \t}\n            \t});\n        \t}\n    \t}\n\t});\n\n### Put it all together\n\n**Filename**: app.js\n\nOur final step is to finish editing the main application file, and provide information about the models, stores, views and controllers that have defined. The source files for these resources are automatically loaded into the application. Finally, the launch method is called which creates and displays the primary application view 'Basic.main.View'.\n\n\n\tExt.Loader.setConfig({\n    \tenabled : true,\n    \tpaths   : {\n        \t'Ext'       : 'touch/src',\n        \t'Ext.azure' : 'packages/azure/src'\n    \t}\n\t});\n\n\tExt.application({\n    \tname : 'Basic',\n\n\t    requires : [\n    \t    'Ext.MessageBox',\n        \t'Ext.azure.Azure'\n    \t],\n\n\t    views : [\n    \t    'Main'\n    \t],\n\n\t    controllers : [\n    \t    'Main'\n    \t],\n\n\t    stores : [\n    \t    'TodoItems'\n    \t],\n\n\t    azure : {\n    \t    appUrl : 'YOUR_APP_URL.azure-mobile.net',\n        \tappKey : 'YOUR_APP_KEY'\n    \t},\n\n\t    icon : {\n    \t    '57'  : 'resources/icons/Icon.png',\n        \t'72'  : 'resources/icons/Icon~ipad.png',\n        \t'114' : 'resources/icons/Icon@2x.png',\n        \t'144' : 'resources/icons/Icon~ipad@2x.png'\n    \t},\n\n\t    isIconPrecomposed : true,\n\n\t    startupImage : {\n    \t    '320x460'   : 'resources/startup/320x460.jpg',\n        \t'640x920'   : 'resources/startup/640x920.png',\n        \t'768x1004'  : 'resources/startup/768x1004.png',\n        \t'748x1024'  : 'resources/startup/748x1024.png',\n        \t'1536x2008' : 'resources/startup/1536x2008.png',\n        \t'1496x2048' : 'resources/startup/1496x2048.png'\n    \t},\n\n\t    launch : function () {\n    \t    // Destroy the #appLoadingIndicator element\n        \tExt.fly('appLoadingIndicator').destroy();\n\n\t        // Initialize Azure\n    \t    Ext.Azure.init(this.config.azure);\n\n\t        // Initialize the main view\n    \t    Ext.Viewport.add(Ext.create('Basic.view.Main'));\n\t    },\n\n\t    onUpdated : function () {\n    \t    Ext.Msg.confirm(\n        \t    \"Application Update\",\n            \t\"This application has just successfully been updated to the latest version. Reload now?\",\n\t            function (buttonId) {\n    \t            if (buttonId === 'yes') {\n        \t            window.location.reload();\n            \t    }\n            \t}\n        \t);\n   \t\t}\n\t});\n\n### Host and run your Sencha Touch app\n\nThe final stage of this tutorial is to host and run your new app on your local computer.\n\n  1. In your terminal, browse to the location of your unzipped application.\n\n  2. Using Sencha Cmd, run the following commands:\n\n    * *sencha app refresh* : This will instruct Sencha Cmd to locate all app dependencies,\n      and download any needed packages (for example, [Sencha Touch Extensions for Azure](https://market.sencha.com/extensions/sencha-extensions-for-microsoft-azure)).\n\n    * *sencha web start* : This will start a local web server to test our application.\n\n    ![sencha web start](./media/partner-sencha-mobile-services-get-started/sencha-web-start.png)\n\n  3. Open the URL listed in your terminal in a web browser to start the app (e.g. http://localhost:1841).\n\n  4. In the app, type meaningful text, such as \"Complete the tutorial\", and then click **Add**.\n\n    ![new todo item](./media/partner-sencha-mobile-services-get-started/new-todo-item.png)\n\n    This sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the TodoItem table.\n\n  5. Back in the [Azure classic portal], click the **Data** tab and then click the TodoItems table.\n\n    ![Todo Items table](./media/partner-sencha-mobile-services-get-started/mobile-data-tab.png)\n\n    This lets you browse the data inserted by the app into the table.\n\n    ![browse todo table](./media/partner-sencha-mobile-services-get-started/mobile-data-browse.png)\n\n## Next Steps\nNow that you have completed the Getting Started Guide, learn how to perform additional important tasks in Mobile Services with Sencha.\n\n[Download](https://github.com/arthurakay/sencha-touch-azure-example) a completed sample app with additional styling and features to see what else Sencha Touch can do!\n\nThen, dive into more information about the Sencha Touch Extensions for Azure:\n\n  * Sample app [walkthrough](http://docs.sencha.com/touch-azure/1.0.0/#!/guide/data_filters)\n  * Get help in the [Sencha Forums](http://www.sencha.com/forum)\n  * Browse the [Sencha Documentation](http://docs.sencha.com/)\n  * Using Sencha With Azure Mobile Services: [(Video)](http://channel9.msdn.com/Shows/Cloud+Cover/Episode-126-Using-Sencha-With-Windows-Azure-Mobile-Services)\n\n\n## Additional Resources\n\n  * [Download Sencha Touch](http://pages.sencha.com/touch-for-azure.html)\n  * [Sencha Touch Extensions for Azure](https://market.sencha.com/extensions/sencha-extensions-for-microsoft-azure)\n\n\n## Summary\n\nThe example outlined here is provided in the Sencha Touch Extension for Azure package and is located in the examples directory as the Basic Data example. There are a few more examples which are provided which demonstrated other functionality of this extension along with detailed comments and explanations.\n\nFor more information about getting started with Sencha Touch please visit the full set of [guides](http://docs.sencha.com/touch/#!/guide)\n\n\n<!-- images -->\n[0]: ./media/partner-sencha-mobile-services-get-started/finished-app.png\n\n[Azure classic portal]: https://manage.windowsazure.com/\n"
  },
  {
    "path": "docs/partner-twilio-mobile-services-how-to-use-voice-sms.md",
    "content": "<properties\n\tpageTitle=\"Use Twilio for Voice and SMS Capabilities | Microsoft Azure\"\n\tdescription=\"Learn how to perform common tasks using the Twilio API with Azure Mobile Services.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"devinrader\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"02/17/2017\"\n\tms.author=\"glenga\"/>\n\n\n# How to use Twilio for voice and SMS capabilities from Mobile Services\n\nThis topic shows you how to perform common tasks using the Twilio API with Azure Mobile Services. In this tutorial you will learn how to create Custom API scripts that use the Twilio API to initiate a phone call and to send a Short Message Service (SMS) message. \n\n## <a id=\"WhatIs\"></a>What is Twilio?\nTwilio is powering the future of business communications, enabling developers to embed voice, VoIP, and messaging into applications. They virtualize all infrastructure needed in a cloud-based, global environment, exposing it through the Twilio communications API platform. Applications are simple to build and scalable. Enjoy flexibility with pay-as-you go pricing, and benefit from cloud reliability.\n\n**Twilio Voice** allows your applications to make and receive phone calls. **Twilio SMS** enables your applications to send and receive SMS messages. **Twilio Client** allows you to make VoIP calls from any phone, tablet, or browser and supports WebRTC.\n\n## <a id=\"Pricing\"></a>Twilio Pricing and Special Offers\nAzure customers receive a [special offer][special_offer]: complimentary $10 of Twilio Credit when you upgrade your Twilio Account. This Twilio Credit can be applied to any Twilio usage ($10 credit equivalent to sending as many as 1,000 SMS messages or receiving up to 1000 inbound Voice minutes, depending on the location of your phone number and message or call destination). Redeem this Twilio credit and get started at [ahoy.twilio.com/azure][special_offer].\n\nTwilio is a pay-as-you-go service. There are no set-up fees and you can close your account at any time. You can find more details at [Twilio Pricing][twilio_pricing].  \n\n## <a id=\"Concepts\"></a>Concepts\nThe Twilio API is a RESTful API that provides voice and SMS functionality for applications. Client libraries are available in multiple languages.\n\nKey aspects of the Twilio API are Twilio verbs and Twilio Markup Language (TwiML).\n\n### <a id=\"Verbs\"></a>Twilio verbs\nThe API makes use of Twilio verbs; for example, the **&lt;Say&gt;** verb instructs Twilio to audibly deliver a message on a call.\n\nThe following is a list of Twilio verbs.  Learn about the other verbs and capabilities via [Twilio Markup Language documentation](http://www.twilio.com/docs/api/twiml).\n\n* **&lt;Dial&gt;**: Connects the caller to another phone.\n* **&lt;Gather&gt;**: Collects numeric digits entered on the telephone keypad.\n* **&lt;Hangup&gt;**: Ends a call.\n* **&lt;Pause&gt;**: Waits silently for a specified number of seconds.\n* **&lt;Play&gt;**: Plays an audio file.\n* **&lt;Queue&gt;**: Add the to a queue of callers.\n* **&lt;Record&gt;**: Records the caller's voice and returns a URL of a file that contains the recording.\n* **&lt;Redirect&gt;**: Transfers control of a call or SMS to the TwiML at a different URL.\n* **&lt;Reject&gt;**: Rejects an incoming call to your Twilio number without billing you\n* **&lt;Say&gt;**: Converts text to speech that is made on a call.\n* **&lt;Sms&gt;**: Sends an SMS message.\n\n### <a id=\"TwiML\"></a>TwiML\nTwiML is a set of XML-based instructions based on the Twilio verbs that inform Twilio of how to process a call or SMS.\n\nAs an example, the following TwiML would convert the text **Hello World** to speech.\n\n    <?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n    <Response>\n       <Say>Hello World</Say>\n    </Response>\n\nWhen your application calls the Twilio API, one of the API parameters is the URL that returns the TwiML response. For development purposes, you can use Twilio-provided URLs to provide the TwiML responses used by your applications. You could also host your own URLs to produce the TwiML responses, and another option is to use the `TwiMLResponse` object.\n\nFor more information about Twilio verbs, their attributes, and TwiML, see [TwiML][twiml]. For additional information about the Twilio API, see [Twilio API][twilio_api].\n\n## <a id=\"CreateAccount\"></a>Create a Twilio Account\nWhen you're ready to get a Twilio account, sign up at [Try Twilio][try_twilio]. You can start with a free account, and upgrade your account later.\n\nWhen you sign up for a Twilio account, you'll receive an account SID and an authentication token. Both will be needed to make Twilio API calls. To prevent unauthorized access to your account, keep your authentication token secure. Your account SID and authentication token are viewable in the [Twilio Console][twilio_console], in the fields labeled **ACCOUNT SID** and **AUTH TOKEN**, respectively.\n\n## <a id=\"create_app\"></a>Create a Mobile Service\nA Mobile Service that hosts a Twilio enabled application is no different from any other Mobile Service. You simply add the Twilio node.js library in order to reference it from your Mobile Service Custom API scripts. For information on creating an initial mobile service, see [Getting Started with Mobile Services](mobile-services-ios-get-started.md).\n\n## <a id=\"ConfigureMobileService\"></a>Configure Your Mobile Service to use the Twilio Node.js Library\nTwilio provides a Node.js library that wraps various aspects of Twilio to provide simple and easy ways to interact with the Twilio REST API and Twilio Client to generate TwiML responses.\n\nTo use the Twilio node.js library in your Mobile Service, you need leverage Mobile Services npm module support, which you can do by storing your scripts in source control.\n\n1. Complete the tutorial [Store Scripts in Source Control](mobile-services-store-scripts-source-control.md). This walks you through setting-up source control for your Mobile Services and storing your server scripts in a Git repository.\n\n2. After you have set up source control for your Mobile Service, open the repository on your local computer, browse to the `\\services` subfolder, open the package.json file in a text editor, and add the following field to the **dependencies** object:\n\n\t\t\"twilio\": \"~2.11.1\"\n\n3. After you have added the Twilio package reference to the **dependencies** object, the package.json file should look like the following:\n\n\t\t{\n\t\t  \"name\": \"todolist\",\n\t\t  \"version\": \"1.0.0\",\n\t\t  \"description\": \"todolist - hosted on Azure Mobile Services\",\n\t\t  \"main\": \"server.js\",\n\t\t  \"engines\": {\n\t\t    \"node\": \">= 0.8.19\"\n\t\t  },\n\t\t  \"dependencies\": {\n\t\t\t\"twilio\": \"~2.11.1\"\n\t\t  },\n\t\t  \"devDependencies\": {},\n\t\t  \"scripts\": {},\n\t\t  \"author\": \"unknown\",\n\t\t  \"licenses\": [],\n\t\t  \"keywords\":[]\n\t\t}\n\n\t>[AZURE.NOTE]The dependency for Twilio should be added as `\"twilio\": \"~2.11.1\"`, with a (~). A reference with a caret (^) is not supported.\n\n4. Commit this file update and push the update back to the mobile service.\n\n\tThis update to the package.json file will restart your mobile service.\n\nThe mobile service now installs and loads the Twilio package so you can reference and use the Twilio library in your custom API and table scripts.\n\n## <a id=\"howto_make_call\"></a>How to: Make an outgoing call\nThe following script shows how to initiate an outgoing call from your Mobile Service using the **Call** resource. This code also uses a Twilio-provided site to return the Twilio Markup Language (TwiML) response. Substitute your values for the `from` and `to` phone numbers, and ensure that you verify the `from` phone number for your Twilio account before running the code.\n\n    var twilio = require('twilio');\n\n    exports.post = function(request, response) {\n\n        var client = new twilio.RestClient('ACCOUNT_SID', 'AUTH_TOKEN');\n\n        client.calls.create({\n            to:'+16515556677',\n            from: '+14506667788',\n            url: 'http://www.example.com/twiml.php'\n\n        }, function(err, responseData) {\n            console.log(responseData.from);\n            response.send(200, '');\n        });\n    };\n\nFor more information about the parameters passed in to the `client.calls.create` function, see [http://www.twilio.com/docs/api/rest/making-calls][twilio_rest_making_calls].\n\nAs mentioned, this code uses a Twilio-provided site to return the TwiML response. You could instead use your own site to provide the TwiML response. For more information, see [How to: Provide TwiML responses from your own web site](#howto_provide_twiml_responses).\n\n## <a id=\"howto_send_sms\"></a>How to: Send an SMS message\nThe following code shows how to send an SMS message using the **Message** resource. The `from` number is provided by Twilio for trial accounts to send SMS messages. The `to` number must be verified for your Twilio account before you run the code.\n\n    var twilio = require('twilio');\n\n    exports.post = function(request, response) {\n\n        var client = new twilio.RestClient('ACCOUNT_SID', 'AUTH_TOKEN');\n\n        client.messages.create({\n            to:'+16515556677',\n            from:'+14506667788',\n            body:'ahoy hoy! Testing Twilio and node.js'\n        }, function(error, message) {\n\n            // The \"error\" variable will contain error information, if any.\n            // If the request was successful, this value will be \"false\"\n            if (!error) {\n                console.log('Success! The SID for this SMS message is: ' + message.sid);\n                console.log('Message sent on: ' + message.dateCreated);\n            }\n            else {\n                console.log('Oops! There was an error.');\n            }\n            response.send(200, { error : error } );\n        });\n    };\n\n\n## <a id=\"howto_provide_twiml_responses\"></a>How to: Provide TwiML responses from your own website\n\nWhen your application initiates a call to the Twilio API, Twilio sends your request to a URL that is expected to return a TwiML response. The example in How to: Make an outgoing call uses the Twilio-provided URL http://twimlets.com/message to return the response.\n\n> [AZURE.NOTE] While TwiML is designed for use by web services, you can view the TwiML in your browser. For example, click [twimlet_message_url](http://twimlets.com/message) to see an empty &lt;Response&gt; element; as another example, click [twimlet_message_url_hello_world](http://twimlets.com/message?Message%5B0%5D=Hello%20World) to see a &lt;Response&gt; element that contains a &lt;Say&gt; element.\n\nInstead of relying on the Twilio-provided URL, you can create your own URL site that returns HTTP responses. You can create the site in any language that returns HTTP responses. This topic assumes you'll be hosting the URL from an Node.js generic handler.\n\nThe following script results in a TwiML response that says Hello World on the call.\n\n    var twilio = require('twilio');\n\n    exports.post = function(request, response) {\n        var twiml = new twilio.TwimlResponse();\n        twiml.say('ahoy hoy! Testing Twilio and node.js', {\n            voice: 'woman'\n        });\n        response.set('Content-Type', 'text/xml');\n        response.send(twiml.toString());\n    };\n\nFor more information about TwiML, see [https://www.twilio.com/docs/api/twiml][twiml].\n\nOnce you have set up a way to provide TwiML responses, you can pass that URL into the `client.calls.create` method as shown in the following code sample:\n\n    var twilio = require('twilio');\n\n    exports.post = function(request, response) {\n\n        var client = new twilio.RestClient('ACCOUNT_SID', 'AUTH_TOKEN');\n\n        client.calls.create({\n            to:'+16515556677',\n            from: '+14506667788',\n            url: 'http://<your_mobile_service>.azure-mobile.net/api/makeCall'\n\n        }, function(err, responseData) {\n\n            console.log(responseData.from);\n            response.send('');\n        });\n    };\n\n## <a name=\"AdditionalServices\"></a>How to: Use additional Twilio services\nIn addition to the examples shown here, Twilio offers web-based APIs that you can use to leverage additional Twilio functionality from your Azure application. For full details, see the [Twilio API documentation][twilio_api].\n\n## <a name=\"NextSteps\"></a>Next steps\nNow that you've learned the basics of the Twilio service, follow these links to learn more:\n\n* [Twilio Security Guidelines] [twilio_security_guidelines]\n* [Twilio HowTos and Example Code] [twilio_howtos]\n* [Twilio Quickstart Tutorials][twilio_quickstarts] \n* [Twilio on GitHub] [twilio_on_github]\n* [Talk to Twilio Support] [twilio_support]\n\n[twilio_security_guidelines]: http://www.twilio.com/docs/security\n[twilio_howtos]: http://www.twilio.com/docs/howto\n[twilio_on_github]: https://github.com/twilio\n[twilio_support]: http://www.twilio.com/help/contact\n[twilio_quickstarts]: http://www.twilio.com/docs/quickstart\n\n[twilio_rest_making_calls]: http://www.twilio.com/docs/api/rest/making-calls\n\n[twilio_pricing]: http://www.twilio.com/pricing\n[special_offer]: http://ahoy.twilio.com/azure\n[twiml]: http://www.twilio.com/docs/api/twiml\n[twilio_api]: http://www.twilio.com/api\n[try_twilio]: https://www.twilio.com/try-twilio\n[twilio_console]: https://www.twilio.com/console\n"
  },
  {
    "path": "docs/partner-xamarin-mobile-services-android-get-started-push.md",
    "content": "<properties\n\tpageTitle=\"Add push notifications to your Xamarin Android app | Microsoft Azure\"\n\tdescription=\"Learn how to configure push notifications with Google Cloud Messaging for you Xamarin.Android apps using Azure Mobile Services and Azure Notification Hubs.\"\n\tdocumentationCenter=\"xamarin\"\n\tauthors=\"ggailey777\"\n\tmanager=\"dwrede\"\n\tservices=\"mobile-services\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-xamarin-android\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n# Add push notifications to your Mobile Services app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-push.md)\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-javascript-backend-windows-phone-get-started-push.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started-push.md)\n- [(Android | Javascript)](mobile-services-javascript-backend-android-get-started-push.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-push.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-push.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-push.md)\n- [(Xamarin.Forms | JavaScript)](partner-xamarin-mobile-services-xamarin-forms-get-started-push.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Overview\nThis topic shows you how to use Azure Mobile Services to send push notifications to a Xamarin.Android app. In this tutorial you add push notifications using the Google Cloud Messaging (GCM) service to the [Get started with Mobile Services] project. When complete, your mobile service will send a push notification each time a record is inserted.\n\nThis tutorial requires the following:\n\n+ An active Google account.\n+ [Google Cloud Messaging Client Component]. You will add this component during the tutorial.\n\nYou should already have Xamarin and the [Azure Mobile Services Component] installed in your project from when you completed either [Get started with Mobile Services].\n\n## <a id=\"register\"></a>Enable Google Cloud Messaging\n\n\n1. Navigate to the [Google Cloud Console](https://console.developers.google.com/project), sign in with your Google account credentials.\n\n2. Click **Create Project**, type a project name, then click **Create**. If requested, carry out the SMS Verification, and click **Create** again.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/mobile-services-google-new-project.png)   \n\n\t Type in your new **Project name** and click **Create project**.\n\n3. Click the **Utilities and More** button and then click **Project Information**. Make a note of the **Project Number**. You will need to set this value as the `SenderId` variable in the client app.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/notification-hubs-utilities-and-more.png)\n\n\n4. In the project dashboard, under **Mobile APIs**, click **Google Cloud Messaging**, then on the next page click **Enable API** and accept the terms of service.\n\n\t![Enabling GCM](./media/mobile-services-enable-google-cloud-messaging/enable-GCM.png)\n\n\t![Enabling GCM](./media/mobile-services-enable-google-cloud-messaging/enable-gcm-2.png)\n\n5. In the project dashboard, Click **Credentials** > **Create Credential** > **API Key**.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/mobile-services-google-create-server-key.png)\n\n6. In **Create a new key**, click **Server key**, type a name for your key, then click **Create**.\n\n7. Make a note of the **API KEY** value.\n\n\tYou will use this API key value to enable Azure to authenticate with GCM and send push notifications on behalf of your app.\n\n\n## <a id=\"configure\"></a>Configure your mobile service to send push requests\n\n\n1. Log on to the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, and then click your app.\n\n2. Click the **Push** tab, enter the **API Key** value obtained from GCM in the previous procedure, then click **Save**.\n\n   \t![](./media/mobile-services-android-configure-push/mobile-push-tab-android.png)\n\n    >[AZURE.NOTE]When you set your GCM credentials for enhanced push notifications in the Push tab in the portal, they are shared with Notification Hubs to configure the notification hub with your app.\n\nBoth your mobile service and your app are now configured to work with GCM and Notification Hubs.\n\n## <a id=\"update-scripts\"></a>Update the registered insert script to send notifications\n\n>[AZURE.TIP] The following steps show you how to update the script registered to the insert operation on the TodoItem table in the Azure classic portal. You can also access and edit this mobile service script directly in Visual Studio, in the Azure node of Server Explorer.\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click the **Data** tab and then click the **TodoItem** table.\n\n2. In **todoitem**, click the **Script** tab and select **Insert**.\n\n   \tThis displays the function that is invoked when an insert occurs in the **TodoItem** table.\n\n3. Replace the insert function with the following code, and then click **Save**:\n\n\t\tfunction insert(item, user, request) {\n\t\t// Define a simple payload for a GCM notification.\n\t    var payload = {\n\t        \"data\": {\n\t            \"message\": item.text\n\t        }\n\t    };\t\t\n\t\trequest.execute({\n\t\t    success: function() {\n\t\t        // If the insert succeeds, send a notification.\n\t\t        push.gcm.send(null, payload, {\n\t\t            success: function(pushResponse) {\n\t\t                console.log(\"Sent push:\", pushResponse, payload);\n\t\t                request.respond();\n\t\t                },              \n\t\t            error: function (pushResponse) {\n\t\t                console.log(\"Error Sending push:\", pushResponse);\n\t\t                request.respond(500, { error: pushResponse });\n\t\t                }\n\t\t            });\n\t\t        },\n\t\t    error: function(err) {\n\t\t        console.log(\"request.execute error\", err)\n\t\t        request.respond();\n\t\t    }\n\t\t  });\n\t\t}\n\n   \tThis registers a new insert script, which uses the [gcm object](http://go.microsoft.com/fwlink/p/?LinkId=282645) to send a push notification to all registered devices after the insert succeeds.\n\n\n## <a id=\"configure-app\"></a>Configure the existing project for push notifications\n\n\n1. In the Solution view (or **Solution Explorer** in Visual Studio), right-click the **Components** folder, click  **Get More Components...**, search for the **Google Cloud Messaging Client** component and add it to the project.\n\n2. Open the ToDoActivity.cs project file and add the following using statement to the class:\n\n\t\tusing Gcm.Client;\n\n3. In the **ToDoActivity** class, add the following new code:\n\n        // Create a new instance field for this activity.\n        static ToDoActivity instance = new ToDoActivity();\n\n        // Return the current activity instance.\n        public static ToDoActivity CurrentActivity\n        {\n            get\n            {\n                return instance;\n            }\n        }\n        // Return the Mobile Services client.\n        public MobileServiceClient CurrentClient\n        {\n            get\n            {\n                return client;\n            }\n        }\n\n\tThis enables you to access the mobile client instance from the push handler service process.\n\n4.\tAdd the following code to the **OnCreate** method, after the **MobileServiceClient** is created:\n\n        // Set the current instance of TodoActivity.\n        instance = this;\n\n        // Make sure the GCM client is set up correctly.\n        GcmClient.CheckDevice(this);\n        GcmClient.CheckManifest(this);\n\n        // Register the app for push notifications.\n        GcmClient.Register(this, ToDoBroadcastReceiver.senderIDs);\n\nYour **ToDoActivity** is now prepared for adding push notifications.\n\n## <a id=\"add-push\"></a>Add push notifications code to your app\n\n\n4. Create a new class in the project called `ToDoBroadcastReceiver`.\n\n5. Add the following using statements to **ToDoBroadcastReceiver** class:\n\n\t\tusing Gcm.Client;\n\t\tusing Microsoft.WindowsAzure.MobileServices;\n\n6. Add the following permission requests between the **using** statements and the **namespace** declaration:\n\n\t\t[assembly: Permission(Name = \"@PACKAGE_NAME@.permission.C2D_MESSAGE\")]\n\t\t[assembly: UsesPermission(Name = \"@PACKAGE_NAME@.permission.C2D_MESSAGE\")]\n\t\t[assembly: UsesPermission(Name = \"com.google.android.c2dm.permission.RECEIVE\")]\n\n\t\t//GET_ACCOUNTS is only needed for android versions 4.0.3 and below\n\t\t[assembly: UsesPermission(Name = \"android.permission.GET_ACCOUNTS\")]\n\t\t[assembly: UsesPermission(Name = \"android.permission.INTERNET\")]\n\t\t[assembly: UsesPermission(Name = \"android.permission.WAKE_LOCK\")]\n\n7. Replace the existing **ToDoBroadcastReceiver** class definition with the following:\n\n\t    [BroadcastReceiver(Permission = Gcm.Client.Constants.PERMISSION_GCM_INTENTS)]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_MESSAGE },\n\t        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_REGISTRATION_CALLBACK },\n\t        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_LIBRARY_RETRY },\n        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n        public class ToDoBroadcastReceiver : GcmBroadcastReceiverBase<PushHandlerService>\n        {\n\t        // Set the Google app ID.\n\t        public static string[] senderIDs = new string[] { \"<PROJECT_NUMBER>\" };\n        }\n\n\tIn the above code, you must replace _`<PROJECT_NUMBER>`_ with the project number assigned by Google when you provisioned your app in the Google developer portal.\n\n8. In the ToDoBroadcastReceiver.cs project file, add the following code that defines the **PushHandlerService** class:\n\n\t\t// The ServiceAttribute must be applied to the class.\n    \t[Service]\n    \tpublic class PushHandlerService : GcmServiceBase\n    \t{\n        \tpublic static string RegistrationID { get; private set; }\n\n        \tpublic PushHandlerService() : base(ToDoBroadcastReceiver.senderIDs) { }\n    \t}\n\n\tNote that this class derives from **GcmServiceBase** and that the **Service** attribute must be applied to this class.\n\n\t>[AZURE.NOTE]The **GcmServiceBase** class implements the **OnRegistered()**, **OnUnRegistered()**, **OnMessage()** and **OnError()** methods. You must override these methods in the **PushHandlerService** class.\n\n5. Add the following code to the **PushHandlerService** class that overrides the **OnRegistered** event handler.\n\n        protected override void OnRegistered(Context context, string registrationId)\n        {\n            System.Diagnostics.Debug.WriteLine(\"The device has been registered with GCM.\", \"Success!\");\n\n            // Get the MobileServiceClient from the current activity instance.\n            MobileServiceClient client = ToDoActivity.CurrentActivity.CurrentClient;           \n            var push = client.GetPush();\n\n            List<string> tags = null;\n\n            //// (Optional) Uncomment to add tags to the registration.\n            //var tags = new List<string>() { \"myTag\" }; // create tags if you want\n\n            try\n            {\n                // Make sure we run the registration on the same thread as the activity,\n                // to avoid threading errors.\n                ToDoActivity.CurrentActivity.RunOnUiThread(\n                    async () => await push.RegisterNativeAsync(registrationId, tags));\n            }\n            catch (Exception ex)\n            {\n                System.Diagnostics.Debug.WriteLine(\n                    string.Format(\"Error with Azure push registration: {0}\", ex.Message));                \n            }\n        }\n\n\tThis method uses the returned GCM registration ID to register with Azure for push notifications.\n\n10. Override the **OnMessage** method in **PushHandlerService** with the following code:\n\n        protected override void OnMessage(Context context, Intent intent)\n        {          \n            string message = string.Empty;\n\n            // Extract the push notification message from the intent.\n            if (intent.Extras.ContainsKey(\"message\"))\n            {\n                message = intent.Extras.Get(\"message\").ToString();\n                var title = \"New item added:\";\n\n                // Create a notification manager to send the notification.\n                var notificationManager =\n                    GetSystemService(Context.NotificationService) as NotificationManager;\n\n                // Create a new intent to show the notification in the UI.\n                PendingIntent contentIntent =\n\t\t\t\t\tPendingIntent.GetActivity(context, 0,\n\t\t\t\t\tnew Intent(this, typeof(ToDoActivity)), 0);\t          \n\n                // Create the notification using the builder.\n                var builder = new Notification.Builder(context);\n                builder.SetAutoCancel(true);\n                builder.SetContentTitle(title);\n                builder.SetContentText(message);\n                builder.SetSmallIcon(Resource.Drawable.ic_launcher);\n                builder.SetContentIntent(contentIntent);\n                var notification = builder.Build();\n\n                // Display the notification in the Notifications Area.\n                notificationManager.Notify(1, notification);\n\n            }\n        }\n\n12. Override the **OnUnRegistered()** and **OnError()** methods with the following code.\n\n        protected override void OnUnRegistered(Context context, string registrationId)\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void OnError(Context context, string errorId)\n        {\n            System.Diagnostics.Debug.WriteLine(\n                string.Format(\"Error occurred in the notification: {0}.\", errorId));\n        }\n\n## <a id=\"test\"></a>Test push notifications in your app\n\nYou can test the app by directly attaching an Android phone with a USB cable, or by using a virtual device in the emulator.\n\n\n4. Create a new class in the project called `ToDoBroadcastReceiver`.\n\n5. Add the following using statements to **ToDoBroadcastReceiver** class:\n\n\t\tusing Gcm.Client;\n\t\tusing Microsoft.WindowsAzure.MobileServices;\n\n6. Add the following permission requests between the **using** statements and the **namespace** declaration:\n\n\t\t[assembly: Permission(Name = \"@PACKAGE_NAME@.permission.C2D_MESSAGE\")]\n\t\t[assembly: UsesPermission(Name = \"@PACKAGE_NAME@.permission.C2D_MESSAGE\")]\n\t\t[assembly: UsesPermission(Name = \"com.google.android.c2dm.permission.RECEIVE\")]\n\n\t\t//GET_ACCOUNTS is only needed for android versions 4.0.3 and below\n\t\t[assembly: UsesPermission(Name = \"android.permission.GET_ACCOUNTS\")]\n\t\t[assembly: UsesPermission(Name = \"android.permission.INTERNET\")]\n\t\t[assembly: UsesPermission(Name = \"android.permission.WAKE_LOCK\")]\n\n7. Replace the existing **ToDoBroadcastReceiver** class definition with the following:\n\n\t    [BroadcastReceiver(Permission = Gcm.Client.Constants.PERMISSION_GCM_INTENTS)]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_MESSAGE },\n\t        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_REGISTRATION_CALLBACK },\n\t        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n\t    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_LIBRARY_RETRY },\n        Categories = new string[] { \"@PACKAGE_NAME@\" })]\n        public class ToDoBroadcastReceiver : GcmBroadcastReceiverBase<PushHandlerService>\n        {\n\t        // Set the Google app ID.\n\t        public static string[] senderIDs = new string[] { \"<PROJECT_NUMBER>\" };\n        }\n\n\tIn the above code, you must replace _`<PROJECT_NUMBER>`_ with the project number assigned by Google when you provisioned your app in the Google developer portal.\n\n8. In the ToDoBroadcastReceiver.cs project file, add the following code that defines the **PushHandlerService** class:\n\n\t\t// The ServiceAttribute must be applied to the class.\n    \t[Service]\n    \tpublic class PushHandlerService : GcmServiceBase\n    \t{\n        \tpublic static string RegistrationID { get; private set; }\n\n### Setting up the Android emulator for testing\nWhen you run this app in the emulator, make sure that you use an Android Virtual Device (AVD) that supports Google APIs.\n\n> [AZURE.IMPORTANT] In order to receive push notifications, you must set up a Google account on your Android Virtual Device (in the emulator, navigate to **Settings** and click **Add Account**). Also, make sure that the emulator is connected to the Internet.\n\n1. From **Tools**, click **Open Android Emulator Manager**, select your device, and then click **Edit**.\n\n   \t![Android Virtual Device Manager](./media/mobile-services-android-push-notifications-test/notification-hub-create-android-app7.png)\n\n2. Select **Google APIs** in **Target**, then click **OK**.\n\n   \t![Edit the Android Virtual Device](./media/mobile-services-android-push-notifications-test/notification-hub-create-android-app8.png)\n\n3. On the top toolbar, click **Run**, and then select your app. This starts the emulator and runs the app.\n\n  The app retrieves the *registrationId* from GCM and registers with the Notification Hub.\n\n### Inserting a new item generates a notification.\n\n1. In the app, type meaningful text, such as _A new Mobile Services task_ and then click the **Add** button.\n\n2. Swipe down from the top of the screen to open the device's Notification Center to see the notification.\n\n\t![View notification in the Notification Center](./media/mobile-services-android-push-notifications-test/notification-area-received.png)\n\nYou have successfully completed this tutorial.\n\n## <a name=\"next-steps\"></a>Next steps\n\nLearn more about Mobile Services and Notification Hubs in the following topics:\n\n* [Get started with authentication](mobile-services-android-get-started-users.md)\n  <br/>Learn how to authenticate users of your app with different account types using mobile services.\n\n* [What are Notification Hubs?](https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-push-notification-overview/)\n  <br/>Learn more about how Notification Hubs works to deliver notifications to your apps across all major client platforms.\n\n* [Debug Notification Hubs applications](http://go.microsoft.com/fwlink/p/?linkid=386630)\n  </br>Get guidance troubleshooting and debugging Notification Hubs solutions.\n\n* [How to use the .NET client library for Mobile Services](mobile-services-dotnet-how-to-use-client-library.md)\n  <br/>Learn more about how to use Mobile Services with Xamarin C# code.\n\n* [Mobile Services server script reference](mobile-services-how-to-use-server-scripts.md)\n  <br/>Learn more about how to implement business logic in your mobile service.\n\n<!-- URLs. -->\n[Get started with Mobile Services]: mobile-services-ios-get-started.md\n\n[Google Cloud Messaging Client Component]: http://components.xamarin.com/view/GCMClient/\n[Azure Mobile Services Component]: http://components.xamarin.com/view/azure-mobile-services/\n"
  },
  {
    "path": "docs/partner-xamarin-mobile-services-android-get-started-users.md",
    "content": "<properties\n\tpageTitle=\"Get started with authentication (Xamarin.Android) - Mobile Services\"\n\tdescription=\"Learn how to use authentication in your Azure Mobile Services app for Xamarin.Android.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"xamarin\"\n\tmanager=\"dwrede\"\n\tauthors=\"lindydonna\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-xamarin-android\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"donnam\"/>\n\n# Add authentication to your Mobile Services app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-users.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-users.md)\n- [(Android | Javascript)](mobile-services-android-get-started-users.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started-users.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-users.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-users.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-users.md)\n- [(HTML | Javascript)](mobile-services-html-get-started-users.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n<p>This topic shows you how to authenticate users in Azure Mobile Services from your Xamarin.Android app. In this tutorial, you add authentication to the quickstart project using an identity provider that is supported by Mobile Services. After being successfully authenticated and authorized by Mobile Services, the user ID value is displayed.</p>\n\nThis tutorial walks you through these basic steps to enable authentication in your app:\n\n1. [Register your app for authentication and configure Mobile Services]\n2. [Restrict table permissions to authenticated users]\n3. [Add authentication to the app]\n\nThis tutorial is based on the Mobile Services quickstart. You must also first complete the tutorial [Get started with Mobile Services].\n\nCompleting this tutorial requires Visual Studio with Xamarin on Windows or Xamarin Studio on Mac OS X. Complete installation instructions are on [Setup and Install for Visual Studio and Xamarin](https://msdn.microsoft.com/library/mt613162.aspx).\n\n## <a name=\"register\"></a>Register your app for authentication and configure Mobile Services\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Dashboard**, and make a note of the **Mobile Service URL** value.\n\n2. Register your app with one or more of the following authentication providers:\n   * [Google](./\nmobile-services-how-to-register-google-authentication.md)\n   * [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n   * [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n   * [Microsoft](./\nmobile-services-how-to-register-microsoft-authentication.md)\n   * [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md).\n\n    Make a note of the client identity and client secret values generated by the provider. Do not distribute or share the client secret.\n\n3. Back in the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Identity** > your identity provider settings, then enter the client ID and secret value from your provider.\n\nYou've now configured both your app and your mobile service to work with your auth provider. You may optionally repeat all these steps for each additional identity provider you'd like to support.\n\n> [AZURE.IMPORTANT] Verify that you've set the correct redirect URI on your identity provider's developer site. As described in the linked instructions for each provider above, the redirect URI may be different for a .NET backend service vs. for a JavaScript backend service. An incorrectly configured redirect URI may result in the login screen not being displayed properly and the app malfunctioning in unexpected ways.\n\n\n## <a name=\"permissions\"></a>Restrict permissions to authenticated users\n\n\n\nTo secure your endpoints, you must restrict access to only authenticated clients.\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), navigate to your mobile service, then click  **Data** > your table name (**TodoItem**) > **Permissions**.\n\n2. Set all of the table operation permissions to **Only authenticated users**.\n\n\t This ensures that all operations against the table require an authenticated user, which is required for this tutorial. You can set different permissions on each operations to support your specific scenario.  \n\n\n3. In Xamarin Studio, open the project that you created when you completed the tutorial [Get started with Mobile Services].\n\n4. From the **Run** menu, click **Start debugging** to start the app; verify that an unhandled exception with a status code of 401 (Unauthorized) is raised after the app starts.\n\n\t This happens because the app attempts to access Mobile Services as an unauthenticated user, but the _TodoItem_ table now requires authentication.\n\nNext, you will update the app to authenticate users before requesting resources from the mobile service.\n\n## <a name=\"add-authentication\"></a>Add authentication to the app\n\n1. Add the following property to the **ToDoActivity** class:\n\n\t\tprivate MobileServiceUser user;\n\n2. Add the following method to the **ToDoActivity** class:\n\n        private async Task Authenticate()\n        {\n            try\n            {\n                user = await client.LoginAsync(this, MobileServiceAuthenticationProvider.MicrosoftAccount);\n                CreateAndShowDialog(string.Format(\"you are now logged in - {0}\", user.UserId), \"Logged in!\");\n            }\n            catch (Exception ex)\n            {\n                CreateAndShowDialog(ex, \"Authentication failed\");\n            }\n        }\n\n    This creates a new method to handle the authentication process. The user is authenticated by using a Microsoft Account login. A dialog is displayed which displays the ID of the authenticated user. You cannot proceed without a positive authentication.\n\n    > [AZURE.NOTE] If you are using an identity provider other than Microsoft, change the value passed to the **login** method above to one of the following: _Facebook_, _Google_, _Twitter_, or _WindowsAzureActiveDirectory_.\n\n3. In the **OnCreate** method, add the following line of code after the code that instantiates the `MobileServiceClient` object.\n\n\t\tawait Authenticate();\n\n\tThis call starts the authentication process and awaits it asynchronously.\n\n4. Move the remaining code after `await Authenticate();` in the **OnCreate** method to a new **CreateTable** method, which looks like this:\n\n        private async Task CreateTable()\n        {\n\n            await InitLocalStoreAsync();\n\n            // Get the Mobile Service Table instance to use\n            toDoTable = client.GetSyncTable<ToDoItem>();\n\n            textNewToDo = FindViewById<EditText>(Resource.Id.textNewToDo);\n\n            // Create an adapter to bind the items with the view\n            adapter = new ToDoItemAdapter(this, Resource.Layout.Row_List_To_Do);\n            var listViewTodo = FindViewById<ListView>(Resource.Id.listViewToDo);\n            listViewTodo.Adapter = adapter;\n\n            // Load the items from the Mobile Service\n            await RefreshItemsFromTableAsync();\n        }\n\n5. Then call the new **CreateTable** method in **OnCreate** after the **Authenticate** call added in step 2:\n\n\t\tawait CreateTable();\n\n\n6. From the **Run** menu, click **Start debugging** to start the app and sign in with your chosen identity provider.\n\n   \tWhen you are successfully logged-in, the app should run without errors, and you should be able to query Mobile Services and make updates to data.\n\n## Get completed example\nDownload the [completed example project]. Be sure to update the **applicationURL** and **applicationKey** variables with your own Azure settings.\n\n## <a name=\"next-steps\"></a>Next steps\n\nIn the next tutorial, [Authorize users with scripts], you will take the user ID value provided by Mobile Services based on an authenticated user and use it to filter the data returned by Mobile Services.\n\n<!-- Anchors. -->\n[Register your app for authentication and configure Mobile Services]: #register\n[Restrict table permissions to authenticated users]: #permissions\n[Add authentication to the app]: #add-authentication\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n[4]: ./media/partner-xamarin-mobile-services-android-get-started-users/mobile-services-selection.png\n[5]: ./media/partner-xamarin-mobile-services-android-get-started-users/mobile-service-uri.png\n\n[13]: ./media/partner-xamarin-mobile-services-android-get-started-users/mobile-identity-tab.png\n[14]: ./media/partner-xamarin-mobile-services-android-get-started-users/mobile-portal-data-tables.png\n[15]: ./media/partner-xamarin-mobile-services-android-get-started-users/mobile-portal-change-table-perms.png\n\n<!-- URLs. -->\n[Get started with Mobile Services]: partner-xamarin-mobile-services-android-get-started.md\n[Authorize users with scripts]: mobile-services-javascript-backend-service-side-authorization.md\n[completed example project]: http://go.microsoft.com/fwlink/p/?LinkId=331328\n"
  },
  {
    "path": "docs/partner-xamarin-mobile-services-android-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Mobile Services for Xamarin.Android | Microsoft Azure\"\n\twriter=\"craigd\"\n\tdescription=\"Learn how to use Azure Mobile Services with your Xamarin.Android app.\"\n\tdocumentationCenter=\"xamarin\"\n\tauthors=\"lindydonna\"\n\tmanager=\"dwrede\"\n\teditor=\"\"\n\tservices=\"mobile-services\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-xamarin-android\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"hero-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"donnam\"/>\n\n# <a name=\"getting-started\"></a>Get started with Mobile Services\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis tutorial shows you how to add a cloud-based backend service to a Xamarin.Android app using Azure Mobile Services. In this tutorial, you will create both a new mobile service and a simple *To do list* app that stores app data in the new mobile service.\n\nIf you prefer to watch a video, the clip below follows the same steps on this tutorial.\n\nVideo: \"Getting Started with Xamarin and Azure Mobile Services\" with Craig Dunn, developer evangelist for Xamarin  (duration: 10:05 min)\n\n> [AZURE.VIDEO getting-started-with-xamarin-and-mobile-services]\n\nA screenshot from the completed app is below:\n\n![][0]\n\nCompleting this tutorial requires XCode and Xamarin Studio for OS X or Visual Studio on Windows with a networked Mac. Complete installation instructions are on [Setup and Install for Visual Studio and Xamarin](https://msdn.microsoft.com/library/mt613162.aspx).\n\nThe downloaded quickstart project contains the Azure Mobile services component for Xamarin.Android. While this project targets Android 4.2 or a later version, the Mobile Services SDK requires only Android 2.2 or a later version.\n\n> [AZURE.IMPORTANT] To complete this tutorial, you need an Azure account. If you don't have an account, you can sign up for an Azure trial and get up to 10 free mobile services that you can keep using even after your trial ends. For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=A9C9624B5).\n\n## <a name=\"create-new-service\"> </a>Create a new mobile service\n\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** dialog, select **Create a free 20 MB SQL Database**, select **JavaScript** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t>[AZURE.NOTE]As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n\n## Create a new Xamarin.Android app\n\nOnce you have created your mobile service, you can follow an easy quickstart in the Azure classic portal to either create a new app or modify an existing app to connect to your mobile service.\n\nIn this section you will create a new Xamarin.Android app that is connected to your mobile service.\n\n1.  In the [Azure classic portal], click **Mobile Services**, and then click the mobile service that you just created.\n\n2. In the quickstart tab, click **Xamarin.Android** under **Choose platform** and expand **Create a new Android app**.\n\n\t![][6]\n\n\tThis displays the three easy steps to create a Xamarin.Android app connected to your mobile service.\n\n\t![][7]\n\n3. Click **Create TodoItem table** to create a table to store app data.\n\n4. Under **Download and run app**, click **Download**.\n\n\tThis downloads the project for the sample _To do list_ application that is connected to your mobile service. Save the compressed project file to your local computer, and make a note of where you save it.\n\n## Run your Android app\n\nThe final stage of this tutorial is to build and run your new app.\n\n1. Browse to the location where you saved the compressed project files and expand the files on your computer.\n\n2. In Xamarin Studio or Visual Studio, click **File** then **Open**, navigate to the uncompressed sample files, and select **XamarinTodoQuickStart.Android.sln** to open it.\n\n3. Press the **Run** button to build the project and start the app. You will be asked to select an emulator or a connected USB device.\n\n\t> [AZURE.NOTE] To be able to run the project in the Android emulator, you must define at least one Android Virtual Device (AVD). Use the AVD Manager to create and manage these devices.\n\n4. In the app, type meaningful text, such as _Complete the tutorial_, and then click **Add**.\n\n\t![][10]\n\n\tThis sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the TodoItem table. Items stored in the table are returned by the mobile service, and the data is displayed in the list.\n\n\t> [AZURE.NOTE]\n   \t> You can review the code that accesses your mobile service to query and insert data, which is found in the ToDoActivity.cs C# file.\n\n6. Back in the [Azure classic portal], click the **Data** tab and then click the **TodoItems** table.\n\n\t![][11]\n\n\tThis lets you browse the data inserted by the app into the table.\n\n\t![][12]\n\n## <a name=\"next-steps\"> </a>Next Steps\nNow that you have completed the quickstart, learn how to perform additional important tasks in Mobile Services:\n\n* [Get started with offline data sync]\n  Learn how the quickstart uses offline data sync to make the app responsive and robust.\n\n* [Get started with authentication]\n  Learn how to authenticate users of your app with an identity provider.\n\n* [Get started with push notifications]\n  Learn how to send a very basic push notification to your app.\n\n<!-- Anchors. -->\n[Getting started with Mobile Services]:#getting-started\n[Create a new mobile service]:#create-new-service\n[Define the mobile service instance]:#define-mobile-service-instance\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n[0]: ./media/partner-xamarin-mobile-services-android-get-started/mobile-quickstart-completed-android.png\n[2]: ./media/partner-xamarin-mobile-services-android-get-started/mobile-create.png\n[3]: ./media/partner-xamarin-mobile-services-android-get-started/mobile-create-page1.png\n[4]: ./media/partner-xamarin-mobile-services-android-get-started/mobile-create-page2.png\n[5]: ./media/partner-xamarin-mobile-services-android-get-started/obile-services-selection.png\n[6]: ./media/partner-xamarin-mobile-services-android-get-started/mobile-portal-quickstart-xamarin-android.png\n[7]: ./media/partner-xamarin-mobile-services-android-get-started/mobile-quickstart-steps-xamarin-android.png\n[8]: ./media/partner-xamarin-mobile-services-android-get-started/mobile-xamarin-project-android-xs.png\n[9]: ./media/partner-xamarin-mobile-services-android-get-started/mobile-xamarin-project-android-vs.png\n[10]: ./media/partner-xamarin-mobile-services-android-get-started/mobile-quickstart-startup-android.png\n[11]: ./media/partner-xamarin-mobile-services-android-get-started/mobile-data-tab.png\n[12]: ./media/partner-xamarin-mobile-services-android-get-started/mobile-data-browse.png\n[13]: ./media/partner-xamarin-mobile-services-android-get-started/mobile-services-diagram.png\n\n\n<!-- URLs. -->\n[Get started with data]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-data-xamarin-android\n[Get started with offline data sync]: mobile-services-xamarin-android-get-started-offline-data.md\n[Get started with authentication]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-users-xamarin-android\n[Get started with push notifications]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-push-xamarin-android\n[Mobile Services Android SDK]: https://go.microsoft.com/fwLink/p/?LinkID=266533\n[Azure]: http://azure.microsoft.com/\n[Azure classic portal]: https://manage.windowsazure.com/\n"
  },
  {
    "path": "docs/partner-xamarin-mobile-services-ios-get-started-push.md",
    "content": "<properties\n\tpageTitle=\"Add push notifications to your Mobile Services app (Xamarin.iOS) - Mobile Services\"\n\tdescription=\"Learn how to use push notifications in Xamarin.iOS apps with Azure Mobile Services.\"\n\tdocumentationCenter=\"xamarin\"\n\tauthors=\"ysxu\"\n\tmanager=\"dwrede\"\n\tservices=\"mobile-services\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-xamarin-ios\"\n\tms.devlang=\"objective-c\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"yuaxu\"/>\n\n# Add push notifications to your Mobile Services app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-push.md)\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-javascript-backend-windows-phone-get-started-push.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started-push.md)\n- [(Android | Javascript)](mobile-services-javascript-backend-android-get-started-push.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-push.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-push.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-push.md)\n- [(Xamarin.Forms | JavaScript)](partner-xamarin-mobile-services-xamarin-forms-get-started-push.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Overview\n\nThis topic shows you how to use Azure Mobile Services to send push notifications to a Xamarin.iOS 8 app. In this tutorial you add push notifications using the Apple Push Notification service (APNS) to the [Get started with Mobile Services] project. When complete, your mobile service will send a push notification each time a record is inserted.\n\nThis tutorial requires the following:\n\n+ An iOS 8 device (you cannot test push notifications in the iOS Simulator)\n+ iOS Developer Program membership\n+ [Xamarin Studio]\n+ [Azure Mobile Services Component]\n\n>[AZURE.IMPORTANT] Because of APNS requirements, you must deploy and test push notifications on an iOS capable device (iPhone or iPad) instead of in the emulator.\n\nAPNS uses certificates to authenticate your mobile service. Follow these instructions to create the necessary certificates and upload it to your Mobile Service. For the official APNS feature documentation, see [Apple Push Notification Service].\n\n## <a name=\"certificates\"></a>Generate the Certificate Signing Request file\n\nFirst you must generate the Certificate Signing Request (CSR) file, which is used by Apple to generate a signed certificate.\n\n1. From Utilities, run the **Keychain Access tool**.\n\n2. Click **Keychain Access**, expand **Certificate Assistant**, then click **Request a Certificate from a Certificate Authority...**.\n\n    ![][5]\n\n3. Enter your **User Email Address**, type in a **Common Name** value, make sure that **Saved to disk** is selected, and then click **Continue**.\n\n    ![][6]\n\n4. Type a name for the Certificate Signing Request (CSR) file in **Save As**, select the location in **Where**, then click **Save**.\n\n    ![][7]\n\n    Remember the location you chose.\n\nNext, you will register your app with Apple, enable push notifications, and upload this exported CSR to create a push certificate.\n\n## <a name=\"register\"></a>Register your app for push notifications\n\nTo be able to send push notifications to an iOS app from mobile services, you must register your application with Apple and register for push notifications.\n\n1. If you have not already registered your app, navigate to the <a href=\"http://go.microsoft.com/fwlink/p/?LinkId=272456\" target=\"_blank\">iOS Provisioning Portal</a> at the Apple Developer Center, log on with your Apple ID, click **Identifiers**, then click **App IDs**, and finally click on the **+** sign to create an app ID for your app.\n\n    ![][102]\n\n2. Type a name for your app in **Description**, enter and remember the unique **Bundle Identifier**, check the \"Push Notifications\" option in the \"App Services\" section, and then click **Continue**. This example uses the ID **MobileServices.Quickstart** but you may not reuse this same ID, as app IDs must be unique across all users. As such, it is recommended that you append your full name or initials after the app name.\n\n    ![][103]\n\n    This generates your app ID and requests you to **Submit** the information. Click **Submit**.\n\n    ![][104]\n\n    Once you click **Submit**, you will see the **Registration complete** screen, as shown below. Click **Done**.\n\n    ![][105]\n\n3. Locate the app ID that you just created, and click on its row.\n\n    ![][106]\n\n    Clicking on the app ID will display details on the app and app ID. Click the **Settings** button.\n\n    ![][107]\n\n4. Scroll to the bottom of the screen, and click the **Create Certificate...** button under the section **Development Push SSL Certificate**.\n\n    ![][108]\n\n    This displays the \"Add iOS Certificate\" assistant.\n\n    Note: This tutorial uses a development certificate. The same process is used when registering a production certificate. Just make sure that you set the same certificate type when you upload the certificate to Mobile Services.\n\n5. Click **Choose File**, browse to the location where you saved the CSR file earlier, then click **Generate**.\n\n    ![][110]\n\n6. After the certificate is created by the portal, click the **Download** button, and click **Done**.\n\n    ![][111]\n\n    This downloads the signing certificate and saves it to your computer in your Downloads folder.\n\n    ![][9]\n\n    Note: By default, the downloaded file a development certificate is named <strong>aps_development.cer</strong>.\n\n7. Double-click the downloaded push certificate **aps_development.cer**.\n\n    This installs the new certificate in the Keychain, as shown below:\n\n    ![][10]\n\n    Note: The name in your certificate might be different, but it will be prefixed with <strong>Apple Development iOS Push Notification Services:</strong>.\n\nLater, you will use this certificate to generate a .p12 file and upload it to Mobile Services to enable authentication with APNS.\n\n## <a name=\"profile\"></a>Create a provisioning profile for the app\n\n1. Back in the <a href=\"http://go.microsoft.com/fwlink/p/?LinkId=272456\" target=\"_blank\">iOS Provisioning Portal</a>, select **Provisioning Profiles**, select **All**, and then click the **+** button to create a new profile. This launches the **Add iOS Provisiong Profile** Wizard.\n\n    ![][112]\n\n2. Select **iOS App Development** under **Development** as the provisiong profile type, and click **Continue**.\n\n3. Next, select the app ID for the Mobile Services Quickstart app from the **App ID** drop-down list, and click **Continue**.\n\n    ![][113]\n\n4. In the **Select certificates** screen, select the certificate created earlier, and click **Continue**.\n\n    ![][114]\n\n5. Next, select the **Devices** to use for testing, and click **Continue**.\n\n    ![][115]\n\n6. Finally, pick a name for the profile in **Profile Name**, click **Generate**, and click **Done**.\n\n    ![][116]\n\n    This creates a new provisioning profile.\n\n    ![][117]\n\n## <a name=\"configure-mobileServices\"></a>Configure Mobile Services to send push requests\n\nAfter you have registered your app with APNS and configured your project, you must next configure your mobile service to integrate with APNS.\n\n1. In Keychain Access, right-click the new certificate, click **Export**, name your file, select the **.p12** format, then click **Save**.\n\n    ![][28]\n\n    Make a note of the file name and location of the exported certificate.\n\n2. Log on to the [Azure classic portal], click **Mobile Services**, and then click your app.\n\n    ![][18]\n\n3. Click the **Push** tab and click **Upload** under **apple push notification settings**.\n\n    ![][19]\n\n    This displays the Upload Certificate dialog.\n\n4. Click **File**, select the exported certificate .p12 file, enter the **Password**, make sure that the correct **Mode** is selected, click the check icon, then click **Save**.\n\n    ![][20]\n\nYour mobile service is now configured to work with APNS.\n\n## <a name=\"configure-app\"></a>Configure your Xamarin.iOS application\n\n1. In Xamarin.Studio, open **Info.plist**, and update the **Bundle Identifier** with the ID you created earlier.\n\n    ![][121]\n\n2. Scroll down to **Background Modes** and check the **Enable Background Modes** box and the **Remote notifications** box.\n\n    ![][122]\n\n3. Double click your project in the Solution Panel to open **Project Options**.\n\n4.  Choose **iOS Bundle Signing** under **Build**, and select the corresponding **Identity** and **Provisioning profile** you had just set up for this project.\n\n    ![][120]\n\n    This ensures that the Xamarin project uses the new profile for code signing. For the official Xamarin device provisioning documentation, see [Xamarin Device Provisioning].\n\n## <a name=\"add-push\"></a>Add push notifications to your app\n\n1. In Xamarin.Studio, open the AppDelegate.cs file and add the following property:\n\n        public string DeviceToken { get; set; }\n\n2. Open the **TodoItem** class and add the following property:\n\n        [JsonProperty(PropertyName = \"deviceToken\")]\n        public string DeviceToken { get; set; }\n\n3. In **QSTodoService**, override the existing client declaration to be:\n\n        public MobileServiceClient client { get; private set; }\n\n4. Then add the following method so **AppDelegate** can acquire the client later to register push notifications:\n\n        public MobileServiceClient GetClient {\n            get{\n                return client;\n            }\n        }\n\n5. In **AppDelegate**, override the **FinishedLaunching** event:\n\n        public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)\n        {\n            // registers for push for iOS8\n            var settings = UIUserNotificationSettings.GetSettingsForTypes(\n                UIUserNotificationType.Alert\n                | UIUserNotificationType.Badge\n                | UIUserNotificationType.Sound,\n                new NSSet());\n\n            UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);\n            UIApplication.SharedApplication.RegisterForRemoteNotifications();\n\n            return true;\n        }\n\n6. In **AppDelegate**, override the **RegisteredForRemoteNotifications** event:\n\n        public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)\n        {\n            // Modify device token\n            DeviceToken = deviceToken.Description;\n            DeviceToken = DeviceToken.Trim ('<', '>').Replace (\" \", \"\");\n\n            // Get Mobile Services client\n            MobileServiceClient client = QSTodoService.DefaultService.GetClient;\n\n            // Register for push with Mobile Services\n            IEnumerable<string> tag = new List<string>() { \"uniqueTag\" };\n            var push = client.GetPush ();\n            push.RegisterNativeAsync (DeviceToken, tag);\n        }\n\n7. In **AppDelegate**, override the **ReceivedRemoteNotification** event:\n\n        public override void ReceivedRemoteNotification(UIApplication application, NSDictionary userInfo)\n        {\n            Debug.WriteLine(userInfo.ToString());\n            NSObject inAppMessage;\n\n            bool success = userInfo.TryGetValue(new NSString(\"inAppMessage\"), out inAppMessage);\n\n            if (success)\n            {\n                var alert = new UIAlertView(\"Got push notification\", inAppMessage.ToString(), null, \"OK\", null);\n                alert.Show();\n            }\n        }\n\n8. In **QSTodoListViewController**, modify the **OnAdd** action to get the device token stored in **AppDelegeate**, and store it into the **TodoItem** being added.\n\n        string deviceToken = ((AppDelegate)UIApplication.SharedApplication.Delegate).DeviceToken;\n\n        var newItem = new TodoItem()\n        {\n            Text = itemText.Text,\n            Complete = false,\n            DeviceToken = deviceToken\n        };\n\nYour app is now updated to support push notifications.\n\n## <a name=\"update-scripts\"></a>Update the registered insert script in the Azure classic portal\n\n1. In the [Azure classic portal], click the **Data** tab and then click the **TodoItem** table.\n\n    ![][21]\n\n2. In **todoitem**, click the **Script** tab and select **Insert**.\n\n    ![][22]\n\n    This displays the function that is invoked when an insert occurs in the **TodoItem** table.\n\n3. Replace the insert function with the following code, and then click **Save**:\n\n        function insert(item, user, request) {\n            request.execute();\n            // Set timeout to delay the notification, to provide time for the\n            // app to be closed on the device to demonstrate toast notifications\n            setTimeout(function() {\n                push.apns.send(\"uniqueTag\", {\n                    alert: \"Toast: \" + item.text,\n                    payload: {\n                        inAppMessage: \"Hey, a new item arrived: '\" + item.text + \"'\"\n                    }\n                });\n            }, 2500);\n        }\n\n    This registers a new insert script, which uses the [apns object] to send a push notification (the inserted text) to the device provided in the insert request.\n\n   >[AZURE.NOTE] This script delays sending the notification to give you time to close the app to receive a toast notification.\n\n## <a name=\"test\"></a>Test push notifications in your app\n\n1. Press the **Run** button to build the project and start the app in an iOS capable device, then click **OK** to accept push notifications\n\n    ![][23]\n\n   >[AZURE.NOTE] You must explicitly accept push notifications from your app. This request only occurs the first time that the app runs.\n\n2. In the app, type meaningful text, such as _A new Mobile Services task_ and then click the plus (**+**) icon.\n\n    ![][24]\n\n3. Verify that a notification is received, then click **OK** to dismiss the notification.\n\n    ![][25]\n\n4. Repeat step 2 and immediately close the app, then verify that the following toast is shown.\n\n    ![][26]\n\nYou have successfully completed this tutorial.\n\n<!-- Anchors. -->\n[Generate the certificate signing request]: #certificates\n[Register your app and enable push notifications]: #register\n[Create a provisioning profile for the app]: #profile\n[Configure Mobile Services]: #configure-mobileServices\n[Configure the Xamarin.iOS App]: #configure-app\n[Update scripts to send push notifications]: #update-scripts\n[Add push notifications to the app]: #add-push\n[Insert data to receive notifications]: #test\n\n<!-- Images. -->\n\n[5]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-step5.png\n[6]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-step6.png\n[7]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-step7.png\n\n[9]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-step9.png\n[10]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-step10.png\n\n[17]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-step17.png\n[18]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-selection.png\n[19]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-push-tab-ios.png\n[20]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-push-tab-ios-upload.png\n[21]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-portal-data-tables.png\n[22]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-insert-script-push2.png\n[23]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-quickstart-push1-ios.png\n[24]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-quickstart-push2-ios.png\n[25]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-quickstart-push3-ios.png\n[26]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-quickstart-push4-ios.png\n[28]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-step18.png\n\n[101]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-01.png\n[102]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-02.png\n[103]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-03.png\n[104]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-04.png\n[105]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-05.png\n[106]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-06.png\n[107]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-07.png\n[108]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-08.png\n\n[110]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-10.png\n[111]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-11.png\n[112]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-12.png\n[113]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-13.png\n[114]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-14.png\n[115]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-15.png\n[116]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-16.png\n[117]: ./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-17.png\n\n[120]:./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-20.png\n[121]:./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-21.png\n[122]:./media/partner-xamarin-mobile-services-ios-get-started-push/mobile-services-ios-push-22.png\n\n[Install Xcode]: https://go.microsoft.com/fwLink/p/?LinkID=266532\n[iOS Provisioning Portal]: http://go.microsoft.com/fwlink/p/?LinkId=272456\n[Mobile Services iOS SDK]: https://go.microsoft.com/fwLink/p/?LinkID=266533\n[Apple Push Notification Service]: http://go.microsoft.com/fwlink/p/?LinkId=272584\n[Get started with Mobile Services]: mobile-services-ios-get-started.md\n\n[Xamarin Device Provisioning]: http://developer.xamarin.com/guides/ios/getting_started/installation/device_provisioning/\n\n\n[Azure classic portal]: https://manage.windowsazure.com/\n[apns object]: http://go.microsoft.com/fwlink/p/?LinkId=272333\n[Azure Mobile Services Component]: http://components.xamarin.com/view/azure-mobile-services/\n[completed example project]: http://go.microsoft.com/fwlink/p/?LinkId=331303\n[Xamarin Studio]: http://xamarin.com/download\n"
  },
  {
    "path": "docs/partner-xamarin-mobile-services-ios-get-started-users.md",
    "content": "<properties\n\tpageTitle=\"Get started with authentication (Xamarin.iOS) - Mobile Services\"\n\tdescription=\"Learn how to use authentication in your Azure Mobile Services app for Xamarin.iOS.\"\n\tdocumentationCenter=\"xamarin\"\n\tservices=\"mobile-services\"\n\tmanager=\"dwrede\"\n\tauthors=\"lindydonna\"\n\teditor=\"\"/>\n\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-xamarin-ios\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"donnam\"/>\n\n# Add authentication to your Mobile Services app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-users.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-users.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-windows-phone-get-started-users.md)\n- [(Android | Javascript)](mobile-services-android-get-started-users.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started-users.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-users.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-users.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-users.md)\n- [(HTML | Javascript)](mobile-services-html-get-started-users.md)\n\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis topic shows you how to authenticate users in Azure Mobile Services from your app.  In this tutorial, you add authentication to the quickstart project using an identity provider that is supported by Mobile Services. After being successfully authenticated and authorized by Mobile Services, the user ID value is displayed.\n\nThis tutorial walks you through these basic steps to enable authentication in your app:\n\n1. [Register your app for authentication and configure Mobile Services]\n2. [Restrict table permissions to authenticated users]\n3. [Add authentication to the app]\n\nThis tutorial is based on the Mobile Services quickstart. You must also first complete the tutorial [Get started with Mobile Services].\n\nCompleting this tutorial requires [Xamarin Studio], XCode 6.0, and iOS 7.0 or later versions.\n\n## <a name=\"register\"></a>Register your app for authentication and configure Mobile Services\n\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Dashboard**, and make a note of the **Mobile Service URL** value.\n\n2. Register your app with one or more of the following authentication providers:\n   * [Google](./\nmobile-services-how-to-register-google-authentication.md)\n   * [Facebook](./\nmobile-services-how-to-register-facebook-authentication.md)\n   * [Twitter](./\nmobile-services-how-to-register-twitter-authentication.md)\n   * [Microsoft](./\nmobile-services-how-to-register-microsoft-authentication.md)\n   * [Azure Active Directory](./\nmobile-services-how-to-register-active-directory-authentication.md).\n\n    Make a note of the client identity and client secret values generated by the provider. Do not distribute or share the client secret.\n\n3. Back in the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services** > your mobile service > **Identity** > your identity provider settings, then enter the client ID and secret value from your provider.\n\nYou've now configured both your app and your mobile service to work with your auth provider. You may optionally repeat all these steps for each additional identity provider you'd like to support.\n\n> [AZURE.IMPORTANT] Verify that you've set the correct redirect URI on your identity provider's developer site. As described in the linked instructions for each provider above, the redirect URI may be different for a .NET backend service vs. for a JavaScript backend service. An incorrectly configured redirect URI may result in the login screen not being displayed properly and the app malfunctioning in unexpected ways.\n\n\n## <a name=\"permissions\"></a>Restrict permissions to authenticated users\n\n\n\nTo secure your endpoints, you must restrict access to only authenticated clients.\n\n1. In the [Azure classic portal](https://manage.windowsazure.com/), navigate to your mobile service, then click  **Data** > your table name (**TodoItem**) > **Permissions**.\n\n2. Set all of the table operation permissions to **Only authenticated users**.\n\n\t This ensures that all operations against the table require an authenticated user, which is required for this tutorial. You can set different permissions on each operations to support your specific scenario.  \n\n\n3. In Xcode, open the project that you created when you completed the tutorial [Get started with Mobile Services].\n\n4. Press the **Run** button to build the project and start the app in the iPhone emulator; verify that an unhandled exception with a status code of 401 (Unauthorized) is raised after the app starts.\n\n   \tThis happens because the app attempts to access Mobile Services as an unauthenticated user, but the _TodoItem_ table now requires authentication.\n\nNext, you will update the app to authenticate users before requesting resources from the mobile service.\n\n## <a name=\"add-authentication\"></a>Add authentication to the app\n\n1. Open the **QSToDoService** project file and add the following variables\n\n\t\t// Mobile Service logged in user\n\t\tprivate MobileServiceUser user;\n\t\tpublic MobileServiceUser User { get { return user; } }\n\n2. Then add a new method named **Authenticate** to **ToDoService** defined as:\n\n        private async Task Authenticate(MonoTouch.UIKit.UIViewController view)\n        {\n            try\n            {\n                user = await client.LoginAsync(view, MobileServiceAuthenticationProvider.MicrosoftAccount);\n            }\n            catch (Exception ex)\n            {\n                Console.Error.WriteLine (@\"ERROR - AUTHENTICATION FAILED {0}\", ex.Message);\n            }\n        }\n\n\t> [AZURE.NOTE] If you are using an identity provider other than a Microsoft Account, change the value passed to **LoginAsync** above to one of the following: _Facebook_, _Twitter_, _Google_, or _WindowsAzureActiveDirectory_.\n\n3. Move the request for the **ToDoItem** table from the **ToDoService** constructor into a new method named **CreateTable**:\n\n        private async Task CreateTable()\n        {\n            // Create an MSTable instance to allow us to work with the ToDoItem table\n            todoTable = client.GetSyncTable<ToDoItem>();\n        }\n\n4. Create a new asynchronous public method named **LoginAndGetData** defined as:\n\n        public async Task LoginAndGetData(MonoTouch.UIKit.UIViewController view)\n        {\n            await Authenticate(view);\n            await CreateTable();\n        }\n\n5. In the **TodoListViewController** override the **ViewDidAppear** method and define it as found below. This logs in the user if the **ToDoService** doesn't yet have a handle on the user:\n\n        public override async void ViewDidAppear(bool animated)\n        {\n            base.ViewDidAppear(animated);\n\n            if (QSTodoService.DefaultService.User == null)\n            {\n                await QSTodoService.DefaultService.LoginAndGetData(this);\n            }\n\n            if (QSTodoService.DefaultService.User == null)\n            {\n                // TODO:: show error\n                return;\n            }\n\n\n            await RefreshAsync();\n        }\n6. Remove the original call to **RefreshAsync** from **TodoListViewController.ViewDidLoad**.\n\n7. Press the **Run** button to build the project, start the app in the iPhone emulator, then log-on with your chosen identity provider.\n\n   \tWhen you are successfully logged-in, the app should run without errors, and you should be able to query Mobile Services and make updates to data.\n\n## Get completed example\nDownload the [completed example project]. Be sure to update the **applicationURL** and **applicationKey** variables with your own Azure settings.\n\n## <a name=\"next-steps\"></a>Next steps\n\nIn the next tutorial, [Authorize users with scripts], you will take the user ID value provided by Mobile Services based on an authenticated user and use it to filter the data returned by Mobile Services.\n\n<!-- Anchors. -->\n[Register your app for authentication and configure Mobile Services]: #register\n[Restrict table permissions to authenticated users]: #permissions\n[Add authentication to the app]: #add-authentication\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n[4]: ./media/partner-xamarin-mobile-services-ios-get-started-users/mobile-services-selection.png\n[5]: ./media/partner-xamarin-mobile-services-ios-get-started-users/mobile-service-uri.png\n[13]: ./media/partner-xamarin-mobile-services-ios-get-started-users/mobile-identity-tab.png\n[14]: ./media/partner-xamarin-mobile-services-ios-get-started-users/mobile-portal-data-tables.png\n[15]: ./media/partner-xamarin-mobile-services-ios-get-started-users/mobile-portal-change-table-perms.png\n\n<!-- URLs. TODO:: update completed example project link with project download -->\n[Submit an app page]: http://go.microsoft.com/fwlink/p/?LinkID=266582\n[My Applications]: http://go.microsoft.com/fwlink/p/?LinkId=262039\n[Live SDK for Windows]: http://go.microsoft.com/fwlink/p/?LinkId=262253\n\n[Get started with Mobile Services]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-xamarin-ios\n[Get started with data]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-data-xamarin-ios\n[Get started with authentication]: https://azure.microsoft.com/develop/mobile/tutorials/get-started-with-users-xamarin-ios\n[Get started with push notifications]: https://azure.microsoft.com/develop/mobile/tutorials/-get-started-with-push-xamarin-ios\n[Authorize users with scripts]: https://azure.microsoft.com/develop/mobile/tutorials/authorize-users-in-scripts-xamarin-ios\n[completed example project]: http://go.microsoft.com/fwlink/p/?LinkId=331328\n[Xamarin Studio]: http://xamarin.com/download\n"
  },
  {
    "path": "docs/partner-xamarin-mobile-services-ios-get-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with Mobile Services for Xamarin iOS apps | Microsoft Azure\"\n\tdescription=\"Follow this tutorial to get started using Azure Mobile Services for Xamarin iOS development.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"xamarin\"\n\tauthors=\"conceptdev\"\n\tmanager=\"dwrede\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"mobile-xamarin-ios\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"hero-article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"craig.dunn@xamarin.com\"/>\n\n# <a name=\"getting-started\"> </a>Get started with Mobile Services\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started.md)\n- [(iOS | JavaScript)](mobile-services-ios-get-started.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-store-dotnet-get-started.md)\n- [(Windows Runtime 8.1 universal JavaScript | Javascript)](mobile-services-javascript-backend-windows-store-javascript-get-started.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started.md)\n- [(Android | Javascript)](mobile-services-android-get-started.md)\n- [(Xamarin.iOS | .NET)](mobile-services-dotnet-backend-xamarin-ios-get-started.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started.md)\n- [(HTML | Javascript)](mobile-services-html-get-started.md)\n- [(PhoneGap | Javascript)](mobile-services-javascript-backend-phonegap-get-started.md)\n- [(Sencha | Javascript)](partner-sencha-mobile-services-get-started.md)\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThis tutorial shows you how to add a cloud-based backend service to a Xamarin.iOS app using Azure Mobile Services. In this tutorial, you will create both a new mobile service and a simple *To do list* app that stores app data in the new mobile service.\n\nIf you prefer to watch a video, the clip below follows the same steps as this tutorial.\n\nVideo: \"Getting Started with Xamarin and Azure Mobile Services\" with Craig Dunn, developer evangelist for Xamarin  (duration: 10:05 min)\n\n> [AZURE.VIDEO getting-started-with-xamarin-and-mobile-services]\n\nA screenshot from the completed app is below:\n\n![][0]\n\nCompleting this tutorial requires XCode and Xamarin Studio for OS X or Visual Studio on Windows with a networked Mac. Complete installation instructions are on [Setup and Install for Visual Studio and Xamarin](https://msdn.microsoft.com/library/mt613162.aspx).\n\n> [AZURE.IMPORTANT] To complete this tutorial, you need an Azure account. If you don't have an account, you can sign up for an Azure trial and get up to 10 free mobile services that you can keep using even after your trial ends. For details, see [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/).\n\n## <a name=\"create-new-service\"> </a>Create a new mobile service\n\n\n\nFollow these steps to create a new mobile service.\n\n1.\tLog into the [Azure classic portal](https://manage.windowsazure.com/). At the bottom of the navigation pane, click **+NEW**. Expand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![](./media/mobile-services-create-new-service/mobile-create.png)\n\n\tThis displays the **Create a Mobile Service** dialog.\n\n2.\tIn the **Create a Mobile Service** dialog, select **Create a free 20 MB SQL Database**, select **JavaScript** runtime, then type a subdomain name for the new mobile service in the **URL** textbox. Click the right arrow button to go to the next page.\n\n\t![](./media/mobile-services-create-new-service/mobile-create-page1.png)\n\n\tThis displays the **Specify database settings** page.\n\n\t>[AZURE.NOTE]As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n3.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\t![](./media/mobile-services-create-new-service/mobile-create-page2.png)\n\nYou have now created a new mobile service that can be used by your mobile apps.\n\n\n## Create a new Xamarin.iOS app\n\nOnce you have created your mobile service, you can follow an easy quickstart in the Azure classic portal to either create a new app or modify an existing app to connect to your mobile service.\n\nIn this section you will create a new Xamarin.iOS app that is connected to your mobile service.\n\n1.  In the [Azure classic portal], click **Mobile Services**, and then click the mobile service that you just created.\n\n2. In the quickstart tab, click **Xamarin.iOS** under **Choose platform** and expand **Create a new Xamarin.iOS app**.\n\n\t![][6]\n\n\tThis displays the three easy steps to create a Xamarin.iOS app connected to your mobile service.\n\n  \t![][7]\n\n3. If you haven't already done so, download and install Xcode (we recommend the latest version, Xcode 6.0, or newer) and [Xamarin Studio].\n\n4. Click **Create TodoItems table** to create a table to store app data.\n\n5. Under **Download and run app**, click **Download**.\n\n\tThis downloads the project for the sample _To do list_ application that is connected to your mobile service and references the Azure Mobile Services component for Xamarin.iOS. Save the compressed project file to your local computer, and make a note of where you saved it.\n\n## Run your new Xamarin.iOS app\n\nThe final stage of this tutorial is to build and run your new app.\n\n1. Browse to the location where you saved the compressed project files, expand the files on your computer, and open the **XamarinTodoQuickStart.iOS.sln** solution file using Xamarin Studio or Visual Studio.\n\n\t![][8]\n\n\t![][9]\n\n2. Press the **Run** button to build the project and start the app in the iPhone emulator, which is the default for this project.\n\n3. In the app, type meaningful text, such as _Complete the tutorial_ and then click the plus (**+**) icon.\n\n\t![][10]\n\n\tThis sends a POST request to the new mobile service hosted in Azure. Data from the request is inserted into the TodoItem table. Items stored in the table are returned by the mobile service, and the data is displayed in the list.\n\n\t> [AZURE.NOTE] You can review the code that accesses your mobile service to query and insert data, which is found in the TodoService.cs C# file.\n\n4. Back in the [Azure classic portal], click the **Data** tab and then click the **TodoItems** table.\n\n\t![][11]\n\n\tThis lets you browse the data inserted by the app into the table.\n\n\t![][12]\n\n\n## Next Steps\nNow that you have completed the quickstart, learn how to perform additional important tasks in Mobile Services:\n\n* [Get started with offline data sync]\n  Learn how the quickstart uses offline data sync to make the app responsive and robust.\n\n* [Get started with authentication]\n  Learn how to authenticate users of your app with an identity provider.\n\n* [Get started with push notifications]\n  Learn how to send a very basic push notification to your app.\n\n<!-- Anchors. -->\n[Getting started with Mobile Services]:#getting-started\n[Create a new mobile service]:#create-new-service\n[Define the mobile service instance]:#define-mobile-service-instance\n[Next Steps]:#next-steps\n\n<!-- Images. -->\n[0]: ./media/partner-xamarin-mobile-services-ios-get-started/mobile-quickstart-completed-ios.png\n[6]: ./media/partner-xamarin-mobile-services-ios-get-started/mobile-portal-quickstart-xamarin-ios.png\n[7]: ./media/partner-xamarin-mobile-services-ios-get-started/mobile-quickstart-steps-xamarin-ios.png\n[8]: ./media/partner-xamarin-mobile-services-ios-get-started/mobile-xamarin-project-ios-xs.png\n[9]: ./media/partner-xamarin-mobile-services-ios-get-started/mobile-xamarin-project-ios-vs.png\n[10]: ./media/partner-xamarin-mobile-services-ios-get-started/mobile-quickstart-startup-ios.png\n[11]: ./media/partner-xamarin-mobile-services-ios-get-started/mobile-data-tab.png\n[12]: ./media/partner-xamarin-mobile-services-ios-get-started/mobile-data-browse.png\n\n\n<!-- URLs. -->\n[Get started with offline data sync]: mobile-services-xamarin-ios-get-started-offline-data.md\n[Get started with authentication]: partner-xamarin-mobile-services-ios-get-started-users.md\n[Get started with push notifications]: partner-xamarin-mobile-services-ios-get-started-push.md\n\n[Xamarin Studio]: http://xamarin.com/download\n[Mobile Services iOS SDK]: https://go.microsoft.com/fwLink/p/?LinkID=266533\n\n[Azure classic portal]: https://manage.windowsazure.com/\n"
  },
  {
    "path": "docs/partner-xamarin-mobile-services-xamarin-forms-get-started-push.md",
    "content": " <properties\n\tpageTitle=\"Add push notifications to your Mobile Services app (Xamarin.Forms) - Mobile Services\"\n\tdescription=\"Learn how to use push notifications in Xamarin.Forms apps with Azure Mobile Services.\"\n\tdocumentationCenter=\"xamarin\"\n\tauthors=\"wesmc7777\"\n\tmanager=\"dwrede\"\n\tservices=\"mobile-services\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.tgt_pltfrm=\"mobile-xamarin\"\n\tms.workload=\"mobile\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"wesmc\"/>\n\n# Add push notifications to your Xamarin.Forms app\n\n> [AZURE.SELECTOR-LIST (Platform | Backend )]\n- [(iOS | .NET)](mobile-services-dotnet-backend-ios-get-started-push.md)\n- [(iOS | JavaScript)](mobile-services-javascript-backend-ios-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | .NET)](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Runtime 8.1 universal C# | Javascript)](mobile-services-javascript-backend-windows-universal-dotnet-get-started-push.md)\n- [(Windows Phone Silverlight 8.x | Javascript)](mobile-services-javascript-backend-windows-phone-get-started-push.md)\n- [(Android | .NET)](mobile-services-dotnet-backend-android-get-started-push.md)\n- [(Android | Javascript)](mobile-services-javascript-backend-android-get-started-push.md)\n- [(Xamarin.iOS | Javascript)](partner-xamarin-mobile-services-ios-get-started-push.md)\n- [(Xamarin.Android | Javascript)](partner-xamarin-mobile-services-android-get-started-push.md)\n- [(Xamarin.Android | .NET)](mobile-services-dotnet-backend-xamarin-android-get-started-push.md)\n- [(Xamarin.Forms | JavaScript)](partner-xamarin-mobile-services-xamarin-forms-get-started-push.md)\n\n&nbsp;\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## Overview\n\nThis tutorial shows you how to use Azure Mobile Services to send push notifications to the iOS, Android, and Windows Phone app of your Xamarin.Forms solution. Start by creating a mobile service. Then, you'll download a starter sample, register with the appropriate push notification services, and add code to the solution to receive notifications from those services.\n\nWhen you complete this tutorial, your mobile service will send a push notification each time a user adds a task in one of the apps. You can find the completed sample here: [Completed Xamarin.Forms Azure Push Notification Sample].\n\nThis tutorial requires the following:\n\n+ An iOS 8 device (you cannot test push notifications in the iOS Simulator)\n+ iOS Developer Program membership\n+ [Xamarin Studio]\n+ [Azure Mobile Services Component]\n+ An active Google account\n+ [Google Cloud Messaging Client Component]. You will add this component during the tutorial.\n\nIn this topic:\n\n1. [Create a New Mobile Service](#create-service)\n2. [Download and Configure the Starter Sample](#download-starter-sample)\n4. [Add push notifications to your Xamarin.Forms.iOS app](#iOS)\n5. [Add push notifications to your Xamarin.Forms.Android app](#Android)\n6. [Add push notifications to your Xamarin.Forms.Windows app](#Windows)\n7. [Update Azure table insert script to send push notifications to all apps](#all-apps)\n\n## <a name=\"create-service\"></a>Create a New Mobile Service\n\n\n\nNext, you will create a new mobile service to replace the in-memory list for data storage. Follow these steps to create a new mobile service.\n\n1. Log into the [Azure classic portal](https://manage.windowsazure.com/).\n2.\tAt the bottom of the navigation pane, click **+NEW**.\n\n\t![plus-new](./media/mobile-services-create-new-service-data/plus-new.png)\n\n3.\tExpand **Compute** and **Mobile Service**, then click **Create**.\n\n\t![mobile-create](./media/mobile-services-create-new-service-data/mobile-create.png)\n\n    This displays the **New Mobile Service** dialog.\n\n4.\tIn the **Create a mobile service** page, select **Create a free 20 MB SQL Database**, then type a subdomain name for the new mobile service in the **URL** textbox and wait for name verification. Once name verification completes, click the right arrow button to go to the next page.\n\n\t![mobile-create-page1](./media/mobile-services-create-new-service-data/mobile-create-page1.png)\n\n    This displays the **Specify database settings** page.\n\n\n\t> [AZURE.NOTE] As part of this tutorial, you create a new SQL Database instance and server. You can reuse this new database and administer it as you would any other SQL Database instance. If you already have a database in the same region as the new mobile service, you can instead choose **Use existing Database** and then select that database. The use of a database in a different region is not recommended because of additional bandwidth costs and higher latencies.\n\n5.\tIn **Name**, type the name of the new database, then type **Login name**, which is the administrator login name for the new SQL Database server, type and confirm the password, and click the check button to complete the process.\n\n\t![mobile-create-page2](./media/mobile-services-create-new-service-data/mobile-create-page2.png)\n\n\n\t> [AZURE.NOTE] When the password that you supply does not meet the minimum requirements or when there is a mismatch, a warning is displayed.  \n\t>\n\t> We recommend that you make a note of the administrator login name and password that you specify; you will need this information to reuse the SQL Database instance or the server in the future.\n\nYou have now created a new mobile service that can be used by your mobile apps. Next, you will add a new table in which to store app data. This table will be used by the app in place of the in-memory collection.\n\n\nTo be able to store app data in the new mobile service, you must first create a new table.\n\n1. In the Azure classic portal, click **Mobile Services**, and then click the mobile service that you just created.\n\n2. Click the **Data** tab, then click **+Create**.\n\n    ![][123]\n\n   \tThis displays the **Create new table** dialog.\n\n3. In **Table name** type _TodoItem_, then click the check button.\n\n    ![][124]\n\n  \tThis creates a new storage table **TodoItem** with the default permissions set, which means that any user of the app can access and change data in the table.\n\n    > [AZURE.NOTE] The same table name is used in Mobile Services quickstart. However, each table is created in a schema that is specific to a given mobile service. This is to prevent data collisions when multiple mobile services use the same database.\n\n4. Click the new **TodoItem** table and verify that there are no data rows.\n\n5. Click the **Columns** tab and verify that there is only a single **id** column, which is automatically created for you.\n\n  \tThis is the minimum requirement for a table in Mobile Services.\n\n    > [AZURE.NOTE] When dynamic schema is enabled on your mobile service, new columns are created automatically when JSON objects are sent to the mobile service by an insert or update operation.\n\nYou are now ready to use the new mobile service as data storage for the app.\n\n## <a name=\"download-starter-sample\"></a>Download and Configure the Starter Sample\nWe'll add push notifications to an existing sample.\n\n1. Download the following sample: [Xamarin.Forms Azure Push Notification Starter Sample].\n\n2. In the [Azure classic portal], click **Mobile Services**, and then click the mobile service. Click the **Dashboard** tab and make a note of the **Site URL**. Then click **Manage Keys** and make a note of the **Application Key**. You'll need these values when you access the mobile service from your app code.\n\n3. In the  **ToDoAzure(Portable)** project of the solution, open the **Constants.cs** file, replace `ApplicationURL` and `ApplicationKey` with the site URL and application key you obtained in the previous step.\n\n## <a name=\"iOS\"></a>Add push notifications to your Xamarin.Forms.iOS app\n\nYou'll add push notifications to the iOS app by using the Apple Push Notification service (APNS). You'll need an active Google account, and the [Google Cloud Messaging Client Component].\n\n>[AZURE.IMPORTANT] Because of Apple Push Notification service (APNS) requirements, you must deploy and test push notifications on an iOS capable device (iPhone or iPad) instead of in the emulator.\n\nAPNS uses certificates to authenticate your mobile service. Follow these instructions to create the necessary certificates and upload it to your Mobile Service. For the official APNS feature documentation, see [Apple Push Notification Service].\n\n### <a name=\"certificates\"></a>Generate the Certificate Signing Request file\n\nFirst you must generate the Certificate Signing Request (CSR) file, which is used by Apple to generate a signed certificate.\n\n1. From Utilities, run the **Keychain Access tool**.\n\n2. Click **Keychain Access**, expand **Certificate Assistant**, then click **Request a Certificate from a Certificate Authority...**.\n\n    ![][5]\n\n3. Enter your **User Email Address**, type in a **Common Name** value, make sure that **Saved to disk** is selected, and then click **Continue**.\n\n    ![][6]\n\n4. Type a name for the Certificate Signing Request (CSR) file in **Save As**, select the location in **Where**, then click **Save**.\n\n    ![][7]\n\n    Remember the location you chose.\n\nNext, you will register your app with Apple, enable push notifications, and upload this exported CSR to create a push certificate.\n\n### <a name=\"register\"></a>Register your app for push notifications\n\nTo be able to send push notifications to an iOS app from mobile services, you must register your application with Apple and register for push notifications.\n\n1. If you have not already registered your app, navigate to the <a href=\"http://go.microsoft.com/fwlink/p/?LinkId=272456\" target=\"_blank\">iOS Provisioning Portal</a> at the Apple Developer Center, log on with your Apple ID, click **Identifiers**, then click **App IDs**, and finally click on the **+** sign to create an app ID for your app.\n\n    ![][102]\n\n2. Type a name for your app in **Description**, enter and remember the unique **Bundle Identifier**, check the \"Push Notifications\" option in the \"App Services\" section, and then click **Continue**. This example uses the ID **MobileServices.Quickstart** but you may not reuse this same ID, as app IDs must be unique across all users. As such, it is recommended that you append your full name or initials after the app name.\n\n    ![][103]\n\n    This generates your app ID and requests you to **Submit** the information. Click **Submit**.\n\n    ![][104]\n\n    Once you click **Submit**, you will see the **Registration complete** screen, as shown below. Click **Done**.\n\n    ![][105]\n\n3. Locate the app ID that you just created, and click on its row.\n\n    ![][106]\n\n    Clicking on the app ID will display details on the app and app ID. Click the **Settings** button.\n\n    ![][107]\n\n4. Scroll to the bottom of the screen, and click the **Create Certificate...** button under the section **Development Push SSL Certificate**.\n\n    ![][108]\n\n    This displays the \"Add iOS Certificate\" assistant.\n\n    Note: This tutorial uses a development certificate. The same process is used when registering a production certificate. Just make sure that you set the same certificate type when you upload the certificate to Mobile Services.\n\n5. Click **Choose File**, browse to the location where you saved the CSR file earlier, then click **Generate**.\n\n    ![][110]\n\n6. After the certificate is created by the portal, click the **Download** button, and click **Done**.\n\n    ![][111]\n\n    This downloads the signing certificate and saves it to your computer in your Downloads folder.\n\n    ![][9]\n\n    Note: By default, the downloaded file a development certificate is named <strong>aps_development.cer</strong>.\n\n7. Double-click the downloaded push certificate **aps_development.cer**.\n\n    This installs the new certificate in the Keychain, as shown below:\n\n    ![][10]\n\n    Note: The name in your certificate might be different, but it will be prefixed with <strong>Apple Development iOS Push Notification Services:</strong>.\n\nLater, you will use this certificate to generate a .p12 file and upload it to Mobile Services to enable authentication with APNS.\n\n### <a name=\"profile\"></a>Create a provisioning profile for the app\n\n1. Back in the <a href=\"http://go.microsoft.com/fwlink/p/?LinkId=272456\" target=\"_blank\">iOS Provisioning Portal</a>, select **Provisioning Profiles**, select **All**, and then click the **+** button to create a new profile. This launches the **Add iOS Provisiong Profile** Wizard.\n\n    ![][112]\n\n2. Select **iOS App Development** under **Development** as the provisiong profile type, and click **Continue**.\n\n3. Next, select the app ID for the Mobile Services Quickstart app from the **App ID** drop-down list, and click **Continue**.\n\n    ![][113]\n\n4. In the **Select certificates** screen, select the certificate created earlier, and click **Continue**.\n\n    ![][114]\n\n5. Next, select the **Devices** to use for testing, and click **Continue**.\n\n    ![][115]\n\n6. Finally, pick a name for the profile in **Profile Name**, click **Generate**, and click **Done**.\n\n    ![][116]\n\n    This creates a new provisioning profile.\n\n    ![][117]\n\n7. In Xcode, open the Organizer select the Devices view, select **Provisioning Profiles** in the **Library** section in the left pane, and then click the **Refresh** button at the bottom of the middle pane.\n\n### <a name=\"configure-mobileServices\"></a>Configure Mobile Services to send push requests\n\nAfter you have registered your app with APNS and configured your project, you must next configure your mobile service to integrate with APNS.\n\n1. In Keychain Access, right-click the new certificate, click **Export**, name your file, select the **.p12** format, then click **Save**.\n\n    ![][28]\n\n    Make a note of the file name and location of the exported certificate.\n\n2. Log on to the [Azure classic portal], click **Mobile Services**, and then click your app.\n\n    ![][18]\n\n3. Click the **Push** tab and click **Upload** under **apple push notification settings**.\n\n    ![][19]\n\n    This displays the Upload Certificate dialog.\n\n4. Click **File**, select the exported certificate .p12 file, enter the **Password**, make sure that the correct **Mode** is selected, click the check icon, then click **Save**.\n\n    ![][20]\n\nYour mobile service is now configured to work with APNS.\n\n### <a name=\"configure-app\"></a>Configure your Xamarin.iOS application\n\n1. In Xamarin.Studio or Visual Studio, open **Info.plist**, and update the **Bundle Identifier** with the ID you created earlier.\n\n    ![][121]\n\n2. Scroll down to **Background Modes** and check the **Enable Background Modes** box and the **Remote notifications** box.\n\n    ![][122]\n\n3. Double click your project in the Solution Panel to open **Project Options**.\n\n4.  Choose **iOS Bundle Signing** under **Build**, and select the corresponding **Identity** and **Provisioning profile** you had just set up for this project.\n\n    ![][120]\n\n    This ensures that the Xamarin project uses the new profile for code signing. For the official Xamarin device provisioning documentation, see [Xamarin Device Provisioning].\n\n### <a name=\"add-push\"></a>Add push notifications to your app\n\n1. In Xamarin.Studio or Visual Studio, expand the **ToDoAzure.iOS** project, open the **AppDelegate** class, and then replace the **FinishedLaunching** event with the following code:\n\n        public override bool FinishedLaunching(UIApplication app, NSDictionary options)\n        {\n             // registers for push for iOS8\n            var settings = UIUserNotificationSettings.GetSettingsForTypes(\n                UIUserNotificationType.Alert\n                | UIUserNotificationType.Badge\n                | UIUserNotificationType.Sound,\n                new NSSet());\n\n            global::Xamarin.Forms.Forms.Init();\n            instance = this;\n            CurrentPlatform.Init();\n\n            todoItemManager = new ToDoItemManager();\n            App.SetTodoItemManager(todoItemManager);\n\n\n            UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);\n            UIApplication.SharedApplication.RegisterForRemoteNotifications();\n\n            LoadApplication(new App());\n            return base.FinishedLaunching(app, options);\n        }\n\n6. In **AppDelegate**, override the **RegisteredForRemoteNotifications** event:\n\n        public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)\n        {\n            // Modify device token\n            string _deviceToken = deviceToken.Description;\n            _deviceToken = _deviceToken.Trim('<', '>').Replace(\" \", \"\");\n\n            // Get Mobile Services client\n            MobileServiceClient client = todoItemManager.GetClient();\n\n            // Register for push with Mobile Services\n            IEnumerable<string> tag = new List<string>() { \"uniqueTag\" };\n\n            const string template = \"{\\\"aps\\\":{\\\"alert\\\":\\\"$(message)\\\"}}\";\n\n            var expiryDate = DateTime.Now.AddDays(90).ToString\n                (System.Globalization.CultureInfo.CreateSpecificCulture(\"en-US\"));\n\n            var push = client.GetPush();\n\n            push.RegisterTemplateAsync(_deviceToken, template, expiryDate, \"myTemplate\", tag);\n        }\n\n7. In **AppDelegate**, override the **ReceivedRemoteNotification** event:\n\n        public override void ReceivedRemoteNotification(UIApplication application, NSDictionary userInfo)\n        {\n            NSObject inAppMessage;\n\n            bool success = userInfo.TryGetValue(new NSString(\"inAppMessage\"), out inAppMessage);\n\n            if (success)\n            {\n                var alert = new UIAlertView(\"Got push notification\", inAppMessage.ToString(), null, \"OK\", null);\n                alert.Show();\n            }\n        }\n\nYour app is now updated to support push notifications.\n\n### <a name=\"update-scripts\"></a>Update the registered insert script in the Azure classic portal\n\n1. In the Azure classic portal, click the **Data** tab and then click the **TodoItem** table.\n\n    ![][21]\n\n2. In **todoitem**, click the **Script** tab and select **Insert**.\n\n    ![][22]\n\n    This displays the function that is invoked when an insert occurs in the **TodoItem** table.\n\n3. Replace the insert function with the following code, and then click **Save**:\n\n          function insert(item, user, request) {\n          // Execute the request and send notifications.\n             request.execute({\n             success: function() {\n              // Create a template-based payload.\n              var payload = '{ \"message\" : \"New item added: ' + item.text + '\" }';\n\n              // Write the default response and send a notification\n              // to all platforms.\n              push.send(null, payload, {\n                  success: function(pushResponse){\n                  console.log(\"Sent push:\", pushResponse);\n                  // Send the default response.\n                  request.respond();\n                  },\n                  error: function (pushResponse) {\n                      console.log(\"Error Sending push:\", pushResponse);\n                       // Send the an error response.\n                      request.respond(500, { error: pushResponse });\n                      }\n               });\n              }\n           });\n          }\n\n    This registers a new insert script, which sends a push notification (the inserted text) to the device provided in the insert request.\n\n   >[AZURE.NOTE] This script delays sending the notification to give you time to close the app to receive a toast notification.\n\n### <a name=\"test\"></a>Test push notifications in your app\n\n1. Press the **Run** button to build the project and start the app in an iOS capable device, then click **OK** to accept push notifications\n\n   >[AZURE.NOTE] You must explicitly accept push notifications from your app. This request only occurs the first time that the app runs.\n\n2. In the app, click the **Add** button, add a task title and then click the **Save** button.\n\n3. Verify that a notification is received, then click **OK** to dismiss the notification.\n\n\nYou have successfully completed this tutorial.\n\n## <a name=\"Android\"></a>Add push notifications to the Xamarin.Forms.Android app\n\nYou'll add push notifications to the Android app by using the Google Cloud Messaging (GCM) service. You'll need an active Google account, and the [Google Cloud Messaging Client Component].\n\n### <a id=\"register\"></a>Enable Google Cloud Messaging\n\n\n1. Navigate to the [Google Cloud Console](https://console.developers.google.com/project), sign in with your Google account credentials.\n\n2. Click **Create Project**, type a project name, then click **Create**. If requested, carry out the SMS Verification, and click **Create** again.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/mobile-services-google-new-project.png)   \n\n\t Type in your new **Project name** and click **Create project**.\n\n3. Click the **Utilities and More** button and then click **Project Information**. Make a note of the **Project Number**. You will need to set this value as the `SenderId` variable in the client app.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/notification-hubs-utilities-and-more.png)\n\n\n4. In the project dashboard, under **Mobile APIs**, click **Google Cloud Messaging**, then on the next page click **Enable API** and accept the terms of service.\n\n\t![Enabling GCM](./media/mobile-services-enable-google-cloud-messaging/enable-GCM.png)\n\n\t![Enabling GCM](./media/mobile-services-enable-google-cloud-messaging/enable-gcm-2.png)\n\n5. In the project dashboard, Click **Credentials** > **Create Credential** > **API Key**.\n\n   \t![](./media/mobile-services-enable-google-cloud-messaging/mobile-services-google-create-server-key.png)\n\n6. In **Create a new key**, click **Server key**, type a name for your key, then click **Create**.\n\n7. Make a note of the **API KEY** value.\n\n\tYou will use this API key value to enable Azure to authenticate with GCM and send push notifications on behalf of your app.\n\n\n### <a id=\"configure\"></a>Configure your mobile service to send push requests\n\n\n1. Log on to the [Azure classic portal](https://manage.windowsazure.com/), click **Mobile Services**, and then click your app.\n\n2. Click the **Push** tab, enter the **API Key** value obtained from GCM in the previous procedure, then click **Save**.\n\n   \t![](./media/mobile-services-android-configure-push/mobile-push-tab-android.png)\n\n    >[AZURE.NOTE]When you set your GCM credentials for enhanced push notifications in the Push tab in the portal, they are shared with Notification Hubs to configure the notification hub with your app.\n\nBoth your mobile service and your app are now configured to work with GCM and Notification Hubs.\n\n### <a id=\"update-scripts\"></a>Update the registered insert script to send notifications\n\n>[AZURE.NOTE] The following steps show you how to update the script registered to the insert operation on the TodoItem table in the Azure classic portal. You can also access and edit this mobile service script directly in Visual Studio, in the Azure node of Server Explorer.\n\nIn the [Azure classic portal], click the **Data** tab and then click the **TodoItem** table.\n\n   ![][21]\n\n2. In **todoitem**, click the **Script** tab and select **Insert**.\n\n   ![][22]\n\nThis displays the function that is invoked when an insert occurs in the **TodoItem** table.\n\n3. Replace the insert function with the following code, and then click **Save**:\n\n          function insert(item, user, request) {\n          // Execute the request and send notifications.\n             request.execute({\n             success: function() {\n              // Create a template-based payload.\n              var payload = '{ \"message\" : \"New item added: ' + item.text + '\" }';\n\n              // Write the default response and send a notification\n              // to all platforms.\n              push.send(null, payload, {\n                  success: function(pushResponse){\n                  console.log(\"Sent push:\", pushResponse);\n                  // Send the default response.\n                  request.respond();\n                  },\n                  error: function (pushResponse) {\n                      console.log(\"Error Sending push:\", pushResponse);\n                       // Send the an error response.\n                      request.respond(500, { error: pushResponse });\n                      }\n               });\n              }\n           });\n          }\n\n\n    This registers a new insert script, which sends a push notification (the inserted text) to the device provided in the insert request.\n\n   >[AZURE.NOTE] This script delays sending the notification to give you time to close the app to receive a toast notification.\n\n\n### <a id=\"configure-app\"></a>Configure the existing project for push notifications\n\n1. In the Solution view, expand the **Components** folder in the Xamarin.Android app and make sure that Azure Mobile Services package is installed.\n\n2. Right-click the **Components** folder, click  **Get More Components...**, search for the **Google Cloud Messaging Client** component and add it to the project.\n\n1. Open the MainActivity.cs project file and add the following using statement to the class:\n\n\t\tusing Gcm.Client;\n\n\n4.\tIn the **MainActivity** class, add the following code to the **OnCreate** method, after the call to the **LoadApplication** method:\n\n            try\n            {\n                // Check to ensure everything's setup right\n                GcmClient.CheckDevice(this);\n                GcmClient.CheckManifest(this);\n\n                // Register for push notifications\n                System.Diagnostics.Debug.WriteLine(\"Registering...\");\n                GcmClient.Register(this, PushHandlerBroadcastReceiver.SENDER_IDS);\n            }\n            catch (Java.Net.MalformedURLException)\n            {\n                CreateAndShowDialog(new Exception(\"There was an error creating the Mobile Service. Verify the URL\"), \"Error\");\n            }\n            catch (Exception e)\n            {\n                CreateAndShowDialog(e, \"Error\");\n            }\n\nYour **MainActivity** is now prepared for adding push notifications.\n\n### <a id=\"add-push\"></a>Add push notifications code to your app\n\n5. In the ToDoAzure.Droid project, create a new class in the project called `GcmService`.\n\n5. Add the following using statements to **GcmService** class:\n\n\t\tusing Gcm.Client;\n\t\tusing Microsoft.WindowsAzure.MobileServices;\n\n6. Add the following permission requests between the **using** statements and the **namespace** declaration:\n\n\t\t[assembly: Permission(Name = \"@PACKAGE_NAME@.permission.C2D_MESSAGE\")]\n        [assembly: UsesPermission(Name = \"@PACKAGE_NAME@.permission.C2D_MESSAGE\")]\n        [assembly: UsesPermission(Name = \"com.google.android.c2dm.permission.RECEIVE\")]\n\n        //GET_ACCOUNTS is only needed for android versions 4.0.3 and below\n        [assembly: UsesPermission(Name = \"android.permission.GET_ACCOUNTS\")]\n        [assembly: UsesPermission(Name = \"android.permission.INTERNET\")]\n        [assembly: UsesPermission(Name = \"android.permission.WAKE_LOCK\")]\n\n7. In the **GcmService.cs** project file, add the following class:\n\n        [BroadcastReceiver(Permission = Gcm.Client.Constants.PERMISSION_GCM_INTENTS)]\n        [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_MESSAGE }, Categories = new string[] { \"@PACKAGE_NAME@\" })]\n        [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_REGISTRATION_CALLBACK }, Categories = new string[] { \"@PACKAGE_NAME@\" })]\n        [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_LIBRARY_RETRY }, Categories = new string[] { \"@PACKAGE_NAME@\" })]\n\n        public class PushHandlerBroadcastReceiver : GcmBroadcastReceiverBase<GcmService>\n        {\n\n            public static string[] SENDER_IDS = new string[] { \"<PROJECT_NUMBER>\" };\n\n        }\n\n\tIn the above code, you must replace _`<PROJECT_NUMBER>`_ with the project number assigned by Google when you provisioned your app in the Google developer portal.\n\n8. In the GcmService.cs project file, add the following code that defines the **GcmService** class:\n\n         [Service]\n         public class GcmService : GcmServiceBase\n         {\n             public static string RegistrationID { get; private set; }\n\n             public GcmService()\n                 : base(PushHandlerBroadcastReceiver.SENDER_IDS){}\n         }\n\n\n\tNote that this class derives from **GcmServiceBase** and that the **Service** attribute must be applied to this class.\n\n\t>[AZURE.NOTE]The **GcmServiceBase** class implements the **OnRegistered()**, **OnUnRegistered()**, **OnMessage()** and **OnError()** methods. You must override these methods in the **GcmService** class.\n\n5. Add the following code to the **GcmService** class that overrides the **OnRegistered** event handler.\n\n        protected override void OnRegistered(Context context, string registrationId)\n        {\n            Log.Verbose(PushHandlerBroadcastReceiver.TAG, \"GCM Registered: \" + registrationId);\n            RegistrationID = registrationId;\n\n            createNotification(\"GcmService Registered...\", \"The device has been Registered, Tap to View!\");\n\n            MobileServiceClient client =  MainActivity.DefaultService.todoItemManager.GetClient;\n\n            var push = client.GetPush();\n\n            MainActivity.DefaultService.RunOnUiThread(() => Register(push, null));\n\n        }\n\n        public async void Register(Microsoft.WindowsAzure.MobileServices.Push push, IEnumerable<string> tags)\n        {\n            try\n            {\n                const string template = \"{\\\"data\\\":{\\\"message\\\":\\\"$(message)\\\"}}\";\n\n                await push.RegisterTemplateAsync(RegistrationID, template, \"mytemplate\", tags);\n            }\n            catch (Exception ex)\n            {\n                System.Diagnostics.Debug.WriteLine(ex.Message);\n                Debugger.Break();\n            }\n        }\n\n\tThis method uses the returned GCM registration ID to register with Azure for push notifications.\n\n10. Override the **OnMessage** method in **GcmService** with the following code:\n\n        protected override void OnMessage(Context context, Intent intent)\n        {\n            Log.Info(PushHandlerBroadcastReceiver.TAG, \"GCM Message Received!\");\n\n            var msg = new StringBuilder();\n\n            if (intent != null && intent.Extras != null)\n            {\n                foreach (var key in intent.Extras.KeySet())\n                    msg.AppendLine(key + \"=\" + intent.Extras.Get(key).ToString());\n            }\n\n            //Store the message\n            var prefs = GetSharedPreferences(context.PackageName, FileCreationMode.Private);\n            var edit = prefs.Edit();\n            edit.PutString(\"last_msg\", msg.ToString());\n            edit.Commit();\n\n            string message = intent.Extras.GetString(\"message\");\n            if (!string.IsNullOrEmpty(message))\n            {\n                createNotification(\"New todo item!\", \"Todo item: \" + message);\n                return;\n            }\n\n            string msg2 = intent.Extras.GetString(\"msg\");\n            if (!string.IsNullOrEmpty(msg2))\n            {\n                createNotification(\"New hub message!\", msg2);\n                return;\n            }\n\n            createNotification(\"Unknown message details\", msg.ToString());\n        }\n\n        void createNotification(string title, string desc)\n        {\n            //Create notification\n            var notificationManager = GetSystemService(Context.NotificationService) as NotificationManager;\n\n            //Create an intent to show ui\n            var uiIntent = new Intent(this, typeof(MainActivity));\n\n            //Create the notification\n            var notification = new Notification(Android.Resource.Drawable.SymActionEmail, title);\n\n            //Auto cancel will remove the notification once the user touches it\n            notification.Flags = NotificationFlags.AutoCancel;\n\n            //Set the notification info\n            //we use the pending intent, passing our ui intent over which will get called\n            //when the notification is tapped.\n            notification.SetLatestEventInfo(this, title, desc, PendingIntent.GetActivity(this, 0, uiIntent, 0));\n\n            //Show the notification\n            notificationManager.Notify(1, notification);\n        }\n\n12. Add the following method overrides for **OnUnRegistered()** and **OnError()**, which are required for the project to compile.\n\n\t\tprotected override void OnUnRegistered(Context context, string registrationId)\n\t\t{\n\t\t\tLog.Error(\"GcmService\", \"Unregistered RegisterationId : \" + registrationId);\n\t\t}\n\n        protected override void OnError(Context context, string errorId)\n        {\n            Log.Error(PushHandlerBroadcastReceiver.TAG, \"GCM Error: \" + errorId);\n        }\n\n### <a id=\"test\"></a>Test push notifications in your app\n\nYou can test the app by directly attaching an Android phone with a USB cable, or by using a virtual device in the emulator.\n\nWhen you run this app in the emulator, make sure that you use an Android Virtual Device (AVD) that supports Google APIs.\n\n> [AZURE.IMPORTANT] In order to receive push notifications, you must set up a Google account on your Android Virtual Device (in the emulator, navigate to **Settings** and click **Add Account**). Also, make sure that the emulator is connected to the Internet.\n\n1. From **Tools**, click **Open Android Emulator Manager**, select your device, and then click **Edit**.\n\n    ![][125]\n\n2. Select **Google APIs** in **Target**, then click **OK**.\n\n    ![][126]\n\n3. On the top toolbar, click **Run**, and then select your app. This starts the emulator and runs the app.\n\n  The app retrieves the *registrationId* from GCM and registers with the Notification Hub.\n\n1. In the app, add a new task.\n\n2. Swipe down from the top of the screen to open the device's Notification Center to see the notification.\n\n\t![][127]\n\n## <a name=\"Windows\"></a>Add push notifications to the Xamarin.Forms.Windows app\n\nThis section shows you how to use Azure Mobile Services to send push notifications to the Windows Phone Silverlight app that is included in your Xamarin.Forms solution.\n\n### <a id=\"update-app\"></a> Update the app to register for notifications\n\nBefore your app can receive push notifications, you must register a notification channel.\n\n1. In Visual Studio, open the file App.xaml.cs and add the following `using` statement:\n\n        using Microsoft.Phone.Notification;\n\n3. Add the following to App.xaml.cs:\n\n        public static HttpNotificationChannel CurrentChannel { get; private set; }\n\n        private void AcquirePushChannel()\n        {\n            CurrentChannel = HttpNotificationChannel.Find(\"MyPushChannel\");\n\n            if (CurrentChannel == null)\n            {\n                CurrentChannel = new HttpNotificationChannel(\"MyPushChannel\");\n                CurrentChannel.Open();\n                CurrentChannel.BindToShellToast();\n            }\n\n            CurrentChannel.ChannelUriUpdated +=\n                new EventHandler<NotificationChannelUriEventArgs>(async (o, args) =>\n                {\n\n                   // Register for notifications using the new channel\n                    const string template =\n                    \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><wp:Notification \" +\n                    \"xmlns:wp=\\\"WPNotification\\\"><wp:Toast><wp:Text1>$(message)</wp:Text1></wp:Toast></wp:Notification>\";\n\n                    await client.GetPush()\n                        .RegisterTemplateAsync(CurrentChannel.ChannelUri.ToString(), template, \"mytemplate\");\n                });\n        }\n\n    This code retrieves the ChannelURI for the app from the Microsoft Push Notification Service (MPNS) used by Windows Phone 8.x \"Silverlight\", and then registers that ChannelURI for push notifications.\n\n\t>[AZURE.NOTE]In this this tutorial, the mobile service sends a toast notification to the device. When you send a tile notification, you must instead call the **BindToShellTile** method on the channel.\n\n4. At the top of the **Application_Launching** event handler in App.xaml.cs, add the following call to the new **AcquirePushChannel** method:\n\n        AcquirePushChannel();\n\n\tThis makes sure that registration is requested every time that the page is loaded. In your app, you may only want to make this registration periodically to ensure that the registration is current.\n\n5. Press the **F5** key to run the app. A popup dialog with the registration key is displayed.\n\n6.\tIn the Solution Explorer, expand **Properties**, open the WMAppManifest.xml file, click the **Capabilities** tab and make sure that the **ID_CAP_PUSH_NOTIFICATION** capability is checked.\n\n   \t![Enable notifications in VS](./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-app-enable-push-wp8.png)\n\n   \tThis makes sure that your app can raise toast notifications.\n\n### <a id=\"update-scripts\"></a> Update server scripts to send push notifications\n\nFinally, you must update the script registered to the insert operation on the TodoItem table to send notifications.\n\n1. In the [Azure classic portal], click the **Data** tab and then click the **TodoItem** table.\n\n    ![][21]\n\n2. In **todoitem**, click the **Script** tab and select **Insert**.\n\n    ![][22]\n\n    This displays the function that is invoked when an insert occurs in the **TodoItem** table.\n\n3. Replace the insert function with the following code, and then click **Save**:\n\n          function insert(item, user, request) {\n          // Execute the request and send notifications.\n             request.execute({\n             success: function() {\n              // Create a template-based payload.\n              var payload = '{ \"message\" : \"New item added: ' + item.text + '\" }';\n\n              // Write the default response and send a notification\n              // to all platforms.\n              push.send(null, payload, {\n                  success: function(pushResponse){\n                  console.log(\"Sent push:\", pushResponse);\n                  // Send the default response.\n                  request.respond();\n                  },\n                  error: function (pushResponse) {\n                      console.log(\"Error Sending push:\", pushResponse);\n                       // Send the an error response.\n                      request.respond(500, { error: pushResponse });\n                      }\n               });\n              }\n           });\n          }\n\n\n    This registers a new insert script, which sends a push notification (the inserted text) to the device provided in the insert request.\n\n3. Click the **Push** tab, check **Enable unauthenticated push notifications**, then click **Save**.\n\n\tThis enables the mobile service to connect to MPNS in unauthenticated mode to send push notifications.\n\n\t>[AZURE.NOTE]This tutorial uses MPNS in unauthenticated mode. In this mode, MPNS limits the number of notifications that can be sent to a device channel. To remove this restriction, you must generate and upload a certificate by clicking **Upload** and selecting the certificate. For more information on generating the certificate, see [Setting up an authenticated web service to send push notifications for Windows Phone].\n\n### <a id=\"test\"></a> Test push notifications in your app\n\n1. In Visual Studio, press the F5 key to run the app.\n\n    >[AZURE.NOTE] You may encounter a 401 Unauthorized RegistrationAuthorizationException when testing on the Windows Phone emulator. This can occur during the `RegisterNativeAsync()` call because of the way the Windows Phone emulator syncs it's clock with the host PC. It can result in a security token that will be rejected. To resolve this simply manually set the clock in the emulator before testing.\n\n5. In the app, create a new task with the title **Hello push**, then immediately click the start button or back button to leave the app.\n\n  \tThis sends an insert request to the mobile service to store the added item. Notice that the device receives a toast notification that says **hello push**.\n\n\t![Toast notification received](./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-quickstart-push5-wp8.png)\n\n\t>[AZURE.NOTE]You will not receive the notification when you are still in the app. To receive a toast notification while the app is active, you must handle the [ShellToastNotificationReceived](http://msdn.microsoft.com/library/windowsphone/develop/microsoft.phone.notification.httpnotificationchannel.shelltoastnotificationreceived(v=vs.105).aspx) event.\n\n<!-- Anchors. -->\n[Generate the certificate signing request]: #certificates\n[Register your app and enable push notifications]: #register\n[Create a provisioning profile for the app]: #profile\n[Configure Mobile Services]: #configure-mobileServices\n[Configure the Xamarin.iOS App]: #configure-app\n[Update scripts to send push notifications]: #update-scripts\n[Add push notifications to the app]: #add-push\n[Insert data to receive notifications]: #test\n\n<!-- Images. -->\n\n[5]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-step5.png\n[6]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-step6.png\n[7]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-step7.png\n\n[9]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-step9.png\n[10]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-step10.png\n\n[17]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-step17.png\n[18]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-selection.png\n[19]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-push-tab-ios.png\n[20]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-push-tab-ios-upload.png\n[21]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-portal-data-tables.png\n[22]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-insert-script-push2.png\n[23]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-quickstart-push1-ios.png\n[24]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-quickstart-push2-ios.png\n[25]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-quickstart-push3-ios.png\n[26]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-quickstart-push4-ios.png\n[28]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-step18.png\n\n[101]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-01.png\n[102]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-02.png\n[103]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-03.png\n[104]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-04.png\n[105]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-05.png\n[106]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-06.png\n[107]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-07.png\n[108]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-08.png\n\n[110]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-10.png\n[111]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-11.png\n[112]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-12.png\n[113]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-13.png\n[114]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-14.png\n[115]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-15.png\n[116]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-16.png\n[117]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-17.png\n\n[120]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-20.png\n[121]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-21.png\n[122]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-services-ios-push-22.png\n[123]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-data-tab-empty.png\n[124]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/mobile-create-todoitem-table.png\n[125]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/notification-hub-create-android-app7.png\n[126]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/notification-hub-create-android-app8.png\n[127]: ./media/partner-xamarin-mobile-services-xamarin-forms-get-started-push/notification-area-received.png\n\n\n[Xamarin Studio]: http://xamarin.com/download\n[Install Xcode]: https://go.microsoft.com/fwLink/p/?LinkID=266532\n[iOS Provisioning Portal]: http://go.microsoft.com/fwlink/p/?LinkId=272456\n[Mobile Services iOS SDK]: https://go.microsoft.com/fwLink/p/?LinkID=266533\n[Apple Push Notification Service]: http://go.microsoft.com/fwlink/p/?LinkId=272584\n[Get started with Mobile Services]: mobile-services-ios-get-started.md\n\n[Xamarin Device Provisioning]: http://developer.xamarin.com/guides/ios/getting_started/installation/device_provisioning/\n\n\n[Azure classic portal]: https://manage.windowsazure.com/\n[apns object]: http://go.microsoft.com/fwlink/p/?LinkId=272333\n[Azure Mobile Services Component]: http://components.xamarin.com/view/azure-mobile-services/\n[completed example project]: http://go.microsoft.com/fwlink/p/?LinkId=331303\n[Google Cloud Messaging Client Component]: http://components.xamarin.com/view/GCMClient/\n[Xamarin.Forms Azure Push Notification Starter Sample]: https://github.com/Azure/mobile-services-samples/tree/master/TodoListXamarinForms\n[Completed Xamarin.Forms Azure Push Notification Sample]: https://github.com/Azure/mobile-services-samples/tree/master/GettingStartedWithPushXamarinForms\n"
  },
  {
    "path": "docs/store-sendgrid-mobile-services-send-email-scripts.md",
    "content": "<properties\n\tpageTitle=\"Send email using SendGrid | Microsoft Azure\"\n\tdescription=\"Learn how to use the SendGrid service to send email from your Azure Mobile Services app.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"Erikre\"\n\tmanager=\"sendgrid\"\n\teditor=\"\"/>\n\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"glenga\"/>\n\n\n# Send email from Mobile Services with SendGrid\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n>\n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n&nbsp;\n\n\nThis topic shows you how can add email functionality to your mobile service. In this tutorial you add server side scripts to send email using SendGrid. When complete, your mobile service will send an email each time a record is inserted.\n\nSendGrid is a [cloud-based email service] that provides reliable [transactional email delivery], scalability, and real-time analytics along with flexible APIs that make custom integration easy. For more information, see <http://sendgrid.com>.\n\nThis tutorial walks you through these basic steps to enable email functionality:\n\n1. [Create a SendGrid account]\n2. [Add a script to send email]\n3. [Insert data to receive email]\n\nThis tutorial is based on the Mobile Services quickstart. Before you start this tutorial, you must first complete [Get started with Mobile Services].\n\n## <a name=\"sign-up\"></a>Create a new SendGrid account\n\nAzure customers can unlock 25,000 free emails each month. These 25,000 free monthly emails will give you access to advanced reporting and analytics and [all APIs][] (Web, SMTP, Event, Parse and more). For information about additional services provided by SendGrid, see the [SendGrid Features][] page.\n\n### To sign up for a SendGrid account\n\n1. Log in to the [Azure Management Portal][].\n\n2. In the lower pane of the management portal, click **New**.\n\n\t![command-bar-new][command-bar-new]\n\n3. Click **Marketplace**.\n\n\t![sendgrid-store][sendgrid-store]\n\n4. In the **Choose an Application and Service** dialog, select **SendGrid** and click the right arrow.\n\n5. In the **Personalize Application and Service** dialog select the **SendGrid** plan you want to sign up for.\n\n6. Enter a name to identify your **SendGrid** service in your Azure settings, or use the default value of **SendGridEmailDelivery.Simplified.SMTPWebAPI**. Names must be between 1 and 100 characters in length and contain only alphanumeric characters, dashes, dots, and underscores. The name must be unique in your list of subscribed Azure Store Items.\n\n\t![store-screen-2][store-screen-2]\n\n7. Choose a value for the region; for example, West US.\n\n8. Click the right arrow.\n\n9. On the **Review Purchase** tab, review the plan and pricing information, and review the legal terms. If you agree to the terms, click the check mark. After you click the check mark, your SendGrid account will begin the [SendGrid provisioning process].\n\n\t![store-screen-3][store-screen-3]\n\n10. After confirming your purchase you are redirected to the add-ons dashboard and you will see the message **Purchasing SendGrid**.\n\n\t![sendgrid-purchasing-message][sendgrid-purchasing-message]\n\n\tYour SendGrid account is provisioned immediately and you will see the message **Successfully purchased Add-On SendGrid**. Your account and credentials are now created. You are ready to send emails at this point.\n\n\tTo modify your subscription plan or see the SendGrid contact settings, click the name of your SendGrid service to open the SendGrid Marketplace dashboard.\n\n\t![sendgrid-add-on-dashboard][sendgrid-add-on-dashboard]\n\n\tTo send an email using SendGrid, you must supply your  account credentials (username and password).\n\n### To find your SendGrid credentials ###\n\n1. Click **Connection Info**.\n\n\t![sendgrid-connection-info-button][sendgrid-connection-info-button]\n\n2. In the *Connection info* dialog, copy the **Password** and Username to use later in this tutorial.\n\n\t![sendgrid-connection-info][sendgrid-connection-info]\n\n\tTo set your email deliverability settings, click the **Manage** button. This will redirect to your SendGrid Control Panel.\n\n\t![sendgrid-control-panel][sendgrid-control-panel]\n\n\tFor more information on getting started with SendGrid, see [SendGrid Getting Started][].\n\n## <a name=\"add-script\"></a>Register a new script that sends emails\n\n1. Log on to the [Azure classic portal], click **Mobile Services**, and then click your mobile service.\n\n2. In the Azure classic portal, click the **Data** tab and then click the **TodoItem** table.\n\n\t![][1]\n\n3. In **todoitem**, click the **Script** tab and select **Insert**.\n\n\t![][2]\n\n\tThis displays the function that is invoked when an insert occurs in the **TodoItem** table.\n\n4. Replace the insert function with the following code:\n\n        var SendGrid = require('sendgrid').SendGrid;\n\n        function insert(item, user, request) {\n            request.execute({\n                success: function() {\n                    // After the record has been inserted, send the response immediately to the client\n                    request.respond();\n                    // Send the email in the background\n                    sendEmail(item);\n                }\n            });\n\n            function sendEmail(item) {\n                var sendgrid = new SendGrid('**username**', '**password**');\n\n                sendgrid.send({\n                    to: '**email-address**',\n                    from: '**from-address**',\n                    subject: 'New to-do item',\n                    text: 'A new to-do was added: ' + item.text\n                }, function(success, message) {\n                    // If the email failed to send, log it as an error so we can investigate\n                    if (!success) {\n                        console.error(message);\n                    }\n                });\n            }\n        }\n\n5. Replace the placeholders in the above script with the correct values:\n\n\t- **_username_ and _password_**: the SendGrid credentials you identified in [Create a SendGrid account].\n\n\t- **_email-address_**: the address that the email is sent to. In a real-world app, you can use tables to store and retrieve email addresses. When testing your app, just use your own email address.\n\n\t- **_from-address_**: the address from which the email originates. Consider using a registered domain address that belongs to your organization.\n\n     > [AZURE.NOTE] If you do not have a registered domain, you can instead use the domain of your Mobile Service, in the format *notifications@_your-mobile-service_.azure-mobile.net*. However, messages sent to your mobile service domain are ignored.\n\n6. Click the **Save** button. You have now configured a script to send an email each time a record is inserted into the **TodoItem** table.\n\n## <a name=\"insert-data\"></a>Insert test data to receive email\n\n1. In the client app project, run the quickstart application.\n\n\tThis topic shows the Windows Store version of the quickstart,\n\n2. In the app, type text in **Insert a TodoItem**, and then click **Save**.\n\n\t![][3]\n\n3. Notice that you receive an email, such as one shown in the notification below.\n\n\t![][4]\n\n\tCongratulations, you have successfully configured your mobile service to send email by using SendGrid.\n\n## <a name=\"nextsteps\"> </a>Next Steps\n\nNow that you've seen how easy it is to use the SendGrid email service with Mobile Services, follow\nthese links to learn more about SendGrid.\n\n-   SendGrid API documentation:\n    <https://sendgrid.com/docs>\n-   SendGrid special offer for Azure customers:\n    <https://sendgrid.com/windowsazure.html>\n\n<!--images-->\n\n[command-bar-new]: ./media/sendgrid-sign-up/sendgrid_BAR_NEW.PNG\n[sendgrid-store]: ./media/sendgrid-sign-up/sendgrid_offerings_store.png\n[store-screen-2]: ./media/sendgrid-sign-up/sendgrid_store_scrn2.png\n[store-screen-3]: ./media/sendgrid-sign-up/sendgrid_store_scrn3.png\n[sendgrid-purchasing-message]: ./media/sendgrid-sign-up/sendgrid_purchasing_message.png\n[sendgrid-add-on-dashboard]: ./media/sendgrid-sign-up/sendgrid_add-on_dashboard.png\n[sendgrid-connection-info]: ./media/sendgrid-sign-up/sendgrid_connection_info.png\n[sendgrid-connection-info-button]: ./media/sendgrid-sign-up/sendgrid_connection_info_button.png\n[sendgrid-control-panel]: ./media/sendgrid-sign-up/sendgrid_control_panel.png\n\n<!--Links-->\n\n[SendGrid Features]: http://sendgrid.com/features\n[Azure Management Portal]: https://manage.windowsazure.com\n[SendGrid Getting Started]: http://sendgrid.com/docs\n[SendGrid Provisioning Process]: https://support.sendgrid.com/hc/articles/200181628-Why-is-my-account-being-provisioned-\n[all APIs]: https://sendgrid.com/docs/API_Reference/index.html\n\n<!-- Anchors. -->\n[Create a SendGrid account]: #sign-up\n[Add a script to send email]: #add-script\n[Insert data to receive email]: #insert-data\n\n<!-- Images. -->\n[1]: ./media/store-sendgrid-mobile-services-send-email-scripts/mobile-portal-data-tables.png\n[2]: ./media/store-sendgrid-mobile-services-send-email-scripts/mobile-insert-script-push2.png\n[3]: ./media/store-sendgrid-mobile-services-send-email-scripts/mobile-quickstart-push1.png\n[4]: ./media/store-sendgrid-mobile-services-send-email-scripts/mobile-receive-email.png\n\n<!-- URLs. -->\n[Get started with Mobile Services]: https://azure.microsoft.com/develop/mobile/tutorials/get-started\n[sign up page]: https://sendgrid.com/windowsazure.html\n[Multiple User Credentials page]: https://sendgrid.com/credentials\n[Azure classic portal]: https://manage.windowsazure.com/\n[cloud-based email service]: https://sendgrid.com/email-solutions\n[transactional email delivery]: https://sendgrid.com/transactional-email\n"
  },
  {
    "path": "docs/vs-mobile-services-cordova-getting-started.md",
    "content": "<properties\n\tpageTitle=\"Getting Started with a Cordova mobile services project (Visual Studio Connected Services) | Microsoft Azure\"\n\tdescription=\"Describes the first steps you can take after connecting your Cordova project to Azure Mobile Services by using Visual Studio Connected Services.\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"mlhoop\"\n\tmanager=\"douge\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"vs-getting-started\"\n\tms.devlang=\"multiple\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"mlearned\"/>\n\n# Getting Started with Mobile Services (Cordova Projects)\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## First steps\nThe first step you need to do in order to follow the code in these examples depends on what type of mobile service you connected to.\n\n- For a JavaScript backend mobile service, create a table called TodoItem.  To create a table,  locate the mobile service under \nthe Azure node in Server Explorer, right-click the mobile service's node to open the context menu, and choose **Create Table**. \nEnter \"TodoItem\" as the table name.\n\n- If you have a .NET backend mobile service, there's already a TodoItem table in the default project template that Visual Studio \ncreated for you, but you need to publish it to Azure. To publish it, open the context menu for the mobile service project in \nSolution Explorer, and choose **Publish Web**. Accept the defaults, and choose the **Publish** button.\n\n## Create a reference to a table\n\nThe following code gets a reference to a table that contains data for a TodoItem, which you can use in subsequent operations to \nread and update the data table. The TodoItem table is created automatically when you create a mobile service.\n\n    var todoTable = mobileServiceClient.getTable('TodoItem');\n\nFor these examples to work, permissions on the table must be set to **Anybody with an Application Key**. Later, you can set\n up authentication. See [Get started with authentication](mobile-services-html-get-started-users.md).\n\n## Add an item to a table\n\nInsert a new item into a data table. An id (a GUID of type string) is automatically created as the primary key for the new \nrow. Call the **done** method on the returned [Promise](https://msdn.microsoft.com/library/dn802826.aspx) object to get a \ncopy of the inserted object and handle any errors.\n\n    function TodoItem(text) {\n        this.text = text;\n        this.complete = false;\n    }\n\n    var items = new Array();\n    var insertTodoItem = function (todoItem) {\n        todoTable.insert(todoItem).done(function (item) {\n            items.push(item)\n        });\n    };\n\n## Read or query a table\n\nThe following code queries a table for all items, sorted by the text field. You can add code to process the query results\n in the success handler. In this case, a local array of the items is updated.\n\n    todoTable.orderBy('text')\n        .read().done(function (results) {\n            items = results.slice();\n        });\n\nYou can use the where method to modify the query. Here's an example that filters out completed items.\n\n    todoTable.where(function () {\n            return (this.complete === false);\n        })\n        .read().done(function (results) {\n            items = results.slice();\n        });\n\nFor more examples of queries you can use, see [query](https://msdn.microsoft.com/library/azure/jj613353.aspx) object.\n\n## Update a table item\n\nUpdate a row in a data table. In this code, when the mobile service responds, the item is removed from the \nlist. Call the **done** method on the returned [Promise](https://msdn.microsoft.com/library/dn802826.aspx) object to \nget a copy of the inserted object and handle any errors.\n\n    todoTable.update(todoItem).done(function (item) {\n        // Update a local collection of items.\n        items.splice(items.indexOf(todoItem), 1, item);\n    });\n\n## Delete a table item\n\nDelete a row in a data table using the **del** method. Call the **done** method on the returned \n[Promise](https://msdn.microsoft.com/library/dn802826.aspx) object to get a copy of the inserted object \nand handle any errors.\n\n    todoTable.del(todoItem).done(function (item) {\n        items.splice(items.indexOf(todoItem), 1);\n    });\n\n"
  },
  {
    "path": "docs/vs-mobile-services-cordova-what-happened.md",
    "content": "<properties \n\tpageTitle=\"What happened to my Cordova project (Visual Studio Connected Services) | Microsoft Azure\" \n\tdescription=\"Describes what happened to your Azure Cordova project after adding Azure Mobile Services by using Visual Studio Connected Services \" \n\tservices=\"mobile-services\" \n\tdocumentationCenter=\"na\" \n\tauthors=\"mlhoop\" \n\tmanager=\"douge\" \n\teditor=\"\"/>\n\n<tags \n\tms.service=\"mobile-services\" \n\tms.workload=\"mobile\" \n\tms.tgt_pltfrm=\"na\" \n\tms.devlang=\"multiple\" \n\tms.topic=\"article\" \n\tms.date=\"07/21/2016\" \n\tms.author=\"mlearned\"/>\n\n# What happened to my Azure Cordova project after adding Azure Mobile Services by using Visual Studio Connected Services?\n\n## References Added\n\nThe Azure Mobile Service Client plugin included with all Multi-Device Hybrid Apps has been enabled.\n  \n## Connection string values for Mobile Services\n\nUnder `services\\mobileServices\\settings`, a new JavaScript (.js) file with a **MobileServiceClient** was generated containing the selected mobile service’s application URL and application key. The file contains the initialization of a mobile service client object, similar to the following code.\n\n\tvar mobileServiceClient;\n\tdocument.addEventListener(\"deviceready\", function() {\n            mobileServiceClient = new WindowsAzure.MobileServiceClient(\n\t        \"<your mobile service name>.azure-mobile.net\",\n\t        \"<insert your key>\"\n\t    );\n\n[Learn more about mobile services](https://azure.microsoft.com/documentation/services/mobile-services/) \n"
  },
  {
    "path": "docs/vs-mobile-services-dotnet-getting-started.md",
    "content": "<properties\n\tpageTitle=\"Get Started with a Visual Studio .NET mobile services project (Connected Services) | Microsoft Azure\"\n\tdescription=\"How to get started with Azure Mobile Services in a Visual Studio .NET project\"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"mlhoop\"\n\tmanager=\"douge\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"vs-getting-started\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"mlearned\"/>\n\n# Getting Started with Mobile Services (.NET Projects)\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\nThe first step you need to do in order to follow the code in these examples depends on what type of mobile service you connected to.\n\n- For a JavaScript backend mobile service, create a table called TodoItem.  To create a table,  locate the mobile service under the Azure node in Server Explorer, right-click the mobile service's node to open the context menu, and choose **Create Table**. Enter \"TodoItem\" as the table name.\n\n- If you have a .NET backend mobile service, there's already a TodoItem table in the default project template that Visual Studio created for you, but you need to publish it to Azure. To publish it, open the context menu for the mobile service project in Solution Explorer, and choose **Publish Web**. Accept the defaults, and choose the **Publish** button.\n\n## Get a reference to a table\n\nThe following code creates a reference to a table (`todoTable`) that contains data for a TodoItem, which you can use in subsequent operations to read and update the data table. You'll need the TodoItem class with attributes set up to interpet the JSON that the mobile service sends in response to your queries.\n\n\tpublic class TodoItem\n    {\n        public string Id { get; set; }\n\n        [JsonProperty(PropertyName = \"text\")]\n        public string Text { get; set; }\n\n        [JsonProperty(PropertyName = \"complete\")]\n        public bool Complete { get; set; }\n    }\n\n\tIMobileServiceTable<TodoItem> todoTable = App.<yourClient>.GetTable<TodoItem>();\n\nThis code works if your table has permissions set to **Anybody with an Application Key**. If you change the permissions to secure your mobile service, you'll need to add user authentication support. See [Get Started with Authentication](mobile-services-dotnet-backend-windows-universal-dotnet-get-started-users.md).\n\n## Add a table item\n\nInsert a new item into a data table.\n\n\tTodoItem todoItem = new TodoItem() { Text = \"My first to do item\", Complete = false };\n\tawait todoTable.InsertAsync(todoItem);\n\n## Read or query a table\n\nThe following code queries a table for all items. Note that it returns only the first page of data, which by default is 50 items. You can pass the page size you want, since it's an optional parameter.\n\n    List<TodoItem> items;\n    try\n    {\n        // Query that returns all items.\n        items = await todoTable.ToListAsync();\n    }\n    catch (MobileServiceInvalidOperationException e)\n    {\n        // handle exception\n    }\n\n\n## Update a table item\n\nUpdate a row in a data table. The parameter item is the TodoItem object to be updated.\n\n\tawait todoTable.UpdateAsync(item);\n\n## Delete a table item\n\nDelete a row in the database. The parameter item is the TodoItem object to be deleted.\n\n\tawait todoTable.DeleteAsync(item);\n\n\n[Learn more about mobile services](https://azure.microsoft.com/documentation/services/mobile-services/)\n"
  },
  {
    "path": "docs/vs-mobile-services-dotnet-what-happened.md",
    "content": "<properties\n\tpageTitle=\"What happened to my .NET project after adding Mobile Services by using Visual Studio Connected Services | Microsoft Azure\"\n\tdescription=\"Describes what happened in your Visual Studio .NET project after adding Azure Mobile Services by using Connected Services \"\n\tservices=\"mobile-services\"\n\tdocumentationCenter=\"\"\n\tauthors=\"mlhoop\"\n\tmanager=\"douge\"\n\teditor=\"\"/>\n\n<tags\n\tms.service=\"mobile-services\"\n\tms.workload=\"mobile\"\n\tms.tgt_pltfrm=\"na\"\n\tms.devlang=\"dotnet\"\n\tms.topic=\"article\"\n\tms.date=\"07/21/2016\"\n\tms.author=\"mlearned\"/>\n\n# What happened to my Visual Studio .NET project after adding Azure Mobile Services by using Connected Services?\n\n>[AZURE.WARNING] This is an **Azure Mobile Services** topic.  This service has been superseded by Azure App Service Mobile Apps and is scheduled for removal from Azure.  We recommend using Azure Mobile Apps for all new mobile backend deployments.  Read [this announcement](https://azure.microsoft.com/blog/transition-of-azure-mobile-services/) to learn more about the pending deprecation of this service.  \n> \n> Learn about [migrating your site to Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-migrating-from-mobile-services/).\n>\n> Get started with Azure Mobile Apps, see the [Azure Mobile Apps documentation center](https://azure.microsoft.com/documentation/learning-paths/appservice-mobileapps/).\n\n## References Added\n\nThe Azure Mobile Services NuGet package was added to your project. As a result, the following .NET references were added to your project:\n\n- **Microsoft.WindowsAzure.Mobile**\n- **Microsoft.WindowsAzure.Mobile.Ext**\n- **Newtonsoft.Json**\n- **System.Net.Http.Extensions**\n- **System.Net.Http.Primitives**\n\n## Connection string values for Mobile Services\n\nIn your App.xaml.cs file, a **MobileServiceClient** object was created with the selected mobile service’s application URL and application key.\n\n## Mobile Services project added\n\nIf a .NET mobile service is created in the Connected Service Provider, then a mobile services project is created and added to the solution.\n\n\n[Learn more about mobile services](https://azure.microsoft.com/documentation/services/mobile-services/)\n"
  },
  {
    "path": "docs/vs-mobile-services-javascript-getting-started.md",
    "content": "<properties \n\tpageTitle=\"Get started with a Javascript mobile app after adding Mobile Services by using Visual Studio Connected Services | Microsoft Azure \" \n\tdescription=\"How to get started with Mobile Services in a JavaScript project in Visual Studio\" \n\tservices=\"mobile-services\" \n\tdocumentationCenter=\"\" \n\tauthors=\"mlhoop\" \n\tmanager=\"douge\" \n\teditor=\"\"/>\n\n<tags \n\tms.service=\"mobile-services\" \n\tms.workload=\"mobile\" \n\tms.tgt_pltfrm=\"vs-getting-started\" \n\tms.devlang=\"JavaScript\" \n\tms.topic=\"article\" \n\tms.date=\"07/21/2016\" \n\tms.author=\"mlearned\"/>\n\n# Getting Started with with a Javascript mobile app after adding Azure Mobile Services by using Visual Studio Connected Services\n\nThe first step you need to do in order to follow the code in these examples depends on what type of mobile service you connected to.\n\n - For a JavaScript backend mobile service, create a table called TodoItem.  To create a table,  locate the mobile service under the Azure node in Server Explorer, right-click the mobile service's node to open the context menu, and choose **Create Table**. Enter \"TodoItem\" as the table name.\n\n - If instead you have a .NET backend mobile service, there's already a TodoItem table in the default project template that Visual Studio created for you, but you need to publish it to Azure. To publish it, open the context menu for the mobile service project in Solution Explorer, and choose **Publish Web**. Accept the defaults, and choose the **Publish** button.\n\n## Get a reference to a table\n\nThe client object was added to your project already.  Its name is the name of your mobile service with \"Client\" appended to it. The following code gets a reference to a table that contains data for a TodoItem, which you can use in subsequent operations to read and update the data table.\n\n\tvar todoTable = yourMobileServiceClient.getTable('TodoItem');\n\n## Add an entry \n\nInsert a new item into a data table. An id (a GUID of type string) is automatically created as the primary key for the new row. Don't change the type of the id column, since the mobile services infrastructure uses it.\n\n    var todoTable = client.getTable('TodoItem');\n    var todoItems = new WinJS.Binding.List();\n    var insertTodoItem = function (todoItem) {\n        todoTable.insert(todoItem).done(function (item) {\n            todoItems.push(item);\n        });\n    };\n\n## Read/query a table\n\nThe following code queries a table for all items, updates a local collection and binds the result to the UI element listItems.\n\n        // This code refreshes the entries in the list view \n        // by querying the TodoItems table.\n        todoTable.where()\n            .read()\n            .done(function (results) {\n                todoItems = new WinJS.Binding.List(results);\n                listItems.winControl.itemDataSource = todoItems.dataSource;\n            });\n\nYou can use the where method to modify the query. Here's an example that filters out completed items.\n\n    todoTable.where(function () {\n        return (this.complete === false && this.createdAt !== null);\n    })\n    .read()\n    .done(function (results) {\n        todoItems = new WinJS.Binding.List(results);\n        listItems.winControl.itemDataSource = todoItems.dataSource;\n    });\n\nFor more examples of queries you can use, see [query object](http://msdn.microsoft.com/library/azure/jj613353.aspx).\n\n## Update an entry\n\nUpdate a row in a data table. In this example, *todoItem* is the updated item, and *item* is the same item as returned from the mobile service. When the mobile service responds, the item is updated in the local todoItems list using the [splice](http://msdn.microsoft.com/library/windows/apps/Hh700810.aspx) method. Call the **done** method on the returned [Promise](https://msdn.microsoft.com/library/dn802826.aspx) object to get a copy of the inserted object and handle any errors.\n\n        todoTable.update(todoItem).done(function (item) {\n            todoItems.splice(todoItems.indexOf(item), 1, item);\n        });\n\n## Delete an entry\n\nDelete a row in a data table. Call the [done]() method on the returned [Promise](https://msdn.microsoft.com/library/dn802826.aspx) object to get a copy of the inserted object and handle any errors.\n\n\ttodoTable.del(todoItem).done(function (item) {\n\t    todoItems.splice(todoItems.indexOf(item), 1);\n    }\n\n\n\n[Learn more about mobile services](https://azure.microsoft.com/documentation/services/mobile-services/) \n"
  },
  {
    "path": "docs/vs-mobile-services-javascript-what-happened.md",
    "content": "<properties \n\tpageTitle=\"What happens when you add Mobile Services to a Javascript app by using Visual Studio Connected Services | Microsoft Azure\" \n\tdescription=\"Describes what happened to your Azure Mobile Services project in Visual Studio\" \n\tservices=\"mobile-services\" \n\tdocumentationCenter=\"\" \n\tauthors=\"mlhoop\" \n\tmanager=\"douge\" \n\teditor=\"\"/>\n\n<tags \n\tms.service=\"mobile-services\" \n\tms.workload=\"mobile\" \n\tms.tgt_pltfrm=\"NA\" \n\tms.devlang=\"JavaScript\" \n\tms.topic=\"article\" \n\tms.date=\"07/21/2016\" \n\tms.author=\"mlearned\"/>\n\n# What happens to my Javascript project when I add Azure Mobile Services using Connected Visual Studio Services?\n\n## NuGet package added\n\nThe **WindowsAzure.MobileServices.WinJS** NuGet package was installed, including the Azure Mobile Service library in the `js\\MobileServices.js` file.\n  \n## Connection string values for Mobile Services \n\nIn the `services\\mobileServices\\settings` folder, a new JavaScript (.js) file with a **MobileServiceClient** was generated that contains the selected mobile service's application URL and application key.  \n\n## References added to default.html\n\nReferences to `MobileServices.js` and the settings file were added to `default.html`.  \n\n## Connected services files added\n\nIn the services folder, Connected Services configuration files were added.\n\n\n\n \n"
  },
  {
    "path": "sdk/Javascript/.gitignore",
    "content": "*.suo\n#ignore build files\nbin\nobj\nbld\n*.jsproj.user\ntest/*/js/MobileServices.*\npackages/*\n#just in case ignore the folders we pull from git (if a delete fails in the build process)\ntools/JSBuild/queryjs/*\ntools/JSBuild/esprima/*\nnode_modules\n"
  },
  {
    "path": "sdk/Javascript/Gruntfile.js",
    "content": "/// <vs BeforeBuild='default' />\nmodule.exports = function (grunt) {\n    // Project configuration.\n    grunt.initConfig({\n        pkg: grunt.file.readJSON('package.json'),\n        files: {\n            resources: [\n              'src/Strings/**/Resources.resjson'\n            ],\n            core: [\n              'src/Utilities/Extensions.js',\n              'src/MobileServiceClient.js',\n              'src/MobileServiceTable.js',\n              'src/MobileServiceLogin.js',\n              'src/Push/RegistrationManager.js',\n              'src/Push/LocalStorageManager.js',\n              'src/Push/PushHttpClient.js',\n              'src/Utilities/Validate.js',\n              'src/External/queryjs/lib/*.js',\n              'src/External/esprima/esprima.js'\n            ],\n            web: [\n              'src/Push/Push.Web.js',\n              'src/Platforms/Platform.Web.js',\n              'src/Generated/MobileServices.Core.js',\n              'src/Transports/*.js',\n              'src/LoginUis/*.js',\n              'src/Utilities/PostMessageExchange.js',\n              'src/Utilities/Promises.js'\n            ],\n            winjs: [\n              'src/Push/Push.WinJS.js',\n              'src/LoginUis/WebAuthBroker.js',\n              'src/Platforms/Platform.WinJS.js',\n            ],\n            node: [\n              'src/Internals/NodeExports.js',\n            ],\n            Internals: [\n              'src/Internals/InternalsVisible.js',\n            ],\n            Intellisense: [\n              'src/Internals/DevIntellisense.js',\n            ],\n        },\n        jshint: {\n            all: ['Gruntfile.js', 'src/**/*.js', '!src/External/**/*.js', '!src/Generated/*.js', 'test/**/*.js', '!test/**/bin/**', '!**/MobileServices.*.js']\n        },\n        concat: {\n            options: {\n                stripBanners: true,\n                banner: header,\n                process: wrapModule,\n                footer: footer\n            },\n            resources: {\n                options: {\n                    banner: '\\n\\t$__modules__.Resources = { };\\n\\n',\n                    process: wrapResourceFile,\n                    footer: ''\n                },\n                src: ['<%= files.resources %>'],\n                dest: 'src/Generated/Resources.js'\n            },\n            web: {\n                src: ['src/Require.js', 'src/Generated/Resources.js', '<%= files.core %>', '<%= files.web %>'],\n                dest: 'src/Generated/MobileServices.Web.js'\n            },\n            webinternals: {\n                options: {\n                    footer: '\\n\\trequire(\\'InternalsVisible\\');' + footer\n                },\n                src: ['src/Require.js', 'src/Generated/Resources.js', '<%= files.Internals %>', '<%= files.core %>', '<%= files.web %>'],\n                dest: 'src/Generated/MobileServices.Web.Internals.js'\n            },\n            winjs: {\n                src: ['src/Require.js', 'src/Generated/Resources.js', '<%= files.core %>', '<%= files.winjs %>'],\n                dest: 'src/Generated/MobileServices.js'\n            },\n            winjsinternals: {\n                options: {\n                    footer: '\\n\\trequire(\\'InternalsVisible\\');' + footer\n                },\n                src: ['src/Require.js', 'src/Generated/Resources.js', '<%= files.Internals %>', '<%= files.core %>', '<%= files.winjs %>'],\n                dest: 'src/Generated/MobileServices.Internals.js'\n            },\n            Intellisense: {\n                options: {\n                    footer: '\\n\\trequire(\\'DevIntellisense\\');' + footer\n                },\n                src: ['src/Require.js', '<%= files.core %>', '<%= files.winjs %>', '<%= files.Intellisense %>'],\n                dest: 'src/Generated/MobileServices.DevIntellisense.js'\n            }\n        },\n        uglify: {\n            options: {\n                banner: '//! Copyright (c) Microsoft Corporation. All rights reserved. <%= pkg.name %> v<%= pkg.version %>\\n',\n                mangle: false\n            },\n            web: {\n                src: 'src/Generated/MobileServices.Web.js',\n                dest: 'src/Generated/MobileServices.Web.min.js'\n            },\n            winjs: {\n                src: 'src/Generated/MobileServices.js',\n                dest: 'src/Generated/MobileServices.min.js'\n            }\n        }\n    });\n\n    // Load the plugin that provides the \"uglify\" task.\n    grunt.loadNpmTasks('grunt-contrib-uglify');\n    grunt.loadNpmTasks('grunt-contrib-jshint');\n    grunt.loadNpmTasks('grunt-contrib-concat');\n\n    // Default task(s).\n    grunt.registerTask('default', ['jshint', 'concat', 'uglify']);\n};\n\nvar header = '// ----------------------------------------------------------------------------\\n' +\n             '// Copyright (c) Microsoft Corporation. All rights reserved\\n' +\n             '// <%= pkg.name %> - v<%= pkg.version %>\\n' +\n             '// ----------------------------------------------------------------------------\\n' +\n             '\\n' +\n             '(function (global) {\\n' +\n             '\\tvar $__fileVersion__ = \\'<%= pkg.version %>\\';\\n',\n    footer = '\\n\\trequire(\\'MobileServiceClient\\');\\n' +\n             '})(this || exports);';\n\nfunction wrapModule(src, filepath) {\n    /// <summary>\n    /// Takes a file, and if it should be a module, wraps the code in a module block\n    /// </summary>\n    /// <param name=\"src\">\n    /// Source code of a module file\n    /// </param>\n    /// <param name=\"filepath\">\n    /// Sile path of the module (i.e. src/MobileServicesClient.js)\n    /// </param>\n\n    var lastSlash = filepath.lastIndexOf('/'),\n        name = filepath.substr(lastSlash + 1);\n\n    name = name.substring(0, name.indexOf('.'));\n    if (name == 'Require' || name == 'Resources') {\n        return src;\n    }\n\n    var newSrc = src.replace(/\\/\\/\\/\\s<[\\w\\s=\":\\\\().]+\\/>\\n/g, '');\n    newSrc = '\\t\\t' + newSrc.replace(/\\n/g, '\\n\\t\\t');\n\n    return '\\n\\t$__modules__.' + name + ' = function (exports) {\\n' + newSrc + '\\n\\t};';\n}\n\nfunction wrapResourceFile(src, filepath) {\n    /// <summary>\n    /// Takes a resjson file and places it into a module level resources array\n    /// with the index corresponding to the language identifier in the file path\n    /// </summary>\n    /// <param name=\"src\">\n    /// Source code of a module file\n    /// </param>\n    /// <param name=\"filepath\">\n    /// File path of the resjson (i.e. src/Strings/en-US/Resources.resjson)\n    /// The file name must be in format of <directories>/<locale>/Resources.resjson\n    /// </param>\n\n    var language = filepath.replace('src/Strings/', '').replace('/Resources.resjson', ''),\n        newSrc = src.replace(/\\n/g, '\\n\\t\\t');\n\n    return '\\t$__modules__.Resources[\\'' + language + '\\'] = ' + newSrc + ';';\n}"
  },
  {
    "path": "sdk/Javascript/Microsoft.WindowsAzure.Mobile.JS.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.30723.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.JS\", \"src\\Microsoft.WindowsAzure.Mobile.JS.csproj\", \"{0D39CF6F-4884-4D43-8744-2CEB723629C8}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"src\", \"src\", \"{2BDD39FE-2E9F-4B97-8173-02037CF765AA}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"test\", \"test\", \"{F52A1420-8C01-42ED-8EF2-71F83EE49A87}\"\nEndProject\nProject(\"{262852C6-CD72-467D-83FE-5EEB1973A190}\") = \"Microsoft.WindowsAzure.Mobile.WinJS.Test\", \"test\\winJS\\Microsoft.WindowsAzure.Mobile.WinJS.Test.jsproj\", \"{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8} = {0D39CF6F-4884-4D43-8744-2CEB723629C8}\n\tEndProjectSection\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.WinJS.TestFramework\", \"test\\framework\\Microsoft.WindowsAzure.Mobile.WinJS.TestFramework.csproj\", \"{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"tools\", \"tools\", \"{8F22488F-603B-4BA2-9AA0-DBC7D4487978}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.JSBuild\", \"tools\\JSBuild\\Microsoft.WindowsAzure.Mobile.JSBuild.csproj\", \"{FFD91CC6-07FF-4D69-A064-2A911E2B4087}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.Azure.Zumo.Web.Test\", \"test\\web\\Microsoft.Azure.Zumo.Web.Test.csproj\", \"{5AA504E2-10A2-4179-9645-47E5CF857DDF}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8} = {0D39CF6F-4884-4D43-8744-2CEB723629C8}\n\tEndProjectSection\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{B7E1D498-5891-43F0-80A6-6DE18515433C}\"\n\tProjectSection(SolutionItems) = preProject\n\t\tgruntfile.js = gruntfile.js\n\t\tpackage.json = package.json\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tBuildTools|Any CPU = BuildTools|Any CPU\n\t\tBuildTools|ARM = BuildTools|ARM\n\t\tBuildTools|x64 = BuildTools|x64\n\t\tBuildTools|x86 = BuildTools|x86\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\t\tSigned|Any CPU = Signed|Any CPU\n\t\tSigned|ARM = Signed|ARM\n\t\tSigned|x64 = Signed|x64\n\t\tSigned|x86 = Signed|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.BuildTools|Any CPU.ActiveCfg = BuildTools|Any CPU\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.BuildTools|ARM.ActiveCfg = BuildTools|ARM\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.BuildTools|ARM.Build.0 = BuildTools|ARM\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.BuildTools|x64.ActiveCfg = BuildTools|x64\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.BuildTools|x64.Build.0 = BuildTools|x64\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.BuildTools|x86.ActiveCfg = BuildTools|x86\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.BuildTools|x86.Build.0 = BuildTools|x86\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Debug|x64.Build.0 = Debug|x64\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Debug|x86.Build.0 = Debug|x86\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Release|ARM.Build.0 = Release|ARM\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Release|x64.ActiveCfg = Release|x64\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Release|x64.Build.0 = Release|x64\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Release|x86.ActiveCfg = Release|x86\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Release|x86.Build.0 = Release|x86\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Signed|ARM.ActiveCfg = Release|ARM\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Signed|ARM.Build.0 = Release|ARM\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Signed|x64.ActiveCfg = Release|x64\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Signed|x64.Build.0 = Release|x64\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Signed|x86.ActiveCfg = Release|x86\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8}.Signed|x86.Build.0 = Release|x86\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.BuildTools|Any CPU.ActiveCfg = BuildTools|Any CPU\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.BuildTools|ARM.ActiveCfg = BuildTools|ARM\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.BuildTools|ARM.Build.0 = BuildTools|ARM\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.BuildTools|ARM.Deploy.0 = BuildTools|ARM\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.BuildTools|x64.ActiveCfg = BuildTools|x64\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.BuildTools|x64.Build.0 = BuildTools|x64\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.BuildTools|x64.Deploy.0 = BuildTools|x64\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.BuildTools|x86.ActiveCfg = BuildTools|x86\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.BuildTools|x86.Build.0 = BuildTools|x86\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.BuildTools|x86.Deploy.0 = BuildTools|x86\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Debug|x64.Build.0 = Debug|x64\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Debug|x86.Build.0 = Debug|x86\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Release|ARM.Build.0 = Release|ARM\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Release|x64.ActiveCfg = Release|x64\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Release|x64.Build.0 = Release|x64\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Release|x64.Deploy.0 = Release|x64\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Release|x86.ActiveCfg = Release|x86\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Release|x86.Build.0 = Release|x86\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Release|x86.Deploy.0 = Release|x86\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Signed|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Signed|Any CPU.Build.0 = Debug|Any CPU\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Signed|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Signed|ARM.ActiveCfg = Release|ARM\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Signed|ARM.Build.0 = Release|ARM\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Signed|ARM.Deploy.0 = Release|ARM\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Signed|x64.ActiveCfg = Release|x64\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Signed|x64.Build.0 = Release|x64\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Signed|x64.Deploy.0 = Release|x64\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Signed|x86.ActiveCfg = Release|x86\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Signed|x86.Build.0 = Release|x86\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C}.Signed|x86.Deploy.0 = Release|x86\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.BuildTools|Any CPU.ActiveCfg = BuildTools|Any CPU\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.BuildTools|ARM.ActiveCfg = BuildTools|ARM\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.BuildTools|ARM.Build.0 = BuildTools|ARM\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.BuildTools|x64.ActiveCfg = BuildTools|x64\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.BuildTools|x64.Build.0 = BuildTools|x64\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.BuildTools|x86.ActiveCfg = BuildTools|x86\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.BuildTools|x86.Build.0 = BuildTools|x86\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Debug|x64.Build.0 = Debug|x64\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Debug|x86.Build.0 = Debug|x86\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Release|ARM.Build.0 = Release|ARM\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Release|x64.ActiveCfg = Release|x64\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Release|x64.Build.0 = Release|x64\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Release|x86.ActiveCfg = Release|x86\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Release|x86.Build.0 = Release|x86\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Signed|Any CPU.ActiveCfg = Signed|Any CPU\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Signed|Any CPU.Build.0 = Signed|Any CPU\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Signed|ARM.ActiveCfg = Signed|ARM\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Signed|ARM.Build.0 = Signed|ARM\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Signed|x64.ActiveCfg = Signed|x64\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Signed|x64.Build.0 = Signed|x64\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Signed|x86.ActiveCfg = Signed|x86\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}.Signed|x86.Build.0 = Signed|x86\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.BuildTools|Any CPU.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.BuildTools|Any CPU.Build.0 = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.BuildTools|ARM.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.BuildTools|x64.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.BuildTools|x86.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Debug|Any CPU.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Debug|ARM.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Debug|x64.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Debug|x86.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Release|Any CPU.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Release|Any CPU.Build.0 = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Release|ARM.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Release|x64.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Release|x86.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Signed|Any CPU.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Signed|Any CPU.Build.0 = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Signed|ARM.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Signed|x64.ActiveCfg = BuildTools|Any CPU\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087}.Signed|x86.ActiveCfg = BuildTools|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.BuildTools|Any CPU.ActiveCfg = BuildTools|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.BuildTools|ARM.ActiveCfg = BuildTools|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.BuildTools|x64.ActiveCfg = BuildTools|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.BuildTools|x86.ActiveCfg = BuildTools|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF}.Signed|x86.ActiveCfg = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{0D39CF6F-4884-4D43-8744-2CEB723629C8} = {2BDD39FE-2E9F-4B97-8173-02037CF765AA}\n\t\t{96B18D27-DFF3-47A2-835B-EF1E6AF1A39C} = {F52A1420-8C01-42ED-8EF2-71F83EE49A87}\n\t\t{6445515D-9E58-4812-BAD6-BC81DAF1C0EE} = {F52A1420-8C01-42ED-8EF2-71F83EE49A87}\n\t\t{FFD91CC6-07FF-4D69-A064-2A911E2B4087} = {8F22488F-603B-4BA2-9AA0-DBC7D4487978}\n\t\t{5AA504E2-10A2-4179-9645-47E5CF857DDF} = {F52A1420-8C01-42ED-8EF2-71F83EE49A87}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "sdk/Javascript/package.json",
    "content": "{\n  \"name\": \"AzureMobileServices\",\n  \"version\": \"1.2.8\",\n  \"devDependencies\": {\n    \"grunt\": \"~0.4.5\",\n    \"grunt-contrib-jshint\": \"~0.10.0\",\n    \"grunt-contrib-nodeunit\": \"~0.4.1\",\n    \"grunt-contrib-uglify\": \"~0.6.0\",\n    \"grunt-contrib-concat\": \"~0.5.0\"\n  }\n}\n"
  },
  {
    "path": "sdk/Javascript/src/Generated/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "sdk/Javascript/src/Internals/DevIntellisense.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n// The following declarations will let Visual Studio provide cross-module\n// Intellisense by defining free variables provided by the module system as\n// globals that it can find.  Visual Studio's JavaScript Intellisense engine\n// will actually evaluate code on a background thread, so when your module\n// calls require('foo'), VS actually runs the real require code (since we make\n// it visible here) and will provide Intellisense for all of foo's exports.\nglobal.exports = {};\nglobal.require = require;\n"
  },
  {
    "path": "sdk/Javascript/src/Internals/InternalsVisible.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n// Walk all of the registered modules and make all of their exports publicly\n// available for unit testing.  This relies on both the global and $__modules__\n// free variables exposed via our module system.\n\n\n// Cache all of the module definition functions before any of the modules have\n// been require-d.  This allows us to reset the modules by reevaluating all of\n// the definition functions.\nvar moduleCache = {};\nvar moduleName = null;\nfor (moduleName in $__modules__) {\n    moduleCache[moduleName] = $__modules__[moduleName];\n}\n\n// Expose all of the exports for each module\nexposeModules();\n\nfunction exposeModules() {\n    /// <summary>\n    /// Expose all of the exports for a module as a global member so they can\n    /// be easily accessed for testing.\n    /// <summary>\n    /// <remarks>\n    /// Note that all modules will be require-d to gain access to their\n    /// exported members.\n    /// </remarks>\n\n    var moduleName = null;\n    for (moduleName in $__modules__) {\n        // We need to require the module which will force all of its exports to\n        // be defined (or do nothing if they've already been require-d).\n        require(moduleName);\n\n        // Declare a new global variable with the module's names that will\n        // contain all of its exports.\n        global[moduleName] = $__modules__[moduleName];\n    }\n}\n\nglobal.resetModules = function () {\n    /// <summary>\n    /// Reset the modules by reevaluating the functions that provide their\n    /// exports.\n    /// </summary>\n\n    // Reset $__modules__ to contain the original functions\n    var moduleName = null;\n    for (moduleName in $__modules__) {\n        $__modules__[moduleName] = moduleCache[moduleName];\n    }\n\n    // Re-require all of the modules which will reevaluate their functions\n    exposeModules();\n};"
  },
  {
    "path": "sdk/Javascript/src/Internals/NodeExports.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n// The server-side node runtime wants to provide the same query syntax and we\n// want to reuse as much code as possible.  This will bundle up the entire\n// library and add a single node.js export that translates queries into OData.\n\nglobal.Query = require('Query').Query;\n"
  },
  {
    "path": "sdk/Javascript/src/LoginUis/BrowserPopup.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nvar PostMessageExchange = require('PostMessageExchange');\n\nexports.supportsCurrentRuntime = function () {\n    /// <summary>\n    /// Determines whether or not this login UI is usable in the current runtime.\n    /// </summary>\n    return true;\n};\n\nexports.login = function (startUri, endUri, callback) {\n    /// <summary>\n    /// Displays the login UI and calls back on completion\n    /// </summary>\n\n    // Tell the runtime which form of completion signal we are looking for,\n    // and which origin should be allowed to receive the result (note that this\n    // is validated against whitelist on the server; we are only supplying this\n    // origin to indicate *which* of the whitelisted origins to use).\n    var completionOrigin = PostMessageExchange.getOriginRoot(window.location.href),\n        runtimeOrigin = PostMessageExchange.getOriginRoot(startUri),\n        // IE does not support popup->opener postMessage calls, so we have to\n        // route the message via an iframe\n        useIntermediateIframe = window.navigator.userAgent.indexOf(\"MSIE\") >= 0 || window.navigator.userAgent.indexOf(\"Trident\") >= 0,\n        intermediateIframe = useIntermediateIframe && createIntermediateIframeForLogin(runtimeOrigin, completionOrigin),\n        completionType = useIntermediateIframe ? \"iframe\" : \"postMessage\";\n\n    startUri += startUri.indexOf('?') == -1 ? '?' : '&';\n    startUri += \"completion_type=\" + completionType + \"&completion_origin=\" + encodeURIComponent(completionOrigin);\n\n    // Browsers don't allow postMessage to a file:// URL (except by setting origin to \"*\", which is unacceptable)\n    // so abort the process early with an explanation in that case.\n    if (!(completionOrigin && (completionOrigin.indexOf(\"http:\") === 0 || completionOrigin.indexOf(\"https:\") === 0))) {\n        var error = \"Login is only supported from http:// or https:// URLs. Please host your page in a web server.\";\n        callback(error, null);\n        return;\n    }\n\n    var loginWindow = window.open(startUri, \"_blank\", \"location=no\"),\n        complete = function(errorValue, oauthValue) {\n            // Clean up event handlers, windows, frames, ...\n            window.clearInterval(checkForWindowClosedInterval);\n            loginWindow.close();\n            if (window.removeEventListener) {\n                window.removeEventListener(\"message\", handlePostMessage);\n            } else {\n                // For IE8\n                window.detachEvent(\"onmessage\", handlePostMessage);\n            }\n            if (intermediateIframe) {\n                intermediateIframe.parentNode.removeChild(intermediateIframe);\n            }\n            \n            // Finally, notify the caller\n            callback(errorValue, oauthValue);\n        },\n        handlePostMessage = function(evt) {\n            // Validate source\n            var expectedSource = useIntermediateIframe ? intermediateIframe.contentWindow : loginWindow;\n            if (evt.source !== expectedSource) {\n                return;\n            }\n\n            // Parse message\n            var envelope;\n            try {\n                envelope = JSON.parse(evt.data);\n            } catch(ex) {\n                // Not JSON - it's not for us. Ignore it and keep waiting for the next message.\n                return;\n            }\n\n            // Process message only if it's for us\n            if (envelope && envelope.type === \"LoginCompleted\" && (envelope.oauth || envelope.error)) {\n                complete(envelope.error, envelope.oauth);\n            }\n        },\n        checkForWindowClosedInterval = window.setInterval(function() {\n            // We can't directly catch any \"onclose\" event from the popup because it's usually on a different\n            // origin, but in all the mainstream browsers we can poll for changes to its \"closed\" property\n            if (loginWindow && loginWindow.closed === true) {\n                complete(\"canceled\", null);\n            }\n        }, 250);\n\n    if (window.addEventListener) {\n        window.addEventListener(\"message\", handlePostMessage, false);\n    } else {\n        // For IE8\n        window.attachEvent(\"onmessage\", handlePostMessage);\n    }\n    \n    // Permit cancellation, e.g., if the app tries to login again while the popup is still open\n    return {\n        cancelCallback: function () {\n            complete(\"canceled\", null);\n            return true; // Affirm that it was cancelled\n        }\n    };\n};\n\nfunction createIntermediateIframeForLogin(runtimeOrigin, completionOrigin) {\n    var frame = document.createElement(\"iframe\");\n    frame.name = \"zumo-login-receiver\"; // loginviaiframe.html specifically looks for this name\n    frame.src = runtimeOrigin +\n        \"/crossdomain/loginreceiver?completion_origin=\" + encodeURIComponent(completionOrigin);\n    frame.setAttribute(\"width\", 0);\n    frame.setAttribute(\"height\", 0);\n    frame.style.display = \"none\";\n    document.body.appendChild(frame);\n    return frame;\n}"
  },
  {
    "path": "sdk/Javascript/src/LoginUis/CordovaPopup.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n// Note: Cordova is PhoneGap.\n// This login UI implementation uses the InAppBrowser plugin,\n// to install the plugin use the following command\n//   cordova plugin add org.apache.cordova.inappbrowser\n\nvar requiredCordovaVersion = { major: 3, minor: 0 };\n\nexports.supportsCurrentRuntime = function () {\n    /// <summary>\n    /// Determines whether or not this login UI is usable in the current runtime.\n    /// </summary>\n\n    // When running application inside of Ripple emulator, InAppBrowser functionality is not supported.\n    // We should use Browser popup login method instead.\n    return !!currentCordovaVersion() && !isRunUnderRippleEmulator();\n};\n\nexports.login = function (startUri, endUri, callback) {\n    /// <summary>\n    /// Displays the login UI and calls back on completion\n    /// </summary>\n\n    // Ensure it's a sufficiently new version of Cordova, and if not fail synchronously so that\n    // the error message will show up in the browser console.\n    var foundCordovaVersion = currentCordovaVersion(),\n        message;\n\n    if (!isSupportedCordovaVersion(foundCordovaVersion)) {\n        message = \"Not a supported version of Cordova. Detected: \" + foundCordovaVersion +\n                    \". Required: \" + requiredCordovaVersion.major + \".\" + requiredCordovaVersion.minor;\n        throw new Error(message);\n    }\n    if (!hasInAppBrowser) {\n        message = 'A required plugin: \"org.apache.cordova.inappbrowser\" was not detected.';\n        throw new Error(message);\n    }\n\n    // Initially we show a page with a spinner. This stays on screen until the login form has loaded.\n    var redirectionScript = \"<script>location.href = unescape('\" + window.escape(startUri) + \"')</script>\",\n        startPage = \"data:text/html,\" + encodeURIComponent(getSpinnerMarkup() + redirectionScript);\n\n    // iOS inAppBrowser issue requires this wrapping\n    setTimeout(function () {\n        var loginWindow = window.open(startPage, \"_blank\", \"location=no\"),\n            flowHasFinished = false,\n            loadEventHandler = function (evt) {\n                if (!flowHasFinished && evt.url.indexOf(endUri) === 0) {\n                    flowHasFinished = true;\n                    setTimeout(function () {\n                        loginWindow.close();\n                    }, 500);\n                    var result = parseOAuthResultFromDoneUrl(evt.url);\n                    callback(result.error, result.oAuthToken);\n                }\n            };\n\n        // Ideally we'd just use loadstart because it happens earlier, but it randomly skips\n        // requests on iOS, so we have to listen for loadstop as well (which is reliable).\n        loginWindow.addEventListener('loadstart', loadEventHandler);\n        loginWindow.addEventListener('loadstop', loadEventHandler);\n\n        loginWindow.addEventListener('exit', function (evt) {\n            if (!flowHasFinished) {\n                flowHasFinished = true;\n                callback(\"UserCancelled\", null);\n            }\n        });\n    }, 500);\n};\n\nfunction isRunUnderRippleEmulator () {\n    // Returns true when application runs under Ripple emulator \n    return window.parent && !!window.parent.ripple;\n}\n\nfunction currentCordovaVersion() {\n    // If running inside Cordova, returns a string similar to \"3.5.0\". Otherwise, returns a falsey value.\n    // Note: We can only detect Cordova after its deviceready event has fired, so don't call login until then.\n    return window.cordova && window.cordova.version;\n}\n\nfunction isSupportedCordovaVersion(version) {\n    var versionParts = currentCordovaVersion().match(/^(\\d+).(\\d+)./);\n    if (versionParts) {\n        var major = Number(versionParts[1]),\n            minor = Number(versionParts[2]),\n            required = requiredCordovaVersion;\n        return (major > required.major) ||\n               (major === required.major && minor >= required.minor);\n    }\n    return false;\n}\n\nfunction hasInAppBrowser() {\n    return !window.open;\n}\n\nfunction parseOAuthResultFromDoneUrl(url) {\n    var successMessage = extractMessageFromUrl(url, \"#token=\"),\n        errorMessage = extractMessageFromUrl(url, \"#error=\");\n    return {\n        oAuthToken: successMessage ? JSON.parse(successMessage) : null,\n        error: errorMessage\n    };\n}\n\nfunction extractMessageFromUrl(url, separator) {\n    var pos = url.indexOf(separator);\n    return pos < 0 ? null : decodeURIComponent(url.substring(pos + separator.length));\n}\n\nfunction getSpinnerMarkup() {\n    // The default InAppBrowser experience isn't ideal, as it just shows the user a blank white screen\n    // until the login form appears. This might take 10+ seconds during which it looks broken.\n    // Also on iOS it's possible for the InAppBrowser to initially show the results of the *previous*\n    // login flow if the InAppBrowser was dismissed before completion, which is totally undesirable.\n    // To fix both of these problems, we display a simple \"spinner\" graphic via a data: URL until\n    // the current login screen has loaded. We generate the spinner via CSS rather than referencing\n    // an animated GIF just because this makes the client library smaller overall.\n    var vendorPrefix = \"webkitTransform\" in document.documentElement.style ? \"-webkit-\" : \"\",\n        numSpokes = 12,\n        spokesMarkup = \"\";\n    for (var i = 0; i < numSpokes; i++) {\n        spokesMarkup += \"<div style='-prefix-transform: rotateZ(\" + (180 + i * 360 / numSpokes) + \"deg);\" +\n                                    \"-prefix-animation-delay: \" + (0.75 * i / numSpokes) + \"s;'></div>\";\n    }\n    return [\n        \"<!DOCTYPE html><html>\",\n        \"<head><meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1'></head>\",\n        \"<body><div id='spinner'>\" + spokesMarkup + \"</div>\",\n        \"<style type='text/css'>\",\n        \"    #spinner { position: absolute; top: 50%; left: 50%; -prefix-animation: spinner 10s linear infinite; }\",\n        \"    #spinner > div {\",\n        \"        background: #333; opacity: 0; position: absolute; top: 11px; left: -2px; width: 4px; height: 21px; border-radius: 2px;\",\n        \"        -prefix-transform-origin: 50% -11px; -prefix-animation: spinner-spoke 0.75s linear infinite;\",\n        \"    }\",\n        \"    @-prefix-keyframes spinner { 0% { -prefix-transform: rotateZ(0deg); } 100% { -prefix-transform: rotateZ(-360deg); } }\",\n        \"    @-prefix-keyframes spinner-spoke { 0% { opacity: 0; } 5% { opacity: 1; } 70% { opacity: 0; } 100% { opacity: 0; } }\",\n        \"</style>\",\n        \"</body></html>\"\n    ].join(\"\").replace(/-prefix-/g, vendorPrefix);\n}"
  },
  {
    "path": "sdk/Javascript/src/LoginUis/WebAuthBroker.js",
    "content": "﻿\nexports.supportsCurrentRuntime = function () {\n    /// <summary>\n    /// Determines whether or not this login UI is usable in the current runtime.\n    /// </summary>\n\n    return isWebAuthBrokerAvailable();\n};\n\nexports.login = function (startUri, endUri, callback) {\n    /// <summary>\n    /// Displays the login UI and calls back on completion\n    /// </summary>\n\n    // Define shortcuts for namespaces\n    var windowsWebAuthBroker = Windows.Security.Authentication.Web.WebAuthenticationBroker;\n    var noneWebAuthOptions = Windows.Security.Authentication.Web.WebAuthenticationOptions.none;\n    var successWebAuthStatus = Windows.Security.Authentication.Web.WebAuthenticationStatus.success;\n    var activationKindWebAuthContinuation = Windows.ApplicationModel.Activation.ActivationKind.webAuthenticationBrokerContinuation;\n\n    var webAuthBrokerSuccessCallback = null;\n    var webAuthBrokerErrorCallback = null;\n    var webAuthBrokerContinuationCallback = null;\n\n\n    // define callbacks for WebAuthenticationBroker\n    webAuthBrokerSuccessCallback = function (result) {\n        var error = null;\n        var token = null;\n\n        if (result.responseStatus !== successWebAuthStatus) {\n            error = result;\n        }\n        else {\n            var callbackEndUri = result.responseData;\n            var tokenAsJson = null;\n            var i = callbackEndUri.indexOf('#token=');\n            if (i > 0) {\n                tokenAsJson = decodeURIComponent(callbackEndUri.substring(i + 7));\n            }\n            else {\n                i = callbackEndUri.indexOf('#error=');\n                if (i > 0) {\n                    error = decodeURIComponent(callbackEndUri.substring(i + 7));\n                }\n            }\n\n            if (tokenAsJson !== null) {\n                try {\n                    token = JSON.parse(tokenAsJson);\n                }\n                catch (e) {\n                    error = e;\n                }\n            }\n        }\n\n        callback(error, token);\n    };\n    webAuthBrokerErrorCallback = function (error) {\n        callback(error, null);\n    };\n    // Continuation callback is used when we're running on WindowsPhone which uses \n    // AuthenticateAndContinue method instead of AuthenticateAsync, which uses different async model\n    // Continuation callback need to be assigned to Application's 'activated' event.\n    webAuthBrokerContinuationCallback = function (activationArgs) {\n        if (activationArgs.detail.kind === activationKindWebAuthContinuation) {\n            var result = activationArgs.detail.webAuthenticationResult;\n            if (result.responseStatus == successWebAuthStatus) {\n                webAuthBrokerSuccessCallback(result);\n            } else {\n                webAuthBrokerErrorCallback(result);\n            }\n            WinJS.Application.removeEventListener('activated', webAuthBrokerContinuationCallback);\n        }\n    };\n\n    if (endUri) {\n        var windowsStartUri = new Windows.Foundation.Uri(startUri);\n        var windowsEndUri = new Windows.Foundation.Uri(endUri);\n\n        // If authenticateAndContinue method is available, we should use it instead of authenticateAsync\n        if (windowsWebAuthBroker.authenticateAndContinue) {\n            WinJS.Application.addEventListener('activated', webAuthBrokerContinuationCallback, true);\n            windowsWebAuthBroker.authenticateAndContinue(windowsStartUri, windowsEndUri);\n        } else {\n            windowsWebAuthBroker.authenticateAsync(noneWebAuthOptions, windowsStartUri, windowsEndUri)\n                                .done(webAuthBrokerSuccessCallback, webAuthBrokerErrorCallback);\n        }\n    } else {\n        // If no endURI was given, then we'll use the single sign-on overload of the \n        // windowsWebAuthBroker. Single sign-on requires that the application's Package SID \n        // be registered with the Microsoft Azure Mobile Service, but it provides a better \n        // experience as HTTP cookies are supported so that users do not have to\n        // login in everytime the application is launched.\n        var redirectUri = windowsWebAuthBroker.getCurrentApplicationCallbackUri().absoluteUri;\n        var startUriWithRedirect = startUri + \"?sso_end_uri=\" + encodeURIComponent(redirectUri);\n        var windowsStartUriWithRedirect = new Windows.Foundation.Uri(startUriWithRedirect);\n\n        // If authenticateAndContinue method is available, we should use it instead of authenticateAsync\n        if (windowsWebAuthBroker.authenticateAndContinue) {\n            WinJS.Application.addEventListener('activated', webAuthBrokerContinuationCallback, true);\n            windowsWebAuthBroker.authenticateAndContinue(windowsStartUriWithRedirect);\n        } else {\n            windowsWebAuthBroker.authenticateAsync(noneWebAuthOptions, windowsStartUriWithRedirect)\n                                .done(webAuthBrokerSuccessCallback, webAuthBrokerErrorCallback);\n        }\n    }\n};\n\nfunction isWebAuthBrokerAvailable() {\n    // If running on windows8/8.1 or Windows Phone returns true, otherwise false\n    return !!(window.Windows &&\n        window.Windows.Security &&\n        window.Windows.Security.Authentication &&\n        window.Windows.Security.Authentication.Web &&\n        window.Windows.Security.Authentication.Web.WebAuthenticationBroker);\n}\n"
  },
  {
    "path": "sdk/Javascript/src/Microsoft.WindowsAzure.Mobile.JS.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <ToolsPath>$(MSBuildProjectDirectory)\\..\\tools</ToolsPath>\n    <MakePriPath Condition=\"Exists('$(MSBuildProgramFiles32)\\Windows Kits\\8.0\\bin\\x64\\makepri.exe')\">$(MSBuildProgramFiles32)\\Windows Kits\\8.0\\bin\\x64\\makepri.exe</MakePriPath>\n    <MakePriPath Condition=\"Exists('..\\..\\Tools\\makepri.exe')\">..\\..\\Tools\\makepri.exe</MakePriPath>\n  </PropertyGroup>\n  <PropertyGroup>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{0D39CF6F-4884-4D43-8744-2CEB723629C8}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.Mobile.JS</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.JS</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <RunCodeAnalysis>false</RunCodeAnalysis>\n    <CodeAnalysisRuleSet>..\\..\\tools\\Strict.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisIgnoreGeneratedCode>true</CodeAnalysisIgnoreGeneratedCode>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'BuildTools|AnyCPU'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\BuildTools\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <DebugType>full</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>..\\..\\tools\\Strict.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'BuildTools|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\BuildTools\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <NoStdLib>true</NoStdLib>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'BuildTools|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\BuildTools\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <NoStdLib>true</NoStdLib>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'BuildTools|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\BuildTools\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <NoStdLib>true</NoStdLib>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Include=\"Generated\\MobileServices.pri\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Generated\\MobileServices.DevIntellisense.js\" />\n    <Content Include=\"Generated\\MobileServices.Internals.js\" />\n    <Content Include=\"Generated\\MobileServices.js\" />\n    <Content Include=\"Generated\\MobileServices.Web.Internals.js\" />\n    <Content Include=\"Generated\\MobileServices.Web.js\" />\n    <Content Include=\"Internals\\DevIntellisense.js\" />\n    <Content Include=\"Internals\\InternalsVisible.js\" />\n    <Content Include=\"Internals\\NodeExports.js\" />\n    <Content Include=\"LoginUis\\BrowserPopup.js\" />\n    <Content Include=\"LoginUis\\CordovaPopup.js\" />\n    <Content Include=\"LoginUis\\WebAuthBroker.js\" />\n    <Content Include=\"MobileServiceClient.js\" />\n    <Content Include=\"MobileServiceLogin.js\" />\n    <Content Include=\"MobileServices.intellisense.js\" />\n    <Content Include=\"MobileServices.priconfig.xml\" />\n    <Content Include=\"MobileServiceTable.js\" />\n    <Content Include=\"Platforms\\Platform.Web.js\" />\n    <Content Include=\"Platforms\\Platform.WinJS.js\" />\n    <Content Include=\"Push\\Push.Web.js\" />\n    <Content Include=\"Push\\PushHttpClient.js\" />\n    <Content Include=\"Push\\LocalStorageManager.js\" />\n    <Content Include=\"Push\\Push.WinJS.js\" />\n    <Content Include=\"Push\\RegistrationManager.js\" />\n    <Content Include=\"Transports\\IframeTransport.js\" />\n    <Content Include=\"Transports\\DirectAjaxTransport.js\" />\n    <Content Include=\"Utilities\\Extensions.js\" />\n    <Content Include=\"Utilities\\PostMessageExchange.js\" />\n    <Content Include=\"Utilities\\Promises.js\" />\n    <Content Include=\"Utilities\\Validate.js\" />\n    <PRIResource Include=\"Strings\\en-US\\Resources.resjson\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <!-- Create the .pri file -->\n  <Target Name=\"CreatePriFile\" Condition=\"'$(MakePriPath)' != ''\">\n    <Exec Command=\"&quot;$(MakePriPath)&quot; new /pr strings /cf MobileServices.priconfig.xml /of MobileServices.pri /in MobileServices /o\" />\n    <Copy SourceFiles=\"MobileServices.pri\" DestinationFolder=\"Generated\" OverwriteReadOnlyFiles=\"true\" />\n    <Delete Files=\"MobileServices.pri\" />\n  </Target>\n  <PropertyGroup>\n    <BuildDependsOn>\n      $(BuildDependsOn);\n      CreatePriFile;\n    </BuildDependsOn>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "sdk/Javascript/src/MobileServiceClient.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"Generated\\MobileServices.DevIntellisense.js\" />\n\nvar _ = require('Extensions');\nvar Validate = require('Validate');\nvar Platform = require('Platform');\nvar MobileServiceTable = require('MobileServiceTable').MobileServiceTable;\nvar MobileServiceLogin = require('MobileServiceLogin').MobileServiceLogin;\nvar Push;\ntry {\n    Push = require('Push').Push;\n} catch (e) { }\n\nvar _zumoFeatures = {\n    JsonApiCall: \"AJ\",               // Custom API call, where the request body is serialized as JSON\n    GenericApiCall: \"AG\",            // Custom API call, where the request body is sent 'as-is'\n    AdditionalQueryParameters: \"QS\", // Table or API call, where the caller passes additional query string parameters\n    OptimisticConcurrency: \"OC\",     // Table update / delete call, using Optimistic Concurrency (If-Match headers)\n    TableRefreshCall: \"RF\",          // Refresh table call\n    TableReadRaw: \"TR\",              // Table reads where the caller uses a raw query string to determine the items to be returned\n    TableReadQuery: \"TQ\",            // Table reads where the caller uses a function / query OM to determine the items to be returned\n};\nvar _zumoFeaturesHeaderName = \"X-ZUMO-FEATURES\";\n\nfunction MobileServiceClient(applicationUrl, applicationKey) {\n    /// <summary>\n    /// Initializes a new instance of the MobileServiceClient class.\n    /// </summary>\n    /// <param name=\"applicationUrl\" type=\"string\" mayBeNull=\"false\">\n    /// The URL to the Mobile Services application.\n    /// </param>\n    /// <param name=\"applicationKey\" type=\"string\" mayBeNull=\"false\">\n    /// The Mobile Service application's key.\n    /// </param>\n\n    Validate.isString(applicationUrl, 'applicationUrl');\n    Validate.notNullOrEmpty(applicationUrl, 'applicationUrl');\n    Validate.isString(applicationKey, 'applicationKey');\n\n    this.applicationUrl = applicationUrl;\n    this.applicationKey = applicationKey || null;\n\n    var sdkInfo = Platform.getSdkInfo();\n    var osInfo = Platform.getOperatingSystemInfo();\n    var sdkVersion = sdkInfo.fileVersion.split(\".\").slice(0, 2).join(\".\");\n    this.version = \"ZUMO/\" + sdkVersion + \" (lang=\" + sdkInfo.language + \"; \" +\n                                            \"os=\" + osInfo.name + \"; \" +\n                                            \"os_version=\" + osInfo.version + \"; \" +\n                                            \"arch=\" + osInfo.architecture + \"; \" +\n                                            \"version=\" + sdkInfo.fileVersion + \")\";\n    this.currentUser = null;\n    this._serviceFilter = null;\n    this._login = new MobileServiceLogin(this);\n\n    this.getTable = function (tableName) {\n        /// <summary>\n        /// Gets a reference to a table and its data operations.\n        /// </summary>\n        /// <param name=\"tableName\">The name of the table.</param>\n        /// <returns>A reference to the table.</returns>\n\n        Validate.isString(tableName, 'tableName');\n        Validate.notNullOrEmpty(tableName, 'tableName');\n        return new MobileServiceTable(tableName, this);\n    };\n\n    if (Push) {\n        this.push = new Push(this);\n    }\n}\n\n// Export the MobileServiceClient class\nexports.MobileServiceClient = MobileServiceClient;\n\n// Define the MobileServiceClient in a namespace (note: this has global effects\n// unless the platform we're using chooses to ignore it because exports are\n// good enough).\nPlatform.addToMobileServicesClientNamespace({ MobileServiceClient: MobileServiceClient });\n\nMobileServiceClient.prototype.withFilter = function (serviceFilter) {\n    /// <summary>\n    /// Create a new MobileServiceClient with a filter used to process all\n    /// of its HTTP requests and responses.\n    /// </summary>\n    /// <param name=\"serviceFilter\" type=\"Function\">\n    /// The filter to use on the service.  The signature of a serviceFilter is\n    ///    function(request, next, callback)\n    ///  where\n    ///    next := function(request, callback)\n    ///    callback := function(error, response)\n    /// </param>\n    /// <returns type=\"MobileServiceClient\">\n    /// A new MobileServiceClient whose HTTP requests and responses will be\n    /// filtered as desired.\n    /// </returns>\n    /// <remarks>\n    /// The Mobile Services HTTP pipeline is a chain of filters composed\n    /// together by giving each the next operation which it can invoke\n    /// (zero, one, or many times as necessary).  The default continuation\n    /// of a brand new MobileServiceClient will just get the HTTP response\n    /// for the corresponding request.  Here's an example of a Handle\n    /// implementation that will automatically retry a request that times\n    /// out.\n    ///     function(req, next, callback) {\n    ///         next(req, function(err, rsp) {\n    ///           if (rsp.statusCode >= 400) {\n    ///               next(req, callback);\n    ///           } else {\n    ///               callback(err, rsp);\n    ///           }\n    ///         });\n    ///     }\n    /// Note that because these operations are asynchronous, this sample\n    /// filter could end up actually making two HTTP requests before\n    /// returning a response to the developer without the developer writing\n    /// any special code to handle the situation.\n    /// -\n    /// Filters are composed just like standard function composition.  If\n    /// we had new MobileServiceClient().withFilter(F1).withFilter(F2)\n    /// .withFilter(F3), it's conceptually equivalent to saying:\n    ///     var response = F3(F2(F1(next(request)));\n    /// </remarks>\n\n    Validate.notNull(serviceFilter, 'serviceFilter');\n\n    // Clone the current instance\n    var client = new MobileServiceClient(this.applicationUrl, this.applicationKey);\n    client.currentUser = this.currentUser;\n\n    // Chain the service filter with any existing filters\n    var existingFilter = this._serviceFilter;\n    client._serviceFilter = _.isNull(existingFilter) ?\n        serviceFilter :\n        function (req, next, callback) {\n            // compose existingFilter with next so it can be used as the next\n            // of the new serviceFilter\n            var composed = function (req, callback) {\n                existingFilter(req, next, callback);\n            };\n            serviceFilter(req, composed, callback);\n        };\n\n    return client;\n};\n\nMobileServiceClient.prototype._request = function (method, uriFragment, content, ignoreFilters, headers, features, callback) {\n    /// <summary>\n    /// Perform a web request and include the standard Mobile Services headers.\n    /// </summary>\n    /// <param name=\"method\" type=\"string\">\n    /// The HTTP method used to request the resource.\n    /// </param>\n    /// <param name=\"uriFragment\" type=\"String\">\n    /// URI of the resource to request (relative to the Mobile Services\n    /// runtime).\n    /// </param>\n    /// <param name=\"content\" type=\"Object\">\n    /// Optional content to send to the resource.\n    /// </param>\n    /// <param name=\"ignoreFilters\" type=\"Boolean\" mayBeNull=\"true\">\n    /// Optional parameter to indicate if the client filters should be ignored\n    /// and the request should be sent directly. Is false by default.\n    /// </param>\n    /// <param name=\"headers\" type=\"Object\">\n    /// Optional request headers\n    /// </param>\n    /// <param name=\"features\" type=\"Array\">\n    /// Codes for features which are used in this request, sent to the server for telemetry.\n    /// </param>\n    /// <param name=\"callback\" type=\"function(error, response)\">\n    /// Handler that will be called on the response.\n    /// </param>\n\n    // Account for absent optional arguments\n    if (_.isNull(callback) && (typeof features === 'function')) {\n        callback = features;\n        features = null;\n    }\n\n    if (_.isNull(callback) && (typeof headers === 'function')) {\n        callback = headers;\n        headers = null;\n    }\n\n    if (_.isNull(callback) && (typeof ignoreFilters === 'function')) {\n        callback = ignoreFilters;\n        ignoreFilters = false;\n    }\n    \n    if (_.isNull(callback) && (typeof content === 'function')) {\n        callback = content;\n        content = null;\n    }\n\n    Validate.isString(method, 'method');\n    Validate.notNullOrEmpty(method, 'method');\n    Validate.isString(uriFragment, 'uriFragment');\n    Validate.notNull(uriFragment, 'uriFragment');\n    Validate.notNull(callback, 'callback');\n\n    // Create the absolute URI\n    var options = { type: method.toUpperCase() };\n    if (_.url.isAbsoluteUrl(uriFragment)) {\n        options.url = uriFragment;\n    } else {\n        options.url = _.url.combinePathSegments(this.applicationUrl, uriFragment);\n    }\n\n    // Set MobileServices authentication, application, User-Agent and telemetry headers\n    options.headers = {};\n    if (!_.isNull(headers)) {\n        _.extend(options.headers, headers);\n    }\n    options.headers[\"X-ZUMO-INSTALLATION-ID\"] = MobileServiceClient._applicationInstallationId;\n    if (!_.isNullOrEmpty(this.applicationKey)) {\n        options.headers[\"X-ZUMO-APPLICATION\"] = this.applicationKey;\n    }\n    if (this.currentUser && !_.isNullOrEmpty(this.currentUser.mobileServiceAuthenticationToken)) {\n        options.headers[\"X-ZUMO-AUTH\"] = this.currentUser.mobileServiceAuthenticationToken;\n    }\n    if (!_.isNull(MobileServiceClient._userAgent)) {\n        options.headers[\"User-Agent\"] = MobileServiceClient._userAgent;\n    }\n    if (!_.isNullOrEmpty[\"X-ZUMO-VERSION\"]) {\n        options.headers[\"X-ZUMO-VERSION\"] = this.version;\n    }\n\n    if (_.isNull(options.headers[_zumoFeaturesHeaderName]) && features && features.length) {\n        options.headers[_zumoFeaturesHeaderName] = features.join(',');\n    }\n\n    // Add any content as JSON\n    if (!_.isNull(content)) {\n        if (!_.isString(content)) {\n            options.data = _.toJson(content);\n        } else {\n            options.data = content;\n        }\n\n        if(!_.hasProperty(options.headers, ['Content-Type','content-type','CONTENT-TYPE','Content-type'])) {\n            options.headers['Content-Type'] = 'application/json';\n        }\n    } else {\n        // options.data must be set to null if there is no content or the xhr object\n        // will set the content-type to \"application/text\" for non-GET requests.\n        options.data = null;\n    }\n\n    // Treat any >=400 status codes as errors.  Also treat the status code 0 as\n    // an error (which indicates a connection failure).\n    var handler = function (error, response) {\n        if (!_.isNull(error)) {\n            error = _.createError(error);\n        } else if (!_.isNull(response) && (response.status >= 400 || response.status === 0)) {\n            error = _.createError(null, response);\n            response = null;\n        }\n        callback(error, response);\n    };\n\n    // Make the web request\n    if (!_.isNull(this._serviceFilter) && !ignoreFilters) {\n        this._serviceFilter(options, Platform.webRequest, handler);\n    } else {\n        Platform.webRequest(options, handler);\n    }\n};\n\nMobileServiceClient.prototype.loginWithOptions = Platform.async(\n     function (provider, options, callback) {\n         /// <summary>\n         /// Log a user into a Mobile Services application given a provider name with\n         /// given options.\n         /// </summary>\n         /// <param name=\"provider\" type=\"String\" mayBeNull=\"false\">\n         /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', \n         /// 'windowsazureactivedirectory' (can also use 'aad')\n         /// or 'microsoftaccount'.\n         /// </param>\n         /// <param name=\"options\" type=\"Object\" mayBeNull=\"true\">\n         /// Contains additional parameter information, valid values are:\n         ///    token: provider specific object with existing OAuth token to log in with\n         ///    useSingleSignOn: Only applies to Windows 8 clients.  Will be ignored on other platforms.\n         /// Indicates if single sign-on should be used. Single sign-on requires that the \n         /// application's Package SID be registered with the Microsoft Azure Mobile Service, \n         /// but it provides a better experience as HTTP cookies are supported so that users \n         /// do not have to login in everytime the application is launched.\n         ///    parameters: Any additional provider specific query string parameters.\n         /// </param>\n         /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n         /// Optional callback accepting (error, user) parameters.\n         /// </param>\n         this._login.loginWithOptions(provider, options, callback);\n});\n\nMobileServiceClient.prototype.login = Platform.async(\n    function (provider, token, useSingleSignOn, callback) {\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name and optional \n        /// authentication token.\n        /// </summary>\n        /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">\n        /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', \n        /// 'windowsazureactivedirectory' (can also use 'aad')\n        /// or 'microsoftaccount'. If no provider is specified, the 'token' parameter\n        /// is considered a Microsoft Account authentication token. If a provider is specified, \n        /// the 'token' parameter is considered a provider-specific authentication token.\n        /// </param>\n        /// <param name=\"token\" type=\"Object\" mayBeNull=\"true\">\n        /// Optional, provider specific object with existing OAuth token to log in with.\n        /// </param>\n        /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n        /// Only applies to Windows 8 clients.  Will be ignored on other platforms.\n        /// Indicates if single sign-on should be used. Single sign-on requires that the \n        /// application's Package SID be registered with the Microsoft Azure Mobile Service, \n        /// but it provides a better experience as HTTP cookies are supported so that users \n        /// do not have to login in everytime the application is launched.\n        /// </param>\n        /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n        /// Optional callback accepting (error, user) parameters.\n        /// </param>\n        this._login.login(provider, token, useSingleSignOn, callback);\n    });\n\nMobileServiceClient.prototype.logout = function () {\n    /// <summary>\n    /// Log a user out of a Mobile Services application.\n    /// </summary>\n    this.currentUser = null;\n};\n\nMobileServiceClient.prototype.invokeApi = Platform.async(\n    function (apiName, options, callback) {   \n        /// <summary>\n        /// Invokes the specified custom api and returns a response object.\n        /// </summary>\n        /// <param name=\"apiName\">\n        /// The custom api to invoke.\n        /// </param>\n        /// <param name=\"options\" mayBeNull=\"true\">\n        /// Contains additional parameter information, valid values are:\n        /// body: The body of the HTTP request.\n        /// method: The HTTP method to use in the request, with the default being POST,\n        /// parameters: Any additional query string parameters, \n        /// headers: HTTP request headers, specified as an object.\n        /// </param>\n        /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n        /// Optional callback accepting (error, results) parameters.\n        /// </param>\n\n        Validate.isString(apiName, 'apiName');\n\n        // Account for absent optional arguments\n        if (_.isNull(callback)) {\n            if (typeof options === 'function') {\n                callback = options;\n                options = null;\n            }\n        }\n        Validate.notNull(callback, 'callback');\n\n        var parameters, method, body, headers;\n        if (!_.isNull(options)) {\n            parameters = options.parameters;\n            if (!_.isNull(parameters)) {\n                Validate.isValidParametersObject(options.parameters);\n            }\n\n            method = options.method;\n            body = options.body;\n            headers = options.headers;\n        }\n\n        headers = headers || {};\n\n        if (_.isNull(method)) {\n            method = \"POST\";\n        }\n\n        // if not specified, default to return results in JSON format\n        if (_.isNull(headers.accept)) {\n            headers.accept = 'application/json';\n        }\n\n        // Construct the URL\n        var urlFragment = _.url.combinePathSegments(\"api\", apiName);\n        if (!_.isNull(parameters)) {\n            var queryString = _.url.getQueryString(parameters);\n            urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n        }\n\n        var features = [];\n        if (!_.isNullOrEmpty(body)) {\n            features.push(_.isString(body) ?\n                _zumoFeatures.GenericApiCall :\n                _zumoFeatures.JsonApiCall);\n        }\n\n        if (!_.isNull(parameters)) {\n            features.push(_zumoFeatures.AdditionalQueryParameters);\n        }\n\n        // Make the request\n        this._request(\n            method,\n            urlFragment,\n            body,\n            null,\n            headers,\n            features,\n            function (error, response) {\n                if (!_.isNull(error)) {\n                    callback(error, null);\n                } else {\n                    var contentType;\n                    if (typeof response.getResponseHeader !== 'undefined') { // (when not using IframeTransport, IE9)\n                        contentType = response.getResponseHeader('Content-Type');\n                    }\n\n                    // If there was no header / can't get one, try json\n                    if (!contentType) {\n                        try {\n                            response.result = _.fromJson(response.responseText);\n                        } catch(e) {\n                            // Do nothing, since we don't know the content-type, failing may be ok\n                        }\n                    } else if (contentType.toLowerCase().indexOf('json') !== -1) {\n                        response.result = _.fromJson(response.responseText);\n                    }\n\n                    callback(null, response);\n                }\n            });\n\n    });\n\nfunction getApplicationInstallationId() {\n    /// <summary>\n    /// Gets or creates the static application installation ID.\n    /// </summary>\n    /// <returns type=\"string\">\n    /// The application installation ID.\n    /// </returns>\n\n    // Get or create a new installation ID that can be passed along on each\n    // request to provide telemetry data\n    var applicationInstallationId = null;\n\n    // Check if the config settings exist\n    var path = \"MobileServices.Installation.config\";\n    var contents = Platform.readSetting(path);\n    if (!_.isNull(contents)) {\n        // Parse the contents of the file as JSON and pull out the\n        // application's installation ID.\n        try {\n            var config = _.fromJson(contents);\n            applicationInstallationId = config.applicationInstallationId;\n        } catch (ex) {\n            // Ignore any failures (like invalid JSON, etc.) which will allow\n            // us to fall through to and regenerate a valid config below\n        }\n    }\n\n    // If no installation ID was found, generate a new one and save the config\n    // settings.  This is pulled out as a separate function because we'll do it\n    // even if we successfully read an existing config but there's no\n    // installation ID.\n    if (_.isNullOrEmpty(applicationInstallationId)) {\n        applicationInstallationId = _.createUniqueInstallationId();\n\n        // TODO: How many other settings should we write out as well?\n        var configText = _.toJson({ applicationInstallationId: applicationInstallationId });\n        Platform.writeSetting(path, configText);\n    }\n\n    return applicationInstallationId;\n}\n\n/// <summary>\n/// Get or set the static _applicationInstallationId by checking the settings\n/// and create the value if necessary.\n/// </summary>\nMobileServiceClient._applicationInstallationId = getApplicationInstallationId();\n\n/// <summary>\n/// Get or set the static _userAgent by calling into the Platform.\n/// </summary>\nMobileServiceClient._userAgent = Platform.getUserAgent();\n\n/// <summary>\n/// The features that are sent to the server for telemetry.\n/// </summary>\nMobileServiceClient._zumoFeatures = _zumoFeatures;\n"
  },
  {
    "path": "sdk/Javascript/src/MobileServiceLogin.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"Generated\\MobileServices.DevIntellisense.js\" />\n\nvar _ = require('Extensions');\nvar Validate = require('Validate');\nvar Platform = require('Platform');\n\nvar loginUrl = \"login\";\nvar loginDone = \"done\";\n\nfunction MobileServiceLogin(client, ignoreFilters) {\n    /// <summary>\n    /// Initializes a new instance of the MobileServiceLogin class.\n    /// </summary>\n    /// <param name=\"client\" type=\"MobileServiceClient\" mayBeNull=\"false\">\n    /// Reference to the MobileServiceClient associated with this login.\n    /// </param>\n    /// <param name=\"ignoreFilters\" type=\"Boolean\" mayBeNull=\"true\">\n    /// Optional parameter to indicate if the client filters should be ignored\n    /// and requests should be sent directly. Is true by default. This should\n    /// only be set to false for testing purposes when filters are needed to intercept\n    /// and validate requests and responses.\n    /// </param>\n\n    // Account for absent optional arguments\n    if (_.isNull(ignoreFilters)) {\n        ignoreFilters = true;\n    }\n\n    // Validate arguments\n    Validate.notNull(client);\n    Validate.isObject(client, 'client');\n\n    // Create read/write fields\n    this._loginState = { inProcess: false, cancelCallback: null };\n    this.ignoreFilters = ignoreFilters;\n\n    // Create get accessors for read-only fields\n    this.getMobileServiceClient = function () {\n        /// <summary>\n        /// Gets the MobileServiceClient associated with this table.\n        /// <summary>\n        /// <returns type=\"MobileServiceClient\">\n        /// The MobileServiceClient associated with this table.\n        /// </returns>\n        return client;\n    };\n\n    this.getLoginInProcess = function () {\n        /// <summary>\n        /// Indicates if a login is currently in process or not.\n        /// <summary>\n        /// <returns type=\"Boolean\">\n        /// True if a login is in process and false otherwise.\n        /// </returns>\n        return this._loginState.inProcess;\n    };\n}\n\n// Export the MobileServiceLogin class\nexports.MobileServiceLogin = MobileServiceLogin;\n\n// Define the MobileServiceLogin in a namespace (note: this has global effects\n// unless the platform we're using chooses to ignore it because exports are\n// good enough).\nPlatform.addToMobileServicesClientNamespace({ MobileServiceLogin: MobileServiceLogin });\n\nMobileServiceLogin.prototype.loginWithOptions = function (provider, options, callback) {\n    /// <summary>\n    /// Log a user into a Mobile Services application given a provider name with\n    /// given options.\n    /// </summary>\n    /// <param name=\"provider\" type=\"String\" mayBeNull=\"false\">\n    /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', \n    /// 'windowsazureactivedirectory' (can also use 'aad')\n    /// or 'microsoftaccount'.\n    /// </param>\n    /// <param name=\"options\" type=\"Object\" mayBeNull=\"true\">\n    /// Contains additional parameter information, valid values are:\n    ///    token: provider specific object with existing OAuth token to log in with\n    ///    useSingleSignOn: Only applies to Windows 8 clients.  Will be ignored on other platforms.\n    /// Indicates if single sign-on should be used. Single sign-on requires that the \n    /// application's Package SID be registered with the Microsoft Azure Mobile Service, \n    /// but it provides a better experience as HTTP cookies are supported so that users \n    /// do not have to login in everytime the application is launched.\n    ///    parameters: Any additional provider specific query string parameters.\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n    /// Optional callback accepting (error, user) parameters.\n    /// </param>\n\n    Validate.isString(provider, 'provider');\n    Validate.notNull(provider, 'provider');\n\n    if (_.isNull(callback)) {\n        if (!_.isNull(options) && typeof options === 'function') {\n            callback = options;\n            options = null;\n        } else {\n            Validate.notNull(null, 'callback');\n        }\n    }    \n\n    // loginWithOptions('a.b.c')\n    if (!options && this._isAuthToken(provider)) {\n        this.loginWithMobileServiceToken(provider, callback);\n    } else {\n        // loginWithOptions('facebook', {});\n        // loginWithOptions('facebook');\n        options = options || {};\n        this.loginWithProvider(provider, options.token, options.useSingleSignOn, options.parameters, callback);\n    }\n};\n\nMobileServiceLogin.prototype.login = function (provider, token, useSingleSignOn, callback) {\n    /// <summary>\n    /// Log a user into a Mobile Services application given a provider name and optional token object\n    /// Microsoft Account authentication token.\n    /// </summary>\n    /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">\n    /// Optional name of the authentication provider to use; one of 'facebook', 'twitter', 'google',\n    /// 'windowsazureactivedirectory' (can also use 'aad'), or 'microsoftaccount'.\n    /// </param>\n    /// <param name=\"token\" type=\"Object\"  mayBeNull=\"true\">\n    /// Optional provider specific object with existing OAuth token to log in with or\n    /// a JWT Mobile Services authentication token if the provider is null.\n    /// </param>\n    /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n    /// Only applies to Windows 8 clients.  Will be ignored on other platforms.\n    /// Indicates if single sign-on should be used. Single sign-on requires that the \n    /// application's Package SID be registered with the Microsoft Azure Mobile Service, \n    /// but it provides a better experience as HTTP cookies are supported so that users \n    /// do not have to login in everytime the application is launched.\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\"  mayBeNull=\"true\">\n    /// Optional callback accepting (error, user) parameters.\n    /// </param>\n\n    // Account for absent optional arguments\n    if (_.isNull(callback)) {\n        if (!_.isNull(useSingleSignOn) && (typeof useSingleSignOn === 'function')) {\n            callback = useSingleSignOn;\n            useSingleSignOn = null;\n        }\n        else if (!_.isNull(token) && (typeof token === 'function')) {\n            callback = token;\n            useSingleSignOn = null;\n            token = null;\n        }\n    }\n    if (_.isNull(useSingleSignOn)) {\n        if (_.isBool(token)) {\n            useSingleSignOn = token;\n            token = null;\n        }\n        else {\n            useSingleSignOn = false;\n        }\n    }\n\n    // Determine if the provider is actually a Mobile Services authentication token\n    if (_.isNull(token) && this._isAuthToken(provider)) {\n        token = provider;\n        provider = null;\n    }\n\n    // Validate parameters; there must be either a provider, a token or both\n    if (_.isNull(provider)) {\n        Validate.notNull(token);\n        Validate.isString(token);\n    }\n    if (_.isNull(token)) {\n        Validate.notNull(provider);\n        Validate.isString(provider);\n        provider = provider.toLowerCase();\n    }\n\n    if (!_.isNull(provider)) {\n        if (provider.toLowerCase() === 'windowsazureactivedirectory') {\n            // The mobile service REST API uses '/login/aad' for Microsoft Azure Active Directory\n            provider = 'aad';\n        }\n        this.loginWithProvider(provider, token, useSingleSignOn, {}, callback);\n    }\n    else {\n        this.loginWithMobileServiceToken(token, callback);\n    }\n};\n\nMobileServiceLogin.prototype._isAuthToken = function (value) {\n    return value && _.isString(value) && value.split('.').length === 3;\n};\n\nMobileServiceLogin.prototype.loginWithMobileServiceToken = function(authenticationToken, callback) {\n    /// <summary>\n    /// Log a user into a Mobile Services application given an Mobile Service authentication token.\n    /// </summary>\n    /// <param name=\"authenticationToken\" type=\"String\">\n    /// OAuth access token that authenticates the user.\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\">\n    /// Optional callback accepting (error, user) parameters.\n    /// </param>\n\n    var self = this;\n    var client = self.getMobileServiceClient();\n\n    Validate.isString(authenticationToken, 'authenticationToken');\n    Validate.notNullOrEmpty(authenticationToken, 'authenticationToken');\n\n    client._request(\n        'POST',\n        loginUrl,\n        { authenticationToken: authenticationToken },\n        self.ignoreFilters,\n        function(error, response) { \n            onLoginResponse(error, response, client, callback);\n        });\n};\n\nMobileServiceLogin.prototype.loginWithProvider = function(provider, token, useSingleSignOn, parameters, callback) {\n    /// <summary>\n    /// Log a user into a Mobile Services application given a provider name and optional token object.\n    /// </summary>\n    /// <param name=\"provider\" type=\"String\">\n    /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google',\n    /// 'windowsazureactivedirectory' (can also use 'aad'), or 'microsoftaccount'.\n    /// </param>\n    /// <param name=\"token\" type=\"Object\">\n    /// Optional, provider specific object with existing OAuth token to log in with.\n    /// </param>\n    /// <param name=\"useSingleSignOn\" type=\"Boolean\">\n    /// Optional, indicates if single sign-on should be used.  Single sign-on requires that the\n    /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n    /// provides a better experience as HTTP cookies are supported so that users do not have to\n    /// login in everytime the application is launched. Is false be default.\n    /// </param>\n    /// <param name=\"parameters\" type=\"Object\">\n    /// Any additional provider specific query string parameters. \n    /// </param>\n    /// <param name=\"callback\" type=\"Function\">\n    /// The callback to execute when the login completes: callback(error, user).\n    /// </param>\n\n    // Validate arguments\n    Validate.isString(provider, 'provider');\n    if (!_.isNull(token)) {\n        Validate.isObject(token, 'token');\n    }\n\n    // Throw if a login is already in process and is not cancellable\n    if (this._loginState.inProcess) {\n        var didCancel = this._loginState.cancelCallback && this._loginState.cancelCallback();\n        if (!didCancel) {\n            throw Platform.getResourceString(\"MobileServiceLogin_LoginErrorResponse\");\n        }\n    }\n\n    provider = provider.toLowerCase();\n    \n    // Either login with the token or the platform specific login control.\n    if (!_.isNull(token)) {\n        loginWithProviderAndToken(this, provider, token, parameters, callback);\n    }\n    else {\n        loginWithLoginControl(this, provider, useSingleSignOn, parameters, callback);\n    }\n};\n\nfunction onLoginComplete(error, token, client, callback) {\n    /// <summary>\n    /// Handles the completion of the login and calls the user's callback with\n    /// either a user or an error.\n    /// </summary>\n    /// <param name=\"error\" type=\"string\" mayBeNull=\"true\">\n    /// Optional error that may have occurred during login. Will be null if the\n    /// login succeeded and their is a token.\n    /// </param>\n    /// <param name=\"token\" type=\"string\" mayBeNull=\"true\">\n    /// Optional token that represents the logged-in user. Will be null if the\n    /// login failed and their is an error.\n    /// </param>\n    /// <param name=\"client\" type=\"MobileServiceClient\">\n    /// The Mobile Service client associated with the login.\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n    /// The callback to execute when the login completes: callback(error, user).\n    /// </param>\n    var user = null;\n\n    if (_.isNull(error)) {\n\n        // Validate the token\n        if (_.isNull(token) ||\n            !_.isObject(token) ||\n            !_.isObject(token.user) ||\n            !_.isString(token.authenticationToken)) {\n            error = Platform.getResourceString(\"MobileServiceLogin_InvalidResponseFormat\");\n        }\n        else {\n            // Set the current user on the client and return it in the callback\n            client.currentUser = token.user;\n            client.currentUser.mobileServiceAuthenticationToken = token.authenticationToken;\n            user = client.currentUser;\n        }\n    }\n\n    if (!_.isNull(callback)) {\n        callback(error, user);\n    }\n}\n\nfunction onLoginResponse(error, response, client, callback) {\n    /// <summary>\n    /// Handles the completion of the login HTTP call and calls the user's callback with\n    /// either a user or an error.\n    /// </summary>\n    /// <param name=\"error\" type=\"string\" mayBeNull=\"true\">\n    /// Optional error that may have occurred during login. Will be null if the\n    /// login succeeded and their is a token.\n    /// </param>\n    /// <param name=\"response\" type=\"string\" mayBeNull=\"true\">\n    /// Optional HTTP login response from the Mobile Service. Will be null if the\n    /// login failed and their is an error.\n    /// </param>\n    /// <param name=\"client\" type=\"MobileServiceClient\">\n    /// The Mobile Service client associated with the login.\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n    /// The callback to execute when the login completes: callback(error, user).\n    /// </param>\n\n    var mobileServiceToken = null;\n    if (_.isNull(error)) {\n        try {\n            mobileServiceToken = _.fromJson(response.responseText);\n        }\n        catch (e) {\n            error = e;\n        }\n    }\n\n    onLoginComplete(error, mobileServiceToken, client, callback);\n}\n\nfunction loginWithProviderAndToken(login, provider, token, parameters, callback) {\n    /// <summary>\n    /// Log a user into a Mobile Services application given a provider name and token object.\n    /// </summary>\n    /// <param name=\"login\" type=\"MobileServiceLogin\">\n    /// The login instance that holds the context used with the login process.\n    /// </param>\n    /// <param name=\"provider\" type=\"String\">\n    /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', or \n    /// 'microsoftaccount'. The provider should already have been validated.\n    /// </param>\n    /// <param name=\"token\" type=\"Object\">\n    /// Provider specific object with existing OAuth token to log in with.\n    /// </param>\n    /// <param name=\"parameters\" type=\"Object\">\n    /// Any additional provider specific query string parameters.\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n    /// The callback to execute when the login completes: callback(error, user).\n    /// </param>\n\n    var client = login.getMobileServiceClient();\n\n    // This design has always been problematic, because the operation can take arbitrarily\n    // long and there is no way for the UI to cancel it. We should probably remove this\n    // one-at-a-time restriction.\n    login._loginState = { inProcess: true, cancelCallback: null };\n\n    var url = loginUrl + '/' + provider;\n    if (!_.isNull(parameters)) {\n        var queryString = _.url.getQueryString(parameters);\n        url = _.url.combinePathAndQuery(url, queryString);\n    }\n\n    // Invoke the POST endpoint to exchange provider-specific token for a \n    // Microsoft Azure Mobile Services token\n    client._request(\n        'POST',\n        url,\n        token,\n        login.ignoreFilters,\n        function (error, response) {\n            login._loginState = { inProcess: false, cancelCallback: null };\n            onLoginResponse(error, response, client, callback);\n        });\n}\n\nfunction loginWithLoginControl(login, provider, useSingleSignOn, parameters, callback) {\n    /// <summary>\n    /// Log a user into a Mobile Services application using a platform specific\n    /// login control that will present the user with the given provider's login web page.\n    /// </summary>\n    /// <param name=\"login\" type=\"MobileServiceLogin\">\n    /// The login instance that holds the context used with the login process.\n    /// </param>\n    /// <param name=\"provider\" type=\"String\">\n    /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', or 'microsoftaccount'.\n    /// </param>\n    /// <param name=\"useSingleSignOn\" type=\"Boolean\">\n    /// Optional, indicates if single sign-on should be used.  Single sign-on requires that the\n    /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n    /// provides a better experience as HTTP cookies are supported so that users do not have to\n    /// login in everytime the application is launched. Is false be default.\n    /// </param>\n    /// <param name=\"parameters\" type=\"Object\">\n    /// Any additional provider specific query string parameters.\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\"  mayBeNull=\"true\">\n    /// The callback to execute when the login completes: callback(error, user).\n    /// </param>\n\n    var client = login.getMobileServiceClient();\n    var startUri = _.url.combinePathSegments(\n        client.applicationUrl,\n        loginUrl,\n        provider);\n    var endUri = null;\n\n    if (!_.isNull(parameters)) {\n        var queryString = _.url.getQueryString(parameters);\n        startUri = _.url.combinePathAndQuery(startUri, queryString);\n    }\n\n    // If not single sign-on, then we need to construct a non-null end uri.\n    if (!useSingleSignOn) {\n        endUri = _.url.combinePathSegments(\n            client.applicationUrl,\n            loginUrl,\n            loginDone);\n    }\n    \n    login._loginState = { inProcess: true, cancelCallback: null }; // cancelCallback gets set below\n\n    // Call the platform to launch the login control, capturing any\n    // 'cancel' callback that it returns\n    var platformResult = Platform.login(\n        startUri,\n        endUri,\n        function (error, mobileServiceToken) {\n            login._loginState = { inProcess: false, cancelCallback: null };\n            onLoginComplete(error, mobileServiceToken, client, callback);\n        });\n    \n    if (login._loginState.inProcess && platformResult && platformResult.cancelCallback) {\n        login._loginState.cancelCallback = platformResult.cancelCallback;\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/src/MobileServiceTable.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"Generated\\MobileServices.DevIntellisense.js\" />\n\nvar _ = require('Extensions');\nvar Validate = require('Validate');\nvar Platform = require('Platform');\nvar Query = require('Query').Query;\n\n// Name of the reserved Mobile Services ID member.\nvar idPropertyName = \"id\";\n\n// The route separator used to denote the table in a uri like\n// .../{app}/collections/{coll}.\nvar tableRouteSeperatorName = \"tables\";\nvar idNames = [\"ID\", \"Id\", \"id\", \"iD\"];\nvar nextLinkRegex = /^(.*?);\\s*rel\\s*=\\s*(\\w+)\\s*$/;\n\nvar MobileServiceSystemProperties = {\n    None: 0,\n    CreatedAt: 1,\n    UpdatedAt: 2,\n    Version: 4,\n    All: 0xFFFF\n};\n\nvar MobileServiceSystemColumns = {\n    CreatedAt: \"__createdAt\",\n    UpdatedAt: \"__updatedAt\",\n    Version: \"__version\"\n};\n\nPlatform.addToMobileServicesClientNamespace({\n    MobileServiceTable:\n        {\n            SystemProperties: MobileServiceSystemProperties\n        }\n});\n\nfunction MobileServiceTable(tableName, client) {\n    /// <summary>\n    /// Initializes a new instance of the MobileServiceTable class.\n    /// </summary>\n    /// <param name=\"tableName\" type=\"String\">\n    /// Name of the table.\n    /// </param>\n    /// <param name=\"client\" type=\"MobileServiceClient\" mayBeNull=\"false\">\n    /// The MobileServiceClient used to make requests.\n    /// </param>\n\n    this.getTableName = function () {\n        /// <summary>\n        /// Gets the name of the table.\n        /// </summary>\n        /// <returns type=\"String\">The name of the table.</returns>\n        return tableName;\n    };\n\n    this.getMobileServiceClient = function () {\n        /// <summary>\n        /// Gets the MobileServiceClient associated with this table.\n        /// </summary>\n        /// <returns type=\"MobileServiceClient\">\n        /// The MobileServiceClient associated with this table.\n        /// </returns>\n        return client;\n    };\n\n    this.systemProperties = 0;\n}\n\n// Export the MobileServiceTable class\nexports.MobileServiceTable = MobileServiceTable;\n\n// We have an internal _read method using callbacks since it's used by both\n// table.read(query) and query.read().\nMobileServiceTable.prototype._read = function (query, parameters, callback) {\n    /// <summary>\n    /// Query a table.\n    /// </summary>\n    /// <param name=\"query\" type=\"Object\" mayBeNull=\"true\">\n    /// The query to execute.  It can be null or undefined to get the entire\n    /// collection.\n    /// </param>\n    /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n    /// An object of user-defined parameters and values to include in the request URI query string.\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\">\n    /// The callback to invoke when the query is complete.\n    /// </param>\n\n    // Account for absent optional arguments\n    if (_.isNull(callback))\n    {\n        if (_.isNull(parameters) && (typeof query === 'function')) {\n            callback = query;\n            query = null;\n            parameters = null;\n        } else if (typeof parameters === 'function') {\n            callback = parameters;\n            parameters = null;\n            if (!_.isNull(query) && _.isObject(query)) {\n                // This 'query' argument could be either the query or the user-defined \n                // parameters object since both are optional.  A query is either (a) a simple string \n                // or (b) an Object with an toOData member. A user-defined parameters object is just \n                // an Object.  We need to detect which of these has been passed in here.\n                if (!_.isString(query) && _.isNull(query.toOData)) {\n                    parameters = query;\n                    query = null;\n                }\n            }\n        }\n    }\n\n    // Validate the arguments\n    if (query && _.isString(query)) {\n        Validate.notNullOrEmpty(query, 'query');\n    }\n    if (!_.isNull(parameters)) {\n        Validate.isValidParametersObject(parameters, 'parameters');\n    }\n    Validate.notNull(callback, 'callback');\n\n    // Get the query string\n    var tableName = this.getTableName();\n    var queryString = null;\n    var projection = null;\n    var features = [];\n    if (_.isString(query)) {\n        queryString = query;\n        if (!_.isNullOrEmpty(query)) {\n            features.push(WindowsAzure.MobileServiceClient._zumoFeatures.TableReadRaw);\n        }\n    } else if (_.isObject(query) && !_.isNull(query.toOData)) {\n        if (query.getComponents) {\n            features.push(WindowsAzure.MobileServiceClient._zumoFeatures.TableReadQuery);\n            var components = query.getComponents();\n            projection = components.projection;\n            if (components.table) {\n                // If the query has a table name, make sure it's compatible with\n                // the table executing the query\n                \n                if (tableName !== components.table) {\n                    var message = _.format(Platform.getResourceString(\"MobileServiceTable_ReadMismatchedQueryTables\"), tableName, components.table);\n                    callback(_.createError(message), null);\n                    return;\n                }\n\n                // The oDataQuery will include the table name; we need to remove\n                // because the url fragment already includes the table name.\n                var oDataQuery = query.toOData();\n                queryString = oDataQuery.replace(new RegExp('^/' + components.table), '');\n            }\n        }\n    }\n\n    addQueryParametersFeaturesIfApplicable(features, parameters);\n\n    // Add any user-defined query string parameters\n    parameters = addSystemProperties(parameters, this.systemProperties, queryString);\n    if (!_.isNull(parameters)) {\n        var userDefinedQueryString = _.url.getQueryString(parameters);\n        if (!_.isNullOrEmpty(queryString)) {\n            queryString += '&' + userDefinedQueryString;\n        }\n        else {\n            queryString = userDefinedQueryString;\n        }\n    }\n    \n    // Construct the URL\n    var urlFragment = queryString;\n    if (!_.url.isAbsoluteUrl(urlFragment)) {\n        urlFragment = _.url.combinePathSegments(tableRouteSeperatorName, tableName);\n        if (!_.isNull(queryString)) {\n            urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n        }\n    }\n\n    // Make the request\n    this.getMobileServiceClient()._request(\n        'GET',\n        urlFragment,\n        null,\n        false,\n        null,\n        features,\n        function (error, response) {\n            var values = null;\n            if (_.isNull(error)) {\n                // Parse the response\n                values = _.fromJson(response.responseText);\n\n                // If the values include the total count, we'll attach that\n                // directly to the array\n                if (values &&\n                    !Array.isArray(values) &&\n                    typeof values.count !== 'undefined' &&\n                    typeof values.results !== 'undefined') {\n                    // Create a new total count property on the values array\n                    values.results.totalCount = values.count;\n                    values = values.results;\n                }\n\n                // If we have a projection function, apply it to each item\n                // in the collection\n                if (projection !== null) {\n                    var i = 0;\n                    for (i = 0; i < values.length; i++) {\n                        values[i] = projection.call(values[i]);\n                    }\n                }\n\n                // Grab link header when possible\n                if (Array.isArray(values) && response.getResponseHeader && _.isNull(values.nextLink)) {\n                    try {\n                        var link = response.getResponseHeader('Link');\n                        if (!_.isNullOrEmpty(link)) {\n                            var result = nextLinkRegex.exec(link);\n\n                            // Only add nextLink when relation is next\n                            if (result && result.length === 3 && result[2] == 'next') {\n                                values.nextLink = result[1];\n                            }\n                        }\n                    } catch (ex) {\n                        // If cors doesn't allow us to access the Link header\n                        // Just continue on without it\n                    }\n                }\n            }\n            callback(error, values);\n        });\n};\n\nMobileServiceTable.prototype.read = Platform.async(MobileServiceTable.prototype._read);\n\nMobileServiceTable.prototype.insert = Platform.async(\n    function (instance, parameters, callback) {\n        /// <summary>\n        /// Insert a new object into a table.\n        /// </summary>\n        /// <param name=\"instance\" type=\"Object\">\n        /// The instance to insert into the table.\n        /// </param>\n        /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n        /// An object of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"callback\" type=\"Function\">\n        /// The callback to invoke when the insert is complete.\n        /// </param>\n\n        // Account for absent optional arguments\n        if (_.isNull(callback) && (typeof parameters === 'function')) {\n            callback = parameters;\n            parameters = null;\n        }\n\n        // Validate the arguments\n        Validate.notNull(instance, 'instance');\n        if (!_.isNull(parameters)) {\n            Validate.isValidParametersObject(parameters);\n        }\n        Validate.notNull(callback, 'callback');\n\n        // Integer Ids can not have any Id set\n        for (var i in idNames) {\n            var id = instance[idNames[i]];\n\n            if (!_.isNullOrZero(id)) {\n                if (_.isString(id)) {\n                    // String Id's are allowed iif using 'id'\n                    if (idNames[i] !== idPropertyName) {\n                        throw _.format(\n                            Platform.getResourceString(\"MobileServiceTable_InsertIdAlreadySet\"),\n                            idPropertyName);\n                    } else {\n                        Validate.isValidId(id, idPropertyName);\n                    }\n                } else {\n                    throw _.format(\n                        Platform.getResourceString(\"MobileServiceTable_InsertIdAlreadySet\"),\n                        idPropertyName);\n                }\n            }\n        }\n\n        var features = addQueryParametersFeaturesIfApplicable([], parameters);\n\n        // Construct the URL\n        var urlFragment = _.url.combinePathSegments(tableRouteSeperatorName, this.getTableName());\n        parameters = addSystemProperties(parameters, this.systemProperties);\n        if (!_.isNull(parameters)) {\n            var queryString = _.url.getQueryString(parameters);\n            urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n        }\n\n        // Make the request\n        this.getMobileServiceClient()._request(\n            'POST',\n            urlFragment,\n            instance,\n            false,\n            null,\n            features,\n            function (error, response) {\n                if (!_.isNull(error)) {\n                    callback(error, null);\n                } else {\n                    var result = getItemFromResponse(response);\n                    result = Platform.allowPlatformToMutateOriginal(instance, result);\n                    callback(null, result);\n                }\n            });\n    });\n\nMobileServiceTable.prototype.update = Platform.async(\n    function (instance, parameters, callback) {\n        /// <summary>\n        /// Update an object in a given table.\n        /// </summary>\n        /// <param name=\"instance\" type=\"Object\">\n        /// The instance to update in the table.\n        /// </param>\n        /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n        /// An object of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"callback\" type=\"Function\">\n        /// The callback to invoke when the update is complete.\n        /// </param>\n        var version,\n            headers = {},\n            features = [],\n            serverInstance;\n\n        // Account for absent optional arguments\n        if (_.isNull(callback) && (typeof parameters === 'function')) {\n            callback = parameters;\n            parameters = null;\n        }\n\n        // Validate the arguments\n        Validate.notNull(instance, 'instance');\n        Validate.isValidId(instance[idPropertyName], 'instance.' + idPropertyName);\n        if (!_.isNull(parameters)) {\n            Validate.isValidParametersObject(parameters, 'parameters');\n        }\n        Validate.notNull(callback, 'callback');\n\n        if (_.isString(instance[idPropertyName])) {\n            version = instance.__version;\n            serverInstance = removeSystemProperties(instance);\n        } else {\n            serverInstance = instance;\n        }\n\n        if (!_.isNullOrEmpty(version)) {\n            headers['If-Match'] = getEtagFromVersion(version);\n            features.push(WindowsAzure.MobileServiceClient._zumoFeatures.OptimisticConcurrency);\n        }\n\n        features = addQueryParametersFeaturesIfApplicable(features, parameters);\n        parameters = addSystemProperties(parameters, this.systemProperties);\n\n        // Construct the URL\n        var urlFragment =  _.url.combinePathSegments(\n                tableRouteSeperatorName,\n                this.getTableName(),\n                encodeURIComponent(instance[idPropertyName].toString()));\n        if (!_.isNull(parameters)) {\n            var queryString = _.url.getQueryString(parameters);\n            urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n        }\n\n        // Make the request\n        this.getMobileServiceClient()._request(\n            'PATCH',\n            urlFragment,\n            serverInstance,\n            false,\n            headers,\n            features,\n            function (error, response) {\n                if (!_.isNull(error)) {\n                    setServerItemIfPreconditionFailed(error);\n                    callback(error);\n                } else {\n                    var result = getItemFromResponse(response);\n                    result = Platform.allowPlatformToMutateOriginal(instance, result);\n                    callback(null, result);\n                }\n            });\n    });\n\nMobileServiceTable.prototype.refresh = Platform.async(\n    function (instance, parameters, callback) {\n        /// <summary>\n        ///  Refresh the current instance with the latest values from the\n        ///  table.\n        /// </summary>\n        /// <param name=\"instance\" type=\"Object\">\n        /// The instance to refresh.\n        /// </param>\n        /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n        /// An object of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"callback\" type=\"Function\">\n        /// The callback to invoke when the refresh is complete.\n        /// </param>\n\n        // Account for absent optional arguments\n        if (_.isNull(callback) && (typeof parameters === 'function')) {\n            callback = parameters;\n            parameters = null;\n        }\n\n        // Validate the arguments\n        Validate.notNull(instance, 'instance');\n        if (!_.isValidId(instance[idPropertyName], idPropertyName))\n        {\n            if (typeof instance[idPropertyName] === 'string' && instance[idPropertyName] !== '') {\n                throw _.format(Platform.getResourceString(\"Validate_InvalidId\"), idPropertyName);\n            } else {\n                callback(null, instance);\n            }\n            return;\n        }\n\n        if (!_.isNull(parameters)) {\n            Validate.isValidParametersObject(parameters, 'parameters');\n        }\n        Validate.notNull(callback, 'callback');\n\n        // Construct the URL\n        var urlFragment = _.url.combinePathSegments(\n                tableRouteSeperatorName,\n                this.getTableName());\n\n        if (typeof instance[idPropertyName] === 'string') {\n            var id = encodeURIComponent(instance[idPropertyName]).replace(/\\'/g, '%27%27');\n            urlFragment = _.url.combinePathAndQuery(urlFragment, \"?$filter=id eq '\" + id + \"'\");\n        } else {\n            urlFragment = _.url.combinePathAndQuery(urlFragment, \"?$filter=id eq \" + encodeURIComponent(instance[idPropertyName].toString()));\n        }\n\n        if (!_.isNull(parameters)) {\n            var queryString = _.url.getQueryString(parameters);\n            urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n        }\n\n        var features = [WindowsAzure.MobileServiceClient._zumoFeatures.TableRefreshCall];\n        features = addQueryParametersFeaturesIfApplicable(features, parameters);\n\n        // Make the request\n        this.getMobileServiceClient()._request(\n            'GET',\n            urlFragment,\n            instance,\n            false,\n            null,\n            features,\n            function (error, response) {\n                if (!_.isNull(error)) {\n                    callback(error, null);\n                } else {\n                    var result = _.fromJson(response.responseText);\n                    if (Array.isArray(result)) {\n                        result = result[0]; //get first object from array\n                    }\n\n                    if (!result) {\n                        var message =_.format(\n                            Platform.getResourceString(\"MobileServiceTable_NotSingleObject\"),\n                            idPropertyName);\n                        callback(_.createError(message), null);\n                    }\n\n                    result = Platform.allowPlatformToMutateOriginal(instance, result);\n                    callback(null, result);\n                }\n            });\n    });\n\nMobileServiceTable.prototype.lookup = Platform.async(\n    function (id, parameters, callback) {\n        /// <summary>\n        /// Gets an instance from a given table.\n        /// </summary>\n        /// <param name=\"id\" type=\"Number\" integer=\"true\">\n        /// The id of the instance to get from the table.\n        /// </param>\n        /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n        /// An object of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"callback\" type=\"Function\">\n        /// The callback to invoke when the lookup is complete.\n        /// </param>\n\n        // Account for absent optional arguments\n        if (_.isNull(callback) && (typeof parameters === 'function')) {\n            callback = parameters;\n            parameters = null;\n        }\n\n        // Validate the arguments\n        Validate.isValidId(id, idPropertyName);\n        if (!_.isNull(parameters)) {\n            Validate.isValidParametersObject(parameters);\n        }\n        Validate.notNull(callback, 'callback');\n\n        // Construct the URL\n        var urlFragment = _.url.combinePathSegments(\n                tableRouteSeperatorName,\n                this.getTableName(),\n                encodeURIComponent(id.toString()));\n\n        var features = addQueryParametersFeaturesIfApplicable([], parameters);\n\n        parameters = addSystemProperties(parameters, this.systemProperties);\n        if (!_.isNull(parameters)) {\n            var queryString = _.url.getQueryString(parameters);\n            urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n        }\n\n        // Make the request\n        this.getMobileServiceClient()._request(\n            'GET',\n            urlFragment,\n            null,\n            false,\n            null,\n            features,\n            function (error, response) {\n                if (!_.isNull(error)) {\n                    callback(error, null);\n                } else {\n                    var result = getItemFromResponse(response);\n                    callback(null, result);\n                }\n            });\n    });\n\nMobileServiceTable.prototype.del = Platform.async(\n    function (instance, parameters, callback) {\n        /// <summary>\n        /// Delete an object from a given table.\n        /// </summary>\n        /// <param name=\"instance\" type=\"Object\">\n        /// The instance to delete from the table.\n        /// </param>\n        /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n        /// An object of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"callback\" type=\"Function\">\n        /// The callback to invoke when the delete is complete.\n        /// </param>\n\n        // Account for absent optional arguments\n        if (_.isNull(callback) && (typeof parameters === 'function')) {\n            callback = parameters;\n            parameters = null;\n        }        \n\n        // Validate the arguments\n        Validate.notNull(instance, 'instance');\n        Validate.isValidId(instance[idPropertyName], 'instance.' + idPropertyName);\n        Validate.notNull(callback, 'callback');\n\n        var headers = {};\n        var features = [];\n        if (_.isString(instance[idPropertyName])) {\n            if (!_.isNullOrEmpty(instance.__version)) {\n                headers['If-Match'] = getEtagFromVersion(instance.__version);\n                features.push(WindowsAzure.MobileServiceClient._zumoFeatures.OptimisticConcurrency);\n            }\n        }\n\n        features = addQueryParametersFeaturesIfApplicable(features, parameters);\n\n        parameters = addSystemProperties(parameters, this.systemProperties);\n        if (!_.isNull(parameters)) {\n            Validate.isValidParametersObject(parameters);\n        }\n\n        // Contruct the URL\n        var urlFragment =  _.url.combinePathSegments(\n                tableRouteSeperatorName,\n                this.getTableName(),\n                encodeURIComponent(instance[idPropertyName].toString()));\n        if (!_.isNull(parameters)) {\n            var queryString = _.url.getQueryString(parameters);\n            urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n        }\n\n        // Make the request\n        this.getMobileServiceClient()._request(\n            'DELETE',\n            urlFragment,\n            null,\n            false,\n            headers,\n            features,\n            function (error, response) {\n                if (!_.isNull(error)) {\n                    setServerItemIfPreconditionFailed(error);\n                }\n                callback(error);\n            });\n    });\n\n// Copy select Query operators to MobileServiceTable so queries can be created\n// compactly.  We'll just add them to the MobileServiceTable prototype and then\n// forward on directly to a new Query instance.\nvar queryOperators =\n    ['where', 'select', 'orderBy', 'orderByDescending', 'skip', 'take', 'includeTotalCount'];\nvar copyOperator = function (operator) {\n    MobileServiceTable.prototype[operator] = function () {\n        /// <summary>\n        /// Creates a new query.\n        /// </summary>\n\n        // Create a query associated with this table\n        var table = this;\n        var query = new Query(table.getTableName());\n\n        // Add a .read() method on the query which will execute the query.\n        // This method is defined here per query instance because it's\n        // implicitly tied to the table.\n        query.read = Platform.async(\n            function (parameters, callback) {\n                /// <summary>\n                /// Execute the query.\n                /// </summary>                \n                table._read(query, parameters, callback);\n            });\n\n        // Invoke the query operator on the newly created query\n        return query[operator].apply(query, arguments);\n    };\n};\nvar i = 0;\nfor (; i < queryOperators.length; i++) {\n    // Avoid unintended closure capture\n    copyOperator(queryOperators[i]);\n}\n\n// Table system properties\nfunction removeSystemProperties(instance) {\n    var copy = {};\n    for(var property in instance) {\n        if (property.substr(0, 2) !== '__') {\n            copy[property] = instance[property];\n        }\n    }\n    return copy;\n}\n\nfunction addSystemProperties(parameters, properties, querystring) {\n    if (properties === MobileServiceSystemProperties.None || (typeof querystring === 'string' && querystring.toLowerCase().indexOf('__systemproperties') >= 0)) {\n        return parameters;\n    }\n\n    // Initialize an object if none passed in\n    parameters = parameters || {};\n\n    // Don't override system properties if already set\n    if(!_.isNull(parameters.__systemProperties)) {\n        return parameters;\n    }\n\n    if (properties === MobileServiceSystemProperties.All) {\n        parameters.__systemProperties = '*';\n    } else {\n        var options = [];\n        if (MobileServiceSystemProperties.CreatedAt & properties) {\n            options.push(MobileServiceSystemColumns.CreatedAt);\n        }\n        if (MobileServiceSystemProperties.UpdatedAt & properties) {\n            options.push(MobileServiceSystemColumns.UpdatedAt);\n        }\n        if (MobileServiceSystemProperties.Version & properties) {\n            options.push(MobileServiceSystemColumns.Version);\n        }\n        parameters.__systemProperties = options.join(',');\n    }\n\n    return parameters;\n}\n\n// Add double quotes and unescape any internal quotes\nfunction getItemFromResponse(response) {\n    var result = _.fromJson(response.responseText);\n    if (response.getResponseHeader) {\n        var eTag = response.getResponseHeader('ETag');\n        if (!_.isNullOrEmpty(eTag)) {\n            result.__version = getVersionFromEtag(eTag);\n        }\n    }\n    return result;\n}\n\n// Converts an error to precondition failed error\nfunction setServerItemIfPreconditionFailed(error) {\n    if (error.request && error.request.status === 412) {\n        error.serverInstance = _.fromJson(error.request.responseText);\n    }\n}\n\n// Add wrapping double quotes and escape all double quotes\nfunction getEtagFromVersion(version) {\n    var result = version.replace(/\\\"/g, '\\\\\\\"');\n    return \"\\\"\" + result + \"\\\"\";\n}\n\n// Remove surrounding double quotes and unescape internal quotes\nfunction getVersionFromEtag(etag) {\n    var len = etag.length,\n        result = etag;\n\n    if (len > 1 && etag[0] === '\"' && etag[len - 1] === '\"') {\n        result = etag.substr(1, len - 2);\n    }\n    return result.replace(/\\\\\\\"/g, '\"');\n}\n\n// Updates and returns the headers parameters with features used in the call\nfunction addQueryParametersFeaturesIfApplicable(features, userQueryParameters) {\n    var hasQueryParameters = false;\n    if (userQueryParameters) {\n        if (Array.isArray(userQueryParameters)) {\n            hasQueryParameters = userQueryParameters.length > 0;\n        } else if (_.isObject(userQueryParameters)) {\n            for (var k in userQueryParameters) {\n                hasQueryParameters = true;\n                break;\n            }\n        }\n    }\n\n    if (hasQueryParameters) {\n        features.push(WindowsAzure.MobileServiceClient._zumoFeatures.AdditionalQueryParameters);\n    }\n\n    return features;\n}\n"
  },
  {
    "path": "sdk/Javascript/src/MobileServices.intellisense.js",
    "content": "﻿// ----------------------------------------------------------------------------\n//! Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n// Declare JSHint globals\n/*global WindowsAzure:false, intellisense:false */\n\nintellisense.annotate(WindowsAzure.MobileServiceClient.prototype, {\n    withFilter: function () {\n        /// <signature>\n        /// <summary>\n        /// Create a new MobileServiceClient with a filter inserted into the http \n        /// pipeline to process all of its HTTP requests and responses.\n        /// </summary>\n        /// <param name=\"serviceFilter\" type=\"Function\">\n        /// The filter to use on the service.  The signature of a serviceFilter is\n        /// function(request, next, callback) where next := function(request, callback)\n        /// and callback := function(error, response).\n        /// </param>\n        /// <returns type=\"WindowsAzure.MobileServiceClient\">\n        /// A new MobileServiceClient whose HTTP requests and responses will be\n        /// filtered as desired.\n        /// </returns>\n        /// </signature>\n    },\n    login: function () {\n        /// <signature>\n        /// <summary>\n        /// Logs a user into a mobile service by using the specified identity provider.\n        /// </summary>\n        /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">\n        /// The name of the identity provider, which instructs Mobile Services which provider to use for authentication. \n        /// The following values are supported: 'facebook', 'twitter', 'google', 'windowsazureactivedirectory' (can also use 'aad')\n        /// or 'microsoftaccount'. If no provider is specified, the 'token' parameter\n        /// is considered a Microsoft Account authentication token. If a provider is specified, \n        /// the 'token' parameter is considered a provider-specific authentication token.\n        /// </param>\n        /// <param name=\"token\" type=\"Object\" mayBeNull=\"true\">\n        /// Optional JSON representation of an authentication token, which can be supplied when the client has already\n        /// obtained a token from the identity provider.\n        /// </param>\n        /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n        /// Only applies to Windows 8 clients.  Will be ignored on other platforms.\n        /// Indicates if single sign-on should be used. Single sign-on requires that the \n        /// application's Package SID be registered with the Microsoft Azure Mobile Service, \n        /// but it provides a better experience as HTTP cookies are supported so that users \n        /// do not have to login in everytime the application is launched.\n        /// </param>\n        /// <returns type=\"WinJS.Promise\">\n        /// A winJS.Promise object\n        /// </returns>\n        ///</signature>\n    },\n\n    logout: function () {\n        /// <signature>\n        /// <summary>\n        /// Logs a user out of a Mobile Services application.\n        /// </summary>\n        /// </signature>\n    }\n});\n\nintellisense.annotate(WindowsAzure, {\n    MobileServiceClient: function () {\n        ///<signature>\n        /// <summary>\n        /// Creates a new instance of the MobileServiceClient.\n        /// </summary>\n        /// <param name=\"applicationUrl\" type=\"string\" mayBeNull=\"false\">\n        /// The URL of the mobile service..\n        /// </param>\n        /// <param name=\"applicationKey\" type=\"string\" mayBeNull=\"false\">\n        /// The application key of the mobile service..\n        /// </param>\n        ///</signature>\t\t\n    },\n    MobileServiceTable: function () {\n        /// <signature>\n        /// <summary>\n        /// Represents a table in a mobile service to support insert, update, delete, and query operations.\n        /// </summary>\n        /// </signature>\n    }\n});\n\nWindowsAzure.MobileServiceClient = (function () {\n    var _client = WindowsAzure.MobileServiceClient;\n    var wrapper = function () {\n        var instance = new _client();\n        intellisense.annotate(instance, {\n            /// <field name=\"applicationKey\" type=\"string\">The application key</field>\n            applicationKey: String,\n            /// <field name=\"currentUser\" type=\"UserObject\">The current user</field>\n            currentUser: undefined,\n            /// <field name=\"applicationUrl\" type=\"string\">The application Url</field>\n            applicationUrl: String,\n            getTable: function () {\n                /// <signature>\n                /// <summary>\n                /// Gets a reference to a table and its data operations.\n                /// </summary>\n                /// <param name=\"tableName\" type=\"string\">The name of the table.</param>\n                /// <returns type=\"WindowsAzure.MobileServiceTable\">A reference to the table.</returns>\n                /// </signature>\n            },\n            invokeApi: function () {\n                /// <signature>\n                /// <summary>\n                /// Invokes the specified custom api and returns a response object.\n                /// </summary>\n                /// <param name=\"apiName\">\n                /// The custom api to invoke.\n                /// </param>\n                /// <param name=\"options\" mayBeNull=\"true\">\n                /// Contains additional parameter information, valid values are:\n                /// body: The body of the HTTP request.\n                /// method: The HTTP method to use in the request, with the default being POST,\n                /// parameters: Any additional query string parameters, \n                /// headers: HTTP request headers, specified as an object.\n                /// </param>\n                /// </signature>\n            }\n        });\n\n        instance.getTable = (function () {\n            var _table = instance.getTable;\n            var wrapper2 = function () {\n                var instance2 = new _table();\n                intellisense.annotate(instance2, {\n                    del: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Deletes an object from a given table.\n                        /// </summary>\n                        /// <param name=\"instance\" type=\"Object\">The instance to delete from the table.</param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    getMobileServiceClient: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// The client associated with this table.\n                        /// </summary>\n                        /// <returns type=\"WindowsAzure.MobileServiceClient\">A MobileServiceClient</returns>\n                        /// </signature>\n                    },\n                    getTableName: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// The name of the table.\n                        /// </summary>\n                        /// <returns type=\"string\"></returns>\n                        /// </signature>\n                    },\n                    includeTotalCount: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Indicate that the query should include the total count for all the records returned\n                        /// ignoring any take paging limit clause specified.\n                        /// </summary>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    insert: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Inserts data from the supplied JSON object into the table.\n                        /// </summary>\n                        /// <param name=\"instance\" type=\"Object\" mayBeNull=\"false\">\n                        /// The instance to insert into the table.  It will be updated upon completion.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    orderBy: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Sorts a query against the table by the selected columns, in ascending order.\n                        /// </summary>\n                        /// <param name=\"col\" type=\"string\" mayBeNull=\"false\" parameterArray=\"true\">\n                        /// An array of the names of the columns to use for ordering\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    orderByDescending: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Sorts a query against the table by the selected columns, in descending order.\n                        /// </summary>\n                        /// <param name=\"col\" type=\"string\" mayBeNull=\"false\" parameterArray=\"true\">\n                        /// An array of the names of the columns to use for ordering\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    read: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Executes a query against the table.\n                        /// </summary>\n                        /// <param name=\"query\" type=\"Query\" mayBeNull=\"true\">\n                        /// The query to execute. When null or undefined, all rows are returned.\n                        /// </param>\n                        /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                        /// An object of user-defined parameters and values to include in the request URI query string.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    lookup: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Gets an instance from a given table.\n                        /// </summary>\n                        /// <param name=\"id\" type=\"Number\" integer=\"true\">\n                        /// The id of the instance to get from the table.\n                        /// </param>\n                        /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                        /// An object of user-defined parameters and values to include in the request URI query string.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    refresh: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Refresh the current instance with the latest values from the table.\n                        /// </summary>\n                        /// <param name=\"instance\" type=\"Object\">\n                        /// The instance to refresh.\n                        /// </param>\n                        /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                        /// An object of user-defined parameters and values to include in the request URI query string.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    select: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Applies the specific column projection to the query against the table.\n                        /// </summary>\n                        /// <param name=\"projection\" type=\"function\" mayBeNull=\"false\">\n                        /// Function that defines the projection.\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    skip: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Skips the specified number of rows in the query.\n                        /// </summary>\n                        /// <param name=\"count\" type=\"Number\" mayBeNull=\"false\">\n                        /// The number of rows to skip when returning the result.\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    take: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Returns the specified number of rows in the query.\n                        /// </summary>\n                        /// <param name=\"count\" type=\"Number\" mayBeNull=\"false\">\n                        /// The number of rows in the query to return.\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    update: function () {\n                        /// <signature>\n                        /// <summary>\t\t\t\t\t\t\n                        /// Updates an object in a given table.\n                        /// </summary>\n                        /// <param name=\"instance\" type=\"Object\" mayBeNull=\"false\"> \n                        /// The instance to update in the table, as a JSON object.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    where: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Applies a row filtering predicate to the query against the table.\n                        /// </summary>\n                        /// <param name=\"object\" type=\"Object\" mayBeNull=\"true\">\n                        /// JSON object that defines the row filter.\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    }\n                });\n                return instance2;\n            };\n            intellisense.redirectDefinition(wrapper2, _table);\n            return wrapper2;\n        })();\n\n        return instance;\n    };\n\n    intellisense.redirectDefinition(wrapper, _client);\n    return wrapper;\n})();"
  },
  {
    "path": "sdk/Javascript/src/MobileServices.intellisense.txt",
    "content": "﻿// Declare JSHint globals\n/*global WindowsAzure:false, intellisense:false */\n\nintellisense.annotate(WindowsAzure.MobileServiceClient.prototype, {\n    withFilter: function () {\n        /// <signature>\n        /// <summary>\n        /// Create a new MobileServiceClient with a filter inserted into the http \n        /// pipeline to process all of its HTTP requests and responses.\n        /// </summary>\n        /// <param name=\"serviceFilter\" type=\"Function\">\n        /// The filter to use on the service.  The signature of a serviceFilter is\n        /// function(request, next, callback) where next := function(request, callback)\n        /// and callback := function(error, response).\n        /// </param>\n        /// <returns type=\"WindowsAzure.MobileServiceClient\">\n        /// A new MobileServiceClient whose HTTP requests and responses will be\n        /// filtered as desired.\n        /// </returns>\n        ///</signature>\n    },\n    login: function () {\n        /// <signature>\n        /// <summary>\n        /// Logs a user into a mobile service by using the specified identity provider.\n        /// </summary>\n        /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">\n        /// The name of the identity provider, which instructs Mobile Services which provider to use for authentication. \n        /// The following values are supported: 'facebook', 'twitter', 'google', \n        /// or 'microsoftaccount'. If no provider is specified, the 'token' parameter\n        /// is considered a Microsoft Account authentication token. If a provider is specified, \n        /// the 'token' parameter is considered a provider-specific authentication token.\n        /// </param>\n        /// <param name=\"token\" type=\"Object\" mayBeNull=\"true\">\n        /// Optional JSON representation of an authentication token, which can be supplied when the client has already\n        /// obtained a token from the identity provider.\n        /// </param>\n        /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n        /// Only applies to Windows 8 clients.  Will be ignored on other platforms.\n        /// Indicates if single sign-on should be used. Single sign-on requires that the \n        /// application's Package SID be registered with the Microsoft Azure Mobile Service, \n        /// but it provides a better experience as HTTP cookies are supported so that users \n        /// do not have to login in everytime the application is launched.\n        /// </param>\n        /// <returns type=\"WinJS.Promise\">\n        /// A winJS.Promise object\n        /// </returns>\n        ///</signature>\n    },\n\n    logout: function () {\n        /// <signature>\n        /// <summary>\n        /// Logs a user out of a Mobile Services application.\n        /// </summary>\n        /// </signature>\n    }\n});\n\nintellisense.annotate(WindowsAzure, {\n    MobileServiceClient: function () {\n        ///<signature>\n        /// <summary>\n        /// Creates a new instance of the MobileServiceClient.\n        /// </summary>\n        /// <param name=\"applicationUrl\" type=\"string\" mayBeNull=\"false\">\n        /// The URL of the mobile service..\n        /// </param>\n        /// <param name=\"applicationKey\" type=\"string\" mayBeNull=\"false\">\n        /// The application key of the mobile service..\n        /// </param>\n        /// <field name=\"applicationUrl\" type=\"string\">PAV</field>\n        ///</signature>\t\t\n    },\n    MobileServiceTable: function () {\n        /// <signature>\n        /// <summary>\n        /// Represents a table in a mobile service to support insert, update, delete, and query operations.\n        /// </summary>\n        /// </signature>\n    }\n});\n\nWindowsAzure.MobileServiceClient = (function () {\n    var _client = WindowsAzure.MobileServiceClient;\n    var wrapper = function () {\n        var instance = new _client();\n        intellisense.annotate(instance, {\n            /// <field name=\"applicationKey\" type=\"string\">The application key</field>\n            applicationKey: String,\n            /// <field name=\"currentUser\" type=\"UserObject\">The current user</field>\n            currentUser: undefined,\n            /// <field name=\"applicationUrl\" type=\"string\">The application Url</field>\n            applicationUrl: String,\n            getTable: function () {\n                /// <signature>\n                /// <summary>\n                /// Gets a reference to a table and its data operations.\n                /// </summary>\n                /// <param name=\"tableName\" type=\"string\">The name of the table.</param>\n                /// <returns type=\"WindowsAzure.MobileServiceTable\">A reference to the table.</returns>\n                /// </signature>\n            }\n        });\n\n        instance.getTable = (function () {\n            var _table = instance.getTable;\n            var wrapper2 = function () {\n                var instance2 = new _table();\n                intellisense.annotate(instance2, {\n                    del: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Deletes an object from a given table.\n                        /// </summary>\n                        /// <param name=\"instance\" type=\"Object\">The instance to delete from the table.</param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    getMobileServiceClient: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// The client associated with this table.\n                        /// </summary>\n                        /// <returns type=\"WindowsAzure.MobileServiceClient\">A MobileServiceClient</returns>\n                        /// </signature>\n                    },\n                    getTableName: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// The name of the table.\n                        /// </summary>\n                        /// <returns type=\"string\"></returns>\n                        /// </signature>\n                    },\n                    includeTotalCount: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Indicate that the query should include the total count for all the records returned\n                        /// ignoring any take paging limit clause specified.\n                        /// </summary>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    insert: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Inserts data from the supplied JSON object into the table.\n                        /// </summary>\n                        /// <param name=\"instance\" type=\"Object\" mayBeNull=\"false\">\n                        /// The instance to insert into the table.  It will be updated upon completion.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    orderBy: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Sorts a query against the table by the selected columns, in ascending order.\n                        /// </summary>\n                        /// <param name=\"col1\" type=\"string\" mayBeNull=\"false\">\n                        /// The name of the first column to use for ordering\n                        /// </param>\n                        /// <param name=\"col2\" type=\"string\" mayBeNull=\"false\">\n                        /// The name of the second column to use for ordering\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    orderByDescending: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Inserts data from the supplied JSON object into the table.\n                        /// </summary>\n                        /// <param name=\"col1\" type=\"string\" mayBeNull=\"false\">\n                        /// The name of the first column to use for ordering\n                        /// </param>\n                        /// <param name=\"col2\" type=\"string\" mayBeNull=\"false\">\n                        /// The name of the second column to use for ordering\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    read: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Executes a query against the table.\n                        /// </summary>\n                        /// <param name=\"query\" type=\"Query\" mayBeNull=\"true\">\n                        /// The query to execute. When null or undefined, all rows are returned.\n                        /// </param>\n                        /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                        /// An object of user-defined parameters and values to include in the request URI query string.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    select: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Applies the specific column projection to the query against the table.\n                        /// </summary>\n                        /// <param name=\"projection\" type=\"function\" mayBeNull=\"false\">\n                        /// Function that defines the projection.\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    skip: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Skips the specified number of rows in the query.\n                        /// </summary>\n                        /// <param name=\"count\" type=\"Number\" mayBeNull=\"false\">\n                        /// The number of rows to skip when returning the result.\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    take: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Returns the specified number of rows in the query.\n                        /// </summary>\n                        /// <param name=\"count\" type=\"Number\" mayBeNull=\"false\">\n                        /// The number of rows in the query to return.\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    update: function () {\n                        /// <signature>\n                        /// <summary>\t\t\t\t\t\t\n                        /// Updates an object in a given table.\n                        /// </summary>\n                        /// <param name=\"instance\" type=\"Object\" mayBeNull=\"false\"> \n                        /// The instance to update in the table, as a JSON object.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    where: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Applies a row filtering predicate to the query against the table.\n                        /// </summary>\n                        /// <param name=\"object\" type=\"Object\" mayBeNull=\"true\">\n                        /// JSON object that defines the row filter.\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    }\n                });\n                return instance2;\n            };\n            intellisense.redirectDefinition(wrapper2, _table);\n            return wrapper2;\n        })();\n\n        return instance;\n    };\n\n    intellisense.redirectDefinition(wrapper, _client);\n    return wrapper;\n})();"
  },
  {
    "path": "sdk/Javascript/src/MobileServices.priconfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<resources>\n\t<index root=\"\\\" startIndexAt=\"\\\">\n\t\t<default>\n\t\t\t<qualifier name=\"Language\" value=\"en\"/>\n\t\t\t<qualifier name=\"Contrast\" value=\"standard\"/>\n\t\t\t<qualifier name=\"Scale\" value=\"100\"/>\n\t\t\t<qualifier name=\"HomeRegion\" value=\"001\"/>\n\t\t\t<qualifier name=\"TargetSize\" value=\"256\"/>\n\t\t\t<qualifier name=\"LayoutDirection\" value=\"LTR\"/>\n\t\t\t<qualifier name=\"Configuration\" value=\"\"/>\n\t\t\t<qualifier name=\"AlternateForm\" value=\"\"/>\n\t\t</default>\n\t\t<indexer-config type=\"folder\" foldernameAsQualifier=\"true\" filenameAsQualifier=\"true\" qualifierDelimiter=\".\"/>\n\t\t<indexer-config type=\"resw\" convertDotsToSlashes=\"true\" initialPath=\"\"/>\n\t\t<indexer-config type=\"resjson\" initialPath=\"MobileServices\"/>\n\t\t<indexer-config type=\"PRI\"/>\n\t</index>\n</resources>"
  },
  {
    "path": "sdk/Javascript/src/Platforms/Platform.Web.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n/*global $__fileVersion__:false, $__version__:false */\n\nvar _ = require('Extensions');\nvar Validate = require('Validate');\nvar Promises = require('Promises');\nvar Resources = require('Resources');\nvar inMemorySettingStore = {};\n\ntry {\n    var key = '___z';\n    localStorage.setItem(key, key);\n    localStorage.removeItem(key);\n    inMemorySettingStore = localStorage;\n} catch (e) {\n    // localStorage is not available\n}\n\nvar bestAvailableTransport = null;\nvar knownTransports = [ // In order of preference\n    require('DirectAjaxTransport'),\n    require('IframeTransport')\n];\nvar knownLoginUis = [ // In order of preference\n    require('WebAuthBroker'),\n    require('CordovaPopup'),\n    require('BrowserPopup')\n];\n\n// Matches an ISO date and separates out the fractional part of the seconds\n// because IE < 10 has quirks parsing fractional seconds\nvar isoDateRegex = /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(?:\\.(\\d*))?Z$/;\n\n// Feature-detect IE8's date serializer\nvar dateSerializerOmitsDecimals = !JSON.stringify(new Date(100)).match(/\\.100Z\"$/);\n\nexports.async = function async(func) {\n    /// <summary>\n    /// Wrap a function that takes a callback into platform specific async\n    /// operation (i.e., keep using callbacks or switch to promises).\n    /// </summary>\n    /// <param name=\"func\" type=\"Function\">\n    /// An async function with a callback as its last parameter \n    /// </param>\n    /// <returns type=\"Function\">\n    /// Function that when invoked will return a promise.\n    /// </returns>\n\n    return function () {\n        // Capture the context of the original call\n        var that = this;\n        var args = arguments;\n\n        // Create a new promise that will wrap the async call\n        return new Promises.Promise(function (complete, error) {\n\n            // Add a callback to the args which will call the appropriate\n            // promise handlers\n            var callback = function (err) {\n                if (_.isNull(err)) {\n                    // Call complete with all the args except for err\n                    complete.apply(null, Array.prototype.slice.call(arguments, 1));\n                } else {\n                    error(err);\n                }\n            };\n            Array.prototype.push.call(args, callback);\n\n            try {\n                // Invoke the async method which will in turn invoke our callback\n                // which will in turn invoke the promise's handlers\n                func.apply(that, args);\n            } catch (ex) {\n                // Thread any immediate errors like parameter validation\n                // through the the callback\n                callback(_.createError(ex));\n            }\n        });\n    };\n};\n\nexports.addToMobileServicesClientNamespace = function (declarations) {\n    /// <summary>\n    /// Define a collection of declarations in the Mobile Services Client namespace.\n    /// </summary>\n    /// <param name=\"declarations\" type=\"Object\">\n    /// Object consisting of names and values to define in the namespace.\n    /// </param>\n\n    // First ensure our 'WindowsAzure' namespace exists\n    var namespaceObject = global.WindowsAzure = global.WindowsAzure || {};\n    \n    // Now add each of the declarations to the namespace\n    for (var key in declarations) {\n        if (declarations.hasOwnProperty(key)) {\n            namespaceObject[key] = declarations[key];\n        }\n    }\n};\n\nexports.readSetting = function readSetting(name) {\n    /// <summary>\n    /// Read a setting from a global configuration store.\n    /// </summary>\n    /// <param name=\"name\" type=\"String\">\n    /// Name of the setting to read.\n    /// </param>\n    /// <returns type=\"String\" mayBeNull=\"true\">\n    /// The value of the setting or null if not set.\n    /// </returns>\n\n    return inMemorySettingStore[name];\n};\n\nexports.writeSetting = function writeSetting(name, value) {\n    /// <summary>\n    /// Write a setting to a global configuration store.\n    /// </summary>\n    /// <param name=\"name\" type=\"String\">\n    /// Name of the setting to write.\n    /// </param>\n    /// <param name=\"value\" type=\"String\" mayBeNull=\"true\">\n    /// The value of the setting.\n    /// </returns>\n\n    inMemorySettingStore[name] = value;\n};\n\nexports.webRequest = function (request, callback) {\n    /// <summary>\n    /// Make a web request.\n    /// </summary>\n    /// <param name=\"request\" type=\"Object\">\n    /// Object describing the request (in the WinJS.xhr format).\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\">\n    /// The callback to execute when the request completes.\n    /// </param>\n\n    return getBestTransport().performRequest(request, callback);\n};\n\nexports.getUserAgent = function () {\n    // Browsers don't allow you to set a custom user-agent in ajax requests. Trying to do so\n    // will cause an exception. So we don't.\n    return null;\n};\n\nexports.getOperatingSystemInfo = function () {\n    return {\n        name: \"--\",\n        version: \"--\",\n        architecture: \"--\"\n    };\n};\n\nexports.getSdkInfo = function () {\n    var isCordovaEnvironment = window && window.cordova && window.cordova.version;\n\n    return {\n        language: isCordovaEnvironment ? \"Cordova\" : \"Web\",\n        fileVersion: $__fileVersion__\n    };\n};\n\nexports.login = function (startUri, endUri, callback) {\n    // Force logins to go over HTTPS because the runtime is hardcoded to redirect\n    // the server flow back to HTTPS, and we need the origin to match.\n    var findProtocol = /^[a-z]+:/,\n        requiredProtocol = 'https:';\n    startUri = startUri.replace(findProtocol, requiredProtocol);\n    endUri = endUri.replace(findProtocol, requiredProtocol);\n\n    return getBestProvider(knownLoginUis).login(startUri, endUri, callback);\n};\n\nexports.toJson = function (value) {\n    /// <summary>\n    /// Convert an object into JSON format.\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\">The value to convert.</param>\n    /// <returns type=\"String\">The value as JSON.</returns>\n\n    // We're wrapping this so we can hook the process and perform custom JSON\n    // conversions.  Note that we don't have to add a special hook to correctly\n    // serialize dates in ISO8061 because JSON.stringify does that by defualt.\n    // TODO: Convert geolocations once they're supported\n    // TODO: Expose the ability for developers to convert custom types\n    return JSON.stringify(value, function (key, stringifiedValue) {\n        if (dateSerializerOmitsDecimals && this && _.isDate(this[key])) {\n            // IE8 doesn't include the decimal part in its serialization of dates\n            // For consistency, we extract the non-decimal part from the string\n            // representation, and then append the expected decimal part.\n            var msec = this[key].getMilliseconds(),\n                msecString = String(msec + 1000).substring(1);\n            return stringifiedValue.replace(isoDateRegex, function (all, datetime) {\n                return datetime + \".\" + msecString + \"Z\";\n            });\n        } else {\n            return stringifiedValue;\n        }\n    });\n};\n\nexports.tryParseIsoDateString = function (text) {\n    /// <summary>\n    /// Try to parse an ISO date string.\n    /// </summary>\n    /// <param name=\"text\" type=\"String\">The text to parse.</param>\n    /// <returns type=\"Date\">The parsed Date or null.</returns>\n\n    Validate.isString(text);\n\n    // Check against a lenient regex\n    var matchedDate = isoDateRegex.exec(text);\n    if (matchedDate) {\n        // IE9 only handles precisely 0 or 3 decimal places when parsing ISO dates,\n        // and IE8 doesn't parse them at all. Fortunately, all browsers can handle \n        // 'yyyy/mm/dd hh:MM:ss UTC' (without fractional seconds), so we can rewrite\n        // the date to that format, and the apply fractional seconds.\n        var dateWithoutFraction = matchedDate[1],\n            fraction = matchedDate[2] || \"0\",\n            milliseconds = Math.round(1000 * Number(\"0.\" + fraction)); // 6 -> 600, 65 -> 650, etc.\n        dateWithoutFraction = dateWithoutFraction\n            .replace(/\\-/g, \"/\")   // yyyy-mm-ddThh:mm:ss -> yyyy/mm/ddThh:mm:ss\n            .replace(\"T\", \" \");    // yyyy/mm/ddThh:mm:ss -> yyyy/mm/dd hh:mm:ss\n\n        // Try and parse - it will return NaN if invalid\n        var ticks = Date.parse(dateWithoutFraction + \" UTC\");\n        if (!isNaN(ticks)) {\n            return new Date(ticks + milliseconds); // ticks are just milliseconds since 1970/01/01\n        }\n    }\n\n    // Doesn't look like a date\n    return null;\n};\n\nexports.getResourceString = function (resourceName) {\n    // For now, we'll just always use English\n    return Resources[\"en-US\"][resourceName];\n};\n\n\nexports.allowPlatformToMutateOriginal = function (original, updated) {\n    // For the Web/HTML client, we don't modify the original object.\n    // This is the more typical arrangement for most JavaScript data access.\n    return updated;\n};\n\nfunction getBestTransport() {\n    // We cache this just because it gets called such a lot\n    if (!bestAvailableTransport) {\n        bestAvailableTransport = getBestProvider(knownTransports);\n    }\n\n    return bestAvailableTransport;\n}\n\nfunction getBestProvider(providers) {\n    /// <summary>\n    /// Given an array of objects which each have a 'supportsCurrentRuntime' function,\n    /// returns the first instance where that function returns true.\n    /// </summary>\n\n    for (var i = 0; i < providers.length; i++) {\n        if (providers[i].supportsCurrentRuntime()) {\n            return providers[i];\n        }\n    }\n\n    throw new Error(\"Unsupported browser - no suitable providers are available.\");\n}"
  },
  {
    "path": "sdk/Javascript/src/Platforms/Platform.WinJS.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n// Declare JSHint globals\n/*global WinJS:false, Windows:false, $__fileVersion__:false, $__version__:false */\n\nvar _ = require('Extensions'),\n    Validate = require('Validate'),\n    WebAuthBroker = require('WebAuthBroker');\n\nexports.async = function async(func) {\n    /// <summary>\n    /// Wrap a function that takes a callback into platform specific async\n    /// operation (i.e., keep using callbacks or switch to promises).\n    /// </summary>\n    /// <param name=\"func\" type=\"Function\">\n    /// An async function with a callback as its last parameter \n    /// </param>\n    /// <returns type=\"Function\">\n    /// Function that when invoked will return a WinJS.Promise.\n    /// </returns>\n\n    return function () {\n        // Capture the context of the original call\n        var that = this;\n        var args = arguments;\n\n        // Create a new promise that will wrap the async call\n        return new WinJS.Promise(function (complete, error) {\n\n            // Add a callback to the args which will call the appropriate\n            // promise handlers\n            var callback = function (err) {\n                if (_.isNull(err)) {\n                    // Call complete with all the args except for err\n                    complete.apply(null, Array.prototype.slice.call(arguments, 1));\n                } else {\n                    error(err);\n                }\n            };\n            Array.prototype.push.call(args, callback);\n\n            try {\n                // Invoke the async method which will in turn invoke our callback\n                // which will in turn invoke the promise's handlers\n                func.apply(that, args);\n            } catch (ex) {\n                // Thread any immediate errors like parameter validation\n                // through the the callback\n                callback(_.createError(ex));\n            }\n        });\n    };\n};\n\nexports.addToMobileServicesClientNamespace = function (declarations) {\n    /// <summary>\n    /// Define a collection of declarations in the Mobile Services Client namespace.\n    /// </summary>\n    /// <param name=\"declarations\" type=\"Object\">\n    /// Object consisting of names and values to define in the namespace.\n    /// </param>\n\n    try {\n        WinJS.Namespace.define('WindowsAzure', declarations);\n    } catch (ex) {\n        // This can fail due to a WinRT issue where another assembly defining a\n        // non-JavaScript type with a Microsoft namespace.  The wrapper object\n        // created to represent the namespace doesn't allow expando\n        // properties...  so it will never let any additional JavaScript\n        // namespaces be defined under it.  We only see this with our test\n        // library at the moment, but it could also appear if customers are\n        // using other Microsoft libraries in WinJS.        \n    }\n};\n\nexports.readSetting = function readSetting(name) {\n    /// <summary>\n    /// Read a setting from a global configuration store.\n    /// </summary>\n    /// <param name=\"name\" type=\"String\">\n    /// Name of the setting to read.\n    /// </param>\n    /// <returns type=\"String\" mayBeNull=\"true\">\n    /// The value of the setting or null if not set.\n    /// </returns>\n\n    var localSettings = Windows.Storage.ApplicationData.current.localSettings;\n    return !_.isNull(localSettings) ?\n        localSettings.values[name] :\n        null;\n};\n\nexports.writeSetting = function writeSetting(name, value) {\n    /// <summary>\n    /// Write a setting to a global configuration store.\n    /// </summary>\n    /// <param name=\"name\" type=\"String\">\n    /// Name of the setting to write.\n    /// </param>\n    /// <param name=\"value\" type=\"String\" mayBeNull=\"true\">\n    /// The value of the setting.\n    /// </param>\n\n    var localSettings = Windows.Storage.ApplicationData.current.localSettings;\n    if (!_.isNull(localSettings)) {\n        localSettings.values[name] = value;\n    }\n};\n\nexports.webRequest = function (request, callback) {\n    /// <summary>\n    /// Make a web request.\n    /// </summary>\n    /// <param name=\"request\" type=\"Object\">\n    /// Object describing the request (in the WinJS.xhr format).\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\">\n    /// The callback to execute when the request completes.\n    /// </param>\n\n    WinJS.xhr(request).done(\n        function (response) { callback(null, response); },\n        function (error) { callback(null, error); });\n};\n\nexports.login = function (startUri, endUri, callback) {\n    /// <summary>\n    /// Log a user into a Mobile Services application by launching a\n    /// browser-based control that will allow the user to enter their credentials\n    /// with a given provider.\n    /// </summary>\n    /// <param name=\"startUri\" type=\"string\">\n    /// The absolute URI to which the login control should first navigate to in order to\n    /// start the login process flow.\n    /// </param>\n    /// <param name=\"endUri\" type=\"string\" mayBeNull=\"true\">\n    /// The absolute URI that indicates login is complete. Once the login control navigates\n    /// to this URI, it will execute the callback.\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n    /// The callback to execute when the login completes: callback(error, endUri).\n    /// </param>\n\n    // Account for absent optional arguments\n    if (_.isNull(callback) && typeof endUri === 'function') {\n        callback = endUri;\n        endUri = null;\n    }\n\n    Validate.notNullOrEmpty(startUri, 'startUri');\n    Validate.isString(startUri, 'startUri');\n\n    WebAuthBroker.login(startUri, endUri, callback);\n};\n\nexports.getOperatingSystemInfo = function () {\n\n    var architecture = \"Unknown\";\n\n    // The Windows API provides the architecture as an enum, so we have to \n    // lookup the string value\n    var archValue = Windows.ApplicationModel.Package.current.id.architecture;\n    switch (archValue) {\n        case 0: architecture = \"X86\"; break;\n        case 5: architecture = \"Arm\"; break;\n        case 9: architecture = \"X64\"; break;\n        case 11: architecture = \"Neutral\"; break;\n    }\n\n    return {\n        name: \"Windows 8\",\n        version: \"--\",\n        architecture: architecture\n    };\n};\n\nexports.getSdkInfo = function () {\n    return {\n        language: \"WinJS\",\n        fileVersion: $__fileVersion__        \n    };\n};\n\nexports.getUserAgent = function () {\n    // The User-Agent header can not be set in WinJS\n    return null;\n};\n\nexports.toJson = function (value) {\n    /// <summary>\n    /// Convert an object into JSON format.\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\">The value to convert.</param>\n    /// <returns type=\"String\">The value as JSON.</returns>\n\n    // We're wrapping this so we can hook the process and perform custom JSON\n    // conversions.  Note that we don't have to add a special hook to correctly\n    // serialize dates in ISO8061 because JSON.stringify does that by defualt.\n    // TODO: Convert geolocations once they're supported\n    // TODO: Expose the ability for developers to convert custom types\n    return JSON.stringify(value);\n};\n\nexports.tryParseIsoDateString = function (text) {\n    /// <summary>\n    /// Try to parse an ISO date string.\n    /// </summary>\n    /// <param name=\"text\" type=\"String\">The text to parse.</param>\n    /// <returns type=\"Date\">The parsed Date or null.</returns>\n\n    Validate.isString(text);\n\n    // Check against a lenient regex\n    if (/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2})\\:(\\d{2})\\:(\\d{2})(\\.(\\d{1,3}))?Z$/.test(text)) {\n        // Try and parse - it will return NaN if invalid\n        var ticks = Date.parse(text);\n        if (!isNaN(ticks)) {\n            // Convert to a regular Date\n            return new Date(ticks);\n        }\n    }\n\n    // Return null if not found\n    return null;\n};\n\nexports.getResourceString = function (resourceName) {\n    var resourceManager = Windows.ApplicationModel.Resources.Core.ResourceManager.current;\n    var resource = resourceManager.mainResourceMap.getValue(\"MobileServices/Resources/\" + resourceName);\n    return resource.valueAsString;\n};\n\nexports.allowPlatformToMutateOriginal = function (original, updated) {\n    /// <summary>\n    /// Patch an object with the values returned by from the server.  Given\n    /// that it's possible for the server to change values on an insert/update,\n    /// we want to make sure the client object reflects those changes.\n    /// </summary>\n    /// <param name=\"original\" type=\"Object\">The original value.</param>\n    /// <param name=\"updated\" type=\"Object\">The updated value.</param>\n    /// <returns type=\"Object\">The patched original object.</returns>\n    if (!_.isNull(original) && !_.isNull(updated)) {\n        var key = null;\n        var binding = WinJS.Binding.as(original);\n\n        for (key in updated) {\n            if (key in original) {\n                binding[key] = updated[key];\n            } else {\n                binding.addProperty(key, updated[key]);\n            }\n        }\n\n        // TODO: Should we also delete any fields on the original object that\n        // aren't also on the updated object?  Is that a scenario for scripts?\n    }\n\n    return original;\n};"
  },
  {
    "path": "sdk/Javascript/src/Properties/AssemblyInfo.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Resources;\n\n// NOTE: We're not actually using this project to generate a .NET class library\n// so these settings are more or less meaningless.  We've just got this project\n// as there's no option for a \"JavaScript Class Library\" for Win8 projects.\n\n[assembly: SuppressMessage(\n    \"Microsoft.Design\",\n    \"CA2210:AssembliesShouldHaveValidStrongNames\",\n    Justification = \"Not an actual class library.\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n"
  },
  {
    "path": "sdk/Javascript/src/Push/LocalStorageManager.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path='C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js' />\n/// <reference path='C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js' />\n/// <reference path='..\\Generated\\MobileServices.DevIntellisense.js' />\n\n// Declare JSHint globals\n/*global WinJS:false, Windows:false */\n\nvar _ = require('Extensions'),\n    Validate = require('Validate'),\n    Platform = require('Platform'),\n    Constants = {\n        Version: 'v1.1.0',\n        Keys: {\n            Version: 'Version',\n            PushHandle: 'ChannelUri',\n            Registrations: 'Registrations',\n            NativeRegistration: '$Default'\n        },\n    };\n\nfunction LocalStorageManager(storageKey) {    \n    this._registrations = {};\n    this._storageKey = 'MobileServices.Push.' + storageKey;\n\n    this._isRefreshNeeded = false;\n    Object.defineProperty(this, 'isRefreshNeeded', {\n        get: function () {\n            /// <summary>\n            /// Gets a value indicating whether local storage data needs to be refreshed.\n            /// </summary>\n            return this._isRefreshNeeded;\n        }\n    });\n\n    this._pushHandle = null;\n    Object.defineProperty(this, 'pushHandle', {\n        get: function () {\n            /// <summary>\n            /// Gets the DeviceId of all registrations in the LocalStorageManager\n            /// </summary>  \n            return _.isNull(this._pushHandle) ? '' : this._pushHandle;\n        },\n        set: function (value) {\n            Validate.notNullOrEmpty(value, 'pushHandle');\n\n            if (this._pushHandle !== value) {\n                this._pushHandle = value;\n                this._flushToSettings();\n            }\n        }\n    });\n\n    // Initialize our state\n    this._initializeRegistrationInfoFromStorage();\n}\n\nexports.LocalStorageManager = LocalStorageManager;\n\nLocalStorageManager.NativeRegistrationName = Constants.Keys.NativeRegistration;\n\nLocalStorageManager.prototype.getRegistrationIds = function () {\n    /// <summary>\n    /// Gets an array of all registration Ids\n    /// </summary>\n    /// <returns>\n    /// An array of registration Ids in form of ['1','2','3']\n    /// </returns>\n    var result = [];\n    for (var name in this._registrations) {\n        if (this._registrations.hasOwnProperty(name)) {\n            result.push(this._registrations[name]);\n        }\n    }\n    return result;\n};\n\nLocalStorageManager.prototype.getRegistrationIdWithName = function (registrationName) {\n    /// <summary>\n    /// Get the registration Id from local storage\n    /// </summary>\n    /// <param name=\"registrationName\">\n    /// The name of the registration mapping to search for\n    /// </param>\n    /// <returns>\n    /// The registration Id if it exists or null if it does not.\n    /// </returns>\n\n    Validate.notNullOrEmpty(registrationName, 'registrationName');\n\n    return this._registrations[registrationName];\n};\n\nLocalStorageManager.prototype.updateAllRegistrations = function (registrations, pushHandle) {\n    /// <summary>\n    /// Replace all registrations and the pushHandle with those passed in.\n    /// </summary>\n    /// <param name=\"registrations\">\n    /// An array of registrations to update.\n    /// </param>\n    /// <param name=\"pushHandle\">\n    /// The pushHandle to update.\n    /// </param>\n\n    Validate.notNull(pushHandle, 'pushHandle');\n    if (!registrations) {\n        registrations = [];\n    }\n    this._registrations = {};\n\n    for (var i = 0; i < registrations.length; i++) {\n        var name = registrations[i].templateName;\n        if (_.isNullOrEmpty(name)) {\n            name = Constants.Keys.NativeRegistration;\n        }\n        \n        /// All registrations passed to this method will have registrationId as they\n        /// come directly from notification hub where registrationId is the key field.\n        this._registrations[name] = registrations[i].registrationId;\n    }\n\n    // Need to flush explictly as handle may not have changed\n    this._pushHandle = pushHandle;\n    this._flushToSettings();\n    this._isRefreshNeeded = false;\n};\n\nLocalStorageManager.prototype.updateRegistrationWithName = function (registrationName, registrationId, pushHandle) {\n    /// <summary>\n    /// Update a registration mapping and the deviceId in local storage by registrationName\n    /// </summary>\n    /// <param name=\"registrationName\">\n    /// The name of the registration mapping to update.\n    /// </param>\n    /// <param name=\"registrationId\">\n    /// The registrationId to update.\n    /// </param>\n    /// <param name=\"registrationDeviceId\">\n    /// The device Id to update the ILocalStorageManager to.\n    /// </param>\n\n    Validate.notNullOrEmpty(registrationName, 'registrationName');\n    Validate.notNullOrEmpty(registrationId, 'registrationId');\n    Validate.notNullOrEmpty(pushHandle, 'pushHandle');\n\n    // TODO: We could check if the Id or Name has actually changed\n    this._registrations[registrationName] = registrationId;\n\n    this._pushHandle = pushHandle;\n    this._flushToSettings();\n};\n\nLocalStorageManager.prototype.deleteRegistrationWithName = function (registrationName) {\n    /// <summary>\n    /// Delete a registration from local storage by name\n    /// </summary>\n    /// <param name=\"registrationName\">\n    /// The name of the registration mapping to delete.\n    /// </param>\n\n    Validate.notNullOrEmpty(registrationName, 'registrationName');\n\n    if (this._registrations.hasOwnProperty(registrationName)) {\n        delete this._registrations[registrationName];\n        this._flushToSettings();\n    }\n};\n\nLocalStorageManager.prototype.deleteAllRegistrations = function () {\n    /// <summary>\n    /// Clear all registrations from local storage.\n    /// </summary>\n    this._registrations = {};\n    this._flushToSettings();\n};\n\n// Private methods\n\nLocalStorageManager.prototype._flushToSettings = function () {\n    /// <summary>\n    /// Writes all registrations to storage\n    /// </summary>\n\n    var forStorage = {};\n    forStorage[Constants.Keys.Version] = Constants.Version;\n    forStorage[Constants.Keys.PushHandle] = this._pushHandle;\n    forStorage[Constants.Keys.Registrations] = this._registrations;\n\n    Platform.writeSetting(this._storageKey, JSON.stringify(forStorage));\n};\n\nLocalStorageManager.prototype._initializeRegistrationInfoFromStorage = function () {\n    /// <summary>\n    /// Populates registration information from storage\n    /// </summary>\n\n    this._registrations = {};\n\n    try {\n        // Read push handle\n        var data = JSON.parse(Platform.readSetting(this._storageKey));\n\n        this._pushHandle = data[Constants.Keys.PushHandle];\n        if (!this._pushHandle) {\n            this._isRefreshNeeded = true;\n            return;\n        }\n\n        // Verify this.storage version\n        var version = data[Constants.Keys.Version] || '';\n        this._isRefreshNeeded = (Constants.Version !== version.toLowerCase());\n        if (this._isRefreshNeeded) {\n            return;\n        }\n\n        // read registrations\n        this._registrations = data[Constants.Keys.Registrations];\n        \n    } catch (err) {\n        // It is possible that local storage is corrupted by users, bugs or other issues.\n        // If this occurs, force a full refresh.\n        this._isRefreshNeeded = true;\n    }\n};"
  },
  {
    "path": "sdk/Javascript/src/Push/Push.Web.js",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\nvar _ = require('Extensions'),\n    Validate = require('Validate'),\n    Platform = require('Platform'),\n    RegistrationManager = require('RegistrationManager').RegistrationManager,\n\tapns = function (push) {\n\t    this._push = push;\n\t},\n\tgcm = function (push) {\n\t    this._push = push;\n\t};\n\nfunction Push(mobileServicesClient) {\n    this._apns = null;\n    this._gcm = null;\n    this._registrationManager = null;\n\n    Object.defineProperties(this, {\n        'apns': {\n            get: function () {\n                if (!this._apns) {\n                    var name = _.format('MS-PushContainer-apns-{0}', mobileServicesClient.applicationUrl);\n                    this._registrationManager = new RegistrationManager(mobileServicesClient, 'apns', name);\n                    this._apns = new apns(this);\n                }\n                return this._apns;\n            }\n        },\n        'gcm': {\n            get: function () {\n                if (!this._gcm) {\n                    var name = _.format('MS-PushContainer-gcm-{0}', mobileServicesClient.applicationUrl);\n                    this._registrationManager = new RegistrationManager(mobileServicesClient, 'gcm', name);\n                    this._gcm = new gcm(this);\n                }\n                return this._gcm;\n            }\n        }\n    });\n}\n\nexports.Push = Push;\n\nPush.prototype._register = function (platform, pushHandle, tags) {\n    /// <summary>\n    /// Register for native notification\n    /// </summary>\n    /// <param name=\"deviceToken\">\n    /// The deviceToken to register\n    /// </param>\n    /// <param name=\"tags\" mayBeNull=\"true\">\n    /// Array containing the tags for this registeration\n    /// </param>\n    /// <returns>\n    /// Promise that will complete when the nregister is completed\n    /// </returns>\n\n    var registration = makeCoreRegistration(pushHandle, platform, tags);\n    return this._registrationManager.upsertRegistration(registration);\n};\n\nPush.prototype._registerTemplate = function (platform, deviceToken, name, bodyTemplate, expiryTemplate, tags) {\n    /// <summary>\n    /// Register for template notification\n    /// </summary>\n    /// <param name=\"deviceToken\">The deviceToken to register</param>\n    /// <param name=\"name\">The name of the template</param>\n    /// <param name=\"bodyTemplate\">\n    /// The json body to register\n    /// </param>\n    /// <param name=\"expiryTemplate\">\n    /// The json body to register\n    /// </param>\n    /// <param name=\"tags\">\n    /// Array containing the tags for this registeration\n    /// </param>\n    /// <returns>\n    /// Promise that will complete when the register is completed\n    /// </returns>\n\n    Validate.notNullOrEmpty(name, 'name');\n    Validate.notNullOrEmpty(bodyTemplate, 'bodyTemplate');\n\n    var templateAsString = bodyTemplate,\n        registration = makeCoreRegistration(deviceToken, platform, tags);\n    \n    if (!_.isString(templateAsString)) {\n        templateAsString = JSON.stringify(templateAsString);\n    }\n\n    registration.templateName = name;\n    registration.templateBody = templateAsString;\n    if (expiryTemplate) {\n        registration.expiry = expiryTemplate;\n    }\n\n    return this._registrationManager.upsertRegistration(registration);\n};\n\nPush.prototype._unregister = function (templateName) {\n    /// <summary>\n    /// Unregister for template notification\n    /// </summary>\n    /// <param name=\"templateName\">\n    /// The name of the template\n    /// </param>\n    /// <returns>\n    /// Promise that will complete when the unregister is completed\n    /// </returns>\n\n    Validate.notNullOrEmpty(templateName, 'templateName');\n\n    return this._registrationManager.deleteRegistrationWithName(templateName);\n};\n\nPush.prototype._unregisterAll = function (pushHandle) {\n    /// <summary>\n    /// Unregister for all notifications\n    /// </summary>\n    /// <param name=\"pushHandle\">\n    /// The push handle to unregister everything for\n    /// </param>\n    /// <returns>\n    /// Promise that will complete when the unregister is completed\n    /// </returns>\n\n    Validate.notNullOrEmpty(pushHandle, 'pushHandle');\n\n    return this._registrationManager.deleteAllRegistrations(pushHandle);\n};\n\n\napns.prototype.registerNative = function (deviceToken, tags) {\n    /// <summary>\n    /// Register for native notification\n    /// </summary>\n    /// <param name=\"deviceToken\">\n    /// The deviceToken to register\n    /// </param>\n    /// <param name=\"tags\" mayBeNull=\"true\">\n    /// Array containing the tags for this registeration\n    /// </param>\n    /// <returns>\n    /// Promise that will complete when the register is completed\n    /// </returns>\n    \n    return this._push._register('apns', deviceToken, tags);\n};\n\napns.prototype.registerTemplate = function (deviceToken, name, bodyTemplate, expiryTemplate, tags) {\n    /// <summary>\n    /// Register for template notification\n    /// </summary>\n    /// <param name=\"deviceToken\">The deviceToken to register</param>\n    /// <param name=\"name\">The name of the template</param>\n    /// <param name=\"bodyTemplate\">\n    /// String or json object defining the body of the template register\n    /// </param>\n    /// <param name=\"expiryTemplate\">\n    /// String defining the datatime or template expresession that evaluates to a date time\n    /// string to use for the expiry of the message\n    /// </param>\n    /// <param name=\"tags\">\n    /// Array containing the tags for this registeration\n    /// </param>\n    /// <returns>\n    /// Promise that will complete when the unregister is completed\n    /// </returns>\n\n    if (_.isNull(tags) && !_.isNull(expiryTemplate) && Array.isArray(expiryTemplate)) {\n        tags = expiryTemplate;\n        expiryTemplate = null;\n    }\n\n    return this._push._registerTemplate('apns', deviceToken, name, bodyTemplate, expiryTemplate, tags);\n};\n\napns.prototype.unregisterNative = function () {\n    /// <summary>\n    /// Unregister for native notification\n    /// </summary>\n    /// <returns>\n    /// Promise that will complete when the unregister is completed\n    /// </returns>\n\n    return this._push._unregister(RegistrationManager.NativeRegistrationName);\n};\n\napns.prototype.unregisterTemplate = function (templateName) {\n    /// <summary>\n    /// Unregister for template notification\n    /// </summary>\n    /// <param name=\"templateName\">\n    /// The name of the template\n    /// </param>\n    /// <returns>\n    /// Promise that will complete when the unregister is completed\n    /// </returns>\n\n    return this._push._unregister(templateName);\n};\n\napns.prototype.unregisterAll = function (deviceToken) {\n    /// <summary>\n    /// DEBUG-ONLY: Unregisters all registrations for the given device token\n    /// </summary>\n    /// <param name=\"deviceToken\">\n    /// The device token\n    /// </param>\n    /// <returns>\n    /// Promise that will complete once all registrations are deleted\n    /// </returns>\n\n    return this._push._unregisterAll(deviceToken);\n};\n\ngcm.prototype.registerNative = function (deviceId, tags) {\n    /// <summary>\n    /// Register for native notification\n    /// </summary>\n    /// <param name=\"deviceId\">\n    /// The deviceToken to register\n    /// </param>\n    /// <param name=\"tags\" mayBeNull=\"true\">\n    /// Array containing the tags for this registeration\n    /// </param>\n    /// <returns>\n    /// Promise that will complete when the unregister is completed\n    /// </returns>\n\n    return this._push._register('gcm', deviceId, tags);\n};\n\ngcm.prototype.registerTemplate = function (deviceId, name, bodyTemplate, tags) {\n    /// <summary>\n    /// Register for template notification\n    /// </summary>\n    /// <param name=\"deviceId\">\n    /// The deviceId to register\n    /// </param>\n    /// <param name=\"name\">\n    /// The name of the template\n    /// </param>\n    /// <param name=\"bodyTemplate\">\n    /// String or json object defining the body to register\n    /// </param>\n    /// <param name=\"tags\">\n    /// Array containing the tags for this registeration\n    /// </param>\n    /// <returns>\n    /// Promise that will complete when the unregister is completed\n    /// </returns>\n\n    return this._push._registerTemplate('gcm', deviceId, name, bodyTemplate, null, tags);\n};\n\ngcm.prototype.unregisterNative = function () {\n    /// <summary>\n    /// Unregister for native notification\n    /// </summary>\n    /// <returns>\n    /// Promise that will complete when the register is completed\n    /// </returns>\n\n    return this._push._unregister(RegistrationManager.NativeRegistrationName);\n};\n\ngcm.prototype.unregisterTemplate = function (templateName) {\n    /// <summary>\n    /// Unregister for template notification\n    /// </summary>\n    /// <param name=\"templateName\">\n    /// The name of the template\n    /// </param>\n    /// <returns>\n    /// Promise that will complete when the register is completed\n    /// </returns>\n    return this._push._unregister(templateName);\n};\n\ngcm.prototype.unregisterAll = function (deviceId) {\n    /// <summary>\n    /// DEBUG-ONLY: Unregisters all registrations for the given device token\n    /// </summary>\n    /// <param name=\"deviceId\">\n    /// The device id\n    /// </param>\n    /// <returns>\n    /// Promise that will complete once all registrations are deleted\n    /// </returns>\n\n    return this._push._unregisterAll(deviceId);\n};\n\n\nfunction makeCoreRegistration(pushHandle, platform, tags) {\n    Validate.notNullOrEmpty(pushHandle, 'pushHandle');\n    Validate.isString(pushHandle, 'pushHandle');\n\n    if (platform == 'apns') {\n        pushHandle = pushHandle.toUpperCase();\n    }\n\n    var registration = {\n        platform: platform,\n        deviceId: pushHandle\n    };\n\n    if (tags) {\n        Validate.isArray(tags, 'tags');\n        registration.tags = tags;\n    }\n\n    return registration;\n}\n"
  },
  {
    "path": "sdk/Javascript/src/Push/Push.WinJS.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\nvar _ = require('Extensions'),\n    Validate = require('Validate'),\n    Platform = require('Platform'),\n    RegistrationManager = require('RegistrationManager').RegistrationManager;\n\nfunction Push(mobileServicesClient, tileId) {\n    tileId = tileId || '$Primary';\n    var packageName = Windows.ApplicationModel.Package.current.id.name,\n        name = _.format('{0}-PushContainer-{1}-{2}', packageName, mobileServicesClient.applicationUrl, tileId);\n\n    this._registrationManager = new RegistrationManager(mobileServicesClient, 'wns', name);\n}\n\nexports.Push = Push;\n\nPush.prototype.registerNative = function (channelUri, tags) {\n    /// <summary>\n    /// Register for native notification\n    /// </summary>\n    /// <param name=\"channelUri\">\n    /// The channelUri to register\n    /// </param>\n    /// <param name=\"tags\" mayBeNull=\"true\">\n    /// Array containing the tags for this registeration\n    /// </param>\n    /// <returns>\n    /// A promise that will complete when the registration is complete.\n    /// </returns>\n    \n    var registration = makeCoreRegistration(channelUri, tags);        \n    return this._registrationManager.upsertRegistration(registration);\n};\n\nPush.prototype.registerTemplate = function (channelUri, templateBody, templateName, headers, tags) {\n    /// <summary>\n    /// Register for template notification\n    /// </summary>\n    /// <param name=\"channelUri\">The channelUri to register</param>\n    /// <param name=\"templateBody\">The xml body to register</param>\n    /// <param name=\"templateName\">The name of the template</param>\n    /// <param name=\"headers\">Object containing key/value pairs for the template to provide to WNS. X-WNS-Type is required. Example: { 'X-WNS-Type' : 'wns/toast' }</param>\n    /// <param name=\"tags\">Array containing the tags for this registeration</param>\n    /// <returns>\n    /// A promise that will complete when the registration is complete.\n    /// </returns>\n\n    var registration = makeCoreRegistration(channelUri, tags);\n    \n    if (templateBody) {\n        Validate.isString(templateBody, 'templateBody');\n        registration.templateBody = templateBody;\n        Validate.isString(templateName, 'templateName');\n        Validate.notNullOrEmpty(templateName);\n        registration.templateName = templateName;\n\n        if (headers) {\n            Validate.isObject(headers);\n            registration.headers = headers;\n        }\n    }\n\n    return this._registrationManager.upsertRegistration(registration);\n};\n\nPush.prototype.unregisterNative = function () {\n    /// <summary>\n    /// Unregister for native notification\n    /// </summary>\n    /// <returns>Promise that will complete when the unregister is completed</returns>\n    \n    return this.unregisterTemplate(RegistrationManager.NativeRegistrationName);\n};\n\nPush.prototype.unregisterTemplate = function (templateName) {\n    /// <summary>\n    /// Unregister for template notification\n    /// </summary>\n    /// <param name=\"templateName\">\n    /// The name of the template\n    /// </param>\n    /// <returns>Promise that will complete when the unregister is completed</returns>\n    \n    Validate.notNullOrEmpty(templateName, 'templateName');\n\n    return this._registrationManager.deleteRegistrationWithName(templateName);\n};\n\nPush.prototype.unregisterAll = function (channelUri) {\n    /// <summary>\n    /// DEBUG-ONLY: Unregister all notifications for a specfic channelUri\n    /// </summary>\n    /// <param name=\"channelUri\">The channelUri to unregister</param>\n    /// <returns>Promise that will complete when the unregistration of all registrations at the channelUri is completed</returns>\n    \n    Validate.notNullOrEmpty(channelUri, 'channelUri');\n\n    return this._registrationManager.deleteAllRegistrations(channelUri);\n};\n\nPush.prototype.getSecondaryTile = function (tileId) {\n    // TODO: move below to function\n    var packageName = Windows.ApplicationModel.Package.current.id.name,\n        name = _.format('{0}-PushContainer-{1}-{2}', packageName, mobileServicesClient.applicationUrl, tileId),\n        localStorage = new LocalStorageManager(name);\n\n    return new Push(name);\n};\n\nfunction makeCoreRegistration(channelUri, tags) {\n    var registration = {};\n\n    registration.platform = 'wns';\n\n    Validate.isString(channelUri, 'channelUri');\n    Validate.notNullOrEmpty(channelUri, 'channelUri');\n\n    registration.deviceId = channelUri;\n\n    if (tags) {\n        Validate.isArray(tags, 'tags');\n        registration.tags = tags;\n    }\n\n    return registration;\n}"
  },
  {
    "path": "sdk/Javascript/src/Push/PushHttpClient.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\nvar Platform = require('Platform'),\n    noCacheHeader = { 'If-Modified-Since': 'Mon, 27 Mar 1972 00:00:00 GMT' };\n\nfunction PushHttpClient(mobileServicesClient) {\n    this.mobileServicesClient = mobileServicesClient;\n}\n\nexports.PushHttpClient = PushHttpClient;\n\nPushHttpClient.prototype.listRegistrations = function (pushHandle, platform, callback) {\n    this.mobileServicesClient._request(\n        'GET', \n        '/push/registrations?platform=' + encodeURIComponent(platform) + '&deviceId=' + encodeURIComponent(pushHandle), \n        null, \n        null, \n        noCacheHeader, \n        function (error, request) {\n            if (error) {\n                callback(error);\n            } else {\n                callback(null, JSON.parse(request.responseText));\n            }\n        });\n};\n\nPushHttpClient.prototype.unregister = function (registrationId, callback) {\n    this.mobileServicesClient._request(\n        'DELETE', \n        '/push/registrations/' + encodeURIComponent(registrationId), \n        null, \n        null, \n        noCacheHeader, \n        function (error) {\n            if (error && error.request && error.request.status === 404) {\n                callback();\n                return;\n            }\n            callback(error);\n        });\n};\n\nPushHttpClient.prototype.createRegistrationId = function (callback) {\n    this.mobileServicesClient._request(\n        'POST', \n        '/push/registrationIds', \n        null, \n        null, \n        noCacheHeader, \n        function (error, request) {\n            if (error) {\n                callback(error);\n                return;\n            }\n\n            var locationHeader = request.getResponseHeader('Location');\n            callback(null, locationHeader.slice(locationHeader.lastIndexOf('/') + 1));\n        });\n};\n\nPushHttpClient.prototype.upsertRegistration = function (registration, callback) {\n    this.mobileServicesClient._request(\n        'PUT', \n        '/push/registrations/' + encodeURIComponent(registration.registrationId), \n        registration, \n        null, \n        noCacheHeader, \n        callback);\n};"
  },
  {
    "path": "sdk/Javascript/src/Push/RegistrationManager.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n// Declare JSHint globals\n/*global WinJS:false */\n\nvar _ = require('Extensions'),\n    Validate = require('Validate'),\n    Platform = require('Platform'),\n    LocalStorageManager = require('LocalStorageManager').LocalStorageManager,\n    PushHttpClient = require('PushHttpClient').PushHttpClient;\n\nfunction RegistrationManager(mobileServicesClient, platform, storageKey) {\n    Validate.notNull(mobileServicesClient, 'mobileServicesClient');\n\n    this._platform = platform || 'wns';\n    this._pushHttpClient = new PushHttpClient(mobileServicesClient);\n    this._storageManager = new LocalStorageManager(storageKey || mobileServicesClient.applicationUrl);\n}\n\nexports.RegistrationManager = RegistrationManager;\n\nRegistrationManager.NativeRegistrationName = LocalStorageManager.NativeRegistrationName;\n\nRegistrationManager.prototype.upsertRegistration = Platform.async(\n    function (registration, finalCallback) {\n        Validate.notNull(registration, 'registration');\n        Validate.notNull(finalCallback, 'callback');\n\n        var self = this,\n            expiredRegistration = function (callback) {\n                createRegistration(function (error) {\n                    if (error) {\n                        callback(error);\n                        return;\n                    }\n\n                    upsertRegistration(false, callback);\n                });\n            },\n            upsertRegistration = function (retry, callback) {\n                self._pushHttpClient.upsertRegistration(registration, function (error) {\n                    if (retry && error && error.request && error.request.status === 410) {\n                        expiredRegistration(callback);\n                        return;\n                    } else if (!error) {\n                        self._storageManager.pushHandle = registration.deviceId;                        \n                    }\n\n                    callback(error);\n                });\n            },\n            createRegistration = function (callback) {\n                self._pushHttpClient.createRegistrationId(function (error, registrationId) {\n                    if (error) {\n                        callback(error);\n                        return;\n                    }\n\n                    registration.registrationId = registrationId;\n\n                    self._storageManager.updateRegistrationWithName(\n                        registration.templateName || LocalStorageManager.NativeRegistrationName,\n                        registration.registrationId,\n                        registration.deviceId);\n\n                    callback();\n                });\n            },\n            firstRegistration = function (callback) {\n                var name = registration.templateName || LocalStorageManager.NativeRegistrationName,\n                    cachedRegistrationId = self._storageManager.getRegistrationIdWithName(name);\n\n                if (!_.isNullOrEmpty(cachedRegistrationId)) {\n                    registration.registrationId = cachedRegistrationId;\n                    upsertRegistration(true, callback);\n                } else {                \n                    createRegistration(function (error) {\n                        if (error) {\n                            callback(error);\n                            return;\n                        }\n                        upsertRegistration(true, callback);\n                    });\n                }\n            };\n\n        if (this._storageManager.isRefreshNeeded) {\n            // We want the existing handle to win (if present), and slowly update them to the new handle\n            // So use cached value over the passed in value\n            this._refreshRegistrations(this._storageManager.pushHandle || registration.deviceId, function (error) {\n                if (error) {\n                    finalCallback(error);\n                    return;\n                }\n\n                firstRegistration(finalCallback);\n            });        \n        } else {\n            firstRegistration(finalCallback);\n        }\n    });\n\nRegistrationManager.prototype.deleteRegistrationWithName = Platform.async(\n    function (registrationName, callback) {\n        var cachedRegistrationId = this._storageManager.getRegistrationIdWithName(registrationName),\n            self = this;\n\n        if (_.isNullOrEmpty(cachedRegistrationId)) {\n            callback();\n            return;\n        }\n\n        this._pushHttpClient.unregister(cachedRegistrationId, function (error) {\n            if (!error) {\n                self._storageManager.deleteRegistrationWithName(registrationName);\n            }\n            callback(error);\n        });\n    });\n\nRegistrationManager.prototype.deleteAllRegistrations = Platform.async(\n    function (pushHandle, callback) {\n        var self = this,\n            currentHandle = this._storageManager.pushHandle,\n            deleteRegistrations = function (error, deleteCallback) {\n                if (error) {\n                    deleteCallback(error);\n                    return;\n                }\n\n                var registrationIds = self._storageManager.getRegistrationIds(),\n                    remaining = registrationIds.length,\n                    errors = [];\n\n                if (remaining === 0) {\n                    self._storageManager.deleteAllRegistrations();\n                    deleteCallback();\n                    return;\n                }\n\n                registrationIds.map(function (registrationId) {\n                    self._pushHttpClient.unregister(registrationId, function (error) {\n                        remaining--;\n\n                        if (error) {\n                            errors.push(error);\n                        }\n\n                        if (remaining <= 0) {\n                            if (errors.length === 0) {\n                                self._storageManager.deleteAllRegistrations();\n                                deleteCallback();\n                            } else {\n                                deleteCallback(_.createError('Failed to delete registrations for ' + pushHandle));\n                            }\n                        }                \n                    });\n                });\n            };\n\n        Validate.notNull(pushHandle, 'pushHandle');\n\n        // Try to refresh with the local storage copy first, then if different use the requested one\n        this._refreshRegistrations(currentHandle || pushHandle, function (error) {\n            if (_.isNullOrEmpty(currentHandle) || pushHandle === currentHandle) {\n                deleteRegistrations(error, callback);\n            } else {\n                // Delete the current handle's registrations\n                deleteRegistrations(error, function (error) {\n                    // Now delete the current handle's registrations as well\n                    // This requires the deleteAllRegistrations() call to clear the cached handle\n                    self._refreshRegistrations(pushHandle, function (error) {\n                        deleteRegistrations(error, callback);\n                    });\n                });\n            }\n        });\n    });\n\n\nRegistrationManager.prototype.listRegistrations = Platform.async(\n    function (pushHandle, callback) {\n        /// <summary>\n        /// Retrives a list of all registrations from the server\n        /// </summary>\n\n        Validate.notNullOrEmpty(pushHandle);\n\n        this._pushHttpClient.listRegistrations(pushHandle, this._platform, callback);\n    });\n\nRegistrationManager.prototype._refreshRegistrations = function (pushHandle, callback) {\n    /// <summary>\n    /// Reloads all registrations for the pushHandle passed in\n    /// </summary>\n\n    var self = this;\n\n    Validate.notNull(pushHandle, 'pushHandle');\n    Validate.notNull(callback, 'callback');\n\n    this._pushHttpClient.listRegistrations(pushHandle, this._platform, function (error, registrations) {\n        if (!error) {\n            self._storageManager.updateAllRegistrations(registrations, pushHandle);\n        }\n\n        callback(error);\n    });\n};\n\n"
  },
  {
    "path": "sdk/Javascript/src/Require.js",
    "content": "    /// <field name=\"$__modules__\">\n    /// Map module names to either their cached exports or a function which\n    /// will define the module's exports when invoked.\n    /// </field>\n    var $__modules__ = { };\n    \n    function require(name) {\n        /// <summary>\n        /// Require a module's exports.\n        /// </summary>\n        /// <param name=\"name\" type=\"String\">\n        /// The name of the module.  Note that we don't support full CommonJS\n        /// Module specification names here - we only allow the name of the\n        /// module's file without any extension.\n        /// </param>\n        /// <returns type=\"Object\">\n        /// The exports provided by the module.\n        /// </returns>\n\n        if (name && name.length > 2 && name[0] == '.' && name[1] == '/') {\n            name = name.slice(2);\n        }\n\n        var existing = $__modules__[name];\n        if (typeof existing == 'function') {\n            var exports = { };\n            $__modules__[name] = exports;\n            existing(exports);\n            return exports;\n        } else if (typeof existing == 'object') {\n            return existing;\n        } else {\n            throw 'Unknown module ' + name;\n        }\n    }"
  },
  {
    "path": "sdk/Javascript/src/Strings/en-US/Resources.resjson",
    "content": "﻿{\n    \"Validate_NotNullError\"                                 : \"{0} cannot be null.\",\n    \"Validate_NotNullOrEmptyError\"                          : \"{0} cannot be null or empty.\",\n    \"Validate_InvalidId\"                                    : \"{0} is not valid.\",\n    \"Validate_TypeCheckError\"                               : \"{0} is expected to be a value of type {1}, not {2}.\",\n    \"Validate_LengthUnexpected\"                             : \"{0} is expected to have length {1}, not {2}.\",\n    \"Validate_InvalidUserParameter\"                         : \"{0} contains an invalid user-defined query string parameter: {1}. User-defined query string parameters must not begin with a '$'.\",\n    \"Extensions_DefaultErrorMessage\"                        : \"Unexpected failure.\",\n    \"Extensions_ConnectionFailureMessage\"                   : \"Unexpected connection failure.\",\n    \"MobileServiceTable_ReadMismatchedQueryTables\"          : \"Cannot get the results of a query for table '{1}' via table '{0}'.\",\n    \"MobileServiceTable_InsertIdAlreadySet\"                 : \"Cannot insert if the {0} member is already set.\",\n    \"MobileServiceLogin_AuthenticationProviderNotSupported\" : \"Unsupported authentication provider name. Please specify one of {0}.\",\n    \"MobileServiceLogin_LoginErrorResponse\"                 : \"Cannot start a login operation because login is already in progress.\",\n    \"MobileServiceLogin_InvalidResponseFormat\"              : \"Invalid format of the authentication response.\",\n    \"MobileServiceLogin_InvalidProvider\"                    : \"The first parameter must be the name of the autentication provider or a Microsoft Account authentication token.\",\n    \"MobileServiceTable_NotSingleObject\"                    : \"Could not get object from response {0}.\",\n    \"Push_ConflictWithReservedName\"                         : \"Template name conflicts with reserved name '{0}'.\",\n    \"Push_InvalidTemplateName\"                              : \"Template name can't contain ';' or ':'.\",\n    \"Push_NotSupportedXMLFormatAsBodyTemplateWin8\"          : \"The bodyTemplate is not in accepted XML format. The first node of the bodyTemplate should be Badge\\/Tile\\/Toast, except for the wns\\/raw template, which need to be a valid XML.\",\n    \"Push_BodyTemplateMustBeXml\"                            : \"Valid XML is required for any template without a raw header.\",\n    \"Push_TagNoCommas\"                                      : \"Tags must not contain ','.\"\n}"
  },
  {
    "path": "sdk/Javascript/src/Transports/DirectAjaxTransport.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n// This transport is for modern browsers - it uses XMLHttpRequest with Cross-Origin Resource Sharing (CORS)\n\nexports.name = \"DirectAjaxTransport\";\n\nexports.supportsCurrentRuntime = function () {\n    /// <summary>\n    /// Determines whether or not this transport is usable in the current runtime.\n    /// </summary>\n\n    // Feature-detect support for CORS (for IE, it's in version 10+)\n    return (typeof global.XMLHttpRequest !== \"undefined\") &&\n           ('withCredentials' in new global.XMLHttpRequest());\n};\n\nexports.performRequest = function (request, callback) {\n    /// <summary>\n    /// Make a web request.\n    /// </summary>\n    /// <param name=\"request\" type=\"Object\">\n    /// Object describing the request (in the WinJS.xhr format).\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\">\n    /// The callback to execute when the request completes.\n    /// </param>\n\n    var headers = request.headers || {},\n        url = request.url.replace(/#.*$/, \"\"), // Strip hash part of URL for consistency across browsers\n        httpMethod = request.type ? request.type.toUpperCase() : \"GET\",\n        xhr = new global.XMLHttpRequest();\n\n    xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n            callback(null, xhr);\n        }\n    };\n\n    xhr.open(httpMethod, url);\n\n    for (var key in headers) {\n        if (request.headers.hasOwnProperty(key)) {\n            xhr.setRequestHeader(key, request.headers[key]);\n        }\n    }\n\n    xhr.send(request.data);\n};"
  },
  {
    "path": "sdk/Javascript/src/Transports/IframeTransport.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n// This transport is for midlevel browsers (IE8-9) that don't support CORS but do support postMessage.\n// It creates an invisible <iframe> that loads a special bridge.html page from the runtime domain.\n// To issue a request, it uses postMessage to pass the request into the <iframe>, which in turn makes\n// a same-domain Ajax request to the runtime. To associate postMessage replies with the original\n// request, we track an array of promises that eventually time out if not resolved (see PostMessageExchange).\n\nvar Promises = require('Promises'),\n    PostMessageExchange = require('PostMessageExchange'),\n    loadBridgeFramePromises = [], // One per target proto/host/port triplet\n    messageExchange = PostMessageExchange.instance;\n\nexports.name = \"IframeTransport\";\n\nexports.supportsCurrentRuntime = function () {\n    /// <summary>\n    /// Determines whether or not this transport is usable in the current runtime.\n    /// </summary>\n\n    return typeof global.postMessage !== \"undefined\";\n};\n\nexports.performRequest = function (request, callback) {\n    /// <summary>\n    /// Make a web request.\n    /// </summary>\n    /// <param name=\"request\" type=\"Object\">\n    /// Object describing the request (in the WinJS.xhr format).\n    /// </param>\n    /// <param name=\"callback\" type=\"Function\">\n    /// The callback to execute when the request completes.\n    /// </param>\n\n    var originRoot = PostMessageExchange.getOriginRoot(request.url);\n    whenBridgeLoaded(originRoot, function (bridgeFrame) {\n        var message = {\n            type: request.type,\n            url: request.url,\n            headers: request.headers,\n            data: request.data\n        };\n        messageExchange.request(bridgeFrame.contentWindow, message, originRoot).then(function (reply) {\n            fixupAjax(reply);\n            callback(null, reply);\n        }, function (error) {\n            callback(error, null);\n        });\n    });\n};\n\nfunction fixupAjax(xhr) {\n    if (xhr) {\n        // IE sometimes converts status 204 into 1223\n        // http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request\n        if (xhr.status === 1223) {\n            xhr.status = 204;\n        }\n    }\n}\n\nfunction whenBridgeLoaded(originRoot, callback) {\n    /// <summary>\n    /// Performs the callback once the bridge iframe has finished loading.\n    /// Lazily creates the bridge iframe if necessary. Note that each proto/host/port\n    /// triplet (i.e., same-domain origin) needs a separate bridge.\n    /// </summary>\n\n    var cacheEntry = loadBridgeFramePromises[originRoot];\n\n    if (!cacheEntry) {\n        cacheEntry = loadBridgeFramePromises[originRoot] = new Promises.Promise(function (complete, error) {\n            var bridgeFrame = document.createElement(\"iframe\"),\n                callerOrigin = PostMessageExchange.getOriginRoot(window.location.href),\n                handleBridgeLoaded = function() {\n                    complete(bridgeFrame);\n                };\n            \n            if (bridgeFrame.addEventListener) {\n                bridgeFrame.addEventListener(\"load\", handleBridgeLoaded, false);\n            } else {\n                // For IE8\n                bridgeFrame.attachEvent(\"onload\", handleBridgeLoaded);\n            }\n\n            bridgeFrame.src = originRoot + \"/crossdomain/bridge?origin=\" + encodeURIComponent(callerOrigin);\n            \n            // Try to keep it invisible, even if someone does $(\"iframe\").show()\n            bridgeFrame.setAttribute(\"width\", 0);\n            bridgeFrame.setAttribute(\"height\", 0);\n            bridgeFrame.style.display = \"none\";\n\n            global.document.body.appendChild(bridgeFrame);\n        });\n    }\n\n    cacheEntry.then(callback);\n}\n\n"
  },
  {
    "path": "sdk/Javascript/src/Utilities/Extensions.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n// Declare JSHint globals\n/*global XMLHttpRequest:false */\n\nvar Validate = require('Validate');\nvar Platform = require('Platform');\nvar _ = exports;\n\nexports.isNull = function (value) {\n    /// <summary>\n    /// Gets a value indicating whether the provided value is null (or\n    /// undefined).\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\" mayBeNull=\"true\">\n    /// The value to check.\n    /// </param>\n    /// <returns type=\"Boolean\">\n    /// A value indicating whether the provided value is null (or undefined).\n    /// </returns>\n    \n    return value === null || value === undefined;\n};\n\nexports.isNullOrZero = function (value) {\n    /// <summary>\n    /// Gets a value indicating whether the provided value is null (or\n    /// undefined) or zero / empty string\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\" mayBeNull=\"true\">\n    /// The value to check.\n    /// </param>\n    /// <returns type=\"Boolean\">\n    /// A value indicating whether the provided value is null (or undefined) or zero or empty string.\n    /// </returns>\n\n    return value === null || value === undefined || value === 0 || value === '';\n};\n\nexports.isNullOrEmpty = function (value) {\n    /// <summary>\n    /// Gets a value indicating whether the provided value is null (or\n    /// undefined) or empty.\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\" mayBeNull=\"true\">\n    /// The value to check.\n    /// </param>\n    /// <returns type=\"Boolean\">\n    /// A value inHdicating whether the provided value is null (or undefined).\n    /// </returns>\n\n    return _.isNull(value) || value.length === 0;\n};\n\nexports.format = function (message) {\n    /// <summary>\n    /// Format a string by replacing all of its numbered arguments with\n    /// parameters to the method. Arguments are of the form {0}, {1}, ..., like\n    /// in .NET.\n    /// </summary>\n    /// <param name=\"message\" type=\"string\" mayBeNull=\"false\">\n    /// The format string for the message.\n    /// </param>\n    /// <param name=\"arguments\" type=\"array\" optional=\"true\">\n    /// A variable number of arguments that can be used to format the message.\n    /// </param>\n    /// <returns type=\"string\">The formatted string.</returns>\n\n    Validate.isString(message, 'message');\n\n    // Note: There are several flaws in this implementation that we are\n    // ignoring for simplicity as it's only used internally.  Examples that\n    // could be handled better include:\n    //    format('{0} {1}', 'arg') => 'arg {1}'\n    //    format('{0} {1}', '{1}', 'abc') => 'abc abc'\n    //    format('{0}', '{0}') => <stops responding>\n\n    if (!_.isNullOrEmpty(message) && arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            var pattern = '{' + (i - 1) + '}';\n            while (message.indexOf(pattern) !== -1) {\n                message = message.replace(pattern, arguments[i]);\n            }\n        }\n    }\n\n    return message;\n};\n\nexports.has = function (value, key) {\n    /// <summary>\n    /// Determine if an object defines a given property.\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\">The object to check.</param>\n    /// <param name=\"key\" type=\"String\">\n    /// The name of the property to check for.\n    /// </param>\n    /// <returns type=\"Boolean\">\n    /// A value indicating whether the object defines the property.\n    /// </returns>\n\n    Validate.notNull(key, 'key');\n    Validate.isString(key, 'key');\n\n    return !_.isNull(value) && value.hasOwnProperty(key);\n};\n\nexports.hasProperty = function (object, properties) {\n    /// <summary>\n    /// Determines if an object has any of the passed in properties\n    /// </summary>\n    /// <returns type=\"boolean\">True if it contains any one of the properties\n    /// </returns>\n    for (var i = 0; i < properties.length; i++) {\n        if (_.has(object, properties[i])) {\n            return true;\n        }\n    }\n    return false;\n};\n\nexports.extend = function extend(target, members) {\n    /// <summary>\n    /// Extends the target with the members of the members object.\n    /// </summary>\n    /// <param name=\"target\" type=\"Object\">The target object to extend.</param>\n    /// <param name=\"members\" type=\"Object\">The members object to add to the target.</param>\n    /// <returns type=\"Object\">The target object extended with the members.\n    /// </returns>\n    for (var member in members) {\n        if (members.hasOwnProperty(member)) {\n            target[member] = members[member];\n        }\n    }\n    return target;\n};\n\nexports.isObject = function (value) {\n    /// <summary>\n    /// Determine if a value is an object.\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\">The value to check.</param>\n    /// <returns type=\"boolean\">\n    /// True if the value is an object (or null), false othwerise.\n    /// </returns>\n\n    return _.isNull(value) || (typeof value === 'object' && !_.isDate(value));\n};\n\nexports.isValidId = function (value) {\n    /// <summary>\n    /// Determine if a value is an acceptable id for use by the mobile service\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\">The value to check.</param>\n    /// <returns type=\"boolean\">\n    /// True if the value is a string or number, meeting all criteria, or false othwerise.\n    /// </returns>\n    if (_.isNullOrZero(value)) {\n        return false;\n    }\n\n    if (_.isString(value)) {\n        // Strings must contain at least one non whitespace character\n        if (value.length === 0 || value.length > 255 || value.trim().length === 0) {\n            return false;\n        }\n\n        var ex = /[+\"\\/?`\\\\]|[\\u0000-\\u001F]|[\\u007F-\\u009F]|^\\.{1,2}$/;\n        if (value.match(ex) !== null) {\n            return false;\n        }\n\n        return true;\n\n    } else if (_.isNumber(value)) {\n        return value > 0;\n    }\n\n    return false;\n};\n\nexports.isString = function (value) {\n    /// <summary>\n    /// Determine if a value is a string.\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\">The value to check.</param>\n    /// <returns type=\"boolean\">\n    /// True if the value is a string (or null), false othwerise.\n    /// </returns>\n\n    return _.isNull(value) || (typeof value === 'string');\n};\n\nexports.isNumber = function (value) {\n    /// <summary>\n    /// Determine if a value is a number.\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\">The value to check.</param>\n    /// <returns type=\"boolean\">\n    /// True if the value is a number, false othwerise.\n    /// </returns>\n\n    return !_.isNull(value) && (typeof value === 'number');\n};\n\nexports.isBool = function (value) {\n    /// <summary>\n    /// Determine if a value is a boolean.\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\">The value to check.</param>\n    /// <returns type=\"boolean\">\n    /// True if the value is a boolean, false othwerise.\n    /// </returns>\n    return !_.isNull(value) && (typeof value == 'boolean');\n};\n\nfunction classOf(value) {\n    return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();\n}\n\nexports.isDate = function (value) {\n    /// <summary>\n    /// Determine if a value is a date.\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\">The value to check.</param>\n    /// <returns type=\"boolean\">\n    /// True if the value is a date, false othwerise.\n    /// </returns>\n    return !_.isNull(value) && (classOf(value) == 'date');\n};\n\nexports.toJson = function (value) {\n    /// <summary>\n    /// Convert an object into JSON format.\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\">The value to convert.</param>\n    /// <returns type=\"String\">The value as JSON.</returns>\n\n    return Platform.toJson(value);\n};\n\nexports.fromJson = function (value) {\n    /// <summary>\n    /// Convert an object from JSON format.\n    /// </summary>\n    /// <param name=\"value\" type=\"String\">The value to convert.</param>\n    /// <returns type=\"Object\">The value as an object.</returns>\n\n    var jsonValue = null;\n    if (!_.isNullOrEmpty(value)) {\n        // We're wrapping this so we can hook the process and perform custom JSON\n        // conversions\n        jsonValue = JSON.parse(\n            value,\n            function (k, v) {\n                // Try to convert the value as a Date\n                if (_.isString(v) && !_.isNullOrEmpty(v)) {\n                    var date = exports.tryParseIsoDateString(v);\n                    if (!_.isNull(date)) {\n                        return date;\n                    }\n                }\n\n                // TODO: Convert geolocations once they're supported\n                // TODO: Expose the ability for developers to convert custom types\n\n                // Return the original value if we couldn't do anything with it\n                return v;\n            });\n    }\n\n    return jsonValue;\n};\n\nexports.createUniqueInstallationId = function () {\n    /// <summary>\n    /// Create a unique identifier that can be used for the installation of\n    /// the current application.\n    /// </summary>\n    /// <returns type=\"String\">Unique identifier.</returns>\n\n    var pad4 = function (str) { return \"0000\".substring(str.length) + str; };\n    var hex4 = function () { return pad4(Math.floor(Math.random() * 0x10000 /* 65536 */).toString(16)); };\n\n    return (hex4() + hex4() + \"-\" + hex4() + \"-\" + hex4() + \"-\" + hex4() + \"-\" + hex4() + hex4() + hex4());\n};\n\nexports.mapProperties = function (instance, action) {\n    /// <summary>\n    /// Map a function over the key/value pairs in an instance.\n    /// </summary>\n    /// <param name=\"instance\" type=\"Object\">\n    /// The instance to map over.\n    /// </param>\n    /// <param name=\"action\" type=\"function (key, value)\">\n    /// The action to map over the key/value pairs.\n    /// </param>\n    /// <returns elementType=\"object\">Mapped results.</returns>\n\n    var results = [];\n    if (!_.isNull(instance)) {\n        var key = null;\n        for (key in instance) {\n            results.push(action(key, instance[key]));\n        }\n    }\n    return results;\n};\n\nexports.pad = function (value, length, ch) {\n    /// <summary>\n    /// Pad the a value with a given character until it reaches the desired\n    /// length.\n    /// </summary>\n    /// <param name=\"value\" type=\"Object\">The value to pad.</param>\n    /// <param name=\"length\" type=\"Number\">The desired length.</param>\n    /// <param name=\"ch\" type=\"String\">The character to pad with.</param>\n    /// <returns type=\"String\">The padded string.</returns>\n\n    Validate.notNull(value, 'value');\n    Validate.isInteger(length, 'length');\n    Validate.isString(ch, 'ch');\n    Validate.notNullOrEmpty(ch, 'ch');\n    Validate.length(ch, 1, 'ch');\n\n    var text = value.toString();\n    while (text.length < length) {\n        text = ch + text;\n    }\n    return text;\n};\n\nexports.trimEnd = function (text, ch) {\n    /// <summary>\n    /// Trim all instance of a given characher from the end of a string.\n    /// </summary>\n    /// <param name=\"text\" type=\"String\" mayBeNull=\"false\">\n    /// The string to trim.\n    /// <param name=\"ch\" type=\"String\" mayBeNull=\"false\">\n    /// The character to trim.\n    /// </param>\n    /// <returns type=\"String\">The trimmed string.</returns>\n\n    Validate.isString(text, 'text');\n    Validate.notNull(text, 'text');\n    Validate.isString(ch, 'ch');\n    Validate.notNullOrEmpty('ch', 'ch');\n    Validate.length(ch, 1, 'ch');\n\n    var end = text.length - 1;\n    while (end >= 0 && text[end] === ch) {\n        end--;\n    }\n\n    return end >= 0 ?\n        text.substr(0, end + 1) :\n        '';\n};\n\nexports.trimStart = function (text, ch) {\n    /// <summary>\n    /// Trim all instance of a given characher from the start of a string.\n    /// </summary>\n    /// <param name=\"text\" type=\"String\" mayBeNull=\"false\">\n    /// The string to trim.\n    /// </param>\n    /// <param name=\"ch\" type=\"String\" mayBeNull=\"false\">\n    /// The character to trim.\n    /// </param>\n    /// <returns type=\"String\">The trimmed string.</returns>\n\n    Validate.isString(text, 'text');\n    Validate.notNull(text, 'text');\n    Validate.isString(ch, 'ch');\n    Validate.notNullOrEmpty(ch, 'ch');\n    Validate.length(ch, 1, 'ch');\n\n    var start = 0;\n    while (start < text.length && text[start] === ch) {\n        start++;\n    }\n\n    return start < text.length ?\n        text.substr(start, text.length - start) :\n        '';\n};\n\nexports.compareCaseInsensitive = function (first, second) {\n    /// <summary>\n    /// Compare two strings for equality while igorning case.\n    /// </summary>\n    /// <param name=\"first\" type=\"String\">First value.</param>\n    /// <param name=\"second\" type=\"String\">Second value.</param>\n    /// <returns type=\"Boolean\">Whether the strings are the same.</returns>\n\n    // NOTE: We prefer uppercase on Windows for historical reasons where it was\n    // possible to have alphabets where several uppercase characters mapped to\n    // the same lowercase character.\n\n    if (_.isString(first) && !_.isNullOrEmpty(first)) {\n        first = first.toUpperCase();\n    }\n\n    if (_.isString(first) && !_.isNullOrEmpty(second)) {\n        second = second.toUpperCase();\n    }\n\n    return first === second;\n};\n\n/// <field name=\"url\" type=\"Object\">\n/// Path specific utilities for working with URIs.\n/// </field>\nexports.url = {\n    /// <field name=\"separator\" type=\"String\">\n    /// The path separator character used for combining path segments.\n    /// </field>\n    separator: '/',\n\n    combinePathSegments: function () {\n        /// <summary>\n        /// Combine several segments into a path.\n        /// </summary>\n        /// <param parameterArray=\"true\" elementType=\"String\">\n        /// The segments of the path that should be combined.\n        /// </param>\n        /// <returns type=\"String\">The combined path.</returns>\n\n        // Normalize the segements\n        var segments = [];\n        var i = 0;\n        Validate.notNullOrEmpty(arguments, 'arguments');\n        for (i = 0; i < arguments.length; i++) {\n            var segment = arguments[i];\n            Validate.isString(segment, _.format('argument[{0}]', i));\n\n            if (i !== 0) {\n                segment = _.trimStart(segment || '', _.url.separator);\n            }\n            if (i < arguments.length - 1) {\n                segment = _.trimEnd(segment || '', _.url.separator);\n            }\n\n            segments.push(segment);\n        }\n\n        // Combine the segments\n        return segments.reduce(\n            function (a, b) { return a + _.url.separator + b; });\n    },\n\n    getQueryString: function (parameters) {\n        /// <summary>\n        /// Converts an Object instance into a query string\n        /// </summary>\n        /// <param name=\"parameters\" type=\"Object\">The parameters from which to create a query string.</param>\n        /// <returns type=\"String\">A query string</returns>\n        \n        Validate.notNull(parameters, 'parameters');\n        Validate.isObject(parameters, 'parameters');\n\n        var pairs = [];\n        for (var parameter in parameters) {\n            var value = parameters[parameter];\n            if (exports.isObject(value)) {\n                value = exports.toJson(value);\n            }\n            pairs.push(encodeURIComponent(parameter) + \"=\" + encodeURIComponent(value));\n        }\n\n        return pairs.join(\"&\");\n    },\n\n    combinePathAndQuery: function (path, queryString) {\n        /// <summary>\n        /// Concatenates the URI query string to the URI path.\n        /// </summary>\n        /// <param name=\"path\" type=\"String>The URI path</param>\n        /// <param name=\"queryString\" type=\"String>The query string.</param>\n        /// <returns type=\"String>The concatenated URI path and query string.</returns>\n        Validate.notNullOrEmpty(path, 'path');\n        Validate.isString(path, 'path');\n        if (_.isNullOrEmpty(queryString)) {\n            return path;\n        }\n        Validate.isString(queryString, 'queryString');\n\n        if (path.indexOf('?') >= 0) {\n            return path + '&' + exports.trimStart(queryString, '?');\n        } else {\n            return path + '?' + exports.trimStart(queryString, '?');\n        }\n    },\n\n    isAbsoluteUrl: function (url) {\n        /// <summary>\n        /// Currently just a simple check if the url begins with http:// or https:/\n        /// </summary>\n        if (_.isNullOrEmpty(url)) {\n            return false;\n        }\n\n        var start = url.substring(0, 7).toLowerCase();\n        return (start  == \"http://\" || start == \"https:/\");\n    }\n};\n\nexports.tryParseIsoDateString = function (text) {\n    /// <summary>\n    /// Try to parse an ISO date string.\n    /// </summary>\n    /// <param name=\"text\" type=\"String\">The text to parse.</param>\n    /// <returns type=\"Date\">The parsed Date or null.</returns>\n\n    return Platform.tryParseIsoDateString(text);\n};\n\nexports.createError = function (exceptionOrMessage, request) {\n    /// <summary>\n    /// Wrap an error thrown as an exception.\n    /// </summary>\n    /// <param name=\"exceptionOrMessage\">\n    /// The exception or message to throw.\n    /// </param>\n    /// <param name=\"request\">\n    /// The failing request.\n    /// </param>\n    /// <returns>An object with error details</returns>\n\n    // Create an error object to return\n    var error = { message: Platform.getResourceString(\"Extensions_DefaultErrorMessage\") };\n    error.toString = function () {\n        return error.message;\n    };\n\n    if (request) {\n        error.request = request;\n        if (request.status === 0) {\n            // Provide a more helpful message for connection failures\n            error.message = Platform.getResourceString(\"Extensions_ConnectionFailureMessage\");\n        } else {\n            // Try to pull out an error message from the response before\n            // defaulting to the status\n            var isText = false;\n            if (request.getResponseHeader) {\n                var contentType = request.getResponseHeader('Content-Type');\n                if (contentType) {\n                    isText = contentType.toLowerCase().indexOf(\"text\") >= 0;\n                }\n            }\n\n            try {\n                var response = JSON.parse(request.responseText);\n                if (typeof response === 'string') {\n                    error.message = response;\n                } else {\n                    error.message =\n                        response.error ||\n                        response.description ||\n                        request.statusText ||\n                        Platform.getResourceString(\"Extensions_DefaultErrorMessage\");\n                }\n            } catch (ex) {\n                if (isText) {\n                    error.message = request.responseText;\n                } else {\n                    error.message =\n                        request.statusText ||\n                        Platform.getResourceString(\"Extensions_DefaultErrorMessage\");\n                }\n            }\n        }\n    } else if (_.isString(exceptionOrMessage) && !_.isNullOrEmpty(exceptionOrMessage)) {\n        // If it's a string, just use that as the message\n        error.message = exceptionOrMessage;\n    } else if (!_.isNull(exceptionOrMessage)) {\n        // Otherwise we'll use the object as an exception and leave the\n        // default error message\n        error.exception = exceptionOrMessage;\n    }\n\n    return error;\n};"
  },
  {
    "path": "sdk/Javascript/src/Utilities/PostMessageExchange.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n// window.postMessage does not have a concept of responses, so this class associates messages\n// with IDs so that we can identify which message a reply refers to.\n\nvar Promises = require('Promises'),\n    messageTimeoutDuration = 5 * 60 * 1000; // If no reply after 5 mins, surely there will be no reply\n\nfunction PostMessageExchange() {\n    var self = this;\n    self._lastMessageId = 0;\n    self._hasListener = false;\n    self._pendingMessages = {};\n}\n\nPostMessageExchange.prototype.request = function (targetWindow, messageData, origin) {\n    /// <summary>\n    /// Issues a request to the target window via postMessage\n    /// </summary>\n    /// <param name=\"targetWindow\" type=\"Object\">\n    /// The window object (on an actual window, or iframe) to send the request to\n    /// </param>\n    /// <param name=\"messageData\" type=\"Object\">\n    /// A JSON-serializable object to pass to the target\n    /// </param>\n    /// <param name=\"origin\" type=\"String\">\n    /// The expected origin (e.g., \"http://example.com:81\") of the recipient window.\n    /// If at runtime the origin does not match, the request will not be issued.\n    /// </param>\n    /// <returns type=\"Object\">\n    /// A promise that completes once the target window sends back a reply, with\n    /// value equal to that reply.\n    /// </returns>\n\n    var self = this,\n        messageId = ++self._lastMessageId,\n        envelope = { messageId: messageId, contents: messageData };\n\n    self._ensureHasListener();\n\n    return new Promises.Promise(function (complete, error) {\n        // Track callbacks and origin data so we can complete the promise only for valid replies\n        self._pendingMessages[messageId] = {\n            messageId: messageId,\n            complete: complete,\n            error: error,\n            targetWindow: targetWindow,\n            origin: origin\n        };\n\n        // Don't want to leak memory, so if there's no reply, forget about it eventually\n        self._pendingMessages[messageId].timeoutId = global.setTimeout(function () {\n            var pendingMessage = self._pendingMessages[messageId];\n            if (pendingMessage) {\n                delete self._pendingMessages[messageId];\n                pendingMessage.error({ status: 0, statusText: \"Timeout\", responseText: null });\n            }\n        }, messageTimeoutDuration);\n\n        targetWindow.postMessage(JSON.stringify(envelope), origin);\n    });\n};\n\nPostMessageExchange.prototype._ensureHasListener = function () {\n    if (this._hasListener) {\n        return;\n    }\n    this._hasListener = true;\n\n    var self = this,\n        boundHandleMessage = function () {\n            self._handleMessage.apply(self, arguments);\n        };\n\n    if (window.addEventListener) {\n        window.addEventListener('message', boundHandleMessage, false);\n    } else {\n        // For IE8\n        window.attachEvent('onmessage', boundHandleMessage);\n    }\n};\n\nPostMessageExchange.prototype._handleMessage = function (evt) {\n    var envelope = this._tryDeserializeMessage(evt.data),\n        messageId = envelope && envelope.messageId,\n        pendingMessage = messageId && this._pendingMessages[messageId],\n        isValidReply = pendingMessage && pendingMessage.targetWindow === evt.source &&\n                       pendingMessage.origin === getOriginRoot(evt.origin);\n    \n    if (isValidReply) {\n        global.clearTimeout(pendingMessage.timeoutId); // No point holding this in memory until the timeout expires\n        delete this._pendingMessages[messageId];\n        pendingMessage.complete(envelope.contents);\n    }\n};\n\nPostMessageExchange.prototype._tryDeserializeMessage = function (messageString) {\n    if (!messageString || typeof messageString !== 'string') {\n        return null;\n    }\n\n    try {\n        return JSON.parse(messageString);\n    } catch (ex) {\n        // It's not JSON, so it's not a message for us. Ignore it.\n        return null;\n    }\n};\n\nfunction getOriginRoot(url) {\n    // Returns the proto/host/port part of a URL, i.e., the part that defines the access boundary\n    // for same-origin policy. This is of the form \"protocol://host:port\", where \":port\" is omitted\n    // if it is the default port for that protocol.\n    var parsedUrl = parseUrl(url),\n        portString = parsedUrl.port ? parsedUrl.port.toString() : null,\n        isDefaultPort = (parsedUrl.protocol === 'http:' && portString === '80') ||\n                        (parsedUrl.protocol === 'https:' && portString === '443'),\n        portSuffix = (portString && !isDefaultPort) ? ':' + portString : '';\n    return parsedUrl.protocol + '//' + parsedUrl.hostname + portSuffix;\n}\n\nfunction parseUrl(url) {\n    // https://gist.github.com/2428561 - works on IE8+. Could switch to a more manual, less magic\n    // parser in the future if we need to support IE < 8.\n    var elem = global.document.createElement('a');\n    elem.href = url;\n    return elem;\n}\n\nexports.instance = new PostMessageExchange();\nexports.getOriginRoot = getOriginRoot;"
  },
  {
    "path": "sdk/Javascript/src/Utilities/Promises.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n// In WinJS, we use WinJS.Promise.\n// There's no native equivalent for regular JavaScript in the browser, so we implement it here.\n// This implementation conforms to Promises/A+, making it compatible with WinJS.Promise.\n\n// Note: There is a standard Promises/A+ test suite, to which this implementation conforms.\n// See test\\Microsoft.Azure.Zumo.Web.Test\\promiseTests\n\n// Declare JSHint globals\n/*global setTimeout:false */\n\n(function (exports) {\n    \"use strict\";\n\n    var resolutionState = { success: {}, error: {} },\n        bind = function (func, target) { return function () { func.apply(target, arguments); }; }, // Older browsers lack Function.prototype.bind\n        isGenericPromise = function (obj) { return obj && (typeof obj.then === \"function\"); };\n\n    function Promise(init) {\n        this._callbackFrames = [];\n        this._resolutionState = null;\n        this._resolutionValueOrError = null;\n        this._resolveSuccess = bind(this._resolveSuccess, this);\n        this._resolveError = bind(this._resolveError, this);\n\n        if (init) {\n            init(this._resolveSuccess, this._resolveError);\n        }\n    }\n\n    Promise.prototype.then = function (success, error) {\n        var callbackFrame = { success: success, error: error, chainedPromise: new Promise() };\n\n        // If this promise is already resolved, invoke callbacks immediately. Otherwise queue them.\n        if (this._resolutionState) {\n            this._invokeCallback(callbackFrame);\n        } else {\n            this._callbackFrames.push(callbackFrame);\n        }\n\n        return callbackFrame.chainedPromise;\n    };\n\n    Promise.prototype._resolveSuccess = function (val) { this._resolve(resolutionState.success, val); };\n    Promise.prototype._resolveError = function (err) { this._resolve(resolutionState.error, err); };\n\n    Promise.prototype._resolve = function (state, valueOrError) {\n        if (this._resolutionState) {\n            // Can't affect resolution state when already resolved. We silently ignore the request, without throwing an error,\n            // to prevent concurrent resolvers from affecting each other during race conditions.\n            return;\n        }\n\n        this._resolutionState = state;\n        this._resolutionValueOrError = valueOrError;\n\n        // Notify all queued callbacks\n        for (var i = 0, j = this._callbackFrames.length; i < j; i++) {\n            this._invokeCallback(this._callbackFrames[i]);\n        }\n    };\n\n    Promise.prototype._invokeCallback = function (frame) {\n        var callbackToInvoke = this._resolutionState === resolutionState.success ? frame.success : frame.error;\n        if (typeof callbackToInvoke === \"function\") {\n            // Call the supplied callback either to transform the result (for success) or to handle the error (for error)\n            // The setTimeout ensures handlers are always invoked asynchronosly, even if the promise was already resolved,\n            // to avoid callers having to differentiate between sync/async cases\n            setTimeout(bind(function () {\n                var passthroughValue, passthroughState, callbackDidNotThrow = true;\n                try {\n                    passthroughValue = callbackToInvoke(this._resolutionValueOrError);\n                    passthroughState = resolutionState.success;\n                } catch (ex) {\n                    callbackDidNotThrow = false;\n                    passthroughValue = ex;\n                    passthroughState = resolutionState.error;\n                }\n\n                if (callbackDidNotThrow && isGenericPromise(passthroughValue)) {\n                    // By returning a futher promise from a callback, you can insert it into the chain. This is the basis for composition.\n                    // This rule is in the Promises/A+ spec, but not Promises/A.\n                    passthroughValue.then(frame.chainedPromise._resolveSuccess, frame.chainedPromise._resolveError);\n                } else {\n                    frame.chainedPromise._resolve(passthroughState, passthroughValue);\n                }\n            }, this), 1);\n        } else {\n            // No callback of the applicable type, so transparently pass existing state/value down the chain\n            frame.chainedPromise._resolve(this._resolutionState, this._resolutionValueOrError);\n        }\n    };\n\n    // -----------\n    // Everything from here on is extensions beyond the Promises/A+ spec intended to ease code\n    // sharing between WinJS and browser-based Mobile Services apps\n\n    Promise.prototype.done = function (success, error) {\n        this.then(success, error).then(null, function(err) {\n            // \"done\" throws any final errors as global uncaught exceptions. The setTimeout\n            // ensures the exception won't get caught in the Promises machinery or user code.\n            setTimeout(function () { throw new Error(err); }, 1);\n        });\n        return undefined; // You can't chain onto a .done()\n    };\n\n    // Note that we're not implementing any of the static WinJS.Promise.* functions because\n    // the Mobile Services client doesn't even expose any static \"Promise\" object that you\n    // could reference static functions on. Developers who want to use any of the WinJS-style\n    // static functions (any, join, theneach, ...) can use any Promises/A-compatible library\n    // such as when.js.\n    //\n    // Additionally, we don't implement .cancel() yet because Mobile Services operations don't\n    // support cancellation in WinJS yet either. This could be added to both WinJS and Web\n    // client libraries in the future.\n\n    exports.Promise = Promise;\n})(exports);"
  },
  {
    "path": "sdk/Javascript/src/Utilities/Validate.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\Generated\\Zumo.DevIntellisense.js\" />\n\nvar _ = require('Extensions');\nvar Platform = require('Platform');\n\nexports.notNull = function (value, name) {\n    /// <summary>\n    /// Ensure the value is not null (or undefined).\n    /// </summary>\n    /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n    /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\">\n    /// Optional name of the value to throw.\n    /// </param>\n\n    if (_.isNull(value)) {\n        throw _.format(Platform.getResourceString(\"Validate_NotNullError\"), name || 'Value');\n    }\n};\n\nexports.notNullOrEmpty = function (value, name) {\n    /// <summary>\n    /// Ensure the value is not null, undefined, or empty.\n    /// </summary>\n    /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n    /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n    /// Optional name of the value to throw.\n    /// </param>\n\n    if (_.isNullOrEmpty(value)) {\n        throw _.format(Platform.getResourceString(\"Validate_NotNullOrEmptyError\"), name || 'Value');\n    }\n};\n\nexports.notNullOrZero = function (value, name) {\n    /// <summary>\n    /// Ensure the value is not null, undefined, zero, or empty.\n    /// </summary>\n    /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n    /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n    /// Optional name of the value to throw.\n    /// </param>\n\n    if (_.isNullOrZero(value)) {\n        throw _.format(Platform.getResourceString(\"Validate_NotNullOrEmptyError\"), name || 'Value');\n    }\n};\n\nexports.isValidId = function (value, name) {\n    /// <summary>\n    /// Ensure the value is a valid id for mobile services.\n    /// </summary>\n    /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n    /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n    /// Optional name of the value to throw.\n    /// </param>\n\n    if (!_.isValidId(value)) {\n        throw _.format(Platform.getResourceString(\"Validate_InvalidId\"), name || 'id');\n    }\n};\n\nexports.isDate = function (value, name) {\n    /// <summary>\n    /// Ensure the value is a date.\n    /// </summary>\n    /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n    /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n    /// Optional name of the value to throw.\n    /// </param>\n    \n    exports.notNull(value, name);    \n    if (!_.isDate(value)) {\n        throw _.format(\n            Platform.getResourceString(\"Validate_TypeCheckError\"),\n            name || 'Value',\n            'Date',\n            typeof value);\n    }\n};\n\nexports.isNumber = function (value, name) {\n    /// <summary>\n    /// Ensure the value is a number.\n    /// </summary>\n    /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n    /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n    /// Optional name of the value to throw.\n    /// </param>\n\n    exports.notNull(value, name);\n\n    if (!_.isNumber(value)) {\n        throw _.format(\n            Platform.getResourceString(\"Validate_TypeCheckError\"),\n            name || 'Value',\n            'Number',\n            typeof value);\n    }\n};\n\nexports.isValidParametersObject = function (value, name) {\n    /// <summary>\n    /// Ensure the Object instance of user-defined parameters is valid.\n    /// </summary>\n    /// <param name=\"value\">The parameters to check.</param>\n    /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n    /// Optional name of the value to throw.\n    /// </param>\n\n    exports.notNull(value, name);\n    exports.isObject(value, name);\n\n    for (var parameter in value) {\n        if (parameter.indexOf('$') === 0) {\n            throw _.format(\n                Platform.getResourceString(\"Validate_InvalidUserParameter\"),\n                name,\n                parameter);\n        }\n    }\n};\n\nexports.isInteger = function (value, name) {\n    /// <summary>\n    /// Ensure the value is an integer.\n    /// </summary>\n    /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n    /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n    /// Optional name of the value to throw.\n    /// </param>\n\n    exports.notNull(value, name);\n    exports.isNumber(value, name);\n\n    if (parseInt(value, 10) !== parseFloat(value)) {\n        throw _.format(\n            Platform.getResourceString(\"Validate_TypeCheckError\"),\n            name || 'Value',\n            'number',\n            typeof value);\n    }\n};\n\nexports.isString = function (value, name) {\n    /// <summary>\n    /// Ensure the value is a string.\n    /// </summary>\n    /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n    /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n    /// Optional name of the value to throw.\n    /// </param>\n\n    if (!_.isString(value)) {\n        throw _.format(\n            Platform.getResourceString(\"Validate_TypeCheckError\"),\n            name || 'Value',\n            'string',\n            typeof value);\n    }\n};\n\nexports.isObject = function (value, name) {\n    /// <summary>\n    /// Ensure the value is an Object.\n    /// </summary>\n    /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n    /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n    /// Optional name of the value to throw.\n    /// </param>\n\n    if (!_.isObject(value)) {\n        throw _.format(\n            Platform.getResourceString(\"Validate_TypeCheckError\"),\n            name || 'Value',\n            'object',\n            typeof value);\n    }\n};\n\nexports.isArray = function (value, name) {\n    /// <summary>\n    /// Ensure the value is an Array.\n    /// </summary>\n    /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n    /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n    /// Optional name of the value to throw.\n    /// </param>\n\n    if (!Array.isArray(value)) {\n        throw _.format(\n            Platform.getResourceString(\"Validate_TypeCheckError\"),\n            name || 'Value',\n            'array',\n            typeof value);\n    }\n};\n\nexports.length = function (value, length, name) {\n    /// <summary>\n    /// Ensure the value is of a given length.\n    /// </summary>\n    /// <param name=\"value\" type=\"String\">\n    /// The value to check.\n    /// </param>\n    /// <param name=\"length\" type=\"Number\" integer=\"true\">\n    /// The desired length of the value.\n    /// </param>\n    /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n    /// Optional name of the value to throw.\n    /// </param>\n\n    exports.notNull(value, name);\n    exports.isInteger(length, 'length');\n\n    if (value.length !== length) {\n        throw _.format(\n            Platform.getResourceString(\"Validate_LengthUnexpected\"),\n            name || 'Value',\n            length,\n            value.length);\n    }\n};\n"
  },
  {
    "path": "sdk/Javascript/test/framework/ActionContinuation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// A continuation with actions that will be invoked when the operation\n    /// completes or errors.\n    /// </summary>\n    internal class ActionContinuation : IContinuation\n    {\n        /// <summary>\n        /// Gets the action to take if the continuation is invoked from a\n        /// successful operation.\n        /// </summary>\n        public Action OnSuccess { get; set; }\n\n        /// <summary>\n        /// Gets the action to take if the continuation is invoked from a\n        /// failing operation.\n        /// </summary>\n        public Action<string> OnError { get; set; }\n\n        /// <summary>\n        /// Invoke the continuation from a successful operation.\n        /// </summary>\n        void IContinuation.Success()\n        {\n            this.OnSuccess();\n        }\n\n        /// <summary>\n        /// Invoke the continuation from a failing operation.\n        /// </summary>\n        /// <param name=\"message\">The error message.</param>\n        void IContinuation.Error(string message)\n        {\n            this.OnError(message);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/Assert.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// Assertions that will throw InvalidOperationExceptions when their\n    /// conditions have not been met.\n    /// </summary>\n    public static class Assert\n    {\n        /// <summary>\n        /// Ignore any deltas due to quantization below this threshold.\n        /// </summary>\n        private const double QuantizationThreshold = 0.0001;\n\n        /// <summary>\n        /// Force a failure.\n        /// </summary>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void Fail(string message)\n        {\n            throw new InvalidOperationException(message);\n        }\n\n        /// <summary>\n        /// Assert that two values are equal.\n        /// </summary>\n        /// <param name=\"a\">The first value.</param>\n        /// <param name=\"b\">The second value.</param>\n        public static void AreEqual(object a, object b)\n        {\n            AreEqual(a, b, string.Format(\"Expected {0} equal to {1}.\", a, b));\n        }\n\n        /// <summary>\n        /// Assert that two values are equal.\n        /// </summary>\n        /// <param name=\"a\">The first value.</param>\n        /// <param name=\"b\">The second value.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void AreEqual(object a, object b, string message)\n        {\n            bool equal = object.Equals(a, b);\n            if (a is double && b is double)\n            {\n                equal = Math.Abs((double)a - (double)b) < QuantizationThreshold;\n            }\n            else if (a is float && b is float)\n            {\n                equal = Math.Abs((float)a - (float)b) < QuantizationThreshold;\n            }\n\n            if (!equal)\n            {\n                Fail(message ?? string.Format(\"Expected {0} equal to {1}.\", a, b));\n            }\n        }\n\n        /// <summary>\n        /// Assert that two values are the same.\n        /// </summary>\n        /// <param name=\"a\">The first value.</param>\n        /// <param name=\"b\">The second value.</param>\n        public static void AreSame(object a, object b)\n        {\n            AreSame(a, b, string.Format(\"Expected {0} the same as {1}.\", a, b));\n        }\n\n        /// <summary>\n        /// Assert that two values are the same.\n        /// </summary>\n        /// <param name=\"a\">The first value.</param>\n        /// <param name=\"b\">The second value.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void AreSame(object a, object b, string message)\n        {\n            if (!object.ReferenceEquals(a, b))\n            {\n                Fail(message ?? string.Format(\"Expected {0} the same as {1}.\", a, b));\n            }\n        }\n\n        /// <summary>\n        /// Assert that two values are not equal.\n        /// </summary>\n        /// <param name=\"a\">The first value.</param>\n        /// <param name=\"b\">The second value.</param>\n        public static void AreNotEqual(object a, object b)\n        {\n            AreNotEqual(a, b, string.Format(\"Expected {0} not equal to {1}.\", a, b));\n        }\n\n        /// <summary>\n        /// Assert that two values are not equal.\n        /// </summary>\n        /// <param name=\"a\">The first value.</param>\n        /// <param name=\"b\">The second value.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void AreNotEqual(object a, object b, string message)\n        {\n            if (object.Equals(a, b))\n            {\n                Fail(message);\n            }\n        }\n\n        /// <summary>\n        /// Assert that a condition is true.\n        /// </summary>\n        /// <param name=\"condition\">The condition to check.</param>\n        public static void IsTrue(bool condition)\n        {\n            IsTrue(condition, \"Expected condition to be true.\");\n        }\n\n        /// <summary>\n        /// Assert that a condition is true.\n        /// </summary>\n        /// <param name=\"condition\">The condition to check.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void IsTrue(bool condition, string message)\n        {\n            if (!condition)\n            {\n                Fail(message);\n            }\n        }\n\n        /// <summary>\n        /// Assert that a condition is false.\n        /// </summary>\n        /// <param name=\"condition\">The condition to check.</param>\n        public static void IsFalse(bool condition)\n        {\n            IsFalse(condition, \"Expected condition to be false.\");\n        }\n\n        /// <summary>\n        /// Assert that a condition is false.\n        /// </summary>\n        /// <param name=\"condition\">The condition to check.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void IsFalse(bool condition, string message)\n        {\n            if (condition)\n            {\n                Fail(message);\n            }\n        }\n\n        /// <summary>\n        /// Assert that a substring is present in the text.\n        /// </summary>\n        /// <param name=\"text\">The text to search.</param>\n        /// <param name=\"substring\">The substring to find.</param>\n        public static void Contains(string text, string substring)\n        {\n            Contains(\n                text,\n                substring,\n                string.Format(\n                    \"Expected to find substring \\\"{0}\\\" in \\\"{1}\\\".\",\n                    substring,\n                    text));\n        }\n\n        /// <summary>\n        /// Assert that a substring is present in the text.\n        /// </summary>\n        /// <param name=\"text\">The text to search.</param>\n        /// <param name=\"substring\">The substring to find.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void Contains(string text, string substring, string message)\n        {\n            if (text != null && substring != null && !text.Contains(substring))\n            {\n                Fail(message);\n            }\n        }\n\n        /// <summary>\n        /// Assert that a string starts with another.\n        /// </summary>\n        /// <param name=\"text\">The text to search.</param>\n        /// <param name=\"substring\">The substring to find.</param>\n        public static void StartsWith(string text, string substring)\n        {\n            StartsWith(\n                text,\n                substring,\n                string.Format(\n                    \"Expected string \\\"{1}\\\" to start with \\\"{0}\\\".\",\n                    substring,\n                    text));\n        }\n\n        /// <summary>\n        /// Assert that a string starts with another.\n        /// </summary>\n        /// <param name=\"text\">The text to search.</param>\n        /// <param name=\"substring\">The substring to find.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void StartsWith(string text, string substring, string message)\n        {\n            if (text != null && substring != null && !text.StartsWith(substring))\n            {\n                Fail(message);\n            }\n        }\n\n        /// <summary>\n        /// Assert that a string ends with another.\n        /// </summary>\n        /// <param name=\"text\">The text to search.</param>\n        /// <param name=\"substring\">The substring to find.</param>\n        public static void EndsWith(string text, string substring)\n        {\n            EndsWith(\n                text,\n                substring,\n                string.Format(\n                    \"Expected string \\\"{1}\\\" to start with \\\"{0}\\\".\",\n                    substring,\n                    text));\n        }\n\n        /// <summary>\n        /// Assert that a string ends with another.\n        /// </summary>\n        /// <param name=\"text\">The text to search.</param>\n        /// <param name=\"substring\">The substring to find.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void EndsWith(string text, string substring, string message)\n        {\n            if (text != null && substring != null && !text.EndsWith(substring))\n            {\n                Fail(message);\n            }\n        }\n\n        public static void IsNull(object value)\n        {\n            IsNull(value, string.Format(\"Expected null, not {0}\", value));\n        }\n\n        public static void IsNull(object value, string message)\n        {\n            if (value != null)\n            {\n                Fail(message);\n            }\n        }\n\n        public static void IsNotNull(object value)\n        {\n            IsNotNull(value, \"Expected a value, not null.\");\n        }\n\n        public static void IsNotNull(object value, string message)\n        {\n            if (value == null)\n            {\n                Fail(message);\n            }\n        }\n\n        public static void AreEquivalent(IEnumerable a, IEnumerable b)\n        {\n            AreEquivalent(a, b, \"Sequences do not contain the same values\");\n        }\n\n        public static void AreEquivalent(IEnumerable a, IEnumerable b, string message)\n        {\n            IEnumerable<object> first = a.OfType<object>();\n            IEnumerable<object> second = b.OfType<object>();\n            IEnumerable<object> intersection = first.Intersect(second);\n            Assert.AreEqual(first.Count(), intersection.Count(), message);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/FunctionalTestFilter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// An individual test method to be executed.\n    /// </summary>\n    internal class FunctionalTestFilter : TestFilter\n    {\n        /// <summary>\n        /// The custom key for the runtime url.\n        /// </summary>\n        private const string RuntimeUrlKey = \"MobileServiceRuntimeUrl\";\n\n        /// <summary>\n        /// The tag used to mark functional tests.\n        /// </summary>\n        private const string FunctionalTag = \"Functional\";\n\n        /// <summary>\n        /// The reason used to exclude functional tests.\n        /// </summary>\n        private const string ExcludedReason = \"No Mobile Service Runtime server provided for functional tests.\";\n\n        /// <summary>\n        /// Initializes a new instance of the FunctionalTestFilter class.\n        /// </summary>\n        /// <param name=\"settings\">The test settings.</param>\n        public FunctionalTestFilter(TestSettings settings)\n            : base(settings)\n        {\n        }\n\n        /// <summary>\n        /// Filter the tests according to whether functional tests are enabled.\n        /// </summary>\n        /// <param name=\"groups\">The groups to test.</param>\n        public override void Filter(IList<TestGroup> groups)\n        {\n            string runtimeUrl = null;\n            bool enableFunctionalTests = this.Settings.Custom.TryGetValue(RuntimeUrlKey, out runtimeUrl);\n            enableFunctionalTests &= !string.IsNullOrEmpty(runtimeUrl);\n\n            if (enableFunctionalTests)\n            {\n                this.Settings.TestRunStatusMessage += \" - Functional Test Server \" + runtimeUrl;\n            }\n            else\n            {\n                this.Settings.TestRunStatusMessage += \" - Excluding Functional Tests\";\n                Remove(groups, g => g.Tags.Contains(FunctionalTag));\n                foreach (TestGroup group in groups)\n                {\n                    Remove(group.Methods, m => m.Tags.Contains(FunctionalTag));\n                }\n                Remove(groups, g => g.Methods.Count == 0);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/IAsyncExecution.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// Represents an async operation that can be given a continuation to \n    /// invoke when the async operation has completed (either successfully or\n    /// with an error).\n    /// </summary>\n    public interface IAsyncExecution\n    {\n        /// <summary>\n        /// Start the async operation.\n        /// </summary>\n        /// <param name=\"continuation\">\n        /// Continuation that should be invoked when the async operation has\n        /// completed.\n        /// </param>\n        void Start(IContinuation continuation);\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/IContinuation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// Represents an action that can be continued.\n    /// </summary>\n    public interface IContinuation\n    {\n        /// <summary>\n        /// The operation invoking the continuation completed successfully so\n        /// the continuation can resume normally.\n        /// </summary>\n        void Success();\n\n        /// <summary>\n        /// The operating invoking the continuation failed, so the continuation\n        /// should handle the error.\n        /// </summary>\n        /// <param name=\"message\">The error message.</param>\n        void Error(string message);\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/ITestReporter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// Defines the interface used to report test results.\n    /// </summary>\n    /// <remarks>\n    /// This has been pulled into an interface since we'll need to have\n    /// separate implementations of the UI for WWA and XAML tests.\n    /// </remarks>\n    public interface ITestReporter\n    {\n        /// <summary>\n        /// The test run started.\n        /// </summary>\n        /// <param name=\"harness\">The test harness.</param>\n        void StartRun(TestHarness harness);\n        \n        /// <summary>\n        /// Update the test run progress.\n        /// </summary>\n        /// <param name=\"harness\">\n        /// The test harness (which contains Progress, Error, and Count\n        /// properties).\n        /// </param>\n        void Progress(TestHarness harness);\n\n        /// <summary>\n        /// The test run finished.\n        /// </summary>\n        /// <param name=\"harness\">\n        /// The test harness (which contains Error and Count properties).\n        /// </param>\n        void EndRun(TestHarness harness);\n        \n        /// <summary>\n        /// The test group started is about to start executing its tests.\n        /// </summary>\n        /// <param name=\"group\">The test group.</param>\n        void StartGroup(TestGroup group);\n\n        /// <summary>\n        /// The test group has finished executing its tests.\n        /// </summary>\n        /// <param name=\"group\">The test group.</param>\n        void EndGroup(TestGroup group);\n\n        /// <summary>\n        /// The test method is about to be executed.\n        /// </summary>\n        /// <param name=\"test\">The test method.</param>\n        void StartTest(TestMethod test);\n\n        /// <summary>\n        /// The test method has finished executing.\n        /// </summary>\n        /// <param name=\"test\">The test method.</param>\n        void EndTest(TestMethod test);\n\n        /// <summary>\n        /// A message has been logged.\n        /// </summary>\n        /// <param name=\"message\">The message.</param>\n        void Log(string message);\n\n        /// <summary>\n        /// An error has been raised.\n        /// </summary>\n        /// <param name=\"errorDetails\">Information about the error.</param>\n        void Error(string errorDetails);\n\n        /// <summary>\n        /// Update the test run status.\n        /// </summary>\n        /// <param name=\"status\">The status message.</param>\n        void Status(string status);\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/Microsoft.WindowsAzure.Mobile.WinJS.TestFramework.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <!-- Override Zumo.settings.targets framework version and output path-->\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <StyleCopEnabled>false</StyleCopEnabled>\n    <OutputPath>$(ZumoRootPath)bin\\$(Configuration)\\Windows 8\\Test\\</OutputPath>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{6445515D-9E58-4812-BAD6-BC81DAF1C0EE}</ProjectGuid>\n    <OutputType>winmdobj</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.Azure.Zumo.Win8.Test</RootNamespace>\n    <AssemblyName>Microsoft.Azure.Zumo.Windows.Test</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Signed|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DefineConstants>TRACE;NETFX_CORE;SIGNED</DefineConstants>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>..\\..\\tools\\signing\\35MSSharedLib1024.snk</AssemblyOriginatorKeyFile>\n    <DelaySign>true</DelaySign>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Signed|ARM'\">\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n    <DefineConstants>TRACE;NETFX_CORE;SIGNED</DefineConstants>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>..\\..\\tools\\signing\\35MSSharedLib1024.snk</AssemblyOriginatorKeyFile>\n    <DelaySign>true</DelaySign>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Signed|x64'\">\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n    <DefineConstants>TRACE;NETFX_CORE;SIGNED</DefineConstants>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>..\\..\\tools\\signing\\35MSSharedLib1024.snk</AssemblyOriginatorKeyFile>\n    <DelaySign>true</DelaySign>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Signed|x86'\">\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n    <DefineConstants>TRACE;NETFX_CORE;SIGNED</DefineConstants>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>..\\..\\tools\\signing\\35MSSharedLib1024.snk</AssemblyOriginatorKeyFile>\n    <DelaySign>true</DelaySign>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"ActionContinuation.cs\" />\n    <Compile Include=\"Assert.cs\" />\n    <Compile Include=\"RuntimeTestFilter.cs\" />\n    <Compile Include=\"FunctionalTestFilter.cs\" />\n    <Compile Include=\"IAsyncExecution.cs\" />\n    <Compile Include=\"IContinuation.cs\" />\n    <Compile Include=\"ITestReporter.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Tagging\\TagManager.cs\" />\n    <Compile Include=\"Tagging\\TagManager.ExpressionEvaluator.cs\" />\n    <Compile Include=\"Tagging\\TagManager.Tags.cs\" />\n    <Compile Include=\"Tagging\\TagTestFilter.cs\" />\n    <Compile Include=\"TestFilter.cs\" />\n    <Compile Include=\"TestGroup.cs\" />\n    <Compile Include=\"TestHarness.cs\" />\n    <Compile Include=\"TestMethod.cs\" />\n    <Compile Include=\"TestSettings.cs\" />\n    <Compile Include=\"WinJS\\Formatter.cs\" />\n    <Compile Include=\"WinJS\\MessageEventArgs.cs\" />\n    <Compile Include=\"WinJS\\PromiseAsyncExecution.cs\" />\n    <Compile Include=\"WinJS\\PromiseAsyncExecutionEventArgs.cs\" />\n    <Compile Include=\"WinJS\\TestReporter.cs\" />\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' \">\n    <VisualStudioVersion>11.0</VisualStudioVersion>\n  </PropertyGroup>\n  <PropertyGroup>\n    <StartupObject />\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'BuildTools|AnyCPU'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\BuildTools\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <DebugType>full</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'BuildTools|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\BuildTools\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <NoStdLib>true</NoStdLib>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'BuildTools|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\BuildTools\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <NoStdLib>true</NoStdLib>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'BuildTools|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\BuildTools\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <NoStdLib>true</NoStdLib>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Javascript/test/framework/Properties/AssemblyInfo.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.Azure.Zumo.Win8.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]"
  },
  {
    "path": "sdk/Javascript/test/framework/RuntimeTestFilter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// An individual test method to be executed.\n    /// </summary>\n    internal class RuntimeTestFilter : TestFilter\n    {\n        /// <summary>\n        /// The custom key for the runtime url.\n        /// </summary>\n        private const string Platform = \"platform\";\n\n        /// <summary>\n        /// Initializes a new instance of the FunctionalTestFilter class.\n        /// </summary>\n        /// <param name=\"settings\">The test settings.</param>\n        public RuntimeTestFilter(TestSettings settings)\n            : base(settings)\n        {\n        }\n\n        /// <summary>\n        /// Filter the tests according to whether functional tests are enabled.\n        /// </summary>\n        /// <param name=\"groups\">The groups to test.</param>\n        public override void Filter(IList<TestGroup> groups)\n        {\n            string platform = null;\n            bool dotNet = false;\n            this.Settings.Custom.TryGetValue(Platform, out platform);\n\n            this.Settings.TestRunStatusMessage += \" - \" + platform + \" Runtime\";\n            platform += \"_not_supported\";\n            Remove(groups, g => g.Tags.Contains(platform));\n            foreach (TestGroup group in groups)\n            {\n                Remove(group.Methods, m => m.Tags.Contains(platform));\n            }\n            Remove(groups, g => g.Methods.Count == 0);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/Tagging/TagManager.ExpressionEvaluator.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Xml.Linq;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// A helper class that manages tags and associated metadata. Tag\n    /// expressions are evaluated at the TestGroup level.\n    /// </summary>\n    internal sealed partial class TagManager\n    {\n        /// <summary>\n        /// Evaluate tag expressions.\n        /// </summary>\n        /// <remarks>\n        /// Tag expressions are derived from the following EBNF grammar:\n        ///     {Expression} :=\n        ///         {Expression} + {Term} |\n        ///         {Expression} - {Term} |\n        ///         {Term}\n        ///     {Term} :=\n        ///         {Term} * {Factor} |\n        ///         {Factor}\n        ///     {Factor} :=\n        ///         !{Factor} |\n        ///         ({Expression}) |\n        ///         {Tag}\n        ///     {Tag} :=\n        ///         All |\n        ///         [^InvalidCharacters]+\n        ///  \n        /// The non-terminals for {Expression} and {Term} will be left factored\n        /// in the recursive descent parser below.\n        /// </remarks>\n        private class ExpressionEvaluator\n        {\n            /// <summary>\n            /// Union character.\n            /// </summary>\n            private const string Union = \"+\";\n\n            /// <summary>\n            /// Intersection character.\n            /// </summary>\n            private const string Intersection = \"*\";\n\n            /// <summary>\n            /// Complement character.\n            /// </summary>\n            private const string Complement = \"!\";\n\n            /// <summary>\n            /// Difference character.\n            /// </summary>\n            private const string Difference = \"-\";\n\n            /// <summary>\n            /// The \"All\" string constant.\n            /// </summary>\n            private const string All = \"all\";\n\n            /// <summary>\n            /// Invalid characters in a tag name.\n            /// </summary>\n            private static char[] InvalidCharacters = new char[] \n            { \n                Union[0],\n                Intersection[0], \n                Complement[0], \n                Difference[0], \n                '(', \n                ')', \n                '/' \n            };\n\n            /// <summary>\n            /// Evaluate a tag expression.\n            /// </summary>\n            /// <param name=\"owner\">The owner object.</param>\n            /// <param name=\"tagExpression\">Tag expression.</param>\n            /// <returns>Test methods associated with the tag expression.</returns>\n            public static IEnumerable<TestMethod> Evaluate(TagManager owner, string tagExpression)\n            {\n                return new ExpressionEvaluator(owner, tagExpression).Evaluate();\n            }\n\n            /// <summary>\n            /// The owning TagManager instance.\n            /// </summary>\n            private TagManager _owner;\n\n            /// <summary>\n            /// Expression being evaluated.\n            /// </summary>\n            private string _tagExpression;\n\n            /// <summary>\n            /// Current position in the expression.\n            /// </summary>\n            private int _position;\n\n            /// <summary>\n            /// Create an expression evaluator.\n            /// </summary>\n            /// <param name=\"owner\">The owner object.</param>\n            /// <param name=\"tagExpression\">Expression object.</param>\n            private ExpressionEvaluator(TagManager owner, string tagExpression)\n            {\n                if (tagExpression == null)\n                {\n                    throw new ArgumentNullException(\"tagExpression\");\n                }\n                else if (tagExpression.Length == 0)\n                {\n                    throw new ArgumentOutOfRangeException(\"tagExpression\");\n                }\n                _owner = owner;\n                _tagExpression = tagExpression;\n            }\n\n            /// <summary>\n            /// Match a sequence of characters.\n            /// </summary>\n            /// <param name=\"expected\">String to match.</param>\n            private void Match(string expected)\n            {\n                if (!TryMatch(expected))\n                {\n                    throw new FormatException(\n                        string.Format(\n                            CultureInfo.CurrentCulture,\n                            \"Expected {1} at position {2} in expression {0}.\",\n                            _tagExpression,\n                            expected,\n                            _position));\n                }\n            }\n\n            /// <summary>\n            /// Try to match a sequence of characters.\n            /// </summary>\n            /// <param name=\"expected\">String to match.</param>\n            /// <returns>Returns a value indicating whether the match was \n            /// successful.</returns>\n            private bool TryMatch(string expected)\n            {\n                if (_position + expected.Length > _tagExpression.Length)\n                {\n                    return false;\n                }\n\n                for (int i = 0; i < expected.Length; i++)\n                {\n                    if (_tagExpression[i + _position] != expected[i])\n                    {\n                        return false;\n                    }\n                }\n\n                _position += expected.Length;\n                return true;\n            }\n\n            /// <summary>\n            /// Evaluate an expression.\n            /// </summary>\n            /// <returns>Test methods described by the expression.</returns>\n            private IEnumerable<TestMethod> Evaluate()\n            {\n                IEnumerable<TestMethod> expression = ReadExpression();\n                if (_position >= 0 && _position < _tagExpression.Length)\n                {\n                    throw new FormatException(\n                        string.Format(\n                            CultureInfo.InvariantCulture,\n                            \"Expected end of tag at position {1} in expression {0}\",\n                            _tagExpression,\n                            _position));\n                }\n                return expression;\n            }\n\n            /// <summary>\n            /// Evaluate an expression.\n            /// </summary>\n            /// <returns>Test methods described by the expression.</returns>\n            /// <remarks>\n            /// We need to factor out left recursion, so:\n            ///     {Expression} :=\n            ///         {Expression} + {Term} |\n            ///         {Expression} - {Term} |\n            ///         {Term}\n            /// becomes:\n            ///     {Expression} :=\n            ///     \t{Term}{Expression'}\n            ///     \n            ///     {Expression'} :=\n            ///     \t#empty#\n            ///     \t+ {Term}{Expression'}\n            ///     \t- {Term}{Expression'}\n            /// </remarks>\n            private IEnumerable<TestMethod> ReadExpression()\n            {\n                return ReadExpression(ReadTerm());\n            }\n\n            /// <summary>\n            /// Evaluate an expression.\n            /// </summary>\n            /// <param name=\"term\">\n            /// Left term already read as part of the expression.\n            /// </param>\n            /// <returns>Test methods described by the expression.</returns>\n            /// <remarks>\n            /// Non-terminal created for left-factoring:\n            ///     {Expression'} :=\n            ///     \t#empty#\n            ///     \t+ {Term}{Expression'}\n            ///     \t- {Term}{Expression'}\n            /// </remarks>\n            private IEnumerable<TestMethod> ReadExpression(IEnumerable<TestMethod> term)\n            {\n                if (TryMatch(Union))\n                {\n                    return ReadExpression(term.Union(ReadTerm()));\n                }\n                else if (TryMatch(Difference))\n                {\n                    return ReadExpression(term.Except(ReadTerm()));\n                }\n                else\n                {\n                    return term;\n                }\n            }\n\n            /// <summary>\n            /// Evaluate a term.\n            /// </summary>\n            /// <returns>Test methods described by the expression.</returns>\n            /// <remarks>\n            /// We need to factor out left recursion, so:\n            ///     {Term} :=\n            ///         {Factor} * {Term} |\n            ///         {Factor}\n            /// becomes:\n            ///     {Term} :=\n            ///         {Factor}{Term'}\n            /// \n            ///     {Term'} :=\n            ///     \t#empty#\n            ///     \t^ {Factor}{Term'}\n            /// </remarks>\n            private IEnumerable<TestMethod> ReadTerm()\n            {\n                return ReadTerm(ReadFactor());\n            }\n\n            /// <summary>\n            /// Evaluate a term.\n            /// </summary>\n            /// <param name=\"factor\">\n            /// Left term already read as part of the expression.\n            /// </param>\n            /// <returns>Test methods described by the expression.</returns>\n            /// <remarks>\n            /// Non-terminal created for left-factoring:\n            ///     {Term'} :=\n            ///     \t#empty#\n            ///     \t^ {Factor}{Term'}\n            /// </remarks>\n            private IEnumerable<TestMethod> ReadTerm(IEnumerable<TestMethod> factor)\n            {\n                if (TryMatch(Intersection))\n                {\n                    return ReadTerm(factor.Intersect(ReadFactor()));\n                }\n                else\n                {\n                    return factor;\n                }\n            }\n\n            /// <summary>\n            /// Evaluate a factor.\n            /// </summary>\n            /// <returns>Test methods described by the expression.</returns>\n            /// <remarks>\n            /// {Factor} :=\n            ///     !{Factor} |\n            ///     ({Expression}) |\n            ///     {Tag}\n            /// </remarks>\n            private IEnumerable<TestMethod> ReadFactor()\n            {\n                if (TryMatch(Complement))\n                {\n                    IEnumerable<TestMethod> allMethods = _owner.Universe;\n                    return allMethods.Except(ReadFactor());\n                }\n                else if (TryMatch(\"(\"))\n                {\n                    IEnumerable<TestMethod> expression = ReadExpression();\n                    Match(\")\");\n                    return expression;\n                }\n                else\n                {\n                    return ReadTag();\n                }\n            }\n\n            /// <summary>\n            /// Creates a new empty collection.\n            /// </summary>\n            /// <returns>Returns an empty collection.</returns>\n            private static List<TestMethod> CreateEmptyList()\n            {\n                return new List<TestMethod>();\n            }\n\n            /// <summary>\n            /// Evaluate a tag.\n            /// </summary>\n            /// <returns>Test methods described by the expression.</returns>\n            /// <remarks>\n            /// {Tag} :=\n            ///     All |\n            ///     [^InvalidCharacters]+\n            /// </remarks>\n            private IEnumerable<TestMethod> ReadTag()\n            {\n                int end = _tagExpression.IndexOfAny(InvalidCharacters, _position);\n                if (end < 0)\n                {\n                    end = _tagExpression.Length;\n                }\n                string tag = _tagExpression.Substring(_position, end - _position);\n                if (string.IsNullOrEmpty(tag))\n                {\n                    throw new FormatException(\n                        string.Format(\n                            CultureInfo.CurrentCulture,\n                            \"Expected a tag at position {1} in expression {0}\",\n                            _tagExpression,\n                            _position));\n                }\n                _position = end;\n                if (string.Compare(tag, All, StringComparison.OrdinalIgnoreCase) == 0)\n                {\n                    return new List<TestMethod>(_owner.Universe);\n                }\n                else\n                {\n                    List<TestMethod> methods;\n                    if (!_owner._tagsToMethods.TryGetValue(tag, out methods))\n                    {\n                        methods = CreateEmptyList();\n                    }\n                    return methods;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/Tagging/TagManager.Tags.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// A helper class that manages tags and associated metadata. Tag\n    /// expressions are evaluated at the TestGroup level.\n    /// </summary>\n    internal sealed partial class TagManager\n    {\n        /// <summary>\n        /// A string list for storing tags. Provides an Add method that takes \n        /// an attribute object and, if a TagAttribute, will append its tag \n        /// value to the list.\n        /// </summary>\n        private class Tags : List<string>\n        {\n            /// <summary>\n            /// Initializes a new Tags instance.\n            /// </summary>\n            public Tags() :\n                base()\n            {\n            }\n\n            /// <summary>\n            /// Initializes a new Tags instance from an existing collection.\n            /// </summary>\n            /// <param name=\"collection\">The collection to copy.</param>\n            public Tags(IEnumerable<string> collection) :\n                base(collection)\n            {\n            }\n\n            /// <summary>\n            /// Adds a TagAttribute's tag value.\n            /// </summary>\n            /// <param name=\"tag\">The tag object.</param>\n            public void AddTag(string tag)\n            {\n                if (!string.IsNullOrEmpty(tag) && !Contains(tag))\n                {\n                    Add(tag);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/Tagging/TagManager.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// A helper class that manages tags and associated metadata. Tag\n    /// expressions are evaluated at the TestGroup level.\n    /// </summary>\n    internal sealed partial class TagManager\n    {\n        // This class is not meant to have a long lifetime as there are \n        // situations in a test run where TestMethod and TestGroup \n        // references in fact are renewed.\n        // \n        // Three primary sets of relationships are stored:\n        // _groupTags: List of tags for the Type associated with this instance\n        // _methodTags: Relates TestMethod instances to a list of tags\n        // _tagsToMethods: Relates a tag to a set of method metadata\n\n        /// <summary>\n        /// The test group being filtered.\n        /// </summary>\n        private TestGroup _group;\n\n        /// <summary>\n        /// The test tags associated with the class.\n        /// </summary>\n        private Tags _groupTags;\n\n        /// <summary>\n        /// The test tags associated with methods.\n        /// </summary>\n        private Dictionary<TestMethod, Tags> _methodTags;\n\n        /// <summary>\n        /// The ability to grab the set of methods, given a test class type, \n        /// and the tag of interest.\n        /// </summary>\n        private Dictionary<string, List<TestMethod>> _tagsToMethods;\n\n        /// <summary>\n        /// Gets or sets the universe of all test methods for expression \n        /// evaluation.\n        /// </summary>\n        private List<TestMethod> Universe { get; set; }\n\n        /// <summary>\n        /// Initializes a new instance of the TagManager class.\n        /// </summary>\n        /// <param name=\"group\">The test group eing filter.</param>\n        /// <param name=\"methods\">The set of methods to run.</param>\n        public TagManager(TestGroup group)\n        {\n            _group = group;\n            _groupTags = new Tags();\n            _methodTags = new Dictionary<TestMethod, Tags>();\n            _tagsToMethods = new Dictionary<string, List<TestMethod>>();\n            Universe = new List<TestMethod>(group.Methods);\n\n            CreateClassTags(_group);\n            foreach (TestMethod method in group.Methods)\n            {\n                CreateMethodTags(method);\n            }\n        }\n\n        /// <summary>\n        /// Reflect, read and prepare the tags for the group metadata. Performs \n        /// the work if this is the first time the metadata has been seen.\n        /// </summary>\n        /// <param name=\"group\">The test group.</param>\n        private void CreateClassTags(TestGroup group)\n        {\n            // 1. Full class name\n            //_groupTags.AddTag(group.FullName);\n\n            // 2. Class name\n            _groupTags.AddTag(group.Name);\n\n            // 3. All [Tag] attributes on the type\n            foreach (string tag in group.Tags)\n            {\n                _groupTags.AddTag(tag);\n            }\n        }\n\n        /// <summary>\n        /// Reflect, read and prepare the tags for the method metadata.\n        /// Performs the work if this is the first time the metadata has been\n        /// seen.\n        /// </summary>\n        /// <param name=\"method\">The method metadata.</param>\n        private void CreateMethodTags(TestMethod method)\n        {\n            // 1. All the tags from the group\n            Tags tags = new Tags(_groupTags);\n\n            // 2. Method.Name\n            tags.AddTag(method.Name);\n\n            // 3. Type.FullName + Method.Name\n            //tags.AddTag(m.ReflectedType.FullName + \".\" + method.Name);\n\n            // 4. Type.Name + Method.Name\n            //tags.AddTag(method.ReflectedType.Name + \".\" + method.Name);\n            \n            // 5. Implicit Inherited tag\n            //if (method.ReflectedType != method.DeclaringType)\n            //{\n            //    tags.AddTag(\"Inherited\");\n            //}\n\n            // 6. All [Tag] attributes on the method\n            foreach (string tag in method.Tags)\n            {\n                tags.AddTag(tag);\n            }\n\n            // 7. Add priority as a tag\n            //if (method.Priority != null)\n            //{\n            //    tags.AddTag(PriorityTagPrefix + method.Priority.ToString());\n            //}\n\n            _methodTags.Add(method, tags);\n\n            // Populate the inverted index\n            foreach (string tag in tags)\n            {\n                List<TestMethod> methods;\n                if (!_tagsToMethods.TryGetValue(tag, out methods))\n                {\n                    methods = new List<TestMethod>();\n                    _tagsToMethods[tag] = methods;\n                }\n                methods.Add(method);\n            }\n        }\n\n        /// <summary>\n        /// Get the test methods that correspond to a tag expression.\n        /// </summary>\n        /// <param name=\"tagExpression\">Tag expression.</param>\n        /// <returns>Test methods for the tag expression.</returns>\n        public IEnumerable<TestMethod> EvaluateExpression(string tagExpression)\n        {\n            if (tagExpression == null)\n            {\n                throw new ArgumentNullException(\"tagExpression\");\n            }\n            else if (tagExpression.Length == 0)\n            {\n                throw new ArgumentOutOfRangeException(\"tagExpression\");\n            }\n            return ExpressionEvaluator.Evaluate(this, tagExpression);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/Tagging/TagTestFilter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// A method and group filter that uses expressions and declared tags.\n    /// </summary>\n    internal class TagTestFilter : TestFilter\n    {\n        /// <summary>\n        /// The reason used to exclude untagged tests.\n        /// </summary>\n        private const string ExcludedReason = \"Tag expression does not match this test.\";\n\n        /// <summary>\n        /// Initializes a instance of the TagTestFilter class.\n        /// </summary>\n        /// <param name=\"settings\">Unit test settings.</para\n        public TagTestFilter(TestSettings settings)\n            : base(settings)\n        {\n        }\n\n        /// <summary>\n        /// Filter the list of active test methods to those matching the tag\n        /// expression.\n        /// </summary>\n        /// <param name=\"groups\">The test groups.</param>\n        public override void Filter(IList<TestGroup> groups)\n        {\n            string tagExpression = this.Settings.TagExpression;\n            if (!string.IsNullOrEmpty(tagExpression))\n            {\n                this.Settings.TestRunStatusMessage += \" - Tag Expression '\" + tagExpression + \"'\";\n                foreach (TestGroup group in groups)\n                {\n                    List<TestMethod> activeMethods =\n                        new TagManager(group).EvaluateExpression(tagExpression).ToList();\n                    Remove(group.Methods, m => !activeMethods.Contains(m));                    \n                }\n                Remove(groups, g => g.Methods.Count == 0);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/TestFilter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// A filter that can be used to exclude a set of tests.\n    /// </summary>\n    internal abstract class TestFilter\n    {\n        /// <summary>\n        /// Initializes a new instance of the TestFilter class.\n        /// </summary>\n        /// <param name=\"settings\">The test settings.</param>\n        public TestFilter(TestSettings settings)\n        {\n            Debug.Assert(settings != null, \"settings should not be null!\");\n            this.Settings = settings;\n        }\n        \n        /// <summary>\n        /// Gets the TestSettings to be used by the filter.\n        /// </summary>\n        public TestSettings Settings { get; private set; }\n\n        /// <summary>\n        /// Filter the test groups.\n        /// </summary>\n        /// <param name=\"groups\">The groups to test.</param>\n        public virtual void Filter(IList<TestGroup> groups)\n        {\n        }\n\n        /// <summary>\n        /// Remove the elements matching a given predicate.\n        /// </summary>\n        /// <typeparam name=\"T\">Type of the element.</typeparam>\n        /// <param name=\"elements\">The elements to remove.</param>\n        /// <param name=\"predicate\">The predicate to compare.</param>\n        protected static void Remove<T>(IList<T> elements, Func<T, bool> predicate)\n        {\n            Debug.Assert(elements != null, \"elements cannot be null!\");\n            Debug.Assert(predicate != null, \"predicate cannot be null!\");\n\n            foreach (T element in elements.Where(predicate).ToList())\n            {\n                elements.Remove(element);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/TestGroup.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// A group of tests for a related functional area.\n    /// </summary>\n    public sealed class TestGroup\n    {\n        /// <summary>\n        /// Initializes a new instance of the TestGroup class.\n        /// </summary>\n        public TestGroup()\n        {\n            this.Name = string.Empty;\n            this.Methods = new List<TestMethod>();\n            this.Tags = new List<string>();\n        }\n\n        /// <summary>\n        /// Gets or sets the name of the test group.\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Gets the list of tags associated with this test group.\n        /// </summary>\n        public IList<string> Tags { get; private set; }\n\n        /// <summary>\n        /// Gets the list of methods available in the test group.\n        /// </summary>\n        public IList<TestMethod> Methods { get; private set; }\n\n        /// <summary>\n        /// Exclude all of the methods in a test group.\n        /// </summary>\n        /// <param name=\"reason\">The reason to exclude the group.</param>\n        public void Exclude(string reason)\n        {\n            foreach (TestMethod method in this.Methods)\n            {\n                // Only exclude if it isn't already to prevent stomping on the\n                // exclude reason\n                if (!method.Excluded)\n                {\n                    method.Exclude(reason);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/TestHarness.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Xml.Linq;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// Harness for a test framework that allows asynchronous unit testing\n    /// across any WinRT framework independent of language (JS, C#, C++) or\n    /// UI framework (WWA, XAML).\n    /// </summary>\n    public sealed class TestHarness\n    {\n        /// <summary>\n        /// Initializes a new instance of the TestHarness class.\n        /// </summary>\n        public TestHarness()\n        {\n            this.Groups = new List<TestGroup>();\n            this.Settings = new TestSettings();            \n        }\n\n        /// <summary>\n        /// Gets the list of test groups which contain TestMethods to execute.\n        /// </summary>\n        public IList<TestGroup> Groups { get; private set; }\n\n        /// <summary>\n        /// Gets the test settings used for this run.\n        /// </summary>\n        public TestSettings Settings { get; private set; }\n\n        /// <summary>\n        /// Gets or sets the TestReporter used to update the test interface as\n        /// the test run progresses.\n        /// </summary>\n        public ITestReporter Reporter { get; set; }\n\n        /// <summary>\n        /// Gets the total number of test methods.\n        /// </summary>\n        /// <remarks>\n        /// This is a simple helper to provide access to the total number of\n        /// test methods which the Reporter can display.\n        /// </remarks>\n        public int Count\n        {\n            get { return this.Groups.SelectMany(g => g.Methods).Count(); }\n        }\n\n        /// <summary>\n        /// Gets the number of test failures.\n        /// </summary>\n        public int Failures { get; set; }\n\n        /// <summary>\n        /// Get the number of tests already executed.\n        /// </summary>\n        public int Progress { get; private set; }\n        \n        /// <summary>\n        /// Log a message.\n        /// </summary>\n        /// <param name=\"message\">The message.</param>\n        public void Log(string message)\n        {\n            this.Reporter.Log(message);\n        }\n\n        /// <summary>\n        /// Filter out any test methods basd on the current settings.\n        /// </summary>\n        private void FilterTests()\n        {\n            // Create the list of filters (at some point we could make this\n            // publicly accessible)\n            List<TestFilter> filters = new List<TestFilter>();\n            filters.Add(new FunctionalTestFilter(this.Settings));\n            filters.Add(new RuntimeTestFilter(this.Settings));\n            filters.Add(new TagTestFilter(this.Settings));\n\n            // Apply any test filters to the set of tests before we begin\n            // executing (test filters will change the Excluded property of\n            // individual test methods)\n            int originalCount = Count;\n            foreach (TestFilter filter in filters)\n            {\n                filter.Filter(this.Groups);\n            }\n            int filteredCount = Count;\n            if (filteredCount != originalCount)\n            {\n                this.Settings.TestRunStatusMessage += \" - Only running \" + filteredCount + \"/\" + originalCount + \" tests\";\n            }\n        }\n\n        /// <summary>\n        /// Run the unit tests.\n        /// </summary>\n        public void RunAsync()\n        {\n            // Ensure there's an interface to display the test results.\n            if (this.Reporter == null)\n            {\n                throw new ArgumentNullException(\"Reporter\");\n            }\n\n            // Setup the progress/failure counters\n            this.Progress = 0;\n            this.Failures = 0;\n\n            // Save the test setting changes\n            this.Settings.Save();\n\n            // Filter out any test methods based on the current settings\n            FilterTests();\n\n            // Write out the test status message which may be modified by the\n            // filters\n            Reporter.Status(this.Settings.TestRunStatusMessage);\n\n            // Enumerators that track the current group and method to execute\n            // (which allows reentrancy into the test loop below to resume at\n            // the correct location).\n            IEnumerator<TestGroup> groups = this.Groups.OrderBy(g => g.Name).GetEnumerator();\n            IEnumerator<TestMethod> methods = null;\n\n            // Keep a reference to the current group so we can pass it to the\n            // Reporter's EndGroup (we don't need one for the test method,\n            // however, because we close over in the continuation).\n            TestGroup currentGroup = null;\n\n            // Setup the UI\n            this.Reporter.StartRun(this);\n            \n            // The primary test loop is a \"recursive\" closure that will pass\n            // itself as the continuation to async tests.\n            // \n            // Note: It's really important for performance to note that any\n            // calls to testLoop only occur in the tail position.\n            Action testLoop = null;\n            testLoop =\n                () =>\n                {\n                    if (methods != null && methods.MoveNext())\n                    {\n                        // If we were in the middle of a test group and there\n                        // are more methods to execute, let's move to the next\n                        // test method.\n\n                        // Update the progress\n                        this.Progress++;\n                        Reporter.Progress(this);\n\n                        // Start the test method\n                        Reporter.StartTest(methods.Current);\n                        if (methods.Current.Excluded)\n                        {\n                            // Ignore excluded tests and immediately recurse.\n                            Reporter.EndTest(methods.Current);\n                            testLoop();\n                        }\n                        else\n                        {\n                            // Execute the test method\n                            methods.Current.Test.Start(\n                                new ActionContinuation\n                                {\n                                    OnSuccess = () =>\n                                    {\n                                        // Mark the test as passing, update the\n                                        // UI, and continue with the next test.\n                                        methods.Current.Passed = true;\n                                        Reporter.EndTest(methods.Current);\n                                        testLoop();\n                                    },\n                                    OnError = (message) =>\n                                    {\n                                        // Mark the test as failing, update the\n                                        // UI, and continue with the next test.\n                                        methods.Current.Passed = false;\n                                        methods.Current.ErrorInfo = message;\n                                        this.Failures++;\n                                        Reporter.Error(message);\n                                        Reporter.EndTest(methods.Current);\n                                        testLoop();\n                                    }\n                                });\n                        }\n                    }\n                    else if (groups.MoveNext())\n                    {\n                        // If we've finished a test group and there are more,\n                        // then move to the next one.\n\n                        // Finish the UI for the last group.\n                        if (currentGroup != null)\n                        {\n                            Reporter.EndGroup(currentGroup);\n                            currentGroup = null;\n                        }\n\n                        // Setup the UI for this next group\n                        currentGroup = groups.Current;\n                        Reporter.StartGroup(currentGroup);\n\n                        // Get the methods and immediately recurse which will\n                        // start executing them.\n                        methods = groups.Current.Methods.OrderBy(m => m.Name).GetEnumerator();\n                        testLoop();\n                    }\n                    else\n                    {\n                        // Otherwise if we've finished the entire test run\n                        \n                        // Finish the UI for the last group and update the\n                        // progress after the very last test method.\n                        Reporter.EndGroup(currentGroup);\n                        Reporter.Progress(this);\n\n                        // Finish the UI for the test run.\n                        Reporter.EndRun(this);\n\n                        // Send the test results if there's a server waiting\n                        // for them.\n                        if (!string.IsNullOrEmpty(this.Settings.TestResultsServerUrl))\n                        {\n                            SendTestResults();\n                        }\n                    }\n                };\n\n            // Start running the tests\n            testLoop();\n        }\n\n        /// <summary>\n        /// Send results from the test run to the TestResultsServerUrl.\n        /// </summary>\n        private void SendTestResults()\n        {\n            // TODO: Dump out the test results in TRX format\n\n            // Create an XML document describing the test run\n            XDocument results = new XDocument(\n                new XElement(\"TestRun\",\n                    new XAttribute(\"Count\", Count),\n                    new XAttribute(\"Failures\", Failures),\n                    Groups.SelectMany(group =>\n                        group.Methods.Where(method => !method.Passed).Select(method =>\n                            new XElement(\"Failure\",\n                                new XAttribute(\"Group\", group.Name),\n                                new XAttribute(\"Method\", method.Name),\n                                new XAttribute(\"Error\", method.ErrorInfo)))\n                    )));\n\n            // Post the results to the TestResultsServerUrl \n            HttpClient client = new HttpClient();\n            HttpContent content = new StringContent(results.ToString());\n            client.PostAsync(this.Settings.TestResultsServerUrl, content).Wait();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/TestMethod.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// An individual test method to be executed.\n    /// </summary>\n    public sealed class TestMethod\n    {\n        /// <summary>\n        /// Initializes a new instance of the TestMethod class.\n        /// </summary>\n        public TestMethod()\n        {\n            // WinJS is unhappy if we attempt to get a null string\n            this.Name = string.Empty;\n            this.Description = string.Empty;\n            this.ExcludeReason = string.Empty;\n            this.Tags = new List<string>();\n            this.ErrorInfo = string.Empty;\n        }\n\n        /// <summary>\n        /// Gets or sets the name of the test method.\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Gets or sets a more detailed description of the test method.\n        /// </summary>\n        public string Description { get; set; }\n        \n        /// <summary>\n        /// Gets or sets a value indicating whether the test should be excluded\n        /// from execution.\n        /// </summary>\n        public bool Excluded { get; private set; }\n        \n        /// <summary>\n        /// Gets or sets the reason the test was excluded (usually referencing\n        /// a known bug or work item).\n        /// </summary>\n        public string ExcludeReason { get; private set; }\n\n        /// <summary>\n        /// Gets the list of tags associated with this test method.\n        /// </summary>\n        public IList<string> Tags { get; private set; }\n        \n        /// <summary>\n        /// The test action to execute.  This could be sync or async.  Any\n        /// exceptions raised by invoking the test will be considered a test\n        /// failure.\n        /// </summary>\n        public IAsyncExecution Test { get; set; }\n\n        /// <summary>\n        /// Gets or sets a value indicating whether the test execution passed.\n        /// </summary>\n        public bool Passed { get; set; }\n        \n        /// <summary>\n        /// Gets or sets any error information associated with a failing test.\n        /// </summary>\n        public string ErrorInfo { get; set; }\n\n        /// <summary>\n        /// Exclude the test method.\n        /// </summary>\n        /// <param name=\"reason\">\n        /// The reason for excluding the test method.\n        /// </param>\n        public void Exclude(string reason)\n        {\n            Excluded = true;\n            ExcludeReason = reason ?? \"\";\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/TestSettings.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing Windows.Data.Json;\nusing Windows.Storage;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test\n{\n    /// <summary>\n    /// Defines settings for the current test pass that can be provided via\n    /// a test application, passed to test filters, etc.\n    /// </summary>\n    public sealed class TestSettings\n    {\n        /// <summary>\n        /// Initializes a new instance of the TestSettings class.\n        /// </summary>\n        public TestSettings()\n        {\n            this.TestRunStatusMessage = \"Test Run\";\n            this.TestResultsServerUrl = \"\";\n            this.BreakOnStart = true;\n            this.TagExpression = \"\";\n            this.Custom = new Dictionary<string, string>();\n\n            // Load the test settings\n            this.Load();\n        }\n\n        /// <summary>\n        /// Gets or sets a string containing the test run status message.\n        /// </summary>\n        public string TestRunStatusMessage { get; set; }\n\n        /// <summary>\n        /// Gets or sets a URL where test results are posted.\n        /// </summary>\n        /// <remarks>\n        /// This is passed to the test application as an initialization\n        /// parameter and is used to enable test runs from the build.  The test\n        /// launcher used by the build will create a simple web server (at this\n        /// URL) to listen for the posted test results.\n        /// </remarks>\n        public string TestResultsServerUrl { get; set; }\n\n        /// <summary>\n        /// Gets or sets a value indicating whether the harness should break\n        /// before executing (so a debugger can be attached).\n        /// </summary>\n        public bool BreakOnStart { get; set; }\n\n        /// <summary>\n        /// Gets or sets the tag expression used to filter the tests that we\n        /// will run.\n        /// </summary>\n        public string TagExpression { get; set; }\n\n        /// <summary>\n        /// Gets a dictionary of custom test settings that are specific to a\n        /// given application.\n        /// </summary>\n        public IDictionary<string, string> Custom { get; private set; }\n\n        /// <summary>\n        /// Load the cached test settings.\n        /// </summary>\n        public void Load()\n        {\n            // Try to get the cached settings\n            object text = null;\n            if (ApplicationData.Current.LocalSettings.Values.TryGetValue(\"TestSettings\", out text))\n            {\n                JsonObject settings = null;\n                if (JsonObject.TryParse(text as string, out settings))\n                {\n                    this.TagExpression = settings.GetNamedString(\"TagExpression\");\n                    \n                    JsonObject custom = settings.GetNamedObject(\"Custom\");\n                    foreach (string key in custom.Keys)\n                    {\n                        this.Custom[key] = custom.GetNamedString(key);\n                    }\n                }\n            }\n        }\n\n        /// <summary>\n        /// Save the cached test settings.\n        /// </summary>\n        public void Save()\n        {\n            JsonObject settings = new JsonObject();\n            settings.SetNamedValue(\"TagExpression\", JsonValue.CreateStringValue(this.TagExpression));\n            JsonObject custom = new JsonObject();\n            settings.SetNamedValue(\"Custom\", custom);\n            foreach (KeyValuePair<string, string> setting in this.Custom)\n            {\n                custom.SetNamedValue(setting.Key, JsonValue.CreateStringValue(setting.Value));\n            }\n\n            ApplicationData.Current.LocalSettings.Values[\"TestSettings\"] = settings.Stringify();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/WinJS/Formatter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test.WinJS\n{\n    /// <summary>\n    /// Utility to provide .NET string formatting to WinJS tests.\n    /// </summary>\n    public static class Formatter\n    {\n        /// <summary>\n        /// Format a string.\n        /// </summary>\n        /// <param name=\"format\">The format specifier.</param>\n        /// <param name=\"arg\">Format argument.</param>\n        /// <returns>The formatted string.</returns>\n        public static string Format(string format, object arg)\n        {\n            return string.Format(format, arg);\n        }\n\n        /// <summary>\n        /// Format a string.\n        /// </summary>\n        /// <param name=\"format\">The format specifier.</param>\n        /// <param name=\"arg0\">Format argument.</param>\n        /// <param name=\"arg1\">Format argument.</param>\n        /// <returns>The formatted string.</returns>\n        public static string Format(string format, object arg0, object arg1)\n        {\n            return string.Format(format, arg0, arg1);\n        }\n\n        /// <summary>\n        /// Format a string.\n        /// </summary>\n        /// <param name=\"format\">The format specifier.</param>\n        /// <param name=\"arg0\">Format argument.</param>\n        /// <param name=\"arg1\">Format argument.</param>\n        /// <param name=\"arg2\">Format argument.</param>\n        /// <returns>The formatted string.</returns>\n        public static string Format(string format, object arg0, object arg1, object arg2)\n        {\n            return string.Format(format, arg0, arg1, arg2);\n        }\n\n        /// <summary>\n        /// Format a string.\n        /// </summary>\n        /// <param name=\"format\">The format specifier.</param>\n        /// <param name=\"arg0\">Format argument.</param>\n        /// <param name=\"arg1\">Format argument.</param>\n        /// <param name=\"arg2\">Format argument.</param>\n        /// <param name=\"arg3\">Format argument.</param>\n        /// <returns>The formatted string.</returns>\n        public static string Format(string format, object arg0, object arg1, object arg2, object arg3)\n        {\n            return string.Format(format, arg0, arg1, arg2, arg3);\n        }\n\n        /// <summary>\n        /// Format a string.\n        /// </summary>\n        /// <param name=\"format\">The format specifier.</param>\n        /// <param name=\"arg0\">Format argument.</param>\n        /// <param name=\"arg1\">Format argument.</param>\n        /// <param name=\"arg2\">Format argument.</param>\n        /// <param name=\"arg3\">Format argument.</param>\n        /// <param name=\"arg4\">Format argument.</param>\n        /// <returns>The formatted string.</returns>\n        public static string Format(string format, object arg0, object arg1, object arg2, object arg3, object arg4)\n        {\n            return string.Format(format, arg0, arg1, arg2, arg3, arg4);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/WinJS/MessageEventArgs.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test.WinJS\n{\n    /// <summary>\n    /// Event arguments used to provide messages form the WinJS TestReporter.\n    /// </summary>\n    public sealed class MessageEventArgs\n    {\n        /// <summary>\n        /// Gets or sets the message.\n        /// </summary>\n        public string Message { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/WinJS/PromiseAsyncExecution.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test.WinJS\n{\n    /// <summary>\n    /// Represents a WinJS async operation that can be given a continuation to \n    /// invoke when the async operation has completed (either successfully or\n    /// with an error).\n    /// </summary>\n    /// <remarks>\n    /// Given that we can't directly invoke WinJS code, we also use this class\n    /// for synchronous operations and make sure everything works fine if we\n    /// return immediately.\n    /// </remarks>\n    public sealed class PromiseAsyncExecution : IAsyncExecution\n    {\n        /// <summary>\n        /// Event used to execute the WinJS test action.\n        /// </summary>\n        /// <remarks>\n        /// We can't pass a WinJS function as a delegate via WinRT, so we're\n        /// hacking around that by creating a stub which will wrap Execute and\n        /// invoke the desired function.\n        /// </remarks>\n        public event EventHandler<PromiseAsyncExecutionEventArgs> Execute;\n        \n        /// <summary>\n        /// Start the async WinJS operation.\n        /// </summary>\n        /// <param name=\"continuation\">\n        /// Continuation that should be invoked when the async operation has\n        /// completed.\n        /// </param>\n        public void Start(IContinuation continuation)\n        {\n            EventHandler<PromiseAsyncExecutionEventArgs> handler = this.Execute;\n            if (handler != null)\n            {\n                try\n                {\n                    // Invoke the WinJS operation by raising the Execute event\n                    handler(this, new PromiseAsyncExecutionEventArgs(continuation));\n                }\n                catch (Exception ex)\n                {\n                    // In the event the operation is actually sync, we'll catch\n                    // any errors now and pass them to the error continuation.\n                    continuation.Error(ex.ToString());\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/WinJS/PromiseAsyncExecutionEventArgs.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test.WinJS\n{\n    /// <summary>\n    /// Event arguments that wrap a continuation to be invoked when an async\n    /// operation completes.\n    /// </summary>\n    public sealed class PromiseAsyncExecutionEventArgs\n    {\n        /// <summary>\n        /// The continuation to invoke when the operation completes.\n        /// </summary>\n        private IContinuation continuation;\n\n        /// <summary>\n        /// Always throw an InvalidOperationException.\n        /// </summary>\n        /// <remarks>\n        /// We're required provide a parameterless constructor for types\n        /// exposed via WinMD even if that type will never be instantiated on\n        /// the other side of the boundary.\n        /// </remarks>\n        public PromiseAsyncExecutionEventArgs()\n        {\n            throw new InvalidOperationException();\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the PromiseAsyncExecutionEventArgs\n        /// class.\n        /// </summary>\n        /// <param name=\"continuation\">\n        /// The continuation to be invoked when the async operation completes.\n        /// </param>\n        public PromiseAsyncExecutionEventArgs(IContinuation continuation)\n        {\n            if (continuation == null)\n            {\n                throw new ArgumentNullException(\"continuation\");\n            }\n            this.continuation = continuation;\n        }\n\n        /// <summary>\n        /// Invoke the continuation from a successful async operation.\n        /// </summary>\n        public void Complete()\n        {\n            this.continuation.Success();\n        }\n\n        /// <summary>\n        /// Invoke the continuation from a failing async operation.\n        /// </summary>\n        /// <param name=\"message\">The error message.</param>\n        public void Error(string message)\n        {\n            this.continuation.Error(message);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/framework/WinJS/TestReporter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.Azure.Zumo.Win8.Test.WinJS\n{\n    /// <summary>\n    /// Defines the interface used to report test results in a WinJS test\n    /// runner.\n    /// </summary>\n    /// <remarks>\n    /// This class is a hack.  WinJS types can't implement interfaces, so we're\n    /// going to instead define an event for each interface method that we can\n    /// invoke.\n    /// </remarks>\n    public sealed class TestReporter : ITestReporter\n    {\n        /// <summary>\n        /// The test run started.\n        /// </summary>\n        public event EventHandler<TestHarness> ExecuteStartRun;\n\n        /// <summary>\n        /// Update the test run progress.\n        /// </summary>\n        public event EventHandler<TestHarness> ExecuteProgress;\n\n        /// <summary>\n        /// The test run finished.\n        /// </summary>\n        public event EventHandler<TestHarness> ExecuteEndRun;\n\n        /// <summary>\n        /// The test group started is about to start executing its tests.\n        /// </summary>\n        public event EventHandler<TestGroup> ExecuteStartGroup;\n\n        /// <summary>\n        /// The test group has finished executing its tests.\n        /// </summary>\n        public event EventHandler<TestGroup> ExecuteEndGroup;\n\n        /// <summary>\n        /// The test method is about to be executed.\n        /// </summary>\n        public event EventHandler<TestMethod> ExecuteStartTest;\n        \n        /// <summary>\n        /// The test method has finished executing.\n        /// </summary>\n        public event EventHandler<TestMethod> ExecuteEndTest;\n\n        /// <summary>\n        /// A message has been logged.\n        /// </summary>\n        public event EventHandler<MessageEventArgs> ExecuteLog;\n\n        /// <summary>\n        /// An error has been raised.\n        /// </summary>\n        public event EventHandler<MessageEventArgs> ExecuteError;\n\n        /// <summary>\n        /// The status has been changed.\n        /// </summary>\n        public event EventHandler<MessageEventArgs> ExecuteStatus;\n        \n        /// <summary>\n        /// Raise an event.\n        /// </summary>\n        /// <typeparam name=\"T\">The event arguments type.</typeparam>\n        /// <param name=\"handler\">The event handler to invoke.</param>\n        /// <param name=\"args\">The event arguments.</param>\n        private void RaiseEvent<T>(EventHandler<T> handler, T args)\n        {\n            if (handler != null)\n            {\n                handler(this, args);\n            }\n        }\n\n        /// <summary>\n        /// The test run started.\n        /// </summary>\n        /// <param name=\"harness\">The test harness.</param>\n        public void StartRun(TestHarness harness)\n        {\n            this.RaiseEvent(this.ExecuteStartRun, harness);\n        }\n\n        /// <summary>\n        /// Update the test run progress.\n        /// </summary>\n        /// <param name=\"harness\">\n        /// The test harness (which contains Progress, Error, and Count\n        /// properties).\n        /// </param>\n        public void Progress(TestHarness harness)\n        {\n            this.RaiseEvent(this.ExecuteProgress, harness);\n        }\n\n        /// <summary>\n        /// The test run finished.\n        /// </summary>\n        /// <param name=\"harness\">\n        /// The test harness (which contains Error and Count properties).\n        /// </param>\n        public void EndRun(TestHarness harness)\n        {\n            this.RaiseEvent(this.ExecuteEndRun, harness);\n        }\n\n        /// <summary>\n        /// The test group started is about to start executing its tests.\n        /// </summary>\n        /// <param name=\"group\">The test group.</param>\n        public void StartGroup(TestGroup group)\n        {\n            this.RaiseEvent(this.ExecuteStartGroup, group);\n        }\n\n        /// <summary>\n        /// The test group has finished executing its tests.\n        /// </summary>\n        /// <param name=\"group\">The test group.</param>\n        public void EndGroup(TestGroup group)\n        {\n            this.RaiseEvent(this.ExecuteEndGroup, group);\n        }\n\n        /// <summary>\n        /// The test method is about to be executed.\n        /// </summary>\n        /// <param name=\"test\">The test method.</param>S\n        public void StartTest(TestMethod test)\n        {\n            this.RaiseEvent(this.ExecuteStartTest, test);\n        }\n\n        /// <summary>\n        /// The test method has finished executing.\n        /// </summary>\n        /// <param name=\"method\">The test method.</param>\n        public void EndTest(TestMethod test)\n        {\n            this.RaiseEvent(this.ExecuteEndTest, test);\n        }\n\n        /// <summary>\n        /// A message has been logged.\n        /// </summary>\n        /// <param name=\"message\">The message.</param>\n        public void Log(string message)\n        {\n            this.RaiseEvent(this.ExecuteLog, new MessageEventArgs { Message = message });\n        }\n\n        /// <summary>\n        /// An error has been raised.\n        /// </summary>\n        /// <param name=\"errorDetails\">Information about the error.</param>\n        public void Error(string errorDetails)\n        {\n            this.RaiseEvent(this.ExecuteError, new MessageEventArgs { Message = errorDetails });\n        }\n\n        /// <summary>\n        /// The status has been updated.\n        /// </summary>\n        /// <param name=\"status\">The status message.</param>\n        public void Status(string status)\n        {\n            this.RaiseEvent(this.ExecuteStatus, new MessageEventArgs { Message = status });\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/test/web/Microsoft.Azure.Zumo.Web.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <ToolsPath>$(MSBuildProjectDirectory)\\..\\..\\tools</ToolsPath>\n  </PropertyGroup>\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{5AA504E2-10A2-4179-9645-47E5CF857DDF}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.Azure.Zumo.Web.Test</RootNamespace>\n    <AssemblyName>Microsoft.Azure.Zumo.Web.Test</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"css\\styles.css\" />\n    <Content Include=\"generated\\Tests.js\" />\n    <Content Include=\"index.html\" />\n    <Content Include=\"js\\MobileServices.intellisense.js\" />\n    <Content Include=\"js\\MobileServices.Web.Internals.js\" />\n    <Content Include=\"js\\TestClientHelper.js\" />\n    <Content Include=\"js\\TestFrameworkAdapter.js\" />\n    <Content Include=\"promiseTests\\readme.txt\" />\n    <Content Include=\"promiseTests\\test-promises.js\" />\n    <Content Include=\"tests\\unit\\push.js\" />\n    <Content Include=\"Web.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Tests.library\" />\n    <Content Include=\"promiseTests\\package.json\" />\n    <None Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n    <None Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Properties\\\" />\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'BuildTools|AnyCPU'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <DebugType>full</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>47631</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:21123/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <!-- Setup our JS Module system -->\n  <UsingTask TaskName=\"Microsoft.WindowsAzure.Mobile.JSBuild.MergeJSModules\" AssemblyFile=\"$(ToolsPath)\\Microsoft.WindowsAzure.Mobile.JSBuild.dll\" />\n  <Target Name=\"CreateTestLibrary\">\n    <!-- Get dependencies from src project -->\n    <Message Importance=\"high\" Text=\"Copying over dependencies from the src project\" />\n    <Copy SourceFiles=\"..\\..\\src\\Generated\\MobileServices.Web.Internals.js\" DestinationFolder=\"js\" />\n    <Copy SourceFiles=\"..\\..\\src\\MobileServices.intellisense.js\" DestinationFolder=\"js\" />\n    <!-- Merge the modules into a library -->\n    <Message Importance=\"high\" Text=\"Generating Test Library\" />\n    <MergeJSModules LibraryDefinitions=\"Tests.library\" />\n  </Target>\n  <PropertyGroup>\n    <BuildDependsOn>\n      CreateTestLibrary;\n      $(BuildDependsOn);\n    </BuildDependsOn>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "sdk/Javascript/test/web/Tests.library",
    "content": "﻿<Library\n  Path=\"generated\\Tests.js\"\n  Copyright=\"Copyright (c) Microsoft Corporation. All rights reserved.\">\n\n  <Module Path=\"..\\WinJS\\tests\\unit\\*.js\" EntryPoint=\"true\" />\n  <Module Path=\"tests\\unit\\*.js\" EntryPoint=\"true\" />\n  <Module Path=\"..\\WinJS\\tests\\functional\\*.js\" EntryPoint=\"true\" />\n\n  <Module Path=\"..\\WinJS\\tests\\utilities\\*.js\" />\n</Library>\n"
  },
  {
    "path": "sdk/Javascript/test/web/Web.Debug.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "sdk/Javascript/test/web/Web.Release.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "sdk/Javascript/test/web/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=169433\n  -->\n\n<configuration>\n    <system.web>\n      <compilation debug=\"true\" targetFramework=\"4.5\" />\n      <httpRuntime targetFramework=\"4.5\" />\n    </system.web>\n\n</configuration>\n"
  },
  {
    "path": "sdk/Javascript/test/web/css/styles.css",
    "content": "﻿body {\n    font-family: Arial;\n}\n\n#test-config {\n    margin-bottom: 1em;\n    display: none;\n}\n\n#edit-test-config {\n    position: absolute;\n    right: 20px;\n    top: 16px;\n    font-size: 16px;\n    padding: 3px 16px;\n}"
  },
  {
    "path": "sdk/Javascript/test/web/generated/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "sdk/Javascript/test/web/index.html",
    "content": "﻿<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n    <head>\n        <title>Zumo Web Client Tests</title>\n        <link href=\"http://code.jquery.com/qunit/qunit-1.11.0.css\" rel=\"stylesheet\" />\n        <link href=\"css/styles.css\" rel=\"stylesheet\" />\n    </head>\n    <body>\n        <button id=\"edit-test-config\">Configure</button>\n        <form id=\"test-config\">\n            <fieldset>\n                <legend>Configuration</legend>\n                <p>\n                    <label>Runtime URI:</label>\n                    <input id=\"runtime-uri\" name=\"runtime-uri\" />\n                </p>\n                <button type=\"submit\">Update</button>\n            </fieldset>\n        </form>\n\n        <div id=\"qunit\"></div>\n\n        <script src=\"js/MobileServices.Web.Internals.js\"></script>\n        <script src=\"http://code.jquery.com/qunit/qunit-1.11.0.js\"></script>\n        <script src=\"js/TestFrameworkAdapter.js\"></script>\n        <script src=\"js/TestClientHelper.js\"></script>\n        <script src=\"generated/Tests.js\"></script>\n    </body>\n</html>\n"
  },
  {
    "path": "sdk/Javascript/test/web/js/TestClientHelper.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n(function (global) {\n\n    // This file provides global.$getClient, which the test code uses when trying to make requests to the runtime.\n    // It also allows you to configure the URL of the runtime that it will talk to.\n\n    // Note: Implementing this without jQuery (or similar DOM library) to ensure\n    // that tests don't inadvertently start depending on it\n\n    global.$getClient = function () {\n        return new global.WindowsAzure.MobileServiceClient(clientUriElem.value, \"dummy-app-key\");\n    };\n\n    var configureButtonElem = document.getElementById(\"edit-test-config\"),\n        configureFormElem = document.getElementById(\"test-config\"),\n        clientUriElem = document.getElementById(\"runtime-uri\"),\n        defaultClientUri = \"http://localhost:11926/\";\n\n    // Try to recover client URI from querystring\n    clientUriElem.value = parseQueryString()[clientUriElem.name] || defaultClientUri;\n\n    configureButtonElem.onclick = function () {\n        configureFormElem.style.display = \"block\";\n        configureButtonElem.style.display = \"none\";\n    };\n\n    function parseQueryString() {\n        var href = global.window.location.href,\n                   queryStartPos = href.indexOf(\"?\"),\n                   query = queryStartPos >= 0 ? href.substring(queryStartPos + 1) : null,\n                   tokens = query ? query.split(\"&\") : [],\n                   result = {},\n                   tokenIndex,\n                   pair;\n\n        for (tokenIndex = 0; tokenIndex < tokens.length; tokenIndex++) {\n            pair = tokens[tokenIndex].split(\"=\");\n            if (pair.length === 2) {\n                result[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n            }\n        }\n\n        return result;\n    }\n\n})(this);"
  },
  {
    "path": "sdk/Javascript/test/web/js/TestFrameworkAdapter.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n(function (global, qunit, undefined) {\n\n    // This file allows our JavaScript client tests to be run in a browser via QUnit     \n    \n    // ------------------------------------------------------------------------------\n    // Top-level test framework APIs invoked by our tests\n    global.$test = function (testName) {\n        return new Test(testName);\n    };\n\n    global.$testGroup = function (groupName /*, test1, test2, ... */) {\n        var testsArray = arguments.length > 1 ? Array.prototype.slice.call(arguments, 1) : null;\n        return new TestGroup(groupName, testsArray);\n    };\n\n    global.$assert = {\n        isTrue: qunit.ok,\n        isFalse: function (value, message) { qunit.ok(!value, message); },\n        isNull: function (value, message) {\n            // Our tests treat null and undefined as if they were the same, because part of the\n            // WinJS test framework is written in .NET where there isn't a concept of undefined.\n            qunit.ok(value === null || value === undefined, message);\n        },\n        isNotNull: function (value, message) {\n            // As above, regard null and undefined as the same thing\n            qunit.ok(value !== null && value !== undefined, message);\n        },\n        areEqual: qunit.equal,\n        areNotEqual: qunit.notEqual,\n        fail: function (message) { qunit.ok(false, message); },\n        contains: function(str, substr, message) {\n            message = message || (str + \" should contain \" + substr);\n            qunit.ok((str || \"\").indexOf(substr) >= 0, message);\n        }\n    };\n\n    global.$assertThrows = function (action, verify, message) {\n        var thrown = true;\n        try {\n            action();\n            thrown = false;\n        } catch (ex) {\n            if (verify) {\n                verify(ex);\n            }\n        }\n\n        if (!thrown) {\n            $assert.fail(message || 'Should have failed!');\n        }\n    };\n\n    global.$chain = function () {\n        /// <summary>\n        /// Given a list of functions that return promises, return a promise that\n        /// will chain them all together sequentially.\n        /// </summary>\n        var actions = Array.prototype.slice.call(arguments);\n        return new global.Promises.Promise(function (complete, err) {\n            var error = function (ex) {\n                err(ex.responseText || JSON.stringify(ex));\n            };\n            var exec = function (prev) {\n                if (actions.length > 0) {\n                    var next = actions.shift();\n                    try {\n                        var result = next(prev);\n                        if (result) {\n                            result.then(function (results) {\n                                exec(results);\n                            }, error);\n                        } else if (actions.length === 0) {\n                            complete();\n                        } else {\n                            error('$chain expects all actions except the last to return another Promise');\n                        }\n                    } catch (ex) {\n                        error(ex);\n                    }\n                } else {\n                    complete();\n                }\n            };\n            exec();\n        });\n    };\n\n    global.$log = function (message) {\n        if (global.console) {\n            global.console.log(message);\n        }\n    };\n\n    global.$fmt = function (formatString /*, arg0, arg1, ... */) {\n        var positionalArgs = Array.prototype.slice.call(arguments, 1),\n            index;\n        for (index = 0; index < positionalArgs.length; index++) {\n            formatString = formatString.replace(\"{\" + index + \"}\", positionalArgs[index]);\n        }\n        return formatString;\n    };\n\n    // ------------------------------------------------------------------------------\n    // Test represents a single test\n    function Test(testName) {\n        this.testName = testName;\n        this.tags = [];\n    }\n\n    Test.prototype.exclude = function () {\n        this.isExcluded = true;\n        return this;\n    };\n\n    Test.prototype.check = function (testFunc) {\n        this.testFunc = testFunc;\n        return this;\n    };\n\n    Test.prototype.checkAsync = function (testFunc) {\n        this.isAsync = true;\n        return this.check(testFunc);\n    };\n\n    Test.prototype.exec = function () {\n        if (this._shouldExclude()) {\n            return;\n        }\n\n        var self = this;\n        qunit.test(this.testName, function () {\n            qunit.ok(!!self.testFunc, \"Test function was supplied\");\n            var result = self.testFunc();\n            if (self.isAsync) {\n                qunit.ok(typeof result.then === \"function\", \"Async test returned a promise\");\n                qunit.stop();\n                result\n                    .then(qunit.start, function (err) {\n                        qunit.start();\n                        qunit.ok(false, err && err.exception || err);\n                    });\n            }\n        });\n    };\n\n    Test.prototype.tag = function (tagText) {\n        this.tags.push(tagText);\n        return this;\n    };\n\n    Test.prototype._shouldExclude = function () {\n        return this.isExcluded || this._hasTag(\"exclude-web\");\n    };\n\n    Test.prototype._hasTag = function (tagText) {\n        // Can't use Array.prototype.indexOf because old IE doesn't have it\n        for (var i = 0; i < this.tags.length; i++) {\n            if (this.tags[i] === tagText) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    // These functions are not used in our browser tests - they are ignored\n    Test.prototype.functional = function () { return this; };\n    Test.prototype.description = function () { return this; };\n\n    // ------------------------------------------------------------------------------\n    // TestGroup represents a collection of tests, or in QUnit terms, a \"module\"\n    function TestGroup(groupName, testsArray) {\n        this.groupName = groupName;\n        if (testsArray) {\n            this.tests.apply(this, testsArray);\n        }\n    }\n\n    TestGroup.prototype.functional = function () { return this; }; // Not used in browser - ignored\n\n    TestGroup.prototype.tests = function (/* test1, test2, ... */) {\n        var testsArray = Array.prototype.slice.call(arguments, 0);\n        qunit.module(this.groupName);\n        for (var i = 0; i < testsArray.length; i++) {\n            testsArray[i].exec();\n        }\n        return this;\n    };\n\n})(this, this.QUnit);"
  },
  {
    "path": "sdk/Javascript/test/web/promiseTests/package.json",
    "content": "{\n    \"name\": \"windowsazuremobileservices-promise-tests\",\n    \"description\": \"Runs promise-tests against the Mobile Services JavaScript client\",\n    \"version\": \"0.0.1\",\n    \"dependencies\": {\n        \"promises-aplus-tests\": \">= 1.1.0\"\n    }\n}"
  },
  {
    "path": "sdk/Javascript/test/web/promiseTests/readme.txt",
    "content": "﻿Domenic Denicola has written a test suite for Promises/A+ compliance: https://github.com/promises-aplus/promises-tests/\n\nYou can run that test suite against our Mobile Services Web SDK by running the following commands in this directory:\n\n    npm install\n    node test-promises.js\n\nWhy a separate testing system?\n============================================\nAlthough we could convert this test suite into the $testGroup/$test/$assert format needed for compatibility with\nour other client tests, it's not completely trivial because these Node tests rely on a Node-specific mocking library\nand in any case we would then lose the ability to upgrade easily to newer versions of the test suite."
  },
  {
    "path": "sdk/Javascript/test/web/promiseTests/test-promises.js",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n// This adapter file tells promises-tests how to construct and resolve our promises. This is needed because\n// construction/resolution isn't defined by Promises/A, and each implementation works differently.\n\nvar promiseTests = require(\"promises-aplus-tests\"),\n    mobileServices = require(\"../js/MobileServices.Web.Internals\"),\n    ensureNotNull = function (val) {\n        // Like WinJS, we don't support null/undefined errors, so transparently replace usage in tests with some dummy error value\n        return val === null || val === undefined ? {} : val;\n    },\n\n    adapter = {\n        fulfilled: function (value) {\n            return mobileServices.Platform.async(function (callback) {\n                callback(null, value);\n            })();\n        },\n        rejected: function (error) {\n            return mobileServices.Platform.async(function (callback) {\n                callback(ensureNotNull(error));\n            })();\n        },\n        pending: function () {\n            // Returns a promise that is still waiting, along with resolution callbacks\n            var capturedCallback,\n                promise = mobileServices.Platform.async(function (callback) {\n                    capturedCallback = callback;\n                })();\n            return {\n                promise: promise,\n                fulfill: function (val) { capturedCallback(null, val); },\n                reject: function (err) { capturedCallback(ensureNotNull(err)); }\n            };\n        }\n    };\n\npromiseTests(adapter, function () { /* Output goes to console */ });"
  },
  {
    "path": "sdk/Javascript/test/web/tests/unit/push.js",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n$testGroup('Push',\n\n    /* deleteRegistrationWithName */\n\n    $test('Push.apns success')\n    .description('Verify apns object can be retrieved')\n    .tag('apns')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.fail('No http call should have been made');\n            callback(null, { status: 500, responseText: 'Bad Test!' });\n        });\n\n        try {\n        \tvar apns = client.push.apns;\n        \t$assert.isTrue(typeof apns == \"object\");\n        \t$assert.isTrue(typeof apns.registerNative == \"function\");\n        \t$assert.isTrue(typeof apns.registerTemplate == \"function\");\n        \t$assert.isTrue(typeof apns.unregisterNative == \"function\");\n        \t$assert.isTrue(typeof apns.unregisterTemplate == \"function\");\n        \t$assert.isTrue(typeof apns.unregisterAll == \"function\");\n        } catch (e) {\n        \t$assert.fail('unexpected error');\n        }\n    }),\n\n    $test('apns.register uppercases token')\n    .description('Verify apns device token is uppercased in calls')\n    .tag('apns')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/push/registrations?platform=apns&deviceId=123456ABCDEFG');\n            callback(null, { status: 500, responseText: 'Stop the chain' });\n        });\n\n        return client.push.apns.registerNative('123456abcdefg').then(null, function (error) {\n            $assert.areEqual(error.response.responseText, 'Stop the chain');\n        });\n    }),\n\n\n    $test('Push.gcm success')\n    .description('Verify gcm object can be retrieved')\n    .tag('gcm')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.fail('No http call should have been made');\n            callback(null, { status: 500, responseText: 'Bad Test!' });\n        });\n\n        try {\n        \tvar gcm = client.push.gcm;\n        \t$assert.isTrue(typeof gcm == \"object\");\n        \t$assert.isTrue(typeof gcm.registerNative == \"function\");\n        \t$assert.isTrue(typeof gcm.registerTemplate == \"function\");\n        \t$assert.isTrue(typeof gcm.unregisterNative == \"function\");\n        \t$assert.isTrue(typeof gcm.unregisterTemplate == \"function\");\n        \t$assert.isTrue(typeof gcm.unregisterAll == \"function\");\n        } catch (e) {\n        \t$assert.fail('unexpected error');\n        }\n    })\n);"
  },
  {
    "path": "sdk/Javascript/test/winJS/Microsoft.WindowsAzure.Mobile.WinJS.Test.jsproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <ToolsPath>$(MSBuildProjectDirectory)\\..\\..\\tools</ToolsPath>\n  </PropertyGroup>\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"BuildTools|AnyCPU\">\n      <Configuration>BuildTools</Configuration>\n      <Platform>AnyCPU</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"BuildTools|ARM\">\n      <Configuration>BuildTools</Configuration>\n      <Platform>ARM</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"BuildTools|x64\">\n      <Configuration>BuildTools</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"BuildTools|x86\">\n      <Configuration>BuildTools</Configuration>\n      <Platform>x86</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|AnyCPU\">\n      <Configuration>Debug</Configuration>\n      <Platform>AnyCPU</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|ARM\">\n      <Configuration>Debug</Configuration>\n      <Platform>ARM</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x86\">\n      <Configuration>Debug</Configuration>\n      <Platform>x86</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|AnyCPU\">\n      <Configuration>Release</Configuration>\n      <Platform>AnyCPU</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|ARM\">\n      <Configuration>Release</Configuration>\n      <Platform>ARM</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x86\">\n      <Configuration>Release</Configuration>\n      <Platform>x86</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>96b18d27-dff3-47a2-835b-ef1e6af1a39c</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\$(WMSJSProjectDirectory)\\Microsoft.VisualStudio.$(WMSJSProject).Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\$(WMSJSProjectDirectory)\\Microsoft.VisualStudio.$(WMSJSProject).props\" />\n  <PropertyGroup>\n    <TargetPlatformIdentifier>Windows</TargetPlatformIdentifier>\n    <TargetPlatformVersion>8.0</TargetPlatformVersion>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <PackageCertificateKeyFile>Microsoft.Azure.Zumo.Windows.WinJS.Test_TemporaryKey.pfx</PackageCertificateKeyFile>\n    <PackageCertificateThumbprint>F2898C88F4280EC05ED71A9D3C1A457722594B4B</PackageCertificateThumbprint>\n  </PropertyGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n    <Content Include=\"default.html\" />\n    <Content Include=\"generated\\Tests.js\" />\n    <Content Include=\"images\\logo.png\" />\n    <Content Include=\"images\\smalllogo.png\" />\n    <Content Include=\"images\\splashscreen.png\" />\n    <Content Include=\"images\\storelogo.png\" />\n    <Content Include=\"js\\default.js\" />\n    <Content Include=\"css\\default.css\" />\n    <Content Include=\"js\\MobileServices.intellisense.js\" />\n    <Content Include=\"js\\MobileServices.Internals.js\" />\n    <Content Include=\"js\\MobileServices.pri\" />\n    <Content Include=\"Tests.library\" />\n    <Content Include=\"tests\\functional\\basics.js\" />\n    <Content Include=\"tests\\functional\\blogging.js\" />\n    <Content Include=\"tests\\functional\\dates.js\" />\n    <Content Include=\"tests\\functional\\mobileServiceTable.Functional.js\" />\n    <Content Include=\"tests\\functional\\todo.js\" />\n    <Content Include=\"tests\\TestFramework.js\" />\n    <Content Include=\"tests\\TestInterface.js\" />\n    <Content Include=\"tests\\unit\\extensions.js\" />\n    <Content Include=\"tests\\unit\\localStorageManager.js\" />\n    <Content Include=\"tests\\unit\\mobileServicesClient.js\" />\n    <Content Include=\"tests\\unit\\mobileServicesClient._request.js\" />\n    <Content Include=\"tests\\unit\\mobileServiceTables.js\" />\n    <Content Include=\"tests\\unit\\pushHttpClient.js\" />\n    <Content Include=\"tests\\unit\\registrationManager.js\" />\n    <Content Include=\"tests\\unit\\validate.js\" />\n    <Content Include=\"tests\\utilities\\constants.js\" />\n    <Content Include=\"tests\\utilities\\TableHelper.js\" />\n    <Content Include=\"tests\\winJsOnly\\push.js\" />\n    <None Include=\"Microsoft.Azure.Zumo.Windows.WinJS.Test_TemporaryKey.pfx\" />\n  </ItemGroup>\n  <ItemGroup>\n    <SDKReference Include=\"Microsoft.WinJS.1.0, Version=1.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\framework\\Microsoft.WindowsAzure.Mobile.WinJS.TestFramework.csproj\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\$(WMSJSProjectDirectory)\\Microsoft.VisualStudio.$(WMSJSProject).targets\" />\n  <!-- Setup our JS Module system -->\n  <UsingTask TaskName=\"Microsoft.WindowsAzure.Mobile.JSBuild.MergeJSModules\" AssemblyFile=\"$(ToolsPath)\\Microsoft.WindowsAzure.Mobile.JSBuild.dll\" />\n  <UsingTask TaskName=\"Microsoft.WindowsAzure.Mobile.JSBuild.CopyAndCheckout\" AssemblyFile=\"$(ToolsPath)\\Microsoft.WindowsAzure.Mobile.JSBuild.dll\" />\n  <!-- Create single .JS files -->\n  <Target Name=\"CreateTestLibrary\">\n    <!-- Get dependencies from src project -->\n    <Message Importance=\"high\" Text=\"Copying over dependencies from the src project\" />\n    <Copy SourceFiles=\"..\\..\\src\\Generated\\MobileServices.Internals.js\" DestinationFolder=\"js\" />\n    <Copy SourceFiles=\"..\\..\\src\\MobileServices.intellisense.js\" DestinationFolder=\"js\" />\n    <Copy SourceFiles=\"..\\..\\src\\Generated\\MobileServices.pri\" DestinationFolder=\"js\" />\n    <!-- Merge the modules into a library -->\n    <Message Importance=\"high\" Text=\"Generating Test Library\" />\n    <MergeJSModules LibraryDefinitions=\"Tests.library\" />\n  </Target>\n  <PropertyGroup>\n    <BuildDependsOn>\n      CreateTestLibrary;\n      $(BuildDependsOn);\n    </BuildDependsOn>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "sdk/Javascript/test/winJS/Tests.library",
    "content": "﻿<Library\n  Path=\"generated\\Tests.js\"\n  Copyright=\"Copyright (c) Microsoft Corporation. All rights reserved.\">\n\n  <Module Path=\"tests\\TestFramework.js\" EntryPoint=\"true\" />\n  <Module Path=\"tests\\TestInterface.js\" />\n  <Module Path=\"tests\\unit\\*.js\" EntryPoint=\"true\" />\n  <Module Path=\"tests\\functional\\*.js\" EntryPoint=\"true\" />\n  <Module Path=\"tests\\winJSOnly\\*.js\" EntryPoint=\"true\" />\n\n  <Module Path=\"tests\\utilities\\*.js\" />\n</Library>\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/css/default.css",
    "content": "﻿body {\n    overflow-y: scroll\n}\n\n#subHeader {\n    margin: 16px 24px 0px 24px;\n}\n\n#header {\n    margin: -8px 24px 8px 24px;\n    color: #0094ff;\n}\n\n#testStatus {\n    margin: 0px 24px;\n    color: #808080;\n}\n\n#testResults {\n    margin: 3px;\n}\n\n#footer {\n    display: none;\n    margin: 10px auto;\n    width: 80%;\n}\n\n#progress {\n    width: 100%;\n}\n\n#footerContent {\n    text-align: center\n}\n\n.testRunEndFailure {\n    color: #ff006e;\n    margin: 25px;\n    text-align: center;\n}\n\n.testRunEndSuccess {\n    color: #2a9e39;\n    margin: 25px;\n    text-align: center;\n}\n\n.testGroup {\n    margin-left: 20px;\n    margin-right: 20px;\n    padding-top: 10px;\n    border-bottom: 1px solid #F0F0F0;\n}\n\n.testMethod {\n    margin-left: 40px;\n    margin-right: 20px;\n    font-weight: normal;\n}\n\n.testMethodName {\n    display: inline-block;\n    min-width: 200px;\n}\n\n.testMethodNamePassed {\n    display: inline-block;\n    min-width: 200px;\n    color: #2a9e39;\n}\n\n.testMethodNameFailed {\n    display: inline-block;\n    min-width: 200px;\n    color: #ff006e;\n}\n\n.testMethodNameIgnored {\n    display: inline-block;\n    min-width: 200px;\n    color:  gray;\n    text-decoration: line-through;\n}\n\n.testMethodDescription {\n    color: gray;\n    margin-left: 5px;\n}\n\n.testMethodLog {\n    margin-left: 60px;\n    margin-right: 20px;\n    font-size: 80%;\n}\n\n.testMethodError {\n    margin-left: 60px;\n    margin-right: 20px;\n    color: #ff006e;\n}\n\n.testMethodIgnore {\n    margin-left: 60px;\n    margin-right: 20px;\n    color: gray;\n    font-size: 80%;\n}\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/default.html",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <title>Microsoft.Azure.Zumo.Windows.WinJS.Test</title>\n\n    <!-- WinJS references -->\n    <link href=\"//Microsoft.WinJS.1.0/css/ui-light.css\" rel=\"stylesheet\" />\n    <script src=\"//Microsoft.WinJS.1.0/js/base.js\"></script>\n    <script src=\"//Microsoft.WinJS.1.0/js/ui.js\"></script>\n\n    <!-- Microsoft.Azure.Zumo.Windows.WinJS.Test references -->\n    <link href=\"/css/default.css\" rel=\"stylesheet\">\n    <script src=\"/js/default.js\"></script>\n    \n    <!-- Unit test references (note that any *.js files in the tests folder\n         will be included in Tests.js) -->\n    <script src=\"/js/MobileServices.Internals.js\"></script>\n    <script src=\"/generated/Tests.js\"></script>\n</head>\n<body>\n    <h3 id=\"subHeader\">PROJECT ZUMO</h3>\n    <h1 id=\"header\">winjs client library unit tests</h1>\n    <h4 id=\"testStatus\"></h4>\n\n    <div id=\"setupFlyout\" data-win-control=\"WinJS.UI.Flyout\">\n        <table>\n            <tr>\n                <td>Runtime Uri:</td>\n                <td><input type=\"text\" id=\"txtRuntimeUri\" /></td>\n            </tr>\n            <tr>\n                <td>Runtime Key:</td>\n                <td><input type=\"text\" id=\"txtRuntimeKey\" /></td>\n            </tr>\n            <tr>\n                <td>Tag Expression:</td>\n                <td><input type=\"text\" id=\"txtTags\" /></td>\n            </tr>\n            <tr>\n                <td>.NET backend</td>\n                <td><input type=\"checkbox\" id=\"chDotNet\" /></td>\n            </tr>\n            <tr>\n                <td colspan=\"2\" style=\"text-align: right\">\n                    <button id=\"btnStartTests\">Start</button>\n                </td>\n            </tr>\n        </table>\n    </div>\n\n    <!-- Display the test results here -->\n    <div id=\"testResults\"></div>\n\n    <!-- Progress bar displayed during the test run -->\n    <div id=\"footer\" style=\"\">\n        <progress id=\"progress\" value=\"1\" max=\"100\"></progress>\n        <h2 id=\"footerContent\">\n            <span id=\"currentTestNumber\"></span> / <span id=\"totalTestNumber\"></span>\n            (with <span id=\"failureNumber\"></span> failures)\n        </h2>\n    </div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/generated/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/js/default.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n(function () {\n    \"use strict\";\n\n    // Handle WebUIApplication.activate instead of WinJS.Application.activated\n    // because it gives us access to initialization arguments which are passed\n    // in by the test launcher (if invoked via the build, etc.).\n    Windows.UI.WebUI.WebUIApplication.addEventListener(\n        'activated',\n        function (eventObject) {\n            // Get initialization arguments and set them on the harness\n            if (eventObject.detail && eventObject.detail[0]) {\n                var args = eventObject.detail[0].arguments;\n                if (args) {\n                    var harnessArgs = JSON.parse(args);\n                    $harness.settings.testResultsServerUrl = harnessArgs.TestServerUri;\n                    $harness.settings.tagExpression = '';\n                    $harness.settings.breakOnStart = harnessArgs.BreakOnStart;\n                    $harness.settings.custom.MobileServiceRuntimeUrl = harnessArgs.RuntimeUri;\n                    $harness.settings.custom.MobileServiceRuntimeKey = harnessArgs.RuntimeKey;\n                    $harness.settings.custom.platform = harnessArgs.platform;\n                }\n            }\n\n            // Start executing the unit tests\n            WinJS.UI.processAll();\n\n            // Setup the test run\n            $showTestSetupUI();\n        });\n    \n    WinJS.Application.start();\n})();\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\">\n  <Identity Name=\"WinJSTest\" Version=\"1.0.0.0\" Publisher=\"CN=MobileServices\" />\n  <Properties>\n    <DisplayName>Microsoft.Azure.Zumo.Windows.WinJS.Test</DisplayName>\n    <PublisherDisplayName>Mobile Services</PublisherDisplayName>\n    <Logo>images\\storelogo.png</Logo>\n  </Properties>\n  <Prerequisites>\n    <OSMinVersion>6.2.0</OSMinVersion>\n    <OSMaxVersionTested>6.2.0</OSMaxVersionTested>\n  </Prerequisites>\n  <Resources>\n    <Resource Language=\"x-generate\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"App\" StartPage=\"default.html\">\n      <VisualElements DisplayName=\"Microsoft.Azure.Zumo.Windows.WinJS.Test\" Logo=\"images\\logo.png\" SmallLogo=\"images\\smalllogo.png\" Description=\"Microsoft.Azure.Zumo.Windows.WinJS.Test\" ForegroundText=\"light\" BackgroundColor=\"#464646\">\n        <DefaultTile ShowName=\"allLogos\" />\n        <SplashScreen Image=\"images\\splashscreen.png\" />\n      </VisualElements>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "sdk/Javascript/test/winJS/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"MSBuildTasks\" version=\"1.4.0.56\" targetFramework=\"win\" />\n</packages>"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/TestFramework.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n// Define the WinJS interface to the test framework (to wrap some of the more\n// awkward bits of WinRT interop).\n\n// Most of the definitions are defined globally with short $foo names so it's\n// very easy to write tests.\n\n// Declare JSHint globals\n/*global window:false, Microsoft:false, MobileServiceClient:false, WinJS:false */\n\n// Expose formatting\nglobal.$fmt = function (format) {\n    /// <summary>\n    /// Format a string.\n    /// </summary>\n    /// <param name=\"format\" type\"string\">The string format.</param>\n    /// <param parameterArray=\"true\" elementType=\"Object\">Arguments.</param>\n    /// <returns type=\"String\">The formatted string.</returns>\n    var formatter = Microsoft.Azure.Zumo.Win8.Test.WinJS.Formatter;\n    switch (arguments.length) {\n        case 0:\n        case 1:\n            return format;\n        case 2:\n            return formatter.format(format, arguments[1]);\n        case 3:\n            return formatter.format(format, arguments[1], arguments[2]);\n        case 4:\n            return formatter.format(format, arguments[1], arguments[2], arguments[3]);\n        case 5:\n            return formatter.format(format, arguments[1], arguments[2], arguments[3], arguments[4]);\n        case 6:\n            return formatter.format(format, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n        default:\n            throw $fmt('Cannot format {0} arguments!', arguments.length);\n    }\n};\n\n// Expose assertions\nglobal.$assert = Microsoft.Azure.Zumo.Win8.Test.Assert;\n\n// It'd be nice to add a throws method to $assert, but WinRT objects marshalled\n// into WinJS don't allow expando properties...\nglobal.$assertThrows = function (action, verify, message) {\n    /// <summary>\n    /// Ensure the action fails.\n    /// </summary>\n    /// <param name=\"action\" type=\"Function\">\n    /// The action that should fail when executed.\n    /// </param>\n    /// <param name=\"verify\" type=\"Function\" optional=\"true\">\n    /// A function which can validate the exception.\n    /// </param>\n    /// <param name=\"message\" type=\"String\">\n    /// A helpful error message if the action doesn't fail.\n    /// </param>\n    /// <remarks>\n    /// This is implemented here instead of the static Assert class because\n    /// the interop won't allow us to pass/invoke functions across language\n    /// boundaries without uglier workarounds.\n    /// </remarks>\n\n    var thrown = true;\n    try {\n        action();\n        thrown = false;\n    } catch (ex) {\n        if (verify) {\n            verify(ex);\n        }\n    }\n\n    if (!thrown) {\n        $assert.fail(message || 'Should have failed!');\n    }\n};\n\n// Define the global test harness (this should really only be used by the\n// application activation to pass initialization arguments)\nvar harness = new Microsoft.Azure.Zumo.Win8.Test.TestHarness();\nglobal.$harness = harness;\n\n// Setup the test interface\nharness.reporter = require('TestInterface').Reporter;\n\nglobal.$testGroup = function (name) {\n    /// <summary>\n    /// Declare a new test group.\n    /// </summary>\n    /// <param name=\"name\" type=\"String\">Name of the test group.</param>\n    /// <param parameterArray=\"true\" elementType=\"Object\">\n    /// The tests (declared via $test) in this test group.  They can also be\n    /// provided via group.test()\n    /// </param>\n    /// <returns type=\"Microsoft.Azure.Zumo.Win8.Test.TestGroup\">\n    /// The new test group's fluent wrapper.\n    /// </returns>\n\n    // Create the group and add it to the test harness\n    var group = new Microsoft.Azure.Zumo.Win8.Test.TestGroup();\n    group.name = name;\n    harness.groups.append(group);\n\n    // Add the actual Microsoft.Azure.Zumo.Win8.Test.TestMethods to the\n    // group by unwrapping them\n    for (var i = 1; i < arguments.length; i++) {\n        group.methods.append(arguments[i].getTest());\n    }\n\n    // Create a simple fluent interface for defining other attributes of the\n    // test group\n    var wrapper = {\n        getGroup: function () {\n            /// <summary>\n            /// Unwrap the group and return the core\n            /// Microsoft.Azure.Zumo.Win8.Test.TestGroup.\n            /// </summary>\n            /// <returns type=\"Microsoft.Azure.Zumo.Win8.Test.TestGroup\">\n            /// The test group.\n            /// </returns>\n            return group;\n        },\n\n        exclude: function (reason) {\n            /// <summary>\n            /// Mark the group as excluded from this test run.\n            /// </summary>\n            /// <param name=\"reason\" type=\"String\">\n            /// The reason this group was excluded.\n            /// </param>\n            /// <returns type=\"Object\">The test group wrapper.</returns>\n\n            // Exclude the existing tests\n            group.exclude(reason);\n\n            // Cache the reason for excluding so it can be applied to future\n            // tests as they are added\n            wrapper.excludeReason = reason;\n\n            return wrapper;\n        },\n\n        tag: function () {\n            /// <summary>\n            /// Mark the test group with the given tag.\n            /// </summary>\n            /// <returns type=\"Objet\">The test group wrapper.</returns>\n\n            for (var i = 0; i < arguments.length; i++) {\n                group.tags.append(arguments[i]);\n            }\n\n            return wrapper;\n        },\n\n        functional: function() {\n            /// <summary>\n            /// Mark the test group as comprised of functional tests.\n            /// </summary>\n            /// <returns type=\"Objet\">The test group wrapper.</returns>\n\n            return wrapper.tag('Functional');\n        },\n\n        tests: function () {\n            /// <summary>\n            /// Add tests to the test group.\n            /// </summary>\n            /// <param parameterArray=\"true\" elementType=\"Object\">\n            /// The tests (declared via $test) in this test group.\n            /// </param>\n            /// <returns type=\"Microsoft.Azure.Zumo.Win8.Test.TestGroup\">\n            /// The test group wrapper.\n            /// </returns>\n\n            // Add the actual Microsoft.Azure.Zumo.Win8.Test.TestMethods to\n            // the group by unwrapping them\n            for (var i = 0; i < arguments.length; i++) {\n                var test = arguments[i].getTest();\n                group.methods.append(test);\n\n                // If the test group was marked as excluded before this test\n                // was added, exclude it too\n                if (wrapper.excludeReason && !test.excluded) {\n                    test.exclude(wrapper.excludeReason);\n                }\n            }\n            return wrapper;\n        }\n    };\n\n    return wrapper;\n};\n\nglobal.$test = function (name) {\n    /// <summary>\n    /// Declare a new test method.\n    /// </summary>\n    /// <param name=\"name\" type=\"String\">The name of the test.</param>\n    /// <returns type=\"Object\">\n    /// The new test method (wrapped in an object with helpful method for\n    /// defining other attributes of the test).\n    /// </returns>\n\n    var test = new Microsoft.Azure.Zumo.Win8.Test.TestMethod();\n    test.name = name;\n\n    // Create a simple fluent interface for defining other attributes of the\n    // test method (including the actual action to test)\n    var wrapper = {\n        getTest: function () {\n            /// <summary>\n            /// Unwrap the test and return the core\n            /// Microsoft.Azure.Zumo.Win8.Test.TestMethod.\n            /// </summary>\n            /// <returns type=\"Microsoft.Azure.Zumo.Win8.Test.TestMethod\">\n            /// The test method.\n            /// </returns>\n            return test;\n        },\n\n        description: function (description) {\n            /// <summary>\n            /// Set the description of the test method.\n            /// </summary>\n            /// <param name=\"description\" type=\"String\">\n            /// A description of the test method.\n            /// </param>\n            /// <returns type=\"Object\">The test method wrapper.</returns>\n            test.description = description;\n            return wrapper;\n        },\n\n        exclude: function (reason) {\n            /// <summary>\n            /// Mark the test method as excluded from this test run.\n            /// </summary>\n            /// <param name=\"reason\" type=\"String\">\n            /// The reason this test was excluded.\n            /// </param>\n            /// <returns type=\"Object\">The test method wrapper.</returns>\n            test.exclude(reason);\n            return wrapper;\n        },\n\n        functional: function () {\n            /// <summary>\n            /// Mark the test method as a functional test.\n            /// </summary>\n            /// <returns type=\"Objet\">The test group wrapper.</returns>\n\n            return wrapper.tag('Functional');\n        },\n\n        tag: function (tag) {\n            /// <summary>\n            /// Mark the test method with the given tag.\n            /// </summary>\n            /// <returns type=\"Objet\">The test group wrapper.</returns>\n\n            for (var i = 0; i < arguments.length; i++) {\n                test.tags.append(arguments[i]);                \n            }\n\n            return wrapper;\n        },\n\n        check: function (action) {\n            /// <summary>\n            /// Provide the actual test method to invoke.\n            /// </summary>\n            /// <param name=\"action\" type=\"Function\">\n            /// The action to invoke which will perform the tests.\n            /// </param>\n            /// <returns type=\"Object\">The test method wrapper.</returns>\n            \n            // We have to wrap the test in an async operation so it can be\n            // invoked from C#.\n            var delegate = new Microsoft.Azure.Zumo.Win8.Test.WinJS.PromiseAsyncExecution();\n            delegate.onexecute = function (args) {\n                try {\n                    // Invoke the action and return control to the test\n                    // framework when complete\n                    action();\n                    window.setTimeout(function () { args.complete(); }, 0);\n                } catch (e) {\n                    window.setTimeout(function () { args.error(e.toString()); }, 0);\n                }\n            };\n            test.test = delegate;\n            return wrapper;\n        },\n        checkAsync: function (getPromise) {\n            /// <summary>\n            /// Provide the actual async test method to invoke.\n            /// </summary>\n            /// <param name=\"getPromise\" type=\"Function\">\n            /// A function which when invoked will return a new async Promise\n            /// which the test harness can wait to complete before continuing.\n            /// </param>\n            /// <returns type=\"Object\">The test method wrapper.</returns>\n\n            var delegate = new Microsoft.Azure.Zumo.Win8.Test.WinJS.PromiseAsyncExecution();\n            delegate.onexecute = function (args) {\n                // Get the promise (and start the async operation) and return\n                // control to the test harness when it's finished.\n                getPromise().done(\n                    function () { args.complete(); },\n                    function (err) { args.error(err.toString()); });\n            };\n            test.test = delegate;\n            return wrapper;\n        }\n    };\n\n    return wrapper;\n};\n\nglobal.$log = function (message) {\n    /// <summary>\n    /// Log a message.\n    /// </summary>\n    /// <param name=\"message\" type=\"String\">The message.</param>\n\n    harness.log(message);\n};\n\nglobal.$run = function () {\n    /// <summary>\n    /// Start executing the tests.\n    /// </summary>\n    harness.runAsync();\n};\n\nglobal.$getClient = function () {\n    /// <summary>\n    /// Create a new client for functional tests.\n    /// </summary>\n    /// <returns type=\"MobileServiceClient\">MobileServiceClient</returns>\n\n    global.$assert.isTrue(\n        global.$harness.settings.custom.MobileServiceRuntimeUrl,\n        '$getClient should only be called from functional tests!');\n    return new WindowsAzure.MobileServiceClient(global.$harness.settings.custom.MobileServiceRuntimeUrl, global.$harness.settings.custom.MobileServiceRuntimeKey);\n};\n\nglobal.$chain = function () {\n    /// <summary>\n    /// Given a list of functions that return promises, return a promise that\n    /// will chain them all together sequentially.\n    /// </summary>\n    var actions = Array.prototype.slice.call(arguments);\n    return new WinJS.Promise(function (complete, err) {\n        var error = function (ex) {\n            err(ex.responseText || JSON.stringify(ex));\n        };\n        var exec = function (prev) {\n            if (actions.length > 0) {\n                var next = actions.shift();\n                try {\n                    var result = next(prev);\n                    if (result) {\n                        result.then(function (results) {\n                            exec(results);\n                        }, error);\n                    } else if (actions.length === 0) {\n                        complete();\n                    } else {\n                        error('$chain expects all actions except the last to return another Promise');\n                    }\n                } catch (ex) {\n                    error(ex);\n                }\n            } else {\n                complete();\n            }\n        };\n        exec();\n    });\n};\n\nglobal.$isDotNet = function() {\n    /// <summary>\n    /// Returns true if .NET runtime is checked.\n    /// </summary>\n    /// <returns type=\"MobileServiceClient\">MobileServiceClient</returns>\n\n    return global.$harness.settings.custom.platform === 'dotNet';\n};\n\nglobal.$getTableHelper = function () {\n    /// <summary>\n    /// Create table helper for functional tests.\n    /// </summary>\n    /// <returns type=\"MobileServiceClient\">MobileServiceClient</returns>\n\n    global.$assert.isTrue(\n        global.$harness.settings.custom.MobileServiceRuntimeUrl,\n        'TableHelper should only be called from functional tests!');\n    return new (require(\"TableHelper\")).TableHelper(global.$isDotNet);\n};"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/TestInterface.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\generated\\Tests.js\" />\n\n// Provide an implementation of the ITestResporter interface that creates HTML\n// markup in a WinJS application.\n\n// Declare JSHint globals\n/*global document:false, window: false, Microsoft:false, $harness:false, $run:false */\n\n// Require the TestFramework module so we can pull in various utilities like\n// $fmt to make generating the interface markup easier.\nrequire('TestFramework');\n\nfunction getResultsElement() {\n    return document.getElementById('testResults');\n}\n\nfunction write(markup) {\n    /// <summary>\n    /// Add some HTML content to the end of interface results.\n    /// </summary>\n    /// <param name=\"markup\" type=\"String\">HTML content to write.</param>\n\n    var element = getResultsElement();\n    if (element) {\n        element.innerHTML += markup;\n        document.getElementById('footer').scrollIntoView();\n    }\n}\n\nfunction tag(element, styleOrContent, content) {\n    /// <summary>\n    /// Simple helper to generate basic markup for a tag with optional style\n    /// settings.\n    /// </summary>\n    /// <param name=\"element\" type=\"String\">Tag to create.</param>\n    /// <param name=\"styleOrContent\" type=\"String\">\n    /// Either optional style settings or the element content.\n    /// </param>\n    /// <param name=\"content\" type=\"String\">The content of the element.</param>\n    /// <returns type=\"String\">The generated markup.</returns>\n\n    var className = styleOrContent;\n    if (content === null || content === undefined) {\n        content = styleOrContent;\n        className = null;\n    }\n\n    var markup = $fmt('<{0}', element);\n    if (className) {\n        markup += $fmt(' class=\"{0}\"', className);\n    }\n    markup += $fmt('>{0}</{1}>', content, element);\n    return markup;\n}\n\nvar reporter = new Microsoft.Azure.Zumo.Win8.Test.WinJS.TestReporter();\n\nreporter.onexecutestartrun = function (args) {\n    document.getElementById('currentTestNumber').innerText = args.progress;\n    document.getElementById('totalTestNumber').innerText = args.count;\n    document.getElementById('failureNumber').innerText = args.failures;\n    document.getElementById('progress').value = 1;\n    document.getElementById('footer').style.display = 'block';\n};\n\nreporter.onexecuteendrun = function (args) {\n    var shouldClose = false;\n\n    document.getElementById('footer').style.display = 'none';\n    if (args.failures > 0) {\n        write(tag('h2', 'testRunEndFailure', $fmt('{0}/{1} tests failed!', args.failures, args.count)));\n    } else {\n        write(tag('h2', 'testRunEndSuccess', $fmt('{0} tests passed!', args.count)));\n        shouldClose = true;\n    }\n\n    // Close the app after 5 seconds on a successful run or if we're running\n    // the tests automatically as part of the build\n    //if (shouldClose || $harness.testResultsServerUrl !== undefined) {\n    //    window.setTimeout(function () { window.close(); }, 5000);\n    //}\n};\n\nreporter.onexecuteprogress = function (args) {\n    document.getElementById('currentTestNumber').innerText = args.progress;\n    document.getElementById('failureNumber').innerText = args.failures;\n    document.getElementById('progress').value = args.progress / args.count * 100;\n};\n\nreporter.onexecutestartgroup = function (args) {\n    write(tag('h2', 'testGroup', $fmt('{0} tests', args.name)));\n};\n\nreporter.onexecutestarttest = function (args) {\n    write(tag('h3', 'testMethod',\n        tag('span', 'testMethodName', args.name) +\n        tag('span', 'testMethodDescription', args.description)));\n    if (args.excluded) {\n        write(tag('h4', 'testMethodIgnore', $fmt('Ignored: {0}', args.excludeReason)));\n    }\n};\n\nreporter.onexecuteendtest = function (args) {\n    var parent = getResultsElement();\n    var index = parent.childElementCount - 1;\n    while (index >= 0) {\n        var element = parent.children[index];\n        if (element.nodeName == 'H3') {\n            if (args.excluded) {\n                element.firstChild.className = 'testMethodNameIgnored';\n            } else if (args.passed) {\n                element.firstChild.className = 'testMethodNamePassed';\n            } else {\n                element.firstChild.className = 'testMethodNameFailed';\n            }\n            break;\n        }\n        index--;\n    }\n};\n\nreporter.onexecutelog = function (args) {\n    write(tag('h4', 'testMethodLog', args.message));\n};\n\nreporter.onexecuteerror = function (args) {\n    write(tag('h4', 'testMethodError', $fmt('Error: {0}', args.message)));\n};\n\nreporter.onexecutestatus = function (args) {\n    var testStatus = document.getElementById('testStatus');\n    testStatus.innerText = args.message;\n};\n\n// Export the TestReporter for use by the harness\nexports.Reporter = reporter;\n\n// Expose the global setup function\nglobal.$showTestSetupUI = function () {\n    var setupFlyout = document.getElementById('setupFlyout');\n    var txtRuntimeUri = document.getElementById('txtRuntimeUri');\n    var txtRuntimeKey = document.getElementById('txtRuntimeKey');\n    var txtTags = document.getElementById('txtTags');\n    var chDotNet = document.getElementById('chDotNet');\n    var btnStartTests = document.getElementById('btnStartTests');\n    var testResults = document.getElementById('testResults');\n    var show = function () {\n        setupFlyout.winControl.show(testResults, \"bottom\");\n    };\n\n    // Delay starting the unit tests if we're supposed to break before\n    // we start (so a debugger can attach to the process)\n    if (!$harness.settings.breakOnStart) {\n        setupFlyout.winControl.hide();\n        $run();\n    } else {\n        // Have any click on the background show the flyout so it won't\n        // just disappear all the time (modality would be nice)\n        window.onclick = show;\n\n        // Fill the UI with the latest values\n        txtRuntimeUri.value = $harness.settings.custom.MobileServiceRuntimeUrl || '';\n        txtRuntimeKey.value = $harness.settings.custom.MobileServiceRuntimeKey || '';\n        txtTags.value = $harness.settings.tagExpression || '';\n        chDotNet.checked = $harness.settings.custom.platform === 'dotNet';\n\n        show();\n        btnStartTests.onclick = function () {\n            window.onclick = null;\n\n            $harness.settings.custom.MobileServiceRuntimeUrl = txtRuntimeUri.value;\n            $harness.settings.custom.MobileServiceRuntimeKey = txtRuntimeKey.value;\n            $harness.settings.tagExpression = txtTags.value;\n            $harness.settings.custom.platform = chDotNet.checked ? 'dotNet' : 'node';\n            setupFlyout.winControl.hide();\n            $run();\n        };\n    }\n};"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/functional/basics.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\MobileServices.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n// Delcare JSHint globals\n/*global MobileServiceClient:false */\n\n$testGroup('Functional Basics')\n    .functional()\n    .tests(\n        $test('Create Client')\n        .description('Verify creation of the client with the server uri')\n        .check(function () {\n            $getClient();\n        }),\n\n        $test('Get elements')\n        .description('Request some elements from the table and make sure we get something')\n        .checkAsync(function () {\n            var client = $getClient();\n            var books = client.getTable('books');\n            return books.read().then(function (results) {\n                $assert.isTrue(results, 'expected results!');\n                $assert.isTrue(results.length > 0, 'expected non-empty results!');\n            });\n        }),\n\n        $test('Simple query')\n        .description('Perform a simple query with a few operations')\n        .checkAsync(function () {\n            var client = $getClient();\n            var books = client.getTable('books');\n            return books.select('price').where('price gt 0').orderBy('price').take(5).read().then(function (results) {\n                $assert.isTrue(results, 'expected results!');\n                $assert.isTrue(results.length, 5, 'expected 5 results!');\n                $assert.isTrue(results[0].title === undefined, 'ensure selected fields');\n                $assert.isTrue(results[0].price <= results[1].price, 'ensure ordered');\n            });\n        }),\n\n        $test('offline').exclude('This test will only pass when there is no network connection!')\n        .description('Verify the offline error message.')        \n        .checkAsync(function() {\n            var client = new WindowsAzure.MobileServiceClient('http://www.test.com');\n            var books = client.getTable('books');\n            return books.read().then(function (results) {\n                $assert.fail('Should have failed - please make sure there is no network connection for this test.');\n            }, function(error) {\n                $assert.areEqual(error.message, 'Unexpected connection failure.');\n                $assert.areEqual(error.request.status, 0);\n            });\n        })\n    );\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/functional/blogging.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\MobileServices.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n$testGroup('Blogging')\n    .functional()\n    .tests(\n        $test('UseBlog')\n        .description('Create and manipulate posts/comments')\n        .checkAsync(function () {\n            var client = $getClient();\n            var postTable = client.getTable('blog_posts');\n            var commentTable = client.getTable('blog_comments');\n            var tableHelper = $getTableHelper();\n            var context = {};\n            return $chain(\n                function () {\n                    $log('Add a few posts and a comment');\n                    return postTable.insert({ title: \"Windows 8\" });\n                },\n                function (post) {\n                    context.post = post;\n                    context.newItems = tableHelper.getNewItems(post.id);\n                    return postTable.insert({ title: \"ZUMO\" });\n                },\n                function (highlight) {\n                    context.newItems = tableHelper.getNewItems(highlight.id);\n                    context.highlight = highlight;\n                    return commentTable.insert({\n                        postid: context.post.id,\n                        name: \"Anonymous\",\n                        commentText: \"Beta runs great\"\n                    });\n                },\n                function () {\n                    return commentTable.insert({\n                        postid: context.highlight.id,\n                        name: \"Anonymous\",\n                        commentText: \"Whooooo\"\n                    });\n                },\n                function () {\n                    return postTable.where(context.newItems).read();\n                },\n                function (items) {\n                    $assert.areEqual(2, items.length);\n\n                    $log('Add another comment to the first post');\n                    return commentTable.insert({ postid: context.post.id, commentText: \"Can't wait\" });\n                },\n                function (opinion) {\n                    $assert.areNotEqual(0, opinion.id);\n                });\n        })\n    );\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/functional/dates.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\MobileServices.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n// Declare JSHint globals\n/*global MobileServiceClient:false, Platform:false */\n\n$testGroup('Dates')\n    .tests(\n        $test('DateUri')\n        .description('Verify the date URI is sent in the correct format')\n        .checkAsync(function () {            \n            var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\");\n            client = client.withFilter(function (req, next, callback) {\n                $assert.areEqual(req.url, \"http://www.windowsazure.com/tables/books?$filter=(date eq datetime'2009-11-21T14:22:59.860Z')\");\n                callback(null, { status: 200, responseText: null });\n            });\n            var table = client.getTable('books');\n            var dateValue = new Date(Date.UTC(2009, 10, 21, 14, 22, 59, 860));\n            return table.where({ date: dateValue }).read();\n        }),\n\n        $test('DateUri - getUTCDate test')\n        .description('Verify query is correct using UTC functions')\n        .checkAsync(function () {\n            var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\");\n            client = client.withFilter(function (req, next, callback) {\n                $assert.areEqual(req.url, \"http://www.windowsazure.com/tables/books?$filter=(day(date) eq 1)\");\n                callback(null, { status: 200, responseText: null });\n            });\n            var table = client.getTable('books');\n            return table.where(function () { return this.date.getUTCDate() === 1; }).read().then(function (results) {\n\n            });\n        }),\n\n        $test('DateUri - getUTCMonth test')\n        .description('Verify query is correct using UTC month functions')\n        .checkAsync(function () {\n            var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\");\n            client = client.withFilter(function (req, next, callback) {\n                $assert.areEqual(req.url, \"http://www.windowsazure.com/tables/books?$filter=((month(date) sub 1) eq 9)\");\n                callback(null, { status: 200, responseText: null });\n            });\n            var table = client.getTable('books');\n            return table.where(function () { return this.date.getUTCMonth() === 9; }).read().then(function (results) {\n\n            });\n        }),\n\n        $test('DateUri - getUTCYear test')\n        .description('Verify query is correct using UTC year functions')\n        .checkAsync(function () {\n            var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\");\n            client = client.withFilter(function (req, next, callback) {\n                $assert.areEqual(req.url, \"http://www.windowsazure.com/tables/books?$filter=(year(date) eq 2013)\");\n                callback(null, { status: 200, responseText: null });\n            });\n            var table = client.getTable('books');\n            return table.where(function () { return this.date.getUTCFullYear() === 2013; }).read().then(function (results) {\n\n            });\n        }),\n\n        $test('DateUri - getYear test')\n        .description('Verify query is correct using get year function')\n        .checkAsync(function () {\n            var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\");\n            client = client.withFilter(function (req, next, callback) {\n                $assert.areEqual(req.url, \"http://www.windowsazure.com/tables/books?$filter=((year(date) sub 1900) eq 113)\");\n                callback(null, { status: 200, responseText: null });\n            });\n            var table = client.getTable('books');\n            return table.where(function () { return this.date.getYear() === 113; }).read().then(function (results) {\n\n            });\n        }),\n\n        $test('InsertAndQuery')\n        .description('Insert a date, query for it, and verify the result')\n        .functional()\n        .checkAsync(function () {\n            var client = $getClient().withFilter(function (req, next, callback) {\n                $log($fmt('>>> {0} {1}   {2}', req.type, req.url, req.data));\n                next(req, function (err, rsp) {\n                    $log($fmt('<<< {0} {1}   {2}', rsp.status, rsp.statusText, rsp.responseText));\n                    callback(err, rsp);\n                });\n            });\n\n            var table = client.getTable('test_table');\n            var dateValue = new Date(2009, 10, 21, 14, 22, 59, 860);\n            $log($fmt('Start: {0}', dateValue));\n\n            return $chain(\n                function () {\n                    $log('Inserting instance');\n                    return table.insert({ date: dateValue });\n                },\n                function (item) {\n                    $log('Verifying insert response date');\n                    $assert.areEqual(dateValue.valueOf(), item.date.valueOf());\n\n                    $log('Querying for instance');\n                    return table.where({ date: dateValue }).where($isDotNet() ? 'Id eq \\'' + item.id + '\\'' : 'id ge ' + item.id).read();\n                },\n                function (items) {\n                    $log('Verifying query response date');\n                    $assert.areEqual(1, items.length);\n                    $assert.areEqual(dateValue.valueOf(), items[0].date.valueOf());\n                    $log($fmt('Finish: {0}', items[0].date));\n                });\n        })\n    );"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/functional/mobileServiceTable.Functional.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\MobileServices.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n// Declare JSHint globals\n/*global MobileServiceClient:false, Platform:false */\n\nvar testData = require(\"constants\");\n\nfunction emptyTable(table) {\n    return table.read().then(function (results) {\n        var deletes = [];\n        results.forEach(function (result) {\n            deletes.push(function () {\n                return table.del(result);\n            });\n        });\n        return $chain.apply(this, deletes);\n    });\n}\n\n$testGroup('Mobile Service Table Tests')\n    .functional()\n    .tests(\n        $test('AsyncTableOperationsWithValidStringIdAgainstStringIdTable')\n        .tag('stringId')\n        .description('Verify the overall flow of a string Id table')\n        .checkAsync(function () {\n            var client = $getClient();\n            var table = client.getTable('StringIdJavascriptTable');\n\n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function() {\n                    var singleIdTests = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        singleIdTests.push(function () {\n                            return $chain(\n                                function () {\n                                    $log('testing id: ' + testId);\n                                    return table.insert({ id: testId, string: 'Hey' });\n                                },\n                                function (item) {\n                                    $assert.areEqual(testId, item.id);\n\n                                    return table.read();\n                                },\n                                function (items) {\n                                    $assert.areEqual(1, items.length);\n                                    $assert.areEqual(testId, items[0].id);\n                                    $assert.areEqual('Hey', items[0].string);\n\n                                    return table.where({ id: testId }).read();\n                                },\n                                function (items) {\n                                    $assert.areEqual(1, items.length);\n                                    $assert.areEqual(testId, items[0].id);\n                                    $assert.areEqual('Hey', items[0].string);\n\n                                    return table.select('id', 'string').read();\n                                }, function (items) {\n                                    $assert.areEqual(1, items.length);\n                                    $assert.areEqual(testId, items[0].id);\n                                    $assert.areEqual('Hey', items[0].string);\n\n                                    return table.lookup(testId);\n                                }, function (item) {\n                                    $assert.areEqual(testId, item.id);\n                                    $assert.areEqual('Hey', item.string);\n\n                                    item.string = \"What?\";\n                                    return table.update(item);\n                                }, function (item) {\n                                    $assert.areEqual(testId, item.id);\n                                    $assert.areEqual('What?', item.string);\n\n                                    item = { id: testId, string: 'hey' };\n\n                                    return table.refresh(item);\n                                }, function (item) {\n                                    $assert.areEqual(testId, item.id);\n                                    $assert.areEqual('What?', item.string);\n\n                                    return table.read();\n                                }, function (items) {\n                                    $assert.areEqual(1, items.length);\n                                    $assert.areEqual(testId, items[0].id);\n                                    $assert.areEqual('What?', items[0].string);\n\n                                    return table.del(items[0]);\n                                });\n                        });\n                    });\n                    return $chain.apply(null, singleIdTests);\n                });\n        }),\n\n        $test('OrderingReadAsyncWithValidStringIdAgainstStringIdTable')\n        .checkAsync(function () {\n            var client = $getClient();\n            var table = client.getTable('StringIdJavascriptTable');\n\n            return $chain(\n                function () {\n                    $log('Clean up our data');\n                    return emptyTable(table);\n                },\n                function () {\n                    $log('Initialize our data');\n                    var inserts = [];\n                    [\"a\", \"b\", \"C\", \"_A\", \"_B\", \"_C\", \"1\", \"2\", \"3\"].forEach(function (testId) {\n                        inserts.push(function (result) {\n                            return table.insert({ id: testId, string: 'Hey' });\n                        });\n                    });\n                    return $chain.apply(null, inserts);\n                },\n                function (result) {\n                    $log('sort the data');\n                    return table.orderBy('id').read();\n                },\n                function (items) {\n                    $assert.areEqual(9, items.length);\n                    $assert.areEqual(\"_A\", items[0].id);\n                    $assert.areEqual(\"_B\", items[1].id);\n                    $assert.areEqual(\"_C\", items[2].id);\n                    $assert.areEqual(\"1\", items[3].id);\n                    $assert.areEqual(\"2\", items[4].id);\n                    $assert.areEqual(\"3\", items[5].id);\n                    $assert.areEqual(\"a\", items[6].id);\n                    $assert.areEqual(\"b\", items[7].id);\n                    $assert.areEqual(\"C\", items[8].id);\n\n                    $log('sort the data descending');\n                    return table.orderByDescending('id').read();\n                },\n                function (items) {\n                    $assert.areEqual(9, items.length);\n                    $assert.areEqual(\"_A\", items[8].id);\n                    $assert.areEqual(\"_B\", items[7].id);\n                    $assert.areEqual(\"_C\", items[6].id);\n                    $assert.areEqual(\"1\", items[5].id);\n                    $assert.areEqual(\"2\", items[4].id);\n                    $assert.areEqual(\"3\", items[3].id);\n                    $assert.areEqual(\"a\", items[2].id);\n                    $assert.areEqual(\"b\", items[1].id);\n                    $assert.areEqual(\"C\", items[0].id);\n\n                    return emptyTable(table);\n                });\n        }),\n\n        $test('FilterReadAsyncWithEmptyStringIdAgainstStringIdTable')\n        .checkAsync(function () {\n            var client = $getClient();\n            var table = client.getTable('StringIdJavascriptTable');\n            \n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    $log('Initialize our data');\n                    var inserts = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        inserts.push(function (result) {\n                            return table.insert({ id: testId, string: 'Hey' });\n                        });\n                    });\n                    return $chain.apply(null, inserts);\n                },\n                function () {\n                    $log('verify no results for ids we didn\\'t use');\n                    var testIds = testData.emptyStringIds.concat(testData.invalidStringIds).concat(null),\n                        filters = [];\n                    testIds.forEach(function (testId) {\n                        filters.push(function () {\n                            return table.where({ id: testId }).read().then(function (items) {\n                                $assert.areEqual(items.length, 0);\n                            });\n                        });\n                    });\n                    return $chain.apply(null, filters);\n                },\n                function () {\n                    return emptyTable(table);\n                });\n        }),\n\n        $test('LookupAsyncWithNosuchItemAgainstStringIdTable')\n        .checkAsync(function () {\n            var client = $getClient();\n            var table = client.getTable('StringIdJavascriptTable');\n\n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    $log('Initialize our data');\n                    var inserts = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        inserts.push(function (result) {\n                            return table.insert({ id: testId, string: 'Hey' });\n                        });\n                    });\n                    return $chain.apply(null, inserts);\n                },\n                function () {\n                    $log('Delete our data');\n                    var deletes = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        deletes.push(function () {\n                            return table.del({ id: testId }).then(function (result) {\n                                // Do nothing\n                            }, function (error) {\n                                $assert.fail('Should have suceeded');\n                            });\n                        });\n                    });\n                    return $chain.apply(null, deletes);\n                },\n                function () {\n                    var lookups = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        lookups.push(function () {\n                            return table.lookup(testId).then(function (item) {\n                                $assert.fail('should have failed');\n                            }, function (error) {\n                                $assert.contains(error.message, $isDotNet() ? 'Not Found' : 'does not exist');\n                            });\n                        });\n                    });\n                    return $chain.apply(null, lookups);\n                });\n        }),\n\n        $test('RefreshAsyncWithNoSuchItemAgainstStringIdTable')\n        .checkAsync(function () {\n            var client = $getClient();\n            var table = client.getTable('StringIdJavascriptTable');\n            \n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    $log('Initialize our data');\n                    var inserts = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        inserts.push(function (result) {\n                            return table.insert({ id: testId, string: 'Hey' });\n                        });\n                    });\n                    return $chain.apply(null, inserts);\n                },\n                function () {\n                    var lookups = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        lookups.push(function () {\n                            return table.lookup(testId).then(function (item) {\n                                $assert.areEqual(item.id, testId);\n                            });\n                        });\n                    });\n                    return $chain.apply(null, lookups);\n                },\n                function () {\n                    $log('Delete our data');\n                    var deletes = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        deletes.push(function () {\n                            return table.del({ id: testId }).then(function (result) {\n                                // Do Nothing\n                            }, function (error) {\n                                $assert.fail('Should have suceeded');\n                            });\n                        });\n                    });\n                    return $chain.apply(null, deletes);\n                },\n                function () {\n                    $log('Refresh our data');\n                    var refreshes = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        refreshes.push(function () {\n                            return table.refresh({id: testId, string: 'Hey'}).then(function (result) {\n                                $assert.fail('Should have failed');\n                            }, function (error) {\n                                $assert.contains(error.message, 'Could not get object from response');\n                            });\n                        });\n                    });\n                    return $chain.apply(null, refreshes);\n                });\n        }),\n\n        $test('InsertAsyncWithExistingItemAgainstStringIdTable')\n        .checkAsync(function () {\n            var client = $getClient(),\n                table = client.getTable('StringIdJavascriptTable');\n            \n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    $log('Initialize our data');\n                    var inserts = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        inserts.push(function (result) {\n                            return table.insert({ id: testId, string: 'Hey' });\n                        });\n                    });\n                    return $chain.apply(null, inserts);\n                },\n                function () {\n                    $log('Lookup our data');\n                    var lookups = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        lookups.push(function () {\n                            return table.lookup(testId).then(function (item) {\n                                $assert.areEqual(item.id, testId);\n                            });\n                        });\n                    });\n                    return $chain.apply(null, lookups);\n                },\n                function () {\n                    $log('Insert duplicates into our data');\n                    var inserts = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        inserts.push(function (result) {\n                            return table.insert({ id: testId, string: 'I should really not do this' }).then(function (item) {\n                                $assert.fail('Should have failed');\n                            }, function (error) {\n\n                            });\n                        });\n                    });\n                    return $chain.apply(null, inserts);\n                },\n                function () {\n                    return emptyTable(table);\n                });\n        }),\n\n        $test('UpdateAsyncWithNosuchItemAgainstStringIdTable')\n        .checkAsync(function () {\n            var client = $getClient();\n            var table = client.getTable('StringIdJavascriptTable');\n\n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    $log('Initialize our data');\n                    var inserts = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        inserts.push(function (result) {\n                            return table.insert({ id: testId, string: 'Hey' });\n                        });\n                    });\n                    return $chain.apply(null, inserts);\n                },\n                function () {\n                    $log('Delete our data');\n                    var deletes = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        deletes.push(function () {\n                            return table.del({ id: testId }).then(function (result) {\n                                // Do Nothing\n                            }, function (error) {\n                                $assert.fail('Should have suceeded');\n                            });\n                        });\n                    });\n                    return $chain.apply(null, deletes);\n                },\n                function () {\n                    $log('Update records the don\\'t exist');\n                    var updates = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        updates.push(function () {\n                            return table.update({ id: testId, string: 'Alright!' }).then(function (item) {\n                                $assert.fail('Should have failed.');\n                            }, function (error) {\n                                $assert.contains(error.message, $isDotNet() ? 'Not Found' : 'does not exist');\n                            });\n                        });\n                    });\n                    return $chain.apply(null, updates);\n                });\n        }),\n\n        $test('DeleteAsyncWithNosuchItemAgainstStringIdTable')\n        .checkAsync(function () {\n            var client = $getClient();\n            var table = client.getTable('StringIdJavascriptTable');\n\n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    $log('Initialize our data');\n                    var inserts = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        inserts.push(function (result) {\n                            return table.insert({ id: testId, string: 'Hey' });\n                        });\n                    });\n                    return $chain.apply(null, inserts);\n                },\n                function () {\n                    $log('Verify our data');\n                    var lookups = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        lookups.push(function () {\n                            return table.lookup(testId).then(function (item) {\n                                $assert.areEqual(item.id, testId);\n                            });\n                        });\n                    });\n                    return $chain.apply(null, lookups);\n                },\n                function () {\n                    $log('Delete our data');\n                    var deletes = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        deletes.push(function () {\n                            return table.del({ id: testId }).then(function (result) {\n                                // Do Nothing\n                            }, function (error) {\n                                $assert.fail('Should have suceeded');\n                            });\n                        });\n                    });\n                    return $chain.apply(null, deletes);\n                },\n                function () {\n                    $log('Delete data that doesn\\'t exist');\n                    var deletes = [];\n                    testData.validStringIds.forEach(function (testId) {\n                        deletes.push(function () {\n                            return table.del({ id: testId }).then(function (result) {\n                                $assert.fail('Should have failed');\n                            }, function (error) {\n                                $assert.areEqual(error.request.status, 404);\n                            });\n                        });\n                    });\n                    return $chain.apply(null, deletes);\n                });\n        }),\n\n        $test('AsyncTableOperationsWithIntegerAsStringIdAgainstIntIdTable')\n        .tag('dotNet_not_supported')  //.NET apps don't support integer ids.\n        .checkAsync(function () {\n            var client = $getClient(),\n                table = client.getTable('IntegerIdJavascriptTable'),\n                testId;\n\n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    $log('Insert record');\n                    return table.insert({ string: 'Hey' }).then(function (item) {\n                        testId = item.id;\n                    });\n                },\n                function (item) {\n                    $log('read table');\n                    return table.read();\n                },\n                function (items) {\n                    $assert.areEqual(1, items.length);\n                    $assert.areEqual(testId, items[0].id);\n                    $assert.areEqual(\"Hey\", items[0].string);\n\n                    $log('perform select');\n                    return table.select(function () { this.xid = this.id; this.xstring = this.string; return this; }).read();\n                },\n                function (items) {\n                    $assert.areEqual(1, items.length);\n                    $assert.areEqual(testId, items[0].xid);\n                    $assert.areEqual('Hey', items[0].xstring);\n\n                    $log('perform lookup');\n                    return table.lookup(items[0].xid);\n                },\n                function (item) {\n                    $assert.areEqual(testId, item.id);\n                    $assert.areEqual('Hey', item.string);\n\n                    $log('perform update');\n                    item.string = 'What?';\n                    return table.update(item);\n                },\n                function (item) {\n                    $assert.areEqual(testId, item.id);\n                    $assert.areEqual('What?', item.string);\n\n                    $log('perform refresh');\n                    return table.refresh({ id: item.id, string: 'Hey' });\n                },\n                function (item) {\n                    $assert.areEqual(testId, item.id);\n                    $assert.areEqual('What?', item.string);\n\n                    $log('perform read again');\n                    return table.read();\n                },\n                function (items) {\n                    $assert.areEqual(1, items.length);\n                    $assert.areEqual(testId, items[0].id);\n                    $assert.areEqual('What?', items[0].string);\n                });\n        }),\n\n        $test('ReadAsyncWithValidIntIdAgainstIntIdTable')\n        .tag('dotNet_not_supported') //.NET apps don't support integer ids.\n        .checkAsync(function () {\n            var client = $getClient(),\n                table = client.getTable('IntegerIdJavascriptTable'), \n                testIds = [];\n\n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    return table.insert({ string: 'Hey' });\n                },\n                function (item) {\n                    return table.read();\n                },\n                function (items) {\n                    $assert.areEqual(1, items.length);\n                    $assert.isTrue(items[0].id > 0);\n                    $assert.areEqual('Hey', items[0].string);\n                });\n        }),\n\n        // System Properties Tests\n\n        $test('AsyncTableOperationsWithAllSystemProperties')\n        .tag('SystemProperties')\n        .tag('dotNet_not_supported') \n        .checkAsync(function () {\n\n            var client = $getClient(),\n                table = client.getTable('StringIdJavascriptTable'),\n                savedItem,\n                savedVersion,\n                savedUpdatedAt;\n\n            table.systemProperties = WindowsAzure.MobileServiceTable.SystemProperties.All;  //All\n\n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    return table.insert({ id: 'an id', string: 'a value' });\n                },\n                function (item) {\n                    $assert.isNotNull(item.__createdAt);\n                    $assert.isNotNull(item.__updatedAt);\n                    $assert.isNotNull(item.__version);\n\n                    return table.read();\n                },\n                function (items) {\n                    $assert.areEqual(1, items.length);\n                    var item = items[0];\n                    $assert.isNotNull(item.__createdAt);\n                    $assert.isNotNull(item.__updatedAt);\n                    $assert.isNotNull(item.__version);\n                    savedItem = item;\n\n                    return table.where(function (value) { return this.__version == value; }, item.__version).read();\n                },\n                function (items) {\n                    $assert.areEqual(1, items.length);\n                    var item = items[0];\n                    $assert.isNotNull(item.__createdAt);\n                    $assert.isNotNull(item.__updatedAt);\n                    $assert.isNotNull(item.__version);\n\n                    return table.where(function (value) { return this.__createdAt == value; }, savedItem.__createdAt).read();\n                },\n                function (items) {\n                    $assert.areEqual(1, items.length);\n                    var item = items[0];\n                    $assert.isNotNull(item.__createdAt);\n                    $assert.isNotNull(item.__updatedAt);\n                    $assert.isNotNull(item.__version);\n\n                    return table.where(function (value) { return this.__updatedAt == value; }, savedItem.__updatedAt).read();\n                },\n                function (items) {\n                    $assert.areEqual(1, items.length);\n                    var item = items[0];\n                    $assert.isNotNull(item.__createdAt);\n                    $assert.isNotNull(item.__updatedAt);\n                    $assert.isNotNull(item.__version);\n\n                    return table.lookup(savedItem.id);\n                },\n                function (item) {\n                    $assert.areEqual(item.id, savedItem.id);\n                    $assert.areEqual(item.__updatedAt.valueOf(), savedItem.__updatedAt.valueOf());\n                    $assert.areEqual(item.__createdAt.valueOf(), savedItem.__createdAt.valueOf());\n                    $assert.areEqual(item.__version, savedItem.__version);\n\n                    savedItem.string = 'Hello';\n                    savedVersion = savedItem.__version; //WinJS Mutates\n                    savedUpdatedAt = savedItem.__updatedAt.valueOf();\n\n                    return table.update(savedItem);\n                },\n                function (item) {\n                    $assert.areEqual(item.id, savedItem.id);\n                    $assert.areEqual(item.__createdAt.valueOf(), savedItem.__createdAt.valueOf());\n                    $assert.areNotEqual(item.__version, savedVersion);\n                    $assert.areNotEqual(item.__updatedAt.valueOf(), savedUpdatedAt);\n                    savedItem = item;\n\n                    return table.read();\n                },\n                function (items) {\n                    var item = items[0];\n                    $assert.areEqual(item.id, savedItem.id);\n                    $assert.areEqual(item.__updatedAt.valueOf(), savedItem.__updatedAt.valueOf());\n                    $assert.areEqual(item.__createdAt.valueOf(), savedItem.__createdAt.valueOf());\n                    $assert.areEqual(item.__version, savedItem.__version);\n\n                    return table.del(savedItem);\n                },\n                function (error) {\n                    $assert.isNull(error);\n                });\n        }),\n\n        $test('AsyncTableOperationsWithSystemPropertiesSetExplicitly')\n        .tag('SystemProperties')\n        .tag('dotNet_not_supported') // .NET apps always return all system properties on insert operation\n        .checkAsync(function () {\n\n            var client = $getClient(),\n                table = client.getTable('StringIdJavascriptTable'),\n                props = WindowsAzure.MobileServiceTable.SystemProperties;\n\n            table.systemProperties = props.Version | props.CreatedAt | props.UpdatedAt;\n\n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    return table.insert({ string: 'a value'  });\n                },\n                function (item) {\n                    $assert.isNotNull(item.__createdAt);\n                    $assert.isNotNull(item.__updatedAt);\n                    $assert.isNotNull(item.__version);\n\n                    table.systemProperties = props.Version | props.CreatedAt;\n                    return table.insert({ string: 'a value' });\n                },\n                function (item) {\n                    $assert.isNotNull(item.__createdAt);\n                    $assert.isNotNull(item.__version);\n                    $assert.isNull(item.__updatedAt);\n\n                    table.systemProperties = props.Version | props.UpdatedAt;\n                    return table.insert({ string: 'a value' });\n                },\n                function (item) {\n                    $assert.isNull(item.__createdAt);\n                    $assert.isNotNull(item.__updatedAt);\n                    $assert.isNotNull(item.__version);\n\n                    table.systemProperties = props.UpdatedAt | props.CreatedAt;\n                    return table.insert({ string: 'a value' });\n                },\n                function (item) {\n                    $assert.isNotNull(item.__createdAt);\n                    $assert.isNotNull(item.__updatedAt);\n                    $assert.isNull(item.__version);\n\n                    table.systemProperties = props.UpdatedAt;\n                    return table.insert({ string: 'a value' });\n                }, function (item) {\n                    $assert.isNull(item.__createdAt);\n                    $assert.isNotNull(item.__updatedAt);\n                    $assert.isNull(item.__version);\n\n                    return emptyTable(table);\n                });\n        }),\n\n        $test('AsyncTableOperationsWithAllSystemPropertiesUsingCustomSystemParameters')\n        .tag('SystemProperties')\n        .tag('dotNet_not_supported') // .NET apps don't support filtering system properties\n        .checkAsync(function () {\n            var client = $getClient(),\n                table = client.getTable('StringIdJavascriptTable'),\n                savedItem;\n\n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    var commands = [];\n                    testData.testValidSystemPropertyQueryStrings.forEach(function (systemProperties) {\n                        var systemPropertiesKeyValue = systemProperties.split('='),\n                            userParams = {},\n                            savedVersion;\n\n                        userParams[systemPropertiesKeyValue[0]] = systemPropertiesKeyValue[1];\n\n                        var lowerCaseSysProperties = systemProperties.toLowerCase(),\n                            shouldHaveCreatedAt = lowerCaseSysProperties.indexOf('created') !== -1,\n                            shouldHaveUpdatedAt = lowerCaseSysProperties.indexOf('updated') !== -1,\n                            shouldHaveVersion = lowerCaseSysProperties.indexOf('version') !== -1;\n\n                        if (lowerCaseSysProperties.indexOf('*') !== -1) {\n                            shouldHaveCreatedAt = shouldHaveUpdatedAt = shouldHaveVersion = true;\n                        }\n\n                        commands.push(function () {\n                            return $chain(\n                                function () {\n                                    return table.insert({ id: 'an id', string: 'a value' }, userParams);\n                                },\n                                function (item) {\n                                    $assert.areEqual(shouldHaveCreatedAt, item.__createdAt !== undefined);\n                                    $assert.areEqual(shouldHaveUpdatedAt, item.__updatedAt !== undefined);\n                                    $assert.areEqual(shouldHaveVersion, item.__version !== undefined);\n                                    savedItem = item;\n\n                                    return table.read('', userParams);\n                                },\n                                function (items) {\n                                    $assert.areEqual(1, items.length);\n\n                                    var item = items[0];\n                                    $assert.areEqual(shouldHaveCreatedAt, item.__createdAt !== undefined);\n                                    $assert.areEqual(shouldHaveUpdatedAt, item.__updatedAt !== undefined);\n                                    $assert.areEqual(shouldHaveVersion, item.__version !== undefined);\n\n                                    return table.where({ __version: savedItem.__version }).read(userParams);\n                                },\n                                function (items) {\n                                    if (shouldHaveVersion) {\n                                        $assert.areEqual(1, items.length);\n                                        var item = items[0];\n                                        $assert.areEqual(shouldHaveCreatedAt, item.__createdAt !== undefined);\n                                        $assert.areEqual(shouldHaveUpdatedAt, item.__updatedAt !== undefined);\n                                        $assert.areEqual(shouldHaveVersion, item.__version !== undefined);\n                                    } else {\n                                        $assert.areEqual(0, items.length);\n                                    }\n\n                                    return table.where({ __createdAt: savedItem.__createdAt }).read(userParams);\n                                },\n                               function (items) {\n                                   if (shouldHaveCreatedAt) {\n                                       $assert.areEqual(1, items.length);\n                                       var item = items[0];\n                                       $assert.areEqual(shouldHaveCreatedAt, item.__createdAt !== undefined);\n                                       $assert.areEqual(shouldHaveUpdatedAt, item.__updatedAt !== undefined);\n                                       $assert.areEqual(shouldHaveVersion, item.__version !== undefined);\n                                   } else {\n                                       $assert.areEqual(0, items.length);\n                                   }\n\n                                   return table.where({ __updatedAt: savedItem.__updatedAt }).read(userParams);\n                               },\n                               function (items) {\n                                   if (shouldHaveUpdatedAt) {\n                                       $assert.areEqual(1, items.length);\n                                       var item = items[0];\n                                       $assert.areEqual(shouldHaveCreatedAt, item.__createdAt !== undefined);\n                                       $assert.areEqual(shouldHaveUpdatedAt, item.__updatedAt !== undefined);\n                                       $assert.areEqual(shouldHaveVersion, item.__version !== undefined);\n                                   } else {\n                                       $assert.areEqual(0, items.length);\n                                   }\n\n                                   return table.lookup(savedItem.id, userParams);\n                               },\n                               function (item) {\n                                   $assert.areEqual(shouldHaveCreatedAt, item.__createdAt !== undefined);\n                                   $assert.areEqual(shouldHaveUpdatedAt, item.__updatedAt !== undefined);\n                                   $assert.areEqual(shouldHaveVersion, item.__version !== undefined);\n\n                                   savedItem.string = 'Hello!';\n                                   savedVersion = item.__version;\n                                   return table.update(savedItem, userParams);\n                               },\n                               function (item) {\n                                   $assert.areEqual(shouldHaveCreatedAt, item.__createdAt !== undefined);\n                                   $assert.areEqual(shouldHaveUpdatedAt, item.__updatedAt !== undefined);\n                                   $assert.areEqual(shouldHaveVersion, item.__version !== undefined);\n                                   if (shouldHaveVersion) {\n                                       $assert.areNotEqual(item.__version, savedVersion);\n                                   }\n\n                                   return table.del(item);\n                               });\n                        });\n                    });\n                    return $chain.apply(null, commands);\n                });\n        }),\n\n        $test('AsyncTableOperationsWithInvalidSystemPropertiesQuerystring')\n        .tag('SystemProperties')\n        .tag('dotNet_not_supported') // .NET runtime apps always get items whatever you put into __systemproperties\n        .checkAsync(function () {\n            var client = $getClient(),\n                table = client.getTable('StringIdJavascriptTable'),\n                commands = [];\n\n            testData.testInvalidSystemPropertyQueryStrings.forEach(function (systemProperties) {\n                var systemPropertiesKeyValue = systemProperties.split('='),\n                    userParams = {};\n\n                userParams[systemPropertiesKeyValue[0]] = systemPropertiesKeyValue[1];\n\n                commands.push(\n                    function () {\n                        $log('querystring: ' + systemProperties);\n                        return table.insert({ id: 'an id', string: 'a value' }, userParams).then(\n                            function (item) {\n                                $assert.fail('Should have failed');\n                            }, function (error) {\n                                //$assert.contains(error.message, \"is not a supported system property.\");\n                            });\n                    },\n                    function () {\n                        return table.read('', userParams).then(function (items) {\n                            $assert.fail('Should have failed');\n                        }, function (error) {\n                            //$assert.contains(error.message, \"is not a supported system property.\");\n                        });\n                    }, function () {\n                        return table.where({ __version: 'AAA' }).read(userParams).then(function (items) {\n                            $assert.fail('Should have failed');\n                        }, function (error) {\n                            //$assert.contains(error.message, \"is not a supported system property.\");\n                        });\n                    }, function () {\n                        return table.lookup('an id', userParams).then(function (items) {\n                            $assert.fail('Should have failed');\n                        }, function (error) {\n                            //$assert.contains(error.message, \"is not a supported system property.\");\n                        });\n                    }, function () {\n                        return table.update({ id: 'an id', string: 'new value' }, userParams).then(function (items) {\n                            $assert.fail('Should have failed');\n                        }, function (error) {\n                            //$assert.contains(error.message, \"is not a supported system property.\");\n                        });\n                    });\n            });\n\n            return $chain.apply(null, commands);\n        }),\n\n        $test('AsyncTableOperationsWithInvalidSystemParameterQueryString')\n        .description('test table ops with invalid querystrings')\n        .tag('SystemProperties')\n        .tag('dotNet_not_supported') // .NET apps don't support filtering system properties\n        .checkAsync(function () {\n            var client = $getClient(),\n                table = client.getTable('StringIdJavascriptTable'),\n                savedItem,\n                systemPropertiesKeyValue = testData.testInvalidSystemParameterQueryString.split('='),\n                userParams = {},\n                savedVersion;\n\n            userParams[systemPropertiesKeyValue[0]] = systemPropertiesKeyValue[1];\n\n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    return table.insert({ id: 'an id', string: 'a value' }, userParams).then(\n                        function (item) {\n                            $assert.fail('Should have failed');\n                        }, function (error) {\n                            //$assert.contains(error.message, 'Custom query parameter names must start with a letter.');\n                        });\n                },\n                function () {\n                    return table.read('', userParams).then(\n                        function (item) {\n                            $assert.fail('Should have failed');\n                        }, function (error) {\n                            //$assert.contains(error.message, 'Custom query parameter names must start with a letter.');\n                        });\n                },\n                function () {\n                    return table.where({ __version: 'AAA'}).read(userParams).then(\n                        function (item) {\n                            $assert.fail('Should have failed');\n                        }, function (error) {\n                            //$assert.contains(error.message, 'Custom query parameter names must start with a letter.');\n                        });\n                },\n                function () {\n                    return table.lookup('an id', userParams).then(\n                        function (item) {\n                            $assert.fail('Should have failed');\n                        }, function (error) {\n                            //$assert.contains(error.message, 'Custom query parameter names must start with a letter.');\n                        });\n                },\n                function () {\n                    return table.update({ id: 'an id', string: 'new value'}, userParams).then(\n                        function (item) {\n                            $assert.fail('Should have failed');\n                        }, function (error) {\n                            //$assert.contains(error.message, 'Custom query parameter names must start with a letter.');\n                        });\n                });\n        }),\n\n        $test('AsyncFilterSelectOrderingOperationsNotImpactedBySystemProperties')\n        .description('test table sorting with various system properties')\n        .tag('SystemProperties')\n        .tag('dotNet_not_supported') // .NET apps don't support filtering system properties\n        .checkAsync(function () {\n            var client = $getClient(),\n                table = client.getTable('StringIdJavascriptTable'),\n                savedItems = [];\n\n            table.systemProperties = WindowsAzure.MobileServiceTable.SystemProperties.All;\n\n            return $chain(\n                function () {\n                    return emptyTable(table);\n                },\n                function () {\n                    return table.insert({ id: '1', string: 'value' });\n                },\n                function (item) {\n                    savedItems.push(item);\n                    return table.insert({ id: '2', string: 'value' });\n                },\n                function (item) {\n                    savedItems.push(item);\n                    return table.insert({ id: '3', string: 'value' });\n                },\n                function (item) {\n                    savedItems.push(item);\n                    return table.insert({ id: '4', string: 'value' });\n                },\n                function (item) {\n                    savedItems.push(item);\n                    return table.insert({ id: '5', string: 'value' });\n                },\n                function (item) {\n                    savedItems.push(item);\n\n                    var commands = [];\n                    testData.testSystemProperties.forEach(function (systemProperties) {\n                        table.systemProperties = systemProperties;\n                        commands.push(function () {\n                            return $chain(\n                                function () {\n                                    $log('testing properties: ' + systemProperties);\n                                    return table.orderBy('__createdAt').read();\n                                },\n                                function (items) {\n                                    for (var i = 0; i < items.length - 1; i++) {\n                                        $assert.isTrue(items[i].id <  items[i + 1].id);\n                                    }\n                                    return table.orderBy('__updatedAt').read();\n                                },\n                                function (items) {\n                                    for (var i = 0; i < items.length - 1; i++) {\n                                        $assert.isTrue(items[i].id < items[i + 1].id);\n                                    }\n                                    return table.orderBy('__version').read();\n                                },\n                                function (items) {\n                                    for (var i = 0; i < items.length - 1; i++) {\n                                        $assert.isTrue(items[i].id < items[i + 1].id);\n                                    }\n\n                                    return table.where(function (value) { return this.__createdAt >= value; }, savedItems[3].__createdAt).read();\n                                },\n                                function (items) {\n                                    $assert.areEqual(2, items.length);\n\n                                    return table.where(function (value) { return this.__updatedAt >= value; }, savedItems[3].__updatedAt).read();\n                                },\n                                function (items) {\n                                    $assert.areEqual(2, items.length);\n\n                                    return table.where({ __version: savedItems[3].__version }).read();\n                                },\n                                function (items) {\n                                    $assert.areEqual(1, items.length);\n\n                                    return table.select('id', '__createdAt').read();\n                                },\n                                function (items) {\n                                    for (var i = 0; i < items.length; i++) {\n                                        $assert.isNotNull(items[i].__createdAt);\n                                    }\n\n                                    return table.select('id', '__updatedAt').read();\n                                },\n                                function (items) {\n                                    for (var i = 0; i < items.length; i++) {\n                                        $assert.isNotNull(items[i].__updatedAt);\n                                    }\n\n                                    return table.select('id', '__version').read();\n                                },\n                                function (items) {\n                                    for (var i = 0; i < items.length; i++) {\n                                        $assert.isNotNull(items[i].__version);\n                                    }\n\n                                });\n                        });\n                    });\n                    return $chain.apply(null, commands);\n                });\n        }),\n\n        $test('UpdateAsyncWithWithMergeConflict')\n        .description('test update with conflict')\n        .tag('SystemProperties')\n        .checkAsync(function () {\n            var client = $getClient(),\n                table = client.getTable('StringIdJavascriptTable'),\n                savedVersion,\n                correctVersion;\n\n            table.systemProperties = WindowsAzure.MobileServiceTable.SystemProperties.All;\n\n            return $chain(function () {\n                return emptyTable(table);\n            }, function () {\n                return table.insert({ id: 'an id', string: 'a value'});\n            }, function (item) {\n                savedVersion = item.__version;\n\n                item.string = 'Hello!';\n                return table.update(item);\n            }, function (item) {\n                $assert.areNotEqual(item.__version, savedVersion);\n\n                item.string = 'But Wait!';\n                correctVersion = item.__version;\n                item.__version = savedVersion;\n\n                return table.update(item).then(function (item) {\n                    $assert.fail('Should have failed');\n                }, function (error) {\n                    $assert.areEqual(412, error.request.status);\n                    $assert.contains(error.message, \"Precondition Failed\");\n                    $assert.areEqual(error.serverInstance.__version, correctVersion);\n                    $assert.areEqual(error.serverInstance.string, 'Hello!');\n\n                    item.__version = correctVersion;\n                    return table.update(item);\n                });\n            }, function (item) {\n                $assert.areNotEqual(item.__version, correctVersion);\n            });\n        }),\n\n        $test('DeleteAsyncWithWithMergeConflict')\n        .description('test delete with conflict')\n        .tag('SystemProperties')\n        .checkAsync(function () {\n            var client = $getClient(),\n                table = client.getTable('StringIdJavascriptTable'),\n                savedVersion,\n                correctVersion;\n\n            table.systemProperties = WindowsAzure.MobileServiceTable.SystemProperties.All;\n\n            return $chain(function () {\n                return emptyTable(table);\n            }, function () {\n                return table.insert({ id: 'an id', String: 'a value' });\n            }, function (item) {\n                savedVersion = item.__version;\n\n                item.String = 'Hello!';\n                return table.update(item);\n            }, function (item) {\n                $assert.areNotEqual(item.__version, savedVersion);\n\n                item.String = 'But Wait!';\n                correctVersion = item.__version;\n                item.__version = savedVersion;\n\n                return table.del(item).then(function (item) {\n                    $assert.fail('Should have failed');\n                }, function (error) {\n                    $assert.areEqual(412, error.request.status);\n                    $assert.contains(error.message, \"Precondition Failed\");\n                    $assert.areEqual(error.serverInstance.__version, correctVersion);\n                    $assert.areEqual(error.serverInstance.String, 'Hello!');\n\n                    item.__version = correctVersion;\n                    return table.del(item);\n                });\n            });\n        })\n    );"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/functional/todo.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\MobileServices.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n\n$testGroup('ToDo')\n    .functional()\n    .tests(\n        $test('ToDoBasics')\n        .description('Run through some basic TODO scenarios')\n        .checkAsync(function () {\n            var table = $getClient().getTable('test_table');\n            var tableHelper = $getTableHelper();\n\n            var context = { };\n            return $chain(\n                    function () {\n                        $log('Insert a few records');\n                        return table.insert({ col1: \"ABC\", colr2: 0 });\n                    },\n                    function (first) {\n                        $log('Check we can lookup inserted record');\n                        return table.lookup(first.id);\n                    },\n                    function (first) {\n                        $assert.areEqual(\"ABC\", first.col1);\n                        context.first = first;\n                        context.newItems = tableHelper.getNewItems(first.id);\n                        return table.insert({ col1: \"DEF\", col2: 1 }, { testMode: true });\n                    },\n                    function (second) {\n                        context.newItems = tableHelper.getNewItems(second.id);\n                        $log('Verify the exception message for looking up a instance that does not exist.');\n                        return table.lookup($isDotNet() ? '9999' : 9999).then(\n                        function () {\n                            $assert.fail('Should have errored');\n                        },\n                        function (err) {\n                            $assert.contains(err.message, $isDotNet() ? 'Not Found' : 'An item with id \\'9999\\' does not exist.');\n                        });\n                    },\n                    function () {\n                        return table.insert({ col1: \"GHI\", col2: 0 });\n                    },\n                    function (third) {\n                        context.newItems = tableHelper.getNewItems(third.id);\n                        return table.where(context.newItems).read({ testMode: true });\n                    },\n                    function (results) {\n                        $assert.areEqual(3, results.length);\n\n                        $log('Query and sort ascending');\n                        return table.where(context.newItems).orderBy('col1').read();\n                    },\n                function (items) {\n                    $assert.areEqual(3, items.length);\n                    $assert.areEqual('ABC', items[0].col1);\n                    $assert.areEqual('DEF', items[1].col1);\n                    $assert.areEqual('GHI', items[2].col1);\n\n                    $log('Query and sort descending');\n                    return table.where(context.newItems).orderByDescending('col1').read();\n                },\n                function (items) {\n                    $assert.areEqual(3, items.length);\n                    $assert.areEqual('ABC', items[2].col1);\n                    $assert.areEqual('DEF', items[1].col1);\n                    $assert.areEqual('GHI', items[0].col1);\n\n                    $log('Query for completed');\n                    return table.where(context.newItems).where('col2 gt 0').read();\n                },\n                function (items) {\n                    $assert.areEqual(1, items.length);\n                    $assert.areEqual('DEF', items[0].col1);\n\n                    $log('Verify the exception message for inserting a new element that already has an ID');\n                    return table.insert({ id: 30, col1: 'Will fail' }).then(\n                        function () {\n                            $assert.fail('Should have errored');\n                        },\n                        function (err) {\n                            $assert.contains(err.message, 'id');\n                        });\n                },\n                function () {\n                    $log('Verify that usinga non-existant collection also throws an error');\n                    return $getClient().getTable('notreal').read().then(\n                        function () {\n                            $assert.fail('Should have errored');\n                        },\n                        function (err) {\n                            $assert.contains(err.message, $isDotNet() ? 'Not Found' : 'notreal');\n                        });\n                });\n        }),\n\n        $test('Usage')\n        .description('Simple TODO usage scenario')\n        .checkAsync(function () {\n            var table = $getClient().getTable('test_table');\n            var tableHelper = $getTableHelper();\n\n            var context = {};\n            return $chain(\n                function () {\n                    $log('Insert a few records');\n                    return table.insert({ col1 : \"Get Milk\", col2 : 0 });\n                },\n                function (first) {\n                    context.first = first;\n                    context.newItems = tableHelper.getNewItems(first.id);\n                    return table.insert({ col1: \"Pick up dry cleaning\", col2: 0 });\n                },\n                function (second) {\n                    context.newItems = tableHelper.getNewItems(second.id);\n                    $log('Run a simple query and verify we get both items');\n                    return table.where(context.newItems).read();\n                },\n                function (items) {\n                    $assert.areEqual(2, items.length);\n                    return table.insert({ col1 : \"Submit TPS report\", col2 : 0 });\n                },\n                function (third) {\n                    context.newItems = tableHelper.getNewItems(third.id);\n                    $log('Check off the first item');\n                    context.first.col2 = 1;\n                    return table.update(context.first);\n                },\n                function () {\n                    $log('Query for incomplete items');\n                    return table.where(context.newItems).where('col2 eq 0').read();\n                },\n                function (remaining) {\n                    $assert.areEqual(2, remaining.length);\n\n                    $log('Delete the first item');\n                    return table.del(context.first);\n                },\n                function () {\n                    return table.where(context.newItems).read();\n                },\n                function (items) {\n                    $assert.areEqual(2, items.length);\n                });\n        }),\n\n        $test('TotalCountBasics')\n        .description('Verify the standard includeTotalCount behavior')\n        .tag('TotalCount')\n        .checkAsync(function () {\n            var table = $getClient().getTable('test_table');\n            var tableHelper = $getTableHelper();\n\n            var context = { };\n            return $chain(\n                function () {\n                    return table.insert({ col1: \"ABC\", col2: 0 });\n                },\n                function (first) {\n                    context.first = first;\n                    context.newItems = tableHelper.getNewItems(first.id);\n                    return table.insert({ col1: \"DEF\", col2: 1 });\n                },\n                function (second) {\n                    context.newItems = tableHelper.getNewItems(second.id);\n                    return table.insert({ col1: \"GHI\", col2: 0 });\n                },\n                function (third) {\n                    context.newItems = tableHelper.getNewItems(third.id);\n                    return table.where(context.newItems).read();\n                },\n                function (results) {\n                    $assert.areEqual(3, results.length);\n                    $assert.isTrue(typeof results.totalCount === \"undefined\");\n\n                    $log('Use inline count manually');\n                    return table.where(context.newItems).includeTotalCount().read();\n                },\n                function (items) {\n                    // Make sure the item has the totalCount\n                    $assert.areEqual(3, items.length);\n                    $assert.areEqual(3, items.totalCount);\n                });\n        }),\n\n\n        $test('TotalCountWithTooManyElements')\n        .description('Verify the includeTotalCount when the count is more than the returned items')\n        .tag('TotalCount')\n        .checkAsync(function () {\n            var table = $getClient().getTable('test_table');\n            var actions = [];\n\n            actions.push(function () {\n                return table.insert({ col1: \"Test1\", col2: 0 });\n            });\n            actions.push(function () {\n                return table.insert({ col1: \"Test2\", col2: 1 });\n            });\n            var insertRow = function(row) {\n                actions.push(function () {\n                    return table.insert({ col1: \"Test\" + row, col2: 0 });\n                });\n            };\n            var i = 3;\n            var totalCount = 65;\n            for (; i <= totalCount; i++) {\n                insertRow(i);\n            }\n            actions.push(function() {\n                $log('Use inline count manually');\n\n                return table.includeTotalCount().read();\n            });\n            actions.push(function(items) {\n                // Make sure the item has the correct totalCount\n                $assert.areEqual(50, items.length);\n                $assert.isTrue(items.totalCount >= totalCount);\n            });\n\n            return $chain.apply(null, actions);\n        })\n    );\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/unit/extensions.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\MobileServices.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n// Declare JSHint globals\n/*global Extensions:false */\n\n$testGroup('Extensions.js',\n\n    $test('isNull')\n    .description('Verify Extensions.isNull works correctly across null/undefined/etc.')\n    .check(function () {\n        $assert.isTrue(Extensions.isNull(null), 'null should be null.');\n        $assert.isTrue(Extensions.isNull(undefined), 'undefined should be null.');\n        $assert.isFalse(Extensions.isNull(''), 'empty string is not null.');\n        $assert.isFalse(Extensions.isNull(0), '0 is not null.');\n        $assert.isFalse(Extensions.isNull('Foo'), \"'Foo' is not null.\");\n    }),\n\n    $test('isNullOrEmpty')\n    .description('Verify Extensions.isNullOrEmpty works correctly across null/undefined/empty/etc.')\n    .check(function () {\n        $assert.isTrue(Extensions.isNullOrEmpty(null), 'null should be null or empty.');\n        $assert.isTrue(Extensions.isNullOrEmpty(undefined), 'undefined should be null or empty.');\n        $assert.isTrue(Extensions.isNullOrEmpty(''), 'empty string should be null or empty.');\n        $assert.isTrue(Extensions.isNullOrEmpty([]), 'empty array should be null or empty.');\n        $assert.isFalse(Extensions.isNullOrEmpty(0), '0 is not null or empty.');\n        $assert.isFalse(Extensions.isNullOrEmpty('Foo'), \"'Foo' is not null empty.\");\n        $assert.isFalse(Extensions.isNullOrEmpty({ }), '{ } is not null or empty.');\n    }),\n\n    $test('isValidId')\n    .description('Verify isValidId works correctly across id types')\n    .check(function() {\n        $assert.isFalse(Extensions.isValidId(null), 'null is an invalid id');\n        $assert.isFalse(Extensions.isValidId(undefined), 'undefined is an invalid id');\n        $assert.isFalse(Extensions.isValidId(''), 'empty string is an invalid id');\n        $assert.isFalse(Extensions.isValidId([]), 'empty array can not be an id');\n        $assert.isFalse(Extensions.isValidId({ }), '{ } is an invalid id');\n        $assert.isFalse(Extensions.isValidId(0), '0 is an invalid id');\n        $assert.isFalse(Extensions.isValidId(new Array(257).join('A')), 'length of 256 is invalid');\n        $assert.isFalse(Extensions.isValidId('a+b'), 'id can not contain a +');        \n        $assert.isFalse(Extensions.isValidId('a\"b'), 'id can not contain a \"');\n        $assert.isFalse(Extensions.isValidId('a/b'), 'id can not contain a /');\n        $assert.isFalse(Extensions.isValidId('a?b'), 'id can not contain a ?');\n        $assert.isFalse(Extensions.isValidId('a\\\\b'), 'id can not contain a \\\\');\n        $assert.isFalse(Extensions.isValidId('a`b'), 'id can not contain a `');\n        $assert.isFalse(Extensions.isValidId('.'), 'id can not be .');\n        $assert.isFalse(Extensions.isValidId('..'), 'id can not be ..');\n        $assert.isFalse(Extensions.isValidId('A\\u0000C'), 'id can not contain control character u0000');\n        $assert.isFalse(Extensions.isValidId('A__\\u0008C'), 'id can not contain control character u0008');\n\n        $assert.isTrue(Extensions.isValidId(10), '10 is a valid id');\n        $assert.isTrue(Extensions.isValidId('id'), 'id is a valid id');\n        $assert.isTrue(Extensions.isValidId('12.0'), 'id can be a string number');\n        $assert.isTrue(Extensions.isValidId('true'), 'id can be a string respresentation of a boolean');\n        $assert.isTrue(Extensions.isValidId('false'), 'id can be a string respresentation of a boolean (false)');\n        $assert.isTrue(Extensions.isValidId('aa4da0b5-308c-4877-a5d2-03f274632636'), 'id can contain a guid');\n        $assert.isTrue(Extensions.isValidId('69C8BE62-A09F-4638-9A9C-6B448E9ED4E7'), 'id can contain another guid');\n        $assert.isTrue(Extensions.isValidId('{EC26F57E-1E65-4A90-B949-0661159D0546}'), 'id can contain brackets and guids');\n        $assert.isTrue(Extensions.isValidId('id with Russian Где моя машина'), 'id can contain other language characters');\n    }),\n\n    $test('format')\n    .description('Verify Extensions.format')\n    .check(function () {\n        $assert.areEqual(Extensions.format(null), null, 'null messages should not be formatted.');\n        $assert.areEqual(Extensions.format(null, 1, 'foo'), null, 'null messages should not be formatted even with arguments.');\n        $assert.areEqual(Extensions.format('literal'), 'literal');\n        $assert.areEqual(Extensions.format('literal', 1, 'foo'), 'literal');\n        $assert.areEqual(Extensions.format('test {0}', 'basic'), 'test basic');\n        $assert.areEqual(Extensions.format('test {0}', 1), 'test 1');\n        $assert.areEqual(Extensions.format('X{0}Z', 'Y'), 'XYZ');\n        $assert.areEqual(Extensions.format('X {0} Z', 'Y'), 'X Y Z');\n        $assert.areEqual(Extensions.format('{0} Z', 'Y'), 'Y Z');\n        $assert.areEqual(Extensions.format('X {0}', 'Y'), 'X Y');\n        $assert.areEqual(Extensions.format('{0}{1}', 0, 1), '01');\n        $assert.areEqual(Extensions.format('{0}{1}{2}', 0, 1, 2), '012');\n        $assert.areEqual(Extensions.format('{0}{1}{2}{3}', 0, 1, 2, 3), '0123');\n        $assertThrows(\n            function () { Extensions.format(12); },\n            function (ex) { $assert.contains(ex.toString(), 'message'); },\n            'format did not throw for non-string message value.');\n\n        // Ideally these would behave differently...  see the comment in the\n        // method\n        $assert.areEqual(Extensions.format('{0}{1}', 0), '0{1}'); // error\n        $assert.areEqual(Extensions.format('{0}{1}', '{1}', 'X'), 'XX'); // {1}X\n        $assert.areEqual(Extensions.format('{{0}}', '1', 'X'), 'X'); // {0}\n    }),\n\n    $test('has')\n    .description('Verify Extensions.has')\n    .check(function () {\n        $assertThrows(function () { Extensions.has(null, null); });\n        $assertThrows(function () { Extensions.has(null, 2); });\n        Extensions.has(null, 'key');\n\n        var obj = { foo: 1, bar: 2, qux : [1, 2, 3] };\n        $assert.isTrue(Extensions.has(obj, 'foo'));\n        $assert.isTrue(Extensions.has(obj, 'bar'));\n        $assert.isTrue(Extensions.has(obj, 'qux'));\n        $assert.isFalse(Extensions.has(obj, 'baz'));\n    }),\n\n    $test('isObject')\n    .description('Verify Extensions.isObject')\n    .check(function () {\n        $assert.isTrue(Extensions.isObject(), 'undefined');\n        $assert.isFalse(Extensions.isObject(12), 'number');\n        $assert.isFalse(Extensions.isObject('test'), 'string');\n        $assert.isFalse(Extensions.isObject(true), 'bool');\n        $assert.isFalse(Extensions.isObject(function () { }), 'function');\n        $assert.isFalse(Extensions.isObject(new Date()), 'date');\n        $assert.isTrue(Extensions.isObject(null), 'null');\n        $assert.isTrue(Extensions.isObject({}), 'obj');\n    }),\n\n    $test('isString')\n    .description('Verify Extensions.isString')\n    .check(function () {\n        $assert.isTrue(Extensions.isString(null), 'null');\n        $assert.isTrue(Extensions.isString(), 'undefined');\n        $assert.isFalse(Extensions.isString(12), 'number');\n        $assert.isTrue(Extensions.isString('test'), 'string');\n        $assert.isFalse(Extensions.isObject(true), 'bool');\n        $assert.isFalse(Extensions.isString(function () { }), 'function');\n        $assert.isFalse(Extensions.isString(new Date()), 'date');\n        $assert.isFalse(Extensions.isString({}), 'obj');\n    }),\n\n    $test('isNumber')\n    .description('Verify Extensions.isNumber')\n    .check(function () {\n        $assert.isFalse(Extensions.isNumber(null), 'null');\n        $assert.isFalse(Extensions.isNumber(), 'undefined');\n        $assert.isTrue(Extensions.isNumber(12), 'int');\n        $assert.isTrue(Extensions.isNumber(12.5), 'float');\n        $assert.isFalse(Extensions.isNumber('test'), 'string');\n        $assert.isFalse(Extensions.isNumber(true), 'bool');\n        $assert.isFalse(Extensions.isNumber(function () { }), 'function');\n        $assert.isFalse(Extensions.isNumber(new Date()), 'date');\n        $assert.isFalse(Extensions.isNumber({}), 'obj');\n    }),\n\n    $test('isBool')\n    .description('Verify Extensions.isBool')\n    .check(function () {\n        $assert.isFalse(Extensions.isBool(null), 'null');\n        $assert.isFalse(Extensions.isBool(), 'undefined');\n        $assert.isFalse(Extensions.isBool(12), 'number');\n        $assert.isFalse(Extensions.isBool('test'), 'string');\n        $assert.isTrue(Extensions.isBool(true), 'bool');\n        $assert.isFalse(Extensions.isBool(function () { }), 'function');\n        $assert.isFalse(Extensions.isBool(new Date()), 'date');\n        $assert.isFalse(Extensions.isBool({}), 'obj');\n    }),\n\n    $test('isDate')\n    .description('Verify Extensions.isDate')\n    .check(function () {\n        $assert.isFalse(Extensions.isDate(null), 'null');\n        $assert.isFalse(Extensions.isDate(), 'undefined');\n        $assert.isFalse(Extensions.isDate(12), 'number');\n        $assert.isFalse(Extensions.isDate('test'), 'string');\n        $assert.isFalse(Extensions.isDate(true), 'bool');\n        $assert.isFalse(Extensions.isDate(function () { }), 'function');\n        $assert.isTrue(Extensions.isDate(new Date()), 'date');\n        $assert.isFalse(Extensions.isDate({}), 'obj');\n    }),\n\n    $test('toJson')\n    .description('Verify Extensions.toJson')\n    .check(function () {\n        $assert.areEqual('{\"a\":1}', Extensions.toJson({ a: 1 }));\n    }),\n\n    $test('fromJson')\n    .description('Verify Extensions.fromJson')\n    .check(function () {\n        $assert.areEqual('foo', Extensions.fromJson('{\"test\":\"foo\"}').test);\n        $assert.areEqual(2009, Extensions.fromJson('{\"test\":\"2009-11-21T22:22:59.860Z\"}').test.getFullYear());\n    }),\n\n    $test('createUniqueInstallationId')\n    .description('Verify Extensions.createUniqueInstallationId')\n    .check(function () {\n        $assert.areNotEqual(Extensions.createUniqueInstallationId(), Extensions.createUniqueInstallationId());\n    }),\n\n    $test('mapProperties')\n    .description('Verify Extensions.mapProperties')\n    .check(function () {\n        var obj = { foo: 1, bar: 2 };\n        var results = Extensions.mapProperties(obj, function (k, v) { return k + '=' + v; }).join(',');\n        $assert.areEqual(results, 'foo=1,bar=2');\n    }),\n\n    $test('pad')\n    .description('Verify Extensions.pad')\n    .check(function () {\n        $assertThrows(function () { Extensions.pad(null, 1, '0'); });\n        $assertThrows(function () { Extensions.pad(1, 'fasdfas', '0'); });\n        $assertThrows(function () { Extensions.pad(1, 1, 1); });\n        $assertThrows(function () { Extensions.pad(1, 1, null); });\n        $assertThrows(function () { Extensions.pad(1, 1, 'abc'); });\n\n        $assert.areEqual('01', Extensions.pad(1, 2, '0'));\n        $assert.areEqual('001', Extensions.pad(1, 3, '0'));\n        $assert.areEqual('12', Extensions.pad(12, 2, '0'));\n        $assert.areEqual('012', Extensions.pad(12, 3, '0'));\n        $assert.areEqual('??1', Extensions.pad(1, 3, '?'));\n    }),\n\n    $test('trimEnd')\n    .description('Verify Extensions.trimEnd')\n    .check(function () {\n        $assertThrows(function () { Extensions.trimEnd(null, '1'); });\n        $assertThrows(function () { Extensions.trimEnd(1, '1'); });\n        $assertThrows(function () { Extensions.trimEnd('foo', null); });\n        $assertThrows(function () { Extensions.trimEnd('foo', 1); });\n        $assertThrows(function () { Extensions.trimEnd('foo', 'abc'); });\n\n        $assert.areEqual('123', Extensions.trimEnd('123', '/'));\n        $assert.areEqual('123', Extensions.trimEnd('123/', '/'));\n        $assert.areEqual('/123', Extensions.trimEnd('/123', '/'));\n        $assert.areEqual('/123', Extensions.trimEnd('/123/', '/'));\n        $assert.areEqual('/123', Extensions.trimEnd('/123//', '/'));\n        $assert.areEqual('', Extensions.trimEnd('/', '/'));\n        $assert.areEqual('', Extensions.trimEnd('///', '/'));\n        $assert.areEqual('', Extensions.trimEnd('', '/'));\n    }),\n\n    $test('trimStart')\n    .description('Verify Extensions.trimStart')\n    .check(function () {\n        $assertThrows(function () { Extensions.trimStart(null, '1'); });\n        $assertThrows(function () { Extensions.trimStart(1, '1'); });\n        $assertThrows(function () { Extensions.trimStart('foo', null); });\n        $assertThrows(function () { Extensions.trimStart('foo', 1); });\n        $assertThrows(function () { Extensions.trimStart('foo', 'abc'); });\n\n        $assert.areEqual('123', Extensions.trimStart('123', '/'));\n        $assert.areEqual('123/', Extensions.trimStart('123/', '/'));\n        $assert.areEqual('123', Extensions.trimStart('/123', '/'));\n        $assert.areEqual('123/', Extensions.trimStart('/123/', '/'));\n        $assert.areEqual('123/', Extensions.trimStart('//123/', '/'));\n        $assert.areEqual('', Extensions.trimStart('/', '/'));\n        $assert.areEqual('', Extensions.trimStart('///', '/'));\n        $assert.areEqual('', Extensions.trimStart('', '/'));\n    }),\n\n    $test('compareCaseInsensitive')\n    .description('Verify Extensions.compareCaseInsensitive')\n    .check(function () {\n        $assert.isTrue(Extensions.compareCaseInsensitive('abc', 'abc'));\n        $assert.isTrue(Extensions.compareCaseInsensitive('ABC', 'ABC'));\n        $assert.isTrue(Extensions.compareCaseInsensitive('', ''));\n        $assert.isTrue(Extensions.compareCaseInsensitive(null, null));\n        $assert.isTrue(Extensions.compareCaseInsensitive('ABC', 'abc'));\n        $assert.isTrue(Extensions.compareCaseInsensitive('aBC', 'abc'));\n        $assert.isTrue(Extensions.compareCaseInsensitive('aBc', 'abc'));\n\n        $assert.isFalse(Extensions.compareCaseInsensitive('', 'abc'));\n        $assert.isFalse(Extensions.compareCaseInsensitive(' ABC', 'abc'));\n    }),\n\n    $test('url.combinePathSegments')\n    .description('Verify Extensions.url.combinePathSegments')\n    .check(function () {\n        $assertThrows(function () { Extensions.url.combinePathSegments(); });\n        $assertThrows(function () { Extensions.url.combinePathSegments(1); });\n        $assertThrows(function () { Extensions.url.combinePathSegments('foo', 1); });\n\n        $assert.areEqual('foo/bar', Extensions.url.combinePathSegments('foo', 'bar'));\n        $assert.areEqual('foo', Extensions.url.combinePathSegments('foo'));\n        $assert.areEqual('/foo/bar/', Extensions.url.combinePathSegments('/foo', 'bar/'));\n        $assert.areEqual('foo/bar', Extensions.url.combinePathSegments('foo', '/bar'));\n        $assert.areEqual('foo/bar', Extensions.url.combinePathSegments('foo/', 'bar'));\n        $assert.areEqual('foo/bar', Extensions.url.combinePathSegments('foo/', '/bar'));\n        $assert.areEqual('foo/bar/baz', Extensions.url.combinePathSegments('foo/', '/bar/', '/baz'));\n    }),\n\n   $test('url.getQueryString')\n    .description('Verify Extensions.url.getQueryString')\n    .check(function () {\n        $assertThrows(function () { Extensions.url.getQueryString(); });\n        $assertThrows(function () { Extensions.url.getQueryString(1); });\n        $assertThrows(function () { Extensions.url.getQueryString('foo'); });\n   \n        $assert.areEqual('state=WA', Extensions.url.getQueryString({ state: 'WA' }));\n        $assert.areEqual('state=WA&code=5', Extensions.url.getQueryString({ state: 'WA', code: 5 }));\n        $assert.areEqual('questions=What%20is%20your%20favorite%20food%3F', Extensions.url.getQueryString({ questions: 'What is your favorite food?' }));\n        $assert.areEqual('x=%7B%22y%22%3A%5B5%2C7%2C%22Hello!%22%5D%7D', Extensions.url.getQueryString({ x: { y: [5, 7, 'Hello!'] } }));\n    }),\n\n    $test('url.combinePathAndQuery')\n    .description('Verify Extensions.url.combinePathAndQuery')\n    .check(function () {\n        $assertThrows(function () { Extensions.url.combinePathAndQuery(); });\n        $assertThrows(function () { Extensions.url.combinePathAndQuery(1); });\n        $assertThrows(function () { Extensions.url.combinePathAndQuery('foo', 1); });\n\n        $assert.areEqual('\\\\somePath?someQuery=true', Extensions.url.combinePathAndQuery('\\\\somePath', 'someQuery=true'));\n        $assert.areEqual('\\\\somePath?someQuery=true', Extensions.url.combinePathAndQuery('\\\\somePath', '?someQuery=true'));\n    }),\n\n    $test('url.isAbsoluteUrl')\n    .description('Verify Extensions.url.isAbsoluteUrl')\n    .check(function () {\n        $assert.areEqual(Extensions.url.isAbsoluteUrl('ms-appx://www.test.com/'), false);\n        $assert.areEqual(Extensions.url.isAbsoluteUrl('www.test.com/'), false);\n        $assert.areEqual(Extensions.url.isAbsoluteUrl('$filter=(id eq 6)'), false);\n\n        $assert.areEqual(Extensions.url.isAbsoluteUrl('https://www.test.com/'), true);\n        $assert.areEqual(Extensions.url.isAbsoluteUrl('http://www.test.com/'), true);\n    }),\n\n    $test('tryParseIsoDateString')\n    .description('Verify Extensions.tryParseIsoDateString')\n    .check(function () {\n        $assertThrows(function () { Extensions.tryParseIsoDateString(1); });\n        $assertThrows(function () { Extensions.tryParseIsoDateString(new Date()); });\n\n        // Note: we convert to UTC first so the test will be independent of the\n        // machine's current time zone\n        var date = new Date(Date.UTC(1999, 1, 12));\n        $assert.areEqual(date.valueOf(), Extensions.tryParseIsoDateString(\"1999-02-12T00:00:00.000Z\").valueOf());\n        $assert.isNull(Extensions.tryParseIsoDateString(\"1999-02-12T00:00:00.000\"));\n        $assert.isNull(Extensions.tryParseIsoDateString(\"1999-02-12T00:00:00.00\"));\n        $assert.isNull(Extensions.tryParseIsoDateString(\"1999-02-12T00:00:00\"));\n        $assert.isNull(Extensions.tryParseIsoDateString(\"1999-02-12T00:00\"));\n        $assert.isNull(Extensions.tryParseIsoDateString('rasfoaksdfasdf'));\n\n        // Verify different formats for seconds and milliseconds\n        var milliseconds = { \"\": 0, \".1\": 100, \".22\": 220, \".333\": 333 };\n        for (var millisecondString in milliseconds) {\n            date = new Date(Date.UTC(2013, 1, 23, 15, 26, 37, milliseconds[millisecondString]));\n            var dateString = \"2013-02-23T15:26:37\" + millisecondString + \"Z\";\n            $assert.areEqual(date.valueOf(), Extensions.tryParseIsoDateString(dateString).valueOf());\n        }\n    }),\n\n    $test('createError')\n    .description('Verify the creation of error messages')\n    .check(function () {\n        // Default\n        var error = Extensions.createError();\n        $assert.areEqual(error.message, 'Unexpected failure.');\n        $assert.isNull(error.request);\n        $assert.isNull(error.exception);\n\n        // String\n        error = Extensions.createError('BOOM');\n        $assert.areEqual(error.message, 'BOOM');\n        $assert.isNull(error.request);\n        $assert.isNull(error.exception);\n\n        // Object\n        error = Extensions.createError({ x: 123 });\n        $assert.areEqual(error.message, 'Unexpected failure.');\n        $assert.isNull(error.request);\n        $assert.areEqual(error.exception.x, 123);\n\n        // Failing request (error in body)\n        error = Extensions.createError(null, { status: 400, responseText: '{\"error\":\"BOOM\"}'});\n        $assert.areEqual(error.message, 'BOOM');\n        $assert.areEqual(error.request.status, 400);\n        $assert.isNull(error.exception);\n\n        // Failing request (description in body)\n        error = Extensions.createError(null, { status: 400, responseText: '{\"description\":\"BOOM\"}' });\n        $assert.areEqual(error.message, 'BOOM');\n        $assert.areEqual(error.request.status, 400);\n        $assert.isNull(error.exception);\n\n        // Failing request (statusText)\n        error = Extensions.createError(null, { status: 400, responseText: '{\"other\":\"BOOM\"}', statusText: 'EXPLODED' });\n        $assert.areEqual(error.message, 'EXPLODED');\n        $assert.areEqual(error.request.status, 400);\n        $assert.isNull(error.exception);\n\n        // Failing connection\n        error = Extensions.createError(null, { status: 0, responseText: '{\"description\":\"BOOM\"}' });\n        $assert.areEqual(error.message, 'Unexpected connection failure.');\n        $assert.areEqual(error.request.status, 0);\n        $assert.isNull(error.exception);\n    }),\n\n    $test('installIdFormat')\n    .description('Verify the format of the installation ids')\n    .check(function () {\n        // Check to make sure that our installtion id format \n        // has the same format as a GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n\n        // Generate the id\n    var id = Extensions.createUniqueInstallationId();\n\n        // Make sure the hyphens are in the right places\n    $assert.areEqual(id[8], '-');\n    $assert.areEqual(id[13], '-');\n    $assert.areEqual(id[18], '-');\n    $assert.areEqual(id[23], '-');\n\n        // Ensure that we only have hyphens and alpha-numeric characters\n    $assert.isNotNull(id.match(/^[a-z0-9\\-]+$/i));\n    })\n);\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/unit/localStorageManager.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\MobileServices.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n// Declare JSHint globals\n/*global Platform:false,LocalStorageManager:false */\n\n$testGroup('LocalStorageManager',\n    $test('store.getRegistrationIds with empty store')\n    .description('Verify listRegistrations parses an array')\n    .check(function () {\n        clearStorage();\n\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey),\n            idList = localStore.getRegistrationIds();\n\n        $assert.isTrue(Array.isArray(idList));\n        $assert.areEqual(idList.length, 0);\n        $assert.isTrue(localStore.isRefreshNeeded);\n    }),\n\n    $test('store.getRegistrationIds with existing ids')\n    .description('Verify listRegistrations parses an array')\n    .check(function () {\n        populateStorage();\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey),\n            idList = localStore.getRegistrationIds();\n\n        $assert.isTrue(Array.isArray(idList));\n        $assert.areEqual(idList.length, 3);\n        $assert.areEqual(idList[0], '1');\n        $assert.areEqual(idList[1], '2');\n        $assert.areEqual(idList[2], '3');\n        $assert.isFalse(localStore.isRefreshNeeded);\n\n        clearStorage();\n    }),\n\n    $test('store.getRegistrationIds version changed')\n    .description('Verify listRegistrations needs refreshed on version change')\n    .check(function () {\n        Platform.writeSetting('MobileServices.Push.' + StorageKey, JSON.stringify({\n            Version: 'v1.0.0',\n            ChannelUri: 'oldChannel',\n            Registrations: {\n                'A': JSON.stringify({\n                    registrationId: '1',\n                    registrationName: 'A'\n                }),\n                'B': JSON.stringify({\n                    registrationId: '2',\n                    registrationName: 'B'\n                })\n            }}));\n\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey),\n            idList = localStore.getRegistrationIds();\n\n        $assert.isTrue(Array.isArray(idList));\n        $assert.areEqual(idList.length, 0);\n        $assert.isTrue(localStore.isRefreshNeeded);\n        $assert.areEqual(localStore.pushHandle, 'oldChannel');\n\n        clearStorage();\n    }),\n\n    $test('store.getRegistrationIdWithName success')\n    .description('Verify getRegistrationIdWithName works with valid name')\n    .check(function () {\n        populateStorage();\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey),\n            registrationId = localStore.getRegistrationIdWithName('B');\n\n        $assert.isNotNull(registrationId);\n        $assert.areEqual(registrationId, '2');\n\n        clearStorage();\n    }),\n\n    $test('store.getRegistrationIdWithName for valid name but not present')\n    .description('Verify getRegistrationIdWithName works with valid name')\n    .check(function () {\n        populateStorage();\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey),\n            registrationId = localStore.getRegistrationIdWithName('D');\n\n        $assert.isNull(registrationId);\n\n        clearStorage();\n    }),\n\n    $test('store.getRegistrationIdWithName throws')\n    .description('Verify getRegistrationIdWithName throws when no name given')\n    .check(function () {\n        populateStorage();\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n\n        try {\n            var registrationId = localStore.getRegistrationIdWithName();\n            $assert.fail('Expected error');\n        } catch (e) {\n            $assert.isNotNull(e);\n        }\n        clearStorage();\n    }),\n\n    $test('store.updateAllRegistrations throws')\n    .description('Verify updateAllRegistrations throws when no name given')\n    .check(function () {\n        var storage = populateStorage(),\n            localStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n\n        try {\n            var registrationId = localStore.updateAllRegistrations();\n            $assert.fail('Expected error');\n        } catch (e) {\n            $assert.isNotNull(e);\n        }\n\n        clearStorage();\n    }),\n\n    $test('store.updateAllRegistrations clears')\n    .description('Verify updateAllRegistrations removes all when passed null')\n    .check(function () {\n        populateStorage();\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n\n        localStore.updateAllRegistrations(null, 'myhandle');\n\n        var idList = localStore.getRegistrationIds();\n        $assert.areEqual(idList.length, 0);\n        $assert.areEqual(Platform.readSetting(FullStorageKey), '{\"Version\":\"v1.1.0\",\"ChannelUri\":\"myhandle\",\"Registrations\":{}}');\n\n        clearStorage();\n    }),\n\n    $test('store.updateAllRegistrations populates list')\n    .description('Verify updateAllRegistrations updates all when passed list')\n    .check(function () {\n        populateStorage();\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey),\n            newRegistrations = [{\n                registrationId: '25',\n                templateName: 'Y'\n            }, {\n                registrationId: '26',\n            }];\n\n        localStore.updateAllRegistrations(newRegistrations, 'myhandle');\n\n        var idList = localStore.getRegistrationIds();\n        $assert.areEqual(idList.length, 2);\n        $assert.areEqual(localStore.getRegistrationIdWithName('Y'), '25');\n        $assert.areEqual(localStore.getRegistrationIdWithName('$Default'), '26');\n        $assert.areEqual(Platform.readSetting(FullStorageKey), '{\"Version\":\"v1.1.0\",\"ChannelUri\":\"myhandle\",\"Registrations\":{\"Y\":\"25\",\"$Default\":\"26\"}}');\n\n        clearStorage();\n    }),\n\n    $test('store.updateRegistrationWithName updates a registration')\n    .description('Verify updateRegistrationWithName updates reg and handle')\n    .check(function () {\n        storage = populateStorage();\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n\n        localStore.updateRegistrationWithName('A', '_1', 'handle');\n\n        $assert.areEqual(localStore.getRegistrationIds().length, 3);\n        $assert.areEqual(localStore.getRegistrationIdWithName('A'), '_1');        \n        $assert.areEqual(localStore.pushHandle, 'handle');\n        $assert.areEqual(Platform.readSetting(FullStorageKey), '{\"Version\":\"v1.1.0\",\"ChannelUri\":\"handle\",\"Registrations\":{\"A\":\"_1\",\"B\":\"2\",\"C\":\"3\"}}');\n\n        clearStorage(storage);\n    }),\n\n    $test('store.updateRegistrationWithName throws')\n    .description('Verify updateRegistrationWithName throws when no name given')\n    .check(function () {\n        populateStorage();\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey),\n            registrationId;\n\n        try {\n            registrationId = localStore.updateRegistrationWithName(null, '_1', 'handle');\n            $assert.fail('Expected error');\n        } catch (e) {\n            $assert.isNotNull(e);\n        }\n\n        try {\n            registrationId = localStore.updateRegistrationWithName('A', '', 'handle');\n            $assert.fail('Expected error');\n        } catch (e) {\n            $assert.isNotNull(e);\n        }\n\n        try {\n            registrationId = localStore.updateRegistrationWithName('A', '_1', null);\n            $assert.fail('Expected error');\n        } catch (e) {\n            $assert.isNotNull(e);\n        }\n\n        clearStorage();\n    }),\n\n    $test('store.deleteRegistrationWithName success')\n    .description('Verify deleteRegistrationWithName removes registration')\n    .check(function () {\n        populateStorage();\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n\n        localStore.deleteRegistrationWithName('C');\n        $assert.areEqual(localStore.getRegistrationIds().length, 2);\n        $assert.isNull(localStore.getRegistrationIdWithName('C'));\n        $assert.areEqual(Platform.readSetting(FullStorageKey), '{\"Version\":\"v1.1.0\",\"ChannelUri\":\"myhandle\",\"Registrations\":{\"A\":\"1\",\"B\":\"2\"}}');\n\n        clearStorage();\n    }),\n\n    $test('store.deleteRegistrationWithName success when no registration')\n    .description('Verify deleteRegistrationWithName succeeds when no registration found')\n    .check(function () {\n        populateStorage();\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n\n        localStore.deleteRegistrationWithName('D');\n        $assert.areEqual(localStore.getRegistrationIds().length, 3);\n        $assert.areEqual(Platform.readSetting(FullStorageKey), '{\"Version\":\"v1.1.0\",\"ChannelUri\":\"myhandle\",\"Registrations\":{\"A\":\"1\",\"B\":\"2\",\"C\":\"3\"}}');\n\n        clearStorage();\n    }),\n\n    $test('store.deleteRegistrationWithName throws')\n    .description('Verify deleteRegistrationWithName throws when no name given')\n    .check(function () {\n        populateStorage();\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey),\n            registrationId;\n\n        try {\n            registrationId = localStore.deleteRegistrationWithName();\n            $assert.fail('Expected error');\n        } catch (e) {\n            $assert.isNotNull(e);\n        }\n\n        try {\n            registrationId = localStore.deleteRegistrationWithName('');\n            $assert.fail('Expected error');\n        } catch (e) {\n            $assert.isNotNull(e);\n        }\n\n        clearStorage();\n    }),\n\n    $test('store.deleteAllRegistrations success')\n    .description('Verify deleteAllRegistrations removes all registration')\n    .check(function () {\n        populateStorage();\n        var localStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n\n        localStore.deleteAllRegistrations();\n        $assert.areEqual(localStore.getRegistrationIds().length, 0);\n        $assert.areEqual(localStore.pushHandle, 'myhandle');\n        $assert.areEqual(Platform.readSetting(FullStorageKey), '{\"Version\":\"v1.1.0\",\"ChannelUri\":\"myhandle\",\"Registrations\":{}}');\n\n        clearStorage();\n    })\n);\n\nvar StorageKey = 'mystoragekey',\n    FullStorageKey = 'MobileServices.Push.' + StorageKey;\n\nfunction populateStorage() {\n    Platform.writeSetting(FullStorageKey, JSON.stringify({\n        Version: 'v1.1.0',\n        ChannelUri: 'myhandle',\n        Registrations:  {\n            'A': '1',\n            'B': '2',\n            'C': '3'\n        }\n    }));\n\n}\n\nfunction clearStorage() {\n    Platform.writeSetting(FullStorageKey, null);\n}"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/unit/mobileServiceTables.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\MobileServices.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n// Declare JSHint globals\n/*global MobileServiceClient:false */\n\nvar testData = require(\"constants\");\n\nfunction checkRequestURL(url, property)\n{\n    if (property === WindowsAzure.MobileServiceTable.SystemProperties.None) {\n        $assert.isTrue(url.indexOf('__systemProperties') < 0); \n        return;\n    } else if (property === WindowsAzure.MobileServiceTable.SystemProperties.All) {\n        $assert.contains(url, '__systemProperties=*');\n        return;\n    }\n\n    $assert.contains(url, '__systemProperties');\n    \n    if (property & WindowsAzure.MobileServiceTable.SystemProperties.All.CreatedAt) {\n        $assert.contains(url, '__createdAt');\n    }\n    \n    if (property & WindowsAzure.MobileServiceTable.SystemProperties.All.UpdatedAt) {\n        $assert.contains(url, '__updatedAt');\n    }\n    \n    if (property & WindowsAzure.MobileServiceTable.SystemProperties.All.Version) {\n        $assert.contains(url, '__version');\n    }\n}\n\n$testGroup('MobileServiceTables.js',\n    $test('table.read() with no id results')\n    .description('Verify MobileTableService.get returns the results')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?$filter=price eq 100');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.read('$filter=price eq 100').then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        });\n    }),\n\n    $test('table.read() with null id results')\n    .description('Verify MobileTableService.get returns the results')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"id\":null, \"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.read().then(function (results) {\n            $assert.areEqual(results.id, null);\n            $assert.areEqual(results.title, 'test');\n        });\n    }),\n\n    $test('table.read() with any id response content')\n    .description('Verify table.read returns the results')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.validStringIds.concat(testData.emptyStringIds).concat(testData.invalidStringIds).concat(testData.validIntIds).concat(testData.invalidIntIds).concat(testData.nonStringNonIntValidJsonIds),\n            testCases = [];\n\n        testIdData.forEach(function (stringId) {\n            testCases.push(function () {\n                client = client.withFilter(function (req, next, callback) {\n                    callback(null, { status: 200, responseText: '[{\"id\":' + JSON.stringify(stringId) + '}]' });\n                });\n\n                return client.getTable('books').read().then(function (results) {\n                    $assert.areEqual(results.length, 1);\n                    $assert.areEqual(results[0].id, stringId);\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('table.read() with string id filter')\n    .description('Verify table.read returns the results')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.validStringIds.concat(testData.emptyStringIds).concat(testData.invalidStringIds),\n            testCases = [];\n\n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                client = client.withFilter(function (req, next, callback) {\n                    $assert.areEqual(req.url, \"http://www.test.com/tables/books?$filter=id eq \\'\" + encodeURIComponent(testId) + \"\\'\");\n                    callback(null, { status: 200, responseText: '[{\"id\":' + JSON.stringify(testId) + '}]' });\n                });\n\n                var filter = \"$filter=id eq '\" + encodeURIComponent(testId) + \"'\";\n                return client.getTable('books').read(filter).then(function (results) {\n                    $assert.areEqual(results.length, 1);\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('table.read() with null id filter')\n    .description('Verify MobileTableService.get returns the results')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, \"http://www.test.com/tables/books?$filter=id eq null\");\n            callback(null, { status: 200, responseText: '{\"id\":null, \"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.read('$filter=id eq null').then(function (results) {\n            $assert.areEqual(results.id, null);\n            $assert.areEqual(results.title, 'test');\n        });\n    }),\n\n    $test('query via table.read(query)')\n    .description('Verify MobileTableService.query created a correct deferred query')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?$filter=(price eq 100)&$orderby=title&$select=price');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n        \n        var table = client.getTable('books');\n        var query2 = table.where({ showComments: true });\n        var query = table.where(function (context) { return (this.price == context.price); }, { price: 100 }).orderBy('title').select('price');\n        return table.read(query).then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        });\n    }),\n\n    $test('query table with empty select()')\n    .description('Verify getTable.select with null string does not throw an error')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        return client.getTable('books').select('').read().then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        }, function (error) {\n            $assert.fail('Call should not have failed');\n        });\n    }),\n    \n    $test('query via table.read(query)')\n    .description('Verify MobileTableService.query created a URL encoded query')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?$filter=(title eq \\'How%20to%20dial%20this%20%23%20%26%20such%20\\'\\'stuff\\'\\'%3F\\')');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        var query = table.where(function () { return (this.title == 'How to dial this # & such \\'stuff\\'?'); });\n        return table.read(query).then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        });\n    }),\n\n    $test('query via table.read(query) with user-defined query parameters')\n    .description('Verify MobileTableService.query created a correct deferred query')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?$filter=(price eq 100)&$orderby=title&$select=price&state=CA&tags=%23pizza%20%23beer');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        var query2 = table.where({ showComments: true });\n        var query = table.where(function () { return this.price == 100; }).orderBy('title').select('price');\n        return table.read(query, { state: 'CA', tags: '#pizza #beer' }).then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        });\n    }),\n\n    $test('query via table.read(query) with invalid user-defined query parameters')\n    .description('Verify MobileTableService.query fails with incorrect user-defined parameters')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        var query2 = table.where({ showComments: true });\n        var query = table.where(function () { return this.price == 100; }).orderBy('title').select('price');\n        return table.read(query, { state: 'CA', $invalid: 'since it starts with a \\'$\\'' }).then(function (results) {\n            $assert.fail('Should have failed.');\n        }, function (error) {\n            $assert.contains(error.message, 'User-defined query string');\n        });\n    }),\n\n    $test('query via table.read()')\n    .description('Verify MobileServiceTable.read implies a default query')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.read().then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        });\n    }),\n\n    $test('query via table.read() with no response content')\n    .description('Verify MobileServiceTable table operations allow responses without content')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books');\n            callback(null, { status: 200, responseText: \"\" });\n        });\n\n        var table = client.getTable('books');\n        return table.read().then(function (results) {\n            $assert.areEqual(results, null);\n        });\n    }),\n\n    $test('query via table.read() with user-defined parameters')\n    .description('Verify MobileServiceTable.read implies a default query even when used with user-defined query string parmeters')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?state=PA');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.read({ state: 'PA' }).then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        });\n    }),\n\n    $test('query via query.read()')\n    .description('Verify MobileTableService.query created a correct deferred query')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?$filter=(price eq 100)&$orderby=title&$select=price');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        var query =\n            table\n            .where(function () { return this.price == 100; })\n            .orderBy('title')\n            .select('price')\n            .read()\n            .then(function (results) {\n                $assert.areEqual(results.title, 'test');\n            });\n\n        // Note: separate return statement because of awesome JS syntax quirk\n        // where a \"return\" on a line by itself will be considered \"return;\"\n        return query;\n    }),\n\n    $test('query via table.read()')\n    .description('Verify MobileServiceTable.read sends a request for the table')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.read().then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        });\n    }),\n\n    $test('tableReadAgainstTableStorage')\n    .tag('LinkHeader')\n    .description('Verify MobileServiceTable.read sends a link header and is parsed for table storage')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books');\n            callback(null, { status: 200, responseText: '[{\"title\":\"test\"}]', getResponseHeader: function (header) { return header == 'Link' ? 'https://test.com/tables/books?skip=10&top=40; rel=next' : null; } });\n        });\n\n        var table = client.getTable('books');\n        return table.read().then(function (results) {\n            $assert.areEqual(results.nextLink, 'https://test.com/tables/books?skip=10&top=40');\n            $assert.areEqual(results[0].title, 'test');\n        });\n    }),\n\n    $test('tableReadAgainstTableStorageWithPrevLink')\n    .tag('LinkHeader')\n    .description('Verify MobileServiceTable.read sends a link header but if it is a prev link, it is not parsed')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books');\n            callback(null, { status: 200, responseText: '[{\"title\":\"test\"}]', getResponseHeader: function (header) { return header == 'Link' ? 'https://test.com/tables/books?skip=10&top=40; rel=prev' : null; } });\n        });\n\n        var table = client.getTable('books');\n        return table.read().then(function (results) {\n            $assert.isNull(results.nextLink);\n            $assert.areEqual(results[0].title, 'test');\n        });\n    }),\n\n    $test('tableReadAgainstTableStorageReturnsObject')\n    .tag('LinkHeader')\n    .description('Verify MobileServiceTable.read sends a link header but it is not parsed if an object is sent back')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}', getResponseHeader: function (header) { return header == 'Link' ? 'https://test.com/tables/books?skip=10&top=40; rel=next' : null; } });\n        });\n\n        var table = client.getTable('books');\n        return table.read().then(function (results) {\n            $assert.isNull(results.nextLink);\n            $assert.areEqual(results.title, 'test');\n        });\n    }),\n\n    $test('queryReadAgainstTableStorage')\n    .tag('LinkHeader')\n    .description('Verify MobileServiceQuery.read sends a link header and is parsed for table storage')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?$top=50');\n            callback(null, { status: 200, responseText: '[{\"title\":\"test\"}]', getResponseHeader: function (header) { return header == 'Link' ? 'https://test.com/tables/books?skip=10&top=40; rel=next' : null; } });\n        });\n\n        var table = client.getTable('books');\n        return table.take(50).read().then(function (results) {\n            $assert.areEqual(results.nextLink, 'https://test.com/tables/books?skip=10&top=40');\n            $assert.areEqual(results[0].title, 'test');\n        });\n    }),\n\n    $test('tableReadWithUrl')\n    .description('Verify MobileServiceTable.read with full url works')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient('https://wwww.test.com/', '123456abcdefg');\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'https://test.com/tables/books?skip=10&top=40');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.read('https://test.com/tables/books?skip=10&top=40').then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        });\n    }),\n\n    $test('query matches table')\n    .description('Verify that a query created from one table is not used with another table')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        \n        var t1 = client.getTable('books');\n        var t2 = client.getTable('users');\n\n        var q1 = t1.orderBy('price');\n        return t2.read(q1).then(\n            function () { },\n            function (ex) {\n                $assert.contains(ex.message, 'books');\n                $assert.contains(ex.message, 'users');\n            });\n    }),\n\n    $test('query projection')\n    .description('Verify MobileTableService.query correctly applied a projection')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?$filter=(price eq 100)&$orderby=title');\n            callback(null, { status: 200, responseText: '[{\"title\":\"test\"}]' });\n        });\n\n        var table = client.getTable('books');\n        var query =\n            table\n            .where(function () { return this.price == 100; })\n            .orderBy('title')\n            .select(function () {\n                this.title = this.title.toUpperCase();\n                return this;\n            });\n        return table.read(query).then(function (results) {\n            $assert.areEqual(results[0].title, 'TEST');\n        });\n    }),\n\n    $test('query with two methods')\n    .description('Verify where clauses using two javascript methods work correctly')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, \"http://www.test.com/tables/books?$filter=(indexof(tolower(Title),'pirate') ge 0)\");\n            callback(null, { status: 200, responseText: '[{\"title\":\"test\"}]' });\n        });\n\n        var table = client.getTable('books');\n        var query = table.where(function () { return ((this.Title.toLowerCase().indexOf('pirate')) >= 0); });\n        return table.read(query).then(function (results) {\n            $assert.areEqual(results[0].title, 'test');\n        });\n    }),\n\n    $test('insert')\n    .description('Verify MobileTableService.insert')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?state=CA');\n            $assert.areEqual(req.data, '{\"price\":100}');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        var originalModelObject = { price: 100 };\n        return table.insert(originalModelObject, { state: 'CA' }).then(function (results) {\n            var isWinJs = typeof Windows === \"object\";\n            if (isWinJs) {\n                // For backward compatibility, the WinJS client mutates the original model\n                // object by adding/overwriting properties from the server response\n                $assert.isTrue(results === originalModelObject);\n                $assert.areEqual(results.price, 100);    // We have the original properties\n                $assert.areEqual(results.title, 'test'); // Combined with the server response properties\n            } else {\n                // The web client simply returns the server response without mutating your\n                // original model, which is a lot more useful if the server response might\n                // not be the same kind of object\n                $assert.isFalse(results === originalModelObject);\n                $assert.areEqual(results.title, 'test');    // We have the server response properties\n                $assert.areEqual(results.price, undefined); // But not the original model properties\n                $assert.areEqual(originalModelObject.title, undefined); // And the original is unchanged\n                $assert.areEqual(originalModelObject.price, 100);\n            }\n        });\n    }),\n\n    $test('table.insert() success with valid ids (string only)')\n    .description('Verify table.insert works with all valid ids')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.validStringIds,\n            testCases = [];\n            \n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                var originalModelObject = { id: testId, price: 100 };\n\n                client = client.withFilter(function (req, next, callback) {\n                    $assert.areEqual(req.type, 'POST');\n                    $assert.areEqual(req.url, 'http://www.test.com/tables/books');\n                    $assert.areEqual(req.data, '{\"id\":' + JSON.stringify(testId) + ',\"price\":100}');\n                    callback(null, { status: 200, responseText: '{\"id\":' + JSON.stringify(testId) + ', \"title\":\"test\"}' });\n                });\n\n                return client.getTable('books').insert(originalModelObject).then(function (result) {\n                    $assert.areEqual(result.id, testId);\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('table.insert() throws with invalid ids')\n    .description('Verify table.insert fails with non string ids or invalid string ids')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.validIntIds.concat(testData.invalidStringIds).concat(testData.invalidIntIds),\n            testCases = [];\n\n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                var originalModelObject = { id: testId, price: 100 };\n\n                client = client.withFilter(function (req, next, callback) {\n                    callback(null, { status: 200, responseText: req.data });\n                });\n\n                return client.getTable('books').insert(originalModelObject).then(function (result) {\n                    $assert.fail('Should have failed');\n                }, function (error) {\n                    $assert.isTrue(error.message.indexOf('member is already set') !== -1 ||\n                                   error.message.indexOf('is not valid') !== -1);\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('table.insert() can return any possible id')\n    .description('Verify table.insert can return all valid ids')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.validStringIds.concat(testData.validIntIds).concat(testData.invalidIntIds).concat(testData.invalidStringIds),\n            testCases = [];\n\n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                var originalModelObject = { id: 'magic', price: 100 };\n\n                client = client.withFilter(function (req, next, callback) {\n                    callback(null, { status: 200, responseText: '{\"id\":' + JSON.stringify(testId) + '}' });\n                });\n\n                return client.getTable('books').insert(originalModelObject).then(function (result) {\n                    $assert.areEqual(result.id, testId);\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n\n    $test('insertThrows')\n    .description('Verify MobileTableService.insert throws on an existing id')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.insert({ id: 100 }).then(function (results) {\n            $assert.fail('Should have failed.');\n        }, function (error) {\n            $assert.contains(error.message, 'id');\n        });\n    }),\n\n    $test('insertThrows IncorrectCaseID Check')\n    .description('Verify MobileTableService.insert throws on incorrect case of id')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.insert({ ID: 100 }).then(function (results) {\n            $assert.fail('Should have failed.');\n        }, function (error) {\n            $assert.contains(error.message, 'id');\n        });\n    }),\n\n    $test('insert success with Id of zero')\n    .description('Verify MobileTableService.insert succeeds on an id of 0')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.insert({ id: 0 }).then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        }, function (error) {\n            $assert.fail('Should have succeeded.');\n        });\n    }),\n\n    $test('insert success with empty string as Id')\n    .description('Verify MobileTableService.insert succeeds on an id of empty string')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.insert({ id: '' }).then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        }, function (error) {\n            $assert.fail('Should have succeeded.');\n        });\n    }),\n\n    $test('insert success with a string as Id')\n    .description('Verify MobileTableService.insert succeeds on an id of empty string')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.insert({ id: 'foo' }).then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        }, function (error) {\n            $assert.fail('Should have succeeded.');\n        });\n    }),\n\n    $test('insert success can return string Id')\n    .description('Verify MobileTableService.insert succeeds on a string id')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"id\":\"alpha\", \"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.insert({ title: 'test' }).then(function (results) {\n            $assert.areEqual(results.id, 'alpha');\n        }, function (error) {\n            $assert.fail('Should have succeeded.');\n        });\n    }),\n\n    $test('update')\n    .description('Verify MobileTableService.update')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'PATCH');\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books/2?state=AL');\n            $assert.areEqual(req.data, '{\"id\":2,\"price\":100}');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        var originalModelObject = { id: 2, price: 100 };\n        return table.update(originalModelObject, { state: 'AL' }).then(function (results) {\n            var isWinJs = typeof Windows === \"object\";\n            if (isWinJs) {\n                // For backward compatibility, the WinJS client mutates the original model\n                // object by adding/overwriting properties from the server response\n                $assert.isTrue(results === originalModelObject);\n                $assert.areEqual(results.id, 2);         // We have the original properties\n                $assert.areEqual(results.price, 100);\n                $assert.areEqual(results.title, 'test'); // Combined with the server response properties\n            } else {\n                // The web client simply returns the server response without mutating your\n                // original model, which is a lot more useful if the server response might\n                // not be the same kind of object\n                $assert.isFalse(results === originalModelObject);\n                $assert.areEqual(results.title, 'test');     // We have the server response properties\n                $assert.areEqual(results.id, undefined);     // But not the original model properties\n                $assert.areEqual(results.price, undefined);\n                $assert.areEqual(originalModelObject.id, 2); // And the original is unchanged\n                $assert.areEqual(originalModelObject.price, 100);\n                $assert.areEqual(originalModelObject.title, undefined);\n            }\n        });\n    }),\n\n    $test('table.update() success with valid ids')\n    .description('Verify table.update works with all valid ids')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.validStringIds.concat(testData.validIntIds),\n            testCases = [];\n\n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                var originalModelObject = { id: testId, price: 100 };\n\n                client = client.withFilter(function (req, next, callback) {\n                    $assert.areEqual(req.type, 'PATCH');\n                    $assert.areEqual(req.url, 'http://www.test.com/tables/books/' + encodeURIComponent(testId));\n                    $assert.areEqual(req.data, '{\"id\":' + JSON.stringify(testId) + ',\"price\":100}');\n                    callback(null, { status: 200, responseText: '{\"id\":' + JSON.stringify(testId) + '}' });\n                });\n\n                return client.getTable('books').update(originalModelObject).then(function (result) {\n                    $assert.areEqual(result.id, testId);\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('table.update() throws with invalid ids')\n    .description('Verify table.update fails with invalid ids')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.invalidIntIds.concat(testData.invalidStringIds),\n            testCases = [];\n\n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                var originalModelObject = { id: testId, price: 100 };\n\n                client = client.withFilter(function (req, next, callback) {\n                    callback(null, { status: 200, responseText: req.data });\n                });\n\n                return client.getTable('books').update(originalModelObject).then(function (result) {\n                    $assert.fail('Should have failed');\n                }, function (error) {\n                    $assert.contains(error.message, 'is not valid');\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('table.update() can return any possible id')\n    .description('Verify table.update can return all ids')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.validStringIds.concat(testData.validIntIds).concat(testData.invalidIntIds).concat(testData.invalidStringIds),\n            testCases = [];\n            \n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                var originalModelObject = { id: 1, price: 100 };\n\n                client = client.withFilter(function (req, next, callback) {\n                    callback(null, { status: 200, responseText: '{\"id\":' + JSON.stringify(testId) + '}' });\n                });\n\n               return client.getTable('books').update(originalModelObject).then(function (result) {\n                    $assert.areEqual(result.id, testId);\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('update throws no id')\n    .description('Verify MobileTableService.update throws when no id')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.update({ Value: 100 }).then(function (results) {\n            $assert.fail('Should have failed.');\n        }, function (error) {\n            $assert.contains(error.message, 'id');\n        });\n    }),\n\n    $test('update throws id of 0')\n    .description('Verify MobileTableService.update throws on id of 0')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.update({ id: 0 }).then(function (results) {\n            $assert.fail('Should have failed.');\n        }, function (error) {\n            $assert.contains(error.message, 'id');\n        });\n    }),\n\n    $test('update throws empty string id')\n    .description('Verify MobileTableService.update throws empty string id')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.update({ id: '' }).then(function (results) {\n            $assert.fail('Should have failed.');\n        }, function (error) {\n            $assert.contains(error.message, 'id');\n        });\n    }),\n\n    $test('table.lookup() with static string id and any id response content')\n    .description('Verify table.lookup returns the results')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.validStringIds.concat(testData.emptyStringIds).concat(testData.invalidStringIds).concat(testData.validIntIds).concat(testData.invalidIntIds).concat(testData.nonStringNonIntValidJsonIds);\n            testCases = [];\n            \n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                client = client.withFilter(function (req, next, callback) {\n                    $assert.areEqual(req.url, 'http://www.test.com/tables/books/id');\n                    callback(null, { status: 200, responseText: '{\"id\":' + JSON.stringify(testId) + '}' });\n                });\n\n                return client.getTable('books').lookup('id').then(function (result) {\n                    $assert.areEqual(result.id, testId);\n                }, function (error) {\n                    $assert.fail(\"Should have succeeded\");\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('table.lookup() with string id and null response type')\n    .description('Verify table.lookup returns the results')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books/id');\n            callback(null, { status: 200, responseText: '{\"id\": null }' });\n        });\n\n        var table = client.getTable('books');\n        return table.lookup('id').then(function (result) {\n            $assert.areEqual(result.id, null);\n        }, function (error) {\n            $assert.fail(\"Should have succeeded\");\n        });\n    }),\n\n    $test('table.lookup() with string id and no id response type')\n    .description('Verify table.lookup returns the results')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books/id');\n            callback(null, { status: 200, responseText: '{\"string\": \"hey\" }' });\n        });\n\n        var table = client.getTable('books');\n        return table.lookup('id').then(function (result) {\n            $assert.areEqual(result.string, 'hey');\n        }, function (error) {\n            $assert.fail(\"Should have succeeded\");\n        });\n    }),\n\n    $test('table.lookup() with valid ids')\n    .description('Verify table.lookup returns the results')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.validStringIds.concat(testData.validIntIds),\n            testCases = [];\n\n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                client = client.withFilter(function (req, next, callback) {\n                    $assert.areEqual(req.url, 'http://www.test.com/tables/books/' + encodeURIComponent(testId));\n                    callback(null, { status: 200, responseText: '{\"id\":' + JSON.stringify(testId) + '}' });\n                });\n\n                return client.getTable('books').lookup(testId).then(function (result) {\n                    $assert.areEqual(result.id, testId);\n                }, function (error) {\n                    $assert.fail(\"Should have succeeded\");\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('table.lookup() throws with invalid id types')\n    .description('Verify table.lookup throws when given an invalid id')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.invalidStringIds.concat(testData.emptyStringIds).concat(testData.invalidIntIds);\n        testCases = [];\n\n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                client = client.withFilter(function (req, next, callback) {\n                    callback(null, { status: 200, responseText: '{\"id\":' + JSON.stringify(testId) + '}' });\n                });\n\n                return client.getTable('books').lookup(testId).then(function (result) {\n                    $assert.fail('Should have failed');\n                }, function (error) {\n                    $assert.contains(error.message, \"is not valid.\");\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('lookup with parameter')\n    .description('Verify MobileTableService.lookup returns the result')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books/5?state=FL');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.lookup(5, { state: 'FL' }).then(function (results) {\n            $assert.areEqual(results.title, 'test');\n        });\n    }),\n\n    $test('lookup throws no id')\n    .description('Verify MobileTableService.lookup throws if no id')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books/5?state=FL');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.lookup(null, { state: 'WY' }).then(function (results) {\n            $assert.fail('Should have failed.');\n        }, function (error) {\n            $assert.contains(error.message, 'id');\n        });\n    }),\n\n    $test('lookup throws id zero')\n    .description('Verify MobileTableService.lookup throws when id is 0')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books/5?state=FL');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.lookup(0, { state: 'WY' }).then(function (results) {\n            $assert.fail('Should have failed.');\n        }, function (error) {\n            $assert.contains(error.message, 'id');\n        });\n    }),\n\n    $test('table.del() sucess with valid ids')\n    .description('Verify table.del works with all valid ids')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.validStringIds.concat(testData.validIntIds),\n            testCases = [];\n\n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                client = client.withFilter(function (req, next, callback) {\n                    $assert.areEqual(req.type, 'DELETE');\n                    $assert.areEqual(req.url, 'http://www.test.com/tables/books/' + encodeURIComponent(testId));\n                    $assert.isNull(req.data);\n                    callback(null, { status: 200, responseText: null });\n                });\n\n                return client.getTable('books').del({ id: testId });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('table.del() throws with invalid ids')\n    .description('Verify table.del fails with all invalid ids')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.invalidStringIds.concat(testData.invalidIntIds),\n            testCases = [];\n\n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                client = client.withFilter(function (req, next, callback) {\n                    $assert.areEqual(req.type, 'DELETE');\n                    $assert.areEqual(req.url, 'http://www.test.com/tables/books/' + encodeURIComponent(testId));\n                    $assert.isNull(req.data);\n                    callback(null, { status: 200, responseText: null });\n                });\n\n                return client.getTable('books').del({ id: testId }).then(function (result) {\n                    $assert.fail('Should have failed');\n                }, function (error) {\n                    $assert.contains(error.message, 'is not valid.');\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('del')\n    .description('Verify MobileTableService.del')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'DELETE');\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books/2?state=WY');\n            $assert.isNull(req.data);\n            callback(null, { status: 200, responseText: null });\n        });\n\n        var table = client.getTable('books');\n        return table.del({ id: 2 }, { state: 'WY' });\n    }),\n\n    $test('del throws no id')\n    .description('Verify MobileTableService.del throws when no Id is passed')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.del({ Value: 100 }).then(function (results) {\n            $assert.fail('Should have failed.');\n        }, function (error) {\n            $assert.contains(error.message, 'id');\n        });\n    }),\n\n    $test('del throws id of 0')\n    .description('Verify MobileTableService.del throws on an id of 0')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"title\":\"test\"}' });\n        });\n\n        var table = client.getTable('books');\n        return table.del({ id: 0 }).then(function (results) {\n            $assert.fail('Should have failed.');\n        }, function (error) {\n            $assert.contains(error.message, 'id');\n        });\n    }),\n\n    $test('del with version')\n    .tag('SystemProperties')\n    .description('Verify that serverItem is set if delete fails with pre-condition failed error.')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers['If-Match'], '\"test\\\\\"qu\\\\\"oteAnd\\\\\\\\\"\"');\n            callback(null, {\n                status: 412,\n                responseText: '{\"id\":\"abc\", \"title\":\"test\", \"__version\":\"apple\"}'\n            });\n        });\n\n        var table = client.getTable('books');\n        table.systemProperties = WindowsAzure.MobileServiceTable.SystemProperties.Version;\n\n        return table.del({ id: 'my id', value: 'A', __version: 'test\"qu\"oteAnd\\\\\"' })\n                    .then(function (result) {\n                        $assert.fail('Should have failed');\n                    }, function (error) {\n                        $assert.areEqual(error.serverInstance.__version, 'apple');\n                    });\n    }),\n\n    $test('del with version but without response')\n    .tag('SystemProperties')\n    .description('Verify that serverItem is not set if delete fails with pre-condition failed error but without repsonse body.')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers['If-Match'], '\"test\\\\\"qu\\\\\"oteAnd\\\\\\\\\"\"');\n            callback(null, {\n                status: 412,\n                responseText: ''\n            });\n        });\n\n        var table = client.getTable('books');\n        table.systemProperties = WindowsAzure.MobileServiceTable.SystemProperties.Version;\n\n        return table.del({ id: 'my id', value: 'A', __version: 'test\"qu\"oteAnd\\\\\"' })\n                    .then(function (result) {\n                        $assert.fail('Should have failed');\n                    }, function (error) {\n                        // has the server instance key \n                        $assert.isTrue(Object.keys(error).indexOf('serverInstance') > -1);\n                        // but with null value\n                        $assert.isNull(error.serverInstance);\n                    });\n    }),\n\n    $test('Test receiving invalid json')\n    .description('Verify error is handled correctly when we receive invalid json')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.microsoft.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '<html><body>I am a webpage</body></html>', getResponseHeader: function () { return 'text/html'; } });\n        });\n\n        var table = client.getTable('books');\n        return table.insert({ 'State': 'CA' }).then(function (results) {\n            $assert.fail(\"Should have failed\");\n        },\n        function (error) {\n            $assert.isNotNull(error.message);\n        });\n    }),\n\n    $test('table.refresh() with valid ids')\n    .description('Verify table.refresh works with all valid ids')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.validStringIds.concat(testData.validIntIds),\n            testCases = [];\n\n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                var originalModelObject = { id: testId, price: 100, custom: 5 };\n\n                client = client.withFilter(function (req, next, callback) {\n                    $assert.areEqual(req.type, 'GET');\n                    if (typeof testId === 'string') {\n                        var uriId = encodeURIComponent(testId).replace(/\\'/g, '%27%27');\n                        $assert.areEqual(req.url, \"http://www.test.com/tables/books?$filter=id eq '\" + uriId + \"'\");\n                    } else {\n                        $assert.areEqual(req.url, \"http://www.test.com/tables/books?$filter=id eq \" + encodeURIComponent(testId));\n                    }\n                    callback(null, { status: 200, responseText: '{\"id\":' + JSON.stringify(testId) + ', \"title\":\"test\", \"price\": 200}' });\n                });\n\n                return client.getTable('books').refresh(originalModelObject).then(function (results) {\n                    var isWinJs = typeof Windows === \"object\";\n                    if (isWinJs) {\n                        // For backward compatibility, the WinJS client mutates the original model\n                        // object by adding/overwriting properties from the server response\n                        $assert.isTrue(results === originalModelObject);\n                        $assert.areEqual(results.id, testId);    // We have the original properties\n                        $assert.areEqual(results.custom, 5);\n                        $assert.areEqual(results.price, 200);    // updated with the return from the server\n                        $assert.areEqual(results.title, 'test');\n                    } else {\n                        // The web client simply returns the server response without mutating your\n                        // original model, which is a lot more useful if the server response might\n                        // not be the same kind of object\n                        $assert.isFalse(results === originalModelObject);\n                        $assert.areEqual(results.title, 'test');     // We have the server response properties\n                        $assert.areEqual(results.id, testId);\n                        $assert.areEqual(results.custom, null);        // but no original properties carried over\n                        $assert.areEqual(results.price, 200);\n                        $assert.areEqual(originalModelObject.id, testId); // And the original is unchanged\n                        $assert.areEqual(originalModelObject.price, 100);\n                        $assert.areEqual(originalModelObject.title, undefined);\n                    }\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('table.refresh() with invalid ids')\n    .description('Verify table.refresh does not hit server with nonstring invalid ids')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.invalidIntIds.concat(testData.nonStringNonIntIds).\n            testCases = [];\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.fail('Should not have hit server');\n        });\n\n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                var originalModelObject = { id: testId, price: 100, custom: 5 };\n\n                return client.getTable('books').refresh(originalModelObject).then(function (results) {\n                    $assert.areEqual(results.id, testId);\n                    $assert.areEqual(results.price, 100);\n                    $assert.areEqual(results.custom, 5);\n                    $assert.areEqual(results.title, null);\n                }, function (error) {\n                    $assert.fail('Should have succeeded');\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('table.refresh() with invalid string ids')\n    .description('Verify table.refresh fails with nonstring invalid ids')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testIdData = testData.invalidStringIds,\n            testCases = [];\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.fail('Should not have hit server');\n        });\n\n        testIdData.forEach(function (testId) {\n            testCases.push(function () {\n                var originalModelObject = { id: testId, price: 100, custom: 5 };\n\n                return client.getTable('books').refresh(originalModelObject).then(function (results) {\n                    $assert.fail('Should have failed');\n                }, function (error) {\n                    $assert.contains(error.message, 'is not valid');\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('Refresh')\n    .description('Verify MobileTableService.refresh')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?$filter=id eq 2');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\", \"price\": 200}' });\n        });\n\n        var table = client.getTable('books');\n        var originalModelObject = { id: 2, price: 100 };\n\n        return table.refresh(originalModelObject).then(function (results) {\n            var isWinJs = typeof Windows === \"object\";\n            if (isWinJs) {\n                // For backward compatibility, the WinJS client mutates the original model\n                // object by adding/overwriting properties from the server response\n                $assert.isTrue(results === originalModelObject);\n                $assert.areEqual(results.id, 2);         // We have the original properties\n                $assert.areEqual(results.price, 200);    // updated with the return from the server\n                $assert.areEqual(results.title, 'test');\n            } else {\n                // The web client simply returns the server response without mutating your\n                // original model, which is a lot more useful if the server response might\n                // not be the same kind of object\n                $assert.isFalse(results === originalModelObject);\n                $assert.areEqual(results.title, 'test');     // We have the server response properties\n                $assert.areEqual(results.id, undefined);     // but no original properties carried over\n                $assert.areEqual(results.price, 200);\n                $assert.areEqual(originalModelObject.id, 2); // And the original is unchanged\n                $assert.areEqual(originalModelObject.price, 100);\n                $assert.areEqual(originalModelObject.title, undefined);\n            }\n        });\n    }),\n    \n    $test('Refresh with params')\n    .description('Verify MobileTableService.refresh')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?$filter=id eq 2&name=bob');\n            callback(null, { status: 200, responseText: '{\"title\":\"test\", \"price\": 200}' });\n        });\n\n        var table = client.getTable('books');\n        var originalModelObject = { id: 2, price: 100 };\n\n        return table.refresh(originalModelObject, {\"name\":\"bob\"}).then(function (results) {\n            var isWinJs = typeof Windows === \"object\";\n            if (isWinJs) {\n                // For backward compatibility, the WinJS client mutates the original model\n                // object by adding/overwriting properties from the server response\n                $assert.isTrue(results === originalModelObject);\n                $assert.areEqual(results.id, 2);         // We have the original properties\n                $assert.areEqual(results.price, 200);    // updated with the return from the server\n                $assert.areEqual(results.title, 'test');\n            } else {\n                // The web client simply returns the server response without mutating your\n                // original model, which is a lot more useful if the server response might\n                // not be the same kind of object\n                $assert.isFalse(results === originalModelObject);\n                $assert.areEqual(results.title, 'test');     // We have the server response properties\n                $assert.areEqual(results.id, undefined);     // but no original properties carried over\n                $assert.areEqual(results.price, 200);\n                $assert.areEqual(originalModelObject.id, 2); // And the original is unchanged\n                $assert.areEqual(originalModelObject.price, 100);\n                $assert.areEqual(originalModelObject.title, undefined);\n            }\n        });\n    }),\n\n    $test('Refresh - multiple results')\n    .description('Verify MobileTableService.refresh')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?$filter=id eq 2');\n            callback(null, { status: 200, responseText: '[{\"title\":\"test\", \"price\": 200}, {\"title\":\"test2\", \"price\": 300}]' });\n        });\n\n        var table = client.getTable('books');\n        var originalModelObject = { id: 2, price: 100 };\n\n        return table.refresh(originalModelObject).then(function (results) {\n            var isWinJs = typeof Windows === \"object\";\n            if (isWinJs) {\n                // For backward compatibility, the WinJS client mutates the original model\n                // object by adding/overwriting properties from the server response\n                $assert.isTrue(results === originalModelObject);\n                $assert.areEqual(results.id, 2);         // We have the original properties\n                $assert.areEqual(results.price, 200);    // updated with the return from the server\n                $assert.areEqual(results.title, 'test');\n            } else {\n                // The web client simply returns the server response without mutating your\n                // original model, which is a lot more useful if the server response might\n                // not be the same kind of object\n                $assert.isFalse(results === originalModelObject);\n                $assert.areEqual(results.title, 'test');     // We have the server response properties\n                $assert.areEqual(results.id, undefined);     // but no original properties carried over\n                $assert.areEqual(results.price, 200);\n                $assert.areEqual(originalModelObject.id, 2); // And the original is unchanged\n                $assert.areEqual(originalModelObject.price, 100);\n                $assert.areEqual(originalModelObject.title, undefined);\n            }\n        });\n    }),\n\n    $test('Refresh - no results')\n    .description('Verify MobileTableService.refresh')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/tables/books?$filter=id eq 2');\n            callback(null, { status: 200, responseText: '[]' });\n        });\n\n        var table = client.getTable('books');\n        var originalModelObject = { id: 2, price: 100 };\n\n        return table.refresh(originalModelObject).then(function (results) {\n            $assert.fail(\"Should have failed\");\n        }, function(error) {\n            $assert.isNotNull(error.message);\n        });\n    }),\n\n    $test('Refresh - no id just returns object')\n    .description('Verify MobileTableService.refresh succeeds with no id')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.fail(\"Should have not made a server call\");\n        });\n\n        var table = client.getTable('books');\n        var originalModelObject = { price: 100 };\n\n        return table.refresh(originalModelObject).then(function (results) {\n            $assert.areEqual(results.price, 100);\n        }, function (error) {\n            $assert.fail(\"Should have succeeded\");\n        });\n    }),\n\n    $test('Refresh - id of 0 just returns object')\n    .description('Verify MobileTableService.refresh succeeds with id of 0')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.fail(\"Should have not made a server call\");\n        });\n\n        var table = client.getTable('books');\n        var originalModelObject = { id: 0.0, price: 100 };\n\n        return table.refresh(originalModelObject).then(function (results) {\n            $assert.areEqual(results.price, 100);\n        }, function (error) {\n            $assert.fail(\"Should have succeeded\");\n        });\n    }),\n\n    $test('Refresh - empty string id just returns object')\n    .description('Verify MobileTableService.refresh succeeds with id of 0')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.fail(\"Should have not made a server call\");\n        });\n\n        var table = client.getTable('books');\n        var originalModelObject = { id: '', price: 100 };\n\n        return table.refresh(originalModelObject).then(function (results) {\n            $assert.areEqual(results.price, 100);\n        }, function (error) {\n            $assert.fail(\"Should have succeeded\");\n        });\n    }),\n\n    $test('Features - non-query - no features header if no query parameters')\n    .description('Verify that for insert / update / delete / lookup calls no features header is present if no query string parameters are passed')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.isNull(req.headers[\"X-ZUMO-FEATURES\"]);\n            var response = { status: 200, getResponseHeader: function () { return 'application/json'; } };\n            response.responseText = JSON.stringify({ id: 'abc', title: 'test', price: 100 });\n            callback(null, response);\n        });\n\n        var table = client.getTable('books');\n\n        var testCases = [];\n        testCases.push(function () {\n            return table.insert({ title: 'test', price: 100 }).then(function () { }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n        testCases.push(function () {\n            return table.update({ id: 'abc', title: 'test', price: 100 }).then(function () { }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n        testCases.push(function () {\n            return table.del({ id: 'abc' }).then(function () { }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n        testCases.push(function () {\n            return table.lookup('abc').then(function () { }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('Features - non-query - QS features header query parameters are passed')\n    .description('Verify that for insert / update / delete / lookup calls with additional query parameters the features header is present')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers[\"X-ZUMO-FEATURES\"], \"QS\");\n            var response = { status: 200, getResponseHeader: function () { return 'application/json'; } };\n            response.responseText = JSON.stringify({ id: 'abc', title: 'test', price: 100 });\n            callback(null, response);\n        });\n\n        var table = client.getTable('books');\n\n        var testCases = [];\n        testCases.push(function () {\n            return table.insert({ title: 'test', price: 100 }, { a: 'b' }).then(function () { }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n        testCases.push(function () {\n            return table.update({ id: 'abc', title: 'test', price: 100 }, { a: 'b' }).then(function () { }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n        testCases.push(function () {\n            return table.del({ id: 'abc' }, { a: 'b' }).then(function () { }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n        testCases.push(function () {\n            return table.lookup('abc', { a: 'b' }).then(function () { }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('Features - refresh')\n    .description('Verify the features headers for MobileTableService.refresh calls')\n    .checkAsync(function () {\n        var lastFeaturesHeader = '';\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            var response = { status: 200, getResponseHeader: function () { return 'application/json'; } };\n            lastFeaturesHeader = req.headers[\"X-ZUMO-FEATURES\"];\n            response.responseText = JSON.stringify({ id: 'abc', features: lastFeaturesHeader });\n            callback(null, response);\n        });\n\n        var table = client.getTable('books');\n        var testCases = [];\n        testCases.push(function () {\n            var obj = { id: 'abc', features: '' };\n            return table.refresh(obj).then(function () {\n                $assert.areEqual(\"RF\", lastFeaturesHeader);\n            }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n        testCases.push(function () {\n            var obj = { id: 'abc', features: '' };\n            return table.refresh(obj, { a: 'b' }).then(function () {\n                $assert.areEqual(\"RF,QS\", lastFeaturesHeader);\n            }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('FeaturesRead')\n    .description('Verify the features headers for MobileTableService.read calls')\n    .checkAsync(function () {\n        var lastFeaturesHeader = '';\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            var response = { status: 200, getResponseHeader: function () { return 'application/json'; } };\n            lastFeaturesHeader = req.headers[\"X-ZUMO-FEATURES\"];\n            response.responseText = JSON.stringify([{ id: 'abc', features: lastFeaturesHeader }]);\n            callback(null, response);\n        });\n\n        var table = client.getTable('books');\n        var testCases = [];\n        testCases.push(function () {\n            return table.read(\"$filter=id%20eq%20'abc'\").then(function (results) {\n                $assert.areEqual(\"TR\", lastFeaturesHeader);\n            }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n        testCases.push(function () {\n            return table.where({ id: 'abc' }).read().then(function (results) {\n                $assert.areEqual(\"TQ\", lastFeaturesHeader);\n            }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n        testCases.push(function () {\n            return table.take(1).read().then(function (results) {\n                $assert.areEqual(\"TQ\", lastFeaturesHeader);\n            }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n        testCases.push(function () {\n            return table.select(\"id,features\").read({ a: 'b' }).then(function (results) {\n                $assert.areEqual(\"TQ,QS\", lastFeaturesHeader);\n            }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n        testCases.push(function () {\n            return table.read().then(function (results) {\n                $assert.isNull(lastFeaturesHeader);\n            }, function (err) {\n                $assert.fail(\"Should have succeeded\");\n            });\n        });\n\n        return $chain.apply(null, testCases);\n    }),\n\n    // Optimistic concurrency and system column tests\n\n    $test('testInsertStringIdPropertiesNotRemovedFromRequest')\n    .tag('SystemProperties')\n    .description('Verify properties not removed in string id tables when no system properties specified')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testProperties = testData.testNonSystemProperties.concat(testData.testValidSystemProperties),\n            testCases = [];\n\n        testProperties.forEach(function (testProperty) {\n            testCases.push(function () {\n                client = client.withFilter(function (req, next, callback) {\n                    // check serialization of object\n                    var serializedItem = '{\"id\":\"an id\",\"string\":\"What?\",\"' + testProperty + '\":\"a value\"}';\n                    callback(null, { status: 200, responseText: serializedItem });\n                });\n\n                var item = { id: 'an id', string: 'What?' };\n                item[testProperty] = 'a value';\n\n                return client.getTable('someTable').insert(item).then(function (result) {\n                    $assert.areEqual(result[testProperty], 'a value');\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('testInsertNullIdSystemPropertiesNotRemovedFromRequest')\n    .tag('SystemProperties')\n    .description('Verify system and non system properties not removed for null id')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testProperties = testData.testNonSystemProperties.concat(testData.testValidSystemProperties),\n            testCases = [];\n\n        testProperties.forEach(function (testProperty) {\n            testCases.push(function () {\n                client = client.withFilter(function (req, next, callback) {\n                    // check serialization of object\n                    var serializedItem = '{\"id\":null,\"string\":\"What?\",\"' + testProperty + '\":\"a value\"}';\n                    $assert.areEqual(req.data, serializedItem);\n                    callback(null, { status: 200, responseText: '{\"id\":\"an id\",\"string\":\"What?\",\"' + testProperty + '\":\"a value\"}' });\n                });\n\n                var item = { id: null, string: 'What?' };\n                item[testProperty] = 'a value';\n\n                return client.getTable('someTable').insert(item).then(function (result) {\n                    $assert.areEqual(result[testProperty], 'a value');\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('testUpdateAsyncStringIdSystemPropertiesRemovedFromRequest')\n    .tag('SystemProperties')\n    .description('Verify system  properties are removed for updates')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testProperties = testData.testValidSystemProperties,\n            testCases = [];\n\n        testProperties.forEach(function (testProperty) {\n            testCases.push(function () {\n                client = client.withFilter(function (req, next, callback) {\n                    // check serialization of object\n                    var serializedItem = '{\"id\":\"an id\",\"string\":\"What?\"}';\n                    $assert.areEqual(req.data, serializedItem);\n                    callback(null, { status: 200, responseText: serializedItem });\n                });\n\n                var item = { id: 'an id', string: 'What?' };\n                item[testProperty] = 'a value';\n\n                return client.getTable('someTable').update(item).then(function (result) {\n                    // do nothing\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('testUpdateStringIdNonSystemPropertiesNotRemovedFromRequest')\n    .tag('SystemProperties')\n    .description('Verify non system properties are not removed for updates')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testProperties = testData.testNonSystemProperties,\n            testCases = [];\n\n        testProperties.forEach(function (testProperty) {\n            testCases.push(function () {\n                client = client.withFilter(function (req, next, callback) {\n                    // check serialization of object\n                    var serializedItem = '{\"id\":\"an id\",\"string\":\"What?\",\"' + testProperty + '\":\"a value\"}';\n                    $assert.areEqual(req.data, serializedItem);\n                    callback(null, { status: 200, responseText: serializedItem });\n                });\n\n                var item = { id: 'an id', string: 'What?' };\n                item[testProperty] = 'a value';\n\n                return client.getTable('someTable').update(item).then(function (result) {\n                    // do nothing\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('testUpdateIntegerIdNoPropertiesRemovedFromRequest')\n    .tag('SystemProperties')\n    .description('Verify system properties are not removed for updates on integer ids')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testProperties = testData.testNonSystemProperties.concat(testData.testValidSystemProperties),\n            testCases = [];\n\n        testProperties.forEach(function (testProperty) {\n            testCases.push(function () {\n                client = client.withFilter(function (req, next, callback) {\n                    // check serialization of object\n                    var serializedItem = '{\"id\":5,\"string\":\"What?\",\"' + testProperty + '\":\"a value\"}';\n                    $assert.areEqual(req.data, serializedItem);\n                    callback(null, { status: 200, responseText: req.data });\n                });\n\n                var item = { id: 5, string: 'What?' };\n                item[testProperty] = 'a value';\n\n                return client.getTable('someTable').update(item).then(function (result) {\n                    $assert.areEqual(item[testProperty], result[testProperty]);\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n        });\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('testTableOperationSystemPropertiesQueryStringIsCorrect')\n    .tag('SystemProperties')\n    .description('Verify system properties are added to querystring')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testProperties = testData.testSystemProperties,\n            testCases = [];\n\n        testProperties.forEach(function (testSystemProperty) {\n            client = client.withFilter(function (req, next, callback) {\n                checkRequestURL(req.url, testSystemProperty);\n                callback(null, { status: 200, responseText: req.data });\n            });\n\n            var table = client.getTable('someTable');\n            table.systemProperties = testSystemProperty;\n\n            testCases.push(function () {\n                return table.insert({ id: 'an id', string: 'What?' }).then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.update({ id: 'an id', string: 'What?' }).then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.lookup('an id').then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.del({ id: 'an id', string: 'What?' }).then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            // With integer ids\n            testCases.push(function () {\n                return table.insert({ string: 'What?' }).then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.update({ id: 5, string: 'What?' }).then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.lookup(5).then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.del({ id: 5, string: 'What?' }).then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            // Query\n            testCases.push(function () {\n                return table.read('$filter=id eq 5').then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.read('select=id,String').then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.where(function() { return this.id == 5; }).read().then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n        });\n\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('testTableOperationUserParameterWithSystemPropertyQueryStringIsCorrect')\n    .tag('SystemProperties')\n    .description('Verify system properties are not added to querystring if present')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testProperties = testData.testSystemProperties,\n            testCases = [],\n            deleteClient;\n\n        client = client.withFilter(function (req, next, callback) {\n            var value = req.url.substring(req.url.toLowerCase().indexOf('__systemproperties=') + '__systemproperties='.length);\n            callback(null, { status: 200, responseText: '{\"value\":\"' + value + '\"}' });\n        });\n\n        deleteClient = client.withFilter(function (req, next, callback) {\n            var value = req.url.substring(req.url.indexOf('__systemProperties=') + '__systemproperties='.length);\n            $assert.areEqual(value, 'unknown');\n            callback(null, { status: 200 });\n        });\n\n        testProperties.forEach(function (testSystemProperty) {\n            var table = client.getTable('someTable'),\n                deleteTable = deleteClient.getTable('someTable');\n\n            table.systemProperties = testSystemProperty;\n            deleteTable.systemProperties = testSystemProperty;\n\n            testCases.push(function () {\n                return table.insert({ id: 'an id', string: 'What?' }, { __systemProperties: '__createdAt' }).then(function (result) {\n                    $assert.areEqual(result.value, '__createdAt');\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.update({ id: 'an id', string: 'What?' }, { __systemProperties: 'createdAt' }).then(function (result) {\n                    $assert.areEqual(result.value, 'createdAt');\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.lookup('an id', { __systemProperties: 'CreatedAt' }).then(function (result) {\n                    $assert.areEqual(result.value, 'CreatedAt');\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return deleteTable.del({ id: 'an id', string: 'What?' }, { __systemProperties: 'unknown' }).then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            // Integer ids\n\n            testCases.push(function () {\n                return table.insert({ string: 'What?' }, { __systemProperties: '__createdAt' }).then(function (result) {\n                    $assert.areEqual(result.value, '__createdAt');\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.update({ id: 5, string: 'What?' }, { __systemProperties: 'createdAt' }).then(function (result) {\n                    $assert.areEqual(result.value, 'createdAt');\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.lookup(5, { __systemProperties: 'CreatedAt' }).then(function (result) {\n                    $assert.areEqual(result.value, 'CreatedAt');\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return deleteTable.del({ id: 'an id', string: 'What?' }, { __systemProperties: 'unknown' }).then(function (result) {\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            // Query\n            testCases.push(function () {\n                return table.read('$filter=id%20eq%205&__systemproperties=__createdAt').then(function (result) {\n                    $assert.areEqual(result.value, '__createdAt');\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.read('\"$select=id,String&__systemProperties=__CreatedAt').then(function (result) {\n                    $assert.areEqual(result.value, '__CreatedAt');\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n\n            testCases.push(function () {\n                return table.where(function () { return this.id == 20; }).read({ __systemProperties: 'Version' }).then(function (result) {\n                    $assert.areEqual(result.value, 'Version');\n                }, function (error) {\n                    $assert.fail('should not have failed');\n                });\n            });\n        });\n\n        return $chain.apply(null, testCases);\n    }),\n\n    $test('testETagUpdateEncoding')\n    .tag('SystemProperties')\n    .description('Verify eTag is encoded/decoded and overrides passed down __version')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testProperties = testData.testSystemProperties;\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers['If-Match'], '\"test\\\\\"qu\\\\\"oteAnd\\\\\\\\\"\"');\n            callback(null, { status: 200, getResponseHeader: function () { return '\"nowrapping\\\\\\\"OrEscaped\"Quotes\"'; }, responseText: '{\"id\":null, \"title\":\"test\", \"__version\":\"apple\"}' });\n        });\n\n        var table = client.getTable('books');\n        table.systemProperties = WindowsAzure.MobileServiceTable.SystemProperties.Version;\n\n        return table.update({ id: 'my id', value: 'A', __version: 'test\"qu\"oteAnd\\\\\"' }).then(function (result) {\n            $assert.areEqual(result.__version, 'nowrapping\"OrEscaped\"Quotes');\n        });\n    })\n);\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/unit/mobileServicesClient._request.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\Zumo.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n// Declare JSHint globals\n/*global MobileServiceClient:false, Platform:false */\n\n$testGroup('MobileServiceClient._request',\n\n    $test('get')\n    .description('Verify get uses the right method.')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            callback(null, { status: 200, responseText: null });\n        });\n\n        return Platform.async(client._request).call(client, 'GET', 'foo', null);\n    }),\n\n    $test('post')\n    .description('Verify post uses the right method.')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            callback(null, { status: 200, responseText: null });\n        });\n\n        return Platform.async(client._request).call(client, 'POST', 'foo', null);\n    }),\n\n    $test('patch')\n    .description('Verify patch uses the right method.')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'PATCH');\n            callback(null, { status: 200, responseText: null });\n        });\n\n        return Platform.async(client._request).call(client, 'PATCH', 'foo', null);\n    }),\n\n    $test('Delete')\n    .description('Verify WebRequest.Delete uses the right method.')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'DELETE');\n            callback(null, { status: 200, responseText: null });\n        });\n\n        return Platform.async(client._request).call(client, 'DELETE', 'foo', null);\n    }),\n\n    $test('no content')\n    .description('Verify _request sets no Content-Type header for no content')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers['Content-Type'], undefined);\n            $assert.areEqual(req.data, undefined);\n            callback(null, { status: 200, responseText: null });\n        });\n\n        return Platform.async(client._request).call(client, 'POST', 'foo', null);\n    }),\n\n    $test('content')\n    .description('Verify WebRequest.requestAsync sets a Content-Type header')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers['Content-Type'], 'application/json');\n            $assert.areEqual(req.data, '{\"a\":1}');\n            callback(null, { status: 200, responseText: null });\n        });\n\n        return Platform.async(client._request).call(client, 'POST', 'foo', { a: 1 });\n    }),\n\n    $test('url')\n    .description('Verify WebRequest.requestAsync creates an absolute url')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.windowsazure.com/foo');\n            callback(null, { status: 200, responseText: null });\n        });\n\n        return Platform.async(client._request).call(client, 'POST', 'foo', null);\n    }),\n\n    $test('application header')\n    .description('Verify WebRequest.requestAsync provides an application header')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers['X-ZUMO-APPLICATION'], '123456abcdefg');\n            callback(null, { status: 200, responseText: null });\n        });\n\n        return Platform.async(client._request).call(client, 'POST', 'foo', null);\n    }),\n\n    $test('installation id header')\n    .description('Verify WebRequest.requestAsync provides an installation ID header')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers['X-ZUMO-INSTALLATION-ID'], WindowsAzure.MobileServiceClient._applicationInstallationId);\n            callback(null, { status: 200, responseText: null });\n        });\n\n        return Platform.async(client._request).call(client, 'POST', 'foo', null);\n    }),\n\n    $test('VersionHeader')\n    .description('Verify WebRequest.requestAsync provides an X-ZUMO-VERSION header')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            var isWinJs = typeof Windows === \"object\",\n                isCordova = window && window.cordova && window.cordova.version;\n\n            if (isWinJs) {\n                $assert.areEqual(0, req.headers['X-ZUMO-VERSION'].indexOf(\"ZUMO/1.2 (lang=WinJS; os=Windows 8; os_version=--; arch=Neutral; version=\"));\n            } else if (isCordova) {\n                $assert.areEqual(0, req.headers['X-ZUMO-VERSION'].indexOf(\"ZUMO/1.2 (lang=Cordova; os=--; os_version=--; arch=--; version=\"));\n            } else {\n                $assert.areEqual(0, req.headers['X-ZUMO-VERSION'].indexOf(\"ZUMO/1.2 (lang=Web; os=--; os_version=--; arch=--; version=\"));\n            }\n            callback(null, { status: 200, responseText: null });\n        });\n\n        return Platform.async(client._request).call(client, 'POST', 'foo', null);\n    }),\n\n    $test('auth header')\n    .description('Verify WebRequest.requestAsync provides an auth header when logged in')\n    .checkAsync(function () {\n        var auth = '123';\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client.currentUser = { mobileServiceAuthenticationToken: auth };\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers['X-ZUMO-AUTH'], auth);\n            callback(null, { status: 200, responseText: null });\n        });\n\n        return Platform.async(client._request).call(client, 'POST', 'foo', null);\n    }),\n\n    $test('no auth header')\n    .description('Verify WebRequest.requestAsync provides no auth header when not logged in')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers['X-ZUMO-AUTH'], undefined);\n            callback(null, { status: 200, responseText: null });\n        });\n\n        return Platform.async(client._request).call(client, 'POST', 'foo', null);\n    }),\n\n    $test('Passes back response')\n    .description('Verify WebRequest.requestAsync passes back the response.')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 200, responseText: '{\"message\":\"test\"}' });\n        });\n\n        return Platform.async(client._request).call(client, 'POST', 'foo', null).then(\n            function (response, complete, error) {\n                $assert.areEqual(response.responseText, '{\"message\":\"test\"}');\n            });\n    }),\n\n    $test('400 throws')\n    .description('Verify WebRequest.requestAsync throws on a 400 response.')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.windowsazure.com/\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            callback(null, { status: 400, responseText: '{\"error\":\"test\"}' });\n        });\n\n        return Platform.async(client._request).call(client, 'POST', 'foo', null).then(\n            function (response) { $assert.fail('Should have called success continuation!'); },\n            function (err) { $assert.areEqual(err.message, 'test'); });\n    })\n);\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/unit/mobileServicesClient.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\MobileServices.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n// Declare JSHint globals\n/*global MobileServiceClient:false, Platform:false, Windows:false, Resources:false */\n\n$testGroup('MobileServiceClient.js',\n\n    $test('constructor')\n    .description('Verify the constructor correctly initializes the client.')\n    .check(function () {\n        $assertThrows(function () { new WindowsAzure.MobileServiceClient(); });\n        $assertThrows(function () { new WindowsAzure.MobileServiceClient(null); });\n        $assertThrows(function () { new WindowsAzure.MobileServiceClient(''); });\n        $assertThrows(function () { new WindowsAzure.MobileServiceClient(2); });\n        $assertThrows(function () { new WindowsAzure.MobileServiceClient('uri', 2); });\n\n        var uri = \"http://www.test.com\";\n        var key = \"123456abcdefg\";\n        var client = new WindowsAzure.MobileServiceClient(uri, key);\n        $assert.areEqual(uri, client.applicationUrl);\n        $assert.areEqual(key, client.applicationKey);\n        $assert.isTrue(client.getTable);\n    }),\n\n    $test('withFilter chaining')\n    .description('Verify withFilter correctly chains filters')\n    .checkAsync(function () {\n        var descend = '';\n        var rise = '';\n        var createFilter = function(letter) { \n            return function(req, next, callback) {\n                descend += letter;\n                next(req, function (err, resp) {\n                    rise += letter;\n                    callback(err, resp);                 \n                });\n            };\n        };\n\n        var reachableHost = typeof Windows === \"object\" ? \"http://www.windowsazure.com/\" : $getClient().applicationUrl,\n            reachablePath = typeof Windows === \"object\" ? \"en-us/develop/overview/\" : \"crossdomain/bridge?origin=http://localhost\";\n        var client = new WindowsAzure.MobileServiceClient(reachableHost, \"123456abcdefg\");\n        client = client.withFilter(createFilter('A')).withFilter(createFilter('B')).withFilter(createFilter('C'));\n        \n        return Platform.async(client._request).call(client, 'GET', reachablePath, null).then(function (rsp) {\n            $assert.areEqual(descend, 'CBA');\n            $assert.areEqual(rise, 'ABC');\n        });\n    }),\n\n    $test('withFilter')\n    .description('Verify withFilter intercepts calls')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            callback(null, { status: 200, responseText: '{\"authenticationToken\":\"zumo\",\"user\":{\"userId\":\"bob\"}}' });\n        });\n\n        client._login.ignoreFilters = false;\n\n        return client.login('token.a.b').then(function (result) {\n            $assert.areEqual(result.userId, 'bob');\n        });\n    }),\n    \n    $test('login - Verify login mechanics')\n    .tag('login')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.contains(req.url, \"login\");\n            $assert.areEqual(req.data, '{\"authenticationToken\":\"token.a.b\"}');\n            callback(null, { status: 200, responseText: '{\"authenticationToken\":\"zumo\",\"user\":{\"userId\":\"bob\"}}' });\n        });\n\n        client._login.ignoreFilters = false;\n\n        return client.login('token.a.b').then(function (currentUser) {\n            $assert.areEqual(client.currentUser.userId, 'bob');\n            $assert.areEqual(client.currentUser.mobileServiceAuthenticationToken, 'zumo');            \n        });\n    }),\n\n    $test('loginWithOptions_token')\n    .tag('login')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.contains(req.url, \"login\");\n            $assert.areEqual(req.data, '{\"authenticationToken\":\"token.a.b\"}');\n            callback(null, { status: 200, responseText: '{\"authenticationToken\":\"zumo\",\"user\":{\"userId\":\"bob\"}}' });\n        });\n\n        client._login.ignoreFilters = false;\n\n        return client.loginWithOptions('token.a.b').then(function (currentUser) {\n            $assert.areEqual(client.currentUser.userId, 'bob');\n            $assert.areEqual(client.currentUser.mobileServiceAuthenticationToken, 'zumo');\n        });\n    }),\n\n    $test('loginWithOptions_provider_parameters')\n    .tag('login')\n    .checkAsync(function () {\n        return testLoginParameters(['facebook', { parameters: {display: 'popup' }}],\n                                  \"http://www.test.com/login/facebook?display=popup\",\n                                  \"http://www.test.com/login/done\");\n    }),\n\n    $test('loginWithOptions_provider_singlesignon_parameters')\n    .tag('login')\n    .checkAsync(function () {\n        return testLoginParameters(['facebook', { useSingleSignOn: true, parameters: { display: 'popup' } }],\n                                  \"http://www.test.com/login/facebook?display=popup\",\n                                  null);\n    }),\n\n    $test('loginWithOptions_provider_singlesignon')\n    .tag('login')\n    .checkAsync(function () {\n        return testLoginParameters(['facebook', { useSingleSignOn: true }],\n                                  \"http://www.test.com/login/facebook\",\n                                  null);\n    }),\n\n    $test('loginWithOptions_provider')\n    .tag('login')\n    .checkAsync(function () {\n        return testLoginParameters(['facebook'],\n                                  \"http://www.test.com/login/facebook\",\n                                  \"http://www.test.com/login/done\");\n    }),\n\n    $test('logout')\n    .description('Verify Authentication.logout undoes the effects of logging in')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client.currentUser = { userId: 'bob', mobileServiceAuthenticationToken: 'abcd' };\n\n        client.logout();\n        $assert.areEqual(client.currentUser, null);\n    }),\n\n    $test('static initialization of appInstallId')\n    .description('Verify the app installation id is created statically.')\n    .check(function() {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            settingsKey = \"MobileServices.Installation.config\",\n            settings = typeof Windows === \"object\" ? Windows.Storage.ApplicationData.current.localSettings.values[settingsKey]\n                                                   : Platform.readSetting(settingsKey);\n        $assert.isTrue(settings);\n    }),\n\n    $test('CustomAPI - error response as json object')\n    .description('Verify the custom API error messages')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.areEqual(req.url, 'http://www.test.com/api/checkins/post');\n            callback(null, { status: 400, responseText: '{\"error\":\"bad robot\"}', getResponseHeader: function () { return 'application/json'; } });\n        });\n        client.invokeApi(\"checkins/post\").done(function (response) {\n            $assert.fail(\"api call failed\");\n        },\n        function (error) {\n            $assert.areEqual(error.message, \"bad robot\");\n        });\n    }),\n\n    $test('CustomAPI - error response as json object without content-type')\n    .description('Verify the custom API error messages')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.areEqual(req.url, 'http://www.test.com/api/checkins/post');\n            callback(null, { status: 400, responseText: '{\"error\":\"bad robot\"}', getResponseHeader: function () { return null; } });\n        });\n        client.invokeApi(\"checkins/post\").done(function (response) {\n            $assert.fail(\"api call failed\");            \n        },\n        function (error) {\n            $assert.areEqual(error.message, \"bad robot\");\n        });\n    }),\n\n    $test('CustomAPI - error response as json string')\n    .description('Verify the custom API error messages')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.areEqual(req.url, 'http://www.test.com/api/checkins/post');\n            callback(null, { status: 400, responseText: '\"bad robot\"', getResponseHeader: function () { return 'application/json'; } });\n        });\n        client.invokeApi(\"checkins/post\").done(function (response) {\n            $assert.fail(\"api call failed\");\n        },\n        function (error) {\n            $assert.areEqual(error.message, \"bad robot\");\n        });\n    }),\n\n    $test('CustomAPI - error as text')\n    .description('Verify the custom API error messages')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.areEqual(req.url, 'http://www.test.com/api/checkins/post');\n            callback(null, { status: 400, responseText: 'bad robot', getResponseHeader: function () { return 'text/html'; } });\n        });\n        client.invokeApi(\"checkins/post\").done(function (response) {\n            $assert.fail(\"api call failed\");\n        },\n        function (error) {\n            $assert.areEqual(error.message, \"bad robot\");\n        });\n    }),\n\n    $test('CustomAPI - error as text without content type')\n    .description('Verify the custom API error messages')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.areEqual(req.url, 'http://www.test.com/api/checkins/post');\n            callback(null, { status: 400, responseText: 'bad robot' });\n        });\n        client.invokeApi(\"checkins/post\").done(function (response) {\n            $assert.fail(\"api call failed\");\n        },\n        function (error) {\n            $assert.areEqual(error.message, \"Unexpected failure.\");\n        });\n    }),\n\n    $test('CustomAPI - just api name')\n    .description('Verify the custom API url formatting')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.areEqual(req.url, 'http://www.test.com/api/checkins/post');\n            callback(null, { status: 200, responseText: '{\"result\":3 }', getResponseHeader: function () { return 'application/json'; } });\n        });\n        client.invokeApi(\"checkins/post\").done(function (response) {\n            $assert.areEqual(response.result.result, 3);\n        },\n        function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - name and content')\n    .description('Verify the custom API url formatting')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.areEqual(req.url, 'http://www.test.com/api/scenarios/verifyRequestAccess');\n            $assert.areEqual(req.data, '{\\\"data\\\":\\\"one\\\"}');\n            callback(null, { status: 200, getResponseHeader: function () { return 'application/xml'; }, responseText: '' });\n        });\n\n        client.invokeApi(\"scenarios/verifyRequestAccess\", { body: { 'data': 'one' } }).done(function (response) {\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - string content')\n    .description('Verify sending string content')\n    .check(function () {\n        var client = new MobileServiceClient.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.data, 'apples');\n            callback(null, { status: 200, responseText: '{\"result\":3}', getResponseHeader: function () { return 'application/json'; } });\n        });\n\n        client.invokeApi(\"scenarios/verifyRequestAccess\", { body: \"apples\" }).done(function (response) {\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - boolean content')\n    .description('Verify sending boolean content')\n    .check(function () {\n        var client = new MobileServiceClient.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.data, \"true\");\n            callback(null, { status: 200, responseText: '{\"result\":3}', getResponseHeader: function () { return 'application/json'; } });\n        });\n\n        client.invokeApi(\"scenarios/verifyRequestAccess\", { body: true }).done(function (response) {\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n    \n    $test('CustomAPI - date object')\n    .description('Verify sending date object')\n    .check(function () {\n        var client = new MobileServiceClient.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.data, \"\\\"2013-04-14T06:01:59.000Z\\\"\");\n            callback(null, { status: 200, responseText: '{\"result\":3}', getResponseHeader: function () { return 'application/json'; } });\n        });\n\n        var date = new Date(Date.UTC(2013, 3, 14, 6, 1, 59));\n        client.invokeApi(\"scenarios/verifyRequestAccess\", { body: date }).done(function (response) {\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - array content')\n    .description('Verify sending array content')\n    .check(function () {\n        var client = new MobileServiceClient.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.data, '[\\\"a\\\",\\\"b\\\",\\\"c\\\"]');\n            callback(null, { status: 200, responseText: '{\"result\":3 }', getResponseHeader: function () { return 'application/json'; } });\n        });\n\n        client.invokeApi(\"scenarios/verifyRequestAccess\", { body: ['a','b','c'] }).done(function (response) {\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - name with querystring and method')\n    .description('Verify the custom API url formatting')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/api/calculator/add?a=1&b=2');\n            callback(null, { status: 200, responseText: '{\"result\":3 }', getResponseHeader: function () { return 'application/json'; } });\n        });\n        client.invokeApi(\"calculator/add?a=1&b=2\", { method: \"GET\" }).done(function (response) {\n            $assert.areEqual(response.result.result, 3);\n        },\n        function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - name and method with param')\n    .description('Verify the custom API url formatting')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/api/calculator/add?a=1&b=2');\n            callback(null, { status: 200, responseText: '{\"result\":3 }', getResponseHeader: function () { return 'application/json'; } });\n        });\n        client.invokeApi(\"calculator/add\", { method: \"GET\", parameters: { 'a': 1, 'b': 2 }}).done(function (response) {\n            $assert.areEqual(response.result.result, 3);\n        },\n        function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - Return XML')\n    .description('Verify the custom API url formatting')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/api/scenarios/getXmlResponse');\n            callback(null, { status: 200, responseText: '<foo>bar</foo>', getResponseHeader: function () { return 'application/xml'; } });\n        });\n        client.invokeApi(\"scenarios/getXmlResponse\", { method: \"GET\"}).done(function (response) {\n            $assert.areEqual(response.responseText, \"<foo>bar</foo>\");\n        },\n        function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - name, body, method, and headers')\n    .description('Verify the custom API url formatting')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.areEqual(req.url, 'http://www.test.com/api/scenarios/verifyRequestAccess');\n            $assert.areEqual(req.headers['x-zumo-testing'], 'test');\n            $assert.areEqual(req.data, '{\\\"data\\\":\\\"one\\\"}');\n            callback(null, { status: 200, getResponseHeader: function () { return 'application/xml'; }, responseText: '' });\n        });\n        var headers = { 'x-zumo-testing': 'test' };\n        client.invokeApi(\"scenarios/verifyRequestAccess\", { body: { 'data': 'one' }, method: \"POST\", headers: headers }).done(function (response) {\n            $assert.isNull(headers['X-ZUMO-VERSION']);\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - Custom headers and return XML not JSON')\n    .description('Verify the custom API url formatting')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.areEqual(req.url, 'http://www.test.com/api/scenarios/verifyRequestAccess');\n            $assert.areEqual(req.headers['Content-Type'], 'application/xml');\n            $assert.areEqual(req.data, '<foo>bar</foo>'); //no json encoded...\n            callback(null, { status: 200, getResponseHeader: function () { return 'application/xml'; } });\n        });\n        client.invokeApi(\"scenarios/verifyRequestAccess\", { body: '<foo>bar</foo>', method: \"POST\", headers: { 'Content-Type': 'application/xml' }}).done(function (response) {\n\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - Send content-type instead of Content-Type')\n    .description('Verify the custom API url formatting')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.areEqual(req.url, 'http://www.test.com/api/scenarios/verifyRequestAccess');\n            $assert.areEqual(req.headers['content-type'], 'application/xml');\n            $assert.areEqual(req.data, '<foo>bar</foo>'); //no json encoded...\n            callback(null, { status: 200, getResponseHeader: function () { return 'application/xml'; } });\n        });\n        client.invokeApi(\"scenarios/verifyRequestAccess\", { body: '<foo>bar</foo>', method: \"POST\", headers: { 'content-type': 'application/xml' } }).done(function (response) {\n\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - specifies accept: application/json header by default')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers.accept, 'application/json');\n            callback(null, { status: 200 });\n        });\n        client.invokeApi(\"someApi\").done(function (response) { }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - specifies accept: application/json header by default when options are passed')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers.accept, 'application/json');\n            callback(null, { status: 200 });\n        });\n        client.invokeApi(\"someApi\", {}).done(function (response) { }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - specifies accept: application/json header by default when headers are passed')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers.accept, 'application/json');\n            callback(null, { status: 200 });\n        });\n        client.invokeApi(\"someApi\", { headers: { someHeader: 'test' } }).done(function (response) { }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('CustomAPI - Does not override existing accept headers')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers.accept, 'application/xml');\n            callback(null, { status: 200 });\n        });\n        client.invokeApi(\"someApi\", { headers: { 'accept': 'application/xml' } }).done(function (response) { }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('Features - CustomAPI - Call with object (JSON-ified)')\n    .description('Verify the features headers for custom calls')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers[\"X-ZUMO-FEATURES\"], \"AJ\");\n            callback(null, { status: 200, getResponseHeader: function () { return 'application/json'; } });\n        });\n        client.invokeApi(\"scenarios/verifyRequestAccess\", {\n            body: { hello: \"world\" },\n            method: \"POST\"\n        }).done(function (response) {\n\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('Features - CustomAPI - Call with object (JSON-ified) and parameters')\n    .description('Verify the features headers for custom calls')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers[\"X-ZUMO-FEATURES\"], \"AJ,QS\");\n            callback(null, { status: 200, getResponseHeader: function () { return 'application/json'; } });\n        });\n        client.invokeApi(\"scenarios/verifyRequestAccess\", {\n            body: { hello: \"world\" },\n            method: \"POST\",\n            parameters: { 'a': 1, 'b': 2 }\n        }).done(function (response) {\n\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('Features - CustomAPI - Call with non-object (not JSON-ified)')\n    .description('Verify the features headers for custom calls')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers[\"X-ZUMO-FEATURES\"], \"AG\");\n            callback(null, { status: 200, getResponseHeader: function () { return 'application/json'; } });\n        });\n        client.invokeApi(\"scenarios/verifyRequestAccess\", {\n            body: \"<hello>world</hello>\",\n            method: \"POST\",\n            headers: { 'Content-Type': 'application/xml' }\n        }).done(function (response) {\n\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('Features - CustomAPI - Call with object (JSON-ified)')\n    .description('Verify the features headers for custom calls')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers[\"X-ZUMO-FEATURES\"], \"AG,QS\");\n            callback(null, { status: 200, getResponseHeader: function () { return 'application/json'; } });\n        });\n        client.invokeApi(\"scenarios/verifyRequestAccess\", {\n            body: \"<hello>world</hello>\",\n            method: \"POST\",\n            headers: { 'Content-Type': 'application/xml' },\n            parameters: { 'a': 1, 'b': 2 }\n        }).done(function (response) {\n\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('Features - CustomAPI - Call with no body')\n    .description('Verify the features headers for custom calls')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers[\"X-ZUMO-FEATURES\"], \"QS\");\n            callback(null, { status: 200, getResponseHeader: function () { return 'application/json'; } });\n        });\n        client.invokeApi(\"scenarios/verifyRequestAccess\", {\n            method: \"GET\",\n            parameters: { a: 1, b: 2 }\n        }).done(function (response) {\n\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    }),\n\n    $test('Features - CustomAPI - Headers parameters is not modified')\n    .description('Verify the features headers for custom calls')\n    .check(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        var reqHeaders = { 'Content-Type': 'application/xml' };\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.headers[\"X-ZUMO-FEATURES\"], \"AG\");\n            callback(null, { status: 200, getResponseHeader: function () { return 'application/json'; } });\n        });\n        client.invokeApi(\"scenarios/verifyRequestAccess\", {\n            method: \"POST\",\n            body: \"<hello>world</hello>\"\n        }).done(function (response) {\n            $assert.isNull(reqHeaders[\"X-ZUMO-FEATURES\"]);\n        }, function (error) {\n            $assert.fail(\"api call failed\");\n        });\n    })\n);\n\nfunction testLoginParameters(args, expectedStartUri, expectedEndUri) {\n    var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n\n    var _login = Platform.login;\n    Platform.login = function (startUri, endUri, callback) {\n        Platform.login = _login;\n\n        $assert.areEqual(startUri, expectedStartUri);\n        $assert.areEqual(endUri, expectedEndUri);\n        callback(null, {\n            authenticationToken: \"zumo\",\n            user: {\n                \"userId\": \"bob\"\n            }\n        });\n    };\n\n    return client.loginWithOptions.apply(client, args).then(function (currentUser) {\n        $assert.areEqual(client.currentUser.userId, 'bob');\n        $assert.areEqual(client.currentUser.mobileServiceAuthenticationToken, 'zumo');\n    });\n}\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/unit/pushHttpClient.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\MobileServices.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n// Declare JSHint globals\n/*global MobileServiceClient:false, PushHttpClient:false */\n\n$testGroup('PushHttpClient',\n    $test('ListRegistrationsWithResultsReturnsSuccess')\n    .description('Verify listRegistrations parses an array')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            pushHandle = 'ABC';\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/push/registrations?platform=fake&deviceId=' + pushHandle);\n            callback(null, { status: 200, responseText: '[{\"registrationName\":\"$Default\",\"registrationId\":\"123456\"}]' });\n        });\n\n        var pushHttp = new PushHttpClient.PushHttpClient(client);\n        return Platform.async(pushHttp.listRegistrations).call(pushHttp, pushHandle, 'fake').then(function (results) {\n            $assert.areEqual(results.length, 1);\n            $assert.areEqual(results[0].registrationId, '123456');\n            $assert.areEqual(results[0].registrationName, '$Default');\n        });\n    }),\n\n    $test('ListRegistrationsEmptyReturnsSuccess')\n    .description('Verify listRegistrations parses an empty array')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            pushHandle = 'ABC';\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/push/registrations?platform=fake&deviceId=' + pushHandle);\n            callback(null, { status: 200, responseText: '[]' });\n        });\n\n        var pushHttp = new PushHttpClient.PushHttpClient(client);\n        return Platform.async(pushHttp.listRegistrations).call(pushHttp, pushHandle, 'fake').then(function (results) {\n            $assert.areEqual(results.length, 0);\n        });\n    }),\n\n    $test('CreateRegistrationIdReturnsSuccess')\n    .description('Verify createRegistrationId succeeds')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            pushHandle = 'ABC';\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'POST');\n            $assert.areEqual(req.url, 'http://www.test.com/push/registrationIds');\n            callback(null, { \n                status: 200, \n                getResponseHeader: function (header) { \n                    return header == 'Location' ? \n                        'http://philtotesting.azure-mobile.net/push/registrations/6989338662585603267-4084702197021366041-7' : \n                        null; \n            }, responseText: '' });\n        });\n\n        var pushHttp = new PushHttpClient.PushHttpClient(client);\n        return Platform.async(pushHttp.createRegistrationId).call(pushHttp).then(function (registrationId) {\n            $assert.areEqual(registrationId, '6989338662585603267-4084702197021366041-7');\n        });\n    }),\n\n    $test('UpsertRegistrationReturnsSuccess')\n    .description('Verify upsertRegistration succeeds with test wns data')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            pushHandle = 'ABC',\n            registration = {\n                registrationId: '6989338662585603267-4084702197021366041-7',\n                platform: 'wns',\n                deviceId: 'https://bn2.notify.windows.com/?token=AgYAAADs42685sa5PFCEy82eYpuG8WCPB098AWHnwR8kNRQLwUwf%2f9p%2fy0r82m4hxrLSQ%2bfl5aNlSk99E4jrhEatfsWgyutFzqQxHcLk0Xun3mufO2G%2fb2b%2ftjQjCjVcBESjWvY%3d'\n            };\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'PUT');\n            $assert.areEqual(req.url, 'http://www.test.com/push/registrations/' + registration.registrationId);\n            $assert.areEqual(req.data, JSON.stringify(registration));\n            callback(null, { status: 204 });\n        });\n\n        var pushHttp = new PushHttpClient.PushHttpClient(client);\n        return Platform.async(pushHttp.upsertRegistration).call(pushHttp, registration);\n    }),\n\n    $test('UpsertRegistrationExpiredReturnsFailure')\n    .description('Verify server returning expired (410) is treated as a success')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            pushHandle = 'ABC',\n            registration = {\n                registrationId: '6989338662585603267-4084702197021366041-7',\n                platform: 'wns',\n                deviceId: 'https://bn2.notify.windows.com/?token=AgYAAADs42685sa5PFCEy82eYpuG8WCPB098AWHnwR8kNRQLwUwf%2f9p%2fy0r82m4hxrLSQ%2bfl5aNlSk99E4jrhEatfsWgyutFzqQxHcLk0Xun3mufO2G%2fb2b%2ftjQjCjVcBESjWvY%3d'\n            };\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'PUT');\n            $assert.areEqual(req.url, 'http://www.test.com/push/registrations/' + registration.registrationId);\n            $assert.areEqual(req.data, JSON.stringify(registration));\n            callback(null, { status: 410 });\n        });\n\n        var pushHttp = new PushHttpClient.PushHttpClient(client);\n        return Platform.async(pushHttp.upsertRegistration).call(pushHttp, registration).then(function () {\n            $assert.fail('Success should not have been called');\n        }, function (error) {\n            $assert.areEqual(error.request.status, 410);\n        });\n    }),\n\n    $test('UnregisterReturnsSuccess')\n    .description('Verify unregister success')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            registrationId = '6989338662585603267-4084702197021366041-7';\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'DELETE');\n            $assert.areEqual(req.url, 'http://www.test.com/push/registrations/' + registrationId);\n            callback(null, { status: 204 });\n        });\n\n        var pushHttp = new PushHttpClient.PushHttpClient(client);\n        return Platform.async(pushHttp.unregister).call(pushHttp, registrationId);\n    }),\n\n    $test('UnregisterNotFoundReturnsSuccess')\n    .description('Verify unregister success when not found')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            registrationId = '6989338662585603267-4084702197021366041-7';\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'DELETE');\n            $assert.areEqual(req.url, 'http://www.test.com/push/registrations/' + registrationId);\n            callback(null, { status: 404, responseText: '{\"error\":\"no registration found\"}' });\n        });\n\n        var pushHttp = new PushHttpClient.PushHttpClient(client);\n        return Platform.async(pushHttp.unregister).call(pushHttp, registrationId);\n    })\n);\n"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/unit/registrationManager.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\MobileServices.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n// Declare JSHint globals\n/*global Platform:false,RegistrationManager:false */\n\n$testGroup('RegistrationManager',\n\n    /* deleteRegistrationWithName */\n\n    $test('DeleteRegistrationWithNameNoCacheSuccess')\n    .description('Verify RegistrationManager delete does a noop when no cached registration')\n    .tag('deleteRegistrationWithName')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.fail('No http call should have been made');\n            callback(null, { status: 500, responseText: 'Bad Test!' });\n        });\n\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n\n        return registrationManager.deleteRegistrationWithName('M');\n    }),\n\n    $test('DeleteRegistrationWithNameCachedSuccess')\n    .description('Verify RegistrationManager deletes when a cached registration was found')\n    .tag('deleteRegistrationWithName')    \n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        CreateStorage();\n            \n        client = client.withFilter(function (req, next, callback) {\n            // We expect a delete for the cached registration (and no others)\n            $assert.areEqual(req.type, 'DELETE');\n            $assert.contains(req.url, 'http://www.test.com/push/registrations/123');\n            // push http tests cover that a 404 is the same as a 204 (aka a success, so we don't need an explicit test here)\n            callback(null, { status: 204, responseText: '' });\n        });\n\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n\n        return registrationManager.deleteRegistrationWithName('$Default').then(function () {\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n\n            $assert.areEqual(testStore.getRegistrationIdWithName('testtemplate'), '456');\n            $assert.isNull(testStore.getRegistrationIdWithName('$Default'));\n\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('DeleteRegistrationWithNameServerErrorFails')\n    .tag('deleteRegistrationWithName')    \n    .description('Verify RegistrationManager deletes when a cached registration was found but server returns an error')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n            localStore = CreateStorage();\n            \n        client = client.withFilter(function (req, next, callback) {\n            // We expect a delete for the cached registration (and no others)\n            $assert.areEqual(req.type, 'DELETE');\n            $assert.contains(req.url, 'http://www.test.com/push/registrations/123');\n            callback(null, { status: 500, responseText: 'oops we broke' });\n        });\n\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n\n        return registrationManager.deleteRegistrationWithName('$Default').then(function () {\n            $assert.fail('Error should have been returned to user');\n        }, function (error) {\n            $assert.isNotNull(error.message);\n            DeleteStorage(localStore);            \n        });\n    }),\n\n    /* deleteAllRegistrations */\n\n    $test('DeleteAllRegistrationsExistingHandleSuccess')\n    .description('Verify RegistrationManager deletes all from server when using a cached handle')\n    .tag('deleteAllRegistrations')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            deletedResources = {};\n\n        CreateStorage();\n        client = client.withFilter(function (req, next, callback) {\n            if (req.type === 'GET' && req.url === 'http://www.test.com/push/registrations?platform=platform&deviceId=testhandle') {\n                callback(null, { status: 200, responseText: '[{\"registrationId\":\"1\",\"templateName\":\"A\"},{\"registrationId\":\"2\",\"templateName\":\"B\"}]' });\n            } else if (req.type === 'DELETE' && \n                (req.url === 'http://www.test.com/push/registrations/1' ||\n                req.url === 'http://www.test.com/push/registrations/2')) {\n\n                // Ensure we only hit each URL once\n                if (deletedResources[req.url]) {\n                    callback(null, { status: 500, responseText: 'Oops, bad test case!' });\n                } else {\n                    deletedResources[req.url] = true;\n                    callback(null, { status: 204, responseText: '' });                    \n                }\n            } else {\n                callback(null, { status: 500, responseText: 'Oops, bad test case!' });                \n            }\n        });\n\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n\n        // Refresh (passed pushHandle == cached handle)\n        return registrationManager.deleteAllRegistrations('testhandle').then(function () {\n            // LocalStoreManager already tests cached !== returned results, so  no need to branch here\n            // Then it will delete the returned ones only\n            $assert.isTrue(deletedResources['http://www.test.com/push/registrations/1']);\n            $assert.isTrue(deletedResources['http://www.test.com/push/registrations/2']);\n\n            // Now check storage is empty\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(JSON.stringify(testStore.getRegistrationIds()), \"[]\");\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('DeleteAllRegistrationsErrorDuringDeleteFails')\n    .description('Verify RegistrationManager attempts to deletes all from server but one errors out fails')\n    .tag('deleteAllRegistrations')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            deletedResources = {},\n            isFirstCall = true;\n    \n        CreateStorage();\n        client = client.withFilter(function (req, next, callback) {\n            if (req.type === 'GET' && req.url === 'http://www.test.com/push/registrations?platform=platform&deviceId=testhandle') {\n                callback(null, { status: 200, responseText: '[{\"registrationId\":\"1\",\"templateName\":\"A\"},{\"registrationId\":\"2\",\"templateName\":\"B\"}]' });\n            } else if (req.type === 'DELETE' && \n                (req.url === 'http://www.test.com/push/registrations/1' ||\n                req.url === 'http://www.test.com/push/registrations/2')) {\n\n                // Ensure we only hit each URL once\n                if (deletedResources[req.url]) {\n                    callback(null, { status: 500, responseText: 'Oops, bad test case!' });\n                } else if (isFirstCall) {\n                    callback(null, { status: 500, responseText: 'Expected delete error for this test' });\n                    isFirstCall = false;\n                } else {\n                    callback(null, { status: 204, responseText: '' });\n                }                \n                deletedResources[req.url] = true;                \n            } else {\n                $assert.fail('Invalid url requested');\n                callback(null, { status: 500, responseText: 'Oops, bad test case!' });\n            }\n        });\n\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n\n        // Refresh (passed pushHandle == cached handle)\n        return registrationManager.deleteAllRegistrations('testhandle').then(function () {\n            $assert.fail('Should have failed');            \n        }, function (error) {\n            $assert.isNotNull(error.message);\n\n            // All registrations ids should have been issued deletes\n            $assert.isTrue(!!deletedResources['http://www.test.com/push/registrations/1']);\n            $assert.isTrue(!!deletedResources['http://www.test.com/push/registrations/2']);\n\n            // Now check storage is still populated with ids from server\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(JSON.stringify(testStore.getRegistrationIds()), '[\"1\",\"2\"]');\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('DeleteAllRegistrationsServerEmptySuccess')\n    .description('Verify RegistrationManager success when no ids')\n    .tag('deleteAllRegistrations')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        CreateStorage();\n\n        client = client.withFilter(function (req, next, callback) {\n            if (req.type === 'GET' && req.url === 'http://www.test.com/push/registrations?platform=platform&deviceId=testhandle') {\n                callback(null, { status: 200, responseText: '[]' });\n            } else {\n                callback(null, { status: 500, responseText: 'Oops, bad test case!' });                \n            }\n        });\n\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n\n        // Refresh (passed pushHandle == cached handle)\n        return registrationManager.deleteAllRegistrations('testhandle').then(function () {\n            // Now check storage is empty\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(JSON.stringify(testStore.getRegistrationIds()), '[]');\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('DeleteAllRegistrationsErrorGettingRegistrationFails')\n    .description('Verify RegistrationManager attempts to delete all from server but fails if an issue occurs getting the lists for a handle')\n    .tag('deleteAllRegistrations')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        CreateStorage();\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'GET');\n            $assert.areEqual(req.url, 'http://www.test.com/push/registrations?platform=platform&deviceId=testhandle');\n            callback(null, { status: 500, responseText: 'Oops error' });\n        });\n\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n\n        // Refresh (passed pushHandle == cached handle)\n        return registrationManager.deleteAllRegistrations('testhandle').then(function () {\n            $assert.fail('Should have failed');\n        }, function (error) {\n            $assert.isNotNull(error.message);\n\n            // Now check storage is still populated with ids it started with\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(JSON.stringify(testStore.getRegistrationIds()), '[\"123\",\"456\"]');\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('DeleteAllRegistrationsWithNewHandleSuccess')\n    .description('Verify RegistrationManager deletes all from server for both handles')\n    .tag('deleteAllRegistrations')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            deletedResources = {},\n            listCalls = 0;\n\n        CreateStorage();\n        client = client.withFilter(function (req, next, callback) {\n            if (req.type === 'GET' && req.url === 'http://www.test.com/push/registrations?platform=platform&deviceId=testhandle' && listCalls === 0) {\n                listCalls++;\n                callback(null, { status: 200, responseText: '[{\"registrationId\":\"1\",\"templateName\":\"A\"},{\"registrationId\":\"2\",\"templateName\":\"B\"}]' });\n            } else if (req.type === 'GET' && req.url === 'http://www.test.com/push/registrations?platform=platform&deviceId=testhandle2' && listCalls == 1) {\n                listCalls++;\n                callback(null, { status: 200, responseText: '[{\"registrationId\":\"3\",\"templateName\":\"A\"},{\"registrationId\":\"4\",\"templateName\":\"B\"}]' });\n            } else if (req.type === 'DELETE' && \n                (req.url === 'http://www.test.com/push/registrations/1' ||\n                req.url === 'http://www.test.com/push/registrations/2' || \n                req.url === 'http://www.test.com/push/registrations/3' ||\n                req.url === 'http://www.test.com/push/registrations/4')) {\n\n                // Ensure we only hit each URL once\n                if (deletedResources[req.url]) {\n                    callback(null, { status: 500, responseText: 'Oops, bad test case!' });\n                } else {\n                    deletedResources[req.url] = true;\n                    callback(null, { status: 204, responseText: '' });                    \n                }\n            } else {\n                callback(null, { status: 500, responseText: 'Oops, bad test case!' });                \n            }\n        });\n\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n\n        // Refresh (passed pushHandle == cached handle)\n        return registrationManager.deleteAllRegistrations('testhandle2').then(function () {\n            // LocalStoreManager already tests cached !== returned results, so  no need to branch here\n            // Then it will delete the returned ones only\n            $assert.areEqual(listCalls, 2);\n            $assert.isTrue(deletedResources['http://www.test.com/push/registrations/1']);\n            $assert.isTrue(deletedResources['http://www.test.com/push/registrations/2']);\n            $assert.isTrue(deletedResources['http://www.test.com/push/registrations/3']);\n            $assert.isTrue(deletedResources['http://www.test.com/push/registrations/4']);\n\n            // Now check storage is empty\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(JSON.stringify(testStore.getRegistrationIds()), '[]');\n            DeleteStorage(testStore);\n        });\n    }),\n\n    /* upsertRegistration */\n\n    $test('UpsertRegistrationWithRefreshInsertSuccess')\n    .description('Verify upsertRegistration updates new record when refresh is needed')\n    .tag('upsertRegistration')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testRegistration = {\n                deviceId: 'testhandle',\n                platform: 'platform',\n                registrationId: '6989338662585603267-4084702197021366041-7',\n            };\n\n        client = client.withFilter(function (req, next, callback) {\n            if (req.type === 'GET' && req.url === 'http://www.test.com/push/registrations?platform=platform&deviceId=testhandle') {\n                callback(null, { status: 200, responseText: '[]' });\n            } else if (req.type === 'POST' && req.url === 'http://www.test.com/push/registrationIds') {\n                callback(null, \n                    { \n                        status: 200, \n                        getResponseHeader: function (header) { \n                            return header == 'Location' ? \n                                'http://philtotesting.azure-mobile.net/push/registrations/6989338662585603267-4084702197021366041-7' : \n                                null; \n                    }, \n                    responseText: '' });\n            } else if (req.type === 'PUT' && req.url === 'http://www.test.com/push/registrations/6989338662585603267-4084702197021366041-7') {\n                // Check the body?\n                $assert.areEqual(req.data, JSON.stringify(testRegistration));\n                callback(null, { status: 200, responseText: '' });\n            } else {\n                callback(null, { status: 500, responseText: 'Oops, bad test case!' });                \n            }            \n        });\n\n        // We want to test no local storage in this case\n        // Refresh (id not present), Create (OK), Upsert (OK)\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n        return registrationManager.upsertRegistration({ deviceId: 'testhandle', platform: 'platform'}).then(function () {\n            // Now check storage is populated\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(testStore.pushHandle, 'testhandle');\n            $assert.areEqual(testStore.getRegistrationIdWithName('$Default'), '6989338662585603267-4084702197021366041-7');\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('UpsertRegistrationWithTemplateRefreshInsertSuccess')\n    .description('Verify upsertRegistration updates new record when refresh is needed')\n    .tag('upsertRegistration')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testRegistration = {\n                deviceId: 'testhandle',\n                templateName: 'Test',\n                templateBody: '{something:$(somethingelse)}',\n                platform: 'platform',\n                registrationId: '6989338662585603267-4084702197021366041-7',\n            };\n\n        client = client.withFilter(function (req, next, callback) {\n            if (req.type === 'GET' && req.url === 'http://www.test.com/push/registrations?platform=platform&deviceId=testhandle') {\n                callback(null, { status: 200, responseText: '[]' });\n            } else if (req.type === 'POST' && req.url === 'http://www.test.com/push/registrationIds') {\n                callback(null, \n                    { \n                        status: 200, \n                        getResponseHeader: function (header) { \n                            return header == 'Location' ? \n                                'http://philtotesting.azure-mobile.net/push/registrations/6989338662585603267-4084702197021366041-7' : \n                                null; \n                    }, \n                    responseText: '' });\n            } else if (req.type === 'PUT' && req.url === 'http://www.test.com/push/registrations/6989338662585603267-4084702197021366041-7') {\n                $assert.areEqual(req.data, JSON.stringify(testRegistration));\n                callback(null, { status: 200, responseText: '' });\n            } else {\n                callback(null, { status: 500, responseText: 'Oops, bad test case!' });                \n            }            \n        });\n\n        // We want to test no local storage in this case\n        // Refresh (id not present), Create (OK), Upsert (OK)\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n        return registrationManager.upsertRegistration({ deviceId: 'testhandle', templateName: 'Test', templateBody: '{something:$(somethingelse)}', platform: 'platform'}).then(function () {\n            // Now check storage is populated\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(testStore.pushHandle, 'testhandle');            \n            $assert.areEqual(testStore.getRegistrationIdWithName('Test'), '6989338662585603267-4084702197021366041-7');\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('UpsertRegistrationWithRefreshListErrorFails')\n    .description('Verify upsertRegistration fails when refresh goes bad')\n    .tag('upsertRegistration')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n\n        DeleteStorage();\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/push/registrations?platform=platform&deviceId=testhandle');\n            callback(null, { status: 401, responseText: 'Invalid application key or something' });\n        });\n\n        // We want to test no local storage in this case\n        // Refresh (id not present), Create (OK), Upsert (OK)\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n        return registrationManager.upsertRegistration({ deviceId: 'testhandle', templateName: 'Test', platform: 'platform'}).then(function () {\n            $assert.fail('Error should have happened');\n        }, function (error) {\n            $assert.isNotNull(error.message);\n\n            // Now check storage still requires a refresh\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(testStore.pushHandle, '');\n            $assert.areEqual(testStore.isRefreshNeeded, true);\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('UpsertRegistrationNoCacheInsertSuccess')\n    .description('Verify upsertRegistration adds new record, no refresh')\n    .tag('upsertRegistration')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testRegistration = {\n                deviceId: 'testhandle',\n                templateName: 'Test',\n                platform: 'platform',\n                registrationId: '6989338662585603267-4084702197021366041-7',\n            };\n        CreateStorage();\n\n        client = client.withFilter(function (req, next, callback) {\n            if (req.type === 'POST' && req.url === 'http://www.test.com/push/registrationIds') {\n                callback(null, \n                    { \n                        status: 200, \n                        getResponseHeader: function (header) { \n                            return header == 'Location' ? \n                                'http://philtotesting.azure-mobile.net/push/registrations/6989338662585603267-4084702197021366041-7' : \n                                null; \n                    }, \n                    responseText: '' });\n            } else if (req.type === 'PUT' && req.url === 'http://www.test.com/push/registrations/6989338662585603267-4084702197021366041-7') {\n                $assert.areEqual(req.data, JSON.stringify(testRegistration));\n                callback(null, { status: 200, responseText: '' });\n            } else {\n                callback(null, { status: 500, responseText: 'Oops, bad test case!' });                \n            }            \n        });\n\n        // We want to test no local storage in this case\n        // Refresh (id not present), Create (OK), Upsert (OK)\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n        return registrationManager.upsertRegistration({ deviceId: 'testhandle', templateName: 'Test', platform: 'platform'}).then(function () {\n            // Now check storage is populated\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(testStore.pushHandle, 'testhandle');\n            $assert.areEqual(testStore.getRegistrationIdWithName('Test'), '6989338662585603267-4084702197021366041-7');\n            $assert.areEqual(testStore.getRegistrationIdWithName('testtemplate'), '456');\n            $assert.areEqual(testStore.getRegistrationIdWithName('$Default'), '123');\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('UpsertRegistrationNoCacheInsertFails')\n    .description('Verify upsertRegistration attempts to add a new record, but fails on create server call')\n    .tag('upsertRegistration')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\");\n        CreateStorage();\n\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.url, 'http://www.test.com/push/registrationIds');\n            callback(null, { status: 401, responseText: 'Haha! No permission!' });\n        });\n\n        // We want to test no local storage in this case\n        // Refresh (id not present), Create (OK), Upsert (OK)\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n        return registrationManager.upsertRegistration({ deviceId: 'testhandle2', templateName: 'Test', platform: 'platform'}).then(null, function (error) {\n            $assert.isNotNull(error.message);\n\n            // Now check storage\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(testStore.pushHandle, 'testhandle');\n            $assert.isNull(testStore.getRegistrationIdWithName('Test'));\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('UpsertRegistrationWithCacheUpdateSuccess')\n    .description('Verify upsertRegistration updates existing record')\n    .tag('upsertRegistration')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testRegistration = {\n                deviceId: 'testhandle2',\n                templateName: 'testtemplate',\n                platform: 'platform',\n                registrationId: '456',\n            };\n        CreateStorage();\n\n        client = client.withFilter(function (req, next, callback) {\n            if (req.type === 'PUT' && req.url === 'http://www.test.com/push/registrations/456') {\n                // Check the body?\n                $assert.areEqual(req.data, JSON.stringify(testRegistration));\n                callback(null, { status: 200, responseText: '' });\n            } else {\n                callback(null, { status: 500, responseText: 'Oops, bad test case!' });                \n            }            \n        });\n\n        // We want to test no local storage in this case\n        // Refresh (id not present), Create (OK), Upsert (OK)\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n        return registrationManager.upsertRegistration({ deviceId: 'testhandle2', templateName: 'testtemplate', platform: 'platform'}).then(function () {\n            // Now check storage is populated\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(testStore.pushHandle, 'testhandle2');\n            $assert.areEqual(testStore.getRegistrationIdWithName('testtemplate'), '456');\n            $assert.areEqual(testStore.getRegistrationIdWithName('$Default'), '123');\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('UpsertRegistrationWithCacheUpdateFails')\n    .description('Verify upsertRegistration updates errors out on upsert fail (non 410)')\n    .tag('upsertRegistration')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testRegistration = {\n                deviceId: 'testhandle2',\n                templateName: 'testtemplate',\n                platform: 'platform',\n                registrationId: '456',\n            };\n\n        CreateStorage();\n        client = client.withFilter(function (req, next, callback) {\n            $assert.areEqual(req.type, 'PUT');\n            $assert.areEqual(req.url, 'http://www.test.com/push/registrations/456');\n            callback(null, { status: 401, responseText: 'You really need to sign in, this is getting old' });\n        });\n\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n        return registrationManager.upsertRegistration({ deviceId: 'testhandle2', templateName: 'testtemplate', platform: 'platform'}).then(null, function (error) {\n            $assert.isNotNull(error.message);\n\n            // Now check storage is still as it was\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(testStore.pushHandle, 'testhandle');\n            $assert.areEqual(testStore.getRegistrationIdWithName('testtemplate'), '456');\n            $assert.areEqual(testStore.getRegistrationIdWithName('$Default'), '123');\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('UpsertRegistrationExpiredSuccess')\n    .description('Verify upsertRegistration updates and recreates on expired')\n    .tag('upsertRegistration')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            testRegistration = {\n                deviceId: 'testhandle2',\n                templateName: 'testtemplate',\n                platform: 'platform',\n                registrationId: '456',\n            },\n            finalTestRegistration = {\n                deviceId: 'testhandle2',\n                templateName: 'testtemplate',\n                platform: 'platform',\n                registrationId: '789',\n            };\n\n        CreateStorage();\n        client = client.withFilter(function (req, next, callback) {\n            if (req.type === 'POST' && req.url === 'http://www.test.com/push/registrationIds') {\n                callback(null, \n                    { \n                        status: 200, \n                        getResponseHeader: function (header) { \n                            return header == 'Location' ? \n                                'http://philtotesting.azure-mobile.net/push/registrations/789' : \n                                null; \n                    }, \n                    responseText: '' });\n            } else if (req.type === 'PUT' && req.url === 'http://www.test.com/push/registrations/456') {\n                $assert.areEqual(req.data, JSON.stringify(testRegistration));\n                callback(null, { status: 410, responseText: 'Sorry this registration is expired' });\n            } else if (req.type === 'PUT' && req.url === 'http://www.test.com/push/registrations/789') {\n                $assert.areEqual(req.data, JSON.stringify(finalTestRegistration));\n                callback(null, { status: 200, responseText: '' });\n            } else {\n                callback(null, { status: 500, responseText: 'Oops, bad test case!' });                \n            }            \n        });\n\n        // We want to test no local storage in this case\n        // Refresh (id not present), Create (OK), Upsert (OK)\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n        return registrationManager.upsertRegistration({ deviceId: 'testhandle2', templateName: 'testtemplate', platform: 'platform'}).then(function () {\n            // Now check storage is populated and updated\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(testStore.pushHandle, 'testhandle2');\n            $assert.areEqual(testStore.getRegistrationIdWithName('testtemplate'), '789');\n            $assert.areEqual(testStore.getRegistrationIdWithName('$Default'), '123');\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('UupsertRegistrationExpiredCreateFails')\n    .description('Verify upsertRegistration updates and recreates on expired and handles error on create')\n    .tag('upsertRegistration')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            firstPost = true;\n\n        CreateStorage();\n        client = client.withFilter(function (req, next, callback) {\n            if (firstPost && req.type === 'POST' && req.url === 'http://www.test.com/push/registrationIds') {\n                firstPost = false;\n                callback(null, { status: 401, responseText: 'Still no auth' });\n            } else if (req.type === 'PUT' && req.url === 'http://www.test.com/push/registrations/456') {\n                callback(null, { status: 410, responseText: 'Sorry this registration is expired' });\n            } else {\n                $assert.fail('unexpected request');\n                callback(null, { status: 500, responseText: 'Oops, bad test case!' });                \n            }            \n        });\n\n        // We want to test no local storage in this case\n        // Refresh (id not present), Create (OK), Upsert (OK)\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n        return registrationManager.upsertRegistration({ deviceId: 'testhandle2', templateName: 'testtemplate', platform: 'platform'}).then(null, function (error) {\n            $assert.isNotNull(error.message);\n\n            // Now check storage is populated and updated\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(testStore.pushHandle, 'testhandle');\n            $assert.areEqual(testStore.getRegistrationIdWithName('testtemplate'), '456');\n            $assert.areEqual(testStore.getRegistrationIdWithName('$Default'), '123');\n            DeleteStorage(testStore);\n        });\n    }),\n\n    $test('UpsertRegistrationExpiredUpdateFails')\n    .description('Verify upsertRegistration updates and recreates on expired and handles error on update')\n    .tag('upsertRegistration')\n    .checkAsync(function () {\n        var client = new WindowsAzure.MobileServiceClient(\"http://www.test.com\", \"123456abcdefg\"),\n            finalTestRegistration = {\n                deviceId: 'testhandle2',\n                templateName: 'testtemplate',\n                platform: 'platform',\n                registrationId: '789',\n            },\n            firstPost = true;\n\n        CreateStorage();\n        client = client.withFilter(function (req, next, callback) {\n            if (firstPost && req.type === 'POST' && req.url === 'http://www.test.com/push/registrationIds') {\n                callback(null, \n                    { \n                        status: 200, \n                        getResponseHeader: function (header) { \n                            return header == 'Location' ? \n                                'http://philtotesting.azure-mobile.net/push/registrations/789' : \n                                null; \n                    }, \n                    responseText: '' });\n                firstPost = false;\n            } else if (req.type === 'PUT' && req.url === 'http://www.test.com/push/registrations/456') {\n                callback(null, { status: 410, responseText: 'Sorry this registration is expired' });\n            } else if (req.type === 'PUT' && req.url === 'http://www.test.com/push/registrations/789') {\n                $assert.areEqual(req.data, JSON.stringify(finalTestRegistration));\n                callback(null, { status: 401, responseText: 'Too slow, we expired your access' });\n            } else {\n                $assert.fail('unexpected request');\n                callback(null, { status: 500, responseText: 'Oops, bad test case!' });                \n            }            \n        });\n\n        // We want to test no local storage in this case\n        // Refresh (id not present), Create (OK), Upsert (OK)\n        var registrationManager = new RegistrationManager.RegistrationManager(client, 'platform', StorageKey);\n        return registrationManager.upsertRegistration({ deviceId: 'testhandle2', templateName: 'testtemplate', platform: 'platform'}).then(null, function (error) {\n            $assert.isNotNull(error.message);\n\n            // Now check storage is populated and updated\n            var testStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n            $assert.areEqual(testStore.pushHandle, 'testhandle2');\n            $assert.areEqual(testStore.getRegistrationIdWithName('testtemplate'), '789');\n            $assert.areEqual(testStore.getRegistrationIdWithName('$Default'), '123');\n            DeleteStorage(testStore);\n        });\n    })\n);\n\nvar StorageKey = 'storageKey';\n\nfunction CreateStorage() {\n    var localStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n    localStore.updateAllRegistrations([{ registrationId: '123' }, { templateName: 'testtemplate', registrationId: '456' }], 'testhandle');\n\n    return localStore;\n}\n\nfunction DeleteStorage(localStore) {\n    if (!localStore) {\n        localStore = new LocalStorageManager.LocalStorageManager(StorageKey);\n    }\n\n    localStore._pushHandle = null;\n    localStore.deleteAllRegistrations();\n}"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/unit/validate.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\Zumo.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n// Declare JSHint globals\n/*global Validate:false */\n\n$testGroup('Validate.js',\n\n    $test('notNull')\n    .description('Verify Validate.notNull works correctly across null/undefined/etc.')\n    .check(function () {\n        $assertThrows(function () { Validate.notNull(null); });\n        $assertThrows(function () { Validate.notNull(undefined); });\n        Validate.notNull('');\n        Validate.notNull(0);\n        Validate.notNull('foo');\n        Validate.notNull([]);\n        Validate.notNull({});\n        $assertThrows(\n            function () { Validate.notNull(null, 'foo'); },\n            function (ex) { $assert.contains(ex.toString(), 'foo'); });\n    }),\n\n    $test('notNullOrEmpty')\n    .description('Verify Validate.notNullOrEmpty works correctly across null/undefined/empty/etc.')\n    .check(function () {\n        $assertThrows(function () { Validate.notNullOrEmpty(null); });\n        $assertThrows(function () { Validate.notNullOrEmpty(undefined); });\n        $assertThrows(function () { Validate.notNullOrEmpty(''); });\n        $assertThrows(function () { Validate.notNullOrEmpty([]); });\n        Validate.notNullOrEmpty(0);\n        Validate.notNullOrEmpty('foo');\n        Validate.notNullOrEmpty({});\n        $assertThrows(\n            function () { Validate.notNullOrEmpty(null, 'foo'); },\n            function (ex) { $assert.contains(ex.toString(), 'foo'); });\n    }),\n\n    $test('isValidId')\n    .description('Verify Validate.isValidId works correctly across null/undefined/empty/etc.')\n    .check(function () {\n        $assertThrows(function () { Validate.isValidId(null); });\n        $assertThrows(function () { Validate.isValidId(undefined); });\n        $assertThrows(function () { Validate.isValidId(''); });\n        $assertThrows(function () { Validate.isValidId([]); });\n        $assertThrows(function () { Validate.isValidId(0); });\n        Validate.isValidId(1);\n        Validate.isValidId(654);\n        Validate.isValidId('foo');\n        $assertThrows(\n            function () { Validate.isValidId(null, 'foo'); },\n            function (ex) { $assert.contains(ex.toString(), 'foo'); });\n    }),\n\n    $test('isDate')\n    .description('Verify Validate.isDate correctly identifies Date instances.')\n    .check(function () {\n        Validate.isDate(new Date());\n        Validate.isDate(new Date('04/28/06'));\n        $assertThrows(function () { Validate.isDate(null); });\n        $assertThrows(function () { Validate.isDate(''); });\n        $assertThrows(function () { Validate.isDate('foo'); });\n        $assertThrows(function () { Validate.isDate(123123); });\n        $assertThrows(function () { Validate.isDate('1/1/12'); });\n        $assertThrows(\n            function () { Validate.isDate(null, 'foo'); },\n            function (ex) { $assert.contains(ex.toString(), 'foo'); });\n    }),\n\n    $test('isNumber')\n    .description('Verify Validate.isNumber correctly identifies numeric values.')\n    .check(function () {\n        Validate.isNumber(0);\n        Validate.isNumber(1);\n        Validate.isNumber(-1);\n        Validate.isNumber(1.5);\n        Validate.isNumber(10);\n        Validate.isNumber(0.001);\n        Validate.isNumber(NaN);\n        $assertThrows(function () { Validate.isNumber(null); });\n        $assertThrows(function () { Validate.isNumber(''); });\n        $assertThrows(function () { Validate.isNumber('foo'); });\n        $assertThrows(function () { Validate.isNumber('1'); });\n        $assertThrows(\n            function () { Validate.isNumber(null, 'foo'); },\n            function (ex) { $assert.contains(ex.toString(), 'foo'); });\n    }),\n\n    $test('isValidParametersObject')\n    .description('Verify Validate.isValidParametersObject correctly identifies valid parameter object instances.')\n    .check(function () {\n        Validate.isValidParametersObject({ state: 'WA' });\n        Validate.isValidParametersObject({ code: 5 });\n        Validate.isValidParametersObject({ x: { y: 3 } });\n        Validate.isValidParametersObject({ });\n\n        var obj = {};\n        obj.$x = 5;\n        $assertThrows(function () { Validate.isValidParametersObject(obj); });\n        $assertThrows(function () { Validate.isValidParametersObject(null); });\n        $assertThrows(function () { Validate.isValidParametersObject('foo'); });\n        $assertThrows(function () { Validate.isValidParametersObject(1); });\n\n        $assertThrows(\n            function () { Validate.isValidParametersObject(obj, 'foo'); },\n            function (ex) {\n                $assert.contains(ex.toString(), 'foo');\n                $assert.contains(ex.toString(), '$x');\n            });\n    }),\n\n    $test('isInteger')\n    .description('Verify Validate.isInteger correctly identifies integral values.')\n    .check(function () {\n        Validate.isInteger(0);\n        Validate.isInteger(1);\n        Validate.isInteger(-1);\n        Validate.isInteger(10);\n        $assertThrows(function () { Validate.isInteger(null); });\n        $assertThrows(function () { Validate.isInteger(''); });\n        $assertThrows(function () { Validate.isInteger('foo'); });\n        $assertThrows(function () { Validate.isInteger('1'); });\n        $assertThrows(function () { Validate.isInteger(1.5); });\n        $assertThrows(function () { Validate.isInteger(0.001); });\n        $assertThrows(function () { Validate.isInteger(NaN); });\n        $assertThrows(\n            function () { Validate.isInteger(null, 'foo'); },\n            function (ex) { $assert.contains(ex.toString(), 'foo'); });\n    }),\n\n    $test('isString')\n    .description('Verify Validate.isString correctly identifies string values.')\n    .check(function () {\n        Validate.isString(null);\n        Validate.isString('');\n        Validate.isString('foo');\n        $assertThrows(function () { Validate.isString(0); });\n        $assertThrows(function () { Validate.isString({}); });\n        $assertThrows(function () { Validate.isString([]); });\n        $assertThrows(\n            function () { Validate.isString(10, 'foo'); },\n            function (ex) { $assert.contains(ex.toString(), 'foo'); });\n    }),\n\n    $test('isObject')\n    .description('Verify Validate.isObject correctly identifies Object values.')\n    .check(function () {\n        Validate.isObject(null);\n        Validate.isObject({});\n        Validate.isObject({ id: 5 });\n        $assertThrows(function () { Validate.isObject(0); });\n        $assertThrows(function () { Validate.isObject('foo'); });\n        $assertThrows(function () { Validate.isObject(new Date()); });\n        $assertThrows(\n            function () { Validate.isObject(10, 'foo'); },\n            function (ex) { $assert.contains(ex.toString(), 'foo'); });\n    }),\n\n    $test('length')\n    .description('Verify Validate.length correctly identifies strings of a given length')\n    .check(function () {\n        Validate.length('', 0);\n        Validate.length('a', 1);\n        Validate.length('ab', 2);\n        $assertThrows(function () { Validate.length(null, 1); });\n        $assertThrows(function () { Validate.length(null, null); });\n        $assertThrows(function () { Validate.length('foo', 2); });\n        $assertThrows(\n            function () { Validate.length('test', 2, 'foo'); },\n            function (ex) { $assert.contains(ex.toString(), 'foo'); });\n    })\n);"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/utilities/TableHelper.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nexports.TableHelper = function TableHelper(isDotNet) {\n    this.isDotNet = isDotNet;\n    this.newItems = '';\n    this.getNewItems = function (id) {\n        if (this.isDotNet) {\n            this.newItems += (this.newItems) ? ' or Id eq \\'' + id + '\\'' : 'Id eq \\'' + id + '\\'';\n            return '(' + this.newItems + ')';\n        } else {\n            if (!this.newItems) {\n                this.newItems = 'id ge ' + id;\n            }\n            return this.newItems;\n        }\n    };\n};"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/utilities/constants.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nexports.validStringIds = [\n             \"id\",\n             \"true\",\n             \"false\",\n             \"00000000-0000-0000-0000-000000000000\",\n             \"aa4da0b5-308c-4877-a5d2-03f274632636\",\n             \"69C8BE62-A09F-4638-9A9C-6B448E9ED4E7\",\n             \"{EC26F57E-1E65-4A90-B949-0661159D0546}\",\n             \"87D5B05C93614F8EBFADF7BC10F7AE8C\",\n             \"someone@someplace.com\",\n             \"id with spaces\",\n             \"id.with.periods\",\n             \"'id' with single quotes\",\n             \"id with 128 characters \" + new Array(128 - 24).join('A'), \n             \"id with Japanese 私の車はどこですか？\",\n             \"id with Arabic أين هو سيارتي؟\",\n             \"id with Russian Где моя машина\",\n             \"id with some URL significant characters % # &\",\n             \"id with ascii characters  !#%&'()*,-.0123456789:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}\", // '$' .NET not supported\n             \"id with extended chars ascii ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ\"\n];\n\n\nexports.emptyStringIds = [\"\"];\nexports.invalidStringIds = [\n            \".\",\n            \"..\",\n            \"id with 256 characters \" + new Array(257 - 23).join('A'),\n            \"\\r\",\n            \"\\n\",\n            \"\\t\",\n            \"id\\twith\\ttabs\",\n            \"id\\rwith\\rreturns\",\n            \"id\\nwith\\n\\newline\",\n            \"id with backslash \\\\\",\n            \"id with forwardslash \\/\",\n            \"1/8/2010 8:00:00 AM\",\n            \"\\\"idWithQuotes\\\"\",\n            \"?\",\n            \"\\\\\",\n            \"\\/\",\n            \"`\",\n            \"+\",\n            \" \",\n            \"control character between 0 and 31 \" + String.fromCharCode(16),\n            \"control character between 127 and 159\" + String.fromCharCode(130)\n];\n\nexports.validIntIds = [1, 925000];\nexports.invalidIntIds = [-1];\nexports.nonStringNonIntValidJsonIds = [\n    true,\n    false,\n    1.0,\n    -1.0,\n    0.0,\n];\n\nexports.nonStringNonIntIds = [\n    new Date(2010, 1, 8),\n    {},\n    1.0,\n    \"aa4da0b5-308c-4877-a5d2-03f274632636\"\n];\n\nexports.testNonSystemProperties = [\"someProperty\", \"createdAt\", \"updatedAt\", \"version\", \"_createdAt\", \"_updatedAt\", \"_version\", \"X__createdAt\"];\nexports.testValidSystemProperties = [\"__createdAt\", \"__updatedAt\", \"__version\", \"__CreatedAt\", \"__futureSystemProperty\"];\nexports.testSystemProperties = [\n    WindowsAzure.MobileServiceTable.SystemProperties.None,\n    WindowsAzure.MobileServiceTable.SystemProperties.All,\n    WindowsAzure.MobileServiceTable.SystemProperties.CreatedAt | WindowsAzure.MobileServiceTable.SystemProperties.UpdatedAt | WindowsAzure.MobileServiceTable.SystemProperties.Version,\n    WindowsAzure.MobileServiceTable.SystemProperties.CreatedAt | WindowsAzure.MobileServiceTable.SystemProperties.UpdatedAt,\n    WindowsAzure.MobileServiceTable.SystemProperties.CreatedAt | WindowsAzure.MobileServiceTable.SystemProperties.Version,\n    WindowsAzure.MobileServiceTable.SystemProperties.CreatedAt,\n    WindowsAzure.MobileServiceTable.SystemProperties.UpdatedAt | WindowsAzure.MobileServiceTable.SystemProperties.Version,\n    WindowsAzure.MobileServiceTable.SystemProperties.UpdatedAt,\n    WindowsAzure.MobileServiceTable.SystemProperties.Version\n];\n\nexports.testValidSystemPropertyQueryStrings = [\n    \"__systemProperties=*\",\n    \"__systemProperties=__createdAt\",\n    \"__systemProperties=__createdAt,__updatedAt\",\n    \"__systemProperties=__createdAt,__version\",\n    \"__systemProperties=__createdAt,__updatedAt,__version\",\n    \"__systemProperties=__createdAt,__version,__updatedAt\",\n    \"__systemProperties=__updatedAt\",\n    \"__systemProperties=__updatedAt,__createdAt\",\n    \"__systemProperties=__updatedAt,__createdAt,__version\",\n    \"__systemProperties=__updatedAt,__version\",\n    \"__systemProperties=__updatedAt,__version, __createdAt\",\n    \"__systemProperties=__version\",\n    \"__systemProperties=__version,__createdAt\",\n    \"__systemProperties=__version,__createdAt,__updatedAt\",\n    \"__systemProperties=__version,__updatedAt\",\n    \"__systemProperties=__version,__updatedAt, __createdAt\",\n             \n    // Trailing commas, extra commas\n    \"__systemProperties=__createdAt,\",\n    \"__systemProperties=__createdAt,__updatedAt,\",\n    \"__systemProperties=__createdAt,__updatedAt,__version,\",\n    \"__systemProperties=,__createdAt\",\n    \"__systemProperties=__createdAt,,__updatedAt\",\n    \"__systemProperties=__createdAt, ,__updatedAt,__version\",\n    \"__systemProperties=__createdAt,,\",\n    \"__systemProperties=__createdAt, ,\",\n             \n    // Trailing, leading whitespace\n    \"__systemProperties= *\",\n    \"__systemProperties=\\t*\\t\",\n    \"__systemProperties= __createdAt \",\n    \"__systemProperties=\\t__createdAt,\\t__updatedAt\\t\",\n    \"__systemProperties=\\r__createdAt,\\r__updatedAt,\\t__version\\r\",\n    \"__systemProperties=\\n__createdAt\\n\",\n    \"__systemProperties=__createdAt,\\n__updatedAt\",\n    \"__systemProperties=__createdAt, __updatedAt, __version\",\n             \n    // Different casing\n    \"__SystemProperties=*\",\n    \"__SystemProperties=__createdAt\",\n    \"__SYSTEMPROPERTIES=__createdAt,__updatedAt\",\n    \"__systemproperties=__createdAt,__updatedAt,__version\",\n    \"__SystemProperties=__CreatedAt\",\n    \"__SYSTEMPROPERTIES=__createdAt,__UPDATEDAT\",\n    \"__systemproperties=__createdat,__UPDATEDAT,__veRsion\",\n             \n    // Sans __ prefix\n    \"__systemProperties=createdAt\",\n    \"__systemProperties=updatedAt,createdAt\",\n    \"__systemProperties=UPDATEDAT,createdat\",\n    \"__systemProperties=updatedAt,version,createdAt\",\n             \n    // Combinations of above\n    \"__SYSTEMPROPERTIES=__createdAt, updatedat\",\n    \"__systemProperties=__CreatedAt,,\\t__VERSION\",\n    \"__systemProperties= updatedat ,,\"\n];\n\nexports.testInvalidSystemPropertyQueryStrings = [\n    // Unknown system Properties\n    \"__systemProperties=__created\",\n    \"__systemProperties=updated At\",\n    \"__systemProperties=notASystemProperty\",\n    \"__systemProperties=_version\",\n             \n    // System properties not comma separated\n    \"__systemProperties=__createdAt __updatedAt\",\n    \"__systemProperties=__createdAt\\t__version\",\n    \"__systemProperties=createdAt updatedAt version\",\n    \"__systemProperties=__createdAt__version\",\n             \n    // All and individual system properties requested\n    \"__systemProperties=*,__updatedAt\"\n];\n\nexports.testInvalidSystemParameterQueryString = \"_systemProperties=__createdAt,__version\";"
  },
  {
    "path": "sdk/Javascript/test/winJS/tests/winJsOnly/push.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n/// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n/// <reference path=\"..\\..\\js\\MobileServices.Internals.js\" />\n/// <reference path=\"..\\..\\generated\\Tests.js\" />\n\n$testGroup('Push')\n    .functional()\n    .tag('push')\n    .tests(\n        $test('InitialUnregisterAll')\n        .description('Unregister all registrations with both the default and updated channel. Ensure no registrations still exist for either.')\n        .checkAsync(function () {\n            var client = $getClient(),\n                channelUri = defaultChannel,\n                pushHttpClient = client.push._registrationManager._pushHttpClient;\n\n            return client.push.unregisterAll(channelUri)\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, channelUri, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 0, 'Expect no registrations to be returned after unregisterAll');\n                        $assert.areEqual(JSON.stringify(client.push._registrationManager._storageManager._registrations), '{}', 'Expect local storage to contain no registrations after unregisterAll');\n                        channelUri = updatedChannel;\n                        return client.push.unregisterAll(channelUri);\n                    })\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, defaultChannel, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 0, 'Expect no registrations to be returned after unregisterAll');\n                        $assert.areEqual(JSON.stringify(client.push._registrationManager._storageManager._registrations), '{}', 'Expect local storage to contain no registrations after unregisterAll');\n                    })\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, updatedChannel, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 0, 'Expect no registrations to be returned after unregisterAll');\n                        $assert.areEqual(JSON.stringify(client.push._registrationManager._storageManager._registrations), '{}', 'Expect local storage to contain no registrations after unregisterAll');\n                    });\n        }),\n        $test('RegisterNativeUnregisterNative')\n        .description('Register a native channel followed by unregistering it.')\n        .checkAsync(function () {\n            var client = $getClient(),\n                channelUri = defaultChannel,\n                pushHttpClient = client.push._registrationManager._pushHttpClient;\n\n            return client.push.registerNative(channelUri)\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, channelUri, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 1, 'Expect 1 registration to be returned after register');                       \n                        $assert.areEqual(\n                            JSON.stringify(client.push._registrationManager._storageManager._registrations),\n                            '{\"$Default\":\"' + registrations[0].registrationId + '\"}',\n                            'Expect local storage to contain 1 registration after register');\n                        $assert.areEqual(client.push._registrationManager._storageManager.pushHandle, registrations[0].deviceId, 'Local storage should have channelUri from returned registration');\n\n                        return client.push.unregisterNative();\n                    })\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, defaultChannel, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 0, 'Expect no registrations to be returned after unregisterNative');\n                        $assert.areEqual(JSON.stringify(client.push._registrationManager._storageManager._registrations), '{}', 'Expect local storage to contain no registrations after unregisterNative');\n                    })\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, updatedChannel, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 0, 'Expect no registrations to be returned after unregisterTemplate');\n                        $assert.areEqual(JSON.stringify(client.push._registrationManager._storageManager._registrations), '{}', 'Expect local storage to contain no registrations after unregisterTemplate');\n                    });\n\n        }),\n        $test('RegisterTemplateUnregisterTemplate')\n        .description('Register a template followed by unregistering it.')\n        .checkAsync(function () {\n            var client = $getClient(),\n                channelUri = defaultChannel,\n                pushHttpClient = client.push._registrationManager._pushHttpClient;\n\n            return client.push.registerTemplate(channelUri, templateBody, templateName, defaultHeaders, defaultTags)\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, channelUri, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 1, 'Expect 1 registration to be returned after register');\n                        $assert.areEqual(JSON.stringify(\n                            client.push._registrationManager._storageManager._registrations),\n                            '{\"templateForToastWinJS\":\"' + registrations[0].registrationId + '\"}',\n                            'Expect local storage to contain 1 registration after register');\n                        $assert.areEqual(client.push._registrationManager._storageManager.pushHandle, registrations[0].deviceId, 'Local storage should have channelUri from returned registration');\n                        $assert.areEqual(registrations[0].deviceId, channelUri, 'Returned registration should use channelUri sent from registered template');\n                        Object.getOwnPropertyNames(registrations[0].headers).forEach(function (header) {\n                            $assert.areEqual(registrations[0].headers[header], defaultHeaders[header], 'Each header returned by registration should match what was registered.');\n                        });\n                        $assert.areEqual(Object.getOwnPropertyNames(registrations[0].headers).length, Object.getOwnPropertyNames(defaultHeaders).length, 'Returned registration should contain same number of headers sent from registered template');\n                        $assert.areEqual(registrations[0].tags.length, $isDotNet() ? defaultTags.length : defaultTags.length + 1, 'Returned registration should contain tags sent from registered template and 1 extra for installationId');\n                        // TODO: Re-enable when .Net runtime supports installationID in service\n                        //$assert.isTrue(registrations[0].tags.indexOf(WindowsAzure.MobileServiceClient._applicationInstallationId) > -1, 'Expected the installationID in the tags');\n                        $assert.areEqual(registrations[0].templateName, templateName, 'Expected returned registration to use templateName it was fed');\n                        $assert.areEqual(registrations[0].templateBody, templateBody, 'Expected returned registration to use templateBody it was fed');\n                        $assert.areEqual(client.push._registrationManager._storageManager.getRegistrationIdWithName(templateName), registrations[0].registrationId, 'Expected the stored registrationId to equal the one returned from service');\n\n                        return client.push.unregisterTemplate(templateName);\n                    })\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, defaultChannel, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 0, 'Expect no registrations to be returned after unregisterTemplate');\n                        $assert.areEqual(JSON.stringify(client.push._registrationManager._storageManager._registrations), '{}', 'Expect local storage to contain no registrations after unregisterTemplate');\n                    })\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, updatedChannel, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 0, 'Expect no registrations to be returned after unregisterTemplate');\n                        $assert.areEqual(JSON.stringify(client.push._registrationManager._storageManager._registrations), '{}', 'Expect local storage to contain no registrations after unregisterTemplate');\n                    });\n\n        }),\n        $test('RegisterRefreshRegisterWithUpdatedChannel')\n        .description('Register a template followed by a refresh of the client local storage followed by updated register of same template name.')\n        .checkAsync(function () {\n            var client = $getClient(),\n                channelUri = defaultChannel,\n                pushHttpClient = client.push._registrationManager._pushHttpClient;\n\n            return client.push.registerTemplate(channelUri, templateBody, templateName, defaultHeaders, defaultTags)\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, channelUri, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 1, 'Expect 1 registration to be returned after register');\n                        $assert.areEqual(\n                            JSON.stringify(client.push._registrationManager._storageManager._registrations),\n                            '{\"templateForToastWinJS\":\"' + registrations[0].registrationId + '\"}',\n                            'Expect local storage to contain 1 registration after register');\n                        $assert.areEqual(client.push._registrationManager._storageManager.pushHandle, registrations[0].deviceId, 'Local storage should have channelUri from returned registration');\n                        $assert.areEqual(registrations[0].deviceId, channelUri, 'Returned registration should use channelUri sent from registered template');\n                        Object.getOwnPropertyNames(registrations[0].headers).forEach(function (header) {\n                            $assert.areEqual(registrations[0].headers[header], defaultHeaders[header], 'Each header returned by registration should match what was registered.');\n                        });\n                        $assert.areEqual(Object.getOwnPropertyNames(registrations[0].headers).length, Object.getOwnPropertyNames(defaultHeaders).length, 'Returned registration should contain same number of headers sent from registered template');\n                        $assert.areEqual(registrations[0].tags.length, $isDotNet() ? defaultTags.length : defaultTags.length + 1, 'Returned registration should contain tags sent from registered template and 1 extra for installationId');\n                        // TODO: Re-enable when .Net runtime supports installationID in service\n                        //$assert.isTrue(registrations[0].tags.indexOf(WindowsAzure.MobileServiceClient._applicationInstallationId) > -1, 'Expected the installationID in the tags');\n                        $assert.areEqual(registrations[0].templateName, templateName, 'Expected returned registration to use templateName it was fed');\n                        $assert.areEqual(registrations[0].templateBody, templateBody, 'Expected returned registration to use templateBody it was fed');\n                        $assert.areEqual(client.push._registrationManager._storageManager.getRegistrationIdWithName(templateName), registrations[0].registrationId, 'Expected the stored registrationId to equal the one returned from service');\n\n                        client.push._registrationManager._storageManager._isRefreshNeeded = true;\n                        channelUri = updatedChannel;\n\n                        return client.push.registerTemplate(channelUri, templateBody, templateName, defaultHeaders, defaultTags);\n                    })\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, channelUri, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 1, 'Expect 1 registration to be returned after register');\n                        $assert.areEqual(\n                            JSON.stringify(client.push._registrationManager._storageManager._registrations),\n                            '{\"templateForToastWinJS\":\"' + registrations[0].registrationId + '\"}',\n                            'Expect local storage to contain 1 registration after register');\n                        $assert.areEqual(client.push._registrationManager._storageManager.pushHandle, registrations[0].deviceId, 'Local storage should have channelUri from returned registration');\n                        $assert.areEqual(registrations[0].deviceId, channelUri, 'Returned registration should use channelUri sent from registered template');\n                        Object.getOwnPropertyNames(registrations[0].headers).forEach(function (header) {\n                            $assert.areEqual(registrations[0].headers[header], defaultHeaders[header], 'Each header returned by registration should match what was registered.');\n                        });\n                        $assert.areEqual(Object.getOwnPropertyNames(registrations[0].headers).length, Object.getOwnPropertyNames(defaultHeaders).length, 'Returned registration should contain same number of headers sent from registered template');\n                        $assert.areEqual(registrations[0].tags.length, $isDotNet() ? defaultTags.length : defaultTags.length + 1, 'Returned registration should contain tags sent from registered template and 1 extra for installationId');\n                        // TODO: Re-enable when .Net runtime supports installationID in service\n                        //$assert.isTrue(registrations[0].tags.indexOf(WindowsAzure.MobileServiceClient._applicationInstallationId) > -1, 'Expected the installationID in the tags');\n                        $assert.areEqual(registrations[0].templateName, templateName, 'Expected returned registration to use templateName it was fed');\n                        $assert.areEqual(registrations[0].templateBody, templateBody, 'Expected returned registration to use templateBody it was fed');\n                        $assert.areEqual(client.push._registrationManager._storageManager.getRegistrationIdWithName(templateName), registrations[0].registrationId, 'Expected the stored registrationId to equal the one returned from service');\n                        $assert.areEqual(registrations[0].deviceId, updatedChannel, 'Expected the return channelUri to be the updated one');\n                        $assert.areEqual(client.push._registrationManager._storageManager.pushHandle, updatedChannel, 'Expected localstorage channelUri to be the updated one');\n\n                        return client.push.unregisterTemplate(templateName);\n                    })\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, defaultChannel, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 0, 'Expect no registrations to be returned after unregisterTemplate');\n                        $assert.areEqual(JSON.stringify(client.push._registrationManager._storageManager._registrations), '{}', 'Expect local storage to contain no registrations after unregisterTemplate');\n                    })\n                .then(\n                    function () {\n                        return Platform.async(pushHttpClient.listRegistrations).call(pushHttpClient, updatedChannel, 'wns');\n                    })\n                .then(\n                    function (registrations) {\n                        $assert.isTrue(Array.isArray(registrations), 'Expect to get an array from listRegistrations');\n                        $assert.areEqual(registrations.length, 0, 'Expect no registrations to be returned after unregisterNative');\n                        $assert.areEqual(JSON.stringify(client.push._registrationManager._storageManager._registrations), '{}', 'Expect local storage to contain no registrations after unregisterNative');\n                    });\n\n        })\n);\n\nvar defaultChannel = 'https://bn2.notify.windows.com/?token=AgYAAADs42685sa5PFCEy82eYpuG8WCPB098AWHnwR8kNRQLwUwf%2f9p%2fy0r82m4hxrLSQ%2bfl5aNlSk99E4jrhEatfsWgyutFzqQxHcLk0Xun3mufO2G%2fb2b%2ftjQjCjVcBESjWvY%3d';\nvar updatedChannel = 'https://bn2.notify.windows.com/?token=BgYAAADs42685sa5PFCEy82eYpuG8WCPB098AWHnwR8kNRQLwUwf%2f9p%2fy0r82m4hxrLSQ%2bfl5aNlSk99E4jrhEatfsWgyutFzqQxHcLk0Xun3mufO2G%2fb2b%2ftjQjCjVcBESjWvY%3d';\nvar templateBody = '<toast><visual><binding template=\\\"ToastText01\\\"><text id=\\\"1\\\">$(message)</text></binding></visual></toast>';\nvar templateName = 'templateForToastWinJS';\nvar defaultTags = ['fooWinJS', 'barWinJS'];\nvar defaultHeaders = { 'x-wns-type': 'wns/toast', 'x-wns-ttl': '100000' };"
  },
  {
    "path": "sdk/Javascript/tools/JSBuild/MergeJSModules.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Text.RegularExpressions;\nusing System.Xml.Linq;\nusing Microsoft.Build.Framework;\nusing Microsoft.Build.Utilities;\n\nnamespace Microsoft.WindowsAzure.Mobile.JSBuild\n{\n    /// <summary>\n    /// MSBuild task to merge JavaScript modules into a library that can be\n    /// included like a regular script.  This gives us the engineering benefits\n    /// of modules but integrates cleanly with any JavaScript platform that\n    /// doesn't support modules natively (like Windows 8).\n    /// \n    /// The modules to merge are defined by a .library file and follow the\n    /// CommonJS Module Specification (defined in just a couple sentences at\n    /// http://www.commonjs.org/specs/modules/1.0/) with a few small\n    /// exceptions (only top level module names are supported and there's an\n    /// additional free variable 'global' that refers to the top level scope).\n    /// \n    /// You can also specify any of the modules as an entry point to the\n    /// library and conditionally include modules in specialized versions of\n    /// the library (useful for unit testing internals, etc.).\n    /// </summary>\n    /// <remarks>\n    /// Library definitions have the following format:\n    /// \n    ///    <Library\n    ///      Path=\"{library}.js\"\n    ///      {Condition}Path=\"{library}.{condition}.js\"\n    ///      Copyright=\"{Optional Copyright Message}\">\n    ///         <Module Path=\"{first}.js\" />\n    ///         <Module Path=\"{second}.js\" EntryPoint=\"true\" />\n    ///         <Module Path=\"{conditional}.js\" Condition=\"{Condition}\" />\n    ///    </Library>\n    ///  \n    ///  The different options are explained in detail in the code below.\n    /// </remarks>\n    public class MergeJSModules : Task\n    {\n        /// <summary>\n        /// Gets or sets paths to files containing the library definitions.\n        /// </summary>\n        [Required]\n        public ITaskItem[] LibraryDefinitions { get; set; }\n\n        /// <summary>\n        /// Create library definitions.\n        /// </summary>\n        /// <returns>\n        /// A value indicating whether the task completed successfully.\n        /// </returns>\n        [SuppressMessage(\n            \"Microsoft.Globalization\",\n            \"CA1303:Do not pass literals as localized parameters\",\n            MessageId = \"Microsoft.Build.Utilities.TaskLoggingHelper.LogError(System.String,System.String,System.String,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.String,System.Object[])\",\n            Justification = \"Literal error messages are acceptable for an internal build task.S\")]\n        [SuppressMessage(\n            \"Microsoft.Design\",\n            \"CA1031:DoNotCatchGeneralExceptionTypes\",\n            Justification = \"If anything does wrong with the copy, we want to report an error.  This is acceptable for an internal build task.\")]\n        public override bool Execute()\n        {\n            bool succeeded = true;\n            foreach (ITaskItem definition in this.LibraryDefinitions)\n            {\n                try\n                {\n                    MergeModulesIntoLibrary(definition.ItemSpec);\n                }\n                catch (Exception ex)\n                {\n                    // Log an error pointing at the actual \n                    Log.LogError(\n                        \"MergeJSModules\",\n                        \"MergeJSModules\",\n                        null,\n                        definition.ItemSpec,\n                        0,\n                        0,\n                        0,\n                        0,\n                        \"Error merging JavaScript modules in {0}: {1}\",\n                        definition.ItemSpec,\n                        ex);\n                    succeeded = false;\n                }\n            }\n            return succeeded;\n        }\n\n        /// <summary>\n        /// Ensure the condition is satisfied or raise an error.\n        /// </summary>\n        /// <param name=\"condition\">The condition to verify.</param>\n        /// <param name=\"format\">Error message format.</param>\n        /// <param name=\"arguments\">Error message arguments.</param>\n        private static void Ensure(bool condition, string format, params object[] arguments)\n        {\n            if (!condition)\n            {\n                throw new InvalidOperationException(\n                    string.Format(CultureInfo.InvariantCulture, format, arguments));\n            }\n        }\n\n        /// <summary>\n        /// Gets the value of an attribute or returns null if not found.\n        /// </summary>\n        /// <param name=\"element\">\n        /// The element to check for the attribute.\n        /// </param>\n        /// <param name=\"attribute\">The attribute to check for.</param>\n        /// <returns>The value of the attribute or null if not found.</returns>\n        private static string GetAttribute(XElement element, string attribute)\n        {\n            Debug.Assert(element != null, \"element should not be null.\");\n            Debug.Assert(!string.IsNullOrEmpty(attribute), \"attribute should not be null or empty!\");\n\n            XAttribute attr = element.Attribute(attribute);\n            return attr != null ?\n                attr.Value :\n                null;\n        }\n\n        /// <summary>\n        /// Expand a path containing glob-style wildcards into the physical\n        /// paths it represents.  Note that wildcards are only allowed in the\n        /// file name - not the directory name.\n        /// </summary>\n        /// <param name=\"pathPattern\">\n        /// The path pattern (or just a regular path).\n        /// </param>\n        /// <returns>The corresponding physical paths.</returns>\n        private static IEnumerable<string> ExpandPath(string pathPattern)\n        {\n            Debug.Assert(!string.IsNullOrEmpty(pathPattern), \"pathPattern should not be null or empty.\");\n\n            if (!pathPattern.Contains('*') && !pathPattern.Contains('?'))\n            {\n                // Return the literal path if there are no wildcards.\n                return new string[] { pathPattern };\n            }\n            else\n            {\n                // We need to split the directory and the file name pattern\n                // apart so Directory.GetFiles can search.\n                string directory = Path.GetDirectoryName(pathPattern);\n                Ensure(\n                    !directory.Contains('*') && !directory.Contains('?'),\n                    \"Path pattern {0} does not support wildcards in the directory name.\",\n                    pathPattern);\n                string pattern = Path.GetFileName(pathPattern);\n                return Directory.GetFiles(directory, pattern, SearchOption.TopDirectoryOnly);\n            }\n        }\n\n        /// <summary>\n        /// Merge the modules into a library.\n        /// </summary>\n        /// <param name=\"definitionPath\">Path to the definition.</param>\n        private static void MergeModulesIntoLibrary(string definitionPath)\n        {\n            Ensure(\n                File.Exists(definitionPath),\n                \"Library definition {0} not found.\",\n                definitionPath);\n\n            // Parse the library definition\n            XElement library = XDocument.Load(definitionPath).Root;\n            Ensure(\n                library.Name == \"Library\",\n                \"Library definition expects Library as the root element, not {0}.\",              \n                library.Name);\n\n            string rootPath = Path.GetDirectoryName(definitionPath);\n\n            // We support generating multiple library files from a single\n            // library definition via conditional inclusion.  To generate a new\n            // file, simply add a {Condition}Path=\"...\" to your library with\n            // the name of your condition add a Condition=\"{Condition}\"\n            // attribute to any additional modules you want included in that\n            // generated library.  Note that we only support adding modules\n            // because our scenarios here are very limited (specifically we\n            // want to add a single module to either expose the require method\n            // so VS can pick it up correctly for intellisense or to expose\n            // all of the internal modules so they can be accessed by unit\n            // testS...  and we want to be able to do this without maintaining\n            // three copies of the *.library file that all need to be updated\n            // when a new module is added).\n            // \n            // We find all the conditions by iterating the attributes and \n            // getting everything that ends in Path before trimming off the\n            // suffix.  Note that it will leave the empty string as a condition\n            // which is used to generate the default library.\n            IEnumerable<string> conditions = \n                library\n                .Attributes()\n                .Select(a => a.Name.ToString())\n                .Where(n => n.EndsWith(\"Path\", StringComparison.Ordinal))\n                .Select(n => n.Substring(0, n.Length - 4));\n            Ensure(conditions.Count() > 0, \"Library root should specify a Path attribute.\");\n            foreach (string scriptCondition in conditions)\n            {\n                StringBuilder script = new StringBuilder();\n                List<string> entrypoints = new List<string>();\n                List<string> definedModules = new List<string>();\n                List<string> definedResources = new List<string>();\n\n                // Generate the library\n                WriteHeader(script, definitionPath, GetAttribute(library, \"Copyright\"), GetAttribute(library, \"FileVersion\"));\n                \n                foreach (XElement child in library.Elements(\"Resource\"))\n                {\n                    string resourceCondition = GetAttribute(child, \"Condition\");\n                    if (ScriptConditionSatisifesModuleCondition(scriptCondition, resourceCondition))\n                    {\n                        WriteResource(script, rootPath, child, definedResources);\n                    }\n                }\n\n                foreach (XElement child in library.Elements(\"Module\"))\n                {\n                    string moduleCondition = GetAttribute(child, \"Condition\");\n                    if (ScriptConditionSatisifesModuleCondition(scriptCondition, moduleCondition))\n                    {\n                        WriteModule(script, rootPath, child, definedModules, entrypoints);\n                    }\n                }\n\n                WriteFooter(script, entrypoints);\n\n                // Save the generated library code\n                string outputPath = Path.Combine(\n                    rootPath,\n                    GetAttribute(library, scriptCondition + \"Path\"));\n                File.WriteAllText(outputPath, script.ToString(), Encoding.UTF8);\n            }\n        }\n\n        /// <summary>\n        /// Determines whether the module should be merged into the specified script, by checking\n        /// the script name against the module condition string.\n        /// For example, the script Gamma matches the condition Alpha|Beta|Gamma, but Delta does not.\n        /// </summary>\n        /// <param name=\"scriptCondition\">The script being built</param>\n        /// <param name=\"moduleCondition\">The condition attribute from the module being considered</param>\n        /// <returns>True if the module should be included</returns>\n        private static bool ScriptConditionSatisifesModuleCondition(string scriptCondition, string moduleCondition)\n        {\n            // Only include this module if it either has no Condition, or its Condition matches the current\n            // conditional version of the library we're generating.\n            if (moduleCondition == null)\n            {\n                return true;\n            }\n\n            string[] matchingScripts = moduleCondition.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);\n            return matchingScripts.Contains(scriptCondition, StringComparer.OrdinalIgnoreCase);\n        }\n\n        /// <summary>\n        /// Write the library definition header including the module cache and\n        /// implementation of require.\n        /// </summary>\n        /// <param name=\"script\">The library script being written.</param>\n        /// <param name=\"libraryDefinitionPath\">\n        /// Path to the definition of the library which is used to provide a\n        /// helpful comment about regeneration.\n        /// </param>\n        /// <param name=\"copyright\">\n        /// Optional copyright header to include at the top of the library.\n        /// </param>\n        private static void WriteHeader(StringBuilder script, string libraryDefinitionPath, string copyright, string fileVersion)\n        {\n            Debug.Assert(script != null, \"script should not be null.\");\n            Debug.Assert(!string.IsNullOrEmpty(libraryDefinitionPath), \"libraryDefinitionPath should not be null or empty\");\n            Debug.Assert(File.Exists(libraryDefinitionPath), \"libraryDefinitionPath should point to an existing library definition.\");\n\n            // Include a copyright header\n            // The leading \"!\" character tells minifiers that this is an \"important\" comment that should not be removed\n            if (!string.IsNullOrEmpty(copyright))\n            {\n                script.AppendLine(\"// ----------------------------------------------------------------------------\");\n                script.AppendLine(\"//! \" + copyright);\n                script.AppendLine(\"// ----------------------------------------------------------------------------\");\n                script.AppendLine();\n                script.AppendLine();\n            }\n            \n            // Include a reminder not to edit the generated library file\n            script.AppendLine(\"// WARNING: This code was generated by a tool from the library definition\");\n            script.AppendLine(\"//     \" + libraryDefinitionPath);\n            script.AppendLine(\"// Do not modify this file directly.  Any changes made to this file will be\");\n            script.AppendLine(\"// lost the next time it is regenerated.\");\n            script.AppendLine();\n            script.AppendLine();\n\n            // Take in the global context which will allow some flexibility in\n            // sharing modules between different systems (like Windows 8 and\n            // node.js) so people don't resort to tacking things onto the\n            // window object.\n            script.AppendLine(\"(function (global) {\");\n\n            // The module cache starts by mapping top level module names to\n            // functions (taking exports as their only parameter), evaluates\n            // the functions once they are require-d, and then caches the\n            // exports in the mapping (so each module is only \"evaluated\" one\n            // time).\n            // \n            // Note that $__modules__ will appear as another free variable in\n            // the module implementations, but this is an implementation\n            // detail that shouldn't be relied on (except of course for testing\n            // purposes as it allows us to simulate InternalsVisibleTo by\n            // exposing all of the registered modules and their content).\n            script.AppendLine(\"    /// <field name=\\\"$__modules__\\\">\");\n            script.AppendLine(\"    /// Map module names to either their cached exports or a function which\");\n            script.AppendLine(\"    /// will define the module's exports when invoked.\");\n            script.AppendLine(\"    /// </field>\");\n            script.AppendLine(\"    var $__modules__ = { };\");\n            script.AppendLine(\"    var $__fileVersion__ = \\\"\" + fileVersion + \"\\\";\");\n            script.AppendLine(\"    \");\n            // Implement require in the top level scope so it will appear as a\n            // free variable in all of the module definitions.\n            script.AppendLine(\"    function require(name) {\");\n            script.AppendLine(\"        /// <summary>\");\n            script.AppendLine(\"        /// Require a module's exports.\");\n            script.AppendLine(\"        /// </summary>\");\n            script.AppendLine(\"        /// <param name=\\\"name\\\" type=\\\"String\\\">\");\n            script.AppendLine(\"        /// The name of the module.  Note that we don't support full CommonJS\");\n            script.AppendLine(\"        /// Module specification names here - we only allow the name of the\");\n            script.AppendLine(\"        /// module's file without any extension.\");\n            script.AppendLine(\"        /// </param>\");\n            script.AppendLine(\"        /// <returns type=\\\"Object\\\">\");\n            script.AppendLine(\"        /// The exports provided by the module.\");\n            script.AppendLine(\"        /// </returns>\");\n            script.AppendLine();\n            \n            // Trim \"./\" prefix from module names (which enables incorporating\n            // npm modules that don't dig very deeply in the hierarchy).\n            script.AppendLine(\"        if (name && name.length > 2 && name[0] == '.' && name[1] == '/') {\");\n            script.AppendLine(\"            name = name.slice(2);\");\n            script.AppendLine(\"        }\");\n            script.AppendLine();\n            \n            script.AppendLine(\"        var existing = $__modules__[name];\");\n\n            // If a module has not yet been required, it will be a function\n            // that when evaluated will populate the module's exports.\n            script.AppendLine(\"        if (typeof existing == 'function') {\");\n            \n            // We need to setup the exported values object in the module cache\n            // before we call the function and start defining the exports.\n            // This makes us compliant with the cirucular definition behavior\n            // described in the CommonJS Module Spec.  Imagine we have two\n            // modules that look like:\n            //     a.js:\n            //         exports.foo = function() { /* ... */ };\n            //         var baz = require('b').baz;\n            //         exports.bar = function() { /* use baz in here ... */ };\n            //     b.js\n            //         var foo = require('a').foo;\n            //         exports.baz = function() { /* use foo in here ... */ };\n            // When b.js requires a.js, we want to have everything in a.js that\n            // is exported before the require that lead to the circular\n            // dependency available to b.js.\n            script.AppendLine(\"            var exports = { };\");\n            script.AppendLine(\"            $__modules__[name] = exports;\");\n            script.AppendLine(\"            existing(exports);\");\n            script.AppendLine(\"            return exports;\");\n\n            // Otherwise just return the cached exports or throw an exception\n            // if a non-existant module was required.\n            script.AppendLine(\"        } else if (typeof existing == 'object') {\");\n            script.AppendLine(\"            return existing;\");\n            script.AppendLine(\"        } else {\");\n            script.AppendLine(\"            throw 'Unknown module ' + name;\");\n            script.AppendLine(\"        }\");\n            script.AppendLine(\"    }\");\n            script.AppendLine();\n        }\n\n        /// <summary>\n        /// Add the module definition to the library.\n        /// </summary>\n        /// <param name=\"script\">The library script being written.</param>\n        /// <param name=\"module\">Module XML element.</param>\n        /// <param name=\"definedModules\">\n        /// List of defined modules used to ensure no duplication.\n        /// </param>\n        /// <param name=\"entrypoints\">\n        /// Collection of modules that should be automatically required as\n        /// entry points for the merged library script.\n        /// </param>\n        private static void WriteModule(StringBuilder script, string rootPath, XElement module, List<string> definedModules, List<string> entrypoints)\n        {\n            Debug.Assert(script != null, \"script should not be null.\");\n            Debug.Assert(module != null, \"module should not be null.\");\n            Debug.Assert(entrypoints != null, \"entrypoints should not be null.\");\n\n            Ensure(\n                module.Name == \"Module\",\n                \"Library definition expects Module child elements, not {0}.\",\n                module.Name);\n            string path = GetAttribute(module, \"Path\");\n            Ensure(\n                !string.IsNullOrEmpty(path),\n                \"Module element should specify a Path attribute.\");\n            \n            string fullPath = Path.Combine(rootPath, path);\n\n            // Expand any wildcards in the path name (which lets us include all\n            // the *.js modules in a given directory, etc., which makes it easy\n            // to do things like pull all the unit tests into a module).\n            foreach (string modulePath in ExpandPath(fullPath))\n            {\n                \n                Ensure(\n                    File.Exists(modulePath),\n                    \"Module Path {0} does not exist.\",\n                    modulePath);\n\n                // We only support a so called \"top level\" name which is just\n                // the extension-less file name.  Full CommonJS module support\n                // would require us working with relative paths (which wouldn't\n                // be too hard - we'd just need to either store or precompute\n                // the relative path to this particular module so we could\n                // munge that with any relative paths provided to require...\n                // i.e., mimic a small part of the file system in our\n                // $__modules__ cache).  Given that we're only dealing with a\n                // static set of modules known at compilation time, the benefit\n                // that relative paths add outweighs the complexity they would\n                // introduce.\n                string topLevelModuleName = string.IsNullOrEmpty(GetAttribute(module, \"Name\"))\n                    ? Path.GetFileNameWithoutExtension(modulePath)\n                    : GetAttribute(module, \"Name\");\n\n                // Ensure there are no duplicate module names.  This would most\n                // likely happen if the library included wildcard searches that\n                // created a conflict by including two files with the same name\n                // but at different parts of the file system.  This is a\n                // limitation of not encoding file system details in our module\n                // names.\n                Ensure(\n                    !definedModules.Contains(topLevelModuleName),\n                    \"Cannot have multiple modules named '{0}'.\",\n                    topLevelModuleName);\n                definedModules.Add(topLevelModuleName);\n\n                // Determine whether this module is an entry point.\n                // \n                // An entry point corresponds conceptually to the script you\n                // would pass when starting the node.js process.  Without entry\n                // points, the modules wouldn't actually do anything since no\n                // one would be able to require them (as require's hidden in a\n                // new scope context so we don't leak details of the module\n                // system to regular code).\n                // \n                // Entry points are implemented by just adding an explicit\n                // require after all the modules have been defined.  We allow\n                // multiple entry points (processed in the order listed in the\n                // library definition file) because it's technically simple and\n                // makes our approach to exposing internal details for testing\n                // a little easier.\n                bool isEntrypoint = false;\n                if (bool.TryParse(GetAttribute(module, \"EntryPoint\"), out isEntrypoint) &&\n                    isEntrypoint)\n                {\n                    entrypoints.Add(topLevelModuleName);\n                }\n\n                // Provide the module implementation by wrapping it in a\n                // function which will provide it the exports object to\n                // populate.  The function will only be evaluate when the\n                // module is required.\n                script.AppendFormat(\"    $__modules__{0} = function (exports) {{\",\n                    // We prefer to use \"dot notation\" where possible, but will\n                    // default to using the object as a dictionary if the name\n                    // contains other invalid identifier characters.  (This is\n                    // specifically to make sure JsHint doesn't complain at the\n                    // generated library.)\n                    topLevelModuleName.All(c => char.IsLetterOrDigit(c) || c == '_' || c == '$') ?\n                        \".\" + topLevelModuleName :\n                        \"['\" + topLevelModuleName + \"']\");\n                script.AppendLine();\n\n                // Filter out any Visual Studio intellisense references at the\n                // top of the file as these are 1) only helpful for development\n                // (given the way we hack around the lack of intellisense for\n                // modules) and 2) unused since they're not at the very top of\n                // the library file.\n                IEnumerable<string> lines =\n                    File.ReadLines(modulePath)\n                    .SkipWhile(line =>\n                        Regex.IsMatch(line, @\"^\\/\\/\\/\\s*\\<reference\") ||\n                        string.IsNullOrEmpty(line.Trim()));\n                foreach (string line in lines)\n                {\n                    script.AppendLine(\"        \" + line);\n                }\n                script.AppendLine(\"    };\");\n                script.AppendLine();\n            }\n        }\n\n        /// <summary>\n        /// Add the resources for the language/region to the library.\n        /// </summary>\n        /// <param name=\"script\">The library script being written.</param>\n        /// <param name=\"module\">Resource XML element.</param>\n        /// <param name=\"definedModules\">\n        /// List of defined resources used to ensure no duplication.\n        /// </param>\n        private static void WriteResource(StringBuilder script, string rootPath, XElement resource, List<string> definedResources)\n        {\n            Debug.Assert(script != null, \"script should not be null.\");\n            Debug.Assert(resource != null, \"resource should not be null.\");\n\n            Ensure(\n                resource.Name == \"Resource\",\n                \"Library definition expects Resource child elements, not {0}.\",\n                resource.Name);\n\n            string path = GetAttribute(resource, \"Path\");\n            Ensure(\n                !string.IsNullOrEmpty(path),\n                \"Resource element should specify a Path attribute.\");\n            string fullPath = Path.Combine(rootPath, path);\n            Ensure(\n                File.Exists(fullPath),\n                \"Resource Path {0} does not exist.\",\n                fullPath);\n\n            string languageTag = GetAttribute(resource, \"LanguageTag\");\n            Ensure(\n                !string.IsNullOrWhiteSpace(languageTag),\n                \"Resource element must specify a LanguageTag attribute\");\n            Ensure(\n                !definedResources.Contains(languageTag),\n                \"Cannot have multiple resources with the LangugageTag '{0}'.\",\n                languageTag);\n            definedResources.Add(languageTag);\n\n            // We have to make sure a Resources object is defined before\n            // we can add members to it.\n            if (definedResources.Count == 1)\n            {\n                script.AppendLine(\"    $__modules__.Resources = { };\");\n                script.AppendLine();\n            }\n\n            // Add the language resjson to the Resources object as a Javascript object\n            script.AppendFormat(\"    $__modules__.Resources['{0}'] =\", languageTag);\n\n            IEnumerable<string> lines = File.ReadLines(fullPath)\n                                            .SkipWhile(line => string.IsNullOrEmpty(line.Trim()));\n            foreach (string line in lines)\n            {\n                script.AppendLine();\n                script.Append(\"        \" + line);\n            }\n\n            script.AppendLine(\";\");\n            script.AppendLine();\n        }\n\n        /// <summary>\n        /// Finish the library definition by require-ing all of the entry point\n        /// modules and closing the global scope.\n        /// </summary>\n        /// <param name=\"script\">The library script being written.</param>\n        /// <param name=\"entrypoints\">\n        /// Collection of modules that should be automatically required as\n        /// entry points for the merged library script.\n        /// </param>\n        private static void WriteFooter(StringBuilder script, List<string> entrypoints)\n        {\n            Debug.Assert(script != null, \"script should not be null.\");\n            Debug.Assert(entrypoints != null, \"entrypoints should not be null.\");\n\n            // Require each of the entry point modules in the order provided by\n            // the library definition.  Forcing require-s of these modules\n            // allows the otherwise static definitions to set things up, define\n            // globally accessible values, cause side effects, etc.\n            foreach (string entrypoint in entrypoints)\n            {\n                script.AppendLine(\"    require('\" + entrypoint + \"');\");\n            }\n\n            // Pass in the current object as the 'global' free variable and\n            // In Windows 8 and browser contexts, 'this' will refer to the\n            // window object. In Node.js, exports should be used to provide\n            // public APIs (and 'this' will be undefined).\n            script.AppendLine(\"})(this || exports);\");\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Javascript/tools/JSBuild/Microsoft.WindowsAzure.Mobile.JSBuild.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{FFD91CC6-07FF-4D69-A064-2A911E2B4087}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.Mobile.JSBuild</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.JSBuild</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n    <SignAssembly>false</SignAssembly>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'BuildTools|AnyCPU'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\BuildTools\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <DebugType>full</DebugType>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.Build\" />\n    <Reference Include=\"Microsoft.Build.Framework\" />\n    <Reference Include=\"Microsoft.Build.Tasks.v4.0\" />\n    <Reference Include=\"Microsoft.Build.Utilities.v4.0\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"MergeJSModules.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <PropertyGroup>\n    <PostBuildEvent>\n    </PostBuildEvent>\n  </PropertyGroup>\n  <Target Name=\"AfterBuild\">\n    <Copy SourceFiles=\"$(OutputPath)\\Microsoft.WindowsAzure.Mobile.JSBuild.dll\" DestinationFolder=\"$(MSBuildProjectDirectory)\\..\" />\n  </Target>\n</Project>"
  },
  {
    "path": "sdk/Javascript/tools/JSBuild/Properties/AssemblyInfo.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.JSBuild\")]\n[assembly: AssemblyDescription(\"Build tasks for Microsoft Azure Mobile Services JS\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: Guid(\"1df86c3e-2fde-4a9d-81e1-8686d40051f9\")]"
  },
  {
    "path": "sdk/Managed/.gitignore",
    "content": "*.suo\n*.csproj.user\n*.vbproj.user\n#ignore build files\nbin\nobj\npackages\n.nuget/nuget.exe\nsrc/*/Strings/*\nComponents"
  },
  {
    "path": "sdk/Managed/Microsoft.WindowsAzure.Mobile.Managed - IncludeXamarin.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.31101.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile\", \"src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\", \"{75557793-E36E-4190-8714-5BD2665859FB}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"src\", \"src\", \"{BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"test\", \"test\", \"{45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.Win8\", \"src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Microsoft.WindowsAzure.Mobile.Ext.Win8.csproj\", \"{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\", \"{D8BBC92A-B213-463B-911D-3A106F91D5F9}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.TestFramework\", \"test\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\", \"{A2500BD2-A9A2-4085-9978-DEE3675B02DD}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Win8.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\Microsoft.WindowsAzure.Mobile.Win8.Test.csproj\", \"{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.WP8\", \"src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8\\Microsoft.WindowsAzure.Mobile.Ext.WP8.csproj\", \"{3114E433-7FC1-4056-8CF9-2406E32BB10D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.UI.WP8\", \"src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI\\Microsoft.WindowsAzure.Mobile.UI.WP8.csproj\", \"{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.WP8.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test\\Microsoft.WindowsAzure.Mobile.WP8.Test.csproj\", \"{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \".nuget\", \".nuget\", \"{E0DB6669-9295-4034-8E6D-7C4F2ED297DD}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.Net45\", \"src\\Microsoft.WindowsAzure.MobileServices.Net45\\Microsoft.WindowsAzure.Mobile.Ext.Net45.csproj\", \"{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Net45.Test\", \"test\\Microsoft.WindowsAzure.Mobile.Net45.Test\\Microsoft.WindowsAzure.Mobile.Net45.Test.csproj\", \"{7C1A9BC1-3E60-4673-AC08-AC8399032D49}\"\nEndProject\nProject(\"{F184B08F-C81C-45F6-A57F-5ABD9991F28F}\") = \"Microsoft.WindowsAzure.Mobile.Net45.Vb.Test\", \"test\\Microsoft.WindowsAzure.Mobile.Net45.Vb.Test\\Microsoft.WindowsAzure.Mobile.Net45.Vb.Test.vbproj\", \"{D3C7CD26-984A-46D1-8618-8363199F1573}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Android.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.Android.Test\\Microsoft.WindowsAzure.Mobile.Android.Test.csproj\", \"{36A77431-95A0-4AA7-924A-A8F6C6C631C6}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15} = {0F77566D-014F-4D09-B783-D4E701627D15}\n\tEndProjectSection\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.iOS.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.iOS.Test\\Microsoft.WindowsAzure.Mobile.iOS.Test.csproj\", \"{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161} = {A871B137-83A8-4E9B-913D-30EE0288E161}\n\tEndProjectSection\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.iOS\", \"src\\Microsoft.WindowsAzure.MobileServices.iOS\\Microsoft.WindowsAzure.Mobile.Ext.iOS.csproj\", \"{A871B137-83A8-4E9B-913D-30EE0288E161}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.Android\", \"src\\Microsoft.WindowsAzure.MobileServices.Android\\Microsoft.WindowsAzure.Mobile.Ext.Android.csproj\", \"{0F77566D-014F-4D09-B783-D4E701627D15}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.WP81\", \"src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone81\\Microsoft.WindowsAzure.Mobile.Ext.WP81.csproj\", \"{02EEF75A-D824-4203-B243-C1B97B0D35A9}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.WP81.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test\\Microsoft.WindowsAzure.Mobile.WP81.Test.csproj\", \"{92CD4A69-950A-45FE-B8EA-774BA69E7482}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Test.Unit\", \"test\\Microsoft.WindowsAzure.MobileServices.Test.Unit\\Microsoft.WindowsAzure.Mobile.Test.Unit.csproj\", \"{574B5567-FF51-4B0F-A9ED-CC9F711E9156}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.iOS-Classic\", \"src\\Microsoft.WindowsAzure.MobileServices.iOS\\Microsoft.WindowsAzure.Mobile.Ext.iOS-Classic.csproj\", \"{9D2109B6-F005-4419-B9DB-8FA2A4514D28}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|Mixed Platforms = Debug|Mixed Platforms\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|Mixed Platforms = Release|Mixed Platforms\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\t\tSigned|Any CPU = Signed|Any CPU\n\t\tSigned|ARM = Signed|ARM\n\t\tSigned|Mixed Platforms = Signed|Mixed Platforms\n\t\tSigned|x64 = Signed|x64\n\t\tSigned|x86 = Signed|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|ARM.Build.0 = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|ARM.Build.0 = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|ARM.Build.0 = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|ARM.Build.0 = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Mixed Platforms.Deploy.0 = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x64.Build.0 = Debug|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x86.Build.0 = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|ARM.Build.0 = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x64.ActiveCfg = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x64.Build.0 = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x64.Deploy.0 = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x86.ActiveCfg = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x86.Build.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x86.Deploy.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|ARM.ActiveCfg = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|ARM.Build.0 = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|ARM.Deploy.0 = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|Mixed Platforms.Build.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|x64.ActiveCfg = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|x64.Build.0 = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|x64.Deploy.0 = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|x86.ActiveCfg = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|x86.Build.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|x86.Deploy.0 = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|x86.Build.0 = Debug|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|ARM.Build.0 = Release|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|x86.ActiveCfg = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|x86.Build.0 = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|ARM.ActiveCfg = Release|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|ARM.Build.0 = Release|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|Mixed Platforms.Build.0 = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|x86.ActiveCfg = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|x86.Build.0 = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|x86.Build.0 = Debug|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|ARM.Build.0 = Release|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|x86.ActiveCfg = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|x86.Build.0 = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|ARM.ActiveCfg = Release|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|ARM.Build.0 = Release|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|Mixed Platforms.Build.0 = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|x86.ActiveCfg = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|x86.Build.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Mixed Platforms.Deploy.0 = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|x86.Build.0 = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|ARM.Build.0 = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|x86.ActiveCfg = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|x86.Build.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|x86.Deploy.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|ARM.ActiveCfg = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|ARM.Build.0 = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|ARM.Deploy.0 = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|Mixed Platforms.Build.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|x86.ActiveCfg = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|x86.Build.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|x86.Deploy.0 = Release|x86\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Signed|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Signed|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Signed|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Debug|ARM.Deploy.0 = Debug|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Debug|Mixed Platforms.Deploy.0 = Debug|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Release|ARM.Deploy.0 = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Release|Mixed Platforms.Deploy.0 = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Signed|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Signed|ARM.Build.0 = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Signed|ARM.Deploy.0 = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Signed|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Signed|Mixed Platforms.Deploy.0 = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Debug|ARM.ActiveCfg = Debug|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Debug|ARM.Build.0 = Debug|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Debug|ARM.Deploy.0 = Debug|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Debug|Mixed Platforms.ActiveCfg = Debug|iPhoneSimulator\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Debug|Mixed Platforms.Build.0 = Debug|iPhoneSimulator\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Debug|Mixed Platforms.Deploy.0 = Debug|iPhoneSimulator\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Debug|x64.ActiveCfg = Debug|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Release|ARM.ActiveCfg = Release|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Release|ARM.Build.0 = Release|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Release|ARM.Deploy.0 = Release|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Release|Mixed Platforms.ActiveCfg = Release|iPhoneSimulator\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Release|Mixed Platforms.Build.0 = Release|iPhoneSimulator\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Release|Mixed Platforms.Deploy.0 = Release|iPhoneSimulator\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Release|x64.ActiveCfg = Release|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Release|x86.ActiveCfg = Release|iPhoneSimulator\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Signed|Any CPU.ActiveCfg = Release|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Signed|ARM.ActiveCfg = Release|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Signed|ARM.Build.0 = Release|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Signed|ARM.Deploy.0 = Release|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Signed|Mixed Platforms.ActiveCfg = Release|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Signed|Mixed Platforms.Build.0 = Release|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Signed|Mixed Platforms.Deploy.0 = Release|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Signed|x64.ActiveCfg = Release|iPhone\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}.Signed|x86.ActiveCfg = Release|iPhone\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Signed|ARM.Build.0 = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Signed|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Signed|ARM.Build.0 = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Signed|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|x86.Build.0 = Debug|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|ARM.Build.0 = Release|ARM\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|x86.ActiveCfg = Release|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|x86.Build.0 = Release|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|Any CPU.Build.0 = Debug|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|ARM.ActiveCfg = Debug|ARM\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|ARM.Build.0 = Debug|ARM\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|Mixed Platforms.Build.0 = Debug|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|x64.ActiveCfg = Debug|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|x86.ActiveCfg = Debug|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|x86.Build.0 = Debug|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|Mixed Platforms.Deploy.0 = Debug|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|x86.Build.0 = Debug|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|ARM.Build.0 = Release|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|x86.ActiveCfg = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|x86.Build.0 = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|x86.Deploy.0 = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|ARM.ActiveCfg = Release|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|ARM.Build.0 = Release|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|ARM.Deploy.0 = Release|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|Mixed Platforms.Build.0 = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|x86.ActiveCfg = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|x86.Build.0 = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|x86.Deploy.0 = Release|x86\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Signed|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Signed|ARM.Build.0 = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Signed|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Signed|x86.ActiveCfg = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{75557793-E36E-4190-8714-5BD2665859FB} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{36A77431-95A0-4AA7-924A-A8F6C6C631C6} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{977A5F48-B0F3-4860-AA1A-5B3081ED7D98} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "sdk/Managed/Microsoft.WindowsAzure.Mobile.Managed.SQLiteStore.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.30723.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.SQLiteStore\", \"src\\Microsoft.WindowsAzure.MobileServices.SQLiteStore\\Microsoft.WindowsAzure.Mobile.SQLiteStore.csproj\", \"{4C20D49A-FE5E-4D9C-98B9-8125450074F5}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile\", \"src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\", \"{75557793-E36E-4190-8714-5BD2665859FB}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.Win8\", \"src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Microsoft.WindowsAzure.Mobile.Ext.Win8.csproj\", \"{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.TestFramework\", \"test\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\", \"{A2500BD2-A9A2-4085-9978-DEE3675B02DD}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.SQLiteStore.Win8.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test\\Microsoft.WindowsAzure.Mobile.SQLiteStore.Win8.Test.csproj\", \"{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.Unit\", \"test\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Unit\\Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.Unit.csproj\", \"{574B5567-FF51-4B0F-A9ED-CC9F711E9156}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\", \"{D8BBC92A-B213-463B-911D-3A106F91D5F9}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"src\", \"src\", \"{1389B3C6-701D-4812-A32B-D6662195EEA9}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"test\", \"test\", \"{C5440C41-582C-4372-B3D1-A7878A7C1CC9}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.SQLiteStore.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\\Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.csproj\", \"{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.SQLiteStore.Net45.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test\\Microsoft.WindowsAzure.Mobile.SQLiteStore.Net45.Test.csproj\", \"{7C1A9BC1-3E60-4673-AC08-AC8399032D49}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.SQLiteStore.WP8.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test\\Microsoft.WindowsAzure.Mobile.SQLiteStore.WP8.Test.csproj\", \"{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.Net45\", \"src\\Microsoft.WindowsAzure.MobileServices.Net45\\Microsoft.WindowsAzure.Mobile.Ext.Net45.csproj\", \"{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.WP8\", \"src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8\\Microsoft.WindowsAzure.Mobile.Ext.WP8.csproj\", \"{3114E433-7FC1-4056-8CF9-2406E32BB10D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.UI.WP8\", \"src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI\\Microsoft.WindowsAzure.Mobile.UI.WP8.csproj\", \"{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test\\Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test.csproj\", \"{984C6927-3A86-4EBF-9754-73952C2623F8}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.SQLiteStore.iOS.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.iOS.Test\\Microsoft.WindowsAzure.Mobile.SQLiteStore.iOS.Test.csproj\", \"{8045853F-195D-44CE-B8CE-09F776E22902}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.Android\", \"src\\Microsoft.WindowsAzure.MobileServices.Android\\Microsoft.WindowsAzure.Mobile.Ext.Android.csproj\", \"{0F77566D-014F-4D09-B783-D4E701627D15}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.iOS\", \"src\\Microsoft.WindowsAzure.MobileServices.iOS\\Microsoft.WindowsAzure.Mobile.Ext.iOS.csproj\", \"{A871B137-83A8-4E9B-913D-30EE0288E161}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.iOS-Classic\", \"src\\Microsoft.WindowsAzure.MobileServices.iOS\\Microsoft.WindowsAzure.Mobile.Ext.iOS-Classic.csproj\", \"{9D2109B6-F005-4419-B9DB-8FA2A4514D28}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|iPhone = Debug|iPhone\n\t\tDebug|iPhoneSimulator = Debug|iPhoneSimulator\n\t\tDebug|Mixed Platforms = Debug|Mixed Platforms\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|iPhone = Release|iPhone\n\t\tRelease|iPhoneSimulator = Release|iPhoneSimulator\n\t\tRelease|Mixed Platforms = Release|Mixed Platforms\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5}.Release|x86.Build.0 = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|x86.Build.0 = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|x86.Build.0 = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|x86.Build.0 = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Any CPU.Build.0 = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Any CPU.Deploy.0 = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Mixed Platforms.Deploy.0 = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x64.Build.0 = Debug|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x86.Build.0 = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|ARM.Build.0 = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x64.ActiveCfg = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x64.Build.0 = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x64.Deploy.0 = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x86.ActiveCfg = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x86.Build.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x86.Deploy.0 = Release|x86\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|x86.Build.0 = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|x86.Build.0 = Release|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}.Release|x86.Build.0 = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|x86.Build.0 = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Any CPU.Build.0 = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Any CPU.Deploy.0 = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Mixed Platforms.Deploy.0 = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|x86.Build.0 = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|ARM.Build.0 = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|x86.ActiveCfg = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|x86.Build.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|x86.Deploy.0 = Release|x86\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|x86.Build.0 = Debug|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|ARM.Build.0 = Release|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|x86.ActiveCfg = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|x86.Build.0 = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|Any CPU.Build.0 = Debug|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|x86.Build.0 = Debug|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|ARM.Build.0 = Release|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|x86.ActiveCfg = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|x86.Build.0 = Release|x86\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|Mixed Platforms.Deploy.0 = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Release|Mixed Platforms.Deploy.0 = Release|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|Any CPU.ActiveCfg = Debug|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|ARM.ActiveCfg = Debug|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|iPhone.ActiveCfg = Debug|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|iPhone.Build.0 = Debug|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|iPhone.Deploy.0 = Debug|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|Mixed Platforms.ActiveCfg = Debug|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|Mixed Platforms.Build.0 = Debug|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|Mixed Platforms.Deploy.0 = Debug|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|x64.ActiveCfg = Debug|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Debug|x86.ActiveCfg = Debug|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|Any CPU.ActiveCfg = Release|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|ARM.ActiveCfg = Release|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|iPhone.ActiveCfg = Release|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|iPhone.Build.0 = Release|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|iPhone.Deploy.0 = Release|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|Mixed Platforms.ActiveCfg = Release|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|Mixed Platforms.Build.0 = Release|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|Mixed Platforms.Deploy.0 = Release|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|x64.ActiveCfg = Release|iPhone\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902}.Release|x86.ActiveCfg = Release|iPhone\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28}.Release|x86.ActiveCfg = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{4C20D49A-FE5E-4D9C-98B9-8125450074F5} = {1389B3C6-701D-4812-A32B-D6662195EEA9}\n\t\t{75557793-E36E-4190-8714-5BD2665859FB} = {1389B3C6-701D-4812-A32B-D6662195EEA9}\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A} = {1389B3C6-701D-4812-A32B-D6662195EEA9}\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD} = {C5440C41-582C-4372-B3D1-A7878A7C1CC9}\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200} = {C5440C41-582C-4372-B3D1-A7878A7C1CC9}\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156} = {C5440C41-582C-4372-B3D1-A7878A7C1CC9}\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9} = {C5440C41-582C-4372-B3D1-A7878A7C1CC9}\n\t\t{CD5D8A3A-5631-41BF-8161-8A2A7F892B71} = {C5440C41-582C-4372-B3D1-A7878A7C1CC9}\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49} = {C5440C41-582C-4372-B3D1-A7878A7C1CC9}\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D} = {C5440C41-582C-4372-B3D1-A7878A7C1CC9}\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620} = {1389B3C6-701D-4812-A32B-D6662195EEA9}\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D} = {1389B3C6-701D-4812-A32B-D6662195EEA9}\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391} = {1389B3C6-701D-4812-A32B-D6662195EEA9}\n\t\t{984C6927-3A86-4EBF-9754-73952C2623F8} = {C5440C41-582C-4372-B3D1-A7878A7C1CC9}\n\t\t{8045853F-195D-44CE-B8CE-09F776E22902} = {C5440C41-582C-4372-B3D1-A7878A7C1CC9}\n\t\t{0F77566D-014F-4D09-B783-D4E701627D15} = {1389B3C6-701D-4812-A32B-D6662195EEA9}\n\t\t{A871B137-83A8-4E9B-913D-30EE0288E161} = {1389B3C6-701D-4812-A32B-D6662195EEA9}\n\t\t{9D2109B6-F005-4419-B9DB-8FA2A4514D28} = {1389B3C6-701D-4812-A32B-D6662195EEA9}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "sdk/Managed/Microsoft.WindowsAzure.Mobile.Managed.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.30723.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile\", \"src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\", \"{75557793-E36E-4190-8714-5BD2665859FB}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"src\", \"src\", \"{BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"test\", \"test\", \"{45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.Win8\", \"src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Microsoft.WindowsAzure.Mobile.Ext.Win8.csproj\", \"{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\", \"{D8BBC92A-B213-463B-911D-3A106F91D5F9}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.TestFramework\", \"test\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\", \"{A2500BD2-A9A2-4085-9978-DEE3675B02DD}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Win8.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\Microsoft.WindowsAzure.Mobile.Win8.Test.csproj\", \"{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.UI.WP8\", \"src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI\\Microsoft.WindowsAzure.Mobile.UI.WP8.csproj\", \"{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.WP8.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test\\Microsoft.WindowsAzure.Mobile.WP8.Test.csproj\", \"{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \".nuget\", \".nuget\", \"{E0DB6669-9295-4034-8E6D-7C4F2ED297DD}\"\n\tProjectSection(SolutionItems) = preProject\n\t\t.nuget\\NuGet.Config = .nuget\\NuGet.Config\n\t\t.nuget\\NuGet.exe = .nuget\\NuGet.exe\n\t\t.nuget\\NuGet.targets = .nuget\\NuGet.targets\n\tEndProjectSection\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.Net45\", \"src\\Microsoft.WindowsAzure.MobileServices.Net45\\Microsoft.WindowsAzure.Mobile.Ext.Net45.csproj\", \"{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Net45.Test\", \"test\\Microsoft.WindowsAzure.Mobile.Net45.Test\\Microsoft.WindowsAzure.Mobile.Net45.Test.csproj\", \"{7C1A9BC1-3E60-4673-AC08-AC8399032D49}\"\nEndProject\nProject(\"{F184B08F-C81C-45F6-A57F-5ABD9991F28F}\") = \"Microsoft.WindowsAzure.Mobile.Net45.Vb.Test\", \"test\\Microsoft.WindowsAzure.Mobile.Net45.Vb.Test\\Microsoft.WindowsAzure.Mobile.Net45.Vb.Test.vbproj\", \"{D3C7CD26-984A-46D1-8618-8363199F1573}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Test.Unit\", \"test\\Microsoft.WindowsAzure.MobileServices.Test.Unit\\Microsoft.WindowsAzure.Mobile.Test.Unit.csproj\", \"{574B5567-FF51-4B0F-A9ED-CC9F711E9156}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.WP8\", \"src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8\\Microsoft.WindowsAzure.Mobile.Ext.WP8.csproj\", \"{3114E433-7FC1-4056-8CF9-2406E32BB10D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.Ext.WP81\", \"src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone81\\Microsoft.WindowsAzure.Mobile.Ext.WP81.csproj\", \"{02EEF75A-D824-4203-B243-C1B97B0D35A9}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Microsoft.WindowsAzure.Mobile.WP81.Test\", \"test\\Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test\\Microsoft.WindowsAzure.Mobile.WP81.Test.csproj\", \"{92CD4A69-950A-45FE-B8EA-774BA69E7482}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\t\tSigned|Any CPU = Signed|Any CPU\n\t\tSigned|ARM = Signed|ARM\n\t\tSigned|x64 = Signed|x64\n\t\tSigned|x86 = Signed|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{75557793-E36E-4190-8714-5BD2665859FB}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x64.Build.0 = Debug|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x86.Build.0 = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|ARM.Build.0 = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x64.ActiveCfg = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x64.Build.0 = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x64.Deploy.0 = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x86.ActiveCfg = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x86.Build.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Release|x86.Deploy.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|ARM.ActiveCfg = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|ARM.Build.0 = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|ARM.Deploy.0 = Release|ARM\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|x64.ActiveCfg = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|x64.Build.0 = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|x64.Deploy.0 = Release|x64\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|x86.ActiveCfg = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|x86.Build.0 = Release|x86\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}.Signed|x86.Deploy.0 = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Debug|x86.Build.0 = Debug|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|ARM.Build.0 = Release|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|x86.ActiveCfg = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Release|x86.Build.0 = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|ARM.ActiveCfg = Release|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|ARM.Build.0 = Release|ARM\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|x86.ActiveCfg = Release|x86\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}.Signed|x86.Build.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|x86.Build.0 = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|ARM.Build.0 = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|x86.ActiveCfg = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|x86.Build.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Release|x86.Deploy.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|ARM.ActiveCfg = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|ARM.Build.0 = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|ARM.Deploy.0 = Release|ARM\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|x86.ActiveCfg = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|x86.Build.0 = Release|x86\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}.Signed|x86.Deploy.0 = Release|x86\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Signed|ARM.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156}.Signed|x86.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Debug|x86.Build.0 = Debug|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|ARM.Build.0 = Release|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|x86.ActiveCfg = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Release|x86.Build.0 = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|ARM.ActiveCfg = Release|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|ARM.Build.0 = Release|ARM\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|x86.ActiveCfg = Release|x86\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D}.Signed|x86.Build.0 = Release|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Debug|x86.Build.0 = Debug|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|ARM.Build.0 = Release|ARM\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|x86.ActiveCfg = Release|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Release|x86.Build.0 = Release|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|Any CPU.Build.0 = Debug|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|ARM.ActiveCfg = Debug|ARM\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|ARM.Build.0 = Debug|ARM\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|x64.ActiveCfg = Debug|Any CPU\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|x86.ActiveCfg = Debug|x86\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9}.Signed|x86.Build.0 = Debug|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|x86.Build.0 = Debug|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|ARM.Build.0 = Release|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|x86.ActiveCfg = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|x86.Build.0 = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Release|x86.Deploy.0 = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|Any CPU.Build.0 = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|ARM.ActiveCfg = Release|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|ARM.Build.0 = Release|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|ARM.Deploy.0 = Release|ARM\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|x64.ActiveCfg = Release|Any CPU\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|x86.ActiveCfg = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|x86.Build.0 = Release|x86\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482}.Signed|x86.Deploy.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{75557793-E36E-4190-8714-5BD2665859FB} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{D8BBC92A-B213-463B-911D-3A106F91D5F9} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{A2500BD2-A9A2-4085-9978-DEE3675B02DD} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{7C1A9BC1-3E60-4673-AC08-AC8399032D49} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{D3C7CD26-984A-46D1-8618-8363199F1573} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{574B5567-FF51-4B0F-A9ED-CC9F711E9156} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\t\t{3114E433-7FC1-4056-8CF9-2406E32BB10D} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{02EEF75A-D824-4203-B243-C1B97B0D35A9} = {BA83494B-A52F-4CC8-B2BE-E339376AD2D5}\n\t\t{92CD4A69-950A-45FE-B8EA-774BA69E7482} = {45E57CDC-7178-4915-8D0B-CF80F5E44AF6}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Authentication/MobileServiceAuthentication.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides login functionality for the <see cref=\"MobileServiceClient\"/>. \n    /// </summary>\n    internal abstract class MobileServiceAuthentication\n    {\n        /// <summary>\n        /// Name of the  JSON member in the config setting that stores the\n        /// authentication token.\n        /// </summary>\n        private const string LoginAsyncAuthenticationTokenKey = \"authenticationToken\";\n\n        /// <summary>\n        /// Relative URI fragment of the login endpoint.\n        /// </summary>\n        protected const string LoginAsyncUriFragment = \"login\";\n\n        /// <summary>\n        /// Relative URI fragment of the login/done endpoint.\n        /// </summary>\n        protected const string LoginAsyncDoneUriFragment = \"login/done\";\n\n        /// <summary>\n        /// Name of the authentication provider as expected by the service REST API.\n        /// </summary>\n        private string providerName;\n\n        /// <summary>\n        /// The name for the Azure Active Directory authentication provider as used by the\n        /// service REST API.\n        /// </summary>\n        internal const string WindowsAzureActiveDirectoryRestApiPathName = \"aad\";\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"MobileServiceAuthentication\"/> class.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The <see cref=\"MobileServiceClient\"/> associated with this \n        /// MobileServiceLogin instance.\n        /// </param>\n        /// <param name=\"providerName\">\n        /// The <see cref=\"MobileServiceAuthenticationProvider\"/> used to authenticate.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        public MobileServiceAuthentication(IMobileServiceClient client, string providerName, IDictionary<string, string> parameters)\n        {\n            Debug.Assert(client != null, \"client should not be null.\");\n            if (providerName == null)\n            {\n                throw new ArgumentNullException(\"providerName\");\n            }\n\n            this.Client = client;\n            this.Parameters = parameters;\n            this.ProviderName = providerName;\n\n            string path = MobileServiceUrlBuilder.CombinePaths(LoginAsyncUriFragment, this.ProviderName);\n            string queryString = MobileServiceUrlBuilder.GetQueryString(parameters, useTableAPIRules: false);\n            string pathAndQuery = MobileServiceUrlBuilder.CombinePathAndQuery(path, queryString);\n\n            this.StartUri = new Uri(this.Client.ApplicationUri, pathAndQuery);\n            this.EndUri = new Uri(this.Client.ApplicationUri, MobileServiceAuthentication.LoginAsyncDoneUriFragment);\n        }\n\n        /// <summary>\n        /// The <see cref=\"MobileServiceClient\"/> associated with this \n        /// <see cref=\"MobileServiceAuthentication\"/> instance.\n        /// </summary>\n        protected IMobileServiceClient Client { get; private set; }\n\n        /// <summary>\n        /// The name of the authentication provider used by this\n        /// <see cref=\"MobileServiceAuthentication\"/> instance.\n        /// </summary>\n        internal string ProviderName\n        {\n            get { return this.providerName; }\n            private set\n            {\n                this.providerName = value.ToLowerInvariant();\n                if (this.providerName.Equals(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory.ToString(), StringComparison.OrdinalIgnoreCase))\n                {\n                    this.providerName = WindowsAzureActiveDirectoryRestApiPathName;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </summary>\n        internal IDictionary<string, string> Parameters { get; private set; }\n\n        /// <summary>\n        /// The start uri to use for authentication.\n        /// The browser-based control should \n        /// first navigate to this Uri in order to start the authenication flow.\n        /// </summary>\n        internal Uri StartUri { get; private set; }\n\n        /// <summary>\n        /// The end Uri to use for authentication.\n        /// This Uri indicates that the authentication flow has \n        /// completed. Upon being redirected to any URL that starts with the \n        /// endUrl, the browser-based control must stop navigating and\n        /// return the response data.\n        /// </summary>\n        internal Uri EndUri { get; private set; }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application with the provider name and\n        /// optional token object from this instance.\n        /// </summary>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        internal async Task<MobileServiceUser> LoginAsync()\n        {\n            string response = await this.LoginAsyncOverride();\n            if (!string.IsNullOrEmpty(response))\n            {\n                JToken authToken = JToken.Parse(response);\n\n                // Get the Mobile Services auth token and user data\n                this.Client.CurrentUser = new MobileServiceUser((string)authToken[\"user\"][\"userId\"]);\n                this.Client.CurrentUser.MobileServiceAuthenticationToken = (string)authToken[LoginAsyncAuthenticationTokenKey];\n            }\n\n            return this.Client.CurrentUser;\n        }\n\n        /// <summary>\n        /// Provides Login logic.\n        /// </summary>\n        /// <returns>\n        /// Task that will complete with the response string when the user has finished authentication.\n        /// </returns>\n        protected abstract Task<string> LoginAsyncOverride();\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Authentication/MobileServiceAuthenticationProvider.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Authentication providers supported by Mobile Services.\n    /// </summary>\n    public enum MobileServiceAuthenticationProvider\n    {\n        /// <summary>\n        /// Microsoft Account authentication provider.\n        /// </summary>\n        MicrosoftAccount,\n\n        /// <summary>\n        /// Google authentication provider.\n        /// </summary>\n        Google,\n\n        /// <summary>\n        /// Twitter authentication provider.\n        /// </summary>\n        Twitter,\n\n        /// <summary>\n        /// Facebook authentication provider.\n        /// </summary>\n        Facebook,\n\n        /// <summary>\n        /// Azure Active Directory authentication provider.\n        /// </summary>\n        WindowsAzureActiveDirectory,\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Authentication/MobileServiceTokenAuthentication.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class MobileServiceTokenAuthentication : MobileServiceAuthentication\n    {\n        /// <summary>\n        /// The token to send.\n        /// </summary>\n        private readonly JObject token;\n\n        /// <summary>\n        /// The <see cref=\"MobileServiceClient\"/> used by this authentication session.\n        /// </summary>\n        private readonly MobileServiceClient client;\n\n        /// <summary>\n        /// Instantiates a new instance of <see cref=\"MobileServiceTokenAuthentication\"/>.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The client.\n        /// </param>\n        /// <param name=\"provider\">\n        /// The authentication provider.\n        /// </param>\n        /// <param name=\"token\">\n        /// The token.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        public MobileServiceTokenAuthentication(MobileServiceClient client, string provider, JObject token, IDictionary<string, string> parameters)\n            : base(client, provider, parameters)\n        {\n            Debug.Assert(client != null, \"client should not be null.\");\n            Debug.Assert(token != null, \"token should not be null.\");\n\n            this.client = client;\n            this.token = token;\n        }\n\n        /// <summary>\n        /// Provides Login logic for an existing token.\n        /// </summary>\n        /// <returns>\n        /// Task that will complete with the response string when the user has finished authentication.\n        /// </returns>\n        protected override Task<string> LoginAsyncOverride()\n        {\n            string path = MobileServiceUrlBuilder.CombinePaths(MobileServiceAuthentication.LoginAsyncUriFragment, this.ProviderName);\n            string queryString = MobileServiceUrlBuilder.GetQueryString(this.Parameters);\n            string pathAndQuery = MobileServiceUrlBuilder.CombinePathAndQuery(path, queryString);\n            return client.HttpClient.RequestWithoutHandlersAsync(HttpMethod.Post, pathAndQuery, this.client.CurrentUser, token.ToString());\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Collections/MobileServiceCollection.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An asynchronous data source that can wrap the results of a Mobile\n    /// Services query in a way that's easily consumed by Xaml collection\n    /// controls like ListView, GridView or ListBox.\n    /// </summary>\n    /// <typeparam name=\"TTable\">Data source element type.</typeparam>\n    /// <typeparam name=\"TCollection\">Type of elements ending up in the collection.</typeparam>\n    /// <remarks>\n    /// Currently handles asynchronously loading the data, notifying the controls and paging. \n    /// Use the <see cref=\"MobileServiceCollection{T}\"/> class if the table and collection items\n    /// are of the same type.\n    /// </remarks>\n#pragma warning disable 618 // for implementing obsolete ITotalCountProvider\n    public class MobileServiceCollection<TTable, TCollection> :\n        ObservableCollection<TCollection>,\n        ITotalCountProvider,\n        IQueryResultEnumerable<TCollection>\n    {\n        private bool busy = false;\n\n        /// <summary>\n        /// The query that when evaluated will populate the data souce with\n        /// data.  We'll evaluate the query once per page while data\n        /// virtualizing.\n        /// </summary>\n        private IMobileServiceTableQuery<TTable> query = null;\n\n        /// <summary>\n        /// A selector function which will be appied to the data when it comes back from the server.\n        /// </summary>\n        protected Func<IEnumerable<TTable>, IEnumerable<TCollection>> selectorFunction;\n\n        /// <summary>\n        /// Numbers of items that will be retrieved per page. 0 means no paging.\n        /// </summary>\n        private int pageSize;\n\n        /// <summary>\n        /// Number of items already received from the server.\n        /// </summary>\n        private int itemsReceived;\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:IncrementalLoadingMobileServiceCollection{TTable, TCollection}\"/>\n        /// class.\n        /// </summary>\n        /// <param name=\"query\">\n        /// The data source's query which provides the data.\n        /// </param>\n        /// <param name=\"selector\">\n        /// A selector function to provide client side projections.\n        /// </param>\n        /// <param name=\"pageSize\">\n        /// The number of items requested per request.\n        /// </param>\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Usage\", \"CA2214:DoNotCallOverridableMethodsInConstructors\", Justification = \"Overridable method is only used for change notifications\")]\n        public MobileServiceCollection(IMobileServiceTableQuery<TTable> query, Func<IEnumerable<TTable>, IEnumerable<TCollection>> selector, int pageSize = 0)\n        {\n            if (query == null)\n            {\n                throw new ArgumentNullException(\"query\");\n            }\n            if (selector == null)\n            {\n                throw new ArgumentNullException(\"selector\");\n            }\n            if (pageSize < 0)\n            {\n                throw new ArgumentOutOfRangeException(\"pageSize\");\n            }\n\n            this.query = query;\n            MobileServiceTableQuery<TTable> tableQuery = query as MobileServiceTableQuery<TTable>;\n            if (tableQuery != null)\n            {\n                tableQuery.QueryProvider.Features = MobileServiceFeatures.TableCollection;\n            }\n\n            this.selectorFunction = selector;\n            this.pageSize = pageSize;\n\n            this.HasMoreItems = true;\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:IncrementalLoadingMobileServiceCollection{TTable, TCollection}\"/>\n        /// class.\n        /// </summary>\n        /// <param name=\"query\">\n        /// The data source's query which provides the data.\n        /// </param>\n        /// <param name=\"selector\">\n        /// A selector function to provide client side projections.\n        /// </param>\n        /// <param name=\"pageSize\">\n        /// The number of items requested per request.\n        /// </param>\n        public MobileServiceCollection(IMobileServiceTableQuery<TTable> query, Func<TTable, TCollection> selector, int pageSize = 0)\n            : this(query, ie => ie.Select(selector), pageSize) { }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:IncrementalLoadingMobileServiceCollection{TTable, TCollection}\"/>\n        /// class. This constructior should be used in cases where TTable and TCollection are the same type.\n        /// </summary>\n        /// <param name=\"query\">\n        /// The data source's query which provides the data.\n        /// </param>\n        /// <param name=\"pageSize\">\n        /// The number of items requested per request.\n        /// </param>\n        public MobileServiceCollection(IMobileServiceTableQuery<TTable> query, int pageSize = 0)\n            : this(query, ie => ie.Cast<TCollection>(), pageSize) { }\n\n        /// <summary>\n        /// The page size specified in the constructor.\n        /// </summary>\n        public int PageSize\n        {\n            get { return this.pageSize; }\n        }\n\n        /// <summary>\n        /// The total count for all the records that would have been\n        /// returned ignoring any take paging/limit clause specified by client\n        /// or server. Value is -1 if the query did not request a total count. \n        /// </summary>\n        private long totalCount = -1;\n\n        /// <summary>\n        /// Gets the total count for all the records that would have been\n        /// returned ignoring any take paging/limit clause specified by client\n        /// or server.\n        /// </summary>\n        public long TotalCount\n        {\n            get { return this.totalCount; }\n            private set\n            {\n                if (this.totalCount != value)\n                {\n                    this.totalCount = value;\n                    this.OnPropertyChanged();\n                }\n            }\n        }\n\n\n        /// <summary>\n        /// The link to next page of result that is returned in response headers.\n        /// </summary>\n        private string nextLink;\n\n        /// <summary>\n        /// Gets the link to next page of result that is returned in response headers.\n        /// </summary>\n        public string NextLink\n        {\n            get { return this.nextLink; }\n            private set\n            {\n                if (this.nextLink != value)\n                {\n                    this.nextLink = value;\n                    this.OnPropertyChanged();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Evaluates the query and adds the result to the collection.\n        /// </summary>\n        /// <param name=\"token\">A token to cancel the operation.</param>\n        /// <param name=\"query\">The query to evaluate.</param>\n        /// <returns>A task representing the ongoing operation.</returns>\n        protected async virtual Task<int> ProcessQueryAsync(CancellationToken token, IMobileServiceTableQuery<TTable> query)\n        {\n            // Invoke the query on the server and get our data\n            IEnumerable<TTable> items = await query.ToEnumerableAsync();\n\n            //check for cancellation\n            if (token.IsCancellationRequested)\n            {\n                throw new OperationCanceledException();\n            }\n\n            foreach (var item in this.PrepareDataForCollection(items))\n            {\n                this.Add(item);\n            }\n\n            var result = items as IQueryResultEnumerable<TTable>;\n            if (result != null)\n            {\n                this.TotalCount = result.TotalCount;\n                this.NextLink = result.NextLink;\n            }\n            return items.Count();\n        }\n\n        /// <summary>\n        /// Transforms the data from the query into data for the collection\n        /// using the provided selector function.\n        /// </summary>\n        /// <param name=\"items\">The items.</param>\n        /// <returns>The transformed data.</returns>\n        public virtual IEnumerable<TCollection> PrepareDataForCollection(IEnumerable<TTable> items)\n        {\n            return selectorFunction(items);\n        }\n\n        /// <summary>\n        /// Transforms one item into an item for the collection\n        /// using the provided selector function.\n        /// </summary>\n        /// <param name=\"item\">The item.</param>\n        /// <returns>The transformed item.</returns>\n        public TCollection PrepareDataForCollection(TTable item)\n        {\n            return selectorFunction(new TTable[] { item }).FirstOrDefault();\n        }\n\n        private bool hasMoreItems;\n        /// <summary>\n        /// Gets a value indicating whether there are more items that can be\n        /// loaded incrementally.\n        /// </summary>\n        public bool HasMoreItems\n        {\n            get { return this.hasMoreItems; }\n            set\n            {\n                if (this.hasMoreItems != value)\n                {\n                    this.hasMoreItems = value;\n                    this.OnPropertyChanged();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Occurs when <see cref=\"LoadMoreItemsAsync(int)\"/> \n        /// starting to load items. \n        /// </summary>\n        public event EventHandler LoadingItems;\n\n        /// <summary>\n        /// Occurs when finished loading items. Provides \n        /// <see cref=\"LoadingCompleteEventArgs\"/> with \n        /// how many items were loaded.  \n        /// </summary>\n        public event EventHandler<LoadingCompleteEventArgs> LoadingComplete;\n\n        /// <summary>\n        /// Load more items asynchronously.\n        /// Controls which support incremental loading on such as GridView on Windows 8 \n        /// call this method automatically.\n        /// In other cases you should call this method yourself.\n        /// </summary>\n        /// <param name=\"count\">\n        /// The number of items to load.\n        /// This parameter overrides the pageSize specified in the constructor.\n        /// </param>\n        /// <returns>The result of loading the items.</returns>\n        public Task<int> LoadMoreItemsAsync(int count = 0)\n        {\n            return this.LoadMoreItemsAsync(CancellationToken.None, count);\n        }\n\n        /// <summary>\n        /// Load more items asynchronously.\n        /// Controls which support incremental loading on such as GridView on Windows 8 \n        /// call this method automatically.\n        /// In other cases you should call this method yourself.\n        /// </summary>\n        /// <param name=\"token\">\n        /// The cancellation token to be used to cancel the task.\n        /// </param>\n        /// <param name=\"count\">\n        /// The number of items to load.\n        /// This parameter overrides the pageSize specified in the constructor.\n        /// </param>\n        /// <returns>The result of loading the items.</returns>\n        public async Task<int> LoadMoreItemsAsync(CancellationToken token, int count = 0)\n        {\n            if (busy)\n            {\n                throw new InvalidOperationException(\"Loading of more items already in process.\");\n            }\n\n            busy = true;\n\n            EventHandler loadingItems = LoadingItems;\n            if (loadingItems != null) { loadingItems(this, new EventArgs()); }\n\n            int results = 0;\n\n            try\n            {\n                //check for cancellation\n                if (token.IsCancellationRequested)\n                {\n                    throw new OperationCanceledException();\n                }\n\n                IMobileServiceTableQuery<TTable> query = this.query;\n                if (count == 0)\n                {\n                    count = PageSize;\n                }\n                //if still 0, PageSize was 0\n                if (count != 0)\n                {\n                    query = query.Skip(itemsReceived).Take(count);\n                }\n                else\n                {\n                    //disable paging if pagesize is 0\n                    this.HasMoreItems = false;\n                }\n\n                results = await this.ProcessQueryAsync(token, query);\n\n                if (results == 0)\n                {\n                    this.HasMoreItems = false;\n                }\n                else\n                {\n                    this.itemsReceived += results;\n                }\n                //safe conversion since there can't be negative results\n                return results;\n            }\n            catch\n            {\n                // in case of error don't automatically try again\n                this.HasMoreItems = false;\n                throw;\n            }\n            finally\n            {\n                busy = false;\n\n                EventHandler<LoadingCompleteEventArgs> loadingComplete = LoadingComplete;\n                if (loadingComplete != null) { loadingComplete(this, new LoadingCompleteEventArgs() { TotalItemsLoaded = results }); }\n            }\n        }\n\n        /// <summary>\n        /// Invokes the PropertyChanged event for the <paramref name=\"propertyName\"/> property.\n        /// Provides a way for subclasses to override the event invocation behavior.\n        /// </summary>\n        /// <param name=\"propertyName\">\n        /// The name of the property that has changed.\n        /// </param>\n        /// <remarks>\n        /// The CallerMemberName attribute will supply the value if no explicit value is provided.\n        /// For more info see http://msdn.microsoft.com/en-us/library/hh534540.aspx\n        /// We still need the null check, because you can still pass null as an explicit parameter.\n        /// </remarks>\n        protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null)\n        {\n            // this looks weird but propertyName must always been assigned to because of \n            // the CallerMemberName attribute\n            if (propertyName == null)\n            {\n                throw new ArgumentNullException(\"propertyName\");\n            }\n            this.OnPropertyChanged(new PropertyChangedEventArgs(propertyName));\n        }\n    }\n\n    /// <summary>\n    /// An asynchronous data source that can wrap the results of a Mobile\n    /// Services query in a way that's easily consumed by Xaml collection\n    /// controls like ListView, GridView or ListBox.\n    /// </summary>\n    /// <typeparam name=\"T\">Data source and collection element type.</typeparam>\n    /// <remarks>\n    /// This currently handles asynchronously loading the data, notifying the \n    /// controls and paging.\n    /// </remarks>\n    public class MobileServiceCollection<T> : MobileServiceCollection<T, T>\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:IncrementalLoadingMobileServiceCollection{T}\"/> class.\n        /// </summary>\n        /// <param name=\"query\">\n        /// The data source's query which provides the data.\n        /// </param>\n        /// <param name=\"pageSize\">\n        /// The number of items requested per request.\n        /// </param>\n        public MobileServiceCollection(IMobileServiceTableQuery<T> query, int pageSize = 0)\n            : base(query, (Func<IEnumerable<T>, IEnumerable<T>>)(t => t), pageSize)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Collections/MobileServiceCollectionEventArgs.cs",
    "content": "﻿using System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Represents the loaded status changed event arguments.\n    /// </summary>\n    public class LoadingCompleteEventArgs : EventArgs\n    {\n        /// <summary>\n        /// Provides how many items were loaded.\n        /// </summary>\n        public int TotalItemsLoaded { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/EnumValueAttribute.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Reflection;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Attribute used to associate a name to an enum value.\n    /// </summary>\n    class EnumValueAttribute : Attribute\n    {\n        /// <summary>\n        /// The string associated to the enum value.\n        /// </summary>\n        public string Value { private set; get; }\n\n        public EnumValueAttribute(string value)\n        {\n            this.Value = value;\n        }\n\n        /// <summary>\n        /// Returns the associated string for a specific enum value.\n        /// </summary>\n        /// <param name=\"value\">The enum value.</param>\n        /// <returns>The string associated with the value, or <code>null</code> if not found.</returns>\n        internal static string GetValue<TEnum>(TEnum value)\n        {\n            FieldInfo fi = typeof(MobileServiceFeatures).GetTypeInfo().GetDeclaredField(value.ToString());\n            string result = null;\n            if (fi != null)\n            {\n                EnumValueAttribute eva = fi.GetCustomAttribute<EnumValueAttribute>();\n                if (eva != null)\n                {\n                    result = eva.Value;\n                }\n            }\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Exceptions/MobileServiceConflictException.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides details of http response with status code of 'Conflict'\n    /// </summary>\n    public class MobileServiceConflictException : MobileServiceInvalidOperationException\n    {\n        /// <summary>\n        /// Initializes a new instance of the\n        /// <see cref=\"MobileServiceConflictException\"/> class.\n        /// </summary>\n        /// <param name=\"source\">\n        /// The inner exception.\n        /// </param>\n        /// <param name=\"value\">\n        /// The current instance from the server that the conflict occurred for.\n        /// </param>\n        public MobileServiceConflictException(MobileServiceInvalidOperationException source, JObject value)\n            : base(source.Message, source.Request, source.Response, value)\n        {\n        }\n    }\n\n    /// <summary>\n    /// Provides details of http response with status code of 'Conflict'\n    /// </summary>\n    public class MobileServiceConflictException<T> : MobileServiceConflictException\n    {\n        /// <summary>\n        /// Initializes a new instance of the\n        /// <see cref=\"MobileServiceConflictException\"/> class.\n        /// </summary>\n        /// <param name=\"source\">\n        /// The inner exception.\n        /// </param>\n        /// <param name=\"item\">\n        /// The current instance from the server that the conflict occurred for.\n        /// </param>\n        public MobileServiceConflictException(MobileServiceInvalidOperationException source, T item)\n            : base(source, source.Value)\n        {\n            this.Item = item;\n        }\n\n        /// <summary>\n        /// The current instance from the server that the precondition failed for.\n        /// </summary>\n        public T Item { get; private set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Exceptions/MobileServiceInvalidOperationException.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Net.Http;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides additional details of an invalid operation specific to a\n    /// Mobile Service.\n    /// </summary>\n    public class MobileServiceInvalidOperationException : InvalidOperationException\n    {\n        /// <summary>\n        /// Initializes a new instance of the\n        /// MobileServiceInvalidOperationException class.\n        /// </summary>\n        /// <param name=\"message\">\n        /// The exception message.\n        /// </param>\n        /// <param name=\"request\">\n        /// The originating service request.\n        /// </param>\n        /// <param name=\"response\">\n        /// The returned service response.\n        /// </param>\n        public MobileServiceInvalidOperationException(string message, HttpRequestMessage request, HttpResponseMessage response)\n            : this(message, request, response, null)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the\n        /// MobileServiceInvalidOperationException class.\n        /// </summary>\n        /// <param name=\"message\">\n        /// The exception message.\n        /// </param>\n        /// <param name=\"request\">\n        /// The originating service request.\n        /// </param>\n        /// <param name=\"response\">\n        /// The returned service response.\n        /// </param>\n        /// <param name=\"value\">\n        /// Server response deserialized as JObject.\n        /// </param>\n        public MobileServiceInvalidOperationException(string message, HttpRequestMessage request, HttpResponseMessage response, JObject value)\n            : base(message)\n        {\n            this.Request = request;\n            this.Response = response;\n            this.Value = value;\n        }\n\n        /// <summary>\n        /// Gets the originating service request.\n        /// </summary>\n        public HttpRequestMessage Request { get; private set; }\n\n        /// <summary>\n        /// Gets the returned service response.\n        /// </summary>\n        public HttpResponseMessage Response { get; private set; }\n\n        /// <summary>\n        /// Server response deserialized as JObject.\n        /// </summary>\n        public JObject Value { get; private set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Exceptions/MobileServiceLocalStoreException.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Provides additional details of failed sync store operation\n    /// </summary>\n    public class MobileServiceLocalStoreException: Exception\n    {\n        /// <summary>\n        /// Initializes an instance of <see cref=\"MobileServiceLocalStoreException\"/>\n        /// </summary>\n        /// <param name=\"message\">The error message that explains the reason for the exception.</param>\n        /// <param name=\"innerException\"> The exception that is the cause of the current exception, or a null reference</param>\n        public MobileServiceLocalStoreException(string message, Exception innerException): base(message, innerException)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Exceptions/MobileServiceODataException.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Exception type representing exceptions in parsing of OData queries.\n    /// </summary>\n    public class MobileServiceODataException : InvalidOperationException\n    {\n        /// <summary>\n        /// The position in string where error exists\n        /// </summary>\n        public int ErrorPosition { get; private set; }\n\n        /// <summary>Creates a new instance of the <see cref=\"T:Microsoft.WindowsAzure.MobileService.MobileServiceODataException\" /> class.</summary>\n        public MobileServiceODataException() : base()\n        {\n        }\n        /// <summary>Creates a new instance of the <see cref=\"T:Microsoft.WindowsAzure.MobileService.MobileServiceODataException\" /> class with an error message.</summary>\n        /// <param name=\"message\">The plain text error message for this exception.</param>\n        /// <param name=\"errorPos\">The position in string where error exists.</param>\n        public MobileServiceODataException(string message, int errorPos)\n            : this(message, errorPos, null)\n        {\n        }\n        \n        /// <summary>Creates a new instance of the <see cref=\"T:Microsoft.WindowsAzure.MobileService.MobileServiceODataException\" /> class with an error message and an inner exception.</summary>\n        /// <param name=\"message\">The plain text error message for this exception.</param>\n        /// <param name=\"errorPos\">The position in string where error exists.</param>\n        /// <param name=\"innerException\">The inner exception that is the cause of this exception to be thrown.</param>\n        public MobileServiceODataException(string message, int errorPos, Exception innerException)\n            : base(message, innerException)\n        {\n            this.ErrorPosition = errorPos;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Exceptions/MobileServicePreconditionFailedException.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides details of http response with status code of 'Precondition Failed'\n    /// </summary>\n    public class MobileServicePreconditionFailedException : MobileServiceInvalidOperationException\n    {\n        /// <summary>\n        /// Initializes a new instance of the\n        /// <see cref=\"MobileServicePreconditionFailedException\"/> class.\n        /// </summary>\n        /// <param name=\"source\">\n        /// The inner exception.\n        /// </param>\n        /// <param name=\"value\">\n        /// The current instance from the server that the precondition failed for.\n        /// </param>\n        public MobileServicePreconditionFailedException(MobileServiceInvalidOperationException source, JObject value)\n            : base(source.Message, source.Request, source.Response, value)\n        {\n        }\n    }\n\n    /// <summary>\n    /// Provides details of http response with status code of 'Precondition Failed'\n    /// </summary>\n    public class MobileServicePreconditionFailedException<T> : MobileServicePreconditionFailedException\n    {\n        /// <summary>\n        /// Initializes a new instance of the\n        /// <see cref=\"MobileServicePreconditionFailedException\"/> class.\n        /// </summary>\n        /// <param name=\"source\">\n        /// The inner exception.\n        /// </param>\n        /// <param name=\"item\">\n        /// The current instance from the server that the precondition failed for.\n        /// </param>\n        public MobileServicePreconditionFailedException(MobileServiceInvalidOperationException source, T item)\n            : base(source, source.Value)\n        {\n            this.Item = item;\n        }\n\n        /// <summary>\n        /// The current instance from the server that the precondition failed for.\n        /// </summary>\n        public T Item { get; private set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Exceptions/MobileServicePushAbortException.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Exception thrown from table operation when push is aborted\n    /// </summary>\n    internal class MobileServicePushAbortException : Exception\n    {\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Exceptions/MobileServicePushFailedException.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// An exception thrown when push does not complete successfully.\n    /// </summary>\n    public class MobileServicePushFailedException : Exception\n    {\n        /// <summary>\n        /// Result of push operation\n        /// </summary>\n        public MobileServicePushCompletionResult PushResult { get; private set; }\n\n        /// <summary>\n        /// Initializes a new instance of <see cref=\"MobileServicePushFailedException\"/>\n        /// </summary>\n        /// <param name=\"pushResult\">Result of push operation.</param>\n        /// <param name=\"innerException\">Inner exception that caused the push to fail.</param>\n        public MobileServicePushFailedException(MobileServicePushCompletionResult pushResult, Exception innerException)\n            : base(\"Push operation has failed. See the PushResult for details.\", innerException)\n        {\n            this.PushResult = pushResult;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Extensions/ExceptionExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal static class ExceptionExtensions\n    {\n        public static bool IsNetworkError(this Exception ex)\n        {\n            return ex is HttpRequestException;\n        }\n\n        public static bool IsAuthenticationError(this Exception ex)\n        {\n            var ioEx = ex as MobileServiceInvalidOperationException;\n            bool result = ioEx != null && ioEx.Response != null && ioEx.Response.StatusCode == HttpStatusCode.Unauthorized;\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Extensions/IDictionaryExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal static class IDictionaryExtensions\n    {\n        public static IDictionary<TKey, TValue> Add<TKey,TValue>(this IDictionary<TKey, TValue> thisDictionary, IDictionary<TKey, TValue> values)\n        {\n            foreach (var value in values)\n            {\n                thisDictionary.Add(value);\n            }\n            return thisDictionary;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Extensions/JTokenExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal static class JTokenExtensions\n    {\n        /// <summary>\n        /// Determines if a JToken is a valid item\n        /// </summary>\n        /// <param name=\"item\">The jtoken to check.</param>\n        /// <returns>True if it is a valid item, False otherwise.</returns>\n        public static bool IsValidItem(this JToken item)\n        {\n            var obj = item as JObject;\n            return obj != null && HasId(obj);\n        }\n\n        /// <summary>\n        /// If specified JToken is a valid item then returns it otherwise returns null\n        /// </summary>\n        /// <param name=\"item\">The jtoken to check.</param>\n        /// <returns><paramref name=\"item\"/> as JObject if it is valid, othewise null.</returns>\n        public static JObject ValidItemOrNull(this JToken item)\n        {\n            return IsValidItem(item) ? (JObject)item : null;\n        }\n\n        private static bool HasId(JObject obj)\n        {\n            Debug.Assert(obj != null);\n\n            var id = obj.Value<string>(MobileServiceSystemColumns.Id);\n            return id != null;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Extensions/MobileServiceClientExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Diagnostics.CodeAnalysis;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    ///  Provides extension methods on <see cref=\"MobileServiceClient\"/>.\n    /// </summary>\n    public static class MobileServiceClientExtensions\n    {\n        /// <summary>\n        /// Name of the  JSON member in the token object that stores the\n        /// authentication token fo Microsoft Account.\n        /// </summary>\n        private const string MicrosoftAccountLoginAsyncAuthenticationTokenKey = \"authenticationToken\";\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a Microsoft\n        /// Account authentication token.\n        /// </summary>\n        /// <param name=\"thisClient\">\n        /// The client with which to login.\n        /// </param>\n        /// <param name=\"authenticationToken\">\n        /// Live SDK session authentication token.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1726:UsePreferredTerms\", MessageId = \"Login\", Justification = \"Login is preferred by design\")]\n        public static Task<MobileServiceUser> LoginWithMicrosoftAccountAsync(this MobileServiceClient thisClient, string authenticationToken)\n        {\n            JObject token = new JObject();\n            token[MicrosoftAccountLoginAsyncAuthenticationTokenKey] = authenticationToken;\n            MobileServiceTokenAuthentication tokenAuth = new MobileServiceTokenAuthentication(thisClient,\n                MobileServiceAuthenticationProvider.MicrosoftAccount.ToString(),\n                token, parameters: null);\n\n            return tokenAuth.LoginAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Extensions/MobileServiceCollectionExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides extension methods on <see cref=\"T:IMobileServiceTableQuery`1{T}\"/>\n    /// and <see cref=\"T:IMobileServiceTable`1{T}\"/> to wrap them in a collection.\n    /// </summary>\n    public static class MobileServiceCollectionExtensions\n    {\n        /// <summary>\n        /// Create a new collection based on the query.\n        /// </summary>\n        /// <param name=\"query\">\n        /// The query to evaluate for data.\n        /// </param>\n        /// <param name=\"pageSize\">\n        /// Optional page size.\n        /// </param>\n        /// <returns>The collection.</returns>\n        public async static Task<MobileServiceCollection<TTable, TTable>> ToCollectionAsync<TTable>(this IMobileServiceTableQuery<TTable> query, int pageSize = 0)\n        {\n            var collection = new MobileServiceCollection<TTable, TTable>(query, pageSize);\n            await collection.LoadMoreItemsAsync();\n            return collection;\n        }\n\n        /// <summary>\n        /// Create a new collection based on the table.\n        /// </summary>\n        /// <param name=\"table\">\n        /// The table from which to create the new collection. \n        /// </param>\n        /// <param name=\"pageSize\">\n        /// Optional page size.\n        /// </param>\n        /// <returns>The collection.</returns>\n        public static Task<MobileServiceCollection<TTable, TTable>> ToCollectionAsync<TTable>(this IMobileServiceTable<TTable> table, int pageSize = 0)\n        {\n            return table.CreateQuery().ToCollectionAsync(pageSize);\n        }\n\n        /// <summary>\n        /// Create a new collection based on the local table.\n        /// </summary>\n        /// <param name=\"table\">\n        /// The local table from which to create the new collection. \n        /// </param>\n        /// <param name=\"pageSize\">\n        /// Optional page size.\n        /// </param>\n        /// <returns>The collection.</returns>\n        public static Task<MobileServiceCollection<TTable, TTable>> ToCollectionAsync<TTable>(this IMobileServiceSyncTable<TTable> table, int pageSize = 0)\n        {\n            return table.CreateQuery().ToCollectionAsync(pageSize);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Extensions/MobileServiceLocalStoreExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    ///  Provides extension methods on <see cref=\"IMobileServiceLocalStore\"/>.\n    /// </summary>\n    internal static class MobileServiceLocalStoreExtensions\n    {\n        /// <summary>\n        /// Updates or inserts data in local table.\n        /// </summary>\n        /// <param name=\"store\">Instance of <see cref=\"IMobileServiceLocalStore\"/></param>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"item\">Item to be inserted.</param>\n        /// <param name=\"fromServer\"><code>true</code> if the call is made based on data coming from the server e.g. in a pull operation; <code>false</code> if the call is made by the client, such as insert or update calls on an <see cref=\"IMobileServiceSyncTable\"/>.</param>\n        /// <returns>A task that completes when item has been upserted in local table.</returns>\n        public static Task UpsertAsync(this IMobileServiceLocalStore store, string tableName, JObject item, bool fromServer)\n        {\n            return store.UpsertAsync(tableName, new[] { item }, fromServer);\n        }\n\n        /// <summary>\n        /// Deletes an item with the specified id in the local table.\n        /// </summary>\n        /// <param name=\"store\">Instance of <see cref=\"IMobileServiceLocalStore\"/></param>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"id\">Id for the object to be deleted.</param>\n        /// <returns>A task that compltes when delete has been executed on local table.</returns>\n        public static Task DeleteAsync(this IMobileServiceLocalStore store, string tableName, string id)\n        {\n            return store.DeleteAsync(tableName, new[] { id });\n        }\n\n        /// <summary>\n        /// Counts all the items in a local table\n        /// </summary>\n        /// <param name=\"store\">Instance of <see cref=\"IMobileServiceLocalStore\"/></param>\n        /// <param name=\"tableName\">Name of the table</param>\n        /// <returns>Task that will complete with count of items.</returns>\n        public async static Task<long> CountAsync(this IMobileServiceLocalStore store, string tableName)\n        {\n            var query = new MobileServiceTableQueryDescription(MobileServiceLocalSystemTables.OperationQueue);\n            return await CountAsync(store, query);\n        }\n\n        /// <summary>\n        /// Counts all the items returned from the query\n        /// </summary>\n        /// <param name=\"store\">An instance of <see cref=\"IMobileServiceLocalStore\"/></param>\n        /// <param name=\"query\">An instance of <see cref=\"MobileServiceTableQueryDescription\"/></param>\n        /// <returns>Task that will complete with count of items.</returns>\n        public static async Task<long> CountAsync(this IMobileServiceLocalStore store, MobileServiceTableQueryDescription query)\n        {\n            query.Top = 0;\n            query.IncludeTotalCount = true;\n\n            QueryResult result = await store.QueryAsync(query);\n            return result.TotalCount;\n        }\n\n        /// <summary>\n        /// Executes the query on local store and returns the parsed result\n        /// </summary>\n        /// <param name=\"store\">An instance of <see cref=\"IMobileServiceLocalStore\"/></param>\n        /// <param name=\"query\">An instance of <see cref=\"MobileServiceTableQueryDescription\"/></param>\n        /// <returns>Task that will complete with the parsed result of the query.</returns>\n        public static async Task<QueryResult> QueryAsync(this IMobileServiceLocalStore store, MobileServiceTableQueryDescription query)\n        {\n            return QueryResult.Parse(await store.ReadAsync(query), null, validate: true);\n        }\n\n        /// <summary>\n        /// Executes the query on local store and returns the first or default item from parsed result\n        /// </summary>\n        /// <param name=\"store\">An instance of <see cref=\"IMobileServiceLocalStore\"/></param>\n        /// <param name=\"query\">An instance of <see cref=\"MobileServiceTableQueryDescription\"/></param>\n        /// <returns>Task that will complete with the first or default item from parsed result of the query.</returns>\n        public static async Task<JObject> FirstOrDefault(this IMobileServiceLocalStore store, MobileServiceTableQueryDescription query)\n        {\n            QueryResult result = await store.QueryAsync(query);\n            return result.Values.FirstOrDefault() as JObject;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Extensions/MobileServiceSyncContextExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides extension methods on <see cref=\"IMobileServiceSyncContext\"/>\n    /// </summary>\n    public static class MobileServiceSyncContextExtensions\n    {\n        /// <summary>\n        /// Replays all pending local operations against the remote tables.\n        /// </summary>\n        public static Task PushAsync(this IMobileServiceSyncContext context)\n        {\n            return context.PushAsync(CancellationToken.None);\n        }\n\n        /// <summary>\n        /// Initializes the sync context.\n        /// </summary>\n        /// <param name=\"context\">An instance of <see cref=\"IMobileServiceSyncContext\"/>.</param>\n        /// <param name=\"store\">An instance of <see cref=\"IMobileServiceLocalStore\"/>.</param>\n        public static Task InitializeAsync(this IMobileServiceSyncContext context, IMobileServiceLocalStore store)\n        {\n            return context.InitializeAsync(store, new MobileServiceSyncHandler());\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Extensions/MobileServiceSyncTableExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides extension methods on <see cref=\"IMobileServiceSyncTable\"/>\n    /// </summary>\n    public static class MobileServiceSyncTableExtensions\n    {\n        /// <summary>\n        /// Pulls all items that match the given query from the associated remote table. Supports incremental sync.\n        /// </summary>\n        /// <param name=\"table\">The instance of table to execute pull on.</param>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter enables incremental sync whenever the same key is used again. Must be 25 characters or less and contain only alphanumeric characters, dash, and underscore.\n        /// </param>\n        /// <param name=\"query\">\n        /// An OData query that determines which items to \n        /// pull from the remote table.\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        /// <exception cref=\"System.ArgumentException\">\n        /// Thrown when <paramref name=\"queryId\"/> does not match the regular expression <value>[a-zA-Z][a-zA-Z0-9_-]{0,24}</value>.\n        /// </exception>\n        public static Task PullAsync(this IMobileServiceSyncTable table, string queryId, string query)\n        {\n            return table.PullAsync(queryId, query, null, CancellationToken.None, pullOptions: null);\n        }\n\n        /// <summary>\n        /// Pulls all items that match the given query from the associated remote table. Supports incremental sync.\n        /// </summary>\n        /// <param name=\"table\">The instance of table to execute pull on.</param>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter enables incremental sync whenever the same key is used again. Must be 25 characters or less and contain only alphanumeric characters, dash, and underscore.\n        /// </param>\n        /// <param name=\"query\">\n        /// An OData query that determines which items to \n        /// pull from the remote table.\n        /// </param>\n        /// <param name=\"pullOptions\">\n        /// PullOptions that determine how to pull data from the remote table\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        /// <exception cref=\"System.ArgumentException\">\n        /// Thrown when <paramref name=\"queryId\"/> does not match the regular expression <value>[a-zA-Z][a-zA-Z0-9_-]{0,24}</value>.\n        /// </exception>\n        public static Task PullAsync(this IMobileServiceSyncTable table, string queryId, string query, PullOptions pullOptions)\n        {\n            return table.PullAsync(queryId, query, null, CancellationToken.None, pullOptions);\n        }\n\n\n        /// <summary>\n        /// Pulls all items that match the given query from the associated remote table. Supports incremental sync.\n        /// </summary>\n        /// <param name=\"table\">The instance of table to execute pull on.</param>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter enables incremental sync whenever the same key is used again. Must be 25 characters or less and contain only alphanumeric characters, dash, and underscore.\n        /// </param>\n        /// <param name=\"query\">\n        /// An OData query that determines which items to \n        /// pull from the remote table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        /// <exception cref=\"System.ArgumentException\">\n        /// Thrown when <paramref name=\"queryId\"/> does not match the regular expression <value>[a-zA-Z][a-zA-Z0-9_-]{0,24}</value>.\n        /// </exception>\n        public static Task PullAsync(this IMobileServiceSyncTable table, string queryId, string query, IDictionary<string, string> parameters, CancellationToken cancellationToken)\n        {\n            return table.PullAsync(queryId, query, parameters, true, cancellationToken: cancellationToken, pullOptions: null);\n        }\n\n        /// <summary>\n        /// Pulls all items that match the given query from the associated remote table. Supports incremental sync.\n        /// </summary>\n        /// <param name=\"table\">The instance of table to execute pull on.</param>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter enables incremental sync whenever the same key is used again. Must be 25 characters or less and contain only alphanumeric characters, dash, and underscore.\n        /// </param>\n        /// <param name=\"query\">\n        /// An OData query that determines which items to \n        /// pull from the remote table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe\n        /// </param>\n        /// <param name=\"pullOptions\">\n        /// PullOptions that determine how to pull data from the remote table\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        /// <exception cref=\"System.ArgumentException\">\n        /// Thrown when <paramref name=\"queryId\"/> does not match the regular expression <value>[a-zA-Z][a-zA-Z0-9_-]{0,24}</value>.\n        /// </exception>\n        public static Task PullAsync(this IMobileServiceSyncTable table, string queryId, string query, IDictionary<string, string> parameters, CancellationToken cancellationToken, PullOptions pullOptions)\n        {\n            return table.PullAsync(queryId, query, parameters, true, cancellationToken: cancellationToken, pullOptions: pullOptions);\n        }\n\n        /// <summary>\n        /// Pulls all items that match the given query from the associated remote table. Supports incremental sync.\n        /// </summary>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter enables incremental sync whenever the same key is used again.\n        /// </param>\n        /// <param name=\"query\">\n        /// An OData query that determines which items to \n        /// pull from the remote table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <param name=\"pushOtherTables\">\n        /// Push other tables if this table is dirty.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        public static Task PullAsync(this IMobileServiceSyncTable table, string queryId, string query,\n            IDictionary<string, string> parameters, bool pushOtherTables, CancellationToken cancellationToken)\n        {\n            return table.PullAsync(queryId, query, parameters, pushOtherTables, cancellationToken, pullOptions:null);\n        }\n        \n        /// <summary>\n        /// Pulls all items that match the given query from the associated remote table.\n        /// </summary>\n        /// <param name=\"table\">The instance of table to execute pull on.</param>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter enables incremental sync whenever the same key is used again. Must be 25 characters or less and contain only alphanumeric characters, dash, and underscore.\n        /// </param>\n        /// <param name=\"query\">\n        /// An OData query that determines which items to \n        /// pull from the remote table.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        /// <exception cref=\"System.ArgumentException\">\n        /// Thrown when <paramref name=\"queryId\"/> does not match the regular expression <value>[a-zA-Z][a-zA-Z0-9_-]{0,24}</value>.\n        /// </exception>\n        public static Task PullAsync<T, U>(this IMobileServiceSyncTable<T> table, string queryId, IMobileServiceTableQuery<U> query, CancellationToken cancellationToken)\n        {\n            return table.PullAsync(queryId, query, pushOtherTables: true, cancellationToken: cancellationToken, pullOptions: null);\n        }\n\n        /// <summary>\n        /// Pulls all items that match the given query from the associated remote table.\n        /// </summary>\n        /// <param name=\"table\">The instance of table to execute pull on.</param>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter enables incremental sync whenever the same key is used again. Must be 25 characters or less and contain only alphanumeric characters, dash, and underscore.\n        /// </param>\n        /// <param name=\"query\">\n        /// An OData query that determines which items to \n        /// pull from the remote table.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe\n        /// </param>\n        /// <param name=\"pullOptions\">\n        /// PullOptions that determine how to pull data from the remote table\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        /// <exception cref=\"System.ArgumentException\">\n        /// Thrown when <paramref name=\"queryId\"/> does not match the regular expression <value>[a-zA-Z][a-zA-Z0-9_-]{0,24}</value>.\n        /// </exception>\n        public static Task PullAsync<T, U>(this IMobileServiceSyncTable<T> table, string queryId, IMobileServiceTableQuery<U> query, CancellationToken cancellationToken, PullOptions pullOptions)\n        {\n            return table.PullAsync(queryId, query, pushOtherTables: true, cancellationToken: cancellationToken, pullOptions: pullOptions);\n        }\n\n        /// <summary>\n        /// Pulls all items that match the given query\n        /// from the associated remote table.\n        /// </summary>\n        /// <param name=\"table\">The instance of table to execute pull on.</param>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter enables incremental sync whenever the same key is used again. Must be 25 characters or less and contain only alphanumeric characters, dash, and underscore.\n        /// </param>\n        /// <param name=\"query\">\n        /// An OData query that determines which items to \n        /// pull from the remote table.\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        /// <exception cref=\"System.ArgumentException\">\n        /// Thrown when <paramref name=\"queryId\"/> does not match the regular expression <value>[a-zA-Z][a-zA-Z0-9_-]{0,24}</value>.\n        /// </exception>\n        public static Task PullAsync<T, U>(this IMobileServiceSyncTable<T> table, string queryId, IMobileServiceTableQuery<U> query)\n        {\n            return table.PullAsync(queryId, query, cancellationToken: CancellationToken.None, pullOptions: null);\n        }\n\n        /// <summary>\n        /// Pulls all items that match the given query\n        /// from the associated remote table.\n        /// </summary>\n        /// <param name=\"table\">The instance of table to execute pull on.</param>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter enables incremental sync whenever the same key is used again. Must be 25 characters or less and contain only alphanumeric characters, dash, and underscore.\n        /// </param>\n        /// <param name=\"query\">\n        /// An OData query that determines which items to \n        /// pull from the remote table.\n        /// </param>\n        /// <param name=\"pullOptions\">\n        /// PullOptions that determine how to pull data from the remote table\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        /// <exception cref=\"System.ArgumentException\">\n        /// Thrown when <paramref name=\"queryId\"/> does not match the regular expression <value>[a-zA-Z][a-zA-Z0-9_-]{0,24}</value>.\n        /// </exception>\n        public static Task PullAsync<T, U>(this IMobileServiceSyncTable<T> table, string queryId, IMobileServiceTableQuery<U> query, PullOptions pullOptions)\n        {\n            return table.PullAsync(queryId, query, cancellationToken: CancellationToken.None, pullOptions: pullOptions);\n        }\n\n        /// <summary>\n        /// Pulls all items that match the given query from the associated remote table.\n        /// </summary>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter enables incremental sync whenever the same key is used again.\n        /// </param>\n        /// <param name=\"query\">\n        /// An OData query that determines which items to \n        /// pull from the remote table.\n        /// </param>\n        /// <param name=\"pushOtherTables\">\n        /// Push other tables if this table is dirty\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        public static Task PullAsync<T, U>(this IMobileServiceSyncTable<T> table, string queryId,\n            IMobileServiceTableQuery<U> query, bool pushOtherTables, CancellationToken cancellationToken)\n        {\n            return table.PullAsync(queryId, query, pushOtherTables, cancellationToken, pullOptions: null);\n        }\n\n        /// <summary>\n        /// Deletes all the items in local table\n        /// </summary>\n        /// <param name=\"table\">The instance of table to execute purge on.</param>\n        /// <returns>A task that completes when purge operation has finished.</returns>\n        public static Task PurgeAsync(this IMobileServiceSyncTable table)\n        {\n            return table.PurgeAsync(null, null, false, CancellationToken.None);\n        }\n\n        /// <summary>\n        /// Deletes all the items in local table\n        /// </summary>\n        /// <param name=\"table\">The instance of table to execute purge on.</param>\n        /// <param name=\"force\">Force the purge by discarding the pending operations.</param>\n        /// <returns>A task that completes when purge operation has finished.</returns>\n        public static Task PurgeAsync(this IMobileServiceSyncTable table, bool force)\n        {\n            return table.PurgeAsync(null, null, force, CancellationToken.None);\n        }\n\n        /// <summary>\n        /// Deletes all the items in local table that match the query.\n        /// </summary>\n        /// <param name=\"table\">The instance of table to execute purge on.</param>\n        /// <param name=\"query\">An OData query that determines which items to delete.</param>\n        /// <returns>A task that completes when purge operation has finished.</returns>\n        public static Task PurgeAsync(this IMobileServiceSyncTable table, string query)\n        {\n            return table.PurgeAsync(null, query, false, CancellationToken.None);\n        }\n\n\n        /// <summary>\n        /// Deletes all the items in local table that match the query.\n        /// </summary>\n        /// <param name=\"table\">The instance of table to execute purge on.</param>\n        /// <param name=\"query\">An OData query that determines which items to delete.</param>\n        /// <returns>A task that completes when purge operation has finished.</returns>\n        public static Task PurgeAsync<T, U>(this IMobileServiceSyncTable<T> table, IMobileServiceTableQuery<U> query)\n        {\n            return table.PurgeAsync(null, query, CancellationToken.None);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Extensions/MobileServiceTableExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides extension methods on <see cref=\"IMobileServiceTable\"/>\n    /// </summary>\n    public static class MobileServiceTableExtensions\n    {\n        /// <summary>\n        /// Executes a query against the table.\n        /// </summary>\n        /// <param name=\"table\">\n        /// The instance of table to read from.\n        /// </param>\n        /// <param name=\"query\">\n        /// A query to execute.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will return with results when the query finishes.\n        /// </returns>\n        public static Task<JToken> ReadAsync(this IMobileServiceTable table, string query, IDictionary<string, string> parameters)\n        {\n            return table.ReadAsync(query, parameters, wrapResult: false);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Extensions/PlatformInformationExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    public static class PlatformInformationExtensions\n    {\n        /// <summary>\n        /// Returns the version set in the <see cref=\"AssemblyFileVersionAttribute\"/> set in the assembly\n        /// containing this <see cref=\"IPlatformInformation\"/> implementation.\n        /// </summary>\n        /// <param name=\"platformInformation\"></param>\n        /// <returns>The version set in the </returns>\n        internal static string GetVersionFromAssemblyFileVersion(this IPlatformInformation platformInformation)\n        {\n            var attribute = platformInformation.GetType().GetTypeInfo().Assembly\n                .GetCustomAttributes(typeof(AssemblyFileVersionAttribute)).FirstOrDefault() as AssemblyFileVersionAttribute;\n\n            return attribute != null ? attribute.Version : string.Empty;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Extensions/StringExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Globalization;\nusing System.IO;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace System\n{\n    internal static class StringExtensions\n    {\n        public static string FormatInvariant(this string format, params object[] args)\n        {\n            return string.Format(CultureInfo.InvariantCulture, format, args);\n        }\n\n        /// <summary>\n        /// Parses the content into a JToken.\n        /// If the content is null or empty, null will be returned.\n        /// </summary>\n        /// <param name=\"content\">The content to parse.</param>\n        /// <param name=\"settings\">The serializer settings used for parsing the content.</param>\n        /// <returns>A JToken containing the content or null.</returns>\n        public static JToken ParseToJToken(this string content, JsonSerializerSettings settings)\n        {\n            if (String.IsNullOrEmpty(content))\n            {\n                return null;\n            }\n            return JsonConvert.DeserializeObject<JToken>(content, settings);            \n        }\n    }\n}\n\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Extensions/TypeExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Reflection;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal static class TypeExtensions\n    {\n        private static Type nullableType = typeof(Nullable<>);\n\n        /// <summary>\n        /// Returns the underlying type in case of a Nullable.\n        /// </summary>\n        /// <param name=\"thisType\"></param>\n        /// <returns></returns>\n        public static Type UnwrapNullable(this Type thisType)\n        {\n            return thisType.GetTypeInfo().IsGenericType && thisType.GetGenericTypeDefinition() == nullableType\n                ?\n                Nullable.GetUnderlyingType(thisType)\n                :\n                thisType;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Http/HttpUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal static class HttpUtility\n    {\n\n        /// <summary>\n        /// Tries to parse the query as relative or absolute uri\n        /// </summary>\n        /// <param name=\"applicationUri\">The application uri to use as base</param>\n        /// <param name=\"query\">The query string that may be relative path starting with slash or absolute uri</param>\n        /// <param name=\"uri\">The uri in case it was relative path or absolute uri</param>\n        /// <param name=\"absolute\">Returns true if the uri was absolute uri</param>\n        /// <returns>True if it was relative or absolute uri, False otherwise</returns>\n        public static bool TryParseQueryUri(Uri applicationUri, string query, out Uri uri, out bool absolute)\n        {\n            if (query.StartsWith(\"/\") && Uri.TryCreate(applicationUri, query, out uri))\n            {\n                absolute = false;\n                return true;\n            }\n            else if (Uri.TryCreate(query, UriKind.Absolute, out uri))\n            {\n                if (uri.Host != applicationUri.Host)\n                {\n                    throw new ArgumentException(\"The query uri must be on the same host as the Mobile Service.\");\n                }\n\n                absolute = true;\n                return true;\n            }\n            else\n            {\n                absolute = false;\n                return false;\n            }\n        }\n\n        /// Returns the complete uri excluding the query part\n        public static string GetUriWithoutQuery(Uri uri)\n        {\n            string path = uri.GetComponents(UriComponents.Scheme | UriComponents.UserInfo | UriComponents.Host | UriComponents.Port | UriComponents.Path, UriFormat.UriEscaped);\n            return path;\n        }\n\n        /// <summary>\n        /// Parses a query string into a <see cref=\"System.Collections.Generic.IDictionary{TKey, TValue}\"/>\n        /// </summary>\n        /// <param name=\"query\">The query string to parse.</param>\n        /// <returns>An <see cref=\"System.Collections.Generic.IDictionary{TKey, TValue}\"/> of query parameters and values.</returns>\n        public static IDictionary<string, string> ParseQueryString(string query)\n        {\n            char[] separator = new[] { '=' };\n            var parameters = query.Split('&')\n                                  .Select(part => part.Split(separator, 2))\n                                  .ToDictionary(x => Uri.UnescapeDataString(x[0]), x => x.Length > 1 ? Uri.UnescapeDataString(x[1]) : String.Empty);\n\n            return parameters;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Http/LinkHeaderValue.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Text.RegularExpressions;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class LinkHeaderValue\n    {\n        static Regex pattern = new Regex(@\"^(?<uri>.*?);\\s*rel\\s*=\\s*(?<rel>\\w+)\\s*$\");\n        public Uri Uri { get; private set; }\n        public string Relation { get; private set; }\n\n        public LinkHeaderValue(string uri, string rel)\n        {\n            Uri value;\n            Uri.TryCreate(uri, UriKind.RelativeOrAbsolute, out value);\n            this.Uri = value;\n            this.Relation = rel;\n        }\n\n        public static LinkHeaderValue Parse(string value)\n        {\n            string uri = null, rel = null;\n\n            if (!String.IsNullOrEmpty(value))\n            {\n                Match result = pattern.Match(value ?? String.Empty);\n                uri = result.Groups[\"uri\"].Value;\n                rel = result.Groups[\"rel\"].Value;\n            }\n\n            return new LinkHeaderValue(uri, rel);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Http/MobileServiceHttpClient.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Reflection;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class MobileServiceHttpClient : IDisposable\n    {\n        /// <summary>\n        /// Name of the header to indicate the feature(s) initiating the remote server call.\n        /// </summary>\n        internal const string ZumoFeaturesHeader = \"X-ZUMO-FEATURES\";\n\n        /// <summary>\n        /// Name of the Installation ID header included on each request.\n        /// </summary>\n        private const string RequestInstallationIdHeader = \"X-ZUMO-INSTALLATION-ID\";\n\n        /// <summary>\n        /// Name of the application key header included when there's a key.\n        /// </summary>\n        private const string RequestApplicationKeyHeader = \"X-ZUMO-APPLICATION\";\n\n        /// <summary>\n        /// Name of the zumo version header.\n        /// </summary>\n        private const string ZumoVersionHeader = \"X-ZUMO-VERSION\";\n\n        /// <summary>\n        /// Name of the authentication header included when the user's logged\n        /// in.\n        /// </summary>\n        private const string RequestAuthenticationHeader = \"X-ZUMO-AUTH\";\n\n        /// <summary>\n        /// Name of the user-agent header.\n        /// </summary>\n        private const string UserAgentHeader = \"User-Agent\";\n\n        /// <summary>\n        /// Content type for request bodies and accepted responses.\n        /// </summary>\n        private const string RequestJsonContentType = \"application/json\";\n\n        /// <summary>\n        /// The URI for the Microsoft Azure Mobile Service.\n        /// </summary>\n        private readonly Uri applicationUri;\n\n        /// <summary>\n        /// The installation id of the application.\n        /// </summary>\n        private readonly string installationId;\n\n        /// <summary>\n        /// The application key for the Microsoft Azure Mobile Service.\n        /// </summary>\n        private readonly string applicationKey;\n\n        /// <summary>\n        /// The user-agent header value to use with all requests.\n        /// </summary>\n        private string userAgentHeaderValue;\n\n        /// <summary>\n        /// Represents a handler used to process HTTP requests and responses\n        /// associated with the Mobile Service.  \n        /// </summary>\n        public HttpMessageHandler httpHandler;\n\n        /// <summary>\n        /// The client which will be used to send regular (non-login) HTTP\n        /// requests by this mobile service.\n        /// </summary>\n        /// <remarks>It's defined as an instance member (instead of being\n        /// created based on the handler) so that the underlying connection\n        /// can be reused across multiple requests.</remarks>\n        private HttpClient httpClient;\n\n        /// <summary>\n        /// The client which will be used to send login HTTP requests\n        /// by this client.\n        /// </summary>\n        /// <remarks>Login operations should not apply any delegating handlers set\n        /// by the users, since they're \"system\" operations, so we use a separate\n        /// client for them.</remarks>\n        private HttpClient httpClientSansHandlers;\n\n\n        /// <summary>\n        /// Factory method for creating the default http client handler\n        /// </summary>\n        internal static Func<HttpMessageHandler> DefaultHandlerFactory = GetDefaultHttpClientHandler;\n\n        /// <summary>\n        /// Instantiates a new <see cref=\"MobileServiceHttpClient\"/>, \n        /// which does all the request to a mobile service.\n        /// </summary>\n        /// <param name=\"handlers\">\n        /// Chain of <see cref=\"HttpMessageHandler\" /> instances. \n        /// All but the last should be <see cref=\"DelegatingHandler\"/>s. \n        /// </param>\n        /// <param name=\"applicationUri\">\n        /// The URI for the Microsoft Azure Mobile Service.\n        /// </param>\n        /// <param name=\"installationId\">\n        /// The installation id of the application.\n        /// </param>\n        /// <param name=\"applicationKey\">\n        /// The application key for the Microsoft Azure Mobile Service.\n        /// </param>\n        public MobileServiceHttpClient(IEnumerable<HttpMessageHandler> handlers, Uri applicationUri, string installationId, string applicationKey)\n        {\n            Debug.Assert(handlers != null);\n            Debug.Assert(applicationUri != null);\n\n            this.applicationUri = applicationUri;\n            this.installationId = installationId;\n            this.applicationKey = applicationKey;\n\n            this.httpHandler = CreatePipeline(handlers);\n            this.httpClient = new HttpClient(httpHandler);\n            this.httpClientSansHandlers = new HttpClient(DefaultHandlerFactory());\n\n            this.userAgentHeaderValue = GetUserAgentHeader();\n\n            // Work around user agent header passing mono bug\n            // https://bugzilla.xamarin.com/show_bug.cgi?id=15128\n            this.httpClient.DefaultRequestHeaders.TryAddWithoutValidation(UserAgentHeader, userAgentHeaderValue);\n            this.httpClient.DefaultRequestHeaders.Add(ZumoVersionHeader, userAgentHeaderValue);\n            this.httpClientSansHandlers.DefaultRequestHeaders.TryAddWithoutValidation(UserAgentHeader, userAgentHeaderValue);\n            this.httpClientSansHandlers.DefaultRequestHeaders.Add(ZumoVersionHeader, userAgentHeaderValue);\n        }\n\n        /// <summary>\n        /// Performs a web request and includes the standard Mobile Services\n        /// headers. It will use an HttpClient without any http handlers.\n        /// </summary>\n        /// <param name=\"method\">\n        /// The HTTP method used to request the resource.\n        /// </param>\n        /// <param name=\"uriPathAndQuery\">\n        /// The URI of the resource to request (relative to the Mobile Services\n        /// runtime).\n        /// </param>\n        /// <param name=\"user\">\n        /// The object representing the user on behalf of whom the request will be sent.\n        /// </param>\n        /// <param name=\"content\">\n        /// Optional content to send to the resource.\n        /// </param>\n        /// <returns>\n        /// The content of the response as a string.\n        /// </returns>\n        public async Task<string> RequestWithoutHandlersAsync(HttpMethod method, string uriPathAndQuery, MobileServiceUser user, string content = null)\n        {\n            MobileServiceHttpResponse response = await this.RequestAsync(false, method, uriPathAndQuery, user, content, false);\n            return response.Content;\n        }\n\n        /// <summary>\n        /// Makes an HTTP request that includes the standard Mobile Services\n        /// headers. It will use an HttpClient with user-defined http handlers.\n        /// </summary>\n        /// <param name=\"method\">\n        /// The HTTP method used to request the resource.\n        /// </param>\n        /// <param name=\"uriPathAndQuery\">\n        /// The URI of the resource to request (relative to the Mobile Services\n        /// runtime).\n        /// </param>\n        /// <param name=\"user\">\n        /// The object representing the user on behalf of whom the request will be sent.\n        /// </param>\n        /// <param name=\"content\">\n        /// Optional content to send to the resource.\n        /// </param>\n        /// <param name=\"ensureResponseContent\">\n        /// Optional parameter to indicate if the response should include content.\n        /// </param>\n        /// <param name=\"requestHeaders\">\n        /// Additional request headers to include with the request.\n        /// </param>\n        /// <param name=\"features\">\n        /// Value indicating which features of the SDK are being used in this call. Useful for telemetry.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns> \n        /// The response.\n        /// </returns>\n        public Task<MobileServiceHttpResponse> RequestAsync(HttpMethod method,\n                                                             string uriPathAndQuery,\n                                                             MobileServiceUser user,\n                                                             string content = null,\n                                                             bool ensureResponseContent = true,\n                                                             IDictionary<string, string> requestHeaders = null,\n                                                             MobileServiceFeatures features = MobileServiceFeatures.None,\n                                                             CancellationToken cancellationToken = default(CancellationToken))\n        {\n            requestHeaders = FeaturesHelper.AddFeaturesHeader(requestHeaders, features);\n            return this.RequestAsync(true, method, uriPathAndQuery, user, content, ensureResponseContent, requestHeaders, cancellationToken);\n        }\n\n        /// <summary>\n        /// Makes an HTTP request that includes the standard Mobile Services\n        /// headers. It will use an HttpClient that optionally has user-defined \n        /// http handlers.\n        /// </summary>\n        /// <param name=\"UseHandlers\">Determines if the HttpClient will use user-defined http handlers</param>\n        /// <param name=\"method\">\n        /// The HTTP method used to request the resource.\n        /// </param>\n        /// <param name=\"uriPathAndQuery\">\n        /// The URI of the resource to request (relative to the Mobile Services\n        /// runtime).\n        /// </param>\n        /// <param name=\"user\">\n        /// The object representing the user on behalf of whom the request will be sent.\n        /// </param>\n        /// <param name=\"content\">\n        /// Optional content to send to the resource.\n        /// </param>\n        /// <param name=\"ensureResponseContent\">\n        /// Optional parameter to indicate if the response should include content.\n        /// </param>\n        /// <param name=\"requestHeaders\">\n        /// Additional request headers to include with the request.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>\n        /// The content of the response as a string.\n        /// </returns>\n        private async Task<MobileServiceHttpResponse> RequestAsync(bool UseHandlers,\n                                                        HttpMethod method,\n                                                        string uriPathAndQuery,\n                                                        MobileServiceUser user,\n                                                        string content = null,\n                                                        bool ensureResponseContent = true,\n                                                        IDictionary<string, string> requestHeaders = null,\n                                                        CancellationToken cancellationToken = default(CancellationToken))\n        {\n            Debug.Assert(method != null);\n            Debug.Assert(!string.IsNullOrEmpty(uriPathAndQuery));\n\n            // Create the request\n            HttpContent httpContent = CreateHttpContent(content);\n            HttpRequestMessage request = this.CreateHttpRequestMessage(method, uriPathAndQuery, requestHeaders, httpContent, user);\n            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(RequestJsonContentType));\n\n            // Get the response\n            HttpClient client;\n            if (UseHandlers)\n            {\n                client = this.httpClient;\n            }\n            else\n            {\n                client = this.httpClientSansHandlers;\n            }\n            HttpResponseMessage response = await this.SendRequestAsync(client, request, ensureResponseContent, cancellationToken);\n            string responseContent = await GetResponseContent(response);\n            string etag = null;\n            if (response.Headers.ETag != null)\n            {\n                etag = response.Headers.ETag.Tag;\n            }\n\n            LinkHeaderValue link = null;\n            if (response.Headers.Contains(\"Link\"))\n            {\n                link = LinkHeaderValue.Parse(response.Headers.GetValues(\"Link\").FirstOrDefault());\n            }\n\n            // Dispose of the request and response\n            request.Dispose();\n            response.Dispose();\n\n            return new MobileServiceHttpResponse(responseContent, etag, link);\n        }\n\n        /// <summary>\n        /// Makes an HTTP request that includes the standard Mobile Services\n        /// headers. It will use an HttpClient with user-defined http handlers.\n        /// </summary>\n        /// <param name=\"method\">\n        /// The HTTP method used to request the resource.\n        /// </param>\n        /// <param name=\"uriPathAndQuery\">\n        /// The URI of the resource to request (relative to the Mobile Services\n        /// runtime).\n        /// </param>\n        /// <param name=\"user\">\n        /// The object representing the user on behalf of whom the request will be sent.\n        /// </param>\n        /// <param name=\"content\">\n        /// Content to send to the resource.\n        /// </param>\n        /// <param name=\"requestHeaders\">\n        /// Additional request headers to include with the request.\n        /// </param>\n        /// <param name=\"features\">\n        /// Value indicating which features of the SDK are being used in this call. Useful for telemetry.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>\n        /// An <see cref=\"HttpResponseMessage\"/>.\n        /// </returns>\n        public async Task<HttpResponseMessage> RequestAsync(HttpMethod method,\n                                                            string uriPathAndQuery, \n                                                            MobileServiceUser user, \n                                                            HttpContent content, \n                                                            IDictionary<string, string> requestHeaders, \n                                                            MobileServiceFeatures features = MobileServiceFeatures.None,\n                                                            CancellationToken cancellationToken = default(CancellationToken))\n        {\n            Debug.Assert(method != null);\n            Debug.Assert(!string.IsNullOrEmpty(uriPathAndQuery));\n\n            requestHeaders = FeaturesHelper.AddFeaturesHeader(requestHeaders, features);\n            // Create the request\n            HttpRequestMessage request = this.CreateHttpRequestMessage(method, uriPathAndQuery, requestHeaders, content, user);\n\n            // Get the response\n            HttpResponseMessage response = await this.SendRequestAsync(httpClient, request, ensureResponseContent: false, cancellationToken: cancellationToken);\n\n            return response;\n        }\n\n        /// <summary>\n        /// Implemenation of <see cref=\"IDisposable\"/>\n        /// </summary>\n        public void Dispose()\n        {\n            this.Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Implemenation of <see cref=\"IDisposable\"/> for\n        /// derived classes to use.\n        /// </summary>\n        /// <param name=\"disposing\">\n        /// Indicates if being called from the Dispose() method\n        /// or the finalizer.\n        /// </param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                // free managed resources\n                if (this.httpHandler != null)\n                {\n                    this.httpHandler.Dispose();\n                    this.httpHandler = null;\n                }\n\n                if (this.httpClient != null)\n                {\n                    this.httpClient.Dispose();\n                    this.httpClient = null;\n                }\n\n                if (this.httpClientSansHandlers != null)\n                {\n                    this.httpClientSansHandlers.Dispose();\n                    this.httpClientSansHandlers = null;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Creates an <see cref=\"HttpContent\"/> instance from a string.\n        /// </summary>\n        /// <param name=\"content\">\n        /// The string content from which to create the <see cref=\"HttpContent\"/> instance. \n        /// </param>\n        /// <returns>\n        /// An <see cref=\"HttpContent\"/> instance or null if the <paramref name=\"content\"/>\n        /// was null.\n        /// </returns>\n        private static HttpContent CreateHttpContent(string content)\n        {\n            HttpContent httpContent = null;\n            if (content != null)\n            {\n                httpContent = new StringContent(content, Encoding.UTF8, RequestJsonContentType);\n            }\n\n            return httpContent;\n        }\n\n        /// <summary>\n        /// Returns the content from the <paramref name=\"response\"/> as a string.\n        /// </summary>\n        /// <param name=\"response\">\n        /// The <see cref=\"HttpResponseMessage\"/> from which to read the content as a string.\n        /// </param>\n        /// <returns>\n        /// The response content as a string.\n        /// </returns>\n        private static async Task<string> GetResponseContent(HttpResponseMessage response)\n        {\n            string responseContent = null;\n            if (response.Content != null)\n            {\n                responseContent = await response.Content.ReadAsStringAsync();\n            }\n\n            return responseContent;\n        }\n\n        /// <summary>\n        /// Throws an exception for an invalid response to a web request.\n        /// </summary>\n        /// <param name=\"request\">\n        /// The request.\n        /// </param>\n        /// <param name=\"response\">\n        /// The response.\n        /// </param>\n        private static async Task ThrowInvalidResponse(HttpRequestMessage request, HttpResponseMessage response)\n        {\n            Debug.Assert(request != null);\n            Debug.Assert(response != null);\n            Debug.Assert(!response.IsSuccessStatusCode);\n\n            string responseContent = response.Content == null ? null : await response.Content.ReadAsStringAsync();\n\n            // Create either an invalid response or connection failed message\n            // (check the status code first because some status codes will\n            // set a protocol ErrorStatus).\n            string message = null;\n            if (!response.IsSuccessStatusCode)\n            {\n                if (responseContent != null)\n                {\n                    JToken body = null;\n                    try\n                    {\n                        body = JToken.Parse(responseContent);\n                    }\n                    catch\n                    {\n                    }\n\n                    if (body != null)\n                    {\n                        if (body.Type == JTokenType.String)\n                        {\n                            // User scripts might return errors with just a plain string message as the\n                            // body content, so use it as the exception message\n                            message = body.ToString();\n                        }\n                        else if (body.Type == JTokenType.Object)\n                        {\n                            // Get the error message, but default to the status description\n                            // below if there's no error message present.\n                            JToken error = body[\"error\"];\n                            if (error != null && error.Type == JTokenType.String)\n                            {\n                                message = (string)error;\n                            }\n                            else\n                            {\n                                JToken description = body[\"description\"];\n                                if (description != null && description.Type == JTokenType.String)\n                                {\n                                    message = (string)description;\n                                }\n                            }\n                        }\n                    }\n                    else if (response.Content.Headers.ContentType != null &&\n                                response.Content.Headers.ContentType.MediaType != null &&\n                                response.Content.Headers.ContentType.MediaType.Contains(\"text\"))\n                    {\n                        message = responseContent;\n                    }\n                }\n\n                if (string.IsNullOrWhiteSpace(message))\n                {\n                    message = string.Format(\n                        CultureInfo.InvariantCulture,\n                        \"The request could not be completed.  ({0})\",\n                        response.ReasonPhrase);\n                }\n            }\n            else\n            {\n                message = string.Format(\n                    CultureInfo.InvariantCulture,\n                    \"The request could not be completed.  ({0})\",\n                    response.ReasonPhrase);\n            }\n\n            // Combine the pieces and throw the exception\n            throw new MobileServiceInvalidOperationException(message, request, response);\n        }\n\n        /// <summary>\n        /// Creates an <see cref=\"HttpRequestMessage\"/> with all of the \n        /// required Mobile Service headers.\n        /// </summary>\n        /// <param name=\"method\">\n        /// The HTTP method of the request.\n        /// </param>\n        /// <param name=\"uriPathAndQuery\">\n        /// The URI of the resource to request (relative to the Mobile Services\n        /// runtime).\n        /// </param>\n        /// <param name=\"requestHeaders\">\n        /// Additional request headers to include with the request.\n        /// </param>\n        /// <param name=\"content\">\n        /// The content of the request.\n        /// </param>\n        /// <param name=\"user\">\n        /// The object representing the user on behalf of whom the request will be sent.\n        /// </param>\n        /// <returns>\n        /// An <see cref=\"HttpRequestMessage\"/> with all of the \n        /// required Mobile Service headers.\n        /// </returns>\n        private HttpRequestMessage CreateHttpRequestMessage(HttpMethod method, string uriPathAndQuery, IDictionary<string, string> requestHeaders, HttpContent content, MobileServiceUser user)\n        {\n            Debug.Assert(method != null);\n            Debug.Assert(!string.IsNullOrEmpty(uriPathAndQuery));\n\n            HttpRequestMessage request = new HttpRequestMessage();\n\n            // Set the Uri and Http Method\n            request.RequestUri = new Uri(this.applicationUri, uriPathAndQuery);\n            request.Method = method;\n\n            // Add the user's headers\n            if (requestHeaders != null)\n            {\n                foreach (KeyValuePair<string, string> header in requestHeaders)\n                {\n                    request.Headers.Add(header.Key, header.Value);\n                }\n            }\n\n            // Set Mobile Services authentication, application, and telemetry headers\n            request.Headers.Add(RequestInstallationIdHeader, this.installationId);\n            if (!string.IsNullOrEmpty(this.applicationKey))\n            {\n                request.Headers.Add(RequestApplicationKeyHeader, this.applicationKey);\n            }\n\n            if (user != null && !string.IsNullOrEmpty(user.MobileServiceAuthenticationToken))\n            {\n                request.Headers.Add(RequestAuthenticationHeader, user.MobileServiceAuthenticationToken);\n            }\n\n            // Add the content\n            if (content != null)\n            {\n                request.Content = content;\n            }\n\n            return request;\n        }\n\n        /// <summary>\n        /// Sends the <paramref name=\"request\"/> with the given <paramref name=\"client\"/>.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The <see cref=\"HttpClient\"/> to send the request with.\n        /// </param>\n        /// <param name=\"request\">\n        /// The <see cref=\"HttpRequestMessage\"/> to be sent.\n        /// </param>\n        /// <param name=\"ensureResponseContent\">\n        /// Optional parameter to indicate if the response should include content.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>\n        /// An <see cref=\"HttpResponseMessage\"/>.\n        /// </returns>\n        private async Task<HttpResponseMessage> SendRequestAsync(HttpClient client,\n                                                                 HttpRequestMessage request,\n                                                                 bool ensureResponseContent,\n                                                                 CancellationToken cancellationToken)\n        {\n            Debug.Assert(client != null);\n            Debug.Assert(request != null);\n\n            // Send the request and get the response back as string\n            HttpResponseMessage response = await client.SendAsync(request, cancellationToken);\n\n            // Throw errors for any failing responses\n            if (!response.IsSuccessStatusCode)\n            {\n                await ThrowInvalidResponse(request, response);\n            }\n\n            // If there was supposed to be response content and there was not, throw\n            if (ensureResponseContent)\n            {\n                long? contentLength = null;\n                if (response.Content != null)\n                {\n                    contentLength = response.Content.Headers.ContentLength;\n                }\n\n                if (contentLength == null || contentLength <= 0)\n                {\n                    throw new MobileServiceInvalidOperationException(\"The server did not provide a response with the expected content.\", request, response);\n                }\n            }\n\n            return response;\n        }\n\n        /// <summary>\n        /// Transform an IEnumerable of <see cref=\"HttpMessageHandler\"/>s into\n        /// a chain of <see cref=\"HttpMessageHandler\"/>s.\n        /// </summary>\n        /// <param name=\"handlers\">\n        /// Chain of <see cref=\"HttpMessageHandler\" /> instances. \n        /// All but the last should be <see cref=\"DelegatingHandler\"/>s. \n        /// </param>\n        /// <returns>A chain of <see cref=\"HttpMessageHandler\"/>s</returns>\n        private static HttpMessageHandler CreatePipeline(IEnumerable<HttpMessageHandler> handlers)\n        {\n            HttpMessageHandler pipeline = handlers.LastOrDefault() ?? DefaultHandlerFactory();\n            DelegatingHandler dHandler = pipeline as DelegatingHandler;\n            if (dHandler != null)\n            {\n                dHandler.InnerHandler = DefaultHandlerFactory();\n                pipeline = dHandler;\n            }\n\n            // Wire handlers up in reverse order\n            IEnumerable<HttpMessageHandler> reversedHandlers = handlers.Reverse().Skip(1);\n            foreach (HttpMessageHandler handler in reversedHandlers)\n            {\n                dHandler = handler as DelegatingHandler;\n                if (dHandler == null)\n                {\n                    throw new ArgumentException(\n                        string.Format(\n                        \"All message handlers except the last must be of the type '{0}'\",\n                        typeof(DelegatingHandler).Name));\n                }\n\n                dHandler.InnerHandler = pipeline;\n                pipeline = dHandler;\n            }\n\n            return pipeline;\n        }\n\n        /// <summary>\n        /// Returns a default HttpMessageHandler that supports automatic decompression.\n        /// </summary>\n        /// <returns>\n        /// A default HttpClientHandler that supports automatic decompression\n        /// </returns>\n        private static HttpMessageHandler GetDefaultHttpClientHandler()\n        {\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n            {\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            }\n\n            return handler;\n        }\n\n        /// <summary>\n        /// Gets the user-agent header to use with all requests.\n        /// </summary>\n        /// <returns>\n        /// An HTTP user-agent header.\n        /// </returns>\n        private string GetUserAgentHeader()\n        {\n            IPlatformInformation platformInformation = Platform.Instance.PlatformInformation;\n\n            string sdkVersion = string.Join(\".\", platformInformation.Version.Split('.').Take(2)); // Get just the major and minor versions\n\n            return string.Format(\n                CultureInfo.InvariantCulture,\n                \"ZUMO/{0} (lang={1}; os={2}; os_version={3}; arch={4}; version={5})\",\n                sdkVersion,\n                \"Managed\",\n                platformInformation.OperatingSystemName,\n                platformInformation.OperatingSystemVersion,\n                platformInformation.OperatingSystemArchitecture,\n                platformInformation.Version);\n        }\n\n        /// <summary>\n        /// Helper class to create the HTTP headers used for sending feature usage to the service.\n        /// </summary>\n        static class FeaturesHelper\n        {\n            /// <summary>\n            /// Existing features which can be sent for telemetry purposes to the server.\n            /// </summary>\n            private static readonly List<Tuple<MobileServiceFeatures, string>> AllTelemetryFeatures;\n\n            static FeaturesHelper()\n            {\n                AllTelemetryFeatures = new List<Tuple<MobileServiceFeatures, string>>();\n                var features = (MobileServiceFeatures[])Enum.GetValues(typeof(MobileServiceFeatures));\n                foreach (var feature in features)\n                {\n                    if (feature != MobileServiceFeatures.None)\n                    {\n                        AllTelemetryFeatures.Add(new Tuple<MobileServiceFeatures, string>(feature, EnumValueAttribute.GetValue(feature)));\n                    }\n                }\n            }\n\n            /// <summary>\n            /// Adds a header for features used in this request. Used for telemetry.\n            /// </summary>\n            /// <param name=\"requestHeaders\">\n            /// Additional request headers to include with the request.\n            /// </param>\n            /// <param name=\"features\">\n            /// Value indicating which features of the SDK are being used in this call.\n            /// </param>\n            /// <returns>The list of headers to send in this request.</returns>\n            public static IDictionary<string, string> AddFeaturesHeader(IDictionary<string, string> requestHeaders, MobileServiceFeatures features)\n            {\n                if (features != MobileServiceFeatures.None)\n                {\n                    if (requestHeaders == null || !requestHeaders.ContainsKey(ZumoFeaturesHeader))\n                    {\n                        requestHeaders = new Dictionary<string, string>(requestHeaders ?? new Dictionary<string, string>());\n                        requestHeaders.Add(ZumoFeaturesHeader, FeaturesToString(features));\n                    }\n                }\n\n                return requestHeaders;\n            }\n\n            /// <summary>\n            /// Returns the value to be used in the HTTP header corresponding to the given features.\n            /// </summary>\n            /// <param name=\"features\">The features to be sent as telemetry to the service.</param>\n            /// <returns>The value of the HTTP header to be sent to the service.</returns>\n            private static string FeaturesToString(MobileServiceFeatures features)\n            {\n                return string.Join(\",\",\n                    AllTelemetryFeatures\n                        .Where(t => (features & t.Item1) == t.Item1)\n                        .Select(t => t.Item2));\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Http/MobileServiceHttpResponse.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class MobileServiceHttpResponse\n    {\n        public string Content { get; private set; }\n\n        public string Etag { get; private set; }\n\n        public LinkHeaderValue Link { get; private set; }\n\n        public MobileServiceHttpResponse(string content, string etag, LinkHeaderValue link)\n        {\n            this.Content = content;\n            this.Etag = etag;\n            this.Link = link;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/IMobileServiceClient.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Newtonsoft.Json.Linq;\nusing System.Threading;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Interface for the <see cref=\"MobileServiceClient\"/>.\n    /// </summary>\n    public interface IMobileServiceClient\n    {\n        /// <summary>\n        /// Gets the Mobile Services application's name that is provided by the\n        /// call to MobileServiceClient(...).\n        /// </summary>\n        string ApplicationKey { get; }\n\n        /// <summary>\n        /// Gets the Uri to the Mobile Services application that is provided by\n        /// the call to MobileServiceClient(...).\n        /// </summary>\n        Uri ApplicationUri { get; }\n\n        /// <summary>\n        /// The current authenticated user provided after a successful call to\n        /// MobileServiceClient.Login().\n        /// </summary>\n        MobileServiceUser CurrentUser { get; set; }\n        \n        /// <summary>\n        /// Returns a <see cref=\"IMobileServiceSyncContext\"/> instance.\n        /// </summary>\n        IMobileServiceSyncContext SyncContext { get; }\n\n        /// <summary>\n        /// Returns a <see cref=\"IMobileServiceTable\"/> instance, which provides \n        /// untyped data operations for that table.\n        /// </summary>\n        /// <param name=\"tableName\">\n        /// The name of the table.\n        /// </param>\n        /// <returns>\n        /// The table.\n        /// </returns>\n        IMobileServiceTable GetTable(string tableName);\n\n        /// <summary>\n        /// Returns a <see cref=\"IMobileServiceSyncTable\"/> instance, which provides\n        /// untyped data operations for a local table.\n        /// </summary>\n        /// <param name=\"tableName\">The name of the table.</param>\n        /// <returns>The table.</returns>\n        IMobileServiceSyncTable GetSyncTable(string tableName);\n\n        /// <summary>\n        /// Returns a <see cref=\"IMobileServiceTable{T}\"/> instance, which provides \n        /// strongly typed data operations for that table.\n        /// </summary>\n        /// <typeparam name=\"T\">\n        /// The type of the instances in the table.\n        /// </typeparam>\n        /// <returns>\n        /// The table.\n        /// </returns>\n        IMobileServiceTable<T> GetTable<T>();\n\n        /// <summary>\n        /// Returns a <see cref=\"IMobileServiceTable{T}\"/> instance, which provides \n        /// strongly typed data operations for a local table.\n        /// </summary>\n        /// <typeparam name=\"T\">\n        /// The type of the instances in the table.\n        /// </typeparam>\n        /// <returns>\n        /// The table.\n        /// </returns>\n        IMobileServiceSyncTable<T> GetSyncTable<T>();\n\n        /// <summary>\n        /// Logs a user into a Windows Azure Mobile Service with the provider and a token object.\n        /// </summary>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"token\">\n        /// Provider specific object with existing OAuth token to log in with.\n        /// </param>\n        /// <remarks>\n        /// The token object needs to be formatted depending on the specific provider. These are some\n        /// examples of formats based on the providers:\n        /// <list type=\"bullet\">\n        ///   <item>\n        ///     <term>MicrosoftAccount</term>\n        ///     <description><code>{\"authenticationToken\":\"&lt;the_authentication_token&gt;\"}</code></description>\n        ///   </item>\n        ///   <item>\n        ///     <term>Facebook</term>\n        ///     <description><code>{\"access_token\":\"&lt;the_access_token&gt;\"}</code></description>\n        ///   </item>\n        ///   <item>\n        ///     <term>Google</term>\n        ///     <description><code>{\"access_token\":\"&lt;the_access_token&gt;\"}</code></description>\n        ///   </item>\n        /// </list>\n        /// </remarks>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        Task<MobileServiceUser> LoginAsync(MobileServiceAuthenticationProvider provider, JObject token);\n\n        /// <summary>\n        /// Logs a user into a Microsoft Azure Mobile Service with the provider and a token object.\n        /// </summary>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"token\">\n        /// Provider specific object with existing OAuth token to log in with.\n        /// </param>\n        /// <remarks>\n        /// The token object needs to be formatted depending on the specific provider. These are some\n        /// examples of formats based on the providers:\n        /// <list type=\"bullet\">\n        ///   <item>\n        ///     <term>MicrosoftAccount</term>\n        ///     <description><code>{\"authenticationToken\":\"&lt;the_authentication_token&gt;\"}</code></description>\n        ///   </item>\n        ///   <item>\n        ///     <term>Facebook</term>\n        ///     <description><code>{\"access_token\":\"&lt;the_access_token&gt;\"}</code></description>\n        ///   </item>\n        ///   <item>\n        ///     <term>Google</term>\n        ///     <description><code>{\"access_token\":\"&lt;the_access_token&gt;\"}</code></description>\n        ///   </item>\n        /// </list>\n        /// </remarks>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        Task<MobileServiceUser> LoginAsync(string provider, JObject token);\n\n        /// <summary>\n        /// Log a user out.\n        /// </summary>\n        void Logout();\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using an HTTP POST.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of instance returned from the Microsoft Azure Mobile Service.</typeparam>    \n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        Task<T> InvokeApiAsync<T>(string apiName, CancellationToken cancellationToken = default(CancellationToken));\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using an HTTP POST with\n        /// support for sending HTTP content.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of instance sent to the Microsoft Azure Mobile Service.</typeparam>\n        /// <typeparam name=\"U\">The type of instance returned from the Microsoft Azure Mobile Service.</typeparam>    \n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"body\">The value to be sent as the HTTP body.</param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        Task<U> InvokeApiAsync<T, U>(string apiName, T body, CancellationToken cancellationToken = default(CancellationToken));\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using the specified HTTP Method.\n        /// Additional data can be passed using the query string.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of instance sent to the Microsoft Azure Mobile Service.</typeparam>\n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"method\">The HTTP method.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        Task<T> InvokeApiAsync<T>(string apiName, HttpMethod method, IDictionary<string, string> parameters, CancellationToken cancellationToken = default(CancellationToken));\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using the specified HTTP Method.\n        /// Additional data can be sent though the HTTP content or the query string.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of instance sent to the Microsoft Azure Mobile Service.</typeparam>\n        /// <typeparam name=\"U\">The type of instance returned from the Microsoft Azure Mobile Service.</typeparam>    \n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"body\">The value to be sent as the HTTP body.</param>\n        /// <param name=\"method\">The HTTP method.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        Task<U> InvokeApiAsync<T, U>(string apiName, T body, HttpMethod method, IDictionary<string, string> parameters, CancellationToken cancellationToken = default(CancellationToken));\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using an HTTP POST.\n        /// </summary>\n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns></returns>\n        Task<JToken> InvokeApiAsync(string apiName, CancellationToken cancellationToken = default(CancellationToken));\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using an HTTP POST, with\n        /// support for sending HTTP content.\n        /// </summary>\n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"body\">The value to be sent as the HTTP body.</param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns></returns>\n        Task<JToken> InvokeApiAsync(string apiName, JToken body, CancellationToken cancellationToken = default(CancellationToken));\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using the specified HTTP Method.\n        /// Additional data will sent to through the query string.\n        /// </summary>\n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"method\">The HTTP method.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        Task<JToken> InvokeApiAsync(string apiName, HttpMethod method, IDictionary<string, string> parameters, CancellationToken cancellationToken = default(CancellationToken));\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using the specified HTTP method.\n        /// Additional data can be sent though the HTTP content or the query string.\n        /// </summary>\n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"body\">The value to be sent as the HTTP body.</param>\n        /// <param name=\"method\">The HTTP method.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        Task<JToken> InvokeApiAsync(string apiName, JToken body, HttpMethod method, IDictionary<string, string> parameters, CancellationToken cancellationToken = default(CancellationToken));\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using the specified HttpMethod.\n        /// Additional data can be sent though the HTTP content or the query string. \n        /// </summary>\n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"content\">The HTTP content.</param>\n        /// <param name=\"method\">The HTTP method.</param>\n        /// <param name=\"requestHeaders\">\n        /// A dictionary of user-defined headers to include in the HttpRequest.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The HTTP Response from the custom api invocation.</returns>\n        Task<HttpResponseMessage> InvokeApiAsync(string apiName, HttpContent content, HttpMethod method, IDictionary<string, string> requestHeaders, IDictionary<string, string> parameters, CancellationToken cancellationToken = default(CancellationToken));\n\n        /// <summary>\n        /// Gets or sets the settings used for serialization.\n        /// </summary>\n        MobileServiceJsonSerializerSettings SerializerSettings { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Microsoft.WindowsAzure.Mobile.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),Microsoft.WindowsAzure.Mobile.Build.msbuild))\\tools\\Microsoft.WindowsAzure.Mobile.Build.settings.targets\" Condition=\"$(CmdLine) != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <OutputPath Condition=\" '$(OutputPath)' == '' \">bin\\$(Configuration)</OutputPath>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{75557793-E36E-4190-8714-5BD2665859FB}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <TargetFrameworkProfile>Profile259</TargetFrameworkProfile>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>\n    </DocumentationFile>\n    <RunCodeAnalysis>true</RunCodeAnalysis>\n    <CodeAnalysisAdditionalOptions>\n      /assemblyCompareMode:StrongNameIgnoringVersion\n    </CodeAnalysisAdditionalOptions>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>$(OutputPath)\\Microsoft.WindowsAzure.Mobile.xml</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"Authentication\\MobileServiceTokenAuthentication.cs\" />\n    <Compile Include=\"Collections\\MobileServiceCollection.cs\" />\n    <Compile Include=\"Collections\\MobileServiceCollectionEventArgs.cs\" />\n    <Compile Include=\"EnumValueAttribute.cs\" />\n    <Compile Include=\"Exceptions\\MobileServiceConflictException.cs\" />\n    <Compile Include=\"Exceptions\\MobileServiceInvalidOperationException.cs\" />\n    <Compile Include=\"Exceptions\\MobileServicePreconditionFailedException.cs\" />\n    <Compile Include=\"Exceptions\\MobileServiceLocalStoreException.cs\" />\n    <Compile Include=\"Exceptions\\MobileServiceODataException.cs\" />\n    <Compile Include=\"Exceptions\\MobileServicePushAbortException.cs\" />\n    <Compile Include=\"Extensions\\ExceptionExtensions.cs\" />\n    <Compile Include=\"Extensions\\IDictionaryExtensions.cs\" />\n    <Compile Include=\"Extensions\\JTokenExtensions.cs\" />\n    <Compile Include=\"Extensions\\MobileServiceClientExtensions.cs\" />\n    <Compile Include=\"Extensions\\MobileServiceCollectionExtensions.cs\" />\n    <Compile Include=\"Extensions\\MobileServiceLocalStoreExtensions.cs\" />\n    <Compile Include=\"Extensions\\MobileServiceSyncContextExtensions.cs\" />\n    <Compile Include=\"Extensions\\MobileServiceSyncTableExtensions.cs\" />\n    <Compile Include=\"Extensions\\MobileServiceTableExtensions.cs\" />\n    <Compile Include=\"Extensions\\PlatformInformationExtensions.cs\" />\n    <Compile Include=\"Extensions\\StringExtensions.cs\" />\n    <Compile Include=\"Extensions\\TypeExtensions.cs\" />\n    <Compile Include=\"Http\\HttpUtility.cs\" />\n    <Compile Include=\"Http\\LinkHeaderValue.cs\" />\n    <Compile Include=\"Http\\MobileServiceHttpResponse.cs\" />\n    <Compile Include=\"IMobileServiceClient.cs\" />\n    <Compile Include=\"Authentication\\MobileServiceAuthentication.cs\" />\n    <Compile Include=\"Authentication\\MobileServiceAuthenticationProvider.cs\" />\n    <Compile Include=\"MobileServiceClient.cs\" />\n    <Compile Include=\"MobileServiceFeatures.cs\" />\n    <Compile Include=\"MobileServiceUser.cs\" />\n    <Compile Include=\"Platform\\IApplicationStorage.cs\" />\n    <Compile Include=\"Platform\\IPushUtility.cs\" />\n    <Compile Include=\"Platform\\IExpressionUtility.cs\" />\n    <Compile Include=\"Platform\\IPlatform.cs\" />\n    <Compile Include=\"Platform\\IPlatformInformation.cs\" />\n    <Compile Include=\"Http\\MobileServiceHttpClient.cs\" />\n    <Compile Include=\"Platform\\Platform.cs\" />\n    <Compile Include=\"Platform\\PreserveAttribute.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Push\\ILocalStorageManager.cs\" />\n    <Compile Include=\"Push\\IRegistrationManager.cs\" />\n    <Compile Include=\"Push\\LocalStorageManager.cs\" />\n    <Compile Include=\"Push\\PushHttpClient.cs\" />\n    <Compile Include=\"Push\\Registration.cs\" />\n    <Compile Include=\"Push\\RegistrationClassConverter.cs\" />\n    <Compile Include=\"Push\\RegistrationManager.cs\" />\n    <Compile Include=\"Push\\StoredRegistrationEntry.cs\" />\n    <Compile Include=\"Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Table\\MobileServiceObjectReader.cs\" />\n    <Compile Include=\"Table\\Sync\\PullOptions.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\MobileServiceTableKind.cs\" />\n    <Compile Include=\"Table\\MobileServiceSystemColumns.cs\" />\n    <Compile Include=\"Table\\MobileServiceSystemProperties.cs\" />\n    <Compile Include=\"Table\\Query\\IQueryResultEnumerable.cs\" />\n    <Compile Include=\"Table\\Query\\Linq\\FilterBuildingExpressionVisitor.cs\" />\n    <Compile Include=\"Table\\Query\\Linq\\IMobileServiceTableQuery.cs\" />\n    <Compile Include=\"Table\\Query\\Linq\\MemberInfoKey.cs\" />\n    <Compile Include=\"Table\\Query\\Linq\\MobileServiceTableQuery.cs\" />\n    <Compile Include=\"Table\\Query\\Linq\\MobileServiceTableQueryProvider.cs\" />\n    <Compile Include=\"Table\\Query\\Linq\\MobileServiceTableQueryTranslator.cs\" />\n    <Compile Include=\"Table\\Query\\ODataOptions.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\BinaryOperatorKind.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\BinaryOperatorNode.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\ConstantNode.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\ConvertNode.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\ODataExpressionLexer.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\QueryNode.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\QueryNodeVisitor.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\MemberAccessNode.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\FunctionCallNode.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\QueryNodeKind.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\ODataExpressionParser.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\ODataExpressionVisitor.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\QueryToken.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\QueryTokenKind.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\UnaryOperatorKind.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\UnaryOperatorNode.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\OrderByDirection.cs\" />\n    <Compile Include=\"Table\\Query\\OData\\OrderByNode.cs\" />\n    <Compile Include=\"Table\\Query\\QueryResult.cs\" />\n    <Compile Include=\"Table\\Serialization\\DeletedAttribute.cs\" />\n    <Compile Include=\"Table\\Sync\\IMobileServiceLocalStore.cs\" />\n    <Compile Include=\"Table\\Sync\\MobileServiceLocalStore.cs\" />\n    <Compile Include=\"Table\\Sync\\MobileServicePushStatus.cs\" />\n    <Compile Include=\"Table\\Sync\\MobileServiceSyncHandler.cs\" />\n    <Compile Include=\"Table\\Sync\\IMobileServiceSyncContext.cs\" />\n    <Compile Include=\"Table\\Sync\\IMobileServiceSyncTable.cs\" />\n    <Compile Include=\"Table\\Sync\\IMobileServiceSyncTable.Generic.cs\" />\n    <Compile Include=\"Table\\Serialization\\UpdatedAtAttribute.cs\" />\n    <Compile Include=\"Table\\Serialization\\CreatedAtAttribute.cs\" />\n    <Compile Include=\"Table\\Serialization\\VersionAttribute.cs\" />\n    <Compile Include=\"Table\\Serialization\\ISystemPropertyAttribute.cs\" />\n    <Compile Include=\"Table\\IMobileServiceTable.cs\" />\n    <Compile Include=\"Table\\IMobileServiceTable.Generic.cs\" />\n    <Compile Include=\"Table\\MobileServiceTable.cs\" />\n    <Compile Include=\"Table\\MobileServiceTable.Generic.cs\" />\n    <Compile Include=\"MobileServiceUrlBuilder.cs\" />\n    <Compile Include=\"Table\\Query\\ITotalCountProvider.cs\" />\n    <Compile Include=\"Table\\Query\\MobileServiceTableQueryDescription.cs\" />\n    <Compile Include=\"Table\\Query\\QueryResultEnumerable.cs\" />\n    <Compile Include=\"Table\\Query\\QueryResultList.cs\" />\n    <Compile Include=\"Table\\Serialization\\DataTableAttribute.cs\" />\n    <Compile Include=\"Table\\Serialization\\MobileServiceContractResolver.cs\" />\n    <Compile Include=\"Table\\Serialization\\MobileServiceSerializer.cs\" />\n    <Compile Include=\"Table\\Serialization\\MobileServiceJsonSerializerSettings.cs\" />\n    <Compile Include=\"Table\\Serialization\\MobileServicePrecisionCheckConverter.cs\" />\n    <Compile Include=\"Table\\Serialization\\MobileServiceIsoDateTimeConverter.cs\" />\n    <Compile Include=\"Table\\Sync\\MobileServiceSyncSettingsManager.cs\" />\n    <Compile Include=\"Table\\Sync\\MobileServiceRemoteTableOptions.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Actions\\IncrementalPullStrategy.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Actions\\PullCursor.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Actions\\PullStrategy.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Actions\\SyncAction.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Actions\\PurgeAction.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Actions\\PullAction.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Actions\\TableAction.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\MobileServiceTableOperationError.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\DeleteOperation.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\MobileServiceTableOperationState.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\UpdateOperation.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\InsertOperation.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\OperationBatch.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\IMobileServiceTableOperation.cs\" />\n    <Compile Include=\"Table\\Sync\\IMobileServiceSyncHandler.cs\" />\n    <Compile Include=\"Table\\Sync\\MobileServiceSyncContext.cs\" />\n    <Compile Include=\"Table\\Sync\\MobileServicePushCompletionResult.cs\" />\n    <Compile Include=\"Table\\Sync\\MobileServiceSyncTable.cs\" />\n    <Compile Include=\"Table\\Sync\\MobileServiceSyncTable.Generic.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\MobileServiceTableOperationKind.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\OperationQueue.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\MobileServiceTableOperation.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Actions\\PushAction.cs\" />\n    <Compile Include=\"Exceptions\\MobileServicePushFailedException.cs\" />\n    <Compile Include=\"Table\\Sync\\MobileServiceLocalSystemTables.cs\" />\n    <Compile Include=\"Threading\\ActionBlock.cs\" />\n    <Compile Include=\"Threading\\AsyncLock.cs\" />\n    <Compile Include=\"Threading\\AsyncLockDictionary.cs\" />\n    <Compile Include=\"Threading\\AsyncReaderWriterLock.cs\" />\n    <Compile Include=\"Threading\\DisposeAction.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <SubType>Designer</SubType>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\Portable\\$(TargetFrameworkVersion)\\Microsoft.Portable.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n</Project>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/MobileServiceClient.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Globalization;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides basic access to a Microsoft Azure Mobile Service.\n    /// </summary>\n    public class MobileServiceClient : IMobileServiceClient, IDisposable\n    {\n        private static HttpMethod defaultHttpMethod = HttpMethod.Post;\n\n        /// <summary>\n        /// Name of the config setting that stores the installation ID.\n        /// </summary>\n        private const string ConfigureAsyncInstallationConfigPath = \"MobileServices.Installation.config\";\n\n        /// <summary>\n        /// Name of the JSON member in the config setting that stores the\n        /// installation ID.\n        /// </summary>\n        private const string ConfigureAsyncApplicationIdKey = \"applicationInstallationId\";\n\n        /// <summary>\n        /// Default empty array of HttpMessageHandlers.\n        /// </summary>\n        private static readonly HttpMessageHandler[] EmptyHttpMessageHandlers = new HttpMessageHandler[0];\n\n        /// <summary>\n        /// The id used to identify this installation of the application to \n        /// provide telemetry data.\n        /// </summary>\n        internal string applicationInstallationId;\n\n        /// <summary>\n        /// Gets the Uri to the Mobile Services application that is provided by\n        /// the call to MobileServiceClient(...).\n        /// </summary>\n        public Uri ApplicationUri { get; private set; }\n\n        /// <summary>\n        /// Gets the Mobile Services application's name that is provided by the\n        /// call to MobileServiceClient(...).\n        /// </summary>\n        public string ApplicationKey { get; private set; }\n\n        /// <summary>\n        /// The current authenticated user provided after a successful call to\n        /// MobileServiceClient.Login().\n        /// </summary>\n        public MobileServiceUser CurrentUser { get; set; }\n\n        /// <summary>\n        /// Gets or sets the settings used for serialization.\n        /// </summary>\n        public MobileServiceJsonSerializerSettings SerializerSettings\n        {\n            get\n            {\n                return this.Serializer.SerializerSettings;\n            }\n\n            set\n            {\n                if (value == null)\n                {\n                    throw new ArgumentNullException(\"value\");\n                }\n\n                this.Serializer.SerializerSettings = value;\n            }\n        }\n\n        /// <summary>\n        /// Instance of <see cref=\"IMobileServiceSyncContext\"/>\n        /// </summary>\n        public IMobileServiceSyncContext SyncContext\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Gets the serializer that is used with the table.\n        /// </summary>\n        internal MobileServiceSerializer Serializer { get; set; }\n\n        /// <summary>\n        /// Gets the <see cref=\"MobileServiceHttpClient\"/> associated with this client.\n        /// </summary>\n        internal MobileServiceHttpClient HttpClient { get; private set; }\n\n        /// <summary>\n        /// Initializes a new instance of the MobileServiceClient class.\n        /// </summary>\n        /// <param name=\"applicationUrl\">\n        /// The URI for the Microsoft Azure Mobile Service.\n        /// </param>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1054:UriParametersShouldNotBeStrings\", MessageId = \"0#\", Justification = \"Enables easier copy/paste getting started workflow\")]\n        public MobileServiceClient(string applicationUrl)\n            : this(new Uri(applicationUrl))\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the MobileServiceClient class.\n        /// </summary>\n        /// <param name=\"applicationUri\">\n        /// The URI for the Microsoft Azure Mobile Service.\n        /// </param>\n        public MobileServiceClient(Uri applicationUri)\n            : this(applicationUri, null)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the MobileServiceClient class.\n        /// </summary>\n        /// <param name=\"applicationUrl\">\n        /// The URI for the Microsoft Azure Mobile Service.\n        /// </param>\n        /// <param name=\"applicationKey\">\n        /// The application key for the Microsoft Azure Mobile Service.\n        /// </param>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1054:UriParametersShouldNotBeStrings\", MessageId = \"0#\", Justification = \"Enables easier copy/paste getting started workflow\")]\n        public MobileServiceClient(string applicationUrl, string applicationKey)\n            : this(new Uri(applicationUrl), applicationKey)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the MobileServiceClient class.\n        /// </summary>\n        /// <param name=\"applicationUri\">\n        /// The URI for the Microsoft Azure Mobile Service.\n        /// </param>\n        /// <param name=\"applicationKey\">\n        /// The application key for the Microsoft Azure Mobile Service.\n        /// </param> \n        public MobileServiceClient(Uri applicationUri, string applicationKey)\n            : this(applicationUri, applicationKey, null)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the MobileServiceClient class.\n        /// </summary>\n        /// <param name=\"applicationUrl\">\n        /// The URI for the Microsoft Azure Mobile Service.\n        /// </param>\n        /// <param name=\"applicationKey\">\n        /// The application key for the Microsoft Azure Mobile Service.\n        /// </param>\n        /// <param name=\"handlers\">\n        /// Chain of <see cref=\"HttpMessageHandler\" /> instances. \n        /// All but the last should be <see cref=\"DelegatingHandler\"/>s. \n        /// </param>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1054:UriParametersShouldNotBeStrings\", MessageId = \"0#\", Justification = \"Enables easier copy/paste getting started workflow\")]\n        public MobileServiceClient(string applicationUrl, string applicationKey, params HttpMessageHandler[] handlers)\n            : this(new Uri(applicationUrl), applicationKey, handlers)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the MobileServiceClient class.\n        /// </summary>\n        /// <param name=\"applicationUri\">\n        /// The URI for the Microsoft Azure Mobile Service.\n        /// </param>\n        /// <param name=\"applicationKey\">\n        /// The application key for the Microsoft Azure Mobile Service.\n        /// </param> \n        /// <param name=\"handlers\">\n        /// Chain of <see cref=\"HttpMessageHandler\" /> instances. \n        /// All but the last should be <see cref=\"DelegatingHandler\"/>s. \n        /// </param>\n        public MobileServiceClient(Uri applicationUri, string applicationKey, params HttpMessageHandler[] handlers)\n        {\n            if (applicationUri == null)\n            {\n                throw new ArgumentNullException(\"applicationUri\");\n            }\n\n            this.ApplicationUri = applicationUri;\n            this.ApplicationKey = applicationKey;\n            this.applicationInstallationId = GetApplicationInstallationId();\n\n            handlers = handlers ?? EmptyHttpMessageHandlers;\n            this.HttpClient = new MobileServiceHttpClient(handlers, this.ApplicationUri, this.applicationInstallationId, this.ApplicationKey);\n            this.Serializer = new MobileServiceSerializer();\n            this.SyncContext = new MobileServiceSyncContext(this);\n        }\n\n        /// <summary>\n        ///  This is for unit testing only\n        /// </summary>\n        protected MobileServiceClient()\n        {\n\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"IMobileServiceTable\"/> instance, which provides \n        /// untyped data operations for that table.\n        /// </summary>\n        /// <param name=\"tableName\">\n        /// The name of the table.\n        /// </param>\n        /// <returns>\n        /// The table.\n        /// </returns>\n        public IMobileServiceTable GetTable(string tableName)\n        {\n            ValidateTableName(tableName);\n\n            return new MobileServiceTable(tableName, this);\n        }\n\n\n        /// <summary>\n        /// Returns a <see cref=\"IMobileServiceSyncTable\"/> instance, which provides\n        /// untyped data operations for that table.\n        /// </summary>\n        /// <param name=\"tableName\">The name of the table.</param>\n        /// <returns>The table.</returns>\n        public IMobileServiceSyncTable GetSyncTable(string tableName)\n        {\n            return GetSyncTable(tableName, MobileServiceTableKind.Table);\n        }\n\n        internal MobileServiceSyncTable GetSyncTable(string tableName, MobileServiceTableKind kind)\n        {\n            ValidateTableName(tableName);\n\n            return new MobileServiceSyncTable(tableName, kind, this);\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"IMobileServiceTable{T}\"/> instance, which provides \n        /// strongly typed data operations for that table.\n        /// </summary>\n        /// <typeparam name=\"T\">\n        /// The type of the instances in the table.\n        /// </typeparam>\n        /// <returns>\n        /// The table.\n        /// </returns>\n        public IMobileServiceTable<T> GetTable<T>()\n        {\n            string tableName = this.SerializerSettings.ContractResolver.ResolveTableName(typeof(T));\n            return new MobileServiceTable<T>(tableName, this);\n        }\n\n\n        /// <summary>\n        /// Returns a <see cref=\"IMobileServiceSyncTable{T}\"/> instance, which provides \n        /// strongly typed data operations for local table.\n        /// </summary>\n        /// <typeparam name=\"T\">\n        /// The type of the instances in the table.\n        /// </typeparam>\n        /// <returns>\n        /// The table.\n        /// </returns>\n        public IMobileServiceSyncTable<T> GetSyncTable<T>()\n        {\n            string tableName = this.SerializerSettings.ContractResolver.ResolveTableName(typeof(T));\n            return new MobileServiceSyncTable<T>(tableName, MobileServiceTableKind.Table, this);\n        }\n\n        /// <summary>\n        /// Logs a user into a Windows Azure Mobile Service with the provider and optional token object.\n        /// </summary>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"token\">\n        /// Provider specific object with existing OAuth token to log in with.\n        /// </param>\n        /// <remarks>\n        /// The token object needs to be formatted depending on the specific provider. These are some\n        /// examples of formats based on the providers:\n        /// <list type=\"bullet\">\n        ///   <item>\n        ///     <term>MicrosoftAccount</term>\n        ///     <description><code>{\"authenticationToken\":\"&lt;the_authentication_token&gt;\"}</code></description>\n        ///   </item>\n        ///   <item>\n        ///     <term>Facebook</term>\n        ///     <description><code>{\"access_token\":\"&lt;the_access_token&gt;\"}</code></description>\n        ///   </item>\n        ///   <item>\n        ///     <term>Google</term>\n        ///     <description><code>{\"access_token\":\"&lt;the_access_token&gt;\"}</code></description>\n        ///   </item>\n        /// </list>\n        /// </remarks>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1726:UsePreferredTerms\", MessageId = \"Login\", Justification = \"Login is more appropriate than LogOn for our usage.\")]\n        public Task<MobileServiceUser> LoginAsync(MobileServiceAuthenticationProvider provider, JObject token)\n        {\n            if (!Enum.IsDefined(typeof(MobileServiceAuthenticationProvider), provider))\n            {\n                throw new ArgumentOutOfRangeException(\"provider\");\n            }\n\n            return this.LoginAsync(provider.ToString(), token);\n        }\n\n        /// <summary>\n        /// Logs a user into a Microsoft Azure Mobile Service with the provider and optional token object.\n        /// </summary>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"token\">\n        /// Provider specific object with existing OAuth token to log in with.\n        /// </param>\n        /// <remarks>\n        /// The token object needs to be formatted depending on the specific provider. These are some\n        /// examples of formats based on the providers:\n        /// <list type=\"bullet\">\n        ///   <item>\n        ///     <term>MicrosoftAccount</term>\n        ///     <description><code>{\"authenticationToken\":\"&lt;the_authentication_token&gt;\"}</code></description>\n        ///   </item>\n        ///   <item>\n        ///     <term>Facebook</term>\n        ///     <description><code>{\"access_token\":\"&lt;the_access_token&gt;\"}</code></description>\n        ///   </item>\n        ///   <item>\n        ///     <term>Google</term>\n        ///     <description><code>{\"access_token\":\"&lt;the_access_token&gt;\"}</code></description>\n        ///   </item>\n        /// </list>\n        /// </remarks>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public Task<MobileServiceUser> LoginAsync(string provider, JObject token)\n        {\n            if (token == null)\n            {\n                throw new ArgumentNullException(\"token\");\n            }\n\n            MobileServiceTokenAuthentication auth = new MobileServiceTokenAuthentication(this, provider, token, parameters: null);\n            return auth.LoginAsync();\n        }\n\n        /// <summary>\n        /// Log a user out.\n        /// </summary>\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1726:UsePreferredTerms\", MessageId = \"Logout\", Justification = \"Logout is preferred by design\")]\n        public void Logout()\n        {\n            this.CurrentUser = null;\n        }\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using an HTTP POST.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of instance returned from the Microsoft Azure Mobile Service.</typeparam>    \n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        public Task<T> InvokeApiAsync<T>(string apiName, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            return this.InvokeApiAsync<string, T>(apiName, null, null, null, cancellationToken);\n        }\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using an HTTP POST with\n        /// support for sending HTTP content.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of instance sent to the Microsoft Azure Mobile Service.</typeparam>\n        /// <typeparam name=\"U\">The type of instance returned from the Microsoft Azure Mobile Service.</typeparam>    \n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"body\">The value to be sent as the HTTP body.</param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        public Task<U> InvokeApiAsync<T, U>(string apiName, T body, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            return this.InvokeApiAsync<T, U>(apiName, body, null, null, cancellationToken);\n        }\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using the specified HTTP Method.\n        /// Additional data can be passed using the query string.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of instance sent to the Microsoft Azure Mobile Service.</typeparam>\n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"method\">The HTTP method.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        public Task<T> InvokeApiAsync<T>(string apiName, HttpMethod method, IDictionary<string, string> parameters, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            return this.InvokeApiAsync<string, T>(apiName, null, method, parameters, cancellationToken);\n        }\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using the specified HTTP Method.\n        /// Additional data can be sent though the HTTP content or the query string.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of instance sent to the Microsoft Azure Mobile Service.</typeparam>\n        /// <typeparam name=\"U\">The type of instance returned from the Microsoft Azure Mobile Service.</typeparam>    \n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"body\">The value to be sent as the HTTP body.</param>\n        /// <param name=\"method\">The HTTP method.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        public async Task<U> InvokeApiAsync<T, U>(string apiName, T body, HttpMethod method, IDictionary<string, string> parameters, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(apiName))\n            {\n                throw new ArgumentNullException(\"apiName\");\n            }\n\n            MobileServiceSerializer serializer = this.Serializer;\n            string content = null;\n            if (body != null)\n            {\n                content = serializer.Serialize(body).ToString();\n            }\n\n            string response = await this.InternalInvokeApiAsync(apiName, content, method, parameters, MobileServiceFeatures.TypedApiCall, cancellationToken);\n            if (string.IsNullOrEmpty(response))\n            {\n                return default(U);\n            }\n            return serializer.Deserialize<U>(JToken.Parse(response));\n        }\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using an HTTP POST.\n        /// </summary>\n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns></returns>\n        public Task<JToken> InvokeApiAsync(string apiName, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            return this.InvokeApiAsync(apiName, null, null, null, cancellationToken);\n        }\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using an HTTP POST, with\n        /// support for sending HTTP content.\n        /// </summary>\n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"body\">The value to be sent as the HTTP body.</param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        public Task<JToken> InvokeApiAsync(string apiName, JToken body, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            return this.InvokeApiAsync(apiName, body, defaultHttpMethod, null, cancellationToken);\n        }\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using the specified HTTP Method.\n        /// Additional data will sent to through the query string.\n        /// </summary>\n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"method\">The HTTP method.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in the request URI query string.\n        /// </param>        \n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        public Task<JToken> InvokeApiAsync(string apiName, HttpMethod method, IDictionary<string, string> parameters, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            return this.InvokeApiAsync(apiName, null, method, parameters, cancellationToken);\n        }\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service using the specified HTTP method.\n        /// Additional data can be sent though the HTTP content or the query string.\n        /// </summary>\n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"body\">The value to be sent as the HTTP body.</param>\n        /// <param name=\"method\">The HTTP Method.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        public async Task<JToken> InvokeApiAsync(string apiName, JToken body, HttpMethod method, IDictionary<string, string> parameters, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(apiName))\n            {\n                throw new ArgumentNullException(\"apiName\");\n            }\n\n            string content = null;\n            if (body != null)\n            {\n                switch (body.Type)\n                {\n                    case JTokenType.Null:\n                        content = \"null\";\n                        break;\n                    case JTokenType.Boolean:\n                        content = body.ToString().ToLowerInvariant();\n                        break;\n                    default:\n                        content = body.ToString();\n                        break;\n                }\n            }\n\n            string response = await this.InternalInvokeApiAsync(apiName, content, method, parameters, MobileServiceFeatures.JsonApiCall, cancellationToken);\n            return response.ParseToJToken(this.SerializerSettings);\n        }\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Windows Azure Mobile Service using the specified HttpMethod.\n        /// Additional data can be sent though the HTTP content or the query string. \n        /// </summary>\n        /// <param name=\"apiName\">The name of the custom AP.</param>\n        /// <param name=\"content\">The HTTP content.</param>\n        /// <param name=\"method\">The HTTP method.</param>\n        /// <param name=\"requestHeaders\">\n        /// A dictionary of user-defined headers to include in the HttpRequest.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The HTTP Response from the custom api invocation.</returns>\n        public async Task<HttpResponseMessage> InvokeApiAsync(string apiName, HttpContent content, HttpMethod method, IDictionary<string, string> requestHeaders, IDictionary<string, string> parameters, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            method = method ?? defaultHttpMethod;\n            HttpResponseMessage response = await this.HttpClient.RequestAsync(method, CreateAPIUriString(apiName, parameters), this.CurrentUser, content, requestHeaders: requestHeaders, features: MobileServiceFeatures.GenericApiCall, cancellationToken: cancellationToken);\n            return response;\n        }\n\n        /// <summary>\n        /// Invokes a user-defined custom API of a Microsoft Azure Mobile Service.\n        /// </summary>\n        /// <param name=\"apiName\">The name of the custom API.</param>\n        /// <param name=\"content\">The HTTP content, as a string, in json format.</param>\n        /// <param name=\"method\">The HTTP method.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in the request URI query string.\n        /// </param>\n        /// <param name=\"features\">\n        /// Value indicating which features of the SDK are being used in this call. Useful for telemetry.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>The response content from the custom api invocation.</returns>\n        private async Task<string> InternalInvokeApiAsync(string apiName, string content, HttpMethod method, IDictionary<string, string> parameters, MobileServiceFeatures features, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            method = method ?? defaultHttpMethod;\n            if (parameters != null && parameters.Count > 0)\n            {\n                features |= MobileServiceFeatures.AdditionalQueryParameters;\n            }\n\n            MobileServiceHttpResponse response = await this.HttpClient.RequestAsync(method, CreateAPIUriString(apiName, parameters), this.CurrentUser, content, false, features: features, cancellationToken: cancellationToken);\n            return response.Content;\n        }\n\n        /// <summary>\n        /// Helper function to assemble the Uri for a given custom api.\n        /// </summary>\n        /// <param name=\"apiName\"></param>\n        /// <param name=\"parameters\"></param>\n        /// <returns></returns>\n        private string CreateAPIUriString(string apiName, IDictionary<string, string> parameters = null)\n        {\n            string uriFragment = apiName.StartsWith(\"/\") ? apiName : string.Format(CultureInfo.InvariantCulture, \"api/{0}\", apiName);\n            string queryString = MobileServiceUrlBuilder.GetQueryString(parameters, useTableAPIRules: false);\n\n            return MobileServiceUrlBuilder.CombinePathAndQuery(uriFragment, queryString);\n        }\n\n        /// <summary>\n        /// Implemenation of <see cref=\"IDisposable\"/>\n        /// </summary>\n        public void Dispose()\n        {\n            this.Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Implemenation of <see cref=\"IDisposable\"/> for\n        /// derived classes to use.\n        /// </summary>\n        /// <param name=\"disposing\">\n        /// Indicates if being called from the Dispose() method\n        /// or the finalizer.\n        /// </param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                ((MobileServiceSyncContext)this.SyncContext).Dispose();\n                // free managed resources\n                this.HttpClient.Dispose();\n            }\n        }\n\n        private static void ValidateTableName(string tableName)\n        {\n            if (tableName == null)\n            {\n                throw new ArgumentNullException(\"tableName\");\n            }\n\n            if (string.IsNullOrWhiteSpace(tableName))\n            {\n                throw new ArgumentException(\n                    string.Format(\n                        CultureInfo.InvariantCulture,\n                        \"{0} cannot be null, empty or only whitespace.\",\n                        \"tableName\"));\n            }\n        }\n\n        /// <summary>\n        /// Gets the ID used to identify this installation of the\n        /// application to provide telemetry data.  It will either be retrieved\n        /// from local settings or generated fresh.\n        /// </summary>\n        /// <returns>\n        /// An installation ID.\n        /// </returns>\n        private string GetApplicationInstallationId()\n        {\n            // Try to get the AppInstallationId from settings\n            string installationId = null;\n            object setting = null;\n\n            IApplicationStorage applicationStorage = Platform.Instance.ApplicationStorage;\n\n            if (applicationStorage.TryReadSetting(ConfigureAsyncInstallationConfigPath, out setting))\n            {\n                JToken config = null;\n                try\n                {\n                    config = JToken.Parse(setting as string);\n                    installationId = (string)config[ConfigureAsyncApplicationIdKey];\n                }\n                catch (Exception)\n                {\n                }\n            }\n\n            // Generate a new AppInstallationId if we failed to find one\n            if (installationId == null)\n            {\n                installationId = Guid.NewGuid().ToString();\n                JObject jobject = new JObject();\n                jobject[ConfigureAsyncApplicationIdKey] = installationId;\n                string configText = jobject.ToString();\n                applicationStorage.WriteSetting(ConfigureAsyncInstallationConfigPath, configText);\n            }\n\n            return installationId;\n        }\n\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/MobileServiceFeatures.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// The list of mobile services features exposed in the HTTP headers of requests\n    /// for tracking usages.\n    /// </summary>\n    [Flags]\n    internal enum MobileServiceFeatures\n    {\n        None = 0x00,\n\n        /// <summary>\n        /// Feature header value for requests going through typed tables.\n        /// </summary>\n        [EnumValue(\"TT\")]\n        TypedTable = 0x01,\n\n        /// <summary>\n        /// Feature header value for requests going through untyped (JSON) tables.\n        /// </summary>\n        [EnumValue(\"TU\")]\n        UntypedTable = 0x02,\n\n        /// <summary>\n        /// Feature header value for API calls using typed (generic) overloads.\n        /// </summary>\n        [EnumValue(\"AT\")]\n        TypedApiCall = 0x04,\n\n        /// <summary>\n        /// Feature header value for API calls using JSON overloads.\n        /// </summary>\n        [EnumValue(\"AJ\")]\n        JsonApiCall = 0x08,\n\n        /// <summary>\n        /// Feature header value for API calls using the generic (HTTP) overload.\n        /// </summary>\n        [EnumValue(\"AG\")]\n        GenericApiCall = 0x10,\n\n        /// <summary>\n        /// Feature header value for table / API requests which include additional query string parameters.\n        /// </summary>\n        [EnumValue(\"QS\")]\n        AdditionalQueryParameters = 0x20,\n\n        /// <summary>\n        /// Feature header value for requests originated from the <see cref=\"MobileServiceCollection{T}\"/> and derived types.\n        /// </summary>\n        [EnumValue(\"TC\")]\n        TableCollection = 0x40,\n\n        /// <summary>\n        /// Feature header value for offline initiated requests\n        /// </summary>\n        [EnumValue(\"OL\")]\n        Offline = 0x80,\n\n        /// <summary>\n        /// Feature header value for following continuation links\n        /// </summary>\n        [EnumValue(\"LH\")]\n        ReadWithLinkHeader = 0x100,\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/MobileServiceUrlBuilder.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// A static helper class for building URLs for Mobile Service tables.\n    /// </summary>\n    internal static class MobileServiceUrlBuilder\n    {\n        /// <summary>\n        /// Converts a dictionary of string key-value pairs into a URI query string.\n        /// </summary>\n        /// <remarks>\n        /// Both the query parameter and value will be percent encoded before being\n        /// added to the query string.\n        /// </remarks>\n        /// <param name=\"parameters\">\n        /// The parameters from which to create the query string.\n        /// </param>\n        /// <param name=\"useTableAPIRules\">\n        /// A boolean to indicate if query string paramters should be checked that they do not contain system added\n        /// querystring. This currently only means to check if they match oData  queries (beginn with a $)\n        /// </param>\n        /// <returns>\n        /// A URI query string.\n        /// </returns>\n        public static string GetQueryString(IDictionary<string, string> parameters, bool useTableAPIRules = true)\n        {\n            string parametersString = null;\n\n            if (parameters != null && parameters.Count > 0)\n            {\n                parametersString = \"\";\n                string formatString = \"{0}={1}\";\n                foreach (var parameter in parameters)\n                {\n                    if (useTableAPIRules && parameter.Key.StartsWith(\"$\"))\n                    {\n                        throw new ArgumentException(\n                            string.Format(\n                                CultureInfo.InvariantCulture,\n                                \"{0} is an invalid user-defined query string parameter. User-defined query string parameters must not begin with a \\'$\\'.\",\n                                parameter.Key),\n                            \"parameters\");\n                    }\n\n                    string escapedKey = Uri.EscapeDataString(parameter.Key);\n                    string escapedValue = Uri.EscapeDataString(parameter.Value);\n                    parametersString += string.Format(CultureInfo.InvariantCulture, \n                                                      formatString, \n                                                      escapedKey, \n                                                      escapedValue);\n                    formatString = \"&{0}={1}\";\n                }\n            }\n\n            return parametersString;\n        }\n\n        /// <summary>\n        /// Concatenates the URI query string to the URI path.\n        /// </summary>\n        /// <param name=\"path\">\n        /// The URI path.\n        /// </param>\n        /// <param name=\"queryString\">\n        /// The query string.\n        /// </param>\n        /// <returns>\n        /// The concatenated URI path and query string.\n        /// </returns>\n        public static string CombinePathAndQuery(string path, string queryString)\n        {\n            Debug.Assert(!string.IsNullOrEmpty(path));\n\n            if (!string.IsNullOrEmpty(queryString))\n            {\n                path = string.Format(CultureInfo.InvariantCulture, \"{0}?{1}\", path,queryString.TrimStart('?'));\n            }\n\n            return path;\n        }\n\n        /// <summary>\n        /// Concatenates two URI path segments into a single path and ensures\n        /// that there is not an extra forward-slash.\n        /// </summary>\n        /// <param name=\"path1\">\n        /// The first path.\n        /// </param>\n        /// <param name=\"path2\">\n        /// The second path.\n        /// </param>\n        /// <returns>\n        /// \n        /// </returns>\n        public static string CombinePaths(string path1, string path2)\n        {\n            if (path1.Length == 0)\n            {\n                return path2;\n            }\n\n            if (path2.Length == 0)\n            {\n                return path1;\n            }\n\n            return string.Format(CultureInfo.InvariantCulture,\n                                 \"{0}/{1}\",\n                                 path1.TrimEnd('/'),\n                                 path2.TrimStart('/'));\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/MobileServiceUser.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An authenticated Mobile Services user.\n    /// </summary>\n    public class MobileServiceUser\n    {\n        /// <summary>\n        /// Initializes a new instance of the MobileServiceUser class.\n        /// </summary>\n        /// <param name=\"userId\">\n        /// User id of a successfully authenticated user.\n        /// </param>\n        public MobileServiceUser(string userId)\n        {\n            this.UserId = userId;\n        }\n\n        /// <summary>\n        /// Gets or sets the user id of a successfully authenticated user.\n        /// </summary>\n        public string UserId { get; set; }\n\n        /// <summary>\n        /// A Microsoft Azure Mobile Services authentication token for the user given by\n        /// the <see cref=\"UserId\"/>. If non-null, the authentication token will be \n        /// included in all requests made to the Microsoft Azure Mobile Service, allowing \n        /// the client to perform all actions on the Microsoft Azure Mobile Service that \n        /// require authenticated-user level permissions.\n        /// </summary>\n        public string MobileServiceAuthenticationToken { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Platform/IApplicationStorage.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An interface for platform-specific assemblies to implement to support \n    /// accessing settings in application storage.\n    /// </summary>\n    /// <remarks>\n    /// Only base data types are supported for setting values: int, string, bool, \n    /// etc.\n    /// </remarks>\n    internal interface IApplicationStorage\n    {\n        /// <summary>\n        /// Tries to read a setting's value from application storage. \n        /// </summary>\n        /// <param name=\"name\">\n        /// The name of the setting to try to read.\n        /// </param>\n        /// <param name=\"value\">\n        /// Upon returning, if the return value was <c>true</c>, will be the value\n        /// of the given setting; will be <c>null</c> otherwise.\n        /// </param>\n        /// <returns>\n        /// <c>true</c> if the setting existed and was successfully read; \n        /// <c>false</c> otherwise.\n        /// </returns>\n        /// <exception cref=\"ArgumentException\">\n        /// Thrown if the setting name is <c>null</c> or an empty string.\n        /// </exception>\n        bool TryReadSetting(string name, out object value);\n\n        /// <summary>\n        /// Writes the setting's value to application storage.\n        /// </summary>\n        /// <param name=\"name\">\n        /// The name of the setting to write.\n        /// </param>\n        /// <param name=\"value\">\n        /// The value to write.\n        /// </param>\n        /// <exception cref=\"ArgumentException\">\n        /// Thrown if the setting name is <c>null</c> or empty.\n        /// </exception>\n        /// <exception cref=\"InvalidOperationException\">\n        /// Thrown if an error occurs while writing the setting.\n        /// </exception>\n        void WriteSetting(string name, object value);\n\n        /// <summary>\n        /// Force the ApplicationStorage to save any state that is still in memory\n        /// </summary>\n        void Save();\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Platform/IExpressionUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An interface for platform-specific assemblies to provide utility functions\n    /// regarding Linq expressions.\n    /// </summary>\n    internal interface IExpressionUtility\n    {\n        /// <summary>\n        /// Evaluate all subtrees of an expression that aren't dependent on\n        /// parameters to that expression and replace the subtree with a\n        /// constant expression.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to partially evaluate.\n        /// </param>\n        /// <returns>\n        /// An expression in which every node is either a constant or part of\n        /// a subtree that depends on one or more of the expression's parameters.\n        /// </returns>\n        Expression PartiallyEvaluate(Expression expression);\n\n        /// <summary>\n        /// Returns all of the <see cref=\"MemberExpression\"/> instances in the \n        /// expression hierarchy of the <paramref name=\"expression\"/> regardless \n        /// of their depth in the hierarchy.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to search for descendant <see cref=\"MemberExpression\"/> \n        /// instances.\n        /// </param>\n        /// <returns>\n        /// A collection of descendant <see cref=\"MemberExpression\"/> instances.\n        /// </returns>\n        IEnumerable<MemberExpression> GetMemberExpressions(Expression expression);\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Platform/IPlatform.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides an interface that platform-specific Mobile Services assemblies \n    /// can implement to provide functionality required by the Mobile Services SDK \n    /// that is platform specific.\n    /// </summary>\n    internal interface IPlatform\n    {\n        /// <summary>\n        /// Returns a platform-specific implemention of application storage.\n        /// </summary>\n        IApplicationStorage ApplicationStorage { get; }\n\n        /// <summary>\n        /// Returns a platform-specific implemention of platform information.\n        /// </summary>\n        IPlatformInformation PlatformInformation { get; }\n\n        /// <summary>\n        /// Returns a platform-specific implementation of a utility class\n        /// that provides functionality for manipulating \n        /// <see cref=\"System.Linq.Expressions.Expression\"/> instances.\n        /// </summary>\n        IExpressionUtility ExpressionUtility { get; }\n\n        /// <summary>\n        /// Returns a platform-specific implementation of a utility class\n        /// that provides functionality for platform-specifc push capabilities.\n        /// </summary>\n        IPushUtility PushUtility { get; }\n\n        /// <summary>\n        /// Retrieves an ApplicationStorage where all items stored are segmented from other stored items\n        /// </summary>\n        /// <param name=\"name\">The name of the segemented area in application storage</param>\n        /// <returns>The specific instance of that segment</returns>\n        IApplicationStorage GetNamedApplicationStorage(string name);\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Platform/IPlatformInformation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides information about the platform it is running on.\n    /// </summary>\n    internal interface IPlatformInformation\n    {\n        /// <summary>\n        /// The architecture of the platform.\n        /// </summary>\n        string OperatingSystemArchitecture { get; }\n\n        /// <summary>\n        /// The name of the operating system of the platform.\n        /// </summary>\n        string OperatingSystemName { get; }\n\n        /// <summary>\n        /// The version of the operating system of the platform.\n        /// </summary>\n        string OperatingSystemVersion { get; }\n\n        /// <summary>\n        /// Boolean indicating if the platform is running on an emulator.\n        /// </summary>\n        bool IsEmulator { get; }\n\n        /// <summary>\n        /// Gets the platform library version.\n        /// </summary>\n        string Version { get; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Platform/IPushUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An interface for platform-specific assemblies to provide utility functions\n    /// regarding Push capabilities.\n    /// </summary>\n    public interface IPushUtility\n    {\n        /// <summary>\n        /// Return a new, strongly typed native registration instance\n        /// </summary>        \n        /// <returns>\n        /// An object to JSON deserialize into\n        /// </returns>\n        Registration GetNewNativeRegistration();\n\n        /// <summary>\n        /// Return a new, strongly typed template registration instance\n        /// </summary>        \n        /// <returns>\n        /// An object to JSON deserialize into\n        /// </returns>\n        Registration GetNewTemplateRegistration();\n\n        /// <summary>\n        /// Return the string describing the notification platform\n        /// </summary>        \n        /// <returns>\n        /// String describing notfication platform. Examples: gcm, apns, wns\n        /// </returns>\n        string GetPlatform();\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Platform/Platform.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Globalization;\nusing System.Reflection;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides access to platform-specific framework API's.\n    /// </summary>\n    internal static class Platform\n    {\n        /// <summary>\n        /// The string value to use for the operating system name, arch, or version if\n        /// the value is unknown.\n        /// </summary>\n        public const string UnknownValueString = \"--\";\n\n        private static IPlatform current;\n\n        /// <summary>\n        /// Name of the assembly containing the Class with the <see cref=\"Platform.PlatformTypeFullName\"/> name.\n        /// </summary>\n        public static string PlatformAssemblyName = \"Microsoft.WindowsAzure.Mobile.Ext\";\n\n        /// <summary>\n        /// Name of the type implementing <see cref=\"IPlatform\"/>.\n        /// </summary>\n        public static string PlatformTypeFullName = \"Microsoft.WindowsAzure.MobileServices.CurrentPlatform\";\n\n        /// <summary>\n        /// Gets the current platform. If none is loaded yet, accessing this property triggers platform resolution.\n        /// </summary>\n        public static IPlatform Instance\n        {\n            get\n            {\n                // create if not yet created\n                if (current == null)\n                {\n                    //assume the platform assembly has the same key, same version and same culture\n                    // as the assembly where the IPlatformProvider interface lives.\n                    var provider = typeof(IPlatform);\n                    var asm = new AssemblyName(provider.GetTypeInfo().Assembly.FullName);\n                    //change name to the specified name\n                    asm.Name = PlatformAssemblyName;\n                    var name = PlatformTypeFullName + \", \" + asm.FullName;\n\n                    //look for the type information but do not throw if not found\n                    var type = Type.GetType(name, false);\n                    if (type != null)\n                    {\n                        // create type\n                        // since we are the only one implementing this interface\n                        // this cast is safe.\n                        current = (IPlatform)Activator.CreateInstance(type);\n                    }\n                    else\n                    {\n                        // throw\n                        ThrowForMissingPlatformAssembly();\n                    }\n                }\n\n                return current;\n            }\n\n            // keep this public so we can set a Platform for unit testing.\n            set\n            {\n                current = value;\n            }\n        }\n\n        /// <summary>\n        /// Method to throw an exception in case no Platform assembly could be found.\n        /// </summary>\n        private static void ThrowForMissingPlatformAssembly()\n        {\n            AssemblyName portable = new AssemblyName(typeof(Platform).GetTypeInfo().Assembly.FullName);\n\n            throw new InvalidOperationException(\n                string.Format(CultureInfo.InvariantCulture,\n                              \"A Microsoft Azure Mobile Services assembly for the current platform was not found. Ensure that the current project references both {0} and the following platform-specific assembly: {1}.\",\n                            portable.Name,\n                            PlatformAssemblyName));\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Platform/PreserveAttribute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// When applied to a target (e.g. assembly, class, member, etc.), instructs the Xamarin linker to preserve that target\n    /// in the linking process result.\n    /// </summary>\n    [AttributeUsage(System.AttributeTargets.All)]\n    public sealed class PreserveAttribute : System.Attribute\n    {\n        public bool AllMembers;\n        public bool Conditional;\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Microsoft Corporation\")]\n[assembly: AssemblyProduct(\"Microsoft Azure Mobile Services SDK\")]\n[assembly: AssemblyCopyright(\"© Microsoft Corporation. All rights reserved.\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n\n#if Sign\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Ext, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.UI, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Test.Unit, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Android.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"MicrosoftWindowsAzureMobileiOSTest, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Win8.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.WP8.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.WP81.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Net45.Vb.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n\n#else\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Ext\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.UI\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Test\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Test.Unit\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Android.Test\")]\n[assembly: InternalsVisibleTo(\"MicrosoftWindowsAzureMobileiOSTest\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Win8.Test\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.WP8.Test\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.WP81.Test\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Net45.Vb.Test\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.Test\")]\n[assembly: InternalsVisibleTo(\"DynamicProxyGenAssembly2\")]\n#endif\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Push/ILocalStorageManager.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides a platform-specific implementation to allow storage of registrationId to registrationName mapping\n    /// </summary>\n    internal interface ILocalStorageManager\n    {\n        /// <summary>\n        /// Gets a value indicating whether local storage data needs to be refreshed.\n        /// </summary>\n        bool IsRefreshNeeded { get; set; }\n\n        /// <summary>\n        /// Gets the DeviceId of all registrations in this instance of ILocalStorageManager\n        /// </summary>\n        string PushHandle { get; }\n\n        /// <summary>\n        /// Get the registration from local storage\n        /// </summary>\n        /// <param name=\"registrationName\">The name of the registration mapping to search for</param>\n        /// <returns>The StoredRegistrationEntry if it exists or null if it does not.</returns>\n        StoredRegistrationEntry GetRegistration(string registrationName);\n\n        /// <summary>\n        /// Delete a registration from local storage by name\n        /// </summary>\n        /// <param name=\"registrationName\">The name of the registration mapping to delete.</param>\n        void DeleteRegistrationByName(string registrationName);\n\n        /// <summary>\n        /// Delete a registration from local storage by registrationId\n        /// </summary>\n        /// <param name=\"registrationId\">The registrationId of the registration mapping to delete.</param>\n        void DeleteRegistrationByRegistrationId(string registrationId);\n\n        /// <summary>\n        /// Update a registration mapping and the deviceId in local storage by registrationName\n        /// </summary>\n        /// <param name=\"registrationName\">The name of the registration mapping to update.</param>\n        /// <param name=\"registrationId\">The registrationId to update.</param>\n        /// <param name=\"registrationDeviceId\">The device Id to update the ILocalStorageManager to.</param>\n        void UpdateRegistrationByName(string registrationName, string registrationId, string registrationDeviceId);\n\n        /// <summary>\n        /// Update a registration mapping and the deviceId in local storage by registrationId\n        /// </summary>\n        /// <param name=\"registrationId\">The registrationId of the registration mapping to update.</param>\n        /// <param name=\"registrationName\">The registration name to update.</param>\n        /// <param name=\"registrationDeviceId\">The device Id to update the ILocalStorageManager to.</param>\n        void UpdateRegistrationByRegistrationId(string registrationId, string registrationName, string registrationDeviceId);\n\n        /// <summary>\n        /// Clear all registrations from local storage.\n        /// </summary>\n        void ClearRegistrations();\n\n        /// <summary>\n        /// Ensure that the ILocalStorageManager instance has the updated DeviceId\n        /// </summary>\n        /// <param name=\"refreshedDeviceId\">The deviceId to update</param>\n        void RefreshFinished(string refreshedDeviceId);\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Push/IRegistrationManager.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal interface IRegistrationManager\n    {\n        ILocalStorageManager LocalStorageManager { get; }\n\n        Task DeleteRegistrationsForChannelAsync(string deviceId);\n        Task<List<Registration>> ListRegistrationsAsync(string deviceId);\n        Task RegisterAsync(Registration registration);\n        Task UnregisterAsync(string registrationName);\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Push/LocalStorageManager.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// The value will be stored in the following keys:\n    ///     Version: the storage version\n    ///     DeviceId: the latest deviceId used for creation.\n    ///     Registrations: Json representation of Dictionary of StoredRegistrationEntry. (Registration name and RegistrationId)\n    /// When create/delete is called, deviceId will be updated.\n    /// When create/update/get/delete registrations, registrations value will be updated.\n    /// </summary>\n    internal class LocalStorageManager : ILocalStorageManager\n    {\n        internal const string StorageVersion = \"v1.1.0\";\n        internal const string KeyNameVersion = \"Version\";\n        internal const string KeyNamePushHandle = \"Channel\";\n        internal const string KeyNameRegistrations = \"Registrations\";\n\n        private readonly IApplicationStorage storage;\n\n        private string pushHandle;\n        private IDictionary<string, StoredRegistrationEntry> registrations;\n\n        public LocalStorageManager(string name)\n        {\n            this.storage = Platform.Instance.GetNamedApplicationStorage(name);\n\n            this.InitializeRegistrationInfoFromStorage();\n        }\n\n        public bool IsRefreshNeeded { get; set; }\n\n        public string PushHandle\n        {\n            get\n            {\n                return this.pushHandle;\n            }\n\n            private set\n            {\n                if (this.pushHandle == null || !this.pushHandle.Equals(value))\n                {\n                    this.pushHandle = value;\n                    this.Flush();\n                }\n            }\n        }\n\n        public StoredRegistrationEntry GetRegistration(string registrationName)\n        {\n            lock (this.registrations)\n            {\n                StoredRegistrationEntry reg;\n                if (this.registrations.TryGetValue(registrationName, out reg))\n                {\n                    return reg;\n                }\n            }\n\n            return null;\n        }\n\n        public void DeleteRegistrationByName(string registrationName)\n        {\n            lock (this.registrations)\n            {\n                if (this.registrations.Remove(registrationName))\n                {\n                    this.Flush();\n                }\n            }\n        }\n\n        public void DeleteRegistrationByRegistrationId(string registrationId)\n        {\n            lock (this.registrations)\n            {\n                var found = this.registrations.FirstOrDefault(v => v.Value.RegistrationId.Equals(registrationId));\n                if (!found.Equals(default(KeyValuePair<string, StoredRegistrationEntry>)))\n                {\n                    this.DeleteRegistrationByName(found.Key);\n                }\n            }\n        }\n\n        public void UpdateRegistrationByName(string registrationName, string registrationId, string registrationDeviceId)\n        {\n            if (string.IsNullOrEmpty(registrationName))\n            {\n                registrationName = Registration.NativeRegistrationName;\n            }\n\n            StoredRegistrationEntry cacheReg = new StoredRegistrationEntry(registrationName, registrationId);\n            lock (this.registrations)\n            {\n                this.registrations[registrationName] = cacheReg;\n                this.pushHandle = registrationDeviceId;\n                this.Flush();\n            }\n        }\n\n        public void UpdateRegistrationByRegistrationId(string registrationId, string registrationName, string registrationDeviceId)\n        {\n            lock (this.registrations)\n            {\n                // update registration is registrationId is in cached registrations, otherwise create new one\n                var found = this.registrations.FirstOrDefault(v => v.Value.RegistrationId.Equals(registrationId));\n                if (!found.Equals(default(KeyValuePair<string, StoredRegistrationEntry>)))\n                {\n                    this.UpdateRegistrationByName(found.Key, found.Value.RegistrationId, registrationDeviceId);\n                }\n                else\n                {\n                    this.UpdateRegistrationByName(registrationName, registrationId, registrationDeviceId);\n                }\n            }\n        }\n\n        public void ClearRegistrations()\n        {\n            lock (this.registrations)\n            {\n                this.registrations.Clear();\n                this.Flush();\n            }\n        }\n\n        public void RefreshFinished(string refreshedDeviceId)\n        {\n            this.PushHandle = refreshedDeviceId;\n            this.IsRefreshNeeded = false;\n        }\n\n        private void Flush()\n        {\n            lock (this.registrations)\n            {\n                this.storage.WriteSetting(KeyNameVersion, StorageVersion);\n                this.storage.WriteSetting(KeyNamePushHandle, this.pushHandle);\n\n                string str = JsonConvert.SerializeObject(this.registrations);\n                this.storage.WriteSetting(KeyNameRegistrations, str);\n\n                this.storage.Save();\n            }\n        }\n\n        private void InitializeRegistrationInfoFromStorage()\n        {\n            // This method is only called from the constructor. As long as this is true, no locks are needed in this method.\n            this.registrations = new Dictionary<string, StoredRegistrationEntry>();\n\n            // Read deviceId\n            object channelObject;\n            if (this.storage.TryReadSetting(KeyNamePushHandle, out channelObject))\n            {\n                this.pushHandle = (string)channelObject;\n            }\n            else\n            {\n                this.IsRefreshNeeded = true;\n                return;\n            }\n\n            // Verify storage version\n            object versionObject;\n            string version;\n            if (this.storage.TryReadSetting(KeyNameVersion, out versionObject))\n            {\n                version = (string)versionObject;\n            }\n            else\n            {\n                this.IsRefreshNeeded = true;\n                return;\n            }\n\n            if (!string.Equals(version, StorageVersion, System.StringComparison.OrdinalIgnoreCase))\n            {\n                this.IsRefreshNeeded = true;\n                return;\n            }\n\n            // read registrations\n            object registrationsObject;\n            string regsStr = null;\n            if (this.storage.TryReadSetting(KeyNameRegistrations, out registrationsObject))\n            {\n                regsStr = (string)registrationsObject;\n                this.IsRefreshNeeded = false;\n            }\n\n            if (!string.IsNullOrEmpty(regsStr))\n            {\n                this.registrations = JsonConvert.DeserializeObject<IDictionary<string, StoredRegistrationEntry>>(regsStr);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Push/PushHttpClient.cs",
    "content": "﻿//------------------------------------------------------------\n// Copyright (c) Microsoft Corporation.  All rights reserved.\n//------------------------------------------------------------\n\nusing System;\nusing System.Net.Http;\n\nusing Newtonsoft.Json;\nusing System.Threading;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    using System.Collections.Generic;\n    using System.Threading.Tasks;\n\n    internal sealed class PushHttpClient\n    {\n        private readonly MobileServiceClient client;\n\n        internal PushHttpClient(MobileServiceClient client)\n        {\n            this.client = client;\n        }\n\n        public async Task<IEnumerable<Registration>> ListRegistrationsAsync(string deviceId, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var response = await this.client.HttpClient.RequestAsync(HttpMethod.Get, string.Format(\"/push/registrations?deviceId={0}&platform={1}\", Uri.EscapeUriString(deviceId), Uri.EscapeUriString(Platform.Instance.PushUtility.GetPlatform())), this.client.CurrentUser, cancellationToken: cancellationToken);\n            return JsonConvert.DeserializeObject<IEnumerable<Registration>>(response.Content, new JsonConverter[] { new RegistrationConverter() });\n        }\n\n        public Task UnregisterAsync(string registrationId, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            return this.client.HttpClient.RequestAsync(HttpMethod.Delete, string.Format(\"/push/registrations/{0}\", Uri.EscapeUriString(registrationId)), this.client.CurrentUser, ensureResponseContent: false, cancellationToken: cancellationToken);\n        }\n\n        public async Task<string> CreateRegistrationIdAsync()\n        {\n            var response = await this.client.HttpClient.RequestAsync(HttpMethod.Post, \"/push/registrationids\", this.client.CurrentUser, null, null);\n            var locationPath = response.Headers.Location.AbsolutePath;\n            return locationPath.Substring(locationPath.LastIndexOf('/') + 1);\n        }\n\n        public async Task CreateOrUpdateRegistrationAsync(Registration registration, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var regId = registration.RegistrationId;\n\n            // Ensures RegistrationId is not serialized and sent to service.\n            registration.RegistrationId = null;\n\n            var content = JsonConvert.SerializeObject(registration);\n            await this.client.HttpClient.RequestAsync(HttpMethod.Put, string.Format(\"/push/registrations/{0}\", Uri.EscapeUriString(regId)), this.client.CurrentUser, content, ensureResponseContent: false, cancellationToken: cancellationToken);\n\n            // Ensure local storage is updated properly\n            registration.RegistrationId = regId;\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Push/Registration.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// RegistrationBase is used as the base class for common properties existing in all Registration types to define a target that is registered for notifications.\n    /// </summary>\n    [JsonObject(MemberSerialization.OptIn)]\n    public class Registration\n    {\n        internal const string NativeRegistrationName = \"$Default\";\n\n        internal Registration()\n        {\n        }\n\n        /// <summary>\n        /// Common Registration constructor for common properties\n        /// </summary>\n        public Registration(string deviceId, IEnumerable<string> tags)\n        {\n            if (string.IsNullOrWhiteSpace(deviceId))\n            {\n                throw new ArgumentNullException(\"deviceId\");\n            }\n\n            if (tags != null)\n            {\n                if (tags.Any(s => s.Contains(\",\")))\n                {\n                    throw new ArgumentException(\"Tags must not contain ','.\", \"tags\");\n                }\n            }\n\n            this.PushHandle = deviceId;\n            this.Tags = tags != null ? new HashSet<string>(tags) : new HashSet<string>();\n        }\n\n        /// <summary>\n        /// The platform's name for its push notifcation system.\n        /// </summary>\n        [JsonProperty(PropertyName = \"platform\")]\n        public string Platform\n        {\n            get\n            {\n                return Microsoft.WindowsAzure.MobileServices.Platform.Instance.PushUtility.GetPlatform();\n            }\n        }\n\n        /// <summary>\n        /// If specified, restricts the notifications that the registration will receive to only those that\n        /// are annotated with one of the specified tags. Note that a tag with a comma in it will be split into two tags.\n        /// </summary>\n        [JsonProperty(PropertyName = \"tags\")]\n        public IEnumerable<string> Tags { get; private set; }\n\n        /// <summary>\n        /// The push handle used to address the device by the push notification service (Possibly nonunique)\n        /// </summary>\n        [JsonProperty(PropertyName = \"deviceId\")]\n        public string PushHandle { get; internal set; }\n\n        /// <summary>\n        /// The registration id.\n        /// </summary>\n        [JsonProperty(PropertyName = \"registrationId\")]\n        public string RegistrationId { get; internal set; }        \n\n        /// <summary>\n        /// The name of the registration is stored locally with the registrationId\n        /// </summary>\n        public virtual string Name\n        {\n            get\n            {\n                return NativeRegistrationName;\n            }\n        }\n\n        /// <summary>\n        /// Internal--Helper method hinting to Json.Net that RegistrationId should not be serialized\n        /// </summary>\n        /// <returns>false</returns>\n        public bool ShouldSerializeRegistrationId()\n        {\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Push/RegistrationClassConverter.cs",
    "content": "﻿//------------------------------------------------------------\n// Copyright (c) Microsoft Corporation.  All rights reserved.\n//------------------------------------------------------------\n\nusing System;\nusing System.Reflection;\n\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class RegistrationConverter : JsonConverter\n    {\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\n        {\n            JObject jsonObject = JObject.Load(reader);\n            object registration = jsonObject.Property(\"templateBody\") == null\n                ? Platform.Instance.PushUtility.GetNewNativeRegistration()\n                : Platform.Instance.PushUtility.GetNewTemplateRegistration();\n            serializer.Populate(jsonObject.CreateReader(), registration);\n            return registration;\n        }\n\n        public override bool CanConvert(Type objectType)\n        {\n            return typeof(Registration).GetTypeInfo().IsAssignableFrom(objectType.GetTypeInfo());\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Push/RegistrationManager.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Help to do registrationManagement and convert the exceptions\n    /// </summary>\n    internal class RegistrationManager : IRegistrationManager\n    {\n        internal readonly PushHttpClient PushHttpClient;        \n\n        public RegistrationManager(PushHttpClient pushHttpClient, ILocalStorageManager storageManager)\n        {\n            this.PushHttpClient = pushHttpClient;\n\n            this.LocalStorageManager = storageManager;\n        }\n\n        public ILocalStorageManager LocalStorageManager { get; private set; }\n\n        /// <summary>\n        /// If local storage does not have this registrationName, we will create a new one.\n        /// If local storage has this name, we will call update.\n        /// If update failed with 404(not found), we will create a new one.\n        /// </summary>\n        /// <param name=\"registration\"></param>\n        /// <returns></returns>\n        public async Task RegisterAsync(Registration registration)\n        {\n            // if localStorage is empty or has different storage version, we need retrieve registrations and refresh local storage\n            if (this.LocalStorageManager.IsRefreshNeeded)\n            {\n                string refreshDeviceId = string.IsNullOrEmpty(this.LocalStorageManager.PushHandle) ? registration.PushHandle : this.LocalStorageManager.PushHandle;\n                await this.RefreshRegistrationsForChannelAsync(refreshDeviceId);\n                this.LocalStorageManager.RefreshFinished(refreshDeviceId);\n            }\n\n            var cached = this.LocalStorageManager.GetRegistration(registration.Name);\n            if (cached != null)\n            {\n                registration.RegistrationId = cached.RegistrationId;\n            }\n            else\n            {\n                await this.CreateRegistrationIdAsync(registration);\n            }\n\n            try\n            {\n                await this.UpsertRegistration(registration);\n                return;\n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                // if we get an RegistrationGoneException (410) from service, we will recreate registration id and will try to do upsert one more time.\n                // The likely cause of this is an expired registration in local storage due to a long unused app.\n                if (e.Response.StatusCode != HttpStatusCode.Gone)\n                {\n                    throw;\n                }\n            }\n\n            // recreate registration id if we encountered a previously expired registrationId\n            await this.CreateRegistrationIdAsync(registration);\n            await this.UpsertRegistration(registration);\n        }        \n\n        public async Task UnregisterAsync(string registrationName)\n        {\n            if (string.IsNullOrWhiteSpace(registrationName))\n            {\n                throw new ArgumentNullException(\"registrationName\");\n            }\n\n            var cached = this.LocalStorageManager.GetRegistration(registrationName);\n            if (cached == null)\n            {\n                return;\n            }\n\n            await this.PushHttpClient.UnregisterAsync(cached.RegistrationId);\n            this.LocalStorageManager.DeleteRegistrationByName(registrationName);\n        }\n\n        public async Task DeleteRegistrationsForChannelAsync(string deviceId)\n        {\n            var registrations = await this.ListRegistrationsAsync(deviceId);\n            foreach (var registration in registrations)\n            {\n                await this.PushHttpClient.UnregisterAsync(registration.RegistrationId);\n                this.LocalStorageManager.DeleteRegistrationByRegistrationId(registration.RegistrationId);\n            }\n\n            // clear local storage\n            this.LocalStorageManager.ClearRegistrations();\n        }\n\n        public async Task<List<Registration>> ListRegistrationsAsync(string deviceId)\n        {\n            return new List<Registration>(await this.PushHttpClient.ListRegistrationsAsync(deviceId));\n        }\n\n        private async Task<Registration> CreateRegistrationIdAsync(Registration registration)\n        {\n            registration.RegistrationId = await this.PushHttpClient.CreateRegistrationIdAsync();\n            this.LocalStorageManager.UpdateRegistrationByName(registration.Name, registration.RegistrationId, registration.PushHandle);\n            return registration;\n        }\n\n        private async Task UpsertRegistration(Registration registration)\n        {\n            await this.PushHttpClient.CreateOrUpdateRegistrationAsync(registration);\n            this.LocalStorageManager.UpdateRegistrationByName(registration.Name, registration.RegistrationId, registration.PushHandle);\n        }\n\n        private async Task RefreshRegistrationsForChannelAsync(string deviceId)\n        {\n            var registrations = new List<Registration>(await this.PushHttpClient.ListRegistrationsAsync(deviceId));\n            var count = registrations.Count;\n            if (count == 0)\n            {\n                this.LocalStorageManager.ClearRegistrations();\n            }\n\n            for (int i = 0; i < count; i++)\n            {\n                this.LocalStorageManager.UpdateRegistrationByRegistrationId(registrations[i].RegistrationId, registrations[i].Name, registrations[i].PushHandle);\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Push/StoredRegistrationEntry.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class StoredRegistrationEntry\n    {\n        public StoredRegistrationEntry(string name, string id)\n        {\n            this.RegistrationName = name;\n            this.RegistrationId = id;\n        }\n\n        public string RegistrationName { get; set; }\n        public string RegistrationId { get; set; }\n\n        public override string ToString()\n        {\n            return JsonConvert.SerializeObject(this);\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.0\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices {\n    using System;\n    using System.Reflection;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Microsoft.WindowsAzure.MobileServices.Resources\", typeof(Resources).GetTypeInfo().Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The Linq IQueryable Select() operation is not supported on the Windows Phone 7.5 platform..\n        /// </summary>\n        internal static string ExpressionUtility_ProjectionNotSupportedOnWindowsPhone75 {\n            get {\n                return ResourceManager.GetString(\"ExpressionUtility_ProjectionNotSupportedOnWindowsPhone75\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The member &apos;{0}&apos; is not supported in the &apos;Where&apos; Mobile Services query expression &apos;{1}&apos;..\n        /// </summary>\n        internal static string FilterBuildingExpressionVisitor_MemberUnsupported {\n            get {\n                return ResourceManager.GetString(\"FilterBuildingExpressionVisitor_MemberUnsupported\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The operator &apos;{0}&apos; is not supported in the &apos;Where&apos; Mobile Services query expression &apos;{1}&apos;..\n        /// </summary>\n        internal static string FilterBuildingExpressionVisitor_OperatorUnsupported {\n            get {\n                return ResourceManager.GetString(\"FilterBuildingExpressionVisitor_OperatorUnsupported\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;{0}&apos; is not supported in a &apos;Where&apos; Mobile Services query expression..\n        /// </summary>\n        internal static string FilterBuildingExpressionVisitor_UnsupportedInWhereExpression {\n            get {\n                return ResourceManager.GetString(\"FilterBuildingExpressionVisitor_UnsupportedInWhereExpression\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to All message handlers except the last must be of the type &apos;{0}&apos;.\n        /// </summary>\n        internal static string HttpMessageHandlerExtensions_WrongHandlerType {\n            get {\n                return ResourceManager.GetString(\"HttpMessageHandlerExtensions_WrongHandlerType\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to An application setting name must be provided. Null, empty or whitespace only names are not allowed..\n        /// </summary>\n        internal static string IApplicationStorage_NullOrWhitespaceSettingName {\n            get {\n                return ResourceManager.GetString(\"IApplicationStorage_NullOrWhitespaceSettingName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Authentication was cancelled by the user..\n        /// </summary>\n        internal static string IAuthenticationBroker_AuthenticationCanceled {\n            get {\n                return ResourceManager.GetString(\"IAuthenticationBroker_AuthenticationCanceled\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Authentication failed with HTTP response code {0}..\n        /// </summary>\n        internal static string IAuthenticationBroker_AuthenticationFailed {\n            get {\n                return ResourceManager.GetString(\"IAuthenticationBroker_AuthenticationFailed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid format of the authentication response..\n        /// </summary>\n        internal static string IAuthenticationBroker_InvalidLoginResponse {\n            get {\n                return ResourceManager.GetString(\"IAuthenticationBroker_InvalidLoginResponse\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Login failed: {0}.\n        /// </summary>\n        internal static string IAuthenticationBroker_LoginFailed {\n            get {\n                return ResourceManager.GetString(\"IAuthenticationBroker_LoginFailed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Authentication is already in progress..\n        /// </summary>\n        internal static string IAuthenticationBroker_LoginInProgress {\n            get {\n                return ResourceManager.GetString(\"IAuthenticationBroker_LoginInProgress\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Authentication has not been started..\n        /// </summary>\n        internal static string IAuthenticationBroker_NoLoginInProgress {\n            get {\n                return ResourceManager.GetString(\"IAuthenticationBroker_NoLoginInProgress\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} cannot be null, empty or only whitespace..\n        /// </summary>\n        internal static string MobileServiceClient_EmptyArgument {\n            get {\n                return ResourceManager.GetString(\"MobileServiceClient_EmptyArgument\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The request could not be completed.  ({0}).\n        /// </summary>\n        internal static string MobileServiceClient_ErrorMessage {\n            get {\n                return ResourceManager.GetString(\"MobileServiceClient_ErrorMessage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The &apos;InnerHandler&apos; property of the delegating handler must be null..\n        /// </summary>\n        internal static string MobileServiceClient_InnerHandlerMustBeNull {\n            get {\n                return ResourceManager.GetString(\"MobileServiceClient_InnerHandlerMustBeNull\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The server did not provide a response with the expected content..\n        /// </summary>\n        internal static string MobileServiceClient_NoResponseContent {\n            get {\n                return ResourceManager.GetString(\"MobileServiceClient_NoResponseContent\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Failed to incrementally load more items of type &apos;{0}&apos;. See the inner exception for details..\n        /// </summary>\n        internal static string MobileServiceCollection_IncrementalLoadingFailed {\n            get {\n                return ResourceManager.GetString(\"MobileServiceCollection_IncrementalLoadingFailed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Loading of more items already in process..\n        /// </summary>\n        internal static string MobileServiceCollection_LoadInProcess {\n            get {\n                return ResourceManager.GetString(\"MobileServiceCollection_LoadInProcess\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The type &apos;{0}&apos; has an integer id member and therefore can not have any members with the system property attribute &apos;{1}&apos;..\n        /// </summary>\n        internal static string MobileServiceContractResolver_IntegerIdTypeWithSystemPropertyAttributes {\n            get {\n                return ResourceManager.GetString(\"MobileServiceContractResolver_IntegerIdTypeWithSystemPropertyAttributes\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No &apos;{0}&apos; member found on type &apos;{1}&apos;..\n        /// </summary>\n        internal static string MobileServiceContractResolver_MemberNotFound {\n            get {\n                return ResourceManager.GetString(\"MobileServiceContractResolver_MemberNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to A member can only have one system property attribute. The member &apos;{0}&apos; on type &apos;{1}&apos; has system property attributes &apos;{2}&apos; and &apos;{3}&apos;..\n        /// </summary>\n        internal static string MobileServiceContractResolver_MultipleSystemPropertyAttributes {\n            get {\n                return ResourceManager.GetString(\"MobileServiceContractResolver_MultipleSystemPropertyAttributes\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The value {0} for member {1} is outside the valid range for numeric columns..\n        /// </summary>\n        internal static string MobileServiceContractResolver_NumberOutOfRange {\n            get {\n                return ResourceManager.GetString(\"MobileServiceContractResolver_NumberOutOfRange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Only one member may have the property name &apos;{0}&apos; (regardless of casing) on type &apos;{1}&apos;..\n        /// </summary>\n        internal static string MobileServiceContractResolver_SamePropertyName {\n            get {\n                return ResourceManager.GetString(\"MobileServiceContractResolver_SamePropertyName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The type &apos;{0}&apos; does not have a DataContractAttribute, but the type derives from the type &apos;{1}&apos;, which does have a DataContractAttribute. If a type has a DataContractAttribute, any type that derives from that type must also have a DataContractAttribute..\n        /// </summary>\n        internal static string MobileServiceContractResolver_TypeNoDataContractButBaseWithDataContract {\n            get {\n                return ResourceManager.GetString(\"MobileServiceContractResolver_TypeNoDataContractButBaseWithDataContract\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The type &apos;{0}&apos; has one or members with a DataMemberAttribute, but the type itself does not have a DataContractAttribute. Use the Newtonsoft.Json.JsonPropertyAttribute in place of the DataMemberAttribute and set the PropertyName to the desired name..\n        /// </summary>\n        internal static string MobileServiceContractResolver_TypeWithDataMemberButNoDataContract {\n            get {\n                return ResourceManager.GetString(\"MobileServiceContractResolver_TypeWithDataMemberButNoDataContract\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The member &apos;{0}.ContractResolver&apos; must be set to an instance of the &apos;{1}&apos; class or a class that inherits from the &apos;{1}&apos; class..\n        /// </summary>\n        internal static string MobileServiceJsonSerializerSettings_NullOrInvalidContractResolver {\n            get {\n                return ResourceManager.GetString(\"MobileServiceJsonSerializerSettings_NullOrInvalidContractResolver\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The {0} does not support reading JSON..\n        /// </summary>\n        internal static string MobileServicePrecisionCheckConverter_ReadNotSupported {\n            get {\n                return ResourceManager.GetString(\"MobileServicePrecisionCheckConverter_ReadNotSupported\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cannot start a login operation because login is already in progress..\n        /// </summary>\n        internal static string MobileServicesAuthentication_LoginAlreadyInProgress {\n            get {\n                return ResourceManager.GetString(\"MobileServicesAuthentication_LoginAlreadyInProgress\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The casing of the &apos;{0}&apos; property is invalid..\n        /// </summary>\n        internal static string MobileServiceSerializer_IdCasingIncorrect {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSerializer_IdCasingIncorrect\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Expected {0} member not found..\n        /// </summary>\n        internal static string MobileServiceSerializer_IdNotFound {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSerializer_IdNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to You might be affected by Mobile Services latest changes to support string Ids. For more details: http://go.microsoft.com/fwlink/?LinkId=330396.\n        /// </summary>\n        internal static string MobileServiceSerializer_IdTypeMismatch {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSerializer_IdTypeMismatch\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The integer id &apos;{0}&apos; is not a positive integer value..\n        /// </summary>\n        internal static string MobileServiceSerializer_InvalidIntegerId {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSerializer_InvalidIntegerId\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The string id &apos;{0}&apos; is invalid. An id must not contain any control characters or the characters &quot;,+,?,\\,/,`..\n        /// </summary>\n        internal static string MobileServiceSerializer_InvalidStringId {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSerializer_InvalidStringId\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The id parameter type &apos;{0}&apos; is invalid for looking up items of type &apos;{1}&apos;..\n        /// </summary>\n        internal static string MobileServiceSerializer_LookupInvalidIdType {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSerializer_LookupInvalidIdType\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The id can not be null or an empty string..\n        /// </summary>\n        internal static string MobileServiceSerializer_NullOrEmptyStringId {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSerializer_NullOrEmptyStringId\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The string id &apos;{0}&apos; is longer than the max string id length of {1} characters..\n        /// </summary>\n        internal static string MobileServiceSerializer_StringIdTooLong {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSerializer_StringIdTooLong\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The id must be of type string..\n        /// </summary>\n        internal static string MobileServiceSyncTable_IdMustBeString {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSyncTable_IdMustBeString\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Incremental pull query must not have orderby clause..\n        /// </summary>\n        internal static string MobileServiceSyncTable_IncrementalPullWithOrderNotAllowed {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSyncTable_IncrementalPullWithOrderNotAllowed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Incremental pull query must not have skip or top specified..\n        /// </summary>\n        internal static string MobileServiceSyncTable_IncrementalPullWithSkipTopNotSupported {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSyncTable_IncrementalPullWithSkipTopNotSupported\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The query id must not contain pipe character and should be less than 50 characters in length..\n        /// </summary>\n        internal static string MobileServiceSyncTable_InvalidQueryId {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSyncTable_InvalidQueryId\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The supported table options does not include orderby..\n        /// </summary>\n        internal static string MobileServiceSyncTable_OrderByNotAllowed {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSyncTable_OrderByNotAllowed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Pull query with select clause is not supported..\n        /// </summary>\n        internal static string MobileServiceSyncTable_PullWithSelectNotSupported {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSyncTable_PullWithSelectNotSupported\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The supported table options does not include skip. .\n        /// </summary>\n        internal static string MobileServiceSyncTable_SkipNotAllowed {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSyncTable_SkipNotAllowed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The supported table options does not include top..\n        /// </summary>\n        internal static string MobileServiceSyncTable_TopNotAllowed {\n            get {\n                return ResourceManager.GetString(\"MobileServiceSyncTable_TopNotAllowed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cannot delete if the {0} member is set to a default value..\n        /// </summary>\n        internal static string MobileServiceTable_DeleteWithoutId {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTable_DeleteWithoutId\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Could not get an array from response {0}..\n        /// </summary>\n        internal static string MobileServiceTable_ExpectedArray {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTable_ExpectedArray\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cannot insert if the {0} member is already set..\n        /// </summary>\n        internal static string MobileServiceTable_InsertWithExistingId {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTable_InsertWithExistingId\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Item not found in local store..\n        /// </summary>\n        internal static string MobileServiceTable_ItemNotFoundInStore {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTable_ItemNotFoundInStore\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Could not get object from response {0}..\n        /// </summary>\n        internal static string MobileServiceTable_NotSingleObject {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTable_NotSingleObject\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The query uri must be on the same host as the Mobile Service..\n        /// </summary>\n        internal static string MobileServiceTable_QueryUriHostIsDifferent {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTable_QueryUriHostIsDifferent\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cannot update if the {0} member is set to a default value..\n        /// </summary>\n        internal static string MobileServiceTable_UpdateWithoutId {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTable_UpdateWithoutId\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Operation must have an item associated with it..\n        /// </summary>\n        internal static string MobileServiceTableOperation_ItemNotFound {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTableOperation_ItemNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Mobile Service table operation returned an unexpected response..\n        /// </summary>\n        internal static string MobileServiceTableOperation_ResultNotJObject {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTableOperation_ResultNotJObject\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unrecognized query parameter &apos;{0}&apos;..\n        /// </summary>\n        internal static string MobileServiceTableQueryDescription_UnrecognizedQueryParameter {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTableQueryDescription_UnrecognizedQueryParameter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;{0}&apos; Mobile Services query expressions must consist of members only, not &apos;{1}&apos;..\n        /// </summary>\n        internal static string MobileServiceTableQueryTranslator_MembersOnlyInExpression {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTableQueryTranslator_MembersOnlyInExpression\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;{0}&apos; Mobile Services query expressions must consist of a single integer, not &apos;{1}&apos;..\n        /// </summary>\n        internal static string MobileServiceTableQueryTranslator_SingleIntegerOnly {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTableQueryTranslator_SingleIntegerOnly\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Expression &apos;{1}&apos; is not a supported &apos;{0}&apos; Mobile Services query expression..\n        /// </summary>\n        internal static string MobileServiceTableQueryTranslator_UnsupportedExpression {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTableQueryTranslator_UnsupportedExpression\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cannot deserialize value {0} into &apos;{1}.{2}&apos;..\n        /// </summary>\n        internal static string MobileServiceTableSerializer_CannotDeserializeValue {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTableSerializer_CannotDeserializeValue\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cannot deserialize type &apos;{0}&apos; because the JSON object did not have required member(s) &apos;{1}&apos;..\n        /// </summary>\n        internal static string MobileServiceTableSerializer_MissingRequiredMember {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTableSerializer_MissingRequiredMember\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Expected a JSON object to deserialize, not &apos;{0}&apos;..\n        /// </summary>\n        internal static string MobileServiceTableSerializer_NeedObject {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTableSerializer_NeedObject\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cannot serialize member &apos;{0}&apos; of type &apos;{1}&apos; declared on type &apos;{2}&apos;..\n        /// </summary>\n        internal static string MobileServiceTableSerializer_UnknownType {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTableSerializer_UnknownType\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} is an invalid user-defined query string parameter. User-defined query string parameters must not begin with a \\&apos;$\\&apos;..\n        /// </summary>\n        internal static string MobileServiceTableUrlBuilder_InvalidParameterBeginsWithDollarSign {\n            get {\n                return ResourceManager.GetString(\"MobileServiceTableUrlBuilder_InvalidParameterBeginsWithDollarSign\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &quot;&apos;)&apos; or &apos;,&apos; expected..\n        /// </summary>\n        internal static string ODataExpressionParser_CloseParenOrCommaExpected {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_CloseParenOrCommaExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;)&apos; or operator expected.\n        /// </summary>\n        internal static string ODataExpressionParser_CloseParenOrOperatorExpected {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_CloseParenOrOperatorExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Digit expected..\n        /// </summary>\n        internal static string ODataExpressionParser_DigitExpected {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_DigitExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Expression expected..\n        /// </summary>\n        internal static string ODataExpressionParser_ExpressionExpected {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_ExpressionExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Function &apos;{0}&apos; requires {1} parameter(s)..\n        /// </summary>\n        internal static string ODataExpressionParser_FunctionArgsCount {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_FunctionArgsCount\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Expected identifier..\n        /// </summary>\n        internal static string ODataExpressionParser_IdentifierExpected {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_IdentifierExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Expected integer literal..\n        /// </summary>\n        internal static string ODataExpressionParser_IntegerLiteralExpected {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_IntegerLiteralExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The specified odata query has invalid integer literal &apos;{0}&apos;..\n        /// </summary>\n        internal static string ODataExpressionParser_InvalidIntegerLiteral {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_InvalidIntegerLiteral\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The specified odata query has invalid real literal &apos;{0}&apos;..\n        /// </summary>\n        internal static string ODataExpressionParser_InvalidRealLiteral {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_InvalidRealLiteral\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The specified odata query has invalid &apos;{0}&apos; type creation expression..\n        /// </summary>\n        internal static string ODataExpressionParser_InvalidTypeCreation {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_InvalidTypeCreation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;(&apos; expected..\n        /// </summary>\n        internal static string ODataExpressionParser_OpenParenExpected {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_OpenParenExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Expected real literal..\n        /// </summary>\n        internal static string ODataExpressionParser_RealLiteralExpected {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_RealLiteralExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Expected string literal..\n        /// </summary>\n        internal static string ODataExpressionParser_StringLiteralExpected {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_StringLiteralExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Function &apos;substring&apos; requires 2 or 3 parameters..\n        /// </summary>\n        internal static string ODataExpressionParser_SubstringArgsCount {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_SubstringArgsCount\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The specified odata query has syntax errors..\n        /// </summary>\n        internal static string ODataExpressionParser_SyntaxError {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_SyntaxError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The specified odata query has unterminated string literal..\n        /// </summary>\n        internal static string ODataExpressionParser_UnterminatedStringLiteral {\n            get {\n                return ResourceManager.GetString(\"ODataExpressionParser_UnterminatedStringLiteral\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to A Microsoft Azure Mobile Services assembly for the current platform was not found. Ensure that the current project references both {0} and the following platform-specific assembly: {1}..\n        /// </summary>\n        internal static string Platform_AssemblyNotFound {\n            get {\n                return ResourceManager.GetString(\"Platform_AssemblyNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Failed to instantiate the platform implementation of {0} from the assembly {1} due to the following error: {2}.\n        /// </summary>\n        internal static string Platform_InstantiationFailed {\n            get {\n                return ResourceManager.GetString(\"Platform_InstantiationFailed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The key &apos;{0}&apos; is reserved and cannot be specified as a query parameter..\n        /// </summary>\n        internal static string Pull_Cannot_Use_Reserved_Key {\n            get {\n                return ResourceManager.GetString(\"Pull_Cannot_Use_Reserved_Key\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Valid XML is required for any template without a raw header..\n        /// </summary>\n        internal static string Push_BodyTemplateMustBeXml {\n            get {\n                return ResourceManager.GetString(\"Push_BodyTemplateMustBeXml\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to XML must contain an XML node of Element type..\n        /// </summary>\n        internal static string Push_BodyTemplateMustContainElement {\n            get {\n                return ResourceManager.GetString(\"Push_BodyTemplateMustContainElement\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Template name conflicts with reserved name &apos;{0}&apos;..\n        /// </summary>\n        internal static string Push_ConflictWithReservedName {\n            get {\n                return ResourceManager.GetString(\"Push_ConflictWithReservedName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Push operation has failed. See the PushResult for details..\n        /// </summary>\n        internal static string Push_Failure {\n            get {\n                return ResourceManager.GetString(\"Push_Failure\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Template name cannot contain &quot;;&quot; or &quot;:&quot;..\n        /// </summary>\n        internal static string Push_InvalidTemplateName {\n            get {\n                return ResourceManager.GetString(\"Push_InvalidTemplateName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The bodyTemplate is not in accepted XML format. The first node of the bodyTemplate should be Badge/Tile/Toast, except for the wns/raw template, which needs to be an valid XML..\n        /// </summary>\n        internal static string Push_NotSupportedXMLFormatAsBodyTemplateWin8 {\n            get {\n                return ResourceManager.GetString(\"Push_NotSupportedXMLFormatAsBodyTemplateWin8\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tags must not contain &apos;,&apos;..\n        /// </summary>\n        internal static string Push_TagNoCommas {\n            get {\n                return ResourceManager.GetString(\"Push_TagNoCommas\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to A delete operation on the item is already in the queue..\n        /// </summary>\n        internal static string SyncContext_DeletePending {\n            get {\n                return ResourceManager.GetString(\"SyncContext_DeletePending\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to An insert operation on the item is already in the queue..\n        /// </summary>\n        internal static string SyncContext_DuplicateInsert {\n            get {\n                return ResourceManager.GetString(\"SyncContext_DuplicateInsert\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The item is in inconsistent state in the local store. Please complete the pending sync by calling PushAsync()before deleting the item..\n        /// </summary>\n        internal static string SyncContext_InsertAttempted {\n            get {\n                return ResourceManager.GetString(\"SyncContext_InsertAttempted\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to SyncContext is not yet initialized..\n        /// </summary>\n        internal static string SyncContext_NotInitialized {\n            get {\n                return ResourceManager.GetString(\"SyncContext_NotInitialized\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The table cannot be purged because it has pending operations..\n        /// </summary>\n        internal static string SyncContext_PurgeOnDirtyTable {\n            get {\n                return ResourceManager.GetString(\"SyncContext_PurgeOnDirtyTable\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to An update operation on the item is already in the queue..\n        /// </summary>\n        internal static string SyncContext_UpdatePending {\n            get {\n                return ResourceManager.GetString(\"SyncContext_UpdatePending\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The operation has been updated and cannot be cancelled..\n        /// </summary>\n        internal static string SyncError_OperationUpdated {\n            get {\n                return ResourceManager.GetString(\"SyncError_OperationUpdated\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The store is already initialized..\n        /// </summary>\n        internal static string SyncStore_AlreadyInitialized {\n            get {\n                return ResourceManager.GetString(\"SyncStore_AlreadyInitialized\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Failed to delete error from the local store..\n        /// </summary>\n        internal static string SyncStore_FailedToDeleteError {\n            get {\n                return ResourceManager.GetString(\"SyncStore_FailedToDeleteError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Failed to delete operation from the local store..\n        /// </summary>\n        internal static string SyncStore_FailedToDeleteOperation {\n            get {\n                return ResourceManager.GetString(\"SyncStore_FailedToDeleteOperation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Failed to read errors from the local store..\n        /// </summary>\n        internal static string SyncStore_FailedToLoadError {\n            get {\n                return ResourceManager.GetString(\"SyncStore_FailedToLoadError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Failed to read the item from local store..\n        /// </summary>\n        internal static string SyncStore_FailedToReadItem {\n            get {\n                return ResourceManager.GetString(\"SyncStore_FailedToReadItem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Failed to update operation in the local store..\n        /// </summary>\n        internal static string SyncStore_FailedToUpdateOperation {\n            get {\n                return ResourceManager.GetString(\"SyncStore_FailedToUpdateOperation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Failed to update the item in the local store..\n        /// </summary>\n        internal static string SyncStore_FailedToUpsertItem {\n            get {\n                return ResourceManager.GetString(\"SyncStore_FailedToUpsertItem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The store must be initialized before it can be used..\n        /// </summary>\n        internal static string SyncStore_NotInitialized {\n            get {\n                return ResourceManager.GetString(\"SyncStore_NotInitialized\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Failed to perform operation on local store..\n        /// </summary>\n        internal static string SyncStore_OperationFailed {\n            get {\n                return ResourceManager.GetString(\"SyncStore_OperationFailed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to This page must be called from the type &apos;{0}&apos;..\n        /// </summary>\n        internal static string WP8LoginPage_MustBeCalledFromAuthBroker {\n            get {\n                return ResourceManager.GetString(\"WP8LoginPage_MustBeCalledFromAuthBroker\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"IApplicationStorage_NullOrWhitespaceSettingName\" xml:space=\"preserve\">\n    <value>An application setting name must be provided. Null, empty or whitespace only names are not allowed.</value>\n  </data>\n  <data name=\"IAuthenticationBroker_AuthenticationCanceled\" xml:space=\"preserve\">\n    <value>Authentication was cancelled by the user.</value>\n  </data>\n  <data name=\"IAuthenticationBroker_AuthenticationFailed\" xml:space=\"preserve\">\n    <value>Authentication failed with HTTP response code {0}.</value>\n  </data>\n  <data name=\"MobileServiceClient_EmptyArgument\" xml:space=\"preserve\">\n    <value>{0} cannot be null, empty or only whitespace.</value>\n  </data>\n  <data name=\"MobileServiceClient_ErrorMessage\" xml:space=\"preserve\">\n    <value>The request could not be completed.  ({0})</value>\n  </data>\n  <data name=\"IAuthenticationBroker_InvalidLoginResponse\" xml:space=\"preserve\">\n    <value>Invalid format of the authentication response.</value>\n  </data>\n  <data name=\"MobileServicesAuthentication_LoginAlreadyInProgress\" xml:space=\"preserve\">\n    <value>Cannot start a login operation because login is already in progress.</value>\n  </data>\n  <data name=\"IAuthenticationBroker_LoginFailed\" xml:space=\"preserve\">\n    <value>Login failed: {0}</value>\n  </data>\n  <data name=\"MobileServiceTableUrlBuilder_InvalidParameterBeginsWithDollarSign\" xml:space=\"preserve\">\n    <value>{0} is an invalid user-defined query string parameter. User-defined query string parameters must not begin with a \\'$\\'.</value>\n  </data>\n  <data name=\"MobileServiceTable_InsertWithExistingId\" xml:space=\"preserve\">\n    <value>Cannot insert if the {0} member is already set.</value>\n  </data>\n  <data name=\"Platform_AssemblyNotFound\" xml:space=\"preserve\">\n    <value>A Microsoft Azure Mobile Services assembly for the current platform was not found. Ensure that the current project references both {0} and the following platform-specific assembly: {1}.</value>\n  </data>\n  <data name=\"Platform_InstantiationFailed\" xml:space=\"preserve\">\n    <value>Failed to instantiate the platform implementation of {0} from the assembly {1} due to the following error: {2}</value>\n  </data>\n  <data name=\"FilterBuildingExpressionVisitor_MemberUnsupported\" xml:space=\"preserve\">\n    <value>The member '{0}' is not supported in the 'Where' Mobile Services query expression '{1}'.</value>\n  </data>\n  <data name=\"FilterBuildingExpressionVisitor_OperatorUnsupported\" xml:space=\"preserve\">\n    <value>The operator '{0}' is not supported in the 'Where' Mobile Services query expression '{1}'.</value>\n  </data>\n  <data name=\"FilterBuildingExpressionVisitor_UnsupportedInWhereExpression\" xml:space=\"preserve\">\n    <value>'{0}' is not supported in a 'Where' Mobile Services query expression.</value>\n  </data>\n  <data name=\"MobileServiceTableQueryTranslator_SingleIntegerOnly\" xml:space=\"preserve\">\n    <value>'{0}' Mobile Services query expressions must consist of a single integer, not '{1}'.</value>\n  </data>\n  <data name=\"MobileServiceTableQueryTranslator_MembersOnlyInExpression\" xml:space=\"preserve\">\n    <value>'{0}' Mobile Services query expressions must consist of members only, not '{1}'.</value>\n  </data>\n  <data name=\"MobileServiceTableQueryTranslator_UnsupportedExpression\" xml:space=\"preserve\">\n    <value>Expression '{1}' is not a supported '{0}' Mobile Services query expression.</value>\n  </data>\n  <data name=\"MobileServiceTableSerializer_CannotDeserializeValue\" xml:space=\"preserve\">\n    <value>Cannot deserialize value {0} into '{1}.{2}'.</value>\n  </data>\n  <data name=\"MobileServiceTableSerializer_MissingRequiredMember\" xml:space=\"preserve\">\n    <value>Cannot deserialize type '{0}' because the JSON object did not have required member(s) '{1}'.</value>\n  </data>\n  <data name=\"MobileServiceTableSerializer_NeedObject\" xml:space=\"preserve\">\n    <value>Expected a JSON object to deserialize, not '{0}'.</value>\n  </data>\n  <data name=\"MobileServiceTableSerializer_UnknownType\" xml:space=\"preserve\">\n    <value>Cannot serialize member '{0}' of type '{1}' declared on type '{2}'.</value>\n  </data>\n  <data name=\"MobileServiceTable_ExpectedArray\" xml:space=\"preserve\">\n    <value>Could not get an array from response {0}.</value>\n  </data>\n  <data name=\"MobileServiceTable_NotSingleObject\" xml:space=\"preserve\">\n    <value>Could not get object from response {0}.</value>\n  </data>\n  <data name=\"MobileServiceContractResolver_MemberNotFound\" xml:space=\"preserve\">\n    <value>No '{0}' member found on type '{1}'.</value>\n  </data>\n  <data name=\"MobileServiceContractResolver_SamePropertyName\" xml:space=\"preserve\">\n    <value>Only one member may have the property name '{0}' (regardless of casing) on type '{1}'.</value>\n  </data>\n  <data name=\"MobileServiceContractResolver_TypeWithDataMemberButNoDataContract\" xml:space=\"preserve\">\n    <value>The type '{0}' has one or members with a DataMemberAttribute, but the type itself does not have a DataContractAttribute. Use the Newtonsoft.Json.JsonPropertyAttribute in place of the DataMemberAttribute and set the PropertyName to the desired name.</value>\n  </data>\n  <data name=\"MobileServiceSerializer_IdNotFound\" xml:space=\"preserve\">\n    <value>Expected {0} member not found.</value>\n  </data>\n  <data name=\"MobileServiceContractResolver_NumberOutOfRange\" xml:space=\"preserve\">\n    <value>The value {0} for member {1} is outside the valid range for numeric columns.</value>\n  </data>\n  <data name=\"MobileServiceContractResolver_TypeNoDataContractButBaseWithDataContract\" xml:space=\"preserve\">\n    <value>The type '{0}' does not have a DataContractAttribute, but the type derives from the type '{1}', which does have a DataContractAttribute. If a type has a DataContractAttribute, any type that derives from that type must also have a DataContractAttribute.</value>\n  </data>\n  <data name=\"ExpressionUtility_ProjectionNotSupportedOnWindowsPhone75\" xml:space=\"preserve\">\n    <value>The Linq IQueryable Select() operation is not supported on the Windows Phone 7.5 platform.</value>\n  </data>\n  <data name=\"MobileServiceClient_NoResponseContent\" xml:space=\"preserve\">\n    <value>The server did not provide a response with the expected content.</value>\n  </data>\n  <data name=\"MobileServiceJsonSerializerSettings_NullOrInvalidContractResolver\" xml:space=\"preserve\">\n    <value>The member '{0}.ContractResolver' must be set to an instance of the '{1}' class or a class that inherits from the '{1}' class.</value>\n  </data>\n  <data name=\"MobileServicePrecisionCheckConverter_ReadNotSupported\" xml:space=\"preserve\">\n    <value>The {0} does not support reading JSON.</value>\n  </data>\n  <data name=\"MobileServiceTable_DeleteWithoutId\" xml:space=\"preserve\">\n    <value>Cannot delete if the {0} member is set to a default value.</value>\n  </data>\n  <data name=\"MobileServiceTable_UpdateWithoutId\" xml:space=\"preserve\">\n    <value>Cannot update if the {0} member is set to a default value.</value>\n  </data>\n  <data name=\"MobileServiceClient_InnerHandlerMustBeNull\" xml:space=\"preserve\">\n    <value>The 'InnerHandler' property of the delegating handler must be null.</value>\n  </data>\n  <data name=\"HttpMessageHandlerExtensions_WrongHandlerType\" xml:space=\"preserve\">\n    <value>All message handlers except the last must be of the type '{0}'</value>\n  </data>\n  <data name=\"MobileServiceContractResolver_MultipleSystemPropertyAttributes\" xml:space=\"preserve\">\n    <value>A member can only have one system property attribute. The member '{0}' on type '{1}' has system property attributes '{2}' and '{3}'.</value>\n  </data>\n  <data name=\"MobileServiceCollection_LoadInProcess\" xml:space=\"preserve\">\n    <value>Loading of more items already in process.</value>\n  </data>\n  <data name=\"MobileServiceSerializer_InvalidIntegerId\" xml:space=\"preserve\">\n    <value>The integer id '{0}' is not a positive integer value.</value>\n  </data>\n  <data name=\"MobileServiceSerializer_StringIdTooLong\" xml:space=\"preserve\">\n    <value>The string id '{0}' is longer than the max string id length of {1} characters.</value>\n  </data>\n  <data name=\"MobileServiceSerializer_LookupInvalidIdType\" xml:space=\"preserve\">\n    <value>The id parameter type '{0}' is invalid for looking up items of type '{1}'.</value>\n  </data>\n  <data name=\"MobileServiceSerializer_IdCasingIncorrect\" xml:space=\"preserve\">\n    <value>The casing of the '{0}' property is invalid.</value>\n  </data>\n  <data name=\"MobileServiceContractResolver_IntegerIdTypeWithSystemPropertyAttributes\" xml:space=\"preserve\">\n    <value>The type '{0}' has an integer id member and therefore can not have any members with the system property attribute '{1}'.</value>\n  </data>\n  <data name=\"MobileServiceSerializer_InvalidStringId\" xml:space=\"preserve\">\n    <value>The string id '{0}' is invalid. An id must not contain any control characters or the characters \",+,?,\\,/,`.</value>\n  </data>\n  <data name=\"MobileServiceSerializer_NullOrEmptyStringId\" xml:space=\"preserve\">\n    <value>The id can not be null or an empty string.</value>\n  </data>\n  <data name=\"MobileServiceSerializer_IdTypeMismatch\" xml:space=\"preserve\">\n    <value>You might be affected by Mobile Services latest changes to support string Ids. For more details: http://go.microsoft.com/fwlink/?LinkId=330396</value>\n  </data>\n  <data name=\"MobileServiceCollection_IncrementalLoadingFailed\" xml:space=\"preserve\">\n    <value>Failed to incrementally load more items of type '{0}'. See the inner exception for details.</value>\n  </data>\n  <data name=\"Push_ConflictWithReservedName\" xml:space=\"preserve\">\n    <value>Template name conflicts with reserved name '{0}'.</value>\n  </data>\n  <data name=\"Push_InvalidTemplateName\" xml:space=\"preserve\">\n    <value>Template name cannot contain \";\" or \":\".</value>\n  </data>\n  <data name=\"Push_NotSupportedXMLFormatAsBodyTemplateWin8\" xml:space=\"preserve\">\n    <value>The bodyTemplate is not in accepted XML format. The first node of the bodyTemplate should be Badge/Tile/Toast, except for the wns/raw template, which needs to be an valid XML.</value>\n  </data>\n  <data name=\"Push_BodyTemplateMustBeXml\" xml:space=\"preserve\">\n    <value>Valid XML is required for any template without a raw header.</value>\n  </data>\n  <data name=\"Push_BodyTemplateMustContainElement\" xml:space=\"preserve\">\n    <value>XML must contain an XML node of Element type.</value>\n  </data>\n  <data name=\"Push_TagNoCommas\" xml:space=\"preserve\">\n    <value>Tags must not contain ','.</value>\n  </data>\n  <data name=\"IAuthenticationBroker_LoginInProgress\" xml:space=\"preserve\">\n    <value>Authentication is already in progress.</value>\n  </data>\n  <data name=\"IAuthenticationBroker_NoLoginInProgress\" xml:space=\"preserve\">\n    <value>Authentication has not been started.</value>\n  </data>\n  <data name=\"MobileServiceSyncTable_IdMustBeString\" xml:space=\"preserve\">\n    <value>The id must be of type string.</value>\n  </data>\n  <data name=\"SyncContext_NotInitialized\" xml:space=\"preserve\">\n    <value>SyncContext is not yet initialized.</value>\n  </data>\n  <data name=\"SyncStore_FailedToUpsertItem\" xml:space=\"preserve\">\n    <value>Failed to update the item in the local store.</value>\n  </data>\n  <data name=\"MobileServiceTableQueryDescription_UnrecognizedQueryParameter\" xml:space=\"preserve\">\n    <value>Unrecognized query parameter '{0}'.</value>\n  </data>\n  <data name=\"SyncContext_DeletePending\" xml:space=\"preserve\">\n    <value>A delete operation on the item is already in the queue.</value>\n  </data>\n  <data name=\"SyncContext_DuplicateInsert\" xml:space=\"preserve\">\n    <value>An insert operation on the item is already in the queue.</value>\n  </data>\n  <data name=\"SyncContext_UpdatePending\" xml:space=\"preserve\">\n    <value>An update operation on the item is already in the queue.</value>\n  </data>\n  <data name=\"ODataExpressionParser_UnterminatedStringLiteral\" xml:space=\"preserve\">\n    <value>The specified odata query has unterminated string literal.</value>\n  </data>\n  <data name=\"ODataExpressionParser_SyntaxError\" xml:space=\"preserve\">\n    <value>The specified odata query has syntax errors.</value>\n  </data>\n  <data name=\"ODataExpressionParser_DigitExpected\" xml:space=\"preserve\">\n    <value>Digit expected.</value>\n  </data>\n  <data name=\"ODataExpressionParser_CloseParenOrCommaExpected\" xml:space=\"preserve\">\n    <value>\"')' or ',' expected.</value>\n  </data>\n  <data name=\"ODataExpressionParser_ExpressionExpected\" xml:space=\"preserve\">\n    <value>Expression expected.</value>\n  </data>\n  <data name=\"ODataExpressionParser_OpenParenExpected\" xml:space=\"preserve\">\n    <value>'(' expected.</value>\n  </data>\n  <data name=\"ODataExpressionParser_SubstringArgsCount\" xml:space=\"preserve\">\n    <value>Function 'substring' requires 2 or 3 parameters.</value>\n  </data>\n  <data name=\"ODataExpressionParser_CloseParenOrOperatorExpected\" xml:space=\"preserve\">\n    <value>')' or operator expected</value>\n  </data>\n  <data name=\"ODataExpressionParser_FunctionArgsCount\" xml:space=\"preserve\">\n    <value>Function '{0}' requires {1} parameter(s).</value>\n  </data>\n  <data name=\"ODataExpressionParser_IdentifierExpected\" xml:space=\"preserve\">\n    <value>Expected identifier.</value>\n  </data>\n  <data name=\"ODataExpressionParser_IntegerLiteralExpected\" xml:space=\"preserve\">\n    <value>Expected integer literal.</value>\n  </data>\n  <data name=\"ODataExpressionParser_InvalidIntegerLiteral\" xml:space=\"preserve\">\n    <value>The specified odata query has invalid integer literal '{0}'.</value>\n  </data>\n  <data name=\"ODataExpressionParser_InvalidRealLiteral\" xml:space=\"preserve\">\n    <value>The specified odata query has invalid real literal '{0}'.</value>\n  </data>\n  <data name=\"ODataExpressionParser_InvalidTypeCreation\" xml:space=\"preserve\">\n    <value>The specified odata query has invalid '{0}' type creation expression.</value>\n  </data>\n  <data name=\"ODataExpressionParser_RealLiteralExpected\" xml:space=\"preserve\">\n    <value>Expected real literal.</value>\n  </data>\n  <data name=\"ODataExpressionParser_StringLiteralExpected\" xml:space=\"preserve\">\n    <value>Expected string literal.</value>\n  </data>\n  <data name=\"SyncStore_FailedToDeleteOperation\" xml:space=\"preserve\">\n    <value>Failed to delete operation from the local store.</value>\n  </data>\n  <data name=\"SyncStore_FailedToReadItem\" xml:space=\"preserve\">\n    <value>Failed to read the item from local store.</value>\n  </data>\n  <data name=\"SyncStore_FailedToLoadError\" xml:space=\"preserve\">\n    <value>Failed to read errors from the local store.</value>\n  </data>\n  <data name=\"SyncStore_FailedToDeleteError\" xml:space=\"preserve\">\n    <value>Failed to delete error from the local store.</value>\n  </data>\n  <data name=\"SyncStore_OperationFailed\" xml:space=\"preserve\">\n    <value>Failed to perform operation on local store.</value>\n  </data>\n  <data name=\"MobileServiceSyncTable_PullWithSelectNotSupported\" xml:space=\"preserve\">\n    <value>Pull query with select clause is not supported.</value>\n  </data>\n  <data name=\"MobileServiceTableOperation_ItemNotFound\" xml:space=\"preserve\">\n    <value>Operation must have an item associated with it.</value>\n  </data>\n  <data name=\"MobileServiceTable_ItemNotFoundInStore\" xml:space=\"preserve\">\n    <value>Item not found in local store.</value>\n  </data>\n  <data name=\"MobileServiceTableOperation_ResultNotJObject\" xml:space=\"preserve\">\n    <value>Mobile Service table operation returned an unexpected response.</value>\n  </data>\n  <data name=\"SyncStore_NotInitialized\" xml:space=\"preserve\">\n    <value>The store must be initialized before it can be used.</value>\n  </data>\n  <data name=\"SyncStore_AlreadyInitialized\" xml:space=\"preserve\">\n    <value>The store is already initialized.</value>\n  </data>\n  <data name=\"MobileServiceSyncTable_InvalidQueryId\" xml:space=\"preserve\">\n    <value>The query id must not contain pipe character and should be less than 50 characters in length.</value>\n  </data>\n  <data name=\"MobileServiceSyncTable_IncrementalPullWithOrderNotAllowed\" xml:space=\"preserve\">\n    <value>Incremental pull query must not have orderby clause.</value>\n  </data>\n  <data name=\"SyncStore_FailedToUpdateOperation\" xml:space=\"preserve\">\n    <value>Failed to update operation in the local store.</value>\n  </data>\n  <data name=\"SyncError_OperationUpdated\" xml:space=\"preserve\">\n    <value>The operation has been updated and cannot be cancelled.</value>\n  </data>\n  <data name=\"SyncContext_PurgeOnDirtyTable\" xml:space=\"preserve\">\n    <value>The table cannot be purged because it has pending operations.</value>\n  </data>\n  <data name=\"SyncContext_InsertAttempted\" xml:space=\"preserve\">\n    <value>The item is in inconsistent state in the local store. Please complete the pending sync by calling PushAsync()before deleting the item.</value>\n  </data>\n  <data name=\"MobileServiceSyncTable_IncrementalPullWithSkipTopNotSupported\" xml:space=\"preserve\">\n    <value>Incremental pull query must not have skip or top specified.</value>\n  </data>\n  <data name=\"MobileServiceSyncTable_SkipNotAllowed\" xml:space=\"preserve\">\n    <value>The supported table options does not include skip. </value>\n  </data>\n  <data name=\"MobileServiceSyncTable_TopNotAllowed\" xml:space=\"preserve\">\n    <value>The supported table options does not include top.</value>\n  </data>\n  <data name=\"MobileServiceSyncTable_OrderByNotAllowed\" xml:space=\"preserve\">\n    <value>The supported table options does not include orderby.</value>\n  </data>\n  <data name=\"MobileServiceTable_QueryUriHostIsDifferent\" xml:space=\"preserve\">\n    <value>The query uri must be on the same host as the Mobile Service.</value>\n  </data>\n  <data name=\"WP8LoginPage_MustBeCalledFromAuthBroker\" xml:space=\"preserve\">\n    <value>This page must be called from the type '{0}'.</value>\n  </data>\n  <data name=\"Pull_Cannot_Use_Reserved_Key\" xml:space=\"preserve\">\n    <value>The key '{0}' is reserved and cannot be specified as a query parameter.</value>\n  </data>\n  <data name=\"Push_Failure\" xml:space=\"preserve\">\n    <value>Push operation has failed. See the PushResult for details.</value>\n  </data>\n</root>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/IMobileServiceTable.Generic.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Linq.Expressions;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides operations on a table for a Mobile Service.\n    /// </summary>\n    /// <typeparam name=\"T\">\n    /// The type of instances in the table (which implies the table).\n    /// </typeparam>\n    public interface IMobileServiceTable<T> : IMobileServiceTable\n    {\n        /// <summary>\n        /// Executes a query against the table.\n        /// </summary>\n        /// <param name=\"query\">\n        /// A query to execute.\n        /// </param>\n        /// <returns>\n        /// A task that will return with results when the query finishes.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Generic are not nested when used via async.\")]\n        Task<IEnumerable<U>> ReadAsync<U>(string query);\n\n        /// <summary>\n        /// Returns instances from a table using a query.\n        /// </summary>\n        /// <typeparam name=\"U\">\n        /// The type of instance returned by the query.\n        /// </typeparam>\n        /// <param name=\"query\">\n        /// The query to execute.\n        /// </param>\n        /// <returns>\n        /// Instances from the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1715:IdentifiersShouldHaveCorrectPrefix\", MessageId = \"T\", Justification = \"Part of the LINQ query pattern\")]\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1704:IdentifiersShouldBeSpelledCorrectly\", MessageId = \"U\", Justification = \"Part of the LINQ query pattern\")]\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Generic are not nested when used via async.\")]\n        Task<IEnumerable<U>> ReadAsync<U>(IMobileServiceTableQuery<U> query);\n\n        /// <summary>\n        /// Returns instances from a table.\n        /// </summary>\n        /// <returns>\n        /// Instances from the table.\n        /// </returns>\n        /// <remarks>\n        /// This call will not handle paging, etc., for you.\n        /// </remarks>\n        Task<IEnumerable<T>> ReadAsync();\n\n        /// <summary>\n        /// Lookup an instance from a table by its id.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id of the instance.\n        /// </param>\n        /// <returns>\n        /// The desired instance.\n        /// </returns>\n        new Task<T> LookupAsync(object id);\n\n        /// <summary>\n        /// Lookup an instance from a table by its id.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id of the instance.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// The desired instance.\n        /// </returns>\n        new Task<T> LookupAsync(object id, IDictionary<string, string> parameters);\n\n        /// <summary>\n        /// Refresh the current instance with the latest values from the\n        /// table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to refresh.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the refresh has finished.\n        /// </returns>\n        Task RefreshAsync(T instance);\n\n        /// <summary>\n        /// Refresh the current instance with the latest values from the\n        /// table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to refresh.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the refresh has finished.\n        /// </returns>\n        Task RefreshAsync(T instance, IDictionary<string, string> parameters);\n\n        /// <summary>\n        /// Insert a new instance into the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to insert.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the insertion has finished.\n        /// </returns>\n        Task InsertAsync(T instance);\n\n        /// <summary>\n        /// Insert a new instance into the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to insert.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the insertion has finished.\n        /// </returns>\n        Task InsertAsync(T instance, IDictionary<string, string> parameters);\n\n        /// <summary>\n        /// Updates an instance in the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to update.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the update has finished.\n        /// </returns>\n        Task UpdateAsync(T instance);\n\n        /// <summary>\n        /// Updates an instance in the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to update.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the update has finished.\n        /// </returns>\n        Task UpdateAsync(T instance, IDictionary<string, string> parameters);\n\n        /// <summary>\n        /// Undeletes an <paramref name=\"instance\"/> from the table. This requires the soft delete feature to be enabled on the Mobile Service. Visit <see href=\"http://go.microsoft.com/fwlink/?LinkId=507647\">the link</see> for details.\n        /// </summary>\n        /// <param name=\"instance\">The instance to undelete from the table.</param>\n        /// <returns>A task that will complete when the undelete finishes.</returns>\n        Task UndeleteAsync(T instance);\n\n        /// <summary>\n        /// Undeletes an <paramref name=\"instance\"/> from the table. This requires the soft delete feature to be enabled on the Mobile Service. Visit <see href=\"http://go.microsoft.com/fwlink/?LinkId=507647\">the link</see> for details.\n        /// </summary>\n        /// <param name=\"instance\">The instance to undelete from the table.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>A task that will complete when the undelete finishes.</returns>\n        Task UndeleteAsync(T instance, IDictionary<string, string> parameters);\n\n        /// <summary>\n        /// Delete an instance from the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to delete.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the delete has finished.\n        /// </returns>\n        Task DeleteAsync(T instance);\n\n        /// <summary>\n        /// Delete an instance from the table.\n        /// </summary>\n        /// <param name=\"instance\">The instance to delete.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the delete has finished.\n        /// </returns>\n        Task DeleteAsync(T instance, IDictionary<string, string> parameters);\n\n        /// <summary>\n        /// Creates a query for the current table.\n        /// </summary>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        IMobileServiceTableQuery<T> CreateQuery();\n\n        /// <summary>\n        /// Creates a query that will ensure it gets the total count for all\n        /// the records that would have been returned ignoring any take paging/\n        /// limit clause specified by client or server.\n        /// </summary>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        IMobileServiceTableQuery<T> IncludeTotalCount();\n\n        /// <summary>\n        /// Creates a query that will ensure it gets the deleted records. This requires the soft delete feature to be enabled on the Mobile Service. Visit <see href=\"http://go.microsoft.com/fwlink/?LinkId=507647\">the link</see> for details.\n        /// </summary>        \n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        IMobileServiceTableQuery<T> IncludeDeleted();\n\n        /// <summary>\n        /// Applies to the source query the specified string key-value \n        /// pairs to be used as user-defined parameters with the request URI \n        /// query string.\n        /// </summary>\n        /// <param name=\"parameters\">\n        /// The parameters to apply.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        IMobileServiceTableQuery<T> WithParameters(IDictionary<string, string> parameters);\n\n        /// <summary>\n        /// Creates a query by applying the specified filter predicate.\n        /// </summary>\n        /// <param name=\"predicate\">\n        /// The filter predicate.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        IMobileServiceTableQuery<T> Where(Expression<Func<T, bool>> predicate);\n\n        /// <summary>\n        /// Creates a query by applying the specified selection.\n        /// </summary>\n        /// <typeparam name=\"U\">\n        /// Type representing the projected result of the query.\n        /// </typeparam>\n        /// <param name=\"selector\">\n        /// The selector function.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1715:IdentifiersShouldHaveCorrectPrefix\", MessageId = \"T\", Justification = \"Standard for LINQ\")]\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1716:IdentifiersShouldNotMatchKeywords\", MessageId = \"Select\", Justification = \"Part of the LINQ query pattern.\")]\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1704:IdentifiersShouldBeSpelledCorrectly\", MessageId = \"U\", Justification = \"Standard for LINQ\")]\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        IMobileServiceTableQuery<U> Select<U>(Expression<Func<T, U>> selector);\n\n        /// <summary>\n        /// Creates a query by applying the specified ascending order clause.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        IMobileServiceTableQuery<T> OrderBy<TKey>(Expression<Func<T, TKey>> keySelector);\n\n        /// <summary>\n        /// Creates a query by applying the specified descending order clause.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        IMobileServiceTableQuery<T> OrderByDescending<TKey>(Expression<Func<T, TKey>> keySelector);\n\n        /// <summary>\n        /// Creates a query by applying the specified ascending order clause.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        IMobileServiceTableQuery<T> ThenBy<TKey>(Expression<Func<T, TKey>> keySelector);\n\n        /// <summary>\n        /// Creates a query by applying the specified descending order clause.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        IMobileServiceTableQuery<T> ThenByDescending<TKey>(Expression<Func<T, TKey>> keySelector);\n\n        /// <summary>\n        /// Creates a query by applying the specified skip clause.\n        /// </summary>\n        /// <param name=\"count\">\n        /// The number to skip.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        IMobileServiceTableQuery<T> Skip(int count);\n\n        /// <summary>\n        /// Creates a query by applying the specified take clause.\n        /// </summary>\n        /// <param name=\"count\">\n        /// The number to take.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        IMobileServiceTableQuery<T> Take(int count);\n\n        /// <summary>\n        /// Gets the elements of the table asynchronously.\n        /// </summary>\n        /// <returns>\n        /// The table elements results as a sequence.\n        /// </returns>\n        Task<IEnumerable<T>> ToEnumerableAsync();\n\n        /// <summary>\n        /// Gets the elements of the table asynchronously and return the\n        /// results in a new List.\n        /// </summary>\n        /// <returns>\n        /// The table elements results as a List.\n        /// </returns>\n        Task<List<T>> ToListAsync();\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/IMobileServiceTable.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides operations on a table for a Microsoft Azure Mobile Service.\n    /// </summary>\n    public interface IMobileServiceTable\n    {\n        /// <summary>\n        /// Gets a reference to the <see cref=\"MobileServiceClient\"/> associated \n        /// with this table.\n        /// </summary>\n        MobileServiceClient MobileServiceClient { get; }\n\n        /// <summary>\n        /// Gets the name of the table.\n        /// </summary>\n        string TableName { get; }\n\n        /// <summary>\n        /// The Mobile Service system properties to be included with items.\n        /// </summary>\n        MobileServiceSystemProperties SystemProperties { get; set; }\n\n        /// <summary>\n        /// Executes a query against the table.\n        /// </summary>\n        /// <param name=\"query\">\n        /// A query to execute.\n        /// </param>\n        /// <returns>\n        /// A task that will return with results when the query finishes.\n        /// </returns>\n        Task<JToken> ReadAsync(string query);\n\n        /// <summary>\n        /// Executes a query against the table.\n        /// </summary>\n        /// <param name=\"query\">\n        /// A query to execute.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <param name=\"wrapResult\">\n        /// Specifies whether response should be formatted as JObject including extra response details e.g. link header\n        /// </param>\n        /// <returns>\n        /// A task that will return with results when the query finishes.\n        /// </returns>\n        Task<JToken> ReadAsync(string query, IDictionary<string, string> parameters, bool wrapResult);\n\n        /// <summary>\n        /// Inserts an <paramref name=\"instance\"/> into the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to insert into the table.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the insert finishes.\n        /// </returns>\n        Task<JToken> InsertAsync(JObject instance);\n\n        /// <summary>\n        /// Inserts an <paramref name=\"instance\"/> into the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to insert into the table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the insert finishes.\n        /// </returns>\n        Task<JToken> InsertAsync(JObject instance, IDictionary<string, string> parameters);\n\n        /// <summary>\n        /// Updates an <paramref name=\"instance\"/> in the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to update in the table.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the update finishes.\n        /// </returns>\n        Task<JToken> UpdateAsync(JObject instance);\n\n        /// <summary>\n        /// Updates an <paramref name=\"instance\"/> in the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to update in the table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the update finishes.\n        /// </returns>\n        Task<JToken> UpdateAsync(JObject instance, IDictionary<string, string> parameters);\n\n        /// <summary>\n        /// Deletes an <paramref name=\"instance\"/> from the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to delete from the table.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the delete finishes.\n        /// </returns>\n        Task<JToken> DeleteAsync(JObject instance);\n\n        /// <summary>\n        /// Deletes an <paramref name=\"instance\"/> from the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to delete from the table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the delete finishes.\n        /// </returns>\n        Task<JToken> DeleteAsync(JObject instance, IDictionary<string, string> parameters);\n\n        /// <summary>\n        /// Undeletes an <paramref name=\"instance\"/> from the table. This requires the soft delete feature to be enabled on the Mobile Service. Visit <see href=\"http://go.microsoft.com/fwlink/?LinkId=507647\">the link</see> for details.\n        /// </summary>\n        /// <param name=\"instance\">The instance to undelete from the table.</param>\n        /// <returns>A task that will complete when the undelete finishes.</returns>\n        Task<JToken> UndeleteAsync(JObject instance);\n\n        /// <summary>\n        /// Undeletes an <paramref name=\"instance\"/> from the table. This requires the soft delete feature to be enabled on the Mobile Service. Visit <see href=\"http://go.microsoft.com/fwlink/?LinkId=507647\">the link</see> for details.\n        /// </summary>\n        /// <param name=\"instance\">The instance to undelete from the table.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>A task that will complete when the undelete finishes.</returns>\n        Task<JToken> UndeleteAsync(JObject instance, IDictionary<string, string> parameters);\n\n        /// <summary>\n        /// Executes a lookup against a table.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id of the instance to lookup.\n        /// </param>\n        /// <returns>\n        /// A task that will return with a result when the lookup finishes.\n        /// </returns>\n        Task<JToken> LookupAsync(object id);\n\n        /// <summary>\n        /// Executes a lookup against a table.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id of the instance to lookup.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will return with a result when the lookup finishes.\n        /// </returns>\n        Task<JToken> LookupAsync(object id, IDictionary<string, string> parameters);\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/MobileServiceObjectReader.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class MobileServiceObjectReader\n    {\n        public string VersionPropertyName { get; set; }\n        public string DeletedPropertyName { get; set; }\n        public string UpdatedAtPropertyName { get; set; }\n        public string IdPropertyName { get; set; }\n        public string CreatedAtPropertyName { get; set; }\n\n        public MobileServiceObjectReader()\n        {\n            this.VersionPropertyName = MobileServiceSystemColumns.Version;\n            this.DeletedPropertyName = MobileServiceSystemColumns.Deleted;\n            this.UpdatedAtPropertyName = MobileServiceSystemColumns.UpdatedAt;\n            this.IdPropertyName = MobileServiceSystemColumns.Id;\n            this.CreatedAtPropertyName = MobileServiceSystemColumns.CreatedAt;\n        }\n\n        public string GetVersion(JObject item)\n        {\n            return (string)item[this.VersionPropertyName];\n        }\n\n        public string GetId(JObject item)\n        {\n            return (string)item[IdPropertyName];\n        }\n\n        public bool IsDeleted(JObject item)\n        {\n            JToken deletedToken = item[DeletedPropertyName];\n            bool isDeleted = deletedToken != null && deletedToken.Value<bool>();\n            return isDeleted;\n        }\n\n        public DateTimeOffset? GetUpdatedAt(JObject item)\n        {\n            return GetDateTimeOffset(item, UpdatedAtPropertyName);\n        }\n\n        public DateTimeOffset? GetCreatedAt(JObject item)\n        {\n            return GetDateTimeOffset(item, CreatedAtPropertyName);\n        }\n\n        private static DateTimeOffset? GetDateTimeOffset(JObject item, string name)\n        {\n            JToken updatedAtToken = item[name];\n            if (updatedAtToken != null)\n            {\n                return updatedAtToken.ToObject<DateTimeOffset?>();\n            }\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/MobileServiceSystemColumns.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Name of system columns on a Mobile Service table.\n    /// </summary>\n    public static class MobileServiceSystemColumns\n    {\n        /// <summary>\n        /// The id column on a Mobile Service table.\n        /// </summary>\n        public static readonly string Id = \"id\";\n\n        /// <summary>\n        /// The version column on a Mobile Service table.\n        /// </summary>\n        public static readonly string Version = \"__version\";\n\n        /// <summary>\n        /// The createdAt column on a Mobile Service table.\n        /// </summary>\n        public static readonly string CreatedAt = \"__createdAt\";\n\n        /// <summary>\n        /// The updatedAt column on a Mobile Service table.\n        /// </summary>\n        public static readonly string UpdatedAt = \"__updatedAt\";\n\n        /// <summary>\n        /// The deleted colum on a Mobile Service table.\n        /// </summary>\n        public static readonly string Deleted = \"__deleted\";\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/MobileServiceSystemProperties.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// A flags enum for the available system properties in \n    /// Mobile Services.\n    /// </summary>\n    [Flags]\n    public enum MobileServiceSystemProperties\n    {\n        /// <summary>\n        /// No system properties\n        /// </summary>\n        None = 0x0,\n        \n        /// <summary>\n        /// The __createdAt system property\n        /// </summary>\n        CreatedAt = 0x1,\n\n        /// <summary>\n        /// The __updatedAt system property\n        /// </summary>\n        UpdatedAt = 0x2,\n\n        /// <summary>\n        /// The __version system property\n        /// </summary>\n        Version = 0x4,\n\n        /// <summary>\n        /// The __deleted system property\n        /// </summary>\n        Deleted = 0x8,\n\n        /// <summary>\n        /// All of the system properties.\n        /// </summary>\n        All = 0xFFFF,\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/MobileServiceTable.Generic.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Net;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides operations on a table for a Mobile Service.\n    /// </summary>\n    /// <typeparam name=\"T\">\n    /// The type of instances in the table (which implies the table).\n    /// </typeparam>\n    internal class MobileServiceTable<T> : MobileServiceTable, IMobileServiceTable<T>\n    {\n        private MobileServiceTableQueryProvider queryProvider;\n        private bool hasIntegerId;\n\n        /// <summary>\n        /// Initializes a new instance of the MobileServiceTables class.\n        /// </summary>\n        /// <param name=\"tableName\">\n        /// The name of the table.\n        /// </param>\n        /// <param name=\"client\">\n        /// The <see cref=\"MobileServiceClient\"/> associated with this table.\n        /// </param>\n        public MobileServiceTable(string tableName, MobileServiceClient client)\n            : base(tableName, client)\n        {\n            this.queryProvider = new MobileServiceTableQueryProvider();\n            this.SystemProperties = client.Serializer.GetSystemProperties(typeof(T));\n            Type idType = client.Serializer.GetIdPropertyType<T>(throwIfNotFound: false);\n            this.hasIntegerId = idType == null || MobileServiceSerializer.IsIntegerId(idType);\n        }\n\n        /// <summary>\n        /// Returns instances from a table.\n        /// </summary>\n        /// <returns>\n        /// Instances from the table.\n        /// </returns>\n        /// <remarks>\n        /// This call will not handle paging, etc., for you.\n        /// </remarks>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"It does not appear nested when used via the async pattern.\")]\n        public Task<IEnumerable<T>> ReadAsync()\n        {\n            return ReadAsync(CreateQuery());\n        }\n\n        /// <summary>\n        /// Returns instances from a table based on a query.\n        /// </summary>\n        /// <typeparam name=\"U\">\n        /// The type of instance returned by the query.\n        /// </typeparam>\n        /// <param name=\"query\">\n        /// The query to execute.\n        /// </param>\n        /// <returns>\n        /// Instances from the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Generic are not nested when used via async.\")]\n        public Task<IEnumerable<U>> ReadAsync<U>(IMobileServiceTableQuery<U> query)\n        {\n            if (query == null)\n            {\n                throw new ArgumentNullException(\"query\");\n            }\n\n            return query.ToEnumerableAsync();\n        }\n\n        /// <summary>\n        /// Executes a query against the table.\n        /// </summary>\n        /// <param name=\"query\">\n        /// A query to execute.\n        /// </param>\n        /// <returns>\n        /// A task that will return with results when the query finishes.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Generic are not nested when used via async.\")]\n        public async Task<IEnumerable<U>> ReadAsync<U>(string query)\n        {\n            QueryResult result = await base.ReadAsync(query, null, MobileServiceFeatures.TypedTable);\n\n            return new QueryResultEnumerable<U>(\n                result.TotalCount,\n                result.NextLink,\n                this.MobileServiceClient.Serializer.Deserialize(result.Values, typeof(U)).Cast<U>());\n        }\n\n        /// <summary>\n        /// Inserts a new instance into the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to insert.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the insertion has finished.\n        /// </returns>\n        public async Task InsertAsync(T instance)\n        {\n            await this.InsertAsync(instance, null);\n        }\n\n        /// <summary>\n        /// Inserts a new instance into the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to insert.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the insertion has finished.\n        /// </returns>\n        public async Task InsertAsync(T instance, IDictionary<string, string> parameters)\n        {\n            if (instance == null)\n            {\n                throw new ArgumentNullException(\"instance\");\n            }\n\n            MobileServiceSerializer serializer = this.MobileServiceClient.Serializer;\n            JObject value = serializer.Serialize(instance) as JObject;\n            if (!this.hasIntegerId)\n            {\n                string unused;\n                value = MobileServiceSerializer.RemoveSystemProperties(value, out unused);\n            }\n\n            JToken insertedValue = await TransformHttpException(serializer, () => this.InsertAsync(value, parameters, MobileServiceFeatures.TypedTable));\n\n            serializer.Deserialize<T>(insertedValue, instance);\n        }\n\n        /// <summary>\n        /// Updates an instance in the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to update.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the update has finished.\n        /// </returns>\n        public async Task UpdateAsync(T instance)\n        {\n            await this.UpdateAsync(instance, null);\n        }\n\n        /// <summary>\n        /// Updates an instance in the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to update.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the update has finished.\n        /// </returns>\n        public async Task UpdateAsync(T instance, IDictionary<string, string> parameters)\n        {\n            if (instance == null)\n            {\n                throw new ArgumentNullException(\"instance\");\n            }\n\n            MobileServiceSerializer serializer = this.MobileServiceClient.Serializer;\n            JObject value = serializer.Serialize(instance) as JObject;\n\n            JToken updatedValue = await TransformHttpException(serializer, () => this.UpdateAsync(value, parameters, MobileServiceFeatures.TypedTable));\n\n\n            serializer.Deserialize<T>(updatedValue, instance);\n        }\n\n        /// <summary>\n        /// Undeletes an <paramref name=\"instance\"/> from the table.\n        /// </summary>\n        /// <param name=\"instance\">The instance to undelete from the table.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>A task that will complete when the undelete finishes.</returns>\n        public async Task UndeleteAsync(T instance, IDictionary<string, string> parameters)\n        {\n            if (instance == null)\n            {\n                throw new ArgumentNullException(\"instance\");\n            }\n\n            MobileServiceSerializer serializer = this.MobileServiceClient.Serializer;\n            JObject value = serializer.Serialize(instance) as JObject;\n\n            JToken updatedValue = await TransformHttpException(serializer, () => this.UndeleteAsync(value, parameters, MobileServiceFeatures.TypedTable));\n\n            serializer.Deserialize<T>(updatedValue, instance);\n        }\n\n        /// <summary>\n        /// Undeletes an <paramref name=\"instance\"/> from the table.\n        /// </summary>\n        /// <param name=\"instance\">The instance to undelete from the table.</param>\n        /// <returns>A task that will complete when the undelete finishes.</returns>\n        public Task UndeleteAsync(T instance)\n        {\n            return this.UndeleteAsync(instance, null);\n        }\n\n        /// <summary>\n        /// Deletes an instance from the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to delete.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the delete has finished.\n        /// </returns>\n        public async Task DeleteAsync(T instance)\n        {\n            await this.DeleteAsync(instance, null);\n        }\n\n        /// <summary>\n        /// Deletes an instance from the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to delete.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the delete has finished.\n        /// </returns>\n        public async Task DeleteAsync(T instance, IDictionary<string, string> parameters)\n        {\n            if (instance == null)\n            {\n                throw new ArgumentNullException(\"instance\");\n            }\n\n            MobileServiceSerializer serializer = this.MobileServiceClient.Serializer;\n            JObject value = serializer.Serialize(instance) as JObject;\n\n            await this.TransformHttpException(serializer, () => this.DeleteAsync(value, parameters, MobileServiceFeatures.TypedTable));\n\n            // Clear the instance id since it's no longer associated with that\n            // id on the server (note that reflection is goodly enough to turn\n            // null into the correct value for us).\n            serializer.SetIdToDefault(instance);\n        }\n\n        /// <summary>\n        /// Get an instance from the table by its id.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id of the instance.\n        /// </param>\n        /// <returns>\n        /// The desired instance.\n        /// </returns>\n        public new async Task<T> LookupAsync(object id)\n        {\n            return await this.LookupAsync(id, null);\n        }\n\n        /// <summary>\n        /// Get an instance from the table by its id.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id of the instance.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// The desired instance.\n        /// </returns>\n        public new async Task<T> LookupAsync(object id, IDictionary<string, string> parameters)\n        {\n            // Ensure that the id passed in is assignable to the Id property of T\n            this.MobileServiceClient.Serializer.EnsureValidIdForType<T>(id);\n            JToken value = await base.LookupAsync(id, parameters, MobileServiceFeatures.TypedTable);\n            return this.MobileServiceClient.Serializer.Deserialize<T>(value);\n        }\n\n        /// <summary>\n        /// Refresh the current instance with the latest values from the\n        /// table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to refresh.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the refresh has finished.\n        /// </returns>\n        public async Task RefreshAsync(T instance)\n        {\n            await this.RefreshAsync(instance, null);\n        }\n\n        /// <summary>\n        /// Refresh the current instance with the latest values from the\n        /// table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to refresh.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the refresh has finished.\n        /// </returns>\n        public async Task RefreshAsync(T instance, IDictionary<string, string> parameters)\n        {\n            if (instance == null)\n            {\n                throw new ArgumentNullException(\"instance\");\n            }\n\n            MobileServiceSerializer serializer = this.MobileServiceClient.Serializer;\n            object id = serializer.GetId(instance, allowDefault: true);\n\n            if (MobileServiceSerializer.IsDefaultId(id))\n            {\n                return;\n            }\n            if (id is string)\n            {\n                MobileServiceSerializer.EnsureValidStringId(id, allowDefault: true);\n            }\n\n            // Get the latest version of this element\n            JObject refreshed = await this.GetSingleValueAsync(id, parameters);\n\n            // Deserialize that value back into the current instance\n            serializer.Deserialize<T>(refreshed, instance);\n        }\n\n        /// <summary>\n        /// Creates a query for the current table.\n        /// </summary>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        public IMobileServiceTableQuery<T> CreateQuery()\n        {\n            return this.queryProvider.Create(this, new T[0].AsQueryable(), new Dictionary<string, string>(), includeTotalCount: false);\n        }\n\n        /// <summary>\n        /// Creates a query by applying the specified filter predicate.\n        /// </summary>\n        /// <param name=\"predicate\">\n        /// The filter predicate.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> Where(Expression<Func<T, bool>> predicate)\n        {\n            return CreateQuery().Where(predicate);\n        }\n\n        /// <summary>\n        /// Creates a query by applying the specified selection.\n        /// </summary>\n        /// <typeparam name=\"U\">\n        /// Type representing the projected result of the query.\n        /// </typeparam>\n        /// <param name=\"selector\">\n        /// The selector function.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1704:IdentifiersShouldBeSpelledCorrectly\", MessageId = \"U\", Justification = \"Standard for LINQ\")]\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<U> Select<U>(Expression<Func<T, U>> selector)\n        {\n            return CreateQuery().Select(selector);\n        }\n\n        /// <summary>\n        /// Creates a query by applying the specified ascending order clause.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> OrderBy<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            return CreateQuery().OrderBy(keySelector);\n        }\n\n        /// <summary>\n        /// Creates a query by applying the specified descending order clause.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> OrderByDescending<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            return CreateQuery().OrderByDescending(keySelector);\n        }\n\n        /// <summary>\n        /// Creates a query by applying the specified ascending order clause.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> ThenBy<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            return CreateQuery().ThenBy(keySelector);\n        }\n\n        /// <summary>\n        /// Creates a query by applying the specified descending order clause.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> ThenByDescending<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            return CreateQuery().ThenByDescending(keySelector);\n        }\n\n        /// <summary>\n        /// Creates a query by applying the specified skip clause.\n        /// </summary>\n        /// <param name=\"count\">\n        /// The number to skip.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        public IMobileServiceTableQuery<T> Skip(int count)\n        {\n            return CreateQuery().Skip(count);\n        }\n\n        /// <summary>\n        /// Creates a query by applying the specified take clause.\n        /// </summary>\n        /// <param name=\"count\">\n        /// The number to take.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        public IMobileServiceTableQuery<T> Take(int count)\n        {\n            return CreateQuery().Take(count);\n        }\n\n        /// <summary>\n        /// Creates a query that will ensure it gets the total count for all\n        /// the records that would have been returned ignoring any take paging/\n        /// limit clause specified by client or server.\n        /// </summary>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        public IMobileServiceTableQuery<T> IncludeTotalCount()\n        {\n            return this.CreateQuery().IncludeTotalCount();\n        }\n\n        /// <summary>\n        /// Creates a query that will ensure it gets the deleted records.\n        /// </summary>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        public IMobileServiceTableQuery<T> IncludeDeleted()\n        {\n            return this.CreateQuery().IncludeDeleted();\n        }\n\n        /// <summary>\n        /// Applies to the source query the specified string key-value \n        /// pairs to be used as user-defined parameters with the request URI \n        /// query string.\n        /// </summary>\n        /// <param name=\"parameters\">\n        /// The parameters to apply.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        public IMobileServiceTableQuery<T> WithParameters(IDictionary<string, string> parameters)\n        {\n            return this.CreateQuery().WithParameters(parameters);\n        }\n\n        /// <summary>\n        /// Gets the instances of the table asynchronously.\n        /// </summary>\n        /// <returns>\n        /// Instances from the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Not nested when used via async pattern.\")]\n        public Task<IEnumerable<T>> ToEnumerableAsync()\n        {\n            return this.ReadAsync();\n        }\n\n        /// <summary>\n        /// Gets the instances of the table asynchronously and returns the\n        /// results in a new List.\n        /// </summary>\n        /// <returns>\n        /// Instances from the table as a List.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Not nested when used via async pattern.\")]\n        public async Task<List<T>> ToListAsync()\n        {\n            return new QueryResultList<T>(await this.ReadAsync());\n        }\n\n        /// <summary>\n        /// Executes a request and transforms a 412 and 409 response to respective exception type.\n        /// </summary>\n        private async Task<JToken> TransformHttpException(MobileServiceSerializer serializer, Func<Task<JToken>> action)\n        {\n            try\n            {\n                return await action();\n            }\n            catch (MobileServiceInvalidOperationException ex)\n            {\n                if (ex.Response.StatusCode != HttpStatusCode.PreconditionFailed &&\n                    ex.Response.StatusCode != HttpStatusCode.Conflict)\n                {\n                    throw;\n                }\n\n                T item = default(T);\n                try\n                {\n                    item = serializer.Deserialize<T>(ex.Value);\n                }\n                catch { }\n\n                if (ex.Response.StatusCode == HttpStatusCode.PreconditionFailed)\n                {\n                    throw new MobileServicePreconditionFailedException<T>(ex, item);\n                }\n                else if (ex.Response.StatusCode == HttpStatusCode.Conflict)\n                {\n                    throw new MobileServiceConflictException<T>(ex, item);\n                }\n                throw;\n            }\n        }\n\n        /// <summary>\n        /// Get an element from a table by its id.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id of the element.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in\n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// The desired element as JSON object.\n        /// </returns>\n        private async Task<JObject> GetSingleValueAsync(object id, IDictionary<string, string> parameters)\n        {\n            Debug.Assert(id != null);\n\n            // Create a query for just this item\n            string query = string.Format(\n                CultureInfo.InvariantCulture,\n                \"$filter=({0} eq {1})\",\n                MobileServiceSystemColumns.Id,\n                ODataExpressionVisitor.ToODataConstant(id));\n\n            // Send the query\n            QueryResult response = await this.ReadAsync(query, parameters, MobileServiceFeatures.TypedTable);\n\n            return GetSingleValue(response);\n        }\n\n        private static JObject GetSingleValue(QueryResult response)\n        {\n            // Get the first element in the response\n            JObject jobject = response.Values.FirstOrDefault() as JObject;\n\n            if (jobject == null)\n            {\n                string responseStr = response != null ? response.ToString() : \"null\";\n                throw new InvalidOperationException(\n                    string.Format(\n                        CultureInfo.InvariantCulture,\n                        \"Could not get object from response {0}.\",\n                        responseStr));\n            }\n\n            return jobject;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/MobileServiceTable.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides operations on tables for a Microsoft Azure Mobile Service.\n    /// </summary>\n    internal class MobileServiceTable : IMobileServiceTable\n    {\n        /// <summary>\n        /// The route separator used to denote the table in a uri like\n        /// .../{app}/tables/{coll}.\n        /// </summary>\n        internal const string TableRouteSeparatorName = \"tables\";\n\n        /// <summary>\n        /// The HTTP PATCH method used for update operations.\n        /// </summary>\n        private static readonly HttpMethod patchHttpMethod = new HttpMethod(\"PATCH\");\n\n        /// <summary>\n        /// The name of the system properties query string parameter\n        /// </summary>\n        public const string SystemPropertiesQueryParameterName = \"__systemproperties\";\n\n        /// <summary>\n        /// The name of the include deleted query string parameter\n        /// </summary>\n        public const string IncludeDeletedParameterName = \"__includeDeleted\";\n\n        /// <summary>\n        /// Gets a reference to the <see cref=\"MobileServiceClient\"/> associated \n        /// with this table.\n        /// </summary>\n        public MobileServiceClient MobileServiceClient { get; private set; }\n\n        /// <summary>\n        /// Gets the name of the table.\n        /// </summary>\n        public string TableName { get; private set; }\n\n        /// <summary>\n        /// The Mobile Service system properties to be included with items.\n        /// </summary>\n        public MobileServiceSystemProperties SystemProperties { get; set; }\n\n        /// <summary>\n        /// Feature which are sent as telemetry information to the service for all\n        /// outgoing calls.\n        /// </summary>\n        internal MobileServiceFeatures Features { get; set; }\n\n        /// <summary>\n        /// Initializes a new instance of the MobileServiceTable class.\n        /// </summary>\n        /// <param name=\"tableName\">\n        /// The name of the table.\n        /// </param>\n        /// <param name=\"client\">\n        /// The <see cref=\"MobileServiceClient\"/> associated with this table.\n        /// </param>\n        public MobileServiceTable(string tableName, MobileServiceClient client)\n        {\n            Debug.Assert(tableName != null);\n            Debug.Assert(client != null);\n\n            this.TableName = tableName;\n            this.MobileServiceClient = client;\n            this.SystemProperties = MobileServiceSystemProperties.None;\n        }\n\n        /// <summary>\n        /// Executes a query against the table.\n        /// </summary>\n        /// <param name=\"query\">\n        /// A query to execute.\n        /// </param>\n        /// <returns>\n        /// A task that will return with results when the query finishes.\n        /// </returns>\n        public async virtual Task<JToken> ReadAsync(string query)\n        {\n\n            return await this.ReadAsync(query, null, wrapResult: false);\n        }\n\n        /// <summary>\n        /// Executes a query against the table.\n        /// </summary>\n        /// <param name=\"query\">\n        /// A query to execute.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <param name=\"wrapResult\">\n        /// Specifies whether response should be formatted as JObject including extra response details e.g. link header\n        /// </param>\n        /// <returns>\n        /// A task that will return with results when the query finishes.\n        /// </returns>\n        public virtual async Task<JToken> ReadAsync(string query, IDictionary<string, string> parameters, bool wrapResult)\n        {\n            QueryResult result = await this.ReadAsync(query, parameters, MobileServiceFeatures.UntypedTable);\n            if (wrapResult)\n            {\n                return result.ToJObject();\n            }\n            else\n            {\n                return result.Response;\n            }\n        }\n\n        /// <summary>\n        /// Executes a query against the table.\n        /// </summary>\n        /// <param name=\"query\">\n        /// A query to execute.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <param name=\"features\">\n        /// Value indicating which features of the SDK are being used in this call. Useful for telemetry.\n        /// </param>\n        /// <returns>\n        /// A task that will return with results when the query finishes.\n        /// </returns>\n        internal virtual async Task<QueryResult> ReadAsync(string query, IDictionary<string, string> parameters, MobileServiceFeatures features)\n        {\n            features = this.AddRequestFeatures(features, parameters);\n            parameters = AddSystemProperties(this.SystemProperties, parameters);\n\n            string uriPath;\n            Uri uri;\n            bool absolute;\n            if (HttpUtility.TryParseQueryUri(this.MobileServiceClient.ApplicationUri, query, out uri, out absolute))\n            {\n                if (absolute)\n                {\n                    features |= MobileServiceFeatures.ReadWithLinkHeader;\n                }\n                uriPath = HttpUtility.GetUriWithoutQuery(uri);\n                query = uri.Query;\n            }\n            else\n            {\n                uriPath = MobileServiceUrlBuilder.CombinePaths(TableRouteSeparatorName, this.TableName);\n            }\n\n            string parametersString = MobileServiceUrlBuilder.GetQueryString(parameters);\n\n            // Concatenate the query and the user-defined query string parameters\n            if (!string.IsNullOrEmpty(parametersString))\n            {\n                if (!string.IsNullOrEmpty(query))\n                {\n                    query += '&' + parametersString;\n                }\n                else\n                {\n                    query = parametersString;\n                }\n            }\n\n            string uriString = MobileServiceUrlBuilder.CombinePathAndQuery(uriPath, query);\n\n            return await ReadAsync(uriString, features);\n        }\n\n        internal Task<QueryResult> ReadAsync(Uri uri)\n        {\n            return this.ReadAsync(uri.ToString(), this.Features);\n        }\n\n        private async Task<QueryResult> ReadAsync(string uriString, MobileServiceFeatures features)\n        {\n            MobileServiceHttpResponse response = await this.MobileServiceClient.HttpClient.RequestAsync(HttpMethod.Get, uriString, this.MobileServiceClient.CurrentUser, null, true, features: this.Features | features);\n\n            return QueryResult.Parse(response, this.MobileServiceClient.SerializerSettings, validate: false);\n        }\n\n        /// <summary>\n        /// Inserts an <paramref name=\"instance\"/> into the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to insert into the table.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the insert finishes.\n        /// </returns>\n        public virtual Task<JToken> InsertAsync(JObject instance)\n        {\n            return this.InsertAsync(instance, null);\n        }\n\n        /// <summary>\n        /// Inserts an <paramref name=\"instance\"/> into the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to insert into the table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the insert finishes.\n        /// </returns>\n        public Task<JToken> InsertAsync(JObject instance, IDictionary<string, string> parameters)\n        {\n            return this.InsertAsync(instance, parameters, MobileServiceFeatures.UntypedTable);\n        }\n\n        /// <summary>\n        /// Inserts an <paramref name=\"instance\"/> into the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to insert into the table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <param name=\"features\">\n        /// Value indicating which features of the SDK are being used in this call. Useful for telemetry.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the insert finishes.\n        /// </returns>\n        internal async Task<JToken> InsertAsync(JObject instance, IDictionary<string, string> parameters, MobileServiceFeatures features)\n        {\n            if (instance == null)\n            {\n                throw new ArgumentNullException(\"instance\");\n            }\n\n            // Make sure the instance doesn't have an int id set for an insertion\n            object id = MobileServiceSerializer.GetId(instance, ignoreCase: false, allowDefault: true);\n            bool isStringIdOrDefaultIntId = id is string || MobileServiceSerializer.IsDefaultId(id);\n            if (!isStringIdOrDefaultIntId)\n            {\n                throw new ArgumentException(\n                        string.Format(\n                            CultureInfo.InvariantCulture,\n                            \"Cannot insert if the {0} member is already set.\",\n                           MobileServiceSystemColumns.Id),\n                            \"instance\");\n            }\n\n            features = this.AddRequestFeatures(features, parameters);\n            parameters = AddSystemProperties(this.SystemProperties, parameters);\n            string uriString = GetUri(this.TableName, null, parameters);\n\n            return await this.TransformHttpException(async () =>\n            {\n                MobileServiceHttpResponse response = await this.MobileServiceClient.HttpClient.RequestAsync(HttpMethod.Post, uriString, this.MobileServiceClient.CurrentUser, instance.ToString(Formatting.None), true, features: this.Features | features);\n                var result = GetJTokenFromResponse(response);\n                return RemoveUnrequestedSystemProperties(result, parameters, response.Etag);\n            });\n        }\n\n        /// <summary>\n        /// Removes system properties from the passed in item\n        /// </summary>\n        /// <param name=\"item\">\n        /// The item returned from the server\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <param name=\"version\">\n        /// Set to the value of the version system property before it is removed.\n        /// </param>\n        /// <returns>\n        /// An item that only contains normal fields and the requested system properties\n        /// </returns>\n        private JToken RemoveUnrequestedSystemProperties(JToken item, IDictionary<string, string> parameters, string version)\n        {\n            object id = null;\n\n            if (item == null)\n            {\n                return null;\n            }\n\n            MobileServiceSerializer.TryGetId(item as JObject, true, out id);\n            if (id == null || MobileServiceSerializer.IsIntegerId(id))\n            {\n                return item;\n            }\n\n            var actualSystemProperties = GetRequestedSystemProperties(parameters);\n            if (actualSystemProperties == MobileServiceSystemProperties.All)\n            {\n                return item;\n            }\n\n            string ignoredVersion = null;\n            var cleanedItem = MobileServiceSerializer.RemoveSystemProperties(item as JObject, out ignoredVersion, actualSystemProperties);\n\n            if (version != null)\n            {\n                cleanedItem[MobileServiceSerializer.VersionSystemPropertyString] = GetValueFromEtag(version);\n            }\n\n            return cleanedItem;\n        }\n\n        /// <summary>\n        /// Calculates the requested system properties from the server\n        /// </summary>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// The calculated system properties value\n        /// </returns>\n        private MobileServiceSystemProperties GetRequestedSystemProperties(IDictionary<string, string> parameters)\n        {\n            var requestedSystemProperties = MobileServiceSystemProperties.None;\n\n            // Parse dictionary for system properties override\n            if (parameters != null && parameters.ContainsKey(SystemPropertiesQueryParameterName))\n            {\n                var sysProps = parameters[SystemPropertiesQueryParameterName];\n                if (sysProps.IndexOf(\"*\") >= 0)\n                {\n                    requestedSystemProperties = MobileServiceSystemProperties.All;\n                }\n                else\n                {\n                    if (sysProps.IndexOf(MobileServiceSystemProperties.Version.ToString(), StringComparison.OrdinalIgnoreCase) >= 0)\n                    {\n                        requestedSystemProperties |= MobileServiceSystemProperties.Version;\n                    }\n                    if (sysProps.IndexOf(MobileServiceSystemProperties.UpdatedAt.ToString(), StringComparison.OrdinalIgnoreCase) >= 0)\n                    {\n                        requestedSystemProperties |= MobileServiceSystemProperties.UpdatedAt;\n                    }\n                    if (sysProps.IndexOf(MobileServiceSystemProperties.CreatedAt.ToString(), StringComparison.OrdinalIgnoreCase) >= 0)\n                    {\n                        requestedSystemProperties |= MobileServiceSystemProperties.CreatedAt;\n                    }\n                }\n            }\n            else\n            {\n                requestedSystemProperties = this.SystemProperties;\n            }\n\n            return requestedSystemProperties;\n        }\n\n        /// <summary>\n        /// Updates an <paramref name=\"instance\"/> in the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to update in the table.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the update finishes.\n        /// </returns>\n        public virtual Task<JToken> UpdateAsync(JObject instance)\n        {\n            return this.UpdateAsync(instance, null);\n        }\n\n        /// <summary>\n        /// Updates an <paramref name=\"instance\"/> in the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to update in the table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the update finishes.\n        /// </returns>\n        public Task<JToken> UpdateAsync(JObject instance, IDictionary<string, string> parameters)\n        {\n            return this.UpdateAsync(instance, parameters, MobileServiceFeatures.UntypedTable);\n        }\n\n        /// <summary>\n        /// Updates an <paramref name=\"instance\"/> in the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to update in the table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <param name=\"features\">\n        /// Value indicating which features of the SDK are being used in this call. Useful for telemetry.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the update finishes.\n        /// </returns>\n        internal async Task<JToken> UpdateAsync(JObject instance, IDictionary<string, string> parameters, MobileServiceFeatures features)\n        {\n            if (instance == null)\n            {\n                throw new ArgumentNullException(\"instance\");\n            }\n\n            features = this.AddRequestFeatures(features, parameters);\n            object id = MobileServiceSerializer.GetId(instance);\n            Dictionary<string, string> headers = StripSystemPropertiesAndAddVersionHeader(ref instance, ref parameters, id);\n            string content = instance.ToString(Formatting.None);\n            string uriString = GetUri(this.TableName, id, parameters);\n\n            return await this.TransformHttpException(async () =>\n            {\n                MobileServiceHttpResponse response = await this.MobileServiceClient.HttpClient.RequestAsync(patchHttpMethod, uriString, this.MobileServiceClient.CurrentUser, content, true, headers, this.Features | features);\n                var result = GetJTokenFromResponse(response);\n                return RemoveUnrequestedSystemProperties(result, parameters, response.Etag);\n            });\n        }\n\n        /// <summary>\n        /// Undeletes an <paramref name=\"instance\"/> from the table.\n        /// </summary>\n        /// <param name=\"instance\">The instance to undelete from the table.</param>\n        /// <returns>A task that will complete when the undelete finishes.</returns>\n        public Task<JToken> UndeleteAsync(JObject instance)\n        {\n            return this.UndeleteAsync(instance, null);\n        }\n\n        /// <summary>\n        /// Undeletes an <paramref name=\"instance\"/> from the table.\n        /// </summary>\n        /// <param name=\"instance\">The instance to undelete from the table.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>A task that will complete when the undelete finishes.</returns>\n        public Task<JToken> UndeleteAsync(JObject instance, IDictionary<string, string> parameters)\n        {\n            return UndeleteAsync(instance, parameters, MobileServiceFeatures.UntypedTable);\n        }\n\n        protected async Task<JToken> UndeleteAsync(JObject instance, IDictionary<string, string> parameters, MobileServiceFeatures features)\n        {\n            if (instance == null)\n            {\n                throw new ArgumentNullException(\"instance\");\n            }\n\n            object id = MobileServiceSerializer.GetId(instance);\n\n\n            Dictionary<string, string> headers = StripSystemPropertiesAndAddVersionHeader(ref instance, ref parameters, id);\n            string content = instance.ToString(Formatting.None);\n            string uriString = GetUri(this.TableName, id, parameters);\n\n            return await this.TransformHttpException(async () =>\n            {\n                MobileServiceHttpResponse response = await this.MobileServiceClient.HttpClient.RequestAsync(HttpMethod.Post, uriString, this.MobileServiceClient.CurrentUser, null, true, headers, this.Features | features);\n                var result = GetJTokenFromResponse(response);\n                return RemoveUnrequestedSystemProperties(result, parameters, response.Etag);\n            });\n        }\n\n        /// <summary>\n        /// Deletes an <paramref name=\"instance\"/> from the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to delete from the table.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the delete finishes.\n        /// </returns>\n        public virtual Task<JToken> DeleteAsync(JObject instance)\n        {\n            return this.DeleteAsync(instance, null);\n        }\n\n        /// <summary>\n        /// Deletes an <paramref name=\"instance\"/> from the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to delete from the table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the delete finishes.\n        /// </returns>\n        public Task<JToken> DeleteAsync(JObject instance, IDictionary<string, string> parameters)\n        {\n            return this.DeleteAsync(instance, parameters, MobileServiceFeatures.UntypedTable);\n        }\n\n        /// <summary>\n        /// Deletes an <paramref name=\"instance\"/> from the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to delete from the table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <param name=\"features\">\n        /// Value indicating which features of the SDK are being used in this call. Useful for telemetry.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the delete finishes.\n        /// </returns>\n        internal async Task<JToken> DeleteAsync(JObject instance, IDictionary<string, string> parameters, MobileServiceFeatures features)\n        {\n            if (instance == null)\n            {\n                throw new ArgumentNullException(\"instance\");\n            }\n\n            object id = MobileServiceSerializer.GetId(instance);\n            features = this.AddRequestFeatures(features, parameters);\n            Dictionary<string, string> headers = StripSystemPropertiesAndAddVersionHeader(ref instance, ref parameters, id);\n            string uriString = GetUri(this.TableName, id, parameters);\n\n            return await TransformHttpException(async () =>\n            {\n                MobileServiceHttpResponse response = await this.MobileServiceClient.HttpClient.RequestAsync(HttpMethod.Delete, uriString, this.MobileServiceClient.CurrentUser, null, false, headers, this.Features | features);\n                var result = GetJTokenFromResponse(response);\n                return RemoveUnrequestedSystemProperties(result, parameters, response.Etag);\n            });\n        }\n\n        /// <summary>\n        /// Executes a lookup against a table.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id of the instance to lookup.\n        /// </param>\n        /// <returns>\n        /// A task that will return with a result when the lookup finishes.\n        /// </returns>\n        public Task<JToken> LookupAsync(object id)\n        {\n            return this.LookupAsync(id, null);\n        }\n\n        /// <summary>\n        /// Executes a lookup against a table.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id of the instance to lookup.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A task that will return with a result when the lookup finishes.\n        /// </returns>\n        public Task<JToken> LookupAsync(object id, IDictionary<string, string> parameters)\n        {\n            return this.LookupAsync(id, parameters, MobileServiceFeatures.UntypedTable);\n        }\n\n        /// <summary>\n        /// Executes a lookup against a table.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id of the instance to lookup.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <param name=\"features\">\n        /// Value indicating which features of the SDK are being used in this call. Useful for telemetry.\n        /// </param>\n        /// <returns>\n        /// A task that will return with a result when the lookup finishes.\n        /// </returns>\n        internal async Task<JToken> LookupAsync(object id, IDictionary<string, string> parameters, MobileServiceFeatures features)\n        {\n            MobileServiceSerializer.EnsureValidId(id);\n\n            features = this.AddRequestFeatures(features, parameters);\n            parameters = AddSystemProperties(this.SystemProperties, parameters);\n\n            string uriString = GetUri(this.TableName, id, parameters);\n            MobileServiceHttpResponse response = await this.MobileServiceClient.HttpClient.RequestAsync(HttpMethod.Get, uriString, this.MobileServiceClient.CurrentUser, null, true, features: this.Features | features);\n            return GetJTokenFromResponse(response);\n        }\n\n        /// <summary>\n        /// Adds the tables requested system properties to the parameters collection.\n        /// </summary>\n        /// <param name=\"systemProperties\">The sytem properties to add.</param>\n        /// <param name=\"parameters\">The parameters collection.</param>\n        /// <returns>\n        /// The parameters collection with any requested system properties included.\n        /// </returns>\n        internal static IDictionary<string, string> AddSystemProperties(MobileServiceSystemProperties systemProperties, IDictionary<string, string> parameters)\n        {\n            string systemPropertiesString = GetSystemPropertiesString(systemProperties);\n            return AddSystemParameter(parameters, SystemPropertiesQueryParameterName, systemPropertiesString);\n        }\n\n        /// <summary>\n        /// Adds the query string parameter to include deleted records.\n        /// </summary>\n        /// <param name=\"parameters\">The parameters collection.</param>\n        /// <returns>\n        /// The parameters collection with includeDeleted parameter included.\n        /// </returns>\n        internal static IDictionary<string, string> IncludeDeleted(IDictionary<string, string> parameters)\n        {\n            return AddSystemParameter(parameters, MobileServiceTable.IncludeDeletedParameterName, \"true\");\n        }\n\n        /// <summary>\n        /// Adds the system parameter to the parameters collection.\n        /// </summary>\n        /// <param name=\"parameters\">The parameters collection.</param>\n        /// <param name=\"name\">The name of system parameter.</param>\n        /// <param name=\"value\">The value of system parameter.</param>\n        /// <returns></returns>\n        internal static IDictionary<string, string> AddSystemParameter(IDictionary<string, string> parameters, string name, string value)\n        {\n            // Make sure we have a case-insensitive parameters dictionary\n            if (parameters != null)\n            {\n                parameters = new Dictionary<string, string>(parameters, StringComparer.OrdinalIgnoreCase);\n            }\n\n            // If there is already a user parameter for the system properties, just use it\n            if (parameters == null || !parameters.ContainsKey(name))\n            {\n                if (value != null)\n                {\n                    parameters = parameters ?? new Dictionary<string, string>();\n                    parameters.Add(name, value);\n                }\n            }\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// Gets the system properties header value from the <see cref=\"MobileServiceSystemProperties\"/>.\n        /// </summary>\n        /// <param name=\"properties\">The system properties to set in the system properties header.</param>\n        /// <returns>\n        /// The system properties header value. Returns null if the systemProperty value is None.\n        /// </returns>\n        private static string GetSystemPropertiesString(MobileServiceSystemProperties properties)\n        {\n            if (properties == MobileServiceSystemProperties.None)\n            {\n                return null;\n            }\n            if (properties == MobileServiceSystemProperties.All)\n            {\n                return \"*\";\n            }\n\n            string[] systemProperties = properties.ToString().Split(',');\n\n            for (int i = 0; i < systemProperties.Length; i++)\n            {\n                string property = systemProperties[i].Trim();\n                char firstLetterAsLower = char.ToLowerInvariant(property[0]);\n                systemProperties[i] = MobileServiceSerializer.SystemPropertyPrefix + firstLetterAsLower + property.Substring(1);\n            }\n\n            string systemPropertiesString = string.Join(\",\", systemProperties);\n            return systemPropertiesString;\n        }\n\n        /// <summary>\n        /// Parses body of the <paramref name=\"response\"/> as JToken\n        /// </summary>\n        /// <param name=\"response\">The http response message.</param>\n        /// <returns>A pair of raw response and parsed JToken</returns>\n        internal async Task<Tuple<string, JToken>> ParseContent(HttpResponseMessage response)\n        {\n            return await ParseContent(response, this.MobileServiceClient.SerializerSettings);\n        }\n\n        internal static async Task<Tuple<string, JToken>> ParseContent(HttpResponseMessage response, JsonSerializerSettings serializerSettings)\n        {\n            string content = null;\n            JToken value = null;\n            try\n            {\n                if (response.Content != null)\n                {\n                    content = await response.Content.ReadAsStringAsync();\n                    value = content.ParseToJToken(serializerSettings);\n                }\n            }\n            catch { }\n            return Tuple.Create(content, value);\n        }\n\n        /// <summary>\n        /// Returns a URI for the table, optional id and parameters.\n        /// </summary>\n        /// <param name=\"tableName\">\n        /// The name of the table.\n        /// </param>\n        /// <param name=\"id\">\n        /// The id of the instance.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <returns>\n        /// A URI string.\n        /// </returns>\n        private static string GetUri(string tableName, object id = null, IDictionary<string, string> parameters = null)\n        {\n            Debug.Assert(!string.IsNullOrEmpty(tableName));\n\n            string uriPath = MobileServiceUrlBuilder.CombinePaths(TableRouteSeparatorName, tableName);\n            if (id != null)\n            {\n                string idString = Uri.EscapeDataString(string.Format(CultureInfo.InvariantCulture, \"{0}\", id));\n                uriPath = MobileServiceUrlBuilder.CombinePaths(uriPath, idString);\n            }\n\n            string queryString = MobileServiceUrlBuilder.GetQueryString(parameters);\n\n            return MobileServiceUrlBuilder.CombinePathAndQuery(uriPath, queryString);\n        }\n\n        /// <summary>\n        /// Parses the response content into a JToken and adds the version system property\n        /// if the ETag was returned from the server.\n        /// </summary>\n        /// <param name=\"response\">The response to parse.</param>\n        /// <returns>The parsed JToken.</returns>\n        private JToken GetJTokenFromResponse(MobileServiceHttpResponse response)\n        {\n            JToken jtoken = response.Content.ParseToJToken(this.MobileServiceClient.SerializerSettings);\n            if (response.Etag != null)\n            {\n                jtoken[MobileServiceSystemColumns.Version] = GetValueFromEtag(response.Etag);\n            }\n\n            return jtoken;\n        }\n\n        /// <summary>\n        /// Adds, if applicable, the <see cref=\"MobileServiceFeatures.AdditionalQueryParameters\"/> value to the\n        /// existing list of features used in the current operation, as well as any features set for the\n        /// entire table.\n        /// </summary>\n        /// <param name=\"existingFeatures\">The features from the SDK being used for the current operation.</param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in\n        /// the request URI query string.\n        /// </param>\n        /// <returns>The features used in the current operation.</returns>\n        private MobileServiceFeatures AddRequestFeatures(MobileServiceFeatures existingFeatures, IDictionary<string, string> parameters)\n        {\n            if (parameters != null && parameters.Count > 0)\n            {\n                existingFeatures |= MobileServiceFeatures.AdditionalQueryParameters;\n            }\n\n            existingFeatures |= this.Features;\n\n            return existingFeatures;\n        }\n\n        /// <summary>\n        /// Executes a request and transforms a 412 and 409 response to respective exception type.\n        /// </summary>\n        private async Task<JToken> TransformHttpException(Func<Task<JToken>> action)\n        {\n            MobileServiceInvalidOperationException error = null;\n\n            try\n            {\n                return await action();\n            }\n            catch (MobileServiceInvalidOperationException ex)\n            {\n                if (ex.Response != null &&\n                    ex.Response.StatusCode != HttpStatusCode.PreconditionFailed &&\n                    ex.Response.StatusCode != HttpStatusCode.Conflict)\n                {\n                    throw;\n                }\n\n                error = ex;\n            }\n\n            Tuple<string, JToken> responseContent = await this.ParseContent(error.Response);\n            JObject value = responseContent.Item2.ValidItemOrNull();\n            if (error.Response.StatusCode == HttpStatusCode.Conflict)\n            {\n                error = new MobileServiceConflictException(error, value);\n            }\n            else if (error.Response.StatusCode == HttpStatusCode.PreconditionFailed)\n            {\n                error = new MobileServicePreconditionFailedException(error, value);\n            }\n            throw error;\n        }\n\n        /// <summary>\n        /// if id is of type string then it strips the system properties and adds version header.\n        /// </summary>\n        /// <returns>The header collection with if-match header.</returns>\n        private Dictionary<string, string> StripSystemPropertiesAndAddVersionHeader(ref JObject instance, ref IDictionary<string, string> parameters, object id)\n        {\n            string version = null;\n            if (!MobileServiceSerializer.IsIntegerId(id))\n            {\n                instance = MobileServiceSerializer.RemoveSystemProperties(instance, out version);\n            }\n            parameters = AddSystemProperties(this.SystemProperties, parameters);\n            Dictionary<string, string> headers = AddIfMatchHeader(version);\n            return headers;\n        }\n\n        /// <summary>\n        /// Adds If-Match header to request if version is non-null.\n        /// </summary>\n        private static Dictionary<string, string> AddIfMatchHeader(string version)\n        {\n            Dictionary<string, string> headers = null;\n            if (!String.IsNullOrEmpty(version))\n            {\n                headers = new Dictionary<string, string>();\n                headers[\"If-Match\"] = GetEtagFromValue(version);\n            }\n\n            return headers;\n        }\n\n        /// <summary>\n        /// Gets a valid etag from a string value. Etags are surrounded\n        /// by double quotes and any internal quotes must be escaped with a \n        /// '\\'.\n        /// </summary>\n        /// <param name=\"value\">The value to create the etag from.</param>\n        /// <returns>\n        /// The etag.\n        /// </returns>\n        private static string GetEtagFromValue(string value)\n        {\n            // If the value has double quotes, they will need to be escaped.\n            for (int i = 0; i < value.Length; i++)\n            {\n                if (value[i] == '\"' && (i == 0 || value[i - 1] != '\\\\'))\n                {\n                    value = value.Insert(i, \"\\\\\");\n                }\n            }\n\n            // All etags are quoted;\n            return string.Format(\"\\\"{0}\\\"\", value);\n        }\n\n        /// <summary>\n        /// Gets a value from an etag. Etags are surrounded\n        /// by double quotes and any internal quotes must be escaped with a \n        /// '\\'.\n        /// </summary>\n        /// <param name=\"etag\">The etag to get the value from.</param>\n        /// <returns>\n        /// The value.\n        /// </returns>\n        private static string GetValueFromEtag(string etag)\n        {\n            int length = etag.Length;\n            if (length > 1 && etag[0] == '\\\"' && etag[length - 1] == '\\\"')\n            {\n                etag = etag.Substring(1, length - 2);\n            }\n\n            return etag.Replace(\"\\\\\\\"\", \"\\\"\");\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/IQueryResultEnumerable.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// The IQueryResultEnumerable{T} interface provides extra details returned with response\n    /// e.g. total count and next link\n    /// </summary>\n    public interface IQueryResultEnumerable<out T> : IEnumerable<T>\n    {\n        /// <summary>\n        /// Gets the link to next page of result that is returned in response headers.\n        /// </summary>\n        string NextLink { get; }\n\n        /// <summary>\n        /// Gets the total count for all the records that would have been\n        /// returned ignoring any take paging/limit clause specified by client\n        /// or server.\n        /// </summary>\n        long TotalCount { get; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/ITotalCountProvider.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// The ITotalCountProvider interface provides the total count for all the\n    /// records that would have been returned ignoring any take paging/limit\n    /// clause specified by client or server.  If you call\n    /// query.RequestTotalCount(), you can cast the result (whether its a\n    /// sequence or a list) to ITotalCountProvider.\n    /// </summary>\n    [Obsolete(\"Use IQueryResultEnumerable interface\")]\n    public interface ITotalCountProvider\n    {\n        /// <summary>\n        /// Gets the total count for all the records that would have been\n        /// returned ignoring any take paging/limit clause specified by client\n        /// or server.\n        /// </summary>\n        long TotalCount { get; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/Linq/FilterBuildingExpressionVisitor.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing System.Text;\nusing Newtonsoft.Json.Serialization;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Create an OData filter expression by walking an expression tree.\n    /// </summary>\n    internal class FilterBuildingExpressionVisitor\n    {\n        // Instance OData filter method names\n        private const string toLowerFilterMethod = \"tolower\";\n        private const string toUpperFilterMethod = \"toupper\";\n        private const string trimFilterMethod = \"trim\";\n        private const string startsWithFilterMethod = \"startswith\";\n        private const string endsWithFilterMethod = \"endswith\";\n        private const string indexOfFilterMethod = \"indexof\";\n        private const string subStringOfFilterMethod = \"substringof\";\n        private const string replaceFilterMethod = \"replace\";\n        private const string substringFilterMethod = \"substring\";\n\n        // Static OData filter method names\n        private const string floorFilterMethod = \"floor\";\n        private const string ceilingFilterMethod = \"ceiling\";\n        private const string roundFilterMethod = \"round\";\n        private const string concatFilterMethod = \"concat\";\n\n        // Static dictionaries to look up OData method names from .NET memberInfo and types\n        private static Dictionary<MemberInfoKey, string> instanceMethods;\n        private static Dictionary<MemberInfoKey, string> staticMethods;\n        private static Dictionary<MemberInfoKey, string> instanceProperties;\n        private static Dictionary<Type, Type[]> implicitConversions;\n\n        // To ensure that these reflection calls succeed, we need to have actual code that\n        // calls these methods. We do this in the static private constructor.\n        private static readonly MethodInfo toStringMethod = typeof(object).GetTypeInfo().GetDeclaredMethod(\"ToString\");\n        private static readonly MethodInfo concatMethod = typeof(string).GetRuntimeMethod(\"Concat\", new Type[] { typeof(string), typeof(string) });\n\n        // The Visual Basic compiler emits a call to CompareString(left, right, False) from the class\n        // Microsoft.VisualBasic.CompilerServices.[Embedded]Operators for lambda expressions with string\n        // comparisons. Since the class isn't part of the portable libraries, we can do a type\n        // validation based on the type name when visiting the expression.\n        private const string VBOperatorClass = \"Microsoft.VisualBasic.CompilerServices.Operators\";\n        private const string VBOperatorClassAlt = \"Microsoft.VisualBasic.CompilerServices.EmbeddedOperators\";\n        private const string VBCompareStringMethod = \"CompareString\";\n        private const int VBCompareStringArguments = 3;\n        private const int VBCaseSensitiveCompareArgumentIndex = 2;\n        private static readonly MethodInfo stringToLowerMethod = typeof(string).GetRuntimeMethod(\"ToLower\", new Type[0]);\n        private static readonly Type typeofInt = typeof(int);\n\n        /// <summary>\n        /// Defines the instance methods that are translated into OData filter\n        /// expressions.\n        /// </summary>\n        private static Dictionary<MemberInfoKey, string> InstanceMethods\n        {\n            get\n            {\n                if (instanceMethods == null)\n                {\n                    instanceMethods =\n                        new Dictionary<MemberInfoKey, string>\n                        {\n                            { new MemberInfoKey(typeof(string), \"ToLower\", true, true), toLowerFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"ToLowerInvariant\", true, true), toLowerFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"ToUpper\", true, true), toUpperFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"ToUpperInvariant\", true, true), toUpperFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"Trim\", true, true), trimFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"StartsWith\", true, true, typeof(string)), startsWithFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"EndsWith\", true, true, typeof(string)), endsWithFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"IndexOf\", true, true, typeof(string)), indexOfFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"IndexOf\", true, true, typeof(char)), indexOfFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"Contains\", true, true, typeof(string)), subStringOfFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"Replace\", true, true, typeof(string), typeof(string)), replaceFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"Replace\", true, true, typeof(char), typeof(char)), replaceFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"Substring\", true, true, typeofInt), substringFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"Substring\", true, true, typeofInt, typeofInt), substringFilterMethod },\n                        };\n                }\n\n                return instanceMethods;\n            }\n        }\n\n        /// <summary>\n        /// Defines the static methods that are translated into OData filter\n        /// expressions.\n        /// </summary>\n        private static Dictionary<MemberInfoKey, string> StaticMethods\n        {\n            get\n            {\n                if (staticMethods == null)\n                {\n                    staticMethods =\n                        new Dictionary<MemberInfoKey, string>\n                        {\n                            { new MemberInfoKey(typeof(Math), \"Floor\", true, false, typeof(double)), floorFilterMethod },\n                            { new MemberInfoKey(typeof(Math), \"Ceiling\", true, false, typeof(double)), ceilingFilterMethod },\n                            { new MemberInfoKey(typeof(Math), \"Round\", true, false, typeof(double)), roundFilterMethod },\n                            { new MemberInfoKey(typeof(string), \"Concat\", true, false, typeof(string), typeof(string)), concatFilterMethod },\n                            { new MemberInfoKey(typeof(Decimal), \"Floor\", true, false, typeof(decimal)), floorFilterMethod },\n                            { new MemberInfoKey(typeof(Decimal), \"Ceiling\", true, false, typeof(decimal)), ceilingFilterMethod },\n                            { new MemberInfoKey(typeof(Decimal), \"Round\", true, false, typeof(decimal)), roundFilterMethod },\n                            { new MemberInfoKey(typeof(Math), \"Ceiling\", true, false, typeof(decimal)), ceilingFilterMethod },\n                            { new MemberInfoKey(typeof(Math), \"Floor\", true, false, typeof(decimal)), floorFilterMethod },\n                            { new MemberInfoKey(typeof(Math), \"Round\", true, false, typeof(decimal)), roundFilterMethod}\n                        };\n                }\n\n                return staticMethods;\n            }\n        }\n\n        /// <summary>\n        /// Defines the instance properties that are translated into OData\n        /// filter expressions.\n        /// </summary>\n        private static Dictionary<MemberInfoKey, string> InstanceProperties\n        {\n            get\n            {\n                if (instanceProperties == null)\n                {\n                    instanceProperties =\n                        new Dictionary<MemberInfoKey, string>\n                        {\n                            { new MemberInfoKey(typeof(string), \"Length\", false, true), \"length\" },\n                            { new MemberInfoKey(typeof(DateTime), \"Day\", false, true), \"day\" },\n                            { new MemberInfoKey(typeof(DateTime), \"Month\", false, true), \"month\" },\n                            { new MemberInfoKey(typeof(DateTime), \"Year\", false, true), \"year\" },\n                            { new MemberInfoKey(typeof(DateTime), \"Hour\", false, true), \"hour\" },\n                            { new MemberInfoKey(typeof(DateTime), \"Minute\", false, true), \"minute\" },\n                            { new MemberInfoKey(typeof(DateTime), \"Second\", false, true), \"second\" },\n                        };\n                }\n\n                return instanceProperties;\n            }\n        }\n\n        /// <summary>\n        /// Defines a table of implicit conversions for numeric types derived\n        /// from http://msdn.microsoft.com/en-us/library/y5b434w4.aspx\n        /// </summary>\n        private static Dictionary<Type, Type[]> ImplicitConversions\n        {\n            get\n            {\n                if (implicitConversions == null)\n                {\n                    implicitConversions =\n                        new Dictionary<Type, Type[]>\n                        {\n                            { typeof(sbyte),  new[] { typeof(short), typeofInt, typeof(long), typeof(float), typeof(double), typeof(decimal) } },\n                            { typeof(byte),   new[] { typeof(short), typeof(ushort), typeofInt, typeof(uint), typeof(long), typeof(ulong), typeof(float), typeof(double), typeof(decimal) } },\n                            { typeof(short),  new[] { typeofInt, typeof(long), typeof(float), typeof(double), typeof(decimal) } },\n                            { typeof(ushort), new[] { typeofInt, typeof(uint), typeof(long), typeof(ulong), typeof(float), typeof(double), typeof(decimal) } },\n                            { typeofInt,    new[] { typeof(long), typeof(float), typeof(double), typeof(decimal) } },\n                            { typeof(uint),   new[] { typeof(long), typeof(ulong), typeof(float), typeof(double), typeof(decimal) } },\n                            { typeof(long),   new[] { typeof(float), typeof(double), typeof(decimal) } },\n                            { typeof(char),   new[] { typeof(ushort), typeofInt, typeof(uint), typeof(long), typeof(ulong), typeof(float), typeof(double), typeof(decimal) } },\n                            { typeof(float),  new[] { typeof(double) } },\n                            { typeof(ulong),  new[] { typeof(float), typeof(double), typeof(decimal) } }\n                        };\n                }\n\n                return implicitConversions;\n            }\n        }\n\n        private Stack<QueryNode> filterExpression = new Stack<QueryNode>();\n\n        /// <summary>\n        /// The contract resolver used to determine property names from\n        /// members used within expressions.\n        /// </summary>\n        private MobileServiceContractResolver contractResolver;\n\n        /// <summary>\n        /// The static constructor for the FilterBuildingExpressionVisitor\n        /// </summary>\n        static FilterBuildingExpressionVisitor()\n        {\n            // ! Do not remove this code. ! \n            // Some compilers will remove method infos that are never called by an application.\n            // This will break reflection scenarios when the methodInfos searched for via reflection\n            // were not used in the application code and so were removed by the compiler. We search\n            // for the methodInfos for Object.ToString() and String.Concat(string, string) via\n            // reflection, so we need this code here to ensure that don't get removed by the compiler.\n            string aString = new Object().ToString();\n            aString = String.Concat(aString, \"a string\");\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the FilterBuildingExpressionVisitor\n        /// class.\n        /// </summary>\n        /// <param name=\"contractResolver\">\n        /// The contract resolver to use to determine property \n        /// names from members used within expressions.\n        /// </param>\n        private FilterBuildingExpressionVisitor(MobileServiceContractResolver contractResolver)\n            : base()\n        {\n            Debug.Assert(contractResolver != null);\n\n            this.contractResolver = contractResolver;\n        }\n\n        /// <summary>\n        /// Translate an expression tree into a compiled OData query.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression tree.\n        /// </param>\n        /// <param name=\"contractResolver\">\n        /// The contract resolver used to determine property names from\n        /// members used within expressions.\n        /// </param>\n        /// <returns>\n        /// An OData query.\n        /// </returns>\n        public static QueryNode Compile(Expression expression, MobileServiceContractResolver contractResolver)\n        {\n            Debug.Assert(expression != null);\n            Debug.Assert(contractResolver != null);\n                    \n            // Walk the expression tree and build the filter.\n            FilterBuildingExpressionVisitor visitor = new FilterBuildingExpressionVisitor(contractResolver);\n            visitor.Visit(expression);\n\n            QueryNode node = visitor.filterExpression.FirstOrDefault();\n            return node;\n        }        \n\n        /// <summary>\n        /// Get the table member name referenced by an expression or return null.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to check.\n        /// </param>\n        /// <param name=\"contractResolver\">\n        /// The contract resolver to use to determine property names from members used \n        /// within expressions.\n        /// </param>\n        /// <returns>\n        /// The table member name or null.\n        /// </returns>\n        public static string GetTableMemberName(Expression expression,\n                                                  MobileServiceContractResolver contractResolver)\n        {\n            Debug.Assert(expression != null);\n            Debug.Assert(contractResolver != null);\n\n            // Only parameter references are valid in a query (any other\n            // references should have been partially evaluated away)\n            MemberExpression member = expression as MemberExpression;\n            if (member != null &&\n                member.Expression != null &&\n                member.Expression.NodeType == ExpressionType.Parameter &&\n                member.Member != null)\n            {\n                // Lookup the Mobile Services name of the member and use that\n                JsonProperty property = contractResolver.ResolveProperty(member.Member);\n                return property.PropertyName;\n            }\n\n            // Otherwise return null\n            return null;\n        }\n\n        /// <summary>\n        /// Visit a node of the expression.\n        /// </summary>\n        /// <param name=\"node\">\n        /// The node to visit.\n        /// </param>\n        /// <returns>\n        /// The node of the expression.\n        /// </returns>\n        private Expression Visit(Expression node)\n        {\n            if (node != null)\n            {\n                switch (node.NodeType)\n                {\n                    case ExpressionType.UnaryPlus:\n                    case ExpressionType.Negate:\n                    case ExpressionType.NegateChecked:\n                    case ExpressionType.Not:\n                    case ExpressionType.Convert:\n                    case ExpressionType.ConvertChecked:\n                    case ExpressionType.ArrayLength:\n                    case ExpressionType.Quote:\n                    case ExpressionType.TypeAs:\n                        return this.VisitUnary((UnaryExpression)node);\n                    case ExpressionType.Add:\n                    case ExpressionType.AddChecked:\n                    case ExpressionType.Subtract:\n                    case ExpressionType.SubtractChecked:\n                    case ExpressionType.Multiply:\n                    case ExpressionType.MultiplyChecked:\n                    case ExpressionType.Divide:\n                    case ExpressionType.Modulo:\n                    case ExpressionType.Power:\n                    case ExpressionType.And:\n                    case ExpressionType.AndAlso:\n                    case ExpressionType.Or:\n                    case ExpressionType.OrElse:\n                    case ExpressionType.LessThan:\n                    case ExpressionType.LessThanOrEqual:\n                    case ExpressionType.GreaterThan:\n                    case ExpressionType.GreaterThanOrEqual:\n                    case ExpressionType.Equal:\n                    case ExpressionType.NotEqual:\n                    case ExpressionType.Coalesce:\n                    case ExpressionType.ArrayIndex:\n                    case ExpressionType.RightShift:\n                    case ExpressionType.LeftShift:\n                    case ExpressionType.ExclusiveOr:\n                        return this.VisitBinary((BinaryExpression)node);\n                    case ExpressionType.Constant:\n                        return this.VisitConstant((ConstantExpression)node);\n                    case ExpressionType.MemberAccess:\n                        return this.VisitMemberAccess((MemberExpression)node);\n                    case ExpressionType.Call:\n                        return this.VisitMethodCall((MethodCallExpression)node);\n                    default:\n                        throw new NotSupportedException(\n                            string.Format(\n                                CultureInfo.InvariantCulture,\n                                \"'{0}' is not supported in a 'Where' Mobile Services query expression.\",\n                                node != null ? node.ToString() : null));\n                }\n            }\n            \n            return node;\n        }\n\n        /// <summary>\n        /// Process the not operator.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to visit.\n        /// </param>\n        /// <returns>\n        /// The visited expression.\n        /// </returns>\n        private Expression VisitUnary(UnaryExpression expression)\n        {\n            if (expression != null)\n            {\n                switch (expression.NodeType)\n                {\n                    case ExpressionType.Not:\n                        this.Visit(expression.Operand);\n                        this.filterExpression.Push(new UnaryOperatorNode(UnaryOperatorKind.Not, this.filterExpression.Pop()));\n                        break;\n                    case ExpressionType.Quote:\n                        this.Visit(StripUnaryOperator(expression));\n                        break;\n                    case ExpressionType.Convert:\n                        // Ignore conversion requests if the conversion will\n                        // happen implicitly on the server anyway\n                        if (IsConversionImplicit(expression, expression.Operand.Type, expression.Type))\n                        {\n                            this.Visit(StripUnaryOperator(expression));\n                            break;\n                        }\n                        // Otherwise the conversion isn't supported\n                        goto default;\n                    default:\n                        throw new NotSupportedException(\n                            string.Format(\n                                CultureInfo.InvariantCulture,\n                                \"The operator '{0}' is not supported in the 'Where' Mobile Services query expression '{1}'.\",\n                                expression.NodeType,\n                                expression.ToString()));\n                }\n            }\n            return expression;\n        }\n\n        /// <summary>\n        /// Check whether a conversion from one type to another will be made\n        /// implicitly by the server.  This is only considered valid for \n        /// member references.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The conversion expression.\n        /// </param>\n        /// <param name=\"from\">\n        /// The type to convert from.\n        /// </param>\n        /// <param name=\"to\">\n        /// The type to convert to.\n        /// </param>\n        /// <returns>\n        /// <c>true</c> if there is an implicit conversion, <c>false</c> otherwise.\n        /// </returns>\n        private bool IsConversionImplicit(UnaryExpression expression, Type from, Type to)\n        {\n            Debug.Assert(expression != null, \"expression cannot be null!\");\n            Debug.Assert(from != null, \"from cannot be null!\");\n            Debug.Assert(to != null, \"to cannot be null!\");\n\n            // We're only interested in conversions on table members\n            if (GetTableMemberName(expression.Operand, this.contractResolver) != null)\n            {\n                Type toType = to.UnwrapNullable();\n                Type fromType = from.UnwrapNullable();\n\n                // if the types are the same just return true\n                if (toType == fromType)\n                {\n                    return true;\n                }\n                // check for enum\n                if (fromType.GetTypeInfo().IsEnum)\n                {\n                    return true;\n                }\n\n                // Check to see if the types can be implicitly converted            \n                Type[] conversions = null;\n                if (ImplicitConversions.TryGetValue(fromType, out conversions))\n                {\n                    return Array.IndexOf(conversions, toType) >= 0;\n                }\n            }\n\n            return false;\n        }\n\n        /// <summary>\n        /// Process binary comparison operators.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to visit.\n        /// </param>\n        /// <returns>\n        /// The visited expression.\n        /// </returns>\n        private Expression VisitBinary(BinaryExpression expression)\n        {\n            if (expression != null)\n            {\n                // special case for enums, because we send them as strings\n                UnaryExpression enumExpression = null;\n                ConstantExpression constantExpression = null;\n                BinaryExpression stringCompareExpression = null;\n                if (this.CheckEnumExpression(expression, out enumExpression, out constantExpression))\n                {\n                    this.Visit(this.RewriteEnumExpression(enumExpression, (ConstantExpression)expression.Right, expression.NodeType));            \n                }\n                // special case concat as it's OData function isn't infix\n                else if (expression.NodeType == ExpressionType.Add &&\n                    expression.Left.Type == typeof(string) &&\n                    expression.Right.Type == typeof(string))\n                {\n                    //rewrite addition into a call to concat, instead of duplicating generation code.\n                    this.Visit(this.RewriteStringAddition(expression));\n                }\n                // special case for string comparisons emitted by the VB compiler\n                else if (this.CheckVBStringCompareExpression(expression, out stringCompareExpression))\n                {\n                    this.Visit(stringCompareExpression);\n                }\n                else\n                {\n                    BinaryOperatorKind operatorKind;\n                    switch (expression.NodeType)\n                    {\n                        case ExpressionType.AndAlso:\n                        case ExpressionType.And:\n                            operatorKind = BinaryOperatorKind.And;\n                            break;\n                        case ExpressionType.Or:\n                        case ExpressionType.OrElse:\n                            operatorKind = BinaryOperatorKind.Or;\n                            break;\n                        case ExpressionType.Equal:\n                            operatorKind = BinaryOperatorKind.Equal;\n                            break;\n                        case ExpressionType.NotEqual:\n                            operatorKind = BinaryOperatorKind.NotEqual;\n                            break;\n                        case ExpressionType.LessThan:\n                            operatorKind = BinaryOperatorKind.LessThan;\n                            break;\n                        case ExpressionType.LessThanOrEqual:\n                            operatorKind = BinaryOperatorKind.LessThanOrEqual;\n                            break;\n                        case ExpressionType.GreaterThan:\n                            operatorKind = BinaryOperatorKind.GreaterThan;\n                            break;\n                        case ExpressionType.GreaterThanOrEqual:\n                            operatorKind = BinaryOperatorKind.GreaterThanOrEqual;\n                            break;\n                        case ExpressionType.Add:\n                            operatorKind = BinaryOperatorKind.Add;\n                            break;\n                        case ExpressionType.Subtract:\n                            operatorKind = BinaryOperatorKind.Subtract;\n                            break;\n                        case ExpressionType.Multiply:\n                            operatorKind = BinaryOperatorKind.Multiply;\n                            break;\n                        case ExpressionType.Divide:\n                            operatorKind = BinaryOperatorKind.Divide;\n                            break;\n                        case ExpressionType.Modulo:\n                            operatorKind = BinaryOperatorKind.Modulo;\n                            break;\n                        default:\n                            throw new NotSupportedException(\n                                string.Format(\n                                    CultureInfo.InvariantCulture,\n                                    \"The operator '{0}' is not supported in the 'Where' Mobile Services query expression '{1}'.\",\n                                    expression.NodeType,\n                                    expression.ToString()));\n                    }                    \n\n                    var node = new BinaryOperatorNode(operatorKind, null, null);\n                    this.filterExpression.Push(node);\n\n                    this.Visit(expression.Left);\n                    this.Visit(expression.Right);\n\n                    this.SetChildren(node);\n                }\n            }\n\n            return expression;\n        }\n\n        /// <summary>\n        /// Checks if the binary expression is a string comparison emitted by the Visual Basic compiler.\n        /// </summary>\n        /// <remarks>The VB compiler translates string comparisons such as\n        /// <code>(Function(x) x.Name = \"a string value\")</code> not as a binary expression with the field\n        /// on the left side and the string value on the right side. Instead, it converts it into a call\n        /// to <code>Microsoft.VisualBasic.CompilerServices.Operators.CompareString</code> (or\n        /// <code>Microsoft.VisualBasic.CompilerServices.EmbeddedOperators</code> for phone platforms)\n        /// for the string value, and compares the expression to zero.</remarks>\n        /// <param name=\"expression\">The binary expression to check.</param>\n        /// <param name=\"stringComparison\">A normalized string comparison expression.</param>\n        /// <returns>True if the expression is a string comparison expression emitted by the VB compiler,\n        /// otherwise false</returns>\n        private bool CheckVBStringCompareExpression(BinaryExpression expression, out BinaryExpression stringComparison)\n        {\n            stringComparison = null;\n            if (expression.Left.Type == typeofInt && \n                expression.Left.NodeType == ExpressionType.Call &&\n                expression.Right.Type == typeofInt &&\n                expression.Right.NodeType == ExpressionType.Constant &&\n                ((ConstantExpression)expression.Right).Value.Equals(0)) {\n                    MethodCallExpression methodCall = (MethodCallExpression)expression.Left;\n                    if ((methodCall.Method.DeclaringType.FullName == VBOperatorClass || methodCall.Method.DeclaringType.FullName == VBOperatorClassAlt) &&\n                        methodCall.Method.Name == VBCompareStringMethod &&\n                        methodCall.Arguments.Count == VBCompareStringArguments &&\n                        methodCall.Arguments[VBCaseSensitiveCompareArgumentIndex].Type == typeof(bool) &&\n                        methodCall.Arguments[VBCaseSensitiveCompareArgumentIndex].NodeType == ExpressionType.Constant)\n                    {\n                        bool doCaseInsensitiveComparison = ((ConstantExpression)methodCall.Arguments[VBCaseSensitiveCompareArgumentIndex]).Value.Equals(true);\n                        Expression leftExpression = methodCall.Arguments[0];\n                        Expression rightExpression = methodCall.Arguments[1];\n                        if (doCaseInsensitiveComparison)\n                        {\n                            leftExpression = MethodCallExpression.Call(leftExpression, stringToLowerMethod);\n                            rightExpression = MethodCallExpression.Call(rightExpression, stringToLowerMethod);\n                        }\n\n                        switch (expression.NodeType)\n                        {\n                            case ExpressionType.Equal:\n                                stringComparison = BinaryExpression.Equal(leftExpression, rightExpression);\n                                break;\n                            case ExpressionType.NotEqual:\n                                stringComparison = BinaryExpression.NotEqual(leftExpression, rightExpression);\n                                break;\n                            case ExpressionType.LessThan:\n                                stringComparison = BinaryExpression.LessThan(leftExpression, rightExpression);\n                                break;\n                            case ExpressionType.LessThanOrEqual:\n                                stringComparison = BinaryExpression.LessThanOrEqual(leftExpression, rightExpression);\n                                break;\n                            case ExpressionType.GreaterThan:\n                                stringComparison = BinaryExpression.GreaterThan(leftExpression, rightExpression);\n                                break;\n                            case ExpressionType.GreaterThanOrEqual:\n                                stringComparison = BinaryExpression.GreaterThanOrEqual(leftExpression, rightExpression);\n                                break;\n                        }\n\n                        if (stringComparison != null)\n                        {\n                            return true;\n                        }\n                    }\n            }\n\n            return false;\n        }\n\n        /// <summary>\n        /// Checks if the binary expression is an enum expression.\n        /// </summary>\n        /// <param name=\"expression\">The binary expression to check.</param>\n        /// <param name=\"unaryExp\">The expression which is the enum.</param>\n        /// <param name=\"constExp\">The expression containing the enum value.</param>\n        /// <returns>True if an enum expression is found, otherwise false.</returns>\n        private bool CheckEnumExpression(BinaryExpression expression, out UnaryExpression unaryExp, out ConstantExpression constExp)\n        {\n            // we handle two cases because the enum part can be on both sides\n            constExp = null;\n            // case 1: enum on left side\n            unaryExp = expression.Left as UnaryExpression;\n            if (unaryExp != null && unaryExp.NodeType == ExpressionType.Convert && unaryExp.Operand.Type.GetTypeInfo().IsEnum && expression.Right is ConstantExpression)\n            {\n                constExp = (ConstantExpression)expression.Right;\n                return true;\n            }\n            // case 2: enum on right side\n            unaryExp = expression.Right as UnaryExpression;\n            if (unaryExp != null && unaryExp.NodeType == ExpressionType.Convert && unaryExp.Operand.Type.GetTypeInfo().IsEnum && expression.Left is ConstantExpression)\n            {\n                constExp = (ConstantExpression)expression.Left;\n                return true;\n            }\n            return false;\n        }\n\n        /// <summary>\n        /// Rewrite a BinaryExpression containing enums into a binary expression with strings.\n        /// </summary>\n        /// <param name=\"enumExpression\">the unaryexpression containing the enum parameter.</param>\n        /// <param name=\"constant\">The constantexpression containing the constant value representing an enum value.</param>\n        /// <param name=\"type\">the binaryexpression type.</param>\n        /// <returns>The rewritten expression.</returns>\n        private Expression RewriteEnumExpression(UnaryExpression enumExpression, ConstantExpression constant, ExpressionType type)\n        {\n            //get type of enum\n            Type enumType = enumExpression.Operand.Type;\n            \n            // note: the constant part of the expression will always be a valid type for Enum.ToObject, \n            // because otherwise the compiler would have complained in the first place.\n            // transform int into string\n            string enumString = Enum.ToObject(enumType, constant.Value).ToString();\n\n            // call ToString to match the types\n            Expression call = Expression.Call(enumExpression, toStringMethod);\n\n            //create new binary expression \n            return Expression.MakeBinary(type, call, Expression.Constant(enumString));\n        }\n\n        /// <summary>\n        /// Rewrite a Addition expression with strings into a call to string.Concat.\n        /// </summary>\n        /// <param name=\"expression\">The binaryexpression representing string addition.</param>\n        /// <returns>The rewritten expression.</returns>\n        private Expression RewriteStringAddition(BinaryExpression expression)\n        {\n            Expression[] expressions = new [] { expression.Left, expression.Right };\n            return Expression.Call(concatMethod, expressions);\n        }\n\n        /// <summary>\n        /// Process constant values.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to visit.\n        /// </param>\n        /// <returns>\n        /// The visited expression.\n        /// </returns>\n        private Expression VisitConstant(ConstantExpression expression)\n        {\n            if (expression != null)\n            {\n                this.filterExpression.Push(new ConstantNode(expression.Value));\n            }\n            return expression;\n        }\n\n        /// <summary>\n        /// Process member references.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to visit.\n        /// </param>\n        /// <returns>\n        /// The visited expression.\n        /// </returns>\n        private Expression VisitMemberAccess(MemberExpression expression)\n        {\n            // Lookup the Mobile Services name of the member and use that\n            string memberName = GetTableMemberName(expression, this.contractResolver);\n            if (memberName != null)\n            {\n                this.filterExpression.Push(new MemberAccessNode(null, memberName));\n                return expression;\n            }\n            \n            // Check if this member is actually a function that looks like a\n            // property (like string.Length, etc.)\n            string methodName = null;\n            MemberInfoKey memberInfoKey = new MemberInfoKey(expression.Member);\n            if (InstanceProperties.TryGetValue(memberInfoKey, out methodName))\n            {\n                var fnCallNode = new FunctionCallNode(methodName, null);\n                this.filterExpression.Push(fnCallNode);\n\n                this.Visit(expression.Expression);\n\n                this.SetChildren(fnCallNode);\n\n                return expression;\n            }\n\n            // Otherwise we can't process the member.\n            throw new NotSupportedException(\n                string.Format(\n                    CultureInfo.InvariantCulture,\n                    \"The member '{0}' is not supported in the 'Where' Mobile Services query expression '{1}'.\",\n                    expression != null && expression.Member != null ? expression.Member.Name : null,\n                    expression != null ? expression.ToString() : null));\n        }\n\n        /// <summary>\n        /// Process method calls and translate them into OData.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to visit.\n        /// </param>\n        /// <returns>\n        /// The visited expression.\n        /// </returns>\n        private Expression VisitMethodCall(MethodCallExpression expression)\n        {\n            // Look for either an instance or static method\n            string methodName = null;\n            MemberInfoKey methodInfoKey = new MemberInfoKey(expression.Method);\n            if (InstanceMethods.TryGetValue(methodInfoKey, out methodName))\n            {\n                this.VisitODataMethodCall(expression, methodName, false);\n            }\n            else if (StaticMethods.TryGetValue(methodInfoKey, out methodName))\n            {\n                this.VisitODataMethodCall(expression, methodName, true);\n            }\n            else if (expression.Method.GetRuntimeBaseDefinition().Equals(toStringMethod))\n            {\n                // handle the ToString method here\n                // toString will only occur on expression that rely on a parameter,\n                // because otherwise the partial evaluator would have already evaluated it\n                // we get the base definition to detect overrides of ToString, which are pretty common\n                this.Visit(expression.Object);\n            }\n            else\n            {\n                this.VisitCustomMethodCall(expression);\n            }\n\n            return expression;\n        }\n\n        /// <summary>\n        /// Process method calls which map one-to-one on an odata supported method.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to visit.\n        /// </param>\n        /// <param name=\"methodName\">\n        /// The name of the method to look for.\n        /// </param>\n        /// <param name=\"isStatic\">\n        /// Indicates if the method to look for is static.\n        /// </param>\n        /// <returns>\n        /// The visited expression.\n        /// </returns>\n        private void VisitODataMethodCall(MethodCallExpression expression, string methodName, bool isStatic)\n        {\n            Debug.Assert(expression != null, \"expression cannot be null!\");\n            Debug.Assert(methodName != null, \"methodName cannot be null!\");\n            \n            var fnCallNode = new FunctionCallNode(methodName, null);\n\n            // adding node as a marker for start of arguments\n            this.filterExpression.Push(fnCallNode);\n\n            foreach (Expression argument in GetFilterMethodArguments(expression, methodName, isStatic))\n            {\n                this.Visit(argument);\n            }\n\n            SetChildren(fnCallNode);\n        }\n\n        private void SetChildren(QueryNode parent)\n        {\n            var args = new Stack<QueryNode>();\n            // remove all nodes from expression until we find the parent\n            while (this.filterExpression.Peek() != parent)\n            {\n                args.Push(this.filterExpression.Pop());\n            }\n\n            parent.SetChildren(args.ToList());\n        }\n\n        /// <summary>\n        /// Process method calls which do not map one-to-one on an odata supported method.\n        /// Currently we only support Contains.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to visit.\n        /// </param>\n        private void VisitCustomMethodCall(MethodCallExpression expression)\n        {\n            if (expression.Method.Name.Equals(\"Contains\"))\n            {\n                this.VisitContainsMethodCall(expression);\n            }\n            else\n            {\n                throw new NotSupportedException(\n                    string.Format(\n                        CultureInfo.InvariantCulture,\n                        \"'{0}' is not supported in a 'Where' Mobile Services query expression.\",\n                        expression != null ? expression.ToString() : null));\n            }\n        }\n\n        /// <summary>\n        /// Process a Contains method call which does not map one-to-one on an odata supported method.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to visit.\n        /// </param>\n        /// <returns>\n        /// The visited expression.\n        /// </returns>\n        private void VisitContainsMethodCall(MethodCallExpression expression)\n        {\n            IEnumerable<Expression> arguments = GetFilterMethodArguments(expression, expression.Method.Name, expression.Method.IsGenericMethod);\n\n            //First argument should be a enumerable of constants\n            // if you would like to do a enumerable.select().where..\n            // you should do that outside of the query for now\n            IEnumerable enumerable = null;\n            Expression expr = arguments.FirstOrDefault();\n            if (expr != null && expr is ConstantExpression)\n            {\n                enumerable = ((ConstantExpression)expr).Value as IEnumerable;\n            }\n            Expression comparand = arguments.Skip(1).FirstOrDefault();\n            if (enumerable != null && comparand != null)\n            {\n                List<object> elements = enumerable.OfType<object>().ToList();\n                if(elements.Count > 0)\n                {\n                    // create our rewritten expression tree\n                    // by tranforming the contains into a concatenation of 'or' expressions\n                    Expression orExpression = elements.Select(o => Expression.Equal(comparand, Expression.Constant(o)))\n                    .Aggregate((e1, e2) => Expression.OrElse(e1, e2));\n                    \n                    this.Visit(orExpression);\n                }\n            }\n            else\n            {\n                throw new NotSupportedException(\n                    string.Format(\n                        CultureInfo.InvariantCulture,\n                        \"'{0}' is not supported in a 'Where' Mobile Services query expression.\",\n                        expression != null ? expression.ToString() : null));\n            }\n        }\n\n        /// <summary>\n        /// Remove the operator from certain unary expressions like quote or\n        /// conversions we can ignore.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to check.\n        /// </param>\n        /// <returns>\n        /// An unquoted expression.\n        /// </returns>\n        private static Expression StripUnaryOperator(Expression expression)\n        {\n            Debug.Assert(expression != null, \"expression cannot be null!\");\n            UnaryExpression unary = expression as UnaryExpression;\n            return unary != null ? unary.Operand : expression;\n        }\n\n        /// <summary>\n        /// Returns the ordered collection of arguments for the the given OData filter \n        /// method given the <see cref=\"MethodCallExpression\"/> instance.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to convert into a list of filter method arguments.\n        /// </param>\n        /// <param name=\"methodName\">\n        /// The name of the OData filter method.\n        /// </param>\n        /// <param name=\"isStatic\">\n        /// Indicates if the <see cref=\"MethodCallExpression\"/> instance is expected to \n        /// be for a static method or not.\n        /// </param>\n        /// <returns>\n        /// The ordered collection of arguments for the given OData filter method.\n        /// </returns>\n        private static IEnumerable<Expression> GetFilterMethodArguments(MethodCallExpression expression, \n                                                                        string methodName, \n                                                                        bool isStatic)\n        {\n            IEnumerable<Expression> arguments;\n            if (methodName == subStringOfFilterMethod)\n            {\n                // Awkwardly, the OData protocol for URI conventions states that for subStringOf(), \n                // the search string argument comes before the string to be search. Therefore when \n                // translating from String.Contains(), we have to return the expression arguments \n                // (the search string) before returning the expression object (the string to be searched).\n                arguments = expression.Arguments.Concat(new Expression[] { expression.Object });\n            }\n            else\n            {\n                arguments = (isStatic) ?\n                    new Expression[0] :\n                    new Expression[] { expression.Object };\n                arguments = arguments.Concat(expression.Arguments);\n            }\n\n            return arguments;\n        }       \n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/Linq/IMobileServiceTableQuery.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Represents a query that can be evaluated against a Mobile Services\n    /// table. MobileServiceTableQuery instances can be obtained via\n    /// MobileServiceClient.Query(of T)().\n    /// </summary>\n    /// <remarks>\n    /// Rather than implenting IQueryable directly, we've implemented the\n    /// portion of the LINQ query pattern we support on MobileServiceTableQuery\n    /// objects.  MobileServiceTableQuery instances are used to build up\n    /// IQueryables from LINQ query operations.\n    /// </remarks>\n    public interface IMobileServiceTableQuery<T>\n    {\n        /// <summary>\n        /// Gets a value indicating whether the query will request the total\n        /// count for all the records that would have been returned ignoring\n        /// any take paging/limit clause specified by client or server.\n        /// </summary>\n        bool RequestTotalCount { get; }\n\n        /// <summary>\n        /// The user-defined query string parameters to include with the query.\n        /// </summary>\n        IDictionary<string, string> Parameters { get; }\n\n        /// <summary>\n        /// Gets the underlying IQueryable associated with this query.\n        /// </summary>\n        IQueryable<T> Query { get; set; }\n\n        /// <summary>\n        /// Ensure the query will get the total count for all the records that\n        /// would have been returned ignoring any take paging/limit clause\n        /// specified by client or server.\n        /// </summary>\n        /// <returns>\n        /// The query object.\n        /// </returns>\n        IMobileServiceTableQuery<T> IncludeTotalCount();\n\n        /// <summary>\n        /// Ensure the query will get the deleted records.\n        /// </summary>\n        /// <returns>\n        /// The query object.\n        /// </returns>\n        IMobileServiceTableQuery<T> IncludeDeleted();\n\n        /// <summary>\n        /// Applies the specified ascending order clause to the source query.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        IMobileServiceTableQuery<T> OrderBy<TKey>(Expression<Func<T, TKey>> keySelector);\n\n        /// <summary>\n        /// Applies the specified descending order clause to the source query.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        IMobileServiceTableQuery<T> OrderByDescending<TKey>(Expression<Func<T, TKey>> keySelector);\n\n        /// <summary>\n        /// Applies the specified selection to the source query.\n        /// </summary>\n        /// <typeparam name=\"U\">\n        /// Type representing the projected result of the query.\n        /// </typeparam>\n        /// <param name=\"selector\">\n        /// The selector function.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        IMobileServiceTableQuery<U> Select<U>(Expression<Func<T, U>> selector);\n\n        /// <summary>\n        /// Applies the specified skip clause to the source query.\n        /// </summary>\n        /// <param name=\"count\">\n        /// The number to skip.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        IMobileServiceTableQuery<T> Skip(int count);\n\n        /// <summary>\n        /// Gets the MobileServiceTable being queried.\n        /// </summary>\n        IMobileServiceTable<T> Table { get; }\n\n        /// <summary>\n        /// Applies the specified take clause to the source query.\n        /// </summary>\n        /// <param name=\"count\">\n        /// The number to take.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        IMobileServiceTableQuery<T> Take(int count);\n\n        /// <summary>\n        /// Applies the specified ascending order clause to the source query.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        IMobileServiceTableQuery<T> ThenBy<TKey>(Expression<Func<T, TKey>> keySelector);\n\n        /// <summary>\n        /// Applies the specified descending order clause to the source query.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        IMobileServiceTableQuery<T> ThenByDescending<TKey>(Expression<Func<T, TKey>> keySelector);\n\n        /// <summary>\n        /// Evalute the query asynchronously and return the results.\n        /// </summary>\n        /// <returns>\n        /// The evaluated query results.\n        /// </returns>\n        Task<IEnumerable<T>> ToEnumerableAsync();\n\n        /// <summary>\n        /// Evalute the query asynchronously and return the results in a new\n        /// List.\n        /// </summary>\n        /// <returns>\n        /// The evaluated query results as a List.\n        /// </returns>\n        Task<List<T>> ToListAsync();\n\n        /// <summary>\n        /// Applies the specified filter predicate to the source query.\n        /// </summary>\n        /// <param name=\"predicate\">\n        /// The filter predicate.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        IMobileServiceTableQuery<T> Where(Expression<Func<T, bool>> predicate);\n\n        /// <summary>\n        /// Applies to the source query the specified string key-value \n        /// pairs to be used as user-defined parameters with the request URI \n        /// query string.\n        /// </summary>\n        /// <param name=\"parameters\">\n        /// The parameters to apply.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        IMobileServiceTableQuery<T> WithParameters(IDictionary<string, string> parameters);\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/Linq/MemberInfoKey.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Collections.Generic;\nusing System.Reflection;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    ///  Encapsulates information about a class member that can be used as a key\n    ///  in a dictionary without performing a reflection call to instantiate an \n    ///  actual MemberInfo instance.\n    /// </summary>\n    internal class MemberInfoKey : IEquatable<MemberInfoKey>\n    {\n        private static Type[] emptyTypeParameters = new Type[0];\n\n        // Information about the class member\n        private MemberInfo memberInfo;\n        private Type type;\n        private String memberName;\n        private bool isMethod;\n        private bool isInstance;\n        private Type[] parameters;\n\n        /// <summary>\n        /// Instantiates an instance of a <see cref=\"MemberInfoKey\"/> from a\n        /// <see cref=\"MemberInfo\"/>.\n        /// </summary>\n        /// <param name=\"memberInfo\">\n        /// The <see cref=\"MemberInfo\"/> instance that provides information\n        /// about the class member.\n        /// </param>\n        public MemberInfoKey(MemberInfo memberInfo)\n        {\n            this.memberInfo = memberInfo;\n            this.memberName = memberInfo.Name;\n            this.type = memberInfo.DeclaringType;\n\n            MethodInfo asMethod = memberInfo as MethodInfo;\n            if (asMethod != null)\n            {\n                this.isMethod = true;\n                \n                this.isInstance = !asMethod.IsStatic;\n                this.parameters = asMethod.GetParameters().Select(p => p.ParameterType).ToArray();\n            }\n            else\n            {\n                PropertyInfo asProperty = memberInfo as PropertyInfo;\n                Debug.Assert(asProperty != null, \"All MemberInfoKey instances must be either methods or properties.\");\n\n                this.isMethod = false;\n                this.isInstance = true;\n                this.parameters = emptyTypeParameters;\n            }\n        }\n\n        /// <summary>\n        /// Instantiates an instance of a <see cref=\"MemberInfoKey\"/> from information\n        /// about a class member wihtout having to create a <see cref=\"MemberInfo\"/> instance.\n        /// </summary>\n        /// <param name=\"type\">\n        /// The type of the class that contains the member.\n        /// </param>\n        /// <param name=\"memberName\">\n        /// The name of the class member.\n        /// </param>\n        /// <param name=\"isMethod\">\n        /// <code>true</code> if the member is a method and <code>false</code> \n        /// if the member is a property.\n        /// </param>\n        /// <param name=\"isInstance\">\n        /// <code>true</code> is the member is an instance member and <code>false</code> \n        /// if the member is a class member.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// An array of types for the parameters of the member if the member is a method. \n        /// Should be an empty array if the member is a property.\n        /// </param>\n        public MemberInfoKey(Type type, string memberName, bool isMethod, bool isInstance, params Type[] parameters)\n        {\n            this.type = type;\n            this.memberName = memberName;\n            this.isMethod = isMethod;\n            this.isInstance = isInstance;\n            this.parameters = parameters;\n        }\n\n        /// <summary>\n        /// Returns <code>true</code> if the other <see cref=\"MemberInfoKey\"/> instance\n        /// represents the same class member as this instance.\n        /// </summary>\n        /// <param name=\"other\">\n        /// The other <see cref=\"MemberInfoKey\"/> to check equivalance against.\n        /// </param>\n        /// <returns>\n        /// <code>true</code> if the other <see cref=\"MemberInfoKey\"/> instance\n        /// represents the same class member as this instance.\n        /// </returns>\n        public bool Equals(MemberInfoKey other)\n        {\n            bool areEqual = false;\n\n            // If both instances refer to an actual MemberInfo instance, just\n            // check those for equivalence.\n            if (other.memberInfo != null &&\n                this.memberInfo != null)\n            {\n                areEqual = MemberInfo.Equals(other.memberInfo, this.memberInfo);\n            }\n            else if (string.Equals(other.memberName, this.memberName, StringComparison.Ordinal) &&\n                other.type == this.type &&\n                other.isMethod == this.isMethod &&\n                other.isInstance == this.isInstance &&\n                this.parameters.SequenceEqual(other.parameters))\n            {\n                areEqual = true;\n\n                // If one of the instances has a MemberInfo instance, set it on the\n                // other instance to speed up future equivalence checks.\n                if (other.memberInfo == null)\n                {\n                    other.memberInfo = this.memberInfo;\n                }\n                else\n                {\n                    this.memberInfo = other.memberInfo;\n                }\n            }\n\n            return areEqual;\n        }\n\n        /// <summary>\n        /// Returns <code>true</code> if the object is a <see cref=\"MemberInfoKey\"/> instance\n        /// that represents the same class member as this instance.\n        /// </summary>\n        /// <param name=\"obj\">\n        /// The object to check equivalance against.\n        /// </param>\n        /// <returns>\n        /// <code>true</code> if the object is a <see cref=\"MemberInfoKey\"/> instance\n        /// that represents the same class member as the instance.\n        /// </returns>\n        public override bool Equals(object obj)\n        {\n            MemberInfoKey other = obj as MemberInfoKey;\n            if (other != null)\n            {\n                return this.Equals(other);\n            }\n\n            return false;\n        }\n\n        /// <summary>\n        /// Returns a hashcode for the instance that is based on the\n        /// type and name of the class member.\n        /// </summary>\n        /// <returns>\n        /// A hashcode for the instance that is based on the\n        /// type and name of the class member.\n        /// </returns>\n        public override int GetHashCode()\n        {\n            return this.memberName.GetHashCode() | this.type.GetHashCode();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/Linq/MobileServiceTableQuery.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Represents a query that can be evaluated against a Mobile Services\n    /// table. MobileServiceTableQuery instances can be obtained via\n    /// MobileServiceClient.Query(of T)().\n    /// </summary>\n    /// <remarks>\n    /// Rather than implenting IQueryable directly, we've implemented the\n    /// portion of the LINQ query pattern we support on MobileServiceTableQuery\n    /// objects.  MobileServiceTableQuery instances are used to build up\n    /// IQueryables from LINQ query operations.\n    /// </remarks>\n    internal class MobileServiceTableQuery<T> : IMobileServiceTableQuery<T>\n    {\n        /// <summary>\n        /// Initializes a new instance of the MobileServiceTableQuery class.\n        /// </summary>\n        /// <param name=\"table\">\n        /// The table being queried.\n        /// </param>\n        /// <param name=\"queryProvider\">\n        /// The <see cref=\"MobileServiceTableQueryProvider\"/> associated with this \n        /// <see cref=\"T:MobileServiceTableQuery`1{T}\"/>\n        /// </param>\n        /// <param name=\"query\">\n        /// The encapsulated <see cref=\"IQueryable\"/>.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// The optional user-defined query string parameters to include with the query.\n        /// </param>\n        /// <param name=\"includeTotalCount\">\n        /// A value that if set will determine whether the query will request\n        /// the total count for all the records that would have been returned\n        /// ignoring any take paging/limit clause specified by client or\n        /// server.\n        /// </param>\n        internal MobileServiceTableQuery(IMobileServiceTable<T> table,\n                                         MobileServiceTableQueryProvider queryProvider,\n                                         IQueryable<T> query,\n                                         IDictionary<string, string> parameters,\n                                         bool includeTotalCount)\n        {\n            if (table == null)\n            {\n                throw new ArgumentNullException(\"table\");\n            }\n\n            this.Table = table;\n            this.RequestTotalCount = includeTotalCount;\n            this.Parameters = parameters;\n            this.Query = query;\n            this.QueryProvider = queryProvider;\n        }\n\n        /// <summary>\n        /// Gets the MobileServiceTable being queried.\n        /// </summary>\n        public IMobileServiceTable<T> Table { get; private set; }\n\n        /// <summary>\n        /// Gets a value indicating whether the query will request the total\n        /// count for all the records that would have been returned ignoring\n        /// any take paging/limit clause specified by client or server.\n        /// </summary>\n        public bool RequestTotalCount { get; private set; }\n\n        /// <summary>\n        /// The user-defined query string parameters to include with the query.\n        /// </summary>\n        public IDictionary<string, string> Parameters { get; private set; }\n\n        /// <summary>\n        /// Gets the underlying IQueryable associated with this query.\n        /// </summary>\n        public IQueryable<T> Query { get; set; }\n\n        /// <summary>\n        /// Gets the associated Query Provider capable of executing a <see cref=\"T:MobileServiceTableQuery`1{T}\"/>.\n        /// </summary>\n        public MobileServiceTableQueryProvider QueryProvider { get; set; }\n\n        /// <summary>\n        /// Applies the specified filter predicate to the source query.\n        /// </summary>\n        /// <param name=\"predicate\">\n        /// The filter predicate.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> Where(Expression<Func<T, bool>> predicate)\n        {\n            if (predicate == null)\n            {\n                throw new ArgumentNullException(\"predicate\");\n            }\n\n            return this.QueryProvider.Create<T>(this.Table, Queryable.Where(this.Query, predicate), this.Parameters, this.RequestTotalCount);\n        }\n\n        /// <summary>\n        /// Applies the specified selection to the source query.\n        /// </summary>\n        /// <typeparam name=\"U\">\n        /// Type representing the projected result of the query.\n        /// </typeparam>\n        /// <param name=\"selector\">\n        /// The selector function.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1715:IdentifiersShouldHaveCorrectPrefix\", MessageId = \"T\", Justification = \"Part of the LINQ query pattern.\")]\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1704:IdentifiersShouldBeSpelledCorrectly\", MessageId = \"U\", Justification = \"Standard for LINQ\")]\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<U> Select<U>(Expression<Func<T, U>> selector)\n        {\n            if (selector == null)\n            {\n                throw new ArgumentNullException(\"selector\");\n            }\n\n            // Create a new table with the same name/client but\n            // pretending to be of a different type since the query needs to\n            // have the same type as the table.  This won't cause any issues\n            // since we're only going to use it to evaluate the query and it'll\n            // never leak to users.\n            MobileServiceTable<U> table = new MobileServiceTable<U>(\n                this.Table.TableName,\n                this.Table.MobileServiceClient);\n\n            return this.QueryProvider.Create(table,\n                                             Queryable.Select(this.Query, selector),\n                                             MobileServiceTable.AddSystemProperties(Table.SystemProperties, this.Parameters),\n                                             this.RequestTotalCount);\n        }\n\n        /// <summary>\n        /// Applies the specified ascending order clause to the source query.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> OrderBy<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            if (keySelector == null)\n            {\n                throw new ArgumentNullException(\"keySelector\");\n            }\n\n            return this.QueryProvider.Create(this.Table, Queryable.OrderBy(this.Query, keySelector), this.Parameters, this.RequestTotalCount);\n        }\n\n        /// <summary>\n        /// Applies the specified descending order clause to the source query.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> OrderByDescending<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            if (keySelector == null)\n            {\n                throw new ArgumentNullException(\"keySelector\");\n            }\n\n            return this.QueryProvider.Create(this.Table, Queryable.OrderByDescending(this.Query, keySelector), this.Parameters, this.RequestTotalCount);\n        }\n\n        /// <summary>\n        /// Applies the specified ascending order clause to the source query.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> ThenBy<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            if (keySelector == null)\n            {\n                throw new ArgumentNullException(\"keySelector\");\n            }\n\n            return this.QueryProvider.Create(this.Table, Queryable.ThenBy((IOrderedQueryable<T>)this.Query, keySelector), this.Parameters, this.RequestTotalCount);\n        }\n\n        /// <summary>\n        /// Applies the specified descending order clause to the source query.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> ThenByDescending<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            if (keySelector == null)\n            {\n                throw new ArgumentNullException(\"keySelector\");\n            }\n\n            return this.QueryProvider.Create(this.Table, Queryable.ThenByDescending((IOrderedQueryable<T>)this.Query, keySelector), this.Parameters, this.RequestTotalCount);\n        }\n\n        /// <summary>\n        /// Applies the specified skip clause to the source query.\n        /// </summary>\n        /// <param name=\"count\">\n        /// The number to skip.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        public IMobileServiceTableQuery<T> Skip(int count)\n        {\n            return this.QueryProvider.Create(this.Table, Queryable.Skip(this.Query, count), this.Parameters, this.RequestTotalCount);\n        }\n\n        /// <summary>\n        /// Applies the specified take clause to the source query.\n        /// </summary>\n        /// <param name=\"count\">\n        /// The number to take.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        public IMobileServiceTableQuery<T> Take(int count)\n        {\n            return this.QueryProvider.Create(this.Table, Queryable.Take(this.Query, count), this.Parameters, this.RequestTotalCount);\n        }\n\n        /// <summary>\n        /// Applies to the source query the specified string key-value \n        /// pairs to be used as user-defined parameters with the request URI \n        /// query string.\n        /// </summary>\n        /// <param name=\"parameters\">\n        /// The parameters to apply.\n        /// </param>\n        /// <returns>\n        /// The composed query.\n        /// </returns>\n        public IMobileServiceTableQuery<T> WithParameters(IDictionary<string, string> parameters)\n        {\n            if (parameters != null)\n            {\n                // Make sure to replace any existing value for the key\n                foreach (KeyValuePair<string, string> pair in parameters)\n                {\n                    this.Parameters[pair.Key] = pair.Value;\n                }\n            }\n\n            return this.QueryProvider.Create(this.Table, this.Query, this.Parameters, this.RequestTotalCount);\n        }\n\n        /// <summary>\n        /// Ensure the query will get the total count for all the records that\n        /// would have been returned ignoring any take paging/limit clause\n        /// specified by client or server.\n        /// </summary>\n        /// <returns>\n        /// The query object.\n        /// </returns>\n        public IMobileServiceTableQuery<T> IncludeTotalCount()\n        {\n            return this.QueryProvider.Create(this.Table, this.Query, this.Parameters, includeTotalCount: true);\n        }\n\n        /// <summary>\n        /// Ensure the query will get the deleted records. This requires the soft delete feature to be enabled on the Mobile Service. Visit <see href=\"http://go.microsoft.com/fwlink/?LinkId=507647\">the link</see> for details.\n        /// </summary>\n        /// <returns>\n        /// The query object.\n        /// </returns>\n        public IMobileServiceTableQuery<T> IncludeDeleted()\n        {\n            return this.QueryProvider.Create(this.Table, this.Query, MobileServiceTable.IncludeDeleted(this.Parameters), includeTotalCount: true);\n        }\n\n        /// <summary>\n        /// Evalute the query asynchronously and return the results.\n        /// </summary>\n        /// <returns>\n        /// The evaluated query results.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Not nested when used via async pattern.\")]\n        public Task<IEnumerable<T>> ToEnumerableAsync()\n        {\n            return this.QueryProvider.Execute(this);\n        }\n\n        /// <summary>\n        /// Evalute the query asynchronously and return the results in a new\n        /// List.\n        /// </summary>\n        /// <returns>\n        /// The evaluated query results as a List.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Not nested when used via async pattern.\")]\n        public async Task<List<T>> ToListAsync()\n        {\n            IEnumerable<T> items = await this.QueryProvider.Execute(this);\n            return new QueryResultList<T>(items);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/Linq/MobileServiceTableQueryProvider.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    internal class MobileServiceTableQueryProvider\n    {\n        private IMobileServiceSyncTable syncTable;\n\n        public MobileServiceTableQueryProvider(IMobileServiceSyncTable syncTable = null)\n        {\n            this.syncTable = syncTable;\n        }\n\n        /// <summary>\n        /// Feature which are sent as telemetry information to the service for all\n        /// outgoing calls.\n        /// </summary>\n        internal MobileServiceFeatures Features { get; set; }\n\n        /// <summary>\n        /// Create a new query based off a table and and a new\n        /// queryable. This is used via MobileServiceTableQueryable's\n        /// combinators to construct new queries from simpler base queries.\n        /// </summary>\n        /// <param name=\"table\">\n        /// The table.\n        /// </param>\n        /// <param name=\"query\">\n        /// The new queryable.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// The optional user-defined query string parameters to include with the query.\n        /// </param>\n        /// <param name=\"includeTotalCount\">\n        /// A value that if set will determine whether the query will request\n        /// the total count for all the records that would have been returned\n        /// ignoring any take paging/limit clause specified by client or\n        /// server.  If this value is not set, we'll use the baseQuery's\n        /// RequestTotalProperty instead (this is specifically so that our\n        /// IncludeTotalCount method will preserve state on the old query).\n        /// </param>\n        /// <returns>\n        /// The new query.\n        /// </returns>\n        internal IMobileServiceTableQuery<T> Create<T>(IMobileServiceTable<T> table,\n                                                        IQueryable<T> query,\n                                                        IDictionary<string, string> parameters,\n                                                        bool includeTotalCount)\n        {\n            Debug.Assert(table != null, \"table cannot be null!\");\n            Debug.Assert(query != null, \"query cannot be null!\");\n            Debug.Assert(parameters != null, \"parameters cannot be null!\");\n\n            // NOTE: Make sure any changes to this logic are reflected in the\n            // Select method below which has its own version of this code to\n            // work around type changes for its projection.\n            return new MobileServiceTableQuery<T>(\n                table,\n                this,\n                query,\n                parameters,\n                includeTotalCount);\n        }\n\n        /// <summary>\n        /// Execute a query and return its results.\n        /// </summary>\n        /// <typeparam name=\"T\">\n        /// The type of element returned by the query.\n        /// </typeparam>\n        /// <param name=\"query\">\n        /// The query to evaluate and get the results for.\n        /// </param>\n        /// <returns>\n        /// Results of the query.\n        /// </returns>\n        internal async Task<IEnumerable<T>> Execute<T>(IMobileServiceTableQuery<T> query)\n        {\n            // Compile the query from the underlying IQueryable's expression\n            // tree\n            MobileServiceTableQueryDescription compiledQuery = this.Compile(query);\n\n            // Send the query\n            string odata = compiledQuery.ToODataString();\n            QueryResult result = await this.Execute<T>(query, odata);\n\n            return new QueryResultEnumerable<T>(\n                result.TotalCount,\n                result.NextLink,\n                query.Table.MobileServiceClient.Serializer.Deserialize(result.Values, compiledQuery.ProjectionArgumentType).Select(\n                    value =>\n                    {\n                        // Apply the projection to the instance transforming it\n                        // as desired\n                        foreach (Delegate projection in compiledQuery.Projections)\n                        {\n                            value = projection.DynamicInvoke(value);\n                        }\n\n                        return (T)value;\n                    }));\n        }\n\n        protected virtual async Task<QueryResult> Execute<T>(IMobileServiceTableQuery<T> query, string odata)\n        {\n            JToken result;\n            if (this.syncTable == null)\n            {\n                var table = query.Table as MobileServiceTable;\n                if (table != null)\n                {\n                    // Add telemetry information if possible.\n                    return await table.ReadAsync(odata, query.Parameters, this.Features | MobileServiceFeatures.TypedTable);\n                }\n                else\n                {\n                    result = await query.Table.ReadAsync(odata, query.Parameters);\n                }\n            }\n            else\n            {\n                result = await this.syncTable.ReadAsync(odata);\n            }\n            return QueryResult.Parse(result, null, validate: true);\n        }\n\n        /// <summary>\n        /// Compile the query into a MobileServiceTableQueryDescription.\n        /// </summary>\n        /// <returns>\n        /// The compiled OData query.\n        /// </returns>\n        internal MobileServiceTableQueryDescription Compile<T>(IMobileServiceTableQuery<T> query)\n        {\n            // Compile the query from the underlying IQueryable's expression\n            // tree\n            MobileServiceTableQueryTranslator<T> translator = new MobileServiceTableQueryTranslator<T>(query);\n            MobileServiceTableQueryDescription compiledQuery = translator.Translate();\n\n            return compiledQuery;\n        }\n\n        internal string ToODataString<T>(IMobileServiceTableQuery<T> query)\n        {\n            MobileServiceTableQueryDescription description = this.Compile(query);\n            return description.ToODataString();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/Linq/MobileServiceTableQueryTranslator.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Serialization;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Compiles a LINQ expression tree into a\n    /// MobileServiceTableQueryDescription that can be executed on the server.\n    /// </summary>\n    /// <remarks>\n    /// This code is based on the concepts discussed in\n    /// http://blogs.msdn.com/b/mattwar/archive/2008/11/18/linq-links.aspx\n    /// which is pointed to by MSDN as the reference for building LINQ \n    /// providers.\n    /// </remarks>\n    internal class MobileServiceTableQueryTranslator<T>\n    {\n        /// <summary>\n        /// The compiled query description generated from the expression tree.\n        /// </summary>\n        private MobileServiceTableQueryDescription queryDescription;\n\n        /// <summary>\n        /// The query which is being translated.\n        /// </summary>\n        private IMobileServiceTableQuery<T> query;\n\n        /// <summary>\n        /// Initializes a new instance of the MobileServiceTableQueryTranslator\n        /// class.\n        /// </summary>\n        /// <param name=\"query\">\n        /// The <see cref=\"T:MobileServiceTableQuery`1{T}\"/> which \n        /// is being translated.\n        /// </param>\n        internal MobileServiceTableQueryTranslator(IMobileServiceTableQuery<T> query)\n        {\n            Debug.Assert(query != null);\n\n            this.query = query;\n\n            this.queryDescription = new MobileServiceTableQueryDescription(query.Table.TableName)\n            { \n                IncludeTotalCount = query.RequestTotalCount,\n            };\n        }\n\n        /// <summary>\n        /// The contract resolver to use to determine property \n        /// names from members used within expressions.\n        /// </summary>\n        private MobileServiceContractResolver ContractResolver\n        {\n            get\n            {\n                return this.query.Table.MobileServiceClient.SerializerSettings.ContractResolver;\n            }\n        }\n\n        /// <summary>\n        /// Translate an expression tree into a compiled query description that\n        /// can be executed on the server.\n        /// </summary>\n        /// <returns>\n        /// A compiled query description.\n        /// </returns>\n        public MobileServiceTableQueryDescription Translate()\n        {\n            // Evaluate any independent subexpressions so we end up with a tree\n            // full of constants or things that depend directly on our values.\n            IExpressionUtility expressionUtility = Platform.Instance.ExpressionUtility;\n            Expression expression = expressionUtility.PartiallyEvaluate(this.query.Query.Expression);\n\n            // Build a new query from the expression tree\n            this.Visit(expression);\n\n            // set the projectType if there was no Projection in the query\n            if (this.queryDescription.ProjectionArgumentType == null)\n            {\n                this.queryDescription.ProjectionArgumentType = typeof(T);\n            }\n\n            return this.queryDescription;\n        }\n\n        /// <summary>\n        /// Visits the <paramref name=\"expression\"/>. \n        /// </summary>\n        /// <remarks>\n        /// The root of the expression must be a MethodCall node or the query root itself.  \n        /// This will be the case\n        /// because we generated the expression using <see cref=\"MobileServiceTableQuery{T}\"/>\n        /// instance.\n        /// </remarks>\n        /// <param name=\"expression\">\n        /// The expression to visit.\n        /// </param>\n        private void Visit(Expression expression)\n        {\n            MethodCallExpression methodCallExpression = expression as MethodCallExpression;\n            if (methodCallExpression != null)\n            {\n                VisitMethodCall(methodCallExpression);\n            }\n        }\n\n        /// <summary>\n        /// Process the core LINQ operators that are supported by Mobile\n        /// Services.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to visit.\n        /// </param>\n        /// <returns>\n        /// The visited expression.\n        /// </returns>\n        private Expression VisitMethodCall(MethodCallExpression expression)\n        {\n            // Recurse down the target of the method call\n            if (expression != null && expression.Arguments.Count >= 1)\n            {\n                Expression firstArgument = expression.Arguments[0];\n                if (firstArgument.NodeType == ExpressionType.Call)\n                {\n                    VisitMethodCall((MethodCallExpression)firstArgument);\n                }\n            }\n\n            // Handle the method call itself\n            string name = null;\n            if (expression != null &&\n                expression.Method != null &&\n                expression.Method.DeclaringType == typeof(Queryable))\n            {\n                name = expression.Method.Name;\n            }\n            switch (name)\n            {\n                case \"Where\":\n                    this.AddFilter(expression);\n                    break;\n                case \"Select\":\n                    this.AddProjection(expression);\n                    break;\n                case \"OrderBy\":\n                    this.AddOrdering(expression, true, true);\n                    break;                    \n                case \"ThenBy\":\n                    this.AddOrdering(expression, true);\n                    break;\n                case \"OrderByDescending\":\n                    this.AddOrdering(expression, false, true);\n                    break;                    \n                case \"ThenByDescending\":\n                    this.AddOrdering(expression, false);\n                    break;\n                //multiple skips add up\n                case \"Skip\":\n                    int skipCount = GetCountArgument(expression);\n                    this.queryDescription.Skip = this.queryDescription.Skip.HasValue ? this.queryDescription.Skip.Value + skipCount : skipCount;\n                    break;\n                // multiple takes, takes minimum\n                case \"Take\":\n                    int takeCount = GetCountArgument(expression);\n                    this.queryDescription.Top = this.queryDescription.Top.HasValue ? Math.Min(this.queryDescription.Top.Value, takeCount) : takeCount;\n                    break;\n                default:\n                    ThrowForUnsupportedException(expression);\n                    break;                    \n            }\n\n            return expression;\n        }\n\n        /// <summary>\n        /// Add a filter expression to the query.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// Where method call expression.\n        /// </param>\n        private void AddFilter(MethodCallExpression expression)\n        {\n            if (expression != null && expression.Arguments.Count >= 2)\n            {\n                LambdaExpression lambda = StripQuote(expression.Arguments[1]) as LambdaExpression;\n                if (lambda != null)\n                {\n                    QueryNode filter = FilterBuildingExpressionVisitor.Compile(lambda.Body, this.ContractResolver);\n                    if (this.queryDescription.Filter != null)\n                    {\n                        // If there's already a filter value, that means the\n                        // query has multiple where clauses which we'll just\n                        // join together with \"and\"s.\n                        this.queryDescription.Filter = new BinaryOperatorNode(BinaryOperatorKind.And, this.queryDescription.Filter, filter);\n                    }\n                    else\n                    {\n                        this.queryDescription.Filter = filter;\n                    }\n                    return;\n                }\n            }\n\n            ThrowForUnsupportedException(expression);\n        }\n\n        /// <summary>\n        /// Add a projection to the query.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// Select method call expression.\n        /// </param>\n        private void AddProjection(MethodCallExpression expression)\n        {\n            // We only support Select(x => ...) projections.  Anything else\n            // will throw a NotSupportException.\n            if (expression != null && expression.Arguments.Count == 2)\n            {\n                LambdaExpression projection = StripQuote(expression.Arguments[1]) as LambdaExpression;\n                if (projection != null && projection.Parameters.Count == 1)\n                {\n                    // Compile the projection into a function that we can apply\n                    // to the deserialized value to transform it accordingly.\n                    this.queryDescription.Projections.Add(projection.Compile());\n\n                    // We only need to capture the projection argument type and members for the\n                    // very first projection.\n                    if (this.queryDescription.ProjectionArgumentType == null)\n                    {\n                        // Store the type of the very first input to the projection as we'll\n                        // need that for deserialization of values (since the\n                        // projection will change the expected type of the data\n                        // source)\n                        this.queryDescription.ProjectionArgumentType = projection.Parameters[0].Type;\n\n                        // Filter the selection down to just the values used by\n                        // the projection\n                        IExpressionUtility expressionUtility = Platform.Instance.ExpressionUtility;\n                        foreach (MemberExpression memberExpression in expressionUtility.GetMemberExpressions(projection.Body))\n                        {\n                            // Ensure we only process members of the parameter\n                            string memberName = FilterBuildingExpressionVisitor.GetTableMemberName(memberExpression, this.ContractResolver);\n                            if (memberName != null)\n                            {\n                                queryDescription.Selection.Add(memberName);\n                            }\n                        }\n\n                        //Make sure we also include all the members that would be\n                        //required for deserialization\n                        JsonContract contract = this.ContractResolver.ResolveContract(this.queryDescription.ProjectionArgumentType);\n                        JsonObjectContract objectContract = contract as JsonObjectContract;\n                        if (objectContract != null)\n                        {\n                            foreach (string propertyName in objectContract.Properties\n                                                                          .Where(p => p.Required == Required.Always || \n                                                                                      p.Required == Required.AllowNull)\n                                                                          .Select(p => p.PropertyName))\n                            {\n                                if (!this.queryDescription.Selection.Contains(propertyName))\n                                {\n                                    this.queryDescription.Selection.Add(propertyName);\n                                }\n                            }\n                        }\n                    }\n\n                    return;\n                }\n            }\n\n            ThrowForUnsupportedException(expression);\n        }\n\n        /// <summary>\n        /// Add an ordering constraint for an OrderBy/ThenBy call.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The ordering method call.\n        /// </param>\n        /// <param name=\"ascending\">\n        /// Whether the order is ascending or descending.\n        /// </param>\n        /// <param name=\"prepend\">\n        /// Indicates if the expression should be prepended or not.\n        /// </param>\n        private void AddOrdering(MethodCallExpression expression, bool ascending, bool prepend = false)\n        {\n            // Keep updating with the deepest nested expression structure we\n            // can get to so that we can provide a more detailed error message\n            Expression deepest = expression;\n\n            // We only allow OrderBy(x => x.Member) expressions.  Anything else\n            // will result in a NotSupportedException.\n            if (expression != null && expression.Arguments.Count >= 2)\n            {\n                LambdaExpression lambda = StripQuote(expression.Arguments[1]) as LambdaExpression;\n                if (lambda != null)\n                {\n                    deepest = lambda.Body ?? lambda;\n\n                    // Find the name of the member being ordered\n                    MemberExpression memberAccess = lambda.Body as MemberExpression;\n                    if (memberAccess != null) \n                    {\n                        string memberName = FilterBuildingExpressionVisitor.GetTableMemberName(memberAccess, this.ContractResolver);\n                        if (memberName != null)\n                        {\n                            OrderByDirection direction = ascending ? OrderByDirection.Ascending : OrderByDirection.Descending;\n                            var node = new OrderByNode(new MemberAccessNode(null, memberName), direction);\n                            // Add the ordering\n                            if(prepend)\n                            {\n                                this.queryDescription.Ordering.Insert(0, node);\n                            } \n                            else \n                            {\n                                this.queryDescription.Ordering.Add(node);                            \n                            }\n\n                            return;\n                        }\n                    }\n                }\n            }\n\n            throw new NotSupportedException(\n                string.Format(\n                    CultureInfo.InvariantCulture,\n                    \"'{0}' Mobile Services query expressions must consist of members only, not '{1}'.\",\n                    expression != null && expression.Method != null ? expression.Method.Name : null,\n                    deepest != null ? deepest.ToString() : null));\n        }\n\n        /// <summary>\n        /// Remove the quote from quoted expressions.\n        /// </summary>\n        /// <param name=\"expression\">The expression to check.</param>\n        /// <returns>An unquoted expression.</returns>\n        private static Expression StripQuote(Expression expression)\n        {\n            Debug.Assert(expression != null, \"expression cannot be null!\");\n            return expression.NodeType == ExpressionType.Quote ?\n                ((UnaryExpression)expression).Operand :\n                expression;\n        }\n\n        /// <summary>\n        /// Throw a NotSupportedException for an unsupported expression.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The unsupported expression.\n        /// </param>\n        private static void ThrowForUnsupportedException(MethodCallExpression expression)\n        {\n            // Try and get the body of the lambda for a more descriptive error\n            // message (if possible)\n            Expression deepest = expression;\n            if (expression != null && expression.Arguments.Count >= 2)\n            {\n                LambdaExpression lambda = StripQuote(expression.Arguments[1]) as LambdaExpression;\n                if (lambda != null)\n                {\n                    deepest = lambda.Body ?? lambda;\n                }\n            }\n\n            throw new NotSupportedException(\n                string.Format(\n                    CultureInfo.InvariantCulture,\n                    \"Expression '{1}' is not a supported '{0}' Mobile Services query expression.\",\n                    expression != null && expression.Method != null ? expression.Method : null,\n                    deepest != null ? deepest.ToString() : null));\n        }\n\n        /// <summary>\n        /// Get the count argument value for a Skip or Take method call.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The method call expression.\n        /// </param>\n        /// <returns>\n        /// The count argument.\n        /// </returns>\n        private static int GetCountArgument(MethodCallExpression expression)\n        {\n            // Keep updating with the deepest nested expression structure we\n            // can get to so that we can provide a more detailed error message\n            Expression deepest = expression;\n\n            // We only allow Skip(x) expressions.  Anything else will result in\n            // a NotSupportedException.\n            if (expression != null && expression.Arguments.Count >= 2)\n            {\n                ConstantExpression constant = expression.Arguments[1] as ConstantExpression;\n                if (constant != null)\n                {\n                    deepest = constant;\n                    if (constant.Value is int)\n                    {\n                        return (int)constant.Value;\n                    }\n                }\n            }\n\n            throw new NotSupportedException(\n                string.Format(\n                    CultureInfo.InvariantCulture,\n                    \"'{0}' Mobile Services query expressions must consist of a single integer, not '{1}'.\",\n                    expression != null && expression.Method != null ? expression.Method.Name : null,\n                    deepest != null ? deepest.ToString() : null));\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/MobileServiceTableQueryDescription.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Represents the structural elements of a Mobile Services query over the\n    /// subset of OData it uses.\n    /// </summary>\n    /*\n     * Our LINQ OData Provider will effectively compile expression trees into\n     * MobileServiceTableQueryDescription instances which can be passed to a\n     * MobileServiceCollectionView and evaluated on the server.  We don't\n     * compile the expression all the way down to a single Uri fragment\n     * because we'll need to re-evaluate the query with different Skip/Top\n     * values for paging and data virtualization.\n    */\n    public sealed class MobileServiceTableQueryDescription\n    {\n        /// <summary>\n        /// Initializes a new instance of the\n        /// <see cref=\"MobileServiceTableQueryDescription\"/> class.\n        /// </summary>\n        public MobileServiceTableQueryDescription(string tableName)\n        {\n            Debug.Assert(tableName != null, \"tableName cannot be null\");\n\n            this.TableName = tableName;\n            this.Selection = new List<string>();\n            this.Projections = new List<Delegate>();\n            this.Ordering = new List<OrderByNode>();\n        }\n\n        /// <summary>\n        /// Gets the uri path if the query was an absolute or relative uri\n        /// </summary>\n        internal string UriPath { get; private set; }\n\n        /// <summary>\n        /// Gets or sets the name of the table being queried.\n        /// </summary>\n        public string TableName { get; private set; }\n\n        /// <summary>\n        /// Gets or sets the query's filter expression.\n        /// </summary>\n        public QueryNode Filter { get; set; }\n\n        /// <summary>\n        /// Gets a list of fields that should be selected from the items in\n        /// the table.\n        /// </summary>\n        public IList<string> Selection { get; private set; }\n\n        /// <summary>\n        /// Gets a list of expressions that specify the ordering\n        /// constraints imposed on the query.\n        /// </summary>\n        public IList<OrderByNode> Ordering { get; private set; }\n\n        /// <summary>\n        /// Gets or sets the number of elements to skip.\n        /// </summary>\n        public int? Skip { get; set; }\n\n        /// <summary>\n        /// Gets or sets the number of elements to take.\n        /// </summary>\n        public int? Top { get; set; }\n\n        /// <summary>\n        /// Gets a collection of projections that should be applied to each element of\n        /// the query.\n        /// </summary>\n        internal List<Delegate> Projections { get; private set; }\n\n        /// <summary>\n        /// Gets or sets the type of the argument to the projection (i.e., the\n        /// type that should be deserialized).\n        /// </summary>\n        internal Type ProjectionArgumentType { get; set; }\n\n        /// <summary>\n        /// Gets or sets a value indicating whether the query should request\n        /// the total count for all the records that would have been returned\n        /// if the server didn't impose a data cap.\n        /// </summary>\n        public bool IncludeTotalCount { get; set; }\n\n        /// <summary>\n        /// Creates a copy of <see cref=\"MobileServiceTableQueryDescription\"/>\n        /// </summary>\n        /// <returns>The cloned query</returns>\n        public MobileServiceTableQueryDescription Clone()\n        {\n            var clone = new MobileServiceTableQueryDescription(this.TableName);\n\n            clone.Filter = this.Filter;\n            clone.Selection = this.Selection.ToList();\n            clone.Ordering = this.Ordering.ToList();\n            clone.Projections = this.Projections.ToList();\n            clone.ProjectionArgumentType = this.ProjectionArgumentType;\n            clone.Skip = this.Skip;\n            clone.Top = this.Top;\n            clone.IncludeTotalCount = this.IncludeTotalCount;\n\n            return clone;\n        }\n\n        /// <summary>\n        /// Convert the query structure into the standard OData URI protocol\n        /// for queries.\n        /// </summary>\n        /// <returns>\n        /// URI fragment representing the query.\n        /// </returns>\n        public string ToODataString()\n        {\n            char? separator = null;\n            StringBuilder text = new StringBuilder();\n\n            // Add the filter\n            if (this.Filter != null)\n            {\n                string filterStr = ODataExpressionVisitor.ToODataString(this.Filter);\n                text.AppendFormat(CultureInfo.InvariantCulture, \"{0}{1}={2}\", separator, ODataOptions.Filter, filterStr);\n                separator = '&';\n            }\n\n            // Add the ordering\n            if (this.Ordering.Count > 0)\n            {\n                IEnumerable<string> orderings = this.Ordering\n                                                    .Select(o =>\n                                                    {\n                                                        string result = ODataExpressionVisitor.ToODataString(o.Expression);\n                                                        if (o.Direction == OrderByDirection.Descending)\n                                                        {\n                                                            result += \" desc\";\n                                                        }\n                                                        return result;\n                                                    });\n\n                text.AppendFormat(CultureInfo.InvariantCulture, \"{0}{1}={2}\", separator, ODataOptions.OrderBy, string.Join(\",\", orderings));\n                separator = '&';\n            }\n\n            // Skip any elements\n            if (this.Skip.HasValue && this.Skip >= 0)\n            {\n                text.AppendFormat(CultureInfo.InvariantCulture, \"{0}{1}={2}\", separator, ODataOptions.Skip, this.Skip);\n                separator = '&';\n            }\n\n            // Take the desired number of elements\n            if (this.Top.HasValue && this.Top >= 0)\n            {\n                text.AppendFormat(CultureInfo.InvariantCulture, \"{0}{1}={2}\", separator, ODataOptions.Top, this.Top);\n                separator = '&';\n            }\n\n            // Add the selection\n            if (this.Selection.Count > 0)\n            {\n                text.AppendFormat(CultureInfo.InvariantCulture, \"{0}{1}={2}\", separator, ODataOptions.Select, string.Join(\",\", this.Selection.Select(Uri.EscapeDataString)));\n                separator = '&';\n            }\n\n            // Add the total count\n            if (this.IncludeTotalCount)\n            {\n                text.AppendFormat(CultureInfo.InvariantCulture, \"{0}{1}=allpages\", separator, ODataOptions.InlineCount);\n                separator = '&';\n            }\n\n            return text.ToString();\n        }\n\n        /// <summary>\n        /// Parses a OData query and creates a <see cref=\"MobileServiceTableQueryDescription\"/> instance\n        /// </summary>\n        /// <param name=\"tableName\">The name of table for the query.</param>\n        /// <param name=\"query\">The odata query string</param>\n        /// <returns>An instance of <see cref=\"MobileServiceTableQueryDescription\"/></returns>\n        public static MobileServiceTableQueryDescription Parse(string tableName, string query)\n        {\n            query = query ?? String.Empty;\n\n            return Parse(tableName, query, null);\n        }\n\n        internal static MobileServiceTableQueryDescription Parse(Uri applicationUri, string tableName, string query)\n        {\n            query = query ?? String.Empty;\n            string uriPath = null;\n            Uri uri;\n            bool absolute;\n            if (HttpUtility.TryParseQueryUri(applicationUri, query, out uri, out absolute))\n            {\n                query = uri.Query.Length > 0 ? uri.Query.Substring(1) : String.Empty;\n                uriPath = uri.AbsolutePath;\n            }\n\n            return Parse(tableName, query, uriPath);\n        }\n\n        private static MobileServiceTableQueryDescription Parse(string tableName, string query, string uriPath)\n        {\n            bool includeTotalCount = false;\n            int? top = null;\n            int? skip = null;\n            string[] selection = null;\n            QueryNode filter = null;\n            IList<OrderByNode> orderings = null;\n\n            IDictionary<string, string> parameters = HttpUtility.ParseQueryString(query);\n\n            foreach (KeyValuePair<string, string> parameter in parameters)\n            {\n                string key = parameter.Key;\n                string value = parameter.Value;\n                if (String.IsNullOrEmpty(key))\n                {\n                    continue;\n                }\n\n                switch (key)\n                {\n                    case ODataOptions.Filter:\n                        filter = ODataExpressionParser.ParseFilter(value);\n                        break;\n                    case ODataOptions.OrderBy:\n                        orderings = ODataExpressionParser.ParseOrderBy(value);\n                        break;\n                    case ODataOptions.Skip:\n                        skip = Int32.Parse(value);\n                        break;\n                    case ODataOptions.Top:\n                        top = Int32.Parse(value);\n                        break;\n                    case ODataOptions.Select:\n                        selection = value.Split(',');\n                        break;\n                    case ODataOptions.InlineCount:\n                        includeTotalCount = \"allpages\".Equals(value);\n                        break;\n                    default:\n                        throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, \"Unrecognized query parameter '{0}'.\", key), \"query\");\n                }\n            }\n\n            var description = new MobileServiceTableQueryDescription(tableName)\n            {\n                IncludeTotalCount = includeTotalCount,\n                Skip = skip,\n                Top = top\n            };\n            description.UriPath = uriPath;\n            if (selection != null)\n            {\n                ((List<string>)description.Selection).AddRange(selection);\n            }\n            if (orderings != null)\n            {\n                ((List<OrderByNode>)description.Ordering).AddRange(orderings);\n            }\n            description.Filter = filter;\n\n            return description;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/BinaryOperatorKind.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Enumeration of binary operators.\n    /// </summary>\n    public enum BinaryOperatorKind\n    {\n        /// <summary>\n        /// The logical or operator.\n        /// </summary>\n        Or = 0,\n\n        /// <summary>\n        /// The logical and operator.\n        /// </summary>\n        And = 1,\n\n        /// <summary>\n        /// The eq operator.\n        /// </summary>\n        Equal = 2,\n\n        /// <summary>\n        /// The ne operator.\n        /// </summary>\n        NotEqual = 3,\n\n        /// <summary>\n        /// The gt operator.\n        /// </summary>\n        GreaterThan = 4,\n\n        /// <summary>\n        /// The ge operator.\n        /// </summary>\n        GreaterThanOrEqual = 5,\n\n        /// <summary>\n        /// The lt operator.\n        /// </summary>\n        LessThan = 6,\n\n        /// <summary>\n        /// The le operator.\n        /// </summary>\n        LessThanOrEqual = 7,\n\n        /// <summary>\n        /// The add operator.\n        /// </summary>\n        Add = 8,\n\n        /// <summary>\n        /// The sub operator.\n        /// </summary>\n        Subtract = 9,\n\n        /// <summary>\n        /// The mul operator.\n        /// </summary>\n        Multiply = 10,\n\n        /// <summary>\n        /// The div operator.\n        /// </summary>\n        Divide = 11,\n\n        /// <summary>\n        /// The mod operator.\n        /// </summary>\n        Modulo = 12\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/BinaryOperatorNode.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Query node representing a binary operator.\n    /// </summary>\n    public sealed class BinaryOperatorNode: QueryNode\n    {\n        /// <summary>\n        /// Gets the kind of the query node.\n        /// </summary>\n        public override QueryNodeKind Kind\n        {\n            get { return QueryNodeKind.BinaryOperator; }\n        }\n\n        /// <summary>\n        /// The operator represented by this node.\n        /// </summary>\n        public BinaryOperatorKind OperatorKind { get; private set; }\n\n        /// <summary>\n        /// Gets the left operand.\n        /// </summary>\n        public QueryNode LeftOperand { get; internal set; }\n\n        /// <summary>\n        /// Gets the right operand.\n        /// </summary>\n        public QueryNode RightOperand { get; internal set; }\n\n        /// <summary>\n        /// Initializes instance of <see cref=\"BinaryOperatorNode\"/>\n        /// </summary>\n        /// <param name=\"kind\">The kind of this node.</param>\n        /// <param name=\"left\">The left operand.</param>\n        /// <param name=\"right\">The right operand.</param>\n        public BinaryOperatorNode(BinaryOperatorKind kind, QueryNode left, QueryNode right)\n        {\n            this.OperatorKind = kind;\n            this.LeftOperand = left;\n            this.RightOperand = right;\n        }\n\n        /// <summary>\n        /// Accept a <see cref=\"QueryNodeVisitor{T}\" /> to walk a tree of <see cref=\"QueryNode\" />s.\n        /// </summary>\n        /// <typeparam name=\"T\">Type that the visitor will return after visiting this token.</typeparam>\n        /// <param name=\"visitor\">An implementation of the visitor interface.</param>\n        /// <returns>An object whose type is determined by the type parameter of the visitor.</returns>\n        public override T Accept<T>(QueryNodeVisitor<T> visitor)\n        {\n            return visitor.Visit(this);\n        }        \n\n        internal override void SetChildren(IList<QueryNode> children)\n        {\n            Debug.Assert(children.Count == 2);\n\n            this.LeftOperand = children[0];\n            this.RightOperand = children[1];\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/ConstantNode.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Node representing a primitive constant value.\n    /// </summary>  \n    public sealed class ConstantNode: QueryNode\n    {\n        /// <summary>\n        /// Gets the kind of the query node.\n        /// </summary>\n        public override QueryNodeKind Kind\n        {\n            get { return QueryNodeKind.Constant; }\n        }\n\n        /// <summary>\n        /// Gets the primitive constant value.\n        /// </summary>\n        public object Value { get; private set; }\n\n        /// <summary>\n        /// Initializes an instance of <see cref=\"ConstantNode\"/>\n        /// </summary>\n        /// <param name=\"value\">This node's primitive value.</param>\n        public ConstantNode(object value)\n        {\n            this.Value = value;\n        }\n\n        /// <summary>\n        /// Accept a <see cref=\"QueryNodeVisitor{T}\" /> to walk a tree of <see cref=\"QueryNode\" />s.\n        /// </summary>\n        /// <typeparam name=\"T\">Type that the visitor will return after visiting this token.</typeparam>\n        /// <param name=\"visitor\">An implementation of the visitor interface.</param>\n        /// <returns>An object whose type is determined by the type parameter of the visitor.</returns>\n        public override T Accept<T>(QueryNodeVisitor<T> visitor)\n        {\n            return visitor.Visit(this);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/ConvertNode.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Node representing a conversion of primitive type to another type.\n    /// </summary>\n    public sealed class ConvertNode: QueryNode\n    {\n        /// <summary>\n        /// Gets the kind of the query node.\n        /// </summary>\n        public override QueryNodeKind Kind\n        {\n            get { return QueryNodeKind.Convert; }\n        }\n\n        /// <summary>\n        /// Get the source value to convert.\n        /// </summary>\n        public QueryNode Source { get; private set; }\n\n        /// <summary>\n        /// Get the type we're converting to.\n        /// </summary>\n        public Type  TargetType {get; private set;}\n\n         /// <summary>\n        /// Initializes an instance of <see cref=\"ConvertNode\"/>\n        /// </summary>\n        /// <param name=\"source\">The node to convert.</param>\n        /// <param name=\"targetType\">The type to convert the node to</param>\n        public ConvertNode(QueryNode source, Type targetType)\n        {\n            this.Source = source;\n            this.TargetType = targetType;\n        }\n\n        internal override void SetChildren(IList<QueryNode> children)\n        {\n            Debug.Assert(children.Count >= 1);\n            this.Source = children[0];\n        }\n\n        /// <summary>\n        /// Accept a <see cref=\"QueryNodeVisitor{T}\" /> to walk a tree of <see cref=\"QueryNode\" />s.\n        /// </summary>\n        /// <typeparam name=\"T\">Type that the visitor will return after visiting this token.</typeparam>\n        /// <param name=\"visitor\">An implementation of the visitor interface.</param>\n        /// <returns>An object whose type is determined by the type parameter of the visitor.</returns>\n        public override T Accept<T>(QueryNodeVisitor<T> visitor)\n        {            \n            return visitor.Visit(this);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/FunctionCallNode.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Node representing a function call.\n    /// </summary>\n    public sealed class FunctionCallNode : QueryNode\n    {\n        /// <summary>\n        /// Gets the kind of the query node.\n        /// </summary>\n        public override QueryNodeKind Kind\n        {\n            get { return QueryNodeKind.FunctionCall; }\n        }\n\n        /// <summary>\n        /// Gets the name of the function to call.\n        /// </summary>\n        public string Name { get; private set; }\n\n        /// <summary>\n        /// Gets the list of arguments to this function call.\n        /// </summary>\n        public IList<QueryNode> Arguments { get; private set; }\n\n        /// <summary>\n        /// Initializes an instance of <see cref=\"FunctionCallNode\"/>\n        /// </summary>\n        /// <param name=\"name\">The name of the function to call.</param>\n        /// <param name=\"arguments\">The list of arguments to this function call.</param>\n        public FunctionCallNode(string name, IList<QueryNode> arguments)\n        {\n            this.Name = name;\n            this.Arguments = arguments;\n        }\n\n        internal override void SetChildren(IList<QueryNode> children)\n        {\n            this.Arguments = children.ToList();\n        }\n\n        /// <summary>\n        /// Accept a <see cref=\"QueryNodeVisitor{T}\" /> to walk a tree of <see cref=\"QueryNode\" />s.\n        /// </summary>\n        /// <typeparam name=\"T\">Type that the visitor will return after visiting this token.</typeparam>\n        /// <param name=\"visitor\">An implementation of the visitor interface.</param>\n        /// <returns>An object whose type is determined by the type parameter of the visitor.</returns>\n        public override T Accept<T>(QueryNodeVisitor<T> visitor)\n        {\n            return visitor.Visit(this);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/MemberAccessNode.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Node representing an access to a member value.\n    /// </summary>\n    public sealed class MemberAccessNode : QueryNode\n    {\n        /// <summary>\n        /// Gets the kind of the query node.\n        /// </summary>\n        public override QueryNodeKind Kind\n        {\n            get { return QueryNodeKind.MemberAccess; }\n        }\n\n        /// <summary>\n        /// Instance to access member of.\n        /// </summary>\n        public QueryNode Instance { get; private set; }\n\n        /// <summary>\n        /// Gets the member name to access.\n        /// </summary>\n        public string MemberName { get; private set; }\n\n        /// <summary>\n        /// Initializes an instance of <see cref=\"MemberAccessNode\"/>\n        /// </summary>\n        /// <param name=\"instance\">Instance to access member of.</param>\n        /// <param name=\"memberName\">The member name to access.</param>\n        public MemberAccessNode(QueryNode instance, string memberName)\n        {\n            this.Instance = instance;\n            this.MemberName = memberName;\n        }\n\n        /// <summary>\n        /// Accept a <see cref=\"QueryNodeVisitor{T}\" /> to walk a tree of <see cref=\"QueryNode\" />s.\n        /// </summary>\n        /// <typeparam name=\"T\">Type that the visitor will return after visiting this token.</typeparam>\n        /// <param name=\"visitor\">An implementation of the visitor interface.</param>\n        /// <returns>An object whose type is determined by the type parameter of the visitor.</returns>\n        public override T Accept<T>(QueryNodeVisitor<T> visitor)\n        {\n            return visitor.Visit(this);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/ODataExpressionLexer.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    internal sealed class ODataExpressionLexer\n    {\n        private string text;\n        private int textLen;\n        private int textPos;\n        public char CurrentChar { get; private set; }\n\n        public QueryToken Token { get; private set; }\n\n        public ODataExpressionLexer(string expression)\n        {\n            this.text = expression;\n            this.textLen = this.text.Length;\n            this.Token = new QueryToken();\n            this.SetTextPos(0);\n            this.NextToken();\n        }\n\n        public QueryToken NextToken()\n        {\n            while (Char.IsWhiteSpace(this.CurrentChar))\n            {\n                this.NextChar();\n            }\n\n            QueryTokenKind t = QueryTokenKind.Unknown;\n            int tokenPos = this.textPos;\n            switch (this.CurrentChar)\n            {\n                case '(':\n                    this.NextChar();\n                    t = QueryTokenKind.OpenParen;\n                    break;\n                case ')':\n                    this.NextChar();\n                    t = QueryTokenKind.CloseParen;\n                    break;\n                case ',':\n                    this.NextChar();\n                    t = QueryTokenKind.Comma;\n                    break;\n                case '-':\n                    this.NextChar();\n                    t = QueryTokenKind.Minus;\n                    break;\n                case '/':\n                    this.NextChar();\n                    t = QueryTokenKind.Dot;\n                    break;\n                case '\\'':\n                    char quote = this.CurrentChar;\n                    do\n                    {\n                        this.AdvanceToNextOccuranceOf(quote);\n                        if (this.textPos == this.textLen)\n                        {\n                            this.ParseError(\"The specified odata query has unterminated string literal.\", this.textPos);\n                        }\n                        this.NextChar();\n                    }\n                    while (this.CurrentChar == quote);\n                    t = QueryTokenKind.StringLiteral;\n                    break;\n                default:\n                    if (this.IsIdentifierStart(this.CurrentChar) || this.CurrentChar == '@' || this.CurrentChar == '_')\n                    {\n                        do\n                        {\n                            this.NextChar();\n                        }\n                        while (this.IsIdentifierPart(this.CurrentChar) || this.CurrentChar == '_');\n                        t = QueryTokenKind.Identifier;\n                        break;\n                    }\n                    if (Char.IsDigit(this.CurrentChar))\n                    {\n                        t = QueryTokenKind.IntegerLiteral;\n                        do\n                        {\n                            this.NextChar();\n                        }\n                        while (Char.IsDigit(this.CurrentChar));\n                        if (this.CurrentChar == '.')\n                        {\n                            t = QueryTokenKind.RealLiteral;\n                            this.NextChar();\n                            this.ValidateDigit();\n                            do\n                            {\n                                this.NextChar();\n                            }\n                            while (Char.IsDigit(this.CurrentChar));\n                        }\n                        if (this.CurrentChar == 'E' || this.CurrentChar == 'e')\n                        {\n                            t = QueryTokenKind.RealLiteral;\n                            this.NextChar();\n                            if (this.CurrentChar == '+' || this.CurrentChar == '-')\n                            {\n                                this.NextChar();\n                            }\n                            this.ValidateDigit();\n                            do\n                            {\n                                this.NextChar();\n                            }\n                            while (Char.IsDigit(this.CurrentChar));\n                        }\n                        if (this.CurrentChar == 'F' || this.CurrentChar == 'f' || this.CurrentChar == 'M' || this.CurrentChar == 'm' || this.CurrentChar == 'D' || this.CurrentChar == 'd')\n                        {\n                            t = QueryTokenKind.RealLiteral;\n                            this.NextChar();\n                        }\n                        break;\n                    }\n                    if (this.textPos == this.textLen)\n                    {\n                        t = QueryTokenKind.End;\n                        break;\n                    }\n                    this.ParseError(\"The specified odata query has syntax errors.\", this.textPos);\n                    break;\n            }\n            this.Token.Kind = t;\n            this.Token.Text = this.text.Substring(tokenPos, this.textPos - tokenPos);\n            this.Token.Position = tokenPos;\n\n            this.ReClassifyToken();\n\n            return this.Token;\n        }\n\n        private void ValidateDigit()\n        {\n            if (!Char.IsDigit(this.CurrentChar))\n            {\n                this.ParseError(\"Digit expected.\", this.textPos);\n            }\n        }\n\n        private void ReClassifyToken()\n        {\n            if (Token.Kind == QueryTokenKind.Identifier)\n            {\n                if (this.Token.Text == \"or\")\n                {\n                    this.Token.Kind = QueryTokenKind.Or;\n                }\n                else if (this.Token.Text == \"add\")\n                {\n                    this.Token.Kind = QueryTokenKind.Add;\n                }\n                else if (this.Token.Text == \"and\")\n                {\n                    this.Token.Kind = QueryTokenKind.And;\n                }\n                else if (this.Token.Text == \"div\")\n                {\n                    this.Token.Kind = QueryTokenKind.Divide;\n                }\n                else if (this.Token.Text == \"sub\")\n                {\n                    this.Token.Kind = QueryTokenKind.Sub;\n                }\n                else if (this.Token.Text == \"mul\")\n                {\n                    this.Token.Kind = QueryTokenKind.Multiply;\n                }\n                else if (this.Token.Text == \"mod\")\n                {\n                    this.Token.Kind = QueryTokenKind.Modulo;\n                }\n                else if (this.Token.Text == \"ne\")\n                {\n                    this.Token.Kind = QueryTokenKind.NotEqual;\n                }\n                else if (this.Token.Text == \"not\")\n                {\n                    this.Token.Kind = QueryTokenKind.Not;\n                }\n                else if (this.Token.Text == \"le\")\n                {\n                    this.Token.Kind = QueryTokenKind.LessThanEqual;\n                }\n                else if (this.Token.Text == \"lt\")\n                {\n                    this.Token.Kind = QueryTokenKind.LessThan;\n                }\n                else if (this.Token.Text == \"eq\")\n                {\n                    this.Token.Kind = QueryTokenKind.Equal;\n                }\n                else if (this.Token.Text == \"ge\")\n                {\n                    this.Token.Kind = QueryTokenKind.GreaterThanEqual;\n                }\n                else if (this.Token.Text == \"gt\")\n                {\n                    this.Token.Kind = QueryTokenKind.GreaterThan;\n                }\n            }\n        }\n\n        private bool IsIdentifierStart(char ch)\n        {\n            return Char.IsLetter(ch);\n        }\n\n        private bool IsIdentifierPart(char ch)\n        {\n            bool result = this.IsIdentifierStart(ch) || Char.IsDigit(ch) || (ch == '_' || ch == '-');\n            return result;\n        }\n\n        private void AdvanceToNextOccuranceOf(char endingValue)\n        {\n            this.NextChar();\n            while (this.textPos < this.textLen && this.CurrentChar != endingValue)\n            {\n                this.NextChar();\n            }\n        }\n\n        private void NextChar()\n        {\n            if (this.textPos < this.textLen)\n            {\n                this.textPos++;\n            }\n            this.CurrentChar = (this.textPos < this.textLen) ? this.text[this.textPos] : '\\0';\n        }\n\n        private void SetTextPos(int pos)\n        {\n            this.textPos = pos;\n            this.CurrentChar = (this.textPos < this.textLen) ? this.text[this.textPos] : '\\0';\n        }\n\n        private void ParseError(string message, int errorPos)\n        {\n            throw new MobileServiceODataException(message, errorPos);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/ODataExpressionParser.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    internal class ODataExpressionParser\n    {\n        private ODataExpressionLexer lexer;\n        private static Dictionary<string, QueryNode> keywords;\n\n        static ODataExpressionParser()\n        {\n            keywords = new Dictionary<string, QueryNode>()\n            {\n                { \"true\", new ConstantNode(true) },\n                { \"false\", new ConstantNode(false) },\n                { \"null\", new ConstantNode(null) },\n                { \"datetime\", null }, // type constructed dynamically,\n                { \"datetimeoffset\", null }, // type constructed dynamically\n                { \"guid\", null } // type constructed dynamically\n                 \n            };\n        }\n\n        private ODataExpressionParser(string expression)\n        {\n            this.lexer = new ODataExpressionLexer(expression);\n        }\n\n        public QueryNode ParseFilter()\n        {\n            QueryNode expr = this.ParseExpression();\n\n            this.ValidateToken(QueryTokenKind.End, () => \"The specified odata query has syntax errors.\");\n\n            return expr;\n        }\n\n        public IList<OrderByNode> ParseOrderBy()\n        {\n            var orderings = new List<OrderByNode>();\n            while (true)\n            {\n                QueryNode expr = this.ParseExpression();\n                OrderByDirection direction = OrderByDirection.Ascending;\n                if (this.TokenIdentifierIs(\"asc\"))\n                {\n                    this.lexer.NextToken();\n                }\n                else if (this.TokenIdentifierIs(\"desc\"))\n                {\n                    this.lexer.NextToken();\n                    direction = OrderByDirection.Descending;\n                }\n                orderings.Add(new OrderByNode(expr, direction));\n                if (this.lexer.Token.Kind != QueryTokenKind.Comma)\n                {\n                    break;\n                }\n                this.lexer.NextToken();\n            }\n            this.ValidateToken(QueryTokenKind.End, () => \"The specified odata query has syntax errors.\");\n            return orderings;\n        }\n\n        private QueryNode ParseExpression()\n        {\n            return this.ParseLogicalOr();\n        }\n\n        private QueryNode ParseLogicalOr()\n        {\n            QueryNode left = this.ParseLogicalAnd();\n            while (this.lexer.Token.Kind == QueryTokenKind.Or)\n            {\n                this.lexer.NextToken();\n                QueryNode right = this.ParseLogicalAnd();\n                left = new BinaryOperatorNode(BinaryOperatorKind.Or, left, right);\n            }\n            return left;\n        }\n\n        private QueryNode ParseLogicalAnd()\n        {\n            QueryNode left = this.ParseComparison();\n            while (this.lexer.Token.Kind == QueryTokenKind.And)\n            {\n                this.lexer.NextToken();\n                QueryNode right = this.ParseComparison();\n                left = new BinaryOperatorNode(BinaryOperatorKind.And, left, right);\n            }\n            return left;\n        }\n\n        private QueryNode ParseComparison()\n        {\n            QueryNode left = this.ParseAdditive();\n\n            while (this.lexer.Token.Kind == QueryTokenKind.Equal ||\n                   this.lexer.Token.Kind == QueryTokenKind.NotEqual ||\n                   this.lexer.Token.Kind == QueryTokenKind.GreaterThan ||\n                   this.lexer.Token.Kind == QueryTokenKind.GreaterThanEqual ||\n                   this.lexer.Token.Kind == QueryTokenKind.LessThan ||\n                   this.lexer.Token.Kind == QueryTokenKind.LessThanEqual)\n            {\n\n                QueryTokenKind opKind = this.lexer.Token.Kind;\n                this.lexer.NextToken();\n                QueryNode right = this.ParseAdditive();\n\n                switch (opKind)\n                {\n                    case QueryTokenKind.Equal:\n                        left = new BinaryOperatorNode(BinaryOperatorKind.Equal, left, right);\n                        break;\n                    case QueryTokenKind.NotEqual:\n                        left = new BinaryOperatorNode(BinaryOperatorKind.NotEqual, left, right);\n                        break;\n                    case QueryTokenKind.GreaterThan:\n                        left = new BinaryOperatorNode(BinaryOperatorKind.GreaterThan, left, right);\n                        break;\n                    case QueryTokenKind.GreaterThanEqual:\n                        left = new BinaryOperatorNode(BinaryOperatorKind.GreaterThanOrEqual, left, right);\n                        break;\n                    case QueryTokenKind.LessThan:\n                        left = new BinaryOperatorNode(BinaryOperatorKind.LessThan, left, right);\n                        break;\n                    case QueryTokenKind.LessThanEqual:\n                        left = new BinaryOperatorNode(BinaryOperatorKind.LessThanOrEqual, left, right);\n                        break;\n                }\n            }\n            return left;\n        }\n\n        private QueryNode ParseAdditive()\n        {\n            QueryNode left = this.ParseMultiplicative();\n\n            while (this.lexer.Token.Kind == QueryTokenKind.Add || this.lexer.Token.Kind == QueryTokenKind.Sub)\n            {\n                QueryTokenKind opKind = this.lexer.Token.Kind;\n                this.lexer.NextToken();\n                QueryNode right = this.ParseMultiplicative();\n                switch (opKind)\n                {\n                    case QueryTokenKind.Add:\n                        left = new BinaryOperatorNode(BinaryOperatorKind.And, left, right);\n                        break;\n                    case QueryTokenKind.Sub:\n                        left = new BinaryOperatorNode(BinaryOperatorKind.Subtract, left, right);\n                        break;\n                }\n            }\n            return left;\n        }\n\n        private QueryNode ParseMultiplicative()\n        {\n            QueryNode left = this.ParseUnary();\n\n            while (this.lexer.Token.Kind == QueryTokenKind.Multiply ||\n                   this.lexer.Token.Kind == QueryTokenKind.Divide ||\n                   this.lexer.Token.Kind == QueryTokenKind.Modulo)\n            {\n                QueryTokenKind opKind = this.lexer.Token.Kind;\n                this.lexer.NextToken();\n                var right = this.ParseUnary();\n                switch (opKind)\n                {\n                    case QueryTokenKind.Multiply:\n                        left = new BinaryOperatorNode(BinaryOperatorKind.Multiply, left, right);\n                        break;\n                    case QueryTokenKind.Divide:\n                        left = new BinaryOperatorNode(BinaryOperatorKind.Divide, left, right);\n                        break;\n                    case QueryTokenKind.Modulo:\n                        left = new BinaryOperatorNode(BinaryOperatorKind.Modulo, left, right);\n                        break;\n                }\n            }\n            return left;\n        }\n\n        private QueryNode ParseUnary()\n        {\n            if (this.lexer.Token.Kind == QueryTokenKind.Minus ||\n                this.lexer.Token.Kind == QueryTokenKind.Not)\n            {\n                QueryTokenKind opKind = this.lexer.Token.Kind;\n                int opPos = this.lexer.Token.Position;\n                this.lexer.NextToken();\n                if (opKind == QueryTokenKind.Minus &&\n                    (this.lexer.Token.Kind == QueryTokenKind.IntegerLiteral ||\n                    this.lexer.Token.Kind == QueryTokenKind.RealLiteral))\n                {\n                    this.lexer.Token.Text = \"-\" + this.lexer.Token.Text;\n                    this.lexer.Token.Position = opPos;\n                    return this.ParsePrimary();\n                }\n                QueryNode expr = this.ParseUnary();\n                if (opKind == QueryTokenKind.Minus)\n                {\n                    expr = new UnaryOperatorNode(UnaryOperatorKind.Negate, expr);\n                }\n                else\n                {\n                    expr = new UnaryOperatorNode(UnaryOperatorKind.Not, expr);\n                }\n                return expr;\n            }\n            return this.ParsePrimary();\n        }\n\n        private QueryNode ParsePrimary()\n        {\n            QueryNode expr = this.ParsePrimaryStart();\n            while (true)\n            {\n                if (this.lexer.Token.Kind == QueryTokenKind.Dot)\n                {\n                    this.lexer.NextToken();\n                    expr = this.ParseMemberAccess(expr);\n                }\n                else\n                {\n                    break;\n                }\n            }\n            return expr;\n        }\n\n        private QueryNode ParseMemberAccess(QueryNode instance)\n        {\n            var errorPos = this.lexer.Token.Position;\n            string id = this.GetIdentifier();\n            this.lexer.NextToken();\n            if (this.lexer.Token.Kind == QueryTokenKind.OpenParen)\n            {\n                return this.ParseFunction(id, errorPos);\n            }\n            else\n            {\n                return new MemberAccessNode(instance, id);\n            }\n        }\n\n        private QueryNode ParseFunction(string functionName, int errorPos)\n        {\n\n            IList<QueryNode> args = null;\n\n            if (this.lexer.Token.Kind == QueryTokenKind.OpenParen)\n            {\n                args = this.ParseArgumentList();\n\n                this.ValidateFunction(functionName, args, errorPos);\n            }\n            else\n            {\n                // if it is a function it should begin with a '('\n                this.ParseError(\"'(' expected.\".FormatInvariant(errorPos), errorPos);\n            }\n\n            return new FunctionCallNode(functionName, args);\n        }\n\n        private void ValidateFunction(string functionName, IList<QueryNode> functionArgs, int errorPos)\n        {\n            // validate parameters\n            switch (functionName)\n            {\n                case \"day\":\n                case \"month\":\n                case \"year\":\n                case \"hour\":\n                case \"minute\":\n                case \"second\":\n                case \"floor\":\n                case \"ceiling\":\n                case \"round\":\n                case \"tolower\":\n                case \"toupper\":\n                case \"length\":\n                case \"trim\":\n                    this.ValidateFunctionParameters(functionName, functionArgs, 1);\n                    break;\n                case \"substringof\":\n                case \"startswith\":\n                case \"endswith\":\n                case \"concat\":\n                case \"indexof\":\n                    this.ValidateFunctionParameters(functionName, functionArgs, 2);\n                    break;\n                case \"replace\":\n                    this.ValidateFunctionParameters(functionName, functionArgs, 3);\n                    break;\n                case \"substring\":\n                    if (functionArgs.Count != 2 && functionArgs.Count != 3)\n                    {\n                        this.ParseError(\"Function 'substring' requires 2 or 3 parameters.\", errorPos);\n                    }\n                    break;\n            }\n        }\n\n        private void ValidateFunctionParameters(string functionName, IList<QueryNode> args, int expectedArgCount)\n        {\n            if (args.Count != expectedArgCount)\n            {\n                var error = \"Function '{0}' requires {1} parameter(s).\".FormatInvariant(functionName, expectedArgCount);\n                throw new MobileServiceODataException(error, this.lexer.Token.Position);\n            }\n        }\n\n        private IList<QueryNode> ParseArgumentList()\n        {\n            this.ValidateToken(QueryTokenKind.OpenParen, () => \"'(' expected.\");\n            this.lexer.NextToken();\n\n            IList<QueryNode> args = this.lexer.Token.Kind != QueryTokenKind.CloseParen ? this.ParseArguments() : new List<QueryNode>();\n\n            this.ValidateToken(QueryTokenKind.CloseParen, () => \"')' or ',' expected.\");\n            this.lexer.NextToken();\n            return args;\n        }\n\n        private IList<QueryNode> ParseArguments()\n        {\n            var args = new List<QueryNode>();\n            while (true)\n            {\n                args.Add(this.ParseExpression());\n                if (this.lexer.Token.Kind != QueryTokenKind.Comma)\n                {\n                    break;\n                }\n                this.lexer.NextToken();\n            }\n            return args;\n        }\n\n        private string GetIdentifier()\n        {\n            this.ValidateToken(QueryTokenKind.Identifier, () => \"Expected identifier.\");\n            return this.lexer.Token.Text;\n        }\n\n        private QueryNode ParsePrimaryStart()\n        {\n            switch (this.lexer.Token.Kind)\n            {\n                case QueryTokenKind.Identifier:\n                    return this.ParseIdentifier();\n                case QueryTokenKind.StringLiteral:\n                    return this.ParseStringLiteral();\n                case QueryTokenKind.IntegerLiteral:\n                    return this.ParseIntegerLiteral();\n                case QueryTokenKind.RealLiteral:\n                    return this.ParseRealLiteral();\n                case QueryTokenKind.OpenParen:\n                    return this.ParseParenExpression();\n                default:\n                    this.ParseError(\"Expression expected.\", this.lexer.Token.Position);\n                    return null;\n            }\n        }\n\n        private QueryNode ParseIntegerLiteral()\n        {\n            this.ValidateToken(QueryTokenKind.IntegerLiteral, () => \"Expected integer literal.\");\n            var text = this.lexer.Token.Text;\n\n            long value;\n            if (!Int64.TryParse(text, out value))\n            {\n                this.ParseError(\"The specified odata query has invalid real literal '{0}'.\".FormatInvariant(text), this.lexer.Token.Position);\n            }\n            this.lexer.NextToken();\n            if (this.lexer.Token.Text.ToUpper() == \"L\")\n            {\n                // to parse the OData 'L/l' correctly\n                this.lexer.NextToken();\n                return new ConstantNode(value);\n            }\n            return new ConstantNode(value);\n        }\n\n        private QueryNode ParseRealLiteral()\n        {\n            this.ValidateToken(QueryTokenKind.RealLiteral, () => \"Expected real literal.\");\n            string text = this.lexer.Token.Text;\n\n            char last = Char.ToUpper(text[text.Length - 1]);\n            if (last == 'F' || last == 'M' || last == 'D')\n            {\n                // so terminating F/f, M/m, D/d have no effect.\n                text = text.Substring(0, text.Length - 1);\n            }\n\n            object value = null;\n            switch (last)\n            {\n                case 'M':\n                    decimal mVal;\n                    if (Decimal.TryParse(text, out mVal))\n                    {\n                        value = mVal;\n                    }\n                    break;\n                case 'F':\n                    float fVal;\n                    if (Single.TryParse(text, out fVal))\n                    {\n                        value = fVal;\n                    }\n                    break;\n                case 'D':\n                default:\n                    double dVal;\n                    if (Double.TryParse(text, out dVal))\n                    {\n                        value = dVal;\n                    }\n                    break;\n            }\n            if (value == null)\n            {\n                this.ParseError(\"The specified odata query has invalid real literal '{0}'.\".FormatInvariant(text), this.lexer.Token.Position);\n            }\n\n            this.lexer.NextToken();\n            return new ConstantNode(value);\n        }\n\n        private QueryNode ParseParenExpression()\n        {\n            this.ValidateToken(QueryTokenKind.OpenParen, () => \"'(' expected.\");\n            this.lexer.NextToken();\n            QueryNode e = this.ParseExpression();\n            this.ValidateToken(QueryTokenKind.CloseParen, () => \"')' or operator expected\");\n            this.lexer.NextToken();\n            return e;\n        }\n\n        private QueryNode ParseIdentifier()\n        {\n            this.ValidateToken(QueryTokenKind.Identifier, () => \"Expected identifier.\");\n\n            QueryNode value;\n            if (keywords.TryGetValue(this.lexer.Token.Text, out value))\n            {\n                // type construction has the format of type'value' e.g. datetime'2001-04-01T00:00:00Z'\n                // therefore if the next character is a single quote then we try to \n                // interpret this as type construction else its a normal member access\n                if (value == null && this.lexer.CurrentChar == '\\'')\n                {\n                    return this.ParseTypeConstruction();\n                }\n                else if (value != null) // this is a constant\n                {\n                    this.lexer.NextToken();\n                    return value;\n                }\n            }\n\n            return this.ParseMemberAccess(null);\n        }\n\n        private ConstantNode ParseTypeConstruction()\n        {\n            var typeIdentifier = this.lexer.Token.Text;\n            var errorPos = this.lexer.Token.Position;\n            this.lexer.NextToken();\n            ConstantNode typeExpression = null;\n\n            if (this.lexer.Token.Kind == QueryTokenKind.StringLiteral)\n            {\n                errorPos = this.lexer.Token.Position;\n                ConstantNode stringExpr = this.ParseStringLiteral();\n                string literalValue = stringExpr.Value.ToString();\n\n                try\n                {\n                    if (typeIdentifier == \"datetime\")\n                    {\n                        var date = DateTime.Parse(literalValue);\n                        typeExpression = new ConstantNode(date);\n                    }\n                    else if (typeIdentifier == \"datetimeoffset\")\n                    {\n                        var date = DateTimeOffset.Parse(literalValue);\n                        typeExpression = new ConstantNode(date);\n                    }\n                    else if (typeIdentifier == \"guid\")\n                    {\n                        var guid = Guid.Parse(literalValue);\n                        typeExpression = new ConstantNode(guid);\n                    }\n                }\n                catch (Exception ex)\n                {\n                    this.ParseError(ex.Message, errorPos);\n                }\n            }\n\n            if (typeExpression == null)\n            {\n                this.ParseError(\"The specified odata query has invalid '{0}' type creation expression.\".FormatInvariant(typeIdentifier), errorPos);\n            }\n\n            return typeExpression;\n        }\n\n        private ConstantNode ParseStringLiteral()\n        {\n            this.ValidateToken(QueryTokenKind.StringLiteral, () => \"Expected string literal.\");\n\n            char quote = this.lexer.Token.Text[0];\n            // Unwrap string (remove surrounding quotes) \n            string value = this.lexer.Token.Text.Substring(1, this.lexer.Token.Text.Length - 2);\n            // unwrap escaped quotes.\n            value = value.Replace(\"''\", \"'\");\n\n            this.lexer.NextToken();\n            return new ConstantNode(value);\n        }\n\n        public static QueryNode ParseFilter(string filter)\n        {\n            var parser = new ODataExpressionParser(filter);\n            return parser.ParseFilter();\n        }\n\n        public static IList<OrderByNode> ParseOrderBy(string orderBy)\n        {\n            var parser = new ODataExpressionParser(orderBy);\n            return parser.ParseOrderBy();\n        }\n\n        private void ParseError(string message, int errorPos)\n        {\n            throw new MobileServiceODataException(message, errorPos);\n        }\n\n        private bool TokenIdentifierIs(string id)\n        {\n            return this.lexer.Token.Kind == QueryTokenKind.Identifier && this.lexer.Token.Text == id;\n        }\n\n        private void ValidateToken(QueryTokenKind tokenKind, Func<string> errorString)\n        {\n            if (this.lexer.Token.Kind != tokenKind)\n            {\n                this.ParseError(errorString(), this.lexer.Token.Position);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/ODataExpressionVisitor.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Text;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    internal class ODataExpressionVisitor : QueryNodeVisitor<QueryNode>\n    {\n        private static readonly Type typeofInt = typeof(int);\n\n        public StringBuilder Expression { get; private set; }\n\n        public ODataExpressionVisitor()\n        {\n            this.Expression = new StringBuilder();\n        }\n\n        public static string ToODataString(QueryNode filter)\n        {\n            if (filter == null)\n            {\n                return String.Empty;\n            }\n            var visitor = new ODataExpressionVisitor();\n            filter.Accept(visitor);\n            return visitor.Expression.ToString();\n        }\n\n        public override QueryNode Visit(BinaryOperatorNode nodeIn)\n        {\n            this.Expression.Append(\"(\");\n\n            nodeIn.LeftOperand.Accept(this);\n\n            string odataOperator;\n            switch (nodeIn.OperatorKind)\n            {\n                case BinaryOperatorKind.Or:\n                    odataOperator = \" or \";\n                    break;\n                case BinaryOperatorKind.And:\n                    odataOperator = \" and \";\n                    break;\n                case BinaryOperatorKind.Equal:\n                    odataOperator = \" eq \";\n                    break;\n                case BinaryOperatorKind.NotEqual:\n                    odataOperator = \" ne \";\n                    break;\n                case BinaryOperatorKind.GreaterThan:\n                    odataOperator = \" gt \";\n                    break;\n                case BinaryOperatorKind.GreaterThanOrEqual:\n                    odataOperator = \" ge \";\n                    break;\n                case BinaryOperatorKind.LessThan:\n                    odataOperator = \" lt \";\n                    break;\n                case BinaryOperatorKind.LessThanOrEqual:\n                    odataOperator = \" le \";\n                    break;\n                case BinaryOperatorKind.Add:\n                    odataOperator = \" add \";\n                    break;\n                case BinaryOperatorKind.Subtract:\n                    odataOperator = \" sub \";\n                    break;\n                case BinaryOperatorKind.Multiply:\n                    odataOperator = \" mul \";\n                    break;\n                case BinaryOperatorKind.Divide:\n                    odataOperator = \" div \";\n                    break;\n                case BinaryOperatorKind.Modulo:\n                    odataOperator = \" mod \";\n                    break;\n                default:\n                    throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture,\n                                                                  \"'{0}' is not supported in a 'Where' Mobile Services query expression.\",\n                                                                  nodeIn.OperatorKind));\n            }\n\n            this.Expression.Append(odataOperator);\n\n            nodeIn.RightOperand.Accept(this);\n\n            this.Expression.Append(\")\");\n\n            return nodeIn;\n        }\n\n        public override QueryNode Visit(FunctionCallNode nodeIn)\n        {\n            this.Expression.Append(nodeIn.Name);\n            this.Expression.Append(\"(\");\n\n            string separator = null;\n\n            foreach (QueryNode arg in nodeIn.Arguments)\n            {\n                this.Expression.Append(separator);\n                arg.Accept(this);\n                separator = \",\";\n            }\n\n            this.Expression.Append(\")\");\n\n            return nodeIn;\n        }\n\n        public override QueryNode Visit(MemberAccessNode nodeIn)\n        {\n            this.Expression.Append(nodeIn.MemberName);\n\n            return nodeIn;\n        }\n\n        public override QueryNode Visit(UnaryOperatorNode nodeIn)\n        {\n            Debug.Assert(nodeIn.OperatorKind == UnaryOperatorKind.Not);\n\n            this.Expression.Append(\"not(\");\n\n            nodeIn.Operand.Accept(this);\n\n            this.Expression.Append(\")\");\n\n            return nodeIn;\n        }\n\n        public override QueryNode Visit(ConstantNode nodeIn)\n        {\n            string value = ToODataConstant(nodeIn.Value);\n            this.Expression.Append(value);\n\n            return nodeIn;\n        }\n\n        /// <summary>\n        /// Convert a value into an OData literal.\n        /// </summary>\n        /// <param name=\"value\">\n        /// The value to convert into an OData literal.\n        /// </param>\n        /// <returns>\n        /// The corresponding OData literal.\n        /// </returns>\n        public static string ToODataConstant(object value)\n        {\n            if (value == null)\n            {\n                return \"null\";\n            }\n\n            // Special case a few primitive types\n            RuntimeTypeHandle handle = value.GetType().TypeHandle;\n            if (handle.Equals(typeof(bool).TypeHandle))\n            {\n                // Make sure booleans are lower case\n                return ((bool)value).ToString().ToLower();\n            }\n            else if (handle.Equals(typeof(byte).TypeHandle))\n            {\n                // Format bytes as hex pairs\n                return ((byte)value).ToString(\"X2\", CultureInfo.InvariantCulture);\n            }\n            // unsigned int doesn't fit an int so send as long\n            else if (handle.Equals(typeof(long).TypeHandle) || handle.Equals(typeof(ulong).TypeHandle)\n                 || handle.Equals(typeof(uint).TypeHandle))\n            {\n                return string.Format(CultureInfo.InvariantCulture, \"{0}L\", value);\n            }\n            else if (handle.Equals(typeof(float).TypeHandle))\n            {\n                return string.Format(CultureInfo.InvariantCulture, \"{0}f\", value);\n            }\n            else if (handle.Equals(typeof(Decimal).TypeHandle))\n            {\n                return string.Format(CultureInfo.InvariantCulture, \"{0}M\", value);\n            }\n            else if (handle.Equals(typeofInt.TypeHandle) || handle.Equals(typeof(short).TypeHandle)\n                || handle.Equals(typeof(ushort).TypeHandle) || handle.Equals(typeof(sbyte).TypeHandle))\n            {\n                return string.Format(CultureInfo.InvariantCulture, \"{0}\", value);\n            }\n            else if (handle.Equals(typeof(double).TypeHandle))\n            {\n                string temp = string.Format(CultureInfo.InvariantCulture, \"{0}\", value);\n                if (temp.Contains(\"E\") || temp.Contains(\".\"))\n                {\n                    return temp;\n                }\n                return temp + \".0\";\n            }\n            else if (handle.Equals(typeof(char).TypeHandle))\n            {\n                // Escape the char constant by: (1) replacing a single quote with a \n                // pair of single quotes, and (2) Uri escaping with percent encoding\n                char ch = (char)value;\n                string charEscaped = Uri.EscapeDataString(ch == '\\'' ? \"''\" : ch.ToString());\n                return string.Format(CultureInfo.InvariantCulture, \"'{0}'\", charEscaped);\n            }\n            else if (handle.Equals(typeof(DateTime).TypeHandle))\n            {\n                // Format dates in the official OData format\n                return string.Format(\n                    CultureInfo.InvariantCulture,\n                    \"datetime'{0}'\",\n                    Uri.EscapeDataString(\n                        ToRoundtripDateString(((DateTime)value)))\n                    );\n            }\n            else if (handle.Equals(typeof(DateTimeOffset).TypeHandle))\n            {\n                return string.Format(\n                    CultureInfo.InvariantCulture,\n                    \"datetimeoffset'{0}'\",\n                    Uri.EscapeDataString(\n                        ((DateTimeOffset)value).ToString(\"o\")\n                    ));\n            }\n            else if (handle.Equals(typeof(Guid).TypeHandle))\n            {\n                // GUIDs are in registry format without the { }s\n                Guid guid = (Guid)value;\n                return string.Format(\n                    CultureInfo.InvariantCulture,\n                    \"guid'{0}'\",\n                    guid.ToString().TrimStart('{').TrimEnd('}'));\n            }\n            else\n            {\n                // Escape the string constant by: (1) replacing single quotes with a \n                // pair of single quotes, and (2) Uri escaping with percent encoding\n                string text = value.ToString();\n                string textEscaped = Uri.EscapeDataString(text.Replace(\"'\", \"''\"));\n                return string.Format(CultureInfo.InvariantCulture, \"'{0}'\", textEscaped);\n            }\n        }\n\n        /// <summary>\n        /// Convert a date to the ISO 8601 roundtrip format supported by the\n        /// server.\n        /// </summary>\n        /// <param name=\"date\">\n        /// The date to convert.\n        /// </param>\n        /// <returns>\n        /// The date in UTC as a string. \n        /// </returns>\n        private static string ToRoundtripDateString(DateTime date)\n        {\n            return date.ToUniversalTime().ToString(\n                \"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK\",\n                CultureInfo.InvariantCulture);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/OrderByDirection.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Enumeration of order by directions.\n    /// </summary>\n    public enum OrderByDirection\n    {\n        /// <summary>\n        /// Ascending order.\n        /// </summary>\n        Ascending,\n        /// <summary>\n        /// Descending order.\n        /// </summary>\n        Descending\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/OrderByNode.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Represents the result of parsing the $orderby query option.\n    /// </summary>\n    public class OrderByNode\n    {\n        /// <summary>\n        /// Gets the order-by expression.\n        /// </summary>\n        public QueryNode Expression { get; private set; }\n\n        /// <summary>\n        /// Gets the direction to order.\n        /// </summary>\n        public OrderByDirection Direction { get; private set; }\n\n        /// <summary>\n        /// Initializes an instance of <see cref=\"OrderByNode\"/>\n        /// </summary>\n        /// <param name=\"expression\">The order-by expression.</param>\n        /// <param name=\"direction\">The direction to order.</param>\n        public OrderByNode(QueryNode expression, OrderByDirection direction)\n        {\n            this.Expression = expression;\n            this.Direction = direction;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/QueryNode.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Base class for all query nodes.\n    /// </summary>\n    public abstract class QueryNode\n    {\n        /// <summary>\n        /// Gets the kind of the query node.\n        /// </summary>\n        public abstract QueryNodeKind Kind { get; }\n\n        internal virtual void SetChildren(IList<QueryNode> children)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        /// Accept a QueryNodeVisitor that\n        /// walks a tree of QueryNode\n        /// </summary>\n        /// <typeparam name=\"T\">Type that the visitor will return after visiting this token.</typeparam>\n        /// <param name=\"visitor\">An implementation of the visitor interface.</param>\n        /// <returns>An object whose type is determined by the type parameter of the visitor.</returns>\n        public virtual T Accept<T>(QueryNodeVisitor<T> visitor)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/QueryNodeKind.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Enumeration of kinds of query nodes.\n    /// </summary>\n    public enum QueryNodeKind\n    {\n        /// <summary>\n        /// A constant value.\n        /// </summary>\n        Constant = 0,\n        /// <summary>\n        /// Node used to represent a unary operator.\n        /// </summary>\n        UnaryOperator = 1,\n        /// <summary>\n        /// Node used to represent a binary operator.\n        /// </summary>\n        BinaryOperator = 2,\n        /// <summary>\n        /// Node the represents a function call.\n        /// </summary>\n        FunctionCall = 3,\n        /// <summary>\n        /// Node describing access to a member.\n        /// </summary>\n        MemberAccess = 4,\n        /// <summary>\n        /// A node that represents conversion from one type to another.\n        /// </summary>\n        Convert = 5\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/QueryNodeVisitor.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Visitor interface for walking the QueryNode Tree.\n    /// </summary>\n    /// <typeparam name=\"T\">Generic type produced by the visitor.</typeparam>\n    public abstract class QueryNodeVisitor<T>\n    {\n        /// <summary>\n        /// Visit a BinaryOperatorNode\n        /// </summary>\n        /// <param name=\"nodeIn\">the node to visit</param>\n        /// <returns>Defined by the implementer</returns>\n        public virtual T Visit(BinaryOperatorNode nodeIn)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        /// Visit a ConstantNode\n        /// </summary>\n        /// <param name=\"nodeIn\">the node to visit</param>\n        /// <returns>Defined by the implementer</returns>\n        public virtual T Visit(ConstantNode nodeIn)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        /// Visit a MemberAccessNode\n        /// </summary>\n        /// <param name=\"nodeIn\">the node to visit</param>\n        /// <returns>Defined by the implementer</returns>\n        public virtual T Visit(MemberAccessNode nodeIn)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        /// Visit an ODataMethodCallNode\n        /// </summary>\n        /// <param name=\"nodeIn\">the node to visit</param>\n        /// <returns>Defined by the implementer</returns>\n        public virtual T Visit(FunctionCallNode nodeIn)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        /// Visit a UnaryOperatorNode\n        /// </summary>\n        /// <param name=\"nodeIn\">the node to visit</param>\n        /// <returns>Defined by the implementer</returns>\n        public virtual T Visit(UnaryOperatorNode nodeIn)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        /// Visit a ConvertNode\n        /// </summary>\n        /// <param name=\"nodeIn\">the node to visit</param>\n        /// <returns>Defined by the implementer</returns>\n        public virtual T Visit(ConvertNode nodeIn)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/QueryToken.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    internal class QueryToken\n    {\n        public int Position { get; set; }\n        public string Text { get; set; }\n        public QueryTokenKind Kind { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/QueryTokenKind.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    internal enum QueryTokenKind\n    {\n        Unknown,\n        End,\n        Identifier,\n        StringLiteral,\n        IntegerLiteral,\n        RealLiteral,\n        Not,\n        Modulo,\n        OpenParen,\n        CloseParen,\n        Multiply,\n        Add,\n        Sub,\n        Comma,\n        Minus,\n        Dot,\n        Divide,\n        LessThan,\n        Equal,\n        GreaterThan,\n        NotEqual,\n        And,\n        LessThanEqual,\n        GreaterThanEqual,\n        Or\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/UnaryOperatorKind.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Enumeration of unary operators.\n    /// </summary>\n    public enum UnaryOperatorKind\n    {\n        /// <summary>\n        /// The unary - operator.\n        /// </summary>\n        Negate,\n        /// <summary>\n        /// The not operator.\n        /// </summary>\n        Not\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/OData/UnaryOperatorNode.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Node representing a unary operator.\n    /// </summary>\n    public sealed class UnaryOperatorNode: QueryNode\n    {\n        /// <summary>\n        /// Gets the operator represented by this node.\n        /// </summary>\n        public override QueryNodeKind Kind\n        {\n            get { return QueryNodeKind.UnaryOperator; }\n        }\n\n        /// <summary>\n        /// The operand of the unary operator.\n        /// </summary>\n        public QueryNode Operand { get; private set; }\n\n        /// <summary>\n        /// The operator represented by this node.\n        /// </summary>\n        public UnaryOperatorKind OperatorKind { get; private set; }\n\n        internal override void SetChildren(IList<QueryNode> children)\n        {\n            Debug.Assert(children.Count >= 1);\n            this.Operand = children[0];\n        }\n\n        /// <summary>\n        /// Initializes an instance of <see cref=\"UnaryOperatorNode\"/>\n        /// </summary>\n        /// <param name=\"kind\"></param>\n        /// <param name=\"operand\"></param>\n        public UnaryOperatorNode(UnaryOperatorKind kind, QueryNode operand)\n        {\n            this.OperatorKind = kind;\n            this.Operand = operand;\n        }\n\n        /// <summary>\n        /// Accept a <see cref=\"QueryNodeVisitor{T}\" /> to walk a tree of <see cref=\"QueryNode\" />s.\n        /// </summary>\n        /// <typeparam name=\"T\">Type that the visitor will return after visiting this token.</typeparam>\n        /// <param name=\"visitor\">An implementation of the visitor interface.</param>\n        /// <returns>An object whose type is determined by the type parameter of the visitor.</returns>\n        public override T Accept<T>(QueryNodeVisitor<T> visitor)\n        {            \n            return visitor.Visit(this);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/ODataOptions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    internal static class ODataOptions\n    {\n        public const string Filter = \"$filter\";\n        public const string OrderBy = \"$orderby\";\n        public const string Skip = \"$skip\";\n        public const string Top = \"$top\";\n        public const string Select = \"$select\";\n        public const string InlineCount = \"$inlinecount\";\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/QueryResult.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.Globalization;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Query\n{\n    /// <summary>\n    /// Represents the result of odata query returned from Mobile Service\n    /// </summary>\n    internal class QueryResult\n    {\n        /// <summary>\n        /// The name of the results key in an inline count response object.\n        /// </summary>\n        private const string InlineCountResultsKey = \"results\";\n\n        /// <summary>\n        /// The name of the count key in an inline count response object.\n        /// </summary>\n        private const string InlineCountCountKey = \"count\";\n\n        /// <summary>\n        /// The name of the next link in a response object.\n        /// </summary>\n        private const string NextLinkKey = \"nextLink\";\n\n        /// <summary>\n        /// The name of the relation for next page link\n        /// </summary>\n        private const string NextRelation = \"next\";\n\n        /// <summary>\n        /// Count of total rows that match the query without skip and top\n        /// </summary>\n        public long TotalCount { get; private set; }\n\n        /// <summary>\n        /// Items in query result \n        /// </summary>\n        public JArray Values { get; private set; }\n\n        /// <summary>\n        /// Gets the link to next page of result that is returned in response headers.\n        /// </summary>\n        public Uri NextLink { get; private set; }\n\n        /// <summary>\n        /// The deserialized response\n        /// </summary>\n        public JToken Response { get; private set; }\n\n        /// <summary>\n        /// Parse a JSON response into <see cref=\"QueryResult\"/> object \n        /// that contains sequence of elements and the count of objects.  \n        /// This method abstracts out the differences between a raw array response and \n        /// an inline count response.\n        /// </summary>\n        /// <param name=\"httpResponse\">\n        /// The HTTP response\n        /// </param>\n        /// <param name=\"serializerSettings\">\n        /// The serialization settings\n        /// </param>\n        /// <param name=\"validate\">\n        /// To throw if the content is null or empty\n        /// </param>\n        public static QueryResult Parse(MobileServiceHttpResponse httpResponse, JsonSerializerSettings serializerSettings, bool validate)\n        {\n            Debug.Assert(httpResponse != null);\n\n            JToken response = httpResponse.Content.ParseToJToken(serializerSettings);\n\n            Uri link = httpResponse.Link != null && httpResponse.Link.Relation == NextRelation ? httpResponse.Link.Uri : null;\n            return Parse(response, link, validate);\n        }\n\n        public static QueryResult Parse(JToken response, Uri nextLink, bool validate)\n        {\n            var result = new QueryResult() { Response = response };\n\n            long? inlineCount = null;\n\n            // Try and get the values as an array\n            result.Values = response as JArray;\n            if (result.Values == null && response is JObject)\n            {\n                // Otherwise try and get the values from the results property\n                // (which is the case when we retrieve the count inline)\n                result.Values = response[InlineCountResultsKey] as JArray;\n                inlineCount = response.Value<long?>(InlineCountCountKey);\n                if (result.Values == null && validate)\n                {\n                    string responseStr = response != null ? response.ToString() : \"null\";\n                    throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture,\n                                                                      \"Could not get an array from response {0}.\",\n                                                                      responseStr));\n                }\n                else if (result.Values == null)\n                {\n                    result.Values = new JArray(response);\n                }\n            }\n\n            // Get the count via the inline count or default an unspecified count to -1\n            result.TotalCount = inlineCount.GetValueOrDefault(-1L);\n\n            result.NextLink = nextLink;\n\n            return result;\n        }\n\n        public JObject ToJObject()\n        {\n            var result = new JObject()\n            {\n                { InlineCountCountKey, this.TotalCount },\n                { InlineCountResultsKey, this.Values },                \n            };\n\n            if (this.NextLink != null)\n            {\n                result[NextLinkKey] = this.NextLink.ToString();\n            }\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/QueryResultEnumerable.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// The QueryResultEnumerable{T} class provides next link, records returned by a query\n    /// and the total count for all the records that would have been\n    /// returned ignoring any take paging/limit clause specified by client or\n    /// server.\n    /// </summary>\n    /// <typeparam name=\"T\">\n    /// The type of the elements in the sequence.\n    /// </typeparam>\n#pragma warning disable 618 // for implementing obsolete ITotalCountProvider\n    internal class QueryResultEnumerable<T> : ITotalCountProvider, IQueryResultEnumerable<T>\n    {\n        /// <summary>\n        /// The actual sequence of elements to enumerate.\n        /// </summary>\n        private IEnumerable<T> sequence;\n\n        /// <summary>\n        /// Initializes a new instance of the QueryResultEnumerable{T} class.\n        /// </summary>\n        /// <param name=\"totalCount\">\n        /// The total count for all of the records in the sequence that would\n        /// have been returned ignoring any take paging/limit clause specified\n        /// by client or server.\n        /// </param>\n        /// <param name=\"link\">\n        /// The link to next page of result\n        /// </param>\n        /// <param name=\"sequence\">\n        /// The sequence whose elements comprise the sequence.\n        /// </param>\n        public QueryResultEnumerable(long totalCount, Uri link, IEnumerable<T> sequence)\n        {\n            this.sequence = sequence ?? new T[0];\n            this.TotalCount = totalCount;\n            this.NextLink = link == null ? null : link.ToString();\n        }\n\n        /// <summary>\n        /// Gets the link to next page of result that is returned in response headers.\n        /// </summary>\n        public string NextLink { get; private set; }\n\n        /// <summary>\n        /// Gets the total count for all the records that would have been\n        /// returned ignoring any take paging/limit clause specified by client\n        /// or server.\n        /// </summary>\n        public long TotalCount { get; private set; }\n\n        /// <summary>\n        /// Get an enumerator for the elements of the sequence.\n        /// </summary>\n        /// <returns>\n        /// An enumerator for the elements of the sequence.\n        /// </returns>\n        public IEnumerator<T> GetEnumerator()\n        {\n            return this.sequence.GetEnumerator();\n        }\n\n        /// <summary>\n        /// Get an enumerator for the elements of the sequence.\n        /// </summary>\n        /// <returns>\n        /// An enumerator for the elements of the sequence.\n        /// </returns>\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return this.GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Query/QueryResultList.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// The QueryResultList{T} class provides next link, records returned by a query\n    /// and the total count for all the records that would have been returned\n    /// ignoring any take paging/limit clause specified by client or server.\n    /// </summary>\n    /// <typeparam name=\"T\">\n    /// The type of the elements in the list.\n    /// </typeparam>\n#pragma warning disable 618 // for implementing obsolete ITotalCountProvider\n    internal class QueryResultList<T> : List<T>, ITotalCountProvider, IQueryResultEnumerable<T>\n    {\n        /// <summary>\n        /// Initializes a new instance of the QueryResultList{T} class.\n        /// </summary>\n        /// <param name=\"sequence\">\n        /// The sequence whose elements comprise the list.\n        /// </param>\n        public QueryResultList(IEnumerable<T> sequence)\n            : base(sequence)\n        {\n            this.TotalCount = -1;\n\n            // Forward along the total count from our sequence if it was\n            // provided\n            var provider = sequence as IQueryResultEnumerable<T>;\n            if (provider != null)\n            {\n                this.TotalCount = provider.TotalCount;\n                this.NextLink = provider.NextLink;\n            }\n        }\n\n        /// <summary>\n        /// Gets the total count for all the records that would have been\n        /// returned ignoring any take paging/limit clause specified by client\n        /// or server.\n        /// </summary>\n        public long TotalCount { get; private set; }\n\n        /// <summary>\n        /// Gets the link to next page of result that is returned in response headers.\n        /// </summary>\n        public string NextLink { get; private set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Serialization/CreatedAtAttribute.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Attribute applied to a member of a type to specify that it represents\n    /// the __createdAt system property.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]\n    public class CreatedAtAttribute :  Attribute, ISystemPropertyAttribute\n    {\n        /// <summary>\n        /// Initializes a new instance of the CreatedAtAttribute class.\n        /// </summary>\n        public CreatedAtAttribute()\n        {\n        }\n\n        /// <summary>\n        /// Gets the system property the attribute represents.\n        /// </summary>\n        MobileServiceSystemProperties ISystemPropertyAttribute.SystemProperty\n        {\n            get \n            {\n                return MobileServiceSystemProperties.CreatedAt;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Serialization/DataTableAttribute.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Attribute applied to a type to specify the Mobile Service table it\n    /// represents.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Class)]\n    public sealed class DataTableAttribute : Attribute\n    {\n        /// <summary>\n        /// Initializes a new instance of the DataTableAttribute class.\n        /// </summary>\n        /// <param name=\"name\">The name of the table the class represents.</param>\n        public DataTableAttribute(string name)\n        {\n            this.Name = name;\n        }\n\n        /// <summary>\n        /// Gets the name of the table the class represents.\n        /// </summary>\n        public string Name { get; private set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Serialization/DeletedAttribute.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Attribute applied to a member of a type to specify that it represents\n    /// the __deleted system property.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]\n    public class DeletedAttribute :  Attribute, ISystemPropertyAttribute\n    {\n        /// <summary>\n        /// Initializes a new instance of the DeletedAttribute class.\n        /// </summary>\n        public DeletedAttribute()\n        {\n        }\n\n        /// <summary>\n        /// Gets the system property the attribute represents.\n        /// </summary>\n        MobileServiceSystemProperties ISystemPropertyAttribute.SystemProperty\n        {\n            get \n            {\n                return MobileServiceSystemProperties.Deleted;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Serialization/ISystemPropertyAttribute.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Interface for attributes applied to a member of a type to \n    /// specify that the member represents a system property.\n    /// </summary>\n    internal interface ISystemPropertyAttribute\n    {\n        /// <summary>\n        /// Gets the system property the attribute represents.\n        /// </summary>\n        MobileServiceSystemProperties SystemProperty { get; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Serialization/MobileServiceContractResolver.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\nusing System.Runtime.Serialization;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Serialization;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An <see cref=\"IContractResolver\"/> implementation that is used with the\n    /// <see cref=\"MobileServiceClient\"/>.\n    /// </summary>\n    public class MobileServiceContractResolver : DefaultContractResolver\n    {\n        /// <summary>\n        /// The string prefix used to indicate system properties\n        /// </summary>\n        internal const string SystemPropertyPrefix = \"__\";\n\n        /// <summary>\n        /// The property names that are all aliased to be the id of an instance.\n        /// </summary>\n        private static readonly string[] idPropertyNames = { \"id\", \"Id\", \"ID\" };\n\n        /// <summary>\n        /// The system property names with the correct prefix mapped to the enum values\n        /// </summary>\n        private static readonly Dictionary<string, MobileServiceSystemProperties> systemPropertyNameToEnum =\n            new Dictionary<string, MobileServiceSystemProperties>(StringComparer.OrdinalIgnoreCase) { \n                { GetSystemPropertyString(MobileServiceSystemProperties.CreatedAt), MobileServiceSystemProperties.CreatedAt },\n                { GetSystemPropertyString(MobileServiceSystemProperties.UpdatedAt), MobileServiceSystemProperties.UpdatedAt } ,\n                { GetSystemPropertyString(MobileServiceSystemProperties.Version), MobileServiceSystemProperties.Version },\n                { GetSystemPropertyString(MobileServiceSystemProperties.Deleted), MobileServiceSystemProperties.Deleted }\n        };\n\n        /// <summary>\n        /// A cache of the id <see cref=\"JsonProperty\"/> for a given type. Used to\n        /// get and set the id value of instances.\n        /// </summary>\n        private readonly Dictionary<Type, JsonProperty> idPropertyCache = new Dictionary<Type, JsonProperty>();\n\n        /// <summary>\n        /// A cache of <see cref=\"JsonProperty\"/> instances for a given \n        /// <see cref=\"MemberInfo\"/> instance. Used to determine the property name\n        /// to serialize from the <see cref=\"MemberInfo\"/> used within an \n        /// <see cref=\"System.Linq.Expressions.Expression\"/> instance.\n        /// </summary>\n        private readonly Dictionary<MemberInfo, JsonProperty> jsonPropertyCache = new Dictionary<MemberInfo, JsonProperty>();\n\n        /// <summary>\n        /// A cache of the system properties supported for a given type.\n        /// </summary>\n        private readonly Dictionary<Type, MobileServiceSystemProperties> systemPropertyCache = new Dictionary<Type, MobileServiceSystemProperties>();\n\n        /// <summary>\n        /// A cache of table names for a given Type that accounts for table renaming \n        /// via the DataContractAttribute, DataTableAttribute and/or the JsonObjectAttribute.\n        /// </summary>\n        private readonly Dictionary<Type, string> tableNameCache = new Dictionary<Type, string>();\n        \n        /// <summary>\n        /// Indicates if the property names should be camel-cased when serialized\n        /// out into JSON.\n        /// </summary>\n        internal bool CamelCasePropertyNames { get; set; }\n\n        /// <summary>\n        /// Returns a table name for a type and accounts for table renaming \n        /// via the DataContractAttribute, DataTableAttribute and/or the JsonObjectAttribute.\n        /// </summary>\n        /// <param name=\"type\">\n        /// The type for which to return the table name.\n        /// </param>\n        /// <returns>\n        /// The table name.\n        /// </returns>\n        public virtual string ResolveTableName(Type type)\n        {\n            // Lookup the Mobile Services name of the Type and use that\n            string name = null;\n            if (!this.tableNameCache.TryGetValue(type, out name))\n            {\n                // By default, use the type name itself\n                name = type.Name;\n\n                DataContractAttribute dataContractAttribute = type.GetTypeInfo().GetCustomAttributes(typeof(DataContractAttribute), true)\n                                                                  .FirstOrDefault() as DataContractAttribute;\n                if (dataContractAttribute != null)\n                {\n                    if (!string.IsNullOrWhiteSpace(dataContractAttribute.Name))\n                    {\n                        name = dataContractAttribute.Name;\n                    }\n                }\n\n                JsonContainerAttribute jsonContainerAttribute = type.GetTypeInfo().GetCustomAttributes(typeof(JsonContainerAttribute), true)\n                                                                    .FirstOrDefault() as JsonContainerAttribute;\n                if (jsonContainerAttribute != null)\n                {\n                    if (!string.IsNullOrWhiteSpace(jsonContainerAttribute.Title))\n                    {\n                        name = jsonContainerAttribute.Title;\n                    }\n                }\n\n                DataTableAttribute dataTableAttribute = type.GetTypeInfo().GetCustomAttributes(typeof(DataTableAttribute), true)\n                                                            .FirstOrDefault() as DataTableAttribute;\n                if (dataTableAttribute != null)\n                {\n                    if (!string.IsNullOrEmpty(dataTableAttribute.Name))\n                    {\n                        name = dataTableAttribute.Name;\n                    }\n                }\n\n                this.tableNameCache[type] = name;\n\n                // Build the JsonContract now to catch any contract errors early\n                this.CreateContract(type);\n            }\n\n            return name;\n        }\n\n        /// <summary>\n        /// Returns the id <see cref=\"JsonProperty\"/> for the given type. The <see cref=\"JsonProperty\"/>\n        /// can be used to get/set the id value of an instance of the given type.\n        /// </summary>\n        /// <param name=\"type\">\n        /// The type for which to get the id <see cref=\"JsonProperty\"/>.\n        /// </param>\n        /// <returns>\n        /// The id <see cref=\"JsonProperty\"/>.\n        /// </returns>\n        public virtual JsonProperty ResolveIdProperty(Type type)\n        {\n            return ResolveIdProperty(type, throwIfNotFound: true);\n        }\n\n        internal JsonProperty ResolveIdProperty(Type type, bool throwIfNotFound)\n        {\n            JsonProperty property = null;\n            if (!this.idPropertyCache.TryGetValue(type, out property))\n            {\n                ResolveContract(type);\n                this.idPropertyCache.TryGetValue(type, out property);\n            }\n\n            if (property == null && throwIfNotFound)\n            {\n                throw new InvalidOperationException(\n                    string.Format(CultureInfo.InvariantCulture,\n                        \"No '{0}' member found on type '{1}'.\",\n                        MobileServiceSystemColumns.Id,\n                        type.FullName));\n            }\n\n            return property;\n        }\n\n        /// <summary>\n        /// Returns the system properties as a comma seperated list for a \n        /// given type. Returns null if the type does not support system properties.\n        /// </summary>\n        /// <param name=\"type\">The type for which to get the system properties.</param>\n        /// <returns>\n        /// The system properties as a comma seperated list for the given type or null \n        /// if the type does not support system properties.\n        /// </returns>\n        public virtual MobileServiceSystemProperties ResolveSystemProperties(Type type)\n        {\n            MobileServiceSystemProperties systemProperties = MobileServiceSystemProperties.None;\n            this.systemPropertyCache.TryGetValue(type, out systemProperties);\n            return systemProperties;\n        }\n\n        /// <summary>\n        /// Returns the <see cref=\"JsonProperty\"/> for the given <see cref=\"MemberInfo\"/> instance.\n        /// The <see cref=\"JsonProperty\"/> can be used to get information about how the \n        /// <see cref=\"MemberInfo\"/> should be serialized.\n        /// </summary>\n        /// <param name=\"member\">\n        /// The <see cref=\"MemberInfo\"/> for which to get the <see cref=\"JsonProperty\"/>.\n        /// </param>\n        /// <returns>\n        /// The <see cref=\"JsonProperty\"/> for the given <see cref=\"MemberInfo\"/> instance.\n        /// </returns>\n        public virtual JsonProperty ResolveProperty(MemberInfo member)\n        {\n            JsonProperty property = null;\n            if (!this.jsonPropertyCache.TryGetValue(member, out property))\n            {\n                ResolveContract(member.DeclaringType);\n                this.jsonPropertyCache.TryGetValue(member, out property);\n            }\n\n            return property;\n        }\n\n        /// <summary>\n        /// Returns the name that should be serialized into JSON for a given property name.\n        /// </summary>\n        /// <remarks>\n        /// This method is overridden to support camel-casing the property names.\n        /// </remarks>\n        /// <param name=\"propertyName\">\n        /// The property name to be resolved.\n        /// </param>\n        /// <returns>\n        /// The resolved property name.\n        /// </returns>\n        protected override string ResolvePropertyName(string propertyName)\n        {\n            if (this.CamelCasePropertyNames)\n            {\n                if (!string.IsNullOrWhiteSpace(propertyName) && char.IsUpper(propertyName[0]))\n                {\n                    string original = propertyName;\n                    propertyName = char.ToLower(propertyName[0]).ToString();\n                    if (original.Length > 1)\n                    {\n                        propertyName += original.Substring(1);\n                    }\n                }\n            }\n\n            return propertyName;\n        }\n\n        /// <summary>\n        /// Creates a <see cref=\"JsonObjectContract\"/> that provides information about how\n        /// the given type should be serialized to JSON.\n        /// </summary>\n        /// <remarks>\n        /// This method is overridden in order to catch types that have \n        /// <see cref=\"DataMemberAttribute\"/> on one or more members without having a \n        /// <see cref=\"DataContractAttribute\"/> on the type itself. This used to be supported\n        /// but no longer is and therefore an exception must be thrown for such types. The exception\n        /// informs the developer about how to correctly attribute the type with the\n        /// <see cref=\"JsonPropertyAttribute\"/> instead of the <see cref=\"DataMemberAttribute\"/>.\n        /// </remarks>\n        /// <param name=\"type\">\n        /// The type for which to return a <see cref=\"JsonObjectContract\"/>.\n        /// </param>\n        /// <returns>\n        /// The <see cref=\"JsonObjectContract\"/> for the type.\n        /// </returns>\n        protected override JsonObjectContract CreateObjectContract(Type type)\n        {\n            JsonObjectContract contract = base.CreateObjectContract(type);\n\n            DataContractAttribute dataContractAttribute = type.GetTypeInfo().GetCustomAttributes(typeof(DataContractAttribute), true)\n                                                              .FirstOrDefault() as DataContractAttribute;\n            if (dataContractAttribute == null)\n            {\n                // Make sure the type does not have a base class with a [DataContract]\n                Type baseTypeWithDataContract = type.GetTypeInfo().BaseType;\n                while (baseTypeWithDataContract != null)\n                {\n                    if (baseTypeWithDataContract.GetTypeInfo().GetCustomAttributes(typeof(DataContractAttribute), true).Any())\n                    {\n                        break;\n                    }\n                    else\n                    {\n                        baseTypeWithDataContract = baseTypeWithDataContract.GetTypeInfo().BaseType;\n                    }\n                }\n\n                if (baseTypeWithDataContract != null)\n                {\n                    throw new NotSupportedException(\n                            string.Format(CultureInfo.InvariantCulture,\n                            \"The type '{0}' does not have a DataContractAttribute, but the type derives from the type '{1}', which does have a DataContractAttribute. If a type has a DataContractAttribute, any type that derives from that type must also have a DataContractAttribute.\",\n                            type.FullName,\n                            baseTypeWithDataContract.FullName));\n                }\n\n                // [DataMember] attributes on members without a [DataContract]\n                // attribute on the type itself used to be honored.  Now with JSON.NET, [DataMember]\n                // attributes are ignored if there is no [DataContract] attribute on the type.\n                // To ensure types are not serialized differently, an exception must be thrown if this \n                // type is using [DataMember] attributes without a [DataContract] on the type itself.\n                if (type.GetRuntimeProperties()\n                         .Where( m => m.GetCustomAttributes(typeof(DataMemberAttribute), true)\n                                       .FirstOrDefault() != null)\n                         .Any())\n                {\n                    throw new NotSupportedException(\n                        string.Format(CultureInfo.InvariantCulture,\n                        \"The type '{0}' has one or members with a DataMemberAttribute, but the type itself does not have a DataContractAttribute. Use the Newtonsoft.Json.JsonPropertyAttribute in place of the DataMemberAttribute and set the PropertyName to the desired name.\",\n                        type.FullName));\n                }\n            }\n\n            return contract;\n        }\n\n        /// <summary>\n        /// Creates a <see cref=\"JsonProperty\"/> for a given <see cref=\"MemberInfo\"/> instance.\n        /// </summary>\n        /// <remarks>\n        /// This method is overridden in order set specialized <see cref=\"IValueProvider\"/>\n        /// implementations for certain property types. The date types (<see cref=\"DateTime\"/>, \n        /// <see cref=\"DateTimeOffset\"/>) require conversion to UTC dates on serialization and to\n        /// local dates on deserialization. The numerical types (<see cref=\"long\"/>, <see cref=\"ulong\"/>,\n        /// <see cref=\"decimal\"/>) require checks to ensure that precision will not be lost on\n        /// the server.\n        /// </remarks>\n        /// <param name=\"member\">\n        /// The <see cref=\"MemberInfo\"/> for which to creat the <see cref=\"JsonProperty\"/>.\n        /// </param>\n        /// <param name=\"memberSerialization\">\n        /// Specifies the member serialization options for the member.\n        /// </param>\n        /// <returns>\n        /// A <see cref=\"JsonProperty\"/> for a given <see cref=\"MemberInfo\"/> instance.\n        /// </returns>\n        protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)\n        {\n            JsonProperty property = base.CreateProperty(member, memberSerialization);\n            this.jsonPropertyCache[member] = property;\n\n            return property;\n        }\n\n        /// <summary>\n        /// Creates a collection of <see cref=\"JsonProperty\"/> instances for the members of a given \n        /// type.\n        /// </summary>\n        /// <remarks>\n        /// This method is overridden in order to handle the id property of the type. Because multiple\n        /// property names (\"id\" with different casings) are all treated as the id property, we must\n        /// ensure that there is one and only one id property for the type. Also, the id property\n        /// should be ignored when it is the default or null value and it should always serialize to JSON\n        /// with a lowercase 'id' name.\n        /// \n        /// This method also checks for and applies and system property attributes.\n        /// </remarks>\n        /// <param name=\"type\">\n        /// The type for which to create the collection of <see cref=\"JsonProperty\"/> instances.\n        /// </param>\n        /// <param name=\"memberSerialization\">\n        /// Specifies the member serialization options for the type.\n        /// </param>\n        /// <returns>\n        /// A collection of <see cref=\"JsonProperty\"/> instances for the members of a given \n        /// type.\n        /// </returns>\n        protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)\n        {\n            IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);\n\n            // If this type is for a known table, ensure that it has an id.\n            TypeInfo typeInfo = type.GetTypeInfo();\n            if (this.tableNameCache.ContainsKey(type) || this.tableNameCache.Keys.Any(t => t.GetTypeInfo().IsAssignableFrom(typeInfo)))\n            {\n                // Filter out properties that are not read/write\n                properties = properties.Where(p => p.Writable).ToList();\n\n                // Find the id property\n                JsonProperty idProperty = DetermineIdProperty(type, properties);\n                bool isIntegerIdType = MobileServiceSerializer.IsIntegerId(idProperty);\n\n                // Create a reverse cache of property to memberInfo to be used locally for validating the type\n                Dictionary<JsonProperty, MemberInfo> memberInfoCache = new Dictionary<JsonProperty, MemberInfo>();\n                foreach (KeyValuePair<MemberInfo, JsonProperty> pair in jsonPropertyCache)\n                {\n                    if (pair.Key.DeclaringType.GetTypeInfo().IsAssignableFrom(typeInfo))\n                    {\n                        memberInfoCache.Add(pair.Value, pair.Key);\n                    }\n                }\n\n                // Set any needed converters and look for system property attributes\n                foreach (JsonProperty property in properties)\n                {\n                    SetMemberConverters(property);\n                    ApplySystemPropertyAttributes(property, memberInfoCache[property], isIntegerIdType);\n                }\n\n                // Determine the system properties from the property names\n                // and add the system properties to the cache\n                if (!isIntegerIdType)\n                {\n                    AddSystemPropertyCacheEntry(type, properties);\n                }\n            }\n\n            return properties;\n        }        \n\n        /// <summary>\n        /// Creates the <see cref=\"IValueProvider\"/> used by the serializer to get and set values from a member.\n        /// </summary>\n        /// <param name=\"member\">The member.</param>\n        /// <returns>The <see cref=\"IValueProvider\"/> used by the serializer to get and set values from a member.</returns>\n        protected override IValueProvider CreateMemberValueProvider(MemberInfo member)\n        {\n            // always use the ReflectionValueProvider to make sure our behavior is consistent accross platforms.\n            return new ReflectionValueProvider(member);\n        }\n\n        /// <summary>\n        /// Searches over the properties and their names to determine which system properties\n        /// have been applied to the type, and then adds an entry into the system properties cache\n        /// for the type.\n        /// </summary>\n        /// <param name=\"type\">The type.</param>\n        /// <param name=\"properties\">The JsonProperties of the type.</param>\n        private void AddSystemPropertyCacheEntry(Type type, IEnumerable<JsonProperty> properties)\n        {\n            MobileServiceSystemProperties systemProperties = MobileServiceSystemProperties.None;\n            foreach (JsonProperty property in properties)\n            {\n                MobileServiceSystemProperties systemProperty = MobileServiceSystemProperties.None;\n                if (!property.Ignored &&\n                    systemPropertyNameToEnum.TryGetValue(property.PropertyName, out systemProperty))\n                {\n                    // Make sure there is not already a property that has been associated with\n                    // the system property.\n                    if ((systemProperties & systemProperty) == systemProperty)\n                    {\n                        throw new InvalidOperationException(\n                            string.Format(CultureInfo.InvariantCulture,\n                            \"Only one member may have the property name '{0}' (regardless of casing) on type '{1}'.\",\n                            property.PropertyName,\n                            type.FullName));\n                    }\n                    else\n                    {\n                        systemProperties |= systemProperty;\n                    }\n                }\n            }\n\n            this.systemPropertyCache[type] = systemProperties;\n        }\n\n        /// <summary>\n        /// Determines which of the properties is the id property for the type.\n        /// </summary>\n        /// <param name=\"type\">The type to determine the id property of.</param>\n        /// <param name=\"properties\">The properties of the types.</param>\n        /// <returns>The id property.</returns>\n        private JsonProperty DetermineIdProperty(Type type, IEnumerable<JsonProperty> properties)\n        {\n            // Get the Id properties\n            JsonProperty[] idProperties = properties.Where(p => idPropertyNames.Contains(p.PropertyName) && !p.Ignored).ToArray();\n\n            // Ensure there is one and only one id property\n            if (idProperties.Length > 1)\n            {\n                throw new InvalidOperationException(\n                    string.Format(CultureInfo.InvariantCulture,\n                    \"Only one member may have the property name '{0}' (regardless of casing) on type '{1}'.\",\n                    MobileServiceSystemColumns.Id,\n                    type.FullName));\n            }\n\n            if (idProperties.Length < 1)\n            {\n                throw new InvalidOperationException(\n                    string.Format(CultureInfo.InvariantCulture,\n                    \"No '{0}' member found on type '{1}'.\",\n                    MobileServiceSystemColumns.Id,\n                    type.FullName));\n            }\n\n            JsonProperty idProperty = idProperties[0];\n            idProperty.PropertyName = MobileServiceSystemColumns.Id;\n            idProperty.NullValueHandling = NullValueHandling.Ignore;\n            idProperty.DefaultValueHandling = DefaultValueHandling.Ignore;\n            this.idPropertyCache[type] = idProperty;\n\n            return idProperty;\n        }\n\n        /// <summary>\n        /// Given a <see cref=\"MobileServiceSystemProperties\"/> enum value, returns the string value with the \n        /// correct casing and system property prefix.\n        /// </summary>\n        /// <param name=\"systemProperty\">The system property.</param>\n        /// <returns>A string of the system property with the correct casing and system property prefix.</returns>\n        private static string GetSystemPropertyString(MobileServiceSystemProperties systemProperty)\n        {\n            string enumAsString = systemProperty.ToString();\n            char firstLetterAsLower = char.ToLowerInvariant(enumAsString[0]);\n            return string.Format(\"{0}{1}{2}\", MobileServiceSerializer.SystemPropertyPrefix, firstLetterAsLower, enumAsString.Substring(1));\n        }\n\n        /// <summary>\n        /// Applies the system property attribute to the property by renaming the property to the\n        /// system property name.\n        /// </summary>\n        /// <param name=\"property\">The property.</param>\n        /// <param name=\"member\">The <see cref=\"MemberInfo\"/> that corresponds to the property.</param>\n        /// <param name=\"isIntegerIdType\">Indicates if the type that the property is on, has an integer id type or not.</param>\n        private static void ApplySystemPropertyAttributes(JsonProperty property, MemberInfo member, bool isIntegerIdType)\n        {\n            // Check for system property attributes\n            MobileServiceSystemProperties systemProperties = MobileServiceSystemProperties.None;\n\n            foreach (object attribute in member.GetCustomAttributes(true))\n            {\n                ISystemPropertyAttribute systemProperty = attribute as ISystemPropertyAttribute;\n                if (systemProperty != null)\n                {\n                    if (isIntegerIdType)\n                    {\n                        throw new InvalidOperationException(\n                            string.Format(CultureInfo.InvariantCulture,\n                            \"The type '{0}' has an integer id member and therefore can not have any members with the system property attribute '{1}'.\",\n                            member.DeclaringType.FullName,\n                            systemProperty.SystemProperty));\n                    }\n\n                    if (systemProperties != MobileServiceSystemProperties.None)\n                    {\n                        throw new InvalidOperationException(\n                            string.Format(CultureInfo.InvariantCulture,\n                            \"A member can only have one system property attribute. The member '{0}' on type '{1}' has system property attributes '{2}' and '{3}'.\",\n                            member.Name,\n                            member.DeclaringType.FullName,\n                            systemProperty.SystemProperty,\n                            systemProperties));\n                    }\n\n                    property.PropertyName = GetSystemPropertyString(systemProperty.SystemProperty);\n                    systemProperties = systemProperty.SystemProperty;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Sets the member converters on the property if the property is a value type.\n        /// </summary>\n        /// <param name=\"property\">The property to add the member converters to.</param>\n        private static void SetMemberConverters(JsonProperty property)\n        {\n            if (property.PropertyType.GetTypeInfo().IsValueType)\n            {\n                // The NullHandlingConverter will ensure that nulls get treated as the default value \n                // for value types.\n                if (property.MemberConverter == null)\n                {\n                    property.MemberConverter = NullHandlingConverter.Instance;\n                }\n                else\n                {\n                    property.MemberConverter = new NullHandlingConverter(property.MemberConverter);\n                }\n            }\n        }\n\n        /// <summary>\n        /// An implementation of <see cref=\"JsonConverter\"/> to be used with value type\n        /// properties to ensure that null values in a JSON payload are deserialized as\n        /// the default value for the value type.\n        /// </summary>\n        private class NullHandlingConverter : JsonConverter\n        {\n            /// <summary>\n            /// A singleton instance of the <see cref=\"NullHandlingConverter\"/> because\n            /// the <see cref=\"NullHandlingConverter\"/> has no state and can be shared\n            /// between many properties.\n            /// </summary>\n            public static NullHandlingConverter Instance = new NullHandlingConverter();\n\n            /// <summary>\n            /// Inner converter.\n            /// </summary>\n            private readonly JsonConverter inner;\n\n            /// <summary>\n            /// Handles nulls as default values.\n            /// </summary>\n            /// <param name=\"inner\"></param>\n            public NullHandlingConverter(JsonConverter inner = null)\n            {\n                this.inner = inner;\n            }\n\n            /// <summary>\n            /// Indicates if the <see cref=\"NullHandlingConverter\"/> can be used with\n            /// a given type.\n            /// </summary>\n            /// <param name=\"objectType\">\n            /// The type under consideration.\n            /// </param>\n            /// <returns>\n            /// <c>true</c> for value types and <c>false</c> otherwise.\n            /// </returns>\n            public override bool CanConvert(Type objectType)\n            {\n                return objectType.GetTypeInfo().IsValueType || (inner != null && inner.CanConvert(objectType));\n            }\n\n            /// <summary>\n            /// Reads the JSON representation of the object.\n            /// The reason why this works is \n            /// </summary>\n            /// <param name=\"reader\">\n            /// The <see cref=\"JsonReader\"/> to read from.\n            /// </param>\n            /// <param name=\"objectType\">\n            /// The type of the object.\n            /// </param>\n            /// <param name=\"existingValue\">\n            /// The exisiting value of the object being read.\n            /// </param>\n            /// <param name=\"serializer\">\n            /// The calling serializer.\n            /// </param>\n            /// <returns>\n            /// The object value.\n            /// </returns>\n            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\n            {\n                if (inner != null && inner.CanConvert(objectType) && inner.CanRead)\n                {\n                    return inner.ReadJson(reader, objectType, existingValue, serializer);\n                }\n                else if (reader.TokenType == JsonToken.Null)\n                {\n                    //create default values if null is not a valid value\n                    if (objectType.GetTypeInfo().IsValueType)\n                    {\n                        //create default value\n                        return Activator.CreateInstance(objectType);\n                    }\n                    return null;\n\n                }\n                else\n                {\n                    return serializer.Deserialize(reader, objectType);\n                }\n            }\n\n            /// <summary>\n            /// Writes the JSON representation of the object.\n            /// </summary>\n            /// <param name=\"writer\">\n            /// The <see cref=\"JsonWriter\"/> to write to.\n            /// </param>\n            /// <param name=\"value\">\n            /// The value to write.\n            /// </param>\n            /// <param name=\"serializer\">\n            /// The calling serializer.\n            /// </param>\n            public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n            {\n                if (inner != null && inner.CanWrite)\n                {\n                    inner.WriteJson(writer, value, serializer);\n                }\n                else\n                {\n                    serializer.Serialize(writer, value);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Serialization/MobileServiceIsoDateTimeConverter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Converters;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Converts DateTime and DateTimeOffset object into UTC DateTime and creates a ISO string representation\n    /// by calling ToUniversalTime on serialization and ToLocalTime on deserialization.\n    /// </summary>\n    public class MobileServiceIsoDateTimeConverter : IsoDateTimeConverter\n    {\n        /// <summary>\n        /// Creates a new instance of <see cref=\"MobileServiceIsoDateTimeConverter\"/>.\n        /// </summary>\n        public MobileServiceIsoDateTimeConverter()\n        {\n            this.Culture = CultureInfo.InvariantCulture;\n            this.DateTimeFormat = \"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK\";\n        }\n\n        /// <summary>\n        /// Reads the JSON representation of the object.\n        /// </summary>\n        /// <param name=\"reader\">The <see cref=\"JsonReader\"/> to read from.</param>\n        /// <param name=\"objectType\">Type of the object.</param>\n        /// <param name=\"existingValue\">The existing value of object being read.</param>\n        /// <param name=\"serializer\">The calling serializer.</param>\n        /// <returns>The object value.</returns>\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\n        {\n            object datetimeObject = base.ReadJson(reader, objectType, existingValue, serializer);\n\n            if(datetimeObject != null)\n            {\n                if(datetimeObject is DateTime)\n                {\n                    return ((DateTime)datetimeObject).ToLocalTime();\n                }\n                else if(datetimeObject is DateTimeOffset)\n                {\n                    return new DateTimeOffset((DateTime)reader.Value).ToLocalTime();\n                }\n            }\n\n            return datetimeObject;\n        }\n\n        /// <summary>\n        /// Writes the JSON representation of the object.\n        /// </summary>\n        /// <param name=\"writer\">The <see cref=\"JsonWriter\"/> to write to.</param>\n        /// <param name=\"value\">The value.</param>\n        /// <param name=\"serializer\">The calling serializer.</param>\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n        {\n            DateTime dateTime;\n            if (value is DateTime)\n            {\n                dateTime = ((DateTime)value).ToUniversalTime();\n            }\n            else\n            {\n                dateTime = ((DateTimeOffset)value).UtcDateTime;\n            }\n\n            base.WriteJson(writer, dateTime, serializer);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Serialization/MobileServiceJsonSerializerSettings.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Globalization;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Converters;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// JSON serializer settings to use with a <see cref=\"MobileServiceClient\"/>.\n    /// </summary>\n    public class MobileServiceJsonSerializerSettings : JsonSerializerSettings\n    {\n        /// <summary>\n        /// Initializes a new instance of the MobileServiceJsonSerializerSettings\n        /// class.\n        /// </summary>\n        public MobileServiceJsonSerializerSettings()\n        {\n            this.NullValueHandling = NullValueHandling.Include;\n            this.ContractResolver = new MobileServiceContractResolver();\n            this.ObjectCreationHandling = ObjectCreationHandling.Replace;\n\n            this.Converters.Add(new MobileServiceIsoDateTimeConverter());\n            this.Converters.Add(new MobileServicePrecisionCheckConverter());\n            this.Converters.Add(new StringEnumConverter());\n        }\n\n        /// <summary>\n        /// Indicates if the property names should be camel-cased when serialized\n        /// out into JSON.\n        /// </summary>\n        public bool CamelCasePropertyNames\n        {\n            get\n            {\n                return this.ContractResolver.CamelCasePropertyNames;\n            }\n\n            set\n            {\n                this.ContractResolver.CamelCasePropertyNames = value;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"MobileServiceContractResolver\"/> instance.  \n        /// </summary>\n        public new MobileServiceContractResolver ContractResolver\n        {\n            get\n            {\n                // Because we are hiding the base member (which is of type \n                // IContractResolver) it is possible that the base has been \n                // set to an instance of IContractResolver that is not a \n                // MobileServiceContractResolver. Therefore, we must check for \n                // this condition and throw an exception as needed.\n                MobileServiceContractResolver contractResolver = \n                    base.ContractResolver as MobileServiceContractResolver;\n                if (contractResolver == null)\n                {\n                    throw new InvalidOperationException(\n                        string.Format(\n                            CultureInfo.InvariantCulture,\n                            \"The member '{0}.ContractResolver' must be set to an instance of the '{1}' class or a class that inherits from the '{1}' class.\",\n                            this.GetType().FullName,\n                            typeof(MobileServiceContractResolver).FullName));\n                }\n\n                return contractResolver;\n            }\n\n            set\n            {\n                if (value == null)\n                {\n                    throw new InvalidOperationException(\n                        string.Format(\n                            CultureInfo.InvariantCulture,\n                            \"The member '{0}.ContractResolver' must be set to an instance of the '{1}' class or a class that inherits from the '{1}' class.\",\n                            this.GetType().FullName,\n                            typeof(MobileServiceContractResolver).FullName));\n                }\n\n                base.ContractResolver = value;\n            }\n        }\n\n        /// <summary>\n        /// Returns a <see cref=\"JsonSerializer\"/> with the equivalent settings\n        /// as this <see cref=\"MobileServiceJsonSerializerSettings\"/>.\n        /// </summary>\n        /// <returns>\n        /// A <see cref=\"JsonSerializer\"/> with the equivalent settings\n        /// as this <see cref=\"MobileServiceJsonSerializerSettings\"/>.\n        /// </returns>\n        internal JsonSerializer GetSerializerFromSettings()\n        {\n            JsonSerializer serializer = new JsonSerializer();\n\n            // We do not set the JsonSerializer.Binder because it breaks our .Net4.5 \n            // release with Json.NET\n\n            // JsonSerializer will throw id ReferenceResolver is set to null\n            if (this.ReferenceResolver != null)\n            {\n                serializer.ReferenceResolver = this.ReferenceResolver;\n            }\n\n            // Add each of the converters\n            foreach (var converter in this.Converters)\n            {\n                serializer.Converters.Add(converter);\n            }\n\n            // Set all of the other settings on the serializer\n            serializer.CheckAdditionalContent = this.CheckAdditionalContent;\n            serializer.ConstructorHandling = this.ConstructorHandling;\n            serializer.Context = this.Context;\n            serializer.ContractResolver = this.ContractResolver;\n            serializer.Culture = this.Culture;\n            serializer.DateFormatHandling = this.DateFormatHandling;\n            serializer.DateParseHandling = this.DateParseHandling;\n            serializer.DateTimeZoneHandling = this.DateTimeZoneHandling;\n            serializer.DefaultValueHandling = this.DefaultValueHandling;\n            serializer.Error += this.Error;\n            serializer.Formatting = this.Formatting;\n            serializer.MaxDepth = this.MaxDepth;\n            serializer.MissingMemberHandling = this.MissingMemberHandling;\n            serializer.NullValueHandling = this.NullValueHandling;\n            serializer.ObjectCreationHandling = this.ObjectCreationHandling;\n            serializer.PreserveReferencesHandling = this.PreserveReferencesHandling;\n            serializer.ReferenceLoopHandling = this.ReferenceLoopHandling;\n            serializer.TraceWriter = this.TraceWriter;\n            serializer.TypeNameHandling = this.TypeNameHandling;\n\n            return serializer;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Serialization/MobileServicePrecisionCheckConverter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An implementation of <see cref=\"JsonConverter\"/> to be used with\n    /// <see cref=\"long\"/>, <see cref=\"ulong\"/> and <see cref=\"decimal\"/> property\n    /// types that only writes the values if we can ensure that precision will not \n    /// be lost if the value is serialized and sent to the server.\n    /// </summary>\n    public class MobileServicePrecisionCheckConverter : JsonConverter\n    {\n        /// <summary>\n        /// The magnitude of the upper limit of long values such that all values \n        /// equal to or less than this value can all be converted to a double without\n        /// a loss of precision.\n        /// </summary>\n        private static readonly long maxLongMagnitude = 0x20000000000000; // 2^53\n\n        /// <summary>\n        /// The magnitude of the upper limit of ulong values such that all values \n        /// equal to or less than this value can all be converted to a double without\n        /// a loss of precision.\n        /// </summary>\n        private static readonly ulong maxUnsignedLongMagnitude = 0x20000000000000; // 2^53\n\n        /// <summary>\n        /// The magnitude of the upper limit of decimal values which are not whole numbers\n        /// such that all values equal to or less than this value can all be converted to a \n        /// double without a loss of precision. We can guarantee this for decimal with at most\n        /// 15 significant digits.\n        /// </summary>\n        private static readonly decimal maxDecimalNotWholeNumberMagnitude = 999999999999999; // max number with 15 digits\n\n        /// <summary>\n        /// Indicates if the specified type can be converted by this converter.\n        /// </summary>\n        /// <param name=\"objectType\">The type to check.</param>\n        /// <returns>A bool indicating if this converter can convert the type.</returns>\n        public override bool CanConvert(Type objectType)\n        {\n            return (objectType == typeof(decimal) ||\n                     objectType == typeof(long) ||\n                     objectType == typeof(ulong));\n        }\n\n        /// <summary>\n        /// Indicates this <see cref=\"JsonConverter\"/> should not be used during deserialization.\n        /// </summary>\n        public override bool CanRead\n        {\n            get\n            {\n                return false;\n            }\n        }\n\n        /// <summary>\n        /// Reading is not supported for this converter.\n        /// </summary>\n        /// <param name=\"reader\"></param>\n        /// <param name=\"objectType\"></param>\n        /// <param name=\"existingValue\"></param>\n        /// <param name=\"serializer\"></param>\n        /// <returns></returns>\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\n        {\n            throw new NotSupportedException(\n                string.Format(CultureInfo.InvariantCulture,\n                            \"The {0} does not support reading JSON.\",\n                            typeof(MobileServicePrecisionCheckConverter).Name));\n        }\n\n        /// <summary>\n        /// Writes the <paramref name=\"value\"/> to Json only if we can ensure that the value \n        /// will not lose precision when sent to the server.\n        /// Otherwise it throws an exception.\n        /// </summary>\n        /// <param name=\"writer\">\n        /// The JsonWriter instance to use.\n        /// </param>\n        /// <param name=\"value\">\n        /// The value to check on write.\n        /// </param>\n        /// <param name=\"serializer\">\n        /// The current Serializer.\n        /// </param>\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n        {\n            bool isOutOfRange = false;\n\n            if (value is long)\n            {\n                long asLong = (long)value;\n                isOutOfRange = asLong > maxLongMagnitude || asLong < -maxLongMagnitude;\n            }\n            else if (value is ulong)\n            {\n                ulong asUlong = (ulong)value;\n                isOutOfRange = asUlong > maxUnsignedLongMagnitude;\n            }\n            else if (value is decimal)\n            {\n                decimal asDecimal = (decimal)value;\n                // Retrieve a binary representation of the Decimal. The return value is an \n                // integer array with four elements. Elements 0, 1, and 2 contain the low,\n                // middle, and high 32 bits of the 96-bit integer part of the Decimal.\n                // Element 3 contains the scale factor and sign of the Decimal: bits 0-15\n                // (the lower word) are unused; bits 16-23 contain a value between 0 and \n                // 28, indicating the power of 10 to divide the 96-bit integer part by to\n                // produce the Decimal value; bits 24-30 are unused; and finally bit 31 \n                // indicates the sign of the Decimal value, 0 meaning positive and 1 \n                // meaning negative.\n                int[] bits = Decimal.GetBits(asDecimal);\n                //create number out of the first 64 bits\n                ulong number = (ulong)((uint)bits[1]) << 32 | (uint)bits[0];\n                // check if decimal actually presents a whole number\n                bool isWholeNumber = asDecimal % 1 == 0;\n                // whole number and greater than whole number limit\n                bool isWholeNumberOutOfRange = isWholeNumber && (bits[2] != 0 || number > maxUnsignedLongMagnitude);\n                // not a whole number and greater than limit\n                // if bits[2] is not null the number is too big no matter what\n                bool isDecimalNumberOutOfRange = !isWholeNumber && (bits[2] != 0 || number > maxDecimalNotWholeNumberMagnitude);\n                // combine cases\n                isOutOfRange = isWholeNumberOutOfRange || isDecimalNumberOutOfRange;\n            }\n\n            if (isOutOfRange)\n            {\n                throw new InvalidOperationException(\n                    string.Format(CultureInfo.InvariantCulture,\n                                  \"The value {0} for member {1} is outside the valid range for numeric columns.\",\n                                  value,\n                                  writer.Path));\n            }\n\n            //write the value to the stream.\n            writer.WriteValue(value);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Serialization/MobileServiceSerializer.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text.RegularExpressions;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing Newtonsoft.Json.Serialization;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides serialization and deserialization for a \n    /// <see cref=\"MobileServiceClient\"/>.\n    /// </summary>\n    internal class MobileServiceSerializer\n    {\n        /// <summary>\n        /// The string prefix used to indicate system properties\n        /// </summary>\n        internal const string SystemPropertyPrefix = \"__\";\n\n        /// <summary>\n        /// The version system property as a string with the prefix.\n        /// </summary>\n        internal static readonly string VersionSystemPropertyString = String.Format(\"{0}{1}\", MobileServiceSerializer.SystemPropertyPrefix, MobileServiceSystemProperties.Version.ToString()).ToLowerInvariant();\n\n        /// <summary>\n        /// The version system property as a string with the prefix.\n        /// </summary>\n        internal static readonly string UpdatedAtSystemPropertyString = String.Format(\"{0}{1}\", MobileServiceSerializer.SystemPropertyPrefix, MobileServiceSystemProperties.UpdatedAt.ToString().ToLowerInvariant());\n\n        /// <summary>\n        /// The version system property as a string with the prefix.\n        /// </summary>\n        internal static readonly string CreatedAtSystemPropertyString = String.Format(\"{0}{1}\", MobileServiceSerializer.SystemPropertyPrefix, MobileServiceSystemProperties.CreatedAt.ToString().ToLowerInvariant());\n\n        /// <summary>\n        /// A regex for validating string ids\n        /// </summary>\n        private static Regex stringIdValidationRegex = new Regex(@\"([\\u0000-\\u001F]|[\\u007F-\\u009F]|[\"\"\\+\\?\\\\\\/\\`]|^\\.{1,2}$)\");\n\n        /// <summary>\n        /// The long type.\n        /// </summary>\n        private static Type longType = typeof(long);\n\n        /// <summary>\n        /// The int type.\n        /// </summary>\n        private static Type intType = typeof(int);\n\n        /// <summary>\n        /// The max length of valid string ids.\n        /// </summary>\n        internal const int MaxStringIdLength = 255;\n\n        /// <summary>\n        /// The JSON serializer settings to use with the \n        /// <see cref=\"MobileServiceSerializer\"/>.\n        /// </summary>\n        public MobileServiceJsonSerializerSettings SerializerSettings { get; set; }\n\n        /// <summary>\n        /// Creates a new instance of the <see cref=\"MobileServiceSerializer\"/>\n        /// class.\n        /// </summary>\n        public MobileServiceSerializer()\n        {\n            this.SerializerSettings = new MobileServiceJsonSerializerSettings();\n        }\n\n        /// <summary>\n        /// Returns the system properties for a given type.\n        /// </summary>\n        /// <param name=\"type\">The type for which to get the system properties.</param>\n        /// <returns>\n        /// The system properties for a given type.\n        /// </returns>\n        public MobileServiceSystemProperties GetSystemProperties(Type type)\n        {\n            return this.SerializerSettings.ContractResolver.ResolveSystemProperties(type);\n        }\n\n        /// <summary>\n        /// Tries to get the value of the id property from an instance.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to get the id property value from.\n        /// </param>\n        /// <param name=\"ignoreCase\">\n        /// Set to true to find any variant spelling of the id is in the object\n        /// </param> \n        /// <param name=\"id\">\n        /// The value of the id property from the instance if the instance has an \n        /// id property.\n        /// </param>\n        /// <returns>\n        /// Returns 'true' if the instance had an id property; 'false' otherwise.\n        /// </returns>\n        public static bool TryGetId(JObject instance, bool ignoreCase, out object id)\n        {\n            bool gotId = false;\n            JToken idToken = null;\n\n            id = null;\n\n            if (ignoreCase)\n            {\n                gotId = instance.TryGetValue(MobileServiceSystemColumns.Id, StringComparison.OrdinalIgnoreCase, out idToken);\n            }\n            else\n            {\n                gotId = instance.TryGetValue(MobileServiceSystemColumns.Id, out idToken);\n            }\n\n            if (gotId)\n            {\n                JValue idValue = idToken as JValue;\n                if (idValue == null)\n                {\n                    gotId = false;\n                }\n                else\n                {\n                    id = idValue.Value;\n                }\n            }\n\n            return gotId;\n        }\n\n        /// <summary>\n        /// Gets the value of the id property from an instance. Also ensures that the\n        /// id is valid.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to get the id property value from.\n        /// </param>\n        /// <param name=\"ignoreCase\">\n        /// Set to true to find any variant spelling of the id is in the object\n        /// </param> \n        /// <param name=\"allowDefault\">\n        /// Indicates if a defualt value for the id is considered valid.\n        /// </param> \n        /// <returns>\n        /// The id property value.\n        /// </returns>\n        public static object GetId(JObject instance, bool ignoreCase = false, bool allowDefault = false)\n        {\n            Debug.Assert(instance != null);\n\n            object id = null;\n            bool gotID = TryGetId(instance, ignoreCase, out id);\n\n            // Check that the id is present but incorrectly cased\n            if (!gotID && !ignoreCase && TryGetId(instance, true, out id))\n            {\n                throw new ArgumentException(\n                    string.Format(\n                        CultureInfo.InvariantCulture,\n                        \"The casing of the '{0}' property is invalid.\",\n                        MobileServiceSystemColumns.Id),\n                     \"instance\");\n            }\n\n            if (gotID)\n            {\n                EnsureValidId(id, allowDefault);\n            }\n            else if (!allowDefault)\n            {\n                throw new ArgumentException(\n                       string.Format(\n                           CultureInfo.InvariantCulture,\n                           \"Expected {0} member not found.\",\n                           MobileServiceSystemColumns.Id),\n                       \"instance\");\n            }\n\n            return id;\n        }\n\n        /// <summary>\n        /// Removes all system properties (name start with '__') from the instance\n        /// if the instance is determined to have a string id and therefore be for table that\n        /// supports system properties.\n        /// </summary>\n        /// <param name=\"instance\">The instance to remove the system properties from.</param>\n        /// <param name=\"version\">Set to the value of the version system property before it is removed.</param>\n        /// <param name=\"propertiesToKeep\">The system properties to keep</param>        /// <returns>\n        /// The instance with the system properties removed.\n        /// </returns>\n        public static JObject RemoveSystemProperties(JObject instance, out string version, MobileServiceSystemProperties propertiesToKeep = MobileServiceSystemProperties.None)\n        {\n            version = null;\n\n            bool haveCloned = false;\n            foreach (JProperty property in instance.Properties())\n            {\n                if (property.Name.StartsWith(MobileServiceSerializer.SystemPropertyPrefix))\n                {\n                    // We don't want to alter the original jtoken passed in by the caller\n                    // so if we find a system property to remove, we have to clone first\n                    if (!haveCloned)\n                    {\n                        instance = instance.DeepClone() as JObject;\n                        haveCloned = true;\n                    }\n\n                    if (String.Equals(property.Name, MobileServiceSystemColumns.Version, StringComparison.OrdinalIgnoreCase))\n                    {\n                        version = (string)instance[property.Name];\n                        if ((propertiesToKeep & MobileServiceSystemProperties.Version) == MobileServiceSystemProperties.Version)\n                        {\n                            continue;\n                        }\n                    }\n                    else if (propertiesToKeep == MobileServiceSystemProperties.All ||\n                        IsKeptSystemProperty(property.Name, propertiesToKeep, MobileServiceSystemProperties.CreatedAt, MobileServiceSerializer.CreatedAtSystemPropertyString) ||\n                        IsKeptSystemProperty(property.Name, propertiesToKeep, MobileServiceSystemProperties.UpdatedAt, MobileServiceSerializer.UpdatedAtSystemPropertyString))\n                    {\n                        continue;\n                    }\n\n                    instance.Remove(property.Name);\n                }\n            }\n\n            return instance;\n        }\n\n        /// <summary>\n        /// Checks if the given system property should be kept or removed from the returned item\n        /// </summary>\n        /// <param name=\"propertyName\">\n        /// Name of the system property to see if it should be removed\n        /// </param> \n        /// <param name=\"propertiesToKeep\">\n        /// The list of system properties to be kept\n        /// </param> \n        /// <param name=\"property\">\n        /// Type of the system property to check\n        /// </param> \n        /// <param name=\"systemPropertyName\">\n        /// Name of the actual system property to look for\n        /// </param> \n        private static bool IsKeptSystemProperty(string propertyName, MobileServiceSystemProperties propertiesToKeep, MobileServiceSystemProperties property, string systemPropertyName)\n        {\n            if ((propertiesToKeep & property) == property &&\n                    String.Equals(propertyName, systemPropertyName, StringComparison.OrdinalIgnoreCase))\n            {\n                return true;\n            }\n\n            return false;\n        }\n\n        /// <summary>\n        /// Ensures that the id is valid. Throws an exception if the id is not valid.\n        /// </summary>\n        /// <param name=\"allowDefault\">\n        /// Indicates if a defualt value for the id is considered valid.\n        /// </param> \n        /// <param name=\"id\">The id to validate.</param>\n        public static void EnsureValidId(object id, bool allowDefault = false)\n        {\n            if (id == null)\n            {\n                if (!allowDefault)\n                {\n                    throw new InvalidOperationException(\"The id can not be null or an empty string.\");\n                }\n                return;\n            }\n\n            if (id is string)\n            {\n                EnsureValidStringId(id, allowDefault);\n            }\n            if (IsIntegerId(id))\n            {\n                EnsureValidIntId(id, allowDefault);\n            }\n        }                \n\n        public static bool IsIntegerId(JsonProperty idProperty)\n        {\n            return IsIntegerId(idProperty.PropertyType);\n        }        \n\n        public static bool IsIntegerId(object id)\n        {\n            return id != null && IsIntegerId(id.GetType());\n        }\n\n        public static bool IsIntegerId(Type idType)\n        {\n            bool isIntegerIdType = idType == longType ||\n                                   idType == intType;\n            return isIntegerIdType;\n        }\n\n        private static void EnsureValidIntId(object id, bool allowDefault)\n        {\n            long longId = Convert.ToInt64(id);\n            if (longId < 0 ||\n                (!allowDefault && longId == 0))\n            {\n                throw new InvalidOperationException(\n                    string.Format(\"The integer id '{0}' is not a positive integer value.\", longId));\n            }\n        }\n\n        public static void EnsureValidStringId(object id, bool allowDefault = false)\n        {\n            string stringId = (string)id;\n            if (stringId.Length > MaxStringIdLength)\n            {\n                throw new InvalidOperationException(\n                    string.Format(\"The string id '{0}' is longer than the max string id length of {1} characters.\",\n                        stringId,\n                        MaxStringIdLength));\n            }\n            else if (stringIdValidationRegex.IsMatch(stringId))\n            {\n                throw new InvalidOperationException(\n                    string.Format(\"The string id '{0}' is invalid. An id must not contain any control characters or the characters \\\",+,?,\\\\,/,`.\", stringId));\n            }\n            else if (!allowDefault && stringId.Length == 0)\n            {\n                throw new InvalidOperationException(\"The id can not be null or an empty string.\");\n            }\n        }\n\n        /// <summary>\n        /// Ensures that the id type is valid for the given type parameter. Throws an exception if the id is not valid.\n        /// </summary>\n        /// <typeparam name=\"T\">The type to validate the id against.</typeparam>\n        /// <param name=\"id\">The id to validate.</param>\n        public void EnsureValidIdForType<T>(object id)\n        {\n            Type idPropertyType = this.GetIdPropertyType<T>();\n\n            if (id != null)\n            {\n                Type idType = id.GetType();\n                bool isInvalid = false;\n\n                // Allow an int id to be passed in for item types that have a long id and\n                // vice-versa\n                if (idPropertyType == longType || idPropertyType == intType)\n                {\n                    if (idType != longType && idType != intType)\n                    {\n                        isInvalid = true;\n                    }\n\n                }\n                else if (!idPropertyType.GetTypeInfo().IsAssignableFrom(idType.GetTypeInfo()))\n                {\n                    isInvalid = true;\n                }\n\n                if (isInvalid)\n                {\n                    throw new InvalidOperationException(\n                    string.Format(\"The id parameter type '{0}' is invalid for looking up items of type '{1}'.\",\n                        id.GetType().FullName,\n                        typeof(T).FullName));\n                }\n\n            }\n            else if (idPropertyType.GetTypeInfo().IsValueType)\n            {\n                throw new InvalidOperationException(\n                     string.Format(\"The id parameter type '{0}' is invalid for looking up items of type '{1}'.\",\n                         \"<null>\",\n                         typeof(T).FullName));\n            }\n\n        }\n\n        /// <summary>\n        /// Sets the instance's id property value to the default id value.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance on which to clear the id property.\n        /// </param>\n        public static void SetIdToDefault(JObject instance)\n        {\n            if (instance != null)\n            {\n                instance[MobileServiceSystemColumns.Id] = null;\n            }\n        }\n\n        /// <summary>\n        /// Gets the value of the id property from an instance.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to get the id property value from.\n        /// </param>\n        /// <param name=\"ignoreCase\">\n        /// Set to true to find any variant spelling of the id is in the object\n        /// </param>\n        /// <param name=\"allowDefault\">\n        /// Indicates if a defualt value for the id is considered valid.\n        /// </param> \n        /// <returns>\n        /// The id property value.\n        /// </returns>\n        public object GetId(object instance, bool ignoreCase = false, bool allowDefault = false)\n        {\n            Debug.Assert(instance != null);\n\n            object id = null;\n\n            JObject jobject = instance as JObject;\n            if (jobject != null)\n            {\n                id = GetId(jobject, ignoreCase, allowDefault);\n            }\n            else\n            {\n                JsonProperty idProperty = this.SerializerSettings.ContractResolver.ResolveIdProperty(instance.GetType());\n                id = idProperty.ValueProvider.GetValue(instance);\n                EnsureValidId(id, allowDefault);\n            }\n\n            return id;\n        }\n\n        /// <summary>\n        /// Returns the type of the Id property for items of the given type.\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the item that should have an id property.</typeparam>\n        /// <returns>\n        /// The type of the Id property for items of the given type, or null if the type does not\n        /// have an Id property.\n        /// </returns>\n        public Type GetIdPropertyType<T>(bool throwIfNotFound = true)\n        {\n            Type idPropertyType = null;\n            JsonProperty idProperty = this.SerializerSettings.ContractResolver.ResolveIdProperty(typeof(T), throwIfNotFound);\n\n            if (idProperty != null)\n            {\n                idPropertyType = idProperty.PropertyType;\n            }\n\n            return idPropertyType;\n        }\n\n        /// <summary>\n        /// Indicates if the id value is the default id value.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id value to determine if it is the default.\n        /// </param>\n        /// <returns>\n        /// <c>true</c> if the id value is the default value;\n        /// <c>false</c> otherwise.\n        /// </returns>\n        public static bool IsDefaultId(object id)\n        {\n            return id == null ||\n                   object.Equals(id, 0L) ||\n                   object.Equals(id, 0) ||\n                   (id is string && string.IsNullOrEmpty((string)id)) ||\n                   object.Equals(id, 0.0) ||\n                   object.Equals(id, 0.0F) ||\n                   object.Equals(id, 0.0M);\n        }\n\n        /// <summary>\n        /// Sets the instance's id property value to the default id value.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance on which to clear the id property.\n        /// </param>\n        public void SetIdToDefault(object instance)\n        {\n            Debug.Assert(instance != null);\n\n            JObject jobject = instance as JObject;\n            if (jobject != null)\n            {\n                SetIdToDefault(jobject);\n            }\n            else\n            {\n                JsonProperty idProperty = this.SerializerSettings.ContractResolver.ResolveIdProperty(instance.GetType());\n                idProperty.ValueProvider.SetValue(instance, null);\n            }\n        }\n\n        /// <summary>\n        /// Deserializes an array of JSON values into a collection of objects.\n        /// </summary>\n        /// <param name=\"json\">\n        /// The JSON array.\n        /// </param>\n        /// <param name=\"type\">\n        /// The type to deserialize objects into.\n        /// </param>\n        /// <returns>\n        /// The collection of deserialized instances.\n        /// </returns>\n        public IEnumerable<object> Deserialize(JArray json, Type type)\n        {\n            Debug.Assert(json != null);\n            Debug.Assert(type != null);\n\n            JsonSerializer jsonSerializer = this.SerializerSettings.GetSerializerFromSettings();\n            return json.Select(jtoken => jtoken.ToObject(type, jsonSerializer));\n        }\n\n        /// <summary>\n        /// Deserializes an array of JSON values into a collection of objects.\n        /// </summary>\n        /// <typeparam name=\"T\">\n        /// The type of objects to deserialize to.\n        /// </typeparam>\n        /// <param name=\"json\">\n        /// The JSON array.\n        /// </param>\n        /// <returns>\n        /// The collection of deserialized instances.\n        /// </returns>\n        public IEnumerable<T> Deserialize<T>(JArray json)\n        {\n            Debug.Assert(json != null);\n\n            JsonSerializer jsonSerializer = this.SerializerSettings.GetSerializerFromSettings();\n            return json.Select(jtoken => Deserialize<T>(jtoken, jsonSerializer));\n        }\n\n        /// <summary>\n        /// Deserializes a JSON string into an instance of type T.\n        /// </summary>\n        /// <typeparam name=\"T\">\n        /// The type of object to deserialize.\n        /// </typeparam>\n        /// <param name=\"json\">\n        /// The JSON string.\n        /// </param>\n        /// <returns>\n        /// The deserialized instance.\n        /// </returns>\n        public T Deserialize<T>(JToken json)\n        {\n            Debug.Assert(json != null);\n\n            JsonSerializer jsonSerializer = this.SerializerSettings.GetSerializerFromSettings();\n            return Deserialize<T>(json, jsonSerializer);\n        }        \n\n        /// <summary>\n        /// Deserializes a JSON string into an instance.\n        /// </summary>\n        /// <remarks>\n        /// This method uses JSON.Net's <see cref=\"JsonConvert.PopulateObject(string, object)\"/>\n        /// API to set the member values on the instance from the values\n        /// in the JSON string.\n        /// </remarks>\n        /// <typeparam name=\"T\">\n        /// The type of object to deserialize into.\n        /// </typeparam>\n        /// <param name=\"json\">\n        /// The JSON.\n        /// </param>\n        /// <param name=\"instance\">\n        /// The instance to deserialize into.\n        /// </param>\n        public void Deserialize<T>(JToken json, T instance)\n        {\n            Debug.Assert(json != null);\n            Debug.Assert(instance != null);\n\n            TransformSerializationException<T>(() =>\n            {\n                JsonConvert.PopulateObject(json.ToString(), instance, this.SerializerSettings);\n            }, json);\n        }\n\n        /// <summary>\n        /// Serializes an instance into a JSON string.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to serialize.\n        /// </param>\n        /// <returns>\n        /// The instance serialized into a JToken.\n        /// </returns>\n        public JToken Serialize(object instance)\n        {\n            Debug.Assert(instance != null);\n\n            JsonSerializer jsonSerializer = this.SerializerSettings.GetSerializerFromSettings();\n            return JToken.FromObject(instance, jsonSerializer);\n        }\n\n        private T Deserialize<T>(JToken json, JsonSerializer jsonSerializer)\n        {\n            T result = default(T);\n            TransformSerializationException<T>(() =>\n            {\n                result = json.ToObject<T>(jsonSerializer);\n            }, json);\n            return result;\n        }\n\n        private void TransformSerializationException<T>(Action action, JToken token)\n        {\n            try\n            {\n                action();\n            }\n            catch (JsonSerializationException ex)\n            {\n                var obj = token as JObject;\n                if (obj == null)\n                {\n                    throw;\n                }\n              \n                object id;\n                bool idTokenIsString = TryGetId(obj, true, out id) && id.GetType() == typeof(string);\n\n                JsonProperty idProperty = this.SerializerSettings.ContractResolver.ResolveIdProperty(typeof(T), throwIfNotFound: false);\n                bool idPropertyIsInteger = idProperty != null && IsIntegerId(idProperty);\n                \n                if (idTokenIsString && idPropertyIsInteger)\n                {\n                    throw new JsonSerializationException(ex.Message + Environment.NewLine + \"You might be affected by Mobile Services latest changes to support string Ids. For more details: http://go.microsoft.com/fwlink/?LinkId=330396\", ex);\n                }\n\n                throw;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Serialization/UpdatedAtAttribute.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Attribute applied to a member of a type to specify that it represents\n    /// the __updatedAt system property.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]\n    public class UpdatedAtAttribute : Attribute, ISystemPropertyAttribute\n    {\n        /// <summary>\n        /// Initializes a new instance of the UpdatedAtAttribute class.\n        /// </summary>\n        public UpdatedAtAttribute()\n        {\n        }\n\n        /// <summary>\n        /// Gets the system property the attribute represents.\n        /// </summary>\n        MobileServiceSystemProperties ISystemPropertyAttribute.SystemProperty\n        {\n            get \n            {\n                return MobileServiceSystemProperties.UpdatedAt;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Serialization/VersionAttribute.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Attribute applied to a member of a type to specify that it represents\n    /// the __version system property.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]\n    public class VersionAttribute :  Attribute, ISystemPropertyAttribute\n    {\n        /// <summary>\n        /// Initializes a new instance of the VersionAttribute class.\n        /// </summary>\n        public VersionAttribute()\n        {\n        }\n\n        /// <summary>\n        /// Gets the system property the attribute represents.\n        /// </summary>\n        MobileServiceSystemProperties ISystemPropertyAttribute.SystemProperty\n        {\n            get \n            {\n                return MobileServiceSystemProperties.Version;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/IMobileServiceLocalStore.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Allows saving and reading data in the local tables.\n    /// </summary>\n    public interface IMobileServiceLocalStore : IDisposable\n    {\n        /// <summary>\n        /// Initializes the store for use.\n        /// </summary>\n        /// <returns>A task that completes when store has initialized.</returns>\n        Task InitializeAsync();\n\n        /// <summary>\n        /// Reads data from local table by executing the query.\n        /// </summary>\n        /// <param name=\"query\">Instance of <see cref=\"MobileServiceTableQueryDescription\"/> that defines the query to be executed on local table.</param>\n        /// <returns>A task that returns instance of JObject or JArray with items matching the query.</returns>\n        Task<JToken> ReadAsync(MobileServiceTableQueryDescription query);\n\n        /// <summary>\n        /// Updates or inserts data in local table.\n        /// </summary>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"items\">A list of items to be inserted.</param>\n        /// <param name=\"ignoreMissingColumns\"><code>true</code> if the extra properties on item can be ignored; <code>false</code> otherwise.</param>\n        /// <returns>A task that completes when item has been upserted in local table.</returns>\n        Task UpsertAsync(string tableName, IEnumerable<JObject> items, bool ignoreMissingColumns);\n\n        /// <summary>\n        /// Deletes all the items from local table that match the query.\n        /// </summary>\n        /// <param name=\"query\">Instance of <see cref=\"MobileServiceTableQueryDescription\"/></param>\n        /// <returns>A task that completes when delete has been executed on local table.</returns>\n        Task DeleteAsync(MobileServiceTableQueryDescription query);\n\n        /// <summary>\n        /// Deletes items from local table with the given list of ids\n        /// </summary>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"ids\">A list of ids of the items to be deleted</param>\n        /// <returns>A task that completes when delete query has executed.</returns>\n        Task DeleteAsync(string tableName, IEnumerable<string> ids);\n\n        /// <summary>\n        /// Reads a single item from local table with specified id.\n        /// </summary>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"id\">Id for the object to be read.</param>\n        /// <returns>A task that returns the item read from local table.</returns>\n        Task<JObject> LookupAsync(string tableName, string id);\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/IMobileServiceSyncContext.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Provides a way to synchronize local database with remote database.\n    /// </summary>\n    public interface IMobileServiceSyncContext\n    {\n        /// <summary>\n        /// An instance of <see cref=\"IMobileServiceLocalStore\"/>\n        /// </summary>\n        IMobileServiceLocalStore Store { get; }\n\n        /// <summary>\n        /// An instance of <see cref=\"IMobileServiceSyncHandler\"/>\n        /// </summary>\n        IMobileServiceSyncHandler Handler { get; }\n\n        /// <summary>\n        /// Indicates whether sync context has been initialized or not.\n        /// </summary>\n        bool IsInitialized { get; }\n\n        /// <summary>\n        /// Initializes the sync context.\n        /// </summary>\n        /// <param name=\"store\">An instance of <see cref=\"IMobileServiceLocalStore\"/>.</param>\n        /// <param name=\"handler\">An instance of <see cref=\"IMobileServiceSyncHandler\"/></param>\n        /// <returns>A task that completes when sync context has initialized.</returns>\n        Task InitializeAsync(IMobileServiceLocalStore store, IMobileServiceSyncHandler handler);\n\n        /// <summary>\n        /// Returns the number of pending operations that are not yet pushed to remote table.\n        /// </summary>\n        /// <returns>Returns the number of pending operations against the remote table.</returns>\n        long PendingOperations { get; }\n\n        /// <summary>\n        /// Pushes all pending operations up to the remote table.\n        /// </summary>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe</param>\n        /// <returns>A task that completes when pull operation has finished.</returns>\n        Task PushAsync(CancellationToken cancellationToken);\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/IMobileServiceSyncHandler.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Handles table operation errors and push completion results.\n    /// </summary>\n    public interface IMobileServiceSyncHandler\n    {\n        /// <summary>\n        /// A method that is called when push operation has completed.\n        /// </summary>\n        /// <param name=\"result\">An instance of <see cref=\"MobileServicePushCompletionResult\"/></param>\n        /// <returns>Task that completes when result has been handled.</returns>\n        Task OnPushCompleteAsync(MobileServicePushCompletionResult result);\n\n        /// <summary>\n        /// A method that is called to execute a single table operation against remote table.\n        /// </summary>\n        /// <param name=\"operation\">Instance of <see cref=\"IMobileServiceTableOperation\"/> that represents a remote table operation.</param>\n        /// <returns>Task that returns the server version of the item.</returns>\n        Task<JObject> ExecuteTableOperationAsync(IMobileServiceTableOperation operation);\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/IMobileServiceSyncTable.Generic.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Linq.Expressions;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Provides operations on local table.\n    /// </summary>\n    public interface IMobileServiceSyncTable<T> : IMobileServiceSyncTable\n    {\n        /// <summary>\n        /// Returns instances from a table.\n        /// </summary>\n        /// <returns>\n        /// Instances from the table.\n        /// </returns>\n        /// <remarks>\n        /// This call will not handle paging, etc., for you.\n        /// </remarks>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"It does not appear nested when used via the async pattern.\")]\n        Task<IEnumerable<T>> ReadAsync();\n\n        /// <summary>\n        /// Returns instances from a table based on a query.\n        /// </summary>\n        /// <typeparam name=\"U\">\n        /// The type of instance returned by the query.\n        /// </typeparam>\n        /// <param name=\"query\">\n        /// The query to execute.\n        /// </param>\n        /// <returns>\n        /// Instances from the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"It does not appear nested when used via the async pattern.\")]\n        Task<IEnumerable<U>> ReadAsync<U>(IMobileServiceTableQuery<U> query);\n\n        /// <summary>\n        /// Refresh the current instance with the latest values from the\n        /// local table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to refresh.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the refresh has finished.\n        /// </returns>\n        Task RefreshAsync(T instance);\n\n        /// <summary>\n        /// Inserts an <paramref name=\"instance\"/> into the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to insert into the table.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the insert finishes.\n        /// </returns>\n        Task InsertAsync(T instance);\n\n\n        /// <summary>\n        /// Updates an <paramref name=\"instance\"/> in the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to update in the table.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the update finishes.\n        /// </returns>\n        Task UpdateAsync(T instance);\n\n        /// <summary>\n        /// Deletes an <paramref name=\"instance\"/> from the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to delete from the table.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the delete finishes.\n        /// </returns>\n        Task DeleteAsync(T instance);\n\n        /// <summary>\n        /// Pulls all items that match the given query from the associated remote table.\n        /// </summary>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter enables incremental sync whenever the same key is used again.\n        /// </param>\n        /// <param name=\"query\">\n        /// An OData query that determines which items to \n        /// pull from the remote table.\n        /// </param>\n        /// <param name=\"pushOtherTables\">\n        /// Push other tables if this table is dirty\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe\n        /// </param>\n        /// <param name=\"pullOptions\">\n        /// PullOptions that determine how to pull data from the remote table\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        Task PullAsync<U>(string queryId, IMobileServiceTableQuery<U> query, bool pushOtherTables, CancellationToken cancellationToken, PullOptions pullOptions);\n\n        /// <summary>\n        /// Deletes all the items in local table that match the query.\n        /// </summary>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter resets the incremental sync state for the query.\n        /// </param>\n        /// <param name=\"query\">An OData query that determines which items to delete.</param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe\n        /// </param>\n        /// <returns>A task that completes when purge operation has finished.</returns>\n        Task PurgeAsync<U>(string queryId, IMobileServiceTableQuery<U> query, CancellationToken cancellationToken);\n\n        /// <summary>\n        /// Lookup an instance from a table by its id.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id of the instance.\n        /// </param>\n        /// <returns>\n        /// The desired instance.\n        /// </returns>\n        new Task<T> LookupAsync(string id);\n\n        /// <summary>\n        /// Creates a query for the current table.\n        /// </summary>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        IMobileServiceTableQuery<T> CreateQuery();\n\n        /// <summary>\n        /// Creates a query that will ensure it gets the total count for all\n        /// the records that would have been returned ignoring any take paging/\n        /// limit clause specified by client or server.\n        /// </summary>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        IMobileServiceTableQuery<T> IncludeTotalCount();\n\n        /// <summary>\n        /// Creates a query by applying the specified filter predicate.\n        /// </summary>\n        /// <param name=\"predicate\">\n        /// The filter predicate.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        IMobileServiceTableQuery<T> Where(Expression<Func<T, bool>> predicate);\n\n        /// <summary>\n        /// Creates a query by applying the specified selection.\n        /// </summary>\n        /// <typeparam name=\"U\">\n        /// Type representing the projected result of the query.\n        /// </typeparam>\n        /// <param name=\"selector\">\n        /// The selector function.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1715:IdentifiersShouldHaveCorrectPrefix\", MessageId = \"T\", Justification = \"Standard for LINQ\")]\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1716:IdentifiersShouldNotMatchKeywords\", MessageId = \"Select\", Justification = \"Part of the LINQ query pattern.\")]\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1704:IdentifiersShouldBeSpelledCorrectly\", MessageId = \"U\", Justification = \"Standard for LINQ\")]\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        IMobileServiceTableQuery<U> Select<U>(Expression<Func<T, U>> selector);\n\n        /// <summary>\n        /// Creates a query by applying the specified ascending order clause.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        IMobileServiceTableQuery<T> OrderBy<TKey>(Expression<Func<T, TKey>> keySelector);\n\n        /// <summary>\n        /// Creates a query by applying the specified descending order clause.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        IMobileServiceTableQuery<T> OrderByDescending<TKey>(Expression<Func<T, TKey>> keySelector);\n\n        /// <summary>\n        /// Creates a query by applying the specified ascending order clause.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        IMobileServiceTableQuery<T> ThenBy<TKey>(Expression<Func<T, TKey>> keySelector);\n\n        /// <summary>\n        /// Creates a query by applying the specified descending order clause.\n        /// </summary>\n        /// <typeparam name=\"TKey\">\n        /// The type of the member being ordered by.\n        /// </typeparam>\n        /// <param name=\"keySelector\">\n        /// The expression selecting the member to order by.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        IMobileServiceTableQuery<T> ThenByDescending<TKey>(Expression<Func<T, TKey>> keySelector);\n\n        /// <summary>\n        /// Creates a query by applying the specified skip clause.\n        /// </summary>\n        /// <param name=\"count\">\n        /// The number to skip.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        IMobileServiceTableQuery<T> Skip(int count);\n\n        /// <summary>\n        /// Creates a query by applying the specified take clause.\n        /// </summary>\n        /// <param name=\"count\">\n        /// The number to take.\n        /// </param>\n        /// <returns>\n        /// A query against the table.\n        /// </returns>\n        IMobileServiceTableQuery<T> Take(int count);\n\n        /// <summary>\n        /// Gets the elements of the table asynchronously.\n        /// </summary>\n        /// <returns>\n        /// The table elements results as a sequence.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Not nested when used via async pattern.\")]\n        Task<IEnumerable<T>> ToEnumerableAsync();\n\n        /// <summary>\n        /// Gets the elements of the table asynchronously and return the\n        /// results in a new List.\n        /// </summary>\n        /// <returns>\n        /// The table elements results as a List.\n        /// </returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Not nested when used via async pattern.\")]\n        Task<List<T>> ToListAsync();\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/IMobileServiceSyncTable.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Provides operations on local table.\n    /// </summary>\n    public interface IMobileServiceSyncTable\n    {\n        /// <summary>\n        /// Gets a reference to the <see cref=\"MobileServiceClient\"/> associated \n        /// with this table.\n        /// </summary>\n        MobileServiceClient MobileServiceClient { get; }\n\n        /// <summary>\n        /// Gets the name of the table.\n        /// </summary>\n        string TableName { get; }\n\n        /// <summary>\n        /// The supported odata options on the remote table\n        /// </summary>\n        MobileServiceRemoteTableOptions SupportedOptions { get; set; }\n\n        /// <summary>\n        /// Executes a query against the table.\n        /// </summary>\n        /// <param name=\"query\">\n        /// A query to execute.\n        /// </param>\n        /// <returns>\n        /// A task that will return with results when the query finishes.\n        /// </returns>\n        Task<JToken> ReadAsync(string query);\n\n        /// <summary>\n        /// Inserts an <paramref name=\"instance\"/> into the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to insert into the table.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the insert finishes.\n        /// </returns>\n        Task<JObject> InsertAsync(JObject instance);\n\n        /// <summary>\n        /// Updates an <paramref name=\"instance\"/> in the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to update in the table.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the update finishes.\n        /// </returns>\n        Task UpdateAsync(JObject instance);\n\n        /// <summary>\n        /// Deletes an <paramref name=\"instance\"/> from the table.\n        /// </summary>\n        /// <param name=\"instance\">\n        /// The instance to delete from the table.\n        /// </param>\n        /// <returns>\n        /// A task that will complete when the delete finishes.\n        /// </returns>\n        Task DeleteAsync(JObject instance);\n\n        /// <summary>\n        /// Executes a lookup against a table.\n        /// </summary>\n        /// <param name=\"id\">\n        /// The id of the instance to lookup.\n        /// </param>\n        /// <returns>\n        /// A task that will return with a result when the lookup finishes.\n        /// </returns>\n        Task<JObject> LookupAsync(string id);\n\n        /// <summary>\n        /// Pulls all items that match the given query from the associated remote table. Supports incremental sync.\n        /// </summary>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter enables incremental sync whenever the same key is used again.\n        /// </param>\n        /// <param name=\"query\">\n        /// An OData query that determines which items to \n        /// pull from the remote table.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.\n        /// </param>\n        /// <param name=\"pushOtherTables\">\n        /// Push other tables if this table is dirty.\n        /// </param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe\n        /// </param>\n        /// <param name=\"pullOptions\">\n        /// PullOptions that determine how to pull data from the remote table\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        Task PullAsync(string queryId, string query, IDictionary<string, string> parameters, bool pushOtherTables, CancellationToken cancellationToken, PullOptions pullOptions);\n\n        /// <summary>\n        /// Deletes all the items in local table that match the query.\n        /// </summary>\n        /// <param name=\"queryId\">\n        /// A string that uniquely identifies this query and is used to keep track of its sync state. Supplying this parameter resets the incremental sync state for the query.\n        /// </param>\n        /// <param name=\"query\">An OData query that determines which items to delete.</param>\n        /// <param name=\"force\">Force the purge by discarding the pending operations.</param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe\n        /// </param>\n        /// <returns>A task that completes when purge operation has finished.</returns>\n        Task PurgeAsync(string queryId, string query, bool force, CancellationToken cancellationToken);\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/MobileServiceLocalStore.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Base implementation for <see cref=\"IMobileServiceLocalStore\"/>\n    /// </summary>\n    public abstract class MobileServiceLocalStore: IMobileServiceLocalStore\n    {\n        /// <summary>\n        /// Indicates whether store has been initialized or not.\n        /// </summary>\n        protected bool Initialized { get; private set; }\n\n        /// <summary>\n        /// Initializes the store for use.\n        /// </summary>\n        /// <returns>A task that completes when store has initialized.</returns>\n        public virtual async Task InitializeAsync()\n        {\n            if (this.Initialized)\n            {\n                throw new InvalidOperationException(\"The store is already initialized.\");\n            }\n\n            MobileServiceLocalSystemTables.DefineAll(this);\n\n            await this.OnInitialize();\n\n            this.Initialized = true;\n        }\n\n        /// <summary>\n        /// Executed when Initilize is called on the store instance.\n        /// </summary>\n        /// <returns></returns>\n        protected virtual Task OnInitialize()\n        {\n            return Task.FromResult(0);\n        }\n\n        /// <summary>\n        /// Defines the local table on the store.\n        /// </summary>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"item\">An object that represents the structure of the table.</param>\n        public virtual void DefineTable(string tableName, JObject item)\n        {\n        }\n\n        /// <summary>\n        /// Reads data from local table by executing the query.\n        /// </summary>\n        /// <param name=\"query\">Instance of <see cref=\"MobileServiceTableQueryDescription\"/> that defines the query to be executed on local table.</param>\n        /// <returns>A task that returns instance of JObject or JArray with items matching the query.</returns>\n        public abstract Task<JToken> ReadAsync(MobileServiceTableQueryDescription query);\n\n        /// <summary>\n        /// Updates or inserts data in local table.\n        /// </summary>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"items\">A list of items to be inserted.</param>\n        /// <param name=\"ignoreMissingColumns\"><code>true</code> if the extra properties on item can be ignored; <code>false</code> otherwise.</param>        \n        /// <returns>A task that completes when item has been upserted in local table.</returns>\n        public abstract Task UpsertAsync(string tableName, IEnumerable<JObject> items, bool ignoreMissingColumns);\n\n        /// <summary>\n        /// Deletes all the items from local table that match the query.\n        /// </summary>\n        /// <param name=\"query\">Instance of <see cref=\"MobileServiceTableQueryDescription\"/></param>\n        /// <returns>A task that completes when delete has been executed on local table.</returns>\n        public abstract Task DeleteAsync(MobileServiceTableQueryDescription query);\n\n        /// <summary>\n        /// Deletes items from local table with the given list of ids\n        /// </summary>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"ids\">A list of ids of the items to be deleted</param>\n        /// <returns>A task that completes when delete query has executed.</returns>\n        public abstract Task DeleteAsync(string tableName, IEnumerable<string> ids);\n\n        /// <summary>\n        /// Reads a single item from local table with specified id.\n        /// </summary>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"id\">Id for the object to be read.</param>\n        /// <returns>A task that returns the item read from local table.</returns>\n        public abstract Task<JObject> LookupAsync(string tableName, string id);\n\n        /// <summary>\n        /// Throws an exception if store is not initialized.\n        /// </summary>\n        protected void EnsureInitialized()\n        {\n            if (!this.Initialized)\n            {\n                throw new InvalidOperationException(\"The store must be initialized before it can be used.\");\n            }\n        }\n\n        /// <summary>\n        /// Dispose the instance\n        /// </summary>\n        public void Dispose()\n        {\n            this.Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Executed to clean up resources\n        /// </summary>\n        /// <param name=\"disposing\"></param>\n        protected virtual void Dispose(bool disposing)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/MobileServiceLocalSystemTables.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Names of tables in local store that are reserved by sync framework\n    /// </summary>\n    public static class MobileServiceLocalSystemTables\n    {\n        /// <summary>\n        /// Table that stores operation queue items\n        /// </summary>\n        public static readonly string OperationQueue = \"__operations\";\n\n        /// <summary>\n        /// Table that stores sync errors\n        /// </summary>\n        public static readonly string SyncErrors = \"__errors\";\n\n        /// <summary>\n        /// Configuration settings related to sync framework\n        /// </summary>\n        public static readonly string Config = \"__config\";\n\n        /// <summary>\n        /// Returns the names of all system tables\n        /// </summary>\n        public static IEnumerable<string> All { get; private set; }\n\n        /// <summary>\n        ///  Defines all the system tables on the store\n        /// </summary>\n        /// <param name=\"store\">An instance of <see cref=\"IMobileServiceLocalStore\"/></param>\n        public static void DefineAll(MobileServiceLocalStore store)\n        {\n            MobileServiceTableOperation.DefineTable(store);\n            MobileServiceTableOperationError.DefineTable(store);\n            MobileServiceSyncSettingsManager.DefineTable(store);            \n        }\n\n        static MobileServiceLocalSystemTables()\n        {\n            All = new [] { OperationQueue, SyncErrors, Config };\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/MobileServicePushCompletionResult.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Gives you errors and status of the push completion.\n    /// </summary>\n    public class MobileServicePushCompletionResult\n    {\n        /// <summary>\n        /// Errors caused by executing operation against remote table.\n        /// </summary>\n        public ReadOnlyCollection<MobileServiceTableOperationError> Errors { get; private set; }\n\n        /// <summary>\n        /// The state in which push completed.\n        /// </summary>\n        public MobileServicePushStatus Status { get; private set; }\n\n        /// <summary>\n        /// Initializes a new instance of <see cref=\"MobileServicePushCompletionResult\"/>\n        /// </summary>\n        /// <param name=\"errors\">Collection of errors that occured on executing operation on remote table.</param>\n        /// <param name=\"status\">The state in which push completed.</param>\n        public MobileServicePushCompletionResult(IEnumerable<MobileServiceTableOperationError> errors, MobileServicePushStatus status)\n        {\n            this.Errors = new ReadOnlyCollection<MobileServiceTableOperationError>(errors as IList<MobileServiceTableOperationError> ?? new List<MobileServiceTableOperationError>(errors));\n            this.Status = status;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/MobileServicePushStatus.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// State in which push completed.\n    /// </summary>\n    public enum MobileServicePushStatus\n    {\n        /// <summary>\n        /// All table operations in the push action were completed, possibly with errors.\n        /// </summary>\n        Complete = 0,\n\n        /// <summary>\n        /// Push was aborted due to network error.\n        /// </summary>\n        CancelledByNetworkError = 1,\n        \n        /// <summary>\n        /// Push was aborted due to authentication error.\n        /// </summary>\n        CancelledByAuthenticationError = 2,\n        \n        /// <summary>\n        /// Push was aborted due to error from sync store.\n        /// </summary>\n        CancelledBySyncStoreError = 3,\n        \n        /// <summary>\n        /// Push was aborted due to cancellation.\n        /// </summary>\n        CancelledByToken = 4,\n\n        /// <summary>\n        /// Push was aborted by <see cref=\"IMobileServiceTableOperation\"/>.\n        /// </summary>\n        CancelledByOperation = 5,\n\n        /// <summary>\n        /// Push failed due to an internal error.\n        /// </summary>\n        InternalError = Int32.MaxValue\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/MobileServiceRemoteTableOptions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// A flags enum for the capabilities of remote table.\n    /// </summary>\n    [Flags]\n    public enum MobileServiceRemoteTableOptions\n    {\n        /// <summary>\n        /// No options are supported\n        /// </summary>\n        None = 0x0,\n\n        /// <summary>\n        /// $skip odata option\n        /// </summary>\n        Skip = 0x1,\n\n        /// <summary>\n        /// $top odata option\n        /// </summary>\n        Top = 0x2,\n\n        /// <summary>\n        /// $orderby odata option\n        /// </summary>\n        OrderBy = 0x4,\n\n        /// <summary>\n        /// All options are supported\n        /// </summary>\n        All = 0xFFFF\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/MobileServiceSyncContext.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Microsoft.WindowsAzure.MobileServices.Threading;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    internal class MobileServiceSyncContext : IMobileServiceSyncContext, IDisposable\n    {\n        private MobileServiceSyncSettingsManager settings;\n        private TaskCompletionSource<object> initializeTask;\n        private MobileServiceClient client;\n\n        /// <summary>\n        /// Lock to ensure that multiple insert,update,delete operations don't interleave as they are added to queue and storage\n        /// </summary>\n        private AsyncReaderWriterLock storeQueueLock = new AsyncReaderWriterLock();\n\n        /// <summary>\n        /// Variable for Store property. Not meant to be accessed directly.\n        /// </summary>\n        private IMobileServiceLocalStore _store;\n\n        /// <summary>\n        /// Queue for executing sync calls (push,pull) one after the other\n        /// </summary>\n        private ActionBlock syncQueue;\n\n        /// <summary>\n        /// Queue for pending operations (insert,delete,update) against remote table \n        /// </summary>\n        private OperationQueue opQueue;\n\n        public IMobileServiceSyncHandler Handler { get; private set; }\n\n        public IMobileServiceLocalStore Store\n        {\n            get { return this._store; }\n            private set\n            {\n                IMobileServiceLocalStore oldStore = this._store;\n                this._store = value;\n                if (oldStore != null)\n                {\n                    oldStore.Dispose();\n                }\n            }\n        }\n\n        public bool IsInitialized\n        {\n            get { return this.initializeTask != null && this.initializeTask.Task.Status == TaskStatus.RanToCompletion; }\n        }\n\n        public MobileServiceSyncContext(MobileServiceClient client)\n        {\n            if (client == null)\n            {\n                throw new ArgumentNullException(\"client\");\n            }\n\n            this.client = client;\n        }\n\n        public long PendingOperations\n        {\n            get\n            {\n                if (!this.IsInitialized)\n                {\n                    return 0;\n                }\n                return this.opQueue.PendingOperations;\n            }\n        }\n\n        public async Task InitializeAsync(IMobileServiceLocalStore store, IMobileServiceSyncHandler handler)\n        {\n            if (store == null)\n            {\n                throw new ArgumentNullException(\"store\");\n            }\n            handler = handler ?? new MobileServiceSyncHandler();\n\n            this.initializeTask = new TaskCompletionSource<object>();\n\n            using (await this.storeQueueLock.WriterLockAsync())\n            {\n                this.Handler = handler;\n                this.Store = store;\n\n                this.syncQueue = new ActionBlock();\n                await this.Store.InitializeAsync();\n                this.opQueue = await OperationQueue.LoadAsync(store);\n                this.settings = new MobileServiceSyncSettingsManager(store);\n                this.initializeTask.SetResult(null);\n            }\n        }\n\n        public async Task<JToken> ReadAsync(string tableName, string query)\n        {\n            await this.EnsureInitializedAsync();\n\n            var queryDescription = MobileServiceTableQueryDescription.Parse(tableName, query);\n            using (await this.storeQueueLock.ReaderLockAsync())\n            {\n                return await this.Store.ReadAsync(queryDescription);\n            }\n        }\n\n        public async Task InsertAsync(string tableName, MobileServiceTableKind tableKind, string id, JObject item)\n        {\n            var operation = new InsertOperation(tableName, tableKind, id)\n            {\n                Table = await this.GetTable(tableName)\n            };\n\n            await this.ExecuteOperationAsync(operation, item);\n        }\n\n        public async Task UpdateAsync(string tableName, MobileServiceTableKind tableKind, string id, JObject item)\n        {\n            var operation = new UpdateOperation(tableName, tableKind, id)\n            {\n                Table = await this.GetTable(tableName)\n            };\n\n            await this.ExecuteOperationAsync(operation, item);\n        }\n\n        public async Task DeleteAsync(string tableName, MobileServiceTableKind tableKind, string id, JObject item)\n        {\n            var operation = new DeleteOperation(tableName, tableKind, id)\n            {\n                Table = await this.GetTable(tableName),\n                Item = item // item will be deleted from store, so we need to put it in the operation queue\n            };\n\n            await this.ExecuteOperationAsync(operation, item);\n        }\n\n        public async Task<JObject> LookupAsync(string tableName, string id)\n        {\n            await this.EnsureInitializedAsync();\n\n            return await this.Store.LookupAsync(tableName, id);\n        }\n\n        /// <summary>\n        /// Pulls all items that match the given query from the associated remote table.\n        /// </summary>\n        /// <param name=\"tableName\">The name of table to pull</param>\n        /// <param name=\"tableKind\">The kind of table</param>\n        /// <param name=\"queryId\">A string that uniquely identifies this query and is used to keep track of its sync state.</param>\n        /// <param name=\"query\">An OData query that determines which items to \n        /// pull from the remote table.</param>\n        /// <param name=\"options\">An instance of <see cref=\"MobileServiceRemoteTableOptions\"/></param>\n        /// <param name=\"parameters\">A dictionary of user-defined parameters and values to include in \n        /// the request URI query string.</param>\n        /// <param name=\"relatedTables\">\n        /// List of tables that may have related records that need to be push before this table is pulled down.\n        /// When no table is specified, all tables are considered related.\n        /// </param>\n        /// <param name=\"reader\">An instance of <see cref=\"MobileServiceObjectReader\"/></param>\n        /// <param name=\"cancellationToken\">The <see cref=\"System.Threading.CancellationToken\"/> token to observe\n        /// </param>\n        /// <param name=\"pullOptions\">\n        /// PullOptions that determine how to pull data from the remote table\n        /// </param>\n        /// <returns>\n        /// A task that completes when pull operation has finished.\n        /// </returns>\n        public async Task PullAsync(string tableName, MobileServiceTableKind tableKind, string queryId, string query, MobileServiceRemoteTableOptions options, IDictionary<string, string> parameters, IEnumerable<string> relatedTables, MobileServiceObjectReader reader, CancellationToken cancellationToken, PullOptions pullOptions)\n        {\n            await this.EnsureInitializedAsync();\n\n            if (parameters != null)\n            {\n                if (parameters.Keys.Any(k => k.Equals(MobileServiceTable.IncludeDeletedParameterName, StringComparison.OrdinalIgnoreCase)))\n                {\n                    throw new ArgumentException(\"The key '{0}' is reserved and cannot be specified as a query parameter.\".FormatInvariant(MobileServiceTable.IncludeDeletedParameterName));\n                }\n\n                if (parameters.Keys.Any(k => k.Equals(MobileServiceTable.SystemPropertiesQueryParameterName, StringComparison.OrdinalIgnoreCase)))\n                {\n                    throw new ArgumentException(\"The key '{0}' is reserved and cannot be specified as a query parameter.\".FormatInvariant(MobileServiceTable.SystemPropertiesQueryParameterName));\n                }\n            }\n\n            var table = await this.GetTable(tableName);\n            var queryDescription = MobileServiceTableQueryDescription.Parse(this.client.ApplicationUri, tableName, query);\n\n\n            // local schema should be same as remote schema otherwise push can't function\n            if (queryDescription.Selection.Any() || queryDescription.Projections.Any())\n            {\n                throw new ArgumentException(\"Pull query with select clause is not supported.\", \"query\");\n            }\n\n            bool isIncrementalSync = !String.IsNullOrEmpty(queryId);\n            if (isIncrementalSync)\n            {\n                if (queryDescription.Ordering.Any())\n                {\n                    throw new ArgumentException(\"Incremental pull query must not have orderby clause.\", \"query\");\n                }\n                if (queryDescription.Top.HasValue || queryDescription.Skip.HasValue)\n                {\n                    throw new ArgumentException(\"Incremental pull query must not have skip or top specified.\", \"query\");\n                }\n            }\n\n            if (!options.HasFlag(MobileServiceRemoteTableOptions.OrderBy) && queryDescription.Ordering.Any())\n            {\n                throw new ArgumentException(\"The supported table options does not include orderby.\", \"query\");\n            }\n\n            if (!options.HasFlag(MobileServiceRemoteTableOptions.Skip) && queryDescription.Skip.HasValue)\n            {\n                throw new ArgumentException(\"The supported table options does not include skip.\", \"query\");\n            }\n\n            if (!options.HasFlag(MobileServiceRemoteTableOptions.Top) && queryDescription.Top.HasValue)\n            {\n                throw new ArgumentException(\"The supported table options does not include top.\", \"query\");\n            }\n\n            // let us not burden the server to calculate the count when we don't need it for pull\n            queryDescription.IncludeTotalCount = false;\n\n            var action = new PullAction(table, tableKind, this, queryId, queryDescription, parameters, relatedTables,\n                this.opQueue, this.settings, this.Store, options, pullOptions, reader, cancellationToken);\n            await this.ExecuteSyncAction(action);\n        }\n\n        public async Task PurgeAsync(string tableName, MobileServiceTableKind tableKind, string queryId, string query, bool force, CancellationToken cancellationToken)\n        {\n            await this.EnsureInitializedAsync();\n\n            var table = await this.GetTable(tableName);\n            var queryDescription = MobileServiceTableQueryDescription.Parse(tableName, query);\n            var action = new PurgeAction(table, tableKind, queryId, queryDescription, force, this, this.opQueue, this.settings, this.Store, cancellationToken);\n            await this.ExecuteSyncAction(action);\n        }\n\n        public Task PushAsync(CancellationToken cancellationToken)\n        {\n            return PushAsync(cancellationToken, MobileServiceTableKind.Table, new string[0]);\n        }\n\n        public async Task PushAsync(CancellationToken cancellationToken, MobileServiceTableKind tableKind, params string[] tableNames)\n        {\n            await this.EnsureInitializedAsync();\n\n            // use empty handler if its not a standard table push\n            var handler = tableKind == MobileServiceTableKind.Table ? this.Handler : new MobileServiceSyncHandler();\n\n            var action = new PushAction(this.opQueue,\n                                      this.Store,\n                                      tableKind,\n                                      tableNames,\n                                      handler,\n                                      this.client,\n                                      this,\n                                      cancellationToken);\n\n            await this.ExecuteSyncAction(action);\n        }\n\n        public async Task ExecuteSyncAction(SyncAction action)\n        {\n            Task discard = this.syncQueue.Post(action.ExecuteAsync, action.CancellationToken);\n\n            await action.CompletionTask;\n        }\n\n        public virtual async Task<MobileServiceTable> GetTable(string tableName)\n        {\n            await this.EnsureInitializedAsync();\n\n            var table = this.client.GetTable(tableName) as MobileServiceTable;\n            table.SystemProperties = await settings.GetSystemPropertiesAsync(tableName);\n            table.Features = MobileServiceFeatures.Offline;\n\n            return table;\n        }\n\n        public Task CancelAndUpdateItemAsync(MobileServiceTableOperationError error, JObject item)\n        {\n            string itemId = error.Item.Value<string>(MobileServiceSystemColumns.Id);\n            return this.ExecuteOperationSafeAsync(itemId, error.TableName, async () =>\n            {\n                await this.TryCancelOperation(error);\n                await this.Store.UpsertAsync(error.TableName, item, fromServer: true);\n            });\n        }\n\n        public Task UpdateOperationAsync(MobileServiceTableOperationError error, JObject item)\n        {\n            string itemId = error.Item.Value<string>(MobileServiceSystemColumns.Id);\n            return this.ExecuteOperationSafeAsync(itemId, error.TableName, async () =>\n            {\n                await this.TryUpdateOperation(error, item);\n                if (error.OperationKind != MobileServiceTableOperationKind.Delete)\n                {\n                    await this.Store.UpsertAsync(error.TableName, item, fromServer: true);\n                }\n            });\n        }\n\n        private async Task TryUpdateOperation(MobileServiceTableOperationError error, JObject item)\n        {\n            if (!await this.opQueue.UpdateAsync(error.Id, error.OperationVersion, item))\n            {\n                throw new InvalidOperationException(\"The operation has been updated and cannot be updated again\");\n            }\n\n            // delete errors for updated operation\n            await this.Store.DeleteAsync(MobileServiceLocalSystemTables.SyncErrors, error.Id);\n        }\n\n        public Task CancelAndDiscardItemAsync(MobileServiceTableOperationError error)\n        {\n            string itemId = error.Item.Value<string>(MobileServiceSystemColumns.Id);\n            return this.ExecuteOperationSafeAsync(itemId, error.TableName, async () =>\n            {\n                await this.TryCancelOperation(error);\n                await this.Store.DeleteAsync(error.TableName, itemId);\n            });\n        }\n\n        public async Task DeferTableActionAsync(TableAction action)\n        {\n            IEnumerable<string> tableNames;\n            if (action.RelatedTables == null) // no related table\n            {\n                tableNames = new[] { action.Table.TableName };\n            }\n            else if (action.RelatedTables.Any()) // some related tables\n            {\n                tableNames = new[] { action.Table.TableName }.Concat(action.RelatedTables);\n            }\n            else // all tables are related\n            {\n                tableNames = Enumerable.Empty<string>();\n            }\n\n            try\n            {\n                await this.PushAsync(action.CancellationToken, action.TableKind, tableNames.ToArray());\n            }\n            finally\n            {\n                Task discard = this.syncQueue.Post(action.ExecuteAsync, action.CancellationToken);\n            }\n        }\n\n        private async Task TryCancelOperation(MobileServiceTableOperationError error)\n        {\n            if (!await this.opQueue.DeleteAsync(error.Id, error.OperationVersion))\n            {\n                throw new InvalidOperationException(\"The operation has been updated and cannot be cancelled.\");\n            }\n            // delete errors for cancelled operation\n            await this.Store.DeleteAsync(MobileServiceLocalSystemTables.SyncErrors, error.Id);\n        }\n\n        private async Task EnsureInitializedAsync()\n        {\n            if (this.initializeTask == null)\n            {\n                throw new InvalidOperationException(\"SyncContext is not yet initialized.\");\n            }\n            else\n            {\n                // when the initialization has started we wait for it to complete\n                await this.initializeTask.Task;\n            }\n        }\n\n        private Task ExecuteOperationAsync(MobileServiceTableOperation operation, JObject item)\n        {\n            return this.ExecuteOperationSafeAsync(operation.ItemId, operation.TableName, async () =>\n            {\n                MobileServiceTableOperation existing = await this.opQueue.GetOperationByItemIdAsync(operation.TableName, operation.ItemId);\n                if (existing != null)\n                {\n                    existing.Validate(operation); // make sure this operation is legal and collapses after any previous operation on same item already in the queue\n                }\n\n                try\n                {\n                    await operation.ExecuteLocalAsync(this.Store, item); // first execute operation on local store\n                }\n                catch (Exception ex)\n                {\n                    if (ex is MobileServiceLocalStoreException)\n                    {\n                        throw;\n                    }\n                    throw new MobileServiceLocalStoreException(\"Failed to perform operation on local store.\", ex);\n                }\n\n                if (existing != null)\n                {\n                    existing.Collapse(operation); // cancel either existing, new or both operation \n                    // delete error for collapsed operation\n                    await this.Store.DeleteAsync(MobileServiceLocalSystemTables.SyncErrors, existing.Id);\n                    if (existing.IsCancelled) // if cancelled we delete it\n                    {\n                        await this.opQueue.DeleteAsync(existing.Id, existing.Version);\n                    }\n                    else if (existing.IsUpdated)\n                    {\n                        await this.opQueue.UpdateAsync(existing);\n                    }\n                }\n\n                // if validate didn't cancel the operation then queue it\n                if (!operation.IsCancelled)\n                {\n                    await this.opQueue.EnqueueAsync(operation);\n                }\n            });\n        }\n\n        private async Task ExecuteOperationSafeAsync(string itemId, string tableName, Func<Task> action)\n        {\n            await this.EnsureInitializedAsync();\n\n            // take slowest lock first and quickest last in order to avoid blocking quick operations for long time            \n            using (await this.opQueue.LockItemAsync(itemId, CancellationToken.None))  // prevent any inflight operation on the same item\n            using (await this.opQueue.LockTableAsync(tableName, CancellationToken.None)) // prevent interferance with any in-progress pull/purge action\n            using (await this.storeQueueLock.WriterLockAsync()) // prevent any other operation from interleaving between store and queue insert\n            {\n                await action();\n            }\n        }\n\n        public void Dispose()\n        {\n            this.Dispose(disposing: true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing && this._store != null)\n            {\n                this.settings.Dispose();\n                this._store.Dispose();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/MobileServiceSyncHandler.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Handles table operation errors and push completion results.\n    /// </summary>\n    public class MobileServiceSyncHandler : IMobileServiceSyncHandler\n    {\n        /// <summary>\n        /// A method that is called when push operation has completed.\n        /// </summary>\n        /// <param name=\"result\">An instance of <see cref=\"MobileServicePushCompletionResult\"/></param>\n        /// <returns>Task that completes when result has been handled.</returns>\n        public virtual Task OnPushCompleteAsync(MobileServicePushCompletionResult result)\n        {\n            return Task.FromResult(0);\n        }\n\n        /// <summary>\n        /// A method that is called to execute a single table operation against remote table.\n        /// </summary>\n        /// <param name=\"operation\">Instance of <see cref=\"IMobileServiceTableOperation\"/> that represents a remote table operation.</param>\n        /// <returns>Task that completes when operation has been executed and errors have been handled.</returns>\n        public virtual Task<JObject> ExecuteTableOperationAsync(IMobileServiceTableOperation operation)\n        {\n            return operation.ExecuteAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/MobileServiceSyncSettingsManager.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Threading;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Reads and writes settings in the __config table of <see cref=\"IMobileServiceLocalStore\"/>\n    /// </summary>\n    internal class MobileServiceSyncSettingsManager : IDisposable\n    {\n        private const string DefaultDeltaToken = \"1970-01-01T00:00:00.0000000+00:00\";\n        private AsyncLockDictionary cacheLock = new AsyncLockDictionary();\n        private Dictionary<string, string> cache = new Dictionary<string, string>();\n        private IMobileServiceLocalStore store;\n\n        protected MobileServiceSyncSettingsManager()\n        {\n        }\n\n        public MobileServiceSyncSettingsManager(IMobileServiceLocalStore store)\n        {\n            this.store = store;\n        }\n\n        public virtual async Task<MobileServiceSystemProperties> GetSystemPropertiesAsync(string tableName)\n        {\n            string key = GetSystemPropertiesKey(tableName);\n            string value = await GetSettingAsync(key, ((int)MobileServiceSystemProperties.Version).ToString());\n            return (MobileServiceSystemProperties)Int32.Parse(value);\n        }\n\n        public virtual async Task ResetDeltaTokenAsync(string tableName, string queryId)\n        {\n            string key = GetDeltaTokenKey(tableName, queryId);\n\n            using (await this.cacheLock.Acquire(key, CancellationToken.None))\n            {\n                this.cache.Remove(key);\n                await this.store.DeleteAsync(MobileServiceLocalSystemTables.Config, key);\n            }\n        }\n\n        public async virtual Task<DateTimeOffset> GetDeltaTokenAsync(string tableName, string queryId)\n        {\n            string value = await this.GetSettingAsync(GetDeltaTokenKey(tableName, queryId), DefaultDeltaToken);\n            return DateTimeOffset.Parse(value);\n        }\n\n        public virtual Task SetDeltaTokenAsync(string tableName, string queryId, DateTimeOffset token)\n        {\n            return this.SetSettingAsync(GetDeltaTokenKey(tableName, queryId), token.ToString(\"o\"));\n        }\n\n        /// <summary>\n        /// Defines the the table for storing config settings\n        /// </summary>\n        /// <param name=\"store\">An instance of <see cref=\"IMobileServiceLocalStore\"/></param>\n        public static void DefineTable(MobileServiceLocalStore store)\n        {\n            store.DefineTable(MobileServiceLocalSystemTables.Config, new JObject()\n            {\n                { MobileServiceSystemColumns.Id, String.Empty },\n                { \"value\", String.Empty },\n            });\n        }\n\n        private async Task SetSettingAsync(string key, string value)\n        {\n            using (await this.cacheLock.Acquire(key, CancellationToken.None))\n            {\n                this.cache[key] = value;\n\n                await this.store.UpsertAsync(MobileServiceLocalSystemTables.Config, new JObject()\n                {\n                    { MobileServiceSystemColumns.Id, key },\n                    { \"value\", value }\n                }, fromServer: false);\n            }\n        }\n\n\n        private async Task<string> GetSettingAsync(string key, string defaultValue)\n        {\n            using (await this.cacheLock.Acquire(key, CancellationToken.None))\n            {\n                string value;\n                if (!this.cache.TryGetValue(key, out value))\n                {\n                    JObject setting = await this.store.LookupAsync(MobileServiceLocalSystemTables.Config, key);\n                    if (setting == null)\n                    {\n                        value = defaultValue;\n                    }\n                    else\n                    {\n                        string rawValue = setting.Value<string>(\"value\");\n                        value = rawValue ?? defaultValue;\n                    }\n                    this.cache[key] = value;\n                }\n\n                return value;\n            }\n        }\n\n        private string GetDeltaTokenKey(string tableName, string queryId)\n        {\n            return \"deltaToken|\" + tableName + \"|\" + queryId;\n        }\n\n        private static string GetSystemPropertiesKey(string tableName)\n        {\n            return \"systemProperties|\" + tableName;\n        }\n\n        public void Dispose()\n        {\n            this.Dispose(disposing: true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            this.store.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/MobileServiceSyncTable.Generic.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    internal class MobileServiceSyncTable<T> : MobileServiceSyncTable, IMobileServiceSyncTable<T>\n    {\n        private MobileServiceTableQueryProvider queryProvider;\n        private IMobileServiceTable<T> remoteTable;\n\n        public MobileServiceSyncTable(string tableName, MobileServiceTableKind kind, MobileServiceClient client)\n            : base(tableName, kind, client)\n        {\n            this.remoteTable = client.GetTable<T>();\n            this.queryProvider = new MobileServiceTableQueryProvider(this);\n        }\n\n        public Task<IEnumerable<T>> ReadAsync()\n        {\n            return ReadAsync(CreateQuery());\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"It does not appear nested when used via the async pattern.\")]\n        public Task<IEnumerable<U>> ReadAsync<U>(IMobileServiceTableQuery<U> query)\n        {\n            if (query == null)\n            {\n                throw new ArgumentNullException(\"query\");\n            }\n\n            return this.queryProvider.Execute(query);\n        }\n\n        public Task PullAsync<U>(string queryId, IMobileServiceTableQuery<U> query, bool pushOtherTables, CancellationToken cancellationToken, PullOptions pullOptions)\n        {\n            if (query == null)\n            {\n                throw new ArgumentNullException(\"query\");\n            }\n            string queryString = this.queryProvider.ToODataString(query);\n\n            return this.PullAsync(queryId, queryString, query.Parameters, pushOtherTables, cancellationToken, pullOptions);\n        }\n\n        public Task PurgeAsync<U>(string queryId, IMobileServiceTableQuery<U> query, CancellationToken cancellationToken)\n        {\n            if (query == null)\n            {\n                throw new ArgumentNullException(\"query\");\n            }\n            string queryString = this.queryProvider.ToODataString(query);\n\n            return this.PurgeAsync(queryId, queryString, false, cancellationToken);\n        }\n\n        public async Task RefreshAsync(T instance)\n        {\n            if (instance == null)\n            {\n                throw new ArgumentNullException(\"instance\");\n            }\n\n            MobileServiceSerializer serializer = this.MobileServiceClient.Serializer;\n            object objId = serializer.GetId(instance, ignoreCase: false, allowDefault: true);\n            if (objId == null)\n            {\n                return; // refresh is not supposed to throw if your object does not have an id for some reason\n            }\n\n            string id = EnsureIdIsString(objId);\n\n            // Get the latest version of this element\n            JObject refreshed = await base.LookupAsync(id);\n\n            if (refreshed == null)\n            {\n                throw new InvalidOperationException(\n                    string.Format(\n                        CultureInfo.InvariantCulture,\n                        \"Item not found in local store.\"));\n            }\n\n            // Deserialize that value back into the current instance\n            serializer.Deserialize<T>(refreshed, instance);\n        }\n\n        public async Task InsertAsync(T instance)\n        {\n            MobileServiceSerializer serializer = this.MobileServiceClient.Serializer;\n\n            var value = serializer.Serialize(instance) as JObject;\n            // remove system properties since the jtoken insert overload doesn't remove them\n            value = RemoveSystemPropertiesKeepVersion(value);\n\n            JObject inserted = await base.InsertAsync(value);\n\n            serializer.Deserialize(inserted, instance);\n        }\n\n        public Task UpdateAsync(T instance)\n        {\n            MobileServiceSerializer serializer = this.MobileServiceClient.Serializer;\n\n            var value = serializer.Serialize(instance) as JObject;\n            return base.UpdateAsync(value);\n        }\n\n        public Task DeleteAsync(T instance)\n        {\n            MobileServiceSerializer serializer = this.MobileServiceClient.Serializer;\n\n            var value = serializer.Serialize(instance) as JObject;\n            return base.DeleteAsync(value);\n        }\n\n        public async new Task<T> LookupAsync(string id)\n        {\n            JToken value = await base.LookupAsync(id);\n            if (value == null)\n            {\n                return default(T);\n            }\n            return this.MobileServiceClient.Serializer.Deserialize<T>(value);\n        }\n\n        public IMobileServiceTableQuery<T> CreateQuery()\n        {\n            return this.queryProvider.Create(this.remoteTable, new T[0].AsQueryable(), new Dictionary<string, string>(), includeTotalCount: false);\n        }\n\n        public IMobileServiceTableQuery<T> Where(Expression<Func<T, bool>> predicate)\n        {\n            return CreateQuery().Where(predicate);\n        }\n\n        [SuppressMessage(\"Microsoft.Naming\", \"CA1704:IdentifiersShouldBeSpelledCorrectly\", MessageId = \"U\", Justification = \"Standard for LINQ\")]\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<U> Select<U>(Expression<Func<T, U>> selector)\n        {\n            return CreateQuery().Select(selector);\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> OrderBy<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            return CreateQuery().OrderBy(keySelector);\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> OrderByDescending<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            return CreateQuery().OrderByDescending(keySelector);\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> ThenBy<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            return CreateQuery().ThenBy(keySelector);\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\", Justification = \"Part of the LINQ query pattern.\")]\n        public IMobileServiceTableQuery<T> ThenByDescending<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            return CreateQuery().ThenByDescending(keySelector);\n        }\n\n        public IMobileServiceTableQuery<T> Skip(int count)\n        {\n            return CreateQuery().Skip(count);\n        }\n\n        public IMobileServiceTableQuery<T> Take(int count)\n        {\n            return CreateQuery().Take(count);\n        }\n\n        public IMobileServiceTableQuery<T> IncludeTotalCount()\n        {\n            return this.CreateQuery().IncludeTotalCount();\n        }\n\n        public Task<IEnumerable<T>> ToEnumerableAsync()\n        {\n            return this.ReadAsync();\n        }\n\n        public async Task<List<T>> ToListAsync()\n        {\n            return new QueryResultList<T>(await this.ReadAsync());\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/MobileServiceSyncTable.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Text.RegularExpressions;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    internal class MobileServiceSyncTable : IMobileServiceSyncTable\n    {\n        private static readonly Regex queryIdRegex = new Regex(\"^[^|]{0,50}$\");\n        private MobileServiceSyncContext syncContext;\n\n        public MobileServiceClient MobileServiceClient { get; private set; }\n\n        public string TableName { get; private set; }\n\n        public MobileServiceTableKind Kind { get; private set; }\n\n        public MobileServiceRemoteTableOptions SupportedOptions { get; set; }\n\n        public MobileServiceSyncTable(string tableName, MobileServiceTableKind Kind, MobileServiceClient client)\n        {\n            Debug.Assert(tableName != null);\n            Debug.Assert(client != null);\n\n            this.MobileServiceClient = client;\n            this.TableName = tableName;\n            this.Kind = Kind;\n            this.syncContext = (MobileServiceSyncContext)client.SyncContext;\n            this.SupportedOptions = MobileServiceRemoteTableOptions.All;\n        }\n\n        public Task<JToken> ReadAsync(string query)\n        {\n            return this.syncContext.ReadAsync(this.TableName, query);\n        }\n\n        public Task PullAsync(string queryId, string query, IDictionary<string, string> parameters, MobileServiceObjectReader reader, CancellationToken cancellationToken, PullOptions pullOptions, params string[] relatedTables)\n        {\n            ValidateQueryId(queryId);\n\n            return this.syncContext.PullAsync(this.TableName, this.Kind, queryId, query, this.SupportedOptions, parameters, relatedTables, reader, cancellationToken, pullOptions);\n        }\n\n        public Task PullAsync(string queryId, string query, IDictionary<string, string> parameters, bool pushOtherTables, CancellationToken cancellationToken, PullOptions pullOptions)\n        {\n            ValidateQueryId(queryId);\n            return this.syncContext.PullAsync(this.TableName, this.Kind, queryId, query, this.SupportedOptions, parameters, pushOtherTables ? new string[0] : null, null, cancellationToken, pullOptions);\n        }\n\n        public Task PurgeAsync(string queryId, string query, bool force, CancellationToken cancellationToken)\n        {\n            ValidateQueryId(queryId);\n            return this.syncContext.PurgeAsync(this.TableName, this.Kind, queryId, query, force, cancellationToken);\n        }\n\n        public async Task<JObject> InsertAsync(JObject instance)\n        {\n            object id = MobileServiceSerializer.GetId(instance, ignoreCase: false, allowDefault: true);\n            if (id == null)\n            {\n                id = Guid.NewGuid().ToString();\n                instance = (JObject)instance.DeepClone();\n                instance[MobileServiceSystemColumns.Id] = (string)id;\n            }\n            else\n            {\n                EnsureIdIsString(id);\n            }\n\n            await this.syncContext.InsertAsync(this.TableName, this.Kind, (string)id, instance);\n\n            return instance;\n        }\n\n        public async Task UpdateAsync(JObject instance)\n        {\n            string id = EnsureIdIsString(instance);\n            instance = RemoveSystemPropertiesKeepVersion(instance);\n\n            await this.syncContext.UpdateAsync(this.TableName, this.Kind, id, instance);\n        }\n\n        public async Task DeleteAsync(JObject instance)\n        {\n            string id = EnsureIdIsString(instance);\n            instance = RemoveSystemPropertiesKeepVersion(instance);\n\n            await this.syncContext.DeleteAsync(this.TableName, this.Kind, id, instance);\n        }\n\n        public Task<JObject> LookupAsync(string id)\n        {\n            return this.syncContext.LookupAsync(this.TableName, id);\n        }\n\n        // we want to keep version as it rides on the object until the sync operation happens using classic table.\n        internal static JObject RemoveSystemPropertiesKeepVersion(JObject instance)\n        {\n            string version;\n            instance = MobileServiceSerializer.RemoveSystemProperties(instance, out version);\n            if (version != null)\n            {\n                instance[MobileServiceSystemColumns.Version] = version;\n            }\n            return instance;\n        }\n\n        // we don't support int id tables for offline. therefore id must be of type string\n        private static string EnsureIdIsString(JObject instance)\n        {\n            if (instance == null)\n            {\n                throw new ArgumentNullException(\"instance\");\n            }\n\n            object id = MobileServiceSerializer.GetId(instance, ignoreCase: false, allowDefault: false);\n            return EnsureIdIsString(id);\n        }\n\n        internal static void ValidateQueryId(string queryId)\n        {\n            if (string.IsNullOrWhiteSpace(queryId))\n            {\n                return;\n            }\n\n            if (!queryIdRegex.IsMatch(queryId))\n            {\n                throw new ArgumentException(\n                        string.Format(\n                            CultureInfo.InvariantCulture,\n                            \"The query id must not contain pipe character and should be less than 50 characters in length.\",\n                            \"queryId\"));\n            }\n        }\n\n        protected static string EnsureIdIsString(object id)\n        {\n            string strId = id as string;\n            if (strId == null)\n            {\n                throw new ArgumentException(\n                     string.Format(\n                        CultureInfo.InvariantCulture,\n                        \"The id must be of type string.\",\n                        MobileServiceSystemColumns.Id),\n                     \"instance\");\n            }\n            return strId;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/PullOptions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Globalization;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    public class PullOptions\n    {\n        private int _maxPageSize;\n\n        /// <summary>\n        /// Constructor\n        /// </summary>\n        public PullOptions()\n        {\n            MaxPageSize = 50;\n        }\n\n        /// <summary>\n        /// Maximum allowed size of a page while performing a pull operation.\n        /// </summary>\n        public int MaxPageSize\n        {\n            get { return _maxPageSize; }\n            set\n            {\n                if (value <= 0)\n                {\n                    throw new ArgumentException(string.Format(CultureInfo.InvariantCulture,\n                        \"Tried to set MaxPageSize to invalid value {0}\", value));\n                }\n\n                _maxPageSize = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Actions/IncrementalPullStrategy.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    internal class IncrementalPullStrategy : PullStrategy\n    {\n        private static readonly QueryNode updatedAtNode = new MemberAccessNode(null, MobileServiceSystemColumns.UpdatedAt);\n        private static readonly OrderByNode orderByUpdatedAtNode = new OrderByNode(updatedAtNode, OrderByDirection.Ascending);\n\n        private readonly QueryNode originalFilter; // filter before the delta token was applied\n        private readonly MobileServiceTable table;\n        private readonly string queryId;\n        private readonly MobileServiceSyncSettingsManager settings;\n        private readonly bool ordered;\n\n        private DateTimeOffset maxUpdatedAt;\n        private DateTimeOffset deltaToken;\n\n        public IncrementalPullStrategy(MobileServiceTable table,\n                                       MobileServiceTableQueryDescription query,\n                                       string queryId,\n                                       MobileServiceSyncSettingsManager settings,\n                                       PullCursor cursor,\n                                       MobileServiceRemoteTableOptions options,\n                                       PullOptions pullOptions)\n            : base(query, cursor, options, pullOptions)\n        {\n            this.table = table;\n            this.originalFilter = query.Filter;\n            this.queryId = queryId;\n            this.settings = settings;\n            this.ordered = options.HasFlag(MobileServiceRemoteTableOptions.OrderBy);\n        }\n\n\n        public override async Task InitializeAsync()\n        {\n            this.table.SystemProperties = this.table.SystemProperties | MobileServiceSystemProperties.UpdatedAt;\n            this.maxUpdatedAt = await this.settings.GetDeltaTokenAsync(this.Query.TableName, this.queryId);\n            this.UpdateDeltaToken();\n\n            await base.InitializeAsync();\n        }\n\n\n        public override async Task OnResultsProcessedAsync()\n        {\n            if (this.ordered)\n            {\n                await this.SaveMaxUpdatedAtAsync();\n            }\n        }\n\n        public override void SetUpdateAt(DateTimeOffset updatedAt)\n        {\n            if (updatedAt > this.maxUpdatedAt)\n            {\n                this.maxUpdatedAt = updatedAt;\n            }\n        }\n\n        public override async Task<bool> MoveToNextPageAsync()\n        {\n            if (this.ordered && this.maxUpdatedAt > this.deltaToken)\n            {\n                this.UpdateDeltaToken();\n                await this.SaveMaxUpdatedAtAsync();\n\n                // reset the cursor because deltatoken has changed\n                this.Cursor.Reset();\n                if (this.SupportsSkip)\n                {\n                    this.Query.Skip = 0;\n                }\n                this.ReduceTop();\n\n                return true;\n            }\n            return await base.MoveToNextPageAsync();\n        }\n\n\n        public override Task PullCompleteAsync()\n        {\n            return this.SaveMaxUpdatedAtAsync();\n        }\n\n        private async Task SaveMaxUpdatedAtAsync()\n        {\n            if (this.maxUpdatedAt > this.deltaToken)\n            {\n                await this.settings.SetDeltaTokenAsync(this.Query.TableName, this.queryId, this.maxUpdatedAt);\n            }\n        }\n\n        private void UpdateDeltaToken()\n        {\n            this.deltaToken = this.maxUpdatedAt;\n\n            if (this.ordered)\n            {\n                this.Query.Ordering.Clear();\n                this.Query.Ordering.Add(orderByUpdatedAtNode);\n            }\n            // .NET runtime system properties are of datetimeoffset type so we'll use the datetimeoffset odata token\n            QueryNode tokenNode = new ConstantNode(deltaToken);\n            QueryNode greaterThanDeltaNode = new BinaryOperatorNode(BinaryOperatorKind.GreaterThanOrEqual, updatedAtNode, tokenNode);\n            if (this.originalFilter == null)\n            {\n                this.Query.Filter = greaterThanDeltaNode;\n            }\n            else\n            {\n                var originalFilterAndGreaterThanDeltaNode = new BinaryOperatorNode(BinaryOperatorKind.And, this.originalFilter, greaterThanDeltaNode);\n                this.Query.Filter = originalFilterAndGreaterThanDeltaNode;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Actions/PullAction.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    internal class PullAction : TableAction\n    {\n        private static readonly DateTimeOffset Epoch = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);\n\n        private IDictionary<string, string> parameters;\n        private MobileServiceRemoteTableOptions options; // the supported options on remote table \n        private PullOptions pullOptions;\n        private readonly PullCursor cursor;\n        private Task pendingAction;\n        private PullStrategy strategy;\n\n        public PullAction(MobileServiceTable table,\n                          MobileServiceTableKind tableKind,\n                          MobileServiceSyncContext context,\n                          string queryId,\n                          MobileServiceTableQueryDescription query,\n                          IDictionary<string, string> parameters,\n                          IEnumerable<string> relatedTables,\n                          OperationQueue operationQueue,\n                          MobileServiceSyncSettingsManager settings,\n                          IMobileServiceLocalStore store,\n                          MobileServiceRemoteTableOptions options,\n                          PullOptions pullOptions,\n                          MobileServiceObjectReader reader,\n                          CancellationToken cancellationToken)\n            : base(table, tableKind, queryId, query, relatedTables, context, operationQueue, settings, store, cancellationToken)\n        {\n            this.options = options;\n            this.parameters = parameters;\n            this.cursor = new PullCursor(query);\n            this.pullOptions = pullOptions;\n            this.Reader = reader ?? new MobileServiceObjectReader();\n        }\n\n        public MobileServiceObjectReader Reader { get; private set; }\n\n\n        protected override Task<bool> HandleDirtyTable()\n        {\n            // there are pending operations on the same table so defer the action\n            this.pendingAction = this.Context.DeferTableActionAsync(this);\n            // we need to return in order to give PushAsync a chance to execute so we don't await the pending push\n            return Task.FromResult(false);\n        }\n\n        protected override Task WaitPendingAction()\n        {\n            return this.pendingAction ?? Task.FromResult(0);\n        }\n\n        protected async override Task ProcessTableAsync()\n        {\n            await CreatePullStrategy();\n\n            this.Table.SystemProperties |= MobileServiceSystemProperties.Deleted;\n\n            QueryResult result;\n            do\n            {\n                this.CancellationToken.ThrowIfCancellationRequested();\n\n                string query = this.Query.ToODataString();\n                if (this.Query.UriPath != null)\n                {\n                    query = MobileServiceUrlBuilder.CombinePathAndQuery(this.Query.UriPath, query);\n                }\n                result = await this.Table.ReadAsync(query, MobileServiceTable.IncludeDeleted(parameters), this.Table.Features);\n                await this.ProcessAll(result.Values); // process the first batch\n\n                result = await FollowNextLinks(result);\n            }\n            // if we are not at the end of result and there is no link to get more results                \n            while (!this.EndOfResult(result) && await this.strategy.MoveToNextPageAsync());\n\n            await this.strategy.PullCompleteAsync();\n        }\n\n        private async Task ProcessAll(JArray items)\n        {\n            this.CancellationToken.ThrowIfCancellationRequested();\n\n            var deletedIds = new List<string>();\n            var upsertList = new List<JObject>();\n\n            foreach (JObject item in items)\n            {\n                if (!this.cursor.OnNext())\n                {\n                    break;\n                }\n\n                string id = this.Reader.GetId(item);\n                if (id == null)\n                {\n                    continue;\n                }\n\n                DateTimeOffset updatedAt = this.Reader.GetUpdatedAt(item).GetValueOrDefault(Epoch).ToUniversalTime();\n                strategy.SetUpdateAt(updatedAt);\n\n                if (this.Reader.IsDeleted(item))\n                {\n                    deletedIds.Add(id);\n                }\n                else\n                {\n                    upsertList.Add(item);\n                }\n            }\n\n            if (upsertList.Any())\n            {\n                await this.Store.UpsertAsync(this.Table.TableName, upsertList, ignoreMissingColumns: true);\n            }\n\n            if (deletedIds.Any())\n            {\n                await this.Store.DeleteAsync(this.Table.TableName, deletedIds);\n            }\n\n            await this.strategy.OnResultsProcessedAsync();\n        }\n\n        // follows next links in the query result and returns final result\n        private async Task<QueryResult> FollowNextLinks(QueryResult result)\n        {\n            while (!this.EndOfResult(result) && // if we are not at the end of result\n                    IsNextLinkValid(result.NextLink, this.options)) // and there is a valid link to get more results\n            {\n                this.CancellationToken.ThrowIfCancellationRequested();\n\n                result = await this.Table.ReadAsync(result.NextLink);\n                await this.ProcessAll(result.Values); // process the results as soon as we've gotten them\n            }\n            return result;\n        }\n\n        // mongo doesn't support skip and top yet it generates next links with top and skip\n        private bool IsNextLinkValid(Uri link, MobileServiceRemoteTableOptions options)\n        {\n            if (link == null)\n            {\n                return false;\n            }\n\n            IDictionary<string, string> parameters = HttpUtility.ParseQueryString(link.Query);\n\n            bool isValid = ValidateOption(options, parameters, ODataOptions.Top, MobileServiceRemoteTableOptions.Top) &&\n                           ValidateOption(options, parameters, ODataOptions.Skip, MobileServiceRemoteTableOptions.Skip) &&\n                           ValidateOption(options, parameters, ODataOptions.OrderBy, MobileServiceRemoteTableOptions.OrderBy);\n\n            return isValid;\n        }\n\n        private static bool ValidateOption(MobileServiceRemoteTableOptions validOptions, IDictionary<string, string> parameters, string optionKey, MobileServiceRemoteTableOptions option)\n        {\n            bool hasInvalidOption = parameters.ContainsKey(optionKey) && !validOptions.HasFlag(option);\n            return !hasInvalidOption;\n        }\n\n        private bool EndOfResult(QueryResult result)\n        {\n            // if we got as many as we initially wanted \n            // or there are no more results\n            // then we're at the end\n            return cursor.Complete || result.Values.Count == 0;\n        }\n\n        private async Task CreatePullStrategy()\n        {\n            bool isIncrementalSync = !String.IsNullOrEmpty(this.QueryId);\n            if (isIncrementalSync)\n            {\n                this.strategy = new IncrementalPullStrategy(this.Table, this.Query, this.QueryId, this.Settings, this.cursor, this.options, this.pullOptions);\n            }\n            else\n            {\n                this.strategy = new PullStrategy(this.Query, this.cursor, this.options, this.pullOptions);\n            }\n            await this.strategy.InitializeAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Actions/PullCursor.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Microsoft.WindowsAzure.MobileServices.Query;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// An object to represent the current position of pull in full query resullt\n    /// </summary>\n    internal class PullCursor\n    {\n        private readonly int maxRead; // used to limit the next link navigation because table storage and sql in .NET backend always return a link and also to obey $top if present\n        private int initialSkip;\n        private int totalRead; // used to track how many we have read so far since the last delta\n        public int Remaining { get; private set; }\n\n        public int Position\n        {\n            get { return this.initialSkip + this.totalRead; }\n        }\n\n        public bool Complete\n        {\n            get { return this.Remaining <= 0; }\n        }\n\n        public PullCursor(MobileServiceTableQueryDescription query)\n        {\n            this.Remaining = this.maxRead = query.Top.GetValueOrDefault(Int32.MaxValue);\n            this.initialSkip = query.Skip.GetValueOrDefault();\n        }\n\n        /// <summary>\n        /// Called when ever an item is processed from result\n        /// </summary>\n        /// <returns>True if cursor is still open, False when it is completed.</returns>\n        public bool OnNext()\n        {\n            if (this.Complete)\n            {\n                return false;\n            }\n\n            this.Remaining--;\n            this.totalRead++;\n\n            return true;\n        }\n\n        /// <summary>\n        /// Called when delta token is modified\n        /// </summary>\n        public void Reset()\n        {\n            this.initialSkip = 0;\n            this.totalRead = 0;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Actions/PullStrategy.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    internal class PullStrategy\n    {\n        protected MobileServiceTableQueryDescription Query { get; private set; }\n        protected PullCursor Cursor { get; private set; }\n        protected bool SupportsSkip { get; private set; }\n        protected bool SupportsTop { get; private set; }\n\n        protected PullOptions PullOptions { get; private set; }\n\n\n        public PullStrategy(MobileServiceTableQueryDescription query,\n                            PullCursor cursor,\n                            MobileServiceRemoteTableOptions options,\n                            PullOptions pullOptions)\n        {\n            this.Query = query;\n            this.Cursor = cursor;\n            this.PullOptions = pullOptions ?? new PullOptions();\n            this.SupportsSkip = options.HasFlag(MobileServiceRemoteTableOptions.Skip);\n            this.SupportsTop = options.HasFlag(MobileServiceRemoteTableOptions.Top);\n        }\n\n        public virtual Task InitializeAsync()\n        {\n            if (this.SupportsTop)\n            {\n                if (this.SupportsSkip) // mongo requires skip if top is given but table storage doesn't support skip\n                {\n                    this.Query.Skip = this.Query.Skip.GetValueOrDefault();\n                }\n\n                // always download in batches of MaxPageSize or less for efficiency\n                this.Query.Top = Math.Min(this.Query.Top.GetValueOrDefault(this.PullOptions.MaxPageSize), this.PullOptions.MaxPageSize);\n            }\n            return Task.FromResult(0);\n        }\n\n        public virtual Task OnResultsProcessedAsync()\n        {\n            return Task.FromResult(0);\n        }\n\n        public virtual void SetUpdateAt(DateTimeOffset updatedAt)\n        {\n        }\n\n        /// <summary>\n        /// Tries to move the cursor forward by changing where it starts from to be the latest result\n        /// </summary>\n        /// <returns>True if cursor can be shifted forward, False otherwise</returns>\n        public virtual Task<bool> MoveToNextPageAsync()\n        {\n            bool shifted = false;\n            if (this.SupportsSkip)\n            {\n                // then we continue downloading the changes using skip and top\n                this.Query.Skip = this.Cursor.Position;\n                this.ReduceTop();\n\n                shifted = true;\n            }\n            return Task.FromResult(shifted);\n        }\n\n        protected void ReduceTop()\n        {\n            if (this.SupportsTop)\n            {\n                // only read as many as we want\n                this.Query.Top = Math.Min(this.Query.Top.Value, Cursor.Remaining);\n            }\n        }\n\n        public virtual Task PullCompleteAsync()\n        {\n            return Task.FromResult(0);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Actions/PurgeAction.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    internal class PurgeAction : TableAction\n    {\n        private bool force;\n\n        public PurgeAction(MobileServiceTable table,\n                           MobileServiceTableKind tableKind,\n                           string queryId,\n                           MobileServiceTableQueryDescription query,\n                           bool force,\n                           MobileServiceSyncContext context,\n                           OperationQueue operationQueue,\n                           MobileServiceSyncSettingsManager settings,\n                           IMobileServiceLocalStore store,\n                           CancellationToken cancellationToken)\n            : base(table, tableKind, queryId, query, null, context, operationQueue, settings, store, cancellationToken)\n        {\n            this.force = force;\n        }\n\n        protected async override Task<bool> HandleDirtyTable()\n        {\n            if (this.Query.Filter != null || !this.force)\n            {\n                throw new InvalidOperationException(\"The table cannot be purged because it has pending operations.\");\n            }\n\n            var delOperationsQuery = new MobileServiceTableQueryDescription(MobileServiceLocalSystemTables.OperationQueue);\n            delOperationsQuery.Filter = new BinaryOperatorNode(BinaryOperatorKind.Equal, new MemberAccessNode(null, \"tableName\"), new ConstantNode(this.Table.TableName));\n\n            // count ops to be deleted\n            delOperationsQuery.IncludeTotalCount = true;\n            delOperationsQuery.Top = 0;\n            long toRemove = QueryResult.Parse(await this.Store.ReadAsync(delOperationsQuery), null, validate: false).TotalCount;\n\n            // delete operations\n            delOperationsQuery.Top = null;\n            await this.Store.DeleteAsync(delOperationsQuery);\n\n            // delete errors\n            var delErrorsQuery = new MobileServiceTableQueryDescription(MobileServiceLocalSystemTables.SyncErrors);\n            delErrorsQuery.Filter = delOperationsQuery.Filter;\n            await this.Store.DeleteAsync(delErrorsQuery);\n\n            // update queue operation count\n            this.OperationQueue.UpdateOperationCount(-toRemove);\n\n            return true;\n        }\n\n        protected override async Task ProcessTableAsync()\n        {\n            if (!String.IsNullOrEmpty(this.QueryId))\n            {\n                await this.Settings.ResetDeltaTokenAsync(this.Table.TableName, this.QueryId);\n            }\n            await this.Store.DeleteAsync(this.Query);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Actions/PushAction.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Responsible for executing a batch of operations from queue until bookmark is found\n    /// </summary>\n    internal class PushAction : SyncAction\n    {\n        private IMobileServiceSyncHandler syncHandler;\n        private MobileServiceClient client;\n        private MobileServiceSyncContext context;\n        private IEnumerable<string> tableNames;\n        private MobileServiceTableKind tableKind;\n\n        public PushAction(OperationQueue operationQueue,\n                          IMobileServiceLocalStore store,\n                          MobileServiceTableKind tableKind,\n                          IEnumerable<string> tableNames,\n                          IMobileServiceSyncHandler syncHandler,\n                          MobileServiceClient client,\n                          MobileServiceSyncContext context,\n                          CancellationToken cancellationToken)\n            : base(operationQueue, store, cancellationToken)\n        {\n            this.tableKind = tableKind;\n            this.tableNames = tableNames;\n            this.client = client;\n            this.syncHandler = syncHandler;\n            this.context = context;\n        }\n\n        public override async Task ExecuteAsync()\n        {\n            var batch = new OperationBatch(this.syncHandler, this.Store, this.context);\n            List<MobileServiceTableOperationError> syncErrors = new List<MobileServiceTableOperationError>();\n            MobileServicePushStatus batchStatus = MobileServicePushStatus.InternalError;\n\n            try\n            {\n                batchStatus = await ExecuteBatchAsync(batch, syncErrors);\n            }\n            catch (Exception ex)\n            {\n                batch.OtherErrors.Add(ex);\n            }\n\n            await FinalizePush(batch, batchStatus, syncErrors);\n        }\n\n        private async Task<MobileServicePushStatus> ExecuteBatchAsync(OperationBatch batch, List<MobileServiceTableOperationError> syncErrors)\n        {\n            // when cancellation is requested, abort the batch\n            this.CancellationToken.Register(() => batch.Abort(MobileServicePushStatus.CancelledByToken));\n\n            try\n            {\n                await ExecuteAllOperationsAsync(batch);\n            }\n            catch (Exception ex)\n            {\n                batch.OtherErrors.Add(ex);\n            }\n\n            MobileServicePushStatus batchStatus = batch.AbortReason.GetValueOrDefault(MobileServicePushStatus.Complete);\n            try\n            {\n                syncErrors.AddRange(await batch.LoadSyncErrorsAsync(this.client.SerializerSettings));\n            }\n            catch (Exception ex)\n            {\n\n                batch.OtherErrors.Add(new MobileServiceLocalStoreException(\"Failed to read errors from the local store.\", ex));\n            }\n            return batchStatus;\n        }\n\n        private async Task FinalizePush(OperationBatch batch, MobileServicePushStatus batchStatus, IEnumerable<MobileServiceTableOperationError> syncErrors)\n        {\n            var result = new MobileServicePushCompletionResult(syncErrors, batchStatus);\n\n            try\n            {\n                await batch.SyncHandler.OnPushCompleteAsync(result);\n\n                // now that we've successfully given the errors to user, we can delete them from store\n                await batch.DeleteErrorsAsync();\n            }\n            catch (Exception ex)\n            {\n                batch.OtherErrors.Add(ex);\n            }\n\n            if (batchStatus != MobileServicePushStatus.Complete || batch.HasErrors(syncErrors))\n            {\n                List<MobileServiceTableOperationError> unhandledSyncErrors = syncErrors.Where(e => !e.Handled).ToList();\n\n                Exception inner;\n                if (batch.OtherErrors.Count == 1)\n                {\n                    inner = batch.OtherErrors[0];\n                }\n                else\n                {\n                    inner = batch.OtherErrors.Any() ? new AggregateException(batch.OtherErrors) : null;\n                }\n\n                // create a new result with only unhandled errors\n                result = new MobileServicePushCompletionResult(unhandledSyncErrors, batchStatus);\n                this.TaskSource.TrySetException(new MobileServicePushFailedException(result, inner));\n            }\n            else\n            {\n                this.TaskSource.SetResult(0);\n            }\n        }\n\n        private async Task ExecuteAllOperationsAsync(OperationBatch batch)\n        {\n            MobileServiceTableOperation operation = await this.OperationQueue.PeekAsync(0, this.tableKind, this.tableNames);\n\n            // keep taking out operations and executing them until queue is empty or operation finds the bookmark or batch is aborted \n            while (operation != null)\n            {\n                using (await this.OperationQueue.LockItemAsync(operation.ItemId, this.CancellationToken))\n                {\n                    bool success = await this.ExecuteOperationAsync(operation, batch);\n\n                    if (batch.AbortReason.HasValue)\n                    {\n                        break;\n                    }\n\n                    if (success)\n                    {\n                        // we successfuly executed an operation so remove it from queue\n                        await this.OperationQueue.DeleteAsync(operation.Id, operation.Version);\n                    }\n\n                    // get next operation\n                    operation = await this.OperationQueue.PeekAsync(operation.Sequence, this.tableKind, this.tableNames);\n                }\n            }\n        }\n\n        private async Task<bool> ExecuteOperationAsync(MobileServiceTableOperation operation, OperationBatch batch)\n        {\n            if (operation.IsCancelled || this.CancellationToken.IsCancellationRequested)\n            {\n                return false;\n            }\n\n            operation.Table = await this.context.GetTable(operation.TableName);\n            await this.LoadOperationItem(operation, batch);\n\n            if (this.CancellationToken.IsCancellationRequested)\n            {\n                return false;\n            }\n\n            await TryUpdateOperationState(operation, MobileServiceTableOperationState.Attempted, batch);\n\n            // strip out system properties before executing the operation\n            operation.Item = MobileServiceSyncTable.RemoveSystemPropertiesKeepVersion(operation.Item);\n\n            JObject result = null;\n            Exception error = null;\n            try\n            {\n                result = await batch.SyncHandler.ExecuteTableOperationAsync(operation);\n            }\n            catch (Exception ex)\n            {\n                error = ex;\n            }\n\n            if (error != null)\n            {\n                await TryUpdateOperationState(operation, MobileServiceTableOperationState.Failed, batch);\n\n                if (TryAbortBatch(batch, error))\n                {\n                    // there is no error to save in sync error and no result to capture\n                    // this operation will be executed again next time the push happens\n                    return false;\n                }\n            }\n\n            // save the result if ExecuteTableOperation did not throw\n            if (error == null && result.IsValidItem() && operation.CanWriteResultToStore)\n            {\n                await TryStoreOperation(() => this.Store.UpsertAsync(operation.TableName, result, fromServer: true), batch, \"Failed to update the item in the local store.\");\n            }\n            else if (error != null)\n            {\n                HttpStatusCode? statusCode = null;\n                string rawResult = null;\n                var iox = error as MobileServiceInvalidOperationException;\n                if (iox != null && iox.Response != null)\n                {\n                    statusCode = iox.Response.StatusCode;\n                    Tuple<string, JToken> content = await MobileServiceTable.ParseContent(iox.Response, this.client.SerializerSettings);\n                    rawResult = content.Item1;\n                    result = content.Item2.ValidItemOrNull();\n                }\n                var syncError = new MobileServiceTableOperationError(operation.Id,\n                                                                        operation.Version,\n                                                                        operation.Kind,\n                                                                        statusCode,\n                                                                        operation.TableName,\n                                                                        operation.Item,\n                                                                        rawResult,\n                                                                        result)\n                                                                        {\n                                                                            TableKind = this.tableKind,\n                                                                            Context = this.context\n                                                                        };\n                await batch.AddSyncErrorAsync(syncError);\n            }\n\n            bool success = error == null;\n            return success;\n        }\n\n        private async Task TryUpdateOperationState(MobileServiceTableOperation operation, MobileServiceTableOperationState state, OperationBatch batch)\n        {\n            operation.State = state;\n            await TryStoreOperation(() => this.OperationQueue.UpdateAsync(operation), batch, \"Failed to update operation in the local store.\");\n        }\n\n        private async Task LoadOperationItem(MobileServiceTableOperation operation, OperationBatch batch)\n        {\n            // only read the item from store if it is not in the operation already\n            if (operation.Item == null)\n            {\n                await TryStoreOperation(async () =>\n                {\n                    operation.Item = await this.Store.LookupAsync(operation.TableName, operation.ItemId) as JObject;\n                }, batch, \"Failed to read the item from local store.\");\n            }\n        }\n\n        private static async Task TryStoreOperation(Func<Task> action, OperationBatch batch, string error)\n        {\n            try\n            {\n                await action();\n            }\n            catch (Exception ex)\n            {\n                batch.Abort(MobileServicePushStatus.CancelledBySyncStoreError);\n                throw new MobileServiceLocalStoreException(error, ex);\n            }\n        }\n\n        private bool TryAbortBatch(OperationBatch batch, Exception ex)\n        {\n            if (ex.IsNetworkError())\n            {\n                batch.Abort(MobileServicePushStatus.CancelledByNetworkError);\n            }\n            else if (ex.IsAuthenticationError())\n            {\n                batch.Abort(MobileServicePushStatus.CancelledByAuthenticationError);\n            }\n            else if (ex is MobileServicePushAbortException)\n            {\n                batch.Abort(MobileServicePushStatus.CancelledByOperation);\n            }\n            else\n            {\n                return false; // not a known exception that should abort the batch\n            }\n\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Actions/SyncAction.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Base class for all sync actions i.e. Pull, Purge and Push\n    /// </summary>\n    internal abstract class SyncAction\n    {\n        protected OperationQueue OperationQueue { get; private set; }\n        protected TaskCompletionSource<object> TaskSource { get; private set; }\n        protected IMobileServiceLocalStore Store { get; private set; }\n        public CancellationToken CancellationToken { get; private set; }\n\n        public Task CompletionTask\n        {\n            get { return TaskSource.Task; }\n        }\n\n        public SyncAction(OperationQueue operationQueue, IMobileServiceLocalStore store, CancellationToken cancellationToken)\n        {\n            this.OperationQueue = operationQueue;\n            this.Store = store;\n            this.TaskSource = new TaskCompletionSource<object>();\n            this.CancellationToken = cancellationToken;\n\n            cancellationToken.Register(() =>\n            {\n                TaskSource.TrySetCanceled();\n            });\n        }\n\n        public abstract Task ExecuteAsync();\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Actions/TableAction.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Base class for table specific sync actions that push all the pending changes on that table before executing i.e. Purge and Pull\n    /// </summary>\n    internal abstract class TableAction : SyncAction\n    {\n        protected MobileServiceSyncContext Context { get; private set; }\n\n        protected string QueryId { get; private set; }\n        protected MobileServiceTableQueryDescription Query { get; private set; }\n        public MobileServiceTable Table { get; private set; }\n        public MobileServiceTableKind TableKind { get; private set; }\n\n        protected MobileServiceSyncSettingsManager Settings { get; private set; }\n\n        public IEnumerable<string> RelatedTables { get; set; }\n\n        public TableAction(MobileServiceTable table,\n                           MobileServiceTableKind tableKind,\n                           string queryId,\n                           MobileServiceTableQueryDescription query,\n                           IEnumerable<string> relatedTables,\n                           MobileServiceSyncContext context,\n                           OperationQueue operationQueue,\n                           MobileServiceSyncSettingsManager settings,\n                           IMobileServiceLocalStore store,\n                           CancellationToken cancellationToken)\n            : base(operationQueue, store, cancellationToken)\n        {\n            this.Table = table;\n            this.TableKind = tableKind;\n            this.QueryId = queryId;\n            this.Query = query;\n            this.RelatedTables = relatedTables;\n            this.Settings = settings;\n            this.Context = context;\n        }\n\n        public async override Task ExecuteAsync()\n        {\n            try\n            {\n                await this.WaitPendingAction();\n\n                using (await this.OperationQueue.LockTableAsync(this.Table.TableName, this.CancellationToken))\n                {\n                    if (await this.OperationQueue.CountPending(this.Table.TableName) > 0 && !await this.HandleDirtyTable())\n                    {\n                        return; // table is dirty and we cannot proceed for execution as handle return false\n                    }\n\n                    await this.ProcessTableAsync();\n                }\n            }\n            catch (Exception ex)\n            {\n                this.TaskSource.TrySetException(ex);\n                return;\n            }\n            this.TaskSource.SetResult(0);\n        }\n\n        protected virtual Task WaitPendingAction()\n        {\n            return Task.FromResult(0);\n        }\n\n        protected abstract Task<bool> HandleDirtyTable();\n\n        protected abstract Task ProcessTableAsync();\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/OperationBatch.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Executes all the table operations that are triggered by a Push\n    /// </summary>\n    internal class OperationBatch\n    {\n        private MobileServiceSyncContext context;\n\n        /// <summary>\n        /// Errors while interacting with store or calling push complete on handler\n        /// </summary>\n        public List<Exception> OtherErrors { get; private set; }\n\n        /// <summary>\n        /// Status that returns the reson of abort.\n        /// </summary>\n        public MobileServicePushStatus? AbortReason { get; private set; }        \n\n        /// <summary>\n        /// Instance of <see cref=\"IMobileServiceSyncHandler\"/> that is used to execute batch operations.\n        /// </summary>\n        public IMobileServiceSyncHandler SyncHandler { get; private set; }\n\n        /// <summary>\n        /// Local store that operations and date are read from\n        /// </summary>\n        public IMobileServiceLocalStore Store { get; private set; }        \n\n        public OperationBatch(IMobileServiceSyncHandler syncHandler, IMobileServiceLocalStore store, MobileServiceSyncContext context)\n        {\n            this.OtherErrors = new List<Exception>();\n            this.SyncHandler = syncHandler;\n            this.Store = store;\n            this.context = context;\n        }\n\n        /// <summary>\n        /// Changes the status of the operation batch to aborted with the specified reason.\n        /// </summary>\n        /// <param name=\"reason\">Status value that respresents the reason of abort.</param>\n        public void Abort(MobileServicePushStatus reason)\n        {\n            Debug.Assert(reason != MobileServicePushStatus.Complete);\n\n            this.AbortReason = reason;\n        }\n\n        /// <summary>\n        /// Adds a sync error to local store for this batch\n        /// </summary>\n        /// <param name=\"error\">The sync error that occurred.</param>\n        public Task AddSyncErrorAsync(MobileServiceTableOperationError error)\n        {\n            return this.Store.UpsertAsync(MobileServiceLocalSystemTables.SyncErrors, error.Serialize(), fromServer: false);\n        }\n\n        /// <summary>\n        /// Loads all the sync errors in local store that are recorded for this batch.\n        /// </summary>\n        /// <param name=\"serializerSettings\">the serializer settings to use for reading the errors.</param>\n        /// <returns>List of sync errors.</returns>\n        public async Task<IList<MobileServiceTableOperationError>> LoadSyncErrorsAsync(MobileServiceJsonSerializerSettings serializerSettings)\n        {\n            var errors = new List<MobileServiceTableOperationError>();\n\n            JToken result = await this.Store.ReadAsync(new MobileServiceTableQueryDescription(MobileServiceLocalSystemTables.SyncErrors));\n            if (result is JArray)\n            {\n                foreach (JObject error in result)\n                {\n                    var obj = MobileServiceTableOperationError.Deserialize(error, serializerSettings);\n                    obj.Context = this.context;\n                    errors.Add(obj);\n                }\n            }            \n\n            return errors;\n        }\n\n        /// <summary>\n        /// Checks if there are any unhandled sync or handler errors recorded for this batch.\n        /// </summary>\n        /// <param name=\"syncErrors\">List of all handled and unhandled sync errors.</param>\n        /// <returns>True if there are handler errors or unhandled sync errors, False otherwise.</returns>\n        public bool HasErrors(IEnumerable<MobileServiceTableOperationError> syncErrors)\n        {\n            // unhandled sync errors or handler errors\n            return syncErrors.Any(e => !e.Handled) || this.OtherErrors.Any();    \n        }\n\n        /// <summary>\n        /// Deletes all the sync errors from local database\n        /// </summary>\n        public async Task DeleteErrorsAsync()\n        {\n            MobileServiceLocalStoreException toThrow = null;\n\n            try\n            {\n                await this.Store.DeleteAsync(new MobileServiceTableQueryDescription(MobileServiceLocalSystemTables.SyncErrors));\n            }\n            catch (Exception ex)\n            {\n\n                toThrow = new MobileServiceLocalStoreException(\"Failed to delete error from the local store.\", ex);\n            }\n\n            if (toThrow != null)\n            {\n                throw toThrow;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/OperationQueue.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Microsoft.WindowsAzure.MobileServices.Threading;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Queue of all operations i.e. Push, Pull, Insert, Update, Delete\n    /// </summary>\n    internal class OperationQueue\n    {\n        private readonly AsyncLockDictionary tableLocks = new AsyncLockDictionary();\n        private readonly AsyncLockDictionary itemLocks = new AsyncLockDictionary();\n        private readonly IMobileServiceLocalStore store;\n        private long sequenceId;\n        private long pendingOperations;\n\n        public OperationQueue(IMobileServiceLocalStore store)\n        {\n            this.store = store;\n        }\n\n        public async virtual Task<MobileServiceTableOperation> PeekAsync(long prevSequenceId, MobileServiceTableKind tableKind, IEnumerable<string> tableNames)\n        {\n            MobileServiceTableQueryDescription query = CreateQuery();\n\n            var tableKindNode = Compare(BinaryOperatorKind.Equal, \"tableKind\", (int)tableKind);\n            var sequenceNode = Compare(BinaryOperatorKind.GreaterThan, \"sequence\", prevSequenceId);\n\n            query.Filter = new BinaryOperatorNode(BinaryOperatorKind.And, tableKindNode, sequenceNode);\n\n            if (tableNames != null && tableNames.Any())\n            {\n                BinaryOperatorNode nameInList = tableNames.Select(t => Compare(BinaryOperatorKind.Equal, \"tableName\", t))\n                                                          .Aggregate((first, second) => new BinaryOperatorNode(BinaryOperatorKind.Or, first, second));\n                query.Filter = new BinaryOperatorNode(BinaryOperatorKind.And, query.Filter, nameInList);\n            }\n\n            query.Ordering.Add(new OrderByNode(new MemberAccessNode(null, \"sequence\"), OrderByDirection.Ascending));\n            query.Top = 1;\n\n            JObject op = await this.store.FirstOrDefault(query);\n            if (op == null)\n            {\n                return null;\n            }\n\n            return MobileServiceTableOperation.Deserialize(op);\n        }\n\n        public long PendingOperations\n        {\n            get { return pendingOperations; }\n        }\n\n        internal void UpdateOperationCount(long delta)\n        {\n            long current, updated;\n            do\n            {\n                current = this.pendingOperations;\n                updated = current + delta;\n            }\n            while (current != Interlocked.CompareExchange(ref this.pendingOperations, updated, current));\n        }\n\n        public virtual async Task<long> CountPending(string tableName)\n        {\n            MobileServiceTableQueryDescription query = CreateQuery();\n            query.Filter = new BinaryOperatorNode(BinaryOperatorKind.Equal, new MemberAccessNode(null, \"tableName\"), new ConstantNode(tableName));\n            return await this.store.CountAsync(query);\n        }\n\n        public virtual Task<IDisposable> LockTableAsync(string name, CancellationToken cancellationToken)\n        {\n            return this.tableLocks.Acquire(name, cancellationToken);\n        }\n\n        public Task<IDisposable> LockItemAsync(string id, CancellationToken cancellationToken)\n        {\n            return this.itemLocks.Acquire(id, cancellationToken);\n        }\n\n        public async Task<MobileServiceTableOperation> GetOperationByItemIdAsync(string tableName, string itemId)\n        {\n            MobileServiceTableQueryDescription query = CreateQuery();\n            query.Filter = new BinaryOperatorNode(BinaryOperatorKind.And,\n                                Compare(BinaryOperatorKind.Equal, \"tableName\", tableName),\n                                Compare(BinaryOperatorKind.Equal, \"itemId\", itemId));\n            JObject op = await this.store.FirstOrDefault(query);\n            return MobileServiceTableOperation.Deserialize(op);\n        }\n\n        public async Task<MobileServiceTableOperation> GetOperationAsync(string id)\n        {\n            JObject op = await this.store.LookupAsync(MobileServiceLocalSystemTables.OperationQueue, id);\n            if (op == null)\n            {\n                return null;\n            }\n            return MobileServiceTableOperation.Deserialize(op);\n        }\n\n        public async Task EnqueueAsync(MobileServiceTableOperation op)\n        {\n            op.Sequence = Interlocked.Increment(ref this.sequenceId);\n            await this.store.UpsertAsync(MobileServiceLocalSystemTables.OperationQueue, op.Serialize(), fromServer: false);\n            Interlocked.Increment(ref this.pendingOperations);\n        }\n\n        public virtual async Task<bool> DeleteAsync(string id, long version)\n        {\n            try\n            {\n                MobileServiceTableOperation op = await GetOperationAsync(id);\n                if (op == null || op.Version != version)\n                {\n                    return false;\n                }\n\n                await this.store.DeleteAsync(MobileServiceLocalSystemTables.OperationQueue, id);\n                Interlocked.Decrement(ref this.pendingOperations);\n                return true;\n            }\n            catch (Exception ex)\n            {\n                throw new MobileServiceLocalStoreException(\"Failed to delete operation from the local store.\", ex);\n            }\n        }\n\n        public virtual async Task UpdateAsync(MobileServiceTableOperation op)\n        {\n            try\n            {\n                await this.store.UpsertAsync(MobileServiceLocalSystemTables.OperationQueue, op.Serialize(), fromServer: false);\n            }\n            catch (Exception ex)\n            {\n                throw new MobileServiceLocalStoreException(\"Failed to update operation in the local store.\", ex);\n            }\n        }\n\n        public virtual async Task<bool> UpdateAsync(string id, long version, JObject item)\n        {\n            try\n            {\n                MobileServiceTableOperation op = await GetOperationAsync(id);                \n                if (op == null || op.Version != version)\n                {\n                    return false;\n                }\n\n                op.Version++;\n\n                // Change the operation state back to pending since this is a newly updated operation without any conflicts\n                op.State = MobileServiceTableOperationState.Pending;\n                \n                // if the operation type is delete then set the item property in the Operation table\n                if (op.Kind == MobileServiceTableOperationKind.Delete)\n                {\n                    op.Item = item;\n                }\n                else\n                {\n                    op.Item = null;\n                }\n\n                await this.UpdateAsync(op);\n                return true;\n            }\n            catch (Exception ex)\n            {\n                throw new MobileServiceLocalStoreException(\"Failed to update operation in the local store.\", ex);\n            }\n        }\n\n        public static async Task<OperationQueue> LoadAsync(IMobileServiceLocalStore store)\n        {\n            var opQueue = new OperationQueue(store);\n\n            var query = CreateQuery();\n            // to know how many pending operations are there\n            query.IncludeTotalCount = true;\n            // to get the max sequence id, order by sequence desc\n            query.Ordering.Add(new OrderByNode(new MemberAccessNode(null, \"sequence\"), OrderByDirection.Descending));\n            // we just need the highest value, not all the operations\n            query.Top = 1;\n\n            QueryResult result = await store.QueryAsync(query);\n            opQueue.pendingOperations = result.TotalCount;\n            opQueue.sequenceId = result.Values == null ? 0 : result.Values.Select(v => v.Value<long>(\"sequence\")).FirstOrDefault();\n\n            return opQueue;\n        }\n\n        private static MobileServiceTableQueryDescription CreateQuery()\n        {\n            var query = new MobileServiceTableQueryDescription(MobileServiceLocalSystemTables.OperationQueue);\n            return query;\n        }\n\n        private static BinaryOperatorNode Compare(BinaryOperatorKind kind, string member, object value)\n        {\n            return new BinaryOperatorNode(kind, new MemberAccessNode(null, member), new ConstantNode(value));\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Operations/DeleteOperation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.Net;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    internal class DeleteOperation : MobileServiceTableOperation\n    {\n        public override MobileServiceTableOperationKind Kind\n        {\n            get { return MobileServiceTableOperationKind.Delete; }\n        }\n\n        public override bool CanWriteResultToStore\n        {\n            get { return false; } // delete result should not be written to store, otherwise we're adding back the item that user deleted\n        }\n\n        protected override bool SerializeItemToQueue\n        {\n            get { return true; } // delete should save the item in queue since store copy is deleted right away with delete operation\n        }\n\n        public DeleteOperation(string tableName, MobileServiceTableKind tableKind, string itemId)\n            : base(tableName, tableKind, itemId)\n        {\n        }\n\n        protected override async Task<JToken> OnExecuteAsync()\n        {\n            try\n            {\n                return await this.Table.DeleteAsync(this.Item);\n            }\n            catch (MobileServiceInvalidOperationException ex)\n            {\n                // if the item is already deleted then local store is in-sync with the server state\n                if (ex.Response.StatusCode == HttpStatusCode.NotFound)\n                {\n                    return null;\n                }\n                throw;\n            }\n        }\n\n        public override void Validate(MobileServiceTableOperation newOperation)\n        {\n            Debug.Assert(newOperation.ItemId == this.ItemId);\n\n            // we don't allow any more operations on object that has already been deleted\n            throw new InvalidOperationException(\"A delete operation on the item is already in the queue.\");\n        }\n\n        public override void Collapse(MobileServiceTableOperation other)\n        {\n            // nothing to collapse we don't allow any operation after delete\n        }\n\n        public override Task ExecuteLocalAsync(IMobileServiceLocalStore store, JObject item)\n        {\n            return store.DeleteAsync(this.TableName, this.ItemId);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Operations/IMobileServiceTableOperation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// An object representing table operation against remote table\n    /// </summary>\n    public interface IMobileServiceTableOperation\n    {\n        /// <summary>\n        /// The kind of operation\n        /// </summary>\n        MobileServiceTableOperationKind Kind { get; }\n\n        /// <summary>\n        /// The state of the operation\n        /// </summary>\n        MobileServiceTableOperationState State { get; }\n\n        /// <summary>\n        /// The table that the operation will be executed against.\n        /// </summary>\n        IMobileServiceTable Table { get; }\n\n        /// <summary>\n        /// The item associated with the operation.\n        /// </summary>\n        JObject Item { get; set; }\n\n        /// <summary>\n        /// Executes the operation against remote table.\n        /// </summary>\n        Task<JObject> ExecuteAsync();\n\n        /// <summary>\n        /// Abort the parent push operation.\n        /// </summary>\n        void AbortPush();\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Operations/InsertOperation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    internal class InsertOperation : MobileServiceTableOperation\n    {\n        public override MobileServiceTableOperationKind Kind\n        {\n            get { return MobileServiceTableOperationKind.Insert; }\n        }\n\n        public InsertOperation(string tableName, MobileServiceTableKind tableKind, string itemId)\n            : base(tableName, tableKind, itemId)\n        {\n        }\n\n        protected override Task<JToken> OnExecuteAsync()\n        {\n            string version;\n            // for insert operations version should not be sent so strip it out\n            JObject item = MobileServiceSerializer.RemoveSystemProperties(this.Item, out version);\n            return this.Table.InsertAsync(item);\n        }\n\n        public override void Validate(MobileServiceTableOperation newOperation)\n        {\n            Debug.Assert(newOperation.ItemId == this.ItemId);\n\n            if (newOperation is InsertOperation)\n            {\n                throw new InvalidOperationException(\"An insert operation on the item is already in the queue.\");\n            }\n\n            if (newOperation is DeleteOperation && this.State != MobileServiceTableOperationState.Pending)\n            {\n                // if insert was attempted then we can't be sure if it went through or not hence we can't collapse delete\n                throw new InvalidOperationException(\"The item is in inconsistent state in the local store. Please complete the pending sync by calling PushAsync() before deleting the item.\");\n            }\n        }\n\n        public override void Collapse(MobileServiceTableOperation newOperation)\n        {\n            Debug.Assert(newOperation.ItemId == this.ItemId);\n\n            if (newOperation is DeleteOperation)\n            {\n                this.Cancel();\n                newOperation.Cancel();\n            }\n            else if (newOperation is UpdateOperation)\n            {\n                this.Update();\n                newOperation.Cancel();\n            }\n        }\n\n        public override async Task ExecuteLocalAsync(IMobileServiceLocalStore store, JObject item)\n        {\n            if (await store.LookupAsync(this.TableName, this.ItemId) != null)\n            {\n                throw new MobileServiceLocalStoreException(\"An insert operation on the item is already in the queue.\", null);\n            }\n\n            await store.UpsertAsync(this.TableName, item, fromServer: false);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Operations/MobileServiceTableKind.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Enumeration for kinds of tables.\n    /// </summary>\n    internal enum MobileServiceTableKind\n    {\n        /// <summary>\n        /// Standard Table\n        /// </summary>\n        Table = 0\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Operations/MobileServiceTableOperation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    internal abstract class MobileServiceTableOperation : IMobileServiceTableOperation\n    {\n        // --- Persisted properties -- //\n        public string Id { get; private set; }\n        public abstract MobileServiceTableOperationKind Kind { get; }\n        public MobileServiceTableKind TableKind { get; private set; }\n        public string TableName { get; private set; }\n        public string ItemId { get; private set; }\n        public JObject Item { get; set; }\n\n        public MobileServiceTableOperationState State { get; internal set; }\n        public long Sequence { get; set; }\n        public long Version { get; set; }\n\n        // --- Non persisted properties -- //\n        IMobileServiceTable IMobileServiceTableOperation.Table\n        {\n            get { return this.Table; }\n        }\n\n        public MobileServiceTable Table { get; set; }\n\n        public bool IsCancelled { get; private set; }\n        public bool IsUpdated { get; private set; }\n\n        public virtual bool CanWriteResultToStore\n        {\n            get { return true; }\n        }\n\n        protected virtual bool SerializeItemToQueue\n        {\n            get { return false; }\n        }\n\n        protected MobileServiceTableOperation(string tableName, MobileServiceTableKind tableKind, string itemId)\n        {\n            this.Id = Guid.NewGuid().ToString();\n            this.State = MobileServiceTableOperationState.Pending;\n            this.TableKind = tableKind;\n            this.TableName = tableName;\n            this.ItemId = itemId;\n            this.Version = 1;\n        }\n\n        public void AbortPush()\n        {\n            throw new MobileServicePushAbortException();\n        }\n\n        public async Task<JObject> ExecuteAsync()\n        {\n            if (this.IsCancelled)\n            {\n                return null;\n            }\n\n            if (this.Item == null)\n            {\n                throw new MobileServiceInvalidOperationException(\"Operation must have an item associated with it.\", request: null, response: null);\n            }\n\n            JToken response = await OnExecuteAsync();\n            var result = response as JObject;\n            if (response != null && result == null)\n            {\n                throw new MobileServiceInvalidOperationException(\"Mobile Service table operation returned an unexpected response.\", request: null, response: null);\n            }\n\n            return result;\n        }\n\n        protected abstract Task<JToken> OnExecuteAsync();\n\n        internal void Cancel()\n        {\n            this.IsCancelled = true;\n        }\n\n        internal void Update()\n        {\n            this.Version++;\n            this.IsUpdated = true;\n        }\n\n        /// <summary>\n        /// Execute the operation on sync store\n        /// </summary>\n        /// <param name=\"store\">Sync store</param>\n        /// <param name=\"item\">The item to use for store operation</param>\n        public abstract Task ExecuteLocalAsync(IMobileServiceLocalStore store, JObject item);\n\n        /// <summary>\n        /// Validates that the operation can collapse with the late operation\n        /// </summary>\n        /// <exception cref=\"InvalidOperationException\">This method throws when the operation cannot collapse with new operation.</exception>\n        public abstract void Validate(MobileServiceTableOperation newOperation);\n\n        /// <summary>\n        /// Collapse this operation with the late operation by cancellation of either operation.\n        /// </summary>\n        public abstract void Collapse(MobileServiceTableOperation newOperation);\n\n        /// <summary>\n        /// Defines the the table for storing operations\n        /// </summary>\n        /// <param name=\"store\">An instance of <see cref=\"IMobileServiceLocalStore\"/></param>\n        internal static void DefineTable(MobileServiceLocalStore store)\n        {\n            store.DefineTable(MobileServiceLocalSystemTables.OperationQueue, new JObject()\n            {\n                { MobileServiceSystemColumns.Id, String.Empty },\n                { \"kind\", 0 },\n                { \"state\", 0 },\n                { \"tableName\", String.Empty },\n                { \"tableKind\", 0 },\n                { \"itemId\", String.Empty },\n                { \"item\", String.Empty },\n                { MobileServiceSystemColumns.CreatedAt, DateTime.Now },\n                { \"sequence\", 0 },\n                { \"version\", 0 }\n            });\n        }\n\n        internal JObject Serialize()\n        {\n            var obj = new JObject()\n            {\n                { MobileServiceSystemColumns.Id, this.Id },\n                { \"kind\", (int)this.Kind },\n                { \"state\", (int)this.State },\n                { \"tableName\", this.TableName },\n                { \"tableKind\", (int)this.TableKind },\n                { \"itemId\", this.ItemId },\n                { \"item\", this.Item != null && this.SerializeItemToQueue ? this.Item.ToString(Formatting.None) : null },\n                { \"sequence\", this.Sequence },\n                { \"version\", this.Version }\n            };\n\n            return obj;\n        }\n\n        internal static MobileServiceTableOperation Deserialize(JObject obj)\n        {\n            if (obj == null)\n            {\n                return null;\n            }\n\n            var kind = (MobileServiceTableOperationKind)obj.Value<int>(\"kind\");\n            string tableName = obj.Value<string>(\"tableName\");\n            var tableKind = (MobileServiceTableKind)obj.Value<int?>(\"tableKind\").GetValueOrDefault();\n            string itemId = obj.Value<string>(\"itemId\");\n\n\n            MobileServiceTableOperation operation = null;\n            switch (kind)\n            {\n                case MobileServiceTableOperationKind.Insert:\n                    operation = new InsertOperation(tableName, tableKind, itemId); break;\n                case MobileServiceTableOperationKind.Update:\n                    operation = new UpdateOperation(tableName, tableKind, itemId); break;\n                case MobileServiceTableOperationKind.Delete:\n                    operation = new DeleteOperation(tableName, tableKind, itemId); break;\n            }\n\n            if (operation != null)\n            {\n                operation.Id = obj.Value<string>(MobileServiceSystemColumns.Id);\n                operation.Sequence = obj.Value<long?>(\"sequence\").GetValueOrDefault();\n                operation.Version = obj.Value<long?>(\"version\").GetValueOrDefault();\n                string itemJson = obj.Value<string>(\"item\");\n                operation.Item = !String.IsNullOrEmpty(itemJson) ? JObject.Parse(itemJson) : null;\n                operation.State = (MobileServiceTableOperationState)obj.Value<int?>(\"state\").GetValueOrDefault();\n            }\n\n            return operation;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Operations/MobileServiceTableOperationError.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Net;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Gives details of failed table operation.\n    /// </summary>\n    public class MobileServiceTableOperationError\n    {\n        /// <summary>\n        /// A unique identifier for the error. The Value matches value of MobileServiceTableOperation Id property.\n        /// </summary>\n        internal string Id { get; private set; }\n\n        /// <summary>\n        /// Indicates whether error is handled.\n        /// </summary>\n        public bool Handled { get; set; }\n\n        /// <summary>\n        /// The version of the operation.\n        /// </summary>\n        internal long OperationVersion { get; private set; }\n\n        /// <summary>\n        /// The kind of table operation.\n        /// </summary>\n        public MobileServiceTableOperationKind OperationKind { get; private set; }\n\n        /// <summary>\n        /// The kind of table \n        /// </summary>\n        internal MobileServiceTableKind TableKind { get; set; }\n\n        /// <summary>\n        /// The name of the remote table.\n        /// </summary>\n        public string TableName { get; private set; }\n\n        /// <summary>\n        /// The item associated with the operation.\n        /// </summary>\n        public JObject Item { get; private set; }\n\n        /// <summary>\n        /// Response of the table operation.\n        /// </summary>\n        public JObject Result { get; private set; }\n\n        /// <summary>\n        /// Raw response of the table operation.\n        /// </summary>\n        public string RawResult { get; private set; }\n\n        /// <summary>\n        /// The HTTP status code returned by server.\n        /// </summary>        \n        public HttpStatusCode? Status { get; private set; } // this is nullable because this error can also occur if the handler throws an exception\n\n        internal MobileServiceSyncContext Context { get; set; }\n\n        /// <summary>\n        /// Initializes an instance of <see cref=\"MobileServiceTableOperationError\"/>\n        /// </summary>\n        /// <param name=\"id\">The id of error that is same as operation id.</param>\n        /// <param name=\"operationVersion\">The version of the operation.</param>\n        /// <param name=\"operationKind\">The kind of table operation.</param>\n        /// <param name=\"status\">The HTTP status code returned by server.</param>\n        /// <param name=\"tableName\">The name of the remote table.</param>\n        /// <param name=\"item\">The item associated with the operation.</param>\n        /// <param name=\"rawResult\">Raw response of the table operation.</param>\n        /// <param name=\"result\">Response of the table operation.</param>\n        public MobileServiceTableOperationError(string id,\n                                                long operationVersion,\n                                                MobileServiceTableOperationKind operationKind,\n                                                HttpStatusCode? status,\n                                                string tableName,\n                                                JObject item,\n                                                string rawResult,\n                                                JObject result)\n        {\n            this.Id = id;\n            this.OperationVersion = operationVersion;\n            this.Status = status;\n            this.OperationKind = operationKind;\n            this.TableName = tableName;\n            this.Item = item;\n            this.RawResult = rawResult;\n            this.Result = result;\n        }\n\n        /// <summary>\n        /// Cancels the table operation and updates the local instance of the item with the given item.\n        /// </summary>\n        /// <param name=\"item\">The item to update in local store.</param>\n        /// <returns>Task that completes when operation is cancelled.</returns>\n        public async Task CancelAndUpdateItemAsync(JObject item)\n        {\n            if (item == null)\n            {\n                throw new ArgumentNullException(\"item\");\n            }\n\n            await this.Context.CancelAndUpdateItemAsync(this, item);\n            this.Handled = true;\n        }\n\n        /// <summary>\n        /// Updates the table operation and updates the local instance of the item with the given item. \n        /// Clears the error and sets the operation state to pending.\n        /// </summary>\n        /// <param name=\"item\">The item to update in local store.</param>\n        /// <returns>Task that completes when operation is updated.</returns>\n        public async Task UpdateOperationAsync(JObject item)\n        {\n            if (item == null)\n            {\n                throw new ArgumentNullException(\"item\");\n            }\n\n            await this.Context.UpdateOperationAsync(this, item);\n            this.Handled = true;\n        }\n\n        /// <summary>\n        /// Cancels the table operation and discards the local instance of the item.\n        /// </summary>\n        /// <returns>Task that completes when operation is cancelled.</returns>\n        public async Task CancelAndDiscardItemAsync()\n        {\n            await this.Context.CancelAndDiscardItemAsync(this);\n            this.Handled = true;\n        }\n\n        /// <summary>\n        /// Defines the the table for storing errors\n        /// </summary>\n        /// <param name=\"store\">An instance of <see cref=\"IMobileServiceLocalStore\"/></param>\n        internal static void DefineTable(MobileServiceLocalStore store)\n        {\n            store.DefineTable(MobileServiceLocalSystemTables.SyncErrors, new JObject()\n            {\n                { MobileServiceSystemColumns.Id, String.Empty },\n                { \"httpStatus\", 0 },\n                { \"operationVersion\", 0 },\n                { \"operationKind\", 0 },\n                { \"tableName\", String.Empty },\n                { \"tableKind\", 0 },\n                { \"item\", String.Empty },\n                { \"rawResult\", String.Empty }\n            });\n        }\n\n        internal JObject Serialize()\n        {\n            return new JObject()\n            {\n                { MobileServiceSystemColumns.Id, this.Id },\n                { \"httpStatus\", this.Status.HasValue ? (int?)this.Status.Value: null },\n                { \"operationVersion\", this.OperationVersion },\n                { \"operationKind\", (int)this.OperationKind },\n                { \"tableName\", this.TableName },\n                { \"tableKind\", (int)this.TableKind },\n                { \"item\", this.Item.ToString(Formatting.None) },\n                { \"rawResult\", this.RawResult }\n            };\n        }\n\n        internal static MobileServiceTableOperationError Deserialize(JObject obj, MobileServiceJsonSerializerSettings settings)\n        {\n            HttpStatusCode? status = null;\n            if (obj[\"httpStatus\"] != null)\n            {\n                status = (HttpStatusCode?)obj.Value<int?>(\"httpStatus\");\n            }\n            string id = obj.Value<string>(MobileServiceSystemColumns.Id);\n            long operationVersion = obj.Value<long?>(\"operationVersion\").GetValueOrDefault();\n            MobileServiceTableOperationKind operationKind = (MobileServiceTableOperationKind)obj.Value<int>(\"operationKind\");\n            var tableName = obj.Value<string>(\"tableName\");\n            var tableKind = (MobileServiceTableKind)obj.Value<int?>(\"tableKind\").GetValueOrDefault();\n\n            string itemStr = obj.Value<string>(\"item\");\n            JObject item = itemStr == null ? null : JObject.Parse(itemStr);\n            string rawResult = obj.Value<string>(\"rawResult\");\n            var result = rawResult.ParseToJToken(settings) as JObject;\n\n            return new MobileServiceTableOperationError(id,\n                                                        operationVersion,\n                                                        operationKind,\n                                                        status,\n                                                        tableName,\n                                                        item,\n                                                        rawResult,\n                                                        result)\n            {\n                Id = id,\n                TableKind = tableKind\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Operations/MobileServiceTableOperationKind.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Enumeration for kinds of table operations.\n    /// </summary>\n    public enum MobileServiceTableOperationKind\n    {        \n        /// <summary>\n        /// Insert operation\n        /// </summary>\n        Insert = 0,\n        /// <summary>\n        /// Update operation\n        /// </summary>\n        Update = 1,\n        /// <summary>\n        /// Delete operation\n        /// </summary>\n        Delete = 2\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Operations/MobileServiceTableOperationState.cs",
    "content": "﻿\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    /// <summary>\n    /// Enumeration for the state of table operation.\n    /// </summary>\n    public enum MobileServiceTableOperationState\n    {\n        /// <summary>\n        /// Pending\n        /// </summary>\n        Pending = 0,\n        /// <summary>\n        /// Attempted\n        /// </summary>\n        Attempted = 1,\n        /// <summary>\n        /// Failed\n        /// </summary>\n        Failed = 2\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Table/Sync/Queue/Operations/UpdateOperation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Sync\n{\n    internal class UpdateOperation : MobileServiceTableOperation\n    {\n        public override MobileServiceTableOperationKind Kind\n        {\n            get { return MobileServiceTableOperationKind.Update; }\n        }\n\n        public UpdateOperation(string tableName, MobileServiceTableKind tableKind, string itemId)\n            : base(tableName, tableKind, itemId)\n        {\n        }\n\n        protected override Task<JToken> OnExecuteAsync()\n        {\n            return this.Table.UpdateAsync(this.Item);\n        }\n\n        public override void Validate(MobileServiceTableOperation newOperation)\n        {\n            Debug.Assert(newOperation.ItemId == this.ItemId);\n\n            if (newOperation is InsertOperation)\n            {\n                throw new InvalidOperationException(\"An update operation on the item is already in the queue.\");\n            }\n        }\n\n        public override void Collapse(MobileServiceTableOperation newOperation)\n        {\n            Debug.Assert(newOperation.ItemId == this.ItemId);\n\n            if (newOperation is DeleteOperation)\n            {\n                this.Cancel();\n                newOperation.Update();\n            }\n            else if (newOperation is UpdateOperation)\n            {\n                this.Update();\n                newOperation.Cancel();\n            }\n        }\n\n        public override Task ExecuteLocalAsync(IMobileServiceLocalStore store, JObject item)\n        {\n            return store.UpsertAsync(this.TableName, item, fromServer: false);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Threading/ActionBlock.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Threading\n{\n    /// <summary>\n    /// Queue for executing asynchronous tasks in a first-in-first-out fashion.\n    /// </summary>\n    internal class ActionBlock: IDisposable\n    {\n        AsyncLock theLock;\n\n        public ActionBlock()\n        {\n            theLock = new AsyncLock();\n        }\n\n        public async Task Post(Func<Task> action, CancellationToken cancellationToken)\n        {\n            using (await theLock.Acquire(cancellationToken))\n            {\n                await action(); \n            }\n        }\n\n        public void Dispose()\n        {\n            Dispose(disposing: true);\n            GC.SuppressFinalize(this);\n        }\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                this.theLock.Dispose();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Threading/AsyncLock.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Threading\n{\n    internal sealed class AsyncLock : IDisposable\n    {\n        private SemaphoreSlim semaphore = new SemaphoreSlim(initialCount: 1, maxCount: 1);\n\n        public async Task<IDisposable> Acquire(CancellationToken cancellationToken)\n        {\n            await this.semaphore.WaitAsync(cancellationToken)\n                                .ConfigureAwait(continueOnCapturedContext: false);\n\n            return new DisposeAction(() => this.semaphore.Release());\n        }\n\n        public void Dispose()\n        {\n            this.semaphore.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Threading/AsyncLockDictionary.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Threading\n{\n    internal class AsyncLockDictionary\n    {\n        sealed class LockEntry: IDisposable\n        {\n            public int Count;\n            public readonly AsyncLock Lock = new AsyncLock();\n\n            public void Dispose()\n            {\n                this.Lock.Dispose();\n            }\n        }\n\n        Dictionary<string, LockEntry> locks = new Dictionary<string, LockEntry>();\n\n        public async Task<IDisposable> Acquire(string key, CancellationToken cancellationToken)\n        {\n            LockEntry entry;\n\n            lock(locks)\n            {\n                if (!locks.TryGetValue(key, out entry))\n                {\n                    locks[key] = entry = new LockEntry();\n                }\n                entry.Count++;                \n            }\n\n            IDisposable releaser = await entry.Lock.Acquire(cancellationToken);\n\n            return new DisposeAction(() =>\n            {\n                lock(locks)\n                {\n                    entry.Count--;\n                    releaser.Dispose();\n                    if (entry.Count == 0)\n                    {\n                        this.locks.Remove(key);\n                        entry.Dispose();\n                    }\n                }\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Threading/AsyncReaderWriterLock.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Threading\n{\n    internal class AsyncReaderWriterLock\n    {\n        private readonly Task<DisposeAction> readerReleaser;\n        private readonly Task<DisposeAction> writerReleaser;\n        private readonly Queue<TaskCompletionSource<DisposeAction>> waitingWriters = new Queue<TaskCompletionSource<DisposeAction>>(); \n        private TaskCompletionSource<DisposeAction> waitingReader = new TaskCompletionSource<DisposeAction>(); \n        private int readersWaiting;\n\n        private int lockStatus; // -1 means write lock, >=0 no. of read locks\n\n        public AsyncReaderWriterLock()\n        {\n            this.readerReleaser = Task.FromResult(new DisposeAction(this.ReaderRelease));\n            this.writerReleaser = Task.FromResult(new DisposeAction(this.WriterRelease)); \n        }\n\n        public Task<DisposeAction> ReaderLockAsync() \n        {\n            lock (this.waitingWriters) \n            {\n                bool hasPendingReaders = this.lockStatus >= 0;\n                bool hasNoPendingWritiers = this.waitingWriters.Count == 0;\n                if (hasPendingReaders && hasNoPendingWritiers) \n                {\n                    ++this.lockStatus;\n                    return this.readerReleaser; \n                } \n                else \n                {\n                    ++this.readersWaiting;\n                    return this.waitingReader.Task.ContinueWith(t => t.Result);\n                } \n            } \n        }\n\n        public Task<DisposeAction> WriterLockAsync() \n        {\n            lock (this.waitingWriters) \n            {\n                bool hasNoPendingReaders = this.lockStatus == 0;\n                if (hasNoPendingReaders) \n                {\n                    this.lockStatus = -1;\n                    return this.writerReleaser; \n                } \n                else \n                { \n                    var waiter = new TaskCompletionSource<DisposeAction>();\n                    this.waitingWriters.Enqueue(waiter); \n                    return waiter.Task; \n                } \n            } \n        }\n\n        private void ReaderRelease() \n        { \n            TaskCompletionSource<DisposeAction> toWake = null;\n\n            lock (this.waitingWriters) \n            {\n                --this.lockStatus;\n                if (this.lockStatus == 0 && this.waitingWriters.Count > 0) \n                {\n                    this.lockStatus = -1;\n                    toWake = this.waitingWriters.Dequeue(); \n                } \n            }\n\n            if (toWake != null) \n            {\n                toWake.SetResult(new DisposeAction(this.WriterRelease)); \n            }\n        }\n        private void WriterRelease()\n        {\n            TaskCompletionSource<DisposeAction> toWake = null;\n            Action wakeupAction = this.ReaderRelease;\n\n            lock (this.waitingWriters)\n            {\n                if (this.waitingWriters.Count > 0)\n                {\n                    toWake = this.waitingWriters.Dequeue();\n                    wakeupAction = this.WriterRelease;\n                }\n                else if (this.readersWaiting > 0)\n                {\n                    toWake = this.waitingReader;\n                    this.lockStatus = this.readersWaiting;\n                    this.readersWaiting = 0;\n                    this.waitingReader = new TaskCompletionSource<DisposeAction>();\n                }\n                else\n                {\n                    this.lockStatus = 0;\n                }\n            }\n\n            if (toWake != null)\n            {\n                toWake.SetResult(new DisposeAction(wakeupAction));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Threading/DisposeAction.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Threading\n{\n    internal struct DisposeAction: IDisposable\n    {\n        bool isDisposed;\n        private Action action;\n\n        public DisposeAction(Action action)\n        {\n            this.isDisposed = false;\n            this.action = action;\n        }\n\n        public void Dispose()\n        {\n            if (this.isDisposed)\n            {\n                return;\n            }\n\n            this.isDisposed = true;\n            this.action();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"portable-net45+win+wpa81+wp80\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/Authentication/MobileServiceUIAuthentication.cs",
    "content": "using System;\nusing System.Globalization;\nusing Android.Content;\nusing System.Threading.Tasks;\nusing Xamarin.Auth._MobileServices;\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class MobileServiceUIAuthentication : MobileServiceAuthentication\n    {\n        public MobileServiceUIAuthentication (Context context, IMobileServiceClient client, string providerName, IDictionary<string, string> parameters)\n            : base (client, providerName, parameters)\n        {\n            this.context = context;\n        }\n\n        private Context context;\n\n        protected override Task<string> LoginAsyncOverride()\n        {\n            var tcs = new TaskCompletionSource<string>();\n\n            var auth = new WebRedirectAuthenticator (StartUri, EndUri);\n            auth.ShowUIErrors = false;\n            auth.ClearCookiesBeforeLogin = false;\n\n            Intent intent = auth.GetUI (this.context);\n\n            auth.Error += (sender, e) =>\n            {\n                string message = String.Format (CultureInfo.InvariantCulture, \"Authentication failed with HTTP response code {0}.\", e.Message);\n                InvalidOperationException ex = (e.Exception == null)\n                    ? new InvalidOperationException (message)\n                    : new InvalidOperationException (message, e.Exception);\n\n                tcs.TrySetException (ex);\n            };\n\n            auth.Completed += (sender, e) =>\n            {\n                if (!e.IsAuthenticated)\n                    tcs.TrySetException (new InvalidOperationException (\"Authentication was cancelled by the user.\"));\n                else\n                    tcs.TrySetResult(e.Account.Properties[\"token\"]);\n            };\n\n            context.StartActivity (intent);\n            \n            return tcs.Task;\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/ExpressionUtility/ExpressionVisitor.cs",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal abstract class ExpressionVisitor\n    {\n        protected ExpressionVisitor()\n        {\n        }\n\n        public virtual Expression Visit(Expression exp)\n        {\n            if (exp == null)\n            {\n                return exp;\n            }\n            switch (exp.NodeType)\n            {\n                case ExpressionType.UnaryPlus:\n                case ExpressionType.Negate:\n                case ExpressionType.NegateChecked:\n                case ExpressionType.Not:\n                case ExpressionType.Convert:\n                case ExpressionType.ConvertChecked:\n                case ExpressionType.ArrayLength:\n                case ExpressionType.Quote:\n                case ExpressionType.TypeAs:\n                    return this.VisitUnary((UnaryExpression)exp);\n                case ExpressionType.Add:\n                case ExpressionType.AddChecked:\n                case ExpressionType.Subtract:\n                case ExpressionType.SubtractChecked:\n                case ExpressionType.Multiply:\n                case ExpressionType.MultiplyChecked:\n                case ExpressionType.Divide:\n                case ExpressionType.Modulo:\n                case ExpressionType.And:\n                case ExpressionType.AndAlso:\n                case ExpressionType.Or:\n                case ExpressionType.OrElse:\n                case ExpressionType.LessThan:\n                case ExpressionType.LessThanOrEqual:\n                case ExpressionType.GreaterThan:\n                case ExpressionType.GreaterThanOrEqual:\n                case ExpressionType.Equal:\n                case ExpressionType.NotEqual:\n                case ExpressionType.Coalesce:\n                case ExpressionType.ArrayIndex:\n                case ExpressionType.RightShift:\n                case ExpressionType.LeftShift:\n                case ExpressionType.ExclusiveOr:\n                    return this.VisitBinary((BinaryExpression)exp);\n                case ExpressionType.TypeIs:\n                    return this.VisitTypeIs((TypeBinaryExpression)exp);\n                case ExpressionType.Conditional:\n                    return this.VisitConditional((ConditionalExpression)exp);\n                case ExpressionType.Constant:\n                    return this.VisitConstant((ConstantExpression)exp);\n                case ExpressionType.Parameter:\n                    return this.VisitParameter((ParameterExpression)exp);\n                case ExpressionType.MemberAccess:\n                    return this.VisitMember((MemberExpression)exp);\n                case ExpressionType.Call:\n                    return this.VisitMethodCall((MethodCallExpression)exp);\n                case ExpressionType.Lambda:\n                    return this.VisitLambda((LambdaExpression)exp);\n                case ExpressionType.New:\n                    return this.VisitNew((NewExpression)exp);\n                case ExpressionType.NewArrayInit:\n                case ExpressionType.NewArrayBounds:\n                    return this.VisitNewArray((NewArrayExpression)exp);\n                case ExpressionType.Invoke:\n                    return this.VisitInvocation((InvocationExpression)exp);\n                case ExpressionType.MemberInit:\n                    return this.VisitMemberInit((MemberInitExpression)exp);\n                case ExpressionType.ListInit:\n                    return this.VisitListInit((ListInitExpression)exp);\n                default:\n                    throw new NotSupportedException(string.Format(\"Unhandled expression type: '{0}'\", exp.NodeType));\n            }\n        }\n\n        protected virtual MemberBinding VisitBinding(MemberBinding binding)\n        {\n            switch (binding.BindingType)\n            {\n                case MemberBindingType.Assignment:\n                    return this.VisitMemberAssignment((MemberAssignment)binding);\n                case MemberBindingType.MemberBinding:\n                    return this.VisitMemberMemberBinding((MemberMemberBinding)binding);\n                case MemberBindingType.ListBinding:\n                    return this.VisitMemberListBinding((MemberListBinding)binding);\n                default:\n                    throw new NotSupportedException(string.Format(\"Unhandled binding type '{0}'\", binding.BindingType));\n            }\n        }\n\n        protected virtual ElementInit VisitElementInitializer(ElementInit initializer)\n        {\n            ReadOnlyCollection<Expression> arguments = this.VisitExpressionList(initializer.Arguments);\n            if (arguments != initializer.Arguments)\n            {\n                return Expression.ElementInit(initializer.AddMethod, arguments);\n            }\n            return initializer;\n        }\n\n        protected virtual Expression VisitUnary(UnaryExpression u)\n        {\n            Expression operand = this.Visit(u.Operand);\n            if (operand != u.Operand)\n            {\n                return Expression.MakeUnary(u.NodeType, operand, u.Type, u.Method);\n            }\n            return u;\n        }\n\n        protected virtual Expression VisitBinary(BinaryExpression b)\n        {\n            Expression left = this.Visit(b.Left);\n            Expression right = this.Visit(b.Right);\n            Expression conversion = this.Visit(b.Conversion);\n            if (left != b.Left || right != b.Right || conversion != b.Conversion)\n            {\n                if (b.NodeType == ExpressionType.Coalesce && b.Conversion != null)\n                {\n                    return Expression.Coalesce(left, right, conversion as LambdaExpression);\n                }\n                else\n                {\n                    return Expression.MakeBinary(b.NodeType, left, right, b.IsLiftedToNull, b.Method);\n                }\n            }\n            return b;\n        }\n\n        protected virtual Expression VisitTypeIs(TypeBinaryExpression b)\n        {\n            Expression expr = this.Visit(b.Expression);\n            if (expr != b.Expression)\n            {\n                return Expression.TypeIs(expr, b.TypeOperand);\n            }\n            return b;\n        }\n\n        protected virtual Expression VisitConstant(ConstantExpression c)\n        {\n            return c;\n        }\n\n        protected virtual Expression VisitConditional(ConditionalExpression c)\n        {\n            Expression test = this.Visit(c.Test);\n            Expression ifTrue = this.Visit(c.IfTrue);\n            Expression ifFalse = this.Visit(c.IfFalse);\n            if (test != c.Test || ifTrue != c.IfTrue || ifFalse != c.IfFalse)\n            {\n                return Expression.Condition(test, ifTrue, ifFalse);\n            }\n            return c;\n        }\n\n        protected virtual Expression VisitParameter(ParameterExpression p)\n        {\n            return p;\n        }\n\n        protected virtual Expression VisitMember(MemberExpression m)\n        {\n            Expression exp = this.Visit(m.Expression);\n            if (exp != m.Expression)\n            {\n                return Expression.MakeMemberAccess(exp, m.Member);\n            }\n            return m;\n        }\n\n        protected virtual Expression VisitMethodCall(MethodCallExpression m)\n        {\n            Expression obj = this.Visit(m.Object);\n            IEnumerable<Expression> args = this.VisitExpressionList(m.Arguments);\n            if (obj != m.Object || args != m.Arguments)\n            {\n                return Expression.Call(obj, m.Method, args);\n            }\n            return m;\n        }\n\n        protected virtual ReadOnlyCollection<Expression> VisitExpressionList(ReadOnlyCollection<Expression> original)\n        {\n            List<Expression> list = null;\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                Expression p = this.Visit(original[i]);\n                if (list != null)\n                {\n                    list.Add(p);\n                }\n                else if (p != original[i])\n                {\n                    list = new List<Expression>(n);\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n                    list.Add(p);\n                }\n            }\n            if (list != null)\n            {\n                return list.AsReadOnly();\n            }\n            return original;\n        }\n\n        protected virtual MemberAssignment VisitMemberAssignment(MemberAssignment assignment)\n        {\n            Expression e = this.Visit(assignment.Expression);\n            if (e != assignment.Expression)\n            {\n                return Expression.Bind(assignment.Member, e);\n            }\n            return assignment;\n        }\n\n        protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding binding)\n        {\n            IEnumerable<MemberBinding> bindings = this.VisitBindingList(binding.Bindings);\n            if (bindings != binding.Bindings)\n            {\n                return Expression.MemberBind(binding.Member, bindings);\n            }\n            return binding;\n        }\n\n        protected virtual MemberListBinding VisitMemberListBinding(MemberListBinding binding)\n        {\n            IEnumerable<ElementInit> initializers = this.VisitElementInitializerList(binding.Initializers);\n            if (initializers != binding.Initializers)\n            {\n                return Expression.ListBind(binding.Member, initializers);\n            }\n            return binding;\n        }\n\n        protected virtual IEnumerable<MemberBinding> VisitBindingList(ReadOnlyCollection<MemberBinding> original)\n        {\n            List<MemberBinding> list = null;\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                MemberBinding b = this.VisitBinding(original[i]);\n                if (list != null)\n                {\n                    list.Add(b);\n                }\n                else if (b != original[i])\n                {\n                    list = new List<MemberBinding>(n);\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n                    list.Add(b);\n                }\n            }\n            if (list != null)\n            {\n                return list;\n            }\n            return original;\n        }\n\n        protected virtual IEnumerable<ElementInit> VisitElementInitializerList(ReadOnlyCollection<ElementInit> original)\n        {\n            List<ElementInit> list = null;\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                ElementInit init = this.VisitElementInitializer(original[i]);\n                if (list != null)\n                {\n                    list.Add(init);\n                }\n                else if (init != original[i])\n                {\n                    list = new List<ElementInit>(n);\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n                    list.Add(init);\n                }\n            }\n            if (list != null)\n            {\n                return list;\n            }\n            return original;\n        }\n\n        protected virtual Expression VisitLambda(LambdaExpression lambda)\n        {\n            Expression body = this.Visit(lambda.Body);\n            // make sure we also visit the ParameterExpressions here.\n            ParameterExpression[] parameters = lambda.Parameters.Select(p => (ParameterExpression)this.Visit(p)).ToArray();\n            if (body != lambda.Body || !parameters.SequenceEqual(lambda.Parameters))\n            {\n                return Expression.Lambda(lambda.Type, body, parameters);\n            }\n            return lambda;\n        }\n\n        protected virtual NewExpression VisitNew(NewExpression nex)\n        {\n            IEnumerable<Expression> args = this.VisitExpressionList(nex.Arguments);\n            if (args != nex.Arguments)\n            {\n                if (nex.Members != null)\n                {\n                    return Expression.New(nex.Constructor, args, nex.Members);\n                }\n                else\n                {\n                    return Expression.New(nex.Constructor, args);\n                }\n            }\n            return nex;\n        }\n\n        protected virtual Expression VisitMemberInit(MemberInitExpression init)\n        {\n            NewExpression n = this.VisitNew(init.NewExpression);\n            IEnumerable<MemberBinding> bindings = this.VisitBindingList(init.Bindings);\n            if (n != init.NewExpression || bindings != init.Bindings)\n            {\n                return Expression.MemberInit(n, bindings);\n            }\n            return init;\n        }\n\n        protected virtual Expression VisitListInit(ListInitExpression init)\n        {\n            NewExpression n = this.VisitNew(init.NewExpression);\n            IEnumerable<ElementInit> initializers = this.VisitElementInitializerList(init.Initializers);\n            if (n != init.NewExpression || initializers != init.Initializers)\n            {\n                return Expression.ListInit(n, initializers);\n            }\n            return init;\n        }\n\n        protected virtual Expression VisitNewArray(NewArrayExpression na)\n        {\n            IEnumerable<Expression> exprs = this.VisitExpressionList(na.Expressions);\n            if (exprs != na.Expressions)\n            {\n                if (na.NodeType == ExpressionType.NewArrayInit)\n                {\n                    return Expression.NewArrayInit(na.Type.GetElementType(), exprs);\n                }\n                else\n                {\n                    return Expression.NewArrayBounds(na.Type.GetElementType(), exprs);\n                }\n            }\n            return na;\n        }\n\n        protected virtual Expression VisitInvocation(InvocationExpression iv)\n        {\n            IEnumerable<Expression> args = this.VisitExpressionList(iv.Arguments);\n            Expression expr = this.Visit(iv.Expression);\n            if (args != iv.Arguments || expr != iv.Expression)\n            {\n                return Expression.Invoke(expr, args);\n            }\n            return iv;\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/Extensions/MobileServiceClientExtensions.cs",
    "content": "using System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Android.Content;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Extension methods for UI-based login.\n    /// </summary>\n    public static class MobileServiceClientExtensions\n    {\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"context\" type=\"Android.Content.Context\">\n        /// The Context to display the Login UI in.\n        /// </param>\n        /// <param name=\"provider\" type=\"MobileServiceAuthenticationProvider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, Context context, MobileServiceAuthenticationProvider provider)\n        {\n            return LoginAsync(client, context, provider, parameters: null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"context\" type=\"Android.Content.Context\">\n        /// The Context to display the Login UI in.\n        /// </param>\n        /// <param name=\"provider\" type=\"MobileServiceAuthenticationProvider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, Context context, MobileServiceAuthenticationProvider provider, IDictionary<string, string> parameters)\n        {\n            return LoginAsync(client, context, provider.ToString(), parameters);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"context\" type=\"Android.Content.Context\">\n        /// The Context to display the Login UI in.\n        /// </param>\n        /// <param name=\"provider\" type=\"string\">\n        /// The name of the authentication provider to use.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, Context context, string provider)\n        {\n            return LoginAsync(client, context, provider, parameters: null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"context\" type=\"Android.Content.Context\">\n        /// The Context to display the Login UI in.\n        /// </param>\n        /// <param name=\"provider\" type=\"string\">\n        /// The name of the authentication provider to use.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, Context context, string provider, IDictionary<string, string> parameters)\n        {\n            var auth = new MobileServiceUIAuthentication(context, client, provider, parameters);\n            return auth.LoginAsync();\n        }\n\n        /// <summary>\n        /// Extension method to get a <see cref=\"Push\"/> object made from an existing <see cref=\"MobileServiceClient\"/>.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The <see cref=\"MobileServiceClient\"/> to create with.\n        /// </param>\n        /// <returns>\n        /// The <see cref=\"Push\"/> object used for registering for notifications.\n        /// </returns>\n        public static Push GetPush(this MobileServiceClient client)\n        {\n            return new Push(client);\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/Microsoft.WindowsAzure.Mobile.Ext.Android.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),Microsoft.WindowsAzure.Mobile.Build.msbuild))\\tools\\Microsoft.WindowsAzure.Mobile.Build.settings.targets\" Condition=\"$(CmdLine) != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.0</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{0F77566D-014F-4D09-B783-D4E701627D15}</ProjectGuid>\n    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices</RootNamespace>\n    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>\n    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>\n    <AndroidResgenFile>Resources\\Resource.designer.cs</AndroidResgenFile>\n    <AndroidResgenClass>Resource</AndroidResgenClass>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Ext</AssemblyName>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;PLATFORM_ANDROID;XAMARIN_AUTH_INTERNAL</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AndroidLinkMode>None</AndroidLinkMode>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>\n    <DocumentationFile>bin\\Release\\Microsoft.WindowsAzure.Mobile.Ext.xml</DocumentationFile>\n    <DefineConstants>PLATFORM_ANDROID;XAMARIN_AUTH_INTERNAL</DefineConstants>\n    <DebugSymbols>true</DebugSymbols>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monoandroid\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monoandroid\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"Mono.Android\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\..\\..\\managed\\src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\ExpressionUtility\\PartialEvaluator.cs\">\n      <Link>ExpressionUtility\\PartialEvaluator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\..\\managed\\src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\ExpressionUtility\\VisitorHelper.cs\">\n      <Link>ExpressionUtility\\VisitorHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\..\\managed\\src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Platform\\ExpressionUtility.cs\">\n      <Link>Platform\\ExpressionUtility.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.Android\\ActivityEx.cs\">\n      <Link>Auth\\Android\\ActivityEx.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.Android\\ActivityStateRepository.cs\">\n      <Link>Auth\\Android\\ActivityStateRepository.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.Android\\AndroidAccountStore.cs\">\n      <Link>Auth\\Android\\AndroidAccountStore.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.Android\\FormAuthenticatorActivity.cs\">\n      <Link>Auth\\Android\\FormAuthenticatorActivity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.Android\\WebAuthenticatorActivity.cs\">\n      <Link>Auth\\Android\\WebAuthenticatorActivity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\Account.cs\">\n      <Link>Auth\\Account.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\AccountStore.cs\">\n      <Link>Auth\\AccountStore.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\Authenticator.cs\">\n      <Link>Auth\\Authenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\AuthException.cs\">\n      <Link>Auth\\AuthException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\ExceptionEx.cs\">\n      <Link>Auth\\ExceptionEx.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\FormAuthenticator.cs\">\n      <Link>Auth\\FormAuthenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth1.cs\">\n      <Link>Auth\\OAuth1.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth1Authenticator.cs\">\n      <Link>Auth\\OAuth1Authenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth1Request.cs\">\n      <Link>Auth\\OAuth1Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth2Authenticator.cs\">\n      <Link>Auth\\OAuth2Authenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth2Request.cs\">\n      <Link>Auth\\OAuth2Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\Request.cs\">\n      <Link>Auth\\Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\Response.cs\">\n      <Link>Auth\\Response.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JavaScriptReader.cs\">\n      <Link>Auth\\Json\\JavaScriptReader.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonArray.cs\">\n      <Link>Auth\\Json\\JsonArray.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonObject.cs\">\n      <Link>Auth\\Json\\JsonObject.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonPrimitive.cs\">\n      <Link>Auth\\Json\\JsonPrimitive.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonType.cs\">\n      <Link>Auth\\Json\\JsonType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonValue.cs\">\n      <Link>Auth\\Json\\JsonValue.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\WebAuthenticator.cs\">\n      <Link>Auth\\WebAuthenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\WebEx.cs\">\n      <Link>Auth\\WebEx.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\WebRedirectAuthenticator.cs\">\n      <Link>Auth\\WebRedirectAuthenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\WebUtilities.cs\">\n      <Link>Auth\\WebUtilities.cs</Link>\n    </Compile>\n    <Compile Include=\"Platform\\PushUtility.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Authentication\\MobileServiceUIAuthentication.cs\" />\n    <Compile Include=\"ExpressionUtility\\ExpressionVisitor.cs\" />\n    <Compile Include=\"Extensions\\MobileServiceClientExtensions.cs\" />\n    <Compile Include=\"Platform\\ApplicationStorage.cs\" />\n    <Compile Include=\"Platform\\CurrentPlatform.cs\" />\n    <Compile Include=\"Platform\\PlatformInformation.cs\" />\n    <Compile Include=\"Push\\GcmRegistration.cs\" />\n    <Compile Include=\"Push\\GcmTemplateRegistration.cs\" />\n    <Compile Include=\"Push\\Push.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Novell\\Novell.MonoDroid.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n</Project>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/Platform/ApplicationStorage.cs",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Android.App;\nusing Android.Content;\nusing Android.Preferences;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class ApplicationStorage : IApplicationStorage\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ApplicationStorage\"/>.\n        /// </summary>\n        private static readonly IApplicationStorage instance = new ApplicationStorage();\n\n        private ApplicationStorage()\n            : this(string.Empty)\n        {\n        }\n\n        internal ApplicationStorage(string name)\n        {\n            this.StoragePrefix = name;\n        }\n\n        private string StoragePrefix { get; set; }\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ApplicationStorage\"/>.\n        /// </summary>\n        internal static IApplicationStorage Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        public bool TryReadSetting(string name, out object value)\n        {\n            if (String.IsNullOrWhiteSpace(name))\n            {\n                throw new ArgumentException(\"An application setting name must be provided. Null, empty or whitespace only names are not allowed.\", \"name\");\n            }\n\n            value = null;\n\n            using (ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(Application.Context))\n            {\n                string svalue = prefs.GetString(string.Concat(this.StoragePrefix, name), null);\n                if (svalue == null)\n                {\n                    return false;\n                }\n\n                try\n                {\n                    int sepIndex = svalue.IndexOf(\":\");\n                    string valueStr = svalue.Substring(sepIndex + 1);\n                    TypeCode type = (TypeCode)Enum.Parse(typeof(TypeCode), svalue.Substring(0, sepIndex));\n                    value = Convert.ChangeType(valueStr, type);\n                }\n                catch (Exception)\n                {\n                    return false;\n                }\n\n                return true;\n            }\n        }\n\n        public void WriteSetting(string name, object value)\n        {\n            if (String.IsNullOrWhiteSpace(name))\n            {\n                throw new ArgumentException(\"An application setting name must be provided. Null, empty or whitespace only names are not allowed.\", \"name\");\n            }\n\n            using (ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(Application.Context))\n            using (ISharedPreferencesEditor editor = prefs.Edit())\n            {\n                string svalue = null;\n                if (value != null) \n                {\n                    TypeCode type = Type.GetTypeCode(value.GetType());\n                    if (type == TypeCode.Object || type == TypeCode.DBNull)\n                    {\n                        throw new ArgumentException(\"Settings of type \" + type + \" are not supported\");\n                    }\n                    \n                    svalue = value.ToString();\n                    svalue = String.Format(\"{0}:{1}\", type, svalue);\n                }\n\n                editor.PutString(string.Concat(this.StoragePrefix, name), svalue);\n                editor.Commit();\n            }\n        }\n\n        public void Save()\n        {\n            // No-op--The setting is saved during the write\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/Platform/CurrentPlatform.cs",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides access to platform specific functionality for the current client platform.\n    /// </summary>\n    public class CurrentPlatform : IPlatform\n    {\n        /// <summary>\n        /// You must call this method from your application in order to ensure\n        /// that this platform specific assembly is included in your app.\n        /// </summary>\n        public static void Init()\n        {\n        }\n\n        IApplicationStorage IPlatform.ApplicationStorage\n        {\n            get { return ApplicationStorage.Instance; }\n        }\n\n        IPlatformInformation IPlatform.PlatformInformation\n        {\n            get { return PlatformInformation.Instance; }\n        }\n\n        IExpressionUtility IPlatform.ExpressionUtility\n        {\n            get { return ExpressionUtility.Instance; }\n        }\n\n        IPushUtility IPlatform.PushUtility { get { return Microsoft.WindowsAzure.MobileServices.PushUtility.Instance; } }\n\n        IApplicationStorage IPlatform.GetNamedApplicationStorage(string name)\n        {\n            return new ApplicationStorage(name);\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/Platform/PlatformInformation.cs",
    "content": "using System;\nusing System.Linq;\nusing System.Reflection;\nusing Android.OS;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    class PlatformInformation : IPlatformInformation\n    {\n        private static IPlatformInformation instance = new PlatformInformation();\n\n        public static IPlatformInformation Instance\n        {\n            get { return instance; }\n        }\n\n        public string OperatingSystemArchitecture\n        {\n            get { return System.Environment.OSVersion.Platform.ToString(); }\n        }\n\n        public string OperatingSystemName\n        {\n            get { return \"Android\"; }\n        }\n\n        public string OperatingSystemVersion\n        {\n            get { return Build.VERSION.Release; }\n        }\n\n        public bool IsEmulator\n        {\n            get { return Build.Brand.Equals (\"generic\", StringComparison.OrdinalIgnoreCase); }\n        }\n\n        public string Version\n        {\n            get\n            {\n                return this.GetVersionFromAssemblyFileVersion();\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/Platform/PushUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class PushUtility : IPushUtility\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"PushUtility\"/>.\n        /// </summary>\n        private static readonly IPushUtility instance = new PushUtility();\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"PushUtility\"/>.\n        /// </summary>\n        public static IPushUtility Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        public Registration GetNewNativeRegistration()\n        {\n            return new GcmRegistration();\n        }\n\n        public Registration GetNewNativeRegistration(string deviceId, IEnumerable<string> tags)\n        {\n            return new GcmRegistration(deviceId, tags);\n        }\n\n        public Registration GetNewTemplateRegistration()\n        {\n            return new GcmTemplateRegistration();\n        }\n\n        public Registration GetNewTemplateRegistration(string deviceId, string bodyTemplate, string templateName)\n        {\n            return new GcmTemplateRegistration(deviceId, bodyTemplate, templateName);\n        }\n\n        public string GetPlatform()\n        {\n            return \"gcm\";\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Microsoft.WindowsAzure.MobileServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.Ext\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Microsoft Corporation\")]\n[assembly: AssemblyProduct(\"Microsoft Azure Mobile Services SDK\")]\n[assembly: AssemblyCopyright(\"© Microsoft Corporation. All rights reserved.\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n[assembly: Preserve] \n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"9453e5ef-4541-4491-941f-d20f4e39c967\")]\n\n\n#if Sign\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Android.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n#else\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Android.Test\")]\n#endif"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/Push/GcmRegistration.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Registration is used to define a target that is registered for notifications\n    /// </summary>\n    [JsonObject(MemberSerialization.OptIn)]\n    public class GcmRegistration : Registration\n    {\n        internal GcmRegistration()\n        {\n        }\n\n        /// <summary>\n        /// Create a default Registration for a deviceId\n        /// </summary>\n        /// <param name=\"deviceId\">The device id</param>\n        public GcmRegistration(string deviceId)\n            : this(deviceId, null)\n        {\n        }\n\n        /// <summary>\n        /// Create a default Registration for a deviceId with specific tags\n        /// </summary>\n        /// <param name=\"deviceId\">The device id</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        public GcmRegistration(string deviceId, IEnumerable<string> tags)\n            : base(deviceId, tags)\n        {\n            if (string.IsNullOrWhiteSpace(deviceId))\n            {\n                throw new ArgumentNullException(\"deviceId\");\n            }\n        }\n\n        /// <summary>\n        /// The Uri of the Channel returned by the Push Notification Channel Manager.\n        /// </summary>\n        public string DeviceId\n        {\n            get\n            {\n                return this.PushHandle;\n            }\n\n            set\n            {\n                this.PushHandle = value;\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/Push/GcmTemplateRegistration.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Globalization;\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Registration is used to define a target that is registered for notifications. A <see cref=\"GcmTemplateRegistration\"/> allows the client application\n    /// to define the format of the registration.\n    /// </summary>\n    [JsonObject(MemberSerialization.OptIn)]\n    public sealed class GcmTemplateRegistration : GcmRegistration\n    {\n        internal GcmTemplateRegistration()\n        {\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"GcmTemplateRegistration\"/>\n        /// </summary>\n        /// <param name=\"deviceId\">The device id</param>\n        /// <param name=\"jsonTemplate\">The template json in string format</param>\n        /// <param name=\"templateName\">The template name</param>\n        public GcmTemplateRegistration(string deviceId, string jsonTemplate, string templateName)\n            : this(deviceId, jsonTemplate, templateName, null)\n        {\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"GcmTemplateRegistration\"/>\n        /// </summary>\n        /// <param name=\"deviceId\">The device id</param>\n        /// <param name=\"jsonTemplate\">The template json in string format</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags that restrict which notifications this registration will receive</param>\n        public GcmTemplateRegistration(string deviceId, string jsonTemplate, string templateName, IEnumerable<string> tags)\n            : base(deviceId, tags)\n        {\n            if (string.IsNullOrWhiteSpace(templateName))\n            {\n                throw new ArgumentNullException(\"templateName\");\n            }\n\n            if (templateName.Equals(Registration.NativeRegistrationName))\n            {\n                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, \"Template name conflicts with reserved name '{0}'.\", Registration.NativeRegistrationName));\n            }\n\n            if (templateName.Contains(\":\") || templateName.Contains(\";\"))\n            {\n                throw new ArgumentException(\"Template name cannot contain ';' or ':'.\");\n            }\n\n            if (string.IsNullOrWhiteSpace(jsonTemplate))\n            {\n                throw new ArgumentNullException(\"jsonTemplate\");\n            }\n\n            this.TemplateName = templateName;\n            this.BodyTemplate = jsonTemplate;\n        }\n\n        /// <summary>\n        /// Get templateName\n        /// </summary>\n        [JsonProperty(PropertyName = \"templateName\")]\n        public string TemplateName { get; internal set; }\n\n        /// <summary>\n        /// Gets jsonTemplate as string\n        /// </summary>\n        [JsonProperty(PropertyName = \"templateBody\")]\n        public string BodyTemplate { get; internal set; }\n\n        /// <summary>\n        /// The name of the registration used in local storage.\n        /// </summary>\n        public override string Name\n        {\n            get\n            {\n                return this.TemplateName;\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/Push/Push.cs",
    "content": "﻿//------------------------------------------------------------\n// Copyright (c) Microsoft Corporation.  All rights reserved.\n//------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Threading.Tasks;\n\n    /// <summary>\n    /// Define a class help to create/update/delete notification registrations\n    /// </summary>\n    public sealed class Push\n    {\n        internal readonly RegistrationManager RegistrationManager;\n\n        internal Push(MobileServiceClient client)\n        {\n            if (client == null)\n            {\n                throw new ArgumentNullException(\"client\");\n            }\n\n            this.Client = client;\n            \n            var storageManager = new LocalStorageManager(client.ApplicationUri.Host);\n            var pushHttpClient = new PushHttpClient(client);\n            this.RegistrationManager = new RegistrationManager(pushHttpClient, storageManager);\n        }\n\n        private MobileServiceClient Client { get; set; }\n\n        /// <summary>\n        /// Register a particular deviceId\n        /// </summary>\n        /// <param name=\"deviceId\">The deviceId to register</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterNativeAsync(string deviceId)\n        {\n            return this.RegisterNativeAsync(deviceId, null);\n        }\n\n        /// <summary>\n        /// Register a particular deviceId\n        /// </summary>\n        /// <param name=\"deviceId\">The deviceId to register</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterNativeAsync(string deviceId, IEnumerable<string> tags)\n        {\n            if (string.IsNullOrWhiteSpace(deviceId))\n            {\n                throw new ArgumentNullException(\"deviceId\");\n            }\n\n            var registration = new GcmRegistration(deviceId, tags);\n            return this.RegistrationManager.RegisterAsync(registration);\n        } \n\n        /// <summary>\n        /// Register a particular deviceId with a template\n        /// </summary>\n        /// <param name=\"deviceId\">The deviceId to register</param>\n        /// <param name=\"jsonTemplate\">The string defining the template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterTemplateAsync(string deviceId, string jsonTemplate, string templateName)\n        {\n            return this.RegisterTemplateAsync(deviceId, jsonTemplate, templateName, null);\n        }\n\n        /// <summary>\n        /// Register a particular deviceId with a template\n        /// </summary>\n        /// <param name=\"deviceId\">The deviceId to register</param>\n        /// <param name=\"jsonTemplate\">The string defining the json template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterTemplateAsync(string deviceId, string jsonTemplate, string templateName, IEnumerable<string> tags)\n        {\n            if (string.IsNullOrWhiteSpace(deviceId))\n            {\n                throw new ArgumentNullException(\"deviceId\");\n            }\n\n            if (string.IsNullOrWhiteSpace(jsonTemplate))\n            {\n                throw new ArgumentNullException(\"jsonTemplate\");\n            }\n\n            if (string.IsNullOrWhiteSpace(templateName))\n            {\n                throw new ArgumentNullException(\"templateName\");\n            }\n\n            var registration = new GcmTemplateRegistration(deviceId, jsonTemplate, templateName, tags);\n            return this.RegistrationManager.RegisterAsync(registration);\n        }\n\n        /// <summary>\n        /// Unregister any registrations previously registered from this device\n        /// </summary>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterNativeAsync()\n        {\n            return this.UnregisterTemplateAsync(Registration.NativeRegistrationName);\n        }\n\n        /// <summary>\n        /// Unregister any registrations with given templateName registered from this device\n        /// </summary>\n        /// <param name=\"templateName\">The template name</param>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterTemplateAsync(string templateName)\n        {\n            return this.RegistrationManager.UnregisterAsync(templateName);\n        }\n\n        /// <summary>\n        /// Unregister any registrations with given deviceId\n        /// </summary>\n        /// <param name=\"deviceId\">The device id</param>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterAllAsync(string deviceId)\n        {\n            if (string.IsNullOrWhiteSpace(deviceId))\n            {\n                throw new ArgumentNullException(\"deviceId\");\n            }\n\n            return this.RegistrationManager.DeleteRegistrationsForChannelAsync(deviceId);\n        }\n\n        /// <summary>\n        /// Register for notifications\n        /// </summary>\n        /// <param name=\"registration\">The object defining the registration</param>\n        /// <returns>Task that will complete when the registration is completed</returns>\n        public Task RegisterAsync(Registration registration)\n        {\n            if (registration == null)\n            {\n                throw new ArgumentNullException(\"registration\");\n            }\n\n            if (string.IsNullOrWhiteSpace(registration.PushHandle))\n            {\n                throw new ArgumentNullException(\"registration.deviceId\");\n            }\n\n            return this.RegistrationManager.RegisterAsync(registration);\n        }\n\n        /// <summary>\n        /// DEBUG-ONLY: List the registrations made with the service for a deviceId\n        /// </summary>\n        /// <param name=\"deviceId\">The deviceId to check for</param>\n        /// <returns>List of registrations</returns>\n        public Task<List<Registration>> ListRegistrationsAsync(string deviceId)\n        {\n            return this.RegistrationManager.ListRegistrationsAsync(deviceId);\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/Resources/Resource.designer.cs",
    "content": ""
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Android/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"MonoAndroid22\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Net45/Microsoft.WindowsAzure.Mobile.Ext.Net45.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),Microsoft.WindowsAzure.Mobile.Build.msbuild))\\tools\\Microsoft.WindowsAzure.Mobile.Build.settings.targets\" Condition=\"$(CmdLine) != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <OutputPath Condition=\" '$(OutputPath)' == '' \">bin\\$(Configuration)</OutputPath>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{8BE160B5-ADBF-4FE0-A0E2-A4A77A87E620}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Ext</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>$(OutputPath)\\Microsoft.WindowsAzure.Mobile.Ext.XML</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\ExpressionUtility\\PartialEvaluator.cs\">\n      <Link>ExpressionUtility\\PartialEvaluator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\ExpressionUtility\\VisitorHelper.cs\">\n      <Link>ExpressionUtility\\VisitorHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Platform\\ExpressionUtility.cs\">\n      <Link>Platform\\ExpressionUtility.cs</Link>\n    </Compile>\n    <Compile Include=\"Platform\\ApplicationStorage.cs\" />\n    <Compile Include=\"Platform\\CurrentPlatform.cs\" />\n    <Compile Include=\"Platform\\PlatformInformation.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Net45/Platform/ApplicationStorage.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.IO;\nusing System.IO.IsolatedStorage;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An implementation of the <see cref=\"IApplicationStorage\"/> interface\n    /// for the .NET Platform that uses .NET\n    /// <see cref=\"System.Configuration.ApplicationSettingsBase\"/> APIs.\n    /// </summary>\n    internal class ApplicationStorage : IApplicationStorage\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ApplicationStorage\"/>.\n        /// </summary>\n        private static readonly IApplicationStorage instance = new ApplicationStorage();        \n\n        private ApplicationStorage() : this(string.Empty)\n        {            \n        }\n        \n        internal ApplicationStorage(string name)\n        {\n            this.StoragePrefix = name;\n        }\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ApplicationStorage\"/>.\n        /// </summary>\n        internal static IApplicationStorage Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        private string StoragePrefix { get; set; }\n\n        /// <summary>\n        /// Tries to read a setting's value from application storage. \n        /// </summary>\n        /// <param name=\"name\">The name of the setting to try to read.\n        /// </param>\n        /// <param name=\"value\">Upon returning, if the return value was <c>true</c>, \n        /// will be the value of the given setting; will be <c>null</c> otherwise.\n        /// </param>\n        /// <returns>\n        /// <c>true</c> if the setting existed and was successfully read; <c>false</c> otherwise.\n        /// </returns>\n        /// <exception cref=\"ArgumentException\">\n        /// Thrown if the setting name is <c>null</c> or whitespace.\n        /// </exception>\n        bool IApplicationStorage.TryReadSetting(string name, out object value)\n        {\n            if (string.IsNullOrWhiteSpace(name))\n            {\n                string message = \"An application setting name must be provided. Null, empty or whitespace only names are not allowed.\";\n                throw new ArgumentException(message);\n            }\n\n            try\n            {\n                using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.Assembly | IsolatedStorageScope.User, null, null))\n                {\n                    using (IsolatedStorageFileStream fileStream = isoStore.OpenFile(string.Concat(this.StoragePrefix, name), FileMode.OpenOrCreate, FileAccess.Read))\n                    {\n                        using (var reader = new StreamReader(fileStream))\n                        {\n                            value = reader.ReadToEnd();\n                            return value != null;\n                        }\n                    }\n                }\n            }\n            catch\n            {\n                value = Guid.Empty;\n                return true;\n            }\n        }\n\n        /// <summary>\n        /// Writes the setting's value to application storage.\n        /// </summary>\n        /// <param name=\"name\">The name of the setting to write.\n        /// </param>\n        /// <param name=\"value\">The value to write.\n        /// </param>\n        /// <exception cref=\"ArgumentException\">\n        /// Thrown if the setting name is <c>null</c> or empty.\n        /// </exception>\n        /// <exception cref=\"InvalidOperationException\">\n        /// Thrown if an error occurs while writing the setting.\n        /// </exception>\n        void IApplicationStorage.WriteSetting(string name, object value)\n        {\n            if (string.IsNullOrWhiteSpace(name))\n            {\n                string message = \"An application setting name must be provided. Null, empty or whitespace only names are not allowed.\";\n                throw new ArgumentException(message);\n            }\n\n            try\n            {\n                using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.Assembly | IsolatedStorageScope.User, null, null))\n                {\n                    using (IsolatedStorageFileStream fileStream = isoStore.OpenFile(string.Concat(this.StoragePrefix, name), FileMode.OpenOrCreate, FileAccess.Write))\n                    {\n                        using (var writer = new StreamWriter(fileStream))\n                        writer.WriteLine(value.ToString());\n                    }\n                }\n            }\n            catch (Exception)\n            {\n            }\n        }\n\n        public void Save()\n        {\n            // This operation is a no-op in NetFramework\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Net45/Platform/CurrentPlatform.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class CurrentPlatform : IPlatform\n    {\n        /// <summary>\n        /// Returns a platform-specific implemention of application storage.\n        /// </summary>\n        public IApplicationStorage ApplicationStorage { get { return Microsoft.WindowsAzure.MobileServices.ApplicationStorage.Instance; } }\n\n        /// <summary>\n        /// Returns a platform-specific implemention of platform information.\n        /// </summary>\n        public IPlatformInformation PlatformInformation { get { return Microsoft.WindowsAzure.MobileServices.PlatformInformation.Instance; } }\n\n        /// <summary>\n        /// Returns a platform-specific implementation of a utility class\n        /// that provides functionality for manipulating \n        /// <see cref=\"System.Linq.Expressions.Expression\"/> instances.\n        /// </summary>\n        public IExpressionUtility ExpressionUtility { get { return Microsoft.WindowsAzure.MobileServices.ExpressionUtility.Instance; } }\n\n        /// <summary>\n        /// Returns a platform-specific implementation of a utility class\n        /// that provides functionality for platform-specifc push capabilities.\n        /// </summary>\n        public IPushUtility PushUtility { get { return null; } }\n\n        public IApplicationStorage GetNamedApplicationStorage(string name)\n        {\n            return new ApplicationStorage(name);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Net45/Platform/PlatformInformation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Globalization;\nusing System.Reflection;\nusing System.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Implements the <see cref=\"IPlatform\"/> interface for the Windows\n    /// Phone platform.\n    /// </summary>\n    internal class PlatformInformation : IPlatformInformation\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ApplicationStorage\"/>.\n        /// </summary>\n        private static IPlatformInformation instance = new PlatformInformation();\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ApplicationStorage\"/>.\n        /// </summary>\n        public static IPlatformInformation Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        /// <summary>\n        /// The architecture of the platform.\n        /// </summary>\n        public string OperatingSystemArchitecture\n        {\n            get\n            {\n                return Environment.OSVersion.Platform.ToString();\n            }\n        }\n\n        /// <summary>\n        /// The name of the operating system of the platform.\n        /// </summary>\n        public string OperatingSystemName\n        {\n            get\n            {\n                return \"Windows\";\n            }\n        }\n\n        /// <summary>\n        /// The version of the operating system of the platform.\n        /// </summary>\n        public string OperatingSystemVersion\n        {\n            get\n            {\n                Version version = Environment.OSVersion.Version;\n\n                return string.Format(CultureInfo.InvariantCulture,\n                    \"{0}.{1}.{2}.{3}\",\n                    version.Major,\n                    version.Minor,\n                    version.Revision,\n                    version.Build);\n            }\n        }\n\n        /// <summary>\n        /// Indicated whether the device is an emulator or not\n        /// </summary>\n        public bool IsEmulator\n        {\n            get\n            {\n                return false;\n            }\n        }\n\n        public string Version\n        {\n            get\n            {\n                return this.GetVersionFromAssemblyFileVersion();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Net45/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.Ext\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Microsoft Corporation\")]\n[assembly: AssemblyProduct(\"Microsoft Azure Mobile Services SDK\")]\n[assembly: AssemblyCopyright(\"© Microsoft Corporation. All rights reserved.\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"c2d3081f-fd21-4d39-b942-118c7aa534b8\")]\n\n\n#if Sign\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n#else\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile\")]\n#endif\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Net45/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.Net45/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/ColumnDefinition.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore\n{\n    /// <summary>\n    /// A class that represents the type of column on local store\n    /// </summary>\n    public class ColumnDefinition\n    {\n        public string Name { get; private set; }\n\n        public JTokenType JsonType { get; private set; }\n\n        public string StoreType { get; private set; }\n\n\n        public ColumnDefinition(string name, JTokenType jsonType, string storeType)\n        {\n            this.Name = name;\n            this.JsonType = jsonType;\n            this.StoreType = storeType;\n        }\n\n        public override int GetHashCode()\n        {\n            return Tuple.Create(this.Name, this.JsonType, this.StoreType).GetHashCode();\n        }\n\n        public override bool Equals(object obj)\n        {\n            var other = obj as ColumnDefinition;\n            if (other == null)\n            {\n                return base.Equals(obj);\n            }\n\n            return this.Name.Equals(other.Name) &&\n                   this.JsonType.Equals(other.JsonType) &&\n                   this.StoreType.Equals(other.StoreType);\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{0}, {1}, {1}\", this.Name, this.JsonType, this.StoreType);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/Extensions/EnumerableExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n\nnamespace System.Collections.Generic\n{\n    internal static class EnumerableExtensions\n    {\n        /// <summary>\n        /// Splits the given sequence into sequences of the given length.\n        /// </summary>\n        public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, int maxLength)\n        {\n            if (source == null)\n            {\n                throw new ArgumentNullException(\"source\");\n            }\n\n            if (maxLength <= 0)\n            {\n                throw new ArgumentOutOfRangeException(\"maxLength\");\n            }\n\n            var enumerator = source.GetEnumerator();\n            var batch = new List<T>(maxLength);\n\n            while (enumerator.MoveNext())\n            {\n                batch.Add(enumerator.Current);\n\n                //Have we finished this batch? Yield it and start a new one.\n                if (batch.Count == maxLength)\n                {\n                    yield return batch;\n                    batch = new List<T>(maxLength);\n                }\n            }\n\n            //Yield the final batch if it has any elements\n            if (batch.Count > 0)\n            {\n                yield return batch;\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/Microsoft.WindowsAzure.Mobile.SQLiteStore.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),Microsoft.WindowsAzure.Mobile.Build.msbuild))\\tools\\Microsoft.WindowsAzure.Mobile.Build.settings.targets\" Condition=\"$(CmdLine) != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{4C20D49A-FE5E-4D9C-98B9-8125450074F5}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.SQLiteStore</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.SQLiteStore</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <TargetFrameworkProfile>Profile259</TargetFrameworkProfile>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .NET Framework is automatically included -->\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Extensions\\EnumerableExtensions.cs\" />\n    <Compile Include=\"MobileServiceSQLiteStore.cs\" />\n    <Compile Include=\"MobileServiceSQLiteStoreExtensions.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"SqlColumnType.cs\" />\n    <Compile Include=\"SqlQueryFormatter.cs\" />\n    <Compile Include=\"SqlHelpers.cs\" />\n    <Compile Include=\"ColumnDefinition.cs\" />\n    <Compile Include=\"TableDefinition.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SQLitePCL\">\n      <HintPath>..\\..\\packages\\SQLitePCL.3.8.7.2\\lib\\portable-net45+sl50+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10\\SQLitePCL.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\Portable\\$(TargetFrameworkVersion)\\Microsoft.Portable.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/MobileServiceSQLiteStore.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Newtonsoft.Json.Linq;\nusing SQLitePCL;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore\n{\n    /// <summary>\n    /// SQLite based implementation of <see cref=\"IMobileServiceLocalStore\"/>\n    /// </summary>\n    public class MobileServiceSQLiteStore : MobileServiceLocalStore\n    {\n        /// <summary>\n        /// The maximum number of parameters allowed in any \"upsert\" prepared statement.\n        /// Note: The default maximum number of parameters allowed by sqlite is 999\n        /// See: http://www.sqlite.org/limits.html#max_variable_number\n        /// </summary>\n        private const int MaxParametersPerQuery = 800;\n\n        private Dictionary<string, TableDefinition> tableMap = new Dictionary<string, TableDefinition>(StringComparer.OrdinalIgnoreCase);\n        private SQLiteConnection connection;\n\n        protected MobileServiceSQLiteStore() { }\n\n        /// <summary>\n        /// Initializes a new instance of <see cref=\"MobileServiceSQLiteStore\"/>\n        /// </summary>\n        /// <param name=\"fileName\">Name of the local SQLite database file.</param>\n        public MobileServiceSQLiteStore(string fileName)\n        {\n            if (fileName == null)\n            {\n                throw new ArgumentNullException(\"fileName\");\n            }\n\n            this.connection = new SQLiteConnection(fileName);\n        }\n\n        /// <summary>\n        /// Defines the local table on the store.\n        /// </summary>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"item\">An object that represents the structure of the table.</param>\n        public override void DefineTable(string tableName, JObject item)\n        {\n            if (tableName == null)\n            {\n                throw new ArgumentNullException(\"tableName\");\n            }\n            if (item == null)\n            {\n                throw new ArgumentNullException(\"item\");\n            }\n\n            if (this.Initialized)\n            {\n                throw new InvalidOperationException(\"Cannot define a table after the store has been initialized.\");\n            }\n\n            // add id if it is not defined\n            JToken ignored;\n            if (!item.TryGetValue(MobileServiceSystemColumns.Id, StringComparison.OrdinalIgnoreCase, out ignored))\n            {\n                item[MobileServiceSystemColumns.Id] = String.Empty;\n            }\n\n            var tableDefinition = (from property in item.Properties()\n                                   let storeType = SqlHelpers.GetStoreType(property.Value.Type, allowNull: false)\n                                   select new ColumnDefinition(property.Name, property.Value.Type, storeType))\n                                  .ToDictionary(p => p.Name, StringComparer.OrdinalIgnoreCase);\n\n            var sysProperties = GetSystemProperties(item);\n\n            this.tableMap.Add(tableName, new TableDefinition(tableDefinition, sysProperties));\n        }\n\n        protected override async Task OnInitialize()\n        {\n            this.CreateAllTables();\n            await this.InitializeConfig();\n        }\n\n        /// <summary>\n        /// Reads data from local store by executing the query.\n        /// </summary>\n        /// <param name=\"query\">The query to execute on local store.</param>\n        /// <returns>A task that will return with results when the query finishes.</returns>\n        public override Task<JToken> ReadAsync(MobileServiceTableQueryDescription query)\n        {\n            if (query == null)\n            {\n                throw new ArgumentNullException(\"query\");\n            }\n\n            this.EnsureInitialized();\n\n            var formatter = new SqlQueryFormatter(query);\n            string sql = formatter.FormatSelect();\n\n            IList<JObject> rows = this.ExecuteQuery(query.TableName, sql, formatter.Parameters);\n            JToken result = new JArray(rows.ToArray());\n\n            if (query.IncludeTotalCount)\n            {\n                sql = formatter.FormatSelectCount();\n                IList<JObject> countRows = this.ExecuteQuery(query.TableName, sql, formatter.Parameters);\n                long count = countRows[0].Value<long>(\"count\");\n                result = new JObject() \n                { \n                    { \"results\", result },\n                    { \"count\", count}\n                };\n            }\n\n            return Task.FromResult(result);\n        }\n\n        /// <summary>\n        /// Updates or inserts data in local table.\n        /// </summary>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"items\">A list of items to be inserted.</param>\n        /// <param name=\"ignoreMissingColumns\"><code>true</code> if the extra properties on item can be ignored; <code>false</code> otherwise.</param>\n        /// <returns>A task that completes when item has been upserted in local table.</returns>\n        public override Task UpsertAsync(string tableName, IEnumerable<JObject> items, bool ignoreMissingColumns)\n        {\n            if (tableName == null)\n            {\n                throw new ArgumentNullException(\"tableName\");\n            }\n            if (items == null)\n            {\n                throw new ArgumentNullException(\"items\");\n            }\n\n            this.EnsureInitialized();\n\n            return UpsertAsyncInternal(tableName, items, ignoreMissingColumns);\n        }\n\n        private Task UpsertAsyncInternal(string tableName, IEnumerable<JObject> items, bool ignoreMissingColumns)\n        {\n            TableDefinition table = GetTable(tableName);\n\n            var first = items.FirstOrDefault();\n            if (first == null)\n            {\n                return Task.FromResult(0);\n            }\n\n            // Get the columns which we want to map into the database.\n            var columns = new List<ColumnDefinition>();\n            foreach (var prop in first.Properties())\n            {\n                ColumnDefinition column;\n\n                // If the column is coming from the server we can just ignore it,\n                // otherwise, throw to alert the caller that they have passed an invalid column\n                if (!table.TryGetValue(prop.Name, out column) && !ignoreMissingColumns)\n                {\n                    throw new InvalidOperationException(string.Format(\"Column with name '{0}' is not defined on the local table '{1}'.\", prop.Name, tableName));\n                }\n\n                if (column != null)\n                {\n                    columns.Add(column);\n                }\n            }\n\n            if (columns.Count == 0)\n            {\n                // no query to execute if there are no columns in the table\n                return Task.FromResult(0);\n            }\n\n\n            this.ExecuteNonQuery(\"BEGIN TRANSACTION\", null);\n\n            BatchInsert(tableName, items, columns.Where(c => c.Name.Equals(MobileServiceSystemColumns.Id)).Take(1).ToList());\n            BatchUpdate(tableName, items, columns);\n\n            this.ExecuteNonQuery(\"COMMIT TRANSACTION\", null);\n\n            return Task.FromResult(0);\n        }\n\n        /// <summary>\n        /// Deletes items from local table that match the given query.\n        /// </summary>\n        /// <param name=\"query\">A query to find records to delete.</param>\n        /// <returns>A task that completes when delete query has executed.</returns>\n        public override Task DeleteAsync(MobileServiceTableQueryDescription query)\n        {\n            if (query == null)\n            {\n                throw new ArgumentNullException(\"query\");\n            }\n\n            this.EnsureInitialized();\n\n            var formatter = new SqlQueryFormatter(query);\n            string sql = formatter.FormatDelete();\n\n            this.ExecuteNonQuery(sql, formatter.Parameters);\n\n            return Task.FromResult(0);\n        }\n\n        /// <summary>\n        /// Deletes items from local table with the given list of ids\n        /// </summary>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"ids\">A list of ids of the items to be deleted</param>\n        /// <returns>A task that completes when delete query has executed.</returns>\n        public override Task DeleteAsync(string tableName, IEnumerable<string> ids)\n        {\n            if (tableName == null)\n            {\n                throw new ArgumentNullException(\"tableName\");\n            }\n            if (ids == null)\n            {\n                throw new ArgumentNullException(\"ids\");\n            }\n\n            this.EnsureInitialized();\n\n            string idRange = String.Join(\",\", ids.Select((_, i) => \"@id\" + i));\n\n            string sql = string.Format(\"DELETE FROM {0} WHERE {1} IN ({2})\",\n                                       SqlHelpers.FormatTableName(tableName),\n                                       MobileServiceSystemColumns.Id,\n                                       idRange);\n\n            var parameters = new Dictionary<string, object>();\n\n            int j = 0;\n            foreach (string id in ids)\n            {\n                parameters.Add(\"@id\" + (j++), id);\n            }\n\n            this.ExecuteNonQuery(sql, parameters);\n            return Task.FromResult(0);\n        }\n\n        /// <summary>\n        /// Executes a lookup against a local table.\n        /// </summary>\n        /// <param name=\"tableName\">Name of the local table.</param>\n        /// <param name=\"id\">The id of the item to lookup.</param>\n        /// <returns>A task that will return with a result when the lookup finishes.</returns>\n        public override Task<JObject> LookupAsync(string tableName, string id)\n        {\n            if (tableName == null)\n            {\n                throw new ArgumentNullException(\"tableName\");\n            }\n            if (id == null)\n            {\n                throw new ArgumentNullException(\"id\");\n            }\n\n            this.EnsureInitialized();\n\n            string sql = string.Format(\"SELECT * FROM {0} WHERE {1} = @id\", SqlHelpers.FormatTableName(tableName), MobileServiceSystemColumns.Id);\n            var parameters = new Dictionary<string, object>\n            {\n                {\"@id\", id}\n            };\n\n            IList<JObject> results = this.ExecuteQuery(tableName, sql, parameters);\n\n            return Task.FromResult(results.FirstOrDefault());\n        }\n\n        private TableDefinition GetTable(string tableName)\n        {\n            TableDefinition table;\n            if (!this.tableMap.TryGetValue(tableName, out table))\n            {\n                throw new InvalidOperationException(string.Format(\"Table with name '{0}' is not defined.\", tableName));\n            }\n            return table;\n        }\n\n        internal virtual async Task SaveSetting(string name, string value)\n        {\n            var setting = new JObject() \n            { \n                { \"id\", name }, \n                { \"value\", value } \n            };\n            await this.UpsertAsyncInternal(MobileServiceLocalSystemTables.Config, new[] { setting }, ignoreMissingColumns: false);\n        }\n\n        private async Task InitializeConfig()\n        {\n            foreach (KeyValuePair<string, TableDefinition> table in this.tableMap)\n            {\n                if (!MobileServiceLocalSystemTables.All.Contains(table.Key))\n                {\n                    // preserve system properties setting for non-system tables\n                    string name = String.Format(\"systemProperties|{0}\", table.Key);\n                    string value = ((int)table.Value.SystemProperties).ToString();\n                    await this.SaveSetting(name, value);\n                }\n            }\n        }\n\n        private void CreateAllTables()\n        {\n            foreach (KeyValuePair<string, TableDefinition> table in this.tableMap)\n            {\n                this.CreateTableFromObject(table.Key, table.Value.Values);\n            }\n        }\n\n        private void BatchUpdate(string tableName, IEnumerable<JObject> items, List<ColumnDefinition> columns)\n        {\n            if (columns.Count <= 1)\n            {\n                return; // For update to work there has to be at least once column besides Id that needs to be updated\n            }\n\n            ValidateParameterCount(columns.Count);\n\n            string sqlBase = String.Format(\"UPDATE {0} SET \", SqlHelpers.FormatTableName(tableName));\n\n            foreach (JObject item in items)\n            {\n                var sql = new StringBuilder(sqlBase);\n                var parameters = new Dictionary<string, object>();\n\n                ColumnDefinition idColumn = columns.FirstOrDefault(c => c.Name.Equals(MobileServiceSystemColumns.Id));\n                if (idColumn == null)\n                {\n                    continue;\n                }\n\n                foreach (var column in columns.Where(c => c != idColumn))\n                {\n                    string paramName = AddParameter(item, parameters, column);\n\n                    sql.AppendFormat(\"{0} = {1}\", SqlHelpers.FormatMember(column.Name), paramName);\n                    sql.Append(\",\");\n                }\n\n                if (parameters.Any())\n                {\n                    sql.Remove(sql.Length - 1, 1); // remove the trailing comma\n\n                }\n\n                sql.AppendFormat(\" WHERE {0} = {1}\", SqlHelpers.FormatMember(MobileServiceSystemColumns.Id), AddParameter(item, parameters, idColumn));\n\n                this.ExecuteNonQuery(sql.ToString(), parameters);\n            }\n        }\n\n        private void BatchInsert(string tableName, IEnumerable<JObject> items, List<ColumnDefinition> columns)\n        {\n            if (columns.Count == 0) // we need to have some columns to insert the item\n            {\n                return;\n            }\n\n            // Generate the prepared insert statement\n            string sqlBase = String.Format(\n                \"INSERT OR IGNORE INTO {0} ({1}) VALUES \",\n                SqlHelpers.FormatTableName(tableName),\n                String.Join(\", \", columns.Select(c => c.Name).Select(SqlHelpers.FormatMember))\n            );\n\n            // Use int division to calculate how many times this record will fit into our parameter quota\n            int batchSize = ValidateParameterCount(columns.Count);\n\n            foreach (var batch in items.Split(maxLength: batchSize))\n            {\n                var sql = new StringBuilder(sqlBase);\n                var parameters = new Dictionary<string, object>();\n\n                foreach (JObject item in batch)\n                {\n                    AppendInsertValuesSql(sql, parameters, columns, item);\n                    sql.Append(\",\");\n                }\n\n                if (parameters.Any())\n                {\n                    sql.Remove(sql.Length - 1, 1); // remove the trailing comma\n                    this.ExecuteNonQuery(sql.ToString(), parameters);\n                }\n            }\n        }\n\n        private static int ValidateParameterCount(int parametersCount)\n        {\n            int batchSize = MaxParametersPerQuery / parametersCount;\n            if (batchSize == 0)\n            {\n                throw new InvalidOperationException(string.Format(\"The number of fields per entity in an upsert operation is limited to {0}.\", MaxParametersPerQuery));\n            }\n            return batchSize;\n        }\n\n        private static void AppendInsertValuesSql(StringBuilder sql, Dictionary<string, object> parameters, List<ColumnDefinition> columns, JObject item)\n        {\n            sql.Append(\"(\");\n            int colCount = 0;\n            foreach (var column in columns)\n            {\n                if (colCount > 0)\n                    sql.Append(\",\");\n\n                sql.Append(AddParameter(item, parameters, column));\n\n                colCount++;\n            }\n            sql.Append(\")\");\n        }\n\n        internal virtual void CreateTableFromObject(string tableName, IEnumerable<ColumnDefinition> columns)\n        {\n            ColumnDefinition idColumn = columns.FirstOrDefault(c => c.Name.Equals(MobileServiceSystemColumns.Id));\n            var colDefinitions = columns.Where(c => c != idColumn).Select(c => String.Format(\"{0} {1}\", SqlHelpers.FormatMember(c.Name), c.StoreType)).ToList();\n            if (idColumn != null)\n            {\n                colDefinitions.Insert(0, String.Format(\"{0} {1} PRIMARY KEY\", SqlHelpers.FormatMember(idColumn.Name), idColumn.StoreType));\n            }\n\n            String tblSql = string.Format(\"CREATE TABLE IF NOT EXISTS {0} ({1})\", SqlHelpers.FormatTableName(tableName), String.Join(\", \", colDefinitions));\n            this.ExecuteNonQuery(tblSql, parameters: null);\n\n            string infoSql = string.Format(\"PRAGMA table_info({0});\", SqlHelpers.FormatTableName(tableName));\n            IDictionary<string, JObject> existingColumns = this.ExecuteQuery((TableDefinition)null, infoSql, parameters: null)\n                                                               .ToDictionary(c => c.Value<string>(\"name\"), StringComparer.OrdinalIgnoreCase);\n\n            // new columns that do not exist in existing columns\n            var columnsToCreate = columns.Where(c => !existingColumns.ContainsKey(c.Name));\n\n            foreach (ColumnDefinition column in columnsToCreate)\n            {\n                string createSql = string.Format(\"ALTER TABLE {0} ADD COLUMN {1} {2}\",\n                                                 SqlHelpers.FormatTableName(tableName),\n                                                 SqlHelpers.FormatMember(column.Name),\n                                                 column.StoreType);\n                this.ExecuteNonQuery(createSql, parameters: null);\n            }\n\n            // NOTE: In SQLite you cannot drop columns, only add them.\n        }\n\n        private static string AddParameter(JObject item, Dictionary<string, object> parameters, ColumnDefinition column)\n        {\n            JToken rawValue = item.GetValue(column.Name, StringComparison.OrdinalIgnoreCase);\n            object value = SqlHelpers.SerializeValue(rawValue, column.StoreType, column.JsonType);\n            string paramName = CreateParameter(parameters, value);\n            return paramName;\n        }\n\n        private static string CreateParameter(Dictionary<string, object> parameters, object value)\n        {\n            string paramName = \"@p\" + parameters.Count;\n            parameters[paramName] = value;\n            return paramName;\n        }\n\n        /// <summary>\n        /// Executes a sql statement on a given table in local SQLite database.\n        /// </summary>\n        /// <param name=\"tableName\">The name of the table.</param>\n        /// <param name=\"parameters\">The query parameters.</param>\n        protected virtual void ExecuteNonQuery(string sql, IDictionary<string, object> parameters)\n        {\n            parameters = parameters ?? new Dictionary<string, object>();\n\n\n            using (ISQLiteStatement statement = this.connection.Prepare(sql))\n            {\n                foreach (KeyValuePair<string, object> parameter in parameters)\n                {\n                    statement.Bind(parameter.Key, parameter.Value);\n                }\n\n                SQLiteResult result = statement.Step();\n                ValidateResult(result);\n            }\n        }\n\n        /// <summary>\n        /// Executes a sql statement on a given table in local SQLite database.\n        /// </summary>\n        /// <param name=\"tableName\">The name of the table.</param>\n        /// <param name=\"sql\">The SQL query to execute.</param>\n        /// <param name=\"parameters\">The query parameters.</param>\n        /// <returns>The result of query.</returns>\n        protected virtual IList<JObject> ExecuteQuery(string tableName, string sql, IDictionary<string, object> parameters)\n        {\n            TableDefinition table = GetTable(tableName);\n            return this.ExecuteQuery(table, sql, parameters);\n        }\n\n        protected virtual IList<JObject> ExecuteQuery(TableDefinition table, string sql, IDictionary<string, object> parameters)\n        {\n            table = table ?? new TableDefinition();\n            parameters = parameters ?? new Dictionary<string, object>();\n\n            var rows = new List<JObject>();\n            using (ISQLiteStatement statement = this.connection.Prepare(sql))\n            {\n                foreach (KeyValuePair<string, object> parameter in parameters)\n                {\n                    statement.Bind(parameter.Key, parameter.Value);\n                }\n\n                SQLiteResult result;\n                while ((result = statement.Step()) == SQLiteResult.ROW)\n                {\n                    var row = ReadRow(table, statement);\n                    rows.Add(row);\n                }\n\n                ValidateResult(result);\n            }\n\n            return rows;\n        }\n\n        private static void ValidateResult(SQLiteResult result)\n        {\n            if (result != SQLiteResult.DONE)\n            {\n                throw new SQLiteException(string.Format(\"Query execution failed with result: '{0}'.\", result));\n            }\n        }\n\n        private JObject ReadRow(TableDefinition table, ISQLiteStatement statement)\n        {\n            var row = new JObject();\n            for (int i = 0; i < statement.ColumnCount; i++)\n            {\n                string name = statement.ColumnName(i);\n                object value = statement[i];\n\n                ColumnDefinition column;\n                if (table.TryGetValue(name, out column))\n                {\n                    JToken jVal = SqlHelpers.DeserializeValue(value, column.StoreType, column.JsonType);\n                    row[name] = jVal;\n                }\n                else\n                {\n                    row[name] = value == null ? null : JToken.FromObject(value);\n                }\n            }\n            return row;\n        }\n\n        private static MobileServiceSystemProperties GetSystemProperties(JObject item)\n        {\n            var sysProperties = MobileServiceSystemProperties.None;\n\n            if (item[MobileServiceSystemColumns.Version] != null)\n            {\n                sysProperties = sysProperties | MobileServiceSystemProperties.Version;\n            }\n            if (item[MobileServiceSystemColumns.CreatedAt] != null)\n            {\n                sysProperties = sysProperties | MobileServiceSystemProperties.CreatedAt;\n            }\n            if (item[MobileServiceSystemColumns.UpdatedAt] != null)\n            {\n                sysProperties = sysProperties | MobileServiceSystemProperties.UpdatedAt;\n            }\n            if (item[MobileServiceSystemColumns.Deleted] != null)\n            {\n                sysProperties = sysProperties | MobileServiceSystemProperties.Deleted;\n            }\n            return sysProperties;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                this.connection.Dispose();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/MobileServiceSQLiteStoreExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Reflection;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing Newtonsoft.Json.Serialization;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore\n{\n    /// <summary>\n    ///  Provides extension methods on <see cref=\"MobileServiceSQLiteStore\"/>.\n    /// </summary>\n    public static class MobileServiceSQLiteStoreExtensions\n    {\n        public static void DefineTable<T>(this MobileServiceSQLiteStore store)\n        {\n            var settings = new MobileServiceJsonSerializerSettings();\n            DefineTable<T>(store, settings);\n        }\n\n        public static void DefineTable<T>(this MobileServiceSQLiteStore store, MobileServiceJsonSerializerSettings settings)\n        {\n            string tableName = settings.ContractResolver.ResolveTableName(typeof(T));\n            var contract = settings.ContractResolver.ResolveContract(typeof(T)) as JsonObjectContract;\n            if (contract == null)\n            {\n                throw new ArgumentException(\"The generic type T is not an object.\");\n            }\n            if (contract.DefaultCreator == null)\n            {\n                throw new ArgumentException(\"The generic type T does not have parameterless constructor.\");\n            }\n\n            // create an empty object\n            object theObject = contract.DefaultCreator();\n            SetEnumDefault(contract, theObject);\n\n            JObject item = ConvertToJObject(settings, theObject);\n\n            //// set default values so serialized version can be used to infer types\n            SetIdDefault<T>(settings, item);\n            SetNullDefault(contract, item);\n\n            store.DefineTable(tableName, item);\n        }\n\n        private static void SetEnumDefault(JsonObjectContract contract, object theObject)\n        {\n            foreach (JsonProperty contractProperty in contract.Properties)\n            {\n                if (contractProperty.PropertyType.GetTypeInfo().IsEnum)\n                {\n                    object firstValue = Enum.GetValues(contractProperty.PropertyType)\n                                            .Cast<object>()\n                                            .FirstOrDefault();\n                    if (firstValue != null)\n                    {\n                        contractProperty.ValueProvider.SetValue(theObject, firstValue);\n                    }\n                }\n            }\n        }\n\n        private static JObject ConvertToJObject(MobileServiceJsonSerializerSettings settings, object theObject)\n        {\n            string json = JsonConvert.SerializeObject(theObject, settings);\n            JObject item = JsonConvert.DeserializeObject<JObject>(json, settings);\n            return item;\n        }\n\n        private static void SetIdDefault<T>(MobileServiceJsonSerializerSettings settings, JObject item)\n        {\n            JsonProperty idProperty = settings.ContractResolver.ResolveIdProperty(typeof(T));\n            if (idProperty.PropertyType == typeof(long) || idProperty.PropertyType == typeof(int))\n            {\n                item[MobileServiceSystemColumns.Id] = 0;\n            }\n            else\n            {\n                item[MobileServiceSystemColumns.Id] = String.Empty;\n            }\n        }\n\n        private static void SetNullDefault(JsonObjectContract contract, JObject item)\n        {\n            foreach (JProperty itemProperty in item.Properties().Where(i => i.Value.Type == JTokenType.Null))\n            {\n                JsonProperty contractProperty = contract.Properties[itemProperty.Name];\n                if (contractProperty.PropertyType == typeof(string) || contractProperty.PropertyType == typeof(Uri))\n                {\n                    item[itemProperty.Name] = String.Empty;\n                }\n                else if (contractProperty.PropertyType == typeof(byte[]))\n                {\n                    item[itemProperty.Name] = new byte[0];\n                }\n                else if (contractProperty.PropertyType.GetTypeInfo().IsGenericType && contractProperty.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))\n                {\n                    item[itemProperty.Name] = new JValue(Activator.CreateInstance(contractProperty.PropertyType.GenericTypeArguments[0]));\n                }\n                else\n                {\n                    item[itemProperty.Name] = new JObject();\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Resources;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.SQLiteStore\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Microsoft Corporation\")]\n[assembly: AssemblyProduct(\"Windows Azure Mobile Services SDK\")]\n[assembly: AssemblyCopyright(\"© Microsoft Corporation. All rights reserved.\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n\n#if Sign\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.Ext, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.Unit, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.Win8.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.WP8.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.Net45.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n#else\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.Ext\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.Unit\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.Win8.Test\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.WP8.Test\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.Net45.Test\")]\n[assembly: InternalsVisibleTo(\"DynamicProxyGenAssembly2\")]\n#endif\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34014\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Properties {\n    using System;\n    using System.Reflection;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Properties.Resources\", typeof(Resources).GetTypeInfo().Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to A Windows Azure Mobile Services assembly for the current platform was not found. Ensure that the current project references both {0} and the following platform-specific assembly: {1}..\n        /// </summary>\n        internal static string Platform_AssemblyNotFound {\n            get {\n                return ResourceManager.GetString(\"Platform_AssemblyNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Column with name &apos;{0}&apos; is not defined on the local table &apos;{1}&apos;..\n        /// </summary>\n        internal static string SQLiteStore_ColumnNotDefined {\n            get {\n                return ResourceManager.GetString(\"SQLiteStore_ColumnNotDefined\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cannot define a table after the store has been initialized..\n        /// </summary>\n        internal static string SQLiteStore_DefineAfterInitialize {\n            get {\n                return ResourceManager.GetString(\"SQLiteStore_DefineAfterInitialize\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The generic type T does not have parameterless constructor..\n        /// </summary>\n        internal static string SQLiteStore_DefineTableEmptyCtorNotDefined {\n            get {\n                return ResourceManager.GetString(\"SQLiteStore_DefineTableEmptyCtorNotDefined\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The generic type T is not an object..\n        /// </summary>\n        internal static string SQLiteStore_DefineTableTNotAnObject {\n            get {\n                return ResourceManager.GetString(\"SQLiteStore_DefineTableTNotAnObject\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;{0}&apos; is not a valid identifier. Identifiers must be under 128 characters in length, start with a letter or underscore, and can contain only alpha-numeric and underscore characters..\n        /// </summary>\n        internal static string SQLiteStore_InvalidIdentifier {\n            get {\n                return ResourceManager.GetString(\"SQLiteStore_InvalidIdentifier\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Property of type &apos;{0}&apos; is not supported..\n        /// </summary>\n        internal static string SQLiteStore_JTokenNotSupported {\n            get {\n                return ResourceManager.GetString(\"SQLiteStore_JTokenNotSupported\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Query execution failed with result: &apos;{0}&apos;..\n        /// </summary>\n        internal static string SQLiteStore_QueryExecutionFailed {\n            get {\n                return ResourceManager.GetString(\"SQLiteStore_QueryExecutionFailed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Table with name &apos;{0}&apos; is not defined..\n        /// </summary>\n        internal static string SQLiteStore_TableNotDefined {\n            get {\n                return ResourceManager.GetString(\"SQLiteStore_TableNotDefined\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The number of fields per entity in an upsert operation is limited to {0}..\n        /// </summary>\n        internal static string SQLiteStore_TooManyColumns {\n            get {\n                return ResourceManager.GetString(\"SQLiteStore_TooManyColumns\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value of type &apos;{0}&apos; is not supported..\n        /// </summary>\n        internal static string SQLiteStore_ValueTypeNotSupported {\n            get {\n                return ResourceManager.GetString(\"SQLiteStore_ValueTypeNotSupported\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Platform_AssemblyNotFound\" xml:space=\"preserve\">\n    <value>A Windows Azure Mobile Services assembly for the current platform was not found. Ensure that the current project references both {0} and the following platform-specific assembly: {1}.</value>\n  </data>\n  <data name=\"SQLiteStore_ColumnNotDefined\" xml:space=\"preserve\">\n    <value>Column with name '{0}' is not defined on the local table '{1}'.</value>\n  </data>\n  <data name=\"SQLiteStore_DefineAfterInitialize\" xml:space=\"preserve\">\n    <value>Cannot define a table after the store has been initialized.</value>\n  </data>\n  <data name=\"SQLiteStore_DefineTableEmptyCtorNotDefined\" xml:space=\"preserve\">\n    <value>The generic type T does not have parameterless constructor.</value>\n  </data>\n  <data name=\"SQLiteStore_DefineTableTNotAnObject\" xml:space=\"preserve\">\n    <value>The generic type T is not an object.</value>\n  </data>\n  <data name=\"SQLiteStore_InvalidIdentifier\" xml:space=\"preserve\">\n    <value>'{0}' is not a valid identifier. Identifiers must be under 128 characters in length, start with a letter or underscore, and can contain only alpha-numeric and underscore characters.</value>\n  </data>\n  <data name=\"SQLiteStore_JTokenNotSupported\" xml:space=\"preserve\">\n    <value>Property of type '{0}' is not supported.</value>\n  </data>\n  <data name=\"SQLiteStore_QueryExecutionFailed\" xml:space=\"preserve\">\n    <value>Query execution failed with result: '{0}'.</value>\n  </data>\n  <data name=\"SQLiteStore_TableNotDefined\" xml:space=\"preserve\">\n    <value>Table with name '{0}' is not defined.</value>\n  </data>\n  <data name=\"SQLiteStore_TooManyColumns\" xml:space=\"preserve\">\n    <value>The number of fields per entity in an upsert operation is limited to {0}.</value>\n  </data>\n  <data name=\"SQLiteStore_ValueTypeNotSupported\" xml:space=\"preserve\">\n    <value>Value of type '{0}' is not supported.</value>\n  </data>\n</root>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/SqlColumnType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore\n{\n    internal static class SqlColumnType\n    {\n        // base types\n        public const string Integer = \"INTEGER\";\n        public const string Text = \"TEXT\";\n        public const string None = \"NONE\";\n        public const string Real = \"REAL\";\n        public const string Numeric = \"NUMERIC\";\n\n        // type aliases\n        public const string Boolean = \"BOOLEAN\"; // NUMERIC\n        public const string DateTime = \"DATETIME\"; // NUMERIC\n        public const string Float = \"FLOAT\"; // REAL\n        public const string Blob = \"BLOB\"; // NONE\n\n\n        // custom types = NONE\n        public const string Guid = \"GUID\";\n        public const string Json = \"JSON\";\n        public const string Uri = \"URI\";\n        public const string TimeSpan = \"TIMESPAN\";\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/SqlHelpers.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Globalization;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore\n{\n    internal class SqlHelpers\n    {\n        static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);\n\n        public static object SerializeValue(JValue value, bool allowNull)\n        {\n            string storeType = SqlHelpers.GetStoreType(value.Type, allowNull);\n            return SerializeValue(value, storeType, value.Type);\n        }\n\n        public static object SerializeValue(JToken value, string storeType, JTokenType columnType)\n        {\n            if (value == null || value.Type == JTokenType.Null)\n            {\n                return null;\n            }\n\n            if (IsTextType(storeType))\n            {\n                return SerializeAsText(value, columnType);\n            }\n            if (IsRealType(storeType))\n            {\n                return SerializeAsReal(value, columnType);\n            }\n            if (IsNumberType(storeType))\n            {\n                return SerializeAsNumber(value, columnType);\n            }\n\n            return value.ToString();\n        }\n\n        public static JToken DeserializeValue(object value, string storeType, JTokenType columnType)\n        {\n            if (value == null)\n            {\n                return null;\n            }\n\n            if (IsTextType(storeType))\n            {\n                return SqlHelpers.ParseText(columnType, value);\n            }\n            if (IsRealType(storeType))\n            {\n                return SqlHelpers.ParseReal(columnType, value);\n            }\n            if (IsNumberType(storeType))\n            {\n                return SqlHelpers.ParseNumber(columnType, value);\n            }\n\n            return null;\n        }\n\n        // https://www.sqlite.org/datatype3.html (2.2 Affinity Name Examples)\n        public static string GetStoreCastType(Type type)\n        {\n            if (type == typeof(bool) ||\n                type == typeof(DateTime) ||\n                type == typeof(decimal))\n            {\n                return SqlColumnType.Numeric;\n            }\n            else if (type == typeof(int) ||\n                    type == typeof(uint) ||\n                    type == typeof(long) ||\n                    type == typeof(ulong) ||\n                    type == typeof(short) ||\n                    type == typeof(ushort) ||\n                    type == typeof(byte) ||\n                    type == typeof(sbyte))\n            {\n                return SqlColumnType.Integer;\n            }\n            else if (type == typeof(float) ||\n                     type == typeof(double))\n            {\n                return SqlColumnType.Real;\n            }\n            else if (type == typeof(string) ||\n                    type == typeof(Guid) ||\n                    type == typeof(byte[]) ||\n                    type == typeof(Uri) ||\n                    type == typeof(TimeSpan))\n            {\n                return SqlColumnType.Text;\n            }\n\n            throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, \"Value of type '{0}' is not supported.\", type.Name));\n        }\n\n        public static string GetStoreType(JTokenType type, bool allowNull)\n        {\n            switch (type)\n            {\n                case JTokenType.Boolean:\n                    return SqlColumnType.Boolean;\n                case JTokenType.Integer:\n                    return SqlColumnType.Integer;\n                case JTokenType.Date:\n                    return SqlColumnType.DateTime;\n                case JTokenType.Float:\n                    return SqlColumnType.Float;\n                case JTokenType.String:\n                    return SqlColumnType.Text;\n                case JTokenType.Guid:\n                    return SqlColumnType.Guid;\n                case JTokenType.Array:\n                case JTokenType.Object:\n                    return SqlColumnType.Json;\n                case JTokenType.Bytes:\n                    return SqlColumnType.Blob;\n                case JTokenType.Uri:\n                    return SqlColumnType.Uri;\n                case JTokenType.TimeSpan:\n                    return SqlColumnType.TimeSpan;\n                case JTokenType.Null:\n                    if (allowNull)\n                    {\n                        return null;\n                    }\n                    throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, \"Property of type '{0}' is not supported.\", type));\n                case JTokenType.Comment:\n                case JTokenType.Constructor:\n                case JTokenType.None:\n                case JTokenType.Property:\n                case JTokenType.Raw:\n                case JTokenType.Undefined:\n                default:\n                    throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, \"Property of type '{0}' is not supported.\", type));\n            }\n        }\n\n        public static string FormatTableName(string tableName)\n        {\n            ValidateIdentifier(tableName);\n            return string.Format(\"[{0}]\", tableName);\n        }\n\n        public static string FormatMember(string memberName)\n        {\n            ValidateIdentifier(memberName);\n            return string.Format(\"[{0}]\", memberName);\n        }\n\n        private static bool IsNumberType(string storeType)\n        {\n            return storeType == SqlColumnType.Integer ||\n                    storeType == SqlColumnType.Numeric ||\n                    storeType == SqlColumnType.Boolean ||\n                    storeType == SqlColumnType.DateTime;\n        }\n\n        private static bool IsRealType(string storeType)\n        {\n            return storeType == SqlColumnType.Real ||\n                    storeType == SqlColumnType.Float;\n        }\n\n        private static bool IsTextType(string storeType)\n        {\n            return storeType == SqlColumnType.Text ||\n                    storeType == SqlColumnType.Blob ||\n                    storeType == SqlColumnType.Guid ||\n                    storeType == SqlColumnType.Json ||\n                    storeType == SqlColumnType.Uri ||\n                    storeType == SqlColumnType.TimeSpan;\n        }\n\n        private static object SerializeAsNumber(JToken value, JTokenType columnType)\n        {\n            if (columnType == JTokenType.Date)\n            {\n                return SerializeDateTime(value);\n            }\n            return value.Value<long>();\n        }\n\n        private static double SerializeAsReal(JToken value, JTokenType columnType)\n        {\n            return value.Value<double>();\n        }\n\n        private static string SerializeAsText(JToken value, JTokenType columnType)\n        {\n            if (columnType == JTokenType.Bytes && value.Type == JTokenType.Bytes)\n            {\n                return Convert.ToBase64String(value.Value<byte[]>());\n            }\n\n            return value.ToString();\n        }\n\n        private static JToken ParseText(JTokenType type, object value)\n        {\n            string strValue = value as string;\n            if (value == null)\n            {\n                return strValue;\n            }\n\n            if (type == JTokenType.Guid)\n            {\n                return Guid.Parse(strValue);\n            }\n            if (type == JTokenType.Bytes)\n            {\n                return Convert.FromBase64String(strValue);\n            }\n            if (type == JTokenType.TimeSpan)\n            {\n                return TimeSpan.Parse(strValue);\n            }\n            if (type == JTokenType.Uri)\n            {\n                return new Uri(strValue, UriKind.RelativeOrAbsolute);\n            }\n            if (type == JTokenType.Array || type == JTokenType.Object)\n            {\n                return JToken.Parse(strValue);\n            }\n\n            return strValue;\n        }\n\n        private static JToken ParseReal(JTokenType type, object value)\n        {\n            double dblValue = Convert.ToDouble(value);\n            if (type == JTokenType.Date) // for compatibility reason i.e. in earlier release datetime was serialized as real type\n            {\n                return DeserializeDateTime(dblValue);\n            }\n\n            return dblValue;\n        }\n\n        private static JToken ParseNumber(JTokenType type, object value)\n        {\n            if (type == JTokenType.Date)\n            {\n                return DeserializeDateTime(Convert.ToDouble(value));\n            }\n\n            long longValue = Convert.ToInt64(value);\n            if (type == JTokenType.Boolean)\n            {\n                bool boolValue = longValue == 1;\n                return boolValue;\n            }\n            return longValue;\n        }\n\n        private static JToken DeserializeDateTime(double value)\n        {\n            return epoch.AddSeconds(value);\n        }\n\n        private static double SerializeDateTime(JToken value)\n        {\n            var date = value.ToObject<DateTime>();\n            if (date.Kind == DateTimeKind.Unspecified)\n            {\n                date = DateTime.SpecifyKind(date, DateTimeKind.Utc);\n            }\n            double unixTimestamp = Math.Round((date.ToUniversalTime() - epoch).TotalSeconds, 3);\n            return unixTimestamp;\n        }\n\n        private static void ValidateIdentifier(string identifier)\n        {\n            if (!IsValidIdentifier(identifier))\n            {\n                throw new ArgumentException(string.Format(\"'{0}' is not a valid identifier. Identifiers must be under 128 characters in length, start with a letter or underscore, and can contain only alpha-numeric and underscore characters.\", identifier), \"identifier\");\n            }\n        }\n\n        private static bool IsValidIdentifier(string identifier)\n        {\n            if (String.IsNullOrWhiteSpace(identifier) || identifier.Length > 128)\n            {\n                return false;\n            }\n\n            char first = identifier[0];\n            if (!(Char.IsLetter(first) || first == '_'))\n            {\n                return false;\n            }\n\n            for (int i = 1; i < identifier.Length; i++)\n            {\n                char ch = identifier[i];\n                if (!(Char.IsLetterOrDigit(ch) || ch == '_'))\n                {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/SqlQueryFormatter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore\n{\n    internal class SqlQueryFormatter : QueryNodeVisitor<QueryNode>\n    {\n        private MobileServiceTableQueryDescription query;\n        private StringBuilder sql;\n\n        public IDictionary<string, object> Parameters { get; private set; }\n\n        public SqlQueryFormatter(MobileServiceTableQueryDescription query)\n        {\n            this.query = query;\n        }\n\n        public string FormatSelect()\n        {\n            var command = new StringBuilder(\"SELECT \");\n\n            if (this.query.Selection.Any())\n            {\n                string columnNames = String.Join(\", \", this.query.Selection.Select(c => SqlHelpers.FormatMember(c)));\n                command.Append(columnNames);\n            }\n            else\n            {\n                command.Append(\"*\");\n            }\n\n            return FormatQuery(command.ToString());\n        }\n\n        public string FormatSelectCount()\n        {\n            this.Reset();\n\n            if (this.query.IncludeTotalCount)\n            {\n                this.FormatCountQuery();\n            }\n\n            return GetSql();\n        }\n\n        public string FormatDelete()\n        {\n            var delQuery = this.query.Clone(); // create a copy to avoid modifying the original\n\n            delQuery.Selection.Clear();\n            delQuery.Selection.Add(MobileServiceSystemColumns.Id);\n            delQuery.IncludeTotalCount = false;\n\n            var formatter = new SqlQueryFormatter(delQuery);\n            string selectIdQuery = formatter.FormatSelect();\n            string idMemberName = SqlHelpers.FormatMember(MobileServiceSystemColumns.Id);\n            string tableName = SqlHelpers.FormatTableName(delQuery.TableName);\n            string command = string.Format(\"DELETE FROM {0} WHERE {1} IN ({2})\", tableName, idMemberName, selectIdQuery);\n            this.Parameters = formatter.Parameters;\n\n            return command;\n        }\n\n        private string FormatQuery(string command)\n        {\n            Reset();\n\n            this.sql.Append(command);\n\n            string tableName = SqlHelpers.FormatTableName(this.query.TableName);\n            this.sql.AppendFormat(\" FROM {0}\", tableName);\n\n            if (this.query.Filter != null)\n            {\n                this.FormatWhereClause(this.query.Filter);\n            }\n\n            if (this.query.Ordering.Count > 0)\n            {\n                this.FormatOrderByClause(this.query.Ordering);\n            }\n\n            if (this.query.Skip.HasValue || this.query.Top.HasValue)\n            {\n                this.FormatLimitClause(this.query.Top, this.query.Skip);\n            }\n\n            return GetSql();\n        }\n\n        private string GetSql()\n        {\n            return this.sql.ToString().TrimEnd();\n        }\n\n        private void Reset()\n        {\n            this.sql = new StringBuilder();\n            this.Parameters = new Dictionary<string, object>();\n        }\n\n        private void FormatLimitClause(int? limit, int? offset)\n        {\n            this.sql.AppendFormat(\" LIMIT {0}\", limit.GetValueOrDefault(Int32.MaxValue));\n\n            if (offset.HasValue)\n            {\n                this.sql.AppendFormat(\" OFFSET {0}\", offset.Value);\n            }\n        }\n\n        private void FormatCountQuery()\n        {\n            string tableName = SqlHelpers.FormatTableName(this.query.TableName);\n            this.sql.AppendFormat(\"SELECT COUNT(1) AS [count] FROM {0}\", tableName);\n\n            if (this.query.Filter != null)\n            {\n                this.FormatWhereClause(this.query.Filter);\n            }\n        }\n\n        private void FormatOrderByClause(IList<OrderByNode> orderings)\n        {\n            this.sql.Append(\" ORDER BY \");\n            string separator = String.Empty;\n\n            foreach (OrderByNode node in orderings)\n            {\n                this.sql.Append(separator);\n                node.Expression.Accept(this);\n                if (node.Direction == OrderByDirection.Descending)\n                {\n                    this.sql.Append(\" DESC\");\n                }\n                separator = \", \";\n            }\n        }\n\n        private void FormatWhereClause(QueryNode expression)\n        {\n            this.sql.Append(\" WHERE \");\n            expression.Accept(this);\n        }\n\n        public override QueryNode Visit(BinaryOperatorNode nodeIn)\n        {\n            this.sql.Append(\"(\");\n\n            QueryNode left = nodeIn.LeftOperand;\n            QueryNode right = nodeIn.RightOperand;\n\n            if (left != null)\n            {\n                // modulo requires the dividend to be an integer, monetary or numeric\n                // rewrite the expression to convert to numeric, allowing the DB to apply\n                // rounding if needed. our default data type for number is float which\n                // is incompatible with modulo.\n                if (nodeIn.OperatorKind == BinaryOperatorKind.Modulo)\n                {\n                    left = new ConvertNode(left, typeof(int));\n                }\n\n                left = left.Accept(this);\n            }\n\n            var rightConstant = right as ConstantNode;\n            if (rightConstant != null && rightConstant.Value == null)\n            {\n                // inequality expressions against a null literal have a special\n                // translation in SQL\n                if (nodeIn.OperatorKind == BinaryOperatorKind.Equal)\n                {\n                    this.sql.Append(\" IS NULL\");\n                }\n                else if (nodeIn.OperatorKind == BinaryOperatorKind.NotEqual)\n                {\n                    this.sql.Append(\" IS NOT NULL\");\n                }\n            }\n            else\n            {\n                switch (nodeIn.OperatorKind)\n                {\n                    case BinaryOperatorKind.Equal:\n                        this.sql.Append(\" = \");\n                        break;\n                    case BinaryOperatorKind.NotEqual:\n                        this.sql.Append(\" != \");\n                        break;\n                    case BinaryOperatorKind.LessThan:\n                        this.sql.Append(\" < \");\n                        break;\n                    case BinaryOperatorKind.LessThanOrEqual:\n                        this.sql.Append(\" <= \");\n                        break;\n                    case BinaryOperatorKind.GreaterThan:\n                        this.sql.Append(\" > \");\n                        break;\n                    case BinaryOperatorKind.GreaterThanOrEqual:\n                        this.sql.Append(\" >= \");\n                        break;\n                    case BinaryOperatorKind.And:\n                        this.sql.Append(\" AND \");\n                        break;\n                    case BinaryOperatorKind.Or:\n                        this.sql.Append(\" OR \");\n                        break;\n                    case BinaryOperatorKind.Add:\n                        this.sql.Append(\" + \");\n                        break;\n                    case BinaryOperatorKind.Subtract:\n                        this.sql.Append(\" - \");\n                        break;\n                    case BinaryOperatorKind.Multiply:\n                        this.sql.Append(\" * \");\n                        break;\n                    case BinaryOperatorKind.Divide:\n                        this.sql.Append(\" / \");\n                        break;\n                    case BinaryOperatorKind.Modulo:\n                        this.sql.Append(\" % \");\n                        break;\n                }\n\n                if (right != null)\n                {\n                    right = right.Accept(this);\n                }\n            }\n\n            this.sql.Append(\")\");\n\n            if (left != nodeIn.LeftOperand || right != nodeIn.RightOperand)\n            {\n                return new BinaryOperatorNode(nodeIn.OperatorKind, left, right);\n            }\n\n            return nodeIn;\n        }\n\n        public override QueryNode Visit(ConstantNode nodeIn)\n        {\n            if (nodeIn.Value == null)\n            {\n                this.sql.Append(\"NULL\");\n            }\n            else\n            {\n                this.sql.Append(this.CreateParameter(nodeIn.Value));\n            }\n\n\n            return nodeIn;\n        }\n\n        public override QueryNode Visit(MemberAccessNode nodeIn)\n        {\n            string memberName = SqlHelpers.FormatMember(nodeIn.MemberName);\n            this.sql.Append(memberName);\n\n            return nodeIn;\n        }\n\n        public override QueryNode Visit(FunctionCallNode nodeIn)\n        {\n            switch (nodeIn.Name)\n            {\n                case \"day\":\n                    return this.FormatDateFunction(\"%d\", nodeIn);\n                case \"month\":\n                    return this.FormatDateFunction(\"%m\", nodeIn);\n                case \"year\":\n                    return this.FormatDateFunction(\"%Y\", nodeIn);\n                case \"hour\":\n                    return this.FormatDateFunction(\"%H\", nodeIn);\n                case \"minute\":\n                    return this.FormatDateFunction(\"%M\", nodeIn);\n                case \"second\":\n                    return this.FormatDateFunction(\"%S\", nodeIn);\n                case \"floor\":\n                    return this.FormatFloorFunction(nodeIn);\n                case \"ceiling\":\n                    return this.FormatCeilingFunction(nodeIn);\n                case \"round\":\n                    return this.FormatRoundFunction(nodeIn);\n                case \"tolower\":\n                    return this.FormatStringFunction(\"LOWER\", nodeIn);\n                case \"toupper\":\n                    return this.FormatStringFunction(\"UPPER\", nodeIn);\n                case \"length\":\n                    return this.FormatStringFunction(\"LENGTH\", nodeIn);\n                case \"trim\":\n                    return this.FormatStringFunction(\"TRIM\", nodeIn);\n                case \"substringof\":\n                    return this.FormatLikeFunction(true, nodeIn, 0, 1, true);\n                case \"startswith\":\n                    return this.FormatLikeFunction(false, nodeIn, 1, 0, true);\n                case \"endswith\":\n                    return this.FormatLikeFunction(true, nodeIn, 1, 0, false);\n                case \"concat\":\n                    return this.FormatConcatFunction(nodeIn);\n                case \"indexof\":\n                    return this.FormatIndexOfFunction(nodeIn);\n                case \"replace\":\n                    return this.FormatStringFunction(\"REPLACE\", nodeIn);\n                case \"substring\":\n                    return FormatSubstringFunction(nodeIn);\n            }\n\n            throw new NotImplementedException();\n        }\n\n        private QueryNode FormatLikeFunction(bool startAny, FunctionCallNode nodeIn, int patternIndex, int valueIndex, bool endAny)\n        {\n            // like('%pattern%', value)\n            this.sql.Append(\"LIKE(\");\n            if (startAny)\n            {\n                this.sql.Append(\"'%' || \");\n            }\n            nodeIn.Arguments[patternIndex].Accept(this);\n            if (endAny)\n            {\n                this.sql.Append(\" || '%'\");\n            }\n            this.sql.Append(\", \");\n            nodeIn.Arguments[valueIndex].Accept(this);\n            this.sql.Append(\")\");\n\n            return nodeIn;\n        }\n\n        private QueryNode FormatConcatFunction(FunctionCallNode nodeIn)\n        {\n            string separator = String.Empty;\n            foreach (QueryNode arg in nodeIn.Arguments)\n            {\n                this.sql.Append(separator);\n                arg.Accept(this);\n                separator = \" || \";\n            }\n            return nodeIn;\n        }\n\n        private QueryNode FormatIndexOfFunction(FunctionCallNode nodeIn)\n        {\n            QueryNode result = this.FormatStringFunction(\"INSTR\", nodeIn);\n            this.sql.Append(\" - 1\");\n            return result;\n        }\n\n        private QueryNode FormatSubstringFunction(FunctionCallNode nodeIn)\n        {\n            this.sql.Append(\"SUBSTR(\");\n            nodeIn.Arguments[0].Accept(this);\n            if (nodeIn.Arguments.Count > 1)\n            {\n                this.sql.Append(\", \");\n                nodeIn.Arguments[1].Accept(this);\n                this.sql.Append(\" + 1\");  // need to add 1 since SQL is 1 based, but OData is zero based\n\n                if (nodeIn.Arguments.Count > 2)\n                {\n                    this.sql.Append(\", \");\n                    nodeIn.Arguments[2].Accept(this);\n                }\n            }\n            this.sql.Append(\")\");\n            return nodeIn;\n        }\n\n        private QueryNode FormatStringFunction(string fn, FunctionCallNode nodeIn)\n        {\n            this.sql.AppendFormat(\"{0}(\", fn);\n            string separator = String.Empty;\n            foreach (QueryNode arg in nodeIn.Arguments)\n            {\n                this.sql.Append(separator);\n                arg.Accept(this);\n                separator = \", \";\n            }\n            this.sql.Append(\")\");\n\n            return nodeIn;\n        }\n\n        private QueryNode FormatCeilingFunction(FunctionCallNode nodeIn)\n        {\n            // floor(x) + (x == floor(x) ? 0 : 1)\n            FormatFloorFunction(nodeIn);\n            this.sql.Append(\" + (CASE WHEN \");\n            nodeIn.Arguments[0].Accept(this);\n            this.sql.Append(\" = \");\n            FormatFloorFunction(nodeIn);\n            this.sql.Append(\" THEN 0 ELSE 1 END)\");\n\n            return nodeIn;\n        }\n\n        private QueryNode FormatRoundFunction(FunctionCallNode nodeIn)\n        {\n            this.sql.Append(\"ROUND(\");\n\n            nodeIn.Arguments[0].Accept(this);\n\n            this.sql.Append(\", 0)\");\n\n            return nodeIn;\n        }\n\n        private QueryNode FormatFloorFunction(FunctionCallNode nodeIn)\n        {\n            // CASE WHEN x >= 0 THEN CAST(id AS INTEGER) // for +ve values cast to integer to drop the decimal places\n            //      WHEN CAST(id AS INTEGER) = id THEN id // for integers just return them as they are\n            //      ELSE CAST(id - 1.0 AS INTEGER) // for -ve values cast to integer rounds up close to zero\n            // END\n\n            var whenXisPositive = new BinaryOperatorNode(BinaryOperatorKind.GreaterThanOrEqual, nodeIn.Arguments[0], new ConstantNode(0));\n            var castToInt = new ConvertNode(nodeIn.Arguments[0], typeof(int));\n            var whenXIsInteger = new BinaryOperatorNode(BinaryOperatorKind.Equal, castToInt, nodeIn.Arguments[0]);\n            var subtractOne = new BinaryOperatorNode(BinaryOperatorKind.Subtract, nodeIn.Arguments[0], new ConstantNode(1));\n            var subtractOneThenCast = new ConvertNode(subtractOne, typeof(int));\n\n            this.sql.Append(\"(CASE WHEN \");\n            whenXisPositive.Accept(this);\n            this.sql.Append(\" THEN \");\n            castToInt.Accept(this);\n            this.sql.Append(\" WHEN \");\n            whenXIsInteger.Accept(this);\n            this.sql.Append(\" THEN \");\n            nodeIn.Arguments[0].Accept(this);\n            this.sql.Append(\" ELSE \");\n            subtractOneThenCast.Accept(this);\n            this.sql.Append(\" END)\");\n            return nodeIn;\n        }\n\n        private QueryNode FormatDateFunction(string formatSting, FunctionCallNode nodeIn)\n        {\n            // CAST(strftime('%d', datetime([__createdAt], 'unixepoch')) AS INTEGER)\n            this.sql.AppendFormat(\"CAST(strftime('{0}', datetime(\", formatSting);\n            nodeIn.Arguments[0].Accept(this);\n            this.sql.Append(\", 'unixepoch')) AS INTEGER)\");\n\n            return nodeIn;\n        }\n\n        public override QueryNode Visit(UnaryOperatorNode nodeIn)\n        {\n            if (nodeIn.OperatorKind == UnaryOperatorKind.Negate)\n            {\n                this.sql.Append(\"-(\");\n            }\n            else if (nodeIn.OperatorKind == UnaryOperatorKind.Not)\n            {\n                this.sql.Append(\"NOT(\");\n            }\n            QueryNode operand = nodeIn.Operand.Accept(this);\n            this.sql.Append(\")\");\n\n            if (operand != nodeIn.Operand)\n            {\n                return new UnaryOperatorNode(nodeIn.OperatorKind, operand);\n            }\n\n            return nodeIn;\n        }\n\n        public override QueryNode Visit(ConvertNode nodeIn)\n        {\n            this.sql.Append(\"CAST(\");\n\n            QueryNode source = nodeIn.Source.Accept(this);\n\n            this.sql.Append(\" AS \");\n\n            string sqlType = SqlHelpers.GetStoreCastType(nodeIn.TargetType);\n            this.sql.Append(sqlType);\n\n            this.sql.Append(\")\");\n\n            if (source != nodeIn.Source)\n            {\n                return new ConvertNode(source, nodeIn.TargetType);\n            }\n\n            return nodeIn;\n        }\n\n        private string CreateParameter(object value)\n        {\n            int paramNumber = this.Parameters.Count + 1;\n            string paramName = \"@p\" + paramNumber;\n            this.Parameters.Add(paramName, SqlHelpers.SerializeValue(new JValue(value), allowNull: true));\n            return paramName;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/TableDefinition.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore\n{\n    /// <summary>\n    /// A class that represents the structure of table on local store\n    /// </summary>\n    [SuppressMessage(\"Microsoft.Interoperability\", \"CA1405:ComVisibleTypeBaseTypesShouldBeComVisible\")]\n    public class TableDefinition : Dictionary<string, ColumnDefinition>\n    {\n        public MobileServiceSystemProperties SystemProperties { get; private set; }\n\n        public TableDefinition()\n        {\n        }\n\n        public TableDefinition(IDictionary<string, ColumnDefinition> definition, MobileServiceSystemProperties systemProperties)\n            : base(definition, StringComparer.OrdinalIgnoreCase)\n        {\n            this.SystemProperties = systemProperties;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.SQLiteStore/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"portable-net45+win+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"SQLitePCL\" version=\"3.8.7.2\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8/Microsoft.WindowsAzure.Mobile.Ext.WP8.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),Microsoft.WindowsAzure.Mobile.Build.msbuild))\\tools\\Microsoft.WindowsAzure.Mobile.Build.settings.targets\" Condition=\"$(CmdLine) != ''\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <OutputPath Condition=\" '$(OutputPath)' == '' \">bin\\$(Configuration)</OutputPath>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{3114E433-7FC1-4056-8CF9-2406E32BB10D}</ProjectGuid>\n    <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Ext</AssemblyName>\n    <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>\n    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>\n    <SilverlightApplication>false</SilverlightApplication>\n    <ValidateXaml>true</ValidateXaml>\n    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>\n    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <RunCodeAnalysis>false</RunCodeAnalysis>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>$(OutputPath)\\Microsoft.WindowsAzure.Mobile.Ext.xml</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Platform\\CurrentPlatform.cs\">\n      <Link>Platform\\CurrentPlatform.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Platform\\ExpressionUtility.cs\">\n      <Link>Platform\\ExpressionUtility.cs</Link>\n    </Compile>\n    <Compile Include=\"Platform\\PushUtility.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Platform\\ApplicationStorage.cs\" />\n    <Compile Include=\"Platform\\PlatformInformation.cs\" />\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\ExpressionUtility\\PartialEvaluator.cs\">\n      <Link>ExpressionUtility\\PartialEvaluator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\ExpressionUtility\\VisitorHelper.cs\">\n      <Link>ExpressionUtility\\VisitorHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"Push\\Push.cs\" />\n    <Compile Include=\"Push\\MpnsRegistration.cs\" />\n    <Compile Include=\"Push\\MpnsTemplateRegistration.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-E36E-4190-8714-5BD2665859FB}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets\" />\n  <ProjectExtensions />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8/Platform/ApplicationStorage.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.IO.IsolatedStorage;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An implementation of the <see cref=\"IApplicationStorage\"/> interface\n    /// for the Windows Phone Platform that uses the Windows Phone\n    /// <see cref=\"System.IO.IsolatedStorage.IsolatedStorageSettings\"/> APIs.\n    /// </summary>\n    public class ApplicationStorage : IApplicationStorage\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ApplicationStorage\"/>.\n        /// </summary>\n        private static readonly IApplicationStorage instance = new ApplicationStorage();        \n\n        private ApplicationStorage() : this(string.Empty)\n        {\n        }\n\n        internal ApplicationStorage(string name)\n        {\n            this.StoragePrefix = name;\n        }\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ApplicationStorage\"/>.\n        /// </summary>\n        internal static IApplicationStorage Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        private string StoragePrefix { get; set; }\n\n        /// <summary>\n        /// Tries to read a setting's value from \n        /// <see cref=\"IsolatedStorageSettings.ApplicationSettings\"/>. \n        /// </summary>\n        /// <param name=\"name\">The name of the setting to try to read.\n        /// </param>\n        /// <param name=\"value\">Upon returning, if the return value was <c>true</c>, \n        /// will be the value of the given setting; will be <c>null</c> otherwise.\n        /// </param>\n        /// <returns>\n        /// <c>true</c> if the setting existed and was successfully read; <c>false</c> otherwise.\n        /// </returns>\n        /// <exception cref=\"ArgumentException\">\n        /// Thrown if the setting name is <c>null</c> or whitespace.\n        /// </exception>\n        bool IApplicationStorage.TryReadSetting(string name, out object value)\n        {\n            if (string.IsNullOrWhiteSpace(name))\n            {\n                string message = \"An application setting name must be provided. Null, empty or whitespace only names are not allowed.\";\n                throw new ArgumentException(message);\n            }\n\n            return IsolatedStorageSettings.ApplicationSettings.TryGetValue(string.Concat(this.StoragePrefix, name), out value);\n        }\n\n        /// <summary>\n        /// Writes the setting's value to application storage.\n        /// </summary>\n        /// <param name=\"name\">The name of the setting to write.\n        /// </param>\n        /// <param name=\"value\">The value to write.\n        /// </param>\n        /// <exception cref=\"ArgumentException\">\n        /// Thrown if the setting name is <c>null</c> or empty.\n        /// </exception>\n        void IApplicationStorage.WriteSetting(string name, object value)\n        {\n            if (string.IsNullOrWhiteSpace(name))\n            {\n                string message = \"An application setting name must be provided. Null, empty or whitespace only names are not allowed.\";\n                throw new ArgumentException(message);\n            }\n\n            IsolatedStorageSettings.ApplicationSettings[string.Concat(this.StoragePrefix, name)] = value;\n        }\n\n        void IApplicationStorage.Save()\n        {\n            IsolatedStorageSettings.ApplicationSettings.Save();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8/Platform/PlatformInformation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Globalization;\nusing System.Reflection;\nusing System.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Implements the <see cref=\"IPlatform\"/> interface for the Windows\n    /// Phone platform.\n    /// </summary>\n    internal class PlatformInformation : IPlatformInformation\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ApplicationStorage\"/>.\n        /// </summary>\n        private static readonly IPlatformInformation instance = new PlatformInformation();\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ApplicationStorage\"/>.\n        /// </summary>\n        public static IPlatformInformation Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        /// <summary>\n        /// The architecture of the platform.\n        /// </summary>\n        public string OperatingSystemArchitecture\n        {\n            get\n            {\n                return Environment.OSVersion.Platform.ToString();\n            }\n        }\n\n        /// <summary>\n        /// The name of the operating system of the platform.\n        /// </summary>\n        public string OperatingSystemName\n        {\n            get\n            {\n                return \"Windows Phone\";\n            }\n        }\n\n        /// <summary>\n        /// The version of the operating system of the platform.\n        /// </summary>\n        public string OperatingSystemVersion\n        {\n            get\n            {\n                Version version = Environment.OSVersion.Version;\n\n                return string.Format(CultureInfo.InvariantCulture,\n                    \"{0}.{1}.{2}.{3}\",\n                    version.Major,\n                    version.Minor,\n                    version.Revision,\n                    version.Build);\n            }\n        }\n\n        /// <summary>\n        /// Indicated whether the device is an emulator or not\n        /// </summary>\n        public bool IsEmulator\n        {\n            get\n            {\n                return (Microsoft.Devices.Environment.DeviceType == Microsoft.Devices.DeviceType.Emulator);\n            }\n        }\n\n        public string Version\n        {\n            get\n            {\n                return this.GetVersionFromAssemblyFileVersion();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8/Platform/PushUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class PushUtility : IPushUtility\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"PushUtility\"/>.\n        /// </summary>\n        private static readonly IPushUtility instance = new PushUtility();\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"PushUtility\"/>.\n        /// </summary>\n        public static IPushUtility Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        public Registration GetNewNativeRegistration()\n        {\n            return new MpnsRegistration();\n        }\n\n        public Registration GetNewTemplateRegistration()\n        {\n            return new MpnsTemplateRegistration();\n        }\n\n        public string GetPlatform()\n        {\n            return \"mpns\";\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Resources;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.Ext\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Microsoft Corporation\")]\n[assembly: AssemblyProduct(\"Microsoft Azure Mobile Services SDK\")]\n[assembly: AssemblyCopyright(\"© Microsoft Corporation. All rights reserved.\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"3114e433-7fc1-4056-8cf9-2406e32bb10d\")]\n\n#if Sign\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.WP8.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n#else\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.WP8.Test\")]\n#endif\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8/Push/MpnsRegistration.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Registration is used to define a target that is registered for notifications\n    /// </summary>\n    [JsonObject(MemberSerialization.OptIn)]\n    public class MpnsRegistration : Registration\n    {\n        internal MpnsRegistration()\n        {\n        }\n\n        /// <summary>\n        /// Create a default Registration for a channelUri\n        /// </summary>\n        /// <param name=\"channelUri\">The channel uri</param>\n        public MpnsRegistration(string channelUri)\n            : this(channelUri, null)\n        {\n        }\n\n        /// <summary>\n        /// Create a default Registration for a channelUri with specific tags\n        /// </summary>\n        /// <param name=\"channelUri\">The channel uri</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        public MpnsRegistration(string channelUri, IEnumerable<string> tags)\n            : base(channelUri, tags)\n        {\n            if (string.IsNullOrWhiteSpace(channelUri))\n            {\n                throw new ArgumentNullException(\"channelUri\");\n            }\n        }\n\n        /// <summary>\n        /// The Uri of the Channel returned by the Push Notification Channel Manager.\n        /// </summary>\n        public string ChannelUri\n        {\n            get\n            {\n                return this.PushHandle;\n            }\n\n            set\n            {\n                this.PushHandle = value;\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8/Push/MpnsTemplateRegistration.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Xml.Linq;\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Registration is used to define a target that is registered for notifications. A TemplateRegistration allows the client application\n    /// to define the format of the registration.\n    /// </summary>\n    [JsonObject(MemberSerialization.OptIn)]\n    public sealed class MpnsTemplateRegistration : MpnsRegistration\n    {\n        /// <summary>\n        /// Name of the <see cref=\"MpnsHeaders\"/> key for Windows Phone Notification Target\n        /// </summary>\n        internal const string NotificationType = \"X-WindowsPhone-Target\";\n\n        /// <summary>\n        /// Name of the <see cref=\"MpnsHeaders\"/> key for Windows Phone Notification Class\n        /// </summary>\n        internal const string NotificationClass = \"X-NotificationClass\";\n\n        internal const string NamespaceName = \"WPNotification\";\n        internal const string Tile = \"token\";\n        internal const string Toast = \"toast\";\n\n        internal const string TileClass = \"1\";\n        internal const string ToastClass = \"2\";\n        internal const string RawClass = \"3\";\n\n        internal MpnsTemplateRegistration()\n        {\n        }\n\n        /// <summary>\n        /// Create a TemplateRegistration\n        /// </summary>\n        /// <param name=\"channelUri\">The channel uri</param>\n        /// <param name=\"bodyTemplate\">The template xml in string format</param>\n        /// <param name=\"templateName\">The template name</param>\n        public MpnsTemplateRegistration(string channelUri, string bodyTemplate, string templateName)\n            : this(channelUri, bodyTemplate, templateName, null, null)\n        {\n        }\n\n        /// <summary>\n        /// Create a TemplateRegistration\n        /// </summary>\n        /// <param name=\"channelUri\">The channel uri</param>\n        /// <param name=\"bodyTemplate\">The template xml in string format</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags that restrict which notifications this registration will receive</param>\n        public MpnsTemplateRegistration(string channelUri, string bodyTemplate, string templateName, IEnumerable<string> tags)\n            : this(channelUri, bodyTemplate, templateName, tags, null)\n        {\n        }\n\n        /// <summary>\n        /// Create a TemplateRegistration\n        /// </summary>\n        /// <param name=\"channelUri\">The channel uri</param>\n        /// <param name=\"bodyTemplate\">The template xml in string format</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags that restrict which notifications this registration will receive</param>\n        /// <param name=\"additionalHeaders\">Additional headers</param>\n        public MpnsTemplateRegistration(string channelUri, string bodyTemplate, string templateName, IEnumerable<string> tags, IEnumerable<KeyValuePair<string, string>> additionalHeaders)\n            : base(channelUri, tags)\n        {\n            if (string.IsNullOrWhiteSpace(templateName))\n            {\n                throw new ArgumentNullException(\"templateName\");\n            }\n\n            if (string.IsNullOrWhiteSpace(bodyTemplate))\n            {\n                throw new ArgumentNullException(\"bodyTemplate\");\n            }\n\n            if (templateName.Equals(MpnsRegistration.NativeRegistrationName))\n            {\n                throw new ArgumentException(\"Template name conflicts with reserved name '{0}'.\");\n            }\n\n            if (templateName.Contains(\":\") || templateName.Contains(\";\"))\n            {\n                throw new ArgumentException(\"Template name cannot contain ';' or ':'.\");\n            }\n\n            this.TemplateName = templateName;\n\n            this.MpnsHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);\n            if (additionalHeaders != null)\n            {\n                foreach (var item in additionalHeaders)\n                {\n                    this.MpnsHeaders.Add(item.Key, item.Value);\n                }\n            }\n\n            this.BodyTemplate = bodyTemplate;\n            this.DetectBodyType();\n\n            this.MpnsHeaders = new ReadOnlyDictionary<string, string>(this.MpnsHeaders);\n        }\n\n        private enum TemplateRegistrationType\n        {\n            Toast,\n            Tile\n        }\n\n        /// <summary>\n        /// Gets headers that should be sent to WNS with the notification\n        /// </summary>\n        [JsonProperty(PropertyName = \"headers\")]\n        public IDictionary<string, string> MpnsHeaders { get; private set; }\n\n        /// <summary>\n        /// Get templateName\n        /// </summary>\n        [JsonProperty(PropertyName = \"templateName\")]\n        public string TemplateName { get; private set; }\n\n        /// <summary>\n        /// Gets or sets bodyTemplate as string\n        /// </summary>\n        [JsonProperty(PropertyName = \"templateBody\")]\n        public string BodyTemplate { get; private set; }\n\n        /// <summary>\n        /// The name of the registration used in local storage.\n        /// </summary>\n        public override string Name\n        {\n            get\n            {\n                return this.TemplateName;\n            }\n        }\n\n        private void DetectBodyType()\n        {\n            if (this.MpnsHeaders.ContainsKey(NotificationClass) &&\n                this.MpnsHeaders[NotificationClass].Equals(RawClass, StringComparison.OrdinalIgnoreCase))\n            {\n                // no further check for raw format\n                return;\n            }\n\n            if (!this.MpnsHeaders.ContainsKey(NotificationType))\n            {\n                // AutoDetectType\n                XElement body = null;\n                try\n                {\n                    var elements = XElement.Parse(this.BodyTemplate).Elements();\n                    foreach (var element in elements)\n                    {\n                        if (element.NodeType == System.Xml.XmlNodeType.Element)\n                        {\n                            body = element;\n                            break;\n                        }\n                    }\n                }\n                catch (Exception)\n                {\n                    throw new ArgumentException(\"Valid XML is required for any template without a raw header.\", \"bodyTemplate\");\n                }\n\n                if (body == null)\n                {\n                    throw new ArgumentException(\"XML must contain an XML node of Element type.\", \"bodyTemplate\");\n                }\n\n                TemplateRegistrationType registrationType;\n                if (string.Equals(body.Name.Namespace.NamespaceName, NamespaceName, StringComparison.OrdinalIgnoreCase)\n                    && Enum.TryParse(body.Name.LocalName, true, out registrationType))\n                {\n                    switch (registrationType)\n                    {\n                        case TemplateRegistrationType.Toast:\n                            this.MpnsHeaders.Add(NotificationType, Toast);\n                            break;\n                        case TemplateRegistrationType.Tile:\n                            this.MpnsHeaders.Add(NotificationType, Tile);\n                            break;\n                    }\n                }\n            }\n\n            if (!this.MpnsHeaders.ContainsKey(NotificationClass) && this.MpnsHeaders.ContainsKey(NotificationType))\n            {\n                switch (this.MpnsHeaders[NotificationType])\n                {\n                    case Toast:\n                        this.MpnsHeaders.Add(NotificationClass, ToastClass);\n                        break;\n                    case Tile:\n                        this.MpnsHeaders.Add(NotificationClass, TileClass);\n                        break;\n                }\n            }\n        }        \n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8/Push/Push.cs",
    "content": "﻿//------------------------------------------------------------\n// Copyright (c) Microsoft Corporation.  All rights reserved.\n//------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Threading.Tasks;\n\n    /// <summary>\n    /// Define a class help to create/update/delete notification registrations\n    /// </summary>    \n    public sealed class Push\n    {\n        internal readonly RegistrationManager RegistrationManager;\n\n        /// <summary>\n        /// Creates a Push object for registering for notifications\n        /// </summary>\n        /// <param name=\"client\">The MobileServiceClient to create with.</param>\n        public Push(MobileServiceClient client)\n        {\n            if (client == null)\n            {\n                throw new ArgumentNullException(\"client\");\n            }\n\n            var storageManager = new LocalStorageManager(client.ApplicationUri.Host);\n            var pushHttpClient = new PushHttpClient(client);\n            this.RegistrationManager = new RegistrationManager(pushHttpClient, storageManager);\n        }\n\n        /// <summary>\n        /// Register a particular channelUri\n        /// </summary>\n        /// <param name=\"channelUri\">The channelUri to register</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterNativeAsync(string channelUri)\n        {\n            return this.RegisterNativeAsync(channelUri, null);\n        }\n\n        /// <summary>\n        /// Register a particular channelUri\n        /// </summary>\n        /// <param name=\"channelUri\">The channelUri to register</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterNativeAsync(string channelUri, IEnumerable<string> tags)\n        {\n            if (string.IsNullOrWhiteSpace(channelUri))\n            {\n                throw new ArgumentNullException(\"channelUri\");\n            }\n\n            var registration = new MpnsRegistration(channelUri, tags);\n            return this.RegistrationManager.RegisterAsync(registration);\n        }\n\n        /// <summary>\n        /// Register a particular channelUri with a template\n        /// </summary>\n        /// <param name=\"channelUri\">The channelUri to register</param>\n        /// <param name=\"xmlTemplate\">The XmlDocument defining the template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterTemplateAsync(string channelUri, string xmlTemplate, string templateName)\n        {\n            return this.RegisterTemplateAsync(channelUri, xmlTemplate, templateName, null);\n        }\n\n        /// <summary>\n        /// Register a particular channelUri with a template\n        /// </summary>\n        /// <param name=\"channelUri\">The channelUri to register</param>\n        /// <param name=\"xmlTemplate\">The XmlDocument defining the template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        /// <returns>Task that completes when registration is complete</returns>        \n        public Task RegisterTemplateAsync(string channelUri, string xmlTemplate, string templateName, IEnumerable<string> tags)\n        {\n            if (string.IsNullOrWhiteSpace(channelUri))\n            {\n                throw new ArgumentNullException(\"channelUri\");\n            }\n\n            if (string.IsNullOrWhiteSpace(xmlTemplate))\n            {\n                throw new ArgumentNullException(\"xmlTemplate\");\n            }\n\n            if (string.IsNullOrWhiteSpace(templateName))\n            {\n                throw new ArgumentNullException(\"templateName\");\n            }\n\n            var registration = new MpnsTemplateRegistration(channelUri, xmlTemplate, templateName, tags, null);\n            return this.RegistrationManager.RegisterAsync(registration);\n        }\n\n        /// <summary>\n        /// Unregister any registrations previously registered from this device\n        /// </summary>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterNativeAsync()\n        {\n            return this.UnregisterTemplateAsync(MpnsRegistration.NativeRegistrationName);\n        }\n\n        /// <summary>\n        /// Unregister any registrations with given templateName registered from this device\n        /// </summary>\n        /// <param name=\"templateName\">The template name</param>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterTemplateAsync(string templateName)\n        {\n            return this.RegistrationManager.UnregisterAsync(templateName);\n        }\n\n        /// <summary>\n        /// Unregister any registrations with given channelUri\n        /// </summary>\n        /// <param name=\"channelUri\">The channel Uri</param>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterAllAsync(string channelUri)\n        {\n            if (string.IsNullOrWhiteSpace(channelUri))\n            {\n                throw new ArgumentNullException(\"channelUri\");\n            }\n\n            return this.RegistrationManager.DeleteRegistrationsForChannelAsync(channelUri);\n        }\n\n        /// <summary>\n        /// Register for notifications\n        /// </summary>\n        /// <param name=\"registration\">The object defining the registration</param>\n        /// <returns>Task that will complete when the registration is completed</returns>\n        public Task RegisterAsync(Registration registration)\n        {\n            if (registration == null)\n            {\n                throw new ArgumentNullException(\"registration\");\n            }\n\n            if (string.IsNullOrWhiteSpace(registration.PushHandle))\n            {\n                throw new ArgumentNullException(\"registration.ChannelUri\");\n            }\n\n            return this.RegistrationManager.RegisterAsync(registration);\n        }\n\n        /// <summary>\n        /// DEBUG-ONLY: List the registrations made with the service for a channelUri\n        /// </summary>\n        /// <param name=\"channelUri\">The deviceToken to check for</param>\n        /// <returns>List of registrations</returns>\n        public Task<List<Registration>> ListRegistrationsAsync(string channelUri)\n        {\n            return this.RegistrationManager.ListRegistrationsAsync(channelUri);\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.5.11.0\" newVersion=\"1.5.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.5.11.0\" newVersion=\"1.5.11.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"wp80\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"wp80\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI/Authentication/AuthenticationBroker.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Navigation;\nusing Microsoft.Phone.Controls;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// This class mimics the functionality provided by WebAuthenticationStatus available in Win8.\n    /// </summary>\n    internal enum PhoneAuthenticationStatus\n    {\n        Success = 0,\n\n        UserCancel = 1,\n\n        ErrorHttp = 2\n    }\n\n    /// <summary>\n    /// An AuthenticationBroker for the Windows Phone Platform \n    /// that is like the Windows Store WebAuthenticationBroker \n    /// APIs.\n    /// </summary>\n    internal class AuthenticationBroker : IDisposable\n    {\n        public Uri LoginPageUri { get; set; }\n\n        /// <summary>\n        /// Indicates if authentication is currently in progress or not.\n        /// </summary>\n        public bool AuthenticationInProgress { get; private set; }\n\n        /// <summary>\n        /// The URL that the <see cref=\"AuthenticationBroker\"/> started at\n        /// to begin the authentication flow. \n        /// </summary>\n        public Uri StartUri { get; private set; }\n\n        /// <summary>\n        /// The URL that the <see cref=\"AuthenticationBroker\"/> will use to\n        /// determine if the authentication flow has completed or not.\n        /// </summary>\n        public Uri EndUri { get; private set; }\n\n        private string responseData = \"\";\n        private uint responseErrorDetail = 0;\n        private PhoneAuthenticationStatus responseStatus = PhoneAuthenticationStatus.UserCancel;\n        private AutoResetEvent authenticateFinishedEvent = new AutoResetEvent(false);\n\n        /// <summary>\n        /// Instantiates a new <see cref=\"AuthenticationBroker\"/>.\n        /// </summary>\n        public AuthenticationBroker()\n        {\n            this.LoginPageUri = new Uri(\"/Microsoft.WindowsAzure.Mobile.UI;component/loginpage.xaml\", UriKind.Relative);\n        }\n\n        /// <summary>\n        /// Begins a server-side authentication flow by navigating the WebAuthenticationBroker\n        /// to the <paramref name=\"startUrl\"/>.\n        /// </summary>\n        /// <param name=\"startUrl\">The URL that the browser-based control should \n        /// first navigate to in order to start the authenication flow.\n        /// </param>\n        /// <param name=\"endUrl\">The URL that indicates the authentication flow has \n        /// completed. Upon being redirected to any URL that starts with the \n        /// <paramref name=\"endUrl\"/>, the browser-based control must stop navigating and\n        /// return the response data to the <see cref=\"AuthenticationBroker\"/>.\n        /// </param>\n        /// <param name=\"useSingleSignOn\">Indicates if single sign-on should be used so \n        /// that users do not have to re-enter his/her credentials every time.\n        /// </param>\n        /// <returns>\n        /// The response data from the authentication flow that contains a string of JSON \n        /// that represents a Mobile Services authentication token.\n        /// </returns>\n        /// <exception cref=\"InvalidOperationException\">\n        /// Thrown if the user cancels the authentication flow or an error occurs during\n        /// the authentication flow.\n        /// </exception>\n        public Task<string> AuthenticateAsync(Uri startUrl, Uri endUrl, bool useSingleSignOn)\n        {\n            PhoneApplicationFrame rootFrame = Application.Current.RootVisual as PhoneApplicationFrame;\n\n            if (rootFrame == null)\n            {\n                throw new InvalidOperationException();\n            }\n\n            this.StartUri = startUrl;\n            this.EndUri = endUrl;\n            this.AuthenticationInProgress = true;\n\n            //hook up the broker to the page.\n            LoginPage.Broker = this;\n\n            // Navigate to the login page.\n            rootFrame.Navigate(this.LoginPageUri);\n\n            Task<string> task = Task<string>.Factory.StartNew(() =>\n            {\n                authenticateFinishedEvent.WaitOne();\n                if (this.responseStatus != PhoneAuthenticationStatus.Success)\n                {\n                    string message;\n                    if (this.responseStatus == PhoneAuthenticationStatus.UserCancel)\n                    {\n                        message = \"Authentication was cancelled by the user.\";\n                        throw new InvalidOperationException(message);\n                    }\n                    else\n                    {\n                        message = string.Format(CultureInfo.InvariantCulture,\n                                                \"Authentication failed with HTTP response code {0}.\",\n                                                this.responseErrorDetail);\n                    }\n\n                    throw new InvalidOperationException(message);\n                }\n\n                return GetTokenStringFromResponseData(this.responseData);\n            });\n\n            return task;\n        }\n\n        internal void OnAuthenticationFinished(string data, PhoneAuthenticationStatus status, uint error)\n        {\n            this.responseData = data;\n            this.responseStatus = status;\n            this.responseErrorDetail = error;\n\n            this.AuthenticationInProgress = false;\n\n            // Signal the waiting task that the authentication operation has finished.\n            authenticateFinishedEvent.Set();\n        }\n\n\n        /// <summary>\n        /// Gets the JSON string that represents the Mobile Service authentication token\n        /// from the result of the authentication attempt.\n        /// </summary>\n        /// <param name=\"responseData\">\n        /// The response data returned from the WebAuthenticationBroker.\n        /// </param>\n        /// <returns>\n        /// A JSON string that represents a Mobile Service authentication token.\n        /// </returns>\n        /// <exception cref=\"InvalidOperationException\">\n        /// Thrown if the authentication flow resulted in an error message or an invalid response.\n        /// </exception>\n        private string GetTokenStringFromResponseData(string responseData)\n        {\n            string tokenString = null;\n            if (!string.IsNullOrEmpty(responseData))\n            {\n                tokenString = GetSubStringAfterMatch(responseData, \"#token=\");\n            }\n\n            if (string.IsNullOrEmpty(tokenString))\n            {\n                string message = null;\n                string errorString = GetSubStringAfterMatch(responseData, \"#error=\");\n                if (string.IsNullOrEmpty(errorString))\n                {\n                    message = \"Invalid format of the authentication response.\";\n                }\n                else\n                {\n                    message = string.Format(CultureInfo.InvariantCulture,\n                                            \"Login failed: {0}\",\n                                            errorString);\n                }\n\n                throw new InvalidOperationException(message);\n            }\n\n            return tokenString;\n        }\n\n        /// <summary>\n        /// Returns a substring from the <paramref name=\"stringToSearch\"/> starting from\n        /// the first character after the <paramref name=\"matchString\"/> if the \n        /// <paramref name=\"stringToSearch\"/> contains the <paramref name=\"matchString\"/>;\n        /// otherwise, returns <c>null</c>.\n        /// </summary>\n        /// <param name=\"stringToSearch\">The string to search for the <paramref name=\"matchString\"/>.\n        /// </param>\n        /// <param name=\"matchString\">The string to look for in the <paramref name=\"stringToSearch\"/>\n        /// </param>\n        /// <returns>The substring from <paramref name=\"stringToSearch\"/> that follows the\n        /// <paramref name=\"matchString\"/> if the <paramref name=\"stringToSearch\"/> contains \n        /// the <paramref name=\"matchString\"/>; otherwise, returns <c>null</c>.\n        /// </returns>\n        private string GetSubStringAfterMatch(string stringToSearch, string matchString)\n        {\n            Debug.Assert(stringToSearch != null);\n            Debug.Assert(matchString != null);\n\n            string value = null;\n\n            int index = stringToSearch.IndexOf(matchString);\n            if (index > 0)\n            {\n                value = Uri.UnescapeDataString(stringToSearch.Substring(index + matchString.Length));\n            }\n\n            return value;\n        }\n\n        /// <summary>\n        /// Implemenation of <see cref=\"IDisposable\"/>\n        /// </summary>\n        public void Dispose()\n        {\n            this.Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Implemenation of <see cref=\"IDisposable\"/> for\n        /// derived classes to use.\n        /// </summary>\n        /// <param name=\"disposing\">\n        /// Indicates if being called from the Dispose() method\n        /// or the finalizer.\n        /// </param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                // free managed resources\n                if (this.authenticateFinishedEvent != null)\n                {\n                    this.authenticateFinishedEvent.Dispose();\n                    this.authenticateFinishedEvent = null;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI/LoginPage.xaml",
    "content": "﻿<!--\n**********************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\n**********************************************************\n-->\n<phone:PhoneApplicationPage\n    x:Class=\"Microsoft.WindowsAzure.MobileServices.LoginPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"PortraitOrLandscape\" Orientation=\"Portrait\"\n    mc:Ignorable=\"d\"\n    shell:SystemTray.IsVisible=\"True\"\n    shell:SystemTray.Opacity=\"0\"\n    shell:SystemTray.BackgroundColor=\"Transparent\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <ProgressBar \n            x:Name=\"progress\"  \n            IsIndeterminate=\"True\" />\n        <phone:WebBrowser \n            x:Name=\"browserControl\" \n            IsScriptEnabled=\"True\" \n            Visibility=\"Collapsed\" />\n    </Grid>\n\n</phone:PhoneApplicationPage>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI/LoginPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Windows.Navigation;\nusing Microsoft.Phone.Controls;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Third-party provider authentication control for the Windows Phone platform.\n    /// </summary>\n    public partial class LoginPage : PhoneApplicationPage\n    {\n        private string responseData = \"\";\n        private uint responseErrorDetail = 0;\n        private PhoneAuthenticationStatus responseStatus = PhoneAuthenticationStatus.UserCancel;\n\n        // We need to keep this state to make sure we do the right thing even during\n        // normal phone navigation actions (such as going to start screen and back).\n        private bool authenticationStarted = false;\n        private bool authenticationFinished = false;\n\n        /// <summary>\n        /// The AuthenticationBroker associated with the current Login action.\n        /// </summary>\n        internal static AuthenticationBroker Broker { get; set; }\n\n        /// <summary>\n        /// Initiatlizes the page by hooking up some event handlers.\n        /// </summary>\n        public LoginPage()\n        {\n            InitializeComponent();\n\n            BackKeyPress += LoginPage_BackKeyPress;\n            browserControl.Navigating += BrowserControl_Navigating;\n            browserControl.LoadCompleted += BrowserControl_LoadCompleted;\n            browserControl.NavigationFailed += BrowserControl_NavigationFailed;\n        }\n\n        /// <summary>\n        /// Handler for the browser control's load completed event.  We use this to detect when\n        /// to hide the progress bar and show the browser control.\n        /// </summary>\n        void BrowserControl_LoadCompleted(object sender, NavigationEventArgs e)\n        {\n            HideProgressBar();\n#if DEBUG\n            // For test automation purposes, we can register some scripts in the app's isolated storage\n            // which can \"automatically\" login in the providers. This way we can have an unattended test run.\n            bool testMode;\n            string loginScript;\n            if (System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.TryGetValue<bool>(\"testMode\", out testMode) &&\n                testMode &&\n                System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.TryGetValue<string>(\"loginScript\", out loginScript) &&\n                !string.IsNullOrEmpty(loginScript))\n            {\n                browserControl.InvokeScript(\"eval\", loginScript);\n            }\n#endif\n        }\n\n        /// <summary>\n        /// Initiates the authentication operation by pointing the browser control\n        /// to the PhoneWebAuthenticationBroker.StartUri.  If the PhoneWebAuthenticationBroker\n        /// isn't currently in the middle of an authentication operation, then we immediately\n        /// navigate back.\n        /// </summary>\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            base.OnNavigatedTo(e);\n\n            if (Broker == null)\n            {\n                throw new InvalidOperationException(string.Format(\"This page must be called from the type '{0}'.\",\n                    typeof(AuthenticationBroker).FullName));\n            }\n\n            // Make sure that there is an authentication operation in progress.\n            // If not, we'll navigate back to the previous page.\n            if (!Broker.AuthenticationInProgress)\n            {\n                this.NavigationService.GoBack();\n            }\n\n            if (!authenticationStarted)\n            {\n                authenticationStarted = true;\n                authenticationFinished = false;\n\n                // Point the browser control to the authentication start page.\n                browserControl.Source = Broker.StartUri;\n            }\n        }\n\n        /// <summary>\n        /// Updates the PhoneWebAuthenticationBroker on the state of the authentication\n        /// operation.  If we navigated back by pressing the back key, then the operation\n        /// will be canceled.  If the browser control successfully completed the operation,\n        /// signaled by its navigating to the PhoneWebAuthenticationBroker.EndUri, then we\n        /// pass the results on.\n        /// </summary>\n        protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)\n        {\n            // If there is an active authentication operation in progress and we have\n            // finished, then we need to inform the authentication broker of the results.\n            // We don't want to stop the operation prematurely, such as when navigating to\n            // the start screen.\n            if (Broker.AuthenticationInProgress && authenticationFinished)\n            {\n                authenticationStarted = false;\n                authenticationFinished = false;\n\n                Broker.OnAuthenticationFinished(responseData, responseStatus, responseErrorDetail);\n            }\n        }\n\n        /// <summary>\n        /// Handler for the page's back key events.  We use this to determine whether navigations\n        /// away from this page are benign (such as going to the start screen) or actually meant\n        /// to cancel the operation.\n        /// </summary>\n        void LoginPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            ShowProgressBar();\n\n            responseData = \"\";\n            responseStatus = PhoneAuthenticationStatus.UserCancel;\n\n            authenticationFinished = true;\n        }\n\n        /// <summary>\n        /// Handler for the browser control's navigating event.  We use this to detect when login\n        /// has completed.\n        /// </summary>\n        private void BrowserControl_Navigating(object sender, NavigatingEventArgs e)\n        {\n            if (e.Uri == Broker.EndUri)\n            {\n                responseData = e.Uri.ToString();\n                responseStatus = PhoneAuthenticationStatus.Success;\n\n                authenticationFinished = true;\n\n                // Navigate back now.\n                ShowProgressBar();\n                NavigationService.GoBack();\n            }\n        }\n\n        /// <summary>\n        /// Handler for the browser control's navigation failed event.  We use this to detect errors\n        /// </summary>\n        private void BrowserControl_NavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            WebBrowserNavigationException navEx = e.Exception as WebBrowserNavigationException;\n\n            if (navEx != null)\n            {\n                // Pass along the provided error information.\n                responseErrorDetail = (uint)navEx.StatusCode;\n            }\n            else\n            {\n                // No error information available.\n                responseErrorDetail = 0;\n            }\n            responseStatus = PhoneAuthenticationStatus.ErrorHttp;\n\n            authenticationFinished = true;\n            e.Handled = true;\n\n            // Navigate back now.\n            ShowProgressBar();\n            NavigationService.GoBack();\n        }\n\n        /// <summary>\n        /// Shows the progress bar and hides the browser control.\n        /// </summary>\n        private void ShowProgressBar()\n        {\n            browserControl.Visibility = System.Windows.Visibility.Collapsed;\n            progress.Visibility = System.Windows.Visibility.Visible;\n        }\n\n        /// <summary>\n        /// Hides the progress bar and shows the browser control.\n        /// </summary>\n        private void HideProgressBar()\n        {\n            browserControl.Visibility = System.Windows.Visibility.Visible;\n            progress.Visibility = System.Windows.Visibility.Collapsed;\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI/Microsoft.WindowsAzure.Mobile.UI.WP8.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),Microsoft.WindowsAzure.Mobile.Build.msbuild))\\tools\\Microsoft.WindowsAzure.Mobile.Build.settings.targets\" Condition=\"$(CmdLine) != ''\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <OutputPath Condition=\" '$(OutputPath)' == '' \">bin\\$(Configuration)</OutputPath>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}</ProjectGuid>\n    <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.UI</AssemblyName>\n    <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>\n    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>\n    <SilverlightApplication>false</SilverlightApplication>\n    <ValidateXaml>true</ValidateXaml>\n    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>\n    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <RunCodeAnalysis>false</RunCodeAnalysis>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>$(OutputPath)\\Microsoft.WindowsAzure.Mobile.UI.xml</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Authentication\\MobileServiceUIAuthentication.cs\">\n      <Link>Authentication\\MobileServiceUIAuthentication.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Extensions\\MobileServiceClientExtensions.cs\">\n      <Link>Extensions\\MobileServiceClientExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"LoginPage.xaml.cs\">\n      <DependentUpon>LoginPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Authentication\\AuthenticationBroker.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8\\Microsoft.WindowsAzure.Mobile.Ext.WP8.csproj\">\n      <Project>{EB3834A2-3C20-4F39-BEE9-87DFCAB81670}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.WP8</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-E36E-4190-8714-5BD2665859FB}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Page Include=\"LoginPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System.Net.Http, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets\" />\n  <ProjectExtensions />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Resources;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.UI\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Microsoft Corporation\")]\n[assembly: AssemblyProduct(\"Microsoft Azure Mobile Services SDK\")]\n[assembly: AssemblyCopyright(\"© Microsoft Corporation. All rights reserved.\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"b1cca4c2-dedf-43af-b54d-067c5ac6a391\")]\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.5.11.0\" newVersion=\"1.5.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.5.11.0\" newVersion=\"1.5.11.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"wp80\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone81/Authentication/AuthenticationBroker.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing Windows.ApplicationModel.Activation;\nusing Windows.Security.Authentication.Web;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// AuthenticationBroker for the Windows Store Platform that uses the Windows Store\n    /// <see cref=\"WebAuthenticationBroker\"/> APIs.\n    /// </summary>\n    internal class AuthenticationBroker\n    {\n        static private TaskCompletionSource<string> pendingLoginTask;\n\n        /// <summary>\n        /// Begins a server-side authentication flow by navigating the \n        /// <see cref=\"WebAuthenticationBroker\"/> to the <paramref name=\"startUrl\"/>.\n        /// </summary>\n        /// <param name=\"startUrl\">The URL that the browser-based control should \n        /// first navigate to in order to start the authenication flow.\n        /// </param>\n        /// <param name=\"endUrl\">The URL that indicates the authentication flow has \n        /// completed. Upon being redirected to any URL that starts with the \n        /// endUrl, the browser-based control must stop navigating and\n        /// return the response data to the <see cref=\"AuthenticationBroker\"/>.\n        /// </param>\n        /// <param name=\"useSingleSignOn\">Indicates if single sign-on should be used so \n        /// that users do not have to re-enter his/her credentials every time.\n        /// </param>\n        /// <returns>\n        /// The response data from the authentication flow that contains a string of JSON \n        /// that represents a Mobile Services authentication token.\n        /// </returns>\n        /// <exception cref=\"InvalidOperationException\">\n        /// Thrown if the user cancels the authentication flow or an error occurs during\n        /// the authentication flow.\n        /// </exception>\n        public Task<string> AuthenticateAsync(Uri startUrl, Uri endUrl, bool useSingleSignOn)\n        {\n            return AuthenticateWithBroker(startUrl, endUrl, useSingleSignOn);\n        }\n\n        public void AuthenticationComplete(WebAuthenticationResult result)\n        {\n            if (pendingLoginTask == null)\n            {\n                throw new InvalidOperationException(\"Authentication has not been started.\");\n            }\n\n            if (result.ResponseStatus != WebAuthenticationStatus.Success)\n            {\n                string message;\n                if (result.ResponseStatus == WebAuthenticationStatus.UserCancel)\n                {\n                    message = \"Authentication was cancelled by the user.\";\n                }\n                else\n                {\n                    message = string.Format(CultureInfo.InvariantCulture,\n                                            \"Authentication failed with HTTP response code {0}.\",\n                                            result.ResponseErrorDetail);\n                }\n                pendingLoginTask.SetException(new InvalidOperationException(message));                \n            }\n            else\n            {\n                string tokenString = GetTokenStringFromResult(result);\n                pendingLoginTask.SetResult(tokenString);\n            }\n\n            pendingLoginTask = null;            \n        }\n\n        /// <summary>\n        /// Begins a server-side authentication flow by navigating the \n        /// <see cref=\"WebAuthenticationBroker\"/> to the <paramref name=\"startUrl\"/>.\n        /// Considers if the <paramref name=\"useSingleSignOn\"/> is being used and calls the\n        /// correct overload of the <see cref=\"WebAuthenticationBroker\"/>.\n        /// </summary>\n        /// <param name=\"startUrl\">The URL that the browser-based control should \n        /// first navigate to in order to start the authenication flow.\n        /// </param>\n        /// <param name=\"endUrl\">The URL that indicates the authentication flow has \n        /// completed. Upon being redirected to any URL that starts with the \n        /// <paramref name=\"endUrl\"/>, the browser-based control must stop navigating and\n        /// return the response data to the <see cref=\"AuthenticationBroker\"/>.\n        /// </param>\n        /// <param name=\"useSingleSignOn\">Indicates if single sign-on should be used so \n        /// that users do not have to re-enter his/her credentials every time.\n        /// </param>\n        /// <returns>\n        /// The <see cref=\"WebAuthenticationResult\"/> returned by the \n        /// <see cref=\"WebAuthenticationBroker\"/>.\n        /// </returns>\n        private Task<string> AuthenticateWithBroker(Uri startUrl, Uri endUrl, bool useSingleSignOn)\n        {\n            Debug.Assert(startUrl != null);\n            Debug.Assert(endUrl != null);\n\n            if (pendingLoginTask != null)\n            {\n                throw new InvalidOperationException(\"Authentication is already in progress.\");\n            }\n\n            pendingLoginTask = new TaskCompletionSource<string>();\n\n            if (useSingleSignOn)\n            {\n                Uri ssoEndUri = WebAuthenticationBroker.GetCurrentApplicationCallbackUri();\n                Uri ssoStartUrl = GetUrlWithQueryStringParameter(startUrl, \"sso_end_uri\", ssoEndUri.AbsoluteUri);\n                WebAuthenticationBroker.AuthenticateAndContinue(ssoStartUrl, null, null, WebAuthenticationOptions.None);\n            }\n            else\n            {\n                WebAuthenticationBroker.AuthenticateAndContinue(startUrl, endUrl, null, WebAuthenticationOptions.None);\n            }\n\n            return pendingLoginTask.Task;\n        }\n\n        /// <summary>\n        /// Gets the JSON string that represents the Mobile Service authentication token\n        /// from the <see cref=\"WebAuthenticationResult\"/>.\n        /// </summary>\n        /// <param name=\"result\">The <see cref=\"WebAuthenticationResult\"/> returned\n        /// from the <see cref=\"WebAuthenticationBroker\"/>.</param>\n        /// <returns>\n        /// A JSON string that represents a Mobile Service authentication token.\n        /// </returns>\n        /// <exception cref=\"InvalidOperationException\">\n        /// Thrown if the authentication flow resulted in an error message or an invalid response.\n        /// </exception>\n        private string GetTokenStringFromResult(WebAuthenticationResult result)\n        {\n            Debug.Assert(result != null);\n            Debug.Assert(result.ResponseStatus == WebAuthenticationStatus.Success);\n\n            string tokenString = null;\n\n            string responseData = result.ResponseData;\n            if (!string.IsNullOrEmpty(responseData))\n            {\n                tokenString = GetSubStringAfterMatch(responseData, \"#token=\");\n            }\n\n            if (string.IsNullOrEmpty(tokenString))\n            {\n                string message = null;\n                string errorString = GetSubStringAfterMatch(responseData, \"#error=\");\n                if (string.IsNullOrEmpty(errorString))\n                {\n                    message = \"Invalid format of the authentication response.\";\n                }\n                else\n                {\n                    message = string.Format(CultureInfo.InvariantCulture,\n                                            \"Login failed: {0}\",\n                                            errorString);\n                }\n\n                throw new InvalidOperationException(message);\n            }\n\n            return tokenString;\n        }\n\n        /// <summary>\n        /// Returns a substring from the <paramref name=\"stringToSearch\"/> starting from\n        /// the first character after the <paramref name=\"matchString\"/> if the \n        /// <paramref name=\"stringToSearch\"/> contains the <paramref name=\"matchString\"/>;\n        /// otherwise, returns <c>null</c>.\n        /// </summary>\n        /// <param name=\"stringToSearch\">The string to search for the <paramref name=\"matchString\"/>.\n        /// </param>\n        /// <param name=\"matchString\">The string to look for in the <paramref name=\"stringToSearch\"/>\n        /// </param>\n        /// <returns>The substring from <paramref name=\"stringToSearch\"/> that follows the\n        /// <paramref name=\"matchString\"/> if the <paramref name=\"stringToSearch\"/> contains \n        /// the <paramref name=\"matchString\"/>; otherwise, returns <c>null</c>.\n        /// </returns>\n        private string GetSubStringAfterMatch(string stringToSearch, string matchString)\n        {\n            Debug.Assert(stringToSearch != null);\n            Debug.Assert(matchString != null);\n\n            string value = null;\n\n            int index = stringToSearch.IndexOf(matchString);\n            if (index > 0)\n            {\n                value = Uri.UnescapeDataString(stringToSearch.Substring(index + matchString.Length));\n            }\n\n            return value;\n        }\n\n        /// <summary>\n        /// Returns a URL that is equivalent to the <paramref name=\"url\"/> provided but which\n        /// includes in the query string of the URL the <paramref name=\"queryParameter\"/>\n        /// with the value given by <paramref name=\"queryValue\"/>.\n        /// </summary>\n        /// <param name=\"url\">The URL to add the query string parameter and value to.\n        /// </param>\n        /// <param name=\"queryParameter\">The name of the query string parameter to add to \n        /// the URL.\n        /// </param>\n        /// <param name=\"queryValue\">The value of the query string parameter to add to the URL.\n        /// </param>\n        /// <returns>\n        /// A URL that is equivalent to the <paramref name=\"url\"/> provided but which\n        /// includes in the query string of the URL the <paramref name=\"queryParameter\"/>\n        /// with the value given by <paramref name=\"queryValue\"/>.\n        /// </returns>\n        private Uri GetUrlWithQueryStringParameter(Uri url, string queryParameter, string queryValue)\n        {\n            Debug.Assert(url != null);\n            Debug.Assert(queryParameter != null);\n            Debug.Assert(queryValue != null);\n\n            string queryParameterEscaped = Uri.EscapeDataString(queryParameter);\n            string queryValueEscaped = Uri.EscapeDataString(queryValue);\n\n            UriBuilder uriBuilder = new UriBuilder(url);\n            \n            string query = uriBuilder.Query;\n            if (string.IsNullOrEmpty(query))\n            {\n                query = string.Format(CultureInfo.InvariantCulture,\n                                      \"{0}={1}\",\n                                      queryParameterEscaped,\n                                      queryValueEscaped);\n            }\n            else\n            {\n                query = string.Format(CultureInfo.InvariantCulture,\n                                      \"{0}&{1}={2}\",\n                                      query,\n                                      queryParameterEscaped,\n                                      queryValueEscaped);\n            }\n\n            uriBuilder.Query = query;\n\n            return uriBuilder.Uri;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone81/Extensions/MobileServiceClientExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Windows.ApplicationModel.Activation;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Extension methods for UI-based login.\n    /// </summary>\n    public static class MobileServiceClientExtensions\n    {\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The client.\n        /// </param>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, MobileServiceAuthenticationProvider provider)\n        {\n            return LoginAsync(client, provider.ToString());\n        }\n\n        /// <summary>\n        /// Finishes the login process initiated by the LoginAsync() call, should be called from the App OnActivated event\n        /// when it is triggered due to the Web Authentication Broker\n        /// </summary>\n        /// <param name=\"client\">\n        /// The client.\n        /// </param> \n        /// <param name=\"result\">\n        /// Result from the Web Authentication Broker \n        /// </param>\n        /// <returns>\n        /// Logged in mobile user\n        /// </returns>\n        public static void LoginComplete(this IMobileServiceClient client, WebAuthenticationBrokerContinuationEventArgs result)\n        {\n            AuthenticationBroker authBroker = new AuthenticationBroker();\n\n            authBroker.AuthenticationComplete(result.WebAuthenticationResult);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The client.\n        /// </param>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, string provider)\n        {\n            return LoginAsync(client, provider, parameters: null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The client.\n        /// </param>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, string provider, IDictionary<string, string> parameters)\n        {\n            MobileServiceUIAuthentication auth = new MobileServiceUIAuthentication(client, provider, parameters);\n\n            return auth.LoginAsync();\n        }\n\n        /// <summary>\n        /// Extension method to get a <see cref=\"Push\"/> object made from an existing <see cref=\"MobileServiceClient\"/>.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The <see cref=\"MobileServiceClient\"/> to create with.\n        /// </param>\n        /// <returns>\n        /// The <see cref=\"Push\"/> object used for registering for notifications.\n        /// </returns>\n        public static Push GetPush(this MobileServiceClient client)\n        {\n            return new Push(client);\n        }\n    }\n}\n\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone81/Microsoft.WindowsAzure.Mobile.Ext.WP81.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),Microsoft.WindowsAzure.Mobile.Build.msbuild))\\tools\\Microsoft.WindowsAzure.Mobile.Build.settings.targets\" Condition=\"$(CmdLine) != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <OutputPath Condition=\" '$(OutputPath)' == '' \">bin\\$(Configuration)</OutputPath>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{02EEF75A-D824-4203-B243-C1B97B0D35A9}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Ext</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformVersion>8.1</TargetPlatformVersion>\n    <MinimumVisualStudioVersion>12</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{76F1466A-8B6D-4E39-A767-685A06062A39};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>$(OutputPath)\\Microsoft.WindowsAzure.Mobile.Ext.xml</DocumentationFile>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Authentication\\MobileServiceSingleSignOnAuthentication.cs\">\n      <Link>Authentication\\MobileServiceSingleSignOnAuthentication.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Authentication\\MobileServiceUIAuthentication.cs\">\n      <Link>Authentication\\MobileServiceUIAuthentication.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Collections\\MobileServiceIncrementalLoadingCollection.cs\">\n      <Link>Collections\\MobileServiceIncrementalLoadingCollection.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\ExpressionUtility\\PartialEvaluator.cs\">\n      <Link>ExpressionUtility\\PartialEvaluator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\ExpressionUtility\\VisitorHelper.cs\">\n      <Link>ExpressionUtility\\VisitorHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Extensions\\MobileServiceIncrementalLoadingCollectionExtensions.cs\">\n      <Link>Extensions\\MobileServiceIncrementalLoadingCollectionExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Extensions\\SingleSignOnExtensions.cs\">\n      <Link>Extensions\\SingleSignOnExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Platform\\CurrentPlatform.cs\">\n      <Link>Platform\\CurrentPlatform.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Platform\\ExpressionUtility.cs\">\n      <Link>Platform\\ExpressionUtility.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Platform\\PushUtility.cs\">\n      <Link>Platform\\PushUtility.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Push\\Push.cs\">\n      <Link>Push\\Push.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Push\\WnsRegistration.cs\">\n      <Link>Push\\WnsRegistration.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Push\\WnsTemplateRegistration.cs\">\n      <Link>Push\\WnsTemplateRegistration.cs</Link>\n    </Compile>\n    <Compile Include=\"Authentication\\AuthenticationBroker.cs\" />\n    <Compile Include=\"Extensions\\MobileServiceClientExtensions.cs\" />\n    <Compile Include=\"Platform\\ApplicationStorage.cs\" />\n    <Compile Include=\"Platform\\PlatformInformation.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\wpa81\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\wpa81\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '12.0' \">\n    <VisualStudioVersion>12.0</VisualStudioVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(TargetPlatformIdentifier)' == '' \">\n    <TargetPlatformIdentifier>WindowsPhoneApp</TargetPlatformIdentifier>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\$(TargetPlatformVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone81/Platform/ApplicationStorage.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nusing Windows.Foundation.Collections;\nusing Windows.Storage;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An implementation of the <see cref=\"IApplicationStorage\"/> interface\n    /// for the Windows Store Platform that uses the Windows Store\n    /// <see cref=\"ApplicationData\"/> APIs.\n    /// </summary>\n    internal class ApplicationStorage : IApplicationStorage\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"IApplicationStorage\"/>.\n        /// </summary>\n        private static readonly IApplicationStorage instance = new ApplicationStorage();\n\n        private ApplicationStorage()\n        {\n            this.Values = ApplicationData.Current.LocalSettings.Values;\n        }\n\n        internal ApplicationStorage(string name)\n        {\n            this.Values = ApplicationData.Current.LocalSettings.CreateContainer(name, ApplicationDataCreateDisposition.Always).Values;\n        }\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"IApplicationStorage\"/>.\n        /// </summary>\n        internal static IApplicationStorage Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        public IPropertySet Values { get; set; }\n        \n        /// <summary>\n        /// Tries to read a setting's value from application storage. \n        /// </summary>\n        /// <param name=\"name\">The name of the setting to try to read.\n        /// </param>\n        /// <param name=\"value\">Upon returning, if the return value was <c>true</c>, \n        /// will be the value of the given setting; will be <c>null</c> otherwise.\n        /// </param>\n        /// <returns>\n        /// <c>true</c> if the setting existed and was successfully read; <c>false</c> otherwise.\n        /// </returns>\n        /// <exception cref=\"ArgumentException\">\n        /// Thrown if the setting name is <c>null</c> or whitespace.\n        /// </exception>\n        bool IApplicationStorage.TryReadSetting(string name, out object value)\n        {\n            if (string.IsNullOrWhiteSpace(name))\n            {\n                string message = \"An application setting name must be provided. Null, empty or whitespace only names are not allowed.\";\n                throw new ArgumentException(message);\n            }\n\n            return this.Values.TryGetValue(name, out value);\n        }\n\n        /// <summary>\n        /// Writes the setting's value to application storage.\n        /// </summary>\n        /// <param name=\"name\">The name of the setting to write.\n        /// </param>\n        /// <param name=\"value\">The value to write.\n        /// </param>\n        /// <exception cref=\"ArgumentException\">\n        /// Thrown if the setting name is <c>null</c> or empty.\n        /// </exception>\n        /// <exception cref=\"InvalidOperationException\">\n        /// Thrown if an error occurs while writing the setting.\n        /// </exception>\n        void IApplicationStorage.WriteSetting(string name, object value)\n        {\n            if (string.IsNullOrWhiteSpace(name))\n            {\n                string message = \"An application setting name must be provided. Null, empty or whitespace only names are not allowed.\";\n                throw new ArgumentException(message);\n            }\n\n            this.Values[name] = value;\n        }\n\n        public void Save()\n        {\n            // This operation is a no-op on Windows 8\n        }        \n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone81/Platform/PlatformInformation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Linq;\nusing System.Reflection;\nusing Windows.ApplicationModel;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Implements the <see cref=\"IPlatform\"/> interface for the Windows\n    /// Store platform.\n    /// </summary>\n    internal class PlatformInformation : IPlatformInformation\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"IPlatformInformation\"/>.\n        /// </summary>\n        private static readonly IPlatformInformation instance = new PlatformInformation();\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"IPlatformInformation\"/>.\n        /// </summary>\n        public static IPlatformInformation Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        /// <summary>\n        /// The architecture of the platform.\n        /// </summary>\n        public string OperatingSystemArchitecture\n        {\n            get\n            {\n                return Package.Current.Id.Architecture.ToString();\n            }\n        }\n\n        /// <summary>\n        /// The name of the operating system of the platform.\n        /// </summary>\n        public string OperatingSystemName\n        {\n            get\n            {\n                return \"Windows Phone 81\";\n            }\n        }\n\n        /// <summary>\n        /// The version of the operating system of the platform.\n        /// </summary>\n        public string OperatingSystemVersion\n        {\n            get\n            {\n                return Platform.UnknownValueString;\n            }\n        }\n\n        /// <summary>\n        /// Indicated whether the device is an emulator or not\n        /// </summary>\n        public bool IsEmulator\n        {\n            get\n            {\n                return false;\n            }\n        }\n\n        public string Version\n        {\n            get\n            {\n                return this.GetVersionFromAssemblyFileVersion();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone81/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.Ext\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Microsoft Corporation\")]\n[assembly: AssemblyProduct(\"Microsoft Azure Mobile Services SDK\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.1.0.0\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]\n[assembly: GuidAttribute(\"02EEF75A-D824-4203-B243-C1B97B0D35A9\")]\n#if Sign\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Win8.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n#else\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.WP81.Test\")]\n#endif\n\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone81/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n\t<runtime>\n\t\t<assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"System.Threading.Tasks\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n\t\t\t</dependentAssembly>\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"System.IO\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n\t\t\t</dependentAssembly>\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"System.Runtime\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n\t\t\t</dependentAssembly>\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n\t\t\t</dependentAssembly>\n\t\t</assemblyBinding>\n\t</runtime>\n</configuration>\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone81/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"wpa81\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"wpa81\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"wpa81\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"wpa81\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\"/>\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-4.2.19.0\" newVersion=\"4.2.19.0\"/>\n\t\t\t</dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Authentication/AuthenticationBroker.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing Windows.Security.Authentication.Web;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// AuthenticationBroker for the Windows Store Platform that uses the Windows Store\n    /// <see cref=\"WebAuthenticationBroker\"/> APIs.\n    /// </summary>\n    internal class AuthenticationBroker\n    {\n        /// <summary>\n        /// Begins a server-side authentication flow by navigating the \n        /// <see cref=\"WebAuthenticationBroker\"/> to the <paramref name=\"startUrl\"/>.\n        /// </summary>\n        /// <param name=\"startUrl\">The URL that the browser-based control should \n        /// first navigate to in order to start the authenication flow.\n        /// </param>\n        /// <param name=\"endUrl\">The URL that indicates the authentication flow has \n        /// completed. Upon being redirected to any URL that starts with the \n        /// endUrl, the browser-based control must stop navigating and\n        /// return the response data to the <see cref=\"AuthenticationBroker\"/>.\n        /// </param>\n        /// <param name=\"useSingleSignOn\">Indicates if single sign-on should be used so \n        /// that users do not have to re-enter his/her credentials every time.\n        /// </param>\n        /// <returns>\n        /// The response data from the authentication flow that contains a string of JSON \n        /// that represents a Mobile Services authentication token.\n        /// </returns>\n        /// <exception cref=\"InvalidOperationException\">\n        /// Thrown if the user cancels the authentication flow or an error occurs during\n        /// the authentication flow.\n        /// </exception>\n        public async Task<string> AuthenticateAsync(Uri startUrl, Uri endUrl, bool useSingleSignOn)\n        {\n            WebAuthenticationResult result = await AuthenticateWithBroker(startUrl, endUrl, useSingleSignOn);\n\n            if (result.ResponseStatus != WebAuthenticationStatus.Success)\n            {\n                string message;\n                if (result.ResponseStatus == WebAuthenticationStatus.UserCancel)\n                {\n                    message = \"Authentication was cancelled by the user.\";\n                }\n                else\n                {\n                    message = string.Format(CultureInfo.InvariantCulture, \n                                            \"Authentication failed with HTTP response code {0}.\", \n                                            result.ResponseErrorDetail); \n                }\n\n                throw new InvalidOperationException(message);\n            }\n\n            return GetTokenStringFromResult(result);\n        }\n\n        /// <summary>\n        /// Begins a server-side authentication flow by navigating the \n        /// <see cref=\"WebAuthenticationBroker\"/> to the <paramref name=\"startUrl\"/>.\n        /// Considers if the <paramref name=\"useSingleSignOn\"/> is being used and calls the\n        /// correct overload of the <see cref=\"WebAuthenticationBroker\"/>.\n        /// </summary>\n        /// <param name=\"startUrl\">The URL that the browser-based control should \n        /// first navigate to in order to start the authenication flow.\n        /// </param>\n        /// <param name=\"endUrl\">The URL that indicates the authentication flow has \n        /// completed. Upon being redirected to any URL that starts with the \n        /// <paramref name=\"endUrl\"/>, the browser-based control must stop navigating and\n        /// return the response data to the <see cref=\"AuthenticationBroker\"/>.\n        /// </param>\n        /// <param name=\"useSingleSignOn\">Indicates if single sign-on should be used so \n        /// that users do not have to re-enter his/her credentials every time.\n        /// </param>\n        /// <returns>\n        /// The <see cref=\"WebAuthenticationResult\"/> returned by the \n        /// <see cref=\"WebAuthenticationBroker\"/>.\n        /// </returns>\n        private async Task<WebAuthenticationResult> AuthenticateWithBroker(Uri startUrl, Uri endUrl, bool useSingleSignOn)\n        {\n            Debug.Assert(startUrl != null);\n            Debug.Assert(endUrl != null);\n\n            WebAuthenticationResult result = null;\n            if (useSingleSignOn)\n            {\n                Uri ssoEndUri = WebAuthenticationBroker.GetCurrentApplicationCallbackUri();\n                Uri ssoStartUrl = GetUrlWithQueryStringParameter(startUrl, \"sso_end_uri\", ssoEndUri.AbsoluteUri);\n                result = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, ssoStartUrl);\n            }\n            else\n            {\n                result = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, startUrl, endUrl);\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// Gets the JSON string that represents the Mobile Service authentication token\n        /// from the <see cref=\"WebAuthenticationResult\"/>.\n        /// </summary>\n        /// <param name=\"result\">The <see cref=\"WebAuthenticationResult\"/> returned\n        /// from the <see cref=\"WebAuthenticationBroker\"/>.</param>\n        /// <returns>\n        /// A JSON string that represents a Mobile Service authentication token.\n        /// </returns>\n        /// <exception cref=\"InvalidOperationException\">\n        /// Thrown if the authentication flow resulted in an error message or an invalid response.\n        /// </exception>\n        private string GetTokenStringFromResult(WebAuthenticationResult result)\n        {\n            Debug.Assert(result != null);\n            Debug.Assert(result.ResponseStatus == WebAuthenticationStatus.Success);\n\n            string tokenString = null;\n\n            string responseData = result.ResponseData;\n            if (!string.IsNullOrEmpty(responseData))\n            {\n                tokenString = GetSubStringAfterMatch(responseData, \"#token=\");\n            }\n\n            if (string.IsNullOrEmpty(tokenString))\n            {\n                string message = null;\n                string errorString = GetSubStringAfterMatch(responseData, \"#error=\");\n                if (string.IsNullOrEmpty(errorString))\n                {\n                    message = \"Invalid format of the authentication response.\";\n                }\n                else\n                {\n                    message = string.Format(CultureInfo.InvariantCulture,\n                                            \"Login failed: {0}\",\n                                            errorString);\n                }\n\n                throw new InvalidOperationException(message);\n            }\n\n            return tokenString;\n        }\n\n        /// <summary>\n        /// Returns a substring from the <paramref name=\"stringToSearch\"/> starting from\n        /// the first character after the <paramref name=\"matchString\"/> if the \n        /// <paramref name=\"stringToSearch\"/> contains the <paramref name=\"matchString\"/>;\n        /// otherwise, returns <c>null</c>.\n        /// </summary>\n        /// <param name=\"stringToSearch\">The string to search for the <paramref name=\"matchString\"/>.\n        /// </param>\n        /// <param name=\"matchString\">The string to look for in the <paramref name=\"stringToSearch\"/>\n        /// </param>\n        /// <returns>The substring from <paramref name=\"stringToSearch\"/> that follows the\n        /// <paramref name=\"matchString\"/> if the <paramref name=\"stringToSearch\"/> contains \n        /// the <paramref name=\"matchString\"/>; otherwise, returns <c>null</c>.\n        /// </returns>\n        private string GetSubStringAfterMatch(string stringToSearch, string matchString)\n        {\n            Debug.Assert(stringToSearch != null);\n            Debug.Assert(matchString != null);\n\n            string value = null;\n\n            int index = stringToSearch.IndexOf(matchString);\n            if (index > 0)\n            {\n                value = Uri.UnescapeDataString(stringToSearch.Substring(index + matchString.Length));\n            }\n\n            return value;\n        }\n\n        /// <summary>\n        /// Returns a URL that is equivalent to the <paramref name=\"url\"/> provided but which\n        /// includes in the query string of the URL the <paramref name=\"queryParameter\"/>\n        /// with the value given by <paramref name=\"queryValue\"/>.\n        /// </summary>\n        /// <param name=\"url\">The URL to add the query string parameter and value to.\n        /// </param>\n        /// <param name=\"queryParameter\">The name of the query string parameter to add to \n        /// the URL.\n        /// </param>\n        /// <param name=\"queryValue\">The value of the query string parameter to add to the URL.\n        /// </param>\n        /// <returns>\n        /// A URL that is equivalent to the <paramref name=\"url\"/> provided but which\n        /// includes in the query string of the URL the <paramref name=\"queryParameter\"/>\n        /// with the value given by <paramref name=\"queryValue\"/>.\n        /// </returns>\n        private Uri GetUrlWithQueryStringParameter(Uri url, string queryParameter, string queryValue)\n        {\n            Debug.Assert(url != null);\n            Debug.Assert(queryParameter != null);\n            Debug.Assert(queryValue != null);\n\n            string queryParameterEscaped = Uri.EscapeDataString(queryParameter);\n            string queryValueEscaped = Uri.EscapeDataString(queryValue);\n\n            UriBuilder uriBuilder = new UriBuilder(url);\n            \n            string query = uriBuilder.Query;\n            if (string.IsNullOrEmpty(query))\n            {\n                query = string.Format(CultureInfo.InvariantCulture,\n                                      \"{0}={1}\",\n                                      queryParameterEscaped,\n                                      queryValueEscaped);\n            }\n            else\n            {\n                query = string.Format(CultureInfo.InvariantCulture,\n                                      \"{0}&{1}={2}\",\n                                      query,\n                                      queryParameterEscaped,\n                                      queryValueEscaped);\n            }\n\n            uriBuilder.Query = query;\n\n            return uriBuilder.Uri;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Authentication/MobileServiceSingleSignOnAuthentication.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Performs single sign-on authentication functionality.\n    /// </summary>\n    internal class MobileServiceSingleSignOnAuthentication : MobileServiceAuthentication\n    {\n        /// <summary>\n        /// Instantiates a new instance of <see cref=\"MobileServiceSingleSignOnAuthentication\"/>.\n        /// Single sign-on requires that the\n        /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n        /// provides a better experience as HTTP cookies are supported so that users do not have to\n        /// login in everytime the application is launched.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The client.\n        /// </param>\n        /// <param name=\"provider\">\n        /// The authentication provider.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        public MobileServiceSingleSignOnAuthentication(IMobileServiceClient client, string provider, IDictionary<string, string> parameters)\n            : base(client, provider, parameters)\n        {\n        }\n\n        /// <summary>\n        /// Provides Login logic by showing a UI and using single sign-on.\n        /// </summary>\n        /// <returns>\n        /// Task that will complete with the response string when the user has finished authentication.\n        /// </returns>\n        protected override Task<string> LoginAsyncOverride()\n        {\n            AuthenticationBroker broker = new AuthenticationBroker();\n\n            return broker.AuthenticateAsync(this.StartUri, this.EndUri, true);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Authentication/MobileServiceUIAuthentication.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class MobileServiceUIAuthentication : MobileServiceAuthentication\n    {\n        /// <summary>\n        /// Instantiates a new instance of <see cref=\"MobileServiceUIAuthentication\"/>.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The client.\n        /// </param>\n        /// <param name=\"provider\">\n        /// The authentication provider.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        public MobileServiceUIAuthentication(IMobileServiceClient client, string provider, IDictionary<string, string> parameters)\n            : base(client, provider, parameters)\n        {\n        }\n\n        /// <summary>\n        /// Provides Login logic by showing a login UI.\n        /// </summary>\n        /// <returns>\n        /// Task that will complete with the response string when the user has finished authentication.\n        /// </returns>\n        protected override Task<string> LoginAsyncOverride()\n        {\n            AuthenticationBroker broker = new AuthenticationBroker();\n\n            return broker.AuthenticateAsync(this.StartUri, this.EndUri, false);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Collections/MobileServiceIncrementalLoadingCollection.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Collections.Specialized;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Windows.Foundation;\nusing Windows.UI.Xaml.Data;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An asynchronous data source that implements ISupportIncrementalLoading and \n    /// can wrap the results of a Mobile Services query in a way that's easily \n    /// consumed by Xaml collection controls like ListView, GridView or ListBox.\n    /// </summary>\n    /// <typeparam name=\"TTable\">Data source element type.</typeparam>\n    /// <typeparam name=\"TCollection\">Type of elements ending up in the collection.</typeparam>\n    /// <remarks>S\n    /// Currently handles asynchronously loading the data, notifying the controls and paging.\n    /// Use the <see cref=\"MobileServiceIncrementalLoadingCollection{T}\"/> class if the table and \n    /// collection items are of the same type.\n    /// </remarks>\n    public class MobileServiceIncrementalLoadingCollection<TTable, TCollection> : \n        MobileServiceCollection<TTable, TCollection>,\n        ISupportIncrementalLoading\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:IncrementalLoadingMobileServiceCollection{TTable, TCollection}\"/>\n        /// class.\n        /// </summary>\n        /// <param name=\"query\">\n        /// The data source's query which provides the data.\n        /// </param>\n        /// <param name=\"selector\">\n        /// A selector function to provide client side projections.\n        /// </param>\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Usage\", \"CA2214:DoNotCallOverridableMethodsInConstructors\", Justification=\"Overridable method is only used for change notifications\")]\n        public MobileServiceIncrementalLoadingCollection(IMobileServiceTableQuery<TTable> query, Func<IEnumerable<TTable>, IEnumerable<TCollection>> selector)\n            :base(query, selector, 1) \n        {\n            this.ThrowExceptionsFromLoading = true;\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:IncrementalLoadingMobileServiceCollection{TTable, TCollection}\"/>\n        /// class.\n        /// </summary>\n        /// <param name=\"query\">\n        /// The data source's query which provides the data.\n        /// </param>\n        /// <param name=\"selector\">\n        /// A selector function to provide client side projections.\n        /// </param>\n        public MobileServiceIncrementalLoadingCollection(IMobileServiceTableQuery<TTable> query, Func<TTable, TCollection> selector)\n            : this(query, ie => ie.Select(selector)) { }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:IncrementalLoadingMobileServiceCollection{TTable, TCollection}\"/>\n        /// class. This constructior should be used in cases where TTable and TCollection are the same type.\n        /// </summary>\n        /// <param name=\"query\">\n        /// The data source's query which provides the data.\n        /// </param>\n        public MobileServiceIncrementalLoadingCollection(IMobileServiceTableQuery<TTable> query)\n            : this(query, ie => ie.Cast<TCollection>()) { }\n        \n        /// <summary>\n        /// Indicates if more items can be requested by the control.\n        /// </summary>\n        bool ISupportIncrementalLoading.HasMoreItems \n        { \n            get { return this.HasMoreItems; }\n        }\n\n        /// <summary>\n        /// Indicates if the exceptions from loading more data should be\n        /// thrown or not.\n        /// </summary>\n        protected bool ThrowExceptionsFromLoading { get; set; }\n\n        /// <summary>\n        /// Explicit implementation of ISupportIncrementalLoading.LoadMoreItemsAsync \n        /// which delegates the work to the base class\n        /// </summary>\n        /// <param name=\"count\">\n        /// Number of items requested by the control.\n        /// This is ignored since we have our own page size.\n        /// </param>\n        /// <returns></returns>\n        IAsyncOperation<LoadMoreItemsResult> ISupportIncrementalLoading.LoadMoreItemsAsync(uint count)\n        {\n            // we pass the count argument to override the pageSize\n            return AsyncInfo.Run(async (c) => \n            {\n                int results = 0;\n                try\n                {\n                    results = await base.LoadMoreItemsAsync(c, (int)count);   \n                }\n                catch (Exception e)\n                {\n                    OnExceptionOccurred(e);\n\n                    if (this.ThrowExceptionsFromLoading)\n                    {\n                        throw;\n                    }\n                }\n\n                return new LoadMoreItemsResult() { Count = (uint)results };\n            });\n        }\n\n        /// <summary>\n        /// Provided to allow users to handle exceptions resulting from calls to \n        /// LoadMoreItemsAsync performed by controls.\n        /// </summary>\n        /// <param name=\"exception\">The exception.</param>\n        protected virtual void OnExceptionOccurred(Exception exception)\n        {\n            // Do nothing\n        }\n    }\n\n    /// <summary>\n    /// An asynchronous data source that implements ISupportIncrementalLoading and \n    /// can wrap the results of a Mobile Services query in a way that's easily \n    /// consumed by Xaml collection controls like ListView, GridView or ListBox.\n    /// </summary>\n    /// <typeparam name=\"T\">Data source and collection element type.</typeparam>\n    /// <remarks>\n    /// Handles asynchronously loading the data, notifying the controls and paging.\n    /// </remarks>\n    public class MobileServiceIncrementalLoadingCollection<T> : MobileServiceIncrementalLoadingCollection<T, T>\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"T:IncrementalLoadingMobileServiceCollection{T}\"/> class.\n        /// </summary>\n        /// <param name=\"query\">\n        /// The data source's query, which provides the data.\n        /// </param>\n        public MobileServiceIncrementalLoadingCollection(IMobileServiceTableQuery<T> query)\n            : base(query, (Func<IEnumerable<T>, IEnumerable<T>>)(t => t))\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/ExpressionUtility/PartialEvaluator.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Evaluates all of an expression's subtrees that aren't dependent on any\n    /// parameters to the expression (things like local variables).  This is\n    /// necessary so we can turn the evaluated values into constants that we\n    /// can send to the server where the query executes.\n    /// </summary>\n    /// <remarks>\n    /// Note that by evaluating as much of the expression as possible now, any\n    /// future re-evaluation of the query (for the purposes of paging in the\n    /// MobileServiceCollectionView, etc.) will use constants rather than\n    /// the latest values in closed variables, etc.  This is desirable behavior\n    /// for data source paging but should be carefully considered for other\n    /// scenarios.\n    /// -\n    /// This code is based on the concepts discussed in\n    /// http://blogs.msdn.com/b/mattwar/archive/2007/08/01/linq-building-an-iqueryable-provider-part-iii.aspx\n    /// which is pointed to by MSDN as the reference for building LINQ \n    /// providers.\n    /// </remarks>\n    internal static class PartialEvaluator\n    {\n        /// <summary>\n        /// Evaluate all subtrees of an expression that aren't dependent on\n        /// parameters to that expression and replace the subtree with a\n        /// constant expression.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to partially evaluate.\n        /// </param>\n        /// <returns>\n        /// An expression in which every node is either a constant or part of\n        /// a subtree that depends on a one of the expression's parameters.\n        /// </returns>\n        public static Expression PartiallyEvaluate(Expression expression)\n        {\n            // Find the independent subtrees and then replace them with\n            // constant expressions equivalent to the evaluated subtrees.\n            List<Expression> independentSubtrees = FindIndependentSubtrees(expression);\n            return EvaluateIndependentSubtrees(expression, independentSubtrees);\n        }\n\n        /// <summary>\n        /// Walk the expression and compute all of the subtrees that are not\n        /// dependent on any of the expressions parameters.\n        /// </summary>\n        /// <param name=\"expression\">The expression to analyze.</param>\n        /// <returns>\n        /// A set of all the expression subtrees that are independent from the\n        /// expression's parameters.  Note that this set will include every\n        /// element of an independent subtree, but it's not a problem because\n        /// the EvaluateIndependentSubtrees walks top down.\n        /// </returns>\n        private static List<Expression> FindIndependentSubtrees(Expression expression)\n        {\n            List<Expression> subtrees = new List<Expression>();\n\n            // The dependent and isMemberInit flags are closed over and used to communicate\n            // between different layers of the recursive call\n            bool dependent = false;\n            bool isMemberInit = false;\n\n            // Walk the tree finding every \n            VisitorHelper.VisitAll(\n                expression,\n                (expr, recur) =>\n                {\n                    if (expr != null)\n                    {\n                        // Cache whether or not our parent is already dependent\n                        // or a MemberInitExpression because we're going to reset \n                        // the flags while we evalute our descendents to see if all\n                        // of our subtrees are independent.\n                        bool parentIsDependent = dependent;\n                        bool parentIsMemberInit = isMemberInit;\n\n                        // Set flags to false and visit my entire subtree\n                        // to see if anything sets it to true\n                        dependent = false;\n                        isMemberInit = expr is MemberInitExpression;\n\n                        recur(expr);\n\n                        // If nothing in my subtree is dependent\n                        if (!dependent)\n                        {\n                            // A NewExpression itself will appear to be independent,\n                            // but if the parent is a MemberInitExpression, the NewExpression\n                            // can't be evaluated by itself. The MemberInitExpression will\n                            // determine if the full expression is dependent or not, so \n                            // the NewExpression should simply not be checked for dependency.\n                            NewExpression newExpression = expr as NewExpression;\n                            if (newExpression != null && parentIsMemberInit)\n                            {\n                                return expr;\n                            }\n\n                            // Then the current node is independent if it's not\n                            // related to the parameter or if it's not the\n                            // constant query root (to handle degenerate cases \n                            // where we don't actually use any parameters in\n                            // the query - like table.skip(2).take(3)).\n                            ConstantExpression constant = expr as ConstantExpression;\n                            \n                            if (expr.NodeType == ExpressionType.Parameter ||\n                                (constant != null && constant.Value is IQueryable))\n                            {\n                                dependent = true;\n                            }\n                            else\n                            {\n                                // Then the whole subtree starting at this node\n                                // is independent of any expression parameters\n                                // and safe for partial evaluation\n                                subtrees.Add(expr);\n                            }\n                        }\n\n                        dependent |= parentIsDependent;\n                    }\n\n                    return expr;\n                });\n\n            return subtrees;\n        }\n\n        /// <summary>\n        /// Replace all the independent subtrees in an expression with\n        /// constants equal to the expression's evaluated result.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to partially evaluate.\n        /// </param>\n        /// <param name=\"subtrees\">\n        /// The independent subtrees in the expression.\n        /// </param>\n        /// <returns>\n        /// An expression that depends only on parameter values.\n        /// </returns>\n        private static Expression EvaluateIndependentSubtrees(Expression expression, List<Expression> subtrees)\n        {\n            // Walk top down checking each node to see if it's the root of an\n            // indedent subtree.  Once we find one, we'll compile it and\n            // replace the whole subtree with a constant.\n            return VisitorHelper.VisitAll(\n                expression,\n                (expr, recur) =>\n                {\n                    if (expr != null &&\n                        subtrees.Contains(expr) &&\n                        expr.NodeType != ExpressionType.Constant)\n                    {\n                        // Turn the expression into a parameterless lambda,\n                        // evaluate it, and return the response as a constant.\n                        Delegate compiled = Expression.Lambda(expr).Compile();\n                        object value = compiled.DynamicInvoke();\n                        return Expression.Constant(value, expr.Type);\n                    }\n                    else\n                    {\n                        return recur(expr);\n                    }\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/ExpressionUtility/VisitorHelper.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Linq.Expressions;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Visit all the members of specific types of expression tree nodes.  This\n    /// helps reduce the number of specific visitor classes we need to declare.\n    /// </summary>\n    internal class VisitorHelper : ExpressionVisitor\n    {\n        /// <summary>\n        /// A visitor callback for the generic Visit method that takes the\n        /// Expression along with a function that will recurse and returns the\n        /// visited expression or a modified value.\n        /// </summary>\n        private Func<Expression, Func<Expression, Expression>, Expression> visitor;\n\n        /// <summary>\n        /// A visitor callback for the VisitMember method that takes the\n        /// MemberExpression along with a function that will recurse and\n        /// returns the visisted expression or a modified value.\n        /// </summary>\n        private Func<MemberExpression, Func<MemberExpression, Expression>, Expression> memberVisitor;\n        \n        /// <summary>\n        /// Private constructor to prevent instantiation.\n        /// </summary>\n        private VisitorHelper()\n        {\n        }\n\n        /// <summary>\n        /// Visit all the nodes in the expression.\n        /// </summary>\n        /// <param name=\"expression\">The expression to visit.</param>\n        /// <param name=\"visitor\">\n        /// A function that takes the current node and another function to\n        /// recurse and returns an expression.\n        /// </param>\n        /// <returns>\n        /// The expression obtained by visiting the input expression.\n        /// </returns>\n        public static Expression VisitAll(Expression expression, Func<Expression, Func<Expression, Expression>, Expression> visitor)\n        {\n            if (expression == null)\n            {\n                throw new ArgumentNullException(\"expression\");\n            }\n            else if (visitor == null)\n            {\n                throw new ArgumentNullException(\"visitor\");\n            }\n            return new VisitorHelper() { visitor = visitor }.Visit(expression);\n        }\n\n        /// <summary>\n        /// Visit all the member accesses in the expression.\n        /// </summary>\n        /// <param name=\"expression\">The expression to visit.</param>\n        /// <param name=\"visitor\">\n        /// A function that takes the current member access node and another\n        /// function to recurse and returns and expression.\n        /// </param>\n        /// <returns>\n        /// The expression obtained by visiting the input expression.\n        /// </returns>\n        public static Expression VisitMembers(Expression expression, Func<MemberExpression, Func<MemberExpression, Expression>, Expression> visitor)\n        {\n            if (expression == null)\n            {\n                throw new ArgumentNullException(\"expression\");\n            }\n            else if (visitor == null)\n            {\n                throw new ArgumentNullException(\"visitor\");\n            }\n            return new VisitorHelper() { memberVisitor = visitor }.Visit(expression);\n        }\n\n        /// <summary>\n        /// Visit every node.\n        /// </summary>\n        /// <param name=\"expression\">The expression to visit.</param>\n        /// <returns>The visisted expression.</returns>\n        public override Expression Visit(Expression expression)\n        {\n            return this.visitor != null ?\n                this.visitor(expression, e => base.Visit(e)) :\n                base.Visit(expression);\n        }\n\n        /// <summary>\n        /// Visit member access.\n        /// </summary>\n        /// <param name=\"expression\">The expression to visit.</param>\n        /// <returns>The visited expression.</returns>\n        protected override Expression VisitMember(MemberExpression expression)\n        {\n            return this.memberVisitor != null ?\n                this.memberVisitor(expression, e => base.VisitMember(e)) :\n                base.VisitMember(expression);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Extensions/MobileServiceClientExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Extension methods for UI-based login.\n    /// </summary>\n    public static class MobileServiceClientExtensions\n    {\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The client.\n        /// </param>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, MobileServiceAuthenticationProvider provider)\n        {\n            return LoginAsync(client, provider, parameters: null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The client.\n        /// </param>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, MobileServiceAuthenticationProvider provider, IDictionary<string, string> parameters)\n        {\n            return LoginAsync(client, provider.ToString(), parameters);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The client.\n        /// </param>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, string provider)\n        {\n            return LoginAsync(client, provider, null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The client.\n        /// </param>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, string provider, IDictionary<string, string> parameters)\n        {\n            MobileServiceUIAuthentication auth = new MobileServiceUIAuthentication(client, provider, parameters);\n\n            return auth.LoginAsync();\n        }\n\n        /// <summary>\n        /// Extension method to get a <see cref=\"Push\"/> object made from an existing <see cref=\"MobileServiceClient\"/>.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The <see cref=\"MobileServiceClient\"/> to create with.\n        /// </param>\n        /// <returns>\n        /// The <see cref=\"Push\"/> object used for registering for notifications.\n        /// </returns>\n        public static Push GetPush(this MobileServiceClient client)\n        {\n            return new Push(client);\n        }\n    }\n}\n\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Extensions/MobileServiceCollectionViewExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    public static class MobileServiceCollectionViewExtensions\n    {\n        /// <summary>\n        /// Create a new collection view based on the query.\n        /// </summary>\n        /// <returns>The collection view.</returns>\n        public static MobileServiceCollectionView<T> ToCollectionView<T>(this IMobileServiceTableQuery<T> query)\n        {\n            return new MobileServiceCollectionView<T>(query.Table, query);\n        }\n\n        /// <summary>\n        /// Create a new collection view based on the query.\n        /// </summary>\n        /// <returns>The collection view.</returns>\n        public static MobileServiceCollectionView<T> ToCollectionView<T>(this IMobileServiceTable<T> table)\n        {\n            return new MobileServiceTableQuery<T>(table).ToCollectionView();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Extensions/MobileServiceIncrementalLoadingCollectionExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provide extension methods on <see cref=\"T:IMobileServiceTableQuery`1{T}\"/>\n    /// and <see cref=\"T:IMobileServiceTable`1{T}\"/> to wrap them in an incremental loading collection.\n    /// </summary>\n    public static class MobileServiceIncrementalLoadingCollectionExtensions\n    {\n        /// <summary>\n        /// Create a new collection view based on the query.\n        /// </summary>\n        /// <returns>The collection view.</returns>\n        public static MobileServiceIncrementalLoadingCollection<TTable, TTable> ToIncrementalLoadingCollection<TTable>(this IMobileServiceTableQuery<TTable> query)\n        {\n            return new MobileServiceIncrementalLoadingCollection<TTable, TTable>(query);\n        }\n\n        /// <summary>\n        /// Create a new collection view based on the query.\n        /// </summary>\n        /// <returns>The collection view.</returns>\n        public static MobileServiceIncrementalLoadingCollection<TTable, TTable> ToIncrementalLoadingCollection<TTable>(this IMobileServiceTable<TTable> table)\n        {\n            return table.CreateQuery().ToIncrementalLoadingCollection();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Extensions/SingleSignOnExtensions.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------'\n\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides extension methods for single sign-on.\n    /// </summary>\n    public static class SingleSignOnExtensions\n    {\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name and optional token object.\n        /// </summary>\n        /// <param name=\"provider\" type=\"MobileServiceAuthenticationProvider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"client\">\n        /// The <see cref=\"MobileServiceClient\"/> to login with.\n        /// </param>\n        /// <param name=\"useSingleSignOn\">\n        /// Indicates that single sign-on should be used. Single sign-on requires that the\n        /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n        /// provides a better experience as HTTP cookies are supported so that users do not have to\n        /// login in everytime the application is launched.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, MobileServiceAuthenticationProvider provider, bool useSingleSignOn)\n        {\n            return LoginAsync(client, provider, useSingleSignOn, parameters: null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name and optional token object.\n        /// </summary>\n        /// <param name=\"provider\" type=\"MobileServiceAuthenticationProvider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"client\">\n        /// The <see cref=\"MobileServiceClient\"/> to login with.\n        /// </param>\n        /// <param name=\"useSingleSignOn\">\n        /// Indicates that single sign-on should be used. Single sign-on requires that the\n        /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n        /// provides a better experience as HTTP cookies are supported so that users do not have to\n        /// login in everytime the application is launched.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, MobileServiceAuthenticationProvider provider, bool useSingleSignOn, IDictionary<string, string> parameters)\n        {\n            return LoginAsync(client, provider.ToString(), useSingleSignOn, parameters);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name and optional token object.\n        /// </summary>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"client\">\n        /// The <see cref=\"MobileServiceClient\"/> to login with.\n        /// </param>\n        /// <param name=\"useSingleSignOn\">\n        /// Indicates that single sign-on should be used. Single sign-on requires that the\n        /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n        /// provides a better experience as HTTP cookies are supported so that users do not have to\n        /// login in everytime the application is launched.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, string provider, bool useSingleSignOn)\n        {\n            return LoginAsync(client, provider, useSingleSignOn, parameters: null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name and optional token object.\n        /// </summary>\n        /// <param name=\"provider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"client\">\n        /// The <see cref=\"MobileServiceClient\"/> to login with.\n        /// </param>\n        /// <param name=\"useSingleSignOn\">\n        /// Indicates that single sign-on should be used. Single sign-on requires that the\n        /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n        /// provides a better experience as HTTP cookies are supported so that users do not have to\n        /// login in everytime the application is launched.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, string provider, bool useSingleSignOn, IDictionary<string, string> parameters)\n        {\n            if (!useSingleSignOn)\n            {\n                return client.LoginAsync(provider);\n            }\n\n            MobileServiceSingleSignOnAuthentication auth = new MobileServiceSingleSignOnAuthentication(client, provider, parameters);\n            return auth.LoginAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Microsoft.WindowsAzure.Mobile.Ext.Win8.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),Microsoft.WindowsAzure.Mobile.Build.msbuild))\\tools\\Microsoft.WindowsAzure.Mobile.Build.settings.targets\" Condition=\"$(CmdLine) != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <OutputPath Condition=\" '$(OutputPath)' == '' \">bin\\$(Configuration)</OutputPath>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{41E0BBEA-091B-4C06-AE08-B7F50E2BEB8A}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Ext</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>$(OutputPath)\\Microsoft.WindowsAzure.Mobile.Ext.xml</DocumentationFile>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DocumentationFile>$(OutputPath)\\Microsoft.WindowsAzure.Mobile.Ext.xml</DocumentationFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"Authentication\\MobileServiceSingleSignOnAuthentication.cs\" />\n    <Compile Include=\"Authentication\\MobileServiceUIAuthentication.cs\" />\n    <Compile Include=\"Collections\\MobileServiceIncrementalLoadingCollection.cs\" />\n    <Compile Include=\"Extensions\\MobileServiceIncrementalLoadingCollectionExtensions.cs\" />\n    <Compile Include=\"Extensions\\SingleSignOnExtensions.cs\" />\n    <Compile Include=\"Platform\\ExpressionUtility.cs\" />\n    <Compile Include=\"ExpressionUtility\\PartialEvaluator.cs\" />\n    <Compile Include=\"ExpressionUtility\\VisitorHelper.cs\" />\n    <Compile Include=\"Platform\\CurrentPlatform.cs\" />\n    <Compile Include=\"Platform\\ApplicationStorage.cs\" />\n    <Compile Include=\"Authentication\\AuthenticationBroker.cs\" />\n    <Compile Include=\"Platform\\PlatformInformation.cs\" />\n    <Compile Include=\"Platform\\PushUtility.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Push\\Push.cs\" />\n    <Compile Include=\"Push\\WnsRegistration.cs\" />\n    <Compile Include=\"Push\\WnsTemplateRegistration.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Extensions\\MobileServiceClientExtensions.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\netcore45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\win8\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\win8\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '11.0' \">\n    <VisualStudioVersion>11.0</VisualStudioVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <DocumentationFile>bin\\Debug\\Microsoft.WindowsAzure.Mobile.Ext.xml</DocumentationFile>\n    <NoStdLib>true</NoStdLib>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <DocumentationFile>bin\\Release\\Microsoft.WindowsAzure.Mobile.Ext.xml</DocumentationFile>\n    <Optimize>true</Optimize>\n    <NoStdLib>true</NoStdLib>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/MobileServices.priconfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<resources>\n\t<index root=\"\\\" startIndexAt=\"\\\">\n\t\t<default>\n\t\t\t<qualifier name=\"Language\" value=\"en-US\"/>\n\t\t\t<qualifier name=\"Contrast\" value=\"standard\"/>\n\t\t\t<qualifier name=\"Scale\" value=\"100\"/>\n\t\t\t<qualifier name=\"HomeRegion\" value=\"001\"/>\n\t\t\t<qualifier name=\"TargetSize\" value=\"256\"/>\n\t\t\t<qualifier name=\"LayoutDirection\" value=\"LTR\"/>\n\t\t\t<qualifier name=\"Configuration\" value=\"\"/>\n\t\t\t<qualifier name=\"AlternateForm\" value=\"\"/>\n\t\t</default>\n\t\t<indexer-config type=\"folder\" foldernameAsQualifier=\"true\" filenameAsQualifier=\"true\" qualifierDelimiter=\".\"/>\n\t\t<indexer-config type=\"resw\" convertDotsToSlashes=\"true\" initialPath=\"\"/>\n\t\t<indexer-config type=\"resjson\" initialPath=\"\"/>\n\t\t<indexer-config type=\"PRI\"/>\n\t</index>\n</resources>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Platform/ApplicationStorage.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nusing Windows.Foundation.Collections;\nusing Windows.Storage;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An implementation of the <see cref=\"IApplicationStorage\"/> interface\n    /// for the Windows Store Platform that uses the Windows Store\n    /// <see cref=\"ApplicationData\"/> APIs.\n    /// </summary>\n    internal class ApplicationStorage : IApplicationStorage\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"IApplicationStorage\"/>.\n        /// </summary>\n        private static readonly IApplicationStorage instance = new ApplicationStorage();\n\n        private ApplicationStorage()\n        {\n            this.Values = ApplicationData.Current.LocalSettings.Values;\n        }\n\n        internal ApplicationStorage(string name)\n        {\n            this.Values = ApplicationData.Current.LocalSettings.CreateContainer(name, ApplicationDataCreateDisposition.Always).Values;\n        }\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"IApplicationStorage\"/>.\n        /// </summary>\n        internal static IApplicationStorage Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        public IPropertySet Values { get; set; }\n\n        /// <summary>\n        /// Tries to read a setting's value from application storage. \n        /// </summary>\n        /// <param name=\"name\">The name of the setting to try to read.\n        /// </param>\n        /// <param name=\"value\">Upon returning, if the return value was <c>true</c>, \n        /// will be the value of the given setting; will be <c>null</c> otherwise.\n        /// </param>\n        /// <returns>\n        /// <c>true</c> if the setting existed and was successfully read; <c>false</c> otherwise.\n        /// </returns>\n        /// <exception cref=\"ArgumentException\">\n        /// Thrown if the setting name is <c>null</c> or whitespace.\n        /// </exception>\n        bool IApplicationStorage.TryReadSetting(string name, out object value)\n        {\n            if (string.IsNullOrWhiteSpace(name))\n            {\n                string message = \"An application setting name must be provided. Null, empty or whitespace only names are not allowed.\";\n                throw new ArgumentException(message);\n            }\n\n            return this.Values.TryGetValue(name, out value);\n        }\n\n        /// <summary>\n        /// Writes the setting's value to application storage.\n        /// </summary>\n        /// <param name=\"name\">The name of the setting to write.\n        /// </param>\n        /// <param name=\"value\">The value to write.\n        /// </param>\n        /// <exception cref=\"ArgumentException\">\n        /// Thrown if the setting name is <c>null</c> or empty.\n        /// </exception>\n        /// <exception cref=\"InvalidOperationException\">\n        /// Thrown if an error occurs while writing the setting.\n        /// </exception>\n        void IApplicationStorage.WriteSetting(string name, object value)\n        {\n            if (string.IsNullOrWhiteSpace(name))\n            {\n                string message = \"An application setting name must be provided. Null, empty or whitespace only names are not allowed.\";\n                throw new ArgumentException(message);\n            }\n\n            this.Values[name] = value;\n        }\n\n        public void Save()\n        {\n            // This operation is a no-op on Windows 8\n        }        \n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Platform/CurrentPlatform.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class CurrentPlatform : IPlatform\n    {\n        /// <summary>\n        /// Returns a platform-specific implemention of application storage.\n        /// </summary>\n        public IApplicationStorage ApplicationStorage { get { return Microsoft.WindowsAzure.MobileServices.ApplicationStorage.Instance; } }\n\n        /// <summary>\n        /// Returns a platform-specific implemention of platform information.\n        /// </summary>\n        public IPlatformInformation PlatformInformation { get { return Microsoft.WindowsAzure.MobileServices.PlatformInformation.Instance; } }\n\n        /// <summary>\n        /// Returns a platform-specific implementation of a utility class\n        /// that provides functionality for manipulating \n        /// <see cref=\"System.Linq.Expressions.Expression\"/> instances.\n        /// </summary>\n        public IExpressionUtility ExpressionUtility { get { return Microsoft.WindowsAzure.MobileServices.ExpressionUtility.Instance; } }\n\n        /// <summary>\n        /// Returns a platform-specific implementation of a utility class\n        /// that provides functionality for platform-specifc push capabilities.\n        /// </summary>\n        public IPushUtility PushUtility { get { return Microsoft.WindowsAzure.MobileServices.PushUtility.Instance; } }\n\n        public IApplicationStorage GetNamedApplicationStorage(string name)\n        {\n            return new ApplicationStorage(name);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Platform/ExpressionUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An implementation of the <see cref=\"IExpressionUtility\"/> interface\n    /// for that uses the ExpressionVisitor\n    /// </summary>\n    internal class ExpressionUtility : IExpressionUtility\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ExpressionUtility\"/>.\n        /// </summary>\n        private static readonly IExpressionUtility instance = new ExpressionUtility();\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ExpressionUtility\"/>.\n        /// </summary>\n        public static IExpressionUtility Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        /// <summary>\n        /// Evaluate all subtrees of an expression that aren't dependent on\n        /// parameters to that expression and replace the subtree with a\n        /// constant expression.\n        /// </summary>\n        /// <param name=\"expression\">\n        /// The expression to partially evaluate.\n        /// </param>\n        /// <returns>\n        /// An expression in which every node is either a constant or part of\n        /// a subtree that depends on a one of the expression's parameters.\n        /// </returns>\n        public Expression PartiallyEvaluate(Expression expression)\n        {\n            return PartialEvaluator.PartiallyEvaluate(expression);\n        }\n\n        /// <summary>\n        /// Returns the MemberExpressions in the expression hierarchy of the <paramref name=\"expression\"/>.\n        /// </summary>\n        /// <param name=\"expression\">The expression to search for children MemberExpressions</param>\n        /// <returns>A collection of MemberExpressions.</returns>\n        public IEnumerable<MemberExpression> GetMemberExpressions(Expression expression)\n        {\n            List<MemberExpression> members = new List<MemberExpression>();\n            VisitorHelper.VisitMembers(\n                        expression,\n                        (expr, recur) =>\n                        {\n                            // Ensure we only process members of the parameter\n                            if (expr is MemberExpression)\n                            {\n                                members.Add((MemberExpression)expr);\n                            }\n\n                            return recur(expr);\n                        });\n\n            return members;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Platform/PlatformInformation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Linq;\nusing System.Reflection;\nusing Windows.ApplicationModel;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Implements the <see cref=\"IPlatform\"/> interface for the Windows\n    /// Store platform.\n    /// </summary>\n    internal class PlatformInformation : IPlatformInformation\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"IPlatformInformation\"/>.\n        /// </summary>\n        private static readonly IPlatformInformation instance = new PlatformInformation();\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"IPlatformInformation\"/>.\n        /// </summary>\n        public static IPlatformInformation Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        /// <summary>\n        /// The architecture of the platform.\n        /// </summary>\n        public string OperatingSystemArchitecture\n        {\n            get\n            {\n                return Package.Current.Id.Architecture.ToString();\n            }\n        }\n\n        /// <summary>\n        /// The name of the operating system of the platform.\n        /// </summary>\n        public string OperatingSystemName\n        {\n            get\n            {\n                return \"Windows Store\";\n            }\n        }\n\n        /// <summary>\n        /// The version of the operating system of the platform.\n        /// </summary>\n        public string OperatingSystemVersion\n        {\n            get\n            {\n                return Platform.UnknownValueString;\n            }\n        }\n\n        /// <summary>\n        /// Indicated whether the device is an emulator or not\n        /// </summary>\n        public bool IsEmulator\n        {\n            get\n            {\n                return false;\n            }\n        }\n\n        public string Version\n        {\n            get\n            {\n                return this.GetVersionFromAssemblyFileVersion();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Platform/PushUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class PushUtility : IPushUtility\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"PushUtility\"/>.\n        /// </summary>\n        private static readonly IPushUtility instance = new PushUtility();\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"PushUtility\"/>.\n        /// </summary>\n        public static IPushUtility Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        public Registration GetNewNativeRegistration()\n        {\n            return new WnsRegistration();\n        }\n\n        public Registration GetNewTemplateRegistration()\n        {\n            return new WnsTemplateRegistration();\n        }\n\n        public string GetPlatform()\n        {\n            return \"wns\";\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Resources;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.Ext\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Microsoft Corporation\")]\n[assembly: AssemblyProduct(\"Microsoft Azure Mobile Services SDK\")]\n[assembly: AssemblyCopyright(\"© Microsoft Corporation. All rights reserved.\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n#if Sign\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Win8.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n#else\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile\")]\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile.Win8.Test\")]\n#endif\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Push/Push.cs",
    "content": "﻿//------------------------------------------------------------\n// Copyright (c) Microsoft Corporation.  All rights reserved.\n//------------------------------------------------------------\n\nusing Windows.ApplicationModel;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    using System;\n    using System.Collections.Concurrent;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Threading.Tasks;\n    using Windows.Data.Xml.Dom;\n\n    /// <summary>\n    /// Define a class help to create/update/delete notification registrations\n    /// </summary>\n    public sealed class Push\n    {\n        internal readonly RegistrationManager RegistrationManager;\n\n        private const string PrimaryChannelId = \"$Primary\";\n\n        internal Push(MobileServiceClient client)\n            : this(client, string.Empty, null)\n        {\n        }\n\n        private Push(MobileServiceClient client, string tileId, SecondaryTilesList tiles)\n        {\n            if (client == null)\n            {\n                throw new ArgumentNullException(\"client\");\n            }\n\n            this.Client = client;\n            this.TileId = tileId;\n            if (string.IsNullOrEmpty(tileId))\n            {\n                tileId = PrimaryChannelId;\n            }\n\n            string name = string.Format(\"{0}-PushContainer-{1}-{2}\", Package.Current.Id.Name, client.ApplicationUri.Host, tileId);\n            var storageManager = new LocalStorageManager(name);\n            var pushHttpClient = new PushHttpClient(client);\n            this.RegistrationManager = new RegistrationManager(pushHttpClient, storageManager);\n\n            this.SecondaryTiles = tiles ?? new SecondaryTilesList(this);\n        }\n\n        /// <summary>\n        /// The TileId associated with this specific object. String.Empty is default if not created via SecondaryTiles property.\n        /// </summary>\n        public string TileId { get; private set; }\n\n        /// <summary>\n        /// Access this member with an indexer to access secondary tile registrations. Example: <code>push.SecondaryTiles[\"tileName\"].RegisterNativeAsync(\"mychannelUri\");</code>\n        /// </summary>\n        public IDictionary<string, Push> SecondaryTiles { get; set; }\n\n        private MobileServiceClient Client { get; set; }\n\n        /// <summary>\n        /// Register a particular channelUri\n        /// </summary>\n        /// <param name=\"channelUri\">The channelUri to register</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterNativeAsync(string channelUri)\n        {\n            return this.RegisterNativeAsync(channelUri, null);\n        }\n\n        /// <summary>\n        /// Register a particular channelUri\n        /// </summary>\n        /// <param name=\"channelUri\">The channelUri to register</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterNativeAsync(string channelUri, IEnumerable<string> tags)\n        {\n            if (string.IsNullOrWhiteSpace(channelUri))\n            {\n                throw new ArgumentNullException(\"channelUri\");\n            }\n\n            var registration = new WnsRegistration(channelUri, tags);\n            return this.RegistrationManager.RegisterAsync(registration);\n        }\n\n        /// <summary>\n        /// Register a particular channelUri with a template\n        /// </summary>\n        /// <param name=\"channelUri\">The channelUri to register</param>\n        /// <param name=\"xmlTemplate\">The XmlDocument defining the template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterTemplateAsync(string channelUri, XmlDocument xmlTemplate, string templateName)\n        {\n            return this.RegisterTemplateAsync(channelUri, xmlTemplate, templateName, tags: null);\n        }\n\n        /// <summary>\n        /// Register a particular channelUri with a template\n        /// </summary>\n        /// <param name=\"channelUri\">The channelUri to register</param>\n        /// <param name=\"xmlTemplate\">The XmlDocument defining the template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        /// <returns>Task that completes when registration is complete</returns>        \n        public Task RegisterTemplateAsync(string channelUri, XmlDocument xmlTemplate, string templateName, IEnumerable<string> tags)\n        {\n            if (xmlTemplate == null)\n            {\n                throw new ArgumentNullException(\"xmlTemplate\");\n            }\n\n            return this.RegisterTemplateAsync(channelUri, xmlTemplate.GetXml(), templateName, tags);\n        }\n\n        /// <summary>\n        /// Register a particular channelUri with a template\n        /// </summary>\n        /// <param name=\"channelUri\">The channelUri to register</param>\n        /// <param name=\"xmlTemplate\">The string defining the template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterTemplateAsync(string channelUri, string xmlTemplate, string templateName)\n        {\n            return this.RegisterTemplateAsync(channelUri, xmlTemplate, templateName, null);\n        }\n\n        /// <summary>\n        /// Register a particular channelUri with a template\n        /// </summary>\n        /// <param name=\"channelUri\">The channelUri to register</param>\n        /// <param name=\"xmlTemplate\">The string defining the template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterTemplateAsync(string channelUri, string xmlTemplate, string templateName, IEnumerable<string> tags)\n        {\n            if (string.IsNullOrWhiteSpace(channelUri))\n            {\n                throw new ArgumentNullException(\"channelUri\");\n            }\n\n            if (string.IsNullOrWhiteSpace(xmlTemplate))\n            {\n                throw new ArgumentNullException(\"xmlTemplate\");\n            }\n\n            if (string.IsNullOrWhiteSpace(templateName))\n            {\n                throw new ArgumentNullException(\"templateName\");\n            }\n\n            var registration = new WnsTemplateRegistration(channelUri, xmlTemplate, templateName, tags);\n            return this.RegistrationManager.RegisterAsync(registration);\n        }\n\n        /// <summary>\n        /// Unregister any registrations previously registered from this device\n        /// </summary>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterNativeAsync()\n        {\n            return this.UnregisterTemplateAsync(Registration.NativeRegistrationName);\n        }\n\n        /// <summary>\n        /// Unregister any registrations with given templateName registered from this device\n        /// </summary>\n        /// <param name=\"templateName\">The template name</param>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterTemplateAsync(string templateName)\n        {\n            return this.RegistrationManager.UnregisterAsync(templateName);\n        }\n\n        /// <summary>\n        /// Unregister any registrations with given channelUri\n        /// </summary>\n        /// <param name=\"channelUri\">The channel Uri</param>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterAllAsync(string channelUri)\n        {\n            if (string.IsNullOrWhiteSpace(channelUri))\n            {\n                throw new ArgumentNullException(\"channelUri\");\n            }\n\n            return this.RegistrationManager.DeleteRegistrationsForChannelAsync(channelUri);\n        }\n\n        /// <summary>\n        /// Register for notifications\n        /// </summary>\n        /// <param name=\"registration\">The object defining the registration</param>\n        /// <returns>Task that will complete when the registration is completed</returns>\n        public Task RegisterAsync(Registration registration)\n        {\n            if (registration == null)\n            {\n                throw new ArgumentNullException(\"registration\");\n            }\n\n            if (string.IsNullOrWhiteSpace(registration.PushHandle))\n            {\n                throw new ArgumentNullException(\"registration.ChannelUri\");\n            }\n\n            return this.RegistrationManager.RegisterAsync(registration);\n        }\n\n        /// <summary>\n        /// DEBUG-ONLY: List the registrations made with the service for a channelUri\n        /// </summary>\n        /// <param name=\"channelUri\">The channelUri to check for</param>\n        /// <returns>List of registrations</returns>\n        public Task<List<Registration>> ListRegistrationsAsync(string channelUri)\n        {\n            return this.RegistrationManager.ListRegistrationsAsync(channelUri);\n        }\n\n        /// <summary>\n        /// Collection of Push objects for secondary tiles\n        /// </summary>\n        private class SecondaryTilesList : IDictionary<string, Push>\n        {\n            private readonly Push parent;\n            private readonly ConcurrentDictionary<string, Push> hubForTiles = new ConcurrentDictionary<string, Push>();\n\n            internal SecondaryTilesList(Push parent)\n            {\n                this.parent = parent;\n            }                        \n\n            public ICollection<string> Keys\n            {\n                get { return this.hubForTiles.Keys; }\n            }\n\n            public ICollection<Push> Values\n            {\n                get { return this.hubForTiles.Values; }\n            }\n\n            public int Count\n            {\n                get { return this.hubForTiles.Count; }\n            }\n\n            public bool IsReadOnly\n            {\n                get { return false; }\n            }\n\n            /// <summary>\n            /// Indexer for creating/looking up tileId-specific Push objects\n            /// </summary>\n            /// <param name=\"tileId\">The tileId of a secondary tile</param>\n            /// <returns>Push object for performing registrations on</returns>\n            public Push this[string tileId]\n            {\n                get\n                {\n                    if (string.IsNullOrWhiteSpace(tileId))\n                    {\n                        throw new ArgumentNullException(\"tileId\");\n                    }\n\n                    if (this.hubForTiles.ContainsKey(tileId))\n                    {\n                        return this.hubForTiles[tileId];\n                    }\n\n                    var hubForTile = new Push(this.parent.Client, tileId, this);\n                    return this.hubForTiles.GetOrAdd(tileId, hubForTile);\n                }\n\n                set\n                {\n                    throw new NotSupportedException();\n                }\n            }\n\n            public void Add(string key, Push value)\n            {\n                throw new NotSupportedException();\n            }\n\n            public bool ContainsKey(string tileId)\n            {\n                return this.hubForTiles.ContainsKey(tileId);\n            }            \n\n            public bool Remove(string tileId)\n            {\n                Push hub;\n                return this.hubForTiles.TryRemove(tileId, out hub);\n            }\n\n            public bool TryGetValue(string tileId, out Push value)\n            {\n                return this.hubForTiles.TryGetValue(tileId, out value);\n            }            \n\n            public void Add(KeyValuePair<string, Push> item)\n            {\n                throw new NotSupportedException();\n            }\n\n            public void Clear()\n            {\n                this.hubForTiles.Clear();\n            }\n\n            public bool Contains(KeyValuePair<string, Push> item)\n            {\n                return this.hubForTiles.Contains(item);\n            }\n\n            public void CopyTo(KeyValuePair<string, Push>[] array, int arrayIndex)\n            {\n                foreach (KeyValuePair<string, Push> item in this.hubForTiles)\n                {\n                    array[arrayIndex++] = new KeyValuePair<string, Push>(item.Key, item.Value);\n                }\n            }            \n\n            public bool Remove(KeyValuePair<string, Push> item)\n            {\n                return this.Remove(item.Key);\n            }\n\n            public IEnumerator<KeyValuePair<string, Push>> GetEnumerator()\n            {\n                return this.hubForTiles.GetEnumerator();\n            }\n\n            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\n            {\n                return this.hubForTiles.GetEnumerator();\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Push/WnsRegistration.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Registration is used to define a target that is registered for notifications\n    /// </summary>\n    [JsonObject(MemberSerialization.OptIn)]\n    public class WnsRegistration : Registration\n    {\n        internal WnsRegistration()\n        {\n        }\n\n        /// <summary>\n        /// Create a default Registration for a channelUri\n        /// </summary>\n        /// <param name=\"channelUri\">The channel uri</param>\n        public WnsRegistration(string channelUri)\n            : this(channelUri, null)\n        {\n        }\n\n        /// <summary>\n        /// Create a default Registration for a channelUri with specific tags\n        /// </summary>\n        /// <param name=\"channelUri\">The channel uri</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        public WnsRegistration(string channelUri, IEnumerable<string> tags)\n            : base(channelUri, tags)\n        {\n            if (string.IsNullOrWhiteSpace(channelUri))\n            {\n                throw new ArgumentNullException(\"channelUri\");\n            }\n        }\n\n        /// <summary>\n        /// The Uri of the Channel returned by the Push Notification Channel Manager.\n        /// </summary>\n        public string ChannelUri\n        {\n            get\n            {\n                return this.PushHandle;\n            }\n\n            set\n            {\n                this.PushHandle = value;\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/Push/WnsTemplateRegistration.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Globalization;\n\nusing Newtonsoft.Json;\n\nusing Windows.Data.Xml.Dom;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal enum TemplateRegistrationType\n    {\n        Toast,\n        Tile,\n        Badge\n    }\n\n    /// <summary>\n    /// Registration is used to define a target that is registered for notifications. A <see cref=\"WnsTemplateRegistration\"/> allows the client application\n    /// to define the format of the registration.\n    /// </summary>\n    [JsonObject(MemberSerialization.OptIn)]\n    public sealed class WnsTemplateRegistration : WnsRegistration\n    {\n        private const string WnsTypeName = \"X-WNS-Type\";\n\n        internal WnsTemplateRegistration()\n        {\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"WnsTemplateRegistration\"/>\n        /// </summary>\n        /// <param name=\"channelUri\">The channel uri</param>\n        /// <param name=\"bodyTemplate\">The template xml in string format</param>\n        /// <param name=\"templateName\">The template name</param>\n        public WnsTemplateRegistration(string channelUri, string bodyTemplate, string templateName)\n            : this(channelUri, bodyTemplate, templateName, null, null)\n        {\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"WnsTemplateRegistration\"/>\n        /// </summary>\n        /// <param name=\"channelUri\">The channel uri</param>\n        /// <param name=\"bodyTemplate\">The template xml in string format</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags that restrict which notifications this registration will receive</param>\n        public WnsTemplateRegistration(string channelUri, string bodyTemplate, string templateName, IEnumerable<string> tags)\n            : this(channelUri, bodyTemplate, templateName, tags, null)\n        {\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"WnsTemplateRegistration\"/>\n        /// </summary>\n        /// <param name=\"channelUri\">The channel uri</param>\n        /// <param name=\"bodyTemplate\">The template xml in string format</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags that restrict which notifications this registration will receive</param>\n        /// <param name=\"additionalHeaders\">Additional headers</param>\n        public WnsTemplateRegistration(string channelUri, string bodyTemplate, string templateName, IEnumerable<string> tags, IEnumerable<KeyValuePair<string, string>> additionalHeaders)\n            : base(channelUri, tags)\n        {\n            if (string.IsNullOrWhiteSpace(templateName))\n            {\n                throw new ArgumentNullException(\"templateName\");\n            }\n\n            if (templateName.Equals(Registration.NativeRegistrationName))\n            {\n                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, \"Template name conflicts with reserved name '{0}'.\", Registration.NativeRegistrationName));\n            }\n\n            if (templateName.Contains(\":\") || templateName.Contains(\";\"))\n            {\n                throw new ArgumentException(\"Template name cannot contain ';' or ':'.\");\n            }\n\n            if (string.IsNullOrWhiteSpace(bodyTemplate))\n            {\n                throw new ArgumentNullException(\"bodyTemplate\");\n            }\n\n            this.TemplateName = templateName;\n            this.WnsHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);\n            if (additionalHeaders != null)\n            {\n                foreach (var item in additionalHeaders)\n                {\n                    this.WnsHeaders.Add(item.Key, item.Value);\n                }\n            }\n\n            this.BodyTemplate = bodyTemplate;\n\n            if (!this.WnsHeaders.ContainsKey(WnsTypeName))\n            {\n                // Because there are no headers, it is not raw\n                // This means it must be XML\n                XmlDocument xmlDocument = new XmlDocument();\n                try\n                {\n                    xmlDocument.LoadXml(bodyTemplate);\n                }\n                catch (Exception e)\n                {\n                    throw new ArgumentException(\"Valid XML is required for any template without a raw header.\", \"bodyTemplate\", e);\n                }\n\n                var payloadType = WnsTemplateRegistration.DetectBodyType(xmlDocument);\n                this.WnsHeaders.Add(WnsTypeName, payloadType);\n            }\n\n            this.WnsHeaders = new ReadOnlyDictionary<string, string>(this.WnsHeaders);\n        }\n\n        /// <summary>\n        /// Gets headers that should be sent to WNS with the notification\n        /// </summary>\n        [JsonProperty(PropertyName = \"headers\")]\n        public IDictionary<string, string> WnsHeaders { get; internal set; }\n\n        /// <summary>\n        /// Get templateName\n        /// </summary>\n        [JsonProperty(PropertyName = \"templateName\")]\n        public string TemplateName { get; internal set; }\n\n        /// <summary>\n        /// Gets bodyTemplate as string\n        /// </summary>\n        [JsonProperty(PropertyName = \"templateBody\")]\n        public string BodyTemplate { get; internal set; }\n\n        /// <summary>\n        /// The name of the registration used in local storage.\n        /// </summary>\n        public override string Name\n        {\n            get\n            {\n                return this.TemplateName;\n            }\n        }\n\n        private static string DetectBodyType(XmlDocument template)\n        {\n            TemplateRegistrationType registrationType;\n            if (template.FirstChild == null ||\n                !Enum.TryParse(template.FirstChild.NodeName, true, out registrationType))\n            {\n                // First node of the body template should be toast/tile/badge\n                throw new ArgumentException(\"The bodyTemplate is not in accepted XML format. The first node of the bodyTemplate should be Badge/Tile/Toast, except for the wns/raw template, which needs to be an valid XML.\");\n            }\n\n            return \"wns/\" + template.FirstChild.NodeName.ToLowerInvariant();\n        }\n    }    \n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsStore/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"win\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"win\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"win\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"win\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/Authentication/MobileServiceUIAuthentication.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Threading.Tasks;\nusing Xamarin.Auth._MobileServices;\n#if __UNIFIED__\nusing Foundation;\nusing UIKit;\nusing NSAction = System.Action;\n#else\nusing MonoTouch.Foundation;\nusing MonoTouch.UIKit;\n#endif\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class MobileServiceUIAuthentication : MobileServiceAuthentication\n    {\n        private readonly RectangleF rect;\n        private readonly object view;\n\n        public MobileServiceUIAuthentication(RectangleF rect, object view, IMobileServiceClient client, string providerName, IDictionary<string, string> parameters)\n            : base(client, providerName, parameters)\n        {\n            this.rect = rect;\n            this.view = view;\n        }\n\n        protected override Task<string> LoginAsyncOverride()\n        {\n            var tcs = new TaskCompletionSource<string>();\n\n            var auth = new WebRedirectAuthenticator(StartUri, EndUri);\n            auth.ShowUIErrors = false;\n            auth.ClearCookiesBeforeLogin = false;\n\n            UIViewController c = auth.GetUI();\n\n            UIViewController controller = null;\n            UIPopoverController popover = null;\n\n            auth.Error += (o, e) =>\n            {\n                NSAction completed = () =>\n                {\n                    Exception ex = e.Exception ?? new Exception(e.Message);\n                    tcs.TrySetException(ex);\n                };\n\n                if (controller != null)\n                    controller.DismissViewController(true, completed);\n                if (popover != null)\n                {\n                    popover.Dismiss(true);\n                    completed();\n                }\n            };\n\n            auth.Completed += (o, e) =>\n            {\n                NSAction completed = () =>\n                {\n                    if (!e.IsAuthenticated)\n                        tcs.TrySetException(new InvalidOperationException(\"Authentication was cancelled by the user.\"));\n                    else\n                        tcs.TrySetResult(e.Account.Properties[\"token\"]);\n                };\n\n                if (controller != null)\n                    controller.DismissViewController(true, completed);\n                if (popover != null)\n                {\n                    popover.Dismiss(true);\n                    completed();\n                }\n            };\n\n            controller = view as UIViewController;\n            if (controller != null)\n            {\n                controller.PresentViewController(c, true, null);\n            }\n            else\n            {\n                UIView v = view as UIView;\n                UIBarButtonItem barButton = view as UIBarButtonItem;\n\n                popover = new UIPopoverController(c);\n\n                if (barButton != null)\n                    popover.PresentFromBarButtonItem(barButton, UIPopoverArrowDirection.Any, true);\n                else\n                    popover.PresentFromRect(rect, v, UIPopoverArrowDirection.Any, true);\n            }\n\n            return tcs.Task;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/Extensions/MobileServiceClientExtensions.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Drawing;\nusing System.Threading.Tasks;\n#if __UNIFIED__\nusing UIKit;\n#else\nusing MonoTouch.UIKit;\n#endif\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Extension methods for UI-based login.\n    /// </summary>\n    public static class MobileServiceClientExtensions\n    {\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"viewController\" type=\"MonoTouch.UIKit.UIViewController\">\n        /// UIViewController used to display modal login UI on iPhone/iPods.\n        /// </param>\n        /// <param name=\"provider\" type=\"MobileServiceAuthenticationProvider\">\n        /// Authentication provider to use.\n        /// </param>        \n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, UIViewController viewController, MobileServiceAuthenticationProvider provider)\n        {\n            return LoginAsync(client, viewController, provider, parameters: null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"viewController\" type=\"MonoTouch.UIKit.UIViewController\">\n        /// UIViewController used to display modal login UI on iPhone/iPods.\n        /// </param>\n        /// <param name=\"provider\" type=\"MobileServiceAuthenticationProvider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, UIViewController viewController, MobileServiceAuthenticationProvider provider, IDictionary<string, string> parameters)\n        {\n            return LoginAsync(client, default(RectangleF), viewController, provider.ToString(), parameters);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"viewController\" type=\"MonoTouch.UIKit.UIViewController\">\n        /// UIViewController used to display modal login UI on iPhone/iPods.\n        /// </param>\n        /// <param name=\"provider\" type=\"string\">\n        /// The name of the authentication provider to use.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, UIViewController viewController, string provider)\n        {\n            return LoginAsync(client, viewController, provider, parameters: null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"viewController\" type=\"MonoTouch.UIKit.UIViewController\">\n        /// UIViewController used to display modal login UI on iPhone/iPods.\n        /// </param>\n        /// <param name=\"provider\" type=\"string\">\n        /// The name of the authentication provider to use.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, UIViewController viewController, string provider, IDictionary<string, string> parameters)\n        {\n            return LoginAsync(client, default(RectangleF), viewController, provider, parameters);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"rectangle\" type=\"System.Drawing.RectangleF\">\n        /// The area in <paramref name=\"view\"/> to anchor to.\n        /// </param>\n        /// <param name=\"view\" type=\"MonoTouch.UIKit.UIView\">\n        /// UIView used to display a popover from on iPad.\n        /// </param>\n        /// <param name=\"provider\" type=\"MobileServiceAuthenticationProvider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, RectangleF rectangle, UIView view, MobileServiceAuthenticationProvider provider)\n        {\n            return LoginAsync(client, rectangle, view, provider, parameters: null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"rectangle\" type=\"System.Drawing.RectangleF\">\n        /// The area in <paramref name=\"view\"/> to anchor to.\n        /// </param>\n        /// <param name=\"view\" type=\"MonoTouch.UIKit.UIView\">\n        /// UIView used to display a popover from on iPad.\n        /// </param>\n        /// <param name=\"provider\" type=\"MobileServiceAuthenticationProvider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, RectangleF rectangle, UIView view, MobileServiceAuthenticationProvider provider, IDictionary<string, string> parameters)\n        {\n            return LoginAsync(client, rectangle, (object)view, provider.ToString(), parameters);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"rectangle\" type=\"System.Drawing.RectangleF\">\n        /// The area in <paramref name=\"view\"/> to anchor to.\n        /// </param>\n        /// <param name=\"view\" type=\"MonoTouch.UIKit.UIView\">\n        /// UIView used to display a popover from on iPad.\n        /// </param>\n        /// <param name=\"provider\" type=\"string\">\n        /// The name of the authentication provider to use.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, RectangleF rectangle, UIView view, string provider)\n        {\n            return LoginAsync(client, rectangle, view, provider, parameters: null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"rectangle\" type=\"System.Drawing.RectangleF\">\n        /// The area in <paramref name=\"view\"/> to anchor to.\n        /// </param>\n        /// <param name=\"view\" type=\"MonoTouch.UIKit.UIView\">\n        /// UIView used to display a popover from on iPad.\n        /// </param>\n        /// <param name=\"provider\" type=\"string\">\n        /// The name of the authentication provider to use.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, RectangleF rectangle, UIView view, string provider, IDictionary<string, string> parameters)\n        {\n            return LoginAsync(client, rectangle, (object)view, provider, parameters);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"barButtonItem\" type=\"MonoTouch.UIKit.UIBarButtonItem\">\n        /// UIBarButtonItem used to display a popover from on iPad.\n        /// </param>\n        /// <param name=\"provider\" type=\"MobileServiceAuthenticationProvider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, UIBarButtonItem barButtonItem, MobileServiceAuthenticationProvider provider)\n        {\n            return LoginAsync(client, barButtonItem, provider, parameters: null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"barButtonItem\" type=\"MonoTouch.UIKit.UIBarButtonItem\">\n        /// UIBarButtonItem used to display a popover from on iPad.\n        /// </param>\n        /// <param name=\"provider\" type=\"MobileServiceAuthenticationProvider\">\n        /// Authentication provider to use.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, UIBarButtonItem barButtonItem, MobileServiceAuthenticationProvider provider, IDictionary<string, string> parameters)\n        {\n            return LoginAsync(client, default(RectangleF), barButtonItem, provider.ToString(), parameters);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"barButtonItem\" type=\"MonoTouch.UIKit.UIBarButtonItem\">\n        /// UIBarButtonItem used to display a popover from on iPad.\n        /// </param>\n        /// <param name=\"provider\" type=\"string\">\n        /// The name of the authentication provider to use.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, UIBarButtonItem barButtonItem, string provider)\n        {\n            return LoginAsync(client, barButtonItem, provider, parameters: null);\n        }\n\n        /// <summary>\n        /// Log a user into a Mobile Services application given a provider name.\n        /// </summary>\n        /// <param name=\"client\" type=\"Microsoft.WindowsAzure.MobileServices.IMobileServiceClient\">\n        /// The MobileServiceClient instance to login with\n        /// </param>\n        /// <param name=\"barButtonItem\" type=\"MonoTouch.UIKit.UIBarButtonItem\">\n        /// UIBarButtonItem used to display a popover from on iPad.\n        /// </param>\n        /// <param name=\"provider\" type=\"string\">\n        /// The name of the authentication provider to use.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <param name=\"parameters\">\n        /// Provider specific extra parameters that are sent as query string parameters to login endpoint.\n        /// </param>\n        /// <returns>\n        /// Task that will complete when the user has finished authentication.\n        /// </returns>\n        public static Task<MobileServiceUser> LoginAsync(this IMobileServiceClient client, UIBarButtonItem barButtonItem, string provider, IDictionary<string, string> parameters)\n        {\n            return LoginAsync(client, default(RectangleF), barButtonItem, provider, parameters);\n        }\n\n        internal static Task<MobileServiceUser> LoginAsync(IMobileServiceClient client, RectangleF rect, object view, string provider, IDictionary<string, string> parameters)\n        {\n            var auth = new MobileServiceUIAuthentication(rect, view, client, provider, parameters);\n            return auth.LoginAsync();\n        }\n\n        /// <summary>\n        /// Extension method to get a <see cref=\"Push\"/> object made from an existing <see cref=\"MobileServiceClient\"/>.\n        /// </summary>\n        /// <param name=\"client\">\n        /// The <see cref=\"MobileServiceClient\"/> to create with.\n        /// </param>\n        /// <returns>\n        /// The <see cref=\"Push\"/> object used for registering for notifications.\n        /// </returns>\n        public static Push GetPush(this MobileServiceClient client)\n        {\n            return new Push(client);\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/Microsoft.WindowsAzure.Mobile.Ext.iOS-Classic.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),Microsoft.WindowsAzure.Mobile.Build.msbuild))\\tools\\Microsoft.WindowsAzure.Mobile.Build.settings.targets\" Condition=\"$(CmdLine) != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{9D2109B6-F005-4419-B9DB-8FA2A4514D28}</ProjectGuid>\n    <ProjectTypeGuids>{6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices</RootNamespace>\n    <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Ext</AssemblyName>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\classic\\Debug</OutputPath>\n    <IntermediateOutputPath>obj\\classic\\Debug</IntermediateOutputPath>\n    <DefineConstants>DEBUG;__IOS__;__MOBILE__;PLATFORM_IOS;XAMARIN_AUTH_INTERNAL</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchDebug>true</MtouchDebug>\n    <CodesignKey>iPhone Developer</CodesignKey>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\classic\\Release</OutputPath>\n    <IntermediateOutputPath>obj\\classic\\Release</IntermediateOutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <DocumentationFile>bin\\iPhone\\Release\\Microsoft.WindowsAzure.Mobile.Ext.xml</DocumentationFile>\n    <DefineConstants>__IOS__;__MOBILE__;PLATFORM_IOS;XAMARIN_AUTH_INTERNAL</DefineConstants>\n    <DebugSymbols>true</DebugSymbols>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\..\\..\\managed\\src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\ExpressionUtility\\PartialEvaluator.cs\">\n      <Link>ExpressionUtility\\PartialEvaluator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\..\\managed\\src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\ExpressionUtility\\VisitorHelper.cs\">\n      <Link>ExpressionUtility\\VisitorHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\..\\managed\\src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Platform\\ExpressionUtility.cs\">\n      <Link>Platform\\ExpressionUtility.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.iOS\\ACAccountWrapper.cs\">\n      <Link>Auth\\iOS\\ACAccountWrapper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.iOS\\FormAuthenticatorController.cs\">\n      <Link>Auth\\iOS\\FormAuthenticatorController.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.iOS\\KeyChainAccountStore.cs\">\n      <Link>Auth\\iOS\\KeyChainAccountStore.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.iOS\\ProgressLabel.cs\">\n      <Link>Auth\\iOS\\ProgressLabel.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.iOS\\UIViewControllerEx.cs\">\n      <Link>Auth\\iOS\\UIViewControllerEx.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.iOS\\WebAuthenticatorController.cs\">\n      <Link>Auth\\iOS\\WebAuthenticatorController.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.Android\\ExpressionUtility\\ExpressionVisitor.cs\">\n      <Link>ExpressionUtility\\ExpressionVisitor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\Account.cs\">\n      <Link>Auth\\Account.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\AccountStore.cs\">\n      <Link>Auth\\AccountStore.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\Authenticator.cs\">\n      <Link>Auth\\Authenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\AuthException.cs\">\n      <Link>Auth\\AuthException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\ExceptionEx.cs\">\n      <Link>Auth\\ExceptionEx.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\FormAuthenticator.cs\">\n      <Link>Auth\\FormAuthenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth1.cs\">\n      <Link>Auth\\OAuth1.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth1Authenticator.cs\">\n      <Link>Auth\\OAuth1Authenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth1Request.cs\">\n      <Link>Auth\\OAuth1Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth2Authenticator.cs\">\n      <Link>Auth\\OAuth2Authenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth2Request.cs\">\n      <Link>Auth\\OAuth2Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\Request.cs\">\n      <Link>Auth\\Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\Response.cs\">\n      <Link>Auth\\Response.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JavaScriptReader.cs\">\n      <Link>Auth\\Json\\JavaScriptReader.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonArray.cs\">\n      <Link>Auth\\Json\\JsonArray.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonObject.cs\">\n      <Link>Auth\\Json\\JsonObject.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonPrimitive.cs\">\n      <Link>Auth\\Json\\JsonPrimitive.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonType.cs\">\n      <Link>Auth\\Json\\JsonType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonValue.cs\">\n      <Link>Auth\\Json\\JsonValue.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\WebAuthenticator.cs\">\n      <Link>Auth\\WebAuthenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\WebEx.cs\">\n      <Link>Auth\\WebEx.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\WebRedirectAuthenticator.cs\">\n      <Link>Auth\\WebRedirectAuthenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\WebUtilities.cs\">\n      <Link>Auth\\WebUtilities.cs</Link>\n    </Compile>\n    <Compile Include=\"Authentication\\MobileServiceUIAuthentication.cs\" />\n    <Compile Include=\"Extensions\\MobileServiceClientExtensions.cs\" />\n    <Compile Include=\"Platform\\ApplicationStorage.cs\" />\n    <Compile Include=\"Platform\\CurrentPlatform.cs\" />\n    <Compile Include=\"Platform\\PlatformInformation.cs\" />\n    <Compile Include=\"Push\\Push.cs\" />\n    <Compile Include=\"Platform\\PushUtility.cs\" />\n    <Compile Include=\"Push\\ApnsRegistration.cs\" />\n    <Compile Include=\"Push\\ApnsTemplateRegistration.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"monotouch\" />\n    <Reference Include=\"Newtonsoft.Json\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monotouch\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monotouch\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-E36E-4190-8714-5BD2665859FB}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Xamarin\\iOS\\Xamarin.MonoTouch.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n</Project>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/Microsoft.WindowsAzure.Mobile.Ext.iOS.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),Microsoft.WindowsAzure.Mobile.Build.msbuild))\\tools\\Microsoft.WindowsAzure.Mobile.Build.settings.targets\" Condition=\"$(CmdLine) != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{A871B137-83A8-4E9B-913D-30EE0288E161}</ProjectGuid>\n    <ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices</RootNamespace>\n    <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Ext</AssemblyName>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhone\\Debug</OutputPath>\n    <DefineConstants>DEBUG;__IOS__;__MOBILE__;PLATFORM_IOS;XAMARIN_AUTH_INTERNAL;__UNIFIED__</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchDebug>true</MtouchDebug>\n    <CodesignKey>iPhone Developer</CodesignKey>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhone\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <DocumentationFile>bin\\iPhone\\Release\\Microsoft.WindowsAzure.Mobile.Ext.xml</DocumentationFile>\n    <DefineConstants>__IOS__;__MOBILE__;PLATFORM_IOS;XAMARIN_AUTH_INTERNAL;__UNIFIED__</DefineConstants>\n    <DebugSymbols>true</DebugSymbols>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\..\\..\\managed\\src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\ExpressionUtility\\PartialEvaluator.cs\">\n      <Link>ExpressionUtility\\PartialEvaluator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\..\\managed\\src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\ExpressionUtility\\VisitorHelper.cs\">\n      <Link>ExpressionUtility\\VisitorHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\..\\..\\managed\\src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Platform\\ExpressionUtility.cs\">\n      <Link>Platform\\ExpressionUtility.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.iOS\\ACAccountWrapper.cs\">\n      <Link>Auth\\iOS\\ACAccountWrapper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.iOS\\FormAuthenticatorController.cs\">\n      <Link>Auth\\iOS\\FormAuthenticatorController.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.iOS\\KeyChainAccountStore.cs\">\n      <Link>Auth\\iOS\\KeyChainAccountStore.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.iOS\\ProgressLabel.cs\">\n      <Link>Auth\\iOS\\ProgressLabel.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.iOS\\UIViewControllerEx.cs\">\n      <Link>Auth\\iOS\\UIViewControllerEx.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth.iOS\\WebAuthenticatorController.cs\">\n      <Link>Auth\\iOS\\WebAuthenticatorController.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.Android\\ExpressionUtility\\ExpressionVisitor.cs\">\n      <Link>ExpressionUtility\\ExpressionVisitor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\Account.cs\">\n      <Link>Auth\\Account.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\AccountStore.cs\">\n      <Link>Auth\\AccountStore.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\Authenticator.cs\">\n      <Link>Auth\\Authenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\AuthException.cs\">\n      <Link>Auth\\AuthException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\ExceptionEx.cs\">\n      <Link>Auth\\ExceptionEx.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\FormAuthenticator.cs\">\n      <Link>Auth\\FormAuthenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth1.cs\">\n      <Link>Auth\\OAuth1.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth1Authenticator.cs\">\n      <Link>Auth\\OAuth1Authenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth1Request.cs\">\n      <Link>Auth\\OAuth1Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth2Authenticator.cs\">\n      <Link>Auth\\OAuth2Authenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\OAuth2Request.cs\">\n      <Link>Auth\\OAuth2Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\Request.cs\">\n      <Link>Auth\\Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\Response.cs\">\n      <Link>Auth\\Response.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JavaScriptReader.cs\">\n      <Link>Auth\\Json\\JavaScriptReader.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonArray.cs\">\n      <Link>Auth\\Json\\JsonArray.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonObject.cs\">\n      <Link>Auth\\Json\\JsonObject.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonPrimitive.cs\">\n      <Link>Auth\\Json\\JsonPrimitive.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonType.cs\">\n      <Link>Auth\\Json\\JsonType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\System.Json\\JsonValue.cs\">\n      <Link>Auth\\Json\\JsonValue.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\WebAuthenticator.cs\">\n      <Link>Auth\\WebAuthenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\WebEx.cs\">\n      <Link>Auth\\WebEx.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\WebRedirectAuthenticator.cs\">\n      <Link>Auth\\WebRedirectAuthenticator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\External\\Xamarin.Auth\\src\\Xamarin.Auth\\WebUtilities.cs\">\n      <Link>Auth\\WebUtilities.cs</Link>\n    </Compile>\n    <Compile Include=\"Authentication\\MobileServiceUIAuthentication.cs\" />\n    <Compile Include=\"Extensions\\MobileServiceClientExtensions.cs\" />\n    <Compile Include=\"Platform\\ApplicationStorage.cs\" />\n    <Compile Include=\"Platform\\CurrentPlatform.cs\" />\n    <Compile Include=\"Platform\\PlatformInformation.cs\" />\n    <Compile Include=\"Push\\Push.cs\" />\n    <Compile Include=\"Platform\\PushUtility.cs\" />\n    <Compile Include=\"Push\\ApnsRegistration.cs\" />\n    <Compile Include=\"Push\\ApnsTemplateRegistration.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"Xamarin.iOS\" />\n    <Reference Include=\"Newtonsoft.Json\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monotouch\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monotouch\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-E36E-4190-8714-5BD2665859FB}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Xamarin\\iOS\\Xamarin.iOS.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n</Project>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/Platform/ApplicationStorage.cs",
    "content": "﻿using System;\n\n#if __UNIFIED__\nusing Foundation;\n#else\nusing MonoTouch.Foundation;\n#endif\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class ApplicationStorage : IApplicationStorage\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ApplicationStorage\"/>.\n        /// </summary>\n        private static readonly IApplicationStorage instance = new ApplicationStorage();\n\n        private ApplicationStorage()\n            : this(string.Empty)\n        {\n        }\n\n        internal ApplicationStorage(string name)\n        {\n            this.StoragePrefix = name;\n        }\n\n        private string StoragePrefix { get; set; }\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"ApplicationStorage\"/>.\n        /// </summary>\n        internal static IApplicationStorage Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        public bool TryReadSetting (string name, out object value)\n        {\n            if (string.IsNullOrWhiteSpace(name))\n            {\n                throw new ArgumentException(\"An application setting name must be provided. Null, empty or whitespace only names are not allowed.\", \"name\");\n            }\n\n            value = null;\n\n            var defaults = NSUserDefaults.StandardUserDefaults;\n            string svalue = defaults.StringForKey(string.Concat(this.StoragePrefix, name));\n            if (svalue == null)\n            {\n                return false;\n            }\n\n            try \n            {\n                int sepIndex = svalue.IndexOf (\":\");\n                string valueStr = svalue.Substring (sepIndex + 1);\n                TypeCode type = (TypeCode) Enum.Parse (typeof (TypeCode), svalue.Substring (0, sepIndex));\n                value = Convert.ChangeType (valueStr, type);\n            }\n            catch (Exception)\n            {\n                return false;\n            }\n\n            return true;\n        }\n\n        public void WriteSetting (string name, object value)\n        {\n            if (string.IsNullOrWhiteSpace(name))\n            {\n                throw new ArgumentException(\"An application setting name must be provided. Null, empty or whitespace only names are not allowed.\", \"name\");\n            }\n\n            var defaults = NSUserDefaults.StandardUserDefaults;\n            if (value == null)\n            {\n                defaults.RemoveObject(string.Concat(this.StoragePrefix, name));\n                return;\n            }\n\n            string svalue;\n\n            TypeCode type = Type.GetTypeCode(value.GetType());\n            if (type == TypeCode.Object || type == TypeCode.DBNull)\n            {\n                throw new ArgumentException(\"Settings of type \" + type + \" are not supported\");\n            }\n            else\n            {\n                svalue = value.ToString();\n            }\n\n            defaults.SetString(type + \":\" + svalue, string.Concat(this.StoragePrefix, name));            \n        }\n\n        public void Save()\n        {\n            NSUserDefaults.StandardUserDefaults.Synchronize();\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/Platform/CurrentPlatform.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Provides access to platform specific functionality for the current client platform.\n    /// </summary>\n    public class CurrentPlatform : IPlatform\n    {\n        /// <summary>\n        /// You must call this method from your application in order to ensure\n        /// that this platform specific assembly is included in your app.\n        /// </summary>\n        public static void Init()\n        {\n        }\n\n        IApplicationStorage IPlatform.ApplicationStorage\n        {\n            get { return ApplicationStorage.Instance; }\n        }\n\n        IPlatformInformation IPlatform.PlatformInformation\n        {\n            get { return PlatformInformation.Instance; }\n        }\n\n        IExpressionUtility IPlatform.ExpressionUtility\n        {\n            get { return ExpressionUtility.Instance; }\n        }\n\n        IPushUtility IPlatform.PushUtility { get { return Microsoft.WindowsAzure.MobileServices.PushUtility.Instance; } }\n\n        IApplicationStorage IPlatform.GetNamedApplicationStorage(string name)\n        {\n            return new ApplicationStorage(name);\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/Platform/PlatformInformation.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Reflection;\n#if __UNIFIED__\nusing UIKit;\n#else\nusing MonoTouch.UIKit;\n#endif\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class PlatformInformation : IPlatformInformation\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"PlatformInformation\"/>.\n        /// </summary>\n        private static IPlatformInformation instance = new PlatformInformation();\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"PlatformInformation\"/>.\n        /// </summary>\n        public static IPlatformInformation Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        public string OperatingSystemArchitecture\n        {\n            get { return PlatformID.MacOSX.ToString(); }\n        }\n\n        public string OperatingSystemName\n        {\n            get { return \"iOS\"; }\n        }\n\n        public string OperatingSystemVersion\n        {\n            get { return UIDevice.CurrentDevice.SystemVersion; }\n        }\n\n        public bool IsEmulator\n        {\n            get\n            {\n                return (UIDevice.CurrentDevice.Model.ToLower().Contains (\"simulator\"));\n            }\n        }\n\n        public string Version\n        {\n            get\n            {\n                return this.GetVersionFromAssemblyFileVersion();\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/Platform/PushUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    internal class PushUtility : IPushUtility\n    {\n        /// <summary>\n        /// A singleton instance of the <see cref=\"PushUtility\"/>.\n        /// </summary>\n        private static readonly IPushUtility instance = new PushUtility();\n\n        /// <summary>\n        /// A singleton instance of the <see cref=\"PushUtility\"/>.\n        /// </summary>\n        public static IPushUtility Instance\n        {\n            get\n            {\n                return instance;\n            }\n        }\n\n        public Registration GetNewNativeRegistration()\n        {\n            return new ApnsRegistration();\n        }\n\n        public Registration GetNewNativeRegistration(string deviceId, IEnumerable<string> tags)\n        {\n            return new ApnsRegistration(deviceId, tags);\n        }\n\n        public Registration GetNewTemplateRegistration()\n        {\n            return new ApnsTemplateRegistration();\n        }\n\n        public Registration GetNewTemplateRegistration(string deviceId, string bodyTemplate, string templateName)\n        {\n            return new ApnsTemplateRegistration(deviceId, bodyTemplate, null, templateName);\n        }\n\n        public string GetPlatform()\n        {\n            return \"apns\";\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Microsoft.WindowsAzure.MobileServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.Ext\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Microsoft Corporation\")]\n[assembly: AssemblyProduct(\"Microsoft Azure Mobile Services SDK\")]\n[assembly: AssemblyCopyright(\"© Microsoft Corporation. All rights reserved.\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n[assembly: Preserve]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"5D31CAB1-09F7-45A6-B7C4-08F48534343B\")]\n\n\n#if Sign\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n[assembly: InternalsVisibleTo(\"MicrosoftWindowsAzureMobileiOSTest, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9\")]\n#else\n[assembly: InternalsVisibleTo(\"Microsoft.WindowsAzure.Mobile\")]\n[assembly: InternalsVisibleTo(\"MicrosoftWindowsAzureMobileiOSTest\")]\n#endif\n"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/Push/ApnsRegistration.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\nusing System;\nusing System.Collections.Generic;\n\n#if __UNIFIED__\nusing Foundation;\n#else\nusing MonoTouch.Foundation;\n#endif\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Registration is used to define a target that is registered for notifications\n    /// </summary>\n    [JsonObject(MemberSerialization.OptIn)]\n    public class ApnsRegistration : Registration\n    {\n        internal ApnsRegistration()\n        {\n        }\n\n        /// <summary>\n        /// PLEASE USE NSData overload of this constructor!! Create a default Registration for a deviceToken\n        /// </summary>\n        /// <param name=\"deviceToken\">The device token</param>\n        public ApnsRegistration(string deviceToken)\n            : this(deviceToken, null)\n        {\n        }\n\n        /// <summary>\n        /// Create a default Registration for a deviceToken\n        /// </summary>\n        /// <param name=\"deviceToken\">The device token</param>\n        public ApnsRegistration(NSData deviceToken)\n            : this(deviceToken, null)\n        {\n        }        \n\n        /// <summary>\n        /// PLEASE USE NSData overload of this constructor!! Create a default Registration for a deviceToken with specific tags\n        /// </summary>\n        /// <param name=\"deviceToken\">The device token</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        public ApnsRegistration(string deviceToken, IEnumerable<string> tags)\n            : base(TrimDeviceToken(deviceToken), tags)\n        {\n        }\n\n        /// <summary>\n        /// Create a default Registration for a deviceToken with specific tags\n        /// </summary>\n        /// <param name=\"deviceToken\">The device token</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        public ApnsRegistration(NSData deviceToken, IEnumerable<string> tags)\n            : base(ApnsRegistration.ParseDeviceToken(deviceToken), tags)\n        {            \n        }\n\n        internal static string TrimDeviceToken(string deviceToken)\n        {\n            if (deviceToken == null)\n            {\n                throw new ArgumentNullException(\"deviceToken\");\n            }\n\n            return deviceToken.Trim('<','>').Replace(\" \", string.Empty).ToUpperInvariant();\n        }\n\n        internal static string ParseDeviceToken(NSData deviceToken)\n        {\n            if (deviceToken == null)\n            {\n                throw new ArgumentNullException(\"deviceToken\");\n            }\n\n            return TrimDeviceToken(deviceToken.Description);\n        }\n\n        /// <summary>\n        /// The deviceToken\n        /// </summary>\n        public string deviceToken\n        {\n            get\n            {\n                return this.PushHandle;\n            }\n\n            set\n            {\n                this.PushHandle = TrimDeviceToken(value);\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/Push/ApnsTemplateRegistration.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Globalization;\nusing Newtonsoft.Json;\n\n#if __UNIFIED__\nusing Foundation;\n#else\nusing MonoTouch.Foundation;\n#endif\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// Registration is used to define a target that is registered for notifications. A <see cref=\"ApnsTemplateRegistration\"/> allows the client application\n    /// to define the format of the registration.\n    /// </summary>\n    [JsonObject(MemberSerialization.OptIn)]\n    public sealed class ApnsTemplateRegistration : ApnsRegistration\n    {\n        internal ApnsTemplateRegistration()\n        {\n        }\n\n        /// <summary>\n        /// PLEASE USE NSData overload of this constructor!! Create a <see cref=\"ApnsTemplateRegistration\"/>\n        /// </summary>\n        /// <param name=\"deviceToken\">The device token</param>\n        /// <param name=\"jsonTemplate\">The template json in string format</param>\n        /// <param name=\"expiry\">The string defining the expiry template</param>\n        /// <param name=\"templateName\">The template name</param>\n        public ApnsTemplateRegistration(string deviceToken, string jsonTemplate, string expiry, string templateName)\n            : this(deviceToken, jsonTemplate, expiry, templateName, null)\n        {\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"ApnsTemplateRegistration\"/>\n        /// </summary>\n        /// <param name=\"deviceToken\">The device token</param>\n        /// <param name=\"jsonTemplate\">The template json in string format</param>\n        /// <param name=\"expiry\">The string defining the expiry template</param>\n        /// <param name=\"templateName\">The template name</param>\n        public ApnsTemplateRegistration(NSData deviceToken, string jsonTemplate, string expiry, string templateName)\n            : this(deviceToken, jsonTemplate, expiry, templateName, null)\n        {\n        }\n\n        /// <summary>\n        /// PLEASE USE NSData overload of this constructor!! Create a <see cref=\"ApnsTemplateRegistration\"/>\n        /// </summary>\n        /// <param name=\"deviceToken\">The device token</param>\n        /// <param name=\"jsonTemplate\">The template json in string format</param>\n        /// <param name=\"expiry\">The string defining the expiry template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags that restrict which notifications this registration will receive</param>\n        public ApnsTemplateRegistration(string deviceToken, string jsonTemplate, string expiry, string templateName, IEnumerable<string> tags) \n            : base(deviceToken, tags)\n        {\n            if (string.IsNullOrWhiteSpace(templateName))\n            {\n                throw new ArgumentNullException(\"templateName\");\n            }\n\n            if (templateName.Equals(Registration.NativeRegistrationName))\n            {\n                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, \"Template name conflicts with reserved name '{0}'.\", Registration.NativeRegistrationName));\n            }\n\n            if (templateName.Contains(\":\") || templateName.Contains(\";\"))\n            {\n                throw new ArgumentException(\"Template name cannot contain ';' or ':'.\");\n            }\n\n            if (string.IsNullOrWhiteSpace(jsonTemplate))\n            {\n                throw new ArgumentNullException(\"jsonTemplate\");\n            }\n\n            this.TemplateName = templateName;            \n            this.BodyTemplate = jsonTemplate;\n            this.Expiry = expiry;\n        }\n\n        /// <summary>\n        /// Create a <see cref=\"ApnsTemplateRegistration\"/>\n        /// </summary>\n        /// <param name=\"deviceToken\">The device token</param>\n        /// <param name=\"jsonTemplate\">The template json in string format</param>\n        /// <param name=\"expiry\">The string defining the expiry template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags that restrict which notifications this registration will receive</param>\n        public ApnsTemplateRegistration(NSData deviceToken, string jsonTemplate, string expiry, string templateName, IEnumerable<string> tags)\n            : base(deviceToken, tags)\n        {\n            if (string.IsNullOrWhiteSpace(templateName))\n            {\n                throw new ArgumentNullException(\"templateName\");\n            }\n\n            if (templateName.Equals(Registration.NativeRegistrationName))\n            {\n                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, \"Template name conflicts with reserved name '{0}'.\", Registration.NativeRegistrationName));\n            }\n\n            if (templateName.Contains(\":\") || templateName.Contains(\";\"))\n            {\n                throw new ArgumentException(\"Template name cannot contain ';' or ':'.\");\n            }\n\n            if (string.IsNullOrWhiteSpace(jsonTemplate))\n            {\n                throw new ArgumentNullException(\"jsonTemplate\");\n            }\n\n            this.TemplateName = templateName;\n            this.BodyTemplate = jsonTemplate;\n            this.Expiry = expiry;\n        }\n\n\n        /// <summary>\n        /// Get templateName\n        /// </summary>\n        [JsonProperty(PropertyName = \"templateName\")]\n        public string TemplateName { get; internal set; }\n\n        /// <summary>\n        /// Gets jsonTemplate as string\n        /// </summary>\n        [JsonProperty(PropertyName = \"templateBody\")]\n        public string BodyTemplate { get; internal set; }\n\n        /// <summary>\n        /// Gets or sets expiry as string\n        /// </summary>\n        [JsonProperty(PropertyName = \"expiry\")]\n        public string Expiry { get; set; }\n\n        /// <summary>\n        /// The name of the registration used in local storage.\n        /// </summary>\n        public override string Name\n        {\n            get\n            {\n                return this.TemplateName;\n            }\n        }                \n    }    \n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/Push/Push.cs",
    "content": "﻿//------------------------------------------------------------\n// Copyright (c) Microsoft Corporation.  All rights reserved.\n//------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Threading.Tasks;\n\n    #if __UNIFIED__\n    using Foundation;\n    #else\n    using MonoTouch.Foundation;\n    #endif\n\n    /// <summary>\n    /// Define a class help to create/update/delete notification registrations\n    /// </summary>\n    public sealed class Push\n    {\n        internal readonly IRegistrationManager RegistrationManager;\n\n        internal Push(MobileServiceClient client)\n        {\n            if (client == null)\n            {\n                throw new ArgumentNullException(\"client\");\n            }\n            \n            var storageManager = new LocalStorageManager(client.ApplicationUri.Host);\n            var pushHttpClient = new PushHttpClient(client);\n            this.RegistrationManager = new RegistrationManager(pushHttpClient, storageManager);\n        }\n\n        internal Push(IRegistrationManager registrationManager)\n        {\n            if (registrationManager == null)\n            {\n                throw new ArgumentNullException(\"registrationManager\");\n            }\n\n            this.RegistrationManager = registrationManager;\n        }\n\n        /// <summary>\n        /// PLEASE USE NSData overload of this method!! Register a particular deviceToken\n        /// </summary>\n        /// <param name=\"deviceToken\">The deviceToken to register</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterNativeAsync(string deviceToken)\n        {\n            return this.RegisterNativeAsync(deviceToken, null);\n        }\n\n        /// <summary>\n        /// Register a particular deviceToken\n        /// </summary>\n        /// <param name=\"deviceToken\">The deviceToken to register</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterNativeAsync(NSData deviceToken)\n        {\n            return this.RegisterNativeAsync(deviceToken, null);\n        }\n\n        /// <summary>\n        /// PLEASE USE NSData overload of this method!! Register a particular deviceToken\n        /// </summary>\n        /// <param name=\"deviceToken\">The deviceToken to register</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterNativeAsync(string deviceToken, IEnumerable<string> tags)\n        {\n            if (string.IsNullOrWhiteSpace(deviceToken))\n            {\n                throw new ArgumentNullException(\"deviceToken\");\n            }\n\n            var registration = new ApnsRegistration(deviceToken, tags);\n            return this.RegistrationManager.RegisterAsync(registration);\n        }\n\n        /// <summary>\n        /// Register a particular deviceToken\n        /// </summary>\n        /// <param name=\"deviceToken\">The deviceToken to register</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterNativeAsync(NSData deviceToken, IEnumerable<string> tags)\n        {\n            if (deviceToken == null)\n            {\n                throw new ArgumentNullException(\"deviceToken\");\n            }\n\n            var registration = new ApnsRegistration(deviceToken, tags);\n            return this.RegistrationManager.RegisterAsync(registration);\n        } \n\n        /// <summary>\n        /// PLEASE USE NSData overload of this method!! Register a particular deviceToken with a template\n        /// </summary>\n        /// <param name=\"deviceToken\">The deviceToken to register</param>\n        /// <param name=\"jsonTemplate\">The string defining the template</param>\n        /// <param name=\"expiry\">The string defining the expiry template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterTemplateAsync(string deviceToken, string jsonTemplate, string expiry, string templateName)\n        {\n            return this.RegisterTemplateAsync(deviceToken, jsonTemplate, expiry, templateName, null);\n        }\n\n        /// <summary>\n        /// Register a particular deviceToken with a template\n        /// </summary>\n        /// <param name=\"deviceToken\">The deviceToken to register</param>\n        /// <param name=\"jsonTemplate\">The string defining the template</param>\n        /// <param name=\"expiry\">The string defining the expiry template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterTemplateAsync(NSData deviceToken, string jsonTemplate, string expiry, string templateName)\n        {\n            return this.RegisterTemplateAsync(deviceToken, jsonTemplate, expiry, templateName, null);\n        }\n\n        /// <summary>\n        /// PLEASE USE NSData overload of this method!! Register a particular deviceToken with a template\n        /// </summary>\n        /// <param name=\"deviceToken\">The deviceToken to register</param>\n        /// <param name=\"jsonTemplate\">The string defining the json template</param>\n        /// <param name=\"expiry\">The string defining the expiry template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterTemplateAsync(string deviceToken, string jsonTemplate, string expiry, string templateName, IEnumerable<string> tags)\n        {\n            if (string.IsNullOrWhiteSpace(deviceToken))\n            {\n                throw new ArgumentNullException(\"deviceToken\");\n            }\n\n            if (string.IsNullOrWhiteSpace(jsonTemplate))\n            {\n                throw new ArgumentNullException(\"jsonTemplate\");\n            }\n\n            if (string.IsNullOrWhiteSpace(templateName))\n            {\n                throw new ArgumentNullException(\"templateName\");\n            }\n\n            var registration = new ApnsTemplateRegistration(deviceToken, jsonTemplate, expiry, templateName, tags);\n            return this.RegistrationManager.RegisterAsync(registration);\n        }\n\n        /// <summary>\n        /// Register a particular deviceToken with a template\n        /// </summary>\n        /// <param name=\"deviceToken\">The deviceToken to register</param>\n        /// <param name=\"jsonTemplate\">The string defining the json template</param>\n        /// <param name=\"expiry\">The string defining the expiry template</param>\n        /// <param name=\"templateName\">The template name</param>\n        /// <param name=\"tags\">The tags to register to receive notifications from</param>\n        /// <returns>Task that completes when registration is complete</returns>\n        public Task RegisterTemplateAsync(NSData deviceToken, string jsonTemplate, string expiry, string templateName, IEnumerable<string> tags)\n        {\n            if (deviceToken == null)\n            {\n                throw new ArgumentNullException(\"deviceToken\");\n            }\n\n            if (string.IsNullOrWhiteSpace(jsonTemplate))\n            {\n                throw new ArgumentNullException(\"jsonTemplate\");\n            }\n\n            if (string.IsNullOrWhiteSpace(templateName))\n            {\n                throw new ArgumentNullException(\"templateName\");\n            }\n\n            var registration = new ApnsTemplateRegistration(deviceToken, jsonTemplate, expiry, templateName, tags);\n            return this.RegistrationManager.RegisterAsync(registration);\n        }\n\n        /// <summary>\n        /// Unregister any registrations previously registered from this device\n        /// </summary>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterNativeAsync()\n        {\n            return this.UnregisterTemplateAsync(Registration.NativeRegistrationName);\n        }\n\n        /// <summary>\n        /// Unregister any registrations with given templateName registered from this device\n        /// </summary>\n        /// <param name=\"templateName\">The template name</param>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterTemplateAsync(string templateName)\n        {\n            return this.RegistrationManager.UnregisterAsync(templateName);\n        }\n\n        /// <summary>\n        /// DEBUG-ONLY: PLEASE USE NSData overload of this method!! Unregister any registrations with given deviceToken\n        /// </summary>\n        /// <param name=\"deviceToken\">The device token</param>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterAllAsync(string deviceToken)\n        {\n            if (string.IsNullOrWhiteSpace(deviceToken))\n            {\n                throw new ArgumentNullException(\"deviceToken\");\n            }\n\n            return this.RegistrationManager.DeleteRegistrationsForChannelAsync(ApnsRegistration.TrimDeviceToken(deviceToken));\n        }\n\n        /// <summary>\n        /// DEBUG-ONLY: Unregister any registrations with given deviceToken\n        /// </summary>\n        /// <param name=\"deviceToken\">The device token</param>\n        /// <returns>Task that completes when unregister is complete</returns>\n        public Task UnregisterAllAsync(NSData deviceToken)\n        {\n            if (deviceToken == null)\n            {\n                throw new ArgumentNullException(\"deviceToken\");\n            }\n\n            return this.RegistrationManager.DeleteRegistrationsForChannelAsync(ApnsRegistration.ParseDeviceToken(deviceToken));\n        }\n\n        /// <summary>\n        /// Register for notifications\n        /// </summary>\n        /// <param name=\"registration\">The object defining the registration</param>\n        /// <returns>Task that will complete when the registration is completed</returns>\n        public Task RegisterAsync(Registration registration)\n        {\n            if (registration == null)\n            {\n                throw new ArgumentNullException(\"registration\");\n            }\n\n            if (string.IsNullOrWhiteSpace(registration.PushHandle))\n            {\n                throw new ArgumentNullException(\"registration.PushHandle\");\n            }\n\n            registration.PushHandle = ApnsRegistration.TrimDeviceToken(registration.PushHandle);\n            return this.RegistrationManager.RegisterAsync(registration);\n        }\n\n        /// <summary>\n        /// DEBUG-ONLY: PLEASE USE NSData overload of this method!! List the registrations made with the service for a deviceToken\n        /// </summary>\n        /// <param name=\"deviceToken\">The deviceToken to check for</param>\n        /// <returns>List of registrations</returns>\n        public Task<List<Registration>> ListRegistrationsAsync(string deviceToken)\n        {\n            return this.RegistrationManager.ListRegistrationsAsync(ApnsRegistration.TrimDeviceToken(deviceToken));\n        }\n\n        /// <summary>\n        /// DEBUG-ONLY: List the registrations made with the service for a deviceToken\n        /// </summary>\n        /// <param name=\"deviceToken\">The deviceToken to check for</param>\n        /// <returns>List of registrations</returns>\n        public Task<List<Registration>> ListRegistrationsAsync(NSData deviceToken)\n        {\n            return this.RegistrationManager.ListRegistrationsAsync(ApnsRegistration.ParseDeviceToken(deviceToken));\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.iOS/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"MonoTouch10\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"MonoTouch10\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"MonoTouch10\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"MonoTouch10\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <sectionGroup name=\"userSettings\" type=\"System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n      <section name=\"Microsoft.WindowsAzure.Mobile.Net45.Test.Settings\" type=\"System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" allowExeDefinition=\"MachineToLocalUser\" requirePermission=\"false\" />\n    </sectionGroup>\n  </configSections>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n  </startup>\n  <userSettings>\n    <Microsoft.WindowsAzure.Mobile.Net45.Test.Settings>\n      <setting name=\"MobileServiceRuntimeUrl\" serializeAs=\"String\">\n        <value />\n      </setting>\n      <setting name=\"MobileServiceRuntimeKey\" serializeAs=\"String\">\n        <value />\n      </setting>\n      <setting name=\"MobileServiceTags\" serializeAs=\"String\">\n        <value />\n      </setting>\n    </Microsoft.WindowsAzure.Mobile.Net45.Test.Settings>\n  </userSettings>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/App.xaml",
    "content": "﻿<Application x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             StartupUri=\"UI\\MainWindow.xaml\">\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n                <!-- \n                Styles that define common aspects of the platform look and feel\n                Required by Visual Studio project and item templates\n                 -->\n                <ResourceDictionary Source=\"Common/StandardStyles.xaml\"/>\n            </ResourceDictionary.MergedDictionaries>\n        </ResourceDictionary> \n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/App.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Data;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing Microsoft.WindowsAzure.MobileServices.Test;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Interaction logic for App.xaml\n    /// </summary>\n    public partial class App : Application\n    {\n        /// <summary>\n        /// Gets the test harness used by the application.\n        /// </summary>\n        public static TestHarness Harness { get; private set; }\n\n\n        /// <summary>\n        /// Initialize the test harness.\n        /// </summary>\n        static App()\n        {\n            ConsoleHelper.Attach();\n\n            Harness = new TestHarness();\n            Harness.LoadTestAssembly(typeof(MobileServiceSerializerTests).GetTypeInfo().Assembly);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/Common/StandardStyles.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <!-- TextBlock styles -->\n\n    <Style x:Key=\"BasicTextStyle\" TargetType=\"TextBlock\">\n        <Setter Property=\"Foreground\" Value=\"White\"/>\n        <Setter Property=\"FontSize\" Value=\"10\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style x:Key=\"BaselineTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"HeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"40\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-2\" Y=\"8\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"SubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"26.667\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"30\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"6\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"TitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiBold\"/>\n    </Style>\n\n    <Style x:Key=\"SubtitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n    </Style>\n\n    <Style x:Key=\"ItemTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\"/>\n    \n</ResourceDictionary>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/ConsoleHelper.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics.CodeAnalysis;\nusing System.IO;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public static class ConsoleHelper\n    {\n        [SuppressMessage(\"Microsoft.Design\", \"CA1060:MovePInvokesToNativeMethodsClass\"), DllImport(\"kernel32.dll\")]\n        private static extern bool AttachConsole(int dwProcessId);\n        private const int ParentProcess = -1;\n\n        private static StreamWriter consoleWriter;\n\n        public static void Attach()\n        {\n            consoleWriter = new StreamWriter(Console.OpenStandardOutput());\n            AttachConsole(ParentProcess);\n        }\n\n        public static void Flush()\n        {\n            consoleWriter.Flush();\n            Console.Out.Flush();\n        }\n\n        public static void Write(string format, params object[] args)\n        {\n            consoleWriter.Write(format, args);\n            Console.Write(format, args);\n        }\n\n        public static void WriteLine(string message)\n        {\n            consoleWriter.WriteLine(message);\n            Console.WriteLine(message);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/Microsoft.WindowsAzure.Mobile.Net45.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{7C1A9BC1-3E60-4673-AC08-AC8399032D49}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.Test</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Net45.Test</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <WarningLevel>4</WarningLevel>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xaml\">\n      <RequiredTargetFramework>4.0</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"WindowsBase\" />\n    <Reference Include=\"PresentationCore\" />\n    <Reference Include=\"PresentationFramework\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"Common\\StandardStyles.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"UI\\MainPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"UI\\TestPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"UI\\MainWindow.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\UI\\GroupDescription.cs\">\n      <Link>UI\\GroupDescription.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\UI\\TestDescription.cs\">\n      <Link>UI\\TestDescription.cs</Link>\n    </Compile>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"ConsoleHelper.cs\" />\n    <Compile Include=\"Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n      <DependentUpon>Settings.settings</DependentUpon>\n    </Compile>\n    <Compile Include=\"UI\\MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"UI\\TestPage.xaml.cs\">\n      <DependentUpon>TestPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"UI\\MainWindow.xaml.cs\">\n      <DependentUpon>MainWindow.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n    <AppDesigner Include=\"Properties\\\" />\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.Net45\\Microsoft.WindowsAzure.Mobile.Ext.Net45.csproj\">\n      <Project>{6c5430ce-1dee-422a-94e3-071eb25e7429}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.Net45</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{a2500bd2-a9a2-4085-9978-dee3675b02dd}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{d8bbc92a-b213-463b-911d-3a106f91d5f9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"PlatformTests\\\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Windows;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.Net45.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.Mobile.Net45.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n//In order to begin building localizable applications, set \n//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file\n//inside a <PropertyGroup>.  For example, if you are using US english\n//in your source files, set the <UICulture> to en-US.  Then uncomment\n//the NeutralResourceLanguage attribute below.  Update the \"en-US\" in\n//the line below to match the UICulture setting in the project file.\n\n//[assembly: NeutralResourcesLanguage(\"en-US\", UltimateResourceFallbackLocation.Satellite)]\n\n\n[assembly: ThemeInfo(\n    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located\n    //(used if a resource is not found in the page, \n    // or application resource dictionaries)\n    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located\n    //(used if a resource is not found in the page, \n    // app, or any theme specific resource dictionaries)\n)]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18033\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Microsoft.WindowsAzure.MobileServices.Test.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18033\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"11.0.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n        \n        [global::System.Configuration.UserScopedSettingAttribute()]\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n        [global::System.Configuration.DefaultSettingValueAttribute(\"\")]\n        public string MobileServiceRuntimeUrl {\n            get {\n                return ((string)(this[\"MobileServiceRuntimeUrl\"]));\n            }\n            set {\n                this[\"MobileServiceRuntimeUrl\"] = value;\n            }\n        }\n        \n        [global::System.Configuration.UserScopedSettingAttribute()]\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n        [global::System.Configuration.DefaultSettingValueAttribute(\"\")]\n        public string MobileServiceRuntimeKey {\n            get {\n                return ((string)(this[\"MobileServiceRuntimeKey\"]));\n            }\n            set {\n                this[\"MobileServiceRuntimeKey\"] = value;\n            }\n        }\n        \n        [global::System.Configuration.UserScopedSettingAttribute()]\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n        [global::System.Configuration.DefaultSettingValueAttribute(\"\")]\n        public string MobileServiceTags {\n            get {\n                return ((string)(this[\"MobileServiceTags\"]));\n            }\n            set {\n                this[\"MobileServiceTags\"] = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\" GeneratedClassNamespace=\"Microsoft.WindowsAzure.Mobile.Net45.Test\" GeneratedClassName=\"Settings\">\n  <Profiles />\n  <Settings>\n    <Setting Name=\"MobileServiceRuntimeUrl\" Type=\"System.String\" Scope=\"User\">\n      <Value Profile=\"(Default)\" />\n    </Setting>\n    <Setting Name=\"MobileServiceRuntimeKey\" Type=\"System.String\" Scope=\"User\">\n      <Value Profile=\"(Default)\" />\n    </Setting>\n    <Setting Name=\"MobileServiceTags\" Type=\"System.String\" Scope=\"User\">\n      <Value Profile=\"(Default)\" />\n    </Setting>\n  </Settings>\n</SettingsFile>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/UI/MainPage.xaml",
    "content": "﻿<Page x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.MainPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n      xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n      mc:Ignorable=\"d\" \n      d:DesignHeight=\"300\" d:DesignWidth=\"300\"\n\tTitle=\"MainPage\">\n\n    <Page.Resources>\n        <Style x:Key=\"SubheaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n            <Setter Property=\"FontSize\" Value=\"18\" />\n            <Setter Property=\"FontWeight\" Value=\"Bold\" />\n            <Setter Property=\"LineHeight\" Value=\"20\" />\n        </Style>\n        <Style x:Key=\"HeaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n            <Setter Property=\"Foreground\" Value=\"#0094ff\" />\n        </Style>\n        <Style x:Key=\"DialogStyle\" TargetType=\"Border\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"BorderBrush\" Value=\"White\" />\n            <Setter Property=\"BorderThickness\" Value=\"2\" />\n            <Setter Property=\"Padding\" Value=\"10\" />\n            <Setter Property=\"CornerRadius\" Value=\"2\" />\n        </Style>\n        <Style x:Key=\"LabelStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Right\" />\n        </Style>\n        <Style x:Key=\"InputStyle\" TargetType=\"TextBox\">\n            <Setter Property=\"MinWidth\" Value=\"400\" />\n            <Setter Property=\"Margin\" Value=\"5\" />\n        </Style>\n    </Page.Resources>\n    <Border>\n        <Grid Margin=\"20\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n            </Grid.RowDefinitions>\n            <TextBlock Grid.Row=\"0\" Style=\"{StaticResource SubheaderStyle}\">Microsoft Azure Mobile Services</TextBlock>\n            <TextBlock Grid.Row=\"1\"  Style=\"{StaticResource HeaderStyle}\">C# Client Library Tests</TextBlock>\n            <Border Grid.Row=\"2\" Style=\"{StaticResource DialogStyle}\">\n                <Grid>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\" />\n                        <ColumnDefinition Width=\"Auto\" />\n                    </Grid.ColumnDefinitions>\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                    </Grid.RowDefinitions>\n\n                    <TextBlock\n                      Grid.Row=\"0\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource LabelStyle}\"\n                      Text=\"Mobile Service Uri:\" />\n                    <TextBox\n                      x:Name=\"txtRuntimeUri\"\n                      Grid.Row=\"0\"\n                      Grid.Column=\"1\"\n                      Style=\"{StaticResource InputStyle}\" />\n\n                    <TextBlock\n                      Grid.Row=\"1\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource LabelStyle}\"\n                      Text=\"Mobile Service Key:\" />\n                    <TextBox\n                      x:Name=\"txtRuntimeKey\"\n                      Grid.Row=\"1\"\n                      Grid.Column=\"1\"\n                      Style=\"{StaticResource InputStyle}\" />\n\n                    <TextBlock\n                      Grid.Row=\"2\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource LabelStyle}\"\n                      Text=\"Tags:\" />\n                    <TextBox\n                      x:Name=\"txtTags\"\n                      Grid.Row=\"2\"\n                      Grid.Column=\"1\"\n                      Style=\"{StaticResource InputStyle}\" />\n\n                    <StackPanel\n                        Grid.Row=\"3\"\n                        Grid.Column=\"1\"\n                        HorizontalAlignment=\"Right\" Orientation=\"Horizontal\">\n\n                        <!--<Button\n                          x:Name=\"btnLoginTests\"                         \n                          Content=\"Login Tests\"\n                          MinWidth=\"100\"\n                          Click=\"ExecuteLoginTests\" />-->\n\n                        <Button\n                          x:Name=\"btnUnitTests\"\n                          Content=\"Unit Tests\"\n                          MinWidth=\"100\"\n                          Click=\"ExecuteUnitTests\" />\n                    </StackPanel>\n                </Grid>\n            </Border>\n        </Grid>\n    </Border>\n</Page>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/UI/MainPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Test setup UI page.\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        /// <summary>\n        /// Initializes a new instance of the MainPage class.\n        /// </summary>\n        public MainPage()\n        {\n            InitializeComponent();\n\n            string mobileServiceRuntimeURL = Settings.Default.MobileServiceRuntimeUrl;\n            string mobileServiceRuntimeKey = Settings.Default.MobileServiceRuntimeKey;\n            string tags = Settings.Default.MobileServiceTags;\n\n            txtRuntimeUri.Text = mobileServiceRuntimeURL ?? \"\";\n            txtRuntimeKey.Text = mobileServiceRuntimeKey ?? \"\";\n            txtTags.Text = tags ?? \"\";\n\n            Loaded += (s, e) =>\n            {\n                btnUnitTests.Focus();\n                string[] args = Environment.GetCommandLineArgs();\n                if (args.Length >= 2 && args[1] == \"/auto\")\n                {\n                    if (args.Length > 2)\n                    {\n                        mobileServiceRuntimeURL = args[2];\n                    }\n                    if (args.Length > 3)\n                    {\n                        mobileServiceRuntimeKey = args[3];\n                    }\n                    if (args.Length > 4)\n                    {\n                        tags = args[4];\n                    }\n                    ExecuteUnitTests(mobileServiceRuntimeURL, mobileServiceRuntimeKey, tags, auto: true);\n                }\n\n            };\n        }\n\n        /// <summary>\n        /// Start the unit test run.\n        /// </summary>\n        /// <param name=\"sender\">Start button.</param>\n        /// <param name=\"e\">Event arguments.</param>\n        private void ExecuteUnitTests(object sender, RoutedEventArgs e)\n        {\n            Settings.Default.MobileServiceRuntimeUrl = txtRuntimeUri.Text;\n            Settings.Default.MobileServiceRuntimeKey = txtRuntimeKey.Text;\n            Settings.Default.MobileServiceTags = txtTags.Text;\n\n            ExecuteUnitTests(txtRuntimeUri.Text, txtRuntimeKey.Text, txtTags.Text, auto: false);\n        }\n\n        private void ExecuteUnitTests(string runtimeUri, string runtimeKey, string tags, bool auto)\n        {\n            // Get the test settings from the UI\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeUrl\"] = runtimeUri;\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeKey\"] = runtimeKey;\n            App.Harness.Settings.TagExpression = tags;\n            App.Harness.Settings.Custom[\"Auto\"] = auto ? \"True\": \"False\";\n\n            if (!string.IsNullOrEmpty(App.Harness.Settings.TagExpression))\n            {\n                App.Harness.Settings.TagExpression += \" - notNetFramework\";\n            }\n            else\n            {\n                App.Harness.Settings.TagExpression = \"!notNetFramework\";\n            }\n\n            this.NavigationService.Navigate(new TestPage());\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/UI/MainWindow.xaml",
    "content": "﻿<Window x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        Title=\"MainWindow\" Height=\"350\" Width=\"525\"\n        Background=\"Black\">\n    <Grid>\n        <Frame x:Name=\"_mainFrame\" />\n    </Grid>\n</Window>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/UI/MainWindow.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Interaction logic for MainWindow.xaml\n    /// </summary>\n    public partial class MainWindow : Window\n    {\n        public MainWindow()\n        {\n            InitializeComponent();\n            _mainFrame.Navigate(new MainPage());\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/UI/TestPage.xaml",
    "content": "﻿<Page x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.TestPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n      xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n      mc:Ignorable=\"d\" \n      d:DesignHeight=\"300\" d:DesignWidth=\"300\"\n\tTitle=\"TestPage\">\n\n    <Page.Resources>\n        <Style x:Key=\"SubheaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n            <Setter Property=\"FontSize\" Value=\"18\" />\n            <Setter Property=\"FontWeight\" Value=\"Bold\" />\n            <Setter Property=\"LineHeight\" Value=\"20\" />\n        </Style>\n        <Style x:Key=\"HeaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n            <Setter Property=\"Foreground\" Value=\"#0094ff\" />\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n        </Style>\n        <Style x:Key=\"TestStyle\" TargetType=\"ListView\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"Background\" Value=\"Transparent\" />\n        </Style>\n        <Style x:Key=\"StatusStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Top\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n        </Style>\n        <Style x:Key=\"ProgressStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n            <Setter Property=\"Foreground\" Value=\"#ffd800\" />\n        </Style>\n        <CollectionViewSource x:Key=\"cvsTests\" />\n    </Page.Resources>\n    <Border>\n        <Grid Margin=\"20\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n            </Grid.RowDefinitions>\n            <TextBlock Grid.Row=\"0\" Style=\"{StaticResource SubheaderStyle}\">Microsoft Azure Mobile Services</TextBlock>\n            <TextBlock Grid.Row=\"1\"  Style=\"{StaticResource HeaderStyle}\">C# Client Library Tests</TextBlock>\n            <TextBlock x:Name=\"lblStatus\" Grid.Row=\"2\" Style=\"{StaticResource StatusStyle}\">Unit Test Run</TextBlock>\n            <ListView\n              x:Name=\"lstTests\"\n              Grid.Row=\"3\"\n              Style=\"{StaticResource TestStyle}\"\n              ItemsSource=\"{Binding Source={StaticResource cvsTests}}\">\n                <ListView.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Margin=\"8 0\">\n                            <TextBlock Text=\"{Binding Name}\" Foreground=\"{Binding Brush}\" FontSize=\"16\" FontWeight=\"ExtraLight\" />\n                            <!--<ItemsControl ItemsSource=\"{Binding Details}\" Margin=\"15 0 0 0\" FontSize=\"12\" Foreground=\"LightGray\" />-->\n                        </StackPanel>\n                    </DataTemplate>\n                </ListView.ItemTemplate>                            \n            </ListView>\n            <Grid  x:Name=\"pnlFooter\" Grid.Row=\"4\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\" />\n                    <RowDefinition Height=\"Auto\" />\n                </Grid.RowDefinitions>\n                <ProgressBar x:Name=\"progress\" />\n                <StackPanel Grid.Row=\"1\" Orientation=\"Horizontal\" HorizontalAlignment=\"Center\">\n                    <TextBlock x:Name=\"lblCurrentTestNumber\" Text=\"0\" Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock Text=\" / \"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock x:Name=\"lblTotalTestNumber\" Text=\"0\"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock Text=\"  (with  \"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock x:Name=\"lblFailureNumber\" Text=\"0\"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock Text=\" failures)\"  Style=\"{StaticResource ProgressStyle}\" />\n                </StackPanel>\n            </Grid>\n            <TextBlock\n              x:Name=\"lblResults\"\n              Grid.Row=\"5\"\n              Visibility=\"Collapsed\"\n              Style=\"{StaticResource ProgressStyle}\"\n              HorizontalAlignment=\"Center\" />\n        </Grid>\n    </Border>\n</Page>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/UI/TestPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.ObjectModel;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Media;\nusing System.Windows.Threading;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Test harness results page.\n    /// </summary>\n    public sealed partial class TestPage : Page, ITestReporter\n    {\n        private static Color SkippedColor = Color.FromArgb(0xFF, 0x66, 0x66, 0x66);\n        private static Color FailedColor = Color.FromArgb(0xFF, 0xFF, 0x00, 0x6E);\n        private static Color PassedColor = Color.FromArgb(0xFF, 0x2A, 0x9E, 0x39);\n\n        private ObservableCollection<GroupDescription> _groups;\n        private ObservableCollection<TestDescription> _tests;\n        private GroupDescription _currentGroup = null;\n        private TestDescription _currentTest = null;\n\n        /// <summary>\n        /// Initializes a new instance of the TestPage.\n        /// </summary>\n        public TestPage()\n        {\n            InitializeComponent();\n\n            // Setup the groups data source\n            _groups = new ObservableCollection<GroupDescription>();\n            _tests = new ObservableCollection<TestDescription>();\n            CollectionViewSource src = (CollectionViewSource)this.Resources[\"cvsTests\"];\n            src.Source = _tests;\n\n            // Start a test run\n            App.Harness.Reporter = this;\n            Task.Factory.StartNew(() => App.Harness.RunAsync());\n        }\n\n        public async void StartRun(TestHarness harness)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                lblCurrentTestNumber.Text = harness.Progress.ToString();\n                lblTotalTestNumber.Text = harness.Count.ToString();\n                lblFailureNumber.Tag = harness.Failures.ToString() ?? \"0\";\n                progress.Value = 1;\n                pnlFooter.Visibility = Visibility.Visible;\n            });\n        }\n\n        public async void EndRun(TestHarness harness)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                pnlFooter.Visibility = Visibility.Collapsed;\n                if (harness.Failures > 0)\n                {\n                    lblResults.Text = string.Format(CultureInfo.InvariantCulture, \"{0}/{1} tests failed!\", harness.Failures, harness.Count);\n                    lblResults.Foreground = new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0x00, 0x6E));\n                }\n                else\n                {\n                    lblResults.Text = string.Format(CultureInfo.InvariantCulture, \"{0} tests passed!\", harness.Count);\n                }\n                lblResults.Visibility = Visibility.Visible;\n                if (App.Harness.Settings.Custom[\"Auto\"] == \"True\")\n                {\n                    ConsoleHelper.Flush();\n                    Application.Current.Shutdown(harness.Failures);\n                }\n            });\n        }\n\n        public async void Progress(TestHarness harness)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                lblCurrentTestNumber.Text = harness.Progress.ToString();\n                lblFailureNumber.Text = \" \" + (harness.Failures.ToString() ?? \"0\");\n                double value = harness.Progress;\n                int count = harness.Count;\n                if (count > 0)\n                {\n                    value = value * 100.0 / (double)count;\n                }\n                progress.Value = value;\n            });\n        }\n\n        public async void StartGroup(TestGroup group)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                _currentGroup = new GroupDescription { Name = group.Name };\n                _groups.Add(_currentGroup);\n            });\n        }\n\n        public async void EndGroup(TestGroup group)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                _currentGroup = null;\n            });\n        }\n\n        public async void StartTest(TestMethod test)\n        {\n            await Dispatcher.InvokeAsync(async () =>\n            {\n                ConsoleHelper.Write(\"{0}...\", test.Name);\n                _currentTest = new TestDescription { Name = test.Name };\n                _currentGroup.Add(_currentTest);\n                _tests.Add(_currentTest);\n\n                await Dispatcher.InvokeAsync(() =>\n                {\n                    lstTests.ScrollIntoView(_currentTest);\n                });\n            });\n        }\n\n        public async void EndTest(TestMethod method)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                if (method.Excluded)\n                {\n                    _currentTest.Color = SkippedColor;\n                    ConsoleHelper.WriteLine(\"Skipped\");\n                }\n                else if (!method.Passed)\n                {\n                    _currentTest.Color = FailedColor;\n                    ConsoleHelper.WriteLine(\"Failed: \" + method.ErrorInfo);\n                }\n                else\n                {\n                    _currentTest.Color = PassedColor;\n                    ConsoleHelper.WriteLine(\"Passed\");\n                }\n                _currentTest = null;\n            });\n        }\n\n        public async void Log(string message)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                _currentTest.Details.Add(message);\n            });\n        }\n\n        public async void Error(string errorDetails)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                _currentTest.Details.Add(errorDetails);\n            });\n        }\n\n        public async void Status(string status)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                lblStatus.Text = status;\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Vb.Test/Microsoft.WindowsAzure.Mobile.Net45.Vb.Test.vbproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{D3C7CD26-984A-46D1-8618-8363199F1573}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <RootNamespace>Microsoft.WindowsAzure.Mobile.Net45.Vb.Test</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Net45.Vb.Test</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <MyType>Windows</MyType>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <DefineDebug>true</DefineDebug>\n    <DefineTrace>true</DefineTrace>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DocumentationFile>Microsoft.WindowsAzure.Mobile.Net45.Vb.Test.xml</DocumentationFile>\n    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <DefineDebug>false</DefineDebug>\n    <DefineTrace>true</DefineTrace>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DocumentationFile>Microsoft.WindowsAzure.Mobile.Net45.Vb.Test.xml</DocumentationFile>\n    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>\n  </PropertyGroup>\n  <PropertyGroup>\n    <OptionExplicit>On</OptionExplicit>\n  </PropertyGroup>\n  <PropertyGroup>\n    <OptionCompare>Binary</OptionCompare>\n  </PropertyGroup>\n  <PropertyGroup>\n    <OptionStrict>Off</OptionStrict>\n  </PropertyGroup>\n  <PropertyGroup>\n    <OptionInfer>On</OptionInfer>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Collections\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Linq.Expressions\" />\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Runtime\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n      </ItemGroup>\n    </When>\n    <Otherwise>\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework\" />\n      </ItemGroup>\n    </Otherwise>\n  </Choose>\n  <ItemGroup>\n    <Import Include=\"Microsoft.VisualBasic\" />\n    <Import Include=\"System\" />\n    <Import Include=\"System.Collections\" />\n    <Import Include=\"System.Collections.Generic\" />\n    <Import Include=\"System.Data\" />\n    <Import Include=\"System.Diagnostics\" />\n    <Import Include=\"System.Linq\" />\n    <Import Include=\"System.Runtime\" />\n    <Import Include=\"System.Xml.Linq\" />\n    <Import Include=\"System.Threading.Tasks\" />\n    <Import Include=\"Microsoft.VisualStudio.TestTools.UnitTesting\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"TestsForOptionCompareBinary.vb\" />\n    <Compile Include=\"QueryTests.vb\" />\n    <Compile Include=\"My Project\\AssemblyInfo.vb\" />\n    <Compile Include=\"My Project\\Application.Designer.vb\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Application.myapp</DependentUpon>\n    </Compile>\n    <Compile Include=\"TestsForOptionCompareText.vb\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"My Project\\Application.myapp\">\n      <Generator>MyApplicationCodeGenerator</Generator>\n      <LastGenOutput>Application.Designer.vb</LastGenOutput>\n    </None>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.Net45\\Microsoft.WindowsAzure.Mobile.Ext.Net45.csproj\">\n      <Project>{6c5430ce-1dee-422a-94e3-071eb25e7429}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.Net45</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.VisualBasic.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Vb.Test/My Project/Application.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\n' <auto-generated>\n'     This code was generated by a tool.\n'     Runtime Version:4.0.30319.18051\n'\n'     Changes to this file may cause incorrect behavior and will be lost if\n'     the code is regenerated.\n' </auto-generated>\n'------------------------------------------------------------------------------\n\nOption Strict On\nOption Explicit On\n\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Vb.Test/My Project/Application.myapp",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<MyApplicationData xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <MySubMain>false</MySubMain>\n  <SingleInstance>false</SingleInstance>\n  <ShutdownMode>0</ShutdownMode>\n  <EnableVisualStyles>true</EnableVisualStyles>\n  <AuthenticationMode>0</AuthenticationMode>\n  <ApplicationType>1</ApplicationType>\n  <SaveMySettingsOnExit>true</SaveMySettingsOnExit>\n</MyApplicationData>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Vb.Test/My Project/AssemblyInfo.vb",
    "content": "﻿Imports System\nImports System.Reflection\nImports System.Runtime.InteropServices\n\n' General Information about an assembly is controlled through the following \n' set of attributes. Change these attribute values to modify the information\n' associated with an assembly.\n\n' Review the values of the assembly attributes\n\n<Assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.Net45.Vb.Test\")> \n<Assembly: AssemblyDescription(\"\")> \n<Assembly: AssemblyCompany(\"\")> \n<Assembly: AssemblyProduct(\"Microsoft.WindowsAzure.Mobile.Net45.Vb.Test\")> \n<Assembly: AssemblyCopyright(\"Copyright ©  2013\")> \n<Assembly: AssemblyTrademark(\"\")> \n\n<Assembly: ComVisible(False)>\n\n'The following GUID is for the ID of the typelib if this project is exposed to COM\n<Assembly: Guid(\"202944ea-902e-4f44-8681-61756a527ee1\")> \n\n' Version information for an assembly consists of the following four values:\n'\n'      Major Version\n'      Minor Version \n'      Build Number\n'      Revision\n'\n' You can specify all the values or you can default the Build and Revision Numbers \n' by using the '*' as shown below:\n' <Assembly: AssemblyVersion(\"1.0.*\")> \n\n<Assembly: AssemblyVersion(\"1.0.0.0\")> \n<Assembly: AssemblyFileVersion(\"1.0.0.0\")> \n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Vb.Test/QueryTests.vb",
    "content": "﻿Imports System.Text\nImports Microsoft.VisualStudio.TestTools.UnitTesting\nImports Microsoft.WindowsAzure.MobileServices\nImports Microsoft.WindowsAzure.MobileServices.Query\nImports Newtonsoft.Json\n\n<TestClass()> Public Class QueryTests\n\n    Friend Shared Function Compile(Of T, U)(ByVal getQuery As Func(Of IMobileServiceTable(Of T), IMobileServiceTableQuery(Of U))) As MobileServiceTableQueryDescription\n        Dim client = New MobileServiceClient(\"http://www.test.com\")\n        Dim table As IMobileServiceTable(Of T) = client.GetTable(Of T)()\n        Dim query As IMobileServiceTableQuery(Of U) = getQuery(table)\n        Dim provider As MobileServiceTableQueryProvider = New MobileServiceTableQueryProvider()\n        Dim compiledQuery As MobileServiceTableQueryDescription = provider.Compile(CType(query, MobileServiceTableQuery(Of U)))\n        Console.WriteLine(\">>> {0}\", compiledQuery.ToODataString())\n        Return compiledQuery\n    End Function\n\n    <TestMethod()> Public Sub Ordering()\n        ' Query syntax\n        Dim query = Compile(Of Product, Product)(Function(table) _\n                                                     From p In table _\n                                                     Order By p.Price Ascending _\n                                                     Select p)\n        Assert.AreEqual(\"Product\", query.TableName)\n        Assert.AreEqual(1, query.Ordering.Count)\n        Assert.AreEqual(\"Price\", DirectCast(query.Ordering(0).Expression, MemberAccessNode).MemberName)\n        Assert.AreEqual(OrderByDirection.Ascending, query.Ordering(0).Direction)\n\n        ' Chaining\n        query = Compile(Of Product, Product)(Function(table) _\n                                                     table.OrderBy(Function(p) p.Price))\n        Assert.AreEqual(1, query.Ordering.Count)\n        Assert.AreEqual(\"Price\", DirectCast(query.Ordering(0).Expression, MemberAccessNode).MemberName)\n        Assert.AreEqual(OrderByDirection.Ascending, query.Ordering(0).Direction)\n\n        ' Query syntax descending\n        query = Compile(Of Product, Product)(Function(table) _\n                                                     From p In table _\n                                                     Order By p.Price Descending _\n                                                     Select p)\n        Assert.AreEqual(1, query.Ordering.Count)\n        Assert.AreEqual(\"Price\", DirectCast(query.Ordering(0).Expression, MemberAccessNode).MemberName)\n        Assert.AreEqual(OrderByDirection.Descending, query.Ordering(0).Direction)\n\n        ' Chaining descending\n        query = Compile(Of Product, Product)(Function(table) _\n                                                     table.OrderByDescending(Function(p) p.Price))\n        Assert.AreEqual(1, query.Ordering.Count)\n        Assert.AreEqual(\"Price\", DirectCast(query.Ordering(0).Expression, MemberAccessNode).MemberName)\n        Assert.AreEqual(OrderByDirection.Descending, query.Ordering(0).Direction)\n\n        ' Query syntax with multiple\n        query = Compile(Of Product, Product)(Function(table) _\n                                                     From p In table _\n                                                     Order By p.Price Ascending, p.Name Descending _\n                                                     Select p)\n        Assert.AreEqual(2, query.Ordering.Count)\n        Assert.AreEqual(\"Price\", DirectCast(query.Ordering(0).Expression, MemberAccessNode).MemberName)\n        Assert.AreEqual(OrderByDirection.Ascending, query.Ordering(0).Direction)\n        Assert.AreEqual(\"Name\", DirectCast(query.Ordering(1).Expression, MemberAccessNode).MemberName)\n        Assert.AreEqual(OrderByDirection.Descending, query.Ordering(1).Direction)\n\n        ' Chaining with multiple\n        query = Compile(Of Product, Product)(Function(table) _\n                                                 table.OrderBy(Function(p) p.Price).ThenByDescending(Function(p) p.Name))\n        Assert.AreEqual(2, query.Ordering.Count)\n        Assert.AreEqual(\"Price\", DirectCast(query.Ordering(0).Expression, MemberAccessNode).MemberName)\n        Assert.AreEqual(OrderByDirection.Ascending, query.Ordering(0).Direction)\n        Assert.AreEqual(\"Name\", DirectCast(query.Ordering(1).Expression, MemberAccessNode).MemberName)\n        Assert.AreEqual(OrderByDirection.Descending, query.Ordering(1).Direction)\n    End Sub\n\n    <TestMethod> Public Sub Projection()\n        ' Query syntax\n        Dim query = Compile(Of Product, String)(Function(table) _\n                                                     From p In table _\n                                                     Select p.Name)\n        Assert.AreEqual(3, query.Selection.Count)\n        Assert.AreEqual(\"Name\", query.Selection(0))\n        Assert.AreEqual(\"Weight\", query.Selection(1))\n        Assert.AreEqual(\"WeightInKG\", query.Selection(2))\n        Assert.AreEqual(GetType(Product), query.ProjectionArgumentType)\n        Dim product = New Product() With { _\n                      .Name = \"ZUMO\", _\n                      .Price = 1, _\n                      .InStock = True\n                  }\n        Assert.AreEqual(\"ZUMO\", query.Projections.First().DynamicInvoke(product))\n\n        ' Chaining\n        query = Compile(Of Product, String)(Function(table) _\n                                                     table.Select(Function(p) p.Name))\n        Assert.AreEqual(3, query.Selection.Count)\n        Assert.AreEqual(\"Name\", query.Selection(0))\n        Assert.AreEqual(\"Weight\", query.Selection(1))\n        Assert.AreEqual(\"WeightInKG\", query.Selection(2))\n        Assert.AreEqual(GetType(Product), query.ProjectionArgumentType)\n        Assert.AreEqual(\"ZUMO\", query.Projections.First().DynamicInvoke(product))\n    End Sub\n\n    <TestMethod> Public Sub MultipleProjections()\n        Dim product = New Product() With { _\n                      .Name = \"ZUMO\", _\n                      .Price = 1, _\n                      .InStock = True\n                  }\n\n        ' Chaining\n        Dim query = Compile(Of Product, String)(Function(table) _\n                                                     table.Select(Function(p) New With {.Foo = p.Name}) _\n                                                     .Select(Function(f) f.Foo.ToLower()))\n        Assert.AreEqual(3, query.Selection.Count)\n        Assert.AreEqual(\"Name\", query.Selection(0))\n        Assert.AreEqual(\"Weight\", query.Selection(1))\n        Assert.AreEqual(\"WeightInKG\", query.Selection(2))\n        Assert.AreEqual(GetType(Product), query.ProjectionArgumentType)\n        Assert.AreEqual(\"zumo\", _\n                        query.Projections(1).DynamicInvoke( _\n                            query.Projections(0).DynamicInvoke(product)))\n    End Sub\n\n    <TestMethod> Public Sub SkipTake()\n        Dim query = Compile(Of Product, Product)(Function(table) _\n                                                     table.Skip(2).Take(5))\n        Assert.AreEqual(2, query.Skip)\n        Assert.AreEqual(5, query.Top)\n\n        ' Allow new operations\n        query = Compile(Of Product, Product)(Function(table) _\n                                                 table.Skip(New Product() With {.SmallId = 2}.SmallId).Take(5))\n        Assert.AreEqual(2, query.Skip)\n        Assert.AreEqual(5, query.Top)\n    End Sub\n\n    <TestMethod> Public Sub WithParameters()\n        Dim userParameters1 = New Dictionary(Of String, String)\n        userParameters1.Add(\"state\", \"PA\")\n        Dim userParameters2 = New Dictionary(Of String, String)\n        userParameters2.Add(\"country\", \"USA\")\n\n        Dim service = New MobileServiceClient(\"http://www.test.com\")\n        Dim table = service.GetTable(Of Product)()\n\n        Dim query = (From p In table Select p).WithParameters(userParameters1).Skip(2).WithParameters(userParameters2)\n        Assert.AreEqual(2, query.Parameters.Count)\n        Assert.AreEqual(\"PA\", query.Parameters(\"state\"))\n        Assert.AreEqual(\"USA\", query.Parameters(\"country\"))\n    End Sub\n\n    <TestMethod> Public Sub Filtering()\n        ' Greater than, decimal value\n        Dim query = Compile(Of Product, Product)(Function(table) _\n                                                     From p In table _\n                                                     Where p.Price > 50 _\n                                                     Select p)\n        Assert.AreEqual(\"(Price gt 50M)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                 table.Where(Function(p) p.Price > 50))\n        Assert.AreEqual(\"(Price gt 50M)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        ' Less than, float value\n        query = Compile(Of Product, Product)(Function(table) _\n                                                     From p In table _\n                                                     Where p.Weight < 10 _\n                                                     Select p)\n        Assert.AreEqual(\"(Weight lt 10f)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                 table.Where(Function(p) p.Weight < 10))\n        Assert.AreEqual(\"(Weight lt 10f)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        ' Less than or equal, equal, And/AndAlso\n        query = Compile(Of Product, Product)(Function(table) _\n                                                     From p In table _\n                                                     Where p.Weight <= 10 And p.InStock = True _\n                                                     Select p)\n        Assert.AreEqual(\"((Weight le 10f) and (InStock eq true))\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                 table.Where(Function(p) p.Weight <= 10 AndAlso p.InStock = True))\n        Assert.AreEqual(\"((Weight le 10f) and (InStock eq true))\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        ' Less than or equal, equal, Or/OrElse\n        query = Compile(Of Product, Product)(Function(table) _\n                                                     From p In table _\n                                                     Where p.Weight <= 10 Or p.InStock = True _\n                                                     Select p)\n        Assert.AreEqual(\"((Weight le 10f) or (InStock eq true))\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                 table.Where(Function(p) p.Weight <= 10 OrElse p.InStock))\n        Assert.AreEqual(\"((Weight le 10f) or InStock)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        'boolean not\n        query = Compile(Of Product, Product)(Function(table) _\n                                                     From p In table _\n                                                     Where Not p.InStock _\n                                                     Select p)\n        Assert.AreEqual(\"not(InStock)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                 table.Where(Function(p) Not p.InStock))\n        Assert.AreEqual(\"not(InStock)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        ' Allow New operations\n        Dim foo As Single = 10\n        query = Compile(Of Product, Product)(Function(table) _\n                                                 table.Where(Function(p) p.Weight <= New Product() With {.Weight = foo}.Weight Or p.InStock = True))\n        Assert.AreEqual(\"((Weight le 10f) or (InStock eq true))\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                         table.Where(Function(p) p.Weight <= New Product(15) With {.Weight = foo}.Weight Or p.InStock = True))\n        Assert.AreEqual(\"((Weight le 10f) or (InStock eq true))\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                         table.Where(Function(p) p.Weight <= New Product(15) With {.Weight = 10}.Weight Or p.InStock = True))\n        Assert.AreEqual(\"((Weight le 10f) or (InStock eq true))\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        Dim id As Long = 15\n        query = Compile(Of Product, Product)(Function(table) _\n                                         table.Where(Function(p) p.Weight <= New Product(id) With {.Weight = 10}.Weight Or p.InStock = True))\n        Assert.AreEqual(\"((Weight le 10f) or (InStock eq true))\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                 table.Where(Function(p) p.Created = New DateTime(1994, 10, 14, 0, 0, 0, DateTimeKind.Utc)))\n        Assert.AreEqual(\"(Created eq datetime'1994-10-14T00%3A00%3A00.000Z')\", ODataExpressionVisitor.ToODataString(query.Filter))\n    End Sub\n\n    <TestMethod> Public Sub CombinedQuery()\n        'Dim query = Compile(Of Product, Product)(Function(table) _\n        '                                             (From p In table _\n        '                                             Where p.Price <= 10 and p.Weight > 10f _\n        '                                             where !p.InStock _\n        '                                             order by p.Price descending, p.Name _\n        '                                             select New With { .Name = p.Name, .Price = p.Price })\n        '.Skip(20) _\n        '.Take(10))\n        Dim query = Compile(Function(table As IMobileServiceTable(Of Product)) _\n                                                     table.Where(Function(p) p.Price <= 10 And p.Weight > 10) _\n                                                     .Where(Function(p) Not p.InStock) _\n                                                     .OrderByDescending(Function(p) p.Price) _\n                                                     .ThenBy(Function(p) p.Name) _\n                                                     .Select(Function(p) New With {.Name = p.Name, .Price = p.Price}) _\n                                                     .Skip(20) _\n                                                     .Take(10))\n        Assert.AreEqual( _\n            \"$filter=(((Price le 10M) and (Weight gt 10f)) and not(InStock))&$orderby=Price desc,Name&$skip=20&$top=10&$select=Name,Price,Weight,WeightInKG\", _\n            query.ToODataString())\n    End Sub\n\n    <TestMethod> Public Sub FilterOperators()\n        Dim query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name + \"x\" = \"mx\" _\n                                                    Select p)\n        Assert.AreEqual(\"(concat(Name,'x') eq 'mx')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                            From p In table _\n                                                            Where p.Weight + 1.0 = 10 _\n                                                            Select p)\n        Assert.AreEqual(\"((Weight add 1.0) eq 10.0)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                            From p In table _\n                                                            Where p.Weight - 1.0 = 10 _\n                                                            Select p)\n        Assert.AreEqual(\"((Weight sub 1.0) eq 10.0)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                            From p In table _\n                                                            Where p.Weight * 2.0 = 10 _\n                                                            Select p)\n        Assert.AreEqual(\"((Weight mul 2.0) eq 10.0)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                            From p In table _\n                                                            Where p.Weight / 2.0 = 10 _\n                                                            Select p)\n        Assert.AreEqual(\"((Weight div 2.0) eq 10.0)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                            From p In table _\n                                                            Where p.Id Mod 2 = 1 _\n                                                            Select p)\n        Assert.AreEqual(\"((id mod 2L) eq 1L)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                            From p In table _\n                                                            Where (p.Weight * 2.0) / 3.0 + 1.0 = 10 _\n                                                            Select p)\n        Assert.AreEqual(\"((((Weight mul 2.0) div 3.0) add 1.0) eq 10.0)\", ODataExpressionVisitor.ToODataString(query.Filter))\n    End Sub\n\n    <TestMethod> Public Sub FilterMethods()\n        ' Methods that look like properties\n        Dim query = Compile(Of Product, Product)(Function(table) _\n                                                            From p In table _\n                                                            Where p.Name.Length = 7 _\n                                                            Select p)\n        Assert.AreEqual(\"(length(Name) eq 7)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Created.Day = 7\n                                                    Select p)\n        Assert.AreEqual(\"(day(Created) eq 7)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Created.Month = 7\n                                                    Select p)\n        Assert.AreEqual(\"(month(Created) eq 7)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Created.Year = 7\n                                                    Select p)\n        Assert.AreEqual(\"(year(Created) eq 7)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Created.Hour = 7\n                                                    Select p)\n        Assert.AreEqual(\"(hour(Created) eq 7)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Created.Minute = 7\n                                                    Select p)\n        Assert.AreEqual(\"(minute(Created) eq 7)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Created.Second = 7\n                                                    Select p)\n        Assert.AreEqual(\"(second(Created) eq 7)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        ' Static methods\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where Math.Floor(p.Weight) = 10 _\n                                                    Select p)\n        Assert.AreEqual(\"(floor(Weight) eq 10.0)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where Decimal.Floor(p.Price) = 10 _\n                                                    Select p)\n        Assert.AreEqual(\"(floor(Price) eq 10M)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where Math.Ceiling(p.Weight) = 10 _\n                                                    Select p)\n        Assert.AreEqual(\"(ceiling(Weight) eq 10.0)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where Decimal.Ceiling(p.Price) = 10 _\n                                                    Select p)\n        Assert.AreEqual(\"(ceiling(Price) eq 10M)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where Math.Round(p.Weight) = 10 _\n                                                    Select p)\n        Assert.AreEqual(\"(round(Weight) eq 10.0)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where Math.Round(p.Price) = 10 _\n                                                    Select p)\n        Assert.AreEqual(\"(round(Price) eq 10M)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where String.Concat(p.Name, \"x\") = \"mx\" _\n                                                    Select p)\n        Assert.AreEqual(\"(concat(Name,'x') eq 'mx')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        ' Instance methods\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.ToLower() = \"a\" _\n                                                    Select p)\n        Assert.AreEqual(\"(tolower(Name) eq 'a')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.ToLowerInvariant() = \"a\" _\n                                                    Select p)\n        Assert.AreEqual(\"(tolower(Name) eq 'a')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.ToUpper() = \"A\" _\n                                                    Select p)\n        Assert.AreEqual(\"(toupper(Name) eq 'A')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.ToUpperInvariant() = \"A\" _\n                                                    Select p)\n        Assert.AreEqual(\"(toupper(Name) eq 'A')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.Trim() = \"a\" _\n                                                    Select p)\n        Assert.AreEqual(\"(trim(Name) eq 'a')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.StartsWith(\"x\") _\n                                                    Select p)\n        Assert.AreEqual(\"startswith(Name,'x')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.EndsWith(\"x\") _\n                                                    Select p)\n        Assert.AreEqual(\"endswith(Name,'x')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.IndexOf(\"foo\") = 2 _\n                                                    Select p)\n        Assert.AreEqual(\"(indexof(Name,'foo') eq 2)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        Dim c As Char = \"x\"c\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.IndexOf(c) = 2 _\n                                                    Select p)\n        Assert.AreEqual(\"(indexof(Name,'x') eq 2)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.Contains(\"bar\") _\n                                                    Select p)\n        Assert.AreEqual(\"substringof('bar',Name)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.Replace(\"a\"c, \"A\"c) = \"ABBA\" _\n                                                    Select p)\n        Assert.AreEqual(\"(replace(Name,'a','A') eq 'ABBA')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.Replace(\"a\", \"A\") = \"ABBA\" _\n                                                    Select p)\n        Assert.AreEqual(\"(replace(Name,'a','A') eq 'ABBA')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.Substring(6) = \"world\" _\n                                                    Select p)\n        Assert.AreEqual(\"(substring(Name,6) eq 'world')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where p.Name.Substring(2, 3) = \"llo\" _\n                                                    Select p)\n        Assert.AreEqual(\"(substring(Name,2,3) eq 'llo')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        ' Verify each type works on nested expressions too\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where (p.Name + \"x\").Length = 7 _\n                                                    Select p)\n        Assert.AreEqual(\"(length(concat(Name,'x')) eq 7)\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where String.Concat(p.Name + \"x\", \"y\") = \"mxy\" _\n                                                    Select p)\n        Assert.AreEqual(\"(concat(concat(Name,'x'),'y') eq 'mxy')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = Compile(Of Product, Product)(Function(table) _\n                                                    From p In table _\n                                                    Where (p.Name + \"x\").ToLower = \"ax\" _\n                                                    Select p)\n        Assert.AreEqual(\"(tolower(concat(Name,'x')) eq 'ax')\", ODataExpressionVisitor.ToODataString(query.Filter))\n    End Sub\nEnd Class\n\nPublic Class Product\n\n    Public Sub New()\n    End Sub\n\n    Public Sub New(ByVal id As Long)\n        Me.Id = id\n    End Sub\n\n    Public Property AvailableTime As TimeSpan\n    Public Property Created As DateTime\n    Public Property DisplayAisle As Short\n    Public Property Id As Long\n    Public Property InStock As Boolean\n    Public Property Name As String\n    Public Property OptionFlags As Byte\n    Public Property Price As Decimal\n    Public Property SmallId As Integer\n    Public Property Tags As List(Of String)\n    Public Property Type As ProductType\n    Public Property UnsignedDisplayAisle As UInt16\n    Public Property UnsignedId As UInt64\n    Public Property UnsignedSmallId As UInt32\n    Public Property Updated As DateTime?\n    <JsonProperty(Required:=Required.Always)> _\n    Public Property Weight As Single\n    <JsonProperty(Required:=Required.AllowNull)> _\n    Public Property WeightInKG As Single?\n\nEnd Class\n\nPublic Enum ProductType\n    Food\n    Furniture\nEnd Enum"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Vb.Test/TestsForOptionCompareBinary.vb",
    "content": "﻿Option Compare Binary\nImports Microsoft.WindowsAzure.MobileServices.Query\n\n<TestClass> Public Class TestsForOptionCompareBinary\n    <TestMethod> Public Sub StringComparison_OptionCompareBinary()\n        Dim query = QueryTests.Compile(Of Product, Product)(Function(table) _\n                                                                table.Where(Function(x) x.Name = \"Zumo\"))\n        Assert.AreEqual(\"(Name eq 'Zumo')\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = QueryTests.Compile(Of Product, Product)(Function(table) _\n                                                                        table.Where(Function(x) x.Name <> \"Zumo\"))\n        Assert.AreEqual(\"(Name ne 'Zumo')\", ODataExpressionVisitor.ToODataString(query.Filter))\n    End Sub\nEnd Class\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Vb.Test/TestsForOptionCompareText.vb",
    "content": "﻿Option Compare Text\nImports Microsoft.WindowsAzure.MobileServices.Query\n\n<TestClass> Public Class TestsForOptionCompareText\n    <TestMethod> Public Sub StringComparison_OptionCompareText()\n        Dim query = QueryTests.Compile(Of Product, Product)(Function(table) _\n                                                                table.Where(Function(x) x.Name = \"Zumo\"))\n        Assert.AreEqual(\"(tolower(Name) eq tolower('Zumo'))\", ODataExpressionVisitor.ToODataString(query.Filter))\n\n        query = QueryTests.Compile(Of Product, Product)(Function(table) _\n                                                                        table.Where(Function(x) x.Name <> \"Zumo\"))\n        Assert.AreEqual(\"(tolower(Name) ne tolower('Zumo'))\", ODataExpressionVisitor.ToODataString(query.Filter))\n    End Sub\nEnd Class\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Vb.Test/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.5.11.0\" newVersion=\"1.5.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.Mobile.Net45.Vb.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/App.cs",
    "content": "using System;\nusing System.Linq;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Microsoft.WindowsAzure.MobileServices.Test;\nusing Microsoft.WindowsAzure.MobileServices;\n\nnamespace Microsoft.WindowsAzure.Mobile.Android.Test\n{\n    static class App\n    {\n        public static readonly TestHarness Harness = new TestHarness();\n\n        static App()\n        {\n            CurrentPlatform.Init ();\n\n            Harness.Reporter = Listener;\n            Harness.LoadTestAssembly (typeof (MobileServiceSerializerTests).Assembly);\n            Harness.LoadTestAssembly(typeof(PushFunctional).Assembly);\n        }\n\n        public static readonly TestListener Listener = new TestListener();\n    }\n} "
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/GroupDescription.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.Mobile.Android.Test\n{\n    sealed class GroupDescription\n        : Java.Lang.Object\n    {\n        public GroupDescription (TestGroup group)\n        {\n            Group = group;\n            this.tests.CollectionChanged += (sender, e) => HasFailures = this.tests.Any (t => !t.Test.Passed);\n        }\n\n        public TestGroup Group\n        {\n            get;\n            private set;\n        }\n\n        public bool HasFailures\n        {\n            get;\n            private set;\n        }\n\n        public ICollection<TestDescription> Tests\n        {\n            get { return this.tests; }\n        }\n\n        private readonly ObservableCollection<TestDescription> tests = new ObservableCollection<TestDescription>();\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/HarnessActivity.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Linq;\nusing Android.App;\nusing Android.OS;\nusing Android.Views;\nusing Android.Widget;\nusing System.Collections.Specialized;\nusing System.Collections.Generic;\nusing Android.Content;\nusing Android.Graphics;\n\nnamespace Microsoft.WindowsAzure.Mobile.Android.Test\n{\n    [Activity]\n    public class HarnessActivity : Activity\n    {\n        private ExpandableListView list;\n        private TextView runStatus;\n\n        protected override void OnCreate (Bundle bundle)\n        {\n            base.OnCreate (bundle);\n            Title = \"C# Client Library Tests\";\n\n            RequestWindowFeature (WindowFeatures.Progress);\n\n            SetContentView (Resource.Layout.Harness);\n\n            this.runStatus = FindViewById<TextView> (Resource.Id.RunStatus);\n\n            this.list = FindViewById<ExpandableListView> (Resource.Id.List);\n            this.list.SetAdapter (new TestListAdapter (this, App.Listener));\n            this.list.ChildClick += (sender, e) => {\n                Intent testIntent = new Intent (this, typeof(TestActivity));\n\n                GroupDescription groupDesc = (GroupDescription)this.list.GetItemAtPosition (e.GroupPosition);\n                TestDescription desc = groupDesc.Tests.ElementAt (e.ChildPosition);\n\n                testIntent.PutExtra (\"name\", desc.Test.Name);\n                testIntent.PutExtra (\"desc\", desc.Test.Description);\n                testIntent.PutExtra (\"log\", desc.Log);\n\n                StartActivity (testIntent);\n            };\n\n            SetProgressBarVisibility (true);\n        }\n\n        protected override void OnStart()\n        {\n            base.OnStart();\n\n            App.Listener.PropertyChanged += OnListenerPropertyChanged;\n\n            SetProgress (App.Listener.Progress);\n\n            ShowStatus();\n        }\n\n        protected override void OnStop()\n        {\n            base.OnStop();\n\n            App.Listener.PropertyChanged -= OnListenerPropertyChanged;\n        }\n\n        private void ShowStatus()\n        {\n            RunOnUiThread (() =>\n            {\n                if (String.IsNullOrWhiteSpace (App.Listener.Status))\n                    return;\n\n                Toast.MakeText (this, App.Listener.Status, ToastLength.Long)\n                .Show ();\n            });\n        }\n\n        private void UpdateProgress()\n        {\n            RunOnUiThread (() =>\n            {\n                SetProgress (App.Listener.Progress);\n\n                this.runStatus.Text = String.Format (\"Passed: {0}  Failed: {1}\", App.Harness.Progress - App.Harness.Failures, App.Harness.Failures);\n            });\n        }\n\n        private void OnListenerPropertyChanged (object sender, PropertyChangedEventArgs e)\n        {\n            switch (e.PropertyName) {\n                case \"Progress\":\n                    UpdateProgress();\n                    break;\n\n                case \"Status\":\n                    ShowStatus();\n                    break;\n            }\n        }\n\n        class TestListAdapter\n            : BaseExpandableListAdapter\n        {\n            public TestListAdapter (Activity activity, TestListener listener)\n            {\n                this.activity = activity;\n                this.listener = listener;\n\n                INotifyCollectionChanged changed = listener.Groups as INotifyCollectionChanged;\n                if (changed != null)\n                    changed.CollectionChanged += OnGroupsCollectionChanged;\n\n                this.groups = new List<GroupDescription> (listener.Groups);\n            }\n\n            public override Java.Lang.Object GetChild (int groupPosition, int childPosition)\n            {\n                GroupDescription group = this.groups [groupPosition];\n                return group.Tests.ElementAt (childPosition);\n            }\n\n            public override long GetChildId (int groupPosition, int childPosition)\n            {\n                return groupPosition * (childPosition * 2);\n            }\n\n            public override int GetChildrenCount (int groupPosition)\n            {\n                GroupDescription group = this.groups [groupPosition];\n                return group.Tests.Count;\n            }\n\n            public override View GetChildView (int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)\n            {\n                GroupDescription group = this.groups [groupPosition];\n                TestDescription test = group.Tests.ElementAt (childPosition);\n\n                View view = convertView;\n                if (view == null)\n                    view = this.activity.LayoutInflater.Inflate (Resource.Layout.ListedTest, null);\n\n                TextView text = view.FindViewById<TextView> (Resource.Id.TestName);\n                text.Text = test.Test.Name;\n\n                if (!test.Test.Passed)\n                    text.SetTextColor (Color.Red);\n                else\n                    text.SetTextColor (Color.White);\n\n                return view;\n            }\n\n            public override Java.Lang.Object GetGroup (int groupPosition)\n            {\n                return this.groups [groupPosition];\n            }\n\n            public override long GetGroupId (int groupPosition)\n            {\n                return groupPosition;\n            }\n\n            public override View GetGroupView (int groupPosition, bool isExpanded, View convertView, ViewGroup parent)\n            {\n                GroupDescription group = this.groups [groupPosition];\n\n                View view = convertView;\n                if (view == null)\n                    view = this.activity.LayoutInflater.Inflate (Resource.Layout.ListedGroup, null);\n\n                TextView text = view.FindViewById<TextView> (Resource.Id.TestName);\n                text.Text = group.Group.Name;\n\n                if (group.HasFailures)\n                    text.SetTextColor (Color.Red);\n                else\n                    text.SetTextColor (Color.White);\n\n                return view;\n            }\n\n            public override bool IsChildSelectable (int groupPosition, int childPosition)\n            {\n                return true;\n            }\n\n            public override int GroupCount\n            {\n                get { return this.groups.Count; }\n            }\n\n            public override bool HasStableIds\n            {\n                get { return false; }\n            }\n\n            private List<GroupDescription> groups;\n            private Activity activity;\n            private TestListener listener;\n\n            void OnTestsCollectionChanged (object sender, NotifyCollectionChangedEventArgs e)\n            {\n                this.activity.RunOnUiThread (() => {\n                    NotifyDataSetChanged ();\n                });\n            }\n\n            void OnGroupsCollectionChanged (object sender, NotifyCollectionChangedEventArgs e)\n            {\n                this.activity.RunOnUiThread (() => {\n                    foreach (INotifyCollectionChanged notify in this.groups.Select (g => g.Tests).OfType<INotifyCollectionChanged>())\n                        notify.CollectionChanged -= OnTestsCollectionChanged;\n\n                    this.groups = new List<GroupDescription> (this.listener.Groups);\n                    foreach (INotifyCollectionChanged notify in this.groups.Select (g => g.Tests).OfType<INotifyCollectionChanged>())\n                        notify.CollectionChanged += OnTestsCollectionChanged;\n\n                    NotifyDataSetChanged ();\n                });\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/LoginActivity.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Android.App;\nusing Android.Content;\nusing Android.OS;\nusing Android.Preferences;\nusing Android.Widget;\nusing Microsoft.WindowsAzure.MobileServices;\n\nnamespace Microsoft.WindowsAzure.Mobile.Android.Test\n{\n    [Activity(Label = \"Microsoft.WindowsAzure.Mobile.Android.Test\", MainLauncher = true, Icon = \"@drawable/icon\")]\n    public class LoginActivity : Activity\n    {\n        private const string MobileServiceUriKey = \"MobileServiceUri\";\n        private const string MobileServiceKeyKey = \"MobileServiceKey\";\n        private const string TagsKey = \"Tags\";\n\n        private EditText uriText, keyText, tagsText;\n\n        protected override void OnCreate (Bundle bundle)\n        {\n            base.OnCreate (bundle);\n            SetContentView (Resource.Layout.Login);\n\n            ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (this);\n            \n            this.uriText = FindViewById<EditText> (Resource.Id.ServiceUri);\n            this.uriText.Text = prefs.GetString (MobileServiceUriKey, null);\n\n            this.keyText = FindViewById<EditText> (Resource.Id.ServiceKey);\n            this.keyText.Text = prefs.GetString (MobileServiceKeyKey, null);\n\n            this.tagsText = FindViewById<EditText> (Resource.Id.ServiceTags);\n            this.tagsText.Text = prefs.GetString (TagsKey, null);\n\n            FindViewById<Button> (Resource.Id.RunTests).Click += OnClickRunTests;\n            FindViewById<Button>(Resource.Id.Login).Click += OnClickLogin;\n        }\n\n        private void OnClickRunTests (object sender, EventArgs eventArgs)\n        {\n            using (ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (this))\n            using (ISharedPreferencesEditor editor = prefs.Edit()) {\n                editor.PutString (MobileServiceUriKey, this.uriText.Text);\n                editor.PutString (MobileServiceKeyKey, this.keyText.Text);\n                editor.PutString (TagsKey, this.tagsText.Text);\n\n                editor.Commit();\n            }\n\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeUrl\"] = this.uriText.Text;\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeKey\"] = this.keyText.Text;\n            App.Harness.Settings.TagExpression = this.tagsText.Text;\n\n            if (!string.IsNullOrEmpty(App.Harness.Settings.TagExpression))\n            {\n                App.Harness.Settings.TagExpression += \" - notXamarin\";\n            }\n            else\n            {\n                App.Harness.Settings.TagExpression = \"!notXamarin\";\n            }\n\n            Task.Factory.StartNew (App.Harness.RunAsync);\n\n            Intent intent = new Intent (this, typeof (HarnessActivity));\n            StartActivity (intent);\n        }\n\n        private async void OnClickLogin(object sender, EventArgs eventArgs)\n        {\n            var client = new MobileServiceClient(this.uriText.Text, this.keyText.Text);\n            var user = await client.LoginAsync(this, MobileServiceAuthenticationProvider.MicrosoftAccount);\n            System.Diagnostics.Debug.WriteLine(user.UserId);\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/Microsoft.WindowsAzure.Mobile.Android.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{36A77431-95A0-4AA7-924A-A8F6C6C631C6}</ProjectGuid>\n    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.Mobile.Android.Test</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Android.Test</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <AndroidApplication>true</AndroidApplication>\n    <AndroidResgenFile>Resources\\Resource.Designer.cs</AndroidResgenFile>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <AndroidManifest>Properties\\AndroidManifest.xml</AndroidManifest>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AndroidLinkMode>None</AndroidLinkMode>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Mono.Android\" />\n    <Reference Include=\"mscorlib\" />\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monoandroid\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monoandroid\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App.cs\" />\n    <Compile Include=\"GroupDescription.cs\" />\n    <Compile Include=\"HarnessActivity.cs\" />\n    <Compile Include=\"LoginActivity.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Resources\\Resource.Designer.cs\" />\n    <Compile Include=\"TestDescription.cs\" />\n    <Compile Include=\"TestListener.cs\" />\n    <Compile Include=\"TestActivity.cs\" />\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\Functional\\PushFunctional.Test.cs\">\n      <Link>Functional\\PushFunctional.Test.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\TestPlatform\\CurrentTestPlatform.cs\">\n      <Link>TestPlatform\\CurrentTestPlatform.cs</Link>\n    </Compile>\n    <Compile Include=\"TestPlatform\\PushTestUtility.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AndroidResource Include=\"Resources\\Layout\\Login.axml\" />\n    <AndroidResource Include=\"Resources\\Layout\\Harness.axml\">\n      <SubType>AndroidResource</SubType>\n    </AndroidResource>\n    <AndroidResource Include=\"Resources\\Layout\\Test.axml\" />\n    <AndroidResource Include=\"Resources\\Layout\\ListedTest.axml\" />\n    <AndroidResource Include=\"Resources\\Layout\\ListedGroup.axml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"..\\Microsoft.WindowsAzure.MobileServices.iOS.Test\\readme.txt\">\n      <Link>readme.txt</Link>\n    </Content>\n    <Content Include=\"Properties\\AndroidManifest.xml\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Icon.png\" />\n    <AndroidResource Include=\"Resources\\Values\\Strings.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.Android\\Microsoft.WindowsAzure.Mobile.Ext.Android.csproj\">\n      <Project>{0f77566d-014f-4d09-b783-d4e701627d15}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.Android</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{a2500bd2-a9a2-4085-9978-dee3675b02dd}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{d8bbc92a-b213-463b-911d-3a106f91d5f9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Xamarin\\Android\\Xamarin.Android.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n     Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/Properties/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t<uses-sdk android:minSdkVersion=\"8\" android:targetSdkVersion=\"8\" />\n\t<application></application>\n</manifest>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Android.App;\nusing Microsoft.WindowsAzure.MobileServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.Android.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.Mobile.Android.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: ComVisible(false)]\n[assembly: Preserve]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n\n// Add some common permissions, these can be removed if not needed\n[assembly: UsesPermission(Android.Manifest.Permission.Internet)]\n[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/Resources/Layout/Harness.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:p1=\"http://schemas.android.com/apk/res/android\"\n    p1:orientation=\"vertical\"\n    p1:minWidth=\"25px\"\n    p1:minHeight=\"25px\"\n    p1:layout_width=\"fill_parent\"\n    p1:layout_height=\"fill_parent\">\n    <TextView\n        p1:layout_width=\"fill_parent\"\n        p1:layout_height=\"wrap_content\"\n        p1:id=\"@+id/RunStatus\" />\n    <ExpandableListView\n        p1:minWidth=\"25px\"\n        p1:minHeight=\"25px\"\n        p1:id=\"@+id/List\"\n        p1:layout_width=\"fill_parent\"\n        p1:layout_height=\"match_parent\"\n        p1:clickable=\"true\"\n        p1:choiceMode=\"singleChoice\" />\n</LinearLayout>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/Resources/Layout/ListedGroup.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"wrap_content\">\n    <TextView\n        android:id=\"@+id/TestName\"\n        android:paddingLeft=\"?android:attr/expandableListPreferredItemPaddingLeft\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingTop=\"5dp\"\n        android:paddingBottom=\"5dp\" />\n</LinearLayout>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/Resources/Layout/ListedTest.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:p1=\"http://schemas.android.com/apk/res/android\"\n    p1:orientation=\"vertical\"\n    p1:layout_width=\"fill_parent\"\n    p1:layout_height=\"fill_parent\"\n    p1:paddingLeft=\"?android:attr/expandableListPreferredChildPaddingLeft\">\n    <TextView\n        p1:id=\"@+id/TestName\"\n        p1:layout_width=\"wrap_content\"\n        p1:layout_height=\"wrap_content\" />\n</LinearLayout>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/Resources/Layout/Login.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:p1=\"http://schemas.android.com/apk/res/android\"\n    p1:orientation=\"vertical\"\n    p1:minWidth=\"25px\"\n    p1:minHeight=\"25px\"\n    p1:layout_width=\"fill_parent\"\n    p1:layout_height=\"fill_parent\">\n    <EditText\n        p1:layout_width=\"fill_parent\"\n        p1:layout_height=\"wrap_content\"\n        p1:id=\"@+id/ServiceUri\"\n        p1:hint=\"@string/MobileServiceUri\" />\n    <EditText\n        p1:layout_width=\"fill_parent\"\n        p1:layout_height=\"wrap_content\"\n        p1:id=\"@+id/ServiceKey\"\n        p1:hint=\"@string/MobileServiceKey\" />\n    <EditText\n        p1:layout_width=\"fill_parent\"\n        p1:layout_height=\"wrap_content\"\n        p1:id=\"@+id/ServiceTags\"\n        p1:hint=\"@string/Tags\" />\n    <Button\n        p1:text=\"@string/RunTests\"\n        p1:layout_width=\"fill_parent\"\n        p1:layout_height=\"wrap_content\"\n        p1:id=\"@+id/RunTests\" />\n    <Button\n        p1:text=\"@string/Login\"\n        p1:layout_width=\"fill_parent\"\n        p1:layout_height=\"wrap_content\"\n        p1:id=\"@+id/Login\" />\n</LinearLayout>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/Resources/Layout/Test.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"fill_parent\">\n    <TextView\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/Description\" />\n    <ScrollView\n        android:minWidth=\"25px\"\n        android:minHeight=\"25px\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\">\n        <TextView\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"fill_parent\"\n            android:id=\"@+id/Log\" />\n    </ScrollView>\n</LinearLayout>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/Resources/Resource.Designer.cs",
    "content": "#pragma warning disable 1591\n//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\n[assembly: global::Android.Runtime.ResourceDesignerAttribute(\"Microsoft.WindowsAzure.Mobile.Android.Test.Resource\", IsApplication=true)]\n\nnamespace Microsoft.WindowsAzure.Mobile.Android.Test\n{\n\t\n\t\n\t[System.CodeDom.Compiler.GeneratedCodeAttribute(\"Xamarin.Android.Build.Tasks\", \"1.0.0.0\")]\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tstatic Resource()\n\t\t{\n\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t}\n\t\t\n\t\tpublic static void UpdateIdValues()\n\t\t{\n\t\t}\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\tstatic Attribute()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Drawable\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020000\n\t\t\tpublic const int Icon = 2130837504;\n\t\t\t\n\t\t\tstatic Drawable()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Drawable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Id\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050008\n\t\t\tpublic const int Description = 2131034120;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050001\n\t\t\tpublic const int List = 2131034113;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050009\n\t\t\tpublic const int Log = 2131034121;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050007\n\t\t\tpublic const int Login = 2131034119;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050000\n\t\t\tpublic const int RunStatus = 2131034112;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050006\n\t\t\tpublic const int RunTests = 2131034118;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050004\n\t\t\tpublic const int ServiceKey = 2131034116;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050005\n\t\t\tpublic const int ServiceTags = 2131034117;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050003\n\t\t\tpublic const int ServiceUri = 2131034115;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050002\n\t\t\tpublic const int TestName = 2131034114;\n\t\t\t\n\t\t\tstatic Id()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Id()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Layout\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030000\n\t\t\tpublic const int Harness = 2130903040;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030001\n\t\t\tpublic const int ListedGroup = 2130903041;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030002\n\t\t\tpublic const int ListedTest = 2130903042;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030003\n\t\t\tpublic const int Login = 2130903043;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030004\n\t\t\tpublic const int Test = 2130903044;\n\t\t\t\n\t\t\tstatic Layout()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Layout()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class String\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040004\n\t\t\tpublic const int ApplicationName = 2130968580;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040005\n\t\t\tpublic const int Login = 2130968581;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040001\n\t\t\tpublic const int MobileServiceKey = 2130968577;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040000\n\t\t\tpublic const int MobileServiceUri = 2130968576;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040003\n\t\t\tpublic const int RunTests = 2130968579;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040002\n\t\t\tpublic const int Tags = 2130968578;\n\t\t\t\n\t\t\tstatic String()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate String()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n#pragma warning restore 1591\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/Resources/Values/Strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <string name=\"MobileServiceUri\">Mobile Service URI</string>\n\t<string name=\"MobileServiceKey\">Mobile Service Key</string>\n\t<string name=\"Tags\">Tags</string>\n\t<string name=\"RunTests\">Run Tests</string>\n\t<string name=\"ApplicationName\">Microsoft.WindowsAzure.Mobile.Android.Test</string>\n  <string name=\"Login\">Login</string>\n</resources>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/TestActivity.cs",
    "content": "using Android.App;\nusing Android.OS;\nusing Android.Widget;\n\nnamespace Microsoft.WindowsAzure.Mobile.Android.Test\n{\n    [Activity]\t\t\t\n    public class TestActivity : Activity\n    {\n        protected override void OnCreate (Bundle bundle)\n        {\n            base.OnCreate (bundle);\n\n            SetContentView (Resource.Layout.Test);\n\n            Title = Intent.GetStringExtra (\"name\");\n\n            FindViewById<TextView> (Resource.Id.Description).Text = Intent.GetStringExtra (\"desc\");\n            FindViewById<TextView> (Resource.Id.Log).Text = Intent.GetStringExtra (\"log\");\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/TestDescription.cs",
    "content": "using Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.Mobile.Android.Test\n{\n    sealed class TestDescription\n        : Java.Lang.Object\n    {\n        public TestDescription (TestMethod test, string log)\n        {\n            Test = test;\n            Log = log;\n        }\n\n        public TestMethod Test\n        {\n            get;\n            private set;\n        }\n\n        public string Log\n        {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/TestListener.cs",
    "content": "using System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\nusing System.Text;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.Mobile.Android.Test\n{\n    sealed class TestListener\n        : ITestReporter, INotifyPropertyChanged\n    {\n        public event PropertyChangedEventHandler PropertyChanged;\n\n        public string Status\n        {\n            get { return this.status; }\n            private set\n            {\n                if (this.status == value)\n                    return;\n\n                this.status = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public int Progress\n        {\n            get { return this.progress; }\n            private set\n            {\n                if (this.progress == value)\n                    return;\n\n                this.progress = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public IEnumerable<GroupDescription> Groups\n        {\n            get { return this.groups; }\n        }\n\n        void ITestReporter.StartRun (TestHarness harness)\n        {\n            Progress = 0;\n            this.groups.Clear();\n        }\n\n        void ITestReporter.Progress (TestHarness harness)\n        {\n            float value = harness.Progress;\n            int count = harness.Count;\n            if (count > 0)\n                value = value / count;\n\n            this.Progress = (int)(value * 10000);\n        }\n\n        void ITestReporter.EndRun (TestHarness harness)\n        {\n        }\n\n        void ITestReporter.StartGroup (TestGroup group)\n        {\n            this.currentGroup = new GroupDescription (group);\n            this.groups.Add (this.currentGroup);\n        }\n\n        void ITestReporter.EndGroup (TestGroup group)\n        {\n        }\n\n        void ITestReporter.StartTest (TestMethod test)\n        {\n            this.logBuilder = new StringBuilder();\n        }\n\n        void ITestReporter.EndTest (TestMethod test)\n        {\n            var description = new TestDescription (test, this.logBuilder.ToString());\n            this.currentGroup.Tests.Add (description);\n        }\n\n        void ITestReporter.Log (string message)\n        {\n            this.logBuilder.AppendLine (message);\n        }\n\n        void ITestReporter.Error (string errorDetails)\n        {\n            this.logBuilder.AppendLine (errorDetails);\n        }\n\n        void ITestReporter.Status (string newStatus)\n        {\n            Status = newStatus;\n        }\n\n        private GroupDescription currentGroup;\n        private readonly ObservableCollection<GroupDescription> groups = new ObservableCollection<GroupDescription>();\n\n        private StringBuilder logBuilder;\n        private string status;\n        private int progress;\n\n        private void OnPropertyChanged ([CallerMemberName] string propertyName = null)\n        {\n            PropertyChangedEventHandler handler = this.PropertyChanged;\n            if (handler != null)\n                handler (this, new PropertyChangedEventArgs (propertyName));\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/TestPlatform/PushTestUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    class PushTestUtility : IPushTestUtility\n    {\n        private const string DefaultChannelUri =\n            \"17BA0791499DB908433B80F37C5FBC89B870084B\";\n        const string BodyTemplate = \"{\\\"first prop\\\":\\\"first value\\\", \\\"second prop\\\":\\\"($message)\\\"}\";\n        const string DefaultToastTemplateName = \"templateForToastWns\";\n        readonly string[] DefaultTags = { \"fooWns\", \"barWns\" };        \n\n        public string GetPushHandle()\n        {\n            return DefaultChannelUri;\n        }\n\n        public string GetUpdatedPushHandle()\n        {\n            return DefaultChannelUri.Replace('A', 'B');\n        }\n\n        public Registration GetTemplateRegistrationForToast()\n        {\n            var channel = GetPushHandle();\n            return new GcmTemplateRegistration(channel, BodyTemplate, DefaultToastTemplateName, DefaultTags);\n        }\n\n        public void ValidateTemplateRegistration(Registration registration)\n        {\n            var gcmTemplateRegistration = (GcmTemplateRegistration)registration;\n            Assert.AreEqual(gcmTemplateRegistration.BodyTemplate, BodyTemplate);            \n\n            foreach (string tag in DefaultTags)\n            {\n                Assert.IsTrue(registration.Tags.Contains(tag));\n            }\n\n            Assert.AreEqual(gcmTemplateRegistration.Name, DefaultToastTemplateName);\n            Assert.AreEqual(gcmTemplateRegistration.TemplateName, DefaultToastTemplateName);\n        }\n\n        public void ValidateTemplateRegistrationBeforeRegister(Registration registration)\n        {\n            ValidateTemplateRegistration(registration);\n            Assert.AreEqual(registration.Tags.Count(), DefaultTags.Length);\n            Assert.IsNull(registration.RegistrationId);\n        }\n\n        public void ValidateTemplateRegistrationAfterRegister(Registration registration, string zumoInstallationId)\n        {\n            ValidateTemplateRegistration(registration);\n            Assert.IsNotNull(registration.RegistrationId);\n            // TODO: Uncomment when .Net Runtime implements installationID\n            //Assert.IsTrue(registration.Tags.Contains(zumoInstallationId));\n            Assert.AreEqual(registration.Tags.Count(), DefaultTags.Length + 1);\n        }\n\n        public Registration GetNewNativeRegistration(string deviceId, IEnumerable<string> tags)\n        {\n            return new GcmRegistration(deviceId, tags);\n        }        \n\n        public Registration GetNewTemplateRegistration(string deviceId, string bodyTemplate, string templateName)\n        {\n            return new GcmTemplateRegistration(deviceId, bodyTemplate, templateName);\n        }\n\n        public string GetListNativeRegistrationResponse()\n        {\n            return \"[{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\"}]\";\n        }\n\n        public string GetListTemplateRegistrationResponse()\n        {\n            return \"[{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\",\\\"templateBody\\\":\\\"cool template body\\\",\\\"templateName\\\":\\\"cool name\\\"}]\";\n        }\n\n        public string GetListMixedRegistrationResponse()\n        {\n            return \"[{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\"}, \" +\n            \"{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\",\\\"templateBody\\\":\\\"cool template body\\\",\\\"templateName\\\":\\\"cool name\\\"}]\";\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"2.5.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Android.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"MonoAndroid22\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/App.cs",
    "content": "using System;\nusing System.Linq;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Microsoft.WindowsAzure.MobileServices.Test;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.UnitTests;\nusing System.IO;\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test\n{\n    static class App\n    {\n        public static readonly TestHarness Harness = new TestHarness();\n\n        static App()\n        {\n            CurrentPlatform.Init();\n\n            SQLiteStoreTests.TestDbName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), \"test.db\");\n            Harness.Reporter = Listener;\n            Harness.LoadTestAssembly(typeof(SQLiteStoreTests).Assembly);\n        }\n\n        public static readonly TestListener Listener = new TestListener();\n    }\n} "
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/GroupDescription.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test\n{\n    sealed class GroupDescription\n        : Java.Lang.Object\n    {\n        public GroupDescription (TestGroup group)\n        {\n            Group = group;\n            this.tests.CollectionChanged += (sender, e) => HasFailures = this.tests.Any (t => !t.Test.Passed);\n        }\n\n        public TestGroup Group\n        {\n            get;\n            private set;\n        }\n\n        public bool HasFailures\n        {\n            get;\n            private set;\n        }\n\n        public ICollection<TestDescription> Tests\n        {\n            get { return this.tests; }\n        }\n\n        private readonly ObservableCollection<TestDescription> tests = new ObservableCollection<TestDescription>();\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/HarnessActivity.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Linq;\nusing Android.App;\nusing Android.OS;\nusing Android.Views;\nusing Android.Widget;\nusing System.Collections.Specialized;\nusing System.Collections.Generic;\nusing Android.Content;\nusing Android.Graphics;\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test\n{\n    [Activity]\n    public class HarnessActivity : Activity\n    {\n        private ExpandableListView list;\n        private TextView runStatus;\n\n        protected override void OnCreate (Bundle bundle)\n        {\n            base.OnCreate (bundle);\n            Title = \"C# Client Library Tests\";\n\n            RequestWindowFeature (WindowFeatures.Progress);\n\n            SetContentView (Resource.Layout.Harness);\n\n            this.runStatus = FindViewById<TextView> (Resource.Id.RunStatus);\n\n            this.list = FindViewById<ExpandableListView> (Resource.Id.List);\n            this.list.SetAdapter (new TestListAdapter (this, App.Listener));\n            this.list.ChildClick += (sender, e) => {\n                Intent testIntent = new Intent (this, typeof(TestActivity));\n\n                GroupDescription groupDesc = (GroupDescription)this.list.GetItemAtPosition (e.GroupPosition);\n                TestDescription desc = groupDesc.Tests.ElementAt (e.ChildPosition);\n\n                testIntent.PutExtra (\"name\", desc.Test.Name);\n                testIntent.PutExtra (\"desc\", desc.Test.Description);\n                testIntent.PutExtra (\"log\", desc.Log);\n\n                StartActivity (testIntent);\n            };\n\n            SetProgressBarVisibility (true);\n        }\n\n        protected override void OnStart()\n        {\n            base.OnStart();\n\n            App.Listener.PropertyChanged += OnListenerPropertyChanged;\n\n            SetProgress (App.Listener.Progress);\n\n            ShowStatus();\n        }\n\n        protected override void OnStop()\n        {\n            base.OnStop();\n\n            App.Listener.PropertyChanged -= OnListenerPropertyChanged;\n        }\n\n        private void ShowStatus()\n        {\n            RunOnUiThread (() =>\n            {\n                if (String.IsNullOrWhiteSpace (App.Listener.Status))\n                    return;\n\n                Toast.MakeText (this, App.Listener.Status, ToastLength.Long)\n                .Show ();\n            });\n        }\n\n        private void UpdateProgress()\n        {\n            RunOnUiThread (() =>\n            {\n                SetProgress (App.Listener.Progress);\n\n                this.runStatus.Text = String.Format (\"Passed: {0}  Failed: {1}\", App.Harness.Progress - App.Harness.Failures, App.Harness.Failures);\n            });\n        }\n\n        private void OnListenerPropertyChanged (object sender, PropertyChangedEventArgs e)\n        {\n            switch (e.PropertyName) {\n                case \"Progress\":\n                    UpdateProgress();\n                    break;\n\n                case \"Status\":\n                    ShowStatus();\n                    break;\n            }\n        }\n\n        class TestListAdapter\n            : BaseExpandableListAdapter\n        {\n            public TestListAdapter (Activity activity, TestListener listener)\n            {\n                this.activity = activity;\n                this.listener = listener;\n\n                INotifyCollectionChanged changed = listener.Groups as INotifyCollectionChanged;\n                if (changed != null)\n                    changed.CollectionChanged += OnGroupsCollectionChanged;\n\n                this.groups = new List<GroupDescription> (listener.Groups);\n            }\n\n            public override Java.Lang.Object GetChild (int groupPosition, int childPosition)\n            {\n                GroupDescription group = this.groups [groupPosition];\n                return group.Tests.ElementAt (childPosition);\n            }\n\n            public override long GetChildId (int groupPosition, int childPosition)\n            {\n                return groupPosition * (childPosition * 2);\n            }\n\n            public override int GetChildrenCount (int groupPosition)\n            {\n                GroupDescription group = this.groups [groupPosition];\n                return group.Tests.Count;\n            }\n\n            public override View GetChildView (int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)\n            {\n                GroupDescription group = this.groups [groupPosition];\n                TestDescription test = group.Tests.ElementAt (childPosition);\n\n                View view = convertView;\n                if (view == null)\n                    view = this.activity.LayoutInflater.Inflate (Resource.Layout.ListedTest, null);\n\n                TextView text = view.FindViewById<TextView> (Resource.Id.TestName);\n                text.Text = test.Test.Name;\n\n                if (!test.Test.Passed)\n                    text.SetTextColor (Color.Red);\n                else\n                    text.SetTextColor (Color.White);\n\n                return view;\n            }\n\n            public override Java.Lang.Object GetGroup (int groupPosition)\n            {\n                return this.groups [groupPosition];\n            }\n\n            public override long GetGroupId (int groupPosition)\n            {\n                return groupPosition;\n            }\n\n            public override View GetGroupView (int groupPosition, bool isExpanded, View convertView, ViewGroup parent)\n            {\n                GroupDescription group = this.groups [groupPosition];\n\n                View view = convertView;\n                if (view == null)\n                    view = this.activity.LayoutInflater.Inflate (Resource.Layout.ListedGroup, null);\n\n                TextView text = view.FindViewById<TextView> (Resource.Id.TestName);\n                text.Text = group.Group.Name;\n\n                if (group.HasFailures)\n                    text.SetTextColor (Color.Red);\n                else\n                    text.SetTextColor (Color.White);\n\n                return view;\n            }\n\n            public override bool IsChildSelectable (int groupPosition, int childPosition)\n            {\n                return true;\n            }\n\n            public override int GroupCount\n            {\n                get { return this.groups.Count; }\n            }\n\n            public override bool HasStableIds\n            {\n                get { return false; }\n            }\n\n            private List<GroupDescription> groups;\n            private Activity activity;\n            private TestListener listener;\n\n            void OnTestsCollectionChanged (object sender, NotifyCollectionChangedEventArgs e)\n            {\n                this.activity.RunOnUiThread (() => {\n                    NotifyDataSetChanged ();\n                });\n            }\n\n            void OnGroupsCollectionChanged (object sender, NotifyCollectionChangedEventArgs e)\n            {\n                this.activity.RunOnUiThread (() => {\n                    foreach (INotifyCollectionChanged notify in this.groups.Select (g => g.Tests).OfType<INotifyCollectionChanged>())\n                        notify.CollectionChanged -= OnTestsCollectionChanged;\n\n                    this.groups = new List<GroupDescription> (this.listener.Groups);\n                    foreach (INotifyCollectionChanged notify in this.groups.Select (g => g.Tests).OfType<INotifyCollectionChanged>())\n                        notify.CollectionChanged += OnTestsCollectionChanged;\n\n                    NotifyDataSetChanged ();\n                });\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/LoginActivity.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Android.App;\nusing Android.Content;\nusing Android.OS;\nusing Android.Preferences;\nusing Android.Widget;\nusing Microsoft.WindowsAzure.MobileServices;\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test\n{\n    [Activity(Label = \"Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test\", MainLauncher = true, Icon = \"@drawable/icon\")]\n    public class LoginActivity : Activity\n    {\n        private const string TagsKey = \"Tags\";\n\n        private EditText tagsText;\n\n        protected override void OnCreate (Bundle bundle)\n        {\n            base.OnCreate (bundle);\n            SetContentView (Resource.Layout.Login);\n\n            ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (this);\n            \n            this.tagsText = FindViewById<EditText> (Resource.Id.ServiceTags);\n            this.tagsText.Text = prefs.GetString (TagsKey, null);\n\n            FindViewById<Button> (Resource.Id.RunTests).Click += OnClickRunTests;\n        }\n\n        private void OnClickRunTests (object sender, EventArgs eventArgs)\n        {\n            using (ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (this))\n            using (ISharedPreferencesEditor editor = prefs.Edit()) {\n                editor.PutString (TagsKey, this.tagsText.Text);\n\n                editor.Commit();\n            }\n\n            if (!string.IsNullOrEmpty(App.Harness.Settings.TagExpression))\n            {\n                App.Harness.Settings.TagExpression += \" - notXamarin\";\n            }\n            else\n            {\n                App.Harness.Settings.TagExpression = \"!notXamarin\";\n            }\n\n            Task.Factory.StartNew (App.Harness.RunAsync);\n\n            Intent intent = new Intent (this, typeof (HarnessActivity));\n            StartActivity (intent);\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{984C6927-3A86-4EBF-9754-73952C2623F8}</ProjectGuid>\n    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <AndroidApplication>true</AndroidApplication>\n    <AndroidResgenFile>Resources\\Resource.Designer.cs</AndroidResgenFile>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <AndroidManifest>Properties\\AndroidManifest.xml</AndroidManifest>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n    <AndroidSupportedAbis>armeabi,armeabi-v7a,x86</AndroidSupportedAbis>\n    <AndroidStoreUncompressedFileExtensions />\n    <MandroidI18n />\n    <JavaMaximumHeapSize />\n    <JavaOptions />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AndroidLinkMode>None</AndroidLinkMode>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Mono.Android\" />\n    <Reference Include=\"mscorlib\" />\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SQLitePCL\">\n      <HintPath>..\\..\\packages\\SQLitePCL.3.8.7.2\\lib\\MonoAndroid\\SQLitePCL.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SQLitePCL.Ext\">\n      <HintPath>..\\..\\packages\\SQLitePCL.3.8.7.2\\lib\\MonoAndroid\\SQLitePCL.Ext.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monoandroid\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monoandroid\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App.cs\" />\n    <Compile Include=\"GroupDescription.cs\" />\n    <Compile Include=\"HarnessActivity.cs\" />\n    <Compile Include=\"LoginActivity.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Resources\\Resource.Designer.cs\" />\n    <Compile Include=\"TestDescription.cs\" />\n    <Compile Include=\"TestListener.cs\" />\n    <Compile Include=\"TestActivity.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AndroidResource Include=\"Resources\\Layout\\Login.axml\" />\n    <AndroidResource Include=\"Resources\\Layout\\Harness.axml\">\n      <SubType>AndroidResource</SubType>\n    </AndroidResource>\n    <AndroidResource Include=\"Resources\\Layout\\Test.axml\" />\n    <AndroidResource Include=\"Resources\\Layout\\ListedTest.axml\" />\n    <AndroidResource Include=\"Resources\\Layout\\ListedGroup.axml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"..\\Microsoft.WindowsAzure.MobileServices.iOS.Test\\readme.txt\">\n      <Link>readme.txt</Link>\n    </Content>\n    <Content Include=\"Properties\\AndroidManifest.xml\" />\n    <AndroidResource Include=\"Resources\\Drawable\\Icon.png\" />\n    <AndroidResource Include=\"Resources\\Values\\Strings.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.Android\\Microsoft.WindowsAzure.Mobile.Ext.Android.csproj\">\n      <Project>{0f77566d-014f-4d09-b783-d4e701627d15}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.Android</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.SQLiteStore\\Microsoft.WindowsAzure.Mobile.SQLiteStore.csproj\">\n      <Project>{4c20d49a-fe5e-4d9c-98b9-8125450074f5}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.SQLiteStore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\\Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.csproj\">\n      <Project>{cd5d8a3a-5631-41bf-8161-8a2a7f892b71}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.SQLiteStore.Test</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{a2500bd2-a9a2-4085-9978-dee3675b02dd}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{d8bbc92a-b213-463b-911d-3a106f91d5f9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Xamarin\\Android\\Xamarin.Android.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n     Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/Properties/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t<uses-sdk android:minSdkVersion=\"8\" android:targetSdkVersion=\"8\" />\n\t<application></application>\n</manifest>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Android.App;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.Android.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.Mobile.Android.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: ComVisible(false)]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n\n// Add some common permissions, these can be removed if not needed\n[assembly: UsesPermission(Android.Manifest.Permission.Internet)]\n[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/Resources/Layout/Harness.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:p1=\"http://schemas.android.com/apk/res/android\"\n    p1:orientation=\"vertical\"\n    p1:minWidth=\"25px\"\n    p1:minHeight=\"25px\"\n    p1:layout_width=\"fill_parent\"\n    p1:layout_height=\"fill_parent\">\n    <TextView\n        p1:layout_width=\"fill_parent\"\n        p1:layout_height=\"wrap_content\"\n        p1:id=\"@+id/RunStatus\" />\n    <ExpandableListView\n        p1:minWidth=\"25px\"\n        p1:minHeight=\"25px\"\n        p1:id=\"@+id/List\"\n        p1:layout_width=\"fill_parent\"\n        p1:layout_height=\"match_parent\"\n        p1:clickable=\"true\"\n        p1:choiceMode=\"singleChoice\" />\n</LinearLayout>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/Resources/Layout/ListedGroup.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"wrap_content\">\n    <TextView\n        android:id=\"@+id/TestName\"\n        android:paddingLeft=\"?android:attr/expandableListPreferredItemPaddingLeft\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingTop=\"5dp\"\n        android:paddingBottom=\"5dp\" />\n</LinearLayout>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/Resources/Layout/ListedTest.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:p1=\"http://schemas.android.com/apk/res/android\"\n    p1:orientation=\"vertical\"\n    p1:layout_width=\"fill_parent\"\n    p1:layout_height=\"fill_parent\"\n    p1:paddingLeft=\"?android:attr/expandableListPreferredChildPaddingLeft\">\n    <TextView\n        p1:id=\"@+id/TestName\"\n        p1:layout_width=\"wrap_content\"\n        p1:layout_height=\"wrap_content\" />\n</LinearLayout>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/Resources/Layout/Login.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:p1=\"http://schemas.android.com/apk/res/android\"\n    p1:orientation=\"vertical\"\n    p1:minWidth=\"25px\"\n    p1:minHeight=\"25px\"\n    p1:layout_width=\"fill_parent\"\n    p1:layout_height=\"fill_parent\">\n    <EditText\n        p1:layout_width=\"fill_parent\"\n        p1:layout_height=\"wrap_content\"\n        p1:id=\"@+id/ServiceTags\"\n        p1:hint=\"@string/Tags\" />\n    <Button\n        p1:text=\"@string/RunTests\"\n        p1:layout_width=\"fill_parent\"\n        p1:layout_height=\"wrap_content\"\n        p1:id=\"@+id/RunTests\" />\n</LinearLayout>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/Resources/Layout/Test.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"fill_parent\">\n    <TextView\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/Description\" />\n    <ScrollView\n        android:minWidth=\"25px\"\n        android:minHeight=\"25px\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\">\n        <TextView\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"fill_parent\"\n            android:id=\"@+id/Log\" />\n    </ScrollView>\n</LinearLayout>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/Resources/Resource.Designer.cs",
    "content": "#pragma warning disable 1591\n//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34014\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\n[assembly: global::Android.Runtime.ResourceDesignerAttribute(\"Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test.Resource\", IsApplication=true)]\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test\n{\n\t\n\t\n\t[System.CodeDom.Compiler.GeneratedCodeAttribute(\"Xamarin.Android.Build.Tasks\", \"1.0.0.0\")]\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tstatic Resource()\n\t\t{\n\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t}\n\t\t\n\t\tpublic static void UpdateIdValues()\n\t\t{\n\t\t}\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\tstatic Attribute()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Drawable\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020000\n\t\t\tpublic const int Icon = 2130837504;\n\t\t\t\n\t\t\tstatic Drawable()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Drawable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Id\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050005\n\t\t\tpublic const int Description = 2131034117;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050001\n\t\t\tpublic const int List = 2131034113;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050006\n\t\t\tpublic const int Log = 2131034118;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050000\n\t\t\tpublic const int RunStatus = 2131034112;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050004\n\t\t\tpublic const int RunTests = 2131034116;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050003\n\t\t\tpublic const int ServiceTags = 2131034115;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050002\n\t\t\tpublic const int TestName = 2131034114;\n\t\t\t\n\t\t\tstatic Id()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Id()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Layout\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030000\n\t\t\tpublic const int Harness = 2130903040;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030001\n\t\t\tpublic const int ListedGroup = 2130903041;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030002\n\t\t\tpublic const int ListedTest = 2130903042;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030003\n\t\t\tpublic const int Login = 2130903043;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030004\n\t\t\tpublic const int Test = 2130903044;\n\t\t\t\n\t\t\tstatic Layout()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Layout()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class String\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040002\n\t\t\tpublic const int ApplicationName = 2130968578;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040001\n\t\t\tpublic const int RunTests = 2130968577;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040000\n\t\t\tpublic const int Tags = 2130968576;\n\t\t\t\n\t\t\tstatic String()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate String()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n#pragma warning restore 1591\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/Resources/Values/Strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"Tags\">Tags</string>\n\t<string name=\"RunTests\">Run Tests</string>\n\t<string name=\"ApplicationName\">Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test</string>\n</resources>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/TestActivity.cs",
    "content": "using Android.App;\nusing Android.OS;\nusing Android.Widget;\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test\n{\n    [Activity]\t\t\t\n    public class TestActivity : Activity\n    {\n        protected override void OnCreate (Bundle bundle)\n        {\n            base.OnCreate (bundle);\n\n            SetContentView (Resource.Layout.Test);\n\n            Title = Intent.GetStringExtra (\"name\");\n\n            FindViewById<TextView> (Resource.Id.Description).Text = Intent.GetStringExtra (\"desc\");\n            FindViewById<TextView> (Resource.Id.Log).Text = Intent.GetStringExtra (\"log\");\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/TestDescription.cs",
    "content": "using Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test\n{\n    sealed class TestDescription\n        : Java.Lang.Object\n    {\n        public TestDescription (TestMethod test, string log)\n        {\n            Test = test;\n            Log = log;\n        }\n\n        public TestMethod Test\n        {\n            get;\n            private set;\n        }\n\n        public string Log\n        {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/TestListener.cs",
    "content": "using System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\nusing System.Text;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.Android.Test\n{\n    sealed class TestListener\n        : ITestReporter, INotifyPropertyChanged\n    {\n        public event PropertyChangedEventHandler PropertyChanged;\n\n        public string Status\n        {\n            get { return this.status; }\n            private set\n            {\n                if (this.status == value)\n                    return;\n\n                this.status = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public int Progress\n        {\n            get { return this.progress; }\n            private set\n            {\n                if (this.progress == value)\n                    return;\n\n                this.progress = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public IEnumerable<GroupDescription> Groups\n        {\n            get { return this.groups; }\n        }\n\n        void ITestReporter.StartRun (TestHarness harness)\n        {\n            Progress = 0;\n            this.groups.Clear();\n        }\n\n        void ITestReporter.Progress (TestHarness harness)\n        {\n            float value = harness.Progress;\n            int count = harness.Count;\n            if (count > 0)\n                value = value / count;\n\n            this.Progress = (int)(value * 10000);\n        }\n\n        void ITestReporter.EndRun (TestHarness harness)\n        {\n        }\n\n        void ITestReporter.StartGroup (TestGroup group)\n        {\n            this.currentGroup = new GroupDescription (group);\n            this.groups.Add (this.currentGroup);\n        }\n\n        void ITestReporter.EndGroup (TestGroup group)\n        {\n        }\n\n        void ITestReporter.StartTest (TestMethod test)\n        {\n            this.logBuilder = new StringBuilder();\n        }\n\n        void ITestReporter.EndTest (TestMethod test)\n        {\n            var description = new TestDescription (test, this.logBuilder.ToString());\n            this.currentGroup.Tests.Add (description);\n        }\n\n        void ITestReporter.Log (string message)\n        {\n            this.logBuilder.AppendLine (message);\n        }\n\n        void ITestReporter.Error (string errorDetails)\n        {\n            this.logBuilder.AppendLine (errorDetails);\n        }\n\n        void ITestReporter.Status (string newStatus)\n        {\n            Status = newStatus;\n        }\n\n        private GroupDescription currentGroup;\n        private readonly ObservableCollection<GroupDescription> groups = new ObservableCollection<GroupDescription>();\n\n        private StringBuilder logBuilder;\n        private string status;\n        private int progress;\n\n        private void OnPropertyChanged ([CallerMemberName] string propertyName = null)\n        {\n            PropertyChangedEventHandler handler = this.PropertyChanged;\n            if (handler != null)\n                handler (this, new PropertyChangedEventArgs (propertyName));\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"2.5.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Android.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"SQLitePCL\" version=\"3.8.7.2\" targetFramework=\"MonoAndroid22\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <sectionGroup name=\"userSettings\" type=\"System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n      <section name=\"Microsoft.WindowsAzure.Mobile.Net45.Test.Settings\" type=\"System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" allowExeDefinition=\"MachineToLocalUser\" requirePermission=\"false\" />\n    </sectionGroup>\n  </configSections>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n  </startup>\n  <userSettings>\n    <Microsoft.WindowsAzure.Mobile.Net45.Test.Settings>\n      <setting name=\"MobileServiceRuntimeUrl\" serializeAs=\"String\">\n        <value />\n      </setting>\n      <setting name=\"MobileServiceRuntimeKey\" serializeAs=\"String\">\n        <value />\n      </setting>\n      <setting name=\"MobileServiceTags\" serializeAs=\"String\">\n        <value />\n      </setting>\n    </Microsoft.WindowsAzure.Mobile.Net45.Test.Settings>\n  </userSettings>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/App.xaml",
    "content": "﻿<Application x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             StartupUri=\"UI\\MainWindow.xaml\">\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n                <!-- \n                Styles that define common aspects of the platform look and feel\n                Required by Visual Studio project and item templates\n                 -->\n                <ResourceDictionary Source=\"Common/StandardStyles.xaml\"/>\n            </ResourceDictionary.MergedDictionaries>\n        </ResourceDictionary> \n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/App.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Data;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test;\nusing Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.UnitTests;\nusing Microsoft.WindowsAzure.MobileServices.Test;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    /// <summary>\n    /// Interaction logic for App.xaml\n    /// </summary>\n    public partial class App : Application\n    {\n        /// <summary>\n        /// Gets the test harness used by the application.\n        /// </summary>\n        public static TestHarness Harness { get; private set; }\n\n        /// <summary>\n        /// Initialize the test harness.\n        /// </summary>\n        static App()\n        {\n            ConsoleHelper.Attach();\n            Harness = new TestHarness();\n            Harness.LoadTestAssembly(typeof(SQLiteStoreTests).GetTypeInfo().Assembly);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/Common/StandardStyles.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <!-- TextBlock styles -->\n\n    <Style x:Key=\"BasicTextStyle\" TargetType=\"TextBlock\">\n        <Setter Property=\"Foreground\" Value=\"White\"/>\n        <Setter Property=\"FontSize\" Value=\"10\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style x:Key=\"BaselineTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"HeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"40\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-2\" Y=\"8\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"SubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"26.667\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"30\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"6\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"TitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiBold\"/>\n    </Style>\n\n    <Style x:Key=\"SubtitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n    </Style>\n\n    <Style x:Key=\"ItemTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\"/>\n    \n</ResourceDictionary>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/Microsoft.WindowsAzure.Mobile.SQLiteStore.Net45.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\net45\\SQLitePCL.props\" Condition=\"Exists('..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\net45\\SQLitePCL.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{7C1A9BC1-3E60-4673-AC08-AC8399032D49}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.SQLiteStore.Net45.Test</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <WarningLevel>4</WarningLevel>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <NuGetPackageImportStamp>8eeed714</NuGetPackageImportStamp>\n    <NuGetPackageImportStamp>734e6be5</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SQLitePCL\">\n      <HintPath>..\\..\\packages\\SQLitePCL.3.8.7.2\\lib\\net45\\SQLitePCL.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xaml\">\n      <RequiredTargetFramework>4.0</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"WindowsBase\" />\n    <Reference Include=\"PresentationCore\" />\n    <Reference Include=\"PresentationFramework\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"Common\\StandardStyles.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"UI\\MainPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"UI\\TestPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"UI\\MainWindow.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.Mobile.Net45.Test\\ConsoleHelper.cs\">\n      <Link>ConsoleHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test\\UI\\GroupDescription.cs\">\n      <Link>UI\\GroupDescription.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test\\UI\\TestDescription.cs\">\n      <Link>UI\\TestDescription.cs</Link>\n    </Compile>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n      <DependentUpon>Settings.settings</DependentUpon>\n    </Compile>\n    <Compile Include=\"UI\\MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"UI\\TestPage.xaml.cs\">\n      <DependentUpon>TestPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"UI\\MainWindow.xaml.cs\">\n      <DependentUpon>MainWindow.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n    <AppDesigner Include=\"Properties\\\" />\n    <None Include=\"packages.config\" />\n    <None Include=\"Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.Net45\\Microsoft.WindowsAzure.Mobile.Ext.Net45.csproj\">\n      <Project>{6c5430ce-1dee-422a-94e3-071eb25e7429}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.Net45</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.SQLiteStore\\Microsoft.WindowsAzure.Mobile.SQLiteStore.csproj\">\n      <Project>{4c20d49a-fe5e-4d9c-98b9-8125450074f5}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.SQLiteStore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\\Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.csproj\">\n      <Project>{cd5d8a3a-5631-41bf-8161-8a2a7f892b71}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.SQLiteStore.Test</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{a2500bd2-a9a2-4085-9978-dee3675b02dd}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{d8bbc92a-b213-463b-911d-3a106f91d5f9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"PlatformTests\\\" />\n    <Folder Include=\"UnitTests\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"sqlite3.dll\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\net45\\SQLitePCL.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\net45\\SQLitePCL.props'))\" />\n    <Error Condition=\"!Exists('..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\net45\\SQLitePCL.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\net45\\SQLitePCL.targets'))\" />\n  </Target>\n  <Import Project=\"..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\net45\\SQLitePCL.targets\" Condition=\"Exists('..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\net45\\SQLitePCL.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Windows;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.Mobile.Net45.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.Mobile.Net45.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n//In order to begin building localizable applications, set \n//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file\n//inside a <PropertyGroup>.  For example, if you are using US english\n//in your source files, set the <UICulture> to en-US.  Then uncomment\n//the NeutralResourceLanguage attribute below.  Update the \"en-US\" in\n//the line below to match the UICulture setting in the project file.\n\n//[assembly: NeutralResourcesLanguage(\"en-US\", UltimateResourceFallbackLocation.Satellite)]\n\n\n[assembly: ThemeInfo(\n    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located\n    //(used if a resource is not found in the page, \n    // or application resource dictionaries)\n    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located\n    //(used if a resource is not found in the page, \n    // app, or any theme specific resource dictionaries)\n)]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34011\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34011\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"12.0.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n        \n        [global::System.Configuration.UserScopedSettingAttribute()]\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n        [global::System.Configuration.DefaultSettingValueAttribute(\"\")]\n        public string MobileServiceRuntimeUrl {\n            get {\n                return ((string)(this[\"MobileServiceRuntimeUrl\"]));\n            }\n            set {\n                this[\"MobileServiceRuntimeUrl\"] = value;\n            }\n        }\n        \n        [global::System.Configuration.UserScopedSettingAttribute()]\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n        [global::System.Configuration.DefaultSettingValueAttribute(\"\")]\n        public string MobileServiceRuntimeKey {\n            get {\n                return ((string)(this[\"MobileServiceRuntimeKey\"]));\n            }\n            set {\n                this[\"MobileServiceRuntimeKey\"] = value;\n            }\n        }\n        \n        [global::System.Configuration.UserScopedSettingAttribute()]\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n        [global::System.Configuration.DefaultSettingValueAttribute(\"\")]\n        public string MobileServiceTags {\n            get {\n                return ((string)(this[\"MobileServiceTags\"]));\n            }\n            set {\n                this[\"MobileServiceTags\"] = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\" GeneratedClassNamespace=\"Microsoft.WindowsAzure.Mobile.Net45.Test\" GeneratedClassName=\"Settings\">\n  <Profiles />\n  <Settings>\n    <Setting Name=\"MobileServiceRuntimeUrl\" Type=\"System.String\" Scope=\"User\">\n      <Value Profile=\"(Default)\" />\n    </Setting>\n    <Setting Name=\"MobileServiceRuntimeKey\" Type=\"System.String\" Scope=\"User\">\n      <Value Profile=\"(Default)\" />\n    </Setting>\n    <Setting Name=\"MobileServiceTags\" Type=\"System.String\" Scope=\"User\">\n      <Value Profile=\"(Default)\" />\n    </Setting>\n  </Settings>\n</SettingsFile>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/UI/MainPage.xaml",
    "content": "﻿<Page x:Class=\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.MainPage\"\n\t  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n\t  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n\t  xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n\t  xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n\t  mc:Ignorable=\"d\" \n\t  d:DesignHeight=\"300\" d:DesignWidth=\"300\"\n\tTitle=\"MainPage\">\n\n\t<Page.Resources>\n\t\t<Style x:Key=\"SubheaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n\t\t\t<Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n\t\t\t<Setter Property=\"FontSize\" Value=\"18\" />\n\t\t\t<Setter Property=\"FontWeight\" Value=\"Bold\" />\n\t\t\t<Setter Property=\"LineHeight\" Value=\"20\" />\n\t\t</Style>\n\t\t<Style x:Key=\"HeaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n\t\t\t<Setter Property=\"Foreground\" Value=\"#0094ff\" />\n\t\t</Style>\n\t\t<Style x:Key=\"DialogStyle\" TargetType=\"Border\">\n\t\t\t<Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\n\t\t\t<Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n\t\t\t<Setter Property=\"BorderBrush\" Value=\"White\" />\n\t\t\t<Setter Property=\"BorderThickness\" Value=\"2\" />\n\t\t\t<Setter Property=\"Padding\" Value=\"10\" />\n\t\t\t<Setter Property=\"CornerRadius\" Value=\"2\" />\n\t\t</Style>\n\t\t<Style x:Key=\"LabelStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n\t\t\t<Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n\t\t\t<Setter Property=\"HorizontalAlignment\" Value=\"Right\" />\n\t\t</Style>\n\t\t<Style x:Key=\"InputStyle\" TargetType=\"TextBox\">\n\t\t\t<Setter Property=\"MinWidth\" Value=\"400\" />\n\t\t\t<Setter Property=\"Margin\" Value=\"5\" />\n\t\t</Style>\n\t</Page.Resources>\n\t<Border>\n\t\t<Grid Margin=\"20\">\n\t\t\t<Grid.RowDefinitions>\n\t\t\t\t<RowDefinition Height=\"Auto\" />\n\t\t\t\t<RowDefinition Height=\"Auto\" />\n\t\t\t\t<RowDefinition Height=\"*\" />\n\t\t\t</Grid.RowDefinitions>\n\t\t\t<TextBlock Grid.Row=\"0\" Style=\"{StaticResource SubheaderStyle}\">Windows Azure Mobile Services</TextBlock>\n\t\t\t<TextBlock Grid.Row=\"1\"  Style=\"{StaticResource HeaderStyle}\">SQLiteStore Tests</TextBlock>\n\t\t\t<Border Grid.Row=\"2\" Style=\"{StaticResource DialogStyle}\">\n\t\t\t\t<Grid>\n\t\t\t\t\t<Grid.ColumnDefinitions>\n\t\t\t\t\t\t<ColumnDefinition Width=\"Auto\" />\n\t\t\t\t\t\t<ColumnDefinition Width=\"Auto\" />\n\t\t\t\t\t</Grid.ColumnDefinitions>\n\t\t\t\t\t<Grid.RowDefinitions>\n\t\t\t\t\t\t<RowDefinition Height=\"Auto\" />\n\t\t\t\t\t\t<RowDefinition Height=\"Auto\" />\n\t\t\t\t\t</Grid.RowDefinitions>\n\n\t\t\t\t\t<TextBlock\n\t\t\t\t\t  Grid.Row=\"0\"\n\t\t\t\t\t  Grid.Column=\"0\"\n\t\t\t\t\t  Style=\"{StaticResource LabelStyle}\"\n\t\t\t\t\t  Text=\"Tags:\" />\n\t\t\t\t\t<TextBox\n\t\t\t\t\t  x:Name=\"txtTags\"\n\t\t\t\t\t  Grid.Row=\"0\"\n\t\t\t\t\t  Grid.Column=\"1\"\n\t\t\t\t\t  Style=\"{StaticResource InputStyle}\" />\n\n\t\t\t\t\t<StackPanel\n\t\t\t\t\t\tGrid.Row=\"1\"\n\t\t\t\t\t\tGrid.Column=\"1\"\n\t\t\t\t\t\tHorizontalAlignment=\"Right\" \n                        Orientation=\"Horizontal\">\n\n\t\t\t\t\t\t<!--<Button\n\t\t\t\t\t\t  x:Name=\"btnLoginTests\"                         \n\t\t\t\t\t\t  Content=\"Login Tests\"\n\t\t\t\t\t\t  MinWidth=\"100\"\n\t\t\t\t\t\t  Click=\"ExecuteLoginTests\" />-->\n\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t  x:Name=\"btnUnitTests\"\n\t\t\t\t\t\t  Content=\"Unit Tests\"\n\t\t\t\t\t\t  MinWidth=\"100\"\n\t\t\t\t\t\t  Click=\"ExecuteUnitTests\" />\n\t\t\t\t\t</StackPanel>\n\t\t\t\t</Grid>\n\t\t\t</Border>\n\t\t</Grid>\n\t</Border>\n</Page>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/UI/MainPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    /// <summary>\n    /// Test setup UI page.\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        /// <summary>\n        /// Initializes a new instance of the MainPage class.\n        /// </summary>\n        public MainPage()\n        {\n            InitializeComponent();\n\n            string tags = Settings.Default.MobileServiceTags;\n\n            txtTags.Text = tags ?? \"\";\n\n            Loaded += (s, e) =>\n            {\n                btnUnitTests.Focus();\n                string[] args = Environment.GetCommandLineArgs();\n                if (args.Length >= 2 && args[1] == \"/auto\")\n                {\n                    if (args.Length > 2)\n                    {\n                        tags = args[2];\n                    }\n                    ExecuteUnitTests(tags, auto: true);\n                }\n            };\n        }\n\n        /// <summary>\n        /// Start the unit test run.\n        /// </summary>\n        /// <param name=\"sender\">Start button.</param>\n        /// <param name=\"e\">Event arguments.</param>\n        private void ExecuteUnitTests(object sender, RoutedEventArgs e)\n        {\n            // Get the test settings from the UI\n            Settings.Default.MobileServiceTags = txtTags.Text;\n\n            ExecuteUnitTests(txtTags.Text, auto: false);\n        }\n\n        private void ExecuteUnitTests(string tags, bool auto)\n        {\n            App.Harness.Settings.TagExpression = tags;\n            App.Harness.Settings.Custom[\"Auto\"] = auto ? \"True\" : \"False\";\n\n            this.NavigationService.Navigate(new TestPage());\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/UI/MainWindow.xaml",
    "content": "﻿<Window x:Class=\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        Title=\"MainWindow\" Height=\"350\" Width=\"525\"\n        Background=\"Black\">\n    <Grid>\n        <Frame x:Name=\"_mainFrame\" />\n    </Grid>\n</Window>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/UI/MainWindow.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    /// <summary>\n    /// Interaction logic for MainWindow.xaml\n    /// </summary>\n    public partial class MainWindow : Window\n    {\n        public MainWindow()\n        {\n            InitializeComponent();\n            _mainFrame.Navigate(new MainPage());\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/UI/TestPage.xaml",
    "content": "﻿<Page x:Class=\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.TestPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n      xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n      mc:Ignorable=\"d\" \n      d:DesignHeight=\"300\" d:DesignWidth=\"300\"\n\tTitle=\"TestPage\">\n\n    <Page.Resources>\n        <Style x:Key=\"SubheaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n            <Setter Property=\"FontSize\" Value=\"18\" />\n            <Setter Property=\"FontWeight\" Value=\"Bold\" />\n            <Setter Property=\"LineHeight\" Value=\"20\" />\n        </Style>\n        <Style x:Key=\"HeaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n            <Setter Property=\"Foreground\" Value=\"#0094ff\" />\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n        </Style>\n        <Style x:Key=\"TestStyle\" TargetType=\"ListView\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"Background\" Value=\"Transparent\" />\n        </Style>\n        <Style x:Key=\"StatusStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Top\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n        </Style>\n        <Style x:Key=\"ProgressStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n            <Setter Property=\"Foreground\" Value=\"#ffd800\" />\n        </Style>\n        <CollectionViewSource x:Key=\"cvsTests\" />\n    </Page.Resources>\n    <Border>\n        <Grid Margin=\"20\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n            </Grid.RowDefinitions>\n            <TextBlock Grid.Row=\"0\" Style=\"{StaticResource SubheaderStyle}\">Windows Azure Mobile Services</TextBlock>\n            <TextBlock Grid.Row=\"1\"  Style=\"{StaticResource HeaderStyle}\">C# Client Library Tests</TextBlock>\n            <TextBlock x:Name=\"lblStatus\" Grid.Row=\"2\" Style=\"{StaticResource StatusStyle}\">Unit Test Run</TextBlock>\n            <ListView\n              x:Name=\"lstTests\"\n              Grid.Row=\"3\"\n              Style=\"{StaticResource TestStyle}\"\n              ItemsSource=\"{Binding Source={StaticResource cvsTests}}\">\n                <ListView.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Margin=\"8 0\">\n                            <TextBlock Text=\"{Binding Name}\" Foreground=\"{Binding Brush}\" FontSize=\"16\" FontWeight=\"ExtraLight\" />\n                            <ItemsControl ItemsSource=\"{Binding Details}\" Margin=\"15 0 0 0\" FontSize=\"12\" Foreground=\"LightGray\" />\n                        </StackPanel>\n                    </DataTemplate>\n                </ListView.ItemTemplate>                            \n            </ListView>\n            <Grid  x:Name=\"pnlFooter\" Grid.Row=\"4\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\" />\n                    <RowDefinition Height=\"Auto\" />\n                </Grid.RowDefinitions>\n                <ProgressBar x:Name=\"progress\" />\n                <StackPanel Grid.Row=\"1\" Orientation=\"Horizontal\" HorizontalAlignment=\"Center\">\n                    <TextBlock x:Name=\"lblCurrentTestNumber\" Text=\"0\" Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock Text=\" / \"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock x:Name=\"lblTotalTestNumber\" Text=\"0\"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock Text=\"  (with  \"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock x:Name=\"lblFailureNumber\" Text=\"0\"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock Text=\" failures)\"  Style=\"{StaticResource ProgressStyle}\" />\n                </StackPanel>\n            </Grid>\n            <TextBlock\n              x:Name=\"lblResults\"\n              Grid.Row=\"5\"\n              Visibility=\"Collapsed\"\n              Style=\"{StaticResource ProgressStyle}\"\n              HorizontalAlignment=\"Center\" />\n        </Grid>\n    </Border>\n</Page>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/UI/TestPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\nusing System.Windows.Threading;\nusing Microsoft.WindowsAzure.MobileServices.Test;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    /// <summary>\n    /// Test harness results page.\n    /// </summary>\n    public sealed partial class TestPage : Page, ITestReporter\n    {\n        private ObservableCollection<GroupDescription> _groups;\n        private ObservableCollection<TestDescription> _tests;\n        private GroupDescription _currentGroup = null;\n        private TestDescription _currentTest = null;\n\n        /// <summary>\n        /// Initializes a new instance of the TestPage.\n        /// </summary>\n        public TestPage()\n        {\n            InitializeComponent();\n\n            // Setup the groups data source\n            _groups = new ObservableCollection<GroupDescription>();\n            _tests = new ObservableCollection<TestDescription>();\n            CollectionViewSource src = (CollectionViewSource)this.Resources[\"cvsTests\"];\n            src.Source = _tests;\n\n            // Start a test run\n            App.Harness.Reporter = this;\n            Task.Factory.StartNew(() => App.Harness.RunAsync());\n        }\n\n        public async void StartRun(TestHarness harness)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                lblCurrentTestNumber.Text = harness.Progress.ToString();\n                lblTotalTestNumber.Text = harness.Count.ToString();\n                lblFailureNumber.Tag = harness.Failures.ToString() ?? \"0\";\n                progress.Value = 1;\n                pnlFooter.Visibility = Visibility.Visible;\n            });\n        }\n\n        public async void EndRun(TestHarness harness)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                pnlFooter.Visibility = Visibility.Collapsed;\n                if (harness.Failures > 0)\n                {\n                    lblResults.Text = string.Format(CultureInfo.InvariantCulture, \"{0}/{1} tests failed!\", harness.Failures, harness.Count);\n                    lblResults.Foreground = new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0x00, 0x6E));\n                }\n                else\n                {\n                    lblResults.Text = string.Format(CultureInfo.InvariantCulture, \"{0} tests passed!\", harness.Count);\n                }\n                lblResults.Visibility = Visibility.Visible;\n                if (App.Harness.Settings.Custom[\"Auto\"] == \"True\")\n                {\n                    Application.Current.Shutdown(harness.Failures);\n                }\n            });\n        }\n\n        public async void Progress(TestHarness harness)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                lblCurrentTestNumber.Text = harness.Progress.ToString();\n                lblFailureNumber.Text = \" \" + (harness.Failures.ToString() ?? \"0\");\n                double value = harness.Progress;\n                int count = harness.Count;\n                if (count > 0)\n                {\n                    value = value * 100.0 / (double)count;\n                }\n                progress.Value = value;\n            });\n        }\n\n        public async void StartGroup(TestGroup group)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                _currentGroup = new GroupDescription { Name = group.Name };\n                _groups.Add(_currentGroup);\n            });\n        }\n\n        public async void EndGroup(TestGroup group)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                _currentGroup = null;\n            });\n        }\n\n        public async void StartTest(TestMethod test)\n        {\n            await Dispatcher.InvokeAsync(async () =>\n            {\n                ConsoleHelper.Write(\"{0}...\", test.Name);\n                _currentTest = new TestDescription { Name = test.Name };\n                _currentGroup.Add(_currentTest);\n                _tests.Add(_currentTest);\n\n                await Dispatcher.InvokeAsync(() =>\n                {\n                    lstTests.ScrollIntoView(_currentTest);\n                });\n            });\n        }\n\n        public async void EndTest(TestMethod method)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                if (method.Excluded)\n                {\n                    _currentTest.Color = Color.FromArgb(0xFF, 0x66, 0x66, 0x66);\n                    ConsoleHelper.WriteLine(\"Skipped\");\n                }\n                else if (!method.Passed)\n                {\n                    _currentTest.Color = Color.FromArgb(0xFF, 0xFF, 0x00, 0x6E);\n                    ConsoleHelper.WriteLine(\"Failed\"); \n                }\n                else\n                {\n                    _currentTest.Color = Color.FromArgb(0xFF, 0x2A, 0x9E, 0x39);\n                    ConsoleHelper.WriteLine(\"Passed\");\n                }\n                _currentTest = null;\n            });\n        }\n\n        public async void Log(string message)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                _currentTest.Details.Add(message);\n            });\n        }\n\n        public async void Error(string errorDetails)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                _currentTest.Details.Add(errorDetails);\n            });\n        }\n\n        public async void Status(string status)\n        {\n            await Dispatcher.InvokeAsync(() =>\n            {\n                lblStatus.Text = status;\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Net45.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"net45\" />\n  <package id=\"SQLitePCL\" version=\"3.8.7.2\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test/Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.SQLiteStore.Test</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <TargetFrameworkProfile>Profile78</TargetFrameworkProfile>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <RunCodeAnalysis>false</RunCodeAnalysis>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .NET Framework is automatically included -->\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"TestUtilities.cs\" />\n    <Compile Include=\"UnitTests\\SyncSettingsManagerTests.Integration.cs\" />\n    <Compile Include=\"UnitTests\\SQLiteStoreTests.Query.cs\" />\n    <Compile Include=\"UnitTests\\SQLiteStoreTests.cs\" />\n    <Compile Include=\"UnitTests\\SQLiteStoreTests.Integration.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.SQLiteStore\\Microsoft.WindowsAzure.Mobile.SQLiteStore.csproj\">\n      <Project>{4c20d49a-fe5e-4d9c-98b9-8125450074f5}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.SQLiteStore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{a2500bd2-a9a2-4085-9978-dee3675b02dd}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{d8bbc92a-b213-463b-911d-3a106f91d5f9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SQLitePCL\">\n      <HintPath>..\\..\\packages\\SQLitePCL.3.8.7.2\\lib\\portable-net45+sl50+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10\\SQLitePCL.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\Portable\\$(TargetFrameworkVersion)\\Microsoft.Portable.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Resources;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.MobileServices.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.MobileServices.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: NeutralResourcesLanguage(\"en\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test/TestUtilities.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing SQLitePCL;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    internal class TestUtilities\n    {\n        public static void ResetDatabase(string dbName)\n        {            \n            TestUtilities.DropTestTable(dbName, MobileServiceLocalSystemTables.OperationQueue);\n            TestUtilities.DropTestTable(dbName, MobileServiceLocalSystemTables.SyncErrors);\n            TestUtilities.DropTestTable(dbName, MobileServiceLocalSystemTables.Config);\n        }\n\n        public static void DropTestTable(string dbName, string tableName)\n        {\n            ExecuteNonQuery(dbName, \"DROP TABLE IF EXISTS \" + tableName);\n        }\n\n        public static long CountRows(string dbName, string tableName)\n        {\n            long count;\n            using (var connection = new SQLiteConnection(dbName))\n            {\n                using (var statement = connection.Prepare(\"SELECT COUNT(1) from \" + tableName))\n                {\n                    statement.Step();\n\n                    count = (long)statement[0];\n                }\n            }\n            return count;\n        }\n\n        public static void Truncate(string dbName, string tableName)\n        {\n            ExecuteNonQuery(dbName, \"DELETE FROM \" + tableName);\n        }\n\n        public static void ExecuteNonQuery(string dbName, string sql)\n        {\n            using (var connection = new SQLiteConnection(dbName))\n            {\n                using (var statement = connection.Prepare(sql))\n                {\n                    if (statement.Step() != SQLiteResult.DONE)\n                    {\n                        throw new InvalidOperationException();\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test/UnitTests/SQLiteStoreTests.Integration.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Microsoft.WindowsAzure.MobileServices.Test;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.UnitTests\n{\n    public class SQLiteStoreIntegrationTests : TestBase\n    {\n        private const string TestTable = \"stringId_test_table\";\n\n        public static string TestDbName = SQLiteStoreTests.TestDbName;\n\n        [AsyncTestMethod]\n        public async Task InsertAsync_Throws_IfItemAlreadyExistsInLocalStore()\n        {\n            ResetDatabase(TestTable);\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable(TestTable, new JObject()\n            {\n                { \"id\", String.Empty},\n                { \"String\", String.Empty }\n            });\n\n            var hijack = new TestHttpHandler();\n            IMobileServiceClient service = await CreateClient(hijack, store);\n\n            string pullResult = \"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Wow\\\"}]\";\n            hijack.AddResponseContent(pullResult);\n            hijack.AddResponseContent(\"[]\");\n\n            IMobileServiceSyncTable table = service.GetSyncTable(TestTable);\n            await table.PullAsync(null, null);\n\n            var ex = await AssertEx.Throws<MobileServiceLocalStoreException>(() => table.InsertAsync(new JObject() { { \"id\", \"abc\" } }));\n\n            Assert.AreEqual(ex.Message, \"An insert operation on the item is already in the queue.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_RoundTripsDate()\n        {\n            string tableName = \"itemWithDate\";\n\n            ResetDatabase(tableName);\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable(tableName, new JObject()\n            {\n                { \"id\", String.Empty},\n                { \"date\", DateTime.Now }\n            });\n\n            var hijack = new TestHttpHandler();\n            IMobileServiceClient service = await CreateClient(hijack, store);\n            IMobileServiceSyncTable table = service.GetSyncTable(tableName);\n\n            DateTime theDate = new DateTime(2014, 3, 10, 0, 0, 0, DateTimeKind.Utc);\n            JObject inserted = await table.InsertAsync(new JObject() { { \"date\", theDate } });\n\n            Assert.AreEqual(inserted[\"date\"].Value<DateTime>(), theDate);\n\n            JObject rehydrated = await table.LookupAsync(inserted[\"id\"].Value<string>());\n\n            Assert.AreEqual(rehydrated[\"date\"].Value<DateTime>(), theDate);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_RoundTripsDate_Generic()\n        {\n            string tableName = \"NotSystemPropertyCreatedAtType\";\n\n            ResetDatabase(tableName);\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable<NotSystemPropertyCreatedAtType>();\n\n            var hijack = new TestHttpHandler();\n            IMobileServiceClient service = await CreateClient(hijack, store);\n            IMobileServiceSyncTable<NotSystemPropertyCreatedAtType> table = service.GetSyncTable<NotSystemPropertyCreatedAtType>();\n\n            DateTime theDate = new DateTime(2014, 3, 10, 0, 0, 0, DateTimeKind.Utc);\n            var inserted = new NotSystemPropertyCreatedAtType() { CreatedAt = theDate };\n            await table.InsertAsync(inserted);\n\n            Assert.AreEqual(inserted.CreatedAt.ToUniversalTime(), theDate);\n\n            NotSystemPropertyCreatedAtType rehydrated = await table.LookupAsync(inserted.Id);\n\n            Assert.AreEqual(rehydrated.CreatedAt.ToUniversalTime(), theDate);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_RoundTripsBytes()\n        {\n            const string tableName = \"bytes_test_table\";\n\n            ResetDatabase(tableName);\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable(tableName, new JObject {\n                { \"id\", String.Empty },\n                { \"data\", new byte[0] }\n            });\n\n            var hijack = new TestHttpHandler();\n            IMobileServiceClient service = await CreateClient(hijack, store);\n            IMobileServiceSyncTable table = service.GetSyncTable(tableName);\n\n            byte[] theData = { 0, 128, 255 };\n\n            JObject inserted = await table.InsertAsync(new JObject { { \"data\", theData } });\n\n            Assert.AreEquivalent(theData, inserted[\"data\"].Value<byte[]>());\n\n            JObject rehydrated = await table.LookupAsync(inserted[\"id\"].Value<string>());\n\n            Assert.AreEquivalent(theData, rehydrated[\"data\"].Value<byte[]>());\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_RoundTripsBytes_Generic()\n        {\n            const string tableName = \"BytesType\";\n\n            ResetDatabase(tableName);\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable<BytesType>();\n\n            var hijack = new TestHttpHandler();\n            IMobileServiceClient service = await CreateClient(hijack, store);\n            IMobileServiceSyncTable<BytesType> table = service.GetSyncTable<BytesType>();\n\n            byte[] theData = { 0, 128, 255 };\n\n            BytesType inserted = new BytesType { Data = theData };\n\n            await table.InsertAsync(inserted);\n\n            Assert.AreEquivalent(inserted.Data, theData);\n\n            BytesType rehydrated = await table.LookupAsync(inserted.Id);\n\n            Assert.AreEquivalent(rehydrated.Data, theData);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_WithSystemPropertyType_Generic()\n        {\n            string tableName = \"stringId_test_table\";\n\n            ResetDatabase(tableName);\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable<ToDoWithSystemPropertiesType>();\n\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(@\"{\"\"id\"\": \"\"123\"\", \"\"__version\"\": \"\"xyz\"\"}\");\n            IMobileServiceClient service = await CreateClient(hijack, store);\n            var table = service.GetSyncTable<ToDoWithSystemPropertiesType>();\n\n            var inserted = new ToDoWithSystemPropertiesType()\n            {\n                Id = \"123\",\n                Version = \"abc\",\n                String = \"def\"\n            };\n            await table.InsertAsync(inserted);\n\n            Assert.AreEqual(inserted.Version, \"abc\");\n\n            await service.SyncContext.PushAsync();\n\n            ToDoWithSystemPropertiesType rehydrated = await table.LookupAsync(inserted.Id);\n\n            Assert.AreEqual(rehydrated.Version, \"xyz\");\n\n            string expectedRequestContent = @\"{\"\"id\"\":\"\"123\"\",\"\"String\"\":\"\"def\"\"}\";\n            // version should not be sent with insert request\n            Assert.AreEqual(hijack.RequestContents[0], expectedRequestContent);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_StringCompare_WithSpecialChars()\n        {\n            ResetDatabase(\"stringId_test_table\");\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable<ToDoWithSystemPropertiesType>();\n\n            IMobileServiceClient service = await CreateClient(new TestHttpHandler(), store);\n            var table = service.GetSyncTable<ToDoWithSystemPropertiesType>();\n\n            var inserted = new ToDoWithSystemPropertiesType()\n            {\n                Id = \"123\",\n                Version = \"abc\",\n                String = \"test@contoso.com\"\n            };\n            await table.InsertAsync(inserted);\n\n            ToDoWithSystemPropertiesType rehydrated = (await table.Where(t => t.String == \"test@contoso.com\").ToListAsync()).FirstOrDefault();\n\n            Assert.AreEqual(rehydrated.String, \"test@contoso.com\");\n        }\n\n        [AsyncTestMethod]\n        public async Task DefineTable_IgnoresColumn_IfCaseIsDifferentButNameIsSame()\n        {\n            string tableName = \"itemWithDate\";\n\n            ResetDatabase(tableName);\n\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                store.DefineTable(tableName, new JObject()\n                {\n                    { \"id\", String.Empty},\n                    { \"date\", DateTime.Now }\n                });\n\n                var hijack = new TestHttpHandler();\n                await CreateClient(hijack, store);\n            }\n\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                store.DefineTable(tableName, new JObject()\n                {\n                    { \"id\", String.Empty},\n                    { \"DaTE\", DateTime.Now } // the casing of date is different here\n                });\n\n                var hijack = new TestHttpHandler();\n                await CreateClient(hijack, store);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task Upsert_Succeeds_IfCaseIsDifferentButNameIsSame()\n        {\n            string tableName = \"itemWithDate\";\n\n            ResetDatabase(tableName);\n\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                store.DefineTable(tableName, new JObject()\n                {\n                    { \"id\", String.Empty},\n                    { \"date\", DateTime.Now }\n                });\n\n                await store.InitializeAsync();\n\n                await store.UpsertAsync(\"ITEMwithDATE\", new[]\n                {\n                    new JObject()\n                    {\n                        { \"ID\", Guid.NewGuid() },\n                        {\"dATE\", DateTime.UtcNow }\n                    }\n                }, ignoreMissingColumns: false);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_DoesIncrementalSync_WhenQueryIdIsSpecified()\n        {\n            ResetDatabase(TestTable);\n\n            var hijack = new TestHttpHandler();\n            IMobileServiceSyncTable<ToDoWithStringId> table = await GetSynctable<ToDoWithStringId>(hijack);\n\n            string pullResult = \"[{\\\"id\\\":\\\"b\\\",\\\"String\\\":\\\"Wow\\\",\\\"__version\\\":\\\"def\\\", \\\"__updatedAt\\\":\\\"2014-01-30T23:01:33.444Z\\\"}]\";\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(pullResult) }); // pull\n            hijack.AddResponseContent(\"[]\");\n\n            await table.PullAsync(queryId: \"todoItems\", query: table.CreateQuery());\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.Query, \"?$filter=(__updatedAt%20ge%20datetimeoffset'1970-01-01T00%3A00%3A00.0000000%2B00%3A00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__deleted\");\n\n\n            pullResult = \"[{\\\"id\\\":\\\"b\\\",\\\"String\\\":\\\"Updated\\\",\\\"__version\\\":\\\"def\\\", \\\"__updatedAt\\\":\\\"2014-02-27T23:01:33.444Z\\\"}]\";\n            hijack.AddResponseContent(pullResult); // pull\n            hijack.AddResponseContent(\"[]\");\n\n            await table.PullAsync(queryId: \"todoItems\", query: table.CreateQuery());\n\n            var item = await table.LookupAsync(\"b\");\n            Assert.AreEqual(item.String, \"Updated\");\n            AssertEx.QueryEquals(hijack.Requests[2].RequestUri.Query, \"?$filter=(__updatedAt%20ge%20datetimeoffset'2014-01-30T23%3A01%3A33.4440000%2B00%3A00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__deleted\");\n\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_DoesIncrementalSync_WhenQueryIdIsSpecified_WithoutCache()\n        {\n            ResetDatabase(TestTable);\n\n            var hijack = new TestHttpHandler();\n            IMobileServiceSyncTable<ToDoWithStringId> table = await GetSynctable<ToDoWithStringId>(hijack);\n\n            string pullResult = \"[{\\\"id\\\":\\\"b\\\",\\\"String\\\":\\\"Wow\\\",\\\"__version\\\":\\\"def\\\", \\\"__updatedAt\\\":\\\"2014-01-30T23:01:33.444Z\\\"}]\";\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(pullResult) }); // pull\n            hijack.AddResponseContent(\"[]\");\n\n            await table.PullAsync(queryId: \"todoItems\", query: table.CreateQuery());\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.Query, \"?$filter=(__updatedAt%20ge%20datetimeoffset'1970-01-01T00%3A00%3A00.0000000%2B00%3A00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__deleted\");\n\n            table = await GetSynctable<ToDoWithStringId>(hijack);\n\n\n            pullResult = \"[{\\\"id\\\":\\\"b\\\",\\\"String\\\":\\\"Updated\\\",\\\"__version\\\":\\\"def\\\", \\\"__updatedAt\\\":\\\"2014-02-27T23:01:33.444Z\\\"}]\";\n            hijack.AddResponseContent(pullResult); // pull\n            hijack.AddResponseContent(\"[]\");\n\n            await table.PullAsync(queryId: \"todoItems\", query: table.CreateQuery());\n\n            var item = await table.LookupAsync(\"b\");\n            Assert.AreEqual(item.String, \"Updated\");\n            AssertEx.QueryEquals(hijack.Requests[2].RequestUri.Query, \"?$filter=(__updatedAt%20ge%20datetimeoffset'2014-01-30T23%3A01%3A33.4440000%2B00%3A00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_RequestsSystemProperties_WhenDefinedOnTableType()\n        {\n            ResetDatabase(TestTable);\n\n            var hijack = new TestHttpHandler();\n            IMobileServiceSyncTable<ToDoWithSystemPropertiesType> table = await GetSynctable<ToDoWithSystemPropertiesType>(hijack);\n\n            string pullResult = \"[{\\\"id\\\":\\\"b\\\",\\\"String\\\":\\\"Wow\\\",\\\"__version\\\":\\\"def\\\",\\\"__createdAt\\\":\\\"2014-01-29T23:01:33.444Z\\\", \\\"__updatedAt\\\":\\\"2014-01-30T23:01:33.444Z\\\"}]\";\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(pullResult) }); // pull\n            hijack.AddResponseContent(\"[]\");\n\n            await table.PullAsync(null, null);\n\n            var item = await table.LookupAsync(\"b\");\n            Assert.AreEqual(item.String, \"Wow\");\n            Assert.AreEqual(item.Version, \"def\");\n            // we preserved the system properties returned from server on update\n            Assert.AreEqual(item.CreatedAt.ToUniversalTime(), new DateTime(2014, 01, 29, 23, 1, 33, 444, DateTimeKind.Utc));\n            Assert.AreEqual(item.UpdatedAt.ToUniversalTime(), new DateTime(2014, 01, 30, 23, 1, 33, 444, DateTimeKind.Utc));\n\n            // we request all the system properties present on DefineTable<> object\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.Query, \"?$skip=0&$top=50&__includeDeleted=true&__systemproperties=__createdAt%2C__updatedAt%2C__version%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_DoesNotTriggerPush_OnUnrelatedTables_WhenThereIsOperationTable()\n        {\n            ResetDatabase(TestTable);\n            TestUtilities.DropTestTable(TestDbName, \"unrelatedTable\");\n            TestUtilities.DropTestTable(TestDbName, \"relatedTable\");\n            TestUtilities.DropTestTable(TestDbName, \"StringIdType\");\n\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // for pull\n            hijack.AddResponseContent(\"[]\"); // last page\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable(\"unrelatedTable\", new JObject() { { \"id\", String.Empty } });\n            store.DefineTable<StringIdType>();\n\n            IMobileServiceClient client = await CreateClient(hijack, store);\n\n            // insert item in pull table\n            IMobileServiceSyncTable unrelatedTable = client.GetSyncTable(\"unrelatedTable\");\n            await unrelatedTable.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n\n            // then insert item in other table\n            MobileServiceSyncTable<StringIdType> mainTable = client.GetSyncTable<StringIdType>() as MobileServiceSyncTable<StringIdType>;\n            var item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await mainTable.InsertAsync(item);\n\n            await mainTable.PullAsync(null, null, null, null, CancellationToken.None, null, \"relatedTable\");\n\n            Assert.AreEqual(hijack.Requests.Count, 3); // 1 for push and 2 for pull\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            Assert.AreEqual(1L, client.SyncContext.PendingOperations);\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_DoesNotTriggerPush_WhenPushOtherTablesIsFalse()\n        {\n            ResetDatabase(TestTable);\n            TestUtilities.DropTestTable(TestDbName, \"unrelatedTable\");\n            TestUtilities.DropTestTable(TestDbName, \"StringIdType\");\n\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // for pull\n            hijack.AddResponseContent(\"[]\"); // last page\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable(\"unrelatedTable\", new JObject() { { \"id\", String.Empty } });\n            store.DefineTable<StringIdType>();\n\n            IMobileServiceClient client = await CreateClient(hijack, store);\n\n            // insert item in pull table\n            IMobileServiceSyncTable unrelatedTable = client.GetSyncTable(\"unrelatedTable\");\n            await unrelatedTable.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n\n            // then insert item in other table\n            MobileServiceSyncTable<StringIdType> mainTable = client.GetSyncTable<StringIdType>() as MobileServiceSyncTable<StringIdType>;\n            var item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await mainTable.InsertAsync(item);\n\n            await mainTable.PullAsync(null, null, null, false, CancellationToken.None);\n\n            Assert.AreEqual(hijack.Requests.Count, 3); // 1 for push and 2 for pull\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            Assert.AreEqual(1L, client.SyncContext.PendingOperations);\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_TriggersPush_OnRelatedTables_WhenThereIsOperationTable()\n        {\n            ResetDatabase(TestTable);\n            TestUtilities.DropTestTable(TestDbName, \"relatedTable\");\n            TestUtilities.DropTestTable(TestDbName, \"StringIdType\");\n\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hi\\\"}\");\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // for pull\n            hijack.AddResponseContent(\"[]\"); // last page\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable(\"relatedTable\", new JObject() { { \"id\", String.Empty } });\n            store.DefineTable<StringIdType>();\n\n            IMobileServiceClient client = await CreateClient(hijack, store);\n\n            // insert item in pull table\n            IMobileServiceSyncTable unrelatedTable = client.GetSyncTable(\"relatedTable\");\n            await unrelatedTable.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n\n            // then insert item in other table\n            MobileServiceSyncTable<StringIdType> mainTable = client.GetSyncTable<StringIdType>() as MobileServiceSyncTable<StringIdType>;\n            var item = new StringIdType() { Id = \"abc\", String = \"what?\" };\n            await mainTable.InsertAsync(item);\n\n            await mainTable.PullAsync(null, null, null, null, CancellationToken.None, null, \"relatedTable\");\n\n            Assert.AreEqual(hijack.Requests.Count, 4); // 2 for push and 2 for pull\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.AbsolutePath, \"/tables/relatedTable\");\n            AssertEx.QueryEquals(hijack.Requests[1].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            AssertEx.QueryEquals(hijack.Requests[1].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            AssertEx.QueryEquals(hijack.Requests[1].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            Assert.AreEqual(0L, client.SyncContext.PendingOperations);\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_TriggersPush_WhenPushOtherTablesIsTrue_AndThereIsOperationTable()\n        {\n            ResetDatabase(TestTable);\n            TestUtilities.DropTestTable(TestDbName, \"relatedTable\");\n            TestUtilities.DropTestTable(TestDbName, \"StringIdType\");\n\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hi\\\"}\");\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // for pull\n            hijack.AddResponseContent(\"[]\"); // last page\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable(\"relatedTable\", new JObject() { { \"id\", String.Empty } });\n            store.DefineTable<StringIdType>();\n\n            IMobileServiceClient client = await CreateClient(hijack, store);\n\n            // insert item in pull table\n            IMobileServiceSyncTable unrelatedTable = client.GetSyncTable(\"relatedTable\");\n            await unrelatedTable.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n\n            // then insert item in other table\n            MobileServiceSyncTable<StringIdType> mainTable = client.GetSyncTable<StringIdType>() as MobileServiceSyncTable<StringIdType>;\n            var item = new StringIdType() { Id = \"abc\", String = \"what?\" };\n            await mainTable.InsertAsync(item);\n\n            await mainTable.PullAsync(null, null, null, true, CancellationToken.None);\n\n            Assert.AreEqual(hijack.Requests.Count, 4); // 2 for push and 2 for pull\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.AbsolutePath, \"/tables/relatedTable\");\n            AssertEx.QueryEquals(hijack.Requests[1].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            AssertEx.QueryEquals(hijack.Requests[1].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            AssertEx.QueryEquals(hijack.Requests[1].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            Assert.AreEqual(0L, client.SyncContext.PendingOperations);\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_PushesOnlySelectedTables_WhenSpecified()\n        {\n            ResetDatabase(TestTable);\n            TestUtilities.DropTestTable(TestDbName, \"someTable\");\n            TestUtilities.DropTestTable(TestDbName, \"StringIdType\");\n\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable(\"someTable\", new JObject() { { \"id\", String.Empty } });\n            store.DefineTable<StringIdType>();\n\n            IMobileServiceClient client = await CreateClient(hijack, store);\n\n            // insert item in pull table\n            IMobileServiceSyncTable unrelatedTable = client.GetSyncTable(\"someTable\");\n            await unrelatedTable.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n\n            // then insert item in other table\n            MobileServiceSyncTable<StringIdType> mainTable = client.GetSyncTable<StringIdType>() as MobileServiceSyncTable<StringIdType>;\n            var item = new StringIdType() { Id = \"abc\", String = \"what?\" };\n            await mainTable.InsertAsync(item);\n\n            await (client.SyncContext as MobileServiceSyncContext).PushAsync(CancellationToken.None, MobileServiceTableKind.Table, \"someTable\");\n\n            Assert.AreEqual(hijack.Requests.Count, 1);\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.AbsolutePath, \"/tables/someTable\");\n            Assert.AreEqual(1L, client.SyncContext.PendingOperations);\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_PushesAllTables_WhenEmptyListIsGiven()\n        {\n            ResetDatabase(TestTable);\n            TestUtilities.DropTestTable(TestDbName, \"someTable\");\n            TestUtilities.DropTestTable(TestDbName, \"StringIdType\");\n\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable(\"someTable\", new JObject() { { \"id\", String.Empty } });\n            store.DefineTable<StringIdType>();\n\n            IMobileServiceClient client = await CreateClient(hijack, store);\n\n            // insert item in pull table\n            IMobileServiceSyncTable table1 = client.GetSyncTable(\"someTable\");\n            await table1.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n\n            // then insert item in other table\n            MobileServiceSyncTable<StringIdType> table2 = client.GetSyncTable<StringIdType>() as MobileServiceSyncTable<StringIdType>;\n            var item = new StringIdType() { Id = \"abc\", String = \"what?\" };\n            await table2.InsertAsync(item);\n\n            await (client.SyncContext as MobileServiceSyncContext).PushAsync(CancellationToken.None);\n\n            Assert.AreEqual(hijack.Requests.Count, 2);\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.AbsolutePath, \"/tables/someTable\");\n            AssertEx.QueryEquals(hijack.Requests[1].RequestUri.AbsolutePath, \"/tables/StringIdType\");\n            Assert.AreEqual(0L, client.SyncContext.PendingOperations);\n        }\n\n        [AsyncTestMethod]\n        public async Task SystemPropertiesArePreserved_OnlyWhenReturnedFromServer()\n        {\n            ResetDatabase(TestTable);\n\n            var hijack = new TestHttpHandler();\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable<ToDoWithSystemPropertiesType>();\n\n            IMobileServiceClient service = await CreateClient(hijack, store);\n            IMobileServiceSyncTable<ToDoWithSystemPropertiesType> table = service.GetSyncTable<ToDoWithSystemPropertiesType>();\n\n            // first insert an item\n            var updatedItem = new ToDoWithSystemPropertiesType()\n            {\n                Id = \"b\",\n                String = \"Hey\",\n                Version = \"abc\",\n                CreatedAt = new DateTime(2013, 1, 1, 1, 1, 1, DateTimeKind.Utc),\n                UpdatedAt = new DateTime(2013, 1, 1, 1, 1, 2, DateTimeKind.Utc)\n            };\n            await table.UpdateAsync(updatedItem);\n\n            var lookedupItem = await table.LookupAsync(\"b\");\n\n            Assert.AreEqual(lookedupItem.String, \"Hey\");\n            Assert.AreEqual(lookedupItem.Version, \"abc\");\n            // we ignored the sys properties on the local object\n            Assert.AreEqual(lookedupItem.CreatedAt, new DateTime(0, DateTimeKind.Utc));\n            Assert.AreEqual(lookedupItem.UpdatedAt, new DateTime(0, DateTimeKind.Utc));\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L); // operation pending\n\n            hijack.OnSendingRequest = async req =>\n            {\n                // we request all the system properties present on DefineTable<> object\n                Assert.AreEqual(req.RequestUri.Query, \"?__systemproperties=__createdAt%2C__updatedAt%2C__version%2C__deleted\");\n\n                string content = await req.Content.ReadAsStringAsync();\n                Assert.AreEqual(content, @\"{\"\"id\"\":\"\"b\"\",\"\"String\"\":\"\"Hey\"\"}\"); // the system properties are not sent to server\n                return req;\n            };\n            string updateResult = \"{\\\"id\\\":\\\"b\\\",\\\"String\\\":\\\"Wow\\\",\\\"__version\\\":\\\"def\\\",\\\"__createdAt\\\":\\\"2014-01-29T23:01:33.444Z\\\", \\\"__updatedAt\\\":\\\"2014-01-30T23:01:33.444Z\\\"}\";\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(updateResult) }); // push\n            await service.SyncContext.PushAsync();\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 0L); // operation removed\n\n            lookedupItem = await table.LookupAsync(\"b\");\n            Assert.AreEqual(lookedupItem.String, \"Wow\");\n            Assert.AreEqual(lookedupItem.Version, \"def\");\n            // we preserved the system properties returned from server on update\n            Assert.AreEqual(lookedupItem.CreatedAt.ToUniversalTime(), new DateTime(2014, 01, 29, 23, 1, 33, 444, DateTimeKind.Utc));\n            Assert.AreEqual(lookedupItem.UpdatedAt.ToUniversalTime(), new DateTime(2014, 01, 30, 23, 1, 33, 444, DateTimeKind.Utc));\n        }\n\n        [AsyncTestMethod]\n        public async Task TruncateAsync_DeletesAllTheRows()\n        {\n            string tableName = \"stringId_test_table\";\n\n            ResetDatabase(tableName);\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable<ToDoWithSystemPropertiesType>();\n\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(@\"{\"\"id\"\": \"\"123\"\", \"\"__version\"\": \"\"xyz\"\"}\");\n            hijack.AddResponseContent(@\"{\"\"id\"\": \"\"134\"\", \"\"__version\"\": \"\"ghi\"\"}\");\n\n            IMobileServiceClient service = await CreateClient(hijack, store);\n            var table = service.GetSyncTable<ToDoWithSystemPropertiesType>();\n\n            var items = new ToDoWithSystemPropertiesType[]\n            {\n                new ToDoWithSystemPropertiesType()\n                {\n                    Id = \"123\",\n                    Version = \"abc\",\n                    String = \"def\"\n                },\n                new ToDoWithSystemPropertiesType()\n                {\n                    Id = \"134\",\n                    Version = \"ghi\",\n                    String = \"jkl\"\n                }\n            };\n\n            foreach (var inserted in items)\n            {\n                await table.InsertAsync(inserted);\n            }\n\n            var result = await table.IncludeTotalCount().Take(0).ToCollectionAsync();\n            Assert.AreEqual(result.TotalCount, 2L);\n\n            await service.SyncContext.PushAsync();\n            await table.PurgeAsync();\n\n            result = await table.IncludeTotalCount().Take(0).ToCollectionAsync();\n            Assert.AreEqual(result.TotalCount, 0L);\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_RetriesOperation_WhenConflictOccursInLastPush()\n        {\n            ResetDatabase(TestTable);\n\n            var hijack = new TestHttpHandler();\n            string conflictResult = \"{\\\"id\\\":\\\"b\\\",\\\"String\\\":\\\"Hey\\\",\\\"__version\\\":\\\"def\\\"}\";\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.PreconditionFailed) { Content = new StringContent(conflictResult) }); // first push\n            string successResult = \"{\\\"id\\\":\\\"b\\\",\\\"String\\\":\\\"Wow\\\",\\\"__version\\\":\\\"def\\\"}\";\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(successResult) }); // second push\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable<ToDoWithSystemPropertiesType>();\n\n            IMobileServiceClient service = await CreateClient(hijack, store);\n            IMobileServiceSyncTable<ToDoWithSystemPropertiesType> table = service.GetSyncTable<ToDoWithSystemPropertiesType>();\n\n            // first insert an item\n            var updatedItem = new ToDoWithSystemPropertiesType() { Id = \"b\", String = \"Hey\", Version = \"abc\" };\n            await table.UpdateAsync(updatedItem);\n\n            // then push it to server\n            var ex = await ThrowsAsync<MobileServicePushFailedException>(service.SyncContext.PushAsync);\n\n            Assert.IsNotNull(ex.PushResult);\n            Assert.AreEqual(ex.PushResult.Status, MobileServicePushStatus.Complete);\n            Assert.AreEqual(ex.PushResult.Errors.Count(), 1);\n            MobileServiceTableOperationError error = ex.PushResult.Errors.FirstOrDefault();\n            Assert.IsNotNull(error);\n            Assert.AreEqual(error.Handled, false);\n            Assert.AreEqual(error.OperationKind, MobileServiceTableOperationKind.Update);\n            Assert.AreEqual(error.RawResult, conflictResult);\n            Assert.AreEqual(error.TableName, TestTable);\n            Assert.AreEqual(error.Status, HttpStatusCode.PreconditionFailed);\n\n            var errorItem = error.Item.ToObject<ToDoWithSystemPropertiesType>(JsonSerializer.Create(service.SerializerSettings));\n            Assert.AreEqual(errorItem.Id, updatedItem.Id);\n            Assert.AreEqual(errorItem.String, updatedItem.String);\n            Assert.AreEqual(errorItem.Version, updatedItem.Version);\n            Assert.AreEqual(errorItem.CreatedAt, updatedItem.CreatedAt);\n            Assert.AreEqual(errorItem.UpdatedAt, updatedItem.UpdatedAt);\n\n            Assert.AreEqual(error.Result.ToString(Formatting.None), conflictResult);\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L); // operation not removed\n            updatedItem = await table.LookupAsync(\"b\");\n            Assert.AreEqual(updatedItem.String, \"Hey\"); // item is not updated \n\n            await service.SyncContext.PushAsync();\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 0L); // operation now succeeds\n\n            updatedItem = await table.LookupAsync(\"b\");\n            Assert.AreEqual(updatedItem.String, \"Wow\"); // item is updated\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_DiscardsOperationAndUpdatesTheItem_WhenCancelAndUpdateItemAsync()\n        {\n            ResetDatabase(TestTable);\n\n            var hijack = new TestHttpHandler();\n            string conflictResult = \"{\\\"id\\\":\\\"b\\\",\\\"String\\\":\\\"Wow\\\",\\\"__version\\\":\\\"def\\\"}\";\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.PreconditionFailed) { Content = new StringContent(conflictResult) }); // first push\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable<ToDoWithSystemPropertiesType>();\n\n            IMobileServiceClient service = await CreateClient(hijack, store);\n            IMobileServiceSyncTable<ToDoWithSystemPropertiesType> table = service.GetSyncTable<ToDoWithSystemPropertiesType>();\n\n            // first insert an item\n            var updatedItem = new ToDoWithSystemPropertiesType() { Id = \"b\", String = \"Hey\", Version = \"abc\" };\n            await table.UpdateAsync(updatedItem);\n\n            // then push it to server\n            var ex = await ThrowsAsync<MobileServicePushFailedException>(service.SyncContext.PushAsync);\n\n            Assert.IsNotNull(ex.PushResult);\n            MobileServiceTableOperationError error = ex.PushResult.Errors.FirstOrDefault();\n            Assert.IsNotNull(error);\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L); // operation is not removed\n            updatedItem = await table.LookupAsync(\"b\");\n            Assert.AreEqual(updatedItem.String, \"Hey\"); // item is not updated \n\n            await error.CancelAndUpdateItemAsync(error.Result);\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 0L); // operation is removed\n            updatedItem = await table.LookupAsync(\"b\");\n            Assert.AreEqual(updatedItem.String, \"Wow\"); // item is updated             \n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_DiscardsOperationAndDeletesTheItem_WhenCancelAndDiscardItemAsync()\n        {\n            ResetDatabase(TestTable);\n\n            var hijack = new TestHttpHandler();\n            string conflictResult = \"{\\\"id\\\":\\\"b\\\",\\\"String\\\":\\\"Wow\\\",\\\"__version\\\":\\\"def\\\"}\";\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.PreconditionFailed) { Content = new StringContent(conflictResult) }); // first push\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable<ToDoWithSystemPropertiesType>();\n\n            IMobileServiceClient service = await CreateClient(hijack, store);\n            IMobileServiceSyncTable<ToDoWithSystemPropertiesType> table = service.GetSyncTable<ToDoWithSystemPropertiesType>();\n\n            // first insert an item\n            var updatedItem = new ToDoWithSystemPropertiesType() { Id = \"b\", String = \"Hey\", Version = \"abc\" };\n            await table.UpdateAsync(updatedItem);\n\n            // then push it to server\n            var ex = await ThrowsAsync<MobileServicePushFailedException>(service.SyncContext.PushAsync);\n\n            Assert.IsNotNull(ex.PushResult);\n            MobileServiceTableOperationError error = ex.PushResult.Errors.FirstOrDefault();\n            Assert.IsNotNull(error);\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L); // operation is not removed\n            updatedItem = await table.LookupAsync(\"b\");\n            Assert.AreEqual(updatedItem.String, \"Hey\"); // item is not updated \n\n            await error.CancelAndDiscardItemAsync();\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 0L); // operation is removed\n            updatedItem = await table.LookupAsync(\"b\");\n            Assert.IsNull(updatedItem); // item is deleted\n        }\n\n        [AsyncTestMethod]\n        public async Task Insert_AllTypes_ThenRead_ThenPush_ThenLookup()\n        {\n            ResetDatabase(\"AllBaseTypesWithAllSystemPropertiesType\");\n\n            var hijack = new TestHttpHandler();\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable<AllBaseTypesWithAllSystemPropertiesType>();\n\n            IMobileServiceClient service = await CreateClient(hijack, store);\n            IMobileServiceSyncTable<AllBaseTypesWithAllSystemPropertiesType> table = service.GetSyncTable<AllBaseTypesWithAllSystemPropertiesType>();\n\n            // first insert an item\n            var inserted = new AllBaseTypesWithAllSystemPropertiesType()\n            {\n                Id = \"abc\",\n                Bool = true,\n                Byte = 11,\n                SByte = -11,\n                UShort = 22,\n                Short = -22,\n                UInt = 33,\n                Int = -33,\n                ULong = 44,\n                Long = -44,\n                Float = 55.66f,\n                Double = 66.77,\n                Decimal = 77.88M,\n                String = \"EightyEight\",\n                Char = '9',\n                DateTime = new DateTime(2010, 10, 10, 10, 10, 10, DateTimeKind.Utc),\n                DateTimeOffset = new DateTimeOffset(2011, 11, 11, 11, 11, 11, 11, TimeSpan.Zero),\n                Nullable = 12.13,\n                NullableDateTime = new DateTime(2010, 10, 10, 10, 10, 10, DateTimeKind.Utc),\n                TimeSpan = new TimeSpan(0, 12, 12, 15, 95),\n                Uri = new Uri(\"http://example.com\"),\n                Enum1 = Enum1.Enum1Value2,\n                Enum2 = Enum2.Enum2Value2,\n                Enum3 = Enum3.Enum3Value2,\n                Enum4 = Enum4.Enum4Value2,\n                Enum5 = Enum5.Enum5Value2,\n                Enum6 = Enum6.Enum6Value2\n            };\n\n            await table.InsertAsync(inserted);\n\n            IList<AllBaseTypesWithAllSystemPropertiesType> records = await table.ToListAsync();\n            Assert.AreEqual(records.Count, 1);\n\n            Assert.AreEqual(records.First(), inserted);\n\n            // now push\n            hijack.AddResponseContent(@\"\n{\"\"id\"\":\"\"abc\"\",\n\"\"bool\"\":true,\n\"\"byte\"\":11,\n\"\"sByte\"\":-11,\n\"\"uShort\"\":22,\n\"\"short\"\":-22,\n\"\"uInt\"\":33,\n\"\"int\"\":-33,\n\"\"uLong\"\":44,\n\"\"long\"\":-44,\n\"\"float\"\":55.66,\n\"\"double\"\":66.77,\n\"\"decimal\"\":77.88,\n\"\"string\"\":\"\"EightyEight\"\",\n\"\"char\"\":\"\"9\"\",\n\"\"dateTime\"\":\"\"2010-10-10T10:10:10.000Z\"\",\n\"\"dateTimeOffset\"\":\"\"2011-11-11T11:11:11.011Z\"\",\n\"\"nullableDateTime\"\":\"\"2010-10-10T10:10:10.000Z\"\",\n\"\"timeSpan\"\":\"\"12:12:15.095\"\",\n\"\"nullable\"\":12.13,\n\"\"uri\"\":\"\"http://example.com/\"\",\n\"\"enum1\"\":\"\"Enum1Value2\"\",\n\"\"enum2\"\":\"\"Enum2Value2\"\",\n\"\"enum3\"\":\"\"Enum3Value2\"\",\n\"\"enum4\"\":\"\"Enum4Value2\"\",\n\"\"enum5\"\":\"\"Enum5Value2\"\",\n\"\"enum6\"\":\"\"Enum6Value2\"\",\n\"\"__version\"\":\"\"XYZ\"\"}\");\n            await service.SyncContext.PushAsync();\n            AllBaseTypesWithAllSystemPropertiesType lookedUp = await table.LookupAsync(\"abc\");\n            inserted.Version = \"XYZ\";\n            Assert.AreEqual(inserted, lookedUp);\n        }\n\n        [AsyncTestMethod]\n        public async Task Insert_ThenPush_ThenPull_ThenRead_ThenUpdate_ThenRefresh_ThenDelete_ThenLookup_ThenPush_ThenPurge_ThenRead()\n        {\n            ResetDatabase(TestTable);\n\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"b\\\",\\\"String\\\":\\\"Hey\\\"}\"); // insert response\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"b\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"a\\\",\\\"String\\\":\\\"World\\\"}]\"); // pull response            \n            hijack.AddResponseContent(\"[]\"); // pull last page\n\n            IMobileServiceClient service = await CreateTodoClient(hijack);\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            // first insert an item\n            await table.InsertAsync(new ToDoWithStringId() { Id = \"b\", String = \"Hey\" });\n\n            // then push it to server\n            await service.SyncContext.PushAsync();\n\n            // then pull changes from server\n            await table.PullAsync(null, null);\n\n            // order the records by id so we can assert them predictably \n            IList<ToDoWithStringId> items = await table.OrderBy(i => i.Id).ToListAsync();\n\n            // we should have 2 records \n            Assert.AreEqual(items.Count, 2);\n\n            // according to ordering a id comes first\n            Assert.AreEqual(items[0].Id, \"a\");\n            Assert.AreEqual(items[0].String, \"World\");\n\n            // then comes b record\n            Assert.AreEqual(items[1].Id, \"b\");\n            Assert.AreEqual(items[1].String, \"Hey\");\n\n            // we made 2 requests, one for push and two for pull\n            Assert.AreEqual(hijack.Requests.Count, 3);\n\n            // recreating the client from state in the store\n            service = await CreateTodoClient(hijack);\n            table = service.GetSyncTable<ToDoWithStringId>();\n\n            // update the second record\n            items[1].String = \"Hello\";\n            await table.UpdateAsync(items[1]);\n\n            // create an empty record with same id as modified record\n            var second = new ToDoWithStringId() { Id = items[1].Id };\n            // refresh the empty record\n            await table.RefreshAsync(second);\n\n            // make sure it is same as modified record now\n            Assert.AreEqual(second.String, items[1].String);\n\n            // now delete the record\n            await table.DeleteAsync(second);\n\n            // now try to get the deleted record\n            ToDoWithStringId deleted = await table.LookupAsync(second.Id);\n\n            // this should be null\n            Assert.IsNull(deleted);\n\n            // try to get the non-deleted record\n            ToDoWithStringId first = await table.LookupAsync(items[0].Id);\n\n            // this should still be there;\n            Assert.IsNotNull(first);\n\n            // make sure it is same as \n            Assert.AreEqual(first.String, items[0].String);\n\n            // recreating the client from state in the store\n            service = await CreateTodoClient(hijack);\n            table = service.GetSyncTable<ToDoWithStringId>();\n\n            await service.SyncContext.PushAsync();\n            // now purge the remaining records\n            await table.PurgeAsync();\n\n            // now read one last time\n            IEnumerable<ToDoWithStringId> remaining = await table.ReadAsync();\n\n            // There shouldn't be anything remaining\n            Assert.AreEqual(remaining.Count(), 0);\n        }\n\n        private static async Task<IMobileServiceSyncTable<T>> GetSynctable<T>(TestHttpHandler hijack)\n        {\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable<T>();\n\n            IMobileServiceClient service = await CreateClient(hijack, store);\n            IMobileServiceSyncTable<T> table = service.GetSyncTable<T>();\n            return table;\n        }\n\n        private static async Task<IMobileServiceClient> CreateTodoClient(TestHttpHandler hijack)\n        {\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable<ToDoWithStringId>();\n            return await CreateClient(hijack, store);\n        }\n\n        private static async Task<IMobileServiceClient> CreateClient(TestHttpHandler hijack, MobileServiceSQLiteStore store)\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n            return service;\n        }\n\n        private static void ResetDatabase(string testTableName)\n        {\n            TestUtilities.DropTestTable(TestDbName, testTableName);\n            TestUtilities.ResetDatabase(TestDbName);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test/UnitTests/SQLiteStoreTests.Query.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.UnitTests\n{\n    [Tag(\"query\")]\n    public class SQLiteStoreQueryTests : TestBase\n    {\n\n        private static readonly Guid guid = Guid.Parse(\"d9c8bcf9-9c85-42e6-967b-c686d92f32cb\");\n        private static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);\n        private static readonly JObject[] testData = new[]\n        {\n            new JObject(){{\"id\", \"1\"}, {\"col1\", \"the\"}, {\"col2\", 5}, {\"col3\", 234f}, {\"col4\", epoch.AddMilliseconds(32434)}, {\"col5\", false }, {\"col6\", Guid.Empty}},\n            new JObject(){{\"id\", \"2\"}, {\"col1\", \"quick\"}, {\"col2\", 3}, {\"col3\", 9867.12}, {\"col4\", epoch.AddMilliseconds(99797)}, {\"col5\", true }, {\"col6\", Guid.Empty}},\n            new JObject(){{\"id\", \"3\"}, {\"col1\", \"brown\"}, {\"col2\", 1}, {\"col3\", 11f}, {\"col4\", epoch.AddMilliseconds(23987239840)}, {\"col5\", false}, {\"col6\", Guid.Empty}},\n            new JObject(){{\"id\", \"4\"}, {\"col1\", \"fox\"}, {\"col2\", 6}, {\"col3\", 23908.99}, {\"col4\", epoch.AddMilliseconds(8888888888888)}, {\"col5\", true}, {\"col6\", Guid.Empty}},\n            new JObject(){{\"id\", \"5\"}, {\"col1\", \"jumped\"}, {\"col2\", 9}, {\"col3\", 678.932}, {\"col4\", epoch.AddMilliseconds(333333333332)}, {\"col5\", true}, {\"col6\", guid}},\n            new JObject(){{\"id\", \"6\"}, {\"col1\", \"EndsWithBackslash\\\\\"}, {\"col2\", 8}, {\"col3\", 521f}, {\"col4\", epoch.AddMilliseconds(17071985)}, {\"col5\", true}, {\"col6\", guid}}\n        };\n        private const string TestTable = \"test\";\n        private const string MathTestTable = \"mathtest\";\n        private static bool queryTableInitialized;\n\n        public static string TestDbName = SQLiteStoreTests.TestDbName;\n\n        [AsyncTestMethod]\n        public async Task Query_OnBool_Implicit()\n        {\n            await TestQuery(\"$filter=col5\", 4);\n            await TestQuery(\"$filter=not(col5)\", 2);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_OnBool_Explicit()\n        {\n            await TestQuery(\"$filter=col5 eq true\", 4);\n            await TestQuery(\"$filter=col5 eq false\", 2);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_NotOperator_WithBoolComparison()\n        {\n            await TestQuery(\"$filter=not(col5 eq true)\", 2);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_Date_BeforeEpoch()\n        {\n            await TestQuery(\"$filter=col4 gt datetime'1969-12-31T11:00:00.000Z'\", 6);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_Date_Functions()\n        {\n            await TestQuery(\"$filter=year(col4) ge 1980\", 2);\n            await TestQuery(\"$filter=col4 gt datetime'1970-09-12T12:00:00Z'\", 3);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_Date_ReturnedAsDate()\n        {\n            JArray results = await Query<JArray>(\"$filter=id eq '1'\");\n            Assert.AreEqual(results.Count, 1);\n\n            JObject result = (JObject)results[0];\n            DateTime col4 = result.Value<DateTime>(\"col4\");\n\n            Assert.AreEqual(col4.Kind, DateTimeKind.Utc);\n            Assert.AreEqual(col4, testData[0][\"col4\"].Value<DateTime>());\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_WithTop()\n        {\n            await TestQuery(\"$top=5\", 5);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_OnString()\n        {\n            await TestQuery(\"$filter=col1 eq 'jumped'\", 1);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_OnGuid()\n        {\n            await TestQuery(string.Format(\"$filter=col6 eq guid'{0}'\", guid), 2);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_WithSelection()\n        {\n            JArray results = await Query<JArray>(\"$select=col1,col2\");\n            var expected = new JArray(testData.Select(x => new JObject() { { \"col1\", x[\"col1\"] }, { \"col2\", x[\"col2\"] } }));\n            AssertJArraysAreEqual(results, expected);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_WithOrdering_Ascending()\n        {\n            JArray results = await Query<JArray>(\"$orderby=col2\");\n            var expected = new JArray(testData.OrderBy(x => x[\"col2\"].Value<int>()));\n            AssertJArraysAreEqual(results, expected);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_WithOrdering_Descending()\n        {\n            JArray results = await Query<JArray>(\"$orderby=col2 desc\");\n            var expected = new JArray(testData.OrderByDescending(x => x[\"col2\"].Value<int>()));\n            AssertJArraysAreEqual(results, expected);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_Complex_Filter()\n        {\n            JArray results = await Query<JArray>(\"$filter=((col1 eq 'brown') or (col1 eq 'fox')) and (col2 le 5)\");\n            Assert.AreEqual(results.Count, 1);\n\n            Assert.AreEqual(results[0].ToString(), testData[2].ToString());\n        }\n\n        [AsyncTestMethod, Tag(\"notXamarin\")] // Android/iOS SQLite does not have INSTR function\n        public async Task Query_OnString_IndexOf()\n        {\n            await TestQuery(\"$filter=indexof(col1, 'ump') eq 1\", 1);\n            await TestQuery(\"$filter=indexof(col1, 'ump') eq 2\", 0);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_OnString_SubstringOf()\n        {\n            await TestQuery(\"$filter=substringof('ump', col1)\", 1);\n            await TestQuery(\"$filter=substringof('umx', col1)\", 0);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_OnString_StartsWith()\n        {\n            await TestQuery(\"$filter=startswith(col1, 'jum')\", 1);\n            await TestQuery(\"$filter=startswith(col1, 'pum')\", 0);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_OnString_EndsWith()\n        {\n            await TestQuery(\"$filter=endswith(col1, 'umped')\", 1);\n            await TestQuery(\"$filter=endswith(col1, 'umxed')\", 0);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_OnString_ConcatAndCompare()\n        {\n            await TestQuery(\"$filter=concat(concat(col1, 'ies'), col2) eq 'brownies1'\", 1);\n            await TestQuery(\"$filter=concat(concat(col1, 'ies'), col2) eq 'brownies2'\", 0);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_OnString_ReplaceAndCompare()\n        {\n            await TestQuery(\"$filter=replace(col1, 'j', 'p') eq 'pumped'\", 1);\n            await TestQuery(\"$filter=replace(col1, 'j', 'x') eq 'pumped'\", 0);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_OnString_SubstringAndCompare()\n        {\n            await TestQuery(\"$filter=substring(col1, 1) eq 'ox'\", 1);\n            await TestQuery(\"$filter=substring(col1, 1) eq 'oy'\", 0);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_OnString_SubstringWithLengthAndCompare()\n        {\n            await TestQuery(\"$filter=substring(col1, 1, 3) eq 'uic'\", 1);\n            await TestQuery(\"$filter=substring(col1, 1, 3) eq 'uix'\", 0);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_Math_ModuloOperator()\n        {\n            JArray results = await Query<JArray>(\"$filter=(col3 mod 6) eq 0\");\n            var expected = new JArray(testData.Where(x => (int)(x[\"col3\"].Value<float>() % 6) == 0));\n            AssertJArraysAreEqual(results, expected);\n\n            results = await Query<JArray>(\"$filter=(col2 mod 3) eq 0\");\n            expected = new JArray(testData.Where(x => x[\"col2\"].Value<int>() % 3 == 0));\n            AssertJArraysAreEqual(results, expected);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_Math_Round()\n        {\n            JObject[] mathTestData = new[]{\n                new JObject(){{\"val\", -0.0900}, {\"expected\", 0}},\n                new JObject(){{\"val\", -1.0900}, {\"expected\", -1}},\n                new JObject(){{\"val\", 1.0900}, {\"expected\", 1}},\n                new JObject(){{\"val\", 0.0900}, {\"expected\", 0}},\n                new JObject(){{\"val\", 1.5}, {\"expected\", 2}},\n                new JObject(){{\"val\", -1.5}, {\"expected\", -2}},\n            };\n            await TestMathQuery(mathTestData, \"$filter=round(val) eq expected\");\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_Math_Floor()\n        {\n            JObject[] mathTestData = new[]{\n                new JObject(){{\"val\", -0.0900}, {\"expected\", -1}},\n                new JObject(){{\"val\", -1.0900}, {\"expected\", -2}},\n                new JObject(){{\"val\", 1.0900}, {\"expected\", 1}},\n                new JObject(){{\"val\", 0.0900}, {\"expected\", 0}},\n            };\n            await TestMathQuery(mathTestData, \"$filter=floor(val) eq expected\");\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_Math_Ceiling()\n        {\n            JObject[] mathTestData = new[]{\n                new JObject(){{\"val\", -0.0900}, {\"expected\", 0}},\n                new JObject(){{\"val\", -1.0900}, {\"expected\", -1}},\n                new JObject(){{\"val\", 1.0900}, {\"expected\", 2}},\n                new JObject(){{\"val\", 0.0900}, {\"expected\", 1}},\n            };\n            await TestMathQuery(mathTestData, \"$filter=ceiling(val) eq expected\");\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_OnString_Length()\n        {\n            await TestQuery(\"$filter=length(col1) eq 18\", 1);\n            await TestQuery(\"$filter=length(col1) eq 19\", 0);\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_WithPaging()\n        {\n            for (int skip = 0; skip < 4; skip++)\n            {\n                for (int take = 0; take < 4; take++)\n                {\n                    var expected = new JArray(testData.Skip(skip).Take(take));\n                    JArray results = await Query<JArray>(\"$skip=\" + skip + \"&$top=\" + take);\n\n                    AssertJArraysAreEqual(results, expected);\n                }\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task Query_WithTotalCount()\n        {\n            JObject result = await Query<JObject>(\"$top=5&$inlinecount=allpages\");\n            Assert.AreEqual(result.Value<JArray>(\"results\").Count, 5);\n            Assert.AreEqual(result.Value<int>(\"count\"), 6);\n        }\n\n        private static async Task<MobileServiceSQLiteStore> SetupMathTestTable(JObject[] mathTestData)\n        {\n            TestUtilities.DropTestTable(TestDbName, MathTestTable);\n\n            // first create a table called todo\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable(MathTestTable, new JObject()\n            {\n                { \"id\", String.Empty },\n                { \"val\", 0f },\n                { \"expected\", 0f }\n            });\n\n            await store.InitializeAsync();\n\n            foreach (JObject item in mathTestData)\n            {\n                item[MobileServiceSystemColumns.Id] = Guid.NewGuid().ToString();\n            }\n\n            await store.UpsertAsync(MathTestTable, mathTestData, ignoreMissingColumns: false);\n\n            return store;\n        }\n\n        private static async Task<MobileServiceSQLiteStore> SetupTestTable()\n        {\n            if (!queryTableInitialized)\n            {\n                TestUtilities.DropTestTable(TestDbName, TestTable);\n            }\n\n            // first create a table called todo\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable(TestTable, new JObject()\n            {\n                { \"col1\", String.Empty },\n                { \"col2\", 0L },\n                { \"col3\", 0f },\n                { \"col4\", DateTime.UtcNow },\n                { \"col5\", false },\n                { \"col6\", Guid.Empty }\n            });\n\n            await store.InitializeAsync();\n\n            if (!queryTableInitialized)\n            {\n                await store.UpsertAsync(TestTable, testData, ignoreMissingColumns: false);\n            }\n\n            queryTableInitialized = true;\n            return store;\n        }\n\n        private static void AssertJArraysAreEqual(JArray results, JArray expected)\n        {\n            string actualResult = results.ToString(Formatting.None);\n            string expectedResult = expected.ToString(Formatting.None);\n            Assert.AreEqual(actualResult, expectedResult);\n        }\n\n        private static async Task TestMathQuery(JObject[] mathTestData, string query)\n        {\n            using (MobileServiceSQLiteStore store = await SetupMathTestTable(mathTestData))\n            {\n                var results = await Query<JArray>(store, MathTestTable, query);\n                Assert.AreEqual(results.Count, mathTestData.Length);\n            }\n        }\n\n        private static async Task TestQuery(string query, int expectedResults)\n        {\n            JArray results = await Query<JArray>(query);\n            Assert.AreEqual(results.Count, expectedResults);\n        }\n\n        private static async Task<T> Query<T>(string query) where T : JToken\n        {\n            using (MobileServiceSQLiteStore store = await SetupTestTable())\n            {\n                return (T)await store.ReadAsync(MobileServiceTableQueryDescription.Parse(TestTable, query));\n            }\n        }\n\n        private static async Task<T> Query<T>(MobileServiceSQLiteStore store, string tableName, string query) where T : JToken\n        {\n            return (T)await store.ReadAsync(MobileServiceTableQueryDescription.Parse(tableName, query));\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test/UnitTests/SQLiteStoreTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Microsoft.WindowsAzure.MobileServices.Test;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.UnitTests\n{\n    public class SQLiteStoreTests : TestBase\n    {\n        private static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);\n        private const string TestTable = \"todo\";\n        private static readonly DateTime testDate = DateTime.Parse(\"2014-02-11 14:52:19\").ToUniversalTime();\n\n        public static string TestDbName = \"test.db\";\n\n        [AsyncTestMethod]\n        public async Task InitializeAsync_InitializesTheStore()\n        {\n            TestUtilities.DropTestTable(TestDbName, TestTable);\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            store.DefineTable(TestTable, new JObject()\n            {\n                {\"id\", String.Empty },\n                {\"__createdAt\", DateTime.UtcNow}\n            });\n            await store.InitializeAsync();\n        }\n\n        [AsyncTestMethod]\n        public async Task InitializeAsync_Throws_WhenStoreIsAlreadyInitialized()\n        {\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            await store.InitializeAsync();\n\n            var ex = await ThrowsAsync<InvalidOperationException>(() => store.InitializeAsync());\n\n            Assert.AreEqual(ex.Message, \"The store is already initialized.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task DefineTable_Throws_WhenStoreIsInitialized()\n        {\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            await store.InitializeAsync();\n            var ex = Throws<InvalidOperationException>(() => store.DefineTable(TestTable, new JObject()));\n            Assert.AreEqual(ex.Message, \"Cannot define a table after the store has been initialized.\");\n        }\n\n        [TestMethod]\n        public void LookupAsync_Throws_WhenStoreIsNotInitialized()\n        {\n            TestStoreThrowOnUninitialized(store => store.LookupAsync(\"asdf\", \"asdf\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsync_ReadsItem()\n        {\n            await PrepareTodoTable();\n\n            long date = (long)(testDate - epoch).TotalSeconds;\n\n            // insert a row and make sure it is inserted\n            TestUtilities.ExecuteNonQuery(TestDbName, \"INSERT INTO todo (id, __createdAt) VALUES ('abc', \" + date + \")\");\n            long count = TestUtilities.CountRows(TestDbName, TestTable);\n            Assert.AreEqual(count, 1L);\n\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                DefineTestTable(store);\n                await store.InitializeAsync();\n\n                JObject item = await store.LookupAsync(TestTable, \"abc\");\n                Assert.IsNotNull(item);\n                Assert.AreEqual(item.Value<string>(\"id\"), \"abc\");\n                Assert.AreEqual(item.Value<DateTime>(\"__createdAt\"), testDate);\n            }\n        }\n\n        [TestMethod]\n        public void ReadAsync_Throws_WhenStoreIsNotInitialized()\n        {\n            TestStoreThrowOnUninitialized(store => store.ReadAsync(MobileServiceTableQueryDescription.Parse(\"abc\", \"\")));\n        }\n\n        [AsyncTestMethod]\n        public async Task UpsertAsync_ThenReadAsync_AllTypes()\n        {\n            TestUtilities.DropTestTable(TestDbName, TestTable);\n\n            // first create a table called todo\n            using (MobileServiceSQLiteStore store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                store.DefineTable(TestTable, JObjectTypes.GetObjectWithAllTypes());\n\n                await store.InitializeAsync();\n\n                var upserted = new JObject()\n                {\n                    { \"id\", \"xyz\" },\n                    { \"Object\", new JObject() { {\"id\", \"abc\"} }},\n                    { \"Array\", new JArray() { new JObject(){{\"id\", 3}} } },\n                    { \"Integer\", 123L },\n                    { \"Float\", 12.5m },\n                    { \"String\", \"def\" },\n                    { \"Boolean\", true },\n                    { \"Date\", new DateTime(2003, 5, 6, 4, 5, 1, DateTimeKind.Utc) },\n                    { \"Bytes\", new byte[] { 1, 2, 3} },\n                    { \"Guid\", new Guid(\"AB3EB1AB-53CD-4780-928B-A7E1CB7A927C\") },\n                    { \"TimeSpan\", new TimeSpan(1234) }\n                };\n                await store.UpsertAsync(TestTable, new[] { upserted }, false);\n\n                var query = new MobileServiceTableQueryDescription(TestTable);\n                var items = await store.ReadAsync(query) as JArray;\n                Assert.IsNotNull(items);\n                Assert.AreEqual(items.Count, 1);\n\n                var lookedup = items.First as JObject;\n                Assert.AreEqual(upserted.ToString(Formatting.None), lookedup.ToString(Formatting.None));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_ReadsItems()\n        {\n            await PrepareTodoTable();\n\n            // insert rows and make sure they are inserted\n            TestUtilities.ExecuteNonQuery(TestDbName, \"INSERT INTO todo (id, __createdAt) VALUES ('abc', 1), ('def', 2), ('ghi', 3)\");\n            long count = TestUtilities.CountRows(TestDbName, TestTable);\n            Assert.AreEqual(count, 3L);\n\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                DefineTestTable(store);\n                await store.InitializeAsync();\n\n                var query = MobileServiceTableQueryDescription.Parse(TestTable, \"$filter=__createdAt gt 1&$inlinecount=allpages\");\n                JToken item = await store.ReadAsync(query);\n                Assert.IsNotNull(item);\n                var results = item[\"results\"].Value<JArray>();\n                long resultCount = item[\"count\"].Value<long>();\n\n                Assert.AreEqual(results.Count, 2);\n                Assert.AreEqual(resultCount, 2L);\n            }\n        }\n\n        [TestMethod]\n        public void DeleteAsyncByQuery_Throws_WhenStoreIsNotInitialized()\n        {\n            TestStoreThrowOnUninitialized(store => store.DeleteAsync(MobileServiceTableQueryDescription.Parse(\"abc\", \"\")));\n        }\n\n        [TestMethod]\n        public void DeleteAsyncById_Throws_WhenStoreIsNotInitialized()\n        {\n            TestStoreThrowOnUninitialized(store => store.DeleteAsync(\"abc\", new[] { \"\" }));\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsync_DeletesTheRow_WhenTheyMatchTheQuery()\n        {\n            await PrepareTodoTable();\n\n            // insert rows and make sure they are inserted\n            TestUtilities.ExecuteNonQuery(TestDbName, \"INSERT INTO todo (id, __createdAt) VALUES ('abc', 1), ('def', 2), ('ghi', 3)\");\n            long count = TestUtilities.CountRows(TestDbName, TestTable);\n            Assert.AreEqual(count, 3L);\n\n            // delete the row\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                DefineTestTable(store);\n                await store.InitializeAsync();\n                var query = MobileServiceTableQueryDescription.Parse(TestTable, \"$filter=__createdAt gt 1\");\n                await store.DeleteAsync(query);\n            }\n\n            // 1 row should be left\n            count = TestUtilities.CountRows(TestDbName, TestTable);\n            Assert.AreEqual(count, 1L);\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsync_DeletesTheRow()\n        {\n            await PrepareTodoTable();\n\n            // insert a row and make sure it is inserted\n            TestUtilities.ExecuteNonQuery(TestDbName, \"INSERT INTO todo (id, __createdAt) VALUES ('abc', 123)\");\n            long count = TestUtilities.CountRows(TestDbName, TestTable);\n            Assert.AreEqual(count, 1L);\n\n            // delete the row\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                DefineTestTable(store);\n                await store.InitializeAsync();\n                await store.DeleteAsync(TestTable, new[] { \"abc\" });\n            }\n\n            // rows should be zero now\n            count = TestUtilities.CountRows(TestDbName, TestTable);\n            Assert.AreEqual(count, 0L);\n        }\n\n        [TestMethod]\n        public void UpsertAsync_Throws_WhenStoreIsNotInitialized()\n        {\n            TestStoreThrowOnUninitialized(store => store.UpsertAsync(\"asdf\", new[] { new JObject() }, ignoreMissingColumns: false));\n        }\n\n        [AsyncTestMethod]\n        public async Task UpsertAsync_Throws_WhenColumnInItemIsNotDefinedAndItIsLocal()\n        {\n            TestUtilities.DropTestTable(TestDbName, TestTable);\n\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                store.DefineTable(TestTable, new JObject()\n                {\n                    { \"id\", String.Empty },\n                    { \"dob\", DateTime.UtcNow }\n                });\n\n                await store.InitializeAsync();\n\n                var ex = await ThrowsAsync<InvalidOperationException>(() => store.UpsertAsync(TestTable, new[] { new JObject() { { \"notDefined\", \"okok\" } } }, ignoreMissingColumns: false));\n\n                Assert.AreEqual(ex.Message, \"Column with name 'notDefined' is not defined on the local table 'todo'.\");\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpsertAsync_DoesNotThrow_WhenColumnInItemIsNotDefinedAndItIsFromServer()\n        {\n            TestUtilities.DropTestTable(TestDbName, TestTable);\n\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                store.DefineTable(TestTable, new JObject()\n                {\n                    { \"id\", String.Empty },\n                    { \"dob\", DateTime.UtcNow }\n                });\n\n                await store.InitializeAsync();\n\n                await store.UpsertAsync(TestTable, new[] { new JObject() \n                { \n                    { \"id\", \"abc\" },\n                    { \"notDefined\", \"okok\" }, \n                    { \"dob\", DateTime.UtcNow } \n                } }, ignoreMissingColumns: true);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpsertAsync_DoesNotThrow_WhenItemIsEmpty()\n        {\n            TestUtilities.DropTestTable(TestDbName, TestTable);\n\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                store.DefineTable(TestTable, new JObject()\n                {\n                    { \"id\", String.Empty },\n                    { \"dob\", DateTime.UtcNow }\n                });\n\n                await store.InitializeAsync();\n\n                await store.UpsertAsync(TestTable, new[] { new JObject() }, ignoreMissingColumns: true);\n                await store.UpsertAsync(TestTable, new[] { new JObject() }, ignoreMissingColumns: false);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpsertAsync_InsertsTheRow_WhenItemHasNullValues()\n        {\n            TestUtilities.DropTestTable(TestDbName, TestTable);\n\n            // insert a row and make sure it is inserted\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                store.DefineTable(TestTable, new JObject()\n                {\n                    { \"id\", String.Empty },\n                    { \"dob\", DateTime.UtcNow },\n                    { \"age\", 0},\n                    { \"weight\", 3.5 },\n                    { \"code\", Guid.NewGuid() },   \n                    { \"options\", new JObject(){} },  \n                    { \"friends\", new JArray(){} },  \n                    { \"__version\", String.Empty }\n                });\n\n                await store.InitializeAsync();\n\n                var inserted = new JObject() \n                { \n                    { \"id\", \"abc\" }, \n                    { \"dob\", null },\n                    { \"age\", null },\n                    { \"weight\", null },\n                    { \"code\", null }, \n                    { \"options\", null },  \n                    { \"friends\", null },  \n                    { \"__version\", null }\n                };\n                await store.UpsertAsync(TestTable, new[] { inserted }, ignoreMissingColumns: false);\n\n                JObject read = await store.LookupAsync(TestTable, \"abc\");\n\n                Assert.AreEqual(inserted.ToString(), read.ToString());\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpsertAsync_InsertsTheRow_WhenItDoesNotExist()\n        {\n            await PrepareTodoTable();\n\n            // insert a row and make sure it is inserted\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                DefineTestTable(store);\n                await store.InitializeAsync();\n                await store.UpsertAsync(TestTable, new[]{new JObject() \n                { \n                    { \"id\", \"abc\" }, \n                    { \"__createdAt\", DateTime.Now } \n                }}, ignoreMissingColumns: false);\n            }\n            long count = TestUtilities.CountRows(TestDbName, TestTable);\n            Assert.AreEqual(count, 1L);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpsertAsync_UpdatesTheRow_WhenItExists()\n        {\n            await PrepareTodoTable();\n\n            // insert a row and make sure it is inserted\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                DefineTestTable(store);\n                await store.InitializeAsync();\n\n                await store.UpsertAsync(TestTable, new[]{new JObject() \n                { \n                    { \"id\", \"abc\" }, \n                    { \"text\", \"xyz\" },\n                    { \"__createdAt\", DateTime.Now } \n                }}, ignoreMissingColumns: false);\n\n                await store.UpsertAsync(TestTable, new[]{new JObject() \n                { \n                    { \"id\", \"abc\" }, \n                    { \"__createdAt\", new DateTime(200,1,1) } \n                }}, ignoreMissingColumns: false);\n\n                JObject result = await store.LookupAsync(TestTable, \"abc\");\n\n                Assert.AreEqual(result.Value<string>(\"id\"), \"abc\");\n                Assert.AreEqual(result.Value<string>(\"text\"), \"xyz\");\n                Assert.AreEqual(result.Value<string>(\"__createdAt\"), \"01/01/0200 00:00:00\");\n            }\n            long count = TestUtilities.CountRows(TestDbName, TestTable);\n            Assert.AreEqual(count, 1L);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpsertAsync_Throws_WhenInsertingRecordsWhichAreTooLarge()\n        {\n            TestUtilities.DropTestTable(TestDbName, TestTable);\n\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                var template = new JObject\n                {\n                    { \"id\", 0 },\n                };\n\n                //SQLite limits us to 999 \"parameters\" per prepared statement\n                for (var i = 0; i < 1000; i++)\n                {\n                    template[\"column\" + i] = \"Hello, world\";\n                }\n\n                store.DefineTable(TestTable, template);\n\n                //create the table\n                await store.InitializeAsync();\n\n                //attempt to insert a couple of items\n                var item1 = new JObject(template);\n                item1[\"id\"] = 1;\n\n                var item2 = new JObject(template);\n                item1[\"id\"] = 2;\n\n                InvalidOperationException ex = await AssertEx.Throws<InvalidOperationException>(() => store.UpsertAsync(TestTable, new[] { item1, item2 }, ignoreMissingColumns: false));\n\n                Assert.AreEqual(\"The number of fields per entity in an upsert operation is limited to 800.\", ex.Message);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpsertAsync_CanProcessManyRecordsAtOnce()\n        {\n            TestUtilities.DropTestTable(TestDbName, TestTable);\n\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                var template = new JObject \n                {\n                    { \"id\", 0 },\n                    { \"value1\", \"Hello, world\" },\n                    { \"value2\", \"Hello, world\" },\n                    { \"value3\", \"Hello, world\" },\n                    { \"value4\", \"Hello, world\" },\n                    { \"value5\", \"Hello, world\" }\n                };\n\n                store.DefineTable(TestTable, template);\n\n                //create the table\n                await store.InitializeAsync();\n\n                //add a whole bunch of items. We want {number of items} * {number of fields} to exceed sqlite's parameter limit\n                const int insertedItemCount = 500;\n\n                var itemsToInsert = Enumerable.Range(1, insertedItemCount)\n                                              .Select(id =>\n                                              {\n                                                  var o = new JObject(template);\n                                                  o[\"id\"] = id;\n                                                  return o;\n                                              })\n                                              .ToArray();\n\n                //Insert the items\n                await store.UpsertAsync(TestTable, itemsToInsert, ignoreMissingColumns: false);\n\n                JArray records = (JArray)await store.ReadAsync(MobileServiceTableQueryDescription.Parse(TestTable, \"$orderby=id\"));\n\n                //Verify that all 500 records were inserted\n                Assert.AreEqual(records.Count, insertedItemCount);\n\n                //Verify that all fields are intact\n                for (var i = 0; i < insertedItemCount; i++)\n                {\n                    Assert.IsTrue(JToken.DeepEquals(itemsToInsert[i], records[i]), \"Results retrieved from DB do not match input\");\n                }\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task Upsert_ThenLookup_ThenUpsert_ThenDelete_ThenLookup()\n        {\n            TestUtilities.DropTestTable(TestDbName, TestTable);\n\n            using (var store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                // define item with all type of supported fields\n                var originalItem = new JObject()\n                {\n                    { \"id\", \"abc\" },\n                    { \"bool\", true },\n                    { \"int\", 45 },\n                    { \"double\", 123.45d },\n                    { \"guid\", Guid.NewGuid() },\n                    { \"date\", testDate },\n                    { \"options\", new JObject(){ {\"class\", \"A\"} } },  \n                    { \"friends\", new JArray(){ \"Eric\", \"Jeff\" } }\n                };\n                store.DefineTable(TestTable, originalItem);\n\n                // create the table\n                await store.InitializeAsync();\n\n                // first add an item\n                await store.UpsertAsync(TestTable, new[] { originalItem }, ignoreMissingColumns: false);\n\n                // read the item back\n                JObject itemRead = await store.LookupAsync(TestTable, \"abc\");\n\n                // make sure everything was persisted the same\n                Assert.AreEqual(originalItem.ToString(), itemRead.ToString());\n\n                // change the item\n                originalItem[\"double\"] = 111.222d;\n\n                // upsert the item\n                await store.UpsertAsync(TestTable, new[] { originalItem }, ignoreMissingColumns: false);\n\n                // read the updated item\n                JObject updatedItem = await store.LookupAsync(TestTable, \"abc\");\n\n                // make sure the float was updated\n                Assert.AreEqual(updatedItem.Value<double>(\"double\"), 111.222d);\n\n                // make sure the item is same as updated item\n                Assert.AreEqual(originalItem.ToString(), updatedItem.ToString());\n\n                // make sure item is not same as its initial state\n                Assert.AreNotEqual(originalItem.ToString(), itemRead.ToString());\n\n                // now delete the item\n                await store.DeleteAsync(TestTable, new[] { \"abc\" });\n\n                // now read it back\n                JObject item4 = await store.LookupAsync(TestTable, \"abc\");\n\n                // it should be null because it doesn't exist\n                Assert.IsNull(item4);\n            }\n        }\n\n        private void TestStoreThrowOnUninitialized(Action<MobileServiceSQLiteStore> storeAction)\n        {\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            var ex = Throws<InvalidOperationException>(() => storeAction(store));\n            Assert.AreEqual(ex.Message, \"The store must be initialized before it can be used.\");\n        }\n\n        private static async Task PrepareTodoTable()\n        {\n            TestUtilities.DropTestTable(TestDbName, TestTable);\n\n            // first create a table called todo\n            using (MobileServiceSQLiteStore store = new MobileServiceSQLiteStore(TestDbName))\n            {\n                DefineTestTable(store);\n\n                await store.InitializeAsync();\n            }\n        }\n\n        public static void DefineTestTable(MobileServiceSQLiteStore store)\n        {\n            store.DefineTable(TestTable, new JObject()\n            {\n                { \"id\", String.Empty },\n                { \"text\", String.Empty },\n                { \"__createdAt\", DateTime.Now }\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test/UnitTests/SyncSettingsManagerTests.Integration.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.UnitTests\n{\n    public class SyncSettingsManagerTests : TestBase\n    {\n        public static string TestDbName = SQLiteStoreTests.TestDbName;\n        private const string TestTable = \"todoItem\";\n        private const string TestQueryId = \"abc\";\n\n\n        [AsyncTestMethod]\n        public async Task ResetDeltaTokenAsync_ResetsTheToken()\n        {\n            MobileServiceSyncSettingsManager settings = await GetSettingManager();\n\n            DateTimeOffset saved = new DateTime(2014, 7, 24, 3, 4, 5, DateTimeKind.Local);\n            await settings.SetDeltaTokenAsync(TestTable, TestQueryId, saved);\n\n            DateTimeOffset read = await settings.GetDeltaTokenAsync(TestTable, TestQueryId);\n            Assert.AreEqual(read, saved.ToUniversalTime());\n\n            await settings.ResetDeltaTokenAsync(TestTable, TestQueryId);\n            read = await settings.GetDeltaTokenAsync(TestTable, TestQueryId);\n            Assert.AreEqual(read, new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).ToUniversalTime());\n        }\n\n        [AsyncTestMethod]\n        public async Task GetDeltaTokenAsync_ReturnsMinValue_WhenTokenDoesNotExist()\n        {\n            MobileServiceSyncSettingsManager settings = await GetSettingManager();\n\n            DateTimeOffset token = await settings.GetDeltaTokenAsync(TestTable, TestQueryId);\n\n            Assert.AreEqual(token, new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).ToUniversalTime());\n        }\n\n        [AsyncTestMethod]\n        public async Task SetDeltaTokenAsync_SavesTheSetting_AsUTCDate()\n        {\n            MobileServiceSyncSettingsManager settings = await GetSettingManager();\n\n            DateTimeOffset saved = new DateTime(2014, 7, 24, 3, 4, 5, DateTimeKind.Local);\n            await settings.SetDeltaTokenAsync(TestTable, TestQueryId, saved);\n\n            // with cache\n            DateTimeOffset read = await settings.GetDeltaTokenAsync(TestTable, TestQueryId);\n            Assert.AreEqual(read, saved.ToUniversalTime());\n\n            // without cache\n            settings = await GetSettingManager(resetDb: false);\n            read = await settings.GetDeltaTokenAsync(TestTable, TestQueryId);\n            Assert.AreEqual(read, saved.ToUniversalTime());\n        }\n\n        [AsyncTestMethod]\n        public async Task SetDeltaTokenAsync_SavesTheSetting()\n        {\n            MobileServiceSyncSettingsManager settings = await GetSettingManager();\n\n            var saved = new DateTimeOffset(2014, 7, 24, 3, 4, 5, TimeSpan.Zero);\n            await settings.SetDeltaTokenAsync(TestTable, TestQueryId, saved);\n\n            // with cache\n            DateTimeOffset read = await settings.GetDeltaTokenAsync(TestTable, TestQueryId);\n            Assert.AreEqual(read, saved);\n\n            // without cache\n            settings = await GetSettingManager(resetDb: false);\n            read = await settings.GetDeltaTokenAsync(TestTable, TestQueryId);\n            Assert.AreEqual(read, saved);\n        }\n\n        [AsyncTestMethod]\n        public async Task SetDeltaTokenAsync_UpdatesCacheAndDatabase()\n        {\n            MobileServiceSyncSettingsManager settings = await GetSettingManager();\n\n            // first save\n            var saved = new DateTimeOffset(2014, 7, 24, 3, 4, 5, TimeSpan.Zero);\n            await settings.SetDeltaTokenAsync(TestTable, TestQueryId, saved);\n\n            // then read and update\n            DateTimeOffset read = await settings.GetDeltaTokenAsync(TestTable, TestQueryId);\n            await settings.SetDeltaTokenAsync(TestTable, TestQueryId, read.AddDays(1));\n\n            // then read again\n            read = await settings.GetDeltaTokenAsync(TestTable, TestQueryId);\n            Assert.AreEqual(read, saved.AddDays(1));\n\n            // then read again in fresh instance\n            settings = await GetSettingManager(resetDb: false);\n            read = await settings.GetDeltaTokenAsync(TestTable, TestQueryId);\n            Assert.AreEqual(read, saved.AddDays(1));\n        }\n\n        private static async Task<MobileServiceSyncSettingsManager> GetSettingManager(bool resetDb = true)\n        {\n            if (resetDb)\n            {\n                TestUtilities.ResetDatabase(TestDbName);\n            }\n\n            var store = new MobileServiceSQLiteStore(TestDbName);\n            await store.InitializeAsync();\n\n            var settings = new MobileServiceSyncSettingsManager(store);\n            return settings;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"portable-net45+win+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"portable-net45+win+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"portable-net45+win+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"portable-net45+win+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"SQLitePCL\" version=\"3.8.7.2\" targetFramework=\"portable-net45+win+wp80+MonoAndroid10+xamarinios10+MonoTouch10\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Unit/Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.Unit.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{574B5567-FF51-4B0F-A9ED-CC9F711E9156}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Unit</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.Unit</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Moq, Version=4.2.1408.717, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Moq.4.2.1408.0717\\lib\\net40\\Moq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n      </ItemGroup>\n    </When>\n    <Otherwise>\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework\" />\n      </ItemGroup>\n    </Otherwise>\n  </Choose>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SqlQueryFormatterTests.cs\" />\n    <Compile Include=\"MobileServiceSQLiteStoreExtensionTests.cs\" />\n    <Compile Include=\"SqlHelperTests.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.SQLiteStore\\Microsoft.WindowsAzure.Mobile.SQLiteStore.csproj\">\n      <Project>{4c20d49a-fe5e-4d9c-98b9-8125450074f5}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.SQLiteStore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{d8bbc92a-b213-463b-911d-3a106f91d5f9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Unit/MobileServiceSQLiteStoreExtensionTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Test;\nusing Moq;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Unit\n{\n    [TestClass]\n    public class MobileServiceSQLiteStoreExtensionTests\n    {\n        [TestMethod]\n        public async Task DefineTable_Succeeds_WithAllTypes_Generic()\n        {\n            var columns = new[]\n            {\n                new ColumnDefinition(\"id\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"__createdAt\", JTokenType.Date, SqlColumnType.DateTime),\n                new ColumnDefinition(\"__updatedAt\", JTokenType.Date, SqlColumnType.DateTime),\n                new ColumnDefinition(\"__version\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"Bool\", JTokenType.Boolean, SqlColumnType.Boolean),\n                new ColumnDefinition(\"Byte\", JTokenType.Integer, SqlColumnType.Integer),\n                new ColumnDefinition(\"SByte\", JTokenType.Integer, SqlColumnType.Integer),\n                new ColumnDefinition(\"UShort\", JTokenType.Integer, SqlColumnType.Integer),\n                new ColumnDefinition(\"Short\", JTokenType.Integer, SqlColumnType.Integer),\n                new ColumnDefinition(\"UInt\", JTokenType.Integer, SqlColumnType.Integer),\n                new ColumnDefinition(\"Int\", JTokenType.Integer, SqlColumnType.Integer),\n                new ColumnDefinition(\"ULong\", JTokenType.Integer, SqlColumnType.Integer),\n                new ColumnDefinition(\"Long\", JTokenType.Integer, SqlColumnType.Integer),\n                new ColumnDefinition(\"Float\", JTokenType.Float, SqlColumnType.Float),\n                new ColumnDefinition(\"Double\", JTokenType.Float, SqlColumnType.Float),\n                new ColumnDefinition(\"Decimal\", JTokenType.Float, SqlColumnType.Float),\n                new ColumnDefinition(\"String\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"Char\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"DateTime\", JTokenType.Date, SqlColumnType.DateTime),\n                new ColumnDefinition(\"DateTimeOffset\", JTokenType.Date, SqlColumnType.DateTime),\n                new ColumnDefinition(\"Nullable\", JTokenType.Float, SqlColumnType.Float),\n                new ColumnDefinition(\"NullableDateTime\", JTokenType.Date, SqlColumnType.DateTime),\n                new ColumnDefinition(\"TimeSpan\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"Uri\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"Enum1\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"Enum2\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"Enum3\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"Enum4\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"Enum5\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"Enum6\", JTokenType.String, SqlColumnType.Text)\n            };\n            await TestDefineTable<AllBaseTypesWithAllSystemPropertiesType>(\"AllBaseTypesWithAllSystemPropertiesType\", columns);\n        }\n\n        [TestMethod]\n        public async Task DefineTable_Succeeds_WithAllTypes()\n        {\n            var item = JObjectTypes.GetObjectWithAllTypes();\n\n            var columns = new[]\n            {\n                new ColumnDefinition(\"id\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"Object\", JTokenType.Object, SqlColumnType.Json),\n                new ColumnDefinition(\"Array\", JTokenType.Array, SqlColumnType.Json),\n                new ColumnDefinition(\"Integer\", JTokenType.Integer, SqlColumnType.Integer),\n                new ColumnDefinition(\"Float\", JTokenType.Float, SqlColumnType.Float),\n                new ColumnDefinition(\"String\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"Boolean\", JTokenType.Boolean, SqlColumnType.Boolean),\n                new ColumnDefinition(\"Date\", JTokenType.Date, SqlColumnType.DateTime),\n                new ColumnDefinition(\"Bytes\", JTokenType.Bytes, SqlColumnType.Blob),\n                new ColumnDefinition(\"Guid\", JTokenType.Guid, SqlColumnType.Guid),\n                new ColumnDefinition(\"TimeSpan\", JTokenType.TimeSpan, SqlColumnType.TimeSpan)\n            };\n\n            await TestDefineTable(item, \"AllTypes\", columns);\n        }\n\n        [TestMethod]\n        public async Task DefineTable_Succeeds_WithReadonlyProperty()\n        {\n            var columns = new[]\n            {\n                new ColumnDefinition(\"id\", JTokenType.Integer, SqlColumnType.Integer),\n                new ColumnDefinition(\"PublicField\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"PublicProperty\", JTokenType.String, SqlColumnType.Text)\n            };\n            await TestDefineTable<PocoType>(\"PocoType\", columns);\n        }\n\n        [TestMethod]\n        public async Task DefineTable_Succeeds_WithSystemProperties()\n        {\n            var columns = new[]\n            {\n                new ColumnDefinition(\"id\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"String\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"__createdAt\", JTokenType.Date, SqlColumnType.DateTime),\n                new ColumnDefinition(\"__updatedAt\", JTokenType.Date, SqlColumnType.DateTime),\n                new ColumnDefinition(\"__version\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"__deleted\", JTokenType.Boolean, SqlColumnType.Boolean)\n            };\n\n            await TestDefineTable<ToDoWithSystemPropertiesType>(\"stringId_test_table\", columns);\n        }\n\n        [TestMethod]\n        public void DefineTable_Throws_WithTypeWithConstructor()\n        {\n            var storeMock = new Mock<MobileServiceSQLiteStore>() { CallBase = true };\n            var ex = AssertEx.Throws<ArgumentException>(() => storeMock.Object.DefineTable<TypeWithConstructor>());\n            Assert.AreEqual(\"The generic type T does not have parameterless constructor.\", ex.Message);\n        }\n\n        [TestMethod]\n        public async Task DefineTable_Succeeds_WithComplexType()\n        {\n            var columns = new[]\n            {\n                new ColumnDefinition(\"id\", JTokenType.Integer, SqlColumnType.Integer),\n                new ColumnDefinition(\"Name\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"Child\", JTokenType.Object, SqlColumnType.Json)\n            };\n\n            await TestDefineTable<ComplexType>(\"ComplexType\", columns);\n        }\n\n        [TestMethod]\n        public async Task DefineTable_Succeeds_WithDerivedType()\n        {\n            var columns = new[]\n            {\n                new ColumnDefinition(\"id\", JTokenType.Integer, SqlColumnType.Integer),\n                new ColumnDefinition(\"DerivedPublicField\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"PublicField\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"DerivedPublicProperty\", JTokenType.String, SqlColumnType.Text),\n                new ColumnDefinition(\"PublicProperty\", JTokenType.String, SqlColumnType.Text),\n            };\n\n            await TestDefineTable<PocoDerivedPocoType>(\"PocoDerivedPocoType\", columns);\n        }\n\n        private static async Task TestDefineTable<T>(string testTableName, ColumnDefinition[] columns)\n        {\n            await TestDefineTable(testTableName, columns, store => store.DefineTable<T>());\n        }\n\n        private static async Task TestDefineTable(JObject item, string testTableName, ColumnDefinition[] columns)\n        {\n            await TestDefineTable(testTableName, columns, store => store.DefineTable(testTableName, item));\n        }\n\n        private static async Task TestDefineTable(string testTableName, ColumnDefinition[] columns, Action<MobileServiceSQLiteStore> defineAction)\n        {\n            bool defined = false;\n\n            var storeMock = new Mock<MobileServiceSQLiteStore>() { CallBase = true };\n\n            storeMock.Setup(store => store.CreateTableFromObject(It.IsAny<string>(), It.IsAny<IEnumerable<ColumnDefinition>>()))\n                     .Callback<string, IEnumerable<ColumnDefinition>>((tableName, properties) =>\n                     {\n                         if (tableName == testTableName)\n                         {\n                             defined = true;\n\n                             CollectionAssert.AreEquivalent(columns, properties.ToList());\n                         }\n                     });\n\n            storeMock.Setup(store => store.SaveSetting(It.IsAny<string>(), It.IsAny<string>())).Returns(Task.FromResult(0));\n\n            defineAction(storeMock.Object);\n            await storeMock.Object.InitializeAsync();\n\n            Assert.IsTrue(defined);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Unit/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.MobileServices.Test.Unit\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.MobileServices.Test.Unit\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"ecb285f1-1b28-4398-bce6-575c485b2fe1\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Unit/SqlHelperTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Test;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Unit\n{\n    [TestClass]\n    public class SqlHelperTests\n    {\n        [TestMethod]\n        public void GetStoreCastType_Throws_WhenTypeIsNotSupported()\n        {\n            var types = new[] { typeof(SqlHelperTests), typeof(DateTimeOffset) };\n\n            foreach (Type type in types)\n            {\n                var ex = AssertEx.Throws<NotSupportedException>(() => SqlHelpers.GetStoreCastType(type));\n                Assert.AreEqual(\"Value of type '\" + type.Name + \"' is not supported.\", ex.Message);\n            }\n        }\n\n        [TestMethod]\n        public void GetStoreCastType_ReturnsCorrectType()\n        {\n            var data = new Dictionary<Type, string>()\n            {\n                { typeof(bool), SqlColumnType.Numeric },\n                { typeof(DateTime), SqlColumnType.Numeric },\n                { typeof(decimal), SqlColumnType.Numeric },\n                { typeof(int), SqlColumnType.Integer },\n                { typeof(uint), SqlColumnType.Integer },\n                { typeof(long), SqlColumnType.Integer },\n                { typeof(ulong), SqlColumnType.Integer },\n                { typeof(short), SqlColumnType.Integer },\n                { typeof(ushort), SqlColumnType.Integer },\n                { typeof(byte), SqlColumnType.Integer },\n                { typeof(sbyte), SqlColumnType.Integer },\n                { typeof(float), SqlColumnType.Real },\n                { typeof(double), SqlColumnType.Real },\n                { typeof(string), SqlColumnType.Text },\n                { typeof(Guid), SqlColumnType.Text },\n                { typeof(byte[]), SqlColumnType.Text },\n                { typeof(Uri), SqlColumnType.Text },\n                { typeof(TimeSpan), SqlColumnType.Text }\n            };\n\n            foreach (var item in data)\n            {\n                Assert.AreEqual(SqlHelpers.GetStoreCastType(item.Key), item.Value);\n            }\n        }\n\n        [TestMethod]\n        public void GetStoreType_ReturnsCorrectType()\n        {\n            var data = new Dictionary<JTokenType, string>()\n            {\n                { JTokenType.Boolean, SqlColumnType.Boolean },\n                { JTokenType.Integer, SqlColumnType.Integer },\n                { JTokenType.Date, SqlColumnType.DateTime },\n                { JTokenType.Float, SqlColumnType.Float },\n                { JTokenType.String, SqlColumnType.Text },\n                { JTokenType.Guid, SqlColumnType.Guid },\n                { JTokenType.Array, SqlColumnType.Json },\n                { JTokenType.Object, SqlColumnType.Json },\n                { JTokenType.Bytes, SqlColumnType.Blob },\n                { JTokenType.Uri, SqlColumnType.Uri },\n                { JTokenType.TimeSpan, SqlColumnType.TimeSpan },\n            };\n\n            foreach (var item in data)\n            {\n                Assert.AreEqual(SqlHelpers.GetStoreType(item.Key, allowNull: false), item.Value);\n            }\n        }\n\n        [TestMethod]\n        public void GetStoreType_Throws_OnUnsupportedTypes()\n        {\n            var items = new[] { JTokenType.Comment, JTokenType.Constructor, JTokenType.None, JTokenType.Property, JTokenType.Raw, JTokenType.Undefined, JTokenType.Null };\n\n            foreach (var type in items)\n            {\n                var ex = AssertEx.Throws<NotSupportedException>(() => SqlHelpers.GetStoreType(type, allowNull: false));\n                Assert.AreEqual(ex.Message, String.Format(\"Property of type '{0}' is not supported.\", type));\n            }\n        }\n\n        [TestMethod]\n        public void SerializeValue_LosesPrecision_WhenValueIsDate()\n        {\n            var original = new DateTime(635338107839470268);\n            var serialized = (double)SqlHelpers.SerializeValue(new JValue(original), SqlColumnType.DateTime, JTokenType.Date);\n            Assert.AreEqual(1398213983.9470000, serialized);\n        }\n\n        [TestMethod]\n        public void ParseReal_LosesPrecision_WhenValueIsDate()\n        {\n            var date = (DateTime)SqlHelpers.DeserializeValue(1398213983.9470267, SqlColumnType.Real, JTokenType.Date);\n            Assert.AreEqual(635338107839470000, date.Ticks);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Unit/SqlQueryFormatterTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Microsoft.WindowsAzure.MobileServices.Test;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Unit\n{\n    [TestClass]\n    public class SqlQueryFormatterTests\n    {\n        private static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);\n\n        [TestMethod]\n        public void FormatSelect_Math_Floor()\n        {\n            string odata = \"$filter=floor(weight) gt 5&$orderby=price asc&$select=name\";\n\n            string expectedSql = \"SELECT [name] FROM [test] WHERE ((CASE WHEN ([weight] >= @p1) THEN CAST([weight] AS INTEGER) WHEN (CAST([weight] AS INTEGER) = [weight]) THEN [weight] ELSE CAST(([weight] - @p2) AS INTEGER) END) > @p3) ORDER BY [price]\";\n\n            TestSqlFormatting(f => f.FormatSelect, odata, expectedSql, 0L, 1L, 5L);\n        }\n\n        [TestMethod]\n        public void FormatSelect_InvalidQuery()\n        {\n            string odata = \"$filter=(2 ! ??)\";\n            var ex = AssertEx.Throws<MobileServiceODataException>(() => MobileServiceTableQueryDescription.Parse(\"test\", odata));\n            Assert.AreEqual(\"The specified odata query has syntax errors.\", ex.Message);\n            Assert.AreEqual(3, ex.ErrorPosition);\n        }\n\n        [TestMethod]\n        public void FormatSelect_Math_Ceiling()\n        {\n            string odata = \"$filter=ceiling(weight) gt 5&$orderby=price asc&$select=name\";\n\n            string expectedSql = \"SELECT [name] FROM [test] WHERE ((CASE WHEN ([weight] >= @p1) THEN CAST([weight] AS INTEGER) WHEN (CAST([weight] AS INTEGER) = [weight]) THEN [weight] ELSE CAST(([weight] - @p2) AS INTEGER) END) + (CASE WHEN [weight] = (CASE WHEN ([weight] >= @p3) THEN CAST([weight] AS INTEGER) WHEN (CAST([weight] AS INTEGER) = [weight]) THEN [weight] ELSE CAST(([weight] - @p4) AS INTEGER) END) THEN 0 ELSE 1 END) > @p5) ORDER BY [price]\";\n\n            TestSqlFormatting(f => f.FormatSelect, odata, expectedSql, 0L, 1L, 0L, 1L, 5L);\n        }\n\n        [TestMethod]\n        public void FormatSelect_Math_Round()\n        {\n            string odata = \"$filter=round(weight) gt 5.3&$orderby=price asc&$select=name\";\n\n            string expectedSql = \"SELECT [name] FROM [test] WHERE (ROUND([weight], 0) > @p1) ORDER BY [price]\";\n\n            TestSqlFormatting(f => f.FormatSelect, odata, expectedSql, (double)5.3);\n        }\n\n        [TestMethod]\n        public void FormatSelect_Date_Comparison()\n        {\n            string odata = \"$filter=close_dt gt datetime'2012-05-29T09:13:28'\";\n\n            string expectedSql = \"SELECT * FROM [test] WHERE ([close_dt] > @p1)\";\n\n            TestSqlFormatting(f => f.FormatSelect, odata, expectedSql, (DateTime.Parse(\"2012-05-29T09:13:28\") - epoch).TotalSeconds);\n        }\n\n        [TestMethod]\n        public void FormatSelect_DateTimeOffset_Comparison()\n        {\n            string odata = \"$filter=close_dt gt datetimeoffset'2012-05-29T09:13:28'\";\n\n            string expectedSql = \"SELECT * FROM [test] WHERE ([close_dt] > @p1)\";\n\n            TestSqlFormatting(f => f.FormatSelect, odata, expectedSql, (DateTime.Parse(\"2012-05-29T09:13:28\") - epoch).TotalSeconds);\n        }\n\n        [TestMethod]\n        public void FormatSelect_Date_Day()\n        {\n            TestSelectDateTimeFunction(\"day\", \"%d\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_Date_Month()\n        {\n            TestSelectDateTimeFunction(\"month\", \"%m\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_Date_Year()\n        {\n            TestSelectDateTimeFunction(\"year\", \"%Y\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_Date_Hour()\n        {\n            TestSelectDateTimeFunction(\"hour\", \"%H\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_Date_Minute()\n        {\n            TestSelectDateTimeFunction(\"minute\", \"%M\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_Date_Second()\n        {\n            TestSelectDateTimeFunction(\"second\", \"%S\");\n        }\n\n        private static void TestSelectDateTimeFunction(string fn, string format)\n        {\n            string odata = \"$filter=\" + fn + \"(close_dt) eq 5\";\n\n            string expectedSql = \"SELECT * FROM [test] WHERE (CAST(strftime('\" + format + \"', datetime([close_dt], 'unixepoch')) AS INTEGER) = @p1)\";\n\n            TestSqlFormatting(f => f.FormatSelect, odata, expectedSql, 5L);\n        }\n\n        [TestMethod]\n        public void FormatSelect_String_ToLower()\n        {\n            TestSelectStringFunction(\"tolower(name)\", \"LOWER([name])\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_String_ToUpper()\n        {\n            TestSelectStringFunction(\"toupper(name)\", \"UPPER([name])\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_String_Length()\n        {\n            TestSelectStringFunction(\"length(name)\", \"LENGTH([name])\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_String_Trim()\n        {\n            TestSelectStringFunction(\"trim(name)\", \"TRIM([name])\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_String_SubstringOf()\n        {\n            TestSelectStringFunction(\"substringof('khan', name)\", \"LIKE('%' || @p1 || '%', [name])\", \"khan\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_String_StartsWith()\n        {\n            TestSelectStringFunction(\"startswith(name, 'khan')\", \"LIKE(@p1 || '%', [name])\", \"khan\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_String_EndsWith()\n        {\n            TestSelectStringFunction(\"endswith(name, 'khan')\", \"LIKE('%' || @p1, [name])\", \"khan\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_String_Concat()\n        {\n            TestSelectStringFunction(\"concat(firstName, lastName)\", \"[firstName] || [lastName]\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_String_IndexOf()\n        {\n            TestSelectStringFunction(\"indexof(message, 'hello')\", \"INSTR([message], @p1) - 1\", \"hello\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_String_Replace()\n        {\n            TestSelectStringFunction(\"replace(message, '$author$', name)\", \"REPLACE([message], @p1, [name])\", \"$author$\");\n        }\n\n        [TestMethod]\n        public void FormatSelect_String_Substring()\n        {\n            TestSelectStringFunction(\"substring(title, 10)\", \"SUBSTR([title], @p1 + 1)\", 10L);\n        }\n\n        private static void TestSelectStringFunction(string fn, string sqlFn, object extraArg = null)\n        {\n            var args = new List<object>();\n            string arg = \"@p1\";\n            if (extraArg != null)\n            {\n                arg = \"@p2\";\n                args.Add(extraArg);\n            }\n            args.Add(\"abc\");\n\n            string odata = \"$filter=\" + fn + \" eq 'abc'\";\n            string expectedSql = \"SELECT * FROM [test] WHERE (\" + sqlFn + \" = \" + arg + \")\";\n\n            TestSqlFormatting(f => f.FormatSelect, odata, expectedSql, args.ToArray());\n        }\n\n        [TestMethod]\n        public void FormatSelect_GeneratesSQL_WithoutTotalCount()\n        {\n            string odata = \"$filter=(name eq 'john' and age gt 7)&$orderby=String desc,id&$skip=5&$top=3&$select=name,age\";\n\n            string expectedSql = \"SELECT [name], [age] FROM [test] WHERE (([name] = @p1) AND ([age] > @p2)) ORDER BY [String] DESC, [id] LIMIT 3 OFFSET 5\";\n\n            TestSqlFormatting(f => f.FormatSelect, odata, expectedSql, \"john\", 7L);\n        }\n\n        [TestMethod]\n        public void FormatSelect_GeneratesSQL_WithoutColumns()\n        {\n            string odata = \"$filter=name eq 'john' or age le 7&$orderby=String desc,id&$skip=5&$top=3\";\n\n            string expectedSql = \"SELECT * FROM [test] WHERE (([name] = @p1) OR ([age] <= @p2)) ORDER BY [String] DESC, [id] LIMIT 3 OFFSET 5\";\n\n            TestSqlFormatting(f => f.FormatSelect, odata, expectedSql, \"john\", 7L);\n        }\n\n        [TestMethod]\n        public void FormatSelect_GeneratesSQL_WithTotalCount()\n        {\n            string odata = \"$filter=(name eq 'john' and age gt 7)&$orderby=String desc,id&$skip=5&$top=3&$select=name,age&$inlinecount=allpages\";\n\n            string expectedSql = \"SELECT [name], [age] FROM [test] WHERE (([name] = @p1) AND ([age] > @p2)) ORDER BY [String] DESC, [id] LIMIT 3 OFFSET 5\";\n            string expectedCountSql = \"SELECT COUNT(1) AS [count] FROM [test] WHERE (([name] = @p1) AND ([age] > @p2))\";\n\n            TestSqlFormatting(f => f.FormatSelect, odata, expectedSql, \"john\", 7L);\n            TestSqlFormatting(f => f.FormatSelectCount, odata, expectedCountSql, \"john\", 7L);\n        }\n\n        [TestMethod]\n        public void FormatDeletes_GeneratesSQL()\n        {\n            string odata = \"$filter=(name eq 'john' and age gt 7)&$orderby=String desc,id&$skip=5&$top=3&$select=name,age&$inlinecount=allpages\";\n\n            string expectedSql = \"DELETE FROM [test] WHERE [id] IN (SELECT [id] FROM [test] WHERE (([name] = @p1) AND ([age] > @p2)) ORDER BY [String] DESC, [id] LIMIT 3 OFFSET 5)\";\n\n            TestSqlFormatting(f => f.FormatDelete, odata, expectedSql, \"john\", 7L);\n        }\n\n        private static void TestSqlFormatting(Func<SqlQueryFormatter, Func<string>> action, string odata, string expectedSql, params object[] parameters)\n        {\n            var query = MobileServiceTableQueryDescription.Parse(\"test\", odata);\n            var formatter = new SqlQueryFormatter(query);\n            string sql = action(formatter)();\n\n            Assert.AreEqual(expectedSql, sql);\n            Assert.AreEqual(formatter.Parameters.Count, parameters.Length);\n\n            for (int i = 0; i < parameters.Length; i++)\n            {\n                string name = \"@p\" + (i + 1);\n                Assert.IsTrue(formatter.Parameters.ContainsKey(name));\n                Assert.AreEqual(formatter.Parameters[name], parameters[i]);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Unit/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Unit/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"net45\" />\n  <package id=\"Moq\" version=\"4.2.1408.0717\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:local=\"clr-namespace:Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\">\n\n    <!--Application Resources-->\n    <Application.Resources>\n        <local:LocalizedStrings x:Key=\"LocalizedStrings\"/>\n    </Application.Resources>\n\n    <Application.ApplicationLifetimeObjects>\n        <!--Required object that handles lifetime events for the application-->\n        <shell:PhoneApplicationService\n            Launching=\"Application_Launching\" Closing=\"Application_Closing\"\n            Activated=\"Application_Activated\" Deactivated=\"Application_Deactivated\"/>\n    </Application.ApplicationLifetimeObjects>\n\n</Application>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/App.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Markup;\nusing System.Windows.Navigation;\nusing Microsoft.Phone.Controls;\nusing Microsoft.Phone.Shell;\nusing Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Resources;\nusing Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.UnitTests;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    public partial class App : Application\n    {\n        /// <summary>\n        /// Provides easy access to the root frame of the Phone Application.\n        /// </summary>\n        /// <returns>The root frame of the Phone Application.</returns>\n        public static PhoneApplicationFrame RootFrame { get; private set; }\n\n        /// <summary>\n        /// Gets the test harness used by the application.\n        /// </summary>\n        public static TestHarness Harness { get; private set; }\n\n        /// <summary>\n        /// Initialize the test harness.\n        /// </summary>\n        static App()\n        {\n            Harness = new TestHarness();\n            Harness.LoadTestAssembly(typeof(SQLiteStoreTests).Assembly);\n        }\n\n        /// <summary>\n        /// Constructor for the Application object.\n        /// </summary>\n        public App()\n        {\n            // Global handler for uncaught exceptions.\n            UnhandledException += Application_UnhandledException;\n\n            // Standard XAML initialization\n            InitializeComponent();\n\n            // Phone-specific initialization\n            InitializePhoneApplication();\n\n            // Language display initialization\n            InitializeLanguage();\n\n            // Show graphics profiling information while debugging.\n            if (Debugger.IsAttached)\n            {\n                // Display the current frame rate counters.\n                Application.Current.Host.Settings.EnableFrameRateCounter = true;\n\n                // Show the areas of the app that are being redrawn in each frame.\n                //Application.Current.Host.Settings.EnableRedrawRegions = true;\n\n                // Enable non-production analysis visualization mode,\n                // which shows areas of a page that are handed off to GPU with a colored overlay.\n                //Application.Current.Host.Settings.EnableCacheVisualization = true;\n\n                // Prevent the screen from turning off while under the debugger by disabling\n                // the application's idle detection.\n                // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run\n                // and consume battery power when the user is not using the phone.\n                PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;\n            }\n\n        }\n\n        // Code to execute when the application is launching (eg, from Start)\n        // This code will not execute when the application is reactivated\n        private void Application_Launching(object sender, LaunchingEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is activated (brought to foreground)\n        // This code will not execute when the application is first launched\n        private void Application_Activated(object sender, ActivatedEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is deactivated (sent to background)\n        // This code will not execute when the application is closing\n        private void Application_Deactivated(object sender, DeactivatedEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is closing (eg, user hit Back)\n        // This code will not execute when the application is deactivated\n        private void Application_Closing(object sender, ClosingEventArgs e)\n        {\n        }\n\n        // Code to execute if a navigation fails\n        private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            if (Debugger.IsAttached)\n            {\n                // A navigation has failed; break into the debugger\n                Debugger.Break();\n            }\n        }\n\n        // Code to execute on Unhandled Exceptions\n        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)\n        {\n            if (Debugger.IsAttached)\n            {\n                // An unhandled exception has occurred; break into the debugger\n                Debugger.Break();\n            }\n        }\n\n        #region Phone application initialization\n\n        // Avoid double-initialization\n        private bool phoneApplicationInitialized = false;\n\n        // Do not add any additional code to this method\n        private void InitializePhoneApplication()\n        {\n            if (phoneApplicationInitialized)\n                return;\n\n            // Create the frame but don't set it as RootVisual yet; this allows the splash\n            // screen to remain active until the application is ready to render.\n            RootFrame = new PhoneApplicationFrame();\n            RootFrame.Navigated += CompleteInitializePhoneApplication;\n\n            // Handle navigation failures\n            RootFrame.NavigationFailed += RootFrame_NavigationFailed;\n\n            // Handle reset requests for clearing the backstack\n            RootFrame.Navigated += CheckForResetNavigation;\n\n            // Ensure we don't initialize again\n            phoneApplicationInitialized = true;\n        }\n\n        // Do not add any additional code to this method\n        private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)\n        {\n            // Set the root visual to allow the application to render\n            if (RootVisual != RootFrame)\n                RootVisual = RootFrame;\n\n            // Remove this handler since it is no longer needed\n            RootFrame.Navigated -= CompleteInitializePhoneApplication;\n        }\n\n        private void CheckForResetNavigation(object sender, NavigationEventArgs e)\n        {\n            // If the app has received a 'reset' navigation, then we need to check\n            // on the next navigation to see if the page stack should be reset\n            if (e.NavigationMode == NavigationMode.Reset)\n                RootFrame.Navigated += ClearBackStackAfterReset;\n        }\n\n        private void ClearBackStackAfterReset(object sender, NavigationEventArgs e)\n        {\n            // Unregister the event so it doesn't get called again\n            RootFrame.Navigated -= ClearBackStackAfterReset;\n\n            // Only clear the stack for 'new' (forward) and 'refresh' navigations\n            if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh)\n                return;\n\n            // For UI consistency, clear the entire page stack\n            while (RootFrame.RemoveBackEntry() != null)\n            {\n                ; // do nothing\n            }\n        }\n\n        #endregion\n\n        // Initialize the app's font and flow direction as defined in its localized resource strings.\n        //\n        // To ensure that the font of your application is aligned with its supported languages and that the\n        // FlowDirection for each of those languages follows its traditional direction, ResourceLanguage\n        // and ResourceFlowDirection should be initialized in each resx file to match these values with that\n        // file's culture. For example:\n        //\n        // AppResources.es-ES.resx\n        //    ResourceLanguage's value should be \"es-ES\"\n        //    ResourceFlowDirection's value should be \"LeftToRight\"\n        //\n        // AppResources.ar-SA.resx\n        //     ResourceLanguage's value should be \"ar-SA\"\n        //     ResourceFlowDirection's value should be \"RightToLeft\"\n        //\n        // For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072.\n        //\n        private void InitializeLanguage()\n        {\n            try\n            {\n                // Set the font to match the display language defined by the\n                // ResourceLanguage resource string for each supported language.\n                //\n                // Fall back to the font of the neutral language if the Display\n                // language of the phone is not supported.\n                //\n                // If a compiler error is hit then ResourceLanguage is missing from\n                // the resource file.\n                RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);\n\n                // Set the FlowDirection of all elements under the root frame based\n                // on the ResourceFlowDirection resource string for each\n                // supported language.\n                //\n                // If a compiler error is hit then ResourceFlowDirection is missing from\n                // the resource file.\n                FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection);\n                RootFrame.FlowDirection = flow;\n            }\n            catch\n            {\n                // If an exception is caught here it is most likely due to either\n                // ResourceLangauge not being correctly set to a supported language\n                // code or ResourceFlowDirection is set to a value other than LeftToRight\n                // or RightToLeft.\n\n                if (Debugger.IsAttached)\n                {\n                    Debugger.Break();\n                }\n\n                throw;\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/LocalizedStrings.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Resources;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    /// <summary>\n    /// Provides access to string resources.\n    /// </summary>\n    public class LocalizedStrings\n    {\n        private static AppResources _localizedResources = new AppResources();\n\n        public AppResources LocalizedResources { get { return _localizedResources; } }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/MainPage.xaml",
    "content": "﻿<phone:PhoneApplicationPage\n    x:Class=\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n        \n        <StackPanel Grid.Row=\"0\">\n            <TextBlock Text=\"Windows Azure Mobile Services\" Style=\"{StaticResource PhoneTextNormalStyle}\" FontSize=\"20\" FontWeight=\"Bold\"/>\n            <TextBlock Text=\"SQLiteStore Tests\" Style=\"{StaticResource PhoneTextAccentStyle}\" Foreground=\"#0094ff\" FontSize=\"30\" />\n            <TextBlock TextWrapping=\"Wrap\" Visibility=\"Collapsed\" x:Name=\"lblStatus\" Text=\"Status pending...\"  Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n            <StackPanel x:Name=\"testSettings\">\n                <TextBlock VerticalAlignment=\"Center\" Style=\"{StaticResource PhoneTextNormalStyle}\" Text=\"Tags:\"/>\n                <TextBox x:Name=\"txtTags\" FontSize=\"20\"  BorderThickness=\"0\" Padding=\"0\" />\n                <StackPanel HorizontalAlignment=\"Left\" Orientation=\"Horizontal\">\n                    <Button x:Name=\"btnUnitTests\" Content=\"Unit Tests\" MinWidth=\"100\" Click=\"ExecuteUnitTests\" />\n                </StackPanel>\n            </StackPanel>\n        </StackPanel>\n\n        <StackPanel x:Name=\"ContentPanel\" Grid.Row=\"1\" Margin=\"12,12,12,12\">\n            <phone:LongListSelector\n        \t\tHeight=\"560\" \n        \t\tWidth=\"456\"\n        \t\tx:Name=\"unitTests\"               \n        \t\tIsGroupingEnabled=\"True\" \n        \t\tBorderBrush=\"Red\"\n                BorderThickness=\"2\" \n                Visibility=\"Collapsed\">\n                <phone:LongListSelector.GroupHeaderTemplate>\n                    <DataTemplate>\n                        <Border BorderThickness=\"0 0 0 1\" BorderBrush=\"#666666\" Margin=\"0 5 0 0\" HorizontalAlignment=\"Stretch\">\n                            <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Stretch\">\n                                <TextBlock Text=\"{Binding Name}\" FontSize=\"30\" />\n                                <TextBlock Text=\" tests\" FontSize=\"30\"/>\n                            </StackPanel>\n                        </Border>\n                    </DataTemplate>\n                </phone:LongListSelector.GroupHeaderTemplate>\n\n                <phone:LongListSelector.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Margin=\"8 0\">\n                            <TextBlock Text=\"{Binding Name}\" Foreground=\"{Binding Brush}\" FontSize=\"25\" />\n                            <ItemsControl ItemsSource=\"{Binding Details}\" Margin=\"15 0 0 0\" FontSize=\"20\" Foreground=\"LightGray\" />\n                        </StackPanel>\n                    </DataTemplate>\n                </phone:LongListSelector.ItemTemplate>\n            </phone:LongListSelector>            \n        </StackPanel>\n\n        <StackPanel x:Name=\"unitTestResults\" Grid.Row=\"2\" Margin=\"12,0,12,0\" Visibility=\"Collapsed\">\n            <ProgressBar x:Name=\"progress\"/>\n            <StackPanel Orientation=\"Horizontal\">\n                <TextBlock Text=\"Zumo tests \" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n                <TextBlock x:Name=\"lblCurrentTestNumber\" Text=\"0\"/>\n                <TextBlock Text=\" / \"/>\n                <TextBlock x:Name=\"lblTotalTestNumber\" Text=\"0\"/>\n                <TextBlock Text=\"  (with  \"/>\n                <TextBlock x:Name=\"lblFailureNumber\" Text=\"0\"/>\n                <TextBlock Text=\" failures)\"/>\n            </StackPanel>\n            <TextBlock Foreground=\"#ffd800\" x:Name=\"lblResults\" Text=\"Results pending...\" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n        </StackPanel>\n\n    </Grid>\n\n</phone:PhoneApplicationPage>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/MainPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.ObjectModel;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing Microsoft.Phone.Controls;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    public partial class MainPage : PhoneApplicationPage, ITestReporter\n    {\n        private ObservableCollection<GroupDescription> _groups;\n        private GroupDescription _currentGroup = null;\n        private TestDescription _currentTest = null;\n\n        // Constructor\n        public MainPage()\n        {\n            InitializeComponent();\n            this.Loaded += MainPage_Loaded;\n        }\n\n        void MainPage_Loaded(object sender, RoutedEventArgs e)\n        {\n            // Setup the groups data source\n            _groups = new ObservableCollection<GroupDescription>();\n            unitTests.ItemsSource = _groups;\n\n            txtTags.Text = \"\"; // Set the default tags here\n        }\n\n        private void ExecuteUnitTests(object sender, RoutedEventArgs e)\n        {\n            // Get the test settings from the UI\n            App.Harness.Settings.TagExpression = txtTags.Text;\n\n            //ignore tests for WP75\n            if (!string.IsNullOrEmpty(App.Harness.Settings.TagExpression))\n            {\n                App.Harness.Settings.TagExpression += \" - notWP80\";\n            }\n            else\n            {\n                App.Harness.Settings.TagExpression = \"!notWP80\";\n            }\n\n            // Hide Test Settings UI\n            testSettings.Visibility = Visibility.Collapsed;\n\n            // Display Status UI\n            lblStatus.Visibility = Visibility.Visible;\n            unitTests.Visibility = Visibility.Visible;\n            unitTestResults.Visibility = Visibility.Visible;\n\n            // Start a test run\n            App.Harness.Reporter = this;\n            Task.Factory.StartNew(() => App.Harness.RunAsync());\n        }\n\n        public void StartRun(TestHarness harness)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                lblCurrentTestNumber.Text = harness.Progress.ToString();\n                lblTotalTestNumber.Text = harness.Count.ToString();\n                lblFailureNumber.Tag = harness.Failures.ToString() ?? \"0\";\n                progress.Value = 1;\n            });\n        }\n\n        public void EndRun(TestHarness harness)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                if (harness.Failures > 0)\n                {\n                    lblResults.Text = string.Format(CultureInfo.InvariantCulture, \"{0}/{1} tests failed!\", harness.Failures, harness.Count);\n                    lblResults.Foreground = new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0x00, 0x6E));\n                }\n                else\n                {\n                    lblResults.Text = string.Format(CultureInfo.InvariantCulture, \"{0} tests passed!\", harness.Count);\n                }\n                lblResults.Visibility = Visibility.Visible;\n            });\n        }\n\n        public void Progress(TestHarness harness)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                lblCurrentTestNumber.Text = harness.Progress.ToString();\n                lblFailureNumber.Text = \" \" + (harness.Failures.ToString() ?? \"0\");\n                double value = harness.Progress;\n                int count = harness.Count;\n                if (count > 0)\n                {\n                    value = value * 100.0 / (double)count;\n                }\n                progress.Value = value;\n            });\n        }\n\n        public void StartGroup(TestGroup group)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                _currentGroup = new GroupDescription { Name = group.Name };\n                _groups.Add(_currentGroup);\n            });\n        }\n\n        public void EndGroup(TestGroup group)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                _currentGroup = null;\n            });\n        }\n\n        public void StartTest(TestMethod test)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                TestDescription testDescription = new TestDescription { Name = test.Name };\n                _currentTest = testDescription;\n                _currentGroup.Add(_currentTest);\n\n                Dispatcher.BeginInvoke(() =>\n                {\n                    unitTests.ScrollTo(testDescription);\n                });\n            });\n        }\n\n        public void EndTest(TestMethod method)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                if (method.Excluded)\n                {\n                    _currentTest.Color = Color.FromArgb(0xFF, 0x66, 0x66, 0x66);\n                }\n                else if (!method.Passed)\n                {\n                    _currentTest.Color = Color.FromArgb(0xFF, 0xFF, 0x00, 0x6E);\n                }\n                else\n                {\n                    _currentTest.Color = Color.FromArgb(0xFF, 0x2A, 0x9E, 0x39);\n                }\n                _currentTest = null;\n            });\n        }\n\n        public void Log(string message)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                _currentTest.Details.Add(message);\n            });\n        }\n\n        public void Error(string errorDetails)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                _currentTest.Details.Add(errorDetails);\n            });\n        }\n\n        public void Status(string status)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                lblStatus.Text = status;\n            });\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/Microsoft.WindowsAzure.Mobile.SQLiteStore.WP8.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\wp8\\SQLitePCL.props\" Condition=\"Exists('..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\wp8\\SQLitePCL.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}</ProjectGuid>\n    <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.SQLiteStore.WP8.Test</AssemblyName>\n    <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>\n    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>\n    <SilverlightApplication>true</SilverlightApplication>\n    <SupportedCultures>\n    </SupportedCultures>\n    <XapOutputs>true</XapOutputs>\n    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>\n    <XapFilename>Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test_Debug_x86.xap</XapFilename>\n    <SilverlightManifestTemplate>Properties\\AppManifest.xml</SilverlightManifestTemplate>\n    <SilverlightAppEntry>Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.App</SilverlightAppEntry>\n    <ValidateXaml>true</ValidateXaml>\n    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>\n    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <NuGetPackageImportStamp>526e0517</NuGetPackageImportStamp>\n    <NuGetPackageImportStamp>74a3e6d1</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <RunCodeAnalysis>false</RunCodeAnalysis>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\x86\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\x86\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|ARM' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\ARM\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|ARM' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\ARM\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test\\UI\\GroupDescription.cs\">\n      <Link>UI\\GroupDescription.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test\\UI\\TestDescription.cs\">\n      <Link>UI\\TestDescription.cs</Link>\n    </Compile>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"LocalizedStrings.cs\" />\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Resources\\AppResources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>AppResources.resx</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"Properties\\AppManifest.xml\" />\n    <None Include=\"Properties\\WMAppManifest.xml\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Assets\\AlignmentGrid.png\" />\n    <Content Include=\"Assets\\ApplicationIcon.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileLarge.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileMedium.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileSmall.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\IconicTileMediumLarge.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\IconicTileSmall.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Resources\\AppResources.resx\">\n      <Generator>PublicResXFileCodeGenerator</Generator>\n      <LastGenOutput>AppResources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.SQLiteStore\\Microsoft.WindowsAzure.Mobile.SQLiteStore.csproj\">\n      <Project>{4C20D49A-FE5E-4D9C-98B9-8125450074F5}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.SQLiteStore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI\\Microsoft.WindowsAzure.Mobile.UI.WP8.csproj\">\n      <Project>{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.UI.WP8</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8\\Microsoft.WindowsAzure.Mobile.Ext.WP8.csproj\">\n      <Project>{EB3834A2-3C20-4F39-BEE9-87DFCAB81670}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.WP8</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-E36E-4190-8714-5BD2665859FB}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\\Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.csproj\">\n      <Project>{CD5D8A3A-5631-41BF-8161-8A2A7F892B71}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.SQLiteStore.Test</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{A2500BD2-A9A2-4085-9978-DEE3675B02DD}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{D8BBC92A-B213-463B-911D-3A106F91D5F9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SQLitePCL\">\n      <HintPath>..\\..\\packages\\SQLitePCL.3.8.7.2\\lib\\wp8\\SQLitePCL.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SQLitePCL.Ext.WindowsPhone8.RuntimeProxy\">\n      <HintPath>..\\..\\packages\\SQLitePCL.3.8.7.2\\lib\\wp8\\SQLitePCL.Ext.WindowsPhone8.RuntimeProxy.winmd</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"PlatformTests\\\" />\n    <Folder Include=\"UnitTests\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <SDKReference Include=\"SQLite.WP80, version=3.8.7.2\">\n      <Name>SQLite for Windows Phone</Name>\n    </SDKReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ProjectExtensions />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\wp8\\SQLitePCL.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\wp8\\SQLitePCL.props'))\" />\n    <Error Condition=\"!Exists('..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\wp8\\SQLitePCL.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\wp8\\SQLitePCL.targets'))\" />\n  </Target>\n  <Import Project=\"..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\wp8\\SQLitePCL.targets\" Condition=\"Exists('..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\wp8\\SQLitePCL.targets')\" />\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/Properties/AppManifest.xml",
    "content": "﻿<Deployment xmlns=\"http://schemas.microsoft.com/client/2007/deployment\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n>\n    <Deployment.Parts>\n    </Deployment.Parts>\n</Deployment>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Resources;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"eb6b4606-ed9e-44e0-a65b-2d28747fadff\")]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/Properties/WMAppManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Deployment xmlns=\"http://schemas.microsoft.com/windowsphone/2012/deployment\" AppPlatformVersion=\"8.0\">\n  <DefaultLanguage xmlns=\"\" code=\"en-US\" />\n  <App xmlns=\"\" ProductID=\"{46ae537a-1143-48a4-b9a4-4b2c7bd9ab1d}\" Title=\"Microsoft.WindowsAzure.MobileServices.WP8.Test\" RuntimeType=\"Silverlight\" Version=\"1.0.0.0\" Genre=\"apps.normal\" Author=\"Microsoft.WindowsAzure.MobileServices.WP8.Test\" Description=\"Sample description\" Publisher=\"Microsoft.WindowsAzure.MobileServices.WP8.Test\" PublisherID=\"{5ddc2108-8798-43e9-b4ea-32f573792cb1}\">\n    <IconPath IsRelative=\"true\" IsResource=\"false\">Assets\\ApplicationIcon.png</IconPath>\n    <Capabilities>\n      <Capability Name=\"ID_CAP_NETWORKING\" />\n      <Capability Name=\"ID_CAP_MEDIALIB_AUDIO\" />\n      <Capability Name=\"ID_CAP_MEDIALIB_PLAYBACK\" />\n      <Capability Name=\"ID_CAP_SENSORS\" />\n      <Capability Name=\"ID_CAP_WEBBROWSERCOMPONENT\" />\n    </Capabilities>\n    <Tasks>\n      <DefaultTask Name=\"_default\" NavigationPage=\"MainPage.xaml\" />\n    </Tasks>\n    <Tokens>\n      <PrimaryToken TokenID=\"Microsoft.WindowsAzure.MobileServices.WindowsPhone8.TestToken\" TaskName=\"_default\">\n        <TemplateFlip>\n          <SmallImageURI IsRelative=\"true\" IsResource=\"false\">Assets\\Tiles\\FlipCycleTileSmall.png</SmallImageURI>\n          <Count>0</Count>\n          <BackgroundImageURI IsRelative=\"true\" IsResource=\"false\">Assets\\Tiles\\FlipCycleTileMedium.png</BackgroundImageURI>\n          <Title>Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test</Title>\n          <BackContent>\n          </BackContent>\n          <BackBackgroundImageURI>\n          </BackBackgroundImageURI>\n          <BackTitle>\n          </BackTitle>\n          <DeviceLockImageURI>\n          </DeviceLockImageURI>\n          <HasLarge>\n          </HasLarge>\n        </TemplateFlip>\n      </PrimaryToken>\n    </Tokens>\n    <ScreenResolutions>\n      <ScreenResolution Name=\"ID_RESOLUTION_WVGA\" />\n      <ScreenResolution Name=\"ID_RESOLUTION_WXGA\" />\n      <ScreenResolution Name=\"ID_RESOLUTION_HD720P\" />\n    </ScreenResolutions>\n  </App>\n</Deployment>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/Resources/AppResources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34011\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Resources {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AppResources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AppResources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.Resources.AppResources\", typeof(AppResources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to add.\n        /// </summary>\n        public static string AppBarButtonText {\n            get {\n                return ResourceManager.GetString(\"AppBarButtonText\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Menu Item.\n        /// </summary>\n        public static string AppBarMenuItemText {\n            get {\n                return ResourceManager.GetString(\"AppBarMenuItemText\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MY APPLICATION.\n        /// </summary>\n        public static string ApplicationTitle {\n            get {\n                return ResourceManager.GetString(\"ApplicationTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to LeftToRight.\n        /// </summary>\n        public static string ResourceFlowDirection {\n            get {\n                return ResourceManager.GetString(\"ResourceFlowDirection\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to en-US.\n        /// </summary>\n        public static string ResourceLanguage {\n            get {\n                return ResourceManager.GetString(\"ResourceLanguage\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/Resources/AppResources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ResourceFlowDirection\" xml:space=\"preserve\">\n    <value>LeftToRight</value>\n    <comment>Controls the FlowDirection for all elements in the RootFrame. Set to the traditional direction of this resource file's language</comment>\n  </data>\n  <data name=\"ResourceLanguage\" xml:space=\"preserve\">\n    <value>en-US</value>\n    <comment>Controls the Language and ensures that the font for all elements in the RootFrame aligns with the app's language. Set to the language code of this resource file's language.</comment>\n  </data>\n  <data name=\"ApplicationTitle\" xml:space=\"preserve\">\n    <value>MY APPLICATION</value>\n  </data>\n  <data name=\"AppBarButtonText\" xml:space=\"preserve\">\n    <value>add</value>\n  </data>\n  <data name=\"AppBarMenuItemText\" xml:space=\"preserve\">\n    <value>Menu Item</value>\n  </data>\n</root>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.5.11.0\" newVersion=\"1.5.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.5.11.0\" newVersion=\"1.5.11.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsPhone8.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"wp80\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"wp80\" />\n  <package id=\"SQLitePCL\" version=\"3.8.7.2\" targetFramework=\"wp80\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/App.xaml",
    "content": "﻿<Application\n  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n  xmlns:local=\"using:Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\"\n  x:Class=\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.App\"\n  RequestedTheme=\"Dark\">\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n                <!-- \n                Styles that define common aspects of the platform look and feel\n                Required by Visual Studio project and item templates\n                 -->\n                <ResourceDictionary Source=\"Common/StandardStyles.xaml\"/>\n            </ResourceDictionary.MergedDictionaries>\n        </ResourceDictionary>\n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/App.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Reflection;\nusing Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.UnitTests;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Windows.ApplicationModel.Activation;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default\n    /// Application class.\n    /// </summary>\n    public sealed partial class App : Application\n    {\n        /// <summary>\n        /// Gets the test harness used by the application.\n        /// </summary>\n        public static TestHarness Harness { get; private set; }\n\n        /// <summary>\n        /// Initialize the test harness.\n        /// </summary>\n        static App()\n        {\n            Harness = new TestHarness();\n            Harness.LoadTestAssembly(typeof(SQLiteStoreTests).GetTypeInfo().Assembly);\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the App class.\n        /// </summary>\n        public App()\n        {\n            InitializeComponent();\n        }\n\n        /// <summary>\n        /// Setup the application and initialize the tests.\n        /// </summary>\n        /// <param name=\"args\">\n        /// Details about the launch request and process.\n        /// </param>\n        protected override void OnLaunched(LaunchActivatedEventArgs args)\n        {\n            // Do not repeat app initialization when already running, just\n            // ensure that the window is active\n            if (args.PreviousExecutionState == ApplicationExecutionState.Running)\n            {\n                Window.Current.Activate();\n                return;\n            }\n\n            Frame rootFrame = new Frame();\n            rootFrame.Navigate(typeof(MainPage));\n            Window.Current.Content = rootFrame;\n            Window.Current.Activate();\n\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/Common/StandardStyles.xaml",
    "content": "﻿<!--\n    This file contains XAML styles that simplify application development.\n\n    These are not merely convenient, but are required by most Visual Studio project and item templates.\n    Removing, renaming, or otherwise modifying the content of these files may result in a project that\n    does not build, or that will not build once additional pages are added.  If variations on these\n    styles are desired it is recommended that you copy the content under a new name and modify your\n    private copy.\n-->\n\n<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <!-- Non-brush values that vary across themes -->\n\n    <ResourceDictionary.ThemeDictionaries>\n        <ResourceDictionary x:Key=\"Default\">\n            <x:String x:Key=\"BackButtonGlyph\">&#xE071;</x:String>\n            <x:String x:Key=\"BackButtonSnappedGlyph\">&#xE0BA;</x:String>\n        </ResourceDictionary>\n\n        <ResourceDictionary x:Key=\"HighContrast\">\n            <x:String x:Key=\"BackButtonGlyph\">&#xE071;</x:String>\n            <x:String x:Key=\"BackButtonSnappedGlyph\">&#xE0C4;</x:String>\n        </ResourceDictionary>\n    </ResourceDictionary.ThemeDictionaries>\n\n    <x:String x:Key=\"ChevronGlyph\">&#xE26B;</x:String>\n\n    <!-- RichTextBlock styles -->\n\n    <Style x:Key=\"BasicRichTextStyle\" TargetType=\"RichTextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationForegroundThemeBrush}\"/>\n        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\"/>\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style x:Key=\"BaselineRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BasicRichTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"ItemRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BaselineRichTextStyle}\"/>\n\n    <Style x:Key=\"BodyRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BaselineRichTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiLight\"/>\n    </Style>\n\n    <!-- TextBlock styles -->\n\n    <Style x:Key=\"BasicTextStyle\" TargetType=\"TextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationForegroundThemeBrush}\"/>\n        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\"/>\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style x:Key=\"BaselineTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"HeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"40\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-2\" Y=\"8\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"SubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"26.667\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"30\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"6\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"TitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiBold\"/>\n    </Style>\n\n    <Style x:Key=\"SubtitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n    </Style>\n\n    <Style x:Key=\"ItemTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\"/>\n\n    <Style x:Key=\"BodyTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiLight\"/>\n    </Style>\n\n    <Style x:Key=\"CaptionTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"12\"/>\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n    </Style>\n\n    <Style x:Key=\"GroupHeaderTextStyle\" TargetType=\"TextBlock\">\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n        <Setter Property=\"FontSize\" Value=\"26.667\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"30\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"6\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- Button styles -->\n    \n    <!--\n        TextButtonStyle is used to style a Button using subheader-styled text with no other adornment.  There\n        are two styles that are based on TextButtonStyle (TextPrimaryButtonStyle and TextSecondaryButtonStyle)\n        which are used in the GroupedItemsPage as a group header and in the FileOpenPickerPage for triggering\n        commands.\n    -->\n    <Style x:Key=\"TextButtonStyle\" TargetType=\"ButtonBase\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"MinHeight\" Value=\"0\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"ButtonBase\">\n                    <Grid Background=\"Transparent\">\n                        <ContentPresenter x:Name=\"Text\" Content=\"{TemplateBinding Content}\" />\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualWhite\" Storyboard.TargetProperty=\"Opacity\"/>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualBlack\" Storyboard.TargetProperty=\"Opacity\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\"/>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CheckStates\">\n                                <VisualState x:Name=\"Checked\"/>\n                                <VisualState x:Name=\"Unchecked\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Indeterminate\"/>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"TextPrimaryButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource TextButtonStyle}\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationHeaderForegroundThemeBrush}\"/>\n    </Style>\n\n    <Style x:Key=\"TextSecondaryButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource TextButtonStyle}\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n    </Style>\n\n    <!--\n        TextRadioButtonStyle is used to style a RadioButton using subheader-styled text with no other adornment.\n        This style is used in the SearchResultsPage to allow selection among filters.\n    -->\n    <Style x:Key=\"TextRadioButtonStyle\" TargetType=\"RadioButton\" BasedOn=\"{StaticResource TextButtonStyle}\">\n        <Setter Property=\"Margin\" Value=\"0,0,30,0\"/>\n    </Style>\n\n    <!--\n        AppBarButtonStyle is used to style a Button (or ToggleButton) for use in an App Bar.  Content will be centered \n        and should fit within the 40 pixel radius glyph provided.  16-point Segoe UI Symbol is used for content text \n        to simplify the use of glyphs from that font.  AutomationProperties.Name is used for the text below the glyph.\n    -->\n    <Style x:Key=\"AppBarButtonStyle\" TargetType=\"ButtonBase\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"20\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"App Bar Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"ButtonBase\">\n                    <Grid x:Name=\"RootGrid\" Width=\"100\" Background=\"Transparent\">\n                        <StackPanel VerticalAlignment=\"Top\" Margin=\"0,12,0,11\">\n                            <Grid Width=\"40\" Height=\"40\" Margin=\"0,0,0,5\" HorizontalAlignment=\"Center\">\n                                <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0A8;\" FontFamily=\"Segoe UI Symbol\" FontSize=\"53.333\" Margin=\"-4,-19,0,0\" Foreground=\"{StaticResource AppBarItemBackgroundThemeBrush}\"/>\n                                <TextBlock x:Name=\"OutlineGlyph\" Text=\"&#xE0A7;\" FontFamily=\"Segoe UI Symbol\" FontSize=\"53.333\" Margin=\"-4,-19,0,0\"/>\n                                <ContentPresenter x:Name=\"Content\" HorizontalAlignment=\"Center\" Margin=\"-1,-1,0,0\" VerticalAlignment=\"Center\"/>\n                            </Grid>\n                            <TextBlock\n                                x:Name=\"TextLabel\"\n                                Text=\"{TemplateBinding AutomationProperties.Name}\"\n                                Foreground=\"{StaticResource AppBarItemForegroundThemeBrush}\"\n                                Margin=\"0,0,2,0\"\n                                FontSize=\"12\"\n                                TextAlignment=\"Center\"\n                                Width=\"88\"\n                                MaxHeight=\"32\"\n                                TextTrimming=\"WordEllipsis\"\n                                Style=\"{StaticResource BasicTextStyle}\"/>\n                        </StackPanel>\n                        <Rectangle\n                                x:Name=\"FocusVisualWhite\"\n                                IsHitTestVisible=\"False\"\n                                Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                                StrokeEndLineCap=\"Square\"\n                                StrokeDashArray=\"1,1\"\n                                Opacity=\"0\"\n                                StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                                x:Name=\"FocusVisualBlack\"\n                                IsHitTestVisible=\"False\"\n                                Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                                StrokeEndLineCap=\"Square\"\n                                StrokeDashArray=\"1,1\"\n                                Opacity=\"0\"\n                                StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"ApplicationViewStates\">\n                                <VisualState x:Name=\"FullScreenLandscape\"/>\n                                <VisualState x:Name=\"Filled\"/>\n                                <VisualState x:Name=\"FullScreenPortrait\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Width\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"60\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Snapped\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Width\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"60\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                                Storyboard.TargetName=\"FocusVisualWhite\"\n                                                Storyboard.TargetProperty=\"Opacity\"\n                                                To=\"1\"\n                                                Duration=\"0\"/>\n                                        <DoubleAnimation\n                                                Storyboard.TargetName=\"FocusVisualBlack\"\n                                                Storyboard.TargetProperty=\"Opacity\"\n                                                To=\"1\"\n                                                Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CheckStates\">\n                                <VisualState x:Name=\"Checked\">\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0\" To=\"0\" Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Opacity\"/>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundCheckedGlyph\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unchecked\"/>\n                                <VisualState x:Name=\"Indeterminate\"/>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- \n        Standard AppBarButton Styles for use with Button and ToggleButton\n    \n        An AppBarButton Style is provided for each of the glyphs in the Segoe UI Symbol font.  \n        Uncomment any style you reference (as not all may be required).\n    -->\n\n    <!--\n    \n    <Style x:Key=\"SkipBackAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SkipBackAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skip Back\"/>\n        <Setter Property=\"Content\" Value=\"&#xE100;\"/>\n    </Style>\n    <Style x:Key=\"SkipAheadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SkipAheadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skip Ahead\"/>\n        <Setter Property=\"Content\" Value=\"&#xE101;\"/>\n    </Style>\n    <Style x:Key=\"PlayAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PlayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Play\"/>\n        <Setter Property=\"Content\" Value=\"&#xE102;\"/>\n    </Style>\n    <Style x:Key=\"PauseAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PauseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pause\"/>\n        <Setter Property=\"Content\" Value=\"&#xE103;\"/>\n    </Style>\n    <Style x:Key=\"EditAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"EditAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Edit\"/>\n        <Setter Property=\"Content\" Value=\"&#xE104;\"/>\n    </Style>\n    <Style x:Key=\"SaveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SaveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Save\"/>\n        <Setter Property=\"Content\" Value=\"&#xE105;\"/>\n    </Style>\n    <Style x:Key=\"DeleteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DeleteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Delete\"/>\n        <Setter Property=\"Content\" Value=\"&#xE106;\"/>\n    </Style>\n    <Style x:Key=\"DiscardAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DiscardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Discard\"/>\n        <Setter Property=\"Content\" Value=\"&#xE107;\"/>\n    </Style>\n    <Style x:Key=\"RemoveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RemoveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Remove\"/>\n        <Setter Property=\"Content\" Value=\"&#xE108;\"/>\n    </Style>\n    <Style x:Key=\"AddAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AddAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Add\"/>\n        <Setter Property=\"Content\" Value=\"&#xE109;\"/>\n    </Style>\n    <Style x:Key=\"NoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"No\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10A;\"/>\n    </Style>\n    <Style x:Key=\"YesAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"YesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Yes\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10B;\"/>\n    </Style>\n    <Style x:Key=\"MoreAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MoreAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"More\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10C;\"/>\n    </Style>\n    <Style x:Key=\"RedoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RedoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Redo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10D;\"/>\n    </Style>\n    <Style x:Key=\"UndoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UndoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Undo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10E;\"/>\n    </Style>\n    <Style x:Key=\"HomeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HomeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Home\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10F;\"/>\n    </Style>\n    <Style x:Key=\"OutAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Out\"/>\n        <Setter Property=\"Content\" Value=\"&#xE110;\"/>\n    </Style>\n    <Style x:Key=\"NextAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NextAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Next\"/>\n        <Setter Property=\"Content\" Value=\"&#xE111;\"/>\n    </Style>\n    <Style x:Key=\"PreviousAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PreviousAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Previous\"/>\n        <Setter Property=\"Content\" Value=\"&#xE112;\"/>\n    </Style>\n    <Style x:Key=\"FavoriteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FavoriteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Favorite\"/>\n        <Setter Property=\"Content\" Value=\"&#xE113;\"/>\n    </Style>\n    <Style x:Key=\"PhotoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhotoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Photo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE114;\"/>\n    </Style>\n    <Style x:Key=\"SettingsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SettingsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Settings\"/>\n        <Setter Property=\"Content\" Value=\"&#xE115;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"VideoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VideoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Video\"/>\n        <Setter Property=\"Content\" Value=\"&#xE116;\"/>\n    </Style>\n    <Style x:Key=\"RefreshAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RefreshAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Refresh\"/>\n        <Setter Property=\"Content\" Value=\"&#xE117;\"/>\n    </Style>\n    <Style x:Key=\"DownloadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DownloadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Download\"/>\n        <Setter Property=\"Content\" Value=\"&#xE118;\"/>\n    </Style>\n    <Style x:Key=\"MailAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mail\"/>\n        <Setter Property=\"Content\" Value=\"&#xE119;\"/>\n    </Style>\n    <Style x:Key=\"SearchAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SearchAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Search\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11A;\"/>\n    </Style>\n    <Style x:Key=\"HelpAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HelpAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Help\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11B;\"/>\n    </Style>\n    <Style x:Key=\"UploadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UploadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Upload\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11C;\"/>\n    </Style>\n    <Style x:Key=\"EmojiAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"EmojiAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Emoji\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11D;\"/>\n    </Style>\n    <Style x:Key=\"TwoPageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TwoPageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Two Page\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11E;\"/>\n    </Style>\n    <Style x:Key=\"LeaveChatAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LeaveChatAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Upload\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11F;\"/>\n    </Style>\n    <Style x:Key=\"MailForwardAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailForwardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Forward Mail\"/>\n        <Setter Property=\"Content\" Value=\"&#xE120;\"/>\n    </Style>\n    <Style x:Key=\"ClockAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ClockAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Clock\"/>\n        <Setter Property=\"Content\" Value=\"&#xE121;\"/>\n    </Style>\n    <Style x:Key=\"SendAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SendAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Send\"/>\n        <Setter Property=\"Content\" Value=\"&#xE122;\"/>\n    </Style>\n    <Style x:Key=\"CropAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CropAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Crop\"/>\n        <Setter Property=\"Content\" Value=\"&#xE123;\"/>\n    </Style>\n    <Style x:Key=\"RotateCameraAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RotateCameraAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Rotate Camera\"/>\n        <Setter Property=\"Content\" Value=\"&#xE124;\"/>\n    </Style>\n    <Style x:Key=\"PeopleAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PeopleAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"People\"/>\n        <Setter Property=\"Content\" Value=\"&#xE125;\"/>\n    </Style>\n    <Style x:Key=\"ClosePaneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ClosePaneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Close Pane\"/>\n        <Setter Property=\"Content\" Value=\"&#xE126;\"/>\n    </Style>\n    <Style x:Key=\"OpenPaneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenPaneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open Pane\"/>\n        <Setter Property=\"Content\" Value=\"&#xE127;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"WorldAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"WorldAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"World\"/>\n        <Setter Property=\"Content\" Value=\"&#xE128;\"/>\n    </Style>\n    <Style x:Key=\"FlagAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FlagAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Flag\"/>\n        <Setter Property=\"Content\" Value=\"&#xE129;\"/>\n    </Style>\n    <Style x:Key=\"PreviewLinkAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PreviewLinkAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Preview Link\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12A;\"/>\n    </Style>\n    <Style x:Key=\"GlobeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GlobeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Globe\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12B;\"/>\n    </Style>\n    <Style x:Key=\"TrimAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TrimAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Trim\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12C;\"/>\n    </Style>\n    <Style x:Key=\"AttachCameraAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AttachCameraAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Attach Camera\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12D;\"/>\n    </Style>\n    <Style x:Key=\"ZoomInAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZoomInAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zoom In\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12E;\"/>\n    </Style>\n    <Style x:Key=\"BookmarksAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BookmarksAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Bookmarks\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12F;\"/>\n    </Style>\n    <Style x:Key=\"DocumentAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DocumentAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Document\"/>\n        <Setter Property=\"Content\" Value=\"&#xE130;\"/>\n    </Style>\n    <Style x:Key=\"ProtectedDocumentAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ProtectedDocumentAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Protected Document\"/>\n        <Setter Property=\"Content\" Value=\"&#xE131;\"/>\n    </Style>\n    <Style x:Key=\"PageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Page\"/>\n        <Setter Property=\"Content\" Value=\"&#xE132;\"/>\n    </Style>\n    <Style x:Key=\"BulletsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BulletsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Bullets\"/>\n        <Setter Property=\"Content\" Value=\"&#xE133;\"/>\n    </Style>\n    <Style x:Key=\"CommentAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CommentAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Comment\"/>\n        <Setter Property=\"Content\" Value=\"&#xE134;\"/>\n    </Style>\n    <Style x:Key=\"Mail2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Mail2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mail2\"/>\n        <Setter Property=\"Content\" Value=\"&#xE135;\"/>\n    </Style>\n    <Style x:Key=\"ContactInfoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ContactInfoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Contact Info\"/>\n        <Setter Property=\"Content\" Value=\"&#xE136;\"/>\n    </Style>\n    <Style x:Key=\"HangUpAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HangUpAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Hang Up\"/>\n        <Setter Property=\"Content\" Value=\"&#xE137;\"/>\n    </Style>\n    <Style x:Key=\"ViewAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ViewAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"View All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE138;\"/>\n    </Style>\n    <Style x:Key=\"MapPinAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MapPinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Map Pin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE139;\"/>\n    </Style>\n    <Style x:Key=\"PhoneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhoneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Phone\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13A;\"/>\n    </Style>\n    <Style x:Key=\"VideoChatAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VideoChatAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Video Chat\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13B;\"/>\n    </Style>\n    <Style x:Key=\"SwitchAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SwitchAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Switch\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13C;\"/>\n    </Style>\n    <Style x:Key=\"ContactAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ContactAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Contact\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13D;\"/>\n    </Style>\n\n    -->\n\n    <!--\n\n    <Style x:Key=\"RenameAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RenameAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Rename\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13E;\"/>\n    </Style>\n    <Style x:Key=\"PinAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE141;\"/>\n    </Style>\n    <Style x:Key=\"MusicInfoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MusicInfoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Music Info\"/>\n        <Setter Property=\"Content\" Value=\"&#xE142;\"/>\n    </Style>\n    <Style x:Key=\"GoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Go\"/>\n        <Setter Property=\"Content\" Value=\"&#xE143;\"/>\n    </Style>\n    <Style x:Key=\"KeyboardAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"KeyboardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Keyboard\"/>\n        <Setter Property=\"Content\" Value=\"&#xE144;\"/>\n    </Style>\n    <Style x:Key=\"DockLeftAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DockLeftAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dock Left\"/>\n        <Setter Property=\"Content\" Value=\"&#xE145;\"/>\n    </Style>\n    <Style x:Key=\"DockRightAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DockRightAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dock Right\"/>\n        <Setter Property=\"Content\" Value=\"&#xE146;\"/>\n    </Style>\n    <Style x:Key=\"DockBottomAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DockBottomAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dock Bottom\"/>\n        <Setter Property=\"Content\" Value=\"&#xE147;\"/>\n    </Style>\n    <Style x:Key=\"RemoteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RemoteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Remote\"/>\n        <Setter Property=\"Content\" Value=\"&#xE148;\"/>\n    </Style>\n    <Style x:Key=\"SyncAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SyncAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Sync\"/>\n        <Setter Property=\"Content\" Value=\"&#xE149;\"/>\n    </Style>\n    <Style x:Key=\"RotateAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RotateAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Rotate\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14A;\"/>\n    </Style>\n    <Style x:Key=\"ShuffleAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShuffleAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Shuffle\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14B;\"/>\n    </Style>\n    <Style x:Key=\"ListAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ListAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"List\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14C;\"/>\n    </Style>\n    <Style x:Key=\"ShopAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShopAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Shop\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14D;\"/>\n    </Style>\n    <Style x:Key=\"SelectAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SelectAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Select All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14E;\"/>\n    </Style>\n    <Style x:Key=\"OrientationAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OrientationAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Orientation\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14F;\"/>\n    </Style>\n    <Style x:Key=\"ImportAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ImportAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Import\"/>\n        <Setter Property=\"Content\" Value=\"&#xE150;\"/>\n    </Style>\n    <Style x:Key=\"ImportAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ImportAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Import All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE151;\"/>\n    </Style>\n    <Style x:Key=\"BrowsePhotosAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BrowsePhotosAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Browse Photos\"/>\n        <Setter Property=\"Content\" Value=\"&#xE155;\"/>\n    </Style>\n    <Style x:Key=\"WebcamAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"WebcamAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Webcam\"/>\n        <Setter Property=\"Content\" Value=\"&#xE156;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"PicturesAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PicturesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pictures\"/>\n        <Setter Property=\"Content\" Value=\"&#xE158;\"/>\n    </Style>\n    <Style x:Key=\"SaveLocalAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SaveLocalAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Save Local\"/>\n        <Setter Property=\"Content\" Value=\"&#xE159;\"/>\n    </Style>\n    <Style x:Key=\"CaptionAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CaptionAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Caption\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15A;\"/>\n    </Style>\n    <Style x:Key=\"StopAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"StopAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Stop\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15B;\"/>\n    </Style>\n    <Style x:Key=\"ShowResultsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShowResultsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Show Results\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15C;\"/>\n    </Style>\n    <Style x:Key=\"VolumeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VolumeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Volume\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15D;\"/>\n    </Style>\n    <Style x:Key=\"RepairAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RepairAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Repair\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15E;\"/>\n    </Style>\n    <Style x:Key=\"MessageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MessageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Message\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15F;\"/>\n    </Style>\n    <Style x:Key=\"Page2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Page2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Page2\"/>\n        <Setter Property=\"Content\" Value=\"&#xE160;\"/>\n    </Style>\n    <Style x:Key=\"CalendarDayAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarDayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Day\"/>\n        <Setter Property=\"Content\" Value=\"&#xE161;\"/>\n    </Style>\n    <Style x:Key=\"CalendarWeekAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarWeekAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Week\"/>\n        <Setter Property=\"Content\" Value=\"&#xE162;\"/>\n    </Style>\n    <Style x:Key=\"CalendarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Calendar\"/>\n        <Setter Property=\"Content\" Value=\"&#xE163;\"/>\n    </Style>\n    <Style x:Key=\"CharactersAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CharactersAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Characters\"/>\n        <Setter Property=\"Content\" Value=\"&#xE164;\"/>\n    </Style>\n    <Style x:Key=\"MailReplyAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailReplyAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Reply All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE165;\"/>\n    </Style>\n    <Style x:Key=\"ReadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ReadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Read\"/>\n        <Setter Property=\"Content\" Value=\"&#xE166;\"/>\n    </Style>\n    <Style x:Key=\"LinkAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LinkAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Link\"/>\n        <Setter Property=\"Content\" Value=\"&#xE167;\"/>\n    </Style>\n    <Style x:Key=\"AccountsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AccountsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Accounts\"/>\n        <Setter Property=\"Content\" Value=\"&#xE168;\"/>\n    </Style>\n    <Style x:Key=\"ShowBccAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShowBccAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Show Bcc\"/>\n        <Setter Property=\"Content\" Value=\"&#xE169;\"/>\n    </Style>\n    <Style x:Key=\"HideBccAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HideBccAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Hide Bcc\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16A;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"CutAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Cut\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16B;\"/>\n    </Style>\n    <Style x:Key=\"AttachAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AttachAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Attach\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16C;\"/>\n    </Style>\n    <Style x:Key=\"PasteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PasteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Paste\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16D;\"/>\n    </Style>\n    <Style x:Key=\"FilterAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FilterAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Filter\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16E;\"/>\n    </Style>\n    <Style x:Key=\"CopyAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CopyAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Copy\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16F;\"/>\n    </Style>\n    <Style x:Key=\"Emoji2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Emoji2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Emoji2\"/>\n        <Setter Property=\"Content\" Value=\"&#xE170;\"/>\n    </Style>\n    <Style x:Key=\"ImportantAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ImportantAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Important\"/>\n        <Setter Property=\"Content\" Value=\"&#xE171;\"/>\n    </Style>\n    <Style x:Key=\"MailReplyAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailReplyAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Reply\"/>\n        <Setter Property=\"Content\" Value=\"&#xE172;\"/>\n    </Style>\n    <Style x:Key=\"SlideShowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SlideShowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Slideshow\"/>\n        <Setter Property=\"Content\" Value=\"&#xE173;\"/>\n    </Style>\n    <Style x:Key=\"SortAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SortAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Sort\"/>\n        <Setter Property=\"Content\" Value=\"&#xE174;\"/>\n    </Style>\n    <Style x:Key=\"ManageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ManageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Manage\"/>\n        <Setter Property=\"Content\" Value=\"&#xE178;\"/>\n    </Style>\n    <Style x:Key=\"AllAppsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AllAppsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"All Apps\"/>\n        <Setter Property=\"Content\" Value=\"&#xE179;\"/>\n    </Style>\n    <Style x:Key=\"DisconnectDriveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DisconnectDriveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Disconnect Drive\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17A;\"/>\n    </Style>\n    <Style x:Key=\"MapDriveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MapDriveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Map Drive\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17B;\"/>\n    </Style>\n    <Style x:Key=\"NewWindowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NewWindowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"New Window\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17C;\"/>\n    </Style>\n    <Style x:Key=\"OpenWithAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenWithAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open With\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17D;\"/>\n    </Style>\n    <Style x:Key=\"ContactPresenceAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ContactPresenceAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Presence\"/>\n        <Setter Property=\"Content\" Value=\"&#xE181;\"/>\n    </Style>\n    <Style x:Key=\"PriorityAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PriorityAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Priority\"/>\n        <Setter Property=\"Content\" Value=\"&#xE182;\"/>\n    </Style>\n    <Style x:Key=\"UploadSkyDriveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UploadSkyDriveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skydrive\"/>\n        <Setter Property=\"Content\" Value=\"&#xE183;\"/>\n    </Style>\n    <Style x:Key=\"GoToTodayAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GoToTodayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Today\"/>\n        <Setter Property=\"Content\" Value=\"&#xE184;\"/>\n    </Style>\n    <Style x:Key=\"FontAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Font\"/>\n        <Setter Property=\"Content\" Value=\"&#xE185;\"/>\n    </Style>\n\n    -->\n\n    <!--\n\n    <Style x:Key=\"FontColorAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontColorAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Font Color\"/>\n        <Setter Property=\"Content\" Value=\"&#xE186;\"/>\n    </Style>\n    <Style x:Key=\"Contact2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Contact2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Contact\"/>\n        <Setter Property=\"Content\" Value=\"&#xE187;\"/>\n    </Style>\n    <Style x:Key=\"FolderppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE188;\"/>\n    </Style>\n    <Style x:Key=\"AudioAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AudioAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Audio\"/>\n        <Setter Property=\"Content\" Value=\"&#xE189;\"/>\n    </Style>\n    <Style x:Key=\"PlaceholderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PlaceholderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Placeholder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18A;\"/>\n    </Style>\n    <Style x:Key=\"ViewAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ViewAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"View\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18B;\"/>\n    </Style>\n    <Style x:Key=\"SetLockScreenAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SetLockscreenAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Set Lockscreen\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18C;\"/>\n    </Style>\n    <Style x:Key=\"SetTitleAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SetTitleAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Set Title\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18D;\"/>\n    </Style>\n    <Style x:Key=\"CcAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CcAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Cc\"/>\n        <Setter Property=\"Content\" Value=\"&#xE190;\"/>\n    </Style>\n    <Style x:Key=\"StopSlideShowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"StopSlideshowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Stop Slideshow\"/>\n        <Setter Property=\"Content\" Value=\"&#xE191;\"/>\n    </Style>\n    <Style x:Key=\"PermissionsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PermissionsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Permisions\"/>\n        <Setter Property=\"Content\" Value=\"&#xE192;\"/>\n    </Style>\n    <Style x:Key=\"HighlightAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HighlightAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Highlight\"/>\n        <Setter Property=\"Content\" Value=\"&#xE193;\"/>\n    </Style>\n    <Style x:Key=\"DisableUpdatesAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DisableUpdatesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Disable Updates\"/>\n        <Setter Property=\"Content\" Value=\"&#xE194;\"/>\n    </Style>\n    <Style x:Key=\"UnfavoriteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnfavoriteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unfavorite\"/>\n        <Setter Property=\"Content\" Value=\"&#xE195;\"/>\n    </Style>\n    <Style x:Key=\"UnPinAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnPinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unpin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE196;\"/>\n    </Style>\n    <Style x:Key=\"OpenLocalAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenLocalAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open Loal\"/>\n        <Setter Property=\"Content\" Value=\"&#xE197;\"/>\n    </Style>\n    <Style x:Key=\"MuteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MuteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mute\"/>\n        <Setter Property=\"Content\" Value=\"&#xE198;\"/>\n    </Style>\n    <Style x:Key=\"ItalicAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ItalicAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Italic\"/>\n        <Setter Property=\"Content\" Value=\"&#xE199;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"UnderlineAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnderlineAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Underline\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19A;\"/>\n    </Style>\n    <Style x:Key=\"BoldAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BoldAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Bold\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19B;\"/>\n    </Style>\n    <Style x:Key=\"MoveToFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MoveToFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Move to Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19C;\"/>\n    </Style>\n    <Style x:Key=\"LikeDislikeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LikeDislikeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Like/Dislike\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19D;\"/>\n    </Style>\n    <Style x:Key=\"DislikeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DislikeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dislike\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19E;\"/>\n    </Style>\n    <Style x:Key=\"LikeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LikeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Like\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19F;\"/>\n    </Style>\n    <Style x:Key=\"AlignRightAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AlignRightAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Align Right\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A0;\"/>\n    </Style>\n    <Style x:Key=\"AlignCenterAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AlignCenterAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Align Center\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A1;\"/>\n    </Style>\n    <Style x:Key=\"AlignLeftAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AlignLeftAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Align Left\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A2;\"/>\n    </Style>\n    <Style x:Key=\"ZoomAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZoomAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zoom\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A3;\"/>\n    </Style>\n    <Style x:Key=\"ZoomOutAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZoomOutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zoom Out\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A4;\"/>\n    </Style>\n    <Style x:Key=\"OpenFileAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenFileAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open File\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A5;\"/>\n    </Style>\n    <Style x:Key=\"OtherUserAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OtherUserAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Other User\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A6;\"/>\n    </Style>\n    <Style x:Key=\"AdminAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AdminAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Admin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A7;\"/>\n    </Style>\n    <Style x:Key=\"StreetAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"StreetAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Street\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C3;\"/>\n    </Style>\n    <Style x:Key=\"MapAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MapAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Map\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C4;\"/>\n    </Style>\n    <Style x:Key=\"ClearSelectionAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ClearSelectionAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Clear Selection\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C5;\"/>\n    </Style>\n    <Style x:Key=\"FontDecreaseAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontDecreaseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Decrease Font\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C6;\"/>\n    </Style>\n    <Style x:Key=\"FontIncreaseAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontIncreaseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Increase Font\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C7;\"/>\n    </Style>\n    <Style x:Key=\"FontSizeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontSizeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Font Size\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C8;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"CellphoneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CellphoneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Cellphone\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C9;\"/>\n    </Style>\n    <Style x:Key=\"ReshareAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ReshareAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Reshare\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CA;\"/>\n    </Style>\n    <Style x:Key=\"TagAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TagAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Tag\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CB;\"/>\n    </Style>\n    <Style x:Key=\"RepeatOneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RepeatOneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Repeat Once\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CC;\"/>\n    </Style>\n    <Style x:Key=\"RepeatAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RepeatAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Repeat All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CD;\"/>\n    </Style>\n    <Style x:Key=\"OutlineStarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OutlineStarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Outline Star\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CE;\"/>\n    </Style>\n    <Style x:Key=\"SolidStarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SolidStarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Solid Star\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CF;\"/>\n    </Style>\n    <Style x:Key=\"CalculatorAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalculatorAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Calculator\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D0;\"/>\n    </Style>\n    <Style x:Key=\"DirectionsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DirectionsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Directions\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D1;\"/>\n    </Style>\n    <Style x:Key=\"TargetAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TargetAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Target\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D2;\"/>\n    </Style>\n    <Style x:Key=\"LibraryAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LibraryAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Library\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D3;\"/>\n    </Style>\n    <Style x:Key=\"PhonebookAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhonebookAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Phonebook\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D4;\"/>\n    </Style>\n    <Style x:Key=\"MemoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MemoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Memo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D5;\"/>\n    </Style>\n    <Style x:Key=\"MicrophoneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MicrophoneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Microphone\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D6;\"/>\n    </Style>\n    <Style x:Key=\"PostUpdateAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PostUpdateAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Post Update\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D7;\"/>\n    </Style>\n    <Style x:Key=\"BackToWindowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackToWindowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back to Window\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D8;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"FullScreenAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FullScreenAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Full Screen\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D9;\"/>\n    </Style>\n    <Style x:Key=\"NewFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NewFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"New Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DA;\"/>\n    </Style>\n    <Style x:Key=\"CalendarReplyAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarReplyAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Calendar Reply\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DB;\"/>\n    </Style>\n    <Style x:Key=\"UnsyncFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnsyncFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unsync Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DD;\"/>\n    </Style>\n    <Style x:Key=\"ReportHackedAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ReportHackedAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Report Hacked\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DE;\"/>\n    </Style>\n    <Style x:Key=\"SyncFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SyncFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Sync Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DF;\"/>\n    </Style>\n    <Style x:Key=\"BlockContactAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Block ContactAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"BlockContact\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E0;\"/>\n    </Style>\n    <Style x:Key=\"SwitchAppsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SwitchAppsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Switch Apps\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E1;\"/>\n    </Style>\n    <Style x:Key=\"AddFriendAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AddFriendAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Add Friend\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E2;\"/>\n    </Style>\n    <Style x:Key=\"TouchPointerAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TouchPointerAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Touch Pointer\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E3;\"/>\n    </Style>\n    <Style x:Key=\"GoToStartAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GoToStartAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Go to Start\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E4;\"/>\n    </Style>\n    <Style x:Key=\"ZeroBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZeroBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zero Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E5;\"/>\n    </Style>\n    <Style x:Key=\"OneBarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OneBarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"One Bar\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E6;\"/>\n    </Style>\n    <Style x:Key=\"TwoBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TwoBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Two Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E7;\"/>\n    </Style>\n    <Style x:Key=\"ThreeBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ThreeBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Three Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E8;\"/>\n    </Style>\n    <Style x:Key=\"FourBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FourBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Four Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E9;\"/>\n    </Style>\n\n    -->\n\n    <!-- Title area styles -->\n\n    <Style x:Key=\"PageHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,30,40\"/>\n    </Style>\n\n    <Style x:Key=\"PageSubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,0,40\"/>\n    </Style>\n\n    <Style x:Key=\"SnappedPageHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource PageSubheaderTextStyle}\">\n        <Setter Property=\"Margin\" Value=\"0,0,18,40\"/>\n    </Style>\n\n    <!--\n        BackButtonStyle is used to style a Button for use in the title area of a page.  Margins appropriate for\n        the conventional page layout are included as part of the style.\n    -->\n    <Style x:Key=\"BackButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"Width\" Value=\"48\"/>\n        <Setter Property=\"Height\" Value=\"48\"/>\n        <Setter Property=\"Margin\" Value=\"36,0,36,36\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"Navigation Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\">\n                        <Grid Margin=\"-1,-16,0,0\">\n                            <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0A8;\" Foreground=\"{StaticResource BackButtonBackgroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"NormalGlyph\" Text=\"{StaticResource BackButtonGlyph}\" Foreground=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"ArrowGlyph\" Text=\"&#xE0A6;\" Foreground=\"{StaticResource BackButtonPressedForegroundThemeBrush}\" Opacity=\"0\"/>\n                        </Grid>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"NormalGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"ArrowGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"NormalGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"0\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualWhite\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualBlack\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--\n        PortraitBackButtonStyle is used to style a Button for use in the title area of a portrait page.  Margins appropriate\n        for the conventional page layout are included as part of the style.\n    -->\n    <Style x:Key=\"PortraitBackButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource BackButtonStyle}\">\n        <Setter Property=\"Margin\" Value=\"26,0,26,36\"/>\n    </Style>\n\n    <!--\n        SnappedBackButtonStyle is used to style a Button for use in the title area of a snapped page.  Margins appropriate\n        for the conventional page layout are included as part of the style.\n        \n        The obvious duplication here is necessary as the glyphs used in snapped are not merely smaller versions of the same\n        glyph but are actually distinct.\n    -->\n    <Style x:Key=\"SnappedBackButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"Margin\" Value=\"20,0,0,0\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"26.66667\"/>\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"Navigation Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\" Width=\"36\" Height=\"36\" Margin=\"-3,0,7,33\">\n                        <Grid Margin=\"-1,-1,0,0\">\n                            <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0D4;\" Foreground=\"{StaticResource BackButtonBackgroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"NormalGlyph\" Text=\"{StaticResource BackButtonSnappedGlyph}\" Foreground=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"ArrowGlyph\" Text=\"&#xE0C4;\" Foreground=\"{StaticResource BackButtonPressedForegroundThemeBrush}\" Opacity=\"0\"/>\n                        </Grid>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"NormalGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"ArrowGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"NormalGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"0\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualWhite\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualBlack\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- Item templates -->\n\n    <!-- Grid-appropriate 250 pixel square item template as seen in the GroupedItemsPage and ItemsPage -->\n    <DataTemplate x:Key=\"Standard250x250ItemTemplate\">\n        <Grid HorizontalAlignment=\"Left\" Width=\"250\" Height=\"250\">\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n            </Border>\n            <StackPanel VerticalAlignment=\"Bottom\" Background=\"{StaticResource ListViewItemOverlayBackgroundThemeBrush}\">\n                <TextBlock Text=\"{Binding Title}\" Foreground=\"{StaticResource ListViewItemOverlayForegroundThemeBrush}\" Style=\"{StaticResource TitleTextStyle}\" Height=\"60\" Margin=\"15,0,15,0\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Foreground=\"{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\" Margin=\"15,0,15,10\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- Grid-appropriate 500 by 130 pixel item template as seen in the GroupDetailPage -->\n    <DataTemplate x:Key=\"Standard500x130ItemTemplate\">\n        <Grid Height=\"110\" Width=\"480\" Margin=\"10\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" MaxHeight=\"60\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- List-appropriate 130 pixel high item template as seen in the SplitPage -->\n    <DataTemplate x:Key=\"Standard130ItemTemplate\">\n        <Grid Height=\"110\" Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" MaxHeight=\"60\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!--\n        List-appropriate 80 pixel high item template as seen in the SplitPage when Filled, and\n        the following pages when snapped: GroupedItemsPage, GroupDetailPage, and ItemsPage\n    -->\n    <DataTemplate x:Key=\"Standard80ItemTemplate\">\n        <Grid Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"60\" Height=\"60\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource ItemTextStyle}\" MaxHeight=\"40\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- Grid-appropriate 300 by 70 pixel item template as seen in the SearchResultsPage -->\n    <DataTemplate x:Key=\"StandardSmallIcon300x70ItemTemplate\">\n        <Grid Width=\"294\" Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"0,0,0,10\" Width=\"40\" Height=\"40\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,-10,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource BodyTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- List-appropriate 70 pixel high item template as seen in the SearchResultsPage when Snapped -->\n    <DataTemplate x:Key=\"StandardSmallIcon70ItemTemplate\">\n        <Grid Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"0,0,0,10\" Width=\"40\" Height=\"40\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,-10,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource BodyTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!--\n      190x130 pixel item template for displaying file previews as seen in the FileOpenPickerPage\n      Includes an elaborate tooltip to display title and description text\n  -->\n    <DataTemplate x:Key=\"StandardFileWithTooltip190x130ItemTemplate\">\n        <Grid>\n            <Grid Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                <Image\n                    Source=\"{Binding Image}\"\n                    Width=\"190\"\n                    Height=\"130\"\n                    HorizontalAlignment=\"Center\"\n                    VerticalAlignment=\"Center\"\n                    Stretch=\"Uniform\"/>\n            </Grid>\n            <ToolTipService.Placement>Mouse</ToolTipService.Placement>\n            <ToolTipService.ToolTip>\n                <ToolTip>\n                    <ToolTip.Style>\n                        <Style TargetType=\"ToolTip\">\n                            <Setter Property=\"BorderBrush\" Value=\"{StaticResource ToolTipBackgroundThemeBrush}\" />\n                            <Setter Property=\"Padding\" Value=\"0\" />\n                        </Style>\n                    </ToolTip.Style>\n\n                    <Grid Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Grid Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"20\">\n                            <Image\n                                Source=\"{Binding Image}\"\n                                Width=\"160\"\n                                Height=\"160\"\n                                HorizontalAlignment=\"Center\"\n                                VerticalAlignment=\"Center\"\n                                Stretch=\"Uniform\"/>\n                        </Grid>\n                        <StackPanel Width=\"200\" Grid.Column=\"1\" Margin=\"0,20,20,20\">\n                            <TextBlock Text=\"{Binding Title}\" TextWrapping=\"NoWrap\" Style=\"{StaticResource BodyTextStyle}\"/>\n                            <TextBlock Text=\"{Binding Description}\" MaxHeight=\"140\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" Style=\"{StaticResource BodyTextStyle}\"/>\n                        </StackPanel>\n                    </Grid>\n                </ToolTip>\n            </ToolTipService.ToolTip>\n        </Grid>\n    </DataTemplate>\n\n    <!-- ScrollViewer styles -->\n\n    <Style x:Key=\"HorizontalScrollViewerStyle\" TargetType=\"ScrollViewer\">\n        <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Disabled\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Enabled\" />\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Disabled\" />\n        <Setter Property=\"ScrollViewer.ZoomMode\" Value=\"Disabled\" />\n    </Style>\n\n    <Style x:Key=\"VerticalScrollViewerStyle\" TargetType=\"ScrollViewer\">\n        <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Disabled\"/>\n        <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Disabled\" />\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Enabled\" />\n        <Setter Property=\"ScrollViewer.ZoomMode\" Value=\"Disabled\" />\n    </Style>\n\n    <!-- Page layout roots typically use entrance animations and a theme-appropriate background color -->\n\n    <Style x:Key=\"LayoutRootStyle\" TargetType=\"Panel\">\n        <Setter Property=\"Background\" Value=\"{StaticResource ApplicationPageBackgroundThemeBrush}\"/>\n        <Setter Property=\"ChildrenTransitions\">\n            <Setter.Value>\n                <TransitionCollection>\n                    <EntranceThemeTransition/>\n                </TransitionCollection>\n            </Setter.Value>\n        </Setter>\n    </Style>\n</ResourceDictionary>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/Microsoft.WindowsAzure.Mobile.SQLiteStore.Win8.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.props\" Condition=\"Exists('..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.SQLiteStore.Win8.Test</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <DefineConstants>$(DefineConstants);TRACE;NETFX_CORE</DefineConstants>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <PackageCertificateKeyFile>Microsoft.WindowsAzure.Mobile.SQLiteStore.Win8.Test_TemporaryKey.pfx</PackageCertificateKeyFile>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <PackageCertificateThumbprint>2FCC506A2DC4282F55D9EEE504107696B661355D</PackageCertificateThumbprint>\n    <NuGetPackageImportStamp>ad09126e</NuGetPackageImportStamp>\n    <NuGetPackageImportStamp>701185cc</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>$(DefineConstants);DEBUG</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <RunCodeAnalysis>false</RunCodeAnalysis>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>$(DefineConstants);DEBUG</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>$(DefineConstants);DEBUG</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>TRACE;DEBUG;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.SQLiteStore\\Microsoft.WindowsAzure.Mobile.SQLiteStore.csproj\">\n      <Project>{4c20d49a-fe5e-4d9c-98b9-8125450074f5}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.SQLiteStore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Microsoft.WindowsAzure.Mobile.Ext.Win8.csproj\">\n      <Project>{41e0bbea-091b-4c06-ae08-b7f50e2beb8a}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.Win8</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\\Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.csproj\">\n      <Project>{cd5d8a3a-5631-41bf-8161-8a2a7f892b71}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.SQLiteStore.Test</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{a2500bd2-a9a2-4085-9978-dee3675b02dd}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{d8bbc92a-b213-463b-911d-3a106f91d5f9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"UI\\GroupDescription.cs\" />\n    <Compile Include=\"UI\\MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"UI\\TestDescription.cs\" />\n    <Compile Include=\"UI\\TestPage.xaml.cs\">\n      <DependentUpon>TestPage.xaml</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n    <None Include=\"UI\\Microsoft.WindowsAzure.Mobile.Win8.Test_TemporaryKey.pfx\" />\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"Common\\StandardStyles.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"UI\\MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"UI\\TestPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Assets\\Logo.png\" />\n    <Content Include=\"Assets\\SmallLogo.png\" />\n    <Content Include=\"Assets\\SplashScreen.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\netcore45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SQLitePCL\">\n      <HintPath>..\\..\\packages\\SQLitePCL.3.8.7.2\\lib\\netcore45\\SQLitePCL.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\win8\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\win8\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <SDKReference Include=\"Microsoft.VCLibs, version=11.0\">\n      <Name>Microsoft Visual C++ Runtime Package</Name>\n    </SDKReference>\n    <SDKReference Include=\"SQLite.WinRT, version=3.8.7.2\">\n      <Name>SQLite for Windows Runtime</Name>\n    </SDKReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"UnitTests\\\" />\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '11.0' \">\n    <VisualStudioVersion>11.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.props'))\" />\n    <Error Condition=\"!Exists('..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.targets'))\" />\n  </Target>\n  <Import Project=\"..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.targets\" Condition=\"Exists('..\\..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/Mocks/MobileServiceTableQueryMock.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class MobileServiceTableQueryMock<T> : IMobileServiceTableQuery<T>\n    {\n        public bool EnumerableAsyncThrowsException { get; set; }\n        \n        public IMobileServiceTableQuery<T> IncludeTotalCount()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> OrderBy<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> OrderByDescending<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<U> Select<U>(Expression<Func<T, U>> selector)\n        {\n            throw new NotImplementedException();\n        }\n\n        private int skip;\n\n        public IMobileServiceTableQuery<T> Skip(int count)\n        {\n            skip += count;\n            return this;\n        }\n\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Design\", \"CA1065:DoNotRaiseExceptionsInUnexpectedLocations\")]\n        public IMobileServiceTable<T> Table\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        private int take;\n\n        public IMobileServiceTableQuery<T> Take(int count)\n        {\n            take = count;\n            return this;\n        }\n\n        public IMobileServiceTableQuery<T> ThenBy<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> ThenByDescending<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<IEnumerable<T>> ToEnumerableAsync()\n        {\n            if (EnumerableAsyncThrowsException)\n            {\n                throw new Exception();\n            }\n            return TaskEx.Run(() => TaskEx.Delay(500).ContinueWith(t => (IEnumerable<T>)new TotalCountEnumerable<T>(2, new T[] { Activator.CreateInstance<T>(), Activator.CreateInstance<T>() })));\n        }\n\n        public Task<List<T>> ToListAsync()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> Where(Expression<Func<T, bool>> predicate)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> WithParameters(IDictionary<string, string> parameters)\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool RequestTotalCount\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public IDictionary<string, string> Parameters\n        {\n            get { throw new NotImplementedException(); }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\">\n  <Identity Name=\"44263a2d-8087-40af-8163-307a43f420ba\" Publisher=\"CN=randallt\" Version=\"1.0.0.0\" />\n  <Properties>\n    <DisplayName>Microsoft.WindowsAzure.MobileServices.WindowsStore.Test</DisplayName>\n    <PublisherDisplayName>randallt</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n  <Prerequisites>\n    <OSMinVersion>6.2.1</OSMinVersion>\n    <OSMaxVersionTested>6.2.1</OSMaxVersionTested>\n  </Prerequisites>\n  <Resources>\n    <Resource Language=\"x-generate\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"App\" Executable=\"$targetnametoken$.exe\" EntryPoint=\"Microsoft.WindowsAzure.MobileServices.WindowsStore.Test.App\">\n      <VisualElements DisplayName=\"Windows Azure Mobile Services Test App\" Logo=\"Assets\\Logo.png\" SmallLogo=\"Assets\\SmallLogo.png\" Description=\"Windows Azure Mobile Services Test App\" ForegroundText=\"light\" BackgroundColor=\"#464646\">\n        <DefaultTile ShowName=\"allLogos\" />\n        <SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </VisualElements>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/UI/GroupDescription.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    /// <summary>\n    /// UI model for a test group.\n    /// </summary>\n    public class GroupDescription : ObservableCollection<TestDescription>\n    {\n        private string _name;\n\n        public string Name\n        {\n            get { return _name; }\n            set\n            {\n                _name = value;\n            }\n        }\n\n        public GroupDescription()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/UI/MainPage.xaml",
    "content": "﻿<Page\n  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n  xmlns:local=\"using:Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\"\n  x:Class=\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.MainPage\"\n  IsTabStop=\"false\">\n    <Page.Resources>\n        <Style x:Key=\"SubheaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n            <Setter Property=\"FontSize\" Value=\"18\" />\n            <Setter Property=\"FontWeight\" Value=\"Bold\" />\n            <Setter Property=\"LineHeight\" Value=\"20\" />\n        </Style>\n        <Style x:Key=\"HeaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n            <Setter Property=\"Foreground\" Value=\"#0094ff\" />\n        </Style>\n        <Style x:Key=\"DialogStyle\" TargetType=\"Border\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"BorderBrush\" Value=\"White\" />\n            <Setter Property=\"BorderThickness\" Value=\"2\" />\n            <Setter Property=\"Padding\" Value=\"10\" />\n            <Setter Property=\"CornerRadius\" Value=\"2\" />\n        </Style>\n        <Style x:Key=\"LabelStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Right\" />\n        </Style>\n        <Style x:Key=\"InputStyle\" TargetType=\"TextBox\">\n            <Setter Property=\"MinWidth\" Value=\"400\" />\n            <Setter Property=\"Margin\" Value=\"5\" />\n        </Style>\n    </Page.Resources>\n    <Border Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid Margin=\"20\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n            </Grid.RowDefinitions>\n            <TextBlock Grid.Row=\"0\" Style=\"{StaticResource SubheaderStyle}\">Windows Azure Mobile Services</TextBlock>\n            <TextBlock Grid.Row=\"1\"  Style=\"{StaticResource HeaderStyle}\">SQLiteStore Tests</TextBlock>\n            <Border Grid.Row=\"2\" Style=\"{StaticResource DialogStyle}\">\n                <Grid>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\" />\n                        <ColumnDefinition Width=\"Auto\" />\n                    </Grid.ColumnDefinitions>\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                    </Grid.RowDefinitions>\n                    \n                    <TextBlock\n                      Grid.Row=\"0\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource LabelStyle}\"\n                      Text=\"Tags:\" />\n                    <TextBox\n                      x:Name=\"txtTags\"\n                      Grid.Row=\"0\"\n                      Grid.Column=\"1\"\n                      Style=\"{StaticResource InputStyle}\" />\n\n                    <StackPanel\n                        Grid.Row=\"1\"\n                        Grid.Column=\"1\"\n                        HorizontalAlignment=\"Right\" Orientation=\"Horizontal\">\n\n                        <Button\n                          x:Name=\"btnUnitTests\"\n                          Content=\"Unit Tests\"\n                          MinWidth=\"100\"\n                          Click=\"ExecuteUnitTests\" />\n                    </StackPanel>\n                </Grid>\n            </Border>\n        </Grid>\n    </Border>\n</Page>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/UI/MainPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Windows.Storage;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    /// <summary>\n    /// Test setup UI page.\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        /// <summary>\n        /// Initializes a new instance of the MainPage class.\n        /// </summary>\n        public MainPage()\n        {\n            InitializeComponent();\n\n            string mobileServiceRuntimeURL = ApplicationData.Current.LocalSettings.Values[\"MobileServiceRuntimeUrl\"] as string;\n            string mobileServiceRuntimeKey = ApplicationData.Current.LocalSettings.Values[\"MobileServiceRuntimeKey\"] as string;\n            string tags = ApplicationData.Current.LocalSettings.Values[\"MobileServiceTags\"] as string;\n\n            txtTags.Text = tags ?? \"\";\n\n            Loaded += (s, e) => btnUnitTests.Focus(FocusState.Keyboard);\n        }\n\n        /// <summary>\n        /// Start the unit test run.\n        /// </summary>\n        /// <param name=\"sender\">Start button.</param>\n        /// <param name=\"e\">Event arguments.</param>\n        private void ExecuteUnitTests(object sender, RoutedEventArgs e)\n        {\n            // Get the test settings from the UI\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeUrl\"] = String.Empty;\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeKey\"] = String.Empty;\n            App.Harness.Settings.TagExpression = txtTags.Text;\n\n            ApplicationData.Current.LocalSettings.Values[\"MobileServiceTags\"] = txtTags.Text;\n\n            Frame.Navigate(typeof(TestPage));\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/UI/TestDescription.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\n\n#if NETFX_CORE\nusing Windows.UI;\nusing Windows.UI.Xaml.Media;\n#endif\n\n#if !NETFX_CORE\nusing System.Windows.Media;\n#endif\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    /// <summary>\n    /// UI model for a test method.\n    /// </summary>\n    public class TestDescription : INotifyPropertyChanged\n    {\n        private string _name;\n        \n        public string Name\n        {\n            get { return _name; }\n            set\n            {\n                _name = value;\n                OnPropertyChanged();\n            }\n        }\n\n        private Color _color;\n\n        public Color Color\n        {\n            get { return _color; }\n            set\n            {\n                _color = value;\n                OnPropertyChanged();\n                OnPropertyChanged(\"Brush\");\n            }\n        }\n\n        public SolidColorBrush Brush\n        {\n            get { return new SolidColorBrush(Color); }\n        }\n\n        public ObservableCollection<string> Details { get; private set; }\n\n        public TestDescription()\n        {\n            Details = new ObservableCollection<string>();\n            Color = Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF);\n        }\n\n        public event PropertyChangedEventHandler PropertyChanged;\n\n        protected void OnPropertyChanged([CallerMemberName] string memberName = \"\")\n        {\n            PropertyChangedEventHandler handler = PropertyChanged;\n            if (handler != null)\n            {\n                handler(this, new PropertyChangedEventArgs(memberName));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/UI/TestPage.xaml",
    "content": "﻿<Page\n  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n  xmlns:local=\"using:Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\"    \n  x:Class=\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.TestPage\"\n  IsTabStop=\"false\">\n    <Page.Resources>\n        <Style x:Key=\"SubheaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n            <Setter Property=\"FontSize\" Value=\"18\" />\n            <Setter Property=\"FontWeight\" Value=\"Bold\" />\n            <Setter Property=\"LineHeight\" Value=\"20\" />\n        </Style>\n        <Style x:Key=\"HeaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n            <Setter Property=\"Foreground\" Value=\"#0094ff\" />\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n        </Style>\n        <Style x:Key=\"TestStyle\" TargetType=\"ListView\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"ItemContainerTransitions\" Value=\"{x:Null}\" />                \n        </Style>\n        <Style x:Key=\"StatusStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Top\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n        </Style>\n        <Style x:Key=\"ProgressStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">                    \n            <Setter Property=\"Foreground\" Value=\"#ffd800\" />\n        </Style>\n        <CollectionViewSource x:Name=\"cvsTests\" IsSourceGrouped=\"true\" />\n    </Page.Resources>\n    <Border Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid Margin=\"20\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n            </Grid.RowDefinitions>\n            <TextBlock Grid.Row=\"0\" Style=\"{StaticResource SubheaderStyle}\">Windows Azure Mobile Services</TextBlock>\n            <TextBlock Grid.Row=\"1\"  Style=\"{StaticResource HeaderStyle}\">C# Client Library Tests</TextBlock>\n            <TextBlock x:Name=\"lblStatus\" Grid.Row=\"2\" Style=\"{StaticResource StatusStyle}\">Unit Test Run</TextBlock>\n            <ListView\n              x:Name=\"lstTests\"\n              Grid.Row=\"3\"\n              Style=\"{StaticResource TestStyle}\"\n              ItemsSource=\"{Binding Source={StaticResource cvsTests}}\"\n              SelectionMode=\"None\">\n                <ListView.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Margin=\"8 0\">\n                            <TextBlock Text=\"{Binding Name}\" Foreground=\"{Binding Brush}\" FontSize=\"16\" FontWeight=\"ExtraLight\" />\n                            <ItemsControl ItemsSource=\"{Binding Details}\" Margin=\"15 0 0 0\" FontSize=\"12\" Foreground=\"LightGray\" />\n                        </StackPanel>                        \n                    </DataTemplate>\n                </ListView.ItemTemplate>\n                <ListView.GroupStyle>\n                    <GroupStyle HidesIfEmpty=\"True\">\n                        <GroupStyle.HeaderTemplate>\n                            <DataTemplate>\n                                <Border BorderThickness=\"0 0 0 1\" BorderBrush=\"#666666\" Margin=\"0 15 0 0\" HorizontalAlignment=\"Stretch\">\n                                    <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Stretch\">\n                                        <TextBlock Text=\"{Binding Name}\" FontSize=\"24\" FontWeight=\"ExtraLight\" />\n                                        <TextBlock Text=\" tests\" FontSize=\"24\" FontWeight=\"ExtraLight\" />                                    \n                                    </StackPanel>\n                                </Border>\n                            </DataTemplate>\n                        </GroupStyle.HeaderTemplate>\n                        <GroupStyle.Panel>\n                            <ItemsPanelTemplate>\n                                <StackPanel Orientation=\"Vertical\" />\n                            </ItemsPanelTemplate>\n                        </GroupStyle.Panel>\n                        <GroupStyle.ContainerStyle>\n                            <Style TargetType=\"GroupItem\">\n                                <Setter Property=\"IsTabStop\" Value=\"False\" />\n                                <Setter Property=\"Template\">\n                                    <Setter.Value>\n                                        <ControlTemplate TargetType=\"GroupItem\">\n                                            <Border\n                                              Background=\"{TemplateBinding Background}\"\n                                              BorderBrush=\"{TemplateBinding BorderBrush}\"\n                                              BorderThickness=\"{TemplateBinding BorderThickness}\"\n                                              HorizontalAlignment=\"Stretch\">\n                                                <Grid HorizontalAlignment=\"Stretch\">\n                                                    <Grid.RowDefinitions>\n                                                        <RowDefinition Height=\"Auto\" />\n                                                        <RowDefinition Height=\"*\" />\n                                                    </Grid.RowDefinitions>\n                                                    <ContentControl x:Name=\"HeaderContent\"\n                                                        Content=\"{TemplateBinding Content}\"\n                                                        ContentTransitions=\"{TemplateBinding ContentTransitions}\"\n                                                        ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                                        Margin=\"{TemplateBinding Padding}\"\n                                                        HorizontalAlignment=\"Stretch\"\n                                                        HorizontalContentAlignment=\"Stretch\"\n                                                        TabIndex=\"0\"\n                                                        IsTabStop=\"False\" />\n                                                    <ItemsControl x:Name=\"ItemsControl\"\n                                                      Grid.Row=\"1\"\n                                                      ItemsSource=\"{Binding GroupItems}\"\n                                                      IsTabStop=\"False\"\n                                                      TabNavigation=\"Once\"\n                                                      TabIndex=\"1\" />\n                                                </Grid>\n                                            </Border>\n                                        </ControlTemplate>\n                                    </Setter.Value>\n                                </Setter>\n                            </Style>\n                        </GroupStyle.ContainerStyle>\n                    </GroupStyle>\n                </ListView.GroupStyle>\n                <ListView.Template>\n                    <ControlTemplate TargetType=\"ListView\">\n                        <Border BorderBrush=\"{TemplateBinding BorderBrush}\"\n                            Background=\"{TemplateBinding Background}\"\n                            BorderThickness=\"{TemplateBinding BorderThickness}\"\n                            HorizontalAlignment=\"Stretch\"\n                            VerticalAlignment=\"Stretch\">\n                            <ScrollViewer x:Name=\"ScrollViewer\"\n                                      TabNavigation=\"{TemplateBinding TabNavigation}\"\n                                      HorizontalScrollMode=\"{TemplateBinding ScrollViewer.HorizontalScrollMode}\"\n                                      HorizontalScrollBarVisibility=\"{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}\"\n                                      IsHorizontalScrollChainingEnabled=\"{TemplateBinding ScrollViewer.IsHorizontalScrollChainingEnabled}\"\n                                      VerticalScrollMode=\"{TemplateBinding ScrollViewer.VerticalScrollMode}\"\n                                      VerticalScrollBarVisibility=\"{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}\"\n                                      IsVerticalScrollChainingEnabled=\"{TemplateBinding ScrollViewer.IsVerticalScrollChainingEnabled}\"\n                                      IsHorizontalRailEnabled=\"{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}\"\n                                      IsVerticalRailEnabled=\"{TemplateBinding ScrollViewer.IsVerticalRailEnabled}\"\n                                      ZoomMode=\"{TemplateBinding ScrollViewer.ZoomMode}\"\n                                      HorizontalAlignment=\"Stretch\"\n                                      VerticalAlignment=\"Stretch\">\n                                <ItemsPresenter\n                                    Header=\"{TemplateBinding Header}\" \n                                    HeaderTemplate=\"{TemplateBinding HeaderTemplate}\"\n                                    HeaderTransitions=\"{TemplateBinding HeaderTransitions}\"\n                                    Padding=\"{TemplateBinding Padding}\"/>\n                            </ScrollViewer>\n                        </Border>\n                    </ControlTemplate>\n                </ListView.Template>\n                <ListView.ItemContainerStyle>\n                    <Style TargetType=\"ListViewItem\">\n                        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\" />\n                        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\" />\n                        <Setter Property=\"Background\" Value=\"Transparent\"/>\n                        <Setter Property=\"TabNavigation\" Value=\"Local\"/>\n                        <Setter Property=\"IsHoldingEnabled\" Value=\"True\"/>\n                        <Setter Property=\"Margin\" Value=\"0,0,18,0\"/>\n                        <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\n                        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n                        <Setter Property=\"Template\">\n                            <Setter.Value>\n                                <ControlTemplate TargetType=\"ListViewItem\">\n                                    <Border x:Name=\"OuterContainer\">\n                                        <VisualStateManager.VisualStateGroups>\n                                            <VisualStateGroup x:Name=\"CommonStates\">\n                                                <VisualState x:Name=\"Normal\"/>\n                                                <VisualState x:Name=\"PointerOver\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"PointerOverBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SelectionBackground\"\n                                                                        Storyboard.TargetProperty=\"Fill\">\n                                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ListViewItemSelectedPointerOverBackgroundThemeBrush}\" />\n                                                        </ObjectAnimationUsingKeyFrames>\n                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SelectedBorder\"\n                                                                        Storyboard.TargetProperty=\"Stroke\">\n                                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ListViewItemSelectedPointerOverBorderThemeBrush}\" />\n                                                        </ObjectAnimationUsingKeyFrames>\n                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SelectedEarmark\"\n                                                                       Storyboard.TargetProperty=\"Fill\">\n                                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ListViewItemSelectedPointerOverBackgroundThemeBrush}\" />\n                                                        </ObjectAnimationUsingKeyFrames>\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Pressed\">\n                                                    <Storyboard>\n                                                        <PointerDownThemeAnimation TargetName=\"ContentContainer\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"PointerOverPressed\">\n                                                    <Storyboard>\n                                                        <PointerDownThemeAnimation TargetName=\"ContentContainer\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"PointerOverBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SelectionBackground\"\n                                                                        Storyboard.TargetProperty=\"Fill\">\n                                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ListViewItemSelectedPointerOverBackgroundThemeBrush}\" />\n                                                        </ObjectAnimationUsingKeyFrames>\n                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SelectedBorder\"\n                                                                        Storyboard.TargetProperty=\"Stroke\">\n                                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ListViewItemSelectedPointerOverBorderThemeBrush}\" />\n                                                        </ObjectAnimationUsingKeyFrames>\n                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SelectedEarmark\"\n                                                                       Storyboard.TargetProperty=\"Fill\">\n                                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ListViewItemSelectedPointerOverBackgroundThemeBrush}\" />\n                                                        </ObjectAnimationUsingKeyFrames>\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Disabled\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"contentPresenter\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"{StaticResource ListViewItemDisabledThemeOpacity}\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                            </VisualStateGroup>\n                                            <VisualStateGroup x:Name=\"FocusStates\">\n                                                <VisualState x:Name=\"Focused\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetProperty=\"Opacity\" Storyboard.TargetName=\"FocusVisual\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Unfocused\"/>\n                                                <VisualState x:Name=\"PointerFocused\"/>\n                                            </VisualStateGroup>\n                                            <VisualStateGroup x:Name=\"SelectionHintStates\">\n                                                <VisualState x:Name=\"VerticalSelectionHint\">\n                                                    <Storyboard>\n                                                        <SwipeHintThemeAnimation TargetName=\"SelectionBackground\" ToVerticalOffset=\"15\" ToHorizontalOffset=\"0\" />\n                                                        <SwipeHintThemeAnimation TargetName=\"ContentBorder\" ToVerticalOffset=\"15\" ToHorizontalOffset=\"0\" />\n                                                        <SwipeHintThemeAnimation TargetName=\"SelectedCheckMark\" ToVerticalOffset=\"15\" ToHorizontalOffset=\"0\" />\n                                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"HintGlyph\"\n                                                                       Storyboard.TargetProperty=\"Opacity\"\n                                                                       Duration=\"0:0:0.500\">\n                                                            <DiscreteDoubleKeyFrame Value=\"0.5\" KeyTime=\"0:0:0\" />\n                                                            <DiscreteDoubleKeyFrame Value=\"0\" KeyTime=\"0:0:0.500\" />\n                                                        </DoubleAnimationUsingKeyFrames>\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"HorizontalSelectionHint\">\n                                                    <Storyboard>\n                                                        <SwipeHintThemeAnimation TargetName=\"SelectionBackground\" ToHorizontalOffset=\"-23\" ToVerticalOffset=\"0\" />\n                                                        <SwipeHintThemeAnimation TargetName=\"ContentBorder\" ToHorizontalOffset=\"-23\" ToVerticalOffset=\"0\" />\n                                                        <SwipeHintThemeAnimation TargetName=\"SelectedCheckMark\" ToHorizontalOffset=\"-23\" ToVerticalOffset=\"0\" />\n                                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"HintGlyph\"\n                                                                       Storyboard.TargetProperty=\"Opacity\"\n                                                                       Duration=\"0:0:0.500\">\n                                                            <DiscreteDoubleKeyFrame Value=\"0.5\" KeyTime=\"0:0:0\" />\n                                                            <DiscreteDoubleKeyFrame Value=\"0\" KeyTime=\"0:0:0.500\" />\n                                                        </DoubleAnimationUsingKeyFrames>\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"NoSelectionHint\" />\n                                                <VisualStateGroup.Transitions>\n                                                    <VisualTransition To=\"NoSelectionHint\" GeneratedDuration=\"0:0:0.65\"/>\n                                                </VisualStateGroup.Transitions>\n                                            </VisualStateGroup>\n                                            <VisualStateGroup x:Name=\"SelectionStates\">\n                                                <VisualState x:Name=\"UnselectedSwiping\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectingGlyph\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"0.5\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"HintGlyphBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Selecting\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectionBackground\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectingGlyph\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"HintGlyphBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Selected\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectionBackground\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedCheckMark\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"SelectedSwiping\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectionBackground\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedCheckMark\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Unselecting\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"HintGlyphBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Unselected\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"HintGlyphBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"SelectedUnfocused\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectionBackground\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedCheckMark\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                            </VisualStateGroup>\n                                        </VisualStateManager.VisualStateGroups>\n                                        <Grid x:Name=\"ReorderHintContent\" Background=\"Transparent\">\n                                            <Path x:Name=\"SelectingGlyph\" Opacity=\"0\" Data=\"F1 M133.1,17.9 L137.2,13.2 L144.6,19.6 L156.4,5.8 L161.2,9.9 L145.6,28.4 z\" Fill=\"{StaticResource ListViewItemCheckSelectingThemeBrush}\" Height=\"13\" Stretch=\"Fill\" Width=\"15\" HorizontalAlignment=\"Right\" Margin=\"0,9.5,9.5,0\" VerticalAlignment=\"Top\" FlowDirection=\"LeftToRight\"/>\n                                            <Border x:Name=\"ContentContainer\">\n                                                <Grid x:Name=\"InnerDragContent\">\n                                                    <Border x:Name=\"HintGlyphBorder\"\n                                                      Height=\"20\"\n                                                      Width=\"20\"\n                                                      HorizontalAlignment=\"Right\"\n                                                      VerticalAlignment=\"Top\"\n                                                      Opacity=\"0\"\n                                                      Margin=\"4\">\n                                                        <Path x:Name=\"HintGlyph\" Opacity=\"0\" Data=\"F1 M133.1,17.9 L137.2,13.2 L144.6,19.6 L156.4,5.8 L161.2,9.9 L145.6,28.4 z\" Fill=\"{StaticResource ListViewItemCheckHintThemeBrush}\" Height=\"13\" Stretch=\"Fill\"  Width=\"15\" HorizontalAlignment=\"Right\" Margin=\"0,5.5,5.5,0\" VerticalAlignment=\"Top\" FlowDirection=\"LeftToRight\"/>\n                                                    </Border>\n                                                    <Rectangle x:Name=\"PointerOverBorder\"\n                                                        IsHitTestVisible=\"False\"\n                                                        Opacity=\"0\"\n                                                        Fill=\"#18FFFFFF\" \n                                                        Margin=\"1\" />\n                                                    <Rectangle x:Name=\"FocusVisual\"\n                                                        IsHitTestVisible=\"False\"\n                                                        Opacity=\"0\"\n                                                        StrokeThickness=\"2\"\n                                                        Stroke=\"{StaticResource ListViewItemFocusBorderThemeBrush}\" />\n                                                    <Rectangle x:Name=\"SelectionBackground\"\n                                                        Margin=\"4\"\n                                                        Fill=\"{StaticResource ListViewItemSelectedBackgroundThemeBrush}\"\n                                                        Opacity=\"0\" />\n                                                    <Border x:Name=\"ContentBorder\"\n                                                        Background=\"{TemplateBinding Background}\"\n                                                        BorderBrush=\"{TemplateBinding BorderBrush}\"\n                                                        BorderThickness=\"{TemplateBinding BorderThickness}\"\n                                                        Margin=\"4\">\n                                                        <Grid>\n                                                            <ContentPresenter x:Name=\"contentPresenter\"\n                                                              ContentTransitions=\"{TemplateBinding ContentTransitions}\"\n                                                              ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                                              Content=\"{TemplateBinding Content}\"\n                                                              HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                                              VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                                              Margin=\"{TemplateBinding Padding}\" />\n                                                            <Rectangle x:Name=\"SelectedBorder\"\n                                                                IsHitTestVisible=\"False\"\n                                                                Opacity=\"0\"\n                                                                Stroke=\"{StaticResource ListViewItemSelectedBackgroundThemeBrush}\"\n                                                                StrokeThickness=\"{StaticResource ListViewItemSelectedBorderThemeThickness}\" />\n                                                            <Rectangle x:Name=\"MultiArrangeOverlayBackground\"\n                                                               IsHitTestVisible=\"False\"\n                                                               Opacity=\"0\"\n                                                               Fill=\"{StaticResource ListViewItemDragBackgroundThemeBrush}\" />\n                                                        </Grid>\n                                                    </Border>\n                                                    <Border x:Name=\"SelectedCheckMarkOuter\"\n                                                        IsHitTestVisible=\"False\"\n                                                        HorizontalAlignment=\"Right\"\n                                                        VerticalAlignment=\"Top\"\n                                                        Padding=\"{TemplateBinding BorderThickness}\"\n                                                        Margin=\"4\">\n                                                        <Grid x:Name=\"SelectedCheckMark\" Opacity=\"0\" Height=\"20\" Width=\"20\">\n                                                            <Path x:Name=\"SelectedEarmark\" Data=\"M0,0 L40,0 L40,40 z\"  Fill=\"{StaticResource ListViewItemSelectedBackgroundThemeBrush}\" Stretch=\"Fill\"/>\n                                                            <Path Data=\"F1 M133.1,17.9 L137.2,13.2 L144.6,19.6 L156.4,5.8 L161.2,9.9 L145.6,28.4 z\" Fill=\"{StaticResource ListViewItemCheckThemeBrush}\" Height=\"13\" Stretch=\"Fill\" Width=\"15\" HorizontalAlignment=\"Right\" Margin=\"0,5.5,5.5,0\" VerticalAlignment=\"Top\" FlowDirection=\"LeftToRight\"/>\n                                                        </Grid>\n                                                    </Border>\n                                                </Grid>\n                                            </Border>\n                                        </Grid>\n                                    </Border>\n                                </ControlTemplate>\n                            </Setter.Value>\n                        </Setter>\n                    </Style>\n                </ListView.ItemContainerStyle>\n            </ListView>\n            <Grid  x:Name=\"pnlFooter\" Grid.Row=\"4\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\" />\n                    <RowDefinition Height=\"Auto\" />\n                </Grid.RowDefinitions>\n                <ProgressBar x:Name=\"progress\" />\n                <StackPanel Grid.Row=\"1\" Orientation=\"Horizontal\" HorizontalAlignment=\"Center\">\n                    <TextBlock x:Name=\"lblCurrentTestNumber\" Text=\"0\" Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock Text=\" / \"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock x:Name=\"lblTotalTestNumber\" Text=\"0\"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock Text=\"  (with  \"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock x:Name=\"lblFailureNumber\" Text=\"0\"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock Text=\" failures)\"  Style=\"{StaticResource ProgressStyle}\" />\n                </StackPanel>\n            </Grid>\n            <TextBlock\n              x:Name=\"lblResults\"\n              Grid.Row=\"5\"\n              Visibility=\"Collapsed\"\n              Style=\"{StaticResource ProgressStyle}\"\n              HorizontalAlignment=\"Center\" />\n        </Grid>\n    </Border>\n</Page>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/UI/TestPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.ObjectModel;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Windows.UI;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Media;\n\nnamespace Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\n{\n    /// <summary>\n    /// Test harness results page.\n    /// </summary>\n    public sealed partial class TestPage : Page, ITestReporter\n    {\n        private ObservableCollection<GroupDescription> _groups;\n        private GroupDescription _currentGroup = null;\n        private TestDescription _currentTest = null;\n\n        /// <summary>\n        /// Initializes a new instance of the TestPage.\n        /// </summary>\n        public TestPage()\n        {\n            InitializeComponent();\n\n            // Setup the groups data source\n            _groups = new ObservableCollection<GroupDescription>();\n            cvsTests.Source = _groups;\n\n            // Start a test run\n            App.Harness.Reporter = this;\n            Task.Factory.StartNew(() => App.Harness.RunAsync());\n        }\n\n        public async void StartRun(TestHarness harness)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n\n                lblCurrentTestNumber.Text = harness.Progress.ToString();\n                lblTotalTestNumber.Text = harness.Count.ToString();\n                lblFailureNumber.Tag = harness.Failures.ToString() ?? \"0\";\n                progress.Value = 1;\n                pnlFooter.Visibility = Visibility.Visible;\n            });\n        }\n\n        public async void EndRun(TestHarness harness)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                pnlFooter.Visibility = Visibility.Collapsed;\n                if (harness.Failures > 0)\n                {\n                    lblResults.Text = string.Format(CultureInfo.InvariantCulture, \"{0}/{1} tests failed!\", harness.Failures, harness.Count);\n                    lblResults.Foreground = new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0x00, 0x6E));\n                }\n                else\n                {\n                    lblResults.Text = string.Format(CultureInfo.InvariantCulture, \"{0} tests passed!\", harness.Count);\n                }\n                lblResults.Visibility = Visibility.Visible;\n            });\n        }\n\n        public async void Progress(TestHarness harness)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                lblCurrentTestNumber.Text = harness.Progress.ToString();\n                lblFailureNumber.Text = \" \" + (harness.Failures.ToString() ?? \"0\");\n                double value = harness.Progress;\n                int count = harness.Count;\n                if (count > 0)\n                {\n                    value = value * 100.0 / (double)count;\n                }\n                progress.Value = value;\n            });\n        }\n\n        public async void StartGroup(TestGroup group)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                _currentGroup = new GroupDescription { Name = group.Name };\n                _groups.Add(_currentGroup);\n            });\n        }\n\n        public async void EndGroup(TestGroup group)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                _currentGroup = null;\n            });\n        }\n        \n        public async void StartTest(TestMethod test)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>\n            {\n                _currentTest = new TestDescription { Name = test.Name };\n                _currentGroup.Add(_currentTest);\n\n                await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n                {\n                    lstTests.ScrollIntoView(_currentTest);\n                });\n            });\n        }\n\n        public async void EndTest(TestMethod method)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                if (method.Excluded)\n                {\n                    _currentTest.Color = Color.FromArgb(0xFF, 0x66, 0x66, 0x66);\n                }\n                else if (!method.Passed)\n                {\n                    _currentTest.Color = Color.FromArgb(0xFF, 0xFF, 0x00, 0x6E);\n                }\n                else\n                {\n                    _currentTest.Color = Color.FromArgb(0xFF, 0x2A, 0x9E, 0x39);\n                }\n                _currentTest = null;\n            });\n        }\n\n        public async void Log(string message)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                _currentTest.Details.Add(message);\n            });\n        }\n\n        public async void Error(string errorDetails)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                _currentTest.Details.Add(errorDetails);\n            });\n        }\n\n        public async void Status(string status)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                lblStatus.Text = status;\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.WindowsStore.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"win\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"win\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"win\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"win\" />\n  <package id=\"SQLitePCL\" version=\"3.8.7.2\" targetFramework=\"win\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.iOS.Test/AppDelegate.cs",
    "content": "﻿using System.Reflection;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test.UnitTests;\nusing Microsoft.WindowsAzure.MobileServices.Test;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Foundation;\nusing UIKit;\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.iOS.Test\n{\n\t[Register(\"AppDelegate\")]\n\tpublic partial class AppDelegate : UIApplicationDelegate\n\t{\n\t\tUIWindow window;\n\n\t    public static TestHarness Harness { get; private set; }\n\n\t    static AppDelegate()\n\t    {\n            CurrentPlatform.Init();\n            SQLitePCL.CurrentPlatform.Init();\n\n\t        Harness = new TestHarness();\n            Harness.LoadTestAssembly(typeof(SQLiteStoreTests).Assembly);\n\t    }\n\n\t\tpublic override bool FinishedLaunching (UIApplication app, NSDictionary options)\n\t\t{\n\t\t\twindow = new UIWindow (UIScreen.MainScreen.Bounds);\n\t\t    window.RootViewController = new UINavigationController (new LoginViewController());\n\t\t\twindow.MakeKeyAndVisible();\n\n\t\t\treturn true;\n\t\t}\n\t}\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.iOS.Test/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>UIDeviceFamily</key>\n\t<array>\n\t\t<integer>1</integer>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array/>\n\t<key>MinimumOSVersion</key>\n\t<string>5.1.1</string>\n\t<key>NSMainNibFile</key>\n\t<string></string>\n\t<key>UIStatusBarTintParameters</key>\n\t<dict>\n\t\t<key>UINavigationBar</key>\n\t\t<dict>\n\t\t\t<key>Style</key>\n\t\t\t<string>UIBarStyleDefault</string>\n\t\t\t<key>Translucent</key>\n\t\t\t<false/>\n\t\t</dict>\n\t</dict>\n\t<key>CFBundleDisplayName</key>\n\t<string>iOSTest</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.mobileservices.sqlitestore.iOSTest</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.iOS.Test/Main.cs",
    "content": "﻿using UIKit;\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.iOS.Test\n{\n\tpublic class Application\n\t{\n\t\t// This is the main entry point of the application.\n\t\tstatic void Main(string[] args)\n\t\t{\n\t\t\t// if you want to use a different Application Delegate class from \"AppDelegate\"\n\t\t\t// you can specify it here.\n\t\t\tUIApplication.Main(args, null, \"AppDelegate\");\n\t\t}\n\t}\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.iOS.Test/Microsoft.WindowsAzure.Mobile.SQLiteStore.iOS.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">iPhoneSimulator</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{8045853F-195D-44CE-B8CE-09F776E22902}</ProjectGuid>\n    <ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>Microsoft.WindowsAzure.Mobile.SQLiteStore.iOS.Test</RootNamespace>\n    <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>\n    <AssemblyName>MicrosoftWindowsAzureMobileSQLiteStoreiOSTest</AssemblyName>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n    <TargetFrameworkIdentifier>Xamarin.iOS</TargetFrameworkIdentifier>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Debug</OutputPath>\n    <DefineConstants>DEBUG;XAMARIN</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchLink>None</MtouchLink>\n    <MtouchDebug>True</MtouchDebug>\n    <MtouchSdkVersion>8.1</MtouchSdkVersion>\n    <MtouchProfiling>False</MtouchProfiling>\n    <MtouchExtraArgs />\n    <MtouchFastDev>False</MtouchFastDev>\n    <MtouchEnableGenericValueTypeSharing>True</MtouchEnableGenericValueTypeSharing>\n    <MtouchArch>Default, i386</MtouchArch>\n    <MtouchUseLlvm>False</MtouchUseLlvm>\n    <MtouchUseThumb>False</MtouchUseThumb>\n    <MtouchUseSGen>False</MtouchUseSGen>\n    <MtouchUseRefCounting>False</MtouchUseRefCounting>\n    <MtouchOptimizePNGs>False</MtouchOptimizePNGs>\n    <MtouchI18n />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' \">\n    <DebugType>none</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchLink>None</MtouchLink>\n    <DefineConstants>XAMARIN</DefineConstants>\n    <MtouchArch>ARMv7, ARM64</MtouchArch>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhone' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhone\\Debug</OutputPath>\n    <DefineConstants>DEBUG</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchDebug>True</MtouchDebug>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <MtouchSdkVersion>6.1</MtouchSdkVersion>\n    <MtouchLink>SdkOnly</MtouchLink>\n    <MtouchProfiling>False</MtouchProfiling>\n    <MtouchExtraArgs>\n    </MtouchExtraArgs>\n    <MtouchFastDev>False</MtouchFastDev>\n    <MtouchArch>Default, ARMv7</MtouchArch>\n    <MtouchUseLlvm>False</MtouchUseLlvm>\n    <MtouchUseThumb>False</MtouchUseThumb>\n    <MtouchUseSGen>False</MtouchUseSGen>\n    <MtouchUseRefCounting>False</MtouchUseRefCounting>\n    <MtouchOptimizePNGs>True</MtouchOptimizePNGs>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhone' \">\n    <DebugType>none</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhone\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <DefineConstants>XAMARIN</DefineConstants>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Include=\"app.config\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"readme.txt\" />\n    <Compile Include=\"UI\\LoginViewController.cs\" />\n    <Compile Include=\"Main.cs\" />\n    <Compile Include=\"AppDelegate.cs\" />\n    <Compile Include=\"UI\\HarnessViewController.cs\" />\n    <Compile Include=\"UI\\TestViewController.cs\" />\n    <None Include=\"Info.plist\">\n      <SubType>Designer</SubType>\n    </None>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BundleResource Include=\"Resources\\Default.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"MonoTouch.Dialog-1\" />\n    <Reference Include=\"Newtonsoft.Json\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SQLitePCL, Version=3.8.7.2, Culture=neutral, PublicKeyToken=bddade01e9c850c5, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\SQLitePCL.3.8.7.2\\lib\\Xamarin.iOS10\\SQLitePCL.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SQLitePCL.Ext, Version=3.8.7.2, Culture=neutral, PublicKeyToken=bddade01e9c850c5, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\SQLitePCL.3.8.7.2\\lib\\Xamarin.iOS10\\SQLitePCL.Ext.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monotouch\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monotouch\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"Xamarin.iOS\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BundleResource Include=\"Resources\\Default%402x.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BundleResource Include=\"Resources\\Default-568h%402x.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.iOS\\Microsoft.WindowsAzure.Mobile.Ext.iOS.csproj\">\n      <Project>{a871b137-83a8-4e9b-913d-30ee0288e161}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.iOS</Name>\n      <IsAppExtension>false</IsAppExtension>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.SQLiteStore\\Microsoft.WindowsAzure.Mobile.SQLiteStore.csproj\">\n      <Project>{4c20d49a-fe5e-4d9c-98b9-8125450074f5}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.SQLiteStore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\\Microsoft.WindowsAzure.Mobile.SQLiteStore.Test.csproj\">\n      <Project>{cd5d8a3a-5631-41bf-8161-8a2a7f892b71}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.SQLiteStore.Test</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{a2500bd2-a9a2-4085-9978-dee3675b02dd}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{d8bbc92a-b213-463b-911d-3a106f91d5f9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Xamarin\\iOS\\Xamarin.iOS.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.iOS.Test/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.MobileServices.SQLiteStore.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"024c2798-106e-4f1f-9f06-e7ba1baa4da5\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.iOS.Test/UI/HarnessViewController.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Text;\nusing System.Threading.Tasks;\nusing CoreGraphics;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing MonoTouch.Dialog;\nusing UIKit;\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.iOS.Test\n{\n    public class HarnessViewController\n        : DialogViewController, ITestReporter\n    {\n        public HarnessViewController()\n\t        : base (UITableViewStyle.Grouped, null, pushing: true)\n        {\n            this.progress = new UIProgressView (new CGRect (0, 0, View.Bounds.Width, 5)) {\n\t            AutoresizingMask = UIViewAutoresizing.FlexibleWidth\n            };\n\n            Root = new RootElement (\"Test Status\") {\n                new Section {\n                    this.status,\n                    new UIViewElement (null, this.progress, false),\n    \t\t        this.numbers\n                }\n            };\n\n\t        AppDelegate.Harness.Reporter = this;\n\t        Task.Factory.StartNew (AppDelegate.Harness.RunAsync);\n        }\n\n        public void StartRun (TestHarness harness)\n        {\n        }\n\n        public void Progress (TestHarness harness)\n        {\n\t        InvokeOnMainThread (() => {\n                this.numbers.Value = String.Format (\"Passed: {0}  Failed: {1}\", harness.Progress - harness.Failures, harness.Failures);\n                ReloadData();\n\n                float value = harness.Progress;\n                int count = harness.Count;\n                if (count > 0)\n                    value = value / count;\n\n                this.progress.Progress = value;\n\t        });\n        }\n\n        public void EndRun (TestHarness harness)\n        {\n        }\n\n        public void StartGroup (TestGroup testGroup)\n        {\n            BeginInvokeOnMainThread (() => {\n                this.testsSection = new Section (testGroup.Name);\n                Root.Add (this.testsSection);\n            });\n        }\n\n        public void EndGroup (TestGroup testGroup)\n        {\n\t\t\t\n        }\n\n        public void StartTest (TestMethod test)\n        {\n\t        this.testLog = new StringBuilder();\n        }\n\n        public void EndTest (TestMethod test)\n        {\n\t        string output = this.testLog.ToString();\n\t        BeginInvokeOnMainThread (() => {\n                var element = new StyledStringElement (test.Name,\n                    () => NavigationController.PushViewController (new TestViewController (test, output), true));\n\n                if (!test.Passed)\n                    element.TextColor = UIColor.Red;\n\n\t\t\t\tthis.testsSection.Add (element);\n\t        });\n        }\n\n        public void Log (string message)\n        {\n            this.testLog.AppendLine (message);\n        }\n\n        public void Error (string errorDetails)\n        {\n            this.testLog.AppendLine (errorDetails);\n        }\n\n        public void Status (string status)\n        {\n            InvokeOnMainThread (() => {\n                this.status.Caption = status;\n                ReloadData();\n            });\n        }\n\n        private StringBuilder testLog;\n\n        private Section testsSection;\n        private readonly StyledStringElement status = new StyledStringElement (null, null, UITableViewCellStyle.Subtitle);\n        private readonly StyledStringElement numbers = new StyledStringElement (null, null, UITableViewCellStyle.Subtitle);\n        private readonly UIProgressView progress;\n\t}\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.iOS.Test/UI/LoginViewController.cs",
    "content": "﻿using Microsoft.WindowsAzure.MobileServices;\nusing MonoTouch.Dialog;\nusing Foundation;\nusing UIKit;\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.iOS.Test\n{\n    class LoginViewController\n        : DialogViewController\n    {\n        public LoginViewController()\n            : base (UITableViewStyle.Grouped, null)\n        {\n            var defaults = NSUserDefaults.StandardUserDefaults;\n            string tags = defaults.StringForKey (TagsKey);\n\n            this.tagsEntry = new EntryElement (null, \"Tags\", tags);\n\n            Root = new RootElement (\"C# Client Library Tests\") {\n                new Section (\"Login\") {\n                    this.tagsEntry\n                },\n\n                new Section {\n                    new StringElement (\"Run Tests\", RunTests)                    \n                }                \n            };\n        }\n\n        private const string TagsKey = \"Tags\";\n\n        private readonly EntryElement tagsEntry;\n\n        private void RunTests()\n        {\n            var defaults = NSUserDefaults.StandardUserDefaults;\n            defaults.SetString (this.tagsEntry.Value, TagsKey);\n\n            AppDelegate.Harness.Settings.TagExpression = this.tagsEntry.Value;\n\n            if (!string.IsNullOrEmpty(AppDelegate.Harness.Settings.TagExpression))\n            {\n                AppDelegate.Harness.Settings.TagExpression += \" - notXamarin\";\n            }\n            else\n            {\n                AppDelegate.Harness.Settings.TagExpression = \"!notXamarin\";\n            }\n\n            NavigationController.PushViewController (new HarnessViewController(), true);\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.iOS.Test/UI/TestViewController.cs",
    "content": "using System;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing MonoTouch.Dialog;\nusing UIKit;\n\nnamespace Microsoft.WindowsAzure.Mobile.SQLiteStore.iOS.Test\n{\n    public class TestViewController\n        : DialogViewController\n    {\n        public TestViewController (TestMethod test, string log)\n            : base (UITableViewStyle.Grouped, null, pushing: true)\n        {\n            var section = new Section();\n\n            if (!String.IsNullOrWhiteSpace (test.Description))\n                section.Add (new StyledMultilineElement (\"Description:\", test.Description));\n\n            section.Add (new StyledMultilineElement (\"Output:\", log, UITableViewCellStyle.Subtitle));\n\n            Root = new RootElement (test.Name) {\n                section\n            };\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.iOS.Test/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"2.5.0.0\" />\n      </dependentAssembly>      \n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.iOS.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"MonoTouch10\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"MonoTouch10\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"MonoTouch10\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"MonoTouch10\" />\n  <package id=\"SQLitePCL\" version=\"3.8.7.2\" targetFramework=\"xamarinios10\" />\n</packages>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.SQLiteStore.iOS.Test/readme.txt",
    "content": "Notes\n-----------\n- when you update NuGet packages for this project and other Xamarin projects, VS adds references to System.IO, System.Runtime, and System.Threading.Tasks which will cause compilation failures. You need to remove the references.\n- due to bugs in the HttpClient NuGet package, there are various VS warnings around assembly binding redirects. This project (and all Xamarin projects that use our SDK) needs to have the assembly binding redirect for System.Net.Http to v2.5.0.0 (the mono version). If it has assembly binding redirects to System.Net.Http.Primitives or Extensions, bad things can happen, and VS will try to auto generate these in some situations so watch out."
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/AssertEx.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Helper assert functions\n    /// </summary>\n    public static class AssertEx\n    {\n        public static TException Throws<TException>(Action action) where TException : Exception\n        {\n            return Throws<TException>(() => Task.Run(action)).Result;\n        }\n\n        public static async Task<TException> Throws<TException>(Func<Task> action) where TException : Exception\n        {\n            TException thrown = null;\n            try\n            {\n                await action();\n            }\n            catch (Exception ex)\n            {\n                thrown = ex as TException;\n            }\n\n            Assert.IsNotNull(thrown, \"Expected exception not thrown\");\n\n            return thrown;\n        }\n\n        public static void QueryEquals(string query1, string query2)\n        {\n            Assert.AreEqual(Uri.UnescapeDataString(query1), Uri.UnescapeDataString(query2));\n        }\n\n        public static void MatchUris(List<HttpRequestMessage> requests, params string[] uris)\n        {\n            Assert.AreEqual(requests.Count, uris.Length);\n            for (int i = 0; i < uris.Length; i++)\n            {\n                var actualUri = requests[i].RequestUri;\n                var expectedUri = new Uri(uris[i], UriKind.Absolute);\n                Assert.AreEqual(actualUri.Host, expectedUri.Host);\n                Assert.AreEqual(actualUri.AbsolutePath, expectedUri.AbsolutePath);\n                // xamarin.ios encoding of query string is different than other platforms so normalizing them for comparison\n                Assert.AreEqual(Uri.UnescapeDataString(actualUri.Query), Uri.UnescapeDataString(expectedUri.Query));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/FunctionalTests/BloggingTest.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Runtime.Serialization;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [DataTable(\"blog_posts\")]\n    public class BlogPost\n    {\n        public int Id { get; set; }\n\n        [JsonProperty(PropertyName = \"title\")]\n        public string Title { get; set; }\n\n        [JsonProperty(PropertyName = \"commentCount\")]\n        public int CommentCount { get; set; }\n    }\n\n    [DataTable(\"blog_comments\")]\n    public class BlogComment\n    {\n        public int Id { get; set; }\n\n        [JsonProperty(PropertyName = \"postid\")]\n        public int BlogPostId { get; set; }\n\n        [JsonProperty(PropertyName = \"name\")]\n        public string UserName { get; set; }\n\n        [JsonProperty(PropertyName = \"commentText\")]\n        public string Text { get; set; }\n    }\n\n    [DataContract(Name = \"blog_posts\")]\n    public class DataContractBlogPost\n    {\n        [DataMember]\n        public int Id = 0;\n\n        [DataMember(Name = \"title\")]\n        public string Title;\n\n        [DataMember(Name = \"commentCount\")]\n        public int CommentCount { get; set; }\n    }\n\n    [Tag(\"blog\")]\n    [Tag(\"e2e\")]\n    public class BloggingTest : FunctionalTestBase\n    {\n        [AsyncTestMethod]\n        public async Task PostComments()\n        {\n            IMobileServiceClient client = GetClient();\n            IMobileServiceTable<BlogPost> postTable = client.GetTable<BlogPost>();\n            IMobileServiceTable<BlogComment> commentTable = client.GetTable<BlogComment>();\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"NY\" }, { \"tags\", \"#pizza #beer\" } };\n\n            // Add a few posts and a comment\n            Log(\"Adding posts\");\n            BlogPost post = new BlogPost { Title = \"Windows 8\" };\n            await postTable.InsertAsync(post, userDefinedParameters);\n            BlogPost highlight = new BlogPost { Title = \"ZUMO\" };\n            await postTable.InsertAsync(highlight);\n            await commentTable.InsertAsync(new BlogComment\n            {\n                BlogPostId = post.Id,\n                UserName = \"Anonymous\",\n                Text = \"Beta runs great\"\n            });\n            await commentTable.InsertAsync(new BlogComment\n            {\n                BlogPostId = highlight.Id,\n                UserName = \"Anonymous\",\n                Text = \"Whooooo\"\n            });\n            Assert.AreEqual(2, (await postTable.Where(p => p.Id >= post.Id)\n                                                .WithParameters(userDefinedParameters)\n                                                .ToListAsync()).Count);\n\n\n\n            // Navigate to the first post and add a comment\n            Log(\"Adding comment to first post\");\n            BlogPost first = await postTable.LookupAsync(post.Id);\n            Assert.AreEqual(\"Windows 8\", first.Title);\n            BlogComment opinion = new BlogComment { BlogPostId = first.Id, Text = \"Can't wait\" };\n            await commentTable.InsertAsync(opinion);\n            Assert.AreNotEqual(0, opinion.Id);\n        }\n\n        [AsyncTestMethod]\n        public async Task PostExceptionMessageFromZumoRuntime()\n        {\n            IMobileServiceClient client = GetClient();\n            IMobileServiceTable<BlogPost> postTable = client.GetTable<BlogPost>();\n\n            // Delete a bog post that doesn't exist to get an exception generated by the\n            // runtime.\n            try\n            {\n                await postTable.DeleteAsync(new BlogPost() { CommentCount = 5, Id = 9999999 });\n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                Assert.Contains(e.Message, \"An item with id '9999999' does not exist.\");\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task PostExceptionMessageFromUserScript()\n        {\n            IMobileServiceClient client = GetClient();\n            IMobileServiceTable<BlogPost> postTable = client.GetTable<BlogPost>();\n\n            // Insert a blog post that doesn't have a title; the user script will respond\n            // with a 400 and an error message string in the response body.\n            try\n            {\n                await postTable.InsertAsync(new BlogPost() { });\n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                Assert.AreEqual(\"All blog posts must have a title.\", e.Message);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task PostCommentsWithDataContract()\n        {\n            IMobileServiceClient client = GetClient();\n            IMobileServiceTable<DataContractBlogPost> postTable = client.GetTable<DataContractBlogPost>();\n\n            // Add a few posts and a comment\n            Log(\"Adding posts\");\n            DataContractBlogPost post = new DataContractBlogPost() { Title = \"How DataContracts Work\" };\n            await postTable.InsertAsync(post);\n            DataContractBlogPost highlight = new DataContractBlogPost { Title = \"Using the 'DataMember' attribute\" };\n            await postTable.InsertAsync(highlight);\n\n            Assert.AreEqual(2, (await postTable.Where(p => p.Id >= post.Id).ToListAsync()).Count);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/FunctionalTests/Book.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [DataTable(\"books\")]\n    public class Book\n    {\n        public int Id { get; set; }\n\n        [JsonProperty(PropertyName = \"title\")]\n        public string Title { get; set; }\n\n        [JsonProperty(PropertyName = \"type\")]\n        public string BookType { get; set; }\n\n        [JsonProperty(PropertyName = \"pub_id\")]\n        public int PublicationId { get; set; }\n\n        [JsonProperty(PropertyName = \"price\")]\n        public double Price { get; set; }\n\n        [JsonProperty(PropertyName = \"advance\")]\n        public double Advance { get; set; }\n\n        [JsonProperty(PropertyName = \"royalty\")]\n        public double Royalty { get; set; }\n\n        [JsonProperty(PropertyName = \"ytd_sales\")]\n        public double YearToDateSales { get; set; }\n\n        [JsonProperty(PropertyName = \"pubdate\")]\n        public DateTime PublicationDate { get; set; }\n\n        [JsonProperty(PropertyName = \"notes\")]\n        public string Notes { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/FunctionalTests/DataSourceTest.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n#pragma warning disable 618 // for using obsolete ITotalCountProvider\n    [Tag(\"data\")]\n    [Tag(\"e2e\")]\n    public class DataSourceTest : FunctionalTestBase\n    {\n        [AsyncTestMethod]\n        public async Task SimpleDataSource()\n        {\n            // Get the Books table\n            IMobileServiceTable<Book> table = GetClient().GetTable<Book>();\n\n            // Create a new CollectionView\n            Log(\"Creating DataSource\");\n            MobileServiceCollection<Book, Book> dataSource =\n                await table.OrderByDescending(b => b.Price).ToCollectionAsync();\n\n            Log(\"Verifying loaded\");\n            Assert.AreEqual(18, dataSource.Count);\n            Assert.AreEqual((long)-1, ((ITotalCountProvider)dataSource).TotalCount);\n            Assert.AreEqual(22.95, dataSource[0].Price);\n        }\n\n        [AsyncTestMethod]\n        public async Task SimpleDataSourceWithTotalCount()\n        {\n            // Get the Books table\n            IMobileServiceTable<Book> table = GetClient().GetTable<Book>();\n\n            // Create a new CollectionView\n            Log(\"Creating DataSource\");\n            MobileServiceCollection<Book, Book> dataSource =\n                await table.Take(5).IncludeTotalCount().ToCollectionAsync();\n\n            Log(\"Verifying loaded\");\n            Assert.AreEqual(5, dataSource.Count);\n            Assert.AreEqual((long)18, ((ITotalCountProvider)dataSource).TotalCount);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/FunctionalTests/DateTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [DataTable(\"types\")]\n    public class DateExample\n    {\n        public int Id { get; set; }\n\n        [JsonProperty(PropertyName = \"DateExampleDate\")]\n        public DateTime Date { get; set; }\n    }\n\n    [DataTable(\"types\")]\n    public class DateOffsetExample\n    {\n        public int Id { get; set; }\n\n        [JsonProperty(PropertyName = \"DateOffsetExampleDate\")]\n        public DateTimeOffset Date { get; set; }\n    }\n\n    [Tag(\"date\")]\n    [Tag(\"e2e\")]\n    public class DateTests : FunctionalTestBase\n    {\n        [AsyncTestMethod]\n        public async Task DateUri()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient client = new MobileServiceClient(\"http://www.test.com\", null, hijack);\n            IMobileServiceTable<DateExample> table = client.GetTable<DateExample>();\n\n            hijack.Response = new HttpResponseMessage(HttpStatusCode.OK);\n            hijack.SetResponseContent(\"[]\");\n\n            // Verify a full UTC date\n            DateTime date = new DateTime(2009, 11, 21, 14, 22, 59, 860, DateTimeKind.Utc);\n            await table.Where(b => b.Date == date).ToEnumerableAsync();\n            Assert.EndsWith(hijack.Request.RequestUri.ToString(), \"$filter=(DateExampleDate eq datetime'2009-11-21T14:22:59.860Z')\");\n\n            // Local date is converted to UTC\n            hijack.Response = new HttpResponseMessage(HttpStatusCode.OK);\n            hijack.SetResponseContent(\"[]\");\n            date = new DateTime(2009, 11, 21, 14, 22, 59, 860, DateTimeKind.Local);\n            await table.Where(b => b.Date == date).ToEnumerableAsync();\n            Assert.EndsWith(hijack.Request.RequestUri.ToString(), \"Z')\");\n        }\n\n        [AsyncTestMethod]\n        public async Task DateOffsetUri()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient client = new MobileServiceClient(\"http://www.test.com\", null, hijack);\n            IMobileServiceTable<DateOffsetExample> table = client.GetTable<DateOffsetExample>();\n\n            hijack.Response = new HttpResponseMessage(HttpStatusCode.OK);\n            hijack.SetResponseContent(\"[]\");\n\n            var date = DateTimeOffset.Parse(\"2009-11-21T06:22:59.8600000-08:00\");\n            await table.Where(b => b.Date == date).ToEnumerableAsync();\n            Assert.EndsWith(hijack.Request.RequestUri.ToString(), \"$filter=(DateOffsetExampleDate eq datetimeoffset'2009-11-21T06:22:59.8600000-08:00')\");\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAndQuery()\n        {\n            IMobileServiceTable<DateExample> table = GetClient().GetTable<DateExample>();\n\n            DateTime date = new DateTime(2009, 10, 21, 14, 22, 59, 860, DateTimeKind.Local);\n            Log(\"Start: {0}\", date);\n\n            Log(\"Inserting instance\");\n            DateExample instance = new DateExample { Date = date };\n            await table.InsertAsync(instance);\n            Assert.AreEqual(date, instance.Date);\n\n            Log(\"Querying for instance\");\n            List<DateExample> items = await table.Where(i => i.Date == date).Where(i => i.Id >= instance.Id).ToListAsync();\n            Assert.AreEqual(1, items.Count);\n            Assert.AreEqual(date, items[0].Date);\n\n            Log(\"Finish: {0}\", items[0].Date);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAndQueryOffset()\n        {\n            IMobileServiceTable<DateOffsetExample> table = GetClient().GetTable<DateOffsetExample>();\n\n            DateTimeOffset date = new DateTimeOffset(\n                new DateTime(2009, 10, 21, 14, 22, 59, 860, DateTimeKind.Utc).ToLocalTime());\n            Log(\"Start: {0}\", date);\n\n            Log(\"Inserting instance\");\n            DateOffsetExample instance = new DateOffsetExample { Date = date };\n            await table.InsertAsync(instance);\n            Assert.AreEqual(date, instance.Date);\n\n            Log(\"Querying for instance\");\n            List<DateOffsetExample> items = await table.Where(i => i.Date == date).Where(i => i.Id >= instance.Id).ToListAsync();\n            Assert.AreEqual(1, items.Count);\n            Assert.AreEqual(date, items[0].Date);\n\n            Log(\"Finish: {0}\", items[0].Date);\n        }\n\n        [AsyncTestMethod]\n        public async Task DateKinds()\n        {\n            IMobileServiceTable<DateExample> table = GetClient().GetTable<DateExample>();\n\n            DateTime original = new DateTime(2009, 10, 21, 14, 22, 59, 860, DateTimeKind.Local);\n            DateExample instance = new DateExample { Date = original };\n\n            Log(\"Start Kind: {0}\", instance.Date.Kind);\n            await table.InsertAsync(instance);\n            Assert.AreEqual(DateTimeKind.Local, instance.Date.Kind);\n            Assert.AreEqual(original, instance.Date);\n\n            Log(\"Change to UTC\");\n            instance.Date = new DateTime(2010, 5, 21, 0, 0, 0, 0, DateTimeKind.Utc);\n            await table.UpdateAsync(instance);\n            Assert.AreEqual(DateTimeKind.Local, instance.Date.Kind);\n\n            Log(\"Change to Local\");\n            instance.Date = new DateTime(2010, 5, 21, 0, 0, 0, 0, DateTimeKind.Local);\n            await table.UpdateAsync(instance);\n            Assert.AreEqual(DateTimeKind.Local, instance.Date.Kind);\n        }\n\n        // TODO: Find a way to re-enable\n        //[AsyncTestMethod]\n        //public async Task ChangeCulture()\n        //{\n        //    IMobileServiceTable<DateExample> table = GetClient().GetTable<DateExample>();\n\n        //    CultureInfo threadCulture = CultureInfo.DefaultThreadCurrentCulture;\n        //    CultureInfo threadUICulture = CultureInfo.DefaultThreadCurrentUICulture;\n\n        //    DateTime original = new DateTime(2009, 10, 21, 14, 22, 59, 860, DateTimeKind.Local);\n        //    DateExample instance = new DateExample { Date = original };\n        //    await table.InsertAsync(instance);\n\n        //    Log(\"Change culture to ar-EG\");\n        //    CultureInfo arabic = new CultureInfo(\"ar-EG\");\n        //    CultureInfo.DefaultThreadCurrentCulture = arabic;\n        //    CultureInfo.DefaultThreadCurrentUICulture = arabic;\n        //    DateExample arInstance = await table.LookupAsync(instance.Id);\n        //    Assert.AreEqual(original, arInstance.Date);\n\n        //    Log(\"Change culture to zh-CHS\");\n        //    CultureInfo chinese = new CultureInfo(\"zh-CHS\");\n        //    CultureInfo.DefaultThreadCurrentCulture = chinese;\n        //    CultureInfo.DefaultThreadCurrentUICulture = chinese;\n        //    DateExample zhInstance = await table.LookupAsync(instance.Id);\n        //    Assert.AreEqual(original, zhInstance.Date);\n\n        //    Log(\"Change culture to ru-RU\");\n        //    CultureInfo russian = new CultureInfo(\"ru-RU\");\n        //    CultureInfo.DefaultThreadCurrentCulture = russian;\n        //    CultureInfo.DefaultThreadCurrentUICulture = russian;\n        //    DateExample ruInstance = await table.LookupAsync(instance.Id);\n        //    Assert.AreEqual(original, ruInstance.Date);\n\n        //    CultureInfo.DefaultThreadCurrentCulture = threadCulture;\n        //    CultureInfo.DefaultThreadCurrentUICulture = threadUICulture;\n        //}\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/FunctionalTests/FunctionalTestBase.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Base class for functional tests.\n    /// </summary>\n    [FunctionalTest]\n    public class FunctionalTestBase : TestBase\n    {\n        /// <summary>\n        /// Get a client pointed at the test server without request logging.\n        /// </summary>\n        /// <returns>The test client.</returns>\n        public MobileServiceClient GetClient()\n        {\n            string runtimeUrl = this.GetTestSetting(\"MobileServiceRuntimeUrl\");\n            string runtimeKey = this.GetTestSetting(\"MobileServiceRuntimeKey\");\n            return new MobileServiceClient(runtimeUrl, runtimeKey, new LoggingHttpHandler(this));\n        }\n    }\n\n    class LoggingHttpHandler : DelegatingHandler\n    {\n        public TestBase Test { get; private set; }\n\n        public LoggingHttpHandler(TestBase test)\n        {\n            Test = test;\n        }\n\n        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n        {\n            Test.Log(\"    >>> {0} {1} {2}\", request.Method, request.RequestUri, request.Content);\n            HttpResponseMessage response = await base.SendAsync(request, cancellationToken);\n            Test.Log(\"    <<< {0} {1} {2}\", response.StatusCode, response.ReasonPhrase, response.Content);\n            return response;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/FunctionalTests/QueryingTest.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Run most of the query unit tests against the live server to make sure\n    /// none of them error and all of our OData is valid.\n    /// </summary>\n    [Tag(\"query\")]\n    [Tag(\"e2e\")]\n    public class QueryingTest : FunctionalTestBase\n    {\n        private async Task Query<T, U>(Func<IMobileServiceTable<T>, IMobileServiceTableQuery<U>> getQuery)\n        {\n            IMobileServiceTable<T> table = GetClient().GetTable<T>();\n            IMobileServiceTableQuery<U> query = getQuery(table);\n            await table.ReadAsync(query);\n        }\n\n        [AsyncTestMethod]\n        public async Task LiveBasicQuery()\n        {\n            // Query syntax\n            await Query<Book, Book>(table =>\n                from p in table\n                select p);\n        }\n\n        [AsyncTestMethod]\n        public async Task LiveOrdering()\n        {\n            // Query syntax\n            await Query<Book, Book>(table =>\n                from p in table\n                orderby p.Price ascending\n                select p);\n\n            // Chaining\n            await Query<Book, Book>(table => table.OrderBy(p => p.Price));\n\n            // Query syntax descending\n            await Query<Book, Book>(table =>\n                from p in table\n                orderby p.Price descending\n                select p);\n\n            // Chaining descending\n            await Query<Book, Book>(table => table.OrderByDescending(p => p.Price));\n\n            // Query syntax with multiple\n            await Query<Book, Book>(table =>\n                from p in table\n                orderby p.Price ascending\n                orderby p.Title descending\n                select p);\n\n            // Chaining with multiple\n            await Query<Book, Book>(table =>\n                table\n                .OrderBy(p => p.Price)\n                .OrderByDescending(p => p.Title));\n        }\n\n        [Tag(\"notXamarin_iOS\")] // LambdaExpression.Compile() is not supported on Xamarin.iOS\n        [AsyncTestMethod]\n        public async Task LiveProjection()\n        {\n            // Query syntax\n            await Query<Book, string>(table =>\n                from p in table\n                select p.Title);\n\n            // Chaining\n            await Query<Book, string>(table => table.Select(p => p.Title));\n\n            // Chaining\n            await Query<Book, Book>(table => table.Select(p => new { x = p.Title })\n                                                  .Select(p => new Book() { Title = p.x }));\n\n            // Verify that we don't blow up by trying to include the Foo\n            // property in the compiled query\n            await Query((IMobileServiceTable<Book> table) =>\n                from p in table\n                select new { Foo = p.Title });\n        }\n\n        [AsyncTestMethod]\n        public async Task LiveSkipTake()\n        {\n            // Query syntax\n            await Query<Book, Book>(table =>\n                (from p in table\n                 select p).Skip(2).Take(5));\n\n            // Chaining\n            await Query<Book, Book>(table => table.Select(p => p).Skip(2).Take(5));\n        }\n\n        [AsyncTestMethod]\n        public async Task LiveFiltering()\n        {\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Price > 50\n                select p);\n\n            await Query<Book, Book>(table => table.Where(p => p.Price > 50));\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Advance <= 10\n                select p);\n\n            await Query<Book, Book>(table => table.Where(p => p.Advance <= 10));\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Advance <= 10 && p.Id > 0\n                select p);\n\n            await Query<Book, Book>(table => table.Where(p => p.Advance <= 10 && p.Id > 0));\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Advance <= 10 || p.Id > 0\n                select p);\n\n            await Query<Book, Book>(table => table.Where(p => p.Advance <= 10 || p.Id > 0));\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where !(p.Id > 0)\n                select p);\n\n            await Query<Book, Book>(table => table.Where(p => !(p.Id > 0)));\n\n            await Query<Book, Book>(table => table.Where(p => (p.Title == \"How do I dial this # & such 'things'?\")));\n        }\n\n        [AsyncTestMethod]\n        public async Task LiveCombinedQuery()\n        {\n            await Query((IMobileServiceTable<Book> table) =>\n                (from p in table\n                 where p.Price <= 10 && p.Advance > 10f\n                 where !(p.Id > 0)\n                 orderby p.Price descending\n                 orderby p.Title\n                 select new { p.Title, p.Price })\n                .Skip(20)\n                .Take(10));\n        }\n\n        [AsyncTestMethod]\n        public async Task LiveFilterOperators()\n        {\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title + \"x\" == \"mx\"\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Advance + 1.0 == 10.0\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Advance - 1.0 == 10.0\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Advance * 2.0 == 10.0\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Advance / 2.0 == 10.0\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Id % 2 == 1\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where (p.Advance * 2.0) / 3.0 + 1.0 == 10.0\n                select p);\n        }\n\n        [AsyncTestMethod]\n        public async Task LiveFilterMethods()\n        {\n            // Methods that look like properties\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.Length == 7\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.PublicationDate.Day == 7\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.PublicationDate.Month == 7\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.PublicationDate.Year == 7\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.PublicationDate.Hour == 7\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.PublicationDate.Minute == 7\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.PublicationDate.Second == 7\n                select p);\n\n            // Static methods\n            await Query<Book, Book>(table =>\n                from p in table\n                where Math.Floor(p.Advance) == 10\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where Math.Floor(p.Price) == 10\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where Math.Ceiling(p.Advance) == 10\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where Math.Ceiling(p.Price) == 10\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where Math.Round(p.Advance) == 10\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where Math.Round(p.Price) == 10\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where string.Concat(p.Title, \"x\") == \"mx\"\n                select p);\n\n            // Instance methods\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.ToLower() == \"a\"\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.ToUpper() == \"A\"\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.Trim() == \"A\"\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.StartsWith(\"x\")\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.EndsWith(\"x\")\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.Contains(\"x\")\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.IndexOf(\"x\") == 2\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.IndexOf('x') == 2\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.Contains(\"x\")\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.Replace(\"a\", \"A\") == \"A\"\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.Replace('a', 'A') == \"A\"\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.Substring(2) == \"A\"\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where p.Title.Substring(2, 3) == \"A\"\n                select p);\n\n            // Verify each type works on nested expressions too\n            await Query<Book, Book>(table =>\n                from p in table\n                where (p.Title + \"x\").Length == 7\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where string.Concat(p.Title + \"x\", \"x\") == \"mx\"\n                select p);\n\n            await Query<Book, Book>(table =>\n                from p in table\n                where (p.Title + \"x\").ToLower() == \"ax\"\n                select p);\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/FunctionalTests/Table/MobileServiceTableTest.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [DataTable(\"stringId_test_table\")]\n    public class ToDoWithStringId\n    {\n        public string Id { get; set; }\n\n        public string String { get; set; }\n    }\n\n    [DataTable(\"test_table\")]\n    public class ToDoWithStringIdAgainstIntIdTable\n    {\n        public string Id { get; set; }\n\n        public string String { get; set; }\n    }\n\n    [DataTable(\"test_table\")]\n    public class ToDoWithIntId\n    {\n        public long Id { get; set; }\n\n        public string String { get; set; }\n    }\n\n    [DataTable(\"stringId_test_table\")]\n    public class ToDoWithSystemPropertiesType\n    {\n        public string Id { get; set; }\n\n        public string String { get; set; }\n\n        [CreatedAt]\n        public DateTime CreatedAt { get; set; }\n\n        [UpdatedAt]\n        public DateTime UpdatedAt { get; set; }\n\n        [Version]\n        public String Version { get; set; }\n\n        [Deleted]\n        public bool Deleted { get; set; }\n\n        public ToDoWithSystemPropertiesType()\n        {\n        }\n\n        public ToDoWithSystemPropertiesType(string id)\n        {\n            this.Id = id;\n        }\n    }\n\n    public class TypeWithArray\n    {\n        public string Id { get; set; }\n\n        [JsonProperty(\"values\")]\n        public List<string> Values { get; set; }\n\n    }\n\n    [Tag(\"e2e\")]\n    [Tag(\"table\")]\n    public class MobileServiceTableGenericFunctionalTests : FunctionalTestBase\n    {\n        private async Task EnsureEmptyTableAsync<T>()\n        {\n            // Make sure the table is empty\n            IMobileServiceTable<T> table = GetClient().GetTable<T>();\n            table.MobileServiceClient.SerializerSettings.DateParseHandling = DateParseHandling.None;\n\n            while (true)\n            {\n                IEnumerable<T> results = await table.Take(1000).ToListAsync();\n                T[] items = results.ToArray();\n\n                if (!items.Any())\n                {\n                    break;\n                }\n\n                foreach (T item in items)\n                {\n                    await table.DeleteAsync(item);\n                }\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task AsyncTableOperationsWithValidStringIdAgainstStringIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithStringId>();\n\n            string[] testIdData = IdTestData.ValidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                IMobileServiceTable<ToDoWithStringId> table = GetClient().GetTable<ToDoWithStringId>();\n\n                ToDoWithStringId item = new ToDoWithStringId() { Id = testId, String = \"Hey\" };\n                await table.InsertAsync(item);\n\n                // Read\n                IEnumerable<ToDoWithStringId> results = await table.ReadAsync();\n                ToDoWithStringId[] items = results.ToArray();\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(\"Hey\", items[0].String);\n\n                // Filter\n                results = await table.Where(i => i.Id == testId).ToEnumerableAsync();\n                items = results.ToArray();\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(\"Hey\", items[0].String);\n\n                // Projection\n                var projectedResults = await table.Select(i => new { XId = i.Id, XString = i.String }).ToEnumerableAsync();\n                var projectedItems = projectedResults.ToArray();\n\n                Assert.AreEqual(1, projectedItems.Count());\n                Assert.AreEqual(testId, projectedItems[0].XId);\n                Assert.AreEqual(\"Hey\", projectedItems[0].XString);\n\n                // Lookup\n                item = await table.LookupAsync(testId);\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n\n                // Update\n                item.String = \"What?\";\n                await table.UpdateAsync(item);\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"What?\", item.String);\n\n                // Refresh\n                item = new ToDoWithStringId() { Id = testId, String = \"Hey\" };\n                await table.RefreshAsync(item);\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"What?\", item.String);\n\n                // Read Again\n                results = await table.ReadAsync();\n                items = results.ToArray();\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(\"What?\", items[0].String);\n\n                await table.DeleteAsync(item);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task OrderingReadAsyncWithValidStringIdAgainstStringIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithStringId>();\n\n            string[] testIdData = new string[] { \"a\", \"b\", \"C\", \"_A\", \"_B\", \"_C\", \"1\", \"2\", \"3\" };\n            IMobileServiceTable<ToDoWithStringId> table = GetClient().GetTable<ToDoWithStringId>();\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = new ToDoWithStringId() { Id = testId, String = \"Hey\" };\n                await table.InsertAsync(item);\n            }\n\n            IEnumerable<ToDoWithStringId> results = await table.OrderBy(p => p.Id).ToEnumerableAsync();\n            ToDoWithStringId[] items = results.ToArray();\n\n            Assert.AreEqual(9, items.Count());\n            Assert.AreEqual(\"_A\", items[0].Id);\n            Assert.AreEqual(\"_B\", items[1].Id);\n            Assert.AreEqual(\"_C\", items[2].Id);\n            Assert.AreEqual(\"1\", items[3].Id);\n            Assert.AreEqual(\"2\", items[4].Id);\n            Assert.AreEqual(\"3\", items[5].Id);\n            Assert.AreEqual(\"a\", items[6].Id);\n            Assert.AreEqual(\"b\", items[7].Id);\n            Assert.AreEqual(\"C\", items[8].Id);\n\n            results = await table.OrderByDescending(p => p.Id).ToEnumerableAsync();\n            items = results.ToArray();\n\n            Assert.AreEqual(9, items.Count());\n            Assert.AreEqual(\"_A\", items[8].Id);\n            Assert.AreEqual(\"_B\", items[7].Id);\n            Assert.AreEqual(\"_C\", items[6].Id);\n            Assert.AreEqual(\"1\", items[5].Id);\n            Assert.AreEqual(\"2\", items[4].Id);\n            Assert.AreEqual(\"3\", items[3].Id);\n            Assert.AreEqual(\"a\", items[2].Id);\n            Assert.AreEqual(\"b\", items[1].Id);\n            Assert.AreEqual(\"C\", items[0].Id);\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = new ToDoWithStringId() { Id = testId };\n                await table.DeleteAsync(item);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task FilterReadAsyncWithEmptyStringIdAgainstStringIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithStringId>();\n\n            string[] testIdData = IdTestData.ValidStringIds;\n            IMobileServiceTable<ToDoWithStringId> table = GetClient().GetTable<ToDoWithStringId>();\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = new ToDoWithStringId() { Id = testId, String = \"Hey\" };\n                await table.InsertAsync(item);\n            }\n\n            string[] invalidIdData = IdTestData.EmptyStringIds.Concat(\n                                    IdTestData.InvalidStringIds).Concat(\n                                    new string[] { null }).ToArray();\n\n            foreach (string invalidId in invalidIdData)\n            {\n                IEnumerable<ToDoWithStringId> results = await table.Where(p => p.Id == invalidId).ToEnumerableAsync();\n                ToDoWithStringId[] items = results.ToArray();\n\n                Assert.AreEqual(0, items.Count());\n            }\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = new ToDoWithStringId() { Id = testId };\n                await table.DeleteAsync(item);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithNosuchItemAgainstStringIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithStringId>();\n\n            string[] testIdData = IdTestData.ValidStringIds;\n            IMobileServiceTable<ToDoWithStringId> table = GetClient().GetTable<ToDoWithStringId>();\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = new ToDoWithStringId() { Id = testId, String = \"Hey\" };\n                await table.InsertAsync(item);\n            }\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = await table.LookupAsync(testId);\n                await table.DeleteAsync(item);\n\n                MobileServiceInvalidOperationException exception = null;\n                try\n                {\n                    await table.LookupAsync(testId);\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.NotFound);\n                Assert.IsTrue(exception.Message.Contains(string.Format(\"Error: An item with id '{0}' does not exist.\", testId)));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithNoSuchItemAgainstStringIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithStringId>();\n\n            string[] testIdData = IdTestData.ValidStringIds;\n            IMobileServiceTable<ToDoWithStringId> table = GetClient().GetTable<ToDoWithStringId>();\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = new ToDoWithStringId() { Id = testId, String = \"Hey\" };\n                await table.InsertAsync(item);\n            }\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = await table.LookupAsync(testId);\n                await table.DeleteAsync(item);\n                item.Id = testId;\n\n                InvalidOperationException exception = null;\n                try\n                {\n                    await table.RefreshAsync(item);\n                }\n                catch (InvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithEmptyStringIdAgainstStringIdTable()\n        {\n            string[] emptyIdData = IdTestData.EmptyStringIds.Concat(\n                                    new string[] { null }).ToArray();\n            IMobileServiceTable<ToDoWithStringId> table = GetClient().GetTable<ToDoWithStringId>();\n\n            int count = 0;\n            List<ToDoWithStringId> itemsToDelete = new List<ToDoWithStringId>();\n\n            foreach (string emptyId in emptyIdData)\n            {\n                ToDoWithStringId item = new ToDoWithStringId() { Id = emptyId, String = (++count).ToString() };\n                await table.InsertAsync(item);\n\n                Assert.IsNotNull(item.Id);\n                Assert.AreEqual(count.ToString(), item.String);\n                itemsToDelete.Add(item);\n            }\n\n            foreach (var item in itemsToDelete)\n            {\n                await table.DeleteAsync(item);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithExistingItemAgainstStringIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithStringId>();\n\n            string[] testIdData = IdTestData.ValidStringIds;\n            IMobileServiceTable<ToDoWithStringId> table = GetClient().GetTable<ToDoWithStringId>();\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = new ToDoWithStringId() { Id = testId, String = \"Hey\" };\n                await table.InsertAsync(item);\n            }\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = await table.LookupAsync(testId);\n                item.String = \"No we're talking!\";\n\n                MobileServiceInvalidOperationException exception = null;\n                try\n                {\n                    await table.InsertAsync(item);\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.Conflict);\n                Assert.IsTrue(exception.Message.Contains(\"Could not insert the item because an item with that id already exists.\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithNosuchItemAgainstStringIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithStringId>();\n\n            string[] testIdData = IdTestData.ValidStringIds;\n            IMobileServiceTable<ToDoWithStringId> table = GetClient().GetTable<ToDoWithStringId>();\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = new ToDoWithStringId() { Id = testId, String = \"Hey\" };\n                await table.InsertAsync(item);\n            }\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = await table.LookupAsync(testId);\n                await table.DeleteAsync(item);\n                item.Id = testId;\n                item.String = \"Alright!\";\n\n                MobileServiceInvalidOperationException exception = null;\n                try\n                {\n                    await table.UpdateAsync(item);\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.NotFound);\n                Assert.IsTrue(exception.Message.Contains(string.Format(\"Error: An item with id '{0}' does not exist.\", testId)));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithNosuchItemAgainstStringIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithStringId>();\n\n            string[] testIdData = IdTestData.ValidStringIds;\n            IMobileServiceTable<ToDoWithStringId> table = GetClient().GetTable<ToDoWithStringId>();\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = new ToDoWithStringId() { Id = testId, String = \"Hey\" };\n                await table.InsertAsync(item);\n            }\n\n            foreach (string testId in testIdData)\n            {\n                ToDoWithStringId item = await table.LookupAsync(testId);\n                await table.DeleteAsync(item);\n                item.Id = testId;\n\n                MobileServiceInvalidOperationException exception = null;\n                try\n                {\n                    await table.DeleteAsync(item);\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.NotFound);\n                Assert.IsTrue(exception.Message.Contains(string.Format(\"Error: An item with id '{0}' does not exist.\", testId)));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsync_ThrowsConflictException_WhenConflictOccurs()\n        {\n            await EnsureEmptyTableAsync<ToDoWithSystemPropertiesType>();\n            string id = \"an id\";\n            IMobileServiceTable table = GetClient().GetTable(\"stringId_test_table\");\n\n            var item = new JObject() { { \"id\", id }, { \"String\", \"a value\" } };\n            var inserted = await table.InsertAsync(item);\n\n            var expectedException = await ThrowsAsync<MobileServiceConflictException>(() => table.InsertAsync(item));\n\n            Assert.IsNotNull(expectedException);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsync_ThrowsConflictException_WhenConflictOccurs_Generic()\n        {\n            await EnsureEmptyTableAsync<ToDoWithSystemPropertiesType>();\n\n            string id = \"an id\";\n            IMobileServiceTable<ToDoWithSystemPropertiesType> table = GetClient().GetTable<ToDoWithSystemPropertiesType>();\n\n            ToDoWithSystemPropertiesType item = new ToDoWithSystemPropertiesType() { Id = id, String = \"a value\" };\n            await table.InsertAsync(item);\n\n            var expectedException = await ThrowsAsync<MobileServiceConflictException<ToDoWithSystemPropertiesType>>(() => table.InsertAsync(item));\n\n            Assert.IsNotNull(expectedException);\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsync_ThrowsPreconditionFailedException_WhenMergeConflictOccurs()\n        {\n            await EnsureEmptyTableAsync<ToDoWithSystemPropertiesType>();\n            string id = \"an id\";\n            IMobileServiceTable table = GetClient().GetTable(\"stringId_test_table\");\n            table.SystemProperties = MobileServiceSystemProperties.Version;\n\n            var item = new JObject() { { \"id\", id }, { \"String\", \"a value\" } };\n            var inserted = await table.InsertAsync(item);\n            item[\"__version\"] = \"random\";\n\n            MobileServicePreconditionFailedException expectedException = null;\n            try\n            {\n                await table.DeleteAsync(item);\n            }\n            catch (MobileServicePreconditionFailedException ex)\n            {\n                expectedException = ex;\n            }\n            Assert.IsNotNull(expectedException);\n            Assert.AreEqual(expectedException.Value[\"__version\"], inserted[\"__version\"]);\n            Assert.AreEqual(expectedException.Value[\"String\"], inserted[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsync_ThrowsPreconditionFailedException_WhenMergeConflictOccurs_Generic()\n        {\n            await EnsureEmptyTableAsync<ToDoWithSystemPropertiesType>();\n\n            string id = \"an id\";\n            IMobileServiceTable<ToDoWithSystemPropertiesType> table = GetClient().GetTable<ToDoWithSystemPropertiesType>();\n\n            // insert a new item\n            var item = new ToDoWithSystemPropertiesType() { Id = id, String = \"a value\" };\n            await table.InsertAsync(item);\n\n            Assert.IsNotNull(item.CreatedAt);\n            Assert.IsNotNull(item.UpdatedAt);\n            Assert.IsNotNull(item.Version);\n\n            string version = item.Version;\n\n            // Delete with wrong version\n            item.Version = \"abc\";\n            item.String = \"But wait!\";\n            MobileServicePreconditionFailedException<ToDoWithSystemPropertiesType> expectedException = null;\n            try\n            {\n                await table.DeleteAsync(item);\n            }\n            catch (MobileServicePreconditionFailedException<ToDoWithSystemPropertiesType> exception)\n            {\n                expectedException = exception;\n            }\n\n            Assert.IsNotNull(expectedException);\n            Assert.AreEqual(expectedException.Response.StatusCode, HttpStatusCode.PreconditionFailed);\n\n            string responseContent = await expectedException.Response.Content.ReadAsStringAsync();\n            JToken jtoken = responseContent.ParseToJToken(table.MobileServiceClient.SerializerSettings);\n            string serverVersion = (string)jtoken[\"__version\"];\n            string stringValue = (string)jtoken[\"String\"];\n\n            Assert.AreEqual(version, serverVersion);\n            Assert.AreEqual(stringValue, \"a value\");\n\n            Assert.IsNotNull(expectedException.Item);\n            Assert.AreEqual(version, expectedException.Item.Version);\n            Assert.AreEqual(stringValue, expectedException.Item.String);\n\n            // Delete one last time with the version from the server\n            item.Version = serverVersion;\n            await table.DeleteAsync(item);\n\n            Assert.IsNull(item.Id);\n        }\n\n        [AsyncTestMethod]\n        public async Task AsyncTableOperationsWithIntegerAsStringIdAgainstIntIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithStringIdAgainstIntIdTable>();\n\n            IMobileServiceTable<ToDoWithStringIdAgainstIntIdTable> stringIdTable = GetClient().GetTable<ToDoWithStringIdAgainstIntIdTable>();\n            ToDoWithStringIdAgainstIntIdTable item = new ToDoWithStringIdAgainstIntIdTable() { String = \"Hey\" };\n\n            // Insert\n            await stringIdTable.InsertAsync(item);\n            string testId = item.Id.ToString();\n\n            // Read\n            IEnumerable<ToDoWithStringIdAgainstIntIdTable> results = await stringIdTable.ReadAsync();\n            ToDoWithStringIdAgainstIntIdTable[] items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(testId, items[0].Id);\n            Assert.AreEqual(\"Hey\", items[0].String);\n\n            // Filter\n            results = await stringIdTable.Where(i => i.Id == testId).ToEnumerableAsync();\n            items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(testId, items[0].Id);\n            Assert.AreEqual(\"Hey\", items[0].String);\n\n            // Projection\n            var projectedResults = await stringIdTable.Select(i => new { XId = i.Id, XString = i.String }).ToEnumerableAsync();\n            var projectedItems = projectedResults.ToArray();\n\n            Assert.AreEqual(1, projectedItems.Count());\n            Assert.AreEqual(testId, projectedItems[0].XId);\n            Assert.AreEqual(\"Hey\", projectedItems[0].XString);\n\n            // Lookup\n            ToDoWithStringIdAgainstIntIdTable stringIdItem = await stringIdTable.LookupAsync(testId);\n            Assert.AreEqual(testId, stringIdItem.Id);\n            Assert.AreEqual(\"Hey\", stringIdItem.String);\n\n            // Update\n            stringIdItem.String = \"What?\";\n            await stringIdTable.UpdateAsync(stringIdItem);\n            Assert.AreEqual(testId, stringIdItem.Id);\n            Assert.AreEqual(\"What?\", stringIdItem.String);\n\n            // Refresh\n            stringIdItem = new ToDoWithStringIdAgainstIntIdTable() { Id = testId, String = \"Hey\" };\n            await stringIdTable.RefreshAsync(stringIdItem);\n            Assert.AreEqual(testId, stringIdItem.Id);\n            Assert.AreEqual(\"What?\", stringIdItem.String);\n\n            // Read Again\n            results = await stringIdTable.ReadAsync();\n            items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(testId, items[0].Id);\n            Assert.AreEqual(\"What?\", items[0].String);\n\n            // Delete\n            await stringIdTable.DeleteAsync(item);\n        }\n\n        [AsyncTestMethod]\n        public async Task AsyncTableOperationsWithStringIdAgainstIntegerIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithIntId>();\n\n            IMobileServiceTable<ToDoWithIntId> table = GetClient().GetTable<ToDoWithIntId>();\n            List<ToDoWithIntId> integerIdItems = new List<ToDoWithIntId>();\n            for (var i = 0; i < 10; i++)\n            {\n                ToDoWithIntId item = new ToDoWithIntId() { String = i.ToString() };\n                await table.InsertAsync(item);\n                integerIdItems.Add(item);\n            }\n\n            string[] testIdData = IdTestData.ValidStringIds.ToArray();\n\n            IMobileServiceTable<ToDoWithStringIdAgainstIntIdTable> stringIdTable = GetClient().GetTable<ToDoWithStringIdAgainstIntIdTable>();\n\n            foreach (string testId in testIdData)\n            {\n                // Filter\n                Exception exception = null;\n                try\n                {\n                    IEnumerable<ToDoWithStringIdAgainstIntIdTable> results = await stringIdTable.Where(p => p.Id == testId).ToEnumerableAsync();\n                    ToDoWithStringIdAgainstIntIdTable[] items = results.ToArray();\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"Bad request\"));\n\n                // Refresh\n                exception = null;\n                try\n                {\n                    ToDoWithStringIdAgainstIntIdTable item = new ToDoWithStringIdAgainstIntIdTable() { Id = testId, String = \"Hey!\" };\n                    await stringIdTable.RefreshAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"Bad request\"));\n\n                // Insert\n                exception = null;\n                try\n                {\n                    ToDoWithStringIdAgainstIntIdTable item = new ToDoWithStringIdAgainstIntIdTable() { Id = testId, String = \"Hey!\" };\n                    await stringIdTable.InsertAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"Error: A value cannot be specified for property 'id'\"));\n\n                // Lookup\n                exception = null;\n                try\n                {\n                    await stringIdTable.LookupAsync(testId);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"Error: The value specified for 'id' must be a number.\"));\n\n                // Update\n                exception = null;\n                try\n                {\n                    ToDoWithStringIdAgainstIntIdTable item = new ToDoWithStringIdAgainstIntIdTable() { Id = testId, String = \"Hey!\" };\n                    await stringIdTable.UpdateAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"Error: The value specified for 'id' must be a number.\"));\n\n                // Delete\n                exception = null;\n                try\n                {\n                    ToDoWithStringIdAgainstIntIdTable item = new ToDoWithStringIdAgainstIntIdTable() { Id = testId, String = \"Hey!\" };\n                    await stringIdTable.DeleteAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"Error: The value specified for 'id' must be a number.\"));\n            }\n\n            foreach (ToDoWithIntId integerIdItem in integerIdItems)\n            {\n                await table.DeleteAsync(integerIdItem);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task OrderingReadAsyncWithStringIdAgainstIntegerIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithIntId>();\n\n            IMobileServiceTable<ToDoWithIntId> table = GetClient().GetTable<ToDoWithIntId>();\n            List<ToDoWithIntId> integerIdItems = new List<ToDoWithIntId>();\n            for (var i = 0; i < 10; i++)\n            {\n                ToDoWithIntId item = new ToDoWithIntId() { String = i.ToString() };\n                await table.InsertAsync(item);\n                integerIdItems.Add(item);\n            }\n\n            IMobileServiceTable<ToDoWithStringIdAgainstIntIdTable> stringIdTable = GetClient().GetTable<ToDoWithStringIdAgainstIntIdTable>();\n\n            IEnumerable<ToDoWithStringIdAgainstIntIdTable> results = await stringIdTable.OrderBy(p => p.Id).ToEnumerableAsync();\n            ToDoWithStringIdAgainstIntIdTable[] items = results.ToArray();\n\n            Assert.AreEqual(10, items.Count());\n            for (var i = 0; i < 8; i++)\n            {\n                Assert.AreEqual((int.Parse(items[i].Id) + 1).ToString(), items[i + 1].Id);\n            }\n\n            results = await stringIdTable.OrderByDescending(p => p.Id).ToEnumerableAsync();\n            items = results.ToArray();\n\n            Assert.AreEqual(10, items.Count());\n            for (var i = 8; i >= 0; i--)\n            {\n                Assert.AreEqual((int.Parse(items[i].Id) - 1).ToString(), items[i + 1].Id);\n            }\n\n            foreach (ToDoWithIntId integerIdItem in integerIdItems)\n            {\n                await table.DeleteAsync(integerIdItem);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task FilterReadAsyncWithIntegerAsStringIdAgainstIntegerIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithIntId>();\n\n            IMobileServiceTable<ToDoWithIntId> table = GetClient().GetTable<ToDoWithIntId>();\n            List<ToDoWithIntId> integerIdItems = new List<ToDoWithIntId>();\n            for (var i = 0; i < 10; i++)\n            {\n                ToDoWithIntId item = new ToDoWithIntId() { String = i.ToString() };\n                await table.InsertAsync(item);\n                integerIdItems.Add(item);\n            }\n\n            IMobileServiceTable<ToDoWithStringIdAgainstIntIdTable> stringIdTable = GetClient().GetTable<ToDoWithStringIdAgainstIntIdTable>();\n\n            IEnumerable<ToDoWithStringIdAgainstIntIdTable> results = await stringIdTable.Where(p => p.Id == integerIdItems[0].Id.ToString()).ToEnumerableAsync();\n            ToDoWithStringIdAgainstIntIdTable[] items = results.ToArray();\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(integerIdItems[0].Id.ToString(), items[0].Id);\n            Assert.AreEqual(\"0\", items[0].String);\n\n            foreach (ToDoWithIntId integerIdItem in integerIdItems)\n            {\n                await table.DeleteAsync(integerIdItem);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task FilterReadAsyncWithEmptyStringIdAgainstIntegerIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithIntId>();\n\n            IMobileServiceTable<ToDoWithIntId> table = GetClient().GetTable<ToDoWithIntId>();\n            List<ToDoWithIntId> integerIdItems = new List<ToDoWithIntId>();\n            for (var i = 0; i < 10; i++)\n            {\n                ToDoWithIntId item = new ToDoWithIntId() { String = i.ToString() };\n                await table.InsertAsync(item);\n                integerIdItems.Add(item);\n            }\n\n            string[] testIdData = new string[] { \"\", \" \", null };\n\n            IMobileServiceTable<ToDoWithStringIdAgainstIntIdTable> stringIdTable = GetClient().GetTable<ToDoWithStringIdAgainstIntIdTable>();\n\n            foreach (string testId in testIdData)\n            {\n                IEnumerable<ToDoWithStringIdAgainstIntIdTable> results = await stringIdTable.Where(p => p.Id == testId).ToEnumerableAsync();\n                ToDoWithStringIdAgainstIntIdTable[] items = results.ToArray();\n\n                Assert.AreEqual(0, items.Length);\n            }\n\n            foreach (ToDoWithIntId integerIdItem in integerIdItems)\n            {\n                await table.DeleteAsync(integerIdItem);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithValidIntIdAgainstIntIdTable()\n        {\n            await EnsureEmptyTableAsync<ToDoWithIntId>();\n\n            IMobileServiceTable<ToDoWithIntId> table = GetClient().GetTable<ToDoWithIntId>();\n\n            ToDoWithIntId item = new ToDoWithIntId() { String = \"Hey\" };\n            await table.InsertAsync(item);\n\n            IEnumerable<ToDoWithIntId> results = await table.ReadAsync();\n            ToDoWithIntId[] items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.IsTrue(items[0].Id > 0);\n            Assert.AreEqual(\"Hey\", items[0].String);\n\n            await table.DeleteAsync(item);\n        }\n\n        [AsyncTestMethod]\n        public async Task AsyncTableOperationsWithAllSystemProperties()\n        {\n            await EnsureEmptyTableAsync<ToDoWithSystemPropertiesType>();\n\n            string id = \"an id\";\n            IMobileServiceTable<ToDoWithSystemPropertiesType> table = GetClient().GetTable<ToDoWithSystemPropertiesType>();\n\n            ToDoWithSystemPropertiesType item = new ToDoWithSystemPropertiesType() { Id = id, String = \"a value\" };\n            await table.InsertAsync(item);\n\n            Assert.IsNotNull(item.CreatedAt);\n            Assert.IsNotNull(item.UpdatedAt);\n            Assert.IsNotNull(item.Version);\n\n            // Read\n            IEnumerable<ToDoWithSystemPropertiesType> results = await table.ReadAsync();\n            ToDoWithSystemPropertiesType[] items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.IsNotNull(items[0].CreatedAt);\n            Assert.IsNotNull(items[0].UpdatedAt);\n            Assert.IsNotNull(items[0].Version);\n\n            // Filter against version\n            results = await table.Where(i => i.Version == items[0].Version).ToEnumerableAsync();\n            ToDoWithSystemPropertiesType[] filterItems = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(filterItems[0].CreatedAt, items[0].CreatedAt);\n            Assert.AreEqual(filterItems[0].UpdatedAt, items[0].UpdatedAt);\n            Assert.AreEqual(filterItems[0].Version, items[0].Version);\n\n            // Filter against createdAt\n            results = await table.Where(i => i.CreatedAt == items[0].CreatedAt).ToEnumerableAsync();\n            filterItems = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(filterItems[0].CreatedAt, items[0].CreatedAt);\n            Assert.AreEqual(filterItems[0].UpdatedAt, items[0].UpdatedAt);\n            Assert.AreEqual(filterItems[0].Version, items[0].Version);\n\n            // Filter against updatedAt\n            results = await table.Where(i => i.UpdatedAt == items[0].UpdatedAt).ToEnumerableAsync();\n            filterItems = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(filterItems[0].CreatedAt, items[0].CreatedAt);\n            Assert.AreEqual(filterItems[0].UpdatedAt, items[0].UpdatedAt);\n            Assert.AreEqual(filterItems[0].Version, items[0].Version);\n\n            // Projection\n            var projectedResults = await table.Select(i => new { XId = i.Id, XCreatedAt = i.CreatedAt, XUpdatedAt = i.UpdatedAt, XVersion = i.Version }).ToEnumerableAsync();\n            var projectedItems = projectedResults.ToArray();\n\n            Assert.AreEqual(1, projectedResults.Count());\n            Assert.AreEqual(projectedItems[0].XId, items[0].Id);\n            Assert.AreEqual(projectedItems[0].XCreatedAt, items[0].CreatedAt);\n            Assert.AreEqual(projectedItems[0].XUpdatedAt, items[0].UpdatedAt);\n            Assert.AreEqual(projectedItems[0].XVersion, items[0].Version);\n\n            // Lookup\n            item = await table.LookupAsync(id);\n            Assert.AreEqual(id, item.Id);\n            Assert.AreEqual(item.Id, items[0].Id);\n            Assert.AreEqual(item.CreatedAt, items[0].CreatedAt);\n            Assert.AreEqual(item.UpdatedAt, items[0].UpdatedAt);\n            Assert.AreEqual(item.Version, items[0].Version);\n\n            // Refresh\n            item = new ToDoWithSystemPropertiesType() { Id = id };\n            await table.RefreshAsync(item);\n            Assert.AreEqual(id, item.Id);\n            Assert.AreEqual(item.Id, items[0].Id);\n            Assert.AreEqual(item.CreatedAt, items[0].CreatedAt);\n            Assert.AreEqual(item.UpdatedAt, items[0].UpdatedAt);\n            Assert.AreEqual(item.Version, items[0].Version);\n\n            // Update\n            item.String = \"Hello!\";\n            await table.UpdateAsync(item);\n            Assert.AreEqual(item.Id, items[0].Id);\n            Assert.AreEqual(item.CreatedAt, items[0].CreatedAt);\n            Assert.IsTrue(item.UpdatedAt >= items[0].UpdatedAt);\n            Assert.IsNotNull(item.Version);\n            Assert.AreNotEqual(item.Version, items[0].Version);\n\n            // Read Again\n            results = await table.ReadAsync();\n            items = results.ToArray();\n            Assert.AreEqual(id, item.Id);\n            Assert.AreEqual(item.Id, items[0].Id);\n            Assert.AreEqual(item.CreatedAt, items[0].CreatedAt);\n            Assert.AreEqual(item.UpdatedAt, items[0].UpdatedAt);\n            Assert.AreEqual(item.Version, items[0].Version);\n\n            await table.DeleteAsync(item);\n        }\n\n        [AsyncTestMethod]\n        public async Task AsyncTableOperationsWithSystemPropertiesSetExplicitly()\n        {\n            await EnsureEmptyTableAsync<ToDoWithSystemPropertiesType>();\n\n            IMobileServiceTable<ToDoWithSystemPropertiesType> allSystemPropertiesTable = GetClient().GetTable<ToDoWithSystemPropertiesType>();\n\n            // Regular insert\n            ToDoWithSystemPropertiesType item = new ToDoWithSystemPropertiesType() { String = \"a value\" };\n            await allSystemPropertiesTable.InsertAsync(item);\n\n            Assert.IsNotNull(item.CreatedAt);\n            Assert.IsNotNull(item.UpdatedAt);\n            Assert.IsNotNull(item.Version);\n\n            // Explicit System Properties insert\n            ToDoWithSystemPropertiesType item2 = new ToDoWithSystemPropertiesType();\n            allSystemPropertiesTable.SystemProperties = MobileServiceSystemProperties.Version | MobileServiceSystemProperties.CreatedAt;\n            await allSystemPropertiesTable.InsertAsync(item2);\n\n            Assert.IsNotNull(item2.CreatedAt);\n            Assert.AreEqual(new DateTime(), item2.UpdatedAt);\n            Assert.IsNotNull(item2.Version);\n\n            // Explicit System Properties Read\n            allSystemPropertiesTable.SystemProperties = MobileServiceSystemProperties.Version | MobileServiceSystemProperties.UpdatedAt;\n            IEnumerable<ToDoWithSystemPropertiesType> results = await allSystemPropertiesTable.Where(p => p.Id == item2.Id).ToEnumerableAsync();\n            ToDoWithSystemPropertiesType[] items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(new DateTime(), items[0].CreatedAt);\n            Assert.IsNotNull(items[0].UpdatedAt);\n            Assert.IsNotNull(items[0].Version);\n\n            // Lookup\n            allSystemPropertiesTable.SystemProperties = MobileServiceSystemProperties.None;\n            var item3 = await allSystemPropertiesTable.LookupAsync(item2.Id);\n            Assert.AreEqual(new DateTime(), item3.CreatedAt);\n            Assert.AreEqual(new DateTime(), item3.UpdatedAt);\n            Assert.IsNull(item3.Version);\n\n            await allSystemPropertiesTable.DeleteAsync(item);\n            await allSystemPropertiesTable.DeleteAsync(item2);\n        }\n\n        [AsyncTestMethod]\n        public async Task AsyncTableOperationsWithAllSystemPropertiesUsingCustomSystemParameters()\n        {\n            await EnsureEmptyTableAsync<ToDoWithSystemPropertiesType>();\n\n            foreach (string systemProperties in SystemPropertiesTestData.ValidSystemPropertyQueryStrings)\n            {\n                string[] systemPropertiesKeyValue = systemProperties.Split('=');\n                string key = systemPropertiesKeyValue[0];\n                string value = systemPropertiesKeyValue[1];\n                Dictionary<string, string> userParameters = new Dictionary<string, string>() { { key, value } };\n\n                bool shouldHaveCreatedAt = value.ToLower().Contains(\"created\");\n                bool shouldHaveUpdatedAt = value.ToLower().Contains(\"updated\");\n                bool shouldHaveVersion = value.ToLower().Contains(\"version\");\n\n                if (value.Trim() == \"*\")\n                {\n                    shouldHaveVersion = shouldHaveUpdatedAt = shouldHaveCreatedAt = true;\n                }\n\n                string id = \"an id\";\n                IMobileServiceTable<ToDoWithSystemPropertiesType> table = GetClient().GetTable<ToDoWithSystemPropertiesType>();\n\n                ToDoWithSystemPropertiesType item = new ToDoWithSystemPropertiesType() { Id = id, String = \"a value\" };\n                await table.InsertAsync(item, userParameters);\n\n                if (shouldHaveCreatedAt)\n                {\n                    Assert.IsNotNull(item.CreatedAt);\n                }\n                else\n                {\n                    Assert.AreEqual(new DateTime(), item.CreatedAt);\n                }\n                if (shouldHaveUpdatedAt)\n                {\n                    Assert.IsNotNull(item.UpdatedAt);\n                }\n                else\n                {\n                    Assert.AreEqual(new DateTime(), item.UpdatedAt);\n                }\n                if (shouldHaveVersion)\n                {\n                    Assert.IsNotNull(item.Version);\n                }\n                else\n                {\n                    Assert.IsNull(item.Version);\n                }\n\n                // Read\n                IEnumerable<ToDoWithSystemPropertiesType> results = await table.WithParameters(userParameters).ToEnumerableAsync();\n                ToDoWithSystemPropertiesType[] items = results.ToArray();\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(shouldHaveCreatedAt ? item.CreatedAt : new DateTime(), items[0].CreatedAt);\n                Assert.AreEqual(shouldHaveUpdatedAt ? item.UpdatedAt : new DateTime(), items[0].UpdatedAt);\n                Assert.AreEqual(shouldHaveVersion ? item.Version : null, items[0].Version);\n\n                // Filter against version\n                results = await table.Where(i => i.Version == item.Version).WithParameters(userParameters).ToEnumerableAsync();\n                ToDoWithSystemPropertiesType[] filterItems = results.ToArray();\n\n                if (shouldHaveVersion)\n                {\n                    Assert.AreEqual(1, filterItems.Count());\n                    Assert.AreEqual(shouldHaveCreatedAt ? item.CreatedAt : new DateTime(), filterItems[0].CreatedAt);\n                    Assert.AreEqual(shouldHaveUpdatedAt ? item.UpdatedAt : new DateTime(), filterItems[0].UpdatedAt);\n                    Assert.AreEqual(shouldHaveVersion ? item.Version : null, filterItems[0].Version);\n                }\n                else\n                {\n                    Assert.AreEqual(0, filterItems.Count());\n                }\n\n                // Filter against createdAt\n                results = await table.Where(i => i.CreatedAt == item.CreatedAt).WithParameters(userParameters).ToEnumerableAsync();\n                filterItems = results.ToArray();\n\n                if (shouldHaveCreatedAt)\n                {\n                    Assert.AreEqual(1, filterItems.Count());\n                    Assert.AreEqual(shouldHaveCreatedAt ? item.CreatedAt : new DateTime(), filterItems[0].CreatedAt);\n                    Assert.AreEqual(shouldHaveUpdatedAt ? item.UpdatedAt : new DateTime(), filterItems[0].UpdatedAt);\n                    Assert.AreEqual(shouldHaveVersion ? item.Version : null, filterItems[0].Version);\n                }\n                else\n                {\n                    Assert.AreEqual(0, filterItems.Count());\n                }\n\n                // Filter against updatedAt\n                results = await table.Where(i => i.UpdatedAt == item.UpdatedAt).WithParameters(userParameters).ToEnumerableAsync();\n                filterItems = results.ToArray();\n\n                if (shouldHaveUpdatedAt)\n                {\n                    Assert.AreEqual(1, filterItems.Count());\n                    Assert.AreEqual(shouldHaveCreatedAt ? item.CreatedAt : new DateTime(), filterItems[0].CreatedAt);\n                    Assert.AreEqual(shouldHaveUpdatedAt ? item.UpdatedAt : new DateTime(), filterItems[0].UpdatedAt);\n                    Assert.AreEqual(shouldHaveVersion ? item.Version : null, filterItems[0].Version);\n                }\n                else\n                {\n                    Assert.AreEqual(0, filterItems.Count());\n                }\n\n                // Projection\n                var projectedResults = await table.Select(i => new { XId = i.Id, XCreatedAt = i.CreatedAt, XUpdatedAt = i.UpdatedAt, XVersion = i.Version })\n                                                  .WithParameters(userParameters)\n                                                  .ToEnumerableAsync();\n                var projectedItems = projectedResults.ToArray();\n\n                Assert.AreEqual(1, projectedItems.Count());\n                Assert.AreEqual(projectedItems[0].XId, item.Id);\n                Assert.AreNotEqual(new DateTime(), projectedItems[0].XCreatedAt);\n                Assert.AreNotEqual(new DateTime(), projectedItems[0].XUpdatedAt);\n                Assert.IsNotNull(projectedItems[0].XVersion);\n\n                // Lookup\n                var lookupItem = await table.LookupAsync(id, userParameters);\n                Assert.AreEqual(id, lookupItem.Id);\n                Assert.AreEqual(shouldHaveCreatedAt ? item.CreatedAt : new DateTime(), lookupItem.CreatedAt);\n                Assert.AreEqual(shouldHaveUpdatedAt ? item.UpdatedAt : new DateTime(), lookupItem.UpdatedAt);\n                Assert.AreEqual(shouldHaveVersion ? item.Version : null, lookupItem.Version);\n\n                // Refresh\n                var refreshItem = new ToDoWithSystemPropertiesType() { Id = id };\n                await table.RefreshAsync(refreshItem, userParameters);\n                Assert.AreEqual(id, refreshItem.Id);\n                Assert.AreEqual(shouldHaveCreatedAt ? item.CreatedAt : new DateTime(), refreshItem.CreatedAt);\n                Assert.AreEqual(shouldHaveUpdatedAt ? item.UpdatedAt : new DateTime(), refreshItem.UpdatedAt);\n                Assert.AreEqual(shouldHaveVersion ? item.Version : null, refreshItem.Version);\n\n                // Update\n                item.String = \"Hello!\";\n                await table.UpdateAsync(item, userParameters);\n                Assert.AreEqual(item.Id, items[0].Id);\n                Assert.AreEqual(1, items.Count());\n                if (shouldHaveCreatedAt)\n                {\n                    Assert.AreEqual(item.CreatedAt, items[0].CreatedAt);\n                }\n                else\n                {\n                    Assert.AreEqual(new DateTime(), item.CreatedAt);\n                }\n                if (shouldHaveUpdatedAt)\n                {\n                    Assert.IsTrue(item.UpdatedAt >= items[0].UpdatedAt);\n                }\n                if (shouldHaveVersion)\n                {\n                    Assert.IsNotNull(item.Version);\n                    Assert.AreNotEqual(item.Version, items[0].Version);\n                }\n                else\n                {\n                    Assert.IsNull(item.Version);\n                }\n\n                // Read Again\n                results = await table.WithParameters(userParameters).ToEnumerableAsync();\n                items = results.ToArray();\n                Assert.AreEqual(id, item.Id);\n                Assert.AreEqual(item.Id, items[0].Id);\n                if (shouldHaveCreatedAt)\n                {\n                    Assert.AreEqual(item.CreatedAt, items[0].CreatedAt);\n                }\n                if (shouldHaveUpdatedAt)\n                {\n                    Assert.AreEqual(item.UpdatedAt, items[0].UpdatedAt);\n                }\n                if (shouldHaveVersion)\n                {\n                    Assert.AreEqual(item.Version, items[0].Version);\n                }\n                else\n                {\n                    Assert.IsNull(item.Version);\n                }\n\n                await table.DeleteAsync(item);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task AsyncTableOperationsWithInvalidSystemPropertiesQuerystring()\n        {\n            await EnsureEmptyTableAsync<ToDoWithSystemPropertiesType>();\n\n            string id = \"an id\";\n            IMobileServiceTable<ToDoWithSystemPropertiesType> table = GetClient().GetTable<ToDoWithSystemPropertiesType>();\n            table.SystemProperties = MobileServiceSystemProperties.None;\n            ToDoWithSystemPropertiesType item = new ToDoWithSystemPropertiesType() { Id = id, String = \"a value\" };\n\n            // Insert without failing\n            await table.InsertAsync(item);\n\n            foreach (string systemProperties in SystemPropertiesTestData.InvalidSystemPropertyQueryStrings)\n            {\n                string[] systemPropertiesKeyValue = systemProperties.Split('=');\n                string key = systemPropertiesKeyValue[0];\n                string value = systemPropertiesKeyValue[1];\n                Dictionary<string, string> userParameters = new Dictionary<string, string>() { { key, value } };\n\n                // Insert\n                MobileServiceInvalidOperationException exception = null;\n                try\n                {\n                    await table.InsertAsync(item, userParameters);\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n                Assert.IsTrue(exception.Message.Contains(\"is not a supported system property.\"));\n\n                // Read\n                exception = null;\n                try\n                {\n                    IEnumerable<ToDoWithSystemPropertiesType> results = await table.WithParameters(userParameters).ToEnumerableAsync();\n                    ToDoWithSystemPropertiesType[] items = results.ToArray();\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n                Assert.IsTrue(exception.Message.Contains(\"is not a supported system property.\"));\n\n                // Filter against version\n                exception = null;\n                try\n                {\n                    IEnumerable<ToDoWithSystemPropertiesType> results = await table.Where(i => i.Version == item.Version).WithParameters(userParameters).ToEnumerableAsync();\n                    ToDoWithSystemPropertiesType[] filterItems = results.ToArray();\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n                Assert.IsTrue(exception.Message.Contains(\"is not a supported system property.\"));\n\n                // Filter against createdAt\n                exception = null;\n                try\n                {\n                    IEnumerable<ToDoWithSystemPropertiesType> results = await table.Where(i => i.CreatedAt == item.CreatedAt).WithParameters(userParameters).ToEnumerableAsync();\n                    ToDoWithSystemPropertiesType[] filterItems = results.ToArray();\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n                Assert.IsTrue(exception.Message.Contains(\"is not a supported system property.\"));\n\n                // Filter against updatedAt\n                exception = null;\n                try\n                {\n                    IEnumerable<ToDoWithSystemPropertiesType> results = await table.Where(i => i.UpdatedAt == item.UpdatedAt).WithParameters(userParameters).ToEnumerableAsync();\n                    ToDoWithSystemPropertiesType[] filterItems = results.ToArray();\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n                Assert.IsTrue(exception.Message.Contains(\"is not a supported system property.\"));\n\n                // Projection\n                exception = null;\n                try\n                {\n                    var projectedResults = await table.Select(i => new { XId = i.Id, XCreatedAt = i.CreatedAt, XUpdatedAt = i.UpdatedAt, XVersion = i.Version })\n                                  .WithParameters(userParameters)\n                                  .ToEnumerableAsync();\n                    var projectedItems = projectedResults.ToArray();\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n                Assert.IsTrue(exception.Message.Contains(\"is not a supported system property.\"));\n\n                // Lookup\n                exception = null;\n                try\n                {\n                    var lookupItem = await table.LookupAsync(id, userParameters);\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n                Assert.IsTrue(exception.Message.Contains(\"is not a supported system property.\"));\n\n                // Refresh\n                exception = null;\n                try\n                {\n                    var refreshItem = new ToDoWithSystemPropertiesType() { Id = id };\n                    await table.RefreshAsync(refreshItem, userParameters);\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n                Assert.IsTrue(exception.Message.Contains(\"is not a supported system property.\"));\n\n                // Update\n                exception = null;\n                try\n                {\n                    item.String = \"Hello!\";\n                    await table.UpdateAsync(item, userParameters);\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n                Assert.IsTrue(exception.Message.Contains(\"is not a supported system property.\"));\n            }\n\n            await table.DeleteAsync(item);\n        }\n\n        [AsyncTestMethod]\n        public async Task AsyncTableOperationsWithInvalidSystemParameterQueryString()\n        {\n            await EnsureEmptyTableAsync<ToDoWithSystemPropertiesType>();\n\n            string id = \"an id\";\n            IMobileServiceTable<ToDoWithSystemPropertiesType> table = GetClient().GetTable<ToDoWithSystemPropertiesType>();\n            table.SystemProperties = MobileServiceSystemProperties.None;\n            ToDoWithSystemPropertiesType item = new ToDoWithSystemPropertiesType() { Id = id, String = \"a value\" };\n\n            // Insert without failing\n            await table.InsertAsync(item);\n\n            string[] systemPropertiesKeyValue = SystemPropertiesTestData.InvalidSystemParameterQueryString.Split('=');\n            string key = systemPropertiesKeyValue[0];\n            string value = systemPropertiesKeyValue[1];\n            Dictionary<string, string> userParameters = new Dictionary<string, string>() { { key, value } };\n\n            // Insert\n            MobileServiceInvalidOperationException exception = null;\n            try\n            {\n                await table.InsertAsync(item, userParameters);\n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n            Assert.IsTrue(exception.Message.Contains(\"Custom query parameter names must start with a letter.\"));\n\n            // Read\n            exception = null;\n            try\n            {\n                IEnumerable<ToDoWithSystemPropertiesType> results = await table.WithParameters(userParameters).ToEnumerableAsync();\n                ToDoWithSystemPropertiesType[] items = results.ToArray();\n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n            Assert.IsTrue(exception.Message.Contains(\"Custom query parameter names must start with a letter.\"));\n\n            // Filter against version\n            exception = null;\n            try\n            {\n                IEnumerable<ToDoWithSystemPropertiesType> results = await table.Where(i => i.Version == item.Version).WithParameters(userParameters).ToEnumerableAsync();\n                ToDoWithSystemPropertiesType[] filterItems = results.ToArray();\n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n            Assert.IsTrue(exception.Message.Contains(\"Custom query parameter names must start with a letter.\"));\n\n            // Filter against createdAt\n            exception = null;\n            try\n            {\n                IEnumerable<ToDoWithSystemPropertiesType> results = await table.Where(i => i.CreatedAt == item.CreatedAt).WithParameters(userParameters).ToEnumerableAsync();\n                ToDoWithSystemPropertiesType[] filterItems = results.ToArray();\n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n            Assert.IsTrue(exception.Message.Contains(\"Custom query parameter names must start with a letter.\"));\n\n            // Filter against updatedAt\n            exception = null;\n            try\n            {\n                IEnumerable<ToDoWithSystemPropertiesType> results = await table.Where(i => i.UpdatedAt == item.UpdatedAt).WithParameters(userParameters).ToEnumerableAsync();\n                ToDoWithSystemPropertiesType[] filterItems = results.ToArray();\n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n            Assert.IsTrue(exception.Message.Contains(\"Custom query parameter names must start with a letter.\"));\n\n            // Projection\n            exception = null;\n            try\n            {\n                var projectedResults = await table.Select(i => new { XId = i.Id, XCreatedAt = i.CreatedAt, XUpdatedAt = i.UpdatedAt, XVersion = i.Version })\n                              .WithParameters(userParameters)\n                              .ToEnumerableAsync();\n                var projectedItems = projectedResults.ToArray();\n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n            Assert.IsTrue(exception.Message.Contains(\"Custom query parameter names must start with a letter.\"));\n\n            // Lookup\n            exception = null;\n            try\n            {\n                var lookupItem = await table.LookupAsync(id, userParameters);\n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n            Assert.IsTrue(exception.Message.Contains(\"Custom query parameter names must start with a letter.\"));\n\n            // Refresh\n            exception = null;\n            try\n            {\n                var refreshItem = new ToDoWithSystemPropertiesType() { Id = id };\n                await table.RefreshAsync(refreshItem, userParameters);\n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n            Assert.IsTrue(exception.Message.Contains(\"Custom query parameter names must start with a letter.\"));\n\n            // Update\n            exception = null;\n            try\n            {\n                item.String = \"Hello!\";\n                await table.UpdateAsync(item, userParameters);\n            }\n            catch (MobileServiceInvalidOperationException e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.AreEqual(exception.Response.StatusCode, HttpStatusCode.BadRequest);\n            Assert.IsTrue(exception.Message.Contains(\"Custom query parameter names must start with a letter.\"));\n\n            await table.DeleteAsync(item);\n        }\n\n        [AsyncTestMethod]\n        public async Task AsyncFilterSelectOrderingOperationsNotImpactedBySystemProperties()\n        {\n            await EnsureEmptyTableAsync<ToDoWithSystemPropertiesType>();\n\n            IMobileServiceTable<ToDoWithSystemPropertiesType> table = GetClient().GetTable<ToDoWithSystemPropertiesType>();\n            List<ToDoWithSystemPropertiesType> items = new List<ToDoWithSystemPropertiesType>();\n\n            // Insert some items\n            for (int id = 0; id < 5; id++)\n            {\n                ToDoWithSystemPropertiesType item = new ToDoWithSystemPropertiesType() { Id = id.ToString(), String = \"a value\" };\n\n                await table.InsertAsync(item);\n\n                Assert.IsNotNull(item.CreatedAt);\n                Assert.IsNotNull(item.UpdatedAt);\n                Assert.IsNotNull(item.Version);\n                items.Add(item);\n\n                await Task.Delay(10); // to separate the items in time\n            }\n\n\n            foreach (MobileServiceSystemProperties systemProperties in SystemPropertiesTestData.SystemProperties)\n            {\n                table.SystemProperties = systemProperties;\n\n                // Ordering\n                var results = await table.OrderBy(t => t.CreatedAt).ToEnumerableAsync();\n                ToDoWithSystemPropertiesType[] orderItems = results.ToArray();\n\n                for (int i = 0; i < orderItems.Length - 1; i++)\n                {\n                    Assert.IsTrue(int.Parse(orderItems[i].Id) < int.Parse(orderItems[i + 1].Id));\n                }\n\n                results = await table.OrderBy(t => t.UpdatedAt).ToEnumerableAsync();\n                orderItems = results.ToArray();\n\n                for (int i = 0; i < orderItems.Length - 1; i++)\n                {\n                    Assert.IsTrue(int.Parse(orderItems[i].Id) < int.Parse(orderItems[i + 1].Id));\n                }\n\n                results = await table.OrderBy(t => t.Version).ToEnumerableAsync();\n                orderItems = results.ToArray();\n\n                for (int i = 0; i < orderItems.Length - 1; i++)\n                {\n                    Assert.IsTrue(int.Parse(orderItems[i].Id) < int.Parse(orderItems[i + 1].Id));\n                }\n\n                // Filtering\n                results = await table.Where(t => t.CreatedAt >= items[4].CreatedAt).ToEnumerableAsync();\n                ToDoWithSystemPropertiesType[] filteredItems = results.ToArray();\n\n                for (int i = 0; i < filteredItems.Length - 1; i++)\n                {\n                    Assert.IsTrue(filteredItems[i].CreatedAt >= items[4].CreatedAt);\n                }\n\n                results = await table.Where(t => t.UpdatedAt >= items[4].UpdatedAt).ToEnumerableAsync();\n                filteredItems = results.ToArray();\n\n                for (int i = 0; i < filteredItems.Length - 1; i++)\n                {\n                    Assert.IsTrue(filteredItems[i].UpdatedAt >= items[4].UpdatedAt);\n                }\n\n                results = await table.Where(t => t.Version == items[4].Version).ToEnumerableAsync();\n                filteredItems = results.ToArray();\n\n                for (int i = 0; i < filteredItems.Length - 1; i++)\n                {\n                    Assert.IsTrue(filteredItems[i].Version == items[4].Version);\n                }\n\n                // Selection\n                var selectionResults = await table.Select(t => new { Id = t.Id, CreatedAt = t.CreatedAt }).ToEnumerableAsync();\n                var selectedItems = selectionResults.ToArray();\n\n                for (int i = 0; i < selectedItems.Length; i++)\n                {\n                    var item = items.Where(t => t.Id == selectedItems[i].Id).FirstOrDefault();\n                    Assert.IsTrue(item.CreatedAt == selectedItems[i].CreatedAt);\n                }\n\n                var selectionResults2 = await table.Select(t => new { Id = t.Id, UpdatedAt = t.UpdatedAt }).ToEnumerableAsync();\n                var selectedItems2 = selectionResults2.ToArray();\n\n                for (int i = 0; i < selectedItems2.Length; i++)\n                {\n                    var item = items.Where(t => t.Id == selectedItems2[i].Id).FirstOrDefault();\n                    Assert.IsTrue(item.UpdatedAt == selectedItems2[i].UpdatedAt);\n                }\n\n                var selectionResults3 = await table.Select(t => new { Id = t.Id, Version = t.Version }).ToEnumerableAsync();\n                var selectedItems3 = selectionResults3.ToArray();\n\n                for (int i = 0; i < selectedItems3.Length; i++)\n                {\n                    var item = items.Where(t => t.Id == selectedItems3[i].Id).FirstOrDefault();\n                    Assert.IsTrue(item.Version == selectedItems3[i].Version);\n                }\n\n            }\n\n            // Delete\n            foreach (var item in items)\n            {\n                await table.DeleteAsync(item);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithMergeConflict()\n        {\n            await EnsureEmptyTableAsync<ToDoWithSystemPropertiesType>();\n            string id = \"an id\";\n            IMobileServiceTable table = GetClient().GetTable(\"stringId_test_table\");\n            table.SystemProperties = MobileServiceSystemProperties.Version;\n\n            var item = new JObject() { { \"id\", id }, { \"String\", \"a value\" } };\n            var inserted = await table.InsertAsync(item);\n            item[\"__version\"] = \"random\";\n\n            MobileServicePreconditionFailedException expectedException = null;\n            try\n            {\n                await table.UpdateAsync(item);\n            }\n            catch (MobileServicePreconditionFailedException ex)\n            {\n                expectedException = ex;\n            }\n            Assert.IsNotNull(expectedException);\n            Assert.AreEqual(expectedException.Value[\"__version\"], inserted[\"__version\"]);\n            Assert.AreEqual(expectedException.Value[\"String\"], inserted[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWitMergeConflict_Generic()\n        {\n            await EnsureEmptyTableAsync<ToDoWithSystemPropertiesType>();\n\n            string id = \"an id\";\n            IMobileServiceTable<ToDoWithSystemPropertiesType> table = GetClient().GetTable<ToDoWithSystemPropertiesType>();\n\n            ToDoWithSystemPropertiesType item = new ToDoWithSystemPropertiesType() { Id = id, String = \"a value\" };\n            await table.InsertAsync(item);\n\n            Assert.IsNotNull(item.CreatedAt);\n            Assert.IsNotNull(item.UpdatedAt);\n            Assert.IsNotNull(item.Version);\n\n            string version = item.Version;\n\n            // Update\n            item.String = \"Hello!\";\n            await table.UpdateAsync(item);\n            Assert.IsNotNull(item.Version);\n            Assert.AreNotEqual(item.Version, version);\n\n            string newVersion = item.Version;\n\n            // Update again but with the original version\n            item.Version = version;\n            item.String = \"But wait!\";\n            MobileServicePreconditionFailedException<ToDoWithSystemPropertiesType> expectedException = null;\n            try\n            {\n                await table.UpdateAsync(item);\n            }\n            catch (MobileServicePreconditionFailedException<ToDoWithSystemPropertiesType> exception)\n            {\n                expectedException = exception;\n            }\n\n            Assert.IsNotNull(expectedException);\n            Assert.AreEqual(expectedException.Response.StatusCode, HttpStatusCode.PreconditionFailed);\n\n            string responseContent = await expectedException.Response.Content.ReadAsStringAsync();\n            JToken jtoken = responseContent.ParseToJToken(table.MobileServiceClient.SerializerSettings);\n            string serverVersion = (string)jtoken[\"__version\"];\n            string stringValue = (string)jtoken[\"String\"];\n\n            Assert.AreEqual(newVersion, serverVersion);\n            Assert.AreEqual(stringValue, \"Hello!\");\n\n            Assert.IsNotNull(expectedException.Item);\n            Assert.AreEqual(newVersion, expectedException.Item.Version);\n            Assert.AreEqual(stringValue, expectedException.Item.String);\n\n            // Update one last time with the version from the server\n            item.Version = serverVersion;\n            await table.UpdateAsync(item);\n            Assert.IsNotNull(item.Version);\n            Assert.AreEqual(item.String, \"But wait!\");\n            Assert.AreNotEqual(item.Version, serverVersion);\n\n\n            await table.DeleteAsync(item);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/FunctionalTests/ToDoTest.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    // Repurpose the random empty table\n    [DataTable(\"test_table\")]\n    public class ToDo\n    {\n        public long Id { get; set; }\n\n        [JsonProperty(PropertyName = \"col1\")]\n        public string Title { get; set; }\n\n        [JsonProperty(PropertyName = \"col5\")]\n        public bool Complete { get; set; }\n    }\n\n    [Tag(\"todo\")]\n    [Tag(\"e2e\")]\n    public class ToDoTest : FunctionalTestBase\n    {\n        [AsyncTestMethod]\n        public async Task Basics()\n        {\n            // Insert a few records\n            IMobileServiceTable<ToDo> table = GetClient().GetTable<ToDo>();\n            ToDo first = new ToDo { Title = \"ABC\", Complete = false };\n            await table.InsertAsync(first);\n            await table.InsertAsync(new ToDo { Title = \"DEF\", Complete = true });\n            await table.InsertAsync(new ToDo { Title = \"GHI\", Complete = false });\n\n            // Run a simple query and verify we get all 3 items\n            List<ToDo> items = await table.Where(t => t.Id >= first.Id).ToListAsync();\n            Assert.AreEqual(3, items.Count);\n\n            // Query and sort ascending\n            items = await table.Where(t => t.Id >= first.Id).OrderBy(t => t.Title).ToListAsync();\n            Assert.AreEqual(3, items.Count);\n            Assert.AreEqual(\"ABC\", items[0].Title);\n            Assert.AreEqual(\"DEF\", items[1].Title);\n            Assert.AreEqual(\"GHI\", items[2].Title);\n\n            // Query and sort descending\n            items = await table.Where(t => t.Id >= first.Id).OrderByDescending(t => t.Title).ToListAsync();\n            Assert.AreEqual(3, items.Count);\n            Assert.AreEqual(\"ABC\", items[2].Title);\n            Assert.AreEqual(\"DEF\", items[1].Title);\n            Assert.AreEqual(\"GHI\", items[0].Title);\n\n            // Filter to completed\n            items = await table.Where(t => t.Id >= first.Id).Where(t => t.Complete == true).ToListAsync();\n            Assert.AreEqual(1, items.Count);\n            Assert.AreEqual(\"DEF\", items[0].Title);\n\n            // Verify that inserting into a non-existant collection\n            // also throws an error\n            try\n            {\n                await GetClient().GetTable(\"notreal\").ReadAsync(null);\n            }\n            catch (InvalidOperationException ex)\n            {\n                Assert.Contains(ex.Message, \"notreal\");\n            }\n\n            // Verify we can insert non-latin characters as a TODO item\n            string title = \"ÃÇßÑᾆΏ\";\n            ToDo item = new ToDo { Title = title };\n            await table.InsertAsync(item);\n            Assert.AreEqual(title, (await table.LookupAsync(item.Id)).Title);\n        }\n\n        [AsyncTestMethod]\n        public async Task UseToDo()\n        {\n            // Insert a few records\n            IMobileServiceTable<ToDo> table = GetClient().GetTable<ToDo>();\n            ToDo first = new ToDo { Title = \"Get Milk\", Complete = false };\n            await table.InsertAsync(first);\n            await table.InsertAsync(new ToDo { Title = \"Pick up dry cleaning\", Complete = false });\n\n            // Run a simple query and verify we get both items\n            List<ToDo> items = await table.Where(i => i.Id >= first.Id).ToListAsync();\n            Assert.AreEqual(2, items.Count);\n\n            // Add another item\n            await table.InsertAsync(new ToDo { Title = \"Submit TPS report\", Complete = false });\n\n            // Check off the first item\n            ToDo milk = items.Where(t => t.Title.Contains(\"Milk\")).FirstOrDefault();\n            milk.Complete = true;\n            await table.UpdateAsync(milk);\n\n            // Get the remaining items using a LINQ query\n            IEnumerable<ToDo> remaining = await table.ReadAsync(\n                from t in table\n                where t.Complete == false && t.Id >= first.Id\n                select t);\n            Assert.AreEqual(2, remaining.Count());\n\n            // Delete the first item\n            await table.DeleteAsync(milk);\n            items = await table.Where(t => t.Id >= first.Id).ToListAsync();\n            Assert.AreEqual(2, items.Count);\n\n            // Change the TPS report item without using the object\n            // (to simulate the server object being changed by someone\n            // else)\n            ToDo tps = items.Where(t => t.Title.Contains(\"TPS\")).FirstOrDefault();\n            JObject jobject = new JObject();\n            jobject[\"id\"] = (int)tps.Id;\n            jobject[\"col1\"] = tps.Title + \" using the new cover sheet\";\n            await table.UpdateAsync(jobject);\n            await table.RefreshAsync(tps);\n            Assert.Contains(tps.Title, \"cover sheet\");\n        }\n\n#pragma warning disable 618 // for using obsolete ITotalCountProvider\n        [AsyncTestMethod]\n        [Tag(\"TotalCount\")]\n        public async Task TotalCountBasics()\n        {\n            // Insert a few records\n            IMobileServiceTable<ToDo> table = GetClient().GetTable<ToDo>();\n            ToDo first = new ToDo { Title = \"ABC\", Complete = false };\n            await table.InsertAsync(first);\n            await table.InsertAsync(new ToDo { Title = \"DEF\", Complete = true });\n            await table.InsertAsync(new ToDo { Title = \"GHI\", Complete = false });\n\n            ITotalCountProvider countProvider = null;\n            IMobileServiceTableQuery<ToDo> query = table.Where(t => t.Id >= first.Id);\n\n            // Run a simple query and verify we get all 3 items, but the\n            // TotalCount is not provided.\n            List<ToDo> items = await query.ToListAsync();\n            countProvider = items as ITotalCountProvider;\n            Assert.AreEqual(3, items.Count);\n            Assert.IsNotNull(countProvider);\n            Assert.AreEqual(-1L, countProvider.TotalCount);\n\n            IEnumerable<ToDo> sequence = await query.ToEnumerableAsync();\n            countProvider = sequence as ITotalCountProvider;\n            Assert.IsNotNull(countProvider);\n            Assert.AreEqual(-1L, countProvider.TotalCount);\n\n            // Now use IncludeTotalCount and make sure we get the expected\n            // number of results\n            query = query.IncludeTotalCount();\n            items = await query.ToListAsync();\n            countProvider = items as ITotalCountProvider;\n            Assert.AreEqual(3, items.Count);\n            Assert.IsNotNull(countProvider);\n            Assert.AreEqual(3L, countProvider.TotalCount);\n\n            sequence = await query.ToEnumerableAsync();\n            countProvider = sequence as ITotalCountProvider;\n            Assert.IsNotNull(countProvider);\n            Assert.AreEqual(3L, countProvider.TotalCount);\n\n            // Verify that IncludeTotalCount is correctly propagated with\n            // projections\n            List<string> titles = await query.Select(t => t.Title).ToListAsync();\n            countProvider = titles as ITotalCountProvider;\n            Assert.AreEqual(3, titles.Count);\n            Assert.IsNotNull(countProvider);\n            Assert.AreEqual(3L, countProvider.TotalCount);\n        }\n\n        [AsyncTestMethod]\n        [Tag(\"TotalCount\")]\n        public async Task TotalCountWithTooManyElements()\n        {\n            // Insert a few records\n            IMobileServiceTable<ToDo> table = GetClient().GetTable<ToDo>();\n\n            ToDo first = new ToDo { Title = \"TotalCount1\", Complete = false };\n            await table.InsertAsync(first);\n\n            long totalCount = 65L;\n            for (int i = 2; i <= totalCount; i++)\n            {\n                await table.InsertAsync(new ToDo { Title = \"TotalCount\" + i, Complete = true });\n            }\n\n            // Get the total count and make sure we've got more than just 50\n            // items in the total count\n            List<ToDo> items = await table.Where(t => t.Id >= first.Id).IncludeTotalCount().ToListAsync();\n            ITotalCountProvider countProvider = items as ITotalCountProvider;\n            Assert.AreEqual(50, items.Count);\n            Assert.IsNotNull(countProvider);\n            Assert.AreEqual(totalCount, countProvider.TotalCount);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/Microsoft.WindowsAzure.Mobile.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{D8BBC92A-B213-463B-911D-3A106F91D5F9}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.Test</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Test</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <TargetFrameworkProfile>Profile259</TargetFrameworkProfile>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <RunCodeAnalysis>true</RunCodeAnalysis>\n    <CodeAnalysisAdditionalOptions>\n     /assemblyCompareMode:StrongNameIgnoringVersion      \n    </CodeAnalysisAdditionalOptions>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .NET Framework is automatically included -->\n    <None Include=\"packages.config\" />\n    <Compile Include=\"SerializationTypes\\JObjectTypes.cs\" />\n    <Compile Include=\"SerializationTypes\\TypeWithConstructor.cs\" />\n    <Compile Include=\"UnitTests\\Http\\HttpUtilityTests.cs\" />\n    <Compile Include=\"UnitTests\\OData\\ODataExpressionParser.Test.cs\" />\n    <Compile Include=\"UnitTests\\Push\\LocalStorageMananger.Test.cs\" />\n    <Compile Include=\"UnitTests\\Table\\MobileServiceObjectReaderTests.cs\" />\n    <Compile Include=\"UnitTests\\Table\\Sync\\MobileServiceSyncContext.Test.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AssertEx.cs\" />\n    <Compile Include=\"FunctionalTests\\DataSourceTest.cs\" />\n    <Compile Include=\"FunctionalTests\\Table\\MobileServiceTableTest.cs\" />\n    <Compile Include=\"Mocks\\MobileServiceSyncHandlerMock.cs\" />\n    <Compile Include=\"Mocks\\MobileServiceLocalStoreMock.cs\" />\n    <Compile Include=\"Mocks\\MobileServiceTableQueryMock.cs\" />\n    <Compile Include=\"SerializationTypes\\ComplexType.cs\" />\n    <Compile Include=\"SerializationTypes\\ConverterType.cs\" />\n    <Compile Include=\"SerializationTypes\\SystemPropertyTypes.cs\" />\n    <Compile Include=\"SerializationTypes\\InterfacePropertyType.cs\" />\n    <Compile Include=\"SerializationTypes\\TestConverter.cs\" />\n    <Compile Include=\"TestData\\IdTestData.cs\" />\n    <Compile Include=\"TestData\\SystemPropertiesTestData.cs\" />\n    <Compile Include=\"TestPlatform\\IPushTestUtility.cs\" />\n    <Compile Include=\"TestPlatform\\ITestPlatform.cs\" />\n    <Compile Include=\"TestPlatform\\MissingPushTestUtility.cs\" />\n    <Compile Include=\"TestPlatform\\MissingTestPlatform.cs\" />\n    <Compile Include=\"TestPlatform\\TestPlatform.cs\" />\n    <Compile Include=\"UnitTests\\Collections\\MobileServiceCollection.Test.cs\" />\n    <Compile Include=\"UnitTests\\HttpHandlers\\TestHttpHandler.cs\" />\n    <Compile Include=\"FunctionalTests\\BloggingTest.cs\" />\n    <Compile Include=\"FunctionalTests\\Book.cs\" />\n    <Compile Include=\"FunctionalTests\\DateTests.cs\" />\n    <Compile Include=\"FunctionalTests\\FunctionalTestBase.cs\" />\n    <Compile Include=\"FunctionalTests\\QueryingTest.cs\" />\n    <Compile Include=\"FunctionalTests\\ToDoTest.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SerializationTypes\\BaseTypes.cs\" />\n    <Compile Include=\"SerializationTypes\\DataContractDerivedDataContractType.cs\" />\n    <Compile Include=\"SerializationTypes\\DataContractDerivedJsonPropertyType.cs\" />\n    <Compile Include=\"SerializationTypes\\DataContractDerivedPocoType.cs\" />\n    <Compile Include=\"SerializationTypes\\DataContractType.cs\" />\n    <Compile Include=\"SerializationTypes\\DataMemberType.cs\" />\n    <Compile Include=\"SerializationTypes\\DataTableType.cs\" />\n    <Compile Include=\"SerializationTypes\\DerivedDuplicateKeyType.cs\" />\n    <Compile Include=\"SerializationTypes\\DuplicateKeyType.cs\" />\n    <Compile Include=\"SerializationTypes\\IdTypes.cs\" />\n    <Compile Include=\"SerializationTypes\\JsonContainerType.cs\" />\n    <Compile Include=\"SerializationTypes\\JsonPropertyDerivedDataContractType.cs\" />\n    <Compile Include=\"SerializationTypes\\JsonPropertyDerivedJsonPropertyType.cs\" />\n    <Compile Include=\"SerializationTypes\\JsonPropertyType.cs\" />\n    <Compile Include=\"SerializationTypes\\PocoDerivedDataContractType.cs\" />\n    <Compile Include=\"SerializationTypes\\PocoDerivedJsonPropertyType.cs\" />\n    <Compile Include=\"SerializationTypes\\PocoDerivedPocoType.cs\" />\n    <Compile Include=\"SerializationTypes\\PocoType.cs\" />\n    <Compile Include=\"SerializationTypes\\SerializationTypeUtility.cs\" />\n    <Compile Include=\"SerializationTypes\\SimpleTreeType.cs\" />\n    <Compile Include=\"UnitTests\\HttpHandlers\\ComplexDelegatingHandler.cs\" />\n    <Compile Include=\"UnitTests\\MobileServiceFeatures.Test.cs\" />\n    <Compile Include=\"UnitTests\\MobileServiceClient.Test.cs\" />\n    <Compile Include=\"UnitTests\\Authentication\\MobileServiceTokenAuthenticationTests.cs\" />\n    <Compile Include=\"UnitTests\\Push\\PushHttpClient.Test.cs\" />\n    <Compile Include=\"UnitTests\\Table\\MobileServiceTable.Test.cs\" />\n    <Compile Include=\"UnitTests\\MobileServiceUser.Test.cs\" />\n    <Compile Include=\"UnitTests\\MobileServiceUrlBuilder.Test.cs\" />\n    <Compile Include=\"UnitTests\\Table\\MobileServiceTable.Generic.Test.cs\" />\n    <Compile Include=\"UnitTests\\Table\\Query\\MemberInfoKey.Test.cs\" />\n    <Compile Include=\"UnitTests\\Table\\Query\\ZumoQuery.Test.cs\" />\n    <Compile Include=\"UnitTests\\Table\\Serialization\\MobileServiceIsoDateTimeConverter.Test.cs\" />\n    <Compile Include=\"UnitTests\\Table\\Serialization\\MobileServiceContractResolver.Test.cs\" />\n    <Compile Include=\"UnitTests\\Table\\Serialization\\MobileServiceSerializer.Test.cs\" />\n    <Compile Include=\"UnitTests\\Table\\Serialization\\MobileServicePrecisionCheckConverter.Test.cs\" />\n    <Compile Include=\"UnitTests\\Table\\Sync\\MobileServiceSyncTable.Generic.Test.cs\" />\n    <Compile Include=\"UnitTests\\Table\\Sync\\MobileServiceSyncTable.Test.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{a2500bd2-a9a2-4085-9978-dee3675b02dd}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\Portable\\$(TargetFrameworkVersion)\\Microsoft.Portable.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/Mocks/MobileServiceLocalStoreMock.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Newtonsoft.Json.Linq;\nusing MockTable = System.Collections.Generic.Dictionary<string, Newtonsoft.Json.Linq.JObject>;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    class MobileServiceLocalStoreMock : IMobileServiceLocalStore\n    {\n        public readonly Dictionary<string, MockTable> TableMap = new Dictionary<string, MockTable>();\n\n        public List<MobileServiceTableQueryDescription> ReadQueries { get; private set; }\n        public List<MobileServiceTableQueryDescription> DeleteQueries { get; private set; }\n\n        public Queue<string> ReadResponses { get; private set; }\n\n        public MobileServiceLocalStoreMock()\n        {\n            this.ReadQueries = new List<MobileServiceTableQueryDescription>();\n            this.DeleteQueries = new List<MobileServiceTableQueryDescription>();\n            this.ReadResponses = new Queue<string>();\n        }\n\n        public Func<MobileServiceTableQueryDescription, JToken> ReadAsyncFunc { get; set; }\n\n        public Task InitializeAsync()\n        {\n            return Task.FromResult(0);\n        }\n\n        public Task<JToken> ReadAsync(MobileServiceTableQueryDescription query)\n        {\n            if (query.TableName == MobileServiceLocalSystemTables.OperationQueue || query.TableName == MobileServiceLocalSystemTables.SyncErrors)\n            {\n                MockTable table = GetTable(query.TableName);\n\n                IEnumerable<JObject> items = table.Values;\n                if (query.TableName == MobileServiceLocalSystemTables.OperationQueue)\n                {\n                    string odata = query.ToODataString();\n                    if (odata.Contains(\"$orderby=sequence desc\")) // the query to take total count and max sequence\n                    {\n                        items = items.OrderBy(o => o.Value<long>(\"sequence\"));\n                    }\n                    else if (odata.StartsWith(\"$filter=((tableKind eq \") && odata.Contains(\"(sequence gt \"))\n                    {\n                        var sequenceCompareNode = ((BinaryOperatorNode)query.Filter).RightOperand as BinaryOperatorNode;\n\n                        items = items.Where(o => o.Value<long>(\"sequence\") > (long)((ConstantNode)sequenceCompareNode.RightOperand).Value);\n                        items = items.OrderBy(o => o.Value<long>(\"sequence\"));\n                    }\n                    else if (odata.Contains(\"(sequence gt \")) // the query to get next operation\n                    {\n                        items = items.Where(o => o.Value<long>(\"sequence\") > (long)((ConstantNode)((BinaryOperatorNode)query.Filter).RightOperand).Value);\n                        items = items.OrderBy(o => o.Value<long>(\"sequence\"));\n                    }\n                    else if (odata.Contains(\") and (itemId eq '\")) // the query to retrive operation by item id\n                    {\n                        string targetTable = ((ConstantNode)((BinaryOperatorNode)((BinaryOperatorNode)query.Filter).LeftOperand).RightOperand).Value.ToString();\n                        string targetId = ((ConstantNode)((BinaryOperatorNode)((BinaryOperatorNode)query.Filter).RightOperand).RightOperand).Value.ToString();\n                        items = items.Where(o => o.Value<string>(\"itemId\") == targetId && o.Value<string>(\"tableName\") == targetTable);\n                    }\n                    else if (odata.Contains(\"$filter=(tableName eq '\"))\n                    {\n                        items = items.Where(o => o.Value<string>(\"tableName\") == ((ConstantNode)((BinaryOperatorNode)query.Filter).RightOperand).Value.ToString());\n                    }\n                }\n\n                if (query.IncludeTotalCount)\n                {\n                    return Task.FromResult<JToken>(new JObject() { { \"count\", items.Count() }, { \"results\", new JArray(items) } });\n                }\n\n                return Task.FromResult<JToken>(new JArray(items));\n            }\n\n            this.ReadQueries.Add(query);\n            JToken response;\n\n            if (ReadAsyncFunc != null)\n            {\n                response = ReadAsyncFunc(query);\n            }\n            else\n            {\n                response = JToken.Parse(ReadResponses.Dequeue());\n            }\n\n            return Task.FromResult(response);\n        }\n\n        public Task DeleteAsync(MobileServiceTableQueryDescription query)\n        {\n            this.DeleteQueries.Add(query);\n            GetTable(query.TableName).Clear();\n            return Task.FromResult(0);\n        }\n\n        public Task UpsertAsync(string tableName, IEnumerable<JObject> items, bool fromServer)\n        {\n            foreach (JObject item in items)\n            {\n                MockTable table = GetTable(tableName);\n                table[item.Value<string>(\"id\")] = item;\n            }\n            return Task.FromResult(0);\n        }\n\n        public Task DeleteAsync(string tableName, IEnumerable<string> ids)\n        {\n            foreach (string id in ids)\n            {\n                MockTable table = GetTable(tableName);\n                table.Remove(id);\n            }\n            return Task.FromResult(0);\n        }\n\n        public virtual Task<JObject> LookupAsync(string tableName, string id)\n        {\n            MockTable table = GetTable(tableName);\n            JObject item;\n            table.TryGetValue(id, out item);\n            return Task.FromResult(item);\n        }\n\n        private Dictionary<string, JObject> GetTable(string tableName)\n        {\n            MockTable table;\n            if (!this.TableMap.TryGetValue(tableName, out table))\n            {\n                this.TableMap[tableName] = table = new MockTable();\n            }\n            return table;\n        }\n\n        public void Dispose()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/Mocks/MobileServiceSyncHandlerMock.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    class MobileServiceSyncHandlerMock: MobileServiceSyncHandler\n    {\n        public Func<IMobileServiceTableOperation, Task<JObject>> TableOperationAction { get; set; }\n        public Func<MobileServicePushCompletionResult, Task> PushCompleteAction { get; set; }\n\n        public MobileServicePushCompletionResult PushCompletionResult { get; set; }\n\n        public override Task OnPushCompleteAsync(MobileServicePushCompletionResult result)\n        {\n            this.PushCompletionResult = result;\n            if (this.PushCompleteAction != null)\n            {\n                return PushCompleteAction(result);\n            }\n            else\n            {\n                return base.OnPushCompleteAsync(result);\n            }\n        }\n\n        public override Task<JObject> ExecuteTableOperationAsync(IMobileServiceTableOperation operation)\n        {\n            if (TableOperationAction != null)\n            {\n                return this.TableOperationAction(operation);\n            }\n            else\n            {\n                return base.ExecuteTableOperationAsync(operation);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/Mocks/MobileServiceTableQueryMock.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Threading.Tasks;\n\n#if XAMARIN\nusing TaskEx=System.Threading.Tasks.Task;\n#endif\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class MobileServiceTableQueryMock<T> : IMobileServiceTableQuery<T>\n    {\n        public bool EnumerableAsyncThrowsException { get; set; }\n\n        public IMobileServiceTableQuery<T> IncludeTotalCount()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> IncludeDeleted()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> OrderBy<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> OrderByDescending<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<U> Select<U>(Expression<Func<T, U>> selector)\n        {\n            throw new NotImplementedException();\n        }\n\n        private int skip;\n\n        public IMobileServiceTableQuery<T> Skip(int count)\n        {\n            skip += count;\n            return this;\n        }\n\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Design\", \"CA1065:DoNotRaiseExceptionsInUnexpectedLocations\")]\n        public IMobileServiceTable<T> Table\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        private int take;\n\n        public IMobileServiceTableQuery<T> Take(int count)\n        {\n            take = count;\n            return this;\n        }\n\n        public IMobileServiceTableQuery<T> ThenBy<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> ThenByDescending<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<IEnumerable<T>> ToEnumerableAsync()\n        {\n            if (EnumerableAsyncThrowsException)\n            {\n                throw new Exception();\n            }\n            return Task.Run(() => Task.Delay(500).ContinueWith(t => (IEnumerable<T>)new QueryResultEnumerable<T>(2, null, new T[] { Activator.CreateInstance<T>(), Activator.CreateInstance<T>() })));\n        }\n\n        public Task<List<T>> ToListAsync()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> Where(Expression<Func<T, bool>> predicate)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> WithParameters(IDictionary<string, string> parameters)\n        {\n            throw new NotImplementedException();\n        }\n\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Design\", \"CA1065:DoNotRaiseExceptionsInUnexpectedLocations\")]\n        public bool RequestTotalCount\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Design\", \"CA1065:DoNotRaiseExceptionsInUnexpectedLocations\")]\n        public IDictionary<string, string> Parameters\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n\n        public IQueryable<T> Query\n        {\n            get { return Enumerable.Empty<T>().AsQueryable(); }\n            set { }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Resources;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Microsoft.WindowsAzure.MobileServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.MobileServices.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.MobileServices.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: NeutralResourcesLanguage(\"en\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: Preserve]"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/BaseTypes.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class BoolType\n    {\n        public int Id { get; set; }\n        public bool Bool { get; set; }\n    }\n\n    public class ByteType\n    {\n        public int Id { get; set; }\n        public byte Byte { get; set; }\n    }\n\n    public class BytesType\n    {\n        public string Id { get; set; }\n\n        public byte[] Data { get; set; }\n    }\n\n    public class SByteType\n    {\n        public int Id { get; set; }\n        public sbyte SByte { get; set; }\n    }\n\n    public class UShortType\n    {\n        public int Id { get; set; }\n        public ushort UShort { get; set; }\n    }\n\n    public class ShortType\n    {\n        public int Id { get; set; }\n        public short Short { get; set; }\n    }\n\n    public class UIntType\n    {\n        public int Id { get; set; }\n        public uint UInt { get; set; }\n    }\n\n    public class IntType\n    {\n        public int Id { get; set; }\n    }\n\n    public class ULongType\n    {\n        public int Id { get; set; }\n        public ulong ULong { get; set; }\n    }\n\n    public class LongType\n    {\n        public int Id { get; set; }\n        public long Long { get; set; }\n    }\n\n    public class FloatType\n    {\n        public int Id { get; set; }\n        public float Float { get; set; }\n    }\n\n    public class DoubleType\n    {\n        public int Id { get; set; }\n        public double Double { get; set; }\n    }\n\n    public class DecimalType\n    {\n        public int Id { get; set; }\n        public decimal Decimal { get; set; }\n    }\n\n    public class StringType\n    {\n        public int Id { get; set; }\n        public string String { get; set; }\n    }\n\n    public class CharType\n    {\n        public int Id { get; set; }\n        public char Char { get; set; }\n    }\n\n    public class DateTimeType\n    {\n        public int Id { get; set; }\n        public DateTime DateTime { get; set; }\n    }\n\n    public class DateTimeOffsetType\n    {\n        public int Id { get; set; }\n        public DateTimeOffset DateTimeOffset { get; set; }\n    }\n\n    public class NullableType\n    {\n        public int Id { get; set; }\n        public double? Nullable { get; set; }\n    }\n\n    public class UriType\n    {\n        public int Id { get; set; }\n        public Uri Uri { get; set; }\n    }\n\n    public class EnumType\n    {\n        public int Id { get; set; }\n        public Enum1 Enum1 { get; set; }\n        public Enum2 Enum2 { get; set; }\n        public Enum3 Enum3 { get; set; }\n        public Enum4 Enum4 { get; set; }\n        public Enum5 Enum5 { get; set; }\n        public Enum6 Enum6 { get; set; }\n    }\n\n    public enum Enum1\n    {\n        Enum1Value1,\n        Enum1Value2,\n    }\n\n    public enum Enum2 : short\n    {\n        Enum2Value1,\n        Enum2Value2,\n    }\n\n    [Flags]\n    public enum Enum3\n    {\n        Enum3Value1 = 0x01,\n        Enum3Value2 = 0x02,\n    }\n\n    public enum Enum4 : byte\n    {\n        Enum4Value1,\n        Enum4Value2,\n    }\n\n    public enum Enum5 : sbyte\n    {\n        Enum5Value1,\n        Enum5Value2,\n    }\n\n    public enum Enum6 : ulong\n    {\n        Enum6Value1 = 4,\n        Enum6Value2 = 5,\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/ComplexType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n\n    public class ComplexType\n    {\n        public long Id { get; set; }\n\n        public string Name { get; set; }\n\n        public MissingIdType Child { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/ConverterType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class ConverterType\n    {\n        public int id;\n        [JsonConverter(typeof(TestConverter))]\n        public int Number;\n    }  \n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/DataContractDerivedDataContractType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [DataContract]\n    public class DataContractDerivedDataContractType : DataContractType\n    {\n        public DataContractDerivedDataContractType()\n            : this(null)\n        {\n        }\n\n        public DataContractDerivedDataContractType(string valueToSet, bool onlySetSerializableMembers = false)\n            :base(valueToSet, onlySetSerializableMembers)\n        {\n            this.DerivedInternalFieldNamedDataMember = null;\n            this.DerivedPrivateFieldNamedDataMember = null;\n            this.DerivedInternalField = null;\n            this.DerivedPrivateField = null;\n            this.DerivedInternalFieldSansAttribute = null;\n            this.DerivedPrivateFieldSansAttribute = null;\n\n            if (valueToSet != null)\n            {\n                this.DerivedInternalField = \"DerivedInternalField\" + valueToSet;\n                this.DerivedInternalFieldNamedDataMember = \"DerivedInternalFieldNamedDataMember\" + valueToSet;\n                this.DerivedInternalProperty = \"DerivedInternalProperty\" + valueToSet;\n                this.DerivedInternalPropertyNamedDataMember = \"DerivedInternalPropertyNamedDataMember\" + valueToSet;\n                this.DerivedPrivateField = \"DerivedPrivateField\" + valueToSet;\n                this.DerivedPrivateFieldNamedDataMember = \"DerivedPrivateFieldNamedDataMember\" + valueToSet;\n                this.DerivedPrivateProperty = \"DerivedPrivateProperty\" + valueToSet;\n                this.DerivedPrivatePropertyNamedDataMember = \"DerivedPrivatePropertyNamedDataMember\" + valueToSet;\n                this.DerivedPublicField = \"DerivedPublicField\" + valueToSet;\n                this.DerivedPublicFieldNamedDataMember = \"DerivedPublicFieldNamedDataMember\" + valueToSet;\n                this.DerivedPublicProperty = \"DerivedPublicProperty\" + valueToSet;\n                this.DerivedPublicPropertyNamedDataMember = \"DerivedPublicPropertyNamedDataMember\" + valueToSet;\n                \n                if (!onlySetSerializableMembers)\n                {\n                    this.DerivedInternalFieldSansAttribute = \"DerivedInternalFieldSansAttribute\" + valueToSet;\n                    this.DerivedInternalPropertySansAttribute = \"DerivedInternalPropertySansAttribute\" + valueToSet;\n                    this.DerivedPrivateFieldSansAttribute = \"DerivedPrivateFieldSansAttribute\" + valueToSet;\n                    this.DerivedPrivatePropertySansAttribute = \"DerivedPrivatePropertySansAttribute\" + valueToSet;\n                    this.DerivedPublicFieldSansAttribute = \"DerivedPublicFieldSansAttribute\" + valueToSet;\n                    this.DerivedPublicPropertySansAttribute = \"DerivedPublicPropertySansAttribute\" + valueToSet;\n                }\n            }\n        }\n\n        [DataMember(Name = \"DerivedPublicPropertyDataMember\")]\n        public string DerivedPublicPropertyNamedDataMember { get; set; }\n\n        [DataMember(Name = \"DerivedInternalPropertyDataMember\")]\n        internal string DerivedInternalPropertyNamedDataMember { get; set; }\n\n        [DataMember(Name = \"DerivedPrivatePropertyDataMember\")]\n        private string DerivedPrivatePropertyNamedDataMember { get; set; }\n\n        [DataMember(Name = \"DerivedPublicFieldDataMember\")]\n        public string DerivedPublicFieldNamedDataMember;\n\n        [DataMember(Name = \"DerivedInternalFieldDataMember\")]\n        internal string DerivedInternalFieldNamedDataMember;\n\n        [DataMember(Name = \"DerivedPrivateFieldDataMember\")]\n        private string DerivedPrivateFieldNamedDataMember;\n\n        [DataMember]\n        public string DerivedPublicProperty { get; set; }\n\n        [DataMember]\n        internal string DerivedInternalProperty { get; set; }\n\n        [DataMember]\n        private string DerivedPrivateProperty { get; set; }\n\n        [DataMember]\n        public string DerivedPublicField;\n\n        [DataMember]\n        internal string DerivedInternalField;\n\n        [DataMember]\n        private string DerivedPrivateField;\n\n        public string DerivedPublicPropertySansAttribute { get; set; }\n        internal string DerivedInternalPropertySansAttribute { get; set; }\n        private string DerivedPrivatePropertySansAttribute { get; set; }\n\n        public string DerivedPublicPropertyGetOnlySansAttribute { get { return \"DerivedPublicPropertyGetOnlySansAttribute\"; } }\n        internal string DerivedInternalPropertyGetOnlySansAttribute { get { return \"DerivedInternalPropertyGetOnlySansAttribute\"; } }\n        private string DerivedPrivatePropertyGetOnlySansAttributer { get { return \"DerivedPrivatePropertyGetOnlySansAttributer\"; } }\n\n        public string DerivedPublicFieldSansAttribute;\n        internal string DerivedInternalFieldSansAttribute;\n        private string DerivedPrivateFieldSansAttribute;\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/DataContractDerivedJsonPropertyType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Runtime.Serialization;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [DataContract]\n    public class DataContractDerivedJsonPropertyType : DataContractType\n    {\n        public DataContractDerivedJsonPropertyType()\n            : this(null)\n        {\n        }\n\n        public DataContractDerivedJsonPropertyType(string valueToSet, bool onlySetSerializableMembers = false)\n            : base(valueToSet, onlySetSerializableMembers)\n        {\n            this.DerivedInternalFieldNamedJsonProperty = null;\n            this.DerivedPrivateFieldNamedJsonProperty = null;\n            this.DerivedInternalField = null;\n            this.DerivedPrivateField = null;\n            this.DerivedInternalFieldSansAttribute = null;\n            this.DerivedPrivateFieldSansAttribute = null;\n\n            if (valueToSet != null)\n            {\n                this.DerivedInternalField = \"DerivedInternalField\" + valueToSet;\n                this.DerivedInternalFieldNamedJsonProperty = \"DerivedInternalFieldNamedJsonProperty\" + valueToSet;\n                this.DerivedInternalProperty = \"DerivedInternalProperty\" + valueToSet;\n                this.DerivedInternalPropertyNamedJsonProperty = \"DerivedInternalPropertyNamedJsonProperty\" + valueToSet;\n                this.DerivedPrivateField = \"DerivedPrivateField\" + valueToSet;\n                this.DerivedPrivateFieldNamedJsonProperty = \"DerivedPrivateFieldNamedJsonProperty\" + valueToSet;\n                this.DerivedPrivateProperty = \"DerivedPrivateProperty\" + valueToSet;\n                this.DerivedPrivatePropertyNamedJsonProperty = \"DerivedPrivatePropertyNamedJsonProperty\" + valueToSet;\n                this.DerivedPublicField = \"DerivedPublicField\" + valueToSet;\n                this.DerivedPublicFieldNamedJsonProperty = \"DerivedPublicFieldNamedJsonProperty\" + valueToSet;\n                this.DerivedPublicProperty = \"DerivedPublicProperty\" + valueToSet;\n                this.DerivedPublicPropertyNamedJsonProperty = \"DerivedPublicPropertyNamedJsonProperty\" + valueToSet;\n                \n                if (!onlySetSerializableMembers)\n                {\n                    this.DerivedInternalFieldSansAttribute = \"DerivedInternalFieldSansAttribute\" + valueToSet;\n                    this.DerivedInternalPropertySansAttribute = \"DerivedInternalPropertySansAttribute\" + valueToSet;\n                    this.DerivedPrivateFieldSansAttribute = \"DerivedPrivateFieldSansAttribute\" + valueToSet;\n                    this.DerivedPrivatePropertySansAttribute = \"DerivedPrivatePropertySansAttribute\" + valueToSet;\n                    this.DerivedPublicFieldSansAttribute = \"DerivedPublicFieldSansAttribute\" + valueToSet;\n                    this.DerivedPublicPropertySansAttribute = \"DerivedPublicPropertySansAttribute\" + valueToSet;\n                }\n            }\n        }\n\n        [JsonProperty(PropertyName = \"DerivedPublicPropertyJsonProperty\")]\n        public string DerivedPublicPropertyNamedJsonProperty { get; set; }\n\n        [JsonProperty(PropertyName = \"DerivedInternalPropertyJsonProperty\")]\n        internal string DerivedInternalPropertyNamedJsonProperty { get; set; }\n\n        [JsonProperty(PropertyName = \"DerivedPrivatePropertyJsonProperty\")]\n        private string DerivedPrivatePropertyNamedJsonProperty { get; set; }\n\n        [JsonProperty(PropertyName = \"DerivedPublicFieldJsonProperty\")]\n        public string DerivedPublicFieldNamedJsonProperty;\n\n        [JsonProperty(PropertyName = \"DerivedInternalFieldJsonProperty\")]\n        internal string DerivedInternalFieldNamedJsonProperty;\n\n        [JsonProperty(PropertyName = \"DerivedPrivateFieldJsonProperty\")]\n        private string DerivedPrivateFieldNamedJsonProperty;\n\n        [JsonProperty]\n        public string DerivedPublicProperty { get; set; }\n\n        [JsonProperty]\n        internal string DerivedInternalProperty { get; set; }\n\n        [JsonProperty]\n        private string DerivedPrivateProperty { get; set; }\n\n        [JsonProperty]\n        public string DerivedPublicField;\n\n        [JsonProperty]\n        internal string DerivedInternalField;\n\n        [JsonProperty]\n        private string DerivedPrivateField;\n\n        public string DerivedPublicPropertySansAttribute { get; set; }\n        internal string DerivedInternalPropertySansAttribute { get; set; }\n        private string DerivedPrivatePropertySansAttribute { get; set; }\n\n        public string DerivedPublicPropertyGetOnlySansAttribute { get { return \"DerivedPublicPropertyGetOnlySansAttribute\"; } }\n        internal string DerivedInternalPropertyGetOnlySansAttribute { get { return \"DerivedInternalPropertyGetOnlySansAttribute\"; } }\n        private string DerivedPrivatePropertyGetOnlySansAttributer { get { return \"DerivedPrivatePropertyGetOnlySansAttributer\"; } }\n\n        public string DerivedPublicFieldSansAttribute;\n        internal string DerivedInternalFieldSansAttribute;\n        private string DerivedPrivateFieldSansAttribute;\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/DataContractDerivedPocoType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class DataContractDerivedPocoType : DataContractType\n    {\n        public DataContractDerivedPocoType()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/DataContractType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [DataContract(Name=\"DataContractNameFromAttributeType\")]\n    public class DataContractType\n    {\n        public DataContractType()\n            : this(null)\n        {\n        }\n\n        public DataContractType(string valueToSet, bool onlySetSerializableMembers = false)\n        {\n            this.InternalFieldNamedDataMember = null;\n            this.PrivateFieldNamedDataMember = null;\n            this.InternalField = null;\n            this.PrivateField = null;\n            this.InternalFieldSansAttribute = null;\n            this.PrivateFieldSansAttribute = null;\n\n            if (valueToSet != null)\n            {\n                this.InternalField = \"InternalField\" + valueToSet;\n                this.InternalFieldNamedDataMember = \"InternalFieldNamedDataMember\" + valueToSet;               \n                this.InternalProperty = \"InternalProperty\" + valueToSet;\n                this.InternalPropertyNamedDataMember = \"InternalPropertyNamedDataMember\" + valueToSet;              \n                this.PrivateField = \"PrivateField\" + valueToSet;\n                this.PrivateFieldNamedDataMember = \"PrivateFieldNamedDataMember\" + valueToSet;                \n                this.PrivateProperty = \"PrivateProperty\" + valueToSet;\n                this.PrivatePropertyNamedDataMember = \"PrivatePropertyNamedDataMember\" + valueToSet;               \n                this.PublicField = \"PublicField\" + valueToSet;\n                this.PublicFieldNamedDataMember = \"PublicFieldNamedDataMember\" + valueToSet;              \n                this.PublicProperty = \"PublicProperty\" + valueToSet;\n                this.PublicPropertyNamedDataMember = \"PublicPropertyNamedDataMember\" + valueToSet;\n\n                if (!onlySetSerializableMembers)\n                {\n                    this.InternalFieldSansAttribute = \"InternalFieldSansAttribute\" + valueToSet;\n                    this.InternalPropertySansAttribute = \"InternalPropertySansAttribute\" + valueToSet;\n                    this.PrivateFieldSansAttribute = \"PrivateFieldSansAttribute\" + valueToSet;\n                    this.PrivatePropertySansAttribute = \"PrivatePropertySansAttribute\" + valueToSet;\n                    this.PublicFieldSansAttribute = \"PublicFieldSansAttribute\" + valueToSet;\n                    this.PublicPropertySansAttribute = \"PublicPropertySansAttribute\" + valueToSet;\n                }\n            }\n        }\n\n        public void SetPrivates(string valueToSet)\n        {\n            this.PrivateField = \"PrivateField\" + valueToSet;\n            this.PrivatePropertyNamedDataMember = \"PrivatePropertyDataMember\" + valueToSet;\n            this.PrivateFieldNamedDataMember = \"PrivateFieldDataMember\" + valueToSet;\n            this.PrivateProperty = \"PrivateProperty\" + valueToSet;\n        }\n\n        public override bool Equals(object obj)\n        {\n            return SerializationTypeUtility.AreEqual(obj, this);\n        }\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n\n        [DataMember]\n        public long Id { get; set; }\n\n        [DataMember (Name=\"PublicPropertyDataMember\")]\n        public string PublicPropertyNamedDataMember { get; set; }\n\n        [DataMember(Name = \"InternalPropertyDataMember\")]\n        internal string InternalPropertyNamedDataMember { get; set; }\n\n        // Windows Store and Windows Phone will serialize private members in a different order; We'll explicitly\n        // set the order just to making testing consistent accross the two platforms.\n        [DataMember(Name = \"PrivatePropertyDataMember\", Order = 999)]\n        private string PrivatePropertyNamedDataMember { get; set; }\n\n        [DataMember(Name = \"PublicFieldDataMember\")]\n        public string PublicFieldNamedDataMember;\n\n        [DataMember(Name = \"InternalFieldDataMember\")]\n        internal string InternalFieldNamedDataMember;\n\n        // Windows Store and Windows Phone will serialize private members in a different order; We'll explicitly\n        // set the order just to making testing consistent accross the two platforms.\n        [DataMember(Name = \"PrivateFieldDataMember\", Order = 999)] \n        private string PrivateFieldNamedDataMember;\n\n        [DataMember]\n        public string PublicProperty { get; set; }\n\n        [DataMember]\n        internal string InternalProperty { get; set; }\n\n        // Windows Store and Windows Phone will serialize private members in a different order; We'll explicitly\n        // set the order just to making testing consistent accross the two platforms.\n        [DataMember(Order = 999)]\n        private string PrivateProperty { get; set; }\n\n        [DataMember]\n        public string PublicField;\n\n        [DataMember]\n        internal string InternalField;\n\n        // Windows Store and Windows Phone will serialize private members in a different order; We'll explicitly\n        // set the order just to making testing consistent accross the two platforms.\n        [DataMember(Order = 999)]\n        private string PrivateField;\n\n        public string PublicPropertySansAttribute { get; set; }\n        internal string InternalPropertySansAttribute { get; set; }\n        private string PrivatePropertySansAttribute { get; set; }\n\n        public string PublicPropertyGetOnlySansAttribute { get { return \"PublicPropertyGetOnlySansAttribute\"; } }\n        internal string InternalPropertyGetOnlySansAttribute { get { return \"InternalPropertyGetOnlySansAttribute\"; } }\n        private string PrivatePropertyGetOnlySansAttributer { get { return \"PrivatePropertyGetOnlySansAttributer\"; } }\n\n        public string PublicFieldSansAttribute;\n        internal string InternalFieldSansAttribute;\n        private string PrivateFieldSansAttribute;\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/DataMemberType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class DataMemberType\n    {\n        public long Id { get; set; }\n\n        [DataMember]\n        public string PublicProperty { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/DataTableType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [DataTable(\"NamedDataTableType\")]\n    public class DataTableType\n    {\n        public int Id { get; set; }\n\n        [JsonProperty(PropertyName = \"AnotherPublicProperty\")]\n        public int OtherThanPublicProperty { get; set; }\n\n        public int PublicProperty { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/DerivedDuplicateKeyType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class DerivedDuplicateKeyType : PocoType\n    {\n        [JsonProperty(PropertyName = \"PublicProperty\")]\n        public string OtherThanPublicProperty { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/DuplicateKeyType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class DuplicateKeyType\n    {\n        [JsonProperty(PropertyName = \"PublicProperty\")]\n        public int OtherThanPublicProperty { get; set; }\n\n        public int PublicProperty { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/IdTypes.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Runtime.Serialization;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class LongIdType\n    {\n        public long Id { get; set; }\n        public string String { get; set; }\n    }\n\n    public class IDType\n    {\n        public int ID { get; set; }\n    }\n\n    public class idType\n    {\n        public int id { get; set; }\n    }\n\n    public class iDType\n    {\n        public int iD { get; set; }\n    }\n\n    public class MulitpleIdType\n    {\n        public int Id { get; set; }\n\n        public int id { get; set; }\n    }\n\n    public class MissingIdType\n    {\n        public int NotAnId { get; set; }\n    }\n\n    public class StringIdType\n    {\n        public string Id { get; set; }\n\n        public string String { get; set; }\n    }\n\n    [DataContract]\n    public class DataContractMissingIdType\n    {\n        public int id { get; set; }\n    }\n\n    public class IgnoreDataMemberMissingIdType\n    {\n        [IgnoreDataMember]\n        public int id { get; set; }\n    }\n\n    public class JsonIgnoreMissingIdType\n    {\n        [JsonIgnore]\n        public int id { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/InterfacePropertyType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class InterfacePropertyType\n    {\n        public int Id { get; set; }\n\n        public IDictionary<string, string> Lookup { get; set; }\n\n        public override bool Equals(object obj)\n        {\n            InterfacePropertyType other = obj as InterfacePropertyType;\n            if (other != null)\n            {\n                if (other.Id == this.Id)\n                {\n                    if ((this.Lookup == null && other.Lookup == null) ||\n                        (this.Lookup.Count == other.Lookup.Count &&\n                        this.Lookup.SequenceEqual(other.Lookup))\n                        )\n                    {\n                        return true;\n                    }\n                }\n            }\n\n            return false;\n        }\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/JObjectTypes.cs",
    "content": "﻿\nusing System;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class JObjectTypes\n    {\n        public static JObject GetObjectWithAllTypes()\n        {\n            return new JObject()\n            {\n                { \"Object\", new JObject() },\n                { \"Array\", new JArray() },\n                { \"Integer\", 0L },\n                { \"Float\", 0f },\n                { \"String\", String.Empty },\n                { \"Boolean\", false },\n                { \"Date\", DateTime.MinValue },\n                { \"Bytes\", new byte[0] },\n                { \"Guid\", Guid.Empty },\n                { \"TimeSpan\", TimeSpan.Zero }\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/JsonContainerType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [JsonObject(Title=\"NamedJsonContainerType\")]\n    public class JsonContainerType\n    {\n        public int Id { get; set; }\n\n        [JsonProperty(PropertyName = \"AnotherPublicProperty\")]\n        public int OtherThanPublicProperty { get; set; }\n\n        public int PublicProperty { get; set; }\n    }\n\n    [JsonObject]\n    public class UnnamedJsonContainerType\n    {\n        public int Id { get; set; }\n\n        [JsonProperty(PropertyName = \"AnotherPublicProperty\")]\n        public int OtherThanPublicProperty { get; set; }\n\n        public int PublicProperty { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/JsonPropertyDerivedDataContractType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [DataContract]\n    public class JsonPropertyDerivedDataContractType : JsonPropertyType\n    {\n        public JsonPropertyDerivedDataContractType()\n            : this(null)\n        {\n        }\n\n        public JsonPropertyDerivedDataContractType(string valueToSet, bool onlySetSerializableMembers = false)\n        {\n            this.DerivedInternalFieldNamedDataMember = null;\n            this.DerivedPrivateFieldNamedDataMember = null;\n            this.DerivedInternalField = null;\n            this.DerivedPrivateField = null;\n            this.DerivedInternalFieldSansAttribute = null;\n            this.DerivedPrivateFieldSansAttribute = null;\n\n            if (valueToSet != null)\n            {\n                this.DerivedInternalField = \"DerivedInternalField\" + valueToSet;\n                this.DerivedInternalFieldNamedDataMember = \"DerivedInternalFieldNamedDataMember\" + valueToSet;\n                this.DerivedInternalProperty = \"DerivedInternalProperty\" + valueToSet;\n                this.DerivedInternalPropertyNamedDataMember = \"DerivedInternalPropertyNamedDataMember\" + valueToSet;\n                this.DerivedPrivateField = \"DerivedPrivateField\" + valueToSet;\n                this.DerivedPrivateFieldNamedDataMember = \"DerivedPrivateFieldNamedDataMember\" + valueToSet;\n                this.DerivedPrivateProperty = \"DerivedPrivateProperty\" + valueToSet;\n                this.DerivedPrivatePropertyNamedDataMember = \"DerivedPrivatePropertyNamedDataMember\" + valueToSet;\n                this.DerivedPublicField = \"DerivedPublicField\" + valueToSet;\n                this.DerivedPublicFieldNamedDataMember = \"DerivedPublicFieldNamedDataMember\" + valueToSet;\n                this.DerivedPublicProperty = \"DerivedPublicProperty\" + valueToSet;\n                this.DerivedPublicPropertyNamedDataMember = \"DerivedPublicPropertyNamedDataMember\" + valueToSet;\n                \n                if (!onlySetSerializableMembers)\n                {\n                    this.DerivedInternalFieldSansAttribute = \"DerivedInternalFieldSansAttribute\" + valueToSet;\n                    this.DerivedInternalPropertySansAttribute = \"DerivedInternalPropertySansAttribute\" + valueToSet;\n                    this.DerivedPrivateFieldSansAttribute = \"DerivedPrivateFieldSansAttribute\" + valueToSet;\n                    this.DerivedPrivatePropertySansAttribute = \"DerivedPrivatePropertySansAttribute\" + valueToSet;\n                    this.DerivedPublicFieldSansAttribute = \"DerivedPublicFieldSansAttribute\" + valueToSet;\n                    this.DerivedPublicPropertySansAttribute = \"DerivedPublicPropertySansAttribute\" + valueToSet;\n                }\n            }\n        }\n\n        public override bool Equals(object obj)\n        {\n            return SerializationTypeUtility.AreEqual(obj, this);\n        }\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n\n        [DataMember(Name = \"DerivedPublicPropertyDataMember\")]\n        public string DerivedPublicPropertyNamedDataMember { get; set; }\n\n        [DataMember(Name = \"DerivedInternalPropertyDataMember\")]\n        internal string DerivedInternalPropertyNamedDataMember { get; set; }\n\n        [DataMember(Name = \"DerivedPrivatePropertyDataMember\")]\n        private string DerivedPrivatePropertyNamedDataMember { get; set; }\n\n        [DataMember(Name = \"DerivedPublicFieldDataMember\")]\n        public string DerivedPublicFieldNamedDataMember;\n\n        [DataMember(Name = \"DerivedInternalFieldDataMember\")]\n        internal string DerivedInternalFieldNamedDataMember;\n\n        [DataMember(Name = \"DerivedPrivateFieldDataMember\")]\n        private string DerivedPrivateFieldNamedDataMember;\n\n        [DataMember]\n        public string DerivedPublicProperty { get; set; }\n\n        [DataMember]\n        internal string DerivedInternalProperty { get; set; }\n\n        [DataMember]\n        private string DerivedPrivateProperty { get; set; }\n\n        [DataMember]\n        public string DerivedPublicField;\n\n        [DataMember]\n        internal string DerivedInternalField;\n\n        [DataMember]\n        private string DerivedPrivateField;\n\n        public string DerivedPublicPropertySansAttribute { get; set; }\n        internal string DerivedInternalPropertySansAttribute { get; set; }\n        private string DerivedPrivatePropertySansAttribute { get; set; }\n\n        public string DerivedPublicPropertyGetOnlySansAttribute { get { return \"DerivedPublicPropertyGetOnlySansAttribute\"; } }\n        internal string DerivedInternalPropertyGetOnlySansAttribute { get { return \"DerivedInternalPropertyGetOnlySansAttribute\"; } }\n        private string DerivedPrivatePropertyGetOnlySansAttributer { get { return \"DerivedPrivatePropertyGetOnlySansAttributer\"; } }\n\n        public string DerivedPublicFieldSansAttribute;\n        internal string DerivedInternalFieldSansAttribute;\n        private string DerivedPrivateFieldSansAttribute;\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/JsonPropertyDerivedJsonPropertyType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class JsonPropertyDerivedJsonPropertyType : JsonPropertyType\n    {\n        public JsonPropertyDerivedJsonPropertyType()\n            : this(null)\n        {\n        }\n\n        public JsonPropertyDerivedJsonPropertyType(string valueToSet, bool onlySetSerializableMembers = false)\n            : base(valueToSet, onlySetSerializableMembers)\n        {\n            this.DerivedInternalFieldNamedJsonProperty = null;\n            this.DerivedPrivateFieldNamedJsonProperty = null;\n            this.DerivedInternalField = null;\n            this.DerivedPrivateField = null;\n            this.DerivedInternalFieldSansAttribute = null;\n            this.DerivedPrivateFieldSansAttribute = null;\n\n            if (valueToSet != null)\n            {\n                this.DerivedInternalField = \"DerivedInternalField\" + valueToSet;\n                this.DerivedInternalFieldNamedJsonProperty = \"DerivedInternalFieldNamedJsonProperty\" + valueToSet;\n                this.DerivedInternalProperty = \"DerivedInternalProperty\" + valueToSet;\n                this.DerivedInternalPropertyNamedJsonProperty = \"DerivedInternalPropertyNamedJsonProperty\" + valueToSet;\n                this.DerivedPrivateField = \"DerivedPrivateField\" + valueToSet;\n                this.DerivedPrivateFieldNamedJsonProperty = \"DerivedPrivateFieldNamedJsonProperty\" + valueToSet;\n                this.DerivedPrivateProperty = \"DerivedPrivateProperty\" + valueToSet;\n                this.DerivedPrivatePropertyNamedJsonProperty = \"DerivedPrivatePropertyNamedJsonProperty\" + valueToSet;\n                this.DerivedPublicField = \"DerivedPublicField\" + valueToSet;\n                this.DerivedPublicFieldNamedJsonProperty = \"DerivedPublicFieldNamedJsonProperty\" + valueToSet;\n                this.DerivedPublicFieldSansAttribute = \"DerivedPublicFieldSansAttribute\" + valueToSet;\n                this.DerivedPublicProperty = \"DerivedPublicProperty\" + valueToSet;\n                this.DerivedPublicPropertyNamedJsonProperty = \"DerivedPublicPropertyNamedJsonProperty\" + valueToSet;\n                this.DerivedPublicPropertySansAttribute = \"DerivedPublicPropertySansAttribute\" + valueToSet;\n\n                if (!onlySetSerializableMembers)\n                {\n                    this.DerivedInternalFieldSansAttribute = \"DerivedInternalFieldSansAttribute\" + valueToSet;\n                    this.DerivedInternalPropertySansAttribute = \"DerivedInternalPropertySansAttribute\" + valueToSet;\n                    this.DerivedPrivateFieldSansAttribute = \"DerivedPrivateFieldSansAttribute\" + valueToSet;\n                    this.DerivedPrivatePropertySansAttribute = \"DerivedPrivatePropertySansAttribute\" + valueToSet;              \n                }\n            }\n        }\n\n        public override bool Equals(object obj)\n        {\n            return SerializationTypeUtility.AreEqual(obj, this);\n        }\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n\n        [JsonProperty(PropertyName = \"DerivedPublicPropertyJsonProperty\")]\n        public string DerivedPublicPropertyNamedJsonProperty { get; set; }\n\n        [JsonProperty(PropertyName = \"DerivedInternalPropertyJsonProperty\")]\n        internal string DerivedInternalPropertyNamedJsonProperty { get; set; }\n\n        [JsonProperty(PropertyName = \"DerivedPrivatePropertyJsonProperty\")]\n        private string DerivedPrivatePropertyNamedJsonProperty { get; set; }\n\n        [JsonProperty(PropertyName = \"DerivedPublicFieldJsonProperty\")]\n        public string DerivedPublicFieldNamedJsonProperty;\n\n        [JsonProperty(PropertyName = \"DerivedInternalFieldJsonProperty\")]\n        internal string DerivedInternalFieldNamedJsonProperty;\n\n        [JsonProperty(PropertyName = \"DerivedPrivateFieldJsonProperty\")]\n        private string DerivedPrivateFieldNamedJsonProperty;\n\n        [JsonProperty]\n        public string DerivedPublicProperty { get; set; }\n\n        [JsonProperty]\n        internal string DerivedInternalProperty { get; set; }\n\n        [JsonProperty]\n        private string DerivedPrivateProperty { get; set; }\n\n        [JsonProperty]\n        public string DerivedPublicField;\n\n        [JsonProperty]\n        internal string DerivedInternalField;\n\n        [JsonProperty]\n        private string DerivedPrivateField;\n\n        public string DerivedPublicPropertySansAttribute { get; set; }\n        internal string DerivedInternalPropertySansAttribute { get; set; }\n        private string DerivedPrivatePropertySansAttribute { get; set; }\n\n        public string DerivedPublicPropertyGetOnlySansAttribute { get { return \"DerivedPublicPropertyGetOnlySansAttribute\"; } }\n        internal string DerivedInternalPropertyGetOnlySansAttribute { get { return \"DerivedInternalPropertyGetOnlySansAttribute\"; } }\n        private string DerivedPrivatePropertyGetOnlySansAttributer { get { return \"DerivedPrivatePropertyGetOnlySansAttributer\"; } }\n\n        public string DerivedPublicFieldSansAttribute;\n        internal string DerivedInternalFieldSansAttribute;\n        private string DerivedPrivateFieldSansAttribute;\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/JsonPropertyType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class JsonPropertyType\n    {\n        public JsonPropertyType()\n            : this(null)\n        {\n        }\n\n        public JsonPropertyType(string valueToSet, bool onlySetSerializableMembers = false)\n        {\n            this.InternalFieldNamedJsonProperty = null;\n            this.PrivateFieldNamedJsonProperty = null;\n            this.InternalField = null;\n            this.PrivateField = null;\n            this.InternalFieldSansAttribute = null;\n            this.PrivateFieldSansAttribute = null;\n\n            if (valueToSet != null)\n            {\n                this.InternalField = \"InternalField\" + valueToSet;\n                this.InternalFieldNamedJsonProperty = \"InternalFieldNamedJsonProperty\" + valueToSet;             \n                this.InternalProperty = \"InternalProperty\" + valueToSet;\n                this.InternalPropertyNamedJsonProperty = \"InternalPropertyNamedJsonProperty\" + valueToSet;           \n                this.PrivateField = \"PrivateField\" + valueToSet;\n                this.PrivateFieldNamedJsonProperty = \"PrivateFieldNamedJsonProperty\" + valueToSet;        \n                this.PrivateProperty = \"PrivateProperty\" + valueToSet;\n                this.PrivatePropertyNamedJsonProperty = \"PrivatePropertyNamedJsonProperty\" + valueToSet;               \n                this.PublicField = \"PublicField\" + valueToSet;\n                this.PublicFieldNamedJsonProperty = \"PublicFieldNamedJsonProperty\" + valueToSet;\n                this.PublicFieldSansAttribute = \"PublicFieldSansAttribute\" + valueToSet;\n                this.PublicProperty = \"PublicProperty\" + valueToSet;\n                this.PublicPropertyNamedJsonProperty = \"PublicPropertyNamedJsonProperty\" + valueToSet;\n                this.PublicPropertySansAttribute = \"PublicPropertySansAttribute\" + valueToSet;\n\n                if (!onlySetSerializableMembers)\n                {\n                    this.InternalFieldSansAttribute = \"InternalFieldSansAttribute\" + valueToSet;\n                    this.InternalPropertySansAttribute = \"InternalPropertySansAttribute\" + valueToSet;\n                    this.PrivateFieldSansAttribute = \"PrivateFieldSansAttribute\" + valueToSet;\n                    this.PrivatePropertySansAttribute = \"PrivatePropertySansAttribute\" + valueToSet;\n                }\n            }\n        }\n\n        public override bool Equals(object obj)\n        {\n            return SerializationTypeUtility.AreEqual(obj, this);\n        }\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n\n        public void SetPrivates(string valueToSet)\n        {\n            this.PrivateField = \"PrivateField\" + valueToSet;\n            this.PrivatePropertyNamedJsonProperty = \"PrivatePropertyNamedJsonProperty\" + valueToSet;\n            this.PrivateFieldNamedJsonProperty = \"PrivateFieldNamedJsonProperty\" + valueToSet;\n            this.PrivateProperty = \"PrivateProperty\" + valueToSet;\n        }\n\n        [JsonProperty]\n        public long Id { get; set; }\n\n        [JsonProperty(PropertyName = \"PublicPropertyJsonProperty\")]\n        public string PublicPropertyNamedJsonProperty { get; set; }\n\n        [JsonProperty(PropertyName = \"InternalPropertyJsonProperty\")]\n        internal string InternalPropertyNamedJsonProperty { get; set; }\n\n        // Windows Store and Windows Phone will serialize private members in a different order; We'll explicitly\n        // set the order just to making testing consistent accross the two platforms.\n        [JsonProperty(PropertyName = \"PrivatePropertyJsonProperty\", Order=999)]\n        private string PrivatePropertyNamedJsonProperty { get; set; }\n\n        [JsonProperty(PropertyName = \"PublicFieldJsonProperty\")]\n        public string PublicFieldNamedJsonProperty;\n\n        [JsonProperty(PropertyName = \"InternalFieldJsonProperty\")]\n        internal string InternalFieldNamedJsonProperty;\n\n        // Windows Store and Windows Phone will serialize private members in a different order; We'll explicitly\n        // set the order just to making testing consistent accross the two platforms.\n        [JsonProperty(PropertyName = \"PrivateFieldJsonProperty\", Order = 999)]\n        private string PrivateFieldNamedJsonProperty;\n\n        [JsonProperty]\n        public string PublicProperty { get; set; }\n\n        [JsonProperty]\n        internal string InternalProperty { get; set; }\n\n        // Windows Store and Windows Phone will serialize private members in a different order; We'll explicitly\n        // set the order just to making testing consistent accross the two platforms.\n        [JsonProperty(Order = 999)]\n        private string PrivateProperty { get; set; }\n\n        [JsonProperty]\n        public string PublicField;\n\n        [JsonProperty]\n        internal string InternalField;\n\n        // Windows Store and Windows Phone will serialize private members in a different order; We'll explicitly\n        // set the order just to making testing consistent accross the two platforms.\n        [JsonProperty(Order = 999)]\n        private string PrivateField;\n\n        public string PublicPropertySansAttribute { get; set; }\n        internal string InternalPropertySansAttribute { get; set; }\n        private string PrivatePropertySansAttribute { get; set; }\n\n        public string PublicPropertyGetOnlySansAttribute { get { return \"PublicPropertyGetOnlySansAttribute\"; } }\n        internal string InternalPropertyGetOnlySansAttribute { get { return \"InternalPropertyGetOnlySansAttribute\"; } }\n        private string PrivatePropertyGetOnlySansAttribute { get { return \"PrivatePropertyGetOnlySansAttribute\"; } }\n\n        public string PublicFieldSansAttribute;\n        internal string InternalFieldSansAttribute;\n        private string PrivateFieldSansAttribute;\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/PocoDerivedDataContractType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [DataContract]\n    public class PocoDerivedDataContractType : PocoType\n    {\n        public PocoDerivedDataContractType() :this(null)\n        {\n        }\n\n        public PocoDerivedDataContractType(string valueToSet, bool onlySetSerializableMembers = false) \n        {\n            this.DerivedInternalField = null;\n            this.DerivedPrivateField = null;\n            this.InternalFieldNamedDataMember = null;\n            this.PrivateFieldNamedDataMember = null;\n            this.InternalField = null;\n            this.InternalFieldSansAttribute = null;\n            this.PrivateFieldSansAttribute = null;\n\n            if (valueToSet != null)\n            {\n                this.DerivedInternalField = \"DerivedInternalField\" + valueToSet;\n                this.DerivedInternalProperty = \"DerivedInternalProperty\" + valueToSet;\n                this.DerivedPrivateField = \"DerivedPrivateField\" + valueToSet;\n                this.DerivedPrivateProperty = \"DerivedPrivateProperty\" + valueToSet;\n                this.DerivedPublicField = \"DerivedPublicField\" + valueToSet;\n                this.DerivedPublicProperty = \"DerivedPublicProperty\" + valueToSet;\n                this.InternalFieldNamedDataMember = \"InternalFieldNamedDataMember\" + valueToSet;\n                this.InternalPropertyNamedDataMember = \"InternalPropertyNamedDataMember\" + valueToSet;\n                this.PrivateFieldNamedDataMember = \"PrivateFieldNamedDataMember\" + valueToSet;\n                this.PrivatePropertyNamedDataMember = \"PrivatePropertyNamedDataMember\" + valueToSet;\n                this.PublicFieldNamedDataMember = \"PublicFieldNamedDataMember\" + valueToSet;\n                this.PublicPropertyNamedDataMember = \"PublicPropertyNamedDataMember\" + valueToSet;\n                \n                if (!onlySetSerializableMembers)\n                {\n                    this.InternalFieldSansAttribute = \"InternalFieldSansAttribute\" + valueToSet;\n                    this.InternalPropertySansAttribute = \"InternalPropertySansAttribute\" + valueToSet;              \n                    this.PrivateFieldSansAttribute = \"PrivateFieldSansAttribute\" + valueToSet;\n                    this.PrivatePropertySansAttribute = \"PrivatePropertySansAttribute\" + valueToSet;\n                    this.PublicFieldSansAttribute = \"PublicFieldSansAttribute\" + valueToSet;\n                    this.PublicPropertySansAttribute = \"PublicPropertySansAttribute\" + valueToSet;              \n                }\n            }\n        }\n\n        public override bool Equals(object obj)\n        {\n            return SerializationTypeUtility.AreEqual(obj, this);\n        }\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n\n        [DataMember]\n        public new long Id { get; set; }\n\n        [DataMember(Name = \"PublicPropertyDataMember\")]\n        public string PublicPropertyNamedDataMember { get; set; }\n\n        [DataMember(Name = \"InternalPropertyDataMember\")]\n        internal string InternalPropertyNamedDataMember { get; set; }\n\n        [DataMember(Name = \"PrivatePropertyDataMember\")]\n        private string PrivatePropertyNamedDataMember { get; set; }\n\n        [DataMember(Name = \"PublicFieldDataMember\")]\n        public string PublicFieldNamedDataMember;\n\n        [DataMember(Name = \"InternalFieldDataMember\")]\n        internal string InternalFieldNamedDataMember;\n\n        [DataMember(Name = \"PrivateFieldDataMember\")]\n        private string PrivateFieldNamedDataMember;\n\n        [DataMember]\n        public string DerivedPublicProperty { get; set; }\n\n        [DataMember]\n        internal string DerivedInternalProperty { get; set; }\n\n        [DataMember]\n        private string DerivedPrivateProperty { get; set; }\n\n        [DataMember]\n        public string DerivedPublicField;\n\n        [DataMember]\n        internal string DerivedInternalField;\n\n        [DataMember]\n        private string DerivedPrivateField;\n\n        public string PublicPropertySansAttribute { get; set; }\n        internal string InternalPropertySansAttribute { get; set; }\n        private string PrivatePropertySansAttribute { get; set; }\n\n        public string PublicPropertyGetOnlySansAttribute { get { return \"PublicPropertyGetOnlySansAttribute\"; } }\n        internal string InternalPropertyGetOnlySansAttribute { get { return \"InternalPropertyGetOnlySansAttribute\"; } }\n        private string PrivatePropertyGetOnlySansAttributer { get { return \"PrivatePropertyGetOnlySansAttributer\"; } }\n\n        public string PublicFieldSansAttribute;\n        internal string InternalFieldSansAttribute;\n        private string PrivateFieldSansAttribute;\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/PocoDerivedJsonPropertyType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class PocoDerivedJsonPropertyType : PocoType\n    {\n        public PocoDerivedJsonPropertyType() :this(null)\n        {\n        }\n\n        public PocoDerivedJsonPropertyType(string valueToSet, bool onlySetSerializableMembers = false) \n            : base(valueToSet, onlySetSerializableMembers)\n        {\n            this.DerivedInternalField = null;\n            this.DerivedPrivateField = null;\n            this.InternalFieldNamedJsonProperty = null;\n            this.PrivateFieldNamedJsonProperty = null;\n            this.InternalField = null;\n            this.InternalFieldSansAttribute = null;\n            this.PrivateFieldSansAttribute = null;\n\n            if (valueToSet != null)\n            {\n                this.DerivedInternalField = \"DerivedInternalField\" + valueToSet;\n                this.DerivedInternalProperty = \"DerivedInternalProperty\" + valueToSet;\n                this.DerivedPrivateField = \"DerivedPrivateField\" + valueToSet;\n                this.DerivedPrivateProperty = \"DerivedPrivateProperty\" + valueToSet;\n                this.DerivedPublicField = \"DerivedPublicField\" + valueToSet;\n                this.DerivedPublicProperty = \"DerivedPublicProperty\" + valueToSet;\n\n                this.InternalFieldNamedJsonProperty = \"InternalFieldNamedJsonProperty\" + valueToSet;\n                this.InternalPropertyNamedJsonProperty = \"InternalPropertyNamedJsonProperty\" + valueToSet;\n                this.PrivateFieldNamedJsonProperty = \"PrivateFieldNamedJsonProperty\" + valueToSet;\n                this.PrivatePropertyNamedJsonProperty = \"PrivatePropertyNamedJsonProperty\" + valueToSet;\n                this.PublicFieldNamedJsonProperty = \"PublicFieldNamedJsonProperty\" + valueToSet;\n                this.PublicPropertyNamedJsonProperty = \"PublicPropertyNamedJsonProperty\" + valueToSet;\n                this.PublicFieldSansAttribute = \"PublicFieldSansAttribute\" + valueToSet;\n                this.PublicPropertySansAttribute = \"PublicPropertySansAttribute\" + valueToSet;\n\n                if (!onlySetSerializableMembers)\n                {           \n                    this.InternalFieldSansAttribute = \"InternalFieldSansAttribute\" + valueToSet;\n                    this.PrivateFieldSansAttribute = \"PrivateFieldSansAttribute\" + valueToSet;\n                    this.PrivatePropertySansAttribute = \"PrivatePropertySansAttribute\" + valueToSet;\n                    this.InternalPropertySansAttribute = \"InternalPropertySansAttribute\" + valueToSet;            \n                }\n            }\n        }\n\n        public override bool Equals(object obj)\n        {\n            return SerializationTypeUtility.AreEqual(obj, this);\n        }\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n\n        [JsonProperty(PropertyName = \"PublicPropertyJsonProperty\")]\n        public string PublicPropertyNamedJsonProperty { get; set; }\n\n        [JsonProperty(PropertyName = \"InternalPropertyJsonProperty\")]\n        internal string InternalPropertyNamedJsonProperty { get; set; }\n\n        [JsonProperty(PropertyName = \"PrivatePropertyJsonProperty\")]\n        private string PrivatePropertyNamedJsonProperty { get; set; }\n\n        [JsonProperty(PropertyName = \"PublicFieldJsonProperty\")]\n        public string PublicFieldNamedJsonProperty;\n\n        [JsonProperty(PropertyName = \"InternalFieldJsonProperty\")]\n        internal string InternalFieldNamedJsonProperty;\n\n        [JsonProperty(PropertyName = \"PrivateFieldJsonProperty\")]\n        private string PrivateFieldNamedJsonProperty;\n\n        [JsonProperty]\n        public string DerivedPublicProperty { get; set; }\n\n        [JsonProperty]\n        internal string DerivedInternalProperty { get; set; }\n\n        [JsonProperty]\n        private string DerivedPrivateProperty { get; set; }\n\n        [JsonProperty]\n        public string DerivedPublicField;\n\n        [JsonProperty]\n        internal string DerivedInternalField;\n\n        [JsonProperty]\n        private string DerivedPrivateField;\n\n        public string PublicPropertySansAttribute { get; set; }\n        internal string InternalPropertySansAttribute { get; set; }\n        private string PrivatePropertySansAttribute { get; set; }\n\n        public string PublicPropertyGetOnlySansAttribute { get { return \"PublicPropertyGetOnlySansAttribute\"; } }\n        internal string InternalPropertyGetOnlySansAttribute { get { return \"InternalPropertyGetOnlySansAttribute\"; } }\n        private string PrivatePropertyGetOnlySansAttribute { get { return \"PrivatePropertyGetOnlySansAttribute\"; } }\n\n        public string PublicFieldSansAttribute;\n        internal string InternalFieldSansAttribute;\n        private string PrivateFieldSansAttribute;\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/PocoDerivedPocoType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class PocoDerivedPocoType : PocoType\n    {\n        public PocoDerivedPocoType() :this(null)\n        {\n        }\n\n        public PocoDerivedPocoType(string valueToSet, bool onlySetSerializableMembers = false) \n            : base(valueToSet, onlySetSerializableMembers)\n        {\n            this.DerivedInternalField = null;\n            this.DerivedPrivateField = null;\n\n            if (valueToSet != null)\n            {\n                this.DerivedPublicField = \"DerivedPublicField\" + valueToSet;\n                this.DerivedPublicProperty = \"DerivedPublicProperty\" + valueToSet;\n                \n                if (!onlySetSerializableMembers)\n                {\n                    this.DerivedInternalField = \"DerivedInternalField\" + valueToSet;\n                    this.DerivedInternalProperty = \"DerivedInternalProperty\" + valueToSet;\n                    this.DerivedPrivateField = \"DerivedPrivateField\" + valueToSet;\n                    this.DerivedPrivateProperty = \"DerivedPrivateProperty\" + valueToSet;\n                }\n            }\n        }\n\n        public override bool Equals(object obj)\n        {\n            return SerializationTypeUtility.AreEqual(obj, this);\n        }\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n\n        public string DerivedPublicProperty { get; set; }\n\n        internal string DerivedInternalProperty { get; set; }\n\n        private string DerivedPrivateProperty { get; set; }\n\n        public string DerivedPublicPropertyGetOnly { get { return \"DerivedPublicPropertyGetOnly\"; } }\n\n        internal string DerivedInternalPropertyGetOnly { get { return \"DerivedInternalPropertyGetOnly\"; } }\n\n        private string DerivedPrivatePropertyGetOnly { get { return \"DerivedPrivatePropertyGetOnly\"; } }\n\n        public string DerivedPublicField;\n\n        internal string DerivedInternalField;\n\n        private string DerivedPrivateField;\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/PocoType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class PocoType\n    {\n        public PocoType() :this(null)\n        {\n        }\n\n        public PocoType(string valueToSet, bool onlySetSerializableMembers = false)\n        {\n            this.InternalField = null;\n            this.PrivateField = null;\n\n            if (valueToSet != null)\n            {\n                this.PublicField = \"PublicField\" + valueToSet;\n                this.PublicProperty = \"PublicProperty\" + valueToSet;\n\n                if (!onlySetSerializableMembers)\n                {\n                    this.InternalField = \"InternalField\" + valueToSet;\n                    this.InternalProperty = \"InternalProperty\" + valueToSet;\n\n                    this.PrivateField = \"PrivateField\" + valueToSet;\n                    this.PrivateProperty = \"PrivateProperty\" + valueToSet;\n                }\n            }\n        }\n\n        public override bool Equals(object obj)\n        {\n            return SerializationTypeUtility.AreEqual(obj, this);\n        }\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n\n        public long Id { get; set; }\n\n        public string PublicProperty { get; set; }\n\n        internal string InternalProperty { get; set; }\n\n        private string PrivateProperty { get; set; }\n\n        public string PublicPropertyGetOnly  { get { return \"PublicPropertyGetOnly\"; } }\n\n        internal string InternalPropertyGetOnly { get { return \"InternalPropertyGetOnly\"; } }\n\n        private string PrivatePropertyGetOnly { get { return \"PrivatePropertyGetOnly\"; } }\n\n        public string PublicField;\n\n        internal string InternalField;\n\n        private string PrivateField;\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/SerializationTypeUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Reflection;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class SerializationTypeUtility\n    {\n        public static bool AreEqual(object one, object two)\n        {\n            if (one == null && two == null)\n            {\n                return true;\n            }\n            else if (one == null || two == null)\n            {\n                return false;\n            }\n\n            Type oneType = one.GetType();\n            Type twoType = two.GetType();\n\n            if (oneType != twoType)\n            {\n                return false;\n            }\n\n            if (oneType != typeof(long) &&\n                oneType != typeof(string))\n            {\n                foreach (PropertyInfo property in oneType.GetRuntimeProperties())\n                {\n                    if (!AreEqual(property.GetValue(one, null), property.GetValue(two, null)))\n                    {\n                        return false;\n                    }\n                }\n\n                foreach (FieldInfo field in oneType.GetRuntimeFields())\n                {\n                    if (!field.Name.StartsWith(\"<\") && !field.IsStatic) // To ensure we don't set backing fields or static fields\n                    {\n                        if (!AreEqual(field.GetValue(one), field.GetValue(two)))\n                        {\n                            return false;\n                        }\n                    }\n                }\n            }\n            else if (one.ToString() != two.ToString())\n            {\n                return false;\n            }\n\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/SimpleTreeType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n\n    public class SimpleTreeType : JsonConverter\n    {\n        public long Id { get; set; }\n        public string Name { get; set; }\n\n        [JsonConverter(typeof(SimpleTreeType))]\n        public List<SimpleTreeType> Children { get; set; }\n\n        public SimpleTreeType() : this(false)\n        {\n        }\n\n        public SimpleTreeType(bool setValues)\n        {\n            Children = new List<SimpleTreeType>();\n\n            if (setValues)\n            {\n                this.Id = 5;\n                this.Name = \"Root\";\n                this.Children.Add(new SimpleTreeType() { Id = 6, Name = \"Child1\" });\n                this.Children.Add(new SimpleTreeType() { Id = 7, Name = \"Child2\" });\n            }\n        }\n\n        public override bool Equals(object obj)\n        {\n            SimpleTreeType other = obj as SimpleTreeType;\n            if (other == null || \n                this.Id != other.Id || \n                this.Name != other.Name ||\n                this.Children.Count != other.Children.Count)\n            {\n                return false;\n            }\n\n            for (int i = 0; i < this.Children.Count; i++)\n            {\n                if (!object.Equals(this.Children[i], other.Children[i]))\n                {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n\n        public override bool CanConvert(System.Type objectType)\n        {\n            return true;\n        }\n\n        public override object ReadJson(JsonReader reader, System.Type objectType, object existingValue, JsonSerializer serializer)\n        {\n            List<SimpleTreeType> list = existingValue as List<SimpleTreeType>;\n            List<SimpleTreeType> newList = serializer.Deserialize(reader, objectType) as List<SimpleTreeType>;\n\n            list.Clear();\n            list.AddRange(newList);\n            return list;\n        }\n\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n        {\n            serializer.Serialize(writer, value);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/SystemPropertyTypes.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class CreatedAtType\n    {\n        public string Id { get; set; }\n\n        [CreatedAt]\n        public DateTime CreatedAt { get; set; }\n    }\n\n    public class NotSystemPropertyCreatedAtType\n    {\n        public string Id { get; set; }\n\n        public DateTime CreatedAt { get; set; }\n    }\n\n    public class IntegerIdNotSystemPropertyCreatedAtType\n    {\n        public int Id { get; set; }\n\n        public DateTime __createdAt { get; set; }\n    }\n\n    public class UpdatedAtType\n    {\n        public string Id { get; set; }\n\n        [UpdatedAt]\n        public DateTime UpdatedAt { get; set; }\n    }\n\n    public class NotSystemPropertyUpdatedAtType\n    {\n        public string Id { get; set; }\n\n        public DateTime _UpdatedAt { get; set; }\n    }\n\n    public class VersionType\n    {\n        public string Id { get; set; }\n\n        [Version]\n        public string Version { get; set; }\n    }\n\n    public class NotSystemPropertyVersionType\n    {\n        public string Id { get; set; }\n\n        public string version { get; set; }\n    }\n\n    public class AllBaseTypesWithAllSystemPropertiesType : IEquatable<AllBaseTypesWithAllSystemPropertiesType>\n    {\n        public string Id { get; set; }\n\n        [CreatedAt]\n        public DateTime CreatedAt { get; set; }\n\n        [UpdatedAt]\n        public DateTime UpdatedAt { get; set; }\n\n        [Version]\n        public string Version { get; set; }\n\n        public bool Bool { get; set; }\n        public byte Byte { get; set; }\n        public sbyte SByte { get; set; }\n        public ushort UShort { get; set; }\n        public short Short { get; set; }\n        public uint UInt { get; set; }\n        public int Int { get; set; }\n        public ulong ULong { get; set; }\n        public long Long { get; set; }\n        public float Float { get; set; }\n        public double Double { get; set; }\n        public decimal Decimal { get; set; }\n        public string String { get; set; }\n        public char Char { get; set; }\n        public DateTime DateTime { get; set; }\n        public DateTimeOffset DateTimeOffset { get; set; }\n        public double? Nullable { get; set; }\n        public DateTime? NullableDateTime { get; set; }\n        public TimeSpan TimeSpan { get; set; }\n        public Uri Uri { get; set; }\n        public Enum1 Enum1 { get; set; }\n        public Enum2 Enum2 { get; set; }\n        public Enum3 Enum3 { get; set; }\n        public Enum4 Enum4 { get; set; }\n        public Enum5 Enum5 { get; set; }\n        public Enum6 Enum6 { get; set; }\n\n        public override bool Equals(object obj)\n        {\n            var other = obj as AllBaseTypesWithAllSystemPropertiesType;\n            if (other != null)\n            {\n                return Equals(other);\n            }\n            return false;\n        }\n\n        public bool Equals(AllBaseTypesWithAllSystemPropertiesType other)\n        {\n            return this.Id == other.Id &&\n                   this.CreatedAt == other.CreatedAt &&\n                   this.UpdatedAt == other.UpdatedAt &&\n                   this.Version == other.Version &&\n                   this.Bool == other.Bool &&\n                   this.Byte == other.Byte &&\n                   this.SByte == other.SByte &&\n                   this.UShort == other.UShort &&\n                   this.Short == other.Short &&\n                   this.UInt == other.UInt &&\n                   this.Int == other.Int &&\n                   this.ULong == other.ULong &&\n                   this.Long == other.Long &&\n                   this.Float == other.Float &&\n                   this.Double == other.Double &&\n                   this.Decimal == other.Decimal &&\n                   this.String == other.String &&\n                   this.Char == other.Char &&\n                   this.DateTime == other.DateTime &&\n                   this.DateTimeOffset == other.DateTimeOffset &&\n                   this.Nullable == other.Nullable &&\n                   this.NullableDateTime == other.NullableDateTime &&\n                   this.TimeSpan == other.TimeSpan &&\n                   this.Uri == other.Uri &&\n                   this.Enum1 == other.Enum1 &&\n                   this.Enum2 == other.Enum2 &&\n                   this.Enum3 == other.Enum3 &&\n                   this.Enum4 == other.Enum4 &&\n                   this.Enum5 == other.Enum5 &&\n                   this.Enum6 == other.Enum6;\n        }\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n    }\n\n    public class AllSystemPropertiesType\n    {\n        public string Id { get; set; }\n\n        [CreatedAt]\n        public DateTime CreatedAt { get; set; }\n\n        [UpdatedAt]\n        public DateTime UpdatedAt { get; set; }\n\n        [Version]\n        public string Version { get; set; }\n    }\n\n    public class MultipleSystemPropertiesType\n    {\n        public string Id { get; set; }\n\n        [CreatedAt]\n        public DateTime CreatedAt { get; set; }\n\n        [CreatedAt]\n        public DateTime CreatedAt2 { get; set; }\n\n        [Version]\n        public string Version { get; set; }\n    }\n\n    public class NamedSystemPropertiesType\n    {\n        public string Id { get; set; }\n\n        public DateTime __createdAt { get; set; }\n    }\n\n    public class NamedDifferentCasingSystemPropertiesType\n    {\n        public string Id { get; set; }\n\n        public DateTime __CreatedAt { get; set; }\n    }\n\n    public class NamedAndAttributedSystemPropertiesType\n    {\n        public string Id { get; set; }\n\n        public DateTime __createdAt { get; set; }\n\n        [CreatedAt]\n        public DateTime CreatedAt { get; set; }\n    }\n\n    public class DoubleNamedSystemPropertiesType\n    {\n        public string Id { get; set; }\n\n        public DateTime __createdAt { get; set; }\n\n        public DateTime CreatedAt { get; set; }\n    }\n\n    public class DoubleJsonPropertyNamedSystemPropertiesType\n    {\n        public string Id { get; set; }\n\n        [CreatedAt]\n        public DateTime CreatedAt { get; set; }\n\n        [JsonProperty(PropertyName = \"__createdAt\")]\n        public DateTime AlsoCreatedAt { get; set; }\n    }\n\n    public class IntegerIdWithSystemPropertiesType\n    {\n        public int Id { get; set; }\n\n        [CreatedAt]\n        public DateTime CreatedAt { get; set; }\n    }\n\n    public class LongIdWithSystemPropertiesType\n    {\n        public long Id { get; set; }\n\n        [CreatedAt]\n        public DateTime CreatedAt { get; set; }\n    }\n\n    public class IntegerIdWithNamedSystemPropertiesType\n    {\n        public int Id { get; set; }\n\n        public DateTime __createdAt { get; set; }\n    }\n\n    public class LongIdWithNamedSystemPropertiesType\n    {\n        public long Id { get; set; }\n\n        public DateTime __createdAt { get; set; }\n    }\n\n    public class StringCreatedAtType\n    {\n        public string Id { get; set; }\n\n        [CreatedAt]\n        public String CreatedAt { get; set; }\n    }\n\n    public class StringUpdatedAtType\n    {\n        public string Id { get; set; }\n\n        [UpdatedAt]\n        public String UpdatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/TestConverter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class TestConverter : JsonConverter\n    {\n        public override bool CanConvert(Type objectType)\n        {\n            return true;\n        }\n\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\n        {\n            return existingValue;\n        }\n\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/SerializationTypes/TypeWithConstructor.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class TypeWithConstructor\n    {\n        public string Id { get; set; }\n        public string Name { get; set; }\n\n        public TypeWithConstructor(string id, string name)\n        {\n            this.Id = id;\n            this.Name = name;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/TestData/IdTestData.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class IdTestData\n    {\n        public static string[] ValidStringIds = new string[] {\n            \"id\",\n            \"true\",\n            \"false\",\n            Guid.Empty.ToString(),\n            \"aa4da0b5-308c-4877-a5d2-03f274632636\",\n            \"69C8BE62-A09F-4638-9A9C-6B448E9ED4E7\",\n            \"{EC26F57E-1E65-4A90-B949-0661159D0546}\",\n            \"87D5B05C93614F8EBFADF7BC10F7AE8C\",\n            \"someone@someplace.com\",\n            \"id with spaces\",\n            \"id.with.periods\",\n            \"'id' with single quotes\",\n            \"id with 255 characters \" + Enumerable.Repeat<string>(\"x\", 255 - \"id with 255 characters \".Length).Aggregate(\"\", (s, c)=> s + c),\n            \"id with Japanese 私の車はどこですか？\",\n            \"id with Arabic أين هو سيارتي؟\",\n            \"id with Russian Где моя машина\",\n            \"id with some URL significant characters % # &\",\n            \"id with allowed ascii characters \" + Enumerable.Range(32, 126 - 32)\n                                                            .Where( n => n != 34 && n != 47 && n != 43 && n != 63 && n != 92 && n != 96)\n                                                            .Select( number => char.ToString((char)number))\n                                                            .Aggregate(\"\", (s, c)=> s + c),\n            \"id with allowed extended ascii characters \" + Enumerable.Range(160, 255 - 160)\n                                                                     .Select( number => char.ToString((char)number))\n                                                                     .Aggregate(\"\", (s, c)=> s + c),\n        };\n\n        public static string[] EmptyStringIds = new string[] {\n            \"\",\n        };\n\n        public static string[] InvalidStringIds = (new string[] {\n            \".\",\n            \"..\",\n            \"id with 256 characters \" + Enumerable.Repeat<string>(\"x\", 256 - \"id with 256 characters \".Length).Aggregate(\"\", (s, c)=> s + c),\n            \"\\r\",\n            \"\\n\",\n            \"\\t\",\n            \"id\\twith\\ttabs\",\n            \"id\\rwith\\rreturns\",\n            \"id\\nwith\\n\\newline\",\n            \"id with fowardslash \\\\\",\n            \"id with backslash /\",\n            \"1/8/2010 8:00:00 AM\",\n            \"\\\"idWithQuotes\\\"\",\n            \"?\",\n            \"\\\\\",\n            \"/\",\n            \"`\",\n            \"+\",\n        }).Concat(Enumerable.Range(0, 32).Select(number => char.ToString((char)number)))\n          .Concat(Enumerable.Range(127, 159 - 127).Select(number => char.ToString((char)number)))\n          .ToArray();\n\n        public static long[] ValidIntIds = new long[] {\n            1,\n            int.MaxValue,\n            long.MaxValue\n        };\n\n        public static long[] InvalidIntIds = new long[] {\n            -1,\n            int.MinValue,\n            long.MinValue,\n        };\n\n        public static object[] NonStringNonIntValidJsonIds = new object[] {\n            true,\n            false,\n            1.0,\n            -1.0,\n            0.0,\n        };\n\n        public static object[] NonStringNonIntIds = new object[] {\n            new PocoType(),\n            new DateTime(2010, 1, 8),\n            new object(),\n            1.0,\n            Guid.Parse(\"aa4da0b5-308c-4877-a5d2-03f274632636\")\n        };\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/TestData/SystemPropertiesTestData.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class SystemPropertiesTestData\n    {\n        public static MobileServiceSystemProperties[] SystemProperties = new MobileServiceSystemProperties[] {\n            MobileServiceSystemProperties.None,\n            MobileServiceSystemProperties.All,\n            MobileServiceSystemProperties.CreatedAt | MobileServiceSystemProperties.UpdatedAt | MobileServiceSystemProperties.Version, MobileServiceSystemProperties.Deleted,\n            MobileServiceSystemProperties.CreatedAt | MobileServiceSystemProperties.UpdatedAt | MobileServiceSystemProperties.Version,\n            MobileServiceSystemProperties.CreatedAt | MobileServiceSystemProperties.UpdatedAt,\n            MobileServiceSystemProperties.UpdatedAt | MobileServiceSystemProperties.Version,\n            MobileServiceSystemProperties.Version | MobileServiceSystemProperties.CreatedAt,\n            MobileServiceSystemProperties.CreatedAt,\n            MobileServiceSystemProperties.UpdatedAt,\n            MobileServiceSystemProperties.Version,\n            MobileServiceSystemProperties.Deleted\n        };\n\n        public static string[] ValidSystemProperties = new string[] {\n            \"__createdAt\",\n            \"__updatedAt\",\n            \"__version\",\n            \"__deleted\",\n            \"__CreatedAt\",\n            \"__futureSystemProperty\"\n        };\n\n        public static string[] NonSystemProperties = new string[] {\n            \"someProperty\",\n            \"createdAt\",\n            \"updatedAt\",\n            \"version\",\n            \"deleted\",\n            \"_createdAt\",\n            \"_updatedAt\",\n            \"_version\",\n            \"X__createdAt\"\n        };\n\n        public static string[] ValidSystemPropertyQueryStrings = new string[] {\n            // General\n            \"__systemProperties=*\",\n            \"__systemProperties=__createdAt\",\n            \"__systemProperties=__createdAt,__updatedAt\",\n            \"__systemProperties=__createdAt,__version\",\n            \"__systemProperties=__createdAt,__updatedAt,__version\",\n            \"__systemProperties=__createdAt,__version,__updatedAt\",\n            \"__systemProperties=__createdAt,__version,__updatedAt,__deleted\",\n            \"__systemProperties=__updatedAt\",\n            \"__systemProperties=__updatedAt,__createdAt\",\n            \"__systemProperties=__updatedAt,__createdAt,__version\",\n            \"__systemProperties=__updatedAt,__version\",\n            \"__systemProperties=__updatedAt,__version, __createdAt\",\n            \"__systemProperties=__version\",\n            \"__systemProperties=__version,__createdAt\",\n            \"__systemProperties=__version,__createdAt,__updatedAt\",\n            \"__systemProperties=__version,__updatedAt\",\n            \"__systemProperties=__version,__updatedAt, __createdAt\",\n\n            // Trailing commas, extra commas\n            \"__systemProperties=__createdAt,\",\n            \"__systemProperties=__createdAt,__updatedAt,\",\n            \"__systemProperties=__createdAt,__updatedAt,__version,\",\n            \"__systemProperties=,__createdAt\",\n            \"__systemProperties=__createdAt,,__updatedAt\",\n            \"__systemProperties=__createdAt, ,__updatedAt,__version\",\n            \"__systemProperties=__createdAt,,\",\n            \"__systemProperties=__createdAt, ,\",\n\n            // Trailing, leading whitespace\n            \"__systemProperties= *\",\n            \"__systemProperties=\\t*\\t\",\n            \"__systemProperties= __createdAt \",\n            \"__systemProperties=\\t__createdAt,\\t__updatedAt\\t\",\n            \"__systemProperties=\\r__createdAt,\\r__updatedAt,\\t__version\\r\",\n            \"__systemProperties=\\n__createdAt\\n\",\n            \"__systemProperties=__createdAt,\\n__updatedAt\",\n            \"__systemProperties=__createdAt, __updatedAt, __version\",\n\n            // Different casing\n            \"__SystemProperties=*\",\n            \"__SystemProperties=__createdAt\",\n            \"__SYSTEMPROPERTIES=__createdAt,__updatedAt\",\n            \"__systemproperties=__createdAt,__updatedAt,__version\",\n            \"__SystemProperties=__CreatedAt\",\n            \"__SYSTEMPROPERTIES=__createdAt,__UPDATEDAT\",\n            \"__systemproperties=__createdat,__UPDATEDAT,__veRsion\",\n\n            // Sans __ prefix\n            \"__systemProperties=createdAt\",\n            \"__systemProperties=updatedAt,createdAt\",\n            \"__systemProperties=UPDATEDAT,createdat\",\n            \"__systemProperties=updatedAt,version,createdAt\",\n\n            // Combinations of above\n            \"__SYSTEMPROPERTIES=__createdAt, updatedat\",\n            \"__systemProperties=__CreatedAt,,\\t__VERSION\",\n            \"__systemProperties= updatedat ,,\"\n        };\n\n        public static string[] InvalidSystemPropertyQueryStrings = new string[] {\n            // Unknown system Properties\n            \"__systemProperties=__created\",\n            \"__systemProperties=updated At\",\n            \"__systemProperties=notASystemProperty\",\n            \"__systemProperties=_version\",\n\n            // System properties not comma separated\n            \"__systemProperties=__createdAt __updatedAt\",\n            \"__systemProperties=__createdAt\\t__version\",\n            \"__systemProperties=createdAt updatedAt version\",\n            \"__systemProperties=__createdAt__version\",\n            \n            // All and individual system properties requested\n            \"__systemProperties=*,__updatedAt\",\n        };\n\n        // Missing ‘__’ prefix to systemProperties query string parameter\n        public static string InvalidSystemParameterQueryString = \"_systemProperties=__createdAt,__version\";\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/TestPlatform/IPushTestUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices\n{\n    /// <summary>\n    /// An interface for platform-specific assemblies to provide utility functions\n    /// regarding Push capabilities.\n    /// </summary>\n    public interface IPushTestUtility\n    {\n        string GetPushHandle();\n\n        string GetUpdatedPushHandle();        \n\n        Registration GetTemplateRegistrationForToast();        \n\n        void ValidateTemplateRegistration(Registration registration);        \n\n        void ValidateTemplateRegistrationBeforeRegister(Registration registration);        \n\n        void ValidateTemplateRegistrationAfterRegister(Registration registration, string zumoInstallationId);        \n\n        Registration GetNewNativeRegistration(string deviceId, IEnumerable<string> tags);        \n\n        Registration GetNewTemplateRegistration(string deviceId, string bodyTemplate, string templateName);\n\n        string GetListNativeRegistrationResponse();\n\n        string GetListTemplateRegistrationResponse();\n\n        string GetListMixedRegistrationResponse();\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/TestPlatform/ITestPlatform.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.ComponentModel;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Provides an interface that platform-specific Mobile Services assemblies \n    /// can implement to provide functionality required by the Mobile Services SDK \n    /// that is platform specific.\n    /// </summary>\n    public interface ITestPlatform\n    {\n        /// <summary>\n        /// Returns a platform-specific implemention of application storage.\n        /// </summary>\n        IPushTestUtility PushTestUtility { get; }        \n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/TestPlatform/MissingPushTestUtility.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    class MissingPushTestUtility : IPushTestUtility\n    {\n        public string GetPushHandle()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string GetUpdatedPushHandle()\n        {\n            throw new NotImplementedException();\n        }\n\n        public Registration GetTemplateRegistrationForToast()\n        {\n            throw new NotImplementedException();\n        }\n\n        public void ValidateTemplateRegistration(Registration registration)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void ValidateTemplateRegistrationBeforeRegister(Registration registration)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void ValidateTemplateRegistrationAfterRegister(Registration registration, string zumoInstallationId)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Registration GetNewNativeRegistration(string deviceId, IEnumerable<string> tags)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Registration GetNewTemplateRegistration(string deviceId, string bodyTemplate, string templateName)\n        {\n            throw new NotImplementedException();\n        }\n\n\n        public string GetListNativeRegistrationResponse()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string GetListTemplateRegistrationResponse()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string GetListMixedRegistrationResponse()\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/TestPlatform/MissingTestPlatform.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    class MissingTestPlatform : ITestPlatform\n    {\n        public IPushTestUtility PushTestUtility\n        {\n            get { return new MissingPushTestUtility(); }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/TestPlatform/TestPlatform.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Reflection;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Provides access to platform-specific framework API's.\n    /// </summary>\n    public static class TestPlatform\n    {\n        /// <summary>\n        /// The string value to use for the operating system name, arch, or version if\n        /// the value is unknown.\n        /// </summary>\n        public const string UnknownValueString = \"--\";\n\n        private static ITestPlatform current;\n\n        /// <summary>\n        /// Name of the assembly containing the Class with the <see cref=\"Platform.PlatformTypeFullName\"/> name.\n        /// </summary>\n        public static IList<string> PlatformAssemblyNames = new string [] \n        {\n            \"Microsoft.WindowsAzure.Mobile.Win8.Test\",\n            \"Microsoft.WindowsAzure.Mobile.WP8.Test\",\n            \"Microsoft.WindowsAzure.Mobile.WP81.Test\",\n            \"Microsoft.WindowsAzure.Mobile.Android.Test\",\n            \"MicrosoftWindowsAzureMobileiOSTest\"\n        };\n\n        /// <summary>\n        /// Name of the type implementing <see cref=\"IPlatform\"/>.\n        /// </summary>\n        public static string PlatformTypeFullName = \"Microsoft.WindowsAzure.MobileServices.Test.CurrentTestPlatform\";\n\n        /// <summary>\n        /// Gets the current platform. If none is loaded yet, accessing this property triggers platform resolution.\n        /// </summary>\n        public static ITestPlatform Instance\n        {\n            get\n            {\n                // create if not yet created\n                if (current == null)\n                {\n                    // assume the platform assembly has the same key, same version and same culture\n                    // as the assembly where the ITestPlatform interface lives.\n                    var provider = typeof(ITestPlatform);\n                    var asm = new AssemblyName(provider.GetTypeInfo().Assembly.FullName);\n                    \n                    // change name to the specified name\n                    foreach (string assemblyName in PlatformAssemblyNames) { \n                        asm.Name = assemblyName;\n                        var name = PlatformTypeFullName + \", \" + asm.FullName;\n\n                        //look for the type information but do not throw if not found\n                        var type = Type.GetType(name, false);\n                    \n                        if (type != null)\n                        {\n                            // create type\n                            // since we are the only one implementing this interface\n                            // this cast is safe.\n                            current = (ITestPlatform)Activator.CreateInstance(type);\n                            return current;\n                        }\n                    }\n\n                    current = new MissingTestPlatform();\n                }\n\n                return current;\n            }\n\n            // keep this public so we can set a TestPlatform for unit testing.\n            set\n            {\n                current = value;\n            }\n        }        \n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Authentication/MobileServiceTokenAuthenticationTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.UnitTests\n{\n    [Tag(\"unit\")]\n    [Tag(\"auth\")]\n    [SuppressMessage(\"Microsoft.Design\", \"CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable\")]\n    public class MobileServiceTokenAuthenticationTests : TestBase\n    {\n        private TestHttpHandler hijack;\n        private MobileServiceClient client;\n\n        private void TestInitialize()\n        {\n            string appUrl = \"http://www.test.com/\";\n            string appKey = \"secret...\";\n            this.hijack = new TestHttpHandler();\n            this.hijack.SetResponseContent(String.Empty);\n\n            var originalFactory = MobileServiceHttpClient.DefaultHandlerFactory;\n            MobileServiceHttpClient.DefaultHandlerFactory = () => this.hijack;\n\n            this.client = new MobileServiceClient(new Uri(appUrl), appKey, hijack);\n\n            MobileServiceHttpClient.DefaultHandlerFactory = originalFactory;\n        }\n\n        [TestMethod]\n        public void StartUri_IncludesParameters()\n        {\n            TestStartUriForParameters(new Dictionary<string, string>()\n            {\n                { \"display\", \"popup\" },\n                { \"scope\", \"email,birthday\" }\n            }, \"http://www.test.com/login/microsoftaccount?display=popup&scope=email%2Cbirthday\");\n        }\n\n        [TestMethod]\n        public void StartUri_WithNullParameters()\n        {\n            TestStartUriForParameters(null, \"http://www.test.com/login/microsoftaccount\");\n        }\n\n        [TestMethod]\n        public void StartUri_WithEmptyParameters()\n        {\n            TestStartUriForParameters(new Dictionary<string, string>(), \"http://www.test.com/login/microsoftaccount\");\n        }\n\n        private void TestStartUriForParameters(Dictionary<string, string> parameters, string uri)\n        {\n            TestInitialize();\n            var auth = new MobileServiceTokenAuthentication(this.client, \"MicrosoftAccount\", new JObject(), parameters);\n            Assert.AreEqual(auth.StartUri.OriginalString, uri);\n        }\n\n        [AsyncTestMethod]\n        public Task LoginAsync_IncludesTheParameters()\n        {\n            return TestLoginAsyncForParameters(new Dictionary<string, string>()\n            {\n                { \"display\", \"popup\" },\n                { \"scope\", \"email,birthday\" }\n            }, \"http://www.test.com/login/microsoftaccount?display=popup&scope=email%2Cbirthday\");\n        }\n\n        [AsyncTestMethod]\n        public Task LoginAsync_WithNullParameterss()\n        {\n            return TestLoginAsyncForParameters(null, \"http://www.test.com/login/microsoftaccount\");\n        }\n\n        [AsyncTestMethod]\n        public Task LoginAsync_WithEmptyParameterss()\n        {\n            return TestLoginAsyncForParameters(new Dictionary<string, string>(), \"http://www.test.com/login/microsoftaccount\");\n        }\n\n        private async Task TestLoginAsyncForParameters(Dictionary<string, string> parameters, string uri)\n        {\n            TestInitialize();\n            var auth = new MobileServiceTokenAuthentication(this.client, \"MicrosoftAccount\", new JObject(), parameters);\n            await auth.LoginAsync();\n            Assert.AreEqual(this.hijack.Request.RequestUri.OriginalString, uri);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Collections/MobileServiceCollection.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Test;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\n#if XAMARIN\nusing TaskEx=System.Threading.Tasks.Task;\n#endif\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"collection\")]\n    [Tag(\"unit\")]\n    public class MobileServiceCollectionTest : TestBase\n    {\n        [AsyncTestMethod]\n        public async Task MobileServiceCollectionMultipleLoadItemsAsyncShouldThrow()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n\n            MobileServiceCollection<Book> collection = new MobileServiceCollection<Book>(query);\n            CancellationTokenSource tokenSource = new CancellationTokenSource();\n\n            Exception ex = null;\n\n            try\n            {\n                await Task.WhenAll(collection.LoadMoreItemsAsync(tokenSource.Token), collection.LoadMoreItemsAsync(tokenSource.Token));\n            }\n            catch (InvalidOperationException e)\n            {\n                ex = e;\n            }\n\n            Assert.IsNotNull(ex);\n        } \n\n        [TestMethod]\n        public void MobileServiceCollectionItemsCanBeAddedAndNotifies()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n            query.EnumerableAsyncThrowsException = true;\n\n            MobileServiceCollection<Book, Book> collection = new MobileServiceCollection<Book, Book>(query);\n\n            List<string> properties = new List<string>();\n            List<string> expectedProperties = new List<string>() { \"Count\", \"Item[]\" };\n            List<NotifyCollectionChangedAction> actions = new List<NotifyCollectionChangedAction>();\n            List<NotifyCollectionChangedAction> expectedActions = new List<NotifyCollectionChangedAction>() { NotifyCollectionChangedAction.Add };\n\n            Book book = new Book();\n\n            ((INotifyPropertyChanged)collection).PropertyChanged += (s, e) => properties.Add(e.PropertyName);\n            collection.CollectionChanged += (s, e) => actions.Add(e.Action);\n            collection.Add(book);\n\n            Assert.AreEqual(1, collection.Count);\n            Assert.AreEqual(book, collection[0]);\n            Assert.IsTrue(properties.SequenceEqual(expectedProperties));\n            Assert.IsTrue(actions.SequenceEqual(expectedActions));\n        }\n\n        [TestMethod]\n        public void MobileServiceCollectionCanClearAndNotifies()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n            query.EnumerableAsyncThrowsException = true;\n\n            MobileServiceCollection<Book> collection = new MobileServiceCollection<Book>(query);\n\n            List<string> properties = new List<string>();\n            List<string> expectedProperties = new List<string>() { \"Count\", \"Item[]\" };\n            List<NotifyCollectionChangedAction> actions = new List<NotifyCollectionChangedAction>();\n            List<NotifyCollectionChangedAction> expectedActions = new List<NotifyCollectionChangedAction>() { NotifyCollectionChangedAction.Reset };\n\n            Book book = new Book();\n            collection.Add(book);\n\n            ((INotifyPropertyChanged)collection).PropertyChanged += (s, e) => properties.Add(e.PropertyName);\n            collection.CollectionChanged += (s, e) => actions.Add(e.Action);\n            collection.Clear();\n\n            Assert.AreEqual(0, collection.Count);\n            Assert.IsTrue(properties.SequenceEqual(expectedProperties));\n            Assert.IsTrue(actions.SequenceEqual(expectedActions));\n        }\n\n        [TestMethod]\n        public void MobileServiceCollectionCanContainsAndNotNotifies()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n            query.EnumerableAsyncThrowsException = true;\n\n            MobileServiceCollection<Book, Book> collection = new MobileServiceCollection<Book, Book>(query);\n\n            List<string> properties = new List<string>();\n            List<string> expectedProperties = new List<string>() {  };\n            List<NotifyCollectionChangedAction> actions = new List<NotifyCollectionChangedAction>();\n            List<NotifyCollectionChangedAction> expectedActions = new List<NotifyCollectionChangedAction>() {  };\n\n            Book book = new Book();\n            collection.Add(book);\n\n            ((INotifyPropertyChanged)collection).PropertyChanged += (s, e) => properties.Add(e.PropertyName);\n            collection.CollectionChanged += (s, e) => actions.Add(e.Action);\n            bool contains = collection.Contains(book);\n\n            Assert.AreEqual(true, contains);\n            Assert.IsTrue(properties.SequenceEqual(expectedProperties));\n            Assert.IsTrue(actions.SequenceEqual(expectedActions));\n        }\n\n        [TestMethod]\n        public void MobileServiceCollectionCanCopyToAndNotNotifies()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n            query.EnumerableAsyncThrowsException = true;\n\n            MobileServiceCollection<Book> collection = new MobileServiceCollection<Book>(query);\n\n            List<string> properties = new List<string>();\n            List<string> expectedProperties = new List<string>() {  };\n            List<NotifyCollectionChangedAction> actions = new List<NotifyCollectionChangedAction>();\n            List<NotifyCollectionChangedAction> expectedActions = new List<NotifyCollectionChangedAction>() {  };\n\n            Book book = new Book();\n            collection.Add(book);\n            Book[] books = new Book[1];\n\n            ((INotifyPropertyChanged)collection).PropertyChanged += (s, e) => properties.Add(e.PropertyName);\n            collection.CollectionChanged += (s, e) => actions.Add(e.Action);\n            collection.CopyTo(books, 0);\n\n            Assert.AreEqual(1, collection.Count);\n            Assert.AreEqual(1, books.Count());\n            Assert.AreEqual(collection[0], books[0]);\n            Assert.IsTrue(properties.SequenceEqual(expectedProperties));\n            Assert.IsTrue(actions.SequenceEqual(expectedActions));\n        }\n\n        [TestMethod]\n        public void MobileServiceCollectionCanIndexOfAndNotNotifies()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n            query.EnumerableAsyncThrowsException = true;\n\n            MobileServiceCollection<Book, Book> collection = new MobileServiceCollection<Book, Book>(query);\n\n            List<string> properties = new List<string>();\n            List<string> expectedProperties = new List<string>() { };\n            List<NotifyCollectionChangedAction> actions = new List<NotifyCollectionChangedAction>();\n            List<NotifyCollectionChangedAction> expectedActions = new List<NotifyCollectionChangedAction>() { };\n\n            Book book = new Book();\n            collection.Add(book);\n\n            ((INotifyPropertyChanged)collection).PropertyChanged += (s, e) => properties.Add(e.PropertyName);\n            collection.CollectionChanged += (s, e) => actions.Add(e.Action);\n            int indexof = collection.IndexOf(book);\n\n            Assert.AreEqual(1, collection.Count);\n            Assert.AreEqual(0, indexof);\n            Assert.IsTrue(properties.SequenceEqual(expectedProperties));\n            Assert.IsTrue(actions.SequenceEqual(expectedActions));\n        }\n\n        [TestMethod]\n        public void MobileServiceCollectionCanInsertAndNotifies()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n            query.EnumerableAsyncThrowsException = true;\n\n            MobileServiceCollection<Book> collection = new MobileServiceCollection<Book>(query);\n\n            List<string> properties = new List<string>();\n            List<string> expectedProperties = new List<string>() { \"Count\", \"Item[]\" };\n            List<NotifyCollectionChangedAction> actions = new List<NotifyCollectionChangedAction>();\n            List<NotifyCollectionChangedAction> expectedActions = new List<NotifyCollectionChangedAction>() { NotifyCollectionChangedAction.Add };\n\n            Book book = new Book();\n\n            ((INotifyPropertyChanged)collection).PropertyChanged += (s, e) => properties.Add(e.PropertyName);\n            collection.CollectionChanged += (s, e) => actions.Add(e.Action);\n            collection.Insert(0, book);\n\n            Assert.AreEqual(1, collection.Count);\n            Assert.AreEqual(book, collection[0]);\n            Assert.IsTrue(properties.SequenceEqual(expectedProperties));\n            Assert.IsTrue(actions.SequenceEqual(expectedActions));\n        }\n        \n        [TestMethod]\n        public void MobileServiceCollectionCanRemoveAndNotifies()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n            query.EnumerableAsyncThrowsException = true;\n\n            MobileServiceCollection<Book, Book> collection = new MobileServiceCollection<Book, Book>(query);\n\n            List<string> properties = new List<string>();\n            List<string> expectedProperties = new List<string>() { \"Count\", \"Item[]\" };\n            List<NotifyCollectionChangedAction> actions = new List<NotifyCollectionChangedAction>();\n            List<NotifyCollectionChangedAction> expectedActions = new List<NotifyCollectionChangedAction>() { NotifyCollectionChangedAction.Remove };\n\n            Book book = new Book();\n            collection.Add(book);\n\n            ((INotifyPropertyChanged)collection).PropertyChanged += (s, e) => properties.Add(e.PropertyName);\n            collection.CollectionChanged += (s, e) => actions.Add(e.Action);\n            collection.Remove(book);\n\n            Assert.AreEqual(0, collection.Count);\n            Assert.IsTrue(properties.SequenceEqual(expectedProperties));\n            Assert.IsTrue(actions.SequenceEqual(expectedActions));\n        }\n                \n        [TestMethod]\n        public void MobileServiceCollectionCanRemoveAtAndNotifies()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n            query.EnumerableAsyncThrowsException = true;\n\n            MobileServiceCollection<Book> collection = new MobileServiceCollection<Book>(query);\n\n            List<string> properties = new List<string>();\n            List<string> expectedProperties = new List<string>() { \"Count\", \"Item[]\" };\n            List<NotifyCollectionChangedAction> actions = new List<NotifyCollectionChangedAction>();\n            List<NotifyCollectionChangedAction> expectedActions = new List<NotifyCollectionChangedAction>() { NotifyCollectionChangedAction.Remove };\n\n            Book book = new Book();\n            collection.Add(book);\n\n            ((INotifyPropertyChanged)collection).PropertyChanged += (s, e) => properties.Add(e.PropertyName);\n            collection.CollectionChanged += (s, e) => actions.Add(e.Action);\n            collection.RemoveAt(0);\n\n            Assert.AreEqual(0, collection.Count);\n            Assert.IsTrue(properties.SequenceEqual(expectedProperties));\n            Assert.IsTrue(actions.SequenceEqual(expectedActions));\n        }\n\n        [TestMethod]\n        public void MobileServiceCollectionCanReplaceAndNotifies()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n            query.EnumerableAsyncThrowsException = true;\n\n            MobileServiceCollection<Book, Book> collection = new MobileServiceCollection<Book, Book>(query);\n\n            List<string> properties = new List<string>();\n            List<string> expectedProperties = new List<string>() { \"Item[]\" };\n            List<NotifyCollectionChangedAction> actions = new List<NotifyCollectionChangedAction>();\n            List<NotifyCollectionChangedAction> expectedActions = new List<NotifyCollectionChangedAction>() { NotifyCollectionChangedAction.Replace };\n\n            Book book = new Book();\n            Book book2 = new Book();\n            collection.Add(book);\n\n            ((INotifyPropertyChanged)collection).PropertyChanged += (s, e) => properties.Add(e.PropertyName);\n            collection.CollectionChanged += (s, e) => actions.Add(e.Action);\n            collection[0] = book2;\n\n            Assert.AreEqual(1, collection.Count);\n            Assert.AreEqual(book2, collection[0]);\n            Assert.IsTrue(properties.SequenceEqual(expectedProperties));\n            Assert.IsTrue(actions.SequenceEqual(expectedActions));\n        }\n\n        [TestMethod]\n        public void MobileServiceCollectionHasMoreItemsInitiallyTrue()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n            query.EnumerableAsyncThrowsException = true;\n\n            MobileServiceCollection<Book> collection = new MobileServiceCollection<Book>(query);\n            \n            Assert.IsTrue(collection.HasMoreItems);\n        }\n\n        [AsyncTestMethod]\n        public async Task MobileServiceCollectionTotalCountSet()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n\n            List<string> properties = new List<string>();\n            List<string> expectedProperties = new List<string>() { \"HasMoreItems\", \"Count\", \"Item[]\", \"Count\", \"Item[]\", \"TotalCount\" };\n            List<NotifyCollectionChangedAction> actions = new List<NotifyCollectionChangedAction>();\n            List<NotifyCollectionChangedAction> expectedActions = new List<NotifyCollectionChangedAction>() { NotifyCollectionChangedAction.Add, NotifyCollectionChangedAction.Add };\n\n            MobileServiceCollection<Book, Book> collection = new MobileServiceCollection<Book, Book>(query);\n            CancellationTokenSource tokenSource = new CancellationTokenSource();\n\n            ((INotifyPropertyChanged)collection).PropertyChanged += (s, e) => properties.Add(e.PropertyName);\n            collection.CollectionChanged += (s, e) => actions.Add(e.Action);\n            int result = await collection.LoadMoreItemsAsync(tokenSource.Token);\n\n            Assert.AreEqual((long)2, collection.TotalCount);\n            Assert.IsTrue(properties.SequenceEqual(expectedProperties));\n            Assert.IsTrue(actions.SequenceEqual(expectedActions));\n        }\n\n        [AsyncTestMethod]\n        public async Task MobileServiceCollectionHasMoreItemsShouldBeFalseAfterRetrievingDataWhenNoPaging()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n\n            MobileServiceCollection<Book> collection = new MobileServiceCollection<Book>(query);\n            CancellationTokenSource tokenSource = new CancellationTokenSource();\n\n            List<string> properties = new List<string>();\n            List<string> expectedProperties = new List<string>() { \"HasMoreItems\", \"Count\", \"Item[]\", \"Count\", \"Item[]\", \"TotalCount\" };\n            List<NotifyCollectionChangedAction> actions = new List<NotifyCollectionChangedAction>();\n            List<NotifyCollectionChangedAction> expectedActions = new List<NotifyCollectionChangedAction>() { NotifyCollectionChangedAction.Add, NotifyCollectionChangedAction.Add };\n\n            ((INotifyPropertyChanged)collection).PropertyChanged += (s, e) => properties.Add(e.PropertyName);\n            collection.CollectionChanged += (s, e) => actions.Add(e.Action);\n            int result = await collection.LoadMoreItemsAsync(tokenSource.Token);\n\n            Assert.IsFalse(collection.HasMoreItems);\n            Assert.IsTrue(properties.SequenceEqual(expectedProperties));\n            Assert.IsTrue(actions.SequenceEqual(expectedActions));\n        }\n\n        [AsyncTestMethod]\n        public async Task MobileServiceCollectionLoadMoreItemsAsyncFiresLoadingItemsEventBeforeReadingData()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n\n            MobileServiceCollection<Book, Book> collection = new MobileServiceCollection<Book, Book>(query);\n            CancellationTokenSource tokenSource = new CancellationTokenSource();\n\n            Exception ex = null;\n\n            bool firedLoading = false;\n\n            collection.LoadingItems += (s, e) => firedLoading = true;\n\n            try\n            {\n                int result = await collection.LoadMoreItemsAsync(tokenSource.Token);\n            }\n            catch (Exception e)\n            {\n                ex = e;\n            }\n\n            Assert.IsTrue(firedLoading);\n            Assert.IsNull(ex);\n\n        }\n\n        [AsyncTestMethod]\n        public async Task MobileServiceCollectionLoadMoreItemsAsyncFiresLoadingCompleteEventAfterReadingData()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n\n            MobileServiceCollection<Book, Book> collection = new MobileServiceCollection<Book, Book>(query);\n            CancellationTokenSource tokenSource = new CancellationTokenSource();\n\n            Exception ex = null;\n\n            int loadedEventArgsManyItemsLoaded = 0;\n            collection.LoadingComplete += (s, e) => loadedEventArgsManyItemsLoaded = e.TotalItemsLoaded;\n\n            try\n            {\n                int result = await collection.LoadMoreItemsAsync(tokenSource.Token);\n            }\n            catch (Exception e)\n            {\n                ex = e;\n            }\n\n            Assert.AreEqual(loadedEventArgsManyItemsLoaded, 2);\n            Assert.IsNull(ex);\n\n        }    \n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Http/HttpUtilityTests.cs",
    "content": "﻿using System;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"unit\")]\n    [Tag(\"http\")]\n    public class HttpUtilityTests : TestBase\n    {\n\n        [TestMethod]\n        public static void TryParseQueryUri_ReturnsTrue_WhenQueryIsRelativeOrAbsoluteUri()\n        {\n            var data = new[]\n            {\n                new \n                {\n                    ServiceUri = \"http://www.test.com\", \n                    Query = \"/about?$filter=a eq b&$orderby=c\", \n                    Absolute = false,\n                    Result = \"http://www.test.com/about?$filter=a eq b&$orderby=c\"\n                },\n                new \n                {\n                    ServiceUri = \"http://www.test.com/\", \n                    Query = \"http://www.test.com/about?$filter=a eq b&$orderby=c\", \n                    Absolute = true,\n                    Result = \"http://www.test.com/about?$filter=a eq b&$orderby=c\"\n                }\n            };\n\n            foreach (var item in data)\n            {\n                Uri result;\n                bool absolute;\n                Assert.IsTrue(HttpUtility.TryParseQueryUri(new Uri(item.ServiceUri), item.Query, out result, out absolute));\n                Assert.AreEqual(absolute, item.Absolute);\n                AssertEx.QueryEquals(result.AbsoluteUri, item.Result);\n            }\n        }\n\n        [TestMethod]\n        public static void TryParseQueryUri_ReturnsFalse_WhenQueryIsNotRelativeOrAbsoluteUri()\n        {\n            var data = new[]\n            {\n                new \n                {\n                    ServiceUri = \"http://www.test.com\", \n                    Query = \"about?$filter=a eq b&$orderby=c\", \n                    Result = \"http://www.test.com/about?$filter=a eq b&$orderby=c\"\n                },\n                new \n                {\n                    ServiceUri = \"http://www.test.com/\", \n                    Query = \"$filter=a eq b&$orderby=c\", \n                    Result = \"http://www.test.com/about?$filter=a eq b&$orderby=c\"\n                }\n            };\n\n            foreach (var item in data)\n            {\n                Uri result;\n                bool absolute;\n                Assert.IsFalse(HttpUtility.TryParseQueryUri(new Uri(item.ServiceUri), item.Query, out result, out absolute));\n                Assert.IsFalse(absolute);\n                Assert.IsNull(result);\n            }\n        }\n\n        [TestMethod]\n        public void GetUriWithoutQuery_ReturnsUriWithPath()\n        {\n            Tuple<string, string>[] input = new[]\n            {\n                Tuple.Create(\"http://contoso.com/asdf?$filter=3\", \"http://contoso.com/asdf\"),\n                Tuple.Create(\"http://contoso.com/asdf/def?$filter=3\", \"http://contoso.com/asdf/def\"),\n                Tuple.Create(\"https://contoso.com/asdf/def?$filter=3\", \"https://contoso.com/asdf/def\")\n            };\n\n            foreach (var item in input)\n            {\n                AssertEx.QueryEquals(HttpUtility.GetUriWithoutQuery(new Uri(item.Item1)), item.Item2);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/HttpHandlers/ComplexDelegatingHandler.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    internal class ComplexDelegatingHandler : DelegatingHandler\n    {\n        private static List<string> allMessages = new List<string>();\n\n        public string MessageBeforeSend { get; private set; }\n        public string MessageAfterSend { get; private set; }\n\n        public ComplexDelegatingHandler(string messageBeforeSend, string messageAfterSend)\n        {\n            this.MessageBeforeSend = messageBeforeSend;\n            this.MessageAfterSend = messageAfterSend;\n        }\n\n        public static void ClearStoredMessages()\n        {\n            allMessages.Clear();\n        }\n\n        public static IEnumerable<string> AllMessages\n        {\n            get { return allMessages; }\n        }\n\n        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n        {\n            allMessages.Add(this.MessageBeforeSend);\n            var response = await base.SendAsync(request, cancellationToken);\n            allMessages.Add(this.MessageAfterSend);\n            return response;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/HttpHandlers/TestHttpHandler.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// ServiceFilter that allows a test to control the HTTP pipeline and\n    /// analyze a request and provide a set response.\n    /// </summary>\n    public class TestHttpHandler : DelegatingHandler\n    {\n        HttpResponseMessage nullResponse;\n        int responseIndex = 0;\n\n        public TestHttpHandler()\n        {            \n            this.Requests = new List<HttpRequestMessage>();\n            this.Responses = new List<HttpResponseMessage>();\n            this.RequestContents = new List<string>();\n\n            this.nullResponse = CreateResponse(String.Empty);\n        }\n\n        public HttpRequestMessage Request\n        {\n            get { return this.Requests.Count == 0 ? null : this.Requests[this.Requests.Count - 1]; }\n            set\n            {\n                this.Requests.Clear();\n                this.Requests.Add(value);\n            }\n        }\n\n        public List<HttpRequestMessage> Requests { get; set; }\n        public List<string> RequestContents { get; set; }\n\n        public HttpResponseMessage Response\n        {\n            get { return this.Responses.Count == 0 ? null : this.Responses[this.Responses.Count - 1]; }\n            set\n            {\n                this.responseIndex = 0;\n                this.Responses.Clear();\n                this.Responses.Add(value);\n            }\n        }\n\n        public List<HttpResponseMessage> Responses { get; set; }        \n\n        public Func<HttpRequestMessage, Task<HttpRequestMessage>> OnSendingRequest { get; set; }\n\n        public void SetResponseContent(string content)\n        {\n            this.Response = CreateResponse(content); \n        }\n\n        public void AddResponseContent(string content)\n        {\n            this.Responses.Add(CreateResponse(content));\n        }\n\n        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n        {\n            string content = request.Content == null ? null : await request.Content.ReadAsStringAsync();\n            this.RequestContents.Add(content);\n\n            if (this.OnSendingRequest != null)\n            {\n                this.Requests.Add(await this.OnSendingRequest(request));                \n            }\n            else\n            {\n                this.Requests.Add(request);                \n            }\n            \n            if (responseIndex < this.Responses.Count)\n            {\n                return Responses[responseIndex++];\n            }\n\n            return nullResponse;\n        }\n\n        public static HttpResponseMessage CreateResponse(string content, HttpStatusCode code = HttpStatusCode.OK)\n        {\n            return new HttpResponseMessage(code)\n            {\n                Content = new StringContent(content, Encoding.UTF8, \"application/json\")\n            };\n        }\n\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/MobileServiceClient.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"unit\")]\n    [Tag(\"client\")]\n    public class MobileServiceClientTests : TestBase\n    {\n        /// <summary>\n        /// Verify we have an installation ID created whenever we use a ZUMO\n        /// service. \n        /// </summary>\n        [TestMethod]\n        public void InstallationId()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://test.com\");\n\n            //string settings = ApplicationData.Current.LocalSettings.Values[\"MobileServices.Installation.config\"] as string;\n            //string id = (string)JToken.Parse(settings)[\"applicationInstallationId\"];\n            //Assert.IsNotNull(id);\n        }\n\n        [TestMethod]\n        public void Construction()\n        {\n            string appUrl = \"http://www.test.com/\";\n            string appKey = \"secret...\";\n\n            MobileServiceClient service = new MobileServiceClient(new Uri(appUrl), appKey);\n            Assert.AreEqual(appUrl, service.ApplicationUri.ToString());\n            Assert.AreEqual(appKey, service.ApplicationKey);\n\n            service = new MobileServiceClient(appUrl, appKey);\n            Assert.AreEqual(appUrl, service.ApplicationUri.ToString());\n            Assert.AreEqual(appKey, service.ApplicationKey);\n\n            service = new MobileServiceClient(new Uri(appUrl));\n            Assert.AreEqual(appUrl, service.ApplicationUri.ToString());\n            Assert.AreEqual(null, service.ApplicationKey);\n\n            service = new MobileServiceClient(appUrl);\n            Assert.AreEqual(appUrl, service.ApplicationUri.ToString());\n            Assert.AreEqual(null, service.ApplicationKey);\n\n            Uri none = null;\n            Throws<ArgumentNullException>(() => new MobileServiceClient(none));\n            Throws<FormatException>(() => new MobileServiceClient(\"not a valid uri!!!@#!@#\"));\n        }\n\n\n        [AsyncTestMethod]\n        public async Task SingleHttpHandlerConstructor()\n        {\n            string appUrl = \"http://www.test.com/\";\n            string appKey = \"secret...\";\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            IMobileServiceClient service =\n                new MobileServiceClient(new Uri(appUrl), appKey, hijack);\n\n            // Ensure properties are copied over\n            Assert.AreEqual(appUrl, service.ApplicationUri.ToString());\n            Assert.AreEqual(appKey, service.ApplicationKey);\n\n            // Set the handler to return an empty array\n            hijack.SetResponseContent(\"[]\");\n            JToken response = await service.GetTable(\"foo\").ReadAsync(\"bar\");\n\n            // Verify the handler was in the loop\n            Assert.StartsWith(hijack.Request.RequestUri.ToString(), appUrl);\n        }\n\n        [AsyncTestMethod]\n        public async Task MultipleHttpHandlerConstructor()\n        {\n            string appUrl = \"http://www.test.com/\";\n            string appKey = \"secret...\";\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            string firstBeforeMessage = \"Message before 1\";\n            string firstAfterMessage = \"Message after 1\";\n            string secondBeforeMessage = \"Message before 2\";\n            string secondAfterMessage = \"Message after 2\";\n\n            ComplexDelegatingHandler firstHandler = new ComplexDelegatingHandler(firstBeforeMessage, firstAfterMessage);\n            ComplexDelegatingHandler secondHandler = new ComplexDelegatingHandler(secondBeforeMessage, secondAfterMessage);\n\n            IMobileServiceClient service =\n                new MobileServiceClient(new Uri(appUrl), appKey, firstHandler, secondHandler, hijack);\n\n            // Validate that handlers are properly chained\n            Assert.AreSame(hijack, secondHandler.InnerHandler);\n            Assert.AreSame(secondHandler, firstHandler.InnerHandler);\n\n            // Clears the messages on the handler\n            ComplexDelegatingHandler.ClearStoredMessages();\n\n            // Set the handler to return an empty array\n            hijack.SetResponseContent(\"[]\");\n            JToken response = await service.GetTable(\"foo\").ReadAsync(\"bar\");\n\n            var storedMessages = new List<string>(ComplexDelegatingHandler.AllMessages);\n            Assert.AreEqual(4, storedMessages.Count);\n            Assert.AreEqual(firstBeforeMessage, storedMessages[0]);\n            Assert.AreEqual(secondBeforeMessage, storedMessages[1]);\n            Assert.AreEqual(secondAfterMessage, storedMessages[2]);\n            Assert.AreEqual(firstAfterMessage, storedMessages[3]);\n        }\n\n        [TestMethod]\n        public void Logout()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            service.CurrentUser = new MobileServiceUser(\"123456\");\n            Assert.IsNotNull(service.CurrentUser);\n\n            service.Logout();\n            Assert.IsNull(service.CurrentUser);\n        }\n\n        [AsyncTestMethod]\n        public async Task StandardRequestFormat()\n        {\n            string appUrl = \"http://www.test.com\";\n            string appKey = \"secret...\";\n            string collection = \"tests\";\n            string query = \"$filter=id eq 12\";\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(appUrl, appKey, hijack);\n            service.CurrentUser = new MobileServiceUser(\"someUser\");\n            service.CurrentUser.MobileServiceAuthenticationToken = \"Not rhubarb\";\n\n            hijack.SetResponseContent(\"[{\\\"id\\\":12,\\\"value\\\":\\\"test\\\"}]\");\n            JToken response = await service.GetTable(collection).ReadAsync(query);\n\n            Assert.IsNotNull(hijack.Request.Headers.GetValues(\"X-ZUMO-INSTALLATION-ID\").First());\n            Assert.AreEqual(\"secret...\", hijack.Request.Headers.GetValues(\"X-ZUMO-APPLICATION\").First());\n            Assert.AreEqual(\"application/json\", hijack.Request.Headers.Accept.First().MediaType);\n            Assert.AreEqual(\"Not rhubarb\", hijack.Request.Headers.GetValues(\"X-ZUMO-AUTH\").First());\n\n            // Workaround mono bug https://bugzilla.xamarin.com/show_bug.cgi?id=15128\n            // use commented line below once the bug fix has hit stable channel for xamarin.iOS\n            // string userAgent = hijack.Request.Headers.UserAgent.ToString();\n\n            string userAgent = string.Join(\" \", hijack.Request.Headers.GetValues(\"user-agent\"));\n            Assert.IsTrue(userAgent.Contains(\"ZUMO/1.\"));\n            Assert.IsTrue(userAgent.Contains(\"version=1.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task ErrorMessageConstruction()\n        {\n            string appUrl = \"http://www.test.com\";\n            string appKey = \"secret...\";\n            string collection = \"tests\";\n            string query = \"$filter=id eq 12\";\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(appUrl, appKey, hijack);\n\n            // Verify the error message is correctly pulled out\n            hijack.SetResponseContent(\"{\\\"error\\\":\\\"error message\\\",\\\"other\\\":\\\"donkey\\\"}\");\n            hijack.Response.StatusCode = HttpStatusCode.Unauthorized;\n            hijack.Response.ReasonPhrase = \"YOU SHALL NOT PASS.\";\n            try\n            {\n                JToken response = await service.GetTable(collection).ReadAsync(query);\n            }\n            catch (InvalidOperationException ex)\n            {\n                Assert.AreEqual(ex.Message, \"error message\");\n            }\n\n            // Verify all of the exception parameters\n            hijack.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);\n            hijack.Response.Content = new StringContent(\"{\\\"error\\\":\\\"error message\\\",\\\"other\\\":\\\"donkey\\\"}\", Encoding.UTF8, \"application/json\");\n            hijack.Response.ReasonPhrase = \"YOU SHALL NOT PASS.\";\n            try\n            {\n                JToken response = await service.GetTable(collection).ReadAsync(query);\n            }\n            catch (MobileServiceInvalidOperationException ex)\n            {\n                Assert.AreEqual(ex.Message, \"error message\");\n                Assert.AreEqual(HttpStatusCode.Unauthorized, ex.Response.StatusCode);\n                Assert.Contains(ex.Response.Content.ReadAsStringAsync().Result, \"donkey\");\n                Assert.StartsWith(ex.Request.RequestUri.ToString(), appUrl);\n                Assert.AreEqual(\"YOU SHALL NOT PASS.\", ex.Response.ReasonPhrase);\n            }\n\n            // If no error message in the response, we'll use the\n            // StatusDescription instead\n            hijack.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);\n            hijack.Response.Content = new StringContent(\"{\\\"error\\\":\\\"error message\\\",\\\"other\\\":\\\"donkey\\\"}\", Encoding.UTF8, \"application/json\");\n            hijack.Response.ReasonPhrase = \"YOU SHALL NOT PASS.\";\n            hijack.SetResponseContent(\"{\\\"other\\\":\\\"donkey\\\"}\");\n\n            try\n            {\n                JToken response = await service.GetTable(collection).ReadAsync(query);\n            }\n            catch (InvalidOperationException ex)\n            {\n                Assert.AreEqual(\"The request could not be completed.  (YOU SHALL NOT PASS.)\", ex.Message);\n            }\n        }\n\n        [TestMethod]\n        public async Task DeleteAsync_Throws_WhenSyncContextIsNotInitialized()\n        {\n            await this.TestSyncContextNotInitialized(table => table.DeleteAsync(new ToDoWithSystemPropertiesType(\"abc\")));\n        }\n\n        [TestMethod]\n        public async Task InsertAsync_Throws_WhenSyncContextIsNotInitialized()\n        {\n            await this.TestSyncContextNotInitialized(table => table.InsertAsync(new ToDoWithSystemPropertiesType(\"abc\")));\n        }\n\n        [TestMethod]\n        public async Task UpdateAsync_Throws_WhenSyncContextIsNotInitialized()\n        {\n            await this.TestSyncContextNotInitialized(table => table.UpdateAsync(new ToDoWithSystemPropertiesType(\"abc\")));\n        }\n\n        [TestMethod]\n        public async Task LookupAsync_Throws_WhenSyncContextIsNotInitialized()\n        {\n            await this.TestSyncContextNotInitialized(table => table.LookupAsync(\"abc\"));\n        }\n\n        [TestMethod]\n        public async Task ReadAsync_Throws_WhenSyncContextIsNotInitialized()\n        {\n            await this.TestSyncContextNotInitialized(table => table.Where(t => t.String == \"abc\").ToListAsync());\n        }\n\n        [TestMethod]\n        public async Task PurgeAsync_Throws_WhenSyncContextIsNotInitialized()\n        {\n            await this.TestSyncContextNotInitialized(table => table.PurgeAsync(table.Where(t => t.String == \"abc\")));\n        }\n\n        [TestMethod]\n        public async Task PullAsync_Throws_WhenSyncContextIsNotInitialized()\n        {\n            await this.TestSyncContextNotInitialized(table => table.PullAsync(null, table.Where(t => t.String == \"abc\")));\n        }\n\n        private async Task TestSyncContextNotInitialized(Func<IMobileServiceSyncTable<ToDoWithSystemPropertiesType>, Task> action)\n        {\n            var service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceSyncTable<ToDoWithSystemPropertiesType> table = service.GetSyncTable<ToDoWithSystemPropertiesType>();\n            var ex = await AssertEx.Throws<InvalidOperationException>(() => action(table));\n            Assert.AreEqual(ex.Message, \"SyncContext is not yet initialized.\");\n        }\n\n        [TestMethod]\n        public void GetTableThrowsWithNullTable()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            ArgumentNullException expected = null;\n\n            try\n            {\n                service.GetTable(null);\n            }\n            catch (ArgumentNullException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n\n        }\n\n        [TestMethod]\n        public void GetTableThrowsWithEmptyStringTable()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            ArgumentException expected = null;\n\n            try\n            {\n                service.GetTable(\"\");\n            }\n            catch (ArgumentException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomApiThrowsForNullApiName()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\");\n            ArgumentNullException expected = null;\n\n            try\n            {\n                await service.InvokeApiAsync(\"\", null);\n            }\n            catch (ArgumentNullException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPISimple()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n\n            IntType expected = await service.InvokeApiAsync<IntType>(\"calculator/add?a=1&b=2\");\n\n            Assert.AreEqual(hijack.Request.RequestUri.LocalPath, \"/api/calculator/add\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"a=1&b=2\");\n            Assert.AreEqual(3, expected.Id);\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPISimpleJToken()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            JToken expected = await service.InvokeApiAsync(\"calculator/add?a=1&b=2\");\n\n            Assert.AreEqual(hijack.Request.RequestUri.LocalPath, \"/api/calculator/add\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"?a=1&b=2\");\n            Assert.AreEqual(3, (int)expected[\"id\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIPost()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            var body = \"{\\\"test\\\" : \\\"one\\\"}\";\n            IntType expected = await service.InvokeApiAsync<string, IntType>(\"calculator/add\", body);\n            Assert.IsNotNull(hijack.Request.Content);\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIPostJToken()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            JObject body = JToken.Parse(\"{\\\"test\\\":\\\"one\\\"}\") as JObject;\n            JToken expected = await service.InvokeApiAsync(\"calculator/add\", body);\n            Assert.IsNotNull(hijack.Request.Content);\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIPostJTokenBooleanPrimative()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            hijack.OnSendingRequest = async request =>\n            {\n                string content = await request.Content.ReadAsStringAsync();\n                Assert.AreEqual(content, \"true\");\n\n                return request;\n            };\n\n            JToken expected = await service.InvokeApiAsync(\"calculator/add\", new JValue(true));\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIPostJTokenNullPrimative()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            hijack.OnSendingRequest = async request =>\n            {\n                string content = await request.Content.ReadAsStringAsync();\n                Assert.AreEqual(content, \"null\");\n\n                return request;\n            };\n\n            JToken expected = await service.InvokeApiAsync(\"calculator/add\", new JValue((object)null));\n        }\n\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIGet()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n\n            IntType expected = await service.InvokeApiAsync<IntType>(\"calculator/add?a=1&b=2\", HttpMethod.Get, null);\n\n            Assert.AreEqual(hijack.Request.RequestUri.LocalPath, \"/api/calculator/add\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"a=1&b=2\");\n            Assert.AreEqual(3, expected.Id);\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeApiAsync_DoesNotAppendApiPath_IfApiStartsWithSlash()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            var service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n\n            await service.InvokeApiAsync<IntType>(\"/calculator/add?a=1&b=2\", HttpMethod.Get, null);\n\n            Assert.AreEqual(hijack.Request.RequestUri.LocalPath, \"/calculator/add\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"a=1&b=2\");\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIGetJToken()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            JToken expected = await service.InvokeApiAsync(\"calculator/add?a=1&b=2\", HttpMethod.Get, null);\n\n            Assert.AreEqual(hijack.Request.RequestUri.LocalPath, \"/api/calculator/add\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"?a=1&b=2\");\n            Assert.AreEqual(3, (int)expected[\"id\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIGetWithParams()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            var myParams = new Dictionary<string, string>() { { \"a\", \"1\" }, { \"b\", \"2\" } };\n            IntType expected = await service.InvokeApiAsync<IntType>(\"calculator/add\", HttpMethod.Get, myParams);\n\n            Assert.Contains(hijack.Request.RequestUri.Query, \"?a=1&b=2\");\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIGetWithParamsJToken()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            var myParams = new Dictionary<string, string>() { { \"a\", \"1\" }, { \"b\", \"2\" } };\n            JToken expected = await service.InvokeApiAsync(\"calculator/add\", HttpMethod.Get, myParams);\n\n            Assert.Contains(hijack.Request.RequestUri.Query, \"?a=1&b=2\");\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIGetWithODataParams()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            var myParams = new Dictionary<string, string>() { { \"$select\", \"one,two\" }, { \"$take\", \"1\" } };\n            IntType expected = await service.InvokeApiAsync<IntType>(\"calculator/add\", HttpMethod.Get, myParams);\n\n            Assert.Contains(hijack.Request.RequestUri.Query, \"?%24select=one%2Ctwo&%24take=1\");\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIGetWithODataParamsJToken()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            var myParams = new Dictionary<string, string>() { { \"$select\", \"one,two\" } };\n            JToken expected = await service.InvokeApiAsync(\"calculator/add\", HttpMethod.Get, myParams);\n\n            Assert.Contains(hijack.Request.RequestUri.Query, \"?%24select=one%2Ctwo\");\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIPostWithBody()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            var myParams = new Dictionary<string, string>() { { \"a\", \"1\" }, { \"b\", \"2\" } };\n            var body = \"{\\\"test\\\" : \\\"one\\\"}\";\n            IntType expected = await service.InvokeApiAsync<string, IntType>(\"calculator/add\", body, HttpMethod.Post, myParams);\n\n            Assert.Contains(hijack.Request.RequestUri.Query, \"?a=1&b=2\");\n            Assert.IsNotNull(hijack.Request.Content);\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIPostWithBodyJToken()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            var myParams = new Dictionary<string, string>() { { \"a\", \"1\" }, { \"b\", \"2\" } };\n            JObject body = JToken.Parse(\"{\\\"test\\\":\\\"one\\\"}\") as JObject;\n            JToken expected = await service.InvokeApiAsync(\"calculator/add\", body, HttpMethod.Post, myParams);\n\n            Assert.Contains(hijack.Request.RequestUri.Query, \"?a=1&b=2\");\n            Assert.IsNotNull(hijack.Request.Content);\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIResponse()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);\n            hijack.Response.Content = new StringContent(\"{\\\"id\\\":\\\"2\\\"}\", Encoding.UTF8, \"application/json\");\n\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            HttpResponseMessage response = await service.InvokeApiAsync(\"calculator/add?a=1&b=2\", null, HttpMethod.Post, null, null);\n\n            Assert.AreEqual(hijack.Request.RequestUri.LocalPath, \"/api/calculator/add\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"?a=1&b=2\");\n            Assert.Contains(response.Content.ReadAsStringAsync().Result, \"{\\\"id\\\":\\\"2\\\"}\");\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIResponseWithParams()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);\n            hijack.Response.Content = new StringContent(\"{\\\"id\\\":\\\"2\\\"}\", Encoding.UTF8, \"application/json\");\n            var myParams = new Dictionary<string, string>() { { \"a\", \"1\" }, { \"b\", \"2\" } };\n\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            HttpResponseMessage response = await service.InvokeApiAsync(\"calculator/add\", null, HttpMethod.Post, null, myParams);\n\n            Assert.AreEqual(hijack.Request.RequestUri.LocalPath, \"/api/calculator/add\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"?a=1&b=2\");\n            Assert.IsNull(hijack.Request.Content);\n            Assert.Contains(response.Content.ReadAsStringAsync().Result, \"{\\\"id\\\":\\\"2\\\"}\");\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIResponseWithParamsBodyAndHeader()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);\n            hijack.Response.Content = new StringContent(\"{\\\"id\\\":\\\"2\\\"}\", Encoding.UTF8, \"application/json\");\n            var myParams = new Dictionary<string, string>() { { \"a\", \"1\" }, { \"b\", \"2\" } };\n\n            HttpContent content = new StringContent(\"{\\\"test\\\" : \\\"one\\\"}\", Encoding.UTF8, \"application/json\");\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            var myHeaders = new Dictionary<string, string>() { { \"x-zumo-test\", \"test\" } };\n\n            HttpResponseMessage response = await service.InvokeApiAsync(\"calculator/add\", content, HttpMethod.Post, myHeaders, myParams);\n\n            Assert.AreEqual(myHeaders.Count, 1); // my headers should not be modified\n            Assert.AreEqual(myHeaders[\"x-zumo-test\"], \"test\");\n\n            Assert.AreEqual(hijack.Request.RequestUri.LocalPath, \"/api/calculator/add\");\n            Assert.AreEqual(hijack.Request.Headers.GetValues(\"x-zumo-test\").First(), \"test\");\n            Assert.IsNotNull(hijack.Request.Content);\n            Assert.Contains(hijack.Request.RequestUri.Query, \"?a=1&b=2\");\n            Assert.Contains(response.Content.ReadAsStringAsync().Result, \"{\\\"id\\\":\\\"2\\\"}\");\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPIWithEmptyStringResponse_Success()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.OK);\n            hijack.Response.Content = new StringContent(\"\", Encoding.UTF8, \"application/json\");\n\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            JToken expected = await service.InvokeApiAsync(\"testapi\");\n            Assert.AreEqual(hijack.Request.RequestUri.LocalPath, \"/api/testapi\");\n            Assert.AreEqual(expected, null);\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeGenericCustomAPIWithNullResponse_Success()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.OK);\n            hijack.Response.Content = null;\n\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IntType expected = await service.InvokeApiAsync<IntType>(\"testapi\");\n            Assert.AreEqual(hijack.Request.RequestUri.LocalPath, \"/api/testapi\");\n            Assert.AreEqual(expected, null);\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPI_ErrorWithJsonObject()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest);\n            hijack.Response.Content = new StringContent(\"{ error: \\\"message\\\"}\", Encoding.UTF8, \"application/json\");\n\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            try\n            {\n                await service.InvokeApiAsync(\"testapi\");\n                Assert.Fail(\"Invoke API should have thrown\");\n            }\n            catch (Exception e)\n            {\n                Assert.AreEqual(e.Message, \"message\");\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPI_ErrorWithJsonString()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest);\n            hijack.Response.Content = new StringContent(\"\\\"message\\\"\", Encoding.UTF8, \"application/json\");\n\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            try\n            {\n                await service.InvokeApiAsync(\"testapi\");\n                Assert.Fail(\"Invoke API should have thrown\");\n            }\n            catch (Exception e)\n            {\n                Assert.AreEqual(e.Message, \"message\");\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPI_ErrorWithString()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest);\n            hijack.Response.Content = new StringContent(\"message\", Encoding.UTF8, \"text/html\");\n\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            try\n            {\n                await service.InvokeApiAsync(\"testapi\");\n                Assert.Fail(\"Invoke API should have thrown\");\n            }\n            catch (Exception e)\n            {\n                Assert.AreEqual(e.Message, \"message\");\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeCustomAPI_ErrorStringAndNoContentType()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.Response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest);\n            hijack.Response.Content = new StringContent(\"message\", Encoding.UTF8, null);\n            hijack.Response.Content.Headers.ContentType = null;\n\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            try\n            {\n                await service.InvokeApiAsync(\"testapi\");\n                Assert.Fail(\"Invoke API should have thrown\");\n            }\n            catch (Exception e)\n            {\n                Assert.AreEqual(e.Message, \"The request could not be completed.  (Bad Request)\");\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeApiJsonOverloads_HasCorrectFeaturesHeader()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.OnSendingRequest = (request) =>\n            {\n                Assert.AreEqual(\"AJ\", request.Headers.GetValues(\"X-ZUMO-FEATURES\").First());\n                return Task.FromResult(request);\n            };\n\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            hijack.SetResponseContent(\"{\\\"hello\\\":\\\"world\\\"}\");\n            await service.InvokeApiAsync(\"apiName\");\n\n            hijack.SetResponseContent(\"{\\\"hello\\\":\\\"world\\\"}\");\n            await service.InvokeApiAsync(\"apiName\", JObject.Parse(\"{\\\"a\\\":1}\"));\n\n            hijack.OnSendingRequest = (request) =>\n            {\n                Assert.AreEqual(\"AJ,QS\", request.Headers.GetValues(\"X-ZUMO-FEATURES\").First());\n                return Task.FromResult(request);\n            };\n\n            var dic = new Dictionary<string, string> { { \"a\", \"b\" } };\n            hijack.SetResponseContent(\"{\\\"hello\\\":\\\"world\\\"}\");\n            await service.InvokeApiAsync(\"apiName\", HttpMethod.Get, dic);\n\n            hijack.SetResponseContent(\"{\\\"hello\\\":\\\"world\\\"}\");\n            await service.InvokeApiAsync(\"apiName\", null, HttpMethod.Delete, dic);\n        }\n\n        [AsyncTestMethod]\n        public async Task InvokeApiTypedOverloads_HasCorrectFeaturesHeader()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.OnSendingRequest = (request) =>\n            {\n                Assert.AreEqual(\"AT\", request.Headers.GetValues(\"X-ZUMO-FEATURES\").First());\n                return Task.FromResult(request);\n            };\n\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            await service.InvokeApiAsync<IntType>(\"apiName\");\n\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            await service.InvokeApiAsync<IntType, IntType>(\"apiName\", new IntType { Id = 1 });\n\n            hijack.OnSendingRequest = (request) =>\n            {\n                Assert.AreEqual(\"AT,QS\", request.Headers.GetValues(\"X-ZUMO-FEATURES\").First());\n                return Task.FromResult(request);\n            };\n\n            var dic = new Dictionary<string, string> { { \"a\", \"b\" } };\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            await service.InvokeApiAsync<IntType>(\"apiName\", HttpMethod.Get, dic);\n\n            hijack.SetResponseContent(\"{\\\"hello\\\":\\\"world\\\"}\");\n            await service.InvokeApiAsync<IntType, IntType>(\"apiName\", new IntType { Id = 1 }, HttpMethod.Put, dic);\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_InvokeApi_String()\n        {\n            return this.ValidateFeaturesHeader(\"AJ\", c => c.InvokeApiAsync(\"apiName\"));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_InvokeApi_String_JToken()\n        {\n            return this.ValidateFeaturesHeader(\"AJ\", c => c.InvokeApiAsync(\"apiName\", JObject.Parse(\"{\\\"id\\\":1}\")));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_InvokeApi_String_HttpMethod_Dict()\n        {\n            return this.ValidateFeaturesHeader(\"AJ,QS\", c => c.InvokeApiAsync(\"apiName\", null, HttpMethod.Get, new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_InvokeApi_String_JToken_HttpMethod_Dict()\n        {\n            return this.ValidateFeaturesHeader(\"AJ,QS\", c => c.InvokeApiAsync(\"apiName\", JObject.Parse(\"{\\\"id\\\":1}\"), HttpMethod.Put, new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_InvokeApi_String_HttpContent_NoQueryParams()\n        {\n            var content = new StringContent(\"hello world\", Encoding.UTF8, \"text/plain\");\n            return this.ValidateFeaturesHeader(\"AG\", c => c.InvokeApiAsync(\"apiName\", content, HttpMethod.Post, null, null));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_InvokeApi_String_HttpContent_WithQueryParams()\n        {\n            var content = new StringContent(\"hello world\", Encoding.UTF8, \"text/plain\");\n            return this.ValidateFeaturesHeader(\"AG\", c => c.InvokeApiAsync(\"apiName\", content, HttpMethod.Post, null, new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedInvokeApi_String()\n        {\n            return this.ValidateFeaturesHeader(\"AT\", c => c.InvokeApiAsync<IntType>(\"apiName\"));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedInvokeApi_String_HttpMethod_Dict()\n        {\n            return this.ValidateFeaturesHeader(\"AT,QS\", c => c.InvokeApiAsync<IntType>(\"apiName\", HttpMethod.Get, new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedInvokeApi_String_T()\n        {\n            return this.ValidateFeaturesHeader(\"AT\", c => c.InvokeApiAsync<IntType, IntType>(\"apiName\", new IntType { Id = 1 }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedInvokeApi_String_T_HttpMethod_Dict()\n        {\n            return this.ValidateFeaturesHeader(\"AT,QS\", c => c.InvokeApiAsync<IntType, IntType>(\"apiName\", new IntType { Id = 1 }, HttpMethod.Get, new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        private async Task ValidateFeaturesHeader(string expectedFeaturesHeader, Func<IMobileServiceClient, Task> operation)\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            bool validationDone = false;\n            hijack.OnSendingRequest = (request) =>\n            {\n                Assert.AreEqual(expectedFeaturesHeader, request.Headers.GetValues(\"X-ZUMO-FEATURES\").First());\n                validationDone = true;\n                return Task.FromResult(request);\n            };\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            hijack.SetResponseContent(\"{\\\"id\\\":3}\");\n            await operation(service);\n            Assert.IsTrue(validationDone);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/MobileServiceFeatures.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"unit\")]\n    [Tag(\"client\")]\n    public class MobileServiceFeaturesTests : TestBase\n    {\n        /// <summary>\n        /// Verify we have an installation ID created whenever we use a ZUMO\n        /// service. \n        /// </summary>\n        [TestMethod]\n        public void ValidateFeatureCodes()\n        {\n            Assert.AreEqual(\"TT\", EnumValueAttribute.GetValue(MobileServiceFeatures.TypedTable));\n            Assert.AreEqual(\"TU\", EnumValueAttribute.GetValue(MobileServiceFeatures.UntypedTable));\n            Assert.AreEqual(\"AT\", EnumValueAttribute.GetValue(MobileServiceFeatures.TypedApiCall));\n            Assert.AreEqual(\"AJ\", EnumValueAttribute.GetValue(MobileServiceFeatures.JsonApiCall));\n            Assert.AreEqual(\"AG\", EnumValueAttribute.GetValue(MobileServiceFeatures.GenericApiCall));\n            Assert.AreEqual(\"TC\", EnumValueAttribute.GetValue(MobileServiceFeatures.TableCollection));\n            Assert.AreEqual(\"OL\", EnumValueAttribute.GetValue(MobileServiceFeatures.Offline));\n            Assert.AreEqual(\"QS\", EnumValueAttribute.GetValue(MobileServiceFeatures.AdditionalQueryParameters));\n            Assert.IsNull(EnumValueAttribute.GetValue(MobileServiceFeatures.None));\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/MobileServiceUrlBuilder.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"url\")]\n    [Tag(\"unit\")]\n    public class MobileServiceUrlBuilderTests : TestBase\n    {\n        [TestMethod]\n        public void GetQueryStringTest()\n        {\n            var parameters = new Dictionary<string, string>() { { \"x\", \"$y\" }, { \"&hello\", \"?good bye\" }, { \"a$\", \"b\" } };\n            Assert.AreEqual(\"x=%24y&%26hello=%3Fgood%20bye&a%24=b\", MobileServiceUrlBuilder.GetQueryString(parameters));\n            Assert.AreEqual(null, MobileServiceUrlBuilder.GetQueryString(null));\n            Assert.AreEqual(null, MobileServiceUrlBuilder.GetQueryString(new Dictionary<string, string>()));\n        }\n\n        [TestMethod]\n        public void GetQueryStringThrowsTest()\n        {\n            var parameters = new Dictionary<string, string>() { { \"$x\", \"someValue\" } };\n            Throws<ArgumentException>(() => MobileServiceUrlBuilder.GetQueryString(parameters));\n        }\n\n        [TestMethod]\n        public void CombinePathAndQueryTest()\n        {\n            Assert.AreEqual(\"somePath?x=y&a=b\", MobileServiceUrlBuilder.CombinePathAndQuery(\"somePath\", \"x=y&a=b\"));\n            Assert.AreEqual(\"somePath?x=y&a=b\", MobileServiceUrlBuilder.CombinePathAndQuery(\"somePath\", \"?x=y&a=b\"));\n            Assert.AreEqual(\"somePath\", MobileServiceUrlBuilder.CombinePathAndQuery(\"somePath\", null));\n            Assert.AreEqual(\"somePath\", MobileServiceUrlBuilder.CombinePathAndQuery(\"somePath\", \"\"));\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/MobileServiceUser.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"user\")]\n    [Tag(\"unit\")]\n    public class ZumoUserTests : TestBase\n    {\n        [TestMethod]\n        public void CreateUser()\n        {\n            string id = \"qwrdsjjjd8\";\n            MobileServiceUser user = new MobileServiceUser(id);\n            Assert.AreEqual(id, user.UserId);\n\n            new MobileServiceUser(null);\n            new MobileServiceUser(\"\");\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/OData/ODataExpressionParser.Test.cs",
    "content": "﻿using System;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.UnitTests.OData\n{\n    [Tag(\"unit\")]\n    [Tag(\"odata\")]\n    public class ODataExpressionParserTest : TestBase\n    {\n        [TestMethod]\n        public void ParseFilter_Guid()\n        {\n            Guid filterGuid = Guid.NewGuid();\n\n            QueryNode queryNode = ODataExpressionParser.ParseFilter(string.Format(\"Field eq guid'{0}'\", filterGuid));\n\n            Assert.IsNotNull(queryNode);\n\n            var comparisonNode = queryNode as BinaryOperatorNode;\n            Assert.IsNotNull(comparisonNode);\n\n            var left = comparisonNode.LeftOperand as MemberAccessNode;\n            Assert.IsNotNull(left);\n\n            var right = comparisonNode.RightOperand as ConstantNode;\n            Assert.IsNotNull(right);\n\n            Assert.AreEqual(\"Field\", left.MemberName);\n            Assert.AreEqual(BinaryOperatorKind.Equal, comparisonNode.OperatorKind);\n            Assert.AreEqual(filterGuid, right.Value);\n        }\n\n        [TestMethod]\n        public void ParseFilter_TrueToken()\n        {\n            QueryNode queryNode = ODataExpressionParser.ParseFilter(\"(true eq null) and false\");\n\n            Assert.IsNotNull(queryNode);\n\n            var comparisonNode = queryNode as BinaryOperatorNode;\n            Assert.IsNotNull(comparisonNode);\n\n            var left = comparisonNode.LeftOperand as BinaryOperatorNode;\n            Assert.IsNotNull(left);\n\n            var trueNode = left.LeftOperand as ConstantNode;\n            Assert.IsNotNull(trueNode);\n            Assert.AreEqual(true, trueNode.Value);\n\n            var nullNode = left.RightOperand as ConstantNode;\n            Assert.IsNotNull(nullNode);\n            Assert.AreEqual(null, nullNode.Value);\n\n            var falseNode = comparisonNode.RightOperand as ConstantNode;\n            Assert.IsNotNull(falseNode);\n\n            Assert.AreEqual(BinaryOperatorKind.And, comparisonNode.OperatorKind);\n            Assert.AreEqual(false, falseNode.Value);\n        }\n\n        [TestMethod]\n        public void ParseFilter_DateTimeMember()\n        {\n            QueryNode queryNode = ODataExpressionParser.ParseFilter(\"datetime eq 1\");\n\n            Assert.IsNotNull(queryNode);\n\n            var comparisonNode = queryNode as BinaryOperatorNode;\n            Assert.IsNotNull(comparisonNode);\n\n            var left = comparisonNode.LeftOperand as MemberAccessNode;\n            Assert.IsNotNull(left);\n\n            var right = comparisonNode.RightOperand as ConstantNode;\n            Assert.IsNotNull(right);\n\n            Assert.AreEqual(\"datetime\", left.MemberName);\n            Assert.AreEqual(BinaryOperatorKind.Equal, comparisonNode.OperatorKind);\n            Assert.AreEqual(1L, right.Value);\n        }\n\n        [TestMethod]\n        public void ParseFilter_Guid_InvalidGuidString()\n        {\n            var ex = AssertEx.Throws<MobileServiceODataException>(() => ODataExpressionParser.ParseFilter(string.Format(\"Field eq guid'this is not a guid'\")));\n\n            Assert.IsTrue(ex.Message.Equals(\"Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).\") || ex.Message.Equals(\"Invalid Guid format: this is not a guid\"));\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Push/LocalStorageMananger.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"unit\")]\n    [Tag(\"push\")]\n    [Tag(\"notNetFramework\")]\n    public class LocalStorageManagerTest : TestBase\n    {\n        const string DefaultChannelUri = \"http://channelUri.com/a b\";\n        const string TestLocalStore = \"TestLocalStore\";\n        const string TestRegistrationName = \"TestRegistratioName\";\n        const string DefaultRegistrationId = \"7313155627197174428-6522078074300559092-1\";\n\n        [TestMethod]\n        public void UpdateLocalStorageRegistrationByName()\n        {\n            LocalStorageManager localStorageManager = new LocalStorageManager(TestLocalStore);\n            localStorageManager.UpdateRegistrationByName(TestRegistrationName, DefaultRegistrationId, DefaultChannelUri);\n            StoredRegistrationEntry storedRegistrationEntry = localStorageManager.GetRegistration(TestRegistrationName);\n            Assert.AreEqual(storedRegistrationEntry.RegistrationName, TestRegistrationName);\n            Assert.AreEqual(storedRegistrationEntry.RegistrationId, DefaultRegistrationId);\n            Assert.AreEqual(localStorageManager.PushHandle, DefaultChannelUri);\n            localStorageManager.DeleteRegistrationByName(TestRegistrationName);\n        }\n\n        [TestMethod]\n        public void UpdateLocalStorageRegistrationByName_RegistrationNameNull()\n        {\n            LocalStorageManager localStorageManager = new LocalStorageManager(TestLocalStore);\n            localStorageManager.UpdateRegistrationByName(null, DefaultRegistrationId, DefaultChannelUri);\n            StoredRegistrationEntry storedRegistrationEntry = localStorageManager.GetRegistration(Registration.NativeRegistrationName);\n            Assert.AreEqual(storedRegistrationEntry.RegistrationName,Registration.NativeRegistrationName);\n            Assert.AreEqual(storedRegistrationEntry.RegistrationId, DefaultRegistrationId);\n            Assert.AreEqual(localStorageManager.PushHandle, DefaultChannelUri);\n            localStorageManager.DeleteRegistrationByName(Registration.NativeRegistrationName);\n        }\n\n        [TestMethod]\n        public void UpdateLocalStorageRegistrationById()\n        {\n            LocalStorageManager localStorageManager = new LocalStorageManager(TestLocalStore);\n            localStorageManager.UpdateRegistrationByRegistrationId(DefaultRegistrationId,TestRegistrationName,DefaultChannelUri);\n            StoredRegistrationEntry storedRegistrationEntry = localStorageManager.GetRegistration(TestRegistrationName);\n            Assert.AreEqual(storedRegistrationEntry.RegistrationName, TestRegistrationName);\n            Assert.AreEqual(storedRegistrationEntry.RegistrationId, DefaultRegistrationId);\n            Assert.AreEqual(localStorageManager.PushHandle, DefaultChannelUri);\n            localStorageManager.DeleteRegistrationByRegistrationId(DefaultRegistrationId);\n        }\n\n        [TestMethod]\n        public void UpdateLocalStorageRegistrationById_RegistrationNameNull()\n        {\n            LocalStorageManager localStorageManager = new LocalStorageManager(TestLocalStore);\n            localStorageManager.UpdateRegistrationByRegistrationId(DefaultRegistrationId, null, DefaultChannelUri);\n            StoredRegistrationEntry storedRegistrationEntry = localStorageManager.GetRegistration(Registration.NativeRegistrationName);\n            Assert.AreEqual(storedRegistrationEntry.RegistrationName, Registration.NativeRegistrationName);\n            Assert.AreEqual(storedRegistrationEntry.RegistrationId, DefaultRegistrationId);\n            Assert.AreEqual(localStorageManager.PushHandle, DefaultChannelUri);\n            localStorageManager.DeleteRegistrationByRegistrationId(DefaultRegistrationId);\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Push/PushHttpClient.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"unit\")]\n    [Tag(\"push\")]\n    [Tag(\"notNetFramework\")]\n    public class PushHttpClientTest : TestBase\n    {\n        const string DefaultChannelUri = \"http://channelUri.com/a b\";\n        const string DefaultServiceUri = \"http://www.test.com\";\n        const string RegistrationsPath = \"/push/registrations\";\n        const string DefaultRegistrationId = \"7313155627197174428-6522078074300559092-1\";\n\n        readonly IPushUtility pushUtility;\n        readonly IPushTestUtility pushTestUtility;\n        readonly string platform;\n\n        public PushHttpClientTest()\n        {\n            this.pushTestUtility = TestPlatform.Instance.PushTestUtility;\n\n            this.pushUtility = Platform.Instance.PushUtility;\n            if (this.pushUtility != null)\n            {\n                this.platform = this.pushUtility.GetPlatform();\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ListRegistrations_Empty()\n        {\n            // Ensure Uri and method are correct for request and specify body to return for empty registrations list\n            var expectedUri = this.GetExpectedListUri();\n            var hijack = CreateTestHttpHandler(expectedUri, HttpMethod.Get, \"[]\");\n\n            MobileServiceClient mobileClient = new MobileServiceClient(DefaultServiceUri, null, hijack);\n            var pushHttpClient = new PushHttpClient(mobileClient);\n\n            var registrations = await pushHttpClient.ListRegistrationsAsync(DefaultChannelUri);\n\n            Assert.AreEqual(registrations.Count(), 0, \"Expected empty list to return an empty list of registrations.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task ListRegistrations_Native()\n        {\n            // Ensure Uri and method are correct for request and specify body to return for registrations list with only 1 native registration\n            var expectedUri = this.GetExpectedListUri();\n            var hijack = CreateTestHttpHandler(expectedUri, HttpMethod.Get, this.pushTestUtility.GetListNativeRegistrationResponse());\n\n            MobileServiceClient mobileClient = new MobileServiceClient(DefaultServiceUri, null, hijack);\n            var pushHttpClient = new PushHttpClient(mobileClient);\n\n            var registrations = await pushHttpClient.ListRegistrationsAsync(DefaultChannelUri);\n\n            Assert.AreEqual(registrations.Count(), 1, \"Expected 1 registration.\");\n\n            var firstRegistration = registrations.First();\n            var nativeReg = this.pushUtility.GetNewNativeRegistration();\n            Assert.AreEqual(nativeReg.GetType(), firstRegistration.GetType(), \"The type of the registration returned from ListRegistrationsAsync is not of the correct type.\");\n\n            Assert.AreEqual(firstRegistration.RegistrationId, DefaultRegistrationId, \"The registrationId returned from ListRegistrationsAsync is not correct.\");\n\n            var tags = firstRegistration.Tags.ToList();\n            Assert.AreEqual(tags[0], \"fooWns\", \"tag[0] on the registration is not correct.\");\n            Assert.AreEqual(tags[1], \"barWns\", \"tag[1] on the registration is not correct.\");\n            Assert.AreEqual(tags[2], \"4de2605e-fd09-4875-a897-c8c4c0a51682\", \"tag[2] on the registration is not correct.\");\n\n            Assert.AreEqual(firstRegistration.PushHandle, DefaultChannelUri, \"The DeviceId on the registration is not correct.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task ListRegistrations_Template()\n        {\n            var expectedUri = this.GetExpectedListUri();\n            var hijack = CreateTestHttpHandler(expectedUri, HttpMethod.Get, this.pushTestUtility.GetListTemplateRegistrationResponse());\n\n            MobileServiceClient mobileClient = new MobileServiceClient(DefaultServiceUri, null, hijack);\n            var pushHttpClient = new PushHttpClient(mobileClient);\n\n            var registrations = await pushHttpClient.ListRegistrationsAsync(DefaultChannelUri);\n\n            Assert.AreEqual(registrations.Count(), 1, \"Expected 1 registration.\");\n\n            var firstRegistration = registrations.First();\n            var templateReg = this.pushUtility.GetNewTemplateRegistration();\n            Assert.AreEqual(templateReg.GetType(), firstRegistration.GetType(), \"The type of the registration returned from ListRegistrationsAsync is not of the correct type.\");\n\n            Assert.AreEqual(firstRegistration.RegistrationId, DefaultRegistrationId, \"The registrationId returned from ListRegistrationsAsync is not correct.\");\n\n            var tags = firstRegistration.Tags.ToList();\n            Assert.AreEqual(tags[0], \"fooWns\", \"tag[0] on the registration is not correct.\");\n            Assert.AreEqual(tags[1], \"barWns\", \"tag[1] on the registration is not correct.\");\n            Assert.AreEqual(tags[2], \"4de2605e-fd09-4875-a897-c8c4c0a51682\", \"tag[2] on the registration is not correct.\");\n\n            Assert.AreEqual(firstRegistration.PushHandle, DefaultChannelUri, \"The DeviceId on the registration is not correct.\");\n        }\n\n        string GetExpectedListUri()\n        {\n            var channelUri = Uri.EscapeUriString(DefaultChannelUri);\n            return string.Format(\"{0}{1}?deviceId={2}&platform={3}\", DefaultServiceUri, RegistrationsPath, channelUri, Uri.EscapeUriString(this.platform));\n        }\n\n        [AsyncTestMethod]\n        public async Task ListRegistrations_NativeAndTemplate()\n        {\n            var expectedUri = this.GetExpectedListUri();\n            var hijack = CreateTestHttpHandler(expectedUri, HttpMethod.Get, this.pushTestUtility.GetListMixedRegistrationResponse());\n\n            MobileServiceClient mobileClient = new MobileServiceClient(DefaultServiceUri, null, hijack);\n            var pushHttpClient = new PushHttpClient(mobileClient);\n\n            var registrations = await pushHttpClient.ListRegistrationsAsync(DefaultChannelUri);\n            var registrationsArray = registrations.ToArray();\n            Assert.AreEqual(registrationsArray.Length, 2, \"Expected 2 registrations.\");\n\n            var firstRegistration = registrationsArray[0];\n            var nativeReg = this.pushUtility.GetNewNativeRegistration();\n            Assert.AreEqual(nativeReg.GetType(), firstRegistration.GetType(), \"The type of the native registration returned from ListRegistrationsAsync is not of the correct type.\");\n\n            Assert.AreEqual(firstRegistration.RegistrationId, DefaultRegistrationId, \"The native registrationId returned from ListRegistrationsAsync is not correct.\");\n            var nativeTags = firstRegistration.Tags.ToList();\n            Assert.AreEqual(nativeTags[0], \"fooWns\", \"nativeTags[0] on the registration is not correct.\");\n            Assert.AreEqual(nativeTags[1], \"barWns\", \"nativeTags[1] on the registration is not correct.\");\n            Assert.AreEqual(nativeTags[2], \"4de2605e-fd09-4875-a897-c8c4c0a51682\", \"nativeTags[2] on the registration is not correct.\");\n\n            Assert.AreEqual(firstRegistration.PushHandle, DefaultChannelUri, \"The DeviceId on the native registration is not correct.\");\n\n            var secondRegistration = registrationsArray[1];\n            var templateReg = this.pushUtility.GetNewTemplateRegistration();\n            Assert.AreEqual(templateReg.GetType(), secondRegistration.GetType(), \"The type of the template registration returned from ListRegistrationsAsync is not of the correct type.\");\n\n            Assert.AreEqual(secondRegistration.RegistrationId, DefaultRegistrationId, \"The template registrationId returned from ListRegistrationsAsync is not correct.\");\n            var templateTags = secondRegistration.Tags.ToList();\n            Assert.AreEqual(templateTags[0], \"fooWns\", \"templateTags[0] on the registration is not correct.\");\n            Assert.AreEqual(templateTags[1], \"barWns\", \"templateTags[1] on the registration is not correct.\");\n            Assert.AreEqual(templateTags[2], \"4de2605e-fd09-4875-a897-c8c4c0a51682\", \"templateTags[2] on the registration is not correct.\");\n\n            Assert.AreEqual(secondRegistration.PushHandle, DefaultChannelUri, \"The DeviceId on the template registration is not correct.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task ListRegistrations_Error_WithStringBody()\n        {\n            var expectedUri = this.GetExpectedListUri();\n            var hijack = CreateTestHttpHandler(expectedUri, HttpMethod.Get, \"\\\"Server threw 500\\\"\", HttpStatusCode.InternalServerError);\n\n            MobileServiceClient mobileClient = new MobileServiceClient(DefaultServiceUri, null, hijack);\n            var pushHttpClient = new PushHttpClient(mobileClient);\n\n            var exception = await AssertEx.Throws<MobileServiceInvalidOperationException>(\n                () => pushHttpClient.ListRegistrationsAsync(DefaultChannelUri));\n            Assert.AreEqual(exception.Message, \"Server threw 500\");\n        }\n\n        [AsyncTestMethod]\n        public async Task ListRegistrations_Error_WithError()\n        {\n            var expectedUri = this.GetExpectedListUri();\n            var hijack = CreateTestHttpHandler(expectedUri, HttpMethod.Get, \"{\\\"error\\\":\\\"Server threw 500\\\"}\", HttpStatusCode.InternalServerError);\n\n            MobileServiceClient mobileClient = new MobileServiceClient(DefaultServiceUri, null, hijack);\n            var pushHttpClient = new PushHttpClient(mobileClient);\n\n            var exception = await AssertEx.Throws<MobileServiceInvalidOperationException>\n                (() => pushHttpClient.ListRegistrationsAsync(DefaultChannelUri));\n            Assert.AreEqual(exception.Message, \"Server threw 500\");\n        }\n\n        const string CreatePath = \"/push/registrationids\";\n        static readonly Uri LocationUri = new Uri(string.Format(\"{0}{1}/{2}\", DefaultServiceUri, RegistrationsPath, DefaultRegistrationId));\n\n        [AsyncTestMethod]\n        public async Task CreateRegistrationId()\n        {\n            var expectedUri = string.Format(\"{0}{1}\", DefaultServiceUri, CreatePath);\n            var hijack = CreateTestHttpHandler(expectedUri, HttpMethod.Post, null, HttpStatusCode.Created, LocationUri);\n\n            MobileServiceClient mobileClient = new MobileServiceClient(DefaultServiceUri, null, hijack);\n            var pushHttpClient = new PushHttpClient(mobileClient);\n\n            var registrationId = await pushHttpClient.CreateRegistrationIdAsync();\n\n            Assert.AreEqual(registrationId, DefaultRegistrationId, \"Expected CreateRegistrationIdAsync to return correct RegistrationId.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task CreateRegistrationId_Error()\n        {\n            var expectedUri = string.Format(\"{0}{1}\", DefaultServiceUri, CreatePath);\n            var hijack = CreateTestHttpHandler(expectedUri, HttpMethod.Post, \"\\\"Server threw 500\\\"\", HttpStatusCode.InternalServerError, LocationUri);\n\n            MobileServiceClient mobileClient = new MobileServiceClient(DefaultServiceUri, null, hijack);\n            var pushHttpClient = new PushHttpClient(mobileClient);\n\n            var exception = await AssertEx.Throws<MobileServiceInvalidOperationException>(() => pushHttpClient.CreateRegistrationIdAsync());\n            Assert.AreEqual(exception.Message, \"Server threw 500\");\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteRegistration()\n        {\n            var expectedUri = string.Format(\"{0}{1}/{2}\", DefaultServiceUri, RegistrationsPath, DefaultRegistrationId);\n            var hijack = CreateTestHttpHandler(expectedUri, HttpMethod.Delete, null, HttpStatusCode.OK);\n\n            MobileServiceClient mobileClient = new MobileServiceClient(DefaultServiceUri, null, hijack);\n            var pushHttpClient = new PushHttpClient(mobileClient);\n\n            // Because Unregistrer returns nothing, the only test we can perform is that the Http Method and body are correct\n            // and that UnregisterAsync does not throw if Ok is returned\n            await pushHttpClient.UnregisterAsync(DefaultRegistrationId);\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteRegistration_Error()\n        {\n            var expectedUri = string.Format(\"{0}{1}/{2}\", DefaultServiceUri, RegistrationsPath, DefaultRegistrationId);\n            var hijack = CreateTestHttpHandler(expectedUri, HttpMethod.Delete, \"\\\"Server threw 500\\\"\", HttpStatusCode.InternalServerError);\n\n            MobileServiceClient mobileClient = new MobileServiceClient(DefaultServiceUri, null, hijack);\n            var pushHttpClient = new PushHttpClient(mobileClient);\n\n            var exception = await AssertEx.Throws<MobileServiceInvalidOperationException>(\n                () => pushHttpClient.UnregisterAsync(DefaultRegistrationId));\n            Assert.AreEqual(exception.Message, \"Server threw 500\");\n        }\n\n        [AsyncTestMethod]\n        public async Task CreateOrUpdateRegistration()\n        {\n            var expectedUri = string.Format(\"{0}{1}/{2}\", DefaultServiceUri, RegistrationsPath, DefaultRegistrationId);\n            var registration = this.pushTestUtility.GetNewNativeRegistration(DefaultChannelUri, new[] { \"foo\", \"bar\" });\n            registration.RegistrationId = DefaultRegistrationId;\n            string jsonRegistration = JsonConvert.SerializeObject(registration);\n\n            // The entire test is performed within the TestHttpHandler.\n            // We verify that the request content is correct and that the method is correct.\n            var hijack = CreateTestHttpHandler(expectedUri, HttpMethod.Put, null, HttpStatusCode.NoContent, expectedRequestContent: jsonRegistration);\n\n            MobileServiceClient mobileClient = new MobileServiceClient(DefaultServiceUri, null, hijack);\n            var pushHttpClient = new PushHttpClient(mobileClient);\n\n            await pushHttpClient.CreateOrUpdateRegistrationAsync(registration);\n        }\n\n        [AsyncTestMethod]\n        public async Task CreateOrUpdateRegistration_Error()\n        {\n            var expectedUri = string.Format(\"{0}{1}/{2}\", DefaultServiceUri, RegistrationsPath, DefaultRegistrationId);\n            var registration = this.pushTestUtility.GetNewNativeRegistration(DefaultChannelUri, new[] { \"foo\", \"bar\" });\n            registration.RegistrationId = DefaultRegistrationId;\n\n            string jsonRegistration = JsonConvert.SerializeObject(registration);\n            var hijack = CreateTestHttpHandler(expectedUri, HttpMethod.Put, \"\\\"Server threw 500\\\"\", HttpStatusCode.InternalServerError, expectedRequestContent: jsonRegistration);\n\n            MobileServiceClient mobileClient = new MobileServiceClient(DefaultServiceUri, null, hijack);\n            var pushHttpClient = new PushHttpClient(mobileClient);\n\n            var exception = await AssertEx.Throws<MobileServiceInvalidOperationException>(() => pushHttpClient.CreateOrUpdateRegistrationAsync(registration));\n            Assert.AreEqual(exception.Message, \"Server threw 500\");\n        }\n\n        static DelegatingHandler CreateTestHttpHandler(string expectedUri, HttpMethod expectedMethod, string responseContent, HttpStatusCode? httpStatusCode = null, Uri location = null, string expectedRequestContent = null)\n        {\n            var handler = new TestHttpHandler\n            {\n                OnSendingRequest = message =>\n                {\n                    Assert.AreEqual(expectedUri, message.RequestUri.OriginalString, \"The Http Uri used to send the request is different than expected.\");\n                    Assert.AreEqual(expectedMethod, message.Method, \"The Http Method used to send the request is different than expected.\");\n\n                    if (expectedRequestContent != null)\n                    {\n                        Assert.AreEqual(expectedRequestContent, message.Content.ReadAsStringAsync().Result, \"The Http request content is different than expected.\");\n                    }\n\n                    return Task.FromResult(message);\n                }\n            };\n\n            if (responseContent != null)\n            {\n                handler.SetResponseContent(responseContent);\n            }\n            else\n            {\n                handler.Response = new HttpResponseMessage(HttpStatusCode.OK);\n            }\n\n            if (location != null)\n            {\n                handler.Response.Headers.Location = location;\n            }\n\n            if (httpStatusCode.HasValue)\n            {\n                handler.Response.StatusCode = httpStatusCode.Value;\n            }\n\n            return handler;\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Table/MobileServiceObjectReaderTests.cs",
    "content": "﻿using System;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.UnitTests.Table\n{\n    [Tag(\"unit\")]\n    [Tag(\"objectreader\")]\n    public class MobileServiceObjectReaderTests : TestBase\n    {\n        [TestMethod]\n        public void GetUpdatedAt_ReturnsSystemProperty_ByDefault()\n        {\n            DateTimeOffset value = DateTimeOffset.Parse(\"2001-02-03T00:00:00.0000000+00:00\");\n\n            DateTimeOffset? actualValue = new MobileServiceObjectReader().GetUpdatedAt(new JObject() { { \"__updatedAt\", new JValue(value) } });\n\n            Assert.AreEqual(value, actualValue);\n        }\n\n        [TestMethod]\n        public void GetUpdatedAt_ReturnsNull_WhenNotPresent()\n        {\n            Assert.IsNull(new MobileServiceObjectReader().GetUpdatedAt(new JObject()));\n        }\n\n        [TestMethod]\n        public void GetUpdatedAt_ReturnsCustomProperty_WhenSet()\n        {\n            DateTimeOffset value = DateTimeOffset.Parse(\"2001-02-03T00:00:00.0000000+00:00\");\n            var reader = new MobileServiceObjectReader() { UpdatedAtPropertyName = \"Timestamp\" };\n\n            DateTimeOffset? actualValue = reader.GetUpdatedAt(new JObject() { { \"Timestamp\", new JValue(value) } });\n\n            Assert.AreEqual(value, actualValue);\n        }\n\n        [TestMethod]\n        public void GetCreatedAt_ReturnsSystemProperty_ByDefault()\n        {\n            DateTimeOffset value = DateTimeOffset.Parse(\"2001-02-03T00:00:00.0000000+00:00\");\n\n            DateTimeOffset? actualValue = new MobileServiceObjectReader().GetCreatedAt(new JObject() { { \"__createdAt\", new JValue(value) } });\n\n            Assert.AreEqual(value, actualValue);\n        }\n\n        [TestMethod]\n        public void GetCreatedAt_ReturnsNull_WhenNotPresent()\n        {\n            Assert.IsNull(new MobileServiceObjectReader().GetCreatedAt(new JObject()));\n        }\n\n        [TestMethod]\n        public void GetCreatedAt_ReturnsCustomProperty_WhenSet()\n        {\n            DateTimeOffset value = DateTimeOffset.Parse(\"2001-02-03T00:00:00.0000000+00:00\");\n            var reader = new MobileServiceObjectReader() { CreatedAtPropertyName = \"Timestamp\" };\n\n            DateTimeOffset? actualValue = reader.GetCreatedAt(new JObject() { { \"Timestamp\", new JValue(value) } });\n\n            Assert.AreEqual(value, actualValue);\n        }\n\n        [TestMethod]\n        public void GetId_ReturnsSystemProperty_ByDefault()\n        {\n            string value = \"abc\";\n\n            string actualValue = new MobileServiceObjectReader().GetId(new JObject() { { \"id\", new JValue(value) } });\n\n            Assert.AreEqual(value, actualValue);\n        }\n\n        [TestMethod]\n        public void GetId_ReturnsNull_WhenNotPresent()\n        {\n            Assert.IsNull(new MobileServiceObjectReader().GetId(new JObject()));\n        }\n\n        [TestMethod]\n        public void GetId_ReturnsCustomProperty_WhenSet()\n        {\n            string value = \"abc\";\n            var reader = new MobileServiceObjectReader() { IdPropertyName = \"Name\" };\n\n            string actualValue = reader.GetId(new JObject() { { \"Name\", new JValue(value) } });\n\n            Assert.AreEqual(value, actualValue);\n        }\n\n        [TestMethod]\n        public void GetVersion_ReturnsSystemProperty_ByDefault()\n        {\n            string value = \"abc\";\n\n            string actualValue = new MobileServiceObjectReader().GetVersion(new JObject() { { \"__version\", new JValue(value) } });\n\n            Assert.AreEqual(value, actualValue);\n        }\n\n        [TestMethod]\n        public void GetVersion_ReturnsNull_WhenNotPresent()\n        {\n            Assert.IsNull(new MobileServiceObjectReader().GetVersion(new JObject()));\n        }\n\n        [TestMethod]\n        public void GetVersion_ReturnsCustomProperty_WhenSet()\n        {\n            string value = \"abc\";\n            var reader = new MobileServiceObjectReader() { VersionPropertyName = \"ETag\" };\n\n            string actualValue = reader.GetVersion(new JObject() { { \"ETag\", new JValue(value) } });\n\n            Assert.AreEqual(value, actualValue);\n        }\n\n        [TestMethod]\n        public void IsDeleted_ReturnsSystemProperty_ByDefault()\n        {\n            bool value = true;\n\n            bool actualValue = new MobileServiceObjectReader().IsDeleted(new JObject() { { \"__deleted\", new JValue(value) } });\n\n            Assert.AreEqual(value, actualValue);\n        }\n\n        [TestMethod]\n        public void IsDeleted_ReturnsFalse_WhenNotPresent()\n        {\n            Assert.IsFalse(new MobileServiceObjectReader().IsDeleted(new JObject()));\n        }\n\n        [TestMethod]\n        public void IsDeleted_ReturnsCustomProperty_WhenSet()\n        {\n            bool value = true;\n            var reader = new MobileServiceObjectReader() { DeletedPropertyName = \"Deleted\" };\n\n            bool actualValue = reader.IsDeleted(new JObject() { { \"Deleted\", new JValue(value) } });\n\n            Assert.AreEqual(value, actualValue);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Table/MobileServiceTable.Generic.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"unit\")]\n    [Tag(\"table\")]\n    public class MobileServiceTableGenericTests : TestBase\n    {\n        [AsyncTestMethod]\n        public async Task ReadAsync_WithAbsoluteUri_Generic()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"col1\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<ToDo> table = service.GetTable<ToDo>();\n\n            await table.ReadAsync<ToDo>(\"http://www.test.com/about?$filter=a eq b&$orderby=c\");\n\n            Assert.AreEqual(\"TT,LH\", hijack.Request.Headers.GetValues(\"X-ZUMO-FEATURES\").First());\n            Assert.AreEqual(\"http://www.test.com/about?$filter=a eq b&$orderby=c\", hijack.Request.RequestUri.ToString());\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_Throws_IfAbsoluteUriHostNameDoesNotMatch()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", new TestHttpHandler());\n            IMobileServiceTable<ToDo> table = service.GetTable<ToDo>();\n\n            var ex = await AssertEx.Throws<ArgumentException>(async () => await table.ReadAsync<ToDo>(\"http://www.contoso.com/about?$filter=a eq b&$orderby=c\"));\n\n            Assert.AreEqual(ex.Message, \"The query uri must be on the same host as the Mobile Service.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_WithRelativeUri_Generic()\n        {\n            var data = new[]\n            {\n                new \n                {\n                    ServiceUri = \"http://www.test.com\", \n                    QueryUri = \"/about?$filter=a eq b&$orderby=c\", \n                    RequestUri = \"http://www.test.com/about?$filter=a eq b&$orderby=c\"\n                },\n                new \n                {\n                    ServiceUri = \"http://www.test.com/\", \n                    QueryUri = \"/about?$filter=a eq b&$orderby=c\", \n                    RequestUri = \"http://www.test.com/about?$filter=a eq b&$orderby=c\"\n                }\n            };\n\n            foreach (var item in data)\n            {\n                var hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"col1\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(item.ServiceUri, \"secret...\", hijack);\n\n                IMobileServiceTable<ToDo> table = service.GetTable<ToDo>();\n\n                await table.ReadAsync<ToDo>(item.QueryUri);\n\n                Assert.AreEqual(\"TT\", hijack.Request.Headers.GetValues(\"X-ZUMO-FEATURES\").First());\n                Assert.AreEqual(item.RequestUri, hijack.Request.RequestUri.ToString());\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_Returns_IQueryResultEnumerable()\n        {\n            await TestIQueryResultEnumerable(table => table.ReadAsync<ToDo>(\"this is a query\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task ToCollectionAsync_Returns_IQueryResultEnumerable()\n        {\n            await TestIQueryResultEnumerable(async table => await table.CreateQuery().ToCollectionAsync());\n        }\n\n        [AsyncTestMethod]\n        public async Task ToEnumerableAsync_Returns_IQueryResultEnumerable()\n        {\n            await TestIQueryResultEnumerable(async table => await table.CreateQuery().ToEnumerableAsync());\n        }\n\n        [AsyncTestMethod]\n        public async Task ToListAsync_Returns_IQueryResultEnumerable()\n        {\n            await TestIQueryResultEnumerable(async table => await table.CreateQuery().ToListAsync());\n        }\n\n        private static async Task TestIQueryResultEnumerable(Func<IMobileServiceTable<ToDo>, Task<IEnumerable<ToDo>>> action)\n        {\n            var table = GetTableWithResponse(@\"{\n                                                \"\"count\"\": 53,\n                                                \"\"results\"\": [\n                                                {\n                                                    \"\"id\"\":23, \n                                                    \"\"col1\"\":\"\"Hey\"\",\n                                                    \"\"col5\"\":true\n                                                }]}\",\n                                                link: \"http://contoso.com/tables/Todo?$top=1&$skip=2; rel=next\");\n\n            IEnumerable<ToDo> result = await action(table);\n            Assert.AreEqual(result.Count(), 1);\n            var item = result.First();\n            Assert.AreEqual(item.Id, 23L);\n            Assert.AreEqual(item.Title, \"Hey\");\n            Assert.AreEqual(item.Complete, true);\n            var provider = result as IQueryResultEnumerable<ToDo>;\n            Assert.AreEqual(provider.TotalCount, 53L);\n            Assert.AreEqual(provider.NextLink, \"http://contoso.com/tables/Todo?$top=1&$skip=2\");\n        }\n\n        private static IMobileServiceTable<ToDo> GetTableWithResponse(string response, string link)\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(response);\n            if (!String.IsNullOrEmpty(link))\n            {\n                hijack.Responses[0].Headers.Add(\"Link\", link);\n            }\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable<ToDo> table = service.GetTable<ToDo>();\n            return table;\n        }\n\n        [AsyncTestMethod] // this is the default buggy behavior that we've already shipped\n        public async Task ReadAsync_ModifiesStringId_IfItContainsIsoDateValue()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.SetResponseContent(@\"[{\n                                        \"\"id\"\": \"\"2014-01-29T23:01:33.444Z\"\",\n                                        \"\"__createdAt\"\": \"\"2014-01-29T23:01:33.444Z\"\"\n                                        }]\");\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable<ToDoWithSystemPropertiesType> table = service.GetTable<ToDoWithSystemPropertiesType>();\n\n            IEnumerable<ToDoWithSystemPropertiesType> results = await table.ReadAsync();\n            ToDoWithSystemPropertiesType item = results.First();\n\n            Assert.AreEqual(item.Id, \"01/29/2014 23:01:33\");\n            Assert.AreEqual(item.CreatedAt, DateTime.Parse(\"2014-01-29T23:01:33.444Z\"));\n        }\n\n        [AsyncTestMethod] // user has to set the serializer setting to round trip dates in string fields correctly\n        public async Task ReadAsync_DoesNotModifyStringId_IfItContainsIsoDateValueAndSerializerIsConfiguredToNotParseDates()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.SetResponseContent(@\"[{\n                                        \"\"id\"\": \"\"2014-01-29T23:01:33.444Z\"\",\n                                        \"\"__createdAt\"\": \"\"2014-01-29T23:01:33.444Z\"\"\n                                        }]\");\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            service.SerializerSettings.DateParseHandling = DateParseHandling.None;\n            IMobileServiceTable<ToDoWithSystemPropertiesType> table = service.GetTable<ToDoWithSystemPropertiesType>();\n\n            IEnumerable<ToDoWithSystemPropertiesType> results = await table.ReadAsync();\n            ToDoWithSystemPropertiesType item = results.First();\n\n            Assert.AreEqual(item.Id, \"2014-01-29T23:01:33.444Z\");\n            Assert.AreEqual(item.CreatedAt, DateTime.Parse(\"2014-01-29T23:01:33.444Z\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdTypeAndStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"[{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                IEnumerable<StringIdType> results = await table.ReadAsync();\n                StringIdType[] items = results.ToArray();\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(\"Hey\", items[0].String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdTypeAndNonStringIdResponseContent()\n        {\n            object[] testIdData = IdTestData.ValidIntIds.Concat(\n                                  IdTestData.InvalidIntIds).Cast<object>().Concat(\n                                  IdTestData.NonStringNonIntValidJsonIds).ToArray();\n\n            foreach (object testId in testIdData)\n            {\n                string stringTestId = testId.ToString().ToLower();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                IEnumerable<StringIdType> results = await table.ReadAsync();\n                StringIdType[] items = results.ToArray();\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId.ToString(), items[0].Id);\n                Assert.AreEqual(\"Hey\", items[0].String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdTypeAndNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            IEnumerable<StringIdType> results = await table.ReadAsync();\n            StringIdType[] items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(null, items[0].Id);\n            Assert.AreEqual(\"Hey\", items[0].String);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdTypeAndNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"String\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            IEnumerable<StringIdType> results = await table.ReadAsync();\n            StringIdType[] items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(null, items[0].Id);\n            Assert.AreEqual(\"Hey\", items[0].String);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdTypeAndStringIdFilter()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"[{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\");\n\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                List<StringIdType> items = await table.Where(t => t.Id == testId).ToListAsync();\n                string idForOdataQuery = Uri.EscapeDataString(testId.Replace(\"'\", \"''\"));\n                Uri expectedUri = new Uri(string.Format(\"http://www.test.com/tables/StringIdType?$filter=(id eq '{0}')\", idForOdataQuery));\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdTypeAndNullIdFilter()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\");\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            List<StringIdType> items = await table.Where(t => t.Id == null).ToListAsync();\n            Uri expectedUri = new Uri(\"http://www.test.com/tables/StringIdType?$filter=(id eq null)\");\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(null, items[0].Id);\n            Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdTypeAndStringIdProjection()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"[{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\");\n\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                var items = await table.Select(s => new { Id = s.Id, Message = s.String }).ToListAsync();\n                Uri expectedUri = new Uri(\"http://www.test.com/tables/StringIdType?$select=id,String\");\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(\"Hey\", items[0].Message);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdTypeAndNullIdProjection()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\");\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            var items = await table.Select(s => new { Id = s.Id, Message = s.String }).ToListAsync();\n            Uri expectedUri = new Uri(\"http://www.test.com/tables/StringIdType?$select=id,String\");\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(null, items[0].Id);\n            Assert.AreEqual(\"Hey\", items[0].Message);\n            Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdTypeAndNoIdProjection()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"String\\\":\\\"Hey\\\"}]\");\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            var items = await table.Select(s => new { Id = s.Id, Message = s.String }).ToListAsync();\n            Uri expectedUri = new Uri(\"http://www.test.com/tables/StringIdType?$select=id,String\");\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(null, items[0].Id);\n            Assert.AreEqual(\"Hey\", items[0].Message);\n            Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdTypeAndOrderByAscending()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"[{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\");\n\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                var items = await table.OrderBy(s => s.Id).ToListAsync();\n                Uri expectedUri = new Uri(\"http://www.test.com/tables/StringIdType?$orderby=id\");\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(\"Hey\", items[0].String);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdTypeAndOrderByDescending()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"[{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\");\n\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                var items = await table.OrderByDescending(s => s.Id).ToListAsync();\n                Uri expectedUri = new Uri(\"http://www.test.com/tables/StringIdType?$orderby=id desc\");\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(\"Hey\", items[0].String);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdTypeAndIntIdResponseContent()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\" + testId + \",\\\"String\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                IEnumerable<LongIdType> results = await table.ReadAsync();\n                LongIdType[] items = results.ToArray();\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(\"Hey\", items[0].String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdTypeAndIntParseableIdResponseContent()\n        {\n            object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n            foreach (object testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\" + testId.ToString().ToLower() + \",\\\"String\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                IEnumerable<LongIdType> results = await table.ReadAsync();\n                LongIdType[] items = results.ToArray();\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(Convert.ToInt64(testId), items[0].Id);\n                Assert.AreEqual(\"Hey\", items[0].String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdTypeAndNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            IEnumerable<LongIdType> results = await table.ReadAsync();\n            LongIdType[] items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(0L, items[0].Id);\n            Assert.AreEqual(\"Hey\", items[0].String);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdTypeAndNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"String\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            IEnumerable<LongIdType> results = await table.ReadAsync();\n            LongIdType[] items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(0L, items[0].Id);\n            Assert.AreEqual(\"Hey\", items[0].String);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdTypeAndStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                Exception exception = null;\n                try\n                {\n                    IEnumerable<LongIdType> results = await table.ReadAsync();\n                    LongIdType[] items = results.ToArray();\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"Error converting value\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdTypeAndIntIdFilter()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\" + testId + \",\\\"String\\\":\\\"Hey\\\"}]\");\n\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                List<LongIdType> items = await table.Where(t => t.Id == testId).ToListAsync();\n                Uri expectedUri = new Uri(string.Format(\"http://www.test.com/tables/LongIdType?$filter=(id eq {0}L)\", testId));\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdTypeAndNullIdFilter()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\");\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            List<LongIdType> items = await table.Where(t => t.Id == null).ToListAsync();\n            Uri expectedUri = new Uri(\"http://www.test.com/tables/LongIdType?$filter=(id eq null)\");\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(0L, items[0].Id);\n            Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdTypeAndIntIdProjection()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\" + testId + \",\\\"String\\\":\\\"Hey\\\"}]\");\n\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                var items = await table.Select(s => new { Id = s.Id, Message = s.String }).ToListAsync();\n                Uri expectedUri = new Uri(\"http://www.test.com/tables/LongIdType?$select=id,String\");\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(\"Hey\", items[0].Message);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdTypeAndNullIdProjection()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\");\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            var items = await table.Select(s => new { Id = s.Id, Message = s.String }).ToListAsync();\n            Uri expectedUri = new Uri(\"http://www.test.com/tables/LongIdType?$select=id,String\");\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(0L, items[0].Id);\n            Assert.AreEqual(\"Hey\", items[0].Message);\n            Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdTypeAndNoIdProjection()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"String\\\":\\\"Hey\\\"}]\");\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            var items = await table.Select(s => new { Id = s.Id, Message = s.String }).ToListAsync();\n            Uri expectedUri = new Uri(\"http://www.test.com/tables/LongIdType?$select=id,String\");\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(0L, items[0].Id);\n            Assert.AreEqual(\"Hey\", items[0].Message);\n            Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdTypeAndOrderByAscending()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\" + testId + \",\\\"String\\\":\\\"Hey\\\"}]\");\n\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                var items = await table.OrderBy(s => s.Id).ToListAsync();\n                Uri expectedUri = new Uri(\"http://www.test.com/tables/LongIdType?$orderby=id\");\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(\"Hey\", items[0].String);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdTypeAndOrderByDescending()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\");\n\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                var items = await table.OrderByDescending(s => s.Id).ToListAsync();\n                Uri expectedUri = new Uri(\"http://www.test.com/tables/LongIdType?$orderby=id desc\");\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0].Id);\n                Assert.AreEqual(\"Hey\", items[0].String);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithStringIdTypeAndStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                StringIdType item = await table.LookupAsync(\"an id\");\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithStringIdTypeAndNonStringIdResponseContent()\n        {\n            object[] testIdData = IdTestData.ValidIntIds.Concat(\n                                  IdTestData.InvalidIntIds).Cast<object>().Concat(\n                                  IdTestData.NonStringNonIntValidJsonIds).ToArray();\n\n            foreach (object testId in testIdData)\n            {\n                string stringTestId = testId.ToString().ToLower();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                StringIdType item = await table.LookupAsync(\"an id\");\n\n                Assert.AreEqual(testId.ToString(), item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithStringIdTypeAndNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            StringIdType item = await table.LookupAsync(\"an id\");\n\n            Assert.AreEqual(null, item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithStringIdTypeAndNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            StringIdType item = await table.LookupAsync(\"an id\");\n\n            Assert.AreEqual(null, item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithStringIdTypeAndStringIdParameter()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                StringIdType item = await table.LookupAsync(testId);\n\n                Uri expectedUri = new Uri(string.Format(\"http://www.test.com/tables/StringIdType/{0}\", Uri.EscapeDataString(testId)));\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithStringIdTypeAndInvalidStringIdParameter()\n        {\n            string[] testIdData = IdTestData.EmptyStringIds.Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n                Exception exception = null;\n                try\n                {\n                    StringIdType item = await table.LookupAsync(testId);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"The id can not be null or an empty string.\") ||\n                              exception.Message.Contains(\"An id must not contain any control characters or the characters\") ||\n                              exception.Message.Contains(\"is longer than the max string id length of 255 characters\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithStringIdTypeAndIntIdParameter()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                Exception exception = null;\n                try\n                {\n                    StringIdType item = await table.LookupAsync(testId);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"is invalid for looking up items of type\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithStringIdTypeAndNullIdParameter()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            Exception exception = null;\n            try\n            {\n                StringIdType item = await table.LookupAsync(null);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"The id can not be null or an empty string.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithIntIdTypeAndIntIdResponseContent()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                    IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                LongIdType item = await table.LookupAsync(10);\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithIntIdTypeAndIntParseableIdResponseContent()\n        {\n            object[] testIdData = IdTestData.NonStringNonIntValidJsonIds; ;\n\n            foreach (object testId in testIdData)\n            {\n                string stringTestId = testId.ToString().ToLower();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                LongIdType item = await table.LookupAsync(10);\n\n                Assert.AreEqual(Convert.ToInt64(testId), item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithIntIdTypeAndNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            LongIdType item = await table.LookupAsync(10);\n\n            Assert.AreEqual(0L, item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithIntIdTypeAndNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            LongIdType item = await table.LookupAsync(10);\n\n            Assert.AreEqual(0L, item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithIntIdTypeAndStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                Exception exception = null;\n                try\n                {\n                    LongIdType item = await table.LookupAsync(10);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"Error converting value\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithIntIdTypeAndIntIdParameter()\n        {\n            long[] testIdData = IdTestData.ValidIntIds;\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                LongIdType item = await table.LookupAsync(testId);\n\n                Uri expectedUri = new Uri(string.Format(\"http://www.test.com/tables/LongIdType/{0}\", testId));\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithIntIdTypeAndInvalidIntIdParameter()\n        {\n            long[] testIdData = IdTestData.InvalidIntIds;\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n                Exception exception = null;\n                try\n                {\n                    LongIdType item = await table.LookupAsync(testId);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"Specified argument was out of the range of valid values\") ||\n                              exception.Message.Contains(\" is not a positive integer value\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithIntIdTypeAndStringIdParameter()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            Exception exception = null;\n            try\n            {\n                LongIdType item = await table.LookupAsync(\"a string\");\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"is invalid for looking up items of type\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithIntIdTypeAndNullIdParameter()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            Exception exception = null;\n            try\n            {\n                LongIdType item = await table.LookupAsync(null);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\" is invalid for looking up items of type \"));\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithIntIdTypeAndZeroIdParameter()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            Exception exception = null;\n            try\n            {\n                LongIdType item = await table.LookupAsync(0L);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\" is not a positive integer value\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithUserParameters()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"CA\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n\n            hijack.SetResponseContent(\"{\\\"id\\\":12,\\\"String\\\":\\\"Hello\\\"}\");\n\n            StringType expected = await table.LookupAsync(12, userDefinedParameters);\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"12\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"state=CA\");\n            Assert.AreEqual(12, expected.Id);\n            Assert.AreEqual(\"Hello\", expected.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithStringIdTypeAndStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                StringIdType item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n                await table.RefreshAsync(item);\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithStringIdTypeAndNonStringIdResponseContent()\n        {\n            object[] testIdData = IdTestData.ValidIntIds.Concat(\n                                  IdTestData.InvalidIntIds).Cast<object>().Concat(\n                                  IdTestData.NonStringNonIntValidJsonIds).ToArray();\n\n            foreach (object testId in testIdData)\n            {\n                string stringTestId = testId.ToString().ToLower();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                StringIdType item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n                await table.RefreshAsync(item);\n\n                Assert.AreEqual(testId.ToString(), item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithStringIdTypeAndNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            StringIdType item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await table.RefreshAsync(item);\n\n            Assert.AreEqual(\"an id\", item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithStringIdTypeAndNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            StringIdType item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await table.RefreshAsync(item);\n\n            Assert.AreEqual(\"an id\", item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithStringIdTypeAndStringIdItem()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                StringIdType item = new StringIdType() { Id = testId, String = \"what?\" };\n                await table.RefreshAsync(item);\n\n                string idForOdataQuery = Uri.EscapeDataString(testId.Replace(\"'\", \"''\"));\n                Uri expectedUri = new Uri(string.Format(\"http://www.test.com/tables/StringIdType?$filter=(id eq '{0}')\", idForOdataQuery));\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithStringIdTypeAndEmptyStringIdItem()\n        {\n            string[] testIdData = IdTestData.EmptyStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                StringIdType item = new StringIdType() { Id = testId, String = \"what?\" };\n                await table.RefreshAsync(item);\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"what?\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithStringIdTypeAndInvalidStringIdParameter()\n        {\n            string[] testIdData = IdTestData.InvalidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n                Exception exception = null;\n                try\n                {\n                    StringIdType item = new StringIdType() { Id = testId, String = \"what?\" };\n                    await table.RefreshAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"An id must not contain any control characters or the characters\") ||\n                              exception.Message.Contains(\"is longer than the max string id length of 255 characters\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithStringIdTypeAndNullIdParameter()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            StringIdType item = new StringIdType() { String = \"Hey\" };\n            await table.RefreshAsync(item);\n\n            Assert.AreEqual(null, item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithIntIdTypeAndIntIdResponseContent()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                LongIdType item = new LongIdType() { Id = 3, String = \"what?\" };\n                await table.RefreshAsync(item);\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithIntIdTypeParseableIdResponseContent()\n        {\n            object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n            foreach (object testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId.ToString().ToLower() + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                LongIdType item = new LongIdType() { Id = 3, String = \"what?\" };\n                await table.RefreshAsync(item);\n\n                long expectedId = Convert.ToInt64(testId);\n                if (expectedId == default(long))\n                {\n                    expectedId = 3;\n                }\n\n                Assert.AreEqual(expectedId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithIntIdTypeAndNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            LongIdType item = new LongIdType() { Id = 3, String = \"what?\" };\n            await table.RefreshAsync(item);\n\n            Assert.AreEqual(3L, item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithIntIdTypeAndNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            LongIdType item = new LongIdType() { Id = 3, String = \"what?\" };\n            await table.RefreshAsync(item);\n\n            Assert.AreEqual(3L, item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithIntIdTypeAndStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                Exception exception = null;\n                try\n                {\n                    LongIdType item = new LongIdType() { Id = 3, String = \"what?\" };\n                    await table.RefreshAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"Error converting value\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithIntIdTypeAndIntIdItem()\n        {\n            long[] testIdData = IdTestData.ValidIntIds;\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\" + testId + \",\\\"String\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                LongIdType item = new LongIdType() { Id = testId, String = \"what?\" };\n                await table.RefreshAsync(item);\n\n                Uri expectedUri = new Uri(string.Format(\"http://www.test.com/tables/LongIdType?$filter=(id eq {0}L)\", testId));\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithIntIdTypeAndZeroIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n            LongIdType item = new LongIdType() { Id = 0, String = \"what?\" };\n            await table.RefreshAsync(item);\n\n            Assert.AreEqual(0L, item.Id);\n            Assert.AreEqual(\"what?\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithIntIdTypeAndInvalidIntIdParameter()\n        {\n            long[] testIdData = IdTestData.InvalidIntIds;\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n                Exception exception = null;\n                try\n                {\n                    LongIdType item = new LongIdType() { Id = testId, String = \"what?\" };\n                    await table.RefreshAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\" is not a positive integer value\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncWithUserParameters()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"CA\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n\n            StringType expected = new StringType();\n            expected.Id = 12;\n\n            hijack.SetResponseContent(\"{\\\"id\\\":12,\\\"String\\\":\\\"Goodbye\\\"}\");\n            await table.RefreshAsync(expected, userDefinedParameters);\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"$filter=(id eq 12)\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"state=CA\");\n            Assert.AreEqual(12, expected.Id);\n            Assert.AreEqual(\"Goodbye\", expected.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsyncThrowsWhenNotFound()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n\n            hijack.Response = TestHttpHandler.CreateResponse(String.Empty, HttpStatusCode.NotFound);\n            InvalidOperationException expected = null;\n\n            try\n            {\n                await table.RefreshAsync(new StringType() { Id = 5, String = \"Just Created\" });\n            }\n            catch (InvalidOperationException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringIdTypeAndStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                StringIdType item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n                await table.InsertAsync(item);\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringIdTypeAndNonStringIdResponseContent()\n        {\n            object[] testIdData = IdTestData.ValidIntIds.Concat(\n                                  IdTestData.InvalidIntIds).Cast<object>().Concat(\n                                  IdTestData.NonStringNonIntValidJsonIds).ToArray();\n\n            foreach (object testId in testIdData)\n            {\n                string stringTestId = testId.ToString().ToLower();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                StringIdType item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n                await table.InsertAsync(item);\n\n                Assert.AreEqual(testId.ToString(), item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringIdTypeAndNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            StringIdType item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await table.InsertAsync(item);\n\n            Assert.AreEqual(\"an id\", item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsync_DerivedTypeOnBaseTable_Succeeds()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":23,\\\"PublicProperty\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<PocoType> table = service.GetTable<PocoType>();\n\n            var item = new PocoDerivedPocoType() { PublicProperty = \"Hey\" };\n            await table.InsertAsync(item);\n\n            Assert.AreEqual(23L, item.Id);\n            Assert.AreEqual(\"Hey\", item.PublicProperty);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringIdTypeAndNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            StringIdType item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await table.InsertAsync(item);\n\n            Assert.AreEqual(\"an id\", item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringIdTypeAndStringIdItem()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                hijack.OnSendingRequest = async request =>\n                {\n                    string requestContent = await request.Content.ReadAsStringAsync();\n                    JObject itemAsJObject = JObject.Parse(requestContent);\n                    Assert.AreEqual(testId, (string)itemAsJObject[\"id\"]);\n                    Assert.AreEqual(\"what?\", (string)itemAsJObject[\"String\"]);\n                    return request;\n                };\n\n                StringIdType item = new StringIdType() { Id = testId, String = \"what?\" };\n                await table.InsertAsync(item);\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringIdTypeAndEmptyStringIdItem()\n        {\n            string[] testIdData = IdTestData.EmptyStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                hijack.OnSendingRequest = async request =>\n                {\n                    string requestContent = await request.Content.ReadAsStringAsync();\n                    JObject itemAsJObject = JObject.Parse(requestContent);\n                    Assert.AreEqual(testId, (string)itemAsJObject[\"id\"]);\n                    Assert.AreEqual(\"what?\", (string)itemAsJObject[\"String\"]);\n                    return request;\n                };\n\n                StringIdType item = new StringIdType() { Id = testId, String = \"what?\" };\n                await table.InsertAsync(item);\n\n                Assert.AreEqual(\"an id\", item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringIdTypeAndNullIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            hijack.OnSendingRequest = async request =>\n            {\n                string requestContent = await request.Content.ReadAsStringAsync();\n                JObject itemAsJObject = JObject.Parse(requestContent);\n                Assert.AreEqual(null, (string)itemAsJObject[\"id\"]);\n                Assert.AreEqual(\"what?\", (string)itemAsJObject[\"String\"]);\n                return request;\n            };\n\n            StringIdType item = new StringIdType() { Id = null, String = \"what?\" };\n            await table.InsertAsync(item);\n\n            Assert.AreEqual(\"an id\", item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringIdTypeAndInvalidStringIdParameter()\n        {\n            string[] testIdData = IdTestData.InvalidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n                Exception exception = null;\n                try\n                {\n                    StringIdType item = new StringIdType() { Id = testId, String = \"what?\" };\n                    await table.UpdateAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"An id must not contain any control characters or the characters\") ||\n                              exception.Message.Contains(\"is longer than the max string id length of 255 characters\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringIdAndList_DoesNotDuplicateList()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"Values\\\":[\\\"goodbye\\\",\\\"universe\\\"]}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<TypeWithArray> table = service.GetTable<TypeWithArray>();\n            var item = new TypeWithArray()\n            {\n                Id = \"an id\",\n                Values = new List<string> {\n                    \"hello\", \"world\"\n                }\n            };\n\n            await table.InsertAsync(item);\n\n            Assert.AreEqual(\"an id\", item.Id);\n            Assert.AreEqual(item.Values.Count, 2);\n            Assert.AreEqual(item.Values[0], \"goodbye\");\n            Assert.AreEqual(item.Values[1], \"universe\");\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithIntIdTypeAndIntIdResponseContent()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                LongIdType item = new LongIdType() { String = \"what?\" };\n                await table.InsertAsync(item);\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithIntIdTypeParseableIdResponseContent()\n        {\n            object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n            foreach (object testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId.ToString().ToLower() + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                LongIdType item = new LongIdType() { String = \"what?\" };\n                await table.InsertAsync(item);\n\n                long expectedId = Convert.ToInt64(testId);\n                Assert.AreEqual(expectedId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithIntIdTypeAndNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            LongIdType item = new LongIdType() { String = \"what?\" };\n            await table.InsertAsync(item);\n\n            Assert.AreEqual(0L, item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithIntIdTypeAndNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            LongIdType item = new LongIdType() { String = \"what?\" };\n            await table.InsertAsync(item);\n\n            Assert.AreEqual(0L, item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithIntIdTypeAndStringIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            Exception exception = null;\n            try\n            {\n                LongIdType item = new LongIdType() { String = \"what?\" };\n                await table.InsertAsync(item);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"Error converting value\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithIntIdTypeAndIntIdItem()\n        {\n            long[] testIdData = IdTestData.ValidIntIds;\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                Exception exception = null;\n                try\n                {\n                    LongIdType item = new LongIdType() { Id = testId, String = \"what?\" };\n                    await table.InsertAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"Cannot insert if the id member is already set.\") ||\n                              exception.Message.Contains(\"for member id is outside the valid range for numeric columns\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithIntIdTypeAndZeroIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":10,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n            LongIdType item = new LongIdType() { Id = 0, String = \"what?\" };\n            await table.InsertAsync(item);\n\n            Assert.AreEqual(10L, item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithIntIdTypeAndInvalidIntIdParameter()\n        {\n            long[] testIdData = IdTestData.InvalidIntIds;\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n                Exception exception = null;\n                try\n                {\n                    LongIdType item = new LongIdType() { Id = testId, String = \"what?\" };\n                    await table.InsertAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\" is not a positive integer value\") ||\n                              exception.Message.Contains(\"for member id is outside the valid range for numeric columns\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncGenericWithUserParameters()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"CA\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n\n            StringType obj = new StringType();\n            obj.String = \"new\";\n\n            hijack.SetResponseContent(\"{\\\"id\\\":12,\\\"value\\\":\\\"new\\\"}\");\n            await table.InsertAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(12, obj.Id);\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"state=CA\");\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithStringIdTypeAndStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                StringIdType item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n                await table.UpdateAsync(item);\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithStringIdTypeAndNonStringIdResponseContent()\n        {\n            object[] testIdData = IdTestData.ValidIntIds.Concat(\n                                  IdTestData.InvalidIntIds).Cast<object>().Concat(\n                                  IdTestData.NonStringNonIntValidJsonIds).ToArray();\n\n            foreach (object testId in testIdData)\n            {\n                string stringTestId = testId.ToString().ToLower();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId.ToLower() + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                StringIdType item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n                await table.UpdateAsync(item);\n\n                Assert.AreEqual(testId.ToString(), item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithStringIdTypeAndNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            StringIdType item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await table.UpdateAsync(item);\n\n            Assert.AreEqual(\"an id\", item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithStringIdTypeAndNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            StringIdType item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await table.UpdateAsync(item);\n\n            Assert.AreEqual(\"an id\", item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithStringIdTypeAndStringIdItem()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                hijack.OnSendingRequest = async request =>\n                {\n                    string requestContent = await request.Content.ReadAsStringAsync();\n                    JObject itemAsJObject = JObject.Parse(requestContent);\n                    Assert.AreEqual(testId, (string)itemAsJObject[\"id\"]);\n                    Assert.AreEqual(\"what?\", (string)itemAsJObject[\"String\"]);\n                    string idForUri = Uri.EscapeDataString(testId);\n                    Uri expectedUri = new Uri(string.Format(\"http://www.test.com/tables/StringIdType/{0}\", idForUri));\n                    Assert.AreEqual(request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n                    return request;\n                };\n\n                StringIdType item = new StringIdType() { Id = testId, String = \"what?\" };\n                await table.UpdateAsync(item);\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithStringIdTypeAndEmptyStringIdItem()\n        {\n            string[] testIdData = IdTestData.EmptyStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n                Exception exception = null;\n                try\n                {\n                    StringIdType item = new StringIdType() { Id = testId, String = \"what?\" };\n                    await table.UpdateAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"The id can not be null or an empty string.\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithStringIdTypeAndNullIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            Exception exception = null;\n            try\n            {\n                StringIdType item = new StringIdType() { Id = null, String = \"what?\" };\n                await table.UpdateAsync(item);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"Expected id member not found.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithStringIdTypeAndInvalidStringIdParameter()\n        {\n            string[] testIdData = IdTestData.InvalidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n                Exception exception = null;\n                try\n                {\n                    StringIdType item = new StringIdType() { Id = testId, String = \"what?\" };\n                    await table.UpdateAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"An id must not contain any control characters or the characters\") ||\n                              exception.Message.Contains(\"is longer than the max string id length of 255 characters\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithIntIdTypeAndIntIdResponseContent()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                LongIdType item = new LongIdType() { Id = 12, String = \"what?\" };\n                await table.UpdateAsync(item);\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithIntIdTypeParseableIdResponseContent()\n        {\n            object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n            foreach (object testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId.ToString().ToLower() + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n                LongIdType item = new LongIdType() { Id = 12, String = \"what?\" };\n                await table.UpdateAsync(item);\n\n                long expectedId = Convert.ToInt64(testId);\n                if (expectedId == 0L)\n                {\n                    expectedId = 12;\n                }\n\n                Assert.AreEqual(expectedId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithIntIdTypeAndNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            LongIdType item = new LongIdType() { Id = 12, String = \"what?\" };\n            await table.UpdateAsync(item);\n\n            Assert.AreEqual(12L, item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithIntIdTypeAndNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            LongIdType item = new LongIdType() { Id = 12, String = \"what?\" };\n            await table.UpdateAsync(item);\n\n            Assert.AreEqual(12L, item.Id);\n            Assert.AreEqual(\"Hey\", item.String);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithIntIdTypeAndStringIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n\n            Exception exception = null;\n            try\n            {\n                LongIdType item = new LongIdType() { Id = 12, String = \"what?\" };\n                await table.UpdateAsync(item);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"Error converting value\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithIntIdTypeAndIntIdItem()\n        {\n            long[] testIdData = IdTestData.ValidIntIds\n                                          .Where(id => id != long.MaxValue) // Max value fails for serialization reasons; not because of id constraints\n                                          .ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n                LongIdType item = new LongIdType() { Id = testId, String = \"what?\" };\n                await table.UpdateAsync(item);\n\n                Assert.AreEqual(testId, item.Id);\n                Assert.AreEqual(\"Hey\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithIntIdTypeAndZeroIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":10,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n            Exception exception = null;\n            try\n            {\n                LongIdType item = new LongIdType() { Id = 0, String = \"what?\" };\n                await table.UpdateAsync(item);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"Expected id member not found.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithIntIdTypeAndInvalidIntIdParameter()\n        {\n            long[] testIdData = IdTestData.InvalidIntIds;\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n                Exception exception = null;\n                try\n                {\n                    LongIdType item = new LongIdType() { Id = testId, String = \"what?\" };\n                    await table.UpdateAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\" is not a positive integer value\") ||\n                              exception.Message.Contains(\"for member id is outside the valid range for numeric columns\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncGenericWithUserParameters()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"FL\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n\n            StringType obj = new StringType();\n            obj.Id = 12;\n            obj.String = \"new\";\n\n            hijack.SetResponseContent(\"{\\\"Id\\\":12,\\\"String\\\":\\\"new1\\\"}\");\n\n            await table.UpdateAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(\"new1\", obj.String);\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"state=FL\");\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithStringIdTypeAndStringIdItem()\n        {\n            string[] testIdData = IdTestData.ValidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n                hijack.OnSendingRequest = request =>\n                {\n                    Assert.IsNull(request.Content);\n                    string idForUri = Uri.EscapeDataString(testId);\n                    Uri expectedUri = new Uri(string.Format(\"http://www.test.com/tables/StringIdType/{0}\", idForUri));\n                    Assert.AreEqual(request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n                    return new TaskFactory<HttpRequestMessage>().StartNew(() => request);\n                };\n\n                StringIdType item = new StringIdType() { Id = testId, String = \"what?\" };\n                await table.DeleteAsync(item);\n\n                Assert.AreEqual(null, item.Id);\n                Assert.AreEqual(\"what?\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithStringIdTypeAndEmptyStringIdItem()\n        {\n            string[] testIdData = IdTestData.EmptyStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n                Exception exception = null;\n                try\n                {\n                    StringIdType item = new StringIdType() { Id = testId, String = \"what?\" };\n                    await table.DeleteAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"The id can not be null or an empty string.\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithStringIdTypeAndNullIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            Exception exception = null;\n            try\n            {\n                StringIdType item = new StringIdType() { Id = null, String = \"what?\" };\n                await table.DeleteAsync(item);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"Expected id member not found.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithStringIdTypeAndInvalidStringIdParameter()\n        {\n            string[] testIdData = IdTestData.InvalidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n                Exception exception = null;\n                try\n                {\n                    StringIdType item = new StringIdType() { Id = testId, String = \"what?\" };\n                    await table.DeleteAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"An id must not contain any control characters or the characters\") ||\n                              exception.Message.Contains(\"is longer than the max string id length of 255 characters\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithIntIdTypeAndIntIdItem()\n        {\n            long[] testIdData = IdTestData.ValidIntIds\n                                          .Where(id => id != long.MaxValue) // Max value fails for serialization reasons; not because of id constraints\n                                          .ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n                LongIdType item = new LongIdType() { Id = testId, String = \"what?\" };\n                await table.DeleteAsync(item);\n\n                Assert.AreEqual(0L, item.Id);\n                Assert.AreEqual(\"what?\", item.String);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithIntIdTypeAndZeroIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":10,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n            Exception exception = null;\n            try\n            {\n                LongIdType item = new LongIdType() { Id = 0, String = \"what?\" };\n                await table.DeleteAsync(item);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"Expected id member not found.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithIntIdTypeAndInvalidIntIdParameter()\n        {\n            long[] testIdData = IdTestData.InvalidIntIds;\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<LongIdType> table = service.GetTable<LongIdType>();\n                Exception exception = null;\n                try\n                {\n                    LongIdType item = new LongIdType() { Id = testId, String = \"what?\" };\n                    await table.DeleteAsync(item);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\" is not a positive integer value\") ||\n                              exception.Message.Contains(\"for member id is outside the valid range for numeric columns\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithUserParameters()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"WY\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n\n            StringType obj = new StringType();\n            obj.Id = 12;\n            obj.String = \"new\";\n\n            await table.DeleteAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(0, obj.Id);\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.IsNull(hijack.Request.Content);\n            Assert.Contains(hijack.Request.RequestUri.Query, \"state=WY\");\n        }\n\n        [AsyncTestMethod]\n        public async Task UndeleteAsync()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            hijack.OnSendingRequest = req =>\n            {\n                Assert.AreEqual(req.Method, HttpMethod.Post);\n                Assert.AreEqual(req.RequestUri.Query, \"?__systemproperties=__createdAt%2C__updatedAt%2C__version%2C__deleted\");\n                // only id and version should be sent\n                Assert.IsNull(req.Content);\n                Assert.AreEqual(req.Headers.IfMatch.First().Tag, \"\\\"abc\\\"\");\n                return Task.FromResult(req);\n            };\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<ToDoWithSystemPropertiesType> table = service.GetTable<ToDoWithSystemPropertiesType>();\n\n            var obj = new ToDoWithSystemPropertiesType();\n            obj.Id = \"an id\";\n            obj.String = \"new\";\n            obj.Version = \"abc\";\n\n            await table.UndeleteAsync(obj, null);\n\n            Assert.AreEqual(\"an id\", obj.Id);\n            Assert.AreEqual(\"Hey\", obj.String);\n        }\n\n        [TestMethod]\n        public void CreateQueryGeneric()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n\n            IMobileServiceTableQuery<StringType> query = table.CreateQuery();\n\n            Assert.IsNotNull(query);\n        }\n\n        [AsyncTestMethod]\n        public async Task IncludeDeleted()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":12,\\\"String\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n\n            List<StringType> people = await table.IncludeDeleted().ToListAsync();\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"__includeDeleted=true\");\n\n            Assert.AreEqual(12, people[0].Id);\n            Assert.AreEqual(\"Hey\", people[0].String);\n        }\n\n        [AsyncTestMethod]\n        public async Task IncludeTotalGenericList()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"results\\\":[{\\\"id\\\":12,\\\"String\\\":\\\"Hey\\\"}], \\\"count\\\":1}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n\n            QueryResultList<StringType> people = (QueryResultList<StringType>)await table.IncludeTotalCount().ToListAsync();\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"$inlinecount=allpages\");\n\n            Assert.AreEqual((long)1, people.TotalCount);\n            Assert.AreEqual(12, people[0].Id);\n            Assert.AreEqual(\"Hey\", people[0].String);\n        }\n\n        [AsyncTestMethod]\n        public async Task IncludeTotalGenericEnum()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"results\\\":[{\\\"id\\\":12,\\\"String\\\":\\\"Hey\\\"}], \\\"count\\\":1}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n\n            QueryResultEnumerable<StringType> results = (QueryResultEnumerable<StringType>)await table.IncludeTotalCount().ToEnumerableAsync();\n            StringType[] people = results.Cast<StringType>().ToArray();\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"$inlinecount=allpages\");\n\n            Assert.AreEqual((long)1, results.TotalCount);\n            Assert.AreEqual(12, people[0].Id);\n            Assert.AreEqual(\"Hey\", people[0].String);\n        }\n\n        [AsyncTestMethod]\n        public async Task WithParametersAsyncGeneric()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"WY\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":12,\\\"String\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n            List<StringType> people = await table.WithParameters(userDefinedParameters).ToListAsync();\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"state=WY\");\n\n            Assert.AreEqual(1, people.Count);\n            Assert.AreEqual(12, people[0].Id);\n            Assert.AreEqual(\"Hey\", people[0].String);\n        }\n\n        [AsyncTestMethod]\n        public async Task WhereAsyncGeneric()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":12,\\\"String\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n            List<StringType> people = await table.Where(p => p.Id == 12).ToListAsync();\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"$filter=(id eq 12)\");\n\n            Assert.AreEqual(1, people.Count);\n            Assert.AreEqual(12, people[0].Id);\n            Assert.AreEqual(\"Hey\", people[0].String);\n        }\n\n        [AsyncTestMethod]\n        public async Task WhereAsyncWithStringIdGeneric()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":12,\\\"String\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n            List<StringIdType> people = await table.Where(p => p.Id == \"12\").ToListAsync();\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringIdType\");\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"$filter=(id eq '12')\");\n\n            Assert.AreEqual(1, people.Count);\n            Assert.AreEqual(\"12\", people[0].Id);\n            Assert.AreEqual(\"Hey\", people[0].String);\n        }\n\n        [AsyncTestMethod]\n        public async Task SelectAsyncGeneric()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":12,\\\"String\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n            StringType me = new StringType();\n            me.Id = 10;\n            me.String = \"apple\";\n\n            List<string> people = await table.Select(p => p.String).ToListAsync();\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n\n            Assert.AreEqual(1, people.Count);\n            Assert.AreEqual(\"Hey\", people[0]);\n        }\n\n        [AsyncTestMethod]\n        public async Task OrderByAsyncGeneric()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n            List<StringType> people = await table.OrderBy(p => p.Id).ThenBy(p => p.String).ToListAsync();\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"orderby=id,String\");\n        }\n\n        [AsyncTestMethod]\n        public async Task OrderByDoubleAsyncGeneric()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n            List<StringType> people = await table.OrderBy(p => p.Id).OrderBy(p => p.String).ToListAsync();\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"orderby=String,id\");\n        }\n\n        [AsyncTestMethod]\n        public async Task OrderByDescAsyncGeneric()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n            List<StringType> people = await table.OrderByDescending(p => p.Id).ThenByDescending(p => p.String).ToListAsync();\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"orderby=id desc,String desc\");\n        }\n\n        [AsyncTestMethod]\n        public async Task OrderByAscDescAsyncGeneric()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n            List<StringType> people = await table.OrderBy(p => p.Id).ThenByDescending(p => p.String).ToListAsync();\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"orderby=id,String desc\");\n        }\n\n        [AsyncTestMethod]\n        public async Task SkipAndTakeAsyncGeneric()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<StringType> table = service.GetTable<StringType>();\n            List<StringType> people = await table.Skip(100).Take(10).ToListAsync();\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"StringType\");\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"$skip=100\");\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"$top=10\");\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncStringIdSystemPropertiesRemovedFromRequest()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<CreatedAtType> createdAtTable = service.GetTable<CreatedAtType>();\n\n            hijack.OnSendingRequest = async (request) =>\n            {\n                string content = await request.Content.ReadAsStringAsync();\n                JObject obj = JToken.Parse(content) as JObject;\n                Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                Assert.IsFalse(obj.Properties().Where(p => p.Name.Contains(\"created\")).Any());\n                return request;\n            };\n\n            await createdAtTable.InsertAsync(new CreatedAtType() { CreatedAt = new DateTime(2012, 1, 8), Id = \"an id\" });\n\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\"}\");\n\n            IMobileServiceTable<NamedSystemPropertiesType> namedCreatedAtTable = service.GetTable<NamedSystemPropertiesType>();\n\n            hijack.OnSendingRequest = async (request) =>\n            {\n                string content = await request.Content.ReadAsStringAsync();\n                JObject obj = JToken.Parse(content) as JObject;\n                Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                Assert.IsFalse(obj.Properties().Where(p => p.Name.Contains(\"__createdAt\")).Any());\n                return request;\n            };\n\n            await namedCreatedAtTable.InsertAsync(new NamedSystemPropertiesType() { __createdAt = new DateTime(2012, 1, 8), Id = \"an id\" });\n\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\"}\");\n\n            IMobileServiceTable<UpdatedAtType> updatedAtTable = service.GetTable<UpdatedAtType>();\n\n            hijack.OnSendingRequest = async (request) =>\n            {\n                string content = await request.Content.ReadAsStringAsync();\n                JObject obj = JToken.Parse(content) as JObject;\n                Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                Assert.IsFalse(obj.Properties().Where(p => p.Name.Contains(\"updated\")).Any());\n                return request;\n            };\n\n            await updatedAtTable.InsertAsync(new UpdatedAtType() { UpdatedAt = new DateTime(2012, 1, 8), Id = \"an id\" });\n\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\"}\");\n\n            IMobileServiceTable<VersionType> versionTable = service.GetTable<VersionType>();\n\n            hijack.OnSendingRequest = async (request) =>\n            {\n                string content = await request.Content.ReadAsStringAsync();\n                JObject obj = JToken.Parse(content) as JObject;\n                Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                Assert.IsFalse(obj.Properties().Where(p => p.Name.Contains(\"version\")).Any());\n                return request;\n            };\n\n            await versionTable.InsertAsync(new VersionType() { Version = \"a version\", Id = \"an id\" });\n\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\"}\");\n\n            IMobileServiceTable<AllSystemPropertiesType> allsystemPropertiesTable = service.GetTable<AllSystemPropertiesType>();\n\n            hijack.OnSendingRequest = async (request) =>\n            {\n                string content = await request.Content.ReadAsStringAsync();\n                JObject obj = JToken.Parse(content) as JObject;\n                Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                Assert.IsFalse(obj.Properties().Where(p => p.Name.Contains(\"version\")).Any());\n                Assert.IsFalse(obj.Properties().Where(p => p.Name.Contains(\"created\")).Any());\n                Assert.IsFalse(obj.Properties().Where(p => p.Name.Contains(\"updated\")).Any());\n                return request;\n            };\n\n            await allsystemPropertiesTable.InsertAsync(new AllSystemPropertiesType()\n            {\n                Version = \"a version\",\n                UpdatedAt = new DateTime(2012, 1, 8),\n                CreatedAt = new DateTime(2012, 1, 8),\n                Id = \"an id\"\n            });\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncStringIdNonSystemPropertiesNotRemovedFromRequest()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<NotSystemPropertyCreatedAtType> createdAtTable = service.GetTable<NotSystemPropertyCreatedAtType>();\n\n            hijack.OnSendingRequest = async (request) =>\n            {\n                string content = await request.Content.ReadAsStringAsync();\n                JObject obj = JToken.Parse(content) as JObject;\n                Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                Assert.IsTrue(obj.Properties().Where(p => p.Name.Contains(\"Created\")).Any());\n                return request;\n            };\n\n            await createdAtTable.InsertAsync(new NotSystemPropertyCreatedAtType() { CreatedAt = new DateTime(2012, 1, 8), Id = \"an id\" });\n\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\"}\");\n\n            IMobileServiceTable<NotSystemPropertyUpdatedAtType> updatedAtTable = service.GetTable<NotSystemPropertyUpdatedAtType>();\n\n            hijack.OnSendingRequest = async (request) =>\n            {\n                string content = await request.Content.ReadAsStringAsync();\n                JObject obj = JToken.Parse(content) as JObject;\n                Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                Assert.IsTrue(obj.Properties().Where(p => p.Name.Contains(\"Updated\")).Any());\n                return request;\n            };\n\n            await updatedAtTable.InsertAsync(new NotSystemPropertyUpdatedAtType() { _UpdatedAt = new DateTime(2012, 1, 8), Id = \"an id\" });\n\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\"}\");\n\n            IMobileServiceTable<NotSystemPropertyVersionType> versionTable = service.GetTable<NotSystemPropertyVersionType>();\n\n            hijack.OnSendingRequest = async (request) =>\n            {\n                string content = await request.Content.ReadAsStringAsync();\n                JObject obj = JToken.Parse(content) as JObject;\n                Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                Assert.IsTrue(obj.Properties().Where(p => p.Name.Contains(\"version\")).Any());\n                return request;\n            };\n\n            await versionTable.InsertAsync(new NotSystemPropertyVersionType() { version = \"a version\", Id = \"an id\" });\n        }\n\n        [TestMethod]\n        public void SystemPropertiesPropertySetCorrectly()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n\n            IMobileServiceTable<StringIdType> stringIdTable = service.GetTable<StringIdType>();\n            Assert.AreEqual(stringIdTable.SystemProperties, MobileServiceSystemProperties.None);\n\n            IMobileServiceTable<StringType> stringTable = service.GetTable<StringType>();\n            Assert.AreEqual(stringTable.SystemProperties, MobileServiceSystemProperties.None);\n\n            IMobileServiceTable<NotSystemPropertyCreatedAtType> notSystemPropertyTable = service.GetTable<NotSystemPropertyCreatedAtType>();\n            Assert.AreEqual(notSystemPropertyTable.SystemProperties, MobileServiceSystemProperties.None);\n\n            IMobileServiceTable<IntegerIdNotSystemPropertyCreatedAtType> integerIdNotsystemPropertyTable = service.GetTable<IntegerIdNotSystemPropertyCreatedAtType>();\n            Assert.AreEqual(integerIdNotsystemPropertyTable.SystemProperties, MobileServiceSystemProperties.None);\n\n            IMobileServiceTable<NotSystemPropertyUpdatedAtType> notSystemPropertyUpdatedTable = service.GetTable<NotSystemPropertyUpdatedAtType>();\n            Assert.AreEqual(notSystemPropertyUpdatedTable.SystemProperties, MobileServiceSystemProperties.None);\n\n            IMobileServiceTable<NotSystemPropertyVersionType> notSystemPropertyVersionTable = service.GetTable<NotSystemPropertyVersionType>();\n            Assert.AreEqual(notSystemPropertyVersionTable.SystemProperties, MobileServiceSystemProperties.None);\n\n            IMobileServiceTable<IntegerIdWithNamedSystemPropertiesType> integerIdWithNamedSystemPropertyTable = service.GetTable<IntegerIdWithNamedSystemPropertiesType>();\n            Assert.AreEqual(integerIdWithNamedSystemPropertyTable.SystemProperties, MobileServiceSystemProperties.None);\n\n            IMobileServiceTable<LongIdWithNamedSystemPropertiesType> longIdWithNamedSystemPropertyTable = service.GetTable<LongIdWithNamedSystemPropertiesType>();\n            Assert.AreEqual(longIdWithNamedSystemPropertyTable.SystemProperties, MobileServiceSystemProperties.None);\n\n            IMobileServiceTable<CreatedAtType> createdAtTable = service.GetTable<CreatedAtType>();\n            Assert.AreEqual(createdAtTable.SystemProperties, MobileServiceSystemProperties.CreatedAt);\n\n            IMobileServiceTable<DoubleNamedSystemPropertiesType> doubleNamedCreatedAtTable = service.GetTable<DoubleNamedSystemPropertiesType>();\n            Assert.AreEqual(doubleNamedCreatedAtTable.SystemProperties, MobileServiceSystemProperties.CreatedAt);\n\n            IMobileServiceTable<NamedSystemPropertiesType> namedCreatedAtTable = service.GetTable<NamedSystemPropertiesType>();\n            Assert.AreEqual(namedCreatedAtTable.SystemProperties, MobileServiceSystemProperties.CreatedAt);\n\n            IMobileServiceTable<NamedDifferentCasingSystemPropertiesType> namedDifferentCasingCreatedAtTable = service.GetTable<NamedDifferentCasingSystemPropertiesType>();\n            Assert.AreEqual(namedDifferentCasingCreatedAtTable.SystemProperties, MobileServiceSystemProperties.CreatedAt);\n\n            IMobileServiceTable<UpdatedAtType> updatedAtTable = service.GetTable<UpdatedAtType>();\n            Assert.AreEqual(updatedAtTable.SystemProperties, MobileServiceSystemProperties.UpdatedAt);\n\n            IMobileServiceTable<VersionType> versionTable = service.GetTable<VersionType>();\n            Assert.AreEqual(versionTable.SystemProperties, MobileServiceSystemProperties.Version);\n\n            IMobileServiceTable<AllSystemPropertiesType> allsystemPropertiesTable = service.GetTable<AllSystemPropertiesType>();\n            Assert.AreEqual(allsystemPropertiesTable.SystemProperties, MobileServiceSystemProperties.Version |\n                                                                       MobileServiceSystemProperties.CreatedAt |\n                                                                       MobileServiceSystemProperties.UpdatedAt);\n        }\n\n        [TestMethod]\n        public void IntegerIdTypesCanNotHaveSystemPropertyAttributes()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            Exception exception = null;\n\n            try\n            {\n                IMobileServiceTable<IntegerIdWithSystemPropertiesType> stringIdTable = service.GetTable<IntegerIdWithSystemPropertiesType>();\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"has an integer id member and therefore can not have any members with the system property attribute\"));\n            exception = null;\n\n            try\n            {\n                IMobileServiceTable<LongIdWithSystemPropertiesType> stringIdTable = service.GetTable<LongIdWithSystemPropertiesType>();\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"has an integer id member and therefore can not have any members with the system property attribute\"));\n\n        }\n\n        [TestMethod]\n        public void TypesCanNotHaveMultiplePropertiesWithTheSameSystemAttribute()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            Exception exception = null;\n\n            try\n            {\n                IMobileServiceTable<MultipleSystemPropertiesType> stringIdTable = service.GetTable<MultipleSystemPropertiesType>();\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"Only one member may have the property name\"));\n            exception = null;\n\n            try\n            {\n                IMobileServiceTable<NamedAndAttributedSystemPropertiesType> stringIdTable = service.GetTable<NamedAndAttributedSystemPropertiesType>();\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"Only one member may have the property name\"));\n\n            try\n            {\n                IMobileServiceTable<DoubleJsonPropertyNamedSystemPropertiesType> stringIdTable = service.GetTable<DoubleJsonPropertyNamedSystemPropertiesType>();\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"Only one member may have the property name\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task CreatedAtSystemPropertyDeserializesToDatetimeOrString()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.SetResponseContent(\"[{\\\"id\\\":\\\"an id\\\",\\\"__createdAt\\\":\\\"1999-12-31T23:59:59.000Z\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<CreatedAtType> table = service.GetTable<CreatedAtType>();\n\n            IEnumerable<CreatedAtType> results = await table.ReadAsync();\n            CreatedAtType[] items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(\"an id\", items[0].Id);\n            Assert.AreEqual(new DateTime(1999, 12, 31, 23, 59, 59, DateTimeKind.Utc).ToLocalTime(), items[0].CreatedAt);\n\n            hijack.SetResponseContent(\"[{\\\"id\\\":\\\"an id\\\",\\\"__createdAt\\\":\\\"1999-12-31T23:59:59.000Z\\\"}]\");\n            IMobileServiceTable<StringCreatedAtType> stringTable = service.GetTable<StringCreatedAtType>();\n\n            IEnumerable<StringCreatedAtType> stringResults = await stringTable.ReadAsync();\n            StringCreatedAtType[] stringItems = stringResults.ToArray();\n\n            Assert.AreEqual(1, stringItems.Count());\n            Assert.AreEqual(\"an id\", stringItems[0].Id);\n\n            // TODO: culture-specific, may fail in other formats\n            Assert.AreEqual(\"12/31/1999 23:59:59\", stringItems[0].CreatedAt);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdatedAtSystemPropertyDeserializesToDatetimeOrString()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.SetResponseContent(\"[{\\\"id\\\":\\\"an id\\\",\\\"__updatedAt\\\":\\\"1999-12-31T23:59:59.000Z\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<UpdatedAtType> table = service.GetTable<UpdatedAtType>();\n\n            IEnumerable<UpdatedAtType> results = await table.ReadAsync();\n            UpdatedAtType[] items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(\"an id\", items[0].Id);\n            Assert.AreEqual(new DateTime(1999, 12, 31, 23, 59, 59, DateTimeKind.Utc).ToLocalTime(), items[0].UpdatedAt);\n\n            hijack.SetResponseContent(\"[{\\\"id\\\":\\\"an id\\\",\\\"__updatedAt\\\":\\\"1999-12-31T23:59:59.000Z\\\"}]\");\n            IMobileServiceTable<StringUpdatedAtType> stringTable = service.GetTable<StringUpdatedAtType>();\n\n            IEnumerable<StringUpdatedAtType> stringResults = await stringTable.ReadAsync();\n            StringUpdatedAtType[] stringItems = stringResults.ToArray();\n\n            Assert.AreEqual(1, stringItems.Count());\n            Assert.AreEqual(\"an id\", stringItems[0].Id);\n\n            // TODO: culture-specific, may fail in other formats\n            Assert.AreEqual(\"12/31/1999 23:59:59\", stringItems[0].UpdatedAt);\n        }\n\n        [AsyncTestMethod]\n        public async Task VersionSystemPropertyDeserializesToString()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.SetResponseContent(\"[{\\\"id\\\":\\\"an id\\\",\\\"__version\\\":\\\"AAAAAAAAH2o=\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable<VersionType> table = service.GetTable<VersionType>();\n\n            IEnumerable<VersionType> results = await table.ReadAsync();\n            VersionType[] items = results.ToArray();\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(\"an id\", items[0].Id);\n            Assert.AreEqual(\"AAAAAAAAH2o=\", items[0].Version);\n        }\n\n        // This test fails on mono because there is already header validation that prevents the invalid etag values this test uses.\n        // If Xamarin ever updates to use the BCL implementation of HttpClient (instead of their own) this tag can be removed.\n        [Tag(\"notXamarin\")]\n        [AsyncTestMethod]\n        public async Task UpdateAsync_SetsIfMatchHeader_WhenObjectHasVersionOnIt()\n        {\n            await TestIfMatchHeaderIsSet((client, item) => client.UpdateAsync(item));\n        }\n\n        [Tag(\"notXamarin\")]\n        [AsyncTestMethod]\n        public async Task DeleteAsync_SetsIfMatchHeader_WhenObjectHasVersionOnIt()\n        {\n            await TestIfMatchHeaderIsSet((client, item) => client.DeleteAsync(item));\n        }\n\n        private static async Task TestIfMatchHeaderIsSet(Func<IMobileServiceTable<VersionType>, VersionType, Task> action)\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"AAAAAAAAH2o=\", \"\\\"AAAAAAAAH2o=\\\"\"),\n                new Tuple<string, string>(\"a version\", \"\\\"a version\\\"\"),\n                new Tuple<string, string>(\"a version with a \\\" quote\", \"\\\"a version with a \\\\\\\" quote\\\"\"),\n                new Tuple<string, string>(\"a version with an already escaped \\\\\\\" quote\", \"\\\"a version with an already escaped \\\\\\\" quote\\\"\"),\n                new Tuple<string, string>(\"\\\"a version with a quote at the start\", \"\\\"\\\\\\\"a version with a quote at the start\\\"\"),\n                new Tuple<string, string>(\"a version with a quote at the end\\\"\", \"\\\"a version with a quote at the end\\\\\\\"\\\"\"),\n                new Tuple<string, string>(\"datetime'2013-10-08T04%3A12%3A36.96Z'\", \"\\\"datetime'2013-10-08T04%3A12%3A36.96Z'\\\"\"),\n            };\n\n            foreach (Tuple<string, string> testcase in testCases)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"__version\\\":\\\"AAAAAAAAH2o=\\\"}\");\n\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<VersionType> table = service.GetTable<VersionType>();\n\n                hijack.OnSendingRequest = (request) =>\n                {\n                    Assert.AreEqual(request.Headers.IfMatch.First().Tag, testcase.Item2);\n                    return Task.FromResult(request);\n                };\n                var item = new VersionType() { Id = \"an id\", Version = testcase.Item1 };\n                await action(table, item);\n            }\n        }\n\n        // This test fails on mono because there is already header validation that prevents the invalid etag values this test uses.\n        // If Xamarin ever updates to use the BCL implementation of HttpClient (instead of their own) this tag can be removed.\n        [Tag(\"notXamarin\")]\n        [AsyncTestMethod]\n        public async Task VersionSystemPropertySetFromEtagHeader()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"AAAAAAAAH2o=\", \"\\\"AAAAAAAAH2o=\\\"\"),\n                new Tuple<string, string>(\"a version\", \"\\\"a version\\\"\"),\n                new Tuple<string, string>(\"a version with a \\\" quote\", \"\\\"a version with a \\\\\\\" quote\\\"\"),\n                new Tuple<string, string>(\"a version with an already escaped \\\" quote\", \"\\\"a version with an already escaped \\\\\\\" quote\\\"\"),\n                new Tuple<string, string>(\"\\\"a version with a quote at the start\", \"\\\"\\\\\\\"a version with a quote at the start\\\"\"),\n                new Tuple<string, string>(\"a version with a quote at the end\\\"\", \"\\\"a version with a quote at the end\\\\\\\"\\\"\"),\n                new Tuple<string, string>(\"datetime'2013-10-08T04%3A12%3A36.96Z'\", \"\\\"datetime'2013-10-08T04%3A12%3A36.96Z'\\\"\"),\n            };\n\n            foreach (Tuple<string, string> testcase in testCases)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\"}\");\n                hijack.Response.Headers.ETag = new EntityTagHeaderValue(testcase.Item2);\n\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable<VersionType> table = service.GetTable<VersionType>();\n\n                VersionType item = new VersionType() { Id = \"an id\" };\n                await table.UpdateAsync(item);\n\n                Assert.AreEqual(item.Version, testcase.Item1);\n            }\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableToList()\n        {\n            return this.ValidateFeaturesHeader(\"TT\", true, t => t.ToListAsync());\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableReadViaQuery()\n        {\n            return this.ValidateFeaturesHeader(\"TT\", true, t => t.Where(s => s.String != null).ToListAsync());\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableLookup()\n        {\n            return this.ValidateFeaturesHeader(\"TT\", false, t => t.LookupAsync(\"id\"));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableRefresh()\n        {\n            var obj = new StringIdType { Id = \"the id\", String = \"hey\" };\n            return this.ValidateFeaturesHeader(\"TT\", false, t => t.RefreshAsync(obj));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableInsert()\n        {\n            var obj = new StringIdType { Id = \"the id\", String = \"hey\" };\n            return this.ValidateFeaturesHeader(\"TT\", false, t => t.InsertAsync(obj));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableUpdate()\n        {\n            var obj = new StringIdType { Id = \"the id\", String = \"hey\" };\n            return this.ValidateFeaturesHeader(\"TT\", false, t => t.UpdateAsync(obj));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableDelete()\n        {\n            var obj = new StringIdType { Id = \"the id\", String = \"hey\" };\n            return this.ValidateFeaturesHeader(\"TT\", false, t => t.DeleteAsync(obj));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableUntypedMethod()\n        {\n            var obj = JObject.Parse(\"{\\\"id\\\":\\\"the id\\\",\\\"String\\\":\\\"hey\\\"}\");\n            return this.ValidateFeaturesHeader(\"TU\", false, t => t.InsertAsync(obj));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableToEnumerableWithQuery()\n        {\n            return this.ValidateFeaturesHeader(\"TT,QS\", true, t => t.WithParameters(new Dictionary<string, string> { { \"a\", \"b\" } }).ToEnumerableAsync());\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableReadViaQueryWithQuery()\n        {\n            return this.ValidateFeaturesHeader(\"TT,QS\", true, t => t.Where(s => s.String != null).WithParameters(new Dictionary<string, string> { { \"a\", \"b\" } }).ToListAsync());\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableLookupWithQuery()\n        {\n            return this.ValidateFeaturesHeader(\"TT,QS\", false, t => t.LookupAsync(\"id\", new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableRefreshWithQuery()\n        {\n            var obj = new StringIdType { Id = \"the id\", String = \"hey\" };\n            return this.ValidateFeaturesHeader(\"TT,QS\", false, t => t.RefreshAsync(obj, new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableInsertWithQuery()\n        {\n            var obj = new StringIdType { Id = \"the id\", String = \"hey\" };\n            return this.ValidateFeaturesHeader(\"TT,QS\", false, t => t.InsertAsync(obj, new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableUpdateWithQuery()\n        {\n            var obj = new StringIdType { Id = \"the id\", String = \"hey\" };\n            return this.ValidateFeaturesHeader(\"TT,QS\", false, t => t.UpdateAsync(obj, new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableDeleteWithQuery()\n        {\n            var obj = new StringIdType { Id = \"the id\", String = \"hey\" };\n            return this.ValidateFeaturesHeader(\"TT,QS\", false, t => t.DeleteAsync(obj, new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableToCollection()\n        {\n            var obj = new StringIdType { Id = \"the id\", String = \"hey\" };\n            return this.ValidateFeaturesHeader(\"TT,TC\", true, t => t.ToCollectionAsync());\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_TypedTableViaQueryToCollection()\n        {\n            var obj = new StringIdType { Id = \"the id\", String = \"hey\" };\n            return this.ValidateFeaturesHeader(\"TT,TC\", true, t => t.Where(a => a.String != null).ToCollectionAsync());\n        }\n\n        private async Task ValidateFeaturesHeader(string expectedFeaturesHeader, bool arrayResponse, Func<IMobileServiceTable<StringIdType>, Task> operation)\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            bool validationDone = false;\n            hijack.OnSendingRequest = (request) =>\n            {\n                Assert.AreEqual(expectedFeaturesHeader, request.Headers.GetValues(\"X-ZUMO-FEATURES\").First());\n                validationDone = true;\n                return Task.FromResult(request);\n            };\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable<StringIdType> table = service.GetTable<StringIdType>();\n\n            var responseContent = \"{\\\"id\\\":\\\"the id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n            if (arrayResponse)\n            {\n                responseContent = \"[\" + responseContent + \"]\";\n            }\n\n            hijack.SetResponseContent(responseContent);\n            await operation(table);\n            Assert.IsTrue(validationDone);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Table/MobileServiceTable.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"unit\")]\n    [Tag(\"table\")]\n    public class MobileServiceTableTests : TestBase\n    {\n        [AsyncTestMethod]\n        public async Task ReadAsync_DoesNotwrapResult_WhenParameterIsFalse()\n        {\n            JToken result = await TestReadResponse(@\"[{\n                                            \"\"id\"\":\"\"abc\"\", \n                                            \"\"String\"\":\"\"Hey\"\"\n                                         }]\", null, wrapResult: false);\n            JToken[] items = result.ToArray();\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(\"abc\", (string)items[0][\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)items[0][\"String\"]);\n\n            result = await TestReadResponse(@\"{\n                                            \"\"id\"\":\"\"abc\"\", \n                                            \"\"String\"\":\"\"Hey\"\"\n                                         }\", null, wrapResult: false);\n\n            var item = result as JObject;\n            Assert.IsNotNull(item);\n            Assert.AreEqual(\"abc\", (string)item[\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n\n            result = await TestReadResponse(@\"{\n                                                \"\"count\"\": 53,\n                                                \"\"results\"\": [\n                                                {\n                                                    \"\"id\"\":\"\"abc\"\", \n                                                    \"\"String\"\":\"\"Hey\"\"\n                                                }]}\", \"http://contoso.com/tables/Todo?$top=1&$skip=2; rel=next\", wrapResult: false);\n\n            AssertResult(result, 53, null);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_FormatsResult_WhenParameterIsTrue()\n        {\n            JToken result = await TestReadResponse(@\"[{\n                                                \"\"id\"\":\"\"abc\"\", \n                                                \"\"String\"\":\"\"Hey\"\"\n                                                }]\",\n                                                   link: null,\n                                                   wrapResult: true);\n            AssertResult(result, -1, null);\n\n            result = await TestReadResponse(@\"{\n                                            \"\"id\"\":\"\"abc\"\", \n                                            \"\"String\"\":\"\"Hey\"\"\n                                            }\",\n                                              link: null,\n                                              wrapResult: true);\n\n            AssertResult(result, -1, null);\n\n\n            result = await TestReadResponse(@\"{\n                                                \"\"count\"\": 53,\n                                                \"\"results\"\": [\n                                                {\n                                                    \"\"id\"\":\"\"abc\"\", \n                                                    \"\"String\"\":\"\"Hey\"\"\n                                                }]}\",\n                                                    link: \"http://contoso.com/tables/Todo?$top=1&$skip=2; rel=next\",\n                                                    wrapResult: true);\n\n            AssertResult(result, 53, \"http://contoso.com/tables/Todo?$top=1&$skip=2\");\n        }\n\n        private static void AssertResult(JToken result, long count, string link)\n        {\n            var item = result as JObject;\n            Assert.IsNotNull(item);\n            Assert.AreEqual(count, item[\"count\"].Value<long>());\n            Assert.AreEqual(link, (string)item[\"nextLink\"]);\n            var items = result[\"results\"].ToArray();\n            Assert.AreEqual(\"abc\", (string)items[0][\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)items[0][\"String\"]);\n        }\n\n        private static async Task<JToken> TestReadResponse(string response, string link, bool wrapResult)\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(response);\n            if (!String.IsNullOrEmpty(link))\n            {\n                hijack.Responses[0].Headers.Add(\"Link\", link);\n            }\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n            JToken result = await table.ReadAsync(\"this is a query\", null, wrapResult);\n            return result;\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"[{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JToken results = await table.ReadAsync(\"\");\n                JToken[] items = results.ToArray();\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, (string)items[0][\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)items[0][\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithIntIdResponseContent()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                 IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                string stringTestId = testId.ToString();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JToken results = await table.ReadAsync(\"\");\n                JToken[] items = results.ToArray();\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, (long)items[0][\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)items[0][\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithNonStringAndNonIntIdResponseContent()\n        {\n            object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n            foreach (object testId in testIdData)\n            {\n                string stringTestId = testId.ToString().ToLower();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JToken results = await table.ReadAsync(\"\");\n                JToken[] items = results.ToArray();\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, items[0][\"id\"].ToObject(testId.GetType()));\n                Assert.AreEqual(\"Hey\", (string)items[0][\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JToken results = await table.ReadAsync(\"\");\n            JToken[] items = results.ToArray();\n            JObject item0 = items[0] as JObject;\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(null, (string)items[0][\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)items[0][\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"String\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JToken results = await table.ReadAsync(\"\");\n            JToken[] items = results.ToArray();\n            JObject item0 = items[0] as JObject;\n\n            Assert.AreEqual(1, items.Count());\n            Assert.IsFalse(item0.Properties().Any(p => p.Name.ToLowerInvariant() == \"id\"));\n            Assert.AreEqual(\"Hey\", (string)items[0][\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_WithAbsoluteUri()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"String\\\":\\\"Hey\\\"}]\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            await table.ReadAsync(\"http://www.test.com/about/?$filter=a eq b&$orderby=c\");\n\n            Assert.AreEqual(\"TU,LH\", hijack.Request.Headers.GetValues(\"X-ZUMO-FEATURES\").First());\n            Assert.AreEqual(\"http://www.test.com/about/?$filter=a eq b&$orderby=c\", hijack.Request.RequestUri.ToString());\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_WithRelativeUri()\n        {\n            var data = new[]\n            {\n                new \n                {\n                    ServiceUri = \"http://www.test.com\", \n                    QueryUri = \"/about?$filter=a eq b&$orderby=c\", \n                    RequestUri = \"http://www.test.com/about?$filter=a eq b&$orderby=c\"\n                },\n                new \n                {\n                    ServiceUri = \"http://www.test.com/\", \n                    QueryUri = \"/about?$filter=a eq b&$orderby=c\", \n                    RequestUri = \"http://www.test.com/about?$filter=a eq b&$orderby=c\"\n                }\n            };\n\n            foreach (var item in data)\n            {\n                var hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"[{\\\"String\\\":\\\"Hey\\\"}]\");\n                IMobileServiceClient service = new MobileServiceClient(item.ServiceUri, \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                await table.ReadAsync(item.QueryUri);\n\n                Assert.AreEqual(item.RequestUri, hijack.Request.RequestUri.ToString());\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithStringIdFilter()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"[{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\");\n\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                string idForOdataQuery = Uri.EscapeDataString(testId.Replace(\"'\", \"''\"));\n                JToken results = await table.ReadAsync(string.Format(\"$filter=id eq '{0}'\", idForOdataQuery));\n                JToken[] items = results.ToArray();\n                JObject item0 = items[0] as JObject;\n\n                Uri expectedUri = new Uri(string.Format(\"http://www.test.com/tables/someTable?$filter=id eq '{0}'\", idForOdataQuery));\n\n                Assert.AreEqual(1, items.Count());\n                Assert.AreEqual(testId, (string)items[0][\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)items[0][\"String\"]);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithNullIdFilter()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\");\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JToken results = await table.ReadAsync(\"$filter=id eq null\");\n            JToken[] items = results.ToArray();\n            JObject item0 = items[0] as JObject;\n\n            Uri expectedUri = new Uri(\"http://www.test.com/tables/someTable?$filter=id eq null\");\n\n            Assert.AreEqual(1, items.Count());\n            Assert.AreEqual(null, (string)items[0][\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)items[0][\"String\"]);\n            Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncWithUserParameters()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"Count\\\":1, People: [{\\\"Id\\\":\\\"12\\\", \\\"String\\\":\\\"Hey\\\"}] }\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            var userDefinedParameters = new Dictionary<string, string>() { { \"tags\", \"#pizza #beer\" } };\n\n            IMobileServiceTable table = service.GetTable(\"tests\");\n\n            JToken people = await table.ReadAsync(\"$filter=id eq 12\", userDefinedParameters);\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"tests\");\n            Assert.Contains(hijack.Request.RequestUri.AbsoluteUri, \"tags=%23pizza%20%23beer\");\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"$filter=id eq 12\");\n\n            Assert.AreEqual(1, (int)people[\"Count\"]);\n            Assert.AreEqual(12, (int)people[\"People\"][0][\"Id\"]);\n            Assert.AreEqual(\"Hey\", (string)people[\"People\"][0][\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsyncThrowsWithInvalidUserParameters()\n        {\n            var invalidUserDefinedParameters = new Dictionary<string, string>() { { \"$this is invalid\", \"since it starts with a '$'\" } };\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceTable table = service.GetTable(\"test\");\n            ArgumentException expected = null;\n\n            try\n            {\n                await table.ReadAsync(\"$filter=id eq 12\", invalidUserDefinedParameters);\n            }\n            catch (ArgumentException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject item = await table.LookupAsync(\"id\") as JObject;\n\n                Assert.AreEqual(testId, (string)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithIntIdResponseContent()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                 IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                string stringTestId = testId.ToString();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject item = await table.LookupAsync(\"id\") as JObject;\n\n                Assert.AreEqual(testId, (long)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithNonStringAndNonIntIdResponseContent()\n        {\n            object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n            foreach (object testId in testIdData)\n            {\n                string stringTestId = testId.ToString().ToLower();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject item = await table.LookupAsync(\"id\") as JObject;\n\n                object value = item[\"id\"].ToObject(testId.GetType());\n\n                Assert.AreEqual(testId, value);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JObject item = await table.LookupAsync(\"id\") as JObject;\n\n            Assert.AreEqual(null, (string)item[\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JObject item = await table.LookupAsync(\"id\") as JObject;\n\n            Assert.IsFalse(item.Properties().Any(p => p.Name.ToLowerInvariant() == \"id\"));\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithStringIdParameter()\n        {\n            string[] testIdData = IdTestData.ValidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JToken item = await table.LookupAsync(testId);\n\n                Uri expectedUri = new Uri(string.Format(\"http://www.test.com/tables/someTable/{0}\", Uri.EscapeDataString(testId)));\n\n                Assert.AreEqual(testId, (string)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithInvalidStringIdParameter()\n        {\n            string[] testIdData = IdTestData.EmptyStringIds.Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n                Exception exception = null;\n                try\n                {\n                    JToken item = await table.LookupAsync(testId);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"The id can not be null or an empty string.\") ||\n                              exception.Message.Contains(\"An id must not contain any control characters or the characters\") ||\n                              exception.Message.Contains(\"is longer than the max string id length of 255 characters\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithIntIdParameter()\n        {\n            long[] testIdData = IdTestData.ValidIntIds;\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId.ToString() + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JToken item = await table.LookupAsync(testId);\n\n                Uri expectedUri = new Uri(string.Format(\"http://www.test.com/tables/someTable/{0}\", testId));\n\n                Assert.AreEqual(testId, (long)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n                Assert.AreEqual(hijack.Request.RequestUri.AbsoluteUri, expectedUri.AbsoluteUri);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithNullIdParameter()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            Exception exception = null;\n            try\n            {\n                JToken item = await table.LookupAsync(null);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"The id can not be null or an empty string.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithZeroIdParameter()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            Exception exception = null;\n            try\n            {\n                JToken item = await table.LookupAsync(0L);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"Specified argument was out of the range of valid values\") ||\n                          exception.Message.Contains(\" is not a positive integer value\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncWithUserParameters()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"Count\\\":1, People: [{\\\"Id\\\":\\\"12\\\", \\\"String\\\":\\\"Hey\\\"}] }\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            var userDefinedParameters = new Dictionary<string, string>() { { \"tags\", \"#pizza #beer\" } };\n\n            IMobileServiceTable table = service.GetTable(\"tests\");\n\n            JToken people = await table.LookupAsync(\"id \", userDefinedParameters);\n\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"tests\");\n            Assert.Contains(hijack.Request.RequestUri.AbsoluteUri, \"tags=%23pizza%20%23beer\");\n\n            Assert.AreEqual(1, (int)people[\"Count\"]);\n            Assert.AreEqual(12, (int)people[\"People\"][0][\"Id\"]);\n            Assert.AreEqual(\"Hey\", (string)people[\"People\"][0][\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task LookupAsyncThrowsWithInvalidUserParameters()\n        {\n            var invalidUserDefinedParameters = new Dictionary<string, string>() { { \"$this is invalid\", \"since it starts with a '$'\" } };\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceTable table = service.GetTable(\"test\");\n            ArgumentException expected = null;\n\n            try\n            {\n                await table.LookupAsync(\"$filter=id eq 12\", invalidUserDefinedParameters);\n            }\n            catch (ArgumentException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"value\\\":\\\"new\\\"}\") as JObject;\n                JObject item = await table.InsertAsync(obj) as JObject;\n\n                Assert.AreEqual(testId, (string)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithIntIdResponseContent()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                 IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                string stringTestId = testId.ToString();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"value\\\":\\\"new\\\"}\") as JObject;\n                JObject item = await table.InsertAsync(obj) as JObject;\n\n                Assert.AreEqual(testId, (long)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithNonStringAndNonIntIdResponseContent()\n        {\n            object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n            foreach (object testId in testIdData)\n            {\n                string stringTestId = testId.ToString().ToLower();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"value\\\":\\\"new\\\"}\") as JObject;\n                JObject item = await table.InsertAsync(obj) as JObject;\n\n                object value = item[\"id\"].ToObject(testId.GetType());\n\n                Assert.AreEqual(testId, value);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JObject obj = JToken.Parse(\"{\\\"value\\\":\\\"new\\\"}\") as JObject;\n            JObject item = await table.InsertAsync(obj) as JObject;\n\n            Assert.AreEqual(null, (string)item[\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JObject obj = JToken.Parse(\"{\\\"value\\\":\\\"new\\\"}\") as JObject;\n            JObject item = await table.InsertAsync(obj) as JObject;\n\n            Assert.IsFalse(item.Properties().Any(p => p.Name.ToLowerInvariant() == \"id\"));\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringIdItem()\n        {\n            string[] testIdData = IdTestData.ValidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                JToken item = await table.InsertAsync(obj);\n\n                Assert.AreEqual(testId, (string)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithEmptyStringIdItem()\n        {\n            string[] testIdData = IdTestData.EmptyStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                JToken item = await table.InsertAsync(obj);\n\n                Assert.AreEqual(\"an id\", (string)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithInvalidStringIdItem()\n        {\n            string[] testIdData = IdTestData.InvalidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n                Exception exception = null;\n                try\n                {\n                    JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                    JToken item = await table.InsertAsync(obj);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"is longer than the max string id length of 255 characters\") ||\n                             exception.Message.Contains(\"An id must not contain any control characters or the characters\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithIntIdItem()\n        {\n            long[] testIdData = IdTestData.ValidIntIds;\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId.ToString() + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n                Exception exception = null;\n\n                try\n                {\n                    JObject obj = JToken.Parse(\"{\\\"id\\\":\" + testId.ToString() + \",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                    JToken item = await table.InsertAsync(obj);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"Cannot insert if the id member is already set.\") ||\n                              exception.Message.Contains(\"for member id is outside the valid range for numeric columns\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithNullIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":null,\\\"String\\\":\\\"what?\\\"}\") as JObject;\n            JToken item = await table.InsertAsync(obj);\n\n            Assert.AreEqual(5L, (long)item[\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithNoIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JObject obj = JToken.Parse(\"{\\\"String\\\":\\\"what?\\\"}\") as JObject;\n            JToken item = await table.InsertAsync(obj);\n\n            Assert.AreEqual(5L, (long)item[\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithZeroIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":0,\\\"String\\\":\\\"what?\\\"}\") as JObject;\n            JToken item = await table.InsertAsync(obj);\n\n            Assert.AreEqual(5L, (long)item[\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithUserParameters()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"AL\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"tests\");\n\n            JObject obj = JToken.Parse(\"{\\\"value\\\":\\\"new\\\"}\") as JObject;\n            hijack.SetResponseContent(\"{\\\"id\\\":12,\\\"value\\\":\\\"new\\\"}\");\n            JToken newObj = await table.InsertAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(12, (int)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"tests\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"state=AL\");\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncThrowsWhenIdIsID()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceTable table = service.GetTable(\"tests\");\n            ArgumentException expected = null;\n\n            JObject obj = JToken.Parse(\"{\\\"ID\\\":\\\"an id\\\"}\") as JObject;\n            try\n            {\n                await table.InsertAsync(obj);\n            }\n            catch (ArgumentException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n            Assert.IsTrue(expected.Message.Contains(\"The casing of the 'id' property is invalid.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncThrowsWhenIdIsId()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceTable table = service.GetTable(\"tests\");\n            ArgumentException expected = null;\n\n            JObject obj = JToken.Parse(\"{\\\"Id\\\":\\\"an id\\\"}\") as JObject;\n            try\n            {\n                await table.InsertAsync(obj);\n            }\n            catch (ArgumentException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n            Assert.IsTrue(expected.Message.Contains(\"The casing of the 'id' property is invalid.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncThrowsWhenIdIsiD()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceTable table = service.GetTable(\"tests\");\n            ArgumentException expected = null;\n\n            JObject obj = JToken.Parse(\"{\\\"iD\\\":\\\"an id\\\"}\") as JObject;\n            try\n            {\n                await table.InsertAsync(obj);\n            }\n            catch (ArgumentException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n            Assert.IsTrue(expected.Message.Contains(\"The casing of the 'id' property is invalid.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringId_StripsSystemProperties()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"AL\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"tests\");\n\n            JObject obj = JToken.Parse(\"{\\\"value\\\":\\\"new\\\"}\") as JObject;\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"A\\\",\\\"value\\\":\\\"new\\\", \\\"__version\\\":\\\"XYZ\\\",\\\"__unknown\\\":12,\\\"__CREATEDat\\\":\\\"12-02-02\\\"}\");\n            JToken newObj = await table.InsertAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(\"A\", (string)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.IsNull(newObj[\"__version\"]);\n            Assert.IsNull(newObj[\"__unknown\"]);\n            Assert.IsNull(newObj[\"__CREATEDat\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithStringId_KeepsSystemProperties()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"__systemproperties\", \"__createdAt\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"tests\");\n            table.SystemProperties = MobileServiceSystemProperties.CreatedAt;\n\n            JObject obj = JToken.Parse(\"{\\\"value\\\":\\\"new\\\"}\") as JObject;\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"A\\\",\\\"value\\\":\\\"new\\\", \\\"__version\\\":\\\"XYZ\\\",\\\"__unknown\\\":12,\\\"__CREATEDat\\\":\\\"12-02-02\\\"}\");\n            JToken newObj = await table.InsertAsync(obj);\n\n            Assert.AreEqual(\"A\", (string)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.IsNull(newObj[\"__version\"]);\n            Assert.IsNull(newObj[\"__unknown\"]);\n            Assert.IsNotNull(newObj[\"__CREATEDat\"]);\n\n            table.SystemProperties = MobileServiceSystemProperties.None;\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"A\\\",\\\"value\\\":\\\"new\\\", \\\"__version\\\":\\\"XYZ\\\",\\\"__unknown\\\":12,\\\"__CREATEDat\\\":\\\"12-02-02\\\"}\");\n            newObj = await table.InsertAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(\"A\", (string)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.IsNull(newObj[\"__version\"]);\n            Assert.IsNull(newObj[\"__unknown\"]);\n            Assert.IsNotNull(newObj[\"__CREATEDat\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncWithIntId_DoesNotStripSystemProperties()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"AL\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"tests\");\n\n            JObject obj = JToken.Parse(\"{\\\"value\\\":\\\"new\\\"}\") as JObject;\n            hijack.SetResponseContent(\"{\\\"id\\\":12,\\\"value\\\":\\\"new\\\", \\\"__version\\\":\\\"XYZ\\\",\\\"__unknown\\\":12,\\\"__CREATEDat\\\":\\\"12-02-02\\\"}\");\n            JToken newObj = await table.InsertAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(12, (int)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.IsNotNull(newObj[\"__version\"]);\n            Assert.IsNotNull(newObj[\"__unknown\"]);\n            Assert.IsNotNull(newObj[\"__CREATEDat\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\") as JObject;\n                JObject item = await table.UpdateAsync(obj) as JObject;\n\n                Assert.AreEqual(testId, (string)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithIntIdResponseContent()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                 IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                string stringTestId = testId.ToString();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\") as JObject;\n                JObject item = await table.UpdateAsync(obj) as JObject;\n\n                Assert.AreEqual(testId, (long)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithNonStringAndNonIntIdResponseContent()\n        {\n            object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n            foreach (object testId in testIdData)\n            {\n                string stringTestId = testId.ToString().ToLower();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\") as JObject;\n                JObject item = await table.UpdateAsync(obj) as JObject;\n\n                object value = item[\"id\"].ToObject(testId.GetType());\n\n                Assert.AreEqual(testId, value);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\") as JObject;\n            JObject item = await table.UpdateAsync(obj) as JObject;\n\n            Assert.AreEqual(null, (string)item[\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\") as JObject;\n            JObject item = await table.UpdateAsync(obj) as JObject;\n\n            Assert.IsFalse(item.Properties().Any(p => p.Name.ToLowerInvariant() == \"id\"));\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithStringIdItem()\n        {\n            string[] testIdData = IdTestData.ValidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                JToken item = await table.UpdateAsync(obj);\n\n                Assert.AreEqual(testId, (string)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithEmptyStringIdItem()\n        {\n            string[] testIdData = IdTestData.EmptyStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n                Exception exception = null;\n                try\n                {\n                    JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                    JToken item = await table.UpdateAsync(obj);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"The id can not be null or an empty string.\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithInvalidStringIdItem()\n        {\n            string[] testIdData = IdTestData.InvalidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n                Exception exception = null;\n                try\n                {\n                    JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                    JToken item = await table.UpdateAsync(obj);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"is longer than the max string id length of 255 characters\") ||\n                              exception.Message.Contains(\"An id must not contain any control characters or the characters\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithIntIdItem()\n        {\n            long[] testIdData = IdTestData.ValidIntIds;\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId.ToString() + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n                JObject obj = JToken.Parse(\"{\\\"id\\\":\" + testId.ToString() + \",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                JToken item = await table.UpdateAsync(obj);\n\n                Assert.AreEqual(testId, (long)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithNullIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n            Exception exception = null;\n            try\n            {\n                JObject obj = JToken.Parse(\"{\\\"id\\\":null,\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                JToken item = await table.UpdateAsync(obj);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"The id can not be null or an empty string\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithNoIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n            Exception exception = null;\n            try\n            {\n                JObject obj = JToken.Parse(\"{\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                JToken item = await table.UpdateAsync(obj);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"Expected id member not found.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithZeroIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n            Exception exception = null;\n            try\n            {\n                JObject obj = JToken.Parse(\"{\\\"id\\\":0,\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                JToken item = await table.UpdateAsync(obj);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"The integer id '0' is not a positive integer value.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithUserParameters()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"FL\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"tests\");\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":12,\\\"value\\\":\\\"new\\\"}\") as JObject;\n            hijack.SetResponseContent(\"{\\\"id\\\":12,\\\"value\\\":\\\"new\\\",\\\"other\\\":\\\"123\\\"}\");\n            JToken newObj = await table.UpdateAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(\"123\", (string)newObj[\"other\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"tests/12\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"state=FL\");\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncThrowsWhenIdIsID()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceTable table = service.GetTable(\"tests\");\n            ArgumentException expected = null;\n\n            JObject obj = JToken.Parse(\"{\\\"ID\\\":5}\") as JObject;\n            try\n            {\n                await table.UpdateAsync(obj);\n            }\n            catch (ArgumentException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n            Assert.IsTrue(expected.Message.Contains(\"The casing of the 'id' property is invalid.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncThrowsWhenIdIsId()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceTable table = service.GetTable(\"tests\");\n            ArgumentException expected = null;\n\n            JObject obj = JToken.Parse(\"{\\\"Id\\\":5}\") as JObject;\n            try\n            {\n                await table.UpdateAsync(obj);\n            }\n            catch (ArgumentException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n            Assert.IsTrue(expected.Message.Contains(\"The casing of the 'id' property is invalid.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncThrowsWhenIdIsiD()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceTable table = service.GetTable(\"tests\");\n            ArgumentException expected = null;\n\n            JObject obj = JToken.Parse(\"{\\\"iD\\\":5}\") as JObject;\n            try\n            {\n                await table.UpdateAsync(obj);\n            }\n            catch (ArgumentException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n            Assert.IsTrue(expected.Message.Contains(\"The casing of the 'id' property is invalid.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithStringId_StripsSystemProperties()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"AL\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"tests\");\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"A\\\", \\\"value\\\":\\\"new\\\"}\") as JObject;\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"A\\\",\\\"value\\\":\\\"new\\\", \\\"__version\\\":\\\"XYZ\\\",\\\"__unknown\\\":12,\\\"__CREATEDat\\\":\\\"12-02-02\\\"}\");\n\n            JToken newObj = await table.UpdateAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(\"A\", (string)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.IsNull(newObj[\"__version\"]);\n            Assert.IsNull(newObj[\"__unknown\"]);\n            Assert.IsNull(newObj[\"__CREATEDat\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithStringId_KeepsSystemProperties()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"__systemproperties\", \"__createdAt\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"tests\");\n            table.SystemProperties = MobileServiceSystemProperties.CreatedAt;\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"A\\\",\\\"value\\\":\\\"new\\\"}\") as JObject;\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"A\\\",\\\"value\\\":\\\"new\\\", \\\"__version\\\":\\\"XYZ\\\",\\\"__unknown\\\":12,\\\"__CREATEDat\\\":\\\"12-02-02\\\"}\");\n            JToken newObj = await table.UpdateAsync(obj);\n\n            Assert.AreEqual(\"A\", (string)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.IsNull(newObj[\"__version\"]);\n            Assert.IsNull(newObj[\"__unknown\"]);\n            Assert.IsNotNull(newObj[\"__CREATEDat\"]);\n\n            table.SystemProperties = MobileServiceSystemProperties.None;\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"A\\\",\\\"value\\\":\\\"new\\\", \\\"__version\\\":\\\"XYZ\\\",\\\"__unknown\\\":12,\\\"__CREATEDat\\\":\\\"12-02-02\\\"}\");\n            newObj = await table.UpdateAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(\"A\", (string)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.IsNull(newObj[\"__version\"]);\n            Assert.IsNull(newObj[\"__unknown\"]);\n            Assert.IsNotNull(newObj[\"__CREATEDat\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncWithIntId_DoesNotStripSystemProperties()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"AL\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"tests\");\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":12,\\\"value\\\":\\\"new\\\"}\") as JObject;\n            hijack.SetResponseContent(\"{\\\"id\\\":12,\\\"value\\\":\\\"new\\\", \\\"__version\\\":\\\"XYZ\\\",\\\"__unknown\\\":12,\\\"__CREATEDat\\\":\\\"12-02-02\\\"}\");\n            JToken newObj = await table.UpdateAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(12, (int)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.IsNotNull(newObj[\"__version\"]);\n            Assert.IsNotNull(newObj[\"__unknown\"]);\n            Assert.IsNotNull(newObj[\"__CREATEDat\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithStringIdResponseContent()\n        {\n            string[] testIdData = IdTestData.ValidStringIds.Concat(\n                                  IdTestData.EmptyStringIds).Concat(\n                                  IdTestData.InvalidStringIds).ToArray();\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\") as JObject;\n                JObject item = await table.DeleteAsync(obj) as JObject;\n\n                Assert.AreEqual(testId, (string)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithIntIdResponseContent()\n        {\n            long[] testIdData = IdTestData.ValidIntIds.Concat(\n                                 IdTestData.InvalidIntIds).ToArray();\n\n            foreach (long testId in testIdData)\n            {\n                string stringTestId = testId.ToString();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\") as JObject;\n                JObject item = await table.DeleteAsync(obj) as JObject;\n\n                Assert.AreEqual(testId, (long)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithNonStringAndNonIntIdResponseContent()\n        {\n            object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n            foreach (object testId in testIdData)\n            {\n                string stringTestId = testId.ToString().ToLower();\n\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\") as JObject;\n                JObject item = await table.DeleteAsync(obj) as JObject;\n\n                object value = item[\"id\"].ToObject(testId.GetType());\n\n                Assert.AreEqual(testId, value);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithNullIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\") as JObject;\n            JObject item = await table.DeleteAsync(obj) as JObject;\n\n            Assert.AreEqual(null, (string)item[\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithNoIdResponseContent()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\") as JObject;\n            JObject item = await table.DeleteAsync(obj) as JObject;\n\n            Assert.IsFalse(item.Properties().Any(p => p.Name.ToLowerInvariant() == \"id\"));\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithStringIdItem()\n        {\n            string[] testIdData = IdTestData.ValidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                JToken item = await table.DeleteAsync(obj);\n\n                Assert.AreEqual(testId, (string)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithEmptyStringIdItem()\n        {\n            string[] testIdData = IdTestData.EmptyStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n                Exception exception = null;\n                try\n                {\n                    JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                    JToken item = await table.DeleteAsync(obj);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"The id can not be null or an empty string.\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithInvalidStringIdItem()\n        {\n            string[] testIdData = IdTestData.InvalidStringIds;\n\n            foreach (string testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n\n                // Make the testId JSON safe\n                string jsonTestId = testId.Replace(\"\\\\\", \"\\\\\\\\\").Replace(\"\\\"\", \"\\\\\\\"\");\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n                Exception exception = null;\n                try\n                {\n                    JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                    JToken item = await table.DeleteAsync(obj);\n                }\n                catch (Exception e)\n                {\n                    exception = e;\n                }\n\n                Assert.IsNotNull(exception);\n                Assert.IsTrue(exception.Message.Contains(\"is longer than the max string id length of 255 characters\") ||\n                              exception.Message.Contains(\"An id must not contain any control characters or the characters\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithIntIdItem()\n        {\n            long[] testIdData = IdTestData.ValidIntIds;\n\n            foreach (long testId in testIdData)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\" + testId.ToString() + \",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n                JObject obj = JToken.Parse(\"{\\\"id\\\":\" + testId.ToString() + \",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                JToken item = await table.DeleteAsync(obj);\n\n                Assert.AreEqual(testId, (long)item[\"id\"]);\n                Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithNullIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n            Exception exception = null;\n            try\n            {\n                JObject obj = JToken.Parse(\"{\\\"id\\\":null,\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                JToken item = await table.DeleteAsync(obj);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"The id can not be null or an empty string.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithNoIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n            Exception exception = null;\n            try\n            {\n                JObject obj = JToken.Parse(\"{\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                JToken item = await table.DeleteAsync(obj);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"Expected id member not found.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithZeroIdItem()\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n            Exception exception = null;\n            try\n            {\n                JObject obj = JToken.Parse(\"{\\\"id\\\":0,\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                JToken item = await table.DeleteAsync(obj);\n            }\n            catch (Exception e)\n            {\n                exception = e;\n            }\n\n            Assert.IsNotNull(exception);\n            Assert.IsTrue(exception.Message.Contains(\"The integer id '0' is not a positive integer value\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithUserParameters()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"FL\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"tests\");\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":12,\\\"value\\\":\\\"new\\\"}\") as JObject;\n            hijack.SetResponseContent(\"{\\\"id\\\":12,\\\"value\\\":\\\"new\\\",\\\"other\\\":\\\"123\\\"}\");\n            JToken newObj = await table.DeleteAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(\"123\", (string)newObj[\"other\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.Contains(hijack.Request.RequestUri.ToString(), \"tests/12\");\n            Assert.Contains(hijack.Request.RequestUri.Query, \"state=FL\");\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncThrowsWhenIdIsID()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceTable table = service.GetTable(\"tests\");\n            ArgumentException expected = null;\n\n            JObject obj = JToken.Parse(\"{\\\"ID\\\":5}\") as JObject;\n            try\n            {\n                await table.DeleteAsync(obj);\n            }\n            catch (ArgumentException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n            Assert.IsTrue(expected.Message.Contains(\"The casing of the 'id' property is invalid.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncThrowsWhenIdIsId()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceTable table = service.GetTable(\"tests\");\n            ArgumentException expected = null;\n\n            JObject obj = JToken.Parse(\"{\\\"Id\\\":5}\") as JObject;\n            try\n            {\n                await table.DeleteAsync(obj);\n            }\n            catch (ArgumentException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n            Assert.IsTrue(expected.Message.Contains(\"The casing of the 'id' property is invalid.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncThrowsWhenIdIsiD()\n        {\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            IMobileServiceTable table = service.GetTable(\"tests\");\n            ArgumentException expected = null;\n\n            JObject obj = JToken.Parse(\"{\\\"iD\\\":5}\") as JObject;\n            try\n            {\n                await table.DeleteAsync(obj);\n            }\n            catch (ArgumentException e)\n            {\n                expected = e;\n            }\n\n            Assert.IsNotNull(expected);\n            Assert.IsTrue(expected.Message.Contains(\"The casing of the 'id' property is invalid.\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task UndeleteAsync()\n        {\n            await TestUndeleteAsync(\"\", null);\n        }\n\n        [AsyncTestMethod]\n        public async Task UndeleteAsyncWithParameters()\n        {\n            await TestUndeleteAsync(\"?custom=value\", new Dictionary<string, string>() { { \"custom\", \"value\" } });\n        }\n\n        private static async Task TestUndeleteAsync(string query, IDictionary<string, string> parameters)\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            hijack.OnSendingRequest = req =>\n            {\n                Assert.AreEqual(req.RequestUri.Query, query);\n                Assert.AreEqual(req.Method, HttpMethod.Post);\n\n                // only id and version should be sent\n                Assert.IsNull(req.Content);\n                Assert.AreEqual(req.Headers.IfMatch.First().Tag, \"\\\"abc\\\"\");\n                return Task.FromResult(req);\n            };\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            var obj = JToken.Parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\", \\\"blah\\\":\\\"doh\\\", \\\"__version\\\": \\\"abc\\\"}\") as JObject;\n            JObject item = await table.UndeleteAsync(obj, parameters) as JObject;\n\n            Assert.AreEqual(\"an id\", (string)item[\"id\"]);\n            Assert.AreEqual(\"Hey\", (string)item[\"String\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithStringId_StripsSystemProperties()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"AL\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"tests\");\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"A\\\", \\\"value\\\":\\\"new\\\"}\") as JObject;\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"A\\\",\\\"value\\\":\\\"new\\\", \\\"__version\\\":\\\"XYZ\\\",\\\"__unknown\\\":12,\\\"__CREATEDat\\\":\\\"12-02-02\\\"}\");\n\n            JToken newObj = await table.DeleteAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(\"A\", (string)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.IsNull(newObj[\"__version\"]);\n            Assert.IsNull(newObj[\"__unknown\"]);\n            Assert.IsNull(newObj[\"__CREATEDat\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithStringId_KeepsSystemProperties()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"__systemproperties\", \"__createdAt\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"tests\");\n            table.SystemProperties = MobileServiceSystemProperties.CreatedAt;\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":\\\"A\\\",\\\"value\\\":\\\"new\\\"}\") as JObject;\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"A\\\",\\\"value\\\":\\\"new\\\", \\\"__version\\\":\\\"XYZ\\\",\\\"__unknown\\\":12,\\\"__CREATEDat\\\":\\\"12-02-02\\\"}\");\n            JToken newObj = await table.DeleteAsync(obj);\n\n            Assert.AreEqual(\"A\", (string)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.IsNull(newObj[\"__version\"]);\n            Assert.IsNull(newObj[\"__unknown\"]);\n            Assert.IsNotNull(newObj[\"__CREATEDat\"]);\n\n            table.SystemProperties = MobileServiceSystemProperties.None;\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"A\\\",\\\"value\\\":\\\"new\\\", \\\"__version\\\":\\\"XYZ\\\",\\\"__unknown\\\":12,\\\"__CREATEDat\\\":\\\"12-02-02\\\"}\");\n            newObj = await table.DeleteAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(\"A\", (string)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.IsNull(newObj[\"__version\"]);\n            Assert.IsNull(newObj[\"__unknown\"]);\n            Assert.IsNotNull(newObj[\"__CREATEDat\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsyncWithIntId_DoesNotStripSystemProperties()\n        {\n            var userDefinedParameters = new Dictionary<string, string>() { { \"state\", \"AL\" } };\n\n            TestHttpHandler hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"tests\");\n\n            JObject obj = JToken.Parse(\"{\\\"id\\\":12,\\\"value\\\":\\\"new\\\"}\") as JObject;\n            hijack.SetResponseContent(\"{\\\"id\\\":12,\\\"value\\\":\\\"new\\\", \\\"__version\\\":\\\"XYZ\\\",\\\"__unknown\\\":12,\\\"__CREATEDat\\\":\\\"12-02-02\\\"}\");\n            JToken newObj = await table.DeleteAsync(obj, userDefinedParameters);\n\n            Assert.AreEqual(12, (int)newObj[\"id\"]);\n            Assert.AreNotEqual(newObj, obj);\n            Assert.IsNotNull(newObj[\"__version\"]);\n            Assert.IsNotNull(newObj[\"__unknown\"]);\n            Assert.IsNotNull(newObj[\"__CREATEDat\"]);\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsync_RemovesSystemProperties_WhenIdIsString_Generic()\n        {\n            string[] testSystemProperties = SystemPropertiesTestData.ValidSystemProperties;\n\n            foreach (string testSystemProperty in testSystemProperties)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                var service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n                hijack.OnSendingRequest = async (request) =>\n                {\n                    string content = await request.Content.ReadAsStringAsync();\n                    JObject obj = JToken.Parse(content) as JObject;\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"String\").Any());\n                    Assert.IsFalse(obj.Properties().Where(p => p.Name == testSystemProperty).Any());\n                    return request;\n                };\n                var table = service.GetTable<ToDoWithSystemPropertiesType>();\n\n                JObject itemToInsert = JToken.Parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what?\\\",\\\"\" + testSystemProperty + \"\\\":\\\"a value\\\"}\") as JObject;\n                var typedItemToInsert = itemToInsert.ToObject<ToDoWithSystemPropertiesType>();\n                await table.InsertAsync(typedItemToInsert);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsync_DoesNotRemoveSystemProperties_WhenIdIsString()\n        {\n            await InsertAsync_DoesNotRemoveSystemPropertiesTest(client => client.GetTable(\"some\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsync_JToken_DoesNotRemoveSystemProperties_WhenIdIsString_Generic()\n        {\n            await InsertAsync_DoesNotRemoveSystemPropertiesTest(client => client.GetTable<ToDoWithSystemPropertiesType>());\n        }\n\n        private static async Task InsertAsync_DoesNotRemoveSystemPropertiesTest(Func<IMobileServiceClient, IMobileServiceTable> getTable)\n        {\n            string[] testSystemProperties = SystemPropertiesTestData.ValidSystemProperties;\n\n            foreach (string testSystemProperty in testSystemProperties)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n                IMobileServiceTable table = getTable(service);\n                hijack.OnSendingRequest = async (request) =>\n                {\n                    string content = await request.Content.ReadAsStringAsync();\n                    JObject obj = JToken.Parse(content) as JObject;\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"String\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == testSystemProperty).Any());\n                    return request;\n                };\n\n                JObject itemToInsert = JToken.Parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what?\\\",\\\"\" + testSystemProperty + \"\\\":\\\"a value\\\"}\") as JObject;\n                await table.InsertAsync(itemToInsert);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncStringIdNonSystemPropertiesNotRemovedFromRequest()\n        {\n            string[] testSystemProperties = SystemPropertiesTestData.NonSystemProperties;\n\n            foreach (string testSystemProperty in testSystemProperties)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\",\\\"\" + testSystemProperty + \"\\\":\\\"a value\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                hijack.OnSendingRequest = async (request) =>\n                {\n                    string content = await request.Content.ReadAsStringAsync();\n                    JObject obj = JToken.Parse(content) as JObject;\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"String\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == testSystemProperty).Any());\n                    return request;\n                };\n\n                JObject itemToInsert = JToken.Parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what?\\\",\\\"\" + testSystemProperty + \"\\\":\\\"a value\\\"}\") as JObject;\n                await table.InsertAsync(itemToInsert);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsync_DoesNotRemoveSystemProperties_WhenIdIsNull()\n        {\n            string[] testSystemProperties = SystemPropertiesTestData.ValidSystemProperties;\n\n            foreach (string testSystemProperty in testSystemProperties)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                hijack.OnSendingRequest = async (request) =>\n                {\n                    string content = await request.Content.ReadAsStringAsync();\n                    JObject obj = JToken.Parse(content) as JObject;\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"String\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == testSystemProperty).Any());\n                    return request;\n                };\n\n                JObject itemToInsert = JToken.Parse(\"{\\\"id\\\":null,\\\"String\\\":\\\"what?\\\",\\\"\" + testSystemProperty + \"\\\":\\\"a value\\\"}\") as JObject;\n                await table.InsertAsync(itemToInsert);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task InsertAsyncNullIdNonSystemPropertiesNotRemovedFromRequest()\n        {\n            string[] testSystemProperties = SystemPropertiesTestData.NonSystemProperties;\n\n            foreach (string testSystemProperty in testSystemProperties)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\",\\\"\" + testSystemProperty + \"\\\":\\\"a value\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                hijack.OnSendingRequest = async (request) =>\n                {\n                    string content = await request.Content.ReadAsStringAsync();\n                    JObject obj = JToken.Parse(content) as JObject;\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"String\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == testSystemProperty).Any());\n                    return request;\n                };\n\n                JObject itemToInsert = JToken.Parse(\"{\\\"id\\\":null,\\\"String\\\":\\\"what?\\\",\\\"\" + testSystemProperty + \"\\\":\\\"a value\\\"}\") as JObject;\n                await table.InsertAsync(itemToInsert);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncStringIdSystemPropertiesRemovedFromRequest()\n        {\n            string[] testSystemProperties = SystemPropertiesTestData.ValidSystemProperties;\n\n            foreach (string testSystemProperty in testSystemProperties)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                hijack.OnSendingRequest = async (request) =>\n                {\n                    string content = await request.Content.ReadAsStringAsync();\n                    JObject obj = JToken.Parse(content) as JObject;\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"String\").Any());\n                    Assert.IsFalse(obj.Properties().Where(p => p.Name == testSystemProperty).Any());\n                    return request;\n                };\n\n                JObject itemToUpdate = JToken.Parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what?\\\",\\\"\" + testSystemProperty + \"\\\":\\\"a value\\\"}\") as JObject;\n                await table.UpdateAsync(itemToUpdate);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncStringIdNonSystemPropertiesNotRemovedFromRequest()\n        {\n            string[] testSystemProperties = SystemPropertiesTestData.NonSystemProperties;\n\n            foreach (string testSystemProperty in testSystemProperties)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\",\\\"\" + testSystemProperty + \"\\\":\\\"a value\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                hijack.OnSendingRequest = async (request) =>\n                {\n                    string content = await request.Content.ReadAsStringAsync();\n                    JObject obj = JToken.Parse(content) as JObject;\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"String\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == testSystemProperty).Any());\n                    return request;\n                };\n\n                JObject itemToUpdate = JToken.Parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what?\\\",\\\"\" + testSystemProperty + \"\\\":\\\"a value\\\"}\") as JObject;\n                await table.UpdateAsync(itemToUpdate);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsyncIntegerIdNoPropertiesRemovedFromRequest()\n        {\n            string[] testSystemProperties = SystemPropertiesTestData.NonSystemProperties.Concat(\n                                            SystemPropertiesTestData.ValidSystemProperties).ToArray();\n\n            foreach (string testSystemProperty in testSystemProperties)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\",\\\"\" + testSystemProperty + \"\\\":\\\"a value\\\"}\");\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n\n                hijack.OnSendingRequest = async (request) =>\n                {\n                    string content = await request.Content.ReadAsStringAsync();\n                    JObject obj = JToken.Parse(content) as JObject;\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"id\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == \"String\").Any());\n                    Assert.IsTrue(obj.Properties().Where(p => p.Name == testSystemProperty).Any());\n                    return request;\n                };\n\n                JObject itemToUpdate = JToken.Parse(\"{\\\"id\\\":5,\\\"String\\\":\\\"what?\\\",\\\"\" + testSystemProperty + \"\\\":\\\"a value\\\"}\") as JObject;\n                await table.UpdateAsync(itemToUpdate);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task TableOperationSystemPropertiesQueryStringIsCorrect()\n        {\n            MobileServiceSystemProperties[] testSystemProperties = SystemPropertiesTestData.SystemProperties;\n\n            Action<MobileServiceSystemProperties, string> ValidateUri = (testSystemProperty, requestUri) =>\n            {\n                if (testSystemProperty != MobileServiceSystemProperties.None)\n                {\n                    Assert.IsTrue(requestUri.Contains(\"__systemproperties\"));\n                }\n                else\n                {\n                    Assert.IsFalse(requestUri.Contains(\"__systemproperties\"));\n                }\n\n                if (testSystemProperty == MobileServiceSystemProperties.All)\n                {\n                    Assert.IsTrue(requestUri.Contains(\"__systemproperties=*\"));\n                }\n                else if ((testSystemProperty & MobileServiceSystemProperties.CreatedAt) == MobileServiceSystemProperties.CreatedAt)\n                {\n                    Assert.IsTrue(requestUri.Contains(\"__createdAt\"));\n                }\n                else if ((testSystemProperty & MobileServiceSystemProperties.UpdatedAt) == MobileServiceSystemProperties.UpdatedAt)\n                {\n                    Assert.IsTrue(requestUri.Contains(\"__updatedAt\"));\n                }\n                else if ((testSystemProperty & MobileServiceSystemProperties.Version) == MobileServiceSystemProperties.Version)\n                {\n                    Assert.IsTrue(requestUri.Contains(\"__version\"));\n                }\n                else if ((testSystemProperty & MobileServiceSystemProperties.Deleted) == MobileServiceSystemProperties.Deleted)\n                {\n                    Assert.IsTrue(requestUri.Contains(\"__deleted\"));\n                }\n            };\n\n            foreach (MobileServiceSystemProperties testSystemProperty in testSystemProperties)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n                table.SystemProperties = testSystemProperty;\n\n                // string id\n                JObject item = JToken.Parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                await table.InsertAsync(item);\n                ValidateUri(testSystemProperty, hijack.Request.RequestUri.ToString());\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                await table.UpdateAsync(item);\n                ValidateUri(testSystemProperty, hijack.Request.RequestUri.ToString());\n\n                hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n                await table.LookupAsync(\"an id\");\n                ValidateUri(testSystemProperty, hijack.Request.RequestUri.ToString());\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                await table.DeleteAsync(item);\n                ValidateUri(testSystemProperty, hijack.Request.RequestUri.ToString());\n\n                // int id\n                hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n                item = JToken.Parse(\"{\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                await table.InsertAsync(item);\n                ValidateUri(testSystemProperty, hijack.Request.RequestUri.ToString());\n\n                hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n                item = JToken.Parse(\"{\\\"id\\\":5,\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                await table.UpdateAsync(item);\n                ValidateUri(testSystemProperty, hijack.Request.RequestUri.ToString());\n\n                hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n                await table.LookupAsync(5);\n                ValidateUri(testSystemProperty, hijack.Request.RequestUri.ToString());\n\n                hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n                await table.DeleteAsync(item);\n                ValidateUri(testSystemProperty, hijack.Request.RequestUri.ToString());\n\n                // query\n                hijack.SetResponseContent(\"[{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}]\");\n                await table.ReadAsync(\"$filter=id eq 5\");\n                ValidateUri(testSystemProperty, hijack.Request.RequestUri.ToString());\n\n                hijack.SetResponseContent(\"[{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}]\");\n                await table.ReadAsync(\"$select=id,String\");\n                ValidateUri(testSystemProperty, hijack.Request.RequestUri.ToString());\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task TableOperationUserParameterWithsystemPropertyQueryStringIsCorrect()\n        {\n            MobileServiceSystemProperties[] testSystemProperties = SystemPropertiesTestData.SystemProperties;\n\n\n            foreach (MobileServiceSystemProperties testSystemProperty in testSystemProperties)\n            {\n                TestHttpHandler hijack = new TestHttpHandler();\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n                IMobileServiceTable table = service.GetTable(\"someTable\");\n                table.SystemProperties = testSystemProperty;\n\n                // string id\n                JObject item = JToken.Parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                await table.InsertAsync(item, new Dictionary<string, string>() { { \"__systemproperties\", \"__createdAt\" } });\n                Assert.IsTrue(hijack.Request.RequestUri.ToString().Contains(\"__systemproperties=__createdAt\"));\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                await table.UpdateAsync(item, new Dictionary<string, string>() { { \"__systemproperties\", \"createdAt\" } });\n                Assert.IsTrue(hijack.Request.RequestUri.ToString().Contains(\"__systemproperties=createdAt\"));\n\n                hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n                await table.LookupAsync(\"an id\", new Dictionary<string, string>() { { \"__systemproperties\", \"CreatedAt\" } });\n                Assert.IsTrue(hijack.Request.RequestUri.ToString().Contains(\"__systemproperties=CreatedAt\"));\n\n                hijack.SetResponseContent(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\");\n                await table.DeleteAsync(item, new Dictionary<string, string>() { { \"__systemproperties\", \"unknown\" } });\n                Assert.IsTrue(hijack.Request.RequestUri.ToString().Contains(\"__systemproperties=unknown\"));\n\n                // int id\n                hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n                item = JToken.Parse(\"{\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                await table.InsertAsync(item, new Dictionary<string, string>() { { \"__systemproperties\", \"__createdAt\" } });\n                Assert.IsTrue(hijack.Request.RequestUri.ToString().Contains(\"__systemproperties=__createdAt\"));\n\n                hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n                item = JToken.Parse(\"{\\\"id\\\":5,\\\"String\\\":\\\"what?\\\"}\") as JObject;\n                await table.UpdateAsync(item, new Dictionary<string, string>() { { \"__systemproperties\", \"__createdAt\" } });\n                Assert.IsTrue(hijack.Request.RequestUri.ToString().Contains(\"__systemproperties=__createdAt\"));\n\n                hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n                await table.LookupAsync(5, new Dictionary<string, string>() { { \"__systemproperties\", \"__createdAt\" } });\n                Assert.IsTrue(hijack.Request.RequestUri.ToString().Contains(\"__systemproperties=__createdAt\"));\n\n                hijack.SetResponseContent(\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\");\n                await table.DeleteAsync(item, new Dictionary<string, string>() { { \"__systemproperties\", \"__createdAt\" } });\n                Assert.IsTrue(hijack.Request.RequestUri.ToString().Contains(\"__systemproperties=__createdAt\"));\n\n                // query\n                hijack.SetResponseContent(\"[{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}]\");\n                await table.ReadAsync(\"$filter=id eq 5\", new Dictionary<string, string>() { { \"__systemproperties\", \"__createdAt\" } });\n                Assert.IsTrue(hijack.Request.RequestUri.ToString().Contains(\"__systemproperties=__createdAt\"));\n\n                hijack.SetResponseContent(\"[{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}]\");\n                await table.ReadAsync(\"$select=id,String\", new Dictionary<string, string>() { { \"__systemproperties\", \"__createdAt\" } });\n                Assert.IsTrue(hijack.Request.RequestUri.ToString().Contains(\"__systemproperties=__createdAt\"));\n            }\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_UntypedTableRead()\n        {\n            return this.ValidateFeaturesHeader(\"TU\", true, t => t.ReadAsync(\"\"));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_UntypedTableLookup()\n        {\n            return this.ValidateFeaturesHeader(\"TU\", false, t => t.LookupAsync(\"id\"));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_UntypedTableInsert()\n        {\n            JObject obj = JObject.Parse(\"{\\\"id\\\":\\\"the id\\\",\\\"value\\\":\\\"new\\\"}\");\n            return this.ValidateFeaturesHeader(\"TU\", false, t => t.InsertAsync(obj));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_UntypedTableUpdate()\n        {\n            JObject obj = JObject.Parse(\"{\\\"id\\\":\\\"the id\\\",\\\"value\\\":\\\"new\\\"}\");\n            return this.ValidateFeaturesHeader(\"TU\", false, t => t.UpdateAsync(obj));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_UntypedTableDelete()\n        {\n            JObject obj = JObject.Parse(\"{\\\"id\\\":\\\"the id\\\",\\\"value\\\":\\\"new\\\"}\");\n            return this.ValidateFeaturesHeader(\"TU\", false, t => t.DeleteAsync(obj));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_UntypedTableReadWithQuery()\n        {\n            return this.ValidateFeaturesHeader(\"TU,QS\", true, t => t.ReadAsync(\"\", new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_UntypedTableLookupWithQuery_FeaturesHeaderIsCorrect()\n        {\n            return this.ValidateFeaturesHeader(\"TU,QS\", false, t => t.LookupAsync(\"id\", new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_UntypedTableInsertWithQuery()\n        {\n            JObject obj = JObject.Parse(\"{\\\"id\\\":\\\"the id\\\",\\\"value\\\":\\\"new\\\"}\");\n            return this.ValidateFeaturesHeader(\"TU,QS\", false, t => t.InsertAsync(obj, new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_UntypedTableUpdateWithQuery()\n        {\n            JObject obj = JObject.Parse(\"{\\\"id\\\":\\\"the id\\\",\\\"value\\\":\\\"new\\\"}\");\n            return this.ValidateFeaturesHeader(\"TU,QS\", false, t => t.UpdateAsync(obj, new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        [AsyncTestMethod]\n        public Task FeatureHeaderValidation_UntypedTableDeleteWithQuery()\n        {\n            JObject obj = JObject.Parse(\"{\\\"id\\\":\\\"the id\\\",\\\"value\\\":\\\"new\\\"}\");\n            return this.ValidateFeaturesHeader(\"TU,QS\", false, t => t.DeleteAsync(obj, new Dictionary<string, string> { { \"a\", \"b\" } }));\n        }\n\n        private async Task ValidateFeaturesHeader(string expectedFeaturesHeader, bool arrayResponse, Func<IMobileServiceTable, Task> operation)\n        {\n            TestHttpHandler hijack = new TestHttpHandler();\n            bool validationDone = false;\n            hijack.OnSendingRequest = (request) =>\n            {\n                Assert.AreEqual(expectedFeaturesHeader, request.Headers.GetValues(\"X-ZUMO-FEATURES\").First());\n                validationDone = true;\n                return Task.FromResult(request);\n            };\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            IMobileServiceTable table = service.GetTable(\"someTable\");\n\n            var responseContent = \"{\\\"id\\\":\\\"the id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n            if (arrayResponse)\n            {\n                responseContent = \"[\" + responseContent + \"]\";\n            }\n\n            hijack.SetResponseContent(responseContent);\n            await operation(table);\n            Assert.IsTrue(validationDone);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Table/Query/MemberInfoKey.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------    \n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"MemberInfoKey\")]\n    public class MemberInfoKeyTests : TestBase\n    {\n        private static IEnumerable<Type> GetBaseTypesAndSelf(Type type)\n        {\n            Debug.Assert(type != null, \"type cannot be null!\");\n\n            while (type != null)\n            {\n                yield return type;\n                type = type.GetTypeInfo().BaseType;\n            }\n        }\n\n        private static IEnumerable<MethodInfo> GetMethods(Type type, string name, Type[] parameterTypes)\n        {\n            return GetBaseTypesAndSelf(type)\n                .SelectMany(t => t.GetRuntimeMethods().Where(m => m.Name == name))\n                .Where(m => m.GetParameters().Select(p => p.ParameterType).SequenceEqual(parameterTypes));\n        }\n\n        private static MethodInfo FindInstanceMethod(Type type, string name, params Type[] parameterTypes)\n        {\n            return\n                GetMethods(type, name, parameterTypes)\n                .Where(m => !m.IsStatic)\n                .SingleOrDefault();\n        }\n\n        private static MemberInfo FindInstanceProperty(Type type, string name)\n        {\n            return\n                GetBaseTypesAndSelf(type)\n                .SelectMany(t => t.GetRuntimeProperties().Where(\n                    p => p.Name == name && p.CanRead && !p.GetMethod.IsStatic))\n                .Cast<MemberInfo>()\n                .SingleOrDefault();\n        }\n\n        private static MethodInfo FindStaticMethod(Type type, string name, params Type[] parameterTypes)\n        {\n            return\n                GetMethods(type, name, parameterTypes)\n                .Where(m => m.IsStatic)\n                .SingleOrDefault();\n        }\n\n        [TestMethod]\n        public void CorrectlyMatchesInstanceMemberInfos()\n        {\n            Dictionary<MethodInfo, MemberInfoKey> instanceMethods =\n                new Dictionary<MethodInfo, MemberInfoKey>() {\n                { FindInstanceMethod(typeof(string), \"ToLower\"), \n                    new MemberInfoKey(typeof(string), \"ToLower\", true, true) },\n                { FindInstanceMethod(typeof(string), \"ToLowerInvariant\"),\n                    new MemberInfoKey(typeof(string), \"ToLowerInvariant\", true, true) },\n                { FindInstanceMethod(typeof(string), \"ToUpper\"),\n                    new MemberInfoKey(typeof(string), \"ToUpper\", true, true) },\n                { FindInstanceMethod(typeof(string), \"ToUpperInvariant\"),\n                    new MemberInfoKey(typeof(string), \"ToUpperInvariant\", true, true) },\n                { FindInstanceMethod(typeof(string), \"Trim\"),\n                    new MemberInfoKey(typeof(string), \"Trim\", true, true) },\n                { FindInstanceMethod(typeof(string), \"StartsWith\", typeof(string)),\n                    new MemberInfoKey(typeof(string), \"StartsWith\", true, true, typeof(string)) },\n                { FindInstanceMethod(typeof(string), \"EndsWith\", typeof(string)),\n                    new MemberInfoKey(typeof(string), \"EndsWith\", true, true, typeof(string)) },\n                { FindInstanceMethod(typeof(string), \"IndexOf\", typeof(string)),\n                    new MemberInfoKey(typeof(string), \"IndexOf\", true, true, typeof(string)) },\n                { FindInstanceMethod(typeof(string), \"IndexOf\", typeof(char)),\n                    new MemberInfoKey(typeof(string), \"IndexOf\", true, true, typeof(char)) },\n                { FindInstanceMethod(typeof(string), \"Contains\", typeof(string)),\n                    new MemberInfoKey(typeof(string), \"Contains\", true, true, typeof(string)) },\n                { FindInstanceMethod(typeof(string), \"Replace\", typeof(string), typeof(string)),\n                    new MemberInfoKey(typeof(string), \"Replace\", true, true, typeof(string), typeof(string)) },\n                { FindInstanceMethod(typeof(string), \"Replace\", typeof(char), typeof(char)),\n                    new MemberInfoKey(typeof(string), \"Replace\", true, true, typeof(char), typeof(char)) },\n                { FindInstanceMethod(typeof(string), \"Substring\", typeof(int)),\n                    new MemberInfoKey(typeof(string), \"Substring\", true, true, typeof(int)) },\n                { FindInstanceMethod(typeof(string), \"Substring\", typeof(int), typeof(int)),\n                    new MemberInfoKey(typeof(string), \"Substring\", true, true, typeof(int), typeof(int)) },\n            };\n\n            foreach (MethodInfo key in instanceMethods.Keys)\n            {\n                foreach (var pair in instanceMethods)\n                {\n                    MemberInfoKey other = new MemberInfoKey(key);\n                    if (key == pair.Key)\n                    {\n                        Assert.IsTrue(pair.Value.Equals(other));\n                    }\n                    else\n                    {\n                        Assert.IsFalse(pair.Value.Equals(other));\n                    }\n                }\n            }\n        }\n\n        [TestMethod]\n        public void CorrectlyMatchesStaticMemberInfos()\n        {\n            Dictionary<MethodInfo, MemberInfoKey> staticMethods =\n                new Dictionary<MethodInfo, MemberInfoKey>\n            {\n                { FindStaticMethod(typeof(Math), \"Floor\", typeof(double)), \n                    new MemberInfoKey(typeof(Math), \"Floor\", true, false, typeof(double)) },                 \n                { FindStaticMethod(typeof(Math), \"Ceiling\", typeof(double)), \n                    new MemberInfoKey(typeof(Math), \"Ceiling\", true, false, typeof(double)) },  \n                { FindStaticMethod(typeof(Math), \"Round\", typeof(double)), \n                    new MemberInfoKey(typeof(Math), \"Round\", true, false, typeof(double)) },\n                { FindStaticMethod(typeof(string), \"Concat\", typeof(string), typeof(string)), \n                    new MemberInfoKey(typeof(string), \"Concat\", true, false, typeof(string), typeof(string)) }\n            };\n\n            // Windows 8 supports decimal.Floor(), decimal.Ceiling() and decimal.Round(), but Windows Phone does not, \n            // so we have to ensure these method infos exist before we add them.\n            MethodInfo possibleFloorMethod = FindStaticMethod(typeof(Decimal), \"Floor\", typeof(decimal));\n            if (possibleFloorMethod != null)\n            {\n                staticMethods.Add(possibleFloorMethod,\n                    new MemberInfoKey(typeof(Decimal), \"Floor\", true, false, typeof(decimal)));\n            }\n\n            MethodInfo possibleCeilingMethod = FindStaticMethod(typeof(Decimal), \"Ceiling\", typeof(decimal));\n            if (possibleCeilingMethod != null)\n            {\n                staticMethods.Add(possibleCeilingMethod,\n                    new MemberInfoKey(typeof(Decimal), \"Ceiling\", true, false, typeof(decimal)));\n            }\n\n            MethodInfo possibleRoundMethod = FindStaticMethod(typeof(Decimal), \"Round\", typeof(decimal));\n            if (possibleRoundMethod != null)\n            {\n                staticMethods.Add(possibleRoundMethod,\n                    new MemberInfoKey(typeof(Decimal), \"Round\", true, false, typeof(decimal)));\n            }\n\n            // Windows Phone 7.5 does not support Math.Floor(), Math.Round() and Math.Ceiling() for decimals \n            MethodInfo possibleCeilingMethodMath = FindStaticMethod(typeof(Math), \"Ceiling\", typeof(decimal));\n            if (possibleCeilingMethodMath != null)\n            {\n                staticMethods.Add(possibleCeilingMethodMath,\n                    new MemberInfoKey(typeof(Math), \"Ceiling\", true, false, typeof(decimal)));\n            }\n\n            MethodInfo possibleFloorMethodMath = FindStaticMethod(typeof(Math), \"Floor\", typeof(decimal));\n            if (possibleFloorMethodMath != null)\n            {\n                staticMethods.Add(possibleFloorMethodMath,\n                    new MemberInfoKey(typeof(Math), \"Floor\", true, false, typeof(decimal)));\n            }\n\n            MethodInfo possibleRoundMethodMath = FindStaticMethod(typeof(Math), \"Round\", typeof(decimal));\n            if (possibleRoundMethodMath != null)\n            {\n                staticMethods.Add(possibleRoundMethodMath,\n                    new MemberInfoKey(typeof(Math), \"Round\", true, false, typeof(decimal)));\n            }\n\n            foreach (MethodInfo key in staticMethods.Keys)\n            {\n                foreach (var pair in staticMethods)\n                {\n                    MemberInfoKey other = new MemberInfoKey(key);\n                    if (key == pair.Key)\n                    {\n                        Assert.IsTrue(pair.Value.Equals(other));\n                    }\n                    else\n                    {\n                        Assert.IsFalse(pair.Value.Equals(other));\n                    }\n                }\n            }\n        }\n\n        [TestMethod]\n        public void CorrectlyMatchesPropertyInfos()\n        {\n            Dictionary<MemberInfo, MemberInfoKey> instanceProperties =\n                new Dictionary<MemberInfo, MemberInfoKey>() {\n                 { FindInstanceProperty(typeof(string), \"Length\"), \n                     new MemberInfoKey(typeof(string), \"Length\", false, true) },\n                 { FindInstanceProperty(typeof(DateTime), \"Day\"), \n                     new MemberInfoKey(typeof(DateTime), \"Day\", false, true) },\n                 { FindInstanceProperty(typeof(DateTime), \"Month\"), \n                     new MemberInfoKey(typeof(DateTime), \"Month\", false, true) },\n                 { FindInstanceProperty(typeof(DateTime), \"Year\"),\n                     new MemberInfoKey(typeof(DateTime), \"Year\", false, true) },\n                 { FindInstanceProperty(typeof(DateTime), \"Hour\"), \n                     new MemberInfoKey(typeof(DateTime), \"Hour\", false, true) },\n                 { FindInstanceProperty(typeof(DateTime), \"Minute\"), \n                     new MemberInfoKey(typeof(DateTime), \"Minute\", false, true) },\n                 { FindInstanceProperty(typeof(DateTime), \"Second\"),\n                     new MemberInfoKey(typeof(DateTime), \"Second\", false, true) },\n            };\n\n            foreach (MemberInfo key in instanceProperties.Keys)\n            {\n                foreach (var pair in instanceProperties)\n                {\n                    MemberInfoKey other = new MemberInfoKey(key);\n                    if (key == pair.Key)\n                    {\n                        Assert.IsTrue(pair.Value.Equals(other));\n                    }\n                    else\n                    {\n                        Assert.IsFalse(pair.Value.Equals(other));\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Table/Query/ZumoQuery.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------    \n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class Product\n    {\n        public long Id { get; set; }\n        public int SmallId { get; set; }\n        public ulong UnsignedId { get; set; }\n        public uint UnsignedSmallId { get; set; }\n        public string Name { get; set; }\n\n        [JsonProperty(Required = Required.Always)]\n        public float Weight { get; set; }\n\n        [JsonProperty(Required = Required.AllowNull)]\n        public float? WeightInKG { get; set; }\n\n        public Decimal Price { get; set; }\n        public bool InStock { get; set; }\n        public short DisplayAisle { get; set; }\n        public ushort UnsignedDisplayAisle { get; set; }\n        public byte OptionFlags { get; set; }\n        public DateTime Created { get; set; }\n        public DateTime? Updated { get; set; }\n        public TimeSpan AvailableTime { get; set; }\n        public List<string> Tags { get; set; }\n        public ProductType Type { get; set; }\n\n        public Product()\n        {\n        }\n\n        public Product(long id)\n        {\n            this.Id = id;\n        }\n    }\n\n    public class ProductWithDateTimeOffset\n    {\n        public long Id { get; set; }\n        public int SmallId { get; set; }\n        public ulong UnsignedId { get; set; }\n        public uint UnsignedSmallId { get; set; }\n        public string Name { get; set; }\n\n        [JsonProperty(Required = Required.Always)]\n        public float Weight { get; set; }\n\n        [JsonProperty(Required = Required.AllowNull)]\n        public float? WeightInKG { get; set; }\n\n        public Decimal Price { get; set; }\n        public bool InStock { get; set; }\n        public short DisplayAisle { get; set; }\n        public ushort UnsignedDisplayAisle { get; set; }\n        public byte OptionFlags { get; set; }\n        public DateTimeOffset Created { get; set; }\n        public DateTimeOffset? Updated { get; set; }\n        public TimeSpan AvailableTime { get; set; }\n        public List<string> Tags { get; set; }\n        public ProductType Type { get; set; }\n\n        public ProductWithDateTimeOffset()\n        {\n        }\n\n        public ProductWithDateTimeOffset(long id)\n        {\n            this.Id = id;\n        }\n    }\n\n    public enum ProductType\n    {\n        Food,\n        Furniture,\n    }\n\n    [Tag(\"query\")]\n    [Tag(\"unit\")]\n    public class ZumoQuery : TestBase\n    {\n        private MobileServiceTableQueryDescription Compile<T, U>(Func<IMobileServiceTable<T>, IMobileServiceTableQuery<U>> getQuery)\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\");\n            IMobileServiceTable<T> table = service.GetTable<T>();\n            IMobileServiceTableQuery<U> query = getQuery(table);\n            MobileServiceTableQueryProvider provider = new MobileServiceTableQueryProvider();\n            MobileServiceTableQueryDescription compiledQuery = provider.Compile((MobileServiceTableQuery<U>)query);\n            Log(\">>> \" + compiledQuery.ToODataString());\n            return compiledQuery;\n        }\n\n        [TestMethod]\n        public void BasicQuery()\n        {\n            // Query syntax\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                select p);\n            Assert.AreEqual(\"Product\", query.TableName);\n            Assert.IsNull(query.Filter);\n            Assert.AreEqual(2, query.Selection.Count);\n            Assert.AreEqual(0, query.Ordering.Count);\n        }\n\n        [TestMethod]\n        public void Ordering()\n        {\n            // Query syntax\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                orderby p.Price ascending\n                select p);\n            Assert.AreEqual(1, query.Ordering.Count);\n            Assert.AreEqual(\"Price\", ((MemberAccessNode)query.Ordering[0].Expression).MemberName);\n            Assert.AreEqual(OrderByDirection.Ascending, query.Ordering[0].Direction);\n\n            // Chaining\n            query = Compile<Product, Product>(table => table.OrderBy(p => p.Price));\n            Assert.AreEqual(1, query.Ordering.Count);\n            Assert.AreEqual(\"Price\", ((MemberAccessNode)query.Ordering[0].Expression).MemberName);\n            Assert.AreEqual(OrderByDirection.Ascending, query.Ordering[0].Direction);\n\n            // Query syntax descending\n            query = Compile<Product, Product>(table =>\n                from p in table\n                orderby p.Price descending\n                select p);\n            Assert.AreEqual(1, query.Ordering.Count);\n            Assert.AreEqual(\"Price\", ((MemberAccessNode)query.Ordering[0].Expression).MemberName);\n            Assert.AreEqual(OrderByDirection.Descending, query.Ordering[0].Direction);\n\n            // Chaining descending\n            query = Compile<Product, Product>(table => table.OrderByDescending(p => p.Price));\n            Assert.AreEqual(1, query.Ordering.Count);\n            Assert.AreEqual(\"Price\", ((MemberAccessNode)query.Ordering[0].Expression).MemberName);\n            Assert.AreEqual(OrderByDirection.Descending, query.Ordering[0].Direction);\n\n            // Query syntax with multiple\n            query = Compile<Product, Product>(table =>\n                from p in table\n                orderby p.Price ascending, p.Name descending\n                select p);\n            Assert.AreEqual(2, query.Ordering.Count);\n            Assert.AreEqual(\"Price\", ((MemberAccessNode)query.Ordering[0].Expression).MemberName);\n            Assert.AreEqual(OrderByDirection.Ascending, query.Ordering[0].Direction);\n            Assert.AreEqual(\"Name\", ((MemberAccessNode)query.Ordering[1].Expression).MemberName);\n            Assert.AreEqual(OrderByDirection.Descending, query.Ordering[1].Direction);\n\n            // Chaining with multiple\n            query = Compile<Product, Product>(table =>\n                table\n                .OrderBy(p => p.Price)\n                .ThenByDescending(p => p.Name));\n            Assert.AreEqual(2, query.Ordering.Count);\n            Assert.AreEqual(\"Price\", ((MemberAccessNode)query.Ordering[0].Expression).MemberName);\n            Assert.AreEqual(OrderByDirection.Ascending, query.Ordering[0].Direction);\n            Assert.AreEqual(\"Name\", ((MemberAccessNode)query.Ordering[1].Expression).MemberName);\n            Assert.AreEqual(OrderByDirection.Descending, query.Ordering[1].Direction);\n        }\n\n        [TestMethod]\n        public void Projection()\n        {\n            // Query syntax\n            MobileServiceTableQueryDescription query = Compile<Product, string>(table =>\n                from p in table\n                select p.Name);\n            Assert.AreEqual(3, query.Selection.Count);\n            Assert.AreEqual(\"Name\", query.Selection[0]);\n            Assert.AreEqual(\"Weight\", query.Selection[1]);\n            Assert.AreEqual(\"WeightInKG\", query.Selection[2]);\n            Assert.AreEqual(typeof(Product), query.ProjectionArgumentType);\n            Assert.AreEqual(\n                \"ZUMO\",\n                query.Projections.First().DynamicInvoke(\n                    new Product { Name = \"ZUMO\", Price = 0, InStock = true }));\n\n            // Chaining\n            query = Compile<Product, string>(table => table.Select(p => p.Name));\n            Assert.AreEqual(3, query.Selection.Count);\n            Assert.AreEqual(\"Name\", query.Selection[0]);\n            Assert.AreEqual(\"Weight\", query.Selection[1]);\n            Assert.AreEqual(\"WeightInKG\", query.Selection[2]);\n            Assert.AreEqual(typeof(Product), query.ProjectionArgumentType);\n            Assert.AreEqual(\n                \"ZUMO\",\n                query.Projections.First().DynamicInvoke(\n                    new Product { Name = \"ZUMO\", Price = 0, InStock = true }));\n\n            // Verify that we don't blow up by trying to include the Foo\n            // property in the compiled query\n            Compile((IMobileServiceTable<Product> table) =>\n                from p in table\n                select new { Foo = p.Name });\n        }\n\n        [TestMethod]\n        public void MutlipleProjection()\n        {\n            // Chaining\n            MobileServiceTableQueryDescription query = Compile<Product, string>(table =>\n                table.Select(p => new { Foo = p.Name })\n                     .Select(f => f.Foo.ToLower()));\n            Assert.AreEqual(3, query.Selection.Count);\n            Assert.AreEqual(\"Name\", query.Selection[0]);\n            Assert.AreEqual(\"Weight\", query.Selection[1]);\n            Assert.AreEqual(\"WeightInKG\", query.Selection[2]);\n            Assert.AreEqual(typeof(Product), query.ProjectionArgumentType);\n            Assert.AreEqual(\n                \"zumo\",\n                query.Projections[1].DynamicInvoke(\n                    query.Projections[0].DynamicInvoke(\n                    new Product { Name = \"ZUMO\", Price = 0, InStock = true })));\n\n            // Verify that we don't blow up by trying to include the Foo\n            // property in the compiled query\n            Compile((IMobileServiceTable<Product> table) =>\n                table.Select(p => new { Foo = p.Name })\n                     .Select(f => new { LowerFoo = f.Foo.ToLower() }));\n        }\n\n        [TestMethod]\n        public void SkipTake()\n        {\n            // Query syntax\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                (from p in table\n                 select p).Skip(2).Take(5));\n            Assert.AreEqual(2, query.Skip);\n            Assert.AreEqual(5, query.Top);\n\n            // Chaining\n            query = Compile<Product, Product>(table => table.Select(p => p).Skip(2).Take(5));\n            Assert.AreEqual(2, query.Skip);\n            Assert.AreEqual(5, query.Top);\n\n            // Allow New operations\n            query = Compile<Product, Product>(table => table.Select(p => p).Skip(new Product() { SmallId = 2 }.SmallId).Take(5));\n            Assert.AreEqual(2, query.Skip);\n            Assert.AreEqual(5, query.Top);\n        }\n\n        [TestMethod]\n        public void WithParameters()\n        {\n            var userParmeters1 = new Dictionary<string, string>() { { \"state\", \"PA\" } };\n            var userParmeters2 = new Dictionary<string, string>() { { \"country\", \"USA\" } };\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\");\n            IMobileServiceTable<Product> t = service.GetTable<Product>();\n\n            IMobileServiceTableQuery<Product> originalQuery = from p in t select p;\n            IMobileServiceTableQuery<Product> query = originalQuery.WithParameters(userParmeters1)\n                                                                   .Skip(2)\n                                                                   .WithParameters(userParmeters2);\n\n            Assert.AreEqual(\"PA\", originalQuery.Parameters[\"state\"], \"original query should also have parameters\");\n            Assert.AreEqual(\"USA\", originalQuery.Parameters[\"country\"], \"original query should also have parameters\");\n            Assert.AreEqual(\"PA\", query.Parameters[\"state\"]);\n            Assert.AreEqual(\"USA\", query.Parameters[\"country\"]);\n        }\n\n        [TestMethod]\n        public void Filtering()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Price > 50\n                select p);\n            AssertFilter(query.Filter, \"(Price gt 50M)\");\n\n            query = Compile<Product, Product>(table => table.Where(p => p.Price > 50));\n            AssertFilter(query.Filter, \"(Price gt 50M)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Weight <= 10\n                select p);\n            AssertFilter(query.Filter, \"(Weight le 10f)\");\n\n            query = Compile<Product, Product>(table => table.Where(p => p.Weight <= 10));\n            AssertFilter(query.Filter, \"(Weight le 10f)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Weight <= 10 && p.InStock == true\n                select p);\n            AssertFilter(query.Filter, \"((Weight le 10f) and (InStock eq true))\");\n\n            query = Compile<Product, Product>(table => table.Where(p => p.Weight <= 10 && p.InStock == true));\n            AssertFilter(query.Filter, \"((Weight le 10f) and (InStock eq true))\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Weight <= 10 || p.InStock == true\n                select p);\n            AssertFilter(query.Filter, \"((Weight le 10f) or (InStock eq true))\");\n\n            query = Compile<Product, Product>(table => table.Where(p => p.Weight <= 10 || p.InStock == true));\n            AssertFilter(query.Filter, \"((Weight le 10f) or (InStock eq true))\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where !p.InStock\n                select p);\n            AssertFilter(query.Filter, \"not(InStock)\");\n\n            query = Compile<Product, Product>(table => table.Where(p => !p.InStock));\n            AssertFilter(query.Filter, \"not(InStock)\");\n        }\n\n        [Tag(\"notXamarin_iOS\")] // LambdaExpression.Compile() is not supported on Xamarin.iOS\n        [TestMethod]\n        public void Filtering_PartialEval()\n        {\n            // Allow New Operations\n            float foo = 10;\n            var query = Compile<Product, Product>(table => table.Where(p => p.Weight <= new Product() { Weight = foo }.Weight || p.InStock == true));\n            AssertFilter(query.Filter, \"((Weight le 10f) or (InStock eq true))\");\n\n            query = Compile<Product, Product>(table => table.Where(p => p.Weight <= new Product(15) { Weight = foo }.Weight || p.InStock == true));\n            AssertFilter(query.Filter, \"((Weight le 10f) or (InStock eq true))\");\n\n            query = Compile<Product, Product>(table => table.Where(p => p.Weight <= new Product(15) { Weight = 10 }.Weight || p.InStock == true));\n            AssertFilter(query.Filter, \"((Weight le 10f) or (InStock eq true))\");\n\n            long id = 15;\n            query = Compile<Product, Product>(table => table.Where(p => p.Weight <= new Product(id) { Weight = 10 }.Weight || p.InStock == true));\n            AssertFilter(query.Filter, \"((Weight le 10f) or (InStock eq true))\");\n\n            query = Compile<Product, Product>(table => table.Where(p => p.Created == new DateTime(1994, 10, 14, 0, 0, 0, DateTimeKind.Utc)));\n            AssertFilter(query.Filter, \"(Created eq datetime'1994-10-14T00%3A00%3A00.000Z')\");\n\n            query = Compile<ProductWithDateTimeOffset, ProductWithDateTimeOffset>(table => table.Where(p => p.Created == new DateTimeOffset(1994, 10, 13, 17, 0, 0, TimeSpan.FromHours(7))));\n            AssertFilter(query.Filter, \"(Created eq datetimeoffset'1994-10-13T17%3A00%3A00.0000000%2B07%3A00')\");\n        }\n\n        [Tag(\"notXamarin_iOS\")] // LambdaExpression.Compile() is not supported on Xamarin.iOS\n        [TestMethod]\n        public void CombinedQuery()\n        {\n            MobileServiceTableQueryDescription query = Compile((IMobileServiceTable<Product> table) =>\n                (from p in table\n                 where p.Price <= 10M && p.Weight > 10f\n                 where !p.InStock\n                 orderby p.Price descending, p.Name\n                 select new { p.Name, p.Price })\n                .Skip(20)\n                .Take(10));\n            Assert.AreEqual(\"$filter=(((Price le 10M) and (Weight gt 10f)) and not(InStock))&$orderby=Price desc,Name&$skip=20&$top=10&$select=Name,Price,Weight,WeightInKG\", query.ToODataString());\n        }\n\n        [TestMethod]\n        public void Bug466610UsingShorts()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                table.Where(p => p.DisplayAisle == 2));\n            AssertFilter(query.Filter, \"(DisplayAisle eq 2)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.DisplayAisle == (short)3\n                select p);\n            AssertFilter(query.Filter, \"(DisplayAisle eq 3)\");\n\n            short closedOverVariable = (short)5;\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.DisplayAisle == closedOverVariable\n                select p);\n            AssertFilter(query.Filter, \"(DisplayAisle eq 5)\");\n\n            query = Compile<Product, Product>(table =>\n                table.Where(p => p.OptionFlags == 7));\n            AssertFilter(query.Filter, \"(OptionFlags eq 7)\");\n\n            // Verify non-numeric conversions still aren't supported\n            object aisle = 12.0;\n            Throws<NotSupportedException>(() =>\n                Compile<Product, Product>(table =>\n                    from p in table\n                    where (object)p.DisplayAisle == aisle\n                    select p));\n        }\n\n        [TestMethod]\n        public void Bug466610BareSkipTake()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table => table.Skip(3));\n            Assert.AreEqual(query.Skip, 3);\n            Assert.IsFalse(query.Top.HasValue);\n\n            query = Compile<Product, Product>(table => table.Take(5));\n            Assert.AreEqual(query.Top, 5);\n            Assert.IsFalse(query.Skip.HasValue);\n\n            query = Compile<Product, Product>(table => table.Skip(7).Take(9));\n            Assert.AreEqual(query.Skip, 7);\n            Assert.AreEqual(query.Top, 9);\n\n            query = Compile<Product, Product>(table => table.Take(11).Skip(13));\n            Assert.AreEqual(query.Skip, 13);\n            Assert.AreEqual(query.Top, 11);\n        }\n\n        [TestMethod]\n        public void FilterOperators()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name + \"x\" == \"mx\"\n                select p);\n            AssertFilter(query.Filter, \"(concat(Name,'x') eq 'mx')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Weight + 1.0 == 10.0\n                select p);\n            AssertFilter(query.Filter, \"((Weight add 1.0) eq 10.0)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Weight + 1 == 10\n                select p);\n            AssertFilter(query.Filter, \"((Weight add 1f) eq 10f)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Weight - 1.0 == 10.0\n                select p);\n            AssertFilter(query.Filter, \"((Weight sub 1.0) eq 10.0)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Weight * 2.0 == 10.0\n                select p);\n            AssertFilter(query.Filter, \"((Weight mul 2.0) eq 10.0)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Weight / 2.0 == 10.0\n                select p);\n            AssertFilter(query.Filter, \"((Weight div 2.0) eq 10.0)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Id % 2 == 1\n                select p);\n            AssertFilter(query.Filter, \"((id mod 2L) eq 1L)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where (p.Weight * 2.0) / 3.0 + 1.0 == 10.0\n                select p);\n            AssertFilter(query.Filter, \"((((Weight mul 2.0) div 3.0) add 1.0) eq 10.0)\");\n        }\n\n        [TestMethod]\n        public void FilterMethods()\n        {\n            // Methods that look like properties\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.Length == 7\n                select p);\n            AssertFilter(query.Filter, \"(length(Name) eq 7)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Created.Day == 7\n                select p);\n            AssertFilter(query.Filter, \"(day(Created) eq 7)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Created.Month == 7\n                select p);\n            AssertFilter(query.Filter, \"(month(Created) eq 7)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Created.Year == 7\n                select p);\n            AssertFilter(query.Filter, \"(year(Created) eq 7)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Created.Hour == 7\n                select p);\n            AssertFilter(query.Filter, \"(hour(Created) eq 7)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Created.Minute == 7\n                select p);\n            AssertFilter(query.Filter, \"(minute(Created) eq 7)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Created.Second == 7\n                select p);\n            AssertFilter(query.Filter, \"(second(Created) eq 7)\");\n\n\n            // Static methods\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where Math.Floor(p.Weight) == 10\n                select p);\n            AssertFilter(query.Filter, \"(floor(Weight) eq 10.0)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where Decimal.Floor(p.Price) == 10\n                select p);\n            AssertFilter(query.Filter, \"(floor(Price) eq 10M)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where Math.Ceiling(p.Weight) == 10\n                select p);\n            AssertFilter(query.Filter, \"(ceiling(Weight) eq 10.0)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where Decimal.Ceiling(p.Price) == 10\n                select p);\n            AssertFilter(query.Filter, \"(ceiling(Price) eq 10M)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where Math.Round(p.Weight) == 10\n                select p);\n            AssertFilter(query.Filter, \"(round(Weight) eq 10.0)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where Math.Round(p.Price) == 10\n                select p);\n            AssertFilter(query.Filter, \"(round(Price) eq 10M)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where string.Concat(p.Name, \"x\") == \"mx\"\n                select p);\n            AssertFilter(query.Filter, \"(concat(Name,'x') eq 'mx')\");\n\n            // Instance methods\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.ToLower() == \"a\"\n                select p);\n            AssertFilter(query.Filter, \"(tolower(Name) eq 'a')\");\n\n            // Instance methods\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.ToLowerInvariant() == \"a\"\n                select p);\n            AssertFilter(query.Filter, \"(tolower(Name) eq 'a')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.ToUpper() == \"A\"\n                select p);\n            AssertFilter(query.Filter, \"(toupper(Name) eq 'A')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.ToUpperInvariant() == \"A\"\n                select p);\n            AssertFilter(query.Filter, \"(toupper(Name) eq 'A')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.Trim() == \"A\"\n                select p);\n            AssertFilter(query.Filter, \"(trim(Name) eq 'A')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.StartsWith(\"x\")\n                select p);\n            AssertFilter(query.Filter, \"startswith(Name,'x')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.EndsWith(\"x\")\n                select p);\n            AssertFilter(query.Filter, \"endswith(Name,'x')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.IndexOf(\"x\") == 2\n                select p);\n            AssertFilter(query.Filter, \"(indexof(Name,'x') eq 2)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.IndexOf('x') == 2\n                select p);\n            AssertFilter(query.Filter, \"(indexof(Name,'x') eq 2)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.Contains(\"x\")\n                select p);\n            AssertFilter(query.Filter, \"substringof('x',Name)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.Replace(\"a\", \"A\") == \"A\"\n                select p);\n            AssertFilter(query.Filter, \"(replace(Name,'a','A') eq 'A')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.Replace('a', 'A') == \"A\"\n                select p);\n            AssertFilter(query.Filter, \"(replace(Name,'a','A') eq 'A')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.Substring(2) == \"A\"\n                select p);\n            AssertFilter(query.Filter, \"(substring(Name,2) eq 'A')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Name.Substring(2, 3) == \"A\"\n                select p);\n            AssertFilter(query.Filter, \"(substring(Name,2,3) eq 'A')\");\n\n            // Verify each type works on nested expressions too\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where (p.Name + \"x\").Length == 7\n                select p);\n            AssertFilter(query.Filter, \"(length(concat(Name,'x')) eq 7)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where string.Concat(p.Name + \"x\", \"x\") == \"mx\"\n                select p);\n            AssertFilter(query.Filter, \"(concat(concat(Name,'x'),'x') eq 'mx')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where (p.Name + \"x\").ToLower() == \"ax\"\n                select p);\n            AssertFilter(query.Filter, \"(tolower(concat(Name,'x')) eq 'ax')\");\n        }\n\n        [TestMethod]\n        public void FilterContainsMethod()\n        {\n            string[] names = new[] { \"name1\", \"name2\" };\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where names.Contains(p.Name)\n                select p);\n            AssertFilter(query.Filter, \"((Name eq 'name1') or (Name eq 'name2'))\");\n\n            IEnumerable<string> namesEnum = new[] { \"name1\", \"name2\" };\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where namesEnum.Contains(p.Name)\n                select p);\n            AssertFilter(query.Filter, \"((Name eq 'name1') or (Name eq 'name2'))\");\n\n            IEnumerable<string> empty = Enumerable.Empty<string>();\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where empty.Contains(p.Name)\n                select p);\n            AssertFilter(query.Filter, string.Empty);\n\n            //test Contains on List<T>\n            List<string> namesList = new List<string>() { \"name1\", \"name2\" };\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where namesList.Contains(p.Name)\n                select p);\n            AssertFilter(query.Filter, \"((Name eq 'name1') or (Name eq 'name2'))\");\n\n\n            //test Contains on Collection<T>\n            Collection<string> coll = new Collection<string>() { \"name1\", \"name2\" };\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where coll.Contains(p.Name)\n                select p);\n            AssertFilter(query.Filter, \"((Name eq 'name1') or (Name eq 'name2'))\");\n\n            //test duplicates\n            namesList = new List<string>() { \"name1\", \"name1\" };\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where namesList.Contains(p.Name)\n                select p);\n            AssertFilter(query.Filter, \"((Name eq 'name1') or (Name eq 'name1'))\");\n\n            //test single\n            namesList = new List<string>() { \"name1\" };\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where namesList.Contains(p.Name)\n                select p);\n            AssertFilter(query.Filter, \"(Name eq 'name1')\");\n\n            //test multiples\n            namesList = new List<string>() { \"name1\", \"name2\", \"name3\" };\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where namesList.Contains(p.Name)\n                select p);\n            AssertFilter(query.Filter, \"(((Name eq 'name1') or (Name eq 'name2')) or (Name eq 'name3'))\");\n\n\n            IEnumerable<string> productNames = new Product[] { new Product { Name = \"name1\" }, new Product { Name = \"name2\" } }.Select(pr => pr.Name);\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where productNames.Contains(p.Name)\n                select p);\n            AssertFilter(query.Filter, \"((Name eq 'name1') or (Name eq 'name2'))\");\n\n            IEnumerable<bool> booleans = new[] { false, true };\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where booleans.Contains(p.InStock)\n                select p);\n            AssertFilter(query.Filter, \"((InStock eq false) or (InStock eq true))\");\n\n            IEnumerable<int> numbers = new[] { 13, 6 };\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where numbers.Contains(p.DisplayAisle)\n                select p);\n            AssertFilter(query.Filter, \"((DisplayAisle eq 13) or (DisplayAisle eq 6))\");\n\n            IEnumerable<double> doubles = new[] { 4.6, 3.9089 };\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where doubles.Contains(p.Weight)\n                select p);\n            AssertFilter(query.Filter, \"((Weight eq 4.6) or (Weight eq 3.9089))\");\n        }\n\n        [TestMethod]\n        public void FilterContainsMethodNegative()\n        {\n            //Contains on parameter members is not supported\n            Throws<NotSupportedException>(() =>\n                Compile<Product, Product>(table =>\n                    from p in table\n                    where p.Tags.Contains(p.Name)\n                    select p));\n\n            //test Select inside Where\n            IEnumerable<Product> products = new Product[] { new Product { Name = \"name1\" }, new Product { Name = \"name2\" } };\n            Throws<NotSupportedException>(() =>\n                Compile<Product, Product>(table =>\n                    from p in table\n                    where products.Select(pr => pr.Name).Contains(p.Name)\n                    select p));\n\n            IEnumerable<int> numbers = new[] { 13, 6, 5 };\n            //multiple parameter expressions throw in Contains\n            Throws<NotSupportedException>(() =>\n                Compile<Product, Product>(table =>\n                    from p in table\n                    where numbers.Select(n => p.Id).Contains(p.DisplayAisle)\n                    select p));\n\n            IEnumerable<object> objects = new object[] { 4.6, \"string\" };\n            //Contains on list of T where T != typeof(p.Member)\n            Throws<InvalidOperationException>(() =>\n                Compile<Product, Product>(table =>\n                    from p in table\n                    where objects.Contains(p.Weight)\n                    select p));\n        }\n\n        [TestMethod]\n        public void FilterEnums()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Type == ProductType.Food\n                select p);\n            AssertFilter(query.Filter, \"(Type eq 'Food')\");\n\n            query = Compile<EnumType, EnumType>(table =>\n                from p in table\n                where p.Enum1 == Enum1.Enum1Value2\n                select p);\n            AssertFilter(query.Filter, \"(Enum1 eq 'Enum1Value2')\");\n\n            query = Compile<EnumType, EnumType>(table =>\n                from p in table\n                where p.Enum2 == Enum2.Enum2Value2\n                select p);\n            AssertFilter(query.Filter, \"(Enum2 eq 'Enum2Value2')\");\n\n            query = Compile<EnumType, EnumType>(table =>\n                from p in table\n                where p.Enum3 == (Enum3.Enum3Value2 | Enum3.Enum3Value1)\n                select p);\n            AssertFilter(query.Filter, \"(Enum3 eq 'Enum3Value1%2C%20Enum3Value2')\");\n\n            query = Compile<EnumType, EnumType>(table =>\n                from p in table\n                where p.Enum4 == Enum4.Enum4Value2\n                select p);\n            AssertFilter(query.Filter, \"(Enum4 eq 'Enum4Value2')\");\n\n            query = Compile<EnumType, EnumType>(table =>\n                from p in table\n                where p.Enum5 == Enum5.Enum5Value2\n                select p);\n            AssertFilter(query.Filter, \"(Enum5 eq 'Enum5Value2')\");\n\n            query = Compile<EnumType, EnumType>(table =>\n                from p in table\n                where p.Enum6 == Enum6.Enum6Value1\n                select p);\n            AssertFilter(query.Filter, \"(Enum6 eq 'Enum6Value1')\");\n\n            //check if toString works\n            query = Compile<EnumType, EnumType>(table =>\n                from p in table\n                where p.Enum6.ToString() == Enum6.Enum6Value1.ToString()\n                select p);\n            AssertFilter(query.Filter, \"(Enum6 eq 'Enum6Value1')\");\n        }\n\n        [TestMethod]\n        public void ToStringTest()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Tags.ToString() == \"Test\"\n                select p);\n            AssertFilter(query.Filter, \"(Tags eq 'Test')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Price.ToString() == \"1.56\"\n                select p);\n            AssertFilter(query.Filter, \"(Price eq '1.56')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Created.ToString() == \"January 23\"\n                select p);\n            AssertFilter(query.Filter, \"(Created eq 'January%2023')\");\n\n            IList<string> namesList = new List<string>() { \"name1\", \"name1\" };\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where namesList.Contains(p.DisplayAisle.ToString())\n                select p);\n            AssertFilter(query.Filter, \"((DisplayAisle eq 'name1') or (DisplayAisle eq 'name1'))\");\n        }\n\n        [TestMethod]\n        public void FilterReturnsTrueConstant()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where true\n                select p);\n            AssertFilter(query.Filter, \"true\");\n\n            query = Compile<Product, Product>(table => table.Where(p => true));\n            AssertFilter(query.Filter, \"true\");\n\n            query = Compile<Product, Product>(table => table.Where(item => !item.InStock || item.InStock));\n            AssertFilter(query.Filter, \"(not(InStock) or InStock)\");\n        }\n\n        [TestMethod]\n        public void FilterNullable()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Updated == null\n                select p);\n            AssertFilter(query.Filter, \"(Updated eq null)\");\n\n            var minDate = new DateTime(1, 1, 1, 8, 0, 0, DateTimeKind.Utc);\n            query = Compile<Product, Product>(table =>\n               from p in table\n               where p.Updated == minDate\n               select p);\n            AssertFilter(query.Filter, \"(Updated eq datetime'0001-01-01T08%3A00%3A00.000Z')\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.WeightInKG == null\n                select p);\n            AssertFilter(query.Filter, \"(WeightInKG eq null)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.WeightInKG == 4.0\n                select p);\n            AssertFilter(query.Filter, \"(WeightInKG eq 4.0)\");\n        }\n\n        [TestMethod]\n        public void MultipleSkipShouldAddUp()\n        {\n            // Query syntax\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                (from p in table\n                 select p).Skip(2).Skip(5));\n            Assert.AreEqual(7, query.Skip);\n\n            query = Compile<Product, Product>(table =>\n                (from p in table\n                 select p).Skip(5).Skip(5));\n            Assert.AreEqual(10, query.Skip);\n\n            query = Compile<Product, Product>(table =>\n                (from p in table\n                 select p).Skip(20).Skip(6).Skip(5).Skip(2).Skip(9).Skip(5));\n            Assert.AreEqual(47, query.Skip);\n        }\n\n        [TestMethod]\n        public void MultipleTakeShouldChooseSmallest()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                (from p in table\n                 select p).Take(2).Take(5));\n            Assert.AreEqual(2, query.Top);\n\n            query = Compile<Product, Product>(table =>\n                (from p in table\n                 select p).Take(5).Take(2));\n            Assert.AreEqual(2, query.Top);\n\n            query = Compile<Product, Product>(table =>\n                (from p in table\n                 select p).Take(5).Take(5));\n            Assert.AreEqual(5, query.Top);\n        }\n\n        [TestMethod]\n        public void TableNameShouldPropagateCorrectly()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                select p);\n            Assert.AreEqual(\"Product\", query.TableName);\n            Assert.IsNull(query.Filter);\n            Assert.AreEqual(2, query.Selection.Count);\n            Assert.AreEqual(0, query.Ordering.Count);\n\n            query = Compile<Product, string>(table =>\n                from p in table\n                select p.Name);\n            Assert.AreEqual(\"Product\", query.TableName);\n            Assert.IsNull(query.Filter);\n            Assert.AreEqual(3, query.Selection.Count);\n            Assert.AreEqual(0, query.Ordering.Count);\n        }\n\n        [TestMethod]\n        public void BooleanMemberValuesShouldBeHandled()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where p.InStock\n                select p);\n            Assert.AreEqual(\"Product\", query.TableName);\n            AssertFilter(query.Filter, \"InStock\");\n            Assert.AreEqual(0, query.Selection.Count);\n            Assert.AreEqual(0, query.Ordering.Count);\n        }\n\n        [TestMethod]\n        public void UnsignedDataTypesTest()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where p.UnsignedId == 12UL\n                select p);\n            Assert.AreEqual(\"Product\", query.TableName);\n            AssertFilter(query.Filter, \"(UnsignedId eq 12L)\");\n\n            //unsigned ints should be sent as long\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.UnsignedSmallId == 12U //uint\n                select p);\n            Assert.AreEqual(\"Product\", query.TableName);\n            AssertFilter(query.Filter, \"(UnsignedSmallId eq 12L)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where p.UnsignedDisplayAisle == (ushort)12\n                select p);\n            Assert.AreEqual(\"Product\", query.TableName);\n            AssertFilter(query.Filter, \"(UnsignedDisplayAisle eq 12)\");\n        }\n\n        [TestMethod]\n        public void FilterBasedOnTimeSpanShouldResultInString()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where p.AvailableTime > TimeSpan.FromDays(1)\n                select p);\n            Assert.AreEqual(\"Product\", query.TableName);\n            AssertFilter(query.Filter, \"(AvailableTime gt '1.00%3A00%3A00')\");\n            Assert.AreEqual(0, query.Selection.Count);\n            Assert.AreEqual(0, query.Ordering.Count);\n        }\n\n        [TestMethod]\n        public void SkipZero()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table => table.Skip(0));\n            Assert.AreEqual(\"Product\", query.TableName);\n            Assert.AreEqual(0, query.Skip);\n            Assert.IsFalse(query.Top.HasValue);\n            Assert.AreEqual(\"$skip=0\", query.ToODataString());\n        }\n\n        [TestMethod]\n        public void TopZero()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table => table.Take(0));\n            Assert.AreEqual(\"Product\", query.TableName);\n            Assert.AreEqual(0, query.Top);\n            Assert.IsFalse(query.Skip.HasValue);\n            Assert.AreEqual(\"$top=0\", query.ToODataString());\n        }\n\n        [TestMethod]\n        public void DoublesSerializedUsingInvariantCulture()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where p.Weight > 1.3f\n                select p);\n            AssertFilter(query.Filter, \"(Weight gt 1.3f)\");\n        }\n\n        [TestMethod]\n        public void DoublesSerializedAsDoubles()\n        {\n            MobileServiceTableQueryDescription query = Compile<Product, Product>(table =>\n                from p in table\n                where (p.SmallId / 100.0) == 2\n                select p);\n            AssertFilter(query.Filter, \"((SmallId div 100.0) eq 2.0)\");\n\n            query = Compile<Product, Product>(table =>\n                from p in table\n                where (p.Weight * 31.213) == 60200000000000000000000000.0\n                select p);\n            AssertFilter(query.Filter, \"((Weight mul 31.213) eq 6.02E+25)\");\n        }\n\n        private static void AssertFilter(QueryNode filter, string expectedFilterStr)\n        {\n            string filterStr = ODataExpressionVisitor.ToODataString(filter);\n            Assert.AreEqual(expectedFilterStr, filterStr);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Table/Serialization/MobileServiceContractResolver.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"serialize\")]\n    [Tag(\"unit\")]\n    public class MobileServiceContractResolverTests\n    {\n        [TestMethod]\n        public void ResolveTableName()\n        {\n            MobileServiceContractResolver contractResolver = new MobileServiceContractResolver();\n\n            List<Tuple<Type, string>> testCases = new List<Tuple<Type, string>>() {\n                new Tuple<Type, string>(typeof(PocoType), \"PocoType\"),\n                new Tuple<Type, string>(typeof(DataContractType), \"DataContractNameFromAttributeType\"),\n                new Tuple<Type, string>(typeof(DataTableType), \"NamedDataTableType\"),\n                new Tuple<Type, string>(typeof(JsonContainerType), \"NamedJsonContainerType\"),\n                new Tuple<Type, string>(typeof(UnnamedJsonContainerType), \"UnnamedJsonContainerType\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                string expected = testCase.Item2;\n\n                var actual = contractResolver.ResolveTableName(input);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Table/Serialization/MobileServiceIsoDateTimeConverter.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.UnitTests.Table.Serialization\n{\n    public class MobileServiceIsoDateTimeConverterTests : TestBase\n    {\n        MobileServiceIsoDateTimeConverter isoDateTimeConverter;\n\n        MobileServiceIsoDateTimeConverter IsoDateTimeConverter\n        {\n            get\n            {\n                if (this.isoDateTimeConverter == null)\n                {\n                    this.isoDateTimeConverter = new MobileServiceIsoDateTimeConverter();\n                }\n\n                return this.isoDateTimeConverter;\n            }\n        }\n\n        [TestMethod]\n        public void CanConvertReturnsTrueForDateTimeDateTimeOffset()\n        {\n            bool canConvert = IsoDateTimeConverter.CanConvert(typeof(DateTime));\n            Assert.IsTrue(canConvert);\n\n            canConvert = IsoDateTimeConverter.CanConvert(typeof(DateTimeOffset));\n            Assert.IsTrue(canConvert);\n        }\n\n        [TestMethod]\n        public void CanConvertReturnsFalseForNotDateTimeDateTimeOffset()\n        {\n            //false\n            bool canConvert = IsoDateTimeConverter.CanConvert(typeof(byte));\n            Assert.IsFalse(canConvert);\n\n            canConvert = IsoDateTimeConverter.CanConvert(typeof(ulong));\n            Assert.IsFalse(canConvert);\n\n            canConvert = IsoDateTimeConverter.CanConvert(typeof(int));\n            Assert.IsFalse(canConvert);\n\n            canConvert = IsoDateTimeConverter.CanConvert(typeof(short));\n            Assert.IsFalse(canConvert);\n\n            canConvert = IsoDateTimeConverter.CanConvert(typeof(byte[]));\n            Assert.IsFalse(canConvert);\n\n            canConvert = IsoDateTimeConverter.CanConvert(typeof(object));\n            Assert.IsFalse(canConvert);\n\n            canConvert = IsoDateTimeConverter.CanConvert(typeof(string));\n            Assert.IsFalse(canConvert);\n\n            canConvert = IsoDateTimeConverter.CanConvert(typeof(bool));\n            Assert.IsFalse(canConvert);\n\n            canConvert = IsoDateTimeConverter.CanConvert(typeof(decimal));\n            Assert.IsFalse(canConvert);\n\n            canConvert = IsoDateTimeConverter.CanConvert(typeof(double));\n            Assert.IsFalse(canConvert);\n\n            canConvert = IsoDateTimeConverter.CanConvert(typeof(long));\n            Assert.IsFalse(canConvert);\n        }\n\n        [TestMethod]\n        public void CanReadShouldReturnTrue()\n        {\n            bool canRead = IsoDateTimeConverter.CanRead;\n\n            Assert.IsTrue(canRead);\n        }\n\n        [TestMethod]\n        public void CanWriteShouldReturnTrue()\n        {\n            bool canWrite = IsoDateTimeConverter.CanWrite;\n\n            Assert.IsTrue(canWrite);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Table/Serialization/MobileServicePrecisionCheckConverter.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class MobileServicePrecisionCheckConverterTests : TestBase\n    {\n        MobileServicePrecisionCheckConverter precisionConverter;\n\n        MobileServicePrecisionCheckConverter PrecisionConverter\n        {\n            get\n            {\n                if (this.precisionConverter == null)\n                {\n                    this.precisionConverter = new MobileServicePrecisionCheckConverter();\n                }\n\n                return this.precisionConverter;\n            }\n        }\n\n        [TestMethod]\n        public void CanConvertReturnsTrueForDecimalDoubleLong()\n        {\n            bool canConvert = PrecisionConverter.CanConvert(typeof(decimal));\n            Assert.IsTrue(canConvert);\n\n            canConvert = PrecisionConverter.CanConvert(typeof(ulong));\n            Assert.IsTrue(canConvert);\n\n            canConvert = PrecisionConverter.CanConvert(typeof(long));\n            Assert.IsTrue(canConvert);\n        }\n\n        [TestMethod]\n        public void CanConvertReturnsFalseForNotDecimalDoubleLong()\n        {\n            //false\n            bool canConvert = PrecisionConverter.CanConvert(typeof(byte));\n            Assert.IsFalse(canConvert);\n\n            canConvert = PrecisionConverter.CanConvert(typeof(int));\n            Assert.IsFalse(canConvert);\n\n            canConvert = PrecisionConverter.CanConvert(typeof(short));\n            Assert.IsFalse(canConvert);\n\n            canConvert = PrecisionConverter.CanConvert(typeof(byte[]));\n            Assert.IsFalse(canConvert);\n\n            canConvert = PrecisionConverter.CanConvert(typeof(object));\n            Assert.IsFalse(canConvert);\n\n            canConvert = PrecisionConverter.CanConvert(typeof(string));\n            Assert.IsFalse(canConvert);\n\n            canConvert = PrecisionConverter.CanConvert(typeof(bool));\n            Assert.IsFalse(canConvert);\n\n            canConvert = PrecisionConverter.CanConvert(typeof(DateTime));\n            Assert.IsFalse(canConvert);\n\n            canConvert = PrecisionConverter.CanConvert(typeof(DateTimeOffset));\n            Assert.IsFalse(canConvert);\n\n            canConvert = PrecisionConverter.CanConvert(typeof(double));\n            Assert.IsFalse(canConvert);\n        }\n\n        [TestMethod]\n        public void CanReadShouldReturnFalse()\n        {\n            bool canRead = PrecisionConverter.CanRead;\n\n            Assert.IsFalse(canRead);\n        }\n\n        [TestMethod]\n        public void CanWriteShouldReturnTrue()\n        {\n            bool canWrite = PrecisionConverter.CanWrite;\n\n            Assert.IsTrue(canWrite);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Table/Serialization/MobileServiceSerializer.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"serialize\")]\n    [Tag(\"unit\")]\n    public class MobileServiceSerializerTests : TestBase\n    {\n        MobileServiceSerializer defaultSerializer;\n        static readonly string MinDateTimeSerializedToJson;\n\n        static MobileServiceSerializerTests()\n        {\n            var settings = new JsonSerializerSettings();\n            settings.DateFormatHandling = DateFormatHandling.IsoDateFormat;\n            settings.DateFormatString = \"yyyy-MM-dd'T'HH:mm:ss.fff'Z'\";\n            MinDateTimeSerializedToJson = JsonConvert.SerializeObject(default(DateTime).ToUniversalTime(), settings);\n        }\n\n        MobileServiceSerializer DefaultSerializer\n        {\n            get\n            {\n                if (this.defaultSerializer == null)\n                {\n                    this.defaultSerializer = new MobileServiceSerializer();\n                }\n\n                return this.defaultSerializer;\n            }\n        }\n\n        [TestMethod]\n        public void GetId()\n        {\n            List<Tuple<object, object>> testCases = new List<Tuple<object, object>>() {\n                new Tuple<object, object>(new BoolType() { Bool = true }, 0),\n                new Tuple<object, object>(new BoolType() { Bool = false, Id = 15 }, 15),\n                new Tuple<object, object>(JToken.Parse(\"{\\\"id\\\":0}\"), 0L),\n                new Tuple<object, object>(JToken.Parse(\"{\\\"id\\\":25}\"), 25L),\n                new Tuple<object, object>(JToken.Parse(\"{\\\"id\\\":0.0}\"), 0.0),\n                new Tuple<object, object>(JToken.Parse(\"{\\\"id\\\":25.0}\"), 25.0),\n                new Tuple<object, object>(JToken.Parse(\"{}\"), null),\n                new Tuple<object, object>(JToken.Parse(\"{\\\"id\\\":null}\"), null),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(BoolType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                var actual = DefaultSerializer.GetId(input, allowDefault: true);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void GetIdNegative()\n        {\n            List<Tuple<object, string>> testCases = new List<Tuple<object, string>>() {\n                new Tuple<object, string>(\"a string\", \"No 'id' member found on type 'System.String'.\"),\n                new Tuple<object, string>(new MissingIdType(), \"No 'id' member found on type 'Microsoft.WindowsAzure.MobileServices.Test.MissingIdType'.\"),\n                new Tuple<object, string>(new PocoType[1], \"No 'id' member found on type 'Microsoft.WindowsAzure.MobileServices.Test.PocoType[]'.\"),\n                new Tuple<object, string>(JToken.Parse(\"25\"), \"No 'id' member found on type 'Newtonsoft.Json.Linq.JValue'.\"),\n                new Tuple<object, string>(JToken.Parse(\"[25]\"), \"No 'id' member found on type 'Newtonsoft.Json.Linq.JArray'.\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                string expected = testCase.Item2;\n\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(input.GetType());\n\n                    DefaultSerializer.GetId(input);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expected);\n            }\n        }\n\n        [TestMethod]\n        public void HasDefaultId()\n        {\n            List<Tuple<object, bool>> testCases = new List<Tuple<object, bool>>() {\n                new Tuple<object, bool>(new BoolType() { Bool = true }, true),\n                new Tuple<object, bool>(new BoolType() { Bool = false, Id = 15 }, false),\n                new Tuple<object, bool>(JToken.Parse(\"{\\\"id\\\":0}\"), true),\n                new Tuple<object, bool>(JToken.Parse(\"{\\\"id\\\":25}\"), false),\n                new Tuple<object, bool>(JToken.Parse(\"{\\\"id\\\":0.0}\"), true),\n                new Tuple<object, bool>(JToken.Parse(\"{\\\"id\\\":25.0}\"), false),\n                new Tuple<object, bool>(JToken.Parse(\"{}\"), true),\n                new Tuple<object, bool>(JToken.Parse(\"{\\\"id\\\":null}\"), true),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                // Need to ensure that the type is registered as a table to force the id property check\n                DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(testCase.Item1.GetType());\n\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                var id = DefaultSerializer.GetId(input, allowDefault: true);\n                var actual = MobileServiceSerializer.IsDefaultId(id);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void HasDefaultIdNegative()\n        {\n            List<Tuple<object, string>> testCases = new List<Tuple<object, string>>() {\n                new Tuple<object, string>(\"a string\", \"No 'id' member found on type 'System.String'.\"),\n                new Tuple<object, string>(new MissingIdType(), \"No 'id' member found on type 'Microsoft.WindowsAzure.MobileServices.Test.MissingIdType'.\"),\n                new Tuple<object, string>(new PocoType[1], \"No 'id' member found on type 'Microsoft.WindowsAzure.MobileServices.Test.PocoType[]'.\"),\n                new Tuple<object, string>(JToken.Parse(\"25\"), \"No 'id' member found on type 'Newtonsoft.Json.Linq.JValue'.\"),\n                new Tuple<object, string>(JToken.Parse(\"[25]\"), \"No 'id' member found on type 'Newtonsoft.Json.Linq.JArray'.\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                string expected = testCase.Item2;\n\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(input.GetType());\n\n                    var id = DefaultSerializer.GetId(input);\n                    MobileServiceSerializer.IsDefaultId(id);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expected);\n            }\n        }\n\n        [TestMethod]\n        public void SetIdToDefault()\n        {\n            List<Tuple<object, object>> testCases = new List<Tuple<object, object>>() {\n                new Tuple<object, object>(new BoolType() { Bool = true, Id = 0 }, 0),\n                new Tuple<object, object>(new BoolType() { Bool = false, Id = 15 }, 0),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                // Need to ensure that the type is registered as a table to force the id property check\n                DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(testCase.Item1.GetType());\n\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                DefaultSerializer.SetIdToDefault(input);\n                var actual = DefaultSerializer.GetId(input, allowDefault: true);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void IgnoreNullValuesCustomSerialization()\n        {\n            MobileServiceSerializer serializer = new MobileServiceSerializer();\n            serializer.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            serializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoType));\n\n            PocoType pocoType = new PocoType();\n\n            string actual = serializer.Serialize(pocoType).ToString();\n            Assert.AreEqual(actual, \"{}\");\n        }\n\n        [TestMethod]\n        public void IndentedFormattingCustomSerialization()\n        {\n            MobileServiceSerializer serializer = new MobileServiceSerializer();\n            serializer.SerializerSettings.Formatting = Formatting.Indented;\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            serializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoType));\n\n            PocoType pocoType = new PocoType();\n\n            string actual = serializer.Serialize(pocoType).ToString();\n            Assert.AreEqual(actual, \"{\" + Environment.NewLine + \"  \\\"PublicField\\\": null,\" + Environment.NewLine + \"  \\\"PublicProperty\\\": null\" + Environment.NewLine + \"}\");\n        }\n\n        [TestMethod]\n        public void CamelCaseCustomSerialization()\n        {\n            MobileServiceSerializer serializer = new MobileServiceSerializer();\n            serializer.SerializerSettings.CamelCasePropertyNames = true;\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            serializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoType));\n\n            PocoType pocoType = new PocoType();\n\n            string actual = serializer.Serialize(pocoType).ToString(Formatting.None);\n            Assert.AreEqual(actual, \"{\\\"publicField\\\":null,\\\"publicProperty\\\":null}\");\n        }\n\n        [TestMethod]\n        public void BoolSerialization()\n        {\n            List<Tuple<BoolType, string>> testCases = new List<Tuple<BoolType, string>>() {\n                new Tuple<BoolType, string>(new BoolType() { Bool = true }, \"{\\\"Bool\\\":true}\"),\n                new Tuple<BoolType, string>(new BoolType() { Bool = false }, \"{\\\"Bool\\\":false}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(BoolType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void BoolDeserialization()\n        {\n            List<Tuple<BoolType, string>> testCases = new List<Tuple<BoolType, string>>() {\n                new Tuple<BoolType, string>(new BoolType() { Bool = true }, \"{\\\"Bool\\\":true}\"),\n                new Tuple<BoolType, string>(new BoolType() { Bool = true }, \"{\\\"Bool\\\":\\\"true\\\"}\"),\n                new Tuple<BoolType, string>(new BoolType() { Bool = true }, \"{\\\"Bool\\\":1}\"),\n                new Tuple<BoolType, string>(new BoolType() { Bool = false }, \"{}\"),\n                new Tuple<BoolType, string>(new BoolType() { Bool = false }, \"{\\\"Bool\\\":false}\"),\n                new Tuple<BoolType, string>(new BoolType() { Bool = false }, \"{\\\"Bool\\\":\\\"false\\\"}\"),\n                new Tuple<BoolType, string>(new BoolType() { Bool = false }, \"{\\\"Bool\\\":0}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(BoolType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                BoolType actual = new BoolType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.Bool, expected.Bool);\n\n                actual = new BoolType();\n                actual.Bool = false;\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.Bool, expected.Bool);\n\n                JArray json = JToken.Parse(\"[\" + input + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<BoolType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.Bool, expected.Bool);\n\n                actual = (BoolType)DefaultSerializer.Deserialize<BoolType>(input);\n\n                Assert.AreEqual(actual.Bool, expected.Bool);\n            }\n        }\n\n        [TestMethod]\n        public void BoolDeserializationNegative()\n        {\n            List<string> testCases = new List<string>() {\n                \"{\\\"Bool\\\":\\\"I can't be parsed\\\"}\"\n            };\n\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase);\n\n                BoolType actual = new BoolType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(BoolType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, \"Error converting value \\\"I can't be parsed\\\" to type 'System.Boolean'. Path 'Bool', line 2, position 30.\");\n            }\n        }\n\n        [TestMethod]\n        public void ByteSerialization()\n        {\n            List<Tuple<ByteType, string>> testCases = new List<Tuple<ByteType, string>>() {\n                new Tuple<ByteType, string>(new ByteType() { Byte = 0 }, \"{\\\"Byte\\\":0}\"),\n                new Tuple<ByteType, string>(new ByteType() { Byte = 1 }, \"{\\\"Byte\\\":1}\"),\n                new Tuple<ByteType, string>(new ByteType() { Byte = Byte.MaxValue }, \"{\\\"Byte\\\":255}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(ByteType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void ByteDeserialization()\n        {\n            List<Tuple<ByteType, string>> testCases = new List<Tuple<ByteType, string>>() {\n                new Tuple<ByteType, string>(new ByteType() { Byte = 0 }, \"{}\"),\n                new Tuple<ByteType, string>(new ByteType() { Byte = 0 }, \"{\\\"Byte\\\":null}\"),\n                new Tuple<ByteType, string>(new ByteType() { Byte = 0 }, \"{\\\"Byte\\\":0}\"),\n                new Tuple<ByteType, string>(new ByteType() { Byte = 1 }, \"{\\\"Byte\\\":1}\"),\n                new Tuple<ByteType, string>(new ByteType() { Byte = 0 }, \"{\\\"Byte\\\":false}\"),\n                new Tuple<ByteType, string>(new ByteType() { Byte = 1 }, \"{\\\"Byte\\\":true}\"),\n                new Tuple<ByteType, string>(new ByteType() { Byte = Byte.MaxValue }, \"{\\\"Byte\\\":255}\"),\n                new Tuple<ByteType, string>(new ByteType() { Byte = Byte.MaxValue }, \"{\\\"Byte\\\":\\\"255\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(ByteType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                ByteType actual = new ByteType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.Byte, expected.Byte);\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new ByteType();\n                    actual.Byte = 15;\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n\n                Assert.AreEqual(actual.Byte, expected.Byte);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<ByteType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.Byte, expected.Byte);\n\n                actual = (ByteType)DefaultSerializer.Deserialize<ByteType>(input);\n\n                Assert.AreEqual(actual.Byte, expected.Byte);\n            }\n        }\n\n        [TestMethod]\n        public void ByteDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"Byte\\\":256}\", \"Error converting value 256 to type 'System.Byte'. Path 'Byte', line 2, position 14.\"),\n                new Tuple<string, string>(\"{\\\"Byte\\\":\\\"256\\\"}\",\"Error converting value \\\"256\\\" to type 'System.Byte'. Path 'Byte', line 2, position 16.\"),\n                new Tuple<string, string>(\"{\\\"Byte\\\":-1}\",\"Error converting value -1 to type 'System.Byte'. Path 'Byte', line 2, position 13.\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item1);\n                var expected = testCase.Item2;\n\n                ByteType actual = new ByteType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(ByteType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expected);\n            }\n        }\n\n        [TestMethod]\n        public void SByteSerialization()\n        {\n            List<Tuple<SByteType, string>> testCases = new List<Tuple<SByteType, string>>() {\n                new Tuple<SByteType, string>(new SByteType() { SByte = 0 }, \"{\\\"SByte\\\":0}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = 1 }, \"{\\\"SByte\\\":1}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = -1 }, \"{\\\"SByte\\\":-1}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = SByte.MaxValue }, \"{\\\"SByte\\\":127}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = SByte.MinValue }, \"{\\\"SByte\\\":-128}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(SByteType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void SByteDeserialization()\n        {\n            List<Tuple<SByteType, string>> testCases = new List<Tuple<SByteType, string>>() {\n                new Tuple<SByteType, string>(new SByteType() { SByte = 0 }, \"{}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = 0 }, \"{\\\"SByte\\\":null}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = 0 }, \"{\\\"SByte\\\":0}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = 1 }, \"{\\\"SByte\\\":1}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = 0 }, \"{\\\"SByte\\\":false}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = 1 }, \"{\\\"SByte\\\":true}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = -1 }, \"{\\\"SByte\\\":-1}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = SByte.MaxValue }, \"{\\\"SByte\\\":127}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = SByte.MinValue }, \"{\\\"SByte\\\":-128}\"),\n                new Tuple<SByteType, string>(new SByteType() { SByte = SByte.MinValue }, \"{\\\"SByte\\\":\\\"-128\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(SByteType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                SByteType actual = new SByteType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.SByte, expected.SByte);\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new SByteType();\n                    actual.SByte = 12;\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n\n                Assert.AreEqual(actual.SByte, expected.SByte);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<SByteType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.SByte, expected.SByte);\n\n                actual = (SByteType)DefaultSerializer.Deserialize<SByteType>(input);\n\n                Assert.AreEqual(actual.SByte, expected.SByte);\n            }\n        }\n\n        [TestMethod]\n        public void SByteDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"SByte\\\":128}\", \"Error converting value 128 to type 'System.SByte'. Path 'SByte', line 1, position 12.\"),\n                new Tuple<string, string>(\"{\\\"SByte\\\":\\\"128\\\"}\",\"Error converting value \\\"128\\\" to type 'System.SByte'. Path 'SByte', line 1, position 14.\"),\n                new Tuple<string, string>(\"{\\\"SByte\\\":-129}\",\"Error converting value -129 to type 'System.SByte'. Path 'SByte', line 1, position 13.\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                SByteType actual = new SByteType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(SByteType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expected);\n            }\n        }\n\n        [TestMethod]\n        public void UShortSerialization()\n        {\n            List<Tuple<UShortType, string>> testCases = new List<Tuple<UShortType, string>>() {\n                new Tuple<UShortType, string>(new UShortType() { UShort = 0 }, \"{\\\"UShort\\\":0}\"),\n                new Tuple<UShortType, string>(new UShortType() { UShort = 1 }, \"{\\\"UShort\\\":1}\"),\n                new Tuple<UShortType, string>(new UShortType() { UShort = UInt16.MaxValue }, \"{\\\"UShort\\\":65535}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(UShortType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void UShortDeserialization()\n        {\n            List<Tuple<UShortType, string>> testCases = new List<Tuple<UShortType, string>>() {\n                new Tuple<UShortType, string>(new UShortType() { UShort = 0 }, \"{}\"),\n                new Tuple<UShortType, string>(new UShortType() { UShort = 0 }, \"{\\\"UShort\\\":null}\"),\n                new Tuple<UShortType, string>(new UShortType() { UShort = 0 }, \"{\\\"UShort\\\":0}\"),\n                new Tuple<UShortType, string>(new UShortType() { UShort = 1 }, \"{\\\"UShort\\\":1}\"),\n                new Tuple<UShortType, string>(new UShortType() { UShort = 0 }, \"{\\\"UShort\\\":false}\"),\n                new Tuple<UShortType, string>(new UShortType() { UShort = 1 }, \"{\\\"UShort\\\":true}\"),\n                new Tuple<UShortType, string>(new UShortType() { UShort = 19 }, \"{\\\"UShort\\\":\\\"19\\\"}\"),\n                new Tuple<UShortType, string>(new UShortType() { UShort = UInt16.MaxValue }, \"{\\\"UShort\\\":65535}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(UShortType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                UShortType actual = new UShortType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.UShort, expected.UShort);\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new UShortType();\n                    actual.UShort = 10;\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n\n                Assert.AreEqual(actual.UShort, expected.UShort);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<UShortType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.UShort, expected.UShort);\n\n                actual = (UShortType)DefaultSerializer.Deserialize<UShortType>(input);\n\n                Assert.AreEqual(actual.UShort, expected.UShort);\n            }\n        }\n\n        [TestMethod]\n        public void UShortDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"UShort\\\":65536}\", \"Error converting value 65536 to type 'System.UInt16'. Path 'UShort', line 1, position 15.\"),\n                new Tuple<string, string>(\"{\\\"UShort\\\":\\\"65536\\\"}\",\"Error converting value \\\"65536\\\" to type 'System.UInt16'. Path 'UShort', line 1, position 17.\"),\n                new Tuple<string, string>(\"{\\\"UShort\\\":-1}\",\"Error converting value -1 to type 'System.UInt16'. Path 'UShort', line 1, position 12.\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                UShortType actual = new UShortType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(UShortType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expected);\n            }\n        }\n\n        [TestMethod]\n        public void IntSerialization()\n        {\n            List<Tuple<IntType, string>> testCases = new List<Tuple<IntType, string>>() {\n                new Tuple<IntType, string>(new IntType() { Id = 0 }, \"{}\"),\n                new Tuple<IntType, string>(new IntType() { Id = -1 }, \"{\\\"id\\\":-1}\"),\n                new Tuple<IntType, string>(new IntType() { Id = 1 }, \"{\\\"id\\\":1}\"),\n                new Tuple<IntType, string>(new IntType() { Id = int.MaxValue }, \"{\\\"id\\\":2147483647}\"),\n                new Tuple<IntType, string>(new IntType() { Id = int.MinValue }, \"{\\\"id\\\":-2147483648}\")\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(IntType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void IntDeserialization()\n        {\n            List<Tuple<IntType, string>> testCases = new List<Tuple<IntType, string>>() {\n                new Tuple<IntType, string>(new IntType() { Id = 0 }, \"{}\"),\n                new Tuple<IntType, string>(new IntType() { Id = 0 }, \"{\\\"id\\\":null}\"),\n                new Tuple<IntType, string>(new IntType() { Id = 0 }, \"{\\\"id\\\":0}\"),\n                new Tuple<IntType, string>(new IntType() { Id = 0 }, \"{\\\"id\\\":false}\"),\n                new Tuple<IntType, string>(new IntType() { Id = 1 }, \"{\\\"id\\\":true}\"),\n                new Tuple<IntType, string>(new IntType() { Id = -1 }, \"{\\\"id\\\":-1}\"),\n                new Tuple<IntType, string>(new IntType() { Id = 1 }, \"{\\\"id\\\":1}\"),\n                new Tuple<IntType, string>(new IntType() { Id = int.MaxValue }, \"{\\\"id\\\":2147483647}\"),\n                new Tuple<IntType, string>(new IntType() { Id = int.MinValue }, \"{\\\"id\\\":-2147483648}\")\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(IntType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                IntType actual = new IntType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.Id, expected.Id);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<IntType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.Id, expected.Id);\n\n                actual = (IntType)DefaultSerializer.Deserialize<IntType>(input);\n\n                Assert.AreEqual(actual.Id, expected.Id);\n            }\n        }\n\n        [TestMethod]\n        public void IntDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"id\\\":2147483648}\", \"Error converting value 2147483648 to type 'System.Int32'. Path 'id', line 1, position 16.\"),\n                new Tuple<string, string>(\"{\\\"id\\\":-2147483649}\", \"Error converting value -2147483649 to type 'System.Int32'. Path 'id', line 1, position 17.\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                IntType actual = new IntType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(IntType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expected);\n            }\n        }\n\n        [TestMethod]\n        public void UIntSerialization()\n        {\n            List<Tuple<UIntType, string>> testCases = new List<Tuple<UIntType, string>>() {\n                new Tuple<UIntType, string>(new UIntType() { UInt = 0 }, \"{\\\"UInt\\\":0}\"),\n                new Tuple<UIntType, string>(new UIntType() { UInt = 1 }, \"{\\\"UInt\\\":1}\"),\n                new Tuple<UIntType, string>(new UIntType() { UInt = UInt32.MaxValue }, \"{\\\"UInt\\\":4294967295}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(UIntType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void UIntDeserialization()\n        {\n            List<Tuple<UIntType, string>> testCases = new List<Tuple<UIntType, string>>() {\n                new Tuple<UIntType, string>(new UIntType() { UInt = 0 }, \"{}\"),\n                new Tuple<UIntType, string>(new UIntType() { UInt = 0 }, \"{\\\"UInt\\\":null}\"),\n                new Tuple<UIntType, string>(new UIntType() { UInt = 0 }, \"{\\\"UInt\\\":0}\"),\n                new Tuple<UIntType, string>(new UIntType() { UInt = 1 }, \"{\\\"UInt\\\":1}\"),\n                new Tuple<UIntType, string>(new UIntType() { UInt = 0 }, \"{\\\"UInt\\\":false}\"),\n                new Tuple<UIntType, string>(new UIntType() { UInt = 1 }, \"{\\\"UInt\\\":true}\"),\n                new Tuple<UIntType, string>(new UIntType() { UInt = 150 }, \"{\\\"UInt\\\":\\\"150\\\"}\"),\n                new Tuple<UIntType, string>(new UIntType() { UInt = UInt32.MaxValue }, \"{\\\"UInt\\\":4294967295}\"),\n                new Tuple<UIntType, string>(new UIntType() { UInt = UInt32.MaxValue }, \"{\\\"UInt\\\":\\\"4294967295\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(UIntType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                UIntType actual = new UIntType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.UInt, expected.UInt);\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new UIntType();\n                    actual.UInt = 12;\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n\n                Assert.AreEqual(actual.UInt, expected.UInt);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<UIntType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.UInt, expected.UInt);\n\n                actual = (UIntType)DefaultSerializer.Deserialize<UIntType>(input);\n\n                Assert.AreEqual(actual.UInt, expected.UInt);\n            }\n        }\n\n        [TestMethod]\n        public void UIntDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"UInt\\\":4294967296}\", \"Error converting value 4294967296 to type 'System.UInt32'. Path 'UInt', line 1, position 18.\"),\n                new Tuple<string, string>(\"{\\\"UInt\\\":\\\"4294967296\\\"}\", \"Error converting value \\\"4294967296\\\" to type 'System.UInt32'. Path 'UInt', line 1, position 20.\"),\n                new Tuple<string, string>(\"{\\\"UInt\\\":-1}\", \"Error converting value -1 to type 'System.UInt32'. Path 'UInt', line 1, position 10.\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                UIntType actual = new UIntType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(UIntType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expected);\n            }\n        }\n\n        [TestMethod]\n        public void LongSerialization()\n        {\n            long twoToTheFifthyThird = 0x20000000000000; // 2^53\n            List<Tuple<LongType, string>> testCases = new List<Tuple<LongType, string>>() {\n                new Tuple<LongType, string>(new LongType() { Long = 0 }, \"{\\\"Long\\\":0}\"),\n                new Tuple<LongType, string>(new LongType() { Long = -1 }, \"{\\\"Long\\\":-1}\"),\n                new Tuple<LongType, string>(new LongType() { Long = 1 }, \"{\\\"Long\\\":1}\"),\n                new Tuple<LongType, string>(new LongType() { Long = twoToTheFifthyThird }, \"{\\\"Long\\\":9007199254740992}\"), // All integers <= 2^53 will fit in a double; this should be our upper limit\n                new Tuple<LongType, string>(new LongType() { Long = -twoToTheFifthyThird }, \"{\\\"Long\\\":-9007199254740992}\"), // All integers >= -2^53 will fit in a double; this should be our lower limit\n                new Tuple<LongType, string>(new LongType() { Long = twoToTheFifthyThird - 1 }, \"{\\\"Long\\\":9007199254740991}\"),\n                new Tuple<LongType, string>(new LongType() { Long = -twoToTheFifthyThird + 1 }, \"{\\\"Long\\\":-9007199254740991}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(LongType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void LongSerializationNegative()\n        {\n            long twoToTheFifthyThird = 0x20000000000000; // 2^53\n            List<Tuple<LongType, string>> testCases = new List<Tuple<LongType, string>>() {\n                new Tuple<LongType, string>(new LongType() { Long = twoToTheFifthyThird + 1 },\"The value 9007199254740993 for member Long is outside the valid range for numeric columns.\"), // 2^53 + 1\n                new Tuple<LongType, string>(new LongType() { Long = -twoToTheFifthyThird - 1 },\"The value -9007199254740993 for member Long is outside the valid range for numeric columns.\"), // -2^53 - 1\n                new Tuple<LongType, string>(new LongType() { Long = long.MaxValue },\"The value 9223372036854775807 for member Long is outside the valid range for numeric columns.\"), // long.MaxValue\n                new Tuple<LongType, string>(new LongType() { Long = long.MinValue }, \"The value -9223372036854775808 for member Long is outside the valid range for numeric columns.\")\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expectedError = testCase.Item2;\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(LongType));\n\n                    DefaultSerializer.Serialize(input);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expectedError);\n            }\n        }\n\n        [TestMethod]\n        public void LongDeserialization()\n        {\n            long twoToTheFifthyThird = 0x20000000000000; // 2^53\n            List<Tuple<LongType, string>> testCases = new List<Tuple<LongType, string>>() {\n                new Tuple<LongType, string>(new LongType() { Long = 0 }, \"{}\"),\n                new Tuple<LongType, string>(new LongType() { Long = 0 }, \"{\\\"Long\\\":null}\"),\n                new Tuple<LongType, string>(new LongType() { Long = 0 }, \"{\\\"Long\\\":false}\"),\n                new Tuple<LongType, string>(new LongType() { Long = 1 }, \"{\\\"Long\\\":true}\"),\n                new Tuple<LongType, string>(new LongType() { Long = -1 }, \"{\\\"Long\\\":-1}\"),\n                new Tuple<LongType, string>(new LongType() { Long = 1 }, \"{\\\"Long\\\":1}\"),\n                new Tuple<LongType, string>(new LongType() { Long = -55 }, \"{\\\"Long\\\":\\\"-55\\\"}\"),\n                new Tuple<LongType, string>(new LongType() { Long = twoToTheFifthyThird }, \"{\\\"Long\\\":9007199254740992}\"),\n                new Tuple<LongType, string>(new LongType() { Long = -twoToTheFifthyThird }, \"{\\\"Long\\\":-9007199254740992}\"),\n                new Tuple<LongType, string>(new LongType() { Long = long.MinValue }, \"{\\\"Long\\\":-9223372036854775808}\"), \n                new Tuple<LongType, string>(new LongType() { Long = long.MaxValue }, \"{\\\"Long\\\":9223372036854775807}\"),\n                new Tuple<LongType, string>(new LongType() { Long = long.MinValue }, \"{\\\"Long\\\":-9.2233720368547758E+18}\"), // There is a loss of precision here, but we'll accept it when deserializing.\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(LongType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                LongType actual = new LongType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.Long, expected.Long);\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new LongType();\n                    actual.Long = 62;\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n\n                Assert.AreEqual(actual.Long, expected.Long);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<LongType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.Long, expected.Long);\n\n                actual = (LongType)DefaultSerializer.Deserialize<LongType>(input);\n\n                Assert.AreEqual(actual.Long, expected.Long);\n            }\n        }\n\n        [Tag(\"notWP81\")]\n        [Tag(\"notWP80\")]\n        [Tag(\"notWP75\")]\n        [Tag(\"notXamarin\")]\n        [TestMethod]\n        public void LongDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"Long\\\":9.2233720368547758E+18}\",\"Error converting value 9.22337203685478E+18 to type 'System.Int64'. Path 'Long', line 1, position 30.\"),  // Fails because this will be read as a double, which then doesn't convert into a long      \n                new Tuple<string, string>(\"{\\\"Long\\\":9223372036854775808}\",\"Error converting value 9223372036854775808 to type 'System.Int64'. Path 'Long', line 1, position 27.\"), // long.MaxValue + 1\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expectedError = testCase.Item2;\n\n                LongType actual = new LongType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(LongType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expectedError);\n            }\n        }\n\n        [TestMethod]\n        public void ULongSerialization()\n        {\n            ulong twoToTheFifthyThird = 0x20000000000000; // 2^53\n            List<Tuple<ULongType, string>> testCases = new List<Tuple<ULongType, string>>() {\n                new Tuple<ULongType, string>(new ULongType() { ULong = 0 }, \"{\\\"ULong\\\":0}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = 1 }, \"{\\\"ULong\\\":1}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = twoToTheFifthyThird - 1 },  \"{\\\"ULong\\\":9007199254740991}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = twoToTheFifthyThird },  \"{\\\"ULong\\\":9007199254740992}\"), // All integers <= 2^53 will fit in a double; this should be our upper limit\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(ULongType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void ULongSerializationNegative()\n        {\n            ulong twoToTheFifthyThird = 0x20000000000000; // 2^53\n            List<Tuple<ULongType, string>> testCases = new List<Tuple<ULongType, string>>() {\n                new Tuple<ULongType, string>(new ULongType() { ULong = twoToTheFifthyThird + 1 },\"The value 9007199254740993 for member ULong is outside the valid range for numeric columns.\"), // 2^53 + 1\n                new Tuple<ULongType, string>(new ULongType() { ULong = ulong.MaxValue },\"The value 18446744073709551615 for member ULong is outside the valid range for numeric columns.\") // ulong.MaxValue\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expectedError = testCase.Item2;\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(ULongType));\n\n                    DefaultSerializer.Serialize(input);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expectedError);\n            }\n        }\n\n        [TestMethod]\n        public void ULongDeserialization()\n        {\n            ulong twoToTheFifthyThird = 0x20000000000000; // 2^53\n            List<Tuple<ULongType, string>> testCases = new List<Tuple<ULongType, string>>() {\n                new Tuple<ULongType, string>(new ULongType() { ULong = 0 }, \"{}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = 0 }, \"{\\\"ULong\\\":null}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = 0 }, \"{\\\"ULong\\\":0}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = 1 }, \"{\\\"ULong\\\":1}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = 0 }, \"{\\\"ULong\\\":false}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = 1 }, \"{\\\"ULong\\\":true}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = 15 }, \"{\\\"ULong\\\":\\\"15\\\"}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = ulong.MaxValue }, \"{\\\"ULong\\\":\\\"18446744073709551615\\\"}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = twoToTheFifthyThird - 1 },  \"{\\\"ULong\\\":9007199254740991}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = twoToTheFifthyThird + 1 },  \"{\\\"ULong\\\":9007199254740993}\"),\n                new Tuple<ULongType, string>(new ULongType() { ULong = twoToTheFifthyThird },  \"{\\\"ULong\\\":9007199254740992}\"), // All integers <= 2^53 will fit in a double; this should be our upper limit\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(ULongType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                ULongType actual = new ULongType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.ULong, expected.ULong);\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new ULongType();\n                    actual.ULong = 19;\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n\n                Assert.AreEqual(actual.ULong, expected.ULong);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<ULongType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.ULong, expected.ULong);\n\n                actual = (ULongType)DefaultSerializer.Deserialize<ULongType>(input);\n\n                Assert.AreEqual(actual.ULong, expected.ULong);\n            }\n        }\n\n        [Tag(\"notWP81\")]\n        [Tag(\"notWP80\")]\n        [Tag(\"notWP75\")]\n        [Tag(\"notXamarin\")]\n        [TestMethod]\n        public void ULongDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"ULong\\\":18446744073709551616}\",\"Error converting value 18446744073709551616 to type 'System.UInt64'. Path 'ULong', line 1, position 29.\"), // ulong.MaxValue + 1\n                new Tuple<string, string>(\"{\\\"ULong\\\":-1}\",\"Error converting value -1 to type 'System.UInt64'. Path 'ULong', line 1, position 11.\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                ULongType actual = new ULongType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(ULongType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expected);\n            }\n        }\n\n        [Tag(\"notXamarin\")]\n        [TestMethod]        \n        public void FloatSerialization()\n        {\n            List<Tuple<FloatType, string>> testCases = new List<Tuple<FloatType, string>>() {\n                new Tuple<FloatType, string>(new FloatType() { Float = 0 }, \"{\\\"Float\\\":0.0}\"),   \n                new Tuple<FloatType, string>(new FloatType() { Float = -1 }, \"{\\\"Float\\\":-1.0}\"),  \n                new Tuple<FloatType, string>(new FloatType() { Float = 1 }, \"{\\\"Float\\\":1.0}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = float.Epsilon }, \"{\\\"Float\\\":1.401298E-45}\"),  \n                new Tuple<FloatType, string>(new FloatType() { Float = -float.Epsilon }, \"{\\\"Float\\\":-1.401298E-45}\"), \n                new Tuple<FloatType, string>(new FloatType() { Float = float.MaxValue }, \"{\\\"Float\\\":3.40282347E+38}\"), \n                new Tuple<FloatType, string>(new FloatType() { Float = float.MinValue }, \"{\\\"Float\\\":-3.40282347E+38}\")\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(FloatType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void FloatDeserialization()\n        {\n            List<Tuple<FloatType, string>> testCases = new List<Tuple<FloatType, string>>() {\n                new Tuple<FloatType, string>(new FloatType() { Float = 0 }, \"{}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = 0 }, \"{\\\"Float\\\":null}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = 0 }, \"{\\\"Float\\\":0}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = 0 }, \"{\\\"Float\\\":false}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = 1 }, \"{\\\"Float\\\":true}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = 5.8f }, \"{\\\"Float\\\":\\\"5.8\\\"}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = -1 }, \"{\\\"Float\\\":-1}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = 1 }, \"{\\\"Float\\\":1}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = 0.0F }, \"{\\\"Float\\\":4.94065645841247E-325}\"), \n                new Tuple<FloatType, string>(new FloatType() { Float = 0.0F }, \"{\\\"Float\\\":-4.94065645841247E-325}\"), \n                new Tuple<FloatType, string>(new FloatType() { Float = float.Epsilon }, \"{\\\"Float\\\":1.401298E-45}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = -float.Epsilon }, \"{\\\"Float\\\":-1.401298E-45}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = float.Epsilon }, \"{\\\"Float\\\":1.4012984643248171E-45}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = -float.Epsilon }, \"{\\\"Float\\\":-1.4012984643248171E-45}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = float.Epsilon }, \"{\\\"Float\\\":1.4012984643248171E-46}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = -float.Epsilon }, \"{\\\"Float\\\":-1.4012984643248171E-46}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = float.MaxValue }, \"{\\\"Float\\\":3.40282347E+38}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = float.MinValue }, \"{\\\"Float\\\":-3.40282347E+38}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = float.MaxValue }, \"{\\\"Float\\\":3.4028234663852886E+38}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = float.MinValue }, \"{\\\"Float\\\":-3.4028234663852886E+38}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = float.MinValue }, \"{\\\"Float\\\":\\\"-3.4028234663852886E+38\\\"}\"),\n                new Tuple<FloatType, string>(new FloatType() { Float = float.MaxValue }, \"{\\\"Float\\\":3.40282346638528865E+38}\"),  \n                new Tuple<FloatType, string>(new FloatType() { Float = float.MinValue }, \"{\\\"Float\\\":-3.40282346638528865E+38}\"), \n                new Tuple<FloatType, string>(new FloatType() { Float = float.PositiveInfinity }, \"{\\\"Float\\\":3.4028234663852887E+39}\"),  \n                new Tuple<FloatType, string>(new FloatType() { Float = float.NegativeInfinity }, \"{\\\"Float\\\":-3.4028234663852887E+39}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(FloatType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                FloatType actual = new FloatType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                if (float.IsPositiveInfinity(expected.Float))\n                {\n                    Assert.IsTrue(float.IsPositiveInfinity(actual.Float));\n                }\n                else if (float.IsNegativeInfinity(expected.Float))\n                {\n                    Assert.IsTrue(float.IsNegativeInfinity(actual.Float));\n                }\n                else\n                {\n                    Assert.AreEqual(actual.Float, expected.Float);\n                }\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new FloatType();\n                    actual.Float = 34.6F;\n                    DefaultSerializer.Deserialize(input, actual);\n\n                    if (float.IsPositiveInfinity(expected.Float))\n                    {\n                        Assert.IsTrue(float.IsPositiveInfinity(actual.Float));\n                    }\n                    else if (float.IsNegativeInfinity(expected.Float))\n                    {\n                        Assert.IsTrue(float.IsNegativeInfinity(actual.Float));\n                    }\n                    else\n                    {\n                        Assert.AreEqual(actual.Float, expected.Float);\n                    }\n                }\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<FloatType>(json).FirstOrDefault();\n\n                if (float.IsPositiveInfinity(expected.Float))\n                {\n                    Assert.IsTrue(float.IsPositiveInfinity(actual.Float));\n                }\n                else if (float.IsNegativeInfinity(expected.Float))\n                {\n                    Assert.IsTrue(float.IsNegativeInfinity(actual.Float));\n                }\n                else\n                {\n                    Assert.AreEqual(actual.Float, expected.Float);\n                }\n\n                actual = DefaultSerializer.Deserialize<FloatType>(input);\n\n                if (float.IsPositiveInfinity(expected.Float))\n                {\n                    Assert.IsTrue(float.IsPositiveInfinity(actual.Float));\n                }\n                else if (float.IsNegativeInfinity(expected.Float))\n                {\n                    Assert.IsTrue(float.IsNegativeInfinity(actual.Float));\n                }\n                else\n                {\n                    Assert.AreEqual(actual.Float, expected.Float);\n                }\n            }\n        }\n\n        [Tag(\"notWP75\")]\n        [Tag(\"notXamarin\")]\n        [TestMethod]\n        public void FloatDeserializationNegative()\n        {\n            List<string> testCases = new List<string>() {\n                \"{\\\"Float\\\":1.7976931348623157E+309}\",      // Larger double.MaxValue\n                \"{\\\"Float\\\":-1.7976931348623157E+309}\",     // Larger double.MinValue\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase;\n\n                FloatType actual = new FloatType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(FloatType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.Contains(actualError.Message, \"is not a valid number. Path 'Float'\");\n            }\n        }\n\n        [TestMethod]\n        public void DoubleSerialization()\n        {\n            List<Tuple<DoubleType, string>> testCases = new List<Tuple<DoubleType, string>>() {\n                new Tuple<DoubleType, string>(new DoubleType() { Double = 0 }, \"{\\\"Double\\\":0.0}\"),      \n                new Tuple<DoubleType, string>(new DoubleType() { Double = -1 }, \"{\\\"Double\\\":-1.0}\"), \n                new Tuple<DoubleType, string>(new DoubleType() { Double = 1 }, \"{\\\"Double\\\":1.0}\"),  \n                new Tuple<DoubleType, string>(new DoubleType() { Double = double.Epsilon }, \"{\\\"Double\\\":4.94065645841247E-324}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = -double.Epsilon }, \"{\\\"Double\\\":-4.94065645841247E-324}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = double.MaxValue }, \"{\\\"Double\\\":1.7976931348623157E+308}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = double.MinValue }, \"{\\\"Double\\\":-1.7976931348623157E+308}\")\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DoubleType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void DoubleDeserialization()\n        {\n            List<Tuple<DoubleType, string>> testCases = new List<Tuple<DoubleType, string>>() {\n                new Tuple<DoubleType, string>(new DoubleType() { Double = 0 }, \"{}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = 0 }, \"{\\\"Double\\\":null}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = 0 }, \"{\\\"Double\\\":false}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = 1 }, \"{\\\"Double\\\":true}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = 5.5 }, \"{\\\"Double\\\":\\\"5.5\\\"}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = 0 }, \"{\\\"Double\\\":0}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = -1 }, \"{\\\"Double\\\":-1}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = 1 }, \"{\\\"Double\\\":1}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = 0 }, \"{\\\"Double\\\":4.94065645841247E-325}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = 0 }, \"{\\\"Double\\\":-4.94065645841247E-325}\"), \n                new Tuple<DoubleType, string>(new DoubleType() { Double = double.Epsilon }, \"{\\\"Double\\\":4.94065645841247E-324}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = -double.Epsilon }, \"{\\\"Double\\\":-4.94065645841247E-324}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = double.MaxValue }, \"{\\\"Double\\\":1.7976931348623157E+308}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = double.MinValue }, \"{\\\"Double\\\":-1.7976931348623157E+308}\"),\n                new Tuple<DoubleType, string>(new DoubleType() { Double = double.MaxValue }, \"{\\\"Double\\\":1.79769313486231575E+308}\"),  // We're ok with lossing precision here; note the extra 5 digit at the end\n                new Tuple<DoubleType, string>(new DoubleType() { Double = double.MinValue }, \"{\\\"Double\\\":-1.79769313486231575E+308}\"), // We're ok with lossing precision here; note the extra 5 digit at the end\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DoubleType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                DoubleType actual = new DoubleType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                if (double.IsPositiveInfinity(expected.Double))\n                {\n                    Assert.IsTrue(double.IsPositiveInfinity(actual.Double));\n                }\n                else if (double.IsNegativeInfinity(expected.Double))\n                {\n                    Assert.IsTrue(double.IsNegativeInfinity(actual.Double));\n                }\n                else\n                {\n                    Assert.AreEqual(actual.Double, expected.Double);\n                }\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new DoubleType();\n                    actual.Double = 34.6;\n                    DefaultSerializer.Deserialize(input, actual);\n\n                    if (double.IsPositiveInfinity(expected.Double))\n                    {\n                        Assert.IsTrue(double.IsPositiveInfinity(actual.Double));\n                    }\n                    else if (double.IsNegativeInfinity(expected.Double))\n                    {\n                        Assert.IsTrue(double.IsNegativeInfinity(actual.Double));\n                    }\n                    else\n                    {\n                        Assert.AreEqual(actual.Double, expected.Double);\n                    }\n                }\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<DoubleType>(json).FirstOrDefault();\n\n                if (double.IsPositiveInfinity(expected.Double))\n                {\n                    Assert.IsTrue(double.IsPositiveInfinity(actual.Double));\n                }\n                else if (double.IsNegativeInfinity(expected.Double))\n                {\n                    Assert.IsTrue(double.IsNegativeInfinity(actual.Double));\n                }\n                else\n                {\n                    Assert.AreEqual(actual.Double, expected.Double);\n                }\n\n                actual = DefaultSerializer.Deserialize<DoubleType>(input);\n\n                if (double.IsPositiveInfinity(expected.Double))\n                {\n                    Assert.IsTrue(double.IsPositiveInfinity(actual.Double));\n                }\n                else if (double.IsNegativeInfinity(expected.Double))\n                {\n                    Assert.IsTrue(double.IsNegativeInfinity(actual.Double));\n                }\n                else\n                {\n                    Assert.AreEqual(actual.Double, expected.Double);\n                }\n            }\n        }\n\n        [Tag(\"notXamarin\")]        \n        [Tag(\"notWP75\")]\n        [TestMethod]\n        public void DoubleDeserializationNegative()\n        {\n            List<string> testCases = new List<string>() {\n                \"{\\\"Double\\\":1.7976931348623157E+309}\",\n                \"{\\\"Double\\\":-1.7976931348623157E+309}\",\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase;\n\n                DoubleType actual = new DoubleType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DoubleType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.Contains(actualError.Message, \"is not a valid number. Path 'Double'\");\n            }\n        }\n\n        [TestMethod]\n        public void DecimalSerialization()\n        {\n            decimal twoToTheFifthyThird = 0x20000000000000; // 2^53\n            List<Tuple<DecimalType, string>> testCases = new List<Tuple<DecimalType, string>>() {\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 0 }, \"{\\\"Decimal\\\":0.0}\"),    \n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -1 }, \"{\\\"Decimal\\\":-1.0}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 1 }, \"{\\\"Decimal\\\":1.0}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = twoToTheFifthyThird }, \"{\\\"Decimal\\\":9007199254740992.0}\"), // All integers <= 2^53 will fit in a double; this should be our upper limit\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -twoToTheFifthyThird }, \"{\\\"Decimal\\\":-9007199254740992.0}\"), // All integers >= -2^53 will fit in a double; this should be our lower limit\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = twoToTheFifthyThird - 1 }, \"{\\\"Decimal\\\":9007199254740991.0}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -twoToTheFifthyThird + 1 }, \"{\\\"Decimal\\\":-9007199254740991.0}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 9007199.25474099m }, \"{\\\"Decimal\\\":9007199.25474099}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -99999999999999.9m }, \"{\\\"Decimal\\\":-99999999999999.9}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -9999999999999.99m }, \"{\\\"Decimal\\\":-9999999999999.99}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -999999999999.999m }, \"{\\\"Decimal\\\":-999999999999.999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -99999999999.9999m }, \"{\\\"Decimal\\\":-99999999999.9999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -9999999999.99999m }, \"{\\\"Decimal\\\":-9999999999.99999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -999999999.999999m }, \"{\\\"Decimal\\\":-999999999.999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -99999999.9999999m }, \"{\\\"Decimal\\\":-99999999.9999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -9999999.99999999m }, \"{\\\"Decimal\\\":-9999999.99999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -999999.999999999m }, \"{\\\"Decimal\\\":-999999.999999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -99999.9999999999m }, \"{\\\"Decimal\\\":-99999.9999999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -9999.99999999999m }, \"{\\\"Decimal\\\":-9999.99999999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -999.999999999999m }, \"{\\\"Decimal\\\":-999.999999999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -99.9999999999999m }, \"{\\\"Decimal\\\":-99.9999999999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -9.99999999999999m }, \"{\\\"Decimal\\\":-9.99999999999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 99999999999999.9m }, \"{\\\"Decimal\\\":99999999999999.9}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 9999999999999.99m }, \"{\\\"Decimal\\\":9999999999999.99}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 999999999999.999m }, \"{\\\"Decimal\\\":999999999999.999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 99999999999.9999m }, \"{\\\"Decimal\\\":99999999999.9999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 9999999999.99999m }, \"{\\\"Decimal\\\":9999999999.99999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 999999999.999999m }, \"{\\\"Decimal\\\":999999999.999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 99999999.9999999m }, \"{\\\"Decimal\\\":99999999.9999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 9999999.99999999m }, \"{\\\"Decimal\\\":9999999.99999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 999999.999999999m }, \"{\\\"Decimal\\\":999999.999999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 99999.9999999999m }, \"{\\\"Decimal\\\":99999.9999999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 9999.99999999999m }, \"{\\\"Decimal\\\":9999.99999999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 999.999999999999m }, \"{\\\"Decimal\\\":999.999999999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 99.9999999999999m }, \"{\\\"Decimal\\\":99.9999999999999}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 9.99999999999999m }, \"{\\\"Decimal\\\":9.99999999999999}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DecimalType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void DecimalSerializationNegative()\n        {\n            decimal twoToTheFifthyThird = 9007199254740992.0m; // 2^53\n            string errorString = \"The value {0} for member Decimal is outside the valid range for numeric columns.\";\n            List<Tuple<DecimalType, string>> testCases = new List<Tuple<DecimalType, string>>() {\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = twoToTheFifthyThird + 1 }, string.Format(errorString, \"9007199254740993.0\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -twoToTheFifthyThird - 1 }, string.Format(errorString, \"-9007199254740993.0\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = decimal.MaxValue }, string.Format(errorString, \"79228162514264337593543950335\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = decimal.MinValue }, string.Format(errorString, \"-79228162514264337593543950335\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 90071992.547409920m }, string.Format(errorString, \"90071992.547409920\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -90071992.547409920m }, string.Format(errorString, \"-90071992.547409920\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -100000000000000.1m }, string.Format(errorString, \"-100000000000000.1\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -10000000000000.01m }, string.Format(errorString, \"-10000000000000.01\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -1000000000000.001m }, string.Format(errorString, \"-1000000000000.001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -100000000000.0001m }, string.Format(errorString, \"-100000000000.0001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -10000000000.00001m }, string.Format(errorString, \"-10000000000.00001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -1000000000.000001m }, string.Format(errorString, \"-1000000000.000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -100000000.0000001m }, string.Format(errorString, \"-100000000.0000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -10000000.00000001m }, string.Format(errorString, \"-10000000.00000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -1000000.000000001m }, string.Format(errorString, \"-1000000.000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -100000.0000000001m }, string.Format(errorString, \"-100000.0000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -10000.00000000001m }, string.Format(errorString, \"-10000.00000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -1000.000000000001m }, string.Format(errorString, \"-1000.000000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -100.0000000000001m }, string.Format(errorString, \"-100.0000000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -10.00000000000001m }, string.Format(errorString, \"-10.00000000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -1.000000000000001m }, string.Format(errorString, \"-1.000000000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 100000000000000.1m }, string.Format(errorString, \"100000000000000.1\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 10000000000000.01m }, string.Format(errorString, \"10000000000000.01\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 1000000000000.001m }, string.Format(errorString, \"1000000000000.001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 100000000000.0001m }, string.Format(errorString, \"100000000000.0001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 10000000000.00001m }, string.Format(errorString, \"10000000000.00001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 1000000000.000001m }, string.Format(errorString, \"1000000000.000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 100000000.0000001m }, string.Format(errorString, \"100000000.0000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 10000000.00000001m }, string.Format(errorString, \"10000000.00000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 1000000.000000001m }, string.Format(errorString, \"1000000.000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 100000.0000000001m }, string.Format(errorString, \"100000.0000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 10000.00000000001m }, string.Format(errorString, \"10000.00000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 1000.000000000001m }, string.Format(errorString, \"1000.000000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 100.0000000000001m }, string.Format(errorString, \"100.0000000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 10.00000000000001m }, string.Format(errorString, \"10.00000000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 1.000000000000001m }, string.Format(errorString, \"1.000000000000001\")),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 10000000000000000m }, string.Format(errorString, \"10000000000000000\")),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expectedError = testCase.Item2;\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DecimalType));\n\n                    DefaultSerializer.Serialize(input);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expectedError);\n            }\n        }\n\n        [TestMethod]\n        public void DecimalDeserialization()\n        {\n            decimal twoToTheFifthyThird = 0x20000000000000; // 2^53\n            List<Tuple<DecimalType, string>> testCases = new List<Tuple<DecimalType, string>>() {\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 0 }, \"{\\\"Decimal\\\":0}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -1 }, \"{\\\"Decimal\\\":-1}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 1 }, \"{\\\"Decimal\\\":1}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 1 }, \"{\\\"Decimal\\\":true}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 0 }, \"{\\\"Decimal\\\":false}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = twoToTheFifthyThird }, \"{\\\"Decimal\\\":9007199254740992}\"), \n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -twoToTheFifthyThird }, \"{\\\"Decimal\\\":-9007199254740992}\"), \n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = twoToTheFifthyThird - 1 }, \"{\\\"Decimal\\\":9007199254740991}\"),   \n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -twoToTheFifthyThird + 1 }, \"{\\\"Decimal\\\":-9007199254740991}\"), \n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = twoToTheFifthyThird + 1 }, \"{\\\"Decimal\\\":9007199254740993}\"),  \n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = -twoToTheFifthyThird - 1 }, \"{\\\"Decimal\\\":-9007199254740993}\"), \n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 0 }, \"{\\\"Decimal\\\":null}\"),\n                new Tuple<DecimalType, string>(new DecimalType() { Decimal = 5.00M }, \"{\\\"Decimal\\\":\\\"5.00\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DecimalType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                DecimalType actual = new DecimalType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.Decimal, expected.Decimal);\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new DecimalType();\n                    actual.Decimal = 34.5M;\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n\n                Assert.AreEqual(actual.Decimal, expected.Decimal);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<DecimalType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.Decimal, expected.Decimal);\n\n                actual = (DecimalType)DefaultSerializer.Deserialize<DecimalType>(input);\n\n                Assert.AreEqual(actual.Decimal, expected.Decimal);\n            }\n        }\n\n        [TestMethod]\n        public void DecimalDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"Decimal\\\":-7.9228162514264338E+28}\",\"Error converting value -7.92281625142643E+28 to type 'System.Decimal'. Path 'Decimal', line 1, position 34.\"), \n                new Tuple<string, string>(\"{\\\"Decimal\\\":7.9228162514264338E+28}\",\"Error converting value 7.92281625142643E+28 to type 'System.Decimal'. Path 'Decimal', line 1, position 33.\"), \n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                DecimalType actual = new DecimalType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DecimalType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expected);\n            }\n        }\n\n        [TestMethod]\n        public void StringSerialization()\n        {\n            List<Tuple<StringType, string>> testCases = new List<Tuple<StringType, string>>() {\n                new Tuple<StringType, string>(new StringType() { String = null }, \"{\\\"String\\\":null}\"),\n                new Tuple<StringType, string>(new StringType() { String = \"\" }, \"{\\\"String\\\":\\\"\\\"}\"),\n                new Tuple<StringType, string>(new StringType() { String = \" \" }, \"{\\\"String\\\":\\\" \\\"}\"),\n                new Tuple<StringType, string>(new StringType() { String = \"\\n\" }, \"{\\\"String\\\":\\\"\\\\n\\\"}\"),\n                new Tuple<StringType, string>(new StringType() { String = \"\\t\" }, \"{\\\"String\\\":\\\"\\\\t\\\"}\"), \n                new Tuple<StringType, string>(new StringType() { String = \"hello\" }, \"{\\\"String\\\":\\\"hello\\\"}\"), \n                new Tuple<StringType, string>(new StringType() { String = \"\\\"hello\\\"\" }, \"{\\\"String\\\":\\\"\\\\\\\"hello\\\\\\\"\\\"}\"), \n                new Tuple<StringType, string>(new StringType() { String = new string('*', 1025) }, \"{\\\"String\\\":\\\"*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************\\\"}\"), \n                new Tuple<StringType, string>(new StringType() { String = \"ÃÇßÑᾆΏ\" }, \"{\\\"String\\\":\\\"ÃÇßÑᾆΏ\\\"}\"), \n                new Tuple<StringType, string>(new StringType() { String = \"'hello'\" }, \"{\\\"String\\\":\\\"'hello'\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(StringType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void StringDeserialization()\n        {\n            List<Tuple<StringType, string>> testCases = new List<Tuple<StringType, string>>() {\n                new Tuple<StringType, string>(new StringType() { String = null }, \"{}\"),\n                new Tuple<StringType, string>(new StringType() { String = null }, \"{\\\"String\\\":null}\"),\n                new Tuple<StringType, string>(new StringType() { String = \"\" }, \"{\\\"String\\\":\\\"\\\"}\"),\n                new Tuple<StringType, string>(new StringType() { String = \" \" }, \"{\\\"String\\\":\\\" \\\"}\"),\n                new Tuple<StringType, string>(new StringType() { String = \"\\n\" }, \"{\\\"String\\\":\\\"\\\\n\\\"}\"),\n                new Tuple<StringType, string>(new StringType() { String = \"\\t\" }, \"{\\\"String\\\":\\\"\\\\t\\\"}\"), \n                new Tuple<StringType, string>(new StringType() { String = \"\\n\" }, \"{\\\"String\\\":\\\"\\n\\\"}\"),\n                new Tuple<StringType, string>(new StringType() { String = \"\\t\" }, \"{\\\"String\\\":\\\"\\t\\\"}\"),\n                new Tuple<StringType, string>(new StringType() { String = \"hello\" }, \"{\\\"String\\\":\\\"hello\\\"}\"), \n                new Tuple<StringType, string>(new StringType() { String = \"\\\"hello\\\"\" }, \"{\\\"String\\\":\\\"\\\\\\\"hello\\\\\\\"\\\"}\"), \n                new Tuple<StringType, string>(new StringType() { String = new string('*', 1025) }, \"{\\\"String\\\":\\\"*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************\\\"}\"), \n                new Tuple<StringType, string>(new StringType() { String = \"ÃÇßÑᾆΏ\" }, \"{\\\"String\\\":\\\"ÃÇßÑᾆΏ\\\"}\"), \n                new Tuple<StringType, string>(new StringType() { String = \"'hello'\" }, \"{\\\"String\\\":\\\"'hello'\\\"}\"), \n                new Tuple<StringType, string>(new StringType() { String = \"True\" }, \"{\\\"String\\\":true}\"),\n                new Tuple<StringType, string>(new StringType() { String = \"5\" }, \"{\\\"String\\\":5}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(StringType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                StringType actual = new StringType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.String, expected.String);\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new StringType();\n                    actual.String = \"xyz\";\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n\n                Assert.AreEqual(actual.String, expected.String);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<StringType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.String, expected.String);\n\n                actual = (StringType)DefaultSerializer.Deserialize<StringType>(input);\n\n                Assert.AreEqual(actual.String, expected.String);\n            }\n        }\n\n        [TestMethod]\n        public void CharSerialization()\n        {\n            List<Tuple<CharType, string>> testCases = new List<Tuple<CharType, string>>() {\n                new Tuple<CharType, string>(new CharType() { Char = (char)0 }, \"{\\\"Char\\\":\\\"\\\\u0000\\\"}\"),\n                new Tuple<CharType, string>(new CharType() { Char = (char)1 }, \"{\\\"Char\\\":\\\"\\\\u0001\\\"}\"),\n                new Tuple<CharType, string>(new CharType() { Char = ' ' }, \"{\\\"Char\\\":\\\" \\\"}\"),\n                new Tuple<CharType, string>(new CharType() { Char = '\\n' }, \"{\\\"Char\\\":\\\"\\\\n\\\"}\"),\n                new Tuple<CharType, string>(new CharType() { Char = '\\t' }, \"{\\\"Char\\\":\\\"\\\\t\\\"}\"), \n                new Tuple<CharType, string>(new CharType() { Char = '?' }, \"{\\\"Char\\\":\\\"?\\\"}\"), \n                new Tuple<CharType, string>(new CharType() { Char = '\\u1000' }, \"{\\\"Char\\\":\\\"က\\\"}\"), \n                new Tuple<CharType, string>(new CharType() { Char = 'Ã' }, \"{\\\"Char\\\":\\\"Ã\\\"}\"), \n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(CharType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void CharDeserialization()\n        {\n            List<Tuple<CharType, string>> testCases = new List<Tuple<CharType, string>>() {\n                new Tuple<CharType, string>(new CharType() { Char = (char)0 }, \"{}\"),\n                new Tuple<CharType, string>(new CharType() { Char = (char)0 }, \"{\\\"Char\\\":null}\"),\n                new Tuple<CharType, string>(new CharType() { Char = (char)0 }, \"{\\\"Char\\\":\\\"\\\\u0000\\\"}\"),\n                new Tuple<CharType, string>(new CharType() { Char = (char)1 }, \"{\\\"Char\\\":\\\"\\\\u0001\\\"}\"),\n                new Tuple<CharType, string>(new CharType() { Char = (char)5 }, \"{\\\"Char\\\":5}\"), \n                new Tuple<CharType, string>(new CharType() { Char = ' ' }, \"{\\\"Char\\\":\\\" \\\"}\"),\n                new Tuple<CharType, string>(new CharType() { Char = '\\n' }, \"{\\\"Char\\\":\\\"\\\\n\\\"}\"),\n                new Tuple<CharType, string>(new CharType() { Char = '\\t' }, \"{\\\"Char\\\":\\\"\\\\t\\\"}\"), \n                new Tuple<CharType, string>(new CharType() { Char = '\\n' }, \"{\\\"Char\\\":\\\"\\n\\\"}\"),\n                new Tuple<CharType, string>(new CharType() { Char = '\\t' }, \"{\\\"Char\\\":\\\"\\t\\\"}\"),\n                new Tuple<CharType, string>(new CharType() { Char = '?' }, \"{\\\"Char\\\":\\\"?\\\"}\"), \n                new Tuple<CharType, string>(new CharType() { Char = '\\u1000' }, \"{\\\"Char\\\":\\\"က\\\"}\"), \n                new Tuple<CharType, string>(new CharType() { Char = 'Ã' }, \"{\\\"Char\\\":\\\"Ã\\\"}\"), \n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(CharType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                CharType actual = new CharType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.Char, expected.Char);\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new CharType();\n                    actual.Char = 'a';\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n\n                Assert.AreEqual(actual.Char, expected.Char);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<CharType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.Char, expected.Char);\n\n                actual = (CharType)DefaultSerializer.Deserialize<CharType>(input);\n\n                Assert.AreEqual(actual.Char, expected.Char);\n            }\n        }\n\n        [TestMethod]\n        public void CharDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n\n                new Tuple<string, string>(\"{\\\"Char\\\":\\\"I'm not a char\\\"}\", \"Error converting value \\\"I'm not a char\\\" to type 'System.Char'. Path 'Char', line 1, position 24.\"),\n                new Tuple<string, string>(\"{\\\"Char\\\":true}\",\"Error converting value True to type 'System.Char'. Path 'Char', line 1, position 12.\")\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expectedError = testCase.Item2;\n\n                CharType actual = new CharType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(CharType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expectedError);\n            }\n        }\n\n        [TestMethod]\n        public void UriSerialization()\n        {\n            List<Tuple<UriType, string>> testCases = new List<Tuple<UriType, string>>() {\n                new Tuple<UriType, string>(new UriType() { Uri = null }, \"{\\\"Uri\\\":null}\"),\n                new Tuple<UriType, string>(new UriType() { Uri = new Uri(\"http://someHost\") }, \"{\\\"Uri\\\":\\\"http://somehost/\\\"}\"),\n                new Tuple<UriType, string>(new UriType() { Uri = new Uri(\"ftp://127.0.0.1\") }, \"{\\\"Uri\\\":\\\"ftp://127.0.0.1/\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(UriType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void UriDeserialization()\n        {\n            List<Tuple<UriType, string>> testCases = new List<Tuple<UriType, string>>() {\n                new Tuple<UriType, string>(new UriType() { Uri = null }, \"{}\"),\n                new Tuple<UriType, string>(new UriType() { Uri = null }, \"{\\\"Uri\\\":null}\"),\n                new Tuple<UriType, string>(new UriType() { Uri = new Uri(\"I'm not a URI\", UriKind.Relative) }, \"{\\\"Uri\\\":\\\"I'm not a URI\\\"}\"),     \n                new Tuple<UriType, string>(new UriType() { Uri = new Uri(\"\\t\", UriKind.Relative) }, \"{\\\"Uri\\\":\\\"\\t\\\"}\"),                         \n                new Tuple<UriType, string>(new UriType() { Uri = new Uri(\"ftp://127.0.0.1/\") }, \"{\\\"Uri\\\":\\\"ftp://127.0.0.1/\\\"}\"),\n                new Tuple<UriType, string>(new UriType() { Uri = new Uri(\"http://somehost/\") }, \"{\\\"Uri\\\":\\\"http://someHost\\\"}\"),\n                new Tuple<UriType, string>(new UriType() { Uri = new Uri(\"ftp://127.0.0.1/\") }, \"{\\\"Uri\\\":\\\"ftp://127.0.0.1/\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(UriType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                UriType actual = new UriType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.Uri, expected.Uri);\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new UriType();\n                    actual.Uri = new Uri(\"http://xyz.com\");\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n\n                Assert.AreEqual(actual.Uri, expected.Uri);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<UriType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.Uri, expected.Uri);\n\n                actual = (UriType)DefaultSerializer.Deserialize<UriType>(input);\n\n                Assert.AreEqual(actual.Uri, expected.Uri);\n            }\n        }\n\n        [TestMethod]\n        public void UriDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"Uri\\\":5}\", \"Error converting value 5 to type 'System.Uri'. Path 'Uri', line 1, position 8.\"),\n                new Tuple<string, string>(\"{\\\"Uri\\\":true}\", \"Error converting value True to type 'System.Uri'. Path 'Uri', line 1, position 11.\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expectedError = testCase.Item2;\n\n                UriType actual = new UriType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(UriType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expectedError);\n            }\n        }\n\n        private static string ExpectedDateTimeSerialization(DateTime dt)\n        {\n            DateTime utc = dt.ToUniversalTime();\n            return \"\\\"\" + utc.ToString(\"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK\", CultureInfo.InvariantCulture) + \"\\\"\";\n        }\n\n        private static string ExpectedDateTimeOffsetSerialization(DateTimeOffset dto)\n        {\n            DateTime utc = dto.ToUniversalTime().UtcDateTime;\n            return \"\\\"\" + utc.ToString(\"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK\", CultureInfo.InvariantCulture) + \"\\\"\";\n        }\n\n        [TestMethod]\n        public void DateTimeSerialization()\n        {\n            List<DateTime> dates = new List<DateTime>\n            {\n                new DateTime(1999, 12, 31, 23, 59, 59),\n                new DateTime(2005, 3, 14, 12, 34, 16, DateTimeKind.Local),\n                new DateTime(2005, 4, 14, 12, 34, 16, DateTimeKind.Unspecified),\n                new DateTime(2005, 3, 14, 12, 34, 16, DateTimeKind.Local),\n                new DateTime(2005, 5, 14, 12, 34, 16, DateTimeKind.Utc),\n                new DateTime(2012, 2, 29, 12, 0, 0, DateTimeKind.Utc)\n            };\n            List<Tuple<DateTimeType, string>> testCases = new List<Tuple<DateTimeType, string>>\n            {\n                new Tuple<DateTimeType, string>(new DateTimeType() { DateTime = new DateTime() }, \"{\\\"DateTime\\\":\" + MinDateTimeSerializedToJson + \"}\"),\n            };\n            foreach (var date in dates) {\n                testCases.Add(new Tuple<DateTimeType,string>(\n                    new DateTimeType { DateTime = date },\n                    \"{\\\"DateTime\\\":\" + ExpectedDateTimeSerialization(date) + \"}\"));\n            }\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DateTimeType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void DateTimeDeserialization()\n        {\n            List<Tuple<DateTimeType, string>> testCases = new List<Tuple<DateTimeType, string>>()\n            {\n                new Tuple<DateTimeType, string>(new DateTimeType() { DateTime = new DateTime() }, \"{}\"),\n                new Tuple<DateTimeType, string>(new DateTimeType() { DateTime = new DateTime() }, \"{\\\"DateTime\\\":null}\"),\n                new Tuple<DateTimeType, string>(new DateTimeType() { DateTime = new DateTime() }, \"{\\\"DateTime\\\":\" + MinDateTimeSerializedToJson + \"}\")\n            };\n\n            List<DateTime> dates = new List<DateTime>\n            {\n                new DateTime(1999, 12, 31, 23, 59, 59),\n                new DateTime(2005, 3, 14, 12, 34, 16, DateTimeKind.Local).ToLocalTime(),\n                new DateTime(2005, 4, 14, 12, 34, 16, DateTimeKind.Unspecified),\n                new DateTime(2005, 3, 14, 12, 34, 16, DateTimeKind.Local),\n                new DateTime(2005, 5, 14, 12, 34, 16, DateTimeKind.Utc).ToLocalTime(),\n                new DateTime(2012, 2, 29, 12, 0, 0, DateTimeKind.Utc).ToLocalTime() // leap day\n            };\n\n            foreach (var date in dates) {\n                testCases.Add(new Tuple<DateTimeType,string>(\n                    new DateTimeType { DateTime = date },\n                    \"{\\\"DateTime\\\":\" + ExpectedDateTimeSerialization(date) + \"}\"));\n            }\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DateTimeType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                DateTimeType actual = new DateTimeType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.DateTime.ToUniversalTime(), expected.DateTime.ToUniversalTime());\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new DateTimeType();\n                    actual.DateTime = DateTime.Now;\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n\n                Assert.AreEqual(actual.DateTime.ToUniversalTime(), expected.DateTime.ToUniversalTime());\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<DateTimeType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.DateTime.ToUniversalTime(), expected.DateTime.ToUniversalTime());\n\n                actual = (DateTimeType)DefaultSerializer.Deserialize<DateTimeType>(input);\n\n                Assert.AreEqual(actual.DateTime.ToUniversalTime(), expected.DateTime.ToUniversalTime());\n            }\n        }\n\n        [Tag(\"notWP75\")]\n        [Tag(\"notXamarin\")]\n        [TestMethod]\n        public void DateTimeDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"DateTime\\\":\\\"I'm not a Date\\\"}\", \"String was not recognized as a valid DateTime.\"),\n                new Tuple<string, string>(\"{\\\"DateTime\\\":true}\", \"Unexpected token parsing date. Expected String, got Boolean. Path 'DateTime', line 1, position 16.\"),\n                new Tuple<string, string>(\"{\\\"DateTime\\\":5}\", \"Unexpected token parsing date. Expected String, got Integer. Path 'DateTime', line 1, position 13.\"),\n                new Tuple<string, string>(\"{\\\"DateTime\\\":\\\"\\t\\\"}\", \"String was not recognized as a valid DateTime.\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expectedError = testCase.Item2;\n\n                DateTimeType actual = new DateTimeType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DateTimeType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expectedError);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"foo\")]\n        public void DateTimeOffsetSerialization()\n        {\n            List<Tuple<DateTimeOffsetType, string>> testCases = new List<Tuple<DateTimeOffsetType, string>>();\n\n            List<DateTimeOffset> dates = new List<DateTimeOffset>\n            {\n                new DateTimeOffset(),\n                new DateTimeOffset(new DateTime(1999, 12, 31, 23, 59, 59)),\n                new DateTimeOffset(new DateTime(2005, 3, 14, 12, 34, 16, DateTimeKind.Local)),\n                new DateTimeOffset(new DateTime(2005, 4, 14, 12, 34, 16, DateTimeKind.Unspecified)),\n                new DateTimeOffset(new DateTime(2005, 3, 14, 12, 34, 16, DateTimeKind.Local)),\n                new DateTimeOffset(new DateTime(2005, 5, 14, 12, 34, 16, DateTimeKind.Utc)),\n                new DateTimeOffset(new DateTime(2012, 2, 29, 12, 0, 0, DateTimeKind.Utc)), // leap day\n            };\n\n            foreach (var date in dates)\n            {\n                testCases.Add(new Tuple<DateTimeOffsetType,string>(\n                    new DateTimeOffsetType { DateTimeOffset = date },\n                    \"{\\\"DateTimeOffset\\\":\" + ExpectedDateTimeOffsetSerialization(date) + \"}\"));\n            }\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DateTimeOffsetType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void DateTimeOffsetDeserialization()\n        {\n            List<Tuple<DateTimeOffsetType, string>> testCases = new List<Tuple<DateTimeOffsetType, string>>()\n            {\n                new Tuple<DateTimeOffsetType, string>(new DateTimeOffsetType() { DateTimeOffset = new DateTimeOffset() }, \"{}\"),\n                new Tuple<DateTimeOffsetType, string>(new DateTimeOffsetType() { DateTimeOffset = new DateTimeOffset() }, \"{\\\"DateTimeOffset\\\":null}\"),\n            };\n\n            List<DateTimeOffset> dates = new List<DateTimeOffset>\n            {\n                new DateTimeOffset(new DateTime(1999, 12, 31, 23, 59, 59)).ToLocalTime(),\n                new DateTimeOffset(new DateTime(2005, 3, 14, 12, 34, 16, DateTimeKind.Local)).ToLocalTime(),\n                new DateTimeOffset(new DateTime(2005, 4, 14, 12, 34, 16, DateTimeKind.Unspecified)).ToLocalTime(),\n                new DateTimeOffset(new DateTime(2005, 3, 14, 12, 34, 16, DateTimeKind.Local)).ToLocalTime(),\n                new DateTimeOffset(new DateTime(2005, 5, 14, 12, 34, 16, DateTimeKind.Utc)).ToLocalTime(),\n                new DateTimeOffset(new DateTime(2012, 2, 29, 12, 0, 0, DateTimeKind.Utc)).ToLocalTime(), // leap day\n            };\n\n            foreach (var date in dates)\n            {\n                testCases.Add(new Tuple<DateTimeOffsetType,string>(\n                    new DateTimeOffsetType { DateTimeOffset = date },\n                    \"{\\\"DateTimeOffset\\\":\" + ExpectedDateTimeOffsetSerialization(date) + \"}\"));\n            }\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DateTimeOffsetType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                DateTimeOffsetType actual = new DateTimeOffsetType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.DateTimeOffset.ToLocalTime(), expected.DateTimeOffset.ToLocalTime());\n                Assert.AreEqual(actual.DateTimeOffset.ToUniversalTime(), expected.DateTimeOffset.ToUniversalTime());\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new DateTimeOffsetType();\n                    actual.DateTimeOffset = DateTimeOffset.Now;\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n\n                Assert.AreEqual(actual.DateTimeOffset.ToUniversalTime(), expected.DateTimeOffset.ToUniversalTime());\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<DateTimeOffsetType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.DateTimeOffset.ToUniversalTime(), expected.DateTimeOffset.ToUniversalTime());\n\n                actual = (DateTimeOffsetType)DefaultSerializer.Deserialize<DateTimeOffsetType>(input);\n\n                Assert.AreEqual(actual.DateTimeOffset.ToUniversalTime(), expected.DateTimeOffset.ToUniversalTime());\n            }\n        }\n\n        [Tag(\"notWP75\")]\n        [Tag(\"notXamarin\")]\n        [TestMethod]\n        public void DateTimeOffsetDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"DateTimeOffset\\\":\\\"I'm not a Date\\\"}\", \"String was not recognized as a valid DateTime.\"),\n                new Tuple<string, string>(\"{\\\"DateTimeOffset\\\":true}\", \"Unexpected token parsing date. Expected String, got Boolean. Path 'DateTimeOffset', line 1, position 22.\"),\n                new Tuple<string, string>(\"{\\\"DateTimeOffset\\\":5}\", \"Unexpected token parsing date. Expected String, got Integer. Path 'DateTimeOffset', line 1, position 19.\"),\n                new Tuple<string, string>(\"{\\\"DateTimeOffset\\\":\\\"\\t\\\"}\", \"String was not recognized as a valid DateTime.\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expectedError = testCase.Item2;\n\n                DateTimeOffsetType actual = new DateTimeOffsetType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DateTimeOffsetType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expectedError);\n            }\n        }\n\n        [TestMethod]\n        public void NullableSerialization()\n        {\n            List<Tuple<NullableType, string>> testCases = new List<Tuple<NullableType, string>>() {\n                new Tuple<NullableType, string>(new NullableType() { Nullable = null }, \"{\\\"Nullable\\\":null}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = 0 }, \"{\\\"Nullable\\\":0.0}\"),       \n                new Tuple<NullableType, string>(new NullableType() { Nullable = -1 }, \"{\\\"Nullable\\\":-1.0}\"),     \n                new Tuple<NullableType, string>(new NullableType() { Nullable = 1 }, \"{\\\"Nullable\\\":1.0}\"),      \n                new Tuple<NullableType, string>(new NullableType() { Nullable = double.Epsilon }, \"{\\\"Nullable\\\":4.94065645841247E-324}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = -double.Epsilon }, \"{\\\"Nullable\\\":-4.94065645841247E-324}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = double.MaxValue }, \"{\\\"Nullable\\\":1.7976931348623157E+308}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = double.MinValue }, \"{\\\"Nullable\\\":-1.7976931348623157E+308}\")\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(NullableType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void NullableDeserialization()\n        {\n            List<Tuple<NullableType, string>> testCases = new List<Tuple<NullableType, string>>() {\n                new Tuple<NullableType, string>(new NullableType() { Nullable = null }, \"{\\\"Nullable\\\":null}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = null }, \"{}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = 0 }, \"{\\\"Nullable\\\":0}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = 0 }, \"{\\\"Nullable\\\":4.94065645841247E-325}\"), \n                new Tuple<NullableType, string>(new NullableType() { Nullable = 0 }, \"{\\\"Nullable\\\":4.94065645841247E-325}\"), \n                new Tuple<NullableType, string>(new NullableType() { Nullable = -1 }, \"{\\\"Nullable\\\":-1}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = 1 }, \"{\\\"Nullable\\\":1}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = double.Epsilon }, \"{\\\"Nullable\\\":4.94065645841247E-324}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = -double.Epsilon }, \"{\\\"Nullable\\\":-4.94065645841247E-324}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = double.MaxValue }, \"{\\\"Nullable\\\":1.7976931348623157E+308}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = double.MinValue }, \"{\\\"Nullable\\\":-1.7976931348623157E+308}\"),\n                new Tuple<NullableType, string>(new NullableType() { Nullable = double.MaxValue }, \"{\\\"Nullable\\\":1.79769313486231575E+308}\"),  // We're ok with lossing precision here; note the extra 5 digit at the end\n                new Tuple<NullableType, string>(new NullableType() { Nullable = double.MinValue }, \"{\\\"Nullable\\\":-1.79769313486231575E+308}\"), // We're ok with lossing precision here; note the extra 5 digit at the end\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(NullableType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                NullableType actual = new NullableType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                if (actual.Nullable.HasValue)\n                {\n                    if (double.IsPositiveInfinity(expected.Nullable.Value))\n                    {\n                        Assert.IsTrue(double.IsPositiveInfinity(actual.Nullable.Value));\n                    }\n                    else if (double.IsNegativeInfinity(expected.Nullable.Value))\n                    {\n                        Assert.IsTrue(double.IsNegativeInfinity(actual.Nullable.Value));\n                    }\n                    else\n                    {\n                        Assert.AreEqual(actual.Nullable.Value, expected.Nullable.Value);\n                    }\n                }\n\n                if (testCase.Item2 != \"{}\")\n                {\n                    actual = new NullableType();\n                    actual.Nullable = 34.6;\n                    DefaultSerializer.Deserialize(input, actual);\n\n                    if (actual.Nullable.HasValue)\n                    {\n                        if (double.IsPositiveInfinity(expected.Nullable.Value))\n                        {\n                            Assert.IsTrue(double.IsPositiveInfinity(actual.Nullable.Value));\n                        }\n                        else if (double.IsNegativeInfinity(expected.Nullable.Value))\n                        {\n                            Assert.IsTrue(double.IsNegativeInfinity(actual.Nullable.Value));\n                        }\n                        else\n                        {\n                            Assert.AreEqual(actual.Nullable.Value, expected.Nullable.Value);\n                        }\n                    }\n                }\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<NullableType>(json).FirstOrDefault();\n\n                if (actual.Nullable.HasValue)\n                {\n                    if (double.IsPositiveInfinity(expected.Nullable.Value))\n                    {\n                        Assert.IsTrue(double.IsPositiveInfinity(actual.Nullable.Value));\n                    }\n                    else if (double.IsNegativeInfinity(expected.Nullable.Value))\n                    {\n                        Assert.IsTrue(double.IsNegativeInfinity(actual.Nullable.Value));\n                    }\n                    else\n                    {\n                        Assert.AreEqual(actual.Nullable.Value, expected.Nullable.Value);\n                    }\n                }\n\n                actual = DefaultSerializer.Deserialize<NullableType>(input);\n\n                if (actual.Nullable.HasValue)\n                {\n                    if (double.IsPositiveInfinity(expected.Nullable.Value))\n                    {\n                        Assert.IsTrue(double.IsPositiveInfinity(actual.Nullable.Value));\n                    }\n                    else if (double.IsNegativeInfinity(expected.Nullable.Value))\n                    {\n                        Assert.IsTrue(double.IsNegativeInfinity(actual.Nullable.Value));\n                    }\n                    else\n                    {\n                        Assert.AreEqual(actual.Nullable.Value, expected.Nullable.Value);\n                    }\n                }\n            }\n        }\n\n        [Tag(\"notWP75\")]\n        [Tag(\"notXamarin\")]\n        [TestMethod]\n        public void NullableDeserializationNegative()\n        {\n            List<string> testCases = new List<string>() {\n                \"{\\\"Nullable\\\":1.7976931348623157E+309}\",\n                \"{\\\"Nullable\\\":-1.7976931348623157E+309}\",\n            };\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase;\n\n                NullableType actual = new NullableType();\n                Exception actualError = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(NullableType));\n\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.Contains(actualError.Message, \"is not a valid number. Path 'Nullable'\");\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void PocoSerialization()\n        {\n            List<Tuple<PocoType, string>> testCases = new List<Tuple<PocoType, string>>() {\n                new Tuple<PocoType, string>(new PocoType(), \"{\\\"PublicField\\\":null,\\\"PublicProperty\\\":null}\"),\n                new Tuple<PocoType, string>(new PocoType(\"_XYZ\"), \"{\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void PocoDeserialization()\n        {\n            List<Tuple<PocoType, string>> testCases = new List<Tuple<PocoType, string>>() {\n                new Tuple<PocoType, string>(new PocoType(), \"{\\\"PublicProperty\\\":null,\\\"PublicField\\\":null}\"),\n                new Tuple<PocoType, string>(new PocoType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                PocoType actual = new PocoType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                actual = new PocoType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<PocoType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual, expected);\n\n                actual = (PocoType)DefaultSerializer.Deserialize<PocoType>(input);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void PocoPopulation()\n        {\n            List<Tuple<PocoType, string>> testCases = new List<Tuple<PocoType, string>>() {\n                new Tuple<PocoType, string>(new PocoType(), \"{\\\"PublicProperty\\\":null,\\\"PublicField\\\":null}\"),\n                new Tuple<PocoType, string>(new PocoType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                PocoType actual = new PocoType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void DataContractSerialization()\n        {\n            List<Tuple<DataContractType, string>> testCases = new List<Tuple<DataContractType, string>>() {                                                           \n                new Tuple<DataContractType, string>(new DataContractType(), \"{\\\"PublicFieldDataMember\\\":null,\\\"InternalFieldDataMember\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PublicPropertyDataMember\\\":null,\\\"InternalPropertyDataMember\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateFieldDataMember\\\":null,\\\"PrivateField\\\":null,\\\"PrivatePropertyDataMember\\\":null,\\\"PrivateProperty\\\":null}\"), \n                new Tuple<DataContractType, string>(new DataContractType(\"_XYZ\"), \"{\\\"PublicFieldDataMember\\\":\\\"PublicFieldNamedDataMember_XYZ\\\",\\\"InternalFieldDataMember\\\":\\\"InternalFieldNamedDataMember_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PublicPropertyDataMember\\\":\\\"PublicPropertyNamedDataMember_XYZ\\\",\\\"InternalPropertyDataMember\\\":\\\"InternalPropertyNamedDataMember_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PrivateFieldDataMember\\\":\\\"PrivateFieldNamedDataMember_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\",\\\"PrivatePropertyDataMember\\\":\\\"PrivatePropertyNamedDataMember_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\"}\") \n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DataContractType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void DataContractDeserialization()\n        {\n            List<Tuple<DataContractType, string>> testCases = new List<Tuple<DataContractType, string>>() {\n                new Tuple<DataContractType, string>(new DataContractType(), \"{\\\"PublicPropertyDataMember\\\":null,\\\"InternalPropertyDataMember\\\":null,\\\"PrivatePropertyDataMember\\\":null,\\\"PublicPropertyGetOnlyDataMember\\\":\\\"PublicPropertyGetOnlyNamedDataMember\\\",\\\"InternalPropertyGetOnlyDataMember\\\":\\\"InternalPropertyGetOnlyNamedDataMember\\\",\\\"PrivatePropertyGetOnlyDataMember\\\":\\\"PrivatePropertyGetOnlyNamedDataMember\\\",\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateProperty\\\":null,\\\"PublicPropertyGetOnly\\\":\\\"PublicPropertyGetOnly\\\",\\\"InternalPropertyGetOnly\\\":\\\"InternalPropertyGetOnly\\\",\\\"PrivatePropertyGetOnly\\\":\\\"PrivatePropertyGetOnly\\\",\\\"PublicFieldDataMember\\\":null,\\\"InternalFieldDataMember\\\":null,\\\"PrivateFieldDataMember\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateField\\\":null}\"),\n                new Tuple<DataContractType, string>(new DataContractType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"PublicPropertyDataMember\\\":\\\"PublicPropertyNamedDataMember_XYZ\\\",\\\"InternalPropertyDataMember\\\":\\\"InternalPropertyNamedDataMember_XYZ\\\",\\\"PrivatePropertyDataMember\\\":\\\"PrivatePropertyNamedDataMember_XYZ\\\",\\\"PublicPropertyGetOnlyDataMember\\\":\\\"PublicPropertyGetOnlyNamedDataMember\\\",\\\"InternalPropertyGetOnlyDataMember\\\":\\\"InternalPropertyGetOnlyNamedDataMember\\\",\\\"PrivatePropertyGetOnlyDataMember\\\":\\\"PrivatePropertyGetOnlyNamedDataMember\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\",\\\"PublicPropertyGetOnly\\\":\\\"PublicPropertyGetOnly\\\",\\\"InternalPropertyGetOnly\\\":\\\"InternalPropertyGetOnly\\\",\\\"PrivatePropertyGetOnly\\\":\\\"PrivatePropertyGetOnly\\\",\\\"PublicFieldDataMember\\\":\\\"PublicFieldNamedDataMember_XYZ\\\",\\\"InternalFieldDataMember\\\":\\\"InternalFieldNamedDataMember_XYZ\\\",\\\"PrivateFieldDataMember\\\":\\\"PrivateFieldNamedDataMember_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DataContractType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                DataContractType actual = new DataContractType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                actual = new DataContractType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<DataContractType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual, expected);\n\n                actual = DefaultSerializer.Deserialize<DataContractType>(input);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void DataContractPopulation()\n        {\n            List<Tuple<DataContractType, string>> testCases = new List<Tuple<DataContractType, string>>() {\n                new Tuple<DataContractType, string>(new DataContractType(), \"{\\\"PublicPropertyDataMember\\\":null,\\\"InternalPropertyDataMember\\\":null,\\\"PrivatePropertyDataMember\\\":null,\\\"PublicPropertyGetOnlyDataMember\\\":\\\"PublicPropertyGetOnlyNamedDataMember\\\",\\\"InternalPropertyGetOnlyDataMember\\\":\\\"InternalPropertyGetOnlyNamedDataMember\\\",\\\"PrivatePropertyGetOnlyDataMember\\\":\\\"PrivatePropertyGetOnlyNamedDataMember\\\",\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateProperty\\\":null,\\\"PublicPropertyGetOnly\\\":\\\"PublicPropertyGetOnly\\\",\\\"InternalPropertyGetOnly\\\":\\\"InternalPropertyGetOnly\\\",\\\"PrivatePropertyGetOnly\\\":\\\"PrivatePropertyGetOnly\\\",\\\"PublicFieldDataMember\\\":null,\\\"InternalFieldDataMember\\\":null,\\\"PrivateFieldDataMember\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateField\\\":null}\"),\n                new Tuple<DataContractType, string>(new DataContractType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"PublicPropertyDataMember\\\":\\\"PublicPropertyNamedDataMember_XYZ\\\",\\\"InternalPropertyDataMember\\\":\\\"InternalPropertyNamedDataMember_XYZ\\\",\\\"PrivatePropertyDataMember\\\":\\\"PrivatePropertyNamedDataMember_XYZ\\\",\\\"PublicPropertyGetOnlyDataMember\\\":\\\"PublicPropertyGetOnlyNamedDataMember\\\",\\\"InternalPropertyGetOnlyDataMember\\\":\\\"InternalPropertyGetOnlyNamedDataMember\\\",\\\"PrivatePropertyGetOnlyDataMember\\\":\\\"PrivatePropertyGetOnlyNamedDataMember\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\",\\\"PublicPropertyGetOnly\\\":\\\"PublicPropertyGetOnly\\\",\\\"InternalPropertyGetOnly\\\":\\\"InternalPropertyGetOnly\\\",\\\"PrivatePropertyGetOnly\\\":\\\"PrivatePropertyGetOnly\\\",\\\"PublicFieldDataMember\\\":\\\"PublicFieldNamedDataMember_XYZ\\\",\\\"InternalFieldDataMember\\\":\\\"InternalFieldNamedDataMember_XYZ\\\",\\\"PrivateFieldDataMember\\\":\\\"PrivateFieldNamedDataMember_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DataContractType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                DataContractType actual = new DataContractType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void JsonPropertySerialization()\n        {\n            List<Tuple<JsonPropertyType, string>> testCases = new List<Tuple<JsonPropertyType, string>>() {\n                new Tuple<JsonPropertyType, string>(new JsonPropertyType(), \"{\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PublicFieldSansAttribute\\\":null,\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PublicPropertySansAttribute\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"PrivateField\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"PrivateProperty\\\":null}\"), \n                new Tuple<JsonPropertyType, string>(new JsonPropertyType(\"_XYZ\"), \"{\\\"PublicFieldJsonProperty\\\":\\\"PublicFieldNamedJsonProperty_XYZ\\\",\\\"InternalFieldJsonProperty\\\":\\\"InternalFieldNamedJsonProperty_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PublicFieldSansAttribute\\\":\\\"PublicFieldSansAttribute_XYZ\\\",\\\"PublicPropertyJsonProperty\\\":\\\"PublicPropertyNamedJsonProperty_XYZ\\\",\\\"InternalPropertyJsonProperty\\\":\\\"InternalPropertyNamedJsonProperty_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PublicPropertySansAttribute\\\":\\\"PublicPropertySansAttribute_XYZ\\\",\\\"PrivateFieldJsonProperty\\\":\\\"PrivateFieldNamedJsonProperty_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\",\\\"PrivatePropertyJsonProperty\\\":\\\"PrivatePropertyNamedJsonProperty_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(JsonPropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void JsonPropertyDeserialization()\n        {\n            List<Tuple<JsonPropertyType, string>> testCases = new List<Tuple<JsonPropertyType, string>>() {\n                new Tuple<JsonPropertyType, string>(new JsonPropertyType(), \"{\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateField\\\":null,\\\"PublicFieldSansAttribute\\\":null,\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateProperty\\\":null,\\\"PublicPropertySansAttribute\\\":null}\"),\n                new Tuple<JsonPropertyType, string>(new JsonPropertyType(\"_XYZ\",  onlySetSerializableMembers: true), \"{\\\"PublicFieldJsonProperty\\\":\\\"PublicFieldNamedJsonProperty_XYZ\\\",\\\"InternalFieldJsonProperty\\\":\\\"InternalFieldNamedJsonProperty_XYZ\\\",\\\"PrivateFieldJsonProperty\\\":\\\"PrivateFieldNamedJsonProperty_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\",\\\"PublicFieldSansAttribute\\\":\\\"PublicFieldSansAttribute_XYZ\\\",\\\"PublicPropertyJsonProperty\\\":\\\"PublicPropertyNamedJsonProperty_XYZ\\\",\\\"InternalPropertyJsonProperty\\\":\\\"InternalPropertyNamedJsonProperty_XYZ\\\",\\\"PrivatePropertyJsonProperty\\\":\\\"PrivatePropertyNamedJsonProperty_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\",\\\"PublicPropertySansAttribute\\\":\\\"PublicPropertySansAttribute_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(JsonPropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                JsonPropertyType actual = new JsonPropertyType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                actual = new JsonPropertyType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<JsonPropertyType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual, expected);\n\n                actual = DefaultSerializer.Deserialize<JsonPropertyType>(input);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void JsonPropertyPopulation()\n        {\n            List<Tuple<JsonPropertyType, string>> testCases = new List<Tuple<JsonPropertyType, string>>() {\n                new Tuple<JsonPropertyType, string>(new JsonPropertyType(), \"{\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateField\\\":null,\\\"PublicFieldSansAttribute\\\":null,\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateProperty\\\":null,\\\"PublicPropertySansAttribute\\\":null}\"),\n                new Tuple<JsonPropertyType, string>(new JsonPropertyType(\"_XYZ\",  onlySetSerializableMembers: true), \"{\\\"PublicFieldJsonProperty\\\":\\\"PublicFieldNamedJsonProperty_XYZ\\\",\\\"InternalFieldJsonProperty\\\":\\\"InternalFieldNamedJsonProperty_XYZ\\\",\\\"PrivateFieldJsonProperty\\\":\\\"PrivateFieldNamedJsonProperty_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\",\\\"PublicFieldSansAttribute\\\":\\\"PublicFieldSansAttribute_XYZ\\\",\\\"PublicPropertyJsonProperty\\\":\\\"PublicPropertyNamedJsonProperty_XYZ\\\",\\\"InternalPropertyJsonProperty\\\":\\\"InternalPropertyNamedJsonProperty_XYZ\\\",\\\"PrivatePropertyJsonProperty\\\":\\\"PrivatePropertyNamedJsonProperty_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\",\\\"PublicPropertySansAttribute\\\":\\\"PublicPropertySansAttribute_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(JsonPropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                JsonPropertyType actual = new JsonPropertyType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void PocoDerivedPocoSerialization()\n        {\n            List<Tuple<PocoDerivedPocoType, string>> testCases = new List<Tuple<PocoDerivedPocoType, string>>() {\n                new Tuple<PocoDerivedPocoType, string>(new PocoDerivedPocoType(), \"{\\\"DerivedPublicField\\\":null,\\\"PublicField\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"PublicProperty\\\":null}\"),\n                new Tuple<PocoDerivedPocoType, string>(new PocoDerivedPocoType(\"_XYZ\"), \"{\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoDerivedPocoType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void PocoDerivedPocoDeserialization()\n        {\n            List<Tuple<PocoDerivedPocoType, string>> testCases = new List<Tuple<PocoDerivedPocoType, string>>() {\n                new Tuple<PocoDerivedPocoType, string>(new PocoDerivedPocoType(), \"{\\\"DerivedPublicProperty\\\":null,\\\"PublicProperty\\\":null,\\\"DerivedPublicField\\\":null,\\\"PublicField\\\":null}\"),\n                new Tuple<PocoDerivedPocoType, string>(new PocoDerivedPocoType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoDerivedPocoType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                PocoDerivedPocoType actual = new PocoDerivedPocoType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                actual = new PocoDerivedPocoType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<PocoDerivedPocoType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual, expected);\n\n                actual = DefaultSerializer.Deserialize<PocoDerivedPocoType>(input);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void PocoDerivedPocoPopulation()\n        {\n            List<Tuple<PocoDerivedPocoType, string>> testCases = new List<Tuple<PocoDerivedPocoType, string>>() {\n                new Tuple<PocoDerivedPocoType, string>(new PocoDerivedPocoType(), \"{\\\"DerivedPublicProperty\\\":null,\\\"PublicProperty\\\":null,\\\"DerivedPublicField\\\":null,\\\"PublicField\\\":null}\"),\n                new Tuple<PocoDerivedPocoType, string>(new PocoDerivedPocoType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoDerivedPocoType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                PocoDerivedPocoType actual = new PocoDerivedPocoType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void PocoDerivedDataContractSerialization()\n        {\n            List<Tuple<PocoDerivedDataContractType, string>> testCases = new List<Tuple<PocoDerivedDataContractType, string>>() {\n                new Tuple<PocoDerivedDataContractType, string>(new PocoDerivedDataContractType(), \"{\\\"PublicFieldDataMember\\\":null,\\\"InternalFieldDataMember\\\":null,\\\"PrivateFieldDataMember\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicPropertyDataMember\\\":null,\\\"InternalPropertyDataMember\\\":null,\\\"PrivatePropertyDataMember\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null}\"),   \n                new Tuple<PocoDerivedDataContractType, string>(new PocoDerivedDataContractType(\"_XYZ\"), \"{\\\"PublicFieldDataMember\\\":\\\"PublicFieldNamedDataMember_XYZ\\\",\\\"InternalFieldDataMember\\\":\\\"InternalFieldNamedDataMember_XYZ\\\",\\\"PrivateFieldDataMember\\\":\\\"PrivateFieldNamedDataMember_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicPropertyDataMember\\\":\\\"PublicPropertyNamedDataMember_XYZ\\\",\\\"InternalPropertyDataMember\\\":\\\"InternalPropertyNamedDataMember_XYZ\\\",\\\"PrivatePropertyDataMember\\\":\\\"PrivatePropertyNamedDataMember_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoDerivedDataContractType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void PocoDerivedDataContractDeserialization()\n        {\n            List<Tuple<PocoDerivedDataContractType, string>> testCases = new List<Tuple<PocoDerivedDataContractType, string>>() {\n                new Tuple<PocoDerivedDataContractType, string>(new PocoDerivedDataContractType(), \"{\\\"PublicPropertyDataMember\\\":null,\\\"InternalPropertyDataMember\\\":null,\\\"PrivatePropertyDataMember\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicFieldDataMember\\\":null,\\\"InternalFieldDataMember\\\":null,\\\"PrivateFieldDataMember\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null}\"),\n                new Tuple<PocoDerivedDataContractType, string>(new PocoDerivedDataContractType(\"_XYZ\", onlySetSerializableMembers:true), \"{\\\"PublicPropertyDataMember\\\":\\\"PublicPropertyNamedDataMember_XYZ\\\",\\\"InternalPropertyDataMember\\\":\\\"InternalPropertyNamedDataMember_XYZ\\\",\\\"PrivatePropertyDataMember\\\":\\\"PrivatePropertyNamedDataMember_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicFieldDataMember\\\":\\\"PublicFieldNamedDataMember_XYZ\\\",\\\"InternalFieldDataMember\\\":\\\"InternalFieldNamedDataMember_XYZ\\\",\\\"PrivateFieldDataMember\\\":\\\"PrivateFieldNamedDataMember_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoDerivedDataContractType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                PocoDerivedDataContractType actual = new PocoDerivedDataContractType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                actual = new PocoDerivedDataContractType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<PocoDerivedDataContractType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual, expected);\n\n                actual = DefaultSerializer.Deserialize<PocoDerivedDataContractType>(input);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void PocoDerivedDataContractPopulation()\n        {\n            List<Tuple<PocoDerivedDataContractType, string>> testCases = new List<Tuple<PocoDerivedDataContractType, string>>() {\n                new Tuple<PocoDerivedDataContractType, string>(new PocoDerivedDataContractType(), \"{\\\"PublicPropertyDataMember\\\":null,\\\"InternalPropertyDataMember\\\":null,\\\"PrivatePropertyDataMember\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicFieldDataMember\\\":null,\\\"InternalFieldDataMember\\\":null,\\\"PrivateFieldDataMember\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null}\"),\n                new Tuple<PocoDerivedDataContractType, string>(new PocoDerivedDataContractType(\"_XYZ\", onlySetSerializableMembers:true), \"{\\\"PublicPropertyDataMember\\\":\\\"PublicPropertyNamedDataMember_XYZ\\\",\\\"InternalPropertyDataMember\\\":\\\"InternalPropertyNamedDataMember_XYZ\\\",\\\"PrivatePropertyDataMember\\\":\\\"PrivatePropertyNamedDataMember_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicFieldDataMember\\\":\\\"PublicFieldNamedDataMember_XYZ\\\",\\\"InternalFieldDataMember\\\":\\\"InternalFieldNamedDataMember_XYZ\\\",\\\"PrivateFieldDataMember\\\":\\\"PrivateFieldNamedDataMember_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoDerivedDataContractType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                PocoDerivedDataContractType actual = new PocoDerivedDataContractType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void PocoDerivedJsonPropertySerialization()\n        {\n            List<Tuple<PocoDerivedJsonPropertyType, string>> testCases = new List<Tuple<PocoDerivedJsonPropertyType, string>>() {\n                new Tuple<PocoDerivedJsonPropertyType, string>(new PocoDerivedJsonPropertyType(), \"{\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicFieldSansAttribute\\\":null,\\\"PublicField\\\":null,\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicPropertySansAttribute\\\":null,\\\"PublicProperty\\\":null}\"),\n                new Tuple<PocoDerivedJsonPropertyType, string>(new PocoDerivedJsonPropertyType(\"_XYZ\"), \"{\\\"PublicFieldJsonProperty\\\":\\\"PublicFieldNamedJsonProperty_XYZ\\\",\\\"InternalFieldJsonProperty\\\":\\\"InternalFieldNamedJsonProperty_XYZ\\\",\\\"PrivateFieldJsonProperty\\\":\\\"PrivateFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicFieldSansAttribute\\\":\\\"PublicFieldSansAttribute_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"PublicPropertyJsonProperty\\\":\\\"PublicPropertyNamedJsonProperty_XYZ\\\",\\\"InternalPropertyJsonProperty\\\":\\\"InternalPropertyNamedJsonProperty_XYZ\\\",\\\"PrivatePropertyJsonProperty\\\":\\\"PrivatePropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicPropertySansAttribute\\\":\\\"PublicPropertySansAttribute_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoDerivedJsonPropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void PocoDerivedJsonPropertyDeserialization()\n        {\n            List<Tuple<PocoDerivedJsonPropertyType, string>> testCases = new List<Tuple<PocoDerivedJsonPropertyType, string>>() {\n                new Tuple<PocoDerivedJsonPropertyType, string>(new PocoDerivedJsonPropertyType(), \"{\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicPropertySansAttribute\\\":null,\\\"PublicProperty\\\":null,\\\"PublicFieldSansAttribute\\\":null,\\\"PublicField\\\":null}\"),\n                new Tuple<PocoDerivedJsonPropertyType, string>(new PocoDerivedJsonPropertyType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"PublicPropertyJsonProperty\\\":\\\"PublicPropertyNamedJsonProperty_XYZ\\\",\\\"InternalPropertyJsonProperty\\\":\\\"InternalPropertyNamedJsonProperty_XYZ\\\",\\\"PrivatePropertyJsonProperty\\\":\\\"PrivatePropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicFieldJsonProperty\\\":\\\"PublicFieldNamedJsonProperty_XYZ\\\",\\\"InternalFieldJsonProperty\\\":\\\"InternalFieldNamedJsonProperty_XYZ\\\",\\\"PrivateFieldJsonProperty\\\":\\\"PrivateFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicPropertySansAttribute\\\":\\\"PublicPropertySansAttribute_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"PublicFieldSansAttribute\\\":\\\"PublicFieldSansAttribute_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoDerivedJsonPropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                PocoDerivedJsonPropertyType actual = new PocoDerivedJsonPropertyType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                actual = new PocoDerivedJsonPropertyType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<PocoDerivedJsonPropertyType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual, expected);\n\n                actual = DefaultSerializer.Deserialize<PocoDerivedJsonPropertyType>(input);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void PocoDerivedJsonPropertyPopulation()\n        {\n            List<Tuple<PocoDerivedJsonPropertyType, string>> testCases = new List<Tuple<PocoDerivedJsonPropertyType, string>>() {\n                new Tuple<PocoDerivedJsonPropertyType, string>(new PocoDerivedJsonPropertyType(), \"{\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicPropertySansAttribute\\\":null,\\\"PublicProperty\\\":null,\\\"PublicFieldSansAttribute\\\":null,\\\"PublicField\\\":null}\"),\n                new Tuple<PocoDerivedJsonPropertyType, string>(new PocoDerivedJsonPropertyType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"PublicPropertyJsonProperty\\\":\\\"PublicPropertyNamedJsonProperty_XYZ\\\",\\\"InternalPropertyJsonProperty\\\":\\\"InternalPropertyNamedJsonProperty_XYZ\\\",\\\"PrivatePropertyJsonProperty\\\":\\\"PrivatePropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicFieldJsonProperty\\\":\\\"PublicFieldNamedJsonProperty_XYZ\\\",\\\"InternalFieldJsonProperty\\\":\\\"InternalFieldNamedJsonProperty_XYZ\\\",\\\"PrivateFieldJsonProperty\\\":\\\"PrivateFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicPropertySansAttribute\\\":\\\"PublicPropertySansAttribute_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"PublicFieldSansAttribute\\\":\\\"PublicFieldSansAttribute_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\"}\" ),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(PocoDerivedJsonPropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                PocoDerivedJsonPropertyType actual = new PocoDerivedJsonPropertyType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void DataContractDerivedDataContractSerialization()\n        {\n            List<Tuple<DataContractDerivedDataContractType, string>> testCases = new List<Tuple<DataContractDerivedDataContractType, string>>() {   \n                new Tuple<DataContractDerivedDataContractType, string>(new DataContractDerivedDataContractType(), \"{\\\"DerivedPublicFieldDataMember\\\":null,\\\"DerivedInternalFieldDataMember\\\":null,\\\"DerivedPrivateFieldDataMember\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicFieldDataMember\\\":null,\\\"InternalFieldDataMember\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"DerivedPublicPropertyDataMember\\\":null,\\\"DerivedInternalPropertyDataMember\\\":null,\\\"DerivedPrivatePropertyDataMember\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicPropertyDataMember\\\":null,\\\"InternalPropertyDataMember\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateFieldDataMember\\\":null,\\\"PrivateField\\\":null,\\\"PrivatePropertyDataMember\\\":null,\\\"PrivateProperty\\\":null}\"), \n                new Tuple<DataContractDerivedDataContractType, string>(new DataContractDerivedDataContractType(\"_XYZ\"), \"{\\\"DerivedPublicFieldDataMember\\\":\\\"DerivedPublicFieldNamedDataMember_XYZ\\\",\\\"DerivedInternalFieldDataMember\\\":\\\"DerivedInternalFieldNamedDataMember_XYZ\\\",\\\"DerivedPrivateFieldDataMember\\\":\\\"DerivedPrivateFieldNamedDataMember_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicFieldDataMember\\\":\\\"PublicFieldNamedDataMember_XYZ\\\",\\\"InternalFieldDataMember\\\":\\\"InternalFieldNamedDataMember_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"DerivedPublicPropertyDataMember\\\":\\\"DerivedPublicPropertyNamedDataMember_XYZ\\\",\\\"DerivedInternalPropertyDataMember\\\":\\\"DerivedInternalPropertyNamedDataMember_XYZ\\\",\\\"DerivedPrivatePropertyDataMember\\\":\\\"DerivedPrivatePropertyNamedDataMember_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicPropertyDataMember\\\":\\\"PublicPropertyNamedDataMember_XYZ\\\",\\\"InternalPropertyDataMember\\\":\\\"InternalPropertyNamedDataMember_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PrivateFieldDataMember\\\":\\\"PrivateFieldNamedDataMember_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\",\\\"PrivatePropertyDataMember\\\":\\\"PrivatePropertyNamedDataMember_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\"}\") \n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DataContractDerivedDataContractType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void DataContractDerivedDataContractDeserialization()\n        {\n            List<Tuple<DataContractDerivedDataContractType, string>> testCases = new List<Tuple<DataContractDerivedDataContractType, string>>() {\n                new Tuple<DataContractDerivedDataContractType, string>(new DataContractDerivedDataContractType(), \"{\\\"DerivedPublicPropertyDataMember\\\":null,\\\"DerivedInternalPropertyDataMember\\\":null,\\\"DerivedPrivatePropertyDataMember\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicPropertyDataMember\\\":null,\\\"InternalPropertyDataMember\\\":null,\\\"PrivatePropertyDataMember\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateProperty\\\":null,\\\"DerivedPublicFieldDataMember\\\":null,\\\"DerivedInternalFieldDataMember\\\":null,\\\"DerivedPrivateFieldDataMember\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicFieldDataMember\\\":null,\\\"InternalFieldDataMember\\\":null,\\\"PrivateFieldDataMember\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateField\\\":null}\"),\n                new Tuple<DataContractDerivedDataContractType, string>(new DataContractDerivedDataContractType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"DerivedPublicPropertyDataMember\\\":\\\"DerivedPublicPropertyNamedDataMember_XYZ\\\",\\\"DerivedInternalPropertyDataMember\\\":\\\"DerivedInternalPropertyNamedDataMember_XYZ\\\",\\\"DerivedPrivatePropertyDataMember\\\":\\\"DerivedPrivatePropertyNamedDataMember_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicPropertyDataMember\\\":\\\"PublicPropertyNamedDataMember_XYZ\\\",\\\"InternalPropertyDataMember\\\":\\\"InternalPropertyNamedDataMember_XYZ\\\",\\\"PrivatePropertyDataMember\\\":\\\"PrivatePropertyNamedDataMember_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\",\\\"DerivedPublicFieldDataMember\\\":\\\"DerivedPublicFieldNamedDataMember_XYZ\\\",\\\"DerivedInternalFieldDataMember\\\":\\\"DerivedInternalFieldNamedDataMember_XYZ\\\",\\\"DerivedPrivateFieldDataMember\\\":\\\"DerivedPrivateFieldNamedDataMember_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicFieldDataMember\\\":\\\"PublicFieldNamedDataMember_XYZ\\\",\\\"InternalFieldDataMember\\\":\\\"InternalFieldNamedDataMember_XYZ\\\",\\\"PrivateFieldDataMember\\\":\\\"PrivateFieldNamedDataMember_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DataContractDerivedDataContractType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                DataContractDerivedDataContractType actual = new DataContractDerivedDataContractType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                actual = new DataContractDerivedDataContractType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<DataContractDerivedDataContractType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual, expected);\n\n                actual = DefaultSerializer.Deserialize<DataContractDerivedDataContractType>(input);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void DataContractDerivedDataContractPopulation()\n        {\n            List<Tuple<DataContractDerivedDataContractType, string>> testCases = new List<Tuple<DataContractDerivedDataContractType, string>>() {\n                new Tuple<DataContractDerivedDataContractType, string>(new DataContractDerivedDataContractType(), \"{\\\"DerivedPublicPropertyDataMember\\\":null,\\\"DerivedInternalPropertyDataMember\\\":null,\\\"DerivedPrivatePropertyDataMember\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicPropertyDataMember\\\":null,\\\"InternalPropertyDataMember\\\":null,\\\"PrivatePropertyDataMember\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateProperty\\\":null,\\\"DerivedPublicFieldDataMember\\\":null,\\\"DerivedInternalFieldDataMember\\\":null,\\\"DerivedPrivateFieldDataMember\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicFieldDataMember\\\":null,\\\"InternalFieldDataMember\\\":null,\\\"PrivateFieldDataMember\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateField\\\":null}\"),\n                new Tuple<DataContractDerivedDataContractType, string>(new DataContractDerivedDataContractType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"DerivedPublicPropertyDataMember\\\":\\\"DerivedPublicPropertyNamedDataMember_XYZ\\\",\\\"DerivedInternalPropertyDataMember\\\":\\\"DerivedInternalPropertyNamedDataMember_XYZ\\\",\\\"DerivedPrivatePropertyDataMember\\\":\\\"DerivedPrivatePropertyNamedDataMember_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicPropertyDataMember\\\":\\\"PublicPropertyNamedDataMember_XYZ\\\",\\\"InternalPropertyDataMember\\\":\\\"InternalPropertyNamedDataMember_XYZ\\\",\\\"PrivatePropertyDataMember\\\":\\\"PrivatePropertyNamedDataMember_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\",\\\"DerivedPublicFieldDataMember\\\":\\\"DerivedPublicFieldNamedDataMember_XYZ\\\",\\\"DerivedInternalFieldDataMember\\\":\\\"DerivedInternalFieldNamedDataMember_XYZ\\\",\\\"DerivedPrivateFieldDataMember\\\":\\\"DerivedPrivateFieldNamedDataMember_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicFieldDataMember\\\":\\\"PublicFieldNamedDataMember_XYZ\\\",\\\"InternalFieldDataMember\\\":\\\"InternalFieldNamedDataMember_XYZ\\\",\\\"PrivateFieldDataMember\\\":\\\"PrivateFieldNamedDataMember_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DataContractDerivedDataContractType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                DataContractDerivedDataContractType actual = new DataContractDerivedDataContractType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void DataContractDerivedJsonPropertySerialization()\n        {\n            List<Tuple<DataContractDerivedJsonPropertyType, string>> testCases = new List<Tuple<DataContractDerivedJsonPropertyType, string>>() {                                                                                                                \n                new Tuple<DataContractDerivedJsonPropertyType, string>(new DataContractDerivedJsonPropertyType(), \"{\\\"DerivedPublicFieldJsonProperty\\\":null,\\\"DerivedInternalFieldJsonProperty\\\":null,\\\"DerivedPrivateFieldJsonProperty\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicFieldDataMember\\\":null,\\\"InternalFieldDataMember\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"DerivedPublicPropertyJsonProperty\\\":null,\\\"DerivedInternalPropertyJsonProperty\\\":null,\\\"DerivedPrivatePropertyJsonProperty\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicPropertyDataMember\\\":null,\\\"InternalPropertyDataMember\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateFieldDataMember\\\":null,\\\"PrivateField\\\":null,\\\"PrivatePropertyDataMember\\\":null,\\\"PrivateProperty\\\":null}\"),                                                             \n                new Tuple<DataContractDerivedJsonPropertyType, string>(new DataContractDerivedJsonPropertyType(\"_XYZ\"), \"{\\\"DerivedPublicFieldJsonProperty\\\":\\\"DerivedPublicFieldNamedJsonProperty_XYZ\\\",\\\"DerivedInternalFieldJsonProperty\\\":\\\"DerivedInternalFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPrivateFieldJsonProperty\\\":\\\"DerivedPrivateFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicFieldDataMember\\\":\\\"PublicFieldNamedDataMember_XYZ\\\",\\\"InternalFieldDataMember\\\":\\\"InternalFieldNamedDataMember_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"DerivedPublicPropertyJsonProperty\\\":\\\"DerivedPublicPropertyNamedJsonProperty_XYZ\\\",\\\"DerivedInternalPropertyJsonProperty\\\":\\\"DerivedInternalPropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPrivatePropertyJsonProperty\\\":\\\"DerivedPrivatePropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicPropertyDataMember\\\":\\\"PublicPropertyNamedDataMember_XYZ\\\",\\\"InternalPropertyDataMember\\\":\\\"InternalPropertyNamedDataMember_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PrivateFieldDataMember\\\":\\\"PrivateFieldNamedDataMember_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\",\\\"PrivatePropertyDataMember\\\":\\\"PrivatePropertyNamedDataMember_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\"}\") \n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DataContractDerivedJsonPropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void DataContractDerivedJsonPropertyDeserialization()\n        {\n            List<Tuple<DataContractDerivedJsonPropertyType, string>> testCases = new List<Tuple<DataContractDerivedJsonPropertyType, string>>() {\n                new Tuple<DataContractDerivedJsonPropertyType, string>(new DataContractDerivedJsonPropertyType(), \"{\\\"DerivedPublicFieldJsonProperty\\\":null,\\\"DerivedInternalFieldJsonProperty\\\":null,\\\"DerivedPrivateFieldJsonProperty\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicFieldDataMember\\\":null,\\\"InternalFieldDataMember\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateFieldDataMember\\\":null,\\\"PrivateField\\\":null,\\\"DerivedPublicPropertyJsonProperty\\\":null,\\\"DerivedInternalPropertyJsonProperty\\\":null,\\\"DerivedPrivatePropertyJsonProperty\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicPropertyDataMember\\\":null,\\\"InternalPropertyDataMember\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivatePropertyDataMember\\\":null,\\\"PrivateProperty\\\":null}\"),\n                new Tuple<DataContractDerivedJsonPropertyType, string>(new DataContractDerivedJsonPropertyType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"DerivedPublicFieldJsonProperty\\\":\\\"DerivedPublicFieldNamedJsonProperty_XYZ\\\",\\\"DerivedInternalFieldJsonProperty\\\":\\\"DerivedInternalFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPrivateFieldJsonProperty\\\":\\\"DerivedPrivateFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicFieldDataMember\\\":\\\"PublicFieldNamedDataMember_XYZ\\\",\\\"InternalFieldDataMember\\\":\\\"InternalFieldNamedDataMember_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PrivateFieldDataMember\\\":\\\"PrivateFieldNamedDataMember_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\",\\\"DerivedPublicPropertyJsonProperty\\\":\\\"DerivedPublicPropertyNamedJsonProperty_XYZ\\\",\\\"DerivedInternalPropertyJsonProperty\\\":\\\"DerivedInternalPropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPrivatePropertyJsonProperty\\\":\\\"DerivedPrivatePropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicPropertyDataMember\\\":\\\"PublicPropertyNamedDataMember_XYZ\\\",\\\"InternalPropertyDataMember\\\":\\\"InternalPropertyNamedDataMember_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PrivatePropertyDataMember\\\":\\\"PrivatePropertyNamedDataMember_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DataContractDerivedJsonPropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                DataContractDerivedJsonPropertyType actual = new DataContractDerivedJsonPropertyType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                actual = new DataContractDerivedJsonPropertyType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<DataContractDerivedJsonPropertyType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual, expected);\n\n                actual = DefaultSerializer.Deserialize<DataContractDerivedJsonPropertyType>(input);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void DataContractDerivedJsonPropertyPopulation()\n        {\n            List<Tuple<DataContractDerivedJsonPropertyType, string>> testCases = new List<Tuple<DataContractDerivedJsonPropertyType, string>>() {\n                new Tuple<DataContractDerivedJsonPropertyType, string>(new DataContractDerivedJsonPropertyType(), \"{\\\"DerivedPublicFieldJsonProperty\\\":null,\\\"DerivedInternalFieldJsonProperty\\\":null,\\\"DerivedPrivateFieldJsonProperty\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicFieldDataMember\\\":null,\\\"InternalFieldDataMember\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateFieldDataMember\\\":null,\\\"PrivateField\\\":null,\\\"DerivedPublicPropertyJsonProperty\\\":null,\\\"DerivedInternalPropertyJsonProperty\\\":null,\\\"DerivedPrivatePropertyJsonProperty\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicPropertyDataMember\\\":null,\\\"InternalPropertyDataMember\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivatePropertyDataMember\\\":null,\\\"PrivateProperty\\\":null}\"),\n                new Tuple<DataContractDerivedJsonPropertyType, string>(new DataContractDerivedJsonPropertyType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"DerivedPublicFieldJsonProperty\\\":\\\"DerivedPublicFieldNamedJsonProperty_XYZ\\\",\\\"DerivedInternalFieldJsonProperty\\\":\\\"DerivedInternalFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPrivateFieldJsonProperty\\\":\\\"DerivedPrivateFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicFieldDataMember\\\":\\\"PublicFieldNamedDataMember_XYZ\\\",\\\"InternalFieldDataMember\\\":\\\"InternalFieldNamedDataMember_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PrivateFieldDataMember\\\":\\\"PrivateFieldNamedDataMember_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\",\\\"DerivedPublicPropertyJsonProperty\\\":\\\"DerivedPublicPropertyNamedJsonProperty_XYZ\\\",\\\"DerivedInternalPropertyJsonProperty\\\":\\\"DerivedInternalPropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPrivatePropertyJsonProperty\\\":\\\"DerivedPrivatePropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicPropertyDataMember\\\":\\\"PublicPropertyNamedDataMember_XYZ\\\",\\\"InternalPropertyDataMember\\\":\\\"InternalPropertyNamedDataMember_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PrivatePropertyDataMember\\\":\\\"PrivatePropertyNamedDataMember_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DataContractDerivedJsonPropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                DataContractDerivedJsonPropertyType actual = new DataContractDerivedJsonPropertyType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void JsonPropertyDerivedJsonPropertySerialization()\n        {\n            List<Tuple<JsonPropertyDerivedJsonPropertyType, string>> testCases = new List<Tuple<JsonPropertyDerivedJsonPropertyType, string>>() {\n                new Tuple<JsonPropertyDerivedJsonPropertyType, string>(new JsonPropertyDerivedJsonPropertyType(), \"{\\\"DerivedPublicFieldJsonProperty\\\":null,\\\"DerivedInternalFieldJsonProperty\\\":null,\\\"DerivedPrivateFieldJsonProperty\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"DerivedPublicFieldSansAttribute\\\":null,\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PublicFieldSansAttribute\\\":null,\\\"DerivedPublicPropertyJsonProperty\\\":null,\\\"DerivedInternalPropertyJsonProperty\\\":null,\\\"DerivedPrivatePropertyJsonProperty\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"DerivedPublicPropertySansAttribute\\\":null,\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PublicPropertySansAttribute\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"PrivateField\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"PrivateProperty\\\":null}\") ,\n                new Tuple<JsonPropertyDerivedJsonPropertyType, string>(new JsonPropertyDerivedJsonPropertyType(\"_XYZ\"), \"{\\\"DerivedPublicFieldJsonProperty\\\":\\\"DerivedPublicFieldNamedJsonProperty_XYZ\\\",\\\"DerivedInternalFieldJsonProperty\\\":\\\"DerivedInternalFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPrivateFieldJsonProperty\\\":\\\"DerivedPrivateFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"DerivedPublicFieldSansAttribute\\\":\\\"DerivedPublicFieldSansAttribute_XYZ\\\",\\\"PublicFieldJsonProperty\\\":\\\"PublicFieldNamedJsonProperty_XYZ\\\",\\\"InternalFieldJsonProperty\\\":\\\"InternalFieldNamedJsonProperty_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PublicFieldSansAttribute\\\":\\\"PublicFieldSansAttribute_XYZ\\\",\\\"DerivedPublicPropertyJsonProperty\\\":\\\"DerivedPublicPropertyNamedJsonProperty_XYZ\\\",\\\"DerivedInternalPropertyJsonProperty\\\":\\\"DerivedInternalPropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPrivatePropertyJsonProperty\\\":\\\"DerivedPrivatePropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"DerivedPublicPropertySansAttribute\\\":\\\"DerivedPublicPropertySansAttribute_XYZ\\\",\\\"PublicPropertyJsonProperty\\\":\\\"PublicPropertyNamedJsonProperty_XYZ\\\",\\\"InternalPropertyJsonProperty\\\":\\\"InternalPropertyNamedJsonProperty_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PublicPropertySansAttribute\\\":\\\"PublicPropertySansAttribute_XYZ\\\",\\\"PrivateFieldJsonProperty\\\":\\\"PrivateFieldNamedJsonProperty_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\",\\\"PrivatePropertyJsonProperty\\\":\\\"PrivatePropertyNamedJsonProperty_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\"}\") \n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(JsonPropertyDerivedJsonPropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void JsonPropertyDerivedJsonPropertyDeserialization()\n        {\n            List<Tuple<JsonPropertyDerivedJsonPropertyType, string>> testCases = new List<Tuple<JsonPropertyDerivedJsonPropertyType, string>>() {\n                new Tuple<JsonPropertyDerivedJsonPropertyType, string>(new JsonPropertyDerivedJsonPropertyType(), \"{\\\"DerivedPublicPropertyJsonProperty\\\":null,\\\"DerivedInternalPropertyJsonProperty\\\":null,\\\"DerivedPrivatePropertyJsonProperty\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateProperty\\\":null,\\\"DerivedPublicFieldJsonProperty\\\":null,\\\"DerivedInternalFieldJsonProperty\\\":null,\\\"DerivedPrivateFieldJsonProperty\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateField\\\":null,\\\"DerivedPublicPropertySansAttribute\\\":null,\\\"PublicPropertySansAttribute\\\":null,\\\"DerivedPublicFieldSansAttribute\\\":null,\\\"PublicFieldSansAttribute\\\":null}\"),\n                new Tuple<JsonPropertyDerivedJsonPropertyType, string>(new JsonPropertyDerivedJsonPropertyType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"DerivedPublicPropertyJsonProperty\\\":\\\"DerivedPublicPropertyNamedJsonProperty_XYZ\\\",\\\"DerivedInternalPropertyJsonProperty\\\":\\\"DerivedInternalPropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPrivatePropertyJsonProperty\\\":\\\"DerivedPrivatePropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicPropertyJsonProperty\\\":\\\"PublicPropertyNamedJsonProperty_XYZ\\\",\\\"InternalPropertyJsonProperty\\\":\\\"InternalPropertyNamedJsonProperty_XYZ\\\",\\\"PrivatePropertyJsonProperty\\\":null,\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PrivateProperty\\\":null,\\\"DerivedPublicFieldJsonProperty\\\":\\\"DerivedPublicFieldNamedJsonProperty_XYZ\\\",\\\"DerivedInternalFieldJsonProperty\\\":\\\"DerivedInternalFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPrivateFieldJsonProperty\\\":\\\"DerivedPrivateFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicFieldJsonProperty\\\":\\\"PublicFieldNamedJsonProperty_XYZ\\\",\\\"InternalFieldJsonProperty\\\":\\\"InternalFieldNamedJsonProperty_XYZ\\\",\\\"PrivateFieldJsonProperty\\\":null,\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PrivateField\\\":null,\\\"DerivedPublicPropertySansAttribute\\\":\\\"DerivedPublicPropertySansAttribute_XYZ\\\",\\\"PublicPropertySansAttribute\\\":\\\"PublicPropertySansAttribute_XYZ\\\",\\\"DerivedPublicFieldSansAttribute\\\":\\\"DerivedPublicFieldSansAttribute_XYZ\\\",\\\"PublicFieldSansAttribute\\\":\\\"PublicFieldSansAttribute_XYZ\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(JsonPropertyDerivedJsonPropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                JsonPropertyDerivedJsonPropertyType actual = new JsonPropertyDerivedJsonPropertyType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                actual = new JsonPropertyDerivedJsonPropertyType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<JsonPropertyDerivedJsonPropertyType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual, expected);\n\n                actual = DefaultSerializer.Deserialize<JsonPropertyDerivedJsonPropertyType>(input);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void JsonPropertyDerivedJsonPropertyPopulation()\n        {\n            List<Tuple<JsonPropertyDerivedJsonPropertyType, string>> testCases = new List<Tuple<JsonPropertyDerivedJsonPropertyType, string>>() {\n                new Tuple<JsonPropertyDerivedJsonPropertyType, string>(new JsonPropertyDerivedJsonPropertyType(), \"{\\\"DerivedPublicPropertyJsonProperty\\\":null,\\\"DerivedInternalPropertyJsonProperty\\\":null,\\\"DerivedPrivatePropertyJsonProperty\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateProperty\\\":null,\\\"DerivedPublicFieldJsonProperty\\\":null,\\\"DerivedInternalFieldJsonProperty\\\":null,\\\"DerivedPrivateFieldJsonProperty\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateField\\\":null,\\\"DerivedPublicPropertySansAttribute\\\":null,\\\"PublicPropertySansAttribute\\\":null,\\\"DerivedPublicFieldSansAttribute\\\":null,\\\"PublicFieldSansAttribute\\\":null}\"),\n                new Tuple<JsonPropertyDerivedJsonPropertyType, string>(new JsonPropertyDerivedJsonPropertyType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"DerivedPublicFieldJsonProperty\\\":\\\"DerivedPublicFieldNamedJsonProperty_XYZ\\\",\\\"DerivedInternalFieldJsonProperty\\\":\\\"DerivedInternalFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPrivateFieldJsonProperty\\\":\\\"DerivedPrivateFieldNamedJsonProperty_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"DerivedPublicFieldSansAttribute\\\":\\\"DerivedPublicFieldSansAttribute_XYZ\\\",\\\"PublicFieldJsonProperty\\\":\\\"PublicFieldNamedJsonProperty_XYZ\\\",\\\"InternalFieldJsonProperty\\\":\\\"InternalFieldNamedJsonProperty_XYZ\\\",\\\"PublicField\\\":\\\"PublicField_XYZ\\\",\\\"InternalField\\\":\\\"InternalField_XYZ\\\",\\\"PublicFieldSansAttribute\\\":\\\"PublicFieldSansAttribute_XYZ\\\",\\\"DerivedPublicPropertyJsonProperty\\\":\\\"DerivedPublicPropertyNamedJsonProperty_XYZ\\\",\\\"DerivedInternalPropertyJsonProperty\\\":\\\"DerivedInternalPropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPrivatePropertyJsonProperty\\\":\\\"DerivedPrivatePropertyNamedJsonProperty_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"DerivedPublicPropertySansAttribute\\\":\\\"DerivedPublicPropertySansAttribute_XYZ\\\",\\\"PublicPropertyJsonProperty\\\":\\\"PublicPropertyNamedJsonProperty_XYZ\\\",\\\"InternalPropertyJsonProperty\\\":\\\"InternalPropertyNamedJsonProperty_XYZ\\\",\\\"PublicProperty\\\":\\\"PublicProperty_XYZ\\\",\\\"InternalProperty\\\":\\\"InternalProperty_XYZ\\\",\\\"PublicPropertySansAttribute\\\":\\\"PublicPropertySansAttribute_XYZ\\\",\\\"PrivateFieldJsonProperty\\\":\\\"PrivateFieldNamedJsonProperty_XYZ\\\",\\\"PrivateField\\\":\\\"PrivateField_XYZ\\\",\\\"PrivatePropertyJsonProperty\\\":\\\"PrivatePropertyNamedJsonProperty_XYZ\\\",\\\"PrivateProperty\\\":\\\"PrivateProperty_XYZ\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(JsonPropertyDerivedJsonPropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                JsonPropertyDerivedJsonPropertyType actual = new JsonPropertyDerivedJsonPropertyType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void JsonPropertyDerivedDataContractSerialization()\n        {\n            // Verifies that given a object it serializes into the expected string representation\n            List<Tuple<JsonPropertyDerivedDataContractType, string>> testCases = new List<Tuple<JsonPropertyDerivedDataContractType, string>>() {                                                                                                      \n                new Tuple<JsonPropertyDerivedDataContractType, string>(new JsonPropertyDerivedDataContractType(), \"{\\\"DerivedPublicFieldDataMember\\\":null,\\\"DerivedInternalFieldDataMember\\\":null,\\\"DerivedPrivateFieldDataMember\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"DerivedPublicPropertyDataMember\\\":null,\\\"DerivedInternalPropertyDataMember\\\":null,\\\"DerivedPrivatePropertyDataMember\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"PrivateField\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"PrivateProperty\\\":null}\"), \n                new Tuple<JsonPropertyDerivedDataContractType, string>(new JsonPropertyDerivedDataContractType(\"_XYZ\"), \"{\\\"DerivedPublicFieldDataMember\\\":\\\"DerivedPublicFieldNamedDataMember_XYZ\\\",\\\"DerivedInternalFieldDataMember\\\":\\\"DerivedInternalFieldNamedDataMember_XYZ\\\",\\\"DerivedPrivateFieldDataMember\\\":\\\"DerivedPrivateFieldNamedDataMember_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"DerivedPublicPropertyDataMember\\\":\\\"DerivedPublicPropertyNamedDataMember_XYZ\\\",\\\"DerivedInternalPropertyDataMember\\\":\\\"DerivedInternalPropertyNamedDataMember_XYZ\\\",\\\"DerivedPrivatePropertyDataMember\\\":\\\"DerivedPrivatePropertyNamedDataMember_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"PrivateField\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"PrivateProperty\\\":null}\")            \n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(JsonPropertyDerivedDataContractType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void JsonPropertyDerivedDataContractDeserialization()\n        {\n            // Verifies that given a serialized json object, it can be deserialized into the expected object\n            // It also checks that deserializing an object into a different one will correctly override the\n            // properties of the original\n            List<Tuple<JsonPropertyDerivedDataContractType, string>> testCases = new List<Tuple<JsonPropertyDerivedDataContractType, string>>() {\n                new Tuple<JsonPropertyDerivedDataContractType, string>(new JsonPropertyDerivedDataContractType(), \"{\\\"DerivedPublicFieldDataMember\\\":null,\\\"DerivedInternalFieldDataMember\\\":null,\\\"DerivedPrivateFieldDataMember\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"PrivateField\\\":null,\\\"DerivedPublicPropertyDataMember\\\":null,\\\"DerivedInternalPropertyDataMember\\\":null,\\\"DerivedPrivatePropertyDataMember\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"PrivateProperty\\\":null}\"),\n                new Tuple<JsonPropertyDerivedDataContractType, string>(new JsonPropertyDerivedDataContractType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"DerivedPublicFieldDataMember\\\":\\\"DerivedPublicFieldNamedDataMember_XYZ\\\",\\\"DerivedInternalFieldDataMember\\\":\\\"DerivedInternalFieldNamedDataMember_XYZ\\\",\\\"DerivedPrivateFieldDataMember\\\":\\\"DerivedPrivateFieldNamedDataMember_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"PrivateField\\\":null,\\\"DerivedPublicPropertyDataMember\\\":\\\"DerivedPublicPropertyNamedDataMember_XYZ\\\",\\\"DerivedInternalPropertyDataMember\\\":\\\"DerivedInternalPropertyNamedDataMember_XYZ\\\",\\\"DerivedPrivatePropertyDataMember\\\":\\\"DerivedPrivatePropertyNamedDataMember_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"PrivateProperty\\\":null}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(JsonPropertyDerivedDataContractType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase.Item2);\n                var expected = testCase.Item1;\n\n                JsonPropertyDerivedDataContractType actual = new JsonPropertyDerivedDataContractType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                actual = new JsonPropertyDerivedDataContractType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n\n                JArray json = JToken.Parse(\"[\" + testCase.Item2 + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<JsonPropertyDerivedDataContractType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual, expected);\n\n                actual = DefaultSerializer.Deserialize<JsonPropertyDerivedDataContractType>(input);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void JsonPropertyDerivedDataContractPopulation()\n        {\n            // Verifies that given a serialized json object, it can be deserialized into the expected object\n            List<Tuple<JsonPropertyDerivedDataContractType, string>> testCases = new List<Tuple<JsonPropertyDerivedDataContractType, string>>() {\n                new Tuple<JsonPropertyDerivedDataContractType, string>(new JsonPropertyDerivedDataContractType(), \"{\\\"DerivedPublicFieldDataMember\\\":null,\\\"DerivedInternalFieldDataMember\\\":null,\\\"DerivedPrivateFieldDataMember\\\":null,\\\"DerivedPublicField\\\":null,\\\"DerivedInternalField\\\":null,\\\"DerivedPrivateField\\\":null,\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"PrivateField\\\":null,\\\"DerivedPublicPropertyDataMember\\\":null,\\\"DerivedInternalPropertyDataMember\\\":null,\\\"DerivedPrivatePropertyDataMember\\\":null,\\\"DerivedPublicProperty\\\":null,\\\"DerivedInternalProperty\\\":null,\\\"DerivedPrivateProperty\\\":null,\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"PrivateProperty\\\":null}\"),\n                new Tuple<JsonPropertyDerivedDataContractType, string>(new JsonPropertyDerivedDataContractType(\"_XYZ\", onlySetSerializableMembers: true), \"{\\\"DerivedPublicFieldDataMember\\\":\\\"DerivedPublicFieldNamedDataMember_XYZ\\\",\\\"DerivedInternalFieldDataMember\\\":\\\"DerivedInternalFieldNamedDataMember_XYZ\\\",\\\"DerivedPrivateFieldDataMember\\\":\\\"DerivedPrivateFieldNamedDataMember_XYZ\\\",\\\"DerivedPublicField\\\":\\\"DerivedPublicField_XYZ\\\",\\\"DerivedInternalField\\\":\\\"DerivedInternalField_XYZ\\\",\\\"DerivedPrivateField\\\":\\\"DerivedPrivateField_XYZ\\\",\\\"PublicFieldJsonProperty\\\":null,\\\"InternalFieldJsonProperty\\\":null,\\\"PublicField\\\":null,\\\"InternalField\\\":null,\\\"DerivedPublicPropertyDataMember\\\":\\\"DerivedPublicPropertyNamedDataMember_XYZ\\\",\\\"DerivedInternalPropertyDataMember\\\":\\\"DerivedInternalPropertyNamedDataMember_XYZ\\\",\\\"DerivedPrivatePropertyDataMember\\\":\\\"DerivedPrivatePropertyNamedDataMember_XYZ\\\",\\\"DerivedPublicProperty\\\":\\\"DerivedPublicProperty_XYZ\\\",\\\"DerivedInternalProperty\\\":\\\"DerivedInternalProperty_XYZ\\\",\\\"DerivedPrivateProperty\\\":\\\"DerivedPrivateProperty_XYZ\\\",\\\"PublicPropertyJsonProperty\\\":null,\\\"InternalPropertyJsonProperty\\\":null,\\\"PublicProperty\\\":null,\\\"InternalProperty\\\":null,\\\"PrivateFieldJsonProperty\\\":null,\\\"PrivateField\\\":null,\\\"PrivatePropertyJsonProperty\\\":null,\\\"PrivateProperty\\\":null}\")\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(JsonPropertyDerivedDataContractType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                JsonPropertyDerivedDataContractType actual = new JsonPropertyDerivedDataContractType(\"_ABC\", onlySetSerializableMembers: true);\n                DefaultSerializer.Deserialize(input, actual);\n\n                string test = DefaultSerializer.Serialize(expected).ToString(Formatting.None);\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void SimpleTreeSerialization()\n        {\n            List<Tuple<SimpleTreeType, string>> testCases = new List<Tuple<SimpleTreeType, string>>() {\n                new Tuple<SimpleTreeType, string>(new SimpleTreeType(), \"{\\\"Name\\\":null,\\\"Children\\\":[]}\"),\n                new Tuple<SimpleTreeType, string>(new SimpleTreeType(setValues:true), \"{\\\"id\\\":5,\\\"Name\\\":\\\"Root\\\",\\\"Children\\\":[{\\\"id\\\":6,\\\"Name\\\":\\\"Child1\\\",\\\"Children\\\":[]},{\\\"id\\\":7,\\\"Name\\\":\\\"Child2\\\",\\\"Children\\\":[]}]}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(SimpleTreeType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void SimpleTreeDeserialization()\n        {\n            List<Tuple<SimpleTreeType, string>> testCases = new List<Tuple<SimpleTreeType, string>>() {\n                new Tuple<SimpleTreeType, string>(new SimpleTreeType(), \"{\\\"Name\\\":null,\\\"Children\\\":[]}\"),\n                new Tuple<SimpleTreeType, string>(new SimpleTreeType(setValues:true), \"{\\\"id\\\":5,\\\"name\\\":\\\"Root\\\",\\\"children\\\":[{\\\"id\\\":6,\\\"name\\\":\\\"Child1\\\",\\\"children\\\":[]},{\\\"id\\\":7,\\\"name\\\":\\\"Child2\\\",\\\"children\\\":[]}]}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(SimpleTreeType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                SimpleTreeType actual = new SimpleTreeType(setValues: input != \"{\\\"Name\\\":null,\\\"Children\\\":[]}\");\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void SimpleTreePopulation()\n        {\n            List<Tuple<SimpleTreeType, string>> testCases = new List<Tuple<SimpleTreeType, string>>() {\n                new Tuple<SimpleTreeType, string>(new SimpleTreeType(), \"{\\\"Name\\\":null,\\\"Children\\\":[]}\"),\n                new Tuple<SimpleTreeType, string>(new SimpleTreeType(setValues:true), \"{\\\"id\\\":5,\\\"name\\\":\\\"Root\\\",\\\"children\\\":[{\\\"id\\\":6,\\\"name\\\":\\\"Child1\\\",\\\"children\\\":[]},{\\\"id\\\":7,\\\"name\\\":\\\"Child2\\\",\\\"children\\\":[]}]}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(SimpleTreeType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                SimpleTreeType actual = new SimpleTreeType();\n                actual.Name = \"Not the original name\";\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        [Tag(\"notWP75\")]\n        public void DataContractDerivedPocoSerialization()\n        {\n            Exception actual = null;\n\n            try\n            {\n                // Need to ensure that the type is registered as a table to force the id property check\n                DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(DataContractDerivedPocoType));\n\n                DefaultSerializer.Serialize(new DataContractDerivedPocoType());\n            }\n            catch (Exception e)\n            {\n                actual = e;\n            }\n\n            Assert.AreEqual(actual.Message, \"The type 'Microsoft.WindowsAzure.MobileServices.Test.DataContractDerivedPocoType' does not have a DataContractAttribute, but the type derives from the type 'Microsoft.WindowsAzure.MobileServices.Test.DataContractType', which does have a DataContractAttribute. If a type has a DataContractAttribute, any type that derives from that type must also have a DataContractAttribute.\");\n        }\n\n        [TestMethod]\n        public void DataMemberSerialization()\n        {\n            Exception actual = null;\n\n            try\n            {\n                DefaultSerializer.Serialize(new DataMemberType());\n            }\n            catch (Exception e)\n            {\n                actual = e;\n            }\n\n            Assert.AreEqual(actual.Message, \"The type 'Microsoft.WindowsAzure.MobileServices.Test.DataMemberType' has one or members with a DataMemberAttribute, but the type itself does not have a DataContractAttribute. Use the Newtonsoft.Json.JsonPropertyAttribute in place of the DataMemberAttribute and set the PropertyName to the desired name.\");\n        }\n\n        [TestMethod]\n        public void DuplicateKeySerialization()\n        {\n            Exception actual = null;\n\n            try\n            {\n                DefaultSerializer.Serialize(new DuplicateKeyType());\n            }\n            catch (Exception e)\n            {\n                actual = e;\n            }\n\n            Assert.AreEqual(actual.Message, \"A member with the name 'PublicProperty' already exists on 'Microsoft.WindowsAzure.MobileServices.Test.DuplicateKeyType'. Use the JsonPropertyAttribute to specify another name.\");\n        }\n\n        [TestMethod]\n        public void DerivedDuplicateKeySerialization()\n        {\n            string expected = \"{\\\"PublicField\\\":null,\\\"PublicProperty\\\":\\\"OtherThanPublicProperty\\\"}\";\n            var instance = new DerivedDuplicateKeyType();\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(instance.GetType());\n            instance.OtherThanPublicProperty = \"OtherThanPublicProperty\";\n            instance.PublicProperty = \"PublicProperty\";\n            string actual = DefaultSerializer.Serialize(instance).ToString(Formatting.None);\n\n            Assert.AreEqual(actual, expected);\n        }\n\n        [TestMethod]\n        public void IdTypeSerialization()\n        {\n            List<Tuple<object, string>> testCases = new List<Tuple<object, string>>() {\n                new Tuple<object, string>(new idType() { id = 9 }, \"{\\\"id\\\":9}\"),\n                new Tuple<object, string>(new IDType() { ID = 10 }, \"{\\\"id\\\":10}\"),\n            };\n\n            foreach (var testCase in testCases)\n            {\n                // Need to ensure that the type is registered as a table to force the id property check\n                DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(testCase.Item1.GetType());\n\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void IdTypeSerializationNegative()\n        {\n            List<Tuple<object, string>> testCases = new List<Tuple<object, string>>() {\n                new Tuple<object, string>(new iDType() { iD = 8 }, \"No 'id' member found on type 'Microsoft.WindowsAzure.MobileServices.Test.iDType'.\"),\n                new Tuple<object, string>(new DataContractMissingIdType() { id = 8 }, \"No 'id' member found on type 'Microsoft.WindowsAzure.MobileServices.Test.DataContractMissingIdType'.\"),\n                new Tuple<object, string>(new IgnoreDataMemberMissingIdType() { id = 8 }, \"No 'id' member found on type 'Microsoft.WindowsAzure.MobileServices.Test.IgnoreDataMemberMissingIdType'.\"),\n                new Tuple<object, string>(new JsonIgnoreMissingIdType() { id = 8 }, \"No 'id' member found on type 'Microsoft.WindowsAzure.MobileServices.Test.JsonIgnoreMissingIdType'.\"),\n                new Tuple<object, string>(new MulitpleIdType() { Id = 7, id = 8 }, \"Only one member may have the property name 'id' (regardless of casing) on type 'Microsoft.WindowsAzure.MobileServices.Test.MulitpleIdType'.\")\n            };\n\n            foreach (var testCase in testCases)\n            {\n\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n                Exception actual = null;\n                try\n                {\n                    // Need to ensure that the type is registered as a table to force the id property check\n                    DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(input.GetType());\n\n                    DefaultSerializer.Serialize(input);\n                }\n                catch (Exception e)\n                {\n                    actual = e;\n                }\n\n                Assert.AreEqual(actual.Message, expected);\n            }\n        }\n\n        [TestMethod]\n        public void InterfacePropertyTypeSerialization()\n        {\n            List<Tuple<object, string>> testCases = new List<Tuple<object, string>>() {\n                new Tuple<object, string>(new InterfacePropertyType() { Id = 5, Lookup = new Dictionary<string,string>() { { \"x\", \"y\"}} }, \"{\\\"id\\\":5,\\\"Lookup\\\":{\\\"x\\\":\\\"y\\\"}}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(InterfacePropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void InterfacePropertyTypeDeserialization()\n        {\n            List<Tuple<object, string>> testCases = new List<Tuple<object, string>>() {\n                new Tuple<object, string>(new InterfacePropertyType() { Id = 5, Lookup = new Dictionary<string,string>() { { \"x\", \"y\"}} }, \"{\\\"id\\\":5,\\\"Lookup\\\":{\\\"x\\\":\\\"y\\\"}}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(InterfacePropertyType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                var actual = new InterfacePropertyType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void EnumSerialization()\n        {\n            List<Tuple<EnumType, string>> testCases = new List<Tuple<EnumType, string>>() {\n                new Tuple<EnumType, string>(new EnumType() { Enum1 = Enum1.Enum1Value1 }, \"{\\\"Enum1\\\":\\\"Enum1Value1\\\",\\\"Enum2\\\":\\\"Enum2Value1\\\",\\\"Enum3\\\":0,\\\"Enum4\\\":\\\"Enum4Value1\\\",\\\"Enum5\\\":\\\"Enum5Value1\\\",\\\"Enum6\\\":0}\"),\n                new Tuple<EnumType, string>(new EnumType() { Enum1 = Enum1.Enum1Value2 }, \"{\\\"Enum1\\\":\\\"Enum1Value2\\\",\\\"Enum2\\\":\\\"Enum2Value1\\\",\\\"Enum3\\\":0,\\\"Enum4\\\":\\\"Enum4Value1\\\",\\\"Enum5\\\":\\\"Enum5Value1\\\",\\\"Enum6\\\":0}\"),\n                new Tuple<EnumType, string>(new EnumType() { Enum3 = Enum3.Enum3Value2 | Enum3.Enum3Value1 }, \"{\\\"Enum1\\\":\\\"Enum1Value1\\\",\\\"Enum2\\\":\\\"Enum2Value1\\\",\\\"Enum3\\\":\\\"Enum3Value1, Enum3Value2\\\",\\\"Enum4\\\":\\\"Enum4Value1\\\",\\\"Enum5\\\":\\\"Enum5Value1\\\",\\\"Enum6\\\":0}\"),\n                new Tuple<EnumType, string>(new EnumType() { Enum1 = (Enum1)1000 }, \"{\\\"Enum1\\\":1000,\\\"Enum2\\\":\\\"Enum2Value1\\\",\\\"Enum3\\\":0,\\\"Enum4\\\":\\\"Enum4Value1\\\",\\\"Enum5\\\":\\\"Enum5Value1\\\",\\\"Enum6\\\":0}\"),\n                new Tuple<EnumType, string>(new EnumType() { Enum1 = (Enum1)(-1000) }, \"{\\\"Enum1\\\":-1000,\\\"Enum2\\\":\\\"Enum2Value1\\\",\\\"Enum3\\\":0,\\\"Enum4\\\":\\\"Enum4Value1\\\",\\\"Enum5\\\":\\\"Enum5Value1\\\",\\\"Enum6\\\":0}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(EnumType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void EnumDeserialization()\n        {\n            List<Tuple<EnumType, string>> testCases = new List<Tuple<EnumType, string>>() {\n                new Tuple<EnumType, string>(new EnumType() { Enum1 = Enum1.Enum1Value1 }, \"{\\\"Enum1\\\":'Enum1Value1'}\"),\n                new Tuple<EnumType, string>(new EnumType() { Enum1 = Enum1.Enum1Value2 }, \"{\\\"Enum1\\\":'Enum1Value2'}\"),\n                new Tuple<EnumType, string>(new EnumType() { Enum3 = Enum3.Enum3Value2 | Enum3.Enum3Value1 }, \"{\\\"Enum3\\\":'Enum3Value2,Enum3Value1'}\"),\n                new Tuple<EnumType, string>(new EnumType() { Enum3 = (Enum3)1000 }, \"{\\\"Enum3\\\":1000}\"),\n                new Tuple<EnumType, string>(new EnumType() { Enum1 = (Enum1)(-1000) }, \"{\\\"Enum1\\\":-1000}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(EnumType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                EnumType actual = new EnumType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.Enum1, expected.Enum1);\n            }\n        }\n\n        [TestMethod]\n        public void ComplexTypeSerialization()\n        {\n            // This test checks that child type does not have to have an id\n            List<Tuple<object, string>> testCases = new List<Tuple<object, string>>() {\n                new Tuple<object, string>(new ComplexType() { Id = 5, Name = \"Some Name\", Child = new MissingIdType() { NotAnId = 4 }}, \"{\\\"id\\\":5,\\\"Name\\\":\\\"Some Name\\\",\\\"Child\\\":{\\\"NotAnId\\\":4}}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(ComplexType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void CustomConverterOnPropertyTestSerialization()\n        {\n            List<Tuple<ConverterType, string>> testCases = new List<Tuple<ConverterType, string>>\n            {\n                new Tuple<ConverterType, string>(\n                    new ConverterType { Number = 12 },\n                    \"{\\\"Number\\\":null}\"),\n                new Tuple<ConverterType, string>(\n                    new ConverterType { Number = 0 },\n                    \"{\\\"Number\\\":null}\"),\n            };\n\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(ConverterType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void CustomConverterOnPropertyTestDeserialization()\n        {\n            List<string> testCases = new List<string>\n            {\n                \"{\\\"Number\\\":\\\"14\\\"}\",\n                \"{\\\"Number\\\":\\\"12\\\"}\",\n            };\n\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(ConverterType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = JToken.Parse(testCase);\n\n                ConverterType actual = new ConverterType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.Number, 0);\n\n                actual = new ConverterType();\n                actual.Number = 10;\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.Number, 10);\n\n                JArray json = JToken.Parse(\"[\" + testCase + \"]\") as JArray;\n                actual = DefaultSerializer.Deserialize<ConverterType>(json).FirstOrDefault();\n\n                Assert.AreEqual(actual.Number, 0);\n\n                actual = (ConverterType)DefaultSerializer.Deserialize<ConverterType>(input);\n\n                Assert.AreEqual(actual.Number, 0);\n            }\n        }\n\n        [TestMethod]\n        public void CreatedAtTypeSerialization()\n        {\n            List<Tuple<CreatedAtType, string>> testCases = new List<Tuple<CreatedAtType, string>>\n            {\n                new Tuple<CreatedAtType, string>(\n                    new CreatedAtType { CreatedAt = new DateTime(2012, 1, 5, 12, 0, 0, DateTimeKind.Utc) },\n                    \"{\\\"__createdAt\\\":\\\"2012-01-05T12:00:00.000Z\\\"}\"),\n                new Tuple<CreatedAtType, string>(\n                    new CreatedAtType { CreatedAt = default(DateTime) },\n                    \"{\\\"__createdAt\\\":\" + MinDateTimeSerializedToJson + \"}\"),\n            };\n\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(CreatedAtType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void CreatedAtTypeDeserialization()\n        {\n            List<Tuple<CreatedAtType, string>> testCases = new List<Tuple<CreatedAtType, string>>() {\n                new Tuple<CreatedAtType, string>(new CreatedAtType { CreatedAt = default(DateTime) }, \"{\\\"__createdAt\\\":\" + MinDateTimeSerializedToJson + \"}\"),\n                new Tuple<CreatedAtType, string>(new CreatedAtType { CreatedAt = new DateTime(2012, 1, 5, 12, 0, 0, DateTimeKind.Utc) }, \"{\\\"__createdAt\\\":\\\"2012-01-05T12:00:00.000Z\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(CreatedAtType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                CreatedAtType actual = new CreatedAtType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.CreatedAt.ToUniversalTime(), expected.CreatedAt.ToUniversalTime());\n            }\n        }\n\n        [TestMethod]\n        public void UpdatedAtTypeSerialization()\n        {\n            List<Tuple<UpdatedAtType, string>> testCases = new List<Tuple<UpdatedAtType, string>>\n            {\n                new Tuple<UpdatedAtType, string>(\n                    new UpdatedAtType { UpdatedAt = new DateTime(2012, 1, 5, 12, 0, 0, DateTimeKind.Utc) },\n                    \"{\\\"__updatedAt\\\":\\\"2012-01-05T12:00:00.000Z\\\"}\"),\n                new Tuple<UpdatedAtType, string>(\n                    new UpdatedAtType { UpdatedAt = default(DateTime) },\n                    \"{\\\"__updatedAt\\\":\" + MinDateTimeSerializedToJson + \"}\"),\n            };\n\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(UpdatedAtType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void UpdatedAtTypeDeserialization()\n        {\n            List<Tuple<UpdatedAtType, string>> testCases = new List<Tuple<UpdatedAtType, string>>() {\n                new Tuple<UpdatedAtType, string>(new UpdatedAtType { UpdatedAt = default(DateTime) }, \"{\\\"__updatedAt\\\":\" + MinDateTimeSerializedToJson + \"}\"),\n                new Tuple<UpdatedAtType, string>(new UpdatedAtType { UpdatedAt = new DateTime(2012, 1, 5, 12, 0, 0, DateTimeKind.Utc) }, \"{\\\"__updatedAt\\\":\\\"2012-01-05T12:00:00.000Z\\\"}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(UpdatedAtType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                UpdatedAtType actual = new UpdatedAtType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.UpdatedAt.ToUniversalTime(), expected.UpdatedAt.ToUniversalTime());\n            }\n        }\n\n        [TestMethod]\n        public void Deserialize_DoesNotTransformException_WhenIdTypeDoesNotMismatch()\n        {\n            var ex = Throws<JsonSerializationException>(() =>\n            {\n                var token = new JValue(true);\n                DefaultSerializer.Deserialize<LongIdType>(token);\n            });\n\n            Assert.AreEqual(ex.Message, \"Error converting value True to type 'Microsoft.WindowsAzure.MobileServices.Test.LongIdType'. Path ''.\");\n        }\n\n        [TestMethod]\n        public void Deserialize_TransoformsException_WhenIdTypeMismatches()\n        {\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(LongIdType));\n\n            var ex = Throws<JsonSerializationException>(() =>\n            {\n                var token = new JObject() { {\"id\", \"asdf\"} };\n                DefaultSerializer.Deserialize<LongIdType>(token);\n            });\n\n            string expectedMessage = @\"Error converting value \"\"asdf\"\" to type 'System.Int64'. Path 'id'.\" + Environment.NewLine + @\"You might be affected by Mobile Services latest changes to support string Ids. For more details: http://go.microsoft.com/fwlink/?LinkId=330396\";\n\n            Assert.AreEqual(ex.Message, expectedMessage);\n        }\n\n        [TestMethod]\n        public void VersionTypeSerialization()\n        {\n            List<Tuple<VersionType, string>> testCases = new List<Tuple<VersionType, string>>\n            {\n                new Tuple<VersionType, string>(new VersionType { Version = \"0x0004F\" }, \"{\\\"__version\\\":\\\"0x0004F\\\"}\"),\n                new Tuple<VersionType, string>(new VersionType { Version = null }, \"{\\\"__version\\\":null}\"),\n            };\n\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(VersionType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void VersionTypeDeserialization()\n        {\n            List<Tuple<VersionType, string>> testCases = new List<Tuple<VersionType, string>>() {\n                new Tuple<VersionType, string>(new VersionType { Version = \"0x0004F\" }, \"{\\\"__version\\\":\\\"0x0004F\\\"}\"),\n                new Tuple<VersionType, string>(new VersionType { Version = null }, \"{\\\"__version\\\":null}\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(VersionType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                VersionType actual = new VersionType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.Version, expected.Version);\n            }\n        }\n\n        [TestMethod]\n        public void AllSystemPropertiesTypeSerialization()\n        {\n            List<Tuple<AllSystemPropertiesType, string>> testCases = new List<Tuple<AllSystemPropertiesType, string>>\n            {\n                new Tuple<AllSystemPropertiesType, string>(new AllSystemPropertiesType { UpdatedAt = new DateTime(2012, 1, 5, 12, 0, 0, DateTimeKind.Utc),\n                                                                                         CreatedAt = new DateTime(2012, 1, 5, 12, 0, 0, DateTimeKind.Utc), \n                                                                                         Version = \"0x0004F\" }, \n                                                                                         \"{\\\"__createdAt\\\":\\\"2012-01-05T12:00:00.000Z\\\",\\\"__updatedAt\\\":\\\"2012-01-05T12:00:00.000Z\\\",\\\"__version\\\":\\\"0x0004F\\\"}\"),\n                new Tuple<AllSystemPropertiesType, string>(\n                    new AllSystemPropertiesType { Version = null }, \n                    \"{\\\"__createdAt\\\":MIN_DATE,\\\"__updatedAt\\\":MIN_DATE,\\\"__version\\\":null}\".Replace(\"MIN_DATE\", MinDateTimeSerializedToJson)\n                ),\n            };\n\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(AllSystemPropertiesType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                string actual = DefaultSerializer.Serialize(input).ToString(Formatting.None);\n\n                Assert.AreEqual(actual, expected);\n            }\n        }\n\n        [TestMethod]\n        public void AllSystemPropertiesTypeDeserialization()\n        {\n            List<Tuple<AllSystemPropertiesType, string>> testCases = new List<Tuple<AllSystemPropertiesType, string>>\n            {\n                new Tuple<AllSystemPropertiesType, string>(new AllSystemPropertiesType { UpdatedAt = new DateTime(2012, 1, 5, 12, 0, 0, DateTimeKind.Utc),\n                                                                                         CreatedAt = new DateTime(2012, 1, 5, 12, 0, 0, DateTimeKind.Utc), \n                                                                                         Version = \"0x0004F\" }, \n                                                                                         \"{\\\"__createdAt\\\":\\\"2012-01-05T12:00:00.000Z\\\",\\\"__updatedAt\\\":\\\"2012-01-05T12:00:00.000Z\\\",\\\"__version\\\":\\\"0x0004F\\\"}\"),\n                new Tuple<AllSystemPropertiesType, string>(\n                    new AllSystemPropertiesType { Version = null }, \n                    \"{\\\"__createdAt\\\":MIN_DATE,\\\"__updatedAt\\\":MIN_DATE,\\\"__version\\\":null}\".Replace(\"MIN_DATE\", MinDateTimeSerializedToJson)),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(AllSystemPropertiesType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item2;\n                var expected = testCase.Item1;\n\n                AllSystemPropertiesType actual = new AllSystemPropertiesType();\n                DefaultSerializer.Deserialize(input, actual);\n\n                Assert.AreEqual(actual.CreatedAt.ToUniversalTime(), expected.CreatedAt.ToUniversalTime());\n                Assert.AreEqual(actual.UpdatedAt.ToUniversalTime(), expected.UpdatedAt.ToUniversalTime());\n                Assert.AreEqual(actual.Version, expected.Version);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Table/Sync/MobileServiceSyncContext.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"unit\")]\n    [Tag(\"offline\")]\n    [Tag(\"synccontext\")]\n    public class MobileServiceSyncContextTests : TestBase\n    {\n\n        [AsyncTestMethod]\n        public async Task InitializeAsync_Throws_WhenStoreIsNull()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await AssertEx.Throws<ArgumentException>(() => service.SyncContext.InitializeAsync(null));\n        }\n\n        [AsyncTestMethod]\n        public async Task InitializeAsync_DoesNotThrow_WhenSyncHandlerIsNull()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), null);\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_ExecutesThePendingOperations_InOrder()\n        {\n            var hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            var store = new MobileServiceLocalStoreMock();\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n\n            JObject item1 = new JObject() { { \"id\", \"abc\" } }, item2 = new JObject() { { \"id\", \"def\" } };\n\n            await table.InsertAsync(item1);\n            await table.InsertAsync(item2);\n\n            Assert.AreEqual(hijack.Requests.Count, 0);\n\n            // create a new service to test that operations are loaded from store\n            hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"What\\\"}\");\n\n            service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            Assert.AreEqual(hijack.Requests.Count, 0);\n            await service.SyncContext.PushAsync();\n            Assert.AreEqual(hijack.Requests.Count, 2);\n\n            Assert.AreEqual(hijack.RequestContents[0], item1.ToString(Formatting.None));\n            Assert.AreEqual(hijack.Requests[0].Headers.GetValues(\"X-ZUMO-FEATURES\").First(), \"TU,OL\");\n            Assert.AreEqual(hijack.RequestContents[1], item2.ToString(Formatting.None));\n            Assert.AreEqual(hijack.Requests[1].Headers.GetValues(\"X-ZUMO-FEATURES\").First(), \"TU,OL\");\n\n            // create yet another service to make sure the old items were purged from queue\n            hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n            Assert.AreEqual(hijack.Requests.Count, 0);\n            await service.SyncContext.PushAsync();\n            Assert.AreEqual(hijack.Requests.Count, 0);\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_FeatureHeaderPresent()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            var store = new MobileServiceLocalStoreMock();\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n            JObject item1 = new JObject() { { \"id\", \"abc\" } };\n            await table.InsertAsync(item1);\n            await service.SyncContext.PushAsync();\n\n            Assert.AreEqual(hijack.Requests[0].Headers.GetValues(\"X-ZUMO-FEATURES\").First(), \"TU,OL\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_FeatureHeaderPresentWhenRehydrated()\n        {\n            var hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            var store = new MobileServiceLocalStoreMock();\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n            JObject item1 = new JObject() { { \"id\", \"abc\" } };\n            await table.InsertAsync(item1);\n\n            // create a new service to test that operations are loaded from store\n            hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n\n            service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n            await service.SyncContext.PushAsync();\n\n            Assert.AreEqual(hijack.Requests[0].Headers.GetValues(\"X-ZUMO-FEATURES\").First(), \"TU,OL\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_ReplaysStoredErrors_IfTheyAreInStore()\n        {\n            var error = new MobileServiceTableOperationError(\"abc\",\n                                                            1,\n                                                            MobileServiceTableOperationKind.Update,\n                                                            HttpStatusCode.PreconditionFailed,\n                                                            \"test\",\n                                                            new JObject(),\n                                                            \"{}\",\n                                                            new JObject());\n            var store = new MobileServiceLocalStoreMock();\n            await store.UpsertAsync(MobileServiceLocalSystemTables.SyncErrors, error.Serialize(), fromServer: false);\n\n            var hijack = new TestHttpHandler();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            var ex = await ThrowsAsync<MobileServicePushFailedException>(service.SyncContext.PushAsync);\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_Succeeds_WhenDeleteReturnsNotFound()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.NotFound));\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandlerMock());\n\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n\n            await table.DeleteAsync(new JObject() { { \"id\", \"abc\" }, { \"__version\", \"Wow\" } });\n\n            await service.SyncContext.PushAsync();\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_DoesNotRunHandler_WhenTableTypeIsNotTable()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"__version\\\":\\\"Hey\\\"}\");\n\n            bool invoked = false;\n            var handler = new MobileServiceSyncHandlerMock();\n            handler.TableOperationAction = op =>\n            {\n                invoked = true;\n                throw new InvalidOperationException();\n            };\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), handler);\n\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n\n            await table.InsertAsync(new JObject() { { \"id\", \"abc\" }, { \"__version\", \"Wow\" } });\n\n            await (service.SyncContext as MobileServiceSyncContext).PushAsync(CancellationToken.None, (MobileServiceTableKind)1);\n\n            Assert.IsFalse(invoked);\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_InvokesHandler_WhenTableTypeIsTable()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.InternalServerError));\n\n            bool invoked = false;\n            var handler = new MobileServiceSyncHandlerMock();\n            handler.TableOperationAction = op =>\n            {\n                invoked = true;\n                return Task.FromResult(JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"__version\\\":\\\"Hey\\\"}\"));\n            };\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), handler);\n\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n\n            await table.InsertAsync(new JObject() { { \"id\", \"abc\" }, { \"__version\", \"Wow\" } });\n\n            await (service.SyncContext as MobileServiceSyncContext).PushAsync(CancellationToken.None, MobileServiceTableKind.Table);\n\n            Assert.IsTrue(invoked);\n        }\n        \n        [AsyncTestMethod]\n        public async Task UpdateOperationAsync_UpsertsTheItemInLocalStore_AndDeletesTheError_FromSyncHandler()\n        {\n            // Arrange\n            string itemId = \"abc\";\n            var hijack = new TestHttpHandler();\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.InternalServerError));\n\n            var handler = new MobileServiceSyncHandlerMock();\n            handler.PushCompleteAction = async pushCompletionResult =>\n            {\n                foreach (var error in pushCompletionResult.Errors)\n                {\n                    await error.UpdateOperationAsync(JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"__version\\\":\\\"Hey\\\"}\"));\n                }\n            };\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, handler);\n\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n\n            await table.InsertAsync(new JObject() { { \"id\", \"abc\" }, { \"__version\", \"Wow\" } });\n\n            // Act\n            await (service.SyncContext as MobileServiceSyncContext).PushAsync(CancellationToken.None, MobileServiceTableKind.Table);\n\n\n            // Assert\n            var syncError = store.TableMap[MobileServiceLocalSystemTables.SyncErrors].Values;\n            var operation = store.TableMap[MobileServiceLocalSystemTables.OperationQueue].Values.FirstOrDefault();\n            var item = JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"__version\\\":\\\"Hey\\\"}\");\n            JObject upserted = await store.LookupAsync(\"someTable\", itemId);\n            // item is upserted\n            Assert.IsNotNull(upserted);\n\n            // verify if the record was updated\n            Assert.AreEqual(item.ToString(), upserted.ToString());\n\n            // verify if the errors were cleared\n            Assert.AreEqual(0, syncError.Count);\n\n            // Verify operation is still present\n            Assert.AreEqual(operation.Value<string>(\"itemId\"),itemId);\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_Succeeds_WithClientWinsPolicy()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.PreconditionFailed)\n            {\n                Content = new StringContent(\"{\\\"id\\\":\\\"abc\\\",\\\"__version\\\":\\\"Hey\\\"}\")\n            });\n            hijack.AddResponseContent(@\"{\"\"id\"\": \"\"abc\"\"}\");\n\n            var handler = new MobileServiceSyncHandlerMock();\n            handler.TableOperationAction = async op =>\n            {\n                for (int i = 0; i < 2; i++)\n                {\n                    try\n                    {\n                        return await op.ExecuteAsync();\n                    }\n                    catch (MobileServicePreconditionFailedException ex)\n                    {\n                        op.Item[MobileServiceSystemColumns.Version] = ex.Value[MobileServiceSystemColumns.Version];\n                    }\n                }\n                return null;\n            };\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), handler);\n\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n\n            await table.UpdateAsync(new JObject() { { \"id\", \"abc\" }, { \"__version\", \"Wow\" } });\n\n            await service.SyncContext.PushAsync();\n        }\n\n        class LocalStoreWithDelay : MobileServiceLocalStoreMock\n        {\n            private int _lookupDelayInMilliseconds = 0;\n\n            public override async Task<JObject> LookupAsync(string tableName, string id)\n            {\n                if (0 != _lookupDelayInMilliseconds)\n                {\n                    // releases this thread and causes this lookup to take longer\n                    await Task.Delay(_lookupDelayInMilliseconds);\n                }\n\n                return await base.LookupAsync(tableName, id);\n            }\n\n            /// <summary>\n            /// Tells this mock to yield and to delay for the given number of milliseconds before proceeding with the LookupAsync().\n            /// </summary>\n            /// <param name=\"delayInMilliseconds\">The delay in milliseconds.</param>\n            internal void SetLookupDelay(int delayInMilliseconds)\n            {\n                _lookupDelayInMilliseconds = delayInMilliseconds;\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_Succeeds_WithPendingOperations_AndOpQueueIsConsistent()\n        {\n            // Essentially async ManualResetEvents\n            SemaphoreSlim untilPendingOpsCreated = new SemaphoreSlim(0, 1);\n            SemaphoreSlim untilAboutToExecuteOp = new SemaphoreSlim(0, 1);\n\n            int pushState = 0;\n\n            var handler = new MobileServiceSyncHandlerMock();\n\n            handler.TableOperationAction = async op =>\n            {\n                try\n                {\n                    untilAboutToExecuteOp.Release();\n                    await untilPendingOpsCreated.WaitAsync();\n\n                    JObject result = await op.ExecuteAsync();\n\n                    if (0 == pushState)\n                    {\n                        Assert.AreEqual(MobileServiceTableOperationKind.Insert, op.Kind);\n                        Assert.AreEqual(0, op.Item.Value<int>(\"value\"));\n                    }\n                    else\n                    {\n                        Assert.AreEqual(MobileServiceTableOperationKind.Update, op.Kind);\n                        Assert.AreEqual(2, op.Item.Value<int>(\"value\")); // We shouldn't see the value == 1, since it should have been collapsed\n                    }\n\n                    // We don't care what the server actually returned, as long as there was no exception raised in our Push logic\n                    return result;\n                }\n                catch (Exception ex)\n                {\n                    Assert.Fail(\"Things are bad: \" + ex.Message);\n                }\n\n                return null;\n            };\n\n            var hijack = new TestHttpHandler();\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            LocalStoreWithDelay mockLocalStore = new LocalStoreWithDelay();\n            await service.SyncContext.InitializeAsync(mockLocalStore, handler);\n\n            JObject item = null;\n\n            // Add the initial operation and perform a push\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n\n            string responseContent = @\"{ \"\"id\"\": \"\"abc\"\", \"\"value\"\": \"\"0\"\", \"\"__version\"\": \"\"v0\"\" }\"; // Whatever is fine, since we won't use it or look at it\n\n            // Do this Insert/Push/Update+Update/Push cycle several times fast to try to hit any race conditions that would cause an error\n            for (int id = 0; id < 10; id++)\n            {\n                hijack.SetResponseContent(responseContent);\n                string idStr = \"id\" + id; // Generate a new Id each time in case the mock objects ever care that we insert an item that already exists\n\n                // The Operations and PushAction don't necessarily clone the JObject, so we need a fresh one for each operation or else we'll change\n                // the in-memory representation of the JObject stored in all operations, as well as in the \"batch\" the PushAction owns. This is problematic.\n                item = new JObject() { { \"id\", idStr }, { \"value\", 0 } };\n                await table.InsertAsync(item);\n\n                Task pushComplete = service.SyncContext.PushAsync();\n\n                // Make sure the PushAction has actually called into our SyncHandler, otherwise the two UpdateOperations could collapse onto it, and\n                // there won't necessarily even be a second PushAction\n                await untilAboutToExecuteOp.WaitAsync();\n\n                // Add some more operations while that push is in flight. Since these operations affect the same item in someTable, the operations\n                // will be stuck awaiting the PushAction since it locks on the row.\n                item = new JObject() { { \"id\", idStr }, { \"value\", 1 } };\n                Task updateOnce = table.UpdateAsync(item);\n\n                item = new JObject() { { \"id\", idStr }, { \"value\", 2 } };\n                Task updateTwice = table.UpdateAsync(item);\n\n                // Before we let the push finish, let's inject a delay that will cause it to take a long time deleting the operation from the queue.\n                // This will give the other operations, if there's an unaddressed race condition, a chance to wreak havoc on the op queue.\n                mockLocalStore.SetLookupDelay(500);\n\n                // Let the first push finish\n                untilPendingOpsCreated.Release();\n                await pushComplete;\n\n                mockLocalStore.SetLookupDelay(0);\n\n                await updateOnce;\n                await updateTwice;\n\n                // Push again, but now the operation condensed from the two updates should be executed remotely\n                pushState = (pushState + 1) % 2;\n                hijack.SetResponseContent(responseContent);\n                pushComplete = service.SyncContext.PushAsync();\n                await untilAboutToExecuteOp.WaitAsync(); // not strictly necessary other than to keep the semaphore count at 0\n                untilPendingOpsCreated.Release();\n\n                await pushComplete;\n                pushState = (pushState + 1) % 2;\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task CancelAndUpdateItemAsync_UpsertsTheItemInLocalStore_AndDeletesTheOperationAndError()\n        {\n            var client = new MobileServiceClient(\"http://www.test.com\");\n            var store = new MobileServiceLocalStoreMock();\n            var context = new MobileServiceSyncContext(client);\n            await context.InitializeAsync(store);\n\n            string operationId = \"abc\";\n            string itemId = \"def\";\n            string tableName = \"test\";\n\n\n            store.TableMap[MobileServiceLocalSystemTables.SyncErrors] = new Dictionary<string, JObject>() { { operationId, new JObject() } };\n            store.TableMap[MobileServiceLocalSystemTables.OperationQueue].Add(operationId, new JObject());\n\n            // operation exists before cancel\n            Assert.IsNotNull(await store.LookupAsync(MobileServiceLocalSystemTables.OperationQueue, operationId));\n            // item doesn't exist before upsert\n            Assert.IsNull(await store.LookupAsync(tableName, itemId));\n\n            var error = new MobileServiceTableOperationError(operationId,\n                                                             0,\n                                                             MobileServiceTableOperationKind.Update,\n                                                             HttpStatusCode.Conflict,\n                                                             tableName,\n                                                             item: new JObject() { { \"id\", itemId } },\n                                                             rawResult: \"{}\",\n                                                             result: new JObject());\n\n            var item = new JObject() { { \"id\", itemId }, { \"name\", \"unknown\" } };\n            await context.CancelAndUpdateItemAsync(error, item);\n\n            // operation is deleted\n            Assert.IsNull(await store.LookupAsync(MobileServiceLocalSystemTables.OperationQueue, operationId));\n            // error is deleted\n            Assert.IsNull(await store.LookupAsync(MobileServiceLocalSystemTables.SyncErrors, operationId));\n\n            JObject upserted = await store.LookupAsync(tableName, itemId);\n            // item is upserted\n            Assert.IsNotNull(upserted);\n            Assert.AreEqual(item, upserted);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateOperationAsync_UpsertsTheItemInLocalStore_AndDeletesTheError_AndUpdatesTheOperation()\n        {\n            var client = new MobileServiceClient(\"http://www.test.com\");\n            var store = new MobileServiceLocalStoreMock();\n            var context = new MobileServiceSyncContext(client);\n            await context.InitializeAsync(store);\n\n            string operationId = \"abc\";\n            string itemId = \"def\";\n            string tableName = \"test\";\n\n\n            store.TableMap[MobileServiceLocalSystemTables.SyncErrors] = new Dictionary<string, JObject>() { { operationId, new JObject() { { \"id\", operationId }, { \"version\", 1 } } } };\n            store.TableMap[MobileServiceLocalSystemTables.OperationQueue].Add(operationId, new JObject() { { \"id\", operationId }, { \"version\", 1 } });\n            store.TableMap.Add(tableName, new Dictionary<string, JObject>() { { itemId, new JObject() } });\n\n            // operation exists before cancel\n            Assert.IsNotNull(await store.LookupAsync(MobileServiceLocalSystemTables.OperationQueue, operationId));\n            // item exists before upsert\n            Assert.IsNotNull(await store.LookupAsync(tableName, itemId));\n\n            var error = new MobileServiceTableOperationError(operationId,\n                                                             1,\n                                                             MobileServiceTableOperationKind.Update,\n                                                             HttpStatusCode.Conflict,\n                                                             tableName,\n                                                             item: new JObject() { { \"id\", itemId } },\n                                                             rawResult: \"{}\",\n                                                             result: new JObject());\n\n            var item = new JObject() { { \"id\", itemId }, { \"name\", \"unknown\" } };\n            await context.UpdateOperationAsync(error, item);\n\n            // operation is updated\n            Assert.IsNotNull(await store.LookupAsync(MobileServiceLocalSystemTables.OperationQueue, operationId));\n            // error is deleted\n            Assert.IsNull(await store.LookupAsync(MobileServiceLocalSystemTables.SyncErrors, operationId));\n\n            JObject upserted = await store.LookupAsync(tableName, itemId);\n            // item is upserted\n            Assert.IsNotNull(upserted);\n            Assert.AreEqual(item, upserted);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateOperationAsync_UpsertTheItemInOperation_AndDeletesTheError()\n        {\n            var client = new MobileServiceClient(\"http://www.test.com\");\n            var store = new MobileServiceLocalStoreMock();\n            var context = new MobileServiceSyncContext(client);\n            await context.InitializeAsync(store);\n\n            string operationId = \"abc\";\n            string itemId = \"def\";\n            string tableName = \"test\";\n\n            var item = new JObject() { { \"id\", itemId }, { \"name\", \"unknown\" } };\n\n            store.TableMap[MobileServiceLocalSystemTables.SyncErrors] = new Dictionary<string, JObject>() { { operationId, new JObject() { { \"id\", operationId }, { \"version\", 1 } } } };\n            store.TableMap[MobileServiceLocalSystemTables.OperationQueue].Add(operationId, new JObject() { { \"id\", operationId }, { \"version\", 1 }, { \"item\", item.ToString() }, { \"kind\", (int)MobileServiceTableOperationKind.Delete } });\n\n            // operation exists before cancel\n            Assert.IsNotNull(await store.LookupAsync(MobileServiceLocalSystemTables.OperationQueue, operationId));\n            // item does not exist\n            Assert.IsNull(await store.LookupAsync(tableName, itemId));\n\n            var error = new MobileServiceTableOperationError(operationId,\n                                                             1,\n                                                             MobileServiceTableOperationKind.Delete,\n                                                             HttpStatusCode.PreconditionFailed,\n                                                             tableName,\n                                                             item: new JObject() { { \"id\", itemId } },\n                                                             rawResult: \"{}\",\n                                                             result: new JObject());\n            var item2 = new JObject() { { \"id\", itemId }, { \"name\", \"unknown\" }, { \"version\", 2 } };\n            await context.UpdateOperationAsync(error, item2);\n\n            var operation = await store.LookupAsync(MobileServiceLocalSystemTables.OperationQueue, operationId);\n            // operation is updated\n            Assert.IsNotNull(operation);\n            // error is deleted\n            Assert.IsNull(await store.LookupAsync(MobileServiceLocalSystemTables.SyncErrors, operationId));\n\n            Assert.AreEqual(operation.GetValue(\"item\").ToString(), item2.ToString(Formatting.None));\n        }\n        \n        [AsyncTestMethod]\n        public async Task UpdateOperationAsync_Throws_IfOperationIsModified()\n        {\n            string errorMessage = \"The operation has been updated and cannot be updated again\";\n            await TestOperationModifiedException(true, (error, context) => context.UpdateOperationAsync(error, new JObject()), errorMessage);\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateOperationAsync_Throws_IfOperationDoesNotExist()\n        {\n            string errorMessage = \"The operation has been updated and cannot be updated again\";\n            await TestOperationModifiedException(false, (error, context) => context.UpdateOperationAsync(error, new JObject()), errorMessage);\n        }\n\n        [AsyncTestMethod]\n        public async Task CancelAndDiscardItemAsync_DeletesTheItemInLocalStore_AndDeletesTheOperationAndError()\n        {\n            var client = new MobileServiceClient(\"http://www.test.com\");\n            var store = new MobileServiceLocalStoreMock();\n            var context = new MobileServiceSyncContext(client);\n            await context.InitializeAsync(store);\n\n            string operationId = \"abc\";\n            string itemId = \"def\";\n            string tableName = \"test\";\n\n            store.TableMap[MobileServiceLocalSystemTables.SyncErrors] = new Dictionary<string, JObject>() { { operationId, new JObject() } };\n            store.TableMap[MobileServiceLocalSystemTables.OperationQueue].Add(operationId, new JObject());\n            store.TableMap.Add(tableName, new Dictionary<string, JObject>() { { itemId, new JObject() } });\n\n            // operation exists before cancel\n            Assert.IsNotNull(await store.LookupAsync(MobileServiceLocalSystemTables.OperationQueue, operationId));\n            // item exists before upsert\n            Assert.IsNotNull(await store.LookupAsync(tableName, itemId));\n\n            var error = new MobileServiceTableOperationError(operationId,\n                                                             0,\n                                                             MobileServiceTableOperationKind.Update,\n                                                             HttpStatusCode.Conflict,\n                                                             tableName,\n                                                             item: new JObject() { { \"id\", itemId } },\n                                                             rawResult: \"{}\",\n                                                             result: new JObject());\n\n            await context.CancelAndDiscardItemAsync(error);\n\n            // operation is deleted\n            Assert.IsNull(await store.LookupAsync(MobileServiceLocalSystemTables.OperationQueue, operationId));\n            // error is deleted\n            Assert.IsNull(await store.LookupAsync(MobileServiceLocalSystemTables.SyncErrors, operationId));\n\n            // item is upserted\n            Assert.IsNull(await store.LookupAsync(tableName, itemId));\n        }\n\n        [AsyncTestMethod]\n        public async Task CancelAndUpdateItemAsync_Throws_IfOperationDoesNotExist()\n        {\n            string errorMessage = \"The operation has been updated and cannot be cancelled.\";\n            await TestOperationModifiedException(false, (error, context) => context.CancelAndUpdateItemAsync(error, new JObject()), errorMessage);\n        }\n\n        [AsyncTestMethod]\n        public async Task CancelAndDiscardItemAsync_Throws_IfOperationDoesNotExist()\n        {\n            string errorMessage = \"The operation has been updated and cannot be cancelled.\";\n            await TestOperationModifiedException(false, (error, context) => context.CancelAndDiscardItemAsync(error), errorMessage);\n        }\n\n\n        [AsyncTestMethod]\n        public async Task CancelAndUpdateItemAsync_Throws_IfOperationIsModified()\n        {\n            string errorMessage = \"The operation has been updated and cannot be cancelled.\";\n            await TestOperationModifiedException(true, (error, context) => context.CancelAndUpdateItemAsync(error, new JObject()), errorMessage);\n        }\n\n        [AsyncTestMethod]\n        public async Task CancelAndDiscardItemAsync_Throws_IfOperationIsModified()\n        {\n            string errorMessage = \"The operation has been updated and cannot be cancelled.\";\n            await TestOperationModifiedException(true, (error, context) => context.CancelAndDiscardItemAsync(error), errorMessage);\n        }\n\n        private async Task TestOperationModifiedException(bool operationExists, Func<MobileServiceTableOperationError, MobileServiceSyncContext, Task> action, String errorMessage)\n        {\n            var client = new MobileServiceClient(\"http://www.test.com\");\n            var store = new MobileServiceLocalStoreMock();\n            var context = new MobileServiceSyncContext(client);\n            await context.InitializeAsync(store);\n\n            string operationId = \"abc\";\n            string itemId = \"def\";\n            string tableName = \"test\";\n\n            if (operationExists)\n            {\n                store.TableMap[MobileServiceLocalSystemTables.OperationQueue].Add(operationId, new JObject() { { \"version\", 3 } });\n            }\n            else\n            {\n                // operation exists before cancel\n                Assert.IsNull(await store.LookupAsync(MobileServiceLocalSystemTables.OperationQueue, operationId));\n            }\n\n            var error = new MobileServiceTableOperationError(operationId,\n                                                             1,\n                                                             MobileServiceTableOperationKind.Update,\n                                                             HttpStatusCode.Conflict,\n                                                             tableName,\n                                                             item: new JObject() { { \"id\", itemId } },\n                                                             rawResult: \"{}\",\n                                                             result: new JObject());\n\n            var ex = await ThrowsAsync<InvalidOperationException>(() => action(error, context));\n\n            Assert.AreEqual(ex.Message, errorMessage);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Table/Sync/MobileServiceSyncTable.Generic.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"unit\")]\n    [Tag(\"table\")]\n    [Tag(\"offline\")]\n    public class MobileServiceSyncTableGenericTests : TestBase\n    {\n        [AsyncTestMethod]\n        public async Task RefreshAsync_Succeeds_WhenIdIsNull()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            var item = new StringIdType() { String = \"what?\" };\n            await table.RefreshAsync(item);\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsync_ThrowsInvalidOperationException_WhenIdItemDoesNotExist()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            var item = new StringIdType() { Id = \"abc\" };\n            InvalidOperationException ex = await ThrowsAsync<InvalidOperationException>(() => table.RefreshAsync(item));\n            Assert.AreEqual(ex.Message, \"Item not found in local store.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task RefreshAsync_UpdatesItem_WhenItExistsInStore()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            // add item to store\n            var item = new StringIdType() { String = \"what?\" };\n            await table.InsertAsync(item);\n\n            Assert.IsNotNull(item.Id, \"Id must be generated\");\n\n            // update it in store\n            item.String = \"nothing!\";\n            await table.UpdateAsync(item);\n\n            // read it back into new object\n            var refreshed = new StringIdType() { Id = item.Id };\n            await table.RefreshAsync(refreshed);\n\n            Assert.AreEqual(refreshed.String, \"nothing!\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Cancels_WhenCancellationTokenIsCancelled()\n        {\n            var store = new MobileServiceLocalStoreMock();\n\n            var handler = new MobileServiceSyncHandlerMock();\n            handler.TableOperationAction = op => Task.Delay(TimeSpan.MaxValue).ContinueWith<JObject>(t => null); // long slow operation\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(store, handler);\n\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n\n            using (var cts = new CancellationTokenSource())\n            {\n                // now pull\n                Task pullTask = table.PullAsync(null, null, null, cancellationToken: cts.Token);\n                cts.Cancel();\n\n                var ex = await ThrowsAsync<Exception>(() => pullTask);\n\n                Assert.IsTrue((ex is OperationCanceledException || ex is TaskCanceledException));\n                Assert.AreEqual(pullTask.Status, TaskStatus.Canceled);\n            }\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_DoesNotPurge_WhenItemIsMissing()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"); // for insert\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // remote item\n            hijack.AddResponseContent(\"[]\"); // last page\n\n            var store = new MobileServiceLocalStoreMock();\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n            await table.InsertAsync(new JObject() { { \"id\", \"abc\" } }); // insert an item\n            await service.SyncContext.PushAsync(); // push to clear the queue \n\n            // now pull\n            await table.PullAsync(null, null);\n\n            Assert.AreEqual(store.TableMap[table.TableName].Count, 2); // 1 from remote and 1 from local\n            Assert.AreEqual(hijack.Requests.Count, 3); // one for push and 2 for pull\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_DoesNotTriggerPush_WhenThereIsNoOperationInTable()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"); // for insert\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // for pull\n            hijack.AddResponseContent(\"[]\"); // last page\n\n            var store = new MobileServiceLocalStoreMock();\n            store.ReadResponses.Enqueue(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // for pull\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            // insert item in pull table\n            IMobileServiceSyncTable table1 = service.GetSyncTable(\"someTable\");\n            await table1.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n\n            // but push to clear the queue\n            await service.SyncContext.PushAsync();\n            Assert.AreEqual(store.TableMap[table1.TableName].Count, 1); // item is inserted\n            Assert.AreEqual(hijack.Requests.Count, 1); // first push\n\n            // then insert item in other table\n            IMobileServiceSyncTable<StringIdType> table2 = service.GetSyncTable<StringIdType>();\n            var item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await table2.InsertAsync(item);\n\n            await table1.PullAsync(null, null);\n\n            Assert.AreEqual(store.TableMap[table1.TableName].Count, 2); // table should contain 2 pulled items\n            Assert.AreEqual(hijack.Requests.Count, 3); // 1 for push and 2 for pull\n            Assert.AreEqual(store.TableMap[table2.TableName].Count, 1); // this table should not be touched\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_TriggersPush_WhenThereIsOperationInTable()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"); // for insert\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // for pull\n            hijack.AddResponseContent(\"[]\"); // last page\n\n            var store = new MobileServiceLocalStoreMock();\n            store.ReadResponses.Enqueue(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // for pull\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            // insert an item but don't push\n            IMobileServiceSyncTable table1 = service.GetSyncTable(\"someTable\");\n            await table1.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n            Assert.AreEqual(store.TableMap[table1.TableName].Count, 1); // item is inserted\n\n            // this should trigger a push\n            await table1.PullAsync(null, null);\n\n            Assert.AreEqual(hijack.Requests.Count, 3); // 1 for push and 2 for pull\n            Assert.AreEqual(store.TableMap[table1.TableName].Count, 2); // table is populated\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_TriggersPush_FeatureHeaderInOperation()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"); // for insert\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // for pull\n            hijack.AddResponseContent(\"[]\"); // last page\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            // insert an item but don't push\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n            await table.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n\n            // this should trigger a push\n            await table.PullAsync(null, null);\n\n            Assert.AreEqual(hijack.Requests[0].Headers.GetValues(\"X-ZUMO-FEATURES\").First(), \"TU,OL\");\n            Assert.AreEqual(hijack.Requests[1].Headers.GetValues(\"X-ZUMO-FEATURES\").First(), \"QS,OL\");\n            Assert.AreEqual(hijack.Requests[2].Headers.GetValues(\"X-ZUMO-FEATURES\").First(), \"QS,OL\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_FollowsNextLinks()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"How\\\"}]\"); // first page\n            hijack.Responses[0].Headers.Add(\"Link\", \"http://localhost:31475/tables/Green?$top=1&$select=Text%2CDone%2CId&$skip=2; rel=next\");\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"ghi\\\",\\\"String\\\":\\\"Are\\\"},{\\\"id\\\":\\\"jkl\\\",\\\"String\\\":\\\"You\\\"}]\"); // second page\n            hijack.AddResponseContent(\"[]\"); // end of the list\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n\n            await table.PullAsync(null, null);\n\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"].Count, 4);\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"abc\"].Value<string>(\"String\"), \"Hey\");\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"def\"].Value<string>(\"String\"), \"How\");\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"ghi\"].Value<string>(\"String\"), \"Are\");\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"jkl\"].Value<string>(\"String\"), \"You\");\n\n            AssertEx.MatchUris(hijack.Requests, \"http://www.test.com/tables/stringId_test_table?$skip=0&$top=50&__includeDeleted=true&__systemproperties=__version%2C__deleted\",\n                                        \"http://localhost:31475/tables/Green?$top=1&$select=Text%2CDone%2CId&$skip=2\",\n                                        \"http://www.test.com/tables/stringId_test_table?$skip=4&$top=50&__includeDeleted=true&__systemproperties=__version%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_UpdatesDeltaToken_AfterEachResult_IfOrderByIsSupported()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(@\"[{\"\"id\"\":\"\"abc\"\",\"\"String\"\":\"\"Hey\"\", \"\"__updatedAt\"\": \"\"2001-02-03T00:00:00.0000000+00:00\"\"},\n                                         {\"\"id\"\":\"\"def\"\",\"\"String\"\":\"\"How\"\", \"\"__updatedAt\"\": \"\"2001-02-04T00:00:00.0000000+00:00\"\"}]\"); // first page\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.InternalServerError)); // throw on second page\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n\n            await ThrowsAsync<MobileServiceInvalidOperationException>(() => table.PullAsync(\"items\", table.CreateQuery()));\n\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"].Count, 2);\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"abc\"].Value<string>(\"String\"), \"Hey\");\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"def\"].Value<string>(\"String\"), \"How\");\n\n            AssertEx.MatchUris(hijack.Requests, \"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\",\n                                                \"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'2001-02-04T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\");\n\n            Assert.Equals(store.TableMap[MobileServiceLocalSystemTables.Config][\"deltaToken|stringId_test_table|items\"][\"value\"], \"2001-02-04T00:00:00.0000000+00:00\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_DoesNotUpdateDeltaToken_AfterEachResult_IfOrderByIsNotSupported()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(@\"[{\"\"id\"\":\"\"abc\"\",\"\"String\"\":\"\"Hey\"\", \"\"__updatedAt\"\": \"\"2001-02-03T00:00:00.0000000+00:00\"\"},\n                                         {\"\"id\"\":\"\"def\"\",\"\"String\"\":\"\"How\"\", \"\"__updatedAt\"\": \"\"2001-02-04T00:00:00.0000000+00:00\"\"}]\"); // first page\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.InternalServerError)); // throw on second page\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n            table.SupportedOptions &= ~MobileServiceRemoteTableOptions.OrderBy;\n\n            Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n\n            await ThrowsAsync<MobileServiceInvalidOperationException>(() => table.PullAsync(\"items\", table.CreateQuery()));\n\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"].Count, 2);\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"abc\"].Value<string>(\"String\"), \"Hey\");\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"def\"].Value<string>(\"String\"), \"How\");\n\n            AssertEx.MatchUris(hijack.Requests, \"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000%2B00:00')&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\",\n                                                \"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000%2B00:00')&$skip=2&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\");\n\n            Assert.IsFalse(store.TableMap[MobileServiceLocalSystemTables.Config].ContainsKey(\"deltaToken|stringId_test_table|items\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_UsesSkipAndTakeThenFollowsLinkThenUsesSkipAndTake()\n        {\n            var hijack = new TestHttpHandler();\n            // first page\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"How\\\"}]\");\n            // second page with a link\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"ghi\\\",\\\"String\\\":\\\"Are\\\"},{\\\"id\\\":\\\"jkl\\\",\\\"String\\\":\\\"You\\\"}]\");\n            hijack.Responses[1].Headers.Add(\"Link\", \"http://localhost:31475/tables/Green?$top=1&$select=Text%2CDone%2CId&$skip=2; rel=next\");\n            // forth page without link\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"mno\\\",\\\"String\\\":\\\"Mr\\\"},{\\\"id\\\":\\\"pqr\\\",\\\"String\\\":\\\"X\\\"}]\");\n            // last page\n            hijack.AddResponseContent(\"[]\");\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n\n            await table.PullAsync(null, table.Take(51).Skip(3));\n\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"].Count, 6);\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"abc\"].Value<string>(\"String\"), \"Hey\");\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"def\"].Value<string>(\"String\"), \"How\");\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"ghi\"].Value<string>(\"String\"), \"Are\");\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"jkl\"].Value<string>(\"String\"), \"You\");\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"mno\"].Value<string>(\"String\"), \"Mr\");\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"pqr\"].Value<string>(\"String\"), \"X\");\n\n            AssertEx.MatchUris(hijack.Requests, \"http://www.test.com/tables/stringId_test_table?$skip=3&$top=50&__includeDeleted=true&__systemproperties=__version%2C__deleted\",\n                                        \"http://www.test.com/tables/stringId_test_table?$skip=5&$top=49&__includeDeleted=true&__systemproperties=__version%2C__deleted\",\n                                        \"http://localhost:31475/tables/Green?$top=1&$select=Text%2CDone%2CId&$skip=2\",\n                                        \"http://www.test.com/tables/stringId_test_table?$skip=9&$top=45&__includeDeleted=true&__systemproperties=__version%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Supports_AbsoluteAndRelativeUri()\n        {\n            var data = new string[] \n            {\n                \"http://www.test.com/api/todoitem\",\n                \"/api/todoitem\"\n            };\n\n            foreach (string uri in data)\n            {\n                var hijack = new TestHttpHandler();\n                hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"How\\\"}]\"); // first page\n                hijack.AddResponseContent(\"[]\");\n\n                var store = new MobileServiceLocalStoreMock();\n                IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n                await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n                IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n                Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n\n                await table.PullAsync(null, uri);\n\n                Assert.AreEqual(store.TableMap[\"stringId_test_table\"].Count, 2);\n\n                AssertEx.MatchUris(hijack.Requests, \"http://www.test.com/api/todoitem?$skip=0&$top=50&__includeDeleted=true&__systemproperties=__version%2C__deleted\",\n                                                    \"http://www.test.com/api/todoitem?$skip=2&$top=50&__includeDeleted=true&__systemproperties=__version%2C__deleted\");\n\n                Assert.AreEqual(\"QS,OL\", hijack.Requests[0].Headers.GetValues(\"X-ZUMO-FEATURES\").First());\n                Assert.AreEqual(\"QS,OL\", hijack.Requests[1].Headers.GetValues(\"X-ZUMO-FEATURES\").First());\n            }\n        }\n\n        public async Task PullASync_Throws_IfAbsoluteUriHostNameDoesNotMatch()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", new TestHttpHandler());\n            IMobileServiceSyncTable<ToDo> table = service.GetSyncTable<ToDo>();\n\n            var ex = await AssertEx.Throws<ArgumentException>(async () => await table.PullAsync(null, \"http://www.contoso.com/about?$filter=a eq b&$orderby=c\"));\n\n            Assert.AreEqual(ex.Message, \"The query uri must be on the same host as the Mobile Service.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_DoesNotFollowLink_IfRelationIsNotNext()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"How\\\"}]\"); // first page\n            hijack.Responses[0].Headers.Add(\"Link\", \"http://contoso.com:31475/tables/Green?$top=1&$select=Text%2CDone%2CId&$skip=2; rel=prev\");\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"ghi\\\",\\\"String\\\":\\\"Are\\\"},{\\\"id\\\":\\\"jkl\\\",\\\"String\\\":\\\"You\\\"}]\"); // second page\n            hijack.AddResponseContent(\"[]\"); // end of the list\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n\n            await table.PullAsync(null, null);\n\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"].Count, 4);\n\n            AssertEx.MatchUris(hijack.Requests, \"http://www.test.com/tables/stringId_test_table?$skip=0&$top=50&__includeDeleted=true&__systemproperties=__version%2C__deleted\",\n                                        \"http://www.test.com/tables/stringId_test_table?$skip=2&$top=50&__includeDeleted=true&__systemproperties=__version%2C__deleted\",\n                                        \"http://www.test.com/tables/stringId_test_table?$skip=4&$top=50&__includeDeleted=true&__systemproperties=__version%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_DoesNotFollowLink_IfLinkHasNonSupportedOptions()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"How\\\"}]\"); // first page\n            hijack.Responses[0].Headers.Add(\"Link\", \"http://contoso.com:31475/tables/Green?$top=1&$select=Text%2CDone%2CId&$skip=2; rel=next\");\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"ghi\\\",\\\"String\\\":\\\"Are\\\"},{\\\"id\\\":\\\"jkl\\\",\\\"String\\\":\\\"You\\\"}]\"); // second page\n            hijack.AddResponseContent(\"[]\"); // end of the list\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n            table.SupportedOptions &= ~MobileServiceRemoteTableOptions.Skip;\n\n            Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n\n            await table.PullAsync(null, null);\n\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"].Count, 2);\n\n            AssertEx.MatchUris(hijack.Requests, \"http://www.test.com/tables/stringId_test_table?$top=50&__includeDeleted=true&__systemproperties=__version%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_UsesTopInQuery_IfLessThanMaxPageSize()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"How\\\"}]\"); // first page\n            hijack.AddResponseContent(\"[]\"); // end of the list\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n\n            var pullOptions = new PullOptions\n            {\n                MaxPageSize = 50,\n            };\n\n            await table.PullAsync(null, table.Take(49), pullOptions);\n\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"].Count, 2);\n\n            AssertEx.MatchUris(hijack.Requests, \"http://www.test.com/tables/stringId_test_table?$skip=0&$top=49&__includeDeleted=true&__systemproperties=__version%2C__deleted\",\n                                        \"http://www.test.com/tables/stringId_test_table?$skip=2&$top=47&__includeDeleted=true&__systemproperties=__version%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_DefaultsTo50_IfGreaterThanMaxPageSize()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"How\\\"}]\"); // first page\n            hijack.AddResponseContent(\"[]\"); // end of the list\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n\n            var pullOptions = new PullOptions\n            {\n                MaxPageSize = 50,\n            };\n            await table.PullAsync(null, table.Take(51), pullOptions);\n\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"].Count, 2);\n\n            AssertEx.MatchUris(hijack.Requests, \"http://www.test.com/tables/stringId_test_table?$skip=0&$top=50&__includeDeleted=true&__systemproperties=__version%2C__deleted\",\n                                        \"http://www.test.com/tables/stringId_test_table?$skip=2&$top=49&__includeDeleted=true&__systemproperties=__version%2C__deleted\");\n        }\n        \n        [AsyncTestMethod]\n        public async Task PullAsync_DoesNotFollowLink_IfMaxRecordsAreRetrieved()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"How\\\"}]\"); // first page\n            hijack.Responses[0].Headers.Add(\"Link\", \"http://localhost:31475/tables/Green?$top=1&$select=Text%2CDone%2CId&$skip=2; rel=next\");\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"ghi\\\",\\\"String\\\":\\\"Are\\\"},{\\\"id\\\":\\\"jkl\\\",\\\"String\\\":\\\"You\\\"}]\"); // second page\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n\n            await table.PullAsync(null, table.Take(1));\n\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"].Count, 1);\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_DoesNotFollowLink_IfResultIsEmpty()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"[]\"); // first page\n            hijack.Responses[0].Headers.Add(\"Link\", \"http://localhost:31475/tables/Green?$top=1&$select=Text%2CDone%2CId&$skip=2; rel=next\");\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"ghi\\\",\\\"String\\\":\\\"Are\\\"},{\\\"id\\\":\\\"jkl\\\",\\\"String\\\":\\\"You\\\"}]\"); // second page\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n\n            await table.PullAsync(null, table.Take(1));\n\n            Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Throws_WhenPushThrows()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.Responses.Add(new HttpResponseMessage(HttpStatusCode.NotFound)); // for push\n\n            var store = new MobileServiceLocalStoreMock();\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            // insert an item but don't push\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n            await table.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n            Assert.AreEqual(store.TableMap[table.TableName].Count, 1); // item is inserted\n\n            // this should trigger a push\n            var ex = await ThrowsAsync<MobileServicePushFailedException>(() => table.PullAsync(null, null));\n\n            Assert.AreEqual(ex.PushResult.Errors.Count(), 1);\n            Assert.AreEqual(hijack.Requests.Count, 1); // 1 for push \n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Throws_WhenSelectClauseIsSpecified()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n            var query = table.Select(x => x.String);\n\n            var exception = await ThrowsAsync<ArgumentException>(() => table.PullAsync(null, query, cancellationToken: CancellationToken.None));\n            Assert.AreEqual(exception.ParamName, \"query\");\n            Assert.StartsWith(exception.Message, \"Pull query with select clause is not supported.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Throws_WhenOrderByClauseIsSpecifiedWithQueryId()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n            var query = table.OrderBy(x => x.String);\n\n            var exception = await ThrowsAsync<ArgumentException>(() => table.PullAsync(\"incQuery\", query, cancellationToken: CancellationToken.None));\n            Assert.AreEqual(exception.ParamName, \"query\");\n            Assert.StartsWith(exception.Message, \"Incremental pull query must not have orderby clause.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Throws_WhenOrderByClauseIsSpecifiedAndOptionIsNotSet()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n            table.SupportedOptions &= ~MobileServiceRemoteTableOptions.OrderBy;\n            var query = table.OrderBy(x => x.String);\n\n            var exception = await ThrowsAsync<ArgumentException>(() => table.PullAsync(null, query));\n            Assert.AreEqual(exception.ParamName, \"query\");\n            Assert.StartsWith(exception.Message, \"The supported table options does not include orderby.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Throws_WhenTopClauseIsSpecifiedAndOptionIsNotSet()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n            table.SupportedOptions &= ~MobileServiceRemoteTableOptions.Top;\n            var query = table.Take(30);\n\n            var exception = await ThrowsAsync<ArgumentException>(() => table.PullAsync(null, query));\n            Assert.AreEqual(exception.ParamName, \"query\");\n            Assert.StartsWith(exception.Message, \"The supported table options does not include top.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Throws_WhenSkipClauseIsSpecifiedAndOptionIsNotSet()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n            table.SupportedOptions &= ~MobileServiceRemoteTableOptions.Skip;\n            var query = table.Skip(30);\n\n            var exception = await ThrowsAsync<ArgumentException>(() => table.PullAsync(null, query));\n            Assert.AreEqual(exception.ParamName, \"query\");\n            Assert.StartsWith(exception.Message, \"The supported table options does not include skip.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Throws_WhenTopOrSkipIsSpecifiedWithQueryId()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n            string expectedError = \"Incremental pull query must not have skip or top specified.\";\n\n            var query = table.Take(5);\n            var exception = await ThrowsAsync<ArgumentException>(() => table.PullAsync(\"incQuery\", query, cancellationToken: CancellationToken.None));\n            Assert.AreEqual(exception.ParamName, \"query\");\n            Assert.StartsWith(exception.Message, expectedError);\n\n            query = table.Skip(5);\n            exception = await ThrowsAsync<ArgumentException>(() => table.PullAsync(\"incQuery\", query, cancellationToken: CancellationToken.None));\n            Assert.AreEqual(exception.ParamName, \"query\");\n            Assert.StartsWith(exception.Message, expectedError);\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Succeeds()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.OnSendingRequest = req =>\n            {\n                return Task.FromResult(req);\n            };\n            hijack.AddResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // for pull\n            hijack.AddResponseContent(\"[]\"); // last page\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n            var query = table.Skip(5)\n                             .Take(3)\n                             .Where(t => t.String == \"world\")\n                             .OrderBy(o => o.Id)\n                             .WithParameters(new Dictionary<string, string>() { { \"param1\", \"val1\" } })\n                             .OrderByDescending(o => o.String)\n                             .IncludeTotalCount();\n\n            await table.PullAsync(null, query, cancellationToken: CancellationToken.None);\n            Assert.AreEqual(hijack.Requests.Count, 2);\n            AssertEx.QueryEquals(hijack.Requests[0].RequestUri.Query, \"?$filter=(String%20eq%20'world')&$orderby=String%20desc,id&$skip=5&$top=3&param1=val1&__includeDeleted=true&__systemproperties=__version%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Incremental_AllOptions_MovesByUpdatedAt()\n        {\n            await TestPullAsyncIncrementalWithOptions(MobileServiceRemoteTableOptions.All,\n                    \"http://test.com/tables/stringId_test_table?$filter=((String eq 'world') and (__updatedAt ge datetimeoffset'2001-02-01T00:00:00.0000000%2B00:00'))&$orderby=__updatedAt&$skip=0&$top=50&param1=val1&__includeDeleted=true&__systemproperties=__createdAt%2C__updatedAt%2C__deleted\",\n                    \"http://test.com/tables/stringId_test_table?$filter=((String eq 'world') and (__updatedAt ge datetimeoffset'2001-02-03T00:00:00.0000000%2B00:00'))&$orderby=__updatedAt&$skip=0&$top=50&param1=val1&__includeDeleted=true&__systemproperties=__createdAt%2C__updatedAt%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Incremental_WithNullUpdatedAt_Succeeds()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.OnSendingRequest = req =>\n            {\n                return Task.FromResult(req);\n            };\n            hijack.AddResponseContent(@\"[{\"\"id\"\":\"\"abc\"\",\"\"String\"\":\"\"Hey\"\", \"\"__updatedAt\"\": null}]\");\n            hijack.AddResponseContent(\"[]\"); // last page\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            await table.PullAsync(\"items\", table.CreateQuery());\n            AssertEx.MatchUris(hijack.Requests,\n                \"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\",\n                \"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=1&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Incremental_MovesByUpdatedAt_ThenUsesSkipAndTop_WhenUpdatedAtDoesNotChange()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.OnSendingRequest = req =>\n            {\n                return Task.FromResult(req);\n            };\n            hijack.AddResponseContent(@\"[{\"\"id\"\":\"\"abc\"\",\"\"String\"\":\"\"Hey\"\", \"\"__updatedAt\"\": \"\"2001-02-03T00:00:00.0000000+00:00\"\"}]\");\n            hijack.AddResponseContent(@\"[{\"\"id\"\":\"\"def\"\",\"\"String\"\":\"\"World\"\", \"\"__updatedAt\"\": \"\"2001-02-03T00:00:00.0000000+00:00\"\"}]\");\n            hijack.AddResponseContent(\"[]\"); // last page\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            await table.PullAsync(\"items\", table.CreateQuery());\n            AssertEx.MatchUris(hijack.Requests,\n                \"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\",\n                \"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'2001-02-03T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\",\n                \"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'2001-02-03T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=1&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Incremental_WithoutOrderBy_MovesBySkipAndTop()\n        {\n            await TestPullAsyncIncrementalWithOptions(MobileServiceRemoteTableOptions.Skip | MobileServiceRemoteTableOptions.Top,\n                \"http://test.com/tables/stringId_test_table?$filter=((String eq 'world') and (__updatedAt ge datetimeoffset'2001-02-01T00:00:00.0000000%2B00:00'))&$skip=0&$top=50&param1=val1&__includeDeleted=true&__systemproperties=__createdAt%2C__updatedAt%2C__deleted\",\n                \"http://test.com/tables/stringId_test_table?$filter=((String eq 'world') and (__updatedAt ge datetimeoffset'2001-02-01T00:00:00.0000000%2B00:00'))&$skip=2&$top=50&param1=val1&__includeDeleted=true&__systemproperties=__createdAt%2C__updatedAt%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Incremental_WithoutSkipAndOrderBy_CanNotMoveForward()\n        {\n            await TestPullAsyncIncrementalWithOptions(MobileServiceRemoteTableOptions.Top,\n                \"http://test.com/tables/stringId_test_table?$filter=((String eq 'world') and (__updatedAt ge datetimeoffset'2001-02-01T00:00:00.0000000%2B00:00'))&$top=50&param1=val1&__includeDeleted=true&__systemproperties=__createdAt%2C__updatedAt%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Incremental_WithoutTopAndOrderBy_MovesBySkip()\n        {\n            await TestPullAsyncIncrementalWithOptions(MobileServiceRemoteTableOptions.Skip,\n                \"http://test.com/tables/stringId_test_table?$filter=((String eq 'world') and (__updatedAt ge datetimeoffset'2001-02-01T00:00:00.0000000%2B00:00'))&param1=val1&__includeDeleted=true&__systemproperties=__createdAt%2C__updatedAt%2C__deleted\",\n                \"http://test.com/tables/stringId_test_table?$filter=((String eq 'world') and (__updatedAt ge datetimeoffset'2001-02-01T00:00:00.0000000%2B00:00'))&$skip=2&param1=val1&__includeDeleted=true&__systemproperties=__createdAt%2C__updatedAt%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Incremental_WithoutSkipAndTop_MovesByUpdatedAt()\n        {\n            await TestPullAsyncIncrementalWithOptions(MobileServiceRemoteTableOptions.OrderBy,\n                \"http://test.com/tables/stringId_test_table?$filter=((String eq 'world') and (__updatedAt ge datetimeoffset'2001-02-01T00:00:00.0000000%2B00:00'))&$orderby=__updatedAt&param1=val1&__includeDeleted=true&__systemproperties=__createdAt%2C__updatedAt%2C__deleted\",\n                \"http://test.com/tables/stringId_test_table?$filter=((String eq 'world') and (__updatedAt ge datetimeoffset'2001-02-03T00:00:00.0000000%2B00:00'))&$orderby=__updatedAt&param1=val1&__includeDeleted=true&__systemproperties=__createdAt%2C__updatedAt%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Incremental_PageSize()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.OnSendingRequest = req =>\n            {\n                return Task.FromResult(req);\n            };\n            hijack.AddResponseContent(@\"[{\"\"id\"\":\"\"abc\"\",\"\"String\"\":\"\"Hey\"\"}]\");\n            hijack.AddResponseContent(\"[]\"); // last page\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n            PullOptions pullOptions = new PullOptions\n            {\n                MaxPageSize = 10\n            };\n\n            await table.PullAsync(\"items\", table.CreateQuery(), pullOptions: pullOptions);\n            AssertEx.MatchUris(hijack.Requests,\n                string.Format(\"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=0&$top={0}&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\", pullOptions.MaxPageSize),\n                string.Format(\"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=1&$top={0}&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\", pullOptions.MaxPageSize));\n        }\n\n        private static async Task TestPullAsyncIncrementalWithOptions(MobileServiceRemoteTableOptions options, params string[] uris)\n        {\n            var store = new MobileServiceLocalStoreMock();\n            var settings = new MobileServiceSyncSettingsManager(store);\n            await settings.SetDeltaTokenAsync(\"stringId_test_table\", \"incquery\", new DateTime(2001, 02, 01, 0, 0, 0, DateTimeKind.Utc));\n            await TestIncrementalPull(store, options, uris);\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Incremental_WithoutDeltaTokenInDb()\n        {\n            var store = new MobileServiceLocalStoreMock();\n            store.TableMap[MobileServiceLocalSystemTables.Config] = new Dictionary<string, JObject>();\n            await TestIncrementalPull(store, MobileServiceRemoteTableOptions.All,\n                \"http://test.com/tables/stringId_test_table?$filter=((String eq 'world') and (__updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000%2B00:00'))&$orderby=__updatedAt&$skip=0&$top=50&param1=val1&__includeDeleted=true&__systemproperties=__createdAt%2C__updatedAt%2C__deleted\",\n                \"http://test.com/tables/stringId_test_table?$filter=((String eq 'world') and (__updatedAt ge datetimeoffset'2001-02-03T00:00:00.0000000%2B00:00'))&$orderby=__updatedAt&$skip=0&$top=50&param1=val1&__includeDeleted=true&__systemproperties=__createdAt%2C__updatedAt%2C__deleted\");\n        }\n\n        private static async Task TestIncrementalPull(MobileServiceLocalStoreMock store, MobileServiceRemoteTableOptions options, params string[] expectedUris)\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(@\"[{\"\"id\"\":\"\"abc\"\",\"\"String\"\":\"\"Hey\"\", \"\"__updatedAt\"\": \"\"2001-02-03T00:00:00.0000000+00:00\"\"},\n                                        {\"\"id\"\":\"\"def\"\",\"\"String\"\":\"\"World\"\", \"\"__updatedAt\"\": \"\"2001-02-03T00:03:00.0000000+07:00\"\"}]\"); // for pull\n            hijack.AddResponseContent(@\"[]\");\n\n\n            store.TableMap[MobileServiceLocalSystemTables.Config][\"systemProperties|stringId_test_table\"] = new JObject\n            {\n                { MobileServiceSystemColumns.Id, \"systemProperties|stringId_test_table\" },\n                { \"value\", \"1\" }\n            };\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n            table.SupportedOptions = options;\n            var query = table.Where(t => t.String == \"world\")\n                             .WithParameters(new Dictionary<string, string>() { { \"param1\", \"val1\" } })\n                             .IncludeTotalCount();\n\n            await table.PullAsync(\"incquery\", query, cancellationToken: CancellationToken.None);\n\n            AssertEx.MatchUris(hijack.Requests, expectedUris);\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Throws_IfSystemPropertiesProvidedInParameters()\n        {\n            await this.TestPullQueryOverrideThrows(new Dictionary<string, string>() \n                             { \n                                { \"__systemProperties\", \"createdAt\" },\n                                { \"param1\", \"val1\" } \n                             },\n                             \"The key '__systemproperties' is reserved and cannot be specified as a query parameter.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Throws_IfIncludeDeletedProvidedInParameters()\n        {\n            await this.TestPullQueryOverrideThrows(new Dictionary<string, string>() \n                             { \n                                { \"__includeDeleted\", \"false\" },\n                                { \"param1\", \"val1\" } \n                             },\n                             \"The key '__includeDeleted' is reserved and cannot be specified as a query parameter.\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PullAsync_Throws_WhenQueryIdIsInvalid()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", new TestHttpHandler());\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            await ThrowsAsync<ArgumentException>(() => table.PullAsync(\"2as|df\", table.CreateQuery(), CancellationToken.None));\n        }\n\n        private async Task TestPullQueryOverrideThrows(IDictionary<string, string> parameters, string errorMessage)\n        {\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n            var query = table.CreateQuery()\n                             .WithParameters(parameters);\n\n            var ex = await ThrowsAsync<ArgumentException>(() => table.PullAsync(null, query, cancellationToken: CancellationToken.None));\n            Assert.AreEqual(errorMessage, ex.Message);\n        }\n\n        [AsyncTestMethod]\n        public async Task PurgeAsync_DoesNotTriggerPush_WhenThereIsNoOperationInTable()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            // insert item in purge table\n            IMobileServiceSyncTable table1 = service.GetSyncTable(\"someTable\");\n            await table1.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n\n            // but push to clear the queue\n            await service.SyncContext.PushAsync();\n            Assert.AreEqual(store.TableMap[table1.TableName].Count, 1); // item is inserted\n            Assert.AreEqual(hijack.Requests.Count, 1); // first push\n\n            // then insert item in other table\n            IMobileServiceSyncTable<StringIdType> table2 = service.GetSyncTable<StringIdType>();\n            var item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await table2.InsertAsync(item);\n\n            // try purge on first table now\n            await table1.PurgeAsync();\n\n            Assert.AreEqual(store.DeleteQueries[0].TableName, MobileServiceLocalSystemTables.SyncErrors); // push deletes all sync erros\n            Assert.AreEqual(store.DeleteQueries[1].TableName, table1.TableName); // purged table\n            Assert.AreEqual(hijack.Requests.Count, 1); // still 1 means no other push happened\n            Assert.AreEqual(store.TableMap[table2.TableName].Count, 1); // this table should not be touched\n        }\n\n        [AsyncTestMethod]\n        public async Task PurgeAsync_ResetsDeltaToken_WhenQueryIdIsSpecified()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(@\"[{\"\"id\"\":\"\"abc\"\",\"\"String\"\":\"\"Hey\"\", \"\"__updatedAt\"\": \"\"2001-02-03T00:00:00.0000000+00:00\"\"},\n                                         {\"\"id\"\":\"\"def\"\",\"\"String\"\":\"\"How\"\", \"\"__updatedAt\"\": \"\"2001-02-04T00:00:00.0000000+00:00\"\"}]\"); // first page\n            hijack.AddResponseContent(\"[]\"); // last page of first pull\n            hijack.AddResponseContent(\"[]\"); // second pull\n\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            // ensure there is no delta token present already\n            Assert.IsFalse(store.TableMap.ContainsKey(\"stringId_test_table\"));\n\n            // now pull down data\n            await table.PullAsync(\"items\", table.CreateQuery());\n\n            // ensure items were pulled down\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"].Count, 2);\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"abc\"].Value<string>(\"String\"), \"Hey\");\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"][\"def\"].Value<string>(\"String\"), \"How\");\n\n            // ensure delta token was updated\n            Assert.Equals(store.TableMap[MobileServiceLocalSystemTables.Config][\"deltaToken|stringId_test_table|items\"][\"value\"], \"2001-02-04T00:00:00.0000000+00:00\");\n\n            // now purge and forget the delta token\n            await table.PurgeAsync(\"items\", null, false, CancellationToken.None);\n\n            // make sure data is purged\n            Assert.AreEqual(store.TableMap[\"stringId_test_table\"].Count, 0);\n            // make sure delta token is removed\n            Assert.IsFalse(store.TableMap[MobileServiceLocalSystemTables.Config].ContainsKey(\"deltaToken|stringId_test_table|items\"));\n\n            // pull again\n            await table.PullAsync(\"items\", table.CreateQuery());\n\n            // verify request urls\n            AssertEx.MatchUris(hijack.Requests, \"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\",\n                                                \"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'2001-02-04T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\",\n                                                \"http://www.test.com/tables/stringId_test_table?$filter=(__updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000%2B00:00')&$orderby=__updatedAt&$skip=0&$top=50&__includeDeleted=true&__systemproperties=__updatedAt%2C__version%2C__deleted\");\n        }\n\n        [AsyncTestMethod]\n        public async Task PurgeAsync_Throws_WhenQueryIdIsInvalid()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", new TestHttpHandler());\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<ToDoWithStringId> table = service.GetSyncTable<ToDoWithStringId>();\n\n            await ThrowsAsync<ArgumentException>(() => table.PurgeAsync(\"2as|df\", table.CreateQuery(), CancellationToken.None));\n        }\n\n        [AsyncTestMethod]\n        public async Task PurgeAsync_Throws_WhenThereIsOperationInTable()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            // insert an item but don't push\n            IMobileServiceSyncTable table1 = service.GetSyncTable(\"someTable\");\n            await table1.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n            Assert.AreEqual(store.TableMap[table1.TableName].Count, 1); // item is inserted\n\n            // this should trigger a push\n            var ex = await ThrowsAsync<InvalidOperationException>(table1.PurgeAsync);\n\n            Assert.AreEqual(ex.Message, \"The table cannot be purged because it has pending operations.\");\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L); // operation still in queue\n        }\n\n        [AsyncTestMethod]\n        public async Task PurgeAsync_Throws_WhenThereIsOperationInTable_AndForceIsTrue_AndQueryIsSpecified()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            // insert an item but don't push\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n            await table.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n            Assert.AreEqual(store.TableMap[table.TableName].Count, 1); // item is inserted\n\n            // this should trigger a push\n            var ex = await ThrowsAsync<InvalidOperationException>(() => table.PurgeAsync(null, \"$filter=a eq b\", true, CancellationToken.None));\n\n            Assert.AreEqual(ex.Message, \"The table cannot be purged because it has pending operations.\");\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L); // operation still in queue\n        }\n\n        [AsyncTestMethod]\n        public async Task PurgeAsync_DeletesOperations_WhenThereIsOperationInTable_AndForceIsTrue()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            var store = new MobileServiceLocalStoreMock();\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            // put a dummy delta token\n            string deltaKey = \"deltaToken|someTable|abc\";\n            store.TableMap[MobileServiceLocalSystemTables.Config] = new Dictionary<string, JObject>() { { deltaKey, new JObject() } };\n\n            // insert an item but don't push\n            IMobileServiceSyncTable table = service.GetSyncTable(\"someTable\");\n            await table.InsertAsync(new JObject() { { \"id\", \"abc\" } });\n            Assert.AreEqual(store.TableMap[table.TableName].Count, 1); // item is inserted\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L);\n\n            await table.PurgeAsync(\"abc\", null, force: true, cancellationToken: CancellationToken.None);\n\n            Assert.AreEqual(store.TableMap[table.TableName].Count, 0); // item is deleted\n            Assert.AreEqual(service.SyncContext.PendingOperations, 0L); // operation is also removed\n\n            // deleted delta token\n            Assert.IsFalse(store.TableMap[MobileServiceLocalSystemTables.Config].ContainsKey(deltaKey));\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_ExecutesThePendingOperations_OnAllTables()\n        {\n            var hijack = new TestHttpHandler();\n            var store = new MobileServiceLocalStoreMock();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n            var item = new StringIdType() { Id = \"abc\", String = \"what?\" };\n            await table.InsertAsync(item);\n\n            IMobileServiceSyncTable table1 = service.GetSyncTable(\"someTable\");\n            await table1.InsertAsync(new JObject() { { \"id\", \"def\" } });\n\n            Assert.AreEqual(store.TableMap[table.TableName].Count, 1);\n            Assert.AreEqual(store.TableMap[table1.TableName].Count, 1);\n\n            await service.SyncContext.PushAsync();\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_ExecutesThePendingOperations()\n        {\n            var hijack = new TestHttpHandler();\n            var store = new MobileServiceLocalStoreMock();\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            var item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await table.InsertAsync(item);\n\n            Assert.AreEqual(store.TableMap[table.TableName].Count, 1);\n\n            await service.SyncContext.PushAsync();\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_IsAborted_OnNetworkError()\n        {\n            await TestPushAbort(new HttpRequestException(), MobileServicePushStatus.CancelledByNetworkError);\n        }\n\n        [AsyncTestMethod]\n        public async Task PushAsync_IsAborted_OnAuthenticationError()\n        {\n            var authError = new MobileServiceInvalidOperationException(String.Empty, new HttpRequestMessage(), new HttpResponseMessage(HttpStatusCode.Unauthorized));\n            await TestPushAbort(authError, MobileServicePushStatus.CancelledByAuthenticationError);\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsync_DoesNotUpsertResultOnStore_WhenOperationIsPushed()\n        {\n            var storeMock = new MobileServiceLocalStoreMock();\n\n            var hijack = new TestHttpHandler();\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"); // for insert\n            hijack.AddResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"); // for delete\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            await service.SyncContext.InitializeAsync(storeMock, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            // first add an item\n            var item = new StringIdType() { Id = \"abc\", String = \"what?\" };\n            await table.InsertAsync(item);\n\n            Assert.AreEqual(storeMock.TableMap[table.TableName].Count, 1);\n\n            // for good measure also push it\n            await service.SyncContext.PushAsync();\n\n            await table.DeleteAsync(item);\n\n            Assert.AreEqual(storeMock.TableMap[table.TableName].Count, 0);\n\n            // now play it on server\n            await service.SyncContext.PushAsync();\n\n            // wait we don't want to upsert the result back because its delete operation\n            Assert.AreEqual(storeMock.TableMap[table.TableName].Count, 0);\n            // looks good\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsync_Throws_WhenInsertWasAttempted()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.Response = new HttpResponseMessage(HttpStatusCode.RequestTimeout); // insert response\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            var item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await table.InsertAsync(item);\n            // insert is in queue\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L);\n\n            var pushException = await ThrowsAsync<MobileServicePushFailedException>(service.SyncContext.PushAsync);\n            Assert.AreEqual(pushException.PushResult.Errors.Count(), 1);\n\n            var delException = await ThrowsAsync<InvalidOperationException>(() => table.DeleteAsync(item));\n            Assert.AreEqual(delException.Message, \"The item is in inconsistent state in the local store. Please complete the pending sync by calling PushAsync() before deleting the item.\");\n\n            // insert still in queue\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L);\n        }\n\n        [AsyncTestMethod]\n        public Task DeleteAsync_Throws_WhenDeleteIsInQueue()\n        {\n            return this.TestCollapseThrow(firstOperation: (table, item) => table.DeleteAsync(item),\n                                          secondOperation: (table, item) => table.DeleteAsync(item));\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsync_CancelsAll_WhenInsertIsInQueue()\n        {\n            var hijack = new TestHttpHandler();\n            hijack.SetResponseContent(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}]\");\n            hijack.OnSendingRequest = req =>\n            {\n                Assert.Fail(\"No request should be made.\");\n                return Task.FromResult(req);\n            };\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            var item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n\n            await table.InsertAsync(item);\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L);\n\n            await table.DeleteAsync(item);\n            await service.SyncContext.PushAsync();\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 0L);\n        }\n\n        [AsyncTestMethod]\n        public async Task DeleteAsync_CancelsUpdate_WhenUpdateIsInQueue()\n        {\n            var store = new MobileServiceLocalStoreMock();\n            await this.TestCollapseCancel(firstOperationOnItem1: (table, item1) => table.UpdateAsync(item1),\n                                          operationOnItem2: (table, item2) => table.InsertAsync(item2),\n                                          secondOperationOnItem1: (table, item1) => table.DeleteAsync(item1),\n                                          assertRequest: (req, executed) =>\n                                          {\n                                              if (executed == 1) // order is maintained by doing insert first and delete after that. This means first update was cancelled, not the second one.\n                                              {\n                                                  Assert.AreEqual(req.Method, HttpMethod.Post);\n                                              }\n                                              else\n                                              {\n                                                  Assert.AreEqual(req.Method, HttpMethod.Delete);\n                                              }\n                                          },\n                                          assertQueue: queue =>\n                                          {\n                                              var op = queue.Values.Single(o => o.Value<string>(\"itemId\") == \"item1\");\n                                              Assert.AreEqual(op.Value<long>(\"version\"), 2L);\n                                          });\n        }\n\n        [AsyncTestMethod]\n        public Task InsertAsync_Throws_WhenDeleteIsInQueue()\n        {\n            return this.TestCollapseThrow(firstOperation: (table, item) => table.DeleteAsync(item),\n                                          secondOperation: (table, item) => table.InsertAsync(item));\n        }\n\n        [AsyncTestMethod]\n        public Task InsertAsync_Throws_WhenUpdateIsInQueue()\n        {\n            return this.TestCollapseThrow(firstOperation: (table, item) => table.UpdateAsync(item),\n                                          secondOperation: (table, item) => table.InsertAsync(item));\n        }\n\n        [AsyncTestMethod]\n        public Task InsertAsync_Throws_WhenInsertIsInQueue()\n        {\n            return this.TestCollapseThrow(firstOperation: (table, item) => table.InsertAsync(item),\n                                          secondOperation: (table, item) => table.InsertAsync(item));\n        }\n\n        [AsyncTestMethod]\n        public Task UpdateAsync_Throws_WhenDeleteIsInQueue()\n        {\n            return this.TestCollapseThrow(firstOperation: (table, item) => table.DeleteAsync(item),\n                                          secondOperation: (table, item) => table.UpdateAsync(item));\n        }\n\n        [AsyncTestMethod]\n        public async Task UpdateAsync_CancelsSecondUpdate_WhenUpdateIsInQueue()\n        {\n            await this.TestCollapseCancel(firstOperationOnItem1: (table, item1) => table.UpdateAsync(item1),\n                                        operationOnItem2: (table, item2) => table.DeleteAsync(item2),\n                                        secondOperationOnItem1: (table, item1) => table.UpdateAsync(item1),\n                                        assertRequest: (req, executed) =>\n                                        {\n                                            if (executed == 1) // order is maintained by doing update first and delete after that. This means second update was cancelled, not the first one.\n                                            {\n                                                Assert.AreEqual(req.Method, new HttpMethod(\"Patch\"));\n                                            }\n                                            else\n                                            {\n                                                Assert.AreEqual(req.Method, HttpMethod.Delete);\n                                            }\n                                        },\n                                        assertQueue: queue =>\n                                        {\n                                            var op = queue.Values.Single(o => o.Value<string>(\"itemId\") == \"item1\");\n                                            Assert.AreEqual(op.Value<long>(\"version\"), 2L);\n                                        });\n        }\n\n        [AsyncTestMethod]\n        public async Task Collapse_DeletesTheError_OnMutualCancel()\n        {\n            var store = new MobileServiceLocalStoreMock();\n            var hijack = new TestHttpHandler();\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            var item = new StringIdType() { Id = \"item1\", String = \"what?\" };\n\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            await table.InsertAsync(item);\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L);\n\n            string id = store.TableMap[MobileServiceLocalSystemTables.OperationQueue].Values.First().Value<string>(\"id\");\n            // inject an error to test if it is deleted on collapse\n            store.TableMap[MobileServiceLocalSystemTables.SyncErrors] = new Dictionary<string, JObject>() { { id, new JObject() } };\n\n            await table.DeleteAsync(item);\n            Assert.AreEqual(service.SyncContext.PendingOperations, 0L);\n\n            // error should be deleted\n            Assert.AreEqual(store.TableMap[MobileServiceLocalSystemTables.SyncErrors].Count, 0);\n        }\n\n        [AsyncTestMethod]\n        public async Task Collapse_DeletesTheError_OnReplace()\n        {\n            var store = new MobileServiceLocalStoreMock();\n            var hijack = new TestHttpHandler();\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            var item = new StringIdType() { Id = \"item1\", String = \"what?\" };\n\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            await table.InsertAsync(item);\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L);\n\n            string id = store.TableMap[MobileServiceLocalSystemTables.OperationQueue].Values.First().Value<string>(\"id\");\n\n            // inject an error to test if it is deleted on collapse\n            store.TableMap[MobileServiceLocalSystemTables.SyncErrors] = new Dictionary<string, JObject>() { { id, new JObject() } };\n\n            await table.UpdateAsync(item);\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L);\n\n            // error should be deleted\n            Assert.AreEqual(store.TableMap[MobileServiceLocalSystemTables.SyncErrors].Count, 0);\n        }\n\n\n        [AsyncTestMethod]\n        public async Task UpdateAsync_CancelsSecondUpdate_WhenInsertIsInQueue()\n        {\n            await this.TestCollapseCancel(firstOperationOnItem1: (table, item1) => table.InsertAsync(item1),\n                                        operationOnItem2: (table, item2) => table.DeleteAsync(item2),\n                                        secondOperationOnItem1: (table, item1) => table.UpdateAsync(item1),\n                                        assertRequest: (req, executed) =>\n                                        {\n                                            if (executed == 1) // order is maintained by doing insert first and delete after that. This means second update was cancelled.\n                                            {\n                                                Assert.AreEqual(req.Method, HttpMethod.Post);\n                                            }\n                                            else\n                                            {\n                                                Assert.AreEqual(req.Method, HttpMethod.Delete);\n                                            }\n                                        },\n                                        assertQueue: queue =>\n                                        {\n                                            var op = queue.Values.Single(o => o.Value<string>(\"itemId\") == \"item1\");\n                                            Assert.AreEqual(op.Value<long>(\"version\"), 2L);\n                                        });\n        }\n\n        [AsyncTestMethod]\n        public async Task ReadAsync_PassesOdataToStore_WhenLinqIsUsed()\n        {\n            var store = new MobileServiceLocalStoreMock();\n            store.ReadResponses.Enqueue(\"{count: 1, results: [{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}]}\");\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            IMobileServiceTableQuery<string> query = table.Skip(5)\n                                                          .Take(3)\n                                                          .Where(t => t.String == \"world\")\n                                                          .OrderBy(o => o.Id)\n                                                          .OrderByDescending(o => o.String)\n                                                          .IncludeTotalCount()\n                                                          .Select(x => x.String);\n\n            IEnumerable<string> result = await table.ReadAsync(query);\n\n            string odata = store.ReadQueries.First().ToODataString();\n            Assert.AreEqual(odata, \"$filter=(String eq 'world')&\" +\n                                    \"$orderby=String desc,id&\" +\n                                    \"$skip=5&\" +\n                                    \"$top=3&\" +\n                                    \"$select=String&\" +\n                                    \"$inlinecount=allpages\");\n        }\n\n        [AsyncTestMethod]\n        public async Task ToEnumerableAsync_ParsesOData_WhenRawQueryIsProvided()\n        {\n            var store = new MobileServiceLocalStoreMock();\n            store.ReadResponses.Enqueue(\"{count: 1, results: [{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}]}\");\n\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            string odata = \"$filter=(String eq 'world')&\" +\n                            \"$orderby=String desc,id&\" +\n                            \"$skip=5&\" +\n                            \"$top=3&\" +\n                            \"$select=String&\" +\n                            \"$inlinecount=allpages\";\n\n            await table.ReadAsync(odata);\n\n            string odata2 = store.ReadQueries.First().ToODataString();\n            Assert.AreEqual(odata, odata2);\n        }\n\n        /// <summary>\n        /// Tests that the second operation on the same item will cancel one of the two operations how ever other operations between the two (on other items) are not reordered\n        /// </summary>\n        /// <param name=\"firstOperationOnItem1\">first operation on item 1</param>\n        /// <param name=\"operationOnItem2\">operation on item 2</param>\n        /// <param name=\"secondOperationOnItem1\">second operation on item 1</param>\n        /// <param name=\"assertRequest\">To check which of the two operations got cancelled</param>\n        private async Task TestCollapseCancel(Func<IMobileServiceSyncTable<StringIdType>, StringIdType, Task> firstOperationOnItem1,\n                                              Func<IMobileServiceSyncTable<StringIdType>, StringIdType, Task> operationOnItem2,\n                                              Func<IMobileServiceSyncTable<StringIdType>, StringIdType, Task> secondOperationOnItem1,\n                                              Action<HttpRequestMessage, int> assertRequest,\n                                              Action<Dictionary<string, JObject>> assertQueue)\n        {\n            var store = new MobileServiceLocalStoreMock();\n            var hijack = new TestHttpHandler();\n            MobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n\n            var item1 = new StringIdType() { Id = \"item1\", String = \"what?\" };\n            var item2 = new StringIdType() { Id = \"item2\", String = \"this\" };\n            int executed = 0;\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            hijack.OnSendingRequest = req =>\n            {\n                ++executed;\n                assertRequest(req, executed);\n                return Task.FromResult(req);\n            };\n\n            await service.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            await firstOperationOnItem1(table, item1);\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L);\n\n            await operationOnItem2(table, item2);\n            Assert.AreEqual(service.SyncContext.PendingOperations, 2L);\n\n            await secondOperationOnItem1(table, item1);\n            Assert.AreEqual(service.SyncContext.PendingOperations, 2L);\n\n            Dictionary<string, JObject> queue = store.TableMap[MobileServiceLocalSystemTables.OperationQueue];\n            assertQueue(queue);\n\n            await service.SyncContext.PushAsync();\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 0L);\n            Assert.AreEqual(executed, 2); // total two operations executed\n        }\n\n        /// <summary>\n        /// Tests that the second operation on the same item will throw if first operation is in the queue\n        /// </summary>\n        /// <param name=\"firstOperation\">The operation that was already in queue.</param>\n        /// <param name=\"secondOperation\">The operation that came in late but could not be collapsed.</param>\n        /// <returns></returns>\n        private async Task TestCollapseThrow(Func<IMobileServiceSyncTable<StringIdType>, StringIdType, Task> firstOperation, Func<IMobileServiceSyncTable<StringIdType>, StringIdType, Task> secondOperation)\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            var item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await firstOperation(table, item);\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L);\n\n            await ThrowsAsync<InvalidOperationException>(() => secondOperation(table, item));\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L);\n        }\n\n        /// <summary>\n        /// Tests that throwing an exception of type toThrow from the http handler causes the push sync to be aborted\n        /// </summary>\n        /// <param name=\"toThrow\">The exception to simulate coming from http layer</param>\n        /// <param name=\"expectedStatus\">The expected status of push operation as reported in PushCompletionResult and PushFailedException</param>\n        /// <returns></returns>\n        private async Task TestPushAbort(Exception toThrow, MobileServicePushStatus expectedStatus)\n        {\n            bool thrown = false;\n            var hijack = new TestHttpHandler();\n            hijack.OnSendingRequest = req =>\n            {\n                if (!thrown)\n                {\n                    thrown = true;\n                    throw toThrow;\n                }\n                return Task.FromResult(req);\n            };\n\n            var operationHandler = new MobileServiceSyncHandlerMock();\n\n            hijack.SetResponseContent(\"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\");\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\", hijack);\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), operationHandler);\n\n            IMobileServiceSyncTable<StringIdType> table = service.GetSyncTable<StringIdType>();\n\n            var item = new StringIdType() { Id = \"an id\", String = \"what?\" };\n            await table.InsertAsync(item);\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L);\n\n            MobileServicePushFailedException ex = await ThrowsAsync<MobileServicePushFailedException>(service.SyncContext.PushAsync);\n\n            Assert.AreEqual(ex.PushResult.Status, expectedStatus);\n            Assert.AreEqual(ex.PushResult.Errors.Count(), 0);\n\n            Assert.AreEqual(operationHandler.PushCompletionResult.Status, expectedStatus);\n\n            // the insert operation is still in queue\n            Assert.AreEqual(service.SyncContext.PendingOperations, 1L);\n\n            await service.SyncContext.PushAsync();\n\n            Assert.AreEqual(service.SyncContext.PendingOperations, 0L);\n            Assert.AreEqual(operationHandler.PushCompletionResult.Status, MobileServicePushStatus.Complete);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/UnitTests/Table/Sync/MobileServiceSyncTable.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"unit\")]\n    [Tag(\"table\")]\n    [Tag(\"offline\")]\n    public class MobileServiceSyncTableTests : TestBase\n    {        \n        [AsyncTestMethod]\n        public async Task InsertAsync_GeneratesId_WhenNull()\n        {\n            IMobileServiceClient service = new MobileServiceClient(\"http://www.test.com\", \"secret...\");\n            await service.SyncContext.InitializeAsync(new MobileServiceLocalStoreMock(), new MobileServiceSyncHandler());\n\n            var item = new JObject();\n            JObject inserted = await service.GetSyncTable(\"someTable\").InsertAsync(item);\n            Assert.IsNotNull(inserted.Value<string>(\"id\"), \"Expected id member not found.\");\n\n            item = new JObject(){{\"id\", null}};\n            inserted = await service.GetSyncTable(\"someTable\").InsertAsync(item);\n            Assert.IsNotNull(inserted.Value<string>(\"id\"), \"Expected id member not found.\");\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"portable-net45+win+wpa81+wp80\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Extensions/ExceptionExtensions.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Extensions\n{\n    [TestClass]\n    public class ExceptionExtensionsTests\n    {\n        [TestMethod]\n        public void IsNetworkError_ReturnsTrue_OnNetworkErrors()\n        {\n            Assert.IsTrue(ExceptionExtensions.IsNetworkError(new HttpRequestException()));\n        }\n\n        [TestMethod]\n        public void IsNetworkError_ReturnsFalse_OnOtherErrors()\n        {\n            Assert.IsFalse(ExceptionExtensions.IsNetworkError(new Exception()));\n            Assert.IsFalse(ExceptionExtensions.IsNetworkError(new MobileServiceInvalidOperationException(null, new HttpRequestMessage(), new HttpResponseMessage())));\n        }\n\n        [TestMethod]\n        public void IsAuthenticationError_ReturnsTrue_OnAuthErrors()\n        {\n            Assert.IsTrue(ExceptionExtensions.IsAuthenticationError(new MobileServiceInvalidOperationException(null, new HttpRequestMessage(), new HttpResponseMessage(HttpStatusCode.Unauthorized))));\n        }\n\n        [TestMethod]\n        public void IsAuthenticationError_ReturnsFalse_OnOtherErrors()\n        {\n            Assert.IsFalse(ExceptionExtensions.IsAuthenticationError(new Exception()));\n            Assert.IsFalse(ExceptionExtensions.IsAuthenticationError(new MobileServiceInvalidOperationException(null, new HttpRequestMessage(), new HttpResponseMessage())));\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Extensions/JTokenExtensionsTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Extensions\n{\n    [TestClass]\n    public class JTokenExtensionTests\n    {\n        [TestMethod]\n        public void IsValidItem_ReturnsFalse_IfObjectIsNull()\n        {\n            Assert.IsFalse(JTokenExtensions.IsValidItem(null));\n        }\n\n        [TestMethod]\n        public void IsValidItem_ReturnsFalse_IfObjectIsNotJObject()\n        {\n            Assert.IsFalse(JTokenExtensions.IsValidItem(new JValue(true)));\n            Assert.IsFalse(JTokenExtensions.IsValidItem(new JArray()));\n        }\n\n        [TestMethod]\n        public void IsValidItem_ReturnsFalse_IfObjectIsJObjectWithoutId()\n        {\n            Assert.IsFalse(JTokenExtensions.IsValidItem(new JObject()));\n        }\n\n        [TestMethod]\n        public void IsValidItem_ReturnsTrue_IfObjectIsJObjectWithId()\n        {\n            Assert.IsTrue(JTokenExtensions.IsValidItem(new JObject(){{\"id\", \"abc\"}}));\n        }\n\n        [TestMethod]\n        public void ValidItemOrNull_ReturnsItem_IfItIsValid()\n        {\n            var item = new JObject() { { \"id\", \"abc\" } };\n            Assert.AreSame(item, JTokenExtensions.ValidItemOrNull(item));\n        }\n\n        [TestMethod]\n        public void ValidItemOrNull_ReturnsNull_IfItIsInValid()\n        {\n            var items = new JToken[] { null, new JArray(), new JValue(true), new JObject() };\n            foreach (JToken item in items)\n            {\n                Assert.IsNull(JTokenExtensions.ValidItemOrNull(item));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Microsoft.WindowsAzure.Mobile.Test.Unit.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{574B5567-FF51-4B0F-A9ED-CC9F711E9156}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.Test.Unit</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Test.Unit</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Moq, Version=4.2.1408.717, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Moq.4.2.1408.0717\\lib\\net40\\Moq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n      </ItemGroup>\n    </When>\n    <Otherwise>\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework\" />\n      </ItemGroup>\n    </Otherwise>\n  </Choose>\n  <ItemGroup>\n    <Compile Include=\"Extensions\\ExceptionExtensions.Test.cs\" />\n    <Compile Include=\"Extensions\\JTokenExtensionsTests.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Table\\MobileServiceSyncContextTests.cs\" />\n    <Compile Include=\"Table\\Query\\MobileServiceTableQueryDescriptionTests.cs\" />\n    <Compile Include=\"Table\\Sync\\MobileServiceSyncTableTests.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Actions\\PullActionTests.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Actions\\PushActionTests.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\DeleteOperationTests.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\MobileServiceTableOperationErrorTests.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\MobileServiceTableOperationTests.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\UpdateOperationTests.cs\" />\n    <Compile Include=\"Table\\Sync\\Queue\\Operations\\InsertOperationTests.cs\" />\n    <Compile Include=\"Threading\\AsyncLockDictionaryTests.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{d8bbc92a-b213-463b-911d-3a106f91d5f9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(SolutionDir)\\.nuget\\NuGet.targets\" Condition=\"Exists('$(SolutionDir)\\.nuget\\NuGet.targets')\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.MobileServices.Test.Unit\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.MobileServices.Test.Unit\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"ecb285f1-1b28-4398-bce6-575c485b2fe1\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Table/MobileServiceSyncContextTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Moq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Table\n{\n    [TestClass]\n    public class MobileServiceSyncContextTests\n    {\n        private MobileServiceSyncContext context;\n        private Mock<MobileServiceClient> client;\n\n        [TestInitialize]\n        public void Initialize()\n        {\n            this.client = new Mock<MobileServiceClient>();\n            this.context = new MobileServiceSyncContext(this.client.Object);\n        }\n\n        [TestMethod]\n        public void PendingOperations_DoesNotThrow_IfItIsNotInitialized()\n        {\n            Assert.AreEqual(0, this.context.PendingOperations);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Table/Query/MobileServiceTableQueryDescriptionTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Query;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Table.Query\n{\n    [TestClass]\n    public class MobileServiceTableQueryDescriptionTests\n    {\n        private const string EscapedODataString = \"$filter=\" +\n                                                  \"((__updatedat gt datetimeoffset'2014-04-04T07%3A00%3A00.0000000%2B00%3A00') and \" +\n                                                  \"((someDate gt datetime'2014-04-04T07%3A00%3A00.000Z') and \" +\n                                                  \"startswith(text,'this%26%27%27%25%25%3D%2C%3F%23')))\";\n\n        [TestMethod]\n        public void Parse_DoesNotThrow_OnIncompleteQuery()\n        {\n            var desc = MobileServiceTableQueryDescription.Parse(\"someTable\", \"$select&\");\n        }\n\n        [TestMethod]\n        public void Parse_UnescapesThe_Uri()\n        {\n            var desc = MobileServiceTableQueryDescription.Parse(\"someTable\", EscapedODataString);\n\n            var and1 = desc.Filter as BinaryOperatorNode;\n            Assert.IsNotNull(and1);\n            Assert.AreEqual(and1.OperatorKind, BinaryOperatorKind.And);\n\n            var expectedDateTime = new DateTimeOffset(2014, 4, 4, 7, 0, 0, TimeSpan.Zero);\n\n            var gt1 = and1.LeftOperand as BinaryOperatorNode;\n            Assert.IsNotNull(gt1);\n            Assert.AreEqual(gt1.OperatorKind, BinaryOperatorKind.GreaterThan);\n            var updatedAt1 = gt1.LeftOperand as MemberAccessNode;\n            Assert.IsNotNull(updatedAt1);\n            Assert.AreEqual(updatedAt1.MemberName, \"__updatedat\");\n\n            var datetime1 = gt1.RightOperand as ConstantNode;\n            Assert.IsNotNull(datetime1);\n            Assert.AreEqual(datetime1.Value, expectedDateTime);\n\n            var and2 = and1.RightOperand as BinaryOperatorNode;\n            Assert.IsNotNull(and2);\n            Assert.AreEqual(and2.OperatorKind, BinaryOperatorKind.And);\n\n            var gt2 = and2.LeftOperand as BinaryOperatorNode;\n            Assert.IsNotNull(gt2);\n            Assert.AreEqual(gt2.OperatorKind, BinaryOperatorKind.GreaterThan);\n\n            var updatedAt2 = gt2.LeftOperand as MemberAccessNode;\n            Assert.IsNotNull(updatedAt2);\n            Assert.AreEqual(updatedAt2.MemberName, \"someDate\");\n\n            var datetime2 = gt2.RightOperand as ConstantNode;\n            Assert.IsNotNull(datetime2);\n            //Note - shouldn't the OData value be parsed as UTC?\n            Assert.AreEqual(datetime2.Value, expectedDateTime.LocalDateTime);\n\n            var startswith = and2.RightOperand as FunctionCallNode;\n            Assert.IsNotNull(startswith);\n            Assert.AreEqual(startswith.Arguments.Count, 2);\n\n            var text = startswith.Arguments[0] as MemberAccessNode;\n            Assert.IsNotNull(text);\n            Assert.AreEqual(text.MemberName, \"text\");\n\n            var value = startswith.Arguments[1] as ConstantNode;\n            Assert.IsNotNull(value);\n            Assert.AreEqual(value.Value, \"this&'%%=,?#\");\n        }\n\n        [TestMethod]\n        public void ToODataString_EscapesThe_Uri()\n        {\n\n            //__updatedat gt datetimeoffset'2014-04-04T07:00:00.0000000+00:00'\n            var datetime1 = new ConstantNode(new DateTimeOffset(2014, 4, 4, 7, 0, 0, TimeSpan.FromHours(0)));\n            var updatedAt = new MemberAccessNode(null, \"__updatedat\");\n            var gt1 = new BinaryOperatorNode(BinaryOperatorKind.GreaterThan, updatedAt, datetime1);\n\n            // __updatedat gt datetime'2014-04-04T07:0:0.000Z'\n            var datetime2 = new ConstantNode(new DateTime(2014, 4, 4, 7, 0, 0, DateTimeKind.Utc));\n            var someDate = new MemberAccessNode(null, \"someDate\");\n            var gt2 = new BinaryOperatorNode(BinaryOperatorKind.GreaterThan, someDate, datetime2);\n\n            // startswith(text,'this&''%%=,?#')\n            var text = new MemberAccessNode(null, \"text\");\n            var value = new ConstantNode(\"this&'%%=,?#\");\n            var startswith = new FunctionCallNode(\"startswith\", new QueryNode[] { text, value });\n\n            //__updatedat gt datetimeoffset'2014-04-04T07:00:00.0000000+00:00' and startswith(text,'this&''%%=,?#')\n            var and2 = new BinaryOperatorNode(BinaryOperatorKind.And, gt2, startswith);\n\n            var and1 = new BinaryOperatorNode(BinaryOperatorKind.And, gt1, and2);\n\n            var desc = new MobileServiceTableQueryDescription(\"someTable\") { Filter = and1 };\n            Assert.AreEqual(desc.ToODataString(), EscapedODataString);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Table/Sync/MobileServiceSyncTableTests.cs",
    "content": "﻿using System;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Table.Sync\n{\n    [TestClass]\n    public class MobileServiceSyncTableTests\n    {\n        [TestMethod]\n        public void ValidateQueryId_Throws_OnInvalidId()\n        {\n            var testCases = new[] { \"|myitems\", \"s|myitems\", \"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\" };\n            foreach (var queryId in testCases)\n            {\n                var ex = AssertEx.Throws<ArgumentException>(() => MobileServiceSyncTable.ValidateQueryId(queryId));\n                Assert.AreEqual(ex.Message, \"The query id must not contain pipe character and should be less than 50 characters in length.\");\n            }\n        }\n\n        [TestMethod]\n        public void ValidateQueryId_Succeeds_OnValidId()\n        {\n            var testCases = new[] { \"myitems1\", \"myItems_yourItems1\", \"my-items123\", \"-myitems\", \"_myitems\", \"asdf@#$!/:^\" };\n            foreach (var queryId in testCases)\n            {\n                MobileServiceSyncTable.ValidateQueryId(queryId);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Table/Sync/Queue/Actions/PullActionTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Moq;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Table.Sync.Queue.Actions\n{\n    [TestClass]\n    public class PullActionTests\n    {\n        private Mock<OperationQueue> opQueue;\n        private Mock<IMobileServiceLocalStore> store;\n        private Mock<MobileServiceSyncSettingsManager> settings;\n        private Mock<IMobileServiceSyncHandler> handler;\n        private Mock<MobileServiceClient> client;\n        private Mock<MobileServiceSyncContext> context;\n        private Mock<MobileServiceTable<ToDoWithSystemPropertiesType>> table;\n\n        [TestInitialize]\n        public void Initialize()\n        {\n            this.store = new Mock<IMobileServiceLocalStore>(MockBehavior.Strict);\n            this.settings = new Mock<MobileServiceSyncSettingsManager>(MockBehavior.Strict);\n            this.opQueue = new Mock<OperationQueue>(MockBehavior.Strict, this.store.Object);\n            this.handler = new Mock<IMobileServiceSyncHandler>(MockBehavior.Strict);\n            this.client = new Mock<MobileServiceClient>();\n            this.client.Object.Serializer = new MobileServiceSerializer();\n            this.context = new Mock<MobileServiceSyncContext>(this.client.Object);\n            this.table = new Mock<MobileServiceTable<ToDoWithSystemPropertiesType>>(\"test\", this.client.Object);\n        }\n\n        [TestMethod]\n        public async Task DoesNotUpsertAnObject_IfItDoesNotHaveAnId()\n        {\n            var query = new MobileServiceTableQueryDescription(\"test\");\n            var action = new PullAction(this.table.Object, MobileServiceTableKind.Table, this.context.Object, null, query, null, null, this.opQueue.Object, this.settings.Object, this.store.Object, MobileServiceRemoteTableOptions.All, pullOptions: null, reader: null, cancellationToken: CancellationToken.None);\n\n            var itemWithId = new JObject() { { \"id\", \"abc\" }, { \"text\", \"has id\" } };\n            var itemWithoutId = new JObject() { { \"text\", \"no id\" } };\n            var result = new JArray(new[]{\n                itemWithId,\n                itemWithoutId\n            });\n            this.opQueue.Setup(q => q.LockTableAsync(It.IsAny<string>(), It.IsAny<CancellationToken>())).Returns(Task.FromResult<IDisposable>(null));\n            this.opQueue.Setup(q => q.CountPending(It.IsAny<string>())).Returns(Task.FromResult(0L));\n            this.table.SetupSequence(t => t.ReadAsync(It.IsAny<string>(), It.IsAny<IDictionary<string, string>>(), It.IsAny<MobileServiceFeatures>()))\n                      .Returns(Task.FromResult(QueryResult.Parse(result, null, false)))\n                      .Returns(Task.FromResult(QueryResult.Parse(new JArray(), null, false)));\n            this.store.Setup(s => s.UpsertAsync(\"test\", It.IsAny<IEnumerable<JObject>>(), true))\n                      .Returns(Task.FromResult(0))\n                      .Callback<string, IEnumerable<JObject>, bool>((tableName, items, fromServer) =>\n                        {\n                            Assert.AreEqual(1, items.Count());\n                            Assert.AreEqual(itemWithId, items.First());\n                        });\n\n            await action.ExecuteAsync();\n\n            store.VerifyAll();\n            opQueue.VerifyAll();\n            table.VerifyAll();\n\n            store.Verify(s => s.DeleteAsync(\"test\", It.IsAny<IEnumerable<string>>()), Times.Never(), \"There shouldn't be any call to delete\");\n        }\n\n        [TestMethod]\n        public async Task SavesTheMaxUpdatedAt_IfQueryIdIsSpecified_WithoutFilter()\n        {\n            var query = new MobileServiceTableQueryDescription(\"test\");\n\n            var result = new JArray(new[]\n            {\n                new JObject() { { \"id\", \"abc\" }, { \"text\", \"has id\"}, { \"__updatedAt\", \"1985-07-17\" } },\n                new JObject() { { \"id\", \"abc\" }, { \"text\", \"has id\"}, { \"__updatedAt\", \"2014-07-09\" } }\n            });\n            string firstQuery = \"$filter=(__updatedAt ge datetimeoffset'2013-01-01T00%3A00%3A00.0000000%2B00%3A00')&$orderby=__updatedAt&$skip=0&$top=50\";\n            string secondQuery = \"$filter=(__updatedAt ge datetimeoffset'2014-07-09T07%3A00%3A00.0000000%2B00%3A00')&$orderby=__updatedAt&$skip=0&$top=50\";\n            await TestIncrementalSync(query, result, new DateTime(2014, 07, 09), savesMax: true, firstQuery: firstQuery, secondQuery: secondQuery);\n        }\n\n        [TestMethod]\n        public async Task SavesTheMaxUpdatedAt_IfQueryIdIsSpecified()\n        {\n            var query = new MobileServiceTableQueryDescription(\"test\");\n            query.Filter = new BinaryOperatorNode(BinaryOperatorKind.Equal, new ConstantNode(4), new ConstantNode(3));\n            query.Ordering.Add(new OrderByNode(new MemberAccessNode(null, \"text\"), OrderByDirection.Descending));\n            var result = new JArray(new[]\n            {\n                new JObject() { { \"id\", \"abc\" }, { \"text\", \"has id\"}, { \"__updatedAt\", \"1985-07-17\" } },\n                new JObject() { { \"id\", \"abc\" }, { \"text\", \"has id\"}, { \"__updatedAt\", \"2014-07-09\" } }\n            });\n            string firstQuery = \"$filter=((4 eq 3) and (__updatedAt ge datetimeoffset'2013-01-01T00%3A00%3A00.0000000%2B00%3A00'))&$orderby=__updatedAt&$skip=0&$top=50\";\n            string secondQuery = \"$filter=((4 eq 3) and (__updatedAt ge datetimeoffset'2014-07-09T07%3A00%3A00.0000000%2B00%3A00'))&$orderby=__updatedAt&$skip=0&$top=50\";\n            await TestIncrementalSync(query, result, new DateTime(2014, 07, 09), savesMax: true, firstQuery: firstQuery, secondQuery: secondQuery);\n        }\n\n        [TestMethod]\n        public async Task DoesNotSaveTheMaxUpdatedAt_IfThereAreNoResults()\n        {\n            var query = new MobileServiceTableQueryDescription(\"test\");\n            var result = new JArray();\n            string expectedOdata = \"$filter=(__updatedAt ge datetimeoffset'2013-01-01T00%3A00%3A00.0000000%2B00%3A00')&$orderby=__updatedAt&$skip=0&$top=50\";\n            await TestIncrementalSync(query, result, DateTime.MinValue, savesMax: false, firstQuery: expectedOdata, secondQuery: null);\n        }\n\n        [TestMethod]\n        public async Task DoesNotSaveTheMaxUpdatedAt_IfResultsHaveOlderUpdatedAt()\n        {\n            var query = new MobileServiceTableQueryDescription(\"test\");\n            query.Filter = new BinaryOperatorNode(BinaryOperatorKind.Equal, new ConstantNode(4), new ConstantNode(3));\n            var result = new JArray(new[]\n            {\n                new JObject() { { \"id\", \"abc\" }, { \"text\", \"has id\"}, { \"__updatedAt\", \"1985-07-17\" } },\n            });\n            string firstQuery = \"$filter=((4 eq 3) and (__updatedAt ge datetimeoffset'2013-01-01T00%3A00%3A00.0000000%2B00%3A00'))&$orderby=__updatedAt&$skip=0&$top=50\";\n            string secondQuery = \"$filter=((4 eq 3) and (__updatedAt ge datetimeoffset'2013-01-01T00%3A00%3A00.0000000%2B00%3A00'))&$orderby=__updatedAt&$skip=1&$top=50\";\n            await TestIncrementalSync(query, result, new DateTime(2014, 07, 09), savesMax: false, firstQuery: firstQuery, secondQuery: secondQuery);\n        }\n\n        [TestMethod]\n        public async Task DoesNotSaveTheMaxUpdatedAt_IfResultsDoNotHaveUpdatedAt()\n        {\n            var query = new MobileServiceTableQueryDescription(\"test\");\n            query.Filter = new BinaryOperatorNode(BinaryOperatorKind.Equal, new ConstantNode(4), new ConstantNode(3));\n            var result = new JArray(new[]\n            {\n                new JObject() { { \"id\", \"abc\" }, { \"text\", \"has id\"} },\n                new JObject() { { \"id\", \"abc\" }, { \"text\", \"has id\"} }\n            });\n            string firstQuery = \"$filter=((4 eq 3) and (__updatedAt ge datetimeoffset'2013-01-01T00%3A00%3A00.0000000%2B00%3A00'))&$orderby=__updatedAt&$skip=0&$top=50\";\n            string secondQuery = \"$filter=((4 eq 3) and (__updatedAt ge datetimeoffset'2013-01-01T00%3A00%3A00.0000000%2B00%3A00'))&$orderby=__updatedAt&$skip=2&$top=50\";\n            await TestIncrementalSync(query, result, new DateTime(2014, 07, 09), savesMax: false, firstQuery: firstQuery, secondQuery: secondQuery);\n        }\n\n        [TestMethod]\n        [ExpectedException(typeof(ArgumentException))]\n        public void NegativePageSize_Throws()\n        {\n            new PullOptions\n            {\n                MaxPageSize = -1,\n            };\n        }\n\n        [TestMethod]\n        [ExpectedException(typeof(ArgumentException))]\n        public void ZeroPageSize_Throws()\n        {\n            new PullOptions\n            {\n                MaxPageSize = 0,\n            };\n        }\n\n        private async Task TestIncrementalSync(MobileServiceTableQueryDescription query, JArray result, DateTime maxUpdatedAt, bool savesMax, string firstQuery, string secondQuery)\n        {\n            var action = new PullAction(this.table.Object, MobileServiceTableKind.Table, this.context.Object,\n                \"latestItems\", query, null, null, this.opQueue.Object, this.settings.Object, this.store.Object,\n                MobileServiceRemoteTableOptions.All, pullOptions: null, reader: null, cancellationToken: CancellationToken.None);\n\n            this.opQueue.Setup(q => q.LockTableAsync(It.IsAny<string>(), It.IsAny<CancellationToken>())).Returns(Task.FromResult<IDisposable>(null));\n            this.opQueue.Setup(q => q.CountPending(It.IsAny<string>())).Returns(Task.FromResult(0L));\n            this.table.Setup(t => t.ReadAsync(firstQuery, It.IsAny<IDictionary<string, string>>(), It.IsAny<MobileServiceFeatures>()))\n                      .Returns(Task.FromResult(QueryResult.Parse(result, null, false)));\n\n            if (result.Any())\n            {\n                this.table.Setup(t => t.ReadAsync(secondQuery, It.IsAny<IDictionary<string, string>>(), It.IsAny<MobileServiceFeatures>()))\n                          .Returns(Task.FromResult(QueryResult.Parse(new JArray(), null, false)));\n            }\n\n            if (result.Any())\n            {\n                this.store.Setup(s => s.UpsertAsync(\"test\", It.IsAny<IEnumerable<JObject>>(), true)).Returns(Task.FromResult(0));\n            }\n\n            this.settings.Setup(s => s.GetDeltaTokenAsync(\"test\", \"latestItems\")).Returns(Task.FromResult(new DateTimeOffset(2013, 1, 1, 0, 0, 0, TimeSpan.Zero)));\n            if (savesMax)\n            {\n                this.settings.Setup(s => s.SetDeltaTokenAsync(\"test\", \"latestItems\", maxUpdatedAt)).Returns(Task.FromResult(0));\n            }\n\n            await action.ExecuteAsync();\n\n            this.store.VerifyAll();\n            this.opQueue.VerifyAll();\n            this.table.VerifyAll();\n            this.settings.VerifyAll();\n\n            store.Verify(s => s.DeleteAsync(\"test\", It.IsAny<IEnumerable<string>>()), Times.Never(), \"There shouldn't be any call to delete\");\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Table/Sync/Queue/Actions/PushActionTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Query;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Moq;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Table.Sync.Queue.Actions\n{\n    [TestClass]\n    public class PushActionTests\n    {\n        private Mock<OperationQueue> opQueue;\n        private Mock<IMobileServiceLocalStore> store;\n        private PushAction action;\n        private Mock<IMobileServiceSyncHandler> handler;\n        private Mock<MobileServiceClient> client;\n        private Mock<MobileServiceSyncContext> context;\n\n        [TestInitialize]\n        public void Initialize()\n        {\n            this.store = new Mock<IMobileServiceLocalStore>(MockBehavior.Strict);\n            this.opQueue = new Mock<OperationQueue>(MockBehavior.Strict, this.store.Object);\n            this.opQueue.Setup(q => q.UpdateAsync(It.IsAny<MobileServiceTableOperation>())).Returns(Task.FromResult(0));\n            this.handler = new Mock<IMobileServiceSyncHandler>(MockBehavior.Strict);\n            this.client = new Mock<MobileServiceClient>();\n            this.client.Object.Serializer = new MobileServiceSerializer();\n            this.context = new Mock<MobileServiceSyncContext>(this.client.Object);\n            this.context.Setup(c => c.GetTable(It.IsAny<string>())).Returns(Task.FromResult(new MobileServiceTable(\"test\", this.client.Object)));\n            this.action = new PushAction(this.opQueue.Object, this.store.Object, MobileServiceTableKind.Table, null, this.handler.Object, this.client.Object, this.context.Object, CancellationToken.None);\n        }\n\n        [TestMethod]\n        public async Task AbortPush_AbortsThePush()\n        {\n            MobileServiceTableOperation op = new InsertOperation(\"abc\", MobileServiceTableKind.Table, \"abc\") { Item = new JObject() }; // putting an item so it won't load it\n            // picks up the operation\n            this.opQueue.Setup(q => q.PeekAsync(0, MobileServiceTableKind.Table, It.IsAny<IEnumerable<string>>())).Returns(() => Task.FromResult(op));\n            // executes the operation via handler\n            this.handler.Setup(h => h.ExecuteTableOperationAsync(op))\n                        .Callback<IMobileServiceTableOperation>(o =>\n                        {\n                            o.AbortPush();\n                        });\n\n            // loads sync errors\n            string syncError = @\"[]\";\n            this.store.Setup(s => s.ReadAsync(It.Is<MobileServiceTableQueryDescription>(q => q.TableName == MobileServiceLocalSystemTables.SyncErrors))).Returns(Task.FromResult(JToken.Parse(syncError)));\n            // calls push complete\n            this.handler.Setup(h => h.OnPushCompleteAsync(It.IsAny<MobileServicePushCompletionResult>())).Returns(Task.FromResult(0))\n                        .Callback<MobileServicePushCompletionResult>(result =>\n                        {\n                            Assert.AreEqual(result.Status, MobileServicePushStatus.CancelledByOperation);\n                            Assert.AreEqual(result.Errors.Count(), 0);\n                        });\n\n            // deletes the errors\n            this.store.Setup(s => s.DeleteAsync(It.Is<MobileServiceTableQueryDescription>(q => q.TableName == MobileServiceLocalSystemTables.SyncErrors))).Returns(Task.FromResult(0));\n\n            await this.action.ExecuteAsync();\n\n            this.store.VerifyAll();\n            this.opQueue.VerifyAll();\n            this.handler.VerifyAll();\n\n            var ex = await AssertEx.Throws<MobileServicePushFailedException>(async () => await action.CompletionTask);\n            Assert.AreEqual(ex.PushResult.Status, MobileServicePushStatus.CancelledByOperation);\n            Assert.AreEqual(ex.PushResult.Errors.Count(), 0);\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_DeletesTheErrors()\n        {\n            var op = new InsertOperation(\"table\", MobileServiceTableKind.Table, \"id\") { Item = new JObject() }; // putting an item so it won't load it\n            await this.TestExecuteAsync(op, null, null);\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_LoadsTheItem_IfItIsNotPresent()\n        {\n            var op = new InsertOperation(\"table\", MobileServiceTableKind.Table, \"id\");\n            this.store.Setup(s => s.LookupAsync(\"table\", \"id\")).Returns(Task.FromResult(new JObject()));\n            await this.TestExecuteAsync(op, null, null);\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_SavesTheResult_IfExecuteTableOperationDoesNotThrow()\n        {\n            var op = new InsertOperation(\"table\", MobileServiceTableKind.Table, \"id\") { Item = new JObject() };\n            await TestResultSave(op, status: null, resultId: \"id\", saved: true);\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_DoesNotSaveTheResult_IfOperationDoesNotWriteToStore()\n        {\n            var op = new DeleteOperation(\"table\", MobileServiceTableKind.Table, \"id\") { Item = new JObject() };\n            Assert.IsFalse(op.CanWriteResultToStore);\n            await TestResultSave(op, status: null, resultId: \"id\", saved: false);\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_DoesNotSaveTheResult_IfExecuteTableOperationThrows()\n        {\n            this.store.Setup(s => s.UpsertAsync(MobileServiceLocalSystemTables.SyncErrors, It.IsAny<JObject[]>(), false)).Returns(Task.FromResult(0));\n            var op = new InsertOperation(\"table\", MobileServiceTableKind.Table, \"id\") { Item = new JObject() };\n            await TestResultSave(op, status: HttpStatusCode.PreconditionFailed, resultId: \"id\", saved: false);\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_DoesNotSaveTheResult_IfPresentButResultDoesNotHaveId()\n        {\n            this.action = new PushAction(this.opQueue.Object, this.store.Object, MobileServiceTableKind.Table, null, this.handler.Object, this.client.Object, this.context.Object, CancellationToken.None);\n            var op = new InsertOperation(\"table\", MobileServiceTableKind.Table, \"id\") { Item = new JObject() };\n            await TestResultSave(op, status: null, resultId: null, saved: false);\n        }\n\n        private async Task TestResultSave(MobileServiceTableOperation op, HttpStatusCode? status, string resultId, bool saved)\n        {\n            var result = new JObject() { { \"id\", resultId } };\n            if (saved)\n            {\n                this.store.Setup(s => s.UpsertAsync(\"table\", It.Is<JObject[]>(list => list.Any(o => o.ToString() == result.ToString())), true))\n                          .Returns(Task.FromResult(0));\n            }\n            await this.TestExecuteAsync(op, result, status);\n        }\n\n        private async Task TestExecuteAsync(MobileServiceTableOperation op, JObject result, HttpStatusCode? errorCode)\n        {\n            op.Sequence = 1;\n\n            // picks up the operation\n            this.opQueue.Setup(q => q.PeekAsync(0, MobileServiceTableKind.Table, It.IsAny<IEnumerable<string>>())).Returns(() => Task.FromResult(op));\n            this.opQueue.Setup(q => q.PeekAsync(op.Sequence, MobileServiceTableKind.Table, It.IsAny<IEnumerable<string>>())).Returns(() => Task.FromResult<MobileServiceTableOperation>(null));\n\n            // executes the operation via handler\n            if (errorCode == null)\n            {\n                this.handler.Setup(h => h.ExecuteTableOperationAsync(op)).Returns(Task.FromResult(result));\n            }\n            else\n            {\n                this.handler.Setup(h => h.ExecuteTableOperationAsync(op))\n                            .Throws(new MobileServiceInvalidOperationException(\"\",\n                                                                               null,\n                                                                               new HttpResponseMessage(errorCode.Value)\n                                                                               {\n                                                                                   Content = new StringContent(result.ToString())\n                                                                               }));\n            }\n            // removes the operation from queue only if there is no error\n            if (errorCode == null)\n            {\n                this.opQueue.Setup(q => q.DeleteAsync(It.IsAny<string>(), It.IsAny<long>())).Returns(Task.FromResult(true));\n            }\n            // loads sync errors\n            string syncError = @\"[]\";\n            this.store.Setup(s => s.ReadAsync(It.Is<MobileServiceTableQueryDescription>(q => q.TableName == MobileServiceLocalSystemTables.SyncErrors))).Returns(Task.FromResult(JToken.Parse(syncError)));\n            // calls push complete\n            this.handler.Setup(h => h.OnPushCompleteAsync(It.IsAny<MobileServicePushCompletionResult>())).Returns(Task.FromResult(0))\n                        .Callback<MobileServicePushCompletionResult>(r =>\n                        {\n                            Assert.AreEqual(r.Status, MobileServicePushStatus.Complete);\n                            Assert.AreEqual(r.Errors.Count(), 0);\n                        });\n            // deletes the errors\n            this.store.Setup(s => s.DeleteAsync(It.Is<MobileServiceTableQueryDescription>(q => q.TableName == MobileServiceLocalSystemTables.SyncErrors))).Returns(Task.FromResult(0));\n\n            await this.action.ExecuteAsync();\n\n            this.store.VerifyAll();\n            this.opQueue.VerifyAll();\n            this.handler.VerifyAll();\n\n            await action.CompletionTask;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Table/Sync/Queue/Operations/DeleteOperationTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Moq;\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Net;\nusing System.Net.Http;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Table.Sync.Queue.Operations\n{\n    [TestClass]\n    public class DeleteOperationTests\n    {\n        private DeleteOperation operation;\n\n        [TestInitialize]\n        public void Initialize()\n        {\n            this.operation = new DeleteOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n        }\n\n        [TestMethod]\n        public void WriteResultToStore_IsFalse()\n        {\n            Assert.IsFalse(this.operation.CanWriteResultToStore);\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_DeletesItemOnTable()\n        {\n            var client = new Mock<MobileServiceClient>(MockBehavior.Strict);\n\n            var table = new Mock<MobileServiceTable>(\"test\", client.Object);\n            this.operation.Table = table.Object;\n\n            var item = JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"Text\\\":\\\"Example\\\"}\");\n            this.operation.Item = item;\n\n            table.Setup(t => t.DeleteAsync(item)).Returns(Task.FromResult<JToken>(item));\n\n            await this.operation.ExecuteAsync();\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_IgnoresNotFound()\n        {\n            var client = new Mock<MobileServiceClient>(MockBehavior.Strict);\n\n            var table = new Mock<MobileServiceTable>(\"test\", client.Object);\n            this.operation.Table = table.Object;\n\n            var item = JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"Text\\\":\\\"Example\\\"}\");\n            this.operation.Item = item;\n\n            table.Setup(t => t.DeleteAsync(item)).Throws(new MobileServiceInvalidOperationException(\"not found\", new HttpRequestMessage(), new HttpResponseMessage(HttpStatusCode.NotFound)));\n\n            JObject result = await this.operation.ExecuteAsync();\n            Assert.IsNull(result);\n        }\n\n        [TestMethod]\n        public async Task ExecuteLocalAsync_DeletesItemOnStore()\n        {\n            var store = new Mock<IMobileServiceLocalStore>();\n            await this.operation.ExecuteLocalAsync(store.Object, null);\n            store.Verify(s => s.DeleteAsync(\"test\", It.Is<string[]>(i => i.Contains(\"abc\"))), Times.Once());\n        }\n\n        [TestMethod]\n        public async Task ExecuteLocalAsync_Throws_WhenStoreThrows()\n        {\n            var store = new Mock<IMobileServiceLocalStore>();\n            var storeError = new InvalidOperationException();\n            store.Setup(s => s.DeleteAsync(\"test\", It.Is<string[]>(i => i.Contains(\"abc\")))).Throws(storeError);\n\n            var ex = await AssertEx.Throws<InvalidOperationException>(() => this.operation.ExecuteLocalAsync(store.Object, null));\n            Assert.AreSame(storeError, ex);\n        }\n\n        [TestMethod]\n        public void Validate_Throws_WithInsertOperation()\n        {\n            var tableOperation = new InsertOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            TestDeleteValidateThrows(tableOperation);\n        }\n\n        [TestMethod]\n        public void Validate_Throws_WithUpdateOperation()\n        {\n            var tableOperation = new UpdateOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            TestDeleteValidateThrows(tableOperation);\n        }\n\n        [TestMethod]\n        public void Validate_Throws_WithDeleteOperation()\n        {\n            var tableOperation = new DeleteOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            TestDeleteValidateThrows(tableOperation);\n        }\n\n        private void TestDeleteValidateThrows(MobileServiceTableOperation tableOperation)\n        {\n            var ex = AssertEx.Throws<InvalidOperationException>(() => this.operation.Validate(tableOperation));\n            Assert.AreEqual(\"A delete operation on the item is already in the queue.\", ex.Message);\n        }\n\n        [TestMethod]\n        public void Serialize_Succeeds_DeleteHasItem()\n        {\n            var serializedItem = \"{\\\"id\\\":\\\"abc\\\",\\\"text\\\":\\\"example\\\"}\";\n            this.operation.Item = JObject.Parse(serializedItem);\n\n            var serializedOperation = this.operation.Serialize();\n\n            // Check delete successfully overrides keeping an item\n            Assert.AreEqual(serializedOperation[\"kind\"], 2);\n            Assert.AreEqual(serializedOperation[\"item\"], serializedItem);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Table/Sync/Queue/Operations/InsertOperationTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Moq;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Table.Sync.Queue.Operations\n{\n    [TestClass]\n    public class InsertOperationTests\n    {\n        private InsertOperation operation;\n\n        [TestInitialize]\n        public void Initialize()\n        {\n            this.operation = new InsertOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_InsertsItemOnTable()\n        {\n            var client = new Mock<MobileServiceClient>(MockBehavior.Strict);\n\n            var table = new Mock<MobileServiceTable>(\"test\", client.Object);\n            this.operation.Table = table.Object;\n\n            var item = JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"Text\\\":\\\"Example\\\"}\");\n            var itemWithProperties = JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"Text\\\":\\\"Example\\\",\\\"__version\\\":\\\"1\\\",\\\"__system\\\":12}\");\n            this.operation.Item = itemWithProperties;\n\n            table.Setup(t => t.InsertAsync(item)).Returns(Task.FromResult<JToken>(item));\n\n            await this.operation.ExecuteAsync();\n        }\n\n        [TestMethod]\n        public async Task ExecuteLocalAsync_UpsertsItemOnStore()\n        {\n            var store = new Mock<IMobileServiceLocalStore>();\n            var item = JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"Text\\\":\\\"Example\\\"}\");\n\n            await this.operation.ExecuteLocalAsync(store.Object, item);\n            store.Verify(s => s.UpsertAsync(\"test\", It.Is<JObject[]>(list => list.Contains(item)), false), Times.Once());\n        }\n\n        [TestMethod]\n        public async Task ExecuteLocalAsync_Throws_WhenStoreThrows()\n        {\n            var store = new Mock<IMobileServiceLocalStore>();\n            var storeError = new InvalidOperationException();\n            var item = JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"Text\\\":\\\"Example\\\"}\");\n\n            store.Setup(s => s.UpsertAsync(\"test\", It.Is<JObject[]>(list => list.Contains(item)), false)).Throws(storeError);\n            var ex = await AssertEx.Throws<InvalidOperationException>(() => this.operation.ExecuteLocalAsync(store.Object, item));\n            Assert.AreSame(storeError, ex);\n        }\n\n        [TestMethod]\n        public void Validate_Throws_WithInsertOperation()\n        {\n            var newOperation = new InsertOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            var ex = AssertEx.Throws<InvalidOperationException>(() => this.operation.Validate(newOperation));\n            Assert.AreEqual(\"An insert operation on the item is already in the queue.\", ex.Message);\n        }\n\n        [TestMethod]\n        public void Validate_Succeeds_WithUpdateOperation()\n        {\n            var newOperation = new UpdateOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            this.operation.Validate(newOperation);\n        }\n\n        [TestMethod]\n        public void Validate_Throws_WithDeleteOperation_WhenInsertIsAttempted()\n        {\n            var newOperation = new DeleteOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            this.operation.State = MobileServiceTableOperationState.Attempted;\n            var ex = AssertEx.Throws<InvalidOperationException>(() => this.operation.Validate(newOperation));\n            Assert.AreEqual(\"The item is in inconsistent state in the local store. Please complete the pending sync by calling PushAsync() before deleting the item.\", ex.Message);\n        }\n\n        [TestMethod]\n        public void Validate_Succeeds_WithDeleteOperation()\n        {\n            var newOperation = new DeleteOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            this.operation.Validate(newOperation);\n        }\n\n        [TestMethod]\n        public void Collapse_CancelsExistingOperation_WithUpdateOperation()\n        {\n            var newOperation = new UpdateOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            this.operation.Collapse(newOperation);\n\n            // new operation should be cancelled\n            Assert.IsTrue(newOperation.IsCancelled);\n\n            // existing operation should be updated and not cancelled\n            Assert.IsFalse(this.operation.IsCancelled);\n            Assert.IsTrue(this.operation.IsUpdated);\n            Assert.AreEqual(this.operation.Version, 2);\n        }\n\n        [TestMethod]\n        public void Collapse_CancelsBothOperations_WithDeleteOperation()\n        {\n            var newOperation = new DeleteOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            this.operation.Collapse(newOperation);\n\n            // new operation should be cancelled\n            Assert.IsTrue(newOperation.IsCancelled);\n\n            // existing operation should also be cancelled\n            Assert.IsTrue(this.operation.IsCancelled);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Table/Sync/Queue/Operations/MobileServiceTableOperationErrorTests.cs",
    "content": "﻿using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Table.Sync.Queue.Operations\n{\n    [TestClass]\n    public class MobileServiceTableOperationErrorTests\n    {\n        private MobileServiceSerializer serializer;\n\n        [TestInitialize]\n        public void Initialize()\n        {\n            this.serializer = new MobileServiceSerializer();\n        }\n\n        [TestMethod]\n        public void Deserialize_Succeeds()\n        {\n            var serializedError = JObject.Parse(@\"\n            {\"\"id\"\":\"\"70cf6cc2-5981-4a32-ae6c-249572917a46\"\",\n            \"\"httpStatus\"\": 200,\n            \"\"operationVersion\"\":123,\n            \"\"operationKind\"\":0,\n            \"\"tableName\"\":\"\"test\"\",\n            \"\"tableKind\"\":1,\n            \"\"item\"\":\"\"{\\\"\"id\\\"\":\\\"\"abc\\\"\",\\\"\"text\\\"\":\\\"\"example\\\"\"}\"\",\n            \"\"rawResult\"\":\"\"{\\\"\"id\\\"\":\\\"\"abc\\\"\",\\\"\"text\\\"\":\\\"\"example\\\"\"}\"\"\n            }\");\n            var operation = MobileServiceTableOperationError.Deserialize(serializedError, this.serializer.SerializerSettings);\n\n            Assert.AreEqual(serializedError[\"id\"], operation.Id);\n            Assert.AreEqual(serializedError[\"operationVersion\"], operation.OperationVersion);\n            Assert.AreEqual(serializedError[\"operationKind\"], (int)operation.OperationKind);\n            Assert.AreEqual(serializedError[\"httpStatus\"], (int)operation.Status);\n            Assert.AreEqual(serializedError[\"tableName\"], operation.TableName);\n            Assert.AreEqual(serializedError[\"tableKind\"], (int)operation.TableKind);\n            Assert.AreEqual(serializedError[\"item\"], operation.Item.ToString(Formatting.None));\n            Assert.AreEqual(serializedError[\"rawResult\"], operation.RawResult);\n        }\n\n        [TestMethod]\n        public void Deserialize_Succeeds_WhenOperationVersionIsNull()\n        {\n            var serializedError = JObject.Parse(@\"\n            {\"\"id\"\":\"\"70cf6cc2-5981-4a32-ae6c-249572917a46\"\",\n            \"\"httpStatus\"\": 200,\n            \"\"operationVersion\"\":null,\n            \"\"operationKind\"\":0,\n            \"\"tableName\"\":\"\"test\"\",\n            \"\"tableKind\"\":1,\n            \"\"item\"\":\"\"{\\\"\"id\\\"\":\\\"\"abc\\\"\",\\\"\"text\\\"\":\\\"\"example\\\"\"}\"\",\n            \"\"rawResult\"\":\"\"{\\\"\"id\\\"\":\\\"\"abc\\\"\",\\\"\"text\\\"\":\\\"\"example\\\"\"}\"\"\n            }\");\n            var operation = MobileServiceTableOperationError.Deserialize(serializedError, this.serializer.SerializerSettings);\n\n            Assert.AreEqual(serializedError[\"id\"], operation.Id);\n            Assert.AreEqual(0, operation.OperationVersion);\n            Assert.AreEqual(serializedError[\"operationKind\"], (int)operation.OperationKind);\n            Assert.AreEqual(serializedError[\"httpStatus\"], (int)operation.Status);\n            Assert.AreEqual(serializedError[\"tableName\"], operation.TableName);\n            Assert.AreEqual(serializedError[\"tableKind\"], (int)operation.TableKind);\n            Assert.AreEqual(serializedError[\"item\"], operation.Item.ToString(Formatting.None));\n            Assert.AreEqual(serializedError[\"rawResult\"], operation.RawResult);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Table/Sync/Queue/Operations/MobileServiceTableOperationTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Moq;\nusing Moq.Protected;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Table.Sync.Queue.Operations\n{\n    [TestClass]\n    public class MobileServiceTableOperationTests\n    {\n        private Mock<MobileServiceTableOperation> operation;\n        private Mock<MobileServiceTable> table;\n\n        [TestInitialize]\n        public void Initialize()\n        {\n            this.operation = new Mock<MobileServiceTableOperation>(\"test\", MobileServiceTableKind.Table, \"abc\") { CallBase = true };\n            var client = new Mock<MobileServiceClient>(MockBehavior.Strict);\n            client.Object.Serializer = new MobileServiceSerializer();\n            this.table = new Mock<MobileServiceTable>(\"test\", client.Object);\n            operation.Object.Table = this.table.Object;\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_Throws_WhenItemIsNull()\n        {\n            var ex = await AssertEx.Throws<MobileServiceInvalidOperationException>(() => this.operation.Object.ExecuteAsync());\n            Assert.AreEqual(\"Operation must have an item associated with it.\", ex.Message);\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_Returns_WhenItIsCancelled()\n        {\n            this.operation.Object.Cancel();\n            await this.operation.Object.ExecuteAsync();\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_Throws_WhenResultIsNotJObject()\n        {\n            this.operation.Protected()\n                          .Setup<Task<JToken>>(\"OnExecuteAsync\")\n                          .Returns(Task.FromResult<JToken>(new JArray()));\n\n            this.operation.Object.Item = new JObject();\n\n            var ex = await AssertEx.Throws<MobileServiceInvalidOperationException>(() => this.operation.Object.ExecuteAsync());\n            Assert.AreEqual(\"Mobile Service table operation returned an unexpected response.\", ex.Message);\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_DoesNotThrow_WhenResultIsNull()\n        {\n            this.operation.Protected()\n                          .Setup<Task<JToken>>(\"OnExecuteAsync\")\n                          .Returns(Task.FromResult<JToken>(null));\n\n            this.operation.Object.Item = new JObject();\n\n            JObject result = await this.operation.Object.ExecuteAsync();\n            Assert.IsNull(result);\n        }\n\n        [TestMethod]\n        public void Serialize_Succeeds()\n        {\n            this.operation.Object.Item = JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"text\\\":\\\"example\\\"}\");\n\n            var serializedOperation = this.operation.Object.Serialize();\n\n            Assert.IsNotNull(serializedOperation[\"id\"]);\n            Assert.AreEqual(serializedOperation[\"itemId\"], \"abc\");\n            Assert.AreEqual(serializedOperation[\"tableName\"], \"test\");\n            Assert.AreEqual(serializedOperation[\"kind\"], 0);\n            Assert.AreEqual(serializedOperation[\"item\"], JValue.CreateString(null));\n            Assert.IsNotNull(serializedOperation[\"sequence\"]);\n        }\n\n        [TestMethod]\n        public void Deserialize_Succeeds()\n        {\n            var serializedOperation = JObject.Parse(\"{\\\"id\\\":\\\"70cf6cc2-5981-4a32-ae6c-249572917a46\\\",\\\"kind\\\": 0,\\\"tableName\\\":\\\"test\\\",\\\"itemId\\\":\\\"abc\\\",\\\"item\\\":null,\\\"__createdAt\\\":\\\"2014-03-11T20:37:10.3366689Z\\\",\\\"sequence\\\":0}\");\n\n            var operation = MobileServiceTableOperation.Deserialize(serializedOperation);\n\n            Assert.AreEqual(serializedOperation[\"id\"], operation.Id);\n            Assert.AreEqual(serializedOperation[\"itemId\"], operation.ItemId);\n            Assert.AreEqual(serializedOperation[\"tableName\"], operation.TableName);\n            Assert.AreEqual(MobileServiceTableOperationKind.Insert, operation.Kind);\n            Assert.IsNull(operation.Item);\n            Assert.AreEqual(serializedOperation[\"sequence\"], operation.Sequence);\n        }\n\n        [TestMethod]\n        public void Deserialize_Succeeds_WithItem()\n        {\n            var serializedOperation = JObject.Parse(@\"\n            {\"\"id\"\":\"\"70cf6cc2-5981-4a32-ae6c-249572917a46\"\",\n            \"\"kind\"\": 2,\n            \"\"tableName\"\":\"\"test\"\",\n            \"\"itemId\"\":\"\"abc\"\",\n            \"\"version\"\":123,\n            \"\"sequence\"\":null,\n            \"\"state\"\":null,\n            \"\"item\"\":\"\"{\\\"\"id\\\"\":\\\"\"abc\\\"\",\\\"\"text\\\"\":\\\"\"example\\\"\"}\"\",\n            \"\"__createdAt\"\":\"\"2014-03-11T20:37:10.3366689Z\"\",\n            \"\"sequence\"\":0\n            }\");\n            var operation = MobileServiceTableOperation.Deserialize(serializedOperation);\n\n            Assert.AreEqual(serializedOperation[\"id\"], operation.Id);\n            Assert.AreEqual(serializedOperation[\"itemId\"], operation.ItemId);\n            Assert.AreEqual(serializedOperation[\"version\"], operation.Version);\n            Assert.AreEqual(serializedOperation[\"tableName\"], operation.TableName);\n            Assert.AreEqual(MobileServiceTableOperationKind.Delete, operation.Kind);\n            Assert.AreEqual(serializedOperation[\"sequence\"], operation.Sequence);\n            Assert.AreEqual(\"abc\", operation.Item[\"id\"]);\n            Assert.AreEqual(\"example\", operation.Item[\"text\"]);\n        }\n\n        [TestMethod]\n        public void Deserialize_Succeeds_WhenVersionSequenceOrStateIsNull()\n        {\n            var serializedOperation = JObject.Parse(@\"\n            {\"\"id\"\":\"\"70cf6cc2-5981-4a32-ae6c-249572917a46\"\",\n            \"\"kind\"\": 2,\n            \"\"tableName\"\":\"\"test\"\",\n            \"\"itemId\"\":\"\"abc\"\",\n            \"\"version\"\":null,\n            \"\"sequence\"\":null,\n            \"\"state\"\":null,\n            \"\"item\"\":\"\"{\\\"\"id\\\"\":\\\"\"abc\\\"\",\\\"\"text\\\"\":\\\"\"example\\\"\"}\"\",\n            \"\"__createdAt\"\":\"\"2014-03-11T20:37:10.3366689Z\"\",\n            \"\"sequence\"\":0\n            }\");\n            var operation = MobileServiceTableOperation.Deserialize(serializedOperation);\n\n            Assert.AreEqual(serializedOperation[\"id\"], operation.Id);\n            Assert.AreEqual(serializedOperation[\"itemId\"], operation.ItemId);\n            Assert.AreEqual(serializedOperation[\"tableName\"], operation.TableName);\n            Assert.AreEqual(MobileServiceTableOperationKind.Delete, operation.Kind);\n            Assert.AreEqual(serializedOperation[\"sequence\"], operation.Sequence);\n            Assert.AreEqual(0, operation.Version);\n            Assert.AreEqual(\"abc\", operation.Item[\"id\"]);\n            Assert.AreEqual(\"example\", operation.Item[\"text\"]);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Table/Sync/Queue/Operations/UpdateOperationTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Moq;\nusing Newtonsoft.Json.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Table.Sync.Queue.Operations\n{\n    [TestClass]\n    public class UpdateOperationTests\n    {\n        private UpdateOperation operation;\n\n        [TestInitialize]\n        public void Initialize()\n        {\n            this.operation = new UpdateOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n        }\n\n        [TestMethod]\n        public async Task ExecuteAsync_UpdatesItemOnTable()\n        {\n            var client = new Mock<MobileServiceClient>(MockBehavior.Strict);\n\n            var table = new Mock<MobileServiceTable>(\"test\", client.Object);\n            this.operation.Table = table.Object;\n\n            var item = JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"Text\\\":\\\"Example\\\"}\");\n            this.operation.Item = item;\n\n            table.Setup(t => t.UpdateAsync(item)).Returns(Task.FromResult<JToken>(item));\n\n            await this.operation.ExecuteAsync();\n        }\n\n        [TestMethod]\n        public async Task ExecuteLocalAsync_UpsertsItemOnStore()\n        {\n            var store = new Mock<IMobileServiceLocalStore>();\n            var item = JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"Text\\\":\\\"Example\\\"}\");\n\n            await this.operation.ExecuteLocalAsync(store.Object, item);\n            store.Verify(s => s.UpsertAsync(\"test\", It.Is<JObject[]>(list => list.Contains(item)), false), Times.Once());\n        }\n\n        [TestMethod]\n        public async Task ExecuteLocalAsync_Throws_WhenStoreThrows()\n        {\n            var store = new Mock<IMobileServiceLocalStore>();\n            var storeError = new InvalidOperationException();\n            var item = JObject.Parse(\"{\\\"id\\\":\\\"abc\\\",\\\"Text\\\":\\\"Example\\\"}\");\n\n            store.Setup(s => s.UpsertAsync(\"test\", It.Is<JObject[]>(list => list.Contains(item)), false)).Throws(storeError);\n            var ex = await AssertEx.Throws<InvalidOperationException>(() => this.operation.ExecuteLocalAsync(store.Object, item));\n            Assert.AreSame(storeError, ex);\n        }\n\n        [TestMethod]\n        public void Validate_Throws_WithInsertOperation()\n        {\n            var newOperation = new InsertOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            var ex = AssertEx.Throws<InvalidOperationException>(() => this.operation.Validate(newOperation));\n            Assert.AreEqual(\"An update operation on the item is already in the queue.\", ex.Message);\n        }\n\n        [TestMethod]\n        public void Validate_Succeeds_WithUpdateOperation()\n        {\n            var newOperation = new UpdateOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            this.operation.Validate(newOperation);\n        }\n\n        [TestMethod]\n        public void Validate_Succeeds_WithDeleteOperation()\n        {\n            var newOperation = new DeleteOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            this.operation.Validate(newOperation);\n        }\n\n        [TestMethod]\n        public void Collapse_CancelsNewOperation_WithUpdateOperation()\n        {\n            var newOperation = new UpdateOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            this.operation.Collapse(newOperation);\n\n            // new operation should be cancelled\n            Assert.IsTrue(newOperation.IsCancelled);\n\n            // existing operation should be updated and not cancelled\n            Assert.IsFalse(this.operation.IsCancelled);\n            Assert.IsTrue(this.operation.IsUpdated);\n            Assert.AreEqual(this.operation.Version, 2);\n        }\n\n        [TestMethod]\n        public void Collapse_CancelsExistingOperation_WithDeleteOperation()\n        {\n            var newOperation = new DeleteOperation(\"test\", MobileServiceTableKind.Table, \"abc\");\n            this.operation.Collapse(newOperation);\n\n            // new operation should not be cancelled but rather updated\n            Assert.IsFalse(newOperation.IsCancelled);\n            Assert.IsTrue(newOperation.IsUpdated);\n            Assert.AreEqual(newOperation.Version, 2L);\n\n            // existing operation should be cancelled\n            Assert.IsTrue(this.operation.IsCancelled);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/Threading/AsyncLockDictionaryTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Microsoft.WindowsAzure.MobileServices.Threading;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Unit.Threading\n{\n    [TestClass]\n    public class AsyncLockDictionaryTests\n    {\n        [TestMethod, Timeout(2000)]\n        public async Task Dispose_ReleasesLock()\n        {\n            var dictionary = new AsyncLockDictionary();\n            // first take a lock and wait\n            IDisposable releaser1 = await dictionary.Acquire(\"key\", CancellationToken.None);\n            // then take the second lock before releasing first so that this one blocks\n            Task<IDisposable> releaser2 = dictionary.Acquire(\"key\", CancellationToken.None);\n            Assert.AreEqual(TaskStatus.WaitingForActivation, releaser2.Status);\n            // release first lock\n            releaser1.Dispose();\n            // second lock should now be aquired\n            await releaser2;\n            // finally release the second lock\n            releaser2.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.Test.Unit/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"net45\" />\n  <package id=\"Moq\" version=\"4.2.1408.0717\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/ActionContinuation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// A continuation with actions that will be invoked when the operation\n    /// completes or errors.\n    /// </summary>\n    internal class ActionContinuation : IContinuation\n    {\n        /// <summary>\n        /// Gets the action to take if the continuation is invoked from a\n        /// successful operation.\n        /// </summary>\n        public Action OnSuccess { get; set; }\n\n        /// <summary>\n        /// Gets the action to take if the continuation is invoked from a\n        /// failing operation.\n        /// </summary>\n        public Action<string> OnError { get; set; }\n\n        /// <summary>\n        /// Invoke the continuation from a successful operation.\n        /// </summary>\n        void IContinuation.Success()\n        {\n            this.OnSuccess();\n        }\n\n        /// <summary>\n        /// Invoke the continuation from a failing operation.\n        /// </summary>\n        /// <param name=\"message\">The error message.</param>\n        void IContinuation.Error(string message)\n        {\n            this.OnError(message);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/Assert.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Assertions that will throw InvalidOperationExceptions when their\n    /// conditions have not been met.\n    /// </summary>\n    public static class Assert\n    {\n        /// <summary>\n        /// Ignore any deltas due to quantization below this threshold.\n        /// </summary>\n        private const double QuantizationThreshold = 0.0001;\n\n        /// <summary>\n        /// Force a failure.\n        /// </summary>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void Fail(string message)\n        {\n            throw new InvalidOperationException(message);\n        }\n\n        /// <summary>\n        /// Assert that two values are equal.\n        /// </summary>\n        /// <param name=\"a\">The first value.</param>\n        /// <param name=\"b\">The second value.</param>\n        public static void AreEqual(object a, object b)\n        {\n            AreEqual(a, b, string.Format(\"Expected {0} equal to {1}.\", a, b));\n        }\n\n        /// <summary>\n        /// Assert that two values are equal.\n        /// </summary>\n        /// <param name=\"a\">The first value.</param>\n        /// <param name=\"b\">The second value.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void AreEqual(object a, object b, string message)\n        {\n            bool equal = object.Equals(a, b);\n            if (a is double && b is double)\n            {\n                equal = Math.Abs((double)a - (double)b) < QuantizationThreshold;\n            }\n            else if (a is float && b is float)\n            {\n                equal = Math.Abs((float)a - (float)b) < QuantizationThreshold;\n            }\n\n            if (!equal)\n            {\n                Fail(message ?? string.Format(\"Expected {0} equal to {1}.\", a, b));\n            }\n        }\n\n        /// <summary>\n        /// Assert that two values are the same.\n        /// </summary>\n        /// <param name=\"a\">The first value.</param>\n        /// <param name=\"b\">The second value.</param>\n        public static void AreSame(object a, object b)\n        {\n            AreSame(a, b, string.Format(\"Expected {0} the same as {1}.\", a, b));\n        }\n\n        /// <summary>\n        /// Assert that two values are the same.\n        /// </summary>\n        /// <param name=\"a\">The first value.</param>\n        /// <param name=\"b\">The second value.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void AreSame(object a, object b, string message)\n        {\n            if (!object.ReferenceEquals(a, b))\n            {\n                Fail(message ?? string.Format(\"Expected {0} the same as {1}.\", a, b));\n            }\n        }\n\n        /// <summary>\n        /// Assert that two values are not equal.\n        /// </summary>\n        /// <param name=\"a\">The first value.</param>\n        /// <param name=\"b\">The second value.</param>\n        public static void AreNotEqual(object a, object b)\n        {\n            AreNotEqual(a, b, string.Format(\"Expected {0} not equal to {1}.\", a, b));\n        }\n\n        /// <summary>\n        /// Assert that two values are not equal.\n        /// </summary>\n        /// <param name=\"a\">The first value.</param>\n        /// <param name=\"b\">The second value.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void AreNotEqual(object a, object b, string message)\n        {\n            if (object.Equals(a, b))\n            {\n                Fail(message);\n            }\n        }\n\n        /// <summary>\n        /// Assert that a condition is true.\n        /// </summary>\n        /// <param name=\"condition\">The condition to check.</param>\n        public static void IsTrue(bool condition)\n        {\n            IsTrue(condition, \"Expected condition to be true.\");\n        }\n\n        /// <summary>\n        /// Assert that a condition is true.\n        /// </summary>\n        /// <param name=\"condition\">The condition to check.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void IsTrue(bool condition, string message)\n        {\n            if (!condition)\n            {\n                Fail(message);\n            }\n        }\n\n        /// <summary>\n        /// Assert that a condition is false.\n        /// </summary>\n        /// <param name=\"condition\">The condition to check.</param>\n        public static void IsFalse(bool condition)\n        {\n            IsFalse(condition, \"Expected condition to be false.\");\n        }\n\n        /// <summary>\n        /// Assert that a condition is false.\n        /// </summary>\n        /// <param name=\"condition\">The condition to check.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void IsFalse(bool condition, string message)\n        {\n            if (condition)\n            {\n                Fail(message);\n            }\n        }\n\n        /// <summary>\n        /// Assert that a substring is present in the text.\n        /// </summary>\n        /// <param name=\"text\">The text to search.</param>\n        /// <param name=\"substring\">The substring to find.</param>\n        public static void Contains(string text, string substring)\n        {\n            Contains(\n                text,\n                substring,\n                string.Format(\n                    \"Expected to find substring \\\"{0}\\\" in \\\"{1}\\\".\",\n                    substring,\n                    text));\n        }\n\n        /// <summary>\n        /// Assert that a substring is present in the text.\n        /// </summary>\n        /// <param name=\"text\">The text to search.</param>\n        /// <param name=\"substring\">The substring to find.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void Contains(string text, string substring, string message)\n        {\n            if (text != null && substring != null && !text.Contains(substring))\n            {\n                Fail(message);\n            }\n        }\n\n        /// <summary>\n        /// Assert that a string starts with another.\n        /// </summary>\n        /// <param name=\"text\">The text to search.</param>\n        /// <param name=\"substring\">The substring to find.</param>\n        public static void StartsWith(string text, string substring)\n        {\n            StartsWith(\n                text,\n                substring,\n                string.Format(\n                    \"Expected string \\\"{1}\\\" to start with \\\"{0}\\\".\",\n                    substring,\n                    text));\n        }\n\n        /// <summary>\n        /// Assert that a string starts with another.\n        /// </summary>\n        /// <param name=\"text\">The text to search.</param>\n        /// <param name=\"substring\">The substring to find.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void StartsWith(string text, string substring, string message)\n        {\n            if (text != null && substring != null && !text.StartsWith(substring))\n            {\n                Fail(message);\n            }\n        }\n\n        /// <summary>\n        /// Assert that a string ends with another.\n        /// </summary>\n        /// <param name=\"text\">The text to search.</param>\n        /// <param name=\"substring\">The substring to find.</param>\n        public static void EndsWith(string text, string substring)\n        {\n            EndsWith(\n                text,\n                substring,\n                string.Format(\n                    \"Expected string \\\"{1}\\\" to start with \\\"{0}\\\".\",\n                    substring,\n                    text));\n        }\n\n        /// <summary>\n        /// Assert that a string ends with another.\n        /// </summary>\n        /// <param name=\"text\">The text to search.</param>\n        /// <param name=\"substring\">The substring to find.</param>\n        /// <param name=\"message\">Details about the assertion.</param>\n        public static void EndsWith(string text, string substring, string message)\n        {\n            if (text != null && substring != null && !text.EndsWith(substring))\n            {\n                Fail(message);\n            }\n        }\n\n        public static void IsNull(object value)\n        {\n            IsNull(value, string.Format(\"Expected null, not {0}\", value));\n        }\n\n        public static void IsNull(object value, string message)\n        {\n            if (value != null)\n            {\n                Fail(message);\n            }\n        }\n\n        public static void IsNotNull(object value)\n        {\n            IsNotNull(value, \"Expected a value, not null.\");\n        }\n\n        public static void IsNotNull(object value, string message)\n        {\n            if (value == null)\n            {\n                Fail(message);\n            }\n        }\n\n        public static void AreEquivalent(IEnumerable a, IEnumerable b)\n        {\n            AreEquivalent(a, b, \"Sequences do not contain the same values\");\n        }\n\n        public static void AreEquivalent(IEnumerable a, IEnumerable b, string message)\n        {\n            IEnumerable<object> first = a.OfType<object>();\n            IEnumerable<object> second = b.OfType<object>();\n            IEnumerable<object> intersection = first.Intersect(second);\n            Assert.AreEqual(first.Count(), intersection.Count(), message);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/AsyncTestMethodAsyncAction.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Reflection;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Execute an async test.\n    /// </summary>\n    internal class AsyncTestMethodAsyncAction : IAsyncExecution\n    {\n        public object Instance { get; private set; }\n        public MethodInfo Method { get; private set; }\n\n        public AsyncTestMethodAsyncAction(object instance, MethodInfo method)\n        {\n            Instance = instance;\n            Method = method;\n        }\n\n        public void Start(IContinuation continuation)\n        {\n            Execute(continuation);\n        }\n\n        private async void Execute(IContinuation continuation)\n        {\n            try\n            {\n                Task result = Method.Invoke(Instance, new object[0]) as Task;\n                if (result != null)\n                {\n                    await result;\n                    continuation.Success();\n                }                \n            }\n            catch (TargetInvocationException ex)\n            {\n                continuation.Error(ex.InnerException.ToString());\n            }\n            catch (Exception ex)\n            {\n                continuation.Error(ex.ToString());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/AsyncTestMethodAttribute.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Declare an async test.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]\n    public class AsyncTestMethodAttribute : Attribute\n    {\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/ExcludeTestAttribute.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Mark a test as excluded.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]\n    public class ExcludeTestAttribute : Attribute\n    {\n        public string Reason { get; private set; }\n\n        public ExcludeTestAttribute(string reason)\n        {\n            Reason = reason;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/FunctionalTestAttribute.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Mark a test as functional (and requiring a runtime server).\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)]\n    public class FunctionalTestAttribute : Attribute\n    {\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/FunctionalTestFilter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// An individual test method to be executed.\n    /// </summary>\n    internal class FunctionalTestFilter : TestFilter\n    {\n        /// <summary>\n        /// The custom key for the runtime url.\n        /// </summary>\n        private const string RuntimeUrlKey = \"MobileServiceRuntimeUrl\";\n\n        /// <summary>\n        /// The tag used to mark functional tests.\n        /// </summary>\n        private const string FunctionalTag = \"Functional\";\n\n        /// <summary>\n        /// The reason used to exclude functional tests.\n        /// </summary>\n        private const string ExcludedReason = \"No Mobile Service Runtime server provided for functional tests.\";\n\n        /// <summary>\n        /// Initializes a new instance of the FunctionalTestFilter class.\n        /// </summary>\n        /// <param name=\"settings\">The test settings.</param>\n        public FunctionalTestFilter(TestSettings settings)\n            : base(settings)\n        {\n        }\n\n        /// <summary>\n        /// Filter the tests according to whether functional tests are enabled.\n        /// </summary>\n        /// <param name=\"groups\">The groups to test.</param>\n        public override void Filter(IList<TestGroup> groups)\n        {\n            string runtimeUrl = null;\n            bool enableFunctionalTests = this.Settings.Custom.TryGetValue(RuntimeUrlKey, out runtimeUrl);\n            enableFunctionalTests &= !string.IsNullOrEmpty(runtimeUrl);\n\n            if (enableFunctionalTests)\n            {\n                this.Settings.TestRunStatusMessage += \" - Functional Test Server \" + runtimeUrl;\n            }\n            else\n            {\n                this.Settings.TestRunStatusMessage += \" - Excluding Functional Tests\";\n                Remove(groups, g => g.Tags.Contains(FunctionalTag));\n                foreach (TestGroup group in groups)\n                {\n                    Remove(group.Methods, m => m.Tags.Contains(FunctionalTag));\n                }\n                Remove(groups, g => g.Methods.Count == 0);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/IAsyncExecution.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Represents an async operation that can be given a continuation to \n    /// invoke when the async operation has completed (either successfully or\n    /// with an error).\n    /// </summary>\n    public interface IAsyncExecution\n    {\n        /// <summary>\n        /// Start the async operation.\n        /// </summary>\n        /// <param name=\"continuation\">\n        /// Continuation that should be invoked when the async operation has\n        /// completed.\n        /// </param>\n        void Start(IContinuation continuation);\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/IContinuation.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Represents an action that can be continued.\n    /// </summary>\n    public interface IContinuation\n    {\n        /// <summary>\n        /// The operation invoking the continuation completed successfully so\n        /// the continuation can resume normally.\n        /// </summary>\n        void Success();\n\n        /// <summary>\n        /// The operating invoking the continuation failed, so the continuation\n        /// should handle the error.\n        /// </summary>\n        /// <param name=\"message\">The error message.</param>\n        void Error(string message);\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/ITestReporter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Defines the interface used to report test results.\n    /// </summary>\n    public interface ITestReporter\n    {\n        /// <summary>\n        /// The test run started.\n        /// </summary>\n        /// <param name=\"harness\">The test harness.</param>\n        void StartRun(TestHarness harness);\n        \n        /// <summary>\n        /// Update the test run progress.\n        /// </summary>\n        /// <param name=\"harness\">\n        /// The test harness (which contains Progress, Error, and Count\n        /// properties).\n        /// </param>\n        void Progress(TestHarness harness);\n\n        /// <summary>\n        /// The test run finished.\n        /// </summary>\n        /// <param name=\"harness\">\n        /// The test harness (which contains Error and Count properties).\n        /// </param>\n        void EndRun(TestHarness harness);\n        \n        /// <summary>\n        /// The test group started is about to start executing its tests.\n        /// </summary>\n        /// <param name=\"group\">The test group.</param>\n        void StartGroup(TestGroup group);\n\n        /// <summary>\n        /// The test group has finished executing its tests.\n        /// </summary>\n        /// <param name=\"group\">The test group.</param>\n        void EndGroup(TestGroup group);\n\n        /// <summary>\n        /// The test method is about to be executed.\n        /// </summary>\n        /// <param name=\"test\">The test method.</param>\n        void StartTest(TestMethod test);\n\n        /// <summary>\n        /// The test method has finished executing.\n        /// </summary>\n        /// <param name=\"test\">The test method.</param>\n        void EndTest(TestMethod test);\n\n        /// <summary>\n        /// A message has been logged.\n        /// </summary>\n        /// <param name=\"message\">The message.</param>\n        void Log(string message);\n\n        /// <summary>\n        /// An error has been raised.\n        /// </summary>\n        /// <param name=\"errorDetails\">Information about the error.</param>\n        void Error(string errorDetails);\n\n        /// <summary>\n        /// Update the test run status.\n        /// </summary>\n        /// <param name=\"status\">The status message.</param>\n        void Status(string status);\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TagAttribute.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Tag a test method.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true)]\n    public class TagAttribute : Attribute\n    {\n        public string Tag { get; private set; }\n\n        public TagAttribute(string tag)\n        {\n            Tag = tag;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TagManager.ExpressionEvaluator.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Xml.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// A helper class that manages tags and associated metadata. Tag\n    /// expressions are evaluated at the TestGroup level.\n    /// </summary>\n    internal sealed partial class TagManager\n    {\n        /// <summary>\n        /// Evaluate tag expressions.\n        /// </summary>\n        /// <remarks>\n        /// Tag expressions are derived from the following EBNF grammar:\n        ///     {Expression} :=\n        ///         {Expression} + {Term} |\n        ///         {Expression} - {Term} |\n        ///         {Term}\n        ///     {Term} :=\n        ///         {Term} * {Factor} |\n        ///         {Factor}\n        ///     {Factor} :=\n        ///         !{Factor} |\n        ///         ({Expression}) |\n        ///         {Tag}\n        ///     {Tag} :=\n        ///         All |\n        ///         [^InvalidCharacters]+\n        ///  \n        /// The non-terminals for {Expression} and {Term} will be left factored\n        /// in the recursive descent parser below.\n        /// </remarks>\n        private class ExpressionEvaluator\n        {\n            /// <summary>\n            /// Union character.\n            /// </summary>\n            private const string Union = \"+\";\n\n            /// <summary>\n            /// Intersection character.\n            /// </summary>\n            private const string Intersection = \"*\";\n\n            /// <summary>\n            /// Complement character.\n            /// </summary>\n            private const string Complement = \"!\";\n\n            /// <summary>\n            /// Difference character.\n            /// </summary>\n            private const string Difference = \"-\";\n\n            /// <summary>\n            /// The \"All\" string constant.\n            /// </summary>\n            private const string All = \"all\";\n\n            /// <summary>\n            /// Invalid characters in a tag name.\n            /// </summary>\n            private static char[] InvalidCharacters = new char[] \n            { \n                Union[0],\n                Intersection[0], \n                Complement[0], \n                Difference[0], \n                '(', \n                ')', \n                '/' \n            };\n\n            /// <summary>\n            /// Evaluate a tag expression.\n            /// </summary>\n            /// <param name=\"owner\">The owner object.</param>\n            /// <param name=\"tagExpression\">Tag expression.</param>\n            /// <returns>Test methods associated with the tag expression.</returns>\n            public static IEnumerable<TestMethod> Evaluate(TagManager owner, string tagExpression)\n            {\n                return new ExpressionEvaluator(owner, tagExpression).Evaluate();\n            }\n\n            /// <summary>\n            /// The owning TagManager instance.\n            /// </summary>\n            private TagManager _owner;\n\n            /// <summary>\n            /// Expression being evaluated.\n            /// </summary>\n            private string _tagExpression;\n\n            /// <summary>\n            /// Current position in the expression.\n            /// </summary>\n            private int _position;\n\n            /// <summary>\n            /// Create an expression evaluator.\n            /// </summary>\n            /// <param name=\"owner\">The owner object.</param>\n            /// <param name=\"tagExpression\">Expression object.</param>\n            private ExpressionEvaluator(TagManager owner, string tagExpression)\n            {\n                if (tagExpression == null)\n                {\n                    throw new ArgumentNullException(\"tagExpression\");\n                }\n                else if (tagExpression.Length == 0)\n                {\n                    throw new ArgumentOutOfRangeException(\"tagExpression\");\n                }\n                _owner = owner;\n                _tagExpression = tagExpression;\n            }\n\n            /// <summary>\n            /// Match a sequence of characters.\n            /// </summary>\n            /// <param name=\"expected\">String to match.</param>\n            private void Match(string expected)\n            {\n                if (!TryMatch(expected))\n                {\n                    throw new FormatException(\n                        string.Format(\n                            CultureInfo.CurrentCulture,\n                            \"Expected {1} at position {2} in expression {0}.\",\n                            _tagExpression,\n                            expected,\n                            _position));\n                }\n            }\n\n            /// <summary>\n            /// Try to match a sequence of characters.\n            /// </summary>\n            /// <param name=\"expected\">String to match.</param>\n            /// <returns>Returns a value indicating whether the match was \n            /// successful.</returns>\n            private bool TryMatch(string expected)\n            {\n                if (_position + expected.Length > _tagExpression.Length)\n                {\n                    return false;\n                }\n\n                for (int i = 0; i < expected.Length; i++)\n                {\n                    if (_tagExpression[i + _position] != expected[i])\n                    {\n                        return false;\n                    }\n                }\n\n                _position += expected.Length;\n                return true;\n            }\n\n            /// <summary>\n            /// Evaluate an expression.\n            /// </summary>\n            /// <returns>Test methods described by the expression.</returns>\n            private IEnumerable<TestMethod> Evaluate()\n            {\n                IEnumerable<TestMethod> expression = ReadExpression();\n                if (_position >= 0 && _position < _tagExpression.Length)\n                {\n                    throw new FormatException(\n                        string.Format(\n                            CultureInfo.InvariantCulture,\n                            \"Expected end of tag at position {1} in expression {0}\",\n                            _tagExpression,\n                            _position));\n                }\n                return expression;\n            }\n\n            /// <summary>\n            /// Evaluate an expression.\n            /// </summary>\n            /// <returns>Test methods described by the expression.</returns>\n            /// <remarks>\n            /// We need to factor out left recursion, so:\n            ///     {Expression} :=\n            ///         {Expression} + {Term} |\n            ///         {Expression} - {Term} |\n            ///         {Term}\n            /// becomes:\n            ///     {Expression} :=\n            ///     \t{Term}{Expression'}\n            ///     \n            ///     {Expression'} :=\n            ///     \t#empty#\n            ///     \t+ {Term}{Expression'}\n            ///     \t- {Term}{Expression'}\n            /// </remarks>\n            private IEnumerable<TestMethod> ReadExpression()\n            {\n                return ReadExpression(ReadTerm());\n            }\n\n            /// <summary>\n            /// Evaluate an expression.\n            /// </summary>\n            /// <param name=\"term\">\n            /// Left term already read as part of the expression.\n            /// </param>\n            /// <returns>Test methods described by the expression.</returns>\n            /// <remarks>\n            /// Non-terminal created for left-factoring:\n            ///     {Expression'} :=\n            ///     \t#empty#\n            ///     \t+ {Term}{Expression'}\n            ///     \t- {Term}{Expression'}\n            /// </remarks>\n            private IEnumerable<TestMethod> ReadExpression(IEnumerable<TestMethod> term)\n            {\n                if (TryMatch(Union))\n                {\n                    return ReadExpression(term.Union(ReadTerm()));\n                }\n                else if (TryMatch(Difference))\n                {\n                    return ReadExpression(term.Except(ReadTerm()));\n                }\n                else\n                {\n                    return term;\n                }\n            }\n\n            /// <summary>\n            /// Evaluate a term.\n            /// </summary>\n            /// <returns>Test methods described by the expression.</returns>\n            /// <remarks>\n            /// We need to factor out left recursion, so:\n            ///     {Term} :=\n            ///         {Factor} * {Term} |\n            ///         {Factor}\n            /// becomes:\n            ///     {Term} :=\n            ///         {Factor}{Term'}\n            /// \n            ///     {Term'} :=\n            ///     \t#empty#\n            ///     \t^ {Factor}{Term'}\n            /// </remarks>\n            private IEnumerable<TestMethod> ReadTerm()\n            {\n                return ReadTerm(ReadFactor());\n            }\n\n            /// <summary>\n            /// Evaluate a term.\n            /// </summary>\n            /// <param name=\"factor\">\n            /// Left term already read as part of the expression.\n            /// </param>\n            /// <returns>Test methods described by the expression.</returns>\n            /// <remarks>\n            /// Non-terminal created for left-factoring:\n            ///     {Term'} :=\n            ///     \t#empty#\n            ///     \t^ {Factor}{Term'}\n            /// </remarks>\n            private IEnumerable<TestMethod> ReadTerm(IEnumerable<TestMethod> factor)\n            {\n                if (TryMatch(Intersection))\n                {\n                    return ReadTerm(factor.Intersect(ReadFactor()));\n                }\n                else\n                {\n                    return factor;\n                }\n            }\n\n            /// <summary>\n            /// Evaluate a factor.\n            /// </summary>\n            /// <returns>Test methods described by the expression.</returns>\n            /// <remarks>\n            /// {Factor} :=\n            ///     !{Factor} |\n            ///     ({Expression}) |\n            ///     {Tag}\n            /// </remarks>\n            private IEnumerable<TestMethod> ReadFactor()\n            {\n                if (TryMatch(Complement))\n                {\n                    IEnumerable<TestMethod> allMethods = _owner.Universe;\n                    return allMethods.Except(ReadFactor());\n                }\n                else if (TryMatch(\"(\"))\n                {\n                    IEnumerable<TestMethod> expression = ReadExpression();\n                    Match(\")\");\n                    return expression;\n                }\n                else\n                {\n                    return ReadTag();\n                }\n            }\n\n            /// <summary>\n            /// Creates a new empty collection.\n            /// </summary>\n            /// <returns>Returns an empty collection.</returns>\n            private static List<TestMethod> CreateEmptyList()\n            {\n                return new List<TestMethod>();\n            }\n\n            /// <summary>\n            /// Evaluate a tag.\n            /// </summary>\n            /// <returns>Test methods described by the expression.</returns>\n            /// <remarks>\n            /// {Tag} :=\n            ///     All |\n            ///     [^InvalidCharacters]+\n            /// </remarks>\n            private IEnumerable<TestMethod> ReadTag()\n            {\n                int end = _tagExpression.IndexOfAny(InvalidCharacters, _position);\n                if (end < 0)\n                {\n                    end = _tagExpression.Length;\n                }\n                string tag = _tagExpression.Substring(_position, end - _position).Trim();\n                if (string.IsNullOrEmpty(tag))\n                {\n                    throw new FormatException(\n                        string.Format(\n                            CultureInfo.CurrentCulture,\n                            \"Expected a tag at position {1} in expression {0}\",\n                            _tagExpression,\n                            _position));\n                }\n                _position = end;\n                if (string.Compare(tag, All, StringComparison.OrdinalIgnoreCase) == 0)\n                {\n                    return new List<TestMethod>(_owner.Universe);\n                }\n                else\n                {\n                    List<TestMethod> methods;\n                    if (!_owner._tagsToMethods.TryGetValue(tag, out methods))\n                    {\n                        methods = CreateEmptyList();\n                    }\n                    return methods;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TagManager.Tags.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// A helper class that manages tags and associated metadata. Tag\n    /// expressions are evaluated at the TestGroup level.\n    /// </summary>\n    internal sealed partial class TagManager\n    {\n        /// <summary>\n        /// A string list for storing tags. Provides an Add method that takes \n        /// an attribute object and, if a TagAttribute, will append its tag \n        /// value to the list.\n        /// </summary>\n        private class Tags : List<string>\n        {\n            /// <summary>\n            /// Initializes a new Tags instance.\n            /// </summary>\n            public Tags() :\n                base()\n            {\n            }\n\n            /// <summary>\n            /// Initializes a new Tags instance from an existing collection.\n            /// </summary>\n            /// <param name=\"collection\">The collection to copy.</param>\n            public Tags(IEnumerable<string> collection) :\n                base(collection)\n            {\n            }\n\n            /// <summary>\n            /// Adds a TagAttribute's tag value.\n            /// </summary>\n            /// <param name=\"tag\">The tag object.</param>\n            public void AddTag(string tag)\n            {\n                if (!string.IsNullOrEmpty(tag) && !Contains(tag))\n                {\n                    Add(tag);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TagManager.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// A helper class that manages tags and associated metadata. Tag\n    /// expressions are evaluated at the TestGroup level.\n    /// </summary>\n    internal sealed partial class TagManager\n    {\n        // This class is not meant to have a long lifetime as there are \n        // situations in a test run where TestMethod and TestGroup \n        // references in fact are renewed.\n        // \n        // Three primary sets of relationships are stored:\n        // _groupTags: List of tags for the Type associated with this instance\n        // _methodTags: Relates TestMethod instances to a list of tags\n        // _tagsToMethods: Relates a tag to a set of method metadata\n\n        /// <summary>\n        /// The test group being filtered.\n        /// </summary>\n        private TestGroup _group;\n\n        /// <summary>\n        /// The test tags associated with the class.\n        /// </summary>\n        private Tags _groupTags;\n\n        /// <summary>\n        /// The test tags associated with methods.\n        /// </summary>\n        private Dictionary<TestMethod, Tags> _methodTags;\n\n        /// <summary>\n        /// The ability to grab the set of methods, given a test class type, \n        /// and the tag of interest.\n        /// </summary>\n        private Dictionary<string, List<TestMethod>> _tagsToMethods;\n\n        /// <summary>\n        /// Gets or sets the universe of all test methods for expression \n        /// evaluation.\n        /// </summary>\n        private List<TestMethod> Universe { get; set; }\n\n        /// <summary>\n        /// Initializes a new instance of the TagManager class.\n        /// </summary>\n        /// <param name=\"group\">The test group eing filter.</param>\n        /// <param name=\"methods\">The set of methods to run.</param>\n        public TagManager(TestGroup group)\n        {\n            _group = group;\n            _groupTags = new Tags();\n            _methodTags = new Dictionary<TestMethod, Tags>();\n            _tagsToMethods = new Dictionary<string, List<TestMethod>>();\n            Universe = new List<TestMethod>(group.Methods);\n\n            CreateClassTags(_group);\n            foreach (TestMethod method in group.Methods)\n            {\n                CreateMethodTags(method);\n            }\n        }\n\n        /// <summary>\n        /// Reflect, read and prepare the tags for the group metadata. Performs \n        /// the work if this is the first time the metadata has been seen.\n        /// </summary>\n        /// <param name=\"group\">The test group.</param>\n        private void CreateClassTags(TestGroup group)\n        {\n            // 1. Full class name\n            //_groupTags.AddTag(group.FullName);\n\n            // 2. Class name\n            _groupTags.AddTag(group.Name);\n\n            // 3. All [Tag] attributes on the type\n            foreach (string tag in group.Tags)\n            {\n                _groupTags.AddTag(tag);\n            }\n        }\n\n        /// <summary>\n        /// Reflect, read and prepare the tags for the method metadata.\n        /// Performs the work if this is the first time the metadata has been\n        /// seen.\n        /// </summary>\n        /// <param name=\"method\">The method metadata.</param>\n        private void CreateMethodTags(TestMethod method)\n        {\n            // 1. All the tags from the group\n            Tags tags = new Tags(_groupTags);\n\n            // 2. Method.Name\n            tags.AddTag(method.Name);\n\n            // 3. Type.FullName + Method.Name\n            //tags.AddTag(m.ReflectedType.FullName + \".\" + method.Name);\n\n            // 4. Type.Name + Method.Name\n            //tags.AddTag(method.ReflectedType.Name + \".\" + method.Name);\n            \n            // 5. Implicit Inherited tag\n            //if (method.ReflectedType != method.DeclaringType)\n            //{\n            //    tags.AddTag(\"Inherited\");\n            //}\n\n            // 6. All [Tag] attributes on the method\n            foreach (string tag in method.Tags)\n            {\n                tags.AddTag(tag);\n            }\n\n            // 7. Add priority as a tag\n            //if (method.Priority != null)\n            //{\n            //    tags.AddTag(PriorityTagPrefix + method.Priority.ToString());\n            //}\n\n            _methodTags.Add(method, tags);\n\n            // Populate the inverted index\n            foreach (string tag in tags)\n            {\n                List<TestMethod> methods;\n                if (!_tagsToMethods.TryGetValue(tag, out methods))\n                {\n                    methods = new List<TestMethod>();\n                    _tagsToMethods[tag] = methods;\n                }\n                methods.Add(method);\n            }\n        }\n\n        /// <summary>\n        /// Get the test methods that correspond to a tag expression.\n        /// </summary>\n        /// <param name=\"tagExpression\">Tag expression.</param>\n        /// <returns>Test methods for the tag expression.</returns>\n        public IEnumerable<TestMethod> EvaluateExpression(string tagExpression)\n        {\n            if (tagExpression == null)\n            {\n                throw new ArgumentNullException(\"tagExpression\");\n            }\n            else if (tagExpression.Length == 0)\n            {\n                throw new ArgumentOutOfRangeException(\"tagExpression\");\n            }\n            return ExpressionEvaluator.Evaluate(this, tagExpression);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TagTestFilter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// A method and group filter that uses expressions and declared tags.\n    /// </summary>\n    internal class TagTestFilter : TestFilter\n    {\n        /// <summary>\n        /// The reason used to exclude untagged tests.\n        /// </summary>\n        private const string ExcludedReason = \"Tag expression does not match this test.\";\n\n        /// <summary>\n        /// Initializes a instance of the TagTestFilter class.\n        /// </summary>\n        /// <param name=\"settings\">Unit test settings.</para\n        public TagTestFilter(TestSettings settings)\n            : base(settings)\n        {\n        }\n\n        /// <summary>\n        /// Filter the list of active test methods to those matching the tag\n        /// expression.\n        /// </summary>\n        /// <param name=\"groups\">The test groups.</param>\n        public override void Filter(IList<TestGroup> groups)\n        {\n            string tagExpression = this.Settings.TagExpression;\n            if (!string.IsNullOrEmpty(tagExpression))\n            {\n                this.Settings.TestRunStatusMessage += \" - Tag Expression '\" + tagExpression + \"'\";\n                foreach (TestGroup group in groups)\n                {\n                    List<TestMethod> activeMethods =\n                        new TagManager(group).EvaluateExpression(tagExpression).ToList();\n                    Remove(group.Methods, m => !activeMethods.Contains(m));                    \n                }\n                Remove(groups, g => g.Methods.Count == 0);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TestBase.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Base class for test classes.\n    /// </summary>\n    public class TestBase\n    {\n        private TestHarness TestHarness { get; set; }\n\n        internal void SetTestHarness(TestHarness testHarness)\n        {\n            this.TestHarness = testHarness;\n        }\n\n        public void Log(string message, params object[] args)\n        {\n            if (args != null && args.Length > 0)\n            {\n                message = string.Format(message, args);\n            }\n\n            TestHarness.Log(message);\n        }\n\n        public string GetTestSetting(string name)\n        {\n            string value = null;\n            if (this.TestHarness.Settings.Custom.TryGetValue(name, out value))\n            {\n                return value;\n            }\n\n            return null;\n        }\n\n        public T Throws<T>(Action action)\n            where T : Exception\n        {\n            try\n            {\n                action();\n                Assert.Fail(string.Format(\"{0} not thrown.\", typeof(T).Name));\n            }\n            catch (T ex)\n            {\n                TestHarness.Log(\n                         string.Format(\n                             \"Caught expected error {0}: {1}\",\n                             ex.GetType().Name,\n                             ex.Message.Replace(\"\\n\", \"   \").Replace(\"\\r\", \"   \")));\n                return ex;\n            }\n            catch (Exception ex)\n            {\n                Assert.Fail(string.Format(\n                    \"Unexpected exception {0} thrown instead of {1}.\",\n                    ex.GetType().Name,\n                    typeof(T).Name));\n            }\n\n            return null;\n        }\n\n        public async Task<T> ThrowsAsync<T>(Func<Task> action)\n            where T : Exception\n        {\n            try\n            {\n                await action();\n                Assert.Fail(string.Format(\"{0} not thrown.\", typeof(T).Name));\n            }\n            catch (T ex)\n            {\n                TestHarness.Log(\n                    string.Format(\n                        \"Caught expected error {0}: {1}\",\n                        ex.GetType().Name,\n                        ex.Message.Replace(\"\\n\", \"   \").Replace(\"\\r\", \"   \")));\n                return ex;\n            }\n            catch (Exception ex)\n            {\n                Assert.Fail(string.Format(\n                    \"Unexpected exception {0} thrown instead of {1}.\",\n                    ex.GetType().Name,\n                    typeof(T).Name));\n            }\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TestFilter.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// A filter that can be used to exclude a set of tests.\n    /// </summary>\n    internal abstract class TestFilter\n    {\n        /// <summary>\n        /// Initializes a new instance of the TestFilter class.\n        /// </summary>\n        /// <param name=\"settings\">The test settings.</param>\n        public TestFilter(TestSettings settings)\n        {\n            Debug.Assert(settings != null, \"settings should not be null!\");\n            this.Settings = settings;\n        }\n        \n        /// <summary>\n        /// Gets the TestSettings to be used by the filter.\n        /// </summary>\n        public TestSettings Settings { get; private set; }\n\n        /// <summary>\n        /// Filter the test groups.\n        /// </summary>\n        /// <param name=\"groups\">The groups to test.</param>\n        public virtual void Filter(IList<TestGroup> groups)\n        {\n        }\n\n        /// <summary>\n        /// Remove the elements matching a given predicate.\n        /// </summary>\n        /// <typeparam name=\"T\">Type of the element.</typeparam>\n        /// <param name=\"elements\">The elements to remove.</param>\n        /// <param name=\"predicate\">The predicate to compare.</param>\n        protected static void Remove<T>(IList<T> elements, Func<T, bool> predicate)\n        {\n            Debug.Assert(elements != null, \"elements cannot be null!\");\n            Debug.Assert(predicate != null, \"predicate cannot be null!\");\n\n            foreach (T element in elements.Where(predicate).ToList())\n            {\n                elements.Remove(element);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TestGroup.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// A group of tests for a related functional area.\n    /// </summary>\n    public sealed class TestGroup\n    {\n        /// <summary>\n        /// Initializes a new instance of the TestGroup class.\n        /// </summary>\n        public TestGroup()\n        {\n            this.Name = string.Empty;\n            this.Methods = new List<TestMethod>();\n            this.Tags = new List<string>();\n        }\n\n        /// <summary>\n        /// Gets or sets the name of the test group.\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Gets the list of tags associated with this test group.\n        /// </summary>\n        public IList<string> Tags { get; private set; }\n\n        /// <summary>\n        /// Gets the list of methods available in the test group.\n        /// </summary>\n        public IList<TestMethod> Methods { get; private set; }\n\n        /// <summary>\n        /// Exclude all of the methods in a test group.\n        /// </summary>\n        /// <param name=\"reason\">The reason to exclude the group.</param>\n        public void Exclude(string reason)\n        {\n            foreach (TestMethod method in this.Methods)\n            {\n                // Only exclude if it isn't already to prevent stomping on the\n                // exclude reason\n                if (!method.Excluded)\n                {\n                    method.Exclude(reason);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TestHarness.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Xml.Linq;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Harness for a test framework that allows asynchronous unit testing.\n    /// </summary>\n    public sealed class TestHarness\n    {\n        /// <summary>\n        /// Initializes a new instance of the TestHarness class.\n        /// </summary>\n        public TestHarness()\n        {\n            this.Groups = new List<TestGroup>();\n            this.Settings = new TestSettings();\n        }\n\n        /// <summary>\n        /// Gets the list of test groups which contain TestMethods to execute.\n        /// </summary>\n        public IList<TestGroup> Groups { get; private set; }\n\n        /// <summary>\n        /// Gets the test settings used for this run.\n        /// </summary>\n        public TestSettings Settings { get; private set; }\n\n        /// <summary>\n        /// Gets or sets the TestReporter used to update the test interface as\n        /// the test run progresses.\n        /// </summary>\n        public ITestReporter Reporter { get; set; }\n\n        /// <summary>\n        /// Gets the total number of test methods.\n        /// </summary>\n        /// <remarks>\n        /// This is a simple helper to provide access to the total number of\n        /// test methods which the Reporter can display.\n        /// </remarks>\n        public int Count\n        {\n            get { return this.Groups.SelectMany(g => g.Methods).Count(); }\n        }\n\n        /// <summary>\n        /// Gets the number of test failures.\n        /// </summary>\n        public int Failures { get; set; }\n\n        /// <summary>\n        /// Get the number of tests already executed.\n        /// </summary>\n        public int Progress { get; private set; }\n\n        /// <summary>\n        /// Logs a message.\n        /// </summary>\n        /// <param name=\"message\">The message.</param>\n        public void Log(string message)\n        {\n            this.Reporter.Log(message);\n        }\n\n        /// <summary>\n        /// Load the tests from the given assembly.\n        /// </summary>\n        /// <param name=\"testAssembly\">The assembly from which to load tests.</param>\n        public void LoadTestAssembly(Assembly testAssembly)\n        {\n            LoadTestAssembly(this, testAssembly);\n        }\n\n        /// <summary>\n        /// Filter out any test methods basd on the current settings.\n        /// </summary>\n        private void FilterTests()\n        {\n            // Create the list of filters (at some point we could make this\n            // publicly accessible)\n            List<TestFilter> filters = new List<TestFilter>();\n            filters.Add(new FunctionalTestFilter(this.Settings));\n            filters.Add(new TagTestFilter(this.Settings));\n\n            // Apply any test filters to the set of tests before we begin\n            // executing (test filters will change the Excluded property of\n            // individual test methods)\n            int originalCount = Count;\n            foreach (TestFilter filter in filters)\n            {\n                filter.Filter(this.Groups);\n            }\n            int filteredCount = Count;\n            if (filteredCount != originalCount)\n            {\n                this.Settings.TestRunStatusMessage += \" - Only running \" + filteredCount + \"/\" + originalCount + \" tests\";\n            }\n        }\n\n        /// <summary>\n        /// Run the unit tests.\n        /// </summary>\n        public void RunAsync()\n        {\n            // Ensure there's an interface to display the test results.\n            if (this.Reporter == null)\n            {\n                throw new ArgumentNullException(\"Reporter\");\n            }\n\n            // Setup the progress/failure counters\n            this.Progress = 0;\n            this.Failures = 0;\n\n            // Filter out any test methods based on the current settings\n            FilterTests();\n\n            // Write out the test status message which may be modified by the\n            // filters\n            Reporter.Status(this.Settings.TestRunStatusMessage);\n\n            // Enumerators that track the current group and method to execute\n            // (which allows reentrancy into the test loop below to resume at\n            // the correct location).\n            IEnumerator<TestGroup> groups = this.Groups.OrderBy(g => g.Name).GetEnumerator();\n            IEnumerator<TestMethod> methods = null;\n\n            // Keep a reference to the current group so we can pass it to the\n            // Reporter's EndGroup (we don't need one for the test method,\n            // however, because we close over in the continuation).\n            TestGroup currentGroup = null;\n\n            // Setup the UI\n            this.Reporter.StartRun(this);\n\n            // The primary test loop is a \"recursive\" closure that will pass\n            // itself as the continuation to async tests.\n            // \n            // Note: It's really important for performance to note that any\n            // calls to testLoop only occur in the tail position.\n            Action testLoop = null;\n            testLoop =\n                () =>\n                {\n                    if (methods != null && methods.MoveNext())\n                    {\n                        // If we were in the middle of a test group and there\n                        // are more methods to execute, let's move to the next\n                        // test method.\n\n                        // Update the progress\n                        this.Progress++;\n                        Reporter.Progress(this);\n\n                        // Start the test method\n                        Reporter.StartTest(methods.Current);\n                        if (methods.Current.Excluded)\n                        {\n                            // Ignore excluded tests and immediately recurse.\n                            Reporter.EndTest(methods.Current);\n                            testLoop();\n                        }\n                        else\n                        {\n                            // Execute the test method\n                            methods.Current.Test.Start(\n                                new ActionContinuation\n                                {\n                                    OnSuccess = () =>\n                                    {\n                                        // Mark the test as passing, update the\n                                        // UI, and continue with the next test.\n                                        methods.Current.Passed = true;\n                                        methods.Current.Test = null;\n                                        Reporter.EndTest(methods.Current);\n                                        testLoop();\n                                    },\n                                    OnError = (message) =>\n                                    {\n                                        // Mark the test as failing, update the\n                                        // UI, and continue with the next test.\n                                        methods.Current.Passed = false;\n                                        methods.Current.Test = null;\n                                        methods.Current.ErrorInfo = message;\n                                        this.Failures++;\n                                        Reporter.Error(message);\n                                        Reporter.EndTest(methods.Current);\n                                        testLoop();\n                                    }\n                                });\n                        }\n                    }\n                    else if (groups.MoveNext())\n                    {\n                        // If we've finished a test group and there are more,\n                        // then move to the next one.\n\n                        // Finish the UI for the last group.\n                        if (currentGroup != null)\n                        {\n                            Reporter.EndGroup(currentGroup);\n                            currentGroup = null;\n                        }\n\n                        // Setup the UI for this next group\n                        currentGroup = groups.Current;\n                        Reporter.StartGroup(currentGroup);\n\n                        // Get the methods and immediately recurse which will\n                        // start executing them.\n                        methods = groups.Current.Methods.OrderBy(m => m.Name).GetEnumerator();\n                        testLoop();\n                    }\n                    else\n                    {\n                        // Otherwise if we've finished the entire test run\n\n                        // Finish the UI for the last group and update the\n                        // progress after the very last test method.\n                        Reporter.EndGroup(currentGroup);\n                        Reporter.Progress(this);\n\n                        // Finish the UI for the test run.\n                        Reporter.EndRun(this);\n                    }\n                };\n\n            // Start running the tests\n            testLoop();\n        }\n\n        private static void LoadTestAssembly(TestHarness harness, Assembly testAssembly)\n        {\n            Dictionary<Type, TestGroup> groups = new Dictionary<Type, TestGroup>();\n            Dictionary<TestGroup, object> instances = new Dictionary<TestGroup, object>();\n            foreach (Type type in testAssembly.ExportedTypes)\n            {\n                foreach (MethodInfo method in type.GetRuntimeMethods())\n                {\n                    if (method.GetCustomAttributes<TestMethodAttribute>().Any() ||\n                            method.GetCustomAttributes<AsyncTestMethodAttribute>().Any())\n                    {\n                        TestGroup group = null;\n                        object instance = null;\n                        if (!groups.TryGetValue(type, out group))\n                        {\n                            group = CreateGroup(type);\n                            harness.Groups.Add(group);\n                            groups[type] = group;\n\n                            instance = Activator.CreateInstance(type);\n                            TestBase testBase = instance as TestBase;\n                            if (testBase != null)\n                            {\n                                testBase.SetTestHarness(harness);\n                            }\n\n                            instances[group] = instance;\n                        }\n                        else\n                        {\n                            instances.TryGetValue(group, out instance);\n                        }\n\n                        TestMethod test = CreateMethod(type, instance, method);\n                        group.Methods.Add(test);\n                    }\n                }\n            }\n        }\n\n        private static TestGroup CreateGroup(Type type)\n        {\n            TestGroup group = new TestGroup();\n            group.Name = type.Name;\n            group.Tags.Add(type.Name);\n            group.Tags.Add(type.FullName);\n\n            if (type.GetTypeInfo().GetCustomAttributes<FunctionalTestAttribute>().Any())\n            {\n                group.Tags.Add(\"Functional\");\n            }\n\n            foreach (TagAttribute attr in type.GetTypeInfo().GetCustomAttributes<TagAttribute>())\n            {\n                group.Tags.Add(attr.Tag);\n            }\n            return group;\n        }\n\n        private static TestMethod CreateMethod(Type type, object instance, MethodInfo method)\n        {\n            TestMethod test = new TestMethod();\n            test.Name = method.Name;\n\n            if (method.GetCustomAttributes<AsyncTestMethodAttribute>().Any())\n            {\n                test.Test = new AsyncTestMethodAsyncAction(instance, method);\n            }\n            else\n            {\n                test.Test = new TestMethodAsyncAction(instance, method);\n            }\n\n            ExcludeTestAttribute excluded = method.GetCustomAttribute<ExcludeTestAttribute>();\n            if (excluded != null)\n            {\n                test.Exclude(excluded.Reason);\n            }\n\n            if (method.GetCustomAttributes<FunctionalTestAttribute>().Any())\n            {\n                test.Tags.Add(\"Functional\");\n            }\n\n            test.Tags.Add(type.FullName + \".\" + method.Name);\n            test.Tags.Add(type.Name + \".\" + method.Name);\n            foreach (TagAttribute attr in method.GetCustomAttributes<TagAttribute>())\n            {\n                test.Tags.Add(attr.Tag);\n            }\n\n            return test;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TestMethod.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// An individual test method to be executed.\n    /// </summary>\n    public sealed class TestMethod\n    {\n        /// <summary>\n        /// Initializes a new instance of the TestMethod class.\n        /// </summary>\n        public TestMethod()\n        {\n            this.Name = string.Empty;\n            this.Description = string.Empty;\n            this.ExcludeReason = string.Empty;\n            this.Tags = new List<string>();\n            this.ErrorInfo = string.Empty;\n        }\n\n        /// <summary>\n        /// Gets or sets the name of the test method.\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Gets or sets a more detailed description of the test method.\n        /// </summary>\n        public string Description { get; set; }\n        \n        /// <summary>\n        /// Gets or sets a value indicating whether the test should be excluded\n        /// from execution.\n        /// </summary>\n        public bool Excluded { get; private set; }\n        \n        /// <summary>\n        /// Gets or sets the reason the test was excluded (usually referencing\n        /// a known bug or work item).\n        /// </summary>\n        public string ExcludeReason { get; private set; }\n\n        /// <summary>\n        /// Gets the list of tags associated with this test method.\n        /// </summary>\n        public IList<string> Tags { get; private set; }\n        \n        /// <summary>\n        /// The test action to execute.  This could be sync or async.  Any\n        /// exceptions raised by invoking the test will be considered a test\n        /// failure.\n        /// </summary>\n        public IAsyncExecution Test { get; set; }\n\n        /// <summary>\n        /// Gets or sets a value indicating whether the test execution passed.\n        /// </summary>\n        public bool Passed { get; set; }\n        \n        /// <summary>\n        /// Gets or sets any error information associated with a failing test.\n        /// </summary>\n        public string ErrorInfo { get; set; }\n\n        /// <summary>\n        /// Exclude the test method.\n        /// </summary>\n        /// <param name=\"reason\">\n        /// The reason for excluding the test method.\n        /// </param>\n        public void Exclude(string reason)\n        {\n            Excluded = true;\n            ExcludeReason = reason ?? \"\";\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TestMethodAsyncAction.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Reflection;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Execute a sync test method.\n    /// </summary>\n    internal class TestMethodAsyncAction : IAsyncExecution\n    {\n        public object Instance { get; private set; }\n        public MethodInfo Method { get; private set; }\n\n        public TestMethodAsyncAction(object instance, MethodInfo method)\n        {\n            Instance = instance;\n            Method = method;\n        }\n\n        public void Start(IContinuation continuation)\n        {\n            try\n            {\n                Method.Invoke(Instance, new object[0]);\n                continuation.Success();\n            }\n            catch (TargetInvocationException ex)\n            {\n                continuation.Error(ex.InnerException.ToString());\n            }\n            catch (Exception ex)\n            {\n                continuation.Error(ex.ToString());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TestMethodAttribute.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Declare a test method.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]\n    public class TestMethodAttribute : Attribute\n    {\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Framework/TestSettings.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.WindowsAzure.MobileServices.TestFramework\n{\n    /// <summary>\n    /// Defines settings for the current test pass that can be provided via\n    /// a test application, passed to test filters, etc.\n    /// </summary>\n    public sealed class TestSettings\n    {\n        /// <summary>\n        /// Initializes a new instance of the TestSettings class.\n        /// </summary>\n        public TestSettings()\n        {\n            this.TestRunStatusMessage = \"Test Run\";\n            this.TestResultsServerUrl = \"\";\n            this.BreakOnStart = true;\n            this.TagExpression = \"\";\n            this.Custom = new Dictionary<string, string>();\n        }\n\n        /// <summary>\n        /// Gets or sets a string containing the test run status message.\n        /// </summary>\n        public string TestRunStatusMessage { get; set; }\n\n        /// <summary>\n        /// Gets or sets a URL where test results are posted.\n        /// </summary>\n        /// <remarks>\n        /// This is passed to the test application as an initialization\n        /// parameter and is used to enable test runs from the build.  The test\n        /// launcher used by the build will create a simple web server (at this\n        /// URL) to listen for the posted test results.\n        /// </remarks>\n        public string TestResultsServerUrl { get; set; }\n\n        /// <summary>\n        /// Gets or sets a value indicating whether the harness should break\n        /// before executing (so a debugger can be attached).\n        /// </summary>\n        public bool BreakOnStart { get; set; }\n\n        /// <summary>\n        /// Gets or sets the tag expression used to filter the tests that we\n        /// will run.\n        /// </summary>\n        public string TagExpression { get; set; }\n\n        /// <summary>\n        /// Gets a dictionary of custom test settings that are specific to a\n        /// given application.\n        /// </summary>\n        public IDictionary<string, string> Custom { get; private set; }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Microsoft.WindowsAzure.Mobile.TestFramework.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{A2500BD2-A9A2-4085-9978-DEE3675B02DD}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.TestFramework</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.TestFramework</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <TargetFrameworkProfile>Profile259</TargetFrameworkProfile>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <RunCodeAnalysis>true</RunCodeAnalysis>\n    <CodeAnalysisAdditionalOptions>\n      /assemblyCompareMode:StrongNameIgnoringVersion\n    </CodeAnalysisAdditionalOptions>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"Framework\\ActionContinuation.cs\" />\n    <Compile Include=\"Framework\\Assert.cs\" />\n    <Compile Include=\"Framework\\AsyncTestMethodAsyncAction.cs\" />\n    <Compile Include=\"Framework\\AsyncTestMethodAttribute.cs\" />\n    <Compile Include=\"Framework\\ExcludeTestAttribute.cs\" />\n    <Compile Include=\"Framework\\FunctionalTestAttribute.cs\" />\n    <Compile Include=\"Framework\\FunctionalTestFilter.cs\" />\n    <Compile Include=\"Framework\\IAsyncExecution.cs\" />\n    <Compile Include=\"Framework\\IContinuation.cs\" />\n    <Compile Include=\"Framework\\ITestReporter.cs\" />\n    <Compile Include=\"Framework\\TagAttribute.cs\" />\n    <Compile Include=\"Framework\\TagManager.cs\" />\n    <Compile Include=\"Framework\\TagManager.ExpressionEvaluator.cs\" />\n    <Compile Include=\"Framework\\TagManager.Tags.cs\" />\n    <Compile Include=\"Framework\\TagTestFilter.cs\" />\n    <Compile Include=\"Framework\\TestBase.cs\" />\n    <Compile Include=\"Framework\\TestFilter.cs\" />\n    <Compile Include=\"Framework\\TestGroup.cs\" />\n    <Compile Include=\"Framework\\TestHarness.cs\" />\n    <Compile Include=\"Framework\\TestMethod.cs\" />\n    <Compile Include=\"Framework\\TestMethodAsyncAction.cs\" />\n    <Compile Include=\"Framework\\TestMethodAttribute.cs\" />\n    <Compile Include=\"Framework\\TestSettings.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System.Net.Http\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\Portable\\$(TargetFrameworkVersion)\\Microsoft.Portable.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Resources;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.MobileServices.TestFramework\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.MobileServices.TestFramework\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: NeutralResourcesLanguage(\"en\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.TestFramework/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"portable-net45+win+wpa81+wp80\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:local=\"clr-namespace:Microsoft.WindowsAzure.MobileServices.Test\">\n\n    <!--Application Resources-->\n    <Application.Resources>\n        <local:LocalizedStrings x:Key=\"LocalizedStrings\"/>\n    </Application.Resources>\n\n    <Application.ApplicationLifetimeObjects>\n        <!--Required object that handles lifetime events for the application-->\n        <shell:PhoneApplicationService\n            Launching=\"Application_Launching\" Closing=\"Application_Closing\"\n            Activated=\"Application_Activated\" Deactivated=\"Application_Deactivated\"/>\n    </Application.ApplicationLifetimeObjects>\n\n</Application>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/App.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Markup;\nusing System.Windows.Navigation;\nusing Microsoft.Phone.Controls;\nusing Microsoft.Phone.Shell;\nusing Microsoft.WindowsAzure.MobileServices.Test.Resources;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public partial class App : Application\n    {\n        /// <summary>\n        /// Provides easy access to the root frame of the Phone Application.\n        /// </summary>\n        /// <returns>The root frame of the Phone Application.</returns>\n        public static PhoneApplicationFrame RootFrame { get; private set; }\n\n        /// <summary>\n        /// Gets the test harness used by the application.\n        /// </summary>\n        public static TestHarness Harness { get; private set; }\n\n        /// <summary>\n        /// Initialize the test harness.\n        /// </summary>\n        static App()\n        {\n            Harness = new TestHarness();\n            Harness.LoadTestAssembly(typeof(MobileServiceSerializerTests).Assembly);\n            Harness.LoadTestAssembly(typeof(LoginTests).Assembly);\n        }\n\n        /// <summary>\n        /// Constructor for the Application object.\n        /// </summary>\n        public App()\n        {\n            // Global handler for uncaught exceptions.\n            UnhandledException += Application_UnhandledException;\n\n            // Standard XAML initialization\n            InitializeComponent();\n\n            // Phone-specific initialization\n            InitializePhoneApplication();\n\n            // Language display initialization\n            InitializeLanguage();\n\n            // Show graphics profiling information while debugging.\n            if (Debugger.IsAttached)\n            {\n                // Display the current frame rate counters.\n                Application.Current.Host.Settings.EnableFrameRateCounter = true;\n\n                // Show the areas of the app that are being redrawn in each frame.\n                //Application.Current.Host.Settings.EnableRedrawRegions = true;\n\n                // Enable non-production analysis visualization mode,\n                // which shows areas of a page that are handed off to GPU with a colored overlay.\n                //Application.Current.Host.Settings.EnableCacheVisualization = true;\n\n                // Prevent the screen from turning off while under the debugger by disabling\n                // the application's idle detection.\n                // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run\n                // and consume battery power when the user is not using the phone.\n                PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;\n            }\n\n        }\n\n        // Code to execute when the application is launching (eg, from Start)\n        // This code will not execute when the application is reactivated\n        private void Application_Launching(object sender, LaunchingEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is activated (brought to foreground)\n        // This code will not execute when the application is first launched\n        private void Application_Activated(object sender, ActivatedEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is deactivated (sent to background)\n        // This code will not execute when the application is closing\n        private void Application_Deactivated(object sender, DeactivatedEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is closing (eg, user hit Back)\n        // This code will not execute when the application is deactivated\n        private void Application_Closing(object sender, ClosingEventArgs e)\n        {\n        }\n\n        // Code to execute if a navigation fails\n        private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            if (Debugger.IsAttached)\n            {\n                // A navigation has failed; break into the debugger\n                Debugger.Break();\n            }\n        }\n\n        // Code to execute on Unhandled Exceptions\n        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)\n        {\n            if (Debugger.IsAttached)\n            {\n                // An unhandled exception has occurred; break into the debugger\n                Debugger.Break();\n            }\n        }\n\n        // Avoid double-initialization\n        private bool phoneApplicationInitialized = false;\n\n        // Do not add any additional code to this method\n        private void InitializePhoneApplication()\n        {\n            if (phoneApplicationInitialized)\n                return;\n\n            // Create the frame but don't set it as RootVisual yet; this allows the splash\n            // screen to remain active until the application is ready to render.\n            RootFrame = new PhoneApplicationFrame();\n            RootFrame.Navigated += CompleteInitializePhoneApplication;\n\n            // Handle navigation failures\n            RootFrame.NavigationFailed += RootFrame_NavigationFailed;\n\n            // Handle reset requests for clearing the backstack\n            RootFrame.Navigated += CheckForResetNavigation;\n\n            // Ensure we don't initialize again\n            phoneApplicationInitialized = true;\n        }\n\n        // Do not add any additional code to this method\n        private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)\n        {\n            // Set the root visual to allow the application to render\n            if (RootVisual != RootFrame)\n                RootVisual = RootFrame;\n\n            // Remove this handler since it is no longer needed\n            RootFrame.Navigated -= CompleteInitializePhoneApplication;\n        }\n\n        private void CheckForResetNavigation(object sender, NavigationEventArgs e)\n        {\n            // If the app has received a 'reset' navigation, then we need to check\n            // on the next navigation to see if the page stack should be reset\n            if (e.NavigationMode == NavigationMode.Reset)\n                RootFrame.Navigated += ClearBackStackAfterReset;\n        }\n\n        private void ClearBackStackAfterReset(object sender, NavigationEventArgs e)\n        {\n            // Unregister the event so it doesn't get called again\n            RootFrame.Navigated -= ClearBackStackAfterReset;\n\n            // Only clear the stack for 'new' (forward) and 'refresh' navigations\n            if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh)\n                return;\n\n            // For UI consistency, clear the entire page stack\n            while (RootFrame.RemoveBackEntry() != null)\n            {\n                ; // do nothing\n            }\n        }\n\n        // Initialize the app's font and flow direction as defined in its localized resource strings.\n        //\n        // To ensure that the font of your application is aligned with its supported languages and that the\n        // FlowDirection for each of those languages follows its traditional direction, ResourceLanguage\n        // and ResourceFlowDirection should be initialized in each resx file to match these values with that\n        // file's culture. For example:\n        //\n        // AppResources.es-ES.resx\n        //    ResourceLanguage's value should be \"es-ES\"\n        //    ResourceFlowDirection's value should be \"LeftToRight\"\n        //\n        // AppResources.ar-SA.resx\n        //     ResourceLanguage's value should be \"ar-SA\"\n        //     ResourceFlowDirection's value should be \"RightToLeft\"\n        //\n        // For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072.\n        //\n        private void InitializeLanguage()\n        {\n            try\n            {\n                // Set the font to match the display language defined by the\n                // ResourceLanguage resource string for each supported language.\n                //\n                // Fall back to the font of the neutral language if the Display\n                // language of the phone is not supported.\n                //\n                // If a compiler error is hit then ResourceLanguage is missing from\n                // the resource file.\n                RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);\n\n                // Set the FlowDirection of all elements under the root frame based\n                // on the ResourceFlowDirection resource string for each\n                // supported language.\n                //\n                // If a compiler error is hit then ResourceFlowDirection is missing from\n                // the resource file.\n                FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection);\n                RootFrame.FlowDirection = flow;\n            }\n            catch\n            {\n                // If an exception is caught here it is most likely due to either\n                // ResourceLangauge not being correctly set to a supported language\n                // code or ResourceFlowDirection is set to a value other than LeftToRight\n                // or RightToLeft.\n\n                if (Debugger.IsAttached)\n                {\n                    Debugger.Break();\n                }\n\n                throw;\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/LocalizedStrings.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.MobileServices.Test.Resources;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Provides access to string resources.\n    /// </summary>\n    public class LocalizedStrings\n    {\n        private static AppResources _localizedResources = new AppResources();\n\n        public AppResources LocalizedResources { get { return _localizedResources; } }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/MainPage.xaml",
    "content": "﻿<phone:PhoneApplicationPage\n    x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n        \n        <StackPanel Grid.Row=\"0\">\n            <TextBlock Text=\"Microsoft Azure Mobile Services\" Style=\"{StaticResource PhoneTextNormalStyle}\" FontSize=\"20\" FontWeight=\"Bold\"/>\n            <TextBlock Text=\"C# Client Library Tests\" Style=\"{StaticResource PhoneTextAccentStyle}\" Foreground=\"#0094ff\" FontSize=\"30\" />\n            <TextBlock TextWrapping=\"Wrap\" Visibility=\"Collapsed\" x:Name=\"lblStatus\" Text=\"Status pending...\"  Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n            <StackPanel x:Name=\"testSettings\">\n                <TextBlock VerticalAlignment=\"Center\" Style=\"{StaticResource PhoneTextNormalStyle}\" Text=\"Mobile Service Uri:\" />\n                <TextBox x:Name=\"txtRuntimeUri\" BorderThickness=\"0\" Padding=\"0\" FontSize=\"20\"/>\n                <TextBlock VerticalAlignment=\"Center\" Style=\"{StaticResource PhoneTextNormalStyle}\" Text=\"Mobile Service Key:\" />\n                <TextBox x:Name=\"txtRuntimeKey\" BorderThickness=\"0\" Padding=\"0\" FontSize=\"20\"/>\n                <TextBlock VerticalAlignment=\"Center\" Style=\"{StaticResource PhoneTextNormalStyle}\" Text=\"Tags:\"/>\n                <TextBox x:Name=\"txtTags\" FontSize=\"20\"  BorderThickness=\"0\" Padding=\"0\" />\n                <StackPanel HorizontalAlignment=\"Left\" Orientation=\"Horizontal\">\n                    <Button x:Name=\"btnLoginTests\" Content=\"Login Tests\" MinWidth=\"100\" Click=\"ExecuteLoginTests\" />\n                    <Button x:Name=\"btnUnitTests\" Content=\"Unit Tests\" MinWidth=\"100\" Click=\"ExecuteUnitTests\" />\n                </StackPanel>\n            </StackPanel>\n        </StackPanel>\n\n        <StackPanel x:Name=\"ContentPanel\" Grid.Row=\"1\" Margin=\"12,12,12,12\">\n            <phone:LongListSelector\n        \t\tHeight=\"560\" \n        \t\tWidth=\"456\"\n        \t\tx:Name=\"unitTests\"               \n        \t\tIsGroupingEnabled=\"True\" \n        \t\tBorderBrush=\"Red\"\n                BorderThickness=\"2\" \n                Visibility=\"Collapsed\">\n                <phone:LongListSelector.GroupHeaderTemplate>\n                    <DataTemplate>\n                        <Border BorderThickness=\"0 0 0 1\" BorderBrush=\"#666666\" Margin=\"0 5 0 0\" HorizontalAlignment=\"Stretch\">\n                            <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Stretch\">\n                                <TextBlock Text=\"{Binding Name}\" FontSize=\"30\" />\n                                <TextBlock Text=\" tests\" FontSize=\"30\"/>\n                            </StackPanel>\n                        </Border>\n                    </DataTemplate>\n                </phone:LongListSelector.GroupHeaderTemplate>\n\n                <phone:LongListSelector.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Margin=\"8 0\">\n                            <TextBlock Text=\"{Binding Name}\" Foreground=\"{Binding Brush}\" FontSize=\"25\" />\n                            <!--<ItemsControl ItemsSource=\"{Binding Details}\" Margin=\"15 0 0 0\" FontSize=\"20\" Foreground=\"LightGray\" />-->\n                        </StackPanel>\n                    </DataTemplate>\n                </phone:LongListSelector.ItemTemplate>\n            </phone:LongListSelector>\n            <StackPanel x:Name=\"loginTests\" Visibility=\"Collapsed\">\n                <Button x:Name=\"MicrosoftAccountButton\"\n                        Content=\"Microsoft Account\" \n                        Click=\"LoginButtonClicked\"/>\n                <Button x:Name=\"FacebookButton\"\n                        Content=\"Facebook\" \n                        Click=\"LoginButtonClicked\"/>\n                <Button x:Name=\"TwitterButton\"\n                        Content=\"Twitter\" \n                        Click=\"LoginButtonClicked\"/>\n                <Button x:Name=\"GoogleButton\"\n                        Content=\"Google\" \n                        Click=\"LoginButtonClicked\"/>\n                <Button x:Name=\"AzureActiveDirectoryButton\"\n                        Content=\"Microsoft Azure Active Directory\" \n                        Click=\"LoginButtonClicked\"/>\n                <CheckBox x:Name=\"UseProviderStringOverloadCheckBox\"\n                          Content=\"Use overload with string provider\"\n                          IsChecked=\"false\"/>\n                <TextBlock HorizontalAlignment=\"Left\" \n            \t        TextWrapping=\"Wrap\" \n            \t        Height=\"20\" \n            \t        Width=\"200\"\n                        Margin=\"0,20\"\n                        Text=\"Test Result:\"\n                        FontSize=\"15\">\n                </TextBlock>\n                <TextBlock x:Name=\"TestResultsTextBlock\"\n                        HorizontalAlignment=\"Left\" \n            \t        TextWrapping=\"Wrap\" \n            \t        Height=\"400\" \n            \t        Width=\"600\"\n                        Text=\"\"\n                        FontSize=\"15\">\n                </TextBlock>\n            </StackPanel>\n        </StackPanel>\n\n        <StackPanel x:Name=\"unitTestResults\" Grid.Row=\"2\" Margin=\"12,0,12,0\" Visibility=\"Collapsed\">\n            <ProgressBar x:Name=\"progress\"/>\n            <StackPanel Orientation=\"Horizontal\">\n                <TextBlock Text=\"Zumo tests \" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n                <TextBlock x:Name=\"lblCurrentTestNumber\" Text=\"0\"/>\n                <TextBlock Text=\" / \"/>\n                <TextBlock x:Name=\"lblTotalTestNumber\" Text=\"0\"/>\n                <TextBlock Text=\"  (with  \"/>\n                <TextBlock x:Name=\"lblFailureNumber\" Text=\"0\"/>\n                <TextBlock Text=\" failures)\"/>\n            </StackPanel>\n            <TextBlock Foreground=\"#ffd800\" x:Name=\"lblResults\" Text=\"Results pending...\" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n        </StackPanel>\n\n    </Grid>\n\n</phone:PhoneApplicationPage>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/MainPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.ObjectModel;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing Microsoft.Phone.Controls;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public partial class MainPage : PhoneApplicationPage, ITestReporter\n    {\n        private static Color SkippedColor = Color.FromArgb(0xFF, 0x66, 0x66, 0x66);\n        private static Color FailedColor = Color.FromArgb(0xFF, 0xFF, 0x00, 0x6E);\n        private static Color PassedColor = Color.FromArgb(0xFF, 0x2A, 0x9E, 0x39);\n\n        private ObservableCollection<GroupDescription> _groups;\n        private GroupDescription _currentGroup = null;\n        private TestDescription _currentTest = null;\n\n        // Constructor\n        public MainPage()\n        {\n            InitializeComponent();\n            this.Loaded += MainPage_Loaded;\n        }\n\n        void MainPage_Loaded(object sender, RoutedEventArgs e)\n        {\n            // Setup the groups data source\n            _groups = new ObservableCollection<GroupDescription>();\n            unitTests.ItemsSource = _groups;\n\n            txtRuntimeUri.Text = \"\"; // Set the default URI here\n            txtRuntimeKey.Text = \"\"; // Set the default Key here\n            txtTags.Text = \"\"; // Set the default tags here\n        }\n\n        private void ExecuteLoginTests(object sender, RoutedEventArgs e)\n        {\n            // Get the test settings from the UI\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeUrl\"] = txtRuntimeUri.Text;\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeKey\"] = txtRuntimeKey.Text;\n\n            // Hide Test Settings UI\n            testSettings.Visibility = Visibility.Collapsed;\n\n            // Make the Login Test UI visible\n            loginTests.Visibility = Visibility.Visible;\n        }\n\n        private async void LoginButtonClicked(object sender, RoutedEventArgs e)\n        {\n            Button buttonClicked = sender as Button;\n            if (buttonClicked != null)\n            {\n                String testName = null;\n                MobileServiceAuthenticationProvider provider =\n                    MobileServiceAuthenticationProvider.MicrosoftAccount;\n\n                if (buttonClicked.Name.Contains(\"MicrosoftAccount\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.MicrosoftAccount;\n                    testName = \"Microsoft Account Login\";\n                }\n                else if (buttonClicked.Name.Contains(\"Facebook\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.Facebook;\n                    testName = \"Facebook Login\";\n                }\n                else if (buttonClicked.Name.Contains(\"Twitter\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.Twitter;\n                    testName = \"Twitter Login\";\n                }\n                else if (buttonClicked.Name.Contains(\"Google\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.Google;\n                    testName = \"Google Login\";\n                }\n                else if (buttonClicked.Name.Contains(\"AzureActiveDirectory\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory;\n                    testName = \"Azure Active Directory Login\";\n                }\n\n                bool useProviderStringOverload = UseProviderStringOverloadCheckBox.IsChecked.Value;\n\n                TestResultsTextBlock.Text = await LoginTests.ExecuteTest(testName, () => LoginTests.TestLoginAsync(provider, useProviderStringOverload));\n            }\n        }\n\n        private void ExecuteUnitTests(object sender, RoutedEventArgs e)\n        {\n            // Get the test settings from the UI\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeUrl\"] = txtRuntimeUri.Text;\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeKey\"] = txtRuntimeKey.Text;\n            App.Harness.Settings.TagExpression = txtTags.Text;\n\n            //ignore tests for WP75\n            if (!string.IsNullOrEmpty(App.Harness.Settings.TagExpression))\n            {\n                App.Harness.Settings.TagExpression += \" - notWP80\";\n            }\n            else\n            {\n                App.Harness.Settings.TagExpression = \"!notWP80\";\n            }\n\n            // Hide Test Settings UI\n            testSettings.Visibility = Visibility.Collapsed;\n\n            // Display Status UI\n            lblStatus.Visibility = Visibility.Visible;\n            unitTests.Visibility = Visibility.Visible;\n            unitTestResults.Visibility = Visibility.Visible;\n\n            // Start a test run\n            App.Harness.Reporter = this;\n            Task.Factory.StartNew(() => App.Harness.RunAsync());\n        }\n\n        public void StartRun(TestHarness harness)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                lblCurrentTestNumber.Text = harness.Progress.ToString();\n                lblTotalTestNumber.Text = harness.Count.ToString();\n                lblFailureNumber.Tag = harness.Failures.ToString() ?? \"0\";\n                progress.Value = 1;\n            });\n        }\n\n        public void EndRun(TestHarness harness)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                if (harness.Failures > 0)\n                {\n                    lblResults.Text = string.Format(CultureInfo.InvariantCulture, \"{0}/{1} tests failed!\", harness.Failures, harness.Count);\n                    lblResults.Foreground = new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0x00, 0x6E));\n                }\n                else\n                {\n                    lblResults.Text = string.Format(CultureInfo.InvariantCulture, \"{0} tests passed!\", harness.Count);\n                }\n                lblResults.Visibility = Visibility.Visible;\n            });\n        }\n\n        public void Progress(TestHarness harness)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                lblCurrentTestNumber.Text = harness.Progress.ToString();\n                lblFailureNumber.Text = \" \" + (harness.Failures.ToString() ?? \"0\");\n                double value = harness.Progress;\n                int count = harness.Count;\n                if (count > 0)\n                {\n                    value = value * 100.0 / (double)count;\n                }\n                progress.Value = value;\n            });\n        }\n\n        public void StartGroup(TestGroup group)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                _currentGroup = new GroupDescription { Name = group.Name };\n                _groups.Add(_currentGroup);\n            });\n        }\n\n        public void EndGroup(TestGroup group)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                _currentGroup = null;\n            });\n        }\n\n        public void StartTest(TestMethod test)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                TestDescription testDescription = new TestDescription { Name = test.Name };\n                _currentTest = testDescription;\n                _currentGroup.Add(_currentTest);\n\n                Dispatcher.BeginInvoke(() =>\n                {\n                    unitTests.ScrollTo(testDescription);\n                });\n            });\n        }\n\n        public void EndTest(TestMethod method)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                if (method.Excluded)\n                {\n                    _currentTest.Color = SkippedColor;\n                }\n                else if (!method.Passed)\n                {\n                    _currentTest.Color = FailedColor;\n                }\n                else\n                {\n                    _currentTest.Color = PassedColor;\n                }\n                _currentTest = null;\n            });\n        }\n\n        public void Log(string message)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                _currentTest.Details.Add(message);\n            });\n        }\n\n        public void Error(string errorDetails)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                _currentTest.Details.Add(errorDetails);\n            });\n        }\n\n        public void Status(string status)\n        {\n            Dispatcher.BeginInvoke(() =>\n            {\n                lblStatus.Text = status;\n            });\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/Microsoft.WindowsAzure.Mobile.WP8.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{46AE537A-1143-48A4-B9A4-4B2C7BD9AB1D}</ProjectGuid>\n    <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.Test</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.WP8.Test</AssemblyName>\n    <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v8.1</TargetFrameworkVersion>\n    <SilverlightVersion>\n    </SilverlightVersion>\n    <SilverlightApplication>true</SilverlightApplication>\n    <SupportedCultures>\n    </SupportedCultures>\n    <XapOutputs>true</XapOutputs>\n    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>\n    <XapFilename>Microsoft.WindowsAzure.Mobile.WP8.Test_$(Configuration)_$(Platform).xap</XapFilename>\n    <SilverlightManifestTemplate>Properties\\AppManifest.xml</SilverlightManifestTemplate>\n    <SilverlightAppEntry>Microsoft.WindowsAzure.MobileServices.Test.App</SilverlightAppEntry>\n    <ValidateXaml>true</ValidateXaml>\n    <MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>\n    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n    <TargetFrameworkProfile />\n    <DefaultLanguage>en-US</DefaultLanguage>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <RunCodeAnalysis>false</RunCodeAnalysis>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\x86\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\x86\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|ARM' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\ARM\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|ARM' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\ARM\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget />\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\Functional\\PushFunctional.Test.cs\">\n      <Link>Functional\\PushFunctional.Test.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\UI\\GroupDescription.cs\">\n      <Link>UI\\GroupDescription.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\UI\\TestDescription.cs\">\n      <Link>UI\\TestDescription.cs</Link>\n    </Compile>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"TestPlatform\\PushTestUtility.cs\" />\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\TestPlatform\\CurrentTestPlatform.cs\">\n      <Link>TestPlatform\\CurrentTestPlatform.cs</Link>\n    </Compile>\n    <Compile Include=\"LocalizedStrings.cs\" />\n    <Compile Include=\"PlatformTests\\LoginTests.cs\" />\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Resources\\AppResources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>AppResources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"UnitTests\\MobileServiceSerializer.Test.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n    <None Include=\"packages.config\" />\n    <None Include=\"Properties\\AppManifest.xml\" />\n    <None Include=\"Properties\\WMAppManifest.xml\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Assets\\AlignmentGrid.png\" />\n    <Content Include=\"Assets\\ApplicationIcon.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\BadgeLogo.png\" />\n    <Content Include=\"Assets\\Logo.png\" />\n    <Content Include=\"Assets\\SplashScreen.png\" />\n    <Content Include=\"Assets\\SquareTile150x150.png\" />\n    <Content Include=\"Assets\\SquareTile71x71.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileLarge.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileMedium.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileSmall.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\IconicTileMediumLarge.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\IconicTileSmall.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\WideLogo.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Resources\\AppResources.resx\">\n      <Generator>PublicResXFileCodeGenerator</Generator>\n      <LastGenOutput>AppResources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI\\Microsoft.WindowsAzure.Mobile.UI.WP8.csproj\">\n      <Project>{B1CCA4C2-DEDF-43AF-B54D-067C5AC6A391}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.UI.WP8</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone8\\Microsoft.WindowsAzure.Mobile.Ext.WP8.csproj\">\n      <Project>{EB3834A2-3C20-4F39-BEE9-87DFCAB81670}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.WP8</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-E36E-4190-8714-5BD2665859FB}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{A2500BD2-A9A2-4085-9978-DEE3675B02DD}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{D8BBC92A-B213-463B-911D-3A106F91D5F9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ProjectExtensions />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/Package.appxmanifest",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:m2=\"http://schemas.microsoft.com/appx/2013/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/2014/manifest\" xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\">\n\n  <Identity Name=\"e317b4fb-83a4-4a6f-a436-c010c79ed423\"\n            Publisher=\"CN=pgopa\"\n            Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"46ae537a-1143-48a4-b9a4-4b2c7bd9ab1d\" PhonePublisherId=\"5ddc2108-8798-43e9-b4ea-32f573792cb1\"/>\n\n  <Properties>\n    <DisplayName>Microsoft.WindowsAzure.Mobile.WP8.Test</DisplayName>\n    <PublisherDisplayName>pgopa</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Prerequisites>\n    <OSMinVersion>6.3.1</OSMinVersion>\n    <OSMaxVersionTested>6.3.1</OSMaxVersionTested>\n  </Prerequisites>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"x46ae537ay1143y48a4yb9a4y4b2c7bd9ab1dx\"\n        Executable=\"AGHost.exe\"\n        EntryPoint=\"MainPage.xaml\">\n      <m3:VisualElements\n          DisplayName=\"Microsoft.WindowsAzure.Mobile.WP8.Test\"\n          Square150x150Logo=\"Assets\\SquareTile150x150.png\"\n          Square44x44Logo=\"Assets\\Logo.png\"\n          Description=\"Microsoft.WindowsAzure.Mobile.WP8.Test\"\n          ForegroundText=\"light\"\n          BackgroundColor=\"#464646\">\n        <m3:DefaultTile Square71x71Logo=\"Assets\\SquareTile71x71.png\"/>\n        <m3:SplashScreen Image=\"Assets\\Splashscreen.png\" />\n      </m3:VisualElements>\n      <Extensions>\n        <Extension Category=\"windows.backgroundTasks\" EntryPoint=\"AgHost.BackgroundTask\">\n          <BackgroundTasks>\n          <Task Type=\"systemEvent\" />\n          </BackgroundTasks>\n        </Extension>\n      </Extensions>\n    </Application>\n  </Applications>\n  <Capabilities>\n  </Capabilities>\n  <Extensions>\n    <Extension Category=\"windows.activatableClass.inProcessServer\">\n      <InProcessServer>\n        <Path>AgHostSvcs.dll</Path>\n        <ActivatableClass ActivatableClassId=\"AgHost.BackgroundTask\" ThreadingModel=\"both\" />\n      </InProcessServer>\n    </Extension>\n  </Extensions>\n</Package>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/PlatformTests/LoginTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Platform-specific Login Tests for the Windows Store platform.\n    /// </summary>\n    class LoginTests\n    {\n        private static MobileServiceClient client;\n\n        /// <summary>\n        /// Tests the <see cref=\"MobileServiceClient.LoginAsync\"/> functionality on the platform.\n        /// </summary>\n        /// <param name=\"provider\">The provider with which to login.\n        /// </param>\n        /// <param name=\"useProviderStringOverload\">Indicates if the call to <see cref=\"MobileServiceClient.LoginAsync\"/>\n        /// should be made with the overload where the provider is passed as a string.\n        /// </param>\n        /// <returns>The UserId and MobileServiceAuthentication token obtained from logging in.</returns>\n        public static async Task<string> TestLoginAsync(MobileServiceAuthenticationProvider provider, bool useProviderStringOverload)\n        {\n            MobileServiceUser user;\n            if (useProviderStringOverload)\n            {\n                user = await client.LoginAsync(provider.ToString());\n            }\n            else\n            {\n                user = await client.LoginAsync(provider);\n            }\n\n            return string.Format(\"UserId: {0} Token: {1}\", user.UserId, user.MobileServiceAuthenticationToken);\n        }\n\n        /// <summary>\n        /// Utility method that can be used to execute a test.  It will capture any exceptions throw\n        /// during the execution of the test and return a message with details of the exception thrown.\n        /// </summary>\n        /// <param name=\"testName\">The name of the test being executed.\n        /// </param>\n        /// <param name=\"test\">A test to execute.\n        /// </param>\n        /// <returns>\n        /// Either the result of the test if the test passed, or a message with the exception\n        /// that was thrown.\n        /// </returns>\n        public static async Task<string> ExecuteTest(string testName, Func<Task<string>> test)\n        {\n            string resultText = null;\n            bool didPass = false;\n\n            if (client == null)\n            {\n                string appUrl = null;\n                string appKey = null;\n                App.Harness.Settings.Custom.TryGetValue(\"MobileServiceRuntimeUrl\", out appUrl);\n                App.Harness.Settings.Custom.TryGetValue(\"MobileServiceRuntimeKey\", out appKey);\n\n                client = new MobileServiceClient(appUrl, appKey);\n            }\n\n            try\n            {\n                resultText = await test();\n                didPass = true;\n            }\n            catch (Exception exception)\n            {\n                resultText = string.Format(\"ExceptionType: {0} Message: {1} StackTrace: {2}\",\n                                               exception.GetType().ToString(),\n                                               exception.Message,\n                                               exception.StackTrace);\n            }\n\n            return string.Format(\"Test '{0}' {1}.\\n{2}\",\n                                 testName,\n                                 didPass ? \"PASSED\" : \"FAILED\",\n                                 resultText);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/Properties/AppManifest.xml",
    "content": "﻿<Deployment xmlns=\"http://schemas.microsoft.com/client/2007/deployment\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n>\n    <Deployment.Parts>\n    </Deployment.Parts>\n</Deployment>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\nusing System.Resources;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"eb6b4606-ed9e-44e0-a65b-2d28747fadff\")]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/Properties/WMAppManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Deployment xmlns=\"http://schemas.microsoft.com/windowsphone/2014/deployment\" AppPlatformVersion=\"8.1\">\n  <DefaultLanguage xmlns=\"\" code=\"en-US\" />\n  <App xmlns=\"\" ProductID=\"{46ae537a-1143-48a4-b9a4-4b2c7bd9ab1d}\" Title=\"Microsoft.WindowsAzure.MobileServices.WP8.Test\" RuntimeType=\"Silverlight\" Version=\"1.0.0.0\" Genre=\"apps.normal\" Author=\"Microsoft.WindowsAzure.MobileServices.WP8.Test\" Description=\"Sample description\" Publisher=\"Microsoft.WindowsAzure.MobileServices.WP8.Test\" PublisherID=\"{5ddc2108-8798-43e9-b4ea-32f573792cb1}\">\n    <IconPath IsRelative=\"true\" IsResource=\"false\">Assets\\ApplicationIcon.png</IconPath>\n    <Capabilities>\n      <Capability Name=\"ID_CAP_NETWORKING\" />\n      <Capability Name=\"ID_CAP_MEDIALIB_AUDIO\" />\n      <Capability Name=\"ID_CAP_MEDIALIB_PLAYBACK\" />\n      <Capability Name=\"ID_CAP_SENSORS\" />\n      <Capability Name=\"ID_CAP_WEBBROWSERCOMPONENT\" />\n      <Capability Name=\"ID_CAP_PUSH_NOTIFICATION\" />\n    </Capabilities>\n    <Tasks>\n      <DefaultTask Name=\"_default\" NavigationPage=\"MainPage.xaml\" />\n    </Tasks>\n    <Tokens>\n      <PrimaryToken TokenID=\"Microsoft.WindowsAzure.MobileServices.WindowsPhone8.TestToken\" TaskName=\"_default\">\n        <TemplateFlip>\n          <SmallImageURI IsRelative=\"true\" IsResource=\"false\">Assets\\Tiles\\FlipCycleTileSmall.png</SmallImageURI>\n          <Count>0</Count>\n          <BackgroundImageURI IsRelative=\"true\" IsResource=\"false\">Assets\\Tiles\\FlipCycleTileMedium.png</BackgroundImageURI>\n          <Title>Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test</Title>\n          <BackContent></BackContent>\n          <BackBackgroundImageURI></BackBackgroundImageURI>\n          <BackTitle></BackTitle>\n          <DeviceLockImageURI></DeviceLockImageURI>\n          <HasLarge></HasLarge>\n        </TemplateFlip>\n      </PrimaryToken>\n    </Tokens>\n    <ScreenResolutions>\n      <ScreenResolution Name=\"ID_RESOLUTION_WVGA\" />\n      <ScreenResolution Name=\"ID_RESOLUTION_WXGA\" />\n      <ScreenResolution Name=\"ID_RESOLUTION_HD720P\" />\n    </ScreenResolutions>\n  </App>\n</Deployment>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/Resources/AppResources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34014\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test.Resources {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AppResources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AppResources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Microsoft.WindowsAzure.MobileServices.Test.Resources.AppResources\", typeof(AppResources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to add.\n        /// </summary>\n        public static string AppBarButtonText {\n            get {\n                return ResourceManager.GetString(\"AppBarButtonText\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Menu Item.\n        /// </summary>\n        public static string AppBarMenuItemText {\n            get {\n                return ResourceManager.GetString(\"AppBarMenuItemText\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MY APPLICATION.\n        /// </summary>\n        public static string ApplicationTitle {\n            get {\n                return ResourceManager.GetString(\"ApplicationTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to LeftToRight.\n        /// </summary>\n        public static string ResourceFlowDirection {\n            get {\n                return ResourceManager.GetString(\"ResourceFlowDirection\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to en-US.\n        /// </summary>\n        public static string ResourceLanguage {\n            get {\n                return ResourceManager.GetString(\"ResourceLanguage\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/Resources/AppResources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ResourceFlowDirection\" xml:space=\"preserve\">\n    <value>LeftToRight</value>\n    <comment>Controls the FlowDirection for all elements in the RootFrame. Set to the traditional direction of this resource file's language</comment>\n  </data>\n  <data name=\"ResourceLanguage\" xml:space=\"preserve\">\n    <value>en-US</value>\n    <comment>Controls the Language and ensures that the font for all elements in the RootFrame aligns with the app's language. Set to the language code of this resource file's language.</comment>\n  </data>\n  <data name=\"ApplicationTitle\" xml:space=\"preserve\">\n    <value>MY APPLICATION</value>\n  </data>\n  <data name=\"AppBarButtonText\" xml:space=\"preserve\">\n    <value>add</value>\n  </data>\n  <data name=\"AppBarMenuItemText\" xml:space=\"preserve\">\n    <value>Menu Item</value>\n  </data>\n</root>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/TestPlatform/PushTestUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    class PushTestUtility : IPushTestUtility\n    {\n        const string BodyTemplate = \"<wp:Notification xmlns:wp=\\\"WPNotification\\\"><wp:Toast><wp:Text1>$(message)</wp:Text1><wp:Text2>Test message</wp:Text2></wp:Toast></wp:Notification>\";\n        const string DefaultToastTemplateName = \"templateForToast\";\n\n        private const string DefaultChannelUri =\n            \"http://sn1.notify.live.net/throttledthirdparty/01.00/AQG14T6NQCB_QYweWtUweyqjAgAAAAADAQAAAAQUZm52OkJCMjg1QTg1QkZDMkUxREQFBlVTU0MwMQ\";\n        static readonly string[] DefaultTags = { \"foo\", \"bar\" };\n        static readonly ReadOnlyDictionary<string, string> DefaultHeaders = new ReadOnlyDictionary<string, string>(new Dictionary<string, string> { { \"X-MessageID\", \"TestMessageID\" } });\n        static readonly ReadOnlyDictionary<string, string> DetectedHeaders = new ReadOnlyDictionary<string, string>(new Dictionary<string, string> { { \"X-WindowsPhone-Target\", \"toast\" }, { \"X-NotificationClass\", \"2\" } });\n\n        public string GetPushHandle()\n        {\n            return DefaultChannelUri;\n        }\n\n        public string GetUpdatedPushHandle()\n        {\n            return DefaultChannelUri.Replace('A', 'B');\n        }\n\n        public Registration GetTemplateRegistrationForToast()\n        {\n            var channel = GetPushHandle();\n            return new MpnsTemplateRegistration(channel, BodyTemplate, DefaultToastTemplateName, DefaultTags, DefaultHeaders);\n        }\n\n        public void ValidateTemplateRegistration(Registration registration)\n        {\n            var mpnsTemplateRegistration = (MpnsTemplateRegistration)registration;\n            Assert.AreEqual(mpnsTemplateRegistration.BodyTemplate, BodyTemplate);\n\n            foreach (KeyValuePair<string, string> header in DefaultHeaders)\n            {\n                Assert.IsTrue(mpnsTemplateRegistration.MpnsHeaders.ContainsKey(header.Key));\n                Assert.AreEqual(mpnsTemplateRegistration.MpnsHeaders[header.Key], header.Value);\n            }\n\n            foreach (KeyValuePair<string, string> header in DetectedHeaders)\n            {\n                Assert.IsTrue(mpnsTemplateRegistration.MpnsHeaders.ContainsKey(header.Key));\n                Assert.AreEqual(mpnsTemplateRegistration.MpnsHeaders[header.Key], header.Value);\n            }\n\n            Assert.AreEqual(mpnsTemplateRegistration.MpnsHeaders.Count, DefaultHeaders.Count + DetectedHeaders.Count);\n\n            foreach (string tag in DefaultTags)\n            {\n                Assert.IsTrue(registration.Tags.Contains(tag));\n            }\n\n            Assert.AreEqual(mpnsTemplateRegistration.Name, DefaultToastTemplateName);\n            Assert.AreEqual(mpnsTemplateRegistration.TemplateName, DefaultToastTemplateName);\n        }\n\n        public void ValidateTemplateRegistrationBeforeRegister(Registration registration)\n        {\n            ValidateTemplateRegistration(registration);\n            Assert.AreEqual(registration.Tags.Count(), DefaultTags.Length);\n            Assert.IsNull(registration.RegistrationId);\n        }\n\n        public void ValidateTemplateRegistrationAfterRegister(Registration registration, string zumoInstallationId)\n        {\n            ValidateTemplateRegistration(registration);\n            Assert.IsNotNull(registration.RegistrationId);\n            Assert.IsTrue(registration.Tags.Contains(zumoInstallationId));\n            Assert.AreEqual(registration.Tags.Count(), DefaultTags.Length + 1);\n        }\n\n        public Registration GetNewNativeRegistration(string deviceId, IEnumerable<string> tags)\n        {\n            return new MpnsRegistration(deviceId, tags);\n        }\n\n        public Registration GetNewTemplateRegistration(string deviceId, string bodyTemplate, string templateName)\n        {\n            return new MpnsTemplateRegistration(deviceId, bodyTemplate, templateName);\n        }\n\n        public string GetListNativeRegistrationResponse()\n        {\n            return \"[{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\"}]\";\n        }\n\n        public string GetListTemplateRegistrationResponse()\n        {\n            return \"[{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\",\\\"templateBody\\\":\\\"cool template body\\\",\\\"templateName\\\":\\\"cool name\\\"}]\";\n        }\n\n        public string GetListMixedRegistrationResponse()\n        {\n            return \"[{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\"}, \" +\n            \"{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\",\\\"templateBody\\\":\\\"cool template body\\\",\\\"templateName\\\":\\\"cool name\\\"}]\";\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/UnitTests/MobileServiceSerializer.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"unit\")]\n    public class MobileServiceSerializerTestsWP80 : TestBase\n    {\n        MobileServiceSerializer defaultSerializer;\n\n        MobileServiceSerializer DefaultSerializer\n        {\n            get\n            {\n                if (this.defaultSerializer == null)\n                {\n                    this.defaultSerializer = new MobileServiceSerializer();\n                }\n\n                return this.defaultSerializer;\n            }\n        }\n\n        [TestMethod]\n        public void LongDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"Long\\\":9.2233720368547758E+18}\",\"Error converting value 9.22337203685478E+18 to type 'System.Int64'. Path 'Long', line 1, position 30.\"),  // Fails because this will be read as a double, which then doesn't convert into a long      \n                new Tuple<string, string>(\"{\\\"Long\\\":9223372036854775808}\",\"JSON integer 9223372036854775808 is too large or small for an Int64. Path 'Long', line 1, position 27.\"), // long.MaxValue + 1\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(LongType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expectedError = testCase.Item2;\n\n                LongType actual = new LongType();\n                Exception actualError = null;\n                try\n                {\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expectedError);\n            }\n        }\n\n        [TestMethod]\n        public void ULongDeserializationNegative()\n        {\n            List<Tuple<string, string>> testCases = new List<Tuple<string, string>>() {\n                new Tuple<string, string>(\"{\\\"ULong\\\":18446744073709551616}\",\"JSON integer 18446744073709551616 is too large or small for an Int64. Path 'ULong', line 1, position 29.\"), // ulong.MaxValue + 1\n                new Tuple<string, string>(\"{\\\"ULong\\\":-1}\",\"Error converting value -1 to type 'System.UInt64'. Path 'ULong', line 1, position 11.\"),\n            };\n\n            // Need to ensure that the type is registered as a table to force the id property check\n            DefaultSerializer.SerializerSettings.ContractResolver.ResolveTableName(typeof(ULongType));\n\n            foreach (var testCase in testCases)\n            {\n                var input = testCase.Item1;\n                var expected = testCase.Item2;\n\n                ULongType actual = new ULongType();\n                Exception actualError = null;\n                try\n                {\n                    DefaultSerializer.Deserialize(input, actual);\n                }\n                catch (Exception e)\n                {\n                    actualError = e;\n                }\n\n                Assert.AreEqual(actualError.Message, expected);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.5.11.0\" newVersion=\"1.5.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.5.11.0\" newVersion=\"1.5.11.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"wp80\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"wp80\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Microsoft.WindowsAzure.MobileServices.Test\">\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n                <!-- \n                Styles that define common aspects of the platform look and feel\n                Required by Visual Studio project and item templates\n                 -->\n                <ResourceDictionary Source=\"Common/StandardStyles.xaml\"/>\n            </ResourceDictionary.MergedDictionaries>\n        </ResourceDictionary>\n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test/App.xaml.cs",
    "content": "﻿using Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing System;\nusing System.Reflection;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.Phone.UI.Input;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\nusing Microsoft.WindowsAzure.MobileServices;\n\n// The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=234227\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default Application class.\n    /// </summary>\n    sealed partial class App : Application\n    {\n        public static MobileServiceClient LoginMobileService;\n\n        /// <summary>\n        /// Gets the test harness used by the application.\n        /// </summary>\n        public static TestHarness Harness { get; private set; }\n\n        /// <summary>\n        /// Initializes the singleton application object.  This is the first line of authored code\n        /// executed, and as such is the logical equivalent of main() or WinMain().\n        /// </summary>\n        public App()\n        {\n            this.InitializeComponent();\n            this.Suspending += OnSuspending;\n            HardwareButtons.BackPressed += HardwareButtons_BackPressed;\n\n            Harness = new TestHarness();\n            Harness.LoadTestAssembly(typeof(MobileServiceSerializerTests).GetTypeInfo().Assembly);            \n            Harness.LoadTestAssembly(typeof(PushFunctional).GetTypeInfo().Assembly);\n            //Harness.LoadTestAssembly(typeof(LoginTests).GetTypeInfo().Assembly);\n        }\n\n        /// <summary>\n        /// Handles back button press.  If app is at the root page of app, don't go back and the\n        /// system will suspend the app.\n        /// </summary>\n        /// <param name=\"sender\">The source of the BackPressed event.</param>\n        /// <param name=\"e\">Details for the BackPressed event.</param>\n        private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)\n        {\n            Frame frame = Window.Current.Content as Frame;\n            if (frame == null)\n            {\n                return;\n            }\n\n            if (frame.CanGoBack)\n            {\n                frame.GoBack();\n                e.Handled = true;\n            }\n        }\n\n        /// <summary>\n        /// Invoked when the application is launched normally by the end user.  Other entry points\n        /// will be used when the application is launched to open a specific file, to display\n        /// search results, and so forth.\n        /// </summary>\n        /// <param name=\"e\">Details about the launch request and process.</param>\n        protected override void OnLaunched(LaunchActivatedEventArgs e)\n        {\n\n#if DEBUG\n            if (System.Diagnostics.Debugger.IsAttached)\n            {\n                this.DebugSettings.EnableFrameRateCounter = true;\n            }\n#endif\n            Frame rootFrame = Window.Current.Content as Frame;\n\n            // Do not repeat app initialization when the Window already has content,\n            // just ensure that the window is active\n            if (rootFrame == null)\n            {\n                // Create a Frame to act as the navigation context and navigate to the first page\n                rootFrame = new Frame();\n\n                // Set the default language\n                rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0];\n\n                rootFrame.NavigationFailed += OnNavigationFailed;\n\n                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)\n                {\n                    //TODO: Load state from previously suspended application\n                }\n\n                // Place the frame in the current Window\n                Window.Current.Content = rootFrame;\n            }\n\n            if (rootFrame.Content == null)\n            {\n                // When the navigation stack isn't restored navigate to the first page,\n                // configuring the new page by passing required information as a navigation\n                // parameter\n                rootFrame.Navigate(typeof(MainPage), e.Arguments);\n            }\n            // Ensure the current window is active\n            Window.Current.Activate();\n        }\n\n        protected override void OnActivated(IActivatedEventArgs e)\n        {\n            Frame rootFrame = Window.Current.Content as Frame;\n\n            //Check if this is a continuation\n            var continuationEventArgs = e as IContinuationActivatedEventArgs;\n            if (continuationEventArgs != null)\n            {\n                if (continuationEventArgs.Kind == ActivationKind.WebAuthenticationBrokerContinuation)\n                {\n                    LoginMobileService.LoginComplete(continuationEventArgs as WebAuthenticationBrokerContinuationEventArgs);\n                }\n            }\n\n            Window.Current.Activate();\n        }\n\n        /// <summary>\n        /// Invoked when Navigation to a certain page fails.\n        /// </summary>\n        /// <param name=\"sender\">The Frame which failed navigation.</param>\n        /// <param name=\"e\">Details about the navigation failure.</param>\n        private void OnNavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            throw new Exception(\"Failed to load Page \" + e.SourcePageType.FullName);\n        }\n\n        /// <summary>\n        /// Invoked when application execution is being suspended.  Application state is saved\n        /// without knowing whether the application will be terminated or resumed with the contents\n        /// of memory still intact.\n        /// </summary>\n        /// <param name=\"sender\">The source of the suspend request.</param>\n        /// <param name=\"e\">Details about the suspend request.</param>\n        private void OnSuspending(object sender, SuspendingEventArgs e)\n        {\n            var deferral = e.SuspendingOperation.GetDeferral();\n            //TODO: Save application state and stop any background activity\n            deferral.Complete();\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test/MainPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Microsoft.WindowsAzure.MobileServices.Test\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n    <Page.Resources>\n        <Style x:Key=\"SubheaderStyle\" TargetType=\"TextBlock\">\n            <Setter Property=\"Margin\" Value=\"0 0 0 5\" />\n            <Setter Property=\"FontSize\" Value=\"18\" />\n            <Setter Property=\"FontWeight\" Value=\"Bold\" />\n            <Setter Property=\"LineHeight\" Value=\"20\" />\n        </Style>\n        <Style x:Key=\"HeaderStyle\" TargetType=\"TextBlock\">\n            <Setter Property=\"Foreground\" Value=\"#0094ff\" />\n            <Setter Property=\"FontSize\" Value=\"45\" />            \n        </Style>\n        <Style x:Key=\"DialogStyle\" TargetType=\"Border\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"BorderBrush\" Value=\"White\" />\n            <Setter Property=\"BorderThickness\" Value=\"2\" />\n            <Setter Property=\"Padding\" Value=\"15\" />\n            <Setter Property=\"CornerRadius\" Value=\"5\" />\n        </Style>\n        <Style x:Key=\"LabelStyle\" TargetType=\"TextBlock\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Bottom\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Left\" />\n            <Setter Property=\"Margin\" Value=\"0 5 0 0\" />            \n        </Style>\n        <Style x:Key=\"InputStyle\" TargetType=\"TextBox\">\n            <Setter Property=\"MinWidth\" Value=\"300\" />\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n        </Style>\n    </Page.Resources>\n\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\" />\n            <RowDefinition Height=\"Auto\" />\n            <RowDefinition Height=\"*\" />\n        </Grid.RowDefinitions>\n        <TextBlock Grid.Row=\"0\" Style=\"{StaticResource SubheaderStyle}\">Microsoft Azure Mobile Services</TextBlock>\n        <TextBlock Grid.Row=\"1\"  Style=\"{StaticResource HeaderStyle}\">C# Client Library Tests</TextBlock>\n        <Border Grid.Row=\"2\" Style=\"{StaticResource DialogStyle}\">\n            <Grid>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\" />\n                    <RowDefinition Height=\"Auto\" />\n                    <RowDefinition Height=\"Auto\" />\n                    <RowDefinition Height=\"Auto\" />\n                    <RowDefinition Height=\"Auto\" />\n                    <RowDefinition Height=\"Auto\" />\n                    <RowDefinition Height=\"Auto\" />\n                </Grid.RowDefinitions>\n\n                <TextBlock\n                      Grid.Row=\"0\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource LabelStyle}\"\n                      Text=\"Mobile Service Uri:\" />\n                <TextBox\n                      x:Name=\"txtRuntimeUri\"\n                      Grid.Row=\"1\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource InputStyle}\" Margin=\"0,0,10,10\" />\n\n                <TextBlock\n                      Grid.Row=\"2\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource LabelStyle}\"\n                      Text=\"Mobile Service Key:\" />\n                <TextBox\n                      x:Name=\"txtRuntimeKey\"\n                      Grid.Row=\"3\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource InputStyle}\" Margin=\"0,-0.167,10,10\" />\n\n                <TextBlock\n                      Grid.Row=\"4\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource LabelStyle}\"\n                      Text=\"Tags:\" />\n                <TextBox\n                      x:Name=\"txtTags\"\n                      Grid.Row=\"5\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource InputStyle}\" Margin=\"0,-0.167,10,10\" />\n\n                <StackPanel\n                        Grid.Row=\"6\"\n                        Grid.Column=\"0\"\n                        HorizontalAlignment=\"Right\" Orientation=\"Horizontal\">\n                    <Button\n                          x:Name=\"btnLoginTests\"                         \n                          Content=\"Login Tests\"\n                          MinWidth=\"100\"\n                          Click=\"ExecuteLoginTests\" />\n                    <Button\n                          x:Name=\"btnUnitTests\"\n                          Content=\"Unit Tests\"\n                          MinWidth=\"100\"\n                          Click=\"ExecuteUnitTests\" />\n                </StackPanel>\n            </Grid>\n        </Border>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test/MainPage.xaml.cs",
    "content": "﻿using Microsoft.WindowsAzure.MobileServices.Test;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.Storage;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\n// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        public MainPage()\n        {\n            this.InitializeComponent();\n\n            string mobileServiceRuntimeURL = ApplicationData.Current.LocalSettings.Values[\"MobileServiceRuntimeUrl\"] as string;\n            string mobileServiceRuntimeKey = ApplicationData.Current.LocalSettings.Values[\"MobileServiceRuntimeKey\"] as string;\n            string tags = ApplicationData.Current.LocalSettings.Values[\"MobileServiceTags\"] as string;\n\n            txtRuntimeUri.Text = mobileServiceRuntimeURL ?? \"\";\n            txtRuntimeKey.Text = mobileServiceRuntimeKey ?? \"\";\n            txtTags.Text = tags ?? \"\";\n\n            Loaded += (s, e) => btnUnitTests.Focus(FocusState.Keyboard);\n        }\n\n        /// <summary>\n        /// Start the unit test run.\n        /// </summary>\n        /// <param name=\"sender\">Start button.</param>\n        /// <param name=\"e\">Event arguments.</param>\n        private void ExecuteUnitTests(object sender, RoutedEventArgs e)\n        {\n            // Get the test settings from the UI\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeUrl\"] = txtRuntimeUri.Text;\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeKey\"] = txtRuntimeKey.Text;\n            App.Harness.Settings.TagExpression = txtTags.Text;\n\n            ApplicationData.Current.LocalSettings.Values[\"MobileServiceRuntimeUrl\"] = txtRuntimeUri.Text;\n            ApplicationData.Current.LocalSettings.Values[\"MobileServiceRuntimeKey\"] = txtRuntimeKey.Text;\n            ApplicationData.Current.LocalSettings.Values[\"MobileServiceTags\"] = txtTags.Text;\n\n            if (!string.IsNullOrEmpty(App.Harness.Settings.TagExpression))\n            {\n                App.Harness.Settings.TagExpression += \" - notWP81\";\n            }\n            else\n            {\n                App.Harness.Settings.TagExpression = \"!notWP81\";\n            }\n\n            Frame.Navigate(typeof(TestPage));\n        }\n\n        /// <summary>\n        /// Loads the login test page.\n        /// </summary>\n        /// <param name=\"sender\">Login button.</param>\n        /// <param name=\"e\">Event arguments.</param>\n        private void ExecuteLoginTests(object sender, RoutedEventArgs e)\n        {\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeUrl\"] = txtRuntimeUri.Text;\n            ApplicationData.Current.LocalSettings.Values[\"MobileServiceRuntimeUrl\"] = txtRuntimeUri.Text;\n\n            Frame.Navigate(typeof(LoginPage));\n        }\n\n        /// <summary>\n        /// Invoked when this page is about to be displayed in a Frame.\n        /// </summary>\n        /// <param name=\"e\">Event data that describes how this page was reached.  The Parameter\n        /// property is typically used to configure the page.</param>\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test/Microsoft.WindowsAzure.Mobile.WP81.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{92CD4A69-950A-45FE-B8EA-774BA69E7482}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.Test</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.WP81.Test</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformVersion>8.1</TargetPlatformVersion>\n    <MinimumVisualStudioVersion>12</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{76F1466A-8B6D-4E39-A767-685A06062A39};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE; WINDOWS_PHONE_APP</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.WindowsPhone81\\Microsoft.WindowsAzure.Mobile.Ext.WP81.csproj\">\n      <Project>{02eef75a-d824-4203-b243-c1b97b0d35a9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.WP81</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{a2500bd2-a9a2-4085-9978-dee3675b02dd}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{d8bbc92a-b213-463b-911d-3a106f91d5f9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\Functional\\PushFunctional.Test.cs\">\n      <Link>Functional\\PushFunctional.Test.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\TestPlatform\\CurrentTestPlatform.cs\">\n      <Link>TestPlatform\\CurrentTestPlatform.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\TestPlatform\\PushTestUtility.cs\">\n      <Link>TestPlatform\\PushTestUtility.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\PlatformTests\\LoginTests.cs\">\n      <Link>PlatformTests\\LoginTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\UI\\GroupDescription.cs\">\n      <Link>UI\\GroupDescription.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\UI\\TestDescription.cs\">\n      <Link>UI\\TestDescription.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\UI\\TestPage.xaml.cs\">\n      <Link>UI\\TestPage.xaml.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\UnitTests\\Collections\\IncrementalLoadingMobileServiceCollection.Test.cs\">\n      <Link>UnitTests\\Collections\\IncrementalLoadingMobileServiceCollection.Test.cs</Link>\n    </Compile>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"UI\\LoginPage.xaml.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Assets\\Logo.scale-100.png\" />\n    <Content Include=\"Assets\\SmallLogo.scale-100.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-100.png\" />\n    <Content Include=\"Assets\\StoreLogo.scale-100.png\" />\n    <Content Include=\"Assets\\WideLogo.scale-100.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Page Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\Common\\StandardStyles.xaml\">\n      <Link>Common\\StandardStyles.xaml</Link>\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\UI\\TestPage.xaml\">\n      <Link>UI\\TestPage.xaml</Link>\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"UI\\LoginPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\wpa81\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\wpa81\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '12.0' \">\n    <VisualStudioVersion>12.0</VisualStudioVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(TargetPlatformIdentifier)' == '' \">\n    <TargetPlatformIdentifier>WindowsPhoneApp</TargetPlatformIdentifier>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\$(TargetPlatformVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:m2=\"http://schemas.microsoft.com/appx/2013/manifest\" xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\">\n  <Identity Name=\"90d8932d-7158-463d-9db4-2cbce122d372\" Publisher=\"CN=phvannor\" Version=\"1.0.0.0\" />\n  <Properties>\n    <DisplayName>Microsoft.WindowsAzure.Mobile.WP81.Test</DisplayName>\n    <PublisherDisplayName>phvannor</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n  <Prerequisites>\n    <OSMinVersion>6.3.0</OSMinVersion>\n    <OSMaxVersionTested>6.3.0</OSMaxVersionTested>\n  </Prerequisites>\n  <mp:PhoneIdentity PhoneProductId=\"90d8932d-7158-463d-9db4-2cbce122d372\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\" />\n  <Resources>\n    <Resource Language=\"x-generate\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"x90d8932dy7158y463dy9db4y2cbce122d372x\" Executable=\"$targetnametoken$.exe\" EntryPoint=\"Microsoft.WindowsAzure.MobileServices.WindowsStore.Test.App\">\n      <m3:VisualElements DisplayName=\"Microsoft.WindowsAzure.Mobile.WP81.Test\" Description=\"Windows Azure Mobile Services Test App\" BackgroundColor=\"#464646\" ForegroundText=\"light\" Square150x150Logo=\"Assets\\Logo.png\" Square44x44Logo=\"Assets\\SmallLogo.png\" xmlns:m3=\"http://schemas.microsoft.com/appx/2014/manifest\">\n        <m3:DefaultTile Wide310x150Logo=\"Assets\\WideLogo.png\" Square71x71Logo=\"Assets\\SmallLogo.png\" >\n        </m3:DefaultTile>\n        <m3:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </m3:VisualElements>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Resources;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.1.0.0\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]\n[assembly: NeutralResourcesLanguageAttribute(\"\")]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test/UI/LoginPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.LoginPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Microsoft.WindowsAzure.MobileServices.Test\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n    <Page.Resources>\n        <Style x:Key=\"SubheaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n            <Setter Property=\"FontSize\" Value=\"16\" />\n            <Setter Property=\"FontWeight\" Value=\"Bold\" />\n            <Setter Property=\"LineHeight\" Value=\"20\" />\n        </Style>\n        <Style x:Key=\"HeaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n            <Setter Property=\"Foreground\" Value=\"#0094ff\" />\n            <Setter Property=\"FontSize\" Value=\"40\" />\n        </Style>\n        <Style x:Key=\"DialogStyle\" TargetType=\"Border\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"BorderBrush\" Value=\"White\" />\n            <Setter Property=\"BorderThickness\" Value=\"2\" />\n            <Setter Property=\"Padding\" Value=\"10\" />\n            <Setter Property=\"CornerRadius\" Value=\"2\" />\n        </Style>\n        <Style x:Key=\"ButtonStyleLeft\" TargetType=\"Button\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Left\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"Height\" Value=\"50\" />\n            <Setter Property=\"Width\" Value=\"200\" />\n        </Style>\n        <Style x:Key=\"ButtonStyleRight\" TargetType=\"Button\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Right\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"Height\" Value=\"50\" />\n            <Setter Property=\"Width\" Value=\"200\" />\n        </Style>\n        <Style x:Key=\"LabelStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Right\" />\n        </Style>\n        <Style x:Key=\"InputStyle\" TargetType=\"TextBox\">\n            <Setter Property=\"MinWidth\" Value=\"400\" />\n            <Setter Property=\"Margin\" Value=\"5\" />\n        </Style>\n    </Page.Resources>\n    <Border Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid Margin=\"5\" VerticalAlignment=\"Top\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n            </Grid.RowDefinitions>\n            <TextBlock Grid.Row=\"0\" Style=\"{StaticResource SubheaderStyle}\">Microsoft Azure Mobile Services</TextBlock>\n            <TextBlock Grid.Row=\"1\"  Style=\"{StaticResource HeaderStyle}\">C# Client Library Tests</TextBlock>\n            <Border Grid.Row=\"2\" Style=\"{StaticResource DialogStyle}\">\n                <Grid HorizontalAlignment=\"Center\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\" />\n                        <ColumnDefinition Width=\"220*\" />\n                    </Grid.ColumnDefinitions>\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                    </Grid.RowDefinitions>\n\n                    <Button\n                        Grid.Row=\"0\"\n                        Grid.Column=\"0\"\n                        x:Name=\"MicrosoftAccountButton\"\n                        Content=\"Microsoft Account\" \n                        Style=\"{StaticResource ButtonStyleLeft}\"\n                        Click=\"LoginButtonClicked\" Width=\"Auto\" HorizontalAlignment=\"Center\"/>\n                    <Button\n                        Grid.Row=\"0\"\n                        Grid.Column=\"1\"\n                        x:Name=\"FacebookButton\"\n                        Content=\"Facebook\" \n                        Style=\"{StaticResource ButtonStyleRight}\"\n                        Click=\"LoginButtonClicked\" Width=\"Auto\" HorizontalAlignment=\"Center\"/>\n                    <Button \n                        Grid.Row=\"1\"\n                        Grid.Column=\"0\"\n                        x:Name=\"TwitterButton\"\n                        Content=\"Twitter\" \n                        Style=\"{StaticResource ButtonStyleLeft}\"\n                        Click=\"LoginButtonClicked\" Width=\"Auto\" HorizontalAlignment=\"Center\"/>\n                    <Button \n                        Grid.Row=\"1\"\n                        Grid.Column=\"1\"\n                        x:Name=\"GoogleButton\"\n                        Content=\"Google\" \n                        Style=\"{StaticResource ButtonStyleRight}\"\n                        Click=\"LoginButtonClicked\" Width=\"Auto\" HorizontalAlignment=\"Center\"/>\n                    <CheckBox\n                        Grid.Row=\"2\"\n                        Grid.Column=\"0\"\n                        x:Name=\"UseSingleSignOnCheckBox\"\n                        Content=\"Use Single Sign-On\"\n                        IsChecked=\"true\" Margin=\"0,10\" HorizontalAlignment=\"Center\" FontSize=\"14\"/>\n                    <CheckBox\n                        Grid.Row=\"2\"\n                        Grid.Column=\"1\"\n                        x:Name=\"UseStringProviderOverloadCheckBox\"\n                        Content=\"Use overload with string provider\"\n                        IsChecked=\"False\" Margin=\"0,10\" HorizontalAlignment=\"Center\" FontSize=\"14\"/>\n                    <TextBlock \n                        Grid.Row=\"3\"\n                        Grid.Column=\"0\"\n                        Grid.ColumnSpan=\"2\"\n            \t        HorizontalAlignment=\"Left\" \n            \t        TextWrapping=\"Wrap\" \n            \t        Height=\"20\" \n            \t        Width=\"200\"\n                        Margin=\"0,10\"\n                        Text=\"Test Result:\"\n                        FontSize=\"15\">\n                    </TextBlock>\n                    <TextBlock\n                        Grid.Row=\"4\"\n                        Grid.Column=\"0\"\n                        Grid.ColumnSpan=\"2\"\n                        x:Name=\"TestResultsTextBlock\"\n                        HorizontalAlignment=\"Left\" \n            \t        TextWrapping=\"Wrap\"\n                        Text=\"\"\n                        FontSize=\"12\"/>\n                </Grid>\n            </Border>\n        </Grid>\n    </Border>\n</Page>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test/UI/LoginPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public sealed partial class LoginPage : Page\n    {\n        public LoginPage()\n        {\n            this.InitializeComponent();\n        }\n\n        private async void LoginButtonClicked(object sender, RoutedEventArgs e)\n        {\n            Button buttonClicked = sender as Button;\n            if (buttonClicked != null)\n            {\n                String testName = null;\n                MobileServiceAuthenticationProvider provider =\n                    MobileServiceAuthenticationProvider.MicrosoftAccount;\n\n                if (buttonClicked.Name.Contains(\"MicrosoftAccount\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.MicrosoftAccount;\n                    testName = \"Microsoft Account Login\";\n                }\n                else if (buttonClicked.Name.Contains(\"Facebook\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.Facebook;\n                    testName = \"Facebook Login\";\n                }\n                else if (buttonClicked.Name.Contains(\"Twitter\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.Twitter;\n                    testName = \"Twitter Login\";\n                }\n                else if (buttonClicked.Name.Contains(\"Google\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.Google;\n                    testName = \"Google Login\";\n                }\n\n                bool useSingleSignOn = UseSingleSignOnCheckBox.IsChecked.Value;\n                bool useStringProviderOverload = UseStringProviderOverloadCheckBox.IsChecked.Value;\n\n                TestResultsTextBlock.Text = await LoginTests.ExecuteTest(testName, () => LoginTests.TestLoginAsync(provider, useSingleSignOn, useStringProviderOverload));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"System.Threading.Tasks\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n\t\t\t</dependentAssembly>\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"System.Net.Http\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n\t\t\t</dependentAssembly>\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"System.Net.Primitives\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n\t\t\t</dependentAssembly>\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"System.IO\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n\t\t\t</dependentAssembly>\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"System.Runtime\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-4.0.10.0\" newVersion=\"4.0.10.0\" />\n\t\t\t</dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsPhone81.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"wpa81\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"wpa81\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"wpa81\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"wpa81\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/App.xaml",
    "content": "﻿<Application\n  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n  xmlns:local=\"using:Microsoft.WindowsAzure.MobileServices.Test\"\n  x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.App\"\n  RequestedTheme=\"Dark\">\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n                <!-- \n                Styles that define common aspects of the platform look and feel\n                Required by Visual Studio project and item templates\n                 -->\n                <ResourceDictionary Source=\"Common/StandardStyles.xaml\"/>\n            </ResourceDictionary.MergedDictionaries>\n        </ResourceDictionary>\n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/App.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Reflection;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Windows.ApplicationModel.Activation;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default\n    /// Application class.\n    /// </summary>\n    public sealed partial class App : Application\n    {\n        public static MobileServiceClient LoginMobileService;\n\n        /// <summary>\n        /// Gets the test harness used by the application.\n        /// </summary>\n        public static TestHarness Harness { get; private set; }\n\n        /// <summary>\n        /// Initialize the test harness.\n        /// </summary>\n        static App()\n        {\n            Harness = new TestHarness();\n            Harness.LoadTestAssembly(typeof(MobileServiceSerializerTests).GetTypeInfo().Assembly);\n            Harness.LoadTestAssembly(typeof(LoginTests).GetTypeInfo().Assembly);\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the App class.\n        /// </summary>\n        public App()\n        {\n            InitializeComponent();\n        }\n\n        /// <summary>\n        /// Setup the application and initialize the tests.\n        /// </summary>\n        /// <param name=\"args\">\n        /// Details about the launch request and process.\n        /// </param>\n        protected override void OnLaunched(LaunchActivatedEventArgs args)\n        {\n            // Do not repeat app initialization when already running, just\n            // ensure that the window is active\n            if (args.PreviousExecutionState == ApplicationExecutionState.Running)\n            {\n                Window.Current.Activate();\n                return;\n            }\n\n            Frame rootFrame = new Frame();\n            rootFrame.Navigate(typeof(MainPage));\n            Window.Current.Content = rootFrame;\n            Window.Current.Activate();\n\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/Common/StandardStyles.xaml",
    "content": "﻿<!--\n    This file contains XAML styles that simplify application development.\n\n    These are not merely convenient, but are required by most Visual Studio project and item templates.\n    Removing, renaming, or otherwise modifying the content of these files may result in a project that\n    does not build, or that will not build once additional pages are added.  If variations on these\n    styles are desired it is recommended that you copy the content under a new name and modify your\n    private copy.\n-->\n\n<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <!-- Non-brush values that vary across themes -->\n\n    <ResourceDictionary.ThemeDictionaries>\n        <ResourceDictionary x:Key=\"Default\">\n            <x:String x:Key=\"BackButtonGlyph\">&#xE071;</x:String>\n            <x:String x:Key=\"BackButtonSnappedGlyph\">&#xE0BA;</x:String>\n        </ResourceDictionary>\n\n        <ResourceDictionary x:Key=\"HighContrast\">\n            <x:String x:Key=\"BackButtonGlyph\">&#xE071;</x:String>\n            <x:String x:Key=\"BackButtonSnappedGlyph\">&#xE0C4;</x:String>\n        </ResourceDictionary>\n    </ResourceDictionary.ThemeDictionaries>\n\n    <x:String x:Key=\"ChevronGlyph\">&#xE26B;</x:String>\n\n    <!-- RichTextBlock styles -->\n\n    <Style x:Key=\"BasicRichTextStyle\" TargetType=\"RichTextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationForegroundThemeBrush}\"/>\n        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\"/>\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style x:Key=\"BaselineRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BasicRichTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"ItemRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BaselineRichTextStyle}\"/>\n\n    <Style x:Key=\"BodyRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BaselineRichTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiLight\"/>\n    </Style>\n\n    <!-- TextBlock styles -->\n\n    <Style x:Key=\"BasicTextStyle\" TargetType=\"TextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationForegroundThemeBrush}\"/>\n        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\"/>\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style x:Key=\"BaselineTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"HeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"40\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-2\" Y=\"8\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"SubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"26.667\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"30\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"6\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"TitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiBold\"/>\n    </Style>\n\n    <Style x:Key=\"SubtitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n    </Style>\n\n    <Style x:Key=\"ItemTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\"/>\n\n    <Style x:Key=\"BodyTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiLight\"/>\n    </Style>\n\n    <Style x:Key=\"CaptionTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"12\"/>\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n    </Style>\n\n    <Style x:Key=\"GroupHeaderTextStyle\" TargetType=\"TextBlock\">\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n        <Setter Property=\"FontSize\" Value=\"26.667\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"30\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"6\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- Button styles -->\n    \n    <!--\n        TextButtonStyle is used to style a Button using subheader-styled text with no other adornment.  There\n        are two styles that are based on TextButtonStyle (TextPrimaryButtonStyle and TextSecondaryButtonStyle)\n        which are used in the GroupedItemsPage as a group header and in the FileOpenPickerPage for triggering\n        commands.\n    -->\n    <Style x:Key=\"TextButtonStyle\" TargetType=\"ButtonBase\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"MinHeight\" Value=\"0\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"ButtonBase\">\n                    <Grid Background=\"Transparent\">\n                        <ContentPresenter x:Name=\"Text\" Content=\"{TemplateBinding Content}\" />\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualWhite\" Storyboard.TargetProperty=\"Opacity\"/>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualBlack\" Storyboard.TargetProperty=\"Opacity\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\"/>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CheckStates\">\n                                <VisualState x:Name=\"Checked\"/>\n                                <VisualState x:Name=\"Unchecked\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Indeterminate\"/>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"TextPrimaryButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource TextButtonStyle}\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationHeaderForegroundThemeBrush}\"/>\n    </Style>\n\n    <Style x:Key=\"TextSecondaryButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource TextButtonStyle}\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n    </Style>\n\n    <!--\n        TextRadioButtonStyle is used to style a RadioButton using subheader-styled text with no other adornment.\n        This style is used in the SearchResultsPage to allow selection among filters.\n    -->\n    <Style x:Key=\"TextRadioButtonStyle\" TargetType=\"RadioButton\" BasedOn=\"{StaticResource TextButtonStyle}\">\n        <Setter Property=\"Margin\" Value=\"0,0,30,0\"/>\n    </Style>\n\n    <!--\n        AppBarButtonStyle is used to style a Button (or ToggleButton) for use in an App Bar.  Content will be centered \n        and should fit within the 40 pixel radius glyph provided.  16-point Segoe UI Symbol is used for content text \n        to simplify the use of glyphs from that font.  AutomationProperties.Name is used for the text below the glyph.\n    -->\n    <Style x:Key=\"AppBarButtonStyle\" TargetType=\"ButtonBase\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"20\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"App Bar Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"ButtonBase\">\n                    <Grid x:Name=\"RootGrid\" Width=\"100\" Background=\"Transparent\">\n                        <StackPanel VerticalAlignment=\"Top\" Margin=\"0,12,0,11\">\n                            <Grid Width=\"40\" Height=\"40\" Margin=\"0,0,0,5\" HorizontalAlignment=\"Center\">\n                                <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0A8;\" FontFamily=\"Segoe UI Symbol\" FontSize=\"53.333\" Margin=\"-4,-19,0,0\" Foreground=\"{StaticResource AppBarItemBackgroundThemeBrush}\"/>\n                                <TextBlock x:Name=\"OutlineGlyph\" Text=\"&#xE0A7;\" FontFamily=\"Segoe UI Symbol\" FontSize=\"53.333\" Margin=\"-4,-19,0,0\"/>\n                                <ContentPresenter x:Name=\"Content\" HorizontalAlignment=\"Center\" Margin=\"-1,-1,0,0\" VerticalAlignment=\"Center\"/>\n                            </Grid>\n                            <TextBlock\n                                x:Name=\"TextLabel\"\n                                Text=\"{TemplateBinding AutomationProperties.Name}\"\n                                Foreground=\"{StaticResource AppBarItemForegroundThemeBrush}\"\n                                Margin=\"0,0,2,0\"\n                                FontSize=\"12\"\n                                TextAlignment=\"Center\"\n                                Width=\"88\"\n                                MaxHeight=\"32\"\n                                TextTrimming=\"WordEllipsis\"\n                                Style=\"{StaticResource BasicTextStyle}\"/>\n                        </StackPanel>\n                        <Rectangle\n                                x:Name=\"FocusVisualWhite\"\n                                IsHitTestVisible=\"False\"\n                                Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                                StrokeEndLineCap=\"Square\"\n                                StrokeDashArray=\"1,1\"\n                                Opacity=\"0\"\n                                StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                                x:Name=\"FocusVisualBlack\"\n                                IsHitTestVisible=\"False\"\n                                Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                                StrokeEndLineCap=\"Square\"\n                                StrokeDashArray=\"1,1\"\n                                Opacity=\"0\"\n                                StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"ApplicationViewStates\">\n                                <VisualState x:Name=\"FullScreenLandscape\"/>\n                                <VisualState x:Name=\"Filled\"/>\n                                <VisualState x:Name=\"FullScreenPortrait\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Width\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"60\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Snapped\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Width\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"60\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                                Storyboard.TargetName=\"FocusVisualWhite\"\n                                                Storyboard.TargetProperty=\"Opacity\"\n                                                To=\"1\"\n                                                Duration=\"0\"/>\n                                        <DoubleAnimation\n                                                Storyboard.TargetName=\"FocusVisualBlack\"\n                                                Storyboard.TargetProperty=\"Opacity\"\n                                                To=\"1\"\n                                                Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CheckStates\">\n                                <VisualState x:Name=\"Checked\">\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0\" To=\"0\" Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Opacity\"/>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundCheckedGlyph\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unchecked\"/>\n                                <VisualState x:Name=\"Indeterminate\"/>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- \n        Standard AppBarButton Styles for use with Button and ToggleButton\n    \n        An AppBarButton Style is provided for each of the glyphs in the Segoe UI Symbol font.  \n        Uncomment any style you reference (as not all may be required).\n    -->\n\n    <!--\n    \n    <Style x:Key=\"SkipBackAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SkipBackAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skip Back\"/>\n        <Setter Property=\"Content\" Value=\"&#xE100;\"/>\n    </Style>\n    <Style x:Key=\"SkipAheadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SkipAheadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skip Ahead\"/>\n        <Setter Property=\"Content\" Value=\"&#xE101;\"/>\n    </Style>\n    <Style x:Key=\"PlayAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PlayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Play\"/>\n        <Setter Property=\"Content\" Value=\"&#xE102;\"/>\n    </Style>\n    <Style x:Key=\"PauseAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PauseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pause\"/>\n        <Setter Property=\"Content\" Value=\"&#xE103;\"/>\n    </Style>\n    <Style x:Key=\"EditAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"EditAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Edit\"/>\n        <Setter Property=\"Content\" Value=\"&#xE104;\"/>\n    </Style>\n    <Style x:Key=\"SaveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SaveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Save\"/>\n        <Setter Property=\"Content\" Value=\"&#xE105;\"/>\n    </Style>\n    <Style x:Key=\"DeleteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DeleteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Delete\"/>\n        <Setter Property=\"Content\" Value=\"&#xE106;\"/>\n    </Style>\n    <Style x:Key=\"DiscardAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DiscardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Discard\"/>\n        <Setter Property=\"Content\" Value=\"&#xE107;\"/>\n    </Style>\n    <Style x:Key=\"RemoveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RemoveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Remove\"/>\n        <Setter Property=\"Content\" Value=\"&#xE108;\"/>\n    </Style>\n    <Style x:Key=\"AddAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AddAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Add\"/>\n        <Setter Property=\"Content\" Value=\"&#xE109;\"/>\n    </Style>\n    <Style x:Key=\"NoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"No\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10A;\"/>\n    </Style>\n    <Style x:Key=\"YesAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"YesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Yes\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10B;\"/>\n    </Style>\n    <Style x:Key=\"MoreAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MoreAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"More\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10C;\"/>\n    </Style>\n    <Style x:Key=\"RedoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RedoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Redo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10D;\"/>\n    </Style>\n    <Style x:Key=\"UndoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UndoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Undo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10E;\"/>\n    </Style>\n    <Style x:Key=\"HomeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HomeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Home\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10F;\"/>\n    </Style>\n    <Style x:Key=\"OutAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Out\"/>\n        <Setter Property=\"Content\" Value=\"&#xE110;\"/>\n    </Style>\n    <Style x:Key=\"NextAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NextAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Next\"/>\n        <Setter Property=\"Content\" Value=\"&#xE111;\"/>\n    </Style>\n    <Style x:Key=\"PreviousAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PreviousAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Previous\"/>\n        <Setter Property=\"Content\" Value=\"&#xE112;\"/>\n    </Style>\n    <Style x:Key=\"FavoriteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FavoriteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Favorite\"/>\n        <Setter Property=\"Content\" Value=\"&#xE113;\"/>\n    </Style>\n    <Style x:Key=\"PhotoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhotoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Photo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE114;\"/>\n    </Style>\n    <Style x:Key=\"SettingsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SettingsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Settings\"/>\n        <Setter Property=\"Content\" Value=\"&#xE115;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"VideoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VideoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Video\"/>\n        <Setter Property=\"Content\" Value=\"&#xE116;\"/>\n    </Style>\n    <Style x:Key=\"RefreshAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RefreshAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Refresh\"/>\n        <Setter Property=\"Content\" Value=\"&#xE117;\"/>\n    </Style>\n    <Style x:Key=\"DownloadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DownloadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Download\"/>\n        <Setter Property=\"Content\" Value=\"&#xE118;\"/>\n    </Style>\n    <Style x:Key=\"MailAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mail\"/>\n        <Setter Property=\"Content\" Value=\"&#xE119;\"/>\n    </Style>\n    <Style x:Key=\"SearchAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SearchAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Search\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11A;\"/>\n    </Style>\n    <Style x:Key=\"HelpAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HelpAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Help\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11B;\"/>\n    </Style>\n    <Style x:Key=\"UploadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UploadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Upload\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11C;\"/>\n    </Style>\n    <Style x:Key=\"EmojiAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"EmojiAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Emoji\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11D;\"/>\n    </Style>\n    <Style x:Key=\"TwoPageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TwoPageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Two Page\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11E;\"/>\n    </Style>\n    <Style x:Key=\"LeaveChatAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LeaveChatAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Upload\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11F;\"/>\n    </Style>\n    <Style x:Key=\"MailForwardAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailForwardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Forward Mail\"/>\n        <Setter Property=\"Content\" Value=\"&#xE120;\"/>\n    </Style>\n    <Style x:Key=\"ClockAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ClockAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Clock\"/>\n        <Setter Property=\"Content\" Value=\"&#xE121;\"/>\n    </Style>\n    <Style x:Key=\"SendAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SendAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Send\"/>\n        <Setter Property=\"Content\" Value=\"&#xE122;\"/>\n    </Style>\n    <Style x:Key=\"CropAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CropAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Crop\"/>\n        <Setter Property=\"Content\" Value=\"&#xE123;\"/>\n    </Style>\n    <Style x:Key=\"RotateCameraAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RotateCameraAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Rotate Camera\"/>\n        <Setter Property=\"Content\" Value=\"&#xE124;\"/>\n    </Style>\n    <Style x:Key=\"PeopleAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PeopleAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"People\"/>\n        <Setter Property=\"Content\" Value=\"&#xE125;\"/>\n    </Style>\n    <Style x:Key=\"ClosePaneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ClosePaneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Close Pane\"/>\n        <Setter Property=\"Content\" Value=\"&#xE126;\"/>\n    </Style>\n    <Style x:Key=\"OpenPaneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenPaneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open Pane\"/>\n        <Setter Property=\"Content\" Value=\"&#xE127;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"WorldAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"WorldAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"World\"/>\n        <Setter Property=\"Content\" Value=\"&#xE128;\"/>\n    </Style>\n    <Style x:Key=\"FlagAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FlagAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Flag\"/>\n        <Setter Property=\"Content\" Value=\"&#xE129;\"/>\n    </Style>\n    <Style x:Key=\"PreviewLinkAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PreviewLinkAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Preview Link\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12A;\"/>\n    </Style>\n    <Style x:Key=\"GlobeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GlobeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Globe\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12B;\"/>\n    </Style>\n    <Style x:Key=\"TrimAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TrimAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Trim\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12C;\"/>\n    </Style>\n    <Style x:Key=\"AttachCameraAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AttachCameraAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Attach Camera\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12D;\"/>\n    </Style>\n    <Style x:Key=\"ZoomInAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZoomInAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zoom In\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12E;\"/>\n    </Style>\n    <Style x:Key=\"BookmarksAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BookmarksAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Bookmarks\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12F;\"/>\n    </Style>\n    <Style x:Key=\"DocumentAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DocumentAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Document\"/>\n        <Setter Property=\"Content\" Value=\"&#xE130;\"/>\n    </Style>\n    <Style x:Key=\"ProtectedDocumentAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ProtectedDocumentAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Protected Document\"/>\n        <Setter Property=\"Content\" Value=\"&#xE131;\"/>\n    </Style>\n    <Style x:Key=\"PageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Page\"/>\n        <Setter Property=\"Content\" Value=\"&#xE132;\"/>\n    </Style>\n    <Style x:Key=\"BulletsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BulletsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Bullets\"/>\n        <Setter Property=\"Content\" Value=\"&#xE133;\"/>\n    </Style>\n    <Style x:Key=\"CommentAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CommentAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Comment\"/>\n        <Setter Property=\"Content\" Value=\"&#xE134;\"/>\n    </Style>\n    <Style x:Key=\"Mail2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Mail2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mail2\"/>\n        <Setter Property=\"Content\" Value=\"&#xE135;\"/>\n    </Style>\n    <Style x:Key=\"ContactInfoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ContactInfoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Contact Info\"/>\n        <Setter Property=\"Content\" Value=\"&#xE136;\"/>\n    </Style>\n    <Style x:Key=\"HangUpAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HangUpAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Hang Up\"/>\n        <Setter Property=\"Content\" Value=\"&#xE137;\"/>\n    </Style>\n    <Style x:Key=\"ViewAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ViewAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"View All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE138;\"/>\n    </Style>\n    <Style x:Key=\"MapPinAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MapPinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Map Pin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE139;\"/>\n    </Style>\n    <Style x:Key=\"PhoneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhoneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Phone\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13A;\"/>\n    </Style>\n    <Style x:Key=\"VideoChatAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VideoChatAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Video Chat\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13B;\"/>\n    </Style>\n    <Style x:Key=\"SwitchAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SwitchAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Switch\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13C;\"/>\n    </Style>\n    <Style x:Key=\"ContactAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ContactAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Contact\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13D;\"/>\n    </Style>\n\n    -->\n\n    <!--\n\n    <Style x:Key=\"RenameAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RenameAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Rename\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13E;\"/>\n    </Style>\n    <Style x:Key=\"PinAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE141;\"/>\n    </Style>\n    <Style x:Key=\"MusicInfoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MusicInfoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Music Info\"/>\n        <Setter Property=\"Content\" Value=\"&#xE142;\"/>\n    </Style>\n    <Style x:Key=\"GoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Go\"/>\n        <Setter Property=\"Content\" Value=\"&#xE143;\"/>\n    </Style>\n    <Style x:Key=\"KeyboardAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"KeyboardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Keyboard\"/>\n        <Setter Property=\"Content\" Value=\"&#xE144;\"/>\n    </Style>\n    <Style x:Key=\"DockLeftAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DockLeftAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dock Left\"/>\n        <Setter Property=\"Content\" Value=\"&#xE145;\"/>\n    </Style>\n    <Style x:Key=\"DockRightAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DockRightAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dock Right\"/>\n        <Setter Property=\"Content\" Value=\"&#xE146;\"/>\n    </Style>\n    <Style x:Key=\"DockBottomAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DockBottomAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dock Bottom\"/>\n        <Setter Property=\"Content\" Value=\"&#xE147;\"/>\n    </Style>\n    <Style x:Key=\"RemoteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RemoteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Remote\"/>\n        <Setter Property=\"Content\" Value=\"&#xE148;\"/>\n    </Style>\n    <Style x:Key=\"SyncAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SyncAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Sync\"/>\n        <Setter Property=\"Content\" Value=\"&#xE149;\"/>\n    </Style>\n    <Style x:Key=\"RotateAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RotateAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Rotate\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14A;\"/>\n    </Style>\n    <Style x:Key=\"ShuffleAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShuffleAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Shuffle\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14B;\"/>\n    </Style>\n    <Style x:Key=\"ListAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ListAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"List\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14C;\"/>\n    </Style>\n    <Style x:Key=\"ShopAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShopAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Shop\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14D;\"/>\n    </Style>\n    <Style x:Key=\"SelectAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SelectAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Select All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14E;\"/>\n    </Style>\n    <Style x:Key=\"OrientationAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OrientationAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Orientation\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14F;\"/>\n    </Style>\n    <Style x:Key=\"ImportAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ImportAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Import\"/>\n        <Setter Property=\"Content\" Value=\"&#xE150;\"/>\n    </Style>\n    <Style x:Key=\"ImportAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ImportAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Import All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE151;\"/>\n    </Style>\n    <Style x:Key=\"BrowsePhotosAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BrowsePhotosAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Browse Photos\"/>\n        <Setter Property=\"Content\" Value=\"&#xE155;\"/>\n    </Style>\n    <Style x:Key=\"WebcamAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"WebcamAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Webcam\"/>\n        <Setter Property=\"Content\" Value=\"&#xE156;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"PicturesAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PicturesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pictures\"/>\n        <Setter Property=\"Content\" Value=\"&#xE158;\"/>\n    </Style>\n    <Style x:Key=\"SaveLocalAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SaveLocalAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Save Local\"/>\n        <Setter Property=\"Content\" Value=\"&#xE159;\"/>\n    </Style>\n    <Style x:Key=\"CaptionAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CaptionAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Caption\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15A;\"/>\n    </Style>\n    <Style x:Key=\"StopAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"StopAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Stop\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15B;\"/>\n    </Style>\n    <Style x:Key=\"ShowResultsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShowResultsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Show Results\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15C;\"/>\n    </Style>\n    <Style x:Key=\"VolumeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VolumeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Volume\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15D;\"/>\n    </Style>\n    <Style x:Key=\"RepairAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RepairAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Repair\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15E;\"/>\n    </Style>\n    <Style x:Key=\"MessageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MessageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Message\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15F;\"/>\n    </Style>\n    <Style x:Key=\"Page2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Page2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Page2\"/>\n        <Setter Property=\"Content\" Value=\"&#xE160;\"/>\n    </Style>\n    <Style x:Key=\"CalendarDayAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarDayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Day\"/>\n        <Setter Property=\"Content\" Value=\"&#xE161;\"/>\n    </Style>\n    <Style x:Key=\"CalendarWeekAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarWeekAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Week\"/>\n        <Setter Property=\"Content\" Value=\"&#xE162;\"/>\n    </Style>\n    <Style x:Key=\"CalendarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Calendar\"/>\n        <Setter Property=\"Content\" Value=\"&#xE163;\"/>\n    </Style>\n    <Style x:Key=\"CharactersAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CharactersAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Characters\"/>\n        <Setter Property=\"Content\" Value=\"&#xE164;\"/>\n    </Style>\n    <Style x:Key=\"MailReplyAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailReplyAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Reply All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE165;\"/>\n    </Style>\n    <Style x:Key=\"ReadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ReadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Read\"/>\n        <Setter Property=\"Content\" Value=\"&#xE166;\"/>\n    </Style>\n    <Style x:Key=\"LinkAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LinkAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Link\"/>\n        <Setter Property=\"Content\" Value=\"&#xE167;\"/>\n    </Style>\n    <Style x:Key=\"AccountsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AccountsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Accounts\"/>\n        <Setter Property=\"Content\" Value=\"&#xE168;\"/>\n    </Style>\n    <Style x:Key=\"ShowBccAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShowBccAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Show Bcc\"/>\n        <Setter Property=\"Content\" Value=\"&#xE169;\"/>\n    </Style>\n    <Style x:Key=\"HideBccAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HideBccAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Hide Bcc\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16A;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"CutAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Cut\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16B;\"/>\n    </Style>\n    <Style x:Key=\"AttachAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AttachAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Attach\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16C;\"/>\n    </Style>\n    <Style x:Key=\"PasteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PasteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Paste\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16D;\"/>\n    </Style>\n    <Style x:Key=\"FilterAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FilterAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Filter\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16E;\"/>\n    </Style>\n    <Style x:Key=\"CopyAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CopyAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Copy\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16F;\"/>\n    </Style>\n    <Style x:Key=\"Emoji2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Emoji2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Emoji2\"/>\n        <Setter Property=\"Content\" Value=\"&#xE170;\"/>\n    </Style>\n    <Style x:Key=\"ImportantAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ImportantAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Important\"/>\n        <Setter Property=\"Content\" Value=\"&#xE171;\"/>\n    </Style>\n    <Style x:Key=\"MailReplyAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailReplyAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Reply\"/>\n        <Setter Property=\"Content\" Value=\"&#xE172;\"/>\n    </Style>\n    <Style x:Key=\"SlideShowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SlideShowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Slideshow\"/>\n        <Setter Property=\"Content\" Value=\"&#xE173;\"/>\n    </Style>\n    <Style x:Key=\"SortAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SortAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Sort\"/>\n        <Setter Property=\"Content\" Value=\"&#xE174;\"/>\n    </Style>\n    <Style x:Key=\"ManageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ManageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Manage\"/>\n        <Setter Property=\"Content\" Value=\"&#xE178;\"/>\n    </Style>\n    <Style x:Key=\"AllAppsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AllAppsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"All Apps\"/>\n        <Setter Property=\"Content\" Value=\"&#xE179;\"/>\n    </Style>\n    <Style x:Key=\"DisconnectDriveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DisconnectDriveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Disconnect Drive\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17A;\"/>\n    </Style>\n    <Style x:Key=\"MapDriveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MapDriveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Map Drive\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17B;\"/>\n    </Style>\n    <Style x:Key=\"NewWindowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NewWindowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"New Window\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17C;\"/>\n    </Style>\n    <Style x:Key=\"OpenWithAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenWithAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open With\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17D;\"/>\n    </Style>\n    <Style x:Key=\"ContactPresenceAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ContactPresenceAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Presence\"/>\n        <Setter Property=\"Content\" Value=\"&#xE181;\"/>\n    </Style>\n    <Style x:Key=\"PriorityAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PriorityAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Priority\"/>\n        <Setter Property=\"Content\" Value=\"&#xE182;\"/>\n    </Style>\n    <Style x:Key=\"UploadSkyDriveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UploadSkyDriveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skydrive\"/>\n        <Setter Property=\"Content\" Value=\"&#xE183;\"/>\n    </Style>\n    <Style x:Key=\"GoToTodayAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GoToTodayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Today\"/>\n        <Setter Property=\"Content\" Value=\"&#xE184;\"/>\n    </Style>\n    <Style x:Key=\"FontAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Font\"/>\n        <Setter Property=\"Content\" Value=\"&#xE185;\"/>\n    </Style>\n\n    -->\n\n    <!--\n\n    <Style x:Key=\"FontColorAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontColorAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Font Color\"/>\n        <Setter Property=\"Content\" Value=\"&#xE186;\"/>\n    </Style>\n    <Style x:Key=\"Contact2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Contact2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Contact\"/>\n        <Setter Property=\"Content\" Value=\"&#xE187;\"/>\n    </Style>\n    <Style x:Key=\"FolderppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE188;\"/>\n    </Style>\n    <Style x:Key=\"AudioAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AudioAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Audio\"/>\n        <Setter Property=\"Content\" Value=\"&#xE189;\"/>\n    </Style>\n    <Style x:Key=\"PlaceholderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PlaceholderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Placeholder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18A;\"/>\n    </Style>\n    <Style x:Key=\"ViewAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ViewAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"View\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18B;\"/>\n    </Style>\n    <Style x:Key=\"SetLockScreenAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SetLockscreenAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Set Lockscreen\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18C;\"/>\n    </Style>\n    <Style x:Key=\"SetTitleAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SetTitleAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Set Title\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18D;\"/>\n    </Style>\n    <Style x:Key=\"CcAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CcAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Cc\"/>\n        <Setter Property=\"Content\" Value=\"&#xE190;\"/>\n    </Style>\n    <Style x:Key=\"StopSlideShowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"StopSlideshowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Stop Slideshow\"/>\n        <Setter Property=\"Content\" Value=\"&#xE191;\"/>\n    </Style>\n    <Style x:Key=\"PermissionsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PermissionsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Permisions\"/>\n        <Setter Property=\"Content\" Value=\"&#xE192;\"/>\n    </Style>\n    <Style x:Key=\"HighlightAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HighlightAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Highlight\"/>\n        <Setter Property=\"Content\" Value=\"&#xE193;\"/>\n    </Style>\n    <Style x:Key=\"DisableUpdatesAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DisableUpdatesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Disable Updates\"/>\n        <Setter Property=\"Content\" Value=\"&#xE194;\"/>\n    </Style>\n    <Style x:Key=\"UnfavoriteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnfavoriteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unfavorite\"/>\n        <Setter Property=\"Content\" Value=\"&#xE195;\"/>\n    </Style>\n    <Style x:Key=\"UnPinAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnPinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unpin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE196;\"/>\n    </Style>\n    <Style x:Key=\"OpenLocalAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenLocalAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open Loal\"/>\n        <Setter Property=\"Content\" Value=\"&#xE197;\"/>\n    </Style>\n    <Style x:Key=\"MuteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MuteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mute\"/>\n        <Setter Property=\"Content\" Value=\"&#xE198;\"/>\n    </Style>\n    <Style x:Key=\"ItalicAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ItalicAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Italic\"/>\n        <Setter Property=\"Content\" Value=\"&#xE199;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"UnderlineAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnderlineAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Underline\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19A;\"/>\n    </Style>\n    <Style x:Key=\"BoldAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BoldAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Bold\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19B;\"/>\n    </Style>\n    <Style x:Key=\"MoveToFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MoveToFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Move to Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19C;\"/>\n    </Style>\n    <Style x:Key=\"LikeDislikeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LikeDislikeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Like/Dislike\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19D;\"/>\n    </Style>\n    <Style x:Key=\"DislikeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DislikeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dislike\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19E;\"/>\n    </Style>\n    <Style x:Key=\"LikeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LikeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Like\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19F;\"/>\n    </Style>\n    <Style x:Key=\"AlignRightAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AlignRightAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Align Right\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A0;\"/>\n    </Style>\n    <Style x:Key=\"AlignCenterAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AlignCenterAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Align Center\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A1;\"/>\n    </Style>\n    <Style x:Key=\"AlignLeftAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AlignLeftAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Align Left\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A2;\"/>\n    </Style>\n    <Style x:Key=\"ZoomAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZoomAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zoom\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A3;\"/>\n    </Style>\n    <Style x:Key=\"ZoomOutAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZoomOutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zoom Out\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A4;\"/>\n    </Style>\n    <Style x:Key=\"OpenFileAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenFileAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open File\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A5;\"/>\n    </Style>\n    <Style x:Key=\"OtherUserAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OtherUserAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Other User\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A6;\"/>\n    </Style>\n    <Style x:Key=\"AdminAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AdminAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Admin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A7;\"/>\n    </Style>\n    <Style x:Key=\"StreetAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"StreetAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Street\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C3;\"/>\n    </Style>\n    <Style x:Key=\"MapAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MapAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Map\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C4;\"/>\n    </Style>\n    <Style x:Key=\"ClearSelectionAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ClearSelectionAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Clear Selection\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C5;\"/>\n    </Style>\n    <Style x:Key=\"FontDecreaseAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontDecreaseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Decrease Font\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C6;\"/>\n    </Style>\n    <Style x:Key=\"FontIncreaseAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontIncreaseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Increase Font\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C7;\"/>\n    </Style>\n    <Style x:Key=\"FontSizeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontSizeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Font Size\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C8;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"CellphoneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CellphoneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Cellphone\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C9;\"/>\n    </Style>\n    <Style x:Key=\"ReshareAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ReshareAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Reshare\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CA;\"/>\n    </Style>\n    <Style x:Key=\"TagAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TagAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Tag\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CB;\"/>\n    </Style>\n    <Style x:Key=\"RepeatOneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RepeatOneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Repeat Once\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CC;\"/>\n    </Style>\n    <Style x:Key=\"RepeatAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RepeatAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Repeat All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CD;\"/>\n    </Style>\n    <Style x:Key=\"OutlineStarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OutlineStarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Outline Star\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CE;\"/>\n    </Style>\n    <Style x:Key=\"SolidStarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SolidStarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Solid Star\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CF;\"/>\n    </Style>\n    <Style x:Key=\"CalculatorAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalculatorAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Calculator\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D0;\"/>\n    </Style>\n    <Style x:Key=\"DirectionsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DirectionsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Directions\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D1;\"/>\n    </Style>\n    <Style x:Key=\"TargetAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TargetAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Target\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D2;\"/>\n    </Style>\n    <Style x:Key=\"LibraryAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LibraryAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Library\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D3;\"/>\n    </Style>\n    <Style x:Key=\"PhonebookAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhonebookAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Phonebook\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D4;\"/>\n    </Style>\n    <Style x:Key=\"MemoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MemoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Memo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D5;\"/>\n    </Style>\n    <Style x:Key=\"MicrophoneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MicrophoneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Microphone\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D6;\"/>\n    </Style>\n    <Style x:Key=\"PostUpdateAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PostUpdateAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Post Update\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D7;\"/>\n    </Style>\n    <Style x:Key=\"BackToWindowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackToWindowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back to Window\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D8;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"FullScreenAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FullScreenAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Full Screen\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D9;\"/>\n    </Style>\n    <Style x:Key=\"NewFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NewFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"New Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DA;\"/>\n    </Style>\n    <Style x:Key=\"CalendarReplyAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarReplyAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Calendar Reply\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DB;\"/>\n    </Style>\n    <Style x:Key=\"UnsyncFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnsyncFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unsync Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DD;\"/>\n    </Style>\n    <Style x:Key=\"ReportHackedAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ReportHackedAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Report Hacked\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DE;\"/>\n    </Style>\n    <Style x:Key=\"SyncFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SyncFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Sync Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DF;\"/>\n    </Style>\n    <Style x:Key=\"BlockContactAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Block ContactAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"BlockContact\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E0;\"/>\n    </Style>\n    <Style x:Key=\"SwitchAppsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SwitchAppsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Switch Apps\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E1;\"/>\n    </Style>\n    <Style x:Key=\"AddFriendAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AddFriendAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Add Friend\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E2;\"/>\n    </Style>\n    <Style x:Key=\"TouchPointerAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TouchPointerAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Touch Pointer\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E3;\"/>\n    </Style>\n    <Style x:Key=\"GoToStartAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GoToStartAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Go to Start\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E4;\"/>\n    </Style>\n    <Style x:Key=\"ZeroBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZeroBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zero Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E5;\"/>\n    </Style>\n    <Style x:Key=\"OneBarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OneBarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"One Bar\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E6;\"/>\n    </Style>\n    <Style x:Key=\"TwoBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TwoBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Two Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E7;\"/>\n    </Style>\n    <Style x:Key=\"ThreeBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ThreeBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Three Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E8;\"/>\n    </Style>\n    <Style x:Key=\"FourBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FourBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Four Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E9;\"/>\n    </Style>\n\n    -->\n\n    <!-- Title area styles -->\n\n    <Style x:Key=\"PageHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,30,40\"/>\n    </Style>\n\n    <Style x:Key=\"PageSubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,0,40\"/>\n    </Style>\n\n    <Style x:Key=\"SnappedPageHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource PageSubheaderTextStyle}\">\n        <Setter Property=\"Margin\" Value=\"0,0,18,40\"/>\n    </Style>\n\n    <!--\n        BackButtonStyle is used to style a Button for use in the title area of a page.  Margins appropriate for\n        the conventional page layout are included as part of the style.\n    -->\n    <Style x:Key=\"BackButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"Width\" Value=\"48\"/>\n        <Setter Property=\"Height\" Value=\"48\"/>\n        <Setter Property=\"Margin\" Value=\"36,0,36,36\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"Navigation Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\">\n                        <Grid Margin=\"-1,-16,0,0\">\n                            <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0A8;\" Foreground=\"{StaticResource BackButtonBackgroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"NormalGlyph\" Text=\"{StaticResource BackButtonGlyph}\" Foreground=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"ArrowGlyph\" Text=\"&#xE0A6;\" Foreground=\"{StaticResource BackButtonPressedForegroundThemeBrush}\" Opacity=\"0\"/>\n                        </Grid>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"NormalGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"ArrowGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"NormalGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"0\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualWhite\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualBlack\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--\n        PortraitBackButtonStyle is used to style a Button for use in the title area of a portrait page.  Margins appropriate\n        for the conventional page layout are included as part of the style.\n    -->\n    <Style x:Key=\"PortraitBackButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource BackButtonStyle}\">\n        <Setter Property=\"Margin\" Value=\"26,0,26,36\"/>\n    </Style>\n\n    <!--\n        SnappedBackButtonStyle is used to style a Button for use in the title area of a snapped page.  Margins appropriate\n        for the conventional page layout are included as part of the style.\n        \n        The obvious duplication here is necessary as the glyphs used in snapped are not merely smaller versions of the same\n        glyph but are actually distinct.\n    -->\n    <Style x:Key=\"SnappedBackButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"Margin\" Value=\"20,0,0,0\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"26.66667\"/>\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"Navigation Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\" Width=\"36\" Height=\"36\" Margin=\"-3,0,7,33\">\n                        <Grid Margin=\"-1,-1,0,0\">\n                            <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0D4;\" Foreground=\"{StaticResource BackButtonBackgroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"NormalGlyph\" Text=\"{StaticResource BackButtonSnappedGlyph}\" Foreground=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"ArrowGlyph\" Text=\"&#xE0C4;\" Foreground=\"{StaticResource BackButtonPressedForegroundThemeBrush}\" Opacity=\"0\"/>\n                        </Grid>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"NormalGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"ArrowGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"NormalGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"0\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualWhite\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualBlack\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- Item templates -->\n\n    <!-- Grid-appropriate 250 pixel square item template as seen in the GroupedItemsPage and ItemsPage -->\n    <DataTemplate x:Key=\"Standard250x250ItemTemplate\">\n        <Grid HorizontalAlignment=\"Left\" Width=\"250\" Height=\"250\">\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n            </Border>\n            <StackPanel VerticalAlignment=\"Bottom\" Background=\"{StaticResource ListViewItemOverlayBackgroundThemeBrush}\">\n                <TextBlock Text=\"{Binding Title}\" Foreground=\"{StaticResource ListViewItemOverlayForegroundThemeBrush}\" Style=\"{StaticResource TitleTextStyle}\" Height=\"60\" Margin=\"15,0,15,0\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Foreground=\"{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\" Margin=\"15,0,15,10\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- Grid-appropriate 500 by 130 pixel item template as seen in the GroupDetailPage -->\n    <DataTemplate x:Key=\"Standard500x130ItemTemplate\">\n        <Grid Height=\"110\" Width=\"480\" Margin=\"10\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" MaxHeight=\"60\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- List-appropriate 130 pixel high item template as seen in the SplitPage -->\n    <DataTemplate x:Key=\"Standard130ItemTemplate\">\n        <Grid Height=\"110\" Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" MaxHeight=\"60\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!--\n        List-appropriate 80 pixel high item template as seen in the SplitPage when Filled, and\n        the following pages when snapped: GroupedItemsPage, GroupDetailPage, and ItemsPage\n    -->\n    <DataTemplate x:Key=\"Standard80ItemTemplate\">\n        <Grid Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"60\" Height=\"60\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource ItemTextStyle}\" MaxHeight=\"40\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- Grid-appropriate 300 by 70 pixel item template as seen in the SearchResultsPage -->\n    <DataTemplate x:Key=\"StandardSmallIcon300x70ItemTemplate\">\n        <Grid Width=\"294\" Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"0,0,0,10\" Width=\"40\" Height=\"40\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,-10,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource BodyTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- List-appropriate 70 pixel high item template as seen in the SearchResultsPage when Snapped -->\n    <DataTemplate x:Key=\"StandardSmallIcon70ItemTemplate\">\n        <Grid Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"0,0,0,10\" Width=\"40\" Height=\"40\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,-10,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource BodyTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!--\n      190x130 pixel item template for displaying file previews as seen in the FileOpenPickerPage\n      Includes an elaborate tooltip to display title and description text\n  -->\n    <DataTemplate x:Key=\"StandardFileWithTooltip190x130ItemTemplate\">\n        <Grid>\n            <Grid Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                <Image\n                    Source=\"{Binding Image}\"\n                    Width=\"190\"\n                    Height=\"130\"\n                    HorizontalAlignment=\"Center\"\n                    VerticalAlignment=\"Center\"\n                    Stretch=\"Uniform\"/>\n            </Grid>\n            <ToolTipService.Placement>Mouse</ToolTipService.Placement>\n            <ToolTipService.ToolTip>\n                <ToolTip>\n                    <ToolTip.Style>\n                        <Style TargetType=\"ToolTip\">\n                            <Setter Property=\"BorderBrush\" Value=\"{StaticResource ToolTipBackgroundThemeBrush}\" />\n                            <Setter Property=\"Padding\" Value=\"0\" />\n                        </Style>\n                    </ToolTip.Style>\n\n                    <Grid Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Grid Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"20\">\n                            <Image\n                                Source=\"{Binding Image}\"\n                                Width=\"160\"\n                                Height=\"160\"\n                                HorizontalAlignment=\"Center\"\n                                VerticalAlignment=\"Center\"\n                                Stretch=\"Uniform\"/>\n                        </Grid>\n                        <StackPanel Width=\"200\" Grid.Column=\"1\" Margin=\"0,20,20,20\">\n                            <TextBlock Text=\"{Binding Title}\" TextWrapping=\"NoWrap\" Style=\"{StaticResource BodyTextStyle}\"/>\n                            <TextBlock Text=\"{Binding Description}\" MaxHeight=\"140\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" Style=\"{StaticResource BodyTextStyle}\"/>\n                        </StackPanel>\n                    </Grid>\n                </ToolTip>\n            </ToolTipService.ToolTip>\n        </Grid>\n    </DataTemplate>\n\n    <!-- ScrollViewer styles -->\n\n    <Style x:Key=\"HorizontalScrollViewerStyle\" TargetType=\"ScrollViewer\">\n        <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Disabled\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Enabled\" />\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Disabled\" />\n        <Setter Property=\"ScrollViewer.ZoomMode\" Value=\"Disabled\" />\n    </Style>\n\n    <Style x:Key=\"VerticalScrollViewerStyle\" TargetType=\"ScrollViewer\">\n        <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Disabled\"/>\n        <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Disabled\" />\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Enabled\" />\n        <Setter Property=\"ScrollViewer.ZoomMode\" Value=\"Disabled\" />\n    </Style>\n\n    <!-- Page layout roots typically use entrance animations and a theme-appropriate background color -->\n\n    <Style x:Key=\"LayoutRootStyle\" TargetType=\"Panel\">\n        <Setter Property=\"Background\" Value=\"{StaticResource ApplicationPageBackgroundThemeBrush}\"/>\n        <Setter Property=\"ChildrenTransitions\">\n            <Setter.Value>\n                <TransitionCollection>\n                    <EntranceThemeTransition/>\n                </TransitionCollection>\n            </Setter.Value>\n        </Setter>\n    </Style>\n</ResourceDictionary>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/Functional/PushFunctional.Test.cs",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Linq;\n\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"push\")]\n    public class PushFunctional : FunctionalTestBase\n    {\n        readonly IPushTestUtility pushTestUtility;\n\n        public PushFunctional()\n        {\n            this.pushTestUtility = TestPlatform.Instance.PushTestUtility;\n        }\n\n        [TestMethod]\n        public void InitialUnregisterAllAsync()\n        {\n            var channelUri = this.pushTestUtility.GetPushHandle();\n            var push = this.GetClient().GetPush();\n            push.UnregisterAllAsync(channelUri).Wait();\n            var registrations = push.ListRegistrationsAsync(channelUri).Result;\n            Assert.IsFalse(registrations.Any(), \"Deleting all registrations for a channel should ensure no registrations are returned by List\");\n\n            channelUri = this.pushTestUtility.GetUpdatedPushHandle();\n            push.UnregisterAllAsync(channelUri).Wait();\n            registrations = push.ListRegistrationsAsync(channelUri).Result;\n            Assert.IsFalse(registrations.Any(), \"Deleting all registrations for a channel should ensure no registrations are returned by List\");\n        }\n\n        [TestMethod]\n        public void RegisterNativeAsyncUnregisterNativeAsync()\n        {\n            var channelUri = this.pushTestUtility.GetPushHandle();\n            var push = this.GetClient().GetPush();\n            push.RegisterNativeAsync(channelUri).Wait();\n            var registrations = push.ListRegistrationsAsync(channelUri).Result;\n            Assert.AreEqual(registrations.Count(), 1, \"1 registration should exist after RegisterNativeAsync\");\n            Assert.AreEqual(\n                registrations.First().RegistrationId,\n                push.RegistrationManager.LocalStorageManager.GetRegistration(Registration.NativeRegistrationName).RegistrationId,\n                \"Local storage should have the same RegistrationId as the one returned from service\");\n\n            push.UnregisterNativeAsync().Wait();\n            registrations = push.ListRegistrationsAsync(channelUri).Result;\n            Assert.AreEqual(registrations.Count(), 0, \"0 registrations should exist in service after UnregisterNativeAsync\");\n            Assert.IsNull(\n                push.RegistrationManager.LocalStorageManager.GetRegistration(Registration.NativeRegistrationName),\n                \"Local storage should not contain a native registration after UnregisterNativeAsync.\");\n        }\n\n        [TestMethod]\n        public void RegisterAsyncUnregisterTemplateAsync()\n        {\n            var mobileClient = this.GetClient();\n            var push = mobileClient.GetPush();\n            var template = this.pushTestUtility.GetTemplateRegistrationForToast();\n            this.pushTestUtility.ValidateTemplateRegistrationBeforeRegister(template);\n            push.RegisterAsync(template).Wait();\n            var registrations = push.ListRegistrationsAsync(template.PushHandle).Result;\n            Assert.AreEqual(registrations.Count(), 1, \"1 registration should exist after RegisterNativeAsync\");\n            var registrationAfter = registrations.First();\n            Assert.IsNotNull(registrationAfter, \"List and Deserialization of a TemplateRegistration after successful registration should have a value.\");\n            Assert.AreEqual(\n                registrationAfter.RegistrationId,\n                push.RegistrationManager.LocalStorageManager.GetRegistration(template.Name).RegistrationId,\n                \"Local storage should have the same RegistrationId as the one returned from service\");\n\n            this.pushTestUtility.ValidateTemplateRegistrationAfterRegister(registrationAfter, mobileClient.applicationInstallationId);\n\n            push.UnregisterTemplateAsync(template.Name).Wait();\n            registrations = push.ListRegistrationsAsync(template.PushHandle).Result;\n            Assert.AreEqual(registrations.Count(), 0, \"0 registrations should exist in service after UnregisterTemplateAsync\");\n            Assert.IsNull(\n                push.RegistrationManager.LocalStorageManager.GetRegistration(template.Name),\n                \"Local storage should not contain a native registration after UnregisterTemplateAsync.\");\n        }\n\n        [TestMethod]\n        public void RegisterRefreshRegisterWithUpdatedChannel()\n        {\n            var mobileClient = this.GetClient();\n            var push = mobileClient.GetPush();\n            var template = this.pushTestUtility.GetTemplateRegistrationForToast();\n            this.pushTestUtility.ValidateTemplateRegistrationBeforeRegister(template);\n            push.RegisterAsync((Registration)template).Wait();\n            var registrations = push.ListRegistrationsAsync(template.PushHandle).Result;\n            Assert.AreEqual(registrations.Count(), 1, \"1 registration should exist after RegisterNativeAsync\");\n            var registrationAfter = registrations.First();\n            Assert.IsNotNull(registrationAfter, \"List and Deserialization of a TemplateRegistration after successful registration should have a value.\");\n            Assert.AreEqual(\n                registrationAfter.RegistrationId,\n                push.RegistrationManager.LocalStorageManager.GetRegistration(template.Name).RegistrationId,\n                \"Local storage should have the same RegistrationId as the one returned from service\");\n\n            this.pushTestUtility.ValidateTemplateRegistrationAfterRegister(registrationAfter, mobileClient.applicationInstallationId);\n            push.RegistrationManager.LocalStorageManager.IsRefreshNeeded = true;\n            template.PushHandle = this.pushTestUtility.GetUpdatedPushHandle();\n\n            push.RegisterAsync(template).Wait();\n            registrations = push.ListRegistrationsAsync(template.PushHandle).Result;\n            Assert.AreEqual(registrations.Count(), 1, \"1 registration should exist after RegisterNativeAsync\");\n            var registrationAfterUpdate = registrations.First();\n            Assert.IsNotNull(registrationAfterUpdate, \"List and Deserialization of a TemplateRegistration after successful registration should have a value.\");\n            Assert.AreEqual(\n                registrationAfterUpdate.RegistrationId,\n                push.RegistrationManager.LocalStorageManager.GetRegistration(template.Name).RegistrationId,\n                \"Local storage should have the same RegistrationId as the one returned from service\");\n            Assert.AreEqual(registrationAfter.RegistrationId, registrationAfterUpdate.RegistrationId, \"Expected the same RegistrationId to be used even after the refresh\");\n            Assert.AreEqual(registrationAfterUpdate.PushHandle, template.PushHandle, \"Expected updated channelUri after 2nd register\");\n            Assert.AreEqual(push.RegistrationManager.LocalStorageManager.PushHandle, template.PushHandle, \"Expected local storage to be updaed to the new channelUri after 2nd register\");\n\n            Assert.AreEqual(push.ListRegistrationsAsync(registrationAfter.PushHandle).Result.Count(), 0, \"Original channel should be gone from service\");\n\n            push.UnregisterTemplateAsync(template.Name).Wait();\n            registrations = push.ListRegistrationsAsync(template.PushHandle).Result;\n            Assert.AreEqual(registrations.Count(), 0, \"0 registrations should exist in service after UnregisterTemplateAsync\");\n            Assert.IsNull(\n                push.RegistrationManager.LocalStorageManager.GetRegistration(template.Name),\n                \"Local storage should not contain a native registration after UnregisterTemplateAsync.\");\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/Microsoft.WindowsAzure.Mobile.Win8.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{4864F1AA-A4B9-4F32-B319-A9BAC7D1B200}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.WindowsAzure.MobileServices.Test</RootNamespace>\n    <AssemblyName>Microsoft.WindowsAzure.Mobile.Win8.Test</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <DefineConstants>$(DefineConstants);TRACE;NETFX_CORE</DefineConstants>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <PackageCertificateKeyFile>Microsoft.WindowsAzure.Mobile.Win8.Test_TemporaryKey.pfx</PackageCertificateKeyFile>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n    <PackageCertificateThumbprint>2288BD0C745CA2E8C2CAD8DEB93F656C57B1C763</PackageCertificateThumbprint>\n    <AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>\n    <TargetPlatformVersion>8.1</TargetPlatformVersion>\n    <MinimumVisualStudioVersion>12</MinimumVisualStudioVersion>\n    <TargetFrameworkVersion />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>$(DefineConstants);DEBUG</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <RunCodeAnalysis>false</RunCodeAnalysis>\n    <DocumentationFile>\n    </DocumentationFile>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>$(DefineConstants);DEBUG</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>$(DefineConstants);DEBUG</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>$(DefineConstants);DEBUG</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.WindowsStore\\Microsoft.WindowsAzure.Mobile.Ext.Win8.csproj\">\n      <Project>{41e0bbea-091b-4c06-ae08-b7f50e2beb8a}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.Win8</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{a2500bd2-a9a2-4085-9978-dee3675b02dd}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n      <Private>True</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{d8bbc92a-b213-463b-911d-3a106f91d5f9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Functional\\PushFunctional.Test.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"PlatformTests\\LoginTests.cs\" />\n    <Compile Include=\"TestPlatform\\CurrentTestPlatform.cs\" />\n    <Compile Include=\"TestPlatform\\PushTestUtility.cs\" />\n    <Compile Include=\"UI\\LoginPage.xaml.cs\">\n      <DependentUpon>LoginPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"UI\\GroupDescription.cs\" />\n    <Compile Include=\"UI\\MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"UI\\TestDescription.cs\" />\n    <Compile Include=\"UI\\TestPage.xaml.cs\">\n      <DependentUpon>TestPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"UnitTests\\Collections\\IncrementalLoadingMobileServiceCollection.Test.cs\" />\n    <Compile Include=\"UnitTests\\PushUnit.Test.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n    <None Include=\"Microsoft.WindowsAzure.Mobile.Win8.Test_TemporaryKey.pfx\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"Common\\StandardStyles.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"UI\\LoginPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"UI\\MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"UI\\TestPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Assets\\Logo.png\" />\n    <Content Include=\"Assets\\SmallLogo.png\" />\n    <Content Include=\"Assets\\SplashScreen.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\netcore45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\win8\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\win8\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '12.0' \">\n    <VisualStudioVersion>12.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/Mocks/MobileServiceTableQueryMock.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class MobileServiceTableQueryMock<T> : IMobileServiceTableQuery<T>\n    {\n        public bool EnumerableAsyncThrowsException { get; set; }\n        \n        public IMobileServiceTableQuery<T> IncludeTotalCount()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> OrderBy<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> OrderByDescending<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<U> Select<U>(Expression<Func<T, U>> selector)\n        {\n            throw new NotImplementedException();\n        }\n\n        private int skip;\n\n        public IMobileServiceTableQuery<T> Skip(int count)\n        {\n            skip += count;\n            return this;\n        }\n\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Design\", \"CA1065:DoNotRaiseExceptionsInUnexpectedLocations\")]\n        public IMobileServiceTable<T> Table\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        private int take;\n\n        public IMobileServiceTableQuery<T> Take(int count)\n        {\n            take = count;\n            return this;\n        }\n\n        public IMobileServiceTableQuery<T> ThenBy<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> ThenByDescending<TKey>(Expression<Func<T, TKey>> keySelector)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<IEnumerable<T>> ToEnumerableAsync()\n        {\n            if (EnumerableAsyncThrowsException)\n            {\n                throw new Exception();\n            }\n            return TaskEx.Run(() => TaskEx.Delay(500).ContinueWith(t => (IEnumerable<T>)new TotalCountEnumerable<T>(2, new T[] { Activator.CreateInstance<T>(), Activator.CreateInstance<T>() })));\n        }\n\n        public Task<List<T>> ToListAsync()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> Where(Expression<Func<T, bool>> predicate)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IMobileServiceTableQuery<T> WithParameters(IDictionary<string, string> parameters)\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool RequestTotalCount\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public IDictionary<string, string> Parameters\n        {\n            get { throw new NotImplementedException(); }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:m2=\"http://schemas.microsoft.com/appx/2013/manifest\">\n  <Identity Name=\"44263a2d-8087-40af-8163-307a43f420ba\" Publisher=\"CN=pbatum\" Version=\"1.1.0.0\" />\n  <Properties>\n    <DisplayName>Microsoft.WindowsAzure.MobileServices.WindowsStore.Test</DisplayName>\n    <PublisherDisplayName>pbatum</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n  <Prerequisites>\n    <OSMinVersion>6.3.0</OSMinVersion>\n    <OSMaxVersionTested>6.3.0</OSMaxVersionTested>\n  </Prerequisites>\n  <Resources>\n    <Resource Language=\"x-generate\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"App\" Executable=\"$targetnametoken$.exe\" EntryPoint=\"Microsoft.WindowsAzure.MobileServices.WindowsStore.Test.App\">\n      <m2:VisualElements DisplayName=\"Microsoft Azure Mobile Services Test App\" Description=\"Microsoft Azure Mobile Services Test App\" BackgroundColor=\"#464646\" ForegroundText=\"light\" Square150x150Logo=\"Assets\\Logo.png\" Square30x30Logo=\"Assets\\SmallLogo.png\">\n        <m2:DefaultTile>\n          <m2:ShowNameOnTiles>\n            <m2:ShowOn Tile=\"square150x150Logo\" />\n          </m2:ShowNameOnTiles>\n        </m2:DefaultTile>\n        <m2:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </m2:VisualElements>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/PlatformTests/LoginTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Platform-specific Login Tests for the Windows Store platform.\n    /// </summary>\n    class LoginTests\n    {\n        private static MobileServiceClient client;\n\n        /// <summary>\n        /// Tests the <see cref=\"MobileServiceClient.LoginAsync\"/> functionality on the platform.\n        /// </summary>\n        /// <param name=\"provider\">The provider with which to login.\n        /// </param>\n        /// <param name=\"useSingleSignOn\">Indicates if single sign-on should be used when logging in.\n        /// </param>\n        /// <param name=\"useProviderStringOverload\">Indicates if the call to <see cref=\"MobileServiceClient.LoginAsync\"/>\n        /// should be made with the overload where the provider is passed as a string.\n        /// </param>\n        /// <returns>The UserId and MobileServiceAuthentication token obtained from logging in.</returns>\n        public static async Task<string> TestLoginAsync(MobileServiceAuthenticationProvider provider, bool useSingleSignOn, bool useProviderStringOverload)\n        {\n            MobileServiceUser user;\n            if (useProviderStringOverload)\n            {\n                user = await client.LoginAsync(provider.ToString(), useSingleSignOn);\n            }\n            else\n            {\n                user = await client.LoginAsync(provider, useSingleSignOn);\n            }\n            \n            return string.Format(\"UserId: {0} Token: {1}\", user.UserId, user.MobileServiceAuthenticationToken);\n        }\n\n        /// <summary>\n        /// Utility method that can be used to execute a test.  It will capture any exceptions throw\n        /// during the execution of the test and return a message with details of the exception thrown.\n        /// </summary>\n        /// <param name=\"testName\">The name of the test being executed.\n        /// </param>\n        /// <param name=\"test\">A test to execute.\n        /// </param>\n        /// <returns>\n        /// Either the result of the test if the test passed, or a message with the exception\n        /// that was thrown.\n        /// </returns>\n        public static async Task<string> ExecuteTest(string testName, Func<Task<string>> test)\n        {\n            string resultText = null;\n            bool didPass = false;\n\n            if (client == null)\n            {\n                string appUrl = null;\n                string appKey = null;\n                App.Harness.Settings.Custom.TryGetValue(\"MobileServiceRuntimeUrl\", out appUrl);\n                App.Harness.Settings.Custom.TryGetValue(\"MobileServiceRuntimeKey\", out appKey);\n\n                client = new MobileServiceClient(appUrl, appKey);\n\n                App.LoginMobileService = client;\n            }\n\n            try\n            {\n                resultText = await test();\n                didPass = true;\n            }\n            catch (Exception exception)\n            {\n                resultText = string.Format(\"ExceptionType: {0} Message: {1} StackTrace: {2}\",\n                                               exception.GetType().ToString(),\n                                               exception.Message,\n                                               exception.StackTrace);\n            }\n\n            return string.Format(\"Test '{0}' {1}.\\n{2}\",\n                                 testName,\n                                 didPass ? \"PASSED\" : \"FAILED\",\n                                 resultText);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\nusing System.Resources;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/TestPlatform/CurrentTestPlatform.cs",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    internal class CurrentTestPlatform : ITestPlatform\n    {\n        public IPushTestUtility PushTestUtility\n        {\n            get { return new PushTestUtility(); }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/TestPlatform/PushTestUtility.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    class PushTestUtility : IPushTestUtility\n    {\n        private const string DefaultChannelUri =\n            \"https://bn1.notify.windows.com/?token=AgYAAADs42685sa5PFCEy82eYpuG8WCPB098AWHnwR8kNRQLwUwf%2f9p%2fy0r82m4hxrLSQ%2bfl5aNlSk99E4jrhEatfsWgyutFzqQxHcLk0Xun3mufO2G%2fb2b%2ftjQjCjVcBESjWvY%3d\";\n        const string BodyTemplate = \"<toast><visual><binding template=\\\"ToastText01\\\"><text id=\\\"1\\\">$(message)</text></binding></visual></toast>\";\n        const string DefaultToastTemplateName = \"templateForToastWns\";\n        readonly string[] DefaultTags = { \"fooWns\", \"barWns\" };\n        readonly ReadOnlyDictionary<string, string> DefaultHeaders = new ReadOnlyDictionary<string, string>(new Dictionary<string, string> { { \"x-wns-ttl\", \"100000\" } });\n        readonly ReadOnlyDictionary<string, string> DetectedHeaders = new ReadOnlyDictionary<string, string>(new Dictionary<string, string> { { \"x-wns-type\", \"wns/toast\" } });\n\n        public string GetPushHandle()\n        {\n            return DefaultChannelUri;\n        }\n\n        public string GetUpdatedPushHandle()\n        {\n            return DefaultChannelUri.Replace('A', 'B');\n        }\n\n        public Registration GetTemplateRegistrationForToast()\n        {\n            var channel = GetPushHandle();\n            return new WnsTemplateRegistration(channel, BodyTemplate, DefaultToastTemplateName, DefaultTags, DefaultHeaders);\n        }\n\n        public void ValidateTemplateRegistration(Registration registration)\n        {\n            var wnsTemplateRegistration = (WnsTemplateRegistration)registration;\n            Assert.AreEqual(wnsTemplateRegistration.BodyTemplate, BodyTemplate);\n\n            foreach (KeyValuePair<string, string> header in DefaultHeaders)\n            {\n                string foundKey = wnsTemplateRegistration.WnsHeaders.Keys.Single(s => s.ToLower() == header.Key.ToLower());\n                Assert.IsNotNull(foundKey);\n                Assert.AreEqual(wnsTemplateRegistration.WnsHeaders[foundKey], header.Value);\n            }\n\n            foreach (KeyValuePair<string, string> header in DetectedHeaders)\n            {\n                string foundKey = wnsTemplateRegistration.WnsHeaders.Keys.Single(s => s.ToLower() == header.Key.ToLower());\n                Assert.IsNotNull(foundKey);\n                Assert.AreEqual(wnsTemplateRegistration.WnsHeaders[foundKey], header.Value);\n            }\n\n            Assert.AreEqual(wnsTemplateRegistration.WnsHeaders.Count, DefaultHeaders.Count + DetectedHeaders.Count);\n\n            foreach (string tag in DefaultTags)\n            {\n                Assert.IsTrue(registration.Tags.Contains(tag));\n            }\n\n            Assert.AreEqual(wnsTemplateRegistration.Name, DefaultToastTemplateName);\n            Assert.AreEqual(wnsTemplateRegistration.TemplateName, DefaultToastTemplateName);\n        }\n\n        public void ValidateTemplateRegistrationBeforeRegister(Registration registration)\n        {\n            ValidateTemplateRegistration(registration);\n            Assert.AreEqual(registration.Tags.Count(), DefaultTags.Length);\n            Assert.IsNull(registration.RegistrationId);\n        }\n\n        public void ValidateTemplateRegistrationAfterRegister(Registration registration, string zumoInstallationId)\n        {\n            ValidateTemplateRegistration(registration);\n            Assert.IsNotNull(registration.RegistrationId);\n            // TODO: Uncomment when .Net Runtime implements installationID\n            //Assert.IsTrue(registration.Tags.Contains(zumoInstallationId));\n            //Assert.AreEqual(registration.Tags.Count(), DefaultTags.Length + 1);\n        }\n\n        public Registration GetNewNativeRegistration(string deviceId, IEnumerable<string> tags)\n        {\n            return new WnsRegistration(deviceId, tags);\n        }        \n\n        public Registration GetNewTemplateRegistration(string deviceId, string bodyTemplate, string templateName)\n        {\n            return new WnsTemplateRegistration(deviceId, bodyTemplate, templateName);\n        }\n\n        public string GetListNativeRegistrationResponse()\n        {\n            return \"[{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\"}]\";\n        }\n\n        public string GetListTemplateRegistrationResponse()\n        {\n            return \"[{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\",\\\"templateBody\\\":\\\"cool template body\\\",\\\"templateName\\\":\\\"cool name\\\"}]\";\n        }\n\n        public string GetListMixedRegistrationResponse()\n        {\n            return \"[{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\"}, \" +\n            \"{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\",\\\"templateBody\\\":\\\"cool template body\\\",\\\"templateName\\\":\\\"cool name\\\"}]\";\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/UI/GroupDescription.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// UI model for a test group.\n    /// </summary>\n    public class GroupDescription : ObservableCollection<TestDescription>\n    {\n        private string _name;\n\n        public string Name\n        {\n            get { return _name; }\n            set\n            {\n                _name = value;\n            }\n        }\n\n        public GroupDescription()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/UI/LoginPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.LoginPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Microsoft.WindowsAzure.MobileServices.Test\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n    <Page.Resources>\n        <Style x:Key=\"SubheaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n            <Setter Property=\"FontSize\" Value=\"18\" />\n            <Setter Property=\"FontWeight\" Value=\"Bold\" />\n            <Setter Property=\"LineHeight\" Value=\"20\" />\n        </Style>\n        <Style x:Key=\"HeaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n            <Setter Property=\"Foreground\" Value=\"#0094ff\" />\n        </Style>\n        <Style x:Key=\"DialogStyle\" TargetType=\"Border\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"BorderBrush\" Value=\"White\" />\n            <Setter Property=\"BorderThickness\" Value=\"2\" />\n            <Setter Property=\"Padding\" Value=\"10\" />\n            <Setter Property=\"CornerRadius\" Value=\"2\" />\n        </Style>\n        <Style x:Key=\"ButtonStyleLeft\" TargetType=\"Button\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Left\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"Height\" Value=\"50\" />\n            <Setter Property=\"Width\" Value=\"290\" />\n        </Style>\n        <Style x:Key=\"ButtonStyleRight\" TargetType=\"Button\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Right\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"Height\" Value=\"50\" />\n            <Setter Property=\"Width\" Value=\"295\" />\n        </Style>\n        <Style x:Key=\"LabelStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Right\" />\n        </Style>\n        <Style x:Key=\"InputStyle\" TargetType=\"TextBox\">\n            <Setter Property=\"MinWidth\" Value=\"400\" />\n            <Setter Property=\"Margin\" Value=\"5\" />\n        </Style>\n    </Page.Resources>\n    <Border Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid Margin=\"20\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n            </Grid.RowDefinitions>\n            <TextBlock Grid.Row=\"0\" Style=\"{StaticResource SubheaderStyle}\">Microsoft Azure Mobile Services</TextBlock>\n            <TextBlock Grid.Row=\"1\"  Style=\"{StaticResource HeaderStyle}\">C# Client Library Tests</TextBlock>\n            <Border Grid.Row=\"2\" Style=\"{StaticResource DialogStyle}\">\n                <Grid>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\" />\n                        <ColumnDefinition Width=\"Auto\" />\n                    </Grid.ColumnDefinitions>\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                    </Grid.RowDefinitions>\n\n                    <Button\n                        Grid.Row=\"0\"\n                        Grid.Column=\"0\"\n                        x:Name=\"MicrosoftAccountButton\"\n                        Content=\"Microsoft Account\" \n                        Style=\"{StaticResource ButtonStyleLeft}\"\n                        Click=\"LoginButtonClicked\"/>\n                    <Button\n                        Grid.Row=\"0\"\n                        Grid.Column=\"1\"\n                        x:Name=\"FacebookButton\"\n                        Content=\"Facebook\" \n                        Style=\"{StaticResource ButtonStyleRight}\"\n                        Click=\"LoginButtonClicked\"/>\n                    <Button \n                        Grid.Row=\"1\"\n                        Grid.Column=\"0\"\n                        x:Name=\"TwitterButton\"\n                        Content=\"Twitter\" \n                        Style=\"{StaticResource ButtonStyleLeft}\"\n                        Click=\"LoginButtonClicked\"/>\n                    <Button \n                        Grid.Row=\"1\"\n                        Grid.Column=\"1\"\n                        x:Name=\"GoogleButton\"\n                        Content=\"Google\" \n                        Style=\"{StaticResource ButtonStyleRight}\"\n                        Click=\"LoginButtonClicked\"/>\n                    <Button\n                        Grid.Row=\"2\"\n                        Grid.Column=\"0\"\n                        x:Name=\"AzureActiveDirectoryButton\"\n                        Content=\"Azure Active Directory\"\n                        Style=\"{StaticResource ButtonStyleLeft}\"\n                        Click=\"LoginButtonClicked\"/>\n                    <CheckBox\n                        Grid.Row=\"3\"\n                        Grid.Column=\"0\"\n                        x:Name=\"UseSingleSignOnCheckBox\"\n                        Content=\"Use Single Sign-On\"\n                        IsChecked=\"true\" Margin=\"0,10\"/>\n                    <CheckBox\n                        Grid.Row=\"3\"\n                        Grid.Column=\"1\"\n                        x:Name=\"UseStringProviderOverloadCheckBox\"\n                        Content=\"Use overload with string provider\"\n                        IsChecked=\"False\" Margin=\"0,10\"/>\n                    <TextBlock \n                        Grid.Row=\"4\"\n                        Grid.Column=\"0\"\n                        Grid.ColumnSpan=\"2\"\n            \t        HorizontalAlignment=\"Left\" \n            \t        TextWrapping=\"Wrap\" \n            \t        Height=\"20\" \n            \t        Width=\"200\"\n                        Margin=\"0,20\"\n                        Text=\"Test Result:\"\n                        FontSize=\"15\">\n                    </TextBlock>\n                    <TextBlock\n                        Grid.Row=\"5\"\n                        Grid.Column=\"0\"\n                        Grid.ColumnSpan=\"2\"\n                        x:Name=\"TestResultsTextBlock\"\n                        HorizontalAlignment=\"Left\" \n            \t        TextWrapping=\"Wrap\" \n            \t        Height=\"400\" \n            \t        Width=\"600\"\n                        Text=\"\"\n                        FontSize=\"15\">\n                    </TextBlock>\n                </Grid>\n            </Border>\n        </Grid>\n    </Border>\n</Page>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/UI/LoginPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public sealed partial class LoginPage : Page\n    {\n        public LoginPage()\n        {\n            this.InitializeComponent();\n        }\n\n        private async void LoginButtonClicked(object sender, RoutedEventArgs e)\n        {\n            Button buttonClicked = sender as Button;\n            if (buttonClicked != null)\n            {\n                String testName = null;\n                MobileServiceAuthenticationProvider provider =\n                    MobileServiceAuthenticationProvider.MicrosoftAccount;\n\n                if (buttonClicked.Name.Contains(\"MicrosoftAccount\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.MicrosoftAccount;\n                    testName = \"Microsoft Account Login\";\n                }\n                else if (buttonClicked.Name.Contains(\"Facebook\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.Facebook;\n                    testName = \"Facebook Login\";\n                }\n                else if (buttonClicked.Name.Contains(\"Twitter\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.Twitter;\n                    testName = \"Twitter Login\";\n                }\n                else if (buttonClicked.Name.Contains(\"Google\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.Google;\n                    testName = \"Google Login\";\n                }\n                else if (buttonClicked.Name.Contains(\"AzureActiveDirectory\"))\n                {\n                    provider = MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory;\n                    testName = \"Azure Active Directory Login\";\n                }\n\n                bool useSingleSignOn = UseSingleSignOnCheckBox.IsChecked.Value;\n                bool useStringProviderOverload = UseStringProviderOverloadCheckBox.IsChecked.Value;\n\n                TestResultsTextBlock.Text = await LoginTests.ExecuteTest(testName, () => LoginTests.TestLoginAsync(provider, useSingleSignOn, useStringProviderOverload));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/UI/MainPage.xaml",
    "content": "﻿<Page\n  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n  xmlns:local=\"using:Microsoft.WindowsAzure.MobileServices.Test\"\n  x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.MainPage\"\n  IsTabStop=\"false\">\n    <Page.Resources>\n        <Style x:Key=\"SubheaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n            <Setter Property=\"FontSize\" Value=\"18\" />\n            <Setter Property=\"FontWeight\" Value=\"Bold\" />\n            <Setter Property=\"LineHeight\" Value=\"20\" />\n        </Style>\n        <Style x:Key=\"HeaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n            <Setter Property=\"Foreground\" Value=\"#0094ff\" />\n        </Style>\n        <Style x:Key=\"DialogStyle\" TargetType=\"Border\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"BorderBrush\" Value=\"White\" />\n            <Setter Property=\"BorderThickness\" Value=\"2\" />\n            <Setter Property=\"Padding\" Value=\"10\" />\n            <Setter Property=\"CornerRadius\" Value=\"2\" />\n        </Style>\n        <Style x:Key=\"LabelStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Right\" />\n        </Style>\n        <Style x:Key=\"InputStyle\" TargetType=\"TextBox\">\n            <Setter Property=\"MinWidth\" Value=\"400\" />\n            <Setter Property=\"Margin\" Value=\"5\" />\n        </Style>\n    </Page.Resources>\n    <Border Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid Margin=\"20\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n            </Grid.RowDefinitions>\n            <TextBlock Grid.Row=\"0\" Style=\"{StaticResource SubheaderStyle}\">Microsoft Azure Mobile Services</TextBlock>\n            <TextBlock Grid.Row=\"1\"  Style=\"{StaticResource HeaderStyle}\">C# Client Library Tests</TextBlock>\n            <Border Grid.Row=\"2\" Style=\"{StaticResource DialogStyle}\">\n                <Grid>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\" />\n                        <ColumnDefinition Width=\"Auto\" />\n                    </Grid.ColumnDefinitions>\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                        <RowDefinition Height=\"Auto\" />\n                    </Grid.RowDefinitions>\n                    \n                    <TextBlock\n                      Grid.Row=\"0\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource LabelStyle}\"\n                      Text=\"Mobile Service Uri:\" />\n                    <TextBox\n                      x:Name=\"txtRuntimeUri\"\n                      Grid.Row=\"0\"\n                      Grid.Column=\"1\"\n                      Style=\"{StaticResource InputStyle}\" />\n\n                    <TextBlock\n                      Grid.Row=\"1\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource LabelStyle}\"\n                      Text=\"Mobile Service Key:\" />\n                    <TextBox\n                      x:Name=\"txtRuntimeKey\"\n                      Grid.Row=\"1\"\n                      Grid.Column=\"1\"\n                      Style=\"{StaticResource InputStyle}\" />\n\n                    <TextBlock\n                      Grid.Row=\"2\"\n                      Grid.Column=\"0\"\n                      Style=\"{StaticResource LabelStyle}\"\n                      Text=\"Tags:\" />\n                    <TextBox\n                      x:Name=\"txtTags\"\n                      Grid.Row=\"2\"\n                      Grid.Column=\"1\"\n                      Style=\"{StaticResource InputStyle}\" />\n\n                    <StackPanel\n                        Grid.Row=\"3\"\n                        Grid.Column=\"1\"\n                        HorizontalAlignment=\"Right\" Orientation=\"Horizontal\">\n                        \n                        <Button\n                          x:Name=\"btnLoginTests\"                         \n                          Content=\"Login Tests\"\n                          MinWidth=\"100\"\n                          Click=\"ExecuteLoginTests\" />\n                    \n                        <Button\n                          x:Name=\"btnUnitTests\"\n                          Content=\"Unit Tests\"\n                          MinWidth=\"100\"\n                          Click=\"ExecuteUnitTests\" />\n                    </StackPanel>\n                </Grid>\n            </Border>\n        </Grid>\n    </Border>\n</Page>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/UI/MainPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing Windows.Storage;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Test setup UI page.\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        /// <summary>\n        /// Initializes a new instance of the MainPage class.\n        /// </summary>\n        public MainPage()\n        {\n            InitializeComponent();\n\n            string mobileServiceRuntimeURL = ApplicationData.Current.LocalSettings.Values[\"MobileServiceRuntimeUrl\"] as string;\n            string mobileServiceRuntimeKey = ApplicationData.Current.LocalSettings.Values[\"MobileServiceRuntimeKey\"] as string;\n            string tags = ApplicationData.Current.LocalSettings.Values[\"MobileServiceTags\"] as string;\n\n            txtRuntimeUri.Text = mobileServiceRuntimeURL ?? \"\";\n            txtRuntimeKey.Text = mobileServiceRuntimeKey ?? \"\";\n            txtTags.Text = tags ?? \"\";\n\n            Loaded += (s, e) => btnUnitTests.Focus(FocusState.Keyboard);\n        }\n\n        /// <summary>\n        /// Start the unit test run.\n        /// </summary>\n        /// <param name=\"sender\">Start button.</param>\n        /// <param name=\"e\">Event arguments.</param>\n        private void ExecuteUnitTests(object sender, RoutedEventArgs e)\n        {\n            // Get the test settings from the UI\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeUrl\"] = txtRuntimeUri.Text;\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeKey\"] = txtRuntimeKey.Text;\n            App.Harness.Settings.TagExpression = txtTags.Text;\n\n            ApplicationData.Current.LocalSettings.Values[\"MobileServiceRuntimeUrl\"] = txtRuntimeUri.Text;\n            ApplicationData.Current.LocalSettings.Values[\"MobileServiceRuntimeKey\"] = txtRuntimeKey.Text;\n            ApplicationData.Current.LocalSettings.Values[\"MobileServiceTags\"] = txtTags.Text;\n\n            Frame.Navigate(typeof(TestPage));\n        }\n\n        /// <summary>\n        /// Loads the login test page.\n        /// </summary>\n        /// <param name=\"sender\">Login button.</param>\n        /// <param name=\"e\">Event arguments.</param>\n        private void ExecuteLoginTests(object sender, RoutedEventArgs e)\n        {\n            App.Harness.Settings.Custom[\"MobileServiceRuntimeUrl\"] = txtRuntimeUri.Text;\n            ApplicationData.Current.LocalSettings.Values[\"MobileServiceRuntimeUrl\"] = txtRuntimeUri.Text;\n\n            Frame.Navigate(typeof(LoginPage));\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/UI/TestDescription.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\n\n#if NETFX_CORE\nusing Windows.UI;\nusing Windows.UI.Xaml.Media;\nusing System.Collections.Generic;\n#endif\n\n#if !NETFX_CORE\nusing System.Windows.Media;\nusing System.Collections.Generic;\n#endif\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// UI model for a test method.\n    /// </summary>\n    public class TestDescription : INotifyPropertyChanged\n    {\n        private static Dictionary<Color, SolidColorBrush> BrushCache = new Dictionary<Color, SolidColorBrush>();\n        private static Color DescriptionColor = Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF);\n        private string _name;\n        \n        public string Name\n        {\n            get { return _name; }\n            set\n            {\n                _name = value;\n                OnPropertyChanged();\n            }\n        }\n\n        private Color _color;\n\n        public Color Color\n        {\n            get { return _color; }\n            set\n            {\n                _color = value;\n                OnPropertyChanged();\n                OnPropertyChanged(\"Brush\");\n            }\n        }\n\n        public SolidColorBrush Brush\n        {\n            get \n            { \n                SolidColorBrush brush;\n                if (!BrushCache.TryGetValue(this.Color, out brush))\n                {\n                    BrushCache[this.Color] = brush = new SolidColorBrush(this.Color);\n                }\n                return brush;\n            }\n        }\n\n        public ObservableCollection<string> Details { get; private set; }\n\n        public TestDescription()\n        {\n            Details = new ObservableCollection<string>();\n            Color = DescriptionColor;\n        }\n\n        public event PropertyChangedEventHandler PropertyChanged;\n\n        protected void OnPropertyChanged([CallerMemberName] string memberName = \"\")\n        {\n            PropertyChangedEventHandler handler = PropertyChanged;\n            if (handler != null)\n            {\n                handler(this, new PropertyChangedEventArgs(memberName));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/UI/TestPage.xaml",
    "content": "﻿<Page\n  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n  xmlns:local=\"using:Microsoft.WindowsAzure.MobileServices.Test\"    \n  x:Class=\"Microsoft.WindowsAzure.MobileServices.Test.TestPage\"\n  IsTabStop=\"false\">\n    <Page.Resources>\n        <Style x:Key=\"SubheaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n            <Setter Property=\"FontSize\" Value=\"18\" />\n            <Setter Property=\"FontWeight\" Value=\"Bold\" />\n            <Setter Property=\"LineHeight\" Value=\"20\" />\n        </Style>\n        <Style x:Key=\"HeaderStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n            <Setter Property=\"Foreground\" Value=\"#0094ff\" />\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n        </Style>\n        <Style x:Key=\"TestStyle\" TargetType=\"ListView\">\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"ItemContainerTransitions\" Value=\"{x:Null}\" />                \n        </Style>\n        <Style x:Key=\"StatusStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Top\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"Margin\" Value=\"0 0 0 10\" />\n        </Style>\n        <Style x:Key=\"ProgressStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">                    \n            <Setter Property=\"Foreground\" Value=\"#ffd800\" />\n        </Style>\n        <CollectionViewSource x:Name=\"cvsTests\" IsSourceGrouped=\"true\" />\n    </Page.Resources>\n    <Border Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid Margin=\"20\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"Auto\" />\n            </Grid.RowDefinitions>\n            <TextBlock Grid.Row=\"0\" Style=\"{StaticResource SubheaderStyle}\">Microsoft Azure Mobile Services</TextBlock>\n            <TextBlock Grid.Row=\"1\"  Style=\"{StaticResource HeaderStyle}\">C# Client Library Tests</TextBlock>\n            <TextBlock x:Name=\"lblStatus\" Grid.Row=\"2\" Style=\"{StaticResource StatusStyle}\">Unit Test Run</TextBlock>\n            <ListView\n              x:Name=\"lstTests\"\n              Grid.Row=\"3\"\n              Style=\"{StaticResource TestStyle}\"\n              ItemsSource=\"{Binding Source={StaticResource cvsTests}}\"\n              SelectionMode=\"None\">\n                <ListView.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Margin=\"8 0\">\n                            <TextBlock Text=\"{Binding Name}\" Foreground=\"{Binding Brush}\" FontSize=\"16\" FontWeight=\"ExtraLight\" />\n                            <!--<ItemsControl ItemsSource=\"{Binding Details}\" Margin=\"15 0 0 0\" FontSize=\"12\" Foreground=\"LightGray\" />-->\n                        </StackPanel>                        \n                    </DataTemplate>\n                </ListView.ItemTemplate>\n                <ListView.GroupStyle>\n                    <GroupStyle HidesIfEmpty=\"True\">\n                        <GroupStyle.HeaderTemplate>\n                            <DataTemplate>\n                                <Border BorderThickness=\"0 0 0 1\" BorderBrush=\"#666666\" Margin=\"0 15 0 0\" HorizontalAlignment=\"Stretch\">\n                                    <StackPanel Orientation=\"Horizontal\" HorizontalAlignment=\"Stretch\">\n                                        <TextBlock Text=\"{Binding Name}\" FontSize=\"24\" FontWeight=\"ExtraLight\" />\n                                        <TextBlock Text=\" tests\" FontSize=\"24\" FontWeight=\"ExtraLight\" />                                    \n                                    </StackPanel>\n                                </Border>\n                            </DataTemplate>\n                        </GroupStyle.HeaderTemplate>\n                        <GroupStyle.Panel>\n                            <ItemsPanelTemplate>\n                                <StackPanel Orientation=\"Vertical\" />\n                            </ItemsPanelTemplate>\n                        </GroupStyle.Panel>\n                    </GroupStyle>\n                </ListView.GroupStyle>\n                <ListView.Template>\n                    <ControlTemplate TargetType=\"ListView\">\n                        <Border BorderBrush=\"{TemplateBinding BorderBrush}\"\n                            Background=\"{TemplateBinding Background}\"\n                            BorderThickness=\"{TemplateBinding BorderThickness}\"\n                            HorizontalAlignment=\"Stretch\"\n                            VerticalAlignment=\"Stretch\">\n                            <ScrollViewer x:Name=\"ScrollViewer\"\n                                      TabNavigation=\"{TemplateBinding TabNavigation}\"\n                                      HorizontalScrollMode=\"{TemplateBinding ScrollViewer.HorizontalScrollMode}\"\n                                      HorizontalScrollBarVisibility=\"{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}\"\n                                      IsHorizontalScrollChainingEnabled=\"{TemplateBinding ScrollViewer.IsHorizontalScrollChainingEnabled}\"\n                                      VerticalScrollMode=\"{TemplateBinding ScrollViewer.VerticalScrollMode}\"\n                                      VerticalScrollBarVisibility=\"{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}\"\n                                      IsVerticalScrollChainingEnabled=\"{TemplateBinding ScrollViewer.IsVerticalScrollChainingEnabled}\"\n                                      IsHorizontalRailEnabled=\"{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}\"\n                                      IsVerticalRailEnabled=\"{TemplateBinding ScrollViewer.IsVerticalRailEnabled}\"\n                                      ZoomMode=\"{TemplateBinding ScrollViewer.ZoomMode}\"\n                                      HorizontalAlignment=\"Stretch\"\n                                      VerticalAlignment=\"Stretch\">\n                                <ItemsPresenter\n                                    Header=\"{TemplateBinding Header}\" \n                                    HeaderTemplate=\"{TemplateBinding HeaderTemplate}\"\n                                    HeaderTransitions=\"{TemplateBinding HeaderTransitions}\"\n                                    Padding=\"{TemplateBinding Padding}\"/>\n                            </ScrollViewer>\n                        </Border>\n                    </ControlTemplate>\n                </ListView.Template>\n                <ListView.ItemContainerStyle>\n                    <Style TargetType=\"ListViewItem\">\n                        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\" />\n                        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\" />\n                        <Setter Property=\"Background\" Value=\"Transparent\"/>\n                        <Setter Property=\"TabNavigation\" Value=\"Local\"/>\n                        <Setter Property=\"IsHoldingEnabled\" Value=\"True\"/>\n                        <Setter Property=\"Margin\" Value=\"0,0,18,0\"/>\n                        <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\n                        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n                        <Setter Property=\"Template\">\n                            <Setter.Value>\n                                <ControlTemplate TargetType=\"ListViewItem\">\n                                    <Border x:Name=\"OuterContainer\">\n                                        <VisualStateManager.VisualStateGroups>\n                                            <VisualStateGroup x:Name=\"CommonStates\">\n                                                <VisualState x:Name=\"Normal\"/>\n                                                <VisualState x:Name=\"PointerOver\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"PointerOverBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SelectionBackground\"\n                                                                        Storyboard.TargetProperty=\"Fill\">\n                                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ListViewItemSelectedPointerOverBackgroundThemeBrush}\" />\n                                                        </ObjectAnimationUsingKeyFrames>\n                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SelectedBorder\"\n                                                                        Storyboard.TargetProperty=\"Stroke\">\n                                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ListViewItemSelectedPointerOverBorderThemeBrush}\" />\n                                                        </ObjectAnimationUsingKeyFrames>\n                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SelectedEarmark\"\n                                                                       Storyboard.TargetProperty=\"Fill\">\n                                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ListViewItemSelectedPointerOverBackgroundThemeBrush}\" />\n                                                        </ObjectAnimationUsingKeyFrames>\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Pressed\">\n                                                    <Storyboard>\n                                                        <PointerDownThemeAnimation TargetName=\"ContentContainer\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"PointerOverPressed\">\n                                                    <Storyboard>\n                                                        <PointerDownThemeAnimation TargetName=\"ContentContainer\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"PointerOverBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SelectionBackground\"\n                                                                        Storyboard.TargetProperty=\"Fill\">\n                                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ListViewItemSelectedPointerOverBackgroundThemeBrush}\" />\n                                                        </ObjectAnimationUsingKeyFrames>\n                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SelectedBorder\"\n                                                                        Storyboard.TargetProperty=\"Stroke\">\n                                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ListViewItemSelectedPointerOverBorderThemeBrush}\" />\n                                                        </ObjectAnimationUsingKeyFrames>\n                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SelectedEarmark\"\n                                                                       Storyboard.TargetProperty=\"Fill\">\n                                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ListViewItemSelectedPointerOverBackgroundThemeBrush}\" />\n                                                        </ObjectAnimationUsingKeyFrames>\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Disabled\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"contentPresenter\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"{StaticResource ListViewItemDisabledThemeOpacity}\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                            </VisualStateGroup>\n                                            <VisualStateGroup x:Name=\"FocusStates\">\n                                                <VisualState x:Name=\"Focused\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetProperty=\"Opacity\" Storyboard.TargetName=\"FocusVisual\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Unfocused\"/>\n                                                <VisualState x:Name=\"PointerFocused\"/>\n                                            </VisualStateGroup>\n                                            <VisualStateGroup x:Name=\"SelectionHintStates\">\n                                                <VisualState x:Name=\"VerticalSelectionHint\">\n                                                    <Storyboard>\n                                                        <SwipeHintThemeAnimation TargetName=\"SelectionBackground\" ToVerticalOffset=\"15\" ToHorizontalOffset=\"0\" />\n                                                        <SwipeHintThemeAnimation TargetName=\"ContentBorder\" ToVerticalOffset=\"15\" ToHorizontalOffset=\"0\" />\n                                                        <SwipeHintThemeAnimation TargetName=\"SelectedCheckMark\" ToVerticalOffset=\"15\" ToHorizontalOffset=\"0\" />\n                                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"HintGlyph\"\n                                                                       Storyboard.TargetProperty=\"Opacity\"\n                                                                       Duration=\"0:0:0.500\">\n                                                            <DiscreteDoubleKeyFrame Value=\"0.5\" KeyTime=\"0:0:0\" />\n                                                            <DiscreteDoubleKeyFrame Value=\"0\" KeyTime=\"0:0:0.500\" />\n                                                        </DoubleAnimationUsingKeyFrames>\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"HorizontalSelectionHint\">\n                                                    <Storyboard>\n                                                        <SwipeHintThemeAnimation TargetName=\"SelectionBackground\" ToHorizontalOffset=\"-23\" ToVerticalOffset=\"0\" />\n                                                        <SwipeHintThemeAnimation TargetName=\"ContentBorder\" ToHorizontalOffset=\"-23\" ToVerticalOffset=\"0\" />\n                                                        <SwipeHintThemeAnimation TargetName=\"SelectedCheckMark\" ToHorizontalOffset=\"-23\" ToVerticalOffset=\"0\" />\n                                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"HintGlyph\"\n                                                                       Storyboard.TargetProperty=\"Opacity\"\n                                                                       Duration=\"0:0:0.500\">\n                                                            <DiscreteDoubleKeyFrame Value=\"0.5\" KeyTime=\"0:0:0\" />\n                                                            <DiscreteDoubleKeyFrame Value=\"0\" KeyTime=\"0:0:0.500\" />\n                                                        </DoubleAnimationUsingKeyFrames>\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"NoSelectionHint\" />\n                                                <VisualStateGroup.Transitions>\n                                                    <VisualTransition To=\"NoSelectionHint\" GeneratedDuration=\"0:0:0.65\"/>\n                                                </VisualStateGroup.Transitions>\n                                            </VisualStateGroup>\n                                            <VisualStateGroup x:Name=\"SelectionStates\">\n                                                <VisualState x:Name=\"UnselectedSwiping\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectingGlyph\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"0.5\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"HintGlyphBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Selecting\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectionBackground\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectingGlyph\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"HintGlyphBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Selected\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectionBackground\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedCheckMark\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"SelectedSwiping\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectionBackground\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedCheckMark\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Unselecting\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"HintGlyphBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"Unselected\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"HintGlyphBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                                <VisualState x:Name=\"SelectedUnfocused\">\n                                                    <Storyboard>\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectionBackground\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedBorder\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                        <DoubleAnimation Storyboard.TargetName=\"SelectedCheckMark\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         Duration=\"0\"\n                                                         To=\"1\" />\n                                                    </Storyboard>\n                                                </VisualState>\n                                            </VisualStateGroup>\n                                        </VisualStateManager.VisualStateGroups>\n                                        <Grid x:Name=\"ReorderHintContent\" Background=\"Transparent\">\n                                            <Path x:Name=\"SelectingGlyph\" Opacity=\"0\" Data=\"F1 M133.1,17.9 L137.2,13.2 L144.6,19.6 L156.4,5.8 L161.2,9.9 L145.6,28.4 z\" Fill=\"{StaticResource ListViewItemCheckSelectingThemeBrush}\" Height=\"13\" Stretch=\"Fill\" Width=\"15\" HorizontalAlignment=\"Right\" Margin=\"0,9.5,9.5,0\" VerticalAlignment=\"Top\" FlowDirection=\"LeftToRight\"/>\n                                            <Border x:Name=\"ContentContainer\">\n                                                <Grid x:Name=\"InnerDragContent\">\n                                                    <Border x:Name=\"HintGlyphBorder\"\n                                                      Height=\"20\"\n                                                      Width=\"20\"\n                                                      HorizontalAlignment=\"Right\"\n                                                      VerticalAlignment=\"Top\"\n                                                      Opacity=\"0\"\n                                                      Margin=\"4\">\n                                                        <Path x:Name=\"HintGlyph\" Opacity=\"0\" Data=\"F1 M133.1,17.9 L137.2,13.2 L144.6,19.6 L156.4,5.8 L161.2,9.9 L145.6,28.4 z\" Fill=\"{StaticResource ListViewItemCheckHintThemeBrush}\" Height=\"13\" Stretch=\"Fill\"  Width=\"15\" HorizontalAlignment=\"Right\" Margin=\"0,5.5,5.5,0\" VerticalAlignment=\"Top\" FlowDirection=\"LeftToRight\"/>\n                                                    </Border>\n                                                    <Rectangle x:Name=\"PointerOverBorder\"\n                                                        IsHitTestVisible=\"False\"\n                                                        Opacity=\"0\"\n                                                        Fill=\"#18FFFFFF\" \n                                                        Margin=\"1\" />\n                                                    <Rectangle x:Name=\"FocusVisual\"\n                                                        IsHitTestVisible=\"False\"\n                                                        Opacity=\"0\"\n                                                        StrokeThickness=\"2\"\n                                                        Stroke=\"{StaticResource ListViewItemFocusBorderThemeBrush}\" />\n                                                    <Rectangle x:Name=\"SelectionBackground\"\n                                                        Margin=\"4\"\n                                                        Fill=\"{StaticResource ListViewItemSelectedBackgroundThemeBrush}\"\n                                                        Opacity=\"0\" />\n                                                    <Border x:Name=\"ContentBorder\"\n                                                        Background=\"{TemplateBinding Background}\"\n                                                        BorderBrush=\"{TemplateBinding BorderBrush}\"\n                                                        BorderThickness=\"{TemplateBinding BorderThickness}\"\n                                                        Margin=\"4\">\n                                                        <Grid>\n                                                            <ContentPresenter x:Name=\"contentPresenter\"\n                                                              ContentTransitions=\"{TemplateBinding ContentTransitions}\"\n                                                              ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                                              Content=\"{TemplateBinding Content}\"\n                                                              HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                                              VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                                              Margin=\"{TemplateBinding Padding}\" />\n                                                            <Rectangle x:Name=\"SelectedBorder\"\n                                                                IsHitTestVisible=\"False\"\n                                                                Opacity=\"0\"\n                                                                Stroke=\"{StaticResource ListViewItemSelectedBackgroundThemeBrush}\"\n                                                                StrokeThickness=\"{StaticResource ListViewItemSelectedBorderThemeThickness}\" />\n                                                            <Rectangle x:Name=\"MultiArrangeOverlayBackground\"\n                                                               IsHitTestVisible=\"False\"\n                                                               Opacity=\"0\"\n                                                               Fill=\"{StaticResource ListViewItemDragBackgroundThemeBrush}\" />\n                                                        </Grid>\n                                                    </Border>\n                                                    <Border x:Name=\"SelectedCheckMarkOuter\"\n                                                        IsHitTestVisible=\"False\"\n                                                        HorizontalAlignment=\"Right\"\n                                                        VerticalAlignment=\"Top\"\n                                                        Padding=\"{TemplateBinding BorderThickness}\"\n                                                        Margin=\"4\">\n                                                        <Grid x:Name=\"SelectedCheckMark\" Opacity=\"0\" Height=\"20\" Width=\"20\">\n                                                            <Path x:Name=\"SelectedEarmark\" Data=\"M0,0 L40,0 L40,40 z\"  Fill=\"{StaticResource ListViewItemSelectedBackgroundThemeBrush}\" Stretch=\"Fill\"/>\n                                                            <Path Data=\"F1 M133.1,17.9 L137.2,13.2 L144.6,19.6 L156.4,5.8 L161.2,9.9 L145.6,28.4 z\" Fill=\"{StaticResource ListViewItemCheckThemeBrush}\" Height=\"13\" Stretch=\"Fill\" Width=\"15\" HorizontalAlignment=\"Right\" Margin=\"0,5.5,5.5,0\" VerticalAlignment=\"Top\" FlowDirection=\"LeftToRight\"/>\n                                                        </Grid>\n                                                    </Border>\n                                                </Grid>\n                                            </Border>\n                                        </Grid>\n                                    </Border>\n                                </ControlTemplate>\n                            </Setter.Value>\n                        </Setter>\n                    </Style>\n                </ListView.ItemContainerStyle>\n            </ListView>\n            <Grid  x:Name=\"pnlFooter\" Grid.Row=\"4\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\" />\n                    <RowDefinition Height=\"Auto\" />\n                </Grid.RowDefinitions>\n                <ProgressBar x:Name=\"progress\" />\n                <StackPanel Grid.Row=\"1\" Orientation=\"Horizontal\" HorizontalAlignment=\"Center\">\n                    <TextBlock x:Name=\"lblCurrentTestNumber\" Text=\"0\" Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock Text=\" / \"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock x:Name=\"lblTotalTestNumber\" Text=\"0\"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock Text=\"  (with  \"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock x:Name=\"lblFailureNumber\" Text=\"0\"  Style=\"{StaticResource ProgressStyle}\" />\n                    <TextBlock Text=\" failures)\"  Style=\"{StaticResource ProgressStyle}\" />\n                </StackPanel>\n            </Grid>\n            <TextBlock\n              x:Name=\"lblResults\"\n              Grid.Row=\"5\"\n              Visibility=\"Collapsed\"\n              Style=\"{StaticResource ProgressStyle}\"\n              HorizontalAlignment=\"Center\" />\n        </Grid>\n    </Border>\n</Page>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/UI/TestPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.ObjectModel;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Windows.UI;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Media;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    /// <summary>\n    /// Test harness results page.\n    /// </summary>\n    public sealed partial class TestPage : Page, ITestReporter\n    {\n        private static Color SkippedColor = Color.FromArgb(0xFF, 0x66, 0x66, 0x66);\n        private static Color FailedColor = Color.FromArgb(0xFF, 0xFF, 0x00, 0x6E);\n        private static Color PassedColor = Color.FromArgb(0xFF, 0x2A, 0x9E, 0x39);\n\n        private ObservableCollection<GroupDescription> _groups;\n        private GroupDescription _currentGroup = null;\n        private TestDescription _currentTest = null;\n\n        /// <summary>\n        /// Initializes a new instance of the TestPage.\n        /// </summary>\n        public TestPage()\n        {\n            InitializeComponent();\n\n            // Setup the groups data source\n            _groups = new ObservableCollection<GroupDescription>();\n            cvsTests.Source = _groups;\n\n            // Start a test run\n            App.Harness.Reporter = this;\n            Task.Factory.StartNew(() => App.Harness.RunAsync());\n        }\n\n        public async void StartRun(TestHarness harness)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n\n                lblCurrentTestNumber.Text = harness.Progress.ToString();\n                lblTotalTestNumber.Text = harness.Count.ToString();\n                lblFailureNumber.Tag = harness.Failures.ToString() ?? \"0\";\n                progress.Value = 1;\n                pnlFooter.Visibility = Visibility.Visible;\n            });\n        }\n\n        public async void EndRun(TestHarness harness)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                pnlFooter.Visibility = Visibility.Collapsed;\n                if (harness.Failures > 0)\n                {\n                    lblResults.Text = string.Format(CultureInfo.InvariantCulture, \"{0}/{1} tests failed!\", harness.Failures, harness.Count);\n                    lblResults.Foreground = new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0x00, 0x6E));\n                }\n                else\n                {\n                    lblResults.Text = string.Format(CultureInfo.InvariantCulture, \"{0} tests passed!\", harness.Count);\n                }\n                lblResults.Visibility = Visibility.Visible;\n            });\n        }\n\n        public async void Progress(TestHarness harness)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                lblCurrentTestNumber.Text = harness.Progress.ToString();\n                lblFailureNumber.Text = \" \" + (harness.Failures.ToString() ?? \"0\");\n                double value = harness.Progress;\n                int count = harness.Count;\n                if (count > 0)\n                {\n                    value = value * 100.0 / (double)count;\n                }\n                progress.Value = value;\n            });\n        }\n\n        public async void StartGroup(TestGroup group)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                _currentGroup = new GroupDescription { Name = group.Name };\n                _groups.Add(_currentGroup);\n            });\n        }\n\n        public async void EndGroup(TestGroup group)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                _currentGroup = null;\n            });\n        }\n        \n        public async void StartTest(TestMethod test)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>\n            {\n                _currentTest = new TestDescription { Name = test.Name };\n                _currentGroup.Add(_currentTest);\n\n                await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n                {\n                    lstTests.ScrollIntoView(_currentTest);\n                });\n            });\n        }\n\n        public async void EndTest(TestMethod method)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                if (method.Excluded)\n                {\n                    _currentTest.Color = SkippedColor;\n                }\n                else if (!method.Passed)\n                {\n                    _currentTest.Color = FailedColor;\n                }\n                else\n                {\n                    _currentTest.Color = PassedColor;\n                }\n                _currentTest = null;\n            });\n        }\n\n        public async void Log(string message)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                _currentTest.Details.Add(message);\n            });\n        }\n\n        public async void Error(string errorDetails)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                _currentTest.Details.Add(errorDetails);\n            });\n        }\n\n        public async void Status(string status)\n        {\n            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                lblStatus.Text = status;\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/UnitTests/Collections/IncrementalLoadingMobileServiceCollection.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Windows.UI.Xaml.Data;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    public class ExceptionHandlingdMobileServiceIncrementalLoadingCollection : MobileServiceIncrementalLoadingCollection<Book>\n    {\n        public ExceptionHandlingdMobileServiceIncrementalLoadingCollection(IMobileServiceTableQuery<Book> query)\n            : base(query)\n        {\n            this.ThrowExceptionsFromLoading = false;\n        }\n    }\n\n    [Tag(\"collection\")]\n    [Tag(\"unit\")]\n    public class MobileServiceCollectionTest : TestBase\n    {\n        [AsyncTestMethod]\n        public async Task MobileServiceCollectionLoadMoreItemsAsyncExceptionsNotHandledByDefault()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n            query.EnumerableAsyncThrowsException = true;\n\n            MobileServiceIncrementalLoadingCollection<Book, Book> collection = new MobileServiceIncrementalLoadingCollection<Book, Book>(query);\n            CancellationTokenSource tokenSource = new CancellationTokenSource();\n\n            Exception ex = null;\n\n            try\n            {\n                await ((ISupportIncrementalLoading)collection).LoadMoreItemsAsync(10);\n            }\n            catch (Exception e)\n            {\n                ex = e;\n            }\n\n            Assert.IsNotNull(ex);\n        }\n\n        [AsyncTestMethod]\n        public async Task MobileServiceCollectionLoadMoreItemsAsyncExceptionsCanBeHandled()\n        {\n            // Get the Books table\n            MobileServiceTableQueryMock<Book> query = new MobileServiceTableQueryMock<Book>();\n            query.EnumerableAsyncThrowsException = true;\n\n            ExceptionHandlingdMobileServiceIncrementalLoadingCollection collection = \n                new ExceptionHandlingdMobileServiceIncrementalLoadingCollection(query);\n            CancellationTokenSource tokenSource = new CancellationTokenSource();\n\n            Exception ex = null;\n\n            try\n            {\n                await ((ISupportIncrementalLoading)collection).LoadMoreItemsAsync(10);\n            }\n            catch (Exception e)\n            {\n                ex = e;\n            }\n\n            Assert.IsNull(ex);\n        }      \n    }\n}\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/UnitTests/PushUnit.Test.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Linq;\n\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"push\")]\n    public class PushUnit : TestBase\n    {\n        [TestMethod]\n        public void InvalidBodyTemplateIfNotXml()\n        {\n            try\n            {\n                var registration = new WnsTemplateRegistration(\"uri\", \"junkBodyTemplate\", \"testName\");\n                Assert.Fail(\"Expected templateBody that is not XML to throw ArgumentException\");\n            }\n            catch\n            {\n                // PASSES\n            }           \n        }\n\n        [TestMethod]\n        public void InvalidBodyTemplateIfImproperXml()\n        {\n            try\n            {\n                var registration = new WnsTemplateRegistration(\n                    \"uri\",\n                    \"<foo><visual><binding template=\\\"ToastText01\\\"><text id=\\\"1\\\">$(message)</text></binding></visual></foo>\", \n                    \"testName\");\n                Assert.Fail(\"Expected templateBody with unexpected first XML node to throw ArgumentException\");\n            }\n            catch\n            {\n                // PASSES\n            }           \n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.WindowsStore.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"win\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"win\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"win\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"win\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/AppDelegate.cs",
    "content": "using System.Reflection;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Microsoft.WindowsAzure.MobileServices.Test;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Foundation;\nusing UIKit;\nusing CoreGraphics;\n\nnamespace MicrosoftWindowsAzureMobileiOSTest\n{\n\t[Foundation.Register(\"AppDelegate\")]\n\tpublic partial class AppDelegate : UIApplicationDelegate\n\t{\n\t\tUIWindow window;\n\n\t    public static TestHarness Harness { get; private set; }\n\n\t    static AppDelegate()\n\t    {\n            CurrentPlatform.Init();\n\n\t        Harness = new TestHarness();\n            Harness.LoadTestAssembly(typeof(MobileServiceSerializerTests).GetTypeInfo().Assembly);\n            Harness.LoadTestAssembly(typeof(PushFunctional).GetTypeInfo().Assembly);\n\t    }\n\n\t\tpublic override bool FinishedLaunching (UIApplication app, NSDictionary options)\n\t\t{\n\t\t\twindow = new UIWindow ((CGRect)UIScreen.MainScreen.Bounds);\n\t\t    window.RootViewController = new UINavigationController (new LoginViewController());\n\t\t\twindow.MakeKeyAndVisible();\n\n\t\t\treturn true;\n\t\t}\n\t}\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>UIDeviceFamily</key>\n\t<array>\n\t\t<integer>1</integer>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t</array>\n\t<key>MinimumOSVersion</key>\n\t<string>5.2</string>\n\t<key>NSMainNibFile</key>\n\t<string></string>\n\t<key>UIStatusBarTintParameters</key>\n\t<dict>\n\t\t<key>UINavigationBar</key>\n\t\t<dict>\n\t\t\t<key>Style</key>\n\t\t\t<string>UIBarStyleDefault</string>\n\t\t\t<key>Translucent</key>\n\t\t\t<false/>\n\t\t</dict>\n\t</dict>\n\t<key>CFBundleDisplayName</key>\n\t<string>iOSTest</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.mobileservices.iOSTest</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/Main.cs",
    "content": "using UIKit;\n\nnamespace MicrosoftWindowsAzureMobileiOSTest\n{\n\tpublic class Application\n\t{\n\t\t// This is the main entry point of the application.\n\t\tstatic void Main(string[] args)\n\t\t{\n\t\t\t// if you want to use a different Application Delegate class from \"AppDelegate\"\n\t\t\t// you can specify it here.\n\t\t\tUIApplication.Main(args, null, \"AppDelegate\");\n\t\t}\n\t}\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/Microsoft.WindowsAzure.Mobile.iOS.Test.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">iPhoneSimulator</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{977A5F48-B0F3-4860-AA1A-5B3081ED7D98}</ProjectGuid>\n    <ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>Microsoft.WindowsAzure.Mobile.iOS.Test</RootNamespace>\n    <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>\n    <AssemblyName>MicrosoftWindowsAzureMobileiOSTest</AssemblyName>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Debug</OutputPath>\n    <DefineConstants>DEBUG;XAMARIN</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchLink>Full</MtouchLink>\n    <MtouchDebug>True</MtouchDebug>\n    <MtouchSdkVersion>9.1</MtouchSdkVersion>\n    <MtouchProfiling>False</MtouchProfiling>\n    <MtouchFastDev>False</MtouchFastDev>\n    <MtouchArch>i386</MtouchArch>\n    <MtouchUseLlvm>False</MtouchUseLlvm>\n    <MtouchUseThumb>False</MtouchUseThumb>\n    <MtouchUseSGen>False</MtouchUseSGen>\n    <MtouchUseRefCounting>False</MtouchUseRefCounting>\n    <MtouchOptimizePNGs>True</MtouchOptimizePNGs>\n    <MtouchI18n />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' \">\n    <DebugType>none</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchLink>None</MtouchLink>\n    <DefineConstants>XAMARIN</DefineConstants>\n    <MtouchSdkVersion>7.1</MtouchSdkVersion>\n    <MtouchDebug>False</MtouchDebug>\n    <MtouchProfiling>False</MtouchProfiling>\n    <MtouchExtraArgs />\n    <MtouchFastDev>False</MtouchFastDev>\n    <MtouchEnableGenericValueTypeSharing>True</MtouchEnableGenericValueTypeSharing>\n    <MtouchArch>Default, ARMv7</MtouchArch>\n    <MtouchUseLlvm>False</MtouchUseLlvm>\n    <MtouchUseThumb>False</MtouchUseThumb>\n    <MtouchUseSGen>False</MtouchUseSGen>\n    <MtouchUseRefCounting>False</MtouchUseRefCounting>\n    <MtouchOptimizePNGs>True</MtouchOptimizePNGs>\n    <MtouchI18n />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhone' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhone\\Debug</OutputPath>\n    <DefineConstants>DEBUG</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchDebug>True</MtouchDebug>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <MtouchSdkVersion>6.1</MtouchSdkVersion>\n    <MtouchLink>SdkOnly</MtouchLink>\n    <MtouchProfiling>False</MtouchProfiling>\n    <MtouchExtraArgs>\n    </MtouchExtraArgs>\n    <MtouchFastDev>False</MtouchFastDev>\n    <MtouchArch>Default, ARMv7</MtouchArch>\n    <MtouchUseLlvm>False</MtouchUseLlvm>\n    <MtouchUseThumb>False</MtouchUseThumb>\n    <MtouchUseSGen>False</MtouchUseSGen>\n    <MtouchUseRefCounting>False</MtouchUseRefCounting>\n    <MtouchOptimizePNGs>True</MtouchOptimizePNGs>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhone' \">\n    <DebugType>none</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhone\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <DefineConstants>XAMARIN</DefineConstants>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Include=\"app.config\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"packages.config\" />\n    <None Include=\"readme.txt\" />\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\Functional\\PushFunctional.Test.cs\">\n      <Link>Functional\\PushFunctional.Test.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.WindowsAzure.MobileServices.WindowsStore.Test\\TestPlatform\\CurrentTestPlatform.cs\">\n      <Link>TestPlatform\\CurrentTestPlatform.cs</Link>\n    </Compile>\n    <Compile Include=\"UnitTests\\PushPlatformTest.cs\" />\n    <Compile Include=\"TestPlatform\\PushTestUtility.cs\" />\n    <Compile Include=\"UI\\LoginViewController.cs\" />\n    <Compile Include=\"Main.cs\" />\n    <Compile Include=\"AppDelegate.cs\" />\n    <Compile Include=\"UI\\HarnessViewController.cs\" />\n    <Compile Include=\"UI\\TestViewController.cs\" />\n    <None Include=\"Info.plist\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BundleResource Include=\"Resources\\Default.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"MonoTouch.Dialog-1\" />\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.4\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monotouch\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monotouch\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"Xamarin.iOS\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BundleResource Include=\"Resources\\Default%402x.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BundleResource Include=\"Resources\\Default-568h%402x.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices.iOS\\Microsoft.WindowsAzure.Mobile.Ext.iOS.csproj\">\n      <Project>{a871b137-83a8-4e9b-913d-30ee0288e161}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Ext.iOS</Name>\n      <IsAppExtension>false</IsAppExtension>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\src\\Microsoft.WindowsAzure.MobileServices\\Microsoft.WindowsAzure.Mobile.csproj\">\n      <Project>{75557793-e36e-4190-8714-5bd2665859fb}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.TestFramework\\Microsoft.WindowsAzure.Mobile.TestFramework.csproj\">\n      <Project>{a2500bd2-a9a2-4085-9978-dee3675b02dd}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.TestFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Microsoft.WindowsAzure.MobileServices.Test\\Microsoft.WindowsAzure.Mobile.Test.csproj\">\n      <Project>{d8bbc92a-b213-463b-911d-3a106f91d5f9}</Project>\n      <Name>Microsoft.WindowsAzure.Mobile.Test</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Xamarin\\iOS\\Xamarin.iOS.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n</Project>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/Properties/AssemblyInfo.cs",
    "content": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Microsoft.WindowsAzure.MobileServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Microsoft.WindowsAzure.MobileServices.Test\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Microsoft.WindowsAzure.MobileServices.Test\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly:Preserve]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"024c2798-106e-4f1f-9f06-e7ba1baa4da5\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/TestPlatform/PushTestUtility.cs",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    class PushTestUtility : IPushTestUtility\n    {\n        private const string DefaultDeviceToken =\n            \"<f6e7cd2 80fc5b5 d488f8394baf216506bc1bba 864d5b483d>\";\n        const string BodyTemplate = \"{\\\"aps\\\": {\\\"alert\\\":\\\"boo!\\\"}, \\\"extraprop\\\":\\\"($message)\\\"}\";\n        const string DefaultToastTemplateName = \"templateForToastWns\";\n        readonly string[] DefaultTags = { \"fooWns\", \"barWns\" };        \n\n        public string GetPushHandle()\n        {\n            return DefaultDeviceToken;\n        }\n\n        public string GetUpdatedPushHandle()\n        {\n            return DefaultDeviceToken.Replace('b', 'a').Replace('B', 'a');\n        }\n\n        public Registration GetTemplateRegistrationForToast()\n        {\n            var deviceToken = GetPushHandle();\n            return new ApnsTemplateRegistration(deviceToken, BodyTemplate, null, DefaultToastTemplateName, DefaultTags);\n        }\n\n        public void ValidateTemplateRegistration(Registration registration)\n        {\n            var apnsTemplateRegistration = (ApnsTemplateRegistration)registration;\n            Assert.AreEqual(apnsTemplateRegistration.BodyTemplate, BodyTemplate);            \n\n            foreach (string tag in DefaultTags)\n            {\n                Assert.IsTrue(registration.Tags.Contains(tag));\n            }\n\n            Assert.AreEqual(apnsTemplateRegistration.Name, DefaultToastTemplateName);\n            Assert.AreEqual(apnsTemplateRegistration.TemplateName, DefaultToastTemplateName);\n        }\n\n        public void ValidateTemplateRegistrationBeforeRegister(Registration registration)\n        {\n            ValidateTemplateRegistration(registration);\n            Assert.AreEqual(registration.Tags.Count(), DefaultTags.Length);\n            Assert.IsNull(registration.RegistrationId);\n        }\n\n        public void ValidateTemplateRegistrationAfterRegister(Registration registration, string zumoInstallationId)\n        {\n            ValidateTemplateRegistration(registration);\n            Assert.IsNotNull(registration.RegistrationId);\n            // TODO: Uncomment when .Net Runtime implements installationID\n            //Assert.IsTrue(registration.Tags.Contains(zumoInstallationId));\n            //Assert.AreEqual(registration.Tags.Count(), DefaultTags.Length + 1);\n        }\n\n        public Registration GetNewNativeRegistration(string deviceId, IEnumerable<string> tags)\n        {\n            return new ApnsRegistration(deviceId, tags);\n        }        \n\n        public Registration GetNewTemplateRegistration(string deviceId, string bodyTemplate, string templateName)\n        {\n            return new ApnsTemplateRegistration(deviceId, bodyTemplate, templateName, null);\n        }\n\n        public string GetListNativeRegistrationResponse()\n        {\n            return \"[{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\"}]\";\n        }\n\n        public string GetListTemplateRegistrationResponse()\n        {\n            return \"[{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\",\\\"templateBody\\\":\\\"cool template body\\\",\\\"templateName\\\":\\\"cool name\\\"}]\";\n        }\n\n        public string GetListMixedRegistrationResponse()\n        {\n            return \"[{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\"}, \" +\n            \"{\\\"registrationId\\\":\\\"7313155627197174428-6522078074300559092-1\\\",\\\"tags\\\":[\\\"fooWns\\\",\\\"barWns\\\",\\\"4de2605e-fd09-4875-a897-c8c4c0a51682\\\"],\\\"deviceId\\\":\\\"http://channelUri.com/a b\\\",\\\"templateBody\\\":\\\"cool template body\\\",\\\"templateName\\\":\\\"cool name\\\"}]\";\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/UI/HarnessViewController.cs",
    "content": "using System;\nusing CoreGraphics;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing MonoTouch.Dialog;\nusing UIKit;\n\nnamespace MicrosoftWindowsAzureMobileiOSTest\n{\n    public class HarnessViewController\n        : DialogViewController, ITestReporter\n    {\n        public HarnessViewController()\n\t        : base (UITableViewStyle.Grouped, null, pushing: true)\n        {\n            this.progress = new UIProgressView (new CGRect (0, 0, View.Bounds.Width, 5)) {\n\t            AutoresizingMask = UIViewAutoresizing.FlexibleWidth\n            };\n\n            Root = new RootElement (\"Test Status\") {\n                new Section {\n                    this.status,\n                    new UIViewElement (null, this.progress, false),\n    \t\t        this.numbers\n                }\n            };\n\n\t        AppDelegate.Harness.Reporter = this;\n\t        Task.Factory.StartNew (AppDelegate.Harness.RunAsync);\n        }\n\n        public void StartRun (TestHarness harness)\n        {\n        }\n\n        public void Progress (TestHarness harness)\n        {\n\t        InvokeOnMainThread (() => {\n                this.numbers.Value = String.Format (\"Passed: {0}  Failed: {1}\", harness.Progress - harness.Failures, harness.Failures);\n                ReloadData();\n\n                float value = harness.Progress;\n                int count = harness.Count;\n                if (count > 0)\n                    value = value / count;\n\n                this.progress.Progress = value;\n\t        });\n        }\n\n        public void EndRun (TestHarness harness)\n        {\n        }\n\n        public void StartGroup (TestGroup testGroup)\n        {\n            BeginInvokeOnMainThread (() => {\n                this.testsSection = new Section (testGroup.Name);\n                Root.Add (this.testsSection);\n            });\n        }\n\n        public void EndGroup (TestGroup testGroup)\n        {\n\t\t\t\n        }\n\n        public void StartTest (TestMethod test)\n        {\n\t        this.testLog = new StringBuilder();\n        }\n\n        public void EndTest (TestMethod test)\n        {\n\t        string output = this.testLog.ToString();\n\t        BeginInvokeOnMainThread (() => {\n                var element = new StyledStringElement (test.Name,\n                    () => NavigationController.PushViewController (new TestViewController (test, output), true));\n\n                if (!test.Passed)\n                    element.TextColor = UIColor.Red;\n\n\t\t\t\tthis.testsSection.Add (element);\n\t        });\n        }\n\n        public void Log (string message)\n        {\n            this.testLog.AppendLine (message);\n        }\n\n        public void Error (string errorDetails)\n        {\n            this.testLog.AppendLine (errorDetails);\n        }\n\n        public void Status (string status)\n        {\n            InvokeOnMainThread (() => {\n                this.status.Caption = status;\n                ReloadData();\n            });\n        }\n\n        private StringBuilder testLog;\n\n        private Section testsSection;\n        private readonly StyledStringElement status = new StyledStringElement (null, null, UITableViewCellStyle.Subtitle);\n        private readonly StyledStringElement numbers = new StyledStringElement (null, null, UITableViewCellStyle.Subtitle);\n        private readonly UIProgressView progress;\n\t}\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/UI/LoginViewController.cs",
    "content": "using Microsoft.WindowsAzure.MobileServices;\nusing MonoTouch.Dialog;\nusing Foundation;\nusing UIKit;\n\nnamespace MicrosoftWindowsAzureMobileiOSTest\n{\n    class LoginViewController\n        : DialogViewController\n    {\n        public LoginViewController()\n            : base (UITableViewStyle.Grouped, null)\n        {\n            var defaults = NSUserDefaults.StandardUserDefaults;\n            string mobileServiceUri = defaults.StringForKey (MobileServiceUriKey);\n            string mobileServiceKey = defaults.StringForKey (MobileServiceKeyKey);\n            string tags = defaults.StringForKey (TagsKey);\n\n            this.uriEntry = new EntryElement (null, \"Mobile Service URI\", mobileServiceUri);\n            this.keyEntry = new EntryElement (null, \"Mobile Service Key\", mobileServiceKey);\n            this.tagsEntry = new EntryElement (null, \"Tags\", tags);\n\n            Root = new RootElement (\"C# Client Library Tests\") {\n                new Section (\"Login\") {\n                    this.uriEntry,\n                    this.keyEntry,\n                    this.tagsEntry\n                },\n\n                new Section {\n                    new StringElement (\"Run Tests\", RunTests)                    \n                },\n\n                new Section{\n                    new StringElement(\"Login with Microsoft\", () => Login(MobileServiceAuthenticationProvider.MicrosoftAccount)),\n                    new StringElement(\"Login with Facebook\", () => Login(MobileServiceAuthenticationProvider.Facebook)),\n                    new StringElement(\"Login with Twitter\", () => Login(MobileServiceAuthenticationProvider.Twitter)),\n                    new StringElement(\"Login with Google\", () => Login(MobileServiceAuthenticationProvider.Google))\n                }\n            };\n        }\n\n        private const string MobileServiceUriKey = \"MobileServiceUri\";\n        private const string MobileServiceKeyKey = \"MobileServiceKey\";\n        private const string TagsKey = \"Tags\";\n\n        private readonly EntryElement uriEntry;\n        private readonly EntryElement keyEntry;\n        private readonly EntryElement tagsEntry;\n\n        private void RunTests()\n        {\n            var defaults = NSUserDefaults.StandardUserDefaults;\n            defaults.SetString (this.uriEntry.Value, MobileServiceUriKey);\n            defaults.SetString (this.keyEntry.Value, MobileServiceKeyKey);\n            defaults.SetString (this.tagsEntry.Value, TagsKey);\n\n            AppDelegate.Harness.Settings.Custom[\"MobileServiceRuntimeUrl\"] = this.uriEntry.Value;\n            AppDelegate.Harness.Settings.Custom[\"MobileServiceRuntimeKey\"] = this.keyEntry.Value;\n            AppDelegate.Harness.Settings.TagExpression = this.tagsEntry.Value;\n\n            if (!string.IsNullOrEmpty(AppDelegate.Harness.Settings.TagExpression))\n            {\n                AppDelegate.Harness.Settings.TagExpression += \" - notXamarin - notXamarin_iOS\";\n            }\n            else\n            {\n                AppDelegate.Harness.Settings.TagExpression = \"!notXamarin - notXamarin_iOS\";\n            }\n\n            NavigationController.PushViewController (new HarnessViewController(), true);\n        }\n\n        private async void Login(MobileServiceAuthenticationProvider provider)\n        {\n            var client = new MobileServiceClient(this.uriEntry.Value, this.keyEntry.Value);\n            var user = await client.LoginAsync(this, provider);\n            var alert = new UIAlertView(\"Welcome\", \"Your userId is: \" + user.UserId, null, \"OK\");\n            alert.Show();\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/UI/TestViewController.cs",
    "content": "using System;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing MonoTouch.Dialog;\nusing UIKit;\n\nnamespace MicrosoftWindowsAzureMobileiOSTest\n{\n    public class TestViewController\n        : DialogViewController\n    {\n        public TestViewController (TestMethod test, string log)\n            : base (UITableViewStyle.Grouped, null, pushing: true)\n        {\n            var section = new Section();\n\n            if (!String.IsNullOrWhiteSpace (test.Description))\n                section.Add (new StyledMultilineElement (\"Description:\", test.Description));\n\n            section.Add (new StyledMultilineElement (\"Output:\", log, UITableViewCellStyle.Subtitle));\n\n            Root = new RootElement (test.Name) {\n                section\n            };\n        }\n    }\n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/UnitTests/PushPlatformTest.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices.TestFramework;\nusing Foundation;\n\nnamespace Microsoft.WindowsAzure.MobileServices.Test\n{\n    [Tag(\"unit\")]\n    [Tag(\"push\")]\n    public class PushPlatformTest : TestBase\n    {\n        readonly string originalPushHandleDescription = \"<f6e7cd2 80fc5b5 d488f8394baf216506bc1bba 864d5b483d>\";\n        readonly NSData originalNSData;\n        readonly string originalNSDataTrimmed;\n\n        public PushPlatformTest()\n        {\n            this.originalNSData = NSDataFromDescription(this.originalPushHandleDescription);\n            this.originalNSDataTrimmed = TrimDeviceToken(this.originalPushHandleDescription);\n        }\n\n        [TestMethod]\n        public void UnregisterAllAsync()\n        {\n            var registrationManager = new RegistrationManagerForTest();\n            var push = new Push(registrationManager);\n            \n            push.UnregisterAllAsync(this.originalNSData).Wait();\n            registrationManager.VerifyPushHandle(this.originalNSDataTrimmed);\n        }\n\n        [TestMethod]\n        public void RegisterNativeAsync()\n        {\n            var registrationManager = new RegistrationManagerForTest();\n            var push = new Push(registrationManager);\n\n            push.RegisterNativeAsync(this.originalNSData).Wait();\n            registrationManager.VerifyPushHandle(this.originalNSDataTrimmed);\n        }\n\n        [TestMethod]\n        public void RegisterNativeAsyncWithTags()\n        {\n            var registrationManager = new RegistrationManagerForTest();\n            var push = new Push(registrationManager);\n\n            push.RegisterNativeAsync(this.originalNSData, new List<string> {\"foo\"}).Wait();\n            registrationManager.VerifyPushHandle(this.originalNSDataTrimmed);\n        }\n\n        [TestMethod]\n        public void RegisterTemplateAsyncWithTags()\n        {\n            var registrationManager = new RegistrationManagerForTest();\n            var push = new Push(registrationManager);\n\n            push.RegisterTemplateAsync(this.originalNSData, \"jsonBody\", \"expiry\", \"templateName\", new List<string> { \"foo\" }).Wait();\n            registrationManager.VerifyPushHandle(this.originalNSDataTrimmed);\n        }\n\n        [TestMethod]\n        public void RegisterTemplateAsync()\n        {\n            var registrationManager = new RegistrationManagerForTest();\n            var push = new Push(registrationManager);\n\n            push.RegisterTemplateAsync(this.originalNSData, \"jsonBody\", \"expiry\", \"templateName\").Wait();\n            registrationManager.VerifyPushHandle(this.originalNSDataTrimmed);\n        }\n\n        [TestMethod]\n        public void ListRegistrationsAsync()\n        {\n            var registrationManager = new RegistrationManagerForTest();\n            var push = new Push(registrationManager);\n\n            push.ListRegistrationsAsync(this.originalNSData).Wait();\n            registrationManager.VerifyPushHandle(this.originalNSDataTrimmed);\n        }\n    \n        NSData NSDataFromDescription(string hexString)\n        {\n            hexString = hexString.Trim('<', '>').Replace(\" \", string.Empty);\n            NSMutableData data = new NSMutableData();\n            byte[] hexAsBytes = new byte[hexString.Length / 2];\n            for (int index = 0; index < hexAsBytes.Length; index++)\n            {\n                string byteValue = hexString.Substring(index * 2, 2);\n                hexAsBytes[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture);                \n            }\n\n            data.AppendBytes(hexAsBytes);\n            return data;\n        }\n\n        static string TrimDeviceToken(string deviceTokenDescription)\n        {\n            return deviceTokenDescription.Trim('<', '>').Replace(\" \", string.Empty).ToUpperInvariant();\n        }\n\n        private class RegistrationManagerForTest : IRegistrationManager\n        {\n            private string lastDeviceId;\n\n            public ILocalStorageManager LocalStorageManager\n            {\n                get { throw new System.NotImplementedException(); }\n            }\n\n            public Task DeleteRegistrationsForChannelAsync(string deviceId)\n            {\n                this.lastDeviceId = deviceId;\n                return Task.FromResult(0);\n            }\n\n            public Task<List<Registration>> ListRegistrationsAsync(string deviceId)\n            {\n                this.lastDeviceId = deviceId;\n                return Task.FromResult(new List<Registration> { new Registration(deviceId, null) });\n            }\n\n            public Task RegisterAsync(Registration registration)\n            {\n                this.lastDeviceId = registration.PushHandle;\n                return Task.FromResult(0);\n            }\n\n            public Task UnregisterAsync(string registrationName)\n            {\n                return Task.FromResult(0);\n            }\n\n            public void VerifyPushHandle(string expectedPushHandle)\n            {\n                Assert.AreEqual(expectedPushHandle, this.lastDeviceId, \"Expected deviceId passed to RegistrationManager is not accurate.\");\n            }            \n        }\n    }    \n}"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"2.5.0.0\" />\n      </dependentAssembly>      \n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"MonoTouch10\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"MonoTouch10\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"MonoTouch10\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"MonoTouch10\" />\n</packages>"
  },
  {
    "path": "sdk/Managed/test/Microsoft.WindowsAzure.MobileServices.iOS.Test/readme.txt",
    "content": "Notes\n-----------\n- when you update NuGet packages for this project and other Xamarin projects, VS adds references to System.IO, System.Runtime, and System.Threading.Tasks which will cause compilation failures. You need to remove the references.\n- due to bugs in the HttpClient NuGet package, there are various VS warnings around assembly binding redirects. This project (and all Xamarin projects that use our SDK) needs to have the assembly binding redirect for System.Net.Http to v2.5.0.0 (the mono version). If it has assembly binding redirects to System.Net.Http.Primitives or Extensions, bad things can happen, and VS will try to auto generate these in some situations so watch out."
  },
  {
    "path": "sdk/android/.gitattributes",
    "content": "# Temporarily suppress line ending normalization of the SDK source code\n.java -text"
  },
  {
    "path": "sdk/android/.gitignore",
    "content": "#built application files\n*.apk\n*.ap_\n\n# files for the dex VM\n*.dex\n\n# Java class files\n*.class\n\n# generated files\nbin/\ngen/\n\n# Local configuration file (sdk path, etc)\nlocal.properties\n\n# Windows thumbnail db\nThumbs.db\n\n# OSX files\n.DS_Store\n\n# Eclipse project files\n.classpath\n.project\n\n# Android Studio\n.idea\n#.idea/workspace.xml - remove # and delete .idea if it better suit your needs.\n.gradle\nbuild/"
  },
  {
    "path": "sdk/android/android-libraries.gradle",
    "content": "apply plugin: 'maven'\n\ndef myProject = project\n\n// step 2\nuploadArchives {\n    repositories.mavenDeployer {\n        pom.groupId = myProject.group\n        pom.artifactId = PUBLISH_ARTIFACT_ID\n        pom.version = myProject.version\n        repository (\n                url: 'https://api.bintray.com/maven/azuremobileservices/SDK/Mobile-Services-Android-SDK'\n        ) {\n            authentication(\n                    userName: 'bintray username',\n                    password: 'bintray api key'\n            )\n        }\n    }\n}\n\ntask clearJar(type: Delete) {\n    delete 'build/release/' + PUBLISH_ARTIFACT_ID + '-' + myProject.version + '.jar'\n}\n\n// step 1\ntask makeJar(type: Copy) {\n    from('build/intermediates/bundles/release/')\n    into('build/release/')\n    include('classes.jar')\n    rename ('classes.jar', PUBLISH_ARTIFACT_ID + '-' +  myProject.version + '.jar')\n}\n\nmakeJar.dependsOn(clearJar, build)\n\ntask androidJavadocs(type: Javadoc) {\n    source = android.sourceSets.main.java.srcDirs\n    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))\n}\n\ntask androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {\n    classifier = 'javadoc'\n    from androidJavadocs.destinationDir\n}\n\ntask androidSourcesJar(type: Jar) {\n    classifier = 'sources'\n    from android.sourceSets.main.java.srcDirs\n}\n\nartifacts {\n    archives androidSourcesJar\n    //archives androidJavadocsJar\n    archives file : file('build/release/' + PUBLISH_ARTIFACT_ID + '-' + myProject.version + '.jar')\n}"
  },
  {
    "path": "sdk/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:1.0.0'\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        jcenter()\n    }\n\n    apply plugin: 'idea'\n\n    group = 'com.microsoft.azure'\n    version = '2.0-beta'\n}\n"
  },
  {
    "path": "sdk/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Tue Dec 23 11:44:21 GMT-03:00 2014\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-2.2.1-all.zip\n"
  },
  {
    "path": "sdk/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Settings specified in this file will override any Gradle settings\n# configured through the IDE.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true"
  },
  {
    "path": "sdk/android/gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# For Cygwin, ensure paths are in UNIX format before anything is touched.\nif $cygwin ; then\n    [ -n \"$JAVA_HOME\" ] && JAVA_HOME=`cygpath --unix \"$JAVA_HOME\"`\nfi\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >&-\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >&-\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "sdk/android/gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windowz variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\ngoto execute\n\n:4NT_args\n@rem Get arguments from the 4NT Shell from JP Software\nset CMD_LINE_ARGS=%$\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "sdk/android/settings.gradle",
    "content": "include ':notifications-handler', ':sdk', ':sdk.testapp', ':ZumoE2ETestApp'\nproject(':notifications-handler').projectDir = new File('src/notifications-handler')\nproject(':sdk').projectDir = new File('src/sdk')\nproject(':sdk.testapp').projectDir = new File('test/sdk.testapp')\nproject(':ZumoE2ETestApp').projectDir = new File('../../test/Android/ZumoE2ETestApp')"
  },
  {
    "path": "sdk/android/src/notifications-handler/.settings/org.eclipse.jdt.core.prefs",
    "content": "eclipse.preferences.version=1\norg.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\norg.eclipse.jdt.core.compiler.compliance=1.6\norg.eclipse.jdt.core.compiler.source=1.6\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/build.gradle",
    "content": "apply plugin: 'com.android.library'\n\next {\n    PUBLISH_ARTIFACT_ID = 'azure-notifications-handler'\n}\n\nandroid {\n    compileSdkVersion 21\n    buildToolsVersion '21.1.2'\n\n    defaultConfig {\n        minSdkVersion 8\n        targetSdkVersion 19\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_7\n        targetCompatibility JavaVersion.VERSION_1_7\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    compile 'com.google.android.gms:play-services:3.1.+'\n}\n\napply from : '../../android-libraries.gradle'"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/allclasses-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>All Classes</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<h1 class=\"bar\">All Classes</h1>\n<div class=\"indexContainer\">\n<ul>\n<li><a href=\"com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\" target=\"classFrame\">BuildConfig</a></li>\n<li><a href=\"com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\" target=\"classFrame\">NotificationsBroadcastReceiver</a></li>\n<li><a href=\"com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\" target=\"classFrame\">NotificationsHandler</a></li>\n<li><a href=\"com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\" target=\"classFrame\">NotificationsManager</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/allclasses-noframe.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>All Classes</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<h1 class=\"bar\">All Classes</h1>\n<div class=\"indexContainer\">\n<ul>\n<li><a href=\"com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\">BuildConfig</a></li>\n<li><a href=\"com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsBroadcastReceiver</a></li>\n<li><a href=\"com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsHandler</a></li>\n<li><a href=\"com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsManager</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/com/microsoft/windowsazure/notifications/BuildConfig.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>BuildConfig</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"BuildConfig\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/BuildConfig.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev Class</li>\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">Next Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/BuildConfig.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"BuildConfig.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field_summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods_inherited_from_class_java.lang.Object\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field_detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.notifications</div>\n<h2 title=\"Class BuildConfig\" class=\"title\">Class BuildConfig</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.notifications.BuildConfig</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public final class <span class=\"strong\">BuildConfig</span>\nextends java.lang.Object</pre>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== FIELD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field_summary\">\n<!--   -->\n</a>\n<h3>Field Summary</h3>\n<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Field Summary table, listing fields, and an explanation\">\n<caption><span>Fields</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Field and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static boolean</code></td>\n<td class=\"colLast\"><code><strong><a href=\"../../../../com/microsoft/windowsazure/notifications/BuildConfig.html#DEBUG\">DEBUG</a></strong></code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor_summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><strong><a href=\"../../../../com/microsoft/windowsazure/notifications/BuildConfig.html#BuildConfig()\">BuildConfig</a></strong>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method_summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods_inherited_from_class_java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ FIELD DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field_detail\">\n<!--   -->\n</a>\n<h3>Field Detail</h3>\n<a name=\"DEBUG\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>DEBUG</h4>\n<pre>public static final&nbsp;boolean DEBUG</pre>\n<dl><dt><span class=\"strong\">See Also:</span></dt><dd><a href=\"../../../../constant-values.html#com.microsoft.windowsazure.notifications.BuildConfig.DEBUG\">Constant Field Values</a></dd></dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor_detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"BuildConfig()\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>BuildConfig</h4>\n<pre>public&nbsp;BuildConfig()</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/BuildConfig.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev Class</li>\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">Next Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/BuildConfig.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"BuildConfig.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field_summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods_inherited_from_class_java.lang.Object\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field_detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>NotificationsBroadcastReceiver</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"NotificationsBroadcastReceiver\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/NotificationsBroadcastReceiver.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">Prev Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">Next Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NotificationsBroadcastReceiver.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method_summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method_detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.notifications</div>\n<h2 title=\"Class NotificationsBroadcastReceiver\" class=\"title\">Class NotificationsBroadcastReceiver</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>BroadcastReceiver</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.notifications.NotificationsBroadcastReceiver</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"strong\">NotificationsBroadcastReceiver</span>\nextends BroadcastReceiver</pre>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor_summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><strong><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html#NotificationsBroadcastReceiver()\">NotificationsBroadcastReceiver</a></strong>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method_summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span>Methods</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><strong><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html#onReceive(Context, Intent)\">onReceive</a></strong>(Context&nbsp;context,\n         Intent&nbsp;intent)</code>&nbsp;</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods_inherited_from_class_java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor_detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"NotificationsBroadcastReceiver()\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>NotificationsBroadcastReceiver</h4>\n<pre>public&nbsp;NotificationsBroadcastReceiver()</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method_detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onReceive(Context, Intent)\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onReceive</h4>\n<pre>public&nbsp;void&nbsp;onReceive(Context&nbsp;context,\n             Intent&nbsp;intent)</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/NotificationsBroadcastReceiver.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">Prev Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">Next Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NotificationsBroadcastReceiver.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method_summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method_detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/com/microsoft/windowsazure/notifications/NotificationsHandler.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>NotificationsHandler</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"NotificationsHandler\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/NotificationsHandler.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">Prev Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">Next Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/NotificationsHandler.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NotificationsHandler.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method_summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method_detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.notifications</div>\n<h2 title=\"Class NotificationsHandler\" class=\"title\">Class NotificationsHandler</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.notifications.NotificationsHandler</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"strong\">NotificationsHandler</span>\nextends java.lang.Object</pre>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor_summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><strong><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html#NotificationsHandler()\">NotificationsHandler</a></strong>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method_summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span>Methods</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><strong><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html#onReceive(Context, Bundle)\">onReceive</a></strong>(Context&nbsp;context,\n         Bundle&nbsp;bundle)</code>\n<div class=\"block\">Method called after a notification is received.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><strong><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html#onRegistered(Context, java.lang.String)\">onRegistered</a></strong>(Context&nbsp;context,\n            java.lang.String&nbsp;gcmRegistrationId)</code>\n<div class=\"block\">Method called after the device is registered for notifications</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><strong><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html#onUnregistered(Context, java.lang.String)\">onUnregistered</a></strong>(Context&nbsp;context,\n              java.lang.String&nbsp;gcmRegistrationId)</code>\n<div class=\"block\">Method called after the device is unregistered for notifications</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods_inherited_from_class_java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor_detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"NotificationsHandler()\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>NotificationsHandler</h4>\n<pre>public&nbsp;NotificationsHandler()</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method_detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onReceive(Context, Bundle)\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>onReceive</h4>\n<pre>public&nbsp;void&nbsp;onReceive(Context&nbsp;context,\n             Bundle&nbsp;bundle)</pre>\n<div class=\"block\">Method called after a notification is received. \n By default, it shows a toast with the value asociated to the \"message\" key in the bundle</div>\n<dl><dt><span class=\"strong\">Parameters:</span></dt><dd><code>context</code> - Application Context</dd><dd><code>bundle</code> - Bundle with notification data</dd></dl>\n</li>\n</ul>\n<a name=\"onRegistered(Context, java.lang.String)\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>onRegistered</h4>\n<pre>public&nbsp;void&nbsp;onRegistered(Context&nbsp;context,\n                java.lang.String&nbsp;gcmRegistrationId)</pre>\n<div class=\"block\">Method called after the device is registered for notifications</div>\n<dl><dt><span class=\"strong\">Parameters:</span></dt><dd><code>context</code> - Application context</dd><dd><code>gcmRegistrationId</code> - Google Cloud Messaging registration id</dd></dl>\n</li>\n</ul>\n<a name=\"onUnregistered(Context, java.lang.String)\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onUnregistered</h4>\n<pre>public&nbsp;void&nbsp;onUnregistered(Context&nbsp;context,\n                  java.lang.String&nbsp;gcmRegistrationId)</pre>\n<div class=\"block\">Method called after the device is unregistered for notifications</div>\n<dl><dt><span class=\"strong\">Parameters:</span></dt><dd><code>context</code> - Application context</dd><dd><code>gcmRegistrationId</code> - Google Cloud Messaging registration id</dd></dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/NotificationsHandler.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">Prev Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">Next Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/NotificationsHandler.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NotificationsHandler.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method_summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method_detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/com/microsoft/windowsazure/notifications/NotificationsManager.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>NotificationsManager</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"NotificationsManager\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/NotificationsManager.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">Prev Class</span></a></li>\n<li>Next Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/NotificationsManager.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NotificationsManager.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method_summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method_detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.notifications</div>\n<h2 title=\"Class NotificationsManager\" class=\"title\">Class NotificationsManager</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.notifications.NotificationsManager</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"strong\">NotificationsManager</span>\nextends java.lang.Object</pre>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor_summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><strong><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsManager.html#NotificationsManager()\">NotificationsManager</a></strong>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method_summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span>Methods</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static &lt;T extends <a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsHandler</a>&gt;&nbsp;<br>void</code></td>\n<td class=\"colLast\"><code><strong><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsManager.html#handleNotifications(Context, java.lang.String, java.lang.Class)\">handleNotifications</a></strong>(Context&nbsp;context,\n                   java.lang.String&nbsp;gcmAppId,\n                   java.lang.Class&lt;T&gt;&nbsp;notificationsHandlerClass)</code>\n<div class=\"block\">Handles notifications with the provided NotificationsHandler class</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static void</code></td>\n<td class=\"colLast\"><code><strong><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsManager.html#stopHandlingNotifications(Context)\">stopHandlingNotifications</a></strong>(Context&nbsp;context)</code>\n<div class=\"block\">Stops handlind notifications</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods_inherited_from_class_java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor_detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"NotificationsManager()\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>NotificationsManager</h4>\n<pre>public&nbsp;NotificationsManager()</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method_detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"handleNotifications(Context, java.lang.String, java.lang.Class)\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>handleNotifications</h4>\n<pre>public static&nbsp;&lt;T extends <a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsHandler</a>&gt;&nbsp;void&nbsp;handleNotifications(Context&nbsp;context,\n                                                        java.lang.String&nbsp;gcmAppId,\n                                                        java.lang.Class&lt;T&gt;&nbsp;notificationsHandlerClass)</pre>\n<div class=\"block\">Handles notifications with the provided NotificationsHandler class</div>\n<dl><dt><span class=\"strong\">Parameters:</span></dt><dd><code>context</code> - Application Context</dd><dd><code>gcmAppId</code> - Google Cloud Messaging Application ID</dd><dd><code>notificationsHandlerClass</code> - NotificationHandler class used for handling notifications</dd></dl>\n</li>\n</ul>\n<a name=\"stopHandlingNotifications(Context)\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>stopHandlingNotifications</h4>\n<pre>public static&nbsp;void&nbsp;stopHandlingNotifications(Context&nbsp;context)</pre>\n<div class=\"block\">Stops handlind notifications</div>\n<dl><dt><span class=\"strong\">Parameters:</span></dt><dd><code>context</code> - Application Context</dd></dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/NotificationsManager.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">Prev Class</span></a></li>\n<li>Next Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/NotificationsManager.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NotificationsManager.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method_summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor_detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method_detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/com/microsoft/windowsazure/notifications/class-use/BuildConfig.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>Uses of Class com.microsoft.windowsazure.notifications.BuildConfig</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"Uses of Class com.microsoft.windowsazure.notifications.BuildConfig\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/notifications/class-use/BuildConfig.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"BuildConfig.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.notifications.BuildConfig\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.notifications.BuildConfig</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.notifications.BuildConfig</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/notifications/class-use/BuildConfig.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"BuildConfig.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/com/microsoft/windowsazure/notifications/class-use/NotificationsBroadcastReceiver.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>Uses of Class com.microsoft.windowsazure.notifications.NotificationsBroadcastReceiver</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"Uses of Class com.microsoft.windowsazure.notifications.NotificationsBroadcastReceiver\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/notifications/class-use/NotificationsBroadcastReceiver.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NotificationsBroadcastReceiver.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.notifications.NotificationsBroadcastReceiver\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.notifications.NotificationsBroadcastReceiver</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.notifications.NotificationsBroadcastReceiver</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/notifications/class-use/NotificationsBroadcastReceiver.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NotificationsBroadcastReceiver.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/com/microsoft/windowsazure/notifications/class-use/NotificationsHandler.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>Uses of Class com.microsoft.windowsazure.notifications.NotificationsHandler</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"Uses of Class com.microsoft.windowsazure.notifications.NotificationsHandler\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/notifications/class-use/NotificationsHandler.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NotificationsHandler.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.notifications.NotificationsHandler\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.notifications.NotificationsHandler</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.notifications\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsHandler</a> in <a href=\"../../../../../com/microsoft/windowsazure/notifications/package-summary.html\">com.microsoft.windowsazure.notifications</a></h3>\n<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/notifications/package-summary.html\">com.microsoft.windowsazure.notifications</a> with type parameters of type <a href=\"../../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsHandler</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static &lt;T extends <a href=\"../../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsHandler</a>&gt;&nbsp;<br>void</code></td>\n<td class=\"colLast\"><span class=\"strong\">NotificationsManager.</span><code><strong><a href=\"../../../../../com/microsoft/windowsazure/notifications/NotificationsManager.html#handleNotifications(Context, java.lang.String, java.lang.Class)\">handleNotifications</a></strong>(Context&nbsp;context,\n                   java.lang.String&nbsp;gcmAppId,\n                   java.lang.Class&lt;T&gt;&nbsp;notificationsHandlerClass)</code>\n<div class=\"block\">Handles notifications with the provided NotificationsHandler class</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/notifications/class-use/NotificationsHandler.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NotificationsHandler.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/com/microsoft/windowsazure/notifications/class-use/NotificationsManager.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>Uses of Class com.microsoft.windowsazure.notifications.NotificationsManager</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"Uses of Class com.microsoft.windowsazure.notifications.NotificationsManager\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/notifications/class-use/NotificationsManager.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NotificationsManager.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.notifications.NotificationsManager\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.notifications.NotificationsManager</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.notifications.NotificationsManager</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/notifications/class-use/NotificationsManager.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NotificationsManager.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/com/microsoft/windowsazure/notifications/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>com.microsoft.windowsazure.notifications</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.notifications</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\" target=\"classFrame\">BuildConfig</a></li>\n<li><a href=\"NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\" target=\"classFrame\">NotificationsBroadcastReceiver</a></li>\n<li><a href=\"NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\" target=\"classFrame\">NotificationsHandler</a></li>\n<li><a href=\"NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\" target=\"classFrame\">NotificationsManager</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/com/microsoft/windowsazure/notifications/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>com.microsoft.windowsazure.notifications</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"com.microsoft.windowsazure.notifications\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev Package</li>\n<li>Next Package</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.notifications</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"packageSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\">BuildConfig</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsBroadcastReceiver</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsHandler</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsManager</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev Package</li>\n<li>Next Package</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/com/microsoft/windowsazure/notifications/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>com.microsoft.windowsazure.notifications Class Hierarchy</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"com.microsoft.windowsazure.notifications Class Hierarchy\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.notifications</h1>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">BroadcastReceiver\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.notifications.<a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">NotificationsBroadcastReceiver</span></a></li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.notifications.<a href=\"../../../../com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">BuildConfig</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.notifications.<a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">NotificationsHandler</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.notifications.<a href=\"../../../../com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">NotificationsManager</span></a></li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/com/microsoft/windowsazure/notifications/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>Uses of Package com.microsoft.windowsazure.notifications</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"Uses of Package com.microsoft.windowsazure.notifications\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.notifications\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.notifications</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.notifications\">\n<!--   -->\n</a>\n<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">com.microsoft.windowsazure.notifications</a> used by <a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">com.microsoft.windowsazure.notifications</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/notifications/class-use/NotificationsHandler.html#com.microsoft.windowsazure.notifications\">NotificationsHandler</a>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/notifications/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/constant-values.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>Constant Field Values</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"Constant Field Values\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?constant-values.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"constant-values.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Constant Field Values\" class=\"title\">Constant Field Values</h1>\n<h2 title=\"Contents\">Contents</h2>\n<ul>\n<li><a href=\"#com.microsoft\">com.microsoft.*</a></li>\n</ul>\n</div>\n<div class=\"constantValuesContainer\"><a name=\"com.microsoft\">\n<!--   -->\n</a>\n<h2 title=\"com.microsoft\">com.microsoft.*</h2>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constant Field Values table, listing constant fields, and values\">\n<caption><span>com.microsoft.windowsazure.notifications.<a href=\"com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\">BuildConfig</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th scope=\"col\">Constant Field</th>\n<th class=\"colLast\" scope=\"col\">Value</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a name=\"com.microsoft.windowsazure.notifications.BuildConfig.DEBUG\">\n<!--   -->\n</a><code>public&nbsp;static&nbsp;final&nbsp;boolean</code></td>\n<td><code><a href=\"com/microsoft/windowsazure/notifications/BuildConfig.html#DEBUG\">DEBUG</a></code></td>\n<td class=\"colLast\"><code>true</code></td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?constant-values.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"constant-values.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/help-doc.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>API Help</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"API Help\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li class=\"navBarCell1Rev\">Help</li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?help-doc.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"help-doc.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">How This API Document Is Organized</h1>\n<div class=\"subTitle\">This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.</div>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h2>Package</h2>\n<p>Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:</p>\n<ul>\n<li>Interfaces (italic)</li>\n<li>Classes</li>\n<li>Enums</li>\n<li>Exceptions</li>\n<li>Errors</li>\n<li>Annotation Types</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2>Class/Interface</h2>\n<p>Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:</p>\n<ul>\n<li>Class inheritance diagram</li>\n<li>Direct Subclasses</li>\n<li>All Known Subinterfaces</li>\n<li>All Known Implementing Classes</li>\n<li>Class/interface declaration</li>\n<li>Class/interface description</li>\n</ul>\n<ul>\n<li>Nested Class Summary</li>\n<li>Field Summary</li>\n<li>Constructor Summary</li>\n<li>Method Summary</li>\n</ul>\n<ul>\n<li>Field Detail</li>\n<li>Constructor Detail</li>\n<li>Method Detail</li>\n</ul>\n<p>Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</p>\n</li>\n<li class=\"blockList\">\n<h2>Annotation Type</h2>\n<p>Each annotation type has its own separate page with the following sections:</p>\n<ul>\n<li>Annotation Type declaration</li>\n<li>Annotation Type description</li>\n<li>Required Element Summary</li>\n<li>Optional Element Summary</li>\n<li>Element Detail</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2>Enum</h2>\n<p>Each enum has its own separate page with the following sections:</p>\n<ul>\n<li>Enum declaration</li>\n<li>Enum description</li>\n<li>Enum Constant Summary</li>\n<li>Enum Constant Detail</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2>Use</h2>\n<p>Each documented package, class and interface has its own Use page.  This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A.  You can access this page by first going to the package, class or interface, then clicking on the \"Use\" link in the navigation bar.</p>\n</li>\n<li class=\"blockList\">\n<h2>Tree (Class Hierarchy)</h2>\n<p>There is a <a href=\"overview-tree.html\">Class Hierarchy</a> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.</p>\n<ul>\n<li>When viewing the Overview page, clicking on \"Tree\" displays the hierarchy for all packages.</li>\n<li>When viewing a particular package, class or interface page, clicking \"Tree\" displays the hierarchy for only that package.</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2>Index</h2>\n<p>The <a href=\"index-files/index-1.html\">Index</a> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</p>\n</li>\n<li class=\"blockList\">\n<h2>Prev/Next</h2>\n<p>These links take you to the next or previous class, interface, package, or related page.</p>\n</li>\n<li class=\"blockList\">\n<h2>Frames/No Frames</h2>\n<p>These links show and hide the HTML frames.  All pages are available with or without frames.</p>\n</li>\n<li class=\"blockList\">\n<h2>All Classes</h2>\n<p>The <a href=\"allclasses-noframe.html\">All Classes</a> link shows all classes and interfaces except non-static nested types.</p>\n</li>\n<li class=\"blockList\">\n<h2>Serialized Form</h2>\n<p>Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking \"Serialized Form\" in the \"See also\" section of the class description.</p>\n</li>\n<li class=\"blockList\">\n<h2>Constant Field Values</h2>\n<p>The <a href=\"constant-values.html\">Constant Field Values</a> page lists the static final fields and their values.</p>\n</li>\n</ul>\n<em>This help file applies to API documentation generated using the standard doclet.</em></div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li class=\"navBarCell1Rev\">Help</li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?help-doc.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"help-doc.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/index-files/index-1.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>B-Index</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"B-Index\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev Letter</li>\n<li><a href=\"index-2.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-1.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-1.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;<a name=\"_B_\">\n<!--   -->\n</a>\n<h2 class=\"title\">B</h2>\n<dl>\n<dt><a href=\"../com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">BuildConfig</span></a> - Class in <a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">com.microsoft.windowsazure.notifications</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"strong\"><a href=\"../com/microsoft/windowsazure/notifications/BuildConfig.html#BuildConfig()\">BuildConfig()</a></span> - Constructor for class com.microsoft.windowsazure.notifications.<a href=\"../com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\">BuildConfig</a></dt>\n<dd>&nbsp;</dd>\n</dl>\n<a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev Letter</li>\n<li><a href=\"index-2.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-1.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-1.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/index-files/index-2.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>C-Index</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"C-Index\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-1.html\">Prev Letter</a></li>\n<li><a href=\"index-3.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-2.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-2.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;<a name=\"_C_\">\n<!--   -->\n</a>\n<h2 class=\"title\">C</h2>\n<dl>\n<dt><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">com.microsoft.windowsazure.notifications</a> - package com.microsoft.windowsazure.notifications</dt>\n<dd>&nbsp;</dd>\n</dl>\n<a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-1.html\">Prev Letter</a></li>\n<li><a href=\"index-3.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-2.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-2.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/index-files/index-3.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>D-Index</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"D-Index\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-2.html\">Prev Letter</a></li>\n<li><a href=\"index-4.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-3.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-3.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;<a name=\"_D_\">\n<!--   -->\n</a>\n<h2 class=\"title\">D</h2>\n<dl>\n<dt><span class=\"strong\"><a href=\"../com/microsoft/windowsazure/notifications/BuildConfig.html#DEBUG\">DEBUG</a></span> - Static variable in class com.microsoft.windowsazure.notifications.<a href=\"../com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\">BuildConfig</a></dt>\n<dd>&nbsp;</dd>\n</dl>\n<a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-2.html\">Prev Letter</a></li>\n<li><a href=\"index-4.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-3.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-3.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/index-files/index-4.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>H-Index</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"H-Index\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-3.html\">Prev Letter</a></li>\n<li><a href=\"index-5.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-4.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-4.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;<a name=\"_H_\">\n<!--   -->\n</a>\n<h2 class=\"title\">H</h2>\n<dl>\n<dt><span class=\"strong\"><a href=\"../com/microsoft/windowsazure/notifications/NotificationsManager.html#handleNotifications(Context, java.lang.String, java.lang.Class)\">handleNotifications(Context, String, Class&lt;T&gt;)</a></span> - Static method in class com.microsoft.windowsazure.notifications.<a href=\"../com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsManager</a></dt>\n<dd>\n<div class=\"block\">Handles notifications with the provided NotificationsHandler class</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-3.html\">Prev Letter</a></li>\n<li><a href=\"index-5.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-4.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-4.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/index-files/index-5.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>N-Index</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"N-Index\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-4.html\">Prev Letter</a></li>\n<li><a href=\"index-6.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-5.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-5.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;<a name=\"_N_\">\n<!--   -->\n</a>\n<h2 class=\"title\">N</h2>\n<dl>\n<dt><a href=\"../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">NotificationsBroadcastReceiver</span></a> - Class in <a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">com.microsoft.windowsazure.notifications</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"strong\"><a href=\"../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html#NotificationsBroadcastReceiver()\">NotificationsBroadcastReceiver()</a></span> - Constructor for class com.microsoft.windowsazure.notifications.<a href=\"../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsBroadcastReceiver</a></dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">NotificationsHandler</span></a> - Class in <a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">com.microsoft.windowsazure.notifications</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"strong\"><a href=\"../com/microsoft/windowsazure/notifications/NotificationsHandler.html#NotificationsHandler()\">NotificationsHandler()</a></span> - Constructor for class com.microsoft.windowsazure.notifications.<a href=\"../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsHandler</a></dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">NotificationsManager</span></a> - Class in <a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">com.microsoft.windowsazure.notifications</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"strong\"><a href=\"../com/microsoft/windowsazure/notifications/NotificationsManager.html#NotificationsManager()\">NotificationsManager()</a></span> - Constructor for class com.microsoft.windowsazure.notifications.<a href=\"../com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsManager</a></dt>\n<dd>&nbsp;</dd>\n</dl>\n<a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-4.html\">Prev Letter</a></li>\n<li><a href=\"index-6.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-5.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-5.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/index-files/index-6.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>O-Index</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"O-Index\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-5.html\">Prev Letter</a></li>\n<li><a href=\"index-7.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-6.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-6.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;<a name=\"_O_\">\n<!--   -->\n</a>\n<h2 class=\"title\">O</h2>\n<dl>\n<dt><span class=\"strong\"><a href=\"../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html#onReceive(Context, Intent)\">onReceive(Context, Intent)</a></span> - Method in class com.microsoft.windowsazure.notifications.<a href=\"../com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsBroadcastReceiver</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"strong\"><a href=\"../com/microsoft/windowsazure/notifications/NotificationsHandler.html#onReceive(Context, Bundle)\">onReceive(Context, Bundle)</a></span> - Method in class com.microsoft.windowsazure.notifications.<a href=\"../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsHandler</a></dt>\n<dd>\n<div class=\"block\">Method called after a notification is received.</div>\n</dd>\n<dt><span class=\"strong\"><a href=\"../com/microsoft/windowsazure/notifications/NotificationsHandler.html#onRegistered(Context, java.lang.String)\">onRegistered(Context, String)</a></span> - Method in class com.microsoft.windowsazure.notifications.<a href=\"../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsHandler</a></dt>\n<dd>\n<div class=\"block\">Method called after the device is registered for notifications</div>\n</dd>\n<dt><span class=\"strong\"><a href=\"../com/microsoft/windowsazure/notifications/NotificationsHandler.html#onUnregistered(Context, java.lang.String)\">onUnregistered(Context, String)</a></span> - Method in class com.microsoft.windowsazure.notifications.<a href=\"../com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsHandler</a></dt>\n<dd>\n<div class=\"block\">Method called after the device is unregistered for notifications</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-5.html\">Prev Letter</a></li>\n<li><a href=\"index-7.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-6.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-6.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/index-files/index-7.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>S-Index</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"S-Index\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-6.html\">Prev Letter</a></li>\n<li>Next Letter</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-7.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-7.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;<a name=\"_S_\">\n<!--   -->\n</a>\n<h2 class=\"title\">S</h2>\n<dl>\n<dt><span class=\"strong\"><a href=\"../com/microsoft/windowsazure/notifications/NotificationsManager.html#stopHandlingNotifications(Context)\">stopHandlingNotifications(Context)</a></span> - Static method in class com.microsoft.windowsazure.notifications.<a href=\"../com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\">NotificationsManager</a></dt>\n<dd>\n<div class=\"block\">Stops handlind notifications</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">B</a>&nbsp;<a href=\"index-2.html\">C</a>&nbsp;<a href=\"index-3.html\">D</a>&nbsp;<a href=\"index-4.html\">H</a>&nbsp;<a href=\"index-5.html\">N</a>&nbsp;<a href=\"index-6.html\">O</a>&nbsp;<a href=\"index-7.html\">S</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../com/microsoft/windowsazure/notifications/package-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-6.html\">Prev Letter</a></li>\n<li>Next Letter</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-filesindex-7.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-7.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/index.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>Generated Documentation (Untitled)</title>\n<script type=\"text/javascript\">\n    targetPage = \"\" + window.location.search;\n    if (targetPage != \"\" && targetPage != \"undefined\")\n        targetPage = targetPage.substring(1);\n    if (targetPage.indexOf(\":\") != -1 || (targetPage != \"\" && !validURL(targetPage)))\n        targetPage = \"undefined\";\n    function validURL(url) {\n        var pos = url.indexOf(\".html\");\n        if (pos == -1 || pos != url.length - 5)\n            return false;\n        var allowNumber = false;\n        var allowSep = false;\n        var seenDot = false;\n        for (var i = 0; i < url.length - 5; i++) {\n            var ch = url.charAt(i);\n            if ('a' <= ch && ch <= 'z' ||\n                    'A' <= ch && ch <= 'Z' ||\n                    ch == '$' ||\n                    ch == '_') {\n                allowNumber = true;\n                allowSep = true;\n            } else if ('0' <= ch && ch <= '9'\n                    || ch == '-') {\n                if (!allowNumber)\n                     return false;\n            } else if (ch == '/' || ch == '.') {\n                if (!allowSep)\n                    return false;\n                allowNumber = false;\n                allowSep = false;\n                if (ch == '.')\n                     seenDot = true;\n                if (ch == '/' && seenDot)\n                     return false;\n            } else {\n                return false;\n            }\n        }\n        return true;\n    }\n    function loadFrames() {\n        if (targetPage != \"\" && targetPage != \"undefined\")\n             top.classFrame.location = top.targetPage;\n    }\n</script>\n</head>\n<frameset cols=\"20%,80%\" title=\"Documentation frame\" onload=\"top.loadFrames()\">\n<frame src=\"allclasses-frame.html\" name=\"packageFrame\" title=\"All classes and interfaces (except non-static nested types)\">\n<frame src=\"com/microsoft/windowsazure/notifications/package-summary.html\" name=\"classFrame\" title=\"Package, class and interface descriptions\" scrolling=\"yes\">\n<noframes>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<h2>Frame Alert</h2>\n<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href=\"com/microsoft/windowsazure/notifications/package-summary.html\">Non-frame version</a>.</p>\n</noframes>\n</frameset>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/overview-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<title>Class Hierarchy</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    if (location.href.indexOf('is-external=true') == -1) {\n        parent.document.title=\"Class Hierarchy\";\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar_top\">\n<!--   -->\n</a><a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?overview-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"overview-tree.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For All Packages</h1>\n<span class=\"strong\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"com/microsoft/windowsazure/notifications/package-tree.html\">com.microsoft.windowsazure.notifications</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">BroadcastReceiver\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.notifications.<a href=\"com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">NotificationsBroadcastReceiver</span></a></li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.notifications.<a href=\"com/microsoft/windowsazure/notifications/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">BuildConfig</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.notifications.<a href=\"com/microsoft/windowsazure/notifications/NotificationsHandler.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">NotificationsHandler</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.notifications.<a href=\"com/microsoft/windowsazure/notifications/NotificationsManager.html\" title=\"class in com.microsoft.windowsazure.notifications\"><span class=\"strong\">NotificationsManager</span></a></li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar_bottom\">\n<!--   -->\n</a><a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a><a name=\"navbar_bottom_firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"com/microsoft/windowsazure/notifications/package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?overview-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"overview-tree.html\" target=\"_top\">No Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"allclasses-noframe.html\">All Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip-navbar_bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/package-list",
    "content": "com.microsoft.windowsazure.notifications\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/doc/stylesheet.css",
    "content": "/* Javadoc style sheet */\n/*\nOverall document style\n*/\nbody {\n    background-color:#ffffff;\n    color:#353833;\n    font-family:Arial, Helvetica, sans-serif;\n    font-size:76%;\n    margin:0;\n}\na:link, a:visited {\n    text-decoration:none;\n    color:#4c6b87;\n}\na:hover, a:focus {\n    text-decoration:none;\n    color:#bb7a2a;\n}\na:active {\n    text-decoration:none;\n    color:#4c6b87;\n}\na[name] {\n    color:#353833;\n}\na[name]:hover {\n    text-decoration:none;\n    color:#353833;\n}\npre {\n    font-size:1.3em;\n}\nh1 {\n    font-size:1.8em;\n}\nh2 {\n    font-size:1.5em;\n}\nh3 {\n    font-size:1.4em;\n}\nh4 {\n    font-size:1.3em;\n}\nh5 {\n    font-size:1.2em;\n}\nh6 {\n    font-size:1.1em;\n}\nul {\n    list-style-type:disc;\n}\ncode, tt {\n    font-size:1.2em;\n}\ndt code {\n    font-size:1.2em;\n}\ntable tr td dt code {\n    font-size:1.2em;\n    vertical-align:top;\n}\nsup {\n    font-size:.6em;\n}\n/*\nDocument title and Copyright styles\n*/\n.clear {\n    clear:both;\n    height:0px;\n    overflow:hidden;\n}\n.aboutLanguage {\n    float:right;\n    padding:0px 21px;\n    font-size:.8em;\n    z-index:200;\n    margin-top:-7px;\n}\n.legalCopy {\n    margin-left:.5em;\n}\n.bar a, .bar a:link, .bar a:visited, .bar a:active {\n    color:#FFFFFF;\n    text-decoration:none;\n}\n.bar a:hover, .bar a:focus {\n    color:#bb7a2a;\n}\n.tab {\n    background-color:#0066FF;\n    background-image:url(resources/titlebar.gif);\n    background-position:left top;\n    background-repeat:no-repeat;\n    color:#ffffff;\n    padding:8px;\n    width:5em;\n    font-weight:bold;\n}\n/*\nNavigation bar styles\n*/\n.bar {\n    background-image:url(resources/background.gif);\n    background-repeat:repeat-x;\n    color:#FFFFFF;\n    padding:.8em .5em .4em .8em;\n    height:auto;/*height:1.8em;*/\n    font-size:1em;\n    margin:0;\n}\n.topNav {\n    background-image:url(resources/background.gif);\n    background-repeat:repeat-x;\n    color:#FFFFFF;\n    float:left;\n    padding:0;\n    width:100%;\n    clear:right;\n    height:2.8em;\n    padding-top:10px;\n    overflow:hidden;\n}\n.bottomNav {\n    margin-top:10px;\n    background-image:url(resources/background.gif);\n    background-repeat:repeat-x;\n    color:#FFFFFF;\n    float:left;\n    padding:0;\n    width:100%;\n    clear:right;\n    height:2.8em;\n    padding-top:10px;\n    overflow:hidden;\n}\n.subNav {\n    background-color:#dee3e9;\n    border-bottom:1px solid #9eadc0;\n    float:left;\n    width:100%;\n    overflow:hidden;\n}\n.subNav div {\n    clear:left;\n    float:left;\n    padding:0 0 5px 6px;\n}\nul.navList, ul.subNavList {\n    float:left;\n    margin:0 25px 0 0;\n    padding:0;\n}\nul.navList li{\n    list-style:none;\n    float:left;\n    padding:3px 6px;\n}\nul.subNavList li{\n    list-style:none;\n    float:left;\n    font-size:90%;\n}\n.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited {\n    color:#FFFFFF;\n    text-decoration:none;\n}\n.topNav a:hover, .bottomNav a:hover {\n    text-decoration:none;\n    color:#bb7a2a;\n}\n.navBarCell1Rev {\n    background-image:url(resources/tab.gif);\n    background-color:#a88834;\n    color:#FFFFFF;\n    margin: auto 5px;\n    border:1px solid #c9aa44;\n}\n/*\nPage header and footer styles\n*/\n.header, .footer {\n    clear:both;\n    margin:0 20px;\n    padding:5px 0 0 0;\n}\n.indexHeader {\n    margin:10px;\n    position:relative;\n}\n.indexHeader h1 {\n    font-size:1.3em;\n}\n.title {\n    color:#2c4557;\n    margin:10px 0;\n}\n.subTitle {\n    margin:5px 0 0 0;\n}\n.header ul {\n    margin:0 0 25px 0;\n    padding:0;\n}\n.footer ul {\n    margin:20px 0 5px 0;\n}\n.header ul li, .footer ul li {\n    list-style:none;\n    font-size:1.2em;\n}\n/*\nHeading styles\n*/\ndiv.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {\n    background-color:#dee3e9;\n    border-top:1px solid #9eadc0;\n    border-bottom:1px solid #9eadc0;\n    margin:0 0 6px -8px;\n    padding:2px 5px;\n}\nul.blockList ul.blockList ul.blockList li.blockList h3 {\n    background-color:#dee3e9;\n    border-top:1px solid #9eadc0;\n    border-bottom:1px solid #9eadc0;\n    margin:0 0 6px -8px;\n    padding:2px 5px;\n}\nul.blockList ul.blockList li.blockList h3 {\n    padding:0;\n    margin:15px 0;\n}\nul.blockList li.blockList h2 {\n    padding:0px 0 20px 0;\n}\n/*\nPage layout container styles\n*/\n.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer {\n    clear:both;\n    padding:10px 20px;\n    position:relative;\n}\n.indexContainer {\n    margin:10px;\n    position:relative;\n    font-size:1.0em;\n}\n.indexContainer h2 {\n    font-size:1.1em;\n    padding:0 0 3px 0;\n}\n.indexContainer ul {\n    margin:0;\n    padding:0;\n}\n.indexContainer ul li {\n    list-style:none;\n}\n.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {\n    font-size:1.1em;\n    font-weight:bold;\n    margin:10px 0 0 0;\n    color:#4E4E4E;\n}\n.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd {\n    margin:10px 0 10px 20px;\n}\n.serializedFormContainer dl.nameValue dt {\n    margin-left:1px;\n    font-size:1.1em;\n    display:inline;\n    font-weight:bold;\n}\n.serializedFormContainer dl.nameValue dd {\n    margin:0 0 0 1px;\n    font-size:1.1em;\n    display:inline;\n}\n/*\nList styles\n*/\nul.horizontal li {\n    display:inline;\n    font-size:0.9em;\n}\nul.inheritance {\n    margin:0;\n    padding:0;\n}\nul.inheritance li {\n    display:inline;\n    list-style:none;\n}\nul.inheritance li ul.inheritance {\n    margin-left:15px;\n    padding-left:15px;\n    padding-top:1px;\n}\nul.blockList, ul.blockListLast {\n    margin:10px 0 10px 0;\n    padding:0;\n}\nul.blockList li.blockList, ul.blockListLast li.blockList {\n    list-style:none;\n    margin-bottom:25px;\n}\nul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList {\n    padding:0px 20px 5px 10px;\n    border:1px solid #9eadc0;\n    background-color:#f9f9f9;\n}\nul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList {\n    padding:0 0 5px 8px;\n    background-color:#ffffff;\n    border:1px solid #9eadc0;\n    border-top:none;\n}\nul.blockList ul.blockList ul.blockList ul.blockList li.blockList {\n    margin-left:0;\n    padding-left:0;\n    padding-bottom:15px;\n    border:none;\n    border-bottom:1px solid #9eadc0;\n}\nul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {\n    list-style:none;\n    border-bottom:none;\n    padding-bottom:0;\n}\ntable tr td dl, table tr td dl dt, table tr td dl dd {\n    margin-top:0;\n    margin-bottom:1px;\n}\n/*\nTable styles\n*/\n.contentContainer table, .classUseContainer table, .constantValuesContainer table {\n    border-bottom:1px solid #9eadc0;\n    width:100%;\n}\n.contentContainer ul li table, .classUseContainer ul li table, .constantValuesContainer ul li table {\n    width:100%;\n}\n.contentContainer .description table, .contentContainer .details table {\n    border-bottom:none;\n}\n.contentContainer ul li table th.colOne, .contentContainer ul li table th.colFirst, .contentContainer ul li table th.colLast, .classUseContainer ul li table th, .constantValuesContainer ul li table th, .contentContainer ul li table td.colOne, .contentContainer ul li table td.colFirst, .contentContainer ul li table td.colLast, .classUseContainer ul li table td, .constantValuesContainer ul li table td{\n    vertical-align:top;\n    padding-right:20px;\n}\n.contentContainer ul li table th.colLast, .classUseContainer ul li table th.colLast,.constantValuesContainer ul li table th.colLast,\n.contentContainer ul li table td.colLast, .classUseContainer ul li table td.colLast,.constantValuesContainer ul li table td.colLast,\n.contentContainer ul li table th.colOne, .classUseContainer ul li table th.colOne,\n.contentContainer ul li table td.colOne, .classUseContainer ul li table td.colOne {\n    padding-right:3px;\n}\n.overviewSummary caption, .packageSummary caption, .contentContainer ul.blockList li.blockList caption, .summary caption, .classUseContainer caption, .constantValuesContainer caption {\n    position:relative;\n    text-align:left;\n    background-repeat:no-repeat;\n    color:#FFFFFF;\n    font-weight:bold;\n    clear:none;\n    overflow:hidden;\n    padding:0px;\n    margin:0px;\n}\ncaption a:link, caption a:hover, caption a:active, caption a:visited {\n    color:#FFFFFF;\n}\n.overviewSummary caption span, .packageSummary caption span, .contentContainer ul.blockList li.blockList caption span, .summary caption span, .classUseContainer caption span, .constantValuesContainer caption span {\n    white-space:nowrap;\n    padding-top:8px;\n    padding-left:8px;\n    display:block;\n    float:left;\n    background-image:url(resources/titlebar.gif);\n    height:18px;\n}\n.overviewSummary .tabEnd, .packageSummary .tabEnd, .contentContainer ul.blockList li.blockList .tabEnd, .summary .tabEnd, .classUseContainer .tabEnd, .constantValuesContainer .tabEnd {\n    width:10px;\n    background-image:url(resources/titlebar_end.gif);\n    background-repeat:no-repeat;\n    background-position:top right;\n    position:relative;\n    float:left;\n}\nul.blockList ul.blockList li.blockList table {\n    margin:0 0 12px 0px;\n    width:100%;\n}\n.tableSubHeadingColor {\n    background-color: #EEEEFF;\n}\n.altColor {\n    background-color:#eeeeef;\n}\n.rowColor {\n    background-color:#ffffff;\n}\n.overviewSummary td, .packageSummary td, .contentContainer ul.blockList li.blockList td, .summary td, .classUseContainer td, .constantValuesContainer td {\n    text-align:left;\n    padding:3px 3px 3px 7px;\n}\nth.colFirst, th.colLast, th.colOne, .constantValuesContainer th {\n    background:#dee3e9;\n    border-top:1px solid #9eadc0;\n    border-bottom:1px solid #9eadc0;\n    text-align:left;\n    padding:3px 3px 3px 7px;\n}\ntd.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover {\n    font-weight:bold;\n}\ntd.colFirst, th.colFirst {\n    border-left:1px solid #9eadc0;\n    white-space:nowrap;\n}\ntd.colLast, th.colLast {\n    border-right:1px solid #9eadc0;\n}\ntd.colOne, th.colOne {\n    border-right:1px solid #9eadc0;\n    border-left:1px solid #9eadc0;\n}\ntable.overviewSummary  {\n    padding:0px;\n    margin-left:0px;\n}\ntable.overviewSummary td.colFirst, table.overviewSummary th.colFirst,\ntable.overviewSummary td.colOne, table.overviewSummary th.colOne {\n    width:25%;\n    vertical-align:middle;\n}\ntable.packageSummary td.colFirst, table.overviewSummary th.colFirst {\n    width:25%;\n    vertical-align:middle;\n}\n/*\nContent styles\n*/\n.description pre {\n    margin-top:0;\n}\n.deprecatedContent {\n    margin:0;\n    padding:10px 0;\n}\n.docSummary {\n    padding:0;\n}\n/*\nFormatting effect styles\n*/\n.sourceLineNo {\n    color:green;\n    padding:0 30px 0 0;\n}\nh1.hidden {\n    visibility:hidden;\n    overflow:hidden;\n    font-size:.9em;\n}\n.block {\n    display:block;\n    margin:3px 0 0 0;\n}\n.strong {\n    font-weight:bold;\n}\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Applications/Android Studio.app/sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.microsoft.windowsazure.notifications\">\n\n    <application android:allowBackup=\"true\"\n        android:label=\"@string/app_name\"\n        android:icon=\"@drawable/ic_launcher\"\n>\n\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/src/main/java/com/microsoft/windowsazure/notifications/NotificationsBroadcastReceiver.java",
    "content": "package com.microsoft.windowsazure.notifications;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\n\npublic class NotificationsBroadcastReceiver extends BroadcastReceiver {\n\n    @Override\n    public void onReceive(Context context, Intent intent) {\n        NotificationsHandler handler = NotificationsManager.getHandler(context);\n\n        if (handler != null) {\n            handler.onReceive(context, intent.getExtras());\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/src/main/java/com/microsoft/windowsazure/notifications/NotificationsHandler.java",
    "content": "package com.microsoft.windowsazure.notifications;\n\nimport android.content.Context;\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.widget.Toast;\n\npublic class NotificationsHandler {\n\n    /**\n     * Method called after the device is registered for notifications\n     *\n     * @param context           Application context\n     * @param gcmRegistrationId Google Cloud Messaging registration id\n     */\n    public void onRegistered(Context context, String gcmRegistrationId) {\n    }\n\n    /**\n     * Method called after the device is unregistered for notifications\n     *\n     * @param context           Application context\n     * @param gcmRegistrationId Google Cloud Messaging registration id\n     */\n    public void onUnregistered(Context context, String gcmRegistrationId) {\n    }\n\n    /**\n     * Method called after a notification is received.\n     * By default, it shows a toast with the value asociated to the \"message\" key in the bundle\n     *\n     * @param context Application Context\n     * @param bundle  Bundle with notification data\n     */\n    public void onReceive(final Context context, final Bundle bundle) {\n        Handler h = new Handler(Looper.getMainLooper());\n        h.post(new Runnable() {\n\n            @Override\n            public void run() {\n                Toast.makeText(context, bundle.getString(\"message\"), Toast.LENGTH_SHORT).show();\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/src/main/java/com/microsoft/windowsazure/notifications/NotificationsManager.java",
    "content": "package com.microsoft.windowsazure.notifications;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.content.SharedPreferences.Editor;\nimport android.os.AsyncTask;\nimport android.preference.PreferenceManager;\nimport android.util.Log;\n\nimport com.google.android.gms.gcm.GoogleCloudMessaging;\n\npublic class NotificationsManager {\n\n    /**\n     * Key for handler class name in local storage\n     */\n    private static final String NOTIFICATIONS_HANDLER_CLASS = \"WAMS_NotificationsHandlerClass\";\n\n    /**\n     * Key for registration id in local storage\n     */\n    private static final String GOOGLE_CLOUD_MESSAGING_REGISTRATION_ID = \"WAMS_GoogleCloudMessagingRegistrationId\";\n\n    /**\n     * NotificationsHandler instance\n     */\n    private static NotificationsHandler mHandler;\n\n    /**\n     * Handles notifications with the provided NotificationsHandler class\n     *\n     * @param context                   Application Context\n     * @param gcmAppId                  Google Cloud Messaging Application ID\n     * @param notificationsHandlerClass NotificationHandler class used for handling notifications\n     */\n    public static <T extends NotificationsHandler> void handleNotifications(final Context context, final String gcmAppId, final Class<T> notificationsHandlerClass) {\n\n        new AsyncTask<Void, Void, Void>() {\n            @Override\n            protected Void doInBackground(Void... params) {\n                try {\n                    setHandler(notificationsHandlerClass, context);\n\n                    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);\n\n                    String registrationId = gcm.register(gcmAppId);\n\n                    setRegistrationId(registrationId, context);\n\n                    NotificationsHandler handler = getHandler(context);\n\n                    if (handler != null && registrationId != null) {\n                        getHandler(context).onRegistered(context, registrationId);\n                    }\n                } catch (Exception e) {\n                    Log.e(\"NotificationsManager\", e.toString());\n                }\n\n                return null;\n            }\n        }.execute();\n    }\n\n    /**\n     * Stops handlind notifications\n     *\n     * @param context Application Context\n     */\n    public static void stopHandlingNotifications(final Context context) {\n\n        new AsyncTask<Void, Void, Void>() {\n            @Override\n            protected Void doInBackground(Void... params) {\n                try {\n                    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);\n                    gcm.unregister();\n\n                    String registrationId = getRegistrationId(context);\n\n                    setRegistrationId(null, context);\n\n                    NotificationsHandler handler = getHandler(context);\n\n                    if (handler != null && registrationId != null) {\n                        handler.onUnregistered(context, registrationId);\n                    }\n                } catch (Exception e) {\n                    Log.e(\"NotificationsManager\", e.toString());\n                }\n\n                return null;\n            }\n        }.execute();\n    }\n\n    /**\n     * Retrieves the NotificationsHandler from local storage\n     *\n     * @param context Application Context\n     */\n    static NotificationsHandler getHandler(Context context) {\n        if (mHandler == null) {\n            SharedPreferences prefereneces = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n            String className = prefereneces.getString(NOTIFICATIONS_HANDLER_CLASS, null);\n            if (className != null) {\n                try {\n                    Class<?> notificationsHandlerClass = Class.forName(className);\n                    mHandler = (NotificationsHandler) notificationsHandlerClass.newInstance();\n                } catch (Exception e) {\n                    return null;\n                }\n            }\n        }\n\n        return mHandler;\n    }\n\n    /**\n     * Retrieves the RegistrationId from local storage\n     *\n     * @param context Application Context\n     */\n    private static String getRegistrationId(Context context) {\n        SharedPreferences prefereneces = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n        String registrationId = prefereneces.getString(GOOGLE_CLOUD_MESSAGING_REGISTRATION_ID, null);\n        return registrationId;\n    }\n\n\n    /**\n     * Stores the NotificationsHandler class in local storage\n     *\n     * @param notificationsHandlerClass NotificationsHandler class\n     * @param context                   Application Context\n     */\n    private static <T extends NotificationsHandler> void setHandler(Class<T> notificationsHandlerClass, Context context) {\n        SharedPreferences prefereneces = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n        Editor editor = prefereneces.edit();\n        editor.putString(NOTIFICATIONS_HANDLER_CLASS, notificationsHandlerClass.getName());\n        editor.commit();\n    }\n\n    /**\n     * Stores the RegistrationId in local storage\n     *\n     * @param registrationId RegistrationId to store\n     * @param context        Application Context\n     */\n    private static void setRegistrationId(String registrationId, Context context) {\n        SharedPreferences prefereneces = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n        Editor editor = prefereneces.edit();\n        editor.putString(GOOGLE_CLOUD_MESSAGING_REGISTRATION_ID, registrationId);\n        editor.commit();\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/notifications-handler/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">Mobile Services Notifications Handler</string>\n</resources>\n"
  },
  {
    "path": "sdk/android/src/sdk/.pmd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<pmd>\n    <useProjectRuleSet>false</useProjectRuleSet>\n    <ruleSetFile>.ruleset</ruleSetFile>\n    <rules>\n        <rule>\n            <name>ConstructorCallsOverridableMethod</name>\n            <ruleset>Design Rules</ruleset>\n        </rule>\n        <rule>\n            <name>EqualsNull</name>\n            <ruleset>Design Rules</ruleset>\n        </rule>\n        <rule>\n            <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>\n            <ruleset>Design Rules</ruleset>\n        </rule>\n        <rule>\n            <name>EmptyMethodInAbstractClassShouldBeAbstract</name>\n            <ruleset>Design Rules</ruleset>\n        </rule>\n        <rule>\n            <name>ReturnEmptyArrayRatherThanNull</name>\n            <ruleset>Design Rules</ruleset>\n        </rule>\n        <rule>\n            <name>AbstractClassWithoutAnyMethod</name>\n            <ruleset>Design Rules</ruleset>\n        </rule>\n        <rule>\n            <name>TooFewBranchesForASwitchStatement</name>\n            <ruleset>Design Rules</ruleset>\n        </rule>\n        <rule>\n            <name>AvoidThrowingRawExceptionTypes</name>\n            <ruleset>Strict Exception Rules</ruleset>\n        </rule>\n        <rule>\n            <name>AvoidThrowingNullPointerException</name>\n            <ruleset>Strict Exception Rules</ruleset>\n        </rule>\n        <rule>\n            <name>DoubleCheckedLocking</name>\n            <ruleset>Basic Rules</ruleset>\n        </rule>\n        <rule>\n            <name>AvoidUsingShortType</name>\n            <ruleset>Controversial Rules</ruleset>\n        </rule>\n        <rule>\n            <name>VariableNamingConventions</name>\n            <ruleset>Naming Rules</ruleset>\n        </rule>\n        <rule>\n            <name>MethodNamingConventions</name>\n            <ruleset>Naming Rules</ruleset>\n        </rule>\n        <rule>\n            <name>ClassNamingConventions</name>\n            <ruleset>Naming Rules</ruleset>\n        </rule>\n        <rule>\n            <name>AvoidReassigningParameters</name>\n            <ruleset>Design Rules</ruleset>\n        </rule>\n        <rule>\n            <name>MoreThanOneLogger</name>\n            <ruleset>Java Logging Rules</ruleset>\n        </rule>\n        <rule>\n            <name>LoggerIsNotStaticFinal</name>\n            <ruleset>Java Logging Rules</ruleset>\n        </rule>\n        <rule>\n            <name>SystemPrintln</name>\n            <ruleset>Java Logging Rules</ruleset>\n        </rule>\n        <rule>\n            <name>StringInstantiation</name>\n            <ruleset>String and StringBuffer Rules</ruleset>\n        </rule>\n        <rule>\n            <name>AvoidEnumAsIdentifier</name>\n            <ruleset>Migration Rules</ruleset>\n        </rule>\n        <rule>\n            <name>AvoidAssertAsIdentifier</name>\n            <ruleset>Migration Rules</ruleset>\n        </rule>\n        <rule>\n            <name>IntegerInstantiation</name>\n            <ruleset>Migration Rules</ruleset>\n        </rule>\n        <rule>\n            <name>ByteInstantiation</name>\n            <ruleset>Migration Rules</ruleset>\n        </rule>\n        <rule>\n            <name>ShortInstantiation</name>\n            <ruleset>Migration Rules</ruleset>\n        </rule>\n        <rule>\n            <name>LongInstantiation</name>\n            <ruleset>Migration Rules</ruleset>\n        </rule>\n        <rule>\n            <name>BooleanInstantiation</name>\n            <ruleset>Basic Rules</ruleset>\n        </rule>\n        <rule>\n            <name>BrokenNullCheck</name>\n            <ruleset>Basic Rules</ruleset>\n        </rule>\n        <rule>\n            <name>AvoidMultipleUnaryOperators</name>\n            <ruleset>Basic Rules</ruleset>\n        </rule>\n        <rule>\n            <name>AvoidUsingVolatile</name>\n            <ruleset>Controversial Rules</ruleset>\n        </rule>\n        <rule>\n            <name>AvoidUsingNativeCode</name>\n            <ruleset>Controversial Rules</ruleset>\n        </rule>\n        <rule>\n            <name>DoNotCallGarbageCollectionExplicitly</name>\n            <ruleset>Controversial Rules</ruleset>\n        </rule>\n        <rule>\n            <name>SuspiciousEqualsMethodName</name>\n            <ruleset>Naming Rules</ruleset>\n        </rule>\n        <rule>\n            <name>ProperCloneImplementation</name>\n            <ruleset>Clone Implementation Rules</ruleset>\n        </rule>\n    </rules>\n    <includeDerivedFiles>false</includeDerivedFiles>\n    <violationsAsErrors>true</violationsAsErrors>\n</pmd>\n"
  },
  {
    "path": "sdk/android/src/sdk/.settings/org.eclipse.jdt.core.prefs",
    "content": "eclipse.preferences.version=1\norg.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled\norg.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7\norg.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve\norg.eclipse.jdt.core.compiler.compliance=1.7\norg.eclipse.jdt.core.compiler.debug.lineNumber=generate\norg.eclipse.jdt.core.compiler.debug.localVariable=generate\norg.eclipse.jdt.core.compiler.debug.sourceFile=generate\norg.eclipse.jdt.core.compiler.problem.assertIdentifier=error\norg.eclipse.jdt.core.compiler.problem.enumIdentifier=error\norg.eclipse.jdt.core.compiler.source=1.7\n"
  },
  {
    "path": "sdk/android/src/sdk/build.gradle",
    "content": "apply plugin: 'com.android.library'\n\next {\n    PUBLISH_ARTIFACT_ID = 'azure-mobile-services-android-sdk'\n}\n\nandroid {\n    compileSdkVersion 21\n    buildToolsVersion '21.1.2'\n\n    defaultConfig {\n        minSdkVersion 8\n        targetSdkVersion 19\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_7\n        targetCompatibility JavaVersion.VERSION_1_7\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    compile 'com.google.code.gson:gson:2.3'\n    compile 'com.google.guava:guava:18.0'\n}\n\napply from : '../../android-libraries.gradle'\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/allclasses-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>All Classes</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\">All&nbsp;Classes</h1>\n<div class=\"indexContainer\">\n<ul>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\"><span class=\"interfaceName\">AndroidHttpClientFactory</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">AndroidHttpClientFactoryImpl</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\"><span class=\"interfaceName\">ApiJsonOperationCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\"><span class=\"interfaceName\">ApiOperationCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\">BuildConfig</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\" target=\"classFrame\">ColumnDataType</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\" target=\"classFrame\">DateSerializer</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">DeleteOperation</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">ExecutableJsonQuery</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">ExecutableQuery</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\">GcmNativeRegistration</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\">GcmTemplateRegistration</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">HttpPatch</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">InsertOperation</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\" target=\"classFrame\">JsonEntityParser</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">LocalTableOperationProcessor</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\" target=\"classFrame\">LoginManager</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\" target=\"classFrame\">LongSerializer</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\">MobileServiceApplication</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\" target=\"classFrame\">MobileServiceAuthenticationProvider</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\">MobileServiceClient</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">MobileServiceConnection</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\">MobileServiceException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\">MobileServiceFeatures</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">MobileServiceHttpClient</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\" target=\"classFrame\">MobileServiceJsonSyncTable</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\">MobileServiceJsonTable</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\">MobileServiceList</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\" target=\"classFrame\"><span class=\"interfaceName\">MobileServiceLocalStore</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\" target=\"classFrame\">MobileServiceLocalStoreException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\">MobileServicePreconditionFailedException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\">MobileServicePreconditionFailedExceptionBase</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\">MobileServicePush</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\" target=\"classFrame\">MobileServicePushCompletionResult</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\" target=\"classFrame\">MobileServicePushFailedException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\" target=\"classFrame\">MobileServicePushStatus</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\" target=\"classFrame\">MobileServiceSyncContext</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\" target=\"classFrame\"><span class=\"interfaceName\">MobileServiceSyncHandler</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\" target=\"classFrame\">MobileServiceSyncHandlerException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\" target=\"classFrame\">MobileServiceSyncTable</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\">MobileServiceSystemProperty</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\">MobileServiceTable</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\"><span class=\"interfaceName\">MobileServiceTableSystemPropertiesProvider</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\" target=\"classFrame\">MobileServiceUser</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\" target=\"classFrame\">MultiLockDictionary</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\" target=\"classFrame\">MultiLockDictionary.MultiLock</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\" target=\"classFrame\">MultiReadWriteLockDictionary</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\" target=\"classFrame\">MultiReadWriteLockDictionary.MultiReadWriteLock</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\"><span class=\"interfaceName\">NextServiceFilterCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\" target=\"classFrame\">OperationErrorList</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\" target=\"classFrame\">OperationQueue</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\" target=\"classFrame\">OperationQueue.Bookmark</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\"><span class=\"interfaceName\">Query</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">QueryException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">QueryNodeSQLWriter</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">QueryODataWriter</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">QueryOperations</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">QueryOrder</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">QuerySQLWriter</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\">Registration</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\"><span class=\"interfaceName\">RegistrationCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\">RegistrationGoneException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">RemoteTableOperationProcessor</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">RequestAsyncTask</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\"><span class=\"interfaceName\">ServiceFilter</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\"><span class=\"interfaceName\">ServiceFilterRequest</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">ServiceFilterRequestImpl</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\"><span class=\"interfaceName\">ServiceFilterResponse</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\"><span class=\"interfaceName\">ServiceFilterResponseCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">ServiceFilterResponseImpl</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\" target=\"classFrame\">SimpleSyncHandler</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\" target=\"classFrame\">SQLiteLocalStore</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\"><span class=\"interfaceName\">TableDeleteCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\"><span class=\"interfaceName\">TableJsonOperationCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\"><span class=\"interfaceName\">TableJsonQueryCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\"><span class=\"interfaceName\">TableOperation</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\"><span class=\"interfaceName\">TableOperationCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">TableOperationCollapser</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">TableOperationError</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">TableOperationKind</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\"><span class=\"interfaceName\">TableOperationVisitor</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\"><span class=\"interfaceName\">TableQueryCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\">TemplateRegistration</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\"><span class=\"interfaceName\">TemplateRegistrationCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">UnaryOperatorKind</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\"><span class=\"interfaceName\">UnregisterCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">UpdateOperation</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\"><span class=\"interfaceName\">UserAuthenticationCallback</span></a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/allclasses-noframe.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>All Classes</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\">All&nbsp;Classes</h1>\n<div class=\"indexContainer\">\n<ul>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"interfaceName\">AndroidHttpClientFactory</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactoryImpl</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"interfaceName\">ApiJsonOperationCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"interfaceName\">ApiOperationCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">BuildConfig</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">DateSerializer</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmNativeRegistration</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmTemplateRegistration</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">HttpPatch</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">JsonEntityParser</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">LocalTableOperationProcessor</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">LoginManager</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">LongSerializer</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceApplication</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceHttpClient</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"interfaceName\">MobileServiceLocalStore</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedExceptionBase</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushFailedException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"interfaceName\">MobileServiceSyncHandler</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"interfaceName\">MobileServiceTableSystemPropertiesProvider</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"interfaceName\">NextServiceFilterCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"interfaceName\">Query</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryNodeSQLWriter</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryODataWriter</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QuerySQLWriter</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"interfaceName\">RegistrationCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">RegistrationGoneException</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">RequestAsyncTask</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"interfaceName\">ServiceFilter</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"interfaceName\">ServiceFilterRequest</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"interfaceName\">ServiceFilterResponse</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"interfaceName\">ServiceFilterResponseCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponseImpl</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">SimpleSyncHandler</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"interfaceName\">TableDeleteCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"interfaceName\">TableJsonOperationCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"interfaceName\">TableJsonQueryCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"interfaceName\">TableOperation</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"interfaceName\">TableOperationCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationCollapser</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"interfaceName\">TableOperationVisitor</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"interfaceName\">TableQueryCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"interfaceName\">TemplateRegistrationCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"interfaceName\">UnregisterCallback</span></a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"interfaceName\">UserAuthenticationCallback</span></a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>ApiJsonOperationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"ApiJsonOperationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ApiJsonOperationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ApiJsonOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices</div>\n<h2 title=\"Interface ApiJsonOperationCallback\" class=\"title\">Interface ApiJsonOperationCallback</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">ApiJsonOperationCallback</span></pre>\n<div class=\"block\">Callback used after a custom Api invocation is executed using JSON</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html#onCompleted-com.google.gson.JsonElement-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(com.google.gson.JsonElement&nbsp;jsonObject,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call when the operation is completed</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onCompleted-com.google.gson.JsonElement-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onCompleted</h4>\n<pre>void&nbsp;onCompleted(com.google.gson.JsonElement&nbsp;jsonObject,\n                 java.lang.Exception&nbsp;exception,\n                 <a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</pre>\n<div class=\"block\">Method to call when the operation is completed</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>jsonElement</code> - The obtained jsonElement</dd>\n<dd><code>exception</code> - An exception representing the error, in case there was one</dd>\n<dd><code>response</code> - Response object</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ApiJsonOperationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ApiJsonOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>ApiOperationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"ApiOperationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ApiOperationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ApiOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices</div>\n<h2 title=\"Interface ApiOperationCallback\" class=\"title\">Interface ApiOperationCallback&lt;E&gt;</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt><span class=\"paramLabel\">Type Parameters:</span></dt>\n<dd><code>E</code> - The API return value entity</dd>\n</dl>\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">ApiOperationCallback&lt;E&gt;</span></pre>\n<div class=\"block\">Callback used after a custom Api invocation is executed</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html#onCompleted-E-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"type parameter in ApiOperationCallback\">E</a>&nbsp;result,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call when the operation is completed</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onCompleted-java.lang.Object-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">\n<!--   -->\n</a><a name=\"onCompleted-E-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onCompleted</h4>\n<pre>void&nbsp;onCompleted(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"type parameter in ApiOperationCallback\">E</a>&nbsp;result,\n                 java.lang.Exception&nbsp;exception,\n                 <a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</pre>\n<div class=\"block\">Method to call when the operation is completed</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>result</code> - The obtained result</dd>\n<dd><code>exception</code> - An exception representing the error, in case there was one</dd>\n<dd><code>response</code> - Response object</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ApiOperationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ApiOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/BuildConfig.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>BuildConfig</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"BuildConfig\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/BuildConfig.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/BuildConfig.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"BuildConfig.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Object\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices</div>\n<h2 title=\"Class BuildConfig\" class=\"title\">Class BuildConfig</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.BuildConfig</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public final class <span class=\"typeNameLabel\">BuildConfig</span>\nextends java.lang.Object</pre>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== FIELD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.summary\">\n<!--   -->\n</a>\n<h3>Field Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Field Summary table, listing fields, and an explanation\">\n<caption><span>Fields</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Field and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static boolean</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/BuildConfig.html#DEBUG\">DEBUG</a></span></code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/BuildConfig.html#BuildConfig--\">BuildConfig</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ FIELD DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.detail\">\n<!--   -->\n</a>\n<h3>Field Detail</h3>\n<a name=\"DEBUG\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>DEBUG</h4>\n<pre>public static final&nbsp;boolean DEBUG</pre>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../constant-values.html#com.microsoft.windowsazure.mobileservices.BuildConfig.DEBUG\">Constant Field Values</a></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"BuildConfig--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>BuildConfig</h4>\n<pre>public&nbsp;BuildConfig()</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/BuildConfig.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/BuildConfig.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"BuildConfig.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Object\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceApplication</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceApplication\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceApplication.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceApplication.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices</div>\n<h2 title=\"Class MobileServiceApplication\" class=\"title\">Class MobileServiceApplication</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.MobileServiceApplication</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public final class <span class=\"typeNameLabel\">MobileServiceApplication</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Provides context regarding the application that is using the Mobile Service.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html#MobileServiceApplication--\">MobileServiceApplication</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html#getInstallationId-Context-\">getInstallationId</a></span>(Context&nbsp;context)</code>\n<div class=\"block\">Gets the ID used to identify this installation of the application to\n provide telemetry data.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceApplication--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceApplication</h4>\n<pre>public&nbsp;MobileServiceApplication()</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getInstallationId-Context-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getInstallationId</h4>\n<pre>public static&nbsp;java.lang.String&nbsp;getInstallationId(Context&nbsp;context)</pre>\n<div class=\"block\">Gets the ID used to identify this installation of the application to\n provide telemetry data. It will either be retrieved from local settings\n or generated fresh.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>context</code> - The context used to manage the application preferences</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The Installation ID</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceApplication.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceApplication.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/MobileServiceClient.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceClient</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceClient\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":9,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10,\"i6\":10,\"i7\":10,\"i8\":10,\"i9\":10,\"i10\":10,\"i11\":10,\"i12\":10,\"i13\":10,\"i14\":10,\"i15\":10,\"i16\":10,\"i17\":10,\"i18\":42,\"i19\":10,\"i20\":10,\"i21\":10,\"i22\":42,\"i23\":10,\"i24\":42,\"i25\":10,\"i26\":42,\"i27\":10,\"i28\":42,\"i29\":10,\"i30\":42,\"i31\":10,\"i32\":42,\"i33\":10,\"i34\":42,\"i35\":10,\"i36\":10,\"i37\":10,\"i38\":42,\"i39\":10,\"i40\":42,\"i41\":42,\"i42\":10,\"i43\":10,\"i44\":42,\"i45\":10,\"i46\":42,\"i47\":42,\"i48\":10,\"i49\":10,\"i50\":10,\"i51\":42,\"i52\":42,\"i53\":10,\"i54\":42,\"i55\":42,\"i56\":10,\"i57\":10,\"i58\":10,\"i59\":10,\"i60\":10,\"i61\":10,\"i62\":10,\"i63\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"],32:[\"t6\",\"Deprecated Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceClient.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceClient.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices</div>\n<h2 title=\"Class MobileServiceClient\" class=\"title\">Class MobileServiceClient</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.MobileServiceClient</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServiceClient</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Entry-point for Microsoft Azure Mobile Services interactions</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== FIELD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.summary\">\n<!--   -->\n</a>\n<h3>Field Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Field Summary table, listing fields, and an explanation\">\n<caption><span>Fields</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Field and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#GOOGLE_ACCOUNT_TYPE\">GOOGLE_ACCOUNT_TYPE</a></span></code>\n<div class=\"block\">Google account type</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#GOOGLE_USER_INFO_SCOPE\">GOOGLE_USER_INFO_SCOPE</a></span></code>\n<div class=\"block\">Authentication token type required for client login</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#UTF8_ENCODING\">UTF8_ENCODING</a></span></code>\n<div class=\"block\">UTF-8 encoding</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#MobileServiceClient-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceClient</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor for the MobileServiceClient</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#MobileServiceClient-java.lang.String-java.lang.String-Context-\">MobileServiceClient</a></span>(java.lang.String&nbsp;appUrl,\n                   java.lang.String&nbsp;appKey,\n                   Context&nbsp;context)</code>\n<div class=\"block\">Constructor for the MobileServiceClient</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#MobileServiceClient-java.net.URL-java.lang.String-Context-\">MobileServiceClient</a></span>(java.net.URL&nbsp;appUrl,\n                   java.lang.String&nbsp;appKey,\n                   Context&nbsp;context)</code>\n<div class=\"block\">Constructor for the MobileServiceClient</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">Deprecated Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#createConnection--\">createConnection</a></span>()</code>\n<div class=\"block\">Creates a MobileServiceConnection</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static com.google.gson.GsonBuilder</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#createMobileServiceGsonBuilder--\">createMobileServiceGsonBuilder</a></span>()</code>\n<div class=\"block\">Creates a GsonBuilder with custom serializers to use with Microsoft Azure\n Mobile Services</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getAndroidHttpClientFactory--\">getAndroidHttpClientFactory</a></span>()</code>\n<div class=\"block\">Gets the AndroidHttpClientFactory</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getAppKey--\">getAppKey</a></span>()</code>\n<div class=\"block\">Returns the Mobile Service application key</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.net.URL</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getAppUrl--\">getAppUrl</a></span>()</code>\n<div class=\"block\">Returns The Mobile Service URL</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>Context</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getContext--\">getContext</a></span>()</code>\n<div class=\"block\">Gets the Context object used to create the MobileServiceClient</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getCurrentUser--\">getCurrentUser</a></span>()</code>\n<div class=\"block\">Returns the current authenticated user</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.GsonBuilder</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getGsonBuilder--\">getGsonBuilder</a></span>()</code>\n<div class=\"block\">Gets the GsonBuilder used to in JSON Serialization/Deserialization</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getPush--\">getPush</a></span>()</code>\n<div class=\"block\">Gets the MobileServicePush used for push notifications</div>\n</td>\n</tr>\n<tr id=\"i9\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getServiceFilter--\">getServiceFilter</a></span>()</code>\n<div class=\"block\">Gets the ServiceFilter.</div>\n</td>\n</tr>\n<tr id=\"i10\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getSyncContext--\">getSyncContext</a></span>()</code>\n<div class=\"block\">Returns a MobileServiceSyncContext instance.</div>\n</td>\n</tr>\n<tr id=\"i11\" class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a>&lt;E&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getSyncTable-java.lang.Class-\">getSyncTable</a></span>(java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Returns a MobileServiceSyncTable<E> instance, which provides strongly\n typed data operations for a local table.</div>\n</td>\n</tr>\n<tr id=\"i12\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getSyncTable-java.lang.String-\">getSyncTable</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns a MobileServiceJsonSyncTable instance, which provides untyped\n data operations for a local table.</div>\n</td>\n</tr>\n<tr id=\"i13\" class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a>&lt;E&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getSyncTable-java.lang.String-java.lang.Class-\">getSyncTable</a></span>(java.lang.String&nbsp;name,\n            java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Returns a MobileServiceSyncTable<E> instance, which provides strongly\n typed data operations for a local table.</div>\n</td>\n</tr>\n<tr id=\"i14\" class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a>&lt;E&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getTable-java.lang.Class-\">getTable</a></span>(java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Creates a MobileServiceTable</div>\n</td>\n</tr>\n<tr id=\"i15\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getTable-java.lang.String-\">getTable</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Creates a MobileServiceJsonTable</div>\n</td>\n</tr>\n<tr id=\"i16\" class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a>&lt;E&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getTable-java.lang.String-java.lang.Class-\">getTable</a></span>(java.lang.String&nbsp;name,\n        java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Creates a MobileServiceTable</div>\n</td>\n</tr>\n<tr id=\"i17\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-\">invokeApi</a></span>(java.lang.String&nbsp;apiName)</code>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n</td>\n</tr>\n<tr id=\"i18\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-\"><code>invokeApi(String apiName)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i19\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         byte[]&nbsp;content,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Invokes a custom API</div>\n</td>\n</tr>\n<tr id=\"i20\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         byte[]&nbsp;content,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n         <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a>&nbsp;callback)</code>\n<div class=\"block\">Invokes a custom API</div>\n</td>\n</tr>\n<tr id=\"i21\" class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;E&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Class-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n</td>\n</tr>\n<tr id=\"i22\" class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.Class&lt;E&gt;&nbsp;clazz,\n         <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, Class<E> clazz)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i23\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         com.google.gson.JsonElement&nbsp;body)</code>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n</td>\n</tr>\n<tr id=\"i24\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         com.google.gson.JsonElement&nbsp;body,\n         <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-\"><code>invokeApi(String apiName, JsonElement body)</code></a>\n             instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i25\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-java.lang.String-java.util.List-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         com.google.gson.JsonElement&nbsp;body,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Invokes a custom API</div>\n</td>\n</tr>\n<tr id=\"i26\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-java.lang.String-java.util.List-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         com.google.gson.JsonElement&nbsp;body,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n         <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, JsonElement body, String\n             httpMethod, List<Pair<String, String>> parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i27\" class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;E&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Object-java.lang.Class-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.Object&nbsp;body,\n         java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n</td>\n</tr>\n<tr id=\"i28\" class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Object-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.Object&nbsp;body,\n         java.lang.Class&lt;E&gt;&nbsp;clazz,\n         <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, Object body, Class<E>\n             clazz)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i29\" class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;E&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Object-java.lang.String-java.util.List-java.lang.Class-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.Object&nbsp;body,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n         java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Invokes a custom API</div>\n</td>\n</tr>\n<tr id=\"i30\" class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Object-java.lang.String-java.util.List-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.Object&nbsp;body,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n         java.lang.Class&lt;E&gt;&nbsp;clazz,\n         <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, Object body, String\n             httpMethod, List<Pair<String, String>> parameters, final\n             Class<E> clazz)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i31\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.String-java.util.List-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Invokes a custom API</div>\n</td>\n</tr>\n<tr id=\"i32\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.String-java.util.List-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n         <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, String httpMethod,\n             List<Pair<String, String>> parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i33\" class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;E&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.String-java.util.List-java.lang.Class-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n         java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Invokes a custom API</div>\n</td>\n</tr>\n<tr id=\"i34\" class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.String-java.util.List-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n         java.lang.Class&lt;E&gt;&nbsp;clazz,\n         <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, String httpMethod,\n             List<Pair<String, String>> parameters, Class<E> clazz)</code>\n             instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i35\" class=\"rowColor\">\n<td class=\"colFirst\"><code>boolean</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#isLoginInProgress--\">isLoginInProgress</a></span>()</code>\n<div class=\"block\">Indicates if a login operation is in progress</div>\n</td>\n</tr>\n<tr id=\"i36\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-\">login</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider)</code>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</td>\n</tr>\n<tr id=\"i37\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-\">login</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     com.google.gson.JsonObject&nbsp;oAuthToken)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</td>\n</tr>\n<tr id=\"i38\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     com.google.gson.JsonObject&nbsp;oAuthToken,\n     <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-\"><code>login(MobileServiceAuthenticationProvider\n             provider, JsonObject oAuthToken)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i39\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-\">login</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     java.lang.String&nbsp;oAuthToken)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</td>\n</tr>\n<tr id=\"i40\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     java.lang.String&nbsp;oAuthToken,\n     <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-\"><code>login(MobileServiceAuthenticationProvider\n             provider, String oAuthToken)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i41\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-\"><code>login(MobileServiceAuthenticationProvider\n             provider)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i42\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-\">login</a></span>(java.lang.String&nbsp;provider)</code>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</td>\n</tr>\n<tr id=\"i43\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.google.gson.JsonObject-\">login</a></span>(java.lang.String&nbsp;provider,\n     com.google.gson.JsonObject&nbsp;oAuthToken)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</td>\n</tr>\n<tr id=\"i44\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(java.lang.String&nbsp;provider,\n     com.google.gson.JsonObject&nbsp;oAuthToken,\n     <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.google.gson.JsonObject-\"><code>login(String provider, JsonObject oAuthToken)</code></a>\n             instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i45\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-java.lang.String-\">login</a></span>(java.lang.String&nbsp;provider,\n     java.lang.String&nbsp;oAuthToken)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</td>\n</tr>\n<tr id=\"i46\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(java.lang.String&nbsp;provider,\n     java.lang.String&nbsp;oAuthToken,\n     <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-java.lang.String-\"><code>login(String provider, String oAuthToken)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i47\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(java.lang.String&nbsp;provider,\n     <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-\"><code>login(String provider)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i48\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n</td>\n</tr>\n<tr id=\"i49\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      Account&nbsp;account)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n</td>\n</tr>\n<tr id=\"i50\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-java.lang.String-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      Account&nbsp;account,\n                      java.lang.String&nbsp;scopes)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n</td>\n</tr>\n<tr id=\"i51\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      Account&nbsp;account,\n                      java.lang.String&nbsp;scopes,\n                      <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-java.lang.String-\"><code>loginWithGoogleAccount(Activity activity, Account\n             account, String scopes)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i52\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      Account&nbsp;account,\n                      <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-\"><code>loginWithGoogleAccount(Activity activity, Account\n             account)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i53\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-java.lang.String-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      java.lang.String&nbsp;scopes)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n</td>\n</tr>\n<tr id=\"i54\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      java.lang.String&nbsp;scopes,\n                      <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-java.lang.String-\"><code>loginWithGoogleAccount(Activity activity, String\n             scopes)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i55\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-\"><code>loginWithGoogleAccount(Activity activity)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i56\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#logout--\">logout</a></span>()</code>\n<div class=\"block\">Log the user out of the Mobile Service</div>\n</td>\n</tr>\n<tr id=\"i57\" class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;T&gt;&nbsp;void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#registerDeserializer-java.lang.reflect.Type-com.google.gson.JsonDeserializer-\">registerDeserializer</a></span>(java.lang.reflect.Type&nbsp;type,\n                    com.google.gson.JsonDeserializer&lt;T&gt;&nbsp;deserializer)</code>\n<div class=\"block\">Registers a JsonDeserializer for the specified type</div>\n</td>\n</tr>\n<tr id=\"i58\" class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;T&gt;&nbsp;void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#registerSerializer-java.lang.reflect.Type-com.google.gson.JsonSerializer-\">registerSerializer</a></span>(java.lang.reflect.Type&nbsp;type,\n                  com.google.gson.JsonSerializer&lt;T&gt;&nbsp;serializer)</code>\n<div class=\"block\">Registers a JsonSerializer for the specified type</div>\n</td>\n</tr>\n<tr id=\"i59\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#setAndroidHttpClientFactory-com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory-\">setAndroidHttpClientFactory</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a>&nbsp;mAndroidHttpClientFactory)</code>\n<div class=\"block\">Sets the AndroidHttpClientFactory</div>\n</td>\n</tr>\n<tr id=\"i60\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#setContext-Context-\">setContext</a></span>(Context&nbsp;mContext)</code>\n<div class=\"block\">Sets the Context object for the MobileServiceClient</div>\n</td>\n</tr>\n<tr id=\"i61\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#setCurrentUser-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser-\">setCurrentUser</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&nbsp;user)</code>\n<div class=\"block\">Sets a user to authenticate the Mobile Service operations</div>\n</td>\n</tr>\n<tr id=\"i62\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#setGsonBuilder-com.google.gson.GsonBuilder-\">setGsonBuilder</a></span>(com.google.gson.GsonBuilder&nbsp;gsonBuilder)</code>\n<div class=\"block\">Sets the GsonBuilder used to in JSON Serialization/Deserialization</div>\n</td>\n</tr>\n<tr id=\"i63\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#withFilter-com.microsoft.windowsazure.mobileservices.http.ServiceFilter-\">withFilter</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a>&nbsp;serviceFilter)</code>\n<div class=\"block\">Adds a new filter to the MobileServiceClient</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ FIELD DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.detail\">\n<!--   -->\n</a>\n<h3>Field Detail</h3>\n<a name=\"UTF8_ENCODING\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>UTF8_ENCODING</h4>\n<pre>public static final&nbsp;java.lang.String UTF8_ENCODING</pre>\n<div class=\"block\">UTF-8 encoding</div>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../constant-values.html#com.microsoft.windowsazure.mobileservices.MobileServiceClient.UTF8_ENCODING\">Constant Field Values</a></dd>\n</dl>\n</li>\n</ul>\n<a name=\"GOOGLE_ACCOUNT_TYPE\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>GOOGLE_ACCOUNT_TYPE</h4>\n<pre>public static final&nbsp;java.lang.String GOOGLE_ACCOUNT_TYPE</pre>\n<div class=\"block\">Google account type</div>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../constant-values.html#com.microsoft.windowsazure.mobileservices.MobileServiceClient.GOOGLE_ACCOUNT_TYPE\">Constant Field Values</a></dd>\n</dl>\n</li>\n</ul>\n<a name=\"GOOGLE_USER_INFO_SCOPE\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>GOOGLE_USER_INFO_SCOPE</h4>\n<pre>public static final&nbsp;java.lang.String GOOGLE_USER_INFO_SCOPE</pre>\n<div class=\"block\">Authentication token type required for client login</div>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../constant-values.html#com.microsoft.windowsazure.mobileservices.MobileServiceClient.GOOGLE_USER_INFO_SCOPE\">Constant Field Values</a></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceClient-java.lang.String-java.lang.String-Context-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>MobileServiceClient</h4>\n<pre>public&nbsp;MobileServiceClient(java.lang.String&nbsp;appUrl,\n                           java.lang.String&nbsp;appKey,\n                           Context&nbsp;context)\n                    throws java.net.MalformedURLException</pre>\n<div class=\"block\">Constructor for the MobileServiceClient</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>appUrl</code> - Mobile Service URL</dd>\n<dd><code>appKey</code> - Mobile Service application key</dd>\n<dd><code>context</code> - The Context where the MobileServiceClient is created</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.net.MalformedURLException</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"MobileServiceClient-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>MobileServiceClient</h4>\n<pre>public&nbsp;MobileServiceClient(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</pre>\n<div class=\"block\">Constructor for the MobileServiceClient</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>client</code> - An existing MobileServiceClient</dd>\n</dl>\n</li>\n</ul>\n<a name=\"MobileServiceClient-java.net.URL-java.lang.String-Context-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceClient</h4>\n<pre>public&nbsp;MobileServiceClient(java.net.URL&nbsp;appUrl,\n                           java.lang.String&nbsp;appKey,\n                           Context&nbsp;context)</pre>\n<div class=\"block\">Constructor for the MobileServiceClient</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>appUrl</code> - Mobile Service URL</dd>\n<dd><code>appKey</code> - Mobile Service application key</dd>\n<dd><code>context</code> - The Context where the MobileServiceClient is created</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"createMobileServiceGsonBuilder--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>createMobileServiceGsonBuilder</h4>\n<pre>public static&nbsp;com.google.gson.GsonBuilder&nbsp;createMobileServiceGsonBuilder()</pre>\n<div class=\"block\">Creates a GsonBuilder with custom serializers to use with Microsoft Azure\n Mobile Services</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n</dl>\n</li>\n</ul>\n<a name=\"login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>login</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;&nbsp;login(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider)</pre>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n<a name=\"login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>login</h4>\n<pre>public&nbsp;void&nbsp;login(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n                  <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-\"><code>login(MobileServiceAuthenticationProvider\n             provider)</code></a> instead</span></div>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n<a name=\"login-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>login</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;&nbsp;login(java.lang.String&nbsp;provider)</pre>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n</dl>\n</li>\n</ul>\n<a name=\"login-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>login</h4>\n<pre>public&nbsp;void&nbsp;login(java.lang.String&nbsp;provider,\n                  <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-\"><code>login(String provider)</code></a> instead</span></div>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n<a name=\"login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>login</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;&nbsp;login(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n                                                                                   com.google.gson.JsonObject&nbsp;oAuthToken)</pre>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>oAuthToken</code> - A Json object representing the oAuth token used for\n            authentication</dd>\n</dl>\n</li>\n</ul>\n<a name=\"login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>login</h4>\n<pre>public&nbsp;void&nbsp;login(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n                  com.google.gson.JsonObject&nbsp;oAuthToken,\n                  <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-\"><code>login(MobileServiceAuthenticationProvider\n             provider, JsonObject oAuthToken)</code></a> instead</span></div>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>oAuthToken</code> - A Json object representing the oAuth token used for\n            authentication</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n<a name=\"login-java.lang.String-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>login</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;&nbsp;login(java.lang.String&nbsp;provider,\n                                                                                   com.google.gson.JsonObject&nbsp;oAuthToken)</pre>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>oAuthToken</code> - A Json object representing the oAuth token used for\n            authentication</dd>\n</dl>\n</li>\n</ul>\n<a name=\"login-java.lang.String-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>login</h4>\n<pre>public&nbsp;void&nbsp;login(java.lang.String&nbsp;provider,\n                  com.google.gson.JsonObject&nbsp;oAuthToken,\n                  <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.google.gson.JsonObject-\"><code>login(String provider, JsonObject oAuthToken)</code></a>\n             instead</span></div>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>oAuthToken</code> - A Json object representing the oAuth token used for\n            authentication</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n<a name=\"login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>login</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;&nbsp;login(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n                                                                                   java.lang.String&nbsp;oAuthToken)</pre>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>oAuthToken</code> - The oAuth token used for authentication</dd>\n</dl>\n</li>\n</ul>\n<a name=\"login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>login</h4>\n<pre>public&nbsp;void&nbsp;login(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n                  java.lang.String&nbsp;oAuthToken,\n                  <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-\"><code>login(MobileServiceAuthenticationProvider\n             provider, String oAuthToken)</code></a> instead</span></div>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>oAuthToken</code> - The oAuth token used for authentication</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n<a name=\"login-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>login</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;&nbsp;login(java.lang.String&nbsp;provider,\n                                                                                   java.lang.String&nbsp;oAuthToken)</pre>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>oAuthToken</code> - The oAuth token used for authentication</dd>\n</dl>\n</li>\n</ul>\n<a name=\"login-java.lang.String-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>login</h4>\n<pre>public&nbsp;void&nbsp;login(java.lang.String&nbsp;provider,\n                  java.lang.String&nbsp;oAuthToken,\n                  <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-java.lang.String-\"><code>login(String provider, String oAuthToken)</code></a> instead</span></div>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>oAuthToken</code> - The oAuth token used for authentication</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n<a name=\"loginWithGoogleAccount-Activity-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>loginWithGoogleAccount</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;&nbsp;loginWithGoogleAccount(Activity&nbsp;activity)</pre>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>activity</code> - The activity that triggered the authentication</dd>\n</dl>\n</li>\n</ul>\n<a name=\"loginWithGoogleAccount-Activity-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>loginWithGoogleAccount</h4>\n<pre>public&nbsp;void&nbsp;loginWithGoogleAccount(Activity&nbsp;activity,\n                                   <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-\"><code>loginWithGoogleAccount(Activity activity)</code></a> instead</span></div>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>activity</code> - The activity that triggered the authentication</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n<a name=\"loginWithGoogleAccount-Activity-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>loginWithGoogleAccount</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;&nbsp;loginWithGoogleAccount(Activity&nbsp;activity,\n                                                                                                    java.lang.String&nbsp;scopes)</pre>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>activity</code> - The activity that triggered the authentication</dd>\n<dd><code>scopes</code> - The scopes used as authentication token type for login</dd>\n</dl>\n</li>\n</ul>\n<a name=\"loginWithGoogleAccount-Activity-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>loginWithGoogleAccount</h4>\n<pre>public&nbsp;void&nbsp;loginWithGoogleAccount(Activity&nbsp;activity,\n                                   java.lang.String&nbsp;scopes,\n                                   <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-java.lang.String-\"><code>loginWithGoogleAccount(Activity activity, String\n             scopes)</code></a> instead</span></div>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>activity</code> - The activity that triggered the authentication</dd>\n<dd><code>scopes</code> - The scopes used as authentication token type for login</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n<a name=\"loginWithGoogleAccount-Activity-Account-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>loginWithGoogleAccount</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;&nbsp;loginWithGoogleAccount(Activity&nbsp;activity,\n                                                                                                    Account&nbsp;account)</pre>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>activity</code> - The activity that triggered the authentication</dd>\n<dd><code>account</code> - The account used for the login operation</dd>\n</dl>\n</li>\n</ul>\n<a name=\"loginWithGoogleAccount-Activity-Account-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>loginWithGoogleAccount</h4>\n<pre>public&nbsp;void&nbsp;loginWithGoogleAccount(Activity&nbsp;activity,\n                                   Account&nbsp;account,\n                                   <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-\"><code>loginWithGoogleAccount(Activity activity, Account\n             account)</code></a> instead</span></div>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>activity</code> - The activity that triggered the authentication</dd>\n<dd><code>account</code> - The account used for the login operation</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n<a name=\"loginWithGoogleAccount-Activity-Account-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>loginWithGoogleAccount</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;&nbsp;loginWithGoogleAccount(Activity&nbsp;activity,\n                                                                                                    Account&nbsp;account,\n                                                                                                    java.lang.String&nbsp;scopes)</pre>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>activity</code> - The activity that triggered the authentication</dd>\n<dd><code>account</code> - The account used for the login operation</dd>\n<dd><code>scopes</code> - The scopes used as authentication token type for login</dd>\n</dl>\n</li>\n</ul>\n<a name=\"loginWithGoogleAccount-Activity-Account-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>loginWithGoogleAccount</h4>\n<pre>public&nbsp;void&nbsp;loginWithGoogleAccount(Activity&nbsp;activity,\n                                   Account&nbsp;account,\n                                   java.lang.String&nbsp;scopes,\n                                   <a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-java.lang.String-\"><code>loginWithGoogleAccount(Activity activity, Account\n             account, String scopes)</code></a> instead</span></div>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>activity</code> - The activity that triggered the authentication</dd>\n<dd><code>account</code> - The account used for the login operation</dd>\n<dd><code>scopes</code> - The scopes used as authentication token type for login</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n<a name=\"logout--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>logout</h4>\n<pre>public&nbsp;void&nbsp;logout()</pre>\n<div class=\"block\">Log the user out of the Mobile Service</div>\n</li>\n</ul>\n<a name=\"getAppKey--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getAppKey</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getAppKey()</pre>\n<div class=\"block\">Returns the Mobile Service application key</div>\n</li>\n</ul>\n<a name=\"getAppUrl--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getAppUrl</h4>\n<pre>public&nbsp;java.net.URL&nbsp;getAppUrl()</pre>\n<div class=\"block\">Returns The Mobile Service URL</div>\n</li>\n</ul>\n<a name=\"isLoginInProgress--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>isLoginInProgress</h4>\n<pre>public&nbsp;boolean&nbsp;isLoginInProgress()</pre>\n<div class=\"block\">Indicates if a login operation is in progress</div>\n</li>\n</ul>\n<a name=\"getCurrentUser--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getCurrentUser</h4>\n<pre>public&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&nbsp;getCurrentUser()</pre>\n<div class=\"block\">Returns the current authenticated user</div>\n</li>\n</ul>\n<a name=\"setCurrentUser-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setCurrentUser</h4>\n<pre>public&nbsp;void&nbsp;setCurrentUser(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&nbsp;user)</pre>\n<div class=\"block\">Sets a user to authenticate the Mobile Service operations</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>user</code> - The user used to authenticate requests</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getSyncContext--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getSyncContext</h4>\n<pre>public&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a>&nbsp;getSyncContext()</pre>\n<div class=\"block\">Returns a MobileServiceSyncContext instance.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the MobileServiceSyncContext instance</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTable-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTable</h4>\n<pre>public&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a>&nbsp;getTable(java.lang.String&nbsp;name)</pre>\n<div class=\"block\">Creates a MobileServiceJsonTable</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - Table name</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>MobileServiceJsonTable with the given name</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getSyncTable-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getSyncTable</h4>\n<pre>public&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a>&nbsp;getSyncTable(java.lang.String&nbsp;name)</pre>\n<div class=\"block\">Returns a MobileServiceJsonSyncTable instance, which provides untyped\n data operations for a local table.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - Table name</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The MobileServiceJsonSyncTable instance</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTable-java.lang.Class-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTable</h4>\n<pre>public&nbsp;&lt;E&gt;&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a>&lt;E&gt;&nbsp;getTable(java.lang.Class&lt;E&gt;&nbsp;clazz)</pre>\n<div class=\"block\">Creates a MobileServiceTable</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>clazz</code> - The class used for table name and data serialization</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>MobileServiceTable with the given name</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTable-java.lang.String-java.lang.Class-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTable</h4>\n<pre>public&nbsp;&lt;E&gt;&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a>&lt;E&gt;&nbsp;getTable(java.lang.String&nbsp;name,\n                                          java.lang.Class&lt;E&gt;&nbsp;clazz)</pre>\n<div class=\"block\">Creates a MobileServiceTable</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - Table name</dd>\n<dd><code>clazz</code> - The class used for data serialization</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>MobileServiceTable with the given name</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getSyncTable-java.lang.Class-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getSyncTable</h4>\n<pre>public&nbsp;&lt;E&gt;&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a>&lt;E&gt;&nbsp;getSyncTable(java.lang.Class&lt;E&gt;&nbsp;clazz)</pre>\n<div class=\"block\">Returns a MobileServiceSyncTable<E> instance, which provides strongly\n typed data operations for a local table.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>clazz</code> - The class used for table name and data serialization</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The MobileServiceSyncTable instance</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getSyncTable-java.lang.String-java.lang.Class-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getSyncTable</h4>\n<pre>public&nbsp;&lt;E&gt;&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a>&lt;E&gt;&nbsp;getSyncTable(java.lang.String&nbsp;name,\n                                                  java.lang.Class&lt;E&gt;&nbsp;clazz)</pre>\n<div class=\"block\">Returns a MobileServiceSyncTable<E> instance, which provides strongly\n typed data operations for a local table.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - Table name</dd>\n<dd><code>clazz</code> - The class used for data serialization</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The MobileServiceSyncTable instance</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-java.lang.Class-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;&lt;E&gt;&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;E&gt;&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                                                                           java.lang.Class&lt;E&gt;&nbsp;clazz)</pre>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>clazz</code> - The API result class</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;&lt;E&gt;&nbsp;void&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                          java.lang.Class&lt;E&gt;&nbsp;clazz,\n                          <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>invokeApi(String apiName, Class<E> clazz)</code> instead</span></div>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>clazz</code> - The API result class</dd>\n<dd><code>callback</code> - The callback to invoke after the API execution</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-java.lang.Object-java.lang.Class-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;&lt;E&gt;&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;E&gt;&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                                                                           java.lang.Object&nbsp;body,\n                                                                           java.lang.Class&lt;E&gt;&nbsp;clazz)</pre>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>body</code> - The object to send as the request body</dd>\n<dd><code>clazz</code> - The API result class</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-java.lang.Object-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;&lt;E&gt;&nbsp;void&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                          java.lang.Object&nbsp;body,\n                          java.lang.Class&lt;E&gt;&nbsp;clazz,\n                          <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>invokeApi(String apiName, Object body, Class<E>\n             clazz)</code> instead</span></div>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>body</code> - The object to send as the request body</dd>\n<dd><code>clazz</code> - The API result class</dd>\n<dd><code>callback</code> - The callback to invoke after the API execution</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-java.lang.String-java.util.List-java.lang.Class-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;&lt;E&gt;&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;E&gt;&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                                                                           java.lang.String&nbsp;httpMethod,\n                                                                           java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                                                                           java.lang.Class&lt;E&gt;&nbsp;clazz)</pre>\n<div class=\"block\">Invokes a custom API</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n<dd><code>clazz</code> - The API result class</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-java.lang.String-java.util.List-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;&lt;E&gt;&nbsp;void&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                          java.lang.String&nbsp;httpMethod,\n                          java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                          java.lang.Class&lt;E&gt;&nbsp;clazz,\n                          <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>invokeApi(String apiName, String httpMethod,\n             List<Pair<String, String>> parameters, Class<E> clazz)</code>\n             instead</span></div>\n<div class=\"block\">Invokes a custom API</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n<dd><code>clazz</code> - The API result class</dd>\n<dd><code>callback</code> - The callback to invoke after the API execution</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-java.lang.Object-java.lang.String-java.util.List-java.lang.Class-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;&lt;E&gt;&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;E&gt;&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                                                                           java.lang.Object&nbsp;body,\n                                                                           java.lang.String&nbsp;httpMethod,\n                                                                           java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                                                                           java.lang.Class&lt;E&gt;&nbsp;clazz)</pre>\n<div class=\"block\">Invokes a custom API</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>body</code> - The object to send as the request body</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n<dd><code>clazz</code> - The API result class</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-java.lang.Object-java.lang.String-java.util.List-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;&lt;E&gt;&nbsp;void&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                          java.lang.Object&nbsp;body,\n                          java.lang.String&nbsp;httpMethod,\n                          java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                          java.lang.Class&lt;E&gt;&nbsp;clazz,\n                          <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>invokeApi(String apiName, Object body, String\n             httpMethod, List<Pair<String, String>> parameters, final\n             Class<E> clazz)</code> instead</span></div>\n<div class=\"block\">Invokes a custom API</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>body</code> - The object to send as the request body</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n<dd><code>clazz</code> - The API result class</dd>\n<dd><code>callback</code> - The callback to invoke after the API execution</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;&nbsp;invokeApi(java.lang.String&nbsp;apiName)</pre>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;void&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                      <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-\"><code>invokeApi(String apiName)</code></a> instead</span></div>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>callback</code> - The callback to invoke after the API execution</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-com.google.gson.JsonElement-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                                                                                                 com.google.gson.JsonElement&nbsp;body)</pre>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>body</code> - The json element to send as the request body</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-com.google.gson.JsonElement-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;void&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                      com.google.gson.JsonElement&nbsp;body,\n                      <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-\"><code>invokeApi(String apiName, JsonElement body)</code></a>\n             instead</span></div>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>body</code> - The json element to send as the request body</dd>\n<dd><code>callback</code> - The callback to invoke after the API execution</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-java.lang.String-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                                                                                                 java.lang.String&nbsp;httpMethod,\n                                                                                                 java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Invokes a custom API</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-java.lang.String-java.util.List-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;void&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                      java.lang.String&nbsp;httpMethod,\n                      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                      <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>invokeApi(String apiName, String httpMethod,\n             List<Pair<String, String>> parameters)</code> instead</span></div>\n<div class=\"block\">Invokes a custom API</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n<dd><code>callback</code> - The callback to invoke after the API execution</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-com.google.gson.JsonElement-java.lang.String-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                                                                                                 com.google.gson.JsonElement&nbsp;body,\n                                                                                                 java.lang.String&nbsp;httpMethod,\n                                                                                                 java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Invokes a custom API</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>body</code> - The json element to send as the request body</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-com.google.gson.JsonElement-java.lang.String-java.util.List-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;void&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                      com.google.gson.JsonElement&nbsp;body,\n                      java.lang.String&nbsp;httpMethod,\n                      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                      <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>invokeApi(String apiName, JsonElement body, String\n             httpMethod, List<Pair<String, String>> parameters)</code> instead</span></div>\n<div class=\"block\">Invokes a custom API</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>body</code> - The json element to send as the request body</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n<dd><code>callback</code> - The callback to invoke after the API execution</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                                                                                           byte[]&nbsp;content,\n                                                                                           java.lang.String&nbsp;httpMethod,\n                                                                                           java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n                                                                                           java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Invokes a custom API</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>content</code> - The byte array to send as the request body</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>requestHeaders</code> - The extra headers to send in the request</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n</dl>\n</li>\n</ul>\n<a name=\"invokeApi-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>invokeApi</h4>\n<pre>public&nbsp;void&nbsp;invokeApi(java.lang.String&nbsp;apiName,\n                      byte[]&nbsp;content,\n                      java.lang.String&nbsp;httpMethod,\n                      java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n                      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                      <a href=\"../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a>&nbsp;callback)</pre>\n<div class=\"block\">Invokes a custom API</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>apiName</code> - The API name</dd>\n<dd><code>content</code> - The byte array to send as the request body</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>requestHeaders</code> - The extra headers to send in the request</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n<dd><code>callback</code> - The callback to invoke after the API execution</dd>\n</dl>\n</li>\n</ul>\n<a name=\"withFilter-com.microsoft.windowsazure.mobileservices.http.ServiceFilter-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>withFilter</h4>\n<pre>public&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;withFilter(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a>&nbsp;serviceFilter)</pre>\n<div class=\"block\">Adds a new filter to the MobileServiceClient</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>serviceFilter</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>MobileServiceClient with filters updated</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getServiceFilter--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getServiceFilter</h4>\n<pre>public&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a>&nbsp;getServiceFilter()</pre>\n<div class=\"block\">Gets the ServiceFilter. If there is no ServiceFilter, it creates and\n returns a default filter</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ServiceFilter The service filter to use with the client.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"createConnection--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>createConnection</h4>\n<pre>public&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a>&nbsp;createConnection()</pre>\n<div class=\"block\">Creates a MobileServiceConnection</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>MobileServiceConnection</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getGsonBuilder--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getGsonBuilder</h4>\n<pre>public&nbsp;com.google.gson.GsonBuilder&nbsp;getGsonBuilder()</pre>\n<div class=\"block\">Gets the GsonBuilder used to in JSON Serialization/Deserialization</div>\n</li>\n</ul>\n<a name=\"registerSerializer-java.lang.reflect.Type-com.google.gson.JsonSerializer-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>registerSerializer</h4>\n<pre>public&nbsp;&lt;T&gt;&nbsp;void&nbsp;registerSerializer(java.lang.reflect.Type&nbsp;type,\n                                   com.google.gson.JsonSerializer&lt;T&gt;&nbsp;serializer)</pre>\n<div class=\"block\">Registers a JsonSerializer for the specified type</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>type</code> - The type to use in the registration</dd>\n<dd><code>serializer</code> - The serializer to use in the registration</dd>\n</dl>\n</li>\n</ul>\n<a name=\"registerDeserializer-java.lang.reflect.Type-com.google.gson.JsonDeserializer-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>registerDeserializer</h4>\n<pre>public&nbsp;&lt;T&gt;&nbsp;void&nbsp;registerDeserializer(java.lang.reflect.Type&nbsp;type,\n                                     com.google.gson.JsonDeserializer&lt;T&gt;&nbsp;deserializer)</pre>\n<div class=\"block\">Registers a JsonDeserializer for the specified type</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>type</code> - The type to use in the registration</dd>\n<dd><code>deserializer</code> - The deserializer to use in the registration</dd>\n</dl>\n</li>\n</ul>\n<a name=\"setGsonBuilder-com.google.gson.GsonBuilder-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setGsonBuilder</h4>\n<pre>public&nbsp;void&nbsp;setGsonBuilder(com.google.gson.GsonBuilder&nbsp;gsonBuilder)</pre>\n<div class=\"block\">Sets the GsonBuilder used to in JSON Serialization/Deserialization</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>mGsonBuilder</code> - The GsonBuilder to set</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getContext--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getContext</h4>\n<pre>public&nbsp;Context&nbsp;getContext()</pre>\n<div class=\"block\">Gets the Context object used to create the MobileServiceClient</div>\n</li>\n</ul>\n<a name=\"setContext-Context-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setContext</h4>\n<pre>public&nbsp;void&nbsp;setContext(Context&nbsp;mContext)</pre>\n<div class=\"block\">Sets the Context object for the MobileServiceClient</div>\n</li>\n</ul>\n<a name=\"getAndroidHttpClientFactory--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getAndroidHttpClientFactory</h4>\n<pre>public&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a>&nbsp;getAndroidHttpClientFactory()</pre>\n<div class=\"block\">Gets the AndroidHttpClientFactory</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n</dl>\n</li>\n</ul>\n<a name=\"setAndroidHttpClientFactory-com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setAndroidHttpClientFactory</h4>\n<pre>public&nbsp;void&nbsp;setAndroidHttpClientFactory(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a>&nbsp;mAndroidHttpClientFactory)</pre>\n<div class=\"block\">Sets the AndroidHttpClientFactory</div>\n</li>\n</ul>\n<a name=\"getPush--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getPush</h4>\n<pre>public&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a>&nbsp;getPush()</pre>\n<div class=\"block\">Gets the MobileServicePush used for push notifications</div>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceClient.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceClient.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/MobileServiceException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices</div>\n<h2 title=\"Class MobileServiceException\" class=\"title\">Class MobileServiceException</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Throwable</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Exception</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.MobileServiceException</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable</dd>\n</dl>\n<dl>\n<dt>Direct Known Subclasses:</dt>\n<dd><a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedException</a>, <a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedExceptionBase</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServiceException</span>\nextends java.lang.Exception</pre>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../serialized-form.html#com.microsoft.windowsazure.mobileservices.MobileServiceException\">Serialized Form</a></dd>\n</dl>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#MobileServiceException-java.lang.String-\">MobileServiceException</a></span>(java.lang.String&nbsp;detail)</code>\n<div class=\"block\">Creates a new MobileServiceException with a detail message</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#MobileServiceException-java.lang.String-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">MobileServiceException</a></span>(java.lang.String&nbsp;detail,\n                      <a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#MobileServiceException-java.lang.String-java.lang.Throwable-\">MobileServiceException</a></span>(java.lang.String&nbsp;detail,\n                      java.lang.Throwable&nbsp;throwable)</code>\n<div class=\"block\">Creates a new MobileServiceException with a detail message and a cause</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#MobileServiceException-java.lang.String-java.lang.Throwable-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">MobileServiceException</a></span>(java.lang.String&nbsp;detail,\n                      java.lang.Throwable&nbsp;throwable,\n                      <a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#MobileServiceException-java.lang.Throwable-\">MobileServiceException</a></span>(java.lang.Throwable&nbsp;throwable)</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#getResponse--\">getResponse</a></span>()</code>&nbsp;</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#getServiceResponse-java.lang.Throwable-\">getServiceResponse</a></span>(java.lang.Throwable&nbsp;throwable)</code>&nbsp;</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Throwable\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Throwable</h3>\n<code>addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceException-java.lang.Throwable-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>MobileServiceException</h4>\n<pre>public&nbsp;MobileServiceException(java.lang.Throwable&nbsp;throwable)</pre>\n</li>\n</ul>\n<a name=\"MobileServiceException-java.lang.String-java.lang.Throwable-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>MobileServiceException</h4>\n<pre>public&nbsp;MobileServiceException(java.lang.String&nbsp;detail,\n                              java.lang.Throwable&nbsp;throwable,\n                              <a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</pre>\n</li>\n</ul>\n<a name=\"MobileServiceException-java.lang.String-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>MobileServiceException</h4>\n<pre>public&nbsp;MobileServiceException(java.lang.String&nbsp;detail,\n                              <a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</pre>\n</li>\n</ul>\n<a name=\"MobileServiceException-java.lang.String-java.lang.Throwable-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>MobileServiceException</h4>\n<pre>public&nbsp;MobileServiceException(java.lang.String&nbsp;detail,\n                              java.lang.Throwable&nbsp;throwable)</pre>\n<div class=\"block\">Creates a new MobileServiceException with a detail message and a cause</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>detail</code> - The detail message</dd>\n<dd><code>throwable</code> - The exception cause</dd>\n</dl>\n</li>\n</ul>\n<a name=\"MobileServiceException-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceException</h4>\n<pre>public&nbsp;MobileServiceException(java.lang.String&nbsp;detail)</pre>\n<div class=\"block\">Creates a new MobileServiceException with a detail message</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>detail</code> - The detail message</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getResponse--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getResponse</h4>\n<pre>public&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;getResponse()</pre>\n</li>\n</ul>\n<a name=\"getServiceResponse-java.lang.Throwable-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getServiceResponse</h4>\n<pre>public static&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;getServiceResponse(java.lang.Throwable&nbsp;throwable)</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceFeatures</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceFeatures\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":9,\"i1\":10,\"i2\":9,\"i3\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceFeatures.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceFeatures.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices</div>\n<h2 title=\"Enum MobileServiceFeatures\" class=\"title\">Enum MobileServiceFeatures</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Enum&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.MobileServiceFeatures</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable, java.lang.Comparable&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public enum <span class=\"typeNameLabel\">MobileServiceFeatures</span>\nextends java.lang.Enum&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;</pre>\n<div class=\"block\">The list of mobile services features exposed in the HTTP headers of\n requests for telemetry purposes.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== ENUM CONSTANT SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.summary\">\n<!--   -->\n</a>\n<h3>Enum Constant Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Constant Summary table, listing enum constants, and an explanation\">\n<caption><span>Enum Constants</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#AdditionalQueryParameters\">AdditionalQueryParameters</a></span></code>\n<div class=\"block\">Feature header value for table / API requests which include additional query string parameters.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#GenericApiCall\">GenericApiCall</a></span></code>\n<div class=\"block\">Feature header value for API calls using the generic (HTTP) overload.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#JsonApiCall\">JsonApiCall</a></span></code>\n<div class=\"block\">Feature header value for API calls using JSON overloads.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#Offline\">Offline</a></span></code>\n<div class=\"block\">Feature header value for offline initiated requests (push / pull).</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#OpportunisticConcurrency\">OpportunisticConcurrency</a></span></code>\n<div class=\"block\">Feature header value for conditional updates.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#TypedApiCall\">TypedApiCall</a></span></code>\n<div class=\"block\">Feature header value for API calls using typed (generic) overloads.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#TypedTable\">TypedTable</a></span></code>\n<div class=\"block\">Feature header value for requests going through typed tables.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#UntypedTable\">UntypedTable</a></span></code>\n<div class=\"block\">Feature header value for requests going through untyped (JSON) tables.</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#featuresToString-java.util.EnumSet-\">featuresToString</a></span>(java.util.EnumSet&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;&nbsp;features)</code>\n<div class=\"block\">Returns a comma-separated list of feature codes which can be sent to\n the service in the features header.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#getValue--\">getValue</a></span>()</code>\n<div class=\"block\">Gets the code will be sent to the server for this feature\n in the features header</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Enum\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Enum</h3>\n<code>compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>getClass, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ ENUM CONSTANT DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.detail\">\n<!--   -->\n</a>\n<h3>Enum Constant Detail</h3>\n<a name=\"TypedTable\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>TypedTable</h4>\n<pre>public static final&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a> TypedTable</pre>\n<div class=\"block\">Feature header value for requests going through typed tables.</div>\n</li>\n</ul>\n<a name=\"UntypedTable\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>UntypedTable</h4>\n<pre>public static final&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a> UntypedTable</pre>\n<div class=\"block\">Feature header value for requests going through untyped (JSON) tables.</div>\n</li>\n</ul>\n<a name=\"TypedApiCall\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>TypedApiCall</h4>\n<pre>public static final&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a> TypedApiCall</pre>\n<div class=\"block\">Feature header value for API calls using typed (generic) overloads.</div>\n</li>\n</ul>\n<a name=\"JsonApiCall\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>JsonApiCall</h4>\n<pre>public static final&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a> JsonApiCall</pre>\n<div class=\"block\">Feature header value for API calls using JSON overloads.</div>\n</li>\n</ul>\n<a name=\"GenericApiCall\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>GenericApiCall</h4>\n<pre>public static final&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a> GenericApiCall</pre>\n<div class=\"block\">Feature header value for API calls using the generic (HTTP) overload.</div>\n</li>\n</ul>\n<a name=\"AdditionalQueryParameters\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>AdditionalQueryParameters</h4>\n<pre>public static final&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a> AdditionalQueryParameters</pre>\n<div class=\"block\">Feature header value for table / API requests which include additional query string parameters.</div>\n</li>\n</ul>\n<a name=\"Offline\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>Offline</h4>\n<pre>public static final&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a> Offline</pre>\n<div class=\"block\">Feature header value for offline initiated requests (push / pull).</div>\n</li>\n</ul>\n<a name=\"OpportunisticConcurrency\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>OpportunisticConcurrency</h4>\n<pre>public static final&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a> OpportunisticConcurrency</pre>\n<div class=\"block\">Feature header value for conditional updates.</div>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"values--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>values</h4>\n<pre>public static&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>[]&nbsp;values()</pre>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.  This method may be used to iterate\nover the constants as follows:\n<pre>\nfor (MobileServiceFeatures c : MobileServiceFeatures.values())\n&nbsp;   System.out.println(c);\n</pre></div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>an array containing the constants of this enum type, in the order they are declared</dd>\n</dl>\n</li>\n</ul>\n<a name=\"valueOf-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>valueOf</h4>\n<pre>public static&nbsp;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&nbsp;valueOf(java.lang.String&nbsp;name)</pre>\n<div class=\"block\">Returns the enum constant of this type with the specified name.\nThe string must match <i>exactly</i> an identifier used to declare an\nenum constant in this type.  (Extraneous whitespace characters are \nnot permitted.)</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - the name of the enum constant to be returned.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the enum constant with the specified name</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.IllegalArgumentException</code> - if this enum type has no constant with the specified name</dd>\n<dd><code>java.lang.NullPointerException</code> - if the argument is null</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getValue--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getValue</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getValue()</pre>\n<div class=\"block\">Gets the code will be sent to the server for this feature\n in the features header</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the code associated with this feature.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"featuresToString-java.util.EnumSet-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>featuresToString</h4>\n<pre>public static&nbsp;java.lang.String&nbsp;featuresToString(java.util.EnumSet&lt;<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;&nbsp;features)</pre>\n<div class=\"block\">Returns a comma-separated list of feature codes which can be sent to\n the service in the features header.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>features</code> - a set of features</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>a comma-separated list of the feature codes from the given set</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceFeatures.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceFeatures.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/MobileServiceList.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceList</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceList\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceList.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceList.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices</div>\n<h2 title=\"Class MobileServiceList\" class=\"title\">Class MobileServiceList&lt;E&gt;</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.util.AbstractCollection&lt;E&gt;</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.util.AbstractList&lt;E&gt;</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.util.ArrayList&lt;E&gt;</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.MobileServiceList&lt;E&gt;</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable, java.lang.Cloneable, java.lang.Iterable&lt;E&gt;, java.util.Collection&lt;E&gt;, java.util.List&lt;E&gt;, java.util.RandomAccess</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServiceList&lt;E&gt;</span>\nextends java.util.ArrayList&lt;E&gt;</pre>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../serialized-form.html#com.microsoft.windowsazure.mobileservices.MobileServiceList\">Serialized Form</a></dd>\n</dl>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html#MobileServiceList-java.util.Collection-int-\">MobileServiceList</a></span>(java.util.Collection&lt;? extends <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"type parameter in MobileServiceList\">E</a>&gt;&nbsp;collection,\n                 int&nbsp;totalCount)</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html#getTotalCount--\">getTotalCount</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.util.ArrayList\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.util.ArrayList</h3>\n<code>add, add, addAll, addAll, clear, clone, contains, ensureCapacity, forEach, get, indexOf, isEmpty, iterator, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, removeIf, replaceAll, retainAll, set, size, sort, spliterator, subList, toArray, toArray, trimToSize</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.util.AbstractList\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.util.AbstractList</h3>\n<code>equals, hashCode</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.util.AbstractCollection\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.util.AbstractCollection</h3>\n<code>containsAll, toString</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>getClass, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.util.List\">\n<!--   -->\n</a>\n<h3>Methods inherited from interface&nbsp;java.util.List</h3>\n<code>containsAll, equals, hashCode</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.util.Collection\">\n<!--   -->\n</a>\n<h3>Methods inherited from interface&nbsp;java.util.Collection</h3>\n<code>parallelStream, stream</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceList-java.util.Collection-int-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceList</h4>\n<pre>public&nbsp;MobileServiceList(java.util.Collection&lt;? extends <a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"type parameter in MobileServiceList\">E</a>&gt;&nbsp;collection,\n                         int&nbsp;totalCount)</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getTotalCount--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getTotalCount</h4>\n<pre>public&nbsp;int&nbsp;getTotalCount()</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceList.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceList.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>ServiceFilterResponseCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"ServiceFilterResponseCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ServiceFilterResponseCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterResponseCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices</div>\n<h2 title=\"Interface ServiceFilterResponseCallback\" class=\"title\">Interface ServiceFilterResponseCallback</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">ServiceFilterResponseCallback</span></pre>\n<div class=\"block\">Callback to invoke after processing the ServiceFilters and executing the\n request</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html#onResponse-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-java.lang.Exception-\">onResponse</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response,\n          java.lang.Exception&nbsp;exception)</code>\n<div class=\"block\">Method to execute when the response is ready to be processed</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onResponse-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-java.lang.Exception-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onResponse</h4>\n<pre>void&nbsp;onResponse(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response,\n                java.lang.Exception&nbsp;exception)</pre>\n<div class=\"block\">Method to execute when the response is ready to be processed</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>response</code> - The response to process</dd>\n<dd><code>exception</code> - An exception representing the error, in case there was one</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ServiceFilterResponseCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterResponseCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>UserAuthenticationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"UserAuthenticationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/UserAuthenticationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UserAuthenticationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices</div>\n<h2 title=\"Interface UserAuthenticationCallback\" class=\"title\">Interface UserAuthenticationCallback</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">UserAuthenticationCallback</span></pre>\n<div class=\"block\">Callback for the user authentication process</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html#onCompleted-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&nbsp;user,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call if the authentication process finishes successfully</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onCompleted-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onCompleted</h4>\n<pre>void&nbsp;onCompleted(<a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&nbsp;user,\n                 java.lang.Exception&nbsp;exception,\n                 <a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</pre>\n<div class=\"block\">Method to call if the authentication process finishes successfully</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>user</code> - The logged user</dd>\n<dd><code>exception</code> - An exception representing the error, in case there was one</dd>\n<dd><code>response</code> - Response object</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/UserAuthenticationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UserAuthenticationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>LoginManager</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"LoginManager\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/LoginManager.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"LoginManager.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.authentication</div>\n<h2 title=\"Class LoginManager\" class=\"title\">Class LoginManager</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.authentication.LoginManager</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">LoginManager</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Class for handling Login operations with Authentication Providers and Microsoft\n Azure Mobile Services</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html#LoginManager-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">LoginManager</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor for LoginManager</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html#authenticate-java.lang.String-Context-\">authenticate</a></span>(java.lang.String&nbsp;provider,\n            Context&nbsp;context)</code>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html#authenticate-java.lang.String-Context-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">authenticate</a></span>(java.lang.String&nbsp;provider,\n            Context&nbsp;context,\n            <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"LoginManager-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>LoginManager</h4>\n<pre>public&nbsp;LoginManager(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</pre>\n<div class=\"block\">Constructor for LoginManager</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>client</code> - The MobileServiceClient used to invoke the login operations</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"authenticate-java.lang.String-Context-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>authenticate</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;&nbsp;authenticate(java.lang.String&nbsp;provider,\n                                                                                          Context&nbsp;context)</pre>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>context</code> - The context used to create the authentication dialog</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n<a name=\"authenticate-java.lang.String-Context-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>authenticate</h4>\n<pre>public&nbsp;void&nbsp;authenticate(java.lang.String&nbsp;provider,\n                         Context&nbsp;context,\n                         <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>provider</code> - The provider used for the authentication process</dd>\n<dd><code>context</code> - The context used to create the authentication dialog</dd>\n<dd><code>callback</code> - Callback to invoke when the authentication process finishes</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/LoginManager.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"LoginManager.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>MobileServiceAuthenticationProvider</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceAuthenticationProvider\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":9,\"i1\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceAuthenticationProvider.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceAuthenticationProvider.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.authentication</div>\n<h2 title=\"Enum MobileServiceAuthenticationProvider\" class=\"title\">Enum MobileServiceAuthenticationProvider</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Enum&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&gt;</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable, java.lang.Comparable&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public enum <span class=\"typeNameLabel\">MobileServiceAuthenticationProvider</span>\nextends java.lang.Enum&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&gt;</pre>\n<div class=\"block\">Authentication providers to use with a Mobile Service</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== ENUM CONSTANT SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.summary\">\n<!--   -->\n</a>\n<h3>Enum Constant Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Constant Summary table, listing enum constants, and an explanation\">\n<caption><span>Enum Constants</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html#Facebook\">Facebook</a></span></code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html#Google\">Google</a></span></code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html#MicrosoftAccount\">MicrosoftAccount</a></span></code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html#Twitter\">Twitter</a></span></code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html#WindowsAzureActiveDirectory\">WindowsAzureActiveDirectory</a></span></code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Enum\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Enum</h3>\n<code>compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>getClass, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ ENUM CONSTANT DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.detail\">\n<!--   -->\n</a>\n<h3>Enum Constant Detail</h3>\n<a name=\"MicrosoftAccount\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>MicrosoftAccount</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a> MicrosoftAccount</pre>\n</li>\n</ul>\n<a name=\"Google\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>Google</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a> Google</pre>\n</li>\n</ul>\n<a name=\"Twitter\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>Twitter</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a> Twitter</pre>\n</li>\n</ul>\n<a name=\"Facebook\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>Facebook</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a> Facebook</pre>\n</li>\n</ul>\n<a name=\"WindowsAzureActiveDirectory\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>WindowsAzureActiveDirectory</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a> WindowsAzureActiveDirectory</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"values--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>values</h4>\n<pre>public static&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>[]&nbsp;values()</pre>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.  This method may be used to iterate\nover the constants as follows:\n<pre>\nfor (MobileServiceAuthenticationProvider c : MobileServiceAuthenticationProvider.values())\n&nbsp;   System.out.println(c);\n</pre></div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>an array containing the constants of this enum type, in the order they are declared</dd>\n</dl>\n</li>\n</ul>\n<a name=\"valueOf-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>valueOf</h4>\n<pre>public static&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;valueOf(java.lang.String&nbsp;name)</pre>\n<div class=\"block\">Returns the enum constant of this type with the specified name.\nThe string must match <i>exactly</i> an identifier used to declare an\nenum constant in this type.  (Extraneous whitespace characters are \nnot permitted.)</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - the name of the enum constant to be returned.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the enum constant with the specified name</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.IllegalArgumentException</code> - if this enum type has no constant with the specified name</dd>\n<dd><code>java.lang.NullPointerException</code> - if the argument is null</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceAuthenticationProvider.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceAuthenticationProvider.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>MobileServiceUser</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceUser\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceUser.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceUser.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.authentication</div>\n<h2 title=\"Class MobileServiceUser\" class=\"title\">Class MobileServiceUser</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServiceUser</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Mobile Service authenticated user</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html#MobileServiceUser-java.lang.String-\">MobileServiceUser</a></span>(java.lang.String&nbsp;userId)</code>\n<div class=\"block\">Creates a user specifying the User Id</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html#getAuthenticationToken--\">getAuthenticationToken</a></span>()</code>\n<div class=\"block\">Returns the authentication token for the user</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html#getUserId--\">getUserId</a></span>()</code>\n<div class=\"block\">Returns the current User Id</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html#setAuthenticationToken-java.lang.String-\">setAuthenticationToken</a></span>(java.lang.String&nbsp;authenticationToken)</code>\n<div class=\"block\">Sets the authentication token for the user</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html#setUserId-java.lang.String-\">setUserId</a></span>(java.lang.String&nbsp;userId)</code>\n<div class=\"block\">Sets the user's id</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceUser-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceUser</h4>\n<pre>public&nbsp;MobileServiceUser(java.lang.String&nbsp;userId)</pre>\n<div class=\"block\">Creates a user specifying the User Id</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>userId</code> - The User Id</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getUserId--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getUserId</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getUserId()</pre>\n<div class=\"block\">Returns the current User Id</div>\n</li>\n</ul>\n<a name=\"setUserId-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setUserId</h4>\n<pre>public&nbsp;void&nbsp;setUserId(java.lang.String&nbsp;userId)</pre>\n<div class=\"block\">Sets the user's id</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>userId</code> - The user's id</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getAuthenticationToken--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getAuthenticationToken</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getAuthenticationToken()</pre>\n<div class=\"block\">Returns the authentication token for the user</div>\n</li>\n</ul>\n<a name=\"setAuthenticationToken-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>setAuthenticationToken</h4>\n<pre>public&nbsp;void&nbsp;setAuthenticationToken(java.lang.String&nbsp;authenticationToken)</pre>\n<div class=\"block\">Sets the authentication token for the user</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>authenticationToken</code> - Authentication token</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceUser.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceUser.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/authentication/class-use/LoginManager.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.authentication.LoginManager</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.authentication.LoginManager\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/class-use/LoginManager.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"LoginManager.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.authentication.LoginManager\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.authentication.LoginManager</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.authentication.LoginManager</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/class-use/LoginManager.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"LoginManager.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/authentication/class-use/MobileServiceAuthenticationProvider.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/class-use/MobileServiceAuthenticationProvider.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceAuthenticationProvider.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.authentication\">com.microsoft.windowsazure.mobileservices.authentication</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-\">login</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider)</code>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-\">login</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     com.google.gson.JsonObject&nbsp;oAuthToken)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     com.google.gson.JsonObject&nbsp;oAuthToken,\n     <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-\"><code>MobileServiceClient.login(MobileServiceAuthenticationProvider\n             provider, JsonObject oAuthToken)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-\">login</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     java.lang.String&nbsp;oAuthToken)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     java.lang.String&nbsp;oAuthToken,\n     <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-\"><code>MobileServiceClient.login(MobileServiceAuthenticationProvider\n             provider, String oAuthToken)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-\"><code>MobileServiceClient.login(MobileServiceAuthenticationProvider\n             provider)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.authentication\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceAuthenticationProvider.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>[]</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceAuthenticationProvider.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/class-use/MobileServiceAuthenticationProvider.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceAuthenticationProvider.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/authentication/class-use/MobileServiceUser.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/class-use/MobileServiceUser.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceUser.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.authentication\">com.microsoft.windowsazure.mobileservices.authentication</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getCurrentUser--\">getCurrentUser</a></span>()</code>\n<div class=\"block\">Returns the current authenticated user</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return types with arguments of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-\">login</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider)</code>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-\">login</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     com.google.gson.JsonObject&nbsp;oAuthToken)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-\">login</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     java.lang.String&nbsp;oAuthToken)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-\">login</a></span>(java.lang.String&nbsp;provider)</code>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.google.gson.JsonObject-\">login</a></span>(java.lang.String&nbsp;provider,\n     com.google.gson.JsonObject&nbsp;oAuthToken)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-java.lang.String-\">login</a></span>(java.lang.String&nbsp;provider,\n     java.lang.String&nbsp;oAuthToken)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      Account&nbsp;account)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-java.lang.String-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      Account&nbsp;account,\n                      java.lang.String&nbsp;scopes)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-java.lang.String-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      java.lang.String&nbsp;scopes)</code>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">UserAuthenticationCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html#onCompleted-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&nbsp;user,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call if the authentication process finishes successfully</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#setCurrentUser-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser-\">setCurrentUser</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&nbsp;user)</code>\n<div class=\"block\">Sets a user to authenticate the Mobile Service operations</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.authentication\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a> that return types with arguments of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">LoginManager.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html#authenticate-java.lang.String-Context-\">authenticate</a></span>(java.lang.String&nbsp;provider,\n            Context&nbsp;context)</code>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/class-use/MobileServiceUser.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceUser.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/authentication/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.authentication</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.authentication</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\" target=\"classFrame\">LoginManager</a></li>\n<li><a href=\"MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\" target=\"classFrame\">MobileServiceUser</a></li>\n</ul>\n<h2 title=\"Enums\">Enums</h2>\n<ul title=\"Enums\">\n<li><a href=\"MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\" target=\"classFrame\">MobileServiceAuthenticationProvider</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/authentication/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.authentication</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.authentication\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.authentication</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">LoginManager</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Class for handling Login operations with Authentication Providers and Microsoft\n Azure Mobile Services</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Mobile Service authenticated user</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Summary table, listing enums, and an explanation\">\n<caption><span>Enum Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Enum</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Authentication providers to use with a Mobile Service</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/authentication/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.authentication Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.authentication Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.authentication</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">LoginManager</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">MobileServiceUser</span></a></li>\n</ul>\n</li>\n</ul>\n<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">MobileServiceAuthenticationProvider</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/authentication/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.authentication</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.authentication\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.authentication\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.authentication</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.authentication\">com.microsoft.windowsazure.mobileservices.authentication</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a> used by <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/class-use/MobileServiceAuthenticationProvider.html#com.microsoft.windowsazure.mobileservices\">MobileServiceAuthenticationProvider</a>\n<div class=\"block\">Authentication providers to use with a Mobile Service</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/class-use/MobileServiceUser.html#com.microsoft.windowsazure.mobileservices\">MobileServiceUser</a>\n<div class=\"block\">Mobile Service authenticated user</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.authentication\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a> used by <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/class-use/MobileServiceAuthenticationProvider.html#com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>\n<div class=\"block\">Authentication providers to use with a Mobile Service</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/class-use/MobileServiceUser.html#com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>\n<div class=\"block\">Mobile Service authenticated user</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/authentication/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/class-use/ApiJsonOperationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/ApiJsonOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ApiJsonOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-\"><code>MobileServiceClient.invokeApi(String apiName)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         com.google.gson.JsonElement&nbsp;body,\n         <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-\"><code>MobileServiceClient.invokeApi(String apiName, JsonElement body)</code></a>\n             instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-java.lang.String-java.util.List-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         com.google.gson.JsonElement&nbsp;body,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n         <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, JsonElement body, String\n             httpMethod, List<Pair<String, String>> parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.String-java.util.List-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n         <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, String httpMethod,\n             List<Pair<String, String>> parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/ApiJsonOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ApiJsonOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/class-use/ApiOperationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.ApiOperationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.ApiOperationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/ApiOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ApiOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.ApiOperationCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.ApiOperationCallback</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.Class&lt;E&gt;&nbsp;clazz,\n         <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, Class<E> clazz)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Object-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.Object&nbsp;body,\n         java.lang.Class&lt;E&gt;&nbsp;clazz,\n         <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, Object body, Class<E>\n             clazz)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Object-java.lang.String-java.util.List-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.Object&nbsp;body,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n         java.lang.Class&lt;E&gt;&nbsp;clazz,\n         <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, Object body, String\n             httpMethod, List<Pair<String, String>> parameters, final\n             Class<E> clazz)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.String-java.util.List-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n         java.lang.Class&lt;E&gt;&nbsp;clazz,\n         <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, String httpMethod,\n             List<Pair<String, String>> parameters, Class<E> clazz)</code>\n             instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/ApiOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ApiOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/class-use/BuildConfig.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.BuildConfig</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.BuildConfig\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/BuildConfig.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"BuildConfig.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.BuildConfig\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.BuildConfig</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.BuildConfig</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/BuildConfig.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"BuildConfig.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/class-use/MobileServiceApplication.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceApplication</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceApplication\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/MobileServiceApplication.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceApplication.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceApplication\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.MobileServiceApplication</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.MobileServiceApplication</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/MobileServiceApplication.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceApplication.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/class-use/MobileServiceClient.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceClient</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceClient\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/MobileServiceClient.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceClient.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceClient\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.MobileServiceClient</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.authentication\">com.microsoft.windowsazure.mobileservices.authentication</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.http\">com.microsoft.windowsazure.mobileservices.http</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync\">com.microsoft.windowsazure.mobileservices.table.sync</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.operations\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#withFilter-com.microsoft.windowsazure.mobileservices.http.ServiceFilter-\">withFilter</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a>&nbsp;serviceFilter)</code>\n<div class=\"block\">Adds a new filter to the MobileServiceClient</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#MobileServiceClient-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceClient</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor for the MobileServiceClient</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.authentication\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html#LoginManager-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">LoginManager</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor for LoginManager</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.http\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#MobileServiceConnection-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceConnection</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor for the MobileServiceConnection</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#MobileServiceHttpClient-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceHttpClient</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.notifications\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#MobileServicePush-com.microsoft.windowsazure.mobileservices.MobileServiceClient-Context-\">MobileServicePush</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client,\n                 Context&nbsp;context)</code>\n<div class=\"block\">Creates a new NotificationHub client</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#MobileServiceJsonTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceJsonTable</a></span>(java.lang.String&nbsp;name,\n                      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor for MobileServiceJsonTable</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#MobileServiceTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-java.lang.Class-\">MobileServiceTable</a></span>(java.lang.String&nbsp;name,\n                  <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client,\n                  java.lang.Class&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;clazz)</code>\n<div class=\"block\">Constructor for MobileServiceTable</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#MobileServiceJsonSyncTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceJsonSyncTable</a></span>(java.lang.String&nbsp;name,\n                          <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor for MobileServiceJsonSyncTable</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#MobileServiceSyncContext-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceSyncContext</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor for MobileServiceSyncContext</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#MobileServiceSyncTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-java.lang.Class-\">MobileServiceSyncTable</a></span>(java.lang.String&nbsp;name,\n                      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client,\n                      java.lang.Class&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&gt;&nbsp;clazz)</code>\n<div class=\"block\">Constructor for MobileServiceTable</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.MobileServiceClient-com.google.gson.JsonObject-\">RemoteTableOperationProcessor</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client,\n                             com.google.gson.JsonObject&nbsp;item)</code>\n<div class=\"block\">Constructor for RemoteTableOperationProcessor</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/MobileServiceClient.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceClient.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/class-use/MobileServiceException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/MobileServiceException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceException\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.MobileServiceException</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing subclasses, and an explanation\">\n<caption><span>Subclasses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedException</a></span></code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedExceptionBase</a></span></code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> that throw <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute--\">execute</a></span>()</code>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute--\">execute</a></span>()</code>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">execute</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute--\"><code>MobileServiceJsonTable.execute()</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">execute</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute--\"><code>MobileServiceTable.execute()</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html#MobileServicePreconditionFailedException-com.microsoft.windowsazure.mobileservices.MobileServiceException-java.lang.Object-\">MobileServicePreconditionFailedException</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a>&nbsp;msException,\n                                        java.lang.Object&nbsp;item)</code>\n<div class=\"block\">Initializes a new instance of the\n MobileServicePreconditionFailedException class.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html#MobileServicePreconditionFailedExceptionBase-com.microsoft.windowsazure.mobileservices.MobileServiceException-com.google.gson.JsonObject-\">MobileServicePreconditionFailedExceptionBase</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a>&nbsp;msException,\n                                            com.google.gson.JsonObject&nbsp;value)</code>\n<div class=\"block\">Initializes a new instance of the\n MobileServicePreconditionFailedExceptionBase class.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> that throw <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QuerySQLWriter.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getWhereClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getWhereClause</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Returns the SQL string representation of the query's where clause</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/MobileServiceException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/class-use/MobileServiceFeatures.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceFeatures</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceFeatures\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/MobileServiceFeatures.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceFeatures.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceFeatures\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.MobileServiceFeatures</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.http\">com.microsoft.windowsazure.mobileservices.http</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceFeatures.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>[]</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceFeatures.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Method parameters in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> with type arguments of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceFeatures.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#featuresToString-java.util.EnumSet-\">featuresToString</a></span>(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;&nbsp;features)</code>\n<div class=\"block\">Returns a comma-separated list of feature codes which can be sent to\n the service in the features header.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.http\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Method parameters in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> with type arguments of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceHttpClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#request-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-java.util.EnumSet-\">request</a></span>(java.lang.String&nbsp;path,\n       byte[]&nbsp;content,\n       java.lang.String&nbsp;httpMethod,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n       java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;&nbsp;features)</code>\n<div class=\"block\">Makes a request over HTTP</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceHttpClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#request-java.lang.String-java.lang.String-java.lang.String-java.util.List-java.util.List-java.util.EnumSet-\">request</a></span>(java.lang.String&nbsp;path,\n       java.lang.String&nbsp;content,\n       java.lang.String&nbsp;httpMethod,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n       java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;&nbsp;features)</code>\n<div class=\"block\">Makes a request over HTTP</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/MobileServiceFeatures.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceFeatures.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/class-use/MobileServiceList.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceList</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceList\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/MobileServiceList.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceList.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.MobileServiceList\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.MobileServiceList</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync\">com.microsoft.windowsazure.mobileservices.table.sync</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> that return types with arguments of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute--\">execute</a></span>()</code>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">execute</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> that return types with arguments of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#execute--\">execute</a></span>()</code>\n<div class=\"block\">Executes the query</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a> that return types with arguments of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&gt;&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Retrieve results from the local table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/MobileServiceList.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceList.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/class-use/ServiceFilterResponseCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/ServiceFilterResponseCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterResponseCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.http\">com.microsoft.windowsazure.mobileservices.http</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         byte[]&nbsp;content,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n         <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a>&nbsp;callback)</code>\n<div class=\"block\">Invokes a custom API</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.http\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceConnection.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#start-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback-\">start</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n     <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a>&nbsp;responseCallback)</code>\n<div class=\"block\">Execute a request-response operation with a Mobile Service</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/ServiceFilterResponseCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterResponseCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/class-use/UserAuthenticationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/UserAuthenticationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UserAuthenticationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.authentication\">com.microsoft.windowsazure.mobileservices.authentication</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     com.google.gson.JsonObject&nbsp;oAuthToken,\n     <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-\"><code>MobileServiceClient.login(MobileServiceAuthenticationProvider\n             provider, JsonObject oAuthToken)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     java.lang.String&nbsp;oAuthToken,\n     <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-\"><code>MobileServiceClient.login(MobileServiceAuthenticationProvider\n             provider, String oAuthToken)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a>&nbsp;provider,\n     <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-\"><code>MobileServiceClient.login(MobileServiceAuthenticationProvider\n             provider)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(java.lang.String&nbsp;provider,\n     com.google.gson.JsonObject&nbsp;oAuthToken,\n     <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.google.gson.JsonObject-\"><code>MobileServiceClient.login(String provider, JsonObject oAuthToken)</code></a>\n             instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(java.lang.String&nbsp;provider,\n     java.lang.String&nbsp;oAuthToken,\n     <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-java.lang.String-\"><code>MobileServiceClient.login(String provider, String oAuthToken)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login</a></span>(java.lang.String&nbsp;provider,\n     <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-\"><code>MobileServiceClient.login(String provider)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      Account&nbsp;account,\n                      java.lang.String&nbsp;scopes,\n                      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-java.lang.String-\"><code>MobileServiceClient.loginWithGoogleAccount(Activity activity, Account\n             account, String scopes)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      Account&nbsp;account,\n                      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-\"><code>MobileServiceClient.loginWithGoogleAccount(Activity activity, Account\n             account)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      java.lang.String&nbsp;scopes,\n                      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-java.lang.String-\"><code>MobileServiceClient.loginWithGoogleAccount(Activity activity, String\n             scopes)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">loginWithGoogleAccount</a></span>(Activity&nbsp;activity,\n                      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-\"><code>MobileServiceClient.loginWithGoogleAccount(Activity activity)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.authentication\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a> in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a> with parameters of type <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">LoginManager.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html#authenticate-java.lang.String-Context-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">authenticate</a></span>(java.lang.String&nbsp;provider,\n            Context&nbsp;context,\n            <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>&nbsp;callback)</code>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/class-use/UserAuthenticationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UserAuthenticationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>AndroidHttpClientFactory</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"AndroidHttpClientFactory\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/AndroidHttpClientFactory.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"AndroidHttpClientFactory.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.http</div>\n<h2 title=\"Interface AndroidHttpClientFactory\" class=\"title\">Interface AndroidHttpClientFactory</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Known Implementing Classes:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactoryImpl</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">AndroidHttpClientFactory</span></pre>\n<div class=\"block\">Factory for AndroidHttpClient instances</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>AndroidHttpClient</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html#createAndroidHttpClient--\">createAndroidHttpClient</a></span>()</code>\n<div class=\"block\">Creates a new AndroidHttpClient</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"createAndroidHttpClient--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>createAndroidHttpClient</h4>\n<pre>AndroidHttpClient&nbsp;createAndroidHttpClient()</pre>\n<div class=\"block\">Creates a new AndroidHttpClient</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A new AndroidHttpClient</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/AndroidHttpClientFactory.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"AndroidHttpClientFactory.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>AndroidHttpClientFactoryImpl</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"AndroidHttpClientFactoryImpl\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/AndroidHttpClientFactoryImpl.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"AndroidHttpClientFactoryImpl.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.http</div>\n<h2 title=\"Class AndroidHttpClientFactoryImpl\" class=\"title\">Class AndroidHttpClientFactoryImpl</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactoryImpl</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">AndroidHttpClientFactoryImpl</span>\nextends java.lang.Object\nimplements <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a></pre>\n<div class=\"block\">Default implementation for AndroidHttpClientFactory</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html#AndroidHttpClientFactoryImpl--\">AndroidHttpClientFactoryImpl</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>AndroidHttpClient</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html#createAndroidHttpClient--\">createAndroidHttpClient</a></span>()</code>\n<div class=\"block\">Creates a new AndroidHttpClient</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"AndroidHttpClientFactoryImpl--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>AndroidHttpClientFactoryImpl</h4>\n<pre>public&nbsp;AndroidHttpClientFactoryImpl()</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"createAndroidHttpClient--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>createAndroidHttpClient</h4>\n<pre>public&nbsp;AndroidHttpClient&nbsp;createAndroidHttpClient()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html#createAndroidHttpClient--\">AndroidHttpClientFactory</a></code></span></div>\n<div class=\"block\">Creates a new AndroidHttpClient</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html#createAndroidHttpClient--\">createAndroidHttpClient</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A new AndroidHttpClient</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/AndroidHttpClientFactoryImpl.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"AndroidHttpClientFactoryImpl.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/HttpPatch.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>HttpPatch</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"HttpPatch\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/HttpPatch.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"HttpPatch.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.http</div>\n<h2 title=\"Class HttpPatch\" class=\"title\">Class HttpPatch</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>HttpEntityEnclosingRequestBase</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.http.HttpPatch</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">HttpPatch</span>\nextends HttpEntityEnclosingRequestBase</pre>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== FIELD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.summary\">\n<!--   -->\n</a>\n<h3>Field Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Field Summary table, listing fields, and an explanation\">\n<caption><span>Fields</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Field and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html#METHOD_NAME\">METHOD_NAME</a></span></code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html#HttpPatch-java.lang.String-\">HttpPatch</a></span>(java.lang.String&nbsp;url)</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html#getMethod--\">getMethod</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ FIELD DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.detail\">\n<!--   -->\n</a>\n<h3>Field Detail</h3>\n<a name=\"METHOD_NAME\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>METHOD_NAME</h4>\n<pre>public static final&nbsp;java.lang.String METHOD_NAME</pre>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../../constant-values.html#com.microsoft.windowsazure.mobileservices.http.HttpPatch.METHOD_NAME\">Constant Field Values</a></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"HttpPatch-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>HttpPatch</h4>\n<pre>public&nbsp;HttpPatch(java.lang.String&nbsp;url)</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getMethod--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getMethod</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getMethod()</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/HttpPatch.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"HttpPatch.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceConnection</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceConnection\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceConnection.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceConnection.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.http</div>\n<h2 title=\"Class MobileServiceConnection\" class=\"title\">Class MobileServiceConnection</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServiceConnection</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Class for handling communication with Microsoft Azure Mobile Services REST APIs</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== FIELD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.summary\">\n<!--   -->\n</a>\n<h3>Field Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Field Summary table, listing fields, and an explanation\">\n<caption><span>Fields</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Field and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#JSON_CONTENTTYPE\">JSON_CONTENTTYPE</a></span></code>\n<div class=\"block\">Header value to represent JSON content-type</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#MobileServiceConnection-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceConnection</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor for the MobileServiceConnection</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#start-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-\">start</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request)</code>\n<div class=\"block\">Execute a request-response operation with a Mobile Service</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#start-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback-\">start</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n     <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a>&nbsp;responseCallback)</code>\n<div class=\"block\">Execute a request-response operation with a Mobile Service</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ FIELD DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.detail\">\n<!--   -->\n</a>\n<h3>Field Detail</h3>\n<a name=\"JSON_CONTENTTYPE\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>JSON_CONTENTTYPE</h4>\n<pre>public static final&nbsp;java.lang.String JSON_CONTENTTYPE</pre>\n<div class=\"block\">Header value to represent JSON content-type</div>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../../constant-values.html#com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection.JSON_CONTENTTYPE\">Constant Field Values</a></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceConnection-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceConnection</h4>\n<pre>public&nbsp;MobileServiceConnection(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</pre>\n<div class=\"block\">Constructor for the MobileServiceConnection</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>client</code> - The client used for communication with the Mobile Service</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"start-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>start</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;&nbsp;start(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request)</pre>\n<div class=\"block\">Execute a request-response operation with a Mobile Service</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>request</code> - The request to execute</dd>\n<dd><code>responseCallback</code> - Callback to invoke after the request is executed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"start-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>start</h4>\n<pre>public&nbsp;void&nbsp;start(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n                  <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a>&nbsp;responseCallback)</pre>\n<div class=\"block\">Execute a request-response operation with a Mobile Service</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>request</code> - The request to execute</dd>\n<dd><code>responseCallback</code> - Callback to invoke after the request is executed</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceConnection.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceConnection.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceHttpClient</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceHttpClient\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceHttpClient.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceHttpClient.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.http</div>\n<h2 title=\"Class MobileServiceHttpClient\" class=\"title\">Class MobileServiceHttpClient</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.http.MobileServiceHttpClient</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServiceHttpClient</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Utility class which centralizes the HTTP requests sent by the\n mobile services client.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== FIELD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.summary\">\n<!--   -->\n</a>\n<h3>Field Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Field Summary table, listing fields, and an explanation\">\n<caption><span>Fields</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Field and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#X_ZUMO_FEATURES\">X_ZUMO_FEATURES</a></span></code>\n<div class=\"block\">Request header to indicate the features in this SDK used by the request.</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#MobileServiceHttpClient-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceHttpClient</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#request-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-\">request</a></span>(java.lang.String&nbsp;path,\n       byte[]&nbsp;content,\n       java.lang.String&nbsp;httpMethod,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Makes a request over HTTP</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#request-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-java.util.EnumSet-\">request</a></span>(java.lang.String&nbsp;path,\n       byte[]&nbsp;content,\n       java.lang.String&nbsp;httpMethod,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n       java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;&nbsp;features)</code>\n<div class=\"block\">Makes a request over HTTP</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#request-java.lang.String-java.lang.String-java.lang.String-java.util.List-java.util.List-java.util.EnumSet-\">request</a></span>(java.lang.String&nbsp;path,\n       java.lang.String&nbsp;content,\n       java.lang.String&nbsp;httpMethod,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n       java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;&nbsp;features)</code>\n<div class=\"block\">Makes a request over HTTP</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ FIELD DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.detail\">\n<!--   -->\n</a>\n<h3>Field Detail</h3>\n<a name=\"X_ZUMO_FEATURES\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>X_ZUMO_FEATURES</h4>\n<pre>public static final&nbsp;java.lang.String X_ZUMO_FEATURES</pre>\n<div class=\"block\">Request header to indicate the features in this SDK used by the request.</div>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../../constant-values.html#com.microsoft.windowsazure.mobileservices.http.MobileServiceHttpClient.X_ZUMO_FEATURES\">Constant Field Values</a></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceHttpClient-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceHttpClient</h4>\n<pre>public&nbsp;MobileServiceHttpClient(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</pre>\n<div class=\"block\">Constructor</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>client</code> - The client associated with this HTTP caller.</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"request-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>request</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;&nbsp;request(java.lang.String&nbsp;path,\n                                                                                         byte[]&nbsp;content,\n                                                                                         java.lang.String&nbsp;httpMethod,\n                                                                                         java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n                                                                                         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Makes a request over HTTP</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>path</code> - The path of the request URI</dd>\n<dd><code>content</code> - The byte array to send as the request body</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>requestHeaders</code> - The extra headers to send in the request</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n</dl>\n</li>\n</ul>\n<a name=\"request-java.lang.String-java.lang.String-java.lang.String-java.util.List-java.util.List-java.util.EnumSet-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>request</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;&nbsp;request(java.lang.String&nbsp;path,\n                                                                                         java.lang.String&nbsp;content,\n                                                                                         java.lang.String&nbsp;httpMethod,\n                                                                                         java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n                                                                                         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                                                                                         java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;&nbsp;features)</pre>\n<div class=\"block\">Makes a request over HTTP</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>path</code> - The path of the request URI</dd>\n<dd><code>content</code> - The string to send as the request body</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>requestHeaders</code> - The extra headers to send in the request</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n<dd><code>features</code> - The features used in the request</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.io.UnsupportedEncodingException</code> - If the content cannot be converted into a byte array.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"request-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-java.util.EnumSet-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>request</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;&nbsp;request(java.lang.String&nbsp;path,\n                                                                                         byte[]&nbsp;content,\n                                                                                         java.lang.String&nbsp;httpMethod,\n                                                                                         java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n                                                                                         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                                                                                         java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;&nbsp;features)</pre>\n<div class=\"block\">Makes a request over HTTP</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>path</code> - The path of the request URI</dd>\n<dd><code>content</code> - The byte array to send as the request body</dd>\n<dd><code>httpMethod</code> - The HTTP Method used to invoke the API</dd>\n<dd><code>requestHeaders</code> - The extra headers to send in the request</dd>\n<dd><code>parameters</code> - The query string parameters sent in the request</dd>\n<dd><code>features</code> - The features used in the request</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceHttpClient.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceHttpClient.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>NextServiceFilterCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"NextServiceFilterCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/NextServiceFilterCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NextServiceFilterCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.http</div>\n<h2 title=\"Interface NextServiceFilterCallback\" class=\"title\">Interface NextServiceFilterCallback</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">NextServiceFilterCallback</span></pre>\n<div class=\"block\">Callback used to chain service filters</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html#onNext-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-\">onNext</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request)</code>\n<div class=\"block\">Method called to execute the next ServiceFilter in the pipeline</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onNext-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onNext</h4>\n<pre>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;&nbsp;onNext(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request)</pre>\n<div class=\"block\">Method called to execute the next ServiceFilter in the pipeline</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>request</code> - The ServiceFilterRequest to process</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture of the ServiceFilterResponse</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/NextServiceFilterCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NextServiceFilterCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>RequestAsyncTask</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"RequestAsyncTask\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/RequestAsyncTask.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RequestAsyncTask.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.http</div>\n<h2 title=\"Class RequestAsyncTask\" class=\"title\">Class RequestAsyncTask</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>&lt;any&gt;</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public abstract class <span class=\"typeNameLabel\">RequestAsyncTask</span>\nextends &lt;any&gt;</pre>\n<div class=\"block\">Default implementation for performing requests using AsyncTask</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html#RequestAsyncTask-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection-\">RequestAsyncTask</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n                <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a>&nbsp;connection)</code>\n<div class=\"block\">Constructor that specifies request and connection</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html#executeTask--\">executeTask</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"RequestAsyncTask-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>RequestAsyncTask</h4>\n<pre>public&nbsp;RequestAsyncTask(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n                        <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a>&nbsp;connection)</pre>\n<div class=\"block\">Constructor that specifies request and connection</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>request</code> - Request to use</dd>\n<dd><code>connection</code> - Connection to use</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"executeTask--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>executeTask</h4>\n<pre>public&nbsp;void&nbsp;executeTask()</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/RequestAsyncTask.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RequestAsyncTask.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>ServiceFilter</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"ServiceFilter\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ServiceFilter.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.http</div>\n<h2 title=\"Interface ServiceFilter\" class=\"title\">Interface ServiceFilter</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">ServiceFilter</span></pre>\n<div class=\"block\">The service filter can be used to manipulate requests and responses in the\n HTTP pipeline used by the MobileServiceClient. ServiceFilters can be\n associated with a MobileServiceClient via the WithFilter method.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html#handleRequest-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback-\">handleRequest</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n             <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">NextServiceFilterCallback</a>&nbsp;nextServiceFilterCallback)</code>\n<div class=\"block\">Method to handle the requests</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"handleRequest-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>handleRequest</h4>\n<pre>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;&nbsp;handleRequest(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n                                                                                        <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">NextServiceFilterCallback</a>&nbsp;nextServiceFilterCallback)</pre>\n<div class=\"block\">Method to handle the requests</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>request</code> - Request to execute</dd>\n<dd><code>nextServiceFilterCallback</code> - The next filter to execute</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture of the ServiceFilterResponse</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ServiceFilter.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>ServiceFilterRequest</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"ServiceFilterRequest\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6,\"i1\":6,\"i2\":6,\"i3\":6,\"i4\":6,\"i5\":6,\"i6\":6,\"i7\":6,\"i8\":6,\"i9\":6,\"i10\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ServiceFilterRequest.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterRequest.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.http</div>\n<h2 title=\"Interface ServiceFilterRequest\" class=\"title\">Interface ServiceFilterRequest</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Known Implementing Classes:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">ServiceFilterRequest</span></pre>\n<div class=\"block\">Represents an HTTP request that can be manipulated by ServiceFilters</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#addHeader-java.lang.String-java.lang.String-\">addHeader</a></span>(java.lang.String&nbsp;name,\n         java.lang.String&nbsp;val)</code>\n<div class=\"block\">Adds a new Header to the request</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#execute--\">execute</a></span>()</code>\n<div class=\"block\">Executes the request</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getContent--\">getContent</a></span>()</code>\n<div class=\"block\">Gets the request's content</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>Header[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getHeaders--\">getHeaders</a></span>()</code>\n<div class=\"block\">Returns request's Headers</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getMethod--\">getMethod</a></span>()</code>\n<div class=\"block\">Gets the request's method</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>byte[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getRawContent--\">getRawContent</a></span>()</code>\n<div class=\"block\">Gets the request's content</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getUrl--\">getUrl</a></span>()</code>\n<div class=\"block\">Gets request's URL</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#removeHeader-java.lang.String-\">removeHeader</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Remove Header from the request</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#setContent-byte:A-\">setContent</a></span>(byte[]&nbsp;content)</code>\n<div class=\"block\">Sets request content</div>\n</td>\n</tr>\n<tr id=\"i9\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#setContent-java.lang.String-\">setContent</a></span>(java.lang.String&nbsp;content)</code>\n<div class=\"block\">Sets request content</div>\n</td>\n</tr>\n<tr id=\"i10\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#setUrl-java.lang.String-\">setUrl</a></span>(java.lang.String&nbsp;url)</code>\n<div class=\"block\">Sets the request's URL</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getHeaders--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getHeaders</h4>\n<pre>Header[]&nbsp;getHeaders()</pre>\n<div class=\"block\">Returns request's Headers</div>\n</li>\n</ul>\n<a name=\"addHeader-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>addHeader</h4>\n<pre>void&nbsp;addHeader(java.lang.String&nbsp;name,\n               java.lang.String&nbsp;val)</pre>\n<div class=\"block\">Adds a new Header to the request</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - Header Name</dd>\n<dd><code>val</code> - Header Value</dd>\n</dl>\n</li>\n</ul>\n<a name=\"removeHeader-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>removeHeader</h4>\n<pre>void&nbsp;removeHeader(java.lang.String&nbsp;name)</pre>\n<div class=\"block\">Remove Header from the request</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - Header Name</dd>\n</dl>\n</li>\n</ul>\n<a name=\"setContent-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setContent</h4>\n<pre>void&nbsp;setContent(java.lang.String&nbsp;content)\n         throws java.lang.Exception</pre>\n<div class=\"block\">Sets request content</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>content</code> - string that will be used in the setEntity method</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Exception</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"setContent-byte:A-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setContent</h4>\n<pre>void&nbsp;setContent(byte[]&nbsp;content)\n         throws java.lang.Exception</pre>\n<div class=\"block\">Sets request content</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>content</code> - byte array that will be used in the setEntity method</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Exception</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getContent--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getContent</h4>\n<pre>java.lang.String&nbsp;getContent()</pre>\n<div class=\"block\">Gets the request's content</div>\n</li>\n</ul>\n<a name=\"getRawContent--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getRawContent</h4>\n<pre>byte[]&nbsp;getRawContent()</pre>\n<div class=\"block\">Gets the request's content</div>\n</li>\n</ul>\n<a name=\"getUrl--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getUrl</h4>\n<pre>java.lang.String&nbsp;getUrl()</pre>\n<div class=\"block\">Gets request's URL</div>\n</li>\n</ul>\n<a name=\"setUrl-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setUrl</h4>\n<pre>void&nbsp;setUrl(java.lang.String&nbsp;url)\n     throws java.net.URISyntaxException</pre>\n<div class=\"block\">Sets the request's URL</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>url</code> - </dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.net.URISyntaxException</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getMethod--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getMethod</h4>\n<pre>java.lang.String&nbsp;getMethod()</pre>\n<div class=\"block\">Gets the request's method</div>\n</li>\n</ul>\n<a name=\"execute--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;execute()\n                       throws java.lang.Exception</pre>\n<div class=\"block\">Executes the request</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ServiceFilterResponse with the request's response</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Exception</code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ServiceFilterRequest.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterRequest.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>ServiceFilterRequestImpl</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"ServiceFilterRequestImpl\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10,\"i6\":10,\"i7\":10,\"i8\":10,\"i9\":10,\"i10\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ServiceFilterRequestImpl.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterRequestImpl.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.http</div>\n<h2 title=\"Class ServiceFilterRequestImpl\" class=\"title\">Class ServiceFilterRequestImpl</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequestImpl</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">ServiceFilterRequestImpl</span>\nextends java.lang.Object\nimplements <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></pre>\n<div class=\"block\">ServiceFilterRequest implementation</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#ServiceFilterRequestImpl-HttpRequestBase-com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory-\">ServiceFilterRequestImpl</a></span>(HttpRequestBase&nbsp;request,\n                        <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a>&nbsp;factory)</code>\n<div class=\"block\">Constructor</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#addHeader-java.lang.String-java.lang.String-\">addHeader</a></span>(java.lang.String&nbsp;name,\n         java.lang.String&nbsp;val)</code>\n<div class=\"block\">Adds a new Header to the request</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#execute--\">execute</a></span>()</code>\n<div class=\"block\">Executes the request</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#getContent--\">getContent</a></span>()</code>\n<div class=\"block\">Gets the request's content</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>Header[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#getHeaders--\">getHeaders</a></span>()</code>\n<div class=\"block\">Returns request's Headers</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#getMethod--\">getMethod</a></span>()</code>\n<div class=\"block\">Gets the request's method</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>byte[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#getRawContent--\">getRawContent</a></span>()</code>\n<div class=\"block\">Gets the request's content</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#getUrl--\">getUrl</a></span>()</code>\n<div class=\"block\">Gets request's URL</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#removeHeader-java.lang.String-\">removeHeader</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Remove Header from the request</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#setContent-byte:A-\">setContent</a></span>(byte[]&nbsp;content)</code>\n<div class=\"block\">Sets request content</div>\n</td>\n</tr>\n<tr id=\"i9\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#setContent-java.lang.String-\">setContent</a></span>(java.lang.String&nbsp;content)</code>\n<div class=\"block\">Sets request content</div>\n</td>\n</tr>\n<tr id=\"i10\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#setUrl-java.lang.String-\">setUrl</a></span>(java.lang.String&nbsp;url)</code>\n<div class=\"block\">Sets the request's URL</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"ServiceFilterRequestImpl-HttpRequestBase-com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>ServiceFilterRequestImpl</h4>\n<pre>public&nbsp;ServiceFilterRequestImpl(HttpRequestBase&nbsp;request,\n                                <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a>&nbsp;factory)</pre>\n<div class=\"block\">Constructor</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>request</code> - The request to use</dd>\n<dd><code>factory</code> - The AndroidHttpClientFactory instance used to create\n            AndroidHttpClient objects</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"execute--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;execute()\n                              throws java.lang.Exception</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#execute--\">ServiceFilterRequest</a></code></span></div>\n<div class=\"block\">Executes the request</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#execute--\">execute</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ServiceFilterResponse with the request's response</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Exception</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getHeaders--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getHeaders</h4>\n<pre>public&nbsp;Header[]&nbsp;getHeaders()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getHeaders--\">ServiceFilterRequest</a></code></span></div>\n<div class=\"block\">Returns request's Headers</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getHeaders--\">getHeaders</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"addHeader-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>addHeader</h4>\n<pre>public&nbsp;void&nbsp;addHeader(java.lang.String&nbsp;name,\n                      java.lang.String&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#addHeader-java.lang.String-java.lang.String-\">ServiceFilterRequest</a></code></span></div>\n<div class=\"block\">Adds a new Header to the request</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#addHeader-java.lang.String-java.lang.String-\">addHeader</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - Header Name</dd>\n<dd><code>val</code> - Header Value</dd>\n</dl>\n</li>\n</ul>\n<a name=\"removeHeader-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>removeHeader</h4>\n<pre>public&nbsp;void&nbsp;removeHeader(java.lang.String&nbsp;name)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#removeHeader-java.lang.String-\">ServiceFilterRequest</a></code></span></div>\n<div class=\"block\">Remove Header from the request</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#removeHeader-java.lang.String-\">removeHeader</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - Header Name</dd>\n</dl>\n</li>\n</ul>\n<a name=\"setContent-byte:A-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setContent</h4>\n<pre>public&nbsp;void&nbsp;setContent(byte[]&nbsp;content)\n                throws java.lang.Exception</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#setContent-byte:A-\">ServiceFilterRequest</a></code></span></div>\n<div class=\"block\">Sets request content</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#setContent-byte:A-\">setContent</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>content</code> - byte array that will be used in the setEntity method</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Exception</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"setContent-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setContent</h4>\n<pre>public&nbsp;void&nbsp;setContent(java.lang.String&nbsp;content)\n                throws java.io.UnsupportedEncodingException</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#setContent-java.lang.String-\">ServiceFilterRequest</a></code></span></div>\n<div class=\"block\">Sets request content</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#setContent-java.lang.String-\">setContent</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>content</code> - string that will be used in the setEntity method</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.io.UnsupportedEncodingException</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getContent--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getContent</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getContent()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getContent--\">ServiceFilterRequest</a></code></span></div>\n<div class=\"block\">Gets the request's content</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getContent--\">getContent</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getRawContent--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getRawContent</h4>\n<pre>public&nbsp;byte[]&nbsp;getRawContent()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getRawContent--\">ServiceFilterRequest</a></code></span></div>\n<div class=\"block\">Gets the request's content</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getRawContent--\">getRawContent</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getUrl--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getUrl</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getUrl()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getUrl--\">ServiceFilterRequest</a></code></span></div>\n<div class=\"block\">Gets request's URL</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getUrl--\">getUrl</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"setUrl-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setUrl</h4>\n<pre>public&nbsp;void&nbsp;setUrl(java.lang.String&nbsp;url)\n            throws java.net.URISyntaxException</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#setUrl-java.lang.String-\">ServiceFilterRequest</a></code></span></div>\n<div class=\"block\">Sets the request's URL</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#setUrl-java.lang.String-\">setUrl</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></code></dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.net.URISyntaxException</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getMethod--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getMethod</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getMethod()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getMethod--\">ServiceFilterRequest</a></code></span></div>\n<div class=\"block\">Gets the request's method</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getMethod--\">getMethod</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ServiceFilterRequestImpl.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterRequestImpl.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>ServiceFilterResponse</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"ServiceFilterResponse\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6,\"i1\":6,\"i2\":6,\"i3\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ServiceFilterResponse.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterResponse.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.http</div>\n<h2 title=\"Interface ServiceFilterResponse\" class=\"title\">Interface ServiceFilterResponse</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Known Implementing Classes:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponseImpl</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">ServiceFilterResponse</span></pre>\n<div class=\"block\">Represents an HTTP response that can be manipulated by ServiceFilters</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getContent--\">getContent</a></span>()</code>\n<div class=\"block\">Gets the response's content.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>Header[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getHeaders--\">getHeaders</a></span>()</code>\n<div class=\"block\">Gets the response's headers.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>byte[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getRawContent--\">getRawContent</a></span>()</code>\n<div class=\"block\">Gets the response's content.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>StatusLine</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getStatus--\">getStatus</a></span>()</code>\n<div class=\"block\">Gets the response's status.</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getHeaders--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getHeaders</h4>\n<pre>Header[]&nbsp;getHeaders()</pre>\n<div class=\"block\">Gets the response's headers.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The response's headers</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getContent--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getContent</h4>\n<pre>java.lang.String&nbsp;getContent()</pre>\n<div class=\"block\">Gets the response's content.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>String with the response's content</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Exception</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getRawContent--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getRawContent</h4>\n<pre>byte[]&nbsp;getRawContent()</pre>\n<div class=\"block\">Gets the response's content.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>byte array with the response's content</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Exception</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getStatus--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getStatus</h4>\n<pre>StatusLine&nbsp;getStatus()</pre>\n<div class=\"block\">Gets the response's status.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Response's status</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ServiceFilterResponse.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterResponse.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>ServiceFilterResponseImpl</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"ServiceFilterResponseImpl\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ServiceFilterResponseImpl.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterResponseImpl.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.http</div>\n<h2 title=\"Class ServiceFilterResponseImpl\" class=\"title\">Class ServiceFilterResponseImpl</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponseImpl</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">ServiceFilterResponseImpl</span>\nextends java.lang.Object\nimplements <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></pre>\n<div class=\"block\">ServiceFilterResponse implementation</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html#ServiceFilterResponseImpl-HttpResponse-\">ServiceFilterResponseImpl</a></span>(HttpResponse&nbsp;response)</code>\n<div class=\"block\">Constructor</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html#getContent--\">getContent</a></span>()</code>\n<div class=\"block\">Gets the response's content.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>Header[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html#getHeaders--\">getHeaders</a></span>()</code>\n<div class=\"block\">Gets the response's headers.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>byte[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html#getRawContent--\">getRawContent</a></span>()</code>\n<div class=\"block\">Gets the response's content.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>StatusLine</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html#getStatus--\">getStatus</a></span>()</code>\n<div class=\"block\">Gets the response's status.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"ServiceFilterResponseImpl-HttpResponse-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>ServiceFilterResponseImpl</h4>\n<pre>public&nbsp;ServiceFilterResponseImpl(HttpResponse&nbsp;response)\n                          throws java.lang.IllegalStateException,\n                                 java.io.IOException</pre>\n<div class=\"block\">Constructor</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>response</code> - The request's response</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.io.IOException</code></dd>\n<dd><code>java.lang.IllegalStateException</code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getHeaders--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getHeaders</h4>\n<pre>public&nbsp;Header[]&nbsp;getHeaders()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getHeaders--\">ServiceFilterResponse</a></code></span></div>\n<div class=\"block\">Gets the response's headers.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getHeaders--\">getHeaders</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The response's headers</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getContent--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getContent</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getContent()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getContent--\">ServiceFilterResponse</a></code></span></div>\n<div class=\"block\">Gets the response's content.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getContent--\">getContent</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>String with the response's content</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getRawContent--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getRawContent</h4>\n<pre>public&nbsp;byte[]&nbsp;getRawContent()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getRawContent--\">ServiceFilterResponse</a></code></span></div>\n<div class=\"block\">Gets the response's content.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getRawContent--\">getRawContent</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>byte array with the response's content</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getStatus--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getStatus</h4>\n<pre>public&nbsp;StatusLine&nbsp;getStatus()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getStatus--\">ServiceFilterResponse</a></code></span></div>\n<div class=\"block\">Gets the response's status.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getStatus--\">getStatus</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Response's status</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ServiceFilterResponseImpl.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterResponseImpl.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/class-use/AndroidHttpClientFactory.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/AndroidHttpClientFactory.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"AndroidHttpClientFactory.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.http\">com.microsoft.windowsazure.mobileservices.http</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getAndroidHttpClientFactory--\">getAndroidHttpClientFactory</a></span>()</code>\n<div class=\"block\">Gets the AndroidHttpClientFactory</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#setAndroidHttpClientFactory-com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory-\">setAndroidHttpClientFactory</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a>&nbsp;mAndroidHttpClientFactory)</code>\n<div class=\"block\">Sets the AndroidHttpClientFactory</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.http\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> that implement <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactoryImpl</a></span></code>\n<div class=\"block\">Default implementation for AndroidHttpClientFactory</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#ServiceFilterRequestImpl-HttpRequestBase-com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory-\">ServiceFilterRequestImpl</a></span>(HttpRequestBase&nbsp;request,\n                        <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a>&nbsp;factory)</code>\n<div class=\"block\">Constructor</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/AndroidHttpClientFactory.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"AndroidHttpClientFactory.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/class-use/AndroidHttpClientFactoryImpl.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactoryImpl</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactoryImpl\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/AndroidHttpClientFactoryImpl.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"AndroidHttpClientFactoryImpl.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactoryImpl\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactoryImpl</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactoryImpl</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/AndroidHttpClientFactoryImpl.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"AndroidHttpClientFactoryImpl.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/class-use/HttpPatch.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.http.HttpPatch</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.HttpPatch\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/HttpPatch.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"HttpPatch.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.HttpPatch\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.http.HttpPatch</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.http.HttpPatch</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/HttpPatch.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"HttpPatch.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/class-use/MobileServiceConnection.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/MobileServiceConnection.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceConnection.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.http\">com.microsoft.windowsazure.mobileservices.http</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#createConnection--\">createConnection</a></span>()</code>\n<div class=\"block\">Creates a MobileServiceConnection</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.http\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html#RequestAsyncTask-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection-\">RequestAsyncTask</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n                <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a>&nbsp;connection)</code>\n<div class=\"block\">Constructor that specifies request and connection</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/MobileServiceConnection.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceConnection.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/class-use/MobileServiceHttpClient.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.http.MobileServiceHttpClient</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.MobileServiceHttpClient\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/MobileServiceHttpClient.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceHttpClient.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.MobileServiceHttpClient\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.http.MobileServiceHttpClient</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.http.MobileServiceHttpClient</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/MobileServiceHttpClient.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceHttpClient.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/class-use/NextServiceFilterCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/NextServiceFilterCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NextServiceFilterCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">NextServiceFilterCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.http\">com.microsoft.windowsazure.mobileservices.http</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.http\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">NextServiceFilterCallback</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">NextServiceFilterCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ServiceFilter.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html#handleRequest-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback-\">handleRequest</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n             <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">NextServiceFilterCallback</a>&nbsp;nextServiceFilterCallback)</code>\n<div class=\"block\">Method to handle the requests</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/NextServiceFilterCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"NextServiceFilterCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/class-use/RequestAsyncTask.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/RequestAsyncTask.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RequestAsyncTask.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/RequestAsyncTask.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RequestAsyncTask.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilter.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.http.ServiceFilter</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.http.ServiceFilter\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.http.ServiceFilter\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.http.ServiceFilter</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getServiceFilter--\">getServiceFilter</a></span>()</code>\n<div class=\"block\">Gets the ServiceFilter.</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#withFilter-com.microsoft.windowsazure.mobileservices.http.ServiceFilter-\">withFilter</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a>&nbsp;serviceFilter)</code>\n<div class=\"block\">Adds a new filter to the MobileServiceClient</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterRequest.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterRequest.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterRequest.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.http\">com.microsoft.windowsazure.mobileservices.http</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.http\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> that implement <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></span></code>\n<div class=\"block\">ServiceFilterRequest implementation</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ServiceFilter.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html#handleRequest-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback-\">handleRequest</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n             <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">NextServiceFilterCallback</a>&nbsp;nextServiceFilterCallback)</code>\n<div class=\"block\">Method to handle the requests</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">NextServiceFilterCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html#onNext-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-\">onNext</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request)</code>\n<div class=\"block\">Method called to execute the next ServiceFilter in the pipeline</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceConnection.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#start-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-\">start</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request)</code>\n<div class=\"block\">Execute a request-response operation with a Mobile Service</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceConnection.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#start-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback-\">start</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n     <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a>&nbsp;responseCallback)</code>\n<div class=\"block\">Execute a request-response operation with a Mobile Service</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html#RequestAsyncTask-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection-\">RequestAsyncTask</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n                <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a>&nbsp;connection)</code>\n<div class=\"block\">Constructor that specifies request and connection</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterRequest.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterRequest.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterRequestImpl.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequestImpl</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequestImpl\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterRequestImpl.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterRequestImpl.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequestImpl\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequestImpl</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequestImpl</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterRequestImpl.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterRequestImpl.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterResponse.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterResponse.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterResponse.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.http\">com.microsoft.windowsazure.mobileservices.http</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceException.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#getResponse--\">getResponse</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceException.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#getServiceResponse-java.lang.Throwable-\">getServiceResponse</a></span>(java.lang.Throwable&nbsp;throwable)</code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return types with arguments of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-\">invokeApi</a></span>(java.lang.String&nbsp;apiName,\n         byte[]&nbsp;content,\n         java.lang.String&nbsp;httpMethod,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n         java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Invokes a custom API</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ApiOperationCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html#onCompleted-E-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"type parameter in ApiOperationCallback\">E</a>&nbsp;result,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call when the operation is completed</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ApiJsonOperationCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html#onCompleted-com.google.gson.JsonElement-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(com.google.gson.JsonElement&nbsp;jsonObject,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call when the operation is completed</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">UserAuthenticationCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html#onCompleted-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a>&nbsp;user,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call if the authentication process finishes successfully</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ServiceFilterResponseCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html#onResponse-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-java.lang.Exception-\">onResponse</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response,\n          java.lang.Exception&nbsp;exception)</code>\n<div class=\"block\">Method to execute when the response is ready to be processed</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#MobileServiceException-java.lang.String-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">MobileServiceException</a></span>(java.lang.String&nbsp;detail,\n                      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#MobileServiceException-java.lang.String-java.lang.Throwable-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">MobileServiceException</a></span>(java.lang.String&nbsp;detail,\n                      java.lang.Throwable&nbsp;throwable,\n                      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.http\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> that implement <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponseImpl</a></span></code>\n<div class=\"block\">ServiceFilterResponse implementation</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ServiceFilterRequestImpl.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#execute--\">execute</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ServiceFilterRequest.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#execute--\">execute</a></span>()</code>\n<div class=\"block\">Executes the request</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> that return types with arguments of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ServiceFilter.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html#handleRequest-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback-\">handleRequest</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request,\n             <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">NextServiceFilterCallback</a>&nbsp;nextServiceFilterCallback)</code>\n<div class=\"block\">Method to handle the requests</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">NextServiceFilterCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html#onNext-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-\">onNext</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request)</code>\n<div class=\"block\">Method called to execute the next ServiceFilter in the pipeline</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceHttpClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#request-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-\">request</a></span>(java.lang.String&nbsp;path,\n       byte[]&nbsp;content,\n       java.lang.String&nbsp;httpMethod,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Makes a request over HTTP</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceHttpClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#request-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-java.util.EnumSet-\">request</a></span>(java.lang.String&nbsp;path,\n       byte[]&nbsp;content,\n       java.lang.String&nbsp;httpMethod,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n       java.util.EnumSet&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;&nbsp;features)</code>\n<div class=\"block\">Makes a request over HTTP</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceHttpClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#request-java.lang.String-java.lang.String-java.lang.String-java.util.List-java.util.List-java.util.EnumSet-\">request</a></span>(java.lang.String&nbsp;path,\n       java.lang.String&nbsp;content,\n       java.lang.String&nbsp;httpMethod,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;requestHeaders,\n       java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n       java.util.EnumSet&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&gt;&nbsp;features)</code>\n<div class=\"block\">Makes a request over HTTP</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceConnection.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#start-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-\">start</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>&nbsp;request)</code>\n<div class=\"block\">Execute a request-response operation with a Mobile Service</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html#onCompleted-E-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"type parameter in TableOperationCallback\">E</a>&nbsp;entity,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableDeleteCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html#onCompleted-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableJsonQueryCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html#onCompleted-com.google.gson.JsonElement-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(com.google.gson.JsonElement&nbsp;result,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableQueryCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html#onCompleted-java.util.List-int-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(java.util.List&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"type parameter in TableQueryCallback\">E</a>&gt;&nbsp;result,\n           int&nbsp;count,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterResponse.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterResponse.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterResponseImpl.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponseImpl</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponseImpl\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterResponseImpl.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterResponseImpl.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponseImpl\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponseImpl</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponseImpl</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterResponseImpl.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ServiceFilterResponseImpl.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.http</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.http</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Interfaces\">Interfaces</h2>\n<ul title=\"Interfaces\">\n<li><a href=\"AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\"><span class=\"interfaceName\">AndroidHttpClientFactory</span></a></li>\n<li><a href=\"NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\"><span class=\"interfaceName\">NextServiceFilterCallback</span></a></li>\n<li><a href=\"ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\"><span class=\"interfaceName\">ServiceFilter</span></a></li>\n<li><a href=\"ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\"><span class=\"interfaceName\">ServiceFilterRequest</span></a></li>\n<li><a href=\"ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\"><span class=\"interfaceName\">ServiceFilterResponse</span></a></li>\n</ul>\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">AndroidHttpClientFactoryImpl</a></li>\n<li><a href=\"HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">HttpPatch</a></li>\n<li><a href=\"MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">MobileServiceConnection</a></li>\n<li><a href=\"MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">MobileServiceHttpClient</a></li>\n<li><a href=\"RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">RequestAsyncTask</a></li>\n<li><a href=\"ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">ServiceFilterRequestImpl</a></li>\n<li><a href=\"ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\" target=\"classFrame\">ServiceFilterResponseImpl</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.http</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.http\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.http</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Interface Summary table, listing interfaces, and an explanation\">\n<caption><span>Interface Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Interface</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Factory for AndroidHttpClient instances</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">NextServiceFilterCallback</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Callback used to chain service filters</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a></td>\n<td class=\"colLast\">\n<div class=\"block\">The service filter can be used to manipulate requests and responses in the\n HTTP pipeline used by the MobileServiceClient.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Represents an HTTP request that can be manipulated by ServiceFilters</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Represents an HTTP response that can be manipulated by ServiceFilters</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactoryImpl</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Default implementation for AndroidHttpClientFactory</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">HttpPatch</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Class for handling communication with Microsoft Azure Mobile Services REST APIs</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceHttpClient</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Utility class which centralizes the HTTP requests sent by the\n mobile services client.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">RequestAsyncTask</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Default implementation for performing requests using AsyncTask</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></td>\n<td class=\"colLast\">\n<div class=\"block\">ServiceFilterRequest implementation</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponseImpl</a></td>\n<td class=\"colLast\">\n<div class=\"block\">ServiceFilterResponse implementation</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.http Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.http Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.http</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">&lt;any&gt;\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">RequestAsyncTask</span></a></li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">AndroidHttpClientFactoryImpl</span></a> (implements com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a>)</li>\n<li type=\"circle\">HttpEntityEnclosingRequestBase\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">HttpPatch</span></a></li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">MobileServiceConnection</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">MobileServiceHttpClient</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilterRequestImpl</span></a> (implements com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilterResponseImpl</span></a> (implements com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>)</li>\n</ul>\n</li>\n</ul>\n<h2 title=\"Interface Hierarchy\">Interface Hierarchy</h2>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">AndroidHttpClientFactory</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">NextServiceFilterCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilter</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilterRequest</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilterResponse</span></a></li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/authentication/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/http/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.http</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.http\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.http\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.http</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.http\">com.microsoft.windowsazure.mobileservices.http</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> used by <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/class-use/AndroidHttpClientFactory.html#com.microsoft.windowsazure.mobileservices\">AndroidHttpClientFactory</a>\n<div class=\"block\">Factory for AndroidHttpClient instances</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/class-use/MobileServiceConnection.html#com.microsoft.windowsazure.mobileservices\">MobileServiceConnection</a>\n<div class=\"block\">Class for handling communication with Microsoft Azure Mobile Services REST APIs</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilter.html#com.microsoft.windowsazure.mobileservices\">ServiceFilter</a>\n<div class=\"block\">The service filter can be used to manipulate requests and responses in the\n HTTP pipeline used by the MobileServiceClient.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterResponse.html#com.microsoft.windowsazure.mobileservices\">ServiceFilterResponse</a>\n<div class=\"block\">Represents an HTTP response that can be manipulated by ServiceFilters</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.http\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> used by <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/class-use/AndroidHttpClientFactory.html#com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a>\n<div class=\"block\">Factory for AndroidHttpClient instances</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/class-use/MobileServiceConnection.html#com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a>\n<div class=\"block\">Class for handling communication with Microsoft Azure Mobile Services REST APIs</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/class-use/NextServiceFilterCallback.html#com.microsoft.windowsazure.mobileservices.http\">NextServiceFilterCallback</a>\n<div class=\"block\">Callback used to chain service filters</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterRequest.html#com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>\n<div class=\"block\">Represents an HTTP request that can be manipulated by ServiceFilters</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterResponse.html#com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>\n<div class=\"block\">Represents an HTTP response that can be manipulated by ServiceFilters</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> used by <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/class-use/ServiceFilterResponse.html#com.microsoft.windowsazure.mobileservices.table\">ServiceFilterResponse</a>\n<div class=\"block\">Represents an HTTP response that can be manipulated by ServiceFilters</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/http/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>GcmNativeRegistration</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"GcmNativeRegistration\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/GcmNativeRegistration.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"GcmNativeRegistration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.notifications</div>\n<h2 title=\"Class GcmNativeRegistration\" class=\"title\">Class GcmNativeRegistration</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications.Registration</a></li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.notifications.GcmNativeRegistration</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">GcmNativeRegistration</span>\nextends <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></pre>\n<div class=\"block\">Represents GCM native registration</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html#getName--\">getName</a></span>()</code>\n<div class=\"block\">Gets the registration name</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html#getPNSHandle--\">getPNSHandle</a></span>()</code>\n<div class=\"block\">Gets the PNS specific identifier</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.com.microsoft.windowsazure.mobileservices.notifications.Registration\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></h3>\n<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getRegistrationId--\">getRegistrationId</a>, <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getTags--\">getTags</a>, <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getURI--\">getURI</a></code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getName()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from class:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getName--\">Registration</a></code></span></div>\n<div class=\"block\">Gets the registration name</div>\n</li>\n</ul>\n<a name=\"getPNSHandle--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getPNSHandle</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getPNSHandle()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from class:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getPNSHandle--\">Registration</a></code></span></div>\n<div class=\"block\">Gets the PNS specific identifier</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getPNSHandle--\">getPNSHandle</a></code>&nbsp;in class&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/GcmNativeRegistration.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"GcmNativeRegistration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>GcmTemplateRegistration</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"GcmTemplateRegistration\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/GcmTemplateRegistration.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"GcmTemplateRegistration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.notifications</div>\n<h2 title=\"Class GcmTemplateRegistration\" class=\"title\">Class GcmTemplateRegistration</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications.Registration</a></li>\n<li>\n<ul class=\"inheritance\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration</a></li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.notifications.GcmTemplateRegistration</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">GcmTemplateRegistration</span>\nextends <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a></pre>\n<div class=\"block\">Represents GCM template registration</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html#getName--\">getName</a></span>()</code>\n<div class=\"block\">Gets the registration name</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html#getPNSHandle--\">getPNSHandle</a></span>()</code>\n<div class=\"block\">Gets the PNS specific identifier</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a></h3>\n<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html#getTemplateBody--\">getTemplateBody</a>, <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html#getTemplateName--\">getTemplateName</a></code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.com.microsoft.windowsazure.mobileservices.notifications.Registration\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></h3>\n<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getRegistrationId--\">getRegistrationId</a>, <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getTags--\">getTags</a>, <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getURI--\">getURI</a></code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getName()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from class:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getName--\">Registration</a></code></span></div>\n<div class=\"block\">Gets the registration name</div>\n</li>\n</ul>\n<a name=\"getPNSHandle--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getPNSHandle</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getPNSHandle()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from class:&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getPNSHandle--\">Registration</a></code></span></div>\n<div class=\"block\">Gets the PNS specific identifier</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getPNSHandle--\">getPNSHandle</a></code>&nbsp;in class&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/GcmTemplateRegistration.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"GcmTemplateRegistration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServicePush</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServicePush\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":42,\"i2\":10,\"i3\":42,\"i4\":10,\"i5\":42,\"i6\":10,\"i7\":42,\"i8\":10,\"i9\":42};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"],32:[\"t6\",\"Deprecated Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServicePush.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePush.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.notifications</div>\n<h2 title=\"Class MobileServicePush\" class=\"title\">Class MobileServicePush</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServicePush</span>\nextends java.lang.Object</pre>\n<div class=\"block\">The notification hub client</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#MobileServicePush-com.microsoft.windowsazure.mobileservices.MobileServiceClient-Context-\">MobileServicePush</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client,\n                 Context&nbsp;context)</code>\n<div class=\"block\">Creates a new NotificationHub client</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">Deprecated Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#register-java.lang.String-java.lang.String:A-\">register</a></span>(java.lang.String&nbsp;pnsHandle,\n        java.lang.String[]&nbsp;tags)</code>\n<div class=\"block\">Registers the client for native notifications with the specified tags</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#register-java.lang.String-java.lang.String:A-com.microsoft.windowsazure.mobileservices.notifications.RegistrationCallback-\">register</a></span>(java.lang.String&nbsp;pnsHandle,\n        java.lang.String[]&nbsp;tags,\n        <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">RegistrationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#register-java.lang.String-java.lang.String:A-\"><code>register(String pnsHandle, String[] tags)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-\">registerTemplate</a></span>(java.lang.String&nbsp;pnsHandle,\n                java.lang.String&nbsp;templateName,\n                java.lang.String&nbsp;template,\n                java.lang.String[]&nbsp;tags)</code>\n<div class=\"block\">Registers the client for template notifications with the specified tags</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistrationCallback-\">registerTemplate</a></span>(java.lang.String&nbsp;pnsHandle,\n                java.lang.String&nbsp;templateName,\n                java.lang.String&nbsp;template,\n                java.lang.String[]&nbsp;tags,\n                <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistrationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-\"><code>registerTemplate(String pnsHandle, String\n             templateName, String template, String[] tags)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregister--\">unregister</a></span>()</code>\n<div class=\"block\">Unregisters the client for native notifications</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregister-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">unregister</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregister--\"><code>unregister()</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterAll-java.lang.String-\">unregisterAll</a></span>(java.lang.String&nbsp;pnsHandle)</code>\n<div class=\"block\">Unregisters the client for all notifications</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterAll-java.lang.String-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">unregisterAll</a></span>(java.lang.String&nbsp;pnsHandle,\n             <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterAll-java.lang.String-\"><code>unregisterAll(String pnsHandle)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterTemplate-java.lang.String-\">unregisterTemplate</a></span>(java.lang.String&nbsp;templateName)</code>\n<div class=\"block\">Unregisters the client for template notifications of a specific template</div>\n</td>\n</tr>\n<tr id=\"i9\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterTemplate-java.lang.String-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">unregisterTemplate</a></span>(java.lang.String&nbsp;templateName,\n                  <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterTemplate-java.lang.String-\"><code>unregisterTemplate(String templateName)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServicePush-com.microsoft.windowsazure.mobileservices.MobileServiceClient-Context-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServicePush</h4>\n<pre>public&nbsp;MobileServicePush(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client,\n                         Context&nbsp;context)</pre>\n<div class=\"block\">Creates a new NotificationHub client</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>notificationHubPath</code> - Notification Hub path</dd>\n<dd><code>connectionString</code> - Notification Hub connection string</dd>\n<dd><code>context</code> - Android context used to access SharedPreferences</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"register-java.lang.String-java.lang.String:A-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>register</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a>&gt;&nbsp;register(java.lang.String&nbsp;pnsHandle,\n                                                                                 java.lang.String[]&nbsp;tags)</pre>\n<div class=\"block\">Registers the client for native notifications with the specified tags</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>pnsHandle</code> - PNS specific identifier</dd>\n<dd><code>tags</code> - Tags to use in the registration</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Future with Registration Information</dd>\n</dl>\n</li>\n</ul>\n<a name=\"register-java.lang.String-java.lang.String:A-com.microsoft.windowsazure.mobileservices.notifications.RegistrationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>register</h4>\n<pre>public&nbsp;void&nbsp;register(java.lang.String&nbsp;pnsHandle,\n                     java.lang.String[]&nbsp;tags,\n                     <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">RegistrationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#register-java.lang.String-java.lang.String:A-\"><code>register(String pnsHandle, String[] tags)</code></a> instead</span></div>\n<div class=\"block\">Registers the client for native notifications with the specified tags</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>pnsHandle</code> - PNS specific identifier</dd>\n<dd><code>callback</code> - The callback to invoke after the Push execution</dd>\n<dd><code>tags</code> - Tags to use in the registration</dd>\n</dl>\n</li>\n</ul>\n<a name=\"registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>registerTemplate</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a>&gt;&nbsp;registerTemplate(java.lang.String&nbsp;pnsHandle,\n                                                                                                 java.lang.String&nbsp;templateName,\n                                                                                                 java.lang.String&nbsp;template,\n                                                                                                 java.lang.String[]&nbsp;tags)</pre>\n<div class=\"block\">Registers the client for template notifications with the specified tags</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>pnsHandle</code> - PNS specific identifier</dd>\n<dd><code>templateName</code> - The template name</dd>\n<dd><code>template</code> - The template body</dd>\n<dd><code>tags</code> - The tags to use in the registration</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Future with TemplateRegistration Information</dd>\n</dl>\n</li>\n</ul>\n<a name=\"registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistrationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>registerTemplate</h4>\n<pre>public&nbsp;void&nbsp;registerTemplate(java.lang.String&nbsp;pnsHandle,\n                             java.lang.String&nbsp;templateName,\n                             java.lang.String&nbsp;template,\n                             java.lang.String[]&nbsp;tags,\n                             <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistrationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-\"><code>registerTemplate(String pnsHandle, String\n             templateName, String template, String[] tags)</code></a> instead</span></div>\n<div class=\"block\">Registers the client for template notifications with the specified tags</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>pnsHandle</code> - PNS specific identifier</dd>\n<dd><code>templateName</code> - The template name</dd>\n<dd><code>template</code> - The template body</dd>\n<dd><code>tags</code> - The tags to use in the registration</dd>\n<dd><code>callback</code> - The operation callback</dd>\n</dl>\n</li>\n</ul>\n<a name=\"unregister--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>unregister</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;unregister()</pre>\n<div class=\"block\">Unregisters the client for native notifications</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Future with TemplateRegistration Information</dd>\n</dl>\n</li>\n</ul>\n<a name=\"unregister-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>unregister</h4>\n<pre>public&nbsp;void&nbsp;unregister(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregister--\"><code>unregister()</code></a> instead</span></div>\n<div class=\"block\">Unregisters the client for native notifications</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>callback</code> - The operation callback</dd>\n</dl>\n</li>\n</ul>\n<a name=\"unregisterTemplate-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>unregisterTemplate</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;unregisterTemplate(java.lang.String&nbsp;templateName)</pre>\n<div class=\"block\">Unregisters the client for template notifications of a specific template</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>templateName</code> - The template name</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Future with TemplateRegistration Information</dd>\n</dl>\n</li>\n</ul>\n<a name=\"unregisterTemplate-java.lang.String-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>unregisterTemplate</h4>\n<pre>public&nbsp;void&nbsp;unregisterTemplate(java.lang.String&nbsp;templateName,\n                               <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterTemplate-java.lang.String-\"><code>unregisterTemplate(String templateName)</code></a> instead</span></div>\n<div class=\"block\">Unregisters the client for template notifications of a specific template</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>templateName</code> - The template name</dd>\n<dd><code>callback</code> - The operation callback</dd>\n</dl>\n</li>\n</ul>\n<a name=\"unregisterAll-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>unregisterAll</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;unregisterAll(java.lang.String&nbsp;pnsHandle)</pre>\n<div class=\"block\">Unregisters the client for all notifications</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>pnsHandle</code> - PNS specific identifier</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Future with TemplateRegistration Information</dd>\n</dl>\n</li>\n</ul>\n<a name=\"unregisterAll-java.lang.String-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>unregisterAll</h4>\n<pre>public&nbsp;void&nbsp;unregisterAll(java.lang.String&nbsp;pnsHandle,\n                          <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterAll-java.lang.String-\"><code>unregisterAll(String pnsHandle)</code></a> instead</span></div>\n<div class=\"block\">Unregisters the client for all notifications</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>pnsHandle</code> - PNS specific identifier</dd>\n<dd><code>callback</code> - The operation callback</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServicePush.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePush.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/Registration.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>Registration</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Registration\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6,\"i1\":10,\"i2\":10,\"i3\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/Registration.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"Registration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.notifications</div>\n<h2 title=\"Class Registration\" class=\"title\">Class Registration</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.notifications.Registration</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>Direct Known Subclasses:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmNativeRegistration</a>, <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public abstract class <span class=\"typeNameLabel\">Registration</span>\nextends java.lang.Object</pre>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>abstract java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getPNSHandle--\">getPNSHandle</a></span>()</code>\n<div class=\"block\">Gets the PNS specific identifier</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getRegistrationId--\">getRegistrationId</a></span>()</code>\n<div class=\"block\">Gets the registration ID</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;java.lang.String&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getTags--\">getTags</a></span>()</code>\n<div class=\"block\">Gets the registration tags</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getURI--\">getURI</a></span>()</code>\n<div class=\"block\">Gets the registration URI</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getRegistrationId--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getRegistrationId</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getRegistrationId()</pre>\n<div class=\"block\">Gets the registration ID</div>\n</li>\n</ul>\n<a name=\"getTags--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTags</h4>\n<pre>public&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;getTags()</pre>\n<div class=\"block\">Gets the registration tags</div>\n</li>\n</ul>\n<a name=\"getURI--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getURI</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getURI()</pre>\n<div class=\"block\">Gets the registration URI</div>\n</li>\n</ul>\n<a name=\"getPNSHandle--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getPNSHandle</h4>\n<pre>public abstract&nbsp;java.lang.String&nbsp;getPNSHandle()</pre>\n<div class=\"block\">Gets the PNS specific identifier</div>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/Registration.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"Registration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>RegistrationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"RegistrationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/RegistrationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RegistrationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.notifications</div>\n<h2 title=\"Interface RegistrationCallback\" class=\"title\">Interface RegistrationCallback</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">RegistrationCallback</span></pre>\n<div class=\"block\">Callback to invoke after register the template</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html#onRegister-com.microsoft.windowsazure.mobileservices.notifications.Registration-java.lang.Exception-\">onRegister</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a>&nbsp;registration,\n          java.lang.Exception&nbsp;exception)</code>\n<div class=\"block\">Method to execute when the register is finished</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onRegister-com.microsoft.windowsazure.mobileservices.notifications.Registration-java.lang.Exception-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onRegister</h4>\n<pre>void&nbsp;onRegister(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a>&nbsp;registration,\n                java.lang.Exception&nbsp;exception)</pre>\n<div class=\"block\">Method to execute when the register is finished</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>registration</code> - The current registration</dd>\n<dd><code>exception</code> - An exception representing the error, in case there was one</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/RegistrationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RegistrationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>RegistrationGoneException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"RegistrationGoneException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/RegistrationGoneException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RegistrationGoneException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Throwable\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.notifications</div>\n<h2 title=\"Class RegistrationGoneException\" class=\"title\">Class RegistrationGoneException</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Throwable</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Exception</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.notifications.RegistrationGoneException</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">RegistrationGoneException</span>\nextends java.lang.Exception</pre>\n<div class=\"block\">Represents an exception when registration is gone</div>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../../serialized-form.html#com.microsoft.windowsazure.mobileservices.notifications.RegistrationGoneException\">Serialized Form</a></dd>\n</dl>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Throwable\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Throwable</h3>\n<code>addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/RegistrationGoneException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RegistrationGoneException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Throwable\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>TemplateRegistration</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"TemplateRegistration\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TemplateRegistration.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TemplateRegistration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.notifications</div>\n<h2 title=\"Class TemplateRegistration\" class=\"title\">Class TemplateRegistration</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications.Registration</a></li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>Direct Known Subclasses:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmTemplateRegistration</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public abstract class <span class=\"typeNameLabel\">TemplateRegistration</span>\nextends <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></pre>\n<div class=\"block\">Represents a template registration</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html#getTemplateBody--\">getTemplateBody</a></span>()</code>\n<div class=\"block\">Gets the template body</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html#getTemplateName--\">getTemplateName</a></span>()</code>\n<div class=\"block\">Gets the template name</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.com.microsoft.windowsazure.mobileservices.notifications.Registration\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></h3>\n<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getPNSHandle--\">getPNSHandle</a>, <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getRegistrationId--\">getRegistrationId</a>, <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getTags--\">getTags</a>, <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getURI--\">getURI</a></code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getTemplateBody--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTemplateBody</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getTemplateBody()</pre>\n<div class=\"block\">Gets the template body</div>\n</li>\n</ul>\n<a name=\"getTemplateName--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getTemplateName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getTemplateName()</pre>\n<div class=\"block\">Gets the template name</div>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TemplateRegistration.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TemplateRegistration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>TemplateRegistrationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"TemplateRegistrationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TemplateRegistrationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TemplateRegistrationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.notifications</div>\n<h2 title=\"Interface TemplateRegistrationCallback\" class=\"title\">Interface TemplateRegistrationCallback</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">TemplateRegistrationCallback</span></pre>\n<div class=\"block\">Callback to invoke after register the template</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html#onRegister-com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration-java.lang.Exception-\">onRegister</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a>&nbsp;templateRegistration,\n          java.lang.Exception&nbsp;exception)</code>\n<div class=\"block\">Method to execute when the register is finished</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onRegister-com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration-java.lang.Exception-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onRegister</h4>\n<pre>void&nbsp;onRegister(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a>&nbsp;templateRegistration,\n                java.lang.Exception&nbsp;exception)</pre>\n<div class=\"block\">Method to execute when the register is finished</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>templateRegistration</code> - The current template registration</dd>\n<dd><code>exception</code> - An exception representing the error, in case there was one</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TemplateRegistrationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TemplateRegistrationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>UnregisterCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"UnregisterCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/UnregisterCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UnregisterCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.notifications</div>\n<h2 title=\"Interface UnregisterCallback\" class=\"title\">Interface UnregisterCallback</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">UnregisterCallback</span></pre>\n<div class=\"block\">Callback to invoke after unregister</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html#onUnregister-java.lang.Exception-\">onUnregister</a></span>(java.lang.Exception&nbsp;exception)</code>\n<div class=\"block\">Method to execute when the unregister is finished</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onUnregister-java.lang.Exception-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onUnregister</h4>\n<pre>void&nbsp;onUnregister(java.lang.Exception&nbsp;exception)</pre>\n<div class=\"block\">Method to execute when the unregister is finished</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exception</code> - An exception representing the error, in case there was one</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/UnregisterCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UnregisterCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/class-use/GcmNativeRegistration.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.notifications.GcmNativeRegistration</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.notifications.GcmNativeRegistration\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/GcmNativeRegistration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"GcmNativeRegistration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.notifications.GcmNativeRegistration\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.notifications.GcmNativeRegistration</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.notifications.GcmNativeRegistration</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/GcmNativeRegistration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"GcmNativeRegistration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/class-use/GcmTemplateRegistration.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.notifications.GcmTemplateRegistration</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.notifications.GcmTemplateRegistration\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/GcmTemplateRegistration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"GcmTemplateRegistration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.notifications.GcmTemplateRegistration\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.notifications.GcmTemplateRegistration</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.notifications.GcmTemplateRegistration</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/GcmTemplateRegistration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"GcmTemplateRegistration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/class-use/MobileServicePush.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/MobileServicePush.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePush.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getPush--\">getPush</a></span>()</code>\n<div class=\"block\">Gets the MobileServicePush used for push notifications</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/MobileServicePush.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePush.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/class-use/Registration.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.notifications.Registration</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.notifications.Registration\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/Registration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"Registration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.notifications.Registration\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.notifications.Registration</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.notifications\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing subclasses, and an explanation\">\n<caption><span>Subclasses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmNativeRegistration</a></span></code>\n<div class=\"block\">Represents GCM native registration</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmTemplateRegistration</a></span></code>\n<div class=\"block\">Represents GCM template registration</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a></span></code>\n<div class=\"block\">Represents a template registration</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a> that return types with arguments of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePush.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#register-java.lang.String-java.lang.String:A-\">register</a></span>(java.lang.String&nbsp;pnsHandle,\n        java.lang.String[]&nbsp;tags)</code>\n<div class=\"block\">Registers the client for native notifications with the specified tags</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">RegistrationCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html#onRegister-com.microsoft.windowsazure.mobileservices.notifications.Registration-java.lang.Exception-\">onRegister</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a>&nbsp;registration,\n          java.lang.Exception&nbsp;exception)</code>\n<div class=\"block\">Method to execute when the register is finished</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/Registration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"Registration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/class-use/RegistrationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.notifications.RegistrationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.notifications.RegistrationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/RegistrationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RegistrationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.notifications.RegistrationCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.notifications.RegistrationCallback</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">RegistrationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.notifications\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">RegistrationCallback</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">RegistrationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePush.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#register-java.lang.String-java.lang.String:A-com.microsoft.windowsazure.mobileservices.notifications.RegistrationCallback-\">register</a></span>(java.lang.String&nbsp;pnsHandle,\n        java.lang.String[]&nbsp;tags,\n        <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">RegistrationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#register-java.lang.String-java.lang.String:A-\"><code>MobileServicePush.register(String pnsHandle, String[] tags)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/RegistrationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RegistrationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/class-use/RegistrationGoneException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.notifications.RegistrationGoneException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.notifications.RegistrationGoneException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/RegistrationGoneException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RegistrationGoneException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.notifications.RegistrationGoneException\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.notifications.RegistrationGoneException</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.notifications.RegistrationGoneException</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/RegistrationGoneException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RegistrationGoneException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/class-use/TemplateRegistration.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/TemplateRegistration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TemplateRegistration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.notifications\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing subclasses, and an explanation\">\n<caption><span>Subclasses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmTemplateRegistration</a></span></code>\n<div class=\"block\">Represents GCM template registration</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a> that return types with arguments of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePush.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-\">registerTemplate</a></span>(java.lang.String&nbsp;pnsHandle,\n                java.lang.String&nbsp;templateName,\n                java.lang.String&nbsp;template,\n                java.lang.String[]&nbsp;tags)</code>\n<div class=\"block\">Registers the client for template notifications with the specified tags</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TemplateRegistrationCallback.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html#onRegister-com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration-java.lang.Exception-\">onRegister</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a>&nbsp;templateRegistration,\n          java.lang.Exception&nbsp;exception)</code>\n<div class=\"block\">Method to execute when the register is finished</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/TemplateRegistration.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TemplateRegistration.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/class-use/TemplateRegistrationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistrationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistrationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/TemplateRegistrationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TemplateRegistrationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistrationCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistrationCallback</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistrationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.notifications\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistrationCallback</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistrationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePush.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistrationCallback-\">registerTemplate</a></span>(java.lang.String&nbsp;pnsHandle,\n                java.lang.String&nbsp;templateName,\n                java.lang.String&nbsp;template,\n                java.lang.String[]&nbsp;tags,\n                <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistrationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-\"><code>MobileServicePush.registerTemplate(String pnsHandle, String\n             templateName, String template, String[] tags)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/TemplateRegistrationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TemplateRegistrationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/class-use/UnregisterCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/UnregisterCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UnregisterCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.notifications\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePush.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregister-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">unregister</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregister--\"><code>MobileServicePush.unregister()</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePush.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterAll-java.lang.String-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">unregisterAll</a></span>(java.lang.String&nbsp;pnsHandle,\n             <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterAll-java.lang.String-\"><code>MobileServicePush.unregisterAll(String pnsHandle)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePush.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterTemplate-java.lang.String-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">unregisterTemplate</a></span>(java.lang.String&nbsp;templateName,\n                  <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterTemplate-java.lang.String-\"><code>MobileServicePush.unregisterTemplate(String templateName)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/class-use/UnregisterCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UnregisterCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.notifications</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.notifications</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Interfaces\">Interfaces</h2>\n<ul title=\"Interfaces\">\n<li><a href=\"RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\"><span class=\"interfaceName\">RegistrationCallback</span></a></li>\n<li><a href=\"TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\"><span class=\"interfaceName\">TemplateRegistrationCallback</span></a></li>\n<li><a href=\"UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\"><span class=\"interfaceName\">UnregisterCallback</span></a></li>\n</ul>\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\">GcmNativeRegistration</a></li>\n<li><a href=\"GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\">GcmTemplateRegistration</a></li>\n<li><a href=\"MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\">MobileServicePush</a></li>\n<li><a href=\"Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\">Registration</a></li>\n<li><a href=\"TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\">TemplateRegistration</a></li>\n</ul>\n<h2 title=\"Exceptions\">Exceptions</h2>\n<ul title=\"Exceptions\">\n<li><a href=\"RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\" target=\"classFrame\">RegistrationGoneException</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.notifications</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.notifications\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.notifications</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Interface Summary table, listing interfaces, and an explanation\">\n<caption><span>Interface Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Interface</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">RegistrationCallback</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Callback to invoke after register the template</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistrationCallback</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Callback to invoke after register the template</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Callback to invoke after unregister</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmNativeRegistration</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Represents GCM native registration</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmTemplateRegistration</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Represents GCM template registration</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></td>\n<td class=\"colLast\">\n<div class=\"block\">The notification hub client</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Represents a template registration</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Exception Summary table, listing exceptions, and an explanation\">\n<caption><span>Exception Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Exception</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">RegistrationGoneException</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Represents an exception when registration is gone</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.notifications Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.notifications Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.notifications</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">MobileServicePush</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Registration</span></a>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">GcmNativeRegistration</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">TemplateRegistration</span></a>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">GcmTemplateRegistration</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li type=\"circle\">java.lang.Throwable (implements java.io.Serializable)\n<ul>\n<li type=\"circle\">java.lang.Exception\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">RegistrationGoneException</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h2 title=\"Interface Hierarchy\">Interface Hierarchy</h2>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">RegistrationCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">TemplateRegistrationCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">UnregisterCallback</span></a></li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/notifications/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.notifications</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.notifications\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.notifications\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.notifications</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a> used by <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/class-use/MobileServicePush.html#com.microsoft.windowsazure.mobileservices\">MobileServicePush</a>\n<div class=\"block\">The notification hub client</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.notifications\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a> used by <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/class-use/Registration.html#com.microsoft.windowsazure.mobileservices.notifications\">Registration</a>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/class-use/RegistrationCallback.html#com.microsoft.windowsazure.mobileservices.notifications\">RegistrationCallback</a>\n<div class=\"block\">Callback to invoke after register the template</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/class-use/TemplateRegistration.html#com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a>\n<div class=\"block\">Represents a template registration</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/class-use/TemplateRegistrationCallback.html#com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistrationCallback</a>\n<div class=\"block\">Callback to invoke after register the template</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/class-use/UnregisterCallback.html#com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a>\n<div class=\"block\">Callback to invoke after unregister</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/notifications/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Interfaces\">Interfaces</h2>\n<ul title=\"Interfaces\">\n<li><a href=\"ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\"><span class=\"interfaceName\">ApiJsonOperationCallback</span></a></li>\n<li><a href=\"ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\"><span class=\"interfaceName\">ApiOperationCallback</span></a></li>\n<li><a href=\"ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\"><span class=\"interfaceName\">ServiceFilterResponseCallback</span></a></li>\n<li><a href=\"UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\"><span class=\"interfaceName\">UserAuthenticationCallback</span></a></li>\n</ul>\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\">BuildConfig</a></li>\n<li><a href=\"MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\">MobileServiceApplication</a></li>\n<li><a href=\"MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\">MobileServiceClient</a></li>\n<li><a href=\"MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\">MobileServiceList</a></li>\n</ul>\n<h2 title=\"Enums\">Enums</h2>\n<ul title=\"Enums\">\n<li><a href=\"MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\">MobileServiceFeatures</a></li>\n</ul>\n<h2 title=\"Exceptions\">Exceptions</h2>\n<ul title=\"Exceptions\">\n<li><a href=\"MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\" target=\"classFrame\">MobileServiceException</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Package</li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Interface Summary table, listing interfaces, and an explanation\">\n<caption><span>Interface Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Interface</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Callback used after a custom Api invocation is executed using JSON</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>&lt;E&gt;</td>\n<td class=\"colLast\">\n<div class=\"block\">Callback used after a custom Api invocation is executed</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Callback to invoke after processing the ServiceFilters and executing the\n request</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Callback for the user authentication process</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">BuildConfig</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceApplication</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Provides context regarding the application that is using the Mobile Service.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Entry-point for Microsoft Azure Mobile Services interactions</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;E&gt;</td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Summary table, listing enums, and an explanation\">\n<caption><span>Enum Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Enum</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a></td>\n<td class=\"colLast\">\n<div class=\"block\">The list of mobile services features exposed in the HTTP headers of\n requests for telemetry purposes.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Exception Summary table, listing exceptions, and an explanation\">\n<caption><span>Exception Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Exception</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Package</li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">java.util.AbstractCollection&lt;E&gt; (implements java.util.Collection&lt;E&gt;)\n<ul>\n<li type=\"circle\">java.util.AbstractList&lt;E&gt; (implements java.util.List&lt;E&gt;)\n<ul>\n<li type=\"circle\">java.util.ArrayList&lt;E&gt; (implements java.lang.Cloneable, java.util.List&lt;E&gt;, java.util.RandomAccess, java.io.Serializable)\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceList</span></a>&lt;E&gt;</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"../../../../com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">BuildConfig</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceApplication</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceClient</span></a></li>\n<li type=\"circle\">java.lang.Throwable (implements java.io.Serializable)\n<ul>\n<li type=\"circle\">java.lang.Exception\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceException</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h2 title=\"Interface Hierarchy\">Interface Hierarchy</h2>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">ApiJsonOperationCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"../../../../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">ApiOperationCallback</span></a>&lt;E&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"../../../../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">ServiceFilterResponseCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"../../../../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">UserAuthenticationCallback</span></a></li>\n</ul>\n<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceFeatures</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li><a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.authentication\">com.microsoft.windowsazure.mobileservices.authentication</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.http\">com.microsoft.windowsazure.mobileservices.http</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync\">com.microsoft.windowsazure.mobileservices.table.sync</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.operations\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> used by <a href=\"../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/ApiJsonOperationCallback.html#com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a>\n<div class=\"block\">Callback used after a custom Api invocation is executed using JSON</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/ApiOperationCallback.html#com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a>\n<div class=\"block\">Callback used after a custom Api invocation is executed</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceClient.html#com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>\n<div class=\"block\">Entry-point for Microsoft Azure Mobile Services interactions</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceFeatures.html#com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>\n<div class=\"block\">The list of mobile services features exposed in the HTTP headers of\n requests for telemetry purposes.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/ServiceFilterResponseCallback.html#com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a>\n<div class=\"block\">Callback to invoke after processing the ServiceFilters and executing the\n request</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/UserAuthenticationCallback.html#com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a>\n<div class=\"block\">Callback for the user authentication process</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.authentication\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> used by <a href=\"../../../../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceClient.html#com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceClient</a>\n<div class=\"block\">Entry-point for Microsoft Azure Mobile Services interactions</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/UserAuthenticationCallback.html#com.microsoft.windowsazure.mobileservices.authentication\">UserAuthenticationCallback</a>\n<div class=\"block\">Callback for the user authentication process</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.http\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> used by <a href=\"../../../../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceClient.html#com.microsoft.windowsazure.mobileservices.http\">MobileServiceClient</a>\n<div class=\"block\">Entry-point for Microsoft Azure Mobile Services interactions</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceFeatures.html#com.microsoft.windowsazure.mobileservices.http\">MobileServiceFeatures</a>\n<div class=\"block\">The list of mobile services features exposed in the HTTP headers of\n requests for telemetry purposes.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/ServiceFilterResponseCallback.html#com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponseCallback</a>\n<div class=\"block\">Callback to invoke after processing the ServiceFilters and executing the\n request</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.notifications\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> used by <a href=\"../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceClient.html#com.microsoft.windowsazure.mobileservices.notifications\">MobileServiceClient</a>\n<div class=\"block\">Entry-point for Microsoft Azure Mobile Services interactions</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> used by <a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceClient.html#com.microsoft.windowsazure.mobileservices.table\">MobileServiceClient</a>\n<div class=\"block\">Entry-point for Microsoft Azure Mobile Services interactions</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceException.html#com.microsoft.windowsazure.mobileservices.table\">MobileServiceException</a>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceList.html#com.microsoft.windowsazure.mobileservices.table\">MobileServiceList</a>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> used by <a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceException.html#com.microsoft.windowsazure.mobileservices.table.query\">MobileServiceException</a>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceList.html#com.microsoft.windowsazure.mobileservices.table.query\">MobileServiceList</a>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> used by <a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceClient.html#com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceClient</a>\n<div class=\"block\">Entry-point for Microsoft Azure Mobile Services interactions</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceList.html#com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceList</a>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> used by <a href=\"../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../com/microsoft/windowsazure/mobileservices/class-use/MobileServiceClient.html#com.microsoft.windowsazure.mobileservices.table.sync.operations\">MobileServiceClient</a>\n<div class=\"block\">Entry-point for Microsoft Azure Mobile Services interactions</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../index.html?com/microsoft/windowsazure/mobileservices/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>MobileServiceJsonTable</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceJsonTable\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":42,\"i5\":42,\"i6\":10,\"i7\":10,\"i8\":42,\"i9\":42,\"i10\":10,\"i11\":10,\"i12\":10,\"i13\":10,\"i14\":10,\"i15\":42,\"i16\":42,\"i17\":10,\"i18\":10,\"i19\":42,\"i20\":42,\"i21\":10,\"i22\":10,\"i23\":10,\"i24\":10,\"i25\":10,\"i26\":10,\"i27\":10,\"i28\":10,\"i29\":42,\"i30\":42,\"i31\":10,\"i32\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"],32:[\"t6\",\"Deprecated Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceJsonTable.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceJsonTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table</div>\n<h2 title=\"Class MobileServiceJsonTable\" class=\"title\">Class MobileServiceJsonTable</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public final class <span class=\"typeNameLabel\">MobileServiceJsonTable</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Represents a Mobile Service Table</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== FIELD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.summary\">\n<!--   -->\n</a>\n<h3>Field Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Field Summary table, listing fields, and an explanation\">\n<caption><span>Fields</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Field and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#TABLES_URL\">TABLES_URL</a></span></code>\n<div class=\"block\">Tables URI part</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#MobileServiceJsonTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceJsonTable</a></span>(java.lang.String&nbsp;name,\n                      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor for MobileServiceJsonTable</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">Deprecated Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#addFeature-com.microsoft.windowsazure.mobileservices.MobileServiceFeatures-\">addFeature</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&nbsp;feature)</code>\n<div class=\"block\">Adds a feature which will be sent in telemetry headers for all requests\n made by this table</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;&lt;any&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#addSystemProperties-java.util.EnumSet-java.util.List-\">addSystemProperties</a></span>(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties,\n                   java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Adds the tables requested system properties to the parameters collection.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#delete-java.lang.Object-\">delete</a></span>(java.lang.Object&nbsp;element)</code>\n<div class=\"block\">Deletes an entity from a Mobile Service Table</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#delete-java.lang.Object-java.util.List-\">delete</a></span>(java.lang.Object&nbsp;elementOrId,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Deletes an entity from a Mobile Service Table using a given id</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#delete-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback-\">delete</a></span>(java.lang.Object&nbsp;elementOrId,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableDeleteCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>delete(Object elementOrId, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#delete-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback-\">delete</a></span>(java.lang.Object&nbsp;element,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableDeleteCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>MobileServiceTableBase.delete(Object elementOrId)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute--\">execute</a></span>()</code>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">execute</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Retrieves a set of rows from the table using a query</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">execute</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query,\n       <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>execute(final Query query)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i9\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">execute</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute--\"><code>execute()</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i10\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#getSystemProperties--\">getSystemProperties</a></span>()</code>\n<div class=\"block\">Returns the set of enabled System Properties</div>\n</td>\n</tr>\n<tr id=\"i11\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#getTableName--\">getTableName</a></span>()</code>\n<div class=\"block\">Returns the name of the represented table</div>\n</td>\n</tr>\n<tr id=\"i12\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#includeInlineCount--\">includeInlineCount</a></span>()</code>\n<div class=\"block\">Include a property with the number of records returned.</div>\n</td>\n</tr>\n<tr id=\"i13\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#insert-com.google.gson.JsonObject-\">insert</a></span>(com.google.gson.JsonObject&nbsp;element)</code>\n<div class=\"block\">Inserts a JsonObject into a Mobile Service table</div>\n</td>\n</tr>\n<tr id=\"i14\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#insert-com.google.gson.JsonObject-java.util.List-\">insert</a></span>(com.google.gson.JsonObject&nbsp;element,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Inserts a JsonObject into a Mobile Service Table</div>\n</td>\n</tr>\n<tr id=\"i15\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#insert-com.google.gson.JsonObject-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">insert</a></span>(com.google.gson.JsonObject&nbsp;element,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final JsonObject element, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i16\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#insert-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">insert</a></span>(com.google.gson.JsonObject&nbsp;element,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final JsonObject element)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i17\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-\">lookUp</a></span>(java.lang.Object&nbsp;id)</code>\n<div class=\"block\">Looks up a row in the table and retrieves its JSON value.</div>\n</td>\n</tr>\n<tr id=\"i18\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-java.util.List-\">lookUp</a></span>(java.lang.Object&nbsp;id,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Looks up a row in the table and retrieves its JSON value.</div>\n</td>\n</tr>\n<tr id=\"i19\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">lookUp</a></span>(java.lang.Object&nbsp;id,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>lookUp(Object id, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i20\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">lookUp</a></span>(java.lang.Object&nbsp;id,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-\"><code>lookUp(Object id)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i21\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>\n<div class=\"block\">Creates a query with the specified order</div>\n</td>\n</tr>\n<tr id=\"i22\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#parameter-java.lang.String-java.lang.String-\">parameter</a></span>(java.lang.String&nbsp;parameter,\n         java.lang.String&nbsp;value)</code>\n<div class=\"block\">Adds a new user-defined parameter to the query</div>\n</td>\n</tr>\n<tr id=\"i23\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#select-java.lang.String...-\">select</a></span>(java.lang.String...&nbsp;fields)</code>\n<div class=\"block\">Specifies the fields to retrieve</div>\n</td>\n</tr>\n<tr id=\"i24\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#setSystemProperties-java.util.EnumSet-\">setSystemProperties</a></span>(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties)</code>\n<div class=\"block\">Sets the set of enabled System Properties</div>\n</td>\n</tr>\n<tr id=\"i25\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#skip-int-\">skip</a></span>(int&nbsp;skip)</code>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n</td>\n</tr>\n<tr id=\"i26\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#top-int-\">top</a></span>(int&nbsp;top)</code>\n<div class=\"block\">Sets the number of records to return</div>\n</td>\n</tr>\n<tr id=\"i27\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#update-com.google.gson.JsonObject-\">update</a></span>(com.google.gson.JsonObject&nbsp;element)</code>\n<div class=\"block\">Updates an element from a Mobile Service Table</div>\n</td>\n</tr>\n<tr id=\"i28\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#update-com.google.gson.JsonObject-java.util.List-\">update</a></span>(com.google.gson.JsonObject&nbsp;element,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Updates an element from a Mobile Service Table</div>\n</td>\n</tr>\n<tr id=\"i29\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#update-com.google.gson.JsonObject-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">update</a></span>(com.google.gson.JsonObject&nbsp;element,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final JsonObject element, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i30\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#update-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">update</a></span>(com.google.gson.JsonObject&nbsp;element,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final JsonObject element)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i31\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#where--\">where</a></span>()</code>\n<div class=\"block\">Starts a filter to query the table</div>\n</td>\n</tr>\n<tr id=\"i32\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#where-com.microsoft.windowsazure.mobileservices.table.query.Query-\">where</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Starts a filter to query the table with an existing filter</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ FIELD DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.detail\">\n<!--   -->\n</a>\n<h3>Field Detail</h3>\n<a name=\"TABLES_URL\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>TABLES_URL</h4>\n<pre>public static final&nbsp;java.lang.String TABLES_URL</pre>\n<div class=\"block\">Tables URI part</div>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../../constant-values.html#com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.TABLES_URL\">Constant Field Values</a></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceJsonTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceJsonTable</h4>\n<pre>public&nbsp;MobileServiceJsonTable(java.lang.String&nbsp;name,\n                              <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</pre>\n<div class=\"block\">Constructor for MobileServiceJsonTable</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - The name of the represented table</dd>\n<dd><code>client</code> - The MobileServiceClient used to invoke table operations</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"execute--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;&nbsp;execute()\n                                                                                        throws <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></pre>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n<dl>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"execute-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;void&nbsp;execute(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a>&nbsp;callback)\n             throws <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute--\"><code>execute()</code></a> instead</span></div>\n<div class=\"block\">Executes the query</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;&nbsp;execute(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Retrieves a set of rows from the table using a query</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - The query used to retrieve the rows</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"execute-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;void&nbsp;execute(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query,\n                    <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>execute(final Query query)</code> instead</span></div>\n<div class=\"block\">Retrieves a set of rows from the table using a query</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - The query used to retrieve the rows</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"where--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>where</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;where()</pre>\n<div class=\"block\">Starts a filter to query the table</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The ExecutableJsonQuery representing the filter</dd>\n</dl>\n</li>\n</ul>\n<a name=\"where-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>where</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;where(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Starts a filter to query the table with an existing filter</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - The existing filter</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The ExecutableJsonQuery representing the filter</dd>\n</dl>\n</li>\n</ul>\n<a name=\"parameter-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>parameter</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;parameter(java.lang.String&nbsp;parameter,\n                                     java.lang.String&nbsp;value)</pre>\n<div class=\"block\">Adds a new user-defined parameter to the query</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>parameter</code> - The parameter name</dd>\n<dd><code>value</code> - The parameter value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ExecutableJsonQuery</dd>\n</dl>\n</li>\n</ul>\n<a name=\"orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>orderBy</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;orderBy(java.lang.String&nbsp;field,\n                                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</pre>\n<div class=\"block\">Creates a query with the specified order</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field name</dd>\n<dd><code>order</code> - Sorting order</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ExecutableJsonQuery</dd>\n</dl>\n</li>\n</ul>\n<a name=\"top-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>top</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;top(int&nbsp;top)</pre>\n<div class=\"block\">Sets the number of records to return</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>top</code> - Number of records to return</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ExecutableQuery</dd>\n</dl>\n</li>\n</ul>\n<a name=\"skip-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>skip</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;skip(int&nbsp;skip)</pre>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>skip</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ExecutableJsonQuery</dd>\n</dl>\n</li>\n</ul>\n<a name=\"select-java.lang.String...-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>select</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;select(java.lang.String...&nbsp;fields)</pre>\n<div class=\"block\">Specifies the fields to retrieve</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>fields</code> - Names of the fields to retrieve</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ExecutableJsonQuery</dd>\n</dl>\n</li>\n</ul>\n<a name=\"includeInlineCount--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>includeInlineCount</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;includeInlineCount()</pre>\n<div class=\"block\">Include a property with the number of records returned.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ExecutableJsonQuery</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lookUp-java.lang.Object-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lookUp</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;&nbsp;lookUp(java.lang.Object&nbsp;id)</pre>\n<div class=\"block\">Looks up a row in the table and retrieves its JSON value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - The id of the row</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lookUp-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lookUp</h4>\n<pre>public&nbsp;void&nbsp;lookUp(java.lang.Object&nbsp;id,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-\"><code>lookUp(Object id)</code></a> instead</span></div>\n<div class=\"block\">Looks up a row in the table and retrieves its JSON value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - The id of the row</dd>\n<dd><code>callback</code> - Callback to invoke after the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lookUp-java.lang.Object-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lookUp</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;&nbsp;lookUp(java.lang.Object&nbsp;id,\n                                                                                             java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Looks up a row in the table and retrieves its JSON value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - The id of the row</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lookUp-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lookUp</h4>\n<pre>public&nbsp;void&nbsp;lookUp(java.lang.Object&nbsp;id,\n                   java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>lookUp(Object id, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n<div class=\"block\">Looks up a row in the table and retrieves its JSON value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - The id of the row</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n<dd><code>callback</code> - Callback to invoke after the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"insert-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>insert</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;&nbsp;insert(com.google.gson.JsonObject&nbsp;element)</pre>\n<div class=\"block\">Inserts a JsonObject into a Mobile Service table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The JsonObject to insert</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.IllegalArgumentException</code> - if the element has an id property set with a numeric value\n             other than default (0), or an invalid string value</dd>\n</dl>\n</li>\n</ul>\n<a name=\"insert-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>insert</h4>\n<pre>public&nbsp;void&nbsp;insert(com.google.gson.JsonObject&nbsp;element,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>insert(final JsonObject element)</code> instead</span></div>\n<div class=\"block\">Inserts a JsonObject into a Mobile Service table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The JsonObject to insert</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.IllegalArgumentException</code> - if the element has an id property set with a numeric value\n             other than default (0), or an invalid string value</dd>\n</dl>\n</li>\n</ul>\n<a name=\"insert-com.google.gson.JsonObject-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>insert</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;&nbsp;insert(com.google.gson.JsonObject&nbsp;element,\n                                                                                             java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Inserts a JsonObject into a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The JsonObject to insert</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.IllegalArgumentException</code> - if the element has an id property set with a numeric value\n             other than default (0), or an invalid string value</dd>\n</dl>\n</li>\n</ul>\n<a name=\"insert-com.google.gson.JsonObject-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>insert</h4>\n<pre>public&nbsp;void&nbsp;insert(com.google.gson.JsonObject&nbsp;element,\n                   java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>insert(final JsonObject element, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n<div class=\"block\">Inserts a JsonObject into a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The JsonObject to insert</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.IllegalArgumentException</code> - if the element has an id property set with a numeric value\n             other than default (0), or an invalid string value</dd>\n</dl>\n</li>\n</ul>\n<a name=\"update-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>update</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;&nbsp;update(com.google.gson.JsonObject&nbsp;element)</pre>\n<div class=\"block\">Updates an element from a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The JsonObject to update</dd>\n</dl>\n</li>\n</ul>\n<a name=\"update-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>update</h4>\n<pre>public&nbsp;void&nbsp;update(com.google.gson.JsonObject&nbsp;element,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>update(final JsonObject element)</code> instead</span></div>\n<div class=\"block\">Updates an element from a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The JsonObject to update</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"update-com.google.gson.JsonObject-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>update</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;&nbsp;update(com.google.gson.JsonObject&nbsp;element,\n                                                                                             java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Updates an element from a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The JsonObject to update</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n</dl>\n</li>\n</ul>\n<a name=\"update-com.google.gson.JsonObject-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>update</h4>\n<pre>public&nbsp;void&nbsp;update(com.google.gson.JsonObject&nbsp;element,\n                   java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>update(final JsonObject element, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n<div class=\"block\">Updates an element from a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The JsonObject to update</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"addFeature-com.microsoft.windowsazure.mobileservices.MobileServiceFeatures-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>addFeature</h4>\n<pre>public&nbsp;void&nbsp;addFeature(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&nbsp;feature)</pre>\n<div class=\"block\">Adds a feature which will be sent in telemetry headers for all requests\n made by this table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>feature</code> - The feature that will be sent in requests by this table</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTableName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTableName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getTableName()</pre>\n<div class=\"block\">Returns the name of the represented table</div>\n</li>\n</ul>\n<a name=\"getSystemProperties--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getSystemProperties</h4>\n<pre>public&nbsp;java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;getSystemProperties()</pre>\n<div class=\"block\">Returns the set of enabled System Properties</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#getSystemProperties--\">getSystemProperties</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"setSystemProperties-java.util.EnumSet-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setSystemProperties</h4>\n<pre>public&nbsp;void&nbsp;setSystemProperties(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties)</pre>\n<div class=\"block\">Sets the set of enabled System Properties</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#setSystemProperties-java.util.EnumSet-\">setSystemProperties</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-java.lang.Object-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;delete(java.lang.Object&nbsp;element)</pre>\n<div class=\"block\">Deletes an entity from a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The entity to delete</dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;void&nbsp;delete(java.lang.Object&nbsp;element,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableDeleteCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>MobileServiceTableBase.delete(Object elementOrId)</code> instead</span></div>\n<div class=\"block\">Deletes an entity from a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The entity to delete</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-java.lang.Object-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;delete(java.lang.Object&nbsp;elementOrId,\n                                                                                 java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Deletes an entity from a Mobile Service Table using a given id</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - The id of the entity to delete</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;void&nbsp;delete(java.lang.Object&nbsp;elementOrId,\n                   java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableDeleteCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>delete(Object elementOrId, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n<div class=\"block\">Deletes an entity from a Mobile Service Table using a given id</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - The id of the entity to delete</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"addSystemProperties-java.util.EnumSet-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>addSystemProperties</h4>\n<pre>public&nbsp;java.util.List&lt;&lt;any&gt;&gt;&nbsp;addSystemProperties(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties,\n                                                 java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Adds the tables requested system properties to the parameters collection.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#addSystemProperties-java.util.EnumSet-java.util.List-\">addSystemProperties</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>systemProperties</code> - The system properties to add.</dd>\n<dd><code>parameters</code> - The parameters collection.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The parameters collection with any requested system properties\n         included.</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceJsonTable.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceJsonTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>MobileServicePreconditionFailedException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServicePreconditionFailedException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServicePreconditionFailedException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePreconditionFailedException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table</div>\n<h2 title=\"Class MobileServicePreconditionFailedException\" class=\"title\">Class MobileServicePreconditionFailedException</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Throwable</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Exception</li>\n<li>\n<ul class=\"inheritance\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices.MobileServiceException</a></li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedException</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServicePreconditionFailedException</span>\nextends <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></pre>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../../serialized-form.html#com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedException\">Serialized Form</a></dd>\n</dl>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html#MobileServicePreconditionFailedException-com.microsoft.windowsazure.mobileservices.MobileServiceException-java.lang.Object-\">MobileServicePreconditionFailedException</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a>&nbsp;msException,\n                                        java.lang.Object&nbsp;item)</code>\n<div class=\"block\">Initializes a new instance of the\n MobileServicePreconditionFailedException class.</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.Object</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html#getItem--\">getItem</a></span>()</code>&nbsp;</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html#setItem-java.lang.Object-\">setItem</a></span>(java.lang.Object&nbsp;item)</code>&nbsp;</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.com.microsoft.windowsazure.mobileservices.MobileServiceException\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;com.microsoft.windowsazure.mobileservices.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></h3>\n<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#getResponse--\">getResponse</a>, <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#getServiceResponse-java.lang.Throwable-\">getServiceResponse</a></code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Throwable\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Throwable</h3>\n<code>addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServicePreconditionFailedException-com.microsoft.windowsazure.mobileservices.MobileServiceException-java.lang.Object-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServicePreconditionFailedException</h4>\n<pre>public&nbsp;MobileServicePreconditionFailedException(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a>&nbsp;msException,\n                                                java.lang.Object&nbsp;item)</pre>\n<div class=\"block\">Initializes a new instance of the\n MobileServicePreconditionFailedException class.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>innerException</code> - The inner exception.</dd>\n<dd><code>item</code> - The current instance from the server that the precondition\n            failed for.</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getItem--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getItem</h4>\n<pre>public&nbsp;java.lang.Object&nbsp;getItem()</pre>\n</li>\n</ul>\n<a name=\"setItem-java.lang.Object-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>setItem</h4>\n<pre>public&nbsp;void&nbsp;setItem(java.lang.Object&nbsp;item)</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServicePreconditionFailedException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePreconditionFailedException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>MobileServicePreconditionFailedExceptionBase</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServicePreconditionFailedExceptionBase\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServicePreconditionFailedExceptionBase.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePreconditionFailedExceptionBase.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table</div>\n<h2 title=\"Class MobileServicePreconditionFailedExceptionBase\" class=\"title\">Class MobileServicePreconditionFailedExceptionBase</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Throwable</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Exception</li>\n<li>\n<ul class=\"inheritance\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices.MobileServiceException</a></li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedExceptionBase</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServicePreconditionFailedExceptionBase</span>\nextends <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></pre>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../../serialized-form.html#com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedExceptionBase\">Serialized Form</a></dd>\n</dl>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html#MobileServicePreconditionFailedExceptionBase-com.microsoft.windowsazure.mobileservices.MobileServiceException-com.google.gson.JsonObject-\">MobileServicePreconditionFailedExceptionBase</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a>&nbsp;msException,\n                                            com.google.gson.JsonObject&nbsp;value)</code>\n<div class=\"block\">Initializes a new instance of the\n MobileServicePreconditionFailedExceptionBase class.</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html#getValue--\">getValue</a></span>()</code>&nbsp;</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html#setValue-com.google.gson.JsonObject-\">setValue</a></span>(com.google.gson.JsonObject&nbsp;mValue)</code>&nbsp;</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.com.microsoft.windowsazure.mobileservices.MobileServiceException\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;com.microsoft.windowsazure.mobileservices.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></h3>\n<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#getResponse--\">getResponse</a>, <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#getServiceResponse-java.lang.Throwable-\">getServiceResponse</a></code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Throwable\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Throwable</h3>\n<code>addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServicePreconditionFailedExceptionBase-com.microsoft.windowsazure.mobileservices.MobileServiceException-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServicePreconditionFailedExceptionBase</h4>\n<pre>public&nbsp;MobileServicePreconditionFailedExceptionBase(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a>&nbsp;msException,\n                                                    com.google.gson.JsonObject&nbsp;value)</pre>\n<div class=\"block\">Initializes a new instance of the\n MobileServicePreconditionFailedExceptionBase class.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>throwable</code> - The inner exception.</dd>\n<dd><code>value</code> - The current instance from the server that the precondition\n            failed for.</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getValue--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getValue</h4>\n<pre>public&nbsp;com.google.gson.JsonObject&nbsp;getValue()</pre>\n</li>\n</ul>\n<a name=\"setValue-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>setValue</h4>\n<pre>public&nbsp;void&nbsp;setValue(com.google.gson.JsonObject&nbsp;mValue)</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServicePreconditionFailedExceptionBase.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePreconditionFailedExceptionBase.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>MobileServiceSystemProperty</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceSystemProperty\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":9,\"i1\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceSystemProperty.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSystemProperty.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table</div>\n<h2 title=\"Enum MobileServiceSystemProperty\" class=\"title\">Enum MobileServiceSystemProperty</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Enum&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable, java.lang.Comparable&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public enum <span class=\"typeNameLabel\">MobileServiceSystemProperty</span>\nextends java.lang.Enum&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;</pre>\n<div class=\"block\">The available System Properties in Mobile Service</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== ENUM CONSTANT SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.summary\">\n<!--   -->\n</a>\n<h3>Enum Constant Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Constant Summary table, listing enum constants, and an explanation\">\n<caption><span>Enum Constants</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html#CreatedAt\">CreatedAt</a></span></code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html#UpdatedAt\">UpdatedAt</a></span></code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html#Version\">Version</a></span></code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Enum\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Enum</h3>\n<code>compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>getClass, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ ENUM CONSTANT DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.detail\">\n<!--   -->\n</a>\n<h3>Enum Constant Detail</h3>\n<a name=\"CreatedAt\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>CreatedAt</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a> CreatedAt</pre>\n</li>\n</ul>\n<a name=\"UpdatedAt\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>UpdatedAt</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a> UpdatedAt</pre>\n</li>\n</ul>\n<a name=\"Version\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>Version</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a> Version</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"values--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>values</h4>\n<pre>public static&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>[]&nbsp;values()</pre>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.  This method may be used to iterate\nover the constants as follows:\n<pre>\nfor (MobileServiceSystemProperty c : MobileServiceSystemProperty.values())\n&nbsp;   System.out.println(c);\n</pre></div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>an array containing the constants of this enum type, in the order they are declared</dd>\n</dl>\n</li>\n</ul>\n<a name=\"valueOf-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>valueOf</h4>\n<pre>public static&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&nbsp;valueOf(java.lang.String&nbsp;name)</pre>\n<div class=\"block\">Returns the enum constant of this type with the specified name.\nThe string must match <i>exactly</i> an identifier used to declare an\nenum constant in this type.  (Extraneous whitespace characters are \nnot permitted.)</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - the name of the enum constant to be returned.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the enum constant with the specified name</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.IllegalArgumentException</code> - if this enum type has no constant with the specified name</dd>\n<dd><code>java.lang.NullPointerException</code> - if the argument is null</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceSystemProperty.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSystemProperty.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>MobileServiceTable</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceTable\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":42,\"i5\":42,\"i6\":10,\"i7\":10,\"i8\":42,\"i9\":42,\"i10\":10,\"i11\":10,\"i12\":10,\"i13\":10,\"i14\":10,\"i15\":42,\"i16\":42,\"i17\":10,\"i18\":10,\"i19\":42,\"i20\":42,\"i21\":10,\"i22\":10,\"i23\":10,\"i24\":10,\"i25\":10,\"i26\":10,\"i27\":10,\"i28\":10,\"i29\":42,\"i30\":42,\"i31\":10,\"i32\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"],32:[\"t6\",\"Deprecated Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceTable.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table</div>\n<h2 title=\"Class MobileServiceTable\" class=\"title\">Class MobileServiceTable&lt;E&gt;</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.MobileServiceTable&lt;E&gt;</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public final class <span class=\"typeNameLabel\">MobileServiceTable&lt;E&gt;</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Represents a Mobile Service Table</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== FIELD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.summary\">\n<!--   -->\n</a>\n<h3>Field Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Field Summary table, listing fields, and an explanation\">\n<caption><span>Fields</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Field and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#TABLES_URL\">TABLES_URL</a></span></code>\n<div class=\"block\">Tables URI part</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#MobileServiceTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-java.lang.Class-\">MobileServiceTable</a></span>(java.lang.String&nbsp;name,\n                  <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client,\n                  java.lang.Class&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;clazz)</code>\n<div class=\"block\">Constructor for MobileServiceTable</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">Deprecated Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#addFeature-com.microsoft.windowsazure.mobileservices.MobileServiceFeatures-\">addFeature</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&nbsp;feature)</code>\n<div class=\"block\">Adds a feature which will be sent in telemetry headers for all requests\n made by this table</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;&lt;any&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#addSystemProperties-java.util.EnumSet-java.util.List-\">addSystemProperties</a></span>(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties,\n                   java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Adds the tables requested system properties to the parameters collection.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#delete-java.lang.Object-\">delete</a></span>(java.lang.Object&nbsp;element)</code>\n<div class=\"block\">Deletes an entity from a Mobile Service Table</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#delete-java.lang.Object-java.util.List-\">delete</a></span>(java.lang.Object&nbsp;elementOrId,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Deletes an entity from a Mobile Service Table using a given id</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#delete-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback-\">delete</a></span>(java.lang.Object&nbsp;elementOrId,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableDeleteCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>delete(Object elementOrId, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#delete-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback-\">delete</a></span>(java.lang.Object&nbsp;element,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableDeleteCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>MobileServiceTableBase.delete(Object elementOrId)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute--\">execute</a></span>()</code>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">execute</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">execute</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query,\n       <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\"><code>execute(Query query)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i9\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">execute</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute--\"><code>execute()</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i10\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#getSystemProperties--\">getSystemProperties</a></span>()</code>\n<div class=\"block\">Returns the set of enabled System Properties</div>\n</td>\n</tr>\n<tr id=\"i11\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#getTableName--\">getTableName</a></span>()</code>\n<div class=\"block\">Returns the name of the represented table</div>\n</td>\n</tr>\n<tr id=\"i12\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#includeInlineCount--\">includeInlineCount</a></span>()</code>\n<div class=\"block\">Include a property with the number of records returned.</div>\n</td>\n</tr>\n<tr id=\"i13\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#insert-E-\">insert</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element)</code>\n<div class=\"block\">Inserts an entity into a Mobile Service Table</div>\n</td>\n</tr>\n<tr id=\"i14\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#insert-E-java.util.List-\">insert</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Inserts an entity into a Mobile Service Table</div>\n</td>\n</tr>\n<tr id=\"i15\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#insert-E-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">insert</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final E element, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i16\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#insert-E-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">insert</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final E element)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i17\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-\">lookUp</a></span>(java.lang.Object&nbsp;id)</code>\n<div class=\"block\">Looks up a row in the table.</div>\n</td>\n</tr>\n<tr id=\"i18\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-java.util.List-\">lookUp</a></span>(java.lang.Object&nbsp;id,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Looks up a row in the table.</div>\n</td>\n</tr>\n<tr id=\"i19\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">lookUp</a></span>(java.lang.Object&nbsp;id,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>lookUp(Object id, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i20\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">lookUp</a></span>(java.lang.Object&nbsp;id,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-\"><code>lookUp(Object id)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i21\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>\n<div class=\"block\">Creates a query with the specified order</div>\n</td>\n</tr>\n<tr id=\"i22\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#parameter-java.lang.String-java.lang.String-\">parameter</a></span>(java.lang.String&nbsp;parameter,\n         java.lang.String&nbsp;value)</code>\n<div class=\"block\">Adds a new user-defined parameter to the query</div>\n</td>\n</tr>\n<tr id=\"i23\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#select-java.lang.String...-\">select</a></span>(java.lang.String...&nbsp;fields)</code>\n<div class=\"block\">Specifies the fields to retrieve</div>\n</td>\n</tr>\n<tr id=\"i24\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#setSystemProperties-java.util.EnumSet-\">setSystemProperties</a></span>(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties)</code>\n<div class=\"block\">Sets the set of enabled System Properties</div>\n</td>\n</tr>\n<tr id=\"i25\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#skip-int-\">skip</a></span>(int&nbsp;skip)</code>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n</td>\n</tr>\n<tr id=\"i26\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#top-int-\">top</a></span>(int&nbsp;top)</code>\n<div class=\"block\">Sets the number of records to return</div>\n</td>\n</tr>\n<tr id=\"i27\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#update-E-\">update</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element)</code>\n<div class=\"block\">Updates an entity from a Mobile Service Table</div>\n</td>\n</tr>\n<tr id=\"i28\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#update-E-java.util.List-\">update</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</code>\n<div class=\"block\">Updates an entity from a Mobile Service Table</div>\n</td>\n</tr>\n<tr id=\"i29\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#update-E-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">update</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final E element, final List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i30\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#update-E-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">update</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n      <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final E element)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i31\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#where--\">where</a></span>()</code>\n<div class=\"block\">Starts a filter to query the table</div>\n</td>\n</tr>\n<tr id=\"i32\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#where-com.microsoft.windowsazure.mobileservices.table.query.Query-\">where</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Starts a filter to query the table with an existing filter</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ FIELD DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"field.detail\">\n<!--   -->\n</a>\n<h3>Field Detail</h3>\n<a name=\"TABLES_URL\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>TABLES_URL</h4>\n<pre>public static final&nbsp;java.lang.String TABLES_URL</pre>\n<div class=\"block\">Tables URI part</div>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../../constant-values.html#com.microsoft.windowsazure.mobileservices.table.MobileServiceTable.TABLES_URL\">Constant Field Values</a></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-java.lang.Class-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceTable</h4>\n<pre>public&nbsp;MobileServiceTable(java.lang.String&nbsp;name,\n                          <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client,\n                          java.lang.Class&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;clazz)</pre>\n<div class=\"block\">Constructor for MobileServiceTable</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - The name of the represented table</dd>\n<dd><code>client</code> - The MobileServiceClient used to invoke table operations</dd>\n<dd><code>clazz</code> - The class used for data serialization</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getSystemProperties--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getSystemProperties</h4>\n<pre>public&nbsp;java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;getSystemProperties()</pre>\n<div class=\"block\">Returns the set of enabled System Properties</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#getSystemProperties--\">getSystemProperties</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"setSystemProperties-java.util.EnumSet-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setSystemProperties</h4>\n<pre>public&nbsp;void&nbsp;setSystemProperties(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties)</pre>\n<div class=\"block\">Sets the set of enabled System Properties</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#setSystemProperties-java.util.EnumSet-\">setSystemProperties</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"execute--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&gt;&nbsp;execute()\n                                                                                 throws <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></pre>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n<dl>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"execute-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;void&nbsp;execute(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)\n             throws <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute--\"><code>execute()</code></a> instead</span></div>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&gt;&nbsp;execute(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - The Query instance to execute</dd>\n</dl>\n</li>\n</ul>\n<a name=\"execute-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;void&nbsp;execute(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query,\n                    <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\"><code>execute(Query query)</code></a> instead</span></div>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - The MobileServiceQuery instance to execute</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"where--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>where</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;where()</pre>\n<div class=\"block\">Starts a filter to query the table</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The ExecutableQuery<E> representing the filter</dd>\n</dl>\n</li>\n</ul>\n<a name=\"where-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>where</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;where(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Starts a filter to query the table with an existing filter</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - The existing filter</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The ExecutableQuery<E> representing the filter</dd>\n</dl>\n</li>\n</ul>\n<a name=\"parameter-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>parameter</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;parameter(java.lang.String&nbsp;parameter,\n                                    java.lang.String&nbsp;value)</pre>\n<div class=\"block\">Adds a new user-defined parameter to the query</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>parameter</code> - The parameter name</dd>\n<dd><code>value</code> - The parameter value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ExecutableQuery</dd>\n</dl>\n</li>\n</ul>\n<a name=\"orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>orderBy</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;orderBy(java.lang.String&nbsp;field,\n                                  <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</pre>\n<div class=\"block\">Creates a query with the specified order</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field name</dd>\n<dd><code>order</code> - Sorting order</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ExecutableQuery</dd>\n</dl>\n</li>\n</ul>\n<a name=\"top-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>top</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;top(int&nbsp;top)</pre>\n<div class=\"block\">Sets the number of records to return</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>top</code> - Number of records to return</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ExecutableQuery</dd>\n</dl>\n</li>\n</ul>\n<a name=\"skip-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>skip</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;skip(int&nbsp;skip)</pre>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>skip</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ExecutableQuery</dd>\n</dl>\n</li>\n</ul>\n<a name=\"select-java.lang.String...-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>select</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;select(java.lang.String...&nbsp;fields)</pre>\n<div class=\"block\">Specifies the fields to retrieve</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>fields</code> - Names of the fields to retrieve</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ExecutableQuery</dd>\n</dl>\n</li>\n</ul>\n<a name=\"includeInlineCount--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>includeInlineCount</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;includeInlineCount()</pre>\n<div class=\"block\">Include a property with the number of records returned.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>ExecutableQuery</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lookUp-java.lang.Object-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lookUp</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;lookUp(java.lang.Object&nbsp;id)</pre>\n<div class=\"block\">Looks up a row in the table.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - The id of the row</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lookUp-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lookUp</h4>\n<pre>public&nbsp;void&nbsp;lookUp(java.lang.Object&nbsp;id,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-\"><code>lookUp(Object id)</code></a> instead</span></div>\n<div class=\"block\">Looks up a row in the table.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - The id of the row</dd>\n<dd><code>callback</code> - Callback to invoke after the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lookUp-java.lang.Object-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lookUp</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;lookUp(java.lang.Object&nbsp;id,\n                                                                    java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Looks up a row in the table.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - The id of the row</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lookUp-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lookUp</h4>\n<pre>public&nbsp;void&nbsp;lookUp(java.lang.Object&nbsp;id,\n                   java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>lookUp(Object id, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n<div class=\"block\">Looks up a row in the table.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - The id of the row</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n<dd><code>callback</code> - Callback to invoke after the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"insert-java.lang.Object-\">\n<!--   -->\n</a><a name=\"insert-E-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>insert</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;insert(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element)</pre>\n<div class=\"block\">Inserts an entity into a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The entity to insert</dd>\n</dl>\n</li>\n</ul>\n<a name=\"insert-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">\n<!--   -->\n</a><a name=\"insert-E-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>insert</h4>\n<pre>public&nbsp;void&nbsp;insert(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>insert(final E element)</code> instead</span></div>\n<div class=\"block\">Inserts an entity into a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The entity to insert</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"insert-java.lang.Object-java.util.List-\">\n<!--   -->\n</a><a name=\"insert-E-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>insert</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;insert(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n                                                                    java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Inserts an entity into a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The entity to insert</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"insert-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">\n<!--   -->\n</a><a name=\"insert-E-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>insert</h4>\n<pre>public&nbsp;void&nbsp;insert(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n                   java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>insert(final E element, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n<div class=\"block\">Inserts an entity into a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The entity to insert</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"update-java.lang.Object-\">\n<!--   -->\n</a><a name=\"update-E-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>update</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;update(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element)</pre>\n<div class=\"block\">Updates an entity from a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The entity to update</dd>\n</dl>\n</li>\n</ul>\n<a name=\"update-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">\n<!--   -->\n</a><a name=\"update-E-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>update</h4>\n<pre>public&nbsp;void&nbsp;update(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>update(final E element)</code> instead</span></div>\n<div class=\"block\">Updates an entity from a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The entity to update</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"update-java.lang.Object-java.util.List-\">\n<!--   -->\n</a><a name=\"update-E-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>update</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;update(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n                                                                    java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Updates an entity from a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The entity to update</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"update-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">\n<!--   -->\n</a><a name=\"update-E-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>update</h4>\n<pre>public&nbsp;void&nbsp;update(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n                   java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>update(final E element, final List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n<div class=\"block\">Updates an entity from a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The entity to update</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"addFeature-com.microsoft.windowsazure.mobileservices.MobileServiceFeatures-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>addFeature</h4>\n<pre>public&nbsp;void&nbsp;addFeature(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a>&nbsp;feature)</pre>\n<div class=\"block\">Adds a feature which will be sent in telemetry headers for all requests\n made by this table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>feature</code> - The feature that will be sent in requests by this table</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTableName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTableName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getTableName()</pre>\n<div class=\"block\">Returns the name of the represented table</div>\n</li>\n</ul>\n<a name=\"delete-java.lang.Object-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;delete(java.lang.Object&nbsp;element)</pre>\n<div class=\"block\">Deletes an entity from a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The entity to delete</dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;void&nbsp;delete(java.lang.Object&nbsp;element,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableDeleteCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>MobileServiceTableBase.delete(Object elementOrId)</code> instead</span></div>\n<div class=\"block\">Deletes an entity from a Mobile Service Table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>element</code> - The entity to delete</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-java.lang.Object-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;delete(java.lang.Object&nbsp;elementOrId,\n                                                                                 java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Deletes an entity from a Mobile Service Table using a given id</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - The id of the entity to delete</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;void&nbsp;delete(java.lang.Object&nbsp;elementOrId,\n                   java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n                   <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableDeleteCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <code>delete(Object elementOrId, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n<div class=\"block\">Deletes an entity from a Mobile Service Table using a given id</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - The id of the entity to delete</dd>\n<dd><code>parameters</code> - A list of user-defined parameters and values to include in the\n            request URI query string</dd>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"addSystemProperties-java.util.EnumSet-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>addSystemProperties</h4>\n<pre>public&nbsp;java.util.List&lt;&lt;any&gt;&gt;&nbsp;addSystemProperties(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties,\n                                                 java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters)</pre>\n<div class=\"block\">Adds the tables requested system properties to the parameters collection.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#addSystemProperties-java.util.EnumSet-java.util.List-\">addSystemProperties</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>systemProperties</code> - The system properties to add.</dd>\n<dd><code>parameters</code> - The parameters collection.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The parameters collection with any requested system properties\n         included.</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceTable.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#field.summary\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#field.detail\">Field</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>MobileServiceTableSystemPropertiesProvider</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceTableSystemPropertiesProvider\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6,\"i1\":6,\"i2\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceTableSystemPropertiesProvider.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceTableSystemPropertiesProvider.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table</div>\n<h2 title=\"Interface MobileServiceTableSystemPropertiesProvider\" class=\"title\">Interface MobileServiceTableSystemPropertiesProvider</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Known Implementing Classes:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a>, <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">MobileServiceTableSystemPropertiesProvider</span></pre>\n<div class=\"block\">Interface used to decouple the table implementation from the query writers.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;&lt;any&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#addSystemProperties-java.util.EnumSet-java.util.List-\">addSystemProperties</a></span>(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties,\n                   java.util.List&lt;&lt;any&gt;&gt;&nbsp;existingProperties)</code>\n<div class=\"block\">Adds the tables requested system properties to the parameters collection.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#getSystemProperties--\">getSystemProperties</a></span>()</code>\n<div class=\"block\">Returns the set of enabled System Properties</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#setSystemProperties-java.util.EnumSet-\">setSystemProperties</a></span>(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties)</code>\n<div class=\"block\">Sets the set of enabled system properties</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getSystemProperties--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getSystemProperties</h4>\n<pre>java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;getSystemProperties()</pre>\n<div class=\"block\">Returns the set of enabled System Properties</div>\n</li>\n</ul>\n<a name=\"setSystemProperties-java.util.EnumSet-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setSystemProperties</h4>\n<pre>void&nbsp;setSystemProperties(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties)</pre>\n<div class=\"block\">Sets the set of enabled system properties</div>\n</li>\n</ul>\n<a name=\"addSystemProperties-java.util.EnumSet-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>addSystemProperties</h4>\n<pre>java.util.List&lt;&lt;any&gt;&gt;&nbsp;addSystemProperties(java.util.EnumSet&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties,\n                                          java.util.List&lt;&lt;any&gt;&gt;&nbsp;existingProperties)</pre>\n<div class=\"block\">Adds the tables requested system properties to the parameters collection.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>systemProperties</code> - The system properties to add.</dd>\n<dd><code>parameters</code> - The parameters collection.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The parameters collection with any requested system properties\n         included.</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceTableSystemPropertiesProvider.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceTableSystemPropertiesProvider.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>TableDeleteCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"TableDeleteCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableDeleteCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableDeleteCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table</div>\n<h2 title=\"Interface TableDeleteCallback\" class=\"title\">Interface TableDeleteCallback</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">TableDeleteCallback</span></pre>\n<div class=\"block\">Callback to invoke after executing a delete operation</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html#onCompleted-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onCompleted-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onCompleted</h4>\n<pre>void&nbsp;onCompleted(java.lang.Exception&nbsp;exception,\n                 <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</pre>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exception</code> - An exception representing the error, in case there was one</dd>\n<dd><code>response</code> - Response object</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableDeleteCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableDeleteCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>TableJsonOperationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"TableJsonOperationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableJsonOperationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableJsonOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table</div>\n<h2 title=\"Interface TableJsonOperationCallback\" class=\"title\">Interface TableJsonOperationCallback</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Superinterfaces:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;com.google.gson.JsonObject&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">TableJsonOperationCallback</span>\nextends <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;com.google.gson.JsonObject&gt;</pre>\n<div class=\"block\">Callback used after a TableOperation is executed using JSON</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.com.microsoft.windowsazure.mobileservices.table.TableOperationCallback\">\n<!--   -->\n</a>\n<h3>Methods inherited from interface&nbsp;com.microsoft.windowsazure.mobileservices.table.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a></h3>\n<code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html#onCompleted-E-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableJsonOperationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableJsonOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>TableJsonQueryCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"TableJsonQueryCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableJsonQueryCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableJsonQueryCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table</div>\n<h2 title=\"Interface TableJsonQueryCallback\" class=\"title\">Interface TableJsonQueryCallback</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">TableJsonQueryCallback</span></pre>\n<div class=\"block\">Callback used after a query is executed using JSON</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html#onCompleted-com.google.gson.JsonElement-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(com.google.gson.JsonElement&nbsp;result,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onCompleted-com.google.gson.JsonElement-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onCompleted</h4>\n<pre>void&nbsp;onCompleted(com.google.gson.JsonElement&nbsp;result,\n                 java.lang.Exception&nbsp;exception,\n                 <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</pre>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>result</code> - JSON result</dd>\n<dd><code>exception</code> - An exception representing the error, in case there was one</dd>\n<dd><code>response</code> - Response object</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableJsonQueryCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableJsonQueryCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>TableOperationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"TableOperationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableOperationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table</div>\n<h2 title=\"Interface TableOperationCallback\" class=\"title\">Interface TableOperationCallback&lt;E&gt;</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt><span class=\"paramLabel\">Type Parameters:</span></dt>\n<dd><code>E</code> - The table's entity</dd>\n</dl>\n<dl>\n<dt>All Known Subinterfaces:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">TableOperationCallback&lt;E&gt;</span></pre>\n<div class=\"block\">Callback used after a TableOperation is executed</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html#onCompleted-E-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"type parameter in TableOperationCallback\">E</a>&nbsp;entity,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onCompleted-java.lang.Object-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">\n<!--   -->\n</a><a name=\"onCompleted-E-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onCompleted</h4>\n<pre>void&nbsp;onCompleted(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"type parameter in TableOperationCallback\">E</a>&nbsp;entity,\n                 java.lang.Exception&nbsp;exception,\n                 <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</pre>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>entity</code> - The obtained entity</dd>\n<dd><code>exception</code> - An exception representing the error, in case there was one</dd>\n<dd><code>response</code> - Response object</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableOperationCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>TableQueryCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"TableQueryCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableQueryCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableQueryCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table</div>\n<h2 title=\"Interface TableQueryCallback\" class=\"title\">Interface TableQueryCallback&lt;E&gt;</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">TableQueryCallback&lt;E&gt;</span></pre>\n<div class=\"block\">Callback used after a query is executed</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html#onCompleted-java.util.List-int-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted</a></span>(java.util.List&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"type parameter in TableQueryCallback\">E</a>&gt;&nbsp;result,\n           int&nbsp;count,\n           java.lang.Exception&nbsp;exception,\n           <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</code>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"onCompleted-java.util.List-int-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onCompleted</h4>\n<pre>void&nbsp;onCompleted(java.util.List&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"type parameter in TableQueryCallback\">E</a>&gt;&nbsp;result,\n                 int&nbsp;count,\n                 java.lang.Exception&nbsp;exception,\n                 <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>&nbsp;response)</pre>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>result</code> - List of entities</dd>\n<dd><code>count</code> - Number of results</dd>\n<dd><code>exception</code> - An exception representing the error, in case there was one</dd>\n<dd><code>response</code> - Response object</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableQueryCallback.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableQueryCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceJsonTable.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceJsonTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceJsonTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getTable-java.lang.String-\">getTable</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Creates a MobileServiceJsonTable</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#setTable-com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable-\">setTable</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a>&nbsp;table)</code>\n<div class=\"block\">Sets the MobileServiceJsonTable to query</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceJsonTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceJsonTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/class-use/MobileServicePreconditionFailedException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/MobileServicePreconditionFailedException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePreconditionFailedException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedException\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedException</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedException</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/MobileServicePreconditionFailedException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePreconditionFailedException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/class-use/MobileServicePreconditionFailedExceptionBase.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedExceptionBase</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedExceptionBase\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/MobileServicePreconditionFailedExceptionBase.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePreconditionFailedExceptionBase.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedExceptionBase\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedExceptionBase</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedExceptionBase</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/MobileServicePreconditionFailedExceptionBase.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePreconditionFailedExceptionBase.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceSystemProperty.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceSystemProperty.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSystemProperty.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSystemProperty.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>[]</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSystemProperty.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> that return types with arguments of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.EnumSet&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTableSystemPropertiesProvider.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#getSystemProperties--\">getSystemProperties</a></span>()</code>\n<div class=\"block\">Returns the set of enabled System Properties</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>java.util.EnumSet&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#getSystemProperties--\">getSystemProperties</a></span>()</code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Method parameters in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> with type arguments of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;&lt;any&gt;&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTableSystemPropertiesProvider.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#addSystemProperties-java.util.EnumSet-java.util.List-\">addSystemProperties</a></span>(java.util.EnumSet&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties,\n                   java.util.List&lt;&lt;any&gt;&gt;&nbsp;existingProperties)</code>\n<div class=\"block\">Adds the tables requested system properties to the parameters collection.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTableSystemPropertiesProvider.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#setSystemProperties-java.util.EnumSet-\">setSystemProperties</a></span>(java.util.EnumSet&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties)</code>\n<div class=\"block\">Sets the set of enabled system properties</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#setSystemProperties-java.util.EnumSet-\">setSystemProperties</a></span>(java.util.EnumSet&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>&gt;&nbsp;systemProperties)</code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceSystemProperty.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSystemProperty.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceTable.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServiceTable</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServiceTable\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.MobileServiceTable\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.MobileServiceTable</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a>&lt;E&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getTable-java.lang.Class-\">getTable</a></span>(java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Creates a MobileServiceTable</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a>&lt;E&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getTable-java.lang.String-java.lang.Class-\">getTable</a></span>(java.lang.String&nbsp;name,\n        java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Creates a MobileServiceTable</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#setTable-com.microsoft.windowsazure.mobileservices.table.MobileServiceTable-\">setTable</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;table)</code>\n<div class=\"block\">Sets the MobileServiceTable<E> to query</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceTableSystemPropertiesProvider.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.table.MobileServiceTableSystemPropertiesProvider</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.MobileServiceTableSystemPropertiesProvider\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceTableSystemPropertiesProvider.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceTableSystemPropertiesProvider.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.MobileServiceTableSystemPropertiesProvider\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.table.MobileServiceTableSystemPropertiesProvider</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> that implement <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></span></code>\n<div class=\"block\">Represents a Mobile Service Table</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a>&lt;E&gt;</span></code>\n<div class=\"block\">Represents a Mobile Service Table</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryODataWriter.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html#getRowSetModifiers-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.MobileServiceTableSystemPropertiesProvider-\">getRowSetModifiers</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query,\n                  <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a>&nbsp;table)</code>\n<div class=\"block\">Returns the OData string representation of the rowset's modifiers</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceTableSystemPropertiesProvider.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceTableSystemPropertiesProvider.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/class-use/TableDeleteCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/TableDeleteCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableDeleteCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/TableDeleteCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableDeleteCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/class-use/TableJsonOperationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/TableJsonOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableJsonOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#insert-com.google.gson.JsonObject-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">insert</a></span>(com.google.gson.JsonObject&nbsp;element,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final JsonObject element, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#insert-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">insert</a></span>(com.google.gson.JsonObject&nbsp;element,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final JsonObject element)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">lookUp</a></span>(java.lang.Object&nbsp;id,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>lookUp(Object id, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">lookUp</a></span>(java.lang.Object&nbsp;id,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-\"><code>MobileServiceJsonTable.lookUp(Object id)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#update-com.google.gson.JsonObject-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">update</a></span>(com.google.gson.JsonObject&nbsp;element,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final JsonObject element, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#update-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">update</a></span>(com.google.gson.JsonObject&nbsp;element,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final JsonObject element)</code> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/TableJsonOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableJsonOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/class-use/TableJsonQueryCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/TableJsonQueryCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableJsonQueryCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">execute</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>execute(final Query query)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">execute</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute--\"><code>MobileServiceJsonTable.execute()</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#execute-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">execute</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#execute--\"><code>ExecutableJsonQuery.execute()</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/TableJsonQueryCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableJsonQueryCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/class-use/TableOperationCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableOperationCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableOperationCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/TableOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableOperationCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.table.TableOperationCallback</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing subinterfaces, and an explanation\">\n<caption><span>Subinterfaces of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Interface and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>interface&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a></span></code>\n<div class=\"block\">Callback used after a TableOperation is executed using JSON</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#insert-E-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">insert</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final E element, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#insert-E-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">insert</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final E element)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">lookUp</a></span>(java.lang.Object&nbsp;id,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>lookUp(Object id, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">lookUp</a></span>(java.lang.Object&nbsp;id,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-\"><code>MobileServiceTable.lookUp(Object id)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#update-E-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">update</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n      java.util.List&lt;&lt;any&gt;&gt;&nbsp;parameters,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final E element, final List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#update-E-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">update</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&nbsp;element,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final E element)</code> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/TableOperationCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/class-use/TableQueryCallback.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableQueryCallback</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableQueryCallback\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/TableQueryCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableQueryCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.TableQueryCallback\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.table.TableQueryCallback</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">execute</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\"><code>MobileServiceTable.execute(Query query)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">execute</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute--\"><code>MobileServiceTable.execute()</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#execute-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">execute</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#execute--\"><code>ExecutableQuery.execute()</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/class-use/TableQueryCallback.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableQueryCallback.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.table</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Interfaces\">Interfaces</h2>\n<ul title=\"Interfaces\">\n<li><a href=\"MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\"><span class=\"interfaceName\">MobileServiceTableSystemPropertiesProvider</span></a></li>\n<li><a href=\"TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\"><span class=\"interfaceName\">TableDeleteCallback</span></a></li>\n<li><a href=\"TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\"><span class=\"interfaceName\">TableJsonOperationCallback</span></a></li>\n<li><a href=\"TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\"><span class=\"interfaceName\">TableJsonQueryCallback</span></a></li>\n<li><a href=\"TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\"><span class=\"interfaceName\">TableOperationCallback</span></a></li>\n<li><a href=\"TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\"><span class=\"interfaceName\">TableQueryCallback</span></a></li>\n</ul>\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\">MobileServiceJsonTable</a></li>\n<li><a href=\"MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\">MobileServiceTable</a></li>\n</ul>\n<h2 title=\"Enums\">Enums</h2>\n<ul title=\"Enums\">\n<li><a href=\"MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\">MobileServiceSystemProperty</a></li>\n</ul>\n<h2 title=\"Exceptions\">Exceptions</h2>\n<ul title=\"Exceptions\">\n<li><a href=\"MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\">MobileServicePreconditionFailedException</a></li>\n<li><a href=\"MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\" target=\"classFrame\">MobileServicePreconditionFailedExceptionBase</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Interface Summary table, listing interfaces, and an explanation\">\n<caption><span>Interface Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Interface</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Interface used to decouple the table implementation from the query writers.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableDeleteCallback</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Callback to invoke after executing a delete operation</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Callback used after a TableOperation is executed using JSON</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Callback used after a query is executed using JSON</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>&lt;E&gt;</td>\n<td class=\"colLast\">\n<div class=\"block\">Callback used after a TableOperation is executed</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>&lt;E&gt;</td>\n<td class=\"colLast\">\n<div class=\"block\">Callback used after a query is executed</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Represents a Mobile Service Table</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a>&lt;E&gt;</td>\n<td class=\"colLast\">\n<div class=\"block\">Represents a Mobile Service Table</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Summary table, listing enums, and an explanation\">\n<caption><span>Enum Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Enum</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a></td>\n<td class=\"colLast\">\n<div class=\"block\">The available System Properties in Mobile Service</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Exception Summary table, listing exceptions, and an explanation\">\n<caption><span>Exception Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Exception</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedException</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedExceptionBase</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.table</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServiceJsonTable</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServiceTable</span></a>&lt;E&gt;</li>\n<li type=\"circle\">java.lang.Throwable (implements java.io.Serializable)\n<ul>\n<li type=\"circle\">java.lang.Exception\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceException</span></a>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServicePreconditionFailedException</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServicePreconditionFailedExceptionBase</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h2 title=\"Interface Hierarchy\">Interface Hierarchy</h2>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServiceTableSystemPropertiesProvider</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableDeleteCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableJsonQueryCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableOperationCallback</span></a>&lt;E&gt;\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableJsonOperationCallback</span></a></li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableQueryCallback</span></a>&lt;E&gt;</li>\n</ul>\n<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServiceSystemProperty</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/notifications/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.table</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.table</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> used by <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceJsonTable.html#com.microsoft.windowsazure.mobileservices\">MobileServiceJsonTable</a>\n<div class=\"block\">Represents a Mobile Service Table</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceTable.html#com.microsoft.windowsazure.mobileservices\">MobileServiceTable</a>\n<div class=\"block\">Represents a Mobile Service Table</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> used by <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceSystemProperty.html#com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a>\n<div class=\"block\">The available System Properties in Mobile Service</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceTableSystemPropertiesProvider.html#com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a>\n<div class=\"block\">Interface used to decouple the table implementation from the query writers.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/TableJsonOperationCallback.html#com.microsoft.windowsazure.mobileservices.table\">TableJsonOperationCallback</a>\n<div class=\"block\">Callback used after a TableOperation is executed using JSON</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/TableJsonQueryCallback.html#com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a>\n<div class=\"block\">Callback used after a query is executed using JSON</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/TableOperationCallback.html#com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a>\n<div class=\"block\">Callback used after a TableOperation is executed</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/TableQueryCallback.html#com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>\n<div class=\"block\">Callback used after a query is executed</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> used by <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceJsonTable.html#com.microsoft.windowsazure.mobileservices.table.query\">MobileServiceJsonTable</a>\n<div class=\"block\">Represents a Mobile Service Table</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceTable.html#com.microsoft.windowsazure.mobileservices.table.query\">MobileServiceTable</a>\n<div class=\"block\">Represents a Mobile Service Table</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/MobileServiceTableSystemPropertiesProvider.html#com.microsoft.windowsazure.mobileservices.table.query\">MobileServiceTableSystemPropertiesProvider</a>\n<div class=\"block\">Interface used to decouple the table implementation from the query writers.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/TableJsonQueryCallback.html#com.microsoft.windowsazure.mobileservices.table.query\">TableJsonQueryCallback</a>\n<div class=\"block\">Callback used after a query is executed using JSON</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/class-use/TableQueryCallback.html#com.microsoft.windowsazure.mobileservices.table.query\">TableQueryCallback</a>\n<div class=\"block\">Callback used after a query is executed</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>ExecutableJsonQuery</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"ExecutableJsonQuery\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10,\"i6\":10,\"i7\":10,\"i8\":10,\"i9\":10,\"i10\":10,\"i11\":10,\"i12\":10,\"i13\":10,\"i14\":10,\"i15\":10,\"i16\":10,\"i17\":10,\"i18\":10,\"i19\":10,\"i20\":10,\"i21\":10,\"i22\":10,\"i23\":42,\"i24\":10,\"i25\":10,\"i26\":10,\"i27\":10,\"i28\":10,\"i29\":10,\"i30\":10,\"i31\":10,\"i32\":10,\"i33\":10,\"i34\":10,\"i35\":10,\"i36\":10,\"i37\":10,\"i38\":10,\"i39\":10,\"i40\":10,\"i41\":10,\"i42\":10,\"i43\":10,\"i44\":10,\"i45\":10,\"i46\":10,\"i47\":10,\"i48\":10,\"i49\":10,\"i50\":10,\"i51\":10,\"i52\":10,\"i53\":10,\"i54\":10,\"i55\":10,\"i56\":10,\"i57\":10,\"i58\":10,\"i59\":10,\"i60\":10,\"i61\":10,\"i62\":10,\"i63\":10,\"i64\":10,\"i65\":10,\"i66\":10,\"i67\":10,\"i68\":10,\"i69\":10,\"i70\":10,\"i71\":10,\"i72\":10,\"i73\":10,\"i74\":10,\"i75\":10,\"i76\":10,\"i77\":10,\"i78\":10,\"i79\":10,\"i80\":10,\"i81\":10,\"i82\":10,\"i83\":10,\"i84\":10,\"i85\":10,\"i86\":10,\"i87\":10,\"i88\":10,\"i89\":10,\"i90\":10,\"i91\":10,\"i92\":10,\"i93\":10,\"i94\":10,\"i95\":10,\"i96\":10,\"i97\":10,\"i98\":10,\"i99\":10,\"i100\":10,\"i101\":10,\"i102\":10,\"i103\":10,\"i104\":10,\"i105\":10,\"i106\":10,\"i107\":10,\"i108\":10,\"i109\":10,\"i110\":10,\"i111\":10,\"i112\":10,\"i113\":10,\"i114\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"],32:[\"t6\",\"Deprecated Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ExecutableJsonQuery.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ExecutableJsonQuery.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.query</div>\n<h2 title=\"Class ExecutableJsonQuery\" class=\"title\">Class ExecutableJsonQuery</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.query.ExecutableJsonQuery</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public final class <span class=\"typeNameLabel\">ExecutableJsonQuery</span>\nextends java.lang.Object\nimplements <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></pre>\n<div class=\"block\">Class that represents a query to a specific MobileServiceJsonTable instance</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ExecutableJsonQuery--\">ExecutableJsonQuery</a></span>()</code>\n<div class=\"block\">Creates an empty Query</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ExecutableJsonQuery-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ExecutableJsonQuery</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Creates Query<E> with an existing query as its only internal value</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">Deprecated Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#add--\">add</a></span>()</code>\n<div class=\"block\">Arithmetic Operators</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#add-java.lang.Number-\">add</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#and--\">and</a></span>()</code>\n<div class=\"block\">Logical Operators</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional and.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      java.lang.String&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i9\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#day-java.lang.String-\">day</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i10\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#deepClone--\">deepClone</a></span>()</code>\n<div class=\"block\">Deep clone the Query instance</div>\n</td>\n</tr>\n<tr id=\"i11\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#div--\">div</a></span>()</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr id=\"i12\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#div-java.lang.Number-\">div</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr id=\"i13\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr id=\"i14\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n        <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr id=\"i15\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#endsWith-java.lang.String-java.lang.String-\">endsWith</a></span>(java.lang.String&nbsp;field,\n        java.lang.String&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr id=\"i16\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq--\">eq</a></span>()</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i17\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-boolean-\">eq</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i18\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-java.util.Date-\">eq</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i19\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-java.lang.Number-\">eq</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i20\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i21\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-java.lang.String-\">eq</a></span>(java.lang.String&nbsp;stringValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i22\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#execute--\">execute</a></span>()</code>\n<div class=\"block\">Executes the query</div>\n</td>\n</tr>\n<tr id=\"i23\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#execute-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">execute</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#execute--\"><code>execute()</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i24\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#field-java.lang.String-\">field</a></span>(java.lang.String&nbsp;fieldName)</code>\n<div class=\"block\">Query Operations</div>\n</td>\n</tr>\n<tr id=\"i25\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Math Functions</div>\n</td>\n</tr>\n<tr id=\"i26\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge--\">ge</a></span>()</code>\n<div class=\"block\">Comparison Operators</div>\n</td>\n</tr>\n<tr id=\"i27\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge-java.util.Date-\">ge</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i28\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge-java.lang.Number-\">ge</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i29\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i30\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;&lt;any&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getOrderBy--\">getOrderBy</a></span>()</code>\n<div class=\"block\">Returns a list of fields to order by the results, and their respective\n ordering direction</div>\n</td>\n</tr>\n<tr id=\"i31\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;java.lang.String&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getProjection--\">getProjection</a></span>()</code>\n<div class=\"block\">Returns a requested list of projections;</div>\n</td>\n</tr>\n<tr id=\"i32\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.microsoft.windowsazure.mobileservices.table.query.QueryNode</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getQueryNode--\">getQueryNode</a></span>()</code>\n<div class=\"block\">Returns the root node of the query</div>\n</td>\n</tr>\n<tr id=\"i33\" class=\"rowColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getSkip--\">getSkip</a></span>()</code>\n<div class=\"block\">Returns a specified skip value;</div>\n</td>\n</tr>\n<tr id=\"i34\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getTableName--\">getTableName</a></span>()</code>\n<div class=\"block\">Returns the table name;</div>\n</td>\n</tr>\n<tr id=\"i35\" class=\"rowColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getTop--\">getTop</a></span>()</code>\n<div class=\"block\">Returns a specified top value;</div>\n</td>\n</tr>\n<tr id=\"i36\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;&lt;any&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getUserDefinedParameters--\">getUserDefinedParameters</a></span>()</code>\n<div class=\"block\">Returns a list of custom parameters set by the user</div>\n</td>\n</tr>\n<tr id=\"i37\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt--\">gt</a></span>()</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i38\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt-java.util.Date-\">gt</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i39\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt-java.lang.Number-\">gt</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i40\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i41\" class=\"rowColor\">\n<td class=\"colFirst\"><code>boolean</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#hasInlineCount--\">hasInlineCount</a></span>()</code>\n<div class=\"block\">Returns true if inline count is requested.</div>\n</td>\n</tr>\n<tr id=\"i42\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i43\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#hour-java.lang.String-\">hour</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i44\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#includeInlineCount--\">includeInlineCount</a></span>()</code>\n<div class=\"block\">The inlinecount property specifies whether or not to retrieve a property\n with the number of records returned.</div>\n</td>\n</tr>\n<tr id=\"i45\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr id=\"i46\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#indexOf-java.lang.String-java.lang.String-\">indexOf</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;needle)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr id=\"i47\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le--\">le</a></span>()</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i48\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le-java.util.Date-\">le</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i49\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le-java.lang.Number-\">le</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i50\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i51\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr id=\"i52\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#length-java.lang.String-\">length</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr id=\"i53\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt--\">lt</a></span>()</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i54\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt-java.util.Date-\">lt</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i55\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt-java.lang.Number-\">lt</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i56\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i57\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i58\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#minute-java.lang.String-\">minute</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i59\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mod--\">mod</a></span>()</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr id=\"i60\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mod-java.lang.Number-\">mod</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr id=\"i61\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr id=\"i62\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i63\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#month-java.lang.String-\">month</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i64\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mul--\">mul</a></span>()</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr id=\"i65\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mul-java.lang.Number-\">mul</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr id=\"i66\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr id=\"i67\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne--\">ne</a></span>()</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i68\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-boolean-\">ne</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i69\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-java.util.Date-\">ne</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i70\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-java.lang.Number-\">ne</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i71\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i72\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-java.lang.String-\">ne</a></span>(java.lang.String&nbsp;stringValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i73\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#not--\">not</a></span>()</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr id=\"i74\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#not-boolean-\">not</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr id=\"i75\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr id=\"i76\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#or--\">or</a></span>()</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr id=\"i77\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr id=\"i78\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>\n<div class=\"block\">Adds a new order by statement</div>\n</td>\n</tr>\n<tr id=\"i79\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#parameter-java.lang.String-java.lang.String-\">parameter</a></span>(java.lang.String&nbsp;parameter,\n         java.lang.String&nbsp;value)</code>\n<div class=\"block\">Row Operations</div>\n</td>\n</tr>\n<tr id=\"i80\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#removeInlineCount--\">removeInlineCount</a></span>()</code>\n<div class=\"block\">Set the inlinecount property to false.</div>\n</td>\n</tr>\n<tr id=\"i81\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr id=\"i82\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;find,\n       java.lang.String&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr id=\"i83\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i84\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i85\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#second-java.lang.String-\">second</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i86\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#select-java.lang.String...-\">select</a></span>(java.lang.String...&nbsp;fields)</code>\n<div class=\"block\">Specifies the fields to retrieve</div>\n</td>\n</tr>\n<tr id=\"i87\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">setQueryNode</a></span>(com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;queryNode)</code>\n<div class=\"block\">Sets the root node of the query</div>\n</td>\n</tr>\n<tr id=\"i88\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#setTable-com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable-\">setTable</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a>&nbsp;table)</code>\n<div class=\"block\">Sets the MobileServiceJsonTable to query</div>\n</td>\n</tr>\n<tr id=\"i89\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#skip-int-\">skip</a></span>(int&nbsp;skip)</code>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n</td>\n</tr>\n<tr id=\"i90\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n          <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr id=\"i91\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#startsWith-java.lang.String-java.lang.String-\">startsWith</a></span>(java.lang.String&nbsp;field,\n          java.lang.String&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr id=\"i92\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#sub--\">sub</a></span>()</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr id=\"i93\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#sub-java.lang.Number-\">sub</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr id=\"i94\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr id=\"i95\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i96\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n         <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i97\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-java.lang.String-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i98\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-java.lang.String-int-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos,\n         int&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i99\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n</td>\n</tr>\n<tr id=\"i100\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf</a></span>(java.lang.String&nbsp;str,\n           java.lang.String&nbsp;field)</code>\n<div class=\"block\">Whether the string parameter occurs in the field</div>\n</td>\n</tr>\n<tr id=\"i101\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#tableName-java.lang.String-\">tableName</a></span>(java.lang.String&nbsp;tableName)</code>\n<div class=\"block\">Sets the table name;</div>\n</td>\n</tr>\n<tr id=\"i102\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String Operators</div>\n</td>\n</tr>\n<tr id=\"i103\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toLower-java.lang.String-\">toLower</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</td>\n</tr>\n<tr id=\"i104\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#top-int-\">top</a></span>(int&nbsp;top)</code>\n<div class=\"block\">Sets the number of records to return</div>\n</td>\n</tr>\n<tr id=\"i105\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n</td>\n</tr>\n<tr id=\"i106\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toUpper-java.lang.String-\">toUpper</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n</td>\n</tr>\n<tr id=\"i107\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr id=\"i108\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#trim-java.lang.String-\">trim</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr id=\"i109\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#val-boolean-\">val</a></span>(boolean&nbsp;val)</code>\n<div class=\"block\">Specifies a boolean value</div>\n</td>\n</tr>\n<tr id=\"i110\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#val-java.util.Date-\">val</a></span>(java.util.Date&nbsp;date)</code>\n<div class=\"block\">Specifies a date value</div>\n</td>\n</tr>\n<tr id=\"i111\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#val-java.lang.Number-\">val</a></span>(java.lang.Number&nbsp;number)</code>\n<div class=\"block\">Specifies a numeric value</div>\n</td>\n</tr>\n<tr id=\"i112\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#val-java.lang.String-\">val</a></span>(java.lang.String&nbsp;s)</code>\n<div class=\"block\">Specifies a string value</div>\n</td>\n</tr>\n<tr id=\"i113\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Date Operators</div>\n</td>\n</tr>\n<tr id=\"i114\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#year-java.lang.String-\">year</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The year component value of the parameter value.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"ExecutableJsonQuery--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ExecutableJsonQuery</h4>\n<pre>public&nbsp;ExecutableJsonQuery()</pre>\n<div class=\"block\">Creates an empty Query</div>\n</li>\n</ul>\n<a name=\"ExecutableJsonQuery-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>ExecutableJsonQuery</h4>\n<pre>public&nbsp;ExecutableJsonQuery(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Creates Query<E> with an existing query as its only internal value</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - The query step to add</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"setTable-com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setTable</h4>\n<pre>public&nbsp;void&nbsp;setTable(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a>&nbsp;table)</pre>\n<div class=\"block\">Sets the MobileServiceJsonTable to query</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>table</code> - The MobileServiceJsonTable to query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"execute--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;&nbsp;execute()</pre>\n<div class=\"block\">Executes the query</div>\n</li>\n</ul>\n<a name=\"execute-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;void&nbsp;execute(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a>&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#execute--\"><code>execute()</code></a> instead</span></div>\n<div class=\"block\">Executes the query</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"deepClone--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>deepClone</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;deepClone()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#deepClone--\">Query</a></code></span></div>\n<div class=\"block\">Deep clone the Query instance</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#deepClone--\">deepClone</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A cloned instance of the Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getQueryNode--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getQueryNode</h4>\n<pre>public&nbsp;com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;getQueryNode()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getQueryNode--\">Query</a></code></span></div>\n<div class=\"block\">Returns the root node of the query</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getQueryNode--\">getQueryNode</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setQueryNode</h4>\n<pre>public&nbsp;void&nbsp;setQueryNode(com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;queryNode)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">Query</a></code></span></div>\n<div class=\"block\">Sets the root node of the query</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">setQueryNode</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>queryNode</code> - The node to set</dd>\n</dl>\n</li>\n</ul>\n<a name=\"hasInlineCount--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>hasInlineCount</h4>\n<pre>public&nbsp;boolean&nbsp;hasInlineCount()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hasInlineCount--\">Query</a></code></span></div>\n<div class=\"block\">Returns true if inline count is requested.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hasInlineCount--\">hasInlineCount</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getOrderBy--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getOrderBy</h4>\n<pre>public&nbsp;java.util.List&lt;&lt;any&gt;&gt;&nbsp;getOrderBy()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getOrderBy--\">Query</a></code></span></div>\n<div class=\"block\">Returns a list of fields to order by the results, and their respective\n ordering direction</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getOrderBy--\">getOrderBy</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getProjection--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getProjection</h4>\n<pre>public&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;getProjection()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getProjection--\">Query</a></code></span></div>\n<div class=\"block\">Returns a requested list of projections;</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getProjection--\">getProjection</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getUserDefinedParameters--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getUserDefinedParameters</h4>\n<pre>public&nbsp;java.util.List&lt;&lt;any&gt;&gt;&nbsp;getUserDefinedParameters()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getUserDefinedParameters--\">Query</a></code></span></div>\n<div class=\"block\">Returns a list of custom parameters set by the user</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getUserDefinedParameters--\">getUserDefinedParameters</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTop--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTop</h4>\n<pre>public&nbsp;int&nbsp;getTop()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getTop--\">Query</a></code></span></div>\n<div class=\"block\">Returns a specified top value;</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getTop--\">getTop</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getSkip--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getSkip</h4>\n<pre>public&nbsp;int&nbsp;getSkip()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getSkip--\">Query</a></code></span></div>\n<div class=\"block\">Returns a specified skip value;</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getSkip--\">getSkip</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTableName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTableName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getTableName()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getTableName--\">Query</a></code></span></div>\n<div class=\"block\">Returns the table name;</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getTableName--\">getTableName</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"tableName-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>tableName</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;tableName(java.lang.String&nbsp;tableName)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#tableName-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Sets the table name;</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#tableName-java.lang.String-\">tableName</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"parameter-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>parameter</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;parameter(java.lang.String&nbsp;parameter,\n                                     java.lang.String&nbsp;value)</pre>\n<div class=\"block\">Row Operations</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#parameter-java.lang.String-java.lang.String-\">parameter</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>parameter</code> - The parameter name</dd>\n<dd><code>value</code> - The parameter value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>orderBy</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;orderBy(java.lang.String&nbsp;field,\n                                   <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">Query</a></code></span></div>\n<div class=\"block\">Adds a new order by statement</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - FieldName</dd>\n<dd><code>order</code> - Sorting order</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"top-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>top</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;top(int&nbsp;top)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#top-int-\">Query</a></code></span></div>\n<div class=\"block\">Sets the number of records to return</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#top-int-\">top</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>top</code> - Number of records to return</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"skip-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>skip</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;skip(int&nbsp;skip)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#skip-int-\">Query</a></code></span></div>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#skip-int-\">skip</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"includeInlineCount--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>includeInlineCount</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;includeInlineCount()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#includeInlineCount--\">Query</a></code></span></div>\n<div class=\"block\">The inlinecount property specifies whether or not to retrieve a property\n with the number of records returned.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#includeInlineCount--\">includeInlineCount</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"removeInlineCount--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>removeInlineCount</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;removeInlineCount()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#removeInlineCount--\">Query</a></code></span></div>\n<div class=\"block\">Set the inlinecount property to false.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#removeInlineCount--\">removeInlineCount</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"select-java.lang.String...-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>select</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;select(java.lang.String...&nbsp;fields)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#select-java.lang.String...-\">Query</a></code></span></div>\n<div class=\"block\">Specifies the fields to retrieve</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#select-java.lang.String...-\">select</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>fields</code> - Names of the fields to retrieve</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"field-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>field</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;field(java.lang.String&nbsp;fieldName)</pre>\n<div class=\"block\">Query Operations</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#field-java.lang.String-\">field</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>fieldName</code> - The field to use</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;val(java.lang.Number&nbsp;number)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Specifies a numeric value</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.Number-\">val</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>number</code> - The numeric value to use</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;val(boolean&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-boolean-\">Query</a></code></span></div>\n<div class=\"block\">Specifies a boolean value</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-boolean-\">val</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;val(java.lang.String&nbsp;s)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Specifies a string value</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.String-\">val</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;val(java.util.Date&nbsp;date)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Specifies a date value</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.util.Date-\">val</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"and--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>and</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;and()</pre>\n<div class=\"block\">Logical Operators</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and--\">and</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>and</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;and(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Conditional and.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"or--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>or</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;or()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or--\">Query</a></code></span></div>\n<div class=\"block\">Conditional or.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or--\">or</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>or</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;or(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Conditional or.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"not--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>not</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;not()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not--\">Query</a></code></span></div>\n<div class=\"block\">Logical not.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not--\">not</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>not</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;not(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Logical not.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"not-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>not</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;not(boolean&nbsp;booleanValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-boolean-\">Query</a></code></span></div>\n<div class=\"block\">Logical not.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-boolean-\">not</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;ge()</pre>\n<div class=\"block\">Comparison Operators</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge--\">ge</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;ge(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;ge(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.lang.Number-\">ge</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;ge(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.util.Date-\">ge</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;le()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le--\">Query</a></code></span></div>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le--\">le</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;le(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;le(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.lang.Number-\">le</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;le(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.util.Date-\">le</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;gt()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt--\">Query</a></code></span></div>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt--\">gt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;gt(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;gt(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.lang.Number-\">gt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;gt(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.util.Date-\">gt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;lt()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt--\">Query</a></code></span></div>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt--\">lt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;lt(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;lt(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.lang.Number-\">lt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;lt(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.util.Date-\">lt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;eq()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq--\">Query</a></code></span></div>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq--\">eq</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;eq(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;eq(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.Number-\">eq</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;eq(boolean&nbsp;booleanValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-boolean-\">Query</a></code></span></div>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-boolean-\">eq</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;eq(java.lang.String&nbsp;stringValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.String-\">eq</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;eq(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.util.Date-\">eq</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;ne()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne--\">Query</a></code></span></div>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne--\">ne</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;ne(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;ne(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.Number-\">ne</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;ne(boolean&nbsp;booleanValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-boolean-\">Query</a></code></span></div>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-boolean-\">ne</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;ne(java.lang.String&nbsp;stringValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.String-\">ne</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;ne(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.util.Date-\">ne</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"add--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;add()</pre>\n<div class=\"block\">Arithmetic Operators</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add--\">add</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;add(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Add operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"add-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;add(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Add operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-java.lang.Number-\">add</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"sub--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>sub</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;sub()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub--\">Query</a></code></span></div>\n<div class=\"block\">Subtract operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub--\">sub</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>sub</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;sub(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Subtract operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"sub-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>sub</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;sub(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Subtract operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-java.lang.Number-\">sub</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mul--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mul</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;mul()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul--\">Query</a></code></span></div>\n<div class=\"block\">Multiply operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul--\">mul</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mul</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;mul(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Multiply operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mul-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mul</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;mul(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Multiply operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-java.lang.Number-\">mul</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"div--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>div</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;div()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div--\">Query</a></code></span></div>\n<div class=\"block\">Divide operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div--\">div</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>div</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;div(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Divide operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"div-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>div</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;div(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Divide operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-java.lang.Number-\">div</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mod--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mod</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;mod()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod--\">Query</a></code></span></div>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod--\">mod</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mod</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;mod(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mod-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mod</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;mod(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-java.lang.Number-\">mod</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>year</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;year(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Date Operators</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"year-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>year</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;year(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The year component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-java.lang.String-\">year</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>month</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;month(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The month component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"month-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>month</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;month(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The month component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-java.lang.String-\">month</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>day</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;day(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The day component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"day-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>day</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;day(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The day component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-java.lang.String-\">day</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>hour</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;hour(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The hour component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"hour-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>hour</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;hour(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The hour component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-java.lang.String-\">hour</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>minute</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;minute(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The minute component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"minute-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>minute</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;minute(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The minute component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-java.lang.String-\">minute</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>second</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;second(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The second component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"second-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>second</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;second(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The second component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-java.lang.String-\">second</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>floor</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;floor(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Math Functions</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ceiling</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;ceiling(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>round</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;round(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toLower</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;toLower(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">String Operators</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toLower-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toLower</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;toLower(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-java.lang.String-\">toLower</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toUpper</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;toUpper(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toUpper-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toUpper</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;toUpper(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-java.lang.String-\">toUpper</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>length</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;length(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"length-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>length</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;length(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-java.lang.String-\">length</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>trim</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;trim(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"trim-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>trim</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;trim(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-java.lang.String-\">trim</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>startsWith</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;startsWith(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n                                      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate</dd>\n<dd><code>start</code> - Start value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"startsWith-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>startsWith</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;startsWith(java.lang.String&nbsp;field,\n                                      java.lang.String&nbsp;start)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-java.lang.String-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-java.lang.String-java.lang.String-\">startsWith</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate</dd>\n<dd><code>start</code> - Start value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>endsWith</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;endsWith(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n                                    <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate</dd>\n<dd><code>end</code> - End value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"endsWith-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>endsWith</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;endsWith(java.lang.String&nbsp;field,\n                                    java.lang.String&nbsp;end)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-java.lang.String-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-java.lang.String-java.lang.String-\">endsWith</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate</dd>\n<dd><code>end</code> - End value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subStringOf</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;subStringOf(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n                                       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str1</code> - First string</dd>\n<dd><code>str2</code> - Second string</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subStringOf-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subStringOf</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;subStringOf(java.lang.String&nbsp;str,\n                                       java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-java.lang.String-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Whether the string parameter occurs in the field</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dd><code>field</code> - Field to search in</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>concat</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;concat(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n                                  <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str1</code> - First string</dd>\n<dd><code>str2</code> - Second string</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>concat</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;concat(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n                                  java.lang.String&nbsp;str2)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str1</code> - First string</dd>\n<dd><code>str2</code> - Second string</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>indexOf</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;indexOf(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n                                   <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>haystack</code> - String content</dd>\n<dd><code>needle</code> - Value to search for</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"indexOf-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>indexOf</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;indexOf(java.lang.String&nbsp;field,\n                                   java.lang.String&nbsp;needle)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-java.lang.String-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-java.lang.String-java.lang.String-\">indexOf</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to search in</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;subString(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n                                     <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String content</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-java.lang.String-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;subString(java.lang.String&nbsp;field,\n                                     int&nbsp;pos)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-\">Query</a></code></span></div>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-\">subString</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to scan</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;subString(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n                                     <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n                                     <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String content</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dd><code>length</code> - Length</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-java.lang.String-int-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;subString(java.lang.String&nbsp;field,\n                                     int&nbsp;pos,\n                                     int&nbsp;length)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-int-\">Query</a></code></span></div>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-int-\">subString</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to scan</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dd><code>length</code> - Length</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>replace</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;replace(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n                                   <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n                                   <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String content</dd>\n<dd><code>find</code> - Search value</dd>\n<dd><code>replace</code> - Replace value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"replace-java.lang.String-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>replace</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>&nbsp;replace(java.lang.String&nbsp;field,\n                                   java.lang.String&nbsp;find,\n                                   java.lang.String&nbsp;replace)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-java.lang.String-java.lang.String-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to scan</dd>\n<dd><code>find</code> - Search value</dd>\n<dd><code>replace</code> - Replace value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ExecutableJsonQuery.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ExecutableJsonQuery.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>ExecutableQuery</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"ExecutableQuery\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10,\"i6\":10,\"i7\":10,\"i8\":10,\"i9\":10,\"i10\":10,\"i11\":10,\"i12\":10,\"i13\":10,\"i14\":10,\"i15\":10,\"i16\":10,\"i17\":10,\"i18\":10,\"i19\":10,\"i20\":10,\"i21\":10,\"i22\":10,\"i23\":42,\"i24\":10,\"i25\":10,\"i26\":10,\"i27\":10,\"i28\":10,\"i29\":10,\"i30\":10,\"i31\":10,\"i32\":10,\"i33\":10,\"i34\":10,\"i35\":10,\"i36\":10,\"i37\":10,\"i38\":10,\"i39\":10,\"i40\":10,\"i41\":10,\"i42\":10,\"i43\":10,\"i44\":10,\"i45\":10,\"i46\":10,\"i47\":10,\"i48\":10,\"i49\":10,\"i50\":10,\"i51\":10,\"i52\":10,\"i53\":10,\"i54\":10,\"i55\":10,\"i56\":10,\"i57\":10,\"i58\":10,\"i59\":10,\"i60\":10,\"i61\":10,\"i62\":10,\"i63\":10,\"i64\":10,\"i65\":10,\"i66\":10,\"i67\":10,\"i68\":10,\"i69\":10,\"i70\":10,\"i71\":10,\"i72\":10,\"i73\":10,\"i74\":10,\"i75\":10,\"i76\":10,\"i77\":10,\"i78\":10,\"i79\":10,\"i80\":10,\"i81\":10,\"i82\":10,\"i83\":10,\"i84\":10,\"i85\":10,\"i86\":10,\"i87\":10,\"i88\":10,\"i89\":10,\"i90\":10,\"i91\":10,\"i92\":10,\"i93\":10,\"i94\":10,\"i95\":10,\"i96\":10,\"i97\":10,\"i98\":10,\"i99\":10,\"i100\":10,\"i101\":10,\"i102\":10,\"i103\":10,\"i104\":10,\"i105\":10,\"i106\":10,\"i107\":10,\"i108\":10,\"i109\":10,\"i110\":10,\"i111\":10,\"i112\":10,\"i113\":10,\"i114\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"],32:[\"t6\",\"Deprecated Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ExecutableQuery.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ExecutableQuery.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.query</div>\n<h2 title=\"Class ExecutableQuery\" class=\"title\">Class ExecutableQuery&lt;E&gt;</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery&lt;E&gt;</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public final class <span class=\"typeNameLabel\">ExecutableQuery&lt;E&gt;</span>\nextends java.lang.Object\nimplements <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></pre>\n<div class=\"block\">Class that represents a query to a specific MobileServiceTable<E> instance</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ExecutableQuery--\">ExecutableQuery</a></span>()</code>\n<div class=\"block\">Creates an empty Query</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ExecutableQuery-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ExecutableQuery</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Creates Query<E> with an existing query as its only internal value</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t6\" class=\"tableTab\"><span><a href=\"javascript:show(32);\">Deprecated Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#add--\">add</a></span>()</code>\n<div class=\"block\">Arithmetic Operators</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#add-java.lang.Number-\">add</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#and--\">and</a></span>()</code>\n<div class=\"block\">Logical Operators</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional and.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      java.lang.String&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i9\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#day-java.lang.String-\">day</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i10\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#deepClone--\">deepClone</a></span>()</code>\n<div class=\"block\">Deep clone the Query instance</div>\n</td>\n</tr>\n<tr id=\"i11\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#div--\">div</a></span>()</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr id=\"i12\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#div-java.lang.Number-\">div</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr id=\"i13\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr id=\"i14\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n        <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr id=\"i15\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#endsWith-java.lang.String-java.lang.String-\">endsWith</a></span>(java.lang.String&nbsp;field,\n        java.lang.String&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr id=\"i16\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq--\">eq</a></span>()</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i17\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-boolean-\">eq</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i18\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-java.util.Date-\">eq</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i19\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-java.lang.Number-\">eq</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i20\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i21\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-java.lang.String-\">eq</a></span>(java.lang.String&nbsp;stringValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i22\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#execute--\">execute</a></span>()</code>\n<div class=\"block\">Executes the query</div>\n</td>\n</tr>\n<tr id=\"i23\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#execute-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">execute</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#execute--\"><code>execute()</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr id=\"i24\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#field-java.lang.String-\">field</a></span>(java.lang.String&nbsp;fieldName)</code>\n<div class=\"block\">Query Operations</div>\n</td>\n</tr>\n<tr id=\"i25\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Math Functions</div>\n</td>\n</tr>\n<tr id=\"i26\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge--\">ge</a></span>()</code>\n<div class=\"block\">Comparison Operators</div>\n</td>\n</tr>\n<tr id=\"i27\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge-java.util.Date-\">ge</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i28\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge-java.lang.Number-\">ge</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i29\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i30\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;&lt;any&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getOrderBy--\">getOrderBy</a></span>()</code>\n<div class=\"block\">Returns a list of fields to order by the results, and their respective\n ordering direction</div>\n</td>\n</tr>\n<tr id=\"i31\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;java.lang.String&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getProjection--\">getProjection</a></span>()</code>\n<div class=\"block\">Returns a requested list of projections;</div>\n</td>\n</tr>\n<tr id=\"i32\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.microsoft.windowsazure.mobileservices.table.query.QueryNode</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getQueryNode--\">getQueryNode</a></span>()</code>\n<div class=\"block\">Returns the root node of the query</div>\n</td>\n</tr>\n<tr id=\"i33\" class=\"rowColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getSkip--\">getSkip</a></span>()</code>\n<div class=\"block\">Returns a specified skip value;</div>\n</td>\n</tr>\n<tr id=\"i34\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getTableName--\">getTableName</a></span>()</code>\n<div class=\"block\">Returns the table name;</div>\n</td>\n</tr>\n<tr id=\"i35\" class=\"rowColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getTop--\">getTop</a></span>()</code>\n<div class=\"block\">Returns a specified top value;</div>\n</td>\n</tr>\n<tr id=\"i36\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;&lt;any&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getUserDefinedParameters--\">getUserDefinedParameters</a></span>()</code>\n<div class=\"block\">Returns a list of custom parameters set by the user</div>\n</td>\n</tr>\n<tr id=\"i37\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt--\">gt</a></span>()</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i38\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt-java.util.Date-\">gt</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i39\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt-java.lang.Number-\">gt</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i40\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i41\" class=\"rowColor\">\n<td class=\"colFirst\"><code>boolean</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#hasInlineCount--\">hasInlineCount</a></span>()</code>\n<div class=\"block\">Returns true if inline count is requested.</div>\n</td>\n</tr>\n<tr id=\"i42\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i43\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#hour-java.lang.String-\">hour</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i44\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#includeInlineCount--\">includeInlineCount</a></span>()</code>\n<div class=\"block\">The inlinecount property specifies whether or not to retrieve a property\n with the number of records returned.</div>\n</td>\n</tr>\n<tr id=\"i45\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr id=\"i46\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#indexOf-java.lang.String-java.lang.String-\">indexOf</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;needle)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr id=\"i47\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le--\">le</a></span>()</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i48\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le-java.util.Date-\">le</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i49\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le-java.lang.Number-\">le</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i50\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i51\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr id=\"i52\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#length-java.lang.String-\">length</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr id=\"i53\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt--\">lt</a></span>()</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i54\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt-java.util.Date-\">lt</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i55\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt-java.lang.Number-\">lt</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i56\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i57\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i58\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#minute-java.lang.String-\">minute</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i59\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mod--\">mod</a></span>()</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr id=\"i60\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mod-java.lang.Number-\">mod</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr id=\"i61\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr id=\"i62\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i63\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#month-java.lang.String-\">month</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i64\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mul--\">mul</a></span>()</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr id=\"i65\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mul-java.lang.Number-\">mul</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr id=\"i66\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr id=\"i67\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne--\">ne</a></span>()</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i68\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-boolean-\">ne</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i69\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-java.util.Date-\">ne</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i70\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-java.lang.Number-\">ne</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i71\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i72\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-java.lang.String-\">ne</a></span>(java.lang.String&nbsp;stringValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i73\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#not--\">not</a></span>()</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr id=\"i74\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#not-boolean-\">not</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr id=\"i75\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr id=\"i76\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#or--\">or</a></span>()</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr id=\"i77\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr id=\"i78\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>\n<div class=\"block\">Adds a new order by statement</div>\n</td>\n</tr>\n<tr id=\"i79\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#parameter-java.lang.String-java.lang.String-\">parameter</a></span>(java.lang.String&nbsp;parameter,\n         java.lang.String&nbsp;value)</code>\n<div class=\"block\">Row Operations</div>\n</td>\n</tr>\n<tr id=\"i80\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#removeInlineCount--\">removeInlineCount</a></span>()</code>\n<div class=\"block\">Set the inlinecount property to false.</div>\n</td>\n</tr>\n<tr id=\"i81\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr id=\"i82\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;find,\n       java.lang.String&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr id=\"i83\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i84\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i85\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#second-java.lang.String-\">second</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i86\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#select-java.lang.String...-\">select</a></span>(java.lang.String...&nbsp;fields)</code>\n<div class=\"block\">Specifies the fields to retrieve</div>\n</td>\n</tr>\n<tr id=\"i87\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">setQueryNode</a></span>(com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;queryNode)</code>\n<div class=\"block\">Sets the root node of the query</div>\n</td>\n</tr>\n<tr id=\"i88\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#setTable-com.microsoft.windowsazure.mobileservices.table.MobileServiceTable-\">setTable</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;table)</code>\n<div class=\"block\">Sets the MobileServiceTable<E> to query</div>\n</td>\n</tr>\n<tr id=\"i89\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#skip-int-\">skip</a></span>(int&nbsp;skip)</code>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n</td>\n</tr>\n<tr id=\"i90\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n          <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr id=\"i91\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#startsWith-java.lang.String-java.lang.String-\">startsWith</a></span>(java.lang.String&nbsp;field,\n          java.lang.String&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr id=\"i92\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#sub--\">sub</a></span>()</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr id=\"i93\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#sub-java.lang.Number-\">sub</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr id=\"i94\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr id=\"i95\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i96\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n         <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i97\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-java.lang.String-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i98\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-java.lang.String-int-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos,\n         int&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i99\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n</td>\n</tr>\n<tr id=\"i100\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf</a></span>(java.lang.String&nbsp;str,\n           java.lang.String&nbsp;field)</code>\n<div class=\"block\">Whether the string parameter occurs in the field</div>\n</td>\n</tr>\n<tr id=\"i101\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#tableName-java.lang.String-\">tableName</a></span>(java.lang.String&nbsp;tableName)</code>\n<div class=\"block\">Sets the table name;</div>\n</td>\n</tr>\n<tr id=\"i102\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String Operators</div>\n</td>\n</tr>\n<tr id=\"i103\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toLower-java.lang.String-\">toLower</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</td>\n</tr>\n<tr id=\"i104\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#top-int-\">top</a></span>(int&nbsp;top)</code>\n<div class=\"block\">Sets the number of records to return</div>\n</td>\n</tr>\n<tr id=\"i105\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n</td>\n</tr>\n<tr id=\"i106\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toUpper-java.lang.String-\">toUpper</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n</td>\n</tr>\n<tr id=\"i107\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr id=\"i108\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#trim-java.lang.String-\">trim</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr id=\"i109\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#val-boolean-\">val</a></span>(boolean&nbsp;val)</code>\n<div class=\"block\">Specifies a boolean value</div>\n</td>\n</tr>\n<tr id=\"i110\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#val-java.util.Date-\">val</a></span>(java.util.Date&nbsp;date)</code>\n<div class=\"block\">Specifies a date value</div>\n</td>\n</tr>\n<tr id=\"i111\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#val-java.lang.Number-\">val</a></span>(java.lang.Number&nbsp;number)</code>\n<div class=\"block\">Specifies a numeric value</div>\n</td>\n</tr>\n<tr id=\"i112\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#val-java.lang.String-\">val</a></span>(java.lang.String&nbsp;s)</code>\n<div class=\"block\">Specifies a string value</div>\n</td>\n</tr>\n<tr id=\"i113\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Date Operators</div>\n</td>\n</tr>\n<tr id=\"i114\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#year-java.lang.String-\">year</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The year component value of the parameter value.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"ExecutableQuery--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ExecutableQuery</h4>\n<pre>public&nbsp;ExecutableQuery()</pre>\n<div class=\"block\">Creates an empty Query</div>\n</li>\n</ul>\n<a name=\"ExecutableQuery-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>ExecutableQuery</h4>\n<pre>public&nbsp;ExecutableQuery(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Creates Query<E> with an existing query as its only internal value</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - The query step to add</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"setTable-com.microsoft.windowsazure.mobileservices.table.MobileServiceTable-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setTable</h4>\n<pre>public&nbsp;void&nbsp;setTable(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;table)</pre>\n<div class=\"block\">Sets the MobileServiceTable<E> to query</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>table</code> - The MobileServiceTable<E> to query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"execute--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&gt;&nbsp;execute()</pre>\n<div class=\"block\">Executes the query</div>\n</li>\n</ul>\n<a name=\"execute-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>execute</h4>\n<pre>public&nbsp;void&nbsp;execute(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;callback)</pre>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#execute--\"><code>execute()</code></a> instead</span></div>\n<div class=\"block\">Executes the query</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>callback</code> - Callback to invoke when the operation is completed</dd>\n</dl>\n</li>\n</ul>\n<a name=\"deepClone--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>deepClone</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;deepClone()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#deepClone--\">Query</a></code></span></div>\n<div class=\"block\">Deep clone the Query instance</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#deepClone--\">deepClone</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A cloned instance of the Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getQueryNode--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getQueryNode</h4>\n<pre>public&nbsp;com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;getQueryNode()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getQueryNode--\">Query</a></code></span></div>\n<div class=\"block\">Returns the root node of the query</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getQueryNode--\">getQueryNode</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setQueryNode</h4>\n<pre>public&nbsp;void&nbsp;setQueryNode(com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;queryNode)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">Query</a></code></span></div>\n<div class=\"block\">Sets the root node of the query</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">setQueryNode</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>queryNode</code> - The node to set</dd>\n</dl>\n</li>\n</ul>\n<a name=\"hasInlineCount--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>hasInlineCount</h4>\n<pre>public&nbsp;boolean&nbsp;hasInlineCount()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hasInlineCount--\">Query</a></code></span></div>\n<div class=\"block\">Returns true if inline count is requested.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hasInlineCount--\">hasInlineCount</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getOrderBy--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getOrderBy</h4>\n<pre>public&nbsp;java.util.List&lt;&lt;any&gt;&gt;&nbsp;getOrderBy()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getOrderBy--\">Query</a></code></span></div>\n<div class=\"block\">Returns a list of fields to order by the results, and their respective\n ordering direction</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getOrderBy--\">getOrderBy</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getProjection--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getProjection</h4>\n<pre>public&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;getProjection()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getProjection--\">Query</a></code></span></div>\n<div class=\"block\">Returns a requested list of projections;</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getProjection--\">getProjection</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getUserDefinedParameters--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getUserDefinedParameters</h4>\n<pre>public&nbsp;java.util.List&lt;&lt;any&gt;&gt;&nbsp;getUserDefinedParameters()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getUserDefinedParameters--\">Query</a></code></span></div>\n<div class=\"block\">Returns a list of custom parameters set by the user</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getUserDefinedParameters--\">getUserDefinedParameters</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTop--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTop</h4>\n<pre>public&nbsp;int&nbsp;getTop()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getTop--\">Query</a></code></span></div>\n<div class=\"block\">Returns a specified top value;</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getTop--\">getTop</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getSkip--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getSkip</h4>\n<pre>public&nbsp;int&nbsp;getSkip()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getSkip--\">Query</a></code></span></div>\n<div class=\"block\">Returns a specified skip value;</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getSkip--\">getSkip</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTableName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTableName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getTableName()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getTableName--\">Query</a></code></span></div>\n<div class=\"block\">Returns the table name;</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getTableName--\">getTableName</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"tableName-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>tableName</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;tableName(java.lang.String&nbsp;tableName)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#tableName-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Sets the table name;</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#tableName-java.lang.String-\">tableName</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"parameter-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>parameter</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;parameter(java.lang.String&nbsp;parameter,\n                                    java.lang.String&nbsp;value)</pre>\n<div class=\"block\">Row Operations</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#parameter-java.lang.String-java.lang.String-\">parameter</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>parameter</code> - The parameter name</dd>\n<dd><code>value</code> - The parameter value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>orderBy</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;orderBy(java.lang.String&nbsp;field,\n                                  <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">Query</a></code></span></div>\n<div class=\"block\">Adds a new order by statement</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - FieldName</dd>\n<dd><code>order</code> - Sorting order</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"top-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>top</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;top(int&nbsp;top)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#top-int-\">Query</a></code></span></div>\n<div class=\"block\">Sets the number of records to return</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#top-int-\">top</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>top</code> - Number of records to return</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"skip-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>skip</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;skip(int&nbsp;skip)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#skip-int-\">Query</a></code></span></div>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#skip-int-\">skip</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"includeInlineCount--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>includeInlineCount</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;includeInlineCount()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#includeInlineCount--\">Query</a></code></span></div>\n<div class=\"block\">The inlinecount property specifies whether or not to retrieve a property\n with the number of records returned.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#includeInlineCount--\">includeInlineCount</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"removeInlineCount--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>removeInlineCount</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;removeInlineCount()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#removeInlineCount--\">Query</a></code></span></div>\n<div class=\"block\">Set the inlinecount property to false.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#removeInlineCount--\">removeInlineCount</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"select-java.lang.String...-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>select</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;select(java.lang.String...&nbsp;fields)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#select-java.lang.String...-\">Query</a></code></span></div>\n<div class=\"block\">Specifies the fields to retrieve</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#select-java.lang.String...-\">select</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>fields</code> - Names of the fields to retrieve</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"field-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>field</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;field(java.lang.String&nbsp;fieldName)</pre>\n<div class=\"block\">Query Operations</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#field-java.lang.String-\">field</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>fieldName</code> - The field to use</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;val(java.lang.Number&nbsp;number)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Specifies a numeric value</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.Number-\">val</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>number</code> - The numeric value to use</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;val(boolean&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-boolean-\">Query</a></code></span></div>\n<div class=\"block\">Specifies a boolean value</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-boolean-\">val</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;val(java.lang.String&nbsp;s)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Specifies a string value</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.String-\">val</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;val(java.util.Date&nbsp;date)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Specifies a date value</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.util.Date-\">val</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"and--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>and</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;and()</pre>\n<div class=\"block\">Logical Operators</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and--\">and</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>and</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;and(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Conditional and.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"or--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>or</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;or()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or--\">Query</a></code></span></div>\n<div class=\"block\">Conditional or.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or--\">or</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>or</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;or(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Conditional or.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"not--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>not</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;not()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not--\">Query</a></code></span></div>\n<div class=\"block\">Logical not.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not--\">not</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>not</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;not(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Logical not.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"not-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>not</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;not(boolean&nbsp;booleanValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-boolean-\">Query</a></code></span></div>\n<div class=\"block\">Logical not.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-boolean-\">not</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;ge()</pre>\n<div class=\"block\">Comparison Operators</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge--\">ge</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;ge(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;ge(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.lang.Number-\">ge</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;ge(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.util.Date-\">ge</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;le()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le--\">Query</a></code></span></div>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le--\">le</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;le(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;le(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.lang.Number-\">le</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;le(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.util.Date-\">le</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;gt()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt--\">Query</a></code></span></div>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt--\">gt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;gt(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;gt(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.lang.Number-\">gt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;gt(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.util.Date-\">gt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;lt()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt--\">Query</a></code></span></div>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt--\">lt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;lt(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;lt(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.lang.Number-\">lt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;lt(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.util.Date-\">lt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;eq()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq--\">Query</a></code></span></div>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq--\">eq</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;eq(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;eq(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.Number-\">eq</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;eq(boolean&nbsp;booleanValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-boolean-\">Query</a></code></span></div>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-boolean-\">eq</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;eq(java.lang.String&nbsp;stringValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.String-\">eq</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;eq(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.util.Date-\">eq</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;ne()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne--\">Query</a></code></span></div>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne--\">ne</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;ne(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;ne(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.Number-\">ne</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;ne(boolean&nbsp;booleanValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-boolean-\">Query</a></code></span></div>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-boolean-\">ne</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;ne(java.lang.String&nbsp;stringValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.String-\">ne</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;ne(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.util.Date-\">Query</a></code></span></div>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.util.Date-\">ne</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"add--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;add()</pre>\n<div class=\"block\">Arithmetic Operators</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add--\">add</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;add(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Add operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"add-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;add(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Add operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-java.lang.Number-\">add</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"sub--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>sub</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;sub()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub--\">Query</a></code></span></div>\n<div class=\"block\">Subtract operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub--\">sub</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>sub</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;sub(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Subtract operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"sub-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>sub</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;sub(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Subtract operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-java.lang.Number-\">sub</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mul--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mul</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;mul()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul--\">Query</a></code></span></div>\n<div class=\"block\">Multiply operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul--\">mul</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mul</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;mul(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Multiply operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mul-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mul</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;mul(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Multiply operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-java.lang.Number-\">mul</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"div--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>div</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;div()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div--\">Query</a></code></span></div>\n<div class=\"block\">Divide operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div--\">div</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>div</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;div(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Divide operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"div-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>div</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;div(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Divide operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-java.lang.Number-\">div</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mod--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mod</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;mod()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod--\">Query</a></code></span></div>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod--\">mod</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mod</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;mod(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mod-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mod</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;mod(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-java.lang.Number-\">Query</a></code></span></div>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-java.lang.Number-\">mod</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>year</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;year(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Date Operators</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"year-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>year</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;year(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The year component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-java.lang.String-\">year</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>month</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;month(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The month component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"month-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>month</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;month(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The month component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-java.lang.String-\">month</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>day</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;day(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The day component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"day-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>day</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;day(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The day component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-java.lang.String-\">day</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>hour</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;hour(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The hour component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"hour-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>hour</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;hour(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The hour component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-java.lang.String-\">hour</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>minute</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;minute(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The minute component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"minute-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>minute</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;minute(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The minute component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-java.lang.String-\">minute</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>second</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;second(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The second component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"second-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>second</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;second(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The second component value of the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-java.lang.String-\">second</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>floor</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;floor(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Math Functions</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ceiling</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;ceiling(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>round</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;round(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toLower</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;toLower(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">String Operators</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toLower-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toLower</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;toLower(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-java.lang.String-\">toLower</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toUpper</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;toUpper(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toUpper-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toUpper</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;toUpper(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-java.lang.String-\">toUpper</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>length</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;length(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"length-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>length</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;length(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-java.lang.String-\">length</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>trim</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;trim(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"trim-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>trim</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;trim(java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-java.lang.String-\">trim</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>startsWith</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;startsWith(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n                                     <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate</dd>\n<dd><code>start</code> - Start value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"startsWith-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>startsWith</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;startsWith(java.lang.String&nbsp;field,\n                                     java.lang.String&nbsp;start)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-java.lang.String-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-java.lang.String-java.lang.String-\">startsWith</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate</dd>\n<dd><code>start</code> - Start value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>endsWith</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;endsWith(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n                                   <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate</dd>\n<dd><code>end</code> - End value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"endsWith-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>endsWith</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;endsWith(java.lang.String&nbsp;field,\n                                   java.lang.String&nbsp;end)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-java.lang.String-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-java.lang.String-java.lang.String-\">endsWith</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate</dd>\n<dd><code>end</code> - End value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subStringOf</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;subStringOf(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n                                      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str1</code> - First string</dd>\n<dd><code>str2</code> - Second string</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subStringOf-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subStringOf</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;subStringOf(java.lang.String&nbsp;str,\n                                      java.lang.String&nbsp;field)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-java.lang.String-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Whether the string parameter occurs in the field</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dd><code>field</code> - Field to search in</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>concat</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;concat(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n                                 <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str1</code> - First string</dd>\n<dd><code>str2</code> - Second string</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>concat</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;concat(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n                                 java.lang.String&nbsp;str2)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str1</code> - First string</dd>\n<dd><code>str2</code> - Second string</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>indexOf</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;indexOf(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n                                  <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>haystack</code> - String content</dd>\n<dd><code>needle</code> - Value to search for</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"indexOf-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>indexOf</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;indexOf(java.lang.String&nbsp;field,\n                                  java.lang.String&nbsp;needle)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-java.lang.String-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-java.lang.String-java.lang.String-\">indexOf</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to search in</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;subString(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n                                    <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String content</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-java.lang.String-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;subString(java.lang.String&nbsp;field,\n                                    int&nbsp;pos)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-\">Query</a></code></span></div>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-\">subString</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to scan</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;subString(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n                                    <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n                                    <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String content</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dd><code>length</code> - Length</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-java.lang.String-int-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;subString(java.lang.String&nbsp;field,\n                                    int&nbsp;pos,\n                                    int&nbsp;length)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-int-\">Query</a></code></span></div>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-int-\">subString</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to scan</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dd><code>length</code> - Length</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>replace</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;replace(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n                                  <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n                                  <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">Query</a></code></span></div>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String content</dd>\n<dd><code>find</code> - Search value</dd>\n<dd><code>replace</code> - Replace value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"replace-java.lang.String-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>replace</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;&nbsp;replace(java.lang.String&nbsp;field,\n                                  java.lang.String&nbsp;find,\n                                  java.lang.String&nbsp;replace)</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-java.lang.String-java.lang.String-java.lang.String-\">Query</a></code></span></div>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to scan</dd>\n<dd><code>find</code> - Search value</dd>\n<dd><code>replace</code> - Replace value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ExecutableQuery.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ExecutableQuery.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/Query.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Query</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Query\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6,\"i1\":6,\"i2\":6,\"i3\":6,\"i4\":6,\"i5\":6,\"i6\":6,\"i7\":6,\"i8\":6,\"i9\":6,\"i10\":6,\"i11\":6,\"i12\":6,\"i13\":6,\"i14\":6,\"i15\":6,\"i16\":6,\"i17\":6,\"i18\":6,\"i19\":6,\"i20\":6,\"i21\":6,\"i22\":6,\"i23\":6,\"i24\":6,\"i25\":6,\"i26\":6,\"i27\":6,\"i28\":6,\"i29\":6,\"i30\":6,\"i31\":6,\"i32\":6,\"i33\":6,\"i34\":6,\"i35\":6,\"i36\":6,\"i37\":6,\"i38\":6,\"i39\":6,\"i40\":6,\"i41\":6,\"i42\":6,\"i43\":6,\"i44\":6,\"i45\":6,\"i46\":6,\"i47\":6,\"i48\":6,\"i49\":6,\"i50\":6,\"i51\":6,\"i52\":6,\"i53\":6,\"i54\":6,\"i55\":6,\"i56\":6,\"i57\":6,\"i58\":6,\"i59\":6,\"i60\":6,\"i61\":6,\"i62\":6,\"i63\":6,\"i64\":6,\"i65\":6,\"i66\":6,\"i67\":6,\"i68\":6,\"i69\":6,\"i70\":6,\"i71\":6,\"i72\":6,\"i73\":6,\"i74\":6,\"i75\":6,\"i76\":6,\"i77\":6,\"i78\":6,\"i79\":6,\"i80\":6,\"i81\":6,\"i82\":6,\"i83\":6,\"i84\":6,\"i85\":6,\"i86\":6,\"i87\":6,\"i88\":6,\"i89\":6,\"i90\":6,\"i91\":6,\"i92\":6,\"i93\":6,\"i94\":6,\"i95\":6,\"i96\":6,\"i97\":6,\"i98\":6,\"i99\":6,\"i100\":6,\"i101\":6,\"i102\":6,\"i103\":6,\"i104\":6,\"i105\":6,\"i106\":6,\"i107\":6,\"i108\":6,\"i109\":6,\"i110\":6,\"i111\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/Query.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/Query.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"Query.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.query</div>\n<h2 title=\"Interface Query\" class=\"title\">Interface Query</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Known Implementing Classes:</dt>\n<dd><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>, <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">Query</span></pre>\n<div class=\"block\">Interface that represents a query to a table.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add--\">add</a></span>()</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-java.lang.Number-\">add</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and--\">and</a></span>()</code>\n<div class=\"block\">Conditional and.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional and.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      java.lang.String&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i9\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-java.lang.String-\">day</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i10\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#deepClone--\">deepClone</a></span>()</code>\n<div class=\"block\">Deep clone the Query instance</div>\n</td>\n</tr>\n<tr id=\"i11\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div--\">div</a></span>()</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr id=\"i12\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-java.lang.Number-\">div</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr id=\"i13\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr id=\"i14\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n        <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr id=\"i15\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-java.lang.String-java.lang.String-\">endsWith</a></span>(java.lang.String&nbsp;field,\n        java.lang.String&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr id=\"i16\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq--\">eq</a></span>()</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i17\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-boolean-\">eq</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i18\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.util.Date-\">eq</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i19\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.Number-\">eq</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i20\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i21\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.String-\">eq</a></span>(java.lang.String&nbsp;stringValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i22\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#field-java.lang.String-\">field</a></span>(java.lang.String&nbsp;fieldName)</code>\n<div class=\"block\">Specifies the field to use</div>\n</td>\n</tr>\n<tr id=\"i23\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The largest integral value less than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i24\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge--\">ge</a></span>()</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i25\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.util.Date-\">ge</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i26\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.lang.Number-\">ge</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i27\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i28\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;&lt;any&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getOrderBy--\">getOrderBy</a></span>()</code>\n<div class=\"block\">Returns a list of fields to order by the results, and their respective\n ordering direction</div>\n</td>\n</tr>\n<tr id=\"i29\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;java.lang.String&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getProjection--\">getProjection</a></span>()</code>\n<div class=\"block\">Returns a requested list of projections;</div>\n</td>\n</tr>\n<tr id=\"i30\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.microsoft.windowsazure.mobileservices.table.query.QueryNode</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getQueryNode--\">getQueryNode</a></span>()</code>\n<div class=\"block\">Returns the root node of the query</div>\n</td>\n</tr>\n<tr id=\"i31\" class=\"rowColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getSkip--\">getSkip</a></span>()</code>\n<div class=\"block\">Returns a specified skip value;</div>\n</td>\n</tr>\n<tr id=\"i32\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getTableName--\">getTableName</a></span>()</code>\n<div class=\"block\">Returns the table name;</div>\n</td>\n</tr>\n<tr id=\"i33\" class=\"rowColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getTop--\">getTop</a></span>()</code>\n<div class=\"block\">Returns a specified top value;</div>\n</td>\n</tr>\n<tr id=\"i34\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;&lt;any&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getUserDefinedParameters--\">getUserDefinedParameters</a></span>()</code>\n<div class=\"block\">Returns a list of custom parameters set by the user</div>\n</td>\n</tr>\n<tr id=\"i35\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt--\">gt</a></span>()</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i36\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.util.Date-\">gt</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i37\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.lang.Number-\">gt</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i38\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i39\" class=\"rowColor\">\n<td class=\"colFirst\"><code>boolean</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hasInlineCount--\">hasInlineCount</a></span>()</code>\n<div class=\"block\">Returns true if inline count is requested.</div>\n</td>\n</tr>\n<tr id=\"i40\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i41\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-java.lang.String-\">hour</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i42\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#includeInlineCount--\">includeInlineCount</a></span>()</code>\n<div class=\"block\">The inlinecount property specifies whether or not to retrieve a property\n with the number of records returned.</div>\n</td>\n</tr>\n<tr id=\"i43\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr id=\"i44\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-java.lang.String-java.lang.String-\">indexOf</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;needle)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr id=\"i45\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le--\">le</a></span>()</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i46\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.util.Date-\">le</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i47\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.lang.Number-\">le</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i48\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i49\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr id=\"i50\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-java.lang.String-\">length</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr id=\"i51\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt--\">lt</a></span>()</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i52\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.util.Date-\">lt</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i53\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.lang.Number-\">lt</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i54\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i55\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i56\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-java.lang.String-\">minute</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i57\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod--\">mod</a></span>()</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr id=\"i58\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-java.lang.Number-\">mod</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr id=\"i59\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr id=\"i60\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i61\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-java.lang.String-\">month</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i62\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul--\">mul</a></span>()</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr id=\"i63\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-java.lang.Number-\">mul</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr id=\"i64\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr id=\"i65\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne--\">ne</a></span>()</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i66\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-boolean-\">ne</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i67\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.util.Date-\">ne</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i68\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.Number-\">ne</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i69\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i70\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.String-\">ne</a></span>(java.lang.String&nbsp;stringValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i71\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not--\">not</a></span>()</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr id=\"i72\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-boolean-\">not</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr id=\"i73\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr id=\"i74\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or--\">or</a></span>()</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr id=\"i75\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr id=\"i76\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>\n<div class=\"block\">Adds a new order by statement</div>\n</td>\n</tr>\n<tr id=\"i77\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#parameter-java.lang.String-java.lang.String-\">parameter</a></span>(java.lang.String&nbsp;parameter,\n         java.lang.String&nbsp;value)</code>\n<div class=\"block\">Adds a new user-defined parameter to the query</div>\n</td>\n</tr>\n<tr id=\"i78\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#removeInlineCount--\">removeInlineCount</a></span>()</code>\n<div class=\"block\">Set the inlinecount property to false.</div>\n</td>\n</tr>\n<tr id=\"i79\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr id=\"i80\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;find,\n       java.lang.String&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr id=\"i81\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i82\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i83\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-java.lang.String-\">second</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i84\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#select-java.lang.String...-\">select</a></span>(java.lang.String...&nbsp;fields)</code>\n<div class=\"block\">Specifies the fields to retrieve</div>\n</td>\n</tr>\n<tr id=\"i85\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">setQueryNode</a></span>(com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;queryNode)</code>\n<div class=\"block\">Sets the root node of the query</div>\n</td>\n</tr>\n<tr id=\"i86\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#skip-int-\">skip</a></span>(int&nbsp;skip)</code>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n</td>\n</tr>\n<tr id=\"i87\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n          <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr id=\"i88\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-java.lang.String-java.lang.String-\">startsWith</a></span>(java.lang.String&nbsp;field,\n          java.lang.String&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr id=\"i89\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub--\">sub</a></span>()</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr id=\"i90\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-java.lang.Number-\">sub</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr id=\"i91\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr id=\"i92\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i93\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n         <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i94\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i95\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos,\n         int&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i96\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n</td>\n</tr>\n<tr id=\"i97\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf</a></span>(java.lang.String&nbsp;str,\n           java.lang.String&nbsp;field)</code>\n<div class=\"block\">Whether the string parameter occurs in the field</div>\n</td>\n</tr>\n<tr id=\"i98\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#tableName-java.lang.String-\">tableName</a></span>(java.lang.String&nbsp;tableName)</code>\n<div class=\"block\">Sets the table name;</div>\n</td>\n</tr>\n<tr id=\"i99\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</td>\n</tr>\n<tr id=\"i100\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-java.lang.String-\">toLower</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</td>\n</tr>\n<tr id=\"i101\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#top-int-\">top</a></span>(int&nbsp;top)</code>\n<div class=\"block\">Sets the number of records to return</div>\n</td>\n</tr>\n<tr id=\"i102\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n</td>\n</tr>\n<tr id=\"i103\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-java.lang.String-\">toUpper</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n</td>\n</tr>\n<tr id=\"i104\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr id=\"i105\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-java.lang.String-\">trim</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr id=\"i106\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-boolean-\">val</a></span>(boolean&nbsp;val)</code>\n<div class=\"block\">Specifies a boolean value</div>\n</td>\n</tr>\n<tr id=\"i107\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.util.Date-\">val</a></span>(java.util.Date&nbsp;date)</code>\n<div class=\"block\">Specifies a date value</div>\n</td>\n</tr>\n<tr id=\"i108\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.Number-\">val</a></span>(java.lang.Number&nbsp;number)</code>\n<div class=\"block\">Specifies a numeric value</div>\n</td>\n</tr>\n<tr id=\"i109\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.String-\">val</a></span>(java.lang.String&nbsp;s)</code>\n<div class=\"block\">Specifies a string value</div>\n</td>\n</tr>\n<tr id=\"i110\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The year component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i111\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-java.lang.String-\">year</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The year component value of the parameter value.</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"deepClone--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>deepClone</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;deepClone()</pre>\n<div class=\"block\">Deep clone the Query instance</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A cloned instance of the Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getQueryNode--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getQueryNode</h4>\n<pre>com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;getQueryNode()</pre>\n<div class=\"block\">Returns the root node of the query</div>\n</li>\n</ul>\n<a name=\"setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setQueryNode</h4>\n<pre>void&nbsp;setQueryNode(com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;queryNode)</pre>\n<div class=\"block\">Sets the root node of the query</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>queryNode</code> - The node to set</dd>\n</dl>\n</li>\n</ul>\n<a name=\"hasInlineCount--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>hasInlineCount</h4>\n<pre>boolean&nbsp;hasInlineCount()</pre>\n<div class=\"block\">Returns true if inline count is requested.</div>\n</li>\n</ul>\n<a name=\"getOrderBy--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getOrderBy</h4>\n<pre>java.util.List&lt;&lt;any&gt;&gt;&nbsp;getOrderBy()</pre>\n<div class=\"block\">Returns a list of fields to order by the results, and their respective\n ordering direction</div>\n</li>\n</ul>\n<a name=\"getProjection--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getProjection</h4>\n<pre>java.util.List&lt;java.lang.String&gt;&nbsp;getProjection()</pre>\n<div class=\"block\">Returns a requested list of projections;</div>\n</li>\n</ul>\n<a name=\"getUserDefinedParameters--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getUserDefinedParameters</h4>\n<pre>java.util.List&lt;&lt;any&gt;&gt;&nbsp;getUserDefinedParameters()</pre>\n<div class=\"block\">Returns a list of custom parameters set by the user</div>\n</li>\n</ul>\n<a name=\"getTop--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTop</h4>\n<pre>int&nbsp;getTop()</pre>\n<div class=\"block\">Returns a specified top value;</div>\n</li>\n</ul>\n<a name=\"getSkip--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getSkip</h4>\n<pre>int&nbsp;getSkip()</pre>\n<div class=\"block\">Returns a specified skip value;</div>\n</li>\n</ul>\n<a name=\"getTableName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTableName</h4>\n<pre>java.lang.String&nbsp;getTableName()</pre>\n<div class=\"block\">Returns the table name;</div>\n</li>\n</ul>\n<a name=\"tableName-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>tableName</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;tableName(java.lang.String&nbsp;tableName)</pre>\n<div class=\"block\">Sets the table name;</div>\n</li>\n</ul>\n<a name=\"parameter-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>parameter</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;parameter(java.lang.String&nbsp;parameter,\n                java.lang.String&nbsp;value)</pre>\n<div class=\"block\">Adds a new user-defined parameter to the query</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>parameter</code> - The parameter name</dd>\n<dd><code>value</code> - The parameter value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>orderBy</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;orderBy(java.lang.String&nbsp;field,\n              <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</pre>\n<div class=\"block\">Adds a new order by statement</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - FieldName</dd>\n<dd><code>order</code> - Sorting order</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"top-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>top</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;top(int&nbsp;top)</pre>\n<div class=\"block\">Sets the number of records to return</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>top</code> - Number of records to return</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"skip-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>skip</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;skip(int&nbsp;skip)</pre>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>skip</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"includeInlineCount--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>includeInlineCount</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;includeInlineCount()</pre>\n<div class=\"block\">The inlinecount property specifies whether or not to retrieve a property\n with the number of records returned.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"removeInlineCount--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>removeInlineCount</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;removeInlineCount()</pre>\n<div class=\"block\">Set the inlinecount property to false.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"select-java.lang.String...-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>select</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;select(java.lang.String...&nbsp;fields)</pre>\n<div class=\"block\">Specifies the fields to retrieve</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>fields</code> - Names of the fields to retrieve</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"field-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>field</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field(java.lang.String&nbsp;fieldName)</pre>\n<div class=\"block\">Specifies the field to use</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>fieldName</code> - The field to use</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;val(java.lang.Number&nbsp;number)</pre>\n<div class=\"block\">Specifies a numeric value</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>number</code> - The numeric value to use</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;val(boolean&nbsp;val)</pre>\n<div class=\"block\">Specifies a boolean value</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>number</code> - The boolean value to use</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;val(java.lang.String&nbsp;s)</pre>\n<div class=\"block\">Specifies a string value</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>number</code> - The string value to use</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;val(java.util.Date&nbsp;date)</pre>\n<div class=\"block\">Specifies a date value</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>number</code> - The date value to use</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"and--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>and</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;and()</pre>\n<div class=\"block\">Conditional and.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>and</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;and(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Conditional and.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"or--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>or</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;or()</pre>\n<div class=\"block\">Conditional or.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>or</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;or(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Conditional or.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"not--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>not</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;not()</pre>\n<div class=\"block\">Logical not.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>not</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;not(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Logical not.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"not-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>not</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;not(boolean&nbsp;booleanValue)</pre>\n<div class=\"block\">Logical not.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>booleanValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ge()</pre>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ge(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ge(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>numberValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ge(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>dateValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;le()</pre>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;le(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;le(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>numberValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;le(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>dateValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;gt()</pre>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;gt(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;gt(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>numberValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;gt(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>dateValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;lt()</pre>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;lt(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;lt(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>numberValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;lt(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>dateValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;eq()</pre>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;eq(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;eq(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>numberValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;eq(boolean&nbsp;booleanValue)</pre>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>booleanValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;eq(java.lang.String&nbsp;stringValue)</pre>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>stringValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;eq(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>dateValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ne()</pre>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ne(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ne(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>numberValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ne(boolean&nbsp;booleanValue)</pre>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>booleanValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ne(java.lang.String&nbsp;stringValue)</pre>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>stringValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ne(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>dateValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"add--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;add()</pre>\n<div class=\"block\">Add operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;add(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Add operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"add-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;add(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\">Add operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>val</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"sub--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>sub</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;sub()</pre>\n<div class=\"block\">Subtract operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>sub</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;sub(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Subtract operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"sub-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>sub</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;sub(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\">Subtract operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>val</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mul--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mul</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;mul()</pre>\n<div class=\"block\">Multiply operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mul</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;mul(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Multiply operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mul-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mul</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;mul(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\">Multiply operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"div--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>div</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;div()</pre>\n<div class=\"block\">Divide operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>div</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;div(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Divide operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"div-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>div</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;div(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\">Divide operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>val</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mod--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mod</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;mod()</pre>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mod</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;mod(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mod-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mod</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;mod(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>val</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>year</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;year(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">The year component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"year-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>year</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;year(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The year component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>month</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;month(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">The month component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"month-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>month</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;month(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The month component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>day</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;day(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">The day component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"day-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>day</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;day(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The day component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>hour</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;hour(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">The hour component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"hour-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>hour</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;hour(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The hour component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>minute</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;minute(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">The minute component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"minute-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>minute</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;minute(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The minute component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>second</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;second(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">The second component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"second-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>second</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;second(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The second component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>floor</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;floor(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">The largest integral value less than or equal to the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ceiling</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ceiling(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>round</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;round(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toLower</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;toLower(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toLower-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toLower</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;toLower(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toUpper</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;toUpper(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toUpper-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toUpper</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;toUpper(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>length</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"length-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>length</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>trim</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;trim(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"trim-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>trim</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;trim(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>startsWith</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;startsWith(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n                 <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</pre>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate</dd>\n<dd><code>start</code> - Start value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"startsWith-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>startsWith</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;startsWith(java.lang.String&nbsp;field,\n                 java.lang.String&nbsp;start)</pre>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate</dd>\n<dd><code>start</code> - Start value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>endsWith</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;endsWith(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n               <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</pre>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate</dd>\n<dd><code>end</code> - End value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"endsWith-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>endsWith</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;endsWith(java.lang.String&nbsp;field,\n               java.lang.String&nbsp;end)</pre>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate</dd>\n<dd><code>end</code> - End value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subStringOf</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;subStringOf(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n                  <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</pre>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str1</code> - First string</dd>\n<dd><code>str2</code> - Second string</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subStringOf-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subStringOf</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;subStringOf(java.lang.String&nbsp;str,\n                  java.lang.String&nbsp;field)</pre>\n<div class=\"block\">Whether the string parameter occurs in the field</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str2</code> - String to search</dd>\n<dd><code>field</code> - Field to search in</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>concat</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;concat(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n             <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</pre>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str1</code> - First string</dd>\n<dd><code>str2</code> - Second string</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>concat</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;concat(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n             java.lang.String&nbsp;str2)</pre>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str1</code> - First string</dd>\n<dd><code>str2</code> - Second string</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>indexOf</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;indexOf(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n              <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</pre>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>haystack</code> - String content</dd>\n<dd><code>needle</code> - Value to search for</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"indexOf-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>indexOf</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;indexOf(java.lang.String&nbsp;field,\n              java.lang.String&nbsp;needle)</pre>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to search in</dd>\n<dd><code>str</code> - Value to search for</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;subString(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n                <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</pre>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String content</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-java.lang.String-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;subString(java.lang.String&nbsp;field,\n                int&nbsp;pos)</pre>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to scan</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;subString(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n                <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n                <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</pre>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String content</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dd><code>length</code> - Length</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-java.lang.String-int-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;subString(java.lang.String&nbsp;field,\n                int&nbsp;pos,\n                int&nbsp;length)</pre>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to scan</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dd><code>length</code> - Length</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>replace</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n              <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n              <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</pre>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String content</dd>\n<dd><code>find</code> - Search value</dd>\n<dd><code>replace</code> - Replace value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"replace-java.lang.String-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>replace</h4>\n<pre><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace(java.lang.String&nbsp;field,\n              java.lang.String&nbsp;find,\n              java.lang.String&nbsp;replace)</pre>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to scan</dd>\n<dd><code>find</code> - Search value</dd>\n<dd><code>replace</code> - Replace value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/Query.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/Query.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"Query.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/QueryException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>QueryException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"QueryException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/QueryException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Throwable\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.query</div>\n<h2 title=\"Class QueryException\" class=\"title\">Class QueryException</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Throwable</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Exception</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.RuntimeException</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.query.QueryException</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">QueryException</span>\nextends java.lang.RuntimeException</pre>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../../../serialized-form.html#com.microsoft.windowsazure.mobileservices.table.query.QueryException\">Serialized Form</a></dd>\n</dl>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html#QueryException-java.lang.String-\">QueryException</a></span>(java.lang.String&nbsp;detail)</code>\n<div class=\"block\">Creates a new QueryException with a detail message</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html#QueryException-java.lang.String-java.lang.Throwable-\">QueryException</a></span>(java.lang.String&nbsp;detail,\n              java.lang.Throwable&nbsp;throwable)</code>\n<div class=\"block\">Creates a new QueryException with a detail message and a cause</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Throwable\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Throwable</h3>\n<code>addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"QueryException-java.lang.String-java.lang.Throwable-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>QueryException</h4>\n<pre>public&nbsp;QueryException(java.lang.String&nbsp;detail,\n                      java.lang.Throwable&nbsp;throwable)</pre>\n<div class=\"block\">Creates a new QueryException with a detail message and a cause</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>detail</code> - The detail message</dd>\n<dd><code>throwable</code> - The exception cause</dd>\n</dl>\n</li>\n</ul>\n<a name=\"QueryException-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>QueryException</h4>\n<pre>public&nbsp;QueryException(java.lang.String&nbsp;detail)</pre>\n<div class=\"block\">Creates a new QueryException with a detail message</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>detail</code> - The detail message</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/QueryException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Throwable\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>QueryNodeSQLWriter</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"QueryNodeSQLWriter\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/QueryNodeSQLWriter.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryNodeSQLWriter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.query</div>\n<h2 title=\"Class QueryNodeSQLWriter\" class=\"title\">Class QueryNodeSQLWriter</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.query.QueryNodeSQLWriter</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">QueryNodeSQLWriter</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Query node visitor used to generate SQL filter.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.microsoft.windowsazure.mobileservices.table.query.QueryNode</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html#visit-com.microsoft.windowsazure.mobileservices.table.query.BinaryOperatorNode-\">visit</a></span>(com.microsoft.windowsazure.mobileservices.table.query.BinaryOperatorNode&nbsp;node)</code>\n<div class=\"block\">Visit a binary operator node.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.microsoft.windowsazure.mobileservices.table.query.QueryNode</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html#visit-com.microsoft.windowsazure.mobileservices.table.query.ConstantNode-\">visit</a></span>(com.microsoft.windowsazure.mobileservices.table.query.ConstantNode&nbsp;node)</code>\n<div class=\"block\">Visit a constant node.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.microsoft.windowsazure.mobileservices.table.query.QueryNode</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html#visit-com.microsoft.windowsazure.mobileservices.table.query.FieldNode-\">visit</a></span>(com.microsoft.windowsazure.mobileservices.table.query.FieldNode&nbsp;node)</code>\n<div class=\"block\">Visit a field node.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.microsoft.windowsazure.mobileservices.table.query.QueryNode</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html#visit-com.microsoft.windowsazure.mobileservices.table.query.FunctionCallNode-\">visit</a></span>(com.microsoft.windowsazure.mobileservices.table.query.FunctionCallNode&nbsp;node)</code>\n<div class=\"block\">Visit a function call node.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.microsoft.windowsazure.mobileservices.table.query.QueryNode</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html#visit-com.microsoft.windowsazure.mobileservices.table.query.UnaryOperatorNode-\">visit</a></span>(com.microsoft.windowsazure.mobileservices.table.query.UnaryOperatorNode&nbsp;node)</code>\n<div class=\"block\">Visit a unary operator node.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.query.ConstantNode-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;visit(com.microsoft.windowsazure.mobileservices.table.query.ConstantNode&nbsp;node)</pre>\n<div class=\"block\">Visit a constant node.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>node</code> - The node to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.query.FieldNode-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;visit(com.microsoft.windowsazure.mobileservices.table.query.FieldNode&nbsp;node)</pre>\n<div class=\"block\">Visit a field node.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>node</code> - The node to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.query.UnaryOperatorNode-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;visit(com.microsoft.windowsazure.mobileservices.table.query.UnaryOperatorNode&nbsp;node)</pre>\n<div class=\"block\">Visit a unary operator node.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>node</code> - The node to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.query.BinaryOperatorNode-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;visit(com.microsoft.windowsazure.mobileservices.table.query.BinaryOperatorNode&nbsp;node)</pre>\n<div class=\"block\">Visit a binary operator node.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>node</code> - The node to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.query.FunctionCallNode-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;com.microsoft.windowsazure.mobileservices.table.query.QueryNode&nbsp;visit(com.microsoft.windowsazure.mobileservices.table.query.FunctionCallNode&nbsp;node)</pre>\n<div class=\"block\">Visit a function call node.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>node</code> - The node to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/QueryNodeSQLWriter.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryNodeSQLWriter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>QueryODataWriter</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"QueryODataWriter\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":9,\"i1\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/QueryODataWriter.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryODataWriter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.query</div>\n<h2 title=\"Class QueryODataWriter\" class=\"title\">Class QueryODataWriter</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.query.QueryODataWriter</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">QueryODataWriter</span>\nextends java.lang.Object</pre>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html#QueryODataWriter--\">QueryODataWriter</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html#getRowFilter-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getRowFilter</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Returns the OData string representation of the query</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html#getRowSetModifiers-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.MobileServiceTableSystemPropertiesProvider-\">getRowSetModifiers</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query,\n                  <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a>&nbsp;table)</code>\n<div class=\"block\">Returns the OData string representation of the rowset's modifiers</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"QueryODataWriter--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>QueryODataWriter</h4>\n<pre>public&nbsp;QueryODataWriter()</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getRowFilter-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getRowFilter</h4>\n<pre>public static&nbsp;java.lang.String&nbsp;getRowFilter(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Returns the OData string representation of the query</div>\n</li>\n</ul>\n<a name=\"getRowSetModifiers-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.MobileServiceTableSystemPropertiesProvider-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getRowSetModifiers</h4>\n<pre>public static&nbsp;java.lang.String&nbsp;getRowSetModifiers(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query,\n                                                  <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a>&nbsp;table)\n                                           throws java.io.UnsupportedEncodingException</pre>\n<div class=\"block\">Returns the OData string representation of the rowset's modifiers</div>\n<dl>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.io.UnsupportedEncodingException</code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/QueryODataWriter.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryODataWriter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>QueryOperations</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"QueryOperations\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":9,\"i1\":9,\"i2\":9,\"i3\":9,\"i4\":9,\"i5\":9,\"i6\":9,\"i7\":9,\"i8\":9,\"i9\":9,\"i10\":9,\"i11\":9,\"i12\":9,\"i13\":9,\"i14\":9,\"i15\":9,\"i16\":9,\"i17\":9,\"i18\":9,\"i19\":9,\"i20\":9,\"i21\":9,\"i22\":9,\"i23\":9,\"i24\":9,\"i25\":9,\"i26\":9,\"i27\":9,\"i28\":9,\"i29\":9,\"i30\":9,\"i31\":9,\"i32\":9,\"i33\":9,\"i34\":9,\"i35\":9,\"i36\":9,\"i37\":9,\"i38\":9,\"i39\":9,\"i40\":9,\"i41\":9,\"i42\":9,\"i43\":9,\"i44\":9,\"i45\":9,\"i46\":9,\"i47\":9,\"i48\":9,\"i49\":9,\"i50\":9,\"i51\":9,\"i52\":9,\"i53\":9,\"i54\":9,\"i55\":9,\"i56\":9,\"i57\":9,\"i58\":9,\"i59\":9,\"i60\":9,\"i61\":9,\"i62\":9,\"i63\":9,\"i64\":9,\"i65\":9,\"i66\":9,\"i67\":9,\"i68\":9,\"i69\":9,\"i70\":9,\"i71\":9,\"i72\":9,\"i73\":9,\"i74\":9,\"i75\":9,\"i76\":9,\"i77\":9,\"i78\":9,\"i79\":9,\"i80\":9,\"i81\":9,\"i82\":9,\"i83\":9,\"i84\":9,\"i85\":9,\"i86\":9,\"i87\":9,\"i88\":9,\"i89\":9,\"i90\":9,\"i91\":9,\"i92\":9,\"i93\":9,\"i94\":9,\"i95\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/QueryOperations.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryOperations.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.query</div>\n<h2 title=\"Class QueryOperations\" class=\"title\">Class QueryOperations</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.query.QueryOperations</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">QueryOperations</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Class used to create query operations</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#QueryOperations--\">QueryOperations</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#add--\">add</a></span>()</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#add-java.lang.Number-\">add</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#and--\">and</a></span>()</code>\n<div class=\"block\">Conditional and.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional and.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      java.lang.String&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i9\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#day-java.lang.String-\">day</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i10\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#div--\">div</a></span>()</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr id=\"i11\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#div-java.lang.Number-\">div</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr id=\"i12\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr id=\"i13\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n        <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr id=\"i14\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#endsWith-java.lang.String-java.lang.String-\">endsWith</a></span>(java.lang.String&nbsp;field,\n        java.lang.String&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr id=\"i15\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq--\">eq</a></span>()</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i16\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-boolean-\">eq</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i17\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-java.util.Date-\">eq</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i18\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-java.lang.Number-\">eq</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i19\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i20\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-java.lang.String-\">eq</a></span>(java.lang.String&nbsp;stringValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i21\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#field-java.lang.String-\">field</a></span>(java.lang.String&nbsp;fieldName)</code>\n<div class=\"block\">Creates Query representing a field</div>\n</td>\n</tr>\n<tr id=\"i22\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The largest integral value less than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i23\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge--\">ge</a></span>()</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i24\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge-java.util.Date-\">ge</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i25\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge-java.lang.Number-\">ge</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i26\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i27\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt--\">gt</a></span>()</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i28\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt-java.util.Date-\">gt</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i29\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt-java.lang.Number-\">gt</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i30\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i31\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i32\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#hour-java.lang.String-\">hour</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i33\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr id=\"i34\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#indexOf-java.lang.String-java.lang.String-\">indexOf</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;str)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr id=\"i35\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le--\">le</a></span>()</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i36\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le-java.util.Date-\">le</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i37\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le-java.lang.Number-\">le</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i38\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i39\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr id=\"i40\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#length-java.lang.String-\">length</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr id=\"i41\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt--\">lt</a></span>()</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i42\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt-java.util.Date-\">lt</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i43\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt-java.lang.Number-\">lt</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i44\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i45\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i46\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#minute-java.lang.String-\">minute</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i47\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mod--\">mod</a></span>()</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr id=\"i48\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mod-java.lang.Number-\">mod</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr id=\"i49\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr id=\"i50\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i51\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#month-java.lang.String-\">month</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i52\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mul--\">mul</a></span>()</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr id=\"i53\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mul-java.lang.Number-\">mul</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr id=\"i54\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr id=\"i55\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne--\">ne</a></span>()</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i56\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-boolean-\">ne</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i57\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-java.util.Date-\">ne</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i58\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-java.lang.Number-\">ne</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i59\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i60\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-java.lang.String-\">ne</a></span>(java.lang.String&nbsp;stringValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr id=\"i61\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#not--\">not</a></span>()</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr id=\"i62\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#not-boolean-\">not</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr id=\"i63\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr id=\"i64\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#or--\">or</a></span>()</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr id=\"i65\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr id=\"i66\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">query</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Group query as a single argument.</div>\n</td>\n</tr>\n<tr id=\"i67\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n       <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr id=\"i68\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;find,\n       java.lang.String&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr id=\"i69\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i70\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i71\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#second-java.lang.String-\">second</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i72\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n          <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr id=\"i73\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#startsWith-java.lang.String-java.lang.String-\">startsWith</a></span>(java.lang.String&nbsp;field,\n          java.lang.String&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr id=\"i74\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#sub--\">sub</a></span>()</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr id=\"i75\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#sub-java.lang.Number-\">sub</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr id=\"i76\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr id=\"i77\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i78\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n         <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i79\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-java.lang.String-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i80\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-java.lang.String-int-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos,\n         int&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr id=\"i81\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n</td>\n</tr>\n<tr id=\"i82\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf</a></span>(java.lang.String&nbsp;str,\n           java.lang.String&nbsp;field)</code>\n<div class=\"block\">Whether the string parameter occurs in the field</div>\n</td>\n</tr>\n<tr id=\"i83\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#tableName-java.lang.String-\">tableName</a></span>(java.lang.String&nbsp;tableName)</code>\n<div class=\"block\">Creates Query with the requested table name.</div>\n</td>\n</tr>\n<tr id=\"i84\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</td>\n</tr>\n<tr id=\"i85\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toLower-java.lang.String-\">toLower</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</td>\n</tr>\n<tr id=\"i86\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case</div>\n</td>\n</tr>\n<tr id=\"i87\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toUpper-java.lang.String-\">toUpper</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case</div>\n</td>\n</tr>\n<tr id=\"i88\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr id=\"i89\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#trim-java.lang.String-\">trim</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr id=\"i90\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#val-boolean-\">val</a></span>(boolean&nbsp;val)</code>\n<div class=\"block\">Creates a Query representing a boolean value</div>\n</td>\n</tr>\n<tr id=\"i91\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#val-java.util.Date-\">val</a></span>(java.util.Date&nbsp;date)</code>\n<div class=\"block\">Creates a Query representing a date value</div>\n</td>\n</tr>\n<tr id=\"i92\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#val-java.lang.Number-\">val</a></span>(java.lang.Number&nbsp;number)</code>\n<div class=\"block\">Creates a Query representing a numeric value</div>\n</td>\n</tr>\n<tr id=\"i93\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#val-java.lang.String-\">val</a></span>(java.lang.String&nbsp;s)</code>\n<div class=\"block\">Creates a Query representing a string value</div>\n</td>\n</tr>\n<tr id=\"i94\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The year component value of the parameter value.</div>\n</td>\n</tr>\n<tr id=\"i95\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#year-java.lang.String-\">year</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The year component value of the parameter value.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"QueryOperations--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>QueryOperations</h4>\n<pre>public&nbsp;QueryOperations()</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"tableName-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>tableName</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;tableName(java.lang.String&nbsp;tableName)</pre>\n<div class=\"block\">Creates Query with the requested table name.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tabledName</code> - The name of the table</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"field-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>field</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field(java.lang.String&nbsp;fieldName)</pre>\n<div class=\"block\">Creates Query representing a field</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>fieldName</code> - The name of the field</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;val(java.lang.Number&nbsp;number)</pre>\n<div class=\"block\">Creates a Query representing a numeric value</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>number</code> - the number to represent</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;val(boolean&nbsp;val)</pre>\n<div class=\"block\">Creates a Query representing a boolean value</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>val</code> - the boolean to represent</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;val(java.lang.String&nbsp;s)</pre>\n<div class=\"block\">Creates a Query representing a string value</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>s</code> - the string to represent</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"val-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>val</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;val(java.util.Date&nbsp;date)</pre>\n<div class=\"block\">Creates a Query representing a date value</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>date</code> - the date to represent</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>query</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Group query as a single argument.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"and--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>and</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;and()</pre>\n<div class=\"block\">Conditional and.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>and</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;and(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Conditional and.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"or--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>or</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;or()</pre>\n<div class=\"block\">Conditional or.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>or</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;or(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Conditional or.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"not--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>not</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;not()</pre>\n<div class=\"block\">Logical not.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>not</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;not(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Logical not.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"not-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>not</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;not(boolean&nbsp;booleanValue)</pre>\n<div class=\"block\">Logical not.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>booleanValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ge()</pre>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ge(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ge(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>numberValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ge-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ge</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ge(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>dateValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;le()</pre>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;le(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;le(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>numberValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"le-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>le</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;le(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\">Less than or equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>dateValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;gt()</pre>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;gt(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;gt(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>numberValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"gt-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>gt</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;gt(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\">Greater than comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>dateValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;lt()</pre>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;lt(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;lt(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>numberValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lt-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lt</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;lt(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\">Less than comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>dateValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;eq()</pre>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;eq(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;eq(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>numberValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;eq(boolean&nbsp;booleanValue)</pre>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>booleanValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;eq(java.lang.String&nbsp;stringValue)</pre>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>stringValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"eq-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>eq</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;eq(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\">Equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>dateValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ne()</pre>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ne(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ne(java.lang.Number&nbsp;numberValue)</pre>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>numberValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-boolean-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ne(boolean&nbsp;booleanValue)</pre>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>booleanValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ne(java.lang.String&nbsp;stringValue)</pre>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>stringValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ne-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ne</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ne(java.util.Date&nbsp;dateValue)</pre>\n<div class=\"block\">Not equal comparison operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>dateValue</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"add--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;add()</pre>\n<div class=\"block\">Add operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;add(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Add operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"add-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;add(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\">Add operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>val</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"sub--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>sub</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;sub()</pre>\n<div class=\"block\">Subtract operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>sub</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;sub(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Subtract operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"sub-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>sub</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;sub(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\">Subtract operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>val</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mul--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mul</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;mul()</pre>\n<div class=\"block\">Multiply operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mul</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;mul(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Multiply operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mul-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mul</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;mul(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\">Multiply operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>val</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"div--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>div</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;div()</pre>\n<div class=\"block\">Divide operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>div</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;div(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Divide operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"div-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>div</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;div(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\">Divide operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>val</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mod--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mod</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;mod()</pre>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mod</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;mod(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</pre>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>otherQuery</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"mod-java.lang.Number-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>mod</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;mod(java.lang.Number&nbsp;val)</pre>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>val</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>year</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;year(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">The year component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"year-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>year</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;year(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The year component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>month</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;month(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">The month component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"month-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>month</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;month(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The month component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>day</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;day(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">The day component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"day-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>day</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;day(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The day component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>hour</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;hour(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">The hour component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"hour-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>hour</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;hour(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The hour component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>minute</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;minute(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">The minute component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"minute-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>minute</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;minute(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The minute component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>second</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;second(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">The second component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"second-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>second</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;second(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The second component value of the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>floor</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;floor(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">The largest integral value less than or equal to the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>ceiling</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;ceiling(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>round</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;round(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toLower</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;toLower(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toLower-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toLower</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;toLower(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toUpper</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;toUpper(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"toUpper-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>toUpper</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;toUpper(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>length</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"length-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>length</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>trim</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;trim(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</pre>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"trim-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>trim</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;trim(java.lang.String&nbsp;field)</pre>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>exp</code> - </dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>startsWith</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;startsWith(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n                               <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</pre>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate.</dd>\n<dd><code>start</code> - Start value.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"startsWith-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>startsWith</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;startsWith(java.lang.String&nbsp;field,\n                               java.lang.String&nbsp;start)</pre>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate.</dd>\n<dd><code>start</code> - Start value.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>endsWith</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;endsWith(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n                             <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</pre>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate.</dd>\n<dd><code>end</code> - End value.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"endsWith-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>endsWith</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;endsWith(java.lang.String&nbsp;field,\n                             java.lang.String&nbsp;end)</pre>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - The field to evaluate.</dd>\n<dd><code>end</code> - End value.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subStringOf</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;subStringOf(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n                                <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</pre>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str1</code> - First string</dd>\n<dd><code>str2</code> - Second string</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subStringOf-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subStringOf</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;subStringOf(java.lang.String&nbsp;str,\n                                java.lang.String&nbsp;field)</pre>\n<div class=\"block\">Whether the string parameter occurs in the field</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String to search</dd>\n<dd><code>field</code> - Field to search in</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>concat</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;concat(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n                           <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</pre>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str1</code> - First string</dd>\n<dd><code>str2</code> - Second string</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>concat</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;concat(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n                           java.lang.String&nbsp;str2)</pre>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str1</code> - First string</dd>\n<dd><code>str2</code> - Second string</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>indexOf</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;indexOf(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n                            <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</pre>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>haystack</code> - String content</dd>\n<dd><code>needle</code> - Value to search for</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"indexOf-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>indexOf</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;indexOf(java.lang.String&nbsp;field,\n                            java.lang.String&nbsp;str)</pre>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to seach in</dd>\n<dd><code>str</code> - Value to search for</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;subString(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n                              <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</pre>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String content</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-java.lang.String-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;subString(java.lang.String&nbsp;field,\n                              int&nbsp;pos)</pre>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to scan</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;subString(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n                              <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n                              <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</pre>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String content</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dd><code>length</code> - Length</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"subString-java.lang.String-int-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>subString</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;subString(java.lang.String&nbsp;field,\n                              int&nbsp;pos,\n                              int&nbsp;length)</pre>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to scan</dd>\n<dd><code>pos</code> - Starting position</dd>\n<dd><code>length</code> - Length</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>replace</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n                            <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n                            <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</pre>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>str</code> - String content</dd>\n<dd><code>find</code> - Search value</dd>\n<dd><code>replace</code> - Replace value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n<a name=\"replace-java.lang.String-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>replace</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace(java.lang.String&nbsp;field,\n                            java.lang.String&nbsp;find,\n                            java.lang.String&nbsp;replace)</pre>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>field</code> - Field to scan</dd>\n<dd><code>find</code> - Search value</dd>\n<dd><code>replace</code> - Replace value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Query</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/QueryOperations.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryOperations.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>QueryOrder</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"QueryOrder\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":9,\"i1\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/QueryOrder.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryOrder.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.query</div>\n<h2 title=\"Enum QueryOrder\" class=\"title\">Enum QueryOrder</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Enum&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&gt;</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.query.QueryOrder</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable, java.lang.Comparable&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public enum <span class=\"typeNameLabel\">QueryOrder</span>\nextends java.lang.Enum&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&gt;</pre>\n<div class=\"block\">Sort order values</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== ENUM CONSTANT SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.summary\">\n<!--   -->\n</a>\n<h3>Enum Constant Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Constant Summary table, listing enum constants, and an explanation\">\n<caption><span>Enum Constants</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html#Ascending\">Ascending</a></span></code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html#Descending\">Descending</a></span></code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Enum\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Enum</h3>\n<code>compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>getClass, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ ENUM CONSTANT DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.detail\">\n<!--   -->\n</a>\n<h3>Enum Constant Detail</h3>\n<a name=\"Ascending\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>Ascending</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a> Ascending</pre>\n</li>\n</ul>\n<a name=\"Descending\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>Descending</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a> Descending</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"values--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>values</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>[]&nbsp;values()</pre>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.  This method may be used to iterate\nover the constants as follows:\n<pre>\nfor (QueryOrder c : QueryOrder.values())\n&nbsp;   System.out.println(c);\n</pre></div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>an array containing the constants of this enum type, in the order they are declared</dd>\n</dl>\n</li>\n</ul>\n<a name=\"valueOf-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>valueOf</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;valueOf(java.lang.String&nbsp;name)</pre>\n<div class=\"block\">Returns the enum constant of this type with the specified name.\nThe string must match <i>exactly</i> an identifier used to declare an\nenum constant in this type.  (Extraneous whitespace characters are \nnot permitted.)</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - the name of the enum constant to be returned.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the enum constant with the specified name</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.IllegalArgumentException</code> - if this enum type has no constant with the specified name</dd>\n<dd><code>java.lang.NullPointerException</code> - if the argument is null</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/QueryOrder.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryOrder.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>QuerySQLWriter</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"QuerySQLWriter\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":9,\"i1\":9,\"i2\":9,\"i3\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/QuerySQLWriter.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QuerySQLWriter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.query</div>\n<h2 title=\"Class QuerySQLWriter\" class=\"title\">Class QuerySQLWriter</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.query.QuerySQLWriter</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">QuerySQLWriter</span>\nextends java.lang.Object</pre>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#QuerySQLWriter--\">QuerySQLWriter</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getLimitClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getLimitClause</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Returns the SQL string representation of the query's limit clause</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getOrderByClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getOrderByClause</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Returns the SQL string representation of the query's order by clause</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getSelectClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getSelectClause</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Returns the SQL string representation of the query's select clause</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getWhereClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getWhereClause</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Returns the SQL string representation of the query's where clause</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"QuerySQLWriter--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>QuerySQLWriter</h4>\n<pre>public&nbsp;QuerySQLWriter()</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getSelectClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getSelectClause</h4>\n<pre>public static&nbsp;java.lang.String&nbsp;getSelectClause(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Returns the SQL string representation of the query's select clause</div>\n</li>\n</ul>\n<a name=\"getWhereClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getWhereClause</h4>\n<pre>public static&nbsp;java.lang.String&nbsp;getWhereClause(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)\n                                       throws <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></pre>\n<div class=\"block\">Returns the SQL string representation of the query's where clause</div>\n<dl>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getOrderByClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getOrderByClause</h4>\n<pre>public static&nbsp;java.lang.String&nbsp;getOrderByClause(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Returns the SQL string representation of the query's order by clause</div>\n</li>\n</ul>\n<a name=\"getLimitClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getLimitClause</h4>\n<pre>public static&nbsp;java.lang.String&nbsp;getLimitClause(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Returns the SQL string representation of the query's limit clause</div>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/QuerySQLWriter.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QuerySQLWriter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>UnaryOperatorKind</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"UnaryOperatorKind\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":9,\"i1\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/UnaryOperatorKind.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UnaryOperatorKind.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.query</div>\n<h2 title=\"Enum UnaryOperatorKind\" class=\"title\">Enum UnaryOperatorKind</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Enum&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a>&gt;</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.query.UnaryOperatorKind</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable, java.lang.Comparable&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a>&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public enum <span class=\"typeNameLabel\">UnaryOperatorKind</span>\nextends java.lang.Enum&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a>&gt;</pre>\n<div class=\"block\">Enumeration of kinds of unary operators.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== ENUM CONSTANT SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.summary\">\n<!--   -->\n</a>\n<h3>Enum Constant Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Constant Summary table, listing enum constants, and an explanation\">\n<caption><span>Enum Constants</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html#Not\">Not</a></span></code>\n<div class=\"block\">Logical Not Operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html#Parenthesis\">Parenthesis</a></span></code>\n<div class=\"block\">Parenthesis precedence modifier.</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a>[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Enum\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Enum</h3>\n<code>compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>getClass, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ ENUM CONSTANT DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.detail\">\n<!--   -->\n</a>\n<h3>Enum Constant Detail</h3>\n<a name=\"Not\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>Not</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a> Not</pre>\n<div class=\"block\">Logical Not Operator.</div>\n</li>\n</ul>\n<a name=\"Parenthesis\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>Parenthesis</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a> Parenthesis</pre>\n<div class=\"block\">Parenthesis precedence modifier.</div>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"values--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>values</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a>[]&nbsp;values()</pre>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.  This method may be used to iterate\nover the constants as follows:\n<pre>\nfor (UnaryOperatorKind c : UnaryOperatorKind.values())\n&nbsp;   System.out.println(c);\n</pre></div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>an array containing the constants of this enum type, in the order they are declared</dd>\n</dl>\n</li>\n</ul>\n<a name=\"valueOf-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>valueOf</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a>&nbsp;valueOf(java.lang.String&nbsp;name)</pre>\n<div class=\"block\">Returns the enum constant of this type with the specified name.\nThe string must match <i>exactly</i> an identifier used to declare an\nenum constant in this type.  (Extraneous whitespace characters are \nnot permitted.)</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - the name of the enum constant to be returned.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the enum constant with the specified name</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.IllegalArgumentException</code> - if this enum type has no constant with the specified name</dd>\n<dd><code>java.lang.NullPointerException</code> - if the argument is null</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/UnaryOperatorKind.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UnaryOperatorKind.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/class-use/ExecutableJsonQuery.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.query.ExecutableJsonQuery</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.ExecutableJsonQuery\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/ExecutableJsonQuery.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ExecutableJsonQuery.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.ExecutableJsonQuery\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.query.ExecutableJsonQuery</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> that return <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#includeInlineCount--\">includeInlineCount</a></span>()</code>\n<div class=\"block\">Include a property with the number of records returned.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>\n<div class=\"block\">Creates a query with the specified order</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#parameter-java.lang.String-java.lang.String-\">parameter</a></span>(java.lang.String&nbsp;parameter,\n         java.lang.String&nbsp;value)</code>\n<div class=\"block\">Adds a new user-defined parameter to the query</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#select-java.lang.String...-\">select</a></span>(java.lang.String...&nbsp;fields)</code>\n<div class=\"block\">Specifies the fields to retrieve</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#skip-int-\">skip</a></span>(int&nbsp;skip)</code>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#top-int-\">top</a></span>(int&nbsp;top)</code>\n<div class=\"block\">Sets the number of records to return</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#where--\">where</a></span>()</code>\n<div class=\"block\">Starts a filter to query the table</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#where-com.microsoft.windowsazure.mobileservices.table.query.Query-\">where</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Starts a filter to query the table with an existing filter</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> that return <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#add--\">add</a></span>()</code>\n<div class=\"block\">Arithmetic Operators</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#add-java.lang.Number-\">add</a></span>(java.lang.Number&nbsp;val)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#and--\">and</a></span>()</code>\n<div class=\"block\">Logical Operators</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      java.lang.String&nbsp;str2)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#day-java.lang.String-\">day</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#deepClone--\">deepClone</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#div--\">div</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#div-java.lang.Number-\">div</a></span>(java.lang.Number&nbsp;val)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n        <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#endsWith-java.lang.String-java.lang.String-\">endsWith</a></span>(java.lang.String&nbsp;field,\n        java.lang.String&nbsp;end)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq--\">eq</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-boolean-\">eq</a></span>(boolean&nbsp;booleanValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-java.util.Date-\">eq</a></span>(java.util.Date&nbsp;dateValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-java.lang.Number-\">eq</a></span>(java.lang.Number&nbsp;numberValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-java.lang.String-\">eq</a></span>(java.lang.String&nbsp;stringValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#field-java.lang.String-\">field</a></span>(java.lang.String&nbsp;fieldName)</code>\n<div class=\"block\">Query Operations</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Math Functions</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge--\">ge</a></span>()</code>\n<div class=\"block\">Comparison Operators</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge-java.util.Date-\">ge</a></span>(java.util.Date&nbsp;dateValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge-java.lang.Number-\">ge</a></span>(java.lang.Number&nbsp;numberValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt--\">gt</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt-java.util.Date-\">gt</a></span>(java.util.Date&nbsp;dateValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt-java.lang.Number-\">gt</a></span>(java.lang.Number&nbsp;numberValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#hour-java.lang.String-\">hour</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#includeInlineCount--\">includeInlineCount</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#indexOf-java.lang.String-java.lang.String-\">indexOf</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;needle)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le--\">le</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le-java.util.Date-\">le</a></span>(java.util.Date&nbsp;dateValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le-java.lang.Number-\">le</a></span>(java.lang.Number&nbsp;numberValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#length-java.lang.String-\">length</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt--\">lt</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt-java.util.Date-\">lt</a></span>(java.util.Date&nbsp;dateValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt-java.lang.Number-\">lt</a></span>(java.lang.Number&nbsp;numberValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#minute-java.lang.String-\">minute</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mod--\">mod</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mod-java.lang.Number-\">mod</a></span>(java.lang.Number&nbsp;val)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#month-java.lang.String-\">month</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mul--\">mul</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mul-java.lang.Number-\">mul</a></span>(java.lang.Number&nbsp;val)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne--\">ne</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-boolean-\">ne</a></span>(boolean&nbsp;booleanValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-java.util.Date-\">ne</a></span>(java.util.Date&nbsp;dateValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-java.lang.Number-\">ne</a></span>(java.lang.Number&nbsp;numberValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-java.lang.String-\">ne</a></span>(java.lang.String&nbsp;stringValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#not--\">not</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#not-boolean-\">not</a></span>(boolean&nbsp;booleanValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#or--\">or</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#parameter-java.lang.String-java.lang.String-\">parameter</a></span>(java.lang.String&nbsp;parameter,\n         java.lang.String&nbsp;value)</code>\n<div class=\"block\">Row Operations</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#removeInlineCount--\">removeInlineCount</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;find,\n       java.lang.String&nbsp;replace)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#second-java.lang.String-\">second</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#select-java.lang.String...-\">select</a></span>(java.lang.String...&nbsp;fields)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#skip-int-\">skip</a></span>(int&nbsp;skip)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n          <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#startsWith-java.lang.String-java.lang.String-\">startsWith</a></span>(java.lang.String&nbsp;field,\n          java.lang.String&nbsp;start)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#sub--\">sub</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#sub-java.lang.Number-\">sub</a></span>(java.lang.Number&nbsp;val)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-java.lang.String-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-java.lang.String-int-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos,\n         int&nbsp;length)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n           <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf</a></span>(java.lang.String&nbsp;str,\n           java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#tableName-java.lang.String-\">tableName</a></span>(java.lang.String&nbsp;tableName)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String Operators</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toLower-java.lang.String-\">toLower</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#top-int-\">top</a></span>(int&nbsp;top)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toUpper-java.lang.String-\">toUpper</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#trim-java.lang.String-\">trim</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#val-boolean-\">val</a></span>(boolean&nbsp;val)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#val-java.util.Date-\">val</a></span>(java.util.Date&nbsp;date)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#val-java.lang.Number-\">val</a></span>(java.lang.Number&nbsp;number)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#val-java.lang.String-\">val</a></span>(java.lang.String&nbsp;s)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Date Operators</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#year-java.lang.String-\">year</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/ExecutableJsonQuery.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ExecutableJsonQuery.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/class-use/ExecutableQuery.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/ExecutableQuery.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ExecutableQuery.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> that return <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#includeInlineCount--\">includeInlineCount</a></span>()</code>\n<div class=\"block\">Include a property with the number of records returned.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>\n<div class=\"block\">Creates a query with the specified order</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#parameter-java.lang.String-java.lang.String-\">parameter</a></span>(java.lang.String&nbsp;parameter,\n         java.lang.String&nbsp;value)</code>\n<div class=\"block\">Adds a new user-defined parameter to the query</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#select-java.lang.String...-\">select</a></span>(java.lang.String...&nbsp;fields)</code>\n<div class=\"block\">Specifies the fields to retrieve</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#skip-int-\">skip</a></span>(int&nbsp;skip)</code>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#top-int-\">top</a></span>(int&nbsp;top)</code>\n<div class=\"block\">Sets the number of records to return</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#where--\">where</a></span>()</code>\n<div class=\"block\">Starts a filter to query the table</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#where-com.microsoft.windowsazure.mobileservices.table.query.Query-\">where</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Starts a filter to query the table with an existing filter</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> that return <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#add--\">add</a></span>()</code>\n<div class=\"block\">Arithmetic Operators</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#add-java.lang.Number-\">add</a></span>(java.lang.Number&nbsp;val)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#and--\">and</a></span>()</code>\n<div class=\"block\">Logical Operators</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      java.lang.String&nbsp;str2)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#day-java.lang.String-\">day</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#deepClone--\">deepClone</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#div--\">div</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#div-java.lang.Number-\">div</a></span>(java.lang.Number&nbsp;val)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n        <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#endsWith-java.lang.String-java.lang.String-\">endsWith</a></span>(java.lang.String&nbsp;field,\n        java.lang.String&nbsp;end)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq--\">eq</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-boolean-\">eq</a></span>(boolean&nbsp;booleanValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-java.util.Date-\">eq</a></span>(java.util.Date&nbsp;dateValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-java.lang.Number-\">eq</a></span>(java.lang.Number&nbsp;numberValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-java.lang.String-\">eq</a></span>(java.lang.String&nbsp;stringValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#field-java.lang.String-\">field</a></span>(java.lang.String&nbsp;fieldName)</code>\n<div class=\"block\">Query Operations</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Math Functions</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge--\">ge</a></span>()</code>\n<div class=\"block\">Comparison Operators</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge-java.util.Date-\">ge</a></span>(java.util.Date&nbsp;dateValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge-java.lang.Number-\">ge</a></span>(java.lang.Number&nbsp;numberValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt--\">gt</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt-java.util.Date-\">gt</a></span>(java.util.Date&nbsp;dateValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt-java.lang.Number-\">gt</a></span>(java.lang.Number&nbsp;numberValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#hour-java.lang.String-\">hour</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#includeInlineCount--\">includeInlineCount</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#indexOf-java.lang.String-java.lang.String-\">indexOf</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;needle)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le--\">le</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le-java.util.Date-\">le</a></span>(java.util.Date&nbsp;dateValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le-java.lang.Number-\">le</a></span>(java.lang.Number&nbsp;numberValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#length-java.lang.String-\">length</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt--\">lt</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt-java.util.Date-\">lt</a></span>(java.util.Date&nbsp;dateValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt-java.lang.Number-\">lt</a></span>(java.lang.Number&nbsp;numberValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#minute-java.lang.String-\">minute</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mod--\">mod</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mod-java.lang.Number-\">mod</a></span>(java.lang.Number&nbsp;val)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#month-java.lang.String-\">month</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mul--\">mul</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mul-java.lang.Number-\">mul</a></span>(java.lang.Number&nbsp;val)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne--\">ne</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-boolean-\">ne</a></span>(boolean&nbsp;booleanValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-java.util.Date-\">ne</a></span>(java.util.Date&nbsp;dateValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-java.lang.Number-\">ne</a></span>(java.lang.Number&nbsp;numberValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-java.lang.String-\">ne</a></span>(java.lang.String&nbsp;stringValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#not--\">not</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#not-boolean-\">not</a></span>(boolean&nbsp;booleanValue)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#or--\">or</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#parameter-java.lang.String-java.lang.String-\">parameter</a></span>(java.lang.String&nbsp;parameter,\n         java.lang.String&nbsp;value)</code>\n<div class=\"block\">Row Operations</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#removeInlineCount--\">removeInlineCount</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;find,\n       java.lang.String&nbsp;replace)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#second-java.lang.String-\">second</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#select-java.lang.String...-\">select</a></span>(java.lang.String...&nbsp;fields)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#skip-int-\">skip</a></span>(int&nbsp;skip)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n          <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#startsWith-java.lang.String-java.lang.String-\">startsWith</a></span>(java.lang.String&nbsp;field,\n          java.lang.String&nbsp;start)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#sub--\">sub</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#sub-java.lang.Number-\">sub</a></span>(java.lang.Number&nbsp;val)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-java.lang.String-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-java.lang.String-int-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos,\n         int&nbsp;length)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n           <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf</a></span>(java.lang.String&nbsp;str,\n           java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#tableName-java.lang.String-\">tableName</a></span>(java.lang.String&nbsp;tableName)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String Operators</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toLower-java.lang.String-\">toLower</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#top-int-\">top</a></span>(int&nbsp;top)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toUpper-java.lang.String-\">toUpper</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#trim-java.lang.String-\">trim</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#val-boolean-\">val</a></span>(boolean&nbsp;val)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#val-java.util.Date-\">val</a></span>(java.util.Date&nbsp;date)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#val-java.lang.Number-\">val</a></span>(java.lang.Number&nbsp;number)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#val-java.lang.String-\">val</a></span>(java.lang.String&nbsp;s)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Date Operators</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#year-java.lang.String-\">year</a></span>(java.lang.String&nbsp;field)</code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/ExecutableQuery.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ExecutableQuery.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/class-use/Query.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.table.query.Query</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.query.Query\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/Query.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"Query.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.query.Query\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.table.query.Query</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync\">com.microsoft.windowsazure.mobileservices.table.sync</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.localstore\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> with parameters of type <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">execute</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">execute</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Retrieves a set of rows from the table using a query</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">execute</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a>&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <code>execute(final Query query)</code> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">execute</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;&nbsp;callback)</code>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\"><code>MobileServiceTable.execute(Query query)</code></a> instead</span></div>\n</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#where-com.microsoft.windowsazure.mobileservices.table.query.Query-\">where</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Starts a filter to query the table with an existing filter</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#where-com.microsoft.windowsazure.mobileservices.table.query.Query-\">where</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Starts a filter to query the table with an existing filter</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> that implement <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></span></code>\n<div class=\"block\">Class that represents a query to a specific MobileServiceJsonTable instance</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;E&gt;</span></code>\n<div class=\"block\">Class that represents a query to a specific MobileServiceTable<E> instance</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> that return <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#add--\">add</a></span>()</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add--\">add</a></span>()</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#add-java.lang.Number-\">add</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-java.lang.Number-\">add</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#and--\">and</a></span>()</code>\n<div class=\"block\">Conditional and.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and--\">and</a></span>()</code>\n<div class=\"block\">Conditional and.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional and.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional and.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      java.lang.String&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      java.lang.String&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#day-java.lang.String-\">day</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-java.lang.String-\">day</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#deepClone--\">deepClone</a></span>()</code>\n<div class=\"block\">Deep clone the Query instance</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#div--\">div</a></span>()</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div--\">div</a></span>()</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#div-java.lang.Number-\">div</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-java.lang.Number-\">div</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n        <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n        <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#endsWith-java.lang.String-java.lang.String-\">endsWith</a></span>(java.lang.String&nbsp;field,\n        java.lang.String&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-java.lang.String-java.lang.String-\">endsWith</a></span>(java.lang.String&nbsp;field,\n        java.lang.String&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq--\">eq</a></span>()</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq--\">eq</a></span>()</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-boolean-\">eq</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-boolean-\">eq</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-java.util.Date-\">eq</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.util.Date-\">eq</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-java.lang.Number-\">eq</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.Number-\">eq</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-java.lang.String-\">eq</a></span>(java.lang.String&nbsp;stringValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.String-\">eq</a></span>(java.lang.String&nbsp;stringValue)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#field-java.lang.String-\">field</a></span>(java.lang.String&nbsp;fieldName)</code>\n<div class=\"block\">Creates Query representing a field</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#field-java.lang.String-\">field</a></span>(java.lang.String&nbsp;fieldName)</code>\n<div class=\"block\">Specifies the field to use</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The largest integral value less than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The largest integral value less than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge--\">ge</a></span>()</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge--\">ge</a></span>()</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge-java.util.Date-\">ge</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.util.Date-\">ge</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge-java.lang.Number-\">ge</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.lang.Number-\">ge</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt--\">gt</a></span>()</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt--\">gt</a></span>()</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt-java.util.Date-\">gt</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.util.Date-\">gt</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt-java.lang.Number-\">gt</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.lang.Number-\">gt</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#hour-java.lang.String-\">hour</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-java.lang.String-\">hour</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#includeInlineCount--\">includeInlineCount</a></span>()</code>\n<div class=\"block\">The inlinecount property specifies whether or not to retrieve a property\n with the number of records returned.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#indexOf-java.lang.String-java.lang.String-\">indexOf</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;str)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-java.lang.String-java.lang.String-\">indexOf</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;needle)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le--\">le</a></span>()</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le--\">le</a></span>()</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le-java.util.Date-\">le</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.util.Date-\">le</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le-java.lang.Number-\">le</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.lang.Number-\">le</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#length-java.lang.String-\">length</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-java.lang.String-\">length</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt--\">lt</a></span>()</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt--\">lt</a></span>()</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt-java.util.Date-\">lt</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.util.Date-\">lt</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt-java.lang.Number-\">lt</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.lang.Number-\">lt</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#minute-java.lang.String-\">minute</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-java.lang.String-\">minute</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mod--\">mod</a></span>()</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod--\">mod</a></span>()</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mod-java.lang.Number-\">mod</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-java.lang.Number-\">mod</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#month-java.lang.String-\">month</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-java.lang.String-\">month</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mul--\">mul</a></span>()</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul--\">mul</a></span>()</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mul-java.lang.Number-\">mul</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-java.lang.Number-\">mul</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne--\">ne</a></span>()</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne--\">ne</a></span>()</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-boolean-\">ne</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-boolean-\">ne</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-java.util.Date-\">ne</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.util.Date-\">ne</a></span>(java.util.Date&nbsp;dateValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-java.lang.Number-\">ne</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.Number-\">ne</a></span>(java.lang.Number&nbsp;numberValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-java.lang.String-\">ne</a></span>(java.lang.String&nbsp;stringValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.String-\">ne</a></span>(java.lang.String&nbsp;stringValue)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#not--\">not</a></span>()</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not--\">not</a></span>()</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#not-boolean-\">not</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-boolean-\">not</a></span>(boolean&nbsp;booleanValue)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#or--\">or</a></span>()</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or--\">or</a></span>()</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>\n<div class=\"block\">Adds a new order by statement</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#parameter-java.lang.String-java.lang.String-\">parameter</a></span>(java.lang.String&nbsp;parameter,\n         java.lang.String&nbsp;value)</code>\n<div class=\"block\">Adds a new user-defined parameter to the query</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">query</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Group query as a single argument.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#removeInlineCount--\">removeInlineCount</a></span>()</code>\n<div class=\"block\">Set the inlinecount property to false.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;find,\n       java.lang.String&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace</a></span>(java.lang.String&nbsp;field,\n       java.lang.String&nbsp;find,\n       java.lang.String&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#second-java.lang.String-\">second</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-java.lang.String-\">second</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#select-java.lang.String...-\">select</a></span>(java.lang.String...&nbsp;fields)</code>\n<div class=\"block\">Specifies the fields to retrieve</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#skip-int-\">skip</a></span>(int&nbsp;skip)</code>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n          <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n          <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#startsWith-java.lang.String-java.lang.String-\">startsWith</a></span>(java.lang.String&nbsp;field,\n          java.lang.String&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-java.lang.String-java.lang.String-\">startsWith</a></span>(java.lang.String&nbsp;field,\n          java.lang.String&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#sub--\">sub</a></span>()</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub--\">sub</a></span>()</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#sub-java.lang.Number-\">sub</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-java.lang.Number-\">sub</a></span>(java.lang.Number&nbsp;val)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-java.lang.String-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-java.lang.String-int-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos,\n         int&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-int-\">subString</a></span>(java.lang.String&nbsp;field,\n         int&nbsp;pos,\n         int&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n           <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n           <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf</a></span>(java.lang.String&nbsp;str,\n           java.lang.String&nbsp;field)</code>\n<div class=\"block\">Whether the string parameter occurs in the field</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf</a></span>(java.lang.String&nbsp;str,\n           java.lang.String&nbsp;field)</code>\n<div class=\"block\">Whether the string parameter occurs in the field</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#tableName-java.lang.String-\">tableName</a></span>(java.lang.String&nbsp;tableName)</code>\n<div class=\"block\">Creates Query with the requested table name.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#tableName-java.lang.String-\">tableName</a></span>(java.lang.String&nbsp;tableName)</code>\n<div class=\"block\">Sets the table name;</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toLower-java.lang.String-\">toLower</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-java.lang.String-\">toLower</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#top-int-\">top</a></span>(int&nbsp;top)</code>\n<div class=\"block\">Sets the number of records to return</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toUpper-java.lang.String-\">toUpper</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-java.lang.String-\">toUpper</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#trim-java.lang.String-\">trim</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-java.lang.String-\">trim</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#val-boolean-\">val</a></span>(boolean&nbsp;val)</code>\n<div class=\"block\">Creates a Query representing a boolean value</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-boolean-\">val</a></span>(boolean&nbsp;val)</code>\n<div class=\"block\">Specifies a boolean value</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#val-java.util.Date-\">val</a></span>(java.util.Date&nbsp;date)</code>\n<div class=\"block\">Creates a Query representing a date value</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.util.Date-\">val</a></span>(java.util.Date&nbsp;date)</code>\n<div class=\"block\">Specifies a date value</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#val-java.lang.Number-\">val</a></span>(java.lang.Number&nbsp;number)</code>\n<div class=\"block\">Creates a Query representing a numeric value</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.Number-\">val</a></span>(java.lang.Number&nbsp;number)</code>\n<div class=\"block\">Specifies a numeric value</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#val-java.lang.String-\">val</a></span>(java.lang.String&nbsp;s)</code>\n<div class=\"block\">Creates a Query representing a string value</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.String-\">val</a></span>(java.lang.String&nbsp;s)</code>\n<div class=\"block\">Specifies a string value</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The year component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The year component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#year-java.lang.String-\">year</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The year component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-java.lang.String-\">year</a></span>(java.lang.String&nbsp;field)</code>\n<div class=\"block\">The year component value of the parameter value.</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> with parameters of type <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Add operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional and.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional and.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      java.lang.String&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      java.lang.String&nbsp;str2)</code>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      java.lang.String&nbsp;str2)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n      java.lang.String&nbsp;str2)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The day component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Divide operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n        <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n        <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</code>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n        <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n        <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;end)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The largest integral value less than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The largest integral value less than or equal to the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Math Functions</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Math Functions</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QuerySQLWriter.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getLimitClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getLimitClause</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Returns the SQL string representation of the query's limit clause</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QuerySQLWriter.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getOrderByClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getOrderByClause</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Returns the SQL string representation of the query's order by clause</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryODataWriter.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html#getRowFilter-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getRowFilter</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Returns the OData string representation of the query</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryODataWriter.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html#getRowSetModifiers-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.MobileServiceTableSystemPropertiesProvider-\">getRowSetModifiers</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query,\n                  <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a>&nbsp;table)</code>\n<div class=\"block\">Returns the OData string representation of the rowset's modifiers</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QuerySQLWriter.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getSelectClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getSelectClause</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Returns the SQL string representation of the query's select clause</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QuerySQLWriter.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getWhereClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getWhereClause</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Returns the SQL string representation of the query's where clause</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Greater than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</code>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;haystack,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;needle)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Less than comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The month component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Multiply operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Not equal comparison operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Logical not.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Conditional or.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">query</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Group query as a single argument.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</code>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;find,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;replace)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The second component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n          <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n          <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</code>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n          <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;field,\n          <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;start)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Subtract operator.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</code>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;pos,\n         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;length)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n           <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n           <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n           <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str1,\n           <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;str2)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String Operators</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String Operators</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOperations.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;exp)</code>\n<div class=\"block\">The year component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">The year component value of the parameter value.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Date Operators</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;otherQuery)</code>\n<div class=\"block\">Date Operators</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> with parameters of type <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ExecutableJsonQuery-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ExecutableJsonQuery</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Creates Query<E> with an existing query as its only internal value</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ExecutableQuery-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ExecutableQuery</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Creates Query<E> with an existing query as its only internal value</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a> with parameters of type <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#pull-com.microsoft.windowsazure.mobileservices.table.query.Query-\">pull</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Performs a query against the remote table and stores results.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonSyncTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#pull-com.microsoft.windowsazure.mobileservices.table.query.Query-\">pull</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Performs a query against the remote table and stores results.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#purge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">purge</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Performs a query against the local table and deletes the results.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonSyncTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#purge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">purge</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Performs a query against the local table and deletes the results.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&gt;&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Retrieve results from the local table.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonSyncTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Retrieve results from the local table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.localstore\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a> with parameters of type <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SQLiteLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#delete-com.microsoft.windowsazure.mobileservices.table.query.Query-\">delete</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#delete-com.microsoft.windowsazure.mobileservices.table.query.Query-\">delete</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Delete items from the local store.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonElement</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SQLiteLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonElement</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Retrieve results from the local store.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/Query.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"Query.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryException\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.query.QueryException</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.query.QueryException</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryNodeSQLWriter.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryNodeSQLWriter</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryNodeSQLWriter\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryNodeSQLWriter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryNodeSQLWriter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryNodeSQLWriter\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.query.QueryNodeSQLWriter</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.query.QueryNodeSQLWriter</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryNodeSQLWriter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryNodeSQLWriter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryODataWriter.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryODataWriter</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryODataWriter\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryODataWriter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryODataWriter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryODataWriter\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.query.QueryODataWriter</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.query.QueryODataWriter</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryODataWriter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryODataWriter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryOperations.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryOperations</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryOperations\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryOperations.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryOperations.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryOperations\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.query.QueryOperations</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.query.QueryOperations</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryOperations.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryOperations.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryOrder.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryOrder</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryOrder\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryOrder.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryOrder.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QueryOrder\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.query.QueryOrder</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> with parameters of type <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>\n<div class=\"block\">Creates a query with the specified order</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceJsonTable.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>\n<div class=\"block\">Creates a query with the specified order</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> that return <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOrder.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>[]</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">QueryOrder.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> with parameters of type <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">Query.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>\n<div class=\"block\">Adds a new order by statement</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ExecutableJsonQuery.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy</a></span>(java.lang.String&nbsp;field,\n       <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>&nbsp;order)</code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryOrder.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QueryOrder.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/class-use/QuerySQLWriter.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QuerySQLWriter</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QuerySQLWriter\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/QuerySQLWriter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QuerySQLWriter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.QuerySQLWriter\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.query.QuerySQLWriter</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.query.QuerySQLWriter</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/QuerySQLWriter.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"QuerySQLWriter.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/class-use/UnaryOperatorKind.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.query.UnaryOperatorKind</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.UnaryOperatorKind\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/UnaryOperatorKind.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UnaryOperatorKind.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.query.UnaryOperatorKind\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.query.UnaryOperatorKind</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> that return <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">UnaryOperatorKind.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a>[]</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">UnaryOperatorKind.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/class-use/UnaryOperatorKind.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UnaryOperatorKind.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.query</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.table.query</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Interfaces\">Interfaces</h2>\n<ul title=\"Interfaces\">\n<li><a href=\"Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\"><span class=\"interfaceName\">Query</span></a></li>\n</ul>\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">ExecutableJsonQuery</a></li>\n<li><a href=\"ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">ExecutableQuery</a></li>\n<li><a href=\"QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">QueryNodeSQLWriter</a></li>\n<li><a href=\"QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">QueryODataWriter</a></li>\n<li><a href=\"QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">QueryOperations</a></li>\n<li><a href=\"QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">QuerySQLWriter</a></li>\n</ul>\n<h2 title=\"Enums\">Enums</h2>\n<ul title=\"Enums\">\n<li><a href=\"QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">QueryOrder</a></li>\n<li><a href=\"UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">UnaryOperatorKind</a></li>\n</ul>\n<h2 title=\"Exceptions\">Exceptions</h2>\n<ul title=\"Exceptions\">\n<li><a href=\"QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\" target=\"classFrame\">QueryException</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.query</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.query\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table.query</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Interface Summary table, listing interfaces, and an explanation\">\n<caption><span>Interface Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Interface</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Interface that represents a query to a table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Class that represents a query to a specific MobileServiceJsonTable instance</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>&lt;E&gt;</td>\n<td class=\"colLast\">\n<div class=\"block\">Class that represents a query to a specific MobileServiceTable<E> instance</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryNodeSQLWriter</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Query node visitor used to generate SQL filter.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryODataWriter</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Class used to create query operations</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QuerySQLWriter</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Summary table, listing enums, and an explanation\">\n<caption><span>Enum Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Enum</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Sort order values</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Enumeration of kinds of unary operators.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Exception Summary table, listing exceptions, and an explanation\">\n<caption><span>Exception Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Exception</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryException</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.query Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.query Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.table.query</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">ExecutableJsonQuery</span></a> (implements com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">ExecutableQuery</span></a>&lt;E&gt; (implements com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryNodeSQLWriter</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryODataWriter</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryOperations</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QuerySQLWriter</span></a></li>\n<li type=\"circle\">java.lang.Throwable (implements java.io.Serializable)\n<ul>\n<li type=\"circle\">java.lang.Exception\n<ul>\n<li type=\"circle\">java.lang.RuntimeException\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryException</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h2 title=\"Interface Hierarchy\">Interface Hierarchy</h2>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Query</span></a></li>\n</ul>\n<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">UnaryOperatorKind</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryOrder</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/query/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.table.query</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.query\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.query\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.table.query</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync\">com.microsoft.windowsazure.mobileservices.table.sync</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.localstore\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> used by <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/class-use/ExecutableJsonQuery.html#com.microsoft.windowsazure.mobileservices.table\">ExecutableJsonQuery</a>\n<div class=\"block\">Class that represents a query to a specific MobileServiceJsonTable instance</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/class-use/ExecutableQuery.html#com.microsoft.windowsazure.mobileservices.table\">ExecutableQuery</a>\n<div class=\"block\">Class that represents a query to a specific MobileServiceTable<E> instance</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/class-use/Query.html#com.microsoft.windowsazure.mobileservices.table\">Query</a>\n<div class=\"block\">Interface that represents a query to a table.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryOrder.html#com.microsoft.windowsazure.mobileservices.table\">QueryOrder</a>\n<div class=\"block\">Sort order values</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> used by <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/class-use/ExecutableJsonQuery.html#com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a>\n<div class=\"block\">Class that represents a query to a specific MobileServiceJsonTable instance</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/class-use/ExecutableQuery.html#com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a>\n<div class=\"block\">Class that represents a query to a specific MobileServiceTable<E> instance</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/class-use/Query.html#com.microsoft.windowsazure.mobileservices.table.query\">Query</a>\n<div class=\"block\">Interface that represents a query to a table.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/class-use/QueryOrder.html#com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a>\n<div class=\"block\">Sort order values</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/class-use/UnaryOperatorKind.html#com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a>\n<div class=\"block\">Enumeration of kinds of unary operators.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> used by <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/class-use/Query.html#com.microsoft.windowsazure.mobileservices.table.sync\">Query</a>\n<div class=\"block\">Interface that represents a query to a table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.localstore\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> used by <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/class-use/Query.html#com.microsoft.windowsazure.mobileservices.table.sync.localstore\">Query</a>\n<div class=\"block\">Interface that represents a query to a table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/query/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>DateSerializer</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"DateSerializer\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":9,\"i2\":9,\"i3\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/DateSerializer.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"DateSerializer.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.serialization</div>\n<h2 title=\"Class DateSerializer\" class=\"title\">Class DateSerializer</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>com.google.gson.JsonDeserializer&lt;java.util.Date&gt;, com.google.gson.JsonSerializer&lt;java.util.Date&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">DateSerializer</span>\nextends java.lang.Object\nimplements com.google.gson.JsonSerializer&lt;java.util.Date&gt;, com.google.gson.JsonDeserializer&lt;java.util.Date&gt;</pre>\n<div class=\"block\">Date Serializer/Deserializer to make Mobile Services and Java dates\n compatible</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html#DateSerializer--\">DateSerializer</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.Date</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html#deserialize-com.google.gson.JsonElement-java.lang.reflect.Type-com.google.gson.JsonDeserializationContext-\">deserialize</a></span>(com.google.gson.JsonElement&nbsp;element,\n           java.lang.reflect.Type&nbsp;type,\n           com.google.gson.JsonDeserializationContext&nbsp;ctx)</code>\n<div class=\"block\">Deserializes a JsonElement containing an ISO-8601 formatted date</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static java.util.Date</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html#deserialize-java.lang.String-\">deserialize</a></span>(java.lang.String&nbsp;strVal)</code>\n<div class=\"block\">Deserializes an ISO-8601 formatted date</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>static java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html#serialize-java.util.Date-\">serialize</a></span>(java.util.Date&nbsp;date)</code>\n<div class=\"block\">Serializes a Date object to an ISO-8601 formatted date string</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonElement</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html#serialize-java.util.Date-java.lang.reflect.Type-com.google.gson.JsonSerializationContext-\">serialize</a></span>(java.util.Date&nbsp;date,\n         java.lang.reflect.Type&nbsp;type,\n         com.google.gson.JsonSerializationContext&nbsp;ctx)</code>\n<div class=\"block\">Serializes a Date to a JsonElement containing a ISO-8601 formatted date</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"DateSerializer--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>DateSerializer</h4>\n<pre>public&nbsp;DateSerializer()</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"deserialize-com.google.gson.JsonElement-java.lang.reflect.Type-com.google.gson.JsonDeserializationContext-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>deserialize</h4>\n<pre>public&nbsp;java.util.Date&nbsp;deserialize(com.google.gson.JsonElement&nbsp;element,\n                                  java.lang.reflect.Type&nbsp;type,\n                                  com.google.gson.JsonDeserializationContext&nbsp;ctx)\n                           throws com.google.gson.JsonParseException</pre>\n<div class=\"block\">Deserializes a JsonElement containing an ISO-8601 formatted date</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code>deserialize</code>&nbsp;in interface&nbsp;<code>com.google.gson.JsonDeserializer&lt;java.util.Date&gt;</code></dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>com.google.gson.JsonParseException</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"serialize-java.util.Date-java.lang.reflect.Type-com.google.gson.JsonSerializationContext-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>serialize</h4>\n<pre>public&nbsp;com.google.gson.JsonElement&nbsp;serialize(java.util.Date&nbsp;date,\n                                             java.lang.reflect.Type&nbsp;type,\n                                             com.google.gson.JsonSerializationContext&nbsp;ctx)</pre>\n<div class=\"block\">Serializes a Date to a JsonElement containing a ISO-8601 formatted date</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code>serialize</code>&nbsp;in interface&nbsp;<code>com.google.gson.JsonSerializer&lt;java.util.Date&gt;</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"deserialize-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>deserialize</h4>\n<pre>public static&nbsp;java.util.Date&nbsp;deserialize(java.lang.String&nbsp;strVal)\n                                  throws java.text.ParseException</pre>\n<div class=\"block\">Deserializes an ISO-8601 formatted date</div>\n<dl>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.text.ParseException</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"serialize-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>serialize</h4>\n<pre>public static&nbsp;java.lang.String&nbsp;serialize(java.util.Date&nbsp;date)</pre>\n<div class=\"block\">Serializes a Date object to an ISO-8601 formatted date string</div>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/DateSerializer.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"DateSerializer.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>JsonEntityParser</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"JsonEntityParser\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/JsonEntityParser.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"JsonEntityParser.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.serialization</div>\n<h2 title=\"Class JsonEntityParser\" class=\"title\">Class JsonEntityParser</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.serialization.JsonEntityParser</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">JsonEntityParser</span>\nextends java.lang.Object</pre>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html#JsonEntityParser--\">JsonEntityParser</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>static &lt;E&gt;&nbsp;java.util.List&lt;E&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html#parseResults-com.google.gson.JsonElement-com.google.gson.Gson-java.lang.Class-\">parseResults</a></span>(com.google.gson.JsonElement&nbsp;results,\n            com.google.gson.Gson&nbsp;gson,\n            java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Parses the JSON object to a typed list</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"JsonEntityParser--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>JsonEntityParser</h4>\n<pre>public&nbsp;JsonEntityParser()</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"parseResults-com.google.gson.JsonElement-com.google.gson.Gson-java.lang.Class-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>parseResults</h4>\n<pre>public static&nbsp;&lt;E&gt;&nbsp;java.util.List&lt;E&gt;&nbsp;parseResults(com.google.gson.JsonElement&nbsp;results,\n                                                 com.google.gson.Gson&nbsp;gson,\n                                                 java.lang.Class&lt;E&gt;&nbsp;clazz)</pre>\n<div class=\"block\">Parses the JSON object to a typed list</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>results</code> - JSON results</dd>\n<dd><code>gson</code> - Gson object used for parsing</dd>\n<dd><code>clazz</code> - Target entity class</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>List of entities</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/JsonEntityParser.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"JsonEntityParser.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>LongSerializer</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"LongSerializer\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/LongSerializer.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"LongSerializer.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.serialization</div>\n<h2 title=\"Class LongSerializer\" class=\"title\">Class LongSerializer</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.serialization.LongSerializer</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>com.google.gson.JsonSerializer&lt;java.lang.Long&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">LongSerializer</span>\nextends java.lang.Object\nimplements com.google.gson.JsonSerializer&lt;java.lang.Long&gt;</pre>\n<div class=\"block\">Long Serializer to avoid losing precision when sending data to Mobile\n Services</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html#LongSerializer--\">LongSerializer</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonElement</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html#serialize-java.lang.Long-java.lang.reflect.Type-com.google.gson.JsonSerializationContext-\">serialize</a></span>(java.lang.Long&nbsp;element,\n         java.lang.reflect.Type&nbsp;type,\n         com.google.gson.JsonSerializationContext&nbsp;ctx)</code>\n<div class=\"block\">Serializes a Long instance to a JsonElement, verifying the maximum and\n minimum allowed values</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"LongSerializer--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>LongSerializer</h4>\n<pre>public&nbsp;LongSerializer()</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"serialize-java.lang.Long-java.lang.reflect.Type-com.google.gson.JsonSerializationContext-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>serialize</h4>\n<pre>public&nbsp;com.google.gson.JsonElement&nbsp;serialize(java.lang.Long&nbsp;element,\n                                             java.lang.reflect.Type&nbsp;type,\n                                             com.google.gson.JsonSerializationContext&nbsp;ctx)</pre>\n<div class=\"block\">Serializes a Long instance to a JsonElement, verifying the maximum and\n minimum allowed values</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code>serialize</code>&nbsp;in interface&nbsp;<code>com.google.gson.JsonSerializer&lt;java.lang.Long&gt;</code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/LongSerializer.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"LongSerializer.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/serialization/class-use/DateSerializer.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/class-use/DateSerializer.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"DateSerializer.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/class-use/DateSerializer.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"DateSerializer.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/serialization/class-use/JsonEntityParser.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.serialization.JsonEntityParser</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.serialization.JsonEntityParser\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/class-use/JsonEntityParser.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"JsonEntityParser.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.serialization.JsonEntityParser\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.serialization.JsonEntityParser</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.serialization.JsonEntityParser</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/class-use/JsonEntityParser.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"JsonEntityParser.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/serialization/class-use/LongSerializer.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.serialization.LongSerializer</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.serialization.LongSerializer\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/class-use/LongSerializer.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"LongSerializer.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.serialization.LongSerializer\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.serialization.LongSerializer</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.serialization.LongSerializer</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/class-use/LongSerializer.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"LongSerializer.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/serialization/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.serialization</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.table.serialization</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\" target=\"classFrame\">DateSerializer</a></li>\n<li><a href=\"JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\" target=\"classFrame\">JsonEntityParser</a></li>\n<li><a href=\"LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\" target=\"classFrame\">LongSerializer</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.serialization</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.serialization\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table.serialization</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">DateSerializer</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Date Serializer/Deserializer to make Mobile Services and Java dates\n compatible</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">JsonEntityParser</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">LongSerializer</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Long Serializer to avoid losing precision when sending data to Mobile\n Services</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/serialization/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.serialization Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.serialization Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.table.serialization</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">DateSerializer</span></a> (implements com.google.gson.JsonDeserializer&lt;T&gt;, com.google.gson.JsonSerializer&lt;T&gt;)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">JsonEntityParser</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">LongSerializer</span></a> (implements com.google.gson.JsonSerializer&lt;T&gt;)</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/serialization/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.table.serialization</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.serialization\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.serialization\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.table.serialization</h1>\n</div>\n<div class=\"contentContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.serialization</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/serialization/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceJsonSyncTable</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceJsonSyncTable\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10,\"i6\":10,\"i7\":10,\"i8\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceJsonSyncTable.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceJsonSyncTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync</div>\n<h2 title=\"Class MobileServiceJsonSyncTable\" class=\"title\">Class MobileServiceJsonSyncTable</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceJsonSyncTable</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServiceJsonSyncTable</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Provides operations on local table.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#MobileServiceJsonSyncTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceJsonSyncTable</a></span>(java.lang.String&nbsp;name,\n                          <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor for MobileServiceJsonSyncTable</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#delete-com.google.gson.JsonObject-\">delete</a></span>(com.google.gson.JsonObject&nbsp;item)</code>\n<div class=\"block\">Delete an item from the local table and enqueue the operation to be\n synchronized on context push.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#delete-java.lang.String-\">delete</a></span>(java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Delete an item from the local table and enqueue the operation to be\n synchronized on context push.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#getName--\">getName</a></span>()</code>\n<div class=\"block\">Returns the name of the represented table</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#insert-com.google.gson.JsonObject-\">insert</a></span>(com.google.gson.JsonObject&nbsp;item)</code>\n<div class=\"block\">Insert an item into the local table and enqueue the operation to be\n synchronized on context push.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#lookUp-java.lang.String-\">lookUp</a></span>(java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Looks up an item from the local table.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#pull-com.microsoft.windowsazure.mobileservices.table.query.Query-\">pull</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Performs a query against the remote table and stores results.</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#purge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">purge</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Performs a query against the local table and deletes the results.</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Retrieve results from the local table.</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#update-com.google.gson.JsonObject-\">update</a></span>(com.google.gson.JsonObject&nbsp;item)</code>\n<div class=\"block\">Update an item in the local table and enqueue the operation to be\n synchronized on context push.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceJsonSyncTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceJsonSyncTable</h4>\n<pre>public&nbsp;MobileServiceJsonSyncTable(java.lang.String&nbsp;name,\n                                  <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</pre>\n<div class=\"block\">Constructor for MobileServiceJsonSyncTable</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - The name of the represented table</dd>\n<dd><code>client</code> - The MobileServiceClient used to invoke table operations</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getName()</pre>\n<div class=\"block\">Returns the name of the represented table</div>\n</li>\n</ul>\n<a name=\"pull-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>pull</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;pull(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Performs a query against the remote table and stores results.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - an optional query to filter results</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when results have been pulled.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"purge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>purge</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;purge(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Performs a query against the local table and deletes the results.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - an optional query to filter results</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when results have been purged.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"insert-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>insert</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;&nbsp;insert(com.google.gson.JsonObject&nbsp;item)</pre>\n<div class=\"block\">Insert an item into the local table and enqueue the operation to be\n synchronized on context push.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>item</code> - the item to be inserted</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when the item has been inserted,\n         returning a copy of the inserted item including id.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>read</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonElement&gt;&nbsp;read(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Retrieve results from the local table.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - an optional query to filter results</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when the results have been\n         retrieved.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lookUp-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lookUp</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;com.google.gson.JsonObject&gt;&nbsp;lookUp(java.lang.String&nbsp;itemId)</pre>\n<div class=\"block\">Looks up an item from the local table.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>itemId</code> - the id of the item to look up</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when the item has been looked up.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"update-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>update</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;update(com.google.gson.JsonObject&nbsp;item)</pre>\n<div class=\"block\">Update an item in the local table and enqueue the operation to be\n synchronized on context push.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>item</code> - the item to be updated</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when the item has been updated.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;delete(com.google.gson.JsonObject&nbsp;item)</pre>\n<div class=\"block\">Delete an item from the local table and enqueue the operation to be\n synchronized on context push.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>item</code> - the item to be deleted</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when the item has been deleted.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;delete(java.lang.String&nbsp;itemId)</pre>\n<div class=\"block\">Delete an item from the local table and enqueue the operation to be\n synchronized on context push.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>itemId</code> - the id of the item to be deleted</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when the item has been deleted.</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceJsonSyncTable.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceJsonSyncTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceSyncContext</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceSyncContext\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceSyncContext.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncContext.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync</div>\n<h2 title=\"Class MobileServiceSyncContext\" class=\"title\">Class MobileServiceSyncContext</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServiceSyncContext</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Provides a way to synchronize local database with remote database.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#MobileServiceSyncContext-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceSyncContext</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</code>\n<div class=\"block\">Constructor for MobileServiceSyncContext</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#getHandler--\">getHandler</a></span>()</code>\n<div class=\"block\">Returns an instance of MobileServiceSyncHandler.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#getPendingOperations--\">getPendingOperations</a></span>()</code>\n<div class=\"block\">Returns the number of pending operations that are not yet pushed to\n remote tables.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#getStore--\">getStore</a></span>()</code>\n<div class=\"block\">Returns an instance of MobileServiceLocalStore.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#initialize-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandler-\">initialize</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store,\n          <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a>&nbsp;handler)</code>\n<div class=\"block\">Initializes the sync context.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>boolean</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#isInitialized--\">isInitialized</a></span>()</code>\n<div class=\"block\">Indicates whether sync context has been initialized or not.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#push--\">push</a></span>()</code>\n<div class=\"block\">Pushes all pending operations up to the remote store.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceSyncContext-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceSyncContext</h4>\n<pre>public&nbsp;MobileServiceSyncContext(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client)</pre>\n<div class=\"block\">Constructor for MobileServiceSyncContext</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>client</code> - The MobileServiceClient used to invoke table operations</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getStore--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getStore</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;getStore()</pre>\n<div class=\"block\">Returns an instance of MobileServiceLocalStore.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The MobileServiceLocalStore instance</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getHandler--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getHandler</h4>\n<pre>public&nbsp;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a>&nbsp;getHandler()</pre>\n<div class=\"block\">Returns an instance of MobileServiceSyncHandler.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The MobileServiceSyncHandler instance</dd>\n</dl>\n</li>\n</ul>\n<a name=\"isInitialized--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>isInitialized</h4>\n<pre>public&nbsp;boolean&nbsp;isInitialized()</pre>\n<div class=\"block\">Indicates whether sync context has been initialized or not.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The initialization status</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getPendingOperations--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getPendingOperations</h4>\n<pre>public&nbsp;int&nbsp;getPendingOperations()\n                         throws java.lang.Throwable</pre>\n<div class=\"block\">Returns the number of pending operations that are not yet pushed to\n remote tables.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The number of pending operations</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"initialize-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandler-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>initialize</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;initialize(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store,\n                                                                                     <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a>&nbsp;handler)</pre>\n<div class=\"block\">Initializes the sync context.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>store</code> - An instance of MobileServiceLocalStore</dd>\n<dd><code>handler</code> - An instance of MobileServiceSyncHandler</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when sync context has\n         initialized.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"push--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>push</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;push()</pre>\n<div class=\"block\">Pushes all pending operations up to the remote store.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when operations have been pushed.</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceSyncContext.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncContext.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceSyncTable</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceSyncTable\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10,\"i6\":10,\"i7\":10,\"i8\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceSyncTable.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync</div>\n<h2 title=\"Class MobileServiceSyncTable\" class=\"title\">Class MobileServiceSyncTable&lt;E&gt;</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncTable&lt;E&gt;</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServiceSyncTable&lt;E&gt;</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Provides operations on local table.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#MobileServiceSyncTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-java.lang.Class-\">MobileServiceSyncTable</a></span>(java.lang.String&nbsp;name,\n                      <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client,\n                      java.lang.Class&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&gt;&nbsp;clazz)</code>\n<div class=\"block\">Constructor for MobileServiceTable</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#delete-E-\">delete</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&nbsp;item)</code>\n<div class=\"block\">Delete an item from the local table and enqueue the operation to be\n synchronized on context push.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#delete-java.lang.String-\">delete</a></span>(java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Delete an item from the local table and enqueue the operation to be\n synchronized on context push.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#getName--\">getName</a></span>()</code>\n<div class=\"block\">Returns the name of the represented table</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#insert-E-\">insert</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&nbsp;item)</code>\n<div class=\"block\">Insert an item into the local table and enqueue the operation to be\n synchronized on context push.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#lookUp-java.lang.String-\">lookUp</a></span>(java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Looks up an item from the local table.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#pull-com.microsoft.windowsazure.mobileservices.table.query.Query-\">pull</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Performs a query against the remote table and stores results.</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#purge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">purge</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Performs a query against the local table and deletes the results.</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&gt;&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Retrieve results from the local table.</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#update-E-\">update</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&nbsp;item)</code>\n<div class=\"block\">Update an item in the local table and enqueue the operation to be\n synchronized on context push.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceSyncTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-java.lang.Class-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceSyncTable</h4>\n<pre>public&nbsp;MobileServiceSyncTable(java.lang.String&nbsp;name,\n                              <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client,\n                              java.lang.Class&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&gt;&nbsp;clazz)</pre>\n<div class=\"block\">Constructor for MobileServiceTable</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - The name of the represented table</dd>\n<dd><code>client</code> - The MobileServiceClient used to invoke table operations</dd>\n<dd><code>clazz</code> - The class used for data serialization</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getName()</pre>\n<div class=\"block\">Returns the name of the represented table</div>\n</li>\n</ul>\n<a name=\"pull-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>pull</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;pull(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Performs a query against the remote table and stores results.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - an optional query to filter results</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when results have been pulled.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"purge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>purge</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;purge(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Performs a query against the local table and deletes the results.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - an optional query to filter results</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when results have been purged.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>read</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&gt;&gt;&nbsp;read(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</pre>\n<div class=\"block\">Retrieve results from the local table.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - an optional query to filter results</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when the results have been\n         retrieved.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lookUp-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lookUp</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&gt;&nbsp;lookUp(java.lang.String&nbsp;itemId)</pre>\n<div class=\"block\">Looks up an item from the local table.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>itemId</code> - the id of the item to look up</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when the item has been looked up.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"insert-java.lang.Object-\">\n<!--   -->\n</a><a name=\"insert-E-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>insert</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&gt;&nbsp;insert(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&nbsp;item)</pre>\n<div class=\"block\">Insert an item into the local table and enqueue the operation to be\n synchronized on context push.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>item</code> - the item to be inserted</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when the item has been inserted,\n         returning a copy of the inserted item including id.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"update-java.lang.Object-\">\n<!--   -->\n</a><a name=\"update-E-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>update</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;update(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&nbsp;item)</pre>\n<div class=\"block\">Update an item in the local table and enqueue the operation to be\n synchronized on context push.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>item</code> - the item to be updated</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when the item has been updated.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-java.lang.Object-\">\n<!--   -->\n</a><a name=\"delete-E-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;delete(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&nbsp;item)</pre>\n<div class=\"block\">Delete an item from the local table and enqueue the operation to be\n synchronized on context push.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>item</code> - the item to be deleted</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when the item has been deleted.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;&nbsp;delete(java.lang.String&nbsp;itemId)</pre>\n<div class=\"block\">Delete an item from the local table and enqueue the operation to be\n synchronized on context push.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>itemId</code> - the id of the item to be deleted</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A ListenableFuture that is done when the item has been deleted.</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceSyncTable.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/class-use/MobileServiceJsonSyncTable.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceJsonSyncTable</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceJsonSyncTable\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/class-use/MobileServiceJsonSyncTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceJsonSyncTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceJsonSyncTable\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceJsonSyncTable</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getSyncTable-java.lang.String-\">getSyncTable</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns a MobileServiceJsonSyncTable instance, which provides untyped\n data operations for a local table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/class-use/MobileServiceJsonSyncTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceJsonSyncTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/class-use/MobileServiceSyncContext.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/class-use/MobileServiceSyncContext.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncContext.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getSyncContext--\">getSyncContext</a></span>()</code>\n<div class=\"block\">Returns a MobileServiceSyncContext instance.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/class-use/MobileServiceSyncContext.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncContext.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/class-use/MobileServiceSyncTable.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncTable</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncTable\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/class-use/MobileServiceSyncTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncTable\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncTable</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a> in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> that return <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a>&lt;E&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getSyncTable-java.lang.Class-\">getSyncTable</a></span>(java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Returns a MobileServiceSyncTable<E> instance, which provides strongly\n typed data operations for a local table.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;E&gt;&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a>&lt;E&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceClient.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getSyncTable-java.lang.String-java.lang.Class-\">getSyncTable</a></span>(java.lang.String&nbsp;name,\n            java.lang.Class&lt;E&gt;&nbsp;clazz)</code>\n<div class=\"block\">Returns a MobileServiceSyncTable<E> instance, which provides strongly\n typed data operations for a local table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/class-use/MobileServiceSyncTable.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncTable.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>ColumnDataType</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"ColumnDataType\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":9,\"i1\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ColumnDataType.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ColumnDataType.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</div>\n<h2 title=\"Enum ColumnDataType\" class=\"title\">Enum ColumnDataType</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Enum&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>&gt;</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable, java.lang.Comparable&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public enum <span class=\"typeNameLabel\">ColumnDataType</span>\nextends java.lang.Enum&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>&gt;</pre>\n<div class=\"block\">Enumeration of available column data types.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== ENUM CONSTANT SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.summary\">\n<!--   -->\n</a>\n<h3>Enum Constant Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Constant Summary table, listing enum constants, and an explanation\">\n<caption><span>Enum Constants</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html#Boolean\">Boolean</a></span></code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html#Date\">Date</a></span></code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html#Number\">Number</a></span></code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html#Other\">Other</a></span></code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html#String\">String</a></span></code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Enum\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Enum</h3>\n<code>compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>getClass, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ ENUM CONSTANT DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.detail\">\n<!--   -->\n</a>\n<h3>Enum Constant Detail</h3>\n<a name=\"Boolean\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>Boolean</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a> Boolean</pre>\n</li>\n</ul>\n<a name=\"Number\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>Number</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a> Number</pre>\n</li>\n</ul>\n<a name=\"String\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>String</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a> String</pre>\n</li>\n</ul>\n<a name=\"Date\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>Date</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a> Date</pre>\n</li>\n</ul>\n<a name=\"Other\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>Other</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a> Other</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"values--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>values</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>[]&nbsp;values()</pre>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.  This method may be used to iterate\nover the constants as follows:\n<pre>\nfor (ColumnDataType c : ColumnDataType.values())\n&nbsp;   System.out.println(c);\n</pre></div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>an array containing the constants of this enum type, in the order they are declared</dd>\n</dl>\n</li>\n</ul>\n<a name=\"valueOf-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>valueOf</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>&nbsp;valueOf(java.lang.String&nbsp;name)</pre>\n<div class=\"block\">Returns the enum constant of this type with the specified name.\nThe string must match <i>exactly</i> an identifier used to declare an\nenum constant in this type.  (Extraneous whitespace characters are \nnot permitted.)</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - the name of the enum constant to be returned.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the enum constant with the specified name</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.IllegalArgumentException</code> - if this enum type has no constant with the specified name</dd>\n<dd><code>java.lang.NullPointerException</code> - if the argument is null</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/ColumnDataType.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ColumnDataType.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceLocalStore</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceLocalStore\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6,\"i1\":6,\"i2\":6,\"i3\":6,\"i4\":6,\"i5\":6,\"i6\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceLocalStore.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceLocalStore.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</div>\n<h2 title=\"Interface MobileServiceLocalStore\" class=\"title\">Interface MobileServiceLocalStore</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Known Implementing Classes:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">MobileServiceLocalStore</span></pre>\n<div class=\"block\">Allows saving and reading data in the local tables.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#defineTable-java.lang.String-java.util.Map-\">defineTable</a></span>(java.lang.String&nbsp;tableName,\n           java.util.Map&lt;java.lang.String,<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>&gt;&nbsp;columns)</code>\n<div class=\"block\">Defines a table to be created/updated on initialization</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#delete-com.microsoft.windowsazure.mobileservices.table.query.Query-\">delete</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Delete items from the local store.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#delete-java.lang.String-java.lang.String-\">delete</a></span>(java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Delete an item from the local store.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#initialize--\">initialize</a></span>()</code>\n<div class=\"block\">Initializes the store for use.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#lookup-java.lang.String-java.lang.String-\">lookup</a></span>(java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Looks up an item from the local store.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonElement</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Retrieve results from the local store.</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#upsert-java.lang.String-com.google.gson.JsonObject-\">upsert</a></span>(java.lang.String&nbsp;tableName,\n      com.google.gson.JsonObject&nbsp;item)</code>\n<div class=\"block\">Insert or Update an item in the local store.</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"initialize--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>initialize</h4>\n<pre>void&nbsp;initialize()\n         throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Initializes the store for use.</div>\n<dl>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"defineTable-java.lang.String-java.util.Map-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>defineTable</h4>\n<pre>void&nbsp;defineTable(java.lang.String&nbsp;tableName,\n                 java.util.Map&lt;java.lang.String,<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>&gt;&nbsp;columns)\n          throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Defines a table to be created/updated on initialization</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tableName</code> - the table name</dd>\n<dd><code>columns</code> - a Map of column names and their respective data type</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>read</h4>\n<pre>com.google.gson.JsonElement&nbsp;read(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)\n                          throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Retrieve results from the local store.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - a query to specify the local table and filter results</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A JsonElement with the results</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"lookup-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lookup</h4>\n<pre>com.google.gson.JsonObject&nbsp;lookup(java.lang.String&nbsp;tableName,\n                                  java.lang.String&nbsp;itemId)\n                           throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Looks up an item from the local store.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tableName</code> - the local table name</dd>\n<dd><code>itemId</code> - the id of the item to look up</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the item found</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"upsert-java.lang.String-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>upsert</h4>\n<pre>void&nbsp;upsert(java.lang.String&nbsp;tableName,\n            com.google.gson.JsonObject&nbsp;item)\n     throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Insert or Update an item in the local store.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tableName</code> - the local table name</dd>\n<dd><code>item</code> - the item to be inserted</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>void&nbsp;delete(java.lang.String&nbsp;tableName,\n            java.lang.String&nbsp;itemId)\n     throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Delete an item from the local store.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tableName</code> - the local table name</dd>\n<dd><code>itemId</code> - the id of the item to be deleted</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>void&nbsp;delete(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)\n     throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Delete items from the local store.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - a query to specify the local table and filter items</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceLocalStore.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceLocalStore.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceLocalStoreException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceLocalStoreException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceLocalStoreException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceLocalStoreException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Throwable\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</div>\n<h2 title=\"Class MobileServiceLocalStoreException\" class=\"title\">Class MobileServiceLocalStoreException</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Throwable</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Exception</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServiceLocalStoreException</span>\nextends java.lang.Exception</pre>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../../../../serialized-form.html#com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException\">Serialized Form</a></dd>\n</dl>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html#MobileServiceLocalStoreException-java.lang.String-\">MobileServiceLocalStoreException</a></span>(java.lang.String&nbsp;detailMessage)</code>\n<div class=\"block\">Creates a new MobileServiceLocalStoreException with a detail message</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html#MobileServiceLocalStoreException-java.lang.String-java.lang.Throwable-\">MobileServiceLocalStoreException</a></span>(java.lang.String&nbsp;detailMessage,\n                                java.lang.Throwable&nbsp;throwable)</code>\n<div class=\"block\">Creates a new MobileServiceLocalStoreException with a detail message and\n a cause</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html#MobileServiceLocalStoreException-java.lang.Throwable-\">MobileServiceLocalStoreException</a></span>(java.lang.Throwable&nbsp;throwable)</code>\n<div class=\"block\">Creates a new MobileServiceLocalStoreException with a cause</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Throwable\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Throwable</h3>\n<code>addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceLocalStoreException-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>MobileServiceLocalStoreException</h4>\n<pre>public&nbsp;MobileServiceLocalStoreException(java.lang.String&nbsp;detailMessage)</pre>\n<div class=\"block\">Creates a new MobileServiceLocalStoreException with a detail message</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>detail</code> - The detail message</dd>\n</dl>\n</li>\n</ul>\n<a name=\"MobileServiceLocalStoreException-java.lang.Throwable-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>MobileServiceLocalStoreException</h4>\n<pre>public&nbsp;MobileServiceLocalStoreException(java.lang.Throwable&nbsp;throwable)</pre>\n<div class=\"block\">Creates a new MobileServiceLocalStoreException with a cause</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>throwable</code> - The exception cause</dd>\n</dl>\n</li>\n</ul>\n<a name=\"MobileServiceLocalStoreException-java.lang.String-java.lang.Throwable-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceLocalStoreException</h4>\n<pre>public&nbsp;MobileServiceLocalStoreException(java.lang.String&nbsp;detailMessage,\n                                        java.lang.Throwable&nbsp;throwable)</pre>\n<div class=\"block\">Creates a new MobileServiceLocalStoreException with a detail message and\n a cause</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>detail</code> - The detail message</dd>\n<dd><code>throwable</code> - The exception cause</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceLocalStoreException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceLocalStoreException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Throwable\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>SQLiteLocalStore</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"SQLiteLocalStore\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10,\"i6\":10,\"i7\":10,\"i8\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/SQLiteLocalStore.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"SQLiteLocalStore.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</div>\n<h2 title=\"Class SQLiteLocalStore\" class=\"title\">Class SQLiteLocalStore</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>SQLiteOpenHelper</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">SQLiteLocalStore</span>\nextends SQLiteOpenHelper\nimplements <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></pre>\n<div class=\"block\">Implements MobileServiceLocalStore backed by an SQLite DB</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#SQLiteLocalStore-Context-java.lang.String-CursorFactory-int-\">SQLiteLocalStore</a></span>(Context&nbsp;context,\n                java.lang.String&nbsp;name,\n                CursorFactory&nbsp;factory,\n                int&nbsp;version)</code>\n<div class=\"block\">Constructor for SQLiteLocalStore</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#SQLiteLocalStore-Context-java.lang.String-CursorFactory-int-DatabaseErrorHandler-\">SQLiteLocalStore</a></span>(Context&nbsp;context,\n                java.lang.String&nbsp;name,\n                CursorFactory&nbsp;factory,\n                int&nbsp;version,\n                DatabaseErrorHandler&nbsp;errorHandler)</code>\n<div class=\"block\">Constructor for SQLiteLocalStore</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#defineTable-java.lang.String-java.util.Map-\">defineTable</a></span>(java.lang.String&nbsp;tableName,\n           java.util.Map&lt;java.lang.String,<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>&gt;&nbsp;columns)</code>\n<div class=\"block\">Defines a table to be created/updated on initialization</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#delete-com.microsoft.windowsazure.mobileservices.table.query.Query-\">delete</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Delete items from the local store.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#delete-java.lang.String-java.lang.String-\">delete</a></span>(java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Delete an item from the local store.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#initialize--\">initialize</a></span>()</code>\n<div class=\"block\">Initializes the store for use.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#lookup-java.lang.String-java.lang.String-\">lookup</a></span>(java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Looks up an item from the local store.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#onCreate-SQLiteDatabase-\">onCreate</a></span>(SQLiteDatabase&nbsp;db)</code>&nbsp;</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#onUpgrade-SQLiteDatabase-int-int-\">onUpgrade</a></span>(SQLiteDatabase&nbsp;db,\n         int&nbsp;oldVersion,\n         int&nbsp;newVersion)</code>&nbsp;</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonElement</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Retrieve results from the local store.</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#upsert-java.lang.String-com.google.gson.JsonObject-\">upsert</a></span>(java.lang.String&nbsp;tableName,\n      com.google.gson.JsonObject&nbsp;item)</code>\n<div class=\"block\">Insert or Update an item in the local store.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"SQLiteLocalStore-Context-java.lang.String-CursorFactory-int-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>SQLiteLocalStore</h4>\n<pre>public&nbsp;SQLiteLocalStore(Context&nbsp;context,\n                        java.lang.String&nbsp;name,\n                        CursorFactory&nbsp;factory,\n                        int&nbsp;version)</pre>\n<div class=\"block\">Constructor for SQLiteLocalStore</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>context</code> - context to use to open or create the database</dd>\n<dd><code>name</code> - name of the database file, or null for an in-memory database</dd>\n<dd><code>factory</code> - factory to use for creating cursor objects, or null for the\n            default</dd>\n<dd><code>version</code> - version number of the database (starting at 1); if the\n            database is older, onUpgrade will be used to upgrade the\n            database; if the database is newer, onDowngrade will be used\n            to downgrade the database</dd>\n</dl>\n</li>\n</ul>\n<a name=\"SQLiteLocalStore-Context-java.lang.String-CursorFactory-int-DatabaseErrorHandler-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>SQLiteLocalStore</h4>\n<pre>public&nbsp;SQLiteLocalStore(Context&nbsp;context,\n                        java.lang.String&nbsp;name,\n                        CursorFactory&nbsp;factory,\n                        int&nbsp;version,\n                        DatabaseErrorHandler&nbsp;errorHandler)</pre>\n<div class=\"block\">Constructor for SQLiteLocalStore</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>context</code> - context to use to open or create the database</dd>\n<dd><code>name</code> - name of the database file, or null for an in-memory database</dd>\n<dd><code>factory</code> - factory to use for creating cursor objects, or null for the\n            default</dd>\n<dd><code>version</code> - version number of the database (starting at 1); if the\n            database is older, onUpgrade will be used to upgrade the\n            database; if the database is newer, onDowngrade will be used\n            to downgrade the database</dd>\n<dd><code>errorHandler</code> - the DatabaseErrorHandler to be used when sqlite reports\n            database corruption, or null to use the default error handler.</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"initialize--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>initialize</h4>\n<pre>public&nbsp;void&nbsp;initialize()\n                throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#initialize--\">MobileServiceLocalStore</a></code></span></div>\n<div class=\"block\">Initializes the store for use.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#initialize--\">initialize</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></code></dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"defineTable-java.lang.String-java.util.Map-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>defineTable</h4>\n<pre>public&nbsp;void&nbsp;defineTable(java.lang.String&nbsp;tableName,\n                        java.util.Map&lt;java.lang.String,<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>&gt;&nbsp;columns)\n                 throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#defineTable-java.lang.String-java.util.Map-\">MobileServiceLocalStore</a></code></span></div>\n<div class=\"block\">Defines a table to be created/updated on initialization</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#defineTable-java.lang.String-java.util.Map-\">defineTable</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tableName</code> - the table name</dd>\n<dd><code>columns</code> - a Map of column names and their respective data type</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>read</h4>\n<pre>public&nbsp;com.google.gson.JsonElement&nbsp;read(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)\n                                 throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">MobileServiceLocalStore</a></code></span></div>\n<div class=\"block\">Retrieve results from the local store.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - a query to specify the local table and filter results</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>A JsonElement with the results</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"lookup-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lookup</h4>\n<pre>public&nbsp;com.google.gson.JsonObject&nbsp;lookup(java.lang.String&nbsp;tableName,\n                                         java.lang.String&nbsp;itemId)\n                                  throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#lookup-java.lang.String-java.lang.String-\">MobileServiceLocalStore</a></code></span></div>\n<div class=\"block\">Looks up an item from the local store.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#lookup-java.lang.String-java.lang.String-\">lookup</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tableName</code> - the local table name</dd>\n<dd><code>itemId</code> - the id of the item to look up</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the item found</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"upsert-java.lang.String-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>upsert</h4>\n<pre>public&nbsp;void&nbsp;upsert(java.lang.String&nbsp;tableName,\n                   com.google.gson.JsonObject&nbsp;item)\n            throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#upsert-java.lang.String-com.google.gson.JsonObject-\">MobileServiceLocalStore</a></code></span></div>\n<div class=\"block\">Insert or Update an item in the local store.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#upsert-java.lang.String-com.google.gson.JsonObject-\">upsert</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tableName</code> - the local table name</dd>\n<dd><code>item</code> - the item to be inserted</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;void&nbsp;delete(java.lang.String&nbsp;tableName,\n                   java.lang.String&nbsp;itemId)\n            throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#delete-java.lang.String-java.lang.String-\">MobileServiceLocalStore</a></code></span></div>\n<div class=\"block\">Delete an item from the local store.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#delete-java.lang.String-java.lang.String-\">delete</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tableName</code> - the local table name</dd>\n<dd><code>itemId</code> - the id of the item to be deleted</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"delete-com.microsoft.windowsazure.mobileservices.table.query.Query-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>delete</h4>\n<pre>public&nbsp;void&nbsp;delete(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)\n            throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#delete-com.microsoft.windowsazure.mobileservices.table.query.Query-\">MobileServiceLocalStore</a></code></span></div>\n<div class=\"block\">Delete items from the local store.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#delete-com.microsoft.windowsazure.mobileservices.table.query.Query-\">delete</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>query</code> - a query to specify the local table and filter items</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"onCreate-SQLiteDatabase-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>onCreate</h4>\n<pre>public&nbsp;void&nbsp;onCreate(SQLiteDatabase&nbsp;db)</pre>\n</li>\n</ul>\n<a name=\"onUpgrade-SQLiteDatabase-int-int-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onUpgrade</h4>\n<pre>public&nbsp;void&nbsp;onUpgrade(SQLiteDatabase&nbsp;db,\n                      int&nbsp;oldVersion,\n                      int&nbsp;newVersion)</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/SQLiteLocalStore.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"SQLiteLocalStore.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/ColumnDataType.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/ColumnDataType.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ColumnDataType.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.localstore\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.localstore\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ColumnDataType.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>[]</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">ColumnDataType.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Method parameters in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a> with type arguments of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SQLiteLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#defineTable-java.lang.String-java.util.Map-\">defineTable</a></span>(java.lang.String&nbsp;tableName,\n           java.util.Map&lt;java.lang.String,<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>&gt;&nbsp;columns)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#defineTable-java.lang.String-java.util.Map-\">defineTable</a></span>(java.lang.String&nbsp;tableName,\n           java.util.Map&lt;java.lang.String,<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>&gt;&nbsp;columns)</code>\n<div class=\"block\">Defines a table to be created/updated on initialization</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/ColumnDataType.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"ColumnDataType.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/MobileServiceLocalStore.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/MobileServiceLocalStore.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceLocalStore.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync\">com.microsoft.windowsazure.mobileservices.table.sync</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.localstore\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.operations\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.queue\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncContext.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#getStore--\">getStore</a></span>()</code>\n<div class=\"block\">Returns an instance of MobileServiceLocalStore.</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncContext.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#initialize-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandler-\">initialize</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store,\n          <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a>&nbsp;handler)</code>\n<div class=\"block\">Initializes the sync context.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.localstore\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a> that implement <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></span></code>\n<div class=\"block\">Implements MobileServiceLocalStore backed by an SQLite DB</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#LocalTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-com.google.gson.JsonObject-java.lang.String-\">LocalTableOperationProcessor</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store,\n                            com.google.gson.JsonObject&nbsp;item,\n                            java.lang.String&nbsp;itemBackupTable)</code>\n<div class=\"block\">Constructor for LocalTableOperationProcessor</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.queue\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#initializeStore-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">initializeStore</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Initializes requirements on the local store</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationErrorList.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#initializeStore-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">initializeStore</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Initializes requirements on the local store</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#load-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">load</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Loads the queue of table operations from the local store</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationErrorList.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#load-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">load</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Loads the list of table operation errors from the local store</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/MobileServiceLocalStore.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceLocalStore.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/MobileServiceLocalStoreException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/MobileServiceLocalStoreException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceLocalStoreException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.localstore\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.queue\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.localstore\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a> that throw <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SQLiteLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#defineTable-java.lang.String-java.util.Map-\">defineTable</a></span>(java.lang.String&nbsp;tableName,\n           java.util.Map&lt;java.lang.String,<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>&gt;&nbsp;columns)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#defineTable-java.lang.String-java.util.Map-\">defineTable</a></span>(java.lang.String&nbsp;tableName,\n           java.util.Map&lt;java.lang.String,<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>&gt;&nbsp;columns)</code>\n<div class=\"block\">Defines a table to be created/updated on initialization</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SQLiteLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#delete-com.microsoft.windowsazure.mobileservices.table.query.Query-\">delete</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#delete-com.microsoft.windowsazure.mobileservices.table.query.Query-\">delete</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Delete items from the local store.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SQLiteLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#delete-java.lang.String-java.lang.String-\">delete</a></span>(java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#delete-java.lang.String-java.lang.String-\">delete</a></span>(java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Delete an item from the local store.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SQLiteLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#initialize--\">initialize</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#initialize--\">initialize</a></span>()</code>\n<div class=\"block\">Initializes the store for use.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SQLiteLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#lookup-java.lang.String-java.lang.String-\">lookup</a></span>(java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#lookup-java.lang.String-java.lang.String-\">lookup</a></span>(java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Looks up an item from the local store.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonElement</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SQLiteLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonElement</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>&nbsp;query)</code>\n<div class=\"block\">Retrieve results from the local store.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SQLiteLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#upsert-java.lang.String-com.google.gson.JsonObject-\">upsert</a></span>(java.lang.String&nbsp;tableName,\n      com.google.gson.JsonObject&nbsp;item)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceLocalStore.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#upsert-java.lang.String-com.google.gson.JsonObject-\">upsert</a></span>(java.lang.String&nbsp;tableName,\n      com.google.gson.JsonObject&nbsp;item)</code>\n<div class=\"block\">Insert or Update an item in the local store.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.queue\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a> that throw <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationErrorList.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#add-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError-\">add</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&nbsp;operationError)</code>\n<div class=\"block\">Adds a new table operation error</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationErrorList.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#clear--\">clear</a></span>()</code>\n<div class=\"block\">Empties the list of pending table operation errors</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#dequeue--\">dequeue</a></span>()</code>\n<div class=\"block\">Dequeue the next table operation</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.Bookmark.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html#dequeue--\">dequeue</a></span>()</code>\n<div class=\"block\">Dequeue the next bookmarked table operation</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#initializeStore-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">initializeStore</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Initializes requirements on the local store</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationErrorList.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#initializeStore-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">initializeStore</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Initializes requirements on the local store</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#load-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">load</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Loads the queue of table operations from the local store</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationErrorList.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#load-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">load</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Loads the list of table operation errors from the local store</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/MobileServiceLocalStoreException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceLocalStoreException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/SQLiteLocalStore.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/SQLiteLocalStore.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"SQLiteLocalStore.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/SQLiteLocalStore.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"SQLiteLocalStore.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.localstore</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Interfaces\">Interfaces</h2>\n<ul title=\"Interfaces\">\n<li><a href=\"MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\" target=\"classFrame\"><span class=\"interfaceName\">MobileServiceLocalStore</span></a></li>\n</ul>\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\" target=\"classFrame\">SQLiteLocalStore</a></li>\n</ul>\n<h2 title=\"Enums\">Enums</h2>\n<ul title=\"Enums\">\n<li><a href=\"ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\" target=\"classFrame\">ColumnDataType</a></li>\n</ul>\n<h2 title=\"Exceptions\">Exceptions</h2>\n<ul title=\"Exceptions\">\n<li><a href=\"MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\" target=\"classFrame\">MobileServiceLocalStoreException</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.localstore</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.sync.localstore\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table.sync.localstore</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Interface Summary table, listing interfaces, and an explanation\">\n<caption><span>Interface Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Interface</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Allows saving and reading data in the local tables.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Implements MobileServiceLocalStore backed by an SQLite DB</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Summary table, listing enums, and an explanation\">\n<caption><span>Enum Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Enum</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Enumeration of available column data types.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Exception Summary table, listing exceptions, and an explanation\">\n<caption><span>Exception Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Exception</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.localstore Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.sync.localstore Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.table.sync.localstore</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">SQLiteOpenHelper\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">SQLiteLocalStore</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>)</li>\n</ul>\n</li>\n<li type=\"circle\">java.lang.Throwable (implements java.io.Serializable)\n<ul>\n<li type=\"circle\">java.lang.Exception\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">MobileServiceLocalStoreException</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h2 title=\"Interface Hierarchy\">Interface Hierarchy</h2>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">MobileServiceLocalStore</span></a></li>\n</ul>\n<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">ColumnDataType</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.localstore</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.localstore\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.localstore\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.table.sync.localstore</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync\">com.microsoft.windowsazure.mobileservices.table.sync</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.localstore\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.operations\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.queue\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/MobileServiceLocalStore.html#com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceLocalStore</a>\n<div class=\"block\">Allows saving and reading data in the local tables.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.localstore\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/ColumnDataType.html#com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a>\n<div class=\"block\">Enumeration of available column data types.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/MobileServiceLocalStore.html#com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>\n<div class=\"block\">Allows saving and reading data in the local tables.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/MobileServiceLocalStoreException.html#com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/MobileServiceLocalStore.html#com.microsoft.windowsazure.mobileservices.table.sync.operations\">MobileServiceLocalStore</a>\n<div class=\"block\">Allows saving and reading data in the local tables.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.queue\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/MobileServiceLocalStore.html#com.microsoft.windowsazure.mobileservices.table.sync.queue\">MobileServiceLocalStore</a>\n<div class=\"block\">Allows saving and reading data in the local tables.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/class-use/MobileServiceLocalStoreException.html#com.microsoft.windowsazure.mobileservices.table.sync.queue\">MobileServiceLocalStoreException</a>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>DeleteOperation</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"DeleteOperation\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":9,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10,\"i6\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/DeleteOperation.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"DeleteOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.operations</div>\n<h2 title=\"Class DeleteOperation\" class=\"title\">Class DeleteOperation</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">DeleteOperation</span>\nextends java.lang.Object\nimplements <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></pre>\n<div class=\"block\">Class representing a delete operation against remote table.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#DeleteOperation-java.lang.String-java.lang.String-\">DeleteOperation</a></span>(java.lang.String&nbsp;tableName,\n               java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Constructor for DeleteOperation</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;T&gt;&nbsp;T</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;T&gt;&nbsp;visitor)</code>\n<div class=\"block\">Accept a MobileServiceTableOperationVisitor that works against the\n operation.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#create-java.lang.String-java.lang.String-java.lang.String-java.util.Date-\">create</a></span>(java.lang.String&nbsp;id,\n      java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId,\n      java.util.Date&nbsp;createdAt)</code>\n<div class=\"block\">Create a new DeleteOperation</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.Date</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#getCreatedAt--\">getCreatedAt</a></span>()</code>\n<div class=\"block\">Gets the creation date of the operation.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#getId--\">getId</a></span>()</code>\n<div class=\"block\">Gets the unique id of the operation.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#getItemId--\">getItemId</a></span>()</code>\n<div class=\"block\">Gets the id of the item associated with the operation.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#getKind--\">getKind</a></span>()</code>\n<div class=\"block\">Gets the kind of table operation.</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#getTableName--\">getTableName</a></span>()</code>\n<div class=\"block\">Gets the name of the table the operation will be executed against.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"DeleteOperation-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>DeleteOperation</h4>\n<pre>public&nbsp;DeleteOperation(java.lang.String&nbsp;tableName,\n                       java.lang.String&nbsp;itemId)</pre>\n<div class=\"block\">Constructor for DeleteOperation</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tableName</code> - the table name</dd>\n<dd><code>itemId</code> - the item id</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getId--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getId</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getId()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getId--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the unique id of the operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getId--\">getId</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The unique id.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getKind--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getKind</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;getKind()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getKind--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the kind of table operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getKind--\">getKind</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The table operation kind.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTableName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTableName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getTableName()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getTableName--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the name of the table the operation will be executed against.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getTableName--\">getTableName</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The table name.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getItemId--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getItemId</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getItemId()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getItemId--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the id of the item associated with the operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getItemId--\">getItemId</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The item id.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getCreatedAt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getCreatedAt</h4>\n<pre>public&nbsp;java.util.Date&nbsp;getCreatedAt()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getCreatedAt--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the creation date of the operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getCreatedAt--\">getCreatedAt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The operation creation date.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>accept</h4>\n<pre>public&nbsp;&lt;T&gt;&nbsp;T&nbsp;accept(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;T&gt;&nbsp;visitor)\n             throws java.lang.Throwable</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">TableOperation</a></code></span></div>\n<div class=\"block\">Accept a MobileServiceTableOperationVisitor that works against the\n operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>visitor</code> - An implementation of the visitor interface.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>An object whose type is determined by the type parameter of the\n         visitor.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"create-java.lang.String-java.lang.String-java.lang.String-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>create</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;create(java.lang.String&nbsp;id,\n                                     java.lang.String&nbsp;tableName,\n                                     java.lang.String&nbsp;itemId,\n                                     java.util.Date&nbsp;createdAt)</pre>\n<div class=\"block\">Create a new DeleteOperation</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - the table operation id</dd>\n<dd><code>tableName</code> - the table name</dd>\n<dd><code>itemId</code> - the item id</dd>\n<dd><code>createdAt</code> - the creation date of the table operation</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the DeleteOperation</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/DeleteOperation.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"DeleteOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>InsertOperation</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"InsertOperation\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":9,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10,\"i6\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/InsertOperation.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"InsertOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.operations</div>\n<h2 title=\"Class InsertOperation\" class=\"title\">Class InsertOperation</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">InsertOperation</span>\nextends java.lang.Object\nimplements <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></pre>\n<div class=\"block\">Class representing an insert operation against remote table.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#InsertOperation-java.lang.String-java.lang.String-\">InsertOperation</a></span>(java.lang.String&nbsp;tableName,\n               java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Constructor for InsertOperation</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;T&gt;&nbsp;T</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;T&gt;&nbsp;visitor)</code>\n<div class=\"block\">Accept a MobileServiceTableOperationVisitor that works against the\n operation.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#create-java.lang.String-java.lang.String-java.lang.String-java.util.Date-\">create</a></span>(java.lang.String&nbsp;id,\n      java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId,\n      java.util.Date&nbsp;createdAt)</code>\n<div class=\"block\">Create a new InsertOperation</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.Date</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#getCreatedAt--\">getCreatedAt</a></span>()</code>\n<div class=\"block\">Gets the creation date of the operation.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#getId--\">getId</a></span>()</code>\n<div class=\"block\">Gets the unique id of the operation.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#getItemId--\">getItemId</a></span>()</code>\n<div class=\"block\">Gets the id of the item associated with the operation.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#getKind--\">getKind</a></span>()</code>\n<div class=\"block\">Gets the kind of table operation.</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#getTableName--\">getTableName</a></span>()</code>\n<div class=\"block\">Gets the name of the table the operation will be executed against.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"InsertOperation-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>InsertOperation</h4>\n<pre>public&nbsp;InsertOperation(java.lang.String&nbsp;tableName,\n                       java.lang.String&nbsp;itemId)</pre>\n<div class=\"block\">Constructor for InsertOperation</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tableName</code> - the table name</dd>\n<dd><code>itemId</code> - the item id</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getId--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getId</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getId()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getId--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the unique id of the operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getId--\">getId</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The unique id.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getKind--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getKind</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;getKind()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getKind--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the kind of table operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getKind--\">getKind</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The table operation kind.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTableName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTableName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getTableName()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getTableName--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the name of the table the operation will be executed against.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getTableName--\">getTableName</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The table name.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getItemId--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getItemId</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getItemId()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getItemId--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the id of the item associated with the operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getItemId--\">getItemId</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The item id.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getCreatedAt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getCreatedAt</h4>\n<pre>public&nbsp;java.util.Date&nbsp;getCreatedAt()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getCreatedAt--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the creation date of the operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getCreatedAt--\">getCreatedAt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The operation creation date.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>accept</h4>\n<pre>public&nbsp;&lt;T&gt;&nbsp;T&nbsp;accept(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;T&gt;&nbsp;visitor)\n             throws java.lang.Throwable</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">TableOperation</a></code></span></div>\n<div class=\"block\">Accept a MobileServiceTableOperationVisitor that works against the\n operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>visitor</code> - An implementation of the visitor interface.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>An object whose type is determined by the type parameter of the\n         visitor.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"create-java.lang.String-java.lang.String-java.lang.String-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>create</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;create(java.lang.String&nbsp;id,\n                                     java.lang.String&nbsp;tableName,\n                                     java.lang.String&nbsp;itemId,\n                                     java.util.Date&nbsp;createdAt)</pre>\n<div class=\"block\">Create a new InsertOperation</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - the table operation id</dd>\n<dd><code>tableName</code> - the table name</dd>\n<dd><code>itemId</code> - the item id</dd>\n<dd><code>createdAt</code> - the creation date of the table operation</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the InsertOperation</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/InsertOperation.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"InsertOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>LocalTableOperationProcessor</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"LocalTableOperationProcessor\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/LocalTableOperationProcessor.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"LocalTableOperationProcessor.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.operations</div>\n<h2 title=\"Class LocalTableOperationProcessor\" class=\"title\">Class LocalTableOperationProcessor</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.operations.LocalTableOperationProcessor</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;java.lang.Void&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">LocalTableOperationProcessor</span>\nextends java.lang.Object\nimplements <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;java.lang.Void&gt;</pre>\n<div class=\"block\">Processes a table operation against a local store.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#LocalTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-com.google.gson.JsonObject-java.lang.String-\">LocalTableOperationProcessor</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store,\n                            com.google.gson.JsonObject&nbsp;item,\n                            java.lang.String&nbsp;itemBackupTable)</code>\n<div class=\"block\">Constructor for LocalTableOperationProcessor</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#getItem--\">getItem</a></span>()</code>\n<div class=\"block\">Gets the item to process</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#setItem-com.google.gson.JsonObject-\">setItem</a></span>(com.google.gson.JsonObject&nbsp;item)</code>\n<div class=\"block\">Sets the item to process</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.Void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Visit a delete operation.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.Void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Visit an insert operation.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.Void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Visit an update operation.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"LocalTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-com.google.gson.JsonObject-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>LocalTableOperationProcessor</h4>\n<pre>public&nbsp;LocalTableOperationProcessor(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store,\n                                    com.google.gson.JsonObject&nbsp;item,\n                                    java.lang.String&nbsp;itemBackupTable)</pre>\n<div class=\"block\">Constructor for LocalTableOperationProcessor</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>store</code> - the local store</dd>\n<dd><code>item</code> - the item to process</dd>\n<dd><code>itemBackupTable</code> - the table name for item backup</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;java.lang.Void&nbsp;visit(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;operation)\n                     throws java.lang.Throwable</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">TableOperationVisitor</a></code></span></div>\n<div class=\"block\">Visit an insert operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;java.lang.Void&gt;</code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>operation</code> - The operation to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;java.lang.Void&nbsp;visit(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;operation)\n                     throws java.lang.Throwable</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">TableOperationVisitor</a></code></span></div>\n<div class=\"block\">Visit an update operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;java.lang.Void&gt;</code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>operation</code> - The operation to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;java.lang.Void&nbsp;visit(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;operation)\n                     throws java.lang.Throwable</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">TableOperationVisitor</a></code></span></div>\n<div class=\"block\">Visit a delete operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;java.lang.Void&gt;</code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>operation</code> - The operation to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getItem--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getItem</h4>\n<pre>public&nbsp;com.google.gson.JsonObject&nbsp;getItem()</pre>\n<div class=\"block\">Gets the item to process</div>\n</li>\n</ul>\n<a name=\"setItem-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>setItem</h4>\n<pre>public&nbsp;void&nbsp;setItem(com.google.gson.JsonObject&nbsp;item)</pre>\n<div class=\"block\">Sets the item to process</div>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/LocalTableOperationProcessor.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"LocalTableOperationProcessor.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>RemoteTableOperationProcessor</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"RemoteTableOperationProcessor\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/RemoteTableOperationProcessor.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RemoteTableOperationProcessor.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.operations</div>\n<h2 title=\"Class RemoteTableOperationProcessor\" class=\"title\">Class RemoteTableOperationProcessor</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;com.google.gson.JsonObject&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">RemoteTableOperationProcessor</span>\nextends java.lang.Object\nimplements <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;com.google.gson.JsonObject&gt;</pre>\n<div class=\"block\">Processes a table operation against a remote store.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.MobileServiceClient-com.google.gson.JsonObject-\">RemoteTableOperationProcessor</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client,\n                             com.google.gson.JsonObject&nbsp;item)</code>\n<div class=\"block\">Constructor for RemoteTableOperationProcessor</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#getItem--\">getItem</a></span>()</code>\n<div class=\"block\">Gets the item to process</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#setItem-com.google.gson.JsonObject-\">setItem</a></span>(com.google.gson.JsonObject&nbsp;item)</code>\n<div class=\"block\">Sets the item to process</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Visit a delete operation.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Visit an insert operation.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Visit an update operation.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.MobileServiceClient-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>RemoteTableOperationProcessor</h4>\n<pre>public&nbsp;RemoteTableOperationProcessor(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a>&nbsp;client,\n                                     com.google.gson.JsonObject&nbsp;item)</pre>\n<div class=\"block\">Constructor for RemoteTableOperationProcessor</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>client</code> - the mobile service client</dd>\n<dd><code>item</code> - the item to process</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;com.google.gson.JsonObject&nbsp;visit(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;operation)\n                                 throws java.lang.Throwable</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">TableOperationVisitor</a></code></span></div>\n<div class=\"block\">Visit an insert operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;com.google.gson.JsonObject&gt;</code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>operation</code> - The operation to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;com.google.gson.JsonObject&nbsp;visit(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;operation)\n                                 throws java.lang.Throwable</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">TableOperationVisitor</a></code></span></div>\n<div class=\"block\">Visit an update operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;com.google.gson.JsonObject&gt;</code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>operation</code> - The operation to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;com.google.gson.JsonObject&nbsp;visit(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;operation)\n                                 throws java.lang.Throwable</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">TableOperationVisitor</a></code></span></div>\n<div class=\"block\">Visit a delete operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;com.google.gson.JsonObject&gt;</code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>operation</code> - The operation to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"getItem--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getItem</h4>\n<pre>public&nbsp;com.google.gson.JsonObject&nbsp;getItem()</pre>\n<div class=\"block\">Gets the item to process</div>\n</li>\n</ul>\n<a name=\"setItem-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>setItem</h4>\n<pre>public&nbsp;void&nbsp;setItem(com.google.gson.JsonObject&nbsp;item)</pre>\n<div class=\"block\">Sets the item to process</div>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/RemoteTableOperationProcessor.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RemoteTableOperationProcessor.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>TableOperation</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"TableOperation\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6,\"i1\":6,\"i2\":6,\"i3\":6,\"i4\":6,\"i5\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableOperation.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.operations</div>\n<h2 title=\"Interface TableOperation\" class=\"title\">Interface TableOperation</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Known Implementing Classes:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>, <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>, <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">TableOperation</span></pre>\n<div class=\"block\">Interface representing a table operation against remote table.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;T&gt;&nbsp;T</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;T&gt;&nbsp;visitor)</code>\n<div class=\"block\">Accept a MobileServiceTableOperationVisitor that works against the\n operation.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.util.Date</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getCreatedAt--\">getCreatedAt</a></span>()</code>\n<div class=\"block\">Gets the creation date of the operation.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getId--\">getId</a></span>()</code>\n<div class=\"block\">Gets the unique id of the operation.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getItemId--\">getItemId</a></span>()</code>\n<div class=\"block\">Gets the id of the item associated with the operation.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getKind--\">getKind</a></span>()</code>\n<div class=\"block\">Gets the kind of table operation.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getTableName--\">getTableName</a></span>()</code>\n<div class=\"block\">Gets the name of the table the operation will be executed against.</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getId--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getId</h4>\n<pre>java.lang.String&nbsp;getId()</pre>\n<div class=\"block\">Gets the unique id of the operation.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The unique id.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getKind--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getKind</h4>\n<pre><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;getKind()</pre>\n<div class=\"block\">Gets the kind of table operation.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The table operation kind.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTableName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTableName</h4>\n<pre>java.lang.String&nbsp;getTableName()</pre>\n<div class=\"block\">Gets the name of the table the operation will be executed against.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The table name.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getItemId--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getItemId</h4>\n<pre>java.lang.String&nbsp;getItemId()</pre>\n<div class=\"block\">Gets the id of the item associated with the operation.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The item id.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getCreatedAt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getCreatedAt</h4>\n<pre>java.util.Date&nbsp;getCreatedAt()</pre>\n<div class=\"block\">Gets the creation date of the operation.</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The operation creation date.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>accept</h4>\n<pre>&lt;T&gt;&nbsp;T&nbsp;accept(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;T&gt;&nbsp;visitor)\n      throws java.lang.Throwable</pre>\n<div class=\"block\">Accept a MobileServiceTableOperationVisitor that works against the\n operation.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>visitor</code> - An implementation of the visitor interface.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>An object whose type is determined by the type parameter of the\n         visitor.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableOperation.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>TableOperationCollapser</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"TableOperationCollapser\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableOperationCollapser.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationCollapser.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.operations</div>\n<h2 title=\"Class TableOperationCollapser\" class=\"title\">Class TableOperationCollapser</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationCollapser</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">TableOperationCollapser</span>\nextends java.lang.Object\nimplements <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&gt;</pre>\n<div class=\"block\">Class that encapsulates collapse logic for new table operation.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#TableOperationCollapser-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">TableOperationCollapser</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;newOperation)</code>\n<div class=\"block\">Constructor for TableOperationCollapser</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;existingOperation)</code>\n<div class=\"block\">Visit a delete operation.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;existingOperation)</code>\n<div class=\"block\">Visit an insert operation.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;existingOperation)</code>\n<div class=\"block\">Visit an update operation.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"TableOperationCollapser-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>TableOperationCollapser</h4>\n<pre>public&nbsp;TableOperationCollapser(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;newOperation)</pre>\n<div class=\"block\">Constructor for TableOperationCollapser</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>newOperation</code> - the new operation to collapse</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;visit(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;existingOperation)\n                     throws java.lang.Throwable</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">TableOperationVisitor</a></code></span></div>\n<div class=\"block\">Visit an insert operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&gt;</code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>existingOperation</code> - The operation to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;visit(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;existingOperation)\n                     throws java.lang.Throwable</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">TableOperationVisitor</a></code></span></div>\n<div class=\"block\">Visit an update operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&gt;</code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>existingOperation</code> - The operation to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;visit(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;existingOperation)\n                     throws java.lang.Throwable</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">TableOperationVisitor</a></code></span></div>\n<div class=\"block\">Visit a delete operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&gt;</code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>existingOperation</code> - The operation to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableOperationCollapser.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationCollapser.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>TableOperationError</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"TableOperationError\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":9,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10,\"i6\":10,\"i7\":10,\"i8\":10,\"i9\":10,\"i10\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableOperationError.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationError.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.operations</div>\n<h2 title=\"Class TableOperationError\" class=\"title\">Class TableOperationError</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">TableOperationError</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Class representing a table operation error against remote table.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#TableOperationError-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind-java.lang.String-java.lang.String-com.google.gson.JsonObject-java.lang.String-java.lang.Integer-java.lang.String-com.google.gson.JsonObject-\">TableOperationError</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;operationKind,\n                   java.lang.String&nbsp;tableName,\n                   java.lang.String&nbsp;itemId,\n                   com.google.gson.JsonObject&nbsp;clientItem,\n                   java.lang.String&nbsp;errorMessage,\n                   java.lang.Integer&nbsp;statusCode,\n                   java.lang.String&nbsp;serverResponse,\n                   com.google.gson.JsonObject&nbsp;serverItem)</code>\n<div class=\"block\">Constructor for TableOperationError</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#create-java.lang.String-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind-java.lang.String-java.lang.String-com.google.gson.JsonObject-java.lang.String-java.lang.Integer-java.lang.String-com.google.gson.JsonObject-java.util.Date-\">create</a></span>(java.lang.String&nbsp;id,\n      <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;operationKind,\n      java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId,\n      com.google.gson.JsonObject&nbsp;clientItem,\n      java.lang.String&nbsp;errorMessage,\n      java.lang.Integer&nbsp;statusCode,\n      java.lang.String&nbsp;serverResponse,\n      com.google.gson.JsonObject&nbsp;serverItem,\n      java.util.Date&nbsp;createdAt)</code>\n<div class=\"block\">Creates a new table operation error</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getClientItem--\">getClientItem</a></span>()</code>\n<div class=\"block\">Gets the client item</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.Date</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getCreatedAt--\">getCreatedAt</a></span>()</code>\n<div class=\"block\">Gets the creation date of the table operation error</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getErrorMessage--\">getErrorMessage</a></span>()</code>\n<div class=\"block\">Gets the error message</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getId--\">getId</a></span>()</code>\n<div class=\"block\">Gets the table operation error id</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getItemId--\">getItemId</a></span>()</code>\n<div class=\"block\">Gets the item id</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getOperationKind--\">getOperationKind</a></span>()</code>\n<div class=\"block\">Gets the kind of table operation</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getServerItem--\">getServerItem</a></span>()</code>\n<div class=\"block\">Gets the server item</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getServerResponse--\">getServerResponse</a></span>()</code>\n<div class=\"block\">Gets the server response</div>\n</td>\n</tr>\n<tr id=\"i9\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.Integer</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getStatusCode--\">getStatusCode</a></span>()</code>\n<div class=\"block\">Gets the status code of the response</div>\n</td>\n</tr>\n<tr id=\"i10\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getTableName--\">getTableName</a></span>()</code>\n<div class=\"block\">Gets the table name</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"TableOperationError-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind-java.lang.String-java.lang.String-com.google.gson.JsonObject-java.lang.String-java.lang.Integer-java.lang.String-com.google.gson.JsonObject-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>TableOperationError</h4>\n<pre>public&nbsp;TableOperationError(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;operationKind,\n                           java.lang.String&nbsp;tableName,\n                           java.lang.String&nbsp;itemId,\n                           com.google.gson.JsonObject&nbsp;clientItem,\n                           java.lang.String&nbsp;errorMessage,\n                           java.lang.Integer&nbsp;statusCode,\n                           java.lang.String&nbsp;serverResponse,\n                           com.google.gson.JsonObject&nbsp;serverItem)</pre>\n<div class=\"block\">Constructor for TableOperationError</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>operationKind</code> - the kind of table operation</dd>\n<dd><code>tableName</code> - the table name</dd>\n<dd><code>itemId</code> - the item id</dd>\n<dd><code>clientItem</code> - the client item</dd>\n<dd><code>errorMessage</code> - the error message</dd>\n<dd><code>statusCode</code> - the status code of the response</dd>\n<dd><code>serverResponse</code> - the server response</dd>\n<dd><code>serverItem</code> - the server item</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getId--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getId</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getId()</pre>\n<div class=\"block\">Gets the table operation error id</div>\n</li>\n</ul>\n<a name=\"getOperationKind--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getOperationKind</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;getOperationKind()</pre>\n<div class=\"block\">Gets the kind of table operation</div>\n</li>\n</ul>\n<a name=\"getTableName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTableName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getTableName()</pre>\n<div class=\"block\">Gets the table name</div>\n</li>\n</ul>\n<a name=\"getItemId--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getItemId</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getItemId()</pre>\n<div class=\"block\">Gets the item id</div>\n</li>\n</ul>\n<a name=\"getClientItem--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getClientItem</h4>\n<pre>public&nbsp;com.google.gson.JsonObject&nbsp;getClientItem()</pre>\n<div class=\"block\">Gets the client item</div>\n</li>\n</ul>\n<a name=\"getErrorMessage--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getErrorMessage</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getErrorMessage()</pre>\n<div class=\"block\">Gets the error message</div>\n</li>\n</ul>\n<a name=\"getStatusCode--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getStatusCode</h4>\n<pre>public&nbsp;java.lang.Integer&nbsp;getStatusCode()</pre>\n<div class=\"block\">Gets the status code of the response</div>\n</li>\n</ul>\n<a name=\"getServerResponse--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getServerResponse</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getServerResponse()</pre>\n<div class=\"block\">Gets the server response</div>\n</li>\n</ul>\n<a name=\"getServerItem--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getServerItem</h4>\n<pre>public&nbsp;com.google.gson.JsonObject&nbsp;getServerItem()</pre>\n<div class=\"block\">Gets the server item</div>\n</li>\n</ul>\n<a name=\"getCreatedAt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getCreatedAt</h4>\n<pre>public&nbsp;java.util.Date&nbsp;getCreatedAt()</pre>\n<div class=\"block\">Gets the creation date of the table operation error</div>\n</li>\n</ul>\n<a name=\"create-java.lang.String-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind-java.lang.String-java.lang.String-com.google.gson.JsonObject-java.lang.String-java.lang.Integer-java.lang.String-com.google.gson.JsonObject-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>create</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&nbsp;create(java.lang.String&nbsp;id,\n                                         <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;operationKind,\n                                         java.lang.String&nbsp;tableName,\n                                         java.lang.String&nbsp;itemId,\n                                         com.google.gson.JsonObject&nbsp;clientItem,\n                                         java.lang.String&nbsp;errorMessage,\n                                         java.lang.Integer&nbsp;statusCode,\n                                         java.lang.String&nbsp;serverResponse,\n                                         com.google.gson.JsonObject&nbsp;serverItem,\n                                         java.util.Date&nbsp;createdAt)</pre>\n<div class=\"block\">Creates a new table operation error</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - the table operation error id</dd>\n<dd><code>operationKind</code> - the kind of table operation</dd>\n<dd><code>tableName</code> - the table name</dd>\n<dd><code>itemId</code> - the item id</dd>\n<dd><code>clientItem</code> - the client item</dd>\n<dd><code>errorMessage</code> - the error message</dd>\n<dd><code>statusCode</code> - the status code of the response</dd>\n<dd><code>serverResponse</code> - the server response</dd>\n<dd><code>serverItem</code> - the server item</dd>\n<dd><code>createdAt</code> - the creation date of the table operation error</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the table operation error</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableOperationError.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationError.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>TableOperationKind</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"TableOperationKind\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":9,\"i2\":9,\"i3\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableOperationKind.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationKind.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.operations</div>\n<h2 title=\"Enum TableOperationKind\" class=\"title\">Enum TableOperationKind</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Enum&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&gt;</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable, java.lang.Comparable&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public enum <span class=\"typeNameLabel\">TableOperationKind</span>\nextends java.lang.Enum&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&gt;</pre>\n<div class=\"block\">Enumeration for kinds of table operations.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== ENUM CONSTANT SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.summary\">\n<!--   -->\n</a>\n<h3>Enum Constant Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Constant Summary table, listing enum constants, and an explanation\">\n<caption><span>Enum Constants</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#Delete\">Delete</a></span></code>\n<div class=\"block\">Delete operation.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#Insert\">Insert</a></span></code>\n<div class=\"block\">Insert operation.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#Update\">Update</a></span></code>\n<div class=\"block\">Update operation.</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#getValue--\">getValue</a></span>()</code>\n<div class=\"block\">Return the int value associated to the enum</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#parse-int-\">parse</a></span>(int&nbsp;value)</code>\n<div class=\"block\">Return the TableOperationKind with the provided int value</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Enum\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Enum</h3>\n<code>compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>getClass, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ ENUM CONSTANT DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.detail\">\n<!--   -->\n</a>\n<h3>Enum Constant Detail</h3>\n<a name=\"Insert\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>Insert</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a> Insert</pre>\n<div class=\"block\">Insert operation.</div>\n</li>\n</ul>\n<a name=\"Update\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>Update</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a> Update</pre>\n<div class=\"block\">Update operation.</div>\n</li>\n</ul>\n<a name=\"Delete\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>Delete</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a> Delete</pre>\n<div class=\"block\">Delete operation.</div>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"values--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>values</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>[]&nbsp;values()</pre>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.  This method may be used to iterate\nover the constants as follows:\n<pre>\nfor (TableOperationKind c : TableOperationKind.values())\n&nbsp;   System.out.println(c);\n</pre></div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>an array containing the constants of this enum type, in the order they are declared</dd>\n</dl>\n</li>\n</ul>\n<a name=\"valueOf-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>valueOf</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;valueOf(java.lang.String&nbsp;name)</pre>\n<div class=\"block\">Returns the enum constant of this type with the specified name.\nThe string must match <i>exactly</i> an identifier used to declare an\nenum constant in this type.  (Extraneous whitespace characters are \nnot permitted.)</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - the name of the enum constant to be returned.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the enum constant with the specified name</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.IllegalArgumentException</code> - if this enum type has no constant with the specified name</dd>\n<dd><code>java.lang.NullPointerException</code> - if the argument is null</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getValue--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getValue</h4>\n<pre>public&nbsp;int&nbsp;getValue()</pre>\n<div class=\"block\">Return the int value associated to the enum</div>\n</li>\n</ul>\n<a name=\"parse-int-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>parse</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;parse(int&nbsp;value)</pre>\n<div class=\"block\">Return the TableOperationKind with the provided int value</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>value</code> - the int value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the matching TableOperationKind</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableOperationKind.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationKind.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>TableOperationVisitor</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"TableOperationVisitor\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6,\"i1\":6,\"i2\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableOperationVisitor.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationVisitor.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.operations</div>\n<h2 title=\"Interface TableOperationVisitor\" class=\"title\">Interface TableOperationVisitor&lt;E&gt;</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Known Implementing Classes:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">LocalTableOperationProcessor</a>, <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a>, <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationCollapser</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">TableOperationVisitor&lt;E&gt;</span></pre>\n<div class=\"block\">Interface of a table operation visitor used to extend functionality.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"type parameter in TableOperationVisitor\">E</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Visit a delete operation.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"type parameter in TableOperationVisitor\">E</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Visit an insert operation.</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"type parameter in TableOperationVisitor\">E</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Visit an update operation.</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"type parameter in TableOperationVisitor\">E</a>&nbsp;visit(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;operation)\n throws java.lang.Throwable</pre>\n<div class=\"block\">Visit an insert operation.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>operation</code> - The operation to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"type parameter in TableOperationVisitor\">E</a>&nbsp;visit(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;operation)\n throws java.lang.Throwable</pre>\n<div class=\"block\">Visit an update operation.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>operation</code> - The operation to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>visit</h4>\n<pre><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"type parameter in TableOperationVisitor\">E</a>&nbsp;visit(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;operation)\n throws java.lang.Throwable</pre>\n<div class=\"block\">Visit a delete operation.</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>operation</code> - The operation to visit</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>Defined by the implementer.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/TableOperationVisitor.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationVisitor.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>UpdateOperation</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"UpdateOperation\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":9,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10,\"i6\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/UpdateOperation.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UpdateOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.operations</div>\n<h2 title=\"Class UpdateOperation\" class=\"title\">Class UpdateOperation</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">UpdateOperation</span>\nextends java.lang.Object\nimplements <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></pre>\n<div class=\"block\">Class representing an update operation against remote table.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#UpdateOperation-java.lang.String-java.lang.String-\">UpdateOperation</a></span>(java.lang.String&nbsp;tableName,\n               java.lang.String&nbsp;itemId)</code>\n<div class=\"block\">Constructor for UpdateOperation</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;T&gt;&nbsp;T</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;T&gt;&nbsp;visitor)</code>\n<div class=\"block\">Accept a MobileServiceTableOperationVisitor that works against the\n operation.</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#create-java.lang.String-java.lang.String-java.lang.String-java.util.Date-\">create</a></span>(java.lang.String&nbsp;id,\n      java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId,\n      java.util.Date&nbsp;createdAt)</code>\n<div class=\"block\">Create a new UpdateOperation</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.Date</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#getCreatedAt--\">getCreatedAt</a></span>()</code>\n<div class=\"block\">Gets the creation date of the operation.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#getId--\">getId</a></span>()</code>\n<div class=\"block\">Gets the unique id of the operation.</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#getItemId--\">getItemId</a></span>()</code>\n<div class=\"block\">Gets the id of the item associated with the operation.</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#getKind--\">getKind</a></span>()</code>\n<div class=\"block\">Gets the kind of table operation.</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.String</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#getTableName--\">getTableName</a></span>()</code>\n<div class=\"block\">Gets the name of the table the operation will be executed against.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"UpdateOperation-java.lang.String-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>UpdateOperation</h4>\n<pre>public&nbsp;UpdateOperation(java.lang.String&nbsp;tableName,\n                       java.lang.String&nbsp;itemId)</pre>\n<div class=\"block\">Constructor for UpdateOperation</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tableName</code> - the table name</dd>\n<dd><code>itemId</code> - the item id</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getId--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getId</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getId()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getId--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the unique id of the operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getId--\">getId</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The unique id.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getKind--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getKind</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;getKind()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getKind--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the kind of table operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getKind--\">getKind</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The table operation kind.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getTableName--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getTableName</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getTableName()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getTableName--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the name of the table the operation will be executed against.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getTableName--\">getTableName</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The table name.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getItemId--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getItemId</h4>\n<pre>public&nbsp;java.lang.String&nbsp;getItemId()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getItemId--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the id of the item associated with the operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getItemId--\">getItemId</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The item id.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getCreatedAt--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getCreatedAt</h4>\n<pre>public&nbsp;java.util.Date&nbsp;getCreatedAt()</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getCreatedAt--\">TableOperation</a></code></span></div>\n<div class=\"block\">Gets the creation date of the operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getCreatedAt--\">getCreatedAt</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>The operation creation date.</dd>\n</dl>\n</li>\n</ul>\n<a name=\"accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>accept</h4>\n<pre>public&nbsp;&lt;T&gt;&nbsp;T&nbsp;accept(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;T&gt;&nbsp;visitor)\n             throws java.lang.Throwable</pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">TableOperation</a></code></span></div>\n<div class=\"block\">Accept a MobileServiceTableOperationVisitor that works against the\n operation.</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>visitor</code> - An implementation of the visitor interface.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>An object whose type is determined by the type parameter of the\n         visitor.</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"create-java.lang.String-java.lang.String-java.lang.String-java.util.Date-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>create</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;create(java.lang.String&nbsp;id,\n                                     java.lang.String&nbsp;tableName,\n                                     java.lang.String&nbsp;itemId,\n                                     java.util.Date&nbsp;createdAt)</pre>\n<div class=\"block\">Create a new UpdateOperation</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>id</code> - the table operation id</dd>\n<dd><code>tableName</code> - the table name</dd>\n<dd><code>itemId</code> - the item id</dd>\n<dd><code>createdAt</code> - the creation date of the table operation</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the UpdateOperation</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/UpdateOperation.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UpdateOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/DeleteOperation.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/DeleteOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"DeleteOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.operations\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">DeleteOperation.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#create-java.lang.String-java.lang.String-java.lang.String-java.util.Date-\">create</a></span>(java.lang.String&nbsp;id,\n      java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId,\n      java.util.Date&nbsp;createdAt)</code>\n<div class=\"block\">Create a new DeleteOperation</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"type parameter in TableOperationVisitor\">E</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationVisitor.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Visit a delete operation.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationCollapser.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;existingOperation)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">RemoteTableOperationProcessor.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;operation)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.Void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">LocalTableOperationProcessor.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;operation)</code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/DeleteOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"DeleteOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/InsertOperation.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/InsertOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"InsertOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.operations\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">InsertOperation.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#create-java.lang.String-java.lang.String-java.lang.String-java.util.Date-\">create</a></span>(java.lang.String&nbsp;id,\n      java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId,\n      java.util.Date&nbsp;createdAt)</code>\n<div class=\"block\">Create a new InsertOperation</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"type parameter in TableOperationVisitor\">E</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationVisitor.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Visit an insert operation.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationCollapser.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;existingOperation)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">RemoteTableOperationProcessor.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;operation)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.Void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">LocalTableOperationProcessor.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;operation)</code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/InsertOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"InsertOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/LocalTableOperationProcessor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.LocalTableOperationProcessor</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.LocalTableOperationProcessor\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/LocalTableOperationProcessor.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"LocalTableOperationProcessor.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.LocalTableOperationProcessor\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.operations.LocalTableOperationProcessor</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.sync.operations.LocalTableOperationProcessor</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/LocalTableOperationProcessor.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"LocalTableOperationProcessor.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/RemoteTableOperationProcessor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/RemoteTableOperationProcessor.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RemoteTableOperationProcessor.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SimpleSyncHandler.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html#executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">executeTableOperation</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a>&nbsp;processor,\n                     <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncHandler.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">executeTableOperation</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a>&nbsp;processor,\n                     <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Executes a table operation against a remote store</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/RemoteTableOperationProcessor.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"RemoteTableOperationProcessor.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperation.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.operations\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.queue\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> that implement <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></span></code>\n<div class=\"block\">Class representing a delete operation against remote table.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></span></code>\n<div class=\"block\">Class representing an insert operation against remote table.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></span></code>\n<div class=\"block\">Class representing an update operation against remote table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationCollapser.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>&nbsp;existingOperation)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationCollapser.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>&nbsp;existingOperation)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationCollapser.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;existingOperation)</code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#TableOperationCollapser-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">TableOperationCollapser</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;newOperation)</code>\n<div class=\"block\">Constructor for TableOperationCollapser</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.queue\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#dequeue--\">dequeue</a></span>()</code>\n<div class=\"block\">Dequeue the next table operation</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.Bookmark.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html#dequeue--\">dequeue</a></span>()</code>\n<div class=\"block\">Dequeue the next bookmarked table operation</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#peek--\">peek</a></span>()</code>\n<div class=\"block\">Peek the next table operation</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.Bookmark.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html#peek--\">peek</a></span>()</code>\n<div class=\"block\">Peek the next bookmarked table operation</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#enqueue-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">enqueue</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Enqueue a new table operation</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SimpleSyncHandler.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html#executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">executeTableOperation</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a>&nbsp;processor,\n                     <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncHandler.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">executeTableOperation</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a>&nbsp;processor,\n                     <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Executes a table operation against a remote store</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationCollapser.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationCollapser</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationCollapser\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationCollapser.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationCollapser.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationCollapser\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationCollapser</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationCollapser</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationCollapser.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationCollapser.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationError.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationError.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationError.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.operations\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.push\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.queue\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationError.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#create-java.lang.String-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind-java.lang.String-java.lang.String-com.google.gson.JsonObject-java.lang.String-java.lang.Integer-java.lang.String-com.google.gson.JsonObject-java.util.Date-\">create</a></span>(java.lang.String&nbsp;id,\n      <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;operationKind,\n      java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId,\n      com.google.gson.JsonObject&nbsp;clientItem,\n      java.lang.String&nbsp;errorMessage,\n      java.lang.Integer&nbsp;statusCode,\n      java.lang.String&nbsp;serverResponse,\n      com.google.gson.JsonObject&nbsp;serverItem,\n      java.util.Date&nbsp;createdAt)</code>\n<div class=\"block\">Creates a new table operation error</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.push\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a> that return types with arguments of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePushCompletionResult.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#getOperationErrors--\">getOperationErrors</a></span>()</code>\n<div class=\"block\">Gets the list of table operation errors</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Method parameters in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a> with type arguments of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePushCompletionResult.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#setOperationErrors-java.util.List-\">setOperationErrors</a></span>(java.util.List&lt;<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&gt;&nbsp;operationErrors)</code>\n<div class=\"block\">Sets the list of table operation errors</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.queue\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a> that return types with arguments of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationErrorList.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#getAll--\">getAll</a></span>()</code>\n<div class=\"block\">Returns the list of all pending table operation errors</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationErrorList.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#add-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError-\">add</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&nbsp;operationError)</code>\n<div class=\"block\">Adds a new table operation error</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationError.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationError.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationKind.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationKind.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationKind.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.operations\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">UpdateOperation.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#getKind--\">getKind</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperation.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getKind--\">getKind</a></span>()</code>\n<div class=\"block\">Gets the kind of table operation.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">InsertOperation.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#getKind--\">getKind</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">DeleteOperation.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#getKind--\">getKind</a></span>()</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationError.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getOperationKind--\">getOperationKind</a></span>()</code>\n<div class=\"block\">Gets the kind of table operation</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationKind.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#parse-int-\">parse</a></span>(int&nbsp;value)</code>\n<div class=\"block\">Return the TableOperationKind with the provided int value</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationKind.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>[]</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationKind.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationError.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#create-java.lang.String-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind-java.lang.String-java.lang.String-com.google.gson.JsonObject-java.lang.String-java.lang.Integer-java.lang.String-com.google.gson.JsonObject-java.util.Date-\">create</a></span>(java.lang.String&nbsp;id,\n      <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;operationKind,\n      java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId,\n      com.google.gson.JsonObject&nbsp;clientItem,\n      java.lang.String&nbsp;errorMessage,\n      java.lang.Integer&nbsp;statusCode,\n      java.lang.String&nbsp;serverResponse,\n      com.google.gson.JsonObject&nbsp;serverItem,\n      java.util.Date&nbsp;createdAt)</code>\n<div class=\"block\">Creates a new table operation error</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#TableOperationError-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind-java.lang.String-java.lang.String-com.google.gson.JsonObject-java.lang.String-java.lang.Integer-java.lang.String-com.google.gson.JsonObject-\">TableOperationError</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>&nbsp;operationKind,\n                   java.lang.String&nbsp;tableName,\n                   java.lang.String&nbsp;itemId,\n                   com.google.gson.JsonObject&nbsp;clientItem,\n                   java.lang.String&nbsp;errorMessage,\n                   java.lang.Integer&nbsp;statusCode,\n                   java.lang.String&nbsp;serverResponse,\n                   com.google.gson.JsonObject&nbsp;serverItem)</code>\n<div class=\"block\">Constructor for TableOperationError</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationKind.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationKind.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationVisitor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationVisitor.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationVisitor.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.operations\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> that implement <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">LocalTableOperationProcessor</a></span></code>\n<div class=\"block\">Processes a table operation against a local store.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a></span></code>\n<div class=\"block\">Processes a table operation against a remote store.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationCollapser</a></span></code>\n<div class=\"block\">Class that encapsulates collapse logic for new table operation.</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;T&gt;&nbsp;T</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">UpdateOperation.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;T&gt;&nbsp;visitor)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;T&gt;&nbsp;T</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperation.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;T&gt;&nbsp;visitor)</code>\n<div class=\"block\">Accept a MobileServiceTableOperationVisitor that works against the\n operation.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>&lt;T&gt;&nbsp;T</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">InsertOperation.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;T&gt;&nbsp;visitor)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>&lt;T&gt;&nbsp;T</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">DeleteOperation.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;T&gt;&nbsp;visitor)</code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationVisitor.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"TableOperationVisitor.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/UpdateOperation.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/UpdateOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UpdateOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.operations\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">UpdateOperation.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#create-java.lang.String-java.lang.String-java.lang.String-java.util.Date-\">create</a></span>(java.lang.String&nbsp;id,\n      java.lang.String&nbsp;tableName,\n      java.lang.String&nbsp;itemId,\n      java.util.Date&nbsp;createdAt)</code>\n<div class=\"block\">Create a new UpdateOperation</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"type parameter in TableOperationVisitor\">E</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationVisitor.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Visit an update operation.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">TableOperationCollapser.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;existingOperation)</code>&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">RemoteTableOperationProcessor.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;operation)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>java.lang.Void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">LocalTableOperationProcessor.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>&nbsp;operation)</code>&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/UpdateOperation.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"UpdateOperation.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.operations</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Interfaces\">Interfaces</h2>\n<ul title=\"Interfaces\">\n<li><a href=\"TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\"><span class=\"interfaceName\">TableOperation</span></a></li>\n<li><a href=\"TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\"><span class=\"interfaceName\">TableOperationVisitor</span></a></li>\n</ul>\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">DeleteOperation</a></li>\n<li><a href=\"InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">InsertOperation</a></li>\n<li><a href=\"LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">LocalTableOperationProcessor</a></li>\n<li><a href=\"RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">RemoteTableOperationProcessor</a></li>\n<li><a href=\"TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">TableOperationCollapser</a></li>\n<li><a href=\"TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">TableOperationError</a></li>\n<li><a href=\"UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">UpdateOperation</a></li>\n</ul>\n<h2 title=\"Enums\">Enums</h2>\n<ul title=\"Enums\">\n<li><a href=\"TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\" target=\"classFrame\">TableOperationKind</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.operations</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table.sync.operations</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Interface Summary table, listing interfaces, and an explanation\">\n<caption><span>Interface Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Interface</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Interface representing a table operation against remote table.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;E&gt;</td>\n<td class=\"colLast\">\n<div class=\"block\">Interface of a table operation visitor used to extend functionality.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Class representing a delete operation against remote table.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Class representing an insert operation against remote table.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">LocalTableOperationProcessor</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Processes a table operation against a local store.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Processes a table operation against a remote store.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationCollapser</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Class that encapsulates collapse logic for new table operation.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Class representing a table operation error against remote table.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Class representing an update operation against remote table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Summary table, listing enums, and an explanation\">\n<caption><span>Enum Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Enum</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Enumeration for kinds of table operations.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.operations Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.sync.operations Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.table.sync.operations</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">DeleteOperation</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">InsertOperation</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">LocalTableOperationProcessor</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;E&gt;)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">RemoteTableOperationProcessor</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;E&gt;)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperationCollapser</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;E&gt;)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperationError</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">UpdateOperation</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>)</li>\n</ul>\n</li>\n</ul>\n<h2 title=\"Interface Hierarchy\">Interface Hierarchy</h2>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperation</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperationVisitor</span></a>&lt;E&gt;</li>\n</ul>\n<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperationKind</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/operations/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.operations</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.operations\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.operations\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.table.sync.operations</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.operations\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.push\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.queue\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.operations\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/DeleteOperation.html#com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a>\n<div class=\"block\">Class representing a delete operation against remote table.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/InsertOperation.html#com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a>\n<div class=\"block\">Class representing an insert operation against remote table.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperation.html#com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>\n<div class=\"block\">Interface representing a table operation against remote table.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationError.html#com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>\n<div class=\"block\">Class representing a table operation error against remote table.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationKind.html#com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a>\n<div class=\"block\">Enumeration for kinds of table operations.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationVisitor.html#com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>\n<div class=\"block\">Interface of a table operation visitor used to extend functionality.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/UpdateOperation.html#com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a>\n<div class=\"block\">Class representing an update operation against remote table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.push\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationError.html#com.microsoft.windowsazure.mobileservices.table.sync.push\">TableOperationError</a>\n<div class=\"block\">Class representing a table operation error against remote table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.queue\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperation.html#com.microsoft.windowsazure.mobileservices.table.sync.queue\">TableOperation</a>\n<div class=\"block\">Interface representing a table operation against remote table.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperationError.html#com.microsoft.windowsazure.mobileservices.table.sync.queue\">TableOperationError</a>\n<div class=\"block\">Class representing a table operation error against remote table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/RemoteTableOperationProcessor.html#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">RemoteTableOperationProcessor</a>\n<div class=\"block\">Processes a table operation against a remote store.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/class-use/TableOperation.html#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">TableOperation</a>\n<div class=\"block\">Interface representing a table operation against remote table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/operations/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.table.sync</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\" target=\"classFrame\">MobileServiceJsonSyncTable</a></li>\n<li><a href=\"MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\" target=\"classFrame\">MobileServiceSyncContext</a></li>\n<li><a href=\"MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\" target=\"classFrame\">MobileServiceSyncTable</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.sync\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table.sync</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Provides operations on local table.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Provides a way to synchronize local database with remote database.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a>&lt;E&gt;</td>\n<td class=\"colLast\">\n<div class=\"block\">Provides operations on local table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.sync Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.table.sync</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">MobileServiceJsonSyncTable</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">MobileServiceSyncContext</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">MobileServiceSyncTable</span></a>&lt;E&gt;</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/serialization/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.table.sync</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.sync\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.sync\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.table.sync</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a> used by <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/class-use/MobileServiceJsonSyncTable.html#com.microsoft.windowsazure.mobileservices\">MobileServiceJsonSyncTable</a>\n<div class=\"block\">Provides operations on local table.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/class-use/MobileServiceSyncContext.html#com.microsoft.windowsazure.mobileservices\">MobileServiceSyncContext</a>\n<div class=\"block\">Provides a way to synchronize local database with remote database.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/class-use/MobileServiceSyncTable.html#com.microsoft.windowsazure.mobileservices\">MobileServiceSyncTable</a>\n<div class=\"block\">Provides operations on local table.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>MobileServicePushCompletionResult</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServicePushCompletionResult\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServicePushCompletionResult.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePushCompletionResult.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.push</div>\n<h2 title=\"Class MobileServicePushCompletionResult\" class=\"title\">Class MobileServicePushCompletionResult</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServicePushCompletionResult</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Gives you errors and status of the push completion.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#MobileServicePushCompletionResult--\">MobileServicePushCompletionResult</a></span>()</code>\n<div class=\"block\">Constructor for MobileServicePushCompletionResult</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>java.lang.Throwable</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#getInternalError--\">getInternalError</a></span>()</code>\n<div class=\"block\">Gets the internal error</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#getOperationErrors--\">getOperationErrors</a></span>()</code>\n<div class=\"block\">Gets the list of table operation errors</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#getStatus--\">getStatus</a></span>()</code>\n<div class=\"block\">Gets the push status</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#setInternalError-java.lang.Throwable-\">setInternalError</a></span>(java.lang.Throwable&nbsp;internalError)</code>\n<div class=\"block\">Sets the internal error</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#setOperationErrors-java.util.List-\">setOperationErrors</a></span>(java.util.List&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&gt;&nbsp;operationErrors)</code>\n<div class=\"block\">Sets the list of table operation errors</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#setStatus-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushStatus-\">setStatus</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>&nbsp;status)</code>\n<div class=\"block\">Sets the push status</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServicePushCompletionResult--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServicePushCompletionResult</h4>\n<pre>public&nbsp;MobileServicePushCompletionResult()</pre>\n<div class=\"block\">Constructor for MobileServicePushCompletionResult</div>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getStatus--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getStatus</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>&nbsp;getStatus()</pre>\n<div class=\"block\">Gets the push status</div>\n</li>\n</ul>\n<a name=\"setStatus-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushStatus-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setStatus</h4>\n<pre>public&nbsp;void&nbsp;setStatus(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>&nbsp;status)</pre>\n<div class=\"block\">Sets the push status</div>\n</li>\n</ul>\n<a name=\"getOperationErrors--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getOperationErrors</h4>\n<pre>public&nbsp;java.util.List&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&gt;&nbsp;getOperationErrors()</pre>\n<div class=\"block\">Gets the list of table operation errors</div>\n</li>\n</ul>\n<a name=\"setOperationErrors-java.util.List-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>setOperationErrors</h4>\n<pre>public&nbsp;void&nbsp;setOperationErrors(java.util.List&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&gt;&nbsp;operationErrors)</pre>\n<div class=\"block\">Sets the list of table operation errors</div>\n</li>\n</ul>\n<a name=\"getInternalError--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getInternalError</h4>\n<pre>public&nbsp;java.lang.Throwable&nbsp;getInternalError()</pre>\n<div class=\"block\">Gets the internal error</div>\n</li>\n</ul>\n<a name=\"setInternalError-java.lang.Throwable-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>setInternalError</h4>\n<pre>public&nbsp;void&nbsp;setInternalError(java.lang.Throwable&nbsp;internalError)</pre>\n<div class=\"block\">Sets the internal error</div>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServicePushCompletionResult.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePushCompletionResult.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>MobileServicePushFailedException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServicePushFailedException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServicePushFailedException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePushFailedException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.push</div>\n<h2 title=\"Class MobileServicePushFailedException\" class=\"title\">Class MobileServicePushFailedException</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Throwable</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Exception</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServicePushFailedException</span>\nextends java.lang.Exception</pre>\n<div class=\"block\">Class that represents an exception during push sync</div>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../../../../serialized-form.html#com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException\">Serialized Form</a></dd>\n</dl>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html#MobileServicePushFailedException-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">MobileServicePushFailedException</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>&nbsp;pushCompletionResult)</code>\n<div class=\"block\">Constructor for MobileServicePushFailedException</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html#getPushCompletionResult--\">getPushCompletionResult</a></span>()</code>\n<div class=\"block\">Gets the push completion result</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Throwable\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Throwable</h3>\n<code>addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServicePushFailedException-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServicePushFailedException</h4>\n<pre>public&nbsp;MobileServicePushFailedException(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>&nbsp;pushCompletionResult)</pre>\n<div class=\"block\">Constructor for MobileServicePushFailedException</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>pushCompletionResult</code> - the push completion result</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"getPushCompletionResult--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>getPushCompletionResult</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>&nbsp;getPushCompletionResult()</pre>\n<div class=\"block\">Gets the push completion result</div>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServicePushFailedException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePushFailedException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>MobileServicePushStatus</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServicePushStatus\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":9,\"i2\":9,\"i3\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServicePushStatus.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePushStatus.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.push</div>\n<h2 title=\"Enum MobileServicePushStatus\" class=\"title\">Enum MobileServicePushStatus</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Enum&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>&gt;</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushStatus</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable, java.lang.Comparable&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public enum <span class=\"typeNameLabel\">MobileServicePushStatus</span>\nextends java.lang.Enum&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>&gt;</pre>\n<div class=\"block\">Enumeration for push sync status.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- =========== ENUM CONSTANT SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.summary\">\n<!--   -->\n</a>\n<h3>Enum Constant Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Constant Summary table, listing enum constants, and an explanation\">\n<caption><span>Enum Constants</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#CancelledByAuthenticationError\">CancelledByAuthenticationError</a></span></code>\n<div class=\"block\">Push was aborted due to authentication error.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#CancelledByLocalStoreError\">CancelledByLocalStoreError</a></span></code>\n<div class=\"block\">Push was aborted due to error from local store.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#CancelledByNetworkError\">CancelledByNetworkError</a></span></code>\n<div class=\"block\">Push was aborted due to network error.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#Complete\">Complete</a></span></code>\n<div class=\"block\">All table operations in the push action were completed, possibly with\n errors.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#InternalError\">InternalError</a></span></code>\n<div class=\"block\">Push failed due to an internal error.</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#getValue--\">getValue</a></span>()</code>\n<div class=\"block\">Return the int value associated to the enum</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#parse-int-\">parse</a></span>(int&nbsp;value)</code>\n<div class=\"block\">Return the MobileServicePushStatus with the provided int value</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>[]</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Enum\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Enum</h3>\n<code>compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>getClass, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ ENUM CONSTANT DETAIL =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"enum.constant.detail\">\n<!--   -->\n</a>\n<h3>Enum Constant Detail</h3>\n<a name=\"Complete\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>Complete</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a> Complete</pre>\n<div class=\"block\">All table operations in the push action were completed, possibly with\n errors.</div>\n</li>\n</ul>\n<a name=\"CancelledByNetworkError\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>CancelledByNetworkError</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a> CancelledByNetworkError</pre>\n<div class=\"block\">Push was aborted due to network error.</div>\n</li>\n</ul>\n<a name=\"CancelledByAuthenticationError\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>CancelledByAuthenticationError</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a> CancelledByAuthenticationError</pre>\n<div class=\"block\">Push was aborted due to authentication error.</div>\n</li>\n</ul>\n<a name=\"CancelledByLocalStoreError\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>CancelledByLocalStoreError</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a> CancelledByLocalStoreError</pre>\n<div class=\"block\">Push was aborted due to error from local store.</div>\n</li>\n</ul>\n<a name=\"InternalError\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>InternalError</h4>\n<pre>public static final&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a> InternalError</pre>\n<div class=\"block\">Push failed due to an internal error.</div>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"values--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>values</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>[]&nbsp;values()</pre>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.  This method may be used to iterate\nover the constants as follows:\n<pre>\nfor (MobileServicePushStatus c : MobileServicePushStatus.values())\n&nbsp;   System.out.println(c);\n</pre></div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>an array containing the constants of this enum type, in the order they are declared</dd>\n</dl>\n</li>\n</ul>\n<a name=\"valueOf-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>valueOf</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>&nbsp;valueOf(java.lang.String&nbsp;name)</pre>\n<div class=\"block\">Returns the enum constant of this type with the specified name.\nThe string must match <i>exactly</i> an identifier used to declare an\nenum constant in this type.  (Extraneous whitespace characters are \nnot permitted.)</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>name</code> - the name of the enum constant to be returned.</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the enum constant with the specified name</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.IllegalArgumentException</code> - if this enum type has no constant with the specified name</dd>\n<dd><code>java.lang.NullPointerException</code> - if the argument is null</dd>\n</dl>\n</li>\n</ul>\n<a name=\"getValue--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getValue</h4>\n<pre>public&nbsp;int&nbsp;getValue()</pre>\n<div class=\"block\">Return the int value associated to the enum</div>\n</li>\n</ul>\n<a name=\"parse-int-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>parse</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>&nbsp;parse(int&nbsp;value)</pre>\n<div class=\"block\">Return the MobileServicePushStatus with the provided int value</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>value</code> - the int value</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the matching MobileServicePushStatus</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServicePushStatus.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePushStatus.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li><a href=\"#enum.constant.summary\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li><a href=\"#enum.constant.detail\">Enum Constants</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/push/class-use/MobileServicePushCompletionResult.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/class-use/MobileServicePushCompletionResult.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePushCompletionResult.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.push\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.push\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePushFailedException.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html#getPushCompletionResult--\">getPushCompletionResult</a></span>()</code>\n<div class=\"block\">Gets the push completion result</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing constructors, and an explanation\">\n<caption><span>Constructors in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html#MobileServicePushFailedException-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">MobileServicePushFailedException</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>&nbsp;pushCompletionResult)</code>\n<div class=\"block\">Constructor for MobileServicePushFailedException</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SimpleSyncHandler.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html#onPushComplete-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">onPushComplete</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>&nbsp;pushCompletionResult)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncHandler.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#onPushComplete-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">onPushComplete</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>&nbsp;pushCompletionResult)</code>\n<div class=\"block\">Handles push sync completion</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/class-use/MobileServicePushCompletionResult.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePushCompletionResult.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/push/class-use/MobileServicePushFailedException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/class-use/MobileServicePushFailedException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePushFailedException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/class-use/MobileServicePushFailedException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePushFailedException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/push/class-use/MobileServicePushStatus.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushStatus</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushStatus\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/class-use/MobileServicePushStatus.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePushStatus.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushStatus\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushStatus</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.push\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.push\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePushCompletionResult.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#getStatus--\">getStatus</a></span>()</code>\n<div class=\"block\">Gets the push status</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePushStatus.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#parse-int-\">parse</a></span>(int&nbsp;value)</code>\n<div class=\"block\">Return the MobileServicePushStatus with the provided int value</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePushStatus.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#valueOf-java.lang.String-\">valueOf</a></span>(java.lang.String&nbsp;name)</code>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>[]</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePushStatus.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#values--\">values</a></span>()</code>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServicePushCompletionResult.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#setStatus-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushStatus-\">setStatus</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>&nbsp;status)</code>\n<div class=\"block\">Sets the push status</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/class-use/MobileServicePushStatus.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServicePushStatus.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/push/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.push</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\" target=\"classFrame\">MobileServicePushCompletionResult</a></li>\n</ul>\n<h2 title=\"Enums\">Enums</h2>\n<ul title=\"Enums\">\n<li><a href=\"MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\" target=\"classFrame\">MobileServicePushStatus</a></li>\n</ul>\n<h2 title=\"Exceptions\">Exceptions</h2>\n<ul title=\"Exceptions\">\n<li><a href=\"MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\" target=\"classFrame\">MobileServicePushFailedException</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.push</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.sync.push\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table.sync.push</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Gives you errors and status of the push completion.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Enum Summary table, listing enums, and an explanation\">\n<caption><span>Enum Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Enum</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Enumeration for push sync status.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Exception Summary table, listing exceptions, and an explanation\">\n<caption><span>Exception Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Exception</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushFailedException</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Class that represents an exception during push sync</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/push/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.push Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.sync.push Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.table.sync.push</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">MobileServicePushCompletionResult</span></a></li>\n<li type=\"circle\">java.lang.Throwable (implements java.io.Serializable)\n<ul>\n<li type=\"circle\">java.lang.Exception\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">MobileServicePushFailedException</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">MobileServicePushStatus</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/push/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.push</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.push\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.push\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.table.sync.push</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.push\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.push\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/class-use/MobileServicePushCompletionResult.html#com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>\n<div class=\"block\">Gives you errors and status of the push completion.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/class-use/MobileServicePushStatus.html#com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a>\n<div class=\"block\">Enumeration for push sync status.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/class-use/MobileServicePushCompletionResult.html#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServicePushCompletionResult</a>\n<div class=\"block\">Gives you errors and status of the push completion.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/push/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>OperationErrorList</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"OperationErrorList\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":9,\"i5\":9};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/OperationErrorList.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"OperationErrorList.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.queue</div>\n<h2 title=\"Class OperationErrorList\" class=\"title\">Class OperationErrorList</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationErrorList</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">OperationErrorList</span>\nextends java.lang.Object</pre>\n<div class=\"block\">List of all table operation errors</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#add-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError-\">add</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&nbsp;operationError)</code>\n<div class=\"block\">Adds a new table operation error</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#clear--\">clear</a></span>()</code>\n<div class=\"block\">Empties the list of pending table operation errors</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#countPending--\">countPending</a></span>()</code>\n<div class=\"block\">Returns the count of pending table operation errors</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>java.util.List&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#getAll--\">getAll</a></span>()</code>\n<div class=\"block\">Returns the list of all pending table operation errors</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>static void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#initializeStore-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">initializeStore</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Initializes requirements on the local store</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#load-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">load</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Loads the list of table operation errors from the local store</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"add-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>add</h4>\n<pre>public&nbsp;void&nbsp;add(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&nbsp;operationError)\n         throws java.text.ParseException,\n                <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Adds a new table operation error</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>operationError</code> - the table operation error</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.text.ParseException</code></dd>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"countPending--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>countPending</h4>\n<pre>public&nbsp;int&nbsp;countPending()</pre>\n<div class=\"block\">Returns the count of pending table operation errors</div>\n</li>\n</ul>\n<a name=\"getAll--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>getAll</h4>\n<pre>public&nbsp;java.util.List&lt;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a>&gt;&nbsp;getAll()</pre>\n<div class=\"block\">Returns the list of all pending table operation errors</div>\n</li>\n</ul>\n<a name=\"clear--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>clear</h4>\n<pre>public&nbsp;void&nbsp;clear()\n           throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Empties the list of pending table operation errors</div>\n<dl>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"initializeStore-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>initializeStore</h4>\n<pre>public static&nbsp;void&nbsp;initializeStore(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)\n                            throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Initializes requirements on the local store</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>store</code> - the local store</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"load-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>load</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a>&nbsp;load(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)\n                               throws java.text.ParseException,\n                                      <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Loads the list of table operation errors from the local store</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>store</code> - the local store</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the list of table operation errors</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.text.ParseException</code></dd>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/OperationErrorList.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"OperationErrorList.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>OperationQueue.Bookmark</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"OperationQueue.Bookmark\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/OperationQueue.Bookmark.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"OperationQueue.Bookmark.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.queue</div>\n<h2 title=\"Class OperationQueue.Bookmark\" class=\"title\">Class OperationQueue.Bookmark</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue.Bookmark</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>Enclosing class:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public static class <span class=\"typeNameLabel\">OperationQueue.Bookmark</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Class that represents a push sync bookmark, and table operations within\n it</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html#dequeue--\">dequeue</a></span>()</code>\n<div class=\"block\">Dequeue the next bookmarked table operation</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>boolean</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html#isCancelled--\">isCancelled</a></span>()</code>\n<div class=\"block\">Returns true if the bookmark is canceled</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>boolean</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html#isCurrentBookmark--\">isCurrentBookmark</a></span>()</code>\n<div class=\"block\">Returns true if the bookmark is the first and current in the queue</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html#peek--\">peek</a></span>()</code>\n<div class=\"block\">Peek the next bookmarked table operation</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"dequeue--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>dequeue</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;dequeue()\n                       throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Dequeue the next bookmarked table operation</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the table operation</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"peek--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>peek</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;peek()</pre>\n<div class=\"block\">Peek the next bookmarked table operation</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the table operation</dd>\n</dl>\n</li>\n</ul>\n<a name=\"isCurrentBookmark--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>isCurrentBookmark</h4>\n<pre>public&nbsp;boolean&nbsp;isCurrentBookmark()</pre>\n<div class=\"block\">Returns true if the bookmark is the first and current in the queue</div>\n</li>\n</ul>\n<a name=\"isCancelled--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>isCancelled</h4>\n<pre>public&nbsp;boolean&nbsp;isCancelled()</pre>\n<div class=\"block\">Returns true if the bookmark is canceled</div>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/OperationQueue.Bookmark.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"OperationQueue.Bookmark.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>OperationQueue</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"OperationQueue\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10,\"i4\":10,\"i5\":9,\"i6\":9,\"i7\":10,\"i8\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],1:[\"t1\",\"Static Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/OperationQueue.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"OperationQueue.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li><a href=\"#nested.class.summary\">Nested</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.queue</div>\n<h2 title=\"Class OperationQueue\" class=\"title\">Class OperationQueue</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">OperationQueue</span>\nextends java.lang.Object</pre>\n<div class=\"block\">Queue of all table operations i.e. Push, Pull, Insert, Update, Delete</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== NESTED CLASS SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"nested.class.summary\">\n<!--   -->\n</a>\n<h3>Nested Class Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Nested Class Summary table, listing nested classes, and an explanation\">\n<caption><span>Nested Classes</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a></span></code>\n<div class=\"block\">Class that represents a push sync bookmark, and table operations within\n it</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">Static Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#bookmark--\">bookmark</a></span>()</code>\n<div class=\"block\">Adds a new push sync bookmark</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#countPending--\">countPending</a></span>()</code>\n<div class=\"block\">Returns the count of pending table operation</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>int</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#countPending-java.lang.String-\">countPending</a></span>(java.lang.String&nbsp;tableName)</code>\n<div class=\"block\">Returns the count of pending table operation for a specific table</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#dequeue--\">dequeue</a></span>()</code>\n<div class=\"block\">Dequeue the next table operation</div>\n</td>\n</tr>\n<tr id=\"i4\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#enqueue-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">enqueue</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Enqueue a new table operation</div>\n</td>\n</tr>\n<tr id=\"i5\" class=\"rowColor\">\n<td class=\"colFirst\"><code>static void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#initializeStore-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">initializeStore</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Initializes requirements on the local store</div>\n</td>\n</tr>\n<tr id=\"i6\" class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#load-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">load</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Loads the queue of table operations from the local store</div>\n</td>\n</tr>\n<tr id=\"i7\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#peek--\">peek</a></span>()</code>\n<div class=\"block\">Peek the next table operation</div>\n</td>\n</tr>\n<tr id=\"i8\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#unbookmark-com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue.Bookmark-\">unbookmark</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a>&nbsp;bookmark)</code>\n<div class=\"block\">Remove a push sync bookmark</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"enqueue-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>enqueue</h4>\n<pre>public&nbsp;void&nbsp;enqueue(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)\n             throws java.lang.Throwable</pre>\n<div class=\"block\">Enqueue a new table operation</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>operation</code> - the table operation</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.lang.Throwable</code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"dequeue--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>dequeue</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;dequeue()\n                       throws java.text.ParseException,\n                              <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Dequeue the next table operation</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the table operation</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.text.ParseException</code></dd>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"peek--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>peek</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;peek()</pre>\n<div class=\"block\">Peek the next table operation</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the table operation</dd>\n</dl>\n</li>\n</ul>\n<a name=\"countPending--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>countPending</h4>\n<pre>public&nbsp;int&nbsp;countPending()</pre>\n<div class=\"block\">Returns the count of pending table operation</div>\n</li>\n</ul>\n<a name=\"countPending-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>countPending</h4>\n<pre>public&nbsp;int&nbsp;countPending(java.lang.String&nbsp;tableName)</pre>\n<div class=\"block\">Returns the count of pending table operation for a specific table</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>tableName</code> - the table name</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the count of operations</dd>\n</dl>\n</li>\n</ul>\n<a name=\"bookmark--\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>bookmark</h4>\n<pre>public&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a>&nbsp;bookmark()</pre>\n<div class=\"block\">Adds a new push sync bookmark</div>\n<dl>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the bookmark</dd>\n</dl>\n</li>\n</ul>\n<a name=\"unbookmark-com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue.Bookmark-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>unbookmark</h4>\n<pre>public&nbsp;void&nbsp;unbookmark(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a>&nbsp;bookmark)</pre>\n<div class=\"block\">Remove a push sync bookmark</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>bookmark</code> - the push sync bookmark</dd>\n</dl>\n</li>\n</ul>\n<a name=\"initializeStore-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>initializeStore</h4>\n<pre>public static&nbsp;void&nbsp;initializeStore(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)\n                            throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Initializes requirements on the local store</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>store</code> - the local store</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"load-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>load</h4>\n<pre>public static&nbsp;<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a>&nbsp;load(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)\n                           throws java.text.ParseException,\n                                  <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></pre>\n<div class=\"block\">Loads the queue of table operations from the local store</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>store</code> - the local store</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the queue of table operations</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code>java.text.ParseException</code></dd>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/OperationQueue.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"OperationQueue.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li><a href=\"#nested.class.summary\">Nested</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/queue/class-use/OperationErrorList.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationErrorList</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationErrorList\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/class-use/OperationErrorList.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"OperationErrorList.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationErrorList\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationErrorList</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.queue\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.queue\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationErrorList.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#load-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">load</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Loads the list of table operation errors from the local store</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/class-use/OperationErrorList.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"OperationErrorList.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/queue/class-use/OperationQueue.Bookmark.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue.Bookmark</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue.Bookmark\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/class-use/OperationQueue.Bookmark.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"OperationQueue.Bookmark.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue.Bookmark\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue.Bookmark</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.queue\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.queue\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#bookmark--\">bookmark</a></span>()</code>\n<div class=\"block\">Adds a new push sync bookmark</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#unbookmark-com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue.Bookmark-\">unbookmark</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a>&nbsp;bookmark)</code>\n<div class=\"block\">Remove a push sync bookmark</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/class-use/OperationQueue.Bookmark.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"OperationQueue.Bookmark.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/queue/class-use/OperationQueue.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/class-use/OperationQueue.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"OperationQueue.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.queue\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.queue\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">OperationQueue.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#load-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">load</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store)</code>\n<div class=\"block\">Loads the queue of table operations from the local store</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/class-use/OperationQueue.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"OperationQueue.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/queue/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.queue</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\" target=\"classFrame\">OperationErrorList</a></li>\n<li><a href=\"OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\" target=\"classFrame\">OperationQueue</a></li>\n<li><a href=\"OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\" target=\"classFrame\">OperationQueue.Bookmark</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.queue</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.sync.queue\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table.sync.queue</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></td>\n<td class=\"colLast\">\n<div class=\"block\">List of all table operation errors</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Queue of all table operations i.e.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Class that represents a push sync bookmark, and table operations within\n it</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/queue/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.queue Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.sync.queue Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.table.sync.queue</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">OperationErrorList</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">OperationQueue</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">OperationQueue.Bookmark</span></a></li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/queue/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.queue</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.queue\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.queue\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.table.sync.queue</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.queue\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.queue\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/class-use/OperationErrorList.html#com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a>\n<div class=\"block\">List of all table operation errors</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/class-use/OperationQueue.html#com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a>\n<div class=\"block\">Queue of all table operations i.e.</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/class-use/OperationQueue.Bookmark.html#com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a>\n<div class=\"block\">Class that represents a push sync bookmark, and table operations within\n it</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/queue/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceSyncHandler</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceSyncHandler\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":6,\"i1\":6};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],4:[\"t3\",\"Abstract Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceSyncHandler.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncHandler.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</div>\n<h2 title=\"Interface MobileServiceSyncHandler\" class=\"title\">Interface MobileServiceSyncHandler</h2>\n</div>\n<div class=\"contentContainer\">\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Known Implementing Classes:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">SimpleSyncHandler</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public interface <span class=\"typeNameLabel\">MobileServiceSyncHandler</span></pre>\n<div class=\"block\">Handles table operation errors and push completion results.</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t3\" class=\"tableTab\"><span><a href=\"javascript:show(4);\">Abstract Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">executeTableOperation</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a>&nbsp;processor,\n                     <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Executes a table operation against a remote store</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#onPushComplete-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">onPushComplete</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>&nbsp;pushCompletionResult)</code>\n<div class=\"block\">Handles push sync completion</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>executeTableOperation</h4>\n<pre>com.google.gson.JsonObject&nbsp;executeTableOperation(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a>&nbsp;processor,\n                                                 <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)\n                                          throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></pre>\n<div class=\"block\">Executes a table operation against a remote store</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>processor</code> - the remote table processor</dd>\n<dd><code>operation</code> - the table operation</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the operation result</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"onPushComplete-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onPushComplete</h4>\n<pre>void&nbsp;onPushComplete(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>&nbsp;pushCompletionResult)\n             throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></pre>\n<div class=\"block\">Handles push sync completion</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>pushCompletionResult</code> - the push sync result</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceSyncHandler.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncHandler.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li>Constr&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MobileServiceSyncHandlerException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MobileServiceSyncHandlerException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceSyncHandlerException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncHandlerException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Throwable\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</div>\n<h2 title=\"Class MobileServiceSyncHandlerException\" class=\"title\">Class MobileServiceSyncHandlerException</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Throwable</li>\n<li>\n<ul class=\"inheritance\">\n<li>java.lang.Exception</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandlerException</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd>java.io.Serializable</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MobileServiceSyncHandlerException</span>\nextends java.lang.Exception</pre>\n<div class=\"block\">Class that represents an exception during sync handling</div>\n<dl>\n<dt><span class=\"seeLabel\">See Also:</span></dt>\n<dd><a href=\"../../../../../../../serialized-form.html#com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandlerException\">Serialized Form</a></dd>\n</dl>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html#MobileServiceSyncHandlerException-java.lang.String-\">MobileServiceSyncHandlerException</a></span>(java.lang.String&nbsp;detailMessage)</code>\n<div class=\"block\">Creates a new MobileServiceSyncHandlerException with a detail message</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html#MobileServiceSyncHandlerException-java.lang.String-java.lang.Throwable-\">MobileServiceSyncHandlerException</a></span>(java.lang.String&nbsp;detailMessage,\n                                 java.lang.Throwable&nbsp;throwable)</code>\n<div class=\"block\">Creates a new MobileServiceSyncHandlerException with a detail message and\n a cause</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html#MobileServiceSyncHandlerException-java.lang.Throwable-\">MobileServiceSyncHandlerException</a></span>(java.lang.Throwable&nbsp;throwable)</code>\n<div class=\"block\">Creates a new MobileServiceSyncHandlerException with a cause</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Throwable\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Throwable</h3>\n<code>addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</code></li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MobileServiceSyncHandlerException-java.lang.String-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>MobileServiceSyncHandlerException</h4>\n<pre>public&nbsp;MobileServiceSyncHandlerException(java.lang.String&nbsp;detailMessage)</pre>\n<div class=\"block\">Creates a new MobileServiceSyncHandlerException with a detail message</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>detail</code> - The detail message</dd>\n</dl>\n</li>\n</ul>\n<a name=\"MobileServiceSyncHandlerException-java.lang.Throwable-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>MobileServiceSyncHandlerException</h4>\n<pre>public&nbsp;MobileServiceSyncHandlerException(java.lang.Throwable&nbsp;throwable)</pre>\n<div class=\"block\">Creates a new MobileServiceSyncHandlerException with a cause</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>throwable</code> - The exception cause</dd>\n</dl>\n</li>\n</ul>\n<a name=\"MobileServiceSyncHandlerException-java.lang.String-java.lang.Throwable-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MobileServiceSyncHandlerException</h4>\n<pre>public&nbsp;MobileServiceSyncHandlerException(java.lang.String&nbsp;detailMessage,\n                                         java.lang.Throwable&nbsp;throwable)</pre>\n<div class=\"block\">Creates a new MobileServiceSyncHandlerException with a detail message and\n a cause</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>detail</code> - The detail message</dd>\n<dd><code>throwable</code> - The exception cause</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MobileServiceSyncHandlerException.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncHandlerException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Throwable\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>SimpleSyncHandler</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"SimpleSyncHandler\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/SimpleSyncHandler.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"SimpleSyncHandler.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</div>\n<h2 title=\"Class SimpleSyncHandler\" class=\"title\">Class SimpleSyncHandler</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.table.sync.synchandler.SimpleSyncHandler</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt>All Implemented Interfaces:</dt>\n<dd><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">SimpleSyncHandler</span>\nextends java.lang.Object\nimplements <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></pre>\n<div class=\"block\">Basic implementation of MobileServiceSyncHandler</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html#SimpleSyncHandler--\">SimpleSyncHandler</a></span>()</code>&nbsp;</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html#executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">executeTableOperation</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a>&nbsp;processor,\n                     <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Executes a table operation against a remote store</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html#onPushComplete-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">onPushComplete</a></span>(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>&nbsp;pushCompletionResult)</code>\n<div class=\"block\">Handles push sync completion</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"SimpleSyncHandler--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>SimpleSyncHandler</h4>\n<pre>public&nbsp;SimpleSyncHandler()</pre>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>executeTableOperation</h4>\n<pre>public&nbsp;com.google.gson.JsonObject&nbsp;executeTableOperation(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a>&nbsp;processor,\n                                                        <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)\n                                                 throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">MobileServiceSyncHandler</a></code></span></div>\n<div class=\"block\">Executes a table operation against a remote store</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">executeTableOperation</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>processor</code> - the remote table processor</dd>\n<dd><code>operation</code> - the table operation</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the operation result</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></code></dd>\n</dl>\n</li>\n</ul>\n<a name=\"onPushComplete-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>onPushComplete</h4>\n<pre>public&nbsp;void&nbsp;onPushComplete(<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>&nbsp;pushCompletionResult)\n                    throws <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></pre>\n<div class=\"block\"><span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#onPushComplete-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">MobileServiceSyncHandler</a></code></span></div>\n<div class=\"block\">Handles push sync completion</div>\n<dl>\n<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#onPushComplete-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">onPushComplete</a></code>&nbsp;in interface&nbsp;<code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></code></dd>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>pushCompletionResult</code> - the push sync result</dd>\n<dt><span class=\"throwsLabel\">Throws:</span></dt>\n<dd><code><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></code></dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/SimpleSyncHandler.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"SimpleSyncHandler.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/class-use/MobileServiceSyncHandler.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Interface com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandler</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandler\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/class-use/MobileServiceSyncHandler.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncHandler.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Interface com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandler\" class=\"title\">Uses of Interface<br>com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandler</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync\">com.microsoft.windowsazure.mobileservices.table.sync</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a> that return <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncContext.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#getHandler--\">getHandler</a></span>()</code>\n<div class=\"block\">Returns an instance of MobileServiceSyncHandler.</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a> with parameters of type <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.common.util.concurrent.ListenableFuture&lt;java.lang.Void&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncContext.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#initialize-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandler-\">initialize</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>&nbsp;store,\n          <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a>&nbsp;handler)</code>\n<div class=\"block\">Initializes the sync context.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a> that implement <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">SimpleSyncHandler</a></span></code>\n<div class=\"block\">Basic implementation of MobileServiceSyncHandler</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/class-use/MobileServiceSyncHandler.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncHandler.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/class-use/MobileServiceSyncHandlerException.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandlerException</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandlerException\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/class-use/MobileServiceSyncHandlerException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncHandlerException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandlerException\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandlerException</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a> in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a> that throw <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SimpleSyncHandler.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html#executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">executeTableOperation</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a>&nbsp;processor,\n                     <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>com.google.gson.JsonObject</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncHandler.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">executeTableOperation</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a>&nbsp;processor,\n                     <a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>&nbsp;operation)</code>\n<div class=\"block\">Executes a table operation against a remote store</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">SimpleSyncHandler.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html#onPushComplete-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">onPushComplete</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>&nbsp;pushCompletionResult)</code>&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MobileServiceSyncHandler.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#onPushComplete-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">onPushComplete</a></span>(<a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a>&nbsp;pushCompletionResult)</code>\n<div class=\"block\">Handles push sync completion</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/class-use/MobileServiceSyncHandlerException.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MobileServiceSyncHandlerException.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/class-use/SimpleSyncHandler.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.synchandler.SimpleSyncHandler</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.synchandler.SimpleSyncHandler\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/class-use/SimpleSyncHandler.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"SimpleSyncHandler.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.table.sync.synchandler.SimpleSyncHandler\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.table.sync.synchandler.SimpleSyncHandler</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.table.sync.synchandler.SimpleSyncHandler</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/class-use/SimpleSyncHandler.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"SimpleSyncHandler.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.synchandler</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Interfaces\">Interfaces</h2>\n<ul title=\"Interfaces\">\n<li><a href=\"MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\" target=\"classFrame\"><span class=\"interfaceName\">MobileServiceSyncHandler</span></a></li>\n</ul>\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\" target=\"classFrame\">SimpleSyncHandler</a></li>\n</ul>\n<h2 title=\"Exceptions\">Exceptions</h2>\n<ul title=\"Exceptions\">\n<li><a href=\"MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\" target=\"classFrame\">MobileServiceSyncHandlerException</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.synchandler</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.sync.synchandler\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table.sync.synchandler</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Interface Summary table, listing interfaces, and an explanation\">\n<caption><span>Interface Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Interface</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Handles table operation errors and push completion results.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">SimpleSyncHandler</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Basic implementation of MobileServiceSyncHandler</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Exception Summary table, listing exceptions, and an explanation\">\n<caption><span>Exception Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Exception</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></td>\n<td class=\"colLast\">\n<div class=\"block\">Class that represents an exception during sync handling</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">Prev&nbsp;Package</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">Next&nbsp;Package</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.table.sync.synchandler Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.table.sync.synchandler Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/threading/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.table.sync.synchandler</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">SimpleSyncHandler</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a>)</li>\n<li type=\"circle\">java.lang.Throwable (implements java.io.Serializable)\n<ul>\n<li type=\"circle\">java.lang.Exception\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">MobileServiceSyncHandlerException</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h2 title=\"Interface Hierarchy\">Interface Hierarchy</h2>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">MobileServiceSyncHandler</span></a></li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-tree.html\">Prev</a></li>\n<li><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/threading/package-tree.html\">Next</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.synchandler</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.synchandler\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.table.sync.synchandler\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.table.sync.synchandler</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync\">com.microsoft.windowsazure.mobileservices.table.sync</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/class-use/MobileServiceSyncHandler.html#com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncHandler</a>\n<div class=\"block\">Handles table operation errors and push completion results.</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a> used by <a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/class-use/MobileServiceSyncHandler.html#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a>\n<div class=\"block\">Handles table operation errors and push completion results.</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/class-use/MobileServiceSyncHandlerException.html#com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a>\n<div class=\"block\">Class that represents an exception during sync handling</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../../index.html?com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MultiLockDictionary.MultiLock</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MultiLockDictionary.MultiLock\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MultiLockDictionary.MultiLock.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiLockDictionary.MultiLock.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Object\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.threading</div>\n<h2 title=\"Class MultiLockDictionary.MultiLock\" class=\"title\">Class MultiLockDictionary.MultiLock&lt;T&gt;</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary.MultiLock&lt;T&gt;</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt><span class=\"paramLabel\">Type Parameters:</span></dt>\n<dd><code>T</code> - type of the corresponding key</dd>\n</dl>\n<dl>\n<dt>Enclosing class:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"type parameter in MultiLockDictionary\">T</a>&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public static class <span class=\"typeNameLabel\">MultiLockDictionary.MultiLock&lt;T&gt;</span>\nextends java.lang.Object</pre>\n<div class=\"block\">A lock that implements reference count</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html#MultiLock--\">MultiLock</a></span>()</code>\n<div class=\"block\">Constructor for MultiLock</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MultiLock--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MultiLock</h4>\n<pre>public&nbsp;MultiLock()</pre>\n<div class=\"block\">Constructor for MultiLock</div>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MultiLockDictionary.MultiLock.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiLockDictionary.MultiLock.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Object\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MultiLockDictionary</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MultiLockDictionary\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MultiLockDictionary.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiLockDictionary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li><a href=\"#nested.class.summary\">Nested</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.threading</div>\n<h2 title=\"Class MultiLockDictionary\" class=\"title\">Class MultiLockDictionary&lt;T&gt;</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary&lt;T&gt;</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt><span class=\"paramLabel\">Type Parameters:</span></dt>\n<dd><code>T</code> - type of the key and param to the MultiLock<T> lock</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MultiLockDictionary&lt;T&gt;</span>\nextends java.lang.Object</pre>\n<div class=\"block\">A key-lock dictionary that discards no longer referenced locks</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== NESTED CLASS SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"nested.class.summary\">\n<!--   -->\n</a>\n<h3>Nested Class Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Nested Class Summary table, listing nested classes, and an explanation\">\n<caption><span>Nested Classes</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"type parameter in MultiLockDictionary.MultiLock\">T</a>&gt;</span></code>\n<div class=\"block\">A lock that implements reference count</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html#MultiLockDictionary--\">MultiLockDictionary</a></span>()</code>\n<div class=\"block\">Constructor for MultiLockDictionary</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"type parameter in MultiLockDictionary\">T</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html#lock-T-\">lock</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"type parameter in MultiLockDictionary\">T</a>&nbsp;key)</code>\n<div class=\"block\">Aquire a lock for the requested key</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html#unLock-com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary.MultiLock-\">unLock</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"type parameter in MultiLockDictionary\">T</a>&gt;&nbsp;multiLock)</code>\n<div class=\"block\">Release the provided lock</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MultiLockDictionary--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MultiLockDictionary</h4>\n<pre>public&nbsp;MultiLockDictionary()</pre>\n<div class=\"block\">Constructor for MultiLockDictionary</div>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"lock-java.lang.Object-\">\n<!--   -->\n</a><a name=\"lock-T-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lock</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"type parameter in MultiLockDictionary\">T</a>&gt;&nbsp;lock(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"type parameter in MultiLockDictionary\">T</a>&nbsp;key)</pre>\n<div class=\"block\">Aquire a lock for the requested key</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>key</code> - the key</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the lock</dd>\n</dl>\n</li>\n</ul>\n<a name=\"unLock-com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary.MultiLock-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>unLock</h4>\n<pre>public&nbsp;void&nbsp;unLock(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"type parameter in MultiLockDictionary\">T</a>&gt;&nbsp;multiLock)</pre>\n<div class=\"block\">Release the provided lock</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>multiLock</code> - the lock</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MultiLockDictionary.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev&nbsp;Class</li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiLockDictionary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li><a href=\"#nested.class.summary\">Nested</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MultiReadWriteLockDictionary.MultiReadWriteLock</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MultiReadWriteLockDictionary.MultiReadWriteLock\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MultiReadWriteLockDictionary.MultiReadWriteLock.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiReadWriteLockDictionary.MultiReadWriteLock.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Object\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.threading</div>\n<h2 title=\"Class MultiReadWriteLockDictionary.MultiReadWriteLock\" class=\"title\">Class MultiReadWriteLockDictionary.MultiReadWriteLock&lt;T&gt;</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock&lt;T&gt;</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt><span class=\"paramLabel\">Type Parameters:</span></dt>\n<dd><code>T</code> - type of the corresponding key</dd>\n</dl>\n<dl>\n<dt>Enclosing class:</dt>\n<dd><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;</dd>\n</dl>\n<hr>\n<br>\n<pre>public static class <span class=\"typeNameLabel\">MultiReadWriteLockDictionary.MultiReadWriteLock&lt;T&gt;</span>\nextends java.lang.Object</pre>\n<div class=\"block\">A readWriteLock that implements reference count</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html#MultiReadWriteLock--\">MultiReadWriteLock</a></span>()</code>\n<div class=\"block\">Constructor for MultiReadWriteLock</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MultiReadWriteLock--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MultiReadWriteLock</h4>\n<pre>public&nbsp;MultiReadWriteLock()</pre>\n<div class=\"block\">Constructor for MultiReadWriteLock</div>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MultiReadWriteLockDictionary.MultiReadWriteLock.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li>Next&nbsp;Class</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiReadWriteLockDictionary.MultiReadWriteLock.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li>Nested&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#methods.inherited.from.class.java.lang.Object\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li>Method</li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:04 PDT 2014 -->\n<title>MultiReadWriteLockDictionary</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"MultiReadWriteLockDictionary\";\n        }\n    }\n    catch(err) {\n    }\n//-->\nvar methods = {\"i0\":10,\"i1\":10,\"i2\":10,\"i3\":10};\nvar tabs = {65535:[\"t0\",\"All Methods\"],2:[\"t2\",\"Instance Methods\"],8:[\"t4\",\"Concrete Methods\"]};\nvar altColor = \"altColor\";\nvar rowColor = \"rowColor\";\nvar tableTab = \"tableTab\";\nvar activeTableTab = \"activeTableTab\";\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MultiReadWriteLockDictionary.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiReadWriteLockDictionary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li><a href=\"#nested.class.summary\">Nested</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<!-- ======== START OF CLASS DATA ======== -->\n<div class=\"header\">\n<div class=\"subTitle\">com.microsoft.windowsazure.mobileservices.threading</div>\n<h2 title=\"Class MultiReadWriteLockDictionary\" class=\"title\">Class MultiReadWriteLockDictionary&lt;T&gt;</h2>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"inheritance\">\n<li>java.lang.Object</li>\n<li>\n<ul class=\"inheritance\">\n<li>com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary&lt;T&gt;</li>\n</ul>\n</li>\n</ul>\n<div class=\"description\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<dl>\n<dt><span class=\"paramLabel\">Type Parameters:</span></dt>\n<dd><code>T</code> - type of the key and param to the MultiReadWriteLock<T> lock</dd>\n</dl>\n<hr>\n<br>\n<pre>public class <span class=\"typeNameLabel\">MultiReadWriteLockDictionary&lt;T&gt;</span>\nextends java.lang.Object</pre>\n<div class=\"block\">A key-readWriteLock dictionary that discards no longer referenced locks</div>\n</li>\n</ul>\n</div>\n<div class=\"summary\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ======== NESTED CLASS SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"nested.class.summary\">\n<!--   -->\n</a>\n<h3>Nested Class Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Nested Class Summary table, listing nested classes, and an explanation\">\n<caption><span>Nested Classes</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Class and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>static class&nbsp;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"type parameter in MultiReadWriteLockDictionary.MultiReadWriteLock\">T</a>&gt;</span></code>\n<div class=\"block\">A readWriteLock that implements reference count</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ======== CONSTRUCTOR SUMMARY ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.summary\">\n<!--   -->\n</a>\n<h3>Constructor Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constructor Summary table, listing constructors, and an explanation\">\n<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Constructor and Description</th>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#MultiReadWriteLockDictionary--\">MultiReadWriteLockDictionary</a></span>()</code>\n<div class=\"block\">Constructor for MultiReadWriteLockDictionary</div>\n</td>\n</tr>\n</table>\n</li>\n</ul>\n<!-- ========== METHOD SUMMARY =========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.summary\">\n<!--   -->\n</a>\n<h3>Method Summary</h3>\n<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Method Summary table, listing methods, and an explanation\">\n<caption><span id=\"t0\" class=\"activeTableTab\"><span>All Methods</span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">Instance Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span><span id=\"t4\" class=\"tableTab\"><span><a href=\"javascript:show(8);\">Concrete Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tr id=\"i0\" class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#lockRead-T-\">lockRead</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&nbsp;key)</code>\n<div class=\"block\">Aquire a read lock for the requested key</div>\n</td>\n</tr>\n<tr id=\"i1\" class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#lockWrite-T-\">lockWrite</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&nbsp;key)</code>\n<div class=\"block\">Aquire a write lock for the requested key</div>\n</td>\n</tr>\n<tr id=\"i2\" class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#unLockRead-com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock-\">unLockRead</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;&nbsp;multiRWLock)</code>\n<div class=\"block\">Release the provided read lock</div>\n</td>\n</tr>\n<tr id=\"i3\" class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#unLockWrite-com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock-\">unLockWrite</a></span>(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;&nbsp;multiRWLock)</code>\n<div class=\"block\">Release the provided write lock</div>\n</td>\n</tr>\n</table>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"methods.inherited.from.class.java.lang.Object\">\n<!--   -->\n</a>\n<h3>Methods inherited from class&nbsp;java.lang.Object</h3>\n<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"details\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<!-- ========= CONSTRUCTOR DETAIL ======== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"constructor.detail\">\n<!--   -->\n</a>\n<h3>Constructor Detail</h3>\n<a name=\"MultiReadWriteLockDictionary--\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>MultiReadWriteLockDictionary</h4>\n<pre>public&nbsp;MultiReadWriteLockDictionary()</pre>\n<div class=\"block\">Constructor for MultiReadWriteLockDictionary</div>\n</li>\n</ul>\n</li>\n</ul>\n<!-- ============ METHOD DETAIL ========== -->\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"method.detail\">\n<!--   -->\n</a>\n<h3>Method Detail</h3>\n<a name=\"lockRead-java.lang.Object-\">\n<!--   -->\n</a><a name=\"lockRead-T-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lockRead</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;&nbsp;lockRead(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&nbsp;key)</pre>\n<div class=\"block\">Aquire a read lock for the requested key</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>key</code> - the key</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the lock</dd>\n</dl>\n</li>\n</ul>\n<a name=\"lockWrite-java.lang.Object-\">\n<!--   -->\n</a><a name=\"lockWrite-T-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>lockWrite</h4>\n<pre>public&nbsp;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;&nbsp;lockWrite(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&nbsp;key)</pre>\n<div class=\"block\">Aquire a write lock for the requested key</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>key</code> - the key</dd>\n<dt><span class=\"returnLabel\">Returns:</span></dt>\n<dd>the lock</dd>\n</dl>\n</li>\n</ul>\n<a name=\"unLockRead-com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock-\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h4>unLockRead</h4>\n<pre>public&nbsp;void&nbsp;unLockRead(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;&nbsp;multiRWLock)</pre>\n<div class=\"block\">Release the provided read lock</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>multiRWLock</code> - the lock</dd>\n</dl>\n</li>\n</ul>\n<a name=\"unLockWrite-com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock-\">\n<!--   -->\n</a>\n<ul class=\"blockListLast\">\n<li class=\"blockList\">\n<h4>unLockWrite</h4>\n<pre>public&nbsp;void&nbsp;unLockWrite(<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;&nbsp;multiRWLock)</pre>\n<div class=\"block\">Release the provided write lock</div>\n<dl>\n<dt><span class=\"paramLabel\">Parameters:</span></dt>\n<dd><code>multiRWLock</code> - the lock</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<!-- ========= END OF CLASS DATA ========= -->\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li class=\"navBarCell1Rev\">Class</li>\n<li><a href=\"class-use/MultiReadWriteLockDictionary.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a></li>\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiReadWriteLockDictionary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<div>\n<ul class=\"subNavList\">\n<li>Summary:&nbsp;</li>\n<li><a href=\"#nested.class.summary\">Nested</a>&nbsp;|&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.summary\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.summary\">Method</a></li>\n</ul>\n<ul class=\"subNavList\">\n<li>Detail:&nbsp;</li>\n<li>Field&nbsp;|&nbsp;</li>\n<li><a href=\"#constructor.detail\">Constr</a>&nbsp;|&nbsp;</li>\n<li><a href=\"#method.detail\">Method</a></li>\n</ul>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/threading/class-use/MultiLockDictionary.MultiLock.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary.MultiLock</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary.MultiLock\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/class-use/MultiLockDictionary.MultiLock.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiLockDictionary.MultiLock.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary.MultiLock\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary.MultiLock</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.threading\">com.microsoft.windowsazure.mobileservices.threading</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.threading\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"type parameter in MultiLockDictionary\">T</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MultiLockDictionary.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html#lock-T-\">lock</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"type parameter in MultiLockDictionary\">T</a>&nbsp;key)</code>\n<div class=\"block\">Aquire a lock for the requested key</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MultiLockDictionary.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html#unLock-com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary.MultiLock-\">unLock</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"type parameter in MultiLockDictionary\">T</a>&gt;&nbsp;multiLock)</code>\n<div class=\"block\">Release the provided lock</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/class-use/MultiLockDictionary.MultiLock.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiLockDictionary.MultiLock.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/threading/class-use/MultiLockDictionary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/class-use/MultiLockDictionary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiLockDictionary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/class-use/MultiLockDictionary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiLockDictionary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/threading/class-use/MultiReadWriteLockDictionary.MultiReadWriteLock.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/class-use/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiReadWriteLockDictionary.MultiReadWriteLock.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock</h2>\n</div>\n<div class=\"classUseContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.threading\">com.microsoft.windowsazure.mobileservices.threading</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.threading\">\n<!--   -->\n</a>\n<h3>Uses of <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a> in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a></h3>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a> that return <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MultiReadWriteLockDictionary.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#lockRead-T-\">lockRead</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&nbsp;key)</code>\n<div class=\"block\">Aquire a read lock for the requested key</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MultiReadWriteLockDictionary.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#lockWrite-T-\">lockWrite</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&nbsp;key)</code>\n<div class=\"block\">Aquire a write lock for the requested key</div>\n</td>\n</tr>\n</tbody>\n</table>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing methods, and an explanation\">\n<caption><span>Methods in <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a> with parameters of type <a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th class=\"colLast\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MultiReadWriteLockDictionary.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#unLockRead-com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock-\">unLockRead</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;&nbsp;multiRWLock)</code>\n<div class=\"block\">Release the provided read lock</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><code>void</code></td>\n<td class=\"colLast\"><span class=\"typeNameLabel\">MultiReadWriteLockDictionary.</span><code><span class=\"memberNameLink\"><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#unLockWrite-com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock-\">unLockWrite</a></span>(<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;<a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt;&nbsp;multiRWLock)</code>\n<div class=\"block\">Release the provided write lock</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/class-use/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiReadWriteLockDictionary.MultiReadWriteLock.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/threading/class-use/MultiReadWriteLockDictionary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Class com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Class com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/class-use/MultiReadWriteLockDictionary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiReadWriteLockDictionary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h2 title=\"Uses of Class com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary\" class=\"title\">Uses of Class<br>com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary</h2>\n</div>\n<div class=\"classUseContainer\">No usage of com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"../package-summary.html\">Package</a></li>\n<li><a href=\"../../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">Class</a></li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"../package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/class-use/MultiReadWriteLockDictionary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"MultiReadWriteLockDictionary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/threading/package-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.threading</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<h1 class=\"bar\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\" target=\"classFrame\">com.microsoft.windowsazure.mobileservices.threading</a></h1>\n<div class=\"indexContainer\">\n<h2 title=\"Classes\">Classes</h2>\n<ul title=\"Classes\">\n<li><a href=\"MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\" target=\"classFrame\">MultiLockDictionary</a></li>\n<li><a href=\"MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\" target=\"classFrame\">MultiLockDictionary.MultiLock</a></li>\n<li><a href=\"MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\" target=\"classFrame\">MultiReadWriteLockDictionary</a></li>\n<li><a href=\"MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\" target=\"classFrame\">MultiReadWriteLockDictionary.MultiReadWriteLock</a></li>\n</ul>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/threading/package-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.threading</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.threading\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">Prev&nbsp;Package</a></li>\n<li>Next&nbsp;Package</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Package\" class=\"title\">Package&nbsp;com.microsoft.windowsazure.mobileservices.threading</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, listing classes, and an explanation\">\n<caption><span>Class Summary</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Class</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary</a>&lt;T&gt;</td>\n<td class=\"colLast\">\n<div class=\"block\">A key-lock dictionary that discards no longer referenced locks</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a>&lt;T&gt;</td>\n<td class=\"colLast\">\n<div class=\"block\">A lock that implements reference count</div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary</a>&lt;T&gt;</td>\n<td class=\"colLast\">\n<div class=\"block\">A key-readWriteLock dictionary that discards no longer referenced locks</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>&lt;T&gt;</td>\n<td class=\"colLast\">\n<div class=\"block\">A readWriteLock that implements reference count</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li class=\"navBarCell1Rev\">Package</li>\n<li>Class</li>\n<li><a href=\"package-use.html\">Use</a></li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">Prev&nbsp;Package</a></li>\n<li>Next&nbsp;Package</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/package-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/threading/package-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>com.microsoft.windowsazure.mobileservices.threading Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"com.microsoft.windowsazure.mobileservices.threading Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-tree.html\">Prev</a></li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For Package com.microsoft.windowsazure.mobileservices.threading</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"../../../../../overview-tree.html\">All Packages</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.threading.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">MultiLockDictionary</span></a>&lt;T&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.threading.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">MultiLockDictionary.MultiLock</span></a>&lt;T&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.threading.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">MultiReadWriteLockDictionary</span></a>&lt;T&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.threading.<a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">MultiReadWriteLockDictionary.MultiReadWriteLock</span></a>&lt;T&gt;</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-tree.html\">Prev</a></li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/package-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/com/microsoft/windowsazure/mobileservices/threading/package-use.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Uses of Package com.microsoft.windowsazure.mobileservices.threading</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../../../../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../../../../../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Uses of Package com.microsoft.windowsazure.mobileservices.threading\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Uses of Package com.microsoft.windowsazure.mobileservices.threading\" class=\"title\">Uses of Package<br>com.microsoft.windowsazure.mobileservices.threading</h1>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing packages, and an explanation\">\n<caption><span>Packages that use <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"#com.microsoft.windowsazure.mobileservices.threading\">com.microsoft.windowsazure.mobileservices.threading</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.threading\">\n<!--   -->\n</a>\n<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use table, listing classes, and an explanation\">\n<caption><span>Classes in <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a> used by <a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Class and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/class-use/MultiLockDictionary.MultiLock.html#com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a>\n<div class=\"block\">A lock that implements reference count</div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"../../../../../com/microsoft/windowsazure/mobileservices/threading/class-use/MultiReadWriteLockDictionary.MultiReadWriteLock.html#com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a>\n<div class=\"block\">A readWriteLock that implements reference count</div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../../../../../overview-summary.html\">Overview</a></li>\n<li><a href=\"package-summary.html\">Package</a></li>\n<li>Class</li>\n<li class=\"navBarCell1Rev\">Use</li>\n<li><a href=\"package-tree.html\">Tree</a></li>\n<li><a href=\"../../../../../deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"../../../../../index-files/index-1.html\">Index</a></li>\n<li><a href=\"../../../../../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../../../../../index.html?com/microsoft/windowsazure/mobileservices/threading/package-use.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"package-use.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../../../../../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/constant-values.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Constant Field Values</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Constant Field Values\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"overview-tree.html\">Tree</a></li>\n<li><a href=\"deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?constant-values.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"constant-values.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Constant Field Values\" class=\"title\">Constant Field Values</h1>\n<h2 title=\"Contents\">Contents</h2>\n<ul>\n<li><a href=\"#com.microsoft\">com.microsoft.*</a></li>\n</ul>\n</div>\n<div class=\"constantValuesContainer\"><a name=\"com.microsoft\">\n<!--   -->\n</a>\n<h2 title=\"com.microsoft\">com.microsoft.*</h2>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constant Field Values table, listing constant fields, and values\">\n<caption><span>com.microsoft.windowsazure.mobileservices.<a href=\"com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">BuildConfig</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th scope=\"col\">Constant Field</th>\n<th class=\"colLast\" scope=\"col\">Value</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a name=\"com.microsoft.windowsazure.mobileservices.BuildConfig.DEBUG\">\n<!--   -->\n</a><code>public&nbsp;static&nbsp;final&nbsp;boolean</code></td>\n<td><code><a href=\"com/microsoft/windowsazure/mobileservices/BuildConfig.html#DEBUG\">DEBUG</a></code></td>\n<td class=\"colLast\"><code>true</code></td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constant Field Values table, listing constant fields, and values\">\n<caption><span>com.microsoft.windowsazure.mobileservices.<a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th scope=\"col\">Constant Field</th>\n<th class=\"colLast\" scope=\"col\">Value</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a name=\"com.microsoft.windowsazure.mobileservices.MobileServiceClient.GOOGLE_ACCOUNT_TYPE\">\n<!--   -->\n</a><code>public&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>\n<td><code><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#GOOGLE_ACCOUNT_TYPE\">GOOGLE_ACCOUNT_TYPE</a></code></td>\n<td class=\"colLast\"><code>\"com.google\"</code></td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a name=\"com.microsoft.windowsazure.mobileservices.MobileServiceClient.GOOGLE_USER_INFO_SCOPE\">\n<!--   -->\n</a><code>public&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>\n<td><code><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#GOOGLE_USER_INFO_SCOPE\">GOOGLE_USER_INFO_SCOPE</a></code></td>\n<td class=\"colLast\"><code>\"oauth2:https://www.googleapis.com/auth/userinfo.profile\"</code></td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a name=\"com.microsoft.windowsazure.mobileservices.MobileServiceClient.UTF8_ENCODING\">\n<!--   -->\n</a><code>public&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>\n<td><code><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#UTF8_ENCODING\">UTF8_ENCODING</a></code></td>\n<td class=\"colLast\"><code>\"UTF-8\"</code></td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constant Field Values table, listing constant fields, and values\">\n<caption><span>com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">HttpPatch</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th scope=\"col\">Constant Field</th>\n<th class=\"colLast\" scope=\"col\">Value</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a name=\"com.microsoft.windowsazure.mobileservices.http.HttpPatch.METHOD_NAME\">\n<!--   -->\n</a><code>public&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>\n<td><code><a href=\"com/microsoft/windowsazure/mobileservices/http/HttpPatch.html#METHOD_NAME\">METHOD_NAME</a></code></td>\n<td class=\"colLast\"><code>\"PATCH\"</code></td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constant Field Values table, listing constant fields, and values\">\n<caption><span>com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th scope=\"col\">Constant Field</th>\n<th class=\"colLast\" scope=\"col\">Value</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a name=\"com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection.JSON_CONTENTTYPE\">\n<!--   -->\n</a><code>public&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>\n<td><code><a href=\"com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#JSON_CONTENTTYPE\">JSON_CONTENTTYPE</a></code></td>\n<td class=\"colLast\"><code>\"application/json\"</code></td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constant Field Values table, listing constant fields, and values\">\n<caption><span>com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceHttpClient</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th scope=\"col\">Constant Field</th>\n<th class=\"colLast\" scope=\"col\">Value</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a name=\"com.microsoft.windowsazure.mobileservices.http.MobileServiceHttpClient.X_ZUMO_FEATURES\">\n<!--   -->\n</a><code>public&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>\n<td><code><a href=\"com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#X_ZUMO_FEATURES\">X_ZUMO_FEATURES</a></code></td>\n<td class=\"colLast\"><code>\"X-ZUMO-FEATURES\"</code></td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constant Field Values table, listing constant fields, and values\">\n<caption><span>com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th scope=\"col\">Constant Field</th>\n<th class=\"colLast\" scope=\"col\">Value</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a name=\"com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.TABLES_URL\">\n<!--   -->\n</a><code>public&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>\n<td><code>TABLES_URL</code></td>\n<td class=\"colLast\"><code>\"tables/\"</code></td>\n</tr>\n</tbody>\n</table>\n</li>\n<li class=\"blockList\">\n<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Constant Field Values table, listing constant fields, and values\">\n<caption><span>com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a>&lt;<a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt;</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n<th scope=\"col\">Constant Field</th>\n<th class=\"colLast\" scope=\"col\">Value</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a name=\"com.microsoft.windowsazure.mobileservices.table.MobileServiceTable.TABLES_URL\">\n<!--   -->\n</a><code>public&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>\n<td><code>TABLES_URL</code></td>\n<td class=\"colLast\"><code>\"tables/\"</code></td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"overview-tree.html\">Tree</a></li>\n<li><a href=\"deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?constant-values.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"constant-values.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/deprecated-list.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Deprecated List</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Deprecated List\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"overview-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Deprecated</li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?deprecated-list.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"deprecated-list.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Deprecated API\" class=\"title\">Deprecated API</h1>\n<h2 title=\"Contents\">Contents</h2>\n<ul>\n<li><a href=\"#method\">Deprecated Methods</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\"><a name=\"method\">\n<!--   -->\n</a>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Deprecated Methods table, listing deprecated methods, and an explanation\">\n<caption><span>Deprecated Methods</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colOne\" scope=\"col\">Method and Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.execute(Query, TableJsonQueryCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>execute(final Query query)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceTable.execute(Query, TableQueryCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\"><code>MobileServiceTable.execute(Query query)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.execute(TableJsonQueryCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute--\"><code>MobileServiceJsonTable.execute()</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#execute-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">com.microsoft.windowsazure.mobileservices.table.query.ExecutableJsonQuery.execute(TableJsonQueryCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#execute--\"><code>ExecutableJsonQuery.execute()</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceTable.execute(TableQueryCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute--\"><code>MobileServiceTable.execute()</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#execute-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery.execute(TableQueryCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#execute--\"><code>ExecutableQuery.execute()</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#insert-E-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceTable.insert(E, List&lt;&lt;any&gt;&gt;, TableOperationCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final E element, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#insert-E-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceTable.insert(E, TableOperationCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final E element)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#insert-com.google.gson.JsonObject-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.insert(JsonObject, List&lt;&lt;any&gt;&gt;, TableJsonOperationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final JsonObject element, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#insert-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.insert(JsonObject, TableJsonOperationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final JsonObject element)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.invokeApi(String, ApiJsonOperationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-\"><code>MobileServiceClient.invokeApi(String apiName)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.invokeApi(String, Class&lt;E&gt;, ApiOperationCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, Class<E> clazz)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.invokeApi(String, JsonElement, ApiJsonOperationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-\"><code>MobileServiceClient.invokeApi(String apiName, JsonElement body)</code></a>\n             instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-java.lang.String-java.util.List-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.invokeApi(String, JsonElement, String, List&lt;&lt;any&gt;&gt;, ApiJsonOperationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, JsonElement body, String\n             httpMethod, List<Pair<String, String>> parameters)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Object-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.invokeApi(String, Object, Class&lt;E&gt;, ApiOperationCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, Object body, Class<E>\n             clazz)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Object-java.lang.String-java.util.List-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.invokeApi(String, Object, String, List&lt;&lt;any&gt;&gt;, Class&lt;E&gt;, ApiOperationCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, Object body, String\n             httpMethod, List<Pair<String, String>> parameters, final\n             Class<E> clazz)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.String-java.util.List-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.invokeApi(String, String, List&lt;&lt;any&gt;&gt;, ApiJsonOperationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, String httpMethod,\n             List<Pair<String, String>> parameters)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.String-java.util.List-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.invokeApi(String, String, List&lt;&lt;any&gt;&gt;, Class&lt;E&gt;, ApiOperationCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, String httpMethod,\n             List<Pair<String, String>> parameters, Class<E> clazz)</code>\n             instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.login(MobileServiceAuthenticationProvider, JsonObject, UserAuthenticationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-\"><code>MobileServiceClient.login(MobileServiceAuthenticationProvider\n             provider, JsonObject oAuthToken)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.login(MobileServiceAuthenticationProvider, String, UserAuthenticationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-\"><code>MobileServiceClient.login(MobileServiceAuthenticationProvider\n             provider, String oAuthToken)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.login(MobileServiceAuthenticationProvider, UserAuthenticationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-\"><code>MobileServiceClient.login(MobileServiceAuthenticationProvider\n             provider)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.login(String, JsonObject, UserAuthenticationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.google.gson.JsonObject-\"><code>MobileServiceClient.login(String provider, JsonObject oAuthToken)</code></a>\n             instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.login(String, String, UserAuthenticationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-java.lang.String-\"><code>MobileServiceClient.login(String provider, String oAuthToken)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.login(String, UserAuthenticationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-\"><code>MobileServiceClient.login(String provider)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.loginWithGoogleAccount(Activity, Account, String, UserAuthenticationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-java.lang.String-\"><code>MobileServiceClient.loginWithGoogleAccount(Activity activity, Account\n             account, String scopes)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.loginWithGoogleAccount(Activity, Account, UserAuthenticationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-\"><code>MobileServiceClient.loginWithGoogleAccount(Activity activity, Account\n             account)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.loginWithGoogleAccount(Activity, String, UserAuthenticationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-java.lang.String-\"><code>MobileServiceClient.loginWithGoogleAccount(Activity activity, String\n             scopes)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">com.microsoft.windowsazure.mobileservices.MobileServiceClient.loginWithGoogleAccount(Activity, UserAuthenticationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-\"><code>MobileServiceClient.loginWithGoogleAccount(Activity activity)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.lookUp(Object, List&lt;&lt;any&gt;&gt;, TableJsonOperationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>lookUp(Object id, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceTable.lookUp(Object, List&lt;&lt;any&gt;&gt;, TableOperationCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>lookUp(Object id, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.lookUp(Object, TableJsonOperationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-\"><code>MobileServiceJsonTable.lookUp(Object id)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceTable.lookUp(Object, TableOperationCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-\"><code>MobileServiceTable.lookUp(Object id)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#register-java.lang.String-java.lang.String:A-com.microsoft.windowsazure.mobileservices.notifications.RegistrationCallback-\">com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush.register(String, String[], RegistrationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#register-java.lang.String-java.lang.String:A-\"><code>MobileServicePush.register(String pnsHandle, String[] tags)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistrationCallback-\">com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush.registerTemplate(String, String, String, String[], TemplateRegistrationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-\"><code>MobileServicePush.registerTemplate(String pnsHandle, String\n             templateName, String template, String[] tags)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregister-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush.unregister(UnregisterCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregister--\"><code>MobileServicePush.unregister()</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterAll-java.lang.String-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush.unregisterAll(String, UnregisterCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterAll-java.lang.String-\"><code>MobileServicePush.unregisterAll(String pnsHandle)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterTemplate-java.lang.String-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush.unregisterTemplate(String, UnregisterCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterTemplate-java.lang.String-\"><code>MobileServicePush.unregisterTemplate(String templateName)</code></a> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#update-E-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceTable.update(E, List&lt;&lt;any&gt;&gt;, TableOperationCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final E element, final List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#update-E-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceTable.update(E, TableOperationCallback&lt;E&gt;)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final E element)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#update-com.google.gson.JsonObject-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.update(JsonObject, List&lt;&lt;any&gt;&gt;, TableJsonOperationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final JsonObject element, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colOne\"><a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#update-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.update(JsonObject, TableJsonOperationCallback)</a>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final JsonObject element)</code> instead</span></div>\n</td>\n</tr>\n</tbody>\n</table>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"overview-tree.html\">Tree</a></li>\n<li class=\"navBarCell1Rev\">Deprecated</li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?deprecated-list.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"deprecated-list.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/help-doc.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>API Help</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"API Help\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"overview-tree.html\">Tree</a></li>\n<li><a href=\"deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li class=\"navBarCell1Rev\">Help</li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?help-doc.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"help-doc.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">How This API Document Is Organized</h1>\n<div class=\"subTitle\">This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.</div>\n</div>\n<div class=\"contentContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h2>Overview</h2>\n<p>The <a href=\"overview-summary.html\">Overview</a> page is the front page of this API document and provides a list of all packages with a summary for each.  This page can also contain an overall description of the set of packages.</p>\n</li>\n<li class=\"blockList\">\n<h2>Package</h2>\n<p>Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:</p>\n<ul>\n<li>Interfaces (italic)</li>\n<li>Classes</li>\n<li>Enums</li>\n<li>Exceptions</li>\n<li>Errors</li>\n<li>Annotation Types</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2>Class/Interface</h2>\n<p>Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:</p>\n<ul>\n<li>Class inheritance diagram</li>\n<li>Direct Subclasses</li>\n<li>All Known Subinterfaces</li>\n<li>All Known Implementing Classes</li>\n<li>Class/interface declaration</li>\n<li>Class/interface description</li>\n</ul>\n<ul>\n<li>Nested Class Summary</li>\n<li>Field Summary</li>\n<li>Constructor Summary</li>\n<li>Method Summary</li>\n</ul>\n<ul>\n<li>Field Detail</li>\n<li>Constructor Detail</li>\n<li>Method Detail</li>\n</ul>\n<p>Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</p>\n</li>\n<li class=\"blockList\">\n<h2>Annotation Type</h2>\n<p>Each annotation type has its own separate page with the following sections:</p>\n<ul>\n<li>Annotation Type declaration</li>\n<li>Annotation Type description</li>\n<li>Required Element Summary</li>\n<li>Optional Element Summary</li>\n<li>Element Detail</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2>Enum</h2>\n<p>Each enum has its own separate page with the following sections:</p>\n<ul>\n<li>Enum declaration</li>\n<li>Enum description</li>\n<li>Enum Constant Summary</li>\n<li>Enum Constant Detail</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2>Use</h2>\n<p>Each documented package, class and interface has its own Use page.  This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A.  You can access this page by first going to the package, class or interface, then clicking on the \"Use\" link in the navigation bar.</p>\n</li>\n<li class=\"blockList\">\n<h2>Tree (Class Hierarchy)</h2>\n<p>There is a <a href=\"overview-tree.html\">Class Hierarchy</a> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.</p>\n<ul>\n<li>When viewing the Overview page, clicking on \"Tree\" displays the hierarchy for all packages.</li>\n<li>When viewing a particular package, class or interface page, clicking \"Tree\" displays the hierarchy for only that package.</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2>Deprecated API</h2>\n<p>The <a href=\"deprecated-list.html\">Deprecated API</a> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</p>\n</li>\n<li class=\"blockList\">\n<h2>Index</h2>\n<p>The <a href=\"index-files/index-1.html\">Index</a> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</p>\n</li>\n<li class=\"blockList\">\n<h2>Prev/Next</h2>\n<p>These links take you to the next or previous class, interface, package, or related page.</p>\n</li>\n<li class=\"blockList\">\n<h2>Frames/No Frames</h2>\n<p>These links show and hide the HTML frames.  All pages are available with or without frames.</p>\n</li>\n<li class=\"blockList\">\n<h2>All Classes</h2>\n<p>The <a href=\"allclasses-noframe.html\">All Classes</a> link shows all classes and interfaces except non-static nested types.</p>\n</li>\n<li class=\"blockList\">\n<h2>Serialized Form</h2>\n<p>Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking \"Serialized Form\" in the \"See also\" section of the class description.</p>\n</li>\n<li class=\"blockList\">\n<h2>Constant Field Values</h2>\n<p>The <a href=\"constant-values.html\">Constant Field Values</a> page lists the static final fields and their values.</p>\n</li>\n</ul>\n<span class=\"emphasizedPhrase\">This help file applies to API documentation generated using the standard doclet.</span></div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"overview-tree.html\">Tree</a></li>\n<li><a href=\"deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li class=\"navBarCell1Rev\">Help</li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?help-doc.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"help-doc.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-1.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>A-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"A-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev Letter</li>\n<li><a href=\"index-2.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-1.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-1.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:A\">\n<!--   -->\n</a>\n<h2 class=\"title\">A</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept(TableOperationVisitor&lt;T&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept(TableOperationVisitor&lt;T&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept(TableOperationVisitor&lt;T&gt;)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></dt>\n<dd>\n<div class=\"block\">Accept a MobileServiceTableOperationVisitor that works against the\n operation.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#accept-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor-\">accept(TableOperationVisitor&lt;T&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#add--\">add()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\">Arithmetic Operators</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#add-java.lang.Number-\">add(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#add--\">add()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\">Arithmetic Operators</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#add-java.lang.Number-\">add(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add--\">add()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Add operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Add operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#add-java.lang.Number-\">add(Number)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Add operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#add--\">add()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Add operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#add-com.microsoft.windowsazure.mobileservices.table.query.Query-\">add(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Add operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#add-java.lang.Number-\">add(Number)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Add operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#add-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError-\">add(TableOperationError)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></dt>\n<dd>\n<div class=\"block\">Adds a new table operation error</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#addHeader-java.lang.String-java.lang.String-\">addHeader(String, String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></dt>\n<dd>\n<div class=\"block\">Adds a new Header to the request</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#addHeader-java.lang.String-java.lang.String-\">addHeader(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#addSystemProperties-java.util.EnumSet-java.util.List-\">addSystemProperties(EnumSet&lt;MobileServiceSystemProperty&gt;, List&lt;&lt;any&gt;&gt;)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></dt>\n<dd>\n<div class=\"block\">Adds the tables requested system properties to the parameters collection.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#and--\">and()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\">Logical Operators</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#and--\">and()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\">Logical Operators</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and--\">and()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Conditional and.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Conditional and.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#and--\">and()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Conditional and.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#and-com.microsoft.windowsazure.mobileservices.table.query.Query-\">and(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Conditional and.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">AndroidHttpClientFactory</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></dt>\n<dd>\n<div class=\"block\">Factory for AndroidHttpClient instances</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">AndroidHttpClientFactoryImpl</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></dt>\n<dd>\n<div class=\"block\">Default implementation for AndroidHttpClientFactory</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html#AndroidHttpClientFactoryImpl--\">AndroidHttpClientFactoryImpl()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactoryImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">ApiJsonOperationCallback</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></dt>\n<dd>\n<div class=\"block\">Callback used after a custom Api invocation is executed using JSON</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">ApiOperationCallback</span></a>&lt;<a href=\"../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"type parameter in ApiOperationCallback\">E</a>&gt; - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></dt>\n<dd>\n<div class=\"block\">Callback used after a custom Api invocation is executed</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html#authenticate-java.lang.String-Context-\">authenticate(String, Context)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">LoginManager</a></dt>\n<dd>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html#authenticate-java.lang.String-Context-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">authenticate(String, Context, UserAuthenticationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">LoginManager</a></dt>\n<dd>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev Letter</li>\n<li><a href=\"index-2.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-1.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-1.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-10.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>J-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"J-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-9.html\">Prev Letter</a></li>\n<li><a href=\"index-11.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-10.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-10.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:J\">\n<!--   -->\n</a>\n<h2 class=\"title\">J</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#JSON_CONTENTTYPE\">JSON_CONTENTTYPE</a></span> - Static variable in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a></dt>\n<dd>\n<div class=\"block\">Header value to represent JSON content-type</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">JsonEntityParser</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.serialization</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html#JsonEntityParser--\">JsonEntityParser()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">JsonEntityParser</a></dt>\n<dd>&nbsp;</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-9.html\">Prev Letter</a></li>\n<li><a href=\"index-11.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-10.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-10.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-11.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>L-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"L-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-10.html\">Prev Letter</a></li>\n<li><a href=\"index-12.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-11.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-11.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:L\">\n<!--   -->\n</a>\n<h2 class=\"title\">L</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le--\">le()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le-java.lang.Number-\">le(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#le-java.util.Date-\">le(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le--\">le()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le-java.lang.Number-\">le(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#le-java.util.Date-\">le(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le--\">le()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.lang.Number-\">le(Number)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#le-java.util.Date-\">le(Date)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le--\">le()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le-com.microsoft.windowsazure.mobileservices.table.query.Query-\">le(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le-java.lang.Number-\">le(Number)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#le-java.util.Date-\">le(Date)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Less than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#length-java.lang.String-\">length(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#length-java.lang.String-\">length(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#length-java.lang.String-\">length(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#length-com.microsoft.windowsazure.mobileservices.table.query.Query-\">length(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#length-java.lang.String-\">length(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The number of characters in the specified parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#load-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">load(MobileServiceLocalStore)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></dt>\n<dd>\n<div class=\"block\">Loads the list of table operation errors from the local store</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#load-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">load(MobileServiceLocalStore)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></dt>\n<dd>\n<div class=\"block\">Loads the queue of table operations from the local store</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">LocalTableOperationProcessor</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></dt>\n<dd>\n<div class=\"block\">Processes a table operation against a local store.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#LocalTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-com.google.gson.JsonObject-java.lang.String-\">LocalTableOperationProcessor(MobileServiceLocalStore, JsonObject, String)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">LocalTableOperationProcessor</a></dt>\n<dd>\n<div class=\"block\">Constructor for LocalTableOperationProcessor</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html#lock-T-\">lock(T)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.threading.<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary</a></dt>\n<dd>\n<div class=\"block\">Aquire a lock for the requested key</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#lockRead-T-\">lockRead(T)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.threading.<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary</a></dt>\n<dd>\n<div class=\"block\">Aquire a read lock for the requested key</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#lockWrite-T-\">lockWrite(T)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.threading.<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary</a></dt>\n<dd>\n<div class=\"block\">Aquire a write lock for the requested key</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-\">login(MobileServiceAuthenticationProvider)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login(MobileServiceAuthenticationProvider, UserAuthenticationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-\"><code>MobileServiceClient.login(MobileServiceAuthenticationProvider\n             provider)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-\">login(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes an interactive authentication process using the specified\n Authentication Provider</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login(String, UserAuthenticationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-\"><code>MobileServiceClient.login(String provider)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-\">login(MobileServiceAuthenticationProvider, JsonObject)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login(MobileServiceAuthenticationProvider, JsonObject, UserAuthenticationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-com.google.gson.JsonObject-\"><code>MobileServiceClient.login(MobileServiceAuthenticationProvider\n             provider, JsonObject oAuthToken)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.google.gson.JsonObject-\">login(String, JsonObject)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login(String, JsonObject, UserAuthenticationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-com.google.gson.JsonObject-\"><code>MobileServiceClient.login(String provider, JsonObject oAuthToken)</code></a>\n             instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-\">login(MobileServiceAuthenticationProvider, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login(MobileServiceAuthenticationProvider, String, UserAuthenticationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider-java.lang.String-\"><code>MobileServiceClient.login(MobileServiceAuthenticationProvider\n             provider, String oAuthToken)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-java.lang.String-\">login(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a\n provider-specific oAuth token</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">login(String, String, UserAuthenticationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#login-java.lang.String-java.lang.String-\"><code>MobileServiceClient.login(String provider, String oAuthToken)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">LoginManager</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a></dt>\n<dd>\n<div class=\"block\">Class for handling Login operations with Authentication Providers and Microsoft\n Azure Mobile Services</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html#LoginManager-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">LoginManager(MobileServiceClient)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">LoginManager</a></dt>\n<dd>\n<div class=\"block\">Constructor for LoginManager</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-\">loginWithGoogleAccount(Activity)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">loginWithGoogleAccount(Activity, UserAuthenticationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-\"><code>MobileServiceClient.loginWithGoogleAccount(Activity activity)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-java.lang.String-\">loginWithGoogleAccount(Activity, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">loginWithGoogleAccount(Activity, String, UserAuthenticationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-java.lang.String-\"><code>MobileServiceClient.loginWithGoogleAccount(Activity activity, String\n             scopes)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-\">loginWithGoogleAccount(Activity, Account)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">loginWithGoogleAccount(Activity, Account, UserAuthenticationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-\"><code>MobileServiceClient.loginWithGoogleAccount(Activity activity, Account\n             account)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-java.lang.String-\">loginWithGoogleAccount(Activity, Account, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes Microsoft Azure Mobile Service authentication using a the Google\n account registered in the device</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-java.lang.String-com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback-\">loginWithGoogleAccount(Activity, Account, String, UserAuthenticationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#loginWithGoogleAccount-Activity-Account-java.lang.String-\"><code>MobileServiceClient.loginWithGoogleAccount(Activity activity, Account\n             account, String scopes)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#logout--\">logout()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Log the user out of the Mobile Service</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">LongSerializer</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.serialization</a></dt>\n<dd>\n<div class=\"block\">Long Serializer to avoid losing precision when sending data to Mobile\n Services</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html#LongSerializer--\">LongSerializer()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">LongSerializer</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-\">lookUp(Object)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Looks up a row in the table and retrieves its JSON value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">lookUp(Object, TableJsonOperationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-\"><code>MobileServiceJsonTable.lookUp(Object id)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-java.util.List-\">lookUp(Object, List&lt;&lt;any&gt;&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Looks up a row in the table and retrieves its JSON value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#lookUp-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">lookUp(Object, List&lt;&lt;any&gt;&gt;, TableJsonOperationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>lookUp(Object id, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-\">lookUp(Object)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Looks up a row in the table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">lookUp(Object, TableOperationCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-\"><code>MobileServiceTable.lookUp(Object id)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-java.util.List-\">lookUp(Object, List&lt;&lt;any&gt;&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Looks up a row in the table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#lookUp-java.lang.Object-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">lookUp(Object, List&lt;&lt;any&gt;&gt;, TableOperationCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>lookUp(Object id, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#lookup-java.lang.String-java.lang.String-\">lookup(String, String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></dt>\n<dd>\n<div class=\"block\">Looks up an item from the local store.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#lookup-java.lang.String-java.lang.String-\">lookup(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#lookUp-java.lang.String-\">lookUp(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></dt>\n<dd>\n<div class=\"block\">Looks up an item from the local table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#lookUp-java.lang.String-\">lookUp(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></dt>\n<dd>\n<div class=\"block\">Looks up an item from the local table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt--\">lt()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt-java.lang.Number-\">lt(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#lt-java.util.Date-\">lt(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt--\">lt()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt-java.lang.Number-\">lt(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#lt-java.util.Date-\">lt(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt--\">lt()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Less than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Less than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.lang.Number-\">lt(Number)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Less than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#lt-java.util.Date-\">lt(Date)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Less than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt--\">lt()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Less than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">lt(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Less than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt-java.lang.Number-\">lt(Number)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Less than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#lt-java.util.Date-\">lt(Date)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Less than comparison operator.</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-10.html\">Prev Letter</a></li>\n<li><a href=\"index-12.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-11.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-11.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-12.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>M-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"M-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-11.html\">Prev Letter</a></li>\n<li><a href=\"index-13.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-12.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-12.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:M\">\n<!--   -->\n</a>\n<h2 class=\"title\">M</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html#METHOD_NAME\">METHOD_NAME</a></span> - Static variable in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">HttpPatch</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#minute-java.lang.String-\">minute(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#minute-java.lang.String-\">minute(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#minute-java.lang.String-\">minute(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#minute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">minute(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#minute-java.lang.String-\">minute(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The minute component value of the parameter value.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceApplication</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></dt>\n<dd>\n<div class=\"block\">Provides context regarding the application that is using the Mobile Service.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html#MobileServiceApplication--\">MobileServiceApplication()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceApplication</a></dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">MobileServiceAuthenticationProvider</span></a> - Enum in <a href=\"../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a></dt>\n<dd>\n<div class=\"block\">Authentication providers to use with a Mobile Service</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceClient</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></dt>\n<dd>\n<div class=\"block\">Entry-point for Microsoft Azure Mobile Services interactions</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#MobileServiceClient-java.lang.String-java.lang.String-Context-\">MobileServiceClient(String, String, Context)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Constructor for the MobileServiceClient</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#MobileServiceClient-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceClient(MobileServiceClient)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Constructor for the MobileServiceClient</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#MobileServiceClient-java.net.URL-java.lang.String-Context-\">MobileServiceClient(URL, String, Context)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Constructor for the MobileServiceClient</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">MobileServiceConnection</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></dt>\n<dd>\n<div class=\"block\">Class for handling communication with Microsoft Azure Mobile Services REST APIs</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#MobileServiceConnection-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceConnection(MobileServiceClient)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a></dt>\n<dd>\n<div class=\"block\">Constructor for the MobileServiceConnection</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceException</span></a> - Exception in <a href=\"../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#MobileServiceException-java.lang.Throwable-\">MobileServiceException(Throwable)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#MobileServiceException-java.lang.String-java.lang.Throwable-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">MobileServiceException(String, Throwable, ServiceFilterResponse)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#MobileServiceException-java.lang.String-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">MobileServiceException(String, ServiceFilterResponse)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#MobileServiceException-java.lang.String-java.lang.Throwable-\">MobileServiceException(String, Throwable)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></dt>\n<dd>\n<div class=\"block\">Creates a new MobileServiceException with a detail message and a cause</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#MobileServiceException-java.lang.String-\">MobileServiceException(String)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></dt>\n<dd>\n<div class=\"block\">Creates a new MobileServiceException with a detail message</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceFeatures</span></a> - Enum in <a href=\"../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></dt>\n<dd>\n<div class=\"block\">The list of mobile services features exposed in the HTTP headers of\n requests for telemetry purposes.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">MobileServiceHttpClient</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></dt>\n<dd>\n<div class=\"block\">Utility class which centralizes the HTTP requests sent by the\n mobile services client.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#MobileServiceHttpClient-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceHttpClient(MobileServiceClient)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceHttpClient</a></dt>\n<dd>\n<div class=\"block\">Constructor</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">MobileServiceJsonSyncTable</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></dt>\n<dd>\n<div class=\"block\">Provides operations on local table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#MobileServiceJsonSyncTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceJsonSyncTable(String, MobileServiceClient)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></dt>\n<dd>\n<div class=\"block\">Constructor for MobileServiceJsonSyncTable</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServiceJsonTable</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></dt>\n<dd>\n<div class=\"block\">Represents a Mobile Service Table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#MobileServiceJsonTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceJsonTable(String, MobileServiceClient)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Constructor for MobileServiceJsonTable</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceList</span></a>&lt;<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"type parameter in MobileServiceList\">E</a>&gt; - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceList.html#MobileServiceList-java.util.Collection-int-\">MobileServiceList(Collection&lt;? extends E&gt;, int)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a></dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">MobileServiceLocalStore</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></dt>\n<dd>\n<div class=\"block\">Allows saving and reading data in the local tables.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">MobileServiceLocalStoreException</span></a> - Exception in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html#MobileServiceLocalStoreException-java.lang.String-\">MobileServiceLocalStoreException(String)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></dt>\n<dd>\n<div class=\"block\">Creates a new MobileServiceLocalStoreException with a detail message</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html#MobileServiceLocalStoreException-java.lang.Throwable-\">MobileServiceLocalStoreException(Throwable)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></dt>\n<dd>\n<div class=\"block\">Creates a new MobileServiceLocalStoreException with a cause</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html#MobileServiceLocalStoreException-java.lang.String-java.lang.Throwable-\">MobileServiceLocalStoreException(String, Throwable)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStoreException</a></dt>\n<dd>\n<div class=\"block\">Creates a new MobileServiceLocalStoreException with a detail message and\n a cause</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServicePreconditionFailedException</span></a> - Exception in <a href=\"../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html#MobileServicePreconditionFailedException-com.microsoft.windowsazure.mobileservices.MobileServiceException-java.lang.Object-\">MobileServicePreconditionFailedException(MobileServiceException, Object)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedException</a></dt>\n<dd>\n<div class=\"block\">Initializes a new instance of the\n MobileServicePreconditionFailedException class.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServicePreconditionFailedExceptionBase</span></a> - Exception in <a href=\"../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html#MobileServicePreconditionFailedExceptionBase-com.microsoft.windowsazure.mobileservices.MobileServiceException-com.google.gson.JsonObject-\">MobileServicePreconditionFailedExceptionBase(MobileServiceException, JsonObject)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedExceptionBase</a></dt>\n<dd>\n<div class=\"block\">Initializes a new instance of the\n MobileServicePreconditionFailedExceptionBase class.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">MobileServicePush</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></dt>\n<dd>\n<div class=\"block\">The notification hub client</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#MobileServicePush-com.microsoft.windowsazure.mobileservices.MobileServiceClient-Context-\">MobileServicePush(MobileServiceClient, Context)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></dt>\n<dd>\n<div class=\"block\">Creates a new NotificationHub client</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">MobileServicePushCompletionResult</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></dt>\n<dd>\n<div class=\"block\">Gives you errors and status of the push completion.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#MobileServicePushCompletionResult--\">MobileServicePushCompletionResult()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></dt>\n<dd>\n<div class=\"block\">Constructor for MobileServicePushCompletionResult</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">MobileServicePushFailedException</span></a> - Exception in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></dt>\n<dd>\n<div class=\"block\">Class that represents an exception during push sync</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html#MobileServicePushFailedException-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">MobileServicePushFailedException(MobileServicePushCompletionResult)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushFailedException</a></dt>\n<dd>\n<div class=\"block\">Constructor for MobileServicePushFailedException</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">MobileServicePushStatus</span></a> - Enum in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></dt>\n<dd>\n<div class=\"block\">Enumeration for push sync status.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">MobileServiceSyncContext</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></dt>\n<dd>\n<div class=\"block\">Provides a way to synchronize local database with remote database.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#MobileServiceSyncContext-com.microsoft.windowsazure.mobileservices.MobileServiceClient-\">MobileServiceSyncContext(MobileServiceClient)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></dt>\n<dd>\n<div class=\"block\">Constructor for MobileServiceSyncContext</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">MobileServiceSyncHandler</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></dt>\n<dd>\n<div class=\"block\">Handles table operation errors and push completion results.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">MobileServiceSyncHandlerException</span></a> - Exception in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></dt>\n<dd>\n<div class=\"block\">Class that represents an exception during sync handling</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html#MobileServiceSyncHandlerException-java.lang.String-\">MobileServiceSyncHandlerException(String)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></dt>\n<dd>\n<div class=\"block\">Creates a new MobileServiceSyncHandlerException with a detail message</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html#MobileServiceSyncHandlerException-java.lang.Throwable-\">MobileServiceSyncHandlerException(Throwable)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></dt>\n<dd>\n<div class=\"block\">Creates a new MobileServiceSyncHandlerException with a cause</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html#MobileServiceSyncHandlerException-java.lang.String-java.lang.Throwable-\">MobileServiceSyncHandlerException(String, Throwable)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandlerException</a></dt>\n<dd>\n<div class=\"block\">Creates a new MobileServiceSyncHandlerException with a detail message and\n a cause</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">MobileServiceSyncTable</span></a>&lt;<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"type parameter in MobileServiceSyncTable\">E</a>&gt; - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></dt>\n<dd>\n<div class=\"block\">Provides operations on local table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#MobileServiceSyncTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-java.lang.Class-\">MobileServiceSyncTable(String, MobileServiceClient, Class&lt;E&gt;)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></dt>\n<dd>\n<div class=\"block\">Constructor for MobileServiceTable</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServiceSystemProperty</span></a> - Enum in <a href=\"../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></dt>\n<dd>\n<div class=\"block\">The available System Properties in Mobile Service</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServiceTable</span></a>&lt;<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"type parameter in MobileServiceTable\">E</a>&gt; - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></dt>\n<dd>\n<div class=\"block\">Represents a Mobile Service Table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#MobileServiceTable-java.lang.String-com.microsoft.windowsazure.mobileservices.MobileServiceClient-java.lang.Class-\">MobileServiceTable(String, MobileServiceClient, Class&lt;E&gt;)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Constructor for MobileServiceTable</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServiceTableSystemPropertiesProvider</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></dt>\n<dd>\n<div class=\"block\">Interface used to decouple the table implementation from the query writers.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">MobileServiceUser</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a></dt>\n<dd>\n<div class=\"block\">Mobile Service authenticated user</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html#MobileServiceUser-java.lang.String-\">MobileServiceUser(String)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></dt>\n<dd>\n<div class=\"block\">Creates a user specifying the User Id</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mod--\">mod()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mod-java.lang.Number-\">mod(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mod--\">mod()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mod-java.lang.Number-\">mod(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod--\">mod()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mod-java.lang.Number-\">mod(Number)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mod--\">mod()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mod-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mod(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mod-java.lang.Number-\">mod(Number)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Reminder (or modulo) operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#month-java.lang.String-\">month(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#month-java.lang.String-\">month(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The month component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#month-java.lang.String-\">month(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The month component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#month-com.microsoft.windowsazure.mobileservices.table.query.Query-\">month(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The month component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#month-java.lang.String-\">month(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The month component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mul--\">mul()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#mul-java.lang.Number-\">mul(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mul--\">mul()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#mul-java.lang.Number-\">mul(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul--\">mul()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Multiply operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Multiply operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#mul-java.lang.Number-\">mul(Number)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Multiply operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mul--\">mul()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Multiply operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mul-com.microsoft.windowsazure.mobileservices.table.query.Query-\">mul(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Multiply operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#mul-java.lang.Number-\">mul(Number)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Multiply operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html#MultiLock--\">MultiLock()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.threading.<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary.MultiLock</a></dt>\n<dd>\n<div class=\"block\">Constructor for MultiLock</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">MultiLockDictionary</span></a>&lt;<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"type parameter in MultiLockDictionary\">T</a>&gt; - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a></dt>\n<dd>\n<div class=\"block\">A key-lock dictionary that discards no longer referenced locks</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html#MultiLockDictionary--\">MultiLockDictionary()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.threading.<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary</a></dt>\n<dd>\n<div class=\"block\">Constructor for MultiLockDictionary</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">MultiLockDictionary.MultiLock</span></a>&lt;<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"type parameter in MultiLockDictionary.MultiLock\">T</a>&gt; - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a></dt>\n<dd>\n<div class=\"block\">A lock that implements reference count</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html#MultiReadWriteLock--\">MultiReadWriteLock()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.threading.<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary.MultiReadWriteLock</a></dt>\n<dd>\n<div class=\"block\">Constructor for MultiReadWriteLock</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">MultiReadWriteLockDictionary</span></a>&lt;<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"type parameter in MultiReadWriteLockDictionary\">T</a>&gt; - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a></dt>\n<dd>\n<div class=\"block\">A key-readWriteLock dictionary that discards no longer referenced locks</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#MultiReadWriteLockDictionary--\">MultiReadWriteLockDictionary()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.threading.<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary</a></dt>\n<dd>\n<div class=\"block\">Constructor for MultiReadWriteLockDictionary</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">MultiReadWriteLockDictionary.MultiReadWriteLock</span></a>&lt;<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"type parameter in MultiReadWriteLockDictionary.MultiReadWriteLock\">T</a>&gt; - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a></dt>\n<dd>\n<div class=\"block\">A readWriteLock that implements reference count</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-11.html\">Prev Letter</a></li>\n<li><a href=\"index-13.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-12.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-12.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-13.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>N-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"N-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-12.html\">Prev Letter</a></li>\n<li><a href=\"index-14.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-13.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-13.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:N\">\n<!--   -->\n</a>\n<h2 class=\"title\">N</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne--\">ne()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-java.lang.Number-\">ne(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-boolean-\">ne(boolean)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-java.lang.String-\">ne(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ne-java.util.Date-\">ne(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne--\">ne()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-java.lang.Number-\">ne(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-boolean-\">ne(boolean)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-java.lang.String-\">ne(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ne-java.util.Date-\">ne(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne--\">ne()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Not equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Not equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.Number-\">ne(Number)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Not equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-boolean-\">ne(boolean)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Not equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.lang.String-\">ne(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Not equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ne-java.util.Date-\">ne(Date)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Not equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne--\">ne()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Not equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ne(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Not equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-java.lang.Number-\">ne(Number)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Not equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-boolean-\">ne(boolean)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Not equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-java.lang.String-\">ne(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Not equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ne-java.util.Date-\">ne(Date)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Not equal comparison operator.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">NextServiceFilterCallback</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></dt>\n<dd>\n<div class=\"block\">Callback used to chain service filters</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#not--\">not()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#not-boolean-\">not(boolean)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#not--\">not()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#not-boolean-\">not(boolean)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not--\">not()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Logical not.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Logical not.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#not-boolean-\">not(boolean)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Logical not.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#not--\">not()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Logical not.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#not-com.microsoft.windowsazure.mobileservices.table.query.Query-\">not(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Logical not.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#not-boolean-\">not(boolean)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Logical not.</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-12.html\">Prev Letter</a></li>\n<li><a href=\"index-14.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-13.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-13.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-14.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>O-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"O-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-13.html\">Prev Letter</a></li>\n<li><a href=\"index-15.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-14.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-14.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:O\">\n<!--   -->\n</a>\n<h2 class=\"title\">O</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html#onCompleted-com.google.gson.JsonElement-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted(JsonElement, Exception, ServiceFilterResponse)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiJsonOperationCallback</a></dt>\n<dd>\n<div class=\"block\">Method to call when the operation is completed</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html#onCompleted-E-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted(E, Exception, ServiceFilterResponse)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ApiOperationCallback</a></dt>\n<dd>\n<div class=\"block\">Method to call when the operation is completed</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html#onCompleted-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted(Exception, ServiceFilterResponse)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableDeleteCallback</a></dt>\n<dd>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html#onCompleted-com.google.gson.JsonElement-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted(JsonElement, Exception, ServiceFilterResponse)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableJsonQueryCallback</a></dt>\n<dd>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html#onCompleted-E-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted(E, Exception, ServiceFilterResponse)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableOperationCallback</a></dt>\n<dd>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html#onCompleted-java.util.List-int-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted(List&lt;E&gt;, int, Exception, ServiceFilterResponse)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">TableQueryCallback</a></dt>\n<dd>\n<div class=\"block\">Method to call if the operation finishes successfully</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html#onCompleted-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser-java.lang.Exception-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-\">onCompleted(MobileServiceUser, Exception, ServiceFilterResponse)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">UserAuthenticationCallback</a></dt>\n<dd>\n<div class=\"block\">Method to call if the authentication process finishes successfully</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#onCreate-SQLiteDatabase-\">onCreate(SQLiteDatabase)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html#onNext-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-\">onNext(ServiceFilterRequest)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">NextServiceFilterCallback</a></dt>\n<dd>\n<div class=\"block\">Method called to execute the next ServiceFilter in the pipeline</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#onPushComplete-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">onPushComplete(MobileServicePushCompletionResult)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></dt>\n<dd>\n<div class=\"block\">Handles push sync completion</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html#onPushComplete-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult-\">onPushComplete(MobileServicePushCompletionResult)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">SimpleSyncHandler</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html#onRegister-com.microsoft.windowsazure.mobileservices.notifications.Registration-java.lang.Exception-\">onRegister(Registration, Exception)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">RegistrationCallback</a></dt>\n<dd>\n<div class=\"block\">Method to execute when the register is finished</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html#onRegister-com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration-java.lang.Exception-\">onRegister(TemplateRegistration, Exception)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistrationCallback</a></dt>\n<dd>\n<div class=\"block\">Method to execute when the register is finished</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html#onResponse-com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse-java.lang.Exception-\">onResponse(ServiceFilterResponse, Exception)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\">ServiceFilterResponseCallback</a></dt>\n<dd>\n<div class=\"block\">Method to execute when the response is ready to be processed</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html#onUnregister-java.lang.Exception-\">onUnregister(Exception)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\">UnregisterCallback</a></dt>\n<dd>\n<div class=\"block\">Method to execute when the unregister is finished</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#onUpgrade-SQLiteDatabase-int-int-\">onUpgrade(SQLiteDatabase, int, int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">OperationErrorList</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></dt>\n<dd>\n<div class=\"block\">List of all table operation errors</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">OperationQueue</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></dt>\n<dd>\n<div class=\"block\">Queue of all table operations i.e.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">OperationQueue.Bookmark</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></dt>\n<dd>\n<div class=\"block\">Class that represents a push sync bookmark, and table operations within\n it</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#or--\">or()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#or--\">or()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or--\">or()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Conditional or.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Conditional or.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#or--\">or()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Conditional or.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#or-com.microsoft.windowsazure.mobileservices.table.query.Query-\">or(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Conditional or.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy(String, QueryOrder)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Creates a query with the specified order</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy(String, QueryOrder)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Creates a query with the specified order</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy(String, QueryOrder)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy(String, QueryOrder)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#orderBy-java.lang.String-com.microsoft.windowsazure.mobileservices.table.query.QueryOrder-\">orderBy(String, QueryOrder)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Adds a new order by statement</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-13.html\">Prev Letter</a></li>\n<li><a href=\"index-15.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-14.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-14.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-15.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>P-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"P-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-14.html\">Prev Letter</a></li>\n<li><a href=\"index-16.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-15.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-15.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:P\">\n<!--   -->\n</a>\n<h2 class=\"title\">P</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#parameter-java.lang.String-java.lang.String-\">parameter(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Adds a new user-defined parameter to the query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#parameter-java.lang.String-java.lang.String-\">parameter(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Adds a new user-defined parameter to the query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#parameter-java.lang.String-java.lang.String-\">parameter(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\">Row Operations</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#parameter-java.lang.String-java.lang.String-\">parameter(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\">Row Operations</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#parameter-java.lang.String-java.lang.String-\">parameter(String, String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Adds a new user-defined parameter to the query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#parse-int-\">parse(int)</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></dt>\n<dd>\n<div class=\"block\">Return the TableOperationKind with the provided int value</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#parse-int-\">parse(int)</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></dt>\n<dd>\n<div class=\"block\">Return the MobileServicePushStatus with the provided int value</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html#parseResults-com.google.gson.JsonElement-com.google.gson.Gson-java.lang.Class-\">parseResults(JsonElement, Gson, Class&lt;E&gt;)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">JsonEntityParser</a></dt>\n<dd>\n<div class=\"block\">Parses the JSON object to a typed list</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html#peek--\">peek()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a></dt>\n<dd>\n<div class=\"block\">Peek the next bookmarked table operation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#peek--\">peek()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></dt>\n<dd>\n<div class=\"block\">Peek the next table operation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#pull-com.microsoft.windowsazure.mobileservices.table.query.Query-\">pull(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></dt>\n<dd>\n<div class=\"block\">Performs a query against the remote table and stores results.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#pull-com.microsoft.windowsazure.mobileservices.table.query.Query-\">pull(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></dt>\n<dd>\n<div class=\"block\">Performs a query against the remote table and stores results.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#purge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">purge(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></dt>\n<dd>\n<div class=\"block\">Performs a query against the local table and deletes the results.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#purge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">purge(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></dt>\n<dd>\n<div class=\"block\">Performs a query against the local table and deletes the results.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#push--\">push()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></dt>\n<dd>\n<div class=\"block\">Pushes all pending operations up to the remote store.</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-14.html\">Prev Letter</a></li>\n<li><a href=\"index-16.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-15.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-15.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-16.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Q-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Q-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-15.html\">Prev Letter</a></li>\n<li><a href=\"index-17.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-16.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-16.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:Q\">\n<!--   -->\n</a>\n<h2 class=\"title\">Q</h2>\n<dl>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Query</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></dt>\n<dd>\n<div class=\"block\">Interface that represents a query to a table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">query(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Group query as a single argument.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryException</span></a> - Exception in <a href=\"../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html#QueryException-java.lang.String-java.lang.Throwable-\">QueryException(String, Throwable)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryException</a></dt>\n<dd>\n<div class=\"block\">Creates a new QueryException with a detail message and a cause</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html#QueryException-java.lang.String-\">QueryException(String)</a></span> - Constructor for exception com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryException</a></dt>\n<dd>\n<div class=\"block\">Creates a new QueryException with a detail message</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryNodeSQLWriter</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></dt>\n<dd>\n<div class=\"block\">Query node visitor used to generate SQL filter.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryODataWriter</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html#QueryODataWriter--\">QueryODataWriter()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryODataWriter</a></dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryOperations</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></dt>\n<dd>\n<div class=\"block\">Class used to create query operations</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#QueryOperations--\">QueryOperations()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryOrder</span></a> - Enum in <a href=\"../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></dt>\n<dd>\n<div class=\"block\">Sort order values</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QuerySQLWriter</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#QuerySQLWriter--\">QuerySQLWriter()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QuerySQLWriter</a></dt>\n<dd>&nbsp;</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-15.html\">Prev Letter</a></li>\n<li><a href=\"index-17.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-16.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-16.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-17.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>R-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"R-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-16.html\">Prev Letter</a></li>\n<li><a href=\"index-18.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-17.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-17.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:R\">\n<!--   -->\n</a>\n<h2 class=\"title\">R</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></dt>\n<dd>\n<div class=\"block\">Retrieve results from the local store.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></dt>\n<dd>\n<div class=\"block\">Retrieve results from the local table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#read-com.microsoft.windowsazure.mobileservices.table.query.Query-\">read(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></dt>\n<dd>\n<div class=\"block\">Retrieve results from the local table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#register-java.lang.String-java.lang.String:A-\">register(String, String[])</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></dt>\n<dd>\n<div class=\"block\">Registers the client for native notifications with the specified tags</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#register-java.lang.String-java.lang.String:A-com.microsoft.windowsazure.mobileservices.notifications.RegistrationCallback-\">register(String, String[], RegistrationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#register-java.lang.String-java.lang.String:A-\"><code>MobileServicePush.register(String pnsHandle, String[] tags)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#registerDeserializer-java.lang.reflect.Type-com.google.gson.JsonDeserializer-\">registerDeserializer(Type, JsonDeserializer&lt;T&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Registers a JsonDeserializer for the specified type</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#registerSerializer-java.lang.reflect.Type-com.google.gson.JsonSerializer-\">registerSerializer(Type, JsonSerializer&lt;T&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Registers a JsonSerializer for the specified type</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-\">registerTemplate(String, String, String, String[])</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></dt>\n<dd>\n<div class=\"block\">Registers the client for template notifications with the specified tags</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistrationCallback-\">registerTemplate(String, String, String, String[], TemplateRegistrationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#registerTemplate-java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-\"><code>MobileServicePush.registerTemplate(String pnsHandle, String\n             templateName, String template, String[] tags)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Registration</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">RegistrationCallback</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></dt>\n<dd>\n<div class=\"block\">Callback to invoke after register the template</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">RegistrationGoneException</span></a> - Exception in <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></dt>\n<dd>\n<div class=\"block\">Represents an exception when registration is gone</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">RemoteTableOperationProcessor</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></dt>\n<dd>\n<div class=\"block\">Processes a table operation against a remote store.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.MobileServiceClient-com.google.gson.JsonObject-\">RemoteTableOperationProcessor(MobileServiceClient, JsonObject)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a></dt>\n<dd>\n<div class=\"block\">Constructor for RemoteTableOperationProcessor</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#removeHeader-java.lang.String-\">removeHeader(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></dt>\n<dd>\n<div class=\"block\">Remove Header from the request</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#removeHeader-java.lang.String-\">removeHeader(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#removeInlineCount--\">removeInlineCount()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#removeInlineCount--\">removeInlineCount()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#removeInlineCount--\">removeInlineCount()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Set the inlinecount property to false.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace(Query, Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace(String, String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace(Query, Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace(String, String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace(Query, Query, Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace(String, String, String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#replace-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">replace(Query, Query, Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#replace-java.lang.String-java.lang.String-java.lang.String-\">replace(String, String, String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Finds the second string parameter in the first parameter string value and\n replaces it with the third parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#request-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-\">request(String, byte[], String, List&lt;&lt;any&gt;&gt;, List&lt;&lt;any&gt;&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceHttpClient</a></dt>\n<dd>\n<div class=\"block\">Makes a request over HTTP</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#request-java.lang.String-java.lang.String-java.lang.String-java.util.List-java.util.List-java.util.EnumSet-\">request(String, String, String, List&lt;&lt;any&gt;&gt;, List&lt;&lt;any&gt;&gt;, EnumSet&lt;MobileServiceFeatures&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceHttpClient</a></dt>\n<dd>\n<div class=\"block\">Makes a request over HTTP</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#request-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-java.util.EnumSet-\">request(String, byte[], String, List&lt;&lt;any&gt;&gt;, List&lt;&lt;any&gt;&gt;, EnumSet&lt;MobileServiceFeatures&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceHttpClient</a></dt>\n<dd>\n<div class=\"block\">Makes a request over HTTP</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">RequestAsyncTask</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></dt>\n<dd>\n<div class=\"block\">Default implementation for performing requests using AsyncTask</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html#RequestAsyncTask-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection-\">RequestAsyncTask(ServiceFilterRequest, MobileServiceConnection)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">RequestAsyncTask</a></dt>\n<dd>\n<div class=\"block\">Constructor that specifies request and connection</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#round-com.microsoft.windowsazure.mobileservices.table.query.Query-\">round(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The nearest integral value to the parameter value.</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-16.html\">Prev Letter</a></li>\n<li><a href=\"index-18.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-17.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-17.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-18.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>S-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"S-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-17.html\">Prev Letter</a></li>\n<li><a href=\"index-19.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-18.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-18.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:S\">\n<!--   -->\n</a>\n<h2 class=\"title\">S</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#second-java.lang.String-\">second(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#second-java.lang.String-\">second(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The second component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#second-java.lang.String-\">second(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The second component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#second-com.microsoft.windowsazure.mobileservices.table.query.Query-\">second(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The second component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#second-java.lang.String-\">second(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The second component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#select-java.lang.String...-\">select(String...)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Specifies the fields to retrieve</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#select-java.lang.String...-\">select(String...)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Specifies the fields to retrieve</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#select-java.lang.String...-\">select(String...)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#select-java.lang.String...-\">select(String...)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#select-java.lang.String...-\">select(String...)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Specifies the fields to retrieve</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html#serialize-java.util.Date-java.lang.reflect.Type-com.google.gson.JsonSerializationContext-\">serialize(Date, Type, JsonSerializationContext)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">DateSerializer</a></dt>\n<dd>\n<div class=\"block\">Serializes a Date to a JsonElement containing a ISO-8601 formatted date</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html#serialize-java.util.Date-\">serialize(Date)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">DateSerializer</a></dt>\n<dd>\n<div class=\"block\">Serializes a Date object to an ISO-8601 formatted date string</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html#serialize-java.lang.Long-java.lang.reflect.Type-com.google.gson.JsonSerializationContext-\">serialize(Long, Type, JsonSerializationContext)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">LongSerializer</a></dt>\n<dd>\n<div class=\"block\">Serializes a Long instance to a JsonElement, verifying the maximum and\n minimum allowed values</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilter</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></dt>\n<dd>\n<div class=\"block\">The service filter can be used to manipulate requests and responses in the\n HTTP pipeline used by the MobileServiceClient.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilterRequest</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></dt>\n<dd>\n<div class=\"block\">Represents an HTTP request that can be manipulated by ServiceFilters</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilterRequestImpl</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></dt>\n<dd>\n<div class=\"block\">ServiceFilterRequest implementation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#ServiceFilterRequestImpl-HttpRequestBase-com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory-\">ServiceFilterRequestImpl(HttpRequestBase, AndroidHttpClientFactory)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dt>\n<dd>\n<div class=\"block\">Constructor</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilterResponse</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></dt>\n<dd>\n<div class=\"block\">Represents an HTTP response that can be manipulated by ServiceFilters</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">ServiceFilterResponseCallback</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></dt>\n<dd>\n<div class=\"block\">Callback to invoke after processing the ServiceFilters and executing the\n request</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilterResponseImpl</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></dt>\n<dd>\n<div class=\"block\">ServiceFilterResponse implementation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html#ServiceFilterResponseImpl-HttpResponse-\">ServiceFilterResponseImpl(HttpResponse)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponseImpl</a></dt>\n<dd>\n<div class=\"block\">Constructor</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#setAndroidHttpClientFactory-com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory-\">setAndroidHttpClientFactory(AndroidHttpClientFactory)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Sets the AndroidHttpClientFactory</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html#setAuthenticationToken-java.lang.String-\">setAuthenticationToken(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></dt>\n<dd>\n<div class=\"block\">Sets the authentication token for the user</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#setContent-java.lang.String-\">setContent(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></dt>\n<dd>\n<div class=\"block\">Sets request content</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#setContent-byte:A-\">setContent(byte[])</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></dt>\n<dd>\n<div class=\"block\">Sets request content</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#setContent-byte:A-\">setContent(byte[])</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#setContent-java.lang.String-\">setContent(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#setContext-Context-\">setContext(Context)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Sets the Context object for the MobileServiceClient</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#setCurrentUser-com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser-\">setCurrentUser(MobileServiceUser)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Sets a user to authenticate the Mobile Service operations</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#setGsonBuilder-com.google.gson.GsonBuilder-\">setGsonBuilder(GsonBuilder)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Sets the GsonBuilder used to in JSON Serialization/Deserialization</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#setInternalError-java.lang.Throwable-\">setInternalError(Throwable)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></dt>\n<dd>\n<div class=\"block\">Sets the internal error</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html#setItem-java.lang.Object-\">setItem(Object)</a></span> - Method in exception com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedException</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#setItem-com.google.gson.JsonObject-\">setItem(JsonObject)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">LocalTableOperationProcessor</a></dt>\n<dd>\n<div class=\"block\">Sets the item to process</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#setItem-com.google.gson.JsonObject-\">setItem(JsonObject)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a></dt>\n<dd>\n<div class=\"block\">Sets the item to process</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#setOperationErrors-java.util.List-\">setOperationErrors(List&lt;TableOperationError&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></dt>\n<dd>\n<div class=\"block\">Sets the list of table operation errors</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">setQueryNode(QueryNode)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">setQueryNode(QueryNode)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#setQueryNode-com.microsoft.windowsazure.mobileservices.table.query.QueryNode-\">setQueryNode(QueryNode)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Sets the root node of the query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#setStatus-com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushStatus-\">setStatus(MobileServicePushStatus)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></dt>\n<dd>\n<div class=\"block\">Sets the push status</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#setSystemProperties-java.util.EnumSet-\">setSystemProperties(EnumSet&lt;MobileServiceSystemProperty&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#setSystemProperties-java.util.EnumSet-\">setSystemProperties(EnumSet&lt;MobileServiceSystemProperty&gt;)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></dt>\n<dd>\n<div class=\"block\">Sets the set of enabled system properties</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#setTable-com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable-\">setTable(MobileServiceJsonTable)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\">Sets the MobileServiceJsonTable to query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#setTable-com.microsoft.windowsazure.mobileservices.table.MobileServiceTable-\">setTable(MobileServiceTable&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\">Sets the MobileServiceTable<E> to query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#setUrl-java.lang.String-\">setUrl(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></dt>\n<dd>\n<div class=\"block\">Sets the request's URL</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#setUrl-java.lang.String-\">setUrl(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html#setUserId-java.lang.String-\">setUserId(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></dt>\n<dd>\n<div class=\"block\">Sets the user's id</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html#setValue-com.google.gson.JsonObject-\">setValue(JsonObject)</a></span> - Method in exception com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedExceptionBase</a></dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">SimpleSyncHandler</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></dt>\n<dd>\n<div class=\"block\">Basic implementation of MobileServiceSyncHandler</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html#SimpleSyncHandler--\">SimpleSyncHandler()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">SimpleSyncHandler</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#skip-int-\">skip(int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#skip-int-\">skip(int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#skip-int-\">skip(int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#skip-int-\">skip(int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#skip-int-\">skip(int)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Sets the number of records to skip over a given number of elements in a\n sequence and then return the remainder.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">SQLiteLocalStore</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></dt>\n<dd>\n<div class=\"block\">Implements MobileServiceLocalStore backed by an SQLite DB</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#SQLiteLocalStore-Context-java.lang.String-CursorFactory-int-\">SQLiteLocalStore(Context, String, CursorFactory, int)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></dt>\n<dd>\n<div class=\"block\">Constructor for SQLiteLocalStore</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#SQLiteLocalStore-Context-java.lang.String-CursorFactory-int-DatabaseErrorHandler-\">SQLiteLocalStore(Context, String, CursorFactory, int, DatabaseErrorHandler)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></dt>\n<dd>\n<div class=\"block\">Constructor for SQLiteLocalStore</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#start-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-\">start(ServiceFilterRequest)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a></dt>\n<dd>\n<div class=\"block\">Execute a request-response operation with a Mobile Service</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html#start-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback-\">start(ServiceFilterRequest, ServiceFilterResponseCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceConnection</a></dt>\n<dd>\n<div class=\"block\">Execute a request-response operation with a Mobile Service</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith(Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#startsWith-java.lang.String-java.lang.String-\">startsWith(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith(Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#startsWith-java.lang.String-java.lang.String-\">startsWith(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith(Query, Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#startsWith-java.lang.String-java.lang.String-\">startsWith(String, String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#startsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">startsWith(Query, Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#startsWith-java.lang.String-java.lang.String-\">startsWith(String, String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Whether the beginning of the first parameter values matches the second\n parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#sub--\">sub()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#sub-java.lang.Number-\">sub(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#sub--\">sub()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#sub-java.lang.Number-\">sub(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub--\">sub()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Subtract operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Subtract operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#sub-java.lang.Number-\">sub(Number)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Subtract operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#sub--\">sub()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Subtract operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#sub-com.microsoft.windowsazure.mobileservices.table.query.Query-\">sub(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Subtract operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#sub-java.lang.Number-\">sub(Number)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Subtract operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString(Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-java.lang.String-int-\">subString(String, int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString(Query, Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subString-java.lang.String-int-int-\">subString(String, int, int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString(Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-java.lang.String-int-\">subString(String, int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString(Query, Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subString-java.lang.String-int-int-\">subString(String, int, int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString(Query, Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-\">subString(String, int)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString(Query, Query, Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subString-java.lang.String-int-int-\">subString(String, int, int)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString(Query, Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-java.lang.String-int-\">subString(String, int)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subString(Query, Query, Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subString-java.lang.String-int-int-\">subString(String, int, int)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">String value starting at the character index specified by the second\n parameter value in the first parameter string value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf(Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf(Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf(Query, Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf(String, String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Whether the string parameter occurs in the field</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subStringOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">subStringOf(Query, Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Whether the first parameter string value occurs in the second parameter\n string value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#subStringOf-java.lang.String-java.lang.String-\">subStringOf(String, String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Whether the string parameter occurs in the field</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-17.html\">Prev Letter</a></li>\n<li><a href=\"index-19.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-18.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-18.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-19.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>T-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"T-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-18.html\">Prev Letter</a></li>\n<li><a href=\"index-20.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-19.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-19.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:T\">\n<!--   -->\n</a>\n<h2 class=\"title\">T</h2>\n<dl>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableDeleteCallback</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></dt>\n<dd>\n<div class=\"block\">Callback to invoke after executing a delete operation</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableJsonOperationCallback</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></dt>\n<dd>\n<div class=\"block\">Callback used after a TableOperation is executed using JSON</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableJsonQueryCallback</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></dt>\n<dd>\n<div class=\"block\">Callback used after a query is executed using JSON</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#tableName-java.lang.String-\">tableName(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#tableName-java.lang.String-\">tableName(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#tableName-java.lang.String-\">tableName(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Sets the table name;</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#tableName-java.lang.String-\">tableName(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Creates Query with the requested table name.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperation</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></dt>\n<dd>\n<div class=\"block\">Interface representing a table operation against remote table.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableOperationCallback</span></a>&lt;<a href=\"../com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"type parameter in TableOperationCallback\">E</a>&gt; - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></dt>\n<dd>\n<div class=\"block\">Callback used after a TableOperation is executed</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperationCollapser</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></dt>\n<dd>\n<div class=\"block\">Class that encapsulates collapse logic for new table operation.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#TableOperationCollapser-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">TableOperationCollapser(TableOperation)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationCollapser</a></dt>\n<dd>\n<div class=\"block\">Constructor for TableOperationCollapser</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperationError</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></dt>\n<dd>\n<div class=\"block\">Class representing a table operation error against remote table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#TableOperationError-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind-java.lang.String-java.lang.String-com.google.gson.JsonObject-java.lang.String-java.lang.Integer-java.lang.String-com.google.gson.JsonObject-\">TableOperationError(TableOperationKind, String, String, JsonObject, String, Integer, String, JsonObject)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></dt>\n<dd>\n<div class=\"block\">Constructor for TableOperationError</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperationKind</span></a> - Enum in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></dt>\n<dd>\n<div class=\"block\">Enumeration for kinds of table operations.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperationVisitor</span></a>&lt;<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"type parameter in TableOperationVisitor\">E</a>&gt; - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></dt>\n<dd>\n<div class=\"block\">Interface of a table operation visitor used to extend functionality.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableQueryCallback</span></a>&lt;<a href=\"../com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"type parameter in TableQueryCallback\">E</a>&gt; - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></dt>\n<dd>\n<div class=\"block\">Callback used after a query is executed</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">TemplateRegistration</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></dt>\n<dd>\n<div class=\"block\">Represents a template registration</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">TemplateRegistrationCallback</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></dt>\n<dd>\n<div class=\"block\">Callback to invoke after register the template</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\">String Operators</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toLower-java.lang.String-\">toLower(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\">String Operators</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toLower-java.lang.String-\">toLower(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toLower-java.lang.String-\">toLower(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toLower-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toLower(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toLower-java.lang.String-\">toLower(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">String value with the contents of the parameter value converted to lower\n case.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#top-int-\">top(int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Sets the number of records to return</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#top-int-\">top(int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Sets the number of records to return</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#top-int-\">top(int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#top-int-\">top(int)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#top-int-\">top(int)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Sets the number of records to return</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#toUpper-java.lang.String-\">toUpper(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#toUpper-java.lang.String-\">toUpper(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#toUpper-java.lang.String-\">toUpper(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toUpper-com.microsoft.windowsazure.mobileservices.table.query.Query-\">toUpper(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#toUpper-java.lang.String-\">toUpper(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">String value with the contents of the parameter value converted to upper\n case</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#trim-java.lang.String-\">trim(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#trim-java.lang.String-\">trim(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#trim-java.lang.String-\">trim(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#trim-com.microsoft.windowsazure.mobileservices.table.query.Query-\">trim(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#trim-java.lang.String-\">trim(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">String value with the contents of the parameter value with all leading\n and trailing white-space characters removed.</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-18.html\">Prev Letter</a></li>\n<li><a href=\"index-20.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-19.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-19.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-2.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>B-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"B-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-1.html\">Prev Letter</a></li>\n<li><a href=\"index-3.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-2.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-2.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:B\">\n<!--   -->\n</a>\n<h2 class=\"title\">B</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#bookmark--\">bookmark()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></dt>\n<dd>\n<div class=\"block\">Adds a new push sync bookmark</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">BuildConfig</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/BuildConfig.html#BuildConfig--\">BuildConfig()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">BuildConfig</a></dt>\n<dd>&nbsp;</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-1.html\">Prev Letter</a></li>\n<li><a href=\"index-3.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-2.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-2.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-20.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>U-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"U-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-19.html\">Prev Letter</a></li>\n<li><a href=\"index-21.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-20.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-20.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:U\">\n<!--   -->\n</a>\n<h2 class=\"title\">U</h2>\n<dl>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">UnaryOperatorKind</span></a> - Enum in <a href=\"../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></dt>\n<dd>\n<div class=\"block\">Enumeration of kinds of unary operators.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#unbookmark-com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue.Bookmark-\">unbookmark(OperationQueue.Bookmark)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></dt>\n<dd>\n<div class=\"block\">Remove a push sync bookmark</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html#unLock-com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary.MultiLock-\">unLock(MultiLockDictionary.MultiLock&lt;T&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.threading.<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiLockDictionary</a></dt>\n<dd>\n<div class=\"block\">Release the provided lock</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#unLockRead-com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock-\">unLockRead(MultiReadWriteLockDictionary.MultiReadWriteLock&lt;T&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.threading.<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary</a></dt>\n<dd>\n<div class=\"block\">Release the provided read lock</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html#unLockWrite-com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock-\">unLockWrite(MultiReadWriteLockDictionary.MultiReadWriteLock&lt;T&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.threading.<a href=\"../com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\">MultiReadWriteLockDictionary</a></dt>\n<dd>\n<div class=\"block\">Release the provided write lock</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregister--\">unregister()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></dt>\n<dd>\n<div class=\"block\">Unregisters the client for native notifications</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregister-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">unregister(UnregisterCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregister--\"><code>MobileServicePush.unregister()</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterAll-java.lang.String-\">unregisterAll(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></dt>\n<dd>\n<div class=\"block\">Unregisters the client for all notifications</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterAll-java.lang.String-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">unregisterAll(String, UnregisterCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterAll-java.lang.String-\"><code>MobileServicePush.unregisterAll(String pnsHandle)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">UnregisterCallback</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></dt>\n<dd>\n<div class=\"block\">Callback to invoke after unregister</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterTemplate-java.lang.String-\">unregisterTemplate(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></dt>\n<dd>\n<div class=\"block\">Unregisters the client for template notifications of a specific template</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterTemplate-java.lang.String-com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback-\">unregisterTemplate(String, UnregisterCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">MobileServicePush</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html#unregisterTemplate-java.lang.String-\"><code>MobileServicePush.unregisterTemplate(String templateName)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#update-com.google.gson.JsonObject-\">update(JsonObject)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Updates an element from a Mobile Service Table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#update-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">update(JsonObject, TableJsonOperationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final JsonObject element)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#update-com.google.gson.JsonObject-java.util.List-\">update(JsonObject, List&lt;&lt;any&gt;&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Updates an element from a Mobile Service Table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#update-com.google.gson.JsonObject-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">update(JsonObject, List&lt;&lt;any&gt;&gt;, TableJsonOperationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final JsonObject element, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#update-E-\">update(E)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Updates an entity from a Mobile Service Table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#update-E-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">update(E, TableOperationCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final E element)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#update-E-java.util.List-\">update(E, List&lt;&lt;any&gt;&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Updates an entity from a Mobile Service Table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#update-E-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">update(E, List&lt;&lt;any&gt;&gt;, TableOperationCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>update(final E element, final List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#update-com.google.gson.JsonObject-\">update(JsonObject)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></dt>\n<dd>\n<div class=\"block\">Update an item in the local table and enqueue the operation to be\n synchronized on context push.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#update-E-\">update(E)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></dt>\n<dd>\n<div class=\"block\">Update an item in the local table and enqueue the operation to be\n synchronized on context push.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">UpdateOperation</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></dt>\n<dd>\n<div class=\"block\">Class representing an update operation against remote table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#UpdateOperation-java.lang.String-java.lang.String-\">UpdateOperation(String, String)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></dt>\n<dd>\n<div class=\"block\">Constructor for UpdateOperation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#upsert-java.lang.String-com.google.gson.JsonObject-\">upsert(String, JsonObject)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></dt>\n<dd>\n<div class=\"block\">Insert or Update an item in the local store.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#upsert-java.lang.String-com.google.gson.JsonObject-\">upsert(String, JsonObject)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">UserAuthenticationCallback</span></a> - Interface in <a href=\"../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></dt>\n<dd>\n<div class=\"block\">Callback for the user authentication process</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#UTF8_ENCODING\">UTF8_ENCODING</a></span> - Static variable in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">UTF-8 encoding</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-19.html\">Prev Letter</a></li>\n<li><a href=\"index-21.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-20.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-20.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-21.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>V-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"V-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-20.html\">Prev Letter</a></li>\n<li><a href=\"index-22.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-21.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-21.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:V\">\n<!--   -->\n</a>\n<h2 class=\"title\">V</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#val-java.lang.Number-\">val(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#val-boolean-\">val(boolean)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#val-java.lang.String-\">val(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#val-java.util.Date-\">val(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#val-java.lang.Number-\">val(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#val-boolean-\">val(boolean)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#val-java.lang.String-\">val(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#val-java.util.Date-\">val(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.Number-\">val(Number)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Specifies a numeric value</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-boolean-\">val(boolean)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Specifies a boolean value</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.lang.String-\">val(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Specifies a string value</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#val-java.util.Date-\">val(Date)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Specifies a date value</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#val-java.lang.Number-\">val(Number)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Creates a Query representing a numeric value</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#val-boolean-\">val(boolean)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Creates a Query representing a boolean value</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#val-java.lang.String-\">val(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Creates a Query representing a string value</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#val-java.util.Date-\">val(Date)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Creates a Query representing a date value</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html#valueOf-java.lang.String-\">valueOf(String)</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a></dt>\n<dd>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#valueOf-java.lang.String-\">valueOf(String)</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a></dt>\n<dd>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html#valueOf-java.lang.String-\">valueOf(String)</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a></dt>\n<dd>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html#valueOf-java.lang.String-\">valueOf(String)</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a></dt>\n<dd>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html#valueOf-java.lang.String-\">valueOf(String)</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a></dt>\n<dd>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html#valueOf-java.lang.String-\">valueOf(String)</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a></dt>\n<dd>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#valueOf-java.lang.String-\">valueOf(String)</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></dt>\n<dd>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#valueOf-java.lang.String-\">valueOf(String)</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></dt>\n<dd>\n<div class=\"block\">Returns the enum constant of this type with the specified name.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html#values--\">values()</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceAuthenticationProvider</a></dt>\n<dd>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#values--\">values()</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a></dt>\n<dd>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html#values--\">values()</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\">MobileServiceSystemProperty</a></dt>\n<dd>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html#values--\">values()</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">QueryOrder</a></dt>\n<dd>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html#values--\">values()</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\">UnaryOperatorKind</a></dt>\n<dd>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html#values--\">values()</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">ColumnDataType</a></dt>\n<dd>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#values--\">values()</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></dt>\n<dd>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#values--\">values()</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></dt>\n<dd>\n<div class=\"block\">Returns an array containing the constants of this enum type, in\nthe order they are declared.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html#visit-com.microsoft.windowsazure.mobileservices.table.query.ConstantNode-\">visit(ConstantNode)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryNodeSQLWriter</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html#visit-com.microsoft.windowsazure.mobileservices.table.query.FieldNode-\">visit(FieldNode)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryNodeSQLWriter</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html#visit-com.microsoft.windowsazure.mobileservices.table.query.UnaryOperatorNode-\">visit(UnaryOperatorNode)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryNodeSQLWriter</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html#visit-com.microsoft.windowsazure.mobileservices.table.query.BinaryOperatorNode-\">visit(BinaryOperatorNode)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryNodeSQLWriter</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html#visit-com.microsoft.windowsazure.mobileservices.table.query.FunctionCallNode-\">visit(FunctionCallNode)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryNodeSQLWriter</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit(InsertOperation)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">LocalTableOperationProcessor</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit(UpdateOperation)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">LocalTableOperationProcessor</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit(DeleteOperation)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">LocalTableOperationProcessor</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit(InsertOperation)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit(UpdateOperation)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit(DeleteOperation)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit(InsertOperation)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationCollapser</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit(UpdateOperation)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationCollapser</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit(DeleteOperation)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationCollapser</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation-\">visit(InsertOperation)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a></dt>\n<dd>\n<div class=\"block\">Visit an insert operation.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation-\">visit(UpdateOperation)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a></dt>\n<dd>\n<div class=\"block\">Visit an update operation.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html#visit-com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation-\">visit(DeleteOperation)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a></dt>\n<dd>\n<div class=\"block\">Visit a delete operation.</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-20.html\">Prev Letter</a></li>\n<li><a href=\"index-22.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-21.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-21.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-22.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>W-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"W-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-21.html\">Prev Letter</a></li>\n<li><a href=\"index-23.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-22.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-22.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:W\">\n<!--   -->\n</a>\n<h2 class=\"title\">W</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#where--\">where()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Starts a filter to query the table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#where-com.microsoft.windowsazure.mobileservices.table.query.Query-\">where(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Starts a filter to query the table with an existing filter</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#where--\">where()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Starts a filter to query the table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#where-com.microsoft.windowsazure.mobileservices.table.query.Query-\">where(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Starts a filter to query the table with an existing filter</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#withFilter-com.microsoft.windowsazure.mobileservices.http.ServiceFilter-\">withFilter(ServiceFilter)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Adds a new filter to the MobileServiceClient</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-21.html\">Prev Letter</a></li>\n<li><a href=\"index-23.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-22.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-22.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-23.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>X-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"X-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-22.html\">Prev Letter</a></li>\n<li><a href=\"index-24.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-23.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-23.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:X\">\n<!--   -->\n</a>\n<h2 class=\"title\">X</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html#X_ZUMO_FEATURES\">X_ZUMO_FEATURES</a></span> - Static variable in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">MobileServiceHttpClient</a></dt>\n<dd>\n<div class=\"block\">Request header to indicate the features in this SDK used by the request.</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-22.html\">Prev Letter</a></li>\n<li><a href=\"index-24.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-23.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-23.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-24.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Y-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Y-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-23.html\">Prev Letter</a></li>\n<li>Next Letter</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-24.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-24.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:Y\">\n<!--   -->\n</a>\n<h2 class=\"title\">Y</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\">Date Operators</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#year-java.lang.String-\">year(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\">Date Operators</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#year-java.lang.String-\">year(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The year component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#year-java.lang.String-\">year(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The year component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#year-com.microsoft.windowsazure.mobileservices.table.query.Query-\">year(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The year component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#year-java.lang.String-\">year(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The year component value of the parameter value.</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-23.html\">Prev Letter</a></li>\n<li>Next Letter</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-24.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-24.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-3.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>C-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"C-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-2.html\">Prev Letter</a></li>\n<li><a href=\"index-4.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-3.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-3.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:C\">\n<!--   -->\n</a>\n<h2 class=\"title\">C</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ceiling-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ceiling(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The smallest integral value greater than or equal to the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#clear--\">clear()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></dt>\n<dd>\n<div class=\"block\">Empties the list of pending table operation errors</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">ColumnDataType</span></a> - Enum in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></dt>\n<dd>\n<div class=\"block\">Enumeration of available column data types.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a> - package com.microsoft.windowsazure.mobileservices</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a> - package com.microsoft.windowsazure.mobileservices.authentication</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a> - package com.microsoft.windowsazure.mobileservices.http</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a> - package com.microsoft.windowsazure.mobileservices.notifications</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a> - package com.microsoft.windowsazure.mobileservices.table</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a> - package com.microsoft.windowsazure.mobileservices.table.query</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.serialization</a> - package com.microsoft.windowsazure.mobileservices.table.serialization</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a> - package com.microsoft.windowsazure.mobileservices.table.sync</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a> - package com.microsoft.windowsazure.mobileservices.table.sync.localstore</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a> - package com.microsoft.windowsazure.mobileservices.table.sync.operations</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a> - package com.microsoft.windowsazure.mobileservices.table.sync.push</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a> - package com.microsoft.windowsazure.mobileservices.table.sync.queue</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a> - package com.microsoft.windowsazure.mobileservices.table.sync.synchandler</dt>\n<dd>&nbsp;</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a> - package com.microsoft.windowsazure.mobileservices.threading</dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat(Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat(Query, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat(Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat(Query, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat(Query, Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat(Query, String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">concat(Query, Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#concat-com.microsoft.windowsazure.mobileservices.table.query.Query-java.lang.String-\">concat(Query, String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">String value which is the first and second parameter values merged\n together with the first parameter value coming first in the result.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#countPending--\">countPending()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></dt>\n<dd>\n<div class=\"block\">Returns the count of pending table operation errors</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#countPending--\">countPending()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></dt>\n<dd>\n<div class=\"block\">Returns the count of pending table operation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#countPending-java.lang.String-\">countPending(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></dt>\n<dd>\n<div class=\"block\">Returns the count of pending table operation for a specific table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#create-java.lang.String-java.lang.String-java.lang.String-java.util.Date-\">create(String, String, String, Date)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></dt>\n<dd>\n<div class=\"block\">Create a new DeleteOperation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#create-java.lang.String-java.lang.String-java.lang.String-java.util.Date-\">create(String, String, String, Date)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></dt>\n<dd>\n<div class=\"block\">Create a new InsertOperation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#create-java.lang.String-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind-java.lang.String-java.lang.String-com.google.gson.JsonObject-java.lang.String-java.lang.Integer-java.lang.String-com.google.gson.JsonObject-java.util.Date-\">create(String, TableOperationKind, String, String, JsonObject, String, Integer, String, JsonObject, Date)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></dt>\n<dd>\n<div class=\"block\">Creates a new table operation error</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#create-java.lang.String-java.lang.String-java.lang.String-java.util.Date-\">create(String, String, String, Date)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></dt>\n<dd>\n<div class=\"block\">Create a new UpdateOperation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html#createAndroidHttpClient--\">createAndroidHttpClient()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a></dt>\n<dd>\n<div class=\"block\">Creates a new AndroidHttpClient</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html#createAndroidHttpClient--\">createAndroidHttpClient()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactoryImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#createConnection--\">createConnection()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Creates a MobileServiceConnection</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#createMobileServiceGsonBuilder--\">createMobileServiceGsonBuilder()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Creates a GsonBuilder with custom serializers to use with Microsoft Azure\n Mobile Services</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-2.html\">Prev Letter</a></li>\n<li><a href=\"index-4.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-3.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-3.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-4.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>D-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"D-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-3.html\">Prev Letter</a></li>\n<li><a href=\"index-5.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-4.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-4.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:D\">\n<!--   -->\n</a>\n<h2 class=\"title\">D</h2>\n<dl>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">DateSerializer</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.serialization</a></dt>\n<dd>\n<div class=\"block\">Date Serializer/Deserializer to make Mobile Services and Java dates\n compatible</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html#DateSerializer--\">DateSerializer()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">DateSerializer</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#day-java.lang.String-\">day(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#day-java.lang.String-\">day(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The day component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#day-java.lang.String-\">day(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The day component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#day-com.microsoft.windowsazure.mobileservices.table.query.Query-\">day(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The day component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#day-java.lang.String-\">day(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The day component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/BuildConfig.html#DEBUG\">DEBUG</a></span> - Static variable in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">BuildConfig</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#deepClone--\">deepClone()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#deepClone--\">deepClone()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#deepClone--\">deepClone()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Deep clone the Query instance</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#defineTable-java.lang.String-java.util.Map-\">defineTable(String, Map&lt;String, ColumnDataType&gt;)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></dt>\n<dd>\n<div class=\"block\">Defines a table to be created/updated on initialization</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#defineTable-java.lang.String-java.util.Map-\">defineTable(String, Map&lt;String, ColumnDataType&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#delete-java.lang.String-java.lang.String-\">delete(String, String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></dt>\n<dd>\n<div class=\"block\">Delete an item from the local store.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#delete-com.microsoft.windowsazure.mobileservices.table.query.Query-\">delete(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></dt>\n<dd>\n<div class=\"block\">Delete items from the local store.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#delete-java.lang.String-java.lang.String-\">delete(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#delete-com.microsoft.windowsazure.mobileservices.table.query.Query-\">delete(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#delete-com.google.gson.JsonObject-\">delete(JsonObject)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></dt>\n<dd>\n<div class=\"block\">Delete an item from the local table and enqueue the operation to be\n synchronized on context push.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#delete-java.lang.String-\">delete(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></dt>\n<dd>\n<div class=\"block\">Delete an item from the local table and enqueue the operation to be\n synchronized on context push.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#delete-E-\">delete(E)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></dt>\n<dd>\n<div class=\"block\">Delete an item from the local table and enqueue the operation to be\n synchronized on context push.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#delete-java.lang.String-\">delete(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></dt>\n<dd>\n<div class=\"block\">Delete an item from the local table and enqueue the operation to be\n synchronized on context push.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">DeleteOperation</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></dt>\n<dd>\n<div class=\"block\">Class representing a delete operation against remote table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#DeleteOperation-java.lang.String-java.lang.String-\">DeleteOperation(String, String)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></dt>\n<dd>\n<div class=\"block\">Constructor for DeleteOperation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html#dequeue--\">dequeue()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a></dt>\n<dd>\n<div class=\"block\">Dequeue the next bookmarked table operation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#dequeue--\">dequeue()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></dt>\n<dd>\n<div class=\"block\">Dequeue the next table operation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html#deserialize-com.google.gson.JsonElement-java.lang.reflect.Type-com.google.gson.JsonDeserializationContext-\">deserialize(JsonElement, Type, JsonDeserializationContext)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">DateSerializer</a></dt>\n<dd>\n<div class=\"block\">Deserializes a JsonElement containing an ISO-8601 formatted date</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html#deserialize-java.lang.String-\">deserialize(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"../com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\">DateSerializer</a></dt>\n<dd>\n<div class=\"block\">Deserializes an ISO-8601 formatted date</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#div--\">div()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#div-java.lang.Number-\">div(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#div--\">div()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#div-java.lang.Number-\">div(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div--\">div()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Divide operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Divide operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#div-java.lang.Number-\">div(Number)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Divide operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#div--\">div()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Divide operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#div-com.microsoft.windowsazure.mobileservices.table.query.Query-\">div(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Divide operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#div-java.lang.Number-\">div(Number)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Divide operator.</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-3.html\">Prev Letter</a></li>\n<li><a href=\"index-5.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-4.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-4.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-5.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>E-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"E-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-4.html\">Prev Letter</a></li>\n<li><a href=\"index-6.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-5.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-5.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:E\">\n<!--   -->\n</a>\n<h2 class=\"title\">E</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith(Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#endsWith-java.lang.String-java.lang.String-\">endsWith(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith(Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#endsWith-java.lang.String-java.lang.String-\">endsWith(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith(Query, Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#endsWith-java.lang.String-java.lang.String-\">endsWith(String, String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#endsWith-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">endsWith(Query, Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#endsWith-java.lang.String-java.lang.String-\">endsWith(String, String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Whether the end of the first parameter value matches the second parameter\n value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#enqueue-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">enqueue(TableOperation)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></dt>\n<dd>\n<div class=\"block\">Enqueue a new table operation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq--\">eq()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-java.lang.Number-\">eq(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-boolean-\">eq(boolean)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-java.lang.String-\">eq(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#eq-java.util.Date-\">eq(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq--\">eq()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-java.lang.Number-\">eq(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-boolean-\">eq(boolean)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-java.lang.String-\">eq(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#eq-java.util.Date-\">eq(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq--\">eq()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.Number-\">eq(Number)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-boolean-\">eq(boolean)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.lang.String-\">eq(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#eq-java.util.Date-\">eq(Date)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq--\">eq()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-com.microsoft.windowsazure.mobileservices.table.query.Query-\">eq(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-java.lang.Number-\">eq(Number)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-boolean-\">eq(boolean)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-java.lang.String-\">eq(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#eq-java.util.Date-\">eq(Date)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Equal comparison operator.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">ExecutableJsonQuery</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></dt>\n<dd>\n<div class=\"block\">Class that represents a query to a specific MobileServiceJsonTable instance</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ExecutableJsonQuery--\">ExecutableJsonQuery()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\">Creates an empty Query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ExecutableJsonQuery-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ExecutableJsonQuery(Query)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\">Creates Query<E> with an existing query as its only internal value</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">ExecutableQuery</span></a>&lt;<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"type parameter in ExecutableQuery\">E</a>&gt; - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></dt>\n<dd>\n<div class=\"block\">Class that represents a query to a specific MobileServiceTable<E> instance</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ExecutableQuery--\">ExecutableQuery()</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\">Creates an empty Query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ExecutableQuery-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ExecutableQuery(Query)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\">Creates Query<E> with an existing query as its only internal value</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#execute--\">execute()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></dt>\n<dd>\n<div class=\"block\">Executes the request</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#execute--\">execute()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute--\">execute()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">execute(TableJsonQueryCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute--\"><code>MobileServiceJsonTable.execute()</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">execute(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Retrieves a set of rows from the table using a query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">execute(Query, TableJsonQueryCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>execute(final Query query)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute--\">execute()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">execute(TableQueryCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute--\"><code>MobileServiceTable.execute()</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\">execute(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Executes a query to retrieve all the table rows</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">execute(Query, TableQueryCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#execute-com.microsoft.windowsazure.mobileservices.table.query.Query-\"><code>MobileServiceTable.execute(Query query)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#execute--\">execute()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\">Executes the query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#execute-com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback-\">execute(TableJsonQueryCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#execute--\"><code>ExecutableJsonQuery.execute()</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#execute--\">execute()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\">Executes the query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#execute-com.microsoft.windowsazure.mobileservices.table.TableQueryCallback-\">execute(TableQueryCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#execute--\"><code>ExecutableQuery.execute()</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html#executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">executeTableOperation(RemoteTableOperationProcessor, TableOperation)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a></dt>\n<dd>\n<div class=\"block\">Executes a table operation against a remote store</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html#executeTableOperation-com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor-com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation-\">executeTableOperation(RemoteTableOperationProcessor, TableOperation)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">SimpleSyncHandler</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html#executeTask--\">executeTask()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">RequestAsyncTask</a></dt>\n<dd>&nbsp;</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-4.html\">Prev Letter</a></li>\n<li><a href=\"index-6.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-5.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-5.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-6.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>F-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"F-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-5.html\">Prev Letter</a></li>\n<li><a href=\"index-7.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-6.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-6.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:F\">\n<!--   -->\n</a>\n<h2 class=\"title\">F</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#featuresToString-java.util.EnumSet-\">featuresToString(EnumSet&lt;MobileServiceFeatures&gt;)</a></span> - Static method in enum com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a></dt>\n<dd>\n<div class=\"block\">Returns a comma-separated list of feature codes which can be sent to\n the service in the features header.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#field-java.lang.String-\">field(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\">Query Operations</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#field-java.lang.String-\">field(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\">Query Operations</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#field-java.lang.String-\">field(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Specifies the field to use</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#field-java.lang.String-\">field(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Creates Query representing a field</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\">Math Functions</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\">Math Functions</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The largest integral value less than or equal to the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#floor-com.microsoft.windowsazure.mobileservices.table.query.Query-\">floor(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The largest integral value less than or equal to the parameter value.</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-5.html\">Prev Letter</a></li>\n<li><a href=\"index-7.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-6.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-6.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-7.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>G-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"G-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-6.html\">Prev Letter</a></li>\n<li><a href=\"index-8.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-7.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-7.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:G\">\n<!--   -->\n</a>\n<h2 class=\"title\">G</h2>\n<dl>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">GcmNativeRegistration</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></dt>\n<dd>\n<div class=\"block\">Represents GCM native registration</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">GcmTemplateRegistration</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></dt>\n<dd>\n<div class=\"block\">Represents GCM template registration</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge--\">ge()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>\n<div class=\"block\">Comparison Operators</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge-java.lang.Number-\">ge(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#ge-java.util.Date-\">ge(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge--\">ge()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>\n<div class=\"block\">Comparison Operators</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge-java.lang.Number-\">ge(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#ge-java.util.Date-\">ge(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge--\">ge()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.lang.Number-\">ge(Number)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#ge-java.util.Date-\">ge(Date)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge--\">ge()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge-com.microsoft.windowsazure.mobileservices.table.query.Query-\">ge(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge-java.lang.Number-\">ge(Number)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#ge-java.util.Date-\">ge(Date)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Greater than or equal comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#getAll--\">getAll()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></dt>\n<dd>\n<div class=\"block\">Returns the list of all pending table operation errors</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getAndroidHttpClientFactory--\">getAndroidHttpClientFactory()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Gets the AndroidHttpClientFactory</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getAppKey--\">getAppKey()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Returns the Mobile Service application key</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getAppUrl--\">getAppUrl()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Returns The Mobile Service URL</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html#getAuthenticationToken--\">getAuthenticationToken()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></dt>\n<dd>\n<div class=\"block\">Returns the authentication token for the user</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getClientItem--\">getClientItem()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></dt>\n<dd>\n<div class=\"block\">Gets the client item</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getContent--\">getContent()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></dt>\n<dd>\n<div class=\"block\">Gets the request's content</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#getContent--\">getContent()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getContent--\">getContent()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></dt>\n<dd>\n<div class=\"block\">Gets the response's content.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html#getContent--\">getContent()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponseImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getContext--\">getContext()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Gets the Context object used to create the MobileServiceClient</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#getCreatedAt--\">getCreatedAt()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#getCreatedAt--\">getCreatedAt()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getCreatedAt--\">getCreatedAt()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></dt>\n<dd>\n<div class=\"block\">Gets the creation date of the operation.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getCreatedAt--\">getCreatedAt()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></dt>\n<dd>\n<div class=\"block\">Gets the creation date of the table operation error</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#getCreatedAt--\">getCreatedAt()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getCurrentUser--\">getCurrentUser()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Returns the current authenticated user</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getErrorMessage--\">getErrorMessage()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></dt>\n<dd>\n<div class=\"block\">Gets the error message</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getGsonBuilder--\">getGsonBuilder()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Gets the GsonBuilder used to in JSON Serialization/Deserialization</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#getHandler--\">getHandler()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></dt>\n<dd>\n<div class=\"block\">Returns an instance of MobileServiceSyncHandler.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getHeaders--\">getHeaders()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></dt>\n<dd>\n<div class=\"block\">Returns request's Headers</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#getHeaders--\">getHeaders()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getHeaders--\">getHeaders()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></dt>\n<dd>\n<div class=\"block\">Gets the response's headers.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html#getHeaders--\">getHeaders()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponseImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#getId--\">getId()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#getId--\">getId()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getId--\">getId()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></dt>\n<dd>\n<div class=\"block\">Gets the unique id of the operation.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getId--\">getId()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></dt>\n<dd>\n<div class=\"block\">Gets the table operation error id</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#getId--\">getId()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html#getInstallationId-Context-\">getInstallationId(Context)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceApplication</a></dt>\n<dd>\n<div class=\"block\">Gets the ID used to identify this installation of the application to\n provide telemetry data.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#getInternalError--\">getInternalError()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></dt>\n<dd>\n<div class=\"block\">Gets the internal error</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html#getItem--\">getItem()</a></span> - Method in exception com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedException</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html#getItem--\">getItem()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">LocalTableOperationProcessor</a></dt>\n<dd>\n<div class=\"block\">Gets the item to process</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html#getItem--\">getItem()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">RemoteTableOperationProcessor</a></dt>\n<dd>\n<div class=\"block\">Gets the item to process</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#getItemId--\">getItemId()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#getItemId--\">getItemId()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getItemId--\">getItemId()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></dt>\n<dd>\n<div class=\"block\">Gets the id of the item associated with the operation.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getItemId--\">getItemId()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></dt>\n<dd>\n<div class=\"block\">Gets the item id</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#getItemId--\">getItemId()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#getKind--\">getKind()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#getKind--\">getKind()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getKind--\">getKind()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></dt>\n<dd>\n<div class=\"block\">Gets the kind of table operation.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#getKind--\">getKind()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getLimitClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getLimitClause(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QuerySQLWriter</a></dt>\n<dd>\n<div class=\"block\">Returns the SQL string representation of the query's limit clause</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html#getMethod--\">getMethod()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">HttpPatch</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getMethod--\">getMethod()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></dt>\n<dd>\n<div class=\"block\">Gets the request's method</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#getMethod--\">getMethod()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html#getName--\">getName()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmNativeRegistration</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html#getName--\">getName()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmTemplateRegistration</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#getName--\">getName()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></dt>\n<dd>\n<div class=\"block\">Returns the name of the represented table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#getName--\">getName()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></dt>\n<dd>\n<div class=\"block\">Returns the name of the represented table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#getOperationErrors--\">getOperationErrors()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></dt>\n<dd>\n<div class=\"block\">Gets the list of table operation errors</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getOperationKind--\">getOperationKind()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></dt>\n<dd>\n<div class=\"block\">Gets the kind of table operation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getOrderBy--\">getOrderBy()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getOrderBy--\">getOrderBy()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getOrderBy--\">getOrderBy()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Returns a list of fields to order by the results, and their respective\n ordering direction</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getOrderByClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getOrderByClause(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QuerySQLWriter</a></dt>\n<dd>\n<div class=\"block\">Returns the SQL string representation of the query's order by clause</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#getPendingOperations--\">getPendingOperations()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></dt>\n<dd>\n<div class=\"block\">Returns the number of pending operations that are not yet pushed to\n remote tables.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html#getPNSHandle--\">getPNSHandle()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmNativeRegistration</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html#getPNSHandle--\">getPNSHandle()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">GcmTemplateRegistration</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getPNSHandle--\">getPNSHandle()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></dt>\n<dd>\n<div class=\"block\">Gets the PNS specific identifier</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getProjection--\">getProjection()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getProjection--\">getProjection()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getProjection--\">getProjection()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Returns a requested list of projections;</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getPush--\">getPush()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Gets the MobileServicePush used for push notifications</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html#getPushCompletionResult--\">getPushCompletionResult()</a></span> - Method in exception com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushFailedException</a></dt>\n<dd>\n<div class=\"block\">Gets the push completion result</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getQueryNode--\">getQueryNode()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getQueryNode--\">getQueryNode()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getQueryNode--\">getQueryNode()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Returns the root node of the query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getRawContent--\">getRawContent()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></dt>\n<dd>\n<div class=\"block\">Gets the request's content</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#getRawContent--\">getRawContent()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getRawContent--\">getRawContent()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></dt>\n<dd>\n<div class=\"block\">Gets the response's content.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html#getRawContent--\">getRawContent()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponseImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getRegistrationId--\">getRegistrationId()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></dt>\n<dd>\n<div class=\"block\">Gets the registration ID</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#getResponse--\">getResponse()</a></span> - Method in exception com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html#getRowFilter-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getRowFilter(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryODataWriter</a></dt>\n<dd>\n<div class=\"block\">Returns the OData string representation of the query</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html#getRowSetModifiers-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.MobileServiceTableSystemPropertiesProvider-\">getRowSetModifiers(Query, MobileServiceTableSystemPropertiesProvider)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryODataWriter</a></dt>\n<dd>\n<div class=\"block\">Returns the OData string representation of the rowset's modifiers</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getSelectClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getSelectClause(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QuerySQLWriter</a></dt>\n<dd>\n<div class=\"block\">Returns the SQL string representation of the query's select clause</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getServerItem--\">getServerItem()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></dt>\n<dd>\n<div class=\"block\">Gets the server item</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getServerResponse--\">getServerResponse()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></dt>\n<dd>\n<div class=\"block\">Gets the server response</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getServiceFilter--\">getServiceFilter()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Gets the ServiceFilter.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html#getServiceResponse-java.lang.Throwable-\">getServiceResponse(Throwable)</a></span> - Static method in exception com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getSkip--\">getSkip()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getSkip--\">getSkip()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getSkip--\">getSkip()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Returns a specified skip value;</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html#getStatus--\">getStatus()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a></dt>\n<dd>\n<div class=\"block\">Gets the response's status.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html#getStatus--\">getStatus()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponseImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html#getStatus--\">getStatus()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a></dt>\n<dd>\n<div class=\"block\">Gets the push status</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getStatusCode--\">getStatusCode()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></dt>\n<dd>\n<div class=\"block\">Gets the status code of the response</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#getStore--\">getStore()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></dt>\n<dd>\n<div class=\"block\">Returns an instance of MobileServiceLocalStore.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getSyncContext--\">getSyncContext()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Returns a MobileServiceSyncContext instance.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getSyncTable-java.lang.String-\">getSyncTable(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Returns a MobileServiceJsonSyncTable instance, which provides untyped\n data operations for a local table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getSyncTable-java.lang.Class-\">getSyncTable(Class&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Returns a MobileServiceSyncTable<E> instance, which provides strongly\n typed data operations for a local table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getSyncTable-java.lang.String-java.lang.Class-\">getSyncTable(String, Class&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Returns a MobileServiceSyncTable<E> instance, which provides strongly\n typed data operations for a local table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#getSystemProperties--\">getSystemProperties()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html#getSystemProperties--\">getSystemProperties()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTableSystemPropertiesProvider</a></dt>\n<dd>\n<div class=\"block\">Returns the set of enabled System Properties</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getTable-java.lang.String-\">getTable(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Creates a MobileServiceJsonTable</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getTable-java.lang.Class-\">getTable(Class&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Creates a MobileServiceTable</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#getTable-java.lang.String-java.lang.Class-\">getTable(String, Class&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Creates a MobileServiceTable</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getTableName--\">getTableName()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getTableName--\">getTableName()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getTableName--\">getTableName()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Returns the table name;</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html#getTableName--\">getTableName()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">DeleteOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#getTableName--\">getTableName()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html#getTableName--\">getTableName()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a></dt>\n<dd>\n<div class=\"block\">Gets the name of the table the operation will be executed against.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html#getTableName--\">getTableName()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationError</a></dt>\n<dd>\n<div class=\"block\">Gets the table name</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html#getTableName--\">getTableName()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">UpdateOperation</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getTags--\">getTags()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></dt>\n<dd>\n<div class=\"block\">Gets the registration tags</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html#getTemplateBody--\">getTemplateBody()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a></dt>\n<dd>\n<div class=\"block\">Gets the template body</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html#getTemplateName--\">getTemplateName()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">TemplateRegistration</a></dt>\n<dd>\n<div class=\"block\">Gets the template name</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getTop--\">getTop()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getTop--\">getTop()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getTop--\">getTop()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Returns a specified top value;</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceList.html#getTotalCount--\">getTotalCount()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceList</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/notifications/Registration.html#getURI--\">getURI()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.notifications.<a href=\"../com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">Registration</a></dt>\n<dd>\n<div class=\"block\">Gets the registration URI</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html#getUrl--\">getUrl()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a></dt>\n<dd>\n<div class=\"block\">Gets request's URL</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html#getUrl--\">getUrl()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequestImpl</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#getUserDefinedParameters--\">getUserDefinedParameters()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#getUserDefinedParameters--\">getUserDefinedParameters()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#getUserDefinedParameters--\">getUserDefinedParameters()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Returns a list of custom parameters set by the user</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html#getUserId--\">getUserId()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.authentication.<a href=\"../com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\">MobileServiceUser</a></dt>\n<dd>\n<div class=\"block\">Returns the current User Id</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html#getValue--\">getValue()</a></span> - Method in enum com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\">MobileServiceFeatures</a></dt>\n<dd>\n<div class=\"block\">Gets the code will be sent to the server for this feature\n in the features header</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html#getValue--\">getValue()</a></span> - Method in exception com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServicePreconditionFailedExceptionBase</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html#getValue--\">getValue()</a></span> - Method in enum com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationKind</a></dt>\n<dd>\n<div class=\"block\">Return the int value associated to the enum</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html#getValue--\">getValue()</a></span> - Method in enum com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushStatus</a></dt>\n<dd>\n<div class=\"block\">Return the int value associated to the enum</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html#getWhereClause-com.microsoft.windowsazure.mobileservices.table.query.Query-\">getWhereClause(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QuerySQLWriter</a></dt>\n<dd>\n<div class=\"block\">Returns the SQL string representation of the query's where clause</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#GOOGLE_ACCOUNT_TYPE\">GOOGLE_ACCOUNT_TYPE</a></span> - Static variable in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Google account type</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#GOOGLE_USER_INFO_SCOPE\">GOOGLE_USER_INFO_SCOPE</a></span> - Static variable in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Authentication token type required for client login</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt--\">gt()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt-java.lang.Number-\">gt(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#gt-java.util.Date-\">gt(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt--\">gt()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt-java.lang.Number-\">gt(Number)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#gt-java.util.Date-\">gt(Date)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt--\">gt()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Greater than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Greater than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.lang.Number-\">gt(Number)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Greater than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#gt-java.util.Date-\">gt(Date)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Greater than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt--\">gt()</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Greater than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt-com.microsoft.windowsazure.mobileservices.table.query.Query-\">gt(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Greater than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt-java.lang.Number-\">gt(Number)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Greater than comparison operator.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#gt-java.util.Date-\">gt(Date)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Greater than comparison operator.</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-6.html\">Prev Letter</a></li>\n<li><a href=\"index-8.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-7.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-7.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-8.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>H-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"H-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-7.html\">Prev Letter</a></li>\n<li><a href=\"index-9.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-8.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-8.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:H\">\n<!--   -->\n</a>\n<h2 class=\"title\">H</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html#handleRequest-com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest-com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback-\">handleRequest(ServiceFilterRequest, NextServiceFilterCallback)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilter</a></dt>\n<dd>\n<div class=\"block\">Method to handle the requests</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#hasInlineCount--\">hasInlineCount()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#hasInlineCount--\">hasInlineCount()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hasInlineCount--\">hasInlineCount()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Returns true if inline count is requested.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#hour-java.lang.String-\">hour(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour(Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#hour-java.lang.String-\">hour(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour(Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#hour-java.lang.String-\">hour(String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#hour-com.microsoft.windowsazure.mobileservices.table.query.Query-\">hour(Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#hour-java.lang.String-\">hour(String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">The hour component value of the parameter value.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">HttpPatch</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html#HttpPatch-java.lang.String-\">HttpPatch(String)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.http.<a href=\"../com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\">HttpPatch</a></dt>\n<dd>&nbsp;</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-7.html\">Prev Letter</a></li>\n<li><a href=\"index-9.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-8.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-8.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index-files/index-9.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>I-Index</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"../script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"I-Index\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-8.html\">Prev Letter</a></li>\n<li><a href=\"index-10.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-9.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-9.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"contentContainer\"><a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;<a name=\"I:I\">\n<!--   -->\n</a>\n<h2 class=\"title\">I</h2>\n<dl>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#includeInlineCount--\">includeInlineCount()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Include a property with the number of records returned.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#includeInlineCount--\">includeInlineCount()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Include a property with the number of records returned.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#includeInlineCount--\">includeInlineCount()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#includeInlineCount--\">includeInlineCount()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#includeInlineCount--\">includeInlineCount()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">The inlinecount property specifies whether or not to retrieve a property\n with the number of records returned.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf(Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html#indexOf-java.lang.String-java.lang.String-\">indexOf(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableJsonQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf(Query, Query)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html#indexOf-java.lang.String-java.lang.String-\">indexOf(String, String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">ExecutableQuery</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf(Query, Query)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html#indexOf-java.lang.String-java.lang.String-\">indexOf(String, String)</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a></dt>\n<dd>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#indexOf-com.microsoft.windowsazure.mobileservices.table.query.Query-com.microsoft.windowsazure.mobileservices.table.query.Query-\">indexOf(Query, Query)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html#indexOf-java.lang.String-java.lang.String-\">indexOf(String, String)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.query.<a href=\"../com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">QueryOperations</a></dt>\n<dd>\n<div class=\"block\">Index of the first occurrence of the second parameter value in the first\n parameter value or -1 otherwise.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html#initialize--\">initialize()</a></span> - Method in interface com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a></dt>\n<dd>\n<div class=\"block\">Initializes the store for use.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html#initialize--\">initialize()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">SQLiteLocalStore</a></dt>\n<dd>&nbsp;</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#initialize-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandler-\">initialize(MobileServiceLocalStore, MobileServiceSyncHandler)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></dt>\n<dd>\n<div class=\"block\">Initializes the sync context.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html#initializeStore-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">initializeStore(MobileServiceLocalStore)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationErrorList</a></dt>\n<dd>\n<div class=\"block\">Initializes requirements on the local store</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html#initializeStore-com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore-\">initializeStore(MobileServiceLocalStore)</a></span> - Static method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue</a></dt>\n<dd>\n<div class=\"block\">Initializes requirements on the local store</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#insert-com.google.gson.JsonObject-\">insert(JsonObject)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Inserts a JsonObject into a Mobile Service table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#insert-com.google.gson.JsonObject-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">insert(JsonObject, TableJsonOperationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final JsonObject element)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#insert-com.google.gson.JsonObject-java.util.List-\">insert(JsonObject, List&lt;&lt;any&gt;&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\">Inserts a JsonObject into a Mobile Service Table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html#insert-com.google.gson.JsonObject-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback-\">insert(JsonObject, List&lt;&lt;any&gt;&gt;, TableJsonOperationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceJsonTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final JsonObject element, List<Pair<String,\n             String>> parameters)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#insert-E-\">insert(E)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Inserts an entity into a Mobile Service Table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#insert-E-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">insert(E, TableOperationCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final E element)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#insert-E-java.util.List-\">insert(E, List&lt;&lt;any&gt;&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\">Inserts an entity into a Mobile Service Table</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html#insert-E-java.util.List-com.microsoft.windowsazure.mobileservices.table.TableOperationCallback-\">insert(E, List&lt;&lt;any&gt;&gt;, TableOperationCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.<a href=\"../com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">MobileServiceTable</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>insert(final E element, List<Pair<String, String>>\n             parameters)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html#insert-com.google.gson.JsonObject-\">insert(JsonObject)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceJsonSyncTable</a></dt>\n<dd>\n<div class=\"block\">Insert an item into the local table and enqueue the operation to be\n synchronized on context push.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html#insert-E-\">insert(E)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncTable</a></dt>\n<dd>\n<div class=\"block\">Insert an item into the local table and enqueue the operation to be\n synchronized on context push.</div>\n</dd>\n<dt><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">InsertOperation</span></a> - Class in <a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></dt>\n<dd>\n<div class=\"block\">Class representing an insert operation against remote table.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html#InsertOperation-java.lang.String-java.lang.String-\">InsertOperation(String, String)</a></span> - Constructor for class com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\">InsertOperation</a></dt>\n<dd>\n<div class=\"block\">Constructor for InsertOperation</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Class-\">invokeApi(String, Class&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">invokeApi(String, Class&lt;E&gt;, ApiOperationCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, Class<E> clazz)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Object-java.lang.Class-\">invokeApi(String, Object, Class&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Object-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">invokeApi(String, Object, Class&lt;E&gt;, ApiOperationCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, Object body, Class<E>\n             clazz)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.String-java.util.List-java.lang.Class-\">invokeApi(String, String, List&lt;&lt;any&gt;&gt;, Class&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes a custom API</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.String-java.util.List-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">invokeApi(String, String, List&lt;&lt;any&gt;&gt;, Class&lt;E&gt;, ApiOperationCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, String httpMethod,\n             List<Pair<String, String>> parameters, Class<E> clazz)</code>\n             instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Object-java.lang.String-java.util.List-java.lang.Class-\">invokeApi(String, Object, String, List&lt;&lt;any&gt;&gt;, Class&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes a custom API</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.Object-java.lang.String-java.util.List-java.lang.Class-com.microsoft.windowsazure.mobileservices.ApiOperationCallback-\">invokeApi(String, Object, String, List&lt;&lt;any&gt;&gt;, Class&lt;E&gt;, ApiOperationCallback&lt;E&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, Object body, String\n             httpMethod, List<Pair<String, String>> parameters, final\n             Class<E> clazz)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-\">invokeApi(String)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">invokeApi(String, ApiJsonOperationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-\"><code>MobileServiceClient.invokeApi(String apiName)</code></a> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-\">invokeApi(String, JsonElement)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes a custom API using POST HTTP method</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">invokeApi(String, JsonElement, ApiJsonOperationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-\"><code>MobileServiceClient.invokeApi(String apiName, JsonElement body)</code></a>\n             instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.String-java.util.List-\">invokeApi(String, String, List&lt;&lt;any&gt;&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes a custom API</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-java.lang.String-java.util.List-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">invokeApi(String, String, List&lt;&lt;any&gt;&gt;, ApiJsonOperationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, String httpMethod,\n             List<Pair<String, String>> parameters)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-java.lang.String-java.util.List-\">invokeApi(String, JsonElement, String, List&lt;&lt;any&gt;&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes a custom API</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-com.google.gson.JsonElement-java.lang.String-java.util.List-com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback-\">invokeApi(String, JsonElement, String, List&lt;&lt;any&gt;&gt;, ApiJsonOperationCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>\n<div class=\"block\"><span class=\"deprecationComment\">use <code>invokeApi(String apiName, JsonElement body, String\n             httpMethod, List<Pair<String, String>> parameters)</code> instead</span></div>\n</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-\">invokeApi(String, byte[], String, List&lt;&lt;any&gt;&gt;, List&lt;&lt;any&gt;&gt;)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes a custom API</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#invokeApi-java.lang.String-byte:A-java.lang.String-java.util.List-java.util.List-com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback-\">invokeApi(String, byte[], String, List&lt;&lt;any&gt;&gt;, List&lt;&lt;any&gt;&gt;, ServiceFilterResponseCallback)</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Invokes a custom API</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html#isCancelled--\">isCancelled()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a></dt>\n<dd>\n<div class=\"block\">Returns true if the bookmark is canceled</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html#isCurrentBookmark--\">isCurrentBookmark()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\">OperationQueue.Bookmark</a></dt>\n<dd>\n<div class=\"block\">Returns true if the bookmark is the first and current in the queue</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html#isInitialized--\">isInitialized()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"../com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\">MobileServiceSyncContext</a></dt>\n<dd>\n<div class=\"block\">Indicates whether sync context has been initialized or not.</div>\n</dd>\n<dt><span class=\"memberNameLink\"><a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html#isLoginInProgress--\">isLoginInProgress()</a></span> - Method in class com.microsoft.windowsazure.mobileservices.<a href=\"../com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceClient</a></dt>\n<dd>\n<div class=\"block\">Indicates if a login operation is in progress</div>\n</dd>\n</dl>\n<a href=\"index-1.html\">A</a>&nbsp;<a href=\"index-2.html\">B</a>&nbsp;<a href=\"index-3.html\">C</a>&nbsp;<a href=\"index-4.html\">D</a>&nbsp;<a href=\"index-5.html\">E</a>&nbsp;<a href=\"index-6.html\">F</a>&nbsp;<a href=\"index-7.html\">G</a>&nbsp;<a href=\"index-8.html\">H</a>&nbsp;<a href=\"index-9.html\">I</a>&nbsp;<a href=\"index-10.html\">J</a>&nbsp;<a href=\"index-11.html\">L</a>&nbsp;<a href=\"index-12.html\">M</a>&nbsp;<a href=\"index-13.html\">N</a>&nbsp;<a href=\"index-14.html\">O</a>&nbsp;<a href=\"index-15.html\">P</a>&nbsp;<a href=\"index-16.html\">Q</a>&nbsp;<a href=\"index-17.html\">R</a>&nbsp;<a href=\"index-18.html\">S</a>&nbsp;<a href=\"index-19.html\">T</a>&nbsp;<a href=\"index-20.html\">U</a>&nbsp;<a href=\"index-21.html\">V</a>&nbsp;<a href=\"index-22.html\">W</a>&nbsp;<a href=\"index-23.html\">X</a>&nbsp;<a href=\"index-24.html\">Y</a>&nbsp;</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"../overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"../overview-tree.html\">Tree</a></li>\n<li><a href=\"../deprecated-list.html\">Deprecated</a></li>\n<li class=\"navBarCell1Rev\">Index</li>\n<li><a href=\"../help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li><a href=\"index-8.html\">Prev Letter</a></li>\n<li><a href=\"index-10.html\">Next Letter</a></li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"../index.html?index-files/index-9.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"index-9.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/index.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Generated Documentation (Untitled)</title>\n<script type=\"text/javascript\">\n    targetPage = \"\" + window.location.search;\n    if (targetPage != \"\" && targetPage != \"undefined\")\n        targetPage = targetPage.substring(1);\n    if (targetPage.indexOf(\":\") != -1 || (targetPage != \"\" && !validURL(targetPage)))\n        targetPage = \"undefined\";\n    function validURL(url) {\n        try {\n            url = decodeURIComponent(url);\n        }\n        catch (error) {\n            return false;\n        }\n        var pos = url.indexOf(\".html\");\n        if (pos == -1 || pos != url.length - 5)\n            return false;\n        var allowNumber = false;\n        var allowSep = false;\n        var seenDot = false;\n        for (var i = 0; i < url.length - 5; i++) {\n            var ch = url.charAt(i);\n            if ('a' <= ch && ch <= 'z' ||\n                    'A' <= ch && ch <= 'Z' ||\n                    ch == '$' ||\n                    ch == '_' ||\n                    ch.charCodeAt(0) > 127) {\n                allowNumber = true;\n                allowSep = true;\n            } else if ('0' <= ch && ch <= '9'\n                    || ch == '-') {\n                if (!allowNumber)\n                     return false;\n            } else if (ch == '/' || ch == '.') {\n                if (!allowSep)\n                    return false;\n                allowNumber = false;\n                allowSep = false;\n                if (ch == '.')\n                     seenDot = true;\n                if (ch == '/' && seenDot)\n                     return false;\n            } else {\n                return false;\n            }\n        }\n        return true;\n    }\n    function loadFrames() {\n        if (targetPage != \"\" && targetPage != \"undefined\")\n             top.classFrame.location = top.targetPage;\n    }\n</script>\n</head>\n<frameset cols=\"20%,80%\" title=\"Documentation frame\" onload=\"top.loadFrames()\">\n<frameset rows=\"30%,70%\" title=\"Left frames\" onload=\"top.loadFrames()\">\n<frame src=\"overview-frame.html\" name=\"packageListFrame\" title=\"All Packages\">\n<frame src=\"allclasses-frame.html\" name=\"packageFrame\" title=\"All classes and interfaces (except non-static nested types)\">\n</frameset>\n<frame src=\"overview-summary.html\" name=\"classFrame\" title=\"Package, class and interface descriptions\" scrolling=\"yes\">\n<noframes>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<h2>Frame Alert</h2>\n<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href=\"overview-summary.html\">Non-frame version</a>.</p>\n</noframes>\n</frameset>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/overview-frame.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Overview List</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"script.js\"></script>\n</head>\n<body>\n<div class=\"indexHeader\"><span><a href=\"allclasses-frame.html\" target=\"packageFrame\">All&nbsp;Classes</a></span></div>\n<div class=\"indexContainer\">\n<h2 title=\"Packages\">Packages</h2>\n<ul title=\"Packages\">\n<li><a href=\"com/microsoft/windowsazure/mobileservices/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/authentication/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.authentication</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.http</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.notifications</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.table</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.table.query</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/serialization/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.table.serialization</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.table.sync</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/queue/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/threading/package-frame.html\" target=\"packageFrame\">com.microsoft.windowsazure.mobileservices.threading</a></li>\n</ul>\n</div>\n<p>&nbsp;</p>\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/overview-summary.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Overview</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Overview\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li class=\"navBarCell1Rev\">Overview</li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"overview-tree.html\">Tree</a></li>\n<li><a href=\"deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?overview-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"overview-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Microsoft Azure Mobile Services Android SDK</h1>\n</div>\n<div class=\"contentContainer\">\n<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Packages table, listing packages, and an explanation\">\n<caption><span>Packages</span><span class=\"tabEnd\">&nbsp;</span></caption>\n<tr>\n<th class=\"colFirst\" scope=\"col\">Package</th>\n<th class=\"colLast\" scope=\"col\">Description</th>\n</tr>\n<tbody>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/package-summary.html\">com.microsoft.windowsazure.mobileservices</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/authentication/package-summary.html\">com.microsoft.windowsazure.mobileservices.authentication</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/http/package-summary.html\">com.microsoft.windowsazure.mobileservices.http</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/notifications/package-summary.html\">com.microsoft.windowsazure.mobileservices.notifications</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/table/package-summary.html\">com.microsoft.windowsazure.mobileservices.table</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/table/query/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.query</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/table/serialization/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.serialization</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/queue/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"altColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-summary.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n<tr class=\"rowColor\">\n<td class=\"colFirst\"><a href=\"com/microsoft/windowsazure/mobileservices/threading/package-summary.html\">com.microsoft.windowsazure.mobileservices.threading</a></td>\n<td class=\"colLast\">&nbsp;</td>\n</tr>\n</tbody>\n</table>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li class=\"navBarCell1Rev\">Overview</li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"overview-tree.html\">Tree</a></li>\n<li><a href=\"deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?overview-summary.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"overview-summary.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/overview-tree.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:06 PDT 2014 -->\n<title>Class Hierarchy</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Class Hierarchy\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?overview-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"overview-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 class=\"title\">Hierarchy For All Packages</h1>\n<span class=\"packageHierarchyLabel\">Package Hierarchies:</span>\n<ul class=\"horizontal\">\n<li><a href=\"com/microsoft/windowsazure/mobileservices/package-tree.html\">com.microsoft.windowsazure.mobileservices</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/authentication/package-tree.html\">com.microsoft.windowsazure.mobileservices.authentication</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/http/package-tree.html\">com.microsoft.windowsazure.mobileservices.http</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/notifications/package-tree.html\">com.microsoft.windowsazure.mobileservices.notifications</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/package-tree.html\">com.microsoft.windowsazure.mobileservices.table</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/query/package-tree.html\">com.microsoft.windowsazure.mobileservices.table.query</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/serialization/package-tree.html\">com.microsoft.windowsazure.mobileservices.table.serialization</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/package-tree.html\">com.microsoft.windowsazure.mobileservices.table.sync</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/package-tree.html\">com.microsoft.windowsazure.mobileservices.table.sync.localstore</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/package-tree.html\">com.microsoft.windowsazure.mobileservices.table.sync.operations</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/package-tree.html\">com.microsoft.windowsazure.mobileservices.table.sync.push</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/queue/package-tree.html\">com.microsoft.windowsazure.mobileservices.table.sync.queue</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/package-tree.html\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler</a>, </li>\n<li><a href=\"com/microsoft/windowsazure/mobileservices/threading/package-tree.html\">com.microsoft.windowsazure.mobileservices.threading</a></li>\n</ul>\n</div>\n<div class=\"contentContainer\">\n<h2 title=\"Class Hierarchy\">Class Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">&lt;any&gt;\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">RequestAsyncTask</span></a></li>\n</ul>\n</li>\n<li type=\"circle\">java.util.AbstractCollection&lt;E&gt; (implements java.util.Collection&lt;E&gt;)\n<ul>\n<li type=\"circle\">java.util.AbstractList&lt;E&gt; (implements java.util.List&lt;E&gt;)\n<ul>\n<li type=\"circle\">java.util.ArrayList&lt;E&gt; (implements java.lang.Cloneable, java.util.List&lt;E&gt;, java.util.RandomAccess, java.io.Serializable)\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceList</span></a>&lt;E&gt;</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">AndroidHttpClientFactoryImpl</span></a> (implements com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">AndroidHttpClientFactory</a>)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"com/microsoft/windowsazure/mobileservices/BuildConfig.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">BuildConfig</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">DateSerializer</span></a> (implements com.google.gson.JsonDeserializer&lt;T&gt;, com.google.gson.JsonSerializer&lt;T&gt;)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">DeleteOperation</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">ExecutableJsonQuery</span></a> (implements com.microsoft.windowsazure.mobileservices.table.query.<a href=\"com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">ExecutableQuery</span></a>&lt;E&gt; (implements com.microsoft.windowsazure.mobileservices.table.query.<a href=\"com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\">Query</a>)</li>\n<li type=\"circle\">HttpEntityEnclosingRequestBase\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/HttpPatch.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">HttpPatch</span></a></li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">InsertOperation</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">JsonEntityParser</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">LocalTableOperationProcessor</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;E&gt;)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.authentication.<a href=\"com/microsoft/windowsazure/mobileservices/authentication/LoginManager.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">LoginManager</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.serialization.<a href=\"com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.serialization\"><span class=\"typeNameLink\">LongSerializer</span></a> (implements com.google.gson.JsonSerializer&lt;T&gt;)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceApplication.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceApplication</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceClient</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">MobileServiceConnection</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">MobileServiceHttpClient</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">MobileServiceJsonSyncTable</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServiceJsonTable</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">MobileServicePush</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">MobileServicePushCompletionResult</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">MobileServiceSyncContext</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync\"><span class=\"typeNameLink\">MobileServiceSyncTable</span></a>&lt;E&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServiceTable</span></a>&lt;E&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.authentication.<a href=\"com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">MobileServiceUser</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.threading.<a href=\"com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">MultiLockDictionary</span></a>&lt;T&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.threading.<a href=\"com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.MultiLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">MultiLockDictionary.MultiLock</span></a>&lt;T&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.threading.<a href=\"com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">MultiReadWriteLockDictionary</span></a>&lt;T&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.threading.<a href=\"com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.MultiReadWriteLock.html\" title=\"class in com.microsoft.windowsazure.mobileservices.threading\"><span class=\"typeNameLink\">MultiReadWriteLockDictionary.MultiReadWriteLock</span></a>&lt;T&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">OperationErrorList</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">OperationQueue</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.queue.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.Bookmark.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.queue\"><span class=\"typeNameLink\">OperationQueue.Bookmark</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryNodeSQLWriter</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryODataWriter</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryOperations</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QuerySQLWriter</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"com/microsoft/windowsazure/mobileservices/notifications/Registration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">Registration</span></a>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">GcmNativeRegistration</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">TemplateRegistration</span></a>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">GcmTemplateRegistration</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">RemoteTableOperationProcessor</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;E&gt;)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilterRequestImpl</span></a> (implements com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterRequest</a>)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.html\" title=\"class in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilterResponseImpl</span></a> (implements com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a>)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">SimpleSyncHandler</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">MobileServiceSyncHandler</a>)</li>\n<li type=\"circle\">SQLiteOpenHelper\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">SQLiteLocalStore</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">MobileServiceLocalStore</a>)</li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperationCollapser</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperationVisitor</a>&lt;E&gt;)</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperationError</span></a></li>\n<li type=\"circle\">java.lang.Throwable (implements java.io.Serializable)\n<ul>\n<li type=\"circle\">java.lang.Exception\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceException</span></a>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServicePreconditionFailedException</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServicePreconditionFailedExceptionBase</span></a></li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">MobileServiceLocalStoreException</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">MobileServicePushFailedException</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">MobileServiceSyncHandlerException</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">RegistrationGoneException</span></a></li>\n<li type=\"circle\">java.lang.RuntimeException\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryException</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">UpdateOperation</span></a> (implements com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\">TableOperation</a>)</li>\n</ul>\n</li>\n</ul>\n<h2 title=\"Interface Hierarchy\">Interface Hierarchy</h2>\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">AndroidHttpClientFactory</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">ApiJsonOperationCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"com/microsoft/windowsazure/mobileservices/ApiOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">ApiOperationCallback</span></a>&lt;E&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">MobileServiceLocalStore</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\"><span class=\"typeNameLink\">MobileServiceSyncHandler</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServiceTableSystemPropertiesProvider</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">NextServiceFilterCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"com/microsoft/windowsazure/mobileservices/table/query/Query.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">Query</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">RegistrationCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilter.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilter</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilterRequest</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.http.<a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\"><span class=\"typeNameLink\">ServiceFilterResponse</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">ServiceFilterResponseCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableDeleteCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableJsonQueryCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperation</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableOperationCallback</span></a>&lt;E&gt;\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableJsonOperationCallback</span></a></li>\n</ul>\n</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperationVisitor</span></a>&lt;E&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">TableQueryCallback</span></a>&lt;E&gt;</li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">TemplateRegistrationCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.notifications.<a href=\"com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.notifications\"><span class=\"typeNameLink\">UnregisterCallback</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.html\" title=\"interface in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">UserAuthenticationCallback</span></a></li>\n</ul>\n<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n<ul>\n<li type=\"circle\">java.lang.Object\n<ul>\n<li type=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)\n<ul>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.<a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.html\" title=\"enum in com.microsoft.windowsazure.mobileservices\"><span class=\"typeNameLink\">MobileServiceFeatures</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.localstore.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.localstore\"><span class=\"typeNameLink\">ColumnDataType</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.authentication.<a href=\"com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.authentication\"><span class=\"typeNameLink\">MobileServiceAuthenticationProvider</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.push.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.push\"><span class=\"typeNameLink\">MobileServicePushStatus</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.<a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table\"><span class=\"typeNameLink\">MobileServiceSystemProperty</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">UnaryOperatorKind</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.query.<a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.query\"><span class=\"typeNameLink\">QueryOrder</span></a></li>\n<li type=\"circle\">com.microsoft.windowsazure.mobileservices.table.sync.operations.<a href=\"com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.html\" title=\"enum in com.microsoft.windowsazure.mobileservices.table.sync.operations\"><span class=\"typeNameLink\">TableOperationKind</span></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li class=\"navBarCell1Rev\">Tree</li>\n<li><a href=\"deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?overview-tree.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"overview-tree.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/package-list",
    "content": "com.microsoft.windowsazure.mobileservices\ncom.microsoft.windowsazure.mobileservices.authentication\ncom.microsoft.windowsazure.mobileservices.http\ncom.microsoft.windowsazure.mobileservices.notifications\ncom.microsoft.windowsazure.mobileservices.table\ncom.microsoft.windowsazure.mobileservices.table.query\ncom.microsoft.windowsazure.mobileservices.table.serialization\ncom.microsoft.windowsazure.mobileservices.table.sync\ncom.microsoft.windowsazure.mobileservices.table.sync.localstore\ncom.microsoft.windowsazure.mobileservices.table.sync.operations\ncom.microsoft.windowsazure.mobileservices.table.sync.push\ncom.microsoft.windowsazure.mobileservices.table.sync.queue\ncom.microsoft.windowsazure.mobileservices.table.sync.synchandler\ncom.microsoft.windowsazure.mobileservices.threading\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/script.js",
    "content": "function show(type)\n{\n    count = 0;\n    for (var key in methods) {\n        var row = document.getElementById(key);\n        if ((methods[key] &  type) != 0) {\n            row.style.display = '';\n            row.className = (count++ % 2) ? rowColor : altColor;\n        }\n        else\n            row.style.display = 'none';\n    }\n    updateTabs(type);\n}\n\nfunction updateTabs(type)\n{\n    for (var value in tabs) {\n        var sNode = document.getElementById(tabs[value][0]);\n        var spanNode = sNode.firstChild;\n        if (value == type) {\n            sNode.className = activeTableTab;\n            spanNode.innerHTML = tabs[value][1];\n        }\n        else {\n            sNode.className = tableTab;\n            spanNode.innerHTML = \"<a href=\\\"javascript:show(\"+ value + \");\\\">\" + tabs[value][1] + \"</a>\";\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/serialized-form.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n<html lang=\"en\">\n<head>\n<!-- Generated by javadoc (1.8.0_11) on Tue Aug 12 11:16:05 PDT 2014 -->\n<title>Serialized Form</title>\n<meta name=\"date\" content=\"2014-08-12\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" title=\"Style\">\n<script type=\"text/javascript\" src=\"script.js\"></script>\n</head>\n<body>\n<script type=\"text/javascript\"><!--\n    try {\n        if (location.href.indexOf('is-external=true') == -1) {\n            parent.document.title=\"Serialized Form\";\n        }\n    }\n    catch(err) {\n    }\n//-->\n</script>\n<noscript>\n<div>JavaScript is disabled on your browser.</div>\n</noscript>\n<!-- ========= START OF TOP NAVBAR ======= -->\n<div class=\"topNav\"><a name=\"navbar.top\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.top.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"overview-tree.html\">Tree</a></li>\n<li><a href=\"deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?serialized-form.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"serialized-form.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_top\">\n<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_top\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.top\">\n<!--   -->\n</a></div>\n<!-- ========= END OF TOP NAVBAR ========= -->\n<div class=\"header\">\n<h1 title=\"Serialized Form\" class=\"title\">Serialized Form</h1>\n</div>\n<div class=\"serializedFormContainer\">\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h2 title=\"Package\">Package&nbsp;com.microsoft.windowsazure.mobileservices</h2>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.MobileServiceException\">\n<!--   -->\n</a>\n<h3>Class <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices.MobileServiceException</a> extends java.lang.Exception implements Serializable</h3>\n<dl class=\"nameValue\">\n<dt>serialVersionUID:</dt>\n<dd>5267990724102948298L</dd>\n</dl>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h3>Serialized Fields</h3>\n<ul class=\"blockList\">\n<li class=\"blockListLast\">\n<h4>mResponse</h4>\n<pre><a href=\"com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.html\" title=\"interface in com.microsoft.windowsazure.mobileservices.http\">ServiceFilterResponse</a> mResponse</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.MobileServiceList\">\n<!--   -->\n</a>\n<h3>Class <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">com.microsoft.windowsazure.mobileservices.MobileServiceList</a> extends java.util.ArrayList&lt;<a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceList.html\" title=\"type parameter in MobileServiceList\">E</a>&gt; implements Serializable</h3>\n<dl class=\"nameValue\">\n<dt>serialVersionUID:</dt>\n<dd>5772338570723574845L</dd>\n</dl>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h3>Serialized Fields</h3>\n<ul class=\"blockList\">\n<li class=\"blockListLast\">\n<h4>mTotalCount</h4>\n<pre>int mTotalCount</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2 title=\"Package\">Package&nbsp;com.microsoft.windowsazure.mobileservices.notifications</h2>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.notifications.RegistrationGoneException\">\n<!--   -->\n</a>\n<h3>Class <a href=\"com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.notifications\">com.microsoft.windowsazure.mobileservices.notifications.RegistrationGoneException</a> extends java.lang.Exception implements Serializable</h3>\n<dl class=\"nameValue\">\n<dt>serialVersionUID:</dt>\n<dd>-156200383034074631L</dd>\n</dl>\n</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2 title=\"Package\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table</h2>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedException\">\n<!--   -->\n</a>\n<h3>Class <a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedException</a> extends <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a> implements Serializable</h3>\n<dl class=\"nameValue\">\n<dt>serialVersionUID:</dt>\n<dd>5188346485829981214L</dd>\n</dl>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h3>Serialized Fields</h3>\n<ul class=\"blockList\">\n<li class=\"blockListLast\">\n<h4>mItem</h4>\n<pre>java.lang.Object mItem</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedExceptionBase\">\n<!--   -->\n</a>\n<h3>Class <a href=\"com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionBase.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table\">com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedExceptionBase</a> extends <a href=\"com/microsoft/windowsazure/mobileservices/MobileServiceException.html\" title=\"class in com.microsoft.windowsazure.mobileservices\">MobileServiceException</a> implements Serializable</h3>\n<dl class=\"nameValue\">\n<dt>serialVersionUID:</dt>\n<dd>4489352410883725274L</dd>\n</dl>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h3>Serialized Fields</h3>\n<ul class=\"blockList\">\n<li class=\"blockListLast\">\n<h4>mValue</h4>\n<pre>com.google.gson.JsonObject mValue</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2 title=\"Package\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table.query</h2>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.query.QueryException\">\n<!--   -->\n</a>\n<h3>Class <a href=\"com/microsoft/windowsazure/mobileservices/table/query/QueryException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.query\">com.microsoft.windowsazure.mobileservices.table.query.QueryException</a> extends java.lang.RuntimeException implements Serializable</h3>\n<dl class=\"nameValue\">\n<dt>serialVersionUID:</dt>\n<dd>1663849623026648136L</dd>\n</dl>\n</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2 title=\"Package\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table.sync.localstore</h2>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException\">\n<!--   -->\n</a>\n<h3>Class <a href=\"com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.localstore\">com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException</a> extends java.lang.Exception implements Serializable</h3>\n<dl class=\"nameValue\">\n<dt>serialVersionUID:</dt>\n<dd>8665204682638151717L</dd>\n</dl>\n</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2 title=\"Package\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table.sync.push</h2>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException\">\n<!--   -->\n</a>\n<h3>Class <a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException</a> extends java.lang.Exception implements Serializable</h3>\n<dl class=\"nameValue\">\n<dt>serialVersionUID:</dt>\n<dd>1365719768140939515L</dd>\n</dl>\n<ul class=\"blockList\">\n<li class=\"blockList\">\n<h3>Serialized Fields</h3>\n<ul class=\"blockList\">\n<li class=\"blockListLast\">\n<h4>mPushCompletionResult</h4>\n<pre><a href=\"com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.push\">MobileServicePushCompletionResult</a> mPushCompletionResult</pre>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"blockList\">\n<h2 title=\"Package\">Package&nbsp;com.microsoft.windowsazure.mobileservices.table.sync.synchandler</h2>\n<ul class=\"blockList\">\n<li class=\"blockList\"><a name=\"com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandlerException\">\n<!--   -->\n</a>\n<h3>Class <a href=\"com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.html\" title=\"class in com.microsoft.windowsazure.mobileservices.table.sync.synchandler\">com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandlerException</a> extends java.lang.Exception implements Serializable</h3>\n<dl class=\"nameValue\">\n<dt>serialVersionUID:</dt>\n<dd>7017018356478886950L</dd>\n</dl>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<!-- ======= START OF BOTTOM NAVBAR ====== -->\n<div class=\"bottomNav\"><a name=\"navbar.bottom\">\n<!--   -->\n</a>\n<div class=\"skipNav\"><a href=\"#skip.navbar.bottom\" title=\"Skip navigation links\">Skip navigation links</a></div>\n<a name=\"navbar.bottom.firstrow\">\n<!--   -->\n</a>\n<ul class=\"navList\" title=\"Navigation\">\n<li><a href=\"overview-summary.html\">Overview</a></li>\n<li>Package</li>\n<li>Class</li>\n<li>Use</li>\n<li><a href=\"overview-tree.html\">Tree</a></li>\n<li><a href=\"deprecated-list.html\">Deprecated</a></li>\n<li><a href=\"index-files/index-1.html\">Index</a></li>\n<li><a href=\"help-doc.html\">Help</a></li>\n</ul>\n</div>\n<div class=\"subNav\">\n<ul class=\"navList\">\n<li>Prev</li>\n<li>Next</li>\n</ul>\n<ul class=\"navList\">\n<li><a href=\"index.html?serialized-form.html\" target=\"_top\">Frames</a></li>\n<li><a href=\"serialized-form.html\" target=\"_top\">No&nbsp;Frames</a></li>\n</ul>\n<ul class=\"navList\" id=\"allclasses_navbar_bottom\">\n<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n</ul>\n<div>\n<script type=\"text/javascript\"><!--\n  allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");\n  if(window==top) {\n    allClassesLink.style.display = \"block\";\n  }\n  else {\n    allClassesLink.style.display = \"none\";\n  }\n  //-->\n</script>\n</div>\n<a name=\"skip.navbar.bottom\">\n<!--   -->\n</a></div>\n<!-- ======== END OF BOTTOM NAVBAR ======= -->\n</body>\n</html>\n"
  },
  {
    "path": "sdk/android/src/sdk/doc/stylesheet.css",
    "content": "/* Javadoc style sheet */\n/*\nOverall document style\n*/\n\n@import url('resources/fonts/dejavu.css');\n\nbody {\n    background-color:#ffffff;\n    color:#353833;\n    font-family:'DejaVu Sans', Arial, Helvetica, sans-serif;\n    font-size:14px;\n    margin:0;\n}\na:link, a:visited {\n    text-decoration:none;\n    color:#4A6782;\n}\na:hover, a:focus {\n    text-decoration:none;\n    color:#bb7a2a;\n}\na:active {\n    text-decoration:none;\n    color:#4A6782;\n}\na[name] {\n    color:#353833;\n}\na[name]:hover {\n    text-decoration:none;\n    color:#353833;\n}\npre {\n    font-family:'DejaVu Sans Mono', monospace;\n    font-size:14px;\n}\nh1 {\n    font-size:20px;\n}\nh2 {\n    font-size:18px;\n}\nh3 {\n    font-size:16px;\n    font-style:italic;\n}\nh4 {\n    font-size:13px;\n}\nh5 {\n    font-size:12px;\n}\nh6 {\n    font-size:11px;\n}\nul {\n    list-style-type:disc;\n}\ncode, tt {\n    font-family:'DejaVu Sans Mono', monospace;\n    font-size:14px;\n    padding-top:4px;\n    margin-top:8px;\n    line-height:1.4em;\n}\ndt code {\n    font-family:'DejaVu Sans Mono', monospace;\n    font-size:14px;\n    padding-top:4px;\n}\ntable tr td dt code {\n    font-family:'DejaVu Sans Mono', monospace;\n    font-size:14px;\n    vertical-align:top;\n    padding-top:4px;\n}\nsup {\n    font-size:8px;\n}\n/*\nDocument title and Copyright styles\n*/\n.clear {\n    clear:both;\n    height:0px;\n    overflow:hidden;\n}\n.aboutLanguage {\n    float:right;\n    padding:0px 21px;\n    font-size:11px;\n    z-index:200;\n    margin-top:-9px;\n}\n.legalCopy {\n    margin-left:.5em;\n}\n.bar a, .bar a:link, .bar a:visited, .bar a:active {\n    color:#FFFFFF;\n    text-decoration:none;\n}\n.bar a:hover, .bar a:focus {\n    color:#bb7a2a;\n}\n.tab {\n    background-color:#0066FF;\n    color:#ffffff;\n    padding:8px;\n    width:5em;\n    font-weight:bold;\n}\n/*\nNavigation bar styles\n*/\n.bar {\n    background-color:#4D7A97;\n    color:#FFFFFF;\n    padding:.8em .5em .4em .8em;\n    height:auto;/*height:1.8em;*/\n    font-size:11px;\n    margin:0;\n}\n.topNav {\n    background-color:#4D7A97;\n    color:#FFFFFF;\n    float:left;\n    padding:0;\n    width:100%;\n    clear:right;\n    height:2.8em;\n    padding-top:10px;\n    overflow:hidden;\n    font-size:12px; \n}\n.bottomNav {\n    margin-top:10px;\n    background-color:#4D7A97;\n    color:#FFFFFF;\n    float:left;\n    padding:0;\n    width:100%;\n    clear:right;\n    height:2.8em;\n    padding-top:10px;\n    overflow:hidden;\n    font-size:12px;\n}\n.subNav {\n    background-color:#dee3e9;\n    float:left;\n    width:100%;\n    overflow:hidden;\n    font-size:12px;\n}\n.subNav div {\n    clear:left;\n    float:left;\n    padding:0 0 5px 6px;\n    text-transform:uppercase;\n}\nul.navList, ul.subNavList {\n    float:left;\n    margin:0 25px 0 0;\n    padding:0;\n}\nul.navList li{\n    list-style:none;\n    float:left;\n    padding: 5px 6px;\n    text-transform:uppercase;\n}\nul.subNavList li{\n    list-style:none;\n    float:left;\n}\n.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited {\n    color:#FFFFFF;\n    text-decoration:none;\n    text-transform:uppercase;\n}\n.topNav a:hover, .bottomNav a:hover {\n    text-decoration:none;\n    color:#bb7a2a;\n    text-transform:uppercase;\n}\n.navBarCell1Rev {\n    background-color:#F8981D;\n    color:#253441;\n    margin: auto 5px;\n}\n.skipNav {\n    position:absolute;\n    top:auto;\n    left:-9999px;\n    overflow:hidden;\n}\n/*\nPage header and footer styles\n*/\n.header, .footer {\n    clear:both;\n    margin:0 20px;\n    padding:5px 0 0 0;\n}\n.indexHeader {\n    margin:10px;\n    position:relative;\n}\n.indexHeader span{\n    margin-right:15px;\n}\n.indexHeader h1 {\n    font-size:13px;\n}\n.title {\n    color:#2c4557;\n    margin:10px 0;\n}\n.subTitle {\n    margin:5px 0 0 0;\n}\n.header ul {\n    margin:0 0 15px 0;\n    padding:0;\n}\n.footer ul {\n    margin:20px 0 5px 0;\n}\n.header ul li, .footer ul li {\n    list-style:none;\n    font-size:13px;\n}\n/*\nHeading styles\n*/\ndiv.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {\n    background-color:#dee3e9;\n    border:1px solid #d0d9e0;\n    margin:0 0 6px -8px;\n    padding:7px 5px;\n}\nul.blockList ul.blockList ul.blockList li.blockList h3 {\n    background-color:#dee3e9;\n    border:1px solid #d0d9e0;\n    margin:0 0 6px -8px;\n    padding:7px 5px;\n}\nul.blockList ul.blockList li.blockList h3 {\n    padding:0;\n    margin:15px 0;\n}\nul.blockList li.blockList h2 {\n    padding:0px 0 20px 0;\n}\n/*\nPage layout container styles\n*/\n.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer {\n    clear:both;\n    padding:10px 20px;\n    position:relative;\n}\n.indexContainer {\n    margin:10px;\n    position:relative;\n    font-size:12px;\n}\n.indexContainer h2 {\n    font-size:13px;\n    padding:0 0 3px 0;\n}\n.indexContainer ul {\n    margin:0;\n    padding:0;\n}\n.indexContainer ul li {\n    list-style:none;\n    padding-top:2px;\n}\n.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {\n    font-size:12px;\n    font-weight:bold;\n    margin:10px 0 0 0;\n    color:#4E4E4E;\n}\n.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd {\n    margin:5px 0 10px 0px;\n    font-size:14px;\n    font-family:'DejaVu Sans Mono',monospace;\n}\n.serializedFormContainer dl.nameValue dt {\n    margin-left:1px;\n    font-size:1.1em;\n    display:inline;\n    font-weight:bold;\n}\n.serializedFormContainer dl.nameValue dd {\n    margin:0 0 0 1px;\n    font-size:1.1em;\n    display:inline;\n}\n/*\nList styles\n*/\nul.horizontal li {\n    display:inline;\n    font-size:0.9em;\n}\nul.inheritance {\n    margin:0;\n    padding:0;\n}\nul.inheritance li {\n    display:inline;\n    list-style:none;\n}\nul.inheritance li ul.inheritance {\n    margin-left:15px;\n    padding-left:15px;\n    padding-top:1px;\n}\nul.blockList, ul.blockListLast {\n    margin:10px 0 10px 0;\n    padding:0;\n}\nul.blockList li.blockList, ul.blockListLast li.blockList {\n    list-style:none;\n    margin-bottom:15px;\n    line-height:1.4;\n}\nul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList {\n    padding:0px 20px 5px 10px;\n    border:1px solid #ededed; \n    background-color:#f8f8f8;\n}\nul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList {\n    padding:0 0 5px 8px;\n    background-color:#ffffff;\n    border:none;\n}\nul.blockList ul.blockList ul.blockList ul.blockList li.blockList {\n    margin-left:0;\n    padding-left:0;\n    padding-bottom:15px;\n    border:none;\n}\nul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {\n    list-style:none;\n    border-bottom:none;\n    padding-bottom:0;\n}\ntable tr td dl, table tr td dl dt, table tr td dl dd {\n    margin-top:0;\n    margin-bottom:1px;\n}\n/*\nTable styles\n*/\n.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary {\n    width:100%;\n    border-left:1px solid #EEE; \n    border-right:1px solid #EEE; \n    border-bottom:1px solid #EEE; \n}\n.overviewSummary, .memberSummary  {\n    padding:0px;\n}\n.overviewSummary caption, .memberSummary caption, .typeSummary caption,\n.useSummary caption, .constantsSummary caption, .deprecatedSummary caption {\n    position:relative;\n    text-align:left;\n    background-repeat:no-repeat;\n    color:#253441;\n    font-weight:bold;\n    clear:none;\n    overflow:hidden;\n    padding:0px;\n    padding-top:10px;\n    padding-left:1px;\n    margin:0px;\n    white-space:pre;\n}\n.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link,\n.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link,\n.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover,\n.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover,\n.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active,\n.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active,\n.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited,\n.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited {\n    color:#FFFFFF;\n}\n.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,\n.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span {\n    white-space:nowrap;\n    padding-top:5px;\n    padding-left:12px;\n    padding-right:12px;\n    padding-bottom:7px;\n    display:inline-block;\n    float:left;\n    background-color:#F8981D;\n    border: none;\n    height:16px;\n}\n.memberSummary caption span.activeTableTab span {\n    white-space:nowrap;\n    padding-top:5px;\n    padding-left:12px;\n    padding-right:12px;\n    margin-right:3px;\n    display:inline-block;\n    float:left;\n    background-color:#F8981D;\n    height:16px;\n}\n.memberSummary caption span.tableTab span {\n    white-space:nowrap;\n    padding-top:5px;\n    padding-left:12px;\n    padding-right:12px;\n    margin-right:3px;\n    display:inline-block;\n    float:left;\n    background-color:#4D7A97;\n    height:16px;\n}\n.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab {\n    padding-top:0px;\n    padding-left:0px;\n    padding-right:0px;\n    background-image:none;\n    float:none;\n    display:inline;\n}\n.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd,\n.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd {\n    display:none;\n    width:5px;\n    position:relative;\n    float:left;\n    background-color:#F8981D;\n}\n.memberSummary .activeTableTab .tabEnd {\n    display:none;\n    width:5px;\n    margin-right:3px;\n    position:relative; \n    float:left;\n    background-color:#F8981D;\n}\n.memberSummary .tableTab .tabEnd {\n    display:none;\n    width:5px;\n    margin-right:3px;\n    position:relative;\n    background-color:#4D7A97;\n    float:left;\n\n}\n.overviewSummary td, .memberSummary td, .typeSummary td,\n.useSummary td, .constantsSummary td, .deprecatedSummary td {\n    text-align:left;\n    padding:0px 0px 12px 10px;\n    width:100%;\n}\nth.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th,\ntd.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{\n    vertical-align:top;\n    padding-right:0px;\n    padding-top:8px;\n    padding-bottom:3px;\n}\nth.colFirst, th.colLast, th.colOne, .constantsSummary th {\n    background:#dee3e9;\n    text-align:left;\n    padding:8px 3px 3px 7px;\n}\ntd.colFirst, th.colFirst {\n    white-space:nowrap;\n    font-size:13px;\n}\ntd.colLast, th.colLast {\n    font-size:13px;\n}\ntd.colOne, th.colOne {\n    font-size:13px;\n}\n.overviewSummary td.colFirst, .overviewSummary th.colFirst,\n.overviewSummary td.colOne, .overviewSummary th.colOne,\n.memberSummary td.colFirst, .memberSummary th.colFirst,\n.memberSummary td.colOne, .memberSummary th.colOne,\n.typeSummary td.colFirst{\n    width:25%;\n    vertical-align:top;\n}\ntd.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover {\n    font-weight:bold;\n}\n.tableSubHeadingColor {\n    background-color:#EEEEFF;\n}\n.altColor {\n    background-color:#FFFFFF;\n}\n.rowColor {\n    background-color:#EEEEEF;\n}\n/*\nContent styles\n*/\n.description pre {\n    margin-top:0;\n}\n.deprecatedContent {\n    margin:0;\n    padding:10px 0;\n}\n.docSummary {\n    padding:0;\n}\n\nul.blockList ul.blockList ul.blockList li.blockList h3 {\n    font-style:normal;\n}\n\ndiv.block {\n    font-size:14px;\n    font-family:'DejaVu Serif', Georgia, \"Times New Roman\", Times, serif;\n}\n\ntd.colLast div {\n    padding-top:0px;\n}\n\n\ntd.colLast a {\n    padding-bottom:3px;\n}\n/*\nFormatting effect styles\n*/\n.sourceLineNo {\n    color:green;\n    padding:0 30px 0 0;\n}\nh1.hidden {\n    visibility:hidden;\n    overflow:hidden;\n    font-size:10px;\n}\n.block {\n    display:block;\n    margin:3px 10px 2px 0px;\n    color:#474747;\n}\n.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink,\n.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel,\n.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink {\n    font-weight:bold;\n}\n.deprecationComment, .emphasizedPhrase, .interfaceName {\n    font-style:italic;\n}\n\ndiv.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase,\ndiv.block div.block span.interfaceName {\n    font-style:normal;\n}\n\ndiv.contentContainer ul.blockList li.blockList h2{\n    padding-bottom:0px;\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Applications/Android Studio.app/sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.microsoft.windowsazure.mobileservices\">\n\n    <application android:allowBackup=\"true\">\n\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/ApiJsonOperationCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ApiJsonOperationCallback.java\n */\n\npackage com.microsoft.windowsazure.mobileservices;\n\nimport com.google.gson.JsonElement;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\n/**\n * Callback used after a custom Api invocation is executed using JSON\n */\npublic interface ApiJsonOperationCallback {\n    /**\n     * Method to call when the operation is completed\n     *\n     * @param jsonElement The obtained jsonElement\n     * @param exception   An exception representing the error, in case there was one\n     * @param response    Response object\n     */\n    public void onCompleted(JsonElement jsonObject, Exception exception, ServiceFilterResponse response);\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/ApiOperationCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ApiOperationCallback.java\n */\n\npackage com.microsoft.windowsazure.mobileservices;\n\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\n/**\n * Callback used after a custom Api invocation is executed\n *\n * @param <E> The API return value entity\n */\npublic interface ApiOperationCallback<E> {\n    /**\n     * Method to call when the operation is completed\n     *\n     * @param result    The obtained result\n     * @param exception An exception representing the error, in case there was one\n     * @param response  Response object\n     */\n    public void onCompleted(E result, Exception exception, ServiceFilterResponse response);\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/MobileServiceApplication.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceApplication.java\n */\npackage com.microsoft.windowsazure.mobileservices;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.content.SharedPreferences.Editor;\nimport android.preference.PreferenceManager;\n\nimport java.util.UUID;\n\n/**\n * Provides context regarding the application that is using the Mobile Service.\n */\npublic final class MobileServiceApplication {\n\n    /**\n     * Name of the key in the config setting that stores the installation ID\n     */\n    private static final String INSTALLATION_ID_KEY = \"applicationInstallationId\";\n\n    /**\n     * The ID used to identify this installation of the application to provide\n     * telemetry data. It will either be retrieved from local settings or\n     * generated fresh.\n     */\n    private static String mInstallationId = null;\n\n    /**\n     * Gets the ID used to identify this installation of the application to\n     * provide telemetry data. It will either be retrieved from local settings\n     * or generated fresh.\n     *\n     * @param context The context used to manage the application preferences\n     * @return The Installation ID\n     */\n    public static String getInstallationId(Context context) {\n\n        // if the device is an emulator, return a fixed installation id\n        if (isEmulator()) {\n            return \"00000000-0000-0000-0000-000000000000\";\n        }\n\n        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n        if (mInstallationId == null) {\n            String val = preferences.getString(INSTALLATION_ID_KEY, null);\n            mInstallationId = val;\n\n            // Generate a new AppInstallationId if we failed to find one\n            if (mInstallationId == null) {\n                mInstallationId = UUID.randomUUID().toString();\n\n                Editor preferencesEditor = preferences.edit();\n                preferencesEditor.putString(INSTALLATION_ID_KEY, mInstallationId);\n                preferencesEditor.commit();\n            }\n        }\n\n        return mInstallationId;\n\n    }\n\n    private static boolean isEmulator() {\n        return \"google_sdk\".equals(android.os.Build.PRODUCT) || \"sdk\".equals(android.os.Build.PRODUCT);\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/MobileServiceClient.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceClient.java\n */\npackage com.microsoft.windowsazure.mobileservices;\n\nimport android.accounts.Account;\nimport android.accounts.AccountManager;\nimport android.accounts.AccountManagerCallback;\nimport android.accounts.AccountManagerFuture;\nimport android.app.Activity;\nimport android.content.Context;\nimport android.os.Bundle;\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.FutureCallback;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.GsonBuilder;\nimport com.google.gson.JsonDeserializer;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.google.gson.JsonSerializer;\nimport com.google.gson.annotations.SerializedName;\nimport com.microsoft.windowsazure.mobileservices.authentication.LoginManager;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;\nimport com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactory;\nimport com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactoryImpl;\nimport com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection;\nimport com.microsoft.windowsazure.mobileservices.http.MobileServiceHttpClient;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\nimport com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer;\nimport com.microsoft.windowsazure.mobileservices.table.serialization.JsonEntityParser;\nimport com.microsoft.windowsazure.mobileservices.table.serialization.LongSerializer;\nimport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceJsonSyncTable;\nimport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext;\nimport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncTable;\n\nimport org.apache.http.client.methods.HttpPost;\nimport org.apache.http.protocol.HTTP;\n\nimport java.io.UnsupportedEncodingException;\nimport java.lang.reflect.Array;\nimport java.lang.reflect.Field;\nimport java.lang.reflect.Modifier;\nimport java.lang.reflect.Type;\nimport java.net.MalformedURLException;\nimport java.net.URL;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.EnumSet;\nimport java.util.HashMap;\nimport java.util.List;\n\n/**\n * Entry-point for Microsoft Azure Mobile Services interactions\n */\npublic class MobileServiceClient {\n    /**\n     * UTF-8 encoding\n     */\n    public static final String UTF8_ENCODING = \"UTF-8\";\n    /**\n     * Google account type\n     */\n    public static final String GOOGLE_ACCOUNT_TYPE = \"com.google\";\n    /**\n     * Authentication token type required for client login\n     */\n    public static final String GOOGLE_USER_INFO_SCOPE = \"oauth2:https://www.googleapis.com/auth/userinfo.profile\";\n    /**\n     * Custom API Url\n     */\n    private static final String CUSTOM_API_URL = \"api/\";\n    /**\n     * LoginManager used for login methods\n     */\n    private LoginManager mLoginManager;\n    /**\n     * Mobile Service application key\n     */\n    private String mAppKey;\n    /**\n     * Mobile Service URL\n     */\n    private URL mAppUrl;\n    /**\n     * Flag to indicate that a login operation is in progress\n     */\n    private boolean mLoginInProgress;\n    /**\n     * The current authenticated user\n     */\n    private MobileServiceUser mCurrentUser;\n    /**\n     * Service filter to execute the request\n     */\n    private ServiceFilter mServiceFilter;\n    /**\n     * GsonBuilder used to in JSON Serialization/Deserialization\n     */\n    private GsonBuilder mGsonBuilder;\n    /**\n     * Context where the MobileServiceClient is created\n     */\n    private Context mContext;\n    /**\n     * AndroidHttpClientFactory used for request execution\n     */\n    private AndroidHttpClientFactory mAndroidHttpClientFactory;\n    /**\n     * MobileServicePush used for push notifications\n     */\n    private MobileServicePush mPush;\n    /**\n     * MobileServiceSyncContext used for synchronization between local and\n     * remote databases.\n     */\n    private MobileServiceSyncContext mSyncContext;\n\n    /**\n     * Constructor for the MobileServiceClient\n     *\n     * @param appUrl  Mobile Service URL\n     * @param appKey  Mobile Service application key\n     * @param context The Context where the MobileServiceClient is created\n     * @throws java.net.MalformedURLException\n     */\n    public MobileServiceClient(String appUrl, String appKey, Context context) throws MalformedURLException {\n        this(new URL(appUrl), appKey, context);\n    }\n\n    /**\n     * Constructor for the MobileServiceClient\n     *\n     * @param client An existing MobileServiceClient\n     */\n    public MobileServiceClient(MobileServiceClient client) {\n        initialize(client.getAppUrl(), client.getAppKey(), client.getCurrentUser(), client.getGsonBuilder(), client.getContext(),\n                client.getAndroidHttpClientFactory());\n    }\n\n    /**\n     * Constructor for the MobileServiceClient\n     *\n     * @param appUrl  Mobile Service URL\n     * @param appKey  Mobile Service application key\n     * @param context The Context where the MobileServiceClient is created\n     */\n    public MobileServiceClient(URL appUrl, String appKey, Context context) {\n        GsonBuilder gsonBuilder = createMobileServiceGsonBuilder();\n        gsonBuilder.serializeNulls(); // by default, add null serialization\n\n        initialize(appUrl, appKey, null, gsonBuilder, context, new AndroidHttpClientFactoryImpl());\n    }\n\n    /**\n     * Creates a GsonBuilder with custom serializers to use with Microsoft Azure\n     * Mobile Services\n     *\n     * @return\n     */\n    public static GsonBuilder createMobileServiceGsonBuilder() {\n        GsonBuilder gsonBuilder = new GsonBuilder();\n\n        // Register custom date serializer/deserializer\n        gsonBuilder.registerTypeAdapter(Date.class, new DateSerializer());\n        LongSerializer longSerializer = new LongSerializer();\n        gsonBuilder.registerTypeAdapter(Long.class, longSerializer);\n        gsonBuilder.registerTypeAdapter(long.class, longSerializer);\n\n        return gsonBuilder;\n    }\n\n    /**\n     * Invokes an interactive authentication process using the specified\n     * Authentication Provider\n     *\n     * @param provider The provider used for the authentication process\n     */\n    public ListenableFuture<MobileServiceUser> login(MobileServiceAuthenticationProvider provider) {\n        return login(provider.toString());\n    }\n\n    /**\n     * Invokes an interactive authentication process using the specified\n     * Authentication Provider\n     *\n     * @param provider The provider used for the authentication process\n     * @param parameters Aditional parameters for the authentication process\n     */\n    public ListenableFuture<MobileServiceUser> login(MobileServiceAuthenticationProvider provider, HashMap<String, String> parameters) {\n        return login(provider.toString(), parameters);\n    }\n\n    /**\n     * Invokes an interactive authentication process using the specified\n     * Authentication Provider\n     *\n     * @param provider The provider used for the authentication process\n     * @param callback Callback to invoke when the authentication process finishes\n     * @deprecated use {@link login( com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider\n     * provider)} instead\n     */\n    public void login(MobileServiceAuthenticationProvider provider, UserAuthenticationCallback callback) {\n        login(provider.toString(), callback);\n    }\n\n\n    /**\n     * Invokes an interactive authentication process using the specified\n     * Authentication Provider\n     *\n     * @param provider The provider used for the authentication process\n     * @param parameters Aditional parameters for the authentication process\n     * @param callback Callback to invoke when the authentication process finishes\n     * @deprecated use {@link login( com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider\n     * provider)} instead\n     */\n    public void login(MobileServiceAuthenticationProvider provider, HashMap<String, String> parameters, UserAuthenticationCallback callback) {\n        login(provider.toString(), parameters, callback);\n    }\n\n    /**\n     * Invokes an interactive authentication process using the specified\n     * Authentication Provider\n     *\n     * @param provider The provider used for the authentication process\n     */\n    public ListenableFuture<MobileServiceUser> login(String provider) {\n        return login(provider, (HashMap<String, String>) null);\n    }\n\n    /**\n     * Invokes an interactive authentication process using the specified\n     * Authentication Provider\n     *\n     * @param provider The provider used for the authentication process\n     * @param parameters Aditional parameters for the authentication process\n     */\n    public ListenableFuture<MobileServiceUser> login(String provider, HashMap<String, String> parameters) {\n        mLoginInProgress = true;\n\n        final SettableFuture<MobileServiceUser> resultFuture = SettableFuture.create();\n\n        ListenableFuture<MobileServiceUser> future = mLoginManager.authenticate(provider, mContext, parameters);\n\n        Futures.addCallback(future, new FutureCallback<MobileServiceUser>() {\n            @Override\n            public void onFailure(Throwable e) {\n                mLoginInProgress = false;\n\n                resultFuture.setException(e);\n            }\n\n            @Override\n            public void onSuccess(MobileServiceUser user) {\n                mCurrentUser = user;\n                mLoginInProgress = false;\n\n                resultFuture.set(user);\n            }\n        });\n\n        return resultFuture;\n    }\n\n    /**\n     * Invokes an interactive authentication process using the specified\n     * Authentication Provider\n     *\n     * @param provider The provider used for the authentication process\n     * @param callback Callback to invoke when the authentication process finishes\n     * @deprecated use {@link login(String provider)} instead\n     */\n    public void login(String provider, final UserAuthenticationCallback callback) {\n        login(provider, (HashMap<String, String>) null, callback);\n    }\n\n    /**\n     * Invokes an interactive authentication process using the specified\n     * Authentication Provider\n     *\n     * @param provider The provider used for the authentication process\n     * @param parameters Aditional parameters for the authentication process\n     * @param callback Callback to invoke when the authentication process finishes\n     * @deprecated use {@link login(String provider)} instead\n     */\n    public void login(String provider, HashMap<String, String> parameters, final UserAuthenticationCallback callback) {\n        ListenableFuture<MobileServiceUser> loginFuture = login(provider, parameters);\n\n        Futures.addCallback(loginFuture, new FutureCallback<MobileServiceUser>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(MobileServiceUser user) {\n                callback.onCompleted(user, null, null);\n            }\n        });\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken A Json object representing the oAuth token used for\n     *                   authentication\n     */\n    public ListenableFuture<MobileServiceUser> login(MobileServiceAuthenticationProvider provider, JsonObject oAuthToken) {\n        return login(provider.toString(), oAuthToken);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken A Json object representing the oAuth token used for\n     * @param parameters Aditional parameters for the authentication process\n     *                   authentication\n     */\n    public ListenableFuture<MobileServiceUser> login(MobileServiceAuthenticationProvider provider, JsonObject oAuthToken, HashMap<String, String> parameters) {\n        return login(provider.toString(), oAuthToken, parameters);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken A Json object representing the oAuth token used for\n     *                   authentication\n     * @param callback   Callback to invoke when the authentication process finishes\n     * @deprecated use {@link login( com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider\n     * provider, com.google.gson.JsonObject oAuthToken)} instead\n     */\n    public void login(MobileServiceAuthenticationProvider provider, JsonObject oAuthToken, UserAuthenticationCallback callback) {\n        login(provider, oAuthToken, null, callback);\n    }\n\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken A Json object representing the oAuth token used for\n     *                   authentication\n     * @param parameters Aditional parameters for the authentication process\n     * @param callback   Callback to invoke when the authentication process finishes\n     * @deprecated use {@link login( com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider\n     * provider, com.google.gson.JsonObject oAuthToken)} instead\n     */\n    public void login(MobileServiceAuthenticationProvider provider, JsonObject oAuthToken, HashMap<String, String> parameters, UserAuthenticationCallback callback) {\n        login(provider.toString(), oAuthToken, parameters, callback);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken A Json object representing the oAuth token used for\n     *                   authentication\n     */\n    public ListenableFuture<MobileServiceUser> login(String provider, JsonObject oAuthToken) {\n        if (oAuthToken == null) {\n            throw new IllegalArgumentException(\"oAuthToken cannot be null\");\n        }\n\n        return login(provider, oAuthToken.toString());\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken A Json object representing the oAuth token used for\n     *                   authentication\n     * @param parameters Aditional parameters for the authentication process\n     */\n    public ListenableFuture<MobileServiceUser> login(String provider, JsonObject oAuthToken, HashMap<String, String> parameters) {\n        if (oAuthToken == null) {\n            throw new IllegalArgumentException(\"oAuthToken cannot be null\");\n        }\n\n        return login(provider, oAuthToken.toString(), parameters);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken A Json object representing the oAuth token used for\n     *                   authentication\n     * @param callback   Callback to invoke when the authentication process finishes\n     * @deprecated use {@link login(String provider, com.google.gson.JsonObject oAuthToken)}\n     * instead\n     */\n    public void login(String provider, JsonObject oAuthToken, UserAuthenticationCallback callback) {\n        login(provider, oAuthToken.toString(), null, callback);\n    }\n\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken A Json object representing the oAuth token used for\n     *                   authentication\n     * @param parameters Aditional parameters for the authentication process\n     * @param callback   Callback to invoke when the authentication process finishes\n     * @deprecated use {@link login(String provider, com.google.gson.JsonObject oAuthToken)}\n     * instead\n     */\n    public void login(String provider, JsonObject oAuthToken, HashMap<String, String> parameters, UserAuthenticationCallback callback) {\n        if (oAuthToken == null) {\n            throw new IllegalArgumentException(\"oAuthToken cannot be null\");\n        }\n\n        login(provider, oAuthToken.toString(), parameters, callback);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken The oAuth token used for authentication\n     */\n    public ListenableFuture<MobileServiceUser> login(MobileServiceAuthenticationProvider provider, String oAuthToken) {\n        return login(provider, oAuthToken, (HashMap<String, String>) null);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken The oAuth token used for authentication\n     * @param parameters Aditional parameters for the authentication process\n     */\n    public ListenableFuture<MobileServiceUser> login(MobileServiceAuthenticationProvider provider, String oAuthToken, HashMap<String, String> parameters) {\n        return login(provider.toString(), oAuthToken, parameters);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken The oAuth token used for authentication\n     * @param callback   Callback to invoke when the authentication process finishes\n     * @deprecated use {@link login( com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider\n     * provider, String oAuthToken)} instead\n     */\n    public void login(MobileServiceAuthenticationProvider provider, String oAuthToken, UserAuthenticationCallback callback) {\n        login(provider, oAuthToken, null, callback);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken The oAuth token used for authentication\n     * @param parameters Aditional parameters for the authentication process\n     * @param callback   Callback to invoke when the authentication process finishes\n     * @deprecated use {@link login( com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider\n     * provider, String oAuthToken)} instead\n     */\n    public void login(MobileServiceAuthenticationProvider provider, String oAuthToken, HashMap<String, String> parameters, UserAuthenticationCallback callback) {\n        login(provider.toString(), oAuthToken, parameters, callback);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken The oAuth token used for authentication\n     */\n    public ListenableFuture<MobileServiceUser> login(String provider, String oAuthToken) {\n        return login(provider, oAuthToken, (HashMap<String, String>) null);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken The oAuth token used for authentication\n     */\n    public ListenableFuture<MobileServiceUser> login(String provider, String oAuthToken, HashMap<String, String> parameters) {\n        if (oAuthToken == null) {\n            throw new IllegalArgumentException(\"oAuthToken cannot be null\");\n        }\n\n        final SettableFuture<MobileServiceUser> resultFuture = SettableFuture.create();\n\n        mLoginInProgress = true;\n\n        ListenableFuture<MobileServiceUser> future = mLoginManager.authenticate(provider, oAuthToken, parameters);\n\n        Futures.addCallback(future, new FutureCallback<MobileServiceUser>() {\n            @Override\n            public void onFailure(Throwable e) {\n                mLoginInProgress = false;\n\n                resultFuture.setException(e);\n            }\n\n            @Override\n            public void onSuccess(MobileServiceUser user) {\n                mCurrentUser = user;\n                mLoginInProgress = false;\n\n                resultFuture.set(user);\n            }\n        });\n\n        return resultFuture;\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken The oAuth token used for authentication\n     * @param callback   Callback to invoke when the authentication process finishes\n     * @deprecated use {@link login(String provider, String oAuthToken)} instead\n     */\n    public void login(String provider, String oAuthToken, final UserAuthenticationCallback callback) {\n        login(provider, oAuthToken, null, callback);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken The oAuth token used for authentication\n     * @param parameters Aditional parameters for the authentication process\n     * @param callback   Callback to invoke when the authentication process finishes\n     * @deprecated use {@link login(String provider, String oAuthToken)} instead\n     */\n    public void login(String provider, String oAuthToken, HashMap<String, String> parameters, final UserAuthenticationCallback callback) {\n        ListenableFuture<MobileServiceUser> loginFuture = login(provider, oAuthToken, parameters);\n\n        Futures.addCallback(loginFuture, new FutureCallback<MobileServiceUser>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(MobileServiceUser user) {\n                callback.onCompleted(user, null, null);\n            }\n        });\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a the Google\n     * account registered in the device\n     *\n     * @param activity The activity that triggered the authentication\n     */\n    public ListenableFuture<MobileServiceUser> loginWithGoogleAccount(Activity activity) {\n        return loginWithGoogleAccount(activity, GOOGLE_USER_INFO_SCOPE);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a the Google\n     * account registered in the device\n     *\n     * @param activity The activity that triggered the authentication\n     * @param callback Callback to invoke when the authentication process finishes\n     * @deprecated use {@link loginWithGoogleAccount( android.app.Activity activity)} instead\n     */\n    public void loginWithGoogleAccount(Activity activity, final UserAuthenticationCallback callback) {\n        loginWithGoogleAccount(activity, GOOGLE_USER_INFO_SCOPE, callback);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a the Google\n     * account registered in the device\n     *\n     * @param activity The activity that triggered the authentication\n     * @param scopes   The scopes used as authentication token type for login\n     */\n    public ListenableFuture<MobileServiceUser> loginWithGoogleAccount(Activity activity, String scopes) {\n        AccountManager acMgr = AccountManager.get(activity.getApplicationContext());\n        Account[] accounts = acMgr.getAccountsByType(GOOGLE_ACCOUNT_TYPE);\n\n        Account account;\n        if (accounts.length == 0) {\n            account = null;\n        } else {\n            account = accounts[0];\n        }\n\n        return loginWithGoogleAccount(activity, account, scopes);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a the Google\n     * account registered in the device\n     *\n     * @param activity The activity that triggered the authentication\n     * @param scopes   The scopes used as authentication token type for login\n     * @param callback Callback to invoke when the authentication process finishes\n     * @deprecated use {@link loginWithGoogleAccount( android.app.Activity activity, String\n     * scopes)} instead\n     */\n    public void loginWithGoogleAccount(Activity activity, String scopes, final UserAuthenticationCallback callback) {\n        ListenableFuture<MobileServiceUser> loginFuture = loginWithGoogleAccount(activity, scopes);\n\n        Futures.addCallback(loginFuture, new FutureCallback<MobileServiceUser>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(MobileServiceUser user) {\n                callback.onCompleted(user, null, null);\n            }\n        });\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a the Google\n     * account registered in the device\n     *\n     * @param activity The activity that triggered the authentication\n     * @param account  The account used for the login operation\n     */\n    public ListenableFuture<MobileServiceUser> loginWithGoogleAccount(Activity activity, Account account) {\n        return loginWithGoogleAccount(activity, account, GOOGLE_USER_INFO_SCOPE);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a the Google\n     * account registered in the device\n     *\n     * @param activity The activity that triggered the authentication\n     * @param account  The account used for the login operation\n     * @param callback Callback to invoke when the authentication process finishes\n     * @deprecated use {@link loginWithGoogleAccount( android.app.Activity activity, android.accounts.Account\n     * account)} instead\n     */\n    public void loginWithGoogleAccount(Activity activity, Account account, final UserAuthenticationCallback callback) {\n        loginWithGoogleAccount(activity, account, GOOGLE_USER_INFO_SCOPE, callback);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a the Google\n     * account registered in the device\n     *\n     * @param activity The activity that triggered the authentication\n     * @param account  The account used for the login operation\n     * @param scopes   The scopes used as authentication token type for login\n     */\n    public ListenableFuture<MobileServiceUser> loginWithGoogleAccount(Activity activity, Account account, String scopes) {\n        final SettableFuture<MobileServiceUser> future = SettableFuture.create();\n\n        try {\n            if (account == null) {\n                throw new IllegalArgumentException(\"account\");\n            }\n\n            final MobileServiceClient client = this;\n\n            AccountManagerCallback<Bundle> authCallback = new AccountManagerCallback<Bundle>() {\n\n                @Override\n                public void run(AccountManagerFuture<Bundle> futureBundle) {\n                    try {\n                        if (futureBundle.isCancelled()) {\n                            future.setException(new MobileServiceException(\"User cancelled\"));\n                            // callback.onCompleted(null, new\n                            // MobileServiceException(\"User cancelled\"), null);\n                        } else {\n                            Bundle bundle = futureBundle.getResult();\n\n                            String token = (String) (bundle.get(AccountManager.KEY_AUTHTOKEN));\n\n                            JsonObject json = new JsonObject();\n                            json.addProperty(\"access_token\", token);\n\n                            ListenableFuture<MobileServiceUser> loginFuture = client.login(MobileServiceAuthenticationProvider.Google, json);\n\n                            Futures.addCallback(loginFuture, new FutureCallback<MobileServiceUser>() {\n                                @Override\n                                public void onFailure(Throwable e) {\n                                    future.setException(e);\n                                }\n\n                                @Override\n                                public void onSuccess(MobileServiceUser user) {\n                                    future.set(user);\n                                }\n                            });\n                        }\n                    } catch (Exception e) {\n                        future.setException(e);\n                    }\n                }\n            };\n\n            AccountManager acMgr = AccountManager.get(activity.getApplicationContext());\n            acMgr.getAuthToken(account, scopes, null, activity, authCallback, null);\n\n        } catch (Exception e) {\n            future.setException(e);\n        }\n\n        return future;\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a the Google\n     * account registered in the device\n     *\n     * @param activity The activity that triggered the authentication\n     * @param account  The account used for the login operation\n     * @param scopes   The scopes used as authentication token type for login\n     * @param callback Callback to invoke when the authentication process finishes\n     * @deprecated use {@link loginWithGoogleAccount( android.app.Activity activity, android.accounts.Account\n     * account, String scopes)} instead\n     */\n    public void loginWithGoogleAccount(Activity activity, Account account, String scopes, final UserAuthenticationCallback callback) {\n        ListenableFuture<MobileServiceUser> loginFuture = loginWithGoogleAccount(activity, account, scopes);\n\n        Futures.addCallback(loginFuture, new FutureCallback<MobileServiceUser>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(MobileServiceUser user) {\n                callback.onCompleted(user, null, null);\n            }\n        });\n    }\n\n    /**\n     * Log the user out of the Mobile Service\n     */\n    public void logout() {\n        mCurrentUser = null;\n    }\n\n    /**\n     * Returns the Mobile Service application key\n     */\n    public String getAppKey() {\n        return mAppKey;\n    }\n\n    /**\n     * Returns The Mobile Service URL\n     */\n    public URL getAppUrl() {\n        return mAppUrl;\n    }\n\n    /**\n     * Indicates if a login operation is in progress\n     */\n    public boolean isLoginInProgress() {\n        return mLoginInProgress;\n    }\n\n    /**\n     * Returns the current authenticated user\n     */\n    public MobileServiceUser getCurrentUser() {\n        return mCurrentUser;\n    }\n\n    /**\n     * Sets a user to authenticate the Mobile Service operations\n     *\n     * @param user The user used to authenticate requests\n     */\n    public void setCurrentUser(MobileServiceUser user) {\n        mCurrentUser = user;\n    }\n\n    /**\n     * Returns a MobileServiceSyncContext instance.\n     *\n     * @return the MobileServiceSyncContext instance\n     */\n    public MobileServiceSyncContext getSyncContext() {\n        return this.mSyncContext;\n    }\n\n    /**\n     * Creates a MobileServiceJsonTable\n     *\n     * @param name Table name\n     * @return MobileServiceJsonTable with the given name\n     */\n    public MobileServiceJsonTable getTable(String name) {\n        return new MobileServiceJsonTable(name, this);\n    }\n\n    /**\n     * Returns a MobileServiceJsonSyncTable instance, which provides untyped\n     * data operations for a local table.\n     *\n     * @param name Table name\n     * @return The MobileServiceJsonSyncTable instance\n     */\n    public MobileServiceJsonSyncTable getSyncTable(String name) {\n        return new MobileServiceJsonSyncTable(name, this);\n    }\n\n    /**\n     * Creates a MobileServiceTable\n     *\n     * @param clazz The class used for table name and data serialization\n     * @return MobileServiceTable with the given name\n     */\n    public <E> MobileServiceTable<E> getTable(Class<E> clazz) {\n        return this.getTable(clazz.getSimpleName(), clazz);\n    }\n\n    /**\n     * Creates a MobileServiceTable\n     *\n     * @param name  Table name\n     * @param clazz The class used for data serialization\n     * @return MobileServiceTable with the given name\n     */\n    public <E> MobileServiceTable<E> getTable(String name, Class<E> clazz) {\n        validateClass(clazz);\n        return new MobileServiceTable<E>(name, this, clazz);\n    }\n\n    /**\n     * Returns a MobileServiceSyncTable<E> instance, which provides strongly\n     * typed data operations for a local table.\n     *\n     * @param clazz The class used for table name and data serialization\n     * @return The MobileServiceSyncTable instance\n     */\n    public <E> MobileServiceSyncTable<E> getSyncTable(Class<E> clazz) {\n        return this.getSyncTable(clazz.getSimpleName(), clazz);\n    }\n\n    /**\n     * Returns a MobileServiceSyncTable<E> instance, which provides strongly\n     * typed data operations for a local table.\n     *\n     * @param name  Table name\n     * @param clazz The class used for data serialization\n     * @return The MobileServiceSyncTable instance\n     */\n    public <E> MobileServiceSyncTable<E> getSyncTable(String name, Class<E> clazz) {\n        validateClass(clazz);\n        return new MobileServiceSyncTable<E>(name, this, clazz);\n    }\n\n    /**\n     * Invokes a custom API using POST HTTP method\n     *\n     * @param apiName The API name\n     * @param clazz   The API result class\n     */\n    public <E> ListenableFuture<E> invokeApi(String apiName, Class<E> clazz) {\n        return invokeApi(apiName, null, HttpPost.METHOD_NAME, null, clazz);\n    }\n\n    /**\n     * Invokes a custom API using POST HTTP method\n     *\n     * @param apiName  The API name\n     * @param clazz    The API result class\n     * @param callback The callback to invoke after the API execution\n     * @deprecated use {@link invokeApi(String apiName, Class<E> clazz)} instead\n     */\n    public <E> void invokeApi(String apiName, Class<E> clazz, ApiOperationCallback<E> callback) {\n        invokeApi(apiName, null, HttpPost.METHOD_NAME, null, clazz, callback);\n    }\n\n    /**\n     * Invokes a custom API using POST HTTP method\n     *\n     * @param apiName The API name\n     * @param body    The object to send as the request body\n     * @param clazz   The API result class\n     */\n    public <E> ListenableFuture<E> invokeApi(String apiName, Object body, Class<E> clazz) {\n        return invokeApi(apiName, body, HttpPost.METHOD_NAME, null, clazz);\n    }\n\n    /**\n     * Invokes a custom API using POST HTTP method\n     *\n     * @param apiName  The API name\n     * @param body     The object to send as the request body\n     * @param clazz    The API result class\n     * @param callback The callback to invoke after the API execution\n     * @deprecated use {@link invokeApi(String apiName, Object body, Class<E>\n     * clazz)} instead\n     */\n    public <E> void invokeApi(String apiName, Object body, Class<E> clazz, ApiOperationCallback<E> callback) {\n        invokeApi(apiName, body, HttpPost.METHOD_NAME, null, clazz, callback);\n    }\n\n    /**\n     * Invokes a custom API\n     *\n     * @param apiName    The API name\n     * @param httpMethod The HTTP Method used to invoke the API\n     * @param parameters The query string parameters sent in the request\n     * @param clazz      The API result class\n     */\n    public <E> ListenableFuture<E> invokeApi(String apiName, String httpMethod, List<Pair<String, String>> parameters, Class<E> clazz) {\n        return invokeApi(apiName, null, httpMethod, parameters, clazz);\n    }\n\n    /**\n     * Invokes a custom API\n     *\n     * @param apiName    The API name\n     * @param httpMethod The HTTP Method used to invoke the API\n     * @param parameters The query string parameters sent in the request\n     * @param clazz      The API result class\n     * @param callback   The callback to invoke after the API execution\n     * @deprecated use {@link invokeApi(String apiName, String httpMethod,\n     * java.util.List< android.util.Pair<String, String>> parameters, Class<E> clazz)}\n     * instead\n     */\n    public <E> void invokeApi(String apiName, String httpMethod, List<Pair<String, String>> parameters, Class<E> clazz, ApiOperationCallback<E> callback) {\n        invokeApi(apiName, null, httpMethod, parameters, clazz, callback);\n    }\n\n    /**\n     * Invokes a custom API\n     *\n     * @param apiName    The API name\n     * @param body       The object to send as the request body\n     * @param httpMethod The HTTP Method used to invoke the API\n     * @param parameters The query string parameters sent in the request\n     * @param clazz      The API result class\n     */\n    public <E> ListenableFuture<E> invokeApi(String apiName, Object body, String httpMethod, List<Pair<String, String>> parameters, final Class<E> clazz) {\n        if (clazz == null) {\n            throw new IllegalArgumentException(\"clazz cannot be null\");\n        }\n\n        JsonElement json = null;\n        if (body != null) {\n            if (body instanceof JsonElement) {\n                json = (JsonElement) body;\n            } else {\n                json = getGsonBuilder().create().toJsonTree(body);\n            }\n        }\n\n        final SettableFuture<E> future = SettableFuture.create();\n        ListenableFuture<JsonElement> internalFuture = this.invokeApiInternal(apiName, json, httpMethod, parameters, EnumSet.of(MobileServiceFeatures.TypedApiCall));\n\n        Futures.addCallback(internalFuture, new FutureCallback<JsonElement>() {\n            @Override\n            public void onFailure(Throwable e) {\n                future.setException(e);\n            }\n\n            @Override\n            @SuppressWarnings(\"unchecked\")\n            public void onSuccess(JsonElement jsonElement) {\n                Class<?> concreteClass = clazz;\n                if (clazz.isArray()) {\n                    concreteClass = clazz.getComponentType();\n                }\n\n                List<?> entities = JsonEntityParser.parseResults(jsonElement, getGsonBuilder().create(), concreteClass);\n\n                if (clazz.isArray()) {\n                    E array = (E) Array.newInstance(concreteClass, entities.size());\n                    for (int i = 0; i < entities.size(); i++) {\n                        Array.set(array, i, entities.get(i));\n                    }\n\n                    future.set(array);\n                } else {\n                    future.set((E) entities.get(0));\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Invokes a custom API\n     *\n     * @param apiName    The API name\n     * @param body       The object to send as the request body\n     * @param httpMethod The HTTP Method used to invoke the API\n     * @param parameters The query string parameters sent in the request\n     * @param clazz      The API result class\n     * @param callback   The callback to invoke after the API execution\n     * @deprecated use {@link invokeApi(String apiName, Object body, String\n     * httpMethod, java.util.List< android.util.Pair<String, String>> parameters, final\n     * Class<E> clazz)} instead\n     */\n    public <E> void invokeApi(String apiName, Object body, String httpMethod, List<Pair<String, String>> parameters, final Class<E> clazz,\n                              final ApiOperationCallback<E> callback) {\n\n        ListenableFuture<E> invokeApiFuture = invokeApi(apiName, body, httpMethod, parameters, clazz);\n\n        Futures.addCallback(invokeApiFuture, new FutureCallback<E>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(E result) {\n                callback.onCompleted(result, null, null);\n            }\n        });\n    }\n\n    /**\n     * Invokes a custom API using POST HTTP method\n     *\n     * @param apiName The API name\n     */\n    public ListenableFuture<JsonElement> invokeApi(String apiName) {\n        return invokeApi(apiName, (JsonElement) null);\n    }\n\n    /**\n     * Invokes a custom API using POST HTTP method\n     *\n     * @param apiName  The API name\n     * @param callback The callback to invoke after the API execution\n     * @deprecated use {@link invokeApi(String apiName)} instead\n     */\n    public void invokeApi(String apiName, ApiJsonOperationCallback callback) {\n        invokeApi(apiName, null, callback);\n    }\n\n    /**\n     * Invokes a custom API using POST HTTP method\n     *\n     * @param apiName The API name\n     * @param body    The json element to send as the request body\n     */\n    public ListenableFuture<JsonElement> invokeApi(String apiName, JsonElement body) {\n        return invokeApi(apiName, body, HttpPost.METHOD_NAME, null);\n    }\n\n    /**\n     * Invokes a custom API using POST HTTP method\n     *\n     * @param apiName  The API name\n     * @param body     The json element to send as the request body\n     * @param callback The callback to invoke after the API execution\n     * @deprecated use {@link invokeApi(String apiName, com.google.gson.JsonElement body)}\n     * instead\n     */\n    public void invokeApi(String apiName, JsonElement body, ApiJsonOperationCallback callback) {\n        invokeApi(apiName, body, HttpPost.METHOD_NAME, null, callback);\n    }\n\n    /**\n     * Invokes a custom API\n     *\n     * @param apiName    The API name\n     * @param httpMethod The HTTP Method used to invoke the API\n     * @param parameters The query string parameters sent in the request\n     */\n    public ListenableFuture<JsonElement> invokeApi(String apiName, String httpMethod, List<Pair<String, String>> parameters) {\n        return invokeApi(apiName, null, httpMethod, parameters);\n    }\n\n    /**\n     * Invokes a custom API\n     *\n     * @param apiName    The API name\n     * @param httpMethod The HTTP Method used to invoke the API\n     * @param parameters The query string parameters sent in the request\n     * @param callback   The callback to invoke after the API execution\n     * @deprecated use {@link invokeApi(String apiName, String httpMethod,\n     * java.util.List< android.util.Pair<String, String>> parameters)} instead\n     */\n    public void invokeApi(String apiName, String httpMethod, List<Pair<String, String>> parameters, ApiJsonOperationCallback callback) {\n        invokeApi(apiName, null, httpMethod, parameters, callback);\n    }\n\n    /**\n     * Invokes a custom API\n     *\n     * @param apiName    The API name\n     * @param body       The json element to send as the request body\n     * @param httpMethod The HTTP Method used to invoke the API\n     * @param parameters The query string parameters sent in the request\n     */\n    public ListenableFuture<JsonElement> invokeApi(String apiName, JsonElement body, String httpMethod, List<Pair<String, String>> parameters) {\n        return this.invokeApiInternal(apiName, body, httpMethod, parameters, EnumSet.of(MobileServiceFeatures.JsonApiCall));\n    }\n\n    /**\n     * Invokes a custom API\n     *\n     * @param apiName    The API name\n     * @param body       The json element to send as the request body\n     * @param httpMethod The HTTP Method used to invoke the API\n     * @param parameters The query string parameters sent in the request\n     * @param features   The features used in the request\n     */\n    private ListenableFuture<JsonElement> invokeApiInternal(String apiName, JsonElement body, String httpMethod, List<Pair<String, String>> parameters, EnumSet<MobileServiceFeatures> features) {\n\n        byte[] content = null;\n        if (body != null) {\n            try {\n                content = body.toString().getBytes(UTF8_ENCODING);\n            } catch (UnsupportedEncodingException e) {\n                throw new IllegalArgumentException(e);\n            }\n        }\n\n        List<Pair<String, String>> requestHeaders = new ArrayList<Pair<String, String>>();\n        if (body != null) {\n            requestHeaders.add(new Pair<String, String>(HTTP.CONTENT_TYPE, MobileServiceConnection.JSON_CONTENTTYPE));\n        }\n\n        if (parameters != null && !parameters.isEmpty()) {\n            features.add(MobileServiceFeatures.AdditionalQueryParameters);\n        }\n\n        final SettableFuture<JsonElement> future = SettableFuture.create();\n        ListenableFuture<ServiceFilterResponse> internalFuture = invokeApiInternal(apiName, content, httpMethod, requestHeaders, parameters, features);\n\n        Futures.addCallback(internalFuture, new FutureCallback<ServiceFilterResponse>() {\n            @Override\n            public void onFailure(Throwable e) {\n               future.setException(e);\n            }\n\n            @Override\n            public void onSuccess(ServiceFilterResponse response) {\n\n                String content = response.getContent();\n\n                if (content == null) {\n                    future.set(null);\n\n                    return;\n                }\n\n                JsonElement json = new JsonParser().parse(content);\n                future.set(json);\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Invokes a custom API\n     *\n     * @param apiName    The API name\n     * @param body       The json element to send as the request body\n     * @param httpMethod The HTTP Method used to invoke the API\n     * @param parameters The query string parameters sent in the request\n     * @param callback   The callback to invoke after the API execution\n     * @deprecated use {@link invokeApi(String apiName, com.google.gson.JsonElement body, String\n     * httpMethod, java.util.List< android.util.Pair<String, String>> parameters)} instead\n     */\n    public void invokeApi(String apiName, JsonElement body, String httpMethod, List<Pair<String, String>> parameters, final ApiJsonOperationCallback callback) {\n\n        ListenableFuture<JsonElement> invokeApiFuture = invokeApi(apiName, body, httpMethod, parameters);\n\n        Futures.addCallback(invokeApiFuture, new FutureCallback<JsonElement>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(JsonElement result) {\n                callback.onCompleted(result, null, null);\n            }\n        });\n    }\n\n    /**\n     * Invokes a custom API\n     *\n     * @param apiName        The API name\n     * @param content        The byte array to send as the request body\n     * @param httpMethod     The HTTP Method used to invoke the API\n     * @param requestHeaders The extra headers to send in the request\n     * @param parameters     The query string parameters sent in the request\n     */\n    public ListenableFuture<ServiceFilterResponse> invokeApi(String apiName, byte[] content, String httpMethod, List<Pair<String, String>> requestHeaders,\n                                                             List<Pair<String, String>> parameters) {\n        return invokeApiInternal(apiName, content, httpMethod, requestHeaders, parameters, EnumSet.of(MobileServiceFeatures.GenericApiCall));\n    }\n\n    /**\n     * Invokes a custom API\n     *\n     * @param apiName        The API name\n     * @param content        The byte array to send as the request body\n     * @param httpMethod     The HTTP Method used to invoke the API\n     * @param requestHeaders The extra headers to send in the request\n     * @param parameters     The query string parameters sent in the request\n     * @param callback       The callback to invoke after the API execution\n     */\n    public void invokeApi(String apiName, byte[] content, String httpMethod, List<Pair<String, String>> requestHeaders, List<Pair<String, String>> parameters,\n                          final ServiceFilterResponseCallback callback) {\n\n        ListenableFuture<ServiceFilterResponse> invokeApiFuture = invokeApi(apiName, content, httpMethod, requestHeaders, parameters);\n\n        Futures.addCallback(invokeApiFuture, new FutureCallback<ServiceFilterResponse>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onResponse(MobileServiceException.getServiceResponse(exception), (Exception) exception);\n                } else {\n                    callback.onResponse(MobileServiceException.getServiceResponse(exception), new Exception(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(ServiceFilterResponse result) {\n                callback.onResponse(result, null);\n            }\n        });\n    }\n\n    /**\n     * Invokes a custom API\n     *\n     * @param apiName        The API name\n     * @param content        The byte array to send as the request body\n     * @param httpMethod     The HTTP Method used to invoke the API\n     * @param requestHeaders The extra headers to send in the request\n     * @param parameters     The query string parameters sent in the request\n     * @param features       The SDK features used in the request\n     */\n    private ListenableFuture<ServiceFilterResponse> invokeApiInternal(String apiName, byte[] content, String httpMethod,\n                                                                      List<Pair<String, String>> requestHeaders, List<Pair<String, String>> parameters, EnumSet<MobileServiceFeatures> features) {\n        final SettableFuture<ServiceFilterResponse> future = SettableFuture.create();\n\n        if (apiName == null || apiName.trim().equals(\"\")) {\n            future.setException(new IllegalArgumentException(\"apiName cannot be null\"));\n            return future;\n        }\n\n        MobileServiceHttpClient httpClient = new MobileServiceHttpClient(this);\n        return httpClient.request(CUSTOM_API_URL + apiName, content, httpMethod, requestHeaders, parameters, features);\n    }\n\n    /**\n     * Validates the class has an id property defined\n     *\n     * @param clazz\n     */\n    private <E> void validateClass(Class<E> clazz) {\n        if (clazz.isInterface() || Modifier.isAbstract(clazz.getModifiers())) {\n            throw new IllegalArgumentException(\"The class type used for creating a MobileServiceTable must be a concrete class\");\n        }\n\n        int idPropertyCount = 0;\n        for (Field field : clazz.getDeclaredFields()) {\n            SerializedName serializedName = field.getAnnotation(SerializedName.class);\n            if (serializedName != null) {\n                if (serializedName.value().equalsIgnoreCase(\"id\")) {\n                    idPropertyCount++;\n                }\n            } else {\n                if (field.getName().equalsIgnoreCase(\"id\")) {\n                    idPropertyCount++;\n                }\n            }\n        }\n\n        if (idPropertyCount != 1) {\n            throw new IllegalArgumentException(\"The class representing the MobileServiceTable must have a single id property defined\");\n        }\n    }\n\n    /**\n     * Adds a new filter to the MobileServiceClient\n     *\n     * @param serviceFilter\n     * @return MobileServiceClient with filters updated\n     */\n    public MobileServiceClient withFilter(final ServiceFilter serviceFilter) {\n        if (serviceFilter == null) {\n            throw new IllegalArgumentException(\"Invalid ServiceFilter\");\n        }\n\n        // Generate a new instance of the MobileServiceClient\n        MobileServiceClient newClient = new MobileServiceClient(this);\n\n        // If there's no filter, set serviceFilter with the new filter.\n        // Otherwise create a composed filter\n        if (mServiceFilter == null) {\n            newClient.mServiceFilter = serviceFilter;\n        } else {\n            final ServiceFilter oldServiceFilter = mServiceFilter;\n            final ServiceFilter newServiceFilter = serviceFilter;\n\n            newClient.mServiceFilter = new ServiceFilter() {\n                // Create a filter that after executing the new ServiceFilter\n                // executes the existing filter\n                ServiceFilter externalServiceFilter = newServiceFilter;\n                ServiceFilter internalServiceFilter = oldServiceFilter;\n\n                @Override\n                public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request,\n                                                                             final NextServiceFilterCallback nextServiceFilterCallback) {\n\n                    // Executes new ServiceFilter\n                    return externalServiceFilter.handleRequest(request, new NextServiceFilterCallback() {\n\n                        @Override\n                        public ListenableFuture<ServiceFilterResponse> onNext(ServiceFilterRequest request) {\n                            // Execute existing ServiceFilter\n                            return internalServiceFilter.handleRequest(request, nextServiceFilterCallback);\n                        }\n                    });\n\n                }\n            };\n        }\n\n        return newClient;\n    }\n\n    /**\n     * Gets the ServiceFilter. If there is no ServiceFilter, it creates and\n     * returns a default filter\n     *\n     * @return ServiceFilter The service filter to use with the client.\n     */\n    public ServiceFilter getServiceFilter() {\n        if (mServiceFilter == null) {\n            return new ServiceFilter() {\n\n                @Override\n                public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                    return nextServiceFilterCallback.onNext(request);\n                }\n            };\n        } else {\n            return mServiceFilter;\n        }\n    }\n\n    /**\n     * Creates a MobileServiceConnection\n     *\n     * @return MobileServiceConnection\n     */\n    public MobileServiceConnection createConnection() {\n        return new MobileServiceConnection(this);\n    }\n\n    /**\n     * Initializes the MobileServiceClient\n     *\n     * @param appUrl      Mobile Service URL\n     * @param appKey      Mobile Service application key\n     * @param currentUser The Mobile Service user used to authenticate requests\n     * @param gsonBuilder the GsonBuilder used to in JSON Serialization/Deserialization\n     * @param context     The Context where the MobileServiceClient is created\n     */\n    private void initialize(URL appUrl, String appKey, MobileServiceUser currentUser, GsonBuilder gsonBuiler, Context context,\n                            AndroidHttpClientFactory androidHttpClientFactory) {\n        if (appUrl == null || appUrl.toString().trim().length() == 0) {\n            throw new IllegalArgumentException(\"Invalid Application URL\");\n        }\n\n        if (context == null) {\n            throw new IllegalArgumentException(\"Context cannot be null\");\n        }\n\n        URL normalizedAppURL = appUrl;\n\n        if (normalizedAppURL.getPath() == \"\") {\n            try {\n                normalizedAppURL = new URL(appUrl.toString() + \"/\");\n            } catch (MalformedURLException e) {\n                // This exception won't happen, since it's just adding a\n                // trailing \"/\" to a valid URL\n            }\n        }\n\n        mAppUrl = normalizedAppURL;\n        mAppKey = appKey;\n        mLoginManager = new LoginManager(this);\n        mServiceFilter = null;\n        mLoginInProgress = false;\n        mCurrentUser = currentUser;\n        mContext = context;\n        mGsonBuilder = gsonBuiler;\n        mAndroidHttpClientFactory = androidHttpClientFactory;\n        mPush = new MobileServicePush(this, context);\n        mSyncContext = new MobileServiceSyncContext(this);\n    }\n\n    /**\n     * Gets the GsonBuilder used to in JSON Serialization/Deserialization\n     */\n    public GsonBuilder getGsonBuilder() {\n        return mGsonBuilder;\n    }\n\n    /**\n     * Sets the GsonBuilder used to in JSON Serialization/Deserialization\n     *\n     * @param mGsonBuilder The GsonBuilder to set\n     */\n    public void setGsonBuilder(GsonBuilder gsonBuilder) {\n        mGsonBuilder = gsonBuilder;\n    }\n\n    /**\n     * Registers a JsonSerializer for the specified type\n     *\n     * @param type       The type to use in the registration\n     * @param serializer The serializer to use in the registration\n     */\n    public <T> void registerSerializer(Type type, JsonSerializer<T> serializer) {\n        mGsonBuilder.registerTypeAdapter(type, serializer);\n    }\n\n    /**\n     * Registers a JsonDeserializer for the specified type\n     *\n     * @param type         The type to use in the registration\n     * @param deserializer The deserializer to use in the registration\n     */\n    public <T> void registerDeserializer(Type type, JsonDeserializer<T> deserializer) {\n        mGsonBuilder.registerTypeAdapter(type, deserializer);\n    }\n\n    /**\n     * Gets the Context object used to create the MobileServiceClient\n     */\n    public Context getContext() {\n        return mContext;\n    }\n\n    /**\n     * Sets the Context object for the MobileServiceClient\n     */\n    public void setContext(Context mContext) {\n        this.mContext = mContext;\n    }\n\n    /**\n     * Gets the AndroidHttpClientFactory\n     *\n     * @return\n     */\n    public AndroidHttpClientFactory getAndroidHttpClientFactory() {\n        return mAndroidHttpClientFactory;\n    }\n\n    /**\n     * Sets the AndroidHttpClientFactory\n     */\n    public void setAndroidHttpClientFactory(AndroidHttpClientFactory mAndroidHttpClientFactory) {\n        this.mAndroidHttpClientFactory = mAndroidHttpClientFactory;\n    }\n\n    /**\n     * Gets the MobileServicePush used for push notifications\n     */\n    public MobileServicePush getPush() {\n        return mPush;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/MobileServiceException.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceException.java\n */\npackage com.microsoft.windowsazure.mobileservices;\n\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\npublic class MobileServiceException extends Exception {\n\n    /**\n     * UID used for serialization\n     */\n    private static final long serialVersionUID = 5267990724102948298L;\n\n    private ServiceFilterResponse mResponse;\n\n    public MobileServiceException(Throwable throwable) {\n        this(\"There was an error executing the request\", throwable, null);\n    }\n\n    public MobileServiceException(String detail, Throwable throwable, ServiceFilterResponse response) {\n        this(detail, throwable);\n        mResponse = response;\n    }\n\n    public MobileServiceException(String detail, ServiceFilterResponse response) {\n        this(detail);\n        mResponse = response;\n    }\n\n    /**\n     * Creates a new MobileServiceException with a detail message and a cause\n     *\n     * @param detail    The detail message\n     * @param throwable The exception cause\n     */\n    public MobileServiceException(String detail, Throwable throwable) {\n        super(detail, throwable);\n    }\n\n    /**\n     * Creates a new MobileServiceException with a detail message\n     *\n     * @param detail The detail message\n     */\n    public MobileServiceException(String detail) {\n        super(detail);\n    }\n\n    public static ServiceFilterResponse getServiceResponse(Throwable throwable) {\n        if (!(throwable instanceof MobileServiceException)) {\n            return null;\n        }\n\n        MobileServiceException exception = (MobileServiceException) throwable;\n\n        return exception.getResponse();\n    }\n\n    public ServiceFilterResponse getResponse() {\n        return mResponse;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/MobileServiceFeatures.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceFeatures.java\n */\npackage com.microsoft.windowsazure.mobileservices;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.EnumSet;\nimport java.util.Iterator;\n\n/**\n * The list of mobile services features exposed in the HTTP headers of\n * requests for telemetry purposes.\n */\npublic enum MobileServiceFeatures {\n    /**\n     * Feature header value for requests going through typed tables.\n     */\n    TypedTable(\"TT\"),\n\n    /**\n     * Feature header value for requests going through untyped (JSON) tables.\n     */\n    UntypedTable(\"TU\"),\n\n    /**\n     * Feature header value for API calls using typed (generic) overloads.\n     */\n    TypedApiCall(\"AT\"),\n\n    /**\n     * Feature header value for API calls using JSON overloads.\n     */\n    JsonApiCall(\"AJ\"),\n\n    /**\n     * Feature header value for API calls using the generic (HTTP) overload.\n     */\n    GenericApiCall(\"AG\"),\n\n    /**\n     * Feature header value for table / API requests which include additional query string parameters.\n     */\n    AdditionalQueryParameters(\"QS\"),\n\n    /**\n     * Feature header value for offline initiated requests (push / pull).\n     */\n    Offline(\"OL\"),\n\n    /**\n     * Feature header value for conditional updates.\n     */\n    OpportunisticConcurrency(\"OC\");\n    private final static MobileServiceFeatures[] AllFeatures;\n    static {\n        AllFeatures = MobileServiceFeatures.class.getEnumConstants();\n    }\n    private String value;\n\n    /**\n     * Constructor\n     *\n     * @param value the code associated with the feature which will\n     *              be sent to the server in the features header\n     */\n    MobileServiceFeatures(String value) {\n        this.value = value;\n    }\n\n    /**\n     * Returns a comma-separated list of feature codes which can be sent to\n     * the service in the features header.\n     *\n     * @param features a set of features\n     * @return a comma-separated list of the feature codes from the given set\n     */\n    public static String featuresToString(EnumSet<MobileServiceFeatures> features) {\n        ArrayList<String> usedFeatures = new ArrayList<String>();\n        for (MobileServiceFeatures feature : AllFeatures) {\n            if (features.contains(feature)) {\n                usedFeatures.add(feature.getValue());\n            }\n        }\n        if (usedFeatures.isEmpty()) {\n            return null;\n        }\n\n        Collections.sort(usedFeatures);\n\n        StringBuilder sb = new StringBuilder();\n        Iterator<String> iter = usedFeatures.iterator();\n        while (iter.hasNext()) {\n            sb.append(iter.next());\n            if (!iter.hasNext()) {\n                break;\n            }\n            sb.append(\",\");\n        }\n        return sb.toString();\n    }\n\n    /**\n     * Gets the code will be sent to the server for this feature\n     * in the features header\n     *\n     * @return the code associated with this feature.\n     */\n    public String getValue() {\n        return value;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/MobileServiceList.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceList.java\n */\npackage com.microsoft.windowsazure.mobileservices;\n\nimport java.util.ArrayList;\nimport java.util.Collection;\n\npublic class MobileServiceList<E> extends ArrayList<E> {\n\n    private static final long serialVersionUID = 5772338570723574845L;\n    private int mTotalCount;\n    private String mNextLink;\n\n    public MobileServiceList(Collection<? extends E> collection, int totalCount) {\n        super(collection);\n        mTotalCount = totalCount;\n    }\n\n    public MobileServiceList(Collection<? extends E> collection, int totalCount, String nextLink) {\n        this(collection, totalCount);\n        mNextLink = nextLink;\n    }\n\n    public int getTotalCount() {\n        return mTotalCount;\n    }\n\n    public String getNextLink() {\n        return mNextLink;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/ServiceFilterResponseCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ServiceFilterResponseCallback.java\n */\npackage com.microsoft.windowsazure.mobileservices;\n\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\n/**\n * Callback to invoke after processing the ServiceFilters and executing the\n * request\n */\npublic interface ServiceFilterResponseCallback {\n    /**\n     * Method to execute when the response is ready to be processed\n     *\n     * @param response  The response to process\n     * @param exception An exception representing the error, in case there was one\n     */\n    public void onResponse(ServiceFilterResponse response, Exception exception);\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/UserAuthenticationCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * UserAuthenticationCallback.java\n */\npackage com.microsoft.windowsazure.mobileservices;\n\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\n/**\n * Callback for the user authentication process\n */\npublic interface UserAuthenticationCallback {\n    /**\n     * Method to call if the authentication process finishes successfully\n     *\n     * @param user      The logged user\n     * @param exception An exception representing the error, in case there was one\n     * @param response  Response object\n     */\n    public void onCompleted(MobileServiceUser user, Exception exception, ServiceFilterResponse response);\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/authentication/LoginManager.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * LoginManager.java\n */\npackage com.microsoft.windowsazure.mobileservices.authentication;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.content.Context;\nimport android.content.DialogInterface;\nimport android.graphics.Bitmap;\nimport android.util.DisplayMetrics;\nimport android.view.MotionEvent;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.webkit.WebView;\nimport android.webkit.WebViewClient;\nimport android.widget.EditText;\nimport android.widget.LinearLayout;\n\nimport com.google.common.util.concurrent.FutureCallback;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParseException;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback;\nimport com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection;\nimport com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequestImpl;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\nimport org.apache.http.client.methods.HttpPost;\nimport org.apache.http.protocol.HTTP;\n\nimport java.net.URLDecoder;\nimport java.util.HashMap;\nimport java.util.Locale;\nimport java.util.Map;\n\n/**\n * Class for handling Login operations with Authentication Providers and Microsoft\n * Azure Mobile Services\n */\n@SuppressLint({\"SetJavaScriptEnabled\"})\npublic class LoginManager {\n    /**\n     * Login process initial URL\n     */\n    private static final String START_URL = \"login/\";\n    /**\n     * Login process final URL\n     */\n    private static final String END_URL = \"login/done\";\n    /**\n     * The name for the Azure Active Directory authentication provider as used\n     * by the service REST API.\n     */\n    private static final String WINDOWS_AZURE_ACTIVE_DIRECTORY_REST_API_PATH_NAME = \"aad\";\n    /**\n     * Token indicator for interactive authentication URL\n     */\n    private static final String TOKEN_MARK = \"#token=\";\n    /**\n     * Authentication Token parameter in JSON objects\n     */\n    private static final String TOKEN_JSON_PARAMETER = \"authenticationToken\";\n    /**\n     * UserId property in JSON objects\n     */\n    private static final String USERID_JSON_PROPERTY = \"userId\";\n    /**\n     * User property in JSON objects\n     */\n    private static final String USER_JSON_PROPERTY = \"user\";\n    /**\n     * The MobileServiceClient used to invoke the login operations\n     */\n    private MobileServiceClient mClient;\n\n    /**\n     * Constructor for LoginManager\n     *\n     * @param client The MobileServiceClient used to invoke the login operations\n     */\n    public LoginManager(MobileServiceClient client) {\n        if (client == null) {\n            throw new IllegalArgumentException(\"Client can not be null\");\n        }\n\n        mClient = client;\n    }\n\n    /**\n     * Invokes an interactive authentication process using the specified\n     * Authentication Provider\n     *\n     * @param provider The provider used for the authentication process\n     * @param context  The context used to create the authentication dialog\n     */\n    public ListenableFuture<MobileServiceUser> authenticate(String provider, Context context) {\n\n        return authenticate(provider, context, (HashMap<String, String>) null);\n    }\n\n    /**\n     * Invokes an interactive authentication process using the specified\n     * Authentication Provider\n     *\n     * @param provider The provider used for the authentication process\n     * @param context  The context used to create the authentication dialog\n     * @param parameters Aditional parameters for the authentication process\n     */\n    public ListenableFuture<MobileServiceUser> authenticate(String provider, Context context, HashMap<String, String> parameters) {\n        final SettableFuture<MobileServiceUser> future = SettableFuture.create();\n\n        if (context == null) {\n            throw new IllegalArgumentException(\"context cannot be null\");\n        }\n\n        if (provider == null || provider.length() == 0) {\n            throw new IllegalArgumentException(\"provider cannot be null or empty\");\n        }\n\n        // Create login URL\n        String startUrl = mClient.getAppUrl().toString() + LoginManager.START_URL + normalizeProvider(provider) + normalizeParameters(parameters);\n        // Create the expected end URL\n        String endUrl = mClient.getAppUrl().toString() + LoginManager.END_URL;\n\n        // Shows an interactive view with the provider's login\n        showLoginUI(startUrl, endUrl, context, new LoginUIOperationCallback() {\n\n            @Override\n            public void onCompleted(String url, Exception exception) {\n                if (exception == null) {\n                    MobileServiceUser user = null;\n                    try {\n                        String decodedUrl = URLDecoder.decode(url, MobileServiceClient.UTF8_ENCODING);\n\n                        JsonObject json = (JsonObject) new JsonParser().parse(decodedUrl.substring(decodedUrl.indexOf(TOKEN_MARK) + TOKEN_MARK.length()));\n\n                        user = createUserFromJSON(json);\n                    } catch (Exception e) {\n                        future.setException(e);\n                        return;\n                    }\n\n                    future.set(user);\n                } else {\n                    future.setException(exception);\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Invokes an interactive authentication process using the specified\n     * Authentication Provider\n     *\n     * @param provider The provider used for the authentication process\n     * @param context  The context used to create the authentication dialog\n     * @param callback Callback to invoke when the authentication process finishes\n     */\n    public void authenticate(String provider, Context context, final UserAuthenticationCallback callback) {\n        authenticate(provider, context, null, callback);\n    }\n\n    /**\n     * Invokes an interactive authentication process using the specified\n     * Authentication Provider\n     *\n     * @param provider The provider used for the authentication process\n     * @param context  The context used to create the authentication dialog\n     * @param callback Callback to invoke when the authentication process finishes\n     * @param parameters Aditional parameters for the authentication process\n     */\n    public void authenticate(String provider, Context context, HashMap<String, String> parameters, final UserAuthenticationCallback callback) {\n\n        ListenableFuture<MobileServiceUser> authenticateFuture = authenticate(provider, context, parameters);\n\n        Futures.addCallback(authenticateFuture, new FutureCallback<MobileServiceUser>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(MobileServiceUser user) {\n                callback.onCompleted(user, null, null);\n            }\n        });\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken The oAuth token used for authentication\n     * @param parameters Aditional parameters for the authentication process\n     */\n\n    public ListenableFuture<MobileServiceUser> authenticate(String provider, String oAuthToken, HashMap<String, String> parameters) {\n        if (oAuthToken == null || oAuthToken.trim() == \"\") {\n            throw new IllegalArgumentException(\"oAuthToken can not be null or empty\");\n        }\n\n        // Create the login URL\n        String url = mClient.getAppUrl().toString() + LoginManager.START_URL + normalizeProvider(provider) + normalizeParameters(parameters);\n\n        return authenticateWithToken(oAuthToken, url);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken The oAuth token used for authentication\n     */\n\n    public ListenableFuture<MobileServiceUser> authenticate(String provider, String oAuthToken) {\n        return authenticate(provider, oAuthToken, (HashMap<String, String>) null);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken The oAuth token used for authentication\n     * @param callback   Callback to invoke when the authentication process finishes\n     */\n    public void authenticate(String provider, String oAuthToken, final UserAuthenticationCallback callback) {\n        authenticate(provider, oAuthToken, null, callback);\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Service authentication using a\n     * provider-specific oAuth token\n     *\n     * @param provider   The provider used for the authentication process\n     * @param oAuthToken The oAuth token used for authentication\n     * @param parameters Aditional parameters for the authentication process\n     * @param callback   Callback to invoke when the authentication process finishes\n     */\n    public void authenticate(String provider, String oAuthToken, HashMap<String, String> parameters, final UserAuthenticationCallback callback) {\n        ListenableFuture<MobileServiceUser> authenticateFuture = authenticate(provider, oAuthToken, parameters);\n\n        Futures.addCallback(authenticateFuture, new FutureCallback<MobileServiceUser>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(MobileServiceUser user) {\n                callback.onCompleted(user, null, null);\n            }\n        });\n    }\n\n    /**\n     * Normalizes the provider name to match the value required in the mobile\n     * service REST API. For example, WindowsAzureActiveDirectory needs to be\n     * sent as /login/aad.\n     *\n     * @param provider the name of the authentication provider.\n     * @return the normalized provider name.\n     */\n    private String normalizeProvider(String provider) {\n        if (provider == null || provider.length() == 0) {\n            throw new IllegalArgumentException(\"provider cannot be null or empty\");\n        }\n\n        provider = provider.toLowerCase(Locale.getDefault());\n        if (provider.equalsIgnoreCase(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory.toString())) {\n            provider = WINDOWS_AZURE_ACTIVE_DIRECTORY_REST_API_PATH_NAME;\n        }\n\n        return provider;\n    }\n\n    /**\n     * Normalizes the parameters to add it to the Url\n     *\n     * @param parameters list of the parameters.\n     * @return the parameters to add to the url.\n     */\n    private String normalizeParameters(HashMap<String, String> parameters) {\n\n        String result = \"\";\n\n        if (parameters != null && parameters.size() > 0) {\n            for (Map.Entry<String, String> parameter : parameters.entrySet()) {\n\n                if (result == \"\") {\n                    result = \"?\";\n                } else {\n                    result += \"&\";\n                }\n\n                result += parameter.getKey() + \"=\" + parameter.getValue();\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Creates the UI for the interactive authentication process\n     *\n     * @param startUrl The initial URL for the authentication process\n     * @param endUrl   The final URL for the authentication process\n     * @param context  The context used to create the authentication dialog\n     * @param callback Callback to invoke when the authentication process finishes\n     */\n    private void showLoginUI(final String startUrl, final String endUrl, final Context context, final LoginUIOperationCallback callback) {\n\n        Activity activity = (Activity) context;\n\n        activity.runOnUiThread(new Runnable() {\n            public void run() {\n                showLoginUIInternal(startUrl, endUrl, context, callback);\n            }\n        });\n    }\n\n    /**\n     * Creates the UI for the interactive authentication process\n     *\n     * @param startUrl The initial URL for the authentication process\n     * @param endUrl   The final URL for the authentication process\n     * @param context  The context used to create the authentication dialog\n     * @param callback Callback to invoke when the authentication process finishes\n     */\n    private void showLoginUIInternal(final String startUrl, final String endUrl, final Context context, LoginUIOperationCallback callback) {\n        if (startUrl == null || startUrl == \"\") {\n            throw new IllegalArgumentException(\"startUrl can not be null or empty\");\n        }\n\n        if (endUrl == null || endUrl == \"\") {\n            throw new IllegalArgumentException(\"endUrl can not be null or empty\");\n        }\n\n        if (context == null) {\n            throw new IllegalArgumentException(\"context can not be null\");\n        }\n\n        final LoginUIOperationCallback externalCallback = callback;\n        final AlertDialog.Builder builder = new AlertDialog.Builder(context);\n        // Create the Web View to show the login page\n        final WebView wv = new WebView(context);\n        builder.setOnCancelListener(new DialogInterface.OnCancelListener() {\n\n            @Override\n            public void onCancel(DialogInterface dialog) {\n                if (externalCallback != null) {\n                    externalCallback.onCompleted(null, new MobileServiceException(\"User Canceled\"));\n                }\n            }\n        });\n\n        wv.getSettings().setJavaScriptEnabled(true);\n\n        DisplayMetrics displaymetrics = new DisplayMetrics();\n        ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);\n        int webViewHeight = displaymetrics.heightPixels - 100;\n\n        wv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, webViewHeight));\n\n        wv.requestFocus(View.FOCUS_DOWN);\n        wv.setOnTouchListener(new View.OnTouchListener() {\n\n            @Override\n            public boolean onTouch(View view, MotionEvent event) {\n                int action = event.getAction();\n                if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_UP) {\n                    if (!view.hasFocus()) {\n                        view.requestFocus();\n                    }\n                }\n\n                return false;\n            }\n        });\n\n        // Create a LinearLayout and add the WebView to the Layout\n        LinearLayout layout = new LinearLayout(context);\n        layout.setOrientation(LinearLayout.VERTICAL);\n        layout.addView(wv);\n\n        // Add a dummy EditText to the layout as a workaround for a bug\n        // that prevents showing the keyboard for the WebView on some devices\n        EditText dummyEditText = new EditText(context);\n        dummyEditText.setVisibility(View.GONE);\n        layout.addView(dummyEditText);\n\n        // Add the layout to the dialog\n        builder.setView(layout);\n\n        final AlertDialog dialog = builder.create();\n\n        wv.setWebViewClient(new WebViewClient() {\n\n            @Override\n            public void onPageStarted(WebView view, String url, Bitmap favicon) {\n                // If the URL of the started page matches with the final URL\n                // format, the login process finished\n\n                if (isFinalUrl(url)) {\n                    if (externalCallback != null) {\n                        externalCallback.onCompleted(url, null);\n                    }\n\n                    dialog.dismiss();\n                }\n\n                super.onPageStarted(view, url, favicon);\n            }\n\n            // Checks if the given URL matches with the final URL's format\n            private boolean isFinalUrl(String url) {\n                if (url == null) {\n                    return false;\n                }\n\n                return url.startsWith(endUrl);\n            }\n\n            // Checks if the given URL matches with the start URL's format\n            private boolean isStartUrl(String url) {\n                if (url == null) {\n                    return false;\n                }\n\n                return url.startsWith(startUrl);\n            }\n\n            @Override\n            public void onPageFinished(WebView view, String url) {\n                if (isStartUrl(url)) {\n                    if (externalCallback != null) {\n                        externalCallback.onCompleted(null, new MobileServiceException(\"Logging in with the selected authentication provider is not enabled\"));\n                    }\n\n                    dialog.dismiss();\n                }\n            }\n        });\n\n        wv.loadUrl(startUrl);\n        dialog.show();\n    }\n\n    /**\n     * Creates a User based on a Microsoft Azure Mobile Service JSON object\n     * containing a UserId and Authentication Token\n     *\n     * @param json JSON object used to create the User\n     * @return The created user if it is a valid JSON object. Null otherwise\n     * @throws MobileServiceException\n     */\n    private MobileServiceUser createUserFromJSON(JsonObject json) throws MobileServiceException {\n        if (json == null) {\n            throw new IllegalArgumentException(\"json can not be null\");\n        }\n\n        // If the JSON object is valid, create a MobileServiceUser object\n        if (json.has(USER_JSON_PROPERTY)) {\n            JsonObject jsonUser = json.getAsJsonObject(USER_JSON_PROPERTY);\n\n            if (!jsonUser.has(USERID_JSON_PROPERTY)) {\n                throw new JsonParseException(USERID_JSON_PROPERTY + \" property expected\");\n            }\n            String userId = jsonUser.get(USERID_JSON_PROPERTY).getAsString();\n\n            MobileServiceUser user = new MobileServiceUser(userId);\n\n            if (!json.has(TOKEN_JSON_PARAMETER)) {\n                throw new JsonParseException(TOKEN_JSON_PARAMETER + \" property expected\");\n            }\n\n            user.setAuthenticationToken(json.get(TOKEN_JSON_PARAMETER).getAsString());\n            return user;\n        } else {\n            // If the JSON contains an error property show it, otherwise raise\n            // an error with JSON content\n            if (json.has(\"error\")) {\n                throw new MobileServiceException(json.get(\"error\").getAsString());\n            } else {\n                throw new JsonParseException(json.toString());\n            }\n        }\n    }\n\n    /**\n     * Invokes Microsoft Azure Mobile Services authentication using the specified\n     * token\n     *\n     * @param token    The token used for authentication\n     * @param url      The URL used for the authentication process\n     */\n    private ListenableFuture<MobileServiceUser> authenticateWithToken(String token, String url) {\n        final SettableFuture<MobileServiceUser> future = SettableFuture.create();\n\n        if (token == null) {\n            throw new IllegalArgumentException(\"token can not be null\");\n        }\n\n        if (url == null) {\n            throw new IllegalArgumentException(\"url can not be null\");\n        }\n\n        // Create a request\n        final ServiceFilterRequest request = new ServiceFilterRequestImpl(new HttpPost(url), mClient.getAndroidHttpClientFactory());\n        request.addHeader(HTTP.CONTENT_TYPE, MobileServiceConnection.JSON_CONTENTTYPE);\n\n        try {\n            // Set request's content with the token\n            request.setContent(token);\n        } catch (Exception e) {\n            // this should never happen\n        }\n\n        final MobileServiceConnection connection = mClient.createConnection();\n\n        // Create the AsyncTask that will execute the request\n        new RequestAsyncTask(request, connection) {\n            @Override\n            protected void onPostExecute(ServiceFilterResponse response) {\n                if (mTaskException == null && response != null) {\n                    MobileServiceUser user = null;\n                    try {\n                        // Get the user from the response and create a\n                        // MobileServiceUser object from the JSON\n                        String content = response.getContent();\n                        user = createUserFromJSON((JsonObject) new JsonParser().parse((content.trim())));\n\n                    } catch (Exception e) {\n                        future.setException(new MobileServiceException(\"Error while authenticating user.\", e, response));\n                        return;\n                    }\n\n                    future.set(user);\n                } else {\n                    future.setException(new MobileServiceException(\"Error while authenticating user.\", mTaskException));\n                }\n            }\n        }.executeTask();\n\n        return future;\n    }\n\n    /**\n     * Internal callback used after the interactive authentication UI is\n     * completed\n     */\n    interface LoginUIOperationCallback {\n        /**\n         * Method to call if the operation finishes successfully\n         *\n         * @param url The final login URL\n         */\n        void onCompleted(String url, Exception exception);\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/authentication/MobileServiceAuthenticationProvider.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceAuthenticationProvider.java\n */\npackage com.microsoft.windowsazure.mobileservices.authentication;\n\n/**\n * Authentication providers to use with a Mobile Service\n */\npublic enum MobileServiceAuthenticationProvider {\n    MicrosoftAccount, Google, Twitter, Facebook, WindowsAzureActiveDirectory\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/authentication/MobileServiceUser.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceUser.java\n */\npackage com.microsoft.windowsazure.mobileservices.authentication;\n\n/**\n * Mobile Service authenticated user\n */\npublic class MobileServiceUser {\n\n    /**\n     * The User Id\n     */\n    private String mUserId;\n\n    /**\n     * Mobile Service authentication token for the user\n     */\n    private String mAuthenticationToken;\n\n    /**\n     * Creates a user specifying the User Id\n     *\n     * @param userId The User Id\n     */\n    public MobileServiceUser(String userId) {\n        mUserId = userId;\n    }\n\n    /**\n     * Returns the current User Id\n     */\n    public String getUserId() {\n        return mUserId;\n    }\n\n    /**\n     * Sets the user's id\n     *\n     * @param userId The user's id\n     */\n    public void setUserId(String userId) {\n        mUserId = userId;\n    }\n\n    /**\n     * Returns the authentication token for the user\n     */\n    public String getAuthenticationToken() {\n        return mAuthenticationToken;\n    }\n\n    /**\n     * Sets the authentication token for the user\n     *\n     * @param authenticationToken Authentication token\n     */\n    public void setAuthenticationToken(String authenticationToken) {\n        mAuthenticationToken = authenticationToken;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactory.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * AndroidHttpClientFactory.java\n */\npackage com.microsoft.windowsazure.mobileservices.http;\n\nimport android.net.http.AndroidHttpClient;\n\n/**\n * Factory for AndroidHttpClient instances\n */\npublic interface AndroidHttpClientFactory {\n\n    /**\n     * Creates a new AndroidHttpClient\n     *\n     * @return A new AndroidHttpClient\n     */\n    public AndroidHttpClient createAndroidHttpClient();\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/http/AndroidHttpClientFactoryImpl.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * AndroidHttpClientFactoryImpl.java\n */\npackage com.microsoft.windowsazure.mobileservices.http;\n\nimport android.net.http.AndroidHttpClient;\n\n/**\n * Default implementation for AndroidHttpClientFactory\n */\npublic class AndroidHttpClientFactoryImpl implements AndroidHttpClientFactory {\n\n    @Override\n    public AndroidHttpClient createAndroidHttpClient() {\n        return AndroidHttpClient.newInstance(MobileServiceConnection.getUserAgent());\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/http/HttpPatch.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * HttpPatch.java\n */\npackage com.microsoft.windowsazure.mobileservices.http;\n\nimport org.apache.http.client.methods.HttpEntityEnclosingRequestBase;\n\nimport java.net.URI;\n\npublic class HttpPatch extends HttpEntityEnclosingRequestBase {\n\n    public static final String METHOD_NAME = \"PATCH\";\n\n    public HttpPatch(String url) {\n        super();\n        this.setURI(URI.create(url));\n    }\n\n    @Override\n    public String getMethod() {\n        return METHOD_NAME;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/http/MobileServiceConnection.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceConnection.java\n */\npackage com.microsoft.windowsazure.mobileservices.http;\n\nimport android.os.Build;\n\nimport com.google.common.util.concurrent.FutureCallback;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceApplication;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;\n\nimport org.apache.http.Header;\nimport org.apache.http.protocol.HTTP;\n\n/**\n * Class for handling communication with Microsoft Azure Mobile Services REST APIs\n */\npublic class MobileServiceConnection {\n\n    /**\n     * Header value to represent JSON content-type\n     */\n    public static final String JSON_CONTENTTYPE = \"application/json\";\n    /**\n     * Request header to indicate the Mobile Service application key\n     */\n    private static final String X_ZUMO_APPLICATION_HEADER = \"X-ZUMO-APPLICATION\";\n\n    /**\n     * Request header to indicate the Mobile Service Installation ID\n     */\n    private static final String X_ZUMO_INSTALLATION_ID_HEADER = \"X-ZUMO-INSTALLATION-ID\";\n\n    /**\n     * Request header to indicate the Mobile Service user authentication token\n     */\n    private static final String X_ZUMO_AUTH_HEADER = \"X-ZUMO-AUTH\";\n\n    /**\n     * Name of the zumo version header.\n     */\n    private static final String X_ZUMO_VERSION_HEADER = \"X-ZUMO-VERSION\";\n\n    /**\n     * Header value to represent GZIP content-encoding\n     */\n    private static final String GZIP_CONTENTENCODING = \"gzip\";\n    /**\n     * Current SDK version\n     */\n    private static final String SDK_VERSION = \"2.0.2\";\n    /**\n     * The MobileServiceClient used for communication with the Mobile Service\n     */\n    private MobileServiceClient mClient;\n\n    /**\n     * Constructor for the MobileServiceConnection\n     *\n     * @param client The client used for communication with the Mobile Service\n     */\n    public MobileServiceConnection(MobileServiceClient client) {\n        mClient = client;\n    }\n\n    /**\n     * Generates the User-Agent\n     */\n    static String getUserAgent() {\n        String userAgent = String.format(\"ZUMO/1.0 (lang=%s; os=%s; os_version=%s; arch=%s; version=%s)\", \"Java\", \"Android\", Build.VERSION.RELEASE,\n                Build.CPU_ABI, SDK_VERSION);\n\n        return userAgent;\n    }\n\n    /**\n     * Execute a request-response operation with a Mobile Service\n     *\n     * @param request          The request to execute\n     * @param responseCallback Callback to invoke after the request is executed\n     */\n    public ListenableFuture<ServiceFilterResponse> start(final ServiceFilterRequest request) {\n        if (request == null) {\n            throw new IllegalArgumentException(\"Request can not be null\");\n        }\n\n        ServiceFilter filter = mClient.getServiceFilter();\n        // Set the request's headers\n        configureHeadersOnRequest(request);\n        return filter.handleRequest(request, new NextServiceFilterCallback() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> onNext(ServiceFilterRequest request) {\n                SettableFuture<ServiceFilterResponse> future = SettableFuture.create();\n                ServiceFilterResponse response = null;\n\n                try {\n                    response = request.execute();\n                    int statusCode = response.getStatus().getStatusCode();\n\n                    // If the response has error throw exception\n                    if (statusCode < 200 || statusCode >= 300) {\n                        String responseContent = response.getContent();\n                        if (responseContent != null && !responseContent.trim().equals(\"\")) {\n                            throw new MobileServiceException(responseContent, response);\n                        } else {\n                            throw new MobileServiceException(String.format(\"{'code': %d}\", statusCode), response);\n                        }\n                    }\n\n                    future.set(response);\n                } catch (MobileServiceException e) {\n                    future.setException(e);\n                } catch (Exception e) {\n                    future.setException(new MobileServiceException(\"Error while processing request.\", e, response));\n                }\n\n                return future;\n            }\n        });\n    }\n\n    /**\n     * Execute a request-response operation with a Mobile Service\n     *\n     * @param request          The request to execute\n     * @param responseCallback Callback to invoke after the request is executed\n     */\n    public void start(final ServiceFilterRequest request, final ServiceFilterResponseCallback responseCallback) {\n        ListenableFuture<ServiceFilterResponse> startFuture = start(request);\n\n        Futures.addCallback(startFuture, new FutureCallback<ServiceFilterResponse>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    responseCallback.onResponse(MobileServiceException.getServiceResponse(exception), (Exception) exception);\n                } else {\n                    responseCallback.onResponse(MobileServiceException.getServiceResponse(exception), new Exception(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(ServiceFilterResponse response) {\n                responseCallback.onResponse(response, null);\n            }\n        });\n    }\n\n    /**\n     * Configures the HttpRequestBase to execute a request with a Mobile Service\n     *\n     * @param request The request to configure\n     */\n    private void configureHeadersOnRequest(ServiceFilterRequest request) {\n        // Add the authentication header if the user is logged in\n        MobileServiceUser user = mClient.getCurrentUser();\n        if (user != null && user.getAuthenticationToken() != \"\") {\n            request.addHeader(X_ZUMO_AUTH_HEADER, user.getAuthenticationToken());\n        }\n\n        if (SDK_VERSION != null) {\n            request.addHeader(X_ZUMO_VERSION_HEADER, SDK_VERSION);\n        }\n        // Set the User Agent header\n        request.addHeader(HTTP.USER_AGENT, getUserAgent());\n\n        // Set the special Application key header, if present\n        String appKey = mClient.getAppKey();\n        if (appKey != null && appKey.trim().length() > 0) {\n            request.addHeader(X_ZUMO_APPLICATION_HEADER, mClient.getAppKey());\n        }\n\n        // Set the special Installation ID header\n        request.addHeader(X_ZUMO_INSTALLATION_ID_HEADER, MobileServiceApplication.getInstallationId(mClient.getContext()));\n\n        if (!requestContainsHeader(request, \"Accept\")) {\n            request.addHeader(\"Accept\", JSON_CONTENTTYPE);\n        }\n\n        if (!requestContainsHeader(request, \"Accept-Encoding\")) {\n            request.addHeader(\"Accept-Encoding\", GZIP_CONTENTENCODING);\n        }\n    }\n\n    /**\n     * Verifies if the request contains the specified header\n     *\n     * @param request    The request to verify\n     * @param headerName The header name to find\n     * @return True if the header is present, false otherwise\n     */\n    private boolean requestContainsHeader(ServiceFilterRequest request, String headerName) {\n        for (Header header : request.getHeaders()) {\n            if (header.getName().equals(headerName)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/http/MobileServiceHttpClient.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceHttpClient.java\n */\npackage com.microsoft.windowsazure.mobileservices.http;\n\nimport android.net.Uri;\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceFeatures;\n\nimport org.apache.http.client.methods.HttpDelete;\nimport org.apache.http.client.methods.HttpGet;\nimport org.apache.http.client.methods.HttpPost;\nimport org.apache.http.client.methods.HttpPut;\n\nimport java.io.UnsupportedEncodingException;\nimport java.util.ArrayList;\nimport java.util.EnumSet;\nimport java.util.List;\n\n/**\n * Utility class which centralizes the HTTP requests sent by the\n * mobile services client.\n */\npublic class MobileServiceHttpClient {\n\n    /**\n     * Request header to indicate the features in this SDK used by the request.\n     */\n    public final static String X_ZUMO_FEATURES = \"X-ZUMO-FEATURES\";\n\n    /**\n     * The client associated with this HTTP caller.\n     */\n    MobileServiceClient mClient;\n\n    /**\n     * Constructor\n     *\n     * @param client The client associated with this HTTP caller.\n     */\n    public MobileServiceHttpClient(MobileServiceClient client) {\n        this.mClient = client;\n    }\n\n    /**\n     * Makes a request over HTTP\n     *\n     * @param path           The path of the request URI\n     * @param content        The byte array to send as the request body\n     * @param httpMethod     The HTTP Method used to invoke the API\n     * @param requestHeaders The extra headers to send in the request\n     * @param parameters     The query string parameters sent in the request\n     */\n    public ListenableFuture<ServiceFilterResponse> request(String path, byte[] content, String httpMethod,\n                                                           List<Pair<String, String>> requestHeaders, List<Pair<String, String>> parameters) {\n        return this.request(path, content, httpMethod, requestHeaders, parameters, EnumSet.noneOf(MobileServiceFeatures.class));\n    }\n\n    /**\n     * Makes a request over HTTP\n     *\n     * @param path           The path of the request URI\n     * @param content        The string to send as the request body\n     * @param httpMethod     The HTTP Method used to invoke the API\n     * @param requestHeaders The extra headers to send in the request\n     * @param parameters     The query string parameters sent in the request\n     * @param features       The features used in the request\n     * @throws java.io.UnsupportedEncodingException If the content cannot be converted into a byte array.\n     */\n    public ListenableFuture<ServiceFilterResponse> request(String path, String content, String httpMethod,\n                                                           List<Pair<String, String>> requestHeaders, List<Pair<String, String>> parameters,\n                                                           EnumSet<MobileServiceFeatures> features) {\n        try {\n            byte[] byteContent = null;\n\n            if (content != null) {\n                byteContent = content.getBytes(MobileServiceClient.UTF8_ENCODING);\n            }\n\n            return this.request(path, byteContent, httpMethod, requestHeaders, parameters, features);\n        } catch (UnsupportedEncodingException e) {\n            SettableFuture<ServiceFilterResponse> future = SettableFuture.create();\n            future.setException(e);\n            return future;\n        }\n    }\n\n    /**\n     * Makes a request over HTTP\n     *\n     * @param path           The path of the request URI\n     * @param content        The byte array to send as the request body\n     * @param httpMethod     The HTTP Method used to invoke the API\n     * @param requestHeaders The extra headers to send in the request\n     * @param parameters     The query string parameters sent in the request\n     * @param features       The features used in the request\n     */\n    public ListenableFuture<ServiceFilterResponse> request(String path, byte[] content, String httpMethod,\n                                                           List<Pair<String, String>> requestHeaders, List<Pair<String, String>> parameters,\n                                                           EnumSet<MobileServiceFeatures> features) {\n        final SettableFuture<ServiceFilterResponse> future = SettableFuture.create();\n\n        if (path == null || path.trim().equals(\"\")) {\n            future.setException(new IllegalArgumentException(\"request path cannot be null\"));\n            return future;\n        }\n\n        if (httpMethod == null || httpMethod.trim().equals(\"\")) {\n            future.setException(new IllegalArgumentException(\"httpMethod cannot be null\"));\n            return future;\n        }\n\n        Uri.Builder uriBuilder = Uri.parse(mClient.getAppUrl().toString()).buildUpon();\n        uriBuilder.path(path);\n\n        if (parameters != null && parameters.size() > 0) {\n            for (Pair<String, String> parameter : parameters) {\n                uriBuilder.appendQueryParameter(parameter.first, parameter.second);\n            }\n        }\n\n        ServiceFilterRequestImpl request;\n        String url = uriBuilder.build().toString();\n\n        if (httpMethod.equalsIgnoreCase(HttpGet.METHOD_NAME)) {\n            request = new ServiceFilterRequestImpl(new HttpGet(url), mClient.getAndroidHttpClientFactory());\n        } else if (httpMethod.equalsIgnoreCase(HttpPost.METHOD_NAME)) {\n            request = new ServiceFilterRequestImpl(new HttpPost(url), mClient.getAndroidHttpClientFactory());\n        } else if (httpMethod.equalsIgnoreCase(HttpPut.METHOD_NAME)) {\n            request = new ServiceFilterRequestImpl(new HttpPut(url), mClient.getAndroidHttpClientFactory());\n        } else if (httpMethod.equalsIgnoreCase(HttpPatch.METHOD_NAME)) {\n            request = new ServiceFilterRequestImpl(new HttpPatch(url), mClient.getAndroidHttpClientFactory());\n        } else if (httpMethod.equalsIgnoreCase(HttpDelete.METHOD_NAME)) {\n            request = new ServiceFilterRequestImpl(new HttpDelete(url), mClient.getAndroidHttpClientFactory());\n        } else {\n            future.setException(new IllegalArgumentException(\"httpMethod not supported\"));\n            return future;\n        }\n\n        String featuresHeader = MobileServiceFeatures.featuresToString(features);\n        if (featuresHeader != null) {\n            if (requestHeaders == null) {\n                requestHeaders = new ArrayList<Pair<String, String>>();\n            }\n\n            boolean containsFeatures = false;\n            for (Pair<String, String> header : requestHeaders) {\n                if (header.first.equals(X_ZUMO_FEATURES)) {\n                    containsFeatures = true;\n                    break;\n                }\n            }\n\n            if (!containsFeatures) {\n                // Clone header list to prevent changing user's list\n                requestHeaders = new ArrayList<Pair<String, String>>(requestHeaders);\n                requestHeaders.add(new Pair<String, String>(X_ZUMO_FEATURES, featuresHeader));\n            }\n        }\n\n        if (requestHeaders != null && requestHeaders.size() > 0) {\n            for (Pair<String, String> header : requestHeaders) {\n                request.addHeader(header.first, header.second);\n            }\n        }\n\n        if (content != null) {\n            try {\n                request.setContent(content);\n            } catch (Exception e) {\n                future.setException(e);\n                return future;\n            }\n        }\n\n        MobileServiceConnection conn = mClient.createConnection();\n\n        new RequestAsyncTask(request, conn) {\n            @Override\n            protected void onPostExecute(ServiceFilterResponse response) {\n                if (mTaskException != null) {\n                    future.setException(mTaskException);\n                } else {\n                    future.set(response);\n                }\n            }\n        }.executeTask();\n\n        return future;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/http/NextServiceFilterCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * NextServiceFilterCallback.java\n */\npackage com.microsoft.windowsazure.mobileservices.http;\n\nimport com.google.common.util.concurrent.ListenableFuture;\n\n/**\n * Callback used to chain service filters\n */\npublic interface NextServiceFilterCallback {\n    /**\n     * Method called to execute the next ServiceFilter in the pipeline\n     *\n     * @param request The ServiceFilterRequest to process\n     * @return A ListenableFuture of the ServiceFilterResponse\n     */\n    public ListenableFuture<ServiceFilterResponse> onNext(ServiceFilterRequest request);\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/http/RequestAsyncTask.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * RequestAsyncTask.java\n */\npackage com.microsoft.windowsazure.mobileservices.http;\n\nimport android.annotation.SuppressLint;\nimport android.os.AsyncTask;\nimport android.os.Build;\n\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\n\n/**\n * Default implementation for performing requests using AsyncTask\n */\npublic abstract class RequestAsyncTask extends AsyncTask<Void, Void, ServiceFilterResponse> {\n    /**\n     * Error message\n     */\n    protected MobileServiceException mTaskException = null;\n\n    /**\n     * Connection to use for the request\n     */\n    private MobileServiceConnection mConnection;\n\n    /**\n     * Request to execute\n     */\n    private ServiceFilterRequest mRequest;\n\n    /**\n     * Constructor that specifies request and connection\n     *\n     * @param request    Request to use\n     * @param connection Connection to use\n     */\n    public RequestAsyncTask(ServiceFilterRequest request, MobileServiceConnection connection) {\n        mRequest = request;\n        mConnection = connection;\n    }\n\n    @SuppressLint(\"NewApi\")\n    public void executeTask() {\n        // If it's running with Honeycomb or greater, it must execute each\n        // request in a different thread\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {\n            this.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);\n        } else {\n            this.execute();\n        }\n    }\n\n    @Override\n    protected ServiceFilterResponse doInBackground(Void... params) {\n        // Call start method that executes the request\n        ServiceFilterResponse response = null;\n        try {\n            response = mConnection.start(mRequest).get();\n            return response;\n        } catch (Exception e) {\n            if (e.getCause() instanceof MobileServiceException) {\n                mTaskException = (MobileServiceException) e.getCause();\n            } else {\n                mTaskException = new MobileServiceException(e);\n            }\n        }\n\n        return response;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/http/ServiceFilter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ServiceFilter.java\n */\npackage com.microsoft.windowsazure.mobileservices.http;\n\nimport com.google.common.util.concurrent.ListenableFuture;\n\n/**\n * The service filter can be used to manipulate requests and responses in the\n * HTTP pipeline used by the MobileServiceClient. ServiceFilters can be\n * associated with a MobileServiceClient via the WithFilter method.\n */\npublic interface ServiceFilter {\n    /**\n     * Method to handle the requests\n     *\n     * @param request                   Request to execute\n     * @param nextServiceFilterCallback The next filter to execute\n     * @return A ListenableFuture of the ServiceFilterResponse\n     */\n    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback);\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequest.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ServiceFilterRequest.java\n */\npackage com.microsoft.windowsazure.mobileservices.http;\n\nimport org.apache.http.Header;\n\nimport java.net.URISyntaxException;\n\n/**\n * Represents an HTTP request that can be manipulated by ServiceFilters\n */\npublic interface ServiceFilterRequest {\n    /**\n     * Returns request's Headers\n     */\n    public Header[] getHeaders();\n\n    /**\n     * Adds a new Header to the request\n     *\n     * @param name Header Name\n     * @param val  Header Value\n     */\n    public void addHeader(String name, String val);\n\n    /**\n     * Remove Header from the request\n     *\n     * @param name Header Name\n     */\n    public void removeHeader(String name);\n\n    /**\n     * Sets request content\n     *\n     * @param content string that will be used in the setEntity method\n     * @throws Exception\n     */\n    public void setContent(String content) throws Exception;\n\n    /**\n     * Gets the request's content\n     */\n    public String getContent();\n\n    /**\n     * Sets request content\n     *\n     * @param content byte array that will be used in the setEntity method\n     * @throws Exception\n     */\n    public void setContent(byte[] content) throws Exception;\n\n    /**\n     * Gets the request's content\n     */\n    public byte[] getRawContent();\n\n    /**\n     * Gets request's URL\n     */\n    public String getUrl();\n\n    /**\n     * Sets the request's URL\n     *\n     * @param url\n     * @throws java.net.URISyntaxException\n     */\n    public void setUrl(String url) throws URISyntaxException;\n\n    /**\n     * Gets the request's method\n     */\n    public String getMethod();\n\n    /**\n     * Executes the request\n     *\n     * @return ServiceFilterResponse with the request's response\n     * @throws Exception\n     */\n    public ServiceFilterResponse execute() throws Exception;\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/http/ServiceFilterRequestImpl.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ServiceFilterRequestImpl.java\n */\npackage com.microsoft.windowsazure.mobileservices.http;\n\nimport android.net.http.AndroidHttpClient;\n\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\n\nimport org.apache.http.Header;\nimport org.apache.http.HttpResponse;\nimport org.apache.http.client.methods.HttpEntityEnclosingRequestBase;\nimport org.apache.http.client.methods.HttpRequestBase;\nimport org.apache.http.entity.ByteArrayEntity;\nimport org.apache.http.entity.StringEntity;\nimport org.apache.http.protocol.HTTP;\n\nimport java.io.UnsupportedEncodingException;\nimport java.net.URI;\nimport java.net.URISyntaxException;\n\n/**\n * ServiceFilterRequest implementation\n */\npublic class ServiceFilterRequestImpl implements ServiceFilterRequest {\n\n    /**\n     * The request to execute\n     */\n    private HttpRequestBase mRequest;\n\n    /**\n     * The request content\n     */\n    private byte[] mContent;\n\n    private AndroidHttpClientFactory mAndroidHttpClientFactory;\n\n    /**\n     * @param request\n     *            The request to use\n     */\n\n    /**\n     * Constructor\n     *\n     * @param request The request to use\n     * @param factory The AndroidHttpClientFactory instance used to create\n     *                AndroidHttpClient objects\n     */\n    public ServiceFilterRequestImpl(HttpRequestBase request, AndroidHttpClientFactory factory) {\n        mRequest = request;\n        mAndroidHttpClientFactory = factory;\n    }\n\n    @Override\n    public ServiceFilterResponse execute() throws Exception {\n        // Execute request\n        AndroidHttpClient client = mAndroidHttpClientFactory.createAndroidHttpClient();\n        client.getParams().setParameter(HTTP.USER_AGENT, MobileServiceConnection.getUserAgent());\n\n        try {\n            final HttpResponse response = client.execute(mRequest);\n            ServiceFilterResponse serviceFilterResponse = new ServiceFilterResponseImpl(response);\n            return serviceFilterResponse;\n        } finally {\n            client.close();\n        }\n    }\n\n    @Override\n    public Header[] getHeaders() {\n        return mRequest.getAllHeaders();\n    }\n\n    @Override\n    public void addHeader(String name, String val) {\n        mRequest.addHeader(name, val);\n    }\n\n    @Override\n    public void removeHeader(String name) {\n        mRequest.removeHeaders(name);\n    }\n\n    @Override\n    public void setContent(byte[] content) throws Exception {\n        ((HttpEntityEnclosingRequestBase) mRequest).setEntity(new ByteArrayEntity(content));\n        mContent = content;\n    }\n\n    @Override\n    public String getContent() {\n        if (mContent != null) {\n            String content = null;\n            try {\n                content = new String(mContent, MobileServiceClient.UTF8_ENCODING);\n            } catch (UnsupportedEncodingException e) {\n            }\n            return content;\n        } else {\n            return null;\n        }\n    }\n\n    @Override\n    public void setContent(String content) throws UnsupportedEncodingException {\n        ((HttpEntityEnclosingRequestBase) mRequest).setEntity(new StringEntity(content, MobileServiceClient.UTF8_ENCODING));\n        mContent = content.getBytes(MobileServiceClient.UTF8_ENCODING);\n    }\n\n    @Override\n    public byte[] getRawContent() {\n        return mContent;\n    }\n\n    @Override\n    public String getUrl() {\n        return mRequest.getURI().toString();\n    }\n\n    @Override\n    public void setUrl(String url) throws URISyntaxException {\n        mRequest.setURI(new URI(url));\n\n    }\n\n    @Override\n    public String getMethod() {\n        return mRequest.getMethod();\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponse.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ServiceFilterResponse.java\n */\npackage com.microsoft.windowsazure.mobileservices.http;\n\nimport org.apache.http.Header;\nimport org.apache.http.StatusLine;\n\n/**\n * Represents an HTTP response that can be manipulated by ServiceFilters\n */\npublic interface ServiceFilterResponse {\n    /**\n     * Gets the response's headers.\n     *\n     * @return The response's headers\n     */\n    public Header[] getHeaders();\n\n    /**\n     * Gets the response's content.\n     *\n     * @return String with the response's content\n     * @throws Exception\n     */\n    public String getContent();\n\n    /**\n     * Gets the response's content.\n     *\n     * @return byte array with the response's content\n     * @throws Exception\n     */\n    public byte[] getRawContent();\n\n    /**\n     * Gets the response's status.\n     *\n     * @return Response's status\n     */\n    public StatusLine getStatus();\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/http/ServiceFilterResponseImpl.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ServiceFilterResponseImpl.java\n */\npackage com.microsoft.windowsazure.mobileservices.http;\n\nimport android.net.http.AndroidHttpClient;\n\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\n\nimport org.apache.http.Header;\nimport org.apache.http.HttpEntity;\nimport org.apache.http.HttpResponse;\nimport org.apache.http.StatusLine;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.UnsupportedEncodingException;\n\n/**\n * ServiceFilterResponse implementation\n */\npublic class ServiceFilterResponseImpl implements ServiceFilterResponse {\n    /**\n     * The original response\n     */\n    private HttpResponse mResponse;\n\n    /**\n     * The response content\n     */\n    private byte[] mResponseContent;\n\n    /**\n     * Constructor\n     *\n     * @param response The request's response\n     * @throws java.io.IOException\n     * @throws IllegalStateException\n     */\n    public ServiceFilterResponseImpl(HttpResponse response) throws IllegalStateException, IOException {\n        mResponse = response;\n        mResponseContent = null;\n\n        // Get the response's content\n        HttpEntity entity = mResponse.getEntity();\n        if (entity != null) {\n            InputStream instream = AndroidHttpClient.getUngzippedContent(entity);\n\n            ByteArrayOutputStream out = new ByteArrayOutputStream();\n            byte[] buffer = new byte[1024];\n            int length;\n\n            while ((length = instream.read(buffer)) != -1) {\n                out.write(buffer, 0, length);\n            }\n\n            instream.close();\n\n            mResponseContent = out.toByteArray();\n        } else {\n            mResponseContent = null;\n        }\n    }\n\n    @Override\n    public Header[] getHeaders() {\n        return mResponse.getAllHeaders();\n    }\n\n    @Override\n    public String getContent() {\n        if (mResponseContent != null) {\n            String responseContent = null;\n            try {\n                responseContent = new String(mResponseContent, MobileServiceClient.UTF8_ENCODING);\n            } catch (UnsupportedEncodingException e) {\n            }\n            return responseContent;\n        } else {\n            return null;\n        }\n    }\n\n    @Override\n    public byte[] getRawContent() {\n        return mResponseContent;\n    }\n\n    @Override\n    public StatusLine getStatus() {\n        return mResponse.getStatusLine();\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/notifications/GcmNativeRegistration.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * GcmNativeRegistration.java\n */\npackage com.microsoft.windowsazure.mobileservices.notifications;\n\nimport com.google.gson.annotations.Expose;\nimport com.google.gson.annotations.SerializedName;\n\n/**\n * Represents GCM native registration\n */\npublic class GcmNativeRegistration extends Registration {\n\n    /**\n     * Gcm Platform identifier\n     */\n    static final String GCM_PLATFORM = \"gcm\";\n\n    @Expose\n    @SerializedName(\"platform\")\n    private String mPlatform = GCM_PLATFORM;\n\n    /**\n     * The PNS specific identifier\n     */\n    @Expose\n    @SerializedName(\"deviceId\")\n    protected String mPNSHandle;\n\n    /**\n     * The registration name\n     */\n    protected String mName;\n\n    /**\n     * Creates a new native registration\n     */\n    GcmNativeRegistration() {\n        super();\n    }\n\n    @Override\n    public String getName() {\n        return mName;\n    }\n\n    @Override\n    protected void setName(String name) {\n        this.mName = name;\n    }\n\n    @Override\n    public String getPNSHandle() {\n        return mPNSHandle;\n    }\n\n    @Override\n    protected void setPNSHandle(String pNSHandle) {\n        this.mPNSHandle = pNSHandle;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/notifications/GcmTemplateRegistration.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * GcmTemplateRegistration.java\n */\npackage com.microsoft.windowsazure.mobileservices.notifications;\n\nimport com.google.gson.annotations.Expose;\nimport com.google.gson.annotations.SerializedName;\n\n/**\n * Represents GCM template registration\n */\npublic class GcmTemplateRegistration extends TemplateRegistration {\n\n    @Expose\n    @SerializedName(\"platform\")\n    protected String mPlatform = \"gcm\";\n\n    /**\n     * The PNS specific identifier\n     */\n    @Expose\n    @SerializedName(\"deviceId\")\n    protected String mPNSHandle;\n\n    /**\n     * Creates a new template registration\n     */\n    GcmTemplateRegistration() {\n        super();\n    }\n\n    @Override\n    public String getName() {\n        return mName;\n    }\n\n    @Override\n    protected void setName(String name) {\n        this.mName = name;\n    }\n\n    @Override\n    public String getPNSHandle() {\n        return mPNSHandle;\n    }\n\n    @Override\n    protected void setPNSHandle(String pNSHandle) {\n        this.mPNSHandle = pNSHandle;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/notifications/MobileServicePush.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServicePush.java\n */\npackage com.microsoft.windowsazure.mobileservices.notifications;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.content.SharedPreferences.Editor;\nimport android.preference.PreferenceManager;\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.FutureCallback;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection;\nimport com.microsoft.windowsazure.mobileservices.http.MobileServiceHttpClient;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\nimport org.apache.http.Header;\nimport org.apache.http.protocol.HTTP;\n\nimport java.io.UnsupportedEncodingException;\nimport java.net.URI;\nimport java.net.URISyntaxException;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Set;\nimport java.util.concurrent.CopyOnWriteArrayList;\n\n/**\n * The notification hub client\n */\npublic class MobileServicePush {\n\n    /**\n     * Prefix for Storage keys\n     */\n    private static final String STORAGE_PREFIX = \"__NH_\";\n\n    /**\n     * Prefix for registration information keys in local storage\n     */\n    private static final String REGISTRATION_NAME_STORAGE_KEY = \"REG_NAME_\";\n\n    /**\n     * Storage Version key\n     */\n    private static final String STORAGE_VERSION_KEY = \"STORAGE_VERSION\";\n\n    /**\n     * Storage Version\n     */\n    private static final String STORAGE_VERSION = \"1.0.0\";\n\n    /**\n     * PNS Handle Key\n     */\n    private static final String PNS_HANDLE_KEY = \"PNS_HANDLE\";\n\n    /**\n     * New registration location header name\n     */\n    private static final String NEW_REGISTRATION_LOCATION_HEADER = \"Location\";\n\n    /**\n     * Push registration path\n     */\n    private static final String PNS_API_URL = \"push\";\n\n    /**\n     * The class used to make HTTP clients associated with this instance\n     */\n    private MobileServiceHttpClient mHttpClient;\n\n    /**\n     * SharedPreferences reference used to access local storage\n     */\n    private SharedPreferences mSharedPreferences;\n\n    /**\n     * Factory which creates Registrations according the PNS supported on device\n     */\n    private PnsSpecificRegistrationFactory mPnsSpecificRegistrationFactory;\n\n    /**\n     * Flag to signal the need of refreshing local storage\n     */\n    private boolean mIsRefreshNeeded = false;\n\n    /**\n     * Creates a new NotificationHub client\n     *\n     * @param notificationHubPath Notification Hub path\n     * @param connectionString    Notification Hub connection string\n     * @param context             Android context used to access SharedPreferences\n     */\n    public MobileServicePush(MobileServiceClient client, Context context) {\n        mPnsSpecificRegistrationFactory = new PnsSpecificRegistrationFactory();\n\n        mHttpClient = new MobileServiceHttpClient(client);\n\n        if (context == null) {\n            throw new IllegalArgumentException(\"context\");\n        }\n\n        mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n        verifyStorageVersion();\n    }\n\n    private static boolean isNullOrWhiteSpace(String str) {\n        return str == null || str.trim().equals(\"\");\n    }\n\n    /**\n     * Registers the client for native notifications with the specified tags\n     *\n     * @param pnsHandle PNS specific identifier\n     * @param tags      Tags to use in the registration\n     * @return Future with Registration Information\n     */\n    public ListenableFuture<Registration> register(String pnsHandle, String[] tags) {\n\n        final SettableFuture<Registration> resultFuture = SettableFuture.create();\n\n        if (isNullOrWhiteSpace(pnsHandle)) {\n            resultFuture.setException(new IllegalArgumentException(\"pnsHandle\"));\n            return resultFuture;\n        }\n\n        final Registration registration = mPnsSpecificRegistrationFactory.createNativeRegistration();\n        registration.setPNSHandle(pnsHandle);\n        registration.addTags(tags);\n\n        ListenableFuture<String> registerInternalFuture = registerInternal(registration);\n\n        Futures.addCallback(registerInternalFuture, new FutureCallback<String>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                resultFuture.setException(exception);\n            }\n\n            @Override\n            public void onSuccess(String v) {\n                resultFuture.set(registration);\n            }\n        });\n\n        return resultFuture;\n    }\n\n    /**\n     * Registers the client for native notifications with the specified tags\n     *\n     * @param pnsHandle PNS specific identifier\n     * @param callback  The callback to invoke after the Push execution\n     * @param tags      Tags to use in the registration\n     * @deprecated use {@link register(String pnsHandle, String[] tags)} instead\n     */\n    public void register(String pnsHandle, String[] tags, final RegistrationCallback callback) {\n        ListenableFuture<Registration> registerFuture = register(pnsHandle, tags);\n\n        Futures.addCallback(registerFuture, new FutureCallback<Registration>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onRegister(null, (Exception) exception);\n                }\n            }\n\n            @Override\n            public void onSuccess(Registration registration) {\n                callback.onRegister(registration, null);\n            }\n        });\n    }\n\n    /**\n     * Registers the client for template notifications with the specified tags\n     *\n     * @param pnsHandle    PNS specific identifier\n     * @param templateName The template name\n     * @param template     The template body\n     * @param tags         The tags to use in the registration\n     * @return Future with TemplateRegistration Information\n     */\n    public ListenableFuture<TemplateRegistration> registerTemplate(String pnsHandle, String templateName, String template, String[] tags) {\n\n        final SettableFuture<TemplateRegistration> resultFuture = SettableFuture.create();\n\n        if (isNullOrWhiteSpace(pnsHandle)) {\n            resultFuture.setException(new IllegalArgumentException(\"pnsHandle\"));\n            return resultFuture;\n        }\n\n        if (isNullOrWhiteSpace(templateName)) {\n            resultFuture.setException(new IllegalArgumentException(\"templateName\"));\n            return resultFuture;\n        }\n\n        if (isNullOrWhiteSpace(template)) {\n            resultFuture.setException(new IllegalArgumentException(\"template\"));\n            return resultFuture;\n        }\n\n        final TemplateRegistration registration = mPnsSpecificRegistrationFactory.createTemplateRegistration();\n        registration.setPNSHandle(pnsHandle);\n        registration.setName(templateName);\n        registration.setTemplateBody(template);\n        registration.addTags(tags);\n\n        ListenableFuture<String> registerInternalFuture = registerInternal(registration);\n\n        Futures.addCallback(registerInternalFuture, new FutureCallback<String>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                resultFuture.setException(exception);\n            }\n\n            @Override\n            public void onSuccess(String v) {\n                resultFuture.set(registration);\n            }\n        });\n\n        return resultFuture;\n    }\n\n    /**\n     * Registers the client for template notifications with the specified tags\n     *\n     * @param pnsHandle    PNS specific identifier\n     * @param templateName The template name\n     * @param template     The template body\n     * @param tags         The tags to use in the registration\n     * @param callback     The operation callback\n     * @deprecated use {@link registerTemplate(String pnsHandle, String\n     * templateName, String template, String[] tags)} instead\n     */\n    public void registerTemplate(String pnsHandle, String templateName, String template, String[] tags, final TemplateRegistrationCallback callback) {\n        ListenableFuture<TemplateRegistration> registerFuture = registerTemplate(pnsHandle, templateName, template, tags);\n\n        Futures.addCallback(registerFuture, new FutureCallback<TemplateRegistration>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onRegister(null, (Exception) exception);\n                }\n            }\n\n            @Override\n            public void onSuccess(TemplateRegistration registration) {\n                callback.onRegister(registration, null);\n            }\n        });\n    }\n\n    /**\n     * Unregisters the client for native notifications\n     *\n     * @return Future with TemplateRegistration Information\n     */\n    public ListenableFuture<Void> unregister() {\n        return unregisterInternal(Registration.DEFAULT_REGISTRATION_NAME);\n    }\n\n    /**\n     * Unregisters the client for native notifications\n     *\n     * @param callback The operation callback\n     * @deprecated use {@link unregister()} instead\n     */\n    public void unregister(final UnregisterCallback callback) {\n        ListenableFuture<Void> unregisterFuture = unregister();\n\n        Futures.addCallback(unregisterFuture, new FutureCallback<Void>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onUnregister((Exception) exception);\n                }\n            }\n\n            @Override\n            public void onSuccess(Void v) {\n                callback.onUnregister(null);\n            }\n        });\n    }\n\n    /**\n     * Unregisters the client for template notifications of a specific template\n     *\n     * @param templateName The template name\n     * @return Future with TemplateRegistration Information\n     */\n    public ListenableFuture<Void> unregisterTemplate(String templateName) {\n        if (isNullOrWhiteSpace(templateName)) {\n            throw new IllegalArgumentException(\"templateName\");\n        }\n\n        return unregisterInternal(templateName);\n    }\n\n    /**\n     * Unregisters the client for template notifications of a specific template\n     *\n     * @param templateName The template name\n     * @param callback     The operation callback\n     * @deprecated use {@link unregisterTemplate(String templateName)} instead\n     */\n    public void unregisterTemplate(String templateName, final UnregisterCallback callback) {\n        ListenableFuture<Void> unregisterTemplateFuture = unregisterTemplate(templateName);\n\n        Futures.addCallback(unregisterTemplateFuture, new FutureCallback<Void>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onUnregister((Exception) exception);\n                }\n            }\n\n            @Override\n            public void onSuccess(Void v) {\n                callback.onUnregister(null);\n            }\n        });\n    }\n\n    /**\n     * Unregisters the client for all notifications\n     *\n     * @param pnsHandle PNS specific identifier\n     * @return Future with TemplateRegistration Information\n     */\n    public ListenableFuture<Void> unregisterAll(String pnsHandle) {\n\n        final SettableFuture<Void> resultFuture = SettableFuture.create();\n\n        ListenableFuture<ArrayList<Registration>> fullRegistrationInformationFuture = getFullRegistrationInformation(pnsHandle);\n\n        Futures.addCallback(fullRegistrationInformationFuture, new FutureCallback<ArrayList<Registration>>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                resultFuture.setException(exception);\n            }\n\n            @Override\n            public void onSuccess(ArrayList<Registration> registrations) {\n\n                ListenableFuture<Void> unregisterAllInternalFuture = unregisterAllInternal(registrations);\n\n                Futures.addCallback(unregisterAllInternalFuture, new FutureCallback<Void>() {\n                    @Override\n                    public void onFailure(Throwable exception) {\n                        resultFuture.setException(exception);\n                    }\n\n                    @Override\n                    public void onSuccess(Void v) {\n                        resultFuture.set(null);\n                    }\n                });\n            }\n        });\n\n        return resultFuture;\n    }\n\n    /**\n     * Unregisters the client for all notifications\n     *\n     * @param pnsHandle PNS specific identifier\n     * @param callback  The operation callback\n     * @deprecated use {@link unregisterAll(String pnsHandle)} instead\n     */\n    public void unregisterAll(String pnsHandle, final UnregisterCallback callback) {\n        ListenableFuture<Void> unregisterAllFuture = unregisterAll(pnsHandle);\n\n        Futures.addCallback(unregisterAllFuture, new FutureCallback<Void>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onUnregister((Exception) exception);\n                }\n            }\n\n            @Override\n            public void onSuccess(Void v) {\n                callback.onUnregister(null);\n            }\n        });\n    }\n\n    private ListenableFuture<Void> unregisterAllInternal(ArrayList<Registration> registrations) {\n        final SettableFuture<Void> resultFuture = SettableFuture.create();\n\n        final SyncState state = new SyncState();\n\n        state.size = registrations.size();\n\n        final CopyOnWriteArrayList<String> concurrentArray = new CopyOnWriteArrayList<String>();\n\n        final Object syncObject = new Object();\n\n        if (state.size == 0) {\n\n            removeAllRegistrationsId();\n\n            mIsRefreshNeeded = false;\n\n            resultFuture.set(null);\n\n            return resultFuture;\n        }\n\n        for (final Registration registration : registrations) {\n\n            ListenableFuture<Void> serviceFilterFuture = deleteRegistrationInternal(registration.getName(), registration.getRegistrationId());\n\n            Futures.addCallback(serviceFilterFuture, new FutureCallback<Void>() {\n                @Override\n                public void onFailure(Throwable exception) {\n\n                    if (exception != null) {\n                        synchronized (syncObject) {\n                            if (!state.alreadyReturn) {\n                                state.alreadyReturn = true;\n\n                                resultFuture.setException(exception);\n\n                                return;\n                            }\n                        }\n                    }\n                }\n\n                @Override\n                public void onSuccess(Void v) {\n                    concurrentArray.add(registration.getRegistrationId());\n\n                    if (concurrentArray.size() == state.size && !state.alreadyReturn) {\n                        removeAllRegistrationsId();\n\n                        mIsRefreshNeeded = false;\n\n                        resultFuture.set(null);\n\n                        return;\n                    }\n                }\n            });\n        }\n\n        return resultFuture;\n    }\n\n    private ListenableFuture<Void> refreshRegistrationInformationIfNeeded(String pnsHandle) {\n\n        final SettableFuture<Void> resultFuture = SettableFuture.create();\n\n        if (!mIsRefreshNeeded) {\n            resultFuture.set(null);\n\n            return resultFuture;\n        }\n\n        return refreshRegistrationInformation(pnsHandle);\n    }\n\n    private ListenableFuture<Void> refreshRegistrationInformation(String pnsHandle) {\n\n        final SettableFuture<Void> resultFuture = SettableFuture.create();\n\n        if (isNullOrWhiteSpace(pnsHandle)) {\n            resultFuture.setException(new IllegalArgumentException(\"pnsHandle\"));\n            return resultFuture;\n        }\n\n        // delete old registration information\n        Editor editor = mSharedPreferences.edit();\n        Set<String> keys = mSharedPreferences.getAll().keySet();\n        for (String key : keys) {\n            if (key.startsWith(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY)) {\n                editor.remove(key);\n            }\n        }\n\n        editor.commit();\n\n        ListenableFuture<ArrayList<Registration>> getFullRegistrationInformationFuture = getFullRegistrationInformation(pnsHandle);\n\n        Futures.addCallback(getFullRegistrationInformationFuture, new FutureCallback<ArrayList<Registration>>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                resultFuture.setException(exception);\n            }\n\n            @Override\n            public void onSuccess(ArrayList<Registration> registrations) {\n                for (Registration registration : registrations) {\n\n                    try {\n                        storeRegistrationId(registration.getName(), registration.getRegistrationId(), registration.getPNSHandle());\n                    } catch (Exception e) {\n                        resultFuture.setException(e);\n\n                        return;\n                    }\n                }\n\n                mIsRefreshNeeded = false;\n\n                resultFuture.set(null);\n            }\n        });\n\n        return resultFuture;\n    }\n\n    private ListenableFuture<ArrayList<Registration>> getFullRegistrationInformation(String pnsHandle) {\n        final SettableFuture<ArrayList<Registration>> resultFuture = SettableFuture.create();\n\n        if (isNullOrWhiteSpace(pnsHandle)) {\n            resultFuture.setException(new IllegalArgumentException(\"pnsHandle\"));\n            return resultFuture;\n        }\n\n        // get existing registrations\n        String path = PNS_API_URL + \"/registrations/\";\n\n        List<Pair<String, String>> requestHeaders = new ArrayList<Pair<String, String>>();\n        List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"platform\", mPnsSpecificRegistrationFactory.getPlatform()));\n        parameters.add(new Pair<String, String>(\"deviceId\", pnsHandle));\n        requestHeaders.add(new Pair<String, String>(HTTP.CONTENT_TYPE, MobileServiceConnection.JSON_CONTENTTYPE));\n\n        ListenableFuture<ServiceFilterResponse> serviceFilterFuture = mHttpClient.request(path, null, \"GET\", requestHeaders, parameters);\n\n        Futures.addCallback(serviceFilterFuture, new FutureCallback<ServiceFilterResponse>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                resultFuture.setException(exception);\n            }\n\n            @Override\n            public void onSuccess(ServiceFilterResponse response) {\n                ArrayList<Registration> registrationsList = new ArrayList<Registration>();\n\n                JsonArray registrations = new JsonParser().parse(response.getContent()).getAsJsonArray();\n\n                for (JsonElement registrationJson : registrations) {\n                    Registration registration = null;\n                    if (registrationJson.getAsJsonObject().has(\"templateName\")) {\n                        registration = mPnsSpecificRegistrationFactory.parseTemplateRegistration(registrationJson.getAsJsonObject());\n                    } else {\n                        registration = mPnsSpecificRegistrationFactory.parseNativeRegistration(registrationJson.getAsJsonObject());\n                    }\n\n                    registrationsList.add(registration);\n                }\n\n                resultFuture.set(registrationsList);\n            }\n        });\n\n        return resultFuture;\n    }\n\n    /**\n     * Creates a new registration in the server. If it exists, updates its\n     * information\n     *\n     * @param registration The registration to create\n     * @param callback     The operation callback\n     */\n    private ListenableFuture<String> registerInternal(final Registration registration) {\n\n        final SettableFuture<String> resultFuture = SettableFuture.create();\n\n        String pNSHandle = mSharedPreferences.getString(STORAGE_PREFIX + PNS_HANDLE_KEY, \"\");\n\n        if (isNullOrWhiteSpace(pNSHandle)) {\n            pNSHandle = registration.getPNSHandle();\n        }\n\n        ListenableFuture<Void> refreshRegistrationInformationIfNeededFuture = refreshRegistrationInformationIfNeeded(pNSHandle);\n\n        Futures.addCallback(refreshRegistrationInformationIfNeededFuture, new FutureCallback<Void>() {\n\n            @Override\n            public void onFailure(Throwable exception) {\n                resultFuture.setException(exception);\n            }\n\n            @Override\n            public void onSuccess(Void v) {\n\n                Futures.addCallback(createRegistrationId(registration), new FutureCallback<String>() {\n                    @Override\n                    public void onFailure(Throwable exception) {\n                        resultFuture.setException(exception);\n                    }\n\n                    @Override\n                    public void onSuccess(String registrationId) {\n                        resultFuture.set(registrationId);\n                    }\n                });\n            }\n        });\n\n        return resultFuture;\n    }\n\n    private ListenableFuture<String> createRegistrationId(final Registration registration) {\n\n        String registrationId = null;\n\n        final SettableFuture<String> resultFuture = SettableFuture.create();\n\n        try {\n            registrationId = retrieveRegistrationId(registration.getName());\n        } catch (Exception e) {\n            resultFuture.setException(e);\n            return resultFuture;\n        }\n\n        if (isNullOrWhiteSpace(registrationId)) {\n            return createRegistrationIdInternal(registration);\n        } else {\n            ListenableFuture<Void> unregisterInternalFuture = unregisterInternal(registration.getName());\n\n            Futures.addCallback(unregisterInternalFuture, new FutureCallback<Void>() {\n\n                @Override\n                public void onFailure(Throwable exception) {\n                    resultFuture.setException(exception);\n                }\n\n                @Override\n                public void onSuccess(Void v) {\n\n                    ListenableFuture<String> createRegistrationIdInternalFuture = createRegistrationIdInternal(registration);\n\n                    Futures.addCallback(createRegistrationIdInternalFuture, new FutureCallback<String>() {\n\n                        @Override\n                        public void onFailure(Throwable exception) {\n                            resultFuture.setException(exception);\n                        }\n\n                        @Override\n                        public void onSuccess(String registrationId) {\n                            resultFuture.set(registrationId);\n                        }\n                    });\n                }\n            });\n        }\n\n        return resultFuture;\n    }\n\n    private ListenableFuture<String> createRegistrationIdInternal(final Registration registration) {\n\n        final SettableFuture<String> resultFuture = SettableFuture.create();\n\n        ListenableFuture<String> createRegistrationIdFuture = createRegistrationId();\n\n        Futures.addCallback(createRegistrationIdFuture, new FutureCallback<String>() {\n\n            @Override\n            public void onFailure(Throwable exception) {\n                resultFuture.setException(exception);\n            }\n\n            @Override\n            public void onSuccess(String registrationId) {\n                ListenableFuture<String> setRegistrationIdFuture = setRegistrationId(registration, registrationId);\n\n                Futures.addCallback(setRegistrationIdFuture, new FutureCallback<String>() {\n\n                    @Override\n                    public void onFailure(Throwable exception) {\n                        resultFuture.setException(exception);\n                    }\n\n                    @Override\n                    public void onSuccess(String registrationId) {\n                        resultFuture.set(registrationId);\n                    }\n                });\n            }\n        });\n\n        return resultFuture;\n    }\n\n    private ListenableFuture<String> setRegistrationId(final Registration registration, final String registrationId) {\n        registration.setRegistrationId(registrationId);\n\n        final SettableFuture<String> resultFuture = SettableFuture.create();\n\n        ListenableFuture<Void> upsertRegistrationInternalFuture = upsertRegistrationInternal(registration);\n\n        Futures.addCallback(upsertRegistrationInternalFuture, new FutureCallback<Void>() {\n            @Override\n            public void onFailure(Throwable exception) {\n\n                if (!(exception instanceof MobileServiceException)) {\n                    resultFuture.setException(exception);\n                }\n\n                MobileServiceException mobileServiceException = (MobileServiceException) exception;\n\n                ServiceFilterResponse response = mobileServiceException.getResponse();\n\n                if (response != null && response.getStatus().getStatusCode() == 410) {\n\n                    // if we get an RegistrationGoneException (410) from\n                    // service, we will recreate registration id and will try to\n                    // do upsert one more time.\n                    // This can occur if the backing NotificationHub is changed\n                    // or if the registration expires.\n\n                    try {\n                        removeRegistrationId(registration.getName());\n                    } catch (Exception e) {\n                        resultFuture.setException(e);\n                        return;\n                    }\n\n                    ListenableFuture<String> createRegistrationIdFuture = createRegistrationId();\n\n                    Futures.addCallback(createRegistrationIdFuture, new FutureCallback<String>() {\n                        @Override\n                        public void onFailure(Throwable exception) {\n                            resultFuture.setException(exception);\n                        }\n\n                        @Override\n                        public void onSuccess(final String registrationId) {\n                            ListenableFuture<Void> upsertRegistrationInternalFuture2 = upsertRegistrationInternal(registration);\n\n                            Futures.addCallback(upsertRegistrationInternalFuture2, new FutureCallback<Void>() {\n                                @Override\n                                public void onFailure(Throwable exception) {\n\n                                    if (!(exception instanceof MobileServiceException)) {\n                                        resultFuture.setException(exception);\n                                    }\n\n                                    MobileServiceException mobileServiceException = (MobileServiceException) exception;\n\n                                    ServiceFilterResponse response = mobileServiceException.getResponse();\n\n                                    if (response != null && response.getStatus().getStatusCode() == 410) {\n\n                                        RegistrationGoneException registrationGoneException = new RegistrationGoneException(mobileServiceException);\n                                        resultFuture.setException(registrationGoneException);\n                                    }\n\n                                }\n\n                                public void onSuccess(Void v) {\n                                    try {\n                                        storeRegistrationId(registration.getName(), registration.getRegistrationId(), registration.getPNSHandle());\n                                    } catch (Exception exception) {\n                                        resultFuture.setException(exception);\n                                        return;\n                                    }\n                                    resultFuture.set(registrationId);\n                                }\n                            });\n                        }\n                    });\n                } else {\n                    resultFuture.setException(exception);\n                }\n            }\n\n            @Override\n            public void onSuccess(Void v) {\n                try {\n                    storeRegistrationId(registration.getName(), registration.getRegistrationId(), registration.getPNSHandle());\n                } catch (Exception exception) {\n                    resultFuture.setException(exception);\n                    return;\n                }\n\n                resultFuture.set(registrationId);\n            }\n        });\n\n        return resultFuture;\n    }\n\n    /**\n     * Deletes a registration and removes it from local storage\n     *\n     * @param registrationName The registration name\n     * @param callback         The operation callback\n     * @throws Exception\n     */\n    private ListenableFuture<Void> unregisterInternal(String registrationName) {\n        String registrationId = null;\n\n        registrationId = retrieveRegistrationId(registrationName);\n\n        return deleteRegistrationInternal(registrationName, registrationId);\n    }\n\n    private ListenableFuture<String> createRegistrationId() {\n\n        String path = PNS_API_URL + \"/registrationids/\";\n\n        final SettableFuture<String> resultFuture = SettableFuture.create();\n        ListenableFuture<ServiceFilterResponse> serviceFilterFuture = mHttpClient.request(path, null, \"POST\", null, null);\n\n        Futures.addCallback(serviceFilterFuture, new FutureCallback<ServiceFilterResponse>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                resultFuture.setException(exception);\n            }\n\n            @Override\n            public void onSuccess(ServiceFilterResponse response) {\n                for (Header header : response.getHeaders()) {\n                    if (header.getName().equalsIgnoreCase(NEW_REGISTRATION_LOCATION_HEADER)) {\n\n                        URI regIdUri = null;\n                        try {\n                            regIdUri = new URI(header.getValue());\n                        } catch (URISyntaxException e) {\n                            resultFuture.setException(e);\n\n                            return;\n                        }\n\n                        String[] pathFragments = regIdUri.getPath().split(\"/\");\n                        String result = pathFragments[pathFragments.length - 1];\n\n                        resultFuture.set(result);\n                    }\n                }\n            }\n        });\n\n        return resultFuture;\n    }\n\n    /**\n     * Updates a registration\n     *\n     * @param registration The registration to update\n     * @param callback     The operation callback\n     * @throws java.io.UnsupportedEncodingException\n     * @throws Exception\n     */\n    private ListenableFuture<Void> upsertRegistrationInternal(final Registration registration) {\n\n        final SettableFuture<Void> resultFuture = SettableFuture.create();\n\n        GsonBuilder gsonBuilder = new GsonBuilder();\n        gsonBuilder = gsonBuilder.excludeFieldsWithoutExposeAnnotation();\n\n        Gson gson = gsonBuilder.create();\n\n        String resource = registration.getURI();\n        String path = PNS_API_URL + resource;\n        JsonElement json = gson.toJsonTree(registration);\n        String body = json.toString();\n\n        byte[] content;\n        try {\n            content = body.getBytes(MobileServiceClient.UTF8_ENCODING);\n        } catch (UnsupportedEncodingException e) {\n            resultFuture.setException(e);\n            return resultFuture;\n        }\n\n        List<Pair<String, String>> requestHeaders = new ArrayList<Pair<String, String>>();\n\n        requestHeaders.add(new Pair<String, String>(HTTP.CONTENT_TYPE, MobileServiceConnection.JSON_CONTENTTYPE));\n\n        ListenableFuture<ServiceFilterResponse> serviceFilterFuture = mHttpClient.request(path, content, \"PUT\", requestHeaders, null);\n\n        Futures.addCallback(serviceFilterFuture, new FutureCallback<ServiceFilterResponse>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                resultFuture.setException(exception);\n            }\n\n            @Override\n            public void onSuccess(ServiceFilterResponse response) {\n                resultFuture.set(null);\n            }\n        });\n\n        return resultFuture;\n    }\n\n    /**\n     * Deletes a registration and removes it from local storage\n     *\n     * @param registrationName The registration Name\n     * @param registrationId   The registration Id\n     * @param callback         The operation callback\n     * @throws java.util.concurrent.ExecutionException\n     * @throws InterruptedException\n     */\n    private ListenableFuture<Void> deleteRegistrationInternal(final String registrationName, final String registrationId) {\n\n        final SettableFuture<Void> resultFuture = SettableFuture.create();\n\n        if (isNullOrWhiteSpace(registrationId)) {\n            resultFuture.set(null);\n            return resultFuture;\n        }\n\n        String path = PNS_API_URL + \"/registrations/\" + registrationId;\n\n        ListenableFuture<ServiceFilterResponse> serviceFilterFuture = mHttpClient.request(path, null, \"DELETE\", null, null);\n\n        Futures.addCallback(serviceFilterFuture, new FutureCallback<ServiceFilterResponse>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                resultFuture.setException(exception);\n            }\n\n            @Override\n            public void onSuccess(ServiceFilterResponse response) {\n                removeRegistrationId(registrationName);\n\n                resultFuture.set(null);\n            }\n        });\n\n        return resultFuture;\n    }\n\n    /**\n     * Retrieves the registration id associated to the registration name from\n     * local storage\n     *\n     * @param registrationName The registration name to look for in local storage\n     * @return A registration id String\n     * @throws Exception\n     */\n    private String retrieveRegistrationId(String registrationName) {\n        return mSharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + registrationName, null);\n    }\n\n    /**\n     * Stores the registration name and id association in local storage\n     *\n     * @param registrationName The registration name to store in local storage\n     * @param registrationId   The registration id to store in local storage\n     * @throws Exception\n     */\n    private void storeRegistrationId(String registrationName, String registrationId, String pNSHandle) {\n        Editor editor = mSharedPreferences.edit();\n\n        editor.putString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + registrationName, registrationId);\n\n        editor.putString(STORAGE_PREFIX + PNS_HANDLE_KEY, pNSHandle);\n\n        // Always overwrite the storage version with the latest value\n        editor.putString(STORAGE_PREFIX + STORAGE_VERSION_KEY, STORAGE_VERSION);\n\n        editor.commit();\n    }\n\n    /**\n     * Removes the registration name and id association from local storage\n     *\n     * @param registrationName The registration name of the association to remove from local\n     *                         storage\n     * @throws Exception\n     */\n    private void removeRegistrationId(String registrationName) {\n        Editor editor = mSharedPreferences.edit();\n\n        editor.remove(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + registrationName);\n\n        editor.commit();\n    }\n\n    private void removeAllRegistrationsId() {\n        Editor editor = mSharedPreferences.edit();\n\n        Set<String> keys = mSharedPreferences.getAll().keySet();\n\n        for (String key : keys) {\n            if (key.startsWith(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY)) {\n                editor.remove(key);\n            }\n        }\n\n        editor.commit();\n    }\n\n    private void verifyStorageVersion() {\n        String currentStorageVersion = mSharedPreferences.getString(STORAGE_PREFIX + STORAGE_VERSION_KEY, \"\");\n\n        if (!currentStorageVersion.equals(STORAGE_VERSION)) {\n\n            Editor editor = mSharedPreferences.edit();\n\n            Set<String> keys = mSharedPreferences.getAll().keySet();\n\n            for (String key : keys) {\n                if (key.startsWith(STORAGE_PREFIX)) {\n                    editor.remove(key);\n                }\n            }\n\n            editor.commit();\n\n            mIsRefreshNeeded = true;\n        }\n\n    }\n\n    private class SyncState {\n        public boolean alreadyReturn;\n        public int size;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/notifications/PnsSpecificRegistrationFactory.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * PnsSpecificRegistrationFactory.java\n */\npackage com.microsoft.windowsazure.mobileservices.notifications;\n\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\nimport com.google.gson.JsonObject;\n\n/**\n * Represents a factory which creates Registrations according the PNS supported\n * on device, and also provides some PNS specific utility methods\n */\nfinal class PnsSpecificRegistrationFactory {\n\n    /**\n     * Creates a new instance of PnsSpecificRegistrationFactory\n     */\n    PnsSpecificRegistrationFactory() {\n\n    }\n\n    /**\n     * Creates native registration according the PNS supported on device\n     */\n    public Registration createNativeRegistration() {\n        Registration registration = new GcmNativeRegistration();\n\n        registration.setName(Registration.DEFAULT_REGISTRATION_NAME);\n\n        return registration;\n\n    }\n\n    /**\n     * Creates template registration according the PNS supported on device\n     */\n    public TemplateRegistration createTemplateRegistration() {\n        return new GcmTemplateRegistration();\n    }\n\n    /**\n     * Parses a native registration according the PNS supported on device\n     *\n     * @param registrationJson The Json representation of the registration\n     */\n    public Registration parseNativeRegistration(JsonObject registrationJson) {\n        GsonBuilder builder = new GsonBuilder();\n        builder = builder.excludeFieldsWithoutExposeAnnotation();\n        Gson gson = builder.create();\n        Class<? extends Registration> clazz = GcmNativeRegistration.class;\n        Registration registration = gson.fromJson(registrationJson, clazz);\n\n        registration.setName(Registration.DEFAULT_REGISTRATION_NAME);\n\n        return registration;\n    }\n\n    /**\n     * Parses a template registration according the PNS supported on device\n     *\n     * @param registrationJson The Json representation of the registration\n     */\n    public TemplateRegistration parseTemplateRegistration(JsonObject registrationJson) {\n        GsonBuilder builder = new GsonBuilder();\n        builder = builder.excludeFieldsWithoutExposeAnnotation();\n        Gson gson = builder.create();\n        Class<? extends TemplateRegistration> clazz = GcmTemplateRegistration.class;\n        return gson.fromJson(registrationJson, clazz);\n    }\n\n    /**\n     * Returns PNS handle field name according the PNS supported on device\n     */\n    public String getPlatform() {\n        return GcmNativeRegistration.GCM_PLATFORM;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/notifications/Registration.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * Registration.java\n */\npackage com.microsoft.windowsazure.mobileservices.notifications;\n\nimport com.google.gson.annotations.Expose;\nimport com.google.gson.annotations.SerializedName;\n\nimport org.w3c.dom.Element;\nimport org.w3c.dom.NodeList;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic abstract class Registration {\n\n    /**\n     * Name for default registration\n     */\n    static final String DEFAULT_REGISTRATION_NAME = \"$Default\";\n\n    /**\n     * RegistrationId property for regid json object\n     */\n    static final String REGISTRATIONID_JSON_PROPERTY = \"registrationid\";\n\n    /**\n     * RegistrationName property for regid json object\n     */\n    static final String REGISTRATION_NAME_JSON_PROPERTY = \"registrationName\";\n\n    /**\n     * The Registration Id\n     */\n    @Expose\n    @SerializedName(\"registrationId\")\n    protected String mRegistrationId;\n\n    /**\n     * The expiration time\n     */\n    @Expose\n    @SerializedName(\"expirationTime\")\n    protected String mExpirationTime;\n\n    /**\n     * The registration tags\n     */\n    @Expose\n    @SerializedName(\"tags\")\n    protected List<String> mTags;\n\n    /**\n     * Creates a new registration\n     */\n    Registration() {\n        mTags = new ArrayList<String>();\n    }\n\n    /**\n     * Get the node value\n     *\n     * @param element The element to read\n     * @param node    The node name to retrieve\n     * @return\n     */\n    protected static String getNodeValue(Element element, String node) {\n        NodeList nodes = element.getElementsByTagName(node);\n        if (nodes.getLength() > 0) {\n            return nodes.item(0).getTextContent();\n        } else {\n            return null;\n        }\n    }\n\n    private static boolean isNullOrWhiteSpace(String str) {\n        return str == null || str.trim().equals(\"\");\n    }\n\n    /**\n     * Gets the registration ID\n     */\n    public String getRegistrationId() {\n        return mRegistrationId;\n    }\n\n    /**\n     * Sets the registration ID\n     */\n    void setRegistrationId(String registrationId) {\n        mRegistrationId = registrationId;\n    }\n\n    /**\n     * Gets the registration name\n     */\n    protected abstract String getName();\n\n    /**\n     * Sets the registration name\n     */\n    protected abstract void setName(String name);\n\n    /**\n     * Gets the registration tags\n     */\n    public List<String> getTags() {\n        return new ArrayList<String>(mTags);\n    }\n\n    /**\n     * Gets the registration URI\n     */\n    public String getURI() {\n        return \"/registrations/\" + mRegistrationId;\n    }\n\n    /**\n     * Gets the PNS specific identifier\n     */\n    public abstract String getPNSHandle();\n\n    /**\n     * Sets the PNS specific identifier\n     */\n    protected abstract void setPNSHandle(String pNSHandle);\n\n    /**\n     * Gets the expiration time string\n     */\n    String getExpirationTimeString() {\n        return mExpirationTime;\n    }\n\n    /**\n     * Sets the expiration time string\n     */\n    void setExpirationTimeString(String expirationTimeString) {\n        mExpirationTime = expirationTimeString;\n    }\n\n    /**\n     * Adds the tags in the array to the registration\n     */\n    void addTags(String[] tags) {\n        if (tags != null) {\n            for (String tag : tags) {\n                if (!isNullOrWhiteSpace(tag) && !tag.contains(\",\")) {\n                    mTags.add(tag);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/notifications/RegistrationCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * RegistrationCallback.java\n */\npackage com.microsoft.windowsazure.mobileservices.notifications;\n\n/**\n * Callback to invoke after register the template\n */\npublic interface RegistrationCallback {\n    /**\n     * Method to execute when the register is finished\n     *\n     * @param registration The current registration\n     * @param exception    An exception representing the error, in case there was one\n     */\n    public void onRegister(Registration registration, Exception exception);\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/notifications/RegistrationGoneException.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * RegistrationGoneException.java\n */\npackage com.microsoft.windowsazure.mobileservices.notifications;\n\n/**\n * Represents an exception when registration is gone\n */\npublic class RegistrationGoneException extends Exception {\n\n    private static final long serialVersionUID = -156200383034074631L;\n\n    /**\n     * Creates a RegistrationGoneException\n     */\n    RegistrationGoneException() {\n        super(\"Registration is gone\");\n    }\n\n    /**\n     * Creates a RegistrationGoneException\n     *\n     * @param cause The Exception that caused the current instance\n     */\n    RegistrationGoneException(Exception cause) {\n        super(\"Registration is gone\", cause);\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistration.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * TemplateRegistration.java\n */\npackage com.microsoft.windowsazure.mobileservices.notifications;\n\nimport com.google.gson.annotations.Expose;\nimport com.google.gson.annotations.SerializedName;\n\n/**\n * Represents a template registration\n */\npublic abstract class TemplateRegistration extends Registration {\n\n    /**\n     * The template body\n     */\n    @Expose\n    @SerializedName(\"templateBody\")\n    protected String mTemplateBody;\n\n    /**\n     * The registration name\n     */\n    @Expose\n    @SerializedName(\"templateName\")\n    protected String mName;\n\n    /**\n     * Creates a new template registration\n     */\n    TemplateRegistration() {\n        super();\n    }\n\n    /**\n     * Gets the template body\n     */\n    public String getTemplateBody() {\n        return mTemplateBody;\n    }\n\n    /**\n     * Sets the template body\n     */\n    void setTemplateBody(String templateBody) {\n        mTemplateBody = templateBody;\n    }\n\n    /**\n     * Gets the template name\n     */\n    public String getTemplateName() {\n        return getName();\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/notifications/TemplateRegistrationCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * TemplateRegistrationCallback.java\n */\npackage com.microsoft.windowsazure.mobileservices.notifications;\n\n/**\n * Callback to invoke after register the template\n */\npublic interface TemplateRegistrationCallback {\n    /**\n     * Method to execute when the register is finished\n     *\n     * @param templateRegistration The current template registration\n     * @param exception            An exception representing the error, in case there was one\n     */\n    public void onRegister(TemplateRegistration templateRegistration, Exception exception);\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/notifications/UnregisterCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * UnregisterCallback.java\n */\npackage com.microsoft.windowsazure.mobileservices.notifications;\n\n/**\n * Callback to invoke after unregister\n */\npublic interface UnregisterCallback {\n    /**\n     * Method to execute when the unregister is finished\n     *\n     * @param exception An exception representing the error, in case there was one\n     */\n    public void onUnregister(Exception exception);\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/DateTimeOffset.java",
    "content": "package com.microsoft.windowsazure.mobileservices.table;\n\nimport java.util.Date;\n\n/**\n * Created by marianosanchez on 3/13/15.\n */\npublic class DateTimeOffset extends Date {\n\n    public DateTimeOffset(Date date) {\n        this.setTime(date.getTime());\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/MobileServiceConflictException.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServicePreconditionFailedException.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\n\npublic class MobileServiceConflictException extends MobileServiceException {\n\n    /**\n     * UID used for serialization\n     */\n    private static final long serialVersionUID = 5188346485829981214L;\n\n    private Object mItem;\n\n\n    /**\n     * Initializes a new instance of the\n     * MobileServiceConflictExceptionJson class.\n     *\n     * @param throwable The inner exception.\n     * @param value     The current instance from server that the conflict occurred for.\n     */\n\n    public MobileServiceConflictException(MobileServiceException msException, Object item) {\n        super(msException.getMessage(), msException.getCause(), msException.getResponse());\n        this.mItem = item;\n    }\n\n    public Object getItem() {\n        return mItem;\n    }\n\n    public void setItem(Object item) {\n        this.mItem = item;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/MobileServiceConflictExceptionJson.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServicePreconditionFailedExceptionJson.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\n\npublic class MobileServiceConflictExceptionJson extends MobileServiceExceptionBase {\n\n    /**\n     * UID used for serialization\n     */\n    private static final long serialVersionUID = 4489352410883725274L;\n\n    /**\n     * Initializes a new instance of the\n     * MobileServiceConflictExceptionJson class.\n     *\n     * @param throwable The inner exception.\n     * @param value     The current instance from server that the conflict occurred for.\n     */\n    public MobileServiceConflictExceptionJson(MobileServiceException msException, JsonObject value) {\n        super(msException, value);\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/MobileServiceExceptionBase.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServicePreconditionFailedExceptionJson.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\n\npublic class MobileServiceExceptionBase extends MobileServiceException {\n\n    /**\n     * UID used for serialization\n     */\n    private static final long serialVersionUID = 4489352410883725274L;\n\n    private JsonObject mValue;\n\n    /**\n     * Initializes a new instance of the\n     * MobileServiceExceptionBase class.\n     *\n     * @param throwable The inner exception.\n     * @param value     The current instance from the server for that the exception was created\n     */\n    public MobileServiceExceptionBase(MobileServiceException msException, JsonObject value) {\n        super(msException.getMessage(), msException.getCause(), msException.getResponse());\n        this.mValue = value;\n    }\n\n    public JsonObject getValue() {\n        return mValue;\n    }\n\n    public void setValue(JsonObject mValue) {\n        this.mValue = mValue;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/MobileServiceJsonTable.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceJsonTable.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport android.net.Uri;\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.FutureCallback;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceFeatures;\nimport com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection;\nimport com.microsoft.windowsazure.mobileservices.http.MobileServiceHttpClient;\nimport com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequestImpl;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.table.query.ExecutableJsonQuery;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryODataWriter;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\n\nimport org.apache.http.Header;\nimport org.apache.http.client.methods.HttpGet;\nimport org.apache.http.protocol.HTTP;\n\nimport java.io.UnsupportedEncodingException;\nimport java.net.URLEncoder;\nimport java.util.ArrayList;\nimport java.util.EnumSet;\nimport java.util.List;\n\n/**\n * Represents a Mobile Service Table\n */\npublic final class MobileServiceJsonTable extends MobileServiceTableBase {\n\n    /**\n     * Constructor for MobileServiceJsonTable\n     *\n     * @param name   The name of the represented table\n     * @param client The MobileServiceClient used to invoke table operations\n     */\n    public MobileServiceJsonTable(String name, MobileServiceClient client) {\n        super(name, client);\n        mFeatures.add(MobileServiceFeatures.UntypedTable);\n    }\n\n    /**\n     * Updates the Version System Property in the Json Object with the ETag\n     * information\n     *\n     * @param response The response containing the ETag Header\n     * @param json     The JsonObject to modify\n     */\n    private static void updateVersionFromETag(ServiceFilterResponse response, JsonObject json) {\n        if (response != null && response.getHeaders() != null) {\n            for (Header header : response.getHeaders()) {\n                if (header.getName().equalsIgnoreCase(\"ETag\")) {\n                    json.remove(VersionSystemPropertyName);\n                    json.addProperty(VersionSystemPropertyName, getValueFromEtag(header.getValue()));\n                    break;\n                }\n            }\n        }\n    }\n\n    /**\n     * Executes a query to retrieve all the table rows\n     *\n     * @throws MobileServiceException\n     */\n    public ListenableFuture<JsonElement> execute() throws MobileServiceException {\n        return this.executeInternal();\n    }\n\n    /**\n     * Executes a query to retrieve all the table rows\n     *\n     * @throws MobileServiceException\n     */\n    protected ListenableFuture<JsonElement> executeInternal() throws MobileServiceException {\n        return this.execute(this.where());\n    }\n\n    /**\n     * Executes the query\n     *\n     * @param callback Callback to invoke when the operation is completed\n     * @throws MobileServiceException\n     * @deprecated use {@link execute()} instead\n     */\n    public void execute(final TableJsonQueryCallback callback) throws MobileServiceException {\n        this.where().execute(callback);\n    }\n\n    /**\n     * Retrieves a set of rows from the table using a query\n     *\n     * @param query The query used to retrieve the rows\n     */\n    public ListenableFuture<JsonElement> execute(final Query query) {\n        final SettableFuture<JsonElement> future = SettableFuture.create();\n\n        String url = null;\n        try {\n            String filtersUrl = QueryODataWriter.getRowFilter(query);\n            url = mClient.getAppUrl().toString() + TABLES_URL + URLEncoder.encode(mTableName, MobileServiceClient.UTF8_ENCODING);\n\n            if (filtersUrl.length() > 0) {\n                url += \"?$filter=\" + filtersUrl + QueryODataWriter.getRowSetModifiers(query, this);\n            } else {\n                String rowSetModifiers = QueryODataWriter.getRowSetModifiers(query, this);\n\n                if (rowSetModifiers.length() > 0) {\n                    url += \"?\" + QueryODataWriter.getRowSetModifiers(query, this).substring(1);\n                }\n            }\n        } catch (UnsupportedEncodingException e) {\n            future.setException(e);\n            return future;\n        }\n\n        EnumSet<MobileServiceFeatures> features = mFeatures.clone();\n        if (query != null) {\n            List<Pair<String, String>> userParameters = query.getUserDefinedParameters();\n            if (userParameters != null && userParameters.size() > 0) {\n                features.add(MobileServiceFeatures.AdditionalQueryParameters);\n            }\n        }\n\n        return executeUrlQuery(url, features);\n    }\n\n    /**\n     * Retrieves a set of rows using the Next Link Url (Continuation Token)\n     *\n     * @param nextLink The Next Link to make the request\n     */\n    public ListenableFuture<JsonElement> execute(final String nextLink) {\n        final SettableFuture<JsonElement> future = SettableFuture.create();\n\n        return executeUrlQuery(nextLink, mFeatures.clone());\n    }\n\n    /**\n     * Make the request to the mobile service witht the query URL\n     *\n     * @param url The query url\n     * @param features The features used in the request\n     */\n    private ListenableFuture<JsonElement> executeUrlQuery(final String url, EnumSet<MobileServiceFeatures> features) {\n        final SettableFuture<JsonElement> future = SettableFuture.create();\n\n        ListenableFuture<Pair<JsonElement, ServiceFilterResponse>> internalFuture = executeGetRecords(url, features);\n\n        Futures.addCallback(internalFuture, new FutureCallback<Pair<JsonElement, ServiceFilterResponse>>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(exc);\n            }\n\n            @Override\n            public void onSuccess(Pair<JsonElement, ServiceFilterResponse> result) {\n\n                String nextLinkHeaderValue = getHeaderValue(result.second.getHeaders(), \"Link\");\n\n                if (nextLinkHeaderValue != null){\n\n                    JsonObject jsonResult = new JsonObject();\n\n                    String nextLink = nextLinkHeaderValue.replace(\"; rel=next\", \"\");\n\n                    jsonResult.addProperty(\"nextLink\", nextLink);\n                    jsonResult.add(\"results\", result.first);\n\n                    future.set(jsonResult);\n\n                }\n                else {\n                    future.set(result.first);\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Retrieves a set of rows from the table using a query\n     *\n     * @param query    The query used to retrieve the rows\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link execute(final Query query)} instead\n     */\n    public void execute(final Query query, final TableJsonQueryCallback callback) {\n        ListenableFuture<JsonElement> executeFuture = execute(query);\n\n        Futures.addCallback(executeFuture, new FutureCallback<JsonElement>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(JsonElement result) {\n                callback.onCompleted(result, null, null);\n            }\n        });\n    }\n\n    /**\n     * Starts a filter to query the table\n     *\n     * @return The ExecutableJsonQuery representing the filter\n     */\n    public ExecutableJsonQuery where() {\n        ExecutableJsonQuery query = new ExecutableJsonQuery();\n        query.setTable(this);\n        return query;\n    }\n\n    /**\n     * Starts a filter to query the table with an existing filter\n     *\n     * @param query The existing filter\n     * @return The ExecutableJsonQuery representing the filter\n     */\n    public ExecutableJsonQuery where(Query query) {\n        if (query == null) {\n            throw new IllegalArgumentException(\"Query must not be null\");\n        }\n\n        ExecutableJsonQuery baseQuery = new ExecutableJsonQuery(query);\n        baseQuery.setTable(this);\n        return baseQuery;\n    }\n\n    /**\n     * Adds a new user-defined parameter to the query\n     *\n     * @param parameter The parameter name\n     * @param value     The parameter value\n     * @return ExecutableJsonQuery\n     */\n    public ExecutableJsonQuery parameter(String parameter, String value) {\n        return this.where().parameter(parameter, value);\n    }\n\n    /**\n     * Creates a query with the specified order\n     *\n     * @param field Field name\n     * @param order Sorting order\n     * @return ExecutableJsonQuery\n     */\n    public ExecutableJsonQuery orderBy(String field, QueryOrder order) {\n        return this.where().orderBy(field, order);\n    }\n\n    /**\n     * Sets the number of records to return\n     *\n     * @param top Number of records to return\n     * @return ExecutableQuery\n     */\n    public ExecutableJsonQuery top(int top) {\n        return this.where().top(top);\n    }\n\n    /**\n     * Sets the number of records to skip over a given number of elements in a\n     * sequence and then return the remainder.\n     *\n     * @param skip\n     * @return ExecutableJsonQuery\n     */\n    public ExecutableJsonQuery skip(int skip) {\n        return this.where().skip(skip);\n    }\n\n    /**\n     * Specifies the fields to retrieve\n     *\n     * @param fields Names of the fields to retrieve\n     * @return ExecutableJsonQuery\n     */\n    public ExecutableJsonQuery select(String... fields) {\n        return this.where().select(fields);\n    }\n\n    /**\n     * Include a property with the number of records returned.\n     *\n     * @return ExecutableJsonQuery\n     */\n    public ExecutableJsonQuery includeInlineCount() {\n        return this.where().includeInlineCount();\n    }\n\n    /**\n     * Include the soft deleted records on the query result.\n     *\n     * @return ExecutableJsonQuery\n     */\n    public ExecutableJsonQuery includeDeleted() {\n        return this.where().includeDeleted();\n    }\n\n    /**\n     * Looks up a row in the table and retrieves its JSON value.\n     *\n     * @param id The id of the row\n     */\n    public ListenableFuture<JsonObject> lookUp(Object id) {\n        return this.lookUp(id, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Looks up a row in the table and retrieves its JSON value.\n     *\n     * @param id       The id of the row\n     * @param callback Callback to invoke after the operation is completed\n     * @deprecated use {@link lookUp(Object id)} instead\n     */\n    public void lookUp(Object id, final TableJsonOperationCallback callback) {\n        this.lookUp(id, null, callback);\n    }\n\n    /**\n     * Looks up a row in the table and retrieves its JSON value.\n     *\n     * @param id         The id of the row\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     */\n    public ListenableFuture<JsonObject> lookUp(Object id, List<Pair<String, String>> parameters) {\n        final SettableFuture<JsonObject> future = SettableFuture.create();\n\n        try {\n            validateId(id);\n        } catch (Exception e) {\n            future.setException(e);\n            return future;\n        }\n\n        String url;\n\n        Uri.Builder uriBuilder = Uri.parse(mClient.getAppUrl().toString()).buildUpon();\n        uriBuilder.path(TABLES_URL);\n        uriBuilder.appendPath(mTableName);\n        uriBuilder.appendPath(id.toString());\n\n        EnumSet<MobileServiceFeatures> features = mFeatures.clone();\n        if (parameters != null && parameters.size() > 0) {\n            features.add(MobileServiceFeatures.AdditionalQueryParameters);\n        }\n        parameters = addSystemProperties(mSystemProperties, parameters);\n\n        if (parameters != null && parameters.size() > 0) {\n            for (Pair<String, String> parameter : parameters) {\n                uriBuilder.appendQueryParameter(parameter.first, parameter.second);\n            }\n        }\n\n        url = uriBuilder.build().toString();\n\n        ListenableFuture<Pair<JsonElement, ServiceFilterResponse>> internalFuture = executeGetRecords(url, features);\n\n        Futures.addCallback(internalFuture, new FutureCallback<Pair<JsonElement, ServiceFilterResponse>>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(exc);\n            }\n\n            @Override\n            public void onSuccess(Pair<JsonElement, ServiceFilterResponse> results) {\n                if (results.first.isJsonArray()) {\n                    // empty result\n                    future.setException(new MobileServiceException(\"A record with the specified Id cannot be found\", results.second));\n                } else {\n                    // Lookup result\n                    JsonObject patchedJson = results.first.getAsJsonObject();\n\n                    updateVersionFromETag(results.second, patchedJson);\n\n                    future.set(patchedJson);\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Looks up a row in the table and retrieves its JSON value.\n     *\n     * @param id         The id of the row\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke after the operation is completed\n     * @deprecated use {@link lookUp(Object id, List<Pair<String, String>>\n     * parameters)} instead\n     */\n    public void lookUp(Object id, List<Pair<String, String>> parameters, final TableJsonOperationCallback callback) {\n        ListenableFuture<JsonObject> lookUpFuture = lookUp(id, parameters);\n\n        Futures.addCallback(lookUpFuture, new FutureCallback<JsonObject>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(JsonObject result) {\n                callback.onCompleted(result, null, null);\n            }\n        });\n    }\n\n    /**\n     * Inserts a JsonObject into a Mobile Service table\n     *\n     * @param element The JsonObject to insert\n     * @throws IllegalArgumentException if the element has an id property set with a numeric value\n     *                                  other than default (0), or an invalid string value\n     */\n    public ListenableFuture<JsonObject> insert(final JsonObject element) {\n        return this.insert(element, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Inserts a JsonObject into a Mobile Service table\n     *\n     * @param element  The JsonObject to insert\n     * @param callback Callback to invoke when the operation is completed\n     * @throws IllegalArgumentException if the element has an id property set with a numeric value\n     *                                  other than default (0), or an invalid string value\n     * @deprecated use {@link insert(final JsonObject element)} instead\n     */\n    public void insert(final JsonObject element, TableJsonOperationCallback callback) {\n        this.insert(element, null, callback);\n    }\n\n    /**\n     * Inserts a JsonObject into a Mobile Service Table\n     *\n     * @param element    The JsonObject to insert\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @throws IllegalArgumentException if the element has an id property set with a numeric value\n     *                                  other than default (0), or an invalid string value\n     */\n    public ListenableFuture<JsonObject> insert(final JsonObject element, List<Pair<String, String>> parameters) {\n        final SettableFuture<JsonObject> future = SettableFuture.create();\n\n        try {\n            validateIdOnInsert(element);\n        } catch (Exception e) {\n            future.setException(e);\n            return future;\n        }\n\n        String content = element.toString();\n\n        EnumSet<MobileServiceFeatures> features = mFeatures.clone();\n        if (parameters != null && parameters.size() > 0) {\n            features.add(MobileServiceFeatures.AdditionalQueryParameters);\n        }\n\n        parameters = addSystemProperties(mSystemProperties, parameters);\n\n        ListenableFuture<Pair<JsonObject, ServiceFilterResponse>> internalFuture = this.executeTableOperation(TABLES_URL + mTableName, content, \"POST\", null, parameters, features);\n\n        Futures.addCallback(internalFuture, new FutureCallback<Pair<JsonObject, ServiceFilterResponse>>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(exc);\n            }\n\n            @Override\n            public void onSuccess(Pair<JsonObject, ServiceFilterResponse> result) {\n\n                if (result == null) {\n                    future.set(null);\n                } else {\n                    JsonObject patchedJson = patchOriginalEntityWithResponseEntity(element, result.first);\n\n                    updateVersionFromETag(result.second, patchedJson);\n\n                    future.set(patchedJson);\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Inserts a JsonObject into a Mobile Service Table\n     *\n     * @param element    The JsonObject to insert\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke when the operation is completed\n     * @throws IllegalArgumentException if the element has an id property set with a numeric value\n     *                                  other than default (0), or an invalid string value\n     * @deprecated use {@link insert(final JsonObject element, List<Pair<String,\n     * String>> parameters)} instead\n     */\n    public void insert(final JsonObject element, List<Pair<String, String>> parameters, final TableJsonOperationCallback callback) {\n        ListenableFuture<JsonObject> insertFuture = insert(element, parameters);\n\n        Futures.addCallback(insertFuture, new FutureCallback<JsonObject>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(JsonObject result) {\n                callback.onCompleted(result, null, null);\n            }\n        });\n    }\n\n    /**\n     * Updates an element from a Mobile Service Table\n     *\n     * @param element The JsonObject to update\n     */\n    public ListenableFuture<JsonObject> update(final JsonObject element) {\n        return this.update(element, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Updates an element from a Mobile Service Table\n     *\n     * @param element  The JsonObject to update\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link update(final JsonObject element)} instead\n     */\n    public void update(final JsonObject element, final TableJsonOperationCallback callback) {\n        this.update(element, null, callback);\n    }\n\n    /**\n     * Updates an element from a Mobile Service Table\n     *\n     * @param element    The JsonObject to update\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     */\n    public ListenableFuture<JsonObject> update(final JsonObject element, List<Pair<String, String>> parameters) {\n        final SettableFuture<JsonObject> future = SettableFuture.create();\n\n        Object id = null;\n        String version = null;\n        String content = null;\n\n        try {\n            id = validateId(element);\n        } catch (Exception e) {\n            future.setException(e);\n            return future;\n        }\n\n        if (!isNumericType(id)) {\n            version = getVersionSystemProperty(element);\n            content = removeSystemProperties(element).toString();\n        } else {\n            content = element.toString();\n        }\n\n        EnumSet<MobileServiceFeatures> features = mFeatures.clone();\n        if (parameters != null && parameters.size() > 0) {\n            features.add(MobileServiceFeatures.AdditionalQueryParameters);\n        }\n\n        parameters = addSystemProperties(mSystemProperties, parameters);\n        List<Pair<String, String>> requestHeaders = null;\n        if (version != null) {\n            requestHeaders = new ArrayList<Pair<String, String>>();\n            requestHeaders.add(new Pair<String, String>(\"If-Match\", getEtagFromValue(version)));\n            features.add(MobileServiceFeatures.OpportunisticConcurrency);\n        }\n\n        ListenableFuture<Pair<JsonObject, ServiceFilterResponse>> internalFuture = this.executeTableOperation(TABLES_URL + mTableName + \"/\" + id.toString(), content, \"PATCH\", requestHeaders, parameters, features);\n\n        Futures.addCallback(internalFuture, new FutureCallback<Pair<JsonObject, ServiceFilterResponse>>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(exc);\n            }\n\n            @Override\n            public void onSuccess(Pair<JsonObject, ServiceFilterResponse> result) {\n                JsonObject patchedJson = patchOriginalEntityWithResponseEntity(element, result.first);\n\n                updateVersionFromETag(result.second, patchedJson);\n\n                future.set(patchedJson);\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Updates an element from a Mobile Service Table\n     *\n     * @param element    The JsonObject to update\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke when the operation is completed\n     * @deprecated use {@link update(final com.google.gson.JsonObject element, java.util.List< android.util.Pair<String,\n     * String>> parameters)} instead\n     */\n    public void update(final JsonObject element, List<Pair<String, String>> parameters, final TableJsonOperationCallback callback) {\n        ListenableFuture<JsonObject> updateFuture = update(element, parameters);\n\n        Futures.addCallback(updateFuture, new FutureCallback<JsonObject>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(JsonObject result) {\n                callback.onCompleted(result, null, null);\n            }\n        });\n    }\n\n    /**\n     * Delete an element from a Mobile Service Table\n     *\n     * @param element The JsonObject to delete\n     */\n    public ListenableFuture<Void> delete(JsonObject element) {\n        return this.delete(element, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Delete an element from a Mobile Service Table\n     *\n     * @param element  The JsonObject to delete\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link update(final JsonObject element)} instead\n     */\n    public void delete(JsonObject element, TableDeleteCallback callback) {\n        this.delete(element, null, callback);\n    }\n\n    /**\n     * Delete an element from a Mobile Service Table\n     *\n     * @param element    The JsonObject to undelete\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     */\n    public ListenableFuture<Void> delete(JsonObject element, List<Pair<String, String>> parameters) {\n\n        validateId(element);\n\n        final SettableFuture<Void> future = SettableFuture.create();\n\n        Object id = null;\n        String version = null;\n\n        try {\n            id = validateId(element);\n        } catch (Exception e) {\n            future.setException(e);\n            return future;\n        }\n\n        if (!isNumericType(id)) {\n            version = getVersionSystemProperty(element);\n        }\n\n        EnumSet<MobileServiceFeatures> features = mFeatures.clone();\n        if (parameters != null && parameters.size() > 0) {\n            features.add(MobileServiceFeatures.AdditionalQueryParameters);\n        }\n\n        parameters = addSystemProperties(mSystemProperties, parameters);\n        List<Pair<String, String>> requestHeaders = null;\n        if (version != null) {\n            requestHeaders = new ArrayList<Pair<String, String>>();\n            requestHeaders.add(new Pair<String, String>(\"If-Match\", getEtagFromValue(version)));\n            features.add(MobileServiceFeatures.OpportunisticConcurrency);\n        }\n\n        ListenableFuture<Pair<JsonObject, ServiceFilterResponse>> internalFuture = this.executeTableOperation(TABLES_URL + mTableName + \"/\" + id.toString(), null, \"DELETE\", requestHeaders, parameters, features);\n\n        Futures.addCallback(internalFuture, new FutureCallback<Pair<JsonObject, ServiceFilterResponse>>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(exc);\n            }\n\n            @Override\n            public void onSuccess(Pair<JsonObject, ServiceFilterResponse> result) {\n                future.set(null);\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Delete an element from a Mobile Service Table\n     *\n     * @param element    The JsonObject to undelete\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke when the operation is completed\n     * @deprecated use {@link update(final com.google.gson.JsonObject element, java.util.List< android.util.Pair<String,\n     * String>> parameters)} instead\n     */\n    public void delete(final JsonObject element, List<Pair<String, String>> parameters, final TableDeleteCallback callback) {\n        ListenableFuture<Void> deleteFuture = delete(element, parameters);\n\n        Futures.addCallback(deleteFuture, new FutureCallback<Void>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted((Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(Void v) {\n                callback.onCompleted(null, null);\n            }\n        });\n    }\n\n    /**\n     * Undelete an element from a Mobile Service Table\n     *\n     * @param element The JsonObject to update\n     */\n    public ListenableFuture<JsonObject> undelete(final JsonObject element) {\n        return this.undelete(element, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Undelete an element from a Mobile Service Table\n     *\n     * @param element  The JsonObject to update\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link update(final com.google.gson.JsonObject element)} instead\n     */\n    public void undelete(final JsonObject element, final TableJsonOperationCallback callback) {\n        this.undelete(element, null, callback);\n    }\n\n    /**\n     * Undelete an element from a Mobile Service Table\n     *\n     * @param element    The JsonObject to undelete\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     */\n    public ListenableFuture<JsonObject> undelete(final JsonObject element, List<Pair<String, String>> parameters) {\n        final SettableFuture<JsonObject> future = SettableFuture.create();\n\n        Object id = null;\n        String version = null;\n\n        try {\n            id = validateId(element);\n        } catch (Exception e) {\n            future.setException(e);\n            return future;\n        }\n\n        if (!isNumericType(id)) {\n            version = getVersionSystemProperty(element);\n        }\n\n        EnumSet<MobileServiceFeatures> features = mFeatures.clone();\n        if (parameters != null && parameters.size() > 0) {\n            features.add(MobileServiceFeatures.AdditionalQueryParameters);\n        }\n\n        parameters = addSystemProperties(mSystemProperties, parameters);\n        List<Pair<String, String>> requestHeaders = null;\n        if (version != null) {\n            requestHeaders = new ArrayList<Pair<String, String>>();\n            requestHeaders.add(new Pair<String, String>(\"If-Match\", getEtagFromValue(version)));\n            features.add(MobileServiceFeatures.OpportunisticConcurrency);\n        }\n\n        ListenableFuture<Pair<JsonObject, ServiceFilterResponse>> internalFuture = this.executeTableOperation(TABLES_URL + mTableName + \"/\" + id.toString(), null, \"POST\", requestHeaders, parameters, features);\n\n        Futures.addCallback(internalFuture, new FutureCallback<Pair<JsonObject, ServiceFilterResponse>>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(exc);\n            }\n\n            @Override\n            public void onSuccess(Pair<JsonObject, ServiceFilterResponse> result) {\n                JsonObject patchedJson = patchOriginalEntityWithResponseEntity(element, result.first);\n\n                updateVersionFromETag(result.second, patchedJson);\n\n                future.set(patchedJson);\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Undeete an element from a Mobile Service Table\n     *\n     * @param element    The JsonObject to undelete\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke when the operation is completed\n     * @deprecated use {@link update(final com.google.gson.JsonObject element, java.util.List< android.util.Pair<String,\n     * String>> parameters)} instead\n     */\n    public void undelete(final JsonObject element, List<Pair<String, String>> parameters, final TableJsonOperationCallback callback) {\n        ListenableFuture<JsonObject> undeleteFuture = undelete(element, parameters);\n\n        Futures.addCallback(undeleteFuture, new FutureCallback<JsonObject>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(JsonObject result) {\n                callback.onCompleted(result, null, null);\n            }\n        });\n    }\n\n    /**\n     * Executes the query against the table\n     *\n     * @param request        Request to execute\n     * @param content        The content of the request body\n     * @param httpMethod     The method of the HTTP request\n     * @param requestHeaders Additional request headers used in the HTTP request\n     * @param parameters     A list of user-defined parameters and values to include in the\n     *                       request URI query string\n     * @param features       The features used in the request\n     */\n    private ListenableFuture<Pair<JsonObject, ServiceFilterResponse>> executeTableOperation(\n            String path, String content, String httpMethod, List<Pair<String, String>> requestHeaders, List<Pair<String, String>> parameters, EnumSet<MobileServiceFeatures> features) {\n        final SettableFuture<Pair<JsonObject, ServiceFilterResponse>> future = SettableFuture.create();\n\n        MobileServiceHttpClient httpClient = new MobileServiceHttpClient(mClient);\n        if (requestHeaders == null) {\n            requestHeaders = new ArrayList<Pair<String, String>>();\n        }\n\n        if (content != null) {\n            requestHeaders.add(new Pair<String, String>(HTTP.CONTENT_TYPE, MobileServiceConnection.JSON_CONTENTTYPE));\n        }\n\n        ListenableFuture<ServiceFilterResponse> internalFuture = httpClient.request(path, content, httpMethod, requestHeaders, parameters, features);\n\n        Futures.addCallback(internalFuture, new FutureCallback<ServiceFilterResponse>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(transformHttpException(exc));\n            }\n\n            @Override\n            public void onSuccess(ServiceFilterResponse result) {\n                String content = null;\n                content = result.getContent();\n\n                if (content == null) {\n                    future.set(null);\n                } else {\n                    JsonObject newEntityJson = new JsonParser().parse(content).getAsJsonObject();\n                    future.set(Pair.create(newEntityJson, result));\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Retrieves a set of rows from using the specified URL\n     *\n     * @param query    The URL used to retrieve the rows\n     * @param features The features used in this request\n     */\n    private ListenableFuture<Pair<JsonElement, ServiceFilterResponse>> executeGetRecords(final String url, EnumSet<MobileServiceFeatures> features) {\n        final SettableFuture<Pair<JsonElement, ServiceFilterResponse>> future = SettableFuture.create();\n\n        ServiceFilterRequest request = new ServiceFilterRequestImpl(new HttpGet(url), mClient.getAndroidHttpClientFactory());\n        String featuresHeader = MobileServiceFeatures.featuresToString(features);\n        if (featuresHeader != null) {\n            request.addHeader(MobileServiceHttpClient.X_ZUMO_FEATURES, featuresHeader);\n        }\n\n        MobileServiceConnection conn = mClient.createConnection();\n        // Create AsyncTask to execute the request and parse the results\n        new RequestAsyncTask(request, conn) {\n            @Override\n            protected void onPostExecute(ServiceFilterResponse response) {\n                if (mTaskException == null && response != null) {\n                    JsonElement results = null;\n\n                    try {\n                        // Parse the results using the given Entity class\n                        String content = response.getContent();\n                        JsonElement json = new JsonParser().parse(content);\n\n                        results = json;\n\n                        future.set(Pair.create(results, response));\n                    } catch (Exception e) {\n                        future.setException(new MobileServiceException(\"Error while retrieving data from response.\", e, response));\n                    }\n                } else {\n                    future.setException(mTaskException);\n                }\n            }\n        }.executeTask();\n\n        return future;\n    }\n\n    private String getHeaderValue(Header[] headers, String headerName){\n\n        if (headers == null) {\n            return null;\n        }\n\n        for(Header header : headers){\n\n            if (header.getName().equals(headerName)) {\n                return header.getValue();\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Validates the Id property from a JsonObject on an Insert Action\n     *\n     * @param json The JsonObject to modify\n     */\n    private Object validateIdOnInsert(final JsonObject json) {\n        // Remove id property if exists\n        String[] idPropertyNames = new String[]{\"id\", \"Id\", \"iD\", \"ID\"};\n\n        for (int i = 0; i < 4; i++) {\n            String idProperty = idPropertyNames[i];\n\n            if (json.has(idProperty)) {\n                JsonElement idElement = json.get(idProperty);\n\n                if (isStringType(idElement)) {\n                    String id = getStringValue(idElement);\n\n                    if (!isValidStringId(id)) {\n                        throw new IllegalArgumentException(\"The entity to insert has an invalid string value on \" + idProperty + \" property.\");\n                    }\n\n                    return id;\n                } else if (isNumericType(idElement)) {\n                    long id = getNumericValue(idElement);\n\n                    if (!isDefaultNumericId(id)) {\n                        throw new IllegalArgumentException(\"The entity to insert should not have a numeric \" + idProperty + \" property defined.\");\n                    }\n\n                    json.remove(idProperty);\n\n                    return id;\n\n                } else if (idElement.isJsonNull()) {\n                    json.remove(idProperty);\n\n                    return null;\n\n                } else {\n                    throw new IllegalArgumentException(\"The entity to insert should not have an \" + idProperty + \" defined with an invalid value\");\n                }\n            }\n        }\n\n        return null;\n    }\n\n}\n\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedException.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServicePreconditionFailedException.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\n\npublic class MobileServicePreconditionFailedException extends MobileServiceException {\n\n    /**\n     * UID used for serialization\n     */\n    private static final long serialVersionUID = 5188346485829981214L;\n\n    private Object mItem;\n\n    /**\n     * Initializes a new instance of the\n     * MobileServicePreconditionFailedException class.\n     *\n     * @param innerException The inner exception.\n     * @param item           The current instance from the server that the precondition\n     *                       failed for.\n     */\n    public MobileServicePreconditionFailedException(MobileServiceException msException, Object item) {\n        super(msException.getMessage(), msException.getCause(), msException.getResponse());\n        this.mItem = item;\n    }\n\n    public Object getItem() {\n        return mItem;\n    }\n\n    public void setItem(Object item) {\n        this.mItem = item;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/MobileServicePreconditionFailedExceptionJson.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServicePreconditionFailedExceptionJson.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\n\npublic class MobileServicePreconditionFailedExceptionJson extends MobileServiceExceptionBase {\n\n    /**\n     * UID used for serialization\n     */\n    private static final long serialVersionUID = 4489352410883725274L;\n\n    /**\n     * Initializes a new instance of the\n     * MobileServicePreconditionFailedExceptionJson class.\n     *\n     * @param throwable The inner exception.\n     * @param value     The current instance from the server that the precondition\n     *                  failed for.\n     */\n    public MobileServicePreconditionFailedExceptionJson(MobileServiceException msException, JsonObject value) {\n        super(msException, value);\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemColumns.java",
    "content": "package com.microsoft.windowsazure.mobileservices.table;\n\n/**\n * Name of system columns on a Mobile Service table.\n * Created by marianosanchez on 10/27/14.\n */\npublic class MobileServiceSystemColumns {\n    /*\n    * The id column on a Mobile Service table.\n    */\n    public static final String Id = \"id\";\n\n    /*\n    * The version column on a Mobile Service table.\n    */\n    public static final String Version = \"__version\";\n\n    /*\n    * The createdAt column on a Mobile Service table.\n    */\n    public static final String CreatedAt = \"__createdAt\";\n\n    /*\n    * The updatedAt column on a Mobile Service table.\n    */\n    public static final String UpdatedAt = \"__updatedAt\";\n\n    /*\n    * The deleted colum on a Mobile Service table.\n    */\n    public static final String Deleted = \"__deleted\";\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/MobileServiceSystemProperty.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceSystemProperty.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\n/**\n * The available System Properties in Mobile Service\n */\npublic enum MobileServiceSystemProperty {\n    CreatedAt, UpdatedAt, Version, Deleted\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/MobileServiceTable.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceTable.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.FutureCallback;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.Gson;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceFeatures;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceList;\nimport com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\nimport com.microsoft.windowsazure.mobileservices.table.serialization.JsonEntityParser;\n\nimport java.lang.reflect.Field;\nimport java.util.EnumSet;\nimport java.util.List;\n\n/**\n * Represents a Mobile Service Table\n */\npublic final class MobileServiceTable<E> extends MobileServiceTableBase {\n\n    private MobileServiceJsonTable mInternalTable;\n\n    private Class<E> mClazz;\n\n    /**\n     * Constructor for MobileServiceTable\n     *\n     * @param name   The name of the represented table\n     * @param client The MobileServiceClient used to invoke table operations\n     * @param clazz  The class used for data serialization\n     */\n    public MobileServiceTable(String name, MobileServiceClient client, Class<E> clazz) {\n        super(name, client);\n        mFeatures.add(MobileServiceFeatures.TypedTable);\n\n        mInternalTable = new MobileServiceJsonTable(name, client);\n        mInternalTable.mFeatures = EnumSet.of(MobileServiceFeatures.TypedTable);\n        mClazz = clazz;\n\n        mSystemProperties = getSystemProperties(clazz);\n        mInternalTable.setSystemProperties(mSystemProperties);\n    }\n\n    public EnumSet<MobileServiceSystemProperty> getSystemProperties() {\n        return mInternalTable.getSystemProperties();\n    }\n\n    public void setSystemProperties(EnumSet<MobileServiceSystemProperty> systemProperties) {\n        this.mSystemProperties = systemProperties;\n        this.mInternalTable.setSystemProperties(systemProperties);\n    }\n\n    /**\n     * Executes a query to retrieve all the table rows\n     *\n     * @throws com.microsoft.windowsazure.mobileservices.MobileServiceException\n     */\n    public ListenableFuture<MobileServiceList<E>> execute() throws MobileServiceException {\n        final SettableFuture<MobileServiceList<E>> future = SettableFuture.create();\n        ListenableFuture<JsonElement> internalFuture = mInternalTable.execute();\n        Futures.addCallback(internalFuture, new FutureCallback<JsonElement>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(exc);\n            }\n\n            @Override\n            public void onSuccess(JsonElement result) {\n                try {\n                    if (result.isJsonObject()) {\n                        JsonObject jsonObject = result.getAsJsonObject();\n\n                        int count = jsonObject.get(\"count\").getAsInt();\n                        JsonElement elements = jsonObject.get(\"results\");\n\n                        List<E> list = parseResults(elements);\n                        future.set(new MobileServiceList<E>(list, count));\n                    } else {\n                        List<E> list = parseResults(result);\n                        future.set(new MobileServiceList<E>(list, -1));\n                    }\n                } catch (Exception e) {\n                    future.setException(e);\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Executes a query to retrieve all the table rows\n     *\n     * @param callback Callback to invoke when the operation is completed\n     * @throws com.microsoft.windowsazure.mobileservices.MobileServiceException\n     * @deprecated use {@link execute()} instead\n     */\n    public void execute(final TableQueryCallback<E> callback) throws MobileServiceException {\n\n        ListenableFuture<MobileServiceList<E>> executeFuture = execute();\n\n        Futures.addCallback(executeFuture, new FutureCallback<MobileServiceList<E>>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, 0, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, 0, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(MobileServiceList<E> result) {\n                callback.onCompleted(result, result.getTotalCount(), null, null);\n            }\n        });\n    }\n\n    /**\n     * Executes a query to retrieve all the table rows\n     *\n     * @param query The Query instance to execute\n     */\n    public ListenableFuture<MobileServiceList<E>> execute(Query query) {\n        final SettableFuture<MobileServiceList<E>> future = SettableFuture.create();\n        ListenableFuture<JsonElement> internalFuture = mInternalTable.execute(query);\n        Futures.addCallback(internalFuture, new FutureCallback<JsonElement>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(exc);\n            }\n\n            @Override\n            public void onSuccess(JsonElement result) {\n                processQueryResults(result, future);\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Executes a Next Link to retrieve all the table rows\n     *\n     * @param nextLink The next link with the page information\n     */\n    public ListenableFuture<MobileServiceList<E>> execute(String nextLink) {\n        final SettableFuture<MobileServiceList<E>> future = SettableFuture.create();\n        ListenableFuture<JsonElement> internalFuture = mInternalTable.execute(nextLink);\n        Futures.addCallback(internalFuture, new FutureCallback<JsonElement>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(exc);\n            }\n\n            @Override\n            public void onSuccess(JsonElement result) {\n                processQueryResults(result, future);\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Process the Results of the Query\n     *\n     * @param result The Json element with the information\n     * @param future The future with the callbacks\n     */\n    private void processQueryResults(JsonElement result, SettableFuture<MobileServiceList<E>> future) {\n        try {\n            if (result.isJsonObject()) {\n                JsonObject jsonObject = result.getAsJsonObject();\n\n                int count = 0;\n                String nextLink = null;\n\n                if (jsonObject.has(\"count\")) {\n                    count = jsonObject.get(\"count\").getAsInt();\n                }\n\n                if (jsonObject.has(\"nextLink\")) {\n                    nextLink = jsonObject.get(\"nextLink\").getAsString();\n                }\n\n                JsonElement elements = jsonObject.get(\"results\");\n\n                List<E> list = parseResults(elements);\n\n                MobileServiceList<E> futureResult;\n\n                if (nextLink != null){\n                    futureResult = new MobileServiceList<E>(list, count, nextLink);\n                } else {\n                    futureResult = new MobileServiceList<E>(list, count);\n                }\n\n                future.set(futureResult);\n            } else {\n                List<E> list = parseResults(result);\n                future.set(new MobileServiceList<E>(list, list.size()));\n            }\n        } catch (Exception e) {\n            future.setException(e);\n        }\n    }\n\n    /**\n     * Executes a query to retrieve all the table rows\n     *\n     * @param query    The MobileServiceQuery instance to execute\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link execute( com.microsoft.windowsazure.mobileservices.table.query.Query query)} instead\n     */\n    public void execute(Query query, final TableQueryCallback<E> callback) {\n        ListenableFuture<MobileServiceList<E>> executeFuture = execute(query);\n\n        Futures.addCallback(executeFuture, new FutureCallback<MobileServiceList<E>>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, 0, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, 0, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(MobileServiceList<E> result) {\n                callback.onCompleted(result, result.size(), null, null);\n            }\n        });\n    }\n\n    /**\n     * Starts a filter to query the table\n     *\n     * @return The ExecutableQuery<E> representing the filter\n     */\n    public ExecutableQuery<E> where() {\n        ExecutableQuery<E> query = new ExecutableQuery<E>();\n        query.setTable(this);\n        return query;\n    }\n\n    /**\n     * Starts a filter to query the table with an existing filter\n     *\n     * @param query The existing filter\n     * @return The ExecutableQuery<E> representing the filter\n     */\n    public ExecutableQuery<E> where(Query query) {\n        if (query == null) {\n            throw new IllegalArgumentException(\"Query must not be null\");\n        }\n\n        ExecutableQuery<E> baseQuery = new ExecutableQuery<E>(query);\n        baseQuery.setTable(this);\n\n        return baseQuery;\n    }\n\n    /**\n     * Adds a new user-defined parameter to the query\n     *\n     * @param parameter The parameter name\n     * @param value     The parameter value\n     * @return ExecutableQuery\n     */\n    public ExecutableQuery<E> parameter(String parameter, String value) {\n        return this.where().parameter(parameter, value);\n    }\n\n    /**\n     * Creates a query with the specified order\n     *\n     * @param field Field name\n     * @param order Sorting order\n     * @return ExecutableQuery\n     */\n    public ExecutableQuery<E> orderBy(String field, QueryOrder order) {\n        return this.where().orderBy(field, order);\n    }\n\n    /**\n     * Sets the number of records to return\n     *\n     * @param top Number of records to return\n     * @return ExecutableQuery\n     */\n    public ExecutableQuery<E> top(int top) {\n        return this.where().top(top);\n    }\n\n    /**\n     * Sets the number of records to skip over a given number of elements in a\n     * sequence and then return the remainder.\n     *\n     * @param skip\n     * @return ExecutableQuery\n     */\n    public ExecutableQuery<E> skip(int skip) {\n        return this.where().skip(skip);\n    }\n\n    /**\n     * Specifies the fields to retrieve\n     *\n     * @param fields Names of the fields to retrieve\n     * @return ExecutableQuery\n     */\n    public ExecutableQuery<E> select(String... fields) {\n        return this.where().select(fields);\n    }\n\n    /**\n     * Include a property with the number of records returned.\n     *\n     * @return ExecutableQuery\n     */\n    public ExecutableQuery<E> includeInlineCount() {\n        return this.where().includeInlineCount();\n    }\n\n    /**\n     * Include a the soft deleted items on  records returned.\n     *\n     * @return ExecutableQuery\n     */\n    public ExecutableQuery<E> includeDeleted() {\n        return this.where().includeDeleted();\n    }\n\n    /**\n     * Looks up a row in the table.\n     *\n     * @param id The id of the row\n     */\n    public ListenableFuture<E> lookUp(Object id) {\n        return lookUp(id, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Looks up a row in the table.\n     *\n     * @param id       The id of the row\n     * @param callback Callback to invoke after the operation is completed\n     * @deprecated use {@link lookUp(Object id)} instead\n     */\n    public void lookUp(Object id, final TableOperationCallback<E> callback) {\n        ListenableFuture<E> lookUpFuture = lookUp(id);\n\n        Futures.addCallback(lookUpFuture, new FutureCallback<E>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(E result) {\n                callback.onCompleted(result, null, null);\n            }\n        });\n    }\n\n    /**\n     * Looks up a row in the table.\n     *\n     * @param id         The id of the row\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     */\n    public ListenableFuture<E> lookUp(Object id, List<Pair<String, String>> parameters) {\n        final SettableFuture<E> future = SettableFuture.create();\n\n        ListenableFuture<JsonObject> internalFuture = mInternalTable.lookUp(id, parameters);\n        Futures.addCallback(internalFuture, new FutureCallback<JsonElement>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(transformToTypedException(exc));\n            }\n\n            @Override\n            public void onSuccess(JsonElement result) {\n                try {\n                    future.set(parseResults(result).get(0));\n                } catch (Exception e) {\n                    future.setException(e);\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Looks up a row in the table.\n     *\n     * @param id         The id of the row\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke after the operation is completed\n     * @deprecated use {@link lookUp(Object id, java.util.List< android.util.Pair<String, String>>\n     * parameters)} instead\n     */\n    public void lookUp(Object id, List<Pair<String, String>> parameters, final TableOperationCallback<E> callback) {\n        ListenableFuture<E> lookUpFuture = lookUp(id, parameters);\n\n        Futures.addCallback(lookUpFuture, new FutureCallback<E>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(E result) {\n                callback.onCompleted(result, null, null);\n            }\n        });\n    }\n\n    /**\n     * Inserts an entity into a Mobile Service Table\n     *\n     * @param element The entity to insert\n     */\n    public ListenableFuture<E> insert(final E element) {\n        return this.insert(element, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Inserts an entity into a Mobile Service Table\n     *\n     * @param element  The entity to insert\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link insert(final E element)} instead\n     */\n    public void insert(final E element, final TableOperationCallback<E> callback) {\n        this.insert(element, null, callback);\n    }\n\n    /**\n     * Inserts an entity into a Mobile Service Table\n     *\n     * @param element    The entity to insert\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke when the operation is completed\n     */\n    public ListenableFuture<E> insert(final E element, List<Pair<String, String>> parameters) {\n        final SettableFuture<E> future = SettableFuture.create();\n        JsonObject json = null;\n        try {\n            json = mClient.getGsonBuilder().create().toJsonTree(element).getAsJsonObject();\n        } catch (IllegalArgumentException e) {\n            future.setException(e);\n            return future;\n        }\n\n        Class<?> idClazz = getIdPropertyClass(element.getClass());\n\n        if (idClazz != null && !isIntegerClass(idClazz)) {\n            json = removeSystemProperties(json);\n        }\n\n        ListenableFuture<JsonObject> internalFuture = mInternalTable.insert(json, parameters);\n        Futures.addCallback(internalFuture, new FutureCallback<JsonElement>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(transformToTypedException(exc));\n            }\n\n            @Override\n            public void onSuccess(JsonElement result) {\n                E entity = null;\n                try {\n\n                    if (result != null) {\n                        entity = parseResults(result).get(0);\n                        if (entity != null && element != null) {\n                            copyFields(entity, element);\n                            entity = element;\n                        }\n                    }\n\n                    future.set(entity);\n                } catch (Exception e) {\n                    future.setException(e);\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Inserts an entity into a Mobile Service Table\n     *\n     * @param element    The entity to insert\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke when the operation is completed\n     * @deprecated use {@link insert(final E element, java.util.List< android.util.Pair<String, String>>\n     * parameters)} instead\n     */\n    public void insert(final E element, List<Pair<String, String>> parameters, final TableOperationCallback<E> callback) {\n\n        ListenableFuture<E> insertFuture = insert(element, parameters);\n\n        Futures.addCallback(insertFuture, new FutureCallback<E>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(E result) {\n                callback.onCompleted(result, null, null);\n            }\n        });\n    }\n\n    /**\n     * Updates an entity from a Mobile Service Table\n     *\n     * @param element The entity to update\n     */\n    public ListenableFuture<E> update(final E element) {\n        return this.update(element, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Updates an entity from a Mobile Service Table\n     *\n     * @param element  The entity to update\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link update(final E element)} instead\n     */\n    public void update(final E element, final TableOperationCallback<E> callback) {\n        this.update(element, null, callback);\n    }\n\n    /**\n     * Updates an entity from a Mobile Service Table\n     *\n     * @param element    The entity to update\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke when the operation is completed\n     */\n    public ListenableFuture<E> update(final E element, final List<Pair<String, String>> parameters) {\n        final SettableFuture<E> future = SettableFuture.create();\n\n        JsonObject json = null;\n\n        try {\n            json = mClient.getGsonBuilder().create().toJsonTree(element).getAsJsonObject();\n        } catch (IllegalArgumentException e) {\n            future.setException(e);\n            return future;\n        }\n\n        ListenableFuture<JsonObject> internalFuture = mInternalTable.update(json, parameters);\n        Futures.addCallback(internalFuture, new FutureCallback<JsonElement>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(transformToTypedException(exc));\n            }\n\n            @Override\n            public void onSuccess(JsonElement result) {\n                E entity = null;\n                try {\n                    entity = parseResults(result).get(0);\n                    if (entity != null && element != null) {\n                        copyFields(entity, element);\n                        entity = element;\n                    }\n                    future.set(entity);\n                } catch (Exception e) {\n                    future.setException(e);\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Updates an entity from a Mobile Service Table\n     *\n     * @param element    The entity to update\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke when the operation is completed\n     * @deprecated use {@link update(final E element, final java.util.List< android.util.Pair<String,\n     * String>> parameters)} instead\n     */\n    public void update(final E element, final List<Pair<String, String>> parameters, final TableOperationCallback<E> callback) {\n        ListenableFuture<E> updateFuture = update(element, parameters);\n\n        Futures.addCallback(updateFuture, new FutureCallback<E>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(E result) {\n                callback.onCompleted(result, null, null);\n            }\n        });\n    }\n\n\n    /**\n     * Undelete an entity from a Mobile Service Table\n     *\n     * @param element The entity to Undelete\n     */\n    public ListenableFuture<E> undelete(final E element) {\n        return this.undelete(element, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Undelete an entity from a Mobile Service Table\n     *\n     * @param element  The entity to update\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link undelete(final E element)} instead\n     */\n    public void undelete(final E element, final TableOperationCallback<E> callback) {\n        this.undelete(element, null, callback);\n    }\n\n    /**\n     * Undelete an entity from a Mobile Service Table\n     *\n     * @param element    The entity to Undelete\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     */\n    public ListenableFuture<E> undelete(final E element, final List<Pair<String, String>> parameters) {\n        final SettableFuture<E> future = SettableFuture.create();\n\n        JsonObject json = null;\n\n        try {\n            json = mClient.getGsonBuilder().create().toJsonTree(element).getAsJsonObject();\n        } catch (IllegalArgumentException e) {\n            future.setException(e);\n            return future;\n        }\n\n        ListenableFuture<JsonObject> internalFuture = mInternalTable.undelete(json, parameters);\n        Futures.addCallback(internalFuture, new FutureCallback<JsonElement>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(transformToTypedException(exc));\n            }\n\n            @Override\n            public void onSuccess(JsonElement result) {\n                E entity = null;\n                try {\n                    entity = parseResults(result).get(0);\n                    if (entity != null && element != null) {\n                        copyFields(entity, element);\n                        entity = element;\n                    }\n                    future.set(entity);\n                } catch (Exception e) {\n                    future.setException(e);\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Undelete an entity from a Mobile Service Table\n     *\n     * @param element    The entity to Undelete\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke when the operation is completed\n     * @deprecated use {@link undelete(final E element, final java.util.List< android.util.Pair<String,\n     * String>> parameters)} instead\n     */\n    public void undelete(final E element, final List<Pair<String, String>> parameters, final TableOperationCallback<E> callback) {\n        ListenableFuture<E> undeleteFuture = undelete(element, parameters);\n\n        Futures.addCallback(undeleteFuture, new FutureCallback<E>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted(null, (Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(null, new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(E result) {\n                callback.onCompleted(result, null, null);\n            }\n        });\n    }\n\n    /**\n     * Delete an element from a Mobile Service Table\n     *\n     * @param element The JsonObject to delete\n     */\n    public ListenableFuture<Void> delete(E element) {\n        return this.delete(element, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Delete an element from a Mobile Service Table\n     *\n     * @param element  The JsonObject to delete\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link update(final JsonObject element)} instead\n     */\n    public void delete(E element, final TableDeleteCallback callback) {\n        this.delete(element, null, callback);\n    }\n\n    /**\n     * Delete an entity from a Mobile Service Table\n     *\n     * @param element    The entity to Undelete\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     */\n    public ListenableFuture<Void> delete(E element, List<Pair<String, String>> parameters) {\n\n        validateId(element);\n\n        final SettableFuture<Void> future = SettableFuture.create();\n\n        JsonObject json = null;\n\n        try {\n            json = mClient.getGsonBuilder().create().toJsonTree(element).getAsJsonObject();\n        } catch (IllegalArgumentException e) {\n            future.setException(e);\n            return future;\n        }\n\n        ListenableFuture<Void> internalFuture = mInternalTable.delete(json, parameters);\n        Futures.addCallback(internalFuture, new FutureCallback<Void>() {\n            @Override\n            public void onFailure(Throwable exc) {\n                future.setException(transformToTypedException(exc));\n            }\n\n            @Override\n            public void onSuccess(Void v) {\n                future.set(null);\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Deletes an entity from a Mobile Service Table using a given id\n     *\n     * @param id         The id of the entity to delete\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke when the operation is completed\n     * @deprecated use {@link delete(Object elementOrId, java.util.List< android.util.Pair<String,\n     * String>> parameters)} instead\n     */\n    public void delete(final E element, List<Pair<String, String>> parameters, final TableDeleteCallback callback) {\n        ListenableFuture<Void> deleteFuture = delete(element, parameters);\n\n        Futures.addCallback(deleteFuture, new FutureCallback<Void>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted((Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(Void v) {\n                callback.onCompleted(null, null);\n            }\n        });\n    }\n\n    /**\n     * Parses the JSON object to a typed list\n     *\n     * @param results JSON results\n     * @return List of entities\n     */\n    private List<E> parseResults(JsonElement results) {\n        Gson gson = mClient.getGsonBuilder().create();\n        return JsonEntityParser.parseResults(results, gson, mClazz);\n    }\n\n    /**\n     * Copy object field values from source to target object\n     *\n     * @param source The object to copy the values from\n     * @param target The destination object\n     * @throws IllegalAccessException\n     * @throws IllegalArgumentException\n     */\n    private void copyFields(Object source, Object target) throws IllegalArgumentException, IllegalAccessException {\n        if (source != null && target != null) {\n            for (Field field : source.getClass().getDeclaredFields()) {\n                field.setAccessible(true);\n                field.set(target, field.get(source));\n            }\n        }\n    }\n\n    private Throwable transformToTypedException(Throwable exc) {\n\n        if (exc instanceof MobileServicePreconditionFailedExceptionJson) {\n            MobileServicePreconditionFailedExceptionJson ex = (MobileServicePreconditionFailedExceptionJson) exc;\n\n            E entity = parseResultsForTypedException(ex);\n\n            return new MobileServicePreconditionFailedException(ex, entity);\n\n        } else if (exc instanceof MobileServiceConflictExceptionJson) {\n            MobileServiceConflictExceptionJson ex = (MobileServiceConflictExceptionJson) exc;\n\n            E entity = parseResultsForTypedException(ex);\n\n            return new MobileServiceConflictException(ex, entity);\n        }\n\n        return exc;\n    }\n\n    private E parseResultsForTypedException(MobileServiceExceptionBase ex) {\n        E entity = null;\n\n        try {\n            entity = parseResults(ex.getValue()).get(0);\n        } catch (Exception e) {\n        }\n\n        return entity;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/MobileServiceTableBase.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceTableBase.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport android.net.Uri;\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.FutureCallback;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonNull;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.google.gson.JsonPrimitive;\nimport com.google.gson.JsonSyntaxException;\nimport com.google.gson.annotations.SerializedName;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceFeatures;\nimport com.microsoft.windowsazure.mobileservices.http.MobileServiceHttpClient;\nimport com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequestImpl;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\nimport org.apache.http.client.methods.HttpDelete;\n\nimport java.lang.reflect.Field;\nimport java.util.ArrayList;\nimport java.util.EnumSet;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Map.Entry;\nimport java.util.TreeMap;\n\nabstract class MobileServiceTableBase implements MobileServiceTableSystemPropertiesProvider {\n\n    /**\n     * Tables URI part\n     */\n    public static final String TABLES_URL = \"tables/\";\n\n    /**\n     * The string prefix used to indicate system properties\n     */\n    protected static final String SystemPropertyPrefix = \"__\";\n\n    /**\n     * The name of the _system query string parameter\n     */\n    protected static final String SystemPropertiesQueryParameterName = \"__systemproperties\";\n\n    /**\n     * The system property names with the correct prefix.\n     */\n    protected static final TreeMap<String, MobileServiceSystemProperty> SystemPropertyNameToEnum;\n\n    static {\n        SystemPropertyNameToEnum = new TreeMap<String, MobileServiceSystemProperty>(String.CASE_INSENSITIVE_ORDER);\n        SystemPropertyNameToEnum.put(getSystemPropertyString(MobileServiceSystemProperty.CreatedAt), MobileServiceSystemProperty.CreatedAt);\n        SystemPropertyNameToEnum.put(getSystemPropertyString(MobileServiceSystemProperty.UpdatedAt), MobileServiceSystemProperty.UpdatedAt);\n        SystemPropertyNameToEnum.put(getSystemPropertyString(MobileServiceSystemProperty.Version), MobileServiceSystemProperty.Version);\n        SystemPropertyNameToEnum.put(getSystemPropertyString(MobileServiceSystemProperty.Deleted), MobileServiceSystemProperty.Deleted);\n    }\n\n    /**\n     * The version system property as a string with the prefix.\n     */\n    protected static final String VersionSystemPropertyName = getSystemPropertyString(MobileServiceSystemProperty.Version);\n\n    protected static final List<String> IdProperties;\n\n    static {\n        IdProperties = new ArrayList<String>();\n        IdProperties.add(\"id\");\n        IdProperties.add(\"iD\");\n        IdProperties.add(\"Id\");\n        IdProperties.add(\"ID\");\n    }\n\n    /**\n     * The MobileServiceClient used to invoke table operations\n     */\n    protected MobileServiceClient mClient;\n\n    /**\n     * The name of the represented table\n     */\n    protected String mTableName;\n\n    /**\n     * The Mobile Service system properties to be included with items\n     */\n    protected EnumSet<MobileServiceSystemProperty> mSystemProperties = EnumSet.noneOf(MobileServiceSystemProperty.class);\n\n    /**\n     * Features to be sent in telemetry headers for requests made by this table\n     */\n    protected EnumSet<MobileServiceFeatures> mFeatures = EnumSet.noneOf(MobileServiceFeatures.class);\n\n    /**\n     * Constructor\n     *\n     * @param name   The name of the represented table\n     * @param client The MobileServiceClient used to invoke table operations\n     */\n    public MobileServiceTableBase(String name, MobileServiceClient client) {\n        if (name == null || name.toString().trim().length() == 0) {\n            throw new IllegalArgumentException(\"Invalid Table Name\");\n        }\n\n        if (client == null) {\n            throw new IllegalArgumentException(\"Invalid Mobile Service Client\");\n        }\n\n        mClient = client;\n        mTableName = name;\n    }\n\n    /**\n     * Removes all system properties (name start with '__') from the instance if\n     * the instance is determined to have a string id and therefore be for table\n     * that supports system properties.\n     *\n     * @param instance The instance to remove the system properties from.\n     * @param version  Set to the value of the version system property before it is\n     *                 removed.\n     * @return The instance with the system properties removed.\n     */\n    protected static JsonObject removeSystemProperties(JsonObject instance) {\n        boolean haveCloned = false;\n\n        for (Entry<String, JsonElement> property : instance.entrySet()) {\n            if (SystemPropertyNameToEnum.containsKey(property.getKey())) {\n                // We don't want to alter the original JsonObject passed in by\n                // the caller\n                // so if we find a system property to remove, we have to clone\n                // first\n                if (!haveCloned) {\n                    instance = (JsonObject) new JsonParser().parse(instance.toString());\n                    haveCloned = true;\n                }\n\n                instance.remove(property.getKey());\n            }\n        }\n\n        return instance;\n    }\n\n    /**\n     * Gets the version system property.\n     *\n     * @param instance The instance to remove the system properties from.\n     * @return The value of the version system property or null if none present.\n     */\n    protected static String getVersionSystemProperty(JsonObject instance) {\n        String version = null;\n\n        for (Entry<String, JsonElement> property : instance.entrySet()) {\n            if (property.getKey().equalsIgnoreCase(VersionSystemPropertyName) && !property.getValue().isJsonNull()) {\n                version = property.getValue().getAsString();\n            }\n        }\n\n        return version;\n    }\n\n    /**\n     * Gets a valid etag from a string value. Etags are surrounded by double\n     * quotes and any internal quotes must be escaped with a '\\'.\n     *\n     * @param value The value to create the etag from.\n     * @return The etag.\n     */\n    protected static String getEtagFromValue(String value) {\n        // If the value has double quotes, they will need to be escaped.\n        for (int i = 0; i < value.length(); i++) {\n            if (value.charAt(i) == '\"') {\n                if (i == 0) {\n                    value = String.format(\"%s%s\", \"\\\\\", value);\n                } else if (value.charAt(i - 1) != '\\\\') {\n                    value = String.format(\"%s%s%s\", value.substring(0, i), \"\\\\\", value.substring(i));\n                }\n            }\n        }\n\n        // All etags are quoted;\n        return String.format(\"\\\"%s\\\"\", value);\n    }\n\n    /**\n     * Gets a value from an etag. Etags are surrounded by double quotes and any\n     * internal quotes must be escaped with a '\\'.\n     *\n     * @param etag The etag to get the value from.\n     * @return The value.\n     */\n    protected static String getValueFromEtag(String etag) {\n        int length = etag.length();\n\n        if (length > 1 && etag.charAt(0) == '\\\"' && etag.charAt(length - 1) == '\\\"') {\n            etag = etag.substring(1, length - 1);\n        }\n\n        return etag.replace(\"\\\\\\\"\", \"\\\"\");\n    }\n\n    /**\n     * Gets the system properties header value from the\n     * MobileServiceSystemProperties.\n     *\n     * @param properties The system properties to set in the system properties header.\n     * @return The system properties header value. Returns null if properties is\n     * null or empty.\n     */\n    private static String getSystemPropertiesString(EnumSet<MobileServiceSystemProperty> properties) {\n        if (properties == null || properties.isEmpty()) {\n            return null;\n        }\n\n        if (properties.containsAll(EnumSet.allOf(MobileServiceSystemProperty.class))) {\n            return \"*\";\n        }\n\n        StringBuilder sb = new StringBuilder();\n\n        int i = 0;\n\n        for (MobileServiceSystemProperty systemProperty : properties) {\n            sb.append(getSystemPropertyString(systemProperty));\n\n            i++;\n\n            if (i < properties.size()) {\n                sb.append(\",\");\n            }\n        }\n\n        return sb.toString();\n    }\n\n    /**\n     * Gets the system property header value from the\n     * MobileServiceSystemProperty.\n     *\n     * @param systemProperty The system property to set in the system properties header.\n     * @return The system property header value.\n     */\n    private static String getSystemPropertyString(MobileServiceSystemProperty systemProperty) {\n        String property = systemProperty.toString().trim();\n        char firstLetterAsLower = property.toLowerCase(Locale.getDefault()).charAt(0);\n        return SystemPropertyPrefix + firstLetterAsLower + property.substring(1);\n    }\n\n    /**\n     * Returns the system properties defined or annotated in the entity class\n     *\n     * @param clazz Target entity class\n     * @return List of entities\n     */\n    protected static <F> EnumSet<MobileServiceSystemProperty> getSystemProperties(Class<F> clazz) {\n        EnumSet<MobileServiceSystemProperty> result = EnumSet.noneOf(MobileServiceSystemProperty.class);\n\n        Class<?> idClazz = getIdPropertyClass(clazz);\n\n        if (idClazz != null && !isIntegerClass(idClazz)) {\n            // Search for system properties annotations, regardless case\n            for (Field field : clazz.getDeclaredFields()) {\n                SerializedName serializedName = field.getAnnotation(SerializedName.class);\n\n                if (serializedName != null) {\n                    if (SystemPropertyNameToEnum.containsKey(serializedName.value())) {\n                        result.add(SystemPropertyNameToEnum.get(serializedName.value()));\n                    }\n                } else {\n                    if (SystemPropertyNameToEnum.containsKey(field.getName())) {\n                        result.add(SystemPropertyNameToEnum.get(field.getName()));\n                    }\n                }\n            }\n        }\n\n        // Otherwise, return empty\n        return result;\n    }\n\n    /**\n     * Returns the id property class defined or annotated in the entity class\n     *\n     * @param clazz Target entity class\n     * @return Property class\n     */\n    protected static <F> Class<?> getIdPropertyClass(Class<F> clazz) {\n        // Search for id properties annotations, regardless case\n        for (Field field : clazz.getDeclaredFields()) {\n            SerializedName serializedName = field.getAnnotation(SerializedName.class);\n\n            if (serializedName != null) {\n                if (IdProperties.contains(serializedName.value())) {\n                    return field.getType();\n                }\n            } else {\n                if (IdProperties.contains(field.getName())) {\n                    return field.getType();\n                }\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Returns the id property class defined or annotated in the entity class\n     *\n     * @param clazz Target entity class\n     * @return Property class\n     */\n    protected static <F> boolean isIntegerClass(Class<F> clazz) {\n        return clazz.equals(Integer.class) || clazz.equals(Long.class) || clazz.equals(int.class) || clazz.equals(long.class);\n    }\n\n    /**\n     * Transforms a 412 and 409 response to respective exception type.\n     *\n     * @param exc the Throwable from the request\n     */\n    protected static Throwable transformHttpException(Throwable exc) {\n\n        if (exc instanceof MobileServiceException) {\n            MobileServiceException msExcep = (MobileServiceException) exc;\n\n            if (msExcep.getResponse() != null &&\n                    msExcep.getResponse().getStatus() != null &&\n                    (msExcep.getResponse().getStatus().getStatusCode() == 412 ||\n                            msExcep.getResponse().getStatus().getStatusCode() == 409)) {\n\n                if (msExcep.getResponse().getStatus().getStatusCode() == 412) {\n                    String content = msExcep.getResponse().getContent();\n\n                    JsonObject serverEntity = null;\n\n                    if (content != null) {\n                        try {\n                            serverEntity = new JsonParser().parse(content).getAsJsonObject();\n                        }\n                        catch(JsonSyntaxException ex) {}\n                    }\n\n                    return new MobileServicePreconditionFailedExceptionJson(msExcep, serverEntity);\n                }\n\n                if (msExcep.getResponse().getStatus().getStatusCode() == 409) {\n                    return new MobileServiceConflictExceptionJson(msExcep, null);\n                }\n            }\n        }\n\n        return exc;\n    }\n\n    /**\n     * Adds a feature which will be sent in telemetry headers for all requests\n     * made by this table\n     *\n     * @param feature The feature that will be sent in requests by this table\n     */\n    public void addFeature(MobileServiceFeatures feature) {\n        mFeatures.add(feature);\n    }\n\n    /**\n     * Returns the name of the represented table\n     */\n    public String getTableName() {\n        return mTableName;\n    }\n\n    /**\n     * Returns the set of enabled System Properties\n     */\n    public EnumSet<MobileServiceSystemProperty> getSystemProperties() {\n        return mSystemProperties;\n    }\n\n    /**\n     * Sets the set of enabled System Properties\n     */\n    public void setSystemProperties(EnumSet<MobileServiceSystemProperty> systemProperties) {\n        this.mSystemProperties = systemProperties;\n    }\n\n    /**\n     * Returns the client used for table operations\n     */\n    protected MobileServiceClient getClient() {\n        return mClient;\n    }\n\n    /**\n     * Deletes an entity from a Mobile Service Table\n     *\n     * @param id The entity id to delete\n     */\n    public ListenableFuture<Void> delete(Integer id) {\n        return this.delete(id, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Deletes an entity from a Mobile Service Table\n     *\n     * @param id  The entity id to delete\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link delete(Object elementOrId)} instead\n     */\n    public void delete(Integer id, TableDeleteCallback callback) {\n        this.delete(id.toString(), null, callback);\n    }\n\n    /**\n     * Deletes an entity from a Mobile Service Table using a given id\n     *\n     * @param id         The id of the entity to delete\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     */\n    public ListenableFuture<Void> delete(Integer id, List<Pair<String, String>> parameters) {\n        return delete(id.toString(), parameters);\n    }\n\n    /**\n     * Deletes an entity from a Mobile Service Table\n     *\n     * @param id The entity id to delete\n     */\n    public ListenableFuture<Void> delete(Long id) {\n        return this.delete(id, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Deletes an entity from a Mobile Service Table\n     *\n     * @param id  The entity id to delete\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link delete(Object elementOrId)} instead\n     */\n    public void delete(Long id, TableDeleteCallback callback) {\n        this.delete(id.toString(), null, callback);\n    }\n\n    /**\n     * Deletes an entity from a Mobile Service Table using a given id\n     *\n     * @param id         The id of the entity to delete\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     */\n    public ListenableFuture<Void> delete(Long id, List<Pair<String, String>> parameters) {\n        return delete(id.toString(), parameters);\n    }\n\n    /**\n     * Deletes an entity from a Mobile Service Table\n     *\n     * @param id The entity id to delete\n     */\n    public ListenableFuture<Void> delete(String id) {\n        return this.delete(id, (List<Pair<String, String>>) null);\n    }\n\n    /**\n     * Deletes an entity from a Mobile Service Table\n     *\n     * @param id  The entity id to delete\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link delete(Object elementOrId)} instead\n     */\n    public void delete(String id, TableDeleteCallback callback) {\n        this.delete(id, null, callback);\n    }\n\n    /**\n     * Deletes an entity from a Mobile Service Table using a given id\n     *\n     * @param id         The id of the entity to delete\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     */\n    public ListenableFuture<Void> delete(String id, List<Pair<String, String>> parameters) {\n\n        validateId(id);\n\n        // Create delete request\n        ServiceFilterRequest delete;\n\n        Uri.Builder uriBuilder = Uri.parse(mClient.getAppUrl().toString()).buildUpon();\n        uriBuilder.path(TABLES_URL);\n        uriBuilder.appendPath(mTableName);\n        uriBuilder.appendPath(id);\n\n        EnumSet<MobileServiceFeatures> features = mFeatures.clone();\n        if (parameters != null && parameters.size() > 0) {\n            features.add(MobileServiceFeatures.AdditionalQueryParameters);\n        }\n\n        parameters = addSystemProperties(mSystemProperties, parameters);\n\n        if (parameters != null && parameters.size() > 0) {\n            for (Pair<String, String> parameter : parameters) {\n                uriBuilder.appendQueryParameter(parameter.first, parameter.second);\n            }\n        }\n\n        final SettableFuture<Void> future = SettableFuture.create();\n\n        delete = new ServiceFilterRequestImpl(new HttpDelete(uriBuilder.build().toString()), mClient.getAndroidHttpClientFactory());\n        if (!features.isEmpty()) {\n            delete.addHeader(MobileServiceHttpClient.X_ZUMO_FEATURES, MobileServiceFeatures.featuresToString(features));\n        }\n\n        // Create AsyncTask to execute the request\n        new RequestAsyncTask(delete, mClient.createConnection()) {\n            @Override\n            protected void onPostExecute(ServiceFilterResponse result) {\n                if (mTaskException == null) {\n                    future.set(null);\n                } else {\n                    future.setException(transformHttpException(mTaskException));\n                }\n            }\n        }.executeTask();\n\n        return future;\n    }\n\n    /**\n     * Deletes an entity from a Mobile Service Table using a given id\n     *\n     * @param id         The id of the entity to delete\n     * @param parameters A list of user-defined parameters and values to include in the\n     *                   request URI query string\n     * @param callback   Callback to invoke when the operation is completed\n     * @deprecated use {@link delete(Object elementOrId, java.util.List< android.util.Pair<String,\n     * String>> parameters)} instead\n     */\n    public void delete(String id, List<Pair<String, String>> parameters, final TableDeleteCallback callback) {\n        ListenableFuture<Void> deleteFuture = delete(id, parameters);\n\n        Futures.addCallback(deleteFuture, new FutureCallback<Void>() {\n            @Override\n            public void onFailure(Throwable exception) {\n                if (exception instanceof Exception) {\n                    callback.onCompleted((Exception) exception, MobileServiceException.getServiceResponse(exception));\n                } else {\n                    callback.onCompleted(new Exception(exception), MobileServiceException.getServiceResponse(exception));\n                }\n            }\n\n            @Override\n            public void onSuccess(Void v) {\n                callback.onCompleted(null, null);\n            }\n        });\n    }\n\n    /**\n     * Patches the original entity with the one returned in the response after\n     * executing the operation\n     *\n     * @param originalEntity The original entity\n     * @param newEntity      The entity obtained after executing the operation\n     * @return\n     */\n    protected JsonObject patchOriginalEntityWithResponseEntity(JsonObject originalEntity, JsonObject newEntity) {\n        // Patch the object to return with the new values\n        JsonObject patchedEntityJson = (JsonObject) new JsonParser().parse(originalEntity.toString());\n\n        for (Entry<String, JsonElement> entry : newEntity.entrySet()) {\n            patchedEntityJson.add(entry.getKey(), entry.getValue());\n        }\n\n        return patchedEntityJson;\n    }\n\n    /**\n     * Gets the id property from a given element\n     *\n     * @param elementOrId The element to use\n     * @return The id of the element\n     */\n    protected Object getObjectId(Object elementOrId) {\n        if (elementOrId == null || (elementOrId instanceof JsonNull)) {\n            throw new IllegalArgumentException(\"Element cannot be null\");\n        } else if (isNumericType(elementOrId)) {\n            return getNumericValue(elementOrId);\n        } else if (isStringType(elementOrId)) {\n            return getStringValue(elementOrId);\n        } else {\n            JsonObject jsonObject;\n\n            if (elementOrId instanceof JsonObject) {\n                jsonObject = (JsonObject) elementOrId;\n            } else {\n                jsonObject = mClient.getGsonBuilder().create().toJsonTree(elementOrId).getAsJsonObject();\n            }\n\n            updateIdProperty(jsonObject);\n\n            JsonElement idProperty = jsonObject.get(\"id\");\n\n            if (idProperty == null || (idProperty instanceof JsonNull)) {\n                throw new IllegalArgumentException(\"Element must contain id property\");\n            }\n\n            if (isNumericType(idProperty)) {\n                return getNumericValue(idProperty);\n            } else if (isStringType(idProperty)) {\n                return getStringValue(idProperty);\n            } else {\n                throw new IllegalArgumentException(\"Invalid id type\");\n            }\n        }\n    }\n\n    /**\n     * Updates the JsonObject to have an id property\n     *\n     * @param json the element to evaluate\n     */\n    protected void updateIdProperty(final JsonObject json) throws IllegalArgumentException {\n        for (Entry<String, JsonElement> entry : json.entrySet()) {\n            String key = entry.getKey();\n\n            if (key.equalsIgnoreCase(\"id\")) {\n                JsonElement element = entry.getValue();\n\n                if (isValidTypeId(element)) {\n                    if (!key.equals(\"id\")) {\n                        // force the id name to 'id', no matter the casing\n                        json.remove(key);\n                        // Create a new id property using the given property\n                        // name\n\n                        JsonPrimitive value = entry.getValue().getAsJsonPrimitive();\n                        if (value.isNumber()) {\n                            json.addProperty(\"id\", value.getAsLong());\n                        } else {\n                            json.addProperty(\"id\", value.getAsString());\n                        }\n                    }\n\n                    return;\n                } else {\n                    throw new IllegalArgumentException(\"The id must be numeric or string\");\n                }\n            }\n        }\n    }\n\n    /**\n     * Validates if the id property is numeric or string.\n     *\n     * @param element\n     * @return\n     */\n    protected boolean isValidTypeId(JsonElement element) {\n        return isStringType(element) || isNumericType(element);\n    }\n\n    /**\n     * Validates the id value from an Object on Lookup/Update/Delete action\n     *\n     * @param elementOrId The Object to validate\n     */\n    protected void validateId(final Object elementOrId) {\n        if (elementOrId == null || (elementOrId instanceof JsonNull)) {\n            throw new IllegalArgumentException(\"Element or id cannot be null.\");\n        } else if (isStringType(elementOrId)) {\n            String id = getStringValue(elementOrId);\n\n            if (!isValidStringId(id) || isDefaultStringId(id)) {\n                throw new IllegalArgumentException(\"The string id is invalid.\");\n            }\n        } else if (isNumericType(elementOrId)) {\n            long id = getNumericValue(elementOrId);\n\n            if (!isValidNumericId(id) || isDefaultNumericId(id)) {\n                throw new IllegalArgumentException(\"The numeric id is invalid.\");\n            }\n        } else if (elementOrId instanceof JsonObject) {\n            validateId((JsonObject) elementOrId);\n        } else {\n            validateId(mClient.getGsonBuilder().create().toJsonTree(elementOrId).getAsJsonObject());\n        }\n    }\n\n    /**\n     * Validates the id property from a JsonObject on Lookup/Update/Delete\n     * action\n     *\n     * @param element The JsonObject to validate\n     */\n    protected Object validateId(final JsonObject element) {\n        if (element == null) {\n            throw new IllegalArgumentException(\"The entity cannot be null.\");\n        } else {\n            updateIdProperty(element);\n\n            if (element.has(\"id\")) {\n                JsonElement idElement = element.get(\"id\");\n\n                if (isStringType(idElement)) {\n                    String id = getStringValue(idElement);\n\n                    if (!isValidStringId(id) || isDefaultStringId(id)) {\n                        throw new IllegalArgumentException(\"The entity has an invalid string value on id property.\");\n                    }\n\n                    return id;\n                } else if (isNumericType(idElement)) {\n                    long id = getNumericValue(idElement);\n\n                    if (!isValidNumericId(id) || isDefaultNumericId(id)) {\n                        throw new IllegalArgumentException(\"The entity has an invalid numeric value on id property.\");\n                    }\n\n                    return id;\n                } else {\n                    throw new IllegalArgumentException(\"The entity must have a valid numeric or string id property.\");\n                }\n            } else {\n                throw new IllegalArgumentException(\"You must specify an id property with a valid numeric or string value.\");\n            }\n        }\n    }\n\n    /**\n     * Validates if the object represents a string value.\n     *\n     * @param o\n     * @return\n     */\n    protected boolean isStringType(Object o) {\n        boolean result = (o instanceof String);\n\n        if (o instanceof JsonElement) {\n            JsonElement json = (JsonElement) o;\n\n            if (json.isJsonPrimitive()) {\n                JsonPrimitive primitive = json.getAsJsonPrimitive();\n                result = primitive.isString();\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Returns the string value represented by the object.\n     *\n     * @param o\n     * @return\n     */\n    protected String getStringValue(Object o) {\n        String result;\n\n        if (o instanceof String) {\n            result = (String) o;\n        } else if (o instanceof JsonElement) {\n            JsonElement json = (JsonElement) o;\n\n            if (json.isJsonPrimitive()) {\n                JsonPrimitive primitive = json.getAsJsonPrimitive();\n\n                if (primitive.isString()) {\n                    result = primitive.getAsString();\n                } else {\n                    throw new IllegalArgumentException(\"Object does not represent a string value.\");\n                }\n            } else {\n                throw new IllegalArgumentException(\"Object does not represent a string value.\");\n            }\n        } else {\n            throw new IllegalArgumentException(\"Object does not represent a string value.\");\n        }\n\n        return result;\n    }\n\n    /**\n     * Validates if the string id is valid.\n     *\n     * @param id\n     * @return\n     */\n    protected boolean isValidStringId(String id) {\n        boolean result = isDefaultStringId(id);\n\n        if (!result && id != null) {\n            result = id.length() <= 255;\n            result &= !containsControlCharacter(id);\n            result &= !containsSpecialCharacter(id);\n            result &= !id.equals(\".\");\n            result &= !id.equals(\"..\");\n        }\n\n        return result;\n    }\n\n    /**\n     * Validates if the string id is a default value.\n     *\n     * @param id\n     * @return\n     */\n    protected boolean isDefaultStringId(String id) {\n        return (id == null) || (id.equals(\"\"));\n    }\n\n    /**\n     * Validates if a given string contains a control character.\n     *\n     * @param s\n     * @return\n     */\n    protected boolean containsControlCharacter(String s) {\n        boolean result = false;\n\n        final int length = s.length();\n\n        for (int offset = 0; offset < length; ) {\n            final int codepoint = s.codePointAt(offset);\n\n            if (Character.isISOControl(codepoint)) {\n                result = true;\n                break;\n            }\n\n            offset += Character.charCount(codepoint);\n        }\n\n        return result;\n    }\n\n    /**\n     * Validates if a given string contains any of the following special\n     * characters: \"(U+0022), +(U+002B), /(U+002F), ?(U+003F), \\(U+005C),\n     * `(U+0060)\n     *\n     * @param s\n     * @return\n     */\n    protected boolean containsSpecialCharacter(String s) {\n        boolean result = false;\n\n        final int length = s.length();\n\n        final int cpQuotationMark = 0x0022;\n        final int cpPlusSign = 0x002B;\n        final int cpSolidus = 0x002F;\n        final int cpQuestionMark = 0x003F;\n        final int cpReverseSolidus = 0x005C;\n        final int cpGraveAccent = 0x0060;\n\n        for (int offset = 0; offset < length; ) {\n            final int codepoint = s.codePointAt(offset);\n\n            if (codepoint == cpQuotationMark || codepoint == cpPlusSign || codepoint == cpSolidus || codepoint == cpQuestionMark\n                    || codepoint == cpReverseSolidus || codepoint == cpGraveAccent) {\n                result = true;\n                break;\n            }\n\n            offset += Character.charCount(codepoint);\n        }\n\n        return result;\n    }\n\n    /**\n     * Validates if the object represents a numeric value.\n     *\n     * @param o\n     * @return\n     */\n    protected boolean isNumericType(Object o) {\n        boolean result = (o instanceof Integer) || (o instanceof Long);\n\n        if (o instanceof JsonElement) {\n            JsonElement json = (JsonElement) o;\n\n            if (json.isJsonPrimitive()) {\n                JsonPrimitive primitive = json.getAsJsonPrimitive();\n                result = primitive.isNumber();\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Returns the numeric value represented by the object.\n     *\n     * @param o\n     * @return\n     */\n    protected long getNumericValue(Object o) {\n        long result;\n\n        if (o instanceof Integer) {\n            result = (Integer) o;\n        } else if (o instanceof Long) {\n            result = (Long) o;\n        } else if (o instanceof JsonElement) {\n            JsonElement json = (JsonElement) o;\n\n            if (json.isJsonPrimitive()) {\n                JsonPrimitive primitive = json.getAsJsonPrimitive();\n\n                if (primitive.isNumber()) {\n                    result = primitive.getAsLong();\n                } else {\n                    throw new IllegalArgumentException(\"Object does not represent a string value.\");\n                }\n            } else {\n                throw new IllegalArgumentException(\"Object does not represent a string value.\");\n            }\n        } else {\n            throw new IllegalArgumentException(\"Object does not represent a string value.\");\n        }\n\n        return result;\n    }\n\n    /**\n     * Validates if the numeric id is valid.\n     *\n     * @param id\n     * @return\n     */\n    protected boolean isValidNumericId(long id) {\n        return isDefaultNumericId(id) || id > 0;\n    }\n\n    /**\n     * Validates if the numeric id is a default value.\n     *\n     * @param id\n     * @return\n     */\n    protected boolean isDefaultNumericId(long id) {\n        return (id == 0);\n    }\n\n    /**\n     * Adds the tables requested system properties to the parameters collection.\n     *\n     * @param systemProperties The system properties to add.\n     * @param parameters       The parameters collection.\n     * @return The parameters collection with any requested system properties\n     * included.\n     */\n    public List<Pair<String, String>> addSystemProperties(EnumSet<MobileServiceSystemProperty> systemProperties, List<Pair<String, String>> parameters) {\n        boolean containsSystemProperties = false;\n\n        List<Pair<String, String>> result = new ArrayList<Pair<String, String>>(parameters != null ? parameters.size() : 0);\n\n        // Make sure we have a case-insensitive parameters list\n        if (parameters != null) {\n            for (Pair<String, String> parameter : parameters) {\n                result.add(parameter);\n                containsSystemProperties = containsSystemProperties || parameter.first.equalsIgnoreCase(SystemPropertiesQueryParameterName);\n            }\n        }\n\n        // If there is already a user parameter for the system properties, just\n        // use it\n        if (!containsSystemProperties) {\n            String systemPropertiesString = getSystemPropertiesString(systemProperties);\n\n            if (systemPropertiesString != null) {\n                result.add(new Pair<String, String>(SystemPropertiesQueryParameterName, systemPropertiesString));\n            }\n        }\n\n        return result;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/MobileServiceTableSystemPropertiesProvider.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceTableSystemPropertiesProvider.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport android.util.Pair;\n\nimport java.util.EnumSet;\nimport java.util.List;\n\n/**\n * Interface used to decouple the table implementation from the query writers.\n */\npublic interface MobileServiceTableSystemPropertiesProvider {\n    /**\n     * Returns the set of enabled System Properties\n     */\n    public EnumSet<MobileServiceSystemProperty> getSystemProperties();\n\n    /**\n     * Sets the set of enabled system properties\n     */\n    public void setSystemProperties(EnumSet<MobileServiceSystemProperty> systemProperties);\n\n    /**\n     * Adds the tables requested system properties to the parameters collection.\n     *\n     * @param systemProperties The system properties to add.\n     * @param parameters       The parameters collection.\n     * @return The parameters collection with any requested system properties\n     * included.\n     */\n    List<Pair<String, String>> addSystemProperties(EnumSet<MobileServiceSystemProperty> systemProperties, List<Pair<String, String>> existingProperties);\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/TableDeleteCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * TableDeleteCallback.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\n/**\n * Callback to invoke after executing a delete operation\n */\npublic interface TableDeleteCallback {\n    /**\n     * Method to call if the operation finishes successfully\n     *\n     * @param exception An exception representing the error, in case there was one\n     * @param response  Response object\n     */\n    public void onCompleted(Exception exception, ServiceFilterResponse response);\n\n    ;\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/TableJsonOperationCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * TableJsonOperationCallback.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport com.google.gson.JsonObject;\n\n/**\n * Callback used after a TableOperation is executed using JSON\n */\npublic interface TableJsonOperationCallback extends TableOperationCallback<JsonObject> {\n\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/TableJsonQueryCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * TableJsonQueryCallback.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport com.google.gson.JsonElement;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\n/**\n * Callback used after a query is executed using JSON\n */\npublic interface TableJsonQueryCallback {\n    /**\n     * Method to call if the operation finishes successfully\n     *\n     * @param result    JSON result\n     * @param exception An exception representing the error, in case there was one\n     * @param response  Response object\n     */\n    public void onCompleted(JsonElement result, Exception exception, ServiceFilterResponse response);\n\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/TableOperationCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * TableOperationCallback.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\n/**\n * Callback used after a TableOperation is executed\n *\n * @param <E> The table's entity\n */\npublic interface TableOperationCallback<E> {\n    /**\n     * Method to call if the operation finishes successfully\n     *\n     * @param entity    The obtained entity\n     * @param exception An exception representing the error, in case there was one\n     * @param response  Response object\n     */\n    public void onCompleted(E entity, Exception exception, ServiceFilterResponse response);\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/TableQueryCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * TableQueryCallback.java\n */\npackage com.microsoft.windowsazure.mobileservices.table;\n\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\nimport java.util.List;\n\n/**\n * Callback used after a query is executed\n */\npublic interface TableQueryCallback<E> {\n\n    /**\n     * Method to call if the operation finishes successfully\n     *\n     * @param result    List of entities\n     * @param count     Number of results\n     * @param exception An exception representing the error, in case there was one\n     * @param response  Response object\n     */\n    public void onCompleted(List<E> result, int count, Exception exception, ServiceFilterResponse response);\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/BinaryOperatorKind.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * BinaryOperatorKind.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Enumeration of binary operators.\n */\nenum BinaryOperatorKind {\n    /**\n     * The logical or operator.\n     */\n    Or,\n\n    /**\n     * The logical and operator.\n     */\n    And,\n\n    /**\n     * The equal to operator.\n     */\n    Eq,\n\n    /**\n     * The not equal to operator.\n     */\n    Ne,\n\n    /**\n     * The greater than operator.\n     */\n    Gt,\n\n    /**\n     * The greater than or equal to operator.\n     */\n    Ge,\n\n    /**\n     * The less than operator.\n     */\n    Lt,\n\n    /**\n     * The less than or equal to operator.\n     */\n    Le,\n\n    /**\n     * The add operator.\n     */\n    Add,\n\n    /**\n     * The subtract operator.\n     */\n    Sub,\n\n    /**\n     * The multiply operator.\n     */\n    Mul,\n\n    /**\n     * The divide operator.\n     */\n    Div,\n\n    /**\n     * The modulo operator.\n     */\n    Mod\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/BinaryOperatorNode.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * BinaryOperatorNode.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Class that represents a binary operator query node\n */\nclass BinaryOperatorNode implements QueryNode {\n    private BinaryOperatorKind mBinaryOperatorKind;\n    private QueryNode mLeftArgument;\n    private QueryNode mRightArgument;\n\n    /**\n     * Constructor for BinaryOperatorNode\n     *\n     * @param binaryOperatorKind The binary operator kind\n     */\n    BinaryOperatorNode(BinaryOperatorKind binaryOperatorKind) {\n        this.mBinaryOperatorKind = binaryOperatorKind;\n    }\n\n    @Override\n    public QueryNode deepClone() {\n        BinaryOperatorNode clone = new BinaryOperatorNode(this.mBinaryOperatorKind);\n\n        clone.mLeftArgument = this.mLeftArgument.deepClone();\n        clone.mRightArgument = this.mRightArgument.deepClone();\n\n        return clone;\n    }\n\n    @Override\n    public QueryNodeKind getKind() {\n        return QueryNodeKind.BinaryOperator;\n    }\n\n    @Override\n    public <T> T accept(QueryNodeVisitor<T> visitor) {\n        return visitor.visit(this);\n    }\n\n    /**\n     * Gets the kind of binary operator node.\n     */\n    BinaryOperatorKind getBinaryOperatorKind() {\n        return this.mBinaryOperatorKind;\n    }\n\n    /**\n     * Gets the left argument query node of the binary operator node.\n     */\n    QueryNode getLeftArgument() {\n        return this.mLeftArgument;\n    }\n\n    /**\n     * Sets the left argument query node of the binary operator node.\n     */\n    void setLeftArgument(QueryNode leftArgument) {\n        this.mLeftArgument = leftArgument;\n    }\n\n    /**\n     * Gets the right argument query node of the binary operator node.\n     */\n    QueryNode getRightArgument() {\n        return this.mRightArgument;\n    }\n\n    /**\n     * Sets the right argument query node of the binary operator node.\n     */\n    void setRightArgument(QueryNode rightArgument) {\n        this.mRightArgument = rightArgument;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/BinaryOperatorNodeMerger.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * BinaryOperatorNodeMerger.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Class that represents a binary operator node merger\n */\nclass BinaryOperatorNodeMerger implements QueryNodeVisitor<QueryNode> {\n    private BinaryOperatorNode mLeftNode;\n\n    /**\n     * Constructor for BinaryOperatorNodeMerger\n     *\n     * @param leftNode The left binary operator node\n     */\n    BinaryOperatorNodeMerger(BinaryOperatorNode leftNode) {\n        this.mLeftNode = leftNode;\n    }\n\n    @Override\n    public QueryNode visit(ConstantNode rightNode) {\n        return mergeLeft(rightNode);\n    }\n\n    @Override\n    public QueryNode visit(FieldNode rightNode) {\n        return mergeLeft(rightNode);\n    }\n\n    @Override\n    public QueryNode visit(UnaryOperatorNode rightNode) {\n        return mergeLeft(rightNode);\n    }\n\n    @Override\n    public QueryNode visit(BinaryOperatorNode rightNode) {\n        if (this.mLeftNode.getRightArgument() != null) {\n            if (rightNode.getLeftArgument() != null) {\n                throw QueryNodeMerger.getInvalidSequenceException();\n            }\n\n            rightNode.setLeftArgument(this.mLeftNode);\n\n            return rightNode;\n        } else {\n            this.mLeftNode.setRightArgument(rightNode);\n\n            return this.mLeftNode;\n        }\n    }\n\n    @Override\n    public QueryNode visit(FunctionCallNode rightNode) {\n        return mergeLeft(rightNode);\n    }\n\n    private QueryNode mergeLeft(QueryNode rightNode) {\n        if (this.mLeftNode.getRightArgument() != null) {\n            throw QueryNodeMerger.getInvalidSequenceException();\n        }\n\n        this.mLeftNode.setRightArgument(rightNode);\n\n        return this.mLeftNode;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/ConstantNode.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ConstantNode.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\nimport java.util.Date;\n\n/**\n * Class that represents a constant query node\n */\nclass ConstantNode implements QueryNode {\n    private Object mValue;\n\n    @Override\n    public QueryNode deepClone() {\n        ConstantNode clone = new ConstantNode();\n\n        if (this.mValue instanceof Date) {\n            clone.mValue = new Date(((Date) this.mValue).getTime());\n        } else {\n            clone.mValue = this.mValue;\n        }\n\n        return clone;\n    }\n\n    @Override\n    public QueryNodeKind getKind() {\n        return QueryNodeKind.Constant;\n    }\n\n    @Override\n    public <T> T accept(QueryNodeVisitor<T> visitor) {\n        return visitor.visit(this);\n    }\n\n    /**\n     * Gets the constant node value.\n     */\n    Object getValue() {\n        return this.mValue;\n    }\n\n    /**\n     * Sets the constant node value.\n     */\n    void setValue(Object value) {\n        this.mValue = value;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/ConstantNodeMerger.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ConstantNodeMerger.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Class that represents a constant node merger\n */\nclass ConstantNodeMerger implements QueryNodeVisitor<QueryNode> {\n    private ConstantNode mLeftNode;\n\n    /**\n     * Constructor for ConstantNodeMerger\n     *\n     * @param leftNode The left constant node\n     */\n    ConstantNodeMerger(ConstantNode leftNode) {\n        this.mLeftNode = leftNode;\n    }\n\n    @Override\n    public QueryNode visit(ConstantNode rightNode) {\n        throw QueryNodeMerger.getInvalidSequenceException();\n    }\n\n    @Override\n    public QueryNode visit(FieldNode rightNode) {\n        throw QueryNodeMerger.getInvalidSequenceException();\n    }\n\n    @Override\n    public QueryNode visit(UnaryOperatorNode rightNode) {\n        throw QueryNodeMerger.getInvalidSequenceException();\n    }\n\n    @Override\n    public QueryNode visit(BinaryOperatorNode rightNode) {\n        if (rightNode.getLeftArgument() != null) {\n            throw QueryNodeMerger.getInvalidSequenceException();\n        }\n\n        rightNode.setLeftArgument(this.mLeftNode);\n\n        return rightNode;\n    }\n\n    @Override\n    public QueryNode visit(FunctionCallNode rightNode) {\n        throw QueryNodeMerger.getInvalidSequenceException();\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/ExecutableJsonQuery.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ExecutableJsonQuery.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.gson.JsonElement;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback;\n\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * Class that represents a query to a specific MobileServiceJsonTable instance\n */\npublic final class ExecutableJsonQuery implements Query {\n\n    /**\n     * The internal base query\n     */\n    private Query mQuery;\n\n    /**\n     * The Table to query\n     */\n    private MobileServiceJsonTable mTable;\n\n    /**\n     * Creates an empty Query\n     */\n    public ExecutableJsonQuery() {\n        this.mQuery = new QueryBase();\n    }\n\n    /**\n     * Creates Query<E> with an existing query as its only internal value\n     *\n     * @param query The query step to add\n     */\n    public ExecutableJsonQuery(Query query) {\n        if (query.getQueryNode() != null) {\n            query = QueryOperations.query(query);\n        }\n\n        this.mQuery = query;\n    }\n\n    /**\n     * Returns the MobileServiceJsonTable to query\n     */\n    MobileServiceJsonTable getTable() {\n        return this.mTable;\n    }\n\n    /**\n     * Sets the MobileServiceJsonTable to query\n     *\n     * @param table The MobileServiceJsonTable to query\n     */\n    public void setTable(MobileServiceJsonTable table) {\n        this.mTable = table;\n    }\n\n    /**\n     * Executes the query\n     */\n    public ListenableFuture<JsonElement> execute() {\n        return this.mTable.execute(this);\n    }\n\n    /**\n     * Executes the query\n     *\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link execute()} instead\n     */\n    public void execute(final TableJsonQueryCallback callback) {\n        mTable.execute(this, callback);\n    }\n\n    @Override\n    public ExecutableJsonQuery deepClone() {\n        ExecutableJsonQuery clone = new ExecutableJsonQuery();\n\n        if (this.mQuery != null) {\n            clone.mQuery = this.mQuery.deepClone();\n        }\n\n        // No need to clone table\n        clone.mTable = this.mTable;\n\n        return clone;\n    }\n\n    @Override\n    public QueryNode getQueryNode() {\n        return this.mQuery.getQueryNode();\n    }\n\n    @Override\n    public void setQueryNode(QueryNode queryNode) {\n        this.mQuery.setQueryNode(queryNode);\n    }\n\n    @Override\n    public boolean hasInlineCount() {\n        return this.mQuery.hasInlineCount();\n    }\n\n    @Override\n    public boolean hasDeleted() {\n        return this.mQuery.hasDeleted();\n    }\n\n    @Override\n    public List<Pair<String, QueryOrder>> getOrderBy() {\n        return this.mQuery.getOrderBy();\n    }\n\n    @Override\n    public List<String> getProjection() {\n        return this.mQuery.getProjection();\n    }\n\n    @Override\n    public List<Pair<String, String>> getUserDefinedParameters() {\n        return this.mQuery.getUserDefinedParameters();\n    }\n\n    @Override\n    public int getTop() {\n        return this.mQuery.getTop();\n    }\n\n    @Override\n    public int getSkip() {\n        return this.mQuery.getSkip();\n    }\n\n    @Override\n    public String getTableName() {\n        return this.mQuery.getTableName();\n    }\n\n    @Override\n    public ExecutableJsonQuery tableName(String tableName) {\n        this.mQuery.tableName(tableName);\n        return this;\n    }\n\n    /**\n     * * Row Operations ***\n     */\n\n    @Override\n    public ExecutableJsonQuery parameter(String parameter, String value) {\n        this.mQuery.parameter(parameter, value);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery orderBy(String field, QueryOrder order) {\n        this.mQuery.orderBy(field, order);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery top(int top) {\n        this.mQuery.top(top);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery skip(int skip) {\n        this.mQuery.skip(skip);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery includeInlineCount() {\n        this.mQuery.includeInlineCount();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery removeInlineCount() {\n        this.mQuery.removeInlineCount();\n        return this;\n    }\n\n\n    @Override\n    public ExecutableJsonQuery includeDeleted() {\n        this.mQuery.includeDeleted();\n\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery removeDeleted() {\n        this.mQuery.removeDeleted();\n\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery removeProjection() {\n        this.mQuery.removeProjection();\n\n        return this;\n    }\n    \n    @Override\n    public ExecutableJsonQuery select(String... fields) {\n        this.mQuery.select(fields);\n        return this;\n    }\n\n    /**\n     * * Query Operations ***\n     */\n\n    @Override\n    public ExecutableJsonQuery field(String fieldName) {\n        this.mQuery.field(fieldName);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery val(Number number) {\n        this.mQuery.val(number);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery val(boolean val) {\n        this.mQuery.val(val);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery val(String s) {\n        this.mQuery.val(s);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery val(Date date) {\n        this.mQuery.val(date);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery val(byte[] byteArray) {\n        this.mQuery.val(byteArray);\n        return this;\n    }\n\n\n    /**\n     * *** Logical Operators *****\n     */\n\n    @Override\n    public ExecutableJsonQuery and() {\n        this.mQuery.and();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery and(Query otherQuery) {\n        this.mQuery.and(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery or() {\n        this.mQuery.or();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery or(Query otherQuery) {\n        this.mQuery.or(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery not() {\n        this.mQuery.not();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery not(Query otherQuery) {\n        this.mQuery.not(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery not(boolean booleanValue) {\n        this.mQuery.not(booleanValue);\n        return this;\n    }\n\n    /**\n     * *** Comparison Operators *****\n     */\n\n    @Override\n    public ExecutableJsonQuery ge() {\n        this.mQuery.ge();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery ge(String stringValue) {\n        this.mQuery.ge(stringValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery ge(Query otherQuery) {\n        this.mQuery.ge(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery ge(Number numberValue) {\n        this.mQuery.ge(numberValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery ge(Date dateValue) {\n        this.mQuery.ge(dateValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery le() {\n        this.mQuery.le();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery le(Query otherQuery) {\n        this.mQuery.le(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery le(Number numberValue) {\n        this.mQuery.le(numberValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery le(Date dateValue) {\n        this.mQuery.le(dateValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery gt() {\n        this.mQuery.gt();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery gt(Query otherQuery) {\n        this.mQuery.gt(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery gt(Number numberValue) {\n        this.mQuery.gt(numberValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery gt(Date dateValue) {\n        this.mQuery.gt(dateValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery gt(String stringValue) {\n        this.mQuery.gt(stringValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery lt() {\n        this.mQuery.lt();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery lt(Query otherQuery) {\n        this.mQuery.lt(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery lt(Number numberValue) {\n        this.mQuery.lt(numberValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery lt(Date dateValue) {\n        this.mQuery.lt(dateValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery eq() {\n        this.mQuery.eq();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery eq(Query otherQuery) {\n        this.mQuery.eq(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery eq(Number numberValue) {\n        this.mQuery.eq(numberValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery eq(boolean booleanValue) {\n        this.mQuery.eq(booleanValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery eq(String stringValue) {\n        this.mQuery.eq(stringValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery eq(Date dateValue) {\n        this.mQuery.eq(dateValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery eq(byte[] byteArray) {\n        this.mQuery.eq(byteArray);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery ne() {\n        this.mQuery.ne();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery ne(Query otherQuery) {\n        this.mQuery.ne(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery ne(Number numberValue) {\n        this.mQuery.ne(numberValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery ne(boolean booleanValue) {\n        this.mQuery.ne(booleanValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery ne(String stringValue) {\n        this.mQuery.ne(stringValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery ne(Date dateValue) {\n        this.mQuery.ne(dateValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery ne(byte[] byteArray) {\n        this.mQuery.ne(byteArray);\n        return this;\n    }\n\n    /**\n     * *** Arithmetic Operators *****\n     */\n\n    @Override\n    public ExecutableJsonQuery add() {\n        this.mQuery.add();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery add(Query otherQuery) {\n        this.mQuery.add(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery add(Number val) {\n        this.mQuery.add(val);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery sub() {\n        this.mQuery.sub();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery sub(Query otherQuery) {\n        this.mQuery.sub(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery sub(Number val) {\n        this.mQuery.sub(val);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery mul() {\n        this.mQuery.mul();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery mul(Query otherQuery) {\n        this.mQuery.mul(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery mul(Number val) {\n        this.mQuery.mul(val);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery div() {\n        this.mQuery.div();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery div(Query otherQuery) {\n        this.mQuery.div(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery div(Number val) {\n        this.mQuery.div(val);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery mod() {\n        this.mQuery.mod();\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery mod(Query otherQuery) {\n        this.mQuery.mod(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery mod(Number val) {\n        this.mQuery.mod(val);\n        return this;\n    }\n\n    /**\n     * *** Date Operators *****\n     */\n\n    @Override\n    public ExecutableJsonQuery year(Query otherQuery) {\n        this.mQuery.year(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery year(String field) {\n        this.mQuery.year(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery month(Query otherQuery) {\n        this.mQuery.month(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery month(String field) {\n        this.mQuery.month(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery day(Query otherQuery) {\n        this.mQuery.day(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery day(String field) {\n        this.mQuery.day(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery hour(Query otherQuery) {\n        this.mQuery.hour(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery hour(String field) {\n        this.mQuery.hour(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery minute(Query otherQuery) {\n        this.mQuery.minute(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery minute(String field) {\n        this.mQuery.minute(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery second(Query otherQuery) {\n        this.mQuery.second(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery second(String field) {\n        this.mQuery.second(field);\n        return this;\n    }\n\n    /**\n     * *** Math Functions *****\n     */\n\n    @Override\n    public ExecutableJsonQuery floor(Query otherQuery) {\n        this.mQuery.floor(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery ceiling(Query otherQuery) {\n        this.mQuery.ceiling(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery round(Query otherQuery) {\n        this.mQuery.round(otherQuery);\n        return this;\n    }\n\n    /**\n     * *** String Operators *****\n     */\n\n    @Override\n    public ExecutableJsonQuery toLower(Query exp) {\n        this.mQuery.toLower(exp);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery toLower(String field) {\n        this.mQuery.toLower(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery toUpper(Query exp) {\n        this.mQuery.toUpper(exp);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery toUpper(String field) {\n        this.mQuery.toUpper(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery length(Query exp) {\n        this.mQuery.length(exp);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery length(String field) {\n        this.mQuery.length(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery trim(Query exp) {\n        this.mQuery.trim(exp);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery trim(String field) {\n        this.mQuery.trim(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery startsWith(Query field, Query start) {\n        this.mQuery.startsWith(field, start);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery startsWith(String field, String start) {\n        this.mQuery.startsWith(field, start);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery endsWith(Query field, Query end) {\n        this.mQuery.endsWith(field, end);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery endsWith(String field, String end) {\n        this.mQuery.endsWith(field, end);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery subStringOf(Query str1, Query str2) {\n        this.mQuery.subStringOf(str1, str2);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery subStringOf(String str, String field) {\n        this.mQuery.subStringOf(str, field);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery concat(Query str1, Query str2) {\n        this.mQuery.concat(str1, str2);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery concat(Query str1, String str2) {\n        this.mQuery.concat(str1, str2);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery indexOf(Query haystack, Query needle) {\n        this.mQuery.indexOf(haystack, needle);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery indexOf(String field, String needle) {\n        this.mQuery.indexOf(field, needle);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery subString(Query str, Query pos) {\n        this.mQuery.subString(str, pos);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery subString(String field, int pos) {\n        this.mQuery.subString(field, pos);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery subString(Query str, Query pos, Query length) {\n        this.mQuery.subString(str, pos, length);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery subString(String field, int pos, int length) {\n        this.mQuery.subString(field, pos, length);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery replace(Query str, Query find, Query replace) {\n        this.mQuery.replace(str, find, replace);\n        return this;\n    }\n\n    @Override\n    public ExecutableJsonQuery replace(String field, String find, String replace) {\n        this.mQuery.replace(field, find, replace);\n        return this;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/ExecutableQuery.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ExecutableQuery.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceList;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\nimport com.microsoft.windowsazure.mobileservices.table.TableQueryCallback;\n\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * Class that represents a query to a specific MobileServiceTable<E> instance\n */\npublic final class ExecutableQuery<E> implements Query {\n\n    /**\n     * The internal base query\n     */\n    private Query mQuery;\n\n    /**\n     * The Table to query\n     */\n    private MobileServiceTable<E> mTable;\n\n    /**\n     * Creates an empty Query\n     */\n    public ExecutableQuery() {\n        this.mQuery = new QueryBase();\n    }\n\n    /**\n     * Creates Query<E> with an existing query as its only internal value\n     *\n     * @param query The query step to add\n     */\n    public ExecutableQuery(Query query) {\n        if (query.getQueryNode() != null) {\n            query = QueryOperations.query(query);\n        }\n\n        this.mQuery = query;\n    }\n\n    /**\n     * Returns the MobileServiceTable<E> to query\n     */\n    MobileServiceTable<E> getTable() {\n        return this.mTable;\n    }\n\n    /**\n     * Sets the MobileServiceTable<E> to query\n     *\n     * @param table The MobileServiceTable<E> to query\n     */\n    public void setTable(MobileServiceTable<E> table) {\n        this.mTable = table;\n    }\n\n    /**\n     * Executes the query\n     */\n    public ListenableFuture<MobileServiceList<E>> execute() {\n        return this.mTable.execute(this);\n    }\n\n    /**\n     * Executes the query\n     *\n     * @param callback Callback to invoke when the operation is completed\n     * @deprecated use {@link execute()} instead\n     */\n    public void execute(final TableQueryCallback<E> callback) {\n        mTable.execute(this, callback);\n    }\n\n    @Override\n    public ExecutableQuery<E> deepClone() {\n        ExecutableQuery<E> clone = new ExecutableQuery<E>();\n\n        if (this.mQuery != null) {\n            clone.mQuery = this.mQuery.deepClone();\n        }\n\n        // No need to clone table\n        clone.mTable = this.mTable;\n\n        return clone;\n    }\n\n    @Override\n    public QueryNode getQueryNode() {\n        return this.mQuery.getQueryNode();\n    }\n\n    @Override\n    public void setQueryNode(QueryNode queryNode) {\n        this.mQuery.setQueryNode(queryNode);\n    }\n\n    @Override\n    public boolean hasInlineCount() {\n        return this.mQuery.hasInlineCount();\n    }\n\n    @Override\n    public boolean hasDeleted() {\n        return this.mQuery.hasDeleted();\n    }\n\n    @Override\n    public List<Pair<String, QueryOrder>> getOrderBy() {\n        return this.mQuery.getOrderBy();\n    }\n\n    @Override\n    public List<String> getProjection() {\n        return this.mQuery.getProjection();\n    }\n\n    @Override\n    public List<Pair<String, String>> getUserDefinedParameters() {\n        return this.mQuery.getUserDefinedParameters();\n    }\n\n    @Override\n    public int getTop() {\n        return this.mQuery.getTop();\n    }\n\n    @Override\n    public int getSkip() {\n        return this.mQuery.getSkip();\n    }\n\n    @Override\n    public String getTableName() {\n        return this.mQuery.getTableName();\n    }\n\n    @Override\n    public ExecutableQuery<E> tableName(String tableName) {\n        this.mQuery.tableName(tableName);\n        return this;\n    }\n\n    /**\n     * * Row Operations ***\n     */\n\n    @Override\n    public ExecutableQuery<E> parameter(String parameter, String value) {\n        this.mQuery.parameter(parameter, value);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> orderBy(String field, QueryOrder order) {\n        this.mQuery.orderBy(field, order);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> top(int top) {\n        this.mQuery.top(top);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> skip(int skip) {\n        this.mQuery.skip(skip);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> includeInlineCount() {\n        this.mQuery.includeInlineCount();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> removeInlineCount() {\n        this.mQuery.removeInlineCount();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> includeDeleted() {\n        this.mQuery.includeDeleted();\n\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> removeDeleted() {\n        this.mQuery.removeDeleted();\n\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> removeProjection() {\n        this.mQuery.removeProjection();\n\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> select(String... fields) {\n        this.mQuery.select(fields);\n        return this;\n    }\n\n    /**\n     * * Query Operations ***\n     */\n\n    @Override\n    public ExecutableQuery<E> field(String fieldName) {\n        this.mQuery.field(fieldName);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> val(Number number) {\n        this.mQuery.val(number);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> val(boolean val) {\n        this.mQuery.val(val);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> val(String s) {\n        this.mQuery.val(s);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> val(Date date) {\n        this.mQuery.val(date);\n        return this;\n    }\n\n\n    @Override\n    public ExecutableQuery<E> val(byte[] byteArray) {\n        this.mQuery.val(byteArray);\n        return this;\n    }\n\n    /**\n     * *** Logical Operators *****\n     */\n\n    @Override\n    public ExecutableQuery<E> and() {\n        this.mQuery.and();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> and(Query otherQuery) {\n        this.mQuery.and(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> or() {\n        this.mQuery.or();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> or(Query otherQuery) {\n        this.mQuery.or(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> not() {\n        this.mQuery.not();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> not(Query otherQuery) {\n        this.mQuery.not(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> not(boolean booleanValue) {\n        this.mQuery.not(booleanValue);\n        return this;\n    }\n\n    /**\n     * *** Comparison Operators *****\n     */\n\n    @Override\n    public ExecutableQuery<E> ge() {\n        this.mQuery.ge();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> ge(String stringValue) {\n        this.mQuery.ge(stringValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> ge(Query otherQuery) {\n        this.mQuery.ge(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> ge(Number numberValue) {\n        this.mQuery.ge(numberValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> ge(Date dateValue) {\n        this.mQuery.ge(dateValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> le() {\n        this.mQuery.le();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> le(Query otherQuery) {\n        this.mQuery.le(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> le(Number numberValue) {\n        this.mQuery.le(numberValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> le(Date dateValue) {\n        this.mQuery.le(dateValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> gt() {\n        this.mQuery.gt();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> gt(Query otherQuery) {\n        this.mQuery.gt(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> gt(Number numberValue) {\n        this.mQuery.gt(numberValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> gt(Date dateValue) {\n        this.mQuery.gt(dateValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> gt(String stringValue) {\n        this.mQuery.gt(stringValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> lt() {\n        this.mQuery.lt();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> lt(Query otherQuery) {\n        this.mQuery.lt(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> lt(Number numberValue) {\n        this.mQuery.lt(numberValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> lt(Date dateValue) {\n        this.mQuery.lt(dateValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> eq() {\n        this.mQuery.eq();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> eq(Query otherQuery) {\n        this.mQuery.eq(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> eq(Number numberValue) {\n        this.mQuery.eq(numberValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> eq(boolean booleanValue) {\n        this.mQuery.eq(booleanValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> eq(String stringValue) {\n        this.mQuery.eq(stringValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> eq(Date dateValue) {\n        this.mQuery.eq(dateValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> eq(byte[] byteArray) {\n        this.mQuery.eq(byteArray);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> ne() {\n        this.mQuery.ne();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> ne(Query otherQuery) {\n        this.mQuery.ne(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> ne(Number numberValue) {\n        this.mQuery.ne(numberValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> ne(boolean booleanValue) {\n        this.mQuery.ne(booleanValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> ne(String stringValue) {\n        this.mQuery.ne(stringValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> ne(Date dateValue) {\n        this.mQuery.ne(dateValue);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> ne(byte[] byteArray) {\n        this.mQuery.ne(byteArray);\n        return this;\n    }\n\n    /**\n     * *** Arithmetic Operators *****\n     */\n\n    @Override\n    public ExecutableQuery<E> add() {\n        this.mQuery.add();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> add(Query otherQuery) {\n        this.mQuery.add(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> add(Number val) {\n        this.mQuery.add(val);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> sub() {\n        this.mQuery.sub();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> sub(Query otherQuery) {\n        this.mQuery.sub(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> sub(Number val) {\n        this.mQuery.sub(val);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> mul() {\n        this.mQuery.mul();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> mul(Query otherQuery) {\n        this.mQuery.mul(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> mul(Number val) {\n        this.mQuery.mul(val);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> div() {\n        this.mQuery.div();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> div(Query otherQuery) {\n        this.mQuery.div(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> div(Number val) {\n        this.mQuery.div(val);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> mod() {\n        this.mQuery.mod();\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> mod(Query otherQuery) {\n        this.mQuery.mod(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> mod(Number val) {\n        this.mQuery.mod(val);\n        return this;\n    }\n\n    /**\n     * *** Date Operators *****\n     */\n\n    @Override\n    public ExecutableQuery<E> year(Query otherQuery) {\n        this.mQuery.year(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> year(String field) {\n        this.mQuery.year(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> month(Query otherQuery) {\n        this.mQuery.month(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> month(String field) {\n        this.mQuery.month(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> day(Query otherQuery) {\n        this.mQuery.day(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> day(String field) {\n        this.mQuery.day(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> hour(Query otherQuery) {\n        this.mQuery.hour(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> hour(String field) {\n        this.mQuery.hour(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> minute(Query otherQuery) {\n        this.mQuery.minute(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> minute(String field) {\n        this.mQuery.minute(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> second(Query otherQuery) {\n        this.mQuery.second(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> second(String field) {\n        this.mQuery.second(field);\n        return this;\n    }\n\n    /**\n     * *** Math Functions *****\n     */\n\n    @Override\n    public ExecutableQuery<E> floor(Query otherQuery) {\n        this.mQuery.floor(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> ceiling(Query otherQuery) {\n        this.mQuery.ceiling(otherQuery);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> round(Query otherQuery) {\n        this.mQuery.round(otherQuery);\n        return this;\n    }\n\n    /**\n     * *** String Operators *****\n     */\n\n    @Override\n    public ExecutableQuery<E> toLower(Query exp) {\n        this.mQuery.toLower(exp);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> toLower(String field) {\n        this.mQuery.toLower(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> toUpper(Query exp) {\n        this.mQuery.toUpper(exp);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> toUpper(String field) {\n        this.mQuery.toUpper(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> length(Query exp) {\n        this.mQuery.length(exp);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> length(String field) {\n        this.mQuery.length(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> trim(Query exp) {\n        this.mQuery.trim(exp);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> trim(String field) {\n        this.mQuery.trim(field);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> startsWith(Query field, Query start) {\n        this.mQuery.startsWith(field, start);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> startsWith(String field, String start) {\n        this.mQuery.startsWith(field, start);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> endsWith(Query field, Query end) {\n        this.mQuery.endsWith(field, end);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> endsWith(String field, String end) {\n        this.mQuery.endsWith(field, end);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> subStringOf(Query str1, Query str2) {\n        this.mQuery.subStringOf(str1, str2);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> subStringOf(String str, String field) {\n        this.mQuery.subStringOf(str, field);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> concat(Query str1, Query str2) {\n        this.mQuery.concat(str1, str2);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> concat(Query str1, String str2) {\n        this.mQuery.concat(str1, str2);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> indexOf(Query haystack, Query needle) {\n        this.mQuery.indexOf(haystack, needle);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> indexOf(String field, String needle) {\n        this.mQuery.indexOf(field, needle);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> subString(Query str, Query pos) {\n        this.mQuery.subString(str, pos);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> subString(String field, int pos) {\n        this.mQuery.subString(field, pos);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> subString(Query str, Query pos, Query length) {\n        this.mQuery.subString(str, pos, length);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> subString(String field, int pos, int length) {\n        this.mQuery.subString(field, pos, length);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> replace(Query str, Query find, Query replace) {\n        this.mQuery.replace(str, find, replace);\n        return this;\n    }\n\n    @Override\n    public ExecutableQuery<E> replace(String field, String find, String replace) {\n        this.mQuery.replace(field, find, replace);\n        return this;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/FieldNode.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * FieldNode.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Class that represents a field query node\n */\nclass FieldNode implements QueryNode {\n    private String mFieldName;\n\n    @Override\n    public QueryNode deepClone() {\n        FieldNode clone = new FieldNode();\n\n        clone.mFieldName = this.mFieldName;\n\n        return clone;\n    }\n\n    @Override\n    public QueryNodeKind getKind() {\n        return QueryNodeKind.Field;\n    }\n\n    @Override\n    public <T> T accept(QueryNodeVisitor<T> visitor) {\n        return visitor.visit(this);\n    }\n\n    /**\n     * Gets the field name\n     */\n    String getFieldName() {\n        return this.mFieldName;\n    }\n\n    /**\n     * Sets the field name\n     */\n    void setFieldName(String fieldName) {\n        this.mFieldName = fieldName;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/FieldNodeMerger.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * FieldNodeMerger.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Class that represents a field node merger\n */\nclass FieldNodeMerger implements QueryNodeVisitor<QueryNode> {\n    private FieldNode mLeftNode;\n\n    /**\n     * Constructor for FieldNodeMerger\n     *\n     * @param leftNode The left field node\n     */\n    FieldNodeMerger(FieldNode leftNode) {\n        this.mLeftNode = leftNode;\n    }\n\n    @Override\n    public QueryNode visit(ConstantNode rightNode) {\n        throw QueryNodeMerger.getInvalidSequenceException();\n    }\n\n    @Override\n    public QueryNode visit(FieldNode rightNode) {\n        throw QueryNodeMerger.getInvalidSequenceException();\n    }\n\n    @Override\n    public QueryNode visit(UnaryOperatorNode rightNode) {\n        throw QueryNodeMerger.getInvalidSequenceException();\n    }\n\n    @Override\n    public QueryNode visit(BinaryOperatorNode rightNode) {\n        if (rightNode.getLeftArgument() != null) {\n            throw QueryNodeMerger.getInvalidSequenceException();\n        }\n\n        rightNode.setLeftArgument(this.mLeftNode);\n\n        return rightNode;\n    }\n\n    @Override\n    public QueryNode visit(FunctionCallNode rightNode) {\n        throw QueryNodeMerger.getInvalidSequenceException();\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/FunctionCallKind.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * FunctionCallKind.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Enumeration of function calls.\n */\nenum FunctionCallKind {\n    /**\n     * The year date function.\n     */\n    Year,\n\n    /**\n     * The month date function.\n     */\n    Month,\n\n    /**\n     * The day date function.\n     */\n    Day,\n\n    /**\n     * The hour date function.\n     */\n    Hour,\n\n    /**\n     * The minute date function.\n     */\n    Minute,\n\n    /**\n     * The second date function.\n     */\n    Second,\n\n    /**\n     * The floor math function.\n     */\n    Floor,\n\n    /**\n     * The ceiling math function.\n     */\n    Ceiling,\n\n    /**\n     * The round math function.\n     */\n    Round,\n\n    /**\n     * The to lower string function.\n     */\n    ToLower,\n\n    /**\n     * The to upper string function.\n     */\n    ToUpper,\n\n    /**\n     * The length string function.\n     */\n    Length,\n\n    /**\n     * The trim string function.\n     */\n    Trim,\n\n    /**\n     * The starts with string function.\n     */\n    StartsWith,\n\n    /**\n     * The ends with string function.\n     */\n    EndsWith,\n\n    /**\n     * The substring of string function.\n     */\n    SubstringOf,\n\n    /**\n     * The concat string function.\n     */\n    Concat,\n\n    /**\n     * The index of string function.\n     */\n    IndexOf,\n\n    /**\n     * The substring string function.\n     */\n    Substring,\n\n    /**\n     * The replace string function.\n     */\n    Replace\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/FunctionCallNode.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * FunctionCallNode.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * Class that represents a function call query node\n */\nclass FunctionCallNode implements QueryNode {\n    private FunctionCallKind mFunctionCallKind;\n\n    private List<QueryNode> mArguments;\n\n    /**\n     * Constructor for FunctionCallNode\n     *\n     * @param functionCallKind The kind of function call\n     */\n    FunctionCallNode(FunctionCallKind functionCallKind) {\n        this.mFunctionCallKind = functionCallKind;\n        this.mArguments = new ArrayList<QueryNode>();\n    }\n\n    @Override\n    public QueryNode deepClone() {\n        FunctionCallNode clone = new FunctionCallNode(this.mFunctionCallKind);\n\n        if (this.mArguments != null) {\n            clone.mArguments = new ArrayList<QueryNode>();\n\n            for (QueryNode queryNode : this.mArguments) {\n                clone.mArguments.add(queryNode.deepClone());\n            }\n        }\n\n        return clone;\n    }\n\n    @Override\n    public QueryNodeKind getKind() {\n        return QueryNodeKind.FunctionCall;\n    }\n\n    @Override\n    public <T> T accept(QueryNodeVisitor<T> visitor) {\n        return visitor.visit(this);\n    }\n\n    /**\n     * Gets the function call kind\n     */\n    public FunctionCallKind getFunctionCallKind() {\n        return this.mFunctionCallKind;\n    }\n\n    /**\n     * Gets the list of arguments\n     */\n    public List<QueryNode> getArguments() {\n        return this.mArguments;\n    }\n\n    /**\n     * Adds and argument to the exiting list\n     *\n     * @param argument The argument to add\n     */\n    public void addArgument(QueryNode argument) {\n        this.mArguments.add(argument);\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/FunctionCallNodeMerger.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * FunctionCallNodeMerger.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Class that represents a function call node merger\n */\nclass FunctionCallNodeMerger implements QueryNodeVisitor<QueryNode> {\n    private FunctionCallNode mLeftNode;\n\n    /**\n     * Constructor for FunctionCallNodeMerger\n     *\n     * @param leftNode The left function call node\n     */\n    FunctionCallNodeMerger(FunctionCallNode leftNode) {\n        this.mLeftNode = leftNode;\n    }\n\n    @Override\n    public QueryNode visit(ConstantNode rightNode) {\n        throw QueryNodeMerger.getInvalidSequenceException();\n    }\n\n    @Override\n    public QueryNode visit(FieldNode rightNode) {\n        throw QueryNodeMerger.getInvalidSequenceException();\n    }\n\n    @Override\n    public QueryNode visit(UnaryOperatorNode rightNode) {\n        throw QueryNodeMerger.getInvalidSequenceException();\n    }\n\n    @Override\n    public QueryNode visit(BinaryOperatorNode rightNode) {\n        if (rightNode.getLeftArgument() != null) {\n            throw QueryNodeMerger.getInvalidSequenceException();\n        }\n\n        rightNode.setLeftArgument(this.mLeftNode);\n\n        return rightNode;\n    }\n\n    @Override\n    public QueryNode visit(FunctionCallNode rightNode) {\n        throw QueryNodeMerger.getInvalidSequenceException();\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/Query.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * Query.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\nimport android.util.Pair;\n\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * Interface that represents a query to a table.\n */\npublic interface Query {\n    /**\n     * Deep clone the Query instance\n     *\n     * @return A cloned instance of the Query\n     */\n    Query deepClone();\n\n    /**\n     * Returns the root node of the query\n     */\n    QueryNode getQueryNode();\n\n    /**\n     * Sets the root node of the query\n     *\n     * @param queryNode The node to set\n     */\n    void setQueryNode(QueryNode queryNode);\n\n    /**\n     * Returns true if inline count is requested.\n     */\n    boolean hasInlineCount();\n\n    /**\n     * Returns true if inline count is requested.\n     */\n    boolean hasDeleted();\n\n    /**\n     * Returns a list of fields to order by the results, and their respective\n     * ordering direction\n     */\n    List<Pair<String, QueryOrder>> getOrderBy();\n\n    /**\n     * Returns a requested list of projections;\n     */\n    List<String> getProjection();\n\n    /**\n     * Returns a list of custom parameters set by the user\n     */\n    List<Pair<String, String>> getUserDefinedParameters();\n\n    /**\n     * Returns a specified top value;\n     */\n    int getTop();\n\n    /**\n     * Returns a specified skip value;\n     */\n    int getSkip();\n\n    /**\n     * Returns the table name;\n     */\n    String getTableName();\n\n    /**\n     * Sets the table name;\n     */\n    Query tableName(String tableName);\n\n    /**** Row Operations ****/\n\n    /**\n     * Adds a new user-defined parameter to the query\n     *\n     * @param parameter The parameter name\n     * @param value     The parameter value\n     * @return Query\n     */\n    Query parameter(String parameter, String value);\n\n    /**\n     * Adds a new order by statement\n     *\n     * @param field FieldName\n     * @param order Sorting order\n     * @return Query\n     */\n    Query orderBy(String field, QueryOrder order);\n\n    /**\n     * Sets the number of records to return\n     *\n     * @param top Number of records to return\n     * @return Query\n     */\n    Query top(int top);\n\n    /**\n     * Sets the number of records to skip over a given number of elements in a\n     * sequence and then return the remainder.\n     *\n     * @param skip\n     * @return Query\n     */\n    Query skip(int skip);\n\n    /**\n     * The inlinecount property specifies whether or not to retrieve a property\n     * with the number of records returned.\n     *\n     * @return Query\n     */\n    Query includeInlineCount();\n\n    /**\n     * Set the inlinecount property to false.\n     *\n     * @return Query\n     */\n    Query removeInlineCount();\n\n    /**\n     * Specifies to retrieve soft deleted rows\n     *\n     * @return Query\n     */\n    Query includeDeleted();\n\n    /**\n     * Set the hasDeleted property to false.\n     *\n     * @return Query\n     */\n    Query removeDeleted();\n\n    /**\n     * Remove the projection on the query\n     *\n     * @return Query\n     */\n    Query removeProjection();\n\n    /**\n     * Specifies the fields to retrieve\n     *\n     * @param fields Names of the fields to retrieve\n     * @return Query\n     */\n    Query select(String... fields);\n\n    /**** Query Operations ****/\n\n    /**\n     * Specifies the field to use\n     *\n     * @param fieldName The field to use\n     * @return Query\n     */\n    Query field(String fieldName);\n\n    /**\n     * Specifies a numeric value\n     *\n     * @param number The numeric value to use\n     * @return Query\n     */\n    Query val(Number number);\n\n    /**\n     * Specifies a boolean value\n     *\n     * @param val The boolean value to use\n     * @return Query\n     */\n    Query val(boolean val);\n\n    /**\n     * Specifies a string value\n     *\n     * @param s The string value to use\n     * @return Query\n     */\n    Query val(String s);\n\n    /**\n     * Specifies a date value\n     *\n     * @param date The date value to use\n     * @return Query\n     */\n    Query val(Date date);\n\n    /**\n     * Specifies a byte array value\n     *\n     * @param number The string value to use\n     * @return Query\n     */\n    Query val(byte[] byteArray);\n\n    /****** Logical Operators ******/\n\n    /**\n     * Conditional and.\n     *\n     * @return Query\n     */\n    Query and();\n\n    /**\n     * Conditional and.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query and(Query otherQuery);\n\n    /**\n     * Conditional or.\n     *\n     * @return Query\n     */\n    Query or();\n\n    /**\n     * Conditional or.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query or(Query otherQuery);\n\n    /**\n     * Logical not.\n     *\n     * @return Query\n     */\n    Query not();\n\n    /**\n     * Logical not.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query not(Query otherQuery);\n\n    /**\n     * Logical not.\n     *\n     * @param booleanValue\n     * @return Query\n     */\n    Query not(boolean booleanValue);\n\n    /****** Comparison Operators ******/\n\n    /**\n     * Greater than or equal comparison operator.\n     *\n     * @return Query\n     */\n    Query ge();\n\n    /**\n     * Greater than or equal comparison operator.\n     *\n     * @return Query\n     */\n    Query ge(String stringValue);\n\n    /**\n     * Greater than or equal comparison operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query ge(Query otherQuery);\n\n    /**\n     * Greater than or equal comparison operator.\n     *\n     * @param numberValue\n     * @return Query\n     */\n    Query ge(Number numberValue);\n\n    /**\n     * Greater than or equal comparison operator.\n     *\n     * @param dateValue\n     * @return Query\n     */\n    Query ge(Date dateValue);\n\n    /**\n     * Less than or equal comparison operator.\n     *\n     * @return Query\n     */\n    Query le();\n\n    /**\n     * Less than or equal comparison operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query le(Query otherQuery);\n\n    /**\n     * Less than or equal comparison operator.\n     *\n     * @param numberValue\n     * @return Query\n     */\n    Query le(Number numberValue);\n\n    /**\n     * Less than or equal comparison operator.\n     *\n     * @param dateValue\n     * @return Query\n     */\n    Query le(Date dateValue);\n\n    /**\n     * Greater than comparison operator.\n     *\n     * @return Query\n     */\n    Query gt();\n\n    /**\n     * Greater than comparison operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query gt(Query otherQuery);\n\n    /**\n     * Greater than comparison operator.\n     *\n     * @param numberValue\n     * @return Query\n     */\n    Query gt(Number numberValue);\n\n    /**\n     * Greater than comparison operator.\n     *\n     * @param dateValue\n     * @return Query\n     */\n    Query gt(Date dateValue);\n\n    /**\n     * Greater than comparison operator.\n     *\n     * @param stringValue\n     * @return Query\n     */\n    Query gt(String stringValue);\n\n    /**\n     * Less than comparison operator.\n     *\n     * @return Query\n     */\n    Query lt();\n\n    /**\n     * Less than comparison operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query lt(Query otherQuery);\n\n    /**\n     * Less than comparison operator.\n     *\n     * @param numberValue\n     * @return Query\n     */\n    Query lt(Number numberValue);\n\n    /**\n     * Less than comparison operator.\n     *\n     * @param dateValue\n     * @return Query\n     */\n    Query lt(Date dateValue);\n\n    /**\n     * Equal comparison operator.\n     *\n     * @return Query\n     */\n    Query eq();\n\n    /**\n     * Equal comparison operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query eq(Query otherQuery);\n\n    /**\n     * Equal comparison operator.\n     *\n     * @param numberValue\n     * @return Query\n     */\n    Query eq(Number numberValue);\n\n    /**\n     * Equal comparison operator.\n     *\n     * @param booleanValue\n     * @return Query\n     */\n    Query eq(boolean booleanValue);\n\n    /**\n     * Equal comparison operator.\n     *\n     * @param stringValue\n     * @return Query\n     */\n    Query eq(String stringValue);\n\n    /**\n     * Equal comparison operator.\n     *\n     * @param dateValue\n     * @return Query\n     */\n    Query eq(Date dateValue);\n\n    /**\n     * Equal comparison operator.\n     *\n     * @param byteArray\n     * @return Query\n     */\n    Query eq(byte[] byteArray);\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @return Query\n     */\n    Query ne();\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query ne(Query otherQuery);\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @param numberValue\n     * @return Query\n     */\n    Query ne(Number numberValue);\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @param booleanValue\n     * @return Query\n     */\n    Query ne(boolean booleanValue);\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @param stringValue\n     * @return Query\n     */\n    Query ne(String stringValue);\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @param dateValue\n     * @return Query\n     */\n    Query ne(Date dateValue);\n\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @param byteArray\n     * @return Query\n     */\n    Query ne(byte[] byteArray);\n\n    /****** Arithmetic Operators ******/\n\n    /**\n     * Add operator.\n     *\n     * @return Query\n     */\n    Query add();\n\n    /**\n     * Add operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query add(Query otherQuery);\n\n    /**\n     * Add operator.\n     *\n     * @param val\n     * @return Query\n     */\n    Query add(Number val);\n\n    /**\n     * Subtract operator.\n     *\n     * @return Query\n     */\n    Query sub();\n\n    /**\n     * Subtract operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query sub(Query otherQuery);\n\n    /**\n     * Subtract operator.\n     *\n     * @param val\n     * @return Query\n     */\n    Query sub(Number val);\n\n    /**\n     * Multiply operator.\n     *\n     * @return Query\n     */\n    Query mul();\n\n    /**\n     * Multiply operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query mul(Query otherQuery);\n\n    /**\n     * Multiply operator.\n     *\n     * @param val\n     * @return Query\n     */\n    Query mul(Number val);\n\n    /**\n     * Divide operator.\n     *\n     * @return Query\n     */\n    Query div();\n\n    /**\n     * Divide operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query div(Query otherQuery);\n\n    /**\n     * Divide operator.\n     *\n     * @param val\n     * @return Query\n     */\n    Query div(Number val);\n\n    /**\n     * Reminder (or modulo) operator.\n     *\n     * @return Query\n     */\n    Query mod();\n\n    /**\n     * Reminder (or modulo) operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query mod(Query otherQuery);\n\n    /**\n     * Reminder (or modulo) operator.\n     *\n     * @param val\n     * @return Query\n     */\n    Query mod(Number val);\n\n    /****** Date Operators ******/\n\n    /**\n     * The year component value of the parameter value.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query year(Query otherQuery);\n\n    /**\n     * The year component value of the parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    Query year(String field);\n\n    /**\n     * The month component value of the parameter value.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query month(Query otherQuery);\n\n    /**\n     * The month component value of the parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    Query month(String field);\n\n    /**\n     * The day component value of the parameter value.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query day(Query otherQuery);\n\n    /**\n     * The day component value of the parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    Query day(String field);\n\n    /**\n     * The hour component value of the parameter value.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query hour(Query otherQuery);\n\n    /**\n     * The hour component value of the parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    Query hour(String field);\n\n    /**\n     * The minute component value of the parameter value.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query minute(Query otherQuery);\n\n    /**\n     * The minute component value of the parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    Query minute(String field);\n\n    /**\n     * The second component value of the parameter value.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query second(Query otherQuery);\n\n    /**\n     * The second component value of the parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    Query second(String field);\n\n    /****** Math Functions ******/\n\n    /**\n     * The largest integral value less than or equal to the parameter value.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query floor(Query otherQuery);\n\n    /**\n     * The smallest integral value greater than or equal to the parameter value.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query ceiling(Query otherQuery);\n\n    /**\n     * The nearest integral value to the parameter value.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    Query round(Query otherQuery);\n\n    /****** String Operators ******/\n\n    /**\n     * String value with the contents of the parameter value converted to lower\n     * case.\n     *\n     * @param exp\n     * @return Query\n     */\n    Query toLower(Query exp);\n\n    /**\n     * String value with the contents of the parameter value converted to lower\n     * case.\n     *\n     * @param field\n     * @return Query\n     */\n    Query toLower(String field);\n\n    /**\n     * String value with the contents of the parameter value converted to upper\n     * case.\n     *\n     * @param exp\n     * @return Query\n     */\n    Query toUpper(Query exp);\n\n    /**\n     * String value with the contents of the parameter value converted to upper\n     * case.\n     *\n     * @param field\n     * @return Query\n     */\n    Query toUpper(String field);\n\n    /**\n     * The number of characters in the specified parameter value.\n     *\n     * @param exp\n     * @return Query\n     */\n    Query length(Query exp);\n\n    /**\n     * The number of characters in the specified parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    Query length(String field);\n\n    /**\n     * String value with the contents of the parameter value with all leading\n     * and trailing white-space characters removed.\n     *\n     * @param exp\n     * @return Query\n     */\n    Query trim(Query exp);\n\n    /**\n     * String value with the contents of the parameter value with all leading\n     * and trailing white-space characters removed.\n     *\n     * @param field\n     * @return Query\n     */\n    Query trim(String field);\n\n    /**\n     * Whether the beginning of the first parameter values matches the second\n     * parameter value.\n     *\n     * @param field The field to evaluate\n     * @param start Start value\n     * @return Query\n     */\n    Query startsWith(Query field, Query start);\n\n    /**\n     * Whether the beginning of the first parameter values matches the second\n     * parameter value.\n     *\n     * @param field The field to evaluate\n     * @param start Start value\n     * @return Query\n     */\n    Query startsWith(String field, String start);\n\n    /**\n     * Whether the end of the first parameter value matches the second parameter\n     * value.\n     *\n     * @param field The field to evaluate\n     * @param end   End value\n     * @return Query\n     */\n    Query endsWith(Query field, Query end);\n\n    /**\n     * Whether the end of the first parameter value matches the second parameter\n     * value.\n     *\n     * @param field The field to evaluate\n     * @param end   End value\n     * @return Query\n     */\n    Query endsWith(String field, String end);\n\n    /**\n     * Whether the first parameter string value occurs in the second parameter\n     * string value.\n     *\n     * @param str1 First string\n     * @param str2 Second string\n     * @return Query\n     */\n    Query subStringOf(Query str1, Query str2);\n\n    /**\n     * Whether the string parameter occurs in the field\n     *\n     * @param str String to search\n     * @param field Field to search in\n     * @return Query\n     */\n    Query subStringOf(String str, String field);\n\n    /**\n     * String value which is the first and second parameter values merged\n     * together with the first parameter value coming first in the result.\n     *\n     * @param str1 First string\n     * @param str2 Second string\n     * @return Query\n     */\n    Query concat(Query str1, Query str2);\n\n    /**\n     * String value which is the first and second parameter values merged\n     * together with the first parameter value coming first in the result.\n     *\n     * @param str1 First string\n     * @param str2 Second string\n     * @return Query\n     */\n    Query concat(Query str1, String str2);\n\n    /**\n     * Index of the first occurrence of the second parameter value in the first\n     * parameter value or -1 otherwise.\n     *\n     * @param haystack String content\n     * @param needle   Value to search for\n     * @return Query\n     */\n    Query indexOf(Query haystack, Query needle);\n\n    /**\n     * Index of the first occurrence of the second parameter value in the first\n     * parameter value or -1 otherwise.\n     *\n     * @param field Field to search in\n     * @param needle Value to search for\n     * @return Query\n     */\n    Query indexOf(String field, String needle);\n\n    /**\n     * String value starting at the character index specified by the second\n     * parameter value in the first parameter string value.\n     *\n     * @param str String content\n     * @param pos Starting position\n     * @return Query\n     */\n    Query subString(Query str, Query pos);\n\n    /**\n     * String value starting at the character index specified by the second\n     * parameter value in the first parameter string value.\n     *\n     * @param field Field to scan\n     * @param pos   Starting position\n     * @return Query\n     */\n    Query subString(String field, int pos);\n\n    /**\n     * String value starting at the character index specified by the second\n     * parameter value in the first parameter string value.\n     *\n     * @param str    String content\n     * @param pos    Starting position\n     * @param length Length\n     * @return Query\n     */\n    Query subString(Query str, Query pos, Query length);\n\n    /**\n     * String value starting at the character index specified by the second\n     * parameter value in the first parameter string value.\n     *\n     * @param field  Field to scan\n     * @param pos    Starting position\n     * @param length Length\n     * @return Query\n     */\n    Query subString(String field, int pos, int length);\n\n    /**\n     * Finds the second string parameter in the first parameter string value and\n     * replaces it with the third parameter value.\n     *\n     * @param str     String content\n     * @param find    Search value\n     * @param replace Replace value\n     * @return Query\n     */\n    Query replace(Query str, Query find, Query replace);\n\n    /**\n     * Finds the second string parameter in the first parameter string value and\n     * replaces it with the third parameter value.\n     *\n     * @param field   Field to scan\n     * @param find    Search value\n     * @param replace Replace value\n     * @return Query\n     */\n    Query replace(String field, String find, String replace);\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/QueryBase.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * QueryBase.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\nimport android.util.Pair;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * Class that provides a base implementation of query\n */\nclass QueryBase implements Query {\n    /**\n     * The main text of the query\n     */\n    private QueryNode mQueryNode;\n\n    /**\n     * Indicates if the query should include the inlinecount property\n     */\n    private boolean mHasInlineCount = false;\n\n    /**\n     * Indicates if the query should include the soft deleted rows\n     */\n    private boolean mHasDeleted = false;\n\n    /**\n     * Query ordering to use\n     */\n    private List<Pair<String, QueryOrder>> mOrderBy = new ArrayList<Pair<String, QueryOrder>>();\n\n    /**\n     * Query projection to use\n     */\n    private List<String> mProjection = null;\n\n    /**\n     * User-defined properties to use\n     */\n    private List<Pair<String, String>> mUserDefinedParameters = new ArrayList<Pair<String, String>>();\n\n    /**\n     * Top rows to retrieve\n     */\n    private int mTop = 0;\n\n    /**\n     * Rows to skip\n     */\n    private int mSkip = -1;\n\n    private String mTableName = \"\";\n\n    /**\n     * Creates an empty QueryBase.\n     */\n    QueryBase() {\n\n    }\n\n    @Override\n    public Query deepClone() {\n        QueryBase clone = new QueryBase();\n\n        clone.mQueryNode = this.mQueryNode != null ? this.mQueryNode.deepClone() : null;\n        clone.mHasInlineCount = this.mHasInlineCount;\n        clone.mHasDeleted = this.mHasDeleted;\n\n        for (Pair<String, QueryOrder> orderBy : this.mOrderBy) {\n            clone.mOrderBy.add(new Pair<String, QueryOrder>(orderBy.first, orderBy.second));\n        }\n\n        if (this.mProjection != null) {\n            clone.mProjection = new ArrayList<String>();\n\n            for (String column : this.mProjection) {\n                clone.mProjection.add(column);\n            }\n        }\n\n        for (Pair<String, String> parameter : this.mUserDefinedParameters) {\n            clone.mUserDefinedParameters.add(new Pair<String, String>(parameter.first, parameter.second));\n        }\n\n        clone.mTop = this.mTop;\n\n        clone.mSkip = this.mSkip;\n\n        clone.mTableName = this.mTableName;\n\n        return clone;\n    }\n\n    @Override\n    public QueryNode getQueryNode() {\n        return this.mQueryNode;\n    }\n\n    @Override\n    public void setQueryNode(QueryNode queryNode) {\n        this.mQueryNode = queryNode;\n    }\n\n    @Override\n    public boolean hasInlineCount() {\n        return mHasInlineCount;\n    }\n\n    @Override\n    public boolean hasDeleted() {\n        return mHasDeleted;\n    }\n\n    @Override\n    public List<Pair<String, QueryOrder>> getOrderBy() {\n        return mOrderBy;\n    }\n\n    @Override\n    public List<String> getProjection() {\n        return mProjection;\n    }\n\n    @Override\n    public List<Pair<String, String>> getUserDefinedParameters() {\n        return mUserDefinedParameters;\n    }\n\n    @Override\n    public int getTop() {\n        return mTop;\n    }\n\n    @Override\n    public int getSkip() {\n        return mSkip;\n    }\n\n    @Override\n    public String getTableName() {\n        return mTableName;\n    }\n\n    @Override\n    public Query tableName(String tableName) {\n        this.mTableName = tableName;\n        return this;\n    }\n\n    /**\n     * *** Row Operations *****\n     */\n\n    @Override\n    public Query parameter(String parameter, String value) {\n        this.mUserDefinedParameters.add(new Pair<String, String>(parameter, value));\n        return this;\n    }\n\n    @Override\n    public Query orderBy(String field, QueryOrder order) {\n        this.mOrderBy.add(new Pair<String, QueryOrder>(field, order));\n        return this;\n    }\n\n    @Override\n    public Query top(int top) {\n        if (top > 0) {\n            this.mTop = top;\n        }\n\n        return this;\n    }\n\n    @Override\n    public Query skip(int skip) {\n        if (skip >= 0) {\n            this.mSkip = skip;\n        }\n\n        return this;\n    }\n\n    @Override\n    public Query includeInlineCount() {\n        this.mHasInlineCount = true;\n\n        return this;\n    }\n\n    @Override\n    public Query removeInlineCount() {\n        this.mHasInlineCount = false;\n\n        return this;\n    }\n\n    @Override\n    public Query includeDeleted() {\n        this.mHasDeleted = true;\n\n        return this;\n    }\n\n    @Override\n    public Query removeDeleted() {\n        this.mHasDeleted = false;\n\n        return this;\n    }\n\n    @Override\n    public Query removeProjection() {\n        this.mProjection = null;\n\n        return this;\n    }\n\n    @Override\n    public Query select(String... fields) {\n        this.mProjection = new ArrayList<String>();\n        for (String field : fields) {\n            this.mProjection.add(field);\n        }\n\n        return this;\n    }\n\n    /**\n     * *** Query Operations *****\n     */\n\n    @Override\n    public Query field(String fieldName) {\n        QueryOperations.join(this, QueryOperations.field(fieldName));\n        return this;\n    }\n\n    @Override\n    public Query val(Number number) {\n        QueryOperations.join(this, QueryOperations.val(number));\n        return this;\n    }\n\n    @Override\n    public Query val(boolean val) {\n        QueryOperations.join(this, QueryOperations.val(val));\n        return this;\n    }\n\n    @Override\n    public Query val(String s) {\n        QueryOperations.join(this, QueryOperations.val(s));\n        return this;\n    }\n\n    @Override\n    public Query val(Date date) {\n        QueryOperations.join(this, QueryOperations.val(date));\n        return this;\n    }\n\n    @Override\n    public Query val(byte[] byteArray) {\n        QueryOperations.join(this, QueryOperations.val(byteArray));\n        return this;\n    }\n\n    /**\n     * *** Logical Operators *****\n     */\n\n    @Override\n    public Query and() {\n        QueryOperations.join(this, QueryOperations.and());\n        return this;\n    }\n\n    @Override\n    public Query and(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.and(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query or() {\n        QueryOperations.join(this, QueryOperations.or());\n        return this;\n    }\n\n    @Override\n    public Query or(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.or(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query not() {\n        QueryOperations.join(this, QueryOperations.not());\n        return this;\n    }\n\n    @Override\n    public Query not(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.not(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query not(boolean booleanValue) {\n        QueryOperations.join(this, QueryOperations.not(QueryOperations.val(booleanValue)));\n        return this;\n    }\n\n    /**\n     * *** Comparison Operators *****\n     */\n\n    @Override\n    public Query ge() {\n        QueryOperations.join(this, QueryOperations.ge());\n        return this;\n    }\n\n    @Override\n    public Query ge(String stringValue) {\n        QueryOperations.join(this, QueryOperations.ge(stringValue));\n        return this;\n    }\n\n    @Override\n    public Query ge(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.ge(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query ge(Number numberValue) {\n        QueryOperations.join(this, QueryOperations.ge(QueryOperations.val(numberValue)));\n        return this;\n    }\n\n    @Override\n    public Query ge(Date dateValue) {\n        QueryOperations.join(this, QueryOperations.ge(QueryOperations.val(dateValue)));\n        return this;\n    }\n\n    @Override\n    public Query le() {\n        QueryOperations.join(this, QueryOperations.le());\n        return this;\n    }\n\n    @Override\n    public Query le(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.le(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query le(Number numberValue) {\n        QueryOperations.join(this, QueryOperations.le(QueryOperations.val(numberValue)));\n        return this;\n    }\n\n    @Override\n    public Query le(Date dateValue) {\n        QueryOperations.join(this, QueryOperations.le(QueryOperations.val(dateValue)));\n        return this;\n    }\n\n    @Override\n    public Query gt() {\n        QueryOperations.join(this, QueryOperations.gt());\n        return this;\n    }\n\n    @Override\n    public Query gt(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.gt(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query gt(Number numberValue) {\n        QueryOperations.join(this, QueryOperations.gt(QueryOperations.val(numberValue)));\n        return this;\n    }\n\n    @Override\n    public Query gt(Date dateValue) {\n        QueryOperations.join(this, QueryOperations.gt(QueryOperations.val(dateValue)));\n        return this;\n    }\n\n    @Override\n    public Query gt(String stringValue) {\n        QueryOperations.join(this, QueryOperations.gt(QueryOperations.val(stringValue)));\n        return this;\n    }\n\n    @Override\n    public Query lt() {\n        QueryOperations.join(this, QueryOperations.lt());\n        return this;\n    }\n\n    @Override\n    public Query lt(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.lt(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query lt(Number numberValue) {\n        QueryOperations.join(this, QueryOperations.lt(QueryOperations.val(numberValue)));\n        return this;\n    }\n\n    @Override\n    public Query lt(Date dateValue) {\n        QueryOperations.join(this, QueryOperations.lt(QueryOperations.val(dateValue)));\n        return this;\n    }\n\n    @Override\n    public Query eq() {\n        QueryOperations.join(this, QueryOperations.eq());\n        return this;\n    }\n\n    @Override\n    public Query eq(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.eq(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query eq(Number numberValue) {\n        QueryOperations.join(this, QueryOperations.eq(QueryOperations.val(numberValue)));\n        return this;\n    }\n\n    @Override\n    public Query eq(boolean booleanValue) {\n        QueryOperations.join(this, QueryOperations.eq(QueryOperations.val(booleanValue)));\n        return this;\n    }\n\n    @Override\n    public Query eq(String stringValue) {\n        QueryOperations.join(this, QueryOperations.eq(QueryOperations.val(stringValue)));\n        return this;\n    }\n\n    @Override\n    public Query eq(Date dateValue) {\n        QueryOperations.join(this, QueryOperations.eq(QueryOperations.val(dateValue)));\n        return this;\n    }\n\n    @Override\n    public Query eq(byte[] byteArray) {\n        QueryOperations.join(this, QueryOperations.eq(QueryOperations.val(byteArray)));\n        return this;\n    }\n\n    @Override\n    public Query ne() {\n        QueryOperations.join(this, QueryOperations.ne());\n        return this;\n    }\n\n    @Override\n    public Query ne(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.ne(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query ne(Number numberValue) {\n        QueryOperations.join(this, QueryOperations.ne(QueryOperations.val(numberValue)));\n        return this;\n    }\n\n    @Override\n    public Query ne(boolean booleanValue) {\n        QueryOperations.join(this, QueryOperations.ne(QueryOperations.val(booleanValue)));\n        return this;\n    }\n\n    @Override\n    public Query ne(String stringValue) {\n        QueryOperations.join(this, QueryOperations.ne(QueryOperations.val(stringValue)));\n        return this;\n    }\n\n    @Override\n    public Query ne(Date dateValue) {\n        QueryOperations.join(this, QueryOperations.ne(QueryOperations.val(dateValue)));\n        return this;\n    }\n\n    @Override\n    public Query ne(byte[] byteArray) {\n        QueryOperations.join(this, QueryOperations.ne(QueryOperations.val(byteArray)));\n        return this;\n    }\n    /**\n     * *** Arithmetic Operators *****\n     */\n\n    @Override\n    public Query add() {\n        QueryOperations.join(this, QueryOperations.add());\n        return this;\n    }\n\n    @Override\n    public Query add(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.add(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query add(Number val) {\n        QueryOperations.join(this, QueryOperations.add(val));\n        return this;\n    }\n\n    @Override\n    public Query sub() {\n        QueryOperations.join(this, QueryOperations.sub());\n        return this;\n    }\n\n    @Override\n    public Query sub(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.sub(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query sub(Number val) {\n        QueryOperations.join(this, QueryOperations.sub(val));\n        return this;\n    }\n\n    @Override\n    public Query mul() {\n        QueryOperations.join(this, QueryOperations.mul());\n        return this;\n    }\n\n    @Override\n    public Query mul(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.mul(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query mul(Number val) {\n        QueryOperations.join(this, QueryOperations.mul(val));\n        return this;\n    }\n\n    @Override\n    public Query div() {\n        QueryOperations.join(this, QueryOperations.div());\n        return this;\n    }\n\n    @Override\n    public Query div(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.div(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query div(Number val) {\n        QueryOperations.join(this, QueryOperations.div(val));\n        return this;\n    }\n\n    @Override\n    public Query mod() {\n        QueryOperations.join(this, QueryOperations.mod());\n        return this;\n    }\n\n    @Override\n    public Query mod(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.mod(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query mod(Number val) {\n        QueryOperations.join(this, QueryOperations.mod(val));\n        return this;\n    }\n\n    /**\n     * *** Date Operators *****\n     */\n\n    @Override\n    public Query year(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.year(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query year(String field) {\n        QueryOperations.join(this, QueryOperations.year(field));\n        return this;\n    }\n\n    @Override\n    public Query month(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.month(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query month(String field) {\n        QueryOperations.join(this, QueryOperations.month(field));\n        return this;\n    }\n\n    @Override\n    public Query day(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.day(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query day(String field) {\n        QueryOperations.join(this, QueryOperations.day(field));\n        return this;\n    }\n\n    @Override\n    public Query hour(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.hour(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query hour(String field) {\n        QueryOperations.join(this, QueryOperations.hour(field));\n        return this;\n    }\n\n    @Override\n    public Query minute(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.minute(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query minute(String field) {\n        QueryOperations.join(this, QueryOperations.minute(field));\n        return this;\n    }\n\n    @Override\n    public Query second(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.second(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query second(String field) {\n        QueryOperations.join(this, QueryOperations.second(field));\n        return this;\n    }\n\n    /**\n     * *** Math Functions *****\n     */\n\n    @Override\n    public Query floor(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.floor(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query ceiling(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.ceiling(otherQuery));\n        return this;\n    }\n\n    @Override\n    public Query round(Query otherQuery) {\n        QueryOperations.join(this, QueryOperations.round(otherQuery));\n        return this;\n    }\n\n    /**\n     * *** String Operators *****\n     */\n\n    @Override\n    public Query toLower(Query exp) {\n        QueryOperations.join(this, QueryOperations.toLower(exp));\n        return this;\n    }\n\n    @Override\n    public Query toLower(String field) {\n        QueryOperations.join(this, QueryOperations.toLower(field));\n        return this;\n    }\n\n    @Override\n    public Query toUpper(Query exp) {\n        QueryOperations.join(this, QueryOperations.toUpper(exp));\n        return this;\n    }\n\n    @Override\n    public Query toUpper(String field) {\n        QueryOperations.join(this, QueryOperations.toUpper(field));\n        return this;\n    }\n\n    @Override\n    public Query length(Query exp) {\n        QueryOperations.join(this, QueryOperations.length(exp));\n        return this;\n    }\n\n    @Override\n    public Query length(String field) {\n        QueryOperations.join(this, QueryOperations.length(field));\n        return this;\n    }\n\n    @Override\n    public Query trim(Query exp) {\n        QueryOperations.join(this, QueryOperations.trim(exp));\n        return this;\n    }\n\n    @Override\n    public Query trim(String field) {\n        QueryOperations.join(this, QueryOperations.trim(field));\n        return this;\n    }\n\n    @Override\n    public Query startsWith(Query field, Query start) {\n        QueryOperations.join(this, QueryOperations.startsWith(field, start));\n        return this;\n    }\n\n    @Override\n    public Query startsWith(String field, String start) {\n        QueryOperations.join(this, QueryOperations.startsWith(field, start));\n        return this;\n    }\n\n    @Override\n    public Query endsWith(Query field, Query end) {\n        QueryOperations.join(this, QueryOperations.endsWith(field, end));\n        return this;\n    }\n\n    @Override\n    public Query endsWith(String field, String end) {\n        QueryOperations.join(this, QueryOperations.endsWith(field, end));\n        return this;\n    }\n\n    @Override\n    public Query subStringOf(Query str1, Query str2) {\n        QueryOperations.join(this, QueryOperations.subStringOf(str1, str2));\n        return this;\n    }\n\n    @Override\n    public Query subStringOf(String str, String field) {\n        QueryOperations.join(this, QueryOperations.subStringOf(str, field));\n        return this;\n    }\n\n    @Override\n    public Query concat(Query str1, Query str2) {\n        QueryOperations.join(this, QueryOperations.concat(str1, str2));\n        return this;\n    }\n\n    @Override\n    public Query concat(Query str1, String str2) {\n        QueryOperations.join(this, QueryOperations.concat(str1, str2));\n        return this;\n    }\n\n    @Override\n    public Query indexOf(Query haystack, Query needle) {\n        QueryOperations.join(this, QueryOperations.indexOf(haystack, needle));\n        return this;\n    }\n\n    @Override\n    public Query indexOf(String field, String needle) {\n        QueryOperations.join(this, QueryOperations.indexOf(field, needle));\n        return this;\n    }\n\n    @Override\n    public Query subString(Query str, Query pos) {\n        QueryOperations.join(this, QueryOperations.subString(str, pos));\n        return this;\n    }\n\n    @Override\n    public Query subString(String field, int pos) {\n        QueryOperations.join(this, QueryOperations.subString(field, pos));\n        return this;\n    }\n\n    @Override\n    public Query subString(Query str, Query pos, Query length) {\n        QueryOperations.join(this, QueryOperations.subString(str, pos, length));\n        return this;\n    }\n\n    @Override\n    public Query subString(String field, int pos, int length) {\n        QueryOperations.join(this, QueryOperations.subString(field, pos, length));\n        return this;\n    }\n\n    @Override\n    public Query replace(Query str, Query find, Query replace) {\n        QueryOperations.join(this, QueryOperations.replace(str, find, replace));\n        return this;\n    }\n\n    @Override\n    public Query replace(String field, String find, String replace) {\n        QueryOperations.join(this, QueryOperations.replace(field, find, replace));\n        return this;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/QueryException.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * QueryException.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\npublic class QueryException extends RuntimeException {\n    /**\n     * UID used for serialization\n     */\n    private static final long serialVersionUID = 1663849623026648136L;\n\n    /**\n     * Creates a new QueryException with a detail message and a cause\n     *\n     * @param detail    The detail message\n     * @param throwable The exception cause\n     */\n    public QueryException(String detail, Throwable throwable) {\n        super(detail, throwable);\n    }\n\n    /**\n     * Creates a new QueryException with a detail message\n     *\n     * @param detail The detail message\n     */\n    public QueryException(String detail) {\n        super(detail);\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/QueryNode.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * QueryNode.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Interface of a query node used to represent a row filter expression.\n */\npublic interface QueryNode {\n    /**\n     * Deep clone the QueryNode instance\n     *\n     * @return A cloned instance of the QueryNode\n     */\n    QueryNode deepClone();\n\n    /**\n     * Gets the kind of the query node.\n     */\n    QueryNodeKind getKind();\n\n    /**\n     * Accept a MobileServiceQueryNodeVisitor that walks a tree of QueryNode.\n     *\n     * @param visitor An implementation of the visitor interface.\n     * @return An object whose type is determined by the type parameter of the\n     * visitor.\n     */\n    <T> T accept(QueryNodeVisitor<T> visitor);\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/QueryNodeKind.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * QueryNodeKind.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Enumeration of kinds of query nodes.\n */\nenum QueryNodeKind {\n\n    /**\n     * Node used to represent a constant value.\n     */\n    Constant,\n\n    /**\n     * Node used to represent a field.\n     */\n    Field,\n\n    /**\n     * Node used to represent a unary operator.\n     */\n    UnaryOperator,\n\n    /**\n     * Node used to represent a binary operator.\n     */\n    BinaryOperator,\n\n    /**\n     * Node used to represent a function call.\n     */\n    FunctionCall\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/QueryNodeMerger.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * QueryNodeMerger.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Class that represents a query node merger\n */\nclass QueryNodeMerger implements QueryNodeVisitor<QueryNode> {\n    private QueryNode mRightNode;\n\n    /**\n     * Constructor for QueryNodeMerger\n     *\n     * @param rightNode The right query node\n     */\n    QueryNodeMerger(QueryNode rightNode) {\n        this.mRightNode = rightNode;\n    }\n\n    /**\n     * Gets a QueryException that represents an invalid sequence of query\n     * operations\n     */\n    static QueryException getInvalidSequenceException() {\n        return new QueryException(\"Invalid query operations sequence.\");\n    }\n\n    @Override\n    public QueryNode visit(ConstantNode leftNode) {\n        return mRightNode.accept(new ConstantNodeMerger(leftNode));\n    }\n\n    @Override\n    public QueryNode visit(FieldNode leftNode) {\n        return mRightNode.accept(new FieldNodeMerger(leftNode));\n    }\n\n    @Override\n    public QueryNode visit(UnaryOperatorNode leftNode) {\n        return mRightNode.accept(new UnaryOperatorNodeMerger(leftNode));\n    }\n\n    @Override\n    public QueryNode visit(BinaryOperatorNode leftNode) {\n        return mRightNode.accept(new BinaryOperatorNodeMerger(leftNode));\n    }\n\n    @Override\n    public QueryNode visit(FunctionCallNode leftNode) {\n        return mRightNode.accept(new FunctionCallNodeMerger(leftNode));\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/QueryNodeODataWriter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * QueryNodeODataWriter.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\nimport com.microsoft.windowsazure.mobileservices.table.DateTimeOffset;\nimport com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer;\n\nimport java.io.UnsupportedEncodingException;\nimport java.util.Date;\nimport java.util.Locale;\n\n/**\n * Query node visitor used to generate OData filter.\n */\nclass QueryNodeODataWriter implements QueryNodeVisitor<QueryNode> {\n    private StringBuilder mBuilder;\n    private static final char[] HEX_ARRAY = \"0123456789ABCDEF\".toCharArray();\n    /**\n     * Constructor for QueryNodeODataWriter\n     */\n    QueryNodeODataWriter() {\n        this.mBuilder = new StringBuilder();\n    }\n\n    private static String process(String s) {\n        return \"'\" + percentEncode(sanitize(s)) + \"'\";\n    }\n\n    private static String process(Date date) {\n        return \"datetime'\" + DateSerializer.serialize(date) + \"'\";\n    }\n\n    private static String process(DateTimeOffset dateTimeOffset) {\n        return \"datetimeoffset'\" + DateSerializer.serialize(dateTimeOffset) + \"'\";\n    }\n\n    private static String process(byte[] byteArray) {\n        return \"X'\" + bytesToHex(byteArray) + \"'\";\n    }\n\n    /**\n     * Sanitizes the string to use in a oData query\n     *\n     * @param s The string to sanitize\n     * @return The sanitized string\n     */\n    private static String sanitize(String s) {\n        if (s != null) {\n            return s.replace(\"'\", \"''\");\n        } else {\n            return null;\n        }\n    }\n\n    static String percentEncode(String s) {\n        return percentEncode(s, \"\");\n    }\n\n    static String percentEncode(String s, String reserved) {\n        if (s == null) {\n            return null;\n        }\n\n        StringBuilder builder = new StringBuilder(s.length());\n\n        int escapeStart = -1;\n\n        for (int i = 0; i < s.length(); i++) {\n            char c = s.charAt(i);\n\n            if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || \"-._~\".indexOf(c) != -1 || reserved.indexOf(c) != -1) {\n                if (escapeStart != -1) {\n                    appendHex(builder, s.substring(escapeStart, i));\n                    escapeStart = -1;\n                }\n\n                builder.append(c);\n            } else if (escapeStart == -1) {\n                escapeStart = i;\n            }\n        }\n\n        if (escapeStart != -1) {\n            appendHex(builder, s.substring(escapeStart, s.length()));\n        }\n\n        return builder.toString();\n    }\n\n    private static void appendHex(StringBuilder builder, String s) {\n        try {\n            for (byte b : s.getBytes(\"UTF-8\")) {\n                appendHex(builder, b);\n            }\n        } catch (UnsupportedEncodingException e) {\n            // UTF-8 should support any string\n        }\n    }\n\n    private static void appendHex(StringBuilder sb, byte b) {\n        sb.append('%');\n        sb.append(String.format(\"%02X\", b));\n    }\n\n    private static String bytesToHex(byte[] bytes) {\n        char[] hexChars = new char[bytes.length * 2];\n\n        for (int j = 0; j < bytes.length; j++) {\n            int v = bytes[j] & 0xFF;\n            hexChars[j * 2] = HEX_ARRAY[v >>> 4];\n            hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];\n        }\n\n        return new String(hexChars);\n    }\n\n    /**\n     * Gets the StringBuilder with the OData representation of the node\n     */\n    StringBuilder getBuilder() {\n        return this.mBuilder;\n    }\n\n    @Override\n    public QueryNode visit(ConstantNode node) {\n        Object value = node.getValue();\n        String constant = value != null ? value.toString() : \"null\";\n\n        if (value instanceof String) {\n            constant = process((String) value);\n        } else if (value instanceof DateTimeOffset) {\n            constant = process((DateTimeOffset) value);\n        }else if (value instanceof Date) {\n            constant = process((Date) value);\n        }else if (value instanceof byte[]) {\n            constant = process((byte[]) value);\n        }\n\n        this.mBuilder.append(constant);\n\n        return node;\n    }\n\n    @Override\n    public QueryNode visit(FieldNode node) {\n        this.mBuilder.append(percentEncode(node.getFieldName(), \"!$&'()*+,;=:@\")); // odataIdentifier\n        return node;\n    }\n\n    @Override\n    public QueryNode visit(UnaryOperatorNode node) {\n        if (node.getUnaryOperatorKind() == UnaryOperatorKind.Parenthesis) {\n            this.mBuilder.append(\"(\");\n\n            if (node.getArgument() != null) {\n                node.getArgument().accept(this);\n            }\n\n            this.mBuilder.append(\")\");\n        } else {\n            this.mBuilder.append(node.getUnaryOperatorKind().name().toLowerCase(Locale.getDefault()));\n\n            if (node.getArgument() != null) {\n                this.mBuilder.append(\"%20\");\n                node.getArgument().accept(this);\n            }\n        }\n\n        return node;\n    }\n\n    @Override\n    public QueryNode visit(BinaryOperatorNode node) {\n        if (node.getLeftArgument() != null) {\n            node.getLeftArgument().accept(this);\n            this.mBuilder.append(\"%20\");\n        }\n\n        this.mBuilder.append(node.getBinaryOperatorKind().name().toLowerCase(Locale.getDefault()));\n\n        if (node.getRightArgument() != null) {\n            this.mBuilder.append(\"%20\");\n            node.getRightArgument().accept(this);\n        }\n\n        return node;\n    }\n\n    @Override\n    public QueryNode visit(FunctionCallNode node) {\n        this.mBuilder.append(node.getFunctionCallKind().name().toLowerCase(Locale.getDefault()));\n        this.mBuilder.append(\"(\");\n\n        boolean first = true;\n\n        for (QueryNode argument : node.getArguments()) {\n            if (!first) {\n                this.mBuilder.append(\",\");\n            } else {\n                first = false;\n            }\n\n            argument.accept(this);\n        }\n\n        this.mBuilder.append(\")\");\n\n        return node;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/QueryNodeSQLWriter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * QueryNodeSQLWriter.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\nimport com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer;\n\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * Query node visitor used to generate SQL filter.\n */\npublic class QueryNodeSQLWriter implements QueryNodeVisitor<QueryNode> {\n    private StringBuilder mBuilder;\n\n    /**\n     * Constructor for QueryNodeSQLWriter\n     */\n    QueryNodeSQLWriter() {\n        this.mBuilder = new StringBuilder();\n    }\n\n    private static String getSQLOperator(UnaryOperatorNode node) {\n        UnaryOperatorKind operatorKind = node.getUnaryOperatorKind();\n\n        String sqlOperator = \"\";\n\n        switch (operatorKind) {\n            case Not:\n                sqlOperator = \"NOT\";\n                break;\n            case Parenthesis:\n                break;\n        }\n\n        return sqlOperator;\n    }\n\n    private static String getSQLOperator(BinaryOperatorNode node) {\n        BinaryOperatorKind operatorKind = node.getBinaryOperatorKind();\n\n        String sqlOperator = \"\";\n\n        switch (operatorKind) {\n            case Or:\n                sqlOperator = \"OR\";\n                break;\n            case And:\n                sqlOperator = \"AND\";\n                break;\n            case Eq:\n                sqlOperator = \"=\";\n                if (node.getRightArgument() instanceof ConstantNode) {\n                    ConstantNode rightArgument = (ConstantNode) node.getRightArgument();\n                    if (rightArgument.getValue() == null) {\n                        sqlOperator = \"IS\";\n                    }\n                }\n                break;\n            case Ne:\n                sqlOperator = \"<>\";\n                if (node.getRightArgument() instanceof ConstantNode) {\n                    ConstantNode rightArgument = (ConstantNode) node.getRightArgument();\n                    if (rightArgument.getValue() == null) {\n                        sqlOperator = \"IS NOT\";\n                    }\n                }\n                break;\n            case Gt:\n                sqlOperator = \">\";\n                break;\n            case Ge:\n                sqlOperator = \">=\";\n                break;\n            case Lt:\n                sqlOperator = \"<\";\n                break;\n            case Le:\n                sqlOperator = \"<=\";\n                break;\n            case Add:\n                sqlOperator = \"+\";\n                break;\n            case Sub:\n                sqlOperator = \"-\";\n                break;\n            case Mul:\n                sqlOperator = \"*\";\n                break;\n            case Div:\n                sqlOperator = \"/\";\n                break;\n            case Mod:\n                sqlOperator = \"%\";\n                break;\n        }\n\n        return sqlOperator;\n    }\n\n    private static String getSQLOperatorFormat(FunctionCallNode node) {\n        String operatorFormat = \"\";\n        FunctionCallKind operatorKind = node.getFunctionCallKind();\n\n        switch (operatorKind) {\n            case Year:\n                operatorFormat = formatDateOperation(\"%%Y\");\n                break;\n            case Month:\n                operatorFormat = formatDateOperation(\"%%m\");\n                break;\n            case Day:\n                operatorFormat = formatDateOperation(\"%%d\");\n                break;\n            case Hour:\n                operatorFormat = formatDateOperation(\"%%H\");\n                break;\n            case Minute:\n                operatorFormat = formatDateOperation(\"%%M\");\n                break;\n            case Second:\n                operatorFormat = formatDateOperation(\"%%s\");\n                break;\n            case Floor:\n                operatorFormat = formatMathOperation(-1);\n                break;\n            case Ceiling:\n                operatorFormat = formatMathOperation(1);\n                break;\n            case Round:\n                operatorFormat = formatMathOperation(0);\n                break;\n            case ToLower:\n                operatorFormat = formatOperation(\"lower\", node.getArguments().size());\n                break;\n            case ToUpper:\n                operatorFormat = formatOperation(\"upper\", node.getArguments().size());\n                break;\n            case Length:\n                operatorFormat = formatOperation(\"length\", node.getArguments().size());\n                break;\n            case Trim:\n                operatorFormat = formatOperation(\"trim\", node.getArguments().size());\n                break;\n            case StartsWith:\n                operatorFormat = formatStartsWithOperation();\n                break;\n            case EndsWith:\n                operatorFormat = formatEndsWithOperation();\n                break;\n            case SubstringOf:\n                operatorFormat = formatSubstringOfOperation();\n                break;\n            case Concat:\n                operatorFormat = formatConcatOperation();\n                break;\n            case IndexOf:\n                operatorFormat = formatIndexOfOperation();\n                break;\n            case Substring:\n                operatorFormat = formatSubstringOperation(node.getArguments().size());\n                break;\n            case Replace:\n                operatorFormat = formatOperation(\"replace\", node.getArguments().size());\n                break;\n        }\n\n        return operatorFormat;\n    }\n\n    private static String formatDateOperation(String datePart) {\n        StringBuilder builder = new StringBuilder();\n\n        builder.append(\"CAST(strftime('\");\n        builder.append(datePart);\n        builder.append(\"', %1$s) AS INTEGER)\");\n\n        return builder.toString();\n    }\n\n    private static String formatMathOperation(Integer roundDirection) {\n        StringBuilder builder = new StringBuilder();\n\n        if (roundDirection == 0) {\n            builder.append(\"round(%1$s)\");\n        } else {\n            String incorrectInequality = roundDirection < 0 ? \">\" : \"<\";\n            String correction = roundDirection < 0 ? \"-\" : \"+\";\n\n            builder.append(\"CASE WHEN round(%1$s) \");\n            builder.append(incorrectInequality);\n            builder.append(\" %1$s THEN round(%1$s) \");\n            builder.append(correction);\n            builder.append(\" 1 ELSE round(%1$s) END\");\n        }\n\n        return builder.toString();\n    }\n\n    private static String formatStartsWithOperation() {\n        StringBuilder builder = new StringBuilder();\n\n        builder.append(\"(%1$s LIKE (%2$s || '%%'))\");\n\n        return builder.toString();\n    }\n\n    private static String formatEndsWithOperation() {\n        StringBuilder builder = new StringBuilder();\n\n        builder.append(\"(%1$s LIKE ('%%' || %2$s))\");\n\n        return builder.toString();\n    }\n\n    private static String formatSubstringOfOperation() {\n        StringBuilder builder = new StringBuilder();\n\n        builder.append(\"(%2$s LIKE ('%%'  || %1$s || '%%'))\");\n\n        return builder.toString();\n    }\n\n    private static String formatSubstringOperation(int argumentsSize) {\n        StringBuilder builder = new StringBuilder();\n\n        if (argumentsSize == 2) {\n            builder.append(\"(substr(%1$s,(%2$s + 1)))\");\n        } else if (argumentsSize == 3) {\n            builder.append(\"(substr(%1$s,(%2$s + 1),%3$s))\");\n        }\n\n        return builder.toString();\n    }\n\n    private static String formatConcatOperation() {\n        return \"(%1$s || %2$s)\";\n    }\n\n    private static String formatIndexOfOperation() {\n        StringBuilder builder = new StringBuilder();\n\n        builder.append(\"(instr(%1$s,%2$s) - 1)\");\n\n        return builder.toString();\n    }\n\n    private static String formatOperation(String operation, Integer totalArguments) {\n        StringBuilder builder = new StringBuilder();\n\n        builder.append(operation);\n        builder.append(\"(\");\n        builder.append(formatArguments(totalArguments));\n        builder.append(\")\");\n\n        return builder.toString();\n    }\n\n    private static String formatArguments(Integer totalArguments) {\n        StringBuilder builder = new StringBuilder();\n\n        boolean first = true;\n\n        for (int index = 1; index <= totalArguments; index++) {\n            if (!first) {\n                builder.append(\",\");\n            } else {\n                first = false;\n            }\n\n            builder.append(\"%\");\n            builder.append(index);\n            builder.append(\"$s\");\n        }\n\n        return builder.toString();\n    }\n\n    private static String process(String s) {\n        return \"'\" + sanitize(s) + \"'\";\n    }\n\n    private static String process(Date date) {\n        return \"'\" + sanitize(DateSerializer.serialize(date)) + \"'\";\n    }\n\n    private static String process(Boolean value) {\n        return value ? \"1\" : \"0\";\n    }\n\n    /**\n     * Sanitizes the string to use in a oData query\n     *\n     * @param s The string to sanitize\n     * @return The sanitized string\n     */\n    private static String sanitize(String s) {\n        if (s != null) {\n            return s.replace(\"'\", \"''\");\n        } else {\n            return null;\n        }\n    }\n\n    /**\n     * Gets the StringBuilder with the SQL representation of the node\n     */\n    StringBuilder getBuilder() {\n        return this.mBuilder;\n    }\n\n    @Override\n    public QueryNode visit(ConstantNode node) {\n        Object value = node.getValue();\n        String constant = value != null ? value.toString() : \"NULL\";\n\n        if (value instanceof String) {\n            constant = process((String) value);\n        } else if (value instanceof Date) {\n            constant = process((Date) value);\n        } else if (value instanceof Boolean) {\n            constant = process((Boolean) value);\n        }\n\n        this.mBuilder.append(constant);\n\n        return node;\n    }\n\n    @Override\n    public QueryNode visit(FieldNode node) {\n        this.mBuilder.append(node.getFieldName());\n\n        return node;\n    }\n\n    @Override\n    public QueryNode visit(UnaryOperatorNode node) {\n        if (node.getUnaryOperatorKind() == UnaryOperatorKind.Parenthesis) {\n            this.mBuilder.append(\"(\");\n\n            if (node.getArgument() != null) {\n                node.getArgument().accept(this);\n            }\n\n            this.mBuilder.append(\")\");\n        } else {\n            this.mBuilder.append(getSQLOperator(node));\n\n            if (node.getArgument() != null) {\n                this.mBuilder.append(\" \");\n                node.getArgument().accept(this);\n            }\n        }\n\n        return node;\n    }\n\n    @Override\n    public QueryNode visit(BinaryOperatorNode node) {\n        if (node.getLeftArgument() != null) {\n            node.getLeftArgument().accept(this);\n            this.mBuilder.append(\" \");\n        }\n\n        this.mBuilder.append(getSQLOperator(node));\n\n        if (node.getRightArgument() != null) {\n            this.mBuilder.append(\" \");\n            node.getRightArgument().accept(this);\n        }\n\n        return node;\n    }\n\n    @Override\n    public QueryNode visit(FunctionCallNode node) {\n        String format = getSQLOperatorFormat(node);\n\n        Object[] args = new Object[node.getArguments().size()];\n        List<QueryNode> arguments = node.getArguments();\n\n        for (int index = 0; index < arguments.size(); index++) {\n            QueryNode argument = arguments.get(index);\n\n            QueryNodeSQLWriter internalVisitor = new QueryNodeSQLWriter();\n\n            argument.accept(internalVisitor);\n\n            args[index] = internalVisitor.getBuilder().toString();\n        }\n\n        this.mBuilder.append(String.format(format, args));\n\n        return node;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/QueryNodeVisitor.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * QueryNodeVisitor.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Interface of a query node visitor used to extend functionality.\n */\ninterface QueryNodeVisitor<E> {\n\n    /**\n     * Visit a constant node.\n     *\n     * @param nodeIn The node to visit\n     * @return Defined by the implementer.\n     */\n    E visit(ConstantNode nodeIn);\n\n    /**\n     * Visit a field node.\n     *\n     * @param nodeIn The node to visit\n     * @return Defined by the implementer.\n     */\n    E visit(FieldNode nodeIn);\n\n    /**\n     * Visit a unary operator node.\n     *\n     * @param nodeIn The node to visit\n     * @return Defined by the implementer.\n     */\n    E visit(UnaryOperatorNode nodeIn);\n\n    /**\n     * Visit a binary operator node.\n     *\n     * @param nodeIn The node to visit\n     * @return Defined by the implementer.\n     */\n    E visit(BinaryOperatorNode nodeIn);\n\n    /**\n     * Visit a function call node.\n     *\n     * @param nodeIn The node to visit\n     * @return Defined by the implementer.\n     */\n    E visit(FunctionCallNode nodeIn);\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/QueryODataWriter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * QueryODataWriter.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\nimport android.util.Pair;\n\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTableSystemPropertiesProvider;\n\nimport java.io.UnsupportedEncodingException;\nimport java.util.List;\n\npublic class QueryODataWriter {\n\n    /**\n     * Returns the OData string representation of the query\n     */\n    public static String getRowFilter(Query query) {\n        QueryNodeODataWriter oDataWriter = new QueryNodeODataWriter();\n\n        if (query != null && query.getQueryNode() != null) {\n            query.getQueryNode().accept(oDataWriter);\n        }\n\n        return oDataWriter.getBuilder().toString();\n    }\n\n    /**\n     * Returns the OData string representation of the rowset's modifiers\n     *\n     * @throws java.io.UnsupportedEncodingException\n     */\n    public static String getRowSetModifiers(Query query, MobileServiceTableSystemPropertiesProvider table) throws UnsupportedEncodingException {\n        StringBuilder sb = new StringBuilder();\n\n        if (query != null) {\n            if (query.hasInlineCount()) {\n                sb.append(\"&$inlinecount=allpages\");\n            }\n\n            if (query.getTop() > 0) {\n                sb.append(\"&$top=\");\n                sb.append(query.getTop());\n            }\n\n            //Allow Skip=0 to work around a SQL ordering issue #571\n            if (query.getSkip() >= 0) {\n                sb.append(\"&$skip=\");\n                sb.append(query.getSkip());\n            }\n\n            if (query.getOrderBy().size() > 0) {\n                sb.append(\"&$orderby=\");\n\n                boolean first = true;\n                for (Pair<String, QueryOrder> order : query.getOrderBy()) {\n                    if (first) {\n                        first = false;\n                    } else {\n                        sb.append(\",\");\n                    }\n\n                    sb.append(QueryNodeODataWriter.percentEncode(order.first, \"!$&'()*+,;=:@\")); // odataIdentifier\n                    sb.append(\"%20\");\n                    sb.append(order.second == QueryOrder.Ascending ? \"asc\" : \"desc\");\n\n                }\n            }\n\n            if (query.hasDeleted()) {\n                sb.append(\"&__includeDeleted=true\");\n            }\n        }\n\n        List<Pair<String, String>> parameters = table.addSystemProperties(table.getSystemProperties(), query != null ? query.getUserDefinedParameters() : null);\n\n        for (Pair<String, String> parameter : parameters) {\n            if (parameter.first != null) {\n                sb.append(\"&\");\n\n                String key = parameter.first;\n                String value = parameter.second;\n                if (value == null)\n                    value = \"null\";\n\n                sb.append(QueryNodeODataWriter.percentEncode(key, \"!$'()*,;:@\")); // customName\n                sb.append(\"=\");\n                sb.append(QueryNodeODataWriter.percentEncode(value, \"!$'()*,;=:@\")); // customValue\n            }\n        }\n\n        if (query != null && query.getProjection() != null && query.getProjection().size() > 0) {\n            sb.append(\"&$select=\");\n\n            boolean first = true;\n            for (String field : query.getProjection()) {\n                if (first) {\n                    first = false;\n                } else {\n                    sb.append(\",\");\n                }\n\n                sb.append(QueryNodeODataWriter.percentEncode(field, \"!$&'()*,;=:@\")); // odataIdentifier\n            }\n        }\n\n        return sb.toString();\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/QueryOperations.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * QueryOperations.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\nimport java.util.Date;\n\n/**\n * Class used to create query operations\n */\npublic class QueryOperations {\n\n    /**\n     * Creates Query with the requested table name.\n     *\n     * @param tableName The name of the table\n     * @return The Query\n     */\n    public static Query tableName(String tableName) {\n        if (tableName == null || tableName.trim().length() == 0) {\n            throw new IllegalArgumentException(\"tableName cannot be null or empty\");\n        }\n\n        Query query = new QueryBase();\n\n        query.tableName(tableName);\n\n        return query;\n    }\n\n    /**\n     * Creates Query representing a field\n     *\n     * @param fieldName The name of the field\n     * @return The Query\n     */\n    public static Query field(String fieldName) {\n        if (fieldName == null || fieldName.trim().length() == 0) {\n            throw new IllegalArgumentException(\"fieldName cannot be null or empty\");\n        }\n\n        Query query = new QueryBase();\n\n        FieldNode fieldNode = new FieldNode();\n        fieldNode.setFieldName(fieldName);\n\n        query.setQueryNode(fieldNode);\n\n        return query;\n    }\n\n    /**\n     * Creates a Query representing a numeric value\n     *\n     * @param number the number to represent\n     * @return the Query\n     */\n    public static Query val(Number number) {\n        Query query = new QueryBase();\n\n        ConstantNode constantNode = new ConstantNode();\n        constantNode.setValue(number);\n\n        query.setQueryNode(constantNode);\n\n        return query;\n    }\n\n    /**\n     * Creates a Query representing a boolean value\n     *\n     * @param val the boolean to represent\n     * @return the Query\n     */\n    public static Query val(boolean val) {\n        Query query = new QueryBase();\n\n        ConstantNode constantNode = new ConstantNode();\n        constantNode.setValue(val);\n\n        query.setQueryNode(constantNode);\n\n        return query;\n    }\n\n    /**\n     * Creates a Query representing a string value\n     *\n     * @param s the string to represent\n     * @return the Query\n     */\n    public static Query val(String s) {\n        Query query = new QueryBase();\n\n        ConstantNode constantNode = new ConstantNode();\n        constantNode.setValue(s);\n\n        query.setQueryNode(constantNode);\n\n        return query;\n    }\n\n    /**\n     * Creates a Query representing a date value\n     *\n     * @param date the date to represent\n     * @return the Query\n     */\n    public static Query val(Date date) {\n        Query query = new QueryBase();\n\n        ConstantNode constantNode = new ConstantNode();\n        constantNode.setValue(date);\n\n        query.setQueryNode(constantNode);\n\n        return query;\n    }\n\n    /**\n     * Creates a Query representing a byte array\n     *\n     * @param byteArray the date to represent\n     * @return the Query\n     */\n    public static Query val(byte[] byteArray) {\n        Query query = new QueryBase();\n\n        ConstantNode constantNode = new ConstantNode();\n        constantNode.setValue(byteArray);\n\n        query.setQueryNode(constantNode);\n\n        return query;\n    }\n\n    /**\n     * Group query as a single argument.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query query(Query otherQuery) {\n        return unaryOperator(otherQuery, UnaryOperatorKind.Parenthesis);\n    }\n\n    /****** Logical Operators ******/\n\n    /**\n     * Conditional and.\n     *\n     * @return Query\n     */\n    public static Query and() {\n        return and(null);\n    }\n\n    /**\n     * Conditional and.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query and(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.And);\n    }\n\n    /**\n     * Conditional or.\n     *\n     * @return Query\n     */\n    public static Query or() {\n        return or(null);\n    }\n\n    /**\n     * Conditional or.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query or(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.Or);\n    }\n\n    /**\n     * Logical not.\n     *\n     * @return Query\n     */\n    public static Query not() {\n        return not(null);\n    }\n\n    /**\n     * Logical not.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query not(Query otherQuery) {\n        return unaryOperator(otherQuery, UnaryOperatorKind.Not);\n    }\n\n    /**\n     * Logical not.\n     *\n     * @param booleanValue\n     * @return Query\n     */\n    public static Query not(boolean booleanValue) {\n\n        return (Query) not(val(booleanValue));\n    }\n\n    /****** Comparison Operators ******/\n\n    /**\n     * Greater than or equal comparison operator.\n     *\n     * @return Query\n     */\n    public static Query ge() {\n        Query nullQuery = null;\n        return ge(nullQuery);\n    }\n\n    /**\n     * Greater than or equal comparison operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query ge(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.Ge);\n    }\n\n    /**\n     * Greater than or equal comparison operator.\n     *\n     * @param stringValue\n     * @return Query\n     */\n    public static Query ge(String stringValue) {\n        return ge(QueryOperations.val(stringValue));\n    }\n\n    /**\n     * Greater than or equal comparison operator.\n     *\n     * @param numberValue\n     * @return Query\n     */\n    public static Query ge(Number numberValue) {\n        return ge(QueryOperations.val(numberValue));\n    }\n\n    /**\n     * Greater than or equal comparison operator.\n     *\n     * @param dateValue\n     * @return Query\n     */\n    public static Query ge(Date dateValue) {\n        return ge(QueryOperations.val(dateValue));\n    }\n\n    /**\n     * Less than or equal comparison operator.\n     *\n     * @return Query\n     */\n    public static Query le() {\n        Query nullQuery = null;\n        return le(nullQuery);\n    }\n\n    /**\n     * Less than or equal comparison operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query le(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.Le);\n    }\n\n    /**\n     * Less than or equal comparison operator.\n     *\n     * @param numberValue\n     * @return Query\n     */\n    public static Query le(Number numberValue) {\n        return le(QueryOperations.val(numberValue));\n    }\n\n    /**\n     * Less than or equal comparison operator.\n     *\n     * @param dateValue\n     * @return Query\n     */\n    public static Query le(Date dateValue) {\n        return le(QueryOperations.val(dateValue));\n    }\n\n    /**\n     * Greater than comparison operator.\n     *\n     * @return Query\n     */\n    public static Query gt() {\n        Query nullQuery = null;\n        return gt(nullQuery);\n    }\n\n    /**\n     * Greater than comparison operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query gt(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.Gt);\n    }\n\n    /**\n     * Greater than comparison operator.\n     *\n     * @param numberValue\n     * @return Query\n     */\n    public static Query gt(Number numberValue) {\n        return gt(QueryOperations.val(numberValue));\n    }\n\n    /**\n     * Greater than comparison operator.\n     *\n     * @param dateValue\n     * @return Query\n     */\n    public static Query gt(Date dateValue) {\n        return gt(QueryOperations.val(dateValue));\n    }\n\n    /**\n     * Less than comparison operator.\n     *\n     * @return Query\n     */\n    public static Query lt() {\n        Query nullQuery = null;\n        return lt(nullQuery);\n    }\n\n    /**\n     * Less than comparison operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query lt(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.Lt);\n    }\n\n    /**\n     * Less than comparison operator.\n     *\n     * @param numberValue\n     * @return Query\n     */\n    public static Query lt(Number numberValue) {\n        return lt(QueryOperations.val(numberValue));\n    }\n\n    /**\n     * Less than comparison operator.\n     *\n     * @param dateValue\n     * @return Query\n     */\n    public static Query lt(Date dateValue) {\n        return lt(QueryOperations.val(dateValue));\n    }\n\n    /**\n     * Equal comparison operator.\n     *\n     * @return Query\n     */\n    public static Query eq() {\n        Query nullQuery = null;\n        return eq(nullQuery);\n    }\n\n    /**\n     * Equal comparison operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query eq(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.Eq);\n    }\n\n    /**\n     * Equal comparison operator.\n     *\n     * @param numberValue\n     * @return Query\n     */\n    public static Query eq(Number numberValue) {\n        return eq(QueryOperations.val(numberValue));\n    }\n\n    /**\n     * Equal comparison operator.\n     *\n     * @param booleanValue\n     * @return Query\n     */\n    public static Query eq(boolean booleanValue) {\n        return eq(QueryOperations.val(booleanValue));\n    }\n\n    /**\n     * Equal comparison operator.\n     *\n     * @param stringValue\n     * @return Query\n     */\n    public static Query eq(String stringValue) {\n        return eq(QueryOperations.val(stringValue));\n    }\n\n    /**\n     * Equal comparison operator.\n     *\n     * @param dateValue\n     * @return Query\n     */\n    public static Query eq(Date dateValue) {\n        return eq(QueryOperations.val(dateValue));\n    }\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @return Query\n     */\n    public static Query ne() {\n        Query nullQuery = null;\n        return ne(nullQuery);\n    }\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query ne(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.Ne);\n    }\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @param numberValue\n     * @return Query\n     */\n    public static Query ne(Number numberValue) {\n        return ne(QueryOperations.val(numberValue));\n    }\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @param booleanValue\n     * @return Query\n     */\n    public static Query ne(boolean booleanValue) {\n        return ne(QueryOperations.val(booleanValue));\n    }\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @param stringValue\n     * @return Query\n     */\n    public static Query ne(String stringValue) {\n        return ne(QueryOperations.val(stringValue));\n    }\n\n    /**\n     * Not equal comparison operator.\n     *\n     * @param dateValue\n     * @return Query\n     */\n    public static Query ne(Date dateValue) {\n        return ne(QueryOperations.val(dateValue));\n    }\n\n    /****** Arithmetic Operators ******/\n\n    /**\n     * Add operator.\n     *\n     * @return Query\n     */\n    public static Query add() {\n        Query nullQuery = null;\n        return add(nullQuery);\n    }\n\n    /**\n     * Add operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query add(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.Add);\n    }\n\n    /**\n     * Add operator.\n     *\n     * @param val\n     * @return Query\n     */\n    public static Query add(Number val) {\n        return add(val(val));\n    }\n\n    /**\n     * Subtract operator.\n     *\n     * @return Query\n     */\n    public static Query sub() {\n        Query nullQuery = null;\n        return sub(nullQuery);\n    }\n\n    /**\n     * Subtract operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query sub(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.Sub);\n    }\n\n    /**\n     * Subtract operator.\n     *\n     * @param val\n     * @return Query\n     */\n    public static Query sub(Number val) {\n        return sub(val(val));\n    }\n\n    /**\n     * Multiply operator.\n     *\n     * @return Query\n     */\n    public static Query mul() {\n        Query nullQuery = null;\n        return mul(nullQuery);\n    }\n\n    /**\n     * Multiply operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query mul(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.Mul);\n    }\n\n    /**\n     * Multiply operator.\n     *\n     * @param val\n     * @return Query\n     */\n    public static Query mul(Number val) {\n        return mul(val(val));\n    }\n\n    /**\n     * Divide operator.\n     *\n     * @return Query\n     */\n    public static Query div() {\n        Query nullQuery = null;\n        return div(nullQuery);\n    }\n\n    /**\n     * Divide operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query div(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.Div);\n    }\n\n    /**\n     * Divide operator.\n     *\n     * @param val\n     * @return Query\n     */\n    public static Query div(Number val) {\n        return div(val(val));\n    }\n\n    /**\n     * Reminder (or modulo) operator.\n     *\n     * @return Query\n     */\n    public static Query mod() {\n        Query nullQuery = null;\n        return mod(nullQuery);\n    }\n\n    /**\n     * Reminder (or modulo) operator.\n     *\n     * @param otherQuery\n     * @return Query\n     */\n    public static Query mod(Query otherQuery) {\n        return binaryOperator(otherQuery, BinaryOperatorKind.Mod);\n    }\n\n    /**\n     * Reminder (or modulo) operator.\n     *\n     * @param val\n     * @return Query\n     */\n    public static Query mod(Number val) {\n        return mod(val(val));\n    }\n\n    /****** Date Functions ******/\n\n    /**\n     * The year component value of the parameter value.\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query year(Query exp) {\n        return function(FunctionCallKind.Year, exp);\n    }\n\n    /**\n     * The year component value of the parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    public static Query year(String field) {\n        return function(FunctionCallKind.Year, field(field));\n    }\n\n    /**\n     * The month component value of the parameter value.\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query month(Query exp) {\n        return function(FunctionCallKind.Month, exp);\n    }\n\n    /**\n     * The month component value of the parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    public static Query month(String field) {\n        return function(FunctionCallKind.Month, field(field));\n    }\n\n    /**\n     * The day component value of the parameter value.\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query day(Query exp) {\n        return function(FunctionCallKind.Day, exp);\n    }\n\n    /**\n     * The day component value of the parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    public static Query day(String field) {\n        return function(FunctionCallKind.Day, field(field));\n    }\n\n    /**\n     * The hour component value of the parameter value.\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query hour(Query exp) {\n        return function(FunctionCallKind.Hour, exp);\n    }\n\n    /**\n     * The hour component value of the parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    public static Query hour(String field) {\n        return function(FunctionCallKind.Hour, field(field));\n    }\n\n    /**\n     * The minute component value of the parameter value.\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query minute(Query exp) {\n        return function(FunctionCallKind.Minute, exp);\n    }\n\n    /**\n     * The minute component value of the parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    public static Query minute(String field) {\n        return function(FunctionCallKind.Minute, field(field));\n    }\n\n    /**\n     * The second component value of the parameter value.\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query second(Query exp) {\n        return function(FunctionCallKind.Second, exp);\n    }\n\n    /**\n     * The second component value of the parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    public static Query second(String field) {\n        return function(FunctionCallKind.Second, field(field));\n    }\n\n    /****** Math Functions ******/\n\n    /**\n     * The largest integral value less than or equal to the parameter value.\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query floor(Query exp) {\n        return function(FunctionCallKind.Floor, exp);\n    }\n\n    /**\n     * The smallest integral value greater than or equal to the parameter value.\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query ceiling(Query exp) {\n        return function(FunctionCallKind.Ceiling, exp);\n    }\n\n    /**\n     * The nearest integral value to the parameter value.\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query round(Query exp) {\n        return function(FunctionCallKind.Round, exp);\n    }\n\n    /****** String Functions ******/\n\n    /**\n     * String value with the contents of the parameter value converted to lower\n     * case.\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query toLower(Query exp) {\n        return function(FunctionCallKind.ToLower, exp);\n    }\n\n    /**\n     * String value with the contents of the parameter value converted to lower\n     * case.\n     *\n     * @param field\n     * @return Query\n     */\n    public static Query toLower(String field) {\n        return toLower(field(field));\n    }\n\n    /**\n     * String value with the contents of the parameter value converted to upper\n     * case\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query toUpper(Query exp) {\n        return function(FunctionCallKind.ToUpper, exp);\n    }\n\n    /**\n     * String value with the contents of the parameter value converted to upper\n     * case\n     *\n     * @param field\n     * @return Query\n     */\n    public static Query toUpper(String field) {\n        return toUpper(field(field));\n    }\n\n    /**\n     * The number of characters in the specified parameter value.\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query length(Query exp) {\n        return function(FunctionCallKind.Length, exp);\n    }\n\n    /**\n     * The number of characters in the specified parameter value.\n     *\n     * @param field\n     * @return Query\n     */\n    public static Query length(String field) {\n        return length(field(field));\n    }\n\n    /**\n     * String value with the contents of the parameter value with all leading\n     * and trailing white-space characters removed.\n     *\n     * @param exp\n     * @return Query\n     */\n    public static Query trim(Query exp) {\n        return function(FunctionCallKind.Trim, exp);\n    }\n\n    /**\n     * String value with the contents of the parameter value with all leading\n     * and trailing white-space characters removed.\n     *\n     * @param field\n     * @return Query\n     */\n    public static Query trim(String field) {\n        return trim(field(field));\n    }\n\n    /**\n     * Whether the beginning of the first parameter values matches the second\n     * parameter value.\n     *\n     * @param field The field to evaluate.\n     * @param start Start value.\n     * @return Query\n     */\n    public static Query startsWith(Query field, Query start) {\n        return function(FunctionCallKind.StartsWith, field, start);\n    }\n\n    /**\n     * Whether the beginning of the first parameter values matches the second\n     * parameter value.\n     *\n     * @param field The field to evaluate.\n     * @param start Start value.\n     * @return Query\n     */\n    public static Query startsWith(String field, String start) {\n        return startsWith(field(field), val(start));\n    }\n\n    /**\n     * Whether the end of the first parameter value matches the second parameter\n     * value.\n     *\n     * @param field The field to evaluate.\n     * @param end   End value.\n     * @return Query\n     */\n    public static Query endsWith(Query field, Query end) {\n        return function(FunctionCallKind.EndsWith, field, end);\n    }\n\n    /**\n     * Whether the end of the first parameter value matches the second parameter\n     * value.\n     *\n     * @param field The field to evaluate.\n     * @param end   End value.\n     * @return Query\n     */\n    public static Query endsWith(String field, String end) {\n        return endsWith(field(field), val(end));\n    }\n\n    /**\n     * Whether the first parameter string value occurs in the second parameter\n     * string value.\n     *\n     * @param str1 First string\n     * @param str2 Second string\n     * @return Query\n     */\n    public static Query subStringOf(Query str1, Query str2) {\n        return function(FunctionCallKind.SubstringOf, str1, str2);\n    }\n\n    /**\n     * Whether the string parameter occurs in the field\n     *\n     * @param str   String to search\n     * @param field Field to search in\n     * @return Query\n     */\n    public static Query subStringOf(String str, String field) {\n        return subStringOf(val(str), field(field));\n    }\n\n    /**\n     * String value which is the first and second parameter values merged\n     * together with the first parameter value coming first in the result.\n     *\n     * @param str1 First string\n     * @param str2 Second string\n     * @return Query\n     */\n    public static Query concat(Query str1, Query str2) {\n        return function(FunctionCallKind.Concat, str1, str2);\n    }\n\n    /**\n     * String value which is the first and second parameter values merged\n     * together with the first parameter value coming first in the result.\n     *\n     * @param str1 First string\n     * @param str2 Second string\n     * @return Query\n     */\n    public static Query concat(Query str1, String str2) {\n        return function(FunctionCallKind.Concat, str1, val(str2));\n    }\n\n    /**\n     * Index of the first occurrence of the second parameter value in the first\n     * parameter value or -1 otherwise.\n     *\n     * @param haystack String content\n     * @param needle   Value to search for\n     * @return Query\n     */\n    public static Query indexOf(Query haystack, Query needle) {\n        return function(FunctionCallKind.IndexOf, haystack, needle);\n    }\n\n    /**\n     * Index of the first occurrence of the second parameter value in the first\n     * parameter value or -1 otherwise.\n     *\n     * @param field Field to seach in\n     * @param str   Value to search for\n     * @return Query\n     */\n    public static Query indexOf(String field, String str) {\n        return indexOf(field(field), val(str));\n    }\n\n    /**\n     * String value starting at the character index specified by the second\n     * parameter value in the first parameter string value.\n     *\n     * @param str String content\n     * @param pos Starting position\n     * @return Query\n     */\n    public static Query subString(Query str, Query pos) {\n        return function(FunctionCallKind.Substring, str, pos);\n    }\n\n    /**\n     * String value starting at the character index specified by the second\n     * parameter value in the first parameter string value.\n     *\n     * @param field Field to scan\n     * @param pos   Starting position\n     * @return Query\n     */\n    public static Query subString(String field, int pos) {\n        return subString(field(field), val(pos));\n    }\n\n    /**\n     * String value starting at the character index specified by the second\n     * parameter value in the first parameter string value.\n     *\n     * @param str    String content\n     * @param pos    Starting position\n     * @param length Length\n     * @return Query\n     */\n    public static Query subString(Query str, Query pos, Query length) {\n        return function(FunctionCallKind.Substring, str, pos, length);\n    }\n\n    /**\n     * String value starting at the character index specified by the second\n     * parameter value in the first parameter string value.\n     *\n     * @param field  Field to scan\n     * @param pos    Starting position\n     * @param length Length\n     * @return Query\n     */\n    public static Query subString(String field, int pos, int length) {\n        return subString(field(field), val(pos), val(length));\n    }\n\n    /**\n     * Finds the second string parameter in the first parameter string value and\n     * replaces it with the third parameter value.\n     *\n     * @param str     String content\n     * @param find    Search value\n     * @param replace Replace value\n     * @return Query\n     */\n    public static Query replace(Query str, Query find, Query replace) {\n        return function(FunctionCallKind.Replace, str, find, replace);\n    }\n\n    /**\n     * Finds the second string parameter in the first parameter string value and\n     * replaces it with the third parameter value.\n     *\n     * @param field   Field to scan\n     * @param find    Search value\n     * @param replace Replace value\n     * @return Query\n     */\n    public static Query replace(String field, String find, String replace) {\n        return replace(field(field), val(find), val(replace));\n    }\n\n    /**\n     * Join the left and right queries, modifying the left query.\n     *\n     * @param leftQuery  The destination query to be modified.\n     * @param rightQuery The source query to be joined with the destination query.\n     */\n    static void join(Query leftQuery, Query rightQuery) {\n        if (leftQuery == null) {\n            throw new IllegalArgumentException(\"Left Mobile Service query cannot be null.\");\n        }\n\n        if (rightQuery == null) {\n            throw new IllegalArgumentException(\"Right Mobile Service query cannot be null.\");\n        }\n\n        if (leftQuery.getQueryNode() == null) {\n            leftQuery.setQueryNode(rightQuery.getQueryNode());\n        } else if (rightQuery.getQueryNode() != null) {\n            leftQuery.setQueryNode(merge(leftQuery.getQueryNode(), rightQuery.getQueryNode()));\n        }\n    }\n\n    private static QueryNode merge(QueryNode leftNode, QueryNode rightNode) {\n        return leftNode.accept(new QueryNodeMerger(rightNode));\n    }\n\n    /**\n     * Creates a Query representing a binary operator\n     *\n     * @param otherQuery   The query to operateWith\n     * @param operatorKind The binary operator kind\n     * @return The Query representing an operation\n     */\n    private static Query unaryOperator(Query otherQuery, UnaryOperatorKind operatorKind) {\n        Query query = new QueryBase();\n\n        UnaryOperatorNode unaryOperatorNode = new UnaryOperatorNode(operatorKind);\n\n        if (otherQuery != null && otherQuery.getQueryNode() != null) {\n            if (operatorKind != UnaryOperatorKind.Parenthesis) {\n                UnaryOperatorNode parenthesisNode = new UnaryOperatorNode(UnaryOperatorKind.Parenthesis);\n                parenthesisNode.setArgument(otherQuery.getQueryNode());\n\n                unaryOperatorNode.setArgument(parenthesisNode);\n            } else {\n                unaryOperatorNode.setArgument(otherQuery.getQueryNode());\n            }\n        }\n\n        query.setQueryNode(unaryOperatorNode);\n\n        return query;\n    }\n\n    /**\n     * Creates a Query representing a binary operator\n     *\n     * @param otherQuery   The query to operateWith\n     * @param operatorKind The binary operator kind\n     * @return The Query representing an operation\n     */\n    private static Query binaryOperator(Query otherQuery, BinaryOperatorKind operatorKind) {\n        Query query = new QueryBase();\n\n        BinaryOperatorNode binaryOperatorNode = new BinaryOperatorNode(operatorKind);\n\n        if (otherQuery != null && otherQuery.getQueryNode() != null) {\n            UnaryOperatorNode parenthesisNode = new UnaryOperatorNode(UnaryOperatorKind.Parenthesis);\n            parenthesisNode.setArgument(otherQuery.getQueryNode());\n\n            binaryOperatorNode.setRightArgument(parenthesisNode);\n        }\n\n        query.setQueryNode(binaryOperatorNode);\n\n        return query;\n    }\n\n    /**\n     * Creates a Query representing a function call\n     *\n     * @param operatorKind The function name\n     * @param parameters   The function parameters\n     * @return The Query representing a function call\n     */\n    private static Query function(FunctionCallKind operatorKind, Query... parameters) {\n\n        Query query = new QueryBase();\n\n        FunctionCallNode functionCallNode = new FunctionCallNode(operatorKind);\n\n        for (Query p : parameters) {\n            if (p.getQueryNode() != null) {\n                functionCallNode.addArgument(p.getQueryNode());\n            }\n        }\n\n        query.setQueryNode(functionCallNode);\n\n        return query;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/QueryOrder.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * QueryOrder.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Sort order values\n */\npublic enum QueryOrder {\n    Ascending, Descending\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/QuerySQLWriter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * QuerySQLWriter.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\nimport android.util.Pair;\n\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\n\nimport java.util.Locale;\n\npublic class QuerySQLWriter {\n\n    /**\n     * Returns the SQL string representation of the query's select clause\n     */\n    public static String getSelectClause(Query query) {\n        String result = \"*\";\n\n        if (query != null && query.getProjection() != null && query.getProjection().size() > 0) {\n            StringBuilder sb = new StringBuilder();\n\n            int index = 0;\n            for (String projection : query.getProjection()) {\n                sb.append(\"\\\"\");\n                sb.append(projection.trim().toLowerCase(Locale.getDefault()));\n                sb.append(\"\\\" \");\n\n                if (index < query.getProjection().size() - 1) {\n                    sb.append(\", \");\n                }\n\n                index++;\n            }\n\n            result = sb.toString();\n        }\n\n        return result;\n    }\n\n    /**\n     * Returns the SQL string representation of the query's where clause\n     */\n    public static String getWhereClause(Query query) throws MobileServiceException {\n        QueryNodeSQLWriter sqlWriter = new QueryNodeSQLWriter();\n\n        if (query != null && query.getQueryNode() != null) {\n            query.getQueryNode().accept(sqlWriter);\n        }\n\n        return sqlWriter.getBuilder().toString();\n    }\n\n    /**\n     * Returns the SQL string representation of the query's order by clause\n     */\n    public static String getOrderByClause(Query query) {\n        String result = null;\n\n        if (query != null && query.getOrderBy() != null && query.getOrderBy().size() > 0) {\n            StringBuilder sb = new StringBuilder();\n\n            int index = 0;\n            for (Pair<String, QueryOrder> order : query.getOrderBy()) {\n                sb.append(\"\\\"\");\n                sb.append(order.first.trim().toLowerCase(Locale.getDefault()));\n                sb.append(\"\\\" \");\n\n                String direction = order.second == QueryOrder.Ascending ? \"ASC\" : \"DESC\";\n                sb.append(direction);\n\n                if (index < query.getOrderBy().size() - 1) {\n                    sb.append(\", \");\n                }\n\n                index++;\n            }\n\n            result = sb.toString();\n        }\n\n        return result;\n    }\n\n    /**\n     * Returns the SQL string representation of the query's limit clause\n     */\n    public static String getLimitClause(Query query) {\n        String result = null;\n\n        int limit = query != null ? query.getTop() : 0;\n        int offset = query != null ? (query.getSkip() >= 0 ? query.getSkip() : 0) : 0;\n\n        if (limit > 0 || offset > 0) {\n            result = String.valueOf(offset) + \",\" + String.valueOf(limit);\n        }\n\n        return result;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorKind.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * UnaryOperatorKind.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Enumeration of kinds of unary operators.\n */\npublic enum UnaryOperatorKind {\n\n    /**\n     * Logical Not Operator.\n     */\n    Not,\n\n    /**\n     * Parenthesis precedence modifier.\n     */\n    Parenthesis\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorNode.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * UnaryOperatorNode.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Class that represents a unary operator query node\n */\nclass UnaryOperatorNode implements QueryNode {\n    private UnaryOperatorKind mUnaryOperatorKind;\n    private QueryNode mArgument;\n\n    /**\n     * Constructor for UnaryOperatorNode\n     *\n     * @param unaryOperatorKind The unary operator kind\n     */\n    UnaryOperatorNode(UnaryOperatorKind unaryOperatorKind) {\n        this.mUnaryOperatorKind = unaryOperatorKind;\n    }\n\n    @Override\n    public QueryNode deepClone() {\n        UnaryOperatorNode clone = new UnaryOperatorNode(this.mUnaryOperatorKind);\n\n        clone.mArgument = this.mArgument.deepClone();\n\n        return clone;\n    }\n\n    @Override\n    public QueryNodeKind getKind() {\n        return QueryNodeKind.UnaryOperator;\n    }\n\n    @Override\n    public <T> T accept(QueryNodeVisitor<T> visitor) {\n        return visitor.visit(this);\n    }\n\n    /**\n     * Gets the kind of unary operator node.\n     */\n    UnaryOperatorKind getUnaryOperatorKind() {\n        return this.mUnaryOperatorKind;\n    }\n\n    /**\n     * Gets the argument query node of the unary operator.\n     */\n    QueryNode getArgument() {\n        return this.mArgument;\n    }\n\n    /**\n     * Sets the argument query node of the unary operator.\n     */\n    void setArgument(QueryNode argument) {\n        this.mArgument = argument;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/query/UnaryOperatorNodeMerger.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * UnaryOperatorNodeMerger.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.query;\n\n/**\n * Class that represents a unary operator node merger\n */\nclass UnaryOperatorNodeMerger implements QueryNodeVisitor<QueryNode> {\n    private UnaryOperatorNode mLeftNode;\n\n    /**\n     * Constructor for UnaryOperatorNodeMerger\n     *\n     * @param leftNode The left binary operator node\n     */\n    UnaryOperatorNodeMerger(UnaryOperatorNode leftNode) {\n        this.mLeftNode = leftNode;\n    }\n\n    @Override\n    public QueryNode visit(ConstantNode rightNode) {\n        return mergeLeft(rightNode);\n    }\n\n    @Override\n    public QueryNode visit(FieldNode rightNode) {\n        return mergeLeft(rightNode);\n    }\n\n    @Override\n    public QueryNode visit(UnaryOperatorNode rightNode) {\n        return mergeLeft(rightNode);\n    }\n\n    @Override\n    public QueryNode visit(BinaryOperatorNode rightNode) {\n        if (this.mLeftNode.getArgument() != null) {\n            if (rightNode.getLeftArgument() != null) {\n                throw QueryNodeMerger.getInvalidSequenceException();\n            }\n\n            rightNode.setLeftArgument(this.mLeftNode);\n\n            return rightNode;\n        } else {\n            this.mLeftNode.setArgument(rightNode);\n\n            return this.mLeftNode;\n        }\n    }\n\n    @Override\n    public QueryNode visit(FunctionCallNode rightNode) {\n        return mergeLeft(rightNode);\n    }\n\n    private QueryNode mergeLeft(QueryNode rightNode) {\n        if (this.mLeftNode.getArgument() != null) {\n            throw QueryNodeMerger.getInvalidSequenceException();\n        }\n\n        this.mLeftNode.setArgument(rightNode);\n\n        return this.mLeftNode;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/serialization/DateSerializer.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * DateSerializer.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.serialization;\n\nimport android.annotation.SuppressLint;\n\nimport com.google.gson.JsonDeserializationContext;\nimport com.google.gson.JsonDeserializer;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonParseException;\nimport com.google.gson.JsonPrimitive;\nimport com.google.gson.JsonSerializationContext;\nimport com.google.gson.JsonSerializer;\n\nimport java.lang.reflect.Type;\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\nimport java.util.Locale;\nimport java.util.TimeZone;\n\n/**\n * Date Serializer/Deserializer to make Mobile Services and Java dates\n * compatible\n */\n@SuppressLint(\"SimpleDateFormat\")\npublic class DateSerializer implements JsonSerializer<Date>, JsonDeserializer<Date> {\n\n    /**\n     * Deserializes an ISO-8601 formatted date\n     */\n    public static Date deserialize(String strVal) throws ParseException {\n\n        String s = strVal;\n\n        // Parse the well-formatted date string\n        SimpleDateFormat dateFormat = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss'.'SSSZ\");\n        dateFormat.setTimeZone(TimeZone.getDefault());\n\n        try {\n\n            String[] splittedByDot = strVal.split(\"\\\\.\");\n\n            if (splittedByDot.length == 1) {\n                //We need to add the miliseconds\n                s = s.replace(\"Z\", \".000Z\");\n            } else {\n\n                String miliseconds = splittedByDot[splittedByDot.length - 1].replace(\"Z\", \"\");\n\n                if (miliseconds.length() == 1) {\n                    miliseconds = \"00\" + miliseconds;\n                } else if (miliseconds.length() == 2) {\n                    miliseconds = \"0\" + miliseconds;\n                }\n\n                s = splittedByDot[0] + \".\" + miliseconds + \"Z\";\n            }\n\n            // Change Z to +0000 to adapt the string to a format\n            // that can be parsed in Java\n            s = s.replace(\"Z\", \"+0000\");\n\n        } catch (IndexOutOfBoundsException e) {\n            throw new JsonParseException(\"Invalid length\");\n        }\n\n        Date date = dateFormat.parse(s);\n\n        return date;\n    }\n\n    /**\n     * Serializes a Date object to an ISO-8601 formatted date string\n     */\n    public static String serialize(Date date) {\n        SimpleDateFormat dateFormat = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss'.'SSS'Z'\", Locale.getDefault());\n        dateFormat.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\n        String formatted = dateFormat.format(date);\n\n        return formatted;\n    }\n\n    /**\n     * Deserializes a JsonElement containing an ISO-8601 formatted date\n     */\n    @Override\n    public Date deserialize(JsonElement element, Type type, JsonDeserializationContext ctx) throws JsonParseException {\n        String strVal = element.getAsString();\n\n        try {\n            return deserialize(strVal);\n        } catch (ParseException e) {\n            throw new JsonParseException(e);\n        }\n\n    }\n\n    /**\n     * Serializes a Date to a JsonElement containing a ISO-8601 formatted date\n     */\n    @Override\n    public JsonElement serialize(Date date, Type type, JsonSerializationContext ctx) {\n        JsonElement element = new JsonPrimitive(serialize(date));\n        return element;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/serialization/JsonEntityParser.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * JsonEntityParser.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.serialization;\n\nimport com.google.gson.Gson;\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.annotations.SerializedName;\n\nimport java.lang.reflect.Field;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class JsonEntityParser {\n    /**\n     * Parses the JSON object to a typed list\n     *\n     * @param results JSON results\n     * @param gson    Gson object used for parsing\n     * @param clazz   Target entity class\n     * @return List of entities\n     */\n    public static <E> List<E> parseResults(JsonElement results, Gson gson, Class<E> clazz) {\n        List<E> result = new ArrayList<E>();\n        String idPropertyName = getIdPropertyName(clazz);\n\n        // Parse results\n        if (results.isJsonArray()) {\n            // Query result\n            JsonArray elements = results.getAsJsonArray();\n\n            for (JsonElement element : elements) {\n                changeIdPropertyName(element.getAsJsonObject(), idPropertyName);\n                E typedElement = gson.fromJson(element, clazz);\n                result.add(typedElement);\n            }\n        } else {\n            // Lookup result\n            if (results.isJsonObject()) {\n                changeIdPropertyName(results.getAsJsonObject(), idPropertyName);\n            }\n            E typedElement = gson.fromJson(results, clazz);\n            result.add(typedElement);\n        }\n\n        return result;\n    }\n\n    /**\n     * Get's the class' id property name\n     *\n     * @param clazz\n     * @return Id Property name\n     */\n    @SuppressWarnings(\"rawtypes\")\n    private static String getIdPropertyName(Class clazz) {\n        // Search for annotation called id, regardless case\n        for (Field field : clazz.getDeclaredFields()) {\n\n            SerializedName serializedName = field.getAnnotation(SerializedName.class);\n            if (serializedName != null && serializedName.value().equalsIgnoreCase(\"id\")) {\n                return serializedName.value();\n            } else if (field.getName().equalsIgnoreCase(\"id\")) {\n                return field.getName();\n            }\n        }\n\n        // Otherwise, return empty\n        return \"\";\n    }\n\n    /**\n     * Changes returned JSon object's id property name to match with type's id\n     * property name.\n     *\n     * @param element\n     * @param propertyName\n     */\n    private static void changeIdPropertyName(JsonObject element, String propertyName) {\n        // If the property name is id or if there's no id defined, then return\n        // without performing changes\n        if (propertyName.equals(\"id\") || propertyName.length() == 0)\n            return;\n\n        if (element.has(\"id\")) {\n\n            JsonElement idElement = element.get(\"id\");\n\n            String value = idElement.isJsonNull() ? null : idElement.getAsString();\n            element.remove(\"id\");\n\n            // Create a new id property using the given property name\n            element.addProperty(propertyName, value);\n        }\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/serialization/LongSerializer.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * LongSerializer.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.serialization;\n\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonNull;\nimport com.google.gson.JsonPrimitive;\nimport com.google.gson.JsonSerializationContext;\nimport com.google.gson.JsonSerializer;\n\nimport java.lang.reflect.Type;\n\n/**\n * Long Serializer to avoid losing precision when sending data to Mobile\n * Services\n */\npublic class LongSerializer implements JsonSerializer<Long> {\n\n    /**\n     * Serializes a Long instance to a JsonElement, verifying the maximum and\n     * minimum allowed values\n     */\n    @Override\n    public JsonElement serialize(Long element, Type type, JsonSerializationContext ctx) {\n        Long maxAllowedValue = 0x0020000000000000L;\n        Long minAllowedValue = Long.valueOf(0xFFE0000000000000L);\n        if (element != null) {\n            if (element > maxAllowedValue || element < minAllowedValue) {\n                throw new IllegalArgumentException(\"Long value must be between \" + minAllowedValue + \" and \" + maxAllowedValue);\n            } else {\n                return new JsonPrimitive(element);\n            }\n        } else {\n            return JsonNull.INSTANCE;\n        }\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceJsonSyncTable.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceJsonSyncTable.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.google.gson.JsonSyntaxException;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceFeatures;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException;\n\nimport java.util.EnumSet;\nimport java.util.UUID;\n\n/**\n * Provides operations on local table.\n */\npublic class MobileServiceJsonSyncTable {\n    protected EnumSet<MobileServiceFeatures> mFeatures;\n    private String mName;\n    private MobileServiceClient mClient;\n\n    /**\n     * Constructor for MobileServiceJsonSyncTable\n     *\n     * @param name   The name of the represented table\n     * @param client The MobileServiceClient used to invoke table operations\n     */\n    public MobileServiceJsonSyncTable(String name, MobileServiceClient client) {\n        this.mName = name;\n        this.mClient = client;\n        this.mFeatures = EnumSet.of(MobileServiceFeatures.Offline);\n    }\n\n    /**\n     * Returns the name of the represented table\n     */\n    public String getName() {\n        return mName;\n    }\n\n    /**\n     * Performs a query against the remote table and stores results.\n     *\n     * @param query an optional query to filter results\n     * @return A ListenableFuture that is done when results have been pulled.\n     */\n    public ListenableFuture<Void> pull(final Query query, final String queryId) {\n        final MobileServiceJsonSyncTable thisTable = this;\n        final SettableFuture<Void> result = SettableFuture.create();\n\n        new Thread(new Runnable() {\n\n            @Override\n            public void run() {\n                try {\n                    thisTable.mClient.getSyncContext().pull(thisTable.mName, query, queryId);\n\n                    result.set(null);\n                } catch (Throwable throwable) {\n                    result.setException(throwable);\n                }\n            }\n        }).start();\n\n        return result;\n    }\n\n    /**\n     * Performs a query against the remote table and stores results.\n     *\n     * @param query an optional query to filter results\n     * @return A ListenableFuture that is done when results have been pulled.\n     */\n    public ListenableFuture<Void> pull(final Query query) {\n\n        return pull(query, null);\n    }\n\n    /**\n     * Performs a query against the local table and deletes the results.\n     *\n     * @param query an optional query to filter results\n     * @return A ListenableFuture that is done when results have been purged.\n     */\n    public ListenableFuture<Void> purge(final Query query) {\n        final MobileServiceJsonSyncTable thisTable = this;\n        final SettableFuture<Void> result = SettableFuture.create();\n\n        new Thread(new Runnable() {\n\n            @Override\n            public void run() {\n                try {\n                    thisTable.mClient.getSyncContext().purge(thisTable.mName, query);\n\n                    result.set(null);\n                } catch (Throwable throwable) {\n                    result.setException(throwable);\n                }\n            }\n        }).start();\n\n        return result;\n    }\n\n    /**\n     * Insert an item into the local table and enqueue the operation to be\n     * synchronized on context push.\n     *\n     * @param item the item to be inserted\n     * @return A ListenableFuture that is done when the item has been inserted,\n     * returning a copy of the inserted item including id.\n     */\n    public ListenableFuture<JsonObject> insert(final JsonObject item) {\n        final MobileServiceJsonSyncTable thisTable = this;\n        final SettableFuture<JsonObject> result = SettableFuture.create();\n\n        new Thread(new Runnable() {\n\n            @Override\n            public void run() {\n                try {\n                    JsonObject newItem = thisTable.insertContext(item);\n\n                    result.set(newItem);\n                } catch (Throwable throwable) {\n                    result.setException(throwable);\n                }\n            }\n        }).start();\n\n        return result;\n    }\n\n    /**\n     * Retrieve results from the local table.\n     *\n     * @param query an optional query to filter results\n     * @return A ListenableFuture that is done when the results have been\n     * retrieved.\n     */\n    public ListenableFuture<JsonElement> read(final Query query) {\n        final MobileServiceJsonSyncTable thisTable = this;\n        final SettableFuture<JsonElement> result = SettableFuture.create();\n\n        new Thread(new Runnable() {\n\n            @Override\n            public void run() {\n                try {\n                    JsonElement results = thisTable.readContext(query);\n\n                    result.set(results);\n                } catch (Throwable throwable) {\n                    result.setException(throwable);\n                }\n            }\n        }).start();\n\n        return result;\n    }\n\n    /**\n     * Looks up an item from the local table.\n     *\n     * @param itemId the id of the item to look up\n     * @return A ListenableFuture that is done when the item has been looked up.\n     */\n    public ListenableFuture<JsonObject> lookUp(final String itemId) {\n        final MobileServiceJsonSyncTable thisTable = this;\n        final SettableFuture<JsonObject> result = SettableFuture.create();\n\n        new Thread(new Runnable() {\n\n            @Override\n            public void run() {\n                try {\n                    JsonObject item = thisTable.lookUpContext(itemId);\n\n                    result.set(item);\n                } catch (Throwable throwable) {\n                    result.setException(throwable);\n                }\n            }\n        }).start();\n\n        return result;\n    }\n\n    /**\n     * Update an item in the local table and enqueue the operation to be\n     * synchronized on context push.\n     *\n     * @param item the item to be updated\n     * @return A ListenableFuture that is done when the item has been updated.\n     */\n    public ListenableFuture<Void> update(final JsonObject item) {\n        final MobileServiceJsonSyncTable thisTable = this;\n        final SettableFuture<Void> result = SettableFuture.create();\n\n        new Thread(new Runnable() {\n\n            @Override\n            public void run() {\n                try {\n                    thisTable.updateContext(item);\n\n                    result.set(null);\n                } catch (Throwable throwable) {\n                    result.setException(throwable);\n                }\n            }\n        }).start();\n\n        return result;\n    }\n\n    /**\n     * Delete an item from the local table and enqueue the operation to be\n     * synchronized on context push.\n     *\n     * @param item the item to be deleted\n     * @return A ListenableFuture that is done when the item has been deleted.\n     */\n    public ListenableFuture<Void> delete(final JsonObject item) {\n        final MobileServiceJsonSyncTable thisTable = this;\n        final SettableFuture<Void> result = SettableFuture.create();\n\n        new Thread(new Runnable() {\n\n            @Override\n            public void run() {\n                try {\n                    thisTable.deleteContext(item);\n\n                    result.set(null);\n                } catch (Throwable throwable) {\n                    result.setException(throwable);\n                }\n            }\n        }).start();\n\n        return result;\n    }\n\n    /**\n     * Delete an item from the local table and enqueue the operation to be\n     * synchronized on context push.\n     *\n     * @param itemId the id of the item to be deleted\n     * @return A ListenableFuture that is done when the item has been deleted.\n     */\n    public ListenableFuture<Void> delete(final String itemId) {\n        final MobileServiceJsonSyncTable thisTable = this;\n        final SettableFuture<Void> result = SettableFuture.create();\n\n        new Thread(new Runnable() {\n\n            @Override\n            public void run() {\n                try {\n                    thisTable.deleteContext(itemId);\n\n                    result.set(null);\n                } catch (Throwable throwable) {\n                    result.setException(throwable);\n                }\n            }\n        }).start();\n\n        return result;\n    }\n\n    private JsonElement readContext(Query query) throws MobileServiceLocalStoreException {\n        return this.mClient.getSyncContext().read(this.mName, query);\n    }\n\n    private JsonObject lookUpContext(String itemId) throws MobileServiceLocalStoreException {\n        if (!isValidStringId(itemId)) {\n            throw new IllegalArgumentException(\"The entity id has an invalid string value.\");\n        }\n\n        return this.mClient.getSyncContext().lookUp(this.mName, itemId);\n    }\n\n    private JsonObject insertContext(JsonObject item) throws Throwable {\n        JsonObject newItem = validateIdOnInsert(item);\n\n        this.mClient.getSyncContext().insert(this.mName, newItem.get(\"id\").getAsString(), newItem);\n\n        return newItem;\n    }\n\n    private void updateContext(JsonObject item) throws Throwable {\n        JsonObject newItem = validateIdOnUpdateOrDelete(item);\n\n        this.mClient.getSyncContext().update(this.mName, newItem.get(\"id\").getAsString(), newItem);\n    }\n\n    private void deleteContext(JsonObject item) throws Throwable {\n        JsonObject newItem = validateIdOnUpdateOrDelete(item);\n\n        this.mClient.getSyncContext().delete(this.mName, newItem);\n    }\n\n    private void deleteContext(String itemId) throws Throwable {\n        if (!isValidStringId(itemId)) {\n            throw new IllegalArgumentException(\"The entity id has an invalid string value.\");\n        }\n\n        this.mClient.getSyncContext().delete(this.mName, itemId);\n    }\n\n    private JsonObject validateIdOnInsert(JsonObject item) throws JsonSyntaxException, IllegalArgumentException {\n        JsonObject newItem = (JsonObject) new JsonParser().parse(item.toString());\n        String itemId = null;\n        String idProperty = getIdProperty(newItem);\n\n        if (idProperty != null) {\n            if (newItem.get(idProperty).isJsonPrimitive() && newItem.get(idProperty).getAsJsonPrimitive().isString()) {\n                itemId = newItem.get(idProperty).getAsJsonPrimitive().getAsString();\n\n                if (!isValidStringId(itemId)) {\n                    throw new IllegalArgumentException(\"The entity to insert has an invalid string value on \" + idProperty + \" property.\");\n                }\n            } else if (newItem.get(idProperty).isJsonNull()) {\n                itemId = UUID.randomUUID().toString();\n            } else {\n                throw new IllegalArgumentException(\"The entity to insert should not have an \" + idProperty + \" defined with a non string value\");\n            }\n\n            newItem.remove(idProperty);\n            newItem.addProperty(\"id\", itemId);\n        } else {\n            itemId = UUID.randomUUID().toString();\n            newItem.addProperty(\"id\", itemId);\n        }\n\n        return newItem;\n    }\n\n    private JsonObject validateIdOnUpdateOrDelete(JsonObject item) throws JsonSyntaxException, IllegalArgumentException {\n        JsonObject newItem = (JsonObject) new JsonParser().parse(item.toString());\n        String itemId = null;\n        String idProperty = getIdProperty(newItem);\n\n        if (idProperty != null) {\n            if (newItem.get(idProperty).isJsonPrimitive() && newItem.get(idProperty).getAsJsonPrimitive().isString()) {\n                itemId = newItem.get(idProperty).getAsJsonPrimitive().getAsString();\n\n                if (!isValidStringId(itemId)) {\n                    throw new IllegalArgumentException(\"The entity to update/delete has an invalid string value on \" + idProperty + \" property.\");\n                }\n            } else if (newItem.get(idProperty).isJsonNull()) {\n                throw new IllegalArgumentException(\"The entity to update/delete should have an id defined with a string value\");\n            } else {\n                throw new IllegalArgumentException(\"The entity to update/delete should not have an \" + idProperty + \" defined with a non string value\");\n            }\n\n            newItem.remove(idProperty);\n            newItem.addProperty(\"id\", itemId);\n        } else {\n            throw new IllegalArgumentException(\"The entity to update/delete should have an id defined with a string value\");\n        }\n\n        return newItem;\n    }\n\n    private String getIdProperty(JsonObject item) {\n        String result = null;\n        String[] idPropertyNames = new String[]{\"id\", \"Id\", \"iD\", \"ID\"};\n\n        for (String idPropertyName : idPropertyNames) {\n            if (item.has(idPropertyName)) {\n                if (result != null) {\n                    throw new IllegalArgumentException(\"The entity to insert should not have more than one \" + result + \" property defined.\");\n                }\n\n                result = idPropertyName;\n            }\n        }\n\n        return result;\n    }\n\n    private boolean isDefaultStringId(String id) {\n        return (id == null) || (id.equals(\"\"));\n    }\n\n    private boolean isValidStringId(String id) {\n        return !isDefaultStringId(id) && id.length() <= 255 && !containsControlCharacter(id) && !containsSpecialCharacter(id) && !id.equals(\".\")\n                && !id.equals(\"..\");\n    }\n\n    private boolean containsControlCharacter(String s) {\n        boolean result = false;\n\n        final int length = s.length();\n\n        for (int offset = 0; offset < length; ) {\n            final int codepoint = s.codePointAt(offset);\n\n            if (Character.isISOControl(codepoint)) {\n                result = true;\n                break;\n            }\n\n            offset += Character.charCount(codepoint);\n        }\n\n        return result;\n    }\n\n    private boolean containsSpecialCharacter(String s) {\n        boolean result = false;\n\n        final int length = s.length();\n\n        final int cpQuotationMark = 0x0022;\n        final int cpPlusSign = 0x002B;\n        final int cpSolidus = 0x002F;\n        final int cpQuestionMark = 0x003F;\n        final int cpReverseSolidus = 0x005C;\n        final int cpGraveAccent = 0x0060;\n\n        for (int offset = 0; offset < length; ) {\n            final int codepoint = s.codePointAt(offset);\n\n            if (codepoint == cpQuotationMark || codepoint == cpPlusSign || codepoint == cpSolidus || codepoint == cpQuestionMark\n                    || codepoint == cpReverseSolidus || codepoint == cpGraveAccent) {\n                result = true;\n                break;\n            }\n\n            offset += Character.charCount(codepoint);\n        }\n\n        return result;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceSyncContext.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceFeatures;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceExceptionBase;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemColumns;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOperations;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.LocalTableOperationProcessor;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.MobileServiceTableOperationState;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation;\nimport com.microsoft.windowsazure.mobileservices.table.sync.pull.IncrementalPullStrategy;\nimport com.microsoft.windowsazure.mobileservices.table.sync.pull.PullStrategy;\nimport com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult;\nimport com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException;\nimport com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushStatus;\nimport com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationErrorList;\nimport com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue;\nimport com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationQueue.Bookmark;\nimport com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandler;\nimport com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandlerException;\nimport com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary;\nimport com.microsoft.windowsazure.mobileservices.threading.MultiLockDictionary.MultiLock;\nimport com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary;\nimport com.microsoft.windowsazure.mobileservices.threading.MultiReadWriteLockDictionary.MultiReadWriteLock;\n\nimport java.io.IOException;\nimport java.text.ParseException;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.LinkedList;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Map;\nimport java.util.Queue;\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.Semaphore;\nimport java.util.concurrent.locks.Lock;\nimport java.util.concurrent.locks.ReadWriteLock;\nimport java.util.concurrent.locks.ReentrantLock;\nimport java.util.concurrent.locks.ReentrantReadWriteLock;\n\n/**\n * Provides a way to synchronize local database with remote database.\n */\npublic class MobileServiceSyncContext {\n    /**\n     * Table that stores backed up items\n     */\n    private static final String ITEM_BACKUP_TABLE = \"__itembackups\";\n    private SettableFuture<Void> mInitialized;\n    private MobileServiceClient mClient;\n    private MobileServiceLocalStore mStore;\n    private MobileServiceSyncHandler mHandler;\n    /**\n     * Queue for pending operations (insert,update,delete) against remote table.\n     */\n    private OperationQueue mOpQueue;\n    /**\n     * Queue for pending push sync requests against remote storage.\n     */\n    private Queue<PushSyncRequest> mPushSRQueue;\n    /**\n     * List for operation errors against remote table.\n     */\n    private OperationErrorList mOpErrorList;\n    /**\n     * Consumer thread that processes push sync requests.\n     */\n    private PushSyncRequestConsumer mPushSRConsumer;\n    /**\n     * Shared/Exclusive Lock that works together with id and table lock\n     */\n    private ReadWriteLock mOpLock;\n    /**\n     * Lock by table name (table lock)\n     */\n    private MultiReadWriteLockDictionary<String> mTableLockMap;\n    /**\n     * Lock by item id (row lock)\n     */\n    private MultiLockDictionary<String> mIdLockMap;\n    /**\n     * Lock to ensure that multiple push sync requests don't interleave\n     */\n    private Lock mPushSRLock;\n    /**\n     * Lock to block both operations and sync requests while initializing\n     */\n    private ReadWriteLock mInitLock;\n    /**\n     * Semaphore to signal pending push requests to consumer thread\n     */\n    private Semaphore mPendingPush;\n    /**\n     * Semaphore to signal that there are currently no pending push requests\n     */\n    private Semaphore mPushSRConsumerIdle;\n\n    /**\n     * Constructor for MobileServiceSyncContext\n     *\n     * @param client The MobileServiceClient used to invoke table operations\n     */\n    public MobileServiceSyncContext(MobileServiceClient client) {\n        this.mClient = client;\n        this.mInitLock = new ReentrantReadWriteLock(true);\n        this.mOpLock = new ReentrantReadWriteLock(true);\n        this.mPushSRLock = new ReentrantLock(true);\n    }\n\n    private static void initializeStore(MobileServiceLocalStore store) throws MobileServiceLocalStoreException {\n        Map<String, ColumnDataType> columns = new HashMap<String, ColumnDataType>();\n        columns.put(\"id\", ColumnDataType.String);\n        columns.put(\"tablename\", ColumnDataType.String);\n        columns.put(\"itemid\", ColumnDataType.String);\n        columns.put(\"clientitem\", ColumnDataType.Other);\n\n        store.defineTable(ITEM_BACKUP_TABLE, columns);\n    }\n\n    private static boolean isDeleted(JsonObject item) {\n\n        JsonElement deletedToken = item.get(MobileServiceSystemColumns.Deleted);\n\n        boolean isDeleted = deletedToken != null && deletedToken.getAsBoolean();\n\n        return isDeleted;\n    }\n\n    /**\n     * Returns an instance of MobileServiceLocalStore.\n     *\n     * @return The MobileServiceLocalStore instance\n     */\n    public MobileServiceLocalStore getStore() {\n        return this.mStore;\n    }\n\n    /**\n     * Returns an instance of MobileServiceSyncHandler.\n     *\n     * @return The MobileServiceSyncHandler instance\n     */\n    public MobileServiceSyncHandler getHandler() {\n        return this.mHandler;\n    }\n\n    /**\n     * Indicates whether sync context has been initialized or not.\n     *\n     * @return The initialization status\n     */\n    public boolean isInitialized() {\n        this.mInitLock.readLock().lock();\n\n        try {\n            boolean result = false;\n\n            if (this.mInitialized != null && this.mInitialized.isDone() && !this.mInitialized.isCancelled()) {\n                try {\n                    this.mInitialized.get();\n                    result = true;\n                } catch (Throwable ex) {\n                }\n            }\n\n            return result;\n        } finally {\n            this.mInitLock.readLock().unlock();\n        }\n    }\n\n    /**\n     * Remove operations that contains errors from the queue\n     * @param tableOperationError\n     * @throws ParseException\n     * @throws MobileServiceLocalStoreException\n     */\n    private void removeTableOperation(TableOperationError tableOperationError) throws Throwable {\n        this.mInitLock.readLock().lock();\n\n        try {\n\n            ensureCorrectlyInitialized();\n\n            this.mOpQueue.removeOperationWithErrorFromQueue(tableOperationError);\n        } finally {\n            this.mInitLock.readLock().unlock();\n        }\n    }\n\n    /**\n     * Cancel operation and update local item with server\n     * @param tableOperationError\n     * @throws ParseException\n     * @throws MobileServiceLocalStoreException\n     */\n    public void cancelAndUpdateItem(TableOperationError tableOperationError) throws Throwable {\n\n        MultiReadWriteLock<String> tableLock = null;\n        MultiLock<String> idLock = null;\n        this.mInitLock.readLock().lock();\n\n        try {\n\n            ensureCorrectlyInitialized();\n\n            this.mOpLock.writeLock().lock();\n\n            String tableItemId = tableOperationError.getTableName() + \"/\" + tableOperationError.getItemId();\n\n            tableLock = this.mTableLockMap.lockRead(tableOperationError.getTableName());\n\n            idLock = this.mIdLockMap.lock(tableItemId);\n\n            this.mStore.upsert(tableOperationError.getTableName(), tableOperationError.getServerItem(), true);\n\n            removeTableOperation(tableOperationError);\n\n        } finally {\n            try {\n                this.mInitLock.readLock().unlock();\n            } finally {\n                try {\n                    this.mOpLock.writeLock().unlock();\n                } finally {\n                    try {\n                        this.mIdLockMap.unLock(idLock);\n                    } finally {\n                        this.mTableLockMap.unLockRead(tableLock);\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Cancel operation an Discard local item\n     * @param tableOperationError\n     * @throws ParseException\n     * @throws MobileServiceLocalStoreException\n     */\n    public void cancelAndDiscardItem(TableOperationError tableOperationError) throws Throwable {\n        MultiReadWriteLock<String> tableLock = null;\n        MultiLock<String> idLock = null;\n\n        this.mInitLock.readLock().lock();\n\n        try {\n\n            ensureCorrectlyInitialized();\n\n            this.mOpLock.writeLock().lock();\n\n            String tableItemId = tableOperationError.getTableName() + \"/\" + tableOperationError.getItemId();\n\n            tableLock = this.mTableLockMap.lockRead(tableOperationError.getTableName());\n\n            idLock = this.mIdLockMap.lock(tableItemId);\n\n            String itemId = tableOperationError.getItemId();\n\n            this.mStore.delete(tableOperationError.getTableName(), itemId);\n\n            removeTableOperation(tableOperationError);\n\n        } finally {\n            try {\n                this.mInitLock.readLock().unlock();\n            } finally {\n                try {\n                    this.mOpLock.writeLock().unlock();\n                } finally {\n                    try {\n                        this.mIdLockMap.unLock(idLock);\n                    } finally {\n                        this.mTableLockMap.unLockRead(tableLock);\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Returns the number of pending operations that are not yet pushed to\n     * remote tables.\n     *\n     * @return The number of pending operations\n     * @throws Throwable\n     */\n    public int getPendingOperations() throws Throwable {\n\n        int result = -1;\n\n        this.mInitLock.readLock().lock();\n\n        try {\n            ensureCorrectlyInitialized();\n\n            // get SHARED access to op lock\n            this.mOpLock.readLock().lock();\n\n            try {\n                result = this.mOpQueue.countPending();\n            } finally {\n                this.mOpLock.readLock().unlock();\n            }\n\n        } finally {\n            this.mInitLock.readLock().unlock();\n        }\n\n        return result;\n    }\n\n    /**\n     * Initializes the sync context.\n     *\n     * @param store   An instance of MobileServiceLocalStore\n     * @param handler An instance of MobileServiceSyncHandler\n     * @return A ListenableFuture that is done when sync context has\n     * initialized.\n     */\n    public ListenableFuture<Void> initialize(final MobileServiceLocalStore store, final MobileServiceSyncHandler handler) {\n        final MobileServiceSyncContext thisContext = this;\n        final SettableFuture<Void> result = SettableFuture.create();\n\n        new Thread(new Runnable() {\n\n            @Override\n            public void run() {\n                try {\n                    thisContext.initializeContext(store, handler);\n\n                    result.set(null);\n                } catch (Throwable throwable) {\n                    result.setException(throwable);\n                }\n            }\n        }).start();\n\n        return result;\n    }\n\n    /**\n     * Pushes all pending operations up to the remote store.\n     *\n     * @return A ListenableFuture that is done when operations have been pushed.\n     */\n    public ListenableFuture<Void> push() {\n        final MobileServiceSyncContext thisContext = this;\n        final SettableFuture<Void> result = SettableFuture.create();\n\n        new Thread(new Runnable() {\n\n            @Override\n            public void run() {\n                try {\n                    thisContext.pushContext();\n\n                    result.set(null);\n                } catch (Throwable throwable) {\n                    result.setException(throwable);\n                }\n            }\n        }).start();\n\n        return result;\n    }\n\n    /**\n     * Performs a query against the remote table and stores results.\n     *\n     * @param tableName the remote table name\n     * @param query     an optional query to filter results\n     */\n    void pull(String tableName, Query query, String queryId) throws Throwable {\n        this.mInitLock.readLock().lock();\n\n        try {\n            ensureCorrectlyInitialized();\n\n            String invTableName = tableName != null ? tableName.trim().toLowerCase(Locale.getDefault()) : null;\n\n            boolean busyPullDone = false;\n\n            while (!busyPullDone) {\n                ListenableFuture<Void> pushFuture = null;\n\n                // prevent Coffman Circular wait condition: lock resources in\n                // same order, independent of unlock order. Op then Table then\n                // Id.\n\n                // get SHARED access to op lock\n                this.mOpLock.readLock().lock();\n\n                try {\n                    // get EXCLUSIVE access to table lock\n                    MultiReadWriteLock<String> multiRWLock = this.mTableLockMap.lockWrite(invTableName);\n\n                    try {\n                        int pendingTable = this.mOpQueue.countPending(invTableName);\n\n                        if (pendingTable > 0) {\n                            pushFuture = push();\n                        } else {\n                            processPull(invTableName, query, queryId);\n                        }\n                    } finally {\n                        this.mTableLockMap.unLockWrite(multiRWLock);\n                    }\n                } finally {\n                    this.mOpLock.readLock().unlock();\n                }\n\n                if (pushFuture != null) {\n                    try {\n                        pushFuture.get();\n                    } catch (ExecutionException e) {\n                        throw e.getCause();\n                    }\n                } else {\n                    busyPullDone = true;\n                }\n            }\n        } finally {\n            this.mInitLock.readLock().unlock();\n        }\n    }\n\n    /**\n     * Performs a query against the local table and deletes the results.\n     *\n     * @param tableName the local table name\n     * @param query     an optional query to filter results\n     */\n    void purge(String tableName, Query query) throws Throwable {\n        this.mInitLock.readLock().lock();\n\n        try {\n            ensureCorrectlyInitialized();\n\n            String invTableName = tableName != null ? tableName.trim().toLowerCase(Locale.getDefault()) : null;\n            // prevent Coffman Circular wait condition: lock resources in\n            // same order, independent of unlock order. Op then Table then\n            // Id.\n\n            this.mOpLock.readLock().lock();\n\n            try {\n                MultiReadWriteLock<String> multiRWLock = this.mTableLockMap.lockWrite(invTableName);\n\n                try {\n                    int pendingTable = this.mOpQueue.countPending(invTableName);\n\n                    if (pendingTable > 0) {\n                        throw new MobileServiceException(\"The table cannot be purged because it has pending operations\");\n                    } else {\n                        processPurge(invTableName, query);\n                    }\n                } finally {\n                    this.mTableLockMap.unLockWrite(multiRWLock);\n                }\n            } finally {\n                this.mOpLock.readLock().unlock();\n            }\n        } finally {\n            this.mInitLock.readLock().unlock();\n        }\n    }\n\n    /**\n     * Retrieve results from the local table.\n     *\n     * @param tableName the local table name\n     * @param query     an optional query to filter results\n     * @return a JsonElement with the results\n     */\n    JsonElement read(String tableName, Query query) throws MobileServiceLocalStoreException {\n        String invTableName = tableName != null ? tableName.trim().toLowerCase(Locale.getDefault()) : null;\n\n        if (query == null) {\n            query = QueryOperations.tableName(invTableName);\n        } else if (query.getTableName() == null || !query.getTableName().equals(invTableName)) {\n            query = query.tableName(invTableName);\n        }\n\n        return this.mStore.read(query);\n    }\n\n    /**\n     * Looks up an item from the local table.\n     *\n     * @param tableName the local table name\n     * @param itemId    the id of the item to look up\n     * @return the item found\n     */\n    JsonObject lookUp(String tableName, String itemId) throws MobileServiceLocalStoreException {\n        String invTableName = tableName != null ? tableName.trim().toLowerCase(Locale.getDefault()) : null;\n\n        return this.mStore.lookup(invTableName, itemId);\n    }\n\n    /**\n     * Insert an item into the local table and enqueue the operation to be\n     * synchronized on context push.\n     *\n     * @param tableName the local table name\n     * @param item      the item to be inserted\n     */\n    void insert(String tableName, String itemId, JsonObject item) throws Throwable {\n        String invTableName = tableName != null ? tableName.trim().toLowerCase(Locale.getDefault()) : null;\n\n        InsertOperation operation = new InsertOperation(invTableName, itemId);\n\n        processOperation(operation, item);\n    }\n\n    /**\n     * Update an item in the local table and enqueue the operation to be\n     * synchronized on context push.\n     *\n     * @param tableName the local table name\n     * @param item      the item to be updated\n     */\n    void update(String tableName, String itemId, JsonObject item) throws Throwable {\n        String invTableName = tableName != null ? tableName.trim().toLowerCase(Locale.getDefault()) : null;\n\n        UpdateOperation operation = new UpdateOperation(invTableName, itemId);\n        processOperation(operation, item);\n    }\n\n    /**\n     * Delete an item from the local table and enqueue the operation to be\n     * synchronized on context push.\n     *\n     * @param tableName the local table name\n     * @param itemId    the id of the item to be deleted\n     */\n    void delete(String tableName, JsonObject item) throws Throwable {\n        String invTableName = tableName != null ? tableName.trim().toLowerCase(Locale.getDefault()) : null;\n\n        DeleteOperation operation = new DeleteOperation(invTableName, item.get(\"id\").getAsString());\n        processOperation(operation, item);\n    }\n\n    /**\n     * Delete an item from the local table and enqueue the operation to be\n     * synchronized on context push.\n     *\n     * @param tableName the local table name\n     * @param itemId    the id of the item to be deleted\n     */\n    void delete(String tableName, String itemId) throws Throwable {\n        String invTableName = tableName != null ? tableName.trim().toLowerCase(Locale.getDefault()) : null;\n\n        DeleteOperation operation = new DeleteOperation(invTableName, itemId);\n        processOperation(operation, null);\n    }\n\n\n    private void initializeContext(final MobileServiceLocalStore store, final MobileServiceSyncHandler handler) throws Throwable {\n        this.mInitLock.writeLock().lock();\n\n        try {\n            waitPendingPushSR();\n\n            this.mOpLock.writeLock().lock();\n\n            try {\n                this.mPushSRLock.lock();\n\n                try {\n                    this.mInitialized = SettableFuture.create();\n\n                    try {\n                        this.mHandler = handler;\n                        this.mStore = store;\n\n                        OperationQueue.initializeStore(this.mStore);\n                        OperationErrorList.initializeStore(this.mStore);\n                        IncrementalPullStrategy.initializeStore(this.mStore);\n\n                        initializeStore(this.mStore);\n\n                        this.mStore.initialize();\n\n                        this.mIdLockMap = new MultiLockDictionary<String>();\n                        this.mTableLockMap = new MultiReadWriteLockDictionary<String>();\n\n                        this.mOpQueue = OperationQueue.load(this.mStore);\n                        this.mPushSRQueue = new LinkedList<PushSyncRequest>();\n                        this.mOpErrorList = OperationErrorList.load(this.mStore);\n\n                        if (this.mPushSRConsumer == null) {\n                            this.mPendingPush = new Semaphore(0, true);\n\n                            this.mPushSRConsumer = new PushSyncRequestConsumer(this);\n                            this.mPushSRConsumer.start();\n                        }\n\n                        this.mInitialized.set(null);\n                    } catch (Throwable throwable) {\n                        this.mInitialized.setException(throwable);\n                        throw throwable;\n                    }\n                } finally {\n                    this.mPushSRLock.unlock();\n                }\n            } finally {\n                this.mOpLock.writeLock().unlock();\n            }\n        } finally {\n            this.mInitLock.writeLock().unlock();\n        }\n    }\n\n    private void pushContext() throws Throwable {\n        PushSyncRequest pushSR = null;\n\n        this.mInitLock.readLock().lock();\n\n        try {\n            ensureCorrectlyInitialized();\n\n            this.mPushSRLock.lock();\n\n            try {\n                Bookmark bookmark = this.mOpQueue.bookmark();\n\n                pushSR = new PushSyncRequest(bookmark, new Semaphore(0));\n                this.mPushSRQueue.add(pushSR);\n                this.mPendingPush.release();\n            } finally {\n                this.mPushSRLock.unlock();\n            }\n        } finally {\n            this.mInitLock.readLock().unlock();\n        }\n\n        if (pushSR != null) {\n            pushSR.mSignalDone.acquire();\n\n            if (pushSR.mPushException != null) {\n                throw pushSR.mPushException;\n            }\n        }\n    }\n\n    private void ensureCorrectlyInitialized() throws Throwable {\n        if (this.mInitialized != null && this.mInitialized.isDone() && !this.mInitialized.isCancelled()) {\n            try {\n                this.mInitialized.get();\n            } catch (ExecutionException e) {\n                throw e.getCause();\n            }\n        } else {\n            throw new IllegalStateException(\"SyncContext is not yet initialized.\");\n        }\n    }\n\n    private void processPull(String tableName, Query query, String queryId) throws Throwable {\n\n        try {\n\n            MobileServiceJsonTable table = this.mClient.getTable(tableName);\n\n            table.addFeature(MobileServiceFeatures.Offline);\n\n            if (query == null) {\n                query = table.top(1000).orderBy(\"id\", QueryOrder.Ascending);\n            } else {\n                query = query.deepClone();\n            }\n\n            PullStrategy strategy;\n\n            if (queryId != null) {\n                strategy = new IncrementalPullStrategy(query, queryId, this.mStore, table);\n            } else {\n                strategy = new PullStrategy(query, table);\n            }\n\n            strategy.initialize();\n\n            JsonArray elements = null;\n\n            do {\n\n                JsonElement result = table.execute(strategy.getLastQuery()).get();\n\n                if (result != null) {\n\n                    if (result.isJsonObject()) {\n                        JsonObject jsonObject = result.getAsJsonObject();\n\n                        if (jsonObject.has(\"results\") && jsonObject.get(\"results\").isJsonArray()) {\n                            elements = jsonObject.get(\"results\").getAsJsonArray();\n                        }\n\n                    } else if (result.isJsonArray()) {\n                        elements = result.getAsJsonArray();\n                    }\n\n                    processElements(tableName, elements);\n\n                    strategy.onResultsProcessed(elements);\n                }\n\n            }\n            while (strategy.moveToNextPage(elements.size()));\n\n        } catch (ExecutionException e) {\n            throw e.getCause();\n        } catch (RuntimeException e) {\n            throw e.getCause();\n        }\n    }\n\n    private void processElements(String tableName, JsonArray elements) throws Throwable {\n        if (elements != null) {\n\n            List<JsonObject> updatedJsonObjects = new ArrayList<JsonObject>();\n            List<String> deletedIds = new ArrayList<String>();\n\n\n            for (JsonElement element : elements) {\n\n                JsonObject jsonObject = element.getAsJsonObject();\n                JsonElement elementId = jsonObject.get(MobileServiceSystemColumns.Id);\n\n                if (elementId == null) {\n                    continue;\n                }\n\n                if (isDeleted(jsonObject)) {\n                    deletedIds.add(elementId.getAsString());\n                } else {\n                    updatedJsonObjects.add(jsonObject);\n                }\n            }\n\n            if (deletedIds.size() > 0) {\n                this.mStore.delete(tableName,\n                        deletedIds.toArray(new String[deletedIds.size()]));\n            }\n\n            if (updatedJsonObjects.size() > 0) {\n                this.mStore.upsert(tableName,\n                        updatedJsonObjects.toArray(new JsonObject[updatedJsonObjects.size()]), true);\n            }\n        }\n    }\n\n    private void processPurge(String tableName, Query query) throws MobileServiceLocalStoreException {\n        if (query == null) {\n            query = QueryOperations.tableName(tableName);\n        } else if (query.getTableName() == null || !query.getTableName().equals(tableName)) {\n            query = query.tableName(tableName);\n        }\n\n        this.mStore.delete(query);\n    }\n\n    private void waitPendingPushSR() throws InterruptedException {\n        this.mPushSRLock.lock();\n\n        try {\n            if (this.mPushSRQueue != null && !this.mPushSRQueue.isEmpty()) {\n                this.mPushSRConsumerIdle = new Semaphore(0, true);\n            }\n        } finally {\n            this.mPushSRLock.unlock();\n        }\n\n        if (this.mPushSRConsumerIdle != null) {\n            this.mPushSRConsumerIdle.acquire();\n            this.mPushSRConsumerIdle = null;\n        }\n    }\n\n    private void consumePushSR() throws InterruptedException {\n        while (true) {\n            this.mPendingPush.acquire();\n\n            this.mPushSRLock.lock();\n\n            try {\n                try {\n                    PushSyncRequest pushSR = this.mPushSRQueue.poll();\n\n                    if (pushSR != null) {\n                        try {\n                            pushOperations(pushSR.mBookmark);\n                        } catch (MobileServicePushFailedException pushException) {\n                            pushSR.mPushException = pushException;\n                        } finally {\n                            this.mOpQueue.unbookmark(pushSR.mBookmark);\n                            pushSR.mSignalDone.release();\n                        }\n                    }\n                } finally {\n                    if (this.mPushSRConsumerIdle != null && this.mPushSRQueue.isEmpty()) {\n                        this.mPushSRConsumerIdle.release();\n                    }\n                }\n            } finally {\n                this.mPushSRLock.unlock();\n            }\n        }\n    }\n\n    private void pushOperations(Bookmark bookmark) throws MobileServicePushFailedException {\n        MobileServicePushCompletionResult pushCompletionResult = new MobileServicePushCompletionResult();\n\n        List<TableOperation> failedOperations = new ArrayList<>();\n\n        try {\n            LockProtectedOperation lockedOp = peekAndLock(bookmark);\n\n            TableOperation operation = lockedOp != null ? lockedOp.getOperation() : null;\n\n            while (operation != null) {\n                try {\n                    try {\n                        pushOperation(operation);\n                    } catch (MobileServiceLocalStoreException localStoreException) {\n                        pushCompletionResult.setStatus(MobileServicePushStatus.CancelledByLocalStoreError);\n\n                        operation.setOperationState(MobileServiceTableOperationState.Failed);\n                        break;\n                    } catch (MobileServiceSyncHandlerException syncHandlerException) {\n                        MobileServicePushStatus cancelReason = getPushCancelReason(syncHandlerException);\n\n                        operation.setOperationState(MobileServiceTableOperationState.Failed);\n\n                        if (cancelReason != null) {\n                            pushCompletionResult.setStatus(cancelReason);\n                            break;\n                        } else {\n                            this.mOpErrorList.add(getTableOperationError(operation, syncHandlerException));\n                            failedOperations.add(operation);\n                        }\n                    }\n\n                    // '/' is a reserved character that cannot be used on string\n                    // ids.\n                    // We use it to build a unique compound string from\n                    // tableName and\n                    // itemId\n                    String tableItemId = operation.getTableName() + \"/\" + operation.getItemId();\n\n                    this.mStore.delete(ITEM_BACKUP_TABLE, tableItemId);\n\n                    bookmark.dequeue();\n\n                } finally {\n                    try {\n                        this.mIdLockMap.unLock(lockedOp.getIdLock());\n                    } finally {\n                        this.mTableLockMap.unLockRead(lockedOp.getTableLock());\n                    }\n                }\n\n                lockedOp = peekAndLock(bookmark);\n\n                operation = lockedOp != null ? lockedOp.getOperation() : null;\n            }\n\n            if (pushCompletionResult.getStatus() == null) {\n                pushCompletionResult.setStatus(MobileServicePushStatus.Complete);\n            }\n\n            pushCompletionResult.setOperationErrors(this.mOpErrorList.getAll());\n\n            this.mOpErrorList.clear();\n\n            this.mHandler.onPushComplete(pushCompletionResult);\n\n        } catch (Throwable internalError) {\n            pushCompletionResult.setStatus(MobileServicePushStatus.InternalError);\n            pushCompletionResult.setInternalError(internalError);\n        }\n\n        if (pushCompletionResult.getStatus() != MobileServicePushStatus.Complete) {\n            if (failedOperations.size() > 0) {\n                //Reload Queue with pending error operations\n                this.mOpLock.writeLock().lock();\n\n                try {\n                    for (TableOperation failedOperation : failedOperations) {\n                        this.mOpQueue.enqueue(failedOperation);\n                    }\n                } catch (Throwable throwable) {\n                } finally {\n                    this.mOpLock.writeLock().unlock();\n                }\n            }\n            throw new MobileServicePushFailedException(pushCompletionResult);\n        }\n    }\n\n    private void pushOperation(TableOperation operation) throws MobileServiceLocalStoreException, MobileServiceSyncHandlerException {\n\n        operation.setOperationState(MobileServiceTableOperationState.Attempted);\n\n        JsonObject item = this.mStore.lookup(operation.getTableName(), operation.getItemId());\n\n        if (item == null) {\n            // '/' is a reserved character that cannot be used on string ids.\n            // We use it to build a unique compound string from tableName and\n            // itemId\n            String tableItemId = operation.getTableName() + \"/\" + operation.getItemId();\n\n            JsonObject backedUpItem = this.mStore.lookup(ITEM_BACKUP_TABLE, tableItemId);\n\n            if (backedUpItem != null) {\n                item = backedUpItem.get(\"clientitem\").isJsonObject() ? backedUpItem.getAsJsonObject(\"clientitem\") : null;\n            }\n        }\n\n        JsonObject result = this.mHandler.executeTableOperation(new RemoteTableOperationProcessor(this.mClient, item), operation);\n\n        if (result != null) {\n            this.mStore.upsert(operation.getTableName(), result, true);\n        }\n    }\n\n    private LockProtectedOperation peekAndLock(Bookmark bookmark) {\n        LockProtectedOperation lockedOp = null;\n\n        // prevent Coffman Circular wait condition: lock resources in same\n        // order, independent of unlock order. Op then Table then Id.\n\n        // get EXCLUSIVE access to op lock, for a short time\n        this.mOpLock.writeLock().lock();\n\n        try {\n            TableOperation operation = bookmark.peek();\n\n            if (operation != null) {\n                // get SHARED access to table lock\n                MultiReadWriteLock<String> tableLock = this.mTableLockMap.lockRead(operation.getTableName());\n\n                // '/' is a reserved character that cannot be used on string\n                // ids.\n                // We use it to build a unique compound string from tableName\n                // and itemId\n                String tableItemId = operation.getTableName() + \"/\" + operation.getItemId();\n\n                // get EXCLUSIVE access to id lock\n                MultiLock<String> idLock = this.mIdLockMap.lock(tableItemId);\n\n                lockedOp = new LockProtectedOperation(operation, tableLock, idLock);\n            }\n        } finally {\n            this.mOpLock.writeLock().unlock();\n        }\n\n        return lockedOp;\n    }\n\n    private MobileServicePushStatus getPushCancelReason(MobileServiceSyncHandlerException syncHandlerException) {\n        MobileServicePushStatus reason = null;\n\n        Throwable innerException = syncHandlerException.getCause();\n\n        if (innerException instanceof MobileServiceException) {\n            MobileServiceException msEx = (MobileServiceException) innerException;\n            if (msEx.getCause() != null && msEx.getCause() instanceof IOException) {\n                reason = MobileServicePushStatus.CancelledByNetworkError;\n            } else if (msEx.getResponse() != null && msEx.getResponse().getStatus() != null && msEx.getResponse().getStatus().getStatusCode() == 401) {\n                reason = MobileServicePushStatus.CancelledByAuthenticationError;\n            }\n        }\n\n        return reason;\n    }\n\n    private TableOperationError getTableOperationError(TableOperation operation, Throwable throwable) throws MobileServiceLocalStoreException {\n        JsonObject clientItem = this.mStore.lookup(operation.getTableName(), operation.getItemId());\n\n        if (clientItem == null) {\n            // '/' is a reserved character that cannot be used on string ids.\n            // We use it to build a unique compound string from tableName and\n            // itemId\n            String tableItemId = operation.getTableName() + \"/\" + operation.getItemId();\n\n            JsonObject backedUpItem = this.mStore.lookup(ITEM_BACKUP_TABLE, tableItemId);\n\n            if (backedUpItem != null) {\n                clientItem = backedUpItem.get(\"clientitem\").isJsonObject() ? backedUpItem.getAsJsonObject(\"clientitem\") : null;\n            }\n        }\n\n        Integer statusCode = null;\n        String serverResponse = null;\n        JsonObject serverItem = null;\n\n        if (throwable instanceof MobileServiceException) {\n            MobileServiceException msEx = (MobileServiceException) throwable;\n            if (msEx.getResponse() != null) {\n                serverResponse = msEx.getResponse().getContent();\n                if (msEx.getResponse().getStatus() != null) {\n                    statusCode = msEx.getResponse().getStatus().getStatusCode();\n                }\n            }\n        }\n\n        if (throwable instanceof MobileServiceExceptionBase) {\n            MobileServiceExceptionBase mspfEx = (MobileServiceExceptionBase) throwable;\n            serverItem = mspfEx.getValue();\n        } else if (throwable.getCause() != null & throwable.getCause() instanceof MobileServiceExceptionBase) {\n            MobileServiceExceptionBase mspfEx = (MobileServiceExceptionBase) throwable.getCause();\n            serverItem = mspfEx.getValue();\n        }\n\n        return new TableOperationError(operation.getId(), operation.getKind(), operation.getTableName(), operation.getItemId(), clientItem, throwable.getMessage(), statusCode,\n                serverResponse, serverItem);\n    }\n\n    private void processOperation(TableOperation operation, JsonObject item) throws Throwable {\n        this.mInitLock.readLock().lock();\n\n        try {\n            ensureCorrectlyInitialized();\n\n            // prevent Coffman Circular wait condition: lock resources in same\n            // order, independent of unlock order. Op then Table then Id.\n\n            // get SHARED access to op lock\n            this.mOpLock.readLock().lock();\n\n            try {\n                // get SHARED access to table lock\n                MultiReadWriteLock<String> tableLock = this.mTableLockMap.lockRead(operation.getTableName());\n\n                try {\n                    // '/' is a reserved character that cannot be used on string\n                    // ids.\n                    // We use it to build a unique compound string from\n                    // tableName\n                    // and itemId\n                    String tableItemId = operation.getTableName() + \"/\" + operation.getItemId();\n\n                    // get EXCLUSIVE access to id lock\n                    MultiLock<String> idLock = this.mIdLockMap.lock(tableItemId);\n\n                    try {\n                        operation.accept(new LocalTableOperationProcessor(this.mStore, item, ITEM_BACKUP_TABLE));\n                        this.mOpQueue.enqueue(operation);\n                    } finally {\n                        this.mIdLockMap.unLock(idLock);\n                    }\n                } finally {\n                    this.mTableLockMap.unLockRead(tableLock);\n                }\n            } finally {\n                this.mOpLock.readLock().unlock();\n            }\n        } finally {\n            this.mInitLock.readLock().unlock();\n        }\n    }\n\n    private static class PushSyncRequest {\n        private Bookmark mBookmark;\n        private Semaphore mSignalDone;\n        private MobileServicePushFailedException mPushException;\n\n        private PushSyncRequest(Bookmark bookmark, Semaphore signalDone) {\n            this.mBookmark = bookmark;\n            this.mSignalDone = signalDone;\n        }\n    }\n\n    private static class PushSyncRequestConsumer extends Thread {\n        private MobileServiceSyncContext mContext;\n\n        private PushSyncRequestConsumer(MobileServiceSyncContext context) {\n            this.mContext = context;\n        }\n\n        @Override\n        public void run() {\n            try {\n                this.mContext.consumePushSR();\n            } catch (InterruptedException e) {\n                e.printStackTrace();\n            }\n        }\n    }\n\n    private static class LockProtectedOperation {\n        private TableOperation mOperation;\n        private MultiReadWriteLock<String> mTableLock;\n        private MultiLock<String> mIdLock;\n\n        private LockProtectedOperation(TableOperation operation, MultiReadWriteLock<String> tableLock, MultiLock<String> idLock) {\n            this.mOperation = operation;\n            this.mTableLock = tableLock;\n            this.mIdLock = idLock;\n        }\n\n        private TableOperation getOperation() {\n            return this.mOperation;\n        }\n\n        private MultiReadWriteLock<String> getTableLock() {\n            return this.mTableLock;\n        }\n\n        private MultiLock<String> getIdLock() {\n            return this.mIdLock;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncTable.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceSyncTable.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync;\n\nimport com.google.common.util.concurrent.FutureCallback;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.Gson;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceList;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.serialization.JsonEntityParser;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError;\n\nimport java.util.List;\n\n/**\n * Provides operations on local table.\n */\npublic class MobileServiceSyncTable<E> {\n    private MobileServiceJsonSyncTable mInternalTable;\n    private MobileServiceClient mClient;\n    private Class<E> mClazz;\n\n    /**\n     * Constructor for MobileServiceTable\n     *\n     * @param name   The name of the represented table\n     * @param client The MobileServiceClient used to invoke table operations\n     * @param clazz  The class used for data serialization\n     */\n    public MobileServiceSyncTable(String name, MobileServiceClient client, Class<E> clazz) {\n        this.mInternalTable = new MobileServiceJsonSyncTable(name, client);\n        this.mClazz = clazz;\n        this.mClient = client;\n    }\n\n    /**\n     * Returns the name of the represented table\n     */\n    public String getName() {\n        return mInternalTable.getName();\n    }\n\n    /**\n     * Performs a query against the remote table and stores results.\n     *\n     * @param query    an optional query to filter results\n     * @param queryKey key to identify the query\n     * @return A ListenableFuture that is done when results have been pulled.\n     */\n    public ListenableFuture<Void> pull(Query query, String queryId) {\n        ListenableFuture<Void> pull = this.mInternalTable.pull(query, queryId);\n\n        final SettableFuture<Void> result = SettableFuture.create();\n\n        Futures.addCallback(pull, new FutureCallback<Void>() {\n\n            @Override\n            public void onFailure(Throwable throwable) {\n                result.setException(throwable);\n            }\n\n            @Override\n            public void onSuccess(Void value) {\n                result.set(value);\n            }\n        });\n\n        return result;\n    }\n\n    /**\n     * Performs a query against the remote table and stores results.\n     *\n     * @param query an optional query to filter results\n     * @return A ListenableFuture that is done when results have been pulled.\n     */\n    public ListenableFuture<Void> pull(Query query) {\n        return pull(query, null);\n    }\n\n    /**\n     * Performs a query against the local table and deletes the results.\n     *\n     * @param query an optional query to filter results\n     * @return A ListenableFuture that is done when results have been purged.\n     */\n    public ListenableFuture<Void> purge(Query query) {\n        ListenableFuture<Void> internalFuture = this.mInternalTable.purge(query);\n\n        final SettableFuture<Void> future = SettableFuture.create();\n\n        Futures.addCallback(internalFuture, new FutureCallback<Void>() {\n\n            @Override\n            public void onFailure(Throwable throwable) {\n                future.setException(throwable);\n            }\n\n            @Override\n            public void onSuccess(Void value) {\n                future.set(value);\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Retrieve results from the local table.\n     *\n     * @param query an optional query to filter results\n     * @return A ListenableFuture that is done when the results have been\n     * retrieved.\n     */\n    public ListenableFuture<MobileServiceList<E>> read(Query query) {\n        final SettableFuture<MobileServiceList<E>> future = SettableFuture.create();\n\n        ListenableFuture<JsonElement> internalFuture = mInternalTable.read(query);\n\n        Futures.addCallback(internalFuture, new FutureCallback<JsonElement>() {\n            @Override\n            public void onFailure(Throwable throwable) {\n                future.setException(throwable);\n            }\n\n            @Override\n            public void onSuccess(JsonElement result) {\n                try {\n                    if (result.isJsonObject()) {\n                        JsonObject jsonObject = result.getAsJsonObject();\n\n                        int count = jsonObject.get(\"count\").getAsInt();\n                        JsonElement elements = jsonObject.get(\"results\");\n\n                        List<E> list = parseResults(elements);\n                        future.set(new MobileServiceList<E>(list, count));\n                    } else {\n                        List<E> list = parseResults(result);\n                        future.set(new MobileServiceList<E>(list, list.size()));\n                    }\n                } catch (Exception e) {\n                    future.setException(e);\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Looks up an item from the local table.\n     *\n     * @param itemId the id of the item to look up\n     * @return A ListenableFuture that is done when the item has been looked up.\n     */\n    public ListenableFuture<E> lookUp(String itemId) {\n        final SettableFuture<E> future = SettableFuture.create();\n\n        ListenableFuture<JsonObject> internalFuture = mInternalTable.lookUp(itemId);\n        Futures.addCallback(internalFuture, new FutureCallback<JsonObject>() {\n            @Override\n            public void onFailure(Throwable throwable) {\n                future.setException(throwable);\n            }\n\n            @Override\n            public void onSuccess(JsonObject result) {\n                try {\n\n                    if (result == null) {\n                        future.set(null);\n                    }\n\n                    future.set(parseResults(result).get(0));\n                } catch (Exception e) {\n                    future.setException(e);\n                }\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Insert an item into the local table and enqueue the operation to be\n     * synchronized on context push.\n     *\n     * @param item the item to be inserted\n     * @return A ListenableFuture that is done when the item has been inserted,\n     * returning a copy of the inserted item including id.\n     */\n    public ListenableFuture<E> insert(E item) {\n        final SettableFuture<E> future = SettableFuture.create();\n\n        final JsonObject json = mClient.getGsonBuilder().create().toJsonTree(item).getAsJsonObject();\n\n        JsonElement idJsonObject = json.get(\"id\");\n\n        if (idJsonObject != null && !idJsonObject.isJsonNull()) {\n            String itemId = idJsonObject.getAsString();\n\n            ListenableFuture<JsonObject> lookUpInternalFuture = mInternalTable.lookUp(itemId);\n\n            Futures.addCallback(lookUpInternalFuture, new FutureCallback<JsonObject>() {\n                @Override\n                public void onFailure(Throwable throwable) {\n                    future.setException(throwable);\n                }\n\n                @Override\n                public void onSuccess(JsonObject result) {\n\n                    if (result != null) {\n                        future.set(parseResults(result).get(0));\n                        return;\n                    }\n\n                    insertInternal(json, future);\n                }\n            });\n        } else {\n            insertInternal(json, future);\n        }\n\n        return future;\n    }\n\n    private void insertInternal(JsonObject json, final SettableFuture<E> finalFuture) {\n        ListenableFuture<JsonObject> internalFuture = mInternalTable.insert(json);\n\n        Futures.addCallback(internalFuture, new FutureCallback<JsonObject>() {\n            @Override\n            public void onFailure(Throwable throwable) {\n                finalFuture.setException(throwable);\n            }\n\n            @Override\n            public void onSuccess(JsonObject result) {\n                finalFuture.set(parseResults(result).get(0));\n            }\n        });\n    }\n\n    /**\n     * Update an item in the local table and enqueue the operation to be\n     * synchronized on context push.\n     *\n     * @param item the item to be updated\n     * @return A ListenableFuture that is done when the item has been updated.\n     */\n    public ListenableFuture<Void> update(E item) {\n        final SettableFuture<Void> future = SettableFuture.create();\n\n        JsonObject json = mClient.getGsonBuilder().create().toJsonTree(item).getAsJsonObject();\n\n        ListenableFuture<Void> internalFuture = mInternalTable.update(json);\n\n        Futures.addCallback(internalFuture, new FutureCallback<Void>() {\n            @Override\n            public void onFailure(Throwable throwable) {\n                future.setException(throwable);\n            }\n\n            @Override\n            public void onSuccess(Void value) {\n                future.set(value);\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Delete an item from the local table and enqueue the operation to be\n     * synchronized on context push.\n     *\n     * @param item the item to be deleted\n     * @return A ListenableFuture that is done when the item has been deleted.\n     */\n    public ListenableFuture<Void> delete(E item) {\n        final SettableFuture<Void> future = SettableFuture.create();\n\n        JsonObject json = mClient.getGsonBuilder().create().toJsonTree(item).getAsJsonObject();\n\n        ListenableFuture<Void> internalFuture = mInternalTable.delete(json);\n\n        Futures.addCallback(internalFuture, new FutureCallback<Void>() {\n            @Override\n            public void onFailure(Throwable throwable) {\n                future.setException(throwable);\n            }\n\n            @Override\n            public void onSuccess(Void value) {\n                future.set(value);\n            }\n        });\n\n        return future;\n    }\n\n    /**\n     * Delete an item from the local table and enqueue the operation to be\n     * synchronized on context push.\n     *\n     * @param itemId the id of the item to be deleted\n     * @return A ListenableFuture that is done when the item has been deleted.\n     */\n    public ListenableFuture<Void> delete(final String itemId) {\n        final SettableFuture<Void> future = SettableFuture.create();\n\n        ListenableFuture<Void> internalFuture = mInternalTable.delete(itemId);\n\n        Futures.addCallback(internalFuture, new FutureCallback<Void>() {\n            @Override\n            public void onFailure(Throwable throwable) {\n                future.setException(throwable);\n            }\n\n            @Override\n            public void onSuccess(Void value) {\n                future.set(value);\n            }\n        });\n\n        return future;\n    }\n\n    private List<E> parseResults(JsonElement results) {\n        Gson gson = mClient.getGsonBuilder().create();\n        return JsonEntityParser.parseResults(results, gson, mClazz);\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataInfo.java",
    "content": "package com.microsoft.windowsazure.mobileservices.table.sync.localstore;\n\n/**\n * Created by marianosanchez on 1/14/15.\n */\npublic class ColumnDataInfo {\n\n    ColumnDataType mColumnDataType;\n\n    String mOriginalName;\n\n\n    public String getOriginalName() {\n        return mOriginalName;\n    }\n\n    public ColumnDataType getColumnDataType() {\n        return mColumnDataType;\n    }\n\n    public ColumnDataInfo(ColumnDataType columnDataType, String originalName) {\n        mColumnDataType = columnDataType;\n        mOriginalName = originalName;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/localstore/ColumnDataType.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * ColumnDataType.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.localstore;\n\n/**\n * Enumeration of available column data types.\n */\npublic enum ColumnDataType {\n    Boolean, Integer, Real, String, Date, DateTimeOffset, Other\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStore.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceLocalStore.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.localstore;\n\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\n\nimport java.util.Map;\n\n/**\n * Allows saving and reading data in the local tables.\n */\npublic interface MobileServiceLocalStore {\n    /**\n     * Initializes the store for use.\n     */\n    void initialize() throws MobileServiceLocalStoreException;\n\n    /**\n     * Defines a table to be created/updated on initialization\n     *\n     * @param tableName the table name\n     * @param columns   a Map of column names and their respective data type\n     * @throws MobileServiceLocalStoreException\n     */\n    void defineTable(String tableName, Map<String, ColumnDataType> columns) throws MobileServiceLocalStoreException;\n\n    /**\n     * Retrieve results from the local store.\n     *\n     * @param query a query to specify the local table and filter results\n     * @return A JsonElement with the results\n     * @throws MobileServiceLocalStoreException\n     */\n    JsonElement read(Query query) throws MobileServiceLocalStoreException;\n\n    /**\n     * Looks up an item from the local store.\n     *\n     * @param tableName the local table name\n     * @param itemId    the id of the item to look up\n     * @return the item found\n     * @throws MobileServiceLocalStoreException\n     */\n    JsonObject lookup(String tableName, String itemId) throws MobileServiceLocalStoreException;\n\n    /**\n     * Insert or Update an item in the local store.\n     *\n     * @param tableName the local table name\n     * @param item      the item to be inserted\n     * @param fromServer true if the call is made based on data coming from the server e.g. in a pull operation; false if the call is made by the client such as insert or update calls on an IMobileServiceSyncTable.\n     * @throws MobileServiceLocalStoreException\n     */\n    void upsert(String tableName, JsonObject item, boolean fromServer) throws MobileServiceLocalStoreException;\n\n    /**\n     * Insert or Update a list of items in the local store.\n     *\n     * @param tableName the local table name\n     * @param items     the list of items to be inserted\n     * @param fromServer true if the call is made based on data coming from the server e.g. in a pull operation; false if the call is made by the client such as insert or update calls on an IMobileServiceSyncTable.\n     * @throws MobileServiceLocalStoreException\n     */\n    void upsert(String tableName, JsonObject[] items, boolean fromServer) throws MobileServiceLocalStoreException;\n\n    /**\n     * Delete an item from the local store.\n     *\n     * @param tableName the local table name\n     * @param itemId    the id of the item to be deleted\n     * @throws MobileServiceLocalStoreException\n     */\n    void delete(String tableName, String itemId) throws MobileServiceLocalStoreException;\n\n    /**\n     * Delete an item from the local store.\n     *\n     * @param tableName the local table name\n     * @param itemsIds  the list of ids of the items to be deleted\n     * @throws MobileServiceLocalStoreException\n     */\n    void delete(String tableName, String[] itemsIds) throws MobileServiceLocalStoreException;\n\n    /**\n     * Delete items from the local store.\n     *\n     * @param query a query to specify the local table and filter items\n     * @throws MobileServiceLocalStoreException\n     */\n    void delete(Query query) throws MobileServiceLocalStoreException;\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/localstore/MobileServiceLocalStoreException.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceLocalStoreException.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.localstore;\n\npublic class MobileServiceLocalStoreException extends Exception {\n    /**\n     * UID used for serialization\n     */\n    private static final long serialVersionUID = 8665204682638151717L;\n\n    /**\n     * Creates a new MobileServiceLocalStoreException with a detail message\n     *\n     * @param detail The detail message\n     */\n    public MobileServiceLocalStoreException(String detailMessage) {\n        super(detailMessage);\n    }\n\n    /**\n     * Creates a new MobileServiceLocalStoreException with a cause\n     *\n     * @param throwable The exception cause\n     */\n    public MobileServiceLocalStoreException(Throwable throwable) {\n        super(throwable);\n    }\n\n    /**\n     * Creates a new MobileServiceLocalStoreException with a detail message and\n     * a cause\n     *\n     * @param detail    The detail message\n     * @param throwable The exception cause\n     */\n    public MobileServiceLocalStoreException(String detailMessage, Throwable throwable) {\n        super(detailMessage, throwable);\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/localstore/SQLiteLocalStore.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * SQLiteLocalStore.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.localstore;\n\nimport android.annotation.TargetApi;\nimport android.content.Context;\nimport android.database.Cursor;\nimport android.database.DatabaseErrorHandler;\nimport android.database.sqlite.SQLiteDatabase;\nimport android.database.sqlite.SQLiteDatabase.CursorFactory;\nimport android.database.sqlite.SQLiteOpenHelper;\nimport android.os.Build;\n\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QuerySQLWriter;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Map;\nimport java.util.Map.Entry;\n\n/**\n * Implements MobileServiceLocalStore backed by an SQLite DB\n */\npublic class SQLiteLocalStore extends SQLiteOpenHelper implements MobileServiceLocalStore {\n    private Map<String, Map<String, ColumnDataInfo>> mTables;\n    private int mConcurrencyCount;\n    private Object mConcurrencyLock;\n\n    /**\n     * Constructor for SQLiteLocalStore\n     *\n     * @param context context to use to open or create the database\n     * @param name    name of the database file, or null for an in-memory database\n     * @param factory factory to use for creating cursor objects, or null for the\n     *                default\n     * @param version version number of the database (starting at 1); if the\n     *                database is older, onUpgrade will be used to upgrade the\n     *                database; if the database is newer, onDowngrade will be used\n     *                to downgrade the database\n     */\n    public SQLiteLocalStore(Context context, String name, CursorFactory factory, int version) {\n        super(context, name, factory, version);\n        this.mTables = new HashMap<String, Map<String, ColumnDataInfo>>();\n        this.mConcurrencyCount = 0;\n        this.mConcurrencyLock = new Object();\n    }\n\n    /**\n     * Constructor for SQLiteLocalStore\n     *\n     * @param context      context to use to open or create the database\n     * @param name         name of the database file, or null for an in-memory database\n     * @param factory      factory to use for creating cursor objects, or null for the\n     *                     default\n     * @param version      version number of the database (starting at 1); if the\n     *                     database is older, onUpgrade will be used to upgrade the\n     *                     database; if the database is newer, onDowngrade will be used\n     *                     to downgrade the database\n     * @param errorHandler the DatabaseErrorHandler to be used when sqlite reports\n     *                     database corruption, or null to use the default error handler.\n     */\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB)\n    public SQLiteLocalStore(Context context, String name, CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {\n        super(context, name, factory, version, errorHandler);\n        this.mTables = new HashMap<String, Map<String, ColumnDataInfo>>();\n    }\n\n    @Override\n    public void initialize() throws MobileServiceLocalStoreException {\n        SQLiteDatabase db = this.getWritableDatabaseSynchronized();\n        try {\n            for (Entry<String, Map<String, ColumnDataInfo>> entry : this.mTables.entrySet()) {\n                createTableFromObject(db, entry.getKey(), entry.getValue());\n            }\n        } catch (Throwable t) {\n            throw new MobileServiceLocalStoreException(t);\n        } finally {\n            this.closeDatabaseSynchronized(db);\n        }\n    }\n\n    @Override\n    public void defineTable(String tableName, Map<String, ColumnDataType> columns) throws MobileServiceLocalStoreException {\n        try {\n            String invTableName = normalizeTableName(tableName);\n\n            Map<String, ColumnDataInfo> table = this.mTables.containsKey(invTableName) ? this.mTables.get(invTableName) : new HashMap<String, ColumnDataInfo>();\n            table.put(\"id\", new ColumnDataInfo(ColumnDataType.String, \"id\"));\n\n            for (String colName : columns.keySet()) {\n                ColumnDataType colDataType = columns.get(colName);\n                String invColumnName = normalizeColumnName(colName);\n\n                validateReservedProperties(colDataType, invColumnName);\n\n                if (!invColumnName.equals(\"id\")) {\n                    table.put(invColumnName, new ColumnDataInfo(colDataType, colName));\n                }\n            }\n\n            this.mTables.put(invTableName, table);\n        } catch (Throwable t) {\n            throw new MobileServiceLocalStoreException(t);\n        }\n    }\n\n    @Override\n    public JsonElement read(Query query) throws MobileServiceLocalStoreException {\n        try {\n            JsonElement result;\n            JsonArray rows = new JsonArray();\n\n            String invTableName = normalizeTableName(query.getTableName());\n\n            Map<String, ColumnDataInfo> table = this.mTables.get(invTableName);\n\n            String[] columns = getColumns(query, table);\n\n            String whereClause = getWhereClause(query);\n\n            String orderByClause = QuerySQLWriter.getOrderByClause(query);\n\n            String limitClause = QuerySQLWriter.getLimitClause(query);\n\n            Integer inlineCount = null;\n\n            SQLiteDatabase db = this.getWritableDatabaseSynchronized();\n\n            try {\n                Cursor cursor = null;\n\n                try {\n                    if (query.hasInlineCount()) {\n                        cursor = db.query(invTableName, columns, whereClause, null, null, null, orderByClause, null);\n                        inlineCount = cursor.getCount();\n\n                        if (query.getSkip() > 0) {\n                            cursor.move(query.getSkip());\n                        }\n                    } else {\n                        cursor = db.query(invTableName, columns, whereClause, null, null, null, orderByClause, limitClause);\n                    }\n\n                    int limit = 0;\n\n                    while (!(query.getTop() > 0 && limit == query.getTop()) && cursor.moveToNext()) {\n                        JsonObject row = parseRow(cursor, table);\n                        rows.add(row);\n\n                        limit++;\n                    }\n                } finally {\n                    if (cursor != null && !cursor.isClosed()) {\n                        cursor.close();\n                    }\n                }\n            } finally {\n                this.closeDatabaseSynchronized(db);\n            }\n\n            if (query.hasInlineCount()) {\n                JsonObject resObj = new JsonObject();\n                resObj.addProperty(\"count\", inlineCount);\n                resObj.add(\"results\", rows);\n                result = resObj;\n            } else {\n                result = rows;\n            }\n\n            return result;\n        } catch (Throwable t) {\n            throw new MobileServiceLocalStoreException(t);\n        }\n    }\n\n    @Override\n    public JsonObject lookup(String tableName, String itemId) throws MobileServiceLocalStoreException {\n        try {\n            JsonObject result = null;\n            String invTableName = normalizeTableName(tableName);\n\n            Map<String, ColumnDataInfo> table = this.mTables.get(invTableName);\n\n            SQLiteDatabase db = this.getWritableDatabaseSynchronized();\n            \n            try {\n                Cursor cursor = null;\n\n                try {\n                    cursor = db.query(invTableName, table.keySet().toArray(new String[0]), \"id = '\" + itemId + \"'\", null, null, null, null);\n\n                    if (cursor.moveToNext()) {\n                        result = parseRow(cursor, table);\n                    }\n                } finally {\n                    if (cursor != null && !cursor.isClosed()) {\n                        cursor.close();\n                    }\n                }\n            } finally {\n                this.closeDatabaseSynchronized(db);\n            }\n\n            return result;\n        } catch (Throwable t) {\n            throw new MobileServiceLocalStoreException(t);\n        }\n    }\n\n    @Override\n    public void upsert(String tableName, JsonObject item, boolean fromServer) throws MobileServiceLocalStoreException {\n        try {\n\n            JsonObject[] items = new JsonObject[1];\n            items[0] = item;\n\n            upsert(tableName, items, fromServer);\n\n        } catch (Throwable t) {\n            throw new MobileServiceLocalStoreException(t);\n        }\n    }\n\n    @Override\n    public void upsert(String tableName, JsonObject[] items, boolean fromServer) throws MobileServiceLocalStoreException {\n        try {\n            String invTableName = normalizeTableName(tableName);\n\n            int itemsCount = items.length;\n\n            int tableColumnsSize = mTables.get(invTableName).entrySet().size();\n            int maxSize = 999;\n\n            int pageSize = maxSize / tableColumnsSize;\n\n            int pageCounts = (itemsCount / pageSize) + 1;\n\n            int pendingItems = itemsCount;\n\n            for (int i=0; i < pageCounts; i++) {\n\n                int localPageSize = pageSize;\n\n                if (pendingItems < pageSize) {\n                    localPageSize = pendingItems;\n                }\n\n                JsonObject[] pageItems = new JsonObject[localPageSize];\n\n                for(int j=0; j < localPageSize; j++) {\n                    pageItems[j] = items[(i * pageSize) + j];\n                }\n\n                Statement statement = generateUpsertStatement(invTableName, pageItems, fromServer);\n\n                if (fromServer && statement.sql == \"\")\n                    return;\n\n                SQLiteDatabase db = this.getWritableDatabaseSynchronized();\n\n                try {\n                    db.execSQL(statement.sql, statement.parameters.toArray());\n                } finally {\n                    this.closeDatabaseSynchronized(db);\n                }\n\n                pendingItems -= pageSize;\n            }\n\n        } catch (Throwable t) {\n            throw new MobileServiceLocalStoreException(t);\n        }\n    }\n\n    @Override\n    public void delete(String tableName, String itemId) throws MobileServiceLocalStoreException {\n        try {\n            String invTableName = normalizeTableName(tableName);\n\n            SQLiteDatabase db = this.getWritableDatabaseSynchronized();\n\n            try {\n                db.delete(invTableName, \"id = '\" + itemId + \"'\", null);\n            } finally {\n                this.closeDatabaseSynchronized(db);\n            }\n        } catch (Throwable t) {\n            throw new MobileServiceLocalStoreException(t);\n        }\n    }\n\n    @Override\n    public void delete(String tableName, String[] itemsIds) throws MobileServiceLocalStoreException {\n        try {\n            String invTableName = normalizeTableName(tableName);\n\n            SQLiteDatabase db = this.getWritableDatabaseSynchronized();\n\n            try {\n                for (String itemId : itemsIds) {\n                    db.delete(invTableName, \"id = '\" + itemId + \"'\", null);\n                }\n            } finally {\n                this.closeDatabaseSynchronized(db);\n            }\n        } catch (Throwable t) {\n            throw new MobileServiceLocalStoreException(t);\n        }\n    }\n\n    @Override\n    public void delete(Query query) throws MobileServiceLocalStoreException {\n        try {\n            String invTableName = normalizeTableName(query.getTableName());\n\n            String whereClause = getWhereClause(query);\n\n            SQLiteDatabase db = this.getWritableDatabaseSynchronized();\n\n            try {\n                db.delete(invTableName, whereClause, null);\n            } finally {\n                this.closeDatabaseSynchronized(db);\n            }\n        } catch (Throwable t) {\n            throw new MobileServiceLocalStoreException(t);\n        }\n    }\n\n    @Override\n    public void onCreate(SQLiteDatabase db) {\n    }\n\n    @Override\n    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\n    }\n\n    private String normalizeTableName(String tableName) {\n        String invTableName = tableName != null ? tableName.trim().toLowerCase(Locale.getDefault()) : null;\n\n        if (invTableName == null || tableName.length() == 0) {\n            throw new IllegalArgumentException(\"Table name cannot be null or empty.\");\n        }\n\n        if (invTableName.length() > 60) {\n            throw new IllegalArgumentException(\"Table name cannot be longer than 60 characters.\");\n        }\n\n        if (invTableName.matches(\"[a-zA-Z]/w*\")) {\n            throw new IllegalArgumentException(\"Table name must start with a letter, and can contain only alpha-numeric characters and underscores.\");\n        }\n\n        if (invTableName.matches(\"sqlite_/w*\")) {\n            throw new IllegalArgumentException(\"Table names prefixed with \\\"sqlite_\\\" are system reserved.\");\n        }\n\n        return invTableName;\n    }\n\n    private String normalizeColumnName(String columnName) {\n        String invColumnName = columnName != null ? columnName.trim().toLowerCase(Locale.getDefault()) : null;\n\n        if (invColumnName == null || columnName.length() == 0) {\n            throw new IllegalArgumentException(\"Column name cannot be null or empty.\");\n        }\n\n        if (invColumnName.length() > 128) {\n            throw new IllegalArgumentException(\"Column name cannot be longer than 128 characters.\");\n        }\n\n        if (invColumnName.matches(\"[a-zA-Z_]/w*\")) {\n            throw new IllegalArgumentException(\n                    \"Column name must start with a letter or underscore, and can contain only alpha-numeric characters and underscores.\");\n        }\n\n        if (invColumnName.matches(\"__/w*\") && !isSystemProperty(invColumnName)) {\n            throw new IllegalArgumentException(\"Column names prefixed with \\\"__\\\" are system reserved.\");\n        }\n\n        return invColumnName;\n    }\n\n    private List<String> normalizeColumnNames(List<String> columnNames) {\n        List<String> invColumnNames = new ArrayList<String>(columnNames.size());\n\n        for (String columnName : columnNames) {\n            invColumnNames.add(normalizeColumnName(columnName));\n        }\n\n        return invColumnNames;\n    }\n\n    private boolean isSystemProperty(String invColumnName) {\n\n        invColumnName = invColumnName.trim().toLowerCase(Locale.getDefault());\n\n        return invColumnName.equals(\"__version\") || invColumnName.equals(\"__createdat\") || invColumnName.equals(\"__updatedat\")\n                || invColumnName.equals(\"__queueloadedat\") || invColumnName.equals(\"__deleted\");\n    }\n\n    private void validateReservedProperties(ColumnDataType colDataType, String invColumnName) throws IllegalArgumentException {\n\n        invColumnName = invColumnName.trim().toLowerCase(Locale.getDefault());\n\n        if (invColumnName.equals(\"id\") && colDataType != ColumnDataType.String) {\n            throw new IllegalArgumentException(\"System column \\\"id\\\" must be ColumnDataType.String.\");\n        } else if (invColumnName.equals(\"__version\") && colDataType != ColumnDataType.String) {\n            throw new IllegalArgumentException(\"System column \\\"__version\\\" must be ColumnDataType.String.\");\n        } else if (invColumnName.equals(\"__createdat\") && (colDataType != ColumnDataType.DateTimeOffset && colDataType != ColumnDataType.Date)) {\n            throw new IllegalArgumentException(\"System column \\\"__createdat\\\" must be ColumnDataType.DateTimeOffset or ColumnDataType.Date.\");\n        } else if (invColumnName.equals(\"__updatedat\") && (colDataType != ColumnDataType.DateTimeOffset && colDataType != ColumnDataType.Date)) {\n            throw new IllegalArgumentException(\"System column \\\"__updatedat\\\" must be ColumnDataType.DateTimeOffset or ColumnDataType.Date.\");\n        } else if (invColumnName.equals(\"__queueloadedat\") && (colDataType != ColumnDataType.DateTimeOffset && colDataType != ColumnDataType.Date)) {\n            throw new IllegalArgumentException(\"System column \\\"__queueloadedat\\\" must be ColumnDataType.DateTimeOffset or ColumnDataType.Date.\");\n        } else if (invColumnName.equals(\"__deleted\") && colDataType != ColumnDataType.Boolean) {\n            throw new IllegalArgumentException(\"System column \\\"__deleted\\\" must be ColumnDataType.Boolean.\");\n        }\n    }\n\n    private JsonObject parseRow(Cursor cursor, Map<String, ColumnDataInfo> table) {\n        JsonObject result = new JsonObject();\n\n        for (Entry<String, ColumnDataInfo> column : table.entrySet()) {\n            String columnName = column.getKey();\n            String originalColumnName = column.getValue().getOriginalName();\n\n            ColumnDataType columnDataType = column.getValue().getColumnDataType();\n            int columnIndex = cursor.getColumnIndex(columnName);\n\n            if (columnIndex != -1) {\n\n                switch (columnDataType) {\n                    case Boolean:\n                        boolean booleanValue = cursor.getInt(columnIndex) > 0 ? true : false;\n                        result.addProperty(originalColumnName, booleanValue);\n                        break;\n                    case Real:\n                        double doubleValue = cursor.getDouble(columnIndex);\n                        result.addProperty(originalColumnName, doubleValue);\n                        break;\n                    case Integer:\n                        int intValue = cursor.getInt(columnIndex);\n                        result.addProperty(originalColumnName, intValue);\n                        break;\n                    case String:\n                        String stringValue = cursor.getString(columnIndex);\n                        result.addProperty(originalColumnName, stringValue);\n                        break;\n                    case Date:\n                        String dateValue = cursor.getString(columnIndex);\n                        result.addProperty(originalColumnName, dateValue);\n                        break;\n                    case DateTimeOffset:\n                        String dateTimeOffsetValue = cursor.getString(columnIndex);\n                        result.addProperty(originalColumnName, dateTimeOffsetValue);\n                        break;\n                    case Other:\n                        JsonElement otherValue = parseOtherDataType(cursor.getString(columnIndex));\n                        result.add(originalColumnName, otherValue);\n                        break;\n                }\n            }\n        }\n\n        return result;\n    }\n\n    private JsonElement parseOtherDataType(String value) {\n        if (value == null) {\n            return null;\n        }\n\n        return new JsonParser().parse(value);\n    }\n\n    private Statement generateUpsertStatement(String tableName, JsonObject[] items, boolean fromServer) {\n        Statement result = new Statement();\n\n        String invTableName = normalizeTableName(tableName);\n\n        StringBuilder sql = new StringBuilder();\n\n        sql.append(\"INSERT OR REPLACE INTO \\\"\");\n        sql.append(invTableName);\n        sql.append(\"\\\" (\");\n\n        String delimiter = \"\";\n\n        JsonObject firstItem = items[0];\n\n        Map<String, ColumnDataInfo> tableDefinition = mTables.get(invTableName);\n\n        List<Object> parameters = new ArrayList<Object>(firstItem.entrySet().size());\n\n        int columnsOnStatement = 0;\n\n        for (Entry<String, JsonElement> property : firstItem.entrySet()) {\n\n            //if (isSystemProperty(property.getKey()) && !tableDefinition.containsKey(property.getKey())) {\n            //    continue;\n            //}\n\n            if (fromServer && !tableDefinition.containsKey(property.getKey().toLowerCase())) {\n                continue;\n            }\n\n            String invColumnName = normalizeColumnName(property.getKey());\n            sql.append(delimiter);\n            sql.append(\"\\\"\");\n            sql.append(invColumnName);\n            sql.append(\"\\\"\");\n            delimiter = \",\";\n\n            columnsOnStatement++;\n        }\n\n        if (columnsOnStatement == 0){\n            result.sql = \"\";\n            result.parameters = parameters;\n\n            return result;\n        }\n\n        sql.append(\") VALUES \");\n\n        String prefix = \"\";\n\n        for (JsonObject item : items) {\n            sql.append(prefix);\n            appendInsertValuesSql(sql, parameters, tableDefinition, item, fromServer);\n            prefix = \",\";\n        }\n\n        result.sql = sql.toString();\n        result.parameters = parameters;\n\n        return result;\n    }\n\n    private void appendInsertValuesSql(StringBuilder sql, List<Object> parameters,\n                                       Map<String, ColumnDataInfo> tableDefinition, JsonObject item, boolean fromServer) {\n        sql.append(\"(\");\n        int colCount = 0;\n\n        for (Entry<String, JsonElement> property : item.entrySet()) {\n\n            if (fromServer && !tableDefinition.containsKey(normalizeColumnName(property.getKey()))) {\n                continue;\n            }\n\n            if (colCount > 0)\n                sql.append(\",\");\n\n            String paramName = \"@p\" + parameters.size();\n\n            JsonElement value = property.getValue();\n\n            if (value.isJsonNull()) {\n                parameters.add(null);\n            } else if (value.isJsonPrimitive()) {\n                if (value.getAsJsonPrimitive().isBoolean()) {\n                    long longVal = value.getAsJsonPrimitive().getAsBoolean() ? 1L : 0L;\n                    parameters.add(longVal);\n                } else if (value.getAsJsonPrimitive().isNumber()) {\n                    parameters.add(value.getAsJsonPrimitive().getAsDouble());\n                } else {\n                    parameters.add(value.getAsJsonPrimitive().getAsString());\n                }\n            } else {\n                parameters.add(value.toString());\n            }\n\n            sql.append(paramName);\n            colCount++;\n\n        }\n\n        sql.append(\")\");\n    }\n\n    private String[] getColumns(Query query, Map<String, ColumnDataInfo> table) {\n        String[] columns = table.keySet().toArray(new String[0]);\n\n        List<String> projection = query.getProjection();\n\n        if (projection != null && projection.size() > 0) {\n            columns = normalizeColumnNames(projection).toArray(new String[0]);\n        }\n        return columns;\n    }\n\n    private String getWhereClause(Query query) throws MobileServiceLocalStoreException {\n        String whereClause;\n\n        try {\n            whereClause = QuerySQLWriter.getWhereClause(query);\n        } catch (MobileServiceException e) {\n            throw new MobileServiceLocalStoreException(\"Unable to build filter expression.\", e);\n        }\n\n        if (whereClause != null && whereClause.length() == 0) {\n            whereClause = null;\n        }\n\n        return whereClause;\n    }\n\n    private void createTableFromObject(SQLiteDatabase db, String invTableName, Map<String, ColumnDataInfo> table) {\n        String tblSql = String.format(\"CREATE TABLE IF NOT EXISTS \\\"%s\\\" (\\\"id\\\" TEXT PRIMARY KEY);\", invTableName);\n        db.execSQL(tblSql);\n\n        List<String> invColumnNames = new ArrayList<String>();\n\n        String infoSql = String.format(\"PRAGMA table_info(\\\"%s\\\");\", invTableName);\n\n        Cursor cursor = null;\n\n        try {\n            cursor = db.rawQuery(infoSql, null);\n\n            while (cursor.moveToNext()) {\n                int columnIndex = cursor.getColumnIndex(\"name\");\n                String columnName = cursor.getString(columnIndex);\n                String invColumnName = normalizeColumnName(columnName);\n                invColumnNames.add(invColumnName);\n            }\n        } finally {\n            if (cursor != null && !cursor.isClosed()) {\n                cursor.close();\n            }\n        }\n\n        Map<String, ColumnDataType> newColumns = new HashMap<String, ColumnDataType>();\n\n        for (Entry<String, ColumnDataInfo> column : table.entrySet()) {\n            if (!invColumnNames.contains(column.getKey())) {\n                newColumns.put(column.getKey(), column.getValue().getColumnDataType());\n            }\n        }\n\n        for (Entry<String, ColumnDataType> newColumn : newColumns.entrySet()) {\n            String invColumnName = newColumn.getKey();\n\n            String type = \"\";\n\n            switch (newColumn.getValue()) {\n                case Boolean:\n                    type = \"INTEGER\";\n                    break;\n                case Real:\n                    type = \"REAL\";\n                    break;\n                case Integer:\n                    type = \"INTEGER\";\n                    break;\n                case String:\n                    type = \"TEXT\";\n                    break;\n                case Date:\n                    type = \"TEXT\";\n                    break;\n                case DateTimeOffset:\n                    type = \"TEXT\";\n                    break;\n                case Other:\n                    type = \"TEXT\";\n                    break;\n            }\n\n            String createSql = String.format(\"ALTER TABLE \\\"%s\\\" ADD COLUMN \\\"%s\\\" %s\", invTableName, invColumnName, type);\n\n            db.execSQL(createSql);\n        }\n    }\n    \n    private SQLiteDatabase getWritableDatabaseSynchronized() {\n        synchronized (mConcurrencyLock) {\n            mConcurrencyCount++;\n            return getWritableDatabase();\n        }\n    }\n    \n    private void closeDatabaseSynchronized(SQLiteDatabase db) {\n        synchronized (mConcurrencyLock) {\n            mConcurrencyCount--;\n            if (mConcurrencyCount == 0) {\n                db.close();\n            }\n        }\n    }\n\n    private static class Statement {\n        private String sql;\n        private List<Object> parameters;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperation.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * DeleteOperation.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\nimport java.util.Date;\nimport java.util.UUID;\n\n/**\n * Class representing a delete operation against remote table.\n */\npublic class DeleteOperation implements TableOperation {\n    private String mId;\n    private String mTableName;\n    private String mItemId;\n    private Date mCreatedAt;\n    private MobileServiceTableOperationState operationState;\n\n    /**\n     * Constructor for DeleteOperation\n     *\n     * @param tableName the table name\n     * @param itemId    the item id\n     */\n    public DeleteOperation(String tableName, String itemId) {\n        this.mId = UUID.randomUUID().toString();\n        this.mTableName = tableName;\n        this.mItemId = itemId;\n        this.mCreatedAt = new Date();\n    }\n\n    /**\n     * Create a new DeleteOperation\n     *\n     * @param id        the table operation id\n     * @param tableName the table name\n     * @param itemId    the item id\n     * @param createdAt the creation date of the table operation\n     * @return the DeleteOperation\n     */\n    public static DeleteOperation create(String id, String tableName, String itemId, Date createdAt) {\n        DeleteOperation operation = new DeleteOperation(tableName, itemId);\n        operation.mId = id;\n        operation.mCreatedAt = createdAt;\n        return operation;\n    }\n\n    @Override\n    public String getId() {\n        return this.mId;\n    }\n\n    @Override\n    public TableOperationKind getKind() {\n        return TableOperationKind.Delete;\n    }\n\n    @Override\n    public String getTableName() {\n        return this.mTableName;\n    }\n\n    @Override\n    public String getItemId() {\n        return this.mItemId;\n    }\n\n    @Override\n    public Date getCreatedAt() {\n        return this.mCreatedAt;\n    }\n\n    @Override\n    public <T> T accept(TableOperationVisitor<T> visitor) throws Throwable {\n        return visitor.visit(this);\n    }\n\n    /**\n     * Gets the operation state\n     *\n     * @return The operation state\n     */\n    @Override\n    public MobileServiceTableOperationState getOperationState() {\n        return operationState;\n    }\n\n    /**\n     * Sets the operation state\n     *\n     * @param operationState the Operation State\n     */\n    @Override\n    public void setOperationState(MobileServiceTableOperationState operationState) {\n        this.operationState = operationState;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/DeleteOperationCollapser.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * DeleteOperationCollapser.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\n/**\n * Class that encapsulates collapse logic for existing delete operation\n */\nclass DeleteOperationCollapser implements TableOperationVisitor<TableOperation> {\n    /**\n     * Constructor for DeleteOperationCollapser\n     *\n     * @param existingOperation the existing operation to collapse\n     */\n    DeleteOperationCollapser(DeleteOperation existingOperation) {\n    }\n\n    @Override\n    public TableOperation visit(InsertOperation newOperation) {\n        throw new IllegalStateException(\"A delete operation on the item is already in the queue.\");\n    }\n\n    @Override\n    public TableOperation visit(UpdateOperation newOperation) {\n        throw new IllegalStateException(\"A delete operation on the item is already in the queue.\");\n    }\n\n    @Override\n    public TableOperation visit(DeleteOperation newOperation) {\n        throw new IllegalStateException(\"A delete operation on the item is already in the queue.\");\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperation.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * InsertOperation.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\nimport java.util.Date;\nimport java.util.UUID;\n\n/**\n * Class representing an insert operation against remote table.\n */\npublic class InsertOperation implements TableOperation {\n    private String mId;\n    private String mTableName;\n    private String mItemId;\n    private Date mCreatedAt;\n    private MobileServiceTableOperationState operationState;\n\n    /**\n     * Constructor for InsertOperation\n     *\n     * @param tableName the table name\n     * @param itemId    the item id\n     */\n    public InsertOperation(String tableName, String itemId) {\n        this.mId = UUID.randomUUID().toString();\n        this.mTableName = tableName;\n        this.mItemId = itemId;\n        this.mCreatedAt = new Date();\n    }\n\n    /**\n     * Create a new InsertOperation\n     *\n     * @param id        the table operation id\n     * @param tableName the table name\n     * @param itemId    the item id\n     * @param createdAt the creation date of the table operation\n     * @return the InsertOperation\n     */\n    public static InsertOperation create(String id, String tableName, String itemId, Date createdAt) {\n        InsertOperation operation = new InsertOperation(tableName, itemId);\n        operation.mId = id;\n        operation.mCreatedAt = createdAt;\n        return operation;\n    }\n\n    @Override\n    public String getId() {\n        return this.mId;\n    }\n\n    @Override\n    public TableOperationKind getKind() {\n        return TableOperationKind.Insert;\n    }\n\n    @Override\n    public String getTableName() {\n        return this.mTableName;\n    }\n\n    @Override\n    public String getItemId() {\n        return this.mItemId;\n    }\n\n    @Override\n    public Date getCreatedAt() {\n        return this.mCreatedAt;\n    }\n\n    @Override\n    public <T> T accept(TableOperationVisitor<T> visitor) throws Throwable {\n        return visitor.visit(this);\n    }\n\n    /**\n     * Gets the operation state\n     *\n     * @return The operation state\n     */\n    @Override\n    public MobileServiceTableOperationState getOperationState() {\n        return operationState;\n    }\n\n    /**\n     * Sets the operation state\n     *\n     * @param operationState the Operation State\n     */\n    @Override\n    public void setOperationState(MobileServiceTableOperationState operationState) {\n        this.operationState = operationState;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/InsertOperationCollapser.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * InsertOperationCollapser.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\n/**\n * Class that encapsulates collapse logic for existing insert operation\n */\nclass InsertOperationCollapser implements TableOperationVisitor<TableOperation> {\n    private InsertOperation mExistingOperation;\n\n    /**\n     * Constructor for InsertOperationCollapser\n     *\n     * @param existingOperation the existing operation to collapse\n     */\n    InsertOperationCollapser(InsertOperation existingOperation) {\n        this.mExistingOperation = existingOperation;\n    }\n\n    @Override\n    public TableOperation visit(InsertOperation newOperation) {\n        throw new IllegalStateException(\"An insert operation on the item is already in the queue.\");\n    }\n\n    @Override\n    public TableOperation visit(UpdateOperation newOperation) {\n        return this.mExistingOperation;\n    }\n\n    @Override\n    public TableOperation visit(DeleteOperation newOperation) {\n\n        if (mExistingOperation.getOperationState() != MobileServiceTableOperationState.Failed) {\n            return null;\n        }\n\n        return newOperation;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/LocalTableOperationProcessor.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * LocalTableOperationProcessor.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore;\n\n/**\n * Processes a table operation against a local store.\n */\npublic class LocalTableOperationProcessor implements TableOperationVisitor<Void> {\n    private MobileServiceLocalStore mStore;\n    private JsonObject mItem;\n    private String mItemBackupTable;\n\n    /**\n     * Constructor for LocalTableOperationProcessor\n     *\n     * @param store           the local store\n     * @param item            the item to process\n     * @param itemBackupTable the table name for item backup\n     */\n    public LocalTableOperationProcessor(MobileServiceLocalStore store, JsonObject item, String itemBackupTable) {\n        this.mStore = store;\n        this.mItem = item;\n        this.mItemBackupTable = itemBackupTable;\n    }\n\n    @Override\n    public Void visit(InsertOperation operation) throws Throwable {\n        this.mStore.upsert(operation.getTableName(), this.mItem, false);\n        return null;\n    }\n\n    @Override\n    public Void visit(UpdateOperation operation) throws Throwable {\n        this.mStore.upsert(operation.getTableName(), this.mItem, false);\n        return null;\n    }\n\n    @Override\n    public Void visit(DeleteOperation operation) throws Throwable {\n        JsonObject backedUpItem = this.mStore.lookup(operation.getTableName(), operation.getItemId());\n\n        if (backedUpItem == null) {\n            backedUpItem = this.mItem;\n        }\n        // '/' is a reserved character that cannot be used on string ids.\n        // We use it to build a unique compound string from tableName and\n        // itemId\n        String tableItemId = operation.getTableName() + \"/\" + operation.getItemId();\n\n        JsonObject item = new JsonObject();\n        item.addProperty(\"id\", tableItemId);\n        item.addProperty(\"tablename\", operation.getTableName());\n        item.addProperty(\"itemid\", operation.getItemId());\n        item.add(\"clientitem\", backedUpItem);\n\n        this.mStore.upsert(this.mItemBackupTable, item, false);\n        this.mStore.delete(operation.getTableName(), operation.getItemId());\n\n        return null;\n    }\n\n    /**\n     * Gets the item to process\n     */\n    public JsonObject getItem() {\n        return this.mItem;\n    }\n\n    /**\n     * Sets the item to process\n     */\n    public void setItem(JsonObject item) {\n        this.mItem = item;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/MobileServiceTableOperationState.java",
    "content": "package com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * Created by marianosanchez on 3/10/15.\n */\npublic enum MobileServiceTableOperationState\n{\n    /**\n     * Pending\n     */\n    Pending(0),\n\n    /**\n     * Attempted\n     */\n    Attempted(1),\n\n    /**\n     * Failed\n     */\n    Failed(2);\n    private static final Map<Integer, MobileServiceTableOperationState> mValuesMap;\n    static {\n        mValuesMap = new HashMap<Integer, MobileServiceTableOperationState>(3);\n        mValuesMap.put(0, MobileServiceTableOperationState.Pending);\n        mValuesMap.put(1, MobileServiceTableOperationState.Attempted);\n        mValuesMap.put(2, MobileServiceTableOperationState.Failed);\n    }\n    private final int mValue;\n\n    private MobileServiceTableOperationState(int value) {\n        this.mValue = value;\n    }\n\n    /**\n     * Return the MobileServiceTableOperationState with the provided int value\n     *\n     * @param value the int value\n     * @return the matching MobileServiceTableOperationState\n     */\n    public static MobileServiceTableOperationState parse(int value) {\n        return mValuesMap.get(value);\n    }\n\n    /**\n     * Return the int value associated to the enum\n     */\n    public int getValue() {\n        return this.mValue;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/RemoteTableOperationProcessor.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * RemoteTableOperationProcessor.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceFeatures;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty;\n\nimport java.util.EnumSet;\nimport java.util.Locale;\nimport java.util.Map.Entry;\nimport java.util.concurrent.ExecutionException;\n\n/**\n * Processes a table operation against a remote store.\n */\npublic class RemoteTableOperationProcessor implements TableOperationVisitor<JsonObject> {\n    private MobileServiceClient mClient;\n    private JsonObject mItem;\n\n    /**\n     * Constructor for RemoteTableOperationProcessor\n     *\n     * @param client the mobile service client\n     * @param item   the item to process\n     */\n    public RemoteTableOperationProcessor(MobileServiceClient client, JsonObject item) {\n        this.mClient = client;\n        this.mItem = item;\n    }\n\n    private static EnumSet<MobileServiceSystemProperty> getSystemProperties(JsonObject instance) {\n        EnumSet<MobileServiceSystemProperty> systemProperties = EnumSet.noneOf(MobileServiceSystemProperty.class);\n\n        for (Entry<String, JsonElement> property : instance.entrySet()) {\n            String propertyName = property.getKey().trim().toLowerCase(Locale.getDefault());\n\n            switch (propertyName) {\n                case \"__createdat\":\n                    systemProperties.add(MobileServiceSystemProperty.CreatedAt);\n                    break;\n                case \"__updatedat\":\n                    systemProperties.add(MobileServiceSystemProperty.UpdatedAt);\n                    break;\n                case \"__version\":\n                    systemProperties.add(MobileServiceSystemProperty.Version);\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        return systemProperties;\n    }\n\n    private static JsonObject removeSystemProperties(JsonObject instance) {\n        boolean haveCloned = false;\n\n        for (Entry<String, JsonElement> property : instance.entrySet()) {\n            if (property.getKey().startsWith(\"__\")) {\n                if (!haveCloned) {\n                    instance = (JsonObject) new JsonParser().parse(instance.toString());\n                    haveCloned = true;\n                }\n\n                instance.remove(property.getKey());\n            }\n        }\n\n        return instance;\n    }\n\n    @Override\n    public JsonObject visit(InsertOperation operation) throws Throwable {\n        MobileServiceJsonTable table = this.getRemoteTable(operation.getTableName());\n        table.setSystemProperties(EnumSet.allOf(MobileServiceSystemProperty.class));\n\n        JsonObject item = removeSystemProperties(this.mItem);\n\n        ListenableFuture<JsonObject> future = table.insert(item);\n\n        try {\n            return future.get();\n        } catch (ExecutionException ex) {\n            throw ex.getCause();\n        }\n    }\n\n    @Override\n    public JsonObject visit(UpdateOperation operation) throws Throwable {\n        MobileServiceJsonTable table = this.getRemoteTable(operation.getTableName());\n        table.setSystemProperties(getSystemProperties(this.mItem));\n\n        ListenableFuture<JsonObject> future = table.update(this.mItem);\n\n        try {\n            return future.get();\n        } catch (ExecutionException ex) {\n            throw ex.getCause();\n        }\n    }\n\n    @Override\n    public JsonObject visit(DeleteOperation operation) throws Throwable {\n        MobileServiceJsonTable table = this.getRemoteTable(operation.getTableName());\n        ListenableFuture<Void> future = table.delete(this.mItem);\n\n        try {\n            future.get();\n\n            return null;\n        } catch (ExecutionException ex) {\n\n            if (!ExceptionIs404NotFound(ex)) {\n                throw ex.getCause();\n            }\n\n            return null;\n        }\n    }\n\n    private boolean ExceptionIs404NotFound(ExecutionException ex) {\n\n        MobileServiceException mse = (MobileServiceException) ex.getCause();\n\n        if (ex == null) {\n            return false;\n        }\n\n        int statusCode = mse.getResponse().getStatus().getStatusCode();\n\n        if (statusCode != 404) {\n            return false;\n        }\n\n        return true;\n\n    }\n\n    /**\n     * Gets the item to process\n     */\n    public JsonObject getItem() {\n        return this.mItem;\n    }\n\n    /**\n     * Sets the item to process\n     */\n    public void setItem(JsonObject item) {\n        this.mItem = item;\n    }\n\n    /**\n     * Returns an instance of a remote table to be used by this processor\n     *\n     * @param tableName the name of the remote table\n     * @return an instance of a remote table with the given name\n     */\n    private MobileServiceJsonTable getRemoteTable(String tableName) {\n        MobileServiceJsonTable table = this.mClient.getTable(tableName);\n        table.addFeature(MobileServiceFeatures.Offline);\n        return table;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperation.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * TableOperation.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\nimport java.util.Date;\n\n/**\n * Interface representing a table operation against remote table.\n */\npublic interface TableOperation {\n    /**\n     * Gets the unique id of the operation.\n     *\n     * @return The unique id.\n     */\n    String getId();\n\n    /**\n     * Gets the kind of table operation.\n     *\n     * @return The table operation kind.\n     */\n    TableOperationKind getKind();\n\n    /**\n     * Gets the name of the table the operation will be executed against.\n     *\n     * @return The table name.\n     */\n    String getTableName();\n\n    /**\n     * Gets the id of the item associated with the operation.\n     *\n     * @return The item id.\n     */\n    String getItemId();\n\n    /**\n     * Gets the creation date of the operation.\n     *\n     * @return The operation creation date.\n     */\n    Date getCreatedAt();\n\n    /**\n     * Accept a MobileServiceTableOperationVisitor that works against the\n     * operation.\n     *\n     * @param visitor An implementation of the visitor interface.\n     * @return An object whose type is determined by the type parameter of the\n     * visitor.\n     * @throws Throwable\n     */\n    <T> T accept(TableOperationVisitor<T> visitor) throws Throwable;\n\n    /**\n     * Gets the operation state\n     *\n     * @return The operation state\n     */\n    MobileServiceTableOperationState getOperationState();\n\n    /**\n     * Sets the operation state\n     *\n     * @param state the Operation State\n     */\n    void setOperationState(MobileServiceTableOperationState state);\n\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationCollapser.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * TableOperationCollapser.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\n/**\n * Class that encapsulates collapse logic for new table operation.\n */\npublic class TableOperationCollapser implements TableOperationVisitor<TableOperation> {\n    private TableOperation mNewOperation;\n\n    /**\n     * Constructor for TableOperationCollapser\n     *\n     * @param newOperation the new operation to collapse\n     */\n    public TableOperationCollapser(TableOperation newOperation) {\n        this.mNewOperation = newOperation;\n    }\n\n    @Override\n    public TableOperation visit(InsertOperation existingOperation) throws Throwable {\n        return mNewOperation.accept(new InsertOperationCollapser(existingOperation));\n    }\n\n    @Override\n    public TableOperation visit(UpdateOperation existingOperation) throws Throwable {\n        return mNewOperation.accept(new UpdateOperationCollapser(existingOperation));\n    }\n\n    @Override\n    public TableOperation visit(DeleteOperation existingOperation) throws Throwable {\n        return mNewOperation.accept(new DeleteOperationCollapser(existingOperation));\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationError.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * TableOperationError.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\nimport com.google.gson.JsonObject;\n\nimport java.util.Date;\nimport java.util.UUID;\n\n/**\n * Class representing a table operation error against remote table.\n */\npublic class TableOperationError {\n    private String mId;\n    private String mOperationId;\n    private TableOperationKind mOperationKind;\n    private String mTableName;\n    private String mItemId;\n    private JsonObject mClientItem;\n    private String mErrorMessage;\n    private Integer mStatusCode;\n    private String mServerResponse;\n    private JsonObject mServerItem;\n    private Date mCreatedAt;\n\n    /**\n     * Constructor for TableOperationError\n     *\n     * @param operationKind  the kind of table operation\n     * @param tableName      the table name\n     * @param itemId         the item id\n     * @param clientItem     the client item\n     * @param errorMessage   the error message\n     * @param statusCode     the status code of the response\n     * @param serverResponse the server response\n     * @param serverItem     the server item\n     */\n    public TableOperationError(String operationId, TableOperationKind operationKind, String tableName, String itemId, JsonObject clientItem, String errorMessage,\n                               Integer statusCode, String serverResponse, JsonObject serverItem) {\n        this.mId = UUID.randomUUID().toString();\n        this.mOperationId = operationId;\n        this.mOperationKind = operationKind;\n        this.mTableName = tableName;\n        this.mItemId = itemId;\n        this.mClientItem = clientItem;\n        this.mErrorMessage = errorMessage;\n        this.mStatusCode = statusCode;\n        this.mServerResponse = serverResponse;\n        this.mServerItem = serverItem;\n        this.mCreatedAt = new Date();\n    }\n\n    /**\n     * Creates a new table operation error\n     *\n     * @param id             the table operation error id\n     * @param operationKind  the kind of table operation\n     * @param tableName      the table name\n     * @param itemId         the item id\n     * @param clientItem     the client item\n     * @param errorMessage   the error message\n     * @param statusCode     the status code of the response\n     * @param serverResponse the server response\n     * @param serverItem     the server item\n     * @param createdAt      the creation date of the table operation error\n     * @return the table operation error\n     */\n    public static TableOperationError create(String id, String operationId, TableOperationKind operationKind, String tableName, String itemId, JsonObject clientItem,\n                                             String errorMessage, Integer statusCode, String serverResponse, JsonObject serverItem, Date createdAt) {\n        TableOperationError operationError = new TableOperationError(operationId, operationKind, tableName, itemId, clientItem, errorMessage, statusCode, serverResponse,\n                serverItem);\n        operationError.mId = id;\n        operationError.mCreatedAt = createdAt;\n        return operationError;\n    }\n\n    /**\n     * Gets the table operation error id\n     */\n    public String getId() {\n        return this.mId;\n    }\n\n\n    /**\n     * Gets the table operation id\n     */\n    public String getOperationId() {\n        return this.mOperationId;\n    }\n\n    /**\n     * Gets the kind of table operation\n     */\n    public TableOperationKind getOperationKind() {\n        return this.mOperationKind;\n    }\n\n    /**\n     * Gets the table name\n     */\n    public String getTableName() {\n        return this.mTableName;\n    }\n\n    /**\n     * Gets the item id\n     */\n    public String getItemId() {\n        return this.mItemId;\n    }\n\n    /**\n     * Gets the client item\n     */\n    public JsonObject getClientItem() {\n        return this.mClientItem;\n    }\n\n    /**\n     * Gets the error message\n     */\n    public String getErrorMessage() {\n        return this.mErrorMessage;\n    }\n\n    /**\n     * Gets the status code of the response\n     */\n    public Integer getStatusCode() {\n        return this.mStatusCode;\n    }\n\n    /**\n     * Gets the server response\n     */\n    public String getServerResponse() {\n        return this.mServerResponse;\n    }\n\n    /**\n     * Gets the server item\n     */\n    public JsonObject getServerItem() {\n        return this.mServerItem;\n    }\n\n    /**\n     * Gets the creation date of the table operation error\n     */\n    public Date getCreatedAt() {\n        return this.mCreatedAt;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationKind.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * TableOperationKind.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\nimport android.annotation.SuppressLint;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * Enumeration for kinds of table operations.\n */\n@SuppressLint(\"UseSparseArrays\")\npublic enum TableOperationKind {\n\n    /**\n     * Insert operation.\n     */\n    Insert(0),\n\n    /**\n     * Update operation.\n     */\n    Update(1),\n\n    /**\n     * Delete operation.\n     */\n    Delete(2);\n    private static final Map<Integer, TableOperationKind> mValuesMap;\n    static {\n        mValuesMap = new HashMap<Integer, TableOperationKind>(3);\n        mValuesMap.put(0, TableOperationKind.Insert);\n        mValuesMap.put(1, TableOperationKind.Update);\n        mValuesMap.put(2, TableOperationKind.Delete);\n    }\n    private final int mValue;\n\n    private TableOperationKind(int value) {\n        this.mValue = value;\n    }\n\n    /**\n     * Return the TableOperationKind with the provided int value\n     *\n     * @param value the int value\n     * @return the matching TableOperationKind\n     */\n    public static TableOperationKind parse(int value) {\n        return mValuesMap.get(value);\n    }\n\n    /**\n     * Return the int value associated to the enum\n     */\n    public int getValue() {\n        return this.mValue;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/TableOperationVisitor.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * TableOperationVisitor.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\n/**\n * Interface of a table operation visitor used to extend functionality.\n */\npublic interface TableOperationVisitor<E> {\n\n    /**\n     * Visit an insert operation.\n     *\n     * @param operation The operation to visit\n     * @return Defined by the implementer.\n     * @throws Throwable\n     */\n    E visit(InsertOperation operation) throws Throwable;\n\n    /**\n     * Visit an update operation.\n     *\n     * @param operation The operation to visit\n     * @return Defined by the implementer.\n     * @throws Throwable\n     */\n    E visit(UpdateOperation operation) throws Throwable;\n\n    /**\n     * Visit a delete operation.\n     *\n     * @param operation The operation to visit\n     * @return Defined by the implementer.\n     * @throws Throwable\n     */\n    E visit(DeleteOperation operation) throws Throwable;\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperation.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * UpdateOperation.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\nimport java.util.Date;\nimport java.util.UUID;\n\n/**\n * Class representing an update operation against remote table.\n */\npublic class UpdateOperation implements TableOperation {\n    private String mId;\n    private String mTableName;\n    private String mItemId;\n    private Date mCreatedAt;\n    private MobileServiceTableOperationState operationState;\n\n    /**\n     * Constructor for UpdateOperation\n     *\n     * @param tableName the table name\n     * @param itemId    the item id\n     */\n    public UpdateOperation(String tableName, String itemId) {\n        this.mId = UUID.randomUUID().toString();\n        this.mTableName = tableName;\n        this.mItemId = itemId;\n        this.mCreatedAt = new Date();\n    }\n\n    /**\n     * Create a new UpdateOperation\n     *\n     * @param id        the table operation id\n     * @param tableName the table name\n     * @param itemId    the item id\n     * @param createdAt the creation date of the table operation\n     * @return the UpdateOperation\n     */\n    public static UpdateOperation create(String id, String tableName, String itemId, Date createdAt) {\n        UpdateOperation operation = new UpdateOperation(tableName, itemId);\n        operation.mId = id;\n        operation.mCreatedAt = createdAt;\n        return operation;\n    }\n\n    @Override\n    public String getId() {\n        return this.mId;\n    }\n\n    @Override\n    public TableOperationKind getKind() {\n        return TableOperationKind.Update;\n    }\n\n    @Override\n    public String getTableName() {\n        return this.mTableName;\n    }\n\n    @Override\n    public String getItemId() {\n        return this.mItemId;\n    }\n\n    @Override\n    public Date getCreatedAt() {\n        return this.mCreatedAt;\n    }\n\n    @Override\n    public <T> T accept(TableOperationVisitor<T> visitor) throws Throwable {\n        return visitor.visit(this);\n    }\n\n    /**\n     * Gets the operation state\n     *\n     * @return The operation state\n     */\n    @Override\n    public MobileServiceTableOperationState getOperationState() {\n        return operationState;\n    }\n\n    /**\n     * Sets the operation state\n     *\n     * @param operationState the Operation State\n     */\n    @Override\n    public void setOperationState(MobileServiceTableOperationState operationState) {\n        this.operationState = operationState;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/operations/UpdateOperationCollapser.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * UpdateOperationCollapser.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.operations;\n\n/**\n * Class that encapsulates collapse logic for existing update operation\n */\nclass UpdateOperationCollapser implements TableOperationVisitor<TableOperation> {\n    private UpdateOperation mPreviousOperation;\n\n    /**\n     * Constructor for UpdateOperationCollapser\n     *\n     * @param existingOperation the existing operation to collapse\n     */\n    UpdateOperationCollapser(UpdateOperation previousOperation) {\n        this.mPreviousOperation = previousOperation;\n    }\n\n    @Override\n    public TableOperation visit(InsertOperation newOperation) {\n        throw new IllegalStateException(\"An update operation on the item is already in the queue.\");\n    }\n\n    @Override\n    public TableOperation visit(UpdateOperation newOperation) {\n        return this.mPreviousOperation;\n    }\n\n    @Override\n    public TableOperation visit(DeleteOperation newOperation) {\n        return newOperation;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/pull/IncrementalPullStrategy.java",
    "content": "package com.microsoft.windowsazure.mobileservices.table.sync.pull;\n\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.table.DateTimeOffset;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemColumns;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOperations;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException;\n\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\nimport java.util.EnumSet;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.TimeZone;\n\n/**\n * Created by marianosanchez on 11/3/14.\n */\npublic class IncrementalPullStrategy extends PullStrategy {\n\n    private static final String INCREMENTAL_PULL_STRATEGY_TABLE = \"__incrementalPullData\";\n\n    private MobileServiceLocalStore mStore;\n    private DateTimeOffset maxUpdatedAt;\n    private DateTimeOffset deltaToken;\n    private String queryId;\n    private Query originalQuery;\n    private MobileServiceJsonTable table;\n\n    public IncrementalPullStrategy(Query query, String queryId, MobileServiceLocalStore localStore, MobileServiceJsonTable table) {\n        super(query, table);\n        this.mStore = localStore;\n        this.queryId = queryId;\n        this.table = table;\n    }\n\n    public static void initializeStore(MobileServiceLocalStore store) throws MobileServiceLocalStoreException {\n\n        Map<String, ColumnDataType> columns = new HashMap<String, ColumnDataType>();\n        columns.put(\"id\", ColumnDataType.String);\n        columns.put(\"maxupdateddate\", ColumnDataType.String);\n\n        store.defineTable(INCREMENTAL_PULL_STRATEGY_TABLE, columns);\n    }\n\n    public void initialize() {\n\n        JsonElement results = null;\n\n        try {\n\n            table.setSystemProperties(EnumSet.noneOf(MobileServiceSystemProperty.class));\n            table.setSystemProperties(EnumSet.of(MobileServiceSystemProperty.Version, MobileServiceSystemProperty.Deleted, MobileServiceSystemProperty.UpdatedAt));\n\n            query.includeDeleted();\n            query.removeInlineCount();\n            query.removeProjection();\n\n            originalQuery = query;\n\n            results = mStore.read(\n                    QueryOperations.tableName(INCREMENTAL_PULL_STRATEGY_TABLE)\n                            .field(\"id\")\n                            .eq(query.getTableName() + \"_\" + queryId));\n\n            if (results != null) {\n\n                JsonArray resultsArray = results.getAsJsonArray();\n\n                if (resultsArray.size() > 0) {\n                    JsonElement result = resultsArray.get(0);\n\n                    String stringMaxUpdatedDate = result.getAsJsonObject()\n                            .get(\"maxupdateddate\").getAsString();\n\n                    deltaToken = maxUpdatedAt = getDateFromString(stringMaxUpdatedDate);\n                }\n            }\n\n            this.query.skip(-1);\n            this.query.top(defaultTop);\n\n            setupQuery(maxUpdatedAt);\n\n        } catch (MobileServiceLocalStoreException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    public void onResultsProcessed(JsonArray elements) {\n\n        if (elements.size() <= 0) {\n            return;\n        }\n\n        JsonObject lastElement = elements.get(elements.size() - 1).getAsJsonObject();\n\n        String lastElementUpdatedAt = lastElement.get(MobileServiceSystemColumns.UpdatedAt).getAsString();\n\n        maxUpdatedAt = getDateFromString(lastElementUpdatedAt);\n\n        saveMaxUpdatedDate(lastElementUpdatedAt);\n    }\n\n    public boolean moveToNextPage(int lastElementCount) {\n\n        if (deltaToken == null || maxUpdatedAt.after(deltaToken)) {\n\n            if (lastElementCount == 0)\n                return false;\n\n            deltaToken = maxUpdatedAt;\n\n            this.query.skip(-1);\n\n            setupQuery(maxUpdatedAt);\n\n            return true;\n        }\n\n        return super.moveToNextPage(lastElementCount);\n    }\n\n    private void saveMaxUpdatedDate(String lastElementUpdatedAt) {\n\n        JsonObject updatedElement = new JsonObject();\n\n        updatedElement.addProperty(\"id\", query.getTableName() + \"_\" + queryId);\n        updatedElement.addProperty(\"maxupdateddate\", lastElementUpdatedAt);\n\n        try {\n            mStore.upsert(INCREMENTAL_PULL_STRATEGY_TABLE, updatedElement, false);\n        } catch (MobileServiceLocalStoreException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    private void setupQuery(DateTimeOffset maxUpdatedAt) {\n\n        totalRead = 0;\n        this.query = originalQuery.deepClone();\n\n        if (query.getOrderBy().size() > 0) {\n            this.query.getOrderBy().clear();\n        }\n\n        if (maxUpdatedAt != null) {\n            Query filterQuery = QueryOperations.field(MobileServiceSystemColumns.UpdatedAt).ge(this.maxUpdatedAt);\n\n            if (this.query.getQueryNode() != null) {\n                this.query = this.query.and(filterQuery);\n            } else {\n                this.query = filterQuery;\n            }\n        }\n\n        this.query.top(defaultTop);\n\n        this.query.getOrderBy().clear();\n\n        this.query.orderBy(MobileServiceSystemColumns.UpdatedAt, QueryOrder.Ascending);\n    }\n\n    private DateTimeOffset getDateFromString(String stringValue) {\n\n        if (stringValue == null) {\n            return null;\n        }\n\n        SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\");\n        sdf.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\n        try {\n            return new DateTimeOffset(sdf.parse(stringValue));\n        } catch (ParseException e) {\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/pull/PullStrategy.java",
    "content": "package com.microsoft.windowsazure.mobileservices.table.sync.pull;\n\nimport com.google.gson.JsonArray;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemColumns;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\n\nimport java.util.EnumSet;\n\n/**\n * Created by marianosanchez on 11/3/14.\n */\npublic class PullStrategy {\n\n    int defaultTop = 50;\n\n    Query query;\n    MobileServiceJsonTable table;\n    int totalRead; // used to track how many we have read so far since the last delta\n\n    public PullStrategy(Query query, MobileServiceJsonTable table) {\n\n        this.query = query;\n        this.table = table;\n    }\n\n    public void initialize() {\n\n        table.setSystemProperties(EnumSet.noneOf(MobileServiceSystemProperty.class));\n\n        table.setSystemProperties(EnumSet.of(MobileServiceSystemProperty.Version, MobileServiceSystemProperty.Deleted));\n\n        query.includeDeleted();\n        query.removeInlineCount();\n        query.removeProjection();\n\n        if (this.query.getTop() == 0) {\n            this.query.top(defaultTop);\n        } else {\n            this.query.top(Math.min(this.query.getTop(), defaultTop));\n        }\n\n        if (query.getOrderBy().size() == 0) {\n            this.query.orderBy(MobileServiceSystemColumns.Id, QueryOrder.Ascending);\n        }\n\n        if (this.query.getSkip() < 0) {\n            this.query.skip(0);\n        }\n    }\n\n    public void onResultsProcessed(JsonArray elements) {\n        return;\n    }\n\n    public boolean moveToNextPage(int lastElementCount) {\n\n        totalRead += lastElementCount;\n\n        if (lastElementCount == 0)\n            return false;\n\n\n        this.query.skip(totalRead);\n\n        return true;\n    }\n\n    public Query getLastQuery() {\n        return this.query;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushCompletionResult.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServicePushCompletionResult.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.push;\n\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError;\n\nimport java.util.List;\n\n/**\n * Gives you errors and status of the push completion.\n */\npublic class MobileServicePushCompletionResult {\n    /**\n     * The state in which push finished.\n     */\n    private MobileServicePushStatus mStatus;\n\n    /**\n     * Errors caused by executing operation against remote table.\n     */\n    private List<TableOperationError> mOperationErrors;\n\n    /**\n     * Internal error caught during push.\n     */\n    private Throwable mInternalError;\n\n    /**\n     * Constructor for MobileServicePushCompletionResult\n     */\n    public MobileServicePushCompletionResult() {\n\n    }\n\n    /**\n     * Gets the push status\n     */\n    public MobileServicePushStatus getStatus() {\n        return this.mStatus;\n    }\n\n    /**\n     * Sets the push status\n     */\n    public void setStatus(MobileServicePushStatus status) {\n        this.mStatus = status;\n    }\n\n    /**\n     * Gets the list of table operation errors\n     */\n    public List<TableOperationError> getOperationErrors() {\n        return this.mOperationErrors;\n    }\n\n    /**\n     * Sets the list of table operation errors\n     */\n    public void setOperationErrors(List<TableOperationError> operationErrors) {\n        this.mOperationErrors = operationErrors;\n    }\n\n    /**\n     * Gets the internal error\n     */\n    public Throwable getInternalError() {\n        return this.mInternalError;\n    }\n\n    /**\n     * Sets the internal error\n     */\n    public void setInternalError(Throwable internalError) {\n        this.mInternalError = internalError;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushFailedException.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServicePushFailedException.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.push;\n\n/**\n * Class that represents an exception during push sync\n */\npublic class MobileServicePushFailedException extends Exception {\n    /**\n     * UID used for serialization\n     */\n    private static final long serialVersionUID = 1365719768140939515L;\n\n    private MobileServicePushCompletionResult mPushCompletionResult;\n\n    /**\n     * Constructor for MobileServicePushFailedException\n     *\n     * @param pushCompletionResult the push completion result\n     */\n    public MobileServicePushFailedException(MobileServicePushCompletionResult pushCompletionResult) {\n        this.mPushCompletionResult = pushCompletionResult;\n    }\n\n    /**\n     * Gets the push completion result\n     */\n    public MobileServicePushCompletionResult getPushCompletionResult() {\n        return this.mPushCompletionResult;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/push/MobileServicePushStatus.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServicePushStatus.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.push;\n\nimport android.annotation.SuppressLint;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * Enumeration for push sync status.\n */\n@SuppressLint(\"UseSparseArrays\")\npublic enum MobileServicePushStatus {\n\n    /**\n     * All table operations in the push action were completed, possibly with\n     * errors.\n     */\n    Complete(0),\n\n    /**\n     * Push was aborted due to network error.\n     */\n    CancelledByNetworkError(1),\n\n    /**\n     * Push was aborted due to authentication error.\n     */\n    CancelledByAuthenticationError(2),\n\n    /**\n     * Push was aborted due to error from local store.\n     */\n    CancelledByLocalStoreError(3),\n\n    /**\n     * Push failed due to an internal error.\n     */\n    InternalError(Integer.MAX_VALUE);\n    private static final Map<Integer, MobileServicePushStatus> mValuesMap;\n    static {\n        mValuesMap = new HashMap<Integer, MobileServicePushStatus>(4);\n        mValuesMap.put(0, MobileServicePushStatus.Complete);\n        mValuesMap.put(1, MobileServicePushStatus.CancelledByNetworkError);\n        mValuesMap.put(2, MobileServicePushStatus.CancelledByAuthenticationError);\n        mValuesMap.put(3, MobileServicePushStatus.CancelledByLocalStoreError);\n        mValuesMap.put(Integer.MAX_VALUE, MobileServicePushStatus.InternalError);\n    }\n    private final int mValue;\n\n    private MobileServicePushStatus(int value) {\n        this.mValue = value;\n    }\n\n    /**\n     * Return the MobileServicePushStatus with the provided int value\n     *\n     * @param value the int value\n     * @return the matching MobileServicePushStatus\n     */\n    public static MobileServicePushStatus parse(int value) {\n        return mValuesMap.get(value);\n    }\n\n    /**\n     * Return the int value associated to the enum\n     */\n    public int getValue() {\n        return this.mValue;\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationErrorList.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * OperationErrorList.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.queue;\n\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOperations;\nimport com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind;\n\nimport java.text.ParseException;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.concurrent.locks.ReadWriteLock;\nimport java.util.concurrent.locks.ReentrantReadWriteLock;\n\n/**\n * List of all table operation errors\n */\npublic class OperationErrorList {\n    /**\n     * Table that stores operation errors\n     */\n    private static final String OPERATION_ERROR_TABLE = \"__errors\";\n\n    private MobileServiceLocalStore mStore;\n\n    private List<TableOperationError> mList;\n\n    private ReadWriteLock mSyncLock;\n\n    private OperationErrorList(MobileServiceLocalStore store) {\n        this.mStore = store;\n        this.mList = new ArrayList<TableOperationError>();\n        this.mSyncLock = new ReentrantReadWriteLock(true);\n    }\n\n    /**\n     * Initializes requirements on the local store\n     *\n     * @param store the local store\n     * @throws MobileServiceLocalStoreException\n     */\n    public static void initializeStore(MobileServiceLocalStore store) throws MobileServiceLocalStoreException {\n        Map<String, ColumnDataType> columns = new HashMap<String, ColumnDataType>();\n        columns.put(\"id\", ColumnDataType.String);\n        columns.put(\"operationId\", ColumnDataType.String);\n        columns.put(\"tablename\", ColumnDataType.String);\n        columns.put(\"itemid\", ColumnDataType.String);\n        columns.put(\"clientitem\", ColumnDataType.Other);\n        columns.put(\"errormessage\", ColumnDataType.String);\n        columns.put(\"statuscode\", ColumnDataType.Real);\n        columns.put(\"serverresponse\", ColumnDataType.String);\n        columns.put(\"serveritem\", ColumnDataType.Other);\n        columns.put(\"operationkind\", ColumnDataType.String);\n        columns.put(\"__createdat\", ColumnDataType.Date);\n\n        store.defineTable(OPERATION_ERROR_TABLE, columns);\n    }\n\n    /**\n     * Loads the list of table operation errors from the local store\n     *\n     * @param store the local store\n     * @return the list of table operation errors\n     * @throws java.text.ParseException\n     * @throws MobileServiceLocalStoreException\n     */\n    public static OperationErrorList load(MobileServiceLocalStore store) throws ParseException, MobileServiceLocalStoreException {\n        OperationErrorList opQueue = new OperationErrorList(store);\n\n        JsonElement operations = store.read(QueryOperations.tableName(OPERATION_ERROR_TABLE));\n\n        if (operations.isJsonArray()) {\n            JsonArray array = (JsonArray) operations;\n\n            for (JsonElement element : array) {\n                if (element.isJsonObject()) {\n                    TableOperationError operationError = deserialize((JsonObject) element);\n                    opQueue.mList.add(operationError);\n                }\n            }\n        }\n\n        return opQueue;\n    }\n\n    private static JsonObject serialize(TableOperationError operationError) throws ParseException {\n        JsonObject element = new JsonObject();\n\n        element.addProperty(\"id\", operationError.getId());\n        element.addProperty(\"operationId\", operationError.getOperationId());\n        element.addProperty(\"operationkind\", operationError.getOperationKind().getValue());\n        element.addProperty(\"tablename\", operationError.getTableName());\n        element.addProperty(\"itemid\", operationError.getItemId());\n\n        if (operationError.getClientItem() != null) {\n            element.add(\"clientitem\", operationError.getClientItem());\n        }\n\n        element.addProperty(\"errormessage\", operationError.getErrorMessage());\n\n        if (operationError.getStatusCode() != null) {\n            element.addProperty(\"statuscode\", operationError.getStatusCode());\n        }\n\n        if (operationError.getServerResponse() != null) {\n            element.addProperty(\"serverresponse\", operationError.getServerResponse());\n        }\n\n        if (operationError.getServerItem() != null) {\n            element.add(\"serveritem\", operationError.getServerItem());\n        }\n\n        element.addProperty(\"__createdat\", DateSerializer.serialize(operationError.getCreatedAt()));\n\n        return element;\n    }\n\n    private static TableOperationError deserialize(JsonObject element) throws ParseException {\n        String id = element.get(\"id\").getAsString();\n        String operationId = element.get(\"operationId\").getAsString();\n        int operationKind = element.get(\"operationkind\").getAsNumber().intValue();\n        String tableName = element.get(\"tablename\").getAsString();\n        String itemId = element.get(\"itemid\").getAsString();\n        String errorMessage = element.get(\"errormessage\").getAsString();\n        Integer statusCode = element.get(\"statuscode\") != null ? element.get(\"statuscode\").getAsInt() : null;\n        String serverResponse = element.get(\"serverresponse\") != null ? element.get(\"serverresponse\").getAsString() : null;\n        Date createdAt = DateSerializer.deserialize(element.get(\"__createdat\").getAsString());\n\n        JsonObject clientItem = null;\n\n        if (element.get(\"clientitem\") != null && !element.get(\"clientitem\").isJsonNull()) {\n            clientItem = element.get(\"clientitem\").getAsJsonObject();\n        }\n\n        JsonObject serverItem = null;\n\n        if (element.get(\"serveritem\") != null && !element.get(\"serveritem\").isJsonNull()) {\n            serverItem = element.get(\"serveritem\").getAsJsonObject();\n        }\n\n        return TableOperationError.create(id, operationId, TableOperationKind.parse(operationKind), tableName, itemId, clientItem, errorMessage, statusCode, serverResponse,\n                serverItem, createdAt);\n    }\n\n    /**\n     * Adds a new table operation error\n     *\n     * @param operationError the table operation error\n     * @throws java.text.ParseException\n     * @throws MobileServiceLocalStoreException\n     */\n    public void add(TableOperationError operationError) throws ParseException, MobileServiceLocalStoreException {\n        this.mSyncLock.writeLock().lock();\n\n        try {\n            this.mStore.upsert(OPERATION_ERROR_TABLE, serialize(operationError), false);\n\n            this.mList.add(operationError);\n        } finally {\n            this.mSyncLock.writeLock().unlock();\n        }\n    }\n\n    /**\n     * Returns the count of pending table operation errors\n     */\n    public int countPending() {\n        this.mSyncLock.readLock().lock();\n\n        try {\n            return this.mList.size();\n        } finally {\n            this.mSyncLock.readLock().unlock();\n        }\n    }\n\n    /**\n     * Returns the list of all pending table operation errors\n     */\n    public List<TableOperationError> getAll() {\n        this.mSyncLock.readLock().lock();\n\n        try {\n            return new ArrayList<TableOperationError>(this.mList);\n        } finally {\n            this.mSyncLock.readLock().unlock();\n        }\n    }\n\n    /**\n     * Empties the list of pending table operation errors\n     *\n     * @throws MobileServiceLocalStoreException\n     */\n    public void clear() throws MobileServiceLocalStoreException {\n        this.mSyncLock.writeLock().lock();\n\n        try {\n            this.mList.clear();\n\n            this.mStore.delete(QueryOperations.tableName(OPERATION_ERROR_TABLE));\n        } finally {\n            this.mSyncLock.writeLock().unlock();\n        }\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/queue/OperationQueue.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * OperationQueue.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.queue;\n\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOperations;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\nimport com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.DeleteOperation;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.InsertOperation;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.MobileServiceTableOperationState;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationCollapser;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationVisitor;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.UpdateOperation;\n\nimport java.text.ParseException;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.LinkedList;\nimport java.util.Map;\nimport java.util.Queue;\nimport java.util.concurrent.locks.ReadWriteLock;\nimport java.util.concurrent.locks.ReentrantReadWriteLock;\n\n/**\n * Queue of all table operations i.e. Push, Pull, Insert, Update, Delete\n */\npublic class OperationQueue {\n    /**\n     * Table that stores operation queue items\n     */\n    private static final String OPERATION_QUEUE_TABLE = \"__operations\";\n    private MobileServiceLocalStore mStore;\n    private Queue<OperationQueueItem> mQueue;\n    private Queue<BookmarkQueueItem> mBookmarkQueue;\n    private Map<String, OperationQueueItem> mIdOperationMap;\n    private Map<String, Integer> mTableCountMap;\n    private Date mLoadedAt;\n    private long mSequence;\n    private ReadWriteLock mSyncLock;\n    private OperationQueue(MobileServiceLocalStore store) {\n        this.mStore = store;\n\n        this.mQueue = new LinkedList<OperationQueueItem>();\n        this.mBookmarkQueue = new LinkedList<BookmarkQueueItem>();\n\n        this.mIdOperationMap = new HashMap<String, OperationQueueItem>();\n        this.mTableCountMap = new HashMap<String, Integer>();\n\n        this.mLoadedAt = new Date();\n        this.mSequence = 0;\n\n        this.mSyncLock = new ReentrantReadWriteLock(true);\n    }\n\n    /**\n     * Initializes requirements on the local store\n     *\n     * @param store the local store\n     * @throws MobileServiceLocalStoreException\n     */\n    public static void initializeStore(MobileServiceLocalStore store) throws MobileServiceLocalStoreException {\n        Map<String, ColumnDataType> columns = new HashMap<String, ColumnDataType>();\n        columns.put(\"id\", ColumnDataType.String);\n        columns.put(\"kind\", ColumnDataType.Real);\n        columns.put(\"tablename\", ColumnDataType.String);\n        columns.put(\"itemid\", ColumnDataType.String);\n        columns.put(\"__createdat\", ColumnDataType.Date);\n        columns.put(\"__queueloadedat\", ColumnDataType.Date);\n        columns.put(\"sequence\", ColumnDataType.Real);\n        columns.put(\"state\", ColumnDataType.Real);\n\n        store.defineTable(OPERATION_QUEUE_TABLE, columns);\n    }\n\n    /**\n     * Loads the queue of table operations from the local store\n     *\n     * @param store the local store\n     * @return the queue of table operations\n     * @throws java.text.ParseException\n     * @throws MobileServiceLocalStoreException\n     */\n    public static OperationQueue load(MobileServiceLocalStore store) throws ParseException, MobileServiceLocalStoreException {\n        OperationQueue opQueue = new OperationQueue(store);\n\n        JsonElement operations = store.read(QueryOperations.tableName(OPERATION_QUEUE_TABLE).orderBy(\"__queueLoadedAt\", QueryOrder.Ascending)\n                .orderBy(\"sequence\", QueryOrder.Ascending));\n\n        if (operations.isJsonArray()) {\n            JsonArray array = (JsonArray) operations;\n\n            for (JsonElement element : array) {\n                if (element.isJsonObject()) {\n                    OperationQueueItem opQueueItem = deserialize((JsonObject) element);\n                    opQueue.mQueue.add(opQueueItem);\n\n                    // '/' is a reserved character that cannot be used on string\n                    // ids.\n                    // We use it to build a unique compound string from\n                    // tableName and itemId\n                    String tableItemId = opQueueItem.getTableName() + \"/\" + opQueueItem.getItemId();\n\n                    opQueue.mIdOperationMap.put(tableItemId, opQueueItem);\n\n                    Integer tableCount = opQueue.mTableCountMap.get(opQueueItem.getTableName());\n\n                    if (tableCount != null) {\n                        opQueue.mTableCountMap.put(opQueueItem.getTableName(), tableCount + 1);\n                    } else {\n                        opQueue.mTableCountMap.put(opQueueItem.getTableName(), 1);\n                    }\n                }\n            }\n        }\n\n        return opQueue;\n    }\n\n    private static JsonObject serialize(OperationQueueItem opQueueItem) throws ParseException {\n        JsonObject element = new JsonObject();\n\n        element.addProperty(\"id\", opQueueItem.getId());\n        element.addProperty(\"kind\", opQueueItem.getKind().getValue());\n        element.addProperty(\"tablename\", opQueueItem.getTableName());\n        element.addProperty(\"itemid\", opQueueItem.getItemId());\n        element.addProperty(\"__createdat\", DateSerializer.serialize(opQueueItem.getCreatedAt()));\n        element.addProperty(\"__queueloadedat\", DateSerializer.serialize(opQueueItem.getQueueLoadedAt()));\n        element.addProperty(\"sequence\", opQueueItem.getSequence());\n        element.addProperty(\"state\", opQueueItem.getOperationState().getValue());\n\n        return element;\n    }\n\n    private static OperationQueueItem deserialize(JsonObject element) throws ParseException {\n        String id = element.get(\"id\").getAsString();\n        int kind = element.get(\"kind\").getAsInt();\n        String tableName = element.get(\"tablename\").getAsString();\n        String itemId = element.get(\"itemid\").getAsString();\n        Date createdAt = DateSerializer.deserialize(element.get(\"__createdat\").getAsString());\n        Date queueLoadedAt = DateSerializer.deserialize(element.get(\"__queueloadedat\").getAsString());\n        long sequence = element.get(\"sequence\").getAsLong();\n        int state = element.get(\"state\").getAsInt();\n\n        TableOperation operation = null;\n        switch (kind) {\n            case 0:\n                operation = InsertOperation.create(id, tableName, itemId, createdAt);\n                break;\n            case 1:\n                operation = UpdateOperation.create(id, tableName, itemId, createdAt);\n                break;\n            case 2:\n                operation = DeleteOperation.create(id, tableName, itemId, createdAt);\n                break;\n        }\n\n        operation.setOperationState(MobileServiceTableOperationState.parse(state));\n\n        return new OperationQueueItem(operation, queueLoadedAt, sequence);\n    }\n\n    /**\n     * Enqueue a new table operation\n     *\n     * @param operation the table operation\n     * @throws Throwable\n     */\n    public void enqueue(TableOperation operation) throws Throwable {\n        this.mSyncLock.writeLock().lock();\n\n        try {\n\n            //If an operation state is already seted, keep it to support requee failed operations\n            if (operation.getOperationState() == null) {\n                operation.setOperationState(MobileServiceTableOperationState.Pending);\n            }\n\n            // '/' is a reserved character that cannot be used on string ids.\n            // We use it to build a unique compound string from tableName and\n            // itemId\n            String tableItemId = operation.getTableName() + \"/\" + operation.getItemId();\n\n            if (this.mIdOperationMap.containsKey(tableItemId)) {\n                OperationQueueItem prevOpQueueItem = this.mIdOperationMap.get(tableItemId);\n                TableOperation prevOperation = prevOpQueueItem.getOperation();\n\n                TableOperation collapsedOperation = prevOperation.accept(new TableOperationCollapser(operation));\n\n                if (collapsedOperation == null || collapsedOperation == operation) {\n                    prevOpQueueItem.cancel();\n\n                    removeOperationQueueItem(prevOpQueueItem);\n\n                    if (collapsedOperation == operation) {\n                        enqueueOperation(operation);\n                    }\n                }\n\n                dequeueCancelledOperations();\n            } else {\n                enqueueOperation(operation);\n            }\n\n        } finally {\n            this.mSyncLock.writeLock().unlock();\n        }\n    }\n\n    /**\n     * Dequeue the next table operation\n     *\n     * @return the table operation\n     * @throws java.text.ParseException\n     * @throws MobileServiceLocalStoreException\n     */\n    public TableOperation dequeue() throws ParseException, MobileServiceLocalStoreException {\n        this.mSyncLock.writeLock().lock();\n\n        try {\n            TableOperation result = null;\n            OperationQueueItem opQueueItem = this.mQueue.peek();\n\n            if (opQueueItem != null) {\n                result = dequeueOperation(opQueueItem);\n            }\n\n            return result;\n        } finally {\n            this.mSyncLock.writeLock().unlock();\n        }\n    }\n\n    public void removeOperationWithErrorFromQueue(TableOperationError operationError) throws ParseException, MobileServiceLocalStoreException {\n        this.mSyncLock.writeLock().lock();\n\n        try {\n            String tableItemId = operationError.getTableName() + \"/\" + operationError.getItemId();\n\n            if (this.mIdOperationMap.containsKey(tableItemId)) {\n                OperationQueueItem currentOperationQueueItem = this.mIdOperationMap.get(tableItemId);\n\n                currentOperationQueueItem.cancel();\n\n                removeOperationQueueItem(currentOperationQueueItem);\n\n                dequeueCancelledOperations();\n            }\n\n        } finally {\n            this.mSyncLock.writeLock().unlock();\n        }\n    }\n\n    /**\n     * Peek the next table operation\n     *\n     * @return the table operation\n     */\n    public TableOperation peek() {\n        this.mSyncLock.readLock().lock();\n\n        try {\n            return this.mQueue.peek() != null ? this.mQueue.peek().getOperation() : null;\n        } finally {\n            this.mSyncLock.readLock().unlock();\n        }\n    }\n\n    /**\n     * Get the next table operation\n     *\n     * @return the table operation\n     */\n    public TableOperation element() {\n        this.mSyncLock.readLock().lock();\n\n        try {\n            return this.mQueue.element() != null ? this.mQueue.element().getOperation() : null;\n        } finally {\n            this.mSyncLock.readLock().unlock();\n        }\n    }\n\n    /**\n     * Returns the count of pending table operation\n     */\n    public int countPending() {\n        this.mSyncLock.readLock().lock();\n\n        try {\n            return this.mIdOperationMap.size();\n        } finally {\n            this.mSyncLock.readLock().unlock();\n        }\n    }\n\n    /**\n     * Returns the count of pending table operation for a specific table\n     *\n     * @param tableName the table name\n     * @return the count of operations\n     */\n    public int countPending(String tableName) {\n        this.mSyncLock.readLock().lock();\n\n        try {\n            return this.mTableCountMap.get(tableName) != null ? this.mTableCountMap.get(tableName) : 0;\n        } finally {\n            this.mSyncLock.readLock().unlock();\n        }\n    }\n\n    /**\n     * Adds a new push sync bookmark\n     *\n     * @return the bookmark\n     */\n    public Bookmark bookmark() {\n        this.mSyncLock.writeLock().lock();\n\n        try {\n            BookmarkQueueItem bookmarkQueueItem = new BookmarkQueueItem(this.mLoadedAt, this.mSequence);\n            this.mBookmarkQueue.add(bookmarkQueueItem);\n            return new Bookmark(this, bookmarkQueueItem);\n        } finally {\n            this.mSyncLock.writeLock().unlock();\n        }\n    }\n\n    /**\n     * Remove a push sync bookmark\n     *\n     * @param bookmark the push sync bookmark\n     */\n    public void unbookmark(Bookmark bookmark) {\n        this.mSyncLock.writeLock().lock();\n\n        try {\n            bookmark.mBookmarkQueueItem.mCancelled = true;\n\n            dequeueCancelledBookmarks();\n        } finally {\n            this.mSyncLock.writeLock().unlock();\n        }\n    }\n\n    private void enqueueOperation(TableOperation operation) throws ParseException, MobileServiceLocalStoreException {\n        OperationQueueItem opQueueItem = new OperationQueueItem(operation, this.mLoadedAt, this.mSequence++);\n\n        this.mStore.upsert(OPERATION_QUEUE_TABLE, serialize(opQueueItem), false);\n\n        this.mQueue.add(opQueueItem);\n\n        // '/' is a reserved character that cannot be used on string ids.\n        // We use it to build a unique compound string from tableName and\n        // itemId\n        String tableItemId = operation.getTableName() + \"/\" + operation.getItemId();\n\n        this.mIdOperationMap.put(tableItemId, opQueueItem);\n\n        Integer tableCount = this.mTableCountMap.get(operation.getTableName());\n\n        if (tableCount != null) {\n            this.mTableCountMap.put(operation.getTableName(), tableCount + 1);\n        } else {\n            this.mTableCountMap.put(operation.getTableName(), 1);\n        }\n    }\n\n    private TableOperation dequeueOperation(OperationQueueItem opQueueItem) throws MobileServiceLocalStoreException {\n        this.mQueue.poll();\n\n        removeOperationQueueItem(opQueueItem);\n\n        dequeueCancelledOperations();\n\n        return opQueueItem.getOperation();\n    }\n\n    private void removeOperationQueueItem(OperationQueueItem opQueueItem) throws MobileServiceLocalStoreException {\n        // '/' is a reserved character that cannot be used on string ids.\n        // We use it to build a unique compound string from tableName and\n        // itemId\n        String tableItemId = opQueueItem.getTableName() + \"/\" + opQueueItem.getItemId();\n\n        this.mIdOperationMap.remove(tableItemId);\n\n        Integer tableCount = this.mTableCountMap.get(opQueueItem.getTableName());\n\n        if (tableCount != null && tableCount > 1) {\n            this.mTableCountMap.put(opQueueItem.getTableName(), tableCount - 1);\n        } else {\n            this.mTableCountMap.remove(opQueueItem.getTableName());\n        }\n\n        this.mStore.delete(OPERATION_QUEUE_TABLE, opQueueItem.getId());\n    }\n\n    private void dequeueCancelledOperations() {\n        while (this.mQueue.peek() != null && this.mQueue.peek().isCancelled()) {\n            this.mQueue.poll();\n        }\n    }\n\n    private void dequeueCancelledBookmarks() {\n        while (this.mBookmarkQueue.peek() != null && this.mBookmarkQueue.peek().mCancelled) {\n            this.mBookmarkQueue.poll();\n        }\n    }\n\n    private TableOperation dequeueBookmarked(BookmarkQueueItem bookmarkQueueItem) throws MobileServiceLocalStoreException {\n        this.mSyncLock.writeLock().lock();\n\n        try {\n            if (bookmarkQueueItem.mCancelled) {\n                throw new IllegalStateException(\"The bookmark has been cancelled.\");\n            } else if (!isCurrentBookmark(bookmarkQueueItem)) {\n                throw new IllegalStateException(\"There are other pending bookmarks to be processed.\");\n            } else {\n                TableOperation result = null;\n                OperationQueueItem opQueueItem = this.mQueue.peek();\n\n                if (verifyBookmarkedOperation(bookmarkQueueItem, opQueueItem)) {\n                    result = dequeueOperation(opQueueItem);\n                }\n\n                return result;\n            }\n        } finally {\n            this.mSyncLock.writeLock().unlock();\n        }\n    }\n\n    private TableOperation peekBookmarked(BookmarkQueueItem bookmarkQueueItem) {\n        this.mSyncLock.readLock().lock();\n\n        try {\n            if (bookmarkQueueItem.mCancelled) {\n                throw new IllegalStateException(\"The bookmark has been cancelled.\");\n            } else if (!isCurrentBookmark(bookmarkQueueItem)) {\n                throw new IllegalStateException(\"There are other pending bookmarks to be processed.\");\n            } else {\n                TableOperation result = null;\n                OperationQueueItem opQueueItem = this.mQueue.peek();\n\n                if (verifyBookmarkedOperation(bookmarkQueueItem, opQueueItem)) {\n                    result = opQueueItem.getOperation();\n                }\n\n                return result;\n            }\n        } finally {\n            this.mSyncLock.readLock().unlock();\n        }\n    }\n\n    private boolean isCurrentBookmark(BookmarkQueueItem bookmarkQueueItem) {\n        this.mSyncLock.readLock().lock();\n\n        try {\n            return this.mBookmarkQueue.peek() == bookmarkQueueItem;\n        } finally {\n            this.mSyncLock.readLock().unlock();\n        }\n    }\n\n    private boolean verifyBookmarkedOperation(BookmarkQueueItem bookmarkQueueItem, OperationQueueItem opQueueItem) {\n        return bookmarkQueueItem != null\n                && opQueueItem != null\n                && (opQueueItem.getQueueLoadedAt().before(bookmarkQueueItem.mQueueLoadedAt) || (opQueueItem.getQueueLoadedAt().equals(\n                bookmarkQueueItem.mQueueLoadedAt) && opQueueItem.getSequence() < bookmarkQueueItem.mSequence));\n    }\n\n    private static class OperationQueueItem implements TableOperation {\n        private TableOperation mOperation;\n        private Date mQueueLoadedAt;\n        private long mSequence;\n        private boolean mCancelled;\n\n        private OperationQueueItem(TableOperation operation, Date queueLoadedAt, long sequence) {\n            this.mOperation = operation;\n            this.mQueueLoadedAt = queueLoadedAt;\n            this.mSequence = sequence;\n            this.mCancelled = false;\n        }\n\n        @Override\n        public String getId() {\n            return this.mOperation.getId();\n        }\n\n        @Override\n        public TableOperationKind getKind() {\n            return this.mOperation.getKind();\n        }\n\n        @Override\n        public String getTableName() {\n            return this.mOperation.getTableName();\n        }\n\n        @Override\n        public String getItemId() {\n            return this.mOperation.getItemId();\n        }\n\n        @Override\n        public Date getCreatedAt() {\n            return this.mOperation.getCreatedAt();\n        }\n\n        private TableOperation getOperation() {\n            return this.mOperation;\n        }\n\n        private Date getQueueLoadedAt() {\n            return this.mQueueLoadedAt;\n        }\n\n        private long getSequence() {\n            return this.mSequence;\n        }\n\n        private boolean isCancelled() {\n            return this.mCancelled;\n        }\n\n        private void cancel() {\n            this.mCancelled = true;\n        }\n\n        @Override\n        public <T> T accept(TableOperationVisitor<T> visitor) throws Throwable {\n            return this.mOperation.accept(visitor);\n        }\n\n        /**\n         * Gets the operation state\n         *\n         * @return The operation state\n         */\n        @Override\n        public MobileServiceTableOperationState getOperationState() {\n            return this.mOperation.getOperationState();\n        }\n\n        /**\n         * Sets the operation state\n         *\n         * @param state the Operation State\n         */\n        @Override\n        public void setOperationState(MobileServiceTableOperationState state) {\n            this.mOperation.setOperationState(state);\n        }\n    }\n\n    private static class BookmarkQueueItem {\n        private Date mQueueLoadedAt;\n        private long mSequence;\n        private boolean mCancelled;\n\n        private BookmarkQueueItem(Date queueLoadedAt, long sequence) {\n            this.mQueueLoadedAt = queueLoadedAt;\n            this.mSequence = sequence;\n            this.mCancelled = false;\n        }\n    }\n\n    /**\n     * Class that represents a push sync bookmark, and table operations within\n     * it\n     */\n    public static class Bookmark {\n        private OperationQueue mOpQueue;\n        private BookmarkQueueItem mBookmarkQueueItem;\n\n        private Bookmark(OperationQueue opQueue, BookmarkQueueItem bookmarkQueueItem) {\n            this.mOpQueue = opQueue;\n            this.mBookmarkQueueItem = bookmarkQueueItem;\n        }\n\n        /**\n         * Dequeue the next bookmarked table operation\n         *\n         * @return the table operation\n         * @throws MobileServiceLocalStoreException\n         */\n        public TableOperation dequeue() throws MobileServiceLocalStoreException {\n            return this.mOpQueue.dequeueBookmarked(this.mBookmarkQueueItem);\n        }\n\n        /**\n         * Peek the next bookmarked table operation\n         *\n         * @return the table operation\n         */\n        public TableOperation peek() {\n            return this.mOpQueue.peekBookmarked(this.mBookmarkQueueItem);\n        }\n\n        /**\n         * Returns true if the bookmark is the first and current in the queue\n         */\n        public boolean isCurrentBookmark() {\n            return this.mOpQueue.isCurrentBookmark(this.mBookmarkQueueItem);\n        }\n\n        /**\n         * Returns true if the bookmark is canceled\n         */\n        public boolean isCancelled() {\n            return this.mBookmarkQueueItem.mCancelled;\n        }\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandler.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceSyncHandler.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.synchandler;\n\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation;\nimport com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult;\n\n/**\n * Handles table operation errors and push completion results.\n */\npublic interface MobileServiceSyncHandler {\n\n    /**\n     * Executes a table operation against a remote store\n     *\n     * @param processor the remote table processor\n     * @param operation the table operation\n     * @return the operation result\n     * @throws MobileServiceSyncHandlerException\n     */\n    JsonObject executeTableOperation(RemoteTableOperationProcessor processor, TableOperation operation) throws MobileServiceSyncHandlerException;\n\n    /**\n     * Handles push sync completion\n     *\n     * @param pushCompletionResult the push sync result\n     * @throws MobileServiceSyncHandlerException\n     */\n    void onPushComplete(MobileServicePushCompletionResult pushCompletionResult) throws MobileServiceSyncHandlerException;\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/MobileServiceSyncHandlerException.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MobileServiceSyncHandlerException.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.synchandler;\n\n/**\n * Class that represents an exception during sync handling\n */\npublic class MobileServiceSyncHandlerException extends Exception {\n    /**\n     * UID used for serialization\n     */\n    private static final long serialVersionUID = 7017018356478886950L;\n\n    /**\n     * Creates a new MobileServiceSyncHandlerException with a detail message\n     *\n     * @param detail The detail message\n     */\n    public MobileServiceSyncHandlerException(String detailMessage) {\n        super(detailMessage);\n    }\n\n    /**\n     * Creates a new MobileServiceSyncHandlerException with a cause\n     *\n     * @param throwable The exception cause\n     */\n    public MobileServiceSyncHandlerException(Throwable throwable) {\n        super(throwable);\n    }\n\n    /**\n     * Creates a new MobileServiceSyncHandlerException with a detail message and\n     * a cause\n     *\n     * @param detail    The detail message\n     * @param throwable The exception cause\n     */\n    public MobileServiceSyncHandlerException(String detailMessage, Throwable throwable) {\n        super(detailMessage, throwable);\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * SimpleSyncHandler.java\n */\npackage com.microsoft.windowsazure.mobileservices.table.sync.synchandler;\n\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation;\nimport com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult;\n\n/**\n * Basic implementation of MobileServiceSyncHandler\n */\npublic class SimpleSyncHandler implements MobileServiceSyncHandler {\n\n    @Override\n    public JsonObject executeTableOperation(RemoteTableOperationProcessor processor, TableOperation operation) throws MobileServiceSyncHandlerException {\n        try {\n            return operation.accept(processor);\n        } catch (Throwable e) {\n            throw new MobileServiceSyncHandlerException(e);\n        }\n    }\n\n    @Override\n    public void onPushComplete(MobileServicePushCompletionResult pushCompletionResult) throws MobileServiceSyncHandlerException {\n        if (pushCompletionResult.getOperationErrors() != null && pushCompletionResult.getOperationErrors().size() > 0) {\n            throw new MobileServiceSyncHandlerException(\"There were unhandled operation errors.\");\n        }\n\n        return;\n    }\n}"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/threading/MultiLockDictionary.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MultiLockDictionary.java\n */\npackage com.microsoft.windowsazure.mobileservices.threading;\n\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.concurrent.locks.Lock;\nimport java.util.concurrent.locks.ReentrantLock;\n\n/**\n * A key-lock dictionary that discards no longer referenced locks\n *\n * @param <T> type of the key and param to the MultiLock<T> lock\n */\npublic class MultiLockDictionary<T> {\n    private Map<T, MultiLock<T>> mMap;\n    private Object sync;\n    /**\n     * Constructor for MultiLockDictionary\n     */\n    public MultiLockDictionary() {\n        this.mMap = new HashMap<T, MultiLock<T>>();\n        this.sync = new Object();\n    }\n\n    /**\n     * Aquire a lock for the requested key\n     *\n     * @param key the key\n     * @return the lock\n     */\n    public MultiLock<T> lock(T key) {\n        MultiLock<T> multiLock = null;\n\n        synchronized (sync) {\n            if (!this.mMap.containsKey(key)) {\n                this.mMap.put(key, new MultiLock<T>());\n            }\n\n            multiLock = this.mMap.get(key);\n            multiLock.mCount++;\n        }\n\n        multiLock.mLock.lock();\n\n        return multiLock;\n    }\n\n    /**\n     * Release the provided lock\n     *\n     * @param multiLock the lock\n     */\n    public void unLock(MultiLock<T> multiLock) {\n        synchronized (sync) {\n            multiLock.mCount--;\n            multiLock.mLock.unlock();\n\n            if (multiLock.mCount == 0) {\n                this.mMap.remove(multiLock.mKey);\n            }\n        }\n    }\n\n    /**\n     * A lock that implements reference count\n     *\n     * @param <T> type of the corresponding key\n     */\n    public static class MultiLock<T> {\n        private T mKey;\n        private int mCount;\n        private Lock mLock;\n\n        /**\n         * Constructor for MultiLock\n         */\n        public MultiLock() {\n            this.mCount = 0;\n            this.mLock = new ReentrantLock(true);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/threading/MultiReadWriteLockDictionary.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\n/**\n * MultiReadWriteLockDictionary.java\n */\npackage com.microsoft.windowsazure.mobileservices.threading;\n\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.concurrent.locks.ReadWriteLock;\nimport java.util.concurrent.locks.ReentrantReadWriteLock;\n\n/**\n * A key-readWriteLock dictionary that discards no longer referenced locks\n *\n * @param <T> type of the key and param to the MultiReadWriteLock<T> lock\n */\npublic class MultiReadWriteLockDictionary<T> {\n    private Map<T, MultiReadWriteLock<T>> mMap;\n    private Object sync;\n    /**\n     * Constructor for MultiReadWriteLockDictionary\n     */\n    public MultiReadWriteLockDictionary() {\n        this.mMap = new HashMap<T, MultiReadWriteLock<T>>();\n        this.sync = new Object();\n    }\n\n    /**\n     * Aquire a read lock for the requested key\n     *\n     * @param key the key\n     * @return the lock\n     */\n    public MultiReadWriteLock<T> lockRead(T key) {\n        MultiReadWriteLock<T> multiRWLock = increaseLock(key);\n\n        multiRWLock.mReadWriteLock.readLock().lock();\n\n        return multiRWLock;\n    }\n\n    /**\n     * Aquire a write lock for the requested key\n     *\n     * @param key the key\n     * @return the lock\n     */\n    public MultiReadWriteLock<T> lockWrite(T key) {\n        MultiReadWriteLock<T> multiRWLock = increaseLock(key);\n\n        multiRWLock.mReadWriteLock.writeLock().lock();\n\n        return multiRWLock;\n    }\n\n    /**\n     * Release the provided read lock\n     *\n     * @param multiRWLock the lock\n     */\n    public void unLockRead(MultiReadWriteLock<T> multiRWLock) {\n        multiRWLock.mReadWriteLock.readLock().unlock();\n\n        decreaseLock(multiRWLock);\n    }\n\n    /**\n     * Release the provided write lock\n     *\n     * @param multiRWLock the lock\n     */\n    public void unLockWrite(MultiReadWriteLock<T> multiRWLock) {\n        multiRWLock.mReadWriteLock.writeLock().unlock();\n\n        decreaseLock(multiRWLock);\n    }\n\n    private MultiReadWriteLock<T> increaseLock(T key) {\n        MultiReadWriteLock<T> multiRWLock = null;\n\n        synchronized (sync) {\n            if (!this.mMap.containsKey(key)) {\n                this.mMap.put(key, new MultiReadWriteLock<T>());\n            }\n\n            multiRWLock = this.mMap.get(key);\n            multiRWLock.mCount++;\n        }\n\n        return multiRWLock;\n    }\n\n    private void decreaseLock(MultiReadWriteLock<T> multiRWLock) {\n        synchronized (sync) {\n            multiRWLock.mCount--;\n\n            if (multiRWLock.mCount == 0) {\n                this.mMap.remove(multiRWLock.mKey);\n            }\n        }\n    }\n\n    /**\n     * A readWriteLock that implements reference count\n     *\n     * @param <T> type of the corresponding key\n     */\n    public static class MultiReadWriteLock<T> {\n        private T mKey;\n        private int mCount;\n        private ReadWriteLock mReadWriteLock;\n\n        /**\n         * Constructor for MultiReadWriteLock\n         */\n        public MultiReadWriteLock() {\n            this.mCount = 0;\n            this.mReadWriteLock = new ReentrantReadWriteLock(true);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/android/src/sdk/src/main/res/values/strings.xml",
    "content": "<resources>\n</resources>\n"
  },
  {
    "path": "sdk/android/src/tools/License.rtf",
    "content": "{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1\\adeff39\\deff0\\stshfdbch11\\stshfloch0\\stshfhich0\\stshfbi0\\deflang1033\\deflangfe1033\\themelang1033\\themelangfe2052\\themelangcs1025{\\fonttbl{\\f0\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times};}\n{\\f2\\fbidi \\fmodern\\fcharset0\\fprq1{\\*\\panose 02070309020205020404}Courier New{\\*\\falt Arial};}{\\f3\\fbidi \\froman\\fcharset2\\fprq2{\\*\\panose 05050102010706020507}Symbol{\\*\\falt Bookshelf Symbol 3};}\n{\\f10\\fbidi \\fnil\\fcharset2\\fprq2{\\*\\panose 05000000000000000000}Wingdings{\\*\\falt Symbol};}{\\f11\\fbidi \\fmodern\\fcharset128\\fprq1{\\*\\panose 02020609040205080304}MS Mincho{\\*\\falt ?l?r ??\\'81\\'66c};}\n{\\f13\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 02010600030101010101}SimSun{\\*\\falt ????????\\'a8\\'ac????};}{\\f34\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02040503050406030204}Cambria Math{\\*\\falt Calisto MT};}\n{\\f39\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604030504040204}Tahoma{\\*\\falt ?? ??};}{\\f40\\fbidi \\fmodern\\fcharset128\\fprq1{\\*\\panose 00000000000000000000}@MS Mincho{\\*\\falt @MS Gothic};}\n{\\f41\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 00000000000000000000}@SimSun{\\*\\falt Minion Web};}{\\f42\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 00000000000000000000}Trebuchet MS{\\*\\falt Univers};}\n{\\flomajor\\f31500\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times};}{\\fdbmajor\\f31501\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 02010600030101010101}SimSun{\\*\\falt ????????\\'a8\\'ac????};}\n{\\fhimajor\\f31502\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02040503050406030204}Cambria;}{\\fbimajor\\f31503\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times};}\n{\\flominor\\f31504\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times};}{\\fdbminor\\f31505\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 02010600030101010101}SimSun{\\*\\falt ????????\\'a8\\'ac????};}\n{\\fhiminor\\f31506\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020f0502020204030204}Calibri;}{\\fbiminor\\f31507\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604020202020204}Arial;}{\\f44\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times};}\n{\\f45\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times};}{\\f47\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times};}{\\f48\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times};}\n{\\f49\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times};}{\\f50\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times};}{\\f51\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times};}\n{\\f52\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times};}{\\f64\\fbidi \\fmodern\\fcharset238\\fprq1 Courier New CE{\\*\\falt Arial};}{\\f65\\fbidi \\fmodern\\fcharset204\\fprq1 Courier New Cyr{\\*\\falt Arial};}\n{\\f67\\fbidi \\fmodern\\fcharset161\\fprq1 Courier New Greek{\\*\\falt Arial};}{\\f68\\fbidi \\fmodern\\fcharset162\\fprq1 Courier New Tur{\\*\\falt Arial};}{\\f69\\fbidi \\fmodern\\fcharset177\\fprq1 Courier New (Hebrew){\\*\\falt Arial};}\n{\\f70\\fbidi \\fmodern\\fcharset178\\fprq1 Courier New (Arabic){\\*\\falt Arial};}{\\f71\\fbidi \\fmodern\\fcharset186\\fprq1 Courier New Baltic{\\*\\falt Arial};}{\\f72\\fbidi \\fmodern\\fcharset163\\fprq1 Courier New (Vietnamese){\\*\\falt Arial};}\n{\\f156\\fbidi \\fmodern\\fcharset0\\fprq1 MS Mincho Western{\\*\\falt ?l?r ??\\'81\\'66c};}{\\f154\\fbidi \\fmodern\\fcharset238\\fprq1 MS Mincho CE{\\*\\falt ?l?r ??\\'81\\'66c};}{\\f155\\fbidi \\fmodern\\fcharset204\\fprq1 MS Mincho Cyr{\\*\\falt ?l?r ??\\'81\\'66c};}\n{\\f157\\fbidi \\fmodern\\fcharset161\\fprq1 MS Mincho Greek{\\*\\falt ?l?r ??\\'81\\'66c};}{\\f158\\fbidi \\fmodern\\fcharset162\\fprq1 MS Mincho Tur{\\*\\falt ?l?r ??\\'81\\'66c};}{\\f161\\fbidi \\fmodern\\fcharset186\\fprq1 MS Mincho Baltic{\\*\\falt ?l?r ??\\'81\\'66c};}\n{\\f176\\fbidi \\fnil\\fcharset0\\fprq2 SimSun Western{\\*\\falt ????????\\'a8\\'ac????};}{\\f384\\fbidi \\froman\\fcharset238\\fprq2 Cambria Math CE{\\*\\falt Calisto MT};}{\\f385\\fbidi \\froman\\fcharset204\\fprq2 Cambria Math Cyr{\\*\\falt Calisto MT};}\n{\\f387\\fbidi \\froman\\fcharset161\\fprq2 Cambria Math Greek{\\*\\falt Calisto MT};}{\\f388\\fbidi \\froman\\fcharset162\\fprq2 Cambria Math Tur{\\*\\falt Calisto MT};}{\\f391\\fbidi \\froman\\fcharset186\\fprq2 Cambria Math Baltic{\\*\\falt Calisto MT};}\n{\\f392\\fbidi \\froman\\fcharset163\\fprq2 Cambria Math (Vietnamese){\\*\\falt Calisto MT};}{\\f434\\fbidi \\fswiss\\fcharset238\\fprq2 Tahoma CE{\\*\\falt ?? ??};}{\\f435\\fbidi \\fswiss\\fcharset204\\fprq2 Tahoma Cyr{\\*\\falt ?? ??};}\n{\\f437\\fbidi \\fswiss\\fcharset161\\fprq2 Tahoma Greek{\\*\\falt ?? ??};}{\\f438\\fbidi \\fswiss\\fcharset162\\fprq2 Tahoma Tur{\\*\\falt ?? ??};}{\\f439\\fbidi \\fswiss\\fcharset177\\fprq2 Tahoma (Hebrew){\\*\\falt ?? ??};}\n{\\f440\\fbidi \\fswiss\\fcharset178\\fprq2 Tahoma (Arabic){\\*\\falt ?? ??};}{\\f441\\fbidi \\fswiss\\fcharset186\\fprq2 Tahoma Baltic{\\*\\falt ?? ??};}{\\f442\\fbidi \\fswiss\\fcharset163\\fprq2 Tahoma (Vietnamese){\\*\\falt ?? ??};}\n{\\f443\\fbidi \\fswiss\\fcharset222\\fprq2 Tahoma (Thai){\\*\\falt ?? ??};}{\\f446\\fbidi \\fmodern\\fcharset0\\fprq1 @MS Mincho Western{\\*\\falt @MS Gothic};}{\\f444\\fbidi \\fmodern\\fcharset238\\fprq1 @MS Mincho CE{\\*\\falt @MS Gothic};}\n{\\f445\\fbidi \\fmodern\\fcharset204\\fprq1 @MS Mincho Cyr{\\*\\falt @MS Gothic};}{\\f447\\fbidi \\fmodern\\fcharset161\\fprq1 @MS Mincho Greek{\\*\\falt @MS Gothic};}{\\f448\\fbidi \\fmodern\\fcharset162\\fprq1 @MS Mincho Tur{\\*\\falt @MS Gothic};}\n{\\f451\\fbidi \\fmodern\\fcharset186\\fprq1 @MS Mincho Baltic{\\*\\falt @MS Gothic};}{\\f456\\fbidi \\fnil\\fcharset0\\fprq2 @SimSun Western{\\*\\falt Minion Web};}{\\f464\\fbidi \\fswiss\\fcharset238\\fprq2 Trebuchet MS CE{\\*\\falt Univers};}\n{\\f465\\fbidi \\fswiss\\fcharset204\\fprq2 Trebuchet MS Cyr{\\*\\falt Univers};}{\\f467\\fbidi \\fswiss\\fcharset161\\fprq2 Trebuchet MS Greek{\\*\\falt Univers};}{\\f468\\fbidi \\fswiss\\fcharset162\\fprq2 Trebuchet MS Tur{\\*\\falt Univers};}\n{\\f471\\fbidi \\fswiss\\fcharset186\\fprq2 Trebuchet MS Baltic{\\*\\falt Univers};}{\\flomajor\\f31508\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times};}{\\flomajor\\f31509\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times};}\n{\\flomajor\\f31511\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times};}{\\flomajor\\f31512\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times};}\n{\\flomajor\\f31513\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times};}{\\flomajor\\f31514\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times};}\n{\\flomajor\\f31515\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times};}{\\flomajor\\f31516\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times};}\n{\\fdbmajor\\f31520\\fbidi \\fnil\\fcharset0\\fprq2 SimSun Western{\\*\\falt ????????\\'a8\\'ac????};}{\\fhimajor\\f31528\\fbidi \\froman\\fcharset238\\fprq2 Cambria CE;}{\\fhimajor\\f31529\\fbidi \\froman\\fcharset204\\fprq2 Cambria Cyr;}\n{\\fhimajor\\f31531\\fbidi \\froman\\fcharset161\\fprq2 Cambria Greek;}{\\fhimajor\\f31532\\fbidi \\froman\\fcharset162\\fprq2 Cambria Tur;}{\\fhimajor\\f31535\\fbidi \\froman\\fcharset186\\fprq2 Cambria Baltic;}\n{\\fhimajor\\f31536\\fbidi \\froman\\fcharset163\\fprq2 Cambria (Vietnamese);}{\\fbimajor\\f31538\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times};}{\\fbimajor\\f31539\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times};}\n{\\fbimajor\\f31541\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times};}{\\fbimajor\\f31542\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times};}\n{\\fbimajor\\f31543\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times};}{\\fbimajor\\f31544\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times};}\n{\\fbimajor\\f31545\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times};}{\\fbimajor\\f31546\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times};}\n{\\flominor\\f31548\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times};}{\\flominor\\f31549\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times};}\n{\\flominor\\f31551\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times};}{\\flominor\\f31552\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times};}\n{\\flominor\\f31553\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times};}{\\flominor\\f31554\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times};}\n{\\flominor\\f31555\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times};}{\\flominor\\f31556\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times};}\n{\\fdbminor\\f31560\\fbidi \\fnil\\fcharset0\\fprq2 SimSun Western{\\*\\falt ????????\\'a8\\'ac????};}{\\fhiminor\\f31568\\fbidi \\fswiss\\fcharset238\\fprq2 Calibri CE;}{\\fhiminor\\f31569\\fbidi \\fswiss\\fcharset204\\fprq2 Calibri Cyr;}\n{\\fhiminor\\f31571\\fbidi \\fswiss\\fcharset161\\fprq2 Calibri Greek;}{\\fhiminor\\f31572\\fbidi \\fswiss\\fcharset162\\fprq2 Calibri Tur;}{\\fhiminor\\f31575\\fbidi \\fswiss\\fcharset186\\fprq2 Calibri Baltic;}\n{\\fhiminor\\f31576\\fbidi \\fswiss\\fcharset163\\fprq2 Calibri (Vietnamese);}{\\fbiminor\\f31578\\fbidi \\fswiss\\fcharset238\\fprq2 Arial CE;}{\\fbiminor\\f31579\\fbidi \\fswiss\\fcharset204\\fprq2 Arial Cyr;}\n{\\fbiminor\\f31581\\fbidi \\fswiss\\fcharset161\\fprq2 Arial Greek;}{\\fbiminor\\f31582\\fbidi \\fswiss\\fcharset162\\fprq2 Arial Tur;}{\\fbiminor\\f31583\\fbidi \\fswiss\\fcharset177\\fprq2 Arial (Hebrew);}\n{\\fbiminor\\f31584\\fbidi \\fswiss\\fcharset178\\fprq2 Arial (Arabic);}{\\fbiminor\\f31585\\fbidi \\fswiss\\fcharset186\\fprq2 Arial Baltic;}{\\fbiminor\\f31586\\fbidi \\fswiss\\fcharset163\\fprq2 Arial (Vietnamese);}}{\\colortbl;\\red0\\green0\\blue0;\\red0\\green0\\blue255;\n\\red0\\green255\\blue255;\\red0\\green255\\blue0;\\red255\\green0\\blue255;\\red255\\green0\\blue0;\\red255\\green255\\blue0;\\red255\\green255\\blue255;\\red0\\green0\\blue128;\\red0\\green128\\blue128;\\red0\\green128\\blue0;\\red128\\green0\\blue128;\\red128\\green0\\blue0;\n\\red128\\green128\\blue0;\\red128\\green128\\blue128;\\red192\\green192\\blue192;\\ctextone\\ctint255\\cshade255\\red0\\green0\\blue0;}{\\*\\defchp \\fs22\\dbch\\af11 }{\\*\\defpap \\ql \\li0\\ri0\\sa200\\sl276\\slmult1\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 }\\noqfpromote {\\stylesheet{\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext0 \\sautoupd \\sqformat \\spriority0 Normal;}{\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext1 \\slink15 \\sqformat heading 1;}{\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext2 \\slink16 \\sqformat heading 2;}{\\s3\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\n\\tx1077\\jclisttab\\tx1440\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext3 \\slink17 \\sqformat heading 3;}{\\s4\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl3\\outlinelevel3\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext4 \\slink18 \\sqformat heading 4;}{\\s5\\ql \\fi-357\\li1792\\ri0\\sb120\\sa120\\widctlpar\n\\tx1792\\jclisttab\\tx2155\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl4\\outlinelevel4\\adjustright\\rin0\\lin1792\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext5 \\slink19 \\sqformat heading 5;}{\\s6\\ql \\fi-357\\li2149\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx2152\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl5\\outlinelevel5\\adjustright\\rin0\\lin2149\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext6 \\slink20 \\sqformat heading 6;}{\\s7\\ql \\fi-357\\li2506\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx2509\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl6\\outlinelevel6\\adjustright\\rin0\\lin2506\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext7 \\slink21 \\sqformat heading 7;}{\\s8\\ql \\fi-357\\li2863\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx2866\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl7\\outlinelevel7\\adjustright\\rin0\\lin2863\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext8 \\slink22 \\sqformat heading 8;}{\\s9\\ql \\fi-358\\li3221\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx3223\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl8\\outlinelevel8\\adjustright\\rin0\\lin3221\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext9 \\slink23 \\sqformat heading 9;}{\\*\\cs10 \\additive \\ssemihidden \\sunhideused \\spriority1 Default Paragraph Font;}{\\*\n\\ts11\\tsrowd\\trftsWidthB3\\trpaddl108\\trpaddr108\\trpaddfl3\\trpaddft3\\trpaddfb3\\trpaddfr3\\trcbpat1\\trcfpat1\\tblind0\\tblindtype3\\tsvertalt\\tsbrdrt\\tsbrdrl\\tsbrdrb\\tsbrdrr\\tsbrdrdgl\\tsbrdrdgr\\tsbrdrh\\tsbrdrv \\ql \\li0\\ri0\\sa200\\sl276\\slmult1\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs22\\alang1025 \\ltrch\\fcs0 \\fs22\\lang1033\\langfe1033\\loch\\f0\\hich\\af0\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext11 \\ssemihidden \\sunhideused Normal Table;}{\\*\n\\cs15 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs19 \\ltrch\\fcs0 \\b\\f39\\fs19 \\sbasedon10 \\slink1 \\slocked Heading 1 Char;}{\\*\\cs16 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs19 \\ltrch\\fcs0 \\b\\f39\\fs19 \\sbasedon10 \\slink2 \\slocked Heading 2 Char;}{\\*\\cs17 \\additive \n\\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink3 \\slocked Heading 3 Char;}{\\*\\cs18 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink4 \\slocked Heading 4 Char;}{\\*\\cs19 \\additive \\rtlch\\fcs1 \\af39\\afs19 \n\\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink5 \\slocked Heading 5 Char;}{\\*\\cs20 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink6 \\slocked Heading 6 Char;}{\\*\\cs21 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \n\\sbasedon10 \\slink7 \\slocked Heading 7 Char;}{\\*\\cs22 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink8 \\slocked Heading 8 Char;}{\\*\\cs23 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink9 \\slocked \nHeading 9 Char;}{\\s24\\ql \\li357\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext24 Body 1;}{\\s25\\ql \\li720\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext25 Body 2;}{\\s26\\ql \\li1077\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext26 Body 3;}{\n\\s27\\ql \\li1435\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext27 Body 4;}{\\s28\\ql \\li1803\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin1803\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext28 Body 5;}{\\s29\\ql \\li2160\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin2160\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext29 Body 6;}{\n\\s30\\ql \\li2506\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin2506\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext30 Body 7;}{\\s31\\ql \\li2863\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin2863\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext31 Body 8;}{\\s32\\ql \\li3221\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin3221\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext32 Body 9;}{\\s33\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls1\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext33 Bullet 1;}{\n\\s34\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext34 Bullet 2;}{\\s35\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1080\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls3\\adjustright\\rin0\\lin1077\\itap0 \n\\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext35 \\slink87 Bullet 3;}{\\s36\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext36 Bullet 4;}{\n\\s37\\ql \\fi-357\\li1792\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1795\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls5\\adjustright\\rin0\\lin1792\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext37 Bullet 5;}{\\s38\\ql \\fi-357\\li2149\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx2152\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls6\\adjustright\\rin0\\lin2149\\itap0 \n\\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext38 Bullet 6;}{\\s39\\ql \\fi-357\\li2506\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx2509\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls7\\adjustright\\rin0\\lin2506\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext39 Bullet 7;}{\n\\s40\\ql \\fi-357\\li2863\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx2866\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls8\\adjustright\\rin0\\lin2863\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext40 Bullet 8;}{\\s41\\ql \\fi-358\\li3221\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx3223\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls9\\adjustright\\rin0\\lin3221\\itap0 \n\\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon32 \\snext41 Bullet 9;}{\n\\s42\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs28\\alang1025 \\ltrch\\fcs0 \\b\\fs28\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext0 Heading EULA;}{\\s43\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\brdrb\\brdrs\\brdrw10\\brsp20 \\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs28\\alang1025 \\ltrch\\fcs0 \n\\b\\fs28\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext0 Heading Software Title;}{\\s44\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \n\\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext44 Preamble;}{\\s45\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\brdrb\\brdrs\\brdrw10\\brsp20 \n\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext1 Preamble Border;}{\n\\s46\\qc \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext46 Heading Warranty;}{\\s47\\ql \\fi-360\\li360\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls11\\outlinelevel0\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext0 Heading 1 Warranty;}{\\s48\\ql \\fi-360\\li720\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls11\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext0 Heading 2 Warranty;}{\\s49\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\\tx1077\\jclisttab\\tx1440\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon3 \\snext49 \\slink107 Heading 3 Bold;}{\\s50\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon36 \\snext50 \nBullet 4 Underline;}{\\s51\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon35 \\snext51 Bullet 3 Underline;}{\\s52\\ql \\li720\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon25 \\snext52 Body 2 Underline;}{\n\\s53\\ql \\li1077\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon26 \\snext53 Body 3 Underline;}{\\s54\\ql \\li0\\ri0\\sb120\\sa120\\sl480\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext54 \\slink55 Body Text Indent;}{\\*\\cs55 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink54 \\slocked \\ssemihidden \nBody Text Indent Char;}{\\s56\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\ai\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\i\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon36 \\snext56 Bullet 4 Italics;}{\\*\\cs57 \\additive \\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\f39\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Body 2 Char;}{\\*\n\\cs58 \\additive \\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\f39\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Body 3 Char;}{\\*\\cs59 \\additive \\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\f39\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Body 4 Char;}{\\*\\cs60 \n\\additive \\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\f39\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Body 1 Char;}{\\s61\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\brdrt\\brdrs\\brdrw10\\brsp20 \\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \n\\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon44 \\snext61 Preamble Border Above;}{\n\\s62\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext62 \\slink63 \\ssemihidden footnote text;}{\\*\\cs63 \\additive \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\f39\\fs20 \\sbasedon10 \\slink62 \\slocked \\ssemihidden Footnote Text Char;}{\\*\\cs64 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\super \n\\sbasedon10 \\ssemihidden footnote reference;}{\\s65\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext65 \\slink66 \\ssemihidden endnote text;}{\\*\\cs66 \\additive \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\f39\\fs20 \\sbasedon10 \\slink65 \\slocked \\ssemihidden \nEndnote Text Char;}{\\*\\cs67 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\super \\sbasedon10 \\ssemihidden endnote reference;}{\\s68\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \n\\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext68 \\slink69 \\ssemihidden annotation text;}{\\*\\cs69 \\additive \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\f39\\fs20 \n\\sbasedon10 \\slink68 \\slocked \\ssemihidden Comment Text Char;}{\\*\\cs70 \\additive \\rtlch\\fcs1 \\af0\\afs16 \\ltrch\\fcs0 \\fs16 \\sbasedon10 \\ssemihidden annotation reference;}{\\s71\\ql \\li0\\ri0\\sa160\\sl-240\\slmult0\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext71 Char;}{\n\\s72\\ql \\li0\\ri0\\sa160\\sl-240\\slmult0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext72 Char Char Char Char;}{\\*\\cs73 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\ul\\cf2 \\sbasedon10 Hyperlink,Char Char7;}{\\s74\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \n\\af39\\afs16\\alang1025 \\ltrch\\fcs0 \\fs16\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext74 \\slink75 \\ssemihidden Balloon Text;}{\\*\\cs75 \\additive \\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16 \n\\sbasedon10 \\slink74 \\slocked \\ssemihidden Balloon Text Char;}{\\*\\cs76 \\additive \\rtlch\\fcs1 \\ab\\af42 \\ltrch\\fcs0 \\b\\f42\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Heading 2 Char1;}{\\*\\cs77 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\sbasedon10 \npage number;}{\\s78\\ql \\li0\\ri0\\sa160\\sl-240\\slmult0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext78 Char Char Char Char1;}{\\s79\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \n\\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext0 \\slink109 Body 0 Bold;}{\\s80\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \n\\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext0 Body 0;}{\\s81\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext81 \\slink82 header;}{\\*\\cs82 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink81 \\slocked \nHeader Char;}{\\s83\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext83 \\slink84 footer;}{\\*\\cs84 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink83 \\slocked Footer Char;}{\n\\s85\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs20\\alang1025 \\ltrch\\fcs0 \\b\\fs20\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon68 \\snext68 \\slink86 \\ssemihidden \\sunhideused annotation subject;}{\\*\\cs86 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\f39\\fs20 \\sbasedon69 \\slink85 \\slocked \\ssemihidden Comment Subject Char;}{\\*\\cs87 \\additive \\rtlch\\fcs1 \\af39\\afs19 \n\\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink35 \\slocked Bullet 3 Char1;}{\\s88\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1080\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls3\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon35 \\snext88 Bullet 3 Underlined;}{\\*\\cs89 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\langnp1033\\langfenp1033 \\sbasedon10 Char Char;}{\\s90\\ql \\li0\\ri0\\sl-240\\slmult0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs20\\alang1025 \\ltrch\\fcs0 \n\\fs18\\lang1033\\langfe1033\\loch\\f42\\hich\\af42\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext90 \\spriority0 AdditionalSoftware;}{\\*\\cs91 \\additive \\rtlch\\fcs1 \\af39\\afs24\\alang1025 \\ltrch\\fcs0 \\b\\f42\\fs24\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \n\\sbasedon10 \\spriority0 Char Char1;}{\\s92\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon36 \\snext92 \\spriority0 Bullet 4 Underlined;}{\\s93\\ql \\fi-360\\li360\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls31\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext93 \\spriority0 \nHeading French Warranty;}{\\*\\cs94 \\additive \\f39\\lang1033\\langfe0\\langnp1033\\langfenp0 \\slocked Body 3 Char Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car;}{\\*\\cs95 \\additive \n\\f2\\cf15\\lang1024\\langfe1024\\noproof tw4winExternal;}{\\*\\cs96 \\additive \\v\\f2\\fs24\\cf12\\sub tw4winMark;}{\\*\\cs97 \\additive \\b\\f39 Preamble Char;}{\\*\\cs98 \\additive \\f2\\fs40\\cf4 tw4winError;}{\\*\\cs99 \\additive \\cf2 tw4winTerm;}{\\*\\cs100 \\additive \n\\f2\\cf11\\lang1024\\langfe1024\\noproof tw4winPopup;}{\\*\\cs101 \\additive \\f2\\cf10\\lang1024\\langfe1024\\noproof tw4winJump;}{\\*\\cs102 \\additive \\f2\\cf6\\lang1024\\langfe1024\\noproof tw4winInternal;}{\\*\\cs103 \\additive \\f2\\cf13\\lang1024\\langfe1024\\noproof \nDO_NOT_TRANSLATE;}{\\s104\\ql \\li0\\ri0\\sb120\\sa120\\sl480\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext104 \\slink105 Body Text 2;}{\\*\\cs105 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink104 \\slocked Body Text 2 Char;}{\n\\s106\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\\tx1077\\jclisttab\\tx1440\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon49 \\snext106 \\slink108 Style Heading 3 Bold + (Asian) Times New Roman 9.5 pt;}{\\*\\cs107 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs19 \\ltrch\\fcs0 \\b\\f39\\fs19 \n\\sbasedon10 \\slink49 \\slocked Heading 3 Bold Char;}{\\*\\cs108 \\additive \\rtlch\\fcs1 \\ab0\\af39\\afs19 \\ltrch\\fcs0 \\b0\\f39\\fs19 \\sbasedon107 \\slink106 \\slocked Style Heading 3 Bold + (Asian) Times New Roman 9.5 pt Char;}{\\*\\cs109 \\additive \\rtlch\\fcs1 \n\\ab\\af39\\afs19 \\ltrch\\fcs0 \\b\\f39\\fs19 \\sbasedon10 \\slink79 \\slocked Body 0 Bold Char;}{\\s110\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs20\\alang1025 \\ltrch\\fcs0 \n\\b\\fs20\\lang1026\\langfe2052\\super\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1026\\langfenp2052 \\sbasedon0 \\snext110 \\slink111 LIMPA_T4WINEXTERNAL;}{\\*\\cs111 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \n\\b\\f39\\fs20\\lang1026\\langfe2052\\super\\langnp1026\\langfenp2052 \\sbasedon10 \\slink110 \\slocked LIMPA_T4WINEXTERNAL Char;}}{\\*\\listtable{\\list\\listtemplateid1821544400\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1380\\jclisttab\\tx1380\\lin1380 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2100\\jclisttab\\tx2100\\lin2100 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2820\\jclisttab\\tx2820\\lin2820 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3540\\jclisttab\\tx3540\\lin3540 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4260\\jclisttab\\tx4260\\lin4260 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li4980\\jclisttab\\tx4980\\lin4980 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5700\\jclisttab\\tx5700\\lin5700 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6420\\jclisttab\\tx6420\\lin6420 }{\\listname ;}\\listid189493747}{\\list\\listtemplateid176468498\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\leveltemplateid692200086\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s41\\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\n\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\n\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }\n{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid196815738}{\\list\\listtemplateid-1793664660{\\listlevel\\levelnfc3\n\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af0 \\ltrch\\fcs0 \\b\\i0\\fbias0 \\s47\\fi-360\\li360\\jclisttab\\tx360\\lin360 }{\\listlevel\\levelnfc0\\levelnfcn0\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af0 \\ltrch\\fcs0 \\b\\i0\\fbias0 \\s48\\fi-360\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02);}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li1080\\jclisttab\\tx1080\\lin1080 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'03(\\'03);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\'03(\\'04);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li1800\\jclisttab\\tx1800\\lin1800 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'03(\\'05);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\n\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li2520\\jclisttab\\tx2520\\lin2520 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'07.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \n\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'08.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li3240\n\\jclisttab\\tx3240\\lin3240 }{\\listname ;}\\listid394402059}{\\list\\listtemplateid1928476992{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\s49\\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\'02i.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\'02A.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid398796681}{\\list\\listtemplateid789093748\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-317712510\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s34\\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\n\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\n\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid477573462}\n{\\list\\listtemplateid1948578256{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\n\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af0\\afs20 \\ltrch\\fcs0 \\b\\i0\\fs20\\fbias0 \\fi-360\\li720\n\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li1077\n\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \n\\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid630479929}{\\list\\listtemplateid67698717{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'00);}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li360\\jclisttab\\tx360\\lin360 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'01);}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02);}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\af0 \\ltrch\\fcs0 \\fi-360\\li1080\\jclisttab\\tx1080\\lin1080 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'03(\\'03);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1440\n\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'03(\\'04);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1800\\jclisttab\\tx1800\\lin1800 }{\\listlevel\n\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'03(\\'05);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2520\\jclisttab\\tx2520\\lin2520 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'07.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'08.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li3240\\jclisttab\\tx3240\\lin3240 }{\\listname ;}\\listid700712945}{\\list\\listtemplateid-53848358{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\s1\\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\s2\\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\s3\\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\s4\\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\s5\\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\s6\\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\s7\\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\n\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\s8\\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\n\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\s9\\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname \n;}\\listid752163927}{\\list\\listtemplateid2088029282{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f42\\fs20\\fbias0 \\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f39\\fs20\\fbias0 \\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers\n;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\n\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid800729109}{\\list\\listtemplateid-296591990\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s40\\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\n\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\n\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname \n;}\\listid810947713}{\\list\\listtemplateid1567531878{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f42\\fs20\\fbias0 \\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers\n;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\n\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid826823576}{\\list\\listtemplateid2088029282{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid974869818}\n{\\list\\listtemplateid-924022824\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li1797\\lin1797 }\n{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li2517\\lin2517 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li3237\\lin3237 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li3957\\lin3957 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li4677\\lin4677 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li5397\\lin5397 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li6117\\lin6117 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \n\\fi-360\\li6837\\lin6837 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li7557\\lin7557 }{\\listname \n;}\\listid1210149136}{\\list\\listtemplateid-1813845996\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s39\\fi-357\\li2506\n\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\n\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1219436735}{\\list\\listtemplateid280937824\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li1124\\lin1124 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1844\\lin1844 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2564\\lin2564 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li3284\\lin3284 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \n\\fi-360\\li4004\\lin4004 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4724\\lin4724 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5444\\lin5444 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li6164\\lin6164 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6884\\lin6884 }{\\listname ;}\\listid1422722544}{\\list\\listtemplateid303218272\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid612407812\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\cf17\\fbias0 \\s36\\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \n\\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\n\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1559511898}{\\list\\listtemplateid-743794326\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid2033377338\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s35\\fi-357\\li1077\\jclisttab\\tx1080\\lin1077 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\n\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\n\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }\n{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1567649130}{\\list\\listtemplateid-154908222\\listhybrid{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-596080174\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af0 \\ltrch\\fcs0 \\b\\i0\\fbias0 \\s93\\fi-360\\li360\\jclisttab\\tx360\\lin360 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698713\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc2\\leveljcn2\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698715\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-180\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698703\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\leveltemplateid67698713\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc2\\leveljcn2\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698715\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-180\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698703\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698713\\'02\\'07.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc2\\leveljcn2\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698715\\'02\\'08.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-180\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1795057320}{\\list\\listtemplateid-961874242\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-1175557160\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s37\\fi-357\\li1792\\jclisttab\\tx1795\\lin1792 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\n\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\n\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1848404271}\n{\\list\\listtemplateid-1802592190\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid1229593488\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s38\\fi-357\\li2149\n\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\n\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1877695764}{\\list\\listtemplateid1186249844\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid1637229796\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s33\\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\n\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\n\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid2054619191}{\\list\\listtemplateid-235387302\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-1242156798\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li360\\lin360 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698713\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1080\\lin1080 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698715\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li1800\\lin1800 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698703\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2520\\lin2520 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698713\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \n\\fi-360\\li3240\\lin3240 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698715\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li3960\\lin3960 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698703\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li4680\\lin4680 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698713\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5400\\lin5400 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698715\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6120\\lin6120 }{\\listname ;}\\listid2106606675}}{\\*\\listoverridetable{\\listoverride\\listid2054619191\\listoverridecount0\\ls1}\n{\\listoverride\\listid477573462\\listoverridecount0\\ls2}{\\listoverride\\listid1567649130\\listoverridecount0\\ls3}{\\listoverride\\listid1559511898\\listoverridecount0\\ls4}{\\listoverride\\listid1848404271\\listoverridecount0\\ls5}{\\listoverride\\listid1877695764\n\\listoverridecount0\\ls6}{\\listoverride\\listid1219436735\\listoverridecount0\\ls7}{\\listoverride\\listid810947713\\listoverridecount0\\ls8}{\\listoverride\\listid196815738\\listoverridecount0\\ls9}{\\listoverride\\listid398796681\\listoverridecount0\\ls10}\n{\\listoverride\\listid394402059\\listoverridecount0\\ls11}{\\listoverride\\listid752163927\\listoverridecount0\\ls12}{\\listoverride\\listid189493747\\listoverridecount0\\ls13}{\\listoverride\\listid2106606675\\listoverridecount0\\ls14}{\\listoverride\\listid1559511898\n\\listoverridecount0\\ls15}{\\listoverride\\listid1848404271\\listoverridecount0\\ls16}{\\listoverride\\listid1848404271\\listoverridecount0\\ls17}{\\listoverride\\listid1848404271\\listoverridecount0\\ls18}{\\listoverride\\listid1848404271\\listoverridecount0\\ls19}\n{\\listoverride\\listid1848404271\\listoverridecount0\\ls20}{\\listoverride\\listid1848404271\\listoverridecount0\\ls21}{\\listoverride\\listid1848404271\\listoverridecount0\\ls22}{\\listoverride\\listid1848404271\\listoverridecount0\\ls23}{\\listoverride\\listid1848404271\n\\listoverridecount0\\ls24}{\\listoverride\\listid1422722544\\listoverridecount0\\ls25}{\\listoverride\\listid1848404271\\listoverridecount0\\ls26}{\\listoverride\\listid1848404271\\listoverridecount0\\ls27}{\\listoverride\\listid1848404271\\listoverridecount0\\ls28}\n{\\listoverride\\listid1559511898\\listoverridecount0\\ls29}{\\listoverride\\listid1559511898\\listoverridecount0\\ls30}{\\listoverride\\listid1795057320\\listoverridecount0\\ls31}{\\listoverride\\listid1559511898\\listoverridecount0\\ls32}{\\listoverride\\listid700712945\n\\listoverridecount0\\ls33}{\\listoverride\\listid826823576\\listoverridecount0\\ls34}{\\listoverride\\listid630479929\\listoverridecount0\\ls35}{\\listoverride\\listid800729109\\listoverridecount0\\ls36}{\\listoverride\\listid974869818\\listoverridecount0\\ls37}\n{\\listoverride\\listid398796681\\listoverridecount9{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\n\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\\ls38}{\\listoverride\\listid1210149136\n\\listoverridecount0\\ls39}{\\listoverride\\listid752163927\\listoverridecount9{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\n{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\\ls40}\n{\\listoverride\\listid398796681\\listoverridecount9{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\n\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\\ls41}{\\listoverride\\listid752163927\n\\listoverridecount0\\ls42}{\\listoverride\\listid1567649130\\listoverridecount0\\ls43}{\\listoverride\\listid1567649130\\listoverridecount0\\ls44}{\\listoverride\\listid752163927\\listoverridecount0\\ls45}{\\listoverride\\listid1567649130\\listoverridecount0\\ls46}\n{\\listoverride\\listid1567649130\\listoverridecount0\\ls47}}{\\*\\pgptbl {\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}}{\\*\\rsidtbl \\rsid132812\\rsid675178\\rsid3958498\n\\rsid4129863\\rsid4605597\\rsid7042433\\rsid7755012\\rsid8343752\\rsid9518401\\rsid12265033\\rsid12279895\\rsid12678245\\rsid13524579\\rsid13651777\\rsid14051756\\rsid16255017}{\\mmathPr\\mmathFont34\\mbrkBin0\\mbrkBinSub0\\msmallFrac0\\mdispDef1\\mlMargin0\\mrMargin0\n\\mdefJc1\\mwrapIndent1440\\mintLim0\\mnaryLim1}{\\info{\\title English}{\\creatim\\yr2013\\mo7\\dy12\\hr8\\min22}{\\revtim\\yr2014\\mo6\\dy16\\hr16\\min11}{\\version1}{\\edmins0}{\\nofpages3}{\\nofwords1371}{\\nofchars7818}{\\nofcharsws9171}{\\vern57437}}{\\*\\userprops \n{\\propname db_document_id}\\proptype30{\\staticval 22469}{\\propname ContentTypeId}\\proptype30{\\staticval 0x01010022795EB251D4644FBEC12BD5D4B08D7C}}{\\*\\xmlnstbl {\\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\n\\paperw12240\\paperh15840\\margl720\\margr720\\margt720\\margb720\\gutter0\\ltrsect \n\\widowctrl\\ftnbj\\aenddoc\\trackmoves0\\trackformatting1\\donotembedsysfont0\\relyonvml0\\donotembedlingdata0\\grfdocevents0\\validatexml1\\showplaceholdtext0\\ignoremixedcontent0\\saveinvalidxml0\\showxmlerrors1\\noxlattoyen\n\\expshrtn\\noultrlspc\\dntblnsbdb\\nospaceforul\\hyphcaps0\\formshade\\horzdoc\\dgmargin\\dghspace95\\dgvspace180\\dghorigin720\\dgvorigin720\\dghshow2\\dgvshow1\n\\jexpand\\viewkind1\\viewscale100\\pgbrdrhead\\pgbrdrfoot\\splytwnine\\ftnlytwnine\\htmautsp\\nolnhtadjtbl\\useltbaln\\alntblind\\lytcalctblwd\\lyttblrtgr\\lnbrkrule\\nobrkwrptbl\\snaptogridincell\\rempersonalinfo\\allowfieldendsel\n\\wrppunct\\asianbrkrule\\rsidroot4605597\\newtblstyruls\\nogrowautofit\\usenormstyforlist\\noindnmbrts\\felnbrelev\\nocxsptable\\indrlsweleven\\noafcnsttbl\\afelev\\utinl\\hwelev\\spltpgpar\\notcvasp\\notbrkcnstfrctbl\\notvatxbx\\krnprsnet\\cachedcolbal \\nouicompat \\fet0\n{\\*\\wgrffmtfilter 013f}\\nofeaturethrottle1\\ilfomacatclnup12{\\*\\ftnsep \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid4129863 \\chftnsep \n\\par }}{\\*\\ftnsepc \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid4129863 \\chftnsepc \n\\par }}{\\*\\aftnsep \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid4129863 \\chftnsep \n\\par }}{\\*\\aftnsepc \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid4129863 \\chftnsepc \n\\par }}\\ltrpar \\sectd \\ltrsect\\psz1\\linex0\\headery0\\footery0\\endnhere\\sectlinegrid360\\sectdefaultcl\\sftnbj {\\*\\pnseclvl1\\pnucrm\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl2\\pnucltr\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl3\n\\pndec\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl4\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxta )}}{\\*\\pnseclvl5\\pndec\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl6\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}\n{\\*\\pnseclvl7\\pnlcrm\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl8\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl9\\pnlcrm\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}\\pard\\plain \\ltrpar\n\\s42\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs28\\alang1025 \\ltrch\\fcs0 \\b\\fs28\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 MICROSOFT SOFTWARE LICENSE TERMS}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s43\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\brdrb\\brdrs\\brdrw10 \\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid9518401 \\rtlch\\fcs1 \\ab\\af39\\afs28\\alang1025 \\ltrch\\fcs0 \n\\b\\fs28\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 MICROSOFT \\hich\\af39\\dbch\\af13\\loch\\f39 AZURE MOBILE SDK }{\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s44\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \nThese license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, w\\hich\\af39\\dbch\\af13\\loch\\f39 \nhich includes the media on which you received it, if any. The terms also apply to any Microsoft}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s34\\ql \\fi-360\\li360\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 updates,}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 supplements,}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 Internet-based services, and}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 support services}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s44\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \nfor this software, unless other terms accompany those items. If so, those terms appl\\hich\\af39\\dbch\\af13\\loch\\f39 y.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 By using the software, you accept these terms. If you do not accept them, do not use the software.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s61\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\brdrt\\brdrs\\brdrw10\\brsp20 \\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid14051756 \\hich\\af39\\dbch\\af11\\loch\\f39 If you comply with these license terms, you have the perpetual rights below.}{\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 1.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 INSTALLATION AND USE RIGHTS. }{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 a.\\tab}}\\pard\\plain \\ltrpar\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Installation and Use.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs57\\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  You may install and\n\\hich\\af39\\dbch\\af13\\loch\\f39  use any number of copies of the software on your devices.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs57\\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 b.\\tab}}\\pard \\ltrpar\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Third Party Programs.}{\\rtlch\\fcs1 \n\\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs57\\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  The software may include third party programs that Microsoft, not the third party, licenses to you under this agreement. Notices, if any, for\n\\hich\\af39\\dbch\\af13\\loch\\f39  the third party program are included for your information only.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 2.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 a.\\tab}}\\pard\\plain \\ltrpar\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Distributable Code.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs57\\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  The software \n\\hich\\af39\\dbch\\af13\\loch\\f39 contains code that you are permitted to distribute in programs you develop if you comply with the terms below.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s49 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 i.\\tab}}\\pard\\plain \\ltrpar\\s49\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1080\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Right to Use and Distribute.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\cs58\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \\hich\\f39 \n The code and text files listed below are \\'93\\loch\\f39 \\hich\\f39 Distributable Code.\\'94}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f3\\fs19\\cf17\\lang9\\langfe1033\\langnp9\\insrsid132812\\charrsid132812 \\loch\\af3\\dbch\\af11\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s36\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0\\pararsid12279895 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39 \\ltrch\\fcs0 \\ul\\lang9\\langfe1033\\langnp9\\insrsid132812\\charrsid132812 \\hich\\af39\\dbch\\af11\\loch\\f39 Redistributable }{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\ul\\lang9\\langfe1033\\langnp9\\insrsid12265033\\charrsid132812 \\hich\\af39\\dbch\\af11\\loch\\f39 Files}{\n\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid12265033\\charrsid132812 \\hich\\af39\\dbch\\af11\\loch\\f39 . You may copy and distribu\\hich\\af39\\dbch\\af11\\loch\\f39 te the object code form of }{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \n\\lang9\\langfe1033\\langnp9\\insrsid132812 .}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid13651777\\charrsid132812 \\hich\\af39\\dbch\\af11\\loch\\f39 dll}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid7042433 \n\\hich\\af39\\dbch\\af11\\loch\\f39 , .jar and iOS framework}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid12279895 \\hich\\af39\\dbch\\af11\\loch\\f39  and static library }{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid132812 \n\\hich\\af39\\dbch\\af11\\loch\\f39 files}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid12265033\\charrsid132812 .}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid12279895\\charrsid12279895 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s50 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s50\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\ul\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Third Party Distribution}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\ulnone\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\ulnone\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s49 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 ii.\\tab}}\\pard\\plain \\ltrpar\\s49\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1077\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Distribution Requirements.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\cs58\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n For any Distributable Code you distribute, you must}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s36\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 add significant primary functionality to it in your programs;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 require distributors and external end users to agree to terms that protect it at least as much as this agreemen\\hich\\af39\\dbch\\af13\\loch\\f39 t; }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 display your valid copyright notice on your programs; and}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\\hich\\f39 \\rquote \\loch\\f39  fees, related to the distribution or use of your programs.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s49 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 iii.\\tab}}\\pard\\plain \\ltrpar\\s49\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1077\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Distribution Restrictions.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\cs58\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  You may not}{\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s36\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 alter any copyright, trademark or patent notice in the Distributable Code;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 use Microsoft\\hich\\f39 \\rquote \\loch\\f39 s trademarks in your programs\\hich\\f39 \\rquote \\loch\\f39  names or in a way that suggests your programs come from or are endorsed by Microsoft;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756\\charrsid12265033 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid14051756\\charrsid12265033 \\hich\\af39\\dbch\\af13\\loch\\f39 distribute Distributable Code to run on a platform other than the Windows }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid3958498\\charrsid12265033 \n\\hich\\af39\\dbch\\af13\\loch\\f39 Azure }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756\\charrsid12265033 \\hich\\af39\\dbch\\af13\\loch\\f39 platform}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 ;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 include Distributable Code in malicious, deceptive or unlawful programs; or}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 modify or distribute the source code of any Distributable Code so that any part of it \\hich\\af39\\dbch\\af13\\loch\\f39 \nbecomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s37 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s37\\ql \\fi-357\\li1792\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1795\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls5\\adjustright\\rin0\\lin1792\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 the code be disclosed or distributed in source code form; or}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s37 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 others have the right to modify it.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 3.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 SCOPE OF LIC\\hich\\af39\\dbch\\af13\\loch\\f39 ENSE.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly pe\n\\hich\\af39\\dbch\\af13\\loch\\f39 rmitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \n\\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s34\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 work around any technical limitations in the software;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 reverse engineer, decompile or disa\\hich\\af39\\dbch\\af13\\loch\\f39 ssemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 publish the software for others to copy;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 rent, lease or lend the software; or}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 use the software for commercial software hosting service\\hich\\af39\\dbch\\af13\\loch\\f39 s.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 4.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 BACKUP COPY.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n You may make one backup copy of the software. You may use it only to reinstall the software.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 5.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 DOCUMENTATION.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  Any per\\hich\\af39\\dbch\\af13\\loch\\f39 \nson that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 6.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 TRANSFER TO A THIRD PARTY.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  The first user of the software may transfer it and this agreement directly to a third par\n\\hich\\af39\\dbch\\af13\\loch\\f39 \nty. Before the transfer, that party must agree that this agreement applies to the transfer and use of the software. The first user must uninstall the software before transferring it separately from the device. The first user may not retain any copies.}{\n\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 7.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 E\\hich\\af39\\dbch\\af13\\loch\\f39 XPORT RESTRICTIONS.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users\n\\hich\\af39\\dbch\\af13\\loch\\f39  and end use. For additional information, see }{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs73\\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 www.microsoft.com/exporting}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \n\\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 .}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs73\\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 8.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 SUPPORT SERVICES. }{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \\hich\\f39 Because this software is \\'93\\loch\\f39 \\hich\\f39 as is,\\'94\\loch\\f39 \n we may not provide support services for it.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 9.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 ENTIRE AGREEMENT.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  This agreement, and the terms for supplements, updates, Inter\\hich\\af39\\dbch\\af13\\loch\\f39 \nnet-based services and support services that you use, are the entire agreement for the software and support services.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 10.\\tab}}\\pard \\ltrpar\\s1\\ql \\fi-360\\li360\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin360\\itap0 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 APPLICABLE LAW.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 a.\\tab}}\\pard\\plain \\ltrpar\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 United States.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n If you acquired the software in the United States, Washington state law governs the interpretation o\\hich\\af39\\dbch\\af13\\loch\\f39 \nf this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.}\n{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 b.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 Outside the United States.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  If you acquired the software in any other country, the laws of that country apply.}{\n\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 11.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 LEGAL EFFECT.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rig\\hich\\af39\\dbch\\af13\\loch\\f39 \nhts with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \n\\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 12.\\tab}}\\pard \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \\hich\\f39 \nDISCLAIMER OF WARRANTY. The software is licensed \\'93\\loch\\f39 as-is.\\loch\\af39\\dbch\\af13\\hich\\f39 \\'94\\loch\\f39 \n You bear the risk of using it. Microsoft gives no express warranties, guarantees or conditions. You may have additional consumer rights or statutory guarantees under your local laws which this agreement cannot change. To the extent permitted under your \n\\hich\\af39\\dbch\\af13\\loch\\f39 l\\hich\\af39\\dbch\\af13\\loch\\f39 ocal laws, Microsoft excludes the implied warranties of merchantability, fitness for a particular purpose and non-infringement.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s24\\ql \\li357\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 FOR AUSTRALIA \\hich\\f39 \\endash \\loch\\f39 \n You have statutory guarantees under the Australian Consumer Law and nothing in these terms is intended to affect\\hich\\af39\\dbch\\af13\\loch\\f39  those rights.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 13.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid14051756 \\hich\\af39\\dbch\\af11\\loch\\f39 \n. You can recover from Microsoft and its suppliers only direct damages up to U.S. $5.00. You cannot recover any other damages, including consequential, lost profits, special, ind\\hich\\af39\\dbch\\af11\\loch\\f39 irect or incidental damages.}{\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s24\\ql \\li357\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 This limitation applies to}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s34\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 claims for breach of contract, breach of warranty, guarantee or con\\hich\\af39\\dbch\\af13\\loch\\f39 dition, strict liability, negligence, or other tort to the extent permitted by applicable law.}{\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\ql \\li360\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \nIt also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because \\hich\\af39\\dbch\\af13\\loch\\f39 \nyour country may not allow the exclusion or limitation of incidental, consequential or other damages.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s79\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid132812 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af13\\loch\\f39 \nPlease note: As this software is distributed in Quebec, Canada, these license terms are provided below in French.\n\\par }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\lang1036\\langfe1033\\dbch\\af13\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af13\\loch\\f39 Remarque\\~\\hich\\f39 : Ce logiciel \\'e9\\loch\\f39 \\hich\\f39 tant distribu\\'e9\\loch\\f39  a\n\\hich\\af39\\dbch\\af13\\loch\\f39 \\hich\\f39 u Qu\\'e9\\loch\\f39 \\hich\\f39 bec, Canada, les termes de cette licence sont fournis ci-dessous en fran\\'e7\\loch\\f39 ais.\n\\par }\\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid132812 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 EXON\\'c9\\loch\\f39 \nRATION DE GARANTIE}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 . Le logiciel vis\\'e9\\loch\\f39 \\hich\\f39  par une licence est offert \\'ab\\loch\\f39 \n\\hich\\f39  tel quel \\'bb\\loch\\f39 \\hich\\f39 . Toute utilisation de ce logiciel est \\'e0\\loch\\f39 \\hich\\f39  votre seule risque et p\\'e9\\loch\\f39 ril. Microsoft n\\hich\\f39 \\rquote \\loch\\f39 accorde au\\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 \ncune autre garantie expresse. Vous pouvez b\\'e9\\loch\\f39 \\hich\\f39 n\\'e9\\loch\\f39 \\hich\\f39 \nficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\\'e9\\loch\\f39  ma\\hich\\af39\\dbch\\af11\\loch\\f39 r\n\\hich\\af39\\dbch\\af11\\loch\\f39 chande, d\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 ad\\'e9\\loch\\f39 \\hich\\f39 quation \\'e0\\loch\\f39  un usage particulier et d\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 absence de contrefa\\'e7\\loch\\f39 on sont exclues.\n\\par }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 LIMITATION DES DOMMAGES-INT\\'c9\\loch\\f39 \\hich\\f39 R\\'ca\\loch\\f39 \\hich\\f39 \nTS ET EXCLUSION DE RESPONSABILIT\\'c9\\loch\\f39  POUR LES DOMMAGES}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \n. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dom\\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 mages directs uniquement \\'e0\\loch\\f39 \\hich\\f39  hauteur de 5,00 $ US. Vous ne pouvez pr\\'e9\\loch\\f39 \\hich\\f39 tendre \\'e0\n\\loch\\f39 \\hich\\f39  aucune indemnisation pour les autres dommages, y compris les dommages sp\\'e9\\loch\\f39 \\hich\\f39 ciaux, indirects ou accessoires et pertes de b\\'e9\\loch\\f39 \\hich\\f39 n\\'e9\\loch\\f39 fices.\n\\par \\hich\\af39\\dbch\\af11\\loch\\f39 Cette limitation concerne :\n\\par \\bullet \\tab \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 tout ce qui est reli\\'e9\\hich\\af39\\dbch\\af11\\loch\\f39  au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers ; et\n\\par \\bullet \\tab \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 les r\\'e9\\loch\\f39 \\hich\\f39 clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\\'e9\\loch\\f39 \\hich\\f39  stricte, de n\\'e9\\loch\\f39 gligence ou\n\\hich\\af39\\dbch\\af11\\loch\\f39  d\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 une autre faute dans la limite autoris\\'e9\\loch\\f39 e par la loi en vigueur.\n\\par \\hich\\af39\\dbch\\af11\\loch\\f39 Elle s\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 applique \\'e9\\loch\\f39 \\hich\\f39 galement, m\\'ea\\loch\\f39 \\hich\\f39 me si Microsoft connaissait ou devrait conna\\'ee\\loch\\f39 tre l\\hich\\f39 \\rquote \\'e9\\loch\\f39 \\hich\\f39 \nventualit\\'e9\\loch\\f39  d\\hich\\f39 \\rquote \\loch\\f39 un tel dommage. Si votre pays n\\hich\\f39 \\rquote \\loch\\f39 autorise pas l\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 exclusion ou la limitation de responsabilit\\'e9\\hich\\af39\\dbch\\af11\\loch\\f39 \n pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l\\hich\\f39 \\rquote \\loch\\f39 exclusion ci-dessus ne s\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 appliquera pas \\'e0\\loch\\f39 \\hich\\f39  votre \\'e9\n\\loch\\f39 gard.\n\\par }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 EFFET JURIDIQUE}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 . Le pr\\'e9\\loch\\f39 \\hich\\f39 sent contrat d\\'e9\\loch\\f39 crit certains droits juridiques. Vous pourriez avoir \\hich\\af39\\dbch\\af11\\loch\\f39 d\n\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 autres droits pr\\'e9\\loch\\f39 \\hich\\f39 vus par les lois de votre pays. Le pr\\'e9\\loch\\f39 \\hich\\f39 sent contrat ne modifie pas les droits que vous conf\\'e8\\loch\\f39 \nrent les lois de votre pays si celles-ci ne le permettent pas.\n\\par }\\pard \\ltrpar\\ql \\li360\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin360\\itap0 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid132812 \n\\par }{\\*\\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a\n9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad\n5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6\nb01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0\n0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6\na7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f\nc7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512\n0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462\na1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865\n6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b\n4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b\n4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f\n7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87\n615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad\n79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b\n5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab\n999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9\n699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586\n8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6\n0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f\n9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be\n15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979\n3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d\n32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a\nf074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86\ne877f0034e16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb\n44f95d843b5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a\n6409fb44d08741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c\n3d9058edf2c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db0256\n5e85f3b9660d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276\nb9f7dec44b7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8\nc33585b5fb9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e\n51440ca2e0088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95\nb21be5ceaf8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff\n6dce591a26ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec6\n9ffb9e65d028d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239\nb75a5bb1e6345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a449\n59d366ad93b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e8\n2db8df9f30254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468\n656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4\n350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d2624\n52282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe5141\n73d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c020000130000000000000000\n0000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000\n000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c0000000000000000000000000019\n0200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b00001600000000\n000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b01000027\n00000000000000000000000000a00900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d0100009b0a00000000}\n{\\*\\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d\n617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169\n6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363\n656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}\n{\\*\\latentstyles\\lsdstimax371\\lsdlockeddef0\\lsdsemihiddendef0\\lsdunhideuseddef0\\lsdqformatdef0\\lsdprioritydef99{\\lsdlockedexcept \\lsdqformat1 \\lsdpriority0 \\lsdlocked0 Normal;\\lsdqformat1 \\lsdlocked0 heading 1;\\lsdqformat1 \\lsdlocked0 heading 2;\n\\lsdqformat1 \\lsdlocked0 heading 3;\\lsdqformat1 \\lsdlocked0 heading 4;\\lsdqformat1 \\lsdlocked0 heading 5;\\lsdqformat1 \\lsdlocked0 heading 6;\\lsdqformat1 \\lsdlocked0 heading 7;\\lsdqformat1 \\lsdlocked0 heading 8;\\lsdqformat1 \\lsdlocked0 heading 9;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 1;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 4;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 6;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 7;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 8;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 9;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 1;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 6;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 7;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 8;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 9;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Normal Indent;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 footnote text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 annotation text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 header;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 footer;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index heading;\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority35 \\lsdlocked0 caption;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 table of figures;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 envelope address;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 envelope return;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 footnote reference;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 annotation reference;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 line number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 page number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 endnote reference;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 endnote text;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 table of authorities;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 macro;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 toa heading;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 5;\\lsdqformat1 \\lsdpriority10 \\lsdlocked0 Title;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Closing;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Signature;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority1 \\lsdlocked0 Default Paragraph Font;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text Indent;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 4;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Message Header;\\lsdqformat1 \\lsdpriority11 \\lsdlocked0 Subtitle;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Salutation;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Date;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text First Indent;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text First Indent 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Note Heading;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text Indent 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text Indent 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Block Text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Hyperlink;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 FollowedHyperlink;\\lsdqformat1 \\lsdpriority22 \\lsdlocked0 Strong;\n\\lsdqformat1 \\lsdpriority20 \\lsdlocked0 Emphasis;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Document Map;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Plain Text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 E-mail Signature;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Top of Form;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Bottom of Form;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Normal (Web);\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Acronym;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Address;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Cite;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Code;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Definition;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Keyboard;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Preformatted;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Sample;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Typewriter;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Variable;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 annotation subject;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 No List;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Outline List 1;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Outline List 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Outline List 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Balloon Text;\\lsdpriority59 \\lsdlocked0 Table Grid;\n\\lsdsemihidden1 \\lsdlocked0 Placeholder Text;\\lsdqformat1 \\lsdpriority1 \\lsdlocked0 No Spacing;\\lsdpriority60 \\lsdlocked0 Light Shading;\\lsdpriority61 \\lsdlocked0 Light List;\\lsdpriority62 \\lsdlocked0 Light Grid;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1;\\lsdpriority64 \\lsdlocked0 Medium Shading 2;\\lsdpriority65 \\lsdlocked0 Medium List 1;\\lsdpriority66 \\lsdlocked0 Medium List 2;\\lsdpriority67 \\lsdlocked0 Medium Grid 1;\\lsdpriority68 \\lsdlocked0 Medium Grid 2;\n\\lsdpriority69 \\lsdlocked0 Medium Grid 3;\\lsdpriority70 \\lsdlocked0 Dark List;\\lsdpriority71 \\lsdlocked0 Colorful Shading;\\lsdpriority72 \\lsdlocked0 Colorful List;\\lsdpriority73 \\lsdlocked0 Colorful Grid;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 1;\n\\lsdpriority61 \\lsdlocked0 Light List Accent 1;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 1;\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 1;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 1;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 1;\n\\lsdsemihidden1 \\lsdlocked0 Revision;\\lsdqformat1 \\lsdpriority34 \\lsdlocked0 List Paragraph;\\lsdqformat1 \\lsdpriority29 \\lsdlocked0 Quote;\\lsdqformat1 \\lsdpriority30 \\lsdlocked0 Intense Quote;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 1;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 1;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 1;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 1;\\lsdpriority70 \\lsdlocked0 Dark List Accent 1;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 1;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 1;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 1;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 2;\\lsdpriority61 \\lsdlocked0 Light List Accent 2;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 2;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 2;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 2;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 2;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 2;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 2;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 2;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 2;\\lsdpriority70 \\lsdlocked0 Dark List Accent 2;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 2;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 2;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 2;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 3;\\lsdpriority61 \\lsdlocked0 Light List Accent 3;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 3;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 3;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 3;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 3;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 3;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 3;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 3;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 3;\\lsdpriority70 \\lsdlocked0 Dark List Accent 3;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 3;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 3;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 3;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 4;\\lsdpriority61 \\lsdlocked0 Light List Accent 4;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 4;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 4;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 4;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 4;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 4;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 4;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 4;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 4;\\lsdpriority70 \\lsdlocked0 Dark List Accent 4;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 4;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 4;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 4;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 5;\\lsdpriority61 \\lsdlocked0 Light List Accent 5;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 5;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 5;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 5;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 5;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 5;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 5;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 5;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 5;\\lsdpriority70 \\lsdlocked0 Dark List Accent 5;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 5;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 5;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 5;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 6;\\lsdpriority61 \\lsdlocked0 Light List Accent 6;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 6;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 6;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 6;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 6;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 6;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 6;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 6;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 6;\\lsdpriority70 \\lsdlocked0 Dark List Accent 6;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 6;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 6;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 6;\\lsdqformat1 \\lsdpriority19 \\lsdlocked0 Subtle Emphasis;\\lsdqformat1 \\lsdpriority21 \\lsdlocked0 Intense Emphasis;\n\\lsdqformat1 \\lsdpriority31 \\lsdlocked0 Subtle Reference;\\lsdqformat1 \\lsdpriority32 \\lsdlocked0 Intense Reference;\\lsdqformat1 \\lsdpriority33 \\lsdlocked0 Book Title;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority37 \\lsdlocked0 Bibliography;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority39 \\lsdlocked0 TOC Heading;\\lsdpriority41 \\lsdlocked0 Plain Table 1;\\lsdpriority42 \\lsdlocked0 Plain Table 2;\\lsdpriority43 \\lsdlocked0 Plain Table 3;\\lsdpriority44 \\lsdlocked0 Plain Table 4;\n\\lsdpriority45 \\lsdlocked0 Plain Table 5;\\lsdpriority40 \\lsdlocked0 Grid Table Light;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light;\\lsdpriority47 \\lsdlocked0 Grid Table 2;\\lsdpriority48 \\lsdlocked0 Grid Table 3;\\lsdpriority49 \\lsdlocked0 Grid Table 4;\n\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 1;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 1;\n\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 1;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 1;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 1;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 1;\n\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 1;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 2;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 2;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 2;\n\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 2;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 2;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 2;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 2;\n\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 3;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 3;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 3;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 3;\n\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 3;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 3;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 3;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 4;\n\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 4;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 4;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 4;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 4;\n\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 4;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 4;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 5;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 5;\n\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 5;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 5;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 5;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 5;\n\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 5;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 6;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 6;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 6;\n\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 6;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 6;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 6;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 6;\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light;\\lsdpriority47 \\lsdlocked0 List Table 2;\\lsdpriority48 \\lsdlocked0 List Table 3;\\lsdpriority49 \\lsdlocked0 List Table 4;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark;\n\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 1;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 1;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 1;\n\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 1;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 1;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 1;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 1;\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 2;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 2;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 2;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 2;\n\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 2;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 2;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 2;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 3;\n\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 3;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 3;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 3;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 3;\n\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 3;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 3;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 4;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 4;\n\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 4;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 4;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 4;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 4;\n\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 4;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 5;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 5;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 5;\n\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 5;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 5;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 5;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 5;\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 6;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 6;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 6;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 6;\n\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 6;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 6;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 6;}}{\\*\\datastore 010500000200000018000000\n4d73786d6c322e534158584d4c5265616465722e362e30000000000000000000003a0000\nd0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000002000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nfffffffffffffffffdffffff0a0000000f0000000400000005000000060000000700000008000000090000000b0000000e0000000c0000000d0000001000000018000000feffffff11000000120000001300000014000000150000001600000017000000190000001a0000001b000000fefffffffeffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff010000000c6ad98892f1d411a65f0040963251e5000000000000000000000000804f\n2a4db889cf010300000040270000000000004d0073006f004400610074006100530074006f0072006500000000000000000000000000000000000000000000000000000000000000000000000000000000001a000101ffffffffffffffff050000000000000000000000000000000000000000000000804f2a4db889cf01\n804f2a4db889cf0100000000000000000000000032003500cd00dd00c10058004600c3005900550053005400de004900db00db00c300d900310034004700d0003d003d000000000000000000000000000000000032000101ffffffffffffffff030000000000000000000000000000000000000000000000804f2a4db889\ncf01804f2a4db889cf010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff04000000ffffffff000000000000000000000000000000000000000000000000\n00000000000000000000000000000000ad0d0000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a00\n00001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000feffffff3800000039000000\n3a0000003b0000003c0000003d0000003e0000003f0000004000000041000000420000004300000044000000feffffff460000004700000048000000feffffff4a0000004b0000004c0000004d0000004e000000feffffff5000000051000000520000005300000054000000550000005600000057000000580000005900\n00005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000\n790000007a0000007b0000007c0000007d0000007e0000007f000000800000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d38223f3e3c63743a636f6e74656e7454797065536368656d612063743a5f3d2222206d613a5f3d2222206d613a636f6e74656e74547970654e616d65\n3d22446f63756d656e7422206d613a636f6e74656e745479706549443d223078303130313030323237393545423235314434363434464245433132424435443442303844374322206d613a636f6e74656e745479706556657273696f6e3d223022206d613a636f6e74656e74547970654465736372697074696f6e3d2243\n72656174652061206e657720646f63756d656e742e22206d613a636f6e74656e745479706553636f70653d2222206d613a76657273696f6e49443d2264636264643635633032373738363565303939666233646330353635336235372220786d6c6e733a63743d22687474703a2f2f736368656d61732e6d6963726f736f\n66742e636f6d2f6f66666963652f323030362f6d657461646174612f636f6e74656e74547970652220786d6c6e733a6d613d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f6d657461646174612f70726f706572746965732f6d65746141747472696275746573\n223e0d0a3c7873643a736368656d61207461726765744e616d6573706163653d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f6d657461646174612f70726f7065727469657322206d613a726f6f743d227472756522206d613a6669656c647349443d22346165\n62323063306533343432363733616637656531303738363435383736342220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a703d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f\n6d657461646174612f70726f70657274696573223e0d0a3c7873643a656c656d656e74206e616d653d2270726f70657274696573223e0d0a3c7873643a636f6d706c6578547970653e0d0a3c7873643a73657175656e63653e0d0a3c7873643a656c656d656e74206e616d653d22646f63756d656e744d616e6167656d65\n6e74223e0d0a3c7873643a636f6d706c6578547970653e0d0a3c7873643a616c6c2f3e0d0a3c2f7873643a636f6d706c6578547970653e0d0a3c2f7873643a656c656d656e743e0d0a3c2f7873643a73657175656e63653e0d0a3c2f7873643a636f6d706c6578547970653e0d0a3c2f7873643a656c656d656e743e0d0a\n3c2f7873643a736368656d613e0d0a3c7873643a736368656d61207461726765744e616d6573706163653d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f7061636b6167652f323030362f6d657461646174612f636f72652d70726f706572746965732220656c656d656e74466f\n726d44656661756c743d227175616c69666965642220617474726962757465466f726d44656661756c743d22756e7175616c69666965642220626c6f636b44656661756c743d2223616c6c2220786d6c6e733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f7061636b6167652f\n323030362f6d657461646174612f636f72652d70726f706572746965732220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612d696e7374616e\n63652220786d6c6e733a64633d22687474703a2f2f7075726c2e6f72672f64632f656c656d656e74732f312e312f2220786d6c6e733a64637465726d733d22687474703a2f2f7075726c2e6f72672f64632f7465726d732f2220786d6c6e733a6f646f633d22687474703a2f2f736368656d61732e6d6963726f736f6674\n2e636f6d2f6f66666963652f696e7465726e616c2f323030352f696e7465726e616c446f63756d656e746174696f6e223e0d0a3c7873643a696d706f7274206e616d6573706163653d22687474703a2f2f7075726c2e6f72672f64632f656c656d656e74732f312e312f2220736368656d614c6f636174696f6e3d226874\n74703a2f2f6475626c696e636f72652e6f72672f736368656d61732f786d6c732f7164632f323030332f30342f30322f64632e787364222f3e0d0a3c7873643a696d706f7274206e616d6573706163653d22687474703a2f2f7075726c2e6f72672f64632f7465726d732f2220736368656d614c6f636174696f6e3d2268\n7474703a2f2f6475626c696e636f72652e6f72672f736368656d61732f786d6c732f7164632f323030332f30342f30322f64637465726d732e787364222f3e0d0a3c7873643a656c656d656e74206e616d653d22636f726550726f706572746965732220747970653d2243545f636f726550726f70657274696573222f3e\n0d0a3c7873643a636f6d706c657854797065206e616d653d2243545f636f726550726f70657274696573223e0d0a3c7873643a616c6c3e0d0a3c7873643a656c656d656e74207265663d2264633a63726561746f7222206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c65\n6d656e74207265663d2264637465726d733a6372656174656422206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c656d656e74207265663d2264633a6964656e74696669657222206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c787364\n3a656c656d656e74206e616d653d22636f6e74656e745479706522206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e6722206d613a696e6465783d223022206d613a646973706c61794e616d653d22436f6e74656e74205479706522206d613a726561644f6e\n6c793d2274727565222f3e0d0a3c7873643a656c656d656e74207265663d2264633a7469746c6522206d696e4f63637572733d223022206d61784f63637572733d223122206d613a696e6465783d223422206d613a646973706c61794e616d653d225469746c65222f3e0d0a3c7873643a656c656d656e74207265663d22\n64633a7375626a65637422206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c656d656e74207265663d2264633a6465736372697074696f6e22206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c656d656e74206e616d653d\n226b6579776f72647322206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67222f3e0d0a3c7873643a656c656d656e74207265663d2264633a6c616e677561676522206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c787364\n3a656c656d656e74206e616d653d2263617465676f727922206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67222f3e0d0a3c7873643a656c656d656e74206e616d653d2276657273696f6e22206d696e4f63637572733d223022206d61784f63637572733d\n22312220747970653d227873643a737472696e67222f3e0d0a3c7873643a656c656d656e74206e616d653d227265766973696f6e22206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67223e0d0a3c7873643a616e6e6f746174696f6e3e0d0a3c7873643a64\n6f63756d656e746174696f6e3e0d0a202020202020202020202020202020202020202020202020546869732076616c756520696e6469636174657320746865206e756d626572206f66207361766573206f72207265766973696f6e732e20546865206170706c69636174696f6e20697320726573706f6e7369626c652066\n6f72207570646174696e6720746869732076616c75652061667465722065616368207265766973696f6e2e0d0a20202020202020202020202020202020202020203c2f7873643a646f63756d656e746174696f6e3e0d0a3c2f7873643a616e6e6f746174696f6e3e0d0a3c2f7873643a656c656d656e743e0d0a3c787364\n3a656c656d656e74206e616d653d226c6173744d6f646966696564427922206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67222f3e0d0a3c7873643a656c656d656e74207265663d2264637465726d733a6d6f64696669656422206d696e4f63637572733d\n223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c656d656e74206e616d653d226c6173745072696e74656422206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a6461746554696d65222f3e0d0a3c7873643a656c656d656e74206e616d653d22636f6e\n74656e7453746174757322206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67222f3e0d0a3c2f7873643a616c6c3e0d0a3c2f7873643a636f6d706c6578547970653e0d0a3c2f7873643a736368656d613e0d0a3c2f63743a636f6e74656e74547970655363\n68656d613e000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a64617461500072006f007000650072007400690065007300000000000000000000000000000000000000\n000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000370000006d030000000000004700cf00cd004600c80054005800d300da00d400da003100d700c1005800ce00da004d00\n4700d800c80051003d003d000000000000000000000000000000000032000101020000000b000000060000000000000000000000000000000000000000000000804f2a4db889cf01804f2a4db889cf010000000000000000000000004900740065006d000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000a000201ffffffff07000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000045000000c100000000000000500072006f007000650072007400690065007300000000000000000000000000\n000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000049000000540100000000000073746f72654974656d2064733a6974656d49443d227b3835374446423731\n2d363337312d343436312d393346382d3845464238463936444531427d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c64733a73\n6368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f6d657461646174612f636f6e74656e7454797065222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66\n742e636f6d2f6f66666963652f323030362f6d657461646174612f70726f706572746965732f6d65746141747472696275746573222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222f3e3c64733a736368656d6152656620\n64733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f6d657461646174612f70726f70657274696573222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f7267\n2f7061636b6167652f323030362f6d657461646174612f636f72652d70726f70657274696573222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f7075726c2e6f72672f64632f656c656d656e74732f312e312f222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f\n2f7075726c2e6f72672f64632f7465726d732f222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f696e7465726e616c2f323030352f696e7465726e616c446f63756d656e746174696f6e222f3e3c2f64733a736368\n656d61526566733e3c2f64733a6461746173746f72654974656d3e000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d3822207374616e64616c6f6e653d22796573223f3e3c44696374696f6e617279205361766564427956657273696f\n6e3d22332e362e31382e3022204d696e696d756d56657273696f6e3d22332e362e342e302220786d6c6e733d22687474703a2f2f736368656d61732e627573696e6573732d696e746567726974792e636f6d2f6465616c6275696c6465722f323030362f64696374696f6e617279222f3e00000000000000000000000000\n00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d206473\n3a6974656d49443d227b41313435464231412d463333352d344545422d394244452d3135454545384331423841317d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64\n733a736368656d61526566733e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e627573696e6573732d696e746567726974792e636f6d2f6465616c6275696c6465722f323030362f64696374696f6e617279222f3e3c2f64733a736368656d61526566733e3c2f64733a6461\n746173746f72654974656d3e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d3822207374616e64616c6f6e653d22796573223f3e3c53657373696f6e20c900c7004700\n3500c400c90055004a0058005500470042004c004600db0046004b00c5005000c4005600d0003d003d000000000000000000000000000000000032000100ffffffffffffffff090000000000000000000000000000000000000000000000804f2a4db889cf01804f2a4db889cf0100000000000000000000000049007400\n65006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff0a000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000004f000000e70c0000000000005000\n72006f007000650072007400690065007300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000830000005101000000000000\nd2004200c00042003000d0003200c000c10055004700d4003500c10059003100d6005800c000c400420051003d003d000000000000000000000000000000000032000101080000000e0000000c0000000000000000000000000000000000000000000000804f2a4db889cf01804f2a4db889cf0100000000000000000000\n00008100000082000000feffffff8400000085000000860000008700000088000000feffffff8a0000008b0000008c000000feffffff8e0000008f000000900000009100000092000000feffffff940000009500000096000000feffffff98000000990000009a0000009b0000009c000000feffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffff786d6c6e733d22687474703a2f2f736368656d61732e627573696e6573732d696e746567726974792e636f6d2f6465616c6275696c6465722f323030362f616e7377657273223e3c5661726961626c65204e616d653d226d73636f6d223e3c56616c75653e66616c73653c2f56616c75653e3c2f\n5661726961626c653e3c5661726961626c65204e616d653d2266696c6574797065223e3c56616c75653e2e7274663c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226c616e6775616765616c6c223e3c56616c75653e456e676c6973683c2f56616c75653e3c2f5661726961626c65\n3e3c5661726961626c65204e616d653d225f5f6576656e7474617267657422204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c7365222f3e3c5661726961626c65204e616d653d225f5f6576656e74617267756d656e7422204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c7365\n222f3e3c5661726961626c65204e616d653d225f5f72657175657374646967657374222052656c6576616e743d2266616c7365223e3c56616c75653e307832413132373530313835344436453732354235383634334143363432343044324330453738303532304133453636434335343433424146394143413637333635\n323134443445323036394639304346463532463630354238333845433844353332353237344143464233453336363734463338324439434344353144414336302c3234204a756e20323031332031363a30353a3130202d303030303c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d22\n5f5f6576656e7476616c69646174696f6e222052656c6576616e743d2266616c7365223e3c56616c75653e2f77455741674b4f3239697043414c623449756d444c2b75437032397970624e71637a6d5230493767414e52424e67333c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d22\n63746c303024706c616365686f6c6465726d61696e24686663657370636f6e74726163747265666572656e6365222052656c6576616e743d2266616c7365223e3c56616c75653e323031332d4d41494e422d3030303636303c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226c6175\n6e6368646976616374696f6e22204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c7365222f3e3c5661726961626c65204e616d653d225f5f737064756d6d79746578743122204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c7365222f3e3c5661726961626c65204e616d653d22\n5f5f737064756d6d79746578743222204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c7365222f3e3c5661726961626c65204e616d653d2263616e616461617661696c223e3c56616c75653e747275653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2263616e\n6164616672656e6368223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2266696c65666f726d6174223e3c56616c75653e747275653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d22736f6674776172657479\n7065223e3c56616c75653e467265652c205374616e64616c6f6e6520536f6674776172653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2270726f647563746e616d65223e3c56616c75653e57696e646f777320417a757265204d6f62696c652053444b3c2f56616c75653e3c2f56\n61726961626c653e3c5661726961626c65204e616d653d226e756d6265726f66636f70696573223e3c56616c75653e416e79206e756d626572206f6620636f706965733c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2270726f6475637476657273696f6e223e3c56616c75653e4e\n6f6e653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2276657273696f6e76697369626c65223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226368616e6e656c223e3c56616c75653e52657461696c3c2f56\n616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d227374616e64616c6f6e657573657269676874223e3c56616c75653e4f6e2074686520757365722773206465766963652873293c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226d65646961656c656d\n656e747374656d706c61746573223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2264697374726962757461626c65636f6465223e3c56616c75653e747275653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d\n2264697374726962757461626c65636f646574797065223e3c56616c75653e4d4643732c2041544c7320616e6420435254733c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d22696e7465726e616c726561737369676e6d656e74223e3c56616c75653e66616c73653c2f56616c7565\n3e3c2f5661726961626c653e3c5661726961626c65204e616d653d226c6963656e73657472616e73666572223e3c56616c75653e747275653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226f746865726d6963726f736f667470726f6772616d73223e3c56616c75653e66616c73\n653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2270726572656c65617365636f6465223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d227468697264706172747970726f6772616d73223e3c56616c75653e\n747275653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2262656e63686d61726b696e67223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226d706567223e3c56616c75653e66616c73653c2f56616c75653e\n3c2f5661726961626c653e3c5661726961626c65204e616d653d22696e7465726e657462617365647365727669636573223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226f726967696e61746f72223e3c56616c75653e5245444d4f4e445c6972\n69736c3c2f56616c75653e3c2f5661726961626c653e3c506172616d65746572204e616d653d2264625f646973706c61795f616c6c5f636f6d6d656e7473223e3c56616c75653e66616c73653c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f73686f775f73756d6d61\n7279223e3c56616c75653e64697361626c65643c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f74656d706c6174655f666f726d223e3c56616c75653e35663336633330632d333166662d343666652d386264382d3165633864663732623131363c2f56616c75653e3c\n2f506172616d657465723e3c506172616d65746572204e616d653d2264625f74656d706c6174655f7265666572656e6365223e3c56616c75653e5553455445524d535f4d41494e423c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f74656d706c6174655f7665727369\n6f6e223e3c56616c75653e32303132303831363c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f7472616e73616374696f6e5f65787465726e616c5f6c6162656c223e3c56616c75653e323031332d4d41494e422d3030303636303c2f56616c75653e3c2f506172616d\n657465723e3c506172616d65746572204e616d653d2264625f7472616e73616374696f6e5f6964223e3c56616c75653e383238393c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f766973697465645f7061676573223e3c56616c75653e313c2f56616c75653e3c5661\n6c75653e323c2f56616c75653e3c56616c75653e333c2f56616c75653e3c56616c75653e343c2f56616c75653e3c56616c75653e363c2f56616c75653e3c56616c75653e373c2f56616c75653e3c2f506172616d657465723e3c2f53657373696f6e3e000000000000000000000000000000000000000000000000003c3f\n786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d2064733a6974656d49443d227b39323946373141362d303939352d343135442d383132432d3545433532413533453435377d2220786d6c\n6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6275\n73696e6573732d696e746567726974792e636f6d2f6465616c6275696c6465722f323030362f616e7377657273222f3e3c2f64733a736368656d61526566733e3c2f64733a6461746173746f72654974656d3e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n000000003c623a536f75726365732053656c65637465645374796c653d225c4150412e58534c22205374796c654e616d653d224150412220786d6c6e733a623d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f67\n72617068792220786d6c6e733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879223e3c2f623a536f75726365733e0000000000000000000000000000000000000000000000000000000000000000\n00000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d2064733a6974656d49443d227b36423031313843382d323030372d343138352d423437452d3136314244393738\n323430357d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6375734900740065006d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000a000201ffffffff0d000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000089000000d800000000000000500072006f007000650072007400690065007300000000000000000000000000000000000000000000000000000000000000\n000000000000000000000000000016000200ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000008d0000005501000000000000d600cb003100db0030005700d000cb00c400d400da00d300dc00dd004900350059004400db0046004300d0003d003d00\n0000000000000000000000000000000032000100ffffffffffffffff0f0000000000000000000000000000000000000000000000804f2a4db889cf01804f2a4db889cf010000000000000000000000004900740065006d000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000a000201ffffffff10000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000093000000db00000000000000746f6d586d6c223e3c64733a736368656d61526566733e3c64733a736368656d615265662064733a7572693d\n22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879222f3e3c2f64733a736368656d61526566733e3c2f64733a6461746173746f72654974656d3e000000000000000000000000000000000000000000\n000000000000000000000000000000000000000000003c3f6d736f2d636f6e74656e74547970653f3e3c466f726d54656d706c6174657320786d6c6e733d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f7368617265706f696e742f76332f636f6e74656e74747970652f666f726d73223e3c\n446973706c61793e446f63756d656e744c696272617279466f726d3c2f446973706c61793e3c456469743e446f63756d656e744c696272617279466f726d3c2f456469743e3c4e65773e446f63756d656e744c696272617279466f726d3c2f4e65773e3c2f466f726d54656d706c617465733e0000000000000000000000\n00000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a64617461500072006f00700065007200740069006500730000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000970000004f0100000000000000000000000000000000000000000000000000000000000000000000000000000000\n00000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073746f72654974656d2064733a6974656d49443d227b363946424236\n44412d324236432d344539332d423346332d4432314636303345433530427d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c6473\n3a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f7368617265706f696e742f76332f636f6e74656e74747970652f666f726d73222f3e3c2f64733a736368656d61526566733e3c2f64733a6461746173746f72654974656d3e000000000000000000\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105000000000000}}"
  },
  {
    "path": "sdk/android/src/tools/package.bat",
    "content": "@echo off\nIF \"%2\" == \"\" GOTO :Error\ngoto :Start\n\n:Error\necho usage: %0 ^<output directory^> ^<zip version^>\necho   where output directory is where the .jar files will be placed\necho   and zip version is the version to be appended to the .jar files\ngoto :TheEnd\n\n:Start\nIF NOT EXIST \"%1\" (\n    md \"%1\"\n    echo . Created output directory %1\n)\n\necho Creating the jar with the binaries...\njar cf \"%1\\mobileservices-%2.jar\" -C ..\\sdk\\bin\\classes .\njar cf \"%1\\notifications-%2.jar\" -C ..\\notifications-handler\\bin\\classes .\necho ... done\n\necho Creating the jar with the docs...\njar cf \"%1\\mobileservices-%2-javadoc.jar\" -C ..\\sdk\\doc .\njar cf \"%1\\notifications-%2-javadoc.jar\" -C ..\\notifications-handler\\doc .\necho ... done\n\necho Creating the jar with the sources...\njar cf \"%1\\mobileservices-%2-sources.jar\" -C ..\\sdk\\src .\njar cf \"%1\\notifications-%2-sources.jar\" -C ..\\notifications-handler\\src .\necho ... done\n\necho Creating the properties file...\necho src=mobileservices-%2-sources.jar > \"%1\\mobileservices-%2.jar.properties\"\necho doc=mobileservices-%2-javadoc.jar >> \"%1\\mobileservices-%2.jar.properties\"\necho src=notifications-%2-sources.jar > \"%1\\notifications-%2.jar.properties\"\necho doc=notifications-%2-javadoc.jar >> \"%1\\notifications-%2.jar.properties\"\necho ... done.\n\necho Copying the license files...\ncopy /y License.rtf \"%1\"\ncopy /y thirdpartynotices.rtf \"%1\"\necho ... done.\n\necho Finished.\n\n:TheEnd\n"
  },
  {
    "path": "sdk/android/src/tools/thirdpartynotices.rtf",
    "content": "{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1\\adeff0\\deff0\\stshfdbch0\\stshfloch0\\stshfhich0\\stshfbi0\\deflang1033\\deflangfe1033\\themelang1033\\themelangfe0\\themelangcs0{\\fonttbl{\\f0\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times New Roman};}\n{\\f1\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604020202020204}Arial;}{\\f2\\fbidi \\fmodern\\fcharset0\\fprq1{\\*\\panose 02070309020205020404}Courier New{\\*\\falt Arial};}\n{\\f3\\fbidi \\froman\\fcharset2\\fprq2{\\*\\panose 05050102010706020507}Symbol{\\*\\falt Bookshelf Symbol 3};}{\\f10\\fbidi \\fnil\\fcharset2\\fprq2{\\*\\panose 05000000000000000000}Wingdings{\\*\\falt Symbol};}\n{\\f34\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02040503050406030204}Cambria Math{\\*\\falt Calisto MT};}{\\f37\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020f0502020204030204}Calibri{\\*\\falt Times New Roman};}\n{\\f39\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604030504040204}Tahoma{\\*\\falt ?l?r ???};}{\\f40\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02040503050406030204}Cambria;}\n{\\f41\\fbidi \\fnil\\fcharset0\\fprq2{\\*\\panose 02020803070505020304}Times New Roman Bold{\\*\\falt Times New Roman};}{\\flomajor\\f31500\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times New Roman};}\n{\\fdbmajor\\f31501\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times New Roman};}{\\fhimajor\\f31502\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02040503050406030204}Cambria;}\n{\\fbimajor\\f31503\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times New Roman};}{\\flominor\\f31504\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times New Roman};}\n{\\fdbminor\\f31505\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times New Roman};}{\\fhiminor\\f31506\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020f0502020204030204}Calibri{\\*\\falt Times New Roman};}\n{\\fbiminor\\f31507\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times New Roman};}{\\f327\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times New Roman};}\n{\\f328\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times New Roman};}{\\f330\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times New Roman};}\n{\\f331\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times New Roman};}{\\f332\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times New Roman};}\n{\\f333\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times New Roman};}{\\f334\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times New Roman};}\n{\\f335\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times New Roman};}{\\f337\\fbidi \\fswiss\\fcharset238\\fprq2 Arial CE;}{\\f338\\fbidi \\fswiss\\fcharset204\\fprq2 Arial Cyr;}{\\f340\\fbidi \\fswiss\\fcharset161\\fprq2 Arial Greek;}\n{\\f341\\fbidi \\fswiss\\fcharset162\\fprq2 Arial Tur;}{\\f342\\fbidi \\fswiss\\fcharset177\\fprq2 Arial (Hebrew);}{\\f343\\fbidi \\fswiss\\fcharset178\\fprq2 Arial (Arabic);}{\\f344\\fbidi \\fswiss\\fcharset186\\fprq2 Arial Baltic;}\n{\\f345\\fbidi \\fswiss\\fcharset163\\fprq2 Arial (Vietnamese);}{\\f347\\fbidi \\fmodern\\fcharset238\\fprq1 Courier New CE{\\*\\falt Arial};}{\\f348\\fbidi \\fmodern\\fcharset204\\fprq1 Courier New Cyr{\\*\\falt Arial};}\n{\\f350\\fbidi \\fmodern\\fcharset161\\fprq1 Courier New Greek{\\*\\falt Arial};}{\\f351\\fbidi \\fmodern\\fcharset162\\fprq1 Courier New Tur{\\*\\falt Arial};}{\\f352\\fbidi \\fmodern\\fcharset177\\fprq1 Courier New (Hebrew){\\*\\falt Arial};}\n{\\f353\\fbidi \\fmodern\\fcharset178\\fprq1 Courier New (Arabic){\\*\\falt Arial};}{\\f354\\fbidi \\fmodern\\fcharset186\\fprq1 Courier New Baltic{\\*\\falt Arial};}{\\f355\\fbidi \\fmodern\\fcharset163\\fprq1 Courier New (Vietnamese){\\*\\falt Arial};}\n{\\f667\\fbidi \\froman\\fcharset238\\fprq2 Cambria Math CE{\\*\\falt Calisto MT};}{\\f668\\fbidi \\froman\\fcharset204\\fprq2 Cambria Math Cyr{\\*\\falt Calisto MT};}{\\f670\\fbidi \\froman\\fcharset161\\fprq2 Cambria Math Greek{\\*\\falt Calisto MT};}\n{\\f671\\fbidi \\froman\\fcharset162\\fprq2 Cambria Math Tur{\\*\\falt Calisto MT};}{\\f674\\fbidi \\froman\\fcharset186\\fprq2 Cambria Math Baltic{\\*\\falt Calisto MT};}{\\f675\\fbidi \\froman\\fcharset163\\fprq2 Cambria Math (Vietnamese){\\*\\falt Calisto MT};}\n{\\f697\\fbidi \\fswiss\\fcharset238\\fprq2 Calibri CE{\\*\\falt Times New Roman};}{\\f698\\fbidi \\fswiss\\fcharset204\\fprq2 Calibri Cyr{\\*\\falt Times New Roman};}{\\f700\\fbidi \\fswiss\\fcharset161\\fprq2 Calibri Greek{\\*\\falt Times New Roman};}\n{\\f701\\fbidi \\fswiss\\fcharset162\\fprq2 Calibri Tur{\\*\\falt Times New Roman};}{\\f704\\fbidi \\fswiss\\fcharset186\\fprq2 Calibri Baltic{\\*\\falt Times New Roman};}{\\f705\\fbidi \\fswiss\\fcharset163\\fprq2 Calibri (Vietnamese){\\*\\falt Times New Roman};}\n{\\f717\\fbidi \\fswiss\\fcharset238\\fprq2 Tahoma CE{\\*\\falt ?l?r ???};}{\\f718\\fbidi \\fswiss\\fcharset204\\fprq2 Tahoma Cyr{\\*\\falt ?l?r ???};}{\\f720\\fbidi \\fswiss\\fcharset161\\fprq2 Tahoma Greek{\\*\\falt ?l?r ???};}\n{\\f721\\fbidi \\fswiss\\fcharset162\\fprq2 Tahoma Tur{\\*\\falt ?l?r ???};}{\\f722\\fbidi \\fswiss\\fcharset177\\fprq2 Tahoma (Hebrew){\\*\\falt ?l?r ???};}{\\f723\\fbidi \\fswiss\\fcharset178\\fprq2 Tahoma (Arabic){\\*\\falt ?l?r ???};}\n{\\f724\\fbidi \\fswiss\\fcharset186\\fprq2 Tahoma Baltic{\\*\\falt ?l?r ???};}{\\f725\\fbidi \\fswiss\\fcharset163\\fprq2 Tahoma (Vietnamese){\\*\\falt ?l?r ???};}{\\f726\\fbidi \\fswiss\\fcharset222\\fprq2 Tahoma (Thai){\\*\\falt ?l?r ???};}\n{\\f727\\fbidi \\froman\\fcharset238\\fprq2 Cambria CE;}{\\f728\\fbidi \\froman\\fcharset204\\fprq2 Cambria Cyr;}{\\f730\\fbidi \\froman\\fcharset161\\fprq2 Cambria Greek;}{\\f731\\fbidi \\froman\\fcharset162\\fprq2 Cambria Tur;}\n{\\f734\\fbidi \\froman\\fcharset186\\fprq2 Cambria Baltic;}{\\f735\\fbidi \\froman\\fcharset163\\fprq2 Cambria (Vietnamese);}{\\flomajor\\f31508\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times New Roman};}\n{\\flomajor\\f31509\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times New Roman};}{\\flomajor\\f31511\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times New Roman};}\n{\\flomajor\\f31512\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times New Roman};}{\\flomajor\\f31513\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times New Roman};}\n{\\flomajor\\f31514\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times New Roman};}{\\flomajor\\f31515\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times New Roman};}\n{\\flomajor\\f31516\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times New Roman};}{\\fdbmajor\\f31518\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times New Roman};}\n{\\fdbmajor\\f31519\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times New Roman};}{\\fdbmajor\\f31521\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times New Roman};}\n{\\fdbmajor\\f31522\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times New Roman};}{\\fdbmajor\\f31523\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times New Roman};}\n{\\fdbmajor\\f31524\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times New Roman};}{\\fdbmajor\\f31525\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times New Roman};}\n{\\fdbmajor\\f31526\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times New Roman};}{\\fhimajor\\f31528\\fbidi \\froman\\fcharset238\\fprq2 Cambria CE;}{\\fhimajor\\f31529\\fbidi \\froman\\fcharset204\\fprq2 Cambria Cyr;}\n{\\fhimajor\\f31531\\fbidi \\froman\\fcharset161\\fprq2 Cambria Greek;}{\\fhimajor\\f31532\\fbidi \\froman\\fcharset162\\fprq2 Cambria Tur;}{\\fhimajor\\f31535\\fbidi \\froman\\fcharset186\\fprq2 Cambria Baltic;}\n{\\fhimajor\\f31536\\fbidi \\froman\\fcharset163\\fprq2 Cambria (Vietnamese);}{\\fbimajor\\f31538\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times New Roman};}\n{\\fbimajor\\f31539\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times New Roman};}{\\fbimajor\\f31541\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times New Roman};}\n{\\fbimajor\\f31542\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times New Roman};}{\\fbimajor\\f31543\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times New Roman};}\n{\\fbimajor\\f31544\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times New Roman};}{\\fbimajor\\f31545\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times New Roman};}\n{\\fbimajor\\f31546\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times New Roman};}{\\flominor\\f31548\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times New Roman};}\n{\\flominor\\f31549\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times New Roman};}{\\flominor\\f31551\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times New Roman};}\n{\\flominor\\f31552\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times New Roman};}{\\flominor\\f31553\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times New Roman};}\n{\\flominor\\f31554\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times New Roman};}{\\flominor\\f31555\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times New Roman};}\n{\\flominor\\f31556\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times New Roman};}{\\fdbminor\\f31558\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times New Roman};}\n{\\fdbminor\\f31559\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times New Roman};}{\\fdbminor\\f31561\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times New Roman};}\n{\\fdbminor\\f31562\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times New Roman};}{\\fdbminor\\f31563\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times New Roman};}\n{\\fdbminor\\f31564\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times New Roman};}{\\fdbminor\\f31565\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times New Roman};}\n{\\fdbminor\\f31566\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times New Roman};}{\\fhiminor\\f31568\\fbidi \\fswiss\\fcharset238\\fprq2 Calibri CE{\\*\\falt Times New Roman};}\n{\\fhiminor\\f31569\\fbidi \\fswiss\\fcharset204\\fprq2 Calibri Cyr{\\*\\falt Times New Roman};}{\\fhiminor\\f31571\\fbidi \\fswiss\\fcharset161\\fprq2 Calibri Greek{\\*\\falt Times New Roman};}\n{\\fhiminor\\f31572\\fbidi \\fswiss\\fcharset162\\fprq2 Calibri Tur{\\*\\falt Times New Roman};}{\\fhiminor\\f31575\\fbidi \\fswiss\\fcharset186\\fprq2 Calibri Baltic{\\*\\falt Times New Roman};}\n{\\fhiminor\\f31576\\fbidi \\fswiss\\fcharset163\\fprq2 Calibri (Vietnamese){\\*\\falt Times New Roman};}{\\fbiminor\\f31578\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times New Roman};}\n{\\fbiminor\\f31579\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times New Roman};}{\\fbiminor\\f31581\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times New Roman};}\n{\\fbiminor\\f31582\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times New Roman};}{\\fbiminor\\f31583\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times New Roman};}\n{\\fbiminor\\f31584\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times New Roman};}{\\fbiminor\\f31585\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times New Roman};}\n{\\fbiminor\\f31586\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times New Roman};}}{\\colortbl;\\red0\\green0\\blue0;\\red0\\green0\\blue255;\\red0\\green255\\blue255;\\red0\\green255\\blue0;\\red255\\green0\\blue255;\\red255\\green0\\blue0;\n\\red255\\green255\\blue0;\\red255\\green255\\blue255;\\red0\\green0\\blue128;\\red0\\green128\\blue128;\\red0\\green128\\blue0;\\red128\\green0\\blue128;\\red128\\green0\\blue0;\\red128\\green128\\blue0;\\red128\\green128\\blue128;\\red192\\green192\\blue192;\\red96\\green100\\blue32;\n\\red211\\green211\\blue211;}{\\*\\defchp }{\\*\\defpap \\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 }\\noqfpromote {\\stylesheet{\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \n\\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\snext0 \\sqformat \\spriority0 \\styrsid625 Normal;}{\n\\s1\\ql \\li0\\ri0\\sa240\\keepn\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\outlinelevel0\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af1\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext31 \\slink15 \\sqformat \\styrsid5907427 heading 1;}{\\s2\\ql \\li720\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\ai\\af1\\afs24\\alang1025 \\ltrch\\fcs0 \n\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext31 \\slink16 \\sqformat \\styrsid5907427 heading 2;}{\\s3\\ql \\li1440\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\outlinelevel2\\adjustright\\rin0\\lin1440\\itap0 \\rtlch\\fcs1 \n\\ab\\af1\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext31 \\slink17 \\sqformat \\styrsid5907427 heading 3;}{\n\\s4\\ql \\li2160\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\outlinelevel3\\adjustright\\rin0\\lin2160\\itap0 \\rtlch\\fcs1 \\ab\\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext31 \\slink18 \\sqformat \\styrsid5907427 heading 4;}{\\s5\\ql \\li2880\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\outlinelevel4\\adjustright\\rin0\\lin2880\\itap0 \\rtlch\\fcs1 \\ab\\ai\\af0\\afs24\\alang1025 \\ltrch\\fcs0 \n\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext31 \\slink19 \\sqformat \\styrsid5907427 heading 5;}{\\s6\\ql \\li3600\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\outlinelevel5\\adjustright\\rin0\\lin3600\\itap0 \\rtlch\\fcs1 \n\\ab\\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext31 \\slink20 \\sqformat \\styrsid5907427 heading 6;}{\n\\s7\\ql \\li4320\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\outlinelevel6\\adjustright\\rin0\\lin4320\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext31 \\slink21 \\sqformat \\styrsid5907427 heading 7;}{\\s8\\ql \\li5040\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\outlinelevel7\\adjustright\\rin0\\lin5040\\itap0 \\rtlch\\fcs1 \\ai\\af0\\afs24\\alang1025 \\ltrch\\fcs0 \n\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext31 \\slink22 \\sqformat \\styrsid5907427 heading 8;}{\\s9\\ql \\li5760\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\outlinelevel8\\adjustright\\rin0\\lin5760\\itap0 \\rtlch\\fcs1 \n\\af1\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext31 \\slink23 \\sqformat \\styrsid5907427 heading 9;}{\\*\\cs10 \\additive \\ssemihidden \\styrsid5907427 Default Paragraph Font;}{\\*\n\\ts11\\tsrowd\\trftsWidthB3\\trpaddl108\\trpaddr108\\trpaddfl3\\trpaddft3\\trpaddfb3\\trpaddfr3\\tblind0\\tblindtype3\\tsvertalt\\tsbrdrt\\tsbrdrl\\tsbrdrb\\tsbrdrr\\tsbrdrdgl\\tsbrdrdgr\\tsbrdrh\\tsbrdrv \n\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs20\\alang1025 \\ltrch\\fcs0 \\fs20\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\snext11 \\ssemihidden \\sunhideused Normal Table;}{\\*\\cs15 \\additive \n\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\b\\f40\\fs32\\kerning32 \\sbasedon10 \\slink1 \\slocked \\spriority9 Heading 1 Char;}{\\*\\cs16 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\b\\i\\f40\\fs28 \\sbasedon10 \\slink2 \\slocked \\ssemihidden \\spriority9 Heading 2 Char;}{\\*\\cs17 \n\\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\b\\f40\\fs26 \\sbasedon10 \\slink3 \\slocked \\ssemihidden \\spriority9 Heading 3 Char;}{\\*\\cs18 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\b\\f37\\fs28 \\sbasedon10 \\slink4 \\slocked \\ssemihidden \\spriority9 Heading 4 Char;}{\\*\n\\cs19 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\b\\i\\f37\\fs26 \\sbasedon10 \\slink5 \\slocked \\ssemihidden \\spriority9 Heading 5 Char;}{\\*\\cs20 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\b\\f37 \\sbasedon10 \\slink6 \\slocked \\ssemihidden \\spriority9 Heading 6 Char;}\n{\\*\\cs21 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\f37\\fs24 \\sbasedon10 \\slink7 \\slocked \\ssemihidden \\spriority9 Heading 7 Char;}{\\*\\cs22 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\i\\f37\\fs24 \\sbasedon10 \\slink8 \\slocked \\ssemihidden \\spriority9 \nHeading 8 Char;}{\\*\\cs23 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\f40 \\sbasedon10 \\slink9 \\slocked \\ssemihidden \\spriority9 Heading 9 Char;}{\\s24\\ql \\li0\\ri0\\widctlpar\\tqc\\tx4680\\tqr\\tx9360\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \n\\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext24 \\slink25 \\styrsid5907427 footer;}{\\*\\cs25 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fs24 \\sbasedon10 \\slink24 \\slocked \\ssemihidden \nFooter Char;}{\\s26\\ql \\li0\\ri0\\widctlpar\\tqc\\tx4680\\tqr\\tx9360\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext26 \\slink27 \\styrsid5907427 header;}{\\*\\cs27 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fs24 \\sbasedon10 \\slink26 \\slocked \\ssemihidden Header Char;}{\n\\s28\\qc \\li0\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af1\\afs32\\alang1025 \\ltrch\\fcs0 \\caps\\f41\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext0 \\slink29 \\sqformat \\styrsid5907427 Title;}{\\*\\cs29 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\b\\f40\\fs32\\kerning28 \\sbasedon10 \\slink28 \\slocked \\spriority10 Title Char;}{\n\\s30\\ql \\li1440\\ri1440\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin1440\\lin1440\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext30 \\styrsid5907427 \nBlock Text;}{\\s31\\ql \\li0\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext31 \\slink32 \\styrsid5907427 \nBody Text;}{\\*\\cs32 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fs24 \\sbasedon10 \\slink31 \\slocked \\ssemihidden Body Text Char;}{\\s33\\ql \\fi720\\li0\\ri0\\sl480\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \n\\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext33 \\styrsid5907427 Body Text First Indent Double;}{\\s34\\qj \\li0\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \n\\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext34 \\ssemihidden \\styrsid5907427 Body Text Just;}{\n\\s35\\ql \\fi720\\li0\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext35 \\slink36 \\styrsid5907427 \nBody Text First Indent;}{\\*\\cs36 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fs24 \\sbasedon32 \\slink35 \\slocked \\ssemihidden Body Text First Indent Char;}{\\s37\\ql \\li720\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin720\\itap0 \n\\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext37 \\slink38 \\styrsid5907427 Body Text Indent;}{\\*\\cs38 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fs24 \n\\sbasedon10 \\slink37 \\slocked \\ssemihidden Body Text Indent Char;}{\\s39\\ql \\li720\\ri0\\sl480\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \n\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext39 \\styrsid5907427 Body Text Indent Double;}{\\*\\cs40 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\ul\\cf2 \\sbasedon10 \\styrsid10380790 Hyperlink;}{\\s41\\qj \\li0\\ri0\\sa240\\sl480\\slmult1\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext41 \\ssemihidden \\styrsid5907427 Body Text 2 Just;}{\n\\s42\\ql \\li2880\\ri0\\widctlpar\\phpg\\posxc\\posyb\\absh-1980\\absw7920\\dxfrtext180\\dfrmtxtx180\\dfrmtxty0\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin2880\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \\ltrch\\fcs0 \n\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext42 \\styrsid5907427 envelope address;}{\\s43\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs20\\alang1025 \\ltrch\\fcs0 \n\\fs20\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext43 \\styrsid5907427 envelope return;}{\\s44\\ql \\li720\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \n\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext44 \\ssemihidden \\styrsid5907427 Normal Indent;}{\\s45\\qc \\li0\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af1\\afs24\\alang1025 \n\\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext30 \\slink46 \\sqformat \\styrsid5907427 Subtitle;}{\\*\\cs46 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\f40\\fs24 \\sbasedon10 \\slink45 \\slocked \\spriority11 Subtitle Char;}{\n\\s47\\qj \\fi720\\li0\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext47 \\ssemihidden \\styrsid5907427 \nBody Text First Indent Just;}{\\s48\\qj \\fi720\\li0\\ri0\\sa240\\sl480\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext48 \\ssemihidden \\styrsid5907427 Body Text First Indent 2 Just;}{\\s49\\qj \\li720\\ri0\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \n\\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext49 \\ssemihidden \\styrsid5907427 Body Text Indent Just;}{\\s50\\qj \\li1440\\ri1440\\sa240\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin1440\\lin1440\\itap0 \\rtlch\\fcs1 \n\\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext50 \\ssemihidden \\styrsid5907427 Block Text Just;}{\\s51\\ql \\li0\\ri0\\sa240\\sl360\\slmult1\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs16\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext51 \\slink52 \\ssemihidden \\styrsid5907427 Body Text 3;}{\\*\\cs52 \n\\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fs16 \\sbasedon10 \\slink51 \\slocked \\ssemihidden Body Text 3 Char;}{\\s53\\ql \\li360\\ri0\\sa240\\sl360\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af0\\afs16\\alang1025 \n\\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext53 \\slink54 \\ssemihidden \\styrsid5907427 Body Text Indent 3;}{\\*\\cs54 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fs16 \\sbasedon10 \\slink53 \\slocked \\ssemihidden \nBody Text Indent 3 Char;}{\\s55\\ql \\li0\\ri0\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs16\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon24 \\snext55 \\styrsid5907427 DocID;}{\\s56\\ql \\li0\\ri0\\sl480\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext56 \\styrsid5907427 Body Text Double;}{\\*\\cs57 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\ul\\cf17 \\sbasedon10 \\styrsid625 FollowedHyperlink;}{\n\\s58\\ql \\li0\\ri0\\sb100\\sa100\\sbauto1\\saauto1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext58 \\styrsid625 \nNormal (Web);}{\\s59\\ql \\li0\\ri0\\widctlpar\\tx916\\tx1832\\tx2748\\tx3664\\tx4580\\tx5496\\tx6412\\tx7328\\tx8244\\tx9160\\tx10076\\tx10992\\tx11908\\tx12824\\tx13740\\tx14656\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af2\\afs20\\alang1025 \n\\ltrch\\fcs0 \\f2\\fs20\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext59 \\slink60 \\sunhideused \\styrsid3303100 HTML Preformatted;}{\\*\\cs60 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\f2\\fs20 \\sbasedon10 \\slink59 \\slocked \\styrsid3303100 \nHTML Preformatted Char;}{\\*\\cs61 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fs16 \\sbasedon10 \\ssemihidden \\sunhideused \\styrsid6835083 annotation reference;}{\\s62\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \n\\rtlch\\fcs1 \\af0\\afs20\\alang1025 \\ltrch\\fcs0 \\fs20\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext62 \\slink63 \\ssemihidden \\sunhideused \\styrsid6835083 annotation text;}{\\*\\cs63 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fs20 \n\\sbasedon10 \\slink62 \\slocked \\ssemihidden \\styrsid6835083 Comment Text Char;}{\\s64\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af0\\afs20\\alang1025 \\ltrch\\fcs0 \n\\b\\fs20\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon62 \\snext62 \\slink65 \\ssemihidden \\sunhideused \\styrsid6835083 annotation subject;}{\\*\\cs65 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\b\\fs20 \n\\sbasedon63 \\slink64 \\slocked \\ssemihidden \\styrsid6835083 Comment Subject Char;}{\\s66\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs16\\alang1025 \\ltrch\\fcs0 \n\\f39\\fs16\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext66 \\slink67 \\ssemihidden \\sunhideused \\styrsid6835083 Balloon Text;}{\\*\\cs67 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\f39\\fs16 \n\\sbasedon10 \\slink66 \\slocked \\ssemihidden \\styrsid6835083 Balloon Text Char;}{\\s68\\ql \\li720\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af37\\afs22\\alang1025 \\ltrch\\fcs0 \n\\f37\\fs22\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext68 \\sqformat \\spriority34 \\styrsid14296280 List Paragraph;}{\\*\\cs69 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\b \\sbasedon10 \\sqformat \\spriority22 \\styrsid8596531 Strong;}}\n{\\*\\listtable{\\list\\listtemplateid1222255236\\listsimple{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1800\n\\jclisttab\\tx1800\\lin1800 }{\\listname ;}\\listid-132}{\\list\\listtemplateid-132774062\\listsimple{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\af0 \\ltrch\\fcs0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listname ;}\\listid-131}{\\list\\listtemplateid72496394\\listsimple{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1080\\jclisttab\\tx1080\\lin1080 }{\\listname ;}\\listid-130}{\\list\\listtemplateid-597544638\\listsimple{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li720\\jclisttab\\tx720\\lin720 }{\\listname ;}\\listid-129}{\\list\\listtemplateid-1640086914\\listsimple{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li1800\\jclisttab\\tx1800\\lin1800 }{\\listname ;}\\listid-128}{\\list\\listtemplateid502950296\\listsimple{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listname ;}\\listid-127}{\\list\\listtemplateid-780873322\\listsimple{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li1080\\jclisttab\\tx1080\\lin1080 }{\\listname ;}\\listid-126}{\\list\\listtemplateid-1673631862\\listsimple\n{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li720\\jclisttab\\tx720\\lin720 }{\\listname ;}\\listid-125}{\\list\\listtemplateid1320462024\n\\listsimple{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li360\\jclisttab\\tx360\\lin360 }{\\listname ;}\\listid-120}\n{\\list\\listtemplateid1437343428\\listsimple{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li360\\jclisttab\\tx360\\lin360 }{\\listname \n;}\\listid-119}{\\list\\listtemplateid-18606430\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat0\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-770525180\\'01-;}{\\levelnumbers;}\n\\loch\\af37\\hich\\af37\\dbch\\af0\\fbias0 \\fi-360\\li720\\lin720 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \n\\fi-360\\li1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\lin2160 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \n\\fi-360\\li5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\lin6480 }{\\listname \n;}\\listid731200530}{\\list\\listtemplateid67698719{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li360\n\\jclisttab\\tx360\\lin360 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'04\\'00.\\'01.;}{\\levelnumbers\\'01\\'03;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-432\\li792\\jclisttab\\tx792\\lin792 }\n{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'06\\'00.\\'01.\\'02.;}{\\levelnumbers\\'01\\'03\\'05;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-504\\li1224\\jclisttab\\tx1440\\lin1224 }{\\listlevel\\levelnfc0\n\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'08\\'00.\\'01.\\'02.\\'03.;}{\\levelnumbers\\'01\\'03\\'05\\'07;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-648\\li1728\\jclisttab\\tx1800\\lin1728 }{\\listlevel\\levelnfc0\\levelnfcn0\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'0a\\'00.\\'01.\\'02.\\'03.\\'04.;}{\\levelnumbers\\'01\\'03\\'05\\'07\\'09;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-792\\li2232\\jclisttab\\tx2520\\lin2232 }{\\listlevel\\levelnfc0\\levelnfcn0\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'0c\\'00.\\'01.\\'02.\\'03.\\'04.\\'05.;}{\\levelnumbers\\'01\\'03\\'05\\'07\\'09\\'0b;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-936\\li2736\\jclisttab\\tx2880\\lin2736 }{\\listlevel\\levelnfc0\n\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'0e\\'00.\\'01.\\'02.\\'03.\\'04.\\'05.\\'06.;}{\\levelnumbers\\'01\\'03\\'05\\'07\\'09\\'0b\\'0d;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-1080\\li3240\\jclisttab\\tx3600\\lin3240 }\n{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'10\\'00.\\'01.\\'02.\\'03.\\'04.\\'05.\\'06.\\'07.;}{\\levelnumbers\\'01\\'03\\'05\\'07\\'09\\'0b\\'0d\\'0f;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-1224\\li3744\n\\jclisttab\\tx3960\\lin3744 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'12\\'00.\\'01.\\'02.\\'03.\\'04.\\'05.\\'06.\\'07.\\'08.;}{\\levelnumbers\\'01\\'03\\'05\\'07\\'09\\'0b\\'0d\\'0f\\'11;}\n\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-1440\\li4320\\jclisttab\\tx4680\\lin4320 }{\\listname ;}\\listid787241198}{\\list\\listtemplateid218949156{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fs20\\fbias0 \\fi-360\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fs20\\fbias0 \n\\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fs20\\fbias0 \\fi-360\\li2160\n\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fs20\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }\n{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fs20\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fs20\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fs20\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\n\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fs20\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fs20\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid805975556}{\\list\\listtemplateid1120973404{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \n\\ltrch\\fcs0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li3600\n\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }\n{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc0\n\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'02\\'07.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'02\\'08.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1288272874}{\\list\\listtemplateid-223731298\n{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0\n{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'02\\'07.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \n\\ltrch\\fcs0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'02\\'08.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li6480\n\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1516459123}{\\list\\listtemplateid67698719{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \n\\ltrch\\fcs0 \\fi-360\\li360\\jclisttab\\tx360\\lin360 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'04\\'00.\\'01.;}{\\levelnumbers\\'01\\'03;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-432\\li792\n\\jclisttab\\tx792\\lin792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'06\\'00.\\'01.\\'02.;}{\\levelnumbers\\'01\\'03\\'05;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-504\\li1224\n\\jclisttab\\tx1440\\lin1224 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'08\\'00.\\'01.\\'02.\\'03.;}{\\levelnumbers\\'01\\'03\\'05\\'07;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-648\\li1728\n\\jclisttab\\tx1800\\lin1728 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'0a\\'00.\\'01.\\'02.\\'03.\\'04.;}{\\levelnumbers\\'01\\'03\\'05\\'07\\'09;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-792\\li2232\n\\jclisttab\\tx2520\\lin2232 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'0c\\'00.\\'01.\\'02.\\'03.\\'04.\\'05.;}{\\levelnumbers\\'01\\'03\\'05\\'07\\'09\\'0b;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \n\\fi-936\\li2736\\jclisttab\\tx2880\\lin2736 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'0e\\'00.\\'01.\\'02.\\'03.\\'04.\\'05.\\'06.;}{\\levelnumbers\\'01\\'03\\'05\\'07\\'09\\'0b\\'0d;}\\rtlch\\fcs1 \n\\af0 \\ltrch\\fcs0 \\fi-1080\\li3240\\jclisttab\\tx3600\\lin3240 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'10\\'00.\\'01.\\'02.\\'03.\\'04.\\'05.\\'06.\\'07.;}{\\levelnumbers\n\\'01\\'03\\'05\\'07\\'09\\'0b\\'0d\\'0f;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-1224\\li3744\\jclisttab\\tx3960\\lin3744 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'12\\'00.\\'01.\\'02.\\'03.\\'04.\\'05.\\'06.\\'07.\\'08.;}{\\levelnumbers\\'01\\'03\\'05\\'07\\'09\\'0b\\'0d\\'0f\\'11;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-1440\\li4320\\jclisttab\\tx4680\\lin4320 }{\\listname ;}\\listid1964115752}}{\\*\\listoverridetable{\\listoverride\\listid-119\n\\listoverridecount0\\ls1}{\\listoverride\\listid-125\\listoverridecount0\\ls2}{\\listoverride\\listid-126\\listoverridecount0\\ls3}{\\listoverride\\listid-127\\listoverridecount0\\ls4}{\\listoverride\\listid-128\\listoverridecount0\\ls5}{\\listoverride\\listid-120\n\\listoverridecount0\\ls6}{\\listoverride\\listid-129\\listoverridecount0\\ls7}{\\listoverride\\listid-130\\listoverridecount0\\ls8}{\\listoverride\\listid-131\\listoverridecount0\\ls9}{\\listoverride\\listid-132\\listoverridecount0\\ls10}{\\listoverride\\listid1964115752\n\\listoverridecount0\\ls11}{\\listoverride\\listid787241198\\listoverridecount0\\ls12}{\\listoverride\\listid1516459123\\listoverridecount0\\ls13}{\\listoverride\\listid731200530\\listoverridecount9{\\lfolevel}{\\lfolevel}{\\lfolevel}{\\lfolevel}{\\lfolevel}{\\lfolevel}\n{\\lfolevel}{\\lfolevel}{\\lfolevel}\\ls14}{\\listoverride\\listid805975556\\listoverridecount0\\ls15}{\\listoverride\\listid1516459123\\listoverridecount9{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\n\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\n\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\\ls16}{\\listoverride\\listid1288272874\\listoverridecount0\\ls17}}{\\*\\pgptbl {\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp126\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp119\\itap2\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\n\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp44\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp16\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp92\\itap0\\li0\n\\ri0\\sb0\\sa0}{\\pgp\\ipgp97\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp16\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp19\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp20\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp12\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\n\\sa0}{\\pgp\\ipgp93\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp14\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp33\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp99\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp17\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp5\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\n\\ipgp16\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp16\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp16\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp7\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp50\n\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp103\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp106\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp16\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp92\\itap0\n\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp16\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp16\\itap0\\li0\\ri0\\sb0\n\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp89\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\n\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp79\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp56\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\n\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp84\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\n\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li75\\ri75\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp72\\itap0\\li0\\ri0\\sb0\\sa0}\n{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp81\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp86\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\n\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp57\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp67\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp34\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp22\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\n\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp113\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp37\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp16\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp21\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\n\\ri0\\sb0\\sa0}{\\pgp\\ipgp100\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp23\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp111\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\n\\sa0}{\\pgp\\ipgp32\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp16\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp24\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp96\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\n\\ipgp90\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp120\\itap1\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp3\\itap2\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp114\\itap1\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp121\\itap0\\li240\\ri240\\sb240\\sa240}{\\pgp\\ipgp117\\itap1\\li0\\ri0\\sb0\\sa0\\brdrl\n\\brdrs\\brdrw15\\brdrcf18 \\brdrb\\brdrs\\brdrw15\\brsp240\\brdrcf18 \\brdrr\\brdrs\\brdrw15\\brdrcf18 }{\\pgp\\ipgp115\\itap1\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp116\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp124\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\n\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp1\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp125\\itap0\\li0\\ri0\\sb0\\sa0}}{\\*\\rsidtbl \\rsid625\\rsid92643\\rsid271060\\rsid359418\\rsid478141\\rsid479462\\rsid485849\\rsid551880\\rsid660966\\rsid728528\\rsid750851\\rsid1184781\\rsid1266513\\rsid1379226\n\\rsid1398111\\rsid1520748\\rsid1531715\\rsid1638516\\rsid1653568\\rsid1662815\\rsid1664550\\rsid1666145\\rsid2371564\\rsid2433377\\rsid2456927\\rsid2505415\\rsid2819784\\rsid2844233\\rsid2888499\\rsid3032599\\rsid3046076\\rsid3158621\\rsid3175207\\rsid3241529\\rsid3303100\n\\rsid3351106\\rsid3371282\\rsid3608685\\rsid3802929\\rsid3830162\\rsid3940894\\rsid4079870\\rsid4092963\\rsid4405566\\rsid4469351\\rsid4474833\\rsid4615180\\rsid4916037\\rsid5115630\\rsid5139630\\rsid5322289\\rsid5402340\\rsid5517725\\rsid5573332\\rsid5580517\\rsid5907427\n\\rsid5980510\\rsid5984120\\rsid6291804\\rsid6454902\\rsid6508458\\rsid6647752\\rsid6757028\\rsid6770258\\rsid6835083\\rsid7229466\\rsid7544593\\rsid8000641\\rsid8006241\\rsid8016844\\rsid8092433\\rsid8270966\\rsid8596531\\rsid8790811\\rsid9071126\\rsid9179129\\rsid9318037\n\\rsid9325566\\rsid9327743\\rsid9386383\\rsid9572824\\rsid9573533\\rsid9593607\\rsid9794307\\rsid9991221\\rsid10100171\\rsid10115033\\rsid10167195\\rsid10320299\\rsid10380790\\rsid10485835\\rsid10497013\\rsid10551406\\rsid10641048\\rsid10696632\\rsid10763220\\rsid10829475\n\\rsid10834080\\rsid10947469\\rsid10975141\\rsid11231939\\rsid11742563\\rsid11752039\\rsid12017776\\rsid12085428\\rsid12133735\\rsid12197258\\rsid12258123\\rsid12403217\\rsid12415054\\rsid12470762\\rsid12594827\\rsid12611040\\rsid12715598\\rsid12940798\\rsid12983087\n\\rsid12990546\\rsid12991943\\rsid13065859\\rsid13175656\\rsid13374733\\rsid13444701\\rsid13786280\\rsid13986295\\rsid14120308\\rsid14184460\\rsid14296280\\rsid14488221\\rsid14498861\\rsid14644998\\rsid14711882\\rsid14747814\\rsid14907622\\rsid15205023\\rsid15220065\n\\rsid15554827\\rsid15863116\\rsid16127456\\rsid16398523\\rsid16450223\\rsid16463073\\rsid16733591}{\\mmathPr\\mmathFont34\\mbrkBin0\\mbrkBinSub0\\msmallFrac0\\mdispDef1\\mlMargin0\\mrMargin0\\mdefJc1\\mwrapIndent1440\\mintLim0\\mnaryLim1}{\\info\n{\\creatim\\yr2014\\mo8\\dy1\\hr12\\min32}{\\revtim\\yr2014\\mo8\\dy1\\hr12\\min32}{\\version1}{\\edmins0}{\\nofpages6}{\\nofwords2927}{\\nofchars16690}{\\nofcharsws19578}{\\vern57437}}{\\*\\xmlnstbl {\\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\n\\paperw12240\\paperh15840\\margl1440\\margr1440\\margt1440\\margb1440\\gutter0\\ltrsect \n\\widowctrl\\ftnbj\\aenddoc\\trackmoves0\\trackformatting1\\donotembedsysfont1\\relyonvml0\\donotembedlingdata1\\grfdocevents0\\validatexml1\\showplaceholdtext0\\ignoremixedcontent0\\saveinvalidxml0\\showxmlerrors1\\noxlattoyen\n\\expshrtn\\noultrlspc\\dntblnsbdb\\nospaceforul\\formshade\\horzdoc\\dgmargin\\dghspace120\\dgvspace180\\dghorigin1440\\dgvorigin1440\\dghshow2\\dgvshow2\n\\jexpand\\viewkind1\\viewscale100\\pgbrdrhead\\pgbrdrfoot\\splytwnine\\ftnlytwnine\\htmautsp\\nolnhtadjtbl\\useltbaln\\alntblind\\lytcalctblwd\\lyttblrtgr\\lnbrkrule\\nobrkwrptbl\\snaptogridincell\\rempersonalinfo\\allowfieldendsel\n\\wrppunct\\asianbrkrule\\rsidroot10380790\\newtblstyruls\\nogrowautofit\\remdttm \\fet0{\\*\\wgrffmtfilter 0117}\\ilfomacatclnup0{\\*\\ftnsep \\ltrpar \\pard\\plain \\ltrpar\n\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid1531715 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid15220065 \n\\chftnsep \n\\par }}{\\*\\ftnsepc \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid1531715 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid15220065 \\chftnsepc \n\\par }}{\\*\\aftnsep \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid1531715 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid15220065 \\chftnsep \n\\par }}{\\*\\aftnsepc \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid1531715 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid15220065 \\chftnsepc \n\\par }}\\ltrpar \\sectd \\ltrsect\\psz1\\linex0\\endnhere\\sectlinegrid360\\sectdefaultcl\\sectrsid1662815\\sftnbj {\\*\\pnseclvl1\\pnucrm\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl2\\pnucltr\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl3\n\\pndec\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl4\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxta )}}{\\*\\pnseclvl5\\pndec\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl6\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}\n{\\*\\pnseclvl7\\pnlcrm\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl8\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl9\\pnlcrm\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}\\pard\\plain \\ltrpar\n\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid5984120 \\rtlch\\fcs1 \\af0\\afs24\\alang1025 \\ltrch\\fcs0 \\fs24\\lang1033\\langfe1033\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \n\\b\\f2\\fs20\\insrsid14120308\\charrsid5984120 THIRD-PARTY SOFTWARE NOTICES AND INFORMATION}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10380790\\charrsid5984120 \\line \\line }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \n\\f2\\fs20\\insrsid10551406\\charrsid5984120 Note:}{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid10551406\\charrsid5984120   }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10551406\\charrsid5984120 \nWhile Microsoft is not the author of the files below, Microsoft is offering you a license subject to the terms of the Microsoft Software License Terms for }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid3175207\\charrsid3175207 \nMicrosoft Windows Azure Mobile Services SDK }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10551406\\charrsid5984120 (the \\'93Microsoft Program\\'94). Microsoft reserves all other r\nights. The notices below are provided for informational purposes only and are not the license terms under which Microsoft distributes }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid12017776\\charrsid5984120 these }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \n\\f2\\fs20\\insrsid10551406\\charrsid5984120 file}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid12017776\\charrsid5984120 s}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10551406\\charrsid5984120 .\n\\par }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10380790\\charrsid5984120 \n\\par }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid3303100\\charrsid5984120 The Microsoft }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10834080\\charrsid5984120 Program }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid625\\charrsid5984120 \nincludes }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid12017776\\charrsid5984120 the following third-party }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid3303100\\charrsid5984120 software}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \n\\f2\\fs20\\insrsid12017776\\charrsid5984120 :}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid625\\charrsid5984120 \n\\par \n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid14488221 {\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531 Google Gson 2.2.2 (}{\\field\\fldedit{\\*\\fldinst {\\rtlch\\fcs1 \\af2\\afs20 \n\\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531  HYPERLINK \"http://code.google.com/p/google-gson\" }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid3351106\\charrsid8596531 {\\*\\datafield \n00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6200000068007400740070003a002f002f0063006f00640065002e0067006f006f0067006c0065002e0063006f006d002f0070002f0067006f006f0067006c0065002d00670073006f006e000000795881f43b1d7f48\naf2c825dc485276300000000a5ab000000}}}{\\fldrslt {\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 http://code.google.com/p/google-gson}}}\\sectd \\ltrsect\\psz1\\linex0\\endnhere\\sectlinegrid360\\sectdefaultcl\\sectrsid1662815\\sftnbj {\n\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 )\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid5984120 {\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid10497013 Guava 17.0 (http://code.google.com/p/guava-libraries/)}{\n\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10551406 \n\\par }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid10497013 \n\\par }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid5139630\\charrsid5984120 As the recipient of the above third-party software, Microsoft sets forth a copy of the notices and other information below.\n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid14488221 {\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid14488221\\charrsid5984120 \n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid5984120 {\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid14498861\\charrsid5984120 \n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid14488221 {\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531 GOOGLE GSON VERSION 2.2.2 NOTICES AND INFORMATION BEGIN HERE\\line }{\n\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid5984120 =========================================}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8790811 \n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid8596531 {\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 Copyright 2008-2011 Google Inc.}{\\rtlch\\fcs1 \\af2\\afs20 \n\\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531 \n\\par \n\\par }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 Apache License\\line \\line Version 2.0, January 2004\\line \\line }{\\field\\fldedit{\\*\\fldinst {\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 \n HYPERLINK \"http://www.apache.org/licenses/\" }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid3351106\\charrsid8596531 {\\*\\datafield \n00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e006100700061006300680065002e006f00720067002f006c006900630065006e007300650073002f000000795881f43b1d7f48af2c825dc48527630000\n0000a5ab000000}}}{\\fldrslt {\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 http://www.apache.org/licenses/}}}\\sectd \\ltrsect\\psz1\\linex0\\endnhere\\sectlinegrid360\\sectdefaultcl\\sectrsid1662815\\sftnbj {\\rtlch\\fcs1 \\af2\\afs20 \n\\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531  \n\\par TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkstart definitions}1. Definitions}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkend definitions}.\n\\par \"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\\par \"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\\par \"Legal Entity\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \"control\" means (i) the power, dir\nect or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\n\\par \"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\\par \"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\\par \"Object\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\n\\par \"Work\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\n\\par \"Derivative Works\" shall mean any work, whether in Source or Obj\nect form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall \nnot include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\n\\par \"Contribution\" shall mean any work of authorship, including the original version of the Work and any modifications or\n additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes o\nf\n this definition, \"submitted\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracki\nng systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \"Not a Contribution.\"\n\n\\par \"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkstart copyright}2. Grant of Copyright License}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkend copyright}\n. Subject to the terms and cond\nitions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and dist\nribute the Work and such Derivative Works in Source or Object form.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkstart patent}3. Grant of Patent License}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkend patent}\n. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-\nfree, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are neces\ns\narily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsui\nt\n) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is file\nd.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkstart redistribution}4. Redistribution}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkend redistribution}\n. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:\n\\par You must give any other recipients of the Work or Derivative Works a copy of this License; and\n\\par You must cause any modified files to carry prominent notices stating that You changed the files; and\n\\par You must retain, in the Source form of any Derivative Works th\nat You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\n\\par If the Work includes a \"NOTICE\" text file as part of its dis\ntribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the fol\nl\nowing places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-p\na\nrty notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE\n \ntext from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use\n, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkstart contributions}5. Submission of Contributions}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkend contributions}\n. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. \nNotwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkstart trademarks}6. Trademarks}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkend trademarks}\n. This License does not grant permission to u\nse the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkstart no-warranty}{\\*\\bkmkend no-warranty}7. Disclaimer of Warranty}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 \n. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, with\nout limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associat\ned with Your exercise of permissions under this License.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkstart no-liability}{\\*\\bkmkend no-liability}8. Limitation of Liability}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 \n. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as de\nliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of \nt\nhe use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibilit\ny of such damages.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkstart additional}9. Accepting Warranty or Additional Liability}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 {\\*\\bkmkend additional}\n. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability ob\nligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold\n each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.\n\\par END OF TERMS AND CONDITIONS}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531 \\line \\line }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid5984120 END OF }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531 \nGOOGLE GSON VERSION 2.2.2 }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid5984120 NOTICES AND INFORMATION\\line ========================================= \\line }{\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid8596531 \n\\par }\\pard \\ltrpar\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid10497013 {\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013 GUAVA}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013  VERSION }\n{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013 17.0}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013  NOTICES AND INFORMATION BEGIN HERE\\line }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid5984120 \n=========================================}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013 \n\\par }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid10497013 Copyright (C) 2007 The Guava Authors}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid10497013 \n\\par }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013 \n\\par }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 Apache License\\line \\line Version 2.0, January 2004\\line \\line }{\\field\\fldedit{\\*\\fldinst {\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 \n HYPERLINK \"http://www.apache.org/licenses/\" }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 {\\*\\datafield \n00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e006100700061006300680065002e006f00720067002f006c006900630065006e007300650073002f000000795881f43b1d7f48af2c825dc48527630000\n0000a5ab000000}}}{\\fldrslt {\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 http://www.apache.org/licenses/}}}\\sectd \\ltrsect\\psz1\\linex0\\endnhere\\sectlinegrid360\\sectdefaultcl\\sectrsid1662815\\sftnbj {\\rtlch\\fcs1 \\af2\\afs20 \n\\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531  \n\\par TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid10497013\\charrsid8596531 1. Definitions}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 .\n\\par \"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\\par \"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\\par \"Legal Entity\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \"control\" means (i) the power, dir\nect or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\n\\par \"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\\par \"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\\par \"Object\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\n\\par \"Work\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\n\\par \"Derivative Works\" shall mean any work, whether in Source or Obj\nect form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall \nnot include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\n\\par \"Contribution\" shall mean any work of authorship, including the original version of the Work and any modifications or\n additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes o\nf\n this definition, \"submitted\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracki\nng systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \"Not a Contribution.\"\n\n\\par \"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid10497013\\charrsid8596531 2. Grant of Copyright License}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 . Subject to the terms and cond\nitions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and dist\nribute the Work and such Derivative Works in Source or Object form.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid10497013\\charrsid8596531 3. Grant of Patent License}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 \n. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-\nfree, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are neces\ns\narily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsui\nt\n) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is file\nd.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid10497013\\charrsid8596531 4. Redistribution}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 \n. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:\n\\par You must give any other recipients of the Work or Derivative Works a copy of this License; and\n\\par You must cause any modified files to carry prominent notices stating that You changed the files; and\n\\par You must retain, in the Source form of any Derivative Works th\nat You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\n\\par If the Work includes a \"NOTICE\" text file as part of its dis\ntribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the fol\nl\nowing places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-p\na\nrty notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE\n \ntext from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use\n, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid10497013\\charrsid8596531 5. Submission of Contributions}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 \n. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. \nNotwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid10497013\\charrsid8596531 6. Trademarks}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 . This License does not grant permission to u\nse the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid10497013\\charrsid8596531 7. Disclaimer of Warranty}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 \n. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, with\nout limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associat\ned with Your exercise of permissions under this License.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid10497013\\charrsid8596531 8. Limitation of Liability}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 \n. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as de\nliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of \nt\nhe use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibilit\ny of such damages.\n\\par }{\\rtlch\\fcs1 \\ab\\af2\\afs20 \\ltrch\\fcs0 \\b\\f2\\fs20\\insrsid10497013\\charrsid8596531 9. Accepting Warranty or Additional Liability}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid8596531 \n. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability ob\nligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold\n each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.\n\\par END OF TERMS AND CONDITIONS}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013 \\line \\line }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013\\charrsid5984120 END OF }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013 GUAVA}{\n\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013  VERSION }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013 17.0}{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid10497013  }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \n\\f2\\fs20\\insrsid10497013\\charrsid5984120 NOTICES AND INFORMATION\\line ========================================= \\line }{\\rtlch\\fcs1 \\af2\\afs20 \\ltrch\\fcs0 \\f2\\fs20\\insrsid8596531\\charrsid8596531 \n\\par }{\\*\\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a\n9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad\n5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6\nb01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0\n0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6\na7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f\nc7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512\n0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462\na1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865\n6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b\n4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b\n4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f\n7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87\n615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad\n79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b\n5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab\n999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9\n699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586\n8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6\n0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f\n9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be\n15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979\n3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d\n32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a\nf074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86\ne877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90\nfb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2\nae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae\na4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1\n399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5\n4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84\n0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b\nc663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7\n689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20\n5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0\naadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d\n316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840\n545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a\nc2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100\n0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7\n8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89\nd93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500\n1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f\nbfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6\na7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a\n0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021\n0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008\n00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000}\n{\\*\\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d\n617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169\n6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363\n656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}\n{\\*\\latentstyles\\lsdstimax371\\lsdlockeddef0\\lsdsemihiddendef0\\lsdunhideuseddef0\\lsdqformatdef0\\lsdprioritydef99{\\lsdlockedexcept \\lsdqformat1 \\lsdpriority0 \\lsdlocked0 Normal;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 1;\n\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 2;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 3;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 4;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 5;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 6;\n\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 7;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 8;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 9;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 1;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 4;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 6;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 7;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 8;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 9;\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority35 \\lsdlocked0 caption;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 5;\\lsdqformat1 \\lsdpriority10 \\lsdlocked0 Title;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority1 \\lsdlocked0 Default Paragraph Font;\\lsdqformat1 \\lsdpriority11 \\lsdlocked0 Subtitle;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Salutation;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Date;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text First Indent;\\lsdqformat1 \\lsdpriority22 \\lsdlocked0 Strong;\\lsdqformat1 \\lsdpriority20 \\lsdlocked0 Emphasis;\\lsdpriority59 \\lsdlocked0 Table Grid;\\lsdsemihidden1 \\lsdlocked0 Placeholder Text;\n\\lsdqformat1 \\lsdpriority1 \\lsdlocked0 No Spacing;\\lsdpriority60 \\lsdlocked0 Light Shading;\\lsdpriority61 \\lsdlocked0 Light List;\\lsdpriority62 \\lsdlocked0 Light Grid;\\lsdpriority63 \\lsdlocked0 Medium Shading 1;\\lsdpriority64 \\lsdlocked0 Medium Shading 2;\n\\lsdpriority65 \\lsdlocked0 Medium List 1;\\lsdpriority66 \\lsdlocked0 Medium List 2;\\lsdpriority67 \\lsdlocked0 Medium Grid 1;\\lsdpriority68 \\lsdlocked0 Medium Grid 2;\\lsdpriority69 \\lsdlocked0 Medium Grid 3;\\lsdpriority70 \\lsdlocked0 Dark List;\n\\lsdpriority71 \\lsdlocked0 Colorful Shading;\\lsdpriority72 \\lsdlocked0 Colorful List;\\lsdpriority73 \\lsdlocked0 Colorful Grid;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 1;\\lsdpriority61 \\lsdlocked0 Light List Accent 1;\n\\lsdpriority62 \\lsdlocked0 Light Grid Accent 1;\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 1;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 1;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 1;\\lsdsemihidden1 \\lsdlocked0 Revision;\n\\lsdqformat1 \\lsdpriority34 \\lsdlocked0 List Paragraph;\\lsdqformat1 \\lsdpriority29 \\lsdlocked0 Quote;\\lsdqformat1 \\lsdpriority30 \\lsdlocked0 Intense Quote;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 1;\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 1;\n\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 1;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 1;\\lsdpriority70 \\lsdlocked0 Dark List Accent 1;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 1;\\lsdpriority72 \\lsdlocked0 Colorful List Accent 1;\n\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 1;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 2;\\lsdpriority61 \\lsdlocked0 Light List Accent 2;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 2;\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 2;\n\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 2;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 2;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 2;\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 2;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 2;\n\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 2;\\lsdpriority70 \\lsdlocked0 Dark List Accent 2;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 2;\\lsdpriority72 \\lsdlocked0 Colorful List Accent 2;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 2;\n\\lsdpriority60 \\lsdlocked0 Light Shading Accent 3;\\lsdpriority61 \\lsdlocked0 Light List Accent 3;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 3;\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 3;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 3;\n\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 3;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 3;\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 3;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 3;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 3;\n\\lsdpriority70 \\lsdlocked0 Dark List Accent 3;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 3;\\lsdpriority72 \\lsdlocked0 Colorful List Accent 3;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 3;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 4;\n\\lsdpriority61 \\lsdlocked0 Light List Accent 4;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 4;\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 4;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 4;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 4;\n\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 4;\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 4;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 4;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 4;\\lsdpriority70 \\lsdlocked0 Dark List Accent 4;\n\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 4;\\lsdpriority72 \\lsdlocked0 Colorful List Accent 4;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 4;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 5;\\lsdpriority61 \\lsdlocked0 Light List Accent 5;\n\\lsdpriority62 \\lsdlocked0 Light Grid Accent 5;\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 5;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 5;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 5;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 5;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 5;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 5;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 5;\\lsdpriority70 \\lsdlocked0 Dark List Accent 5;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 5;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 5;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 5;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 6;\\lsdpriority61 \\lsdlocked0 Light List Accent 6;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 6;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 6;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 6;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 6;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 6;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 6;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 6;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 6;\\lsdpriority70 \\lsdlocked0 Dark List Accent 6;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 6;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 6;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 6;\\lsdqformat1 \\lsdpriority19 \\lsdlocked0 Subtle Emphasis;\\lsdqformat1 \\lsdpriority21 \\lsdlocked0 Intense Emphasis;\n\\lsdqformat1 \\lsdpriority31 \\lsdlocked0 Subtle Reference;\\lsdqformat1 \\lsdpriority32 \\lsdlocked0 Intense Reference;\\lsdqformat1 \\lsdpriority33 \\lsdlocked0 Book Title;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority37 \\lsdlocked0 Bibliography;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority39 \\lsdlocked0 TOC Heading;\\lsdpriority41 \\lsdlocked0 Plain Table 1;\\lsdpriority42 \\lsdlocked0 Plain Table 2;\\lsdpriority43 \\lsdlocked0 Plain Table 3;\\lsdpriority44 \\lsdlocked0 Plain Table 4;\n\\lsdpriority45 \\lsdlocked0 Plain Table 5;\\lsdpriority40 \\lsdlocked0 Grid Table Light;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light;\\lsdpriority47 \\lsdlocked0 Grid Table 2;\\lsdpriority48 \\lsdlocked0 Grid Table 3;\\lsdpriority49 \\lsdlocked0 Grid Table 4;\n\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 1;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 1;\n\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 1;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 1;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 1;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 1;\n\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 1;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 2;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 2;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 2;\n\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 2;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 2;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 2;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 2;\n\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 3;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 3;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 3;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 3;\n\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 3;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 3;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 3;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 4;\n\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 4;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 4;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 4;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 4;\n\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 4;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 4;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 5;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 5;\n\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 5;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 5;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 5;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 5;\n\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 5;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 6;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 6;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 6;\n\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 6;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 6;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 6;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 6;\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light;\\lsdpriority47 \\lsdlocked0 List Table 2;\\lsdpriority48 \\lsdlocked0 List Table 3;\\lsdpriority49 \\lsdlocked0 List Table 4;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark;\n\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 1;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 1;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 1;\n\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 1;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 1;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 1;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 1;\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 2;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 2;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 2;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 2;\n\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 2;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 2;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 2;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 3;\n\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 3;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 3;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 3;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 3;\n\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 3;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 3;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 4;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 4;\n\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 4;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 4;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 4;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 4;\n\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 4;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 5;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 5;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 5;\n\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 5;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 5;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 5;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 5;\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 6;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 6;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 6;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 6;\n\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 6;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 6;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 6;}}{\\*\\datastore 010500000200000018000000\n4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000\nd0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nfffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000000f0\n2155bfadcf01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000\n00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000105000000000000}}"
  },
  {
    "path": "sdk/android/test/sdk.testapp/.gitignore",
    "content": "#built application files\n*.apk\n*.ap_\n\n# files for the dex VM\n*.dex\n\n# Java class files\n*.class\n\n# generated files\nbin/\ngen/\n\n# Local configuration file (sdk path, etc)\nlocal.properties\n\n# Windows thumbnail db\nThumbs.db\n\n# OSX files\n.DS_Store\n\n# Eclipse project files\n.classpath\n.project\n\n# Android Studio\n.idea\n#.idea/workspace.xml - remove # and delete .idea if it better suit your needs.\n.gradle\nbuild/"
  },
  {
    "path": "sdk/android/test/sdk.testapp/build.gradle",
    "content": "apply plugin: 'com.android.library'\n\nandroid {\n    compileSdkVersion 21\n    buildToolsVersion '21.1.2'\n\n    defaultConfig {\n        minSdkVersion 8\n        targetSdkVersion 19\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_7\n        targetCompatibility JavaVersion.VERSION_1_7\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    compile project(':sdk')\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Applications/Android Studio.app/sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.microsoft.windowsazure.mobileservices.sdk.testapp\">\n\n    <application android:allowBackup=\"true\"\n        android:label=\"@string/app_name\"\n        android:icon=\"@drawable/ic_launcher\"\n>\n\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/framework/filters/EchoFilter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\npublic class EchoFilter implements ServiceFilter {\n\n    @Override\n    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setContent(request.getRawContent());\n        response.setStatus(new StatusLineMock(200));\n\n        ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n        return nextServiceFilterCallback.onNext(requestMock);\n\n        //return nextServiceFilterCallback.onNext(request);\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/framework/filters/HttpMetaEchoFilter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters;\n\nimport android.net.Uri;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\nimport org.apache.http.Header;\n\npublic class HttpMetaEchoFilter implements ServiceFilter {\n\n    @Override\n    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n        JsonObject jResponse = new JsonObject();\n\n        jResponse.addProperty(\"method\", request.getMethod());\n\n        Header[] headers = request.getHeaders();\n        if (headers != null && headers.length > 0) {\n            JsonObject jHeaders = new JsonObject();\n\n            for (Header header : headers) {\n                jHeaders.addProperty(header.getName(), header.getValue());\n            }\n\n            jResponse.add(\"headers\", jHeaders);\n        }\n\n        Uri uri = Uri.parse(request.getUrl());\n        String query = uri.getQuery();\n\n        if (query != null && query.trim() != \"\") {\n            JsonObject jParameters = new JsonObject();\n\n            for (String parameter : query.split(\"&\")) {\n                jParameters.addProperty(parameter.split(\"=\")[0], parameter.split(\"=\")[1]);\n            }\n            jResponse.add(\"parameters\", jParameters);\n        }\n\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setContent(jResponse.toString());\n        response.setStatus(new StatusLineMock(200));\n\n        ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n        return nextServiceFilterCallback.onNext(requestMock);\n\n        //return nextServiceFilterCallback.onNext(request);\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/framework/filters/NullResponseContentFilter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\npublic class NullResponseContentFilter implements ServiceFilter {\n\n    @Override\n    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n\n        response.setContent((String) null);\n        response.setStatus(new StatusLineMock(200));\n\n        ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n        return nextServiceFilterCallback.onNext(requestMock);\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/framework/filters/NullResponseFilter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\npublic class NullResponseFilter implements ServiceFilter {\n\n    @Override\n    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n        ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(null);\n        return nextServiceFilterCallback.onNext(requestMock);\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/framework/filters/ServiceFilterRequestMock.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters;\n\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\nimport org.apache.http.Header;\nimport org.apache.http.message.BasicHeader;\n\nimport java.io.InvalidClassException;\nimport java.net.URISyntaxException;\n\npublic class ServiceFilterRequestMock implements ServiceFilterRequest {\n    private ServiceFilterResponse responseToUse;\n    private Boolean hasErrorOnExecute;\n    private Exception exceptionToThrow;\n\n    public ServiceFilterRequestMock(ServiceFilterResponse response) {\n        this.responseToUse = response;\n        this.hasErrorOnExecute = false;\n    }\n\n    @Override\n    public Header[] getHeaders() {\n        return null;\n    }\n\n    @Override\n    public void addHeader(String name, String val) {\n        Header[] currentHeaders = this.responseToUse.getHeaders();\n        int oldSize = currentHeaders == null ? 0 : currentHeaders.length;\n        Header[] newHeaders = new Header[oldSize + 1];\n        if (oldSize > 0) {\n            System.arraycopy(currentHeaders, 0, newHeaders, 0, oldSize);\n        }\n\n        newHeaders[oldSize] = new BasicHeader(name, val);\n\n        ((ServiceFilterResponseMock) this.responseToUse).setHeaders(newHeaders);\n    }\n\n    @Override\n    public void removeHeader(String name) {\n    }\n\n    @Override\n    public void setContent(String content) throws InvalidClassException {\n    }\n\n    @Override\n    public String getContent() {\n        return null;\n    }\n\n    @Override\n    public void setContent(byte[] content) throws Exception {\n    }\n\n    @Override\n    public String getUrl() {\n        return null;\n    }\n\n    @Override\n    public void setUrl(String url) throws URISyntaxException {\n    }\n\n    @Override\n    public String getMethod() {\n        return null;\n    }\n\n    @Override\n    public ServiceFilterResponse execute() throws Exception {\n        if (this.hasErrorOnExecute) {\n\n            if (exceptionToThrow == null) {\n                throw new MobileServiceException(\"Error while processing request\");\n            } else {\n                throw exceptionToThrow;\n            }\n        }\n\n        return this.responseToUse;\n    }\n\n    public Boolean getHasErrorOnExecute() {\n        return hasErrorOnExecute;\n    }\n\n    public void setHasErrorOnExecute(Boolean hasErrorOnExecute) {\n        this.hasErrorOnExecute = hasErrorOnExecute;\n    }\n\n    public Exception getExceptionToThrow() {\n        return exceptionToThrow;\n    }\n\n    public void setExceptionToThrow(Exception exceptionToThrow) {\n        this.exceptionToThrow = exceptionToThrow;\n    }\n\n    @Override\n    public byte[] getRawContent() {\n        return null;\n    }\n\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/framework/filters/ServiceFilterResponseMock.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters;\n\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\nimport org.apache.http.Header;\nimport org.apache.http.StatusLine;\n\nimport java.io.UnsupportedEncodingException;\n\npublic class ServiceFilterResponseMock implements ServiceFilterResponse {\n    private Header[] headers;\n    private byte[] content;\n    private StatusLine status;\n\n    public ServiceFilterResponseMock() {\n        try {\n            content = \"{}\".getBytes(MobileServiceClient.UTF8_ENCODING);\n        } catch (UnsupportedEncodingException e) {\n            //this should never happen\n        }\n    }\n\n    @Override\n    public Header[] getHeaders() {\n        return this.headers;\n    }\n\n    public void setHeaders(Header[] headers) {\n        this.headers = headers;\n    }\n\n    @Override\n    public String getContent() {\n        if (this.content != null) {\n            String content = null;\n            try {\n                content = new String(this.content, MobileServiceClient.UTF8_ENCODING);\n            } catch (UnsupportedEncodingException e) {\n            }\n            return content;\n        } else {\n            return null;\n        }\n    }\n\n    public void setContent(byte[] content) {\n        this.content = content;\n    }\n\n    @Override\n    public StatusLine getStatus() {\n        return this.status;\n    }\n\n    public void setStatus(StatusLine status) {\n        this.status = status;\n    }\n\n    public void setContent(String content) {\n        if (content != null) {\n            this.content = content.getBytes();\n        } else {\n            this.content = null;\n        }\n    }\n\n    @Override\n    public byte[] getRawContent() {\n        return content;\n    }\n\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/framework/filters/StatusLineMock.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters;\n\nimport org.apache.http.ProtocolVersion;\nimport org.apache.http.StatusLine;\n\npublic class StatusLineMock implements StatusLine {\n    private int statusCode;\n\n    public StatusLineMock(int statusCode) {\n        this.statusCode = statusCode;\n    }\n\n    @Override\n    public ProtocolVersion getProtocolVersion() {\n        return null;\n    }\n\n    @Override\n    public String getReasonPhrase() {\n        return null;\n    }\n\n    @Override\n    public int getStatusCode() {\n        return this.statusCode;\n    }\n\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/framework/mocks/MobileServiceLocalStoreMock.java",
    "content": "package com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.mocks;\n\nimport com.google.common.base.Function;\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStore;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.LinkedHashMap;\nimport java.util.LinkedList;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Queue;\n\npublic class MobileServiceLocalStoreMock implements MobileServiceLocalStore {\n\n    // / <summary>\n    // / Table that stores sync errors\n    // / </summary>\n    public static final String SyncErrors = \"__errors\";\n    // / <summary>\n    // / Table that stores operation queue items\n    // / </summary>\n    private static final String OperationQueue = \"__operations\";\n    public Map<String, LinkedHashMap<String, JsonObject>> Tables = new HashMap<String, LinkedHashMap<String, JsonObject>>();\n    public List<Query> ReadQueries = new ArrayList<Query>();\n    ;\n    public List<Query> DeleteQueries = new ArrayList<Query>();\n    public Queue<String> ReadResponses = new LinkedList<String>();\n    public Function<Query, JsonElement> readAsyncFunc;\n\n    @Override\n    public void initialize() throws MobileServiceLocalStoreException {\n\n    }\n\n    @Override\n    public void defineTable(String tableName, Map<String, ColumnDataType> columns) throws MobileServiceLocalStoreException {\n\n    }\n\n    @Override\n    public JsonElement read(Query query) throws MobileServiceLocalStoreException {\n\n        if (query.getTableName() == OperationQueue || query.getTableName() == SyncErrors) {\n            JsonArray array = new JsonArray();\n\n            for (JsonObject jsonObject : GetTable(query.getTableName()).values()) {\n                array.add(jsonObject);\n            }\n\n            // we don't query the queue specially, we just need all records\n            return array;\n        }\n\n        this.ReadQueries.add(query);\n\n        JsonElement result;\n\n        if (readAsyncFunc != null) {\n            result = readAsyncFunc.apply(query);\n        } else {\n\n            String value = ReadResponses.peek();\n\n            if (value == null) {\n                return null;\n            }\n\n            result = new JsonParser().parse(value);\n        }\n\n        return result;\n    }\n\n    @Override\n    public JsonObject lookup(String tableName, String itemId) throws MobileServiceLocalStoreException {\n\n        Map<String, JsonObject> table = GetTable(tableName);\n\n        JsonObject item = null;\n\n        if (table.containsKey(itemId)) {\n            item = table.get(itemId);\n        }\n\n        return item;\n\n    }\n\n    @Override\n    public void upsert(String tableName, JsonObject item, boolean fromServer) throws MobileServiceLocalStoreException {\n\n        Map<String, JsonObject> table = GetTable(tableName);\n\n        table.put(item.get(\"id\").getAsString(), item);\n\n        return;\n    }\n\n    @Override\n    public void upsert(String tableName, JsonObject[] items, boolean fromServer) throws MobileServiceLocalStoreException {\n\n        Map<String, JsonObject> table = GetTable(tableName);\n\n        for (JsonObject item : items) {\n            table.put(item.get(\"id\").getAsString(), item);\n        }\n\n        return;\n    }\n\n    @Override\n    public void delete(String tableName, String itemId) throws MobileServiceLocalStoreException {\n\n        Map<String, JsonObject> table = GetTable(tableName);\n\n        table.remove(itemId);\n\n        return;\n    }\n\n    @Override\n    public void delete(String tableName, String[] itemsIds) throws MobileServiceLocalStoreException {\n\n        Map<String, JsonObject> table = GetTable(tableName);\n\n        for (String itemId : itemsIds) {\n            table.remove(itemId);\n        }\n\n        return;\n    }\n\n    @Override\n    public void delete(Query query) throws MobileServiceLocalStoreException {\n        this.DeleteQueries.add(query);\n\n        this.Tables.get(query.getTableName()).clear();\n\n        return;\n    }\n\n    private Map<String, JsonObject> GetTable(String tableName) {\n        if (!this.Tables.containsKey(tableName)) {\n            this.Tables.put(tableName, new LinkedHashMap<String, JsonObject>());\n        }\n\n        return this.Tables.get(tableName);\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/framework/mocks/MobileServiceSyncHandlerMock.java",
    "content": "package com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.mocks;\n\nimport com.google.common.base.Function;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.CustomFunctionTwoParameters;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation;\nimport com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult;\nimport com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandlerException;\nimport com.microsoft.windowsazure.mobileservices.table.sync.synchandler.SimpleSyncHandler;\n\npublic class MobileServiceSyncHandlerMock extends SimpleSyncHandler {\n\n    public CustomFunctionTwoParameters<RemoteTableOperationProcessor, TableOperation, JsonObject> tableOperationAction;\n    public Function<MobileServicePushCompletionResult, Void> pushCompleteAction;\n\n    public MobileServicePushCompletionResult PushCompletionResult;\n\n    @Override\n    public JsonObject executeTableOperation(RemoteTableOperationProcessor processor, TableOperation operation) throws MobileServiceSyncHandlerException {\n        // TODO Auto-generated method stub\n\n        if (tableOperationAction != null) {\n            try {\n                return tableOperationAction.apply(processor, operation);\n            } catch (Exception e) {\n                return null;\n            }\n        } else {\n            return super.executeTableOperation(processor, operation);\n        }\n\n    }\n\n    @Override\n    public void onPushComplete(MobileServicePushCompletionResult pushCompletionResult) throws MobileServiceSyncHandlerException {\n\n        this.PushCompletionResult = pushCompletionResult;\n\n        if (this.pushCompleteAction != null) {\n            pushCompleteAction.apply(pushCompletionResult);\n        } else {\n            super.onPushComplete(pushCompletionResult);\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/CustomApiClientTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.test.InstrumentationTestCase;\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback;\nimport com.microsoft.windowsazure.mobileservices.ApiOperationCallback;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.EchoFilter;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.NullResponseContentFilter;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.NullResponseFilter;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.HttpMetaEchoFilter;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterRequestMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.StatusLineMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.PersonTestObject;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.ResultsContainer;\n\nimport org.apache.http.client.methods.HttpGet;\nimport org.apache.http.client.methods.HttpHead;\nimport org.apache.http.client.methods.HttpPost;\n\nimport java.net.MalformedURLException;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.UUID;\nimport java.util.concurrent.CountDownLatch;\nimport java.util.concurrent.ExecutionException;\n\npublic class CustomApiClientTests extends InstrumentationTestCase {\n    String appUrl = \"\";\n    String appKey = \"\";\n\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com/\";\n        appKey = \"qwerty\";\n        super.setUp();\n    }\n\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    public void testResponseWithNon2xxStatusShouldThrowException() throws Throwable {\n\n        final ResultsContainer container = new ResultsContainer();\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n            client = client.withFilter(new ServiceFilter() {\n\n                @Override\n                public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                    ServiceFilterResponseMock mockResponse = new ServiceFilterResponseMock();\n                    mockResponse.setStatus(new StatusLineMock(418)); // I'm a\n                    // teapot\n                    // status\n                    // code\n                    ServiceFilterRequestMock mockRequest = new ServiceFilterRequestMock(mockResponse);\n\n                    return nextServiceFilterCallback.onNext(mockRequest);\n                }\n            });\n\n            List<Pair<String, String>> mockHeaders = new ArrayList<Pair<String, String>>();\n            List<Pair<String, String>> mockParameters = new ArrayList<Pair<String, String>>();\n\n            client.invokeApi(\"myApi\", new byte[]{1, 2, 3, 4}, HttpPost.METHOD_NAME, mockHeaders, mockParameters).get();\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException((Exception) exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (!(exception instanceof MobileServiceException)) {\n            fail(\"Expected Exception MobileServiceException\");\n        }\n    }\n\n    public void testInvokeWithNullApiShouldThrowException() throws Throwable {\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n            client.invokeApi(null, new Object(), null).get();\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (!(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testInvokeWithNullMethodShouldThrowException() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n            client.invokeApi(\"myApi\", new Object(), null, null, null).get();\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (!(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testInvokeWithNotSupportedMethodShouldThrowException() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n            client.invokeApi(\"myApi\", new Object(), HttpHead.METHOD_NAME, null, null).get();\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (!(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testInvokeGenericWithNullClassShouldThrowException() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n            client.invokeApi(\"myApi\", new Object(), HttpPost.METHOD_NAME, null, null).get();\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (!(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testInvokeTypedSingleObject() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final PersonTestObject p = new PersonTestObject(\"john\", \"doe\", 30);\n\n        MobileServiceClient client = null;\n        try {\n\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n            client = client.withFilter(new EchoFilter());\n\n            PersonTestObject result = client.invokeApi(\"myApi\", p, HttpPost.METHOD_NAME, null, PersonTestObject.class).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected one person result\"));\n            } else {\n                container.setPerson(result);\n            }\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(p.getFirstName(), container.getPerson().getFirstName());\n            assertEquals(p.getLastName(), container.getPerson().getLastName());\n            assertEquals(p.getAge(), container.getPerson().getAge());\n        }\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testInvokeTypedSingleObjectCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final PersonTestObject p = new PersonTestObject(\"john\", \"doe\", 30);\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new EchoFilter());\n\n        client.invokeApi(\"myApi\", p, HttpPost.METHOD_NAME, null, PersonTestObject.class, new ApiOperationCallback<PersonTestObject>() {\n\n            @Override\n            public void onCompleted(PersonTestObject result, Exception exception, ServiceFilterResponse response) {\n                if (exception != null) {\n                    container.setException(exception);\n                } else if (result == null) {\n                    container.setException(new Exception(\"Expected one person result\"));\n                } else {\n                    container.setPerson(result);\n                }\n\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(p.getFirstName(), container.getPerson().getFirstName());\n            assertEquals(p.getLastName(), container.getPerson().getLastName());\n            assertEquals(p.getAge(), container.getPerson().getAge());\n        }\n    }\n\n    public void testInvokeTypedJsonObjectAsInput() throws Throwable {\n        final JsonObject input = new JsonObject();\n        input.addProperty(\"firstName\", \"john\");\n        input.addProperty(\"lastName\", \"doe\");\n        input.addProperty(\"age\", 30);\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new EchoFilter());\n\n        try {\n            PersonTestObject result = client.invokeApi(\"myApi\", input, HttpPost.METHOD_NAME, null, PersonTestObject.class).get();\n            if (result == null) {\n                fail(\"Expected one person result\");\n            } else {\n                assertEquals(input.get(\"firstName\").getAsString(), result.getFirstName());\n                assertEquals(input.get(\"lastName\").getAsString(), result.getLastName());\n                assertEquals(input.get(\"age\").getAsInt(), result.getAge());\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                fail(exception.getCause().getMessage());\n            } else {\n                fail(exception.getMessage());\n            }\n        }\n    }\n\n    public void testInvokeTypedSingleString() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String s = \"Hello world\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n            client = client.withFilter(new EchoFilter());\n            String result = client.invokeApi(\"myApi\", s, HttpPost.METHOD_NAME, null, String.class).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected one string result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(s, container.getCustomResult());\n        }\n    }\n\n    public void testInvokeTypedSingleInteger() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final Integer i = 42;\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n            client = client.withFilter(new EchoFilter());\n\n            Integer result = client.invokeApi(\"myApi\", i, HttpPost.METHOD_NAME, null, Integer.class).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected one integer result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(i, container.getCustomResult());\n        }\n    }\n\n    public void testInvokeTypedSingleFloat() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final Float f = 3.14f;\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n            client = client.withFilter(new EchoFilter());\n\n            Float result = client.invokeApi(\"myApi\", f, HttpPost.METHOD_NAME, null, Float.class).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected one float result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            container.setException(exception);\n\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(f, container.getCustomResult());\n        }\n    }\n\n    public void testInvokeTypedSingleBoolean() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final Boolean b = true;\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n            client = client.withFilter(new EchoFilter());\n\n            Boolean result = client.invokeApi(\"myApi\", b, HttpPost.METHOD_NAME, null, Boolean.class).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected one boolean result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(b, container.getCustomResult());\n        }\n    }\n\n    public void testInvokeTypedMultipleObject() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final PersonTestObject p1 = new PersonTestObject(\"john\", \"doe\", 30);\n        final PersonTestObject p2 = new PersonTestObject(\"jane\", \"does\", 31);\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n            client = client.withFilter(new EchoFilter());\n\n            List<PersonTestObject> people = new ArrayList<PersonTestObject>();\n            people.add(p1);\n            people.add(p2);\n\n            PersonTestObject[] entities = client.invokeApi(\"myApi\", people, HttpPost.METHOD_NAME, null, PersonTestObject[].class).get();\n\n            if (entities == null || entities.length != 2) {\n                container.setException(new Exception(\"Expected two person result\"));\n            } else {\n                container.setPeopleResult(entities);\n            }\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(p1.getFirstName(), container.getPeopleResult().get(0).getFirstName());\n            assertEquals(p1.getLastName(), container.getPeopleResult().get(0).getLastName());\n            assertEquals(p1.getAge(), container.getPeopleResult().get(0).getAge());\n\n            assertEquals(p2.getFirstName(), container.getPeopleResult().get(1).getFirstName());\n            assertEquals(p2.getLastName(), container.getPeopleResult().get(1).getLastName());\n            assertEquals(p2.getAge(), container.getPeopleResult().get(1).getAge());\n        }\n    }\n\n    public void testInvokeJsonEcho() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final JsonObject json = new JsonParser().parse(\"{\\\"message\\\": \\\"hello world\\\"}\").getAsJsonObject();\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n            client = client.withFilter(new EchoFilter());\n\n            JsonElement result = client.invokeApi(\"myApi\", json, HttpPost.METHOD_NAME, null).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(1, container.getJsonResult().getAsJsonObject().entrySet().size());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"message\"));\n            assertEquals(json.get(\"message\"), container.getJsonResult().getAsJsonObject().get(\"message\"));\n        }\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testInvokeJsonEchoCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final JsonObject json = new JsonParser().parse(\"{\\\"message\\\": \\\"hello world\\\"}\").getAsJsonObject();\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new EchoFilter());\n\n        client.invokeApi(\"myApi\", json, HttpPost.METHOD_NAME, null, new ApiJsonOperationCallback() {\n\n            @Override\n            public void onCompleted(JsonElement result, Exception exception, ServiceFilterResponse response) {\n                if (exception != null) {\n                    container.setException(exception);\n                } else if (result == null) {\n                    container.setException(new Exception(\"Expected result\"));\n                } else {\n                    container.setJsonResult(result);\n                }\n\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(1, container.getJsonResult().getAsJsonObject().entrySet().size());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"message\"));\n            assertEquals(json.get(\"message\"), container.getJsonResult().getAsJsonObject().get(\"message\"));\n        }\n    }\n\n    public void testInvokeRandomByteEcho() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final byte[] content = UUID.randomUUID().toString().getBytes(MobileServiceClient.UTF8_ENCODING);\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n            client = client.withFilter(new EchoFilter());\n\n            List<Pair<String, String>> mockHeaders = new ArrayList<Pair<String, String>>();\n            List<Pair<String, String>> mockParameters = new ArrayList<Pair<String, String>>();\n\n            ServiceFilterResponse response = client.invokeApi(\"myApi\", content, HttpPost.METHOD_NAME, mockHeaders, mockParameters).get();\n\n            if (response == null || response.getRawContent() == null) {\n                container.setException(new Exception(\"Expected response\"));\n            } else {\n                container.setRawResponseContent(response.getRawContent());\n            }\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(content, container.getRawResponseContent());\n        }\n    }\n\n    public void testInvokeBytesShouldNotModifyLists() {\n        final byte[] content = new byte[]{1, 2, 3, 4};\n        try {\n            MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n            client = client.withFilter(new EchoFilter());\n\n            List<Pair<String, String>> expectedHeaders = new ArrayList<Pair<String, String>>();\n            expectedHeaders.add(new Pair<String, String>(\"header1\", \"value1\"));\n            expectedHeaders.add(new Pair<String, String>(\"header2\", \"value2\"));\n            List<Pair<String, String>> expectedQueryParameters = new ArrayList<Pair<String, String>>();\n            expectedQueryParameters.add(new Pair<String, String>(\"query1\", \"value1\"));\n            expectedQueryParameters.add(new Pair<String, String>(\"query2\", \"value2\"));\n\n            List<Pair<String, String>> headers = new ArrayList<Pair<String, String>>(expectedHeaders);\n            List<Pair<String, String>> queryParameters = new ArrayList<Pair<String, String>>(expectedQueryParameters);\n            client.invokeApi(\"myApi\", content, \"POST\", headers, queryParameters).get();\n\n            assertEquals(expectedHeaders.size(), headers.size());\n            for (int i = 0; i < expectedHeaders.size(); i++) {\n                assertEquals(expectedHeaders.get(i).first, headers.get(i).first);\n                assertEquals(expectedHeaders.get(i).second, headers.get(i).second);\n            }\n\n            assertEquals(expectedQueryParameters.size(), queryParameters.size());\n            for (int i = 0; i < expectedQueryParameters.size(); i++) {\n                assertEquals(expectedQueryParameters.get(i).first, queryParameters.get(i).first);\n                assertEquals(expectedQueryParameters.get(i).second, queryParameters.get(i).second);\n            }\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInvokeNullResponseObject() {\n        final JsonObject content = new JsonObject();\n\n        try {\n            MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n            client = client.withFilter(new NullResponseFilter());\n\n            JsonElement response = client.invokeApi(\"myApi\", content, \"POST\", null).get();\n\n        } catch (Exception exception) {\n            if (!(exception.getCause() instanceof MobileServiceException)) {\n                fail(exception.getMessage());\n            }\n\n            return;\n        }\n\n        fail(\"Exception expected\");\n\n    }\n\n    public void testInvokeNullResponseContentObject() {\n        final JsonObject content = new JsonObject();\n\n        try {\n            MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n            client = client.withFilter(new NullResponseContentFilter());\n\n            JsonElement response = client.invokeApi(\"myApi\", content, \"POST\", null).get();\n\n            if (response != null) {\n                fail(\"Expected Null Response\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n\n            return;\n        }\n\n    }\n\n    public void testInvokeMethodEcho() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n            client = client.withFilter(new HttpMetaEchoFilter());\n\n            List<Pair<String, String>> mockHeaders = new ArrayList<Pair<String, String>>();\n            List<Pair<String, String>> mockParameters = new ArrayList<Pair<String, String>>();\n\n            ServiceFilterResponse response = client.invokeApi(\"myApi\", null, HttpGet.METHOD_NAME, mockHeaders, mockParameters).get();\n\n            if (response == null || response.getContent() == null) {\n                container.setException(new Exception(\"Expected response\"));\n            } else {\n                container.setResponseValue(response.getContent());\n            }\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            JsonObject jResponse = (new JsonParser()).parse(container.getResponseValue()).getAsJsonObject();\n            assertEquals(HttpGet.METHOD_NAME, jResponse.get(\"method\").getAsString());\n        }\n    }\n\n    public void testInvokeHeadersEcho() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n        final List<Pair<String, String>> headers = new ArrayList<Pair<String, String>>();\n        final List<String> headerNames = new ArrayList<String>();\n\n        for (int i = 0; i < 10; i++) {\n            String name;\n\n            do {\n                name = UUID.randomUUID().toString();\n            } while (headerNames.contains(name));\n\n            headers.add(new Pair<String, String>(name, UUID.randomUUID().toString()));\n            headerNames.add(name);\n        }\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n            client = client.withFilter(new HttpMetaEchoFilter());\n\n            List<Pair<String, String>> fakeParameters = new ArrayList<Pair<String, String>>();\n\n            ServiceFilterResponse response = client.invokeApi(\"myApi\", null, HttpPost.METHOD_NAME, headers, fakeParameters).get();\n\n            if (response == null || response.getContent() == null) {\n                container.setException(new Exception(\"Expected response\"));\n            } else {\n                container.setResponseValue(response.getContent());\n            }\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            JsonObject jResponse = (new JsonParser()).parse(container.getResponseValue()).getAsJsonObject();\n\n            if (jResponse.has(\"headers\") && jResponse.get(\"headers\").isJsonObject()) {\n                JsonObject jHeaders = jResponse.getAsJsonObject(\"headers\");\n\n                for (Pair<String, String> header : headers) {\n                    if (jHeaders.has(header.first)) {\n                        assertEquals(header.second, jHeaders.get(header.first).getAsString());\n                    } else {\n                        fail(\"Expected header.\");\n                    }\n                }\n\n            } else {\n                fail(\"Expected headers.\");\n            }\n\n        }\n    }\n\n    public void testInvokeParametersEcho() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n        final List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        final List<String> parameterNames = new ArrayList<String>();\n\n        for (int i = 0; i < 10; i++) {\n            String name;\n\n            do {\n                name = UUID.randomUUID().toString();\n            } while (parameterNames.contains(name));\n\n            parameters.add(new Pair<String, String>(name, UUID.randomUUID().toString()));\n            parameterNames.add(name);\n        }\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n            client = client.withFilter(new HttpMetaEchoFilter());\n\n            ServiceFilterResponse response = client.invokeApi(\"myApi\", null, HttpPost.METHOD_NAME, null, parameters).get();\n\n            if (response == null || response.getContent() == null) {\n                container.setException(new Exception(\"Expected response\"));\n            } else {\n                container.setResponseValue(response.getContent());\n            }\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            JsonObject jResponse = (new JsonParser()).parse(container.getResponseValue()).getAsJsonObject();\n\n            if (jResponse.has(\"parameters\") && jResponse.get(\"parameters\").isJsonObject()) {\n                JsonObject jParameters = jResponse.getAsJsonObject(\"parameters\");\n\n                for (Pair<String, String> parameter : parameters) {\n                    if (jParameters.has(parameter.first)) {\n                        assertEquals(parameter.second, jParameters.get(parameter.first).getAsString());\n                    } else {\n                        fail(\"Expected parameter.\");\n                    }\n                }\n\n            } else {\n                fail(\"Expected parameters.\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/EnhancedPushTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.preference.PreferenceManager;\nimport android.test.InstrumentationTestCase;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush;\nimport com.microsoft.windowsazure.mobileservices.notifications.Registration;\nimport com.microsoft.windowsazure.mobileservices.notifications.RegistrationCallback;\nimport com.microsoft.windowsazure.mobileservices.notifications.RegistrationGoneException;\nimport com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration;\nimport com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistrationCallback;\nimport com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterRequestMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.StatusLineMock;\n\nimport junit.framework.Assert;\n\nimport org.apache.http.Header;\nimport org.apache.http.HeaderElement;\nimport org.apache.http.ParseException;\n\nimport java.util.List;\nimport java.util.UUID;\nimport java.util.concurrent.CountDownLatch;\nimport java.util.concurrent.ExecutionException;\n\npublic class EnhancedPushTests extends InstrumentationTestCase {\n\n    /**\n     * Name for default registration\n     */\n    static final String DEFAULT_REGISTRATION_NAME = \"$Default\";\n    /**\n     * Prefix for Storage keys\n     */\n    private static final String STORAGE_PREFIX = \"__NH_\";\n    /**\n     * Prefix for registration information keys in local storage\n     */\n    private static final String REGISTRATION_NAME_STORAGE_KEY = \"REG_NAME_\";\n    /**\n     * New registration location header name\n     */\n    private static final String NEW_REGISTRATION_LOCATION_HEADER = \"Location\";\n\n    String appUrl = \"\";\n    String appKey = \"\";\n\n    private static void forceRefreshSync(MobileServicePush push, String handle) throws InterruptedException, ExecutionException {\n        push.unregisterAll(handle).get();\n    }\n\n    private static boolean matchTags(final String[] tags, List<String> regTags) {\n        if (tags == null || regTags == null) {\n            return (tags == null && regTags == null) || (tags == null && regTags.size() == 0) || (regTags == null && tags.length == 0);\n        } else if (regTags.size() != tags.length) {\n            return false;\n        } else {\n            for (String tag : tags) {\n                if (!regTags.contains(tag)) {\n                    return false;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    private static ServiceFilter getUpsertTestFilter(final String registrationId) {\n        return new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLineMock(400));\n\n                final String url = request.getUrl();\n                String method = request.getMethod();\n\n                if (method == \"POST\" && url.contains(\"registrationids/\")) {\n                    response = new ServiceFilterResponseMock();\n                    response.setStatus(new StatusLineMock(201));\n                    response.setHeaders(new Header[]{new Header() {\n\n                        @Override\n                        public String getValue() {\n                            return url + registrationId;\n                        }\n\n                        @Override\n                        public String getName() {\n                            return NEW_REGISTRATION_LOCATION_HEADER;\n                        }\n\n                        @Override\n                        public HeaderElement[] getElements() throws ParseException {\n                            return null;\n                        }\n                    }});\n                } else if (method == \"PUT\" && url.contains(\"registrations/\" + registrationId)) {\n                    response = new ServiceFilterResponseMock();\n                    response.setStatus(new StatusLineMock(204));\n                } else if (method == \"PUT\" && url.contains(\"registrations/\")) {\n                    response = new ServiceFilterResponseMock();\n                    response.setStatus(new StatusLineMock(204));\n                } else if (method == \"DELETE\" && url.contains(\"registrations/\")) {\n                    response = new ServiceFilterResponseMock();\n                    response.setStatus(new StatusLineMock(204));\n                } else if (method == \"GET\" && url.contains(\"registrations/\")) {\n                    response = new ServiceFilterResponseMock();\n                    response.setStatus(new StatusLineMock(200));\n                    response.setContent(\"[ ]\");\n                }\n\n                // create a mock request to replace the existing one\n                ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n                return nextServiceFilterCallback.onNext(requestMock);\n            }\n        };\n    }\n\n    private static ServiceFilter getUpsertFailTestFilter(final String registrationId) {\n        return new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLineMock(400));\n\n                final String url = request.getUrl();\n                String method = request.getMethod();\n\n                if (method == \"POST\" && url.contains(\"registrationids/\")) {\n                    response = new ServiceFilterResponseMock();\n                    response.setStatus(new StatusLineMock(201));\n                    response.setHeaders(new Header[]{new Header() {\n\n                        @Override\n                        public String getValue() {\n                            return url + registrationId;\n                        }\n\n                        @Override\n                        public String getName() {\n                            return NEW_REGISTRATION_LOCATION_HEADER;\n                        }\n\n                        @Override\n                        public HeaderElement[] getElements() throws ParseException {\n                            return null;\n                        }\n                    }});\n                } else if (method == \"PUT\" && url.contains(\"registrations/\")) {\n                    response = new ServiceFilterResponseMock();\n                    response.setStatus(new StatusLineMock(410));\n                } else if (method == \"DELETE\" && url.contains(\"registrations/\")) {\n                    response = new ServiceFilterResponseMock();\n                    response.setStatus(new StatusLineMock(204));\n                } else if (method == \"GET\" && url.contains(\"registrations/\")) {\n                    response = new ServiceFilterResponseMock();\n                    response.setStatus(new StatusLineMock(200));\n                    response.setContent(\"[ ]\");\n                }\n\n                // create a mock request to replace the existing one\n                ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n                return nextServiceFilterCallback.onNext(requestMock);\n            }\n        };\n    }\n\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com/\";\n        appKey = \"qwerty\";\n        super.setUp();\n    }\n\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    public void testRegisterUnregisterNative() throws Throwable {\n        Context context = getInstrumentation().getTargetContext();\n        final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n        final Container container = new Container();\n        final String handle = \"handle\";\n\n        String registrationId = \"registrationId\";\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n        client = client.withFilter(getUpsertTestFilter(registrationId));\n\n        final MobileServicePush push = client.getPush();\n\n        forceRefreshSync(push, handle);\n\n        try {\n\n            Registration registration = push.register(handle, new String[]{\"tag1\"}).get();\n\n            container.registrationId = registration.getRegistrationId();\n\n            container.storedRegistrationId = sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + DEFAULT_REGISTRATION_NAME, null);\n\n            push.unregister().get();\n\n            container.unregister = sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + DEFAULT_REGISTRATION_NAME, null);\n\n        } catch (Exception exception) {\n\n            if (exception instanceof ExecutionException) {\n                container.exception = (Exception) exception.getCause();\n            } else {\n                container.exception = exception;\n            }\n\n            fail(container.exception.getMessage());\n        }\n\n        Assert.assertEquals(registrationId, container.storedRegistrationId);\n        Assert.assertEquals(registrationId, container.registrationId);\n        Assert.assertNull(container.unregister);\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testRegisterUnregisterNativeCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        Context context = getInstrumentation().getTargetContext();\n        final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n        final Container container = new Container();\n        final String handle = \"handle\";\n\n        String registrationId = \"registrationId\";\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n        client = client.withFilter(getUpsertTestFilter(registrationId));\n\n        final MobileServicePush push = client.getPush();\n\n        forceRefreshSync(push, handle);\n\n        push.register(handle, new String[]{\"tag1\"}, new RegistrationCallback() {\n\n            @Override\n            public void onRegister(Registration registration, Exception exception) {\n                if (exception != null) {\n                    container.exception = exception;\n\n                    latch.countDown();\n                } else {\n                    container.registrationId = registration.getRegistrationId();\n\n                    container.storedRegistrationId = sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + DEFAULT_REGISTRATION_NAME,\n                            null);\n\n                    push.unregister(new UnregisterCallback() {\n\n                        @Override\n                        public void onUnregister(Exception exception) {\n                            if (exception != null) {\n                                container.exception = exception;\n                            } else {\n                                container.unregister = sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + DEFAULT_REGISTRATION_NAME,\n                                        null);\n                            }\n\n                            latch.countDown();\n                        }\n                    });\n                }\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        Exception exception = container.exception;\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Assert.assertEquals(registrationId, container.storedRegistrationId);\n            Assert.assertEquals(registrationId, container.registrationId);\n            Assert.assertNull(container.unregister);\n        }\n    }\n\n    public void testRegisterUnregisterTemplate() throws Throwable {\n\n        Context context = getInstrumentation().getTargetContext();\n        final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n        final Container container = new Container();\n        final String handle = \"handle\";\n        final String templateName = \"templateName\";\n\n        String registrationId = \"registrationId\";\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n        client = client.withFilter(getUpsertTestFilter(registrationId));\n\n        final MobileServicePush push = client.getPush();\n\n        forceRefreshSync(push, handle);\n\n        try {\n            TemplateRegistration registration = push.registerTemplate(handle, templateName, \"{ }\", new String[]{\"tag1\"}).get();\n\n            container.registrationId = registration.getRegistrationId();\n\n            container.storedRegistrationId = sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + templateName, null);\n\n            push.unregisterTemplate(templateName).get();\n\n            container.unregister = sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + templateName, null);\n\n            Assert.assertEquals(registrationId, container.storedRegistrationId);\n            Assert.assertEquals(registrationId, container.registrationId);\n            Assert.assertNull(container.unregister);\n\n        } catch (Exception exception) {\n\n            if (exception instanceof ExecutionException) {\n                container.exception = (Exception) exception.getCause();\n            } else {\n                container.exception = exception;\n            }\n\n            fail(container.exception.getMessage());\n        }\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testRegisterUnregisterTemplateCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        Context context = getInstrumentation().getTargetContext();\n        final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n        final Container container = new Container();\n        final String handle = \"handle\";\n        final String templateName = \"templateName\";\n\n        String registrationId = \"registrationId\";\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n        client = client.withFilter(getUpsertTestFilter(registrationId));\n\n        final MobileServicePush push = client.getPush();\n\n        forceRefreshSync(push, handle);\n\n        push.registerTemplate(handle, templateName, \"{ }\", new String[]{\"tag1\"}, new TemplateRegistrationCallback() {\n\n            @Override\n            public void onRegister(TemplateRegistration registration, Exception exception) {\n                if (exception != null) {\n                    container.exception = exception;\n\n                    latch.countDown();\n                } else {\n                    container.registrationId = registration.getRegistrationId();\n\n                    container.storedRegistrationId = sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + templateName, null);\n\n                    push.unregisterTemplate(templateName, new UnregisterCallback() {\n\n                        @Override\n                        public void onUnregister(Exception exception) {\n                            if (exception != null) {\n                                container.exception = exception;\n                            } else {\n                                container.unregister = sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + templateName, null);\n                            }\n\n                            latch.countDown();\n                        }\n                    });\n                }\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        Exception exception = container.exception;\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Assert.assertEquals(registrationId, container.storedRegistrationId);\n            Assert.assertEquals(registrationId, container.registrationId);\n            Assert.assertNull(container.unregister);\n        }\n    }\n\n    public void testRegisterFailNative() throws Throwable {\n\n        final Container container = new Container();\n        Context context = getInstrumentation().getTargetContext();\n        final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n        final String handle = \"handle\";\n\n        String registrationId = \"registrationId\";\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n        client = client.withFilter(getUpsertFailTestFilter(registrationId));\n\n        final MobileServicePush push = client.getPush();\n\n        forceRefreshSync(push, handle);\n\n        try {\n            push.register(handle, new String[]{\"tag1\"}).get();\n            fail(\"Expected Exception RegistrationGoneException\");\n        } catch (Exception exception) {\n\n            if (exception instanceof ExecutionException) {\n                container.exception = (Exception) exception.getCause();\n            } else {\n                container.exception = exception;\n            }\n\n            if (!(container.exception instanceof RegistrationGoneException)) {\n                fail(\"Expected Exception RegistrationGoneException\");\n            }\n\n            Assert.assertNull(sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + DEFAULT_REGISTRATION_NAME, null));\n        }\n    }\n\n    public void testRegisterFailTemplate() throws Throwable {\n\n        final Container container = new Container();\n        Context context = getInstrumentation().getTargetContext();\n        final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n        final String handle = \"handle\";\n        final String templateName = \"templateName\";\n\n        String registrationId = \"registrationId\";\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n        client = client.withFilter(getUpsertFailTestFilter(registrationId));\n\n        final MobileServicePush push = client.getPush();\n\n        forceRefreshSync(push, handle);\n\n        try {\n            push.registerTemplate(handle, templateName, \"{ }\", new String[]{\"tag1\"}).get();\n            fail(\"Expected Exception RegistrationGoneException\");\n        } catch (Exception exception) {\n\n            if (exception instanceof ExecutionException) {\n                container.exception = (Exception) exception.getCause();\n            } else {\n                container.exception = exception;\n            }\n\n            if (!(container.exception instanceof RegistrationGoneException)) {\n                fail(\"Expected Exception RegistrationGoneException\");\n            }\n\n            Assert.assertNull(sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + DEFAULT_REGISTRATION_NAME, null));\n        }\n    }\n\n    public void testReRegisterNative() throws Throwable {\n        try {\n\n            Context context = getInstrumentation().getTargetContext();\n            final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n            final Container container = new Container();\n            final String handle = \"handle\";\n\n            String registrationId1 = \"registrationId1\";\n            String registrationId2 = \"registrationId2\";\n\n            String[] tags1 = new String[]{\"tag1\"};\n            final String[] tags2 = new String[]{\"tag2\"};\n\n            MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n            MobileServiceClient registrationclient = client.withFilter(getUpsertTestFilter(registrationId1));\n            MobileServiceClient reRegistrationclient = client.withFilter(getUpsertTestFilter(registrationId2));\n\n            final MobileServicePush registrationPush = registrationclient.getPush();\n            final MobileServicePush reRegistrationPush = reRegistrationclient.getPush();\n\n            forceRefreshSync(registrationPush, handle);\n            forceRefreshSync(reRegistrationPush, handle);\n\n            try {\n                registrationPush.register(handle, tags1).get();\n\n                Registration registration2 = reRegistrationPush.register(handle, tags2).get();\n\n                container.storedRegistrationId = sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + DEFAULT_REGISTRATION_NAME, null);\n                container.tags = registration2.getTags();\n\n            } catch (Exception exception) {\n                container.exception = exception;\n            }\n\n            // Asserts\n            Exception exception = container.exception;\n\n            if (exception != null) {\n                fail(exception.getMessage());\n            } else {\n                Assert.assertEquals(registrationId2, container.storedRegistrationId);\n                Assert.assertTrue(matchTags(tags2, container.tags));\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    public void testReRegisterTemplate() throws Throwable {\n        try {\n\n            Context context = getInstrumentation().getTargetContext();\n            final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n            final Container container = new Container();\n            final String handle = \"handle\";\n            final String templateName = \"templateName\";\n\n            String registrationId1 = \"registrationId1\";\n            String registrationId2 = \"registrationId2\";\n\n            String[] tags1 = new String[]{\"tag1\"};\n            final String[] tags2 = new String[]{\"tag2\"};\n\n            String templateBody1 = \"\\\"data\\\"={\\\"text\\\"=\\\"$message1\\\"}\";\n            final String templateBody2 = \"\\\"data\\\"={\\\"text\\\"=\\\"$message2\\\"}\";\n\n            MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n            MobileServiceClient registrationclient = client.withFilter(getUpsertTestFilter(registrationId1));\n            MobileServiceClient reRegistrationclient = client.withFilter(getUpsertTestFilter(registrationId2));\n\n            final MobileServicePush registrationPush = registrationclient.getPush();\n            final MobileServicePush reRegistrationPush = reRegistrationclient.getPush();\n\n            forceRefreshSync(registrationPush, handle);\n            forceRefreshSync(reRegistrationPush, handle);\n\n            try {\n                registrationPush.registerTemplate(handle, templateName, templateBody1, tags1).get();\n\n                TemplateRegistration registration2 = reRegistrationPush.registerTemplate(handle, templateName, templateBody2, tags2).get();\n\n                container.storedRegistrationId = sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + templateName, null);\n                container.tags = registration2.getTags();\n                container.templateBody = registration2.getTemplateBody();\n            } catch (Exception exception) {\n                container.exception = exception;\n            }\n\n            // Asserts\n            Exception exception = container.exception;\n\n            if (exception != null) {\n                fail(exception.getMessage());\n            } else {\n                Assert.assertEquals(registrationId2, container.storedRegistrationId);\n                Assert.assertTrue(matchTags(tags2, container.tags));\n                Assert.assertEquals(templateBody2, container.templateBody);\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    public void testReRegisterFailNative() throws Throwable {\n        try {\n\n            Context context = getInstrumentation().getTargetContext();\n            final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n            final Container container = new Container();\n            final String handle = \"handle\";\n\n            String registrationId1 = \"registrationId1\";\n            String registrationId2 = \"registrationId2\";\n\n            MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n            MobileServiceClient registrationclient = client.withFilter(getUpsertTestFilter(registrationId1));\n            MobileServiceClient reRegistrationclient = client.withFilter(getUpsertFailTestFilter(registrationId2));\n\n            final MobileServicePush registrationPush = registrationclient.getPush();\n            final MobileServicePush reRegistrationPush = reRegistrationclient.getPush();\n\n            forceRefreshSync(registrationPush, handle);\n            forceRefreshSync(reRegistrationPush, handle);\n\n            try {\n                registrationPush.register(handle, new String[]{\"tag1\"}).get();\n            } catch (Exception exception) {\n                fail(exception.getMessage());\n            }\n\n            try {\n                reRegistrationPush.register(handle, new String[]{\"tag1\"}).get();\n\n            } catch (Exception exception) {\n                if (exception instanceof ExecutionException) {\n                    container.exception = (Exception) exception.getCause();\n                } else {\n                    container.exception = exception;\n                }\n\n                container.storedRegistrationId = sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + DEFAULT_REGISTRATION_NAME, null);\n            }\n\n            // Asserts\n            Exception exception = container.exception;\n\n            if (!(exception instanceof RegistrationGoneException)) {\n                fail(\"Expected Exception RegistrationGoneException\");\n            }\n\n            Assert.assertNull(container.storedRegistrationId);\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    public void testReRegisterFailTemplate() throws Throwable {\n        try {\n\n            Context context = getInstrumentation().getTargetContext();\n            final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());\n\n            final Container container = new Container();\n            final String handle = \"handle\";\n            final String templateName = \"templateName\";\n\n            String registrationId1 = \"registrationId1\";\n            String registrationId2 = \"registrationId2\";\n\n            MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n            MobileServiceClient registrationclient = client.withFilter(getUpsertTestFilter(registrationId1));\n            MobileServiceClient reRegistrationclient = client.withFilter(getUpsertFailTestFilter(registrationId2));\n\n            final MobileServicePush registrationPush = registrationclient.getPush();\n            final MobileServicePush reRegistrationPush = reRegistrationclient.getPush();\n\n            forceRefreshSync(registrationPush, handle);\n            forceRefreshSync(reRegistrationPush, handle);\n\n            try {\n                registrationPush.registerTemplate(handle, templateName, \"{ }\", new String[]{\"tag1\"}).get();\n            } catch (Exception exception) {\n                fail(exception.getMessage());\n            }\n\n            try {\n                reRegistrationPush.registerTemplate(handle, templateName, \"{ }\", new String[]{\"tag1\"}).get();\n            } catch (Exception exception) {\n                if (exception instanceof ExecutionException) {\n                    container.exception = (Exception) exception.getCause();\n                } else {\n                    container.exception = exception;\n                }\n\n                container.storedRegistrationId = sharedPreferences.getString(STORAGE_PREFIX + REGISTRATION_NAME_STORAGE_KEY + templateName, null);\n            }\n\n            // Asserts\n            Exception exception = container.exception;\n\n            if (!(exception instanceof RegistrationGoneException)) {\n                fail(\"Expected Exception RegistrationGoneException\");\n            }\n\n            Assert.assertNull(container.storedRegistrationId);\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    public void testRegisterNativeEmptyGcmRegistrationId() throws Throwable {\n        try {\n\n            final Container container = new Container();\n\n            Context context = getInstrumentation().getTargetContext();\n\n            MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n            try {\n                client.getPush().register(\"\", new String[]{\"tag1\"}).get();\n            } catch (Exception exception) {\n                if (exception instanceof ExecutionException) {\n                    container.exception = (Exception) exception.getCause();\n                } else {\n                    container.exception = exception;\n                }\n            }\n\n            // Asserts\n            Exception exception = container.exception;\n\n            if (!(exception instanceof IllegalArgumentException)) {\n                fail(\"Expected Exception IllegalArgumentException\");\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    public void testRegisterTemplateEmptyGcmRegistrationId() throws Throwable {\n        try {\n            final Container container = new Container();\n\n            Context context = getInstrumentation().getTargetContext();\n\n            MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n            try {\n                client.getPush().registerTemplate(\"\", \"template1\", \"{\\\"data\\\"={\\\"text\\\"=\\\"$message\\\"}}\", new String[]{\"tag1\"}).get();\n            } catch (Exception exception) {\n                if (exception instanceof ExecutionException) {\n                    container.exception = (Exception) exception.getCause();\n                } else {\n                    container.exception = exception;\n                }\n            }\n\n            // Asserts\n            Exception exception = container.exception;\n\n            if (!(exception instanceof IllegalArgumentException)) {\n                fail(\"Expected Exception IllegalArgumentException\");\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    // Test Filter\n\n    public void testRegisterTemplateEmptyTemplateName() throws Throwable {\n        try {\n\n            final Container container = new Container();\n\n            Context context = getInstrumentation().getTargetContext();\n\n            MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n            try {\n                client.getPush().registerTemplate(UUID.randomUUID().toString(), \"\", \"{\\\"data\\\"={\\\"text\\\"=\\\"$message\\\"}}\", new String[]{\"tag1\"}).get();\n            } catch (Exception exception) {\n                if (exception instanceof ExecutionException) {\n                    container.exception = (Exception) exception.getCause();\n                } else {\n                    container.exception = exception;\n                }\n            }\n\n            // Asserts\n            Exception exception = container.exception;\n\n            if (!(exception instanceof IllegalArgumentException)) {\n                fail(\"Expected Exception IllegalArgumentException\");\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    public void testRegisterTemplateEmptyTemplateBody() throws Throwable {\n        try {\n\n            final Container container = new Container();\n\n            Context context = getInstrumentation().getTargetContext();\n\n            MobileServiceClient client = new MobileServiceClient(appUrl, appKey, context);\n\n            try {\n                client.getPush().registerTemplate(UUID.randomUUID().toString(), \"template1\", \"\", new String[]{\"tag1\"}).get();\n            } catch (Exception exception) {\n                if (exception instanceof ExecutionException) {\n                    container.exception = (Exception) exception.getCause();\n                } else {\n                    container.exception = exception;\n                }\n            }\n\n            // Asserts\n            Exception exception = container.exception;\n\n            if (!(exception instanceof IllegalArgumentException)) {\n                fail(\"Expected Exception IllegalArgumentException\");\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    private class Container {\n        public String storedRegistrationId;\n        public String registrationId;\n\n        public List<String> tags;\n        public String templateBody;\n\n        public String unregister;\n\n        public Exception exception;\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/IdPropertyTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.test.InstrumentationTestCase;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.gson.GsonBuilder;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.google.gson.JsonSyntaxException;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterRequestMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.StatusLineMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.IdPropertyTestClasses.LongIdType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.IdPropertyTestClasses.StringIdType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.ResultsContainer;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.data.IdTestData;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\n\nimport java.net.MalformedURLException;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.concurrent.ExecutionException;\n\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.field;\n\npublic class IdPropertyTests extends InstrumentationTestCase {\n    String appUrl = \"\";\n    String appKey = \"\";\n    GsonBuilder gsonBuilder;\n\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com/\";\n        appKey = \"qwerty\";\n        gsonBuilder = new GsonBuilder();\n        super.setUp();\n    }\n\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    // Non Generic JSON\n\n    // Read Tests\n\n    public void testReadWithStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            readWithStringIdResponseContent(testId);\n        }\n    }\n\n    private void readWithStringIdResponseContent(String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"[{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.execute().get();\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonArray());\n            assertTrue(container.getJsonResult().getAsJsonArray().size() == 1);\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString());\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testReadWithIntIdResponseContent() throws Throwable {\n        long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds);\n\n        for (long testId : testIdData) {\n            readWithIntIdResponseContent(testId);\n        }\n    }\n\n    private void readWithIntIdResponseContent(long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n\n        final String responseContent = \"[{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonArray());\n            assertTrue(container.getJsonResult().getAsJsonArray().size() == 1);\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber());\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsLong());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testReadWithNonStringAndNonIntIdResponseContent() throws Throwable {\n        Object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n        for (Object testId : testIdData) {\n            readWithNonStringAndNonIntIdResponseContent(testId);\n        }\n    }\n\n    private void readWithNonStringAndNonIntIdResponseContent(Object testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n\n        final String responseContent = \"[{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonArray());\n\n            assertTrue(container.getJsonResult().getAsJsonArray().size() == 1);\n\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).isJsonObject());\n\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"String\"));\n\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").isJsonPrimitive());\n\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n\n            if (container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").isJsonNull()) {\n                assertTrue(testId == null);\n            } else if (container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").isJsonPrimitive()) {\n                if (container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsJsonPrimitive().isBoolean()) {\n                    assertEquals(testId, container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsBoolean());\n                } else if (container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber()) {\n                    assertEquals(testId, container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsDouble());\n                } else if (container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString()) {\n                    assertEquals(testId, container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n                }\n            } else if (container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").isJsonObject()) {\n                assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsJsonObject().equals(testId));\n            } else if (container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").isJsonArray()) {\n                assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").getAsJsonArray().equals(testId));\n            }\n\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testReadWithNullIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonArray());\n\n            assertTrue(container.getJsonResult().getAsJsonArray().size() == 1);\n\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).isJsonObject());\n\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"String\"));\n\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"id\").isJsonNull());\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").isJsonPrimitive());\n\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testReadWithNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"[{\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonArray());\n\n            assertTrue(container.getJsonResult().getAsJsonArray().size() == 1);\n\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).isJsonObject());\n\n            assertTrue(!container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"id\"));\n            assertTrue(!container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"Id\"));\n            assertTrue(!container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"iD\"));\n            assertTrue(!container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"ID\"));\n\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().has(\"String\"));\n\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").isJsonPrimitive());\n\n            assertTrue(container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonArray().get(0).getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    // Lookup Tests\n\n    public void testLookupWithStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            lookupWithStringIdResponseContent(testId);\n        }\n    }\n\n    private void lookupWithStringIdResponseContent(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.lookUp(\"myId\").get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testLookupWithIntIdResponseContent() throws Throwable {\n        long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds);\n\n        for (long testId : testIdData) {\n            lookupWithIntIdResponseContent(testId);\n        }\n    }\n\n    private void lookupWithIntIdResponseContent(long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.lookUp(\"myId\").get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsLong());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testLookupWithNonStringAndNonIntIdResponseContent() throws Throwable {\n        Object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n        for (Object testId : testIdData) {\n            lookupWithNonStringAndNonIntIdResponseContent(testId);\n        }\n    }\n\n    private void lookupWithNonStringAndNonIntIdResponseContent(Object testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.lookUp(\"myId\").get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n\n            if (container.getJsonResult().getAsJsonObject().get(\"id\").isJsonNull()) {\n                assertTrue(testId == null);\n            } else if (container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive()) {\n                if (container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isBoolean()) {\n                    assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsBoolean());\n                } else if (container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber()) {\n                    assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsDouble());\n                } else if (container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString()) {\n                    assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n                }\n            } else if (container.getJsonResult().getAsJsonObject().get(\"id\").isJsonObject()) {\n                assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonObject().equals(testId));\n            } else if (container.getJsonResult().getAsJsonObject().get(\"id\").isJsonArray()) {\n                assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonArray().equals(testId));\n            }\n\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testLookupWithNullIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.lookUp(\"myId\").get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonNull());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testLookupWithNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.lookUp(\"myId\").get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n\n            assertTrue(!container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(!container.getJsonResult().getAsJsonObject().has(\"Id\"));\n            assertTrue(!container.getJsonResult().getAsJsonObject().has(\"iD\"));\n            assertTrue(!container.getJsonResult().getAsJsonObject().has(\"ID\"));\n\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testLookupWithStringIdParameter() throws Throwable {\n        String[] testIdData = IdTestData.ValidStringIds;\n\n        for (String testId : testIdData) {\n            lookupWithStringIdParameter(testId);\n        }\n    }\n\n    private void lookupWithStringIdParameter(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.lookUp(testId).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testLookupWithInvalidStringIdParameter() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.EmptyStringIds, IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            lookupWithInvalidStringIdParameter(testId);\n        }\n    }\n\n    private void lookupWithInvalidStringIdParameter(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.lookUp(testId).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testLookupWithIntIdParameter() throws Throwable {\n        long[] testIdData = IdTestData.ValidIntIds;\n\n        for (long testId : testIdData) {\n            lookupWithIntIdParameter(testId);\n        }\n    }\n\n    private void lookupWithIntIdParameter(final long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.lookUp(testId).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsLong());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testLookupWithInvalidIntIdParameter() throws Throwable {\n        long[] testIdData = IdTestData.InvalidIntIds;\n\n        for (long testId : testIdData) {\n            lookupWithInvalidIntIdParameter(testId);\n        }\n    }\n\n    private void lookupWithInvalidIntIdParameter(final long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.lookUp(testId).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testLookupWithNullIdParameter() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.lookUp(null).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                if (exception instanceof ExecutionException) {\n                    container.setException(exception.getCause());\n                } else {\n                    container.setException(exception);\n                }\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testLookupWithZeroIdParameter() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.lookUp(0L).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    // Insert Tests\n\n    public void testInsertWithStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            insertWithStringIdResponseContent(testId);\n        }\n    }\n\n    private void insertWithStringIdResponseContent(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testInsertWithIntIdResponseContent() throws Throwable {\n        long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds);\n\n        for (long testId : testIdData) {\n            insertWithIntIdResponseContent(testId);\n        }\n    }\n\n    private void insertWithIntIdResponseContent(long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsLong());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testInsertWithNonStringAndNonIntIdResponseContent() throws Throwable {\n        Object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n        for (Object testId : testIdData) {\n            insertWithNonStringAndNonIntIdResponseContent(testId);\n        }\n    }\n\n    private void insertWithNonStringAndNonIntIdResponseContent(Object testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n\n            if (container.getJsonResult().getAsJsonObject().get(\"id\").isJsonNull()) {\n                assertTrue(testId == null);\n            } else if (container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive()) {\n                if (container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isBoolean()) {\n                    assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsBoolean());\n                } else if (container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber()) {\n                    assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsDouble());\n                } else if (container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString()) {\n                    assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n                }\n            } else if (container.getJsonResult().getAsJsonObject().get(\"id\").isJsonObject()) {\n                assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonObject().equals(testId));\n            } else if (container.getJsonResult().getAsJsonObject().get(\"id\").isJsonArray()) {\n                assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonArray().equals(testId));\n            }\n\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testInsertWithNullIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonNull());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testInsertWithNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n\n            assertTrue(!container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(!container.getJsonResult().getAsJsonObject().has(\"Id\"));\n            assertTrue(!container.getJsonResult().getAsJsonObject().has(\"iD\"));\n            assertTrue(!container.getJsonResult().getAsJsonObject().has(\"ID\"));\n\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testInsertWithStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.ValidStringIds;\n\n        for (String testId : testIdData) {\n            insertWithStringIdItem(testId);\n        }\n    }\n\n    private void insertWithStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testInsertWithEmptyStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.EmptyStringIds;\n\n        for (String testId : testIdData) {\n            insertWithEmptyStringIdItem(testId);\n        }\n    }\n\n    private void insertWithEmptyStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(\"an id\", container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testInsertWithInvalidStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.InvalidStringIds;\n\n        for (String testId : testIdData) {\n            insertWithInvalidStringIdItem(testId);\n        }\n    }\n\n    private void insertWithInvalidStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testInsertWithIntIdItem() throws Throwable {\n        long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds);\n\n        for (long testId : testIdData) {\n            insertWithIntIdItem(testId);\n        }\n    }\n\n    private void insertWithIntIdItem(final long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String stringTestId = String.valueOf(testId);\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testInsertWithNullIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":null,\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(5L, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsLong());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testInsertWithNoIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(5L, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsLong());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testInsertWithZeroIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":0,\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(5L, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsLong());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    // Update Tests\n\n    public void testUpdateWithStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            updateWithStringIdResponseContent(testId);\n        }\n    }\n\n    private void updateWithStringIdResponseContent(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testUpdateWithIntIdResponseContent() throws Throwable {\n        long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds);\n\n        for (long testId : testIdData) {\n            updateWithIntIdResponseContent(testId);\n        }\n    }\n\n    private void updateWithIntIdResponseContent(long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.insert(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsLong());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testUpdateWithNonStringAndNonIntIdResponseContent() throws Throwable {\n        Object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n        for (Object testId : testIdData) {\n            updateWithNonStringAndNonIntIdResponseContent(testId);\n        }\n    }\n\n    private void updateWithNonStringAndNonIntIdResponseContent(Object testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.update(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n\n            if (container.getJsonResult().getAsJsonObject().get(\"id\").isJsonNull()) {\n                assertTrue(testId == null);\n            } else if (container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive()) {\n                if (container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isBoolean()) {\n                    assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsBoolean());\n                } else if (container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber()) {\n                    assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsDouble());\n                } else if (container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString()) {\n                    assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n                }\n            } else if (container.getJsonResult().getAsJsonObject().get(\"id\").isJsonObject()) {\n                assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonObject().equals(testId));\n            } else if (container.getJsonResult().getAsJsonObject().get(\"id\").isJsonArray()) {\n                assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonArray().equals(testId));\n            }\n\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testUpdateWithNullIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.update(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonNull());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testUpdateWithNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.update(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(\"id\", container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testUpdateWithStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.ValidStringIds;\n\n        for (String testId : testIdData) {\n            updateWithStringIdItem(testId);\n        }\n    }\n\n    private void updateWithStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.update(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isString());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsString());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testUpdateWithEmptyStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.EmptyStringIds;\n\n        for (String testId : testIdData) {\n            updateWithEmptyStringIdItem(testId);\n        }\n    }\n\n    private void updateWithEmptyStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.update(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testUpdatetWithInvalidStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.InvalidStringIds;\n\n        for (String testId : testIdData) {\n            updateWithInvalidStringIdItem(testId);\n        }\n    }\n\n    private void updateWithInvalidStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.update(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testUpdateWithIntIdItem() throws Throwable {\n        long[] testIdData = IdTestData.ValidIntIds;\n\n        for (long testId : testIdData) {\n            updateWithIntIdItem(testId);\n        }\n    }\n\n    private void updateWithIntIdItem(final long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String stringTestId = String.valueOf(testId);\n\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.update(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertTrue(container.getJsonResult().isJsonObject());\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"id\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().has(\"String\"));\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").isJsonPrimitive());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().isNumber());\n            assertTrue(container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().isString());\n            assertEquals(testId, container.getJsonResult().getAsJsonObject().get(\"id\").getAsJsonPrimitive().getAsLong());\n            assertEquals(\"Hey\", container.getJsonResult().getAsJsonObject().get(\"String\").getAsJsonPrimitive().getAsString());\n        }\n    }\n\n    public void testUpdateWithNullIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":null,\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.update(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testUpdateWithNoIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.update(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testUpdateWithZeroIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":0,\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonElement result = msTable.update(obj).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setJsonResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    // Delete Tests\n\n    public void testDeleteWithStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            deleteWithStringIdResponseContent(testId);\n        }\n    }\n\n    private void deleteWithStringIdResponseContent(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testDeleteWithIntIdResponseContent() throws Throwable {\n        long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds);\n\n        for (long testId : testIdData) {\n            deleteWithIntIdResponseContent(testId);\n        }\n    }\n\n    private void deleteWithIntIdResponseContent(long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testDeleteWithNonStringAndNonIntIdResponseContent() throws Throwable {\n        Object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n        for (Object testId : testIdData) {\n            deleteWithNonStringAndNonIntIdResponseContent(testId);\n        }\n    }\n\n    private void deleteWithNonStringAndNonIntIdResponseContent(Object testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testDeleteWithNullIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testDeleteWithNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"id\\\",\\\"value\\\":\\\"new\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testDeleteWithStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.ValidStringIds;\n\n        for (String testId : testIdData) {\n            deleteWithStringIdItem(testId);\n        }\n    }\n\n    private void deleteWithStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testDeleteWithEmptyStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.EmptyStringIds;\n\n        for (String testId : testIdData) {\n            deleteWithEmptyStringIdItem(testId);\n        }\n    }\n\n    private void deleteWithEmptyStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"\" + testId + \"\\\",\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testDeleteWithInvalidStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.InvalidStringIds;\n\n        for (String testId : testIdData) {\n            deleteWithInvalidStringIdItem(testId);\n        }\n    }\n\n    private void deleteWithInvalidStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testDeleteWithIntIdItem() throws Throwable {\n        long[] testIdData = IdTestData.ValidIntIds;\n\n        for (long testId : testIdData) {\n            deleteWithIntIdItem(testId);\n        }\n    }\n\n    private void deleteWithIntIdItem(final long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String stringTestId = String.valueOf(testId);\n\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testDeleteWithNullIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":null,\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testDeleteWithNoIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testDeleteWithZeroIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":0,\\\"String\\\":\\\"what?\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    // Generic\n\n    // Read Tests\n\n    // String Id Type\n\n    public void testReadWithStringIdTypeAndStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            readWithStringIdTypeAndStringIdResponseContent(testId);\n        }\n    }\n\n    private void readWithStringIdTypeAndStringIdResponseContent(String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"[{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the select method\n            List<StringIdType> result = msTable.execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) obj;\n\n            assertEquals(testId, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithStringIdTypeAndNonStringIdResponseContent() throws Throwable {\n        Object[] testIdData = IdTestData.concat(IdTestData.convert(IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds)),\n                IdTestData.NonStringNonIntValidJsonIds);\n\n        for (Object testId : testIdData) {\n            readWithStringIdTypeAndNonStringIdResponseContent(testId);\n        }\n    }\n\n    private void readWithStringIdTypeAndNonStringIdResponseContent(Object testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n        final String responseContent = \"[{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the select method\n            List<StringIdType> result = msTable.execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) obj;\n\n            assertEquals(stringTestId, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithStringIdTypeAndNullIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the select method\n            List<StringIdType> result = msTable.execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) obj;\n\n            assertEquals(null, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithStringIdTypeAndNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"[{\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the select method\n            List<StringIdType> result = msTable.execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) obj;\n\n            assertEquals(null, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithStringIdTypeAndStringIdFilter() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            readWithStringIdTypeAndStringIdFilter(testId);\n        }\n    }\n\n    private void readWithStringIdTypeAndStringIdFilter(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"[{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the select method\n            List<StringIdType> result = msTable.where(field(\"Id\").eq().val(testId)).execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) obj;\n\n            assertEquals(testId, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithStringIdTypeAndNullIdFilter() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the select method\n            List<StringIdType> result = msTable.where(field(\"Id\").eq().val((String) null)).execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) obj;\n\n            assertEquals(null, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithStringIdTypeAndStringIdProjection() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            readWithStringIdTypeAndStringIdProjection(testId);\n        }\n    }\n\n    private void readWithStringIdTypeAndStringIdProjection(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"[{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the select method\n            List<StringIdType> result = msTable.select(\"Id,String\").execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) obj;\n\n            assertEquals(testId, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithStringIdTypeAndNullIdProjection() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the select method\n            List<StringIdType> result = msTable.select(\"Id,String\").execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) obj;\n\n            assertEquals(null, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithStringIdTypeAndNoIdProjection() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"[{\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the select method\n            List<StringIdType> result = msTable.select(\"Id,String\").execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) obj;\n\n            assertEquals(null, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    // Integer Id Type\n\n    public void testReadWithIntIdTypeAndIntIdResponseContent() throws Throwable {\n        long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds);\n\n        for (long testId : testIdData) {\n            readWithIntIdTypeAndIntIdResponseContent(testId);\n        }\n    }\n\n    private void readWithIntIdTypeAndIntIdResponseContent(long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n        final String responseContent = \"[{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the select method\n            List<LongIdType> result = msTable.execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof LongIdType);\n\n            LongIdType elem = (LongIdType) obj;\n\n            assertEquals(testId, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n\t/*\n     * public void testReadWithIntIdTypeAndIntParseableIdResponseContent()\n\t * throws Throwable { Object[] testIdData =\n\t * IdTestData.NonStringNonIntValidJsonIds;\n\t * \n\t * for (Object testId : testIdData) {\n\t * readWithIntIdTypeAndIntParseableIdResponseContent(testId); } }\n\t * \n\t * private void readWithIntIdTypeAndIntParseableIdResponseContent(Object\n\t * testId) throws Throwable { final CountDownLatch latch = new\n\t * CountDownLatch(1);\n\t * \n\t * // Container to store callback's results and do the asserts. final\n\t * ResultsContainer container = new ResultsContainer();\n\t * \n\t * final String tableName = \"MyTableName\";\n\t * \n\t * String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n\t * final String responseContent = \"[{\\\"id\\\":\" + stringTestId +\n\t * \",\\\"String\\\":\\\"Hey\\\"}]\";\n\t * \n\t * runTestOnUiThread(new Runnable() {\n\t * \n\t * @Override public void run() { MobileServiceClient client = null;\n\t * \n\t * try { client = new MobileServiceClient(appUrl, appKey,\n\t * getInstrumentation().getTargetContext()); } catch (MalformedURLException\n\t * e) { e.printStackTrace(); }\n\t * \n\t * // Add a filter to handle the request and create a new json // object\n\t * with an id defined client =\n\t * client.withFilter(getTestFilter(responseContent));\n\t * \n\t * // Create get the MobileService table MobileServiceTable<LongIdType>\n\t * msTable = client.getTable(tableName, LongIdType.class);\n\t * \n\t * // Call the select method msTable.execute(new\n\t * TableQueryCallback<LongIdType>() {\n\t * \n\t * @Override public void onCompleted(List<LongIdType> result, int count,\n\t * Exception exception, ServiceFilterResponse response) { if (exception !=\n\t * null) { container.setException(exception); } else if (result == null) {\n\t * container.setException(new Exception(\"Expected result\")); } else {\n\t * container.setCustomResult(result); }\n\t * \n\t * latch.countDown(); } }); } });\n\t * \n\t * latch.await();\n\t * \n\t * // Asserts Exception exception = container.getException();\n\t * \n\t * if (exception != null) { fail(exception.getMessage()); } else { Object\n\t * result = container.getCustomResult(); assertTrue(result instanceof\n\t * List<?>);\n\t * \n\t * List<?> resultList = (List<?>)result; assertTrue(resultList.size() == 1);\n\t * \n\t * Object obj = resultList.get(0); assertTrue(obj instanceof LongIdType);\n\t * \n\t * LongIdType elem = (LongIdType)obj;\n\t * \n\t * assertEquals(Long.valueOf(stringTestId), Long.valueOf(elem.Id));\n\t * assertEquals(\"Hey\", elem.String); } }\n\t */\n\n    public void testReadWithIntIdTypeAndNullIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the select method\n            List<LongIdType> result = msTable.execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof LongIdType);\n\n            LongIdType elem = (LongIdType) obj;\n\n            assertEquals(0L, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithIntIdTypeAndNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"[{\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the select method\n            List<LongIdType> result = msTable.execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof LongIdType);\n\n            LongIdType elem = (LongIdType) obj;\n\n            assertEquals(0L, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithIntIdTypeAndStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            readWithIntIdTypeAndStringIdResponseContent(testId);\n        }\n    }\n\n    private void readWithIntIdTypeAndStringIdResponseContent(String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"[{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the select method\n            List<LongIdType> result = msTable.execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof JsonSyntaxException) || !(exception.getCause() instanceof NumberFormatException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testReadWithIntIdTypeAndIntIdFilter() throws Throwable {\n        long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds);\n\n        for (long testId : testIdData) {\n            readWithIntIdTypeAndIntIdFilter(testId);\n        }\n    }\n\n    private void readWithIntIdTypeAndIntIdFilter(final long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n        final String responseContent = \"[{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the select method\n            List<LongIdType> result = msTable.where(field(\"Id\").eq().val(testId)).execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof LongIdType);\n\n            LongIdType elem = (LongIdType) obj;\n\n            assertEquals(testId, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithIntIdTypeAndNullIdFilter() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the select method\n            List<LongIdType> result = msTable.where(field(\"Id\").eq().val((Long) null)).execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof LongIdType);\n\n            LongIdType elem = (LongIdType) obj;\n\n            assertEquals(0L, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithIntIdTypeAndIntIdProjection() throws Throwable {\n        long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds);\n\n        for (long testId : testIdData) {\n            readWithIntIdTypeAndIntIdProjection(testId);\n        }\n    }\n\n    private void readWithIntIdTypeAndIntIdProjection(long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n        final String responseContent = \"[{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the select method\n            List<LongIdType> result = msTable.select(\"Id,String\").execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof LongIdType);\n\n            LongIdType elem = (LongIdType) obj;\n\n            assertEquals(testId, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithIntIdTypeAndNullIdProjection() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"[{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the select method\n            List<LongIdType> result = msTable.select(\"Id,String\").execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof LongIdType);\n\n            LongIdType elem = (LongIdType) obj;\n\n            assertEquals(0L, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testReadWithIntIdTypeAndNoIdProjection() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"[{\\\"String\\\":\\\"Hey\\\"}]\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the select method\n            List<LongIdType> result = msTable.select(\"Id,String\").execute().get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof List<?>);\n\n            List<?> resultList = (List<?>) result;\n            assertTrue(resultList.size() == 1);\n\n            Object obj = resultList.get(0);\n            assertTrue(obj instanceof LongIdType);\n\n            LongIdType elem = (LongIdType) obj;\n\n            assertEquals(0L, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    // Lookup Tests\n\n    // String Id Type\n\n    public void testLookupWithStringIdTypeAndStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            lookupWithStringIdTypeAndStringIdResponseContent(testId);\n        }\n    }\n\n    private void lookupWithStringIdTypeAndStringIdResponseContent(String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the lookup method\n            StringIdType result = msTable.lookUp(\"an id\").get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) result;\n\n            assertEquals(testId, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testLookupWithStringIdTypeAndNonStringIdResponseContent() throws Throwable {\n        Object[] testIdData = IdTestData.concat(IdTestData.convert(IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds)),\n                IdTestData.NonStringNonIntValidJsonIds);\n\n        for (Object testId : testIdData) {\n            lookupWithStringIdTypeAndNonStringIdResponseContent(testId);\n        }\n    }\n\n    private void lookupWithStringIdTypeAndNonStringIdResponseContent(Object testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the lookup method\n            StringIdType result = msTable.lookUp(\"an id\").get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) result;\n\n            assertEquals(stringTestId, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testLookupWithStringIdTypeAndNullIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the lookup method\n            StringIdType result = msTable.lookUp(\"an id\").get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) result;\n\n            assertEquals(null, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testLookupWithStringIdTypeAndNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the lookup method\n            StringIdType result = msTable.lookUp(\"an id\").get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) result;\n\n            assertEquals(null, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testLookupWithStringIdTypeAndStringIdParameter() throws Throwable {\n        String[] testIdData = IdTestData.ValidStringIds;\n\n        for (String testId : testIdData) {\n            lookupWithStringIdTypeAndStringIdParameter(testId);\n        }\n    }\n\n    private void lookupWithStringIdTypeAndStringIdParameter(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the lookup method\n            StringIdType result = msTable.lookUp(testId).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof StringIdType);\n\n            StringIdType elem = (StringIdType) result;\n\n            assertEquals(testId, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testLookupWithStringIdTypeAndInvalidStringIdParameter() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.EmptyStringIds, IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            lookupWithStringIdTypeAndInvalidStringIdParameter(testId);\n        }\n    }\n\n    private void lookupWithStringIdTypeAndInvalidStringIdParameter(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the lookup method\n            StringIdType result = msTable.lookUp(testId).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n\t/*\n     * public void testLookupWithStringIdTypeAndIntIdParameter() throws\n\t * Throwable { long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds,\n\t * IdTestData.InvalidIntIds);\n\t * \n\t * for (long testId : testIdData) {\n\t * lookupWithStringIdTypeAndIntIdParameter(testId); } }\n\t * \n\t * private void lookupWithStringIdTypeAndIntIdParameter(final long testId)\n\t * throws Throwable {\n\t * \n\t * // Container to store callback's results and do the asserts. final\n\t * ResultsContainer container = new ResultsContainer();\n\t * \n\t * final String tableName = \"MyTableName\";\n\t * \n\t * final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\t * \n\t * runTestOnUiThread(new Runnable() {\n\t * \n\t * @Override public void run() { MobileServiceClient client = null;\n\t * \n\t * try { client = new MobileServiceClient(appUrl, appKey,\n\t * getInstrumentation().getTargetContext()); } catch (MalformedURLException\n\t * e) { e.printStackTrace(); }\n\t * \n\t * // Add a filter to handle the request and create a new json // object\n\t * with an id defined client =\n\t * client.withFilter(getTestFilter(responseContent));\n\t * \n\t * // Create get the MobileService table MobileServiceTable<StringIdType>\n\t * msTable = client.getTable(tableName, StringIdType.class);\n\t * \n\t * // Call the lookup method msTable.lookUp(testId, new\n\t * TableOperationCallback<StringIdType>() {\n\t * \n\t * @Override public void onCompleted(StringIdType entity, Exception\n\t * exception, ServiceFilterResponse response) { if (exception != null) {\n\t * container.setException(exception); } else if (entity == null) {\n\t * container.setException(new Exception(\"Expected result\")); } else {\n\t * container.setCustomResult(entity); }\n\t * \n\t * latch.countDown(); } }); } });\n\t * \n\t * latch.await();\n\t * \n\t * // Asserts Exception exception = container.getException();\n\t * \n\t * if (exception == null || !(exception instanceof\n\t * IllegalArgumentException)) {\n\t * fail(\"Expected Exception IllegalArgumentException\"); } }\n\t */\n\n    public void testLookupWithStringIdTypeAndNonStringNonIntIdParameter() throws Throwable {\n        Object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n        for (Object testId : testIdData) {\n            lookupWithStringIdTypeAndNonStringNonIntIdParameter(testId);\n        }\n    }\n\n    private void lookupWithStringIdTypeAndNonStringNonIntIdParameter(final Object testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the lookup method\n            StringIdType result = msTable.lookUp(testId).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testLookupWithStringIdTypeAndNullIdParameter() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the lookup method\n            StringIdType result = msTable.lookUp(null).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    // Integer Id Type\n\n    public void testLookupWithIntIdTypeAndIntIdResponseContent() throws Throwable {\n        long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds);\n\n        for (long testId : testIdData) {\n            lookupWithIntIdTypeAndIntIdResponseContent(testId);\n        }\n    }\n\n    private void lookupWithIntIdTypeAndIntIdResponseContent(long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the lookup method\n            LongIdType result = msTable.lookUp(10).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof LongIdType);\n\n            LongIdType elem = (LongIdType) result;\n\n            assertEquals(testId, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n\t/*\n\t * public void testLookupWithIntIdTypeAndIntParseableIdResponseContent()\n\t * throws Throwable { Object[] testIdData =\n\t * IdTestData.NonStringNonIntValidJsonIds;\n\t * \n\t * for (Object testId : testIdData) {\n\t * lookupWithIntIdTypeAndIntParseableIdResponseContent(testId); } }\n\t * \n\t * private void lookupWithIntIdTypeAndIntParseableIdResponseContent(Object\n\t * testId) throws Throwable { final CountDownLatch latch = new\n\t * CountDownLatch(1);\n\t * \n\t * // Container to store callback's results and do the asserts. final\n\t * ResultsContainer container = new ResultsContainer();\n\t * \n\t * final String tableName = \"MyTableName\";\n\t * \n\t * String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n\t * final String responseContent = \"{\\\"id\\\":\" + stringTestId +\n\t * \",\\\"String\\\":\\\"Hey\\\"}\";\n\t * \n\t * runTestOnUiThread(new Runnable() {\n\t * \n\t * @Override public void run() { MobileServiceClient client = null;\n\t * \n\t * try { client = new MobileServiceClient(appUrl, appKey,\n\t * getInstrumentation().getTargetContext()); } catch (MalformedURLException\n\t * e) { e.printStackTrace(); }\n\t * \n\t * // Add a filter to handle the request and create a new json // object\n\t * with an id defined client =\n\t * client.withFilter(getTestFilter(responseContent));\n\t * \n\t * // Create get the MobileService table MobileServiceTable<LongIdType>\n\t * msTable = client.getTable(tableName, LongIdType.class);\n\t * \n\t * // Call the lookup method msTable.lookUp(10, new\n\t * TableOperationCallback<LongIdType>() {\n\t * \n\t * @Override public void onCompleted(LongIdType entity, Exception exception,\n\t * ServiceFilterResponse response) { if (exception != null) {\n\t * container.setException(exception); } else if (entity == null) {\n\t * container.setException(new Exception(\"Expected result\")); } else {\n\t * container.setCustomResult(entity); }\n\t * \n\t * latch.countDown(); } }); } });\n\t * \n\t * latch.await();\n\t * \n\t * // Asserts Exception exception = container.getException();\n\t * \n\t * if (exception != null) { fail(exception.getMessage()); } else { Object\n\t * result = container.getCustomResult(); assertTrue(result instanceof\n\t * LongIdType);\n\t * \n\t * LongIdType elem = (LongIdType)result;\n\t * \n\t * assertEquals(Long.valueOf(stringTestId), Long.valueOf(elem.Id));\n\t * assertEquals(\"Hey\", elem.String); } }\n\t */\n\n    public void testLookupWithIntIdTypeAndNullIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the lookup method\n            LongIdType result = msTable.lookUp(10).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof LongIdType);\n\n            LongIdType elem = (LongIdType) result;\n\n            assertEquals(0L, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testLookupWithIntIdTypeAndNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the lookup method\n            LongIdType result = msTable.lookUp(10).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof LongIdType);\n\n            LongIdType elem = (LongIdType) result;\n\n            assertEquals(0L, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testLookupWithIntIdTypeAndStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            lookupWithIntIdTypeAndStringIdResponseContent(testId);\n        }\n    }\n\n    private void lookupWithIntIdTypeAndStringIdResponseContent(String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the lookup method\n            LongIdType result = msTable.lookUp(10).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof JsonSyntaxException) || !(exception.getCause() instanceof NumberFormatException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testLookupWithIntIdTypeAndIntIdParameter() throws Throwable {\n        long[] testIdData = IdTestData.ValidIntIds;\n\n        for (long testId : testIdData) {\n            lookupWithIntIdTypeAndIntIdParameter(testId);\n        }\n    }\n\n    private void lookupWithIntIdTypeAndIntIdParameter(final long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the lookup method\n            LongIdType result = msTable.lookUp(testId).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            Object result = container.getCustomResult();\n            assertTrue(result instanceof LongIdType);\n\n            LongIdType elem = (LongIdType) result;\n\n            assertEquals(testId, elem.Id);\n            assertEquals(\"Hey\", elem.String);\n        }\n    }\n\n    public void testLookupWithIntIdTypeAndInvalidIntIdParameter() throws Throwable {\n        long[] testIdData = IdTestData.InvalidIntIds;\n\n        for (long testId : testIdData) {\n            lookupWithIntIdTypeAndInvalidIntIdParameter(testId);\n        }\n    }\n\n    private void lookupWithIntIdTypeAndInvalidIntIdParameter(final long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the lookup method\n            LongIdType result = msTable.lookUp(testId).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n\t/*\n\t * public void testLookupWithIntIdTypeAndStringIdParameter() throws\n\t * Throwable { String[] testIdData =\n\t * IdTestData.concat(IdTestData.ValidStringIds,\n\t * IdTestData.concat(IdTestData.EmptyStringIds,\n\t * IdTestData.InvalidStringIds));\n\t * \n\t * for (String testId : testIdData) {\n\t * lookupWithIntIdTypeAndStringIdParameter(testId); } }\n\t * \n\t * private void lookupWithIntIdTypeAndStringIdParameter(final String testId)\n\t * throws Throwable {\n\t * \n\t * // Container to store callback's results and do the asserts. final\n\t * ResultsContainer container = new ResultsContainer();\n\t * \n\t * final String tableName = \"MyTableName\";\n\t * \n\t * final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\t * \n\t * runTestOnUiThread(new Runnable() {\n\t * \n\t * @Override public void run() { MobileServiceClient client = null;\n\t * \n\t * try { client = new MobileServiceClient(appUrl, appKey,\n\t * getInstrumentation().getTargetContext()); } catch (MalformedURLException\n\t * e) { e.printStackTrace(); }\n\t * \n\t * // Add a filter to handle the request and create a new json // object\n\t * with an id defined client =\n\t * client.withFilter(getTestFilter(responseContent));\n\t * \n\t * // Create get the MobileService table MobileServiceTable<LongIdType>\n\t * msTable = client.getTable(tableName, LongIdType.class);\n\t * \n\t * // Call the lookup method msTable.lookUp(testId, new\n\t * TableOperationCallback<LongIdType>() {\n\t * \n\t * @Override public void onCompleted(LongIdType entity, Exception exception,\n\t * ServiceFilterResponse response) { if (exception != null) {\n\t * container.setException(exception); } else if (entity == null) {\n\t * container.setException(new Exception(\"Expected result\")); } else {\n\t * container.setCustomResult(entity); }\n\t * \n\t * latch.countDown(); } }); } });\n\t * \n\t * latch.await();\n\t * \n\t * // Asserts Exception exception = container.getException();\n\t * \n\t * if (exception == null) {\n\t * fail(\"Expected Exception IllegalArgumentException\"); } }\n\t */\n\n    public void testLookupWithIntIdTypeAndNonStringNonIntIdParameter() throws Throwable {\n        Object[] testIdData = IdTestData.NonStringNonIntValidJsonIds;\n\n        for (Object testId : testIdData) {\n            lookupWithIntIdTypeAndNonStringNonIntIdParameter(testId);\n        }\n    }\n\n    private void lookupWithIntIdTypeAndNonStringNonIntIdParameter(final Object testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the lookup method\n            LongIdType result = msTable.lookUp(testId).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testLookupWithIntIdTypeAndNullParameter() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the lookup method\n            LongIdType result = msTable.lookUp(null).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    // Insert Tests\n\n    // String Id Type\n\n    public void testInsertWithStringIdTypeAndStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            insertWithStringIdTypeAndStringIdResponseContent(testId);\n        }\n    }\n\n    private void insertWithStringIdTypeAndStringIdResponseContent(String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = \"an id\";\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the insert method\n            StringIdType result = msTable.insert(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(testId, item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n    public void testInsertWithStringIdTypeAndNonStringIdResponseContent() throws Throwable {\n        Object[] testIdData = IdTestData.concat(IdTestData.convert(IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds)),\n                IdTestData.NonStringNonIntValidJsonIds);\n\n        for (Object testId : testIdData) {\n            insertWithStringIdTypeAndNonStringIdResponseContent(testId);\n        }\n    }\n\n    private void insertWithStringIdTypeAndNonStringIdResponseContent(Object testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = \"an id\";\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the insert method\n            StringIdType result = msTable.insert(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(stringTestId, item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n\t/*\n\t * public void testInsertWithStringIdTypeAndNullIdResponseContent() throws\n\t * Throwable {\n\t * \n\t * // Container to store callback's results and do the asserts. final\n\t * ResultsContainer container = new ResultsContainer();\n\t * \n\t * final String tableName = \"MyTableName\";\n\t * \n\t * final String responseContent = \"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\";\n\t * \n\t * final StringIdType item = new StringIdType(); item.Id = \"an id\";\n\t * item.String = \"what?\";\n\t * \n\t * runTestOnUiThread(new Runnable() {\n\t * \n\t * @Override public void run() { MobileServiceClient client = null;\n\t * \n\t * try { client = new MobileServiceClient(appUrl, appKey,\n\t * getInstrumentation().getTargetContext()); } catch (MalformedURLException\n\t * e) { e.printStackTrace(); }\n\t * \n\t * // Add a filter to handle the request and create a new json // object\n\t * with an id defined client =\n\t * client.withFilter(getTestFilter(responseContent));\n\t * \n\t * // Create get the MobileService table MobileServiceTable<StringIdType>\n\t * msTable = client.getTable(tableName, StringIdType.class);\n\t * \n\t * // Call the insert method msTable.insert(item, new\n\t * TableOperationCallback<StringIdType>() {\n\t * \n\t * @Override public void onCompleted(StringIdType entity, Exception\n\t * exception, ServiceFilterResponse response) { if (exception != null) {\n\t * container.setException(exception); }\n\t * \n\t * latch.countDown(); } }); } });\n\t * \n\t * latch.await();\n\t * \n\t * // Asserts Exception exception = container.getException();\n\t * \n\t * if (exception != null) { fail(exception.getMessage()); } else {\n\t * assertEquals(\"an id\", item.Id); assertEquals(\"Hey\", item.String); } }\n\t */\n\n    public void testInsertWithStringIdTypeAndNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = \"an id\";\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the insert method\n            StringIdType result = msTable.insert(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(\"an id\", item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n    public void testInsertWithStringIdTypeAndStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.ValidStringIds;\n\n        for (String testId : testIdData) {\n            insertWithStringIdTypeAndStringIdItem(testId);\n        }\n    }\n\n    private void insertWithStringIdTypeAndStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = testId;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the insert method\n            StringIdType result = msTable.insert(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(testId, item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n    public void testInsertWithStringIdTypeAndEmptyStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.EmptyStringIds;\n\n        for (String testId : testIdData) {\n            insertWithStringIdTypeAndEmptyStringIdItem(testId);\n        }\n    }\n\n    private void insertWithStringIdTypeAndEmptyStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = testId;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the insert method\n            StringIdType result = msTable.insert(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(\"an id\", item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n    public void testInsertWithStringIdTypeAndNullIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = null;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the insert method\n            StringIdType result = msTable.insert(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(\"an id\", item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n    public void testInsertWithStringIdTypeAndInvalidStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.InvalidStringIds;\n\n        for (String testId : testIdData) {\n            insertWithStringIdTypeAndInvalidStringIdItem(testId);\n        }\n    }\n\n    private void insertWithStringIdTypeAndInvalidStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = testId;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the insert method\n            StringIdType result = msTable.insert(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    // Integer Id Type\n\n    public void testInsertWithIntIdTypeAndIntIdResponseContent() throws Throwable {\n        long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds);\n\n        for (long testId : testIdData) {\n            insertWithIntIdTypeAndIntIdResponseContent(testId);\n        }\n    }\n\n    private void insertWithIntIdTypeAndIntIdResponseContent(long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = 0;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the insert method\n            LongIdType result = msTable.insert(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(testId, item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n\t/*\n\t * public void testInsertWithIntIdTypeAndIntParseableIdResponseContent()\n\t * throws Throwable { Object[] testIdData =\n\t * IdTestData.NonStringNonIntValidJsonIds;\n\t * \n\t * for (Object testId : testIdData) {\n\t * insertWithIntIdTypeAndIntParseableIdResponseContent(testId); } }\n\t * \n\t * private void insertWithIntIdTypeAndIntParseableIdResponseContent(Object\n\t * testId) throws Throwable { final CountDownLatch latch = new\n\t * CountDownLatch(1);\n\t * \n\t * // Container to store callback's results and do the asserts. final\n\t * ResultsContainer container = new ResultsContainer();\n\t * \n\t * final String tableName = \"MyTableName\";\n\t * \n\t * String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n\t * final String responseContent = \"{\\\"id\\\":\" + stringTestId +\n\t * \",\\\"String\\\":\\\"Hey\\\"}\";\n\t * \n\t * final LongIdType item = new LongIdType(); item.Id = 0; item.String =\n\t * \"what?\";\n\t * \n\t * runTestOnUiThread(new Runnable() {\n\t * \n\t * @Override public void run() { MobileServiceClient client = null;\n\t * \n\t * try { client = new MobileServiceClient(appUrl, appKey,\n\t * getInstrumentation().getTargetContext()); } catch (MalformedURLException\n\t * e) { e.printStackTrace(); }\n\t * \n\t * // Add a filter to handle the request and create a new json // object\n\t * with an id defined client =\n\t * client.withFilter(getTestFilter(responseContent));\n\t * \n\t * // Create get the MobileService table MobileServiceTable<LongIdType>\n\t * msTable = client.getTable(tableName, LongIdType.class);\n\t * \n\t * // Call the insert method msTable.insert(item, new\n\t * TableOperationCallback<LongIdType>() {\n\t * \n\t * @Override public void onCompleted(LongIdType entity, Exception exception,\n\t * ServiceFilterResponse response) { if (exception != null) {\n\t * container.setException(exception); }\n\t * \n\t * latch.countDown(); } }); } });\n\t * \n\t * latch.await();\n\t * \n\t * // Asserts Exception exception = container.getException();\n\t * \n\t * if (exception != null) { fail(exception.getMessage()); } else {\n\t * assertEquals(Long.valueOf(stringTestId), Long.valueOf(item.Id));\n\t * assertEquals(\"Hey\", item.String); } }\n\t */\n\n    public void testInsertWithIntIdTypeAndNullIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = 0;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the insert method\n            LongIdType result = msTable.insert(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(0L, item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n    public void testInsertWithIntIdTypeAndNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = 0;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the insert method\n            LongIdType result = msTable.insert(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(0L, item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n    public void testInsertWithIntIdTypeAndStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            insertWithIntIdTypeAndStringIdResponseContent(testId);\n        }\n    }\n\n    private void insertWithIntIdTypeAndStringIdResponseContent(String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = 0;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the insert method\n            LongIdType result = msTable.insert(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof JsonSyntaxException) || !(exception.getCause() instanceof NumberFormatException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testInsertWithIntIdTypeAndIntIdItem() throws Throwable {\n        long[] testIdData = IdTestData.ValidIntIds;\n\n        for (long testId : testIdData) {\n            insertWithIntIdTypeAndIntIdItem(testId);\n        }\n    }\n\n    private void insertWithIntIdTypeAndIntIdItem(final long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = testId;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the insert method\n            LongIdType result = msTable.insert(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    // Update Tests\n\n    // String Id Type\n\n    public void testUpdateWithStringIdTypeAndStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            updateWithStringIdTypeAndStringIdResponseContent(testId);\n        }\n    }\n\n    private void updateWithStringIdTypeAndStringIdResponseContent(String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = \"an id\";\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the update method\n            StringIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(testId, item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n    public void testUpdateWithStringIdTypeAndNonStringIdResponseContent() throws Throwable {\n        Object[] testIdData = IdTestData.concat(IdTestData.convert(IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds)),\n                IdTestData.NonStringNonIntValidJsonIds);\n\n        for (Object testId : testIdData) {\n            updateWithStringIdTypeAndNonStringIdResponseContent(testId);\n        }\n    }\n\n    private void updateWithStringIdTypeAndNonStringIdResponseContent(Object testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = \"an id\";\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the update method\n            StringIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(stringTestId, item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n\t/*\n\t * public void testUpdateWithStringIdTypeAndNullIdResponseContent() throws\n\t * Throwable {\n\t * \n\t * // Container to store callback's results and do the asserts. final\n\t * ResultsContainer container = new ResultsContainer();\n\t * \n\t * final String tableName = \"MyTableName\";\n\t * \n\t * final String responseContent = \"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\";\n\t * \n\t * final StringIdType item = new StringIdType(); item.Id = \"an id\";\n\t * item.String = \"what?\";\n\t * \n\t * runTestOnUiThread(new Runnable() {\n\t * \n\t * @Override public void run() { MobileServiceClient client = null;\n\t * \n\t * try { client = new MobileServiceClient(appUrl, appKey,\n\t * getInstrumentation().getTargetContext()); } catch (MalformedURLException\n\t * e) { e.printStackTrace(); }\n\t * \n\t * // Add a filter to handle the request and create a new json // object\n\t * with an id defined client =\n\t * client.withFilter(getTestFilter(responseContent));\n\t * \n\t * // Create get the MobileService table MobileServiceTable<StringIdType>\n\t * msTable = client.getTable(tableName, StringIdType.class);\n\t * \n\t * // Call the update method msTable.update(item, new\n\t * TableOperationCallback<StringIdType>() {\n\t * \n\t * @Override public void onCompleted(StringIdType entity, Exception\n\t * exception, ServiceFilterResponse response) { if (exception != null) {\n\t * container.setException(exception); }\n\t * \n\t * latch.countDown(); } }); } });\n\t * \n\t * latch.await();\n\t * \n\t * // Asserts Exception exception = container.getException();\n\t * \n\t * if (exception != null) { fail(exception.getMessage()); } else {\n\t * assertEquals(\"an id\", item.Id); assertEquals(\"Hey\", item.String); } }\n\t */\n\n    public void testUpdateWithStringIdTypeAndNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = \"an id\";\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the update method\n            StringIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(\"an id\", item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n    public void testUpdateWithStringIdTypeAndStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.ValidStringIds;\n\n        for (String testId : testIdData) {\n            updateWithStringIdTypeAndStringIdItem(testId);\n        }\n    }\n\n    private void updateWithStringIdTypeAndStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = testId;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the update method\n            StringIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(testId, item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n    public void testUpdateWithStringIdTypeAndEmptyStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.EmptyStringIds;\n\n        for (String testId : testIdData) {\n            updateWithStringIdTypeAndEmptyStringIdItem(testId);\n        }\n    }\n\n    private void updateWithStringIdTypeAndEmptyStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = testId;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the update method\n            StringIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testUpdateWithStringIdTypeAndNullIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = null;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the update method\n            StringIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testUpdateWithStringIdTypeAndInvalidStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.InvalidStringIds;\n\n        for (String testId : testIdData) {\n            updateWithStringIdTypeAndInvalidStringIdItem(testId);\n        }\n    }\n\n    private void updateWithStringIdTypeAndInvalidStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = testId;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the update method\n            StringIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    // Integer Id Type\n\n    public void testUpdateWithIntIdTypeAndIntIdResponseContent() throws Throwable {\n        long[] testIdData = IdTestData.concat(IdTestData.ValidIntIds, IdTestData.InvalidIntIds);\n\n        for (long testId : testIdData) {\n            updateWithIntIdTypeAndIntIdResponseContent(testId);\n        }\n    }\n\n    private void updateWithIntIdTypeAndIntIdResponseContent(long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = 12;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the update method\n            LongIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(testId, item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n\t/*\n\t * public void testUpdateWithIntIdTypeAndIntParseableIdResponseContent()\n\t * throws Throwable { Object[] testIdData =\n\t * IdTestData.NonStringNonIntValidJsonIds;\n\t * \n\t * for (Object testId : testIdData) {\n\t * updateWithIntIdTypeAndIntParseableIdResponseContent(testId); } }\n\t * \n\t * private void updateWithIntIdTypeAndIntParseableIdResponseContent(Object\n\t * testId) throws Throwable { final CountDownLatch latch = new\n\t * CountDownLatch(1);\n\t * \n\t * // Container to store callback's results and do the asserts. final\n\t * ResultsContainer container = new ResultsContainer();\n\t * \n\t * final String tableName = \"MyTableName\";\n\t * \n\t * String stringTestId = testId.toString().toLowerCase(Locale.getDefault());\n\t * final String responseContent = \"{\\\"id\\\":\" + stringTestId +\n\t * \",\\\"String\\\":\\\"Hey\\\"}\";\n\t * \n\t * final LongIdType item = new LongIdType(); item.Id = 12; item.String =\n\t * \"what?\";\n\t * \n\t * runTestOnUiThread(new Runnable() {\n\t * \n\t * @Override public void run() { MobileServiceClient client = null;\n\t * \n\t * try { client = new MobileServiceClient(appUrl, appKey,\n\t * getInstrumentation().getTargetContext()); } catch (MalformedURLException\n\t * e) { e.printStackTrace(); }\n\t * \n\t * // Add a filter to handle the request and create a new json // object\n\t * with an id defined client =\n\t * client.withFilter(getTestFilter(responseContent));\n\t * \n\t * // Create get the MobileService table MobileServiceTable<LongIdType>\n\t * msTable = client.getTable(tableName, LongIdType.class);\n\t * \n\t * // Call the update method msTable.update(item, new\n\t * TableOperationCallback<LongIdType>() {\n\t * \n\t * @Override public void onCompleted(LongIdType entity, Exception exception,\n\t * ServiceFilterResponse response) { if (exception != null) {\n\t * container.setException(exception); }\n\t * \n\t * latch.countDown(); } }); } });\n\t * \n\t * latch.await();\n\t * \n\t * // Asserts Exception exception = container.getException();\n\t * \n\t * if (exception != null) { fail(exception.getMessage()); } else {\n\t * assertEquals(Long.valueOf(stringTestId), Long.valueOf(item.Id));\n\t * assertEquals(\"Hey\", item.String); } }\n\t */\n\n\t/*\n\t * public void testUpdateWithIntIdTypeAndNullIdResponseContent() throws\n\t * Throwable {\n\t * \n\t * // Container to store callback's results and do the asserts. final\n\t * ResultsContainer container = new ResultsContainer();\n\t * \n\t * final String tableName = \"MyTableName\";\n\t * \n\t * final String responseContent = \"{\\\"id\\\":null,\\\"String\\\":\\\"Hey\\\"}\";\n\t * \n\t * final LongIdType item = new LongIdType(); item.Id = 12; item.String =\n\t * \"what?\";\n\t * \n\t * runTestOnUiThread(new Runnable() {\n\t * \n\t * @Override public void run() { MobileServiceClient client = null;\n\t * \n\t * try { client = new MobileServiceClient(appUrl, appKey,\n\t * getInstrumentation().getTargetContext()); } catch (MalformedURLException\n\t * e) { e.printStackTrace(); }\n\t * \n\t * // Add a filter to handle the request and create a new json // object\n\t * with an id defined client =\n\t * client.withFilter(getTestFilter(responseContent));\n\t * \n\t * // Create get the MobileService table MobileServiceTable<LongIdType>\n\t * msTable = client.getTable(tableName, LongIdType.class);\n\t * \n\t * // Call the update method msTable.update(item, new\n\t * TableOperationCallback<LongIdType>() {\n\t * \n\t * @Override public void onCompleted(LongIdType entity, Exception exception,\n\t * ServiceFilterResponse response) { if (exception != null) {\n\t * container.setException(exception); }\n\t * \n\t * latch.countDown(); } }); } });\n\t * \n\t * latch.await();\n\t * \n\t * // Asserts Exception exception = container.getException();\n\t * \n\t * if (exception != null) { fail(exception.getMessage()); } else {\n\t * assertEquals(12L, item.Id); assertEquals(\"Hey\", item.String); } }\n\t */\n\n    public void testUpdateWithIntIdTypeAndNoIdResponseContent() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = 12;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the update method\n            LongIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(12L, item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n    public void testUpdateWithIntIdTypeAndStringIdResponseContent() throws Throwable {\n        String[] testIdData = IdTestData.concat(IdTestData.concat(IdTestData.ValidStringIds, IdTestData.EmptyStringIds), IdTestData.InvalidStringIds);\n\n        for (String testId : testIdData) {\n            updateWithIntIdTypeAndStringIdResponseContent(testId);\n        }\n    }\n\n    private void updateWithIntIdTypeAndStringIdResponseContent(String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId + \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = 12;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the update method\n            LongIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof JsonSyntaxException) || !(exception.getCause() instanceof NumberFormatException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testUpdateWithIntIdTypeAndIntIdItem() throws Throwable {\n        long[] testIdData = IdTestData.ValidIntIds;\n\n        for (long testId : testIdData) {\n            updateWithIntIdTypeAndIntIdItem(testId);\n        }\n    }\n\n    private void updateWithIntIdTypeAndIntIdItem(final long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        String stringTestId = String.valueOf(testId);\n        final String responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = testId;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the update method\n            LongIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception != null) {\n            fail(exception.getMessage());\n        } else {\n            assertEquals(testId, item.Id);\n            assertEquals(\"Hey\", item.String);\n        }\n    }\n\n    public void testUpdateWithIntIdTypeAndZeroIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = 0;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the update method\n            LongIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testUpdateWithIntIdTypeAndInvalidIntIdItem() throws Throwable {\n        long[] testIdData = IdTestData.InvalidIntIds;\n\n        for (long testId : testIdData) {\n            updateWithIntIdTypeAndInvalidIntIdItem(testId);\n        }\n    }\n\n    private void updateWithIntIdTypeAndInvalidIntIdItem(final long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = testId;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the update method\n            LongIdType result = msTable.update(item).get();\n\n            if (result == null) {\n                container.setException(new Exception(\"Expected result\"));\n            } else {\n                container.setCustomResult(result);\n            }\n\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                container.setException(exception.getCause());\n            } else {\n                container.setException(exception);\n            }\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    // Delete Tests\n\n    // String Id Type\n\n\t/*\n\t * public void testDeleteWithStringIdTypeAndStringIdItem() throws Throwable\n\t * { String[] testIdData = IdTestData.ValidStringIds;\n\t * \n\t * for (String testId : testIdData) {\n\t * deleteWithStringIdTypeAndStringIdItem(testId); } }\n\t * \n\t * private void deleteWithStringIdTypeAndStringIdItem(final String testId)\n\t * throws Throwable {\n\t * \n\t * // Container to store callback's results and do the asserts. final\n\t * ResultsContainer container = new ResultsContainer();\n\t * \n\t * final String tableName = \"MyTableName\";\n\t * \n\t * String jsonTestId = testId.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n\t * final String responseContent = \"{\\\"id\\\":\\\"\" + jsonTestId +\n\t * \"\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\t * \n\t * final StringIdType item = new StringIdType(); item.Id = testId;\n\t * item.String = \"what?\";\n\t * \n\t * runTestOnUiThread(new Runnable() {\n\t * \n\t * @Override public void run() { MobileServiceClient client = null;\n\t * \n\t * try { client = new MobileServiceClient(appUrl, appKey,\n\t * getInstrumentation().getTargetContext()); } catch (MalformedURLException\n\t * e) { e.printStackTrace(); }\n\t * \n\t * // Add a filter to handle the request and create a new json // object\n\t * with an id defined client =\n\t * client.withFilter(getTestFilter(responseContent));\n\t * \n\t * // Create get the MobileService table MobileServiceTable<StringIdType>\n\t * msTable = client.getTable(tableName, StringIdType.class);\n\t * \n\t * // Call the delete method msTable.delete(item, new TableDeleteCallback()\n\t * {\n\t * \n\t * @Override public void onCompleted(Exception exception,\n\t * ServiceFilterResponse response) { if (exception != null) {\n\t * container.setException(exception); }\n\t * \n\t * latch.countDown(); } }); } });\n\t * \n\t * latch.await();\n\t * \n\t * // Asserts Exception exception = container.getException();\n\t * \n\t * if (exception != null) { fail(exception.getMessage()); } else {\n\t * assertEquals(null, item.Id); assertEquals(\"what?\", item.String); } }\n\t */\n\n    public void testDeleteWithStringIdTypeAndEmptyStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.EmptyStringIds;\n\n        for (String testId : testIdData) {\n            deleteWithStringIdTypeAndEmptyStringIdItem(testId);\n        }\n    }\n\n    private void deleteWithStringIdTypeAndEmptyStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = testId;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the delete method\n            msTable.delete(item).get();\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testDeleteWithStringIdTypeAndNullIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = null;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the delete method\n            msTable.delete(item).get();\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testDeleteWithStringIdTypeAndInvalidStringIdItem() throws Throwable {\n        String[] testIdData = IdTestData.InvalidStringIds;\n\n        for (String testId : testIdData) {\n            deleteWithStringIdTypeAndInvalidStringIdItem(testId);\n        }\n    }\n\n    private void deleteWithStringIdTypeAndInvalidStringIdItem(final String testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        final StringIdType item = new StringIdType();\n        item.Id = testId;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringIdType> msTable = client.getTable(tableName, StringIdType.class);\n\n        try {\n            // Call the delete method\n            msTable.delete(item).get();\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    // Integer Id Type\n\n\t/*\n\t * public void testDeleteWithIntIdTypeAndIntIdItem() throws Throwable {\n\t * long[] testIdData = IdTestData.ValidIntIds;\n\t * \n\t * for (long testId : testIdData) { deleteWithIntIdTypeAndIntIdItem(testId);\n\t * } }\n\t * \n\t * private void deleteWithIntIdTypeAndIntIdItem(final long testId) throws\n\t * Throwable {\n\t * \n\t * // Container to store callback's results and do the asserts. final\n\t * ResultsContainer container = new ResultsContainer();\n\t * \n\t * final String tableName = \"MyTableName\";\n\t * \n\t * String stringTestId = String.valueOf(testId); final String\n\t * responseContent = \"{\\\"id\\\":\" + stringTestId + \",\\\"String\\\":\\\"Hey\\\"}\";\n\t * \n\t * final LongIdType item = new LongIdType(); item.Id = testId; item.String =\n\t * \"what?\";\n\t * \n\t * runTestOnUiThread(new Runnable() {\n\t * \n\t * @Override public void run() { MobileServiceClient client = null;\n\t * \n\t * try { client = new MobileServiceClient(appUrl, appKey,\n\t * getInstrumentation().getTargetContext()); } catch (MalformedURLException\n\t * e) { e.printStackTrace(); }\n\t * \n\t * // Add a filter to handle the request and create a new json // object\n\t * with an id defined client =\n\t * client.withFilter(getTestFilter(responseContent));\n\t * \n\t * // Create get the MobileService table MobileServiceTable<LongIdType>\n\t * msTable = client.getTable(tableName, LongIdType.class);\n\t * \n\t * // Call the delete method msTable.delete(item, new TableDeleteCallback()\n\t * {\n\t * \n\t * @Override public void onCompleted(Exception exception,\n\t * ServiceFilterResponse response) { if (exception != null) {\n\t * container.setException(exception); }\n\t * \n\t * latch.countDown(); } }); } });\n\t * \n\t * latch.await();\n\t * \n\t * // Asserts Exception exception = container.getException();\n\t * \n\t * if (exception != null) { fail(exception.getMessage()); } else {\n\t * assertEquals(0L, item.Id); assertEquals(\"Hey\", item.String); } }\n\t */\n\n    public void testDeleteWithIntIdTypeAndZeroIdItem() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = 0;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the delete method\n            msTable.delete(item).get();\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    public void testDeleteWithIntIdTypeAndInvalidIntIdItem() throws Throwable {\n        long[] testIdData = IdTestData.InvalidIntIds;\n\n        for (long testId : testIdData) {\n            deleteWithIntIdTypeAndInvalidIntIdItem(testId);\n        }\n    }\n\n    private void deleteWithIntIdTypeAndInvalidIntIdItem(final long testId) throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        final LongIdType item = new LongIdType();\n        item.Id = testId;\n        item.String = \"what?\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<LongIdType> msTable = client.getTable(tableName, LongIdType.class);\n\n        try {\n            // Call the delete method\n            msTable.delete(item).get();\n\n        } catch (Exception exception) {\n            container.setException(exception);\n        }\n\n        // Asserts\n        Exception exception = container.getException();\n\n        if (exception == null || !(exception instanceof IllegalArgumentException)) {\n            fail(\"Expected Exception IllegalArgumentException\");\n        }\n    }\n\n    // Test Filter\n\n    private ServiceFilter getTestFilter(String content) {\n        return getTestFilter(200, content);\n    }\n\n    private ServiceFilter getTestFilter(final int statusCode, final String content) {\n        return new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                // Create a mock response simulating an error\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLineMock(statusCode));\n                response.setContent(content);\n\n                // create a mock request to replace the existing one\n                ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n                return nextServiceFilterCallback.onNext(requestMock);\n            }\n        };\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/LoginTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.test.InstrumentationTestCase;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.ResultsContainer;\n\nimport junit.framework.Assert;\n\nimport org.apache.http.Header;\nimport org.apache.http.ProtocolVersion;\nimport org.apache.http.StatusLine;\n\nimport java.net.MalformedURLException;\nimport java.util.HashMap;\nimport java.util.Locale;\nimport java.util.concurrent.CountDownLatch;\n\npublic class LoginTests extends InstrumentationTestCase {\n\n    String appUrl = \"\";\n    String appKey = \"\";\n\n    @Override\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com/\";\n        appKey = \"qwerty\";\n        super.setUp();\n    }\n\n    public void testLoginOperation() throws Throwable {\n        testLoginOperation(MobileServiceAuthenticationProvider.Facebook);\n        testLoginOperation(MobileServiceAuthenticationProvider.Twitter);\n        testLoginOperation(MobileServiceAuthenticationProvider.MicrosoftAccount);\n        testLoginOperation(MobileServiceAuthenticationProvider.Google);\n\n        testLoginOperation(\"FaCeBoOk\");\n        testLoginOperation(\"twitter\");\n        testLoginOperation(\"MicrosoftAccount\");\n        testLoginOperation(\"GOOGLE\");\n    }\n\n    private void testLoginOperation(final Object provider) throws Throwable {\n        final ResultsContainer result = new ResultsContainer();\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{authenticationToken:'123abc', user:{userId:'123456'}}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        try {\n\n            MobileServiceUser user = null;\n\n            if (provider.getClass().equals(MobileServiceAuthenticationProvider.class)) {\n                user = client.login((MobileServiceAuthenticationProvider) provider, \"{myToken:123}\").get();\n\n            } else {\n                user = client.login((String) provider, \"{myToken:123}\").get();\n            }\n\n            assertEquals(\"123456\", user.getUserId());\n            assertEquals(\"123abc\", user.getAuthenticationToken());\n\n        } catch (Exception exception) {\n            Assert.fail();\n        }\n\n        // Assert\n        String expectedURL = appUrl + \"login/\" + provider.toString().toLowerCase(Locale.getDefault());\n        assertEquals(expectedURL, result.getRequestUrl());\n    }\n\n    public void testLoginOperationWithParameter() throws Throwable {\n        testLoginOperationWithParameter(MobileServiceAuthenticationProvider.Facebook);\n        testLoginOperationWithParameter(MobileServiceAuthenticationProvider.Twitter);\n        testLoginOperationWithParameter(MobileServiceAuthenticationProvider.MicrosoftAccount);\n        testLoginOperationWithParameter(MobileServiceAuthenticationProvider.Google);\n\n        testLoginOperationWithParameter(\"FaCeBoOk\");\n        testLoginOperationWithParameter(\"twitter\");\n        testLoginOperationWithParameter(\"MicrosoftAccount\");\n        testLoginOperationWithParameter(\"GOOGLE\");\n    }\n\n    private void testLoginOperationWithParameter(final Object provider) throws Throwable {\n        final ResultsContainer result = new ResultsContainer();\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{authenticationToken:'123abc', user:{userId:'123456'}}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n\n        HashMap<String, String> parameters = new HashMap<>();\n\n        parameters.put(\"p1\", \"p1value\");\n        parameters.put(\"p2\", \"p2value\");\n\n\n        String parameterQueryString = \"?p2=p2value&p1=p1value\";\n\n        try {\n            MobileServiceUser user;\n\n            if (provider.getClass().equals(MobileServiceAuthenticationProvider.class)) {\n                client.login((MobileServiceAuthenticationProvider) provider, \"{myToken:123}\", parameters).get();\n            } else {\n                client.login((String) provider, \"{myToken:123}\", parameters).get();\n            }\n\n        } catch (Exception exception) {\n            Assert.fail();\n        }\n\n        // Assert\n        String expectedURL = appUrl + \"login/\" + provider.toString().toLowerCase(Locale.getDefault()) + parameterQueryString;\n        assertEquals(expectedURL, result.getRequestUrl());\n    }\n\n    public void testLoginCallbackOperation() throws Throwable {\n        testLoginCallbackOperation(MobileServiceAuthenticationProvider.Facebook);\n        testLoginCallbackOperation(MobileServiceAuthenticationProvider.Twitter);\n        testLoginCallbackOperation(MobileServiceAuthenticationProvider.MicrosoftAccount);\n        testLoginCallbackOperation(MobileServiceAuthenticationProvider.Google);\n\n        testLoginCallbackOperation(\"FaCeBoOk\");\n        testLoginCallbackOperation(\"twitter\");\n        testLoginCallbackOperation(\"MicrosoftAccount\");\n        testLoginCallbackOperation(\"GOOGLE\");\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private void testLoginCallbackOperation(final Object provider) throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n        final ResultsContainer result = new ResultsContainer();\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{authenticationToken:'123abc', user:{userId:'123456'}}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        UserAuthenticationCallback callback = new UserAuthenticationCallback() {\n\n            @Override\n            public void onCompleted(MobileServiceUser user, Exception exception, ServiceFilterResponse response) {\n                if (exception == null) {\n                    assertEquals(\"123456\", user.getUserId());\n                    assertEquals(\"123abc\", user.getAuthenticationToken());\n                } else {\n                    Assert.fail();\n                }\n\n                latch.countDown();\n            }\n        };\n\n        if (provider.getClass().equals(MobileServiceAuthenticationProvider.class)) {\n            client.login((MobileServiceAuthenticationProvider) provider, \"{myToken:123}\", callback);\n        } else {\n            client.login((String) provider, \"{myToken:123}\", callback);\n        }\n\n        latch.await();\n\n        // Assert\n        String expectedURL = appUrl + \"login/\" + provider.toString().toLowerCase(Locale.getDefault());\n        assertEquals(expectedURL, result.getRequestUrl());\n    }\n\n    public void testLoginShouldThrowError() throws Throwable {\n\n        testLoginShouldThrowError(MobileServiceAuthenticationProvider.Facebook);\n        testLoginShouldThrowError(MobileServiceAuthenticationProvider.MicrosoftAccount);\n        testLoginShouldThrowError(MobileServiceAuthenticationProvider.Twitter);\n        testLoginShouldThrowError(MobileServiceAuthenticationProvider.Google);\n    }\n\n    private void testLoginShouldThrowError(final MobileServiceAuthenticationProvider provider) throws Throwable {\n        final ResultsContainer result = new ResultsContainer();\n        final String errorMessage = \"fake error\";\n        final String errorJson = \"{error:'\" + errorMessage + \"'}\";\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(errorJson);\n                response.setStatus(new StatusLine() {\n\n                    @Override\n                    public int getStatusCode() {\n                        return 400;\n                    }\n\n                    @Override\n                    public String getReasonPhrase() {\n                        return errorMessage;\n                    }\n\n                    @Override\n                    public ProtocolVersion getProtocolVersion() {\n                        return null;\n                    }\n                });\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            client.login(provider, \"{myToken:123}\").get();\n            Assert.fail();\n        } catch (Exception exception) {\n            assertTrue(exception.getCause() instanceof MobileServiceException);\n            MobileServiceException cause = (MobileServiceException) exception.getCause().getCause();\n            assertEquals(errorMessage, cause.getMessage());\n        }\n    }\n\n    public void testAuthenticatedRequest() throws Throwable {\n        final MobileServiceUser user = new MobileServiceUser(\"dummyUser\");\n        user.setAuthenticationToken(\"123abc\");\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n            client.setCurrentUser(user);\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                int headerIndex = -1;\n                Header[] headers = request.getHeaders();\n                for (int i = 0; i < headers.length; i++) {\n                    if (headers[i].getName() == \"X-ZUMO-AUTH\") {\n                        headerIndex = i;\n                    }\n                }\n                if (headerIndex == -1) {\n                    Assert.fail();\n                }\n\n                assertEquals(user.getAuthenticationToken(), headers[headerIndex].getValue());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(\"dummy\").execute().get();\n    }\n\n    public void testLoginWithEmptyTokenShouldFail() throws Throwable {\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        String token = null;\n        try {\n            client.login(MobileServiceAuthenticationProvider.Facebook, token).get();\n            Assert.fail();\n        } catch (IllegalArgumentException e) {\n            // It should throw an exception\n        }\n\n        try {\n            client.login(MobileServiceAuthenticationProvider.Facebook, \"\").get();\n            Assert.fail();\n        } catch (IllegalArgumentException e) {\n            // It should throw an exception\n        }\n    }\n\n    public void testLoginWithEmptyProviderShouldFail() throws Throwable {\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        String provider = null;\n        try {\n            client.login(provider, \"{myToken:123}\").get();\n            Assert.fail();\n        } catch (IllegalArgumentException e) {\n            // It should throw an exception\n        }\n\n        try {\n            client.login(\"\", \"{myToken:123}\").get();\n            Assert.fail();\n        } catch (IllegalArgumentException e) {\n            // It should throw an exception\n        }\n    }\n\n    public void testLogout() {\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        client.setCurrentUser(new MobileServiceUser(\"abc\"));\n\n        client.logout();\n\n        assertNull(client.getCurrentUser());\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/MobileServiceClientTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.os.Build;\nimport android.test.InstrumentationTestCase;\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterRequestMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.StatusLineMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.IdPropertyTestClasses.IdPropertyMultipleIdsTestObject;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.IdPropertyTestClasses.IdPropertyWithGsonAnnotation;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.PersonTestObject;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.PersonTestObjectWithStringId;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.PersonTestObjectWithoutId;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\n\nimport org.apache.http.Header;\nimport org.apache.http.client.methods.HttpPost;\nimport org.apache.http.protocol.HTTP;\n\nimport java.net.MalformedURLException;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.concurrent.ExecutionException;\n\npublic class MobileServiceClientTests extends InstrumentationTestCase {\n    String appUrl = \"\";\n    String appKey = \"\";\n\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com/\";\n        appKey = \"qwerty\";\n        super.setUp();\n    }\n\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    public void testNewMobileServiceClientShouldReturnMobileServiceClient() throws MalformedURLException {\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        assertEquals(appUrl, client.getAppUrl().toString());\n        assertEquals(appKey, client.getAppKey());\n    }\n\n    public void testNewMobileServiceClientWithEmptyAppUrlShouldThrowException() {\n        try {\n            new MobileServiceClient(\"\", appKey, getInstrumentation().getTargetContext());\n            fail(\"Expected Exception MalformedURLException\");\n        } catch (MalformedURLException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testNewMobileServiceClientWithNullAppUrlShouldThrowException() {\n        try {\n            new MobileServiceClient((String) null, appKey, getInstrumentation().getTargetContext());\n            fail(\"Expected Exception MalformedURLException\");\n        } catch (MalformedURLException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    private void mobileServiceClientWithoutAppKeyShouldNotSendXZumoApplicationHeader(final String appKeyValue) throws Throwable {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKeyValue, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String requestAppKey = null;\n                for (Header header : request.getHeaders()) {\n                    if (header.getName().equalsIgnoreCase(\"x-zumo-application\")) {\n                        requestAppKey = header.getValue();\n                    }\n                }\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLineMock(200));\n                response.setContent(\"{\\\"appKeyPresent\\\":\" + (requestAppKey == null ? \"false\" : \"true\") + \"}\");\n\n                // create a mock request to replace the existing one\n                ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n                return nextServiceFilterCallback.onNext(requestMock);\n            }\n        });\n\n        try {\n            JsonObject result = client.invokeApi(\"someApi\").get().getAsJsonObject();\n            assertNotNull(result);\n            boolean hasAppKeyHeader = result.get(\"appKeyPresent\").getAsBoolean();\n            assertFalse(hasAppKeyHeader);\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                fail(exception.getCause().getMessage());\n            } else {\n                fail(exception.getMessage());\n            }\n        }\n    }\n\n    public void testNewMobileServiceClientWithEmptyAppKeyShouldNotSendXZumoApplicationHeader() throws Throwable {\n        this.mobileServiceClientWithoutAppKeyShouldNotSendXZumoApplicationHeader(\"\");\n    }\n\n    public void testNewMobileServiceClientWithNullAppKeyShouldNotSendXZumoApplicationHeader() throws Throwable {\n        this.mobileServiceClientWithoutAppKeyShouldNotSendXZumoApplicationHeader(null);\n    }\n\n    public void testMobileServiceClientWithNullServiceFilterShouldThrowException() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not happen\");\n        }\n\n        try {\n            client.withFilter(null);\n            fail(\"Expected Exception IllegalArgumentException\");\n        } catch (IllegalArgumentException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testIsLoginInProgressShouldReturnFalse() throws MalformedURLException {\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        assertFalse(client.isLoginInProgress());\n    }\n\n    public void testSetAndGetCurrentUserShouldReturnUser() throws MalformedURLException {\n        String userId = \"myUserId\";\n        MobileServiceUser user = new MobileServiceUser(userId);\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client.setCurrentUser(user);\n        MobileServiceUser currentUser = client.getCurrentUser();\n\n        assertEquals(user, currentUser);\n        assertEquals(userId, user.getUserId());\n        assertEquals(userId, currentUser.getUserId());\n    }\n\n    public void testGetCurrentUserWithNoLoggedUserShouldReturnNull() throws MalformedURLException {\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        MobileServiceUser currentUser = client.getCurrentUser();\n\n        assertNull(currentUser);\n    }\n\n    public void testGetTableShouldReturnTableWithGivenNameAndClient() throws MalformedURLException {\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        MobileServiceJsonTable table = client.getTable(\"MyTable\");\n\n        assertNotNull(table);\n    }\n\n    public void testGetTableWithEmptyNameShouldThrowException() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not fail\");\n        }\n\n        try {\n            client.getTable(\"\");\n            fail(\"Expected Exception IllegalArgumentException\");\n        } catch (IllegalArgumentException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testGetTableWithWhiteSpacedNameShouldThrowException() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not fail\");\n        }\n\n        try {\n\n            client.getTable(\" \");\n            fail(\"Expected Exception IllegalArgumentException\");\n        } catch (IllegalArgumentException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testGetTableWithNullNameShouldThrowException() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not happen\");\n        }\n        try {\n            client.getTable((String) null);\n            fail(\"Expected Exception IllegalArgumentException\");\n        } catch (IllegalArgumentException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testGetTableWithClassWithIdMemberShouldWork() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not happen\");\n        }\n\n        MobileServiceTable<PersonTestObject> table = client.getTable(PersonTestObject.class);\n        assertEquals(\"PersonTestObject\", table.getTableName());\n    }\n\n    public void testGetTableWithClassWithStringIdMemberShouldWork() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not happen\");\n        }\n\n        MobileServiceTable<PersonTestObjectWithStringId> table = client.getTable(PersonTestObjectWithStringId.class);\n        assertEquals(\"PersonTestObjectWithStringId\", table.getTableName());\n    }\n\n    public void testGetTableWithClassWithIdAnnotationShouldWork() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not happen\");\n        }\n\n        MobileServiceTable<IdPropertyWithGsonAnnotation> table = client.getTable(IdPropertyWithGsonAnnotation.class);\n        assertEquals(\"IdPropertyWithGsonAnnotation\", table.getTableName());\n    }\n\n    public void testGetTableWithClassWithoutIdShouldFail() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not happen\");\n        }\n\n        try {\n            @SuppressWarnings(\"unused\")\n            MobileServiceTable<PersonTestObjectWithoutId> table = client.getTable(PersonTestObjectWithoutId.class);\n            fail(\"This should not happen\");\n        } catch (IllegalArgumentException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testGetTableWithClassWithMultipleIdPropertiesShouldFail() throws Throwable {\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            fail(\"This should not happen\");\n        }\n\n        try {\n            // Get the MobileService table\n            client.getTable(tableName, IdPropertyMultipleIdsTestObject.class);\n            fail(\"This should fail\");\n        } catch (IllegalArgumentException e) {\n            // It's ok\n        }\n\n    }\n\n    public void testGetTableWithInterfaceShouldThrowException() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not fail\");\n        }\n\n        try {\n\n            client.getTable(MyInterface.class);\n            fail(\"Expected Exception IllegalArgumentException\");\n        } catch (IllegalArgumentException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testGetTableWithAbstractClassShouldThrowException() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not fail\");\n        }\n\n        try {\n\n            client.getTable(MyAbstractClass.class);\n            fail(\"Expected Exception IllegalArgumentException\");\n        } catch (IllegalArgumentException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testLoginShouldParseJsonUserCorreclty() throws Throwable {\n\n        final String userId = \"id\";\n        final String userToken = \"userToken\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                // User JSon Template\n                String userJsonTemplate = \"{\\\"user\\\":{\\\"userId\\\":\\\"%s\\\"}, \\\"authenticationToken\\\":\\\"%s\\\"}\";\n                // Create a mock response simulating an error\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLineMock(200));\n                response.setContent(String.format(userJsonTemplate, userId, userToken));\n\n                // create a mock request to replace the existing one\n                ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n                return nextServiceFilterCallback.onNext(requestMock);\n            }\n        });\n\n        MobileServiceUser user = client.login(MobileServiceAuthenticationProvider.Facebook, \"oAuthToken\").get();\n        // Asserts\n        assertNotNull(user);\n        assertEquals(userId, user.getUserId());\n        assertEquals(userToken, user.getAuthenticationToken());\n    }\n\n    public void testOperationShouldAddHeaders() throws Throwable {\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        final String expectedAppKey = client.getAppKey();\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                int zumoInstallationHeaderIndex = -1;\n                int zumoAppHeaderIndex = -1;\n                int zumoVersionHeader = -1;\n                int userAgentHeaderIndex = -1;\n                int acceptHeaderIndex = -1;\n                int acceptEncodingHeaderIndex = -1;\n\n                String installationHeader = \"X-ZUMO-INSTALLATION-ID\";\n                String appHeader = \"X-ZUMO-APPLICATION\";\n                String versionHeader = \"X-ZUMO-VERSION\";\n                String userAgentHeader = HTTP.USER_AGENT;\n                String acceptHeader = \"Accept\";\n                String acceptEncodingHeader = \"Accept-Encoding\";\n                String versionNumber = \"2.0.2\";\n\n                Header[] headers = request.getHeaders();\n                for (int i = 0; i < headers.length; i++) {\n                    if (headers[i].getName() == installationHeader) {\n                        zumoInstallationHeaderIndex = i;\n                    } else if (headers[i].getName() == appHeader) {\n                        zumoAppHeaderIndex = i;\n                    } else if (headers[i].getName() == versionHeader) {\n                        zumoVersionHeader = i;\n                    } else if (headers[i].getName() == userAgentHeader) {\n                        userAgentHeaderIndex = i;\n                    } else if (headers[i].getName() == acceptHeader) {\n                        acceptHeaderIndex = i;\n                    } else if (headers[i].getName() == acceptEncodingHeader) {\n                        acceptEncodingHeaderIndex = i;\n                    }\n                }\n\n                if (zumoInstallationHeaderIndex == -1) {\n                    resultFuture.setException(new Exception(\"zumoInstallationHeaderIndex == -1\"));\n                    return resultFuture;\n                }\n                if (zumoAppHeaderIndex == -1) {\n                    resultFuture.setException(new Exception(\"zumoAppHeaderIndex == -1\"));\n                    return resultFuture;\n                }\n                if (zumoVersionHeader == -1) {\n                    resultFuture.setException(new Exception(\"zumoVersionHeader == -1\"));\n                    return resultFuture;\n                }\n                if (userAgentHeaderIndex == -1) {\n                    resultFuture.setException(new Exception(\"userAgentHeaderIndex == -1\"));\n                    return resultFuture;\n                }\n                if (acceptHeaderIndex == -1) {\n                    resultFuture.setException(new Exception(\"acceptHeaderIndex == -1\"));\n                    return resultFuture;\n                }\n                if (acceptEncodingHeaderIndex == -1) {\n                    resultFuture.setException(new Exception(\"acceptEncodingHeaderIndex == -1\"));\n                    return resultFuture;\n                }\n\n                String expectedUserAgent = String.format(\"ZUMO/%s (lang=%s; os=%s; os_version=%s; arch=%s; version=%s)\", \"1.0\", \"Java\", \"Android\",\n                        Build.VERSION.RELEASE, Build.CPU_ABI, versionNumber);\n\n                if (headers[zumoInstallationHeaderIndex].getValue() == null) {\n                    resultFuture.setException(new Exception(\"headers[zumoInstallationHeaderIndex] == null\"));\n                    return resultFuture;\n                }\n\n                if (!expectedAppKey.equals(headers[zumoAppHeaderIndex].getValue())) {\n                    resultFuture.setException(new Exception(\"expectedAppKey != headers[zumoAppHeaderIndex]\"));\n                    return resultFuture;\n                }\n\n                if (!expectedAppKey.equals(headers[zumoAppHeaderIndex].getValue())) {\n                    resultFuture.setException(new Exception(\"expectedAppKey != headers[zumoAppHeaderIndex]\"));\n                    return resultFuture;\n                }\n\n                if (!expectedUserAgent.equals(headers[userAgentHeaderIndex].getValue())) {\n                    resultFuture.setException(new Exception(\"expectedUserAgent != headers[userAgentHeaderIndex]\"));\n                    return resultFuture;\n                }\n\n                if (!versionNumber.equals(headers[zumoVersionHeader].getValue())) {\n                    resultFuture.setException(new Exception(versionNumber + \"!= headers[zumoVersionHeader]\"));\n                    return resultFuture;\n                }\n\n                if (!\"application/json\".equals(headers[acceptHeaderIndex].getValue())) {\n                    resultFuture.setException(new Exception(\"application/json != headers[acceptHeaderIndex]\"));\n                    return resultFuture;\n                }\n\n                if (!\"gzip\".equals(headers[acceptEncodingHeaderIndex].getValue())) {\n                    resultFuture.setException(new Exception(\"gzip != headers[acceptEncodingHeaderIndex]\"));\n                    return resultFuture;\n                }\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            client.getTable(\"dummy\").execute().get();\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                fail(exception.getCause().getMessage());\n            } else {\n                fail(exception.getMessage());\n            }\n        }\n    }\n\n    public void testOperationShouldNotReplaceWithDefaultHeaders() throws Throwable {\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        final String acceptHeaderKey = \"Accept\";\n        final String acceptEncodingHeaderKey = \"Accept-Encoding\";\n        final String acceptHeaderValue = \"text/plain\";\n        final String acceptEncodingHeaderValue = \"deflate\";\n\n        List<Pair<String, String>> headers = new ArrayList<Pair<String, String>>();\n        headers.add(new Pair<String, String>(acceptHeaderKey, acceptHeaderValue));\n        headers.add(new Pair<String, String>(acceptEncodingHeaderKey, acceptEncodingHeaderValue));\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                int acceptHeaderIndex = -1;\n                int acceptEncodingHeaderIndex = -1;\n                int acceptHeaderCount = 0;\n                int acceptEncodingHeaderCount = 0;\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                Header[] headers = request.getHeaders();\n                for (int i = 0; i < headers.length; i++) {\n                    if (headers[i].getName() == acceptHeaderKey) {\n                        acceptHeaderIndex = i;\n                        acceptHeaderCount++;\n                    } else if (headers[i].getName() == acceptEncodingHeaderKey) {\n                        acceptEncodingHeaderIndex = i;\n                        acceptEncodingHeaderCount++;\n                    }\n                }\n\n                if (acceptHeaderIndex == -1) {\n                    resultFuture.setException(new Exception(\"acceptHeaderIndex == -1\"));\n                    return resultFuture;\n                }\n                if (acceptHeaderCount == -1) {\n                    resultFuture.setException(new Exception(\"acceptHeaderCount == -1\"));\n                    return resultFuture;\n                }\n                if (acceptEncodingHeaderIndex == -1) {\n                    resultFuture.setException(new Exception(\"acceptEncodingHeaderIndex == -1\"));\n                    return resultFuture;\n                }\n                if (acceptEncodingHeaderCount == -1) {\n                    resultFuture.setException(new Exception(\"acceptEncodingHeaderIndex == -1\"));\n                    return resultFuture;\n                }\n\n                if (acceptHeaderValue.equals(headers[acceptHeaderIndex].getValue())) {\n                    resultFuture.setException(new Exception(\"acceptHeaderValue != headers[acceptHeaderIndex]\"));\n                    return resultFuture;\n                }\n\n                if (acceptEncodingHeaderValue.equals(headers[acceptEncodingHeaderIndex].getValue())) {\n                    resultFuture.setException(new Exception(\"acceptEncodingHeaderValue != headers[acceptEncodingHeaderIndex]\"));\n                    return resultFuture;\n                }\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n\n                response.setContent(\"{}\");\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            client.invokeApi(\"myApi\", null, HttpPost.METHOD_NAME, headers).get();\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                fail(exception.getCause().getMessage());\n            } else {\n                fail(exception.getMessage());\n            }\n        }\n    }\n\n    public void testOperationDefaultHeadersShouldBeIdempotent() throws Throwable {\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        final String acceptHeaderKey = \"Accept\";\n        final String acceptEncodingHeaderKey = \"Accept-Encoding\";\n        final String acceptHeaderValue = \"application/json\";\n        final String acceptEncodingHeaderValue = \"gzip\";\n\n        List<Pair<String, String>> headers = new ArrayList<Pair<String, String>>();\n        headers.add(new Pair<String, String>(acceptHeaderKey, acceptHeaderValue));\n        headers.add(new Pair<String, String>(acceptEncodingHeaderKey, acceptEncodingHeaderValue));\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                int acceptHeaderIndex = -1;\n                int acceptEncodingHeaderIndex = -1;\n                int acceptHeaderCount = 0;\n                int acceptEncodingHeaderCount = 0;\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                Header[] headers = request.getHeaders();\n                for (int i = 0; i < headers.length; i++) {\n                    if (headers[i].getName() == acceptHeaderKey) {\n                        acceptHeaderIndex = i;\n                        acceptHeaderCount++;\n                    } else if (headers[i].getName() == acceptEncodingHeaderKey) {\n                        acceptEncodingHeaderIndex = i;\n                        acceptEncodingHeaderCount++;\n                    }\n                }\n\n                if (acceptHeaderIndex == -1) {\n                    resultFuture.setException(new Exception(\"acceptHeaderIndex == -1\"));\n                    return resultFuture;\n                }\n                if (acceptHeaderCount == -1) {\n                    resultFuture.setException(new Exception(\"acceptHeaderCount == -1\"));\n                    return resultFuture;\n                }\n                if (acceptEncodingHeaderIndex == -1) {\n                    resultFuture.setException(new Exception(\"acceptEncodingHeaderIndex == -1\"));\n                    return resultFuture;\n                }\n                if (acceptEncodingHeaderCount == -1) {\n                    resultFuture.setException(new Exception(\"acceptEncodingHeaderIndex == -1\"));\n                    return resultFuture;\n                }\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            client.invokeApi(\"myApi\", null, HttpPost.METHOD_NAME, headers).get();\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                fail(exception.getCause().getMessage());\n            } else {\n                fail(exception.getMessage());\n            }\n        }\n    }\n\n    public void testInsertUpdateShouldAddContentTypeJson() throws Throwable {\n\n        final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                Header[] headers = request.getHeaders();\n\n                boolean headerPresent = false;\n                for (int i = 0; i < headers.length; i++) {\n                    if (headers[i].getName().equals(HTTP.CONTENT_TYPE) && headers[i].getValue().equals(\"application/json\")) {\n                        headerPresent = true;\n                    }\n                }\n\n                if (!headerPresent) {\n                    resultFuture.setException(new Exception(\"!headerPresent\"));\n                    return resultFuture;\n                }\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            JsonObject jsonObject = new JsonObject();\n\n            jsonObject.addProperty(\"someValue\", 42);\n\n            client.getTable(\"dummy\").insert(jsonObject).get();\n\n            jsonObject.addProperty(\"id\", 1);\n\n            client.getTable(\"dummy\").update(jsonObject).get();\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                fail(exception.getCause().getMessage());\n            } else {\n                fail(exception.getMessage());\n            }\n        }\n\n    }\n\n    public void testDeleteQueryShouldNotAddContentTypeJson() throws Throwable {\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                Header[] headers = request.getHeaders();\n\n                boolean headerPresent = false;\n                for (int i = 0; i < headers.length; i++) {\n                    if (headers[i].getName().equals(HTTP.CONTENT_TYPE) && headers[i].getValue().equals(\"application/json\")) {\n                        headerPresent = true;\n                    }\n                }\n\n                if (headerPresent) {\n                    resultFuture.setException(new Exception(\"!headerPresent\"));\n                    return resultFuture;\n                }\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            client.getTable(\"dummy\").delete(42).get();\n\n            client.getTable(\"dummy\").execute().get();\n        } catch (Exception exception) {\n            if (exception instanceof ExecutionException) {\n                fail(exception.getCause().getMessage());\n            } else {\n                fail(exception.getMessage());\n            }\n        }\n    }\n\n    interface MyInterface {\n\n    }\n\n    abstract class MyAbstractClass {\n        int id;\n        String name;\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/MobileServiceFeaturesTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.net.Uri;\nimport android.test.InstrumentationTestCase;\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceFeatures;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.mocks.MobileServiceLocalStoreMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.Address;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.PersonTestObjectWithStringId;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.VersionType;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\nimport com.microsoft.windowsazure.mobileservices.table.query.ExecutableJsonQuery;\nimport com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery;\nimport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceJsonSyncTable;\nimport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncTable;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType;\nimport com.microsoft.windowsazure.mobileservices.table.sync.synchandler.SimpleSyncHandler;\n\nimport org.apache.http.Header;\n\nimport java.net.MalformedURLException;\nimport java.util.ArrayList;\nimport java.util.EnumSet;\nimport java.util.HashMap;\nimport java.util.Hashtable;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.concurrent.ExecutionException;\n\npublic class MobileServiceFeaturesTests extends InstrumentationTestCase {\n    String appUrl;\n    String appKey;\n\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com/\";\n        appKey = \"qwerty\";\n        super.setUp();\n    }\n\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    public void testFeaturesToStringConversion() {\n        Hashtable<EnumSet<MobileServiceFeatures>, String> cases;\n        cases = new Hashtable<EnumSet<MobileServiceFeatures>, String>();\n        for (MobileServiceFeatures feature : MobileServiceFeatures.class.getEnumConstants()) {\n            cases.put(EnumSet.of(feature), feature.getValue());\n        }\n        cases.put(EnumSet.of(MobileServiceFeatures.TypedTable, MobileServiceFeatures.AdditionalQueryParameters), \"QS,TT\");\n        cases.put(EnumSet.of(MobileServiceFeatures.UntypedTable, MobileServiceFeatures.AdditionalQueryParameters), \"QS,TU\");\n        cases.put(EnumSet.of(MobileServiceFeatures.TypedTable, MobileServiceFeatures.Offline), \"OL,TT\");\n        cases.put(EnumSet.of(MobileServiceFeatures.UntypedTable, MobileServiceFeatures.Offline), \"OL,TU\");\n        cases.put(EnumSet.of(MobileServiceFeatures.TypedApiCall, MobileServiceFeatures.AdditionalQueryParameters), \"AT,QS\");\n        cases.put(EnumSet.of(MobileServiceFeatures.JsonApiCall, MobileServiceFeatures.AdditionalQueryParameters), \"AJ,QS\");\n        cases.put(EnumSet.of(MobileServiceFeatures.OpportunisticConcurrency, MobileServiceFeatures.Offline, MobileServiceFeatures.UntypedTable), \"OC,OL,TU\");\n\n        for (EnumSet<MobileServiceFeatures> features : cases.keySet()) {\n            String expected = cases.get(features);\n            String actual = MobileServiceFeatures.featuresToString(features);\n            assertEquals(expected, actual);\n        }\n    }\n\n    // Typed tables\n    public void testTypedTableInsertFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                PersonTestObjectWithStringId pto = new PersonTestObjectWithStringId(\"John\", \"Doe\", 33);\n                typedTable.insert(pto).get();\n            }\n        }, false, \"TT\");\n    }\n\n    public void testTypedTableInsertWithParametersFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                PersonTestObjectWithStringId pto = new PersonTestObjectWithStringId(\"John\", \"Doe\", 33);\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                typedTable.insert(pto, queryParams).get();\n            }\n        }, false, \"QS,TT\");\n    }\n\n    public void testTypedTableInsertWithEmptyParametersFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                PersonTestObjectWithStringId pto = new PersonTestObjectWithStringId(\"John\", \"Doe\", 33);\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                typedTable.insert(pto, queryParams).get();\n            }\n        }, false, \"TT\");\n    }\n\n    public void testTypedTableUpdateFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                PersonTestObjectWithStringId pto = new PersonTestObjectWithStringId(\"John\", \"Doe\", 33);\n                pto.setId(\"the-id\");\n                typedTable.update(pto).get();\n            }\n        }, false, \"TT\");\n    }\n\n    public void testTypedTableUpdateWithParametersFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                PersonTestObjectWithStringId pto = new PersonTestObjectWithStringId(\"John\", \"Doe\", 33);\n                pto.setId(\"the-id\");\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                typedTable.update(pto, queryParams).get();\n            }\n        }, false, \"QS,TT\");\n    }\n\n    public void testTypedTableDeleteNoParametersNoFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                PersonTestObjectWithStringId pto = new PersonTestObjectWithStringId(\"John\", \"Doe\", 33);\n                pto.setId(\"the-id\");\n                typedTable.delete(pto).get();\n            }\n        }, false, \"TT\");\n    }\n\n    public void testTypedTableDeleteWithParametersFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                PersonTestObjectWithStringId pto = new PersonTestObjectWithStringId(\"John\", \"Doe\", 33);\n                pto.setId(\"the-id\");\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                typedTable.delete(pto, queryParams).get();\n            }\n        }, false, \"QS,TT\");\n    }\n\n    public void testTypedTableLookupFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                typedTable.lookUp(\"1\").get();\n            }\n        }, false, \"TT\");\n    }\n\n    public void testTypedTableLookupWithParametersFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                typedTable.lookUp(\"1\", queryParams).get();\n            }\n        }, false, \"QS,TT\");\n    }\n\n    public void testTypedTableReadFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                typedTable.execute().get();\n            }\n        }, true, \"TT\");\n    }\n\n    public void testTypedQueryFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                typedTable.parameter(\"a\", \"b\").execute().get();\n            }\n        }, true, \"QS,TT\");\n    }\n\n    // JSON tables\n    private JsonObject createJsonObject() {\n        JsonObject result = new JsonObject();\n        result.addProperty(\"id\", \"the-id\");\n        result.addProperty(\"firstName\", \"John\");\n        result.addProperty(\"lastName\", \"Doe\");\n        result.addProperty(\"age\", 33);\n        return result;\n    }\n\n    public void testJsonTableInsertFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                JsonObject jo = createJsonObject();\n                jsonTable.insert(jo).get();\n            }\n        }, false, \"TU\");\n    }\n\n    public void testJsonTableInsertWithParametersFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                JsonObject jo = createJsonObject();\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                jsonTable.insert(jo, queryParams).get();\n            }\n        }, false, \"QS,TU\");\n    }\n\n    public void testJsonTableInsertWithEmptyParametersFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                JsonObject jo = createJsonObject();\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                jsonTable.insert(jo, queryParams).get();\n            }\n        }, false, \"TU\");\n    }\n\n    public void testJsonTableUpdateFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                JsonObject jo = createJsonObject();\n                jsonTable.update(jo).get();\n            }\n        }, false, \"TU\");\n    }\n\n    public void testJsonTableUpdateWithParametersFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                JsonObject jo = createJsonObject();\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                jsonTable.update(jo, queryParams).get();\n            }\n        }, false, \"QS,TU\");\n    }\n\n    public void testJsonTableDeleteFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                JsonObject jo = createJsonObject();\n                jsonTable.delete(jo).get();\n            }\n        }, false, \"TU\");\n    }\n\n    public void testJsonTableDeleteWithParametersFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                JsonObject jo = createJsonObject();\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                jsonTable.delete(jo, queryParams).get();\n            }\n        }, false, \"QS,TU\");\n    }\n\n    public void testJsonTableLookupFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                jsonTable.lookUp(\"1\").get();\n            }\n        }, false, \"TU\");\n    }\n\n    public void testJsonTableLookupWithParametersFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                jsonTable.lookUp(\"1\", queryParams).get();\n            }\n        }, false, \"QS,TU\");\n    }\n\n    public void testJsonTableReadFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                jsonTable.execute().get();\n            }\n        }, true, \"TU\");\n    }\n\n    public void testJsonQueryFeatureHeader() {\n        testTableFeatureHeader(new TableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception {\n                jsonTable.parameter(\"a\", \"b\").execute().get();\n            }\n        }, true, \"QS,TU\");\n    }\n\n    private void testTableFeatureHeader(TableTestOperation operation, final boolean responseIsArray, final String expectedFeaturesHeader) {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n                String featuresHeaderName = \"X-ZUMO-FEATURES\";\n\n                Header[] headers = request.getHeaders();\n                String features = null;\n                for (int i = 0; i < headers.length; i++) {\n                    if (headers[i].getName() == featuresHeaderName) {\n                        features = headers[i].getValue();\n                    }\n                }\n\n                if (features == null) {\n                    resultFuture.setException(new Exception(\"No \" + featuresHeaderName + \" header on API call\"));\n                } else if (!features.equals(expectedFeaturesHeader)) {\n                    resultFuture.setException(new Exception(\"Incorrect features header; expected \" + expectedFeaturesHeader + \", actual \" + features));\n                } else {\n                    ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                    String content = \"{\\\"id\\\":\\\"the-id\\\",\\\"firstName\\\":\\\"John\\\",\\\"lastName\\\":\\\"Doe\\\",\\\"age\\\":33}\";\n                    if (responseIsArray) {\n                        content = \"[\" + content + \"]\";\n                    }\n                    response.setContent(content);\n                    resultFuture.set(response);\n                }\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            MobileServiceTable<PersonTestObjectWithStringId> typedTable = client.getTable(PersonTestObjectWithStringId.class);\n            MobileServiceJsonTable jsonTable = client.getTable(\"Person\");\n            operation.executeOperation(typedTable, jsonTable);\n        } catch (Exception exception) {\n            Throwable ex = exception;\n            while (ex instanceof ExecutionException || ex instanceof MobileServiceException) {\n                ex = ex.getCause();\n            }\n            ex.printStackTrace();\n            fail(ex.getMessage());\n        }\n    }\n\n    public void testJsonApiFeatureHeader() {\n        testInvokeApiFeatureHeader(new ClientTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client) throws Exception {\n                client.invokeApi(\"foo\").get();\n            }\n\n        }, \"AJ\");\n    }\n\n    public void testJsonApiWithQueryParametersFeatureHeader() {\n        testInvokeApiFeatureHeader(new ClientTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client) throws Exception {\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                client.invokeApi(\"apiName\", \"DELETE\", queryParams).get();\n            }\n\n        }, \"AJ,QS\");\n    }\n\n    public void testTypedApiFeatureHeader() {\n        testInvokeApiFeatureHeader(new ClientTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client) throws Exception {\n                client.invokeApi(\"apiName\", Address.class).get();\n            }\n\n        }, \"AT\");\n    }\n\n    public void testTypedApiWithQueryParametersFeatureHeader() {\n        testInvokeApiFeatureHeader(new ClientTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client) throws Exception {\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                client.invokeApi(\"apiName\", \"GET\", queryParams, Address.class).get();\n            }\n\n        }, \"AT,QS\");\n    }\n\n    public void testGenericApiFeatureHeader() {\n        testInvokeApiFeatureHeader(new ClientTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client) throws Exception {\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                List<Pair<String, String>> requestHeaders = new ArrayList<Pair<String, String>>();\n                requestHeaders.add(new Pair<String, String>(\"Content-Type\", \"text/plain\"));\n                byte[] content = \"hello world\".getBytes();\n                client.invokeApi(\"apiName\", content, \"POST\", requestHeaders, queryParams).get();\n            }\n\n        }, \"AG\");\n    }\n\n    public void testGenericApiDoesNotOverrideExistingFeatureHeader() {\n        testInvokeApiFeatureHeader(new ClientTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client) throws Exception {\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                List<Pair<String, String>> requestHeaders = new ArrayList<Pair<String, String>>();\n                requestHeaders.add(new Pair<String, String>(\"Content-Type\", \"text/plain\"));\n                requestHeaders.add(new Pair<String, String>(\"X-ZUMO-FEATURES\", \"something\"));\n                byte[] content = \"hello world\".getBytes();\n                client.invokeApi(\"apiName\", content, \"POST\", requestHeaders, queryParams).get();\n            }\n\n        }, \"something\");\n    }\n\n    private void testInvokeApiFeatureHeader(ClientTestOperation operation, final String expectedFeaturesHeader) {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n                String featuresHeaderName = \"X-ZUMO-FEATURES\";\n\n                Header[] headers = request.getHeaders();\n                String features = null;\n                for (int i = 0; i < headers.length; i++) {\n                    if (headers[i].getName() == featuresHeaderName) {\n                        features = headers[i].getValue();\n                    }\n                }\n\n                if (features == null) {\n                    resultFuture.setException(new Exception(\"No \" + featuresHeaderName + \" header on API call\"));\n                } else if (!features.equals(expectedFeaturesHeader)) {\n                    resultFuture.setException(new Exception(\"Incorrect features header; expected \" + expectedFeaturesHeader + \", actual \" + features));\n                } else {\n                    ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                    response.setContent(\"{}\");\n                    resultFuture.set(response);\n                }\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            operation.executeOperation(client);\n        } catch (Exception exception) {\n            Throwable ex = exception;\n            while (ex instanceof ExecutionException || ex instanceof MobileServiceException) {\n                ex = ex.getCause();\n            }\n            fail(ex.getMessage());\n        }\n    }\n\n    public void testTypedSyncTablePullFeatureHeader() {\n        // Both typed and untyped sync tables are treated as untyped\n        // in the offline implementation\n        testSyncTablePullOperationsFeatureHeader(new OfflineTableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client, MobileServiceSyncTable<PersonTestObjectWithStringId> typedTable,\n                                         MobileServiceJsonSyncTable jsonTable) throws Exception {\n                ExecutableQuery<PersonTestObjectWithStringId> query = client.getTable(PersonTestObjectWithStringId.class).where();\n                typedTable.pull(query).get();\n            }\n        }, \"OL,TU\");\n    }\n\n    public void testJsonSyncTablePullFeatureHeader() {\n        // Both typed and untyped sync tables are treated as untyped\n        // in the offline implementation\n        testSyncTablePullOperationsFeatureHeader(new OfflineTableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client, MobileServiceSyncTable<PersonTestObjectWithStringId> typedTable,\n                                         MobileServiceJsonSyncTable jsonTable) throws Exception {\n                ExecutableJsonQuery query = client.getTable(\"Person\").where();\n                jsonTable.pull(query).get();\n            }\n        }, \"OL,TU\");\n    }\n\n    public void testTypedSyncTablePushFeatureHeader() {\n        // Both typed and untyped sync tables are treated as untyped\n        // in the offline implementation\n        testSyncTableOperationsFeatureHeader(new OfflineTableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client, MobileServiceSyncTable<PersonTestObjectWithStringId> typedTable,\n                                         MobileServiceJsonSyncTable jsonTable) throws Exception {\n                PersonTestObjectWithStringId pto = new PersonTestObjectWithStringId(\"John\", \"Doe\", 33);\n                typedTable.insert(pto).get();\n                client.getSyncContext().push().get();\n            }\n        }, \"OL,TU\");\n    }\n\n    public void testJsonSyncTablePushFeatureHeader() {\n        // Both typed and untyped sync tables are treated as untyped\n        // in the offline implementation\n        testSyncTableOperationsFeatureHeader(new OfflineTableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client, MobileServiceSyncTable<PersonTestObjectWithStringId> typedTable,\n                                         MobileServiceJsonSyncTable jsonTable) throws Exception {\n                JsonObject obj = createJsonObject();\n                jsonTable.insert(obj).get();\n                client.getSyncContext().push().get();\n            }\n        }, \"OL,TU\");\n    }\n\n    public void testTypedSyncTablePushMultipleItemsFeatureHeader() {\n        // Both typed and untyped sync tables are treated as untyped\n        // in the offline implementation\n        testSyncTableOperationsFeatureHeader(new OfflineTableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client, MobileServiceSyncTable<PersonTestObjectWithStringId> typedTable,\n                                         MobileServiceJsonSyncTable jsonTable) throws Exception {\n                PersonTestObjectWithStringId pto = new PersonTestObjectWithStringId(\"John\", \"Doe\", 33);\n                typedTable.insert(pto).get();\n                pto = new PersonTestObjectWithStringId(\"Jane\", \"Roe\", 34);\n                typedTable.insert(pto).get();\n                client.getSyncContext().push().get();\n            }\n        }, \"OL,TU\");\n    }\n\n    public void testJsonSyncTablePushMultipleItemsFeatureHeader() {\n        // Both typed and untyped sync tables are treated as untyped\n        // in the offline implementation\n        testSyncTableOperationsFeatureHeader(new OfflineTableTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client, MobileServiceSyncTable<PersonTestObjectWithStringId> typedTable,\n                                         MobileServiceJsonSyncTable jsonTable) throws Exception {\n                JsonObject obj = createJsonObject();\n                jsonTable.insert(obj).get();\n                obj = createJsonObject();\n                obj.remove(\"id\");\n                obj.addProperty(\"id\", \"another-id\");\n                jsonTable.insert(obj).get();\n                client.getSyncContext().push().get();\n            }\n        }, \"OL,TU\");\n    }\n\n    private void testSyncTableOperationsFeatureHeader(OfflineTableTestOperation operation, final String expectedFeaturesHeader) {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        boolean fistPullPage = false;\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n                String featuresHeaderName = \"X-ZUMO-FEATURES\";\n\n                Header[] headers = request.getHeaders();\n                String features = null;\n                for (int i = 0; i < headers.length; i++) {\n                    if (headers[i].getName() == featuresHeaderName) {\n                        features = headers[i].getValue();\n                    }\n                }\n\n                if (features == null) {\n                    resultFuture.setException(new Exception(\"No \" + featuresHeaderName + \" header on API call\"));\n                } else if (!features.equals(expectedFeaturesHeader)) {\n                    resultFuture.setException(new Exception(\"Incorrect features header; expected \" + expectedFeaturesHeader + \", actual \" + features));\n                } else {\n                    ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                    Uri requestUri = Uri.parse(request.getUrl());\n\n                    String content = \"[]\";\n\n                    //if (fistPullPage) {\n                        content = \"{\\\"id\\\":\\\"the-id\\\",\\\"firstName\\\":\\\"John\\\",\\\"lastName\\\":\\\"Doe\\\",\\\"age\\\":33}\";\n\n                        if (request.getMethod().equalsIgnoreCase(\"GET\") && requestUri.getPathSegments().size() == 2) {\n                            // GET which should return an array of results\n                            content = \"[\" + content + \"]\";\n                        }\n\n                        //fistPullPage = false;\n                    //}\n\n                    response.setContent(content);\n                    resultFuture.set(response);\n                }\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n            tableDefinition.put(\"id\", ColumnDataType.String);\n            tableDefinition.put(\"firstName\", ColumnDataType.String);\n            tableDefinition.put(\"lastName\", ColumnDataType.String);\n            tableDefinition.put(\"age\", ColumnDataType.Integer);\n            store.defineTable(\"Person\", tableDefinition);\n\n            client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n            MobileServiceSyncTable<PersonTestObjectWithStringId> typedTable = client.getSyncTable(PersonTestObjectWithStringId.class);\n            MobileServiceJsonSyncTable jsonTable = client.getSyncTable(\"Person\");\n            operation.executeOperation(client, typedTable, jsonTable);\n        } catch (Exception exception) {\n            Throwable ex = exception;\n            while (ex instanceof ExecutionException || ex instanceof MobileServiceException) {\n                ex = ex.getCause();\n            }\n            fail(ex.getMessage());\n        }\n    }\n\n    private void testSyncTablePullOperationsFeatureHeader(OfflineTableTestOperation operation, final String expectedFeaturesHeader) {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                boolean isFirstPage = request.getUrl().contains(\"$skip=0\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n                String featuresHeaderName = \"X-ZUMO-FEATURES\";\n\n                Header[] headers = request.getHeaders();\n                String features = null;\n                for (int i = 0; i < headers.length; i++) {\n                    if (headers[i].getName() == featuresHeaderName) {\n                        features = headers[i].getValue();\n                    }\n                }\n\n                if (features == null) {\n                    resultFuture.setException(new Exception(\"No \" + featuresHeaderName + \" header on API call\"));\n                } else if (!features.equals(expectedFeaturesHeader)) {\n                    resultFuture.setException(new Exception(\"Incorrect features header; expected \" + expectedFeaturesHeader + \", actual \" + features));\n                } else {\n                    ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                    Uri requestUri = Uri.parse(request.getUrl());\n\n                    String content = \"[]\";\n\n                    if (isFirstPage) {\n                        content = \"{\\\"id\\\":\\\"the-id\\\",\\\"firstName\\\":\\\"John\\\",\\\"lastName\\\":\\\"Doe\\\",\\\"age\\\":33}\";\n\n                        if (request.getMethod().equalsIgnoreCase(\"GET\") && requestUri.getPathSegments().size() == 2) {\n                            // GET which should return an array of results\n                            content = \"[\" + content + \"]\";\n                        }\n\n                    }\n\n                    response.setContent(content);\n                    resultFuture.set(response);\n                }\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n            tableDefinition.put(\"id\", ColumnDataType.String);\n            tableDefinition.put(\"firstName\", ColumnDataType.String);\n            tableDefinition.put(\"lastName\", ColumnDataType.String);\n            tableDefinition.put(\"age\", ColumnDataType.Integer);\n            store.defineTable(\"Person\", tableDefinition);\n\n            client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n            MobileServiceSyncTable<PersonTestObjectWithStringId> typedTable = client.getSyncTable(PersonTestObjectWithStringId.class);\n            MobileServiceJsonSyncTable jsonTable = client.getSyncTable(\"Person\");\n            operation.executeOperation(client, typedTable, jsonTable);\n        } catch (Exception exception) {\n            Throwable ex = exception;\n            while (ex instanceof ExecutionException || ex instanceof MobileServiceException) {\n                ex = ex.getCause();\n            }\n            fail(ex.getMessage());\n        }\n    }\n\n    public void testJsonTableUpdateWithVersionFeatureHeader() {\n        testOpportunisticConcurrencyOperationsFeatureHeader(new OpportunisticConcurrencyTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client) throws Exception {\n                MobileServiceJsonTable jsonTable = client.getTable(\"Person\");\n                jsonTable.setSystemProperties(EnumSet.of(MobileServiceSystemProperty.Version));\n                JsonObject jo = createJsonObject();\n                jo.addProperty(\"__version\", \"abc\");\n                List<Pair<String, String>> queryParams = new ArrayList<Pair<String, String>>();\n                queryParams.add(new Pair<String, String>(\"a\", \"b\"));\n                jsonTable.update(jo, queryParams).get();\n            }\n        }, \"OC,QS,TU\");\n    }\n\n    public void testTypedTableUpdateWithVersionFeatureHeader() {\n        testOpportunisticConcurrencyOperationsFeatureHeader(new OpportunisticConcurrencyTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client) throws Exception {\n                MobileServiceTable<VersionType> table = client.getTable(VersionType.class);\n                VersionType obj = new VersionType();\n                obj.Version = \"abc\";\n                obj.Id = \"the-id\";\n                table.update(obj).get();\n            }\n        }, \"OC,TT\");\n    }\n\n    public void testOfflinePushWithVersionFeatureHeader() {\n        testOpportunisticConcurrencyOperationsFeatureHeader(new OpportunisticConcurrencyTestOperation() {\n\n            @Override\n            public void executeOperation(MobileServiceClient client) throws Exception {\n                MobileServiceSyncTable<VersionType> table = client.getSyncTable(VersionType.class);\n                VersionType obj = new VersionType();\n                obj.Version = \"abc\";\n                obj.Id = \"the-id\";\n                table.update(obj).get();\n                client.getSyncContext().push().get();\n            }\n        }, \"OC,OL,TU\");\n    }\n\n    private void testOpportunisticConcurrencyOperationsFeatureHeader(OpportunisticConcurrencyTestOperation operation, final String expectedFeaturesHeader) {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n                String featuresHeaderName = \"X-ZUMO-FEATURES\";\n\n                Header[] headers = request.getHeaders();\n                String features = null;\n                for (int i = 0; i < headers.length; i++) {\n                    if (headers[i].getName() == featuresHeaderName) {\n                        features = headers[i].getValue();\n                    }\n                }\n\n                if (features == null) {\n                    resultFuture.setException(new Exception(\"No \" + featuresHeaderName + \" header on API call\"));\n                } else if (!features.equals(expectedFeaturesHeader)) {\n                    resultFuture.setException(new Exception(\"Incorrect features header; expected \" + expectedFeaturesHeader + \", actual \" + features));\n                } else {\n                    ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                    Uri requestUri = Uri.parse(request.getUrl());\n                    String content = \"{\\\"id\\\":\\\"the-id\\\",\\\"firstName\\\":\\\"John\\\",\\\"lastName\\\":\\\"Doe\\\",\\\"age\\\":33}\";\n                    if (request.getMethod().equalsIgnoreCase(\"GET\") && requestUri.getPathSegments().size() == 2) {\n                        // GET which should return an array of results\n                        content = \"[\" + content + \"]\";\n                    }\n                    response.setContent(content);\n                    resultFuture.set(response);\n                }\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n            tableDefinition.put(\"id\", ColumnDataType.String);\n            tableDefinition.put(\"firstName\", ColumnDataType.String);\n            tableDefinition.put(\"lastName\", ColumnDataType.String);\n            tableDefinition.put(\"age\", ColumnDataType.Integer);\n            store.defineTable(\"Person\", tableDefinition);\n\n            client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n            operation.executeOperation(client);\n        } catch (Exception exception) {\n            Throwable ex = exception;\n            while (ex instanceof ExecutionException || ex instanceof MobileServiceException) {\n                ex = ex.getCause();\n            }\n            fail(ex.getMessage());\n        }\n    }\n\n    // Tests for tables\n    interface TableTestOperation {\n        void executeOperation(MobileServiceTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonTable jsonTable) throws Exception;\n    }\n\n    // Tests for custom APIs\n    interface ClientTestOperation {\n        void executeOperation(MobileServiceClient client) throws Exception;\n    }\n\n    // Tests for offline push / pull\n    interface OfflineTableTestOperation {\n        void executeOperation(MobileServiceClient client, MobileServiceSyncTable<PersonTestObjectWithStringId> typedTable, MobileServiceJsonSyncTable jsonTable)\n                throws Exception;\n    }\n\n    // Tests for opportunistic concurrency (conditional updates)\n    interface OpportunisticConcurrencyTestOperation {\n        void executeOperation(MobileServiceClient client) throws Exception;\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/MobileServiceQueryTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.test.InstrumentationTestCase;\n\nimport com.google.gson.GsonBuilder;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.helpers.EncodingUtilities;\nimport com.microsoft.windowsazure.mobileservices.table.DateTimeOffset;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryODataWriter;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\n\nimport java.util.Calendar;\nimport java.util.Date;\nimport java.util.GregorianCalendar;\nimport java.util.TimeZone;\n\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.field;\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.val;\n\npublic class MobileServiceQueryTests extends InstrumentationTestCase {\n\n    String appUrl = \"\";\n    String appKey = \"\";\n    GsonBuilder gsonBuilder;\n    MobileServiceClient client;\n    MobileServiceJsonTable table;\n\n    private static Date getUTCDate(int year, int month, int day, int hour, int minute, int second) {\n        GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone(\"utc\"));\n        int dateMonth = month - 1;\n        calendar.set(year, dateMonth, day, hour, minute, second);\n        calendar.set(Calendar.MILLISECOND, 0);\n\n        return calendar.getTime();\n    }\n\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com/\";\n        appKey = \"qwerty\";\n        gsonBuilder = new GsonBuilder();\n        client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        table = client.getTable(\"TableName\");\n        super.setUp();\n    }\n\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    public void testReturnAllRows() throws Throwable {\n\n        // Create empty query\n        Query query = table.where();\n\n        // Assert\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(\"\", QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testSelectSpecificField() throws Throwable {\n\n        // Create query\n        Query query = table.select(\"Id\", \"Name\");\n\n        // Assert\n        String expectedModifiers = \"&$select=Id,Name\";\n        expectedModifiers = EncodingUtilities.percentEncodeSpaces(expectedModifiers);\n        assertEquals(expectedModifiers, QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(\"\", QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testUserDefinedParameters() throws Throwable {\n\n        // Create query\n        Query query = table.parameter(\"firstname\", \"john\").parameter(\"lastname\", null);\n\n        // Assert\n        String expectedModifiers = \"&firstname=john&lastname=null\";\n        expectedModifiers = EncodingUtilities.percentEncodeSpaces(expectedModifiers);\n        assertEquals(expectedModifiers, QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(\"\", QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testOrderByAscending() throws Throwable {\n\n        // Create query\n        Query query = table.orderBy(\"Name\", QueryOrder.Ascending);\n\n        // Assert\n        String expectedModifiers = \"&$orderby=Name asc\";\n        expectedModifiers = EncodingUtilities.percentEncodeSpaces(expectedModifiers);\n        assertEquals(expectedModifiers, QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(\"\", QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testIncludeDeleted() throws Throwable {\n\n        // Create query\n        Query query = table.includeDeleted();\n\n        // Assert\n        String expectedModifiers = \"&__includeDeleted=true\";\n        expectedModifiers = EncodingUtilities.percentEncodeSpaces(expectedModifiers);\n        assertEquals(expectedModifiers, QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(\"\", QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testOrderByDescending() throws Throwable {\n\n        // Create query\n        Query query = table.orderBy(\"Name\", QueryOrder.Descending);\n\n        // Assert\n        String expectedModifiers = \"&$orderby=Name desc\";\n        expectedModifiers = EncodingUtilities.percentEncodeSpaces(expectedModifiers);\n        assertEquals(expectedModifiers, QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(\"\", QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testOrderByWithMultipleFields() throws Throwable {\n\n        // Create query\n        Query query = table.orderBy(\"Name\", QueryOrder.Ascending).orderBy(\"Age\", QueryOrder.Descending);\n\n        // Assert\n        String expectedModifiers = \"&$orderby=Name asc,Age desc\";\n        expectedModifiers = EncodingUtilities.percentEncodeSpaces(expectedModifiers);\n        assertEquals(expectedModifiers, QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(\"\", QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testSkip() throws Throwable {\n\n        // Create query\n        Query query = table.skip(10);\n\n        // Assert\n        String expectedModifiers = \"&$skip=10\";\n        expectedModifiers = EncodingUtilities.percentEncodeSpaces(expectedModifiers);\n        assertEquals(expectedModifiers, QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(\"\", QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testTop() throws Throwable {\n\n        // Create query\n        Query query = table.top(5);\n\n        // Assert\n        String expectedModifiers = \"&$top=5\";\n        expectedModifiers = EncodingUtilities.percentEncodeSpaces(expectedModifiers);\n        assertEquals(expectedModifiers, QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(\"\", QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testSkipAndTop() throws Throwable {\n\n        // Create query\n        Query query = table.skip(10).top(3);\n\n        // Assert\n        String expectedModifiers = \"&$top=3&$skip=10\";\n        expectedModifiers = EncodingUtilities.percentEncodeSpaces(expectedModifiers);\n        assertEquals(expectedModifiers, QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(\"\", QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testGreaterThan() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"age\").gt().val(3);\n\n        // Assert\n        String expectedFilters = \"age gt 3\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"age\").gt(3);\n\n        // Assert\n        expectedFilters = \"age gt (3)\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testGreaterThanOrEquals() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"age\").ge().val(3);\n\n        // Assert\n        String expectedFilters = \"age ge 3\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"age\").ge(3);\n\n        // Assert\n        expectedFilters = \"age ge (3)\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n    }\n\n    public void testLessThan() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"age\").le().val(3);\n\n        // Assert\n        String expectedFilters = \"age le 3\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"age\").le(3);\n\n        // Assert\n        expectedFilters = \"age le (3)\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n    }\n\n    public void testLessThanOrEquals() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"age\").le().val(3);\n\n        // Assert\n        String expectedFilters = \"age le 3\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"age\").le(3);\n\n        // Assert\n        expectedFilters = \"age le (3)\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n    }\n\n    public void testEquals() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"age\").eq().val(3);\n\n        // Assert\n        String expectedFilters = \"age eq 3\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"age\").eq(3);\n\n        // Assert\n        expectedFilters = \"age eq (3)\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testNotEquals() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"age\").ne().val(3);\n\n        // Assert\n        String expectedFilters = \"age ne 3\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"age\").ne(3);\n\n        // Assert\n        expectedFilters = \"age ne (3)\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testDate() throws Throwable {\n\n        // Create query\n\n        Query query = table.where().field(\"birthdate\").eq().val(getUTCDate(1986, 6, 30, 0, 0, 0));\n\n        // Assert\n        String expectedFilters = \"birthdate eq datetime'1986-06-30T00:00:00.000Z'\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n\n        query = table.where().field(\"birthdate\").eq(getUTCDate(1986, 6, 30, 0, 0, 0));\n\n        // Assert\n        expectedFilters = \"birthdate eq (datetime'1986-06-30T00:00:00.000Z')\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testDateTimeOffset() throws Throwable {\n\n        // Create query\n\n        Query query = table.where().field(\"birthdate\").eq().val(new DateTimeOffset(getUTCDate(1986, 6, 30, 0, 0, 0)));\n\n        // Assert\n        String expectedFilters = \"birthdate eq datetimeoffset'1986-06-30T00:00:00.000Z'\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n\n        query = table.where().field(\"birthdate\").eq(new DateTimeOffset(getUTCDate(1986, 6, 30, 0, 0, 0)));\n\n        // Assert\n        expectedFilters = \"birthdate eq (datetimeoffset'1986-06-30T00:00:00.000Z')\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n\n\n    public void testAnd() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"age\").eq().val(18).and().field(\"name\").eq().val(\"John\");\n\n        // Assert\n        String expectedFilters = \"age eq 18 and name eq 'John'\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"age\").eq().val(18).and(field(\"name\").eq().val(\"John\"));\n\n        // Assert\n        expectedFilters = \"age eq 18 and (name eq 'John')\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n    }\n\n    public void testOr() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"age\").eq().val(18).or().field(\"name\").eq().val(\"John\");\n\n        // Assert\n        String expectedFilters = \"age eq 18 or name eq 'John'\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"age\").eq().val(18).or(field(\"name\").eq().val(\"John\").and().field(\"lastname\").eq().val(\"Doe\"));\n\n        // Assert\n        expectedFilters = \"age eq 18 or (name eq 'John' and lastname eq 'Doe')\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testNot() throws Throwable {\n\n        // Create query\n        Query query = table.where().not(field(\"age\").eq().val(15));\n\n        // Assert\n        String expectedFilters = \"not (age eq 15)\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().not(field(\"age\").eq(val(15)));\n\n        // Assert\n        expectedFilters = \"not (age eq (15))\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n    }\n\n    public void testAdd() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"age\").add().val(2).eq().val(18);\n\n        // Assert\n        String expectedFilters = \"age add 2 eq 18\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"age\").add(val(2)).eq().val(18);\n\n        // Assert\n        expectedFilters = \"age add (2) eq 18\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testSub() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"age\").sub().val(2).eq().val(16);\n\n        // Assert\n        String expectedFilters = \"age sub 2 eq 16\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"age\").sub(val(2)).eq().val(16);\n\n        // Assert\n        expectedFilters = \"age sub (2) eq 16\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testMul() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"age\").mul().val(2).eq().val(16);\n\n        // Assert\n        String expectedFilters = \"age mul 2 eq 16\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"age\").mul(val(2)).eq().val(16);\n\n        // Assert\n        expectedFilters = \"age mul (2) eq 16\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n    }\n\n    public void testDiv() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"age\").div().val(2).eq().val(8);\n\n        // Assert\n        String expectedFilters = \"age div 2 eq 8\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"age\").div(val(2)).eq().val(8);\n\n        // Assert\n        expectedFilters = \"age div (2) eq 8\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n    }\n\n    public void testMod() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"price\").mod().val(2).eq().val(1);\n\n        // Assert\n        String expectedFilters = \"price mod 2 eq 1\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().field(\"price\").mod(val(2)).eq().val(1);\n\n        // Assert\n        expectedFilters = \"price mod (2) eq 1\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testYear() throws Throwable {\n\n        // Create query\n        Query query = table.where().year(field(\"date\")).eq().val(2013);\n\n        // Assert\n        String expectedFilters = \"year(date) eq 2013\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testMonth() throws Throwable {\n\n        // Create query\n        Query query = table.where().month(field(\"date\")).eq().val(8);\n\n        // Assert\n        String expectedFilters = \"month(date) eq 8\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testDay() throws Throwable {\n\n        // Create query\n        Query query = table.where().day(field(\"date\")).eq().val(3);\n\n        // Assert\n        String expectedFilters = \"day(date) eq 3\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testHour() throws Throwable {\n\n        // Create query\n        Query query = table.where().hour(field(\"date\")).eq().val(10);\n\n        // Assert\n        String expectedFilters = \"hour(date) eq 10\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testMinute() throws Throwable {\n\n        // Create query\n        Query query = table.where().minute(field(\"date\")).eq().val(15);\n\n        // Assert\n        String expectedFilters = \"minute(date) eq 15\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testSecond() throws Throwable {\n\n        // Create query\n        Query query = table.where().second(field(\"date\")).eq().val(11);\n\n        // Assert\n        String expectedFilters = \"second(date) eq 11\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testFloor() throws Throwable {\n\n        // Create query\n        Query query = table.where().floor(field(\"price\")).gt().val(10);\n\n        // Assert\n        String expectedFilters = \"floor(price) gt 10\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testCeiling() throws Throwable {\n\n        // Create query\n        Query query = table.where().ceiling(field(\"price\")).gt().val(10);\n\n        // Assert\n        String expectedFilters = \"ceiling(price) gt 10\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testRound() throws Throwable {\n\n        // Create query\n        Query query = table.where().round(field(\"price\")).gt().val(5);\n\n        // Assert\n        String expectedFilters = \"round(price) gt 5\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testStarstWith() throws Throwable {\n\n        // Create query\n        Query query = table.where().startsWith(field(\"Name\"), val(\"Jo\"));\n\n        // Assert\n        String expectedFilters = \"startswith(Name,'Jo')\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testEndsWith() throws Throwable {\n\n        // Create query\n        Query query = table.where().endsWith(field(\"Name\"), val(\"in\"));\n\n        // Assert\n        String expectedFilters = \"endswith(Name,'in')\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testSubstringOf() throws Throwable {\n\n        // Create query\n        Query query = table.where().subStringOf(field(\"FirstName\"), field(\"LastName\"));\n\n        // Assert\n        String expectedFilters = \"substringof(FirstName,LastName)\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testConcat() throws Throwable {\n\n        // Create query\n        Query query = table.where().concat(field(\"FirstName\"), field(\"LastName\")).eq().val(\"JohnDoe\");\n\n        // Assert\n        String expectedFilters = \"concat(FirstName,LastName) eq 'JohnDoe'\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testIndexOf() throws Throwable {\n\n        // Create query\n        Query query = table.where().indexOf(field(\"Name\"), val(\"do\")).ne().val(-1);\n\n        // Assert\n        String expectedFilters = \"indexof(Name,'do') ne -1\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testSubstring() throws Throwable {\n\n        // Create query\n        Query query = table.where().subString(field(\"ProductCode\"), val(3)).eq().val(\"FOO\");\n\n        // Assert\n        String expectedFilters = \"substring(ProductCode,3) eq 'FOO'\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        // Create query\n        query = table.where().subString(field(\"ProductCode\"), val(1), val(2)).eq().val(\"FC\");\n        expectedFilters = \"substring(ProductCode,1,2) eq 'FC'\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testReplace() throws Throwable {\n\n        // Create query\n        Query query = table.where().replace(field(\"Description\"), val(\" \"), val(\"-\")).eq().val(\"Code-1\");\n\n        // Assert\n        String expectedFilters = \"replace(Description,' ','-') eq 'Code-1'\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testToLower() throws Throwable {\n\n        // Create query\n        Query query = table.where().toLower(field(\"Description\")).eq(\"code-1\");\n\n        // Assert\n        String expectedFilters = \"tolower(Description) eq ('code-1')\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        query = table.where().toLower(\"Description\").eq(\"code-1\");\n\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testToUpper() throws Throwable {\n\n        // Create query\n        Query query = table.where().toUpper(field(\"Description\")).eq(\"code-1\");\n\n        // Assert\n        String expectedFilters = \"toupper(Description) eq ('code-1')\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        query = table.where().toUpper(\"Description\").eq(\"code-1\");\n\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testTrim() throws Throwable {\n\n        // Create query\n        Query query = table.where().trim(field(\"Description\")).eq(\"code-1\");\n\n        // Assert\n        String expectedFilters = \"trim(Description) eq ('code-1')\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        query = table.where().trim(\"Description\").eq(\"code-1\");\n\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testLength() throws Throwable {\n\n        // Create query\n        Query query = table.where().length(field(\"Description\")).eq(5);\n\n        // Assert\n        String expectedFilters = \"length(Description) eq (5)\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n\n        query = table.where().length(\"Description\").eq(5);\n\n        assertEquals(\"\", QueryODataWriter.getRowSetModifiers(query, table));\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n    }\n\n    public void testComplexQueries() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"firstName\").eq().val(\"John\").and().field(\"age\").gt().val(20).select(\"Id\", \"Name\")\n                .orderBy(\"Name\", QueryOrder.Ascending).skip(5).top(3);\n        // Asserts\n        String expectedFilters = \"firstName eq 'John' and age gt 20\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n        String expectedModifiers = \"&$top=3&$skip=5&$orderby=Name asc&$select=Id,Name\";\n        expectedModifiers = EncodingUtilities.percentEncodeSpaces(expectedModifiers);\n        assertEquals(expectedModifiers, QueryODataWriter.getRowSetModifiers(query, table));\n\n        // Create query\n        Query query2 = table.where(field(\"id\").gt().val(1)).and(field(\"complete\").eq().val(true));\n        // Asserts\n        assertEquals(EncodingUtilities.percentEncodeSpaces(\"(id gt 1) and (complete eq true)\"), QueryODataWriter.getRowFilter(query2));\n\n        // Create query\n        Query query3 = table.where(field(\"id\").gt().val(1)).and(field(\"age\").eq().val(13).or().field(\"complete\").eq().val(true));\n        // Asserts\n        assertEquals(EncodingUtilities.percentEncodeSpaces(\"(id gt 1) and (age eq 13 or complete eq true)\"), QueryODataWriter.getRowFilter(query3));\n\n        // Create query\n        Query query4 = table.where().field(\"id\").gt().val(1).and(field(\"age\").eq().val(13).or().field(\"complete\").eq().val(true));\n        // Asserts\n        assertEquals(EncodingUtilities.percentEncodeSpaces(\"id gt 1 and (age eq 13 or complete eq true)\"), QueryODataWriter.getRowFilter(query4));\n    }\n\n    public void testComplexQueriesWithStringId() throws Throwable {\n\n        // Create query\n        Query query = table.where().field(\"firstName\").eq().val(\"John\").and().field(\"age\").gt().val(20).select(\"Id\", \"Name\")\n                .orderBy(\"Name\", QueryOrder.Ascending).skip(5).top(3);\n        // Asserts\n        String expectedFilters = \"firstName eq 'John' and age gt 20\";\n        expectedFilters = EncodingUtilities.percentEncodeSpaces(expectedFilters);\n        assertEquals(expectedFilters, QueryODataWriter.getRowFilter(query));\n        String expectedModifiers = \"&$top=3&$skip=5&$orderby=Name asc&$select=Id,Name\";\n        expectedModifiers = EncodingUtilities.percentEncodeSpaces(expectedModifiers);\n        assertEquals(expectedModifiers, QueryODataWriter.getRowSetModifiers(query, table));\n\n        // Create query\n        Query query2 = table.where(field(\"id\").gt().val(\"1\")).and(field(\"complete\").eq().val(true));\n        // Asserts\n        assertEquals(EncodingUtilities.percentEncodeSpaces(\"(id gt '1') and (complete eq true)\"), QueryODataWriter.getRowFilter(query2));\n\n        // Create query\n        Query query3 = table.where(field(\"id\").gt().val(\"1\")).and(field(\"age\").eq().val(13).or().field(\"complete\").eq().val(true));\n        // Asserts\n        assertEquals(EncodingUtilities.percentEncodeSpaces(\"(id gt '1') and (age eq 13 or complete eq true)\"), QueryODataWriter.getRowFilter(query3));\n\n        // Create query\n        Query query4 = table.where().field(\"id\").eq().val(\"1\").and(field(\"age\").eq().val(13).or().field(\"complete\").eq().val(true));\n        // Asserts\n        assertEquals(EncodingUtilities.percentEncodeSpaces(\"id eq '1' and (age eq 13 or complete eq true)\"), QueryODataWriter.getRowFilter(query4));\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/MobileServiceSyncTableTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.test.InstrumentationTestCase;\n\nimport com.google.common.base.Function;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.gson.GsonBuilder;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterRequestMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.StatusLineMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.mocks.MobileServiceLocalStoreMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.mocks.MobileServiceSyncHandlerMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.helpers.EncodingUtilities;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.CustomFunctionTwoParameters;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.IdPropertyTestClasses.StringIdType;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceExceptionBase;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOperations;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\nimport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceJsonSyncTable;\nimport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncTable;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationKind;\nimport com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException;\nimport com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushStatus;\nimport com.microsoft.windowsazure.mobileservices.table.sync.queue.OperationErrorList;\nimport com.microsoft.windowsazure.mobileservices.table.sync.synchandler.SimpleSyncHandler;\n\nimport org.apache.http.Header;\n\nimport java.io.IOException;\nimport java.net.MalformedURLException;\nimport java.text.SimpleDateFormat;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.LinkedHashMap;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.TimeZone;\nimport java.util.concurrent.ExecutionException;\n\npublic class MobileServiceSyncTableTests extends InstrumentationTestCase {\n    String appUrl = \"\";\n    String appKey = \"\";\n    GsonBuilder gsonBuilder;\n    String OperationQueue = \"__operations\";\n    String SyncErrors = \"__errors\";\n\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com/\";\n        appKey = \"qwerty\";\n        gsonBuilder = new GsonBuilder();\n        super.setUp();\n    }\n\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    public void testPushExecutesThePendingOperationsInOrder() throws InterruptedException, ExecutionException, MalformedURLException {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer1 = new ServiceFilterContainer();\n\n        MobileServiceClient client1 = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client1 = client1.withFilter(getTestFilter(serviceFilterContainer1, \"\"));\n\n        client1.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceJsonSyncTable table = client1.getSyncTable(\"someTable\");\n\n        JsonObject item1 = new JsonObject();\n        item1.addProperty(\"id\", \"abc\");\n\n        JsonObject item2 = new JsonObject();\n        item2.addProperty(\"id\", \"def\");\n\n        table.insert(item1).get();\n        table.insert(item2).get();\n\n        assertEquals(serviceFilterContainer1.Requests.size(), 0);\n\n        // create a new service to test that operations are loaded from store\n        ServiceFilterContainer serviceFilterContainer2 = new ServiceFilterContainer();\n\n        MobileServiceClient client2 = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client2 = client2.withFilter(getTestFilter(serviceFilterContainer2, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\", \"{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"What\\\"}\"));\n\n        client2.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        assertEquals(serviceFilterContainer2.Requests.size(), 0);\n        client2.getSyncContext().push().get();\n        assertEquals(serviceFilterContainer2.Requests.size(), 2);\n\n        assertEquals(serviceFilterContainer2.Requests.get(0).Content, item1.toString());\n        // Assert.AreEqual(hijack.Requests[0].Headers.GetValues(\"X-ZUMO-FEATURES\").First(),\n        // \"OL\");\n        assertEquals(serviceFilterContainer2.Requests.get(1).Content, item2.toString());\n        // Assert.AreEqual(hijack.Requests[1].Headers.GetValues(\"X-ZUMO-FEATURES\").First(),\n        // \"OL\");\n\n        // create yet another service to make sure the old items were purged\n        // from queue\n        ServiceFilterContainer serviceFilterContainer3 = new ServiceFilterContainer();\n        MobileServiceClient client3 = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client3 = client3.withFilter(getTestFilter(serviceFilterContainer3, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client3.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        assertEquals(serviceFilterContainer3.Requests.size(), 0);\n        client3.getSyncContext().push().get();\n        assertEquals(serviceFilterContainer3.Requests.size(), 0);\n    }\n\n    public void testPullThrowsWhenPushThrows() throws MalformedURLException, InterruptedException, ExecutionException {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, 401, \"\")); // for\n        // push\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        // insert an item but don't push\n        MobileServiceJsonSyncTable table = client.getSyncTable(\"someTable\");\n\n        JsonObject jsonObject = new JsonObject();\n        jsonObject.addProperty(\"id\", \"abc\");\n\n        table.insert(jsonObject).get();\n\n        assertEquals(store.Tables.get(table.getName().toLowerCase(Locale.getDefault())).size(), 1); // item\n        // is\n        // inserted\n        // this should trigger a push\n        try {\n            table.pull(null).get();\n            fail(\"MobileServicePushFailedException expected\");\n            return;\n        } catch (Exception ex) {\n            if (ex.getCause() instanceof MobileServicePushFailedException) {\n                MobileServicePushFailedException mobileServicePushFailedException = (MobileServicePushFailedException) ex.getCause();\n\n                assertEquals(mobileServicePushFailedException.getPushCompletionResult().getOperationErrors().size(), 0);\n                assertEquals(serviceFilterContainer.Requests.size(), 1);\n            } else {\n                fail(\"MobileServicePushFailedException expected\");\n            }\n        }\n    }\n\n    public void testPullDoesNotPurgeWhenItemIsMissing() throws InterruptedException, ExecutionException, MalformedURLException {\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, false, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\", \"[{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceJsonSyncTable table = client.getSyncTable(\"someTable\");\n\n        JsonObject jsonObject = new JsonObject();\n        jsonObject.addProperty(\"id\", \"abc\");\n\n        table.insert(jsonObject).get(); // insert an item\n\n        client.getSyncContext().push().get(); // push to clear the queue\n\n        // now pull\n        table.pull(null).get();\n\n        assertEquals(store.Tables.get(table.getName().toLowerCase(Locale.getDefault())).size(), 2); // 1\n        // from\n        // remote\n        // and\n        // 1\n        // from\n        // local\n        assertEquals(serviceFilterContainer.Requests.size(), 3);\n    }\n\n    public void testPullDoesNotTriggerPushWhenThereIsNoOperationInTable() throws InterruptedException, ExecutionException, MalformedURLException {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        store.ReadResponses.add(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // for\n        // pull\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, false, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\",\n                \"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        // insert item in pull table\n        MobileServiceJsonSyncTable table1 = client.getSyncTable(\"someTable\");\n\n        JsonObject jsonObject = new JsonObject();\n        jsonObject.addProperty(\"id\", \"abc\");\n\n        table1.insert(jsonObject).get(); // insert an item\n\n        // but push to clear the queue\n        client.getSyncContext().push().get();\n\n        assertEquals(store.Tables.get(table1.getName().toLowerCase(Locale.getDefault())).size(), 1); // item\n        // is\n        // inserted\n        assertEquals(serviceFilterContainer.Requests.size(), 1); // first push\n\n        // then insert item in other table\n        MobileServiceSyncTable<StringIdType> table2 = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"an id\";\n        item.String = \"what?\";\n\n        table2.insert(item).get();\n\n        table1.pull(null).get();\n\n        assertEquals(store.Tables.get(table1.getName().toLowerCase(Locale.getDefault())).size(), 2); // table\n        // should\n        // contain\n        // 2\n        // pulled\n        // items\n        assertEquals(serviceFilterContainer.Requests.size(), 3); // 1 for push\n        // and 1 for\n        // pull\n        assertEquals(store.Tables.get(table2.getName().toLowerCase(Locale.getDefault())).size(), 1); // this\n        // table\n        // should\n        // not\n        // be\n        // touched\n    }\n\n    public void testPullTriggersPushWhenThereIsOperationInTable() throws InterruptedException, ExecutionException, MalformedURLException {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        store.ReadResponses.add(\"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\"); // for\n        // pull\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, false, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\", // for\n                // insert\n                \"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\"}]\" // remote\n                // item\n        ));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        // insert an item but don't push\n        MobileServiceJsonSyncTable table1 = client.getSyncTable(\"someTable\");\n\n        JsonObject jsonObject = new JsonObject();\n        jsonObject.addProperty(\"id\", \"abc\");\n\n        table1.insert(jsonObject).get(); // insert an item\n\n        assertEquals(store.Tables.get(table1.getName().toLowerCase(Locale.getDefault())).size(), 1); // item\n        // is\n        // inserted\n\n        // this should trigger a push\n        table1.pull(null).get();\n\n        assertEquals(serviceFilterContainer.Requests.size(), 3); // 1 for push\n        // and 2 for\n        // pull\n        assertEquals(store.Tables.get(table1.getName().toLowerCase(Locale.getDefault())).size(), 2); // table\n        // is\n        // populated\n    }\n\n    // REVISAR EL TEMA DE LOS HANDLERS Y LAS EXCEPCIONES\n    // public void testPullThrowsWhenPushThrows()\n    // throws MalformedURLException, InterruptedException,\n    // ExecutionException {\n    // MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n    //\n    // MobileServiceClient client = null;\n    //\n    // client = new MobileServiceClient(appUrl, appKey, getInstrumentation()\n    // .getTargetContext());\n    //\n    // client = client.withFilter(getTestFilter(404)); // for push\n    //\n    // client.getSyncContext().initialize(store, new SimpleSyncHandler())\n    // .get();\n    //\n    // // insert an item but don't push\n    // MobileServiceJsonSyncTable table = client.getSyncTable(\"someTable\");\n    //\n    // JsonObject jsonObject = new JsonObject();\n    // jsonObject.addProperty(\"id\", \"abc\");\n    //\n    // table.insert(jsonObject).get(); // insert an item\n    //\n    // assertEquals(store.Tables.get(table.getName().toLowerCase()).size(), 1);\n    // // item\n    // // is\n    // // inserted\n    //\n    // try {\n    // table.pull(null).get();\n    // } catch (Throwable throwable) {\n    //\n    // if (throwable instanceof MobileServicePushFailedException) {\n    // MobileServicePushFailedException ex = (MobileServicePushFailedException)\n    // throwable;\n    // assertEquals(ex.getPushCompletionResult().getOperationErrors()\n    // .size(), 1);\n    // }\n    // }\n    //\n    // // Assert.AreEqual(hijack.Requests.Count, 1); // 1 for push\n    // }\n\n    public void testPullSucceds() throws MalformedURLException, InterruptedException, ExecutionException, MobileServiceException {\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\");\n        sdf.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\n        String updatedAt = sdf.format(new Date());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, false,\n                \"{\\\"count\\\":\\\"2\\\",\\\"results\\\":[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt + \"\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt + \"\\\"}]}\"// remote\n                // item\n        ));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        Query query = QueryOperations.tableName(table.getName()).skip(5).top(3).field(\"String\").eq(\"world\").orderBy(\"Id\", QueryOrder.Descending)\n                .includeInlineCount().select(\"String\");\n\n        table.pull(query).get();\n\n        assertEquals(\n                serviceFilterContainer.Requests.get(0).Url,\n                EncodingUtilities\n                        .percentEncodeSpaces(\n                                \"http://myapp.com/tables/stringidtype?$filter=String%20eq%20('world')&$top=3&$skip=5&$orderby=Id%20desc&__includeDeleted=true&__systemproperties=__version,__deleted\"));\n    }\n\n    public void testPullNoSkipSucceds() throws MalformedURLException, InterruptedException, ExecutionException, MobileServiceException {\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\");\n        sdf.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\n        String updatedAt = sdf.format(new Date());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, false,\n                \"{\\\"count\\\":\\\"2\\\",\\\"results\\\":[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt + \"\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt + \"\\\"}]}\"// remote\n                // item\n        ));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        Query query = QueryOperations.tableName(table.getName()).top(3).field(\"String\").eq(\"world\").orderBy(\"Id\", QueryOrder.Descending)\n                .includeInlineCount().select(\"String\");\n\n        table.pull(query).get();\n\n        assertEquals(\n                serviceFilterContainer.Requests.get(0).Url,\n                EncodingUtilities\n                        .percentEncodeSpaces(\n                                \"http://myapp.com/tables/stringidtype?$filter=String%20eq%20('world')&$top=3&$skip=0&$orderby=Id%20desc&__includeDeleted=true&__systemproperties=__version,__deleted\"));\n    }\n\n    public void testPullSuccedsNoTopNoOrderBy() throws MalformedURLException, InterruptedException, ExecutionException, MobileServiceException {\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\");\n        sdf.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\n        String updatedAt = sdf.format(new Date());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, false,\n                \"{\\\"count\\\":\\\"2\\\",\\\"results\\\":[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt + \"\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt + \"\\\"}]}\"// remote\n                // item\n        ));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        Query query = QueryOperations.tableName(table.getName()).field(\"String\").eq(\"world\").orderBy(\"Id\", QueryOrder.Descending)\n                .includeInlineCount().select(\"String\");\n\n        table.pull(query).get();\n\n        assertEquals(\n                serviceFilterContainer.Requests.get(0).Url,\n                EncodingUtilities\n                        .percentEncodeSpaces(\n                                \"http://myapp.com/tables/stringidtype?$filter=String%20eq%20('world')&$top=50&$skip=0&$orderby=Id%20desc&__includeDeleted=true&__systemproperties=__version,__deleted\"));\n    }\n\n    public void testIncrementalPullSucceds() throws MalformedURLException, InterruptedException, ExecutionException, MobileServiceException {\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        String queryKey = \"QueryKey\";\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\");\n        sdf.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\n        String updatedAt1 = sdf.format(new Date());\n        String updatedAt2 = sdf.format(new Date());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, false,\n                \"{\\\"count\\\":\\\"4\\\",\\\"results\\\":[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt1 + \"\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt1 + \"\\\"}]}\",\n                \"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt2 + \"\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt2 + \"\\\"}]\"\n                // remote\n                // item\n        ));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        Query query = QueryOperations.field(\"String\").eq(\"noMatch\");\n\n        table.pull(query, \"QueryKey\").get();\n\n        assertEquals(\n                serviceFilterContainer.Requests.get(0).Url,\n                EncodingUtilities\n                        .percentEncodeSpaces(\n                                \"http://myapp.com/tables/stringidtype?$filter=String%20eq%20('noMatch')&$top=50&$orderby=__updatedAt%20asc&__includeDeleted=true&__systemproperties=__updatedAt,__version,__deleted\"));\n\n        assertEquals(\n                serviceFilterContainer.Requests.get(1).Url,\n                EncodingUtilities\n                        .percentEncodeSpaces(\n                                \"http://myapp.com/tables/stringidtype?$filter=String%20eq%20('noMatch')%20and%20\" +\n                                        \"(__updatedAt%20ge%20(datetimeoffset'\"+updatedAt1 +\"'))&$top=50&$orderby=__updatedAt%20asc&__includeDeleted=true&__systemproperties=__updatedAt,__version,__deleted\"));\n    }\n\n    public void testIncrementalPullSaveLastUpdatedAtDate() throws MalformedURLException, InterruptedException, ExecutionException, MobileServiceException {\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        String queryKey = \"QueryKey\";\n        String incrementalPullStrategyTable = \"__incrementalPullData\";\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\");\n        sdf.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\n        String updatedAt1 = sdf.format(new Date());\n        String updatedAt2 = sdf.format(new Date());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, false,\n                \"{\\\"count\\\":\\\"4\\\",\\\"results\\\":[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt1 + \"\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt1 + \"\\\"}]}\",\n                \"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt2 + \"\\\"},{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt2 + \"\\\"}]\"\n                // remote\n                // item\n        ));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        Query query = QueryOperations.tableName(table.getName()).top(2);\n\n        table.pull(query, queryKey).get();\n\n        LinkedHashMap<String, JsonObject> tableContent = store.Tables.get(incrementalPullStrategyTable);\n\n        JsonElement result = tableContent.get(table.getName() + \"_\" + queryKey);\n\n        String stringMaxUpdatedDate = result.getAsJsonObject()\n                .get(\"maxupdateddate\").getAsString();\n\n        assertEquals(updatedAt2, stringMaxUpdatedDate);\n    }\n\n    public void testincrementalSyncUsesSkipWhenMaxUpdateAtIsSame() throws MalformedURLException, InterruptedException, ExecutionException, MobileServiceException {\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        String queryKey = \"QueryKey\";\n        String incrementalPullStrategyTable = \"__incrementalPullData\";\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\");\n        sdf.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\n        Date d = new Date();\n        String updatedAt1 = sdf.format(d);\n        d.setTime(d.getTime() + 1000L);\n        String updatedAt2 = sdf.format(d);\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, false,\n                        \"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt1 + \"\\\"},\" +\n                        \"{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt1 + \"\\\"}]\",\n                \"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt1 + \"\\\"},\" +\n                        \"{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt1 + \"\\\"}]\",\n                \"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt2 + \"\\\"},\" +\n                        \"{\\\"id\\\":\\\"def\\\",\\\"String\\\":\\\"World\\\",\\\"__updatedAt\\\":\\\"\" + updatedAt2 + \"\\\"}]\"\n        ));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        Query query = QueryOperations.field(\"String\").eq(\"Hey\");\n\n        table.pull(query, queryKey).get();\n\n        // Skip added\n        assertEquals(\n                serviceFilterContainer.Requests.get(2).Url,\n                EncodingUtilities\n                        .percentEncodeSpaces(\"http://myapp.com/tables/stringidtype?$filter=String%20eq%20('Hey')%20and%20(__updatedAt%20ge%20(datetimeoffset'\"+updatedAt1+\"'))\" +\n                                \"&$top=50&$skip=2&\" +\n                                \"$orderby=__updatedAt%20asc&__includeDeleted=true&__systemproperties=__updatedAt,__version,__deleted\"));\n        // Skip removed\n        assertEquals(\n                serviceFilterContainer.Requests.get(3).Url,\n                EncodingUtilities\n                        .percentEncodeSpaces(\"http://myapp.com/tables/stringidtype?$filter=String%20eq%20('Hey')%20and%20(__updatedAt%20ge%20(datetimeoffset'\"+updatedAt2+\"'))\" +\n                                \"&$top=50&$orderby=__updatedAt%20asc&__includeDeleted=true&__systemproperties=__updatedAt,__version,__deleted\"));\n    }\n\n    public void testPurgeDoesNotThrowExceptionWhenThereIsNoOperationInTable() throws MalformedURLException, InterruptedException, ExecutionException {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        // insert item in purge table\n        MobileServiceJsonSyncTable table1 = client.getSyncTable(\"someTable\");\n        JsonObject jsonObject = new JsonObject();\n        jsonObject.addProperty(\"id\", \"abc\");\n\n        table1.insert(jsonObject).get();\n\n        // but push to clear the queue\n        client.getSyncContext().push().get();\n\n        assertEquals(store.Tables.get(table1.getName().toLowerCase(Locale.getDefault())).size(), 1);// item\n        // is\n        // inserted\n\n        // then insert item in other table\n        MobileServiceSyncTable<StringIdType> table2 = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"an id\";\n        item.String = \"what?\";\n\n        table2.insert(item).get();\n\n        // try purge on first table now\n        table1.purge(null).get();\n\n        assertEquals(store.DeleteQueries.get(0).getTableName(), SyncErrors); // push\n        // deletes\n        // all\n        // sync\n        // erros\n\n        assertEquals(store.DeleteQueries.get(1).getTableName(), table1.getName().toLowerCase(Locale.getDefault()));\n        // purged table\n        assertEquals(serviceFilterContainer.Requests.size(), 1); // still 1\n        // means no\n        // other\n        // push happened\n        assertEquals(store.Tables.get(table2.getName().toLowerCase(Locale.getDefault())).size(), 1); // this\n        // table\n        // should\n        // not\n        // be\n        // touched\n    }\n\n    public void testPurgeThrowsExceptionWhenThereIsOperationInTable() throws InterruptedException, ExecutionException, MalformedURLException {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        // insert an item but don't push\n        MobileServiceJsonSyncTable table1 = client.getSyncTable(\"someTable\");\n        JsonObject jsonObject = new JsonObject();\n        jsonObject.addProperty(\"id\", \"abc\");\n\n        table1.insert(jsonObject).get();\n\n        assertEquals(store.Tables.get(table1.getName().toLowerCase(Locale.getDefault())).size(), 1); // item\n        // is\n        // inserted\n\n        try {\n            // this should throw an exception\n            table1.purge(null).get();\n        } catch (Throwable throwable) {\n            if (throwable.getCause() instanceof MobileServiceException) {\n                assertEquals(store.DeleteQueries.size(), 0); // no purge queries\n                return;\n            }\n        }\n\n        fail(\"MobileServiceException expected\");\n\n    }\n\n    public void testPushExecutesThePendingOperations() throws InterruptedException, ExecutionException, MalformedURLException {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"an id\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n\n        assertEquals(store.Tables.get(table.getName().toLowerCase(Locale.getDefault())).size(), 1);\n\n        client.getSyncContext().push().get();\n    }\n\n    public void testDeleteDoesNotUpsertResultOnStoreWhenOperationIsPushed() throws InterruptedException, ExecutionException, MalformedURLException {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        MobileServiceClient client = null;\n\n        client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\", // for\n                // insert\n                \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"// for delete\n\n        ));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        // first add an item\n        table.insert(item).get();\n\n        assertEquals(store.Tables.get(table.getName().toLowerCase(Locale.getDefault())).size(), 1);\n\n        // for good measure also push it\n        client.getSyncContext().push().get();\n\n        table.delete(item).get();\n\n        assertEquals(store.Tables.get(table.getName().toLowerCase(Locale.getDefault())).size(), 0);\n\n        // now play it on server\n        client.getSyncContext().push().get();\n\n        // wait we don't want to upsert the result back because its delete\n        // operation\n        assertEquals(store.Tables.get(table.getName().toLowerCase(Locale.getDefault())).size(), 0);\n        // looks good\n    }\n\n    public void testDeleteCancelsAllWhenInsertIsInQueue() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        MobileServiceClient client = null;\n\n        client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, \"[{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}]\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        table.delete(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 0);\n\n        client.getSyncContext().push().get();\n\n        assertEquals(client.getSyncContext().getPendingOperations(), 0);\n    }\n\n    public void testOperationErrorLoadCorrectly() throws Throwable {\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n\n        OperationErrorList operationErrorList = OperationErrorList.load(store);\n\n        TableOperationError tableOperationError = new TableOperationError(\"Id1\", TableOperationKind.Update, \"Table1\", \"ItemId\", null, \"Message\", 400, null, null);\n\n        operationErrorList.add(tableOperationError);\n\n        //Load with the previous inserted operation\n        OperationErrorList.load(store);\n\n    }\n\n    public void testCancelAndDiscardItem() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw new Exception();\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            MobileServicePushFailedException mspfe = (MobileServicePushFailedException) ex.getCause();\n\n            assertEquals(mspfe.getPushCompletionResult().getStatus(), MobileServicePushStatus.InternalError);\n            assertEquals(mspfe.getPushCompletionResult().getOperationErrors().size(), 1);\n            assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n            TableOperationError tableOperationError = mspfe.getPushCompletionResult().getOperationErrors().get(0);\n\n            client.getSyncContext().cancelAndDiscardItem(tableOperationError);\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n\n            StringIdType result = table.lookUp(item.Id).get();\n\n            assertEquals(null, result);\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testCancelAndUpdateItem() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        final JsonObject serverItem = new JsonObject();\n        serverItem.addProperty(\"id\", \"abc\");\n        serverItem.addProperty(\"String\", \"fooo\");\n\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw new MobileServiceExceptionBase(new MobileServiceException(new Exception()), serverItem);\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            MobileServicePushFailedException mspfe = (MobileServicePushFailedException) ex.getCause();\n\n            assertEquals(mspfe.getPushCompletionResult().getStatus(), MobileServicePushStatus.InternalError);\n            assertEquals(mspfe.getPushCompletionResult().getOperationErrors().size(), 1);\n            assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n            TableOperationError tableOperationError =mspfe.getPushCompletionResult().getOperationErrors().get(0);\n\n            client.getSyncContext().cancelAndUpdateItem(tableOperationError);\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n\n            StringIdType result = table.lookUp(item.Id).get();\n\n            assertEquals(item.Id, result.Id);\n            assertEquals(\"fooo\", result.String);\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testPushAbortOnNewtorkError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        final MobileServiceException innerException = new MobileServiceException(new IOException());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n\n            MobileServicePushFailedException mspfe = (MobileServicePushFailedException) ex.getCause();\n\n            assertEquals(mspfe.getPushCompletionResult().getStatus(), MobileServicePushStatus.CancelledByNetworkError);\n            assertEquals(mspfe.getPushCompletionResult().getOperationErrors().size(), 0);\n            assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"POST\");\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testPushAbortOnAuthentication() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setStatus(new StatusLineMock(401));\n\n        final MobileServiceException innerException = new MobileServiceException(\"\", response);\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n\n            MobileServicePushFailedException mspfe = (MobileServicePushFailedException) ex.getCause();\n\n            assertEquals(mspfe.getPushCompletionResult().getStatus(), MobileServicePushStatus.CancelledByAuthenticationError);\n            assertEquals(mspfe.getPushCompletionResult().getOperationErrors().size(), 0);\n            assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"POST\");\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testPushAbortOnOperationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw new Exception();\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            MobileServicePushFailedException mspfe = (MobileServicePushFailedException) ex.getCause();\n\n            assertEquals(mspfe.getPushCompletionResult().getStatus(), MobileServicePushStatus.InternalError);\n            assertEquals(mspfe.getPushCompletionResult().getOperationErrors().size(), 1);\n            assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"POST\");\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n\n    //Test Collapse Login on Operation Error\n\n    public void testInsertThrowsWhenInsertIsInQueueOnNewtorkError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        final MobileServiceException innerException = new MobileServiceException(new IOException());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.insert(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"POST\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: An insert operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testInsertThrowsWhenInsertIsInQueueOnAuthenticationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setStatus(new StatusLineMock(401));\n\n        final MobileServiceException innerException = new MobileServiceException(\"\", response);\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.insert(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"POST\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: An insert operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testInsertThrowsWhenInsertIsInQueueOnOperationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw new Exception();\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.insert(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"POST\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: An insert operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testDeleteNoCollapseInsertWhenFailedInsertIsInQueueOnNewtorkError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n        String expectedUrl = \"http://myapp.com/tables/stringidtype/abc\";\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        final MobileServiceException innerException = new MobileServiceException(new IOException());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            table.delete(item).get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n\n            assertEquals(serviceFilterContainer.Requests.get(1).Url, expectedUrl);\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"DELETE\");\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testDeleteNoCollapseInsertWhenFailedInsertIsInQueueOnAuthentication() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n        String expectedUrl = \"http://myapp.com/tables/stringidtype/abc\";\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setStatus(new StatusLineMock(401));\n\n        final MobileServiceException innerException = new MobileServiceException(\"\", response);\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            table.delete(item).get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n\n            assertEquals(serviceFilterContainer.Requests.get(1).Url, expectedUrl);\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"DELETE\");\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testDeleteNoCollapseInsertWhenFailedInsertIsInQueueOnOperationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n        String expectedUrl = \"http://myapp.com/tables/stringidtype/abc\";\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw new Exception();\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            table.delete(item).get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n\n            assertEquals(serviceFilterContainer.Requests.get(1).Url, expectedUrl);\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"DELETE\");\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testUpdateCollapseWhenInsertIsInQueueOnNewtorkError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n        final String expectedUpdateContent = \"{\\\"String\\\":\\\"fooo\\\",\\\"id\\\":\\\"abc\\\"}\";\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        final MobileServiceException innerException = new MobileServiceException(new IOException());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n\n            StringIdType itemUpdated = new StringIdType();\n\n            itemUpdated.Id = \"abc\";\n            itemUpdated.String = \"fooo\";\n\n            table.update(itemUpdated).get();\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n            assertEquals(serviceFilterContainer.Requests.get(0).Method, \"POST\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"POST\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Content, expectedUpdateContent);\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testUpdateCollapseWhenInsertIsInQueueOnAuthenticationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n        final String expectedUpdateContent = \"{\\\"String\\\":\\\"fooo\\\",\\\"id\\\":\\\"abc\\\"}\";\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setStatus(new StatusLineMock(401));\n\n        final MobileServiceException innerException = new MobileServiceException(\"\", response);\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n\n            StringIdType itemUpdated = new StringIdType();\n\n            itemUpdated.Id = \"abc\";\n            itemUpdated.String = \"fooo\";\n\n            table.update(itemUpdated).get();\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n            assertEquals(serviceFilterContainer.Requests.get(0).Method, \"POST\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"POST\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Content, expectedUpdateContent);\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testUpdateCollapseWhenInsertIsInQueueOnOperationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n        final String expectedUpdateContent = \"{\\\"String\\\":\\\"fooo\\\",\\\"id\\\":\\\"abc\\\"}\";\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        final MobileServiceException innerException = new MobileServiceException(new IOException());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw new Exception();\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.insert(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n\n            StringIdType itemUpdated = new StringIdType();\n\n            itemUpdated.Id = \"abc\";\n            itemUpdated.String = \"fooo\";\n\n            table.update(itemUpdated).get();\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n            assertEquals(serviceFilterContainer.Requests.get(0).Method, \"POST\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"POST\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Content, expectedUpdateContent);\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testUpdateCollapseWhenUpdateIsInQueueOnNewtorkError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n        final String expectedUpdateContent = \"{\\\"String\\\":\\\"fooo\\\",\\\"id\\\":\\\"abc\\\"}\";\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        final MobileServiceException innerException = new MobileServiceException(new IOException());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.update(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n\n            StringIdType itemUpdated = new StringIdType();\n\n            itemUpdated.Id = \"abc\";\n            itemUpdated.String = \"fooo\";\n\n            table.update(itemUpdated).get();\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n            assertEquals(serviceFilterContainer.Requests.get(0).Method, \"PATCH\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"PATCH\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Content, expectedUpdateContent);\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testUpdateCollapseWhenUpdateIsInQueueOnAuthentication() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n        final String expectedUpdateContent = \"{\\\"String\\\":\\\"fooo\\\",\\\"id\\\":\\\"abc\\\"}\";\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setStatus(new StatusLineMock(401));\n\n        final MobileServiceException innerException = new MobileServiceException(\"\", response);\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.update(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n\n            StringIdType itemUpdated = new StringIdType();\n\n            itemUpdated.Id = \"abc\";\n            itemUpdated.String = \"fooo\";\n\n            table.update(itemUpdated).get();\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n            assertEquals(serviceFilterContainer.Requests.get(0).Method, \"PATCH\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"PATCH\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Content, expectedUpdateContent);\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testUpdateCollapseWhenUpdateIsInQueueOnOperationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n        final String expectedUpdateContent = \"{\\\"String\\\":\\\"fooo\\\",\\\"id\\\":\\\"abc\\\"}\";\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw new Exception();\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.update(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n\n            StringIdType itemUpdated = new StringIdType();\n\n            itemUpdated.Id = \"abc\";\n            itemUpdated.String = \"fooo\";\n\n            table.update(itemUpdated).get();\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n            assertEquals(serviceFilterContainer.Requests.get(0).Method, \"PATCH\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"PATCH\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Content, expectedUpdateContent);\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testDeleteCollapseUpdateWhenUpdateIsInQueueOnNewtorkError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        final MobileServiceException innerException = new MobileServiceException(new IOException());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.update(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n\n            table.delete(item).get();\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n            assertEquals(serviceFilterContainer.Requests.get(0).Method, \"PATCH\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"DELETE\");\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testDeleteCollapseUpdateWhenUpdateIsInQueueOnAuthenticationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setStatus(new StatusLineMock(401));\n\n        final MobileServiceException innerException = new MobileServiceException(\"\", response);\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.update(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n\n            table.delete(item).get();\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n            assertEquals(serviceFilterContainer.Requests.get(0).Method, \"PATCH\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"DELETE\");\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testDeleteCollapseUpdateWhenUpdateIsInQueueOnOperationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw new Exception();\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.update(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n\n            table.delete(item).get();\n\n            thrownExceptionFlag.Thrown = false;\n\n            client.getSyncContext().push().get();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 0);\n            assertEquals(serviceFilterContainer.Requests.get(0).Method, \"PATCH\");\n            assertEquals(serviceFilterContainer.Requests.get(1).Method, \"DELETE\");\n\n            return;\n        }\n\n        assertTrue(false);\n    }\n\n    public void testInsertThrowsWhenUpdateIsInQueueOnNewtorkError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        final MobileServiceException innerException = new MobileServiceException(new IOException());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.update(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.insert(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"PATCH\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: An update operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testInsertThrowsWhenUpdateIsInQueueOnAuthenticationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setStatus(new StatusLineMock(401));\n\n        final MobileServiceException innerException = new MobileServiceException(\"\", response);\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.update(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.insert(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"PATCH\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: An update operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testInsertThrowsWhenUpdateIsInQueueOnOperationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw new Exception();\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.update(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.insert(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"PATCH\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: An update operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testDeleteThrowsWhenDeleteIsInQueueOnNewtorkError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        final MobileServiceException innerException = new MobileServiceException(new IOException());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.delete(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.delete(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"DELETE\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: A delete operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testDeleteThrowsWhenDeleteIsInQueueOnAuthenticationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setStatus(new StatusLineMock(401));\n\n        final MobileServiceException innerException = new MobileServiceException(\"\", response);\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.delete(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.delete(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"DELETE\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: A delete operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testDeleteThrowsWhenDeleteIsInQueueOnOperationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw new Exception();\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.delete(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.delete(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"DELETE\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: A delete operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testInsertThrowsWhenDeleteIsInQueueOnNewtorkError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        final MobileServiceException innerException = new MobileServiceException(new IOException());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.delete(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.insert(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"DELETE\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: A delete operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testInsertThrowsWhenDeleteIsInQueueOnAuthenticationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setStatus(new StatusLineMock(401));\n\n        final MobileServiceException innerException = new MobileServiceException(\"\", response);\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.delete(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.insert(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"DELETE\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: A delete operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testInsertThrowsWhenDeleteIsInQueueOnOperationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw new Exception();\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.delete(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.insert(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"DELETE\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: A delete operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testUpdateThrowsWhenDeleteIsInQueueOnNewtorkError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        final MobileServiceException innerException = new MobileServiceException(new IOException());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.delete(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.update(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"DELETE\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: A delete operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testUpdateThrowsWhenDeleteIsInQueueOnAuthenticationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setStatus(new StatusLineMock(401));\n\n        final MobileServiceException innerException = new MobileServiceException(\"\", response);\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw innerException;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.delete(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.update(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"DELETE\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: A delete operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n    public void testUpdateThrowsWhenDeleteIsInQueueOnOperationError() throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n\n        thrownExceptionFlag.Thrown = true;\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (thrownExceptionFlag.Thrown) {\n                        throw new Exception();\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"abc\";\n        item.String = \"what?\";\n\n        table.delete(item).get();\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n        }\n        catch(Exception ex) {\n            try {\n                table.update(item).get();\n            }\n            catch(Exception ex2) {\n                assertEquals(client.getSyncContext().getPendingOperations(), 1);\n                assertEquals(serviceFilterContainer.Requests.get(0).Method, \"DELETE\");\n                assertEquals(ex2.getMessage(), \"java.lang.IllegalStateException: A delete operation on the item is already in the queue.\");\n\n                return;\n            }\n        }\n\n        assertTrue(false);\n    }\n\n\n    //Test collapse login\n\n    public void testDeleteCancelsUpdateWhenUpdateIsInQueue() throws Throwable {\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> firstOperationOnItem1 = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.update(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> operationOnItem2 = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.insert(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> secondOperationOnItem1 = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.delete(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        CustomFunctionTwoParameters<ServiceFilterRequest, Integer, Void> assertRequest = new CustomFunctionTwoParameters<ServiceFilterRequest, Integer, Void>() {\n\n            @Override\n            public Void apply(ServiceFilterRequest serviceFilterRequest, Integer executed) {\n                if (executed == 1) // order is maintained by doing insert first\n                // and delete after that. This means first\n                // update was cancelled, not the second one.\n                {\n                    assertEquals(serviceFilterRequest.getMethod(), \"POST\");\n                } else {\n                    assertEquals(serviceFilterRequest.getMethod(), \"DELETE\");\n                }\n\n                return null;\n            }\n\n        };\n\n        this.TestCollapseCancel(firstOperationOnItem1, operationOnItem2, secondOperationOnItem1, assertRequest);\n    }\n\n    public void testDeleteThrowsWhenDeleteIsInQueue() throws Throwable {\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> firstOperation = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.delete(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> secondOperation = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.delete(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        this.TestCollapseThrow(firstOperation, secondOperation);\n    }\n\n    public void testInsertThrowsWhenUpdateIsInQueue() throws Throwable {\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> firstOperation = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.update(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> secondOperation = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.insert(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        this.TestCollapseThrow(firstOperation, secondOperation);\n    }\n\n    public void testInsertThrowsWhenInsertIsInQueue() throws Throwable {\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> firstOperation = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.insert(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> secondOperation = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.insert(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        this.TestCollapseThrow(firstOperation, secondOperation);\n    }\n\n    public void testUpdateThrowsWhenDeleteIsInQueue() throws Throwable {\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> firstOperation = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.delete(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> secondOperation = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.update(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        this.TestCollapseThrow(firstOperation, secondOperation);\n    }\n\n    // public void testUpdateCancelsSecondUpdateWhenUpdateIsInQueue()\n    // throws Throwable\n    // {\n    // CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>,\n    // StringIdType, Void>\n    // firstOperationOnItem1 = new\n    // CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>,\n    // StringIdType,\n    // Void>() {\n    //\n    // @Override\n    // public Void apply(MobileServiceSyncTable<StringIdType> table,\n    // StringIdType item) throws Exception {\n    // try {\n    // table.update(item).get();\n    // } catch (Exception e) {\n    // throw e;\n    // }\n    //\n    // return null;\n    // }\n    //\n    // };\n    //\n    // CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>,\n    // StringIdType, Void>\n    // operationOnItem2 = new\n    // CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>,\n    // StringIdType,\n    // Void>() {\n    //\n    // @Override\n    // public Void apply(MobileServiceSyncTable<StringIdType> table,\n    // StringIdType item) throws Exception {\n    // try {\n    // table.delete(item).get();\n    // } catch (Exception e) {\n    // throw e;\n    // }\n    //\n    // return null;\n    // }\n    //\n    // };\n    //\n    // CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>,\n    // StringIdType, Void>\n    // secondOperationOnItem1 = new\n    // CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>,\n    // StringIdType,\n    // Void>() {\n    //\n    // @Override\n    // public Void apply(MobileServiceSyncTable<StringIdType> table,\n    // StringIdType item) throws Exception {\n    // try {\n    // table.update(item).get();\n    // } catch (Exception e) {\n    // throw e;\n    // }\n    //\n    // return null;\n    // }\n    //\n    // };\n    //\n    // CustomFunctionTwoParameters<ServiceFilterRequest, Integer, Void>\n    // assertRequest = new\n    // CustomFunctionTwoParameters<ServiceFilterRequest, Integer, Void>() {\n    //\n    // @Override\n    // public Void apply(ServiceFilterRequest serviceFilterRequest, Integer\n    // executed) {\n    //\n    // // if (executed == 1) // order is maintained by doing insert first\n    // // // and delete after that. This means first\n    // // // update was cancelled, not the second one.\n    // // {\n    // // assertEquals(serviceFilterRequest.getMethod(), \"PATCH\");\n    // // } else {\n    // // assertEquals(serviceFilterRequest.getMethod(), \"DELETE\");\n    // // }\n    //\n    // return null;\n    // }\n    //\n    // };\n    //\n    // this.TestCollapseCancel(firstOperationOnItem1, operationOnItem2,\n    // secondOperationOnItem1, assertRequest);\n    // }\n\n    public void testUpdateCancelsSecondUpdateWhenInsertIsInQueue() throws Throwable {\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> firstOperationOnItem1 = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.insert(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> operationOnItem2 = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.delete(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> secondOperationOnItem1 = new CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void>() {\n\n            @Override\n            public Void apply(MobileServiceSyncTable<StringIdType> table, StringIdType item) throws Exception {\n                try {\n                    table.update(item).get();\n                } catch (Exception e) {\n                    throw e;\n                }\n\n                return null;\n            }\n\n        };\n\n        CustomFunctionTwoParameters<ServiceFilterRequest, Integer, Void> assertRequest = new CustomFunctionTwoParameters<ServiceFilterRequest, Integer, Void>() {\n\n            @Override\n            public Void apply(ServiceFilterRequest serviceFilterRequest, Integer executed) {\n                if (executed == 1) // order is maintained by doing insert first\n                // and delete after that. This means first\n                // update was cancelled, not the second one.\n                {\n                    assertEquals(serviceFilterRequest.getMethod(), \"POST\");\n                } else {\n                    assertEquals(serviceFilterRequest.getMethod(), \"DELETE\");\n                }\n\n                return null;\n            }\n\n        };\n\n        this.TestCollapseCancel(firstOperationOnItem1, operationOnItem2, secondOperationOnItem1, assertRequest);\n    }\n\n    public void testPushIsAbortedOnNetworkError() throws Throwable {\n        this.TestPushAbort(new IOException(), MobileServicePushStatus.CancelledByNetworkError);\n    }\n\n    public void testPushIsAbortedOnAuthenticationError() throws Throwable {\n        // Create a mock response simulating an error\n        ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setStatus(new StatusLineMock(401));\n\n        MobileServiceException authError = new MobileServiceException(\"\", response);\n        TestPushAbort(authError, MobileServicePushStatus.CancelledByAuthenticationError);\n    }\n\n    private void TestCollapseCancel(CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> firstOperationOnItem1,\n                                    CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> operationOnItem2,\n                                    CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> secondOperationOnItem1,\n                                    final CustomFunctionTwoParameters<ServiceFilterRequest, Integer, Void> assertRequest) throws Throwable {\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    assertRequest.apply(request, serviceFilterContainer.Requests.size());\n                } catch (Exception e) {\n                    // throw e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        StringIdType item1 = new StringIdType();\n\n        item1.Id = \"an id\";\n        item1.String = \"what?\";\n\n        StringIdType item2 = new StringIdType();\n\n        item2.Id = \"two\";\n        item2.String = \"this\";\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        firstOperationOnItem1.apply(table, item1);\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        operationOnItem2.apply(table, item2);\n        assertEquals(client.getSyncContext().getPendingOperations(), 2);\n\n        secondOperationOnItem1.apply(table, item1);\n        assertEquals(client.getSyncContext().getPendingOperations(), 2);\n\n        client.getSyncContext().push().get();\n\n        assertEquals(client.getSyncContext().getPendingOperations(), 0);\n        assertEquals(serviceFilterContainer.Requests.size(), 2); // total two\n        // operations\n        // executed\n    }\n\n    private void TestCollapseThrow(CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> firstOperation,\n                                   CustomFunctionTwoParameters<MobileServiceSyncTable<StringIdType>, StringIdType, Void> secondOperation) throws Throwable {\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        client = client.withFilter(getTestFilter());\n\n        client.getSyncContext().initialize(store, new SimpleSyncHandler()).get();\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"an id\";\n        item.String = \"what?\";\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        firstOperation.apply(table, item);\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            secondOperation.apply(table, item);\n        } catch (Exception e) {\n            e.printStackTrace();\n\n            assertEquals(client.getSyncContext().getPendingOperations(), 1);\n            return;\n        }\n\n        fail(\"Exception expected\");\n\n    }\n\n    private void TestPushAbort(final Exception toThrow, MobileServicePushStatus expectedStatus) throws Throwable {\n        MobileServiceSyncHandlerMock operationHandler = new MobileServiceSyncHandlerMock();\n\n        final ThrownExceptionFlag thrownExceptionFlag = new ThrownExceptionFlag();\n        thrownExceptionFlag.Thrown = false;\n\n        MobileServiceLocalStoreMock store = new MobileServiceLocalStoreMock();\n        final ServiceFilterContainer serviceFilterContainer = new ServiceFilterContainer();\n\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n\n        Function<ServiceFilterRequest, Void> onHandleRequest = new Function<ServiceFilterRequest, Void>() {\n            public Void apply(ServiceFilterRequest request) {\n                try {\n                    if (!thrownExceptionFlag.Thrown) {\n                        thrownExceptionFlag.Thrown = true;\n                        throw toThrow;\n                    }\n                } catch (Exception e) {\n                    serviceFilterContainer.Exception = e;\n                }\n\n                return null;\n            }\n        };\n\n        client = client.withFilter(getTestFilter(serviceFilterContainer, onHandleRequest, \"{\\\"id\\\":\\\"abc\\\",\\\"String\\\":\\\"Hey\\\"}\"));\n\n        client.getSyncContext().initialize(store, operationHandler).get();\n\n        StringIdType item = new StringIdType();\n\n        item.Id = \"an id\";\n        item.String = \"what?\";\n\n        MobileServiceSyncTable<StringIdType> table = client.getSyncTable(StringIdType.class);\n\n        table.insert(item).get();\n\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        try {\n            client.getSyncContext().push().get();\n\n            fail(\"MobileServicePushFailedException expected\");\n            return;\n        } catch (Exception ex) {\n            if (ex.getCause() instanceof MobileServicePushFailedException) {\n                MobileServicePushFailedException mobileServicePushFailedException = (MobileServicePushFailedException) ex.getCause();\n\n                assertEquals(mobileServicePushFailedException.getPushCompletionResult().getStatus(), expectedStatus);\n                assertEquals(mobileServicePushFailedException.getPushCompletionResult().getOperationErrors().size(), 0);\n            } else {\n                fail(\"MobileServicePushFailedException expected\");\n            }\n        }\n\n        assertEquals(operationHandler.PushCompletionResult.getStatus(), expectedStatus);\n\n        // the insert operation is still in queue\n        assertEquals(client.getSyncContext().getPendingOperations(), 1);\n\n        client.getSyncContext().push().get();\n\n        assertEquals(client.getSyncContext().getPendingOperations(), 0);\n\n        assertEquals(operationHandler.PushCompletionResult.getStatus(), MobileServicePushStatus.Complete);\n    }\n\n    // Test Filter\n    private ServiceFilter getTestFilter(String... content) {\n        return getTestFilter(new ServiceFilterContainer(), 200, content);\n    }\n\n    // Test Filter\n    private ServiceFilter getTestFilter(ServiceFilterContainer serviceFilterContainer, Function<ServiceFilterRequest, Void> onHandleRequest, String... content) {\n        return getTestFilter(serviceFilterContainer, 200, onHandleRequest, true, content);\n    }\n\n    // Test Filter\n    private ServiceFilter getTestFilter(ServiceFilterContainer serviceFilterContainer, String... content) {\n        return getTestFilter(serviceFilterContainer, 200, content);\n    }\n\n    // Test Filter\n    private ServiceFilter getTestFilter(ServiceFilterContainer serviceFilterContainer, final boolean getLastContentAsDefault, String... content) {\n        return getTestFilter(serviceFilterContainer, 200, null, getLastContentAsDefault, content);\n    }\n\n\n    // Test Filter\n    private ServiceFilter getTestFilter(ServiceFilterContainer serviceFilterContainer, int statusCode, String... content) {\n        return getTestFilter(serviceFilterContainer, statusCode, null, true, content);\n    }\n\n    // Test Filter\n    private ServiceFilter getTestFilter(final ServiceFilterContainer serviceFilterContainer, final int statusCode,\n                                        final Function<ServiceFilterRequest, Void> onHandleRequest, final boolean getLastContentAsDefault, final String... contents) {\n\n        return new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                // Create a mock response simulating an error\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLineMock(statusCode));\n\n                String content = \"\";\n\n                if (contents.length > serviceFilterContainer.Requests.size()) {\n                    content = contents[serviceFilterContainer.Requests.size()];\n                } else {\n                    if (getLastContentAsDefault) {\n                        content = contents[contents.length - 1];\n                    }\n                    else {\n                        content = \"[]\";\n                    }\n                }\n\n                response.setContent(content);\n\n                ServiceFilterRequestData serviceFilterRequestData = new ServiceFilterRequestData();\n                serviceFilterRequestData.Headers = request.getHeaders();\n                serviceFilterRequestData.Content = request.getContent();\n                serviceFilterRequestData.Url = request.getUrl();\n                serviceFilterRequestData.Method = request.getMethod();\n\n                serviceFilterContainer.Url = request.getUrl();\n                serviceFilterContainer.Requests.add(serviceFilterRequestData);\n\n                if (onHandleRequest != null) {\n                    onHandleRequest.apply(request);\n                }\n\n                // create a mock request to replace the existing one\n                ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n\n                if (serviceFilterContainer.Exception != null) {\n                    requestMock.setExceptionToThrow(serviceFilterContainer.Exception);\n                    requestMock.setHasErrorOnExecute(true);\n\n                    // used exception\n                    serviceFilterContainer.Exception = null;\n                }\n\n                return nextServiceFilterCallback.onNext(requestMock);\n            }\n\n        };\n    }\n\n    public class ServiceFilterContainer {\n        public String Url;\n\n        public List<ServiceFilterRequestData> Requests = new ArrayList<ServiceFilterRequestData>();\n\n        public Exception Exception;\n    }\n\n    public class ThrownExceptionFlag {\n        public boolean Thrown;\n    }\n\n    public class ServiceFilterRequestData {\n        public Header[] Headers;\n\n        public String Content;\n\n        public String Url;\n\n        public String Method;\n\n        public int Count;\n\n        public String getHeaderValue(String headerName) {\n\n            for (Header header : Headers) {\n                if (header.getName().equals(headerName)) {\n                    return header.getValue();\n                }\n            }\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/MobileServiceTableTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.test.InstrumentationTestCase;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.GsonBuilder;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceList;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterRequestMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.StatusLineMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.helpers.EncodingUtilities;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.IdPropertyTestClasses.IdPropertyMultipleIdsTestObject;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.IdPropertyTestClasses.IdPropertyWithDifferentIdPropertyCasing;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.IdPropertyTestClasses.IdPropertyWithGsonAnnotation;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.PersonTestObject;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.PersonTestObjectWithStringId;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.PersonTestObjectWithoutId;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.ResultsContainer;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\nimport com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback;\nimport com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback;\nimport com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback;\nimport com.microsoft.windowsazure.mobileservices.table.TableOperationCallback;\nimport com.microsoft.windowsazure.mobileservices.table.TableQueryCallback;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOperations;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\n\nimport junit.framework.Assert;\n\nimport org.apache.http.Header;\nimport org.apache.http.ProtocolVersion;\nimport org.apache.http.StatusLine;\nimport org.apache.http.message.BasicHeader;\n\nimport java.net.MalformedURLException;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.concurrent.CountDownLatch;\nimport java.util.concurrent.ExecutionException;\n\npublic class MobileServiceTableTests extends InstrumentationTestCase {\n    String appUrl = \"\";\n    String appKey = \"\";\n    GsonBuilder gsonBuilder;\n\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com/\";\n        appKey = \"qwerty\";\n        gsonBuilder = new GsonBuilder();\n        super.setUp();\n    }\n\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    public void testNewMobileServiceTableShouldReturnMobileServiceTable() throws MalformedURLException {\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        MobileServiceTable<Object> msTable = new MobileServiceTable<Object>(tableName, client, Object.class);\n\n        assertEquals(tableName, msTable.getTableName());\n\n    }\n\n    public void testNewMobileServiceTableWithNameFromClassShouldReturnMobileServiceTable() throws MalformedURLException {\n        String tableName = \"PersonTestObject\";\n        MobileServiceClient client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(PersonTestObject.class);\n\n        assertEquals(tableName.toLowerCase(Locale.getDefault()), msTable.getTableName().toLowerCase(Locale.getDefault()));\n\n    }\n\n    public void testNewMobileServiceTableWithNullNameShouldThrowException() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not happen\");\n        }\n        try {\n            new MobileServiceTable<Object>(null, client, Object.class);\n            fail(\"Expected Exception IllegalArgumentException\");\n        } catch (IllegalArgumentException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testNewMobileServiceTableWithEmptyNameShouldThrowException() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not happen\");\n        }\n        try {\n            new MobileServiceTable<Object>(\"\", client, Object.class);\n            fail(\"Expected Exception IllegalArgumentException\");\n        } catch (IllegalArgumentException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testNewMobileServiceTableWithWhiteSpacedNameShouldThrowException() {\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n            fail(\"This should not happen\");\n        }\n        try {\n            new MobileServiceTable<Object>(\" \", client, Object.class);\n            fail(\"Expected Exception IllegalArgumentException\");\n        } catch (IllegalArgumentException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testNewMobileServiceTableWithNullClientShouldThrowException() {\n        try {\n            new MobileServiceTable<Object>(\"MyTableName\", null, Object.class);\n            fail(\"Expected Exception IllegalArgumentException\");\n        } catch (IllegalArgumentException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testWhereWithNullQueryShouldThrowException() {\n        MobileServiceClient client = null;\n        MobileServiceTable<Object> msTable = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n            String tableName = \"MyTableName\";\n            msTable = new MobileServiceTable<Object>(tableName, client, Object.class);\n        } catch (MalformedURLException e1) {\n            fail(\"This should not happen\");\n        }\n        try {\n            msTable.where(null);\n            fail(\"Expected Exception IllegalArgumentException\");\n        } catch (IllegalArgumentException e) {\n            // do nothing, it's OK\n        }\n    }\n\n    public void testShouldThrowExceptionIfObjectDoesNotHaveIdProperty() throws Throwable {\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        try {\n            // Create get the MobileService table\n            @SuppressWarnings(\"unused\")\n            MobileServiceTable<PersonTestObjectWithoutId> msTable = client.getTable(tableName, PersonTestObjectWithoutId.class);\n            fail(\"The getTable invokation should fail\");\n        } catch (IllegalArgumentException e) {\n            // It's ok.\n        }\n\n    }\n\n    public void testInsertShouldThrowExceptionIfObjectHasIdPropertyDifferentThanZero() throws Throwable {\n        // Object to insert\n        final JsonObject testObject = new JsonObject();\n\n        testObject.addProperty(\"name\", \"john\");\n        testObject.addProperty(\"ID\", 38);\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the insert method\n        try {\n            msTable.insert(testObject).get();\n        } catch (Exception exception) {\n\n            Exception testException = null;\n\n            if (exception instanceof ExecutionException) {\n                testException = (Exception) exception.getCause();\n            } else {\n                testException = exception;\n            }\n\n            assertEquals(\"The entity to insert should not have a numeric ID property defined.\", testException.getMessage());\n        }\n    }\n\n    public void testInsertShouldReturnEntityWithId() throws Throwable {\n\n        // Object to insert\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"id\\\":38, \\\"firstName\\\":\\\"John\\\", \\\"lastName\\\":\\\"Foo\\\", \\\"Age\\\":29}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(tableName, PersonTestObject.class);\n\n        // Call the insert method\n        PersonTestObject p = msTable.insert(person).get();\n\n        Assert.assertNotNull(\"Person expected\", p);\n        Assert.assertEquals(38, p.getId());\n        Assert.assertEquals(person.getFirstName(), p.getFirstName());\n        Assert.assertEquals(\"Foo\", p.getLastName());\n        Assert.assertEquals(person.getAge(), p.getAge());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testInsertShouldReturnEntityWithIdCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store the object after the insertion, we need this to do\n        // the asserts outside the onSuccess method\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to insert\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"id\\\":38, \\\"firstName\\\":\\\"John\\\", \\\"lastName\\\":\\\"Foo\\\", \\\"Age\\\":29}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(tableName, PersonTestObject.class);\n\n        // Call the insert method\n        msTable.insert(person, new TableOperationCallback<PersonTestObject>() {\n\n            @Override\n            public void onCompleted(PersonTestObject entity, Exception exception, ServiceFilterResponse response) {\n                container.setPerson(entity);\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        PersonTestObject p = container.getPerson();\n        Assert.assertNotNull(\"Person expected\", p);\n        Assert.assertEquals(38, p.getId());\n        Assert.assertEquals(person.getFirstName(), p.getFirstName());\n        Assert.assertEquals(\"Foo\", p.getLastName());\n        Assert.assertEquals(person.getAge(), p.getAge());\n    }\n\n    public void testInsertShouldReturnTheSameMutatedObject() throws Throwable {\n        // Object to insert\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"id\\\":38, \\\"firstName\\\":\\\"John\\\", \\\"lastName\\\":\\\"Foo\\\", \\\"Age\\\":29}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(tableName, PersonTestObject.class);\n\n        // Call the insert method\n        PersonTestObject p = msTable.insert(person).get();\n\n        // Asserts\n        Assert.assertNotNull(\"Person expected\", p);\n        Assert.assertEquals(person, p);\n        Assert.assertEquals(38, p.getId());\n        Assert.assertEquals(\"John\", p.getFirstName());\n        Assert.assertEquals(\"Foo\", p.getLastName());\n        Assert.assertEquals(29, p.getAge());\n    }\n\n    public void testUpdateShouldReturnTheSameMutatedObject() throws Throwable {\n\n        // Object to insert\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(38);\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"id\\\":38, \\\"firstName\\\":\\\"John\\\", \\\"lastName\\\":\\\"Foo\\\", \\\"Age\\\":29}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(tableName, PersonTestObject.class);\n\n        // Call the insert method\n        PersonTestObject p = msTable.update(person).get();\n        Assert.assertNotNull(\"Person expected\", p);\n        Assert.assertEquals(person, p);\n        Assert.assertEquals(38, p.getId());\n        Assert.assertEquals(\"John\", p.getFirstName());\n        Assert.assertEquals(\"Foo\", p.getLastName());\n        Assert.assertEquals(29, p.getAge());\n    }\n\n    public void testInsertShouldReturnEntityWithIdWhenUsingAnnotationsForIdProperty() throws Throwable {\n\n        // Object to insert\n        final IdPropertyWithGsonAnnotation testObject = new IdPropertyWithGsonAnnotation(\"John\");\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"id\\\":38, \\\"name\\\":\\\"John\\\"}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<IdPropertyWithGsonAnnotation> msTable = client.getTable(tableName, IdPropertyWithGsonAnnotation.class);\n\n        // Call the insert method\n        IdPropertyWithGsonAnnotation o = msTable.insert(testObject).get();\n\n        // Asserts\n        Assert.assertNotNull(\"Entity expected\", o);\n        Assert.assertEquals(38, o.getId());\n        Assert.assertEquals(testObject.getName(), o.getName());\n    }\n\n    public void testInsertShouldReturnEntityWithIdWhenUsingDifferentCasingForIdProperty() throws Throwable {\n        // Object to insert\n        final IdPropertyWithDifferentIdPropertyCasing testObject = new IdPropertyWithDifferentIdPropertyCasing(\"John\");\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"id\\\":38, \\\"name\\\":\\\"John\\\"}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<IdPropertyWithDifferentIdPropertyCasing> msTable = client.getTable(tableName, IdPropertyWithDifferentIdPropertyCasing.class);\n\n        // Call the insert method\n        IdPropertyWithDifferentIdPropertyCasing o = msTable.insert(testObject).get();\n\n        // Asserts\n        Assert.assertNotNull(\"Entity expected\", o);\n        Assert.assertEquals(38, o.getId());\n        Assert.assertEquals(testObject.getName(), o.getName());\n    }\n\n    public void testInsertShouldReturnEntityWithIdWhenUsingStringId() throws Throwable {\n\n        // Object to insert\n        final PersonTestObjectWithStringId person = new PersonTestObjectWithStringId(\"John\", \"Doe\", 29);\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"id\\\":\\\"38\\\", \\\"firstName\\\":\\\"John\\\", \\\"lastName\\\":\\\"Foo\\\", \\\"Age\\\":29}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<PersonTestObjectWithStringId> msTable = client.getTable(tableName, PersonTestObjectWithStringId.class);\n\n        // Call the insert method\n        PersonTestObjectWithStringId p = msTable.insert(person).get();\n\n        // Asserts\n        Assert.assertNotNull(\"Person expected\", p);\n        Assert.assertEquals(person, p);\n        Assert.assertEquals(\"38\", p.getId());\n        Assert.assertEquals(\"John\", p.getFirstName());\n        Assert.assertEquals(\"Foo\", p.getLastName());\n        Assert.assertEquals(29, p.getAge());\n    }\n\n    public void testInsertShouldMutateOriginalEntity() throws Throwable {\n\n        // Object to insert\n        final PersonTestObject originalPerson = new PersonTestObject(\"John\", \"Doe\", 29);\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"id\\\":38, \\\"firstName\\\":\\\"John\\\", \\\"lastName\\\":\\\"Foo\\\", \\\"Age\\\":29}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(tableName, PersonTestObject.class);\n\n        // Call the insert method\n        msTable.insert(originalPerson).get();\n\n        // Asserts\n        Assert.assertEquals(38, originalPerson.getId());\n        Assert.assertEquals(\"John\", originalPerson.getFirstName());\n        Assert.assertEquals(\"Foo\", originalPerson.getLastName());\n        Assert.assertEquals(29, originalPerson.getAge());\n    }\n\n    public void testInsertShouldReturnJSONWithId() throws Throwable {\n\n        // Object to insert\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n\n        final JsonObject jsonPerson = gsonBuilder.create().toJsonTree(person).getAsJsonObject();\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new JSon\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"id\\\":38}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the insert method\n        JsonObject jsonEntity = msTable.insert(jsonPerson).get();\n\n        // Asserts\n        PersonTestObject p = gsonBuilder.create().fromJson(jsonEntity, PersonTestObject.class);\n        Assert.assertNotNull(\"Person expected\", p);\n        Assert.assertEquals(38, p.getId());\n        Assert.assertEquals(person.getFirstName(), p.getFirstName());\n        Assert.assertEquals(person.getLastName(), p.getLastName());\n        Assert.assertEquals(person.getAge(), p.getAge());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testInsertShouldReturnJSONWithIdCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store the object after the insertion, we need this to do\n        // the asserts outside the onSuccess method\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to insert\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n\n        final JsonObject jsonPerson = gsonBuilder.create().toJsonTree(person).getAsJsonObject();\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new JSon\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"id\\\":38}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the insert method\n        msTable.insert(jsonPerson, new TableJsonOperationCallback() {\n\n            @Override\n            public void onCompleted(JsonObject jsonEntity, Exception exception, ServiceFilterResponse response) {\n                container.setResponseValue(jsonEntity.toString());\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        PersonTestObject p = gsonBuilder.create().fromJson(container.getResponseValue(), PersonTestObject.class);\n        Assert.assertNotNull(\"Person expected\", p);\n        Assert.assertEquals(38, p.getId());\n        Assert.assertEquals(person.getFirstName(), p.getFirstName());\n        Assert.assertEquals(person.getLastName(), p.getLastName());\n        Assert.assertEquals(person.getAge(), p.getAge());\n    }\n\n    public void testInsertShouldRemoveIdsAndInsertIfJSONObjectHasMultipleIdProperties() throws Throwable {\n\n        // Object to insert\n        final IdPropertyMultipleIdsTestObject element = new IdPropertyMultipleIdsTestObject(\"John\");\n\n        final JsonObject jsonElement = gsonBuilder.create().toJsonTree(element).getAsJsonObject();\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new JSon\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"id\\\":38}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject jsonEntity = msTable.insert(jsonElement).get();\n\n        // Asserts\n        IdPropertyMultipleIdsTestObject e = gsonBuilder.create().fromJson(jsonEntity, IdPropertyMultipleIdsTestObject.class);\n        Assert.assertNotNull(\"Entity expected\", e);\n        Assert.assertEquals(38, e.getId());\n        Assert.assertEquals(\"John\", e.getName());\n    }\n\n    public void testOperationHandleServerErrorProperly() throws Throwable {\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new JSon\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLine() {\n\n                    @Override\n                    public int getStatusCode() {\n                        return 500;\n                    }\n\n                    @Override\n                    public String getReasonPhrase() {\n                        return \"Internal server error\";\n                    }\n\n                    @Override\n                    public ProtocolVersion getProtocolVersion() {\n                        return null;\n                    }\n                });\n\n                response.setContent(\"{'error': 'Internal server error'}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.setException(new MobileServiceException(\"ERROR\"));\n\n                return resultFuture;\n\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject json = new JsonParser().parse(\"{'myField': 'invalid value'}\").getAsJsonObject();\n\n        // Call the insert method\n        try {\n            msTable.insert(json).get();\n            Assert.fail();\n        } catch (Exception exception) {\n\n            Exception testException = null;\n\n            if (exception instanceof ExecutionException) {\n                testException = (Exception) exception.getCause();\n            } else {\n                testException = exception;\n            }\n\n            assertTrue(testException instanceof MobileServiceException);\n        }\n    }\n\n    public void testOperationWithErrorAndNoContentShowStatusCode() throws Throwable {\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new JSon\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLine() {\n\n                    @Override\n                    public int getStatusCode() {\n                        return 500;\n                    }\n\n                    @Override\n                    public String getReasonPhrase() {\n                        return \"Internal server error\";\n                    }\n\n                    @Override\n                    public ProtocolVersion getProtocolVersion() {\n                        return null;\n                    }\n                });\n\n                response.setContent((String) null);\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.setException(new MobileServiceException(\"Error while processing request\", new MobileServiceException(String.format(\"{'code': %d}\",\n                        response.getStatus().getStatusCode()))));\n\n                return resultFuture;\n\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject json = new JsonParser().parse(\"{'myField': 'invalid value'}\").getAsJsonObject();\n\n        // Call the insert method\n        try {\n            msTable.insert(json).get();\n            Assert.fail();\n        } catch (Exception exception) {\n\n            Exception testException = null;\n\n            if (exception instanceof ExecutionException) {\n                testException = (Exception) exception.getCause();\n            } else {\n                testException = exception;\n            }\n\n            assertTrue(testException instanceof MobileServiceException);\n            assertTrue(testException.getCause().getMessage().contains(\"500\"));\n        }\n    }\n\n    public void testUpdateShouldReturnEntityWithDifferentNameAndAge() throws Throwable {\n\n        // Object to update\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(10);\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"firstName\\\":\\\"Mike\\\", \\\"age\\\":50}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(tableName, PersonTestObject.class);\n\n        // Call the update method\n        PersonTestObject p = msTable.update(person).get();\n\n        // Asserts\n        Assert.assertNotNull(\"Person expected\", p);\n        Assert.assertEquals(person.getId(), p.getId());\n        Assert.assertEquals(\"Mike\", p.getFirstName());\n        Assert.assertEquals(person.getLastName(), p.getLastName());\n        Assert.assertEquals(50, p.getAge());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testUpdateShouldReturnEntityWithDifferentNameAndAgeCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store the object after the update, we need this to do\n        // the asserts outside the onSuccess method\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to update\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(10);\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"firstName\\\":\\\"Mike\\\", \\\"age\\\":50}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(tableName, PersonTestObject.class);\n\n        // Call the update method\n        msTable.update(person, new TableOperationCallback<PersonTestObject>() {\n\n            @Override\n            public void onCompleted(PersonTestObject entity, Exception exception, ServiceFilterResponse response) {\n                container.setPerson(entity);\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        PersonTestObject p = container.getPerson();\n        Assert.assertNotNull(\"Person expected\", p);\n        Assert.assertEquals(person.getId(), p.getId());\n        Assert.assertEquals(\"Mike\", p.getFirstName());\n        Assert.assertEquals(person.getLastName(), p.getLastName());\n        Assert.assertEquals(50, p.getAge());\n    }\n\n    public void testUpdateShouldMutateOriginalEntity() throws Throwable {\n\n        // Object to update\n        final PersonTestObject originalPerson = new PersonTestObject(\"John\", \"Doe\", 29);\n        originalPerson.setId(10);\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"firstName\\\":\\\"Mike\\\", \\\"age\\\":50, \\\"id\\\":38}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(tableName, PersonTestObject.class);\n\n        // Call the update method\n        msTable.update(originalPerson).get();\n\n        // Asserts\n        Assert.assertEquals(38, originalPerson.getId());\n        Assert.assertEquals(\"Mike\", originalPerson.getFirstName());\n        Assert.assertEquals(\"Doe\", originalPerson.getLastName());\n        Assert.assertEquals(50, originalPerson.getAge());\n    }\n\n    public void testUpdateShouldMutateOriginalEntityWithStringId() throws Throwable {\n\n        // Object to update\n        final PersonTestObjectWithStringId originalPerson = new PersonTestObjectWithStringId(\"John\", \"Doe\", 29);\n        originalPerson.setId(\"10\");\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"firstName\\\":\\\"Mike\\\", \\\"age\\\":50, \\\"id\\\":\\\"38\\\"}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceTable<PersonTestObjectWithStringId> msTable = client.getTable(tableName, PersonTestObjectWithStringId.class);\n\n        // Call the update method\n        msTable.update(originalPerson).get();\n\n        // Asserts\n        Assert.assertEquals(\"38\", originalPerson.getId());\n        Assert.assertEquals(\"Mike\", originalPerson.getFirstName());\n        Assert.assertEquals(\"Doe\", originalPerson.getLastName());\n        Assert.assertEquals(50, originalPerson.getAge());\n    }\n\n    public void testUpdateShouldReturnJSONWithDifferentNameAndAge() throws Throwable {\n\n        // Object to update\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(10);\n\n        final JsonObject jsonPerson = gsonBuilder.create().toJsonTree(person).getAsJsonObject();\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"firstName\\\":\\\"Mike\\\", \\\"age\\\":50}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the delete method\n        JsonObject jsonEntity = msTable.update(jsonPerson).get();\n\n        // Asserts\n        PersonTestObject p = gsonBuilder.create().fromJson(jsonEntity, PersonTestObject.class);\n        Assert.assertNotNull(\"Person expected\", p);\n        Assert.assertEquals(person.getId(), p.getId());\n        Assert.assertEquals(\"Mike\", p.getFirstName());\n        Assert.assertEquals(person.getLastName(), p.getLastName());\n        Assert.assertEquals(50, p.getAge());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testUpdateShouldReturnJSONWithDifferentNameAndAgeCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store the object after the update, we need this to do\n        // the asserts outside the onSuccess method\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to update\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(10);\n\n        final JsonObject jsonPerson = gsonBuilder.create().toJsonTree(person).getAsJsonObject();\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"firstName\\\":\\\"Mike\\\", \\\"age\\\":50}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the delete method\n        msTable.update(jsonPerson, new TableJsonOperationCallback() {\n\n            @Override\n            public void onCompleted(JsonObject jsonEntity, Exception exception, ServiceFilterResponse response) {\n                container.setResponseValue(jsonEntity.toString());\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        PersonTestObject p = gsonBuilder.create().fromJson(container.getResponseValue(), PersonTestObject.class);\n        Assert.assertNotNull(\"Person expected\", p);\n        Assert.assertEquals(person.getId(), p.getId());\n        Assert.assertEquals(\"Mike\", p.getFirstName());\n        Assert.assertEquals(person.getLastName(), p.getLastName());\n        Assert.assertEquals(50, p.getAge());\n    }\n\n    public void testUpdateShouldReturnJSONWithDifferentNameWhenUsingIdWithDifferentCasing() throws Throwable {\n\n        // Object to update\n        final IdPropertyWithDifferentIdPropertyCasing objectToUpdate = new IdPropertyWithDifferentIdPropertyCasing(\"John\");\n        objectToUpdate.setId(10);\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{\\\"id\\\":10,\\\"name\\\":\\\"Mike\\\"}\");\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceTable<IdPropertyWithDifferentIdPropertyCasing> msTable = client.getTable(IdPropertyWithDifferentIdPropertyCasing.class);\n\n        // Call the delete method\n        IdPropertyWithDifferentIdPropertyCasing o = msTable.update(objectToUpdate).get();\n\n        // Asserts\n        Assert.assertNotNull(\"Object expected\", o);\n        Assert.assertEquals(objectToUpdate.getId(), o.getId());\n        Assert.assertEquals(\"Mike\", o.getName());\n    }\n\n    public void testUpdateShouldThrowExceptionIfEntityHasNoValidId() throws Throwable {\n\n        // Object to update\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(0);\n\n        String tableName = \"MyTableName\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Get the MobileService table\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(tableName, PersonTestObject.class);\n\n        // Call the update method\n\n        PersonTestObject p = null;\n        try {\n            p = msTable.update(person).get();\n            Assert.fail();\n        } catch (Exception exception) {\n            // Asserts\n            Assert.assertNull(\"Null person expected\", p);\n\n            Exception testException = null;\n\n            if (exception instanceof ExecutionException) {\n                testException = (Exception) exception.getCause();\n            } else {\n                testException = exception;\n            }\n\n            Assert.assertEquals(\"The entity has an invalid numeric value on id property.\", testException.getMessage());\n        }\n    }\n\n\n    @SuppressWarnings(\"deprecation\")\n    public void testDeleteUsingEntityShouldReturnTheExpectedRequestUrlCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to delete\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(10);\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and store the request URL.\n        // Send a mock response\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the delete method sending the entity to delete\n        msTable.delete(client.getGsonBuilder().create().toJsonTree(person).getAsJsonObject(), new TableDeleteCallback() {\n\n            @Override\n            public void onCompleted(Exception exception, ServiceFilterResponse response) {\n                container.setOperationSucceded(exception == null);\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        Assert.assertTrue(\"Opperation should have succeded\", container.getOperationSucceded());\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + person.getId(), container.getRequestUrl());\n    }\n\n    public void testDeleteUsingIdShouldReturnTheExpectedRequestUrl() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to insert\n        final int personId = 10;\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the delete method\n        try {\n            msTable.delete(personId).get();\n            Assert.assertTrue(\"Opperation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Opperation should have succeded\", false);\n        }\n\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + personId, container.getRequestUrl());\n\n    }\n\n    public void testDeleteUsingJSONShouldReturnTheExpectedRequestUrl() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to delete\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(10);\n\n        final JsonObject jsonPerson = gsonBuilder.create().toJsonTree(person).getAsJsonObject();\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and store the request URL.\n        // Send a mock response\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the delete method sending the entity to delete\n        try {\n            msTable.delete(jsonPerson).get();\n            Assert.assertTrue(\"Opperation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Opperation should have succeded\", false);\n        }\n\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + person.getId(), container.getRequestUrl());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testDeleteUsingJSONShouldReturnTheExpectedRequestUrlCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to delete\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(10);\n\n        final JsonObject jsonPerson = gsonBuilder.create().toJsonTree(person).getAsJsonObject();\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and store the request URL.\n        // Send a mock response\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the delete method sending the entity to delete\n        msTable.delete(jsonPerson, new TableDeleteCallback() {\n\n            @Override\n            public void onCompleted(Exception exception, ServiceFilterResponse response) {\n                container.setOperationSucceded(exception == null);\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        Assert.assertTrue(\"Opperation should have succeded\", container.getOperationSucceded());\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + person.getId(), container.getRequestUrl());\n    }\n\n    public void testDeleteUsingEntityShouldReturnTheExpectedRequestUrl() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to delete\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(10);\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and store the request URL.\n        // Send a mock response\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the delete method sending the entity to delete\n        try {\n            msTable.delete(client.getGsonBuilder().create().toJsonTree(person).getAsJsonObject()).get();\n            Assert.assertTrue(\"Opperation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Opperation should have succeded\", false);\n        }\n\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + person.getId(), container.getRequestUrl());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testUndeleteUsingEntityShouldReturnTheExpectedRequestUrlCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to delete\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(10);\n\n        final String tableName = \"PersonTestObject\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and store the request URL.\n        // Send a mock response\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(PersonTestObject.class);\n\n        // Call the delete method sending the entity to delete\n        msTable.undelete(person, new TableOperationCallback<PersonTestObject>() {\n\n            @Override\n            public void onCompleted(PersonTestObject entity, Exception exception, ServiceFilterResponse response) {\n                container.setOperationSucceded(exception == null);\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        Assert.assertTrue(\"Opperation should have succeded\", container.getOperationSucceded());\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + person.getId(), container.getRequestUrl());\n    }\n\n    public void testUndeleteUsingJSONShouldReturnTheExpectedRequestUrl() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to delete\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(10);\n\n        final JsonObject jsonPerson = gsonBuilder.create().toJsonTree(person).getAsJsonObject();\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and store the request URL.\n        // Send a mock response\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the delete method sending the entity to delete\n        try {\n            msTable.undelete(jsonPerson).get();\n            Assert.assertTrue(\"Opperation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Opperation should have succeded\", false);\n        }\n\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + person.getId(), container.getRequestUrl());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testUneleteUsingJSONShouldReturnTheExpectedRequestUrlCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to delete\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(10);\n\n        final JsonObject jsonPerson = gsonBuilder.create().toJsonTree(person).getAsJsonObject();\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and store the request URL.\n        // Send a mock response\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the delete method sending the entity to delete\n        msTable.undelete(jsonPerson, new TableJsonOperationCallback() {\n\n            @Override\n            public void onCompleted(JsonObject entity, Exception exception, ServiceFilterResponse response) {\n                container.setOperationSucceded(exception == null);\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        Assert.assertTrue(\"Opperation should have succeded\", container.getOperationSucceded());\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + person.getId(), container.getRequestUrl());\n    }\n\n    public void testUndeleteUsingEntityShouldReturnTheExpectedRequestUrl() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Object to delete\n        final PersonTestObject person = new PersonTestObject(\"John\", \"Doe\", 29);\n        person.setId(10);\n\n        final String tableName = \"PersonTestObject\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and store the request URL.\n        // Send a mock response\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n\n            }\n        });\n\n        // Get the MobileService table\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(PersonTestObject.class);\n\n        // Call the delete method sending the entity to delete\n        try {\n            msTable.undelete(person).get();\n            Assert.assertTrue(\"Opperation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Opperation should have succeded\", false);\n        }\n\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + person.getId(), container.getRequestUrl());\n    }\n\n    public void testSimpleQueryShouldReturnResults() throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                // PersonTestObject JSon template\n                String personJsonTemplate = \"{\\\"id\\\": %d,\\\"firstName\\\":\\\"%s\\\",\\\"lastName\\\":\\\"%s\\\",\\\"age\\\":%d}\";\n\n                // Generate JSon string with 2 objects\n                String responseContent = \"[\";\n                responseContent += String.format(personJsonTemplate, 1, \"Mike\", \"Foo\", 27) + \",\";\n                responseContent += String.format(personJsonTemplate, 2, \"John\", \"Doe\", 35);\n                responseContent += \"]\";\n\n                // Create a mock response and set the mocked JSon\n                // content\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n\n                response.setContent(responseContent);\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n\n            }\n        });\n\n        List<PersonTestObject> p = client.getTable(tableName, PersonTestObject.class).execute().get();\n\n        // Asserts\n        assertNotNull(\"A list of people is expected\", p);\n        assertEquals(2, p.size());\n        assertEquals(p.get(0).getId(), 1);\n        assertEquals(p.get(1).getId(), 2);\n        assertEquals(p.get(0).getLastName(), \"Foo\");\n        assertEquals(p.get(1).getLastName(), \"Doe\");\n\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testSimpleQueryShouldReturnResultsCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                // PersonTestObject JSon template\n                String personJsonTemplate = \"{\\\"id\\\": %d,\\\"firstName\\\":\\\"%s\\\",\\\"lastName\\\":\\\"%s\\\",\\\"age\\\":%d}\";\n\n                // Generate JSon string with 2 objects\n                String responseContent = \"[\";\n                responseContent += String.format(personJsonTemplate, 1, \"Mike\", \"Foo\", 27) + \",\";\n                responseContent += String.format(personJsonTemplate, 2, \"John\", \"Doe\", 35);\n                responseContent += \"]\";\n\n                // Create a mock response and set the mocked JSon\n                // content\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n\n                response.setContent(responseContent);\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n\n            }\n        });\n\n        client.getTable(tableName, PersonTestObject.class).execute(new TableQueryCallback<PersonTestObject>() {\n\n            @Override\n            public void onCompleted(List<PersonTestObject> result, int count, Exception exception, ServiceFilterResponse response) {\n                container.setPeopleResult(result);\n                container.setCount(count);\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        List<PersonTestObject> p = container.getPeopleResult();\n        assertNotNull(\"A list of people is expected\", p);\n        assertEquals(2, p.size());\n        assertEquals(p.get(0).getId(), 1);\n        assertEquals(p.get(1).getId(), 2);\n        assertEquals(p.get(0).getLastName(), \"Foo\");\n        assertEquals(p.get(1).getLastName(), \"Doe\");\n        assertEquals(-1, container.getCount());\n    }\n\n    public void testSimpleQueryShouldReturnJSONResults() throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        // PersonTestObject JSon template\n        String personJsonTemplate = \"{\\\"id\\\":%d,\\\"firstName\\\":\\\"%s\\\",\\\"lastName\\\":\\\"%s\\\",\\\"age\\\":%d}\";\n\n        // Generate JSon string with 2 objects\n        final String responseContent = \"[\" + String.format(personJsonTemplate, 1, \"Mike\", \"Foo\", 27) + \",\"\n                + String.format(personJsonTemplate, 2, \"John\", \"Doe\", 35) + \"]\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                // Create a mock response and set the mocked JSon\n                // content\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(responseContent);\n\n                response.setContent(responseContent);\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        JsonElement result = client.getTable(tableName).execute().get();\n\n        // Asserts\n        assertEquals(responseContent, result.toString());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testSimpleQueryShouldReturnJSONResultsCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        // PersonTestObject JSon template\n        String personJsonTemplate = \"{\\\"id\\\":%d,\\\"firstName\\\":\\\"%s\\\",\\\"lastName\\\":\\\"%s\\\",\\\"age\\\":%d}\";\n\n        // Generate JSon string with 2 objects\n        final String responseContent = \"[\" + String.format(personJsonTemplate, 1, \"Mike\", \"Foo\", 27) + \",\"\n                + String.format(personJsonTemplate, 2, \"John\", \"Doe\", 35) + \"]\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                // Create a mock response and set the mocked JSon\n                // content\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(responseContent);\n\n                response.setContent(responseContent);\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(tableName).execute(new TableJsonQueryCallback() {\n\n            @Override\n            public void onCompleted(JsonElement result, Exception exception, ServiceFilterResponse response) {\n                container.setResponseValue(result.toString());\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        assertEquals(responseContent, container.getResponseValue());\n    }\n\n    public void testSimpleQueryShouldReturnEmptyArray() throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                // Generate JSon string with 2 objects\n                String responseContent = \"[]\";\n\n                // Create a mock response and set the mocked JSon\n                // content\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(responseContent);\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        List<PersonTestObject> p = client.getTable(tableName, PersonTestObject.class).execute().get();\n\n        // Asserts\n        assertNotNull(\"A list of people is expected\", p);\n        assertEquals(0, p.size());\n    }\n\n    public void testSimpleJSONSelectShouldReturnEmptyJSONArray() throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                // Generate JSon string with 2 objects\n                String responseContent = \"[]\";\n\n                // Create a mock response and set the mocked JSon\n                // content\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(responseContent);\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        JsonElement result = client.getTable(tableName).execute().get();\n\n        // Asserts\n        assertEquals(\"[]\", result.toString());\n    }\n\n    public void testInlineCountSelectShouldReturnResultsWithCount() throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                // PersonTestObject JSon template\n                String personJsonTemplate = \"{\\\"id\\\": %d,\\\"firstName\\\":\\\"%s\\\",\\\"lastName\\\":\\\"%s\\\",\\\"age\\\":%d}\";\n\n                // Create string with results and count values.\n                String responseContent = \"{\\\"results\\\":[\";\n                responseContent += String.format(personJsonTemplate, 1, \"Mike\", \"Foo\", 27) + \",\";\n                responseContent += String.format(personJsonTemplate, 2, \"John\", \"Doe\", 35);\n                responseContent += \"]\";\n                responseContent += \",\\\"count\\\":\\\"15\\\"}\";\n\n                // Create a mock response and set the mocked JSon\n                // content\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(responseContent);\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        List<PersonTestObject> p = client.getTable(tableName, PersonTestObject.class).execute().get();\n\n        // Asserts\n        assertNotNull(\"A list of people is expected\", p);\n        assertEquals(2, p.size());\n        assertEquals(p.get(0).getId(), 1);\n        assertEquals(p.get(1).getId(), 2);\n        assertEquals(p.get(0).getLastName(), \"Foo\");\n        assertEquals(p.get(1).getLastName(), \"Doe\");\n    }\n\n    public void testLookupShouldReturnAPerson() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Person Id\n        final int personId = 4;\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                // Store the request URL\n                container.setRequestUrl(request.getUrl());\n\n                // PersonTestObject JSon template\n                String personJsonTemplate = \"{\\\"id\\\": %d,\\\"firstName\\\":\\\"%s\\\",\\\"lastName\\\":\\\"%s\\\",\\\"age\\\":%d}\";\n\n                // Create a mock response and set the mocked JSon\n                // content\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(String.format(personJsonTemplate, 4, \"John\", \"Doe\", 35));\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        PersonTestObject p = client.getTable(tableName, PersonTestObject.class).lookUp(personId).get();\n\n        // Asserts\n        assertNotNull(\"A person expected\", p);\n        assertEquals(4, p.getId());\n        assertEquals(\"Doe\", p.getLastName());\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + personId, container.getRequestUrl());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testLookupShouldReturnAPersonCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Person Id\n        final int personId = 4;\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                // Store the request URL\n                container.setRequestUrl(request.getUrl());\n\n                // PersonTestObject JSon template\n                String personJsonTemplate = \"{\\\"id\\\": %d,\\\"firstName\\\":\\\"%s\\\",\\\"lastName\\\":\\\"%s\\\",\\\"age\\\":%d}\";\n\n                // Create a mock response and set the mocked JSon\n                // content\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(String.format(personJsonTemplate, 4, \"John\", \"Doe\", 35));\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(tableName, PersonTestObject.class).lookUp(personId, new TableOperationCallback<PersonTestObject>() {\n\n            @Override\n            public void onCompleted(PersonTestObject entity, Exception exception, ServiceFilterResponse response) {\n                container.setPerson(entity);\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        PersonTestObject p = container.getPerson();\n        assertNotNull(\"A person expected\", p);\n        assertEquals(4, p.getId());\n        assertEquals(\"Doe\", p.getLastName());\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + personId, container.getRequestUrl());\n    }\n\n    public void testLookupShouldReturnAJSONPerson() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Person Id\n        final int personId = 4;\n        final String tableName = \"MyTableName\";\n\n        // PersonTestObject JSon template\n        String personJsonTemplate = \"{\\\"id\\\":%d,\\\"firstName\\\":\\\"%s\\\",\\\"lastName\\\":\\\"%s\\\",\\\"age\\\":%d}\";\n\n        final String personJsonString = String.format(personJsonTemplate, 4, \"John\", \"Doe\", 35);\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                // Store the request URL\n                container.setRequestUrl(request.getUrl());\n\n                // Create a mock response and set the mocked JSon\n                // content\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(personJsonString);\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        JsonObject jsonEntity = (JsonObject) client.getTable(tableName).lookUp(personId).get();\n\n        // Asserts\n        assertEquals(personJsonString, jsonEntity.toString());\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + personId, container.getRequestUrl());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testLookupShouldReturnAJSONPersonCallback() throws Throwable {\n        final CountDownLatch latch = new CountDownLatch(1);\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Person Id\n        final int personId = 4;\n        final String tableName = \"MyTableName\";\n\n        // PersonTestObject JSon template\n        String personJsonTemplate = \"{\\\"id\\\":%d,\\\"firstName\\\":\\\"%s\\\",\\\"lastName\\\":\\\"%s\\\",\\\"age\\\":%d}\";\n\n        final String personJsonString = String.format(personJsonTemplate, 4, \"John\", \"Doe\", 35);\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                // Store the request URL\n                container.setRequestUrl(request.getUrl());\n\n                // Create a mock response and set the mocked JSon\n                // content\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(personJsonString);\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(tableName).lookUp(personId, new TableJsonOperationCallback() {\n            @Override\n            public void onCompleted(JsonObject jsonEntity, Exception exception, ServiceFilterResponse response) {\n                if (exception == null) {\n                    container.setResponseValue(jsonEntity.toString());\n                }\n                latch.countDown();\n            }\n        });\n\n        latch.await();\n\n        // Asserts\n        assertEquals(personJsonString, container.getResponseValue());\n        assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + personId, container.getRequestUrl());\n    }\n\n    public void testLookupShouldReturnErrorIfAPersonDoesNotExist() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Person Id\n        final int personId = 4;\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                // Store the request URL\n                container.setRequestUrl(request.getUrl());\n\n                // Create a mock response simulating an error\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLineMock(404));\n                response.setContent(\"{\\\"error\\\":404,\\\"message\\\":\\\"entity does not exist\\\"}\");\n\n                container.setResponseValue(response.getContent());\n\n                // create a mock request to replace the existing one\n                ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n\n                return nextServiceFilterCallback.onNext(requestMock);\n            }\n        });\n\n        try {\n            client.getTable(tableName, PersonTestObject.class).lookUp(personId).get();\n        } catch (Exception exception) {\n            // Asserts\n            assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + personId, container.getRequestUrl());\n            assertTrue(container.getResponseValue().contains(\"{\\\"error\\\":404,\\\"message\\\":\\\"entity does not exist\\\"}\"));\n        }\n    }\n\n    public void testLookupWithJSONShouldReturnErrorIfAPersonDoesNotExist() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        // Person Id\n        final int personId = 4;\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                // Store the request URL\n                container.setRequestUrl(request.getUrl());\n\n                // Create a mock response simulating an error\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLineMock(404));\n                response.setContent(\"{\\\"error\\\":404,\\\"message\\\":\\\"entity does not exist\\\"}\");\n\n                container.setResponseValue(response.getContent());\n                // create a mock request to replace the existing one\n                ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n\n                return nextServiceFilterCallback.onNext(requestMock);\n            }\n        });\n\n        try {\n            client.getTable(tableName).lookUp(personId).get();\n        } catch (Exception exception) {\n            // Asserts\n            assertEquals(this.appUrl + \"tables/\" + tableName + \"/\" + personId, container.getRequestUrl());\n            assertTrue(container.getResponseValue().contains(\"{\\\"error\\\":404,\\\"message\\\":\\\"entity does not exist\\\"}\"));\n        }\n    }\n\n    public void testQueryShouldIncludeFilter() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the update method\n            msTable.where().field(\"fieldName\").eq(1).execute().get();\n            Assert.assertTrue(\"Opperation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Opperation should have succeded\", false);\n        }\n        // Asserts\n        assertEquals(queryUrl(tableName) + EncodingUtilities.percentEncodeSpaces(\"?$filter=fieldName eq (1)\"), container.getRequestUrl());\n    }\n\n    private String queryUrl(String tableName) {\n        return this.appUrl + \"tables/\" + tableName;\n    }\n\n    public void testQueryShouldIncludeTop() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the update method\n        try {\n            msTable.top(10).execute().get();\n            Assert.assertTrue(\"Opperation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Opperation should have succeded\", false);\n        }\n\n        // Asserts\n        assertEquals(queryUrl(tableName) + \"?$top=10\", container.getRequestUrl());\n    }\n\n    public void testQueryShouldIncludeSkip() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        // Call the update method\n        try {\n            msTable.skip(10).execute().get();\n            Assert.assertTrue(\"Opperation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Opperation should have succeded\", false);\n        }\n\n        assertEquals(queryUrl(tableName) + \"?$skip=10\", container.getRequestUrl());\n    }\n\n    public void testQueryShouldIncludeInlineCount() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the update method\n            msTable.includeInlineCount().execute().get();\n            Assert.assertTrue(\"Opperation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Opperation should have succeded\", false);\n        }\n\n        // Asserts\n        assertEquals(queryUrl(tableName) + \"?$inlinecount=allpages\", container.getRequestUrl());\n    }\n\n    public void testQueryShouldIncludeOrderBy() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the update method\n            msTable.orderBy(\"myField\", QueryOrder.Ascending).execute().get();\n            Assert.assertTrue(\"Opperation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Opperation should have succeded\", false);\n        }\n\n        // Asserts\n        assertEquals(queryUrl(tableName) + EncodingUtilities.percentEncodeSpaces(\"?$orderby=myField asc\"), container.getRequestUrl());\n    }\n\n    public void testQueryShouldIncludeProjection() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        try {\n            // Call the update method\n            msTable.select(\"myField\", \"otherField\").execute().get();\n            Assert.assertTrue(\"Opperation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Opperation should have succeded\", false);\n        }\n\n        // Asserts\n        assertEquals(queryUrl(tableName) + \"?$select=myField,otherField\", container.getRequestUrl());\n    }\n\n\n    public void testMobileServiceTableQueryWithContinuationTokenOnHeader() throws  Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n        final String nextLink = \"\\\"https://issue536.azure-mobile.net/tables/Person?$top=5&$select=Name,Age,PartitionKey,RowKey,Timestamp,ETag&NextPartitionKey=1!12!cGFydGl0aW9u&NextRowKey=1!48!MDg3NGQ1NTktZjhlNi00OTc0LTkyOTctNjc5MWZkMzkyZTdk\";\n        final String nextLinkContinuation = \"; rel=next\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                ServiceFilterResponseMock responseMock = new ServiceFilterResponseMock();\n\n                Header[] responseHeaders = new Header[1];\n\n                Header responseHeader =  new BasicHeader(\"Link\", nextLink + nextLinkContinuation);\n\n                responseHeaders[0] = responseHeader;\n\n                responseMock.setHeaders(responseHeaders);\n\n                resultFuture.set(responseMock);\n\n                return resultFuture;\n            }\n        });\n\n\n        // Create get the MobileService table\n        MobileServiceTable<PersonTestObject> msTable = client.getTable(PersonTestObject.class);\n\n        Query query =\n                QueryOperations\n                        .tableName(tableName)\n                        .top(5);\n\n        MobileServiceList<PersonTestObject> results = null;\n\n        try {\n            // Call the execute method\n            results = msTable.execute(query).get();\n\n            Assert.assertTrue(\"Operation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Operation should have succeded\", false);\n        }\n\n        Assert.assertEquals(results.getNextLink(), nextLink);\n    }\n\n    public void testMobileServiceJsonTableQueryWithContinuationTokenOnHeader() throws  Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n        final String nextLink = \"\\\"https://issue536.azure-mobile.net/tables/Person?$top=5&$select=Name,Age,PartitionKey,RowKey,Timestamp,ETag&NextPartitionKey=1!12!cGFydGl0aW9u&NextRowKey=1!48!MDg3NGQ1NTktZjhlNi00OTc0LTkyOTctNjc5MWZkMzkyZTdk\";\n        final String nextLinkContinuation = \"; rel=next\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setRequestUrl(request.getUrl());\n                // call onResponse with the mocked response\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                ServiceFilterResponseMock responseMock = new ServiceFilterResponseMock();\n\n                Header[] responseHeaders = new Header[1];\n\n                Header responseHeader =  new BasicHeader(\"Link\", nextLink + nextLinkContinuation);\n\n                responseHeaders[0] = responseHeader;\n\n                responseMock.setHeaders(responseHeaders);\n\n                resultFuture.set(responseMock);\n\n                return resultFuture;\n            }\n        });\n\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        Query query =\n                QueryOperations\n                        .tableName(tableName)\n                        .top(5);\n\n        JsonElement results = null;\n\n        try {\n            // Call the execute method\n            results = msTable.execute(query).get();\n\n            Assert.assertTrue(\"Operation should have succeded\", true);\n        } catch (Exception exception) {\n            Assert.assertTrue(\"Operation should have succeded\", false);\n        }\n\n        Assert.assertEquals(results.getAsJsonObject().get(\"nextLink\").getAsString(), nextLink);\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/MobileServiceUserTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.test.InstrumentationTestCase;\n\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;\n\npublic class MobileServiceUserTests extends InstrumentationTestCase {\n\n    public void testNewMobileServiceUser() {\n\n        MobileServiceUser user = new MobileServiceUser(null);\n        assertNull(user.getUserId());\n\n        user = new MobileServiceUser(\"myUserId\");\n        assertEquals(\"myUserId\", user.getUserId());\n\n        user.setAuthenticationToken(null);\n        assertNull(user.getAuthenticationToken());\n\n        user.setAuthenticationToken(\"myAuthToken\");\n        assertEquals(\"myAuthToken\", user.getAuthenticationToken());\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/SQLiteStoreQueryTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.content.Context;\nimport android.test.InstrumentationTestCase;\n\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.helpers.SQLiteStoreTestsUtilities;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOperations;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\nimport com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore;\n\nimport java.util.ArrayList;\nimport java.util.Calendar;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\npublic class SQLiteStoreQueryTests extends InstrumentationTestCase {\n\n    private String TestDbName = \"queryTest.db\";\n    private String TestTable = \"todo\";\n    private String MathTestTable = \"mathtest\";\n    private boolean queryTableInitialized;\n    private Date epoch;\n\n    protected void setUp() throws Exception {\n        super.setUp();\n\n        Calendar cal = Calendar.getInstance();\n        cal.set(1970, Calendar.JANUARY, 1);\n        epoch = cal.getTime();\n\n    }\n\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    public void testQueryOnBool() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query1 = QueryOperations.tableName(TestTable).field(\"col5\").eq(true);\n        testQuery(query1, 4);\n\n        Query query2 = QueryOperations.tableName(TestTable).field(\"col5\").eq(false);\n        testQuery(query2, 2);\n    }\n\n    public void testQueryNotOperatorWithBoolComparison() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query = QueryOperations.tableName(TestTable).not().field(\"col5\").eq(true);\n        testQuery(query, 2);\n    }\n\n    public void testQueryDateBeforeEpoch() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query = QueryOperations.tableName(TestTable).field(\"col4\").gt(epoch);\n        testQuery(query, 6);\n    }\n\n    public void testQueryDateTimeOffsetBeforeEpoch() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query = QueryOperations.tableName(TestTable).field(\"col6\").gt(epoch);\n        testQuery(query, 6);\n    }\n\n    public void testQueryWithTop() throws MobileServiceLocalStoreException {\n        Query query = QueryOperations.tableName(TestTable).top(5);\n        testQuery(query, 5);\n    }\n\n    public void testQueryWithSelection() throws MobileServiceLocalStoreException {\n        Query query = QueryOperations.tableName(TestTable).select(\"col1\", \"col2\");\n\n        JsonArray results = runQuery(query);\n\n        assertEquals(results.size(), 6);\n\n        assertJsonArraysAreEqual(results, getQueryWithSelectionTestData());\n    }\n\n    public void testQueryWithOrderingDescending() throws MobileServiceLocalStoreException {\n        Query query = QueryOperations.tableName(TestTable).select(\"col1\", \"col2\").orderBy(\"col2\", QueryOrder.Descending);\n\n        JsonArray results = runQuery(query);\n\n        assertEquals(results.size(), 6);\n\n        assertJsonArraysAreEqual(results, getQueryWithOrderingDescending());\n    }\n\n    public void testQueryComplexFilter() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query = QueryOperations.tableName(TestTable).field(\"col1\").eq(\"brown\").or().field(\"col1\").eq(\"fox\").and().field(\"col2\").le(5);\n\n        JsonArray results = runQuery(query);\n\n        assertEquals(results.size(), 1);\n\n        assertEquals(results.get(0).getAsJsonObject().get(\"id\").getAsString(), getTestData()[2].getAsJsonObject().get(\"id\").getAsString());\n    }\n\n    // public void testQueryOnStringIndexOf() throws MobileServiceException,\n    // MobileServiceLocalStoreException {\n    // Query query1 = QueryOperations.tableName(TestTable).indexOf(\"col1\",\n    // \"ump\").eq(1);\n    //\n    // testQuery(query1, 1);\n    //\n    // Query query2 = QueryOperations.tableName(TestTable).indexOf(\"col1\",\n    // \"ump\").eq(2);\n    //\n    // testQuery(query2, 0);\n    // }\n\n    public void testQueryOnStringStartsWith() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query1 = QueryOperations.tableName(TestTable).startsWith(\"col1\", \"qu\");\n\n        testQuery(query1, 1);\n\n        Query query2 = QueryOperations.tableName(TestTable).startsWith(\"col1\", \"ump\");\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryOnStringEndsWith() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query1 = QueryOperations.tableName(TestTable).endsWith(\"col1\", \"ox\");\n\n        testQuery(query1, 1);\n\n        Query query2 = QueryOperations.tableName(TestTable).endsWith(\"col1\", \"ump\");\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryOnStringSubstringOf() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query1 = QueryOperations.tableName(TestTable).subStringOf(\"qu\", \"col1\");\n\n        testQuery(query1, 1);\n\n        Query query2 = QueryOperations.tableName(TestTable).subStringOf(\"fer\", \"col1\");\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryOnStringTrim() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query1 = QueryOperations.tableName(TestTable).trim(\"col1\").eq(\"EndsWithBackslash\\\\\");\n\n        testQuery(query1, 1);\n\n        Query query2 = QueryOperations.tableName(TestTable).trim(\"col1\").eq(\" EndsWithBackslash\\\\\");\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryOnStringConcatAndCompare() throws MobileServiceLocalStoreException, MobileServiceException {\n        Query query1 = QueryOperations.tableName(TestTable).concat(QueryOperations.concat(QueryOperations.field(\"col1\"), \"ies\"), QueryOperations.field(\"col2\"))\n                .eq(\"brownies1.0\");\n\n        testQuery(query1, 1);\n\n        Query query2 = QueryOperations.tableName(TestTable).concat(QueryOperations.concat(QueryOperations.field(\"col1\"), \"ies\"), QueryOperations.field(\"col2\"))\n                .eq(\"brownies2.0\");\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryOnYear() throws MobileServiceLocalStoreException, MobileServiceException {\n        Query query1 = QueryOperations.tableName(TestTable).year(\"col4\").eq(1970);\n\n        testQuery(query1, 6);\n\n        Query query2 = QueryOperations.tableName(TestTable).year(\"col4\").eq(2015);\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryOnMonth() throws MobileServiceLocalStoreException, MobileServiceException {\n        Query query1 = QueryOperations.tableName(TestTable).month(\"col4\").eq(1);\n\n        testQuery(query1, 6);\n\n        Query query2 = QueryOperations.tableName(TestTable).month(\"col4\").eq(12);\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryOnDay() throws MobileServiceLocalStoreException, MobileServiceException {\n        Query query1 = QueryOperations.tableName(TestTable).month(\"col4\").eq(1);\n\n        testQuery(query1, 6);\n\n        Query query2 = QueryOperations.tableName(TestTable).month(\"col4\").eq(31);\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryOnStringReplaceAndCompare() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query1 = QueryOperations.tableName(TestTable).replace(\"col1\", \"j\", \"p\").eq(\"pumped\");\n\n        testQuery(query1, 1);\n\n        Query query2 = QueryOperations.tableName(TestTable).replace(\"col1\", \"j\", \"x\").eq(\"pumped\");\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryOnStringSubstringAndCompare() throws MobileServiceException, MobileServiceLocalStoreException {\n\n        Query query1 = QueryOperations.tableName(TestTable).subString(\"col1\", 1).eq(\"ox\");\n\n        testQuery(query1, 1);\n\n        Query query2 = QueryOperations.tableName(TestTable).subString(\"col1\", 1).eq(\"oy\");\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryOnStringSubstringToUpper() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query1 = QueryOperations.tableName(TestTable).toUpper(\"col1\").eq(\"FOX\");\n\n        testQuery(query1, 1);\n\n        Query query2 = QueryOperations.tableName(TestTable).toUpper(\"col1\").eq(\"fox\");\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryOnStringSubstringToLower() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query1 = QueryOperations.tableName(TestTable).toLower(\"col1\").eq(\"fox\");\n\n        testQuery(query1, 1);\n\n        Query query2 = QueryOperations.tableName(TestTable).toLower(\"col1\").eq(\"FOX\");\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryOnStringSubstringWithLengthAndCompare() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query1 = QueryOperations.tableName(TestTable).subString(\"col1\", 1, 3).eq(\"uic\");\n\n        testQuery(query1, 1);\n\n        Query query2 = QueryOperations.tableName(TestTable).subString(\"col1\", 1, 3).eq(\"uix\");\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryMathModuloOperator() throws MobileServiceLocalStoreException, MobileServiceException {\n        Query query = QueryOperations.tableName(TestTable).field(\"col3\").mod(3).eq(0);\n\n        JsonArray results = runQuery(query);\n\n        assertEquals(results.size(), 3);\n    }\n\n    public void testQueryMathRound() throws MobileServiceException, MobileServiceLocalStoreException {\n        List<JsonObject> result = new ArrayList<JsonObject>();\n\n        JsonObject item5 = new JsonObject();\n        item5.addProperty(\"val\", -0.0900);\n        item5.addProperty(\"expected\", 0);\n        result.add(item5);\n\n        JsonObject item6 = new JsonObject();\n        item6.addProperty(\"val\", -1.0900);\n        item6.addProperty(\"expected\", -1);\n        result.add(item6);\n\n        JsonObject item4 = new JsonObject();\n        item4.addProperty(\"val\", 1.0900);\n        item4.addProperty(\"expected\", 1);\n        result.add(item4);\n\n        JsonObject item1 = new JsonObject();\n        item1.addProperty(\"val\", 0.0900);\n        item1.addProperty(\"expected\", 0);\n        result.add(item1);\n\n        JsonObject item2 = new JsonObject();\n        item2.addProperty(\"val\", 1.5);\n        item2.addProperty(\"expected\", 2);\n        result.add(item2);\n\n        JsonObject item3 = new JsonObject();\n        item3.addProperty(\"val\", -1.5);\n        item3.addProperty(\"expected\", -2);\n        result.add(item3);\n\n        Query query = QueryOperations.tableName(MathTestTable).round(QueryOperations.field(\"val\")).eq(QueryOperations.field(\"expected\"));\n\n        testMathQuery(result.toArray(new JsonObject[0]), query);\n    }\n\n    public void testQueryMathCeiling() throws MobileServiceException, MobileServiceLocalStoreException {\n        List<JsonObject> result = new ArrayList<JsonObject>();\n\n        JsonObject item5 = new JsonObject();\n        item5.addProperty(\"val\", -0.0900);\n        item5.addProperty(\"expected\", 0);\n        result.add(item5);\n\n        JsonObject item6 = new JsonObject();\n        item6.addProperty(\"val\", -1.0900);\n        item6.addProperty(\"expected\", -1);\n        result.add(item6);\n\n        JsonObject item4 = new JsonObject();\n        item4.addProperty(\"val\", 1.0900);\n        item4.addProperty(\"expected\", 2);\n        result.add(item4);\n\n        JsonObject item1 = new JsonObject();\n        item1.addProperty(\"val\", 0.0900);\n        item1.addProperty(\"expected\", 1);\n        result.add(item1);\n\n        Query query = QueryOperations.tableName(MathTestTable).ceiling(QueryOperations.field(\"val\")).eq(QueryOperations.field(\"expected\"));\n\n        testMathQuery(result.toArray(new JsonObject[0]), query);\n    }\n\n    public void testQueryOnStringLength() throws MobileServiceException, MobileServiceLocalStoreException {\n        Query query1 = QueryOperations.tableName(TestTable).length(\"col1\").eq(19);\n\n        testQuery(query1, 1);\n\n        Query query2 = QueryOperations.tableName(TestTable).length(\"col1\").eq(20);\n\n        testQuery(query2, 0);\n    }\n\n    public void testQueryWithPaging() throws MobileServiceLocalStoreException {\n        for (int skip = 0; skip < 4; skip++) {\n            for (int take = 1; take < 4; take++) {\n                Query query = QueryOperations.tableName(TestTable).skip(skip).top(take);\n\n                JsonArray queryResults = runQuery(query);\n\n                if ((skip + take - 1) < getTestData().length) {\n                    assertEquals(queryResults.get(take - 1).getAsJsonObject().get(\"id\").getAsString(), getTestData()[skip + take - 1].get(\"id\").getAsString());\n                }\n            }\n        }\n    }\n\n    public void testQueryWithTotalCount() throws MobileServiceLocalStoreException {\n        Query query = QueryOperations.tableName(TestTable).top(5).includeInlineCount();\n\n        JsonObject queryResults = runQuery(query);\n\n        JsonArray results = queryResults.get(\"results\").getAsJsonArray();\n        long resultCount = queryResults.get(\"count\").getAsLong();\n\n        assertEquals(results.size(), 5);\n        assertEquals(resultCount, 6);\n    }\n\n    private JsonObject[] getTestData() {\n\n        ArrayList<JsonObject> result = new ArrayList<JsonObject>();\n\n        Calendar cal1 = Calendar.getInstance();\n        cal1.set(1970, Calendar.JANUARY, 1);\n        cal1.add(Calendar.MILLISECOND, 32434);\n\n        JsonObject item1 = new JsonObject();\n        item1.addProperty(\"id\", \"1\");\n        item1.addProperty(\"col1\", \"the\");\n        item1.addProperty(\"col2\", 5.0);\n        item1.addProperty(\"col3\", 234f);\n        item1.addProperty(\"col4\", DateSerializer.serialize(cal1.getTime()));\n        item1.addProperty(\"col5\", false);\n        item1.addProperty(\"col6\", DateSerializer.serialize(cal1.getTime()));\n        result.add(item1);\n\n        Calendar cal2 = Calendar.getInstance();\n        cal2.set(1970, Calendar.JANUARY, 1);\n        cal2.add(Calendar.MILLISECOND, 99797);\n\n        JsonObject item2 = new JsonObject();\n        item2.addProperty(\"id\", \"2\");\n        item2.addProperty(\"col1\", \"quick\");\n        item2.addProperty(\"col2\", 3.0);\n        item2.addProperty(\"col3\", 9867.12);\n        item2.addProperty(\"col4\", DateSerializer.serialize(cal2.getTime()));\n        item2.addProperty(\"col5\", true);\n        item2.addProperty(\"col6\", DateSerializer.serialize(cal2.getTime()));\n        result.add(item2);\n\n        Calendar cal3 = Calendar.getInstance();\n        cal3.set(1970, Calendar.JANUARY, 1);\n        cal3.add(Calendar.MILLISECOND, 239873840);\n\n        JsonObject item3 = new JsonObject();\n        item3.addProperty(\"id\", \"3\");\n        item3.addProperty(\"col1\", \"brown\");\n        item3.addProperty(\"col2\", 1.0);\n        item3.addProperty(\"col3\", 11f);\n        item3.addProperty(\"col4\", DateSerializer.serialize(cal3.getTime()));\n        item3.addProperty(\"col5\", false);\n        item3.addProperty(\"col6\", DateSerializer.serialize(cal3.getTime()));\n        result.add(item3);\n\n        Calendar cal4 = Calendar.getInstance();\n        cal4.set(1970, Calendar.JANUARY, 1);\n        cal4.add(Calendar.MILLISECOND, 888888888);\n\n        JsonObject item4 = new JsonObject();\n        item4.addProperty(\"id\", \"4\");\n        item4.addProperty(\"col1\", \"fox\");\n        item4.addProperty(\"col2\", 6.0);\n        item4.addProperty(\"col3\", 23908.99);\n        item4.addProperty(\"col4\", DateSerializer.serialize(cal4.getTime()));\n        item4.addProperty(\"col5\", true);\n        item4.addProperty(\"col6\", DateSerializer.serialize(cal4.getTime()));\n        result.add(item4);\n\n        Calendar cal5 = Calendar.getInstance();\n        cal5.set(1970, Calendar.JANUARY, 1);\n        cal5.add(Calendar.MILLISECOND, 333333332);\n\n        JsonObject item5 = new JsonObject();\n        item5.addProperty(\"id\", \"5\");\n        item5.addProperty(\"col1\", \"jumped\");\n        item5.addProperty(\"col2\", 9.0);\n        item5.addProperty(\"col3\", 678.932);\n        item5.addProperty(\"col4\", DateSerializer.serialize(cal5.getTime()));\n        item5.addProperty(\"col5\", true);\n        item5.addProperty(\"col6\", DateSerializer.serialize(cal5.getTime()));\n        result.add(item5);\n\n        Calendar cal6 = Calendar.getInstance();\n        cal6.set(1970, Calendar.JANUARY, 1);\n        cal6.add(Calendar.MILLISECOND, 333333333);\n\n        JsonObject item6 = new JsonObject();\n        item6.addProperty(\"id\", \"6\");\n        item6.addProperty(\"col1\", \" EndsWithBackslash\\\\\");\n        item6.addProperty(\"col2\", 8.0);\n        item6.addProperty(\"col3\", 521f);\n        item6.addProperty(\"col4\", DateSerializer.serialize(cal6.getTime()));\n        item6.addProperty(\"col5\", true);\n        item6.addProperty(\"col6\", DateSerializer.serialize(cal6.getTime()));\n        result.add(item6);\n\n        return result.toArray(new JsonObject[0]);\n    }\n\n    private JsonArray getQueryWithSelectionTestData() {\n\n        JsonArray result = new JsonArray();\n\n        JsonObject item1 = new JsonObject();\n        item1.addProperty(\"col1\", \"the\");\n        item1.addProperty(\"col2\", 5.0);\n        result.add(item1);\n\n        JsonObject item2 = new JsonObject();\n        item2.addProperty(\"col1\", \"quick\");\n        item2.addProperty(\"col2\", 3.0);\n        result.add(item2);\n\n        JsonObject item3 = new JsonObject();\n        item3.addProperty(\"col1\", \"brown\");\n        item3.addProperty(\"col2\", 1.0);\n        result.add(item3);\n\n        JsonObject item4 = new JsonObject();\n        item4.addProperty(\"col1\", \"fox\");\n        item4.addProperty(\"col2\", 6.0);\n        result.add(item4);\n\n        JsonObject item5 = new JsonObject();\n        item5.addProperty(\"col1\", \"jumped\");\n        item5.addProperty(\"col2\", 9.0);\n        result.add(item5);\n\n        JsonObject item6 = new JsonObject();\n        item6.addProperty(\"col1\", \" EndsWithBackslash\\\\\");\n        item6.addProperty(\"col2\", 8.0);\n        result.add(item6);\n\n        return result;\n    }\n\n    private JsonArray getQueryWithOrderingDescending() {\n\n        JsonArray result = new JsonArray();\n\n        JsonObject item5 = new JsonObject();\n        item5.addProperty(\"col1\", \"jumped\");\n        item5.addProperty(\"col2\", 9.0);\n        result.add(item5);\n\n        JsonObject item6 = new JsonObject();\n        item6.addProperty(\"col1\", \" EndsWithBackslash\\\\\");\n        item6.addProperty(\"col2\", 8.0);\n        result.add(item6);\n\n        JsonObject item4 = new JsonObject();\n        item4.addProperty(\"col1\", \"fox\");\n        item4.addProperty(\"col2\", 6.0);\n        result.add(item4);\n\n        JsonObject item1 = new JsonObject();\n        item1.addProperty(\"col1\", \"the\");\n        item1.addProperty(\"col2\", 5.0);\n        result.add(item1);\n\n        JsonObject item2 = new JsonObject();\n        item2.addProperty(\"col1\", \"quick\");\n        item2.addProperty(\"col2\", 3.0);\n        result.add(item2);\n\n        JsonObject item3 = new JsonObject();\n        item3.addProperty(\"col1\", \"brown\");\n        item3.addProperty(\"col2\", 1.0);\n        result.add(item3);\n\n        return result;\n    }\n\n    private void assertJsonArraysAreEqual(JsonArray results, JsonArray expected) {\n        String actualResult = results.toString();\n        String expectedResult = expected.toString();\n        assertEquals(actualResult, expectedResult);\n    }\n\n    private void testMathQuery(JsonObject[] mathTestData, Query query) throws MobileServiceLocalStoreException {\n        SQLiteLocalStore store = setupMathTestTable(mathTestData);\n\n        JsonArray results = runQuery(store, query);\n\n        assertEquals(results.size(), mathTestData.length);\n    }\n\n    private void testQuery(Query query, int expectedResults) throws MobileServiceLocalStoreException {\n\n        JsonArray results = runQuery(query);\n\n        assertEquals(results.size(), expectedResults);\n    }\n\n    private <T> T runQuery(Query query) throws MobileServiceLocalStoreException // where\n    // T:JToken\n    {\n        SQLiteLocalStore store = setupTestTable();\n\n        return runQuery(store, query);\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    private <T> T runQuery(SQLiteLocalStore store, Query query) throws MobileServiceLocalStoreException // where\n    // T:JToken\n    {\n        T read = (T) store.read(query);\n\n        return read;\n    }\n\n    private SQLiteLocalStore setupMathTestTable(JsonObject[] mathTestData) throws MobileServiceLocalStoreException {\n        SQLiteStoreTestsUtilities.dropTestTable(this.getContext(), TestDbName, MathTestTable);\n\n        // first create a table called todo\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n        tableDefinition.put(\"val\", ColumnDataType.Real);\n        tableDefinition.put(\"expected\", ColumnDataType.Real);\n\n        store.defineTable(MathTestTable, tableDefinition);\n\n        store.initialize();\n\n        insertAll(store, MathTestTable, mathTestData);\n\n        return store;\n    }\n\n    private SQLiteLocalStore setupTestTable() throws MobileServiceLocalStoreException {\n        if (!queryTableInitialized) {\n            SQLiteStoreTestsUtilities.dropTestTable(this.getContext(), TestDbName, TestTable);\n        }\n\n        // first create a table called todo\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n        tableDefinition.put(\"col1\", ColumnDataType.String);\n        tableDefinition.put(\"col2\", ColumnDataType.Real);\n        tableDefinition.put(\"col3\", ColumnDataType.Real);\n        tableDefinition.put(\"col4\", ColumnDataType.Date);\n        tableDefinition.put(\"col5\", ColumnDataType.Boolean);\n        tableDefinition.put(\"col6\", ColumnDataType.DateTimeOffset);\n\n        store.defineTable(TestTable, tableDefinition);\n\n        store.initialize();\n\n        if (!queryTableInitialized) {\n            insertAll(store, TestTable, getTestData());\n        }\n\n        queryTableInitialized = true;\n\n        return store;\n    }\n\n    private void insertAll(SQLiteLocalStore store, String tableName, JsonObject[] items) throws MobileServiceLocalStoreException {\n        store.upsert(tableName, items, false);\n    }\n\n    private Context getContext() {\n        return getInstrumentation().getTargetContext();\n    }\n}"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/SQLiteStoreTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.content.Context;\nimport android.test.InstrumentationTestCase;\n\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.helpers.SQLiteStoreTestsUtilities;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.CustomFunctionOneParameter;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOperations;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore;\n\nimport java.util.Calendar;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.concurrent.CountDownLatch;\n\npublic class SQLiteStoreTests extends InstrumentationTestCase {\n\n    private String TestDbName = \"queryTest.db\";\n    private String TestTable = \"todo\";\n    private Date epoch;\n\n    protected void setUp() throws Exception {\n        super.setUp();\n\n        Calendar cal = Calendar.getInstance();\n        cal.set(1970, Calendar.JANUARY, 1);\n        epoch = cal.getTime();\n\n    }\n\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    public void testInitializeInitializesTheStore() throws MobileServiceLocalStoreException {\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n        tableDefinition.put(\"id\", ColumnDataType.String);\n        tableDefinition.put(\"__createdAt\", ColumnDataType.DateTimeOffset);\n\n        store.defineTable(TestTable, tableDefinition);\n\n        store.initialize();\n    }\n\n    private Context getContext() {\n        // TODO Auto-generated method stub\n        return getInstrumentation().getTargetContext();\n    }\n\n    public void testLookupThrowsWhenStoreIsNotInitialized() {\n        CustomFunctionOneParameter<SQLiteLocalStore, Void> storeAction = new CustomFunctionOneParameter<SQLiteLocalStore, Void>() {\n            public Void apply(SQLiteLocalStore store) throws MobileServiceLocalStoreException {\n\n                store.lookup(\"asdf\", \"asdf\");\n                return null;\n            }\n        };\n\n        testStoreThrowOnUninitialized(storeAction);\n    }\n\n    public void testLookupReadsItem() throws MobileServiceLocalStoreException {\n\n        prepareTodoTable();\n\n        Date testDate = new Date();\n\n        long date = (long) (testDate.getTime() - epoch.getTime());\n\n        // insert a row and make sure it is inserted\n        SQLiteStoreTestsUtilities.executeNonQuery(this.getContext(), TestDbName, \"INSERT INTO todo (id, __createdat) VALUES ('abc', \" + date + \")\");\n\n        long count = SQLiteStoreTestsUtilities.countRows(this.getContext(), TestDbName, TestTable);\n\n        assertEquals(count, 1L);\n\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        defineTestTable(store);\n        store.initialize();\n\n        JsonObject item = store.lookup(TestTable, \"abc\");\n        assertNotNull(item);\n        assertEquals(item.get(\"id\").getAsString(), \"abc\");\n        assertEquals(item.get(\"__createdat\").getAsLong(), date);\n    }\n\n    public void testReadThrowsWhenStoreIsNotInitialized() {\n        CustomFunctionOneParameter<SQLiteLocalStore, Void> storeAction = new CustomFunctionOneParameter<SQLiteLocalStore, Void>() {\n            public Void apply(SQLiteLocalStore store) throws MobileServiceLocalStoreException {\n\n                Query q = QueryOperations.tableName(\"abc\");\n\n                store.read(q);\n\n                return null;\n            }\n        };\n\n        testStoreThrowOnUninitialized(storeAction);\n    }\n\n    public void testReadReadsItems() throws MobileServiceLocalStoreException, MobileServiceException {\n        prepareTodoTable();\n\n        // insert a row and make sure it is inserted\n        SQLiteStoreTestsUtilities\n                .executeNonQuery(this.getContext(), TestDbName, \"INSERT INTO todo (id, __createdAt) VALUES ('abc', 1), ('def', 2), ('ghi', 3)\");\n\n        long count = SQLiteStoreTestsUtilities.countRows(this.getContext(), TestDbName, TestTable);\n\n        assertEquals(count, 3L);\n\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        defineTestTable(store);\n        store.initialize();\n\n        Query query = QueryOperations.tableName(\"todo\").field(\"__createdAt\").gt(1).includeInlineCount();\n\n        JsonObject queryResults = store.read(query).getAsJsonObject();\n\n        assertNotNull(queryResults);\n\n        JsonArray results = queryResults.get(\"results\").getAsJsonArray();\n        long resultCount = queryResults.get(\"count\").getAsLong();\n\n        assertEquals(results.size(), 2);\n        assertEquals(resultCount, 2L);\n    }\n\n    public void testDeleteByQueryThrowsWhenStoreIsNotInitialized() {\n        CustomFunctionOneParameter<SQLiteLocalStore, Void> storeAction = new CustomFunctionOneParameter<SQLiteLocalStore, Void>() {\n            public Void apply(SQLiteLocalStore store) throws MobileServiceLocalStoreException {\n\n                Query q = QueryOperations.tableName(\"abc\");\n\n                store.delete(q);\n\n                return null;\n            }\n        };\n\n        testStoreThrowOnUninitialized(storeAction);\n    }\n\n    public void testDeleteByIdThrowsWhenStoreIsNotInitialized() {\n        CustomFunctionOneParameter<SQLiteLocalStore, Void> storeAction = new CustomFunctionOneParameter<SQLiteLocalStore, Void>() {\n            public Void apply(SQLiteLocalStore store) throws MobileServiceLocalStoreException {\n\n                store.delete(\"abc\", \"\");\n\n                return null;\n            }\n        };\n\n        testStoreThrowOnUninitialized(storeAction);\n    }\n\n    public void testDeleteDeletesTheRowWhenTheyMatchTheQuery() throws MobileServiceLocalStoreException, MobileServiceException {\n        prepareTodoTable();\n\n        // insert a row and make sure it is inserted\n        SQLiteStoreTestsUtilities\n                .executeNonQuery(this.getContext(), TestDbName, \"INSERT INTO todo (id, __createdAt) VALUES ('abc', 1), ('def', 2), ('ghi', 3)\");\n\n        long count = SQLiteStoreTestsUtilities.countRows(this.getContext(), TestDbName, TestTable);\n\n        assertEquals(count, 3L);\n\n        // delete the row\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        defineTestTable(store);\n        store.initialize();\n\n        Query query = QueryOperations.tableName(\"todo\").field(\"__createdAt\").gt(1).includeInlineCount();\n\n        store.delete(query);\n        count = SQLiteStoreTestsUtilities.countRows(this.getContext(), TestDbName, TestTable);\n\n        assertEquals(count, 1L);\n    }\n\n    public void testDeleteDeletesTheRow() throws MobileServiceLocalStoreException {\n        prepareTodoTable();\n\n        // insert a row and make sure it is inserted\n        SQLiteStoreTestsUtilities.executeNonQuery(this.getContext(), TestDbName, \"INSERT INTO todo (id, __createdAt) VALUES ('abc', 123)\");\n\n        long count = SQLiteStoreTestsUtilities.countRows(this.getContext(), TestDbName, TestTable);\n\n        assertEquals(count, 1L);\n\n        // delete the row\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        defineTestTable(store);\n        store.initialize();\n\n        store.delete(TestTable, \"abc\");\n        count = SQLiteStoreTestsUtilities.countRows(this.getContext(), TestDbName, TestTable);\n\n        assertEquals(count, 0L);\n\n        // rows should be zero now\n        count = SQLiteStoreTestsUtilities.countRows(this.getContext(), TestDbName, TestTable);\n        assertEquals(count, 0L);\n    }\n\n    public void testUpsertThrowsWhenStoreIsNotInitialized() {\n        CustomFunctionOneParameter<SQLiteLocalStore, Void> storeAction = new CustomFunctionOneParameter<SQLiteLocalStore, Void>() {\n            public Void apply(SQLiteLocalStore store) throws MobileServiceLocalStoreException {\n\n                store.upsert(\"asdf\", new JsonObject(), false);\n\n                return null;\n            }\n        };\n\n        testStoreThrowOnUninitialized(storeAction);\n    }\n\n    public void testUpsertNoThrowsWhenColumnInItemIsNotDefinedAndItIsFromServer() throws MobileServiceLocalStoreException {\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n        tableDefinition.put(\"dob\", ColumnDataType.Date);\n\n        store.defineTable(TestTable, tableDefinition);\n        store.initialize();\n\n        try {\n\n            JsonObject item = new JsonObject();\n            item.addProperty(\"notDefined\", \"okok\");\n\n            store.upsert(TestTable, item, true);\n\n        } catch (Exception ex) {\n            assertNull(ex);\n        }\n    }\n\n    public void testUpsertSuportForMoreThan999Parameters() throws MobileServiceLocalStoreException {\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n        tableDefinition.put(\"id\", ColumnDataType.String);\n        tableDefinition.put(\"id_value\", ColumnDataType.Integer);\n        tableDefinition.put(\"value\", ColumnDataType.String);\n\n        store.defineTable(\"Test999Parameters\", tableDefinition);\n        store.initialize();\n\n        try {\n\n            int jsonObjectsCount = 3000;\n\n            JsonObject[] items = new JsonObject[3000];\n\n            for(int i=0; i < jsonObjectsCount; i++){\n                JsonObject item = new JsonObject();\n                item.addProperty(\"id\", String.valueOf(i));\n                item.addProperty(\"id_value\", i);\n                item.addProperty(\"value\", \"value_\" + String.valueOf(i));\n\n                items[i] = item;\n            }\n\n            store.upsert(\"Test999Parameters\", items, true);\n\n            Query q = QueryOperations.tableName(\"Test999Parameters\")\n                    .orderBy(\"id_value\", QueryOrder.Ascending);\n\n            JsonArray result = store.read(q).getAsJsonArray();\n\n            assertEquals(jsonObjectsCount, result.size());\n            assertEquals(0, result.get(0).getAsJsonObject().get(\"id_value\").getAsInt());\n            assertEquals(jsonObjectsCount - 1, result.get(jsonObjectsCount -1).getAsJsonObject().get(\"id_value\").getAsInt());\n\n        } catch (Exception ex) {\n            assertNull(ex);\n        }\n    }\n\n    public void testUpsertNoThrowsWhenOnColumnIsItemIsDefinedAndAnotherColumnInItemIsNotDefinedAndItIsFromServer() throws MobileServiceLocalStoreException {\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n        tableDefinition.put(\"id\", ColumnDataType.String);\n        tableDefinition.put(\"dob\", ColumnDataType.Date);\n\n        store.defineTable(TestTable, tableDefinition);\n        store.initialize();\n\n        try {\n\n            JsonObject item = new JsonObject();\n            item.addProperty(\"id\", \"1\");\n            item.addProperty(\"notDefined\", \"okok\");\n\n            store.upsert(TestTable, item, true);\n\n        } catch (Exception ex) {\n            assertNull(ex);\n        }\n    }\n\n    public void testUpsertThrowsWhenColumnInItemIsNotDefinedAndItIsLocal() throws MobileServiceLocalStoreException {\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n        tableDefinition.put(\"dob\", ColumnDataType.Date);\n\n        store.defineTable(TestTable, tableDefinition);\n        store.initialize();\n\n        try {\n\n            JsonObject item = new JsonObject();\n            item.addProperty(\"notDefined\", \"okok\");\n\n            store.upsert(TestTable, item, false);\n        } catch (Exception ex) {\n            assertTrue(ex instanceof MobileServiceLocalStoreException);\n            assertTrue(ex.getCause().getMessage().contains(\n                    \"table todo has no column named notdefined (code 1): , while compiling: INSERT OR REPLACE INTO \\\"todo\\\" (\\\"notdefined\\\") VALUES (@p0)\"));\n        }\n    }\n\n    public void testUpsertNoThrowsWhenOnColumnIsItemIsDefinedAndAnotherColumnInItemIsNotDefinedAndItIsLocal() throws MobileServiceLocalStoreException {\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n        tableDefinition.put(\"id\", ColumnDataType.String);\n        tableDefinition.put(\"dob\", ColumnDataType.Date);\n\n        store.defineTable(TestTable, tableDefinition);\n        store.initialize();\n\n        try {\n\n            JsonObject item = new JsonObject();\n            item.addProperty(\"id\", \"1\");\n            item.addProperty(\"notDefined\", \"okok\");\n\n            store.upsert(TestTable, item, false);\n        } catch (Exception ex) {\n            assertTrue(ex instanceof MobileServiceLocalStoreException);\n            assertTrue(ex.getCause().getMessage().contains(\n                    \"table todo has no column named notdefined (code 1): , while compiling: INSERT OR REPLACE INTO \\\"todo\\\" (\\\"id\\\",\\\"notdefined\\\") VALUES (@p0,@p1)\"));\n        }\n    }\n\n    public void testUpsertInsertsTheRowWhenItemHasNullValues() throws MobileServiceLocalStoreException {\n        SQLiteStoreTestsUtilities.dropTestTable(this.getContext(), TestDbName, TestTable);\n\n        // insert a row and make sure it is inserted\n\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n        tableDefinition.put(\"id\", ColumnDataType.String);\n        tableDefinition.put(\"dob\", ColumnDataType.Date);\n        tableDefinition.put(\"age\", ColumnDataType.Integer);\n        tableDefinition.put(\"weight\", ColumnDataType.Real);\n        tableDefinition.put(\"code\", ColumnDataType.String);\n        tableDefinition.put(\"options\", ColumnDataType.String);\n        tableDefinition.put(\"friends\", ColumnDataType.String);\n        tableDefinition.put(\"__version\", ColumnDataType.String);\n\n        store.defineTable(TestTable, tableDefinition);\n        store.initialize();\n\n        JsonObject inserted = new JsonObject();\n        inserted.addProperty(\"id\", \"abc\");\n        inserted.addProperty(\"dob\", (String) null);\n        inserted.addProperty(\"age\", (Integer) null);\n        inserted.addProperty(\"weight\", (Integer) null);\n        inserted.addProperty(\"code\", (String) null);\n        inserted.addProperty(\"options\", (String) null);\n        inserted.addProperty(\"friends\", (String) null);\n        inserted.addProperty(\"__version\", (String) null);\n\n        store.upsert(TestTable, inserted, false);\n\n        JsonObject read = store.lookup(TestTable, \"abc\");\n\n        assertNotNull(read);\n        assertEquals(inserted.get(\"id\").getAsString(), read.get(\"id\").getAsString());\n    }\n\n    public void testUpsertInsertsTheRowWhenItDoesNotExist() throws MobileServiceLocalStoreException {\n        prepareTodoTable();\n\n        // insert a row and make sure it is inserted\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        defineTestTable(store);\n        store.initialize();\n\n        JsonObject inserted = new JsonObject();\n        inserted.addProperty(\"id\", \"abc\");\n        inserted.addProperty(\"__createdAt\", new Date().toString());\n\n        // insert a row and make sure it is inserted\n        store.upsert(TestTable, inserted, false);\n\n        long count = SQLiteStoreTestsUtilities.countRows(this.getContext(), TestDbName, TestTable);\n        assertEquals(count, 1L);\n    }\n\n    public void testUpsertUpdatesTheRowWhenItExists() throws MobileServiceLocalStoreException {\n        prepareTodoTable();\n\n        // insert a row and make sure it is inserted\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        defineTestTable(store);\n        store.initialize();\n\n        JsonObject inserted = new JsonObject();\n        inserted.addProperty(\"id\", \"abc\");\n        inserted.addProperty(\"__createdAt\", new Date().toString());\n\n        // insert a row and make sure it is inserted\n        store.upsert(TestTable, inserted, false);\n\n        JsonObject updated = new JsonObject();\n        updated.addProperty(\"id\", \"abc\");\n        updated.addProperty(\"__createdAt\", new Date().toString());\n\n        store.upsert(TestTable, updated, false);\n\n        long count = SQLiteStoreTestsUtilities.countRows(this.getContext(), TestDbName, TestTable);\n        assertEquals(count, 1L);\n    }\n    \n    private class OffThreadInsert implements Runnable {\n        private SQLiteLocalStore mStore;\n        private String mObjectId;\n        private CountDownLatch mBlocker;\n        private boolean mSuccess;\n        \n        public OffThreadInsert(CountDownLatch blocker, SQLiteLocalStore store, String objectId) {\n            mStore = store;\n            mObjectId = objectId;\n            mBlocker = blocker;\n            mSuccess = false;\n        }\n        \n        @Override\n        public void run() {\n            try {\n                JsonObject inserted = new JsonObject();\n                inserted.addProperty(\"id\", mObjectId);\n                inserted.addProperty(\"__createdAt\", new Date().toString());\n            \n                mBlocker.await();\n                mStore.upsert(TestTable, inserted, false);\n                mSuccess = true;\n            } catch (Throwable t) {\n                mSuccess = false;\n            }\n        }\n        \n        public boolean succeeded() {\n            return mSuccess;\n        }\n    }\n    \n    public void testSimultaneousOperations() throws MobileServiceLocalStoreException, InterruptedException {\n        prepareTodoTable();\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n        \n        defineTestTable(store);\n        store.initialize();\n        \n        CountDownLatch threadBlocker = new CountDownLatch(1);\n        Thread[] threads = new Thread[5];\n        OffThreadInsert[] runnables = new OffThreadInsert[5];\n        \n        for (int i = 0; i < threads.length; i++) {\n            runnables[i] = new OffThreadInsert(threadBlocker, store, \"object\"+i);\n            threads[i] = new Thread(runnables[i]);\n            threads[i].start();\n        }\n        \n        threadBlocker.countDown();\n        \n        for (int i = 0; i < threads.length; i++) {\n            threads[i].join();\n            assertTrue(runnables[i].succeeded());\n        }\n        \n        long count = SQLiteStoreTestsUtilities.countRows(this.getContext(), TestDbName, TestTable);\n        assertEquals(count, (long)threads.length);\n    }\n\n    public void testUpsertThenLookupThenUpsertThenDeleteThenLookup() throws MobileServiceLocalStoreException {\n        SQLiteStoreTestsUtilities.dropTestTable(this.getContext(), TestDbName, TestTable);\n\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n        tableDefinition.put(\"id\", ColumnDataType.String);\n        tableDefinition.put(\"bool\", ColumnDataType.Boolean);\n        tableDefinition.put(\"int\", ColumnDataType.Integer);\n        tableDefinition.put(\"double\", ColumnDataType.Real);\n        tableDefinition.put(\"date\", ColumnDataType.String);\n        tableDefinition.put(\"guid\", ColumnDataType.String);\n        tableDefinition.put(\"options\", ColumnDataType.String);\n        tableDefinition.put(\"friends\", ColumnDataType.String);\n\n        // create the table\n        store.defineTable(TestTable, tableDefinition);\n        store.initialize();\n\n        JsonObject originalItem = new JsonObject();\n        originalItem.addProperty(\"id\", \"abc\");\n        originalItem.addProperty(\"bool\", true);\n        originalItem.addProperty(\"int\", 45);\n        originalItem.addProperty(\"double\", 123.45d);\n        originalItem.addProperty(\"guid\", \"\");\n        originalItem.addProperty(\"date\", new Date().toString());\n        originalItem.addProperty(\"options\", \"\");\n        originalItem.addProperty(\"friends\", \"\");\n\n        // first add an item\n        store.upsert(TestTable, originalItem, false);\n\n        // read the item back\n        JsonObject itemRead = store.lookup(TestTable, \"abc\");\n\n        // make sure everything was persisted\n        assertNotNull(itemRead);\n\n        // change the item\n        originalItem.addProperty(\"double\", 111.222d);\n\n        // upsert the item\n        store.upsert(TestTable, originalItem, false);\n\n        // read the updated item\n        JsonObject updatedItem = store.lookup(TestTable, \"abc\");\n\n        // make sure everything was persisted\n        assertNotNull(updatedItem);\n\n        // make sure the float was updated\n        assertEquals(updatedItem.get(\"double\").getAsDouble(), 111.222d);\n\n        // make sure the item is same as updated item\n        assertEquals(originalItem.get(\"id\").getAsString(), updatedItem.get(\"id\").getAsString());\n\n        // now delete the item\n        store.delete(TestTable, \"abc\");\n\n        // now read it back\n        JsonObject lastItem = store.lookup(TestTable, \"abc\");\n\n        // it should be null because it doesn't exist\n        assertNull(lastItem);\n    }\n\n    private void prepareTodoTable() throws MobileServiceLocalStoreException {\n        SQLiteStoreTestsUtilities.dropTestTable(this.getContext(), TestDbName, TestTable);\n\n        // first create a table called todo\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        defineTestTable(store);\n\n        store.initialize();\n\n    }\n\n    private void testStoreThrowOnUninitialized(CustomFunctionOneParameter<SQLiteLocalStore, Void> storeAction) {\n        SQLiteLocalStore store = new SQLiteLocalStore(this.getContext(), TestDbName, null, 1);\n\n        try {\n            storeAction.apply(store);\n            fail(\"MobileServiceLocalStoreException expected\");\n        } catch (Exception ex) {\n            assertTrue(ex instanceof MobileServiceLocalStoreException);\n        }\n    }\n\n    public void defineTestTable(SQLiteLocalStore store) throws MobileServiceLocalStoreException {\n        Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n        tableDefinition.put(\"id\", ColumnDataType.String);\n        tableDefinition.put(\"__createdat\", ColumnDataType.DateTimeOffset);\n\n        store.defineTable(TestTable, tableDefinition);\n    }\n}"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/SerializationTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.test.InstrumentationTestCase;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\nimport com.google.gson.JsonDeserializationContext;\nimport com.google.gson.JsonDeserializer;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParseException;\nimport com.google.gson.JsonParser;\nimport com.google.gson.JsonSerializationContext;\nimport com.google.gson.JsonSerializer;\nimport com.google.gson.annotations.Expose;\nimport com.google.gson.annotations.SerializedName;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.StatusLineMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.Address;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.ComplexPersonTestObject;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.DateTestObject;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.ResultsContainer;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\n\nimport java.lang.reflect.Type;\nimport java.net.MalformedURLException;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.GregorianCalendar;\nimport java.util.List;\nimport java.util.TimeZone;\n\nclass Person {\n    @Expose\n    @SerializedName(\"id\")\n    private Integer mId;\n\n    @Expose\n    @SerializedName(\"name\")\n    private String mName;\n\n    @SerializedName(\"age\")\n    private Integer mAge;\n\n    public Person(int id) {\n        mId = id;\n    }\n\n    public Person(int id, String name, int age) {\n        mId = id;\n        mName = name;\n        mAge = age;\n    }\n\n    public Person(String name, int age) {\n        mName = name;\n        mAge = age;\n    }\n\n    public Integer getmId() {\n        return mId;\n    }\n\n    public void setmId(int mId) {\n        this.mId = mId;\n    }\n\n    public String getmName() {\n        return mName;\n    }\n\n    public void setmName(String mName) {\n        this.mName = mName;\n    }\n\n    public Integer getmAge() {\n        return mAge;\n    }\n\n    public void setmAge(int mAge) {\n        this.mAge = mAge;\n    }\n}\n\nclass Group {\n    int mId;\n\n    String mName;\n\n    private List<Person> people;\n\n    public Group(int id, String name) {\n        mId = id;\n        mName = name;\n    }\n\n    public List<Person> getPeople() {\n        return people;\n    }\n\n    public void setPeople(List<Person> people) {\n        this.people = people;\n    }\n}\n\npublic class SerializationTests extends InstrumentationTestCase {\n\n    String appUrl = \"\";\n    String appKey = \"\";\n    GsonBuilder gsonBuilder;\n\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com/\";\n        appKey = \"qwerty\";\n        gsonBuilder = new GsonBuilder();\n        super.setUp();\n    }\n\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    public void testSimpleSerialization() throws Throwable {\n        // Serialize instance with all fields defined\n        Person person = new Person(1, \"John\", 23);\n        String serializedObject = new Gson().toJson(person);\n        JsonObject jsonPerson = new JsonParser().parse(serializedObject).getAsJsonObject();\n\n        // Asserts\n        assertEquals(\"{\\\"age\\\":23,\\\"id\\\":1,\\\"name\\\":\\\"John\\\"}\", serializedObject);\n        assertEquals(person.getmAge().intValue(), jsonPerson.get(\"age\").getAsInt());\n        assertEquals(person.getmId().intValue(), jsonPerson.get(\"id\").getAsInt());\n        assertEquals(person.getmName(), jsonPerson.get(\"name\").getAsString());\n\n        // Serialize instance with not id defined\n        Person person2 = new Person(\"John\", 23);\n        String serializedObject2 = new Gson().toJson(person2);\n        JsonObject jsonPerson2 = new JsonParser().parse(serializedObject2).getAsJsonObject();\n\n        // Asserts\n        assertEquals(\"{\\\"age\\\":23,\\\"name\\\":\\\"John\\\"}\", serializedObject2);\n        assertEquals(person.getmAge().intValue(), jsonPerson2.get(\"age\").getAsInt());\n        assertNull(jsonPerson2.get(\"id\"));\n        assertEquals(person.getmName(), jsonPerson2.get(\"name\").getAsString());\n\n        // Serialize instance with all fields null except id\n        Person person3 = new Person(1);\n        String serializedObject3 = new Gson().toJson(person3);\n        JsonObject jsonPerson3 = new JsonParser().parse(serializedObject3).getAsJsonObject();\n\n        // Asserts\n        assertEquals(\"{\\\"id\\\":1}\", serializedObject3);\n        assertNull(jsonPerson3.get(\"age\"));\n        assertEquals(person3.getmId().intValue(), jsonPerson3.get(\"id\").getAsInt());\n        assertNull(jsonPerson3.get(\"name\"));\n    }\n\n    public void testSimpleDeserialization() throws Throwable {\n        // Deserialize instance with all fields defined\n        String serializedObject = \"{\\\"age\\\":23,\\\"id\\\":1,\\\"name\\\":\\\"John\\\"}\";\n        JsonObject jsonPerson = new JsonParser().parse(serializedObject).getAsJsonObject();\n        Person person = new Gson().fromJson(serializedObject, Person.class);\n\n        // Asserts\n        assertEquals(jsonPerson.get(\"age\").getAsInt(), person.getmAge().intValue());\n        assertEquals(jsonPerson.get(\"id\").getAsInt(), person.getmId().intValue());\n        assertEquals(jsonPerson.get(\"name\").getAsString(), person.getmName());\n\n        // Serialize instance with not id defined\n        String serializedObject2 = \"{\\\"age\\\":23,\\\"name\\\":\\\"John\\\"}\";\n        JsonObject jsonPerson2 = new JsonParser().parse(serializedObject2).getAsJsonObject();\n        Person person2 = new Gson().fromJson(serializedObject2, Person.class);\n\n        // Asserts\n        assertEquals(jsonPerson2.get(\"age\").getAsInt(), person2.getmAge().intValue());\n        assertNull(person2.getmId());\n        assertEquals(jsonPerson2.get(\"name\").getAsString(), person2.getmName());\n\n        // Serialize instance with all fields null except id\n        String serializedObject3 = \"{\\\"id\\\":1}\";\n        JsonObject jsonPerson3 = new JsonParser().parse(serializedObject3).getAsJsonObject();\n        Person person3 = new Gson().fromJson(serializedObject3, Person.class);\n\n        // Asserts\n        assertEquals(jsonPerson3.get(\"id\").getAsInt(), person3.getmId().intValue());\n        assertNull(person3.getmName());\n        assertNull(person3.getmAge());\n    }\n\n    public void testSerializationExcludingFieldsWithoutExposeAttribute() {\n        // Serialize instance with all fields defined, but excluding those\n        // without Expose attribute\n        Person person = new Person(1, \"John\", 23);\n        String serializedObject = gsonBuilder.excludeFieldsWithoutExposeAnnotation().create().toJson(person);\n\n        JsonObject jsonPerson = new JsonParser().parse(serializedObject).getAsJsonObject();\n\n        // Asserts\n        assertEquals(\"{\\\"id\\\":1,\\\"name\\\":\\\"John\\\"}\", serializedObject);\n        assertNull(jsonPerson.get(\"age\"));\n        assertEquals(person.getmId().intValue(), jsonPerson.get(\"id\").getAsInt());\n        assertEquals(person.getmName(), jsonPerson.get(\"name\").getAsString());\n\n    }\n\n    public void testCustomSerializationWithoutUsingMobileServiceTable() {\n        ComplexPersonTestObject person = new ComplexPersonTestObject(\"John\", \"Doe\", new Address(\"1345 Washington St\", 1313, \"US\"));\n\n        gsonBuilder.registerTypeAdapter(Address.class, new JsonSerializer<Address>() {\n\n            @Override\n            public JsonElement serialize(Address arg0, Type arg1, JsonSerializationContext arg2) {\n\n                JsonObject json = new JsonObject();\n                json.addProperty(\"zipcode\", arg0.getZipCode());\n                json.addProperty(\"country\", arg0.getCountry());\n                json.addProperty(\"streetaddress\", arg0.getStreetAddress());\n\n                return json;\n            }\n        });\n\n        String serializedObject = gsonBuilder.create().toJson(person);\n\n        // Asserts\n        assertEquals(\n                \"{\\\"address\\\":{\\\"zipcode\\\":1313,\\\"country\\\":\\\"US\\\",\\\"streetaddress\\\":\\\"1345 Washington St\\\"},\\\"firstName\\\":\\\"John\\\",\\\"lastName\\\":\\\"Doe\\\",\\\"id\\\":0}\",\n                serializedObject);\n    }\n\n    public void testCustomDeserializationUsingWithoutUsingMobileServiceTable() {\n        String serializedObject = \"{\\\"address\\\":{\\\"zipcode\\\":1313,\\\"country\\\":\\\"US\\\",\\\"streetaddress\\\":\\\"1345 Washington St\\\"},\\\"firstName\\\":\\\"John\\\",\\\"lastName\\\":\\\"Doe\\\"}\";\n        JsonObject jsonObject = new JsonParser().parse(serializedObject).getAsJsonObject();\n\n        gsonBuilder.registerTypeAdapter(Address.class, new JsonDeserializer<Address>() {\n\n            @Override\n            public Address deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {\n                Address a = new Address(arg0.getAsJsonObject().get(\"streetaddress\").getAsString(), arg0.getAsJsonObject().get(\"zipcode\").getAsInt(), arg0\n                        .getAsJsonObject().get(\"country\").getAsString());\n\n                return a;\n            }\n\n        });\n\n        ComplexPersonTestObject deserializedPerson = gsonBuilder.create().fromJson(jsonObject, ComplexPersonTestObject.class);\n\n        // Asserts\n        assertEquals(\"John\", deserializedPerson.getFirstName());\n        assertEquals(\"Doe\", deserializedPerson.getLastName());\n        assertEquals(1313, deserializedPerson.getAddress().getZipCode());\n        assertEquals(\"US\", deserializedPerson.getAddress().getCountry());\n        assertEquals(\"1345 Washington St\", deserializedPerson.getAddress().getStreetAddress());\n    }\n\n    public void testSimpleTreeSerialization() {\n        Group group = new Group(1, \"Group1\");\n        List<Person> list = new ArrayList<Person>();\n        list.add(new Person(2, \"John\", 23));\n        list.add(new Person(4, \"Paul\", 18));\n        list.add(new Person(5, \"Maria\", 25));\n        group.setPeople(list);\n\n        String serializedObject = gsonBuilder.create().toJson(group);\n        // Asserts\n        assertEquals(\n                \"{\\\"people\\\":[{\\\"age\\\":23,\\\"id\\\":2,\\\"name\\\":\\\"John\\\"},{\\\"age\\\":18,\\\"id\\\":4,\\\"name\\\":\\\"Paul\\\"},{\\\"age\\\":25,\\\"id\\\":5,\\\"name\\\":\\\"Maria\\\"}],\\\"mName\\\":\\\"Group1\\\",\\\"mId\\\":1}\",\n                serializedObject);\n    }\n\n    public void testDateSerializationShouldReturnExpectedJson() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final GregorianCalendar date = new GregorianCalendar(2013, 0, 22, 10, 30, 40);\n        date.setTimeZone(TimeZone.getTimeZone(\"GMT-4\"));\n\n        final DateTestObject dateObject = new DateTestObject(date.getTime());\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                // Store the request content\n                container.setRequestContent(request.getContent());\n                ServiceFilterResponseMock mockedResponse = new ServiceFilterResponseMock();\n                mockedResponse.setContent(\"{}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(mockedResponse);\n\n                return resultFuture;\n            }\n        });\n\n        MobileServiceTable<DateTestObject> table = client.getTable(tableName, DateTestObject.class);\n\n        table.insert(dateObject).get();\n\n        // Asserts\n        // Date should have UTC format (+4 that date value)\n        assertEquals(\"{\\\"date\\\":\\\"2013-01-22T14:30:40.000Z\\\"}\", container.getRequestContent());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public void testDateDeserializationShouldReturnExpectedEntity() throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final GregorianCalendar calendar = new GregorianCalendar(2013, 0, 22, 10, 30, 40);\n        calendar.setTimeZone(TimeZone.getTimeZone(\"GMT-4\"));\n\n        final DateTestObject dateObject = new DateTestObject(calendar.getTime());\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                // Create a mock response simulating an error\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLineMock(404));\n                response.setContent(\"{\\\"date\\\":\\\"2013-01-22T14:30:40.000Z\\\"}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        MobileServiceTable<DateTestObject> table = client.getTable(tableName, DateTestObject.class);\n\n        DateTestObject entity = table.insert(dateObject).get();\n        // Asserts\n        Date expctedDate = dateObject.getDate();\n\n        DateTestObject returnedDateObject = entity;\n        assertNotNull(\"DateTestObject should not be null\", returnedDateObject);\n        Date d = returnedDateObject.getDate();\n        assertNotNull(\"Date should not be null\", d);\n        assertEquals(expctedDate.getYear(), d.getYear());\n        assertEquals(expctedDate.getMonth(), d.getMonth());\n        assertEquals(expctedDate.getDay(), d.getDay());\n        assertEquals(expctedDate.getHours(), d.getHours());\n        assertEquals(expctedDate.getMinutes(), d.getMinutes());\n        assertEquals(expctedDate.getSeconds(), d.getSeconds());\n    }\n\n    public void testSerializationWithComplexObjectsShouldReturnExpectedJsonUsingMobileServiceTable() throws Throwable {\n\n        // Container to store callback's results and do the asserts.\n        final ResultsContainer container = new ResultsContainer();\n\n        final String tableName = \"MyTableName\";\n\n        final ComplexPersonTestObject person = new ComplexPersonTestObject(\"John\", \"Doe\", new Address(\"1345 Washington St\", 1313, \"US\"));\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                // Store the request content\n                container.setRequestContent(request.getContent());\n\n                ServiceFilterResponseMock mockedResponse = new ServiceFilterResponseMock();\n                mockedResponse.setContent(\"{}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(mockedResponse);\n\n                return resultFuture;\n            }\n        });\n\n        MobileServiceTable<ComplexPersonTestObject> table = client.getTable(tableName, ComplexPersonTestObject.class);\n\n        client.registerSerializer(Address.class, new JsonSerializer<Address>() {\n\n            @Override\n            public JsonElement serialize(Address arg0, Type arg1, JsonSerializationContext arg2) {\n\n                JsonObject json = new JsonObject();\n                json.addProperty(\"zipcode\", arg0.getZipCode());\n                json.addProperty(\"country\", arg0.getCountry());\n                json.addProperty(\"streetaddress\", arg0.getStreetAddress());\n\n                return json;\n            }\n        });\n\n        table.insert(person).get();\n\n        // Asserts\n        assertEquals(\n                \"{\\\"address\\\":{\\\"zipcode\\\":1313,\\\"country\\\":\\\"US\\\",\\\"streetaddress\\\":\\\"1345 Washington St\\\"},\\\"firstName\\\":\\\"John\\\",\\\"lastName\\\":\\\"Doe\\\"}\",\n                container.getRequestContent());\n    }\n\n    public void testDeserializationWithComplexObjectsShouldReturnExpectedEntityUsingMobileServiceTable() throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final ComplexPersonTestObject person = new ComplexPersonTestObject(\"John\", \"Doe\", new Address(\"1345 Washington St\", 1313, \"US\"));\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                // Create a mock response simulating an error\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLineMock(404));\n                response.setContent(\"{\\\"address\\\":{\\\"zipcode\\\":1313,\\\"country\\\":\\\"US\\\",\\\"streetaddress\\\":\\\"1345 Washington St\\\"},\\\"firstName\\\":\\\"John\\\",\\\"lastName\\\":\\\"Doe\\\"}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        MobileServiceTable<ComplexPersonTestObject> table = client.getTable(tableName, ComplexPersonTestObject.class);\n\n        client.registerDeserializer(Address.class, new JsonDeserializer<Address>() {\n\n            @Override\n            public Address deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {\n\n                Address a = new Address(arg0.getAsJsonObject().get(\"streetaddress\").getAsString(), arg0.getAsJsonObject().get(\"zipcode\").getAsInt(), arg0\n                        .getAsJsonObject().get(\"country\").getAsString());\n\n                return a;\n            }\n        });\n\n        ComplexPersonTestObject p = table.insert(person).get();\n\n        // Asserts\n        Address expectedAddress = person.getAddress();\n\n        assertNotNull(\"Person should not be null\", p);\n        Address a = p.getAddress();\n        assertNotNull(\"Address should not be null\", a);\n        assertEquals(expectedAddress.getCountry(), a.getCountry());\n        assertEquals(expectedAddress.getStreetAddress(), a.getStreetAddress());\n        assertEquals(expectedAddress.getZipCode(), a.getZipCode());\n    }\n\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/ServiceFilterTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.test.InstrumentationTestCase;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterRequestMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.StatusLineMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.PersonTestObject;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.ResultsContainer;\n\nimport java.net.MalformedURLException;\n\npublic class ServiceFilterTests extends InstrumentationTestCase {\n    String appUrl = \"\";\n    String appKey = \"\";\n\n    @Override\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com\";\n        appKey = \"qwerty\";\n        super.setUp();\n    }\n\n    @Override\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    public void testClientWithFilterShouldReturnResponseWithHeaderAddedInFilter() throws Throwable {\n\n        // Container for results\n        final ResultsContainer container = new ResultsContainer();\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                container.setCount(1);\n                container.setRequestContent(\"Filter1\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            // Call the lookup method\n            client.getTable(\"TestTable\").lookUp(1).get();\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n\n        // Assert\n        assertEquals(1, container.getCount());\n        assertEquals(\"Filter1\", container.getRequestContent());\n    }\n\n    public void testClientWithFilterShouldReturnResponseWithHeadersAddedInOrder() throws Throwable {\n        // Container for results\n        final ResultsContainer container = new ResultsContainer();\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add 2 new filters to the client.\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                int currentCount = container.getCount() + 1;\n                container.setCount(currentCount);\n                String currentContent = container.getRequestContent() + \"Filter1\";\n                container.setRequestContent(currentContent);\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        }).withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                int currentCount = container.getCount() + 1;\n                container.setCount(currentCount);\n                String currentContent = \"Filter2\";\n                container.setRequestContent(currentContent);\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        try {\n            // Call the lookup method\n            client.getTable(\"TestTable\").lookUp(1).get();\n\n        } catch (Exception exception) {\n        }\n\n        // Assert\n        assertEquals(2, container.getCount());\n        assertEquals(\"Filter2Filter1\", container.getRequestContent());\n    }\n\n    public void testClientWithFilterShouldNotExecuteTheFirstFilter() throws Throwable {\n        // Container for results\n        final ResultsContainer container = new ResultsContainer();\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e1) {\n        }\n\n        // Add 2 new filters to the client.\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                int currentCount = container.getCount() + 1;\n                container.setCount(currentCount);\n                String currentContent = container.getRequestContent() + \"Filter1\";\n                container.setRequestContent(currentContent);\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n\n        }).withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                int currentCount = container.getCount() + 1;\n                container.setCount(currentCount);\n                String currentContent = \"Filter2\";\n                container.setRequestContent(currentContent);\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.setException(new Exception(\"Dummy Exception\"));\n\n                return resultFuture;\n\n            }\n        });\n\n        boolean hasException = false;\n\n        try {\n            // Call the lookup method\n            client.getTable(\"TestTable\").lookUp(1).get();\n\n        } catch (Exception exception) {\n\n            hasException = true;\n\n            // Assert\n            assertEquals(1, container.getCount());\n            assertEquals(\"Filter2\", container.getRequestContent());\n        }\n\n        assertTrue(hasException);\n    }\n\n    public void testClientWithFilterShouldThrowExceptionWhenExecutingFilter() throws Throwable {\n\n        // Create ServiceFilterResponseMock\n        final ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setContent(\"Response Content\");\n        response.setStatus(new StatusLineMock(200));\n\n        // Create client and connection\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Create ServiceFilterRequestMock that returns the given\n        // response\n        ServiceFilterRequestMock request = new ServiceFilterRequestMock(response);\n        request.setHasErrorOnExecute(true);\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.setException(new MobileServiceException(\"Error in filter 1\"));\n\n                return resultFuture;\n            }\n        });\n\n        boolean hasException = false;\n\n        try {\n            // Call the lookup method\n            client.getTable(\"TestTable\").lookUp(1).get();\n\n        } catch (Exception exception) {\n            assertTrue(exception.getCause().getMessage().startsWith(\"Error in filter 1\"));\n            hasException = true;\n        }\n\n        assertTrue(hasException);\n    }\n\n    public void testClientWithFilterShouldThrowExceptionWhenExecutingTheFirstFilter() throws Throwable {\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Create ServiceFilterResponseMock\n        final ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setContent(\"Response Content\");\n        response.setStatus(new StatusLineMock(200));\n\n        // Create ServiceFilterRequestMock that returns the given\n        // response\n        ServiceFilterRequestMock request = new ServiceFilterRequestMock(response);\n        request.setHasErrorOnExecute(true);\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(null);\n\n                return resultFuture;\n            }\n        }).withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.setException(new MobileServiceException(\"Error in filter 2\"));\n\n                return resultFuture;\n            }\n        });\n\n        boolean hasException = false;\n\n        try {\n            // Call the lookup method\n            client.getTable(\"TestTable\").lookUp(1).get();\n\n        } catch (Exception exception) {\n            // Assert\n            hasException = true;\n            assertTrue(exception.getCause().getMessage().startsWith(\"Error in filter 2\"));\n        }\n\n        assertTrue(hasException);\n    }\n\n    public void testRequestShouldntFailWith401ResponseAndWithoutOnResponseCallbackInvokation() throws Throwable {\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Create ServiceFilterResponseMock\n        final ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n        response.setContent(\"{'error': 'Unauthorized'}\");\n        response.setStatus(new StatusLineMock(401));\n\n        // Create ServiceFilterRequestMock that returns the given\n        // response\n        final ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n        requestMock.setHasErrorOnExecute(true);\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                return nextServiceFilterCallback.onNext(requestMock);\n            }\n        });\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(new ServiceFilterResponseMock());\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            // Call the lookup method\n            PersonTestObject entity = client.getTable(PersonTestObject.class).lookUp(1).get();\n\n            if (entity.getId() != 0) {\n                fail(\"Since no onResponse wasn't invoked from the filter, there shouldn't be any kind of result (exception or entity)\");\n            }\n\n        } catch (Exception exception) {\n            if (exception != null) {\n                fail(\"Since no onResponse wasn't invoked from the filter, there shouldn't be any kind of result (exception or entity)\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/SystemPropertiesTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.test.InstrumentationTestCase;\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.gson.GsonBuilder;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterRequestMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.StatusLineMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.IdPropertyTestClasses.StringIdType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.AllSystemPropertiesType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.CreatedAtType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.DoubleNamedSystemPropertiesType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.IntegerIdNotSystemPropertyCreatedAtType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.IntegerIdWithNamedSystemPropertiesType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.LongIdWithNamedSystemPropertiesType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.NamedDifferentCasingSystemPropertiesType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.NamedSystemPropertiesType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.NotSystemPropertyCreatedAtType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.NotSystemPropertyUpdatedAtType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.NotSystemPropertyVersionType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.StringCreatedAtType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.StringType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.StringUpdatedAtType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.UpdatedAtType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.SystemPropertyTestClasses.VersionType;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.data.SystemPropertiesTestData;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\n\nimport org.apache.http.Header;\nimport org.apache.http.HeaderElement;\nimport org.apache.http.ParseException;\n\nimport java.net.MalformedURLException;\nimport java.util.ArrayList;\nimport java.util.EnumSet;\nimport java.util.GregorianCalendar;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Map.Entry;\nimport java.util.TimeZone;\nimport java.util.TreeMap;\n\npublic class SystemPropertiesTests extends InstrumentationTestCase {\n    String appUrl = \"\";\n    String appKey = \"\";\n    GsonBuilder gsonBuilder;\n\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com/\";\n        appKey = \"qwerty\";\n        gsonBuilder = new GsonBuilder();\n        super.setUp();\n    }\n\n    protected void tearDown() throws Exception {\n        super.tearDown();\n    }\n\n    // Non Generic JSON\n\n    // Insert Tests\n\n    public void testInsertDoesNotRemoveSystemPropertiesWhenIdIsString() throws Throwable {\n        String[] systemProperties = SystemPropertiesTestData.ValidSystemProperties;\n\n        for (String systemProperty : systemProperties) {\n            insertDoesNotRemovePropertyWhenIdIsString(systemProperty);\n        }\n    }\n\n    public void testInsertDoesNotRemoveNonSystemPropertiesWhenIdIsString() throws Throwable {\n        String[] nonSystemProperties = SystemPropertiesTestData.NonSystemProperties;\n\n        for (String nonSystemProperty : nonSystemProperties) {\n            insertDoesNotRemovePropertyWhenIdIsString(nonSystemProperty);\n        }\n    }\n\n    private void insertDoesNotRemovePropertyWhenIdIsString(final String property) throws Throwable {\n        final String tableName = \"MyTableName\";\n\n        final String jsonTestSystemProperty = property.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertTrue(properties.containsKey(\"id\"));\n                assertTrue(properties.containsKey(\"String\"));\n                assertTrue(properties.containsKey(property));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what\\\",\\\"\" + jsonTestSystemProperty + \"\\\":\\\"a value\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonObject jsonObject = msTable.insert(obj).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInsertDoesNotRemovesSystemPropertiesWhenIdIsNull() throws Throwable {\n        String[] systemProperties = SystemPropertiesTestData.ValidSystemProperties;\n\n        for (String systemProperty : systemProperties) {\n            insertDoesNotRemovePropertyWhenIdIsNull(systemProperty);\n        }\n    }\n\n    public void testInsertDoesNotRemovesNonSystemPropertiesWhenIdIsNull() throws Throwable {\n        String[] nonSystemProperties = SystemPropertiesTestData.NonSystemProperties;\n\n        for (String nonSystemProperty : nonSystemProperties) {\n            insertDoesNotRemovePropertyWhenIdIsNull(nonSystemProperty);\n        }\n    }\n\n    private void insertDoesNotRemovePropertyWhenIdIsNull(final String property) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String jsonTestSystemProperty = property.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertFalse(properties.containsKey(\"id\"));\n                assertTrue(properties.containsKey(\"String\"));\n                assertTrue(properties.containsKey(property));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":null,\\\"String\\\":\\\"what\\\",\\\"\" + jsonTestSystemProperty + \"\\\":\\\"a value\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the insert method\n            JsonObject jsonObject = msTable.insert(obj).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInsertQueryStringWithSystemProperties() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            insertQueryStringWithSystemProperties(systemProperties);\n        }\n    }\n\n    private void insertQueryStringWithSystemProperties(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n        final JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what\\\"}\").getAsJsonObject();\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                validateUri(systemProperties, request.getUrl());\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the insert method\n            JsonObject jsonObject = msTable.insert(obj).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInsertQueryStringWithSystemPropertiesIntId() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            insertQueryStringWithSystemPropertiesIntId(systemProperties);\n        }\n    }\n\n    private void insertQueryStringWithSystemPropertiesIntId(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n        final JsonObject obj = new JsonParser().parse(\"{\\\"String\\\":\\\"what\\\"}\").getAsJsonObject();\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                validateUri(systemProperties, request.getUrl());\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the insert method\n            JsonObject jsonObject = msTable.insert(obj).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInsertUserParameterWithSystemProperties() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            insertUserParameterWithSystemProperties(systemProperties);\n        }\n    }\n\n    private void insertUserParameterWithSystemProperties(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n        final JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what\\\"}\").getAsJsonObject();\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                assertTrue(request.getUrl().contains(\"__systemproperties=__createdAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"__systemproperties\", \"__createdAt\"));\n\n        try {\n            // Call the insert method\n            JsonObject jsonObject = msTable.insert(obj, parameters).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInsertUserParameterWithSystemPropertiesIntId() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            insertUserParameterWithSystemPropertiesIntId(systemProperties);\n        }\n    }\n\n    private void insertUserParameterWithSystemPropertiesIntId(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n        final JsonObject obj = new JsonParser().parse(\"{\\\"String\\\":\\\"what\\\"}\").getAsJsonObject();\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                assertTrue(request.getUrl().contains(\"__systemproperties=__createdAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"__systemproperties\", \"__createdAt\"));\n\n        try {\n            // Call the insert method\n            JsonObject jsonObject = msTable.insert(obj, parameters).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    // Update Tests\n\n    public void testUpdateRemovesSystemPropertiesWhenIdIsString() throws Throwable {\n        String[] systemProperties = SystemPropertiesTestData.ValidSystemProperties;\n\n        for (String systemProperty : systemProperties) {\n            updateRemovesPropertyWhenIdIsString(systemProperty);\n        }\n    }\n\n    private void updateRemovesPropertyWhenIdIsString(final String property) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String jsonTestSystemProperty = property.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertTrue(properties.containsKey(\"id\"));\n                assertTrue(properties.containsKey(\"String\"));\n                assertFalse(properties.containsKey(property));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what\\\",\\\"\" + jsonTestSystemProperty + \"\\\":\\\"a value\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the update method\n            JsonObject jsonObject = msTable.update(obj).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testUpdateDoesNotRemoveNonSystemPropertiesWhenIdIsString() throws Throwable {\n        String[] nonSystemProperties = SystemPropertiesTestData.NonSystemProperties;\n\n        for (String nonSystemProperty : nonSystemProperties) {\n            updateDoesNotRemovePropertyWhenIdIsString(nonSystemProperty);\n        }\n    }\n\n    private void updateDoesNotRemovePropertyWhenIdIsString(final String property) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String jsonTestSystemProperty = property.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertTrue(properties.containsKey(\"id\"));\n                assertTrue(properties.containsKey(\"String\"));\n                assertTrue(properties.containsKey(property));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what\\\",\\\"\" + jsonTestSystemProperty + \"\\\":\\\"a value\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the update method\n            JsonObject jsonObject = msTable.update(obj).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testUpdateDoesNotRemovesSystemPropertiesWhenIdIsInteger() throws Throwable {\n        String[] systemProperties = SystemPropertiesTestData.ValidSystemProperties;\n\n        for (String systemProperty : systemProperties) {\n            updateDoesNotRemovePropertyWhenIdIsInteger(systemProperty);\n        }\n    }\n\n    public void testUpdateDoesNotRemovesNonSystemPropertiesWhenIdIsInteger() throws Throwable {\n        String[] nonSystemProperties = SystemPropertiesTestData.NonSystemProperties;\n\n        for (String nonSystemProperty : nonSystemProperties) {\n            updateDoesNotRemovePropertyWhenIdIsInteger(nonSystemProperty);\n        }\n    }\n\n    private void updateDoesNotRemovePropertyWhenIdIsInteger(final String property) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String jsonTestSystemProperty = property.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\");\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertTrue(properties.containsKey(\"id\"));\n                assertTrue(properties.containsKey(\"String\"));\n                assertTrue(properties.containsKey(property));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":5,\\\"String\\\":\\\"what\\\",\\\"\" + jsonTestSystemProperty + \"\\\":\\\"a value\\\"}\").getAsJsonObject();\n\n        try {\n            // Call the update method\n            JsonObject jsonObject = msTable.update(obj).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testUpdateQueryStringWithSystemProperties() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            updateQueryStringWithSystemProperties(systemProperties);\n        }\n    }\n\n    private void updateQueryStringWithSystemProperties(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n        final JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what\\\"}\").getAsJsonObject();\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                validateUri(systemProperties, request.getUrl());\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the update method\n            JsonObject jsonObject = msTable.update(obj).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n\n    }\n\n    public void testUpdateQueryStringWithSystemPropertiesIntId() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            updateQueryStringWithSystemPropertiesIntId(systemProperties);\n        }\n    }\n\n    private void updateQueryStringWithSystemPropertiesIntId(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n        final JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":5,\\\"String\\\":\\\"what\\\"}\").getAsJsonObject();\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                validateUri(systemProperties, request.getUrl());\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the update method\n            JsonObject jsonObject = msTable.update(obj).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testUpdateUserParameterWithSystemProperties() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            updateUserParameterWithSystemProperties(systemProperties);\n        }\n    }\n\n    private void updateUserParameterWithSystemProperties(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n        final JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"what\\\"}\").getAsJsonObject();\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                assertTrue(request.getUrl().contains(\"__systemproperties=createdAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"__systemproperties\", \"createdAt\"));\n\n        try {\n            // Call the update method\n            JsonObject jsonObject = msTable.update(obj, parameters).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testUpdateUserParameterWithSystemPropertiesIntId() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            updateUserParameterWithSystemPropertiesIntId(systemProperties);\n        }\n    }\n\n    private void updateUserParameterWithSystemPropertiesIntId(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n        final JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":5,\\\"String\\\":\\\"what\\\"}\").getAsJsonObject();\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                assertTrue(request.getUrl().contains(\"__systemproperties=createdAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"__systemproperties\", \"createdAt\"));\n\n        try {\n            // Call the update method\n            JsonObject jsonObject = msTable.update(obj, parameters).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    // Lookup Tests\n\n    public void testLookupQueryStringWithSystemProperties() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            lookupQueryStringWithSystemProperties(systemProperties);\n        }\n    }\n\n    private void lookupQueryStringWithSystemProperties(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                validateUri(systemProperties, request.getUrl());\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the lookup method\n            JsonElement jsonObject = msTable.lookUp(\"an id\").get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testLookupQueryStringWithSystemPropertiesIntId() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            lookupQueryStringWithSystemPropertiesIntId(systemProperties);\n        }\n    }\n\n    private void lookupQueryStringWithSystemPropertiesIntId(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                validateUri(systemProperties, request.getUrl());\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the lookup method\n            JsonElement jsonObject = msTable.lookUp(5).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testLookupUserParameterWithSystemProperties() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            lookupUserParameterWithSystemProperties(systemProperties);\n        }\n    }\n\n    private void lookupUserParameterWithSystemProperties(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                assertTrue(request.getUrl().contains(\"__systemproperties=CreatedAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"__systemproperties\", \"CreatedAt\"));\n\n        try {\n            // Call the lookup method\n            JsonElement jsonObject = msTable.lookUp(\"an id\", parameters).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testLookupUserParameterWithSystemPropertiesIntId() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            lookupUserParameterWithSystemPropertiesIntId(systemProperties);\n        }\n    }\n\n    private void lookupUserParameterWithSystemPropertiesIntId(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                assertTrue(request.getUrl().contains(\"__systemproperties=CreatedAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"__systemproperties\", \"CreatedAt\"));\n\n        try {\n            // Call the lookup method\n            JsonElement jsonObject = msTable.lookUp(5, parameters).get();\n\n            // Asserts\n            if (jsonObject == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    // Delete Tests\n\n    public void testDeleteQueryStringWithSystemProperties() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            deleteQueryStringWithSystemProperties(systemProperties);\n        }\n    }\n\n    private void deleteQueryStringWithSystemProperties(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                validateUri(systemProperties, request.getUrl());\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the delete method\n            msTable.delete(\"an id\").get();\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testDeleteQueryStringWithSystemPropertiesIntId() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            deleteQueryStringWithSystemPropertiesIntId(systemProperties);\n        }\n    }\n\n    private void deleteQueryStringWithSystemPropertiesIntId(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n        final JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":5,\\\"String\\\":\\\"what\\\"}\").getAsJsonObject();\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                validateUri(systemProperties, request.getUrl());\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the delete method\n            msTable.delete(obj).get();\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n\n    }\n\n    public void testDeleteUserParameterWithSystemProperties() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            deleteUserParameterWithSystemProperties(systemProperties);\n        }\n    }\n\n    private void deleteUserParameterWithSystemProperties(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                assertTrue(request.getUrl().contains(\"__systemproperties=unknown\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"__systemproperties\", \"unknown\"));\n\n        try {\n            // Call the delete method\n            msTable.delete(\"an id\", parameters).get();\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testDeleteUserParameterWithSystemPropertiesIntId() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            deleteUserParameterWithSystemPropertiesIntId(systemProperties);\n        }\n    }\n\n    private void deleteUserParameterWithSystemPropertiesIntId(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n        final JsonObject obj = new JsonParser().parse(\"{\\\"id\\\":5,\\\"String\\\":\\\"what\\\"}\").getAsJsonObject();\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                assertTrue(request.getUrl().contains(\"__systemproperties=unknown\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"__systemproperties\", \"unknown\"));\n\n        try {\n            // Call the delete method\n            msTable.delete(obj, parameters).get();\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    // Query Tests\n\n    public void testSelectQueryStringWithSystemProperties() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            selectQueryStringWithSystemProperties(systemProperties);\n        }\n    }\n\n    private void selectQueryStringWithSystemProperties(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                validateUri(systemProperties, request.getUrl());\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the select method\n            JsonElement result = msTable.select(\"Id\", \"String\").execute().get();\n\n            if (result == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testFilterQueryStringWithSystemProperties() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            filterQueryStringWithSystemProperties(systemProperties);\n        }\n    }\n\n    private void filterQueryStringWithSystemProperties(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                validateUri(systemProperties, request.getUrl());\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the execute method with filter\n            JsonElement result = msTable.where().field(\"id\").eq().val(\"an id\").execute().get();\n\n            if (result == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testSelectQueryStringWithSystemPropertiesIntId() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            selectQueryStringWithSystemPropertiesIntId(systemProperties);\n        }\n    }\n\n    private void selectQueryStringWithSystemPropertiesIntId(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                validateUri(systemProperties, request.getUrl());\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the execute method with projection\n            JsonElement result = msTable.select(\"id\", \"String\").execute().get();\n\n            if (result == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testFilterQueryStringWithSystemPropertiesIntId() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            filterQueryStringWithSystemPropertiesIntId(systemProperties);\n        }\n    }\n\n    private void filterQueryStringWithSystemPropertiesIntId(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                validateUri(systemProperties, request.getUrl());\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the execute method with filter\n            JsonElement result = msTable.where().field(\"id\").eq().val(5).execute().get();\n\n            if (result == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testSelectUserParameterWithSystemProperties() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            selectUserParameterWithSystemProperties(systemProperties);\n        }\n    }\n\n    private void selectUserParameterWithSystemProperties(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                assertTrue(request.getUrl().contains(\"__systemproperties=__createdAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the execute method with projection\n            JsonElement result = msTable.select(\"Id\", \"String\").parameter(\"__systemproperties\", \"__createdAt\").execute().get();\n\n            if (result == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testFilterUserParameterWithSystemProperties() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            filterUserParameterWithSystemProperties(systemProperties);\n        }\n    }\n\n    private void filterUserParameterWithSystemProperties(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                assertTrue(request.getUrl().contains(\"__systemproperties=__createdAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the execute method with filter\n            JsonElement result = msTable.where().field(\"id\").eq().val(\"an id\").parameter(\"__systemproperties\", \"__createdAt\").execute().get();\n\n            if (result == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testSelectUserParameterWithSystemPropertiesIntId() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            selectUserParameterWithSystemPropertiesIntId(systemProperties);\n        }\n    }\n\n    private void selectUserParameterWithSystemPropertiesIntId(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                assertTrue(request.getUrl().contains(\"__systemproperties=__createdAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the execute method with projection\n            JsonElement result = msTable.select(\"id\", \"String\").parameter(\"__systemproperties\", \"__createdAt\").execute().get();\n\n            if (result == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testFilterUserParameterWithSystemPropertiesIntId() throws Throwable {\n        List<EnumSet<MobileServiceSystemProperty>> allSystemProperties = SystemPropertiesTestData.AllSystemProperties;\n\n        for (EnumSet<MobileServiceSystemProperty> systemProperties : allSystemProperties) {\n            filterUserParameterWithSystemPropertiesIntId(systemProperties);\n        }\n    }\n\n    private void filterUserParameterWithSystemPropertiesIntId(final EnumSet<MobileServiceSystemProperty> systemProperties) throws Throwable {\n\n        final String tableName = \"MyTableName\";\n\n        final String responseContent = \"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                assertTrue(request.getUrl().contains(\"__systemproperties=__createdAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceJsonTable msTable = client.getTable(tableName);\n\n        msTable.setSystemProperties(systemProperties);\n\n        try {\n            // Call the execute method with filter\n            JsonElement result = msTable.where().field(\"id\").eq().val(5).parameter(\"__systemproperties\", \"__createdAt\").execute().get();\n\n            if (result == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    // Generic\n\n    // Insert Tests\n\n    // String Id Type\n\n    public void testInsertRemovesCreatedAtSerializedNameStringId() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertTrue(properties.containsKey(\"id\"));\n                assertFalse(properties.containsKey(\"__createdAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<CreatedAtType> msTable = client.getTable(CreatedAtType.class);\n\n        CreatedAtType element = new CreatedAtType();\n        element.Id = \"an id\";\n        element.CreatedAt = new GregorianCalendar(2012, 00, 18).getTime();\n\n        try {\n            // Call the insert method\n            CreatedAtType entity = msTable.insert(element).get();\n\n            if (entity == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInsertRemovesCreatedAtPropertyNameStringId() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertTrue(properties.containsKey(\"id\"));\n                assertFalse(properties.containsKey(\"__createdAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<NamedSystemPropertiesType> msTable = client.getTable(NamedSystemPropertiesType.class);\n\n        NamedSystemPropertiesType element = new NamedSystemPropertiesType();\n        element.Id = \"an id\";\n        element.__createdAt = new GregorianCalendar(2012, 00, 18).getTime();\n\n        try {\n            // Call the insert method\n            NamedSystemPropertiesType entity = msTable.insert(element).get();\n\n            if (entity == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInsertRemovesUpdatedAtSerializedNameStringId() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertTrue(properties.containsKey(\"id\"));\n                assertFalse(properties.containsKey(\"__updatedAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<UpdatedAtType> msTable = client.getTable(UpdatedAtType.class);\n\n        UpdatedAtType element = new UpdatedAtType();\n        element.Id = \"an id\";\n        element.UpdatedAt = new GregorianCalendar(2012, 00, 18).getTime();\n\n        try {\n            // Call the insert method\n            UpdatedAtType entity = msTable.insert(element).get();\n\n            if (entity == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInsertRemovesVersionSerializedNameStringId() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertTrue(properties.containsKey(\"id\"));\n                assertFalse(properties.containsKey(\"__version\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<VersionType> msTable = client.getTable(VersionType.class);\n\n        VersionType element = new VersionType();\n        element.Id = \"an id\";\n        element.Version = \"a version\";\n\n        try {\n            // Call the insert method\n            VersionType entity = msTable.insert(element).get();\n\n            if (entity == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInsertRemovesAllSystemSerializedNameStringId() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\"}\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertTrue(properties.containsKey(\"id\"));\n                assertFalse(properties.containsKey(\"__createdAt\"));\n                assertFalse(properties.containsKey(\"__updatedAt\"));\n                assertFalse(properties.containsKey(\"__version\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<AllSystemPropertiesType> msTable = client.getTable(AllSystemPropertiesType.class);\n\n        AllSystemPropertiesType element = new AllSystemPropertiesType();\n        element.Id = \"an id\";\n        element.CreatedAt = new GregorianCalendar(2012, 00, 18).getTime();\n        element.UpdatedAt = new GregorianCalendar(2012, 00, 18).getTime();\n        element.Version = \"a version\";\n\n        try {\n            // Call the insert method\n            AllSystemPropertiesType entity = msTable.insert(element).get();\n\n            if (entity == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInsertDoesNotRemoveNonSystemCreatedAtPropertyNameStringId() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertTrue(properties.containsKey(\"id\"));\n                assertTrue(properties.containsKey(\"CreatedAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<NotSystemPropertyCreatedAtType> msTable = client.getTable(NotSystemPropertyCreatedAtType.class);\n\n        NotSystemPropertyCreatedAtType element = new NotSystemPropertyCreatedAtType();\n        element.Id = \"an id\";\n        element.CreatedAt = new GregorianCalendar(2012, 00, 18).getTime();\n\n        try {\n            // Call the insert method\n            NotSystemPropertyCreatedAtType entity = msTable.insert(element).get();\n\n            if (entity == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInsertDoesNotRemoveNonSystemUpdatedAtPropertyNameStringId() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertTrue(properties.containsKey(\"id\"));\n                assertTrue(properties.containsKey(\"_UpdatedAt\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<NotSystemPropertyUpdatedAtType> msTable = client.getTable(NotSystemPropertyUpdatedAtType.class);\n\n        NotSystemPropertyUpdatedAtType element = new NotSystemPropertyUpdatedAtType();\n        element.Id = \"an id\";\n        element._UpdatedAt = new GregorianCalendar(2012, 00, 18).getTime();\n\n        try {\n            // Call the insert method\n            NotSystemPropertyUpdatedAtType entity = msTable.insert(element).get();\n\n            if (entity == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testInsertDoesNotRemoveNonSystemVersionPropertyNameStringId() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                String content = request.getContent();\n                JsonObject obj = new JsonParser().parse(content).getAsJsonObject();\n\n                Map<String, JsonElement> properties = new TreeMap<String, JsonElement>(String.CASE_INSENSITIVE_ORDER);\n\n                for (Entry<String, JsonElement> entry : obj.entrySet()) {\n                    properties.put(entry.getKey(), entry.getValue());\n                }\n\n                assertTrue(properties.containsKey(\"id\"));\n                assertTrue(properties.containsKey(\"version\"));\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<NotSystemPropertyVersionType> msTable = client.getTable(NotSystemPropertyVersionType.class);\n\n        NotSystemPropertyVersionType element = new NotSystemPropertyVersionType();\n        element.Id = \"an id\";\n        element.version = \"a version\";\n\n        try {\n            // Call the insert method\n            NotSystemPropertyVersionType entity = msTable.insert(element).get();\n\n            if (entity == null) {\n                fail(\"Expected result\");\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testSystemPropertiesPropertySetCorrectly() throws Throwable {\n        runTestOnUiThread(new Runnable() {\n\n            @Override\n            public void run() {\n                MobileServiceClient client = null;\n\n                try {\n                    client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n                } catch (MalformedURLException e) {\n                    e.printStackTrace();\n                }\n\n                MobileServiceTable<StringIdType> stringIdTable = client.getTable(StringIdType.class);\n                assertTrue(stringIdTable.getSystemProperties().isEmpty());\n\n                MobileServiceTable<StringType> stringTable = client.getTable(StringType.class);\n                assertTrue(stringTable.getSystemProperties().isEmpty());\n\n                MobileServiceTable<NotSystemPropertyCreatedAtType> notSystemPropertyTable = client.getTable(NotSystemPropertyCreatedAtType.class);\n                assertTrue(notSystemPropertyTable.getSystemProperties().isEmpty());\n\n                MobileServiceTable<IntegerIdNotSystemPropertyCreatedAtType> integerIdNotsystemPropertyTable = client\n                        .getTable(IntegerIdNotSystemPropertyCreatedAtType.class);\n                assertTrue(integerIdNotsystemPropertyTable.getSystemProperties().isEmpty());\n\n                MobileServiceTable<NotSystemPropertyUpdatedAtType> notSystemPropertyUpdatedTable = client.getTable(NotSystemPropertyUpdatedAtType.class);\n                assertTrue(notSystemPropertyUpdatedTable.getSystemProperties().isEmpty());\n\n                MobileServiceTable<NotSystemPropertyVersionType> notSystemPropertyVersionTable = client.getTable(NotSystemPropertyVersionType.class);\n                assertTrue(notSystemPropertyVersionTable.getSystemProperties().isEmpty());\n\n                MobileServiceTable<IntegerIdWithNamedSystemPropertiesType> integerIdWithNamedSystemPropertyTable = client\n                        .getTable(IntegerIdWithNamedSystemPropertiesType.class);\n                assertTrue(integerIdWithNamedSystemPropertyTable.getSystemProperties().isEmpty());\n\n                MobileServiceTable<LongIdWithNamedSystemPropertiesType> longIdWithNamedSystemPropertyTable = client\n                        .getTable(LongIdWithNamedSystemPropertiesType.class);\n                assertTrue(longIdWithNamedSystemPropertyTable.getSystemProperties().isEmpty());\n\n                MobileServiceTable<CreatedAtType> createdAtTable = client.getTable(CreatedAtType.class);\n                assertTrue(createdAtTable.getSystemProperties().size() == 1\n                        && createdAtTable.getSystemProperties().contains(MobileServiceSystemProperty.CreatedAt));\n\n                MobileServiceTable<DoubleNamedSystemPropertiesType> doubleNamedCreatedAtTable = client.getTable(DoubleNamedSystemPropertiesType.class);\n                assertTrue(doubleNamedCreatedAtTable.getSystemProperties().size() == 1\n                        && doubleNamedCreatedAtTable.getSystemProperties().contains(MobileServiceSystemProperty.CreatedAt));\n\n                MobileServiceTable<NamedSystemPropertiesType> namedCreatedAtTable = client.getTable(NamedSystemPropertiesType.class);\n                assertTrue(namedCreatedAtTable.getSystemProperties().size() == 1\n                        && namedCreatedAtTable.getSystemProperties().contains(MobileServiceSystemProperty.CreatedAt));\n\n                MobileServiceTable<NamedDifferentCasingSystemPropertiesType> namedDifferentCasingCreatedAtTable = client\n                        .getTable(NamedDifferentCasingSystemPropertiesType.class);\n                assertTrue(namedDifferentCasingCreatedAtTable.getSystemProperties().size() == 1\n                        && namedDifferentCasingCreatedAtTable.getSystemProperties().contains(MobileServiceSystemProperty.CreatedAt));\n\n                MobileServiceTable<UpdatedAtType> updatedAtTable = client.getTable(UpdatedAtType.class);\n                assertTrue(updatedAtTable.getSystemProperties().size() == 1\n                        && updatedAtTable.getSystemProperties().contains(MobileServiceSystemProperty.UpdatedAt));\n\n                MobileServiceTable<VersionType> versionTable = client.getTable(VersionType.class);\n                assertTrue(versionTable.getSystemProperties().size() == 1 && versionTable.getSystemProperties().contains(MobileServiceSystemProperty.Version));\n\n                MobileServiceTable<AllSystemPropertiesType> allsystemPropertiesTable = client.getTable(AllSystemPropertiesType.class);\n                assertTrue(allsystemPropertiesTable.getSystemProperties().size() == 3\n                        && allsystemPropertiesTable.getSystemProperties().contains(MobileServiceSystemProperty.Version)\n                        && allsystemPropertiesTable.getSystemProperties().contains(MobileServiceSystemProperty.CreatedAt)\n                        && allsystemPropertiesTable.getSystemProperties().contains(MobileServiceSystemProperty.UpdatedAt));\n            }\n        });\n    }\n\n    public void testLookupDeserializesCreateAtToDate() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"__createdAt\\\":\\\"2000-01-01T07:59:59.000Z\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<CreatedAtType> msTable = client.getTable(CreatedAtType.class);\n\n        try {\n            // Call the lookUp method\n            CreatedAtType entity = msTable.lookUp(\"an id\").get();\n\n            // Asserts\n            if (entity == null) {\n                fail(\"Expected result\");\n            } else {\n                assertTrue(entity instanceof CreatedAtType);\n\n                GregorianCalendar calendar = new GregorianCalendar(2000, 00, 01, 07, 59, 59);\n                calendar.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\n                assertEquals(\"an id\", entity.Id);\n                assertEquals(calendar.getTime(), entity.CreatedAt);\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testLookupDeserializesCreateAtToString() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"__createdAt\\\":\\\"2000-01-01T07:59:59.000Z\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringCreatedAtType> msTable = client.getTable(StringCreatedAtType.class);\n\n        try {\n            // Call the lookUp method\n            StringCreatedAtType entity = msTable.lookUp(\"an id\").get();\n\n            // Asserts\n            if (entity == null) {\n                fail(\"Expected result\");\n            } else {\n                assertTrue(entity instanceof StringCreatedAtType);\n\n                assertEquals(\"an id\", entity.Id);\n                assertEquals(\"2000-01-01T07:59:59.000Z\", entity.CreatedAt);\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testLookupDeserializesUpdateAtToDate() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"__updatedAt\\\":\\\"2000-01-01T07:59:59.000Z\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<UpdatedAtType> msTable = client.getTable(UpdatedAtType.class);\n\n        try {\n            // Call the lookUp method\n            UpdatedAtType entity = msTable.lookUp(\"an id\").get();\n\n            // Asserts\n            if (entity == null) {\n                fail(\"Expected result\");\n            } else {\n                assertTrue(entity instanceof UpdatedAtType);\n\n                GregorianCalendar calendar = new GregorianCalendar(2000, 00, 01, 07, 59, 59);\n                calendar.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\n                assertEquals(\"an id\", entity.Id);\n                assertEquals(calendar.getTime(), entity.UpdatedAt);\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testLookupDeserializesUpdateAtToString() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"__updatedAt\\\":\\\"2000-01-01T07:59:59.000Z\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<StringUpdatedAtType> msTable = client.getTable(StringUpdatedAtType.class);\n\n        try {\n            // Call the lookUp method\n            StringUpdatedAtType entity = msTable.lookUp(\"an id\").get();\n\n            // Asserts\n            if (entity == null) {\n                fail(\"Expected result\");\n            } else {\n                assertTrue(entity instanceof StringUpdatedAtType);\n\n                assertEquals(\"an id\", entity.Id);\n                assertEquals(\"2000-01-01T07:59:59.000Z\", entity.UpdatedAt);\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testLookupDeserializesVersionToString() throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"__version\\\":\\\"AAAAAAAAH2o=\\\"}\";\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        // Create get the MobileService table\n        MobileServiceTable<VersionType> msTable = client.getTable(VersionType.class);\n\n        try {\n            // Call the lookUp method\n            VersionType entity = msTable.lookUp(\"an id\").get();\n\n            // Asserts\n            if (entity == null) {\n                fail(\"Expected result\");\n            } else {\n                assertTrue(entity instanceof VersionType);\n\n                assertEquals(\"an id\", entity.Id);\n                assertEquals(\"AAAAAAAAH2o=\", entity.Version);\n            }\n\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testUpdateSetsIfMatchWithVersion() throws Throwable {\n        List<Pair<String, String>> versions = SystemPropertiesTestData.VersionsSerialize;\n\n        for (Pair<String, String> version : versions) {\n            updateSetsIfMatchWithVersion(version);\n        }\n    }\n\n    private void updateSetsIfMatchWithVersion(final Pair<String, String> version) throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\",\\\"__version\\\":\\\"AAAAAAAAH2o=\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(getTestFilter(responseContent));\n\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                boolean hasHeaderIfMatch = false;\n\n                for (Header header : request.getHeaders()) {\n                    if (header.getName().equalsIgnoreCase(\"If-Match\")) {\n                        assertTrue(header.getValue().equalsIgnoreCase(version.second));\n\n                        hasHeaderIfMatch = true;\n                    }\n                }\n\n                assertTrue(hasHeaderIfMatch);\n\n                return nextServiceFilterCallback.onNext(request);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<VersionType> msTable = client.getTable(VersionType.class);\n\n        VersionType element = new VersionType();\n        element.Id = \"an id\";\n        element.Version = version.first;\n\n        try {\n            // Call the update method\n            VersionType entity = msTable.update(element).get();\n\n            // Asserts\n            if (entity == null) {\n                fail(\"Expected result\");\n            }\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    public void testUpdateSetsVersionWithETag() throws Throwable {\n        List<Pair<String, String>> versions = SystemPropertiesTestData.VersionsDeserialize;\n\n        for (Pair<String, String> version : versions) {\n            updateSetsVersionWithEtag(version);\n        }\n    }\n\n    private void updateSetsVersionWithEtag(final Pair<String, String> version) throws Throwable {\n\n        final String responseContent = \"{\\\"id\\\":\\\"an id\\\"}\";\n\n        MobileServiceClient client = null;\n\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n            e.printStackTrace();\n        }\n\n        // Add a filter to handle the request and create a new json\n        // object with an id defined\n        client = client.withFilter(new ServiceFilter() {\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n                // Create a mock response simulating an error\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLineMock(200));\n                response.setContent(responseContent);\n                response.setHeaders(new Header[]{new Header() {\n\n                    @Override\n                    public String getValue() {\n                        return version.second;\n                    }\n\n                    @Override\n                    public String getName() {\n                        return \"ETag\";\n                    }\n\n                    @Override\n                    public HeaderElement[] getElements() throws ParseException {\n                        return null;\n                    }\n                }});\n\n                // create a mock request to replace the existing one\n                ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n                return nextServiceFilterCallback.onNext(requestMock);\n            }\n        });\n\n        // Create get the MobileService table\n        MobileServiceTable<VersionType> msTable = client.getTable(VersionType.class);\n\n        VersionType element = new VersionType();\n        element.Id = \"an id\";\n\n        try {\n            // Call the update method\n            VersionType entity = msTable.update(element).get();\n\n            // Asserts\n            if (entity == null) {\n                fail(\"Expected result\");\n            } else {\n                assertTrue(entity instanceof VersionType);\n\n                assertEquals(\"an id\", entity.Id);\n                assertEquals(version.first, entity.Version);\n            }\n        } catch (Exception exception) {\n            fail(exception.getMessage());\n        }\n    }\n\n    // Test Filter\n    private ServiceFilter getTestFilter(String content) {\n        return getTestFilter(200, content);\n    }\n\n    private ServiceFilter getTestFilter(final int statusCode, final String content) {\n        return new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                // Create a mock response simulating an error\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setStatus(new StatusLineMock(statusCode));\n                response.setContent(content);\n\n                // create a mock request to replace the existing one\n                ServiceFilterRequestMock requestMock = new ServiceFilterRequestMock(response);\n                return nextServiceFilterCallback.onNext(requestMock);\n            }\n        };\n    }\n\n    private void validateUri(EnumSet<MobileServiceSystemProperty> systemProperties, String requestUri) {\n        if (!systemProperties.isEmpty()) {\n            assertTrue(requestUri.contains(\"__systemproperties\"));\n        } else {\n            assertFalse(requestUri.contains(\"__systemproperties\"));\n        }\n\n        if (EnumSet.complementOf(systemProperties).isEmpty()) {\n            assertTrue(requestUri.contains(\"__systemproperties=*\"));\n        } else if (systemProperties.contains(MobileServiceSystemProperty.CreatedAt)) {\n            assertTrue(requestUri.contains(\"__createdAt\"));\n        } else if (systemProperties.contains(MobileServiceSystemProperty.UpdatedAt)) {\n            assertTrue(requestUri.contains(\"__updatedAt\"));\n        } else if (systemProperties.contains(MobileServiceSystemProperty.Version)) {\n            assertTrue(requestUri.contains(\"__version\"));\n        }\n    }\n\n    ;\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/URLTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test;\n\nimport android.annotation.TargetApi;\nimport android.os.Build;\nimport android.test.InstrumentationTestCase;\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.framework.filters.ServiceFilterResponseMock;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.helpers.EncodingUtilities;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.PersonTestObject;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.ResultsContainer;\n\nimport junit.framework.Assert;\n\nimport java.net.MalformedURLException;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Locale;\n\npublic class URLTests extends InstrumentationTestCase {\n\n    String appUrl = \"\";\n    String appKey = \"\";\n\n    @Override\n    protected void setUp() throws Exception {\n        appUrl = \"http://myapp.com/\";\n        appKey = \"qwerty\";\n        super.setUp();\n    }\n\n    public void testLoginURL() throws Throwable {\n        testLoginURL(MobileServiceAuthenticationProvider.Facebook);\n        testLoginURL(MobileServiceAuthenticationProvider.Twitter);\n        testLoginURL(MobileServiceAuthenticationProvider.MicrosoftAccount);\n        testLoginURL(MobileServiceAuthenticationProvider.Google);\n        testLoginURL(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory);\n\n        testLoginURL(\"facebook\");\n        testLoginURL(\"TWITTER\");\n        testLoginURL(\"GOOGLE\");\n        testLoginURL(\"MicrosoftAccount\");\n        testLoginURL(\"windowsAZUREactiveDIRECTORY\");\n        testLoginURL(\"AAD\");\n        testLoginURL(\"aad\");\n    }\n\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB)\n    private void testLoginURL(final Object provider) throws Throwable {\n\n        final ResultsContainer result = new ResultsContainer();\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n                assertEquals(\"POST\", request.getMethod());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{authenticationToken:'123abc', user:{userId:'123456'}}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        try {\n            if (provider.getClass().equals(MobileServiceAuthenticationProvider.class)) {\n                client.login((MobileServiceAuthenticationProvider) provider, \"{\\\"myToken\\\":123}\").get();\n            } else {\n                client.login((String) provider, \"{\\\"myToken\\\":123}\").get();\n            }\n        } catch (Exception exception) {\n            Assert.fail();\n        }\n\n        String normalizedProvider = provider.toString().toLowerCase(Locale.getDefault());\n        if (normalizedProvider.equals(\"windowsazureactivedirectory\")) {\n            normalizedProvider = \"aad\";\n        }\n\n        // Assert\n        String expectedURL = appUrl + \"login/\" + normalizedProvider;\n        assertEquals(expectedURL, result.getRequestUrl());\n\n    }\n\n    public void testUpdateURL() throws Throwable {\n        final ResultsContainer result = new ResultsContainer();\n\n        final String tableName = \"dummy\";\n        final PersonTestObject person = new PersonTestObject(\"john\", \"doe\", 10);\n        person.setId(10);\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n                assertEquals(\"PATCH\", request.getMethod());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(tableName, PersonTestObject.class).update(person).get();\n\n        // Assert\n        String expectedURL = appUrl + \"tables/\" + tableName + \"/\" + person.getId();\n        assertEquals(expectedURL, result.getRequestUrl());\n    }\n\n    public void testUpdateURLWithParameters() throws Throwable {\n        final ResultsContainer result = new ResultsContainer();\n\n        final String tableName = \"dummy\";\n        final PersonTestObject person = new PersonTestObject(\"john\", \"doe\", 10);\n        person.setId(10);\n        final List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"a key\", \"my <>&=?@ value\"));\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n                assertEquals(\"PATCH\", request.getMethod());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(tableName, PersonTestObject.class).update(person, parameters).get();\n\n        // Assert\n        String expectedURL = appUrl + \"tables/\" + tableName + \"/\" + person.getId()\n                + EncodingUtilities.percentEncodeSpaces(\"?a key=my %3C%3E%26%3D%3F%40 value\");\n        assertEquals(expectedURL, result.getRequestUrl());\n    }\n\n    public void testInsertURL() throws Throwable {\n        final ResultsContainer result = new ResultsContainer();\n\n        final String tableName = \"dummy\";\n        final PersonTestObject person = new PersonTestObject(\"john\", \"doe\", 10);\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n                assertEquals(\"POST\", request.getMethod());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(tableName, PersonTestObject.class).insert(person).get();\n\n        // Assert\n        String expectedURL = appUrl + \"tables/\" + tableName;\n        assertEquals(expectedURL, result.getRequestUrl());\n    }\n\n    public void testInsertURLWithParameters() throws Throwable {\n        final ResultsContainer result = new ResultsContainer();\n\n        final String tableName = \"dummy\";\n        final PersonTestObject person = new PersonTestObject(\"john\", \"doe\", 10);\n        final List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"a key\", \"my <>&=?@ value\"));\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n                assertEquals(\"POST\", request.getMethod());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(tableName, PersonTestObject.class).insert(person, parameters).get();\n\n        // Assert\n        String expectedURL = appUrl + \"tables/\" + tableName + EncodingUtilities.percentEncodeSpaces(\"?a key=my %3C%3E%26%3D%3F%40 value\");\n        assertEquals(expectedURL, result.getRequestUrl());\n    }\n\n    public void testLookupURL() throws Throwable {\n        final ResultsContainer result = new ResultsContainer();\n\n        final String tableName = \"dummy\";\n        final int id = 10;\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n                assertEquals(\"GET\", request.getMethod());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(tableName).lookUp(id).get();\n\n        // Assert\n        String expectedURL = appUrl + \"tables/\" + tableName + \"/\" + id;\n        assertEquals(expectedURL, result.getRequestUrl());\n    }\n\n    public void testLookupURLWithParameters() throws Throwable {\n        final ResultsContainer result = new ResultsContainer();\n\n        final String tableName = \"dummy\";\n        final int id = 10;\n        final List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"a key\", \"my <>&=?@ value\"));\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n                assertEquals(\"GET\", request.getMethod());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(tableName).lookUp(id, parameters).get();\n\n        // Assert\n        String expectedURL = appUrl + \"tables/\" + tableName + \"/\" + id + EncodingUtilities.percentEncodeSpaces(\"?a key=my %3C%3E%26%3D%3F%40 value\");\n        assertEquals(expectedURL, result.getRequestUrl());\n    }\n\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB)\n    public void testDeleteURL() throws Throwable {\n        final ResultsContainer result = new ResultsContainer();\n\n        final String tableName = \"dummy\";\n        final int id = 10;\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n                assertEquals(\"DELETE\", request.getMethod());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(tableName).delete(id).get();\n\n        // Assert\n        String expectedURL = appUrl + \"tables/\" + tableName + \"/\" + id;\n        assertEquals(expectedURL, result.getRequestUrl());\n    }\n\n    public void testDeleteURLWithParameters() throws Throwable {\n        final ResultsContainer result = new ResultsContainer();\n\n        final String tableName = \"dummy\";\n        final int id = 10;\n        final List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n        parameters.add(new Pair<String, String>(\"a key\", \"my <>&=?@ value\"));\n\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n                assertEquals(\"DELETE\", request.getMethod());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(tableName).delete(id, parameters).get();\n\n        // Assert\n        String expectedURL = appUrl + \"tables/\" + tableName + \"/\" + id + EncodingUtilities.percentEncodeSpaces(\"?a key=my %3C%3E%26%3D%3F%40 value\");\n        assertEquals(expectedURL, result.getRequestUrl());\n    }\n\n    public void testQueryURL() throws Throwable {\n        final ResultsContainer result = new ResultsContainer();\n\n        final String tableName = \"dummy\";\n\n        // Create client\n        MobileServiceClient client = null;\n        try {\n            client = new MobileServiceClient(appUrl, appKey, getInstrumentation().getTargetContext());\n        } catch (MalformedURLException e) {\n        }\n\n        // Add a new filter to the client\n        client = client.withFilter(new ServiceFilter() {\n\n            @Override\n            public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n                result.setRequestUrl(request.getUrl());\n                assertEquals(\"GET\", request.getMethod());\n\n                ServiceFilterResponseMock response = new ServiceFilterResponseMock();\n                response.setContent(\"{}\");\n\n                final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                resultFuture.set(response);\n\n                return resultFuture;\n            }\n        });\n\n        client.getTable(tableName).execute().get();\n\n        // Assert\n        String expectedURL = appUrl + \"tables/\" + tableName;\n        assertTrue(result.getRequestUrl().startsWith(expectedURL));\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/helpers/EncodingUtilities.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test.helpers;\n\npublic class EncodingUtilities {\n\n    public static String percentEncodeSpaces(String value) {\n        return value.replace(\" \", \"%20\");\n    }\n}"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/helpers/SQLiteStoreTestsUtilities.java",
    "content": "package com.microsoft.windowsazure.mobileservices.sdk.testapp.test.helpers;\n\nimport android.content.Context;\nimport android.database.sqlite.SQLiteDatabase;\nimport android.database.sqlite.SQLiteOpenHelper;\nimport android.database.sqlite.SQLiteStatement;\n\npublic class SQLiteStoreTestsUtilities extends SQLiteOpenHelper {\n\n    public SQLiteStoreTestsUtilities(Context context, String name) {\n        super(context, name, null, 1);\n    }\n\n    public static void Truncate(Context context, String dbName, String tableName) {\n        executeNonQuery(context, dbName, \"DELETE FROM \" + tableName);\n    }\n\n    public static void executeNonQuery(Context context, String dbName, String sql) {\n        SQLiteStoreTestsUtilities u =\n                new SQLiteStoreTestsUtilities(context, dbName);\n\n        u.executeNonQuery(sql);\n    }\n\n    public static void dropTestTable(Context context, String dbName, String tableName) {\n        executeNonQuery(context, dbName, \"DROP TABLE IF EXISTS \" + tableName);\n    }\n\n    public static long countRows(Context context, String dbName, String tableName) {\n        SQLiteStoreTestsUtilities u =\n                new SQLiteStoreTestsUtilities(context, dbName);\n\n        return u.countRows(tableName);\n    }\n\n    public void dropTestTable(String tableName) {\n        executeNonQuery(\"DROP TABLE IF EXISTS \" + tableName);\n    }\n\n    public long countRows(String tableName) {\n        SQLiteDatabase db = this.getReadableDatabase();\n\n        String countQuery = \"SELECT COUNT(1) from \" + tableName;\n\n        SQLiteStatement s = db.compileStatement(countQuery);\n\n        long count = s.simpleQueryForLong();\n\n        return count;\n    }\n\n    public void truncate(String tableName) {\n        executeNonQuery(\"DELETE FROM \" + tableName);\n    }\n\n    public void executeNonQuery(String sql) {\n        SQLiteDatabase db = this.getWritableDatabase();\n\n        db.execSQL(sql);\n    }\n\n    @Override\n    public void onCreate(SQLiteDatabase db) {\n        // TODO Auto-generated method stub\n\n    }\n\n    @Override\n    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\n        // TODO Auto-generated method stub\n\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/Address.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types;\n\npublic class Address {\n    private String streetAddress;\n    private int zipCode;\n    private String country;\n\n    public Address(String streetAddress, int zipCode, String country) {\n        this.streetAddress = streetAddress;\n        this.zipCode = zipCode;\n        this.country = country;\n    }\n\n    public String getStreetAddress() {\n        return streetAddress;\n    }\n\n    public void setStreetAddress(String streetAddress) {\n        this.streetAddress = streetAddress;\n    }\n\n    public int getZipCode() {\n        return zipCode;\n    }\n\n    public void setZipCode(int zipCode) {\n        this.zipCode = zipCode;\n    }\n\n    public String getCountry() {\n        return country;\n    }\n\n    public void setCountry(String country) {\n        this.country = country;\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/ComplexPersonTestObject.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types;\n\n\npublic class ComplexPersonTestObject {\n    private int id;\n    private String firstName;\n    private String lastName;\n    private Address address;\n\n    public ComplexPersonTestObject(String firstName, String lastName, Address address) {\n        this.firstName = firstName;\n        this.lastName = lastName;\n        this.address = address;\n    }\n\n    public Integer getId() {\n        return id;\n    }\n\n    public void setId(int id) {\n        this.id = id;\n    }\n\n    public String getFirstName() {\n        return firstName;\n    }\n\n    public void setFirstName(String firstName) {\n        this.firstName = firstName;\n    }\n\n    public String getLastName() {\n        return lastName;\n    }\n\n    public void setLastName(String lastName) {\n        this.lastName = lastName;\n    }\n\n    public Address getAddress() {\n        return address;\n    }\n\n    public void setAddress(Address address) {\n        this.address = address;\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/CustomFunctionOneParameter.java",
    "content": "package com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types;\n\npublic interface CustomFunctionOneParameter<T, U> {\n\n    U apply(T t) throws Exception;\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/CustomFunctionTwoParameters.java",
    "content": "package com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types;\n\npublic interface CustomFunctionTwoParameters<T, V, U> {\n\n    U apply(T t, V v) throws Exception;\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/DateTestObject.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types;\n\nimport java.util.Date;\n\npublic class DateTestObject {\n    private int id;\n    private Date date;\n\n    public DateTestObject(Date date) {\n        this.date = date;\n    }\n\n    public Date getDate() {\n        return date;\n    }\n\n    public void setDate(Date date) {\n        this.date = date;\n    }\n\n    public int getId() {\n        return id;\n    }\n\n    public void setId(int id) {\n        this.id = id;\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/IdPropertyTestClasses.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types;\n\nimport com.google.gson.annotations.SerializedName;\n\npublic class IdPropertyTestClasses {\n    // Class with an invalid Id property but using a valid gson serialized name\n    public static class IdPropertyWithGsonAnnotation {\n        @SerializedName(\"id\")\n        private int myId;\n\n        private String name;\n\n        public IdPropertyWithGsonAnnotation(String name) {\n            this.name = name;\n        }\n\n        public String getName() {\n            return name;\n        }\n\n        public void setName(String name) {\n            this.name = name;\n        }\n\n        public int getId() {\n            return myId;\n        }\n\n        public void setId(int id) {\n            myId = id;\n        }\n    }\n\n    // Class with a different cased id property\n    public static class IdPropertyWithDifferentIdPropertyCasing {\n        private int ID;\n\n        private String name;\n\n        public IdPropertyWithDifferentIdPropertyCasing(String name) {\n            this.name = name;\n        }\n\n        public String getName() {\n            return name;\n        }\n\n        public void setName(String name) {\n            this.name = name;\n        }\n\n        public int getId() {\n            return ID;\n        }\n\n        public void setId(int id) {\n            ID = id;\n        }\n    }\n\n    // Class with multiple id properties\n    public static class IdPropertyMultipleIdsTestObject {\n        private int id;\n        private int ID;\n        private int iD;\n\n        private String name;\n\n        public IdPropertyMultipleIdsTestObject(String name) {\n            this.name = name;\n        }\n\n        public String getName() {\n            return name;\n        }\n\n        public void setName(String name) {\n            this.name = name;\n        }\n\n        public int getId() {\n            return id;\n        }\n\n        public void setId(int id) {\n            this.id = id;\n        }\n\n        public int getID() {\n            return ID;\n        }\n\n        public void setID(int iD) {\n            ID = iD;\n        }\n\n        public int getiD() {\n            return iD;\n        }\n\n        public void setiD(int iD) {\n            this.iD = iD;\n        }\n\n    }\n\n    // Class with no Id property\n    public static class NoIdProperty {\n        private String name;\n\n        public NoIdProperty(String name) {\n            this.name = name;\n        }\n\n        public String getName() {\n            return name;\n        }\n\n        public void setName(String name) {\n            this.name = name;\n        }\n    }\n\n    public static class StringIdType {\n        public String Id;\n\n        public String String;\n    }\n\n    public static class LongIdType {\n        public long Id;\n\n        public String String;\n    }\n}"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/PersonTestObject.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types;\n\npublic class PersonTestObject {\n    private int id;\n    private String firstName;\n    private String lastName;\n    private int age;\n\n    public PersonTestObject(String firstName, String lastName, int age) {\n        this.firstName = firstName;\n        this.lastName = lastName;\n        this.age = age;\n    }\n\n    public int getId() {\n        return id;\n    }\n\n    public void setId(int id) {\n        this.id = id;\n    }\n\n    public String getFirstName() {\n        return firstName;\n    }\n\n    public void setFirstName(String firstName) {\n        this.firstName = firstName;\n    }\n\n    public String getLastName() {\n        return lastName;\n    }\n\n    public void setLastName(String lastName) {\n        this.lastName = lastName;\n    }\n\n    public int getAge() {\n        return age;\n    }\n\n    public void setAge(int age) {\n        this.age = age;\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/PersonTestObjectWithStringId.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types;\n\npublic class PersonTestObjectWithStringId {\n    private String id;\n    private String firstName;\n    private String lastName;\n    private int age;\n\n    public PersonTestObjectWithStringId(String firstName, String lastName, int age) {\n        this.firstName = firstName;\n        this.lastName = lastName;\n        this.age = age;\n    }\n\n    public String getId() {\n        return id;\n    }\n\n    public void setId(String id) {\n        this.id = id;\n    }\n\n    public String getFirstName() {\n        return firstName;\n    }\n\n    public void setFirstName(String firstName) {\n        this.firstName = firstName;\n    }\n\n    public String getLastName() {\n        return lastName;\n    }\n\n    public void setLastName(String lastName) {\n        this.lastName = lastName;\n    }\n\n    public int getAge() {\n        return age;\n    }\n\n    public void setAge(int age) {\n        this.age = age;\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/PersonTestObjectWithoutId.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types;\n\npublic class PersonTestObjectWithoutId {\n    private String firstName;\n    private String lastName;\n    private int age;\n\n    public PersonTestObjectWithoutId(String firstName, String lastName, int age) {\n        this.firstName = firstName;\n        this.lastName = lastName;\n        this.age = age;\n    }\n\n    public String getFirstName() {\n        return firstName;\n    }\n\n    public void setFirstName(String firstName) {\n        this.firstName = firstName;\n    }\n\n    public String getLastName() {\n        return lastName;\n    }\n\n    public void setLastName(String lastName) {\n        this.lastName = lastName;\n    }\n\n    public int getAge() {\n        return age;\n    }\n\n    public void setAge(int age) {\n        this.age = age;\n    }\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/ResultsContainer.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types;\n\nimport com.google.gson.JsonElement;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.IdPropertyTestClasses.IdPropertyWithDifferentIdPropertyCasing;\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.IdPropertyTestClasses.IdPropertyWithGsonAnnotation;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * Class used in tests to temporally store results obtained in AsyncTasks to\n * have them available in the asserts' section\n */\npublic class ResultsContainer {\n    private PersonTestObject person;\n\n    private PersonTestObjectWithoutId personWithoutId;\n\n    private PersonTestObjectWithStringId personWithStringId;\n\n    private ComplexPersonTestObject complexPerson;\n\n    private String requestUrl;\n\n    private List<PersonTestObject> peopleResult;\n\n    private int count;\n\n    private String errorMessage;\n\n    private MobileServiceUser user;\n\n    private Boolean operationSucceded;\n\n    private String responseContent;\n\n    private String requestContent;\n\n    private DateTestObject dateTestObject;\n\n    private IdPropertyWithGsonAnnotation idPropertyWithGsonAnnotation;\n\n    private IdPropertyWithDifferentIdPropertyCasing idPropertyWithDifferentIdPropertyCasing;\n\n    private Exception exception;\n\n    private JsonElement jsonResult;\n\n    private byte[] rawResponseContent;\n\n    private Object customResult;\n\n    public PersonTestObject getPerson() {\n        return person;\n    }\n\n    public void setPerson(PersonTestObject person) {\n        this.person = person;\n    }\n\n    public String getRequestUrl() {\n        return requestUrl;\n    }\n\n    public void setRequestUrl(String requestUrl) {\n        this.requestUrl = requestUrl;\n    }\n\n    public List<PersonTestObject> getPeopleResult() {\n        return peopleResult;\n    }\n\n    public void setPeopleResult(List<PersonTestObject> peopleResult) {\n        this.peopleResult = peopleResult;\n    }\n\n    public void setPeopleResult(PersonTestObject[] peopleResult) {\n        this.peopleResult = new ArrayList<PersonTestObject>();\n        for (PersonTestObject person : peopleResult) {\n            this.peopleResult.add(person);\n        }\n    }\n\n    public int getCount() {\n        return count;\n    }\n\n    public void setCount(int count) {\n        this.count = count;\n    }\n\n    public String getErrorMessage() {\n        return errorMessage;\n    }\n\n    public void setErrorMessage(String errorMessage) {\n        this.errorMessage = errorMessage;\n    }\n\n    public MobileServiceUser getUser() {\n        return user;\n    }\n\n    public void setUser(MobileServiceUser user) {\n        this.user = user;\n    }\n\n    public Boolean getOperationSucceded() {\n        return operationSucceded;\n    }\n\n    public void setOperationSucceded(Boolean operationSucceded) {\n        this.operationSucceded = operationSucceded;\n    }\n\n    public String getResponseValue() {\n        return responseContent;\n    }\n\n    public void setResponseValue(String responseValue) {\n        this.responseContent = responseValue;\n    }\n\n    public String getRequestContent() {\n        return requestContent;\n    }\n\n    public void setRequestContent(String requestContent) {\n        this.requestContent = requestContent;\n    }\n\n    public ComplexPersonTestObject getComplexPerson() {\n        return complexPerson;\n    }\n\n    public void setComplexPerson(ComplexPersonTestObject complexPerson) {\n        this.complexPerson = complexPerson;\n    }\n\n    public DateTestObject getDateTestObject() {\n        return dateTestObject;\n    }\n\n    public void setDateTestObject(DateTestObject dateTestObject) {\n        this.dateTestObject = dateTestObject;\n    }\n\n    public PersonTestObjectWithoutId getPersonWithoutId() {\n        return personWithoutId;\n    }\n\n    public void setPersonWithoutId(PersonTestObjectWithoutId personWithNoId) {\n        this.personWithoutId = personWithNoId;\n    }\n\n    public PersonTestObjectWithStringId getPersonWithStringId() {\n        return personWithStringId;\n    }\n\n    public void setPersonWithStringId(PersonTestObjectWithStringId personWithStringId) {\n        this.personWithStringId = personWithStringId;\n    }\n\n    public IdPropertyWithGsonAnnotation getIdPropertyWithGsonAnnotation() {\n        return idPropertyWithGsonAnnotation;\n    }\n\n    public void setIdPropertyWithGsonAnnotation(IdPropertyWithGsonAnnotation idPropertyWithGsonAnnotation) {\n        this.idPropertyWithGsonAnnotation = idPropertyWithGsonAnnotation;\n    }\n\n    public IdPropertyWithDifferentIdPropertyCasing getIdPropertyWithDifferentIdPropertyCasing() {\n        return idPropertyWithDifferentIdPropertyCasing;\n    }\n\n    public void setIdPropertyWithDifferentIdPropertyCasing(IdPropertyWithDifferentIdPropertyCasing idPropertyWithDifferentIdPropertyCasing) {\n        this.idPropertyWithDifferentIdPropertyCasing = idPropertyWithDifferentIdPropertyCasing;\n    }\n\n    public Exception getException() {\n        return exception;\n    }\n\n    public void setException(Throwable exception) {\n        this.exception = (Exception) exception;\n    }\n\n    public void setException(Exception exception) {\n        this.exception = exception;\n    }\n\n    public JsonElement getJsonResult() {\n        return jsonResult;\n    }\n\n    public void setJsonResult(JsonElement jsonResult) {\n        this.jsonResult = jsonResult;\n    }\n\n    public byte[] getRawResponseContent() {\n        return rawResponseContent;\n    }\n\n    public void setRawResponseContent(byte[] rawResponseContent) {\n        this.rawResponseContent = rawResponseContent;\n    }\n\n    public Object getCustomResult() {\n        return customResult;\n    }\n\n    public void setCustomResult(Object customResult) {\n        this.customResult = customResult;\n    }\n\n}\n"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/SystemPropertyTestClasses.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types;\n\nimport com.google.gson.annotations.SerializedName;\n\nimport java.util.Date;\n\npublic class SystemPropertyTestClasses {\n    public static class CreatedAtType {\n        public String Id;\n\n        @SerializedName(\"__createdAt\")\n        public Date CreatedAt;\n    }\n\n    public static class UpdatedAtType {\n        public String Id;\n\n        @SerializedName(\"__updatedAt\")\n        public Date UpdatedAt;\n    }\n\n    public static class VersionType {\n        public String Id;\n\n        @SerializedName(\"__version\")\n        public String Version;\n    }\n\n    public static class AllSystemPropertiesType {\n        public String Id;\n\n        @SerializedName(\"__createdAt\")\n        public Date CreatedAt;\n\n        @SerializedName(\"__updatedAt\")\n        public Date UpdatedAt;\n\n        @SerializedName(\"__version\")\n        public String Version;\n    }\n\n    public static class NamedSystemPropertiesType {\n        public String Id;\n\n        public Date __createdAt;\n    }\n\n    public static class NotSystemPropertyCreatedAtType {\n        public String Id;\n\n        public Date CreatedAt;\n    }\n\n    public static class NotSystemPropertyUpdatedAtType {\n        public String Id;\n\n        public Date _UpdatedAt;\n    }\n\n    public static class NotSystemPropertyVersionType {\n        public String Id;\n\n        public String version;\n    }\n\n    public static class StringType {\n        public int Id;\n        public String String;\n    }\n\n    public static class IntegerIdNotSystemPropertyCreatedAtType {\n        public int Id;\n\n        public Date __createdAt;\n    }\n\n    public static class IntegerIdWithNamedSystemPropertiesType {\n        public int Id;\n\n        public Date __createdAt;\n    }\n\n    public static class LongIdWithNamedSystemPropertiesType {\n        public long Id;\n\n        public Date __createdAt;\n    }\n\n    public static class DoubleNamedSystemPropertiesType {\n        public String Id;\n\n        public Date __createdAt;\n\n        public Date CreatedAt;\n    }\n\n    public static class NamedDifferentCasingSystemPropertiesType {\n        public String Id;\n\n        public Date __CreatedAt;\n    }\n\n    public static class StringCreatedAtType {\n        public String Id;\n\n        @SerializedName(\"__createdAt\")\n        public String CreatedAt;\n    }\n\n    public static class StringUpdatedAtType {\n        public String Id;\n\n        @SerializedName(\"__updatedAt\")\n        public String UpdatedAt;\n    }\n}"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/data/IdTestData.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.data;\n\nimport com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.IdPropertyTestClasses.NoIdProperty;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.UUID;\n\npublic class IdTestData {\n    public static String[] ValidStringIds = new String[]{\"id\", \"true\", \"false\", \"00000000-0000-0000-0000-000000000000\",\n            \"aa4da0b5-308c-4877-a5d2-03f274632636\", \"69C8BE62-A09F-4638-9A9C-6B448E9ED4E7\", \"{EC26F57E-1E65-4A90-B949-0661159D0546}\",\n            \"87D5B05C93614F8EBFADF7BC10F7AE8C\", \"someone@someplace.com\", \"id with spaces\", \"...\", \" .\", \"'id' with single quotes\",\n            \"id with 255 characters \" + repeat(\"x\", 232), \"id with Japanese 私の車はどこですか？\", \"id with Arabic أين هو سيارتي؟\", \"id with Russian Где моя машина\",\n            \"id with some URL significant characters % # &\", \"id with allowed ascii characters \" + getValidASCII(),\n            \"id with allowed extended ascii characters \" + getValidExtendedASCII(), \"   \",};\n\n    public static String[] EmptyStringIds = new String[]{\"\",};\n\n    public static String[] InvalidStringIds = concat(new String[]{\".\", \"..\", \"id with 256 characters \" + repeat(\"x\", 233), \"\\r\", \"\\n\", \"\\t\",\n            \"id\\twith\\ttabs\", \"id\\rwith\\rreturns\", \"id\\nwith\\n\\newline\", \"id with fowardslash \\\\\", \"id with backslash /\", \"\\\"idWithQuotes\\\"\", \"?\", \"\\\\\", \"/\",\n            \"`\", \"+\",}, getInvalidASCII());\n\n    public static long[] ValidIntIds = new long[]{1, Integer.MAX_VALUE, 9007199254740992L,};\n\n    public static long[] InvalidIntIds = new long[]{-1, Integer.MIN_VALUE, -9007199254740992L,};\n\n    public static Object[] NonStringNonIntValidJsonIds = new Object[]{true, false, 1.0, -1.0, 0.0,};\n\n    public static Object[] NonStringNonIntIds = new Object[]{new NoIdProperty(\"\"), new Object(), 1.0, UUID.fromString(\"aa4da0b5-308c-4877-a5d2-03f274632636\")};\n\n    private static String repeat(String value, int count) {\n        StringBuilder builder = new StringBuilder();\n\n        for (int i = 0; i < count; i++) {\n            builder.append(value);\n        }\n\n        return builder.toString();\n    }\n\n    private static String getValidASCII() {\n        StringBuilder builder = new StringBuilder();\n\n        for (int i = 32; i <= 126; i++) {\n            if (i != 34 && i != 43 && i != 47 && i != 63 && i != 92 && i != 96) {\n                builder.append(Character.toChars(i));\n            }\n        }\n\n        return builder.toString();\n    }\n\n    private static String getValidExtendedASCII() {\n        StringBuilder builder = new StringBuilder();\n\n        for (int i = 160; i <= 255; i++) {\n            builder.append(Character.toChars(i));\n        }\n\n        return builder.toString();\n    }\n\n    private static String[] getInvalidASCII() {\n        String[] array = new String[65];\n\n        for (int i = 0; i <= 31; i++) {\n            array[i] = String.valueOf(Character.toChars(i));\n        }\n\n        for (int i = 127; i <= 159; i++) {\n            array[i - 95] = String.valueOf(Character.toChars(i));\n        }\n\n        return array;\n    }\n\n    public static String[] concat(String[] array1, String[] array2) {\n        int length1 = array1.length;\n        int length2 = array2.length;\n        int length = length1 + length2;\n\n        String[] array = new String[length];\n\n        System.arraycopy(array1, 0, array, 0, length1);\n        System.arraycopy(array2, 0, array, length1, length2);\n\n        return array;\n    }\n\n    public static Object[] concat(Object[] array1, Object[] array2) {\n        int length1 = array1.length;\n        int length2 = array2.length;\n        int length = length1 + length2;\n\n        Object[] array = new Object[length];\n\n        System.arraycopy(array1, 0, array, 0, length1);\n        System.arraycopy(array2, 0, array, length1, length2);\n\n        return array;\n    }\n\n    public static long[] concat(long[] array1, long[] array2) {\n        int length1 = array1.length;\n        int length2 = array2.length;\n        int length = length1 + length2;\n\n        long[] array = new long[length];\n\n        System.arraycopy(array1, 0, array, 0, length1);\n        System.arraycopy(array2, 0, array, length1, length2);\n\n        return array;\n    }\n\n    public static Object[] convert(long[] array) {\n        List<Object> resultList = new ArrayList<Object>();\n\n        for (long elem : array) {\n            resultList.add((Object) elem);\n        }\n\n        return resultList.toArray();\n    }\n}"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/java/com/microsoft/windowsazure/mobileservices/sdk/testapp/test/types/data/SystemPropertiesTestData.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.sdk.testapp.test.types.data;\n\nimport android.util.Pair;\n\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty;\n\nimport java.util.ArrayList;\nimport java.util.EnumSet;\nimport java.util.List;\n\n\npublic class SystemPropertiesTestData {\n    public static List<EnumSet<MobileServiceSystemProperty>> AllSystemProperties;\n\n    static {\n        List<MobileServiceSystemProperty> col;\n        EnumSet<MobileServiceSystemProperty> set;\n        AllSystemProperties = new ArrayList<EnumSet<MobileServiceSystemProperty>>();\n\n        AllSystemProperties.add(EnumSet.noneOf(MobileServiceSystemProperty.class));\n\n        AllSystemProperties.add(EnumSet.allOf(MobileServiceSystemProperty.class));\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.CreatedAt);\n        col.add(MobileServiceSystemProperty.UpdatedAt);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.CreatedAt);\n        col.add(MobileServiceSystemProperty.Version);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.UpdatedAt);\n        col.add(MobileServiceSystemProperty.Version);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.CreatedAt);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.UpdatedAt);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.Version);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n    }\n\n    ;\n\n    public static String[] ValidSystemProperties = new String[]{\"__createdAt\", \"__updatedAt\", \"__version\", \"__CreatedAt\"};\n\n    public static String[] NonSystemProperties = new String[]{\"someProperty\", \"createdAt\", \"updatedAt\", \"version\", \"_createdAt\", \"_updatedAt\", \"_version\",\n            \"X__createdAt\"};\n\n    public static String[] ValidSystemPropertyQueryStrings = new String[]{\n            // General\n            \"__systemProperties=*\", \"__systemProperties=__createdAt\", \"__systemProperties=__createdAt,__updatedAt\", \"__systemProperties=__createdAt,__version\",\n            \"__systemProperties=__createdAt,__updatedAt,__version\", \"__systemProperties=__createdAt,__version,__updatedAt\",\n            \"__systemProperties=__updatedAt\",\n            \"__systemProperties=__updatedAt,__createdAt\",\n            \"__systemProperties=__updatedAt,__createdAt,__version\",\n            \"__systemProperties=__updatedAt,__version\",\n            \"__systemProperties=__updatedAt,__version, __createdAt\",\n            \"__systemProperties=__version\",\n            \"__systemProperties=__version,__createdAt\",\n            \"__systemProperties=__version,__createdAt,__updatedAt\",\n            \"__systemProperties=__version,__updatedAt\",\n            \"__systemProperties=__version,__updatedAt, __createdAt\",\n\n            // Trailing commas, extra commas\n            \"__systemProperties=__createdAt,\", \"__systemProperties=__createdAt,__updatedAt,\",\n            \"__systemProperties=__createdAt,__updatedAt,__version,\",\n            \"__systemProperties=,__createdAt\",\n            \"__systemProperties=__createdAt,,__updatedAt\",\n            \"__systemProperties=__createdAt, ,__updatedAt,__version\",\n            \"__systemProperties=__createdAt,,\",\n            \"__systemProperties=__createdAt, ,\",\n\n            // Trailing, leading whitespace\n            \"__systemProperties= *\", \"__systemProperties=\\t*\\t\", \"__systemProperties= __createdAt \", \"__systemProperties=\\t__createdAt,\\t__updatedAt\\t\",\n            \"__systemProperties=\\r__createdAt,\\r__updatedAt,\\t__version\\r\",\n            \"__systemProperties=\\n__createdAt\\n\",\n            \"__systemProperties=__createdAt,\\n__updatedAt\",\n            \"__systemProperties=__createdAt, __updatedAt, __version\",\n\n            // Different casing\n            \"__SystemProperties=*\", \"__SystemProperties=__createdAt\", \"__SYSTEMPROPERTIES=__createdAt,__updatedAt\",\n            \"__systemproperties=__createdAt,__updatedAt,__version\", \"__SystemProperties=__CreatedAt\", \"__SYSTEMPROPERTIES=__createdAt,__UPDATEDAT\",\n            \"__systemproperties=__createdat,__UPDATEDAT,__veRsion\",\n\n            // Sans __ prefix\n            \"__systemProperties=createdAt\", \"__systemProperties=updatedAt,createdAt\", \"__systemProperties=UPDATEDAT,createdat\",\n            \"__systemProperties=updatedAt,version,createdAt\",\n\n            // Combinations of above\n            \"__SYSTEMPROPERTIES=__createdAt, updatedat\", \"__systemProperties=__CreatedAt,,\\t__VERSION\", \"__systemProperties= updatedat ,,\"};\n\n    public static String[] InvalidSystemPropertyQueryStrings = new String[]{\n            // Unknown system Properties\n            \"__systemProperties=__created\", \"__systemProperties=updated At\", \"__systemProperties=notASystemProperty\", \"__systemProperties=_version\",\n\n            // System properties not comma separated\n            \"__systemProperties=__createdAt __updatedAt\", \"__systemProperties=__createdAt\\t__version\", \"__systemProperties=createdAt updatedAt version\",\n            \"__systemProperties=__createdAt__version\",\n\n            // All and individual system properties requested\n            \"__systemProperties=*,__updatedAt\",};\n\n    // Missing ‘__’ prefix to systemProperties query string parameter\n    public static String InvalidSystemParameterQueryString = \"_systemProperties=__createdAt,__version\";\n\n    public static List<Pair<String, String>> VersionsSerialize;\n\n    static {\n        VersionsSerialize = new ArrayList<Pair<String, String>>();\n        VersionsSerialize.add(new Pair<String, String>(\"AAAAAAAAH2o=\", \"\\\"AAAAAAAAH2o=\\\"\"));\n        VersionsSerialize.add(new Pair<String, String>(\"a version\", \"\\\"a version\\\"\"));\n        VersionsSerialize.add(new Pair<String, String>(\"a version with a \\\" quote\", \"\\\"a version with a \\\\\\\" quote\\\"\"));\n        VersionsSerialize.add(new Pair<String, String>(\"a version with an already escaped \\\\\\\" quote\", \"\\\"a version with an already escaped \\\\\\\" quote\\\"\"));\n        VersionsSerialize.add(new Pair<String, String>(\"\\\"a version with a quote at the start\", \"\\\"\\\\\\\"a version with a quote at the start\\\"\"));\n        VersionsSerialize.add(new Pair<String, String>(\"a version with a quote at the end\\\"\", \"\\\"a version with a quote at the end\\\\\\\"\\\"\"));\n        VersionsSerialize.add(new Pair<String, String>(\"datetime'2013-10-08T04%3A12%3A36.96Z'\", \"\\\"datetime'2013-10-08T04%3A12%3A36.96Z'\\\"\"));\n    }\n\n    public static List<Pair<String, String>> VersionsDeserialize;\n\n    static {\n        VersionsDeserialize = new ArrayList<Pair<String, String>>();\n        VersionsDeserialize.add(new Pair<String, String>(\"AAAAAAAAH2o=\", \"\\\"AAAAAAAAH2o=\\\"\"));\n        VersionsDeserialize.add(new Pair<String, String>(\"a version\", \"\\\"a version\\\"\"));\n        VersionsDeserialize.add(new Pair<String, String>(\"a version with a \\\" quote\", \"\\\"a version with a \\\\\\\" quote\\\"\"));\n        VersionsDeserialize.add(new Pair<String, String>(\"a version with an already escaped \\\" quote\", \"\\\"a version with an already escaped \\\\\\\" quote\\\"\"));\n        VersionsDeserialize.add(new Pair<String, String>(\"\\\"a version with a quote at the start\", \"\\\"\\\\\\\"a version with a quote at the start\\\"\"));\n        VersionsDeserialize.add(new Pair<String, String>(\"a version with a quote at the end\\\"\", \"\\\"a version with a quote at the end\\\\\\\"\\\"\"));\n        VersionsDeserialize.add(new Pair<String, String>(\"datetime'2013-10-08T04%3A12%3A36.96Z'\", \"\\\"datetime'2013-10-08T04%3A12%3A36.96Z'\\\"\"));\n    }\n}"
  },
  {
    "path": "sdk/android/test/sdk.testapp/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">sdk.testapp</string>\n</resources>\n"
  },
  {
    "path": "sdk/iOS/.gitignore",
    "content": "WindowsAzureMobileServices.xcodeproj/project.xcworkspace/xcuserdata/\nWindowsAzureMobileServices.xcodeproj/xcuserdata/\nDerivedData/\nbuild/\n*.xccheckout\n*.zip\n*.framework\n*.xccheckout\nWindowsAzureMobileServices.framework.zip\nWindowsAzureMobileServices.framework\nappledoc/html\nappledoc/docset\n"
  },
  {
    "path": "sdk/iOS/License.rtf",
    "content": "{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1\\adeff39\\deff0\\stshfdbch11\\stshfloch0\\stshfhich0\\stshfbi0\\deflang1033\\deflangfe1033\\themelang1033\\themelangfe2052\\themelangcs1025{\\fonttbl{\\f0\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times};}\n{\\f2\\fbidi \\fmodern\\fcharset0\\fprq1{\\*\\panose 02070309020205020404}Courier New{\\*\\falt Arial};}{\\f3\\fbidi \\froman\\fcharset2\\fprq2{\\*\\panose 05050102010706020507}Symbol{\\*\\falt Bookshelf Symbol 3};}\n{\\f10\\fbidi \\fnil\\fcharset2\\fprq2{\\*\\panose 05000000000000000000}Wingdings{\\*\\falt Symbol};}{\\f11\\fbidi \\fmodern\\fcharset128\\fprq1{\\*\\panose 02020609040205080304}MS Mincho{\\*\\falt ?l?r ??\\'81\\'66c};}\n{\\f13\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 02010600030101010101}SimSun{\\*\\falt ????????\\'a8\\'ac????};}{\\f34\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02040503050406030204}Cambria Math{\\*\\falt Calisto MT};}\n{\\f39\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604030504040204}Tahoma{\\*\\falt ?? ??};}{\\f40\\fbidi \\fmodern\\fcharset128\\fprq1{\\*\\panose 00000000000000000000}@MS Mincho{\\*\\falt @MS Gothic};}\n{\\f41\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 00000000000000000000}@SimSun{\\*\\falt Minion Web};}{\\f42\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 00000000000000000000}Trebuchet MS{\\*\\falt Univers};}\n{\\flomajor\\f31500\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times};}{\\fdbmajor\\f31501\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 02010600030101010101}SimSun{\\*\\falt ????????\\'a8\\'ac????};}\n{\\fhimajor\\f31502\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02040503050406030204}Cambria;}{\\fbimajor\\f31503\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times};}\n{\\flominor\\f31504\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times};}{\\fdbminor\\f31505\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 02010600030101010101}SimSun{\\*\\falt ????????\\'a8\\'ac????};}\n{\\fhiminor\\f31506\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020f0502020204030204}Calibri;}{\\fbiminor\\f31507\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604020202020204}Arial;}{\\f44\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times};}\n{\\f45\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times};}{\\f47\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times};}{\\f48\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times};}\n{\\f49\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times};}{\\f50\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times};}{\\f51\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times};}\n{\\f52\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times};}{\\f64\\fbidi \\fmodern\\fcharset238\\fprq1 Courier New CE{\\*\\falt Arial};}{\\f65\\fbidi \\fmodern\\fcharset204\\fprq1 Courier New Cyr{\\*\\falt Arial};}\n{\\f67\\fbidi \\fmodern\\fcharset161\\fprq1 Courier New Greek{\\*\\falt Arial};}{\\f68\\fbidi \\fmodern\\fcharset162\\fprq1 Courier New Tur{\\*\\falt Arial};}{\\f69\\fbidi \\fmodern\\fcharset177\\fprq1 Courier New (Hebrew){\\*\\falt Arial};}\n{\\f70\\fbidi \\fmodern\\fcharset178\\fprq1 Courier New (Arabic){\\*\\falt Arial};}{\\f71\\fbidi \\fmodern\\fcharset186\\fprq1 Courier New Baltic{\\*\\falt Arial};}{\\f72\\fbidi \\fmodern\\fcharset163\\fprq1 Courier New (Vietnamese){\\*\\falt Arial};}\n{\\f156\\fbidi \\fmodern\\fcharset0\\fprq1 MS Mincho Western{\\*\\falt ?l?r ??\\'81\\'66c};}{\\f154\\fbidi \\fmodern\\fcharset238\\fprq1 MS Mincho CE{\\*\\falt ?l?r ??\\'81\\'66c};}{\\f155\\fbidi \\fmodern\\fcharset204\\fprq1 MS Mincho Cyr{\\*\\falt ?l?r ??\\'81\\'66c};}\n{\\f157\\fbidi \\fmodern\\fcharset161\\fprq1 MS Mincho Greek{\\*\\falt ?l?r ??\\'81\\'66c};}{\\f158\\fbidi \\fmodern\\fcharset162\\fprq1 MS Mincho Tur{\\*\\falt ?l?r ??\\'81\\'66c};}{\\f161\\fbidi \\fmodern\\fcharset186\\fprq1 MS Mincho Baltic{\\*\\falt ?l?r ??\\'81\\'66c};}\n{\\f176\\fbidi \\fnil\\fcharset0\\fprq2 SimSun Western{\\*\\falt ????????\\'a8\\'ac????};}{\\f384\\fbidi \\froman\\fcharset238\\fprq2 Cambria Math CE{\\*\\falt Calisto MT};}{\\f385\\fbidi \\froman\\fcharset204\\fprq2 Cambria Math Cyr{\\*\\falt Calisto MT};}\n{\\f387\\fbidi \\froman\\fcharset161\\fprq2 Cambria Math Greek{\\*\\falt Calisto MT};}{\\f388\\fbidi \\froman\\fcharset162\\fprq2 Cambria Math Tur{\\*\\falt Calisto MT};}{\\f391\\fbidi \\froman\\fcharset186\\fprq2 Cambria Math Baltic{\\*\\falt Calisto MT};}\n{\\f392\\fbidi \\froman\\fcharset163\\fprq2 Cambria Math (Vietnamese){\\*\\falt Calisto MT};}{\\f434\\fbidi \\fswiss\\fcharset238\\fprq2 Tahoma CE{\\*\\falt ?? ??};}{\\f435\\fbidi \\fswiss\\fcharset204\\fprq2 Tahoma Cyr{\\*\\falt ?? ??};}\n{\\f437\\fbidi \\fswiss\\fcharset161\\fprq2 Tahoma Greek{\\*\\falt ?? ??};}{\\f438\\fbidi \\fswiss\\fcharset162\\fprq2 Tahoma Tur{\\*\\falt ?? ??};}{\\f439\\fbidi \\fswiss\\fcharset177\\fprq2 Tahoma (Hebrew){\\*\\falt ?? ??};}\n{\\f440\\fbidi \\fswiss\\fcharset178\\fprq2 Tahoma (Arabic){\\*\\falt ?? ??};}{\\f441\\fbidi \\fswiss\\fcharset186\\fprq2 Tahoma Baltic{\\*\\falt ?? ??};}{\\f442\\fbidi \\fswiss\\fcharset163\\fprq2 Tahoma (Vietnamese){\\*\\falt ?? ??};}\n{\\f443\\fbidi \\fswiss\\fcharset222\\fprq2 Tahoma (Thai){\\*\\falt ?? ??};}{\\f446\\fbidi \\fmodern\\fcharset0\\fprq1 @MS Mincho Western{\\*\\falt @MS Gothic};}{\\f444\\fbidi \\fmodern\\fcharset238\\fprq1 @MS Mincho CE{\\*\\falt @MS Gothic};}\n{\\f445\\fbidi \\fmodern\\fcharset204\\fprq1 @MS Mincho Cyr{\\*\\falt @MS Gothic};}{\\f447\\fbidi \\fmodern\\fcharset161\\fprq1 @MS Mincho Greek{\\*\\falt @MS Gothic};}{\\f448\\fbidi \\fmodern\\fcharset162\\fprq1 @MS Mincho Tur{\\*\\falt @MS Gothic};}\n{\\f451\\fbidi \\fmodern\\fcharset186\\fprq1 @MS Mincho Baltic{\\*\\falt @MS Gothic};}{\\f456\\fbidi \\fnil\\fcharset0\\fprq2 @SimSun Western{\\*\\falt Minion Web};}{\\f464\\fbidi \\fswiss\\fcharset238\\fprq2 Trebuchet MS CE{\\*\\falt Univers};}\n{\\f465\\fbidi \\fswiss\\fcharset204\\fprq2 Trebuchet MS Cyr{\\*\\falt Univers};}{\\f467\\fbidi \\fswiss\\fcharset161\\fprq2 Trebuchet MS Greek{\\*\\falt Univers};}{\\f468\\fbidi \\fswiss\\fcharset162\\fprq2 Trebuchet MS Tur{\\*\\falt Univers};}\n{\\f471\\fbidi \\fswiss\\fcharset186\\fprq2 Trebuchet MS Baltic{\\*\\falt Univers};}{\\flomajor\\f31508\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times};}{\\flomajor\\f31509\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times};}\n{\\flomajor\\f31511\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times};}{\\flomajor\\f31512\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times};}\n{\\flomajor\\f31513\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times};}{\\flomajor\\f31514\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times};}\n{\\flomajor\\f31515\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times};}{\\flomajor\\f31516\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times};}\n{\\fdbmajor\\f31520\\fbidi \\fnil\\fcharset0\\fprq2 SimSun Western{\\*\\falt ????????\\'a8\\'ac????};}{\\fhimajor\\f31528\\fbidi \\froman\\fcharset238\\fprq2 Cambria CE;}{\\fhimajor\\f31529\\fbidi \\froman\\fcharset204\\fprq2 Cambria Cyr;}\n{\\fhimajor\\f31531\\fbidi \\froman\\fcharset161\\fprq2 Cambria Greek;}{\\fhimajor\\f31532\\fbidi \\froman\\fcharset162\\fprq2 Cambria Tur;}{\\fhimajor\\f31535\\fbidi \\froman\\fcharset186\\fprq2 Cambria Baltic;}\n{\\fhimajor\\f31536\\fbidi \\froman\\fcharset163\\fprq2 Cambria (Vietnamese);}{\\fbimajor\\f31538\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times};}{\\fbimajor\\f31539\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times};}\n{\\fbimajor\\f31541\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times};}{\\fbimajor\\f31542\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times};}\n{\\fbimajor\\f31543\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times};}{\\fbimajor\\f31544\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times};}\n{\\fbimajor\\f31545\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times};}{\\fbimajor\\f31546\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times};}\n{\\flominor\\f31548\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times};}{\\flominor\\f31549\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times};}\n{\\flominor\\f31551\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times};}{\\flominor\\f31552\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times};}\n{\\flominor\\f31553\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times};}{\\flominor\\f31554\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times};}\n{\\flominor\\f31555\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times};}{\\flominor\\f31556\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times};}\n{\\fdbminor\\f31560\\fbidi \\fnil\\fcharset0\\fprq2 SimSun Western{\\*\\falt ????????\\'a8\\'ac????};}{\\fhiminor\\f31568\\fbidi \\fswiss\\fcharset238\\fprq2 Calibri CE;}{\\fhiminor\\f31569\\fbidi \\fswiss\\fcharset204\\fprq2 Calibri Cyr;}\n{\\fhiminor\\f31571\\fbidi \\fswiss\\fcharset161\\fprq2 Calibri Greek;}{\\fhiminor\\f31572\\fbidi \\fswiss\\fcharset162\\fprq2 Calibri Tur;}{\\fhiminor\\f31575\\fbidi \\fswiss\\fcharset186\\fprq2 Calibri Baltic;}\n{\\fhiminor\\f31576\\fbidi \\fswiss\\fcharset163\\fprq2 Calibri (Vietnamese);}{\\fbiminor\\f31578\\fbidi \\fswiss\\fcharset238\\fprq2 Arial CE;}{\\fbiminor\\f31579\\fbidi \\fswiss\\fcharset204\\fprq2 Arial Cyr;}\n{\\fbiminor\\f31581\\fbidi \\fswiss\\fcharset161\\fprq2 Arial Greek;}{\\fbiminor\\f31582\\fbidi \\fswiss\\fcharset162\\fprq2 Arial Tur;}{\\fbiminor\\f31583\\fbidi \\fswiss\\fcharset177\\fprq2 Arial (Hebrew);}\n{\\fbiminor\\f31584\\fbidi \\fswiss\\fcharset178\\fprq2 Arial (Arabic);}{\\fbiminor\\f31585\\fbidi \\fswiss\\fcharset186\\fprq2 Arial Baltic;}{\\fbiminor\\f31586\\fbidi \\fswiss\\fcharset163\\fprq2 Arial (Vietnamese);}}{\\colortbl;\\red0\\green0\\blue0;\\red0\\green0\\blue255;\n\\red0\\green255\\blue255;\\red0\\green255\\blue0;\\red255\\green0\\blue255;\\red255\\green0\\blue0;\\red255\\green255\\blue0;\\red255\\green255\\blue255;\\red0\\green0\\blue128;\\red0\\green128\\blue128;\\red0\\green128\\blue0;\\red128\\green0\\blue128;\\red128\\green0\\blue0;\n\\red128\\green128\\blue0;\\red128\\green128\\blue128;\\red192\\green192\\blue192;\\ctextone\\ctint255\\cshade255\\red0\\green0\\blue0;}{\\*\\defchp \\fs22\\dbch\\af11 }{\\*\\defpap \\ql \\li0\\ri0\\sa200\\sl276\\slmult1\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 }\\noqfpromote {\\stylesheet{\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext0 \\sautoupd \\sqformat \\spriority0 Normal;}{\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext1 \\slink15 \\sqformat heading 1;}{\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext2 \\slink16 \\sqformat heading 2;}{\\s3\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\n\\tx1077\\jclisttab\\tx1440\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext3 \\slink17 \\sqformat heading 3;}{\\s4\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl3\\outlinelevel3\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext4 \\slink18 \\sqformat heading 4;}{\\s5\\ql \\fi-357\\li1792\\ri0\\sb120\\sa120\\widctlpar\n\\tx1792\\jclisttab\\tx2155\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl4\\outlinelevel4\\adjustright\\rin0\\lin1792\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext5 \\slink19 \\sqformat heading 5;}{\\s6\\ql \\fi-357\\li2149\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx2152\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl5\\outlinelevel5\\adjustright\\rin0\\lin2149\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext6 \\slink20 \\sqformat heading 6;}{\\s7\\ql \\fi-357\\li2506\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx2509\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl6\\outlinelevel6\\adjustright\\rin0\\lin2506\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext7 \\slink21 \\sqformat heading 7;}{\\s8\\ql \\fi-357\\li2863\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx2866\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl7\\outlinelevel7\\adjustright\\rin0\\lin2863\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext8 \\slink22 \\sqformat heading 8;}{\\s9\\ql \\fi-358\\li3221\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx3223\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl8\\outlinelevel8\\adjustright\\rin0\\lin3221\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext9 \\slink23 \\sqformat heading 9;}{\\*\\cs10 \\additive \\ssemihidden \\sunhideused \\spriority1 Default Paragraph Font;}{\\*\n\\ts11\\tsrowd\\trftsWidthB3\\trpaddl108\\trpaddr108\\trpaddfl3\\trpaddft3\\trpaddfb3\\trpaddfr3\\trcbpat1\\trcfpat1\\tblind0\\tblindtype3\\tsvertalt\\tsbrdrt\\tsbrdrl\\tsbrdrb\\tsbrdrr\\tsbrdrdgl\\tsbrdrdgr\\tsbrdrh\\tsbrdrv \\ql \\li0\\ri0\\sa200\\sl276\\slmult1\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs22\\alang1025 \\ltrch\\fcs0 \\fs22\\lang1033\\langfe1033\\loch\\f0\\hich\\af0\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext11 \\ssemihidden \\sunhideused Normal Table;}{\\*\n\\cs15 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs19 \\ltrch\\fcs0 \\b\\f39\\fs19 \\sbasedon10 \\slink1 \\slocked Heading 1 Char;}{\\*\\cs16 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs19 \\ltrch\\fcs0 \\b\\f39\\fs19 \\sbasedon10 \\slink2 \\slocked Heading 2 Char;}{\\*\\cs17 \\additive \n\\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink3 \\slocked Heading 3 Char;}{\\*\\cs18 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink4 \\slocked Heading 4 Char;}{\\*\\cs19 \\additive \\rtlch\\fcs1 \\af39\\afs19 \n\\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink5 \\slocked Heading 5 Char;}{\\*\\cs20 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink6 \\slocked Heading 6 Char;}{\\*\\cs21 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \n\\sbasedon10 \\slink7 \\slocked Heading 7 Char;}{\\*\\cs22 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink8 \\slocked Heading 8 Char;}{\\*\\cs23 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink9 \\slocked \nHeading 9 Char;}{\\s24\\ql \\li357\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext24 Body 1;}{\\s25\\ql \\li720\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext25 Body 2;}{\\s26\\ql \\li1077\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext26 Body 3;}{\n\\s27\\ql \\li1435\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext27 Body 4;}{\\s28\\ql \\li1803\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin1803\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext28 Body 5;}{\\s29\\ql \\li2160\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin2160\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext29 Body 6;}{\n\\s30\\ql \\li2506\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin2506\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext30 Body 7;}{\\s31\\ql \\li2863\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin2863\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext31 Body 8;}{\\s32\\ql \\li3221\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin3221\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext32 Body 9;}{\\s33\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls1\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext33 Bullet 1;}{\n\\s34\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext34 Bullet 2;}{\\s35\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1080\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls3\\adjustright\\rin0\\lin1077\\itap0 \n\\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext35 \\slink87 Bullet 3;}{\\s36\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext36 Bullet 4;}{\n\\s37\\ql \\fi-357\\li1792\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1795\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls5\\adjustright\\rin0\\lin1792\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext37 Bullet 5;}{\\s38\\ql \\fi-357\\li2149\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx2152\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls6\\adjustright\\rin0\\lin2149\\itap0 \n\\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext38 Bullet 6;}{\\s39\\ql \\fi-357\\li2506\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx2509\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls7\\adjustright\\rin0\\lin2506\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext39 Bullet 7;}{\n\\s40\\ql \\fi-357\\li2863\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx2866\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls8\\adjustright\\rin0\\lin2863\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext40 Bullet 8;}{\\s41\\ql \\fi-358\\li3221\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx3223\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls9\\adjustright\\rin0\\lin3221\\itap0 \n\\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon32 \\snext41 Bullet 9;}{\n\\s42\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs28\\alang1025 \\ltrch\\fcs0 \\b\\fs28\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext0 Heading EULA;}{\\s43\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\brdrb\\brdrs\\brdrw10\\brsp20 \\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs28\\alang1025 \\ltrch\\fcs0 \n\\b\\fs28\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext0 Heading Software Title;}{\\s44\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \n\\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext44 Preamble;}{\\s45\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\brdrb\\brdrs\\brdrw10\\brsp20 \n\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext1 Preamble Border;}{\n\\s46\\qc \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext46 Heading Warranty;}{\\s47\\ql \\fi-360\\li360\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls11\\outlinelevel0\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext0 Heading 1 Warranty;}{\\s48\\ql \\fi-360\\li720\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls11\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext0 Heading 2 Warranty;}{\\s49\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\\tx1077\\jclisttab\\tx1440\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon3 \\snext49 \\slink107 Heading 3 Bold;}{\\s50\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon36 \\snext50 \nBullet 4 Underline;}{\\s51\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon35 \\snext51 Bullet 3 Underline;}{\\s52\\ql \\li720\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon25 \\snext52 Body 2 Underline;}{\n\\s53\\ql \\li1077\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon26 \\snext53 Body 3 Underline;}{\\s54\\ql \\li0\\ri0\\sb120\\sa120\\sl480\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext54 \\slink55 Body Text Indent;}{\\*\\cs55 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink54 \\slocked \\ssemihidden \nBody Text Indent Char;}{\\s56\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\ai\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\i\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon36 \\snext56 Bullet 4 Italics;}{\\*\\cs57 \\additive \\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\f39\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Body 2 Char;}{\\*\n\\cs58 \\additive \\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\f39\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Body 3 Char;}{\\*\\cs59 \\additive \\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\f39\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Body 4 Char;}{\\*\\cs60 \n\\additive \\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\f39\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Body 1 Char;}{\\s61\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\brdrt\\brdrs\\brdrw10\\brsp20 \\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \n\\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon44 \\snext61 Preamble Border Above;}{\n\\s62\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext62 \\slink63 \\ssemihidden footnote text;}{\\*\\cs63 \\additive \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\f39\\fs20 \\sbasedon10 \\slink62 \\slocked \\ssemihidden Footnote Text Char;}{\\*\\cs64 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\super \n\\sbasedon10 \\ssemihidden footnote reference;}{\\s65\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext65 \\slink66 \\ssemihidden endnote text;}{\\*\\cs66 \\additive \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\f39\\fs20 \\sbasedon10 \\slink65 \\slocked \\ssemihidden \nEndnote Text Char;}{\\*\\cs67 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\super \\sbasedon10 \\ssemihidden endnote reference;}{\\s68\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \n\\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext68 \\slink69 \\ssemihidden annotation text;}{\\*\\cs69 \\additive \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\f39\\fs20 \n\\sbasedon10 \\slink68 \\slocked \\ssemihidden Comment Text Char;}{\\*\\cs70 \\additive \\rtlch\\fcs1 \\af0\\afs16 \\ltrch\\fcs0 \\fs16 \\sbasedon10 \\ssemihidden annotation reference;}{\\s71\\ql \\li0\\ri0\\sa160\\sl-240\\slmult0\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext71 Char;}{\n\\s72\\ql \\li0\\ri0\\sa160\\sl-240\\slmult0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext72 Char Char Char Char;}{\\*\\cs73 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\ul\\cf2 \\sbasedon10 Hyperlink,Char Char7;}{\\s74\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \n\\af39\\afs16\\alang1025 \\ltrch\\fcs0 \\fs16\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext74 \\slink75 \\ssemihidden Balloon Text;}{\\*\\cs75 \\additive \\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16 \n\\sbasedon10 \\slink74 \\slocked \\ssemihidden Balloon Text Char;}{\\*\\cs76 \\additive \\rtlch\\fcs1 \\ab\\af42 \\ltrch\\fcs0 \\b\\f42\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Heading 2 Char1;}{\\*\\cs77 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\sbasedon10 \npage number;}{\\s78\\ql \\li0\\ri0\\sa160\\sl-240\\slmult0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext78 Char Char Char Char1;}{\\s79\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \n\\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext0 \\slink109 Body 0 Bold;}{\\s80\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \n\\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext0 Body 0;}{\\s81\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext81 \\slink82 header;}{\\*\\cs82 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink81 \\slocked \nHeader Char;}{\\s83\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext83 \\slink84 footer;}{\\*\\cs84 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink83 \\slocked Footer Char;}{\n\\s85\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs20\\alang1025 \\ltrch\\fcs0 \\b\\fs20\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon68 \\snext68 \\slink86 \\ssemihidden \\sunhideused annotation subject;}{\\*\\cs86 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\f39\\fs20 \\sbasedon69 \\slink85 \\slocked \\ssemihidden Comment Subject Char;}{\\*\\cs87 \\additive \\rtlch\\fcs1 \\af39\\afs19 \n\\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink35 \\slocked Bullet 3 Char1;}{\\s88\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1080\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls3\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon35 \\snext88 Bullet 3 Underlined;}{\\*\\cs89 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\langnp1033\\langfenp1033 \\sbasedon10 Char Char;}{\\s90\\ql \\li0\\ri0\\sl-240\\slmult0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs20\\alang1025 \\ltrch\\fcs0 \n\\fs18\\lang1033\\langfe1033\\loch\\f42\\hich\\af42\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext90 \\spriority0 AdditionalSoftware;}{\\*\\cs91 \\additive \\rtlch\\fcs1 \\af39\\afs24\\alang1025 \\ltrch\\fcs0 \\b\\f42\\fs24\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \n\\sbasedon10 \\spriority0 Char Char1;}{\\s92\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon36 \\snext92 \\spriority0 Bullet 4 Underlined;}{\\s93\\ql \\fi-360\\li360\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls31\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext93 \\spriority0 \nHeading French Warranty;}{\\*\\cs94 \\additive \\f39\\lang1033\\langfe0\\langnp1033\\langfenp0 \\slocked Body 3 Char Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car;}{\\*\\cs95 \\additive \n\\f2\\cf15\\lang1024\\langfe1024\\noproof tw4winExternal;}{\\*\\cs96 \\additive \\v\\f2\\fs24\\cf12\\sub tw4winMark;}{\\*\\cs97 \\additive \\b\\f39 Preamble Char;}{\\*\\cs98 \\additive \\f2\\fs40\\cf4 tw4winError;}{\\*\\cs99 \\additive \\cf2 tw4winTerm;}{\\*\\cs100 \\additive \n\\f2\\cf11\\lang1024\\langfe1024\\noproof tw4winPopup;}{\\*\\cs101 \\additive \\f2\\cf10\\lang1024\\langfe1024\\noproof tw4winJump;}{\\*\\cs102 \\additive \\f2\\cf6\\lang1024\\langfe1024\\noproof tw4winInternal;}{\\*\\cs103 \\additive \\f2\\cf13\\lang1024\\langfe1024\\noproof \nDO_NOT_TRANSLATE;}{\\s104\\ql \\li0\\ri0\\sb120\\sa120\\sl480\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext104 \\slink105 Body Text 2;}{\\*\\cs105 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink104 \\slocked Body Text 2 Char;}{\n\\s106\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\\tx1077\\jclisttab\\tx1440\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon49 \\snext106 \\slink108 Style Heading 3 Bold + (Asian) Times New Roman 9.5 pt;}{\\*\\cs107 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs19 \\ltrch\\fcs0 \\b\\f39\\fs19 \n\\sbasedon10 \\slink49 \\slocked Heading 3 Bold Char;}{\\*\\cs108 \\additive \\rtlch\\fcs1 \\ab0\\af39\\afs19 \\ltrch\\fcs0 \\b0\\f39\\fs19 \\sbasedon107 \\slink106 \\slocked Style Heading 3 Bold + (Asian) Times New Roman 9.5 pt Char;}{\\*\\cs109 \\additive \\rtlch\\fcs1 \n\\ab\\af39\\afs19 \\ltrch\\fcs0 \\b\\f39\\fs19 \\sbasedon10 \\slink79 \\slocked Body 0 Bold Char;}{\\s110\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs20\\alang1025 \\ltrch\\fcs0 \n\\b\\fs20\\lang1026\\langfe2052\\super\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1026\\langfenp2052 \\sbasedon0 \\snext110 \\slink111 LIMPA_T4WINEXTERNAL;}{\\*\\cs111 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \n\\b\\f39\\fs20\\lang1026\\langfe2052\\super\\langnp1026\\langfenp2052 \\sbasedon10 \\slink110 \\slocked LIMPA_T4WINEXTERNAL Char;}}{\\*\\listtable{\\list\\listtemplateid1821544400\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1380\\jclisttab\\tx1380\\lin1380 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2100\\jclisttab\\tx2100\\lin2100 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2820\\jclisttab\\tx2820\\lin2820 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3540\\jclisttab\\tx3540\\lin3540 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4260\\jclisttab\\tx4260\\lin4260 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li4980\\jclisttab\\tx4980\\lin4980 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5700\\jclisttab\\tx5700\\lin5700 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6420\\jclisttab\\tx6420\\lin6420 }{\\listname ;}\\listid189493747}{\\list\\listtemplateid176468498\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\leveltemplateid692200086\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s41\\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\n\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\n\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }\n{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid196815738}{\\list\\listtemplateid-1793664660{\\listlevel\\levelnfc3\n\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af0 \\ltrch\\fcs0 \\b\\i0\\fbias0 \\s47\\fi-360\\li360\\jclisttab\\tx360\\lin360 }{\\listlevel\\levelnfc0\\levelnfcn0\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af0 \\ltrch\\fcs0 \\b\\i0\\fbias0 \\s48\\fi-360\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02);}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li1080\\jclisttab\\tx1080\\lin1080 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'03(\\'03);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\'03(\\'04);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li1800\\jclisttab\\tx1800\\lin1800 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'03(\\'05);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\n\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li2520\\jclisttab\\tx2520\\lin2520 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'07.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \n\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'08.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li3240\n\\jclisttab\\tx3240\\lin3240 }{\\listname ;}\\listid394402059}{\\list\\listtemplateid1928476992{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\s49\\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\'02i.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\'02A.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid398796681}{\\list\\listtemplateid789093748\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-317712510\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s34\\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\n\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\n\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid477573462}\n{\\list\\listtemplateid1948578256{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\n\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af0\\afs20 \\ltrch\\fcs0 \\b\\i0\\fs20\\fbias0 \\fi-360\\li720\n\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li1077\n\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \n\\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid630479929}{\\list\\listtemplateid67698717{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'00);}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li360\\jclisttab\\tx360\\lin360 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'01);}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02);}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\af0 \\ltrch\\fcs0 \\fi-360\\li1080\\jclisttab\\tx1080\\lin1080 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'03(\\'03);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1440\n\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'03(\\'04);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1800\\jclisttab\\tx1800\\lin1800 }{\\listlevel\n\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'03(\\'05);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2520\\jclisttab\\tx2520\\lin2520 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'07.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'08.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li3240\\jclisttab\\tx3240\\lin3240 }{\\listname ;}\\listid700712945}{\\list\\listtemplateid-53848358{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\s1\\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\s2\\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\s3\\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\s4\\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\s5\\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\s6\\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\s7\\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\n\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\s8\\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\n\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\s9\\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname \n;}\\listid752163927}{\\list\\listtemplateid2088029282{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f42\\fs20\\fbias0 \\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f39\\fs20\\fbias0 \\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers\n;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\n\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid800729109}{\\list\\listtemplateid-296591990\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s40\\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\n\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\n\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname \n;}\\listid810947713}{\\list\\listtemplateid1567531878{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f42\\fs20\\fbias0 \\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers\n;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\n\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid826823576}{\\list\\listtemplateid2088029282{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid974869818}\n{\\list\\listtemplateid-924022824\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li1797\\lin1797 }\n{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li2517\\lin2517 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li3237\\lin3237 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li3957\\lin3957 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li4677\\lin4677 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li5397\\lin5397 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li6117\\lin6117 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \n\\fi-360\\li6837\\lin6837 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li7557\\lin7557 }{\\listname \n;}\\listid1210149136}{\\list\\listtemplateid-1813845996\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s39\\fi-357\\li2506\n\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\n\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1219436735}{\\list\\listtemplateid280937824\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li1124\\lin1124 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1844\\lin1844 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2564\\lin2564 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li3284\\lin3284 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \n\\fi-360\\li4004\\lin4004 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4724\\lin4724 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5444\\lin5444 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li6164\\lin6164 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6884\\lin6884 }{\\listname ;}\\listid1422722544}{\\list\\listtemplateid303218272\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid612407812\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\cf17\\fbias0 \\s36\\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \n\\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\n\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1559511898}{\\list\\listtemplateid-743794326\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid2033377338\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s35\\fi-357\\li1077\\jclisttab\\tx1080\\lin1077 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\n\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\n\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }\n{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1567649130}{\\list\\listtemplateid-154908222\\listhybrid{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-596080174\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af0 \\ltrch\\fcs0 \\b\\i0\\fbias0 \\s93\\fi-360\\li360\\jclisttab\\tx360\\lin360 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698713\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc2\\leveljcn2\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698715\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-180\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698703\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\leveltemplateid67698713\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc2\\leveljcn2\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698715\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-180\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698703\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698713\\'02\\'07.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc2\\leveljcn2\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698715\\'02\\'08.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-180\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1795057320}{\\list\\listtemplateid-961874242\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-1175557160\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s37\\fi-357\\li1792\\jclisttab\\tx1795\\lin1792 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\n\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\n\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1848404271}\n{\\list\\listtemplateid-1802592190\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid1229593488\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s38\\fi-357\\li2149\n\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\n\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1877695764}{\\list\\listtemplateid1186249844\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid1637229796\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s33\\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\n\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\n\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid2054619191}{\\list\\listtemplateid-235387302\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-1242156798\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li360\\lin360 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698713\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1080\\lin1080 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698715\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li1800\\lin1800 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698703\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2520\\lin2520 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698713\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \n\\fi-360\\li3240\\lin3240 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698715\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li3960\\lin3960 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698703\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li4680\\lin4680 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698713\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5400\\lin5400 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698715\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6120\\lin6120 }{\\listname ;}\\listid2106606675}}{\\*\\listoverridetable{\\listoverride\\listid2054619191\\listoverridecount0\\ls1}\n{\\listoverride\\listid477573462\\listoverridecount0\\ls2}{\\listoverride\\listid1567649130\\listoverridecount0\\ls3}{\\listoverride\\listid1559511898\\listoverridecount0\\ls4}{\\listoverride\\listid1848404271\\listoverridecount0\\ls5}{\\listoverride\\listid1877695764\n\\listoverridecount0\\ls6}{\\listoverride\\listid1219436735\\listoverridecount0\\ls7}{\\listoverride\\listid810947713\\listoverridecount0\\ls8}{\\listoverride\\listid196815738\\listoverridecount0\\ls9}{\\listoverride\\listid398796681\\listoverridecount0\\ls10}\n{\\listoverride\\listid394402059\\listoverridecount0\\ls11}{\\listoverride\\listid752163927\\listoverridecount0\\ls12}{\\listoverride\\listid189493747\\listoverridecount0\\ls13}{\\listoverride\\listid2106606675\\listoverridecount0\\ls14}{\\listoverride\\listid1559511898\n\\listoverridecount0\\ls15}{\\listoverride\\listid1848404271\\listoverridecount0\\ls16}{\\listoverride\\listid1848404271\\listoverridecount0\\ls17}{\\listoverride\\listid1848404271\\listoverridecount0\\ls18}{\\listoverride\\listid1848404271\\listoverridecount0\\ls19}\n{\\listoverride\\listid1848404271\\listoverridecount0\\ls20}{\\listoverride\\listid1848404271\\listoverridecount0\\ls21}{\\listoverride\\listid1848404271\\listoverridecount0\\ls22}{\\listoverride\\listid1848404271\\listoverridecount0\\ls23}{\\listoverride\\listid1848404271\n\\listoverridecount0\\ls24}{\\listoverride\\listid1422722544\\listoverridecount0\\ls25}{\\listoverride\\listid1848404271\\listoverridecount0\\ls26}{\\listoverride\\listid1848404271\\listoverridecount0\\ls27}{\\listoverride\\listid1848404271\\listoverridecount0\\ls28}\n{\\listoverride\\listid1559511898\\listoverridecount0\\ls29}{\\listoverride\\listid1559511898\\listoverridecount0\\ls30}{\\listoverride\\listid1795057320\\listoverridecount0\\ls31}{\\listoverride\\listid1559511898\\listoverridecount0\\ls32}{\\listoverride\\listid700712945\n\\listoverridecount0\\ls33}{\\listoverride\\listid826823576\\listoverridecount0\\ls34}{\\listoverride\\listid630479929\\listoverridecount0\\ls35}{\\listoverride\\listid800729109\\listoverridecount0\\ls36}{\\listoverride\\listid974869818\\listoverridecount0\\ls37}\n{\\listoverride\\listid398796681\\listoverridecount9{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\n\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\\ls38}{\\listoverride\\listid1210149136\n\\listoverridecount0\\ls39}{\\listoverride\\listid752163927\\listoverridecount9{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\n{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\\ls40}\n{\\listoverride\\listid398796681\\listoverridecount9{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\n\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\\ls41}{\\listoverride\\listid752163927\n\\listoverridecount0\\ls42}{\\listoverride\\listid1567649130\\listoverridecount0\\ls43}{\\listoverride\\listid1567649130\\listoverridecount0\\ls44}{\\listoverride\\listid752163927\\listoverridecount0\\ls45}{\\listoverride\\listid1567649130\\listoverridecount0\\ls46}\n{\\listoverride\\listid1567649130\\listoverridecount0\\ls47}}{\\*\\pgptbl {\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}}{\\*\\rsidtbl \\rsid132812\\rsid675178\\rsid1799879\n\\rsid3958498\\rsid4605597\\rsid5720217\\rsid7042433\\rsid7755012\\rsid8343752\\rsid12265033\\rsid12279895\\rsid12678245\\rsid13524579\\rsid13651777\\rsid14051756\\rsid16255017}{\\mmathPr\\mmathFont34\\mbrkBin0\\mbrkBinSub0\\msmallFrac0\\mdispDef1\\mlMargin0\\mrMargin0\n\\mdefJc1\\mwrapIndent1440\\mintLim0\\mnaryLim1}{\\info{\\title English}{\\creatim\\yr2013\\mo7\\dy12\\hr8\\min22}{\\revtim\\yr2014\\mo6\\dy16\\hr16\\min12}{\\version1}{\\edmins0}{\\nofpages3}{\\nofwords1371}{\\nofchars7818}{\\nofcharsws9171}{\\vern57437}}{\\*\\userprops \n{\\propname db_document_id}\\proptype30{\\staticval 22469}{\\propname ContentTypeId}\\proptype30{\\staticval 0x01010022795EB251D4644FBEC12BD5D4B08D7C}}{\\*\\xmlnstbl {\\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\n\\paperw12240\\paperh15840\\margl720\\margr720\\margt720\\margb720\\gutter0\\ltrsect \n\\widowctrl\\ftnbj\\aenddoc\\trackmoves0\\trackformatting1\\donotembedsysfont0\\relyonvml0\\donotembedlingdata0\\grfdocevents0\\validatexml1\\showplaceholdtext0\\ignoremixedcontent0\\saveinvalidxml0\\showxmlerrors1\\noxlattoyen\n\\expshrtn\\noultrlspc\\dntblnsbdb\\nospaceforul\\hyphcaps0\\formshade\\horzdoc\\dgmargin\\dghspace95\\dgvspace180\\dghorigin720\\dgvorigin720\\dghshow2\\dgvshow1\n\\jexpand\\viewkind1\\viewscale100\\pgbrdrhead\\pgbrdrfoot\\splytwnine\\ftnlytwnine\\htmautsp\\nolnhtadjtbl\\useltbaln\\alntblind\\lytcalctblwd\\lyttblrtgr\\lnbrkrule\\nobrkwrptbl\\snaptogridincell\\rempersonalinfo\\allowfieldendsel\n\\wrppunct\\asianbrkrule\\rsidroot4605597\\newtblstyruls\\nogrowautofit\\usenormstyforlist\\noindnmbrts\\felnbrelev\\nocxsptable\\indrlsweleven\\noafcnsttbl\\afelev\\utinl\\hwelev\\spltpgpar\\notcvasp\\notbrkcnstfrctbl\\notvatxbx\\krnprsnet\\cachedcolbal \\nouicompat \\fet0\n{\\*\\wgrffmtfilter 013f}\\nofeaturethrottle1\\ilfomacatclnup12{\\*\\ftnsep \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid1799879 \\chftnsep \n\\par }}{\\*\\ftnsepc \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid1799879 \\chftnsepc \n\\par }}{\\*\\aftnsep \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid1799879 \\chftnsep \n\\par }}{\\*\\aftnsepc \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid1799879 \\chftnsepc \n\\par }}\\ltrpar \\sectd \\ltrsect\\psz1\\linex0\\headery0\\footery0\\endnhere\\sectlinegrid360\\sectdefaultcl\\sftnbj {\\*\\pnseclvl1\\pnucrm\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl2\\pnucltr\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl3\n\\pndec\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl4\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxta )}}{\\*\\pnseclvl5\\pndec\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl6\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}\n{\\*\\pnseclvl7\\pnlcrm\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl8\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl9\\pnlcrm\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}\\pard\\plain \\ltrpar\n\\s42\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs28\\alang1025 \\ltrch\\fcs0 \\b\\fs28\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 MICROSOFT SOFTWARE LICENSE TERMS}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s43\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\brdrb\\brdrs\\brdrw10\\brsp20 \\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs28\\alang1025 \\ltrch\\fcs0 \n\\b\\fs28\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 MICROSOFT \\hich\\af39\\dbch\\af13\\loch\\f39 AZURE MOBILE SDK }{\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s44\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \nThese license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, w\\hich\\af39\\dbch\\af13\\loch\\f39 \nhich includes the media on which you received it, if any. The terms also apply to any Microsoft}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s34\\ql \\fi-360\\li360\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 updates,}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 supplements,}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 Internet-based services, and}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 support services}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s44\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \nfor this software, unless other terms accompany those items. If so, those terms appl\\hich\\af39\\dbch\\af13\\loch\\f39 y.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 By using the software, you accept these terms. If you do not accept them, do not use the software.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s61\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\brdrt\\brdrs\\brdrw10\\brsp20 \\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid14051756 \\hich\\af39\\dbch\\af11\\loch\\f39 If you comply with these license terms, you have the perpetual rights below.}{\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 1.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 INSTALLATION AND USE RIGHTS. }{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 a.\\tab}}\\pard\\plain \\ltrpar\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Installation and Use.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs57\\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  You may install and\n\\hich\\af39\\dbch\\af13\\loch\\f39  use any number of copies of the software on your devices.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs57\\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 b.\\tab}}\\pard \\ltrpar\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Third Party Programs.}{\\rtlch\\fcs1 \n\\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs57\\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  The software may include third party programs that Microsoft, not the third party, licenses to you under this agreement. Notices, if any, for\n\\hich\\af39\\dbch\\af13\\loch\\f39  the third party program are included for your information only.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 2.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 a.\\tab}}\\pard\\plain \\ltrpar\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Distributable Code.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs57\\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  The software \n\\hich\\af39\\dbch\\af13\\loch\\f39 contains code that you are permitted to distribute in programs you develop if you comply with the terms below.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s49 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 i.\\tab}}\\pard\\plain \\ltrpar\\s49\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1080\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Right to Use and Distribute.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\cs58\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \\hich\\f39 \n The code and text files listed below are \\'93\\loch\\f39 \\hich\\f39 Distributable Code.\\'94}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f3\\fs19\\cf17\\lang9\\langfe1033\\langnp9\\insrsid132812\\charrsid132812 \\loch\\af3\\dbch\\af11\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s36\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0\\pararsid12279895 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39 \\ltrch\\fcs0 \\ul\\lang9\\langfe1033\\langnp9\\insrsid132812\\charrsid132812 \\hich\\af39\\dbch\\af11\\loch\\f39 Redistributable }{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\ul\\lang9\\langfe1033\\langnp9\\insrsid12265033\\charrsid132812 \\hich\\af39\\dbch\\af11\\loch\\f39 Files}{\n\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid12265033\\charrsid132812 \\hich\\af39\\dbch\\af11\\loch\\f39 . You may copy and distribu\\hich\\af39\\dbch\\af11\\loch\\f39 te the object code form of }{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \n\\lang9\\langfe1033\\langnp9\\insrsid132812 .}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid13651777\\charrsid132812 \\hich\\af39\\dbch\\af11\\loch\\f39 dll}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid7042433 \n\\hich\\af39\\dbch\\af11\\loch\\f39 , .jar and iOS framework}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid12279895 \\hich\\af39\\dbch\\af11\\loch\\f39  and static library }{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid132812 \n\\hich\\af39\\dbch\\af11\\loch\\f39 files}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid12265033\\charrsid132812 .}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid12279895\\charrsid12279895 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s50 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s50\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\ul\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Third Party Distribution}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\ulnone\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\ulnone\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s49 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 ii.\\tab}}\\pard\\plain \\ltrpar\\s49\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1077\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Distribution Requirements.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\cs58\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n For any Distributable Code you distribute, you must}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s36\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 add significant primary functionality to it in your programs;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 require distributors and external end users to agree to terms that protect it at least as much as this agreemen\\hich\\af39\\dbch\\af13\\loch\\f39 t; }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 display your valid copyright notice on your programs; and}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\\hich\\f39 \\rquote \\loch\\f39  fees, related to the distribution or use of your programs.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s49 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 iii.\\tab}}\\pard\\plain \\ltrpar\\s49\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1077\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Distribution Restrictions.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\cs58\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  You may not}{\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s36\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 alter any copyright, trademark or patent notice in the Distributable Code;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 use Microsoft\\hich\\f39 \\rquote \\loch\\f39 s trademarks in your programs\\hich\\f39 \\rquote \\loch\\f39  names or in a way that suggests your programs come from or are endorsed by Microsoft;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756\\charrsid12265033 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid14051756\\charrsid12265033 \\hich\\af39\\dbch\\af13\\loch\\f39 distribute Distributable Code to run on a platform other than the Microsoft }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid3958498\\charrsid12265033 \n\\hich\\af39\\dbch\\af13\\loch\\f39 Azure }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756\\charrsid12265033 \\hich\\af39\\dbch\\af13\\loch\\f39 platform}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 ;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 include Distributable Code in malicious, deceptive or unlawful programs; or}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 modify or distribute the source code of any Distributable Code so that any part of it \\hich\\af39\\dbch\\af13\\loch\\f39 \nbecomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s37 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s37\\ql \\fi-357\\li1792\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1795\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls5\\adjustright\\rin0\\lin1792\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 the code be disclosed or distributed in source code form; or}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s37 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 others have the right to modify it.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 3.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 SCOPE OF LIC\\hich\\af39\\dbch\\af13\\loch\\f39 ENSE.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly pe\n\\hich\\af39\\dbch\\af13\\loch\\f39 rmitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \n\\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s34\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 work around any technical limitations in the software;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 reverse engineer, decompile or disa\\hich\\af39\\dbch\\af13\\loch\\f39 ssemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 publish the software for others to copy;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 rent, lease or lend the software; or}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 use the software for commercial software hosting service\\hich\\af39\\dbch\\af13\\loch\\f39 s.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 4.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 BACKUP COPY.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n You may make one backup copy of the software. You may use it only to reinstall the software.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 5.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 DOCUMENTATION.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  Any per\\hich\\af39\\dbch\\af13\\loch\\f39 \nson that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 6.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 TRANSFER TO A THIRD PARTY.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  The first user of the software may transfer it and this agreement directly to a third par\n\\hich\\af39\\dbch\\af13\\loch\\f39 \nty. Before the transfer, that party must agree that this agreement applies to the transfer and use of the software. The first user must uninstall the software before transferring it separately from the device. The first user may not retain any copies.}{\n\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 7.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 E\\hich\\af39\\dbch\\af13\\loch\\f39 XPORT RESTRICTIONS.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users\n\\hich\\af39\\dbch\\af13\\loch\\f39  and end use. For additional information, see }{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs73\\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 www.microsoft.com/exporting}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \n\\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 .}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs73\\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 8.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 SUPPORT SERVICES. }{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \\hich\\f39 Because this software is \\'93\\loch\\f39 \\hich\\f39 as is,\\'94\\loch\\f39 \n we may not provide support services for it.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 9.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 ENTIRE AGREEMENT.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  This agreement, and the terms for supplements, updates, Inter\\hich\\af39\\dbch\\af13\\loch\\f39 \nnet-based services and support services that you use, are the entire agreement for the software and support services.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 10.\\tab}}\\pard \\ltrpar\\s1\\ql \\fi-360\\li360\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin360\\itap0 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 APPLICABLE LAW.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 a.\\tab}}\\pard\\plain \\ltrpar\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 United States.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n If you acquired the software in the United States, Washington state law governs the interpretation o\\hich\\af39\\dbch\\af13\\loch\\f39 \nf this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.}\n{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 b.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 Outside the United States.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  If you acquired the software in any other country, the laws of that country apply.}{\n\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 11.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 LEGAL EFFECT.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rig\\hich\\af39\\dbch\\af13\\loch\\f39 \nhts with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \n\\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 12.\\tab}}\\pard \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \\hich\\f39 \nDISCLAIMER OF WARRANTY. The software is licensed \\'93\\loch\\f39 as-is.\\loch\\af39\\dbch\\af13\\hich\\f39 \\'94\\loch\\f39 \n You bear the risk of using it. Microsoft gives no express warranties, guarantees or conditions. You may have additional consumer rights or statutory guarantees under your local laws which this agreement cannot change. To the extent permitted under your \n\\hich\\af39\\dbch\\af13\\loch\\f39 l\\hich\\af39\\dbch\\af13\\loch\\f39 ocal laws, Microsoft excludes the implied warranties of merchantability, fitness for a particular purpose and non-infringement.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s24\\ql \\li357\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 FOR AUSTRALIA \\hich\\f39 \\endash \\loch\\f39 \n You have statutory guarantees under the Australian Consumer Law and nothing in these terms is intended to affect\\hich\\af39\\dbch\\af13\\loch\\f39  those rights.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 13.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid14051756 \\hich\\af39\\dbch\\af11\\loch\\f39 \n. You can recover from Microsoft and its suppliers only direct damages up to U.S. $5.00. You cannot recover any other damages, including consequential, lost profits, special, ind\\hich\\af39\\dbch\\af11\\loch\\f39 irect or incidental damages.}{\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s24\\ql \\li357\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 This limitation applies to}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s34\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 claims for breach of contract, breach of warranty, guarantee or con\\hich\\af39\\dbch\\af13\\loch\\f39 dition, strict liability, negligence, or other tort to the extent permitted by applicable law.}{\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\ql \\li360\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \nIt also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because \\hich\\af39\\dbch\\af13\\loch\\f39 \nyour country may not allow the exclusion or limitation of incidental, consequential or other damages.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s79\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid132812 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af13\\loch\\f39 \nPlease note: As this software is distributed in Quebec, Canada, these license terms are provided below in French.\n\\par }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\lang1036\\langfe1033\\dbch\\af13\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af13\\loch\\f39 Remarque\\~\\hich\\f39 : Ce logiciel \\'e9\\loch\\f39 \\hich\\f39 tant distribu\\'e9\\loch\\f39  a\n\\hich\\af39\\dbch\\af13\\loch\\f39 \\hich\\f39 u Qu\\'e9\\loch\\f39 \\hich\\f39 bec, Canada, les termes de cette licence sont fournis ci-dessous en fran\\'e7\\loch\\f39 ais.\n\\par }\\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid132812 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 EXON\\'c9\\loch\\f39 \nRATION DE GARANTIE}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 . Le logiciel vis\\'e9\\loch\\f39 \\hich\\f39  par une licence est offert \\'ab\\loch\\f39 \n\\hich\\f39  tel quel \\'bb\\loch\\f39 \\hich\\f39 . Toute utilisation de ce logiciel est \\'e0\\loch\\f39 \\hich\\f39  votre seule risque et p\\'e9\\loch\\f39 ril. Microsoft n\\hich\\f39 \\rquote \\loch\\f39 accorde au\\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 \ncune autre garantie expresse. Vous pouvez b\\'e9\\loch\\f39 \\hich\\f39 n\\'e9\\loch\\f39 \\hich\\f39 \nficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\\'e9\\loch\\f39  ma\\hich\\af39\\dbch\\af11\\loch\\f39 r\n\\hich\\af39\\dbch\\af11\\loch\\f39 chande, d\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 ad\\'e9\\loch\\f39 \\hich\\f39 quation \\'e0\\loch\\f39  un usage particulier et d\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 absence de contrefa\\'e7\\loch\\f39 on sont exclues.\n\\par }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 LIMITATION DES DOMMAGES-INT\\'c9\\loch\\f39 \\hich\\f39 R\\'ca\\loch\\f39 \\hich\\f39 \nTS ET EXCLUSION DE RESPONSABILIT\\'c9\\loch\\f39  POUR LES DOMMAGES}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \n. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dom\\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 mages directs uniquement \\'e0\\loch\\f39 \\hich\\f39  hauteur de 5,00 $ US. Vous ne pouvez pr\\'e9\\loch\\f39 \\hich\\f39 tendre \\'e0\n\\loch\\f39 \\hich\\f39  aucune indemnisation pour les autres dommages, y compris les dommages sp\\'e9\\loch\\f39 \\hich\\f39 ciaux, indirects ou accessoires et pertes de b\\'e9\\loch\\f39 \\hich\\f39 n\\'e9\\loch\\f39 fices.\n\\par \\hich\\af39\\dbch\\af11\\loch\\f39 Cette limitation concerne :\n\\par \\bullet \\tab \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 tout ce qui est reli\\'e9\\hich\\af39\\dbch\\af11\\loch\\f39  au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers ; et\n\\par \\bullet \\tab \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 les r\\'e9\\loch\\f39 \\hich\\f39 clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\\'e9\\loch\\f39 \\hich\\f39  stricte, de n\\'e9\\loch\\f39 gligence ou\n\\hich\\af39\\dbch\\af11\\loch\\f39  d\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 une autre faute dans la limite autoris\\'e9\\loch\\f39 e par la loi en vigueur.\n\\par \\hich\\af39\\dbch\\af11\\loch\\f39 Elle s\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 applique \\'e9\\loch\\f39 \\hich\\f39 galement, m\\'ea\\loch\\f39 \\hich\\f39 me si Microsoft connaissait ou devrait conna\\'ee\\loch\\f39 tre l\\hich\\f39 \\rquote \\'e9\\loch\\f39 \\hich\\f39 \nventualit\\'e9\\loch\\f39  d\\hich\\f39 \\rquote \\loch\\f39 un tel dommage. Si votre pays n\\hich\\f39 \\rquote \\loch\\f39 autorise pas l\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 exclusion ou la limitation de responsabilit\\'e9\\hich\\af39\\dbch\\af11\\loch\\f39 \n pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l\\hich\\f39 \\rquote \\loch\\f39 exclusion ci-dessus ne s\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 appliquera pas \\'e0\\loch\\f39 \\hich\\f39  votre \\'e9\n\\loch\\f39 gard.\n\\par }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 EFFET JURIDIQUE}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 . Le pr\\'e9\\loch\\f39 \\hich\\f39 sent contrat d\\'e9\\loch\\f39 crit certains droits juridiques. Vous pourriez avoir \\hich\\af39\\dbch\\af11\\loch\\f39 d\n\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 autres droits pr\\'e9\\loch\\f39 \\hich\\f39 vus par les lois de votre pays. Le pr\\'e9\\loch\\f39 \\hich\\f39 sent contrat ne modifie pas les droits que vous conf\\'e8\\loch\\f39 \nrent les lois de votre pays si celles-ci ne le permettent pas.\n\\par }\\pard \\ltrpar\\ql \\li360\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin360\\itap0 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid132812 \n\\par }{\\*\\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a\n9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad\n5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6\nb01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0\n0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6\na7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f\nc7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512\n0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462\na1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865\n6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b\n4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b\n4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f\n7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87\n615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad\n79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b\n5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab\n999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9\n699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586\n8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6\n0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f\n9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be\n15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979\n3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d\n32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a\nf074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86\ne877f0034e16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb\n44f95d843b5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a\n6409fb44d08741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c\n3d9058edf2c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db0256\n5e85f3b9660d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276\nb9f7dec44b7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8\nc33585b5fb9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e\n51440ca2e0088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95\nb21be5ceaf8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff\n6dce591a26ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec6\n9ffb9e65d028d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239\nb75a5bb1e6345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a449\n59d366ad93b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e8\n2db8df9f30254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468\n656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4\n350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d2624\n52282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe5141\n73d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c020000130000000000000000\n0000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000\n000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c0000000000000000000000000019\n0200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b00001600000000\n000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b01000027\n00000000000000000000000000a00900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d0100009b0a00000000}\n{\\*\\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d\n617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169\n6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363\n656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}\n{\\*\\latentstyles\\lsdstimax371\\lsdlockeddef0\\lsdsemihiddendef0\\lsdunhideuseddef0\\lsdqformatdef0\\lsdprioritydef99{\\lsdlockedexcept \\lsdqformat1 \\lsdpriority0 \\lsdlocked0 Normal;\\lsdqformat1 \\lsdlocked0 heading 1;\\lsdqformat1 \\lsdlocked0 heading 2;\n\\lsdqformat1 \\lsdlocked0 heading 3;\\lsdqformat1 \\lsdlocked0 heading 4;\\lsdqformat1 \\lsdlocked0 heading 5;\\lsdqformat1 \\lsdlocked0 heading 6;\\lsdqformat1 \\lsdlocked0 heading 7;\\lsdqformat1 \\lsdlocked0 heading 8;\\lsdqformat1 \\lsdlocked0 heading 9;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 1;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 4;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 6;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 7;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 8;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 9;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 1;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 6;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 7;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 8;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 9;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Normal Indent;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 footnote text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 annotation text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 header;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 footer;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index heading;\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority35 \\lsdlocked0 caption;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 table of figures;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 envelope address;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 envelope return;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 footnote reference;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 annotation reference;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 line number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 page number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 endnote reference;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 endnote text;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 table of authorities;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 macro;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 toa heading;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 5;\\lsdqformat1 \\lsdpriority10 \\lsdlocked0 Title;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Closing;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Signature;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority1 \\lsdlocked0 Default Paragraph Font;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text Indent;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 4;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Message Header;\\lsdqformat1 \\lsdpriority11 \\lsdlocked0 Subtitle;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Salutation;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Date;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text First Indent;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text First Indent 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Note Heading;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text Indent 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text Indent 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Block Text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Hyperlink;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 FollowedHyperlink;\\lsdqformat1 \\lsdpriority22 \\lsdlocked0 Strong;\n\\lsdqformat1 \\lsdpriority20 \\lsdlocked0 Emphasis;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Document Map;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Plain Text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 E-mail Signature;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Top of Form;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Bottom of Form;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Normal (Web);\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Acronym;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Address;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Cite;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Code;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Definition;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Keyboard;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Preformatted;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Sample;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Typewriter;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Variable;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 annotation subject;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 No List;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Outline List 1;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Outline List 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Outline List 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Balloon Text;\\lsdpriority59 \\lsdlocked0 Table Grid;\n\\lsdsemihidden1 \\lsdlocked0 Placeholder Text;\\lsdqformat1 \\lsdpriority1 \\lsdlocked0 No Spacing;\\lsdpriority60 \\lsdlocked0 Light Shading;\\lsdpriority61 \\lsdlocked0 Light List;\\lsdpriority62 \\lsdlocked0 Light Grid;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1;\\lsdpriority64 \\lsdlocked0 Medium Shading 2;\\lsdpriority65 \\lsdlocked0 Medium List 1;\\lsdpriority66 \\lsdlocked0 Medium List 2;\\lsdpriority67 \\lsdlocked0 Medium Grid 1;\\lsdpriority68 \\lsdlocked0 Medium Grid 2;\n\\lsdpriority69 \\lsdlocked0 Medium Grid 3;\\lsdpriority70 \\lsdlocked0 Dark List;\\lsdpriority71 \\lsdlocked0 Colorful Shading;\\lsdpriority72 \\lsdlocked0 Colorful List;\\lsdpriority73 \\lsdlocked0 Colorful Grid;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 1;\n\\lsdpriority61 \\lsdlocked0 Light List Accent 1;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 1;\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 1;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 1;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 1;\n\\lsdsemihidden1 \\lsdlocked0 Revision;\\lsdqformat1 \\lsdpriority34 \\lsdlocked0 List Paragraph;\\lsdqformat1 \\lsdpriority29 \\lsdlocked0 Quote;\\lsdqformat1 \\lsdpriority30 \\lsdlocked0 Intense Quote;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 1;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 1;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 1;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 1;\\lsdpriority70 \\lsdlocked0 Dark List Accent 1;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 1;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 1;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 1;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 2;\\lsdpriority61 \\lsdlocked0 Light List Accent 2;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 2;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 2;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 2;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 2;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 2;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 2;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 2;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 2;\\lsdpriority70 \\lsdlocked0 Dark List Accent 2;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 2;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 2;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 2;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 3;\\lsdpriority61 \\lsdlocked0 Light List Accent 3;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 3;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 3;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 3;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 3;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 3;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 3;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 3;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 3;\\lsdpriority70 \\lsdlocked0 Dark List Accent 3;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 3;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 3;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 3;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 4;\\lsdpriority61 \\lsdlocked0 Light List Accent 4;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 4;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 4;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 4;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 4;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 4;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 4;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 4;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 4;\\lsdpriority70 \\lsdlocked0 Dark List Accent 4;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 4;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 4;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 4;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 5;\\lsdpriority61 \\lsdlocked0 Light List Accent 5;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 5;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 5;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 5;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 5;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 5;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 5;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 5;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 5;\\lsdpriority70 \\lsdlocked0 Dark List Accent 5;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 5;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 5;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 5;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 6;\\lsdpriority61 \\lsdlocked0 Light List Accent 6;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 6;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 6;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 6;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 6;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 6;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 6;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 6;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 6;\\lsdpriority70 \\lsdlocked0 Dark List Accent 6;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 6;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 6;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 6;\\lsdqformat1 \\lsdpriority19 \\lsdlocked0 Subtle Emphasis;\\lsdqformat1 \\lsdpriority21 \\lsdlocked0 Intense Emphasis;\n\\lsdqformat1 \\lsdpriority31 \\lsdlocked0 Subtle Reference;\\lsdqformat1 \\lsdpriority32 \\lsdlocked0 Intense Reference;\\lsdqformat1 \\lsdpriority33 \\lsdlocked0 Book Title;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority37 \\lsdlocked0 Bibliography;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority39 \\lsdlocked0 TOC Heading;\\lsdpriority41 \\lsdlocked0 Plain Table 1;\\lsdpriority42 \\lsdlocked0 Plain Table 2;\\lsdpriority43 \\lsdlocked0 Plain Table 3;\\lsdpriority44 \\lsdlocked0 Plain Table 4;\n\\lsdpriority45 \\lsdlocked0 Plain Table 5;\\lsdpriority40 \\lsdlocked0 Grid Table Light;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light;\\lsdpriority47 \\lsdlocked0 Grid Table 2;\\lsdpriority48 \\lsdlocked0 Grid Table 3;\\lsdpriority49 \\lsdlocked0 Grid Table 4;\n\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 1;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 1;\n\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 1;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 1;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 1;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 1;\n\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 1;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 2;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 2;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 2;\n\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 2;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 2;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 2;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 2;\n\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 3;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 3;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 3;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 3;\n\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 3;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 3;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 3;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 4;\n\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 4;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 4;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 4;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 4;\n\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 4;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 4;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 5;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 5;\n\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 5;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 5;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 5;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 5;\n\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 5;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 6;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 6;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 6;\n\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 6;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 6;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 6;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 6;\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light;\\lsdpriority47 \\lsdlocked0 List Table 2;\\lsdpriority48 \\lsdlocked0 List Table 3;\\lsdpriority49 \\lsdlocked0 List Table 4;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark;\n\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 1;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 1;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 1;\n\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 1;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 1;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 1;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 1;\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 2;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 2;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 2;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 2;\n\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 2;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 2;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 2;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 3;\n\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 3;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 3;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 3;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 3;\n\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 3;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 3;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 4;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 4;\n\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 4;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 4;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 4;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 4;\n\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 4;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 5;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 5;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 5;\n\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 5;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 5;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 5;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 5;\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 6;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 6;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 6;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 6;\n\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 6;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 6;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 6;}}{\\*\\datastore 010500000200000018000000\n4d73786d6c322e534158584d4c5265616465722e362e30000000000000000000003a0000\nd0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000002000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nfffffffffffffffffdffffff0a000000120000000400000005000000060000000700000008000000090000000b0000000e0000000c0000000d0000000f0000001100000010000000130000001a000000feffffff1400000015000000160000001700000018000000190000001b000000fefffffffeffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff010000000c6ad98892f1d411a65f0040963251e5000000000000000000000000409a\na067b889cf010300000040270000000000004d0073006f004400610074006100530074006f0072006500000000000000000000000000000000000000000000000000000000000000000000000000000000001a000101ffffffffffffffff050000000000000000000000000000000000000000000000409aa067b889cf01\n409aa067b889cf0100000000000000000000000032003500cd00dd00c10058004600c3005900550053005400de004900db00db00c300d900310034004700d0003d003d000000000000000000000000000000000032000101ffffffffffffffff030000000000000000000000000000000000000000000000409aa067b889\ncf01409aa067b889cf010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff04000000ffffffff000000000000000000000000000000000000000000000000\n00000000000000000000000000000000ad0d0000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a00\n00001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000feffffff3800000039000000\n3a0000003b0000003c0000003d0000003e0000003f0000004000000041000000420000004300000044000000feffffff460000004700000048000000feffffff4a0000004b0000004c0000004d0000004e000000feffffff500000005100000052000000feffffff5400000055000000560000005700000058000000feff\nffff5a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000\n790000007a0000007b0000007c0000007d0000007e0000007f000000800000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d38223f3e3c63743a636f6e74656e7454797065536368656d612063743a5f3d2222206d613a5f3d2222206d613a636f6e74656e74547970654e616d65\n3d22446f63756d656e7422206d613a636f6e74656e745479706549443d223078303130313030323237393545423235314434363434464245433132424435443442303844374322206d613a636f6e74656e745479706556657273696f6e3d223022206d613a636f6e74656e74547970654465736372697074696f6e3d2243\n72656174652061206e657720646f63756d656e742e22206d613a636f6e74656e745479706553636f70653d2222206d613a76657273696f6e49443d2264636264643635633032373738363565303939666233646330353635336235372220786d6c6e733a63743d22687474703a2f2f736368656d61732e6d6963726f736f\n66742e636f6d2f6f66666963652f323030362f6d657461646174612f636f6e74656e74547970652220786d6c6e733a6d613d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f6d657461646174612f70726f706572746965732f6d65746141747472696275746573\n223e0d0a3c7873643a736368656d61207461726765744e616d6573706163653d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f6d657461646174612f70726f7065727469657322206d613a726f6f743d227472756522206d613a6669656c647349443d22346165\n62323063306533343432363733616637656531303738363435383736342220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a703d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f\n6d657461646174612f70726f70657274696573223e0d0a3c7873643a656c656d656e74206e616d653d2270726f70657274696573223e0d0a3c7873643a636f6d706c6578547970653e0d0a3c7873643a73657175656e63653e0d0a3c7873643a656c656d656e74206e616d653d22646f63756d656e744d616e6167656d65\n6e74223e0d0a3c7873643a636f6d706c6578547970653e0d0a3c7873643a616c6c2f3e0d0a3c2f7873643a636f6d706c6578547970653e0d0a3c2f7873643a656c656d656e743e0d0a3c2f7873643a73657175656e63653e0d0a3c2f7873643a636f6d706c6578547970653e0d0a3c2f7873643a656c656d656e743e0d0a\n3c2f7873643a736368656d613e0d0a3c7873643a736368656d61207461726765744e616d6573706163653d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f7061636b6167652f323030362f6d657461646174612f636f72652d70726f706572746965732220656c656d656e74466f\n726d44656661756c743d227175616c69666965642220617474726962757465466f726d44656661756c743d22756e7175616c69666965642220626c6f636b44656661756c743d2223616c6c2220786d6c6e733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f7061636b6167652f\n323030362f6d657461646174612f636f72652d70726f706572746965732220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612d696e7374616e\n63652220786d6c6e733a64633d22687474703a2f2f7075726c2e6f72672f64632f656c656d656e74732f312e312f2220786d6c6e733a64637465726d733d22687474703a2f2f7075726c2e6f72672f64632f7465726d732f2220786d6c6e733a6f646f633d22687474703a2f2f736368656d61732e6d6963726f736f6674\n2e636f6d2f6f66666963652f696e7465726e616c2f323030352f696e7465726e616c446f63756d656e746174696f6e223e0d0a3c7873643a696d706f7274206e616d6573706163653d22687474703a2f2f7075726c2e6f72672f64632f656c656d656e74732f312e312f2220736368656d614c6f636174696f6e3d226874\n74703a2f2f6475626c696e636f72652e6f72672f736368656d61732f786d6c732f7164632f323030332f30342f30322f64632e787364222f3e0d0a3c7873643a696d706f7274206e616d6573706163653d22687474703a2f2f7075726c2e6f72672f64632f7465726d732f2220736368656d614c6f636174696f6e3d2268\n7474703a2f2f6475626c696e636f72652e6f72672f736368656d61732f786d6c732f7164632f323030332f30342f30322f64637465726d732e787364222f3e0d0a3c7873643a656c656d656e74206e616d653d22636f726550726f706572746965732220747970653d2243545f636f726550726f70657274696573222f3e\n0d0a3c7873643a636f6d706c657854797065206e616d653d2243545f636f726550726f70657274696573223e0d0a3c7873643a616c6c3e0d0a3c7873643a656c656d656e74207265663d2264633a63726561746f7222206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c65\n6d656e74207265663d2264637465726d733a6372656174656422206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c656d656e74207265663d2264633a6964656e74696669657222206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c787364\n3a656c656d656e74206e616d653d22636f6e74656e745479706522206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e6722206d613a696e6465783d223022206d613a646973706c61794e616d653d22436f6e74656e74205479706522206d613a726561644f6e\n6c793d2274727565222f3e0d0a3c7873643a656c656d656e74207265663d2264633a7469746c6522206d696e4f63637572733d223022206d61784f63637572733d223122206d613a696e6465783d223422206d613a646973706c61794e616d653d225469746c65222f3e0d0a3c7873643a656c656d656e74207265663d22\n64633a7375626a65637422206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c656d656e74207265663d2264633a6465736372697074696f6e22206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c656d656e74206e616d653d\n226b6579776f72647322206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67222f3e0d0a3c7873643a656c656d656e74207265663d2264633a6c616e677561676522206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c787364\n3a656c656d656e74206e616d653d2263617465676f727922206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67222f3e0d0a3c7873643a656c656d656e74206e616d653d2276657273696f6e22206d696e4f63637572733d223022206d61784f63637572733d\n22312220747970653d227873643a737472696e67222f3e0d0a3c7873643a656c656d656e74206e616d653d227265766973696f6e22206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67223e0d0a3c7873643a616e6e6f746174696f6e3e0d0a3c7873643a64\n6f63756d656e746174696f6e3e0d0a202020202020202020202020202020202020202020202020546869732076616c756520696e6469636174657320746865206e756d626572206f66207361766573206f72207265766973696f6e732e20546865206170706c69636174696f6e20697320726573706f6e7369626c652066\n6f72207570646174696e6720746869732076616c75652061667465722065616368207265766973696f6e2e0d0a20202020202020202020202020202020202020203c2f7873643a646f63756d656e746174696f6e3e0d0a3c2f7873643a616e6e6f746174696f6e3e0d0a3c2f7873643a656c656d656e743e0d0a3c787364\n3a656c656d656e74206e616d653d226c6173744d6f646966696564427922206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67222f3e0d0a3c7873643a656c656d656e74207265663d2264637465726d733a6d6f64696669656422206d696e4f63637572733d\n223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c656d656e74206e616d653d226c6173745072696e74656422206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a6461746554696d65222f3e0d0a3c7873643a656c656d656e74206e616d653d22636f6e\n74656e7453746174757322206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67222f3e0d0a3c2f7873643a616c6c3e0d0a3c2f7873643a636f6d706c6578547970653e0d0a3c2f7873643a736368656d613e0d0a3c2f63743a636f6e74656e74547970655363\n68656d613e000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a64617461500072006f007000650072007400690065007300000000000000000000000000000000000000\n000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000370000006d030000000000004100d300cb00470056003200ce00dd00c0004500de00df004c00d100d300d0004e005800\ndd00ce004e00c0003d003d000000000000000000000000000000000032000101020000000b000000060000000000000000000000000000000000000000000000409aa067b889cf01409aa067b889cf010000000000000000000000004900740065006d000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000a000201ffffffff07000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000045000000d800000000000000500072006f007000650072007400690065007300000000000000000000000000\n000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000049000000550100000000000073746f72654974656d2064733a6974656d49443d227b3835374446423731\n2d363337312d343436312d393346382d3845464238463936444531427d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c64733a73\n6368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f6d657461646174612f636f6e74656e7454797065222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66\n742e636f6d2f6f66666963652f323030362f6d657461646174612f70726f706572746965732f6d65746141747472696275746573222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222f3e3c64733a736368656d6152656620\n64733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f6d657461646174612f70726f70657274696573222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f7267\n2f7061636b6167652f323030362f6d657461646174612f636f72652d70726f70657274696573222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f7075726c2e6f72672f64632f656c656d656e74732f312e312f222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f\n2f7075726c2e6f72672f64632f7465726d732f222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f696e7465726e616c2f323030352f696e7465726e616c446f63756d656e746174696f6e222f3e3c2f64733a736368\n656d61526566733e3c2f64733a6461746173746f72654974656d3e000000000000000000000000000000000000003c623a536f75726365732053656c65637465645374796c653d225c4150412e58534c22205374796c654e616d653d224150412220786d6c6e733a623d22687474703a2f2f736368656d61732e6f70656e\n786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f6772617068792220786d6c6e733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879223e3c2f\n623a536f75726365733e000000000000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d206473\n3a6974656d49443d227b35354336334130332d424443422d344638302d424632462d3143463033353746364533367d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64\n733a736368656d61526566733e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879222f3e3c2f64733a736368656d61526566733e3c2f64733a64\n61746173746f72654974656d3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d3822207374616e64616c6f6e653d22796573223f3e3c44696374696f6e614700cf00cd00\n4600c80054005800d300da00d400da003100d700c1005800ce00da004d004700d800c80051003d003d000000000000000000000000000000000032000100ffffffffffffffff090000000000000000000000000000000000000000000000409aa067b889cf01409aa067b889cf0100000000000000000000000049007400\n65006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff0a000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000004f000000c1000000000000005000\n72006f007000650072007400690065007300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000530000005401000000000000\nc900c70047003500c400c90055004a0058005500470042004c004600db0046004b00c5005000c4005600d0003d003d000000000000000000000000000000000032000101080000000e0000000c0000000000000000000000000000000000000000000000409aa067b889cf01409aa067b889cf0100000000000000000000\n00007279205361766564427956657273696f6e3d22332e362e31382e3022204d696e696d756d56657273696f6e3d22332e362e342e302220786d6c6e733d22687474703a2f2f736368656d61732e627573696e6573732d696e746567726974792e636f6d2f6465616c6275696c6465722f323030362f64696374696f6e61\n7279222f3e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64\n733a6461746173746f72654974656d2064733a6974656d49443d227b41313435464231412d463333352d344545422d394244452d3135454545384331423841317d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f\n323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e627573696e6573732d696e746567726974792e636f6d2f6465616c6275696c6465722f323030362f64696374696f6e617279222f3e3c2f64733a\n736368656d61526566733e3c2f64733a6461746173746f72654974656d3e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d3822207374616e64616c6f6e653d22796573\n223f3e3c53657373696f6e20786d6c6e733d22687474703a2f2f736368656d61732e627573696e6573732d696e746567726974792e636f6d2f6465616c6275696c6465722f323030362f616e7377657273223e3c5661726961626c65204e616d653d226d73636f6d223e3c56616c75653e66616c73653c2f56616c75653e\n3c2f5661726961626c653e3c5661726961626c65204e616d653d2266696c6574797065223e3c56616c75653e2e7274663c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226c616e6775616765616c6c223e3c56616c75653e456e676c6973683c2f56616c75653e3c2f566172696162\n6c653e3c5661726961626c65204e616d653d225f5f6576656e7474617267657422204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c7365222f3e3c5661726961626c65204e616d653d225f5f6576656e74617267756d656e7422204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c\n7365222f3e3c5661726961626c65204e616d4900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff0d000000ffffffff00000000000000000000000000000000000000000000000000000000\n000000000000000059000000e70c000000000000500072006f007000650072007400690065007300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000\n000000000000000000008d0000005101000000000000d600cb003100db0030005700d000cb00c400d400da00d300dc00dd004900350059004400db0046004300d0003d003d000000000000000000000000000000000032000100ffffffffffffffff0f0000000000000000000000000000000000000000000000409aa067\nb889cf01409aa067b889cf010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff10000000ffffffff00000000000000000000000000000000000000000000\n000000000000000000000000000093000000db000000000000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c000000feffffff8e0000008f000000900000009100000092000000feffffff940000009500000096000000feffffff9800000099000000\n9a0000009b0000009c000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff653d225f5f72657175657374646967657374222052656c6576616e743d2266616c7365223e3c56616c75653e307832413132373530313835344436453732354235383634334143363432343044324330453738303532304133453636\n434335343433424146394143413637333635323134443445323036394639304346463532463630354238333845433844353332353237344143464233453336363734463338324439434344353144414336302c3234204a756e20323031332031363a30353a3130202d303030303c2f56616c75653e3c2f5661726961626c\n653e3c5661726961626c65204e616d653d225f5f6576656e7476616c69646174696f6e222052656c6576616e743d2266616c7365223e3c56616c75653e2f77455741674b4f3239697043414c623449756d444c2b75437032397970624e71637a6d5230493767414e52424e67333c2f56616c75653e3c2f5661726961626c\n653e3c5661726961626c65204e616d653d2263746c303024706c616365686f6c6465726d61696e24686663657370636f6e74726163747265666572656e6365222052656c6576616e743d2266616c7365223e3c56616c75653e323031332d4d41494e422d3030303636303c2f56616c75653e3c2f5661726961626c653e3c\n5661726961626c65204e616d653d226c61756e6368646976616374696f6e22204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c7365222f3e3c5661726961626c65204e616d653d225f5f737064756d6d79746578743122204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c736522\n2f3e3c5661726961626c65204e616d653d225f5f737064756d6d79746578743222204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c7365222f3e3c5661726961626c65204e616d653d2263616e616461617661696c223e3c56616c75653e747275653c2f56616c75653e3c2f5661726961626c653e3c\n5661726961626c65204e616d653d2263616e6164616672656e6368223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2266696c65666f726d6174223e3c56616c75653e747275653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c\n65204e616d653d22736f66747761726574797065223e3c56616c75653e467265652c205374616e64616c6f6e6520536f6674776172653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2270726f647563746e616d65223e3c56616c75653e57696e646f777320417a757265204d6f62\n696c652053444b3c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226e756d6265726f66636f70696573223e3c56616c75653e416e79206e756d626572206f6620636f706965733c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2270726f647563\n7476657273696f6e223e3c56616c75653e4e6f6e653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2276657273696f6e76697369626c65223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226368616e6e656c\n223e3c56616c75653e52657461696c3c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d227374616e64616c6f6e657573657269676874223e3c56616c75653e4f6e2074686520757365722773206465766963652873293c2f56616c75653e3c2f5661726961626c653e3c566172696162\n6c65204e616d653d226d65646961656c656d656e747374656d706c61746573223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2264697374726962757461626c65636f6465223e3c56616c75653e747275653c2f56616c75653e3c2f566172696162\n6c653e3c5661726961626c65204e616d653d2264697374726962757461626c65636f646574797065223e3c56616c75653e4d4643732c2041544c7320616e6420435254733c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d22696e7465726e616c726561737369676e6d656e74223e3c\n56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226c6963656e73657472616e73666572223e3c56616c75653e747275653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226f746865726d6963726f736f667470726f\n6772616d73223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2270726572656c65617365636f6465223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d22746869726470617274\n7970726f6772616d73223e3c56616c75653e747275653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2262656e63686d61726b696e67223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226d706567223e3c56\n616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d22696e7465726e657462617365647365727669636573223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226f726967696e61746f7222\n3e3c56616c75653e5245444d4f4e445c697269736c3c2f56616c75653e3c2f5661726961626c653e3c506172616d65746572204e616d653d2264625f646973706c61795f616c6c5f636f6d6d656e7473223e3c56616c75653e66616c73653c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e\n616d653d2264625f73686f775f73756d6d617279223e3c56616c75653e64697361626c65643c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f74656d706c6174655f666f726d223e3c56616c75653e35663336633330632d333166662d343666652d386264382d316563\n3864663732623131363c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f74656d706c6174655f7265666572656e6365223e3c56616c75653e5553455445524d535f4d41494e423c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d\n2264625f74656d706c6174655f76657273696f6e223e3c56616c75653e32303132303831363c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f7472616e73616374696f6e5f65787465726e616c5f6c6162656c223e3c56616c75653e323031332d4d41494e422d303030\n3636303c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f7472616e73616374696f6e5f6964223e3c56616c75653e383238393c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f766973697465645f7061676573223e3c\n56616c75653e313c2f56616c75653e3c56616c75653e323c2f56616c75653e3c56616c75653e333c2f56616c75653e3c56616c75653e343c2f56616c75653e3c56616c75653e363c2f56616c75653e3c56616c75653e373c2f56616c75653e3c2f506172616d657465723e3c2f53657373696f6e3e000000000000000000\n000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d2064733a6974656d49443d227b39323946373141362d303939352d343135442d383132432d\n3545433532413533453435377d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c64733a736368656d615265662064733a7572693d\n22687474703a2f2f736368656d61732e627573696e6573732d696e746567726974792e636f6d2f6465616c6275696c6465722f323030362f616e7377657273222f3e3c2f64733a736368656d61526566733e3c2f64733a6461746173746f72654974656d3e00000000000000000000000000000000000000000000000000\n000000000000000000000000000000000000000000003c3f6d736f2d636f6e74656e74547970653f3e3c466f726d54656d706c6174657320786d6c6e733d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f7368617265706f696e742f76332f636f6e74656e74747970652f666f726d73223e3c\n446973706c61793e446f63756d656e744c696272617279466f726d3c2f446973706c61793e3c456469743e446f63756d656e744c696272617279466f726d3c2f456469743e3c4e65773e446f63756d656e744c696272617279466f726d3c2f4e65773e3c2f466f726d54656d706c617465733e0000000000000000000000\n00000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a64617461500072006f00700065007200740069006500730000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000970000004f0100000000000000000000000000000000000000000000000000000000000000000000000000000000\n00000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073746f72654974656d2064733a6974656d49443d227b363946424236\n44412d324236432d344539332d423346332d4432314636303345433530427d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c6473\n3a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f7368617265706f696e742f76332f636f6e74656e74747970652f666f726d73222f3e3c2f64733a736368656d61526566733e3c2f64733a6461746173746f72654974656d3e000000000000000000\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105000000000000}}"
  },
  {
    "path": "sdk/iOS/WindowsAzureMobileServices.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXAggregateTarget section */\n\t\tE8E37977161F8E6B00C13F00 /* Framework */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = E8E37978161F8E6B00C13F00 /* Build configuration list for PBXAggregateTarget \"Framework\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE8E3797D161F8ED900C13F00 /* ShellScript */,\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tE8E3797C161F8EB400C13F00 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Framework;\n\t\t\tproductName = Framework;\n\t\t};\n/* End PBXAggregateTarget section */\n\n/* Begin PBXBuildFile section */\n\t\t5A4FAC771B05E40F0027011D /* WindowsAzureMobileServices.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B14161667CE002DD7C6 /* WindowsAzureMobileServices.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC781B05E4790027011D /* MSLoginSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = E8146645165BE2440038EBE5 /* MSLoginSerializer.m */; };\n\t\t5A4FAC791B05E47F0027011D /* MSLoginSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = E8146644165BE2440038EBE5 /* MSLoginSerializer.h */; };\n\t\t5A4FAC7A1B05E4890027011D /* MSLogin.m in Sources */ = {isa = PBXBuildFile; fileRef = E8146641165BE0150038EBE5 /* MSLogin.m */; };\n\t\t5A4FAC7B1B05E48C0027011D /* MSLogin.h in Headers */ = {isa = PBXBuildFile; fileRef = E8146640165BE0150038EBE5 /* MSLogin.h */; };\n\t\t5A4FAC7C1B05E4910027011D /* MSLoginView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8653C0B16559C15002CB440 /* MSLoginView.m */; };\n\t\t5A4FAC7D1B05E4940027011D /* MSLoginView.h in Headers */ = {isa = PBXBuildFile; fileRef = E8653C0A16559C15002CB440 /* MSLoginView.h */; };\n\t\t5A4FAC7E1B05E4970027011D /* MSLoginController.m in Sources */ = {isa = PBXBuildFile; fileRef = E814664A165C07EB0038EBE5 /* MSLoginController.m */; };\n\t\t5A4FAC7F1B05E49B0027011D /* MSLoginController.h in Headers */ = {isa = PBXBuildFile; fileRef = 402774F8161F73AB00A23A8F /* MSLoginController.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC801B05E4A30027011D /* MSTableOperationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A258890218A19D0B00962F9A /* MSTableOperationInternal.h */; };\n\t\t5A4FAC811B05E4A90027011D /* MSSyncContextInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A258890618A19D0B00962F9A /* MSSyncContextInternal.h */; };\n\t\t5A4FAC821B05E4BA0027011D /* MSClientInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = E8EE7841170CAEDC00C2848F /* MSClientInternal.h */; };\n\t\t5A4FAC831B05E4DB0027011D /* MSQueryResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 7929542719B7C793006A3829 /* MSQueryResult.m */; };\n\t\t5A4FAC841B05E4DF0027011D /* MSQueryResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 7929542619B7C793006A3829 /* MSQueryResult.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC851B05E4E90027011D /* MSClient.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B0A161667CE002DD7C6 /* MSClient.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC861B05E4F00027011D /* MSClient.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B0B161667CE002DD7C6 /* MSClient.m */; };\n\t\t5A4FAC871B05E4F40027011D /* MSDateOffset.h in Headers */ = {isa = PBXBuildFile; fileRef = CF762EC51A1D366E0018C292 /* MSDateOffset.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC881B05E4FA0027011D /* MSDateOffset.m in Sources */ = {isa = PBXBuildFile; fileRef = CF762EC71A1D36950018C292 /* MSDateOffset.m */; };\n\t\t5A4FAC891B05E4FE0027011D /* MSError.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B0C161667CE002DD7C6 /* MSError.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC8A1B05E5040027011D /* MSError.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B0D161667CE002DD7C6 /* MSError.m */; };\n\t\t5A4FAC8B1B05E5080027011D /* MSQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B0E161667CE002DD7C6 /* MSQuery.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC8C1B05E5110027011D /* MSQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B0F161667CE002DD7C6 /* MSQuery.m */; };\n\t\t5A4FAC8D1B05E5180027011D /* MSTable.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B10161667CE002DD7C6 /* MSTable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC8E1B05E5220027011D /* MSTable.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B11161667CE002DD7C6 /* MSTable.m */; };\n\t\t5A4FAC8F1B05E5250027011D /* MSUser.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B12161667CE002DD7C6 /* MSUser.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC901B05E52C0027011D /* MSUser.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B13161667CE002DD7C6 /* MSUser.m */; };\n\t\t5A4FAC911B05E5300027011D /* MSFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = E8E378FF161E14E800C13F00 /* MSFilter.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC921B05E5360027011D /* MSLocalStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = A24701AD196896F500385DA2 /* MSLocalStorage.h */; };\n\t\t5A4FAC931B05E53B0027011D /* MSLocalStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701AE196896F500385DA2 /* MSLocalStorage.m */; };\n\t\t5A4FAC941B05E53F0027011D /* MSPush.h in Headers */ = {isa = PBXBuildFile; fileRef = A24701AF196896F500385DA2 /* MSPush.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC951B05E5460027011D /* MSPush.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701B0196896F500385DA2 /* MSPush.m */; };\n\t\t5A4FAC961B05E5490027011D /* MSPushHttp.h in Headers */ = {isa = PBXBuildFile; fileRef = A24701B1196896F500385DA2 /* MSPushHttp.h */; };\n\t\t5A4FAC971B05E54D0027011D /* MSPushHttp.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701B2196896F500385DA2 /* MSPushHttp.m */; };\n\t\t5A4FAC981B05E5500027011D /* MSPushRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = A24701B3196896F500385DA2 /* MSPushRequest.h */; };\n\t\t5A4FAC991B05E5540027011D /* MSPushRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701B4196896F500385DA2 /* MSPushRequest.m */; };\n\t\t5A4FAC9A1B05E5580027011D /* MSRegistrationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A24701B5196896F500385DA2 /* MSRegistrationManager.h */; };\n\t\t5A4FAC9B1B05E55C0027011D /* MSRegistrationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701B6196896F500385DA2 /* MSRegistrationManager.m */; };\n\t\t5A4FAC9C1B05E5620027011D /* MSCoreDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = A2ACD53E192322C50012B1ED /* MSCoreDataStore.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC9D1B05E5670027011D /* MSCoreDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = A2ACD53F192322C50012B1ED /* MSCoreDataStore.m */; };\n\t\t5A4FAC9E1B05E56A0027011D /* MSSyncContextReadResult.h in Headers */ = {isa = PBXBuildFile; fileRef = A2C14C6819105D9F00A58609 /* MSSyncContextReadResult.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FAC9F1B05E5710027011D /* MSSyncContextReadResult.m in Sources */ = {isa = PBXBuildFile; fileRef = A2C14C6919105D9F00A58609 /* MSSyncContextReadResult.m */; };\n\t\t5A4FACA01B05E5740027011D /* MSSyncTable.h in Headers */ = {isa = PBXBuildFile; fileRef = A258890718A19D0B00962F9A /* MSSyncTable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FACA11B05E57A0027011D /* MSSyncTable.m in Sources */ = {isa = PBXBuildFile; fileRef = A258890818A19D0B00962F9A /* MSSyncTable.m */; };\n\t\t5A4FACA21B05E57D0027011D /* MSSyncContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A258890518A19D0B00962F9A /* MSSyncContext.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FACA31B05E5860027011D /* MSSyncContext.m in Sources */ = {isa = PBXBuildFile; fileRef = A25888F818A19CBA00962F9A /* MSSyncContext.m */; };\n\t\t5A4FACA41B05E5F20027011D /* MSOperationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A25888FC18A19D0B00962F9A /* MSOperationQueue.h */; };\n\t\t5A4FACA51B05E5F60027011D /* MSOperationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = A25888FD18A19D0B00962F9A /* MSOperationQueue.m */; };\n\t\t5A4FACA61B05E6000027011D /* MSQueuePullOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = CF4D49851A2E5C96006AEB70 /* MSQueuePullOperation.h */; };\n\t\t5A4FACA71B05E6060027011D /* MSQueuePullOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CF4D49891A2E5CF8006AEB70 /* MSQueuePullOperation.m */; };\n\t\t5A4FACA81B05E60A0027011D /* MSQueuePurgeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = CF1D745A1A5D85D80074789F /* MSQueuePurgeOperation.h */; };\n\t\t5A4FACA91B05E60F0027011D /* MSQueuePurgeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CF1D74581A5D85C60074789F /* MSQueuePurgeOperation.m */; };\n\t\t5A4FACAA1B05E6130027011D /* MSQueuePushOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A2818FFA18BB0660001B14E7 /* MSQueuePushOperation.h */; };\n\t\t5A4FACAB1B05E6160027011D /* MSQueuePushOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A2818FFB18BB0660001B14E7 /* MSQueuePushOperation.m */; };\n\t\t5A4FACAC1B05E61D0027011D /* MSTableConfigValue.h in Headers */ = {isa = PBXBuildFile; fileRef = CFAE6E0B1A3B84E400734128 /* MSTableConfigValue.h */; };\n\t\t5A4FACAD1B05E6200027011D /* MSTableConfigValue.m in Sources */ = {isa = PBXBuildFile; fileRef = CFAE6E091A3B84D700734128 /* MSTableConfigValue.m */; };\n\t\t5A4FACAE1B05E6230027011D /* MSTableOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A258890018A19D0B00962F9A /* MSTableOperation.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FACAF1B05E6280027011D /* MSTableOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A258890118A19D0B00962F9A /* MSTableOperation.m */; };\n\t\t5A4FACB01B05E62C0027011D /* MSTableOperationError.h in Headers */ = {isa = PBXBuildFile; fileRef = A281900218BB2FF5001B14E7 /* MSTableOperationError.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t5A4FACB11B05E6320027011D /* MSTableOperationError.m in Sources */ = {isa = PBXBuildFile; fileRef = A281900318BB2FF5001B14E7 /* MSTableOperationError.m */; };\n\t\t5A4FACB21B05E6460027011D /* MSClientConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B1E16166822002DD7C6 /* MSClientConnection.h */; };\n\t\t5A4FACB31B05E64A0027011D /* MSClientConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B1F16166822002DD7C6 /* MSClientConnection.m */; };\n\t\t5A4FACB41B05E6510027011D /* MSTableConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B2016166822002DD7C6 /* MSTableConnection.h */; };\n\t\t5A4FACB51B05E6550027011D /* MSTableConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B2116166822002DD7C6 /* MSTableConnection.m */; };\n\t\t5A4FACB61B05E6580027011D /* MSAPIConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = E8C44040170BAD49002FC997 /* MSAPIConnection.h */; };\n\t\t5A4FACB71B05E65B0027011D /* MSAPIConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = E8C44041170BAD49002FC997 /* MSAPIConnection.m */; };\n\t\t5A4FACB81B05E65E0027011D /* MSTableRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B2216166822002DD7C6 /* MSTableRequest.h */; };\n\t\t5A4FACB91B05E6620027011D /* MSTableRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B2316166822002DD7C6 /* MSTableRequest.m */; };\n\t\t5A4FACBA1B05E6650027011D /* MSAPIRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = E8C44045170BAD93002FC997 /* MSAPIRequest.h */; };\n\t\t5A4FACBB1B05E6680027011D /* MSAPIRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E8C44046170BAD93002FC997 /* MSAPIRequest.m */; };\n\t\t5A4FACBC1B05E66C0027011D /* MSSDKFeatures.h in Headers */ = {isa = PBXBuildFile; fileRef = 870C0C9A199C246700A134DD /* MSSDKFeatures.h */; };\n\t\t5A4FACBD1B05E6700027011D /* MSSDKFeatures.m in Sources */ = {isa = PBXBuildFile; fileRef = 870C0C9B199C246700A134DD /* MSSDKFeatures.m */; };\n\t\t5A4FACBE1B05E6730027011D /* MSURLBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = E87BB01D161A446C008053F9 /* MSURLBuilder.h */; };\n\t\t5A4FACBF1B05E6770027011D /* MSURLBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = E87BB01E161A446C008053F9 /* MSURLBuilder.m */; };\n\t\t5A4FACC01B05E67A0027011D /* MSUserAgentBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = E84CA4CD162369BD009B2588 /* MSUserAgentBuilder.h */; };\n\t\t5A4FACC11B05E67E0027011D /* MSUserAgentBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = E84CA4CE162369BD009B2588 /* MSUserAgentBuilder.m */; };\n\t\t5A4FACC21B05E6810027011D /* MSNaiveISODateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = E8EA24BB161CFC5300BE055D /* MSNaiveISODateFormatter.h */; };\n\t\t5A4FACC31B05E6840027011D /* MSNaiveISODateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EA24BC161CFC5300BE055D /* MSNaiveISODateFormatter.m */; };\n\t\t5A4FACC41B05E6870027011D /* MSSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B2916166837002DD7C6 /* MSSerializer.h */; };\n\t\t5A4FACC51B05E68C0027011D /* MSJSONSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B2716166837002DD7C6 /* MSJSONSerializer.h */; };\n\t\t5A4FACC61B05E68F0027011D /* MSJSONSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B2816166837002DD7C6 /* MSJSONSerializer.m */; };\n\t\t5A4FACC71B05E6920027011D /* MSPredicateTranslator.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B2B1616684F002DD7C6 /* MSPredicateTranslator.h */; };\n\t\t5A4FACC81B05E6950027011D /* MSPredicateTranslator.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B2C1616684F002DD7C6 /* MSPredicateTranslator.m */; };\n\t\t7929542819B7C793006A3829 /* MSQueryResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 7929542619B7C793006A3829 /* MSQueryResult.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t7929542919B7C793006A3829 /* MSQueryResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 7929542719B7C793006A3829 /* MSQueryResult.m */; };\n\t\t870C0C9C199C246700A134DD /* MSSDKFeatures.h in Headers */ = {isa = PBXBuildFile; fileRef = 870C0C9A199C246700A134DD /* MSSDKFeatures.h */; };\n\t\t870C0C9D199C246700A134DD /* MSSDKFeatures.m in Sources */ = {isa = PBXBuildFile; fileRef = 870C0C9B199C246700A134DD /* MSSDKFeatures.m */; };\n\t\tA214410C182631A500C2E762 /* MSTableFuncTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A214410B182631A500C2E762 /* MSTableFuncTests.m */; };\n\t\tA22CF3731825914700660C79 /* MSTable+MSTableTestUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A22CF3721825914700660C79 /* MSTable+MSTableTestUtilities.m */; };\n\t\tA232CCA21AC8FDE800E15D3A /* MSTableOperationErrorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A232CCA11AC8FDE800E15D3A /* MSTableOperationErrorTests.m */; };\n\t\tA232CCA31AC9C86D00E15D3A /* TodoItem.m in Sources */ = {isa = PBXBuildFile; fileRef = A24425511A67496600854EF9 /* TodoItem.m */; };\n\t\tA24701B7196896F500385DA2 /* MSLocalStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = A24701AD196896F500385DA2 /* MSLocalStorage.h */; };\n\t\tA24701B8196896F500385DA2 /* MSLocalStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701AE196896F500385DA2 /* MSLocalStorage.m */; };\n\t\tA24701B9196896F500385DA2 /* MSPush.h in Headers */ = {isa = PBXBuildFile; fileRef = A24701AF196896F500385DA2 /* MSPush.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA24701BA196896F500385DA2 /* MSPush.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701B0196896F500385DA2 /* MSPush.m */; };\n\t\tA24701BB196896F500385DA2 /* MSPushHttp.h in Headers */ = {isa = PBXBuildFile; fileRef = A24701B1196896F500385DA2 /* MSPushHttp.h */; };\n\t\tA24701BC196896F500385DA2 /* MSPushHttp.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701B2196896F500385DA2 /* MSPushHttp.m */; };\n\t\tA24701BD196896F500385DA2 /* MSPushRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = A24701B3196896F500385DA2 /* MSPushRequest.h */; };\n\t\tA24701BE196896F500385DA2 /* MSPushRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701B4196896F500385DA2 /* MSPushRequest.m */; };\n\t\tA24701BF196896F500385DA2 /* MSRegistrationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A24701B5196896F500385DA2 /* MSRegistrationManager.h */; };\n\t\tA24701C0196896F500385DA2 /* MSRegistrationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701B6196896F500385DA2 /* MSRegistrationManager.m */; };\n\t\tA24701C5196897A700385DA2 /* MSPushHttpTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701C3196897A700385DA2 /* MSPushHttpTests.m */; };\n\t\tA24701C6196897A700385DA2 /* MSPushTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701C4196897A700385DA2 /* MSPushTests.m */; };\n\t\tA24701C8196897B300385DA2 /* MSLocalStorageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701C7196897B300385DA2 /* MSLocalStorageTests.m */; };\n\t\tA24701CB196897C100385DA2 /* MSMultiRequestTestFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = A24701CA196897C100385DA2 /* MSMultiRequestTestFilter.m */; };\n\t\tA25888F918A19CBA00962F9A /* MSSyncContext.m in Sources */ = {isa = PBXBuildFile; fileRef = A25888F818A19CBA00962F9A /* MSSyncContext.m */; };\n\t\tA258890B18A19D0B00962F9A /* MSOperationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A25888FC18A19D0B00962F9A /* MSOperationQueue.h */; };\n\t\tA258890C18A19D0B00962F9A /* MSOperationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = A25888FD18A19D0B00962F9A /* MSOperationQueue.m */; };\n\t\tA258890F18A19D0B00962F9A /* MSTableOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A258890018A19D0B00962F9A /* MSTableOperation.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA258891018A19D0B00962F9A /* MSTableOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A258890118A19D0B00962F9A /* MSTableOperation.m */; };\n\t\tA258891118A19D0B00962F9A /* MSTableOperationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A258890218A19D0B00962F9A /* MSTableOperationInternal.h */; };\n\t\tA258891418A19D0B00962F9A /* MSSyncContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A258890518A19D0B00962F9A /* MSSyncContext.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA258891518A19D0B00962F9A /* MSSyncContextInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A258890618A19D0B00962F9A /* MSSyncContextInternal.h */; };\n\t\tA258891618A19D0B00962F9A /* MSSyncTable.h in Headers */ = {isa = PBXBuildFile; fileRef = A258890718A19D0B00962F9A /* MSSyncTable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA258891718A19D0B00962F9A /* MSSyncTable.m in Sources */ = {isa = PBXBuildFile; fileRef = A258890818A19D0B00962F9A /* MSSyncTable.m */; };\n\t\tA258891E18A1A30000962F9A /* MSSyncTableTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A258891A18A19D1B00962F9A /* MSSyncTableTests.m */; };\n\t\tA258891F18A1A30500962F9A /* MSOfflinePassthroughHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = A258891918A19D1B00962F9A /* MSOfflinePassthroughHelper.m */; };\n\t\tA2818FFC18BB0660001B14E7 /* MSQueuePushOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A2818FFA18BB0660001B14E7 /* MSQueuePushOperation.h */; };\n\t\tA2818FFD18BB0660001B14E7 /* MSQueuePushOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A2818FFB18BB0660001B14E7 /* MSQueuePushOperation.m */; };\n\t\tA281900418BB2FF5001B14E7 /* MSTableOperationError.h in Headers */ = {isa = PBXBuildFile; fileRef = A281900218BB2FF5001B14E7 /* MSTableOperationError.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA281900518BB2FF5001B14E7 /* MSTableOperationError.m in Sources */ = {isa = PBXBuildFile; fileRef = A281900318BB2FF5001B14E7 /* MSTableOperationError.m */; };\n\t\tA28224B0192ACEAE00EF8743 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A28224AF192ACEAE00EF8743 /* CoreData.framework */; };\n\t\tA28224B3192ACFB700EF8743 /* CoreDataTestModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = A28224B1192ACFB700EF8743 /* CoreDataTestModel.xcdatamodeld */; };\n\t\tA28224B4192AD00E00EF8743 /* CoreDataTestModel.xcdatamodeld in Resources */ = {isa = PBXBuildFile; fileRef = A28224B1192ACFB700EF8743 /* CoreDataTestModel.xcdatamodeld */; };\n\t\tA295B2B3192AB2040067562E /* MSCoreDataStoreTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A295B2B2192AB2040067562E /* MSCoreDataStoreTests.m */; };\n\t\tA29F44A31953CBF30063C0C1 /* MSCoreDataStore+TestHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = A29F44A21953CBF30063C0C1 /* MSCoreDataStore+TestHelper.m */; };\n\t\tA2ACD540192322C50012B1ED /* MSCoreDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = A2ACD53E192322C50012B1ED /* MSCoreDataStore.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA2ACD541192322C50012B1ED /* MSCoreDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = A2ACD53F192322C50012B1ED /* MSCoreDataStore.m */; };\n\t\tA2ADF7E91914481B0078BB16 /* MSTableOperationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A2ADF7E81914481B0078BB16 /* MSTableOperationTests.m */; };\n\t\tA2C14C6A19105D9F00A58609 /* MSSyncContextReadResult.h in Headers */ = {isa = PBXBuildFile; fileRef = A2C14C6819105D9F00A58609 /* MSSyncContextReadResult.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tA2C14C6B19105D9F00A58609 /* MSSyncContextReadResult.m in Sources */ = {isa = PBXBuildFile; fileRef = A2C14C6919105D9F00A58609 /* MSSyncContextReadResult.m */; };\n\t\tA38A856F1BC35C8F005D63DF /* MSPullSettingsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = D0EFD8581B2F785F009CF6DA /* MSPullSettingsInternal.h */; settings = {ASSET_TAGS = (); }; };\n\t\tA38A85701BC35CA1005D63DF /* MSQueuePullOperationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = F3EA41DC1B0E62F40014B587 /* MSQueuePullOperationInternal.h */; settings = {ASSET_TAGS = (); }; };\n\t\tA38A85711BC35CE5005D63DF /* MSTestWaiter.m in Sources */ = {isa = PBXBuildFile; fileRef = CF4D498B1A3253E2006AEB70 /* MSTestWaiter.m */; settings = {ASSET_TAGS = (); }; };\n\t\tCF1D74591A5D85C60074789F /* MSQueuePurgeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CF1D74581A5D85C60074789F /* MSQueuePurgeOperation.m */; };\n\t\tCF1D745B1A5D9CAB0074789F /* MSQueuePurgeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = CF1D745A1A5D85D80074789F /* MSQueuePurgeOperation.h */; };\n\t\tCF4D49861A2E5C96006AEB70 /* MSQueuePullOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = CF4D49851A2E5C96006AEB70 /* MSQueuePullOperation.h */; };\n\t\tCF4D498A1A2E5CF8006AEB70 /* MSQueuePullOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CF4D49891A2E5CF8006AEB70 /* MSQueuePullOperation.m */; };\n\t\tCF4D49921A363537006AEB70 /* settings.plist in Resources */ = {isa = PBXBuildFile; fileRef = CF4D49911A36334C006AEB70 /* settings.plist */; };\n\t\tCF762EC61A1D366E0018C292 /* MSDateOffset.h in Headers */ = {isa = PBXBuildFile; fileRef = CF762EC51A1D366E0018C292 /* MSDateOffset.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tCF762EC91A1D37A40018C292 /* MSDateOffset.m in Sources */ = {isa = PBXBuildFile; fileRef = CF762EC71A1D36950018C292 /* MSDateOffset.m */; };\n\t\tCFAE6E0A1A3B84D700734128 /* MSTableConfigValue.m in Sources */ = {isa = PBXBuildFile; fileRef = CFAE6E091A3B84D700734128 /* MSTableConfigValue.m */; };\n\t\tCFAE6E0C1A3B84E400734128 /* MSTableConfigValue.h in Headers */ = {isa = PBXBuildFile; fileRef = CFAE6E0B1A3B84E400734128 /* MSTableConfigValue.h */; };\n\t\tD0D3B9361B290D80002A126A /* MSPullSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D3B9351B290D80002A126A /* MSPullSettings.m */; };\n\t\tD0D3B9371B2A267F002A126A /* MSPullSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D3B9341B2906EF002A126A /* MSPullSettings.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tD0EFD8571B2F73B0009CF6DA /* MSPullSettingsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D0EFD8551B2F7358009CF6DA /* MSPullSettingsTests.m */; };\n\t\tD0EFD8591B2F785F009CF6DA /* MSPullSettingsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = D0EFD8581B2F785F009CF6DA /* MSPullSettingsInternal.h */; };\n\t\tE8146642165BE0150038EBE5 /* MSLogin.h in Headers */ = {isa = PBXBuildFile; fileRef = E8146640165BE0150038EBE5 /* MSLogin.h */; };\n\t\tE8146643165BE0150038EBE5 /* MSLogin.m in Sources */ = {isa = PBXBuildFile; fileRef = E8146641165BE0150038EBE5 /* MSLogin.m */; };\n\t\tE8146646165BE2440038EBE5 /* MSLoginSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = E8146644165BE2440038EBE5 /* MSLoginSerializer.h */; };\n\t\tE8146647165BE2440038EBE5 /* MSLoginSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = E8146645165BE2440038EBE5 /* MSLoginSerializer.m */; };\n\t\tE814664B165C07EB0038EBE5 /* MSLoginController.m in Sources */ = {isa = PBXBuildFile; fileRef = E814664A165C07EB0038EBE5 /* MSLoginController.m */; };\n\t\tE84CA4CF162369BD009B2588 /* MSUserAgentBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = E84CA4CD162369BD009B2588 /* MSUserAgentBuilder.h */; };\n\t\tE84CA4D0162369BD009B2588 /* MSUserAgentBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = E84CA4CE162369BD009B2588 /* MSUserAgentBuilder.m */; };\n\t\tE84CA4D316236A6E009B2588 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E84CA4D216236A6E009B2588 /* UIKit.framework */; };\n\t\tE84CA4D6162373E2009B2588 /* MSUserAgentBuilderTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E84CA4D5162373E2009B2588 /* MSUserAgentBuilderTests.m */; };\n\t\tE84CA4DE16272371009B2588 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E84CA4D216236A6E009B2588 /* UIKit.framework */; };\n\t\tE84CA4E116272C15009B2588 /* MSLoginController.h in Headers */ = {isa = PBXBuildFile; fileRef = 402774F8161F73AB00A23A8F /* MSLoginController.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE8653C0C16559C15002CB440 /* MSLoginView.h in Headers */ = {isa = PBXBuildFile; fileRef = E8653C0A16559C15002CB440 /* MSLoginView.h */; settings = {ATTRIBUTES = (); }; };\n\t\tE8653C0D16559C15002CB440 /* MSLoginView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8653C0B16559C15002CB440 /* MSLoginView.m */; };\n\t\tE87BB01C161A28FC008053F9 /* MSClientTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E87BB01B161A28FC008053F9 /* MSClientTests.m */; };\n\t\tE87BB01F161A446C008053F9 /* MSURLBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = E87BB01E161A446C008053F9 /* MSURLBuilder.m */; };\n\t\tE87BB022161B57C8008053F9 /* MSUserTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E87BB021161B57C8008053F9 /* MSUserTests.m */; };\n\t\tE87BB025161B5A4D008053F9 /* MSTableTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E87BB024161B5A4D008053F9 /* MSTableTests.m */; };\n\t\tE8C44042170BAD49002FC997 /* MSAPIConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = E8C44040170BAD49002FC997 /* MSAPIConnection.h */; };\n\t\tE8C44043170BAD49002FC997 /* MSAPIConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = E8C44041170BAD49002FC997 /* MSAPIConnection.m */; };\n\t\tE8C44047170BAD93002FC997 /* MSAPIRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = E8C44045170BAD93002FC997 /* MSAPIRequest.h */; };\n\t\tE8C44048170BAD93002FC997 /* MSAPIRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E8C44046170BAD93002FC997 /* MSAPIRequest.m */; };\n\t\tE8E37904161E2FC500C13F00 /* MSTestFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E37903161E2FC500C13F00 /* MSTestFilter.m */; };\n\t\tE8E37907161F4D0D00C13F00 /* MSFilterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E37906161F4D0D00C13F00 /* MSFilterTest.m */; };\n\t\tE8E3790D161F769D00C13F00 /* WindowsAzureMobileServices.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B14161667CE002DD7C6 /* WindowsAzureMobileServices.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE8E3790E161F769D00C13F00 /* MSClient.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B0A161667CE002DD7C6 /* MSClient.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE8E3790F161F769D00C13F00 /* MSError.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B0C161667CE002DD7C6 /* MSError.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE8E37910161F769D00C13F00 /* MSQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B0E161667CE002DD7C6 /* MSQuery.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE8E37911161F769D00C13F00 /* MSTable.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B10161667CE002DD7C6 /* MSTable.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE8E37912161F769D00C13F00 /* MSUser.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B12161667CE002DD7C6 /* MSUser.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE8E37913161F769D00C13F00 /* MSFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = E8E378FF161E14E800C13F00 /* MSFilter.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE8E37914161F769D00C13F00 /* MSClientConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B1E16166822002DD7C6 /* MSClientConnection.h */; };\n\t\tE8E37915161F769D00C13F00 /* MSTableConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B2016166822002DD7C6 /* MSTableConnection.h */; };\n\t\tE8E37916161F769D00C13F00 /* MSTableRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B2216166822002DD7C6 /* MSTableRequest.h */; };\n\t\tE8E37917161F769D00C13F00 /* MSURLBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = E87BB01D161A446C008053F9 /* MSURLBuilder.h */; };\n\t\tE8E37918161F769D00C13F00 /* MSNaiveISODateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = E8EA24BB161CFC5300BE055D /* MSNaiveISODateFormatter.h */; };\n\t\tE8E37919161F769D00C13F00 /* MSSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B2916166837002DD7C6 /* MSSerializer.h */; };\n\t\tE8E3791A161F769D00C13F00 /* MSJSONSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B2716166837002DD7C6 /* MSJSONSerializer.h */; };\n\t\tE8E3791B161F769D00C13F00 /* MSPredicateTranslator.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F33B2B1616684F002DD7C6 /* MSPredicateTranslator.h */; };\n\t\tE8EA24BD161CFC5300BE055D /* MSNaiveISODateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EA24BC161CFC5300BE055D /* MSNaiveISODateFormatter.m */; };\n\t\tE8EA24C0161CFCF400BE055D /* MSURLbuilderTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EA24BE161CFC6400BE055D /* MSURLbuilderTests.m */; };\n\t\tE8EE7842170CAEDC00C2848F /* MSClientInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = E8EE7841170CAEDC00C2848F /* MSClientInternal.h */; };\n\t\tE8F33ADF1616659C002DD7C6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8F33ADE1616659C002DD7C6 /* Foundation.framework */; };\n\t\tE8F33AF11616659C002DD7C6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8F33ADE1616659C002DD7C6 /* Foundation.framework */; };\n\t\tE8F33AF41616659C002DD7C6 /* libWindowsAzureMobileServices.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E8F33ADB1616659C002DD7C6 /* libWindowsAzureMobileServices.a */; };\n\t\tE8F33AFA1616659C002DD7C6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = E8F33AF81616659C002DD7C6 /* InfoPlist.strings */; };\n\t\tE8F33B15161667CE002DD7C6 /* MSClient.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B0B161667CE002DD7C6 /* MSClient.m */; };\n\t\tE8F33B16161667CE002DD7C6 /* MSError.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B0D161667CE002DD7C6 /* MSError.m */; };\n\t\tE8F33B17161667CE002DD7C6 /* MSQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B0F161667CE002DD7C6 /* MSQuery.m */; };\n\t\tE8F33B18161667CE002DD7C6 /* MSTable.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B11161667CE002DD7C6 /* MSTable.m */; };\n\t\tE8F33B19161667CE002DD7C6 /* MSUser.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B13161667CE002DD7C6 /* MSUser.m */; };\n\t\tE8F33B2416166822002DD7C6 /* MSClientConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B1F16166822002DD7C6 /* MSClientConnection.m */; };\n\t\tE8F33B2516166822002DD7C6 /* MSTableConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B2116166822002DD7C6 /* MSTableConnection.m */; };\n\t\tE8F33B2616166822002DD7C6 /* MSTableRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B2316166822002DD7C6 /* MSTableRequest.m */; };\n\t\tE8F33B2A16166837002DD7C6 /* MSJSONSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B2816166837002DD7C6 /* MSJSONSerializer.m */; };\n\t\tE8F33B2F1616684F002DD7C6 /* MSPredicateTranslator.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B2C1616684F002DD7C6 /* MSPredicateTranslator.m */; };\n\t\tE8F33B3C16166945002DD7C6 /* WindowsAzureMobileServicesFunctionalTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B34161668C4002DD7C6 /* WindowsAzureMobileServicesFunctionalTests.m */; };\n\t\tE8F33B3D1616694C002DD7C6 /* MSQueryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B3A161668ED002DD7C6 /* MSQueryTests.m */; };\n\t\tE8F33B3E16166956002DD7C6 /* MSJSONSerializerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B36161668DA002DD7C6 /* MSJSONSerializerTests.m */; };\n\t\tE8F33B3F1616695E002DD7C6 /* MSPredicateTranslatorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F33B38161668E4002DD7C6 /* MSPredicateTranslatorTests.m */; };\n\t\tEB446B6D1BAB801A002F4A27 /* MSPullSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D3B9351B290D80002A126A /* MSPullSettings.m */; };\n\t\tEB446B6E1BAB83BB002F4A27 /* MSPullSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D3B9341B2906EF002A126A /* MSPullSettings.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tF3EA41DD1B0E63470014B587 /* MSQueuePullOperationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = F3EA41DC1B0E62F40014B587 /* MSQueuePullOperationInternal.h */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tE8E3797B161F8EB400C13F00 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = E8F33AD21616659C002DD7C6 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E8F33ADA1616659C002DD7C6;\n\t\t\tremoteInfo = WindowsAzureMobileServices;\n\t\t};\n\t\tE8F33AF21616659C002DD7C6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = E8F33AD21616659C002DD7C6 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E8F33ADA1616659C002DD7C6;\n\t\t\tremoteInfo = WindowsAzureMobileServices;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tE8F33AD91616659C002DD7C6 /* Copy Files */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"include/${PRODUCT_NAME}\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Copy Files\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t402774F8161F73AB00A23A8F /* MSLoginController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSLoginController.h; sourceTree = \"<group>\"; };\n\t\t5A4FAC5D1B050A880027011D /* WindowsAzureMobileServices.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WindowsAzureMobileServices.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t5A4FAC761B05DFAD0027011D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t7929542619B7C793006A3829 /* MSQueryResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSQueryResult.h; sourceTree = \"<group>\"; };\n\t\t7929542719B7C793006A3829 /* MSQueryResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSQueryResult.m; sourceTree = \"<group>\"; };\n\t\t870C0C9A199C246700A134DD /* MSSDKFeatures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSSDKFeatures.h; sourceTree = \"<group>\"; };\n\t\t870C0C9B199C246700A134DD /* MSSDKFeatures.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSSDKFeatures.m; sourceTree = \"<group>\"; };\n\t\t8790D2BE199C5D510000DC4E /* MSTableInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MSTableInternal.h; sourceTree = \"<group>\"; };\n\t\t8790D2BF199EA5950000DC4E /* MSQueryInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MSQueryInternal.h; sourceTree = \"<group>\"; };\n\t\tA214410B182631A500C2E762 /* MSTableFuncTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTableFuncTests.m; sourceTree = \"<group>\"; };\n\t\tA22CF3711825914700660C79 /* MSTable+MSTableTestUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"MSTable+MSTableTestUtilities.h\"; sourceTree = \"<group>\"; };\n\t\tA22CF3721825914700660C79 /* MSTable+MSTableTestUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"MSTable+MSTableTestUtilities.m\"; sourceTree = \"<group>\"; };\n\t\tA232CCA11AC8FDE800E15D3A /* MSTableOperationErrorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTableOperationErrorTests.m; sourceTree = \"<group>\"; };\n\t\tA24425501A67496600854EF9 /* TodoItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TodoItem.h; sourceTree = \"<group>\"; };\n\t\tA24425511A67496600854EF9 /* TodoItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TodoItem.m; sourceTree = \"<group>\"; };\n\t\tA24701AD196896F500385DA2 /* MSLocalStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSLocalStorage.h; sourceTree = \"<group>\"; };\n\t\tA24701AE196896F500385DA2 /* MSLocalStorage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSLocalStorage.m; sourceTree = \"<group>\"; };\n\t\tA24701AF196896F500385DA2 /* MSPush.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSPush.h; sourceTree = \"<group>\"; };\n\t\tA24701B0196896F500385DA2 /* MSPush.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSPush.m; sourceTree = \"<group>\"; };\n\t\tA24701B1196896F500385DA2 /* MSPushHttp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSPushHttp.h; sourceTree = \"<group>\"; };\n\t\tA24701B2196896F500385DA2 /* MSPushHttp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSPushHttp.m; sourceTree = \"<group>\"; };\n\t\tA24701B3196896F500385DA2 /* MSPushRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSPushRequest.h; sourceTree = \"<group>\"; };\n\t\tA24701B4196896F500385DA2 /* MSPushRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSPushRequest.m; sourceTree = \"<group>\"; };\n\t\tA24701B5196896F500385DA2 /* MSRegistrationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSRegistrationManager.h; sourceTree = \"<group>\"; };\n\t\tA24701B6196896F500385DA2 /* MSRegistrationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSRegistrationManager.m; sourceTree = \"<group>\"; };\n\t\tA24701C3196897A700385DA2 /* MSPushHttpTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSPushHttpTests.m; sourceTree = \"<group>\"; };\n\t\tA24701C4196897A700385DA2 /* MSPushTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSPushTests.m; sourceTree = \"<group>\"; };\n\t\tA24701C7196897B300385DA2 /* MSLocalStorageTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSLocalStorageTests.m; sourceTree = \"<group>\"; };\n\t\tA24701C9196897C100385DA2 /* MSMultiRequestTestFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSMultiRequestTestFilter.h; sourceTree = \"<group>\"; };\n\t\tA24701CA196897C100385DA2 /* MSMultiRequestTestFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSMultiRequestTestFilter.m; sourceTree = \"<group>\"; };\n\t\tA24CC80719A46B6600A68AE0 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };\n\t\tA25888F818A19CBA00962F9A /* MSSyncContext.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSSyncContext.m; sourceTree = \"<group>\"; };\n\t\tA25888FC18A19D0B00962F9A /* MSOperationQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSOperationQueue.h; sourceTree = \"<group>\"; };\n\t\tA25888FD18A19D0B00962F9A /* MSOperationQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSOperationQueue.m; sourceTree = \"<group>\"; };\n\t\tA258890018A19D0B00962F9A /* MSTableOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSTableOperation.h; sourceTree = \"<group>\"; };\n\t\tA258890118A19D0B00962F9A /* MSTableOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTableOperation.m; sourceTree = \"<group>\"; };\n\t\tA258890218A19D0B00962F9A /* MSTableOperationInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSTableOperationInternal.h; sourceTree = \"<group>\"; };\n\t\tA258890518A19D0B00962F9A /* MSSyncContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSSyncContext.h; sourceTree = \"<group>\"; };\n\t\tA258890618A19D0B00962F9A /* MSSyncContextInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSSyncContextInternal.h; sourceTree = \"<group>\"; };\n\t\tA258890718A19D0B00962F9A /* MSSyncTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSSyncTable.h; sourceTree = \"<group>\"; };\n\t\tA258890818A19D0B00962F9A /* MSSyncTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSSyncTable.m; sourceTree = \"<group>\"; };\n\t\tA258891818A19D1B00962F9A /* MSOfflinePassthroughHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSOfflinePassthroughHelper.h; sourceTree = \"<group>\"; };\n\t\tA258891918A19D1B00962F9A /* MSOfflinePassthroughHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSOfflinePassthroughHelper.m; sourceTree = \"<group>\"; };\n\t\tA258891A18A19D1B00962F9A /* MSSyncTableTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSSyncTableTests.m; sourceTree = \"<group>\"; };\n\t\tA2818FFA18BB0660001B14E7 /* MSQueuePushOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSQueuePushOperation.h; sourceTree = \"<group>\"; };\n\t\tA2818FFB18BB0660001B14E7 /* MSQueuePushOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSQueuePushOperation.m; sourceTree = \"<group>\"; };\n\t\tA281900218BB2FF5001B14E7 /* MSTableOperationError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSTableOperationError.h; sourceTree = \"<group>\"; };\n\t\tA281900318BB2FF5001B14E7 /* MSTableOperationError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTableOperationError.m; sourceTree = \"<group>\"; };\n\t\tA28224AF192ACEAE00EF8743 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };\n\t\tA28224B2192ACFB700EF8743 /* CoreDataTestModel.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = CoreDataTestModel.xcdatamodel; sourceTree = \"<group>\"; };\n\t\tA295B2B2192AB2040067562E /* MSCoreDataStoreTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSCoreDataStoreTests.m; sourceTree = \"<group>\"; };\n\t\tA29F44A11953CBF30063C0C1 /* MSCoreDataStore+TestHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"MSCoreDataStore+TestHelper.h\"; sourceTree = \"<group>\"; };\n\t\tA29F44A21953CBF30063C0C1 /* MSCoreDataStore+TestHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"MSCoreDataStore+TestHelper.m\"; sourceTree = \"<group>\"; };\n\t\tA2ACD53E192322C50012B1ED /* MSCoreDataStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSCoreDataStore.h; sourceTree = \"<group>\"; };\n\t\tA2ACD53F192322C50012B1ED /* MSCoreDataStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSCoreDataStore.m; sourceTree = \"<group>\"; };\n\t\tA2ADF7E81914481B0078BB16 /* MSTableOperationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTableOperationTests.m; sourceTree = \"<group>\"; };\n\t\tA2C14C6819105D9F00A58609 /* MSSyncContextReadResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSSyncContextReadResult.h; sourceTree = \"<group>\"; };\n\t\tA2C14C6919105D9F00A58609 /* MSSyncContextReadResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSSyncContextReadResult.m; sourceTree = \"<group>\"; };\n\t\tCF1D74581A5D85C60074789F /* MSQueuePurgeOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSQueuePurgeOperation.m; sourceTree = \"<group>\"; };\n\t\tCF1D745A1A5D85D80074789F /* MSQueuePurgeOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MSQueuePurgeOperation.h; sourceTree = \"<group>\"; };\n\t\tCF4D49851A2E5C96006AEB70 /* MSQueuePullOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSQueuePullOperation.h; sourceTree = \"<group>\"; };\n\t\tCF4D49891A2E5CF8006AEB70 /* MSQueuePullOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSQueuePullOperation.m; sourceTree = \"<group>\"; };\n\t\tCF4D498B1A3253E2006AEB70 /* MSTestWaiter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTestWaiter.m; sourceTree = \"<group>\"; };\n\t\tCF4D498D1A3253F7006AEB70 /* MSTestWaiter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MSTestWaiter.h; sourceTree = \"<group>\"; };\n\t\tCF4D49911A36334C006AEB70 /* settings.plist */ = {isa = PBXFileReference; explicitFileType = text.plist.xml; fileEncoding = 4; path = settings.plist; sourceTree = \"<group>\"; };\n\t\tCF762EC51A1D366E0018C292 /* MSDateOffset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSDateOffset.h; sourceTree = \"<group>\"; };\n\t\tCF762EC71A1D36950018C292 /* MSDateOffset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSDateOffset.m; sourceTree = \"<group>\"; };\n\t\tCFAE6E091A3B84D700734128 /* MSTableConfigValue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTableConfigValue.m; sourceTree = \"<group>\"; };\n\t\tCFAE6E0B1A3B84E400734128 /* MSTableConfigValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSTableConfigValue.h; sourceTree = \"<group>\"; };\n\t\tD0D3B9341B2906EF002A126A /* MSPullSettings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MSPullSettings.h; sourceTree = \"<group>\"; };\n\t\tD0D3B9351B290D80002A126A /* MSPullSettings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSPullSettings.m; sourceTree = \"<group>\"; };\n\t\tD0EFD8551B2F7358009CF6DA /* MSPullSettingsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSPullSettingsTests.m; sourceTree = \"<group>\"; };\n\t\tD0EFD8581B2F785F009CF6DA /* MSPullSettingsInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSPullSettingsInternal.h; sourceTree = \"<group>\"; };\n\t\tE8146640165BE0150038EBE5 /* MSLogin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSLogin.h; sourceTree = \"<group>\"; };\n\t\tE8146641165BE0150038EBE5 /* MSLogin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSLogin.m; sourceTree = \"<group>\"; };\n\t\tE8146644165BE2440038EBE5 /* MSLoginSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSLoginSerializer.h; sourceTree = \"<group>\"; };\n\t\tE8146645165BE2440038EBE5 /* MSLoginSerializer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSLoginSerializer.m; sourceTree = \"<group>\"; };\n\t\tE814664A165C07EB0038EBE5 /* MSLoginController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSLoginController.m; sourceTree = \"<group>\"; };\n\t\tE84CA4CD162369BD009B2588 /* MSUserAgentBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSUserAgentBuilder.h; sourceTree = \"<group>\"; };\n\t\tE84CA4CE162369BD009B2588 /* MSUserAgentBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSUserAgentBuilder.m; sourceTree = \"<group>\"; };\n\t\tE84CA4D216236A6E009B2588 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\tE84CA4D5162373E2009B2588 /* MSUserAgentBuilderTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSUserAgentBuilderTests.m; sourceTree = \"<group>\"; };\n\t\tE8653C0A16559C15002CB440 /* MSLoginView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSLoginView.h; sourceTree = \"<group>\"; };\n\t\tE8653C0B16559C15002CB440 /* MSLoginView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSLoginView.m; sourceTree = \"<group>\"; };\n\t\tE87BB01B161A28FC008053F9 /* MSClientTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSClientTests.m; sourceTree = \"<group>\"; };\n\t\tE87BB01D161A446C008053F9 /* MSURLBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSURLBuilder.h; sourceTree = \"<group>\"; };\n\t\tE87BB01E161A446C008053F9 /* MSURLBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSURLBuilder.m; sourceTree = \"<group>\"; };\n\t\tE87BB021161B57C8008053F9 /* MSUserTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSUserTests.m; sourceTree = \"<group>\"; };\n\t\tE87BB024161B5A4D008053F9 /* MSTableTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTableTests.m; sourceTree = \"<group>\"; };\n\t\tE8C44040170BAD49002FC997 /* MSAPIConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSAPIConnection.h; sourceTree = \"<group>\"; };\n\t\tE8C44041170BAD49002FC997 /* MSAPIConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSAPIConnection.m; sourceTree = \"<group>\"; };\n\t\tE8C44045170BAD93002FC997 /* MSAPIRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSAPIRequest.h; sourceTree = \"<group>\"; };\n\t\tE8C44046170BAD93002FC997 /* MSAPIRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSAPIRequest.m; sourceTree = \"<group>\"; };\n\t\tE8E378FF161E14E800C13F00 /* MSFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MSFilter.h; sourceTree = \"<group>\"; };\n\t\tE8E37902161E2FC500C13F00 /* MSTestFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSTestFilter.h; sourceTree = \"<group>\"; };\n\t\tE8E37903161E2FC500C13F00 /* MSTestFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTestFilter.m; sourceTree = \"<group>\"; };\n\t\tE8E37906161F4D0D00C13F00 /* MSFilterTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSFilterTest.m; sourceTree = \"<group>\"; };\n\t\tE8EA24BB161CFC5300BE055D /* MSNaiveISODateFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSNaiveISODateFormatter.h; sourceTree = \"<group>\"; };\n\t\tE8EA24BC161CFC5300BE055D /* MSNaiveISODateFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSNaiveISODateFormatter.m; sourceTree = \"<group>\"; };\n\t\tE8EA24BE161CFC6400BE055D /* MSURLbuilderTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSURLbuilderTests.m; sourceTree = \"<group>\"; };\n\t\tE8EE7841170CAEDC00C2848F /* MSClientInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSClientInternal.h; sourceTree = \"<group>\"; };\n\t\tE8F33ADB1616659C002DD7C6 /* libWindowsAzureMobileServices.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libWindowsAzureMobileServices.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE8F33ADE1616659C002DD7C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\tE8F33AE21616659C002DD7C6 /* WindowsAzureMobileServices-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"WindowsAzureMobileServices-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tE8F33AEC1616659C002DD7C6 /* WindowsAzureMobileServicesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WindowsAzureMobileServicesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE8F33AF71616659C002DD7C6 /* WindowsAzureMobileServicesTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"WindowsAzureMobileServicesTests-Info.plist\"; sourceTree = \"<group>\"; };\n\t\tE8F33AF91616659C002DD7C6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\tE8F33B0A161667CE002DD7C6 /* MSClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSClient.h; sourceTree = \"<group>\"; };\n\t\tE8F33B0B161667CE002DD7C6 /* MSClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSClient.m; sourceTree = \"<group>\"; };\n\t\tE8F33B0C161667CE002DD7C6 /* MSError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSError.h; sourceTree = \"<group>\"; };\n\t\tE8F33B0D161667CE002DD7C6 /* MSError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSError.m; sourceTree = \"<group>\"; };\n\t\tE8F33B0E161667CE002DD7C6 /* MSQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSQuery.h; sourceTree = \"<group>\"; };\n\t\tE8F33B0F161667CE002DD7C6 /* MSQuery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSQuery.m; sourceTree = \"<group>\"; };\n\t\tE8F33B10161667CE002DD7C6 /* MSTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSTable.h; sourceTree = \"<group>\"; };\n\t\tE8F33B11161667CE002DD7C6 /* MSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTable.m; sourceTree = \"<group>\"; };\n\t\tE8F33B12161667CE002DD7C6 /* MSUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSUser.h; sourceTree = \"<group>\"; };\n\t\tE8F33B13161667CE002DD7C6 /* MSUser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSUser.m; sourceTree = \"<group>\"; };\n\t\tE8F33B14161667CE002DD7C6 /* WindowsAzureMobileServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WindowsAzureMobileServices.h; sourceTree = \"<group>\"; };\n\t\tE8F33B1E16166822002DD7C6 /* MSClientConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSClientConnection.h; sourceTree = \"<group>\"; };\n\t\tE8F33B1F16166822002DD7C6 /* MSClientConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSClientConnection.m; sourceTree = \"<group>\"; };\n\t\tE8F33B2016166822002DD7C6 /* MSTableConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSTableConnection.h; sourceTree = \"<group>\"; };\n\t\tE8F33B2116166822002DD7C6 /* MSTableConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTableConnection.m; sourceTree = \"<group>\"; };\n\t\tE8F33B2216166822002DD7C6 /* MSTableRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSTableRequest.h; sourceTree = \"<group>\"; };\n\t\tE8F33B2316166822002DD7C6 /* MSTableRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTableRequest.m; sourceTree = \"<group>\"; };\n\t\tE8F33B2716166837002DD7C6 /* MSJSONSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSJSONSerializer.h; sourceTree = \"<group>\"; };\n\t\tE8F33B2816166837002DD7C6 /* MSJSONSerializer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSJSONSerializer.m; sourceTree = \"<group>\"; };\n\t\tE8F33B2916166837002DD7C6 /* MSSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSSerializer.h; sourceTree = \"<group>\"; };\n\t\tE8F33B2B1616684F002DD7C6 /* MSPredicateTranslator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSPredicateTranslator.h; sourceTree = \"<group>\"; };\n\t\tE8F33B2C1616684F002DD7C6 /* MSPredicateTranslator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSPredicateTranslator.m; sourceTree = \"<group>\"; };\n\t\tE8F33B34161668C4002DD7C6 /* WindowsAzureMobileServicesFunctionalTests.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = WindowsAzureMobileServicesFunctionalTests.m; sourceTree = \"<group>\"; };\n\t\tE8F33B36161668DA002DD7C6 /* MSJSONSerializerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSJSONSerializerTests.m; sourceTree = \"<group>\"; };\n\t\tE8F33B38161668E4002DD7C6 /* MSPredicateTranslatorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSPredicateTranslatorTests.m; sourceTree = \"<group>\"; };\n\t\tE8F33B3A161668ED002DD7C6 /* MSQueryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSQueryTests.m; sourceTree = \"<group>\"; };\n\t\tF3EA41DC1B0E62F40014B587 /* MSQueuePullOperationInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MSQueuePullOperationInternal.h; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t5A4FAC591B050A870027011D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE8F33AD81616659C002DD7C6 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE84CA4D316236A6E009B2588 /* UIKit.framework in Frameworks */,\n\t\t\t\tE8F33ADF1616659C002DD7C6 /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE8F33AE81616659C002DD7C6 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA28224B0192ACEAE00EF8743 /* CoreData.framework in Frameworks */,\n\t\t\t\tE84CA4DE16272371009B2588 /* UIKit.framework in Frameworks */,\n\t\t\t\tE8F33AF11616659C002DD7C6 /* Foundation.framework in Frameworks */,\n\t\t\t\tE8F33AF41616659C002DD7C6 /* libWindowsAzureMobileServices.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tA24701C11968975B00385DA2 /* Push */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA24701AD196896F500385DA2 /* MSLocalStorage.h */,\n\t\t\t\tA24701AE196896F500385DA2 /* MSLocalStorage.m */,\n\t\t\t\tA24701AF196896F500385DA2 /* MSPush.h */,\n\t\t\t\tA24701B0196896F500385DA2 /* MSPush.m */,\n\t\t\t\tA24701B1196896F500385DA2 /* MSPushHttp.h */,\n\t\t\t\tA24701B2196896F500385DA2 /* MSPushHttp.m */,\n\t\t\t\tA24701B3196896F500385DA2 /* MSPushRequest.h */,\n\t\t\t\tA24701B4196896F500385DA2 /* MSPushRequest.m */,\n\t\t\t\tA24701B5196896F500385DA2 /* MSRegistrationManager.h */,\n\t\t\t\tA24701B6196896F500385DA2 /* MSRegistrationManager.m */,\n\t\t\t);\n\t\t\tname = Push;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA24701C21968978000385DA2 /* Push */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA24701C7196897B300385DA2 /* MSLocalStorageTests.m */,\n\t\t\t\tA24701C3196897A700385DA2 /* MSPushHttpTests.m */,\n\t\t\t\tA24701C4196897A700385DA2 /* MSPushTests.m */,\n\t\t\t);\n\t\t\tname = Push;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA25888F718A19C9500962F9A /* Offline */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA2ACD539192322760012B1ED /* CoreData */,\n\t\t\t\tD0D3B9341B2906EF002A126A /* MSPullSettings.h */,\n\t\t\t\tD0EFD8581B2F785F009CF6DA /* MSPullSettingsInternal.h */,\n\t\t\t\tD0D3B9351B290D80002A126A /* MSPullSettings.m */,\n\t\t\t\tA2C14C6819105D9F00A58609 /* MSSyncContextReadResult.h */,\n\t\t\t\tA2C14C6919105D9F00A58609 /* MSSyncContextReadResult.m */,\n\t\t\t\tA258890718A19D0B00962F9A /* MSSyncTable.h */,\n\t\t\t\tA258890818A19D0B00962F9A /* MSSyncTable.m */,\n\t\t\t\tA258890518A19D0B00962F9A /* MSSyncContext.h */,\n\t\t\t\tA258890618A19D0B00962F9A /* MSSyncContextInternal.h */,\n\t\t\t\tA25888F818A19CBA00962F9A /* MSSyncContext.m */,\n\t\t\t\tA281900618BC08A0001B14E7 /* Operations */,\n\t\t\t);\n\t\t\tname = Offline;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA281900618BC08A0001B14E7 /* Operations */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA25888FC18A19D0B00962F9A /* MSOperationQueue.h */,\n\t\t\t\tA25888FD18A19D0B00962F9A /* MSOperationQueue.m */,\n\t\t\t\tCF4D49851A2E5C96006AEB70 /* MSQueuePullOperation.h */,\n\t\t\t\tF3EA41DC1B0E62F40014B587 /* MSQueuePullOperationInternal.h */,\n\t\t\t\tCF4D49891A2E5CF8006AEB70 /* MSQueuePullOperation.m */,\n\t\t\t\tCF1D745A1A5D85D80074789F /* MSQueuePurgeOperation.h */,\n\t\t\t\tCF1D74581A5D85C60074789F /* MSQueuePurgeOperation.m */,\n\t\t\t\tA2818FFA18BB0660001B14E7 /* MSQueuePushOperation.h */,\n\t\t\t\tA2818FFB18BB0660001B14E7 /* MSQueuePushOperation.m */,\n\t\t\t\tCFAE6E0B1A3B84E400734128 /* MSTableConfigValue.h */,\n\t\t\t\tCFAE6E091A3B84D700734128 /* MSTableConfigValue.m */,\n\t\t\t\tA258890018A19D0B00962F9A /* MSTableOperation.h */,\n\t\t\t\tA258890118A19D0B00962F9A /* MSTableOperation.m */,\n\t\t\t\tA281900218BB2FF5001B14E7 /* MSTableOperationError.h */,\n\t\t\t\tA281900318BB2FF5001B14E7 /* MSTableOperationError.m */,\n\t\t\t\tA258890218A19D0B00962F9A /* MSTableOperationInternal.h */,\n\t\t\t);\n\t\t\tname = Operations;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA295B2B1192AB1DC0067562E /* CoreData */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA295B2B2192AB2040067562E /* MSCoreDataStoreTests.m */,\n\t\t\t\tA28224B1192ACFB700EF8743 /* CoreDataTestModel.xcdatamodeld */,\n\t\t\t\tA29F44A11953CBF30063C0C1 /* MSCoreDataStore+TestHelper.h */,\n\t\t\t\tA29F44A21953CBF30063C0C1 /* MSCoreDataStore+TestHelper.m */,\n\t\t\t\tA24425501A67496600854EF9 /* TodoItem.h */,\n\t\t\t\tA24425511A67496600854EF9 /* TodoItem.m */,\n\t\t\t);\n\t\t\tname = CoreData;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA2ACD539192322760012B1ED /* CoreData */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA2ACD53E192322C50012B1ED /* MSCoreDataStore.h */,\n\t\t\t\tA2ACD53F192322C50012B1ED /* MSCoreDataStore.m */,\n\t\t\t);\n\t\t\tname = CoreData;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA2B8D6011909D42100F198DC /* Offline */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA295B2B1192AB1DC0067562E /* CoreData */,\n\t\t\t\tA2B8D6021909D4AF00F198DC /* Operations */,\n\t\t\t\tA258891818A19D1B00962F9A /* MSOfflinePassthroughHelper.h */,\n\t\t\t\tA258891918A19D1B00962F9A /* MSOfflinePassthroughHelper.m */,\n\t\t\t\tA258891A18A19D1B00962F9A /* MSSyncTableTests.m */,\n\t\t\t\tD0EFD8551B2F7358009CF6DA /* MSPullSettingsTests.m */,\n\t\t\t);\n\t\t\tname = Offline;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA2B8D6021909D4AF00F198DC /* Operations */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA2ADF7E81914481B0078BB16 /* MSTableOperationTests.m */,\n\t\t\t\tA232CCA11AC8FDE800E15D3A /* MSTableOperationErrorTests.m */,\n\t\t\t);\n\t\t\tname = Operations;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA2E7D5EF18237F21007153E4 /* Functional */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA22CF3711825914700660C79 /* MSTable+MSTableTestUtilities.h */,\n\t\t\t\tA22CF3721825914700660C79 /* MSTable+MSTableTestUtilities.m */,\n\t\t\t\tA214410B182631A500C2E762 /* MSTableFuncTests.m */,\n\t\t\t);\n\t\t\tname = Functional;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE84CA4E016272BA2009B2588 /* Login */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t402774F8161F73AB00A23A8F /* MSLoginController.h */,\n\t\t\t\tE814664A165C07EB0038EBE5 /* MSLoginController.m */,\n\t\t\t\tE8653C0A16559C15002CB440 /* MSLoginView.h */,\n\t\t\t\tE8653C0B16559C15002CB440 /* MSLoginView.m */,\n\t\t\t\tE8146640165BE0150038EBE5 /* MSLogin.h */,\n\t\t\t\tE8146641165BE0150038EBE5 /* MSLogin.m */,\n\t\t\t\tE8146644165BE2440038EBE5 /* MSLoginSerializer.h */,\n\t\t\t\tE8146645165BE2440038EBE5 /* MSLoginSerializer.m */,\n\t\t\t);\n\t\t\tname = Login;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8E37901161E2F8D00C13F00 /* Filters */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA24701C9196897C100385DA2 /* MSMultiRequestTestFilter.h */,\n\t\t\t\tA24701CA196897C100385DA2 /* MSMultiRequestTestFilter.m */,\n\t\t\t\tE8E37902161E2FC500C13F00 /* MSTestFilter.h */,\n\t\t\t\tE8E37903161E2FC500C13F00 /* MSTestFilter.m */,\n\t\t\t);\n\t\t\tname = Filters;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33AD01616659C002DD7C6 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8F33AE01616659C002DD7C6 /* Source */,\n\t\t\t\tE8F33AF51616659C002DD7C6 /* Test */,\n\t\t\t\tE8F33ADD1616659C002DD7C6 /* Frameworks */,\n\t\t\t\tE8F33ADC1616659C002DD7C6 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33ADC1616659C002DD7C6 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8F33ADB1616659C002DD7C6 /* libWindowsAzureMobileServices.a */,\n\t\t\t\tE8F33AEC1616659C002DD7C6 /* WindowsAzureMobileServicesTests.xctest */,\n\t\t\t\t5A4FAC5D1B050A880027011D /* WindowsAzureMobileServices.framework */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33ADD1616659C002DD7C6 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA28224AF192ACEAE00EF8743 /* CoreData.framework */,\n\t\t\t\tE84CA4D216236A6E009B2588 /* UIKit.framework */,\n\t\t\t\tE8F33ADE1616659C002DD7C6 /* Foundation.framework */,\n\t\t\t\tA24CC80719A46B6600A68AE0 /* XCTest.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33AE01616659C002DD7C6 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7929542619B7C793006A3829 /* MSQueryResult.h */,\n\t\t\t\t7929542719B7C793006A3829 /* MSQueryResult.m */,\n\t\t\t\tE8F33B14161667CE002DD7C6 /* WindowsAzureMobileServices.h */,\n\t\t\t\tE8F33B0A161667CE002DD7C6 /* MSClient.h */,\n\t\t\t\tE8EE7841170CAEDC00C2848F /* MSClientInternal.h */,\n\t\t\t\tE8F33B0B161667CE002DD7C6 /* MSClient.m */,\n\t\t\t\tCF762EC51A1D366E0018C292 /* MSDateOffset.h */,\n\t\t\t\tCF762EC71A1D36950018C292 /* MSDateOffset.m */,\n\t\t\t\tE8F33B0C161667CE002DD7C6 /* MSError.h */,\n\t\t\t\tE8F33B0D161667CE002DD7C6 /* MSError.m */,\n\t\t\t\tE8F33B0E161667CE002DD7C6 /* MSQuery.h */,\n\t\t\t\t8790D2BF199EA5950000DC4E /* MSQueryInternal.h */,\n\t\t\t\tE8F33B0F161667CE002DD7C6 /* MSQuery.m */,\n\t\t\t\tE8F33B10161667CE002DD7C6 /* MSTable.h */,\n\t\t\t\t8790D2BE199C5D510000DC4E /* MSTableInternal.h */,\n\t\t\t\tE8F33B11161667CE002DD7C6 /* MSTable.m */,\n\t\t\t\tE8F33B12161667CE002DD7C6 /* MSUser.h */,\n\t\t\t\tE8F33B13161667CE002DD7C6 /* MSUser.m */,\n\t\t\t\tE8E378FF161E14E800C13F00 /* MSFilter.h */,\n\t\t\t\tA24701C11968975B00385DA2 /* Push */,\n\t\t\t\tA25888F718A19C9500962F9A /* Offline */,\n\t\t\t\tE84CA4E016272BA2009B2588 /* Login */,\n\t\t\t\tE8F33B1A161667E2002DD7C6 /* Connection */,\n\t\t\t\tE8F33B1B161667EC002DD7C6 /* Serialization */,\n\t\t\t\tE8F33B1C161667F6002DD7C6 /* Query */,\n\t\t\t\tE8F33AE11616659C002DD7C6 /* Supporting Files */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tpath = src;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33AE11616659C002DD7C6 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5A4FAC761B05DFAD0027011D /* Info.plist */,\n\t\t\t\tE8F33AE21616659C002DD7C6 /* WindowsAzureMobileServices-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33AF51616659C002DD7C6 /* Test */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8F33B3116166889002DD7C6 /* Connection */,\n\t\t\t\tE8E37901161E2F8D00C13F00 /* Filters */,\n\t\t\t\tA2E7D5EF18237F21007153E4 /* Functional */,\n\t\t\t\tE87BB01B161A28FC008053F9 /* MSClientTests.m */,\n\t\t\t\tE8E37906161F4D0D00C13F00 /* MSFilterTest.m */,\n\t\t\t\tE8F33B3A161668ED002DD7C6 /* MSQueryTests.m */,\n\t\t\t\tE87BB024161B5A4D008053F9 /* MSTableTests.m */,\n\t\t\t\tCF4D498D1A3253F7006AEB70 /* MSTestWaiter.h */,\n\t\t\t\tCF4D498B1A3253E2006AEB70 /* MSTestWaiter.m */,\n\t\t\t\tE87BB021161B57C8008053F9 /* MSUserTests.m */,\n\t\t\t\tA2B8D6011909D42100F198DC /* Offline */,\n\t\t\t\tA24701C21968978000385DA2 /* Push */,\n\t\t\t\tE8F33B33161668AA002DD7C6 /* Query */,\n\t\t\t\tE8F33B321616689A002DD7C6 /* Serialization */,\n\t\t\t\tE8F33AF61616659C002DD7C6 /* Supporting Files */,\n\t\t\t\tE8F33B34161668C4002DD7C6 /* WindowsAzureMobileServicesFunctionalTests.m */,\n\t\t\t);\n\t\t\tname = Test;\n\t\t\tpath = test;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33AF61616659C002DD7C6 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8F33AF71616659C002DD7C6 /* WindowsAzureMobileServicesTests-Info.plist */,\n\t\t\t\tE8F33AF81616659C002DD7C6 /* InfoPlist.strings */,\n\t\t\t\tCF4D49911A36334C006AEB70 /* settings.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33B1A161667E2002DD7C6 /* Connection */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8F33B1E16166822002DD7C6 /* MSClientConnection.h */,\n\t\t\t\tE8F33B1F16166822002DD7C6 /* MSClientConnection.m */,\n\t\t\t\tE8F33B2016166822002DD7C6 /* MSTableConnection.h */,\n\t\t\t\tE8F33B2116166822002DD7C6 /* MSTableConnection.m */,\n\t\t\t\tE8C44040170BAD49002FC997 /* MSAPIConnection.h */,\n\t\t\t\tE8C44041170BAD49002FC997 /* MSAPIConnection.m */,\n\t\t\t\tE8F33B2216166822002DD7C6 /* MSTableRequest.h */,\n\t\t\t\tE8F33B2316166822002DD7C6 /* MSTableRequest.m */,\n\t\t\t\tE8C44045170BAD93002FC997 /* MSAPIRequest.h */,\n\t\t\t\tE8C44046170BAD93002FC997 /* MSAPIRequest.m */,\n\t\t\t\t870C0C9A199C246700A134DD /* MSSDKFeatures.h */,\n\t\t\t\t870C0C9B199C246700A134DD /* MSSDKFeatures.m */,\n\t\t\t\tE87BB01D161A446C008053F9 /* MSURLBuilder.h */,\n\t\t\t\tE87BB01E161A446C008053F9 /* MSURLBuilder.m */,\n\t\t\t\tE84CA4CD162369BD009B2588 /* MSUserAgentBuilder.h */,\n\t\t\t\tE84CA4CE162369BD009B2588 /* MSUserAgentBuilder.m */,\n\t\t\t);\n\t\t\tname = Connection;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33B1B161667EC002DD7C6 /* Serialization */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8EA24BB161CFC5300BE055D /* MSNaiveISODateFormatter.h */,\n\t\t\t\tE8EA24BC161CFC5300BE055D /* MSNaiveISODateFormatter.m */,\n\t\t\t\tE8F33B2916166837002DD7C6 /* MSSerializer.h */,\n\t\t\t\tE8F33B2716166837002DD7C6 /* MSJSONSerializer.h */,\n\t\t\t\tE8F33B2816166837002DD7C6 /* MSJSONSerializer.m */,\n\t\t\t);\n\t\t\tname = Serialization;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33B1C161667F6002DD7C6 /* Query */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8F33B2B1616684F002DD7C6 /* MSPredicateTranslator.h */,\n\t\t\t\tE8F33B2C1616684F002DD7C6 /* MSPredicateTranslator.m */,\n\t\t\t);\n\t\t\tname = Query;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33B3116166889002DD7C6 /* Connection */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8EA24BE161CFC6400BE055D /* MSURLbuilderTests.m */,\n\t\t\t\tE84CA4D5162373E2009B2588 /* MSUserAgentBuilderTests.m */,\n\t\t\t);\n\t\t\tname = Connection;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33B321616689A002DD7C6 /* Serialization */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8F33B36161668DA002DD7C6 /* MSJSONSerializerTests.m */,\n\t\t\t);\n\t\t\tname = Serialization;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8F33B33161668AA002DD7C6 /* Query */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8F33B38161668E4002DD7C6 /* MSPredicateTranslatorTests.m */,\n\t\t\t);\n\t\t\tname = Query;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t5A4FAC5A1B050A870027011D /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5A4FACB61B05E6580027011D /* MSAPIConnection.h in Headers */,\n\t\t\t\t5A4FAC801B05E4A30027011D /* MSTableOperationInternal.h in Headers */,\n\t\t\t\t5A4FAC9E1B05E56A0027011D /* MSSyncContextReadResult.h in Headers */,\n\t\t\t\t5A4FAC8D1B05E5180027011D /* MSTable.h in Headers */,\n\t\t\t\t5A4FAC891B05E4FE0027011D /* MSError.h in Headers */,\n\t\t\t\t5A4FACA61B05E6000027011D /* MSQueuePullOperation.h in Headers */,\n\t\t\t\t5A4FAC851B05E4E90027011D /* MSClient.h in Headers */,\n\t\t\t\t5A4FAC9A1B05E5580027011D /* MSRegistrationManager.h in Headers */,\n\t\t\t\t5A4FACC71B05E6920027011D /* MSPredicateTranslator.h in Headers */,\n\t\t\t\t5A4FAC921B05E5360027011D /* MSLocalStorage.h in Headers */,\n\t\t\t\t5A4FAC8B1B05E5080027011D /* MSQuery.h in Headers */,\n\t\t\t\t5A4FACC41B05E6870027011D /* MSSerializer.h in Headers */,\n\t\t\t\t5A4FACBE1B05E6730027011D /* MSURLBuilder.h in Headers */,\n\t\t\t\t5A4FACA41B05E5F20027011D /* MSOperationQueue.h in Headers */,\n\t\t\t\t5A4FAC981B05E5500027011D /* MSPushRequest.h in Headers */,\n\t\t\t\t5A4FACC51B05E68C0027011D /* MSJSONSerializer.h in Headers */,\n\t\t\t\t5A4FAC791B05E47F0027011D /* MSLoginSerializer.h in Headers */,\n\t\t\t\tEB446B6E1BAB83BB002F4A27 /* MSPullSettings.h in Headers */,\n\t\t\t\t5A4FAC961B05E5490027011D /* MSPushHttp.h in Headers */,\n\t\t\t\tA38A85701BC35CA1005D63DF /* MSQueuePullOperationInternal.h in Headers */,\n\t\t\t\t5A4FAC911B05E5300027011D /* MSFilter.h in Headers */,\n\t\t\t\t5A4FAC7B1B05E48C0027011D /* MSLogin.h in Headers */,\n\t\t\t\t5A4FAC7F1B05E49B0027011D /* MSLoginController.h in Headers */,\n\t\t\t\t5A4FACB01B05E62C0027011D /* MSTableOperationError.h in Headers */,\n\t\t\t\t5A4FACBC1B05E66C0027011D /* MSSDKFeatures.h in Headers */,\n\t\t\t\t5A4FAC841B05E4DF0027011D /* MSQueryResult.h in Headers */,\n\t\t\t\t5A4FAC8F1B05E5250027011D /* MSUser.h in Headers */,\n\t\t\t\t5A4FACA81B05E60A0027011D /* MSQueuePurgeOperation.h in Headers */,\n\t\t\t\t5A4FACAE1B05E6230027011D /* MSTableOperation.h in Headers */,\n\t\t\t\t5A4FACA01B05E5740027011D /* MSSyncTable.h in Headers */,\n\t\t\t\t5A4FACB81B05E65E0027011D /* MSTableRequest.h in Headers */,\n\t\t\t\t5A4FAC941B05E53F0027011D /* MSPush.h in Headers */,\n\t\t\t\tA38A856F1BC35C8F005D63DF /* MSPullSettingsInternal.h in Headers */,\n\t\t\t\t5A4FAC821B05E4BA0027011D /* MSClientInternal.h in Headers */,\n\t\t\t\t5A4FACA21B05E57D0027011D /* MSSyncContext.h in Headers */,\n\t\t\t\t5A4FACB41B05E6510027011D /* MSTableConnection.h in Headers */,\n\t\t\t\t5A4FAC771B05E40F0027011D /* WindowsAzureMobileServices.h in Headers */,\n\t\t\t\t5A4FACC01B05E67A0027011D /* MSUserAgentBuilder.h in Headers */,\n\t\t\t\t5A4FACC21B05E6810027011D /* MSNaiveISODateFormatter.h in Headers */,\n\t\t\t\t5A4FACBA1B05E6650027011D /* MSAPIRequest.h in Headers */,\n\t\t\t\t5A4FAC811B05E4A90027011D /* MSSyncContextInternal.h in Headers */,\n\t\t\t\t5A4FAC9C1B05E5620027011D /* MSCoreDataStore.h in Headers */,\n\t\t\t\t5A4FAC7D1B05E4940027011D /* MSLoginView.h in Headers */,\n\t\t\t\t5A4FACAA1B05E6130027011D /* MSQueuePushOperation.h in Headers */,\n\t\t\t\t5A4FACB21B05E6460027011D /* MSClientConnection.h in Headers */,\n\t\t\t\t5A4FAC871B05E4F40027011D /* MSDateOffset.h in Headers */,\n\t\t\t\t5A4FACAC1B05E61D0027011D /* MSTableConfigValue.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE8E3790C161F766400C13F00 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t7929542819B7C793006A3829 /* MSQueryResult.h in Headers */,\n\t\t\t\tE8E3790D161F769D00C13F00 /* WindowsAzureMobileServices.h in Headers */,\n\t\t\t\tE84CA4E116272C15009B2588 /* MSLoginController.h in Headers */,\n\t\t\t\tE8E3790E161F769D00C13F00 /* MSClient.h in Headers */,\n\t\t\t\tE8E37911161F769D00C13F00 /* MSTable.h in Headers */,\n\t\t\t\tA24701B7196896F500385DA2 /* MSLocalStorage.h in Headers */,\n\t\t\t\tA24701BD196896F500385DA2 /* MSPushRequest.h in Headers */,\n\t\t\t\tE8E37910161F769D00C13F00 /* MSQuery.h in Headers */,\n\t\t\t\tA258890F18A19D0B00962F9A /* MSTableOperation.h in Headers */,\n\t\t\t\tA258891618A19D0B00962F9A /* MSSyncTable.h in Headers */,\n\t\t\t\tE8E37912161F769D00C13F00 /* MSUser.h in Headers */,\n\t\t\t\tA258891418A19D0B00962F9A /* MSSyncContext.h in Headers */,\n\t\t\t\tD0D3B9371B2A267F002A126A /* MSPullSettings.h in Headers */,\n\t\t\t\tA281900418BB2FF5001B14E7 /* MSTableOperationError.h in Headers */,\n\t\t\t\tE8E37913161F769D00C13F00 /* MSFilter.h in Headers */,\n\t\t\t\tA2ACD540192322C50012B1ED /* MSCoreDataStore.h in Headers */,\n\t\t\t\tCF762EC61A1D366E0018C292 /* MSDateOffset.h in Headers */,\n\t\t\t\tA24701B9196896F500385DA2 /* MSPush.h in Headers */,\n\t\t\t\tF3EA41DD1B0E63470014B587 /* MSQueuePullOperationInternal.h in Headers */,\n\t\t\t\t870C0C9C199C246700A134DD /* MSSDKFeatures.h in Headers */,\n\t\t\t\tE8E3790F161F769D00C13F00 /* MSError.h in Headers */,\n\t\t\t\tA2C14C6A19105D9F00A58609 /* MSSyncContextReadResult.h in Headers */,\n\t\t\t\tE8E37914161F769D00C13F00 /* MSClientConnection.h in Headers */,\n\t\t\t\tE8E37915161F769D00C13F00 /* MSTableConnection.h in Headers */,\n\t\t\t\tA2818FFC18BB0660001B14E7 /* MSQueuePushOperation.h in Headers */,\n\t\t\t\tA258891118A19D0B00962F9A /* MSTableOperationInternal.h in Headers */,\n\t\t\t\tE8E37916161F769D00C13F00 /* MSTableRequest.h in Headers */,\n\t\t\t\tCF4D49861A2E5C96006AEB70 /* MSQueuePullOperation.h in Headers */,\n\t\t\t\tE8E37917161F769D00C13F00 /* MSURLBuilder.h in Headers */,\n\t\t\t\tE8E37918161F769D00C13F00 /* MSNaiveISODateFormatter.h in Headers */,\n\t\t\t\tE8E37919161F769D00C13F00 /* MSSerializer.h in Headers */,\n\t\t\t\tE8E3791A161F769D00C13F00 /* MSJSONSerializer.h in Headers */,\n\t\t\t\tE8E3791B161F769D00C13F00 /* MSPredicateTranslator.h in Headers */,\n\t\t\t\tE84CA4CF162369BD009B2588 /* MSUserAgentBuilder.h in Headers */,\n\t\t\t\tE8146642165BE0150038EBE5 /* MSLogin.h in Headers */,\n\t\t\t\tE8653C0C16559C15002CB440 /* MSLoginView.h in Headers */,\n\t\t\t\tE8146646165BE2440038EBE5 /* MSLoginSerializer.h in Headers */,\n\t\t\t\tA24701BB196896F500385DA2 /* MSPushHttp.h in Headers */,\n\t\t\t\tA258890B18A19D0B00962F9A /* MSOperationQueue.h in Headers */,\n\t\t\t\tCFAE6E0C1A3B84E400734128 /* MSTableConfigValue.h in Headers */,\n\t\t\t\tCF1D745B1A5D9CAB0074789F /* MSQueuePurgeOperation.h in Headers */,\n\t\t\t\tE8C44042170BAD49002FC997 /* MSAPIConnection.h in Headers */,\n\t\t\t\tA258891518A19D0B00962F9A /* MSSyncContextInternal.h in Headers */,\n\t\t\t\tE8C44047170BAD93002FC997 /* MSAPIRequest.h in Headers */,\n\t\t\t\tE8EE7842170CAEDC00C2848F /* MSClientInternal.h in Headers */,\n\t\t\t\tA24701BF196896F500385DA2 /* MSRegistrationManager.h in Headers */,\n\t\t\t\tD0EFD8591B2F785F009CF6DA /* MSPullSettingsInternal.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t5A4FAC5C1B050A870027011D /* WindowsAzureMobileServicesFramework */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 5A4FAC741B050A880027011D /* Build configuration list for PBXNativeTarget \"WindowsAzureMobileServicesFramework\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5A4FAC581B050A870027011D /* Sources */,\n\t\t\t\t5A4FAC591B050A870027011D /* Frameworks */,\n\t\t\t\t5A4FAC5A1B050A870027011D /* Headers */,\n\t\t\t\t5A4FAC5B1B050A870027011D /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = WindowsAzureMobileServicesFramework;\n\t\t\tproductName = WindowsAzureMobileServicesFramework;\n\t\t\tproductReference = 5A4FAC5D1B050A880027011D /* WindowsAzureMobileServices.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tE8F33ADA1616659C002DD7C6 /* WindowsAzureMobileServices */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E8F33B001616659C002DD7C6 /* Build configuration list for PBXNativeTarget \"WindowsAzureMobileServices\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE8F33AD71616659C002DD7C6 /* Sources */,\n\t\t\t\tE8F33AD81616659C002DD7C6 /* Frameworks */,\n\t\t\t\tE8E3790C161F766400C13F00 /* Headers */,\n\t\t\t\tE8F33AD91616659C002DD7C6 /* Copy Files */,\n\t\t\t\tE8E37A27161FAA9600C13F00 /* ShellScript */,\n\t\t\t\tCF48157A1A363A330044D898 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = WindowsAzureMobileServices;\n\t\t\tproductName = WindowsAzureMobileServices;\n\t\t\tproductReference = E8F33ADB1616659C002DD7C6 /* libWindowsAzureMobileServices.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tE8F33AEB1616659C002DD7C6 /* WindowsAzureMobileServicesTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E8F33B031616659C002DD7C6 /* Build configuration list for PBXNativeTarget \"WindowsAzureMobileServicesTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE8F33AE71616659C002DD7C6 /* Sources */,\n\t\t\t\tE8F33AE81616659C002DD7C6 /* Frameworks */,\n\t\t\t\tE8F33AE91616659C002DD7C6 /* Resources */,\n\t\t\t\tE8F33AEA1616659C002DD7C6 /* ShellScript */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tE8F33AF31616659C002DD7C6 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = WindowsAzureMobileServicesTests;\n\t\t\tproductName = WindowsAzureMobileServicesTests;\n\t\t\tproductReference = E8F33AEC1616659C002DD7C6 /* WindowsAzureMobileServicesTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tE8F33AD21616659C002DD7C6 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastTestingUpgradeCheck = 0510;\n\t\t\t\tLastUpgradeCheck = 0700;\n\t\t\t\tORGANIZATIONNAME = \"Windows Azure\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t5A4FAC5C1B050A870027011D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.3.1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = E8F33AD51616659C002DD7C6 /* Build configuration list for PBXProject \"WindowsAzureMobileServices\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = E8F33AD01616659C002DD7C6;\n\t\t\tproductRefGroup = E8F33ADC1616659C002DD7C6 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tE8F33ADA1616659C002DD7C6 /* WindowsAzureMobileServices */,\n\t\t\t\t5A4FAC5C1B050A870027011D /* WindowsAzureMobileServicesFramework */,\n\t\t\t\tE8F33AEB1616659C002DD7C6 /* WindowsAzureMobileServicesTests */,\n\t\t\t\tE8E37977161F8E6B00C13F00 /* Framework */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t5A4FAC5B1B050A870027011D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tCF48157A1A363A330044D898 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE8F33AE91616659C002DD7C6 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA28224B4192AD00E00EF8743 /* CoreDataTestModel.xcdatamodeld in Resources */,\n\t\t\t\tCF4D49921A363537006AEB70 /* settings.plist in Resources */,\n\t\t\t\tE8F33AFA1616659C002DD7C6 /* InfoPlist.strings in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\tE8E3797D161F8ED900C13F00 /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"set -e\\n\\n# Don't call this script from this script\\nif [[ ${WAMS_BUILDING:0} ]]; then\\n    exit 0\\nfi\\nexport WAMS_BUILDING=1\\n\\n# Set some variables\\nOUTPUT=${BUILT_PRODUCTS_DIR}\\nWAMS=\\\"WindowsAzureMobileServices\\\"\\nWAMS_FRAMEWORK=\\\"${WAMS}.framework\\\"\\nWAMS_LIB=\\\"lib${WAMS}.a\\\"\\n\\n# Determine whether device or simulator and the version of the SDK \\nif [[ ! \\\"$SDK_NAME\\\" =~ ([A-Za-z]+)([0-9]+.*$) ]]; then\\n    echo \\\"Unsupported SDK: $SDK-NAME\\\"\\n    exit 1\\nfi\\n\\n# Determine the other (device/simulator) and arch\\nif [[ ${BASH_REMATCH[1]} == \\\"iphoneos\\\" ]]; then\\n    OTHER_SDK=iphonesimulator${BASH_REMATCH[2]}\\n    OTHER_OUTPUT=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator\\n    OTHER_TEMP_OUTPUT=${PROJECT_TEMP_DIR}/${CONFIGURATION}-iphonesimulator\\n    OTHER_ARCH=\\\"i386 x86_64\\\"\\nelse\\n    OTHER_SDK=iphoneos${BASH_REMATCH[2]}\\n    OTHER_OUTPUT=${BUILD_DIR}/${CONFIGURATION}-iphoneos\\n    OTHER_TEMP_OUTPUT=${PROJECT_TEMP_DIR}/${CONFIGURATION}-iphoneos\\n    OTHER_ARCH=\\\"arm64 armv7 armv7s\\\"\\nfi\\n\\n# Build the other library\\nxcodebuild -project \\\"${PROJECT_FILE_PATH}\\\" -target \\\"${TARGET_NAME}\\\" -configuration \\\"${CONFIGURATION}\\\" -sdk ${OTHER_SDK} BUILD_DIR=\\\"${BUILD_DIR}\\\" CONFIGURATION_TEMP_DIR=\\\"${OTHER_TEMP_OUTPUT}\\\" ARCHS=\\\"${OTHER_ARCH}\\\" $ACTION\\n\\n# Merge the libraries with lipo for both output dirs\\nlipo -create \\\"${OUTPUT}/${WAMS_LIB}\\\" \\\"${OTHER_OUTPUT}/${WAMS_LIB}\\\" -output \\\"${OUTPUT}/${WAMS_FRAMEWORK}/Versions/A/${WAMS}\\\"\\nlipo -create \\\"${OUTPUT}/${WAMS_LIB}\\\" \\\"${OTHER_OUTPUT}/${WAMS_LIB}\\\" -output \\\"${OTHER_OUTPUT}/${WAMS_FRAMEWORK}/Versions/A/${WAMS}\\\"\";\n\t\t};\n\t\tE8E37A27161FAA9600C13F00 /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"# Exit immediately on any errors\\nset -e\\n\\n# Set some variables\\nOUTPUT=${BUILT_PRODUCTS_DIR}\\nWAMS=\\\"WindowsAzureMobileServices\\\"\\nWAMS_FRAMEWORK=\\\"${WAMS}.framework\\\"\\nWAMS_LIB=\\\"lib${WAMS}.a\\\"\\nHEADERS=\\\"Headers\\\"\\n\\n# Create the needed directories for the framework\\nmkdir -p \\\"${OUTPUT}/${WAMS_FRAMEWORK}/Versions/A\\\"\\nmkdir -p \\\"${OUTPUT}/${WAMS_FRAMEWORK}/Versions/A/Headers\\\"\\n\\n# Add the headers and lib to the framework\\ncp -a \\\"${OUTPUT}/${HEADERS}/\\\" \\\"${OUTPUT}/${WAMS_FRAMEWORK}/Versions/A/Headers\\\"\\nlipo -create \\\"${OUTPUT}/${WAMS_LIB}\\\" -output \\\"${OUTPUT}/${WAMS_FRAMEWORK}/Versions/A/${WAMS}\\\"\\n\\n# Set up the links to complete the framework\\nln -sf Versions/Current/Headers \\\"${OUTPUT}/${WAMS_FRAMEWORK}/Headers\\\"\\nln -sf \\\"Versions/Current/${WAMS}\\\" \\\"${OUTPUT}/${WAMS_FRAMEWORK}/${WAMS}\\\"\\nln -sf A \\\"${OUTPUT}/${WAMS_FRAMEWORK}/Versions/Current\\\"\";\n\t\t};\n\t\tE8F33AEA1616659C002DD7C6 /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"# Run the unit tests in this test bundle.\\n\\\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\\\"\\n\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t5A4FAC581B050A870027011D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEB446B6D1BAB801A002F4A27 /* MSPullSettings.m in Sources */,\n\t\t\t\t5A4FACB71B05E65B0027011D /* MSAPIConnection.m in Sources */,\n\t\t\t\t5A4FAC8E1B05E5220027011D /* MSTable.m in Sources */,\n\t\t\t\t5A4FAC881B05E4FA0027011D /* MSDateOffset.m in Sources */,\n\t\t\t\t5A4FACB31B05E64A0027011D /* MSClientConnection.m in Sources */,\n\t\t\t\t5A4FACC61B05E68F0027011D /* MSJSONSerializer.m in Sources */,\n\t\t\t\t5A4FACC31B05E6840027011D /* MSNaiveISODateFormatter.m in Sources */,\n\t\t\t\t5A4FAC831B05E4DB0027011D /* MSQueryResult.m in Sources */,\n\t\t\t\t5A4FACBF1B05E6770027011D /* MSURLBuilder.m in Sources */,\n\t\t\t\t5A4FAC781B05E4790027011D /* MSLoginSerializer.m in Sources */,\n\t\t\t\t5A4FACC81B05E6950027011D /* MSPredicateTranslator.m in Sources */,\n\t\t\t\t5A4FACA31B05E5860027011D /* MSSyncContext.m in Sources */,\n\t\t\t\t5A4FAC7C1B05E4910027011D /* MSLoginView.m in Sources */,\n\t\t\t\t5A4FAC901B05E52C0027011D /* MSUser.m in Sources */,\n\t\t\t\t5A4FACBD1B05E6700027011D /* MSSDKFeatures.m in Sources */,\n\t\t\t\t5A4FACC11B05E67E0027011D /* MSUserAgentBuilder.m in Sources */,\n\t\t\t\t5A4FACAB1B05E6160027011D /* MSQueuePushOperation.m in Sources */,\n\t\t\t\t5A4FACAF1B05E6280027011D /* MSTableOperation.m in Sources */,\n\t\t\t\t5A4FAC7A1B05E4890027011D /* MSLogin.m in Sources */,\n\t\t\t\t5A4FACBB1B05E6680027011D /* MSAPIRequest.m in Sources */,\n\t\t\t\t5A4FAC861B05E4F00027011D /* MSClient.m in Sources */,\n\t\t\t\t5A4FACB51B05E6550027011D /* MSTableConnection.m in Sources */,\n\t\t\t\t5A4FAC9B1B05E55C0027011D /* MSRegistrationManager.m in Sources */,\n\t\t\t\t5A4FAC8A1B05E5040027011D /* MSError.m in Sources */,\n\t\t\t\t5A4FAC971B05E54D0027011D /* MSPushHttp.m in Sources */,\n\t\t\t\t5A4FACB11B05E6320027011D /* MSTableOperationError.m in Sources */,\n\t\t\t\t5A4FACA71B05E6060027011D /* MSQueuePullOperation.m in Sources */,\n\t\t\t\t5A4FAC8C1B05E5110027011D /* MSQuery.m in Sources */,\n\t\t\t\t5A4FAC991B05E5540027011D /* MSPushRequest.m in Sources */,\n\t\t\t\t5A4FAC9F1B05E5710027011D /* MSSyncContextReadResult.m in Sources */,\n\t\t\t\t5A4FAC7E1B05E4970027011D /* MSLoginController.m in Sources */,\n\t\t\t\t5A4FACA51B05E5F60027011D /* MSOperationQueue.m in Sources */,\n\t\t\t\t5A4FACB91B05E6620027011D /* MSTableRequest.m in Sources */,\n\t\t\t\t5A4FACAD1B05E6200027011D /* MSTableConfigValue.m in Sources */,\n\t\t\t\t5A4FAC931B05E53B0027011D /* MSLocalStorage.m in Sources */,\n\t\t\t\t5A4FACA91B05E60F0027011D /* MSQueuePurgeOperation.m in Sources */,\n\t\t\t\t5A4FACA11B05E57A0027011D /* MSSyncTable.m in Sources */,\n\t\t\t\t5A4FAC9D1B05E5670027011D /* MSCoreDataStore.m in Sources */,\n\t\t\t\t5A4FAC951B05E5460027011D /* MSPush.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE8F33AD71616659C002DD7C6 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tCF762EC91A1D37A40018C292 /* MSDateOffset.m in Sources */,\n\t\t\t\tE8F33B15161667CE002DD7C6 /* MSClient.m in Sources */,\n\t\t\t\tA258890C18A19D0B00962F9A /* MSOperationQueue.m in Sources */,\n\t\t\t\tD0D3B9361B290D80002A126A /* MSPullSettings.m in Sources */,\n\t\t\t\tE8F33B16161667CE002DD7C6 /* MSError.m in Sources */,\n\t\t\t\t7929542919B7C793006A3829 /* MSQueryResult.m in Sources */,\n\t\t\t\tE8F33B17161667CE002DD7C6 /* MSQuery.m in Sources */,\n\t\t\t\tE8F33B18161667CE002DD7C6 /* MSTable.m in Sources */,\n\t\t\t\tA25888F918A19CBA00962F9A /* MSSyncContext.m in Sources */,\n\t\t\t\tCF4D498A1A2E5CF8006AEB70 /* MSQueuePullOperation.m in Sources */,\n\t\t\t\tE8F33B19161667CE002DD7C6 /* MSUser.m in Sources */,\n\t\t\t\tE8F33B2416166822002DD7C6 /* MSClientConnection.m in Sources */,\n\t\t\t\tA24701C0196896F500385DA2 /* MSRegistrationManager.m in Sources */,\n\t\t\t\t870C0C9D199C246700A134DD /* MSSDKFeatures.m in Sources */,\n\t\t\t\tA281900518BB2FF5001B14E7 /* MSTableOperationError.m in Sources */,\n\t\t\t\tE8F33B2516166822002DD7C6 /* MSTableConnection.m in Sources */,\n\t\t\t\tE8F33B2616166822002DD7C6 /* MSTableRequest.m in Sources */,\n\t\t\t\tE8F33B2A16166837002DD7C6 /* MSJSONSerializer.m in Sources */,\n\t\t\t\tE8F33B2F1616684F002DD7C6 /* MSPredicateTranslator.m in Sources */,\n\t\t\t\tA258891018A19D0B00962F9A /* MSTableOperation.m in Sources */,\n\t\t\t\tA258891718A19D0B00962F9A /* MSSyncTable.m in Sources */,\n\t\t\t\tE87BB01F161A446C008053F9 /* MSURLBuilder.m in Sources */,\n\t\t\t\tE8EA24BD161CFC5300BE055D /* MSNaiveISODateFormatter.m in Sources */,\n\t\t\t\tA24701BE196896F500385DA2 /* MSPushRequest.m in Sources */,\n\t\t\t\tE84CA4D0162369BD009B2588 /* MSUserAgentBuilder.m in Sources */,\n\t\t\t\tE8653C0D16559C15002CB440 /* MSLoginView.m in Sources */,\n\t\t\t\tE8146643165BE0150038EBE5 /* MSLogin.m in Sources */,\n\t\t\t\tA2C14C6B19105D9F00A58609 /* MSSyncContextReadResult.m in Sources */,\n\t\t\t\tE8146647165BE2440038EBE5 /* MSLoginSerializer.m in Sources */,\n\t\t\t\tE814664B165C07EB0038EBE5 /* MSLoginController.m in Sources */,\n\t\t\t\tA2ACD541192322C50012B1ED /* MSCoreDataStore.m in Sources */,\n\t\t\t\tE8C44043170BAD49002FC997 /* MSAPIConnection.m in Sources */,\n\t\t\t\tA24701BC196896F500385DA2 /* MSPushHttp.m in Sources */,\n\t\t\t\tE8C44048170BAD93002FC997 /* MSAPIRequest.m in Sources */,\n\t\t\t\tCF1D74591A5D85C60074789F /* MSQueuePurgeOperation.m in Sources */,\n\t\t\t\tA2818FFD18BB0660001B14E7 /* MSQueuePushOperation.m in Sources */,\n\t\t\t\tA24701B8196896F500385DA2 /* MSLocalStorage.m in Sources */,\n\t\t\t\tCFAE6E0A1A3B84D700734128 /* MSTableConfigValue.m in Sources */,\n\t\t\t\tA24701BA196896F500385DA2 /* MSPush.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE8F33AE71616659C002DD7C6 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA24701CB196897C100385DA2 /* MSMultiRequestTestFilter.m in Sources */,\n\t\t\t\tE8F33B3C16166945002DD7C6 /* WindowsAzureMobileServicesFunctionalTests.m in Sources */,\n\t\t\t\tA214410C182631A500C2E762 /* MSTableFuncTests.m in Sources */,\n\t\t\t\tA232CCA21AC8FDE800E15D3A /* MSTableOperationErrorTests.m in Sources */,\n\t\t\t\tE8F33B3D1616694C002DD7C6 /* MSQueryTests.m in Sources */,\n\t\t\t\tE8F33B3E16166956002DD7C6 /* MSJSONSerializerTests.m in Sources */,\n\t\t\t\tA258891F18A1A30500962F9A /* MSOfflinePassthroughHelper.m in Sources */,\n\t\t\t\tA24701C8196897B300385DA2 /* MSLocalStorageTests.m in Sources */,\n\t\t\t\tE8F33B3F1616695E002DD7C6 /* MSPredicateTranslatorTests.m in Sources */,\n\t\t\t\tA2ADF7E91914481B0078BB16 /* MSTableOperationTests.m in Sources */,\n\t\t\t\tA258891E18A1A30000962F9A /* MSSyncTableTests.m in Sources */,\n\t\t\t\tE87BB01C161A28FC008053F9 /* MSClientTests.m in Sources */,\n\t\t\t\tE87BB022161B57C8008053F9 /* MSUserTests.m in Sources */,\n\t\t\t\tE87BB025161B5A4D008053F9 /* MSTableTests.m in Sources */,\n\t\t\t\tE8EA24C0161CFCF400BE055D /* MSURLbuilderTests.m in Sources */,\n\t\t\t\tA24701C6196897A700385DA2 /* MSPushTests.m in Sources */,\n\t\t\t\tA28224B3192ACFB700EF8743 /* CoreDataTestModel.xcdatamodeld in Sources */,\n\t\t\t\tE8E37904161E2FC500C13F00 /* MSTestFilter.m in Sources */,\n\t\t\t\tD0EFD8571B2F73B0009CF6DA /* MSPullSettingsTests.m in Sources */,\n\t\t\t\tA22CF3731825914700660C79 /* MSTable+MSTableTestUtilities.m in Sources */,\n\t\t\t\tA24701C5196897A700385DA2 /* MSPushHttpTests.m in Sources */,\n\t\t\t\tE8E37907161F4D0D00C13F00 /* MSFilterTest.m in Sources */,\n\t\t\t\tA232CCA31AC9C86D00E15D3A /* TodoItem.m in Sources */,\n\t\t\t\tA295B2B3192AB2040067562E /* MSCoreDataStoreTests.m in Sources */,\n\t\t\t\tA29F44A31953CBF30063C0C1 /* MSCoreDataStore+TestHelper.m in Sources */,\n\t\t\t\tE84CA4D6162373E2009B2588 /* MSUserAgentBuilderTests.m in Sources */,\n\t\t\t\tA38A85711BC35CE5005D63DF /* MSTestWaiter.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tE8E3797C161F8EB400C13F00 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = E8F33ADA1616659C002DD7C6 /* WindowsAzureMobileServices */;\n\t\t\ttargetProxy = E8E3797B161F8EB400C13F00 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE8F33AF31616659C002DD7C6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = E8F33ADA1616659C002DD7C6 /* WindowsAzureMobileServices */;\n\t\t\ttargetProxy = E8F33AF21616659C002DD7C6 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tE8F33AF81616659C002DD7C6 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tE8F33AF91616659C002DD7C6 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t5A4FAC701B050A880027011D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"compiler-default\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"compiler-default\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tINFOPLIST_FILE = src/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"Microsoft.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = WindowsAzureMobileServices;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tWARNING_CFLAGS = (\n\t\t\t\t\t\"-Wno-unused-const-variable\",\n\t\t\t\t\t\"-Wno-gcc-compat\",\n\t\t\t\t\t\"-Wno-error=unknown-warning-option\",\n\t\t\t\t);\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t5A4FAC711B050A880027011D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"compiler-default\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"compiler-default\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tINFOPLIST_FILE = src/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"Microsoft.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = WindowsAzureMobileServices;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tWARNING_CFLAGS = (\n\t\t\t\t\t\"-Wno-unused-const-variable\",\n\t\t\t\t\t\"-Wno-gcc-compat\",\n\t\t\t\t\t\"-Wno-error=unknown-warning-option\",\n\t\t\t\t);\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE8E37979161F8E6B00C13F00 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE8E3797A161F8E6B00C13F00 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE8F33AFE1616659C002DD7C6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVERSIONING_SYSTEM = \"\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE8F33AFF1616659C002DD7C6 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE8F33B011616659C002DD7C6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEAD_CODE_STRIPPING = NO;\n\t\t\t\tDSTROOT = /tmp/WindowsAzureMobileServices.dst;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"src/WindowsAzureMobileServices-Prefix.pch\";\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = headers;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSTRIP_STYLE = \"non-global\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE8F33B021616659C002DD7C6 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEAD_CODE_STRIPPING = NO;\n\t\t\t\tDSTROOT = /tmp/WindowsAzureMobileServices.dst;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"src/WindowsAzureMobileServices-Prefix.pch\";\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = headers;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSTRIP_STYLE = \"non-global\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE8F33B041616659C002DD7C6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SDKROOT)/Developer/Library/Frameworks\\\"\",\n\t\t\t\t\t\"\\\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\\\"\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"src/WindowsAzureMobileServices-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"test/WindowsAzureMobileServicesTests-Info.plist\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"Microsoft.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE8F33B051616659C002DD7C6 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SDKROOT)/Developer/Library/Frameworks\\\"\",\n\t\t\t\t\t\"\\\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\\\"\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"src/WindowsAzureMobileServices-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"test/WindowsAzureMobileServicesTests-Info.plist\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"Microsoft.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t5A4FAC741B050A880027011D /* Build configuration list for PBXNativeTarget \"WindowsAzureMobileServicesFramework\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t5A4FAC701B050A880027011D /* Debug */,\n\t\t\t\t5A4FAC711B050A880027011D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE8E37978161F8E6B00C13F00 /* Build configuration list for PBXAggregateTarget \"Framework\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE8E37979161F8E6B00C13F00 /* Debug */,\n\t\t\t\tE8E3797A161F8E6B00C13F00 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE8F33AD51616659C002DD7C6 /* Build configuration list for PBXProject \"WindowsAzureMobileServices\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE8F33AFE1616659C002DD7C6 /* Debug */,\n\t\t\t\tE8F33AFF1616659C002DD7C6 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE8F33B001616659C002DD7C6 /* Build configuration list for PBXNativeTarget \"WindowsAzureMobileServices\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE8F33B011616659C002DD7C6 /* Debug */,\n\t\t\t\tE8F33B021616659C002DD7C6 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE8F33B031616659C002DD7C6 /* Build configuration list for PBXNativeTarget \"WindowsAzureMobileServicesTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE8F33B041616659C002DD7C6 /* Debug */,\n\t\t\t\tE8F33B051616659C002DD7C6 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\n/* Begin XCVersionGroup section */\n\t\tA28224B1192ACFB700EF8743 /* CoreDataTestModel.xcdatamodeld */ = {\n\t\t\tisa = XCVersionGroup;\n\t\t\tchildren = (\n\t\t\t\tA28224B2192ACFB700EF8743 /* CoreDataTestModel.xcdatamodel */,\n\t\t\t);\n\t\t\tcurrentVersion = A28224B2192ACFB700EF8743 /* CoreDataTestModel.xcdatamodel */;\n\t\t\tpath = CoreDataTestModel.xcdatamodeld;\n\t\t\tsourceTree = \"<group>\";\n\t\t\tversionGroupType = wrapper.xcdatamodel;\n\t\t};\n/* End XCVersionGroup section */\n\t};\n\trootObject = E8F33AD21616659C002DD7C6 /* Project object */;\n}\n"
  },
  {
    "path": "sdk/iOS/WindowsAzureMobileServices.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:WindowsAzureMobileServices.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "sdk/iOS/WindowsAzureMobileServices.xcodeproj/xcshareddata/xcschemes/AzureMobileServicesFunctionalTests.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"E8F33ADA1616659C002DD7C6\"\n               BuildableName = \"libWindowsAzureMobileServices.a\"\n               BlueprintName = \"WindowsAzureMobileServices\"\n               ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"E8F33AEB1616659C002DD7C6\"\n               BuildableName = \"WindowsAzureMobileServicesTests.xctest\"\n               BlueprintName = \"WindowsAzureMobileServicesTests\"\n               ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n            </BuildableReference>\n            <SkippedTests>\n               <Test\n                  Identifier = \"MSClientTests\">\n               </Test>\n               <Test\n                  Identifier = \"MSFilterTest\">\n               </Test>\n               <Test\n                  Identifier = \"MSJSONSerializerTests\">\n               </Test>\n               <Test\n                  Identifier = \"MSLocalStorageTests\">\n               </Test>\n               <Test\n                  Identifier = \"MSPredicateTranslatorTests\">\n               </Test>\n               <Test\n                  Identifier = \"MSPushHttpTests\">\n               </Test>\n               <Test\n                  Identifier = \"MSPushTests\">\n               </Test>\n               <Test\n                  Identifier = \"MSQueryTests\">\n               </Test>\n               <Test\n                  Identifier = \"MSTableTests\">\n               </Test>\n               <Test\n                  Identifier = \"MSURLBuilderTests\">\n               </Test>\n               <Test\n                  Identifier = \"MSUserAgentBuilderTests\">\n               </Test>\n               <Test\n                  Identifier = \"MSUserTests\">\n               </Test>\n            </SkippedTests>\n            <LocationScenarioReference\n               identifier = \"com.apple.dt.IDEFoundation.CurrentLocationScenarioIdentifier\"\n               referenceType = \"1\">\n            </LocationScenarioReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"E8F33ADA1616659C002DD7C6\"\n            BuildableName = \"libWindowsAzureMobileServices.a\"\n            BlueprintName = \"WindowsAzureMobileServices\"\n            ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"E8F33ADA1616659C002DD7C6\"\n            BuildableName = \"libWindowsAzureMobileServices.a\"\n            BlueprintName = \"WindowsAzureMobileServices\"\n            ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "sdk/iOS/WindowsAzureMobileServices.xcodeproj/xcshareddata/xcschemes/WindowsAzureMobileServices.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"E8F33ADA1616659C002DD7C6\"\n               BuildableName = \"libWindowsAzureMobileServices.a\"\n               BlueprintName = \"WindowsAzureMobileServices\"\n               ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"E8F33AEB1616659C002DD7C6\"\n               BuildableName = \"WindowsAzureMobileServicesTests.xctest\"\n               BlueprintName = \"WindowsAzureMobileServicesTests\"\n               ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n            </BuildableReference>\n            <SkippedTests>\n               <Test\n                  Identifier = \"MSTableFuncTests\">\n               </Test>\n               <Test\n                  Identifier = \"WindowsAzureMobileServicesFunctionalTests\">\n               </Test>\n            </SkippedTests>\n            <LocationScenarioReference\n               identifier = \"com.apple.dt.IDEFoundation.CurrentLocationScenarioIdentifier\"\n               referenceType = \"1\">\n            </LocationScenarioReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"E8F33ADA1616659C002DD7C6\"\n            BuildableName = \"libWindowsAzureMobileServices.a\"\n            BlueprintName = \"WindowsAzureMobileServices\"\n            ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"E8F33ADA1616659C002DD7C6\"\n            BuildableName = \"libWindowsAzureMobileServices.a\"\n            BlueprintName = \"WindowsAzureMobileServices\"\n            ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "sdk/iOS/WindowsAzureMobileServices.xcodeproj/xcshareddata/xcschemes/WindowsAzureMobileServicesFramework.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"5A4FAC5C1B050A870027011D\"\n               BuildableName = \"WindowsAzureMobileServices.framework\"\n               BlueprintName = \"WindowsAzureMobileServicesFramework\"\n               ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"5A4FAC661B050A880027011D\"\n               BuildableName = \"WindowsAzureMobileServicesFrameworkTests.xctest\"\n               BlueprintName = \"WindowsAzureMobileServicesFrameworkTests\"\n               ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"5A4FAC661B050A880027011D\"\n               BuildableName = \"WindowsAzureMobileServicesFrameworkTests.xctest\"\n               BlueprintName = \"WindowsAzureMobileServicesFrameworkTests\"\n               ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"5A4FAC5C1B050A870027011D\"\n            BuildableName = \"WindowsAzureMobileServices.framework\"\n            BlueprintName = \"WindowsAzureMobileServicesFramework\"\n            ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"5A4FAC5C1B050A870027011D\"\n            BuildableName = \"WindowsAzureMobileServices.framework\"\n            BlueprintName = \"WindowsAzureMobileServicesFramework\"\n            ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"5A4FAC5C1B050A870027011D\"\n            BuildableName = \"WindowsAzureMobileServices.framework\"\n            BlueprintName = \"WindowsAzureMobileServicesFramework\"\n            ReferencedContainer = \"container:WindowsAzureMobileServices.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "sdk/iOS/appledoc/AppledocSettings.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>--company-id</key>\n\t<string>com.microsoft</string>\n\t<key>--create-docset</key>\n\t<true/>\n\t<key>--install-docset</key>\n\t<false/>\n\t<key>--create-html</key>\n\t<true/>\n\t<key>--ignore</key>\n\t<array>\n\t\t<string>.m</string>\n\t\t<string>*Internal.h</string>\n\t\t<string>MSAPIConnection.h</string>\n\t\t<string>MSAPIRequest.h</string>\n\t\t<string>MSClientConnection.h</string>\n\t\t<string>MSJSONSerializer.h</string>\n\t\t<string>MSLocalStorage.h</string>\n\t\t<string>MSLogin.h</string>\n\t\t<string>MSLoginSerializer.h</string>\n\t\t<string>MSLoginView.h</string>\n\t\t<string>MSNaiveISODateFormatter.h</string>\n\t\t<string>MSOperationQueue.h</string>\n\t\t<string>MSPredicateTranslator.h</string>\n\t\t<string>MSPushHttp.h</string>\n\t\t<string>MSPushRequest.h</string>\n\t\t<string>MSQueuePullOperation.h</string>\n\t\t<string>MSQueuePurgeOperation.h</string>\n\t\t<string>MSQueuePushOperation.h</string>\n\t\t<string>MSRegistrationManager.h</string>\n\t\t<string>MSSDKFeatures.h</string>\n\t\t<string>MSTableConfigValue.h</string>\n\t\t<string>MSTableConnection.h</string>\n\t\t<string>MSTableDeleteRequest.h</string>\n\t\t<string>MSTableItemRequest.h</string>\n\t\t<string>MSTableReadQueryRequest.h</string>\n\t\t<string>MSTableRequest.h</string>\n\t\t<string>MSURLBuilder.h</string>\n\t\t<string>MSUserAgentBuilder.h</string>\n\t</array>\n\t<key>--docset-platform-family</key>\n\t<string>iphoneos</string>\n\t<key>--output</key>\n\t<string>appledoc</string>\n\t<key>--project-company</key>\n\t<string>Microsoft</string>\n\t<key>--project-name</key>\n\t<string>Azure Mobile Services</string>\n\t<key>--keep-undocumented-objects</key>\n\t<true/>\n\t<key>--keep-undocumented-members</key>\n\t<true/>\n\t<key>--warn-undocumented-object</key>\n\t<false/>\n\t<key>--warn-undocumented-member</key>\n\t<false/>\n\t<key>--warn-empty-description</key>\n\t<true/>\n\t<key>--warn-missing-arg</key>\n\t<true/>\n\t<key>--warn-unknown-directive</key>\n\t<true/>\n\t<key>--logformat</key>\n\t<string>xcode</string>\n\t<key>--exit-threshold</key>\n\t<integer>2</integer>\n\t<key>--keep-intermediate-files</key>\n\t<true/>\n</dict>\n</plist>"
  },
  {
    "path": "sdk/iOS/build.command",
    "content": "# This bash script cleans and builds the Microsoft Azure Mobile Services iOS Framework\n\n# Make sure we are executing in this script's directory\ncd \"$( cd \"$( dirname \"$0\" )\" && pwd )\"\n\n# Clean by removing the build directory\nrm -rf Build\nrm WindowsAzureMobileServices.framework.zip\nrm -rf WindowsAzureMobileServices.framework\n\n# Generate the build version\nVERSION_START_YEAR=2013\nDATE_VERSION=$((($(date +%Y) - $VERSION_START_YEAR) + 1))$(date +%m%d)\n\n# Update the WindowsAzureMobileServices.h file with the build version\nif [ \"$SET_BUILD_VERSION\" == \"YES\" ]; then\n  HEADER_FILE=src/WindowsAzureMobileServices.h\n  HEADER_BAK_FILE=$HEADER_FILE.bak\n  mv $HEADER_FILE $HEADER_BAK_FILE\n  more $HEADER_BAK_FILE | sed \"s/\\(WindowsAzureMobileServicesSdkBuildVersion\\) 0/\\1 $DATE_VERSION/\" > $HEADER_FILE\nfi\n\n# Build the framework\nxcodebuild OTHER_CFLAGS=\"-fembed-bitcode -miphoneos-version-min=7.0\" -target Framework OBJROOT=./Build SYMROOT=./Build\n\n# Move back to the original WindowsAzureMobileServices.h file\nif [ \"$SET_BUILD_VERSION\" == \"YES\" ]; then\n  rm $HEADER_FILE\n  mv $HEADER_BAK_FILE $HEADER_FILE\n  echo \"BUILD VERSION SET.\"\nfi\n\n# Copy the framework into this directory and add the license\nrsync -rlK ../../sdk/iOS/Build/Release-iphoneos/WindowsAzureMobileServices.framework .\ncp license.rtf WindowsAzureMobileServices.framework\n\n# Zip the framework\nzip -r WindowsAzureMobileServices.framework.zip WindowsAzureMobileServices.framework\n\n# Lastly, copy to the build share\nif [ \"$COPY_TO_SHARE\" == \"YES\" ]; then\n  SHARE_PATH_ARRAY=$(echo $BUILD_SHARE_PATHS | tr \";\" \"\\n\")\n  for SHARE_PATH in $SHARE_PATH_ARRAY\n  do\n    rsync -rlK WindowsAzureMobileServices.framework.zip $SHARE_PATH\n  done\nfi\n"
  },
  {
    "path": "sdk/iOS/doxygen.config",
    "content": "# Doxyfile 1.8.7\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) for a project.\n#\n# All text after a double hash (##) is considered a comment and is placed in\n# front of the TAG it is preceding.\n#\n# All text after a single hash (#) is considered a comment and will be ignored.\n# The format is:\n# TAG = value [value, ...]\n# For lists, items can also be appended using:\n# TAG += value [value, ...]\n# Values that contain spaces should be placed between quotes (\\\" \\\").\n\n#---------------------------------------------------------------------------\n# Project related configuration options\n#---------------------------------------------------------------------------\n\n# This tag specifies the encoding used for all characters in the config file\n# that follow. The default is UTF-8 which is also the encoding used for all text\n# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv\n# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv\n# for the list of possible encodings.\n# The default value is: UTF-8.\n\nDOXYFILE_ENCODING      = UTF-8\n\n# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by\n# double-quotes, unless you are using Doxywizard) that should identify the\n# project for which the documentation is generated. This name is used in the\n# title of most generated pages and in a few other places.\n# The default value is: My Project.\n\nPROJECT_NAME           = \"Microsoft Azure Mobile Services\"\n\n# The PROJECT_NUMBER tag can be used to enter a project or revision number. This\n# could be handy for archiving the generated documentation or if some version\n# control system is used.\n\nPROJECT_NUMBER         = \n\n# Using the PROJECT_BRIEF tag one can provide an optional one line description\n# for a project that appears at the top of each page and should give viewer a\n# quick idea about the purpose of the project. Keep the description short.\n\nPROJECT_BRIEF          = \n\n# With the PROJECT_LOGO tag one can specify an logo or icon that is included in\n# the documentation. The maximum height of the logo should not exceed 55 pixels\n# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo\n# to the output directory.\n\nPROJECT_LOGO           = \n\n# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path\n# into which the generated documentation will be written. If a relative path is\n# entered, it will be relative to the location where doxygen was started. If\n# left blank the current directory will be used.\n\nOUTPUT_DIRECTORY       = Doxygen\n\n# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-\n# directories (in 2 levels) under the output directory of each output format and\n# will distribute the generated files over these directories. Enabling this\n# option can be useful when feeding doxygen a huge amount of source files, where\n# putting all generated files in the same directory would otherwise causes\n# performance problems for the file system.\n# The default value is: NO.\n\nCREATE_SUBDIRS         = NO\n\n# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII\n# characters to appear in the names of generated files. If set to NO, non-ASCII\n# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode\n# U+3044.\n# The default value is: NO.\n\nALLOW_UNICODE_NAMES    = NO\n\n# The OUTPUT_LANGUAGE tag is used to specify the language in which all\n# documentation generated by doxygen is written. Doxygen will use this\n# information to generate all constant output in the proper language.\n# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,\n# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),\n# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,\n# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),\n# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,\n# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,\n# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,\n# Ukrainian and Vietnamese.\n# The default value is: English.\n\nOUTPUT_LANGUAGE        = English\n\n# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member\n# descriptions after the members that are listed in the file and class\n# documentation (similar to Javadoc). Set to NO to disable this.\n# The default value is: YES.\n\nBRIEF_MEMBER_DESC      = YES\n\n# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief\n# description of a member or function before the detailed description\n#\n# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\n# brief descriptions will be completely suppressed.\n# The default value is: YES.\n\nREPEAT_BRIEF           = YES\n\n# This tag implements a quasi-intelligent brief description abbreviator that is\n# used to form the text in various listings. Each string in this list, if found\n# as the leading text of the brief description, will be stripped from the text\n# and the result, after processing the whole list, is used as the annotated\n# text. Otherwise, the brief description is used as-is. If left blank, the\n# following values are used ($name is automatically replaced with the name of\n# the entity):The $name class, The $name widget, The $name file, is, provides,\n# specifies, contains, represents, a, an and the.\n\nABBREVIATE_BRIEF       = \"The $name class\" \\\n                         \"The $name widget\" \\\n                         \"The $name file\" \\\n                         is \\\n                         provides \\\n                         specifies \\\n                         contains \\\n                         represents \\\n                         a \\\n                         an \\\n                         the\n\n# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n# doxygen will generate a detailed section even if there is only a brief\n# description.\n# The default value is: NO.\n\nALWAYS_DETAILED_SEC    = NO\n\n# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\n# inherited members of a class in the documentation of that class as if those\n# members were ordinary class members. Constructors, destructors and assignment\n# operators of the base classes will not be shown.\n# The default value is: NO.\n\nINLINE_INHERITED_MEMB  = NO\n\n# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path\n# before files name in the file list and in the header files. If set to NO the\n# shortest path that makes the file name unique will be used\n# The default value is: YES.\n\nFULL_PATH_NAMES        = YES\n\n# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.\n# Stripping is only done if one of the specified strings matches the left-hand\n# part of the path. The tag can be used to show relative paths in the file list.\n# If left blank the directory from which doxygen is run is used as the path to\n# strip.\n#\n# Note that you can specify absolute paths here, but also relative paths, which\n# will be relative from the directory where doxygen is started.\n# This tag requires that the tag FULL_PATH_NAMES is set to YES.\n\nSTRIP_FROM_PATH        = \n\n# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the\n# path mentioned in the documentation of a class, which tells the reader which\n# header file to include in order to use a class. If left blank only the name of\n# the header file containing the class definition is used. Otherwise one should\n# specify the list of include paths that are normally passed to the compiler\n# using the -I flag.\n\nSTRIP_FROM_INC_PATH    = \n\n# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but\n# less readable) file names. This can be useful is your file systems doesn't\n# support long names like on DOS, Mac, or CD-ROM.\n# The default value is: NO.\n\nSHORT_NAMES            = NO\n\n# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the\n# first line (until the first dot) of a Javadoc-style comment as the brief\n# description. If set to NO, the Javadoc-style will behave just like regular Qt-\n# style comments (thus requiring an explicit @brief command for a brief\n# description.)\n# The default value is: NO.\n\nJAVADOC_AUTOBRIEF      = YES\n\n# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first\n# line (until the first dot) of a Qt-style comment as the brief description. If\n# set to NO, the Qt-style will behave just like regular Qt-style comments (thus\n# requiring an explicit \\brief command for a brief description.)\n# The default value is: NO.\n\nQT_AUTOBRIEF           = NO\n\n# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a\n# multi-line C++ special comment block (i.e. a block of //! or /// comments) as\n# a brief description. This used to be the default behavior. The new default is\n# to treat a multi-line C++ comment block as a detailed description. Set this\n# tag to YES if you prefer the old behavior instead.\n#\n# Note that setting this tag to YES also means that rational rose comments are\n# not recognized any more.\n# The default value is: NO.\n\nMULTILINE_CPP_IS_BRIEF = NO\n\n# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the\n# documentation from any documented member that it re-implements.\n# The default value is: YES.\n\nINHERIT_DOCS           = YES\n\n# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a\n# new page for each member. If set to NO, the documentation of a member will be\n# part of the file/class/namespace that contains it.\n# The default value is: NO.\n\nSEPARATE_MEMBER_PAGES  = NO\n\n# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen\n# uses this value to replace tabs by spaces in code fragments.\n# Minimum value: 1, maximum value: 16, default value: 4.\n\nTAB_SIZE               = 4\n\n# This tag can be used to specify a number of aliases that act as commands in\n# the documentation. An alias has the form:\n# name=value\n# For example adding\n# \"sideeffect=@par Side Effects:\\n\"\n# will allow you to put the command \\sideeffect (or @sideeffect) in the\n# documentation, which will result in a user-defined paragraph with heading\n# \"Side Effects:\". You can put \\n's in the value part of an alias to insert\n# newlines.\n\nALIASES                = \n\n# This tag can be used to specify a number of word-keyword mappings (TCL only).\n# A mapping has the form \"name=value\". For example adding \"class=itcl::class\"\n# will allow you to use the command class in the itcl::class meaning.\n\nTCL_SUBST              = \n\n# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources\n# only. Doxygen will then generate output that is more tailored for C. For\n# instance, some of the names that are used will be different. The list of all\n# members will be omitted, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_FOR_C  = NO\n\n# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or\n# Python sources only. Doxygen will then generate output that is more tailored\n# for that language. For instance, namespaces will be presented as packages,\n# qualified scopes will look different, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_JAVA   = YES\n\n# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\n# sources. Doxygen will then generate output that is tailored for Fortran.\n# The default value is: NO.\n\nOPTIMIZE_FOR_FORTRAN   = NO\n\n# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\n# sources. Doxygen will then generate output that is tailored for VHDL.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_VHDL   = NO\n\n# Doxygen selects the parser to use depending on the extension of the files it\n# parses. With this tag you can assign which parser to use for a given\n# extension. Doxygen has a built-in mapping, but you can override or extend it\n# using this tag. The format is ext=language, where ext is a file extension, and\n# language is one of the parsers supported by doxygen: IDL, Java, Javascript,\n# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:\n# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:\n# Fortran. In the later case the parser tries to guess whether the code is fixed\n# or free formatted code, this is the default for Fortran type files), VHDL. For\n# instance to make doxygen treat .inc files as Fortran files (default is PHP),\n# and .f files as C (default is Fortran), use: inc=Fortran f=C.\n#\n# Note For files without extension you can use no_extension as a placeholder.\n#\n# Note that for custom extensions you also need to set FILE_PATTERNS otherwise\n# the files are not read by doxygen.\n\nEXTENSION_MAPPING      = \n\n# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments\n# according to the Markdown format, which allows for more readable\n# documentation. See http://daringfireball.net/projects/markdown/ for details.\n# The output of markdown processing is further processed by doxygen, so you can\n# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in\n# case of backward compatibilities issues.\n# The default value is: YES.\n\nMARKDOWN_SUPPORT       = YES\n\n# When enabled doxygen tries to link words that correspond to documented\n# classes, or namespaces to their corresponding documentation. Such a link can\n# be prevented in individual cases by by putting a % sign in front of the word\n# or globally by setting AUTOLINK_SUPPORT to NO.\n# The default value is: YES.\n\nAUTOLINK_SUPPORT       = YES\n\n# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\n# to include (a tag file for) the STL sources as input, then you should set this\n# tag to YES in order to let doxygen match functions declarations and\n# definitions whose arguments contain STL classes (e.g. func(std::string);\n# versus func(std::string) {}). This also make the inheritance and collaboration\n# diagrams that involve STL classes more complete and accurate.\n# The default value is: NO.\n\nBUILTIN_STL_SUPPORT    = NO\n\n# If you use Microsoft's C++/CLI language, you should set this option to YES to\n# enable parsing support.\n# The default value is: NO.\n\nCPP_CLI_SUPPORT        = NO\n\n# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:\n# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen\n# will parse them like normal C++ but will assume all classes use public instead\n# of private inheritance when no explicit protection keyword is present.\n# The default value is: NO.\n\nSIP_SUPPORT            = NO\n\n# For Microsoft's IDL there are propget and propput attributes to indicate\n# getter and setter methods for a property. Setting this option to YES will make\n# doxygen to replace the get and set methods by a property in the documentation.\n# This will only work if the methods are indeed getting or setting a simple\n# type. If this is not the case, or you want to show the methods anyway, you\n# should set this option to NO.\n# The default value is: YES.\n\nIDL_PROPERTY_SUPPORT   = YES\n\n# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\n# tag is set to YES, then doxygen will reuse the documentation of the first\n# member in the group (if any) for the other members of the group. By default\n# all members of a group must be documented explicitly.\n# The default value is: NO.\n\nDISTRIBUTE_GROUP_DOC   = NO\n\n# Set the SUBGROUPING tag to YES to allow class member groups of the same type\n# (for instance a group of public functions) to be put as a subgroup of that\n# type (e.g. under the Public Functions section). Set it to NO to prevent\n# subgrouping. Alternatively, this can be done per class using the\n# \\nosubgrouping command.\n# The default value is: YES.\n\nSUBGROUPING            = YES\n\n# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions\n# are shown inside the group in which they are included (e.g. using \\ingroup)\n# instead of on a separate page (for HTML and Man pages) or section (for LaTeX\n# and RTF).\n#\n# Note that this feature does not work in combination with\n# SEPARATE_MEMBER_PAGES.\n# The default value is: NO.\n\nINLINE_GROUPED_CLASSES = NO\n\n# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions\n# with only public data fields or simple typedef fields will be shown inline in\n# the documentation of the scope in which they are defined (i.e. file,\n# namespace, or group documentation), provided this scope is documented. If set\n# to NO, structs, classes, and unions are shown on a separate page (for HTML and\n# Man pages) or section (for LaTeX and RTF).\n# The default value is: NO.\n\nINLINE_SIMPLE_STRUCTS  = NO\n\n# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or\n# enum is documented as struct, union, or enum with the name of the typedef. So\n# typedef struct TypeS {} TypeT, will appear in the documentation as a struct\n# with name TypeT. When disabled the typedef will appear as a member of a file,\n# namespace, or class. And the struct will be named TypeS. This can typically be\n# useful for C code in case the coding convention dictates that all compound\n# types are typedef'ed and only the typedef is referenced, never the tag name.\n# The default value is: NO.\n\nTYPEDEF_HIDES_STRUCT   = NO\n\n# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\n# cache is used to resolve symbols given their name and scope. Since this can be\n# an expensive process and often the same symbol appears multiple times in the\n# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small\n# doxygen will become slower. If the cache is too large, memory is wasted. The\n# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range\n# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536\n# symbols. At the end of a run doxygen will report the cache usage and suggest\n# the optimal cache size from a speed point of view.\n# Minimum value: 0, maximum value: 9, default value: 0.\n\nLOOKUP_CACHE_SIZE      = 0\n\n#---------------------------------------------------------------------------\n# Build related configuration options\n#---------------------------------------------------------------------------\n\n# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in\n# documentation are documented, even if no documentation was available. Private\n# class members and static file members will be hidden unless the\n# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.\n# Note: This will also disable the warnings about undocumented members that are\n# normally produced when WARNINGS is set to YES.\n# The default value is: NO.\n\nEXTRACT_ALL            = NO\n\n# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will\n# be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PRIVATE        = NO\n\n# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal\n# scope will be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PACKAGE        = NO\n\n# If the EXTRACT_STATIC tag is set to YES all static members of a file will be\n# included in the documentation.\n# The default value is: NO.\n\nEXTRACT_STATIC         = NO\n\n# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined\n# locally in source files will be included in the documentation. If set to NO\n# only classes defined in header files are included. Does not have any effect\n# for Java sources.\n# The default value is: YES.\n\nEXTRACT_LOCAL_CLASSES  = NO\n\n# This flag is only useful for Objective-C code. When set to YES local methods,\n# which are defined in the implementation section but not in the interface are\n# included in the documentation. If set to NO only methods in the interface are\n# included.\n# The default value is: NO.\n\nEXTRACT_LOCAL_METHODS  = NO\n\n# If this flag is set to YES, the members of anonymous namespaces will be\n# extracted and appear in the documentation as a namespace called\n# 'anonymous_namespace{file}', where file will be replaced with the base name of\n# the file that contains the anonymous namespace. By default anonymous namespace\n# are hidden.\n# The default value is: NO.\n\nEXTRACT_ANON_NSPACES   = NO\n\n# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all\n# undocumented members inside documented classes or files. If set to NO these\n# members will be included in the various overviews, but no documentation\n# section is generated. This option has no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_MEMBERS     = NO\n\n# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all\n# undocumented classes that are normally visible in the class hierarchy. If set\n# to NO these classes will be included in the various overviews. This option has\n# no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_CLASSES     = NO\n\n# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend\n# (class|struct|union) declarations. If set to NO these declarations will be\n# included in the documentation.\n# The default value is: NO.\n\nHIDE_FRIEND_COMPOUNDS  = NO\n\n# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any\n# documentation blocks found inside the body of a function. If set to NO these\n# blocks will be appended to the function's detailed documentation block.\n# The default value is: NO.\n\nHIDE_IN_BODY_DOCS      = NO\n\n# The INTERNAL_DOCS tag determines if documentation that is typed after a\n# \\internal command is included. If the tag is set to NO then the documentation\n# will be excluded. Set it to YES to include the internal documentation.\n# The default value is: NO.\n\nINTERNAL_DOCS          = NO\n\n# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file\n# names in lower-case letters. If set to YES upper-case letters are also\n# allowed. This is useful if you have classes or files whose names only differ\n# in case and if your file system supports case sensitive file names. Windows\n# and Mac users are advised to set this option to NO.\n# The default value is: system dependent.\n\nCASE_SENSE_NAMES       = NO\n\n# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with\n# their full class and namespace scopes in the documentation. If set to YES the\n# scope will be hidden.\n# The default value is: NO.\n\nHIDE_SCOPE_NAMES       = NO\n\n# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of\n# the files that are included by a file in the documentation of that file.\n# The default value is: YES.\n\nSHOW_INCLUDE_FILES     = YES\n\n# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each\n# grouped member an include statement to the documentation, telling the reader\n# which file to include in order to use the member.\n# The default value is: NO.\n\nSHOW_GROUPED_MEMB_INC  = NO\n\n# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include\n# files with double quotes in the documentation rather than with sharp brackets.\n# The default value is: NO.\n\nFORCE_LOCAL_INCLUDES   = NO\n\n# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the\n# documentation for inline members.\n# The default value is: YES.\n\nINLINE_INFO            = YES\n\n# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the\n# (detailed) documentation of file and class members alphabetically by member\n# name. If set to NO the members will appear in declaration order.\n# The default value is: YES.\n\nSORT_MEMBER_DOCS       = YES\n\n# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief\n# descriptions of file, namespace and class members alphabetically by member\n# name. If set to NO the members will appear in declaration order. Note that\n# this will also influence the order of the classes in the class list.\n# The default value is: NO.\n\nSORT_BRIEF_DOCS        = NO\n\n# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the\n# (brief and detailed) documentation of class members so that constructors and\n# destructors are listed first. If set to NO the constructors will appear in the\n# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.\n# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief\n# member documentation.\n# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting\n# detailed member documentation.\n# The default value is: NO.\n\nSORT_MEMBERS_CTORS_1ST = NO\n\n# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy\n# of group names into alphabetical order. If set to NO the group names will\n# appear in their defined order.\n# The default value is: NO.\n\nSORT_GROUP_NAMES       = NO\n\n# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by\n# fully-qualified names, including namespaces. If set to NO, the class list will\n# be sorted only by class name, not including the namespace part.\n# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\n# Note: This option applies only to the class list, not to the alphabetical\n# list.\n# The default value is: NO.\n\nSORT_BY_SCOPE_NAME     = NO\n\n# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper\n# type resolution of all parameters of a function it will reject a match between\n# the prototype and the implementation of a member function even if there is\n# only one candidate or it is obvious which candidate to choose by doing a\n# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still\n# accept a match between prototype and implementation in such cases.\n# The default value is: NO.\n\nSTRICT_PROTO_MATCHING  = NO\n\n# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the\n# todo list. This list is created by putting \\todo commands in the\n# documentation.\n# The default value is: YES.\n\nGENERATE_TODOLIST      = YES\n\n# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the\n# test list. This list is created by putting \\test commands in the\n# documentation.\n# The default value is: YES.\n\nGENERATE_TESTLIST      = YES\n\n# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug\n# list. This list is created by putting \\bug commands in the documentation.\n# The default value is: YES.\n\nGENERATE_BUGLIST       = YES\n\n# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)\n# the deprecated list. This list is created by putting \\deprecated commands in\n# the documentation.\n# The default value is: YES.\n\nGENERATE_DEPRECATEDLIST= YES\n\n# The ENABLED_SECTIONS tag can be used to enable conditional documentation\n# sections, marked by \\if <section_label> ... \\endif and \\cond <section_label>\n# ... \\endcond blocks.\n\nENABLED_SECTIONS       = \n\n# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the\n# initial value of a variable or macro / define can have for it to appear in the\n# documentation. If the initializer consists of more lines than specified here\n# it will be hidden. Use a value of 0 to hide initializers completely. The\n# appearance of the value of individual variables and macros / defines can be\n# controlled using \\showinitializer or \\hideinitializer command in the\n# documentation regardless of this setting.\n# Minimum value: 0, maximum value: 10000, default value: 30.\n\nMAX_INITIALIZER_LINES  = 30\n\n# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at\n# the bottom of the documentation of classes and structs. If set to YES the list\n# will mention the files that were used to generate the documentation.\n# The default value is: YES.\n\nSHOW_USED_FILES        = YES\n\n# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This\n# will remove the Files entry from the Quick Index and from the Folder Tree View\n# (if specified).\n# The default value is: YES.\n\nSHOW_FILES             = YES\n\n# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces\n# page. This will remove the Namespaces entry from the Quick Index and from the\n# Folder Tree View (if specified).\n# The default value is: YES.\n\nSHOW_NAMESPACES        = YES\n\n# The FILE_VERSION_FILTER tag can be used to specify a program or script that\n# doxygen should invoke to get the current version for each file (typically from\n# the version control system). Doxygen will invoke the program by executing (via\n# popen()) the command command input-file, where command is the value of the\n# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided\n# by doxygen. Whatever the program writes to standard output is used as the file\n# version. For an example see the documentation.\n\nFILE_VERSION_FILTER    = \n\n# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n# by doxygen. The layout file controls the global structure of the generated\n# output files in an output format independent way. To create the layout file\n# that represents doxygen's defaults, run doxygen with the -l option. You can\n# optionally specify a file name after the option, if omitted DoxygenLayout.xml\n# will be used as the name of the layout file.\n#\n# Note that if you run doxygen from a directory containing a file called\n# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE\n# tag is left empty.\n\nLAYOUT_FILE            = \n\n# The CITE_BIB_FILES tag can be used to specify one or more bib files containing\n# the reference definitions. This must be a list of .bib files. The .bib\n# extension is automatically appended if omitted. This requires the bibtex tool\n# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.\n# For LaTeX the style of the bibliography can be controlled using\n# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the\n# search path. Do not use file names with spaces, bibtex cannot handle them. See\n# also \\cite for info how to create references.\n\nCITE_BIB_FILES         = \n\n#---------------------------------------------------------------------------\n# Configuration options related to warning and progress messages\n#---------------------------------------------------------------------------\n\n# The QUIET tag can be used to turn on/off the messages that are generated to\n# standard output by doxygen. If QUIET is set to YES this implies that the\n# messages are off.\n# The default value is: NO.\n\nQUIET                  = NO\n\n# The WARNINGS tag can be used to turn on/off the warning messages that are\n# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES\n# this implies that the warnings are on.\n#\n# Tip: Turn warnings on while writing the documentation.\n# The default value is: YES.\n\nWARNINGS               = YES\n\n# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate\n# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag\n# will automatically be disabled.\n# The default value is: YES.\n\nWARN_IF_UNDOCUMENTED   = YES\n\n# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for\n# potential errors in the documentation, such as not documenting some parameters\n# in a documented function, or documenting parameters that don't exist or using\n# markup commands wrongly.\n# The default value is: YES.\n\nWARN_IF_DOC_ERROR      = YES\n\n# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that\n# are documented, but have no documentation for their parameters or return\n# value. If set to NO doxygen will only warn about wrong or incomplete parameter\n# documentation, but not about the absence of documentation.\n# The default value is: NO.\n\nWARN_NO_PARAMDOC       = NO\n\n# The WARN_FORMAT tag determines the format of the warning messages that doxygen\n# can produce. The string should contain the $file, $line, and $text tags, which\n# will be replaced by the file and line number from which the warning originated\n# and the warning text. Optionally the format may contain $version, which will\n# be replaced by the version of the file (if it could be obtained via\n# FILE_VERSION_FILTER)\n# The default value is: $file:$line: $text.\n\nWARN_FORMAT            = \"$file:$line: $text\"\n\n# The WARN_LOGFILE tag can be used to specify a file to which warning and error\n# messages should be written. If left blank the output is written to standard\n# error (stderr).\n\nWARN_LOGFILE           = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the input files\n#---------------------------------------------------------------------------\n\n# The INPUT tag is used to specify the files and/or directories that contain\n# documented source files. You may enter file names like myfile.cpp or\n# directories like /usr/src/myproject. Separate the files or directories with\n# spaces.\n# Note: If this tag is empty the current directory is searched.\n\nINPUT                  = src/MSClient.h \\\n                         src/WindowsAzureMobileServices.h \\\n                         src/MSLoginController.h \\\n                         src/MSTable.h \\\n                         src/MSQuery.h \\\n                         src/MSUser.h \\\n                         src/MSPush.h \\\n                         src/MSFilter.h \\\n                         src/MSQueryResult.h \\\n                         src/MSTableOperation.h \\\n                         src/MSSyncTable.h \\\n                         src/MSSyncContext.h \\\n                         src/MSTableOperationError.h \\\n                         src/MSCoreDataStore.h \\\n                         src/MSDateOffset.h \\\n                         src/MSSyncContextReadResult.h \\\n                         src/MSError.h\n\n# This tag can be used to specify the character encoding of the source files\n# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses\n# libiconv (or the iconv built into libc) for the transcoding. See the libiconv\n# documentation (see: http://www.gnu.org/software/libiconv) for the list of\n# possible encodings.\n# The default value is: UTF-8.\n\nINPUT_ENCODING         = UTF-8\n\n# If the value of the INPUT tag contains directories, you can use the\n# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and\n# *.h) to filter out the source-files in the directories. If left blank the\n# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,\n# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,\n# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,\n# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,\n# *.qsf, *.as and *.js.\n\nFILE_PATTERNS          = *.c \\\n                         *.cc \\\n                         *.cxx \\\n                         *.cpp \\\n                         *.c++ \\\n                         *.d \\\n                         *.java \\\n                         *.ii \\\n                         *.ixx \\\n                         *.ipp \\\n                         *.i++ \\\n                         *.inl \\\n                         *.h \\\n                         *.hh \\\n                         *.hxx \\\n                         *.hpp \\\n                         *.h++ \\\n                         *.idl \\\n                         *.odl \\\n                         *.cs \\\n                         *.php \\\n                         *.php3 \\\n                         *.inc \\\n                         *.m \\\n                         *.markdown \\\n                         *.md \\\n                         *.mm \\\n                         *.dox \\\n                         *.py \\\n                         *.f90 \\\n                         *.f \\\n                         *.for \\\n                         *.vhd \\\n                         *.vhdl\n\n# The RECURSIVE tag can be used to specify whether or not subdirectories should\n# be searched for input files as well.\n# The default value is: NO.\n\nRECURSIVE              = YES\n\n# The EXCLUDE tag can be used to specify files and/or directories that should be\n# excluded from the INPUT source files. This way you can easily exclude a\n# subdirectory from a directory tree whose root is specified with the INPUT tag.\n#\n# Note that relative paths are relative to the directory from which doxygen is\n# run.\n\nEXCLUDE                = \n\n# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n# directories that are symbolic links (a Unix file system feature) are excluded\n# from the input.\n# The default value is: NO.\n\nEXCLUDE_SYMLINKS       = NO\n\n# If the value of the INPUT tag contains directories, you can use the\n# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\n# certain files from those directories.\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories for example use the pattern */test/*\n\nEXCLUDE_PATTERNS       = \n\n# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\n# (namespaces, classes, functions, etc.) that should be excluded from the\n# output. The symbol name can be a fully qualified name, a word, or if the\n# wildcard * is used, a substring. Examples: ANamespace, AClass,\n# AClass::ANamespace, ANamespace::*Test\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories use the pattern */test/*\n\nEXCLUDE_SYMBOLS        = \n\n# The EXAMPLE_PATH tag can be used to specify one or more files or directories\n# that contain example code fragments that are included (see the \\include\n# command).\n\nEXAMPLE_PATH           = \n\n# If the value of the EXAMPLE_PATH tag contains directories, you can use the\n# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and\n# *.h) to filter out the source-files in the directories. If left blank all\n# files are included.\n\nEXAMPLE_PATTERNS       = *\n\n# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\n# searched for input files to be used with the \\include or \\dontinclude commands\n# irrespective of the value of the RECURSIVE tag.\n# The default value is: NO.\n\nEXAMPLE_RECURSIVE      = NO\n\n# The IMAGE_PATH tag can be used to specify one or more files or directories\n# that contain images that are to be included in the documentation (see the\n# \\image command).\n\nIMAGE_PATH             = \n\n# The INPUT_FILTER tag can be used to specify a program that doxygen should\n# invoke to filter for each input file. Doxygen will invoke the filter program\n# by executing (via popen()) the command:\n#\n# <filter> <input-file>\n#\n# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the\n# name of an input file. Doxygen will then use the output that the filter\n# program writes to standard output. If FILTER_PATTERNS is specified, this tag\n# will be ignored.\n#\n# Note that the filter must not add or remove lines; it is applied before the\n# code is scanned, but not when the output code is generated. If lines are added\n# or removed, the anchors will not be placed correctly.\n\nINPUT_FILTER           = \n\n# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\n# basis. Doxygen will compare the file name with each pattern and apply the\n# filter if there is a match. The filters are a list of the form: pattern=filter\n# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how\n# filters are used. If the FILTER_PATTERNS tag is empty or if none of the\n# patterns match the file name, INPUT_FILTER is applied.\n\nFILTER_PATTERNS        = \n\n# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\n# INPUT_FILTER ) will also be used to filter the input files that are used for\n# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).\n# The default value is: NO.\n\nFILTER_SOURCE_FILES    = NO\n\n# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file\n# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and\n# it is also possible to disable source filtering for a specific pattern using\n# *.ext= (so without naming a filter).\n# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.\n\nFILTER_SOURCE_PATTERNS = \n\n# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that\n# is part of the input, its contents will be placed on the main page\n# (index.html). This can be useful if you have a project on for instance GitHub\n# and want to reuse the introduction page also for the doxygen output.\n\nUSE_MDFILE_AS_MAINPAGE = \n\n#---------------------------------------------------------------------------\n# Configuration options related to source browsing\n#---------------------------------------------------------------------------\n\n# If the SOURCE_BROWSER tag is set to YES then a list of source files will be\n# generated. Documented entities will be cross-referenced with these sources.\n#\n# Note: To get rid of all source code in the generated output, make sure that\n# also VERBATIM_HEADERS is set to NO.\n# The default value is: NO.\n\nSOURCE_BROWSER         = NO\n\n# Setting the INLINE_SOURCES tag to YES will include the body of functions,\n# classes and enums directly into the documentation.\n# The default value is: NO.\n\nINLINE_SOURCES         = NO\n\n# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any\n# special comment blocks from generated source code fragments. Normal C, C++ and\n# Fortran comments will always remain visible.\n# The default value is: YES.\n\nSTRIP_CODE_COMMENTS    = YES\n\n# If the REFERENCED_BY_RELATION tag is set to YES then for each documented\n# function all documented functions referencing it will be listed.\n# The default value is: NO.\n\nREFERENCED_BY_RELATION = NO\n\n# If the REFERENCES_RELATION tag is set to YES then for each documented function\n# all documented entities called/used by that function will be listed.\n# The default value is: NO.\n\nREFERENCES_RELATION    = NO\n\n# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set\n# to YES, then the hyperlinks from functions in REFERENCES_RELATION and\n# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will\n# link to the documentation.\n# The default value is: YES.\n\nREFERENCES_LINK_SOURCE = YES\n\n# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the\n# source code will show a tooltip with additional information such as prototype,\n# brief description and links to the definition and documentation. Since this\n# will make the HTML file larger and loading of large files a bit slower, you\n# can opt to disable this feature.\n# The default value is: YES.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nSOURCE_TOOLTIPS        = YES\n\n# If the USE_HTAGS tag is set to YES then the references to source code will\n# point to the HTML generated by the htags(1) tool instead of doxygen built-in\n# source browser. The htags tool is part of GNU's global source tagging system\n# (see http://www.gnu.org/software/global/global.html). You will need version\n# 4.8.6 or higher.\n#\n# To use it do the following:\n# - Install the latest version of global\n# - Enable SOURCE_BROWSER and USE_HTAGS in the config file\n# - Make sure the INPUT points to the root of the source tree\n# - Run doxygen as normal\n#\n# Doxygen will invoke htags (and that will in turn invoke gtags), so these\n# tools must be available from the command line (i.e. in the search path).\n#\n# The result: instead of the source browser generated by doxygen, the links to\n# source code will now point to the output of htags.\n# The default value is: NO.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nUSE_HTAGS              = NO\n\n# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a\n# verbatim copy of the header file for each class for which an include is\n# specified. Set to NO to disable this.\n# See also: Section \\class.\n# The default value is: YES.\n\nVERBATIM_HEADERS       = YES\n\n# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the\n# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the\n# cost of reduced performance. This can be particularly helpful with template\n# rich C++ code for which doxygen's built-in parser lacks the necessary type\n# information.\n# Note: The availability of this option depends on whether or not doxygen was\n# compiled with the --with-libclang option.\n# The default value is: NO.\n\nCLANG_ASSISTED_PARSING = NO\n\n# If clang assisted parsing is enabled you can provide the compiler with command\n# line options that you would normally use when invoking the compiler. Note that\n# the include paths will already be set by doxygen for the files and directories\n# specified with INPUT and INCLUDE_PATH.\n# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.\n\nCLANG_OPTIONS          = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the alphabetical class index\n#---------------------------------------------------------------------------\n\n# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all\n# compounds will be generated. Enable this if the project contains a lot of\n# classes, structs, unions or interfaces.\n# The default value is: YES.\n\nALPHABETICAL_INDEX     = YES\n\n# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in\n# which the alphabetical index list will be split.\n# Minimum value: 1, maximum value: 20, default value: 5.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nCOLS_IN_ALPHA_INDEX    = 5\n\n# In case all classes in a project start with a common prefix, all classes will\n# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag\n# can be used to specify a prefix (or a list of prefixes) that should be ignored\n# while generating the index headers.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nIGNORE_PREFIX          = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the HTML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output\n# The default value is: YES.\n\nGENERATE_HTML          = YES\n\n# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_OUTPUT            = html\n\n# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each\n# generated HTML page (for example: .htm, .php, .asp).\n# The default value is: .html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FILE_EXTENSION    = .html\n\n# The HTML_HEADER tag can be used to specify a user-defined HTML header file for\n# each generated HTML page. If the tag is left blank doxygen will generate a\n# standard header.\n#\n# To get valid HTML the header file that includes any scripts and style sheets\n# that doxygen needs, which is dependent on the configuration options used (e.g.\n# the setting GENERATE_TREEVIEW). It is highly recommended to start with a\n# default header using\n# doxygen -w html new_header.html new_footer.html new_stylesheet.css\n# YourConfigFile\n# and then modify the file new_header.html. See also section \"Doxygen usage\"\n# for information on how to generate the default header that doxygen normally\n# uses.\n# Note: The header is subject to change so you typically have to regenerate the\n# default header when upgrading to a newer version of doxygen. For a description\n# of the possible markers and block names see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_HEADER            = \n\n# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each\n# generated HTML page. If the tag is left blank doxygen will generate a standard\n# footer. See HTML_HEADER for more information on how to generate a default\n# footer and what special commands can be used inside the footer. See also\n# section \"Doxygen usage\" for information on how to generate the default footer\n# that doxygen normally uses.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FOOTER            = \n\n# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style\n# sheet that is used by each HTML page. It can be used to fine-tune the look of\n# the HTML output. If left blank doxygen will generate a default style sheet.\n# See also section \"Doxygen usage\" for information on how to generate the style\n# sheet that doxygen normally uses.\n# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as\n# it is more robust and this tag (HTML_STYLESHEET) will in the future become\n# obsolete.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_STYLESHEET        = \n\n# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-\n# defined cascading style sheet that is included after the standard style sheets\n# created by doxygen. Using this option one can overrule certain style aspects.\n# This is preferred over using HTML_STYLESHEET since it does not replace the\n# standard style sheet and is therefor more robust against future updates.\n# Doxygen will copy the style sheet file to the output directory. For an example\n# see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_STYLESHEET  = \n\n# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the HTML output directory. Note\n# that these files will be copied to the base HTML output directory. Use the\n# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n# files. In the HTML_STYLESHEET file, use the file name only. Also note that the\n# files will be copied as-is; there are no commands or markers available.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_FILES       = \n\n# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen\n# will adjust the colors in the stylesheet and background images according to\n# this color. Hue is specified as an angle on a colorwheel, see\n# http://en.wikipedia.org/wiki/Hue for more information. For instance the value\n# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300\n# purple, and 360 is red again.\n# Minimum value: 0, maximum value: 359, default value: 220.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_HUE    = 220\n\n# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors\n# in the HTML output. For a value of 0 the output will use grayscales only. A\n# value of 255 will produce the most vivid colors.\n# Minimum value: 0, maximum value: 255, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_SAT    = 100\n\n# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the\n# luminance component of the colors in the HTML output. Values below 100\n# gradually make the output lighter, whereas values above 100 make the output\n# darker. The value divided by 100 is the actual gamma applied, so 80 represents\n# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not\n# change the gamma.\n# Minimum value: 40, maximum value: 240, default value: 80.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_GAMMA  = 80\n\n# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML\n# page will contain the date and time when the page was generated. Setting this\n# to NO can help when comparing the output of multiple runs.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_TIMESTAMP         = YES\n\n# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\n# documentation will contain sections that can be hidden and shown after the\n# page has loaded.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_DYNAMIC_SECTIONS  = NO\n\n# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries\n# shown in the various tree structured indices initially; the user can expand\n# and collapse entries dynamically later on. Doxygen will expand the tree to\n# such a level that at most the specified number of entries are visible (unless\n# a fully collapsed tree already exceeds this amount). So setting the number of\n# entries 1 will produce a full collapsed tree by default. 0 is a special value\n# representing an infinite number of entries and will result in a full expanded\n# tree by default.\n# Minimum value: 0, maximum value: 9999, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_INDEX_NUM_ENTRIES = 100\n\n# If the GENERATE_DOCSET tag is set to YES, additional index files will be\n# generated that can be used as input for Apple's Xcode 3 integrated development\n# environment (see: http://developer.apple.com/tools/xcode/), introduced with\n# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a\n# Makefile in the HTML output directory. Running make will produce the docset in\n# that directory and running make install will install the docset in\n# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at\n# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html\n# for more information.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_DOCSET        = NO\n\n# This tag determines the name of the docset feed. A documentation feed provides\n# an umbrella under which multiple documentation sets from a single provider\n# (such as a company or product suite) can be grouped.\n# The default value is: Doxygen generated docs.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_FEEDNAME        = \"Doxygen generated docs\"\n\n# This tag specifies a string that should uniquely identify the documentation\n# set bundle. This should be a reverse domain-name style string, e.g.\n# com.mycompany.MyDocSet. Doxygen will append .docset to the name.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_BUNDLE_ID       = org.doxygen.Project\n\n# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify\n# the documentation publisher. This should be a reverse domain-name style\n# string, e.g. com.mycompany.MyDocSet.documentation.\n# The default value is: org.doxygen.Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_ID    = org.doxygen.Publisher\n\n# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.\n# The default value is: Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_NAME  = Publisher\n\n# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three\n# additional HTML index files: index.hhp, index.hhc, and index.hhk. The\n# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop\n# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on\n# Windows.\n#\n# The HTML Help Workshop contains a compiler that can convert all HTML output\n# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML\n# files are now used as the Windows 98 help format, and will replace the old\n# Windows help format (.hlp) on all Windows platforms in the future. Compressed\n# HTML files also contain an index, a table of contents, and you can search for\n# words in the documentation. The HTML workshop also contains a viewer for\n# compressed HTML files.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_HTMLHELP      = NO\n\n# The CHM_FILE tag can be used to specify the file name of the resulting .chm\n# file. You can add a path in front of the file if the result should not be\n# written to the html output directory.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_FILE               = \n\n# The HHC_LOCATION tag can be used to specify the location (absolute path\n# including file name) of the HTML help compiler ( hhc.exe). If non-empty\n# doxygen will try to run the HTML help compiler on the generated index.hhp.\n# The file has to be specified with full path.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nHHC_LOCATION           = \n\n# The GENERATE_CHI flag controls if a separate .chi index file is generated (\n# YES) or that it should be included in the master .chm file ( NO).\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nGENERATE_CHI           = NO\n\n# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)\n# and project file content.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_INDEX_ENCODING     = \n\n# The BINARY_TOC flag controls whether a binary table of contents is generated (\n# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it\n# enables the Previous and Next buttons.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nBINARY_TOC             = NO\n\n# The TOC_EXPAND flag can be set to YES to add extra items for group members to\n# the table of contents of the HTML help documentation and to the tree view.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nTOC_EXPAND             = NO\n\n# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\n# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that\n# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help\n# (.qch) of the generated HTML documentation.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_QHP           = NO\n\n# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify\n# the file name of the resulting .qch file. The path specified is relative to\n# the HTML output folder.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQCH_FILE               = \n\n# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help\n# Project output. For more information please see Qt Help Project / Namespace\n# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_NAMESPACE          = org.doxygen.Project\n\n# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt\n# Help Project output. For more information please see Qt Help Project / Virtual\n# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-\n# folders).\n# The default value is: doc.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_VIRTUAL_FOLDER     = doc\n\n# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom\n# filter to add. For more information please see Qt Help Project / Custom\n# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-\n# filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_NAME   = \n\n# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the\n# custom filter to add. For more information please see Qt Help Project / Custom\n# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-\n# filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_ATTRS  = \n\n# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\n# project's filter section matches. Qt Help Project / Filter Attributes (see:\n# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_SECT_FILTER_ATTRS  = \n\n# The QHG_LOCATION tag can be used to specify the location of Qt's\n# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the\n# generated .qhp file.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHG_LOCATION           = \n\n# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be\n# generated, together with the HTML files, they form an Eclipse help plugin. To\n# install this plugin and make it available under the help contents menu in\n# Eclipse, the contents of the directory containing the HTML and XML files needs\n# to be copied into the plugins directory of eclipse. The name of the directory\n# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.\n# After copying Eclipse needs to be restarted before the help appears.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_ECLIPSEHELP   = NO\n\n# A unique identifier for the Eclipse help plugin. When installing the plugin\n# the directory name containing the HTML and XML files should also have this\n# name. Each documentation set should have its own identifier.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.\n\nECLIPSE_DOC_ID         = org.doxygen.Project\n\n# If you want full control over the layout of the generated HTML pages it might\n# be necessary to disable the index and replace it with your own. The\n# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top\n# of each HTML page. A value of NO enables the index and the value YES disables\n# it. Since the tabs in the index contain the same information as the navigation\n# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nDISABLE_INDEX          = NO\n\n# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n# structure should be generated to display hierarchical information. If the tag\n# value is set to YES, a side panel will be generated containing a tree-like\n# index structure (just like the one that is generated for HTML Help). For this\n# to work a browser that supports JavaScript, DHTML, CSS and frames is required\n# (i.e. any modern browser). Windows users are probably better off using the\n# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can\n# further fine-tune the look of the index. As an example, the default style\n# sheet generated by doxygen has an example that shows how to put an image at\n# the root of the tree instead of the PROJECT_NAME. Since the tree basically has\n# the same information as the tab index, you could consider setting\n# DISABLE_INDEX to YES when enabling this option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_TREEVIEW      = NO\n\n# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that\n# doxygen will group on one line in the generated HTML documentation.\n#\n# Note that a value of 0 will completely suppress the enum values from appearing\n# in the overview section.\n# Minimum value: 0, maximum value: 20, default value: 4.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nENUM_VALUES_PER_LINE   = 4\n\n# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used\n# to set the initial width (in pixels) of the frame in which the tree is shown.\n# Minimum value: 0, maximum value: 1500, default value: 250.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nTREEVIEW_WIDTH         = 250\n\n# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to\n# external symbols imported via tag files in a separate window.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nEXT_LINKS_IN_WINDOW    = NO\n\n# Use this tag to change the font size of LaTeX formulas included as images in\n# the HTML documentation. When you change the font size after a successful\n# doxygen run you need to manually remove any form_*.png images from the HTML\n# output directory to force them to be regenerated.\n# Minimum value: 8, maximum value: 50, default value: 10.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_FONTSIZE       = 10\n\n# Use the FORMULA_TRANPARENT tag to determine whether or not the images\n# generated for formulas are transparent PNGs. Transparent PNGs are not\n# supported properly for IE 6.0, but are supported on all modern browsers.\n#\n# Note that when changing this option you need to delete any form_*.png files in\n# the HTML output directory before the changes have effect.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_TRANSPARENT    = YES\n\n# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see\n# http://www.mathjax.org) which uses client side Javascript for the rendering\n# instead of using prerendered bitmaps. Use this if you do not have LaTeX\n# installed or if you want to formulas look prettier in the HTML output. When\n# enabled you may also need to install MathJax separately and configure the path\n# to it using the MATHJAX_RELPATH option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nUSE_MATHJAX            = NO\n\n# When MathJax is enabled you can set the default output format to be used for\n# the MathJax output. See the MathJax site (see:\n# http://docs.mathjax.org/en/latest/output.html) for more details.\n# Possible values are: HTML-CSS (which is slower, but has the best\n# compatibility), NativeMML (i.e. MathML) and SVG.\n# The default value is: HTML-CSS.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_FORMAT         = HTML-CSS\n\n# When MathJax is enabled you need to specify the location relative to the HTML\n# output directory using the MATHJAX_RELPATH option. The destination directory\n# should contain the MathJax.js script. For instance, if the mathjax directory\n# is located at the same level as the HTML output directory, then\n# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax\n# Content Delivery Network so you can quickly see the result without installing\n# MathJax. However, it is strongly recommended to install a local copy of\n# MathJax from http://www.mathjax.org before deployment.\n# The default value is: http://cdn.mathjax.org/mathjax/latest.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest\n\n# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax\n# extension names that should be enabled during MathJax rendering. For example\n# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_EXTENSIONS     = \n\n# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces\n# of code that will be used on startup of the MathJax code. See the MathJax site\n# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an\n# example see the documentation.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_CODEFILE       = \n\n# When the SEARCHENGINE tag is enabled doxygen will generate a search box for\n# the HTML output. The underlying search engine uses javascript and DHTML and\n# should work on any modern browser. Note that when using HTML help\n# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)\n# there is already a search function so this one should typically be disabled.\n# For large projects the javascript based search engine can be slow, then\n# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to\n# search using the keyboard; to jump to the search box use <access key> + S\n# (what the <access key> is depends on the OS and browser, but it is typically\n# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down\n# key> to jump into the search results window, the results can be navigated\n# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel\n# the search. The filter options can be selected when the cursor is inside the\n# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>\n# to select a filter and <Enter> or <escape> to activate or cancel the filter\n# option.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nSEARCHENGINE           = YES\n\n# When the SERVER_BASED_SEARCH tag is enabled the search engine will be\n# implemented using a web server instead of a web client using Javascript. There\n# are two flavors of web server based searching depending on the EXTERNAL_SEARCH\n# setting. When disabled, doxygen will generate a PHP script for searching and\n# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing\n# and searching needs to be provided by external tools. See the section\n# \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSERVER_BASED_SEARCH    = NO\n\n# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP\n# script for searching. Instead the search results are written to an XML file\n# which needs to be processed by an external indexer. Doxygen will invoke an\n# external search engine pointed to by the SEARCHENGINE_URL option to obtain the\n# search results.\n#\n# Doxygen ships with an example indexer ( doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see: http://xapian.org/).\n#\n# See the section \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH        = NO\n\n# The SEARCHENGINE_URL should point to a search engine hosted by a web server\n# which will return the search results when EXTERNAL_SEARCH is enabled.\n#\n# Doxygen ships with an example indexer ( doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see: http://xapian.org/). See the section \"External Indexing and\n# Searching\" for details.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHENGINE_URL       = \n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed\n# search data is written to a file for indexing by an external tool. With the\n# SEARCHDATA_FILE tag the name of this file can be specified.\n# The default file is: searchdata.xml.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHDATA_FILE        = searchdata.xml\n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the\n# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is\n# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple\n# projects and redirect the results back to the right project.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH_ID     = \n\n# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\n# projects other than the one defined by this configuration file, but that are\n# all added to the same external search index. Each project needs to have a\n# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of\n# to a relative location where the documentation can be found. The format is:\n# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTRA_SEARCH_MAPPINGS  = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the LaTeX output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.\n# The default value is: YES.\n\nGENERATE_LATEX         = NO\n\n# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: latex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_OUTPUT           = latex\n\n# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\n# invoked.\n#\n# Note that when enabling USE_PDFLATEX this option is only used for generating\n# bitmaps for formulas in the HTML output, but not in the Makefile that is\n# written to the output directory.\n# The default file is: latex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_CMD_NAME         = latex\n\n# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate\n# index for LaTeX.\n# The default file is: makeindex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nMAKEINDEX_CMD_NAME     = makeindex\n\n# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nCOMPACT_LATEX          = NO\n\n# The PAPER_TYPE tag can be used to set the paper type that is used by the\n# printer.\n# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x\n# 14 inches) and executive (7.25 x 10.5 inches).\n# The default value is: a4.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPAPER_TYPE             = a4\n\n# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names\n# that should be included in the LaTeX output. To get the times font for\n# instance you can specify\n# EXTRA_PACKAGES=times\n# If left blank no extra packages will be included.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nEXTRA_PACKAGES         = \n\n# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the\n# generated LaTeX document. The header should contain everything until the first\n# chapter. If it is left blank doxygen will generate a standard header. See\n# section \"Doxygen usage\" for information on how to let doxygen write the\n# default header to a separate file.\n#\n# Note: Only use a user-defined header if you know what you are doing! The\n# following commands have a special meaning inside the header: $title,\n# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will\n# replace them by respectively the title of the page, the current date and time,\n# only the current date, the version number of doxygen, the project name (see\n# PROJECT_NAME), or the project number (see PROJECT_NUMBER).\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HEADER           = \n\n# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the\n# generated LaTeX document. The footer should contain everything after the last\n# chapter. If it is left blank doxygen will generate a standard footer.\n#\n# Note: Only use a user-defined footer if you know what you are doing!\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_FOOTER           = \n\n# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the LATEX_OUTPUT output\n# directory. Note that the files will be copied as-is; there are no commands or\n# markers available.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_FILES      = \n\n# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is\n# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will\n# contain links (just like the HTML output) instead of page references. This\n# makes the output suitable for online browsing using a PDF viewer.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPDF_HYPERLINKS         = YES\n\n# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate\n# the PDF file directly from the LaTeX files. Set this option to YES to get a\n# higher quality PDF documentation.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nUSE_PDFLATEX           = YES\n\n# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode\n# command to the generated LaTeX files. This will instruct LaTeX to keep running\n# if errors occur, instead of asking the user for help. This option is also used\n# when generating formulas in HTML.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BATCHMODE        = NO\n\n# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the\n# index chapters (such as File Index, Compound Index, etc.) in the output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HIDE_INDICES     = NO\n\n# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source\n# code with syntax highlighting in the LaTeX output.\n#\n# Note that which sources are shown also depends on other settings such as\n# SOURCE_BROWSER.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_SOURCE_CODE      = NO\n\n# The LATEX_BIB_STYLE tag can be used to specify the style to use for the\n# bibliography, e.g. plainnat, or ieeetr. See\n# http://en.wikipedia.org/wiki/BibTeX and \\cite for more info.\n# The default value is: plain.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BIB_STYLE        = plain\n\n#---------------------------------------------------------------------------\n# Configuration options related to the RTF output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The\n# RTF output is optimized for Word 97 and may not look too pretty with other RTF\n# readers/editors.\n# The default value is: NO.\n\nGENERATE_RTF           = NO\n\n# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: rtf.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_OUTPUT             = rtf\n\n# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nCOMPACT_RTF            = NO\n\n# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will\n# contain hyperlink fields. The RTF file will contain links (just like the HTML\n# output) instead of page references. This makes the output suitable for online\n# browsing using Word or some other Word compatible readers that support those\n# fields.\n#\n# Note: WordPad (write) and others do not support links.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_HYPERLINKS         = NO\n\n# Load stylesheet definitions from file. Syntax is similar to doxygen's config\n# file, i.e. a series of assignments. You only have to provide replacements,\n# missing definitions are set to their default value.\n#\n# See also section \"Doxygen usage\" for information on how to generate the\n# default style sheet that doxygen normally uses.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_STYLESHEET_FILE    = \n\n# Set optional variables used in the generation of an RTF document. Syntax is\n# similar to doxygen's config file. A template extensions file can be generated\n# using doxygen -e rtf extensionFile.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_EXTENSIONS_FILE    = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the man page output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for\n# classes and files.\n# The default value is: NO.\n\nGENERATE_MAN           = NO\n\n# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it. A directory man3 will be created inside the directory specified by\n# MAN_OUTPUT.\n# The default directory is: man.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_OUTPUT             = man\n\n# The MAN_EXTENSION tag determines the extension that is added to the generated\n# man pages. In case the manual section does not start with a number, the number\n# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is\n# optional.\n# The default value is: .3.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_EXTENSION          = .3\n\n# The MAN_SUBDIR tag determines the name of the directory created within\n# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by\n# MAN_EXTENSION with the initial . removed.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_SUBDIR             = \n\n# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it\n# will generate one additional man file for each entity documented in the real\n# man page(s). These additional files only source the real man page, but without\n# them the man command would be unable to find the correct page.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_LINKS              = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the XML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that\n# captures the structure of the code including all documentation.\n# The default value is: NO.\n\nGENERATE_XML           = YES\n\n# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: xml.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_OUTPUT             = xml\n\n# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program\n# listings (including syntax highlighting and cross-referencing information) to\n# the XML output. Note that enabling this will significantly increase the size\n# of the XML output.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_PROGRAMLISTING     = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to the DOCBOOK output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files\n# that can be used to generate PDF.\n# The default value is: NO.\n\nGENERATE_DOCBOOK       = NO\n\n# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.\n# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in\n# front of it.\n# The default directory is: docbook.\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\n\nDOCBOOK_OUTPUT         = docbook\n\n#---------------------------------------------------------------------------\n# Configuration options for the AutoGen Definitions output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen\n# Definitions (see http://autogen.sf.net) file that captures the structure of\n# the code including all documentation. Note that this feature is still\n# experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_AUTOGEN_DEF   = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the Perl module output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module\n# file that captures the structure of the code including all documentation.\n#\n# Note that this feature is still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_PERLMOD       = NO\n\n# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary\n# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI\n# output from the Perl module output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_LATEX          = NO\n\n# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely\n# formatted so it can be parsed by a human reader. This is useful if you want to\n# understand what is going on. On the other hand, if this tag is set to NO the\n# size of the Perl module output will be much smaller and Perl will parse it\n# just the same.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_PRETTY         = YES\n\n# The names of the make variables in the generated doxyrules.make file are\n# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful\n# so different doxyrules.make files included by the same Makefile don't\n# overwrite each other's variables.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_MAKEVAR_PREFIX = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the preprocessor\n#---------------------------------------------------------------------------\n\n# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all\n# C-preprocessor directives found in the sources and include files.\n# The default value is: YES.\n\nENABLE_PREPROCESSING   = YES\n\n# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names\n# in the source code. If set to NO only conditional compilation will be\n# performed. Macro expansion can be done in a controlled way by setting\n# EXPAND_ONLY_PREDEF to YES.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nMACRO_EXPANSION        = NO\n\n# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then\n# the macro expansion is limited to the macros specified with the PREDEFINED and\n# EXPAND_AS_DEFINED tags.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_ONLY_PREDEF     = NO\n\n# If the SEARCH_INCLUDES tag is set to YES the includes files in the\n# INCLUDE_PATH will be searched if a #include is found.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSEARCH_INCLUDES        = YES\n\n# The INCLUDE_PATH tag can be used to specify one or more directories that\n# contain include files that are not input files but should be processed by the\n# preprocessor.\n# This tag requires that the tag SEARCH_INCLUDES is set to YES.\n\nINCLUDE_PATH           = \n\n# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\n# patterns (like *.h and *.hpp) to filter out the header-files in the\n# directories. If left blank, the patterns specified with FILE_PATTERNS will be\n# used.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nINCLUDE_FILE_PATTERNS  = \n\n# The PREDEFINED tag can be used to specify one or more macro names that are\n# defined before the preprocessor is started (similar to the -D option of e.g.\n# gcc). The argument of the tag is a list of macros of the form: name or\n# name=definition (no spaces). If the definition and the \"=\" are omitted, \"=1\"\n# is assumed. To prevent a macro definition from being undefined via #undef or\n# recursively expanded use the := operator instead of the = operator.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nPREDEFINED             = \n\n# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this\n# tag can be used to specify a list of macro names that should be expanded. The\n# macro definition that is found in the sources will be used. Use the PREDEFINED\n# tag if you want to use a different macro definition that overrules the\n# definition found in the source code.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_AS_DEFINED      = \n\n# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will\n# remove all references to function-like macros that are alone on a line, have\n# an all uppercase name, and do not end with a semicolon. Such function macros\n# are typically used for boiler-plate code, and will confuse the parser if not\n# removed.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSKIP_FUNCTION_MACROS   = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to external references\n#---------------------------------------------------------------------------\n\n# The TAGFILES tag can be used to specify one or more tag files. For each tag\n# file the location of the external documentation should be added. The format of\n# a tag file without this location is as follows:\n# TAGFILES = file1 file2 ...\n# Adding location for the tag files is done as follows:\n# TAGFILES = file1=loc1 \"file2 = loc2\" ...\n# where loc1 and loc2 can be relative or absolute paths or URLs. See the\n# section \"Linking to external documentation\" for more information about the use\n# of tag files.\n# Note: Each tag file must have a unique name (where the name does NOT include\n# the path). If a tag file is not located in the directory in which doxygen is\n# run, you must also specify the path to the tagfile here.\n\nTAGFILES               = \n\n# When a file name is specified after GENERATE_TAGFILE, doxygen will create a\n# tag file that is based on the input files it reads. See section \"Linking to\n# external documentation\" for more information about the usage of tag files.\n\nGENERATE_TAGFILE       = \n\n# If the ALLEXTERNALS tag is set to YES all external class will be listed in the\n# class index. If set to NO only the inherited external classes will be listed.\n# The default value is: NO.\n\nALLEXTERNALS           = NO\n\n# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in\n# the modules index. If set to NO, only the current project's groups will be\n# listed.\n# The default value is: YES.\n\nEXTERNAL_GROUPS        = YES\n\n# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in\n# the related pages index. If set to NO, only the current project's pages will\n# be listed.\n# The default value is: YES.\n\nEXTERNAL_PAGES         = YES\n\n# The PERL_PATH should be the absolute path and name of the perl script\n# interpreter (i.e. the result of 'which perl').\n# The default file (with absolute path) is: /usr/bin/perl.\n\nPERL_PATH              = /usr/bin/perl\n\n#---------------------------------------------------------------------------\n# Configuration options related to the dot tool\n#---------------------------------------------------------------------------\n\n# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram\n# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to\n# NO turns the diagrams off. Note that this option also works with HAVE_DOT\n# disabled, but it is recommended to install and use dot, since it yields more\n# powerful graphs.\n# The default value is: YES.\n\nCLASS_DIAGRAMS         = YES\n\n# You can define message sequence charts within doxygen comments using the \\msc\n# command. Doxygen will then run the mscgen tool (see:\n# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the\n# documentation. The MSCGEN_PATH tag allows you to specify the directory where\n# the mscgen tool resides. If left empty the tool is assumed to be found in the\n# default search path.\n\nMSCGEN_PATH            = \n\n# You can include diagrams made with dia in doxygen documentation. Doxygen will\n# then run dia to produce the diagram and insert it in the documentation. The\n# DIA_PATH tag allows you to specify the directory where the dia binary resides.\n# If left empty dia is assumed to be found in the default search path.\n\nDIA_PATH               = \n\n# If set to YES, the inheritance and collaboration graphs will hide inheritance\n# and usage relations if the target is undocumented or is not a class.\n# The default value is: YES.\n\nHIDE_UNDOC_RELATIONS   = YES\n\n# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\n# available from the path. This tool is part of Graphviz (see:\n# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent\n# Bell Labs. The other options in this section have no effect if this option is\n# set to NO\n# The default value is: NO.\n\nHAVE_DOT               = NO\n\n# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed\n# to run in parallel. When set to 0 doxygen will base this on the number of\n# processors available in the system. You can set it explicitly to a value\n# larger than 0 to get control over the balance between CPU load and processing\n# speed.\n# Minimum value: 0, maximum value: 32, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_NUM_THREADS        = 0\n\n# When you want a differently looking font n the dot files that doxygen\n# generates you can specify the font name using DOT_FONTNAME. You need to make\n# sure dot is able to find the font, which can be done by putting it in a\n# standard location or by setting the DOTFONTPATH environment variable or by\n# setting DOT_FONTPATH to the directory containing the font.\n# The default value is: Helvetica.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTNAME           = Helvetica\n\n# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of\n# dot graphs.\n# Minimum value: 4, maximum value: 24, default value: 10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTSIZE           = 10\n\n# By default doxygen will tell dot to use the default font as specified with\n# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set\n# the path where dot can find it using this tag.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTPATH           = \n\n# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for\n# each documented class showing the direct and indirect inheritance relations.\n# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCLASS_GRAPH            = YES\n\n# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a\n# graph for each documented class showing the direct and indirect implementation\n# dependencies (inheritance, containment, and class references variables) of the\n# class with other documented classes.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCOLLABORATION_GRAPH    = YES\n\n# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for\n# groups, showing the direct groups dependencies.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGROUP_GRAPHS           = YES\n\n# If the UML_LOOK tag is set to YES doxygen will generate inheritance and\n# collaboration diagrams in a style similar to the OMG's Unified Modeling\n# Language.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LOOK               = NO\n\n# If the UML_LOOK tag is enabled, the fields and methods are shown inside the\n# class node. If there are many fields or methods and many nodes the graph may\n# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the\n# number of items for each type to make the size more manageable. Set this to 0\n# for no limit. Note that the threshold may be exceeded by 50% before the limit\n# is enforced. So when you set the threshold to 10, up to 15 fields may appear,\n# but if the number exceeds 15, the total amount of fields shown is limited to\n# 10.\n# Minimum value: 0, maximum value: 100, default value: 10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LIMIT_NUM_FIELDS   = 10\n\n# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and\n# collaboration graphs will show the relations between templates and their\n# instances.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nTEMPLATE_RELATIONS     = NO\n\n# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to\n# YES then doxygen will generate a graph for each documented file showing the\n# direct and indirect include dependencies of the file with other documented\n# files.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDE_GRAPH          = YES\n\n# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are\n# set to YES then doxygen will generate a graph for each documented file showing\n# the direct and indirect include dependencies of the file with other documented\n# files.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDED_BY_GRAPH      = YES\n\n# If the CALL_GRAPH tag is set to YES then doxygen will generate a call\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable call graphs for selected\n# functions only using the \\callgraph command.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALL_GRAPH             = NO\n\n# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable caller graphs for selected\n# functions only using the \\callergraph command.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALLER_GRAPH           = NO\n\n# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical\n# hierarchy of all classes instead of a textual one.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGRAPHICAL_HIERARCHY    = YES\n\n# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the\n# dependencies a directory has on other directories in a graphical way. The\n# dependency relations are determined by the #include relations between the\n# files in the directories.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDIRECTORY_GRAPH        = YES\n\n# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\n# generated by dot.\n# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order\n# to make the SVG files visible in IE 9+ (other browsers do not have this\n# requirement).\n# Possible values are: png, jpg, gif and svg.\n# The default value is: png.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_IMAGE_FORMAT       = png\n\n# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to\n# enable generation of interactive SVG images that allow zooming and panning.\n#\n# Note that this requires a modern browser other than Internet Explorer. Tested\n# and working are Firefox, Chrome, Safari, and Opera.\n# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make\n# the SVG files visible. Older versions of IE do not have SVG support.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINTERACTIVE_SVG        = NO\n\n# The DOT_PATH tag can be used to specify the path where the dot tool can be\n# found. If left blank, it is assumed the dot tool can be found in the path.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_PATH               = \n\n# The DOTFILE_DIRS tag can be used to specify one or more directories that\n# contain dot files that are included in the documentation (see the \\dotfile\n# command).\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOTFILE_DIRS           = \n\n# The MSCFILE_DIRS tag can be used to specify one or more directories that\n# contain msc files that are included in the documentation (see the \\mscfile\n# command).\n\nMSCFILE_DIRS           = \n\n# The DIAFILE_DIRS tag can be used to specify one or more directories that\n# contain dia files that are included in the documentation (see the \\diafile\n# command).\n\nDIAFILE_DIRS           = \n\n# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes\n# that will be shown in the graph. If the number of nodes in a graph becomes\n# larger than this value, doxygen will truncate the graph, which is visualized\n# by representing a node as a red box. Note that doxygen if the number of direct\n# children of the root node in a graph is already larger than\n# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that\n# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\n# Minimum value: 0, maximum value: 10000, default value: 50.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_GRAPH_MAX_NODES    = 50\n\n# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs\n# generated by dot. A depth value of 3 means that only nodes reachable from the\n# root by following a path via at most 3 edges will be shown. Nodes that lay\n# further from the root node will be omitted. Note that setting this option to 1\n# or 2 may greatly reduce the computation time needed for large code bases. Also\n# note that the size of a graph can be further restricted by\n# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\n# Minimum value: 0, maximum value: 1000, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nMAX_DOT_GRAPH_DEPTH    = 0\n\n# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent\n# background. This is disabled by default, because dot on Windows does not seem\n# to support this out of the box.\n#\n# Warning: Depending on the platform used, enabling this option may lead to\n# badly anti-aliased labels on the edges of a graph (i.e. they become hard to\n# read).\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_TRANSPARENT        = NO\n\n# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output\n# files in one run (i.e. multiple -o and -T options on the command line). This\n# makes dot run faster, but since only newer versions of dot (>1.8.10) support\n# this, this feature is disabled by default.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_MULTI_TARGETS      = NO\n\n# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page\n# explaining the meaning of the various boxes and arrows in the dot generated\n# graphs.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGENERATE_LEGEND        = YES\n\n# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot\n# files that are used to generate the various graphs.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_CLEANUP            = YES\n"
  },
  {
    "path": "sdk/iOS/src/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>Microsoft.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "sdk/iOS/src/MSAPIConnection.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSClientConnection.h\"\n#import \"MSAPIRequest.h\"\n\n\n#pragma  mark * MSAPIConnection Public Interface\n\n\n// The |MSAPIConnection| class is a subclass of the |MSClientConnection|\n// that takes |MSAPIRequest| instances and the appropriate |MS*ApiBlock|\n// instances for calling back into when the response is received.\n@interface MSAPIConnection : MSClientConnection\n\n\n#pragma  mark * Public Static Constructor Methods\n\n\n// Creates a connection for an invoke API request.\n// NOTE: The request is not sent until |start| is called.\n+(MSAPIConnection *)connectionWithApiDataRequest:(MSAPIRequest *)request\n                                          client:(MSClient *)client\n                                      completion:(MSAPIDataBlock)completion;\n\n// Creates a connection for an invoke API request that uses JSON.\n// NOTE: The request is not sent until |start| is called.\n+(MSAPIConnection *)connectionWithApiRequest:(MSAPIRequest *)request\n                                      client:(MSClient *)client\n                                  completion:(MSAPIBlock)completion;\n\n@end"
  },
  {
    "path": "sdk/iOS/src/MSAPIConnection.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSAPIConnection.h\"\n\n\n#pragma mark * MSAPIConnection Private Interface\n\n\n@interface MSAPIConnection ()\n\n// Private properties\n@property (nonatomic, strong, readwrite)        id<MSSerializer> serializer;\n\n@end\n\n\n#pragma mark * MSAPIConnection Implementation\n\n\n@implementation MSAPIConnection\n\n@synthesize serializer = serializer_;\n\n\n#pragma mark * Public Static Constructors\n\n\n+(MSAPIConnection *)connectionWithApiDataRequest:(MSAPIRequest *)request\n                                          client:(MSClient *)client\n                                      completion:(MSAPIDataBlock)completion\n{\n    // We'll use the conection in the response block below but won't set\n    // it until the init at the end, so we need to use __block\n    __block MSAPIConnection *connection = nil;\n    \n    // Create an HTTP response block that will invoke the MSItemBlock\n    MSResponseBlock responseCompletion = nil;\n    \n    if (completion) {\n        \n        responseCompletion =\n        ^(NSHTTPURLResponse *response, NSData *data, NSError *error)\n        {\n            if (!error) {\n                [connection isSuccessfulResponse:response\n                                            data:data\n                                         orError:&error];\n            }\n            \n            if (error) {\n                [connection addRequestAndResponse:response toError:&error];\n                data = nil;\n                response = nil;\n            }\n            \n            completion(data, response, error);\n        };\n    }\n    \n    // Now create the connection with the MSResponseBlock\n     connection = [[MSAPIConnection alloc] initWithApiRequest:request\n                                                       client:client \n                                                   completion:responseCompletion];\n    return connection;\n}\n\n+(MSAPIConnection *)connectionWithApiRequest:(MSAPIRequest *)request\n                                      client:(MSClient *)client\n                                  completion:(MSAPIBlock)completion\n{\n    // We'll use the conection in the response block below but won't set\n    // it until the init at the end, so we need to use __block\n    __block MSAPIConnection *connection = nil;\n    \n    // Create an HTTP response block that will invoke the MSItemBlock\n    MSResponseBlock responseCompletion = nil;\n    \n    if (completion) {\n        \n        responseCompletion =\n        ^(NSHTTPURLResponse *response, NSData *data, NSError *error)\n        {\n            id item = nil;\n            \n            if (!error) {\n                \n                [connection isSuccessfulResponse:response\n                                            data:data\n                                         orError:&error];\n                if (!error && data)\n                {\n                    item = [connection itemFromData:data\n                                           response:response\n                                   ensureDictionary:NO\n                                            orError:&error];\n                }\n            }\n            \n            [connection addRequestAndResponse:response toError:&error];\n            completion(item, response, error);\n            connection = nil;\n        };\n    }\n    \n    // Now create the connection with the MSResponseBlock\n    connection = [[MSAPIConnection alloc] initWithApiRequest:request\n                                                      client:client \n                                                  completion:responseCompletion];\n    return connection;\n}\n\n\n# pragma mark * Private Init Methods\n\n\n-(id) initWithApiRequest:(MSAPIRequest *)request\n                  client:(MSClient *)client\n              completion:(MSResponseBlock)completion\n{\n    self = [super initWithRequest:request\n                           client:client\n                       completion:completion];\n    return self;\n}\n\n@end"
  },
  {
    "path": "sdk/iOS/src/MSAPIRequest.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n#import \"MSSerializer.h\"\n\n\n#pragma mark * MSAPIRequest Public Interface\n\n\n// The |MSAPIRequest| class represents a request to invoke a user-defined\n// API of a Microsoft Azure Mobile Service.\n@interface MSAPIRequest : NSMutableURLRequest\n\n\n#pragma mark * Public Readonly Properties\n\n\n// The client associated with this table.\n//@property (nonatomic, strong, readonly)         MSClient *client;\n\n// The serializer used to serialize the data for the request and/or deserialize\n// the data in the respective response.\n@property (nonatomic, strong, readonly)     id<MSSerializer> serializer;\n\n// The user-defined parameters to be included in the request query string.\n@property (nonatomic, strong, readonly)     NSDictionary *parameters;\n\n\n#pragma  mark * Public Static Constructor Methods\n\n\n// Creates a request to insert the item into the given table.\n+(MSAPIRequest *) requestToinvokeAPI:(NSString *)APIName\n                              client:(MSClient *)client\n                                data:(NSData *)data\n                          HTTPMethod:(NSString *)method\n                          parameters:(NSDictionary *)parameters\n                             headers:(NSDictionary *)headers\n                          completion:(MSAPIDataBlock)completion;\n\n// Creates a request to insert the item into the given table.\n+(MSAPIRequest *) requestToinvokeAPI:(NSString *)APIName\n                                  client:(MSClient *)client\n                                    body:(id)body\n                              HTTPMethod:(NSString *)method\n                              parameters:(NSDictionary *)parameters\n                                 headers:(NSDictionary *)headers\n                              completion:(MSAPIBlock)completion;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSAPIRequest.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSAPIRequest.h\"\n#import \"MSURLBuilder.h\"\n#import \"MSSDKFeatures.h\"\n#import \"MSClientInternal.h\"\n\n#pragma mark * MSAPIRequest Implementation\n\n\n@implementation MSAPIRequest\n\n\n#pragma mark * Public Static Constructors\n\n\n+(MSAPIRequest *) requestToinvokeAPI:(NSString *)APIName\n                              client:(MSClient *)client\n                                data:(NSData *)data\n                          HTTPMethod:(NSString *)method\n                          parameters:(NSDictionary *)parameters\n                             headers:(NSDictionary *)headers\n                          completion:(MSAPIDataBlock)completion\n{\n    return [MSAPIRequest requestToinvokeAPI:APIName client:client data:data HTTPMethod:method parameters:parameters headers:headers features:MSFeatureApiGeneric completion:completion];\n}\n\n+(MSAPIRequest *) requestToinvokeAPI:(NSString *)APIName\n                              client:(MSClient *)client\n                                body:(id)body\n                          HTTPMethod:(NSString *)method\n                          parameters:(NSDictionary *)parameters\n                             headers:(NSDictionary *)headers\n                          completion:(MSAPIBlock)completion\n{\n    MSAPIRequest *request = nil;\n    NSError *error = nil;\n    \n    // Create the body or capture the error from serialization\n    NSData *data = nil;\n    if (body) {\n        data = [client.serializer dataFromItem:body\n                                     idAllowed:YES\n                              ensureDictionary:NO\n                        removeSystemProperties:NO\n                                       orError:&error];\n    }\n\n    // If there was an error, call the completion and make sure\n    // to return nil for the request\n    if (error) {\n        if (completion) {\n            completion(nil, nil, error);\n        }\n    }\n    else {\n        request = [MSAPIRequest requestToinvokeAPI:APIName\n                                            client:client\n                                              data:data\n                                        HTTPMethod:method\n                                        parameters:parameters\n                                           headers:headers\n                                          features:MSFeatureApiJson\n                                        completion:completion];\n    }\n    \n    return request;\n}\n\n#pragma mark * Private Static Constructor\n\n+(MSAPIRequest *) requestToinvokeAPI:(NSString *)APIName\n                              client:(MSClient *)client\n                                data:(NSData *)data\n                          HTTPMethod:(NSString *)method\n                          parameters:(NSDictionary *)parameters\n                             headers:(NSDictionary *)headers\n                            features:(MSFeatures)features\n                          completion:(MSAPIDataBlock)completion\n{\n    MSAPIRequest *request = nil;\n    NSError *error = nil;\n\n    // Create the URL\n    NSURL *url = [MSURLBuilder URLForApi:client\n                                 APIName:APIName\n                              parameters:parameters\n                                 orError:&error];\n\n    // If there was an error, call the completion and make sure\n    // to return nil for the request\n    if (error) {\n        if (completion) {\n            completion(nil, nil, error);\n        }\n    }\n    else {\n        if (parameters && [parameters count]) {\n            features |= MSFeatureQueryParameters;\n        }\n\n        // Create the request\n        request = [[MSAPIRequest alloc] initWithURL:url];\n\n        // Set the body\n        request.HTTPBody = data;\n\n        // Set the user-defined headers properties\n        [request setAllHTTPHeaderFields:headers];\n\n        if (![headers objectForKey:MSFeaturesHeaderName]) {\n            NSString *featuresHeader = [MSSDKFeatures httpHeaderForFeatures:features];\n            if (featuresHeader) {\n                [request setValue:featuresHeader forHTTPHeaderField:MSFeaturesHeaderName];\n            }\n        }\n\n        // Set the method and headers\n        request.HTTPMethod = [method uppercaseString];\n        if (!request.HTTPMethod) {\n            request.HTTPMethod = @\"POST\";\n        }\n    }\n\n    return request;\n}\n\n\n#pragma mark * Private Initializer Method\n\n\n-(id) initWithURL:(NSURL *)url\n{\n    self = [super initWithURL:url];\n    \n    return self;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSClient.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n#import \"MSError.h\"\n#import \"MSFilter.h\"\n#import \"MSLoginController.h\"\n\n@class MSTable;\n@class MSUser;\n@class MSSyncTable;\n@class MSPush;\n@class MSSyncContext;\n\n\n#pragma mark * Block Type Definitions\n/// Callback for method with no return other than error.\ntypedef void (^MSCompletionBlock)(NSError *error);\n\n/// Callback for invokeAPI method that expects a JSON result.\ntypedef void (^MSAPIBlock)(id result, NSHTTPURLResponse *response, NSError *error);\n\n/// Callback for the invokeAPI method that can return any media type.\ntypedef void (^MSAPIDataBlock)(NSData *result,\n                               NSHTTPURLResponse *response,\n                               NSError *error);\n\n#pragma  mark * MSClient Public Interface\n\n/// The MSClient class is the starting point for working with a Microsoft Azure\n/// Mobile Service on a client device. An instance of the *MSClient* class is\n/// created with a URL pointing to a Microsoft Azure Mobile Service. The *MSClient*\n/// allows the developer to get MSTable instances, which are used to work with\n/// the data of the Microsoft Azure Mobile Service, as well as login and logout an\n/// end user.\n@interface MSClient : NSObject <NSCopying>\n\n#pragma mark * Public Readonly Properties\n\n/// @name Properties\n/// @{\n\n/// The URL of the Microsoft Azure Mobile Service associated with the client.\n@property (nonatomic, strong, readonly)     NSURL *applicationURL;\n\n/// The application key for the Microsoft Azure Mobile Service associated with\n/// the client if one was provided in the creation of the client and nil\n/// otherwise. If non-nil, the application key will be included in all requests\n/// made to the Microsoft Azure Mobile Service, allowing the client to perform\n/// all actions on the Microsoft Azure Mobile Service that require application-key\n/// level permissions.\n@property (nonatomic, copy, readonly)     NSString *applicationKey;\n\n/// A collection of MSFilter instances to apply to use with the requests and\n/// responses sent and received by the client. The property is readonly and the\n/// array is not-mutable. To apply a filter to a client, use the withFilter:\n/// method.\n@property (nonatomic, strong, readonly)         NSArray *filters;\n\n/// A sync context that defines how offline data is synced and allows for manually\n/// syncing data on demand\n@property (nonatomic, strong)     MSSyncContext *syncContext;\n\n/// @name Registering and unregistering for push notifications\n\n/// The property to use for registering and unregistering for notifications via *MSPush*.\n@property (nonatomic, strong, readonly)     MSPush *push;\n\n/// @}\n\n#pragma mark * Public ReadWrite Properties\n\n\n/// The currently logged in user. While the currentUser property can be set\n/// directly, the login* and logout methods are more convenient and\n/// recommended for non-testing use.\n@property (nonatomic, strong)               MSUser *currentUser;\n\n/// @}\n\n#pragma  mark * Public Static Constructor Methods\n\n/// @name Initializing the MSClient Object\n/// @{\n\n/// Creates a client with the given URL for the Microsoft Azure Mobile Service.\n+(MSClient *)clientWithApplicationURLString:(NSString *)urlString;\n\n/// Creates a client with the given URL and application key for the Microsoft Azure\n/// Mobile Service.\n+(MSClient *)clientWithApplicationURLString:(NSString *)urlString\n                         applicationKey:(NSString *)key;\n\n/// Old method to create a client with the given URL and application key for the\n/// Microsoft Azure Mobile Service. This has been deprecated. Use\n/// clientWithApplicationURLString:applicationKey:\n/// @deprecated\n+(MSClient *)clientWithApplicationURLString:(NSString *)urlString\n                         withApplicationKey:(NSString *)key __deprecated;\n\n/// Creates a client with the given URL for the Microsoft Azure Mobile Service.\n+(MSClient *)clientWithApplicationURL:(NSURL *)url;\n\n/// Creates a client with the given URL and application key for the Microsoft Azure\n/// Mobile Service.\n+(MSClient *)clientWithApplicationURL:(NSURL *)url\n                       applicationKey:(NSString *)key;\n\n#pragma  mark * Public Initializer Methods\n\n/// Initializes a client with the given URL for the Microsoft Azure Mobile Service.\n-(id)initWithApplicationURL:(NSURL *)url;\n\n/// Initializes a client with the given URL and application key for the Windows\n/// Azure Mobile Service.\n-(id)initWithApplicationURL:(NSURL *)url applicationKey:(NSString *)key;\n\n#pragma mark * Public Filter Methods\n\n/// Creates a clone of the client with the given filter applied to the new client.\n-(MSClient *)clientWithFilter:(id<MSFilter>)filter;\n\n///@}\n\n/// @name Authenticating Users\n/// @{\n\n#pragma mark * Public Login and Logout Methods\n\n/// Logs in the current end user with the given provider by presenting the\n/// MSLoginController with the given controller.\n-(void)loginWithProvider:(NSString *)provider\n              controller:(UIViewController *)controller\n                animated:(BOOL)animated\n              completion:(MSClientLoginBlock)completion;\n\n/// Returns an MSLoginController that can be used to log in the current\n/// end user with the given provider.\n-(MSLoginController *)loginViewControllerWithProvider:(NSString *)provider\n                                 completion:(MSClientLoginBlock)completion;\n\n/// Logs in the current end user with the given provider and the given token for\n/// the provider.\n-(void)loginWithProvider:(NSString *)provider\n                   token:(NSDictionary *)token\n              completion:(MSClientLoginBlock)completion;\n\n/// Logs out the current end user.\n-(void)logout;\n\n/// @}\n\n#pragma mark * Public Table Methods\n\n/// @name Querying Tables\n/// @{\n\n/// Returns an MSTable instance for a table with the given name.\n-(MSTable *)tableWithName:(NSString *)tableName;\n\n/// Old method to return an MSTable instance for a table with the given name.\n/// This has been deprecated. Use tableWithName:\n-(MSTable *)getTable:(NSString *)tableName __deprecated;\n\n/// Returns an MSSyncTable instance for a table with the given name.\n-(MSSyncTable *)syncTableWithName:(NSString *)tableName;\n\n/// @}\n\n#pragma mark * Public invokeAPI Methods\n\n/// @name Invoking Custom APIs\n/// @{\n\n/// Invokes a user-defined API of the Mobile Service.  The HTTP request and\n/// response content will be treated as JSON.\n-(void)invokeAPI:(NSString *)APIName\n            body:(id)body\n      HTTPMethod:(NSString *)method\n      parameters:(NSDictionary *)parameters\n         headers:(NSDictionary *)headers\n      completion:(MSAPIBlock)completion;\n\n/// Invokes a user-defined API of the Mobile Service.  The HTTP request and\n/// response content can be of any media type.\n-(void)invokeAPI:(NSString *)APIName\n            data:(NSData *)data\n      HTTPMethod:(NSString *)method\n      parameters:(NSDictionary *)parameters\n         headers:(NSDictionary *)headers\n      completion:(MSAPIDataBlock)completion;\n\n/// @}\n\n\n#pragma mark * Public Connection Methods\n\n\n/// @name Controlling connections to the server\n/// @{\n\n/// Determines where connections made to the mobile service are run. If set, connection related\n/// logic will occur on this queue. Otherwise, the thread that made the call will be used.\n@property (nonatomic, strong) NSOperationQueue *connectionDelegateQueue;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSClient.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSClientInternal.h\"\n#import \"MSTable.h\"\n#import \"MSClientConnection.h\"\n#import \"MSLogin.h\"\n#import \"MSUser.h\"\n#import \"MSAPIRequest.h\"\n#import \"MSAPIConnection.h\"\n#import \"MSJSONSerializer.h\"\n#import \"MSSyncContextInternal.h\"\n#import \"MSSyncTable.h\"\n#import \"MSPush.h\"\n\n#pragma mark * MSClient Private Interface\n\n@interface MSClient ()\n\n// Public readonly, private readwrite properties\n@property (nonatomic, strong, readwrite)         NSArray *filters;\n\n// Private properties\n@property (nonatomic, strong, readonly)         MSLogin *login;\n\n@end\n\n\n#pragma mark * MSClient Implementation\n\n\n@implementation MSClient\n\n@synthesize applicationURL = applicationURL_;\n@synthesize applicationKey = applicationKey_;\n@synthesize currentUser = currentUser_;\n@synthesize login = login_;\n@synthesize serializer = serializer_;\n@synthesize syncContext = syncContext_;\n- (void) setSyncContext:(MSSyncContext *)syncContext\n{\n    syncContext_ = syncContext;\n    if (syncContext) {\n        syncContext_.client = self;    \n    }\n}\n\n@synthesize installId = installId_;\n-(NSString *) installId\n{\n    if(!installId_) {\n        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n        installId_ = [defaults stringForKey:@\"WindowsAzureMobileServicesInstallationId\"];\n        if(!installId_) {\n            CFUUIDRef newUUID = CFUUIDCreate(kCFAllocatorDefault);\n            installId_ = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, newUUID);\n            CFRelease(newUUID);\n        \n            //store the install ID so we don't generate a new one next time\n            [defaults setObject:installId_ forKey:@\"WindowsAzureMobileServicesInstallationId\"];\n            [defaults synchronize];\n        }\n    }\n    \n    return installId_;\n}\n\n#pragma mark * Public Static Constructor Methods\n\n\n+(MSClient *) clientWithApplicationURLString:(NSString *)urlString\n{\n    return [MSClient clientWithApplicationURLString:urlString\n                                 applicationKey:nil];\n}\n\n+(MSClient *) clientWithApplicationURLString:(NSString *)urlString\n                           applicationKey:(NSString *)key\n{\n    // NSURL will be nil for non-percent escaped url strings so we have to percent escape here\n    NSMutableCharacterSet *set = [[NSCharacterSet URLPathAllowedCharacterSet] mutableCopy];\n    [set formUnionWithCharacterSet:[NSCharacterSet URLHostAllowedCharacterSet]];\n    [set formUnionWithCharacterSet:[NSCharacterSet URLQueryAllowedCharacterSet]];\n    \n    NSString *urlStringEncoded = [urlString stringByAddingPercentEncodingWithAllowedCharacters:set];\n    \n    NSURL *url = [NSURL URLWithString:urlStringEncoded];\n    return [MSClient clientWithApplicationURL:url applicationKey:key];\n}\n\n+(MSClient *) clientWithApplicationURLString:(NSString *)urlString\n                          withApplicationKey:(NSString *)key\n{\n    return [MSClient clientWithApplicationURLString:urlString\n                                     applicationKey:key];\n}\n\n+(MSClient *) clientWithApplicationURL:(NSURL *)url\n{\n    return [MSClient clientWithApplicationURL:url applicationKey:nil];\n}\n\n+(MSClient *) clientWithApplicationURL:(NSURL *)url\n                    applicationKey:(NSString *)key\n{\n    return [[MSClient alloc] initWithApplicationURL:url applicationKey:key];    \n}\n\n\n#pragma mark * Public Initializer Methods\n\n\n-(id) initWithApplicationURL:(NSURL *)url\n{\n    return [self initWithApplicationURL:url applicationKey:nil];\n}\n\n-(id) initWithApplicationURL:(NSURL *)url applicationKey:(NSString *)key\n{\n    self = [super init];\n    if(self)\n    {\n        applicationURL_ = url;\n        applicationKey_ = [key copy];\n        login_ = [[MSLogin alloc] initWithClient:self];\n        _push = [[MSPush alloc] initWithClient:self];\n    }\n    return self;\n}\n\n\n#pragma mark * Public Filter Methods\n\n\n-(MSClient *) clientWithFilter:(id<MSFilter>)filter\n{\n    // Create a deep copy of the client (except for the filters)\n    MSClient *newClient = [self copy];\n    \n    // Filter clients should inherit the same sync context\n    newClient.syncContext = self.syncContext;\n    \n    // Either copy or create a new filters array\n    NSMutableArray *filters = [self.filters mutableCopy];\n    if (!filters) {\n        filters = [NSMutableArray arrayWithCapacity:1];\n    }\n    \n    // Add the filter to the filters array\n    [filters addObject:filter];\n    \n    // Set the new filters on the copied client\n    newClient.filters = filters;\n    \n    newClient.connectionDelegateQueue = self.connectionDelegateQueue;\n    \n    return newClient;\n}\n\n\n#pragma mark * Public Authentication Methods\n\n\n-(void) loginWithProvider:(NSString *)provider\n             controller:(UIViewController *)controller\n                 animated:(BOOL)animated\n               completion:(MSClientLoginBlock)completion\n{\n    return [self.login loginWithProvider:provider\n                            controller:controller\n                                animated:animated\n                              completion:completion];\n}\n\n-(MSLoginController *) loginViewControllerWithProvider:(NSString *)provider\n                                      completion:(MSClientLoginBlock)completion\n{\n    return [self.login loginViewControllerWithProvider:provider\n                                            completion:completion];\n}\n\n-(void) loginWithProvider:(NSString *)provider\n                token:(NSDictionary *)token\n               completion:(MSClientLoginBlock)completion;\n{\n   return [self.login loginWithProvider:provider\n                              token:token\n                             completion:completion];\n}\n\n-(void) logout\n{\n    self.currentUser = nil;\n}\n\n\n#pragma mark * Public Table Constructor Methods\n\n-(MSTable *) tableWithName:(NSString *)tableName\n{\n    return [[MSTable alloc] initWithName:tableName client:self];\n}\n\n-(MSTable *) getTable:(NSString *)tableName\n{\n    return [self tableWithName:tableName];\n}\n\n-(MSSyncTable *) syncTableWithName:(NSString *)tableName\n{\n    return [[MSSyncTable alloc] initWithName:tableName client:self];\n}\n\n#pragma mark * Public invokeAPI Methods\n\n\n-(void)invokeAPI:(NSString *)APIName\n            body:(id)body\n      HTTPMethod:(NSString *)method\n      parameters:(NSDictionary *)parameters\n         headers:(NSDictionary *)headers\n      completion:(MSAPIBlock)completion\n{\n    // Create the request\n    MSAPIRequest *request = [MSAPIRequest requestToinvokeAPI:APIName\n                                                      client:self\n                                                        body:body\n                                                  HTTPMethod:method\n                                                  parameters:parameters\n                                                     headers:headers\n                                                  completion:completion];\n    // Send the request\n    if (request) {\n        MSAPIConnection *connection =\n            [MSAPIConnection connectionWithApiRequest:request\n                                               client:self\n                                               completion:completion];\n        [connection start];\n    }\n}\n\n-(void)invokeAPI:(NSString *)APIName\n            data:(NSData *)data\n      HTTPMethod:(NSString *)method\n      parameters:(NSDictionary *)parameters\n         headers:(NSDictionary *)headers\n      completion:(MSAPIDataBlock)completion\n{\n    // Create the request\n    MSAPIRequest *request = [MSAPIRequest requestToinvokeAPI:APIName\n                                                      client:self\n                                                        data:data\n                                                  HTTPMethod:method\n                                                  parameters:parameters\n                                                     headers:headers\n                                                  completion:completion];\n    // Send the request\n    if (request) {\n        MSAPIConnection *connection =\n        [MSAPIConnection connectionWithApiDataRequest:request\n                                               client:self\n                                       completion:completion];\n        [connection start];\n    }\n}\n\n\n#pragma mark * NSCopying Methods\n\n\n-(id) copyWithZone:(NSZone *)zone\n{\n    MSClient *client = [[MSClient allocWithZone:zone]\n                            initWithApplicationURL:self.applicationURL\n                                applicationKey:self.applicationKey];\n                                                                            \n    client.currentUser = [self.currentUser copyWithZone:zone];\n    client.filters = [self.filters copyWithZone:zone];\n\n    return client;\n}\n\n\n#pragma mark * Private Methods\n\n\n-(id<MSSerializer>) serializer\n{\n    // Just use a hard coded reference to MSJSONSerializer\n    return [MSJSONSerializer JSONSerializer];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSClientConnection.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n#import \"MSSerializer.h\"\n\n\n#pragma mark * Block Type Definitions\n\n\n// Callback for connections. If there was an error, the |error| will be non-nil.\n// If there was not an error, the |response| will be non-nil, but\n// the |data| may or may not be nil depending on if the response had content.\ntypedef void (^MSResponseBlock)(NSHTTPURLResponse *response,\n                                NSData *data,\n                                NSError *error);\n\n\n#pragma mark * MSClientConnection Public Interface\n\n\n// The |MSClientConnection| class sends an HTTP request asynchronously and\n// returns either the response and response data or an error via block\n// callbacks.\n@interface MSClientConnection : NSObject\n\n\n#pragma mark * Public Readonly Properties\n\n\n// The client that created the connection\n@property (nonatomic, strong, readonly)     MSClient *client;\n\n// The request used with the connection\n@property (nonatomic, strong, readonly)     NSURLRequest *request;\n\n// The callback to use with the response\n@property (nonatomic, copy, readonly)       MSResponseBlock completion;\n\n\n#pragma  mark * Public Initializer Methods\n\n\n// Initializes an |MSClientConnection| with the given client sends the given\n// request. NOTE: The request is not sent until |start| is called.\n-(id)initWithRequest:(NSURLRequest *)request\n              client:(MSClient *)client\n          completion:(MSResponseBlock)completion;\n\n\n#pragma mark * Public Start Methods\n\n\n// Sends the request.\n-(void) start;\n\n// Sends the request without using the client's filters\n-(void) startWithoutFilters;\n\n\n#pragma mark * Public Response Handling Methods\n\n\n// Determines is a response was successful or not based on the HTTP\n// status code.  If not successful, an error is provided.\n-(BOOL) isSuccessfulResponse:(NSHTTPURLResponse *)response\n                        data:(NSData *)data\n                     orError:(NSError **)error;\n\n// Reads the content of the response using the client's serializer. Returns\n// and error if there is a failure during deserialization of the content.\n-(id) itemFromData:(NSData *)data\n            response:(NSHTTPURLResponse *)response\n            ensureDictionary:(BOOL)ensureDictionary\n            orError:(NSError **)error;\n\n// Given an error, adds the connection's request and the optional response\n// to the error.\n-(void) addRequestAndResponse:(NSHTTPURLResponse *)response\n                      toError:(NSError **)error;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSClientConnection.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSClientConnection.h\"\n#import \"MSUserAgentBuilder.h\"\n#import \"MSFilter.h\"\n#import \"MSUser.h\"\n#import \"MSClientInternal.h\"\n\n#pragma mark * HTTP Header String Constants\n\n\nstatic NSString *const xApplicationHeader = @\"X-ZUMO-APPLICATION\";\nstatic NSString *const contentTypeHeader = @\"Content-Type\";\nstatic NSString *const userAgentHeader = @\"User-Agent\";\nstatic NSString *const zumoVersionHeader = @\"X-ZUMO-VERSION\";\nstatic NSString *const jsonContentType = @\"application/json\";\nstatic NSString *const xZumoAuth = @\"X-ZUMO-AUTH\";\nstatic NSString *const xZumoInstallId = @\"X-ZUMO-INSTALLATION-ID\";\n\n\n#pragma mark * MSConnectionDelegate Private Interface\n\n\n// The |MSConnectionDelegate| is a private class that implements the\n// |NSURLSessionDataDelegate| and surfaces success and error blocks. It\n// is used only by the |MSClientConnection|.\n@interface MSConnectionDelegate : NSObject <NSURLSessionDataDelegate>\n\t\t\n@property (nonatomic, strong)               MSClient *client;\n@property (nonatomic, strong)               NSData *data;\n@property (nonatomic, copy)                 MSResponseBlock completion;\n\n-(id) initWithClient:(MSClient *)client\n          completion:(MSResponseBlock)completion;\n\n@end\n\n\n#pragma mark * MSClientConnection Implementation\n\n\n@implementation MSClientConnection\n\nstatic NSOperationQueue *delegateQueue;\n\n@synthesize client = client_;\n@synthesize request = request_;\n@synthesize completion = completion_;\n\n+(NSURLSession *)sessionWithDelegate:(id<NSURLSessionDelegate>)delegate delegateQueue:(NSOperationQueue *)queue\n{\n\tNSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];\n    \n\tNSURLSession *session = [NSURLSession sessionWithConfiguration:configuration\n\t\t\t\t\t\t\t\t\t\t\t delegate:delegate\n\t\t\t\t\t\t\t\t\t\tdelegateQueue:queue];\n\treturn session;\n}\n\n# pragma mark * Public Initializer Methods\n\n\n-(id) initWithRequest:(NSURLRequest *)request\n               client:(MSClient *)client\n           completion:(MSResponseBlock)completion\n{\n    self = [super init];\n    if (self) {\n        client_ = client;\n        request_ = [MSClientConnection configureHeadersOnRequest:request\n                                                      withClient:client];\n        completion_ = [completion copy];\n    }\n    \n    return self;\n}\n\n\n#pragma mark * Public Start Methods\n\n\n-(void) start\n{\n    [MSClientConnection invokeNextFilter:self.client.filters\n                              withClient:self.client\n                             withRequest:self.request\n                              completion:self.completion];\n}\n\n-(void) startWithoutFilters\n{\n    [MSClientConnection invokeNextFilter:nil\n                              withClient:self.client\n                             withRequest:self.request\n                              completion:self.completion];\n}\n\n\n#pragma mark * Public Response Handling Methods\n\n\n-(BOOL) isSuccessfulResponse:(NSHTTPURLResponse *)response\n                        data:(NSData *)data\n                     orError:(NSError **)error\n{\n    // Success is determined just by the HTTP status code\n    BOOL isSuccessful = response.statusCode < 400;\n    \n    if (!isSuccessful && self.completion && error) {\n        // Read the error message from the response body\n        *error =[self.client.serializer errorFromData:data\n                                             MIMEType:response.MIMEType];\n        [self addRequestAndResponse:response toError:error];\n    }\n    \n    return isSuccessful;\n}\n\n-(id) itemFromData:(NSData *)data\n          response:(NSHTTPURLResponse *)response\n          ensureDictionary:(BOOL)ensureDictionary\n          orError:(NSError **)error\n{\n    // Try to deserialize the data\n    id item = [self.client.serializer itemFromData:data\n                                  withOriginalItem:nil\n                                  ensureDictionary:ensureDictionary\n                                           orError:error];\n    \n    // If there was an error, add the request and response\n    if (error && *error) {\n        [self addRequestAndResponse:response toError:error];\n    }\n    \n    return item;\n}\n\n\n-(void) addRequestAndResponse:(NSHTTPURLResponse *)response\n                      toError:(NSError **)error\n{\n    if (error && *error) {\n        // Create a new error with request and the response in the userInfo...\n        NSMutableDictionary *userInfo = [(*error).userInfo mutableCopy];\n        [userInfo setObject:self.request forKey:MSErrorRequestKey];\n        \n        if (response) {\n            [userInfo setObject:response forKey:MSErrorResponseKey];\n        }\n        \n        *error = [NSError errorWithDomain:(*error).domain\n                                     code:(*error).code\n                                 userInfo:userInfo];\n    }\n}\n\n\n# pragma mark * Private Static Methods\n\n\n+(void) invokeNextFilter:(NSArray *)filters\n              withClient:(MSClient *)client\n             withRequest:(NSURLRequest *)request\n               completion:(MSFilterResponseBlock)completion\n{\n    if (!filters || filters.count == 0) {\n\t\t// No filters to invoke so use |NSURLSessionDataTask | to actually\n\t\t// send the request.\n\t\t\n\t\tNSOperationQueue *taskQueue = nil;\n        if (client.connectionDelegateQueue) {\n\t\t\ttaskQueue = client.connectionDelegateQueue;\n        } else {\n\t\t\ttaskQueue = [NSOperationQueue mainQueue];\n\t\t}\n\t\t\n\t\tMSConnectionDelegate *delegate = [[MSConnectionDelegate alloc]\n\t\t\t\t\t\t\t\t\t\t  initWithClient:client\n\t\t\t\t\t\t\t\t\t\t  completion:completion];\n\t\t\n\t\tNSURLSession *session = [self sessionWithDelegate:delegate delegateQueue:taskQueue];\n\t\tNSURLSessionDataTask *task = [session dataTaskWithRequest:request];\n\t\t[task resume];\n        \n        [session finishTasksAndInvalidate];\n    }\n    else {\n        \n        // Since we have at least one more filter, construct the nextBlock\n        // for it and then invoke the filter\n        id<MSFilter> nextFilter = [filters objectAtIndex:0];\n        NSArray *nextFilters = [filters subarrayWithRange:\n                                NSMakeRange(1, filters.count - 1)];\n    \n        MSFilterNextBlock onNext =\n        [^(NSURLRequest *onNextRequest,\n           MSFilterResponseBlock onNextResponse)\n        {\n            [MSClientConnection invokeNextFilter:nextFilters\n                                      withClient:client\n                                     withRequest:onNextRequest\n                                      completion:onNextResponse];                                    \n        } copy];\n        \n        [nextFilter handleRequest:request\n                           next:onNext\n                       response:completion];\n    }\n}\n\n+(NSURLRequest *) configureHeadersOnRequest:(NSURLRequest *)request\n                                 withClient:(MSClient *)client\n{\n    NSMutableURLRequest *mutableRequest = [request mutableCopy];\n    \n    NSString *requestHost = request.URL.host;\n    NSString *applicationHost = client.applicationURL.host;\n    if ([applicationHost isEqualToString:requestHost])\n    {\n        // Add the authentication header if the user is logged in\n        if (client.currentUser &&\n            client.currentUser.mobileServiceAuthenticationToken) {\n            [mutableRequest\n             setValue:client.currentUser.mobileServiceAuthenticationToken\n             forHTTPHeaderField:xZumoAuth];\n        }\n        \n        // Set the User Agent header\n        NSString *userAgentValue = [MSUserAgentBuilder userAgent];\n        [mutableRequest setValue:userAgentValue\n              forHTTPHeaderField:userAgentHeader];\n        \n        //Set the Zumo Version Header\n        [mutableRequest setValue:userAgentValue\n              forHTTPHeaderField:zumoVersionHeader];\n        \n        // Set the special Application key header\n        NSString *appKey = client.applicationKey;\n        if (appKey != nil) {\n            [mutableRequest setValue:appKey\n                  forHTTPHeaderField:xApplicationHeader];\n        }\n        \n        // Set the installation id header\n        [mutableRequest setValue:client.installId forHTTPHeaderField:xZumoInstallId];\n        \n        if ([request HTTPBody] &&\n             ![request valueForHTTPHeaderField:contentTypeHeader]) {\n            // Set the content type header\n            [mutableRequest setValue:jsonContentType\n                  forHTTPHeaderField:contentTypeHeader];\n        }\n    }\n    \n    return mutableRequest;\n}\n\n\n\n\n@end\n\n\n#pragma mark * MSConnectionDelegate Private Implementation\n\n\n@implementation MSConnectionDelegate\n\n@synthesize client = client_;\n@synthesize completion = completion_;\n@synthesize data = data_;\n\n\n# pragma mark * Public Initializer Methods\n\n\n-(id) initWithClient:(MSClient *)client\n          completion:(MSResponseBlock)completion\n{\n    self = [super init];\n    if (self) {\n        client_ = client;\n        completion_ = [completion copy];\n    }\n    \n    return self;\n}\n\n# pragma mark * NSURLSessionDataDelegate Methods\n\n-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask willCacheResponse:(NSCachedURLResponse *)proposedResponse completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler\n{\n\t// We don't want to cache anything\n\tcompletionHandler(nil);\n}\n\n-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data\n{\n\t// If we haven't received any data before, just take this data instance\n\tif (!self.data) {\n\t\tself.data = data;\n\t}\n\telse {\n\t\t\n\t\t// Otherwise, append this data to what we have\n\t\tNSMutableData *newData = [NSMutableData dataWithData:self.data];\n\t\t[newData appendData:data];\n\t\tself.data = newData;\n\t}\n}\n\n-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest *))completionHandler\n{\n\tNSURLRequest *newRequest = nil;\n\t\n\t// Only follow redirects to the Microsoft Azure Mobile Service and not\n\t// to other hosts\n\tNSString *requestHost = request.URL.host;\n\tNSString *applicationHost = self.client.applicationURL.host;\n\tif ([applicationHost isEqualToString:requestHost])\n\t{\n\t\tnewRequest = request;\n\t}\n\t\n\tcompletionHandler(newRequest);\n}\n\n-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error\n{\n\tif (self.completion) {\n\t\tself.completion((NSHTTPURLResponse *)task.response, self.data, error);\n\t\t[self cleanup];\n\t}\n}\n\n-(void) cleanup\n{\n\tself.client = nil;\n\tself.data = nil;\n\tself.completion = nil;\n}\n\n@end\n\n"
  },
  {
    "path": "sdk/iOS/src/MSClientInternal.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSClient.h\"\n#import \"MSSerializer.h\"\n\n@interface MSClient ()\n\n// The serailizer to use with the client\n@property (nonatomic, strong, readonly)         id<MSSerializer> serializer;\n// The installation id used to track unique users of the sdk\n@property (nonatomic, strong, readonly)         NSString* installId;\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSCoreDataStore.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import <CoreData/CoreData.h>\n#import \"MSSyncContext.h\"\n\n/// The MSCoreDataStore class is for use when using the offline capabilities\n/// of mobile services. This class is a local store which manages records and sync\n/// logic using CoreData.\n/// This class assumes the provided managed object context has the following tables:\n/// MS_TableOperations:      Columns: id (Integer 64), itemId (string), table (string), properties (binary data)\n/// MS_TableOperationErrors: Columns: id (string), properties (binary data)\n/// and all tables contain a ms_version column\n@interface MSCoreDataStore : NSObject <MSSyncContextDataSource>\n\n#pragma  mark * Public Static Constructor Methods\n\n/// @name Initializing the MSClient Object\n/// @{\n\n/// Creates a CoreDataStore with the given managed object context.\n-(id) initWithManagedObjectContext:(NSManagedObjectContext *)context;\n\n/// @}\n\n/// Disables the store from recieving information about the items passed into all sync table\n/// calls (insert, delete, update). If set, the application is responsible for already having\n/// saved the item in the persisten store. This flag is intended to be used when application\n/// code is working directly with NSManagedObjects.\n@property (nonatomic) BOOL handlesSyncTableOperations;\n\n#pragma mark * Helper functions\n\n/// @{name Working with the table APIs\n\n/// Converts a managed object from the core data layer back into a dictionary with the\n/// properties expected when using a MSTable or MSSyncTable\n+(NSDictionary *) tableItemFromManagedObject:(NSManagedObject *)object;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSCoreDataStore.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSCoreDataStore.h\"\n#import \"MSTable.h\"\n#import \"MSSyncTable.h\"\n#import \"MSQuery.h\"\n#import \"MSSyncContextReadResult.h\"\n#import \"MSError.h\"\n\nNSString *const SystemColumnPrefix = @\"__\";\nNSString *const StoreSystemColumnPrefix = @\"ms_\";\nNSString *const StoreVersion = @\"ms_version\";\nNSString *const StoreCreatedAt = @\"ms_createdAt\";\nNSString *const StoreUpdatedAt = @\"ms_updatedAt\";\nNSString *const StoreDeleted = @\"ms_deleted\";\n\n@interface MSCoreDataStore()\n@property (nonatomic, strong) NSManagedObjectContext *context;\n@end\n\n@implementation MSCoreDataStore\n\n-(id) initWithManagedObjectContext:(NSManagedObjectContext *)context\n{\n    self = [super init];\n    if (self) {\n        self.context = context;\n\t\tself.handlesSyncTableOperations = YES;\n    }\n    return self;\n}\n\n-(NSString *) operationTableName {\n    return @\"MS_TableOperations\";\n}\n\n-(NSString *) errorTableName {\n    return @\"MS_TableOperationErrors\";\n}\n\n-(NSString *) configTableName {\n    return @\"MS_TableConfig\";\n}\n\n/// Helper function to get a specific record from a table, if\n-(id) getRecordForTable:(NSString *)table itemId:(NSString *)itemId asDictionary:(BOOL)asDictionary orError:(NSError **)error\n{\n    // Create the entity description\n    NSEntityDescription *entity = [NSEntityDescription entityForName:table inManagedObjectContext:self.context];\n    if (!entity) {\n        if (error) {\n            *error = [MSCoreDataStore errorInvalidTable:table];\n        }\n        return nil;\n    }\n    \n    NSFetchRequest *fr = [[NSFetchRequest alloc] init];\n    [fr setEntity:entity];\n    \n    fr.predicate = [NSPredicate predicateWithFormat:@\"%K ==[c] %@\", MSSystemColumnId, itemId];\n    \n    NSArray *results = [self.context executeFetchRequest:fr error:error];\n    if (!results || (error && *error)) {\n        return nil;\n    }\n    \n    NSManagedObject *item = [results firstObject];\n    \n    if (item && asDictionary) {\n        return [MSCoreDataStore tableItemFromManagedObject:item];\n    }\n    \n    return item;\n}\n\n+(NSDictionary *) tableItemFromManagedObject:(NSManagedObject *)object\n{\n    return [self tableItemFromManagedObject:object properties:nil];\n}\n\n+(NSDictionary *) tableItemFromManagedObject:(NSManagedObject *)object properties:(NSArray *)properties\n{\n    if (!properties) {\n        properties = [object.entity.attributesByName allKeys];\n    }\n    \n    NSMutableDictionary *serverItem = [[object dictionaryWithValuesForKeys:properties] mutableCopy];\n    \n    return [MSCoreDataStore adjustInternalItem:serverItem];\n}\n\n/// Helper function to convert a server (external) item to only contain the appropriate keys for storage\n/// in core data tables. This means we need to change system columns (prefix: __) to use ms_, and remove\n/// any retrieved columns from the user's schema that aren't in the local store's schema\n+(NSDictionary *) internalItemFromExternalItem:(NSDictionary *)item forEntityDescription:(NSEntityDescription *)entityDescription\n{\n    NSMutableDictionary *modifiedItem = [item mutableCopy];\n\n    // Find all system columns in the item\n    NSSet *systemColumnNames = [modifiedItem keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {\n        NSString *columnName = (NSString *)key;\n        return [columnName hasPrefix:SystemColumnPrefix];\n    }];\n    \n    // Now translate every system column from __x to ms_x\n    for (NSString *columnName in systemColumnNames) {\n        NSString *adjustedName = [MSCoreDataStore internalNameForMSColumnName:columnName];\n        modifiedItem[adjustedName] = modifiedItem[columnName];;\n    }\n\n    // Finally, remove any attributes in the dictionary that are not also in the data model\n    NSMutableDictionary *adjustedItem = [[NSMutableDictionary alloc] init];\n    for (NSString *attributeName in entityDescription.attributesByName) {\n        [adjustedItem setValue:[modifiedItem objectForKey:attributeName] forKey:attributeName];\n    }\n\n    return adjustedItem;\n}\n\n/// Helper function to convert a managed object's dictionary representation into a correctly formatted\n/// NSDictionary by changing ms_ prefixes back to __ prefixes\n+(NSDictionary *) adjustInternalItem:(NSDictionary *)item {\n    NSMutableDictionary *externalItem = [item mutableCopy];\n    \n    NSSet *internalSystemColumns = [externalItem keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {\n        NSString *columnName = (NSString *)key;\n        return [columnName hasPrefix:StoreSystemColumnPrefix];\n    }];\n    \n    for (NSString *columnName in internalSystemColumns) {\n        NSString *externalColumnName = [MSCoreDataStore externalNameForStoreColumnName:columnName];\n        [externalItem removeObjectForKey:columnName];\n        externalItem[externalColumnName] = item[columnName];\n    }\n    \n    return externalItem;\n}\n\n+(NSString *) internalNameForMSColumnName:(NSString *)columnName\n{\n   return [StoreSystemColumnPrefix stringByAppendingString:\n            [columnName substringFromIndex:SystemColumnPrefix.length]];\n}\n\n+(NSString *) externalNameForStoreColumnName:(NSString *)columnName\n{\n    return [SystemColumnPrefix stringByAppendingString:\n            [columnName substringFromIndex:StoreSystemColumnPrefix.length]];\n}\n\n#pragma mark - MSSyncContextDataSource\n\n-(NSUInteger) systemPropertiesForTable:(NSString *)table\n{\n    MSSystemProperties properties = MSSystemPropertyNone;\n    NSEntityDescription *entity = [NSEntityDescription entityForName:table\n                                              inManagedObjectContext:self.context];\n    \n    NSDictionary *columns = [entity propertiesByName];\n    \n    if ([columns objectForKey:StoreVersion]) {\n        properties = properties | MSSystemPropertyVersion;\n    }\n    if ([columns objectForKey:StoreCreatedAt]) {\n        properties = properties | MSSystemPropertyCreatedAt;\n    }\n    if ([columns objectForKey:StoreUpdatedAt]) {\n        properties = properties | MSSystemPropertyUpdatedAt;\n    }\n    if ([columns objectForKey:StoreDeleted]) {\n        properties = properties | MSSystemPropertyDeleted;\n    }\n    \n    return properties;\n}\n\n-(NSDictionary *)readTable:(NSString *)table withItemId:(NSString *)itemId orError:(NSError *__autoreleasing *)error\n{\n    __block NSDictionary *item;\n    [self.context performBlockAndWait:^{\n        item = [self getRecordForTable:table itemId:itemId asDictionary:YES orError:error];\n    }];\n\n    if (!item) {\n        return nil;\n    }\n    \n    return [MSCoreDataStore adjustInternalItem:item];\n}\n\n-(MSSyncContextReadResult *)readWithQuery:(MSQuery *)query orError:(NSError *__autoreleasing *)error\n{\n    __block NSInteger totalCount = -1;\n    __block NSArray *results;\n    __block NSError *internalError;\n    [self.context performBlockAndWait:^{\n        // Create the entity description\n        NSEntityDescription *entity = [NSEntityDescription entityForName:query.syncTable.name inManagedObjectContext:self.context];\n        if (!entity) {\n            internalError = [MSCoreDataStore errorInvalidTable:query.syncTable.name];\n            return;\n        }\n        \n        NSFetchRequest *fr = [[NSFetchRequest alloc] init];\n        fr.entity = entity;\n        fr.predicate = query.predicate;\n        fr.sortDescriptors = query.orderBy;\n\n        // Only calculate total count if fetchLimit/Offset is set\n        if (query.includeTotalCount && (query.fetchLimit != -1 || query.fetchOffset != -1)) {\n            totalCount = [self.context countForFetchRequest:fr error:&internalError];\n            if (internalError) {\n                return;\n            }\n            \n            // If they just want a count quit out\n            if (query.fetchLimit == 0) {\n                return;\n            }\n        }\n        \n        if (query.fetchOffset != -1) {\n            fr.fetchOffset = query.fetchOffset;\n        }\n        \n        if (query.fetchLimit != -1) {\n            fr.fetchLimit = query.fetchLimit;\n        }\n        \n        NSMutableArray *properties;\n        if (query.selectFields) {\n            // We don't let users opt out of version for now to be safe\n            NSAttributeDescription *versionProperty;\n            for (NSAttributeDescription *desc in entity.properties) {\n                if ([desc.name isEqualToString:StoreVersion]) {\n                    versionProperty = desc;\n                    break;\n                }\n            }\n            \n            properties = [query.selectFields mutableCopy];\n            \n            NSIndexSet *systemColumnIndexes = [properties indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {\n                NSString *columnName = (NSString *)obj;\n                return [columnName hasPrefix:SystemColumnPrefix];\n            }];\n            \n            __block bool hasVersion = false;\n            \n            [systemColumnIndexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {\n                NSString *columnName = [properties objectAtIndex:idx];\n\n                hasVersion = hasVersion || [columnName isEqualToString:MSSystemColumnVersion];\n                \n                [properties replaceObjectAtIndex:idx\n                                      withObject:[MSCoreDataStore internalNameForMSColumnName:columnName]];\n            }];\n            \n            if (!hasVersion && versionProperty) {\n                [properties addObject:StoreVersion];\n            }\n        }\n        \n        NSArray *rawResult = [self.context executeFetchRequest:fr error:&internalError];\n        if (internalError) {\n            return;\n        }\n        \n        // Convert NSKeyedDictionary to regular dictionary objects since for now keyed dictionaries don't\n        // seem to convert to mutable dictionaries as a user may expect\n        NSMutableArray *finalResult = [[NSMutableArray alloc] initWithCapacity:rawResult.count];\n\n        [rawResult enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n            \n            NSDictionary *adjustedItem = [MSCoreDataStore tableItemFromManagedObject:obj properties:properties];\n            \n            [finalResult addObject:adjustedItem];\n        }];\n        \n        // If there was no fetch/skip (totalCount will still be -1) and total count requested, use the results array for the count\n        if (query.includeTotalCount && totalCount == -1) {\n            totalCount = results.count;\n        }\n        \n        results = finalResult;\n    }];\n    \n    if (internalError) {\n        if (error) {\n            *error = internalError;\n        }\n        return nil;\n    } else {\n        return [[MSSyncContextReadResult alloc] initWithCount:totalCount items:results];\n    }\n}\n\n-(BOOL) upsertItems:(NSArray *)items table:(NSString *)table orError:(NSError *__autoreleasing *)error\n{\n    __block BOOL success;\n    [self.context performBlockAndWait:^{\n        NSEntityDescription *entity = [NSEntityDescription entityForName:table inManagedObjectContext:self.context];\n        if (!entity) {\n            if (error) {\n                *error = [MSCoreDataStore errorInvalidTable:table];\n            }\n            return;\n        }\n        \n        for (NSDictionary *item in items) {\n            NSManagedObject *managedItem = [self getRecordForTable:table itemId:[item objectForKey:MSSystemColumnId] asDictionary:NO orError:error];\n            if (error && *error) {\n                // Reset since we may have made changes earlier\n                [self.context reset];\n                return;\n            }\n            \n            if (managedItem == nil) {\n                managedItem = [NSEntityDescription insertNewObjectForEntityForName:table\n                                                            inManagedObjectContext:self.context];\n            }\n            \n            \n            NSDictionary *managedItemDictionary = [MSCoreDataStore internalItemFromExternalItem:item forEntityDescription:entity];\n            [managedItem setValuesForKeysWithDictionary:managedItemDictionary];\n        }\n        \n        success = [self.context save:error];\n        if (!success) {\n            [self.context reset];\n        }\n    }];\n    \n    return success;\n}\n\n-(BOOL) deleteItemsWithIds:(NSArray *)items table:(NSString *)table orError:(NSError **)error\n{\n    __block BOOL success;\n    [self.context performBlockAndWait:^{\n        for (NSString *itemId in items) {\n            NSManagedObject *foundItem = [self getRecordForTable:table itemId:itemId asDictionary:NO orError:error];\n            if (error && *error) {\n                [self.context reset];\n                return;\n            }\n            \n            if (foundItem) {\n                [self.context deleteObject:foundItem];\n            }\n        }\n        \n        success = [self.context save:error];\n        if (!success) {\n            [self.context reset];\n        }\n    }];\n    \n    return success;\n}\n\n-(BOOL) deleteUsingQuery:(MSQuery *)query orError:(NSError *__autoreleasing *)error\n{\n    __block BOOL success;\n    [self.context performBlockAndWait:^{\n        NSEntityDescription *entity = [NSEntityDescription entityForName:query.syncTable.name inManagedObjectContext:self.context];\n        if (!entity) {\n            if (error) {\n                *error = [MSCoreDataStore errorInvalidTable:query.syncTable.name];\n            }\n            return;\n        }\n        \n        NSFetchRequest *fr = [[NSFetchRequest alloc] init];\n        fr.entity = entity;\n        fr.predicate = query.predicate;\n        fr.sortDescriptors = query.orderBy;\n        \n        if (query.fetchOffset != -1) {\n            fr.fetchOffset = query.fetchOffset;\n        }\n        \n        if (query.fetchLimit != -1) {\n            fr.fetchLimit = query.fetchLimit;\n        }\n        \n        fr.includesPropertyValues = NO;\n        \n        NSArray *array = [self.context executeFetchRequest:fr error:error];\n        for (NSManagedObject *object in array) {\n            [self.context deleteObject:object];\n        }\n        \n        success = [self.context save:error];\n        if (!success) {\n            [self.context reset];\n        }\n    }];\n    \n    return success;\n}\n\n\n# pragma mark Error helpers\n\n+ (NSError *) errorInvalidTable:(NSString *)table\n{\n    NSDictionary *errorDetails = @{ NSLocalizedDescriptionKey:\n                                        [NSString stringWithFormat:@\"Table '%@' not found\", table] };\n    \n    return [NSError errorWithDomain:MSErrorDomain\n                               code:MSSyncTableLocalStoreError\n                           userInfo:errorDetails];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSDateOffset.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// The *MSDateOffset* class is used to represent an NSDate that is stored as a\n/// DateTimeOffset in the Mobile Service. This class is used when building\n/// NSPredicates for an MSQuery.\n@interface MSDateOffset : NSObject\n\n/// @name Properties\n/// @{\n\n/// The date represented by tne MSDateOffset instance.\n@property (nonatomic, strong) NSDate *date;\n\n/// @}\n\n///@name Initializing the MSDateOffset Object\n///@{\n\n/// Initializes an *MSDateOffset* instance with the given date.\n-(id)initWithDate:(NSDate *)date;\n\n/// Creates an *MSDateOffset* instance with the given date.\n+(id)offsetFromDate:(NSDate *)date;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSDateOffset.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSDateOffset.h\"\n\n@implementation MSDateOffset\n\n-(id)initWithDate:(NSDate *)date\n{\n    self = [super init];\n    if(self)\n    {\n        _date = date;\n    }\n    return self;\n}\n\n+(id)offsetFromDate:(NSDate *)date\n{\n    return [[MSDateOffset alloc] initWithDate:date];;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSError.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#ifndef WindowsAzureMobileServices_MSError_h\n#define WindowsAzureMobileServices_MSError_h\n\n#import <Foundation/Foundation.h>\n\n#pragma mark * MSErrorDomain\n\n\n/// The error domain for the Microsoft Azure Mobile Service client framework\nextern NSString *const MSErrorDomain;\n\n\n#pragma mark * UserInfo Request and Response Keys\n\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the request\n/// that was sent to the Microsoft Azure Mobile Service related to the error. Not\n/// all errors will include the request so the userInfo dicitionary may return\n/// nil.\nextern NSString *const MSErrorRequestKey;\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the\n/// response that was returned from the Microsoft Azure Mobile Service related to\n/// the error. Not all errors will include the response so the userInfo\n/// dicitionary may return nil.\nextern NSString *const MSErrorResponseKey;\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the\n/// server item that was returned from the Microsoft Azure Mobile Service related to\n/// the precondition failed error. This will only be present on MSPreconditionFailed\n/// errors.\nextern NSString *const MSErrorServerItemKey;\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the\n/// *MSPushCompletionResult* object of accumalted operation errors when a push\n/// was attempted\nextern NSString *const MSErrorPushResultKey;\n\n\n#pragma mark * MSErrorCodes\n\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// a nil item was used.\n#define MSExpectedItemWithRequest               -1101\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an item without an id was used\n#define MSMissingItemIdWithRequest              -1102\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an invalid item was used.\n#define MSInvalidItemWithRequest                -1103\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// a nil itemId was used.\n#define MSExpectedItemIdWithRequest             -1104\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an invalid itemId was used.\n#define MSInvalidItemIdWithRequest              -1105\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an invalid user-parameter in the query string.\n#define MSInvalidUserParameterWithRequest       -1106\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an item with an id was used with an insert operation.\n#define MSExistingItemIdWithRequest             -1107\n\n/// Indicates that a sync table request failed because an invalid operation was\n/// requested. This can occur due to operations on the same item that can not be\n/// reconciled, such as two inserts on the same record\n#define MSSyncTableInvalidAction                -1150\n\n/// Indicates a sync table operation failed because the datasource returned an\n/// error when attempting to read or write to it\n#define MSSyncTableLocalStoreError              -1153\n\n/// Indicates a sync table operation failed due to an internal error\n#define MSSyncTableInternalError                -1154\n\n/// Indicates that the query key contains invalid characters\n#define MSInvalidQueryId                        -1155\n\n/// Indicates a sync table operation could not be canceled\n#define MSSyncTableCancelError                  -1156\n\n/// Indicates a mobile service sync operation (such as a syncTable insert) failed\n/// because the sync context object was not properly initialized\n#define MSSyncContextInvalid                    -1160\n\n/// Indicates that the push completed sending all operation to the server but not\n/// all table operations completed successfully. An array of the errors that\n/// resulted can be found using the MSErrorPushResultKey\n#define MSPushCompleteWithErrors                -1170\n\n/// Indicates that the push was aborted (not all pending operations were sent to\n/// the server) because the data source returned an error. The error causing the\n/// abort can be found using the NSUnderlyingErrorKey\n#define MSPushAbortedDataSource                 -1171\n\n/// Indicates that the push was aborted (not all pending operations were sent to\n/// the server) because of a network related issue, such as the mobile service\n/// was not found. The error causing the abort can be found using the\n/// NSUnderlyingErrorKey\n#define MSPushAbortedNetwork                    -1172\n\n/// Indicates that the push was aborted (not all pending operations were sent to\n/// the server) because authentication was required to complete an operation.\n/// The error causing the abort can be found using the NSUnderlyingErrorKey\n#define MSPushAbortedAuthentication             -1173\n\n/// Indicates that the push was aborted (not all pending operations were sent to\n/// the server) for an unknown reason. The error causing the abort can be found\n/// using the NSUnderlyingErrorKey\n#define MSPushAbortedUnknown                    -1174\n\n/// Indicates that the purge was aborted because items in the requested table to\n/// purge have pending changes that need to be pushed to the server\n#define MSPurgeAbortedPendingChanges            -1180\n\n/// Indicates that the pull was aborted (not all records were retrieved from the\n/// server) for an unknown reason.\n#define MSPullAbortedUnknown                    -1190\n\n/// Indicates that the response from the Windows Azure Mobile Service did not\n/// include an item as expected.\n#define MSExpectedItemWithResponse              -1201\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// include an array of items as expected.\n#define MSExpectedItemsWithResponse             -1202\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// include a total count as expected.\n#define MSExpectedTotalCountWithResponse        -1203\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// have body content as expected.\n#define MSExpectedBodyWithResponse              -1204\n\n/// Indicates that the response from the Microsoft Azure Mobile Service indicated\n/// there was an error but that an error message was not provided.\n#define MSErrorNoMessageErrorCode               -1301\n\n/// Indicates that the response from the Microsoft Azure Mobile Service indicated\n/// there was an error and an error message was provided.\n#define MSErrorMessageErrorCode                 -1302\n\n/// Indicates that the response from the Microsoft Azure Mobile Service indicated\n/// there was an error\n#define MSErrorPreconditionFailed               -1303\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// the *NSPredicate* used in the query could not be translated into a query\n/// string supported by the Microsoft Azure Mobile Service.\n#define MSPredicateNotSupported                 -1400\n\n/// Indicates that a request to the Windows Azure Mobile Service failed because\n/// a invalid parameter was passed to the function\n#define MSInvalidParameter                      -1401\n\n/// Indicates that the login operation has failed.\n#define MSLoginFailed                           -1501\n\n/// Indicates that the Microsoft Azure Mobile Service returned a login response\n/// with invalid syntax.\n#define MSLoginInvalidResponseSyntax            -1502\n\n/// Indicates that the login operation was canceled.\n#define MSLoginCanceled                         -1503\n\n/// Indicates that the login operation failed because a nil token was used.\n#define MSLoginExpectedToken                    -1504\n\n/// Indicates that the login operation failed because an invalid token was used.\n#define MSLoginInvalidToken                     -1505\n\n/// Indicates that a required parameter for push operation was not provided\n#define MSPushRequiredParameter                 -1600\n\n/// Indicates that local storage is corrupt until register or deleteAllRegistrations are invoked\n#define MSPushLocalStorageCorrupt               -1601\n\n#endif\n"
  },
  {
    "path": "sdk/iOS/src/MSError.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSError.h\"\n\n\n#pragma mark * MSErrorDomain\n\n\nNSString *const MSErrorDomain = @\"com.Microsoft.WindowsAzureMobileServices.ErrorDomain\";\n\n\n#pragma mark * UserInfo Request and Response Keys\n\n\nNSString *const MSErrorRequestKey = @\"com.Microsoft.WindowsAzureMobileServices.ErrorRequestKey\";\nNSString *const MSErrorResponseKey = @\"com.Microsoft.WindowsAzureMobileServices.ErrorResponseKey\";\nNSString *const MSErrorServerItemKey = @\"com.Microsoft.WindowsAzureMobileServices.ErrorServerItemKey\";\nNSString *const MSErrorPushResultKey = @\"com.Microsoft.WindowsAzureMobileServices.ErrorPushResultKey\";\n"
  },
  {
    "path": "sdk/iOS/src/MSFilter.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSError.h\"\n\n\n#pragma mark * Block Type Definitions\n\n\n/// Callback that the filter should invoke once an HTTP response (with or\n/// without data) or an error has been received by the filter.\ntypedef void (^MSFilterResponseBlock)(NSHTTPURLResponse *response, NSData *data, NSError *error);\n\n/// Callback that the filter should invoke to allow the next filter to handle\n/// the given request.\ntypedef void (^MSFilterNextBlock)(NSURLRequest *request,\n                                  MSFilterResponseBlock onResponse);\n\n\n#pragma  mark * MSFilter Public Protocol\n\n\n/// The *MSFilter* protocol allows developers to implement a class that can\n/// inspect and/or replace HTTP request and HTTP response messages being sent\n/// and received by an *MSClient* instance.\n@protocol MSFilter <NSObject>\n\n/// @name Modify the request\n/// @{\n\n/// Allows for the inspection and/or modification of the HTTP request and HTTP response messages\n/// being sent and received by an *MSClient* instance.\n-(void)handleRequest:(NSURLRequest *)request\n                next:(MSFilterNextBlock)next\n            response:(MSFilterResponseBlock)response;\n\n///@}\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSJSONSerializer.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSSerializer.h\"\n\n\n#pragma mark * MSJSONSerializer Public Interface\n\n\n// The |MSJSONSerializer| is an implementation of the |MSSerializer| protocol\n// for serializing to and from JSON using |NSJSONSerialization| as its\n// implementation.\n@interface MSJSONSerializer : NSObject <MSSerializer>\n\n// A singleton instance of the MSJSONSerializer.\n+(id<MSSerializer>)JSONSerializer;\n\n// Helper method to generate a random GUID\n+ (NSString *) generateGUID;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSJSONSerializer.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSJSONSerializer.h\"\n#import \"MSClient.h\"\n#import \"MSNaiveISODateFormatter.h\"\n\n\n#pragma mark * Mobile Services Special Keys String Constants\n\n\nstatic NSString *const idKey = @\"id\";\nstatic NSString *const resultsKey = @\"results\";\nstatic NSString *const countKey = @\"count\";\nstatic NSString *const errorKey = @\"error\";\nstatic NSString *const descriptionKey = @\"description\";\nstatic NSString *const stringIdPattern = @\"[+?`\\\"/\\\\\\\\]|[\\\\u0000-\\\\u001F]|[\\\\u007F-\\\\u009F]|^\\\\.{1,2}$\";\n\n#pragma mark * MSJSONSerializer Implementation\n\n@implementation MSJSONSerializer\n\nstatic MSJSONSerializer *staticJSONSerializerSingleton;\nstatic NSArray *allIdKeys;\n\n#pragma mark * Public Static Singleton Constructor\n\n+(id <MSSerializer>) JSONSerializer\n{\n    if (staticJSONSerializerSingleton == nil) {\n        staticJSONSerializerSingleton = [[MSJSONSerializer alloc] init];\n    }\n    \n    return  staticJSONSerializerSingleton;\n}\n\n+(NSArray *) AllIdKeys\n{\n    if (allIdKeys == nil) {\n        allIdKeys = [NSArray arrayWithObjects:idKey, @\"Id\", @\"ID\", @\"iD\", nil];\n    }\n    \n    return  allIdKeys;\n}\n\n# pragma mark * MSSerializer Protocol Implementation\n-(NSData *)dataFromItem:(id)item\n              idAllowed:(BOOL)idAllowed\n       ensureDictionary:(BOOL)ensureDictionary\n removeSystemProperties:(BOOL)removeSystemProperties\n                orError:(NSError **)error;\n{\n    NSData *data = nil;\n    NSError *localError = nil;\n    \n    // First, ensure there is an item...\n    if (!item) {\n        localError = [self errorForNilItem];\n    }\n    else if (ensureDictionary && ![item isKindOfClass:[NSDictionary class]]) {\n        localError = [self errorForInvalidItem];\n    }\n    else if (!idAllowed) {\n        // Determine if an id (any case) exists and if so throw an error if\n        // it is not a string id or it is not a default value\n        for (id key in MSJSONSerializer.AllIdKeys) {\n            id itemId = [item objectForKey:key];\n            \n            if (itemId == nil || itemId == [NSNull null]) {\n                continue;\n            }\n            else if ([itemId isKindOfClass:[NSString class]]) {\n                // Allow empty string for any id\n                if ([itemId length] != 0 ) {\n                    if([key isEqualToString:idKey]) {\n                        // Valid string ids are allowed for 'id' only\n                        [self stringFromItemId:itemId orError:&localError];\n                    }\n                    else {\n                        localError = [self errorForInvalidItemId];\n                    }\n                }\n            }\n            else if ([itemId isKindOfClass:[NSNumber class]]) {\n                // Only a default value, 0, can be used for int ids\n                if ([itemId longLongValue] != 0) {\n                    localError = [self errorForExistingItemId];\n                }\n            }\n            else {\n                localError = [self errorForInvalidItemId];\n            }\n        }\n    }\n    \n    if (!localError)\n    {\n        // Convert any NSDate instances into strings formatted with the date.\n        if (removeSystemProperties) {\n            id itemIdField = nil;\n            if([item isKindOfClass:[NSDictionary class]]) {\n                itemIdField = [item objectForKey:idKey];\n            }\n            removeSystemProperties = [itemIdField isKindOfClass:[NSString class]];\n        }\n        \n        item = [self preSerializeItem:item RemoveSystemProperties:removeSystemProperties];\n\n        // ... then make sure the |NSJSONSerializer| can serialize it, otherwise\n        // the |NSJSONSerializer| will throw an exception, which we don't\n        // want--we'd rather return an error.\n        if (![NSJSONSerialization isValidJSONObject:item]) {\n            localError = [self errorForInvalidItem];\n            \n        } else {\n            // If there is still an error serializing, |dataWithJSONObject|\n            // will ensure that data the error is set and data is nil.\n            data = [NSJSONSerialization dataWithJSONObject:item\n                                               options:0\n                                                 error:error];\n        }\n    }\n    \n    if (localError && error) {\n        *error = localError;\n    }\n    \n    return data;\n}\n\n-(id) itemIdFromItem:(NSDictionary *)item orError:(NSError **)error\n{\n    id itemId = nil;\n    NSError *localError = nil;\n    \n    // Ensure there is an item\n    if (!item) {\n        localError = [self errorForNilItem];\n    }\n    else if (![item isKindOfClass:[NSDictionary class]]) {\n        localError = [self errorForInvalidItem];\n    }\n    else {\n        // Then get the value of the id key, which must be present or else\n        // it is an error.\n        itemId = [item objectForKey:idKey];\n        if (!itemId) {\n            localError = [self errorForMissingItemId];\n        }\n        else if (![itemId isKindOfClass:[NSNumber class]] &&\n                 ![itemId isKindOfClass:[NSString class]]) {\n            localError = [self errorForInvalidItemId];\n            itemId = nil;\n        }\n    }\n    \n    if (localError && error) {\n        *error = localError;\n    }\n\n    return itemId;\n}\n\n-(NSString *) stringFromItemId:(id)itemId orError:(NSError **)error\n{\n    NSString *idAsString = nil;\n    NSError *localError = nil;\n    \n    // Ensure there is an item id\n    if (!itemId) {\n        localError = [self errorForExpectedItemId];\n    }\n    else if([itemId isKindOfClass:[NSNumber class]]) {\n        long long itemIdValue = [itemId longLongValue];\n        if(itemIdValue == 0) {\n            // id can't be a default value\n            localError = [self errorForInvalidItemId];\n        }\n        else {\n            idAsString = [NSString stringWithFormat:@\"%lld\",itemIdValue];\n        }\n    }\n    else if ([itemId isKindOfClass:[NSString class]]) {\n        idAsString = itemId;\n        NSString *trimmedId = [idAsString stringByTrimmingCharactersInSet:\n                                [NSCharacterSet whitespaceCharacterSet]];\n        \n        if(idAsString.length == 0 || idAsString.length > 255 || trimmedId.length == 0) {\n            localError = [self errorForInvalidItemId];\n        } else {\n            NSRegularExpression *regEx = [NSRegularExpression regularExpressionWithPattern:stringIdPattern\n                                                                                   options:NSRegularExpressionCaseInsensitive\n                                                                                     error:&localError];\n            if ([regEx firstMatchInString:idAsString options:0 range:NSMakeRange(0, idAsString.length)]) {\n                localError = [self errorForInvalidItemId];\n            }\n        }        \n    }\n    else {\n        // The id was there, but it wasn't a number or string\n        localError = [self errorForInvalidItemId];\n    }\n    \n    if (localError && error) {\n        *error = localError;\n        idAsString = nil;\n    }\n\n    return idAsString;\n}\n\n-(NSString *) stringIdFromItem:(NSDictionary *)item orError:(NSError **)error\n{\n    // Get the id field out of the item\n    id itemId = [self itemIdFromItem:item orError:error];\n    if (error && *error) {\n        return nil;\n    }\n    \n    // Verify the Id is a string\n    if (itemId && ![itemId isKindOfClass:[NSString class]]) {\n        if (error) {\n            *error = [self errorForInvalidItemId];\n        }\n        return nil;\n    }\n    \n    return [self stringFromItemId:itemId orError:error];\n}\n\n-(id) itemFromData:(NSData *)data\n            withOriginalItem:(id)originalItem\n            ensureDictionary:(BOOL)ensureDictionary\n            orError:(NSError **)error\n{\n    id item = nil;\n    NSError *localError = nil;\n    \n    // Ensure there is data\n    if (!data) {\n        localError = [self errorForNilData];\n    }\n    else {\n        \n        // Try to deserialize the data; if it fails the error will be set\n        // and item will be nil.\n        item = [NSJSONSerialization JSONObjectWithData:data\n                                               options:NSJSONReadingAllowFragments\n                                                 error:error];\n\n        if (item) {\n            \n            // The data should have been only a single item--that is, a\n            // dictionary and not an array or string, etc.\n            if (ensureDictionary &&\n                ![item isKindOfClass:[NSDictionary class]]) {\n                item = nil;\n                localError = [self errorForExpectedItem];\n            }\n            else {\n                \n                // Convert any date-like strings into NSDate instances\n                item = [self postDeserializeItem:item];\n                \n                if (originalItem) {\n                    \n                    // If the originalitem was provided, update it with the values\n                    // from the new item.\n                    for (NSString *key in [item allKeys]) {\n                        id value = [item objectForKey:key];\n                        [originalItem setValue:value forKey:key];\n                    }\n                    \n                    // And return the original value instead\n                    item = originalItem;\n                }\n            }\n        }\n    }\n    \n    if (localError && error) {\n        *error = localError;\n    }\n    \n    return item;\n}\n\n-(NSArray *) arrayFromData:(NSData *)data\n           orError:(NSError **)error\n{\n    id jsonObject = nil;\n    NSError *localError = nil;\n    \n    // Ensure there is data\n    if (!data) {\n        localError = [self errorForNilData];\n    }\n    else {\n        \n        // Try to deserialize the data; if it fails the error will be set\n        // and item will be nil.\n        jsonObject = [NSJSONSerialization JSONObjectWithData:data\n                                               options:NSJSONReadingAllowFragments\n                                                 error:error];\n        \n        if (jsonObject) {\n            // The data should have been of array type\n            if (![jsonObject isKindOfClass:[NSArray class]]) {\n                jsonObject = nil;\n                localError = [self errorForExpectedArray];\n            }\n        }\n    }\n    \n    if (localError && error) {\n        *error = localError;\n    }\n    \n    return jsonObject;\n}\n\n-(NSInteger) totalCountAndItems:(NSArray **)items\n                       fromData:(NSData *)data\n                        orError:(NSError **)error\n{\n    NSInteger totalCount = -1;\n    NSError *localError = nil;\n    NSArray *localItems = nil;\n    \n    // Ensure there is data\n    if (!data) {\n        localError = [self errorForNilData];\n    }\n    else\n    {\n        id JSONObject = [NSJSONSerialization JSONObjectWithData:data\n                        options:NSJSONReadingMutableContainers |\n                                NSJSONReadingAllowFragments\n                        error:error];\n    \n        if (JSONObject) {\n\n            // The JSONObject could be either an array or a dictionary\n            if ([JSONObject isKindOfClass:[NSArray class]]) {\n                \n                // The JSONObject was just an array, so it is the items.\n                // Convert any date-like strings into NSDate instances\n                localItems = JSONObject;\n            }\n            else if ([JSONObject isKindOfClass:[NSDictionary class]]) {\n            \n                // Since it was a dictionary, it has to have both the\n                // count, which is a number...\n                id count = [JSONObject objectForKey:countKey];\n                if (![count isKindOfClass:[NSNumber class]]) {\n                    localError = [self errorForMissingTotalCount];\n                }\n                else {\n                    totalCount = [count integerValue];\n                \n                    // ...and it has to have the array of items.\n                    id results = [JSONObject objectForKey:resultsKey];\n                    if (![results isKindOfClass:[NSArray class]]) {\n                        localError = [self errorForMissingItems];\n                        totalCount = -1;\n                    }\n                    else {\n                        localItems = results;\n                    }\n                }\n            }\n            else {\n                // The JSONObject was neither a dictionary nor an array, so that\n                // is also an error.\n                localError = [self errorForMissingItems];\n            }\n        }\n    }\n    \n    if (localItems) {\n        *items = [self postDeserializeItem:localItems];\n    }\n    \n    if (localError && error) {\n        *error = localError;\n    }\n    \n    return totalCount;\n}\n\n-(NSError *) errorFromData:(NSData *)data MIMEType:(NSString *)MIMEType\n{\n    NSError *error = nil;\n\n    // If there is data, deserialize it\n    if (data) {\n        \n        // We'll see if we can find an error message in the data\n        NSString *errorMessage = nil;\n        \n        BOOL isJson = MIMEType &&\n                      NSNotFound != [MIMEType rangeOfString:@\"JSON\"\n                                                    options:NSCaseInsensitiveSearch].location;\n        if (isJson) {\n            id JSONObject = [NSJSONSerialization JSONObjectWithData:data\n                                    options: NSJSONReadingMutableContainers |\n                                             NSJSONReadingAllowFragments\n                                      error:&error];\n            \n            if (JSONObject) {\n            \n                if ([JSONObject isKindOfClass:[NSString class]]) {\n                \n                    // Since the JSONObject was just a string, we'll assume it\n                    // is the error message.\n                    errorMessage = JSONObject;\n                }\n                else if ([JSONObject isKindOfClass:[NSDictionary class]]) {\n                    \n                    // Since we have a dictionary, we'll look for the 'error' or\n                    // 'description' keys.\n                    errorMessage = [JSONObject objectForKey:errorKey];\n                    if (![errorMessage isKindOfClass:[NSString class]]) {\n                        \n                        // The 'error' key didn't work, so we'll try 'description'\n                        errorMessage = [JSONObject objectForKey:descriptionKey];\n                        if (![errorMessage isKindOfClass:[NSString class]]) {\n                            \n                            // 'description' didn't work either\n                            errorMessage = nil;\n                        }\n                    }\n                }\n\n            }\n        }\n    \n        if (!error) {\n            if (!errorMessage) {\n                // Since the data wasn't Json in the form we assumed, assume it is UTF8 text\n                errorMessage = [[NSString alloc] initWithData:data\n                                                 encoding:NSUTF8StringEncoding];\n            }\n        \n            // If we found an error message, make an error from it\n            if (errorMessage) {\n                error = [self errorWithMessage:errorMessage];\n            }\n        }\n    }\n    \n    if (!error) {\n        // If we couldn't find an error message, return a generic error\n        error = [self errorWithoutMessage];\n    }\n    \n    return error;\n}\n\n- (void) removeSystemProperties:(NSMutableDictionary *) item\n{\n    NSSet *systemProperties = [item keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {\n        return [[key substringToIndex:2] isEqualToString:@\"__\"];\n    }];\n    \n    [item removeObjectsForKeys:[systemProperties allObjects]];\n    \n    return;\n}\n\n#pragma mark * Private Pre/Post Serialization Methods\n\n-(id) preSerializeItem:(id)item RemoveSystemProperties:(BOOL)removeSystemProperties\n{\n    id preSerializedItem = nil;\n    \n    if ([item isKindOfClass:[NSDictionary class]]) {\n        preSerializedItem = [item mutableCopy];\n        \n        if(removeSystemProperties) {\n            [self removeSystemProperties:preSerializedItem];\n        }\n        \n        for (NSString *key in [preSerializedItem allKeys]) {\n            id value = [preSerializedItem valueForKey:key];\n            id preSerializedValue = [self preSerializeItem:value RemoveSystemProperties:NO];\n            [preSerializedItem setObject:preSerializedValue forKey:key];\n        }\n    }\n    else if([item isKindOfClass:[NSArray class]]) {\n        preSerializedItem = [item mutableCopy];\n        for (NSInteger i = 0; i < [preSerializedItem count]; i++) {\n            id value = [preSerializedItem objectAtIndex\t:i];\n            id preSerializedValue = [self preSerializeItem:value RemoveSystemProperties:NO];\n            [preSerializedItem setObject:preSerializedValue atIndex:i];\n        }\n    }\n    else if ([item isKindOfClass:[NSDate class]]) {\n        NSDateFormatter *formatter =\n        [MSNaiveISODateFormatter naiveISODateFormatter];\n        preSerializedItem = [formatter stringFromDate:item];\n    }\n    else {\n        preSerializedItem = item;\n    }\n    \n    return preSerializedItem;\n}\n\n-(id) postDeserializeItem:(id)item\n{\n    id postDeserializedItem = nil;\n    \n    if ([item isKindOfClass:[NSDictionary class]]) {\n        postDeserializedItem = [item mutableCopy];\n        for (NSString *key in [postDeserializedItem allKeys]) {\n            id value = [postDeserializedItem valueForKey:key];\n            id preSerializedValue = [self postDeserializeItem:value];\n            [postDeserializedItem setObject:preSerializedValue forKey:key];\n        }\n    }\n    else if([item isKindOfClass:[NSArray class]]) {\n        postDeserializedItem = [item mutableCopy];\n        for (NSInteger i = 0; i < [postDeserializedItem count]; i++) {\n            id value = [postDeserializedItem objectAtIndex:i];\n            id preSerializedValue = [self postDeserializeItem:value];\n            [postDeserializedItem setObject:preSerializedValue atIndex:i];\n        }\n    }\n    else if ([item isKindOfClass:[NSString class]]) {\n        NSDateFormatter *formatter;\n        if ([item rangeOfString:@\".\"].location == NSNotFound) {\n            formatter = [MSNaiveISODateFormatter naiveISODateNoFractionalSecondsFormatter];\n        } else {\n            formatter = [MSNaiveISODateFormatter naiveISODateFormatter];\n        }\n        \n        NSDate *date = [formatter dateFromString:item];\n        postDeserializedItem = (date) ? date : item;\n    }\n    else {\n        postDeserializedItem = item;\n    }\n    \n    return postDeserializedItem;\n}\n\n\n#pragma mark * Private NSError Generation Methods\n\n\n-(NSError *) errorForNilItem\n{\n    return [self errorWithDescriptionKey:@\"No item was provided.\"\n                            andErrorCode:MSExpectedItemWithRequest];\n}\n\n-(NSError *) errorForInvalidItem\n{\n    return [self errorWithDescriptionKey:@\"The item provided was not valid.\"\n                            andErrorCode:MSInvalidItemWithRequest];\n}\n\n-(NSError *) errorForMissingItemId\n{\n    return [self errorWithDescriptionKey:@\"The item provided did not have an id.\"\n                            andErrorCode:MSMissingItemIdWithRequest];\n}\n\n-(NSError *) errorForExistingItemId\n{\n    return [self errorWithDescriptionKey:@\"The item provided must not have an id.\"\n                            andErrorCode:MSExistingItemIdWithRequest];\n}\n\n-(NSError *) errorForExpectedItemId\n{\n    return [self errorWithDescriptionKey:@\"The item id was not provided.\"\n                            andErrorCode:MSExpectedItemIdWithRequest];\n}\n-(NSError *) errorForInvalidItemId\n{\n    return [self errorWithDescriptionKey:@\"The item provided did not have a valid id.\"\n                            andErrorCode:MSInvalidItemIdWithRequest];\n}\n\n-(NSError *) errorForNilData\n{\n    return [self errorWithDescriptionKey:@\"The server did return any data.\"\n                            andErrorCode:MSExpectedBodyWithResponse];\n}\n\n-(NSError *) errorForExpectedItem\n{\n    return [self errorWithDescriptionKey:@\"The server did not return the expected item.\"\n                            andErrorCode:MSExpectedItemWithResponse];\n}\n\n-(NSError *) errorForExpectedArray\n{\n    return [self errorWithDescriptionKey:@\"The server did not return object of expected array type.\"\n                            andErrorCode:MSExpectedItemWithResponse];\n}\n\n-(NSError *) errorForMissingTotalCount\n{\n    return [self errorWithDescriptionKey:@\"The server did not return the expected total count.\"\n                            andErrorCode:MSExpectedTotalCountWithResponse];\n}\n\n-(NSError *) errorForMissingItems\n{\n    return [self errorWithDescriptionKey:@\"The server did not return the expected items.\"\n                            andErrorCode:MSExpectedItemsWithResponse];\n}\n\n-(NSError *) errorWithoutMessage\n{\n    return [self errorWithDescriptionKey:@\"The server returned an error.\"\n                            andErrorCode:MSErrorNoMessageErrorCode];\n}\n\n-(NSError *) errorWithMessage:(NSString *)errorMessage\n{\n    return [self errorWithDescription:errorMessage\n                            andErrorCode:MSErrorMessageErrorCode];\n}\n\n-(NSError *) errorWithDescriptionKey:(NSString *)descriptionKey\n                        andErrorCode:(NSInteger)errorCode\n{\n    NSString *description = NSLocalizedString(descriptionKey, nil);\n    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey :description };\n    \n    return [NSError errorWithDomain:MSErrorDomain\n                               code:errorCode\n                           userInfo:userInfo];\n}\n\n-(NSError *) errorWithDescription:(NSString *)description\n                     andErrorCode:(NSInteger)errorCode\n{\n    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey :description };\n    \n    return [NSError errorWithDomain:MSErrorDomain\n                               code:errorCode\n                           userInfo:userInfo];\n}\n\n// Generates a random GUID to uniquely identify operations or objects missing an Id\n+ (NSString *) generateGUID {\n    CFUUIDRef newUUID = CFUUIDCreate(kCFAllocatorDefault);\n    NSString *newId = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, newUUID);\n    CFRelease(newUUID);\n    \n    return newId;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSLocalStorage.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\nextern NSString * const MSNativeRegistrationName;\n\n@interface MSLocalStorage : NSObject\n\n@property (copy, nonatomic, readonly) NSString *deviceToken;\n@property (nonatomic, readonly) BOOL isRefreshNeeded;\n\n/// Initialize *MSLocalStorage* using the host of the Mobile Service.\n- (MSLocalStorage *)initWithMobileServiceHost:(NSString *)mobileServiceHost;\n\n/// Get an NSArray of all registrationIds as NSString.\n- (NSArray *)getRegistrationIds;\n\n/// Get a registrationId for the specific registrationName.\n- (NSString *)getRegistrationIdWithName:(NSString *)registrationName;\n\n/// Replace all registrations and the deviceToken with those passed in.\n- (void)updateRegistrations:(NSArray *)registrations\n                deviceToken:(NSString *)deviceToken;\n\n/// Upsert the registrationId of the individual registration by name and update\n/// the deviceToken.\n- (void)updateRegistrationWithName:(NSString *)registrationName\n                    registrationId:(NSString *)registrationId\n                       deviceToken:(NSString *)deviceToken;\n\n/// Delete the specified registration name.\n- (void)deleteRegistrationWithName:(NSString *)registrationName;\n\n/// Delete all registrations.\n- (void)deleteAllRegistrations;\n\n@end"
  },
  {
    "path": "sdk/iOS/src/MSLocalStorage.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSLocalStorage.h\"\n\nNSString *const MSNativeRegistrationName = @\"$Default\";\n\nstatic NSString *const storageVersion = @\"v1.0.0\";\n\n@interface MSLocalStorage ()\n@property (nonatomic) NSMutableDictionary *registrations;\n@property (copy, nonatomic) NSString *versionKey;\n@property (copy, nonatomic) NSString *deviceTokenKey;\n@property (copy, nonatomic) NSString *registrationsKey;\n@property (nonatomic, readwrite) BOOL isRefreshNeeded;\n@property (copy, nonatomic, readwrite) NSString *deviceToken;\n@end\n\n@implementation MSLocalStorage\n\n- (MSLocalStorage *)initWithMobileServiceHost:(NSString *)mobileServiceHost\n{\n    self = [super init];\n    \n    if (self) {\n        self.versionKey = [NSString stringWithFormat:@\"%@-version\", mobileServiceHost];\n        self.deviceTokenKey = [NSString stringWithFormat:@\"%@-deviceToken\", mobileServiceHost];\n        self.registrationsKey = [NSString stringWithFormat:@\"%@-registrations\", mobileServiceHost];\n        self.registrations = [NSMutableDictionary dictionary];\n        \n        [self readContent];\n    }\n    \n    return self;\n}\n\n- (NSString *)getRegistrationIdWithName:(NSString *)registrationName\n{\n    return [self.registrations objectForKey:registrationName];\n}\n\n- (NSArray *)getRegistrationIds\n{\n    return [self.registrations allValues];\n}\n\n- (void)updateRegistrationWithName:(NSString *)registrationName\n                    registrationId:(NSString *)registrationId\n                       deviceToken:(NSString *)deviceToken\n{\n    NSString *name = registrationName;\n    if (!name) {\n        name = MSNativeRegistrationName;\n    }\n    \n    [self.registrations setObject:registrationId forKey:name];\n    self.deviceToken = deviceToken;\n    [self commitDefaults];\n}\n\n- (void)updateRegistrations:(NSArray *)registrations\n                deviceToken:(NSString *)deviceToken\n{\n    self.registrations = [[NSMutableDictionary alloc] init];\n    \n    for (int i = 0; i < [registrations count]; i++) {\n        NSString *name = registrations[i][@\"templateName\"];\n        if (!name || [name isKindOfClass:[NSNull class]]) {\n            name = MSNativeRegistrationName;\n        }\n        \n        /// All registrations passed to this method will have registrationId as they\n        /// come directly from notification hub where registrationId is the key field.\n        [self.registrations setObject:registrations[i][@\"registrationId\"] forKey:name];\n    }\n    \n    self.deviceToken  = deviceToken;\n    \n    [self commitDefaults];\n    \n    self.isRefreshNeeded = NO;\n}\n\n- (void)deleteRegistrationWithName:(NSString *)registrationName\n{\n    [self.registrations removeObjectForKey:registrationName];\n    [self commitDefaults];\n}\n\n- (void)deleteAllRegistrations\n{\n    [self.registrations removeAllObjects];\n    [self commitDefaults];\n}\n\n- (void)readContent\n{\n    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n    \n    self.deviceToken = [defaults stringForKey:self.deviceTokenKey];\n\n    NSString *version = [defaults stringForKey:self.versionKey];\n    self.isRefreshNeeded = version == nil || ![version isEqualToString:storageVersion];\n    if(self.isRefreshNeeded) {\n        return;\n    }\n    \n    NSDictionary *registrations = [defaults dictionaryForKey:self.registrationsKey];\n    if (registrations) {\n        self.registrations = [registrations mutableCopy];\n    } else {\n        self.isRefreshNeeded = YES;\n    }\n}\n\n- (void)commitDefaults\n{\n    [self commitDefaultsWithStorageVersion:storageVersion];\n}\n\n- (void)commitDefaultsWithStorageVersion:(NSString *)storageVersion\n{\n    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n    \n    [defaults setObject:self.deviceToken forKey:self.deviceTokenKey];\n    [defaults setObject:storageVersion forKey:self.versionKey];\n    [defaults setObject:self.registrations forKey:self.registrationsKey];\n    \n    [defaults synchronize];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSLogin.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n#import \"MSLoginController.h\"\n#import \"MSLoginView.h\"\n\n\n#pragma mark * MSLogin Public Interface\n\n\n// The |MSLogin| class provides the login functionality for an |MSClient|\n// instance.\n@interface MSLogin : NSObject\n\n\n#pragma mark * Public Readonly Properties\n\n\n// The client associated with this |MSLogin|.\n@property (nonatomic, weak, readonly) MSClient* client;\n\n\n#pragma  mark * Public Initializer Methods\n\n\n// Initializes a new instance of the |MSLogin|.\n-(id)initWithClient:(MSClient *)client;\n\n\n#pragma  mark * Public Login Methods\n\n\n// Logs in the current end user with the given provider by presenting the\n// MSLoginController with the given |controller|.\n-(void)loginWithProvider:(NSString *)provider\n              controller:(UIViewController *)controller\n                animated:(BOOL)animated\n              completion:(MSClientLoginBlock)completion;\n\n// Returns an |MSLoginController| that can be used to log in the current\n// end user with the given provider.\n-(MSLoginController *)loginViewControllerWithProvider:(NSString *)provider\n                                      completion:(MSClientLoginBlock)completion;\n\n// Logs in the current end user with the given provider and the given token for\n// the provider.\n-(void)loginWithProvider:(NSString *)provider\n                   token:(NSDictionary *)token\n              completion:(MSClientLoginBlock)completion;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSLogin.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSLogin.h\"\n#import \"MSLoginSerializer.h\"\n#import \"MSJSONSerializer.h\"\n#import \"MSClientConnection.h\"\n\n\n#pragma mark * MSLogin Private Interface\n\n\n@interface MSLogin ()\n\n// Private properties\n@property (nonatomic, strong, readonly)     id<MSSerializer> serializer;\n\n@end\n\n\n#pragma mark * MSLogin Implementation\n\n\n@implementation MSLogin\n\n@synthesize client = client_;\n\n\n#pragma  mark * Public Initializer Methods\n\n\n-(id) initWithClient:(MSClient *)client\n{\n    self = [super init];\n    if (self) {\n        client_ = client;\n    }\n    \n    return self;\n}\n\n\n#pragma  mark * Public Login Methods\n\n\n-(void) loginWithProvider:(NSString *)provider\n             controller:(UIViewController *)controller\n                 animated:(BOOL)animated\n               completion:(MSClientLoginBlock)completion\n{\n    __block MSLoginController *loginController = nil;\n    __block MSUser *localUser = nil;\n    __block NSError *localError = nil;\n    __block int allDoneCount = 0;\n    \n    void (^callCompletionIfAllDone)() = ^{\n        allDoneCount++;\n        if (allDoneCount == 2) {\n            // Its possible for this to be triggered to close in the completion block of the present\n            // controller call, for example when there is no network connection.\n            // In order to avoid an error with the presentation animation still finishing, put the\n            // dismiss call onto the main queue and let this block finish running.\n            dispatch_async(dispatch_get_main_queue(), ^{\n                [controller dismissViewControllerAnimated:animated completion:^{\n                    if (completion) {\n                        completion(localUser, localError);\n                    }\n                    localUser = nil;\n                    localError = nil;\n                    loginController = nil;\n                }];\n            });\n        }\n    };\n    \n    // Create a completion block that will dismiss the controller, and then\n    // in the controller dismissal completion, call the completion that was\n    // passed in by the caller.  This ensures that if the dismissal is animated\n    // the LoginViewController has fuly disappeared from view before the\n    // final completion is called.\n    MSClientLoginBlock loginCompletion = ^(MSUser *user, NSError *error){\n        localUser = user;\n        localError = error;\n        callCompletionIfAllDone();\n    };\n    \n    provider = [self normalizeProvider:provider];\n    loginController = [self loginViewControllerWithProvider:provider\n                                                 completion:loginCompletion];\n    \n    // On iPhone this will do nothing, but on iPad it will present a smaller\n    // view that looks much better for login\n    loginController.modalPresentationStyle = UIModalPresentationFormSheet;\n    \n    dispatch_async(dispatch_get_main_queue(),^{\n        [controller presentViewController:loginController\n                                 animated:animated\n                               completion:callCompletionIfAllDone];\n    });\n}\n\n-(MSLoginController *) loginViewControllerWithProvider:(NSString *)provider\n                                            completion:(MSClientLoginBlock)completion\n{\n    provider = [self normalizeProvider:provider];\n    return [[MSLoginController alloc] initWithClient:self.client\n                                            provider:provider\n                                          completion:completion];\n}\n\n-(void) loginWithProvider:(NSString *)provider\n                token:(NSDictionary *)token\n               completion:(MSClientLoginBlock)completion\n{\n    // Create the request\n    NSError *error = nil;\n    provider = [self normalizeProvider:provider];\n    NSURLRequest *request = [self requestForProvider:provider\n                                            andToken:token\n                                             orError:&error];\n    \n    // If creating the request failed, call the completion block,\n    // otherwise, send the login request\n    if (error) {\n        if (completion) {\n            completion(nil, error);\n        }\n    }\n    else {\n        \n        // Create the response completion block\n        MSResponseBlock responseCompletion = nil;\n        if (completion) {\n            \n            responseCompletion = \n            ^(NSHTTPURLResponse *response, NSData *data, NSError *responseError)\n            {\n                MSUser *user = nil;\n                \n                if (!responseError) {\n                    if (response.statusCode >= 400) {\n                        responseError = [self.serializer errorFromData:data\n                                                              MIMEType:response.MIMEType];\n                    }\n                    else {\n                        user = [[MSLoginSerializer loginSerializer]\n                                userFromData:data\n                                orError:&responseError];\n                        \n                        if (user) {\n                            self.client.currentUser = user;\n                        }\n                    }\n                }\n                \n                completion(user, responseError);\n            };\n        }\n        \n        // Create the connection and start it\n        MSClientConnection *connection = [[MSClientConnection alloc]\n                                                initWithRequest:request\n                                                client:self.client\n                                                completion:responseCompletion];\n        [connection startWithoutFilters];\n    }\n}\n\n\n#pragma mark * Private Serializer Property Accessor Methods\n    \n    \n-(id<MSSerializer>) serializer\n{\n    // Just use a hard coded reference to MSJSONSerializer\n    return [MSJSONSerializer JSONSerializer];\n}\n\n\n#pragma mark * Private Methods\n\n-(NSString *) normalizeProvider:(NSString *)provider {\n    // Microsoft Azure Active Directory can be specified either in\n    // full or with the 'aad' abbreviation. The service REST API\n    // expects 'aad' only.\n    if ([[provider lowercaseString] isEqualToString:@\"windowsazureactivedirectory\"]) {\n        return @\"aad\";\n    } else {\n        return provider;\n    }\n}\n\n-(NSURLRequest *) requestForProvider:(NSString *)provider\n                            andToken:(NSDictionary *)token\n                             orError:(NSError **)error\n{\n    NSMutableURLRequest *request = nil;\n    \n    NSData *requestBody = [[MSLoginSerializer loginSerializer] dataFromToken:token\n                                                                     orError:error];\n    if (requestBody) {\n    \n        NSURL *URL = [self.client.applicationURL URLByAppendingPathComponent:\n                             [NSString stringWithFormat:@\"login/%@\", provider]];\n        request = [NSMutableURLRequest requestWithURL:URL];\n        request.HTTPMethod = @\"POST\";\n        request.HTTPBody = requestBody;\n    }\n    \n    return request;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSLoginController.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <UIKit/UIKit.h>\n\n@class MSClient;\n@class MSUser;\n\n\n#pragma mark * Block Type Definitions\n\n/// Callback logging in an end user. If there was an error or the login was\n/// cancelled, *error* will be non-nil.\ntypedef void (^MSClientLoginBlock)(MSUser *user, NSError *error);\n\n#pragma  mark * MSLoginController Public Interface\n\n\n/// The *MSLoginController* class provides a UIViewController that can be\n/// presented to allow an end user to authenticate with a Microsoft Azure Mobile\n/// Service.\n@interface MSLoginController : UIViewController\n\n#pragma  mark * Public Initializer Methods\n\n///@name Initializing the MSLoginController object\n///@{\n\n/// Initializes an *MSLoginController* instance with the given client, login\n/// provider and completion block.\n-(id)initWithClient:(MSClient *)client\n           provider:(NSString *)provider\n         completion:(MSClientLoginBlock)completion;\n\n///@}\n\n\n#pragma mark * Public Readonly Properties\n\n///@name Properties\n///@{\n\n/// The client associated with this *MSLoginController*.\n@property (nonatomic, strong, readonly)     MSClient *client;\n\n/// The login provider associated with this *MSLoginController*.\n@property (nonatomic, copy,   readonly)     NSString *provider;\n\n/// The *UIActivityIndicatorView* on the *UIToolbar* associated with the\n/// *MSLoginController*. If the toolbar is visible, the actvivity indicator\n/// will become active whenever the end user is navigating to a new URL during\n/// the login flow.\n@property (nonatomic, strong, readonly)     UIActivityIndicatorView *activityIndicator;\n\n/// The *UIToolbar* associated with the *MSLoginController*. The toolbar includes\n/// a cancel button and an activity indicator. The visibility and placement of\n/// the toolbar can be configured using the *showToolbar* and *toolbarPosition*\n/// properties respectively.\n@property (nonatomic, strong, readonly)     UIToolbar *toolbar;\n\n///@}\n\n\n#pragma mark * Public Readwrite Properties\n\n///@name Customizing the Toolbar\n///@{\n\n/// Indicates if the *toolbar* show be displayed. By default, *showToolbar* is\n/// YES.\n@property (nonatomic, readwrite)            BOOL showToolbar;\n\n/// Indicates if the *toolbar* should be positioned at the top or bottom of\n/// the login view.  By default, the *toolbarPosition* is *UIToolbarPositionBottom*.\n@property (nonatomic, readwrite)            UIToolbarPosition toolbarPosition;\n\n///@}\n\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSLoginController.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSLoginController.h\"\n#import \"MSLoginView.h\"\n#import \"MSLoginSerializer.h\"\n#import \"MSJSONSerializer.h\"\n\n\n#pragma mark * MSLoginController Private Interface\n\n\n@interface MSLoginController ()\n\n// Private properties\n@property (nonatomic, strong, readonly)     id<MSSerializer> serializer;\n@property (nonatomic, strong, readwrite)    MSLoginView *loginView;\n@property (nonatomic, copy,   readonly)     MSClientLoginBlock completion;\n\n@end\n\n\n#pragma mark * MSLoginController Implementation\n\n\n@implementation MSLoginController\n\n@synthesize client = client_;\n@synthesize provider = provider_;\n@synthesize completion = completion_;\n@synthesize loginView = loginView_;\n\n\n#pragma mark * Public Static Constructor Methods\n\n\n-(id) initWithClient:(MSClient *)client\n            provider:(NSString *)provider\n          completion:(MSClientLoginBlock)completion\n{\n    self = [super initWithNibName:nil bundle:nil];\n    if (self) {\n        client_ = client;\n        provider_ = [provider copy];\n        completion_ = [completion copy];\n    }\n    \n    return self;\n}\n\n\n#pragma mark * Public Toolbar Property Accessor Methods\n\n\n-(UIToolbar *) toolbar\n{\n    UIToolbar *localToolbar = nil;\n    \n    MSLoginView *localLoginView = self.loginView;\n    if (localLoginView) {\n        localToolbar = localLoginView.toolbar;\n    }\n    \n    return localToolbar;\n}\n\n\n#pragma mark * Public ActivityIndicator Property Accessor Methods\n\n\n-(UIActivityIndicatorView *) activityIndicator\n{\n    UIActivityIndicatorView *localActivityIndicator = nil;\n    \n    MSLoginView *localLoginView = self.loginView;\n    if (localLoginView) {\n        localActivityIndicator = localLoginView.activityIndicator;\n    }\n    \n    return localActivityIndicator;\n}\n\n\n#pragma mark * Public ShowToolbar Property Accessor Methods\n\n\n-(BOOL) showToolbar\n{\n    BOOL localShowToolbar = YES;\n    \n    MSLoginView *localLoginView = self.loginView;\n    if (localLoginView) {\n        localShowToolbar = localLoginView.showToolbar;\n    }\n    \n    return localShowToolbar;\n}\n\n-(void) setShowToolbar:(BOOL)showToolbar\n{\n    MSLoginView *localLoginView = self.loginView;\n    if (localLoginView) {\n        localLoginView.showToolbar = showToolbar;\n    }\n}\n\n\n#pragma mark * Public ToolbarPosition Property Accessor Methods\n\n\n-(UIToolbarPosition) toolbarPosition\n{\n    UIToolbarPosition localToolbarPosition = UIToolbarPositionBottom;\n    \n    MSLoginView *localLoginView = self.loginView;\n    if (localLoginView) {\n        localToolbarPosition = localLoginView.toolbarPosition;\n    }\n    \n    return localToolbarPosition;\n}\n\n-(void) setToolbarPosition:(UIToolbarPosition)toolbarPosition\n{\n    MSLoginView *localLoginView = self.loginView;\n    if (localLoginView) {\n        localLoginView.toolbarPosition = toolbarPosition;\n    }\n}\n\n\n#pragma mark * Public UIViewController Override Methods\n\n\n-(void) loadView\n{\n    self.view = self.loginView;\n}\n\n-(void) viewDidUnload\n{\n    self.loginView = nil;\n}\n\n\n#pragma mark * Private LoginView Property Accessor Methods\n\n\n-(MSLoginView *) loginView\n{\n    MSLoginView *loginView = loginView_;\n    \n    // If there is not an MSLoginView, create one\n    if (!loginView) {\n        \n        // Ensure we are using HTTPS\n        NSURL *baseUrl = self.client.applicationURL;\n        if ([[baseUrl.scheme lowercaseString] isEqualToString:@(\"http\")])\n        {\n            NSString *baseUrlString = baseUrl.absoluteURL.absoluteString;\n            NSString *substring = [baseUrlString substringFromIndex:4];\n            baseUrl = [NSURL URLWithString:\n                          [NSString stringWithFormat:@\"https%@\",substring]];\n        }\n\n        CGRect frame = [[UIScreen mainScreen] bounds];\n        NSURL *start = [baseUrl URLByAppendingPathComponent:\n                        [NSString stringWithFormat:@\"login/%@\", self.provider]];\n        NSURL *end = [baseUrl URLByAppendingPathComponent:@\"login/done\"];\n        \n        MSLoginViewBlock viewCompletion = nil;\n        \n        if (self.completion) {\n            \n            viewCompletion =\n            ^(NSURL *endURL, NSError *error) {\n                \n                MSUser *user = nil;\n                if (error) {\n                    error = [self convertError:error];\n                }\n                else {\n                    user = [self userFromURL:endURL orError:&error];\n                \n                    if (user) {\n                        self.client.currentUser = user;\n                    }\n                }\n                \n                self.completion(user, error);\n            };\n        }\n\n        loginView = [[MSLoginView alloc] initWithFrame:frame\n                                                client:self.client\n                                              startURL:start\n                                                endURL:end\n                                            completion:viewCompletion];\n        \n        loginView_ = loginView;\n    }\n    \n    return loginView;\n}\n\n\n#pragma mark * Private Serializer Property Accessor Methods\n\n\n-(id<MSSerializer>) serializer\n{\n    // Just use a hard coded reference to MSJSONSerializer\n    return [MSJSONSerializer JSONSerializer];\n}\n\n\n#pragma mark * Private Methods\n\n\n-(NSError *) convertError:(NSError *)error\n{\n    NSError *newError = nil;\n    \n    if (error) {\n        \n        // Convert LoginView errors into general Login errors\n        if ([error.domain isEqualToString:MSLoginViewErrorDomain]) {\n            if (error.code == MSLoginViewCanceled) {\n                newError = [self errorForLoginCanceled];\n            }\n            else {\n                NSDictionary *userInfo = error.userInfo;\n                NSData *data = [userInfo valueForKey:MSLoginViewErrorResponseData];\n                NSURLResponse *response = [userInfo valueForKey:MSErrorResponseKey];\n                newError = [self.serializer errorFromData:data\n                                                 MIMEType:response.MIMEType];\n            }\n        }\n        else {\n            newError = error;\n        }\n    }\n    \n    return newError;\n}\n\n-(MSUser *) userFromURL:(NSURL *)URL orError:(NSError **)error\n{\n    MSUser *user = nil;\n    NSError *localError = nil;\n    \n    // Ensure there is a URL\n    if (URL) {\n        \n        // Parse the URL for the token string or an error string\n        NSString *tokenString = nil;\n        NSString *errorString = nil;\n        \n        NSString *URLString = URL.absoluteString;\n        NSInteger tokenMatch = [URLString rangeOfString:@\"#token=\"].location;\n        if (tokenMatch != NSNotFound) {\n            tokenString = [URLString substringFromIndex:(tokenMatch + 7)];\n        }\n        else {\n            NSInteger errorMatch = [URLString rangeOfString:@\"#error=\"].location;\n            if (errorMatch != NSNotFound) {\n                errorString = [URLString substringFromIndex:(errorMatch + 7)];\n            }\n        }\n        \n        // If there was a token string, deserialize it into a user or if\n        // there was an error string, read the error message from it\n        if (tokenString) {\n            NSString *unencodedTokenString = [tokenString stringByRemovingPercentEncoding];\n            \n            NSData *tokenData = [unencodedTokenString\n                                 dataUsingEncoding:NSUTF8StringEncoding];\n            \n            user = [[MSLoginSerializer loginSerializer] userFromData:tokenData\n                                                             orError:&localError];\n        }\n        else if (errorString) {\n            NSString *unencodedErrorString = [errorString stringByRemovingPercentEncoding];\n            \n            localError = [self errorWithDescription:unencodedErrorString\n                                       andErrorCode:MSLoginFailed];\n        }\n    }\n    \n    // If we could not read a user from the URL, return either the known error\n    // or a generic one\n    if (!user && error) {\n        if (!localError) {\n            localError = [self errorForInvalidUserJson];\n        }\n        *error = localError;\n    }\n    \n    return user;\n}\n\n\n#pragma mark * Private NSError Generation Methods\n\n\n-(NSError *) errorForLoginCanceled\n{\n    return [self errorWithDescriptionKey:@\"The login operation was canceled.\"\n                            andErrorCode:MSLoginCanceled];\n}\n\n-(NSError *) errorForLoginFailed\n{\n    return [self errorWithDescriptionKey:@\"The login operation failed.\"\n                            andErrorCode:MSLoginFailed];\n}\n\n-(NSError *) errorForInvalidUserJson\n{\n    return [self errorWithDescriptionKey:@\"The token in the login response was invalid. The token must be a JSON object with both a userId and an authenticationToken.\"\n                            andErrorCode:MSLoginInvalidResponseSyntax];\n}\n\n-(NSError *) errorWithDescriptionKey:(NSString *)descriptionKey\n                        andErrorCode:(NSInteger)errorCode\n{\n    NSString *description = NSLocalizedString(descriptionKey, nil);\n    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey :description };\n    \n    return [NSError errorWithDomain:MSErrorDomain\n                               code:errorCode\n                           userInfo:userInfo];\n}\n\n-(NSError *) errorWithDescription:(NSString *)description\n                     andErrorCode:(NSInteger)errorCode\n{\n    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey :description };\n    \n    return [NSError errorWithDomain:MSErrorDomain\n                               code:errorCode\n                           userInfo:userInfo];\n}\n\n@end"
  },
  {
    "path": "sdk/iOS/src/MSLoginSerializer.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSUser.h\"\n\n\n#pragma mark * MSLoginSerializer Public Interface\n\n\n// The |MSLoginSerializer| is used for serializing authentication tokens and\n// deserializing |MSUser| instances for login sceanarios.\n@interface MSLoginSerializer : NSObject\n\n\n#pragma mark * Static Singleton Constructor\n\n\n// A singleton instance of the MSLoginSerializer.\n+(MSLoginSerializer *)loginSerializer;\n\n\n#pragma mark * Serialization Methods\n\n\n// Called to serialize an authentication token. May return nil if there was an\n// error, in which case |error| will be set to a non-nil value.\n-(NSData *)dataFromToken:(id)token orError:(NSError **)error;\n\n\n#pragma mark * Deserialization Methods\n\n\n// Called to deserialize an |MSUser| instance. May return nil if there was an\n// error, in which case |error| will be set to a non-nil value.\n-(MSUser *)userFromData:(NSData *)data orError:(NSError **)error;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSLoginSerializer.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSLoginSerializer.h\"\n#import \"MSError.h\"\n\n\n#pragma mark * MSLoginSerializer Implementation\n\n\n@implementation MSLoginSerializer\n\nstatic MSLoginSerializer *staticLoginSerializerSingleton;\n\n\n#pragma mark * Public Static Singleton Constructor\n\n\n+(MSLoginSerializer *) loginSerializer\n{\n    if (staticLoginSerializerSingleton == nil) {\n        staticLoginSerializerSingleton = [[MSLoginSerializer alloc] init];\n    }\n    \n    return  staticLoginSerializerSingleton;\n}\n\n\n#pragma mark * Public Serialization Methods\n\n\n-(NSData *) dataFromToken:(id)token orError:(NSError **)error\n{\n    NSData *data = nil;\n    NSError *localError = nil;\n    \n    // First, ensure there is an item...\n    if (!token) {\n        localError = [self errorForNilToken];\n    }\n    else {\n\n        // Make sure the |NSJSONSerializer| can serialize it, otherwise\n        // the |NSJSONSerializer| will throw an exception, which we don't\n        // want--we'd rather return an error.\n        if (![NSJSONSerialization isValidJSONObject:token]) {\n            localError = [self errorForInvalidToken];\n        }\n        else {\n            \n            // If there is still an error serializing, |dataWithJSONObject|\n            // will ensure that data the error is set and data is nil.\n            data = [NSJSONSerialization dataWithJSONObject:token\n                                                   options:0\n                                                     error:error];\n        }\n    }\n    \n    if (localError && error) {\n        *error = localError;\n    }\n    \n    return data;\n}\n\n\n#pragma mark * Deserialization Methods\n\n\n-(MSUser *) userFromData:(NSData *)data orError:(NSError **)error\n{\n    id userAsJson = nil;\n    MSUser *user = nil;\n    NSError *localError = nil;\n    \n    // Ensure there is data\n    if (!data) {\n        localError = [self errorForNilData];\n    }\n    else {\n        \n        // Try to deserialize the data; if it fails the error will be set\n        // and userAsJson will be nil.\n        userAsJson = [NSJSONSerialization JSONObjectWithData:data\n                                                     options:NSJSONReadingAllowFragments\n                                                       error:error];\n        \n        if (userAsJson) {\n            \n            // The JSON should have a userId and auth token strings\n            id userId = [[userAsJson objectForKey:@\"user\"]\n                         objectForKey:@\"userId\"];\n            id authToken = [userAsJson objectForKey:@\"authenticationToken\"];\n            \n            if (![userId isKindOfClass:[NSString class]] ||\n                ![authToken isKindOfClass:[NSString class]]) {\n                localError = [self errorForInvalidUserJson];\n            }\n            else {\n                user = [[MSUser alloc] initWithUserId:userId];\n                user.mobileServiceAuthenticationToken = authToken;\n            }\n        }\n    }\n    \n    if (localError && error) {\n        *error = localError;\n    }\n    \n    return user;\n}\n\n\n#pragma mark * Private NSError Generation Methods\n\n\n-(NSError *) errorForNilToken\n{\n    return [self errorWithDescriptionKey:@\"No token was provided.\"\n                            andErrorCode:MSLoginExpectedToken];\n}\n\n-(NSError *) errorForInvalidToken\n{\n    return [self errorWithDescriptionKey:@\"The token provided was not valid.\"\n                            andErrorCode:MSLoginInvalidToken];\n}\n\n-(NSError *) errorForNilData\n{\n    return [self errorWithDescriptionKey:@\"The server did return any data.\"\n                            andErrorCode:MSExpectedBodyWithResponse];\n}\n\n-(NSError *) errorForInvalidUserJson\n{\n    return [self errorWithDescriptionKey:@\"The token in the login response was invalid. The token must be a JSON object with both a userId and an authenticationToken.\"\n                            andErrorCode:MSLoginInvalidResponseSyntax];\n}\n\n-(NSError *) errorWithDescriptionKey:(NSString *)descriptionKey\n                        andErrorCode:(NSInteger)errorCode\n{\n    NSString *description = NSLocalizedString(descriptionKey, nil);\n    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey :description };\n    \n    return [NSError errorWithDomain:MSErrorDomain\n                               code:errorCode\n                           userInfo:userInfo];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSLoginView.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <UIKit/UIKit.h>\n#import \"MSClient.h\"\n\n\n#pragma mark * MSLoginViewErrorDomain\n\n\n// The error domain for the MSLoginView errors\nextern NSString *const MSLoginViewErrorDomain;\n\n\n#pragma mark * UserInfo Keys\n\n\n// The key to use with the |NSError| userInfo dictionary to retrieve the\n// data that was returned from a failed attempt to navigate to the end URL.\nextern NSString *const MSLoginViewErrorResponseData;\n\n\n#pragma mark * MSLoginView Error Codes\n\n\n// Indicates that MSLoginView failed to navigate to the end URL\n#define MSLoginViewFailed                   -9001\n\n// Indicates that MSLoginView was canceled\n#define MSLoginViewCanceled                 -9002\n\n\n#pragma mark * Block Type Definitions\n\n\n// Callback for the |MSLoginView| when it has either navigated to the |endURL|\n// or failed to do so because of the given |error|.\ntypedef void (^MSLoginViewBlock)(NSURL *endURL, NSError *error);\n\n\n#pragma mark * MSLoginView Public Interface\n\n\n// The |MSLoginView| class encapsulates all of the UI needed for login\n// scenarios. It includes a |UIWebView| and a |UIToolbar| with a cancel button\n// and an activity indicator.  The toolbar can be configured.  The |MSLoginView|\n// is designed to start a given URL and allow the user to navigate until a\n// specific end URL is reached or an error has occurred.\n@interface MSLoginView : UIView\n\n\n#pragma mark * Public Readonly Properties\n\n\n// The client associated with this |MSLoginView|.\n@property (nonatomic, strong, readonly) MSClient* client;\n\n// The URL at which the |MSLoginView| started.\n@property (nonatomic, strong, readonly) NSURL* startURL;\n\n// The URL at which the the |MSLoginView| will stop navigating.\n@property (nonatomic, strong, readonly) NSURL* endURL;\n\n// The |UIToolbar| associated with the |MSLoginView|.\n@property (nonatomic, strong, readonly) UIToolbar *toolbar;\n\n// The |UIActivityIndicatorView| on the |UIToolbar| associated with the\n// |MSLoginView|. If the toolbar is visible, the actvivity indicator\n// will become active whenever the end user is navigating to a new URL during\n// the login flow.\n@property (nonatomic, strong, readonly) UIActivityIndicatorView *activityIndicator;\n\n\n#pragma mark * Public Readwrite Properties\n\n\n// Indicates if the |toolbar| show be displayed. By default, |showToolbar| is\n// YES.\n@property (nonatomic, readwrite)        BOOL showToolbar;\n\n// Indicates if the |toolbar| should be positioned at the top or bottom of\n// login view.  By default, the |toolbarPosition| is |UIToolbarPositionBottom|.\n@property (nonatomic, readwrite)        UIToolbarPosition toolbarPosition;\n\n\n#pragma  mark * Public Initializer Methods\n\n\n// Initializes a new instance of the |MSLoginView|\n-(id)initWithFrame:(CGRect)frame\n            client:(MSClient *)client\n          startURL:(NSURL *)startURL\n            endURL:(NSURL *)endURL\n        completion:(MSLoginViewBlock)completion;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSLoginView.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSLoginView.h\"\n#import \"MSClientConnection.h\"\n\n\n#pragma mark * MSLoginViewErrorDomain\n\n\nNSString *const MSLoginViewErrorDomain = @\"com.Microsoft.WindowsAzureMobileServices.LoginViewErrorDomain\";\n\n\n#pragma mark * UserInfo Request and Response Keys\n\n\nNSString *const MSLoginViewErrorResponseData = @\"com.Microsoft.WindowsAzureMobileServices.LoginViewErrorResponseData\";\n\n\n#pragma mark * MSLoginController Private Interface\n\n\n@interface MSLoginView() <UIWebViewDelegate>\n\n// Private instance properties\n@property (nonatomic, strong, readwrite) UIWebView *webView;\n@property (nonatomic, strong, readwrite) NSURL* currentURL;\n@property (nonatomic, strong, readwrite) NSString* endURLString;\n@property (nonatomic, copy, readwrite)   MSLoginViewBlock completion;\n\n@end\n\n\n#pragma mark * MSLoginController Implementation\n\n\n@implementation MSLoginView\n\n@synthesize client = client_;\n@synthesize startURL = startURL_;\n@synthesize endURL = endURL_;\n@synthesize toolbar = toolbar_;\n@synthesize showToolbar = showToolbar_;\n@synthesize toolbarPosition = toolbarPosition_;\n@synthesize activityIndicator = activityIndicator_;\n@synthesize webView = webView_;\n@synthesize currentURL = currentURL_;\n@synthesize endURLString = endURLString_;\n@synthesize completion = completion_;\n\n\n#pragma mark * Public Initializer and Dealloc Methods\n\n\n-(id) initWithFrame:(CGRect)frame\n             client:(MSClient *)client\n           startURL:(NSURL *)startURL\n             endURL:(NSURL *)endURL\n         completion:(MSLoginViewBlock)completion;\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        \n        // Capture all of the initializer values as properties\n        client_ = client;\n        startURL_ = startURL;\n        endURL_ = endURL;\n        endURLString_ = endURL_.absoluteString;        \n        completion_ = [completion copy];\n        \n        // Create the activity indicator and toolbar\n        activityIndicator_ = [[UIActivityIndicatorView alloc]\n                              initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];\n        toolbar_ = [self createToolbar:activityIndicator_];\n        [self addSubview:toolbar_];\n        \n        // Set the toolbar defaults\n        showToolbar_ = YES;\n        toolbarPosition_ = UIToolbarPositionBottom;\n        \n        // Create the webview\n        webView_ = [[UIWebView alloc] init];\n        webView_.delegate = self;\n        [self addSubview:webView_];\n        \n        // Call setViewFrames to update the subview frames\n        [self setViewFrames];\n        \n        // Start the first request\n        NSURLRequest *firstRequest = [NSURLRequest requestWithURL:startURL];\n        [webView_ loadRequest:firstRequest];\n    }\n    return self;\n}\n\n- (void) dealloc\n{\n    webView_.delegate = nil;\n}\n\n\n#pragma mark * Public ShowToolbar Property Accessor Methods\n\n\n-(void) setShowToolbar:(BOOL)showToolbar\n{\n    if (showToolbar != showToolbar_) {\n        showToolbar_ = showToolbar;\n        [self setViewFrames];\n    }\n}\n\n\n#pragma mark * Public ToolbarPosition Property Accessor Methods\n\n\n-(void) setToolbarPosition:(UIToolbarPosition)toolbarPosition\n{\n    if (toolbarPosition != toolbarPosition_) {\n        toolbarPosition_ = toolbarPosition;\n        [self setViewFrames];\n    }\n}\n\n\n#pragma mark * UIWebViewDelegate Private Implementation\n\n\n-(BOOL) webView:(UIWebView *)webView\n            shouldStartLoadWithRequest:(NSURLRequest *)request\n            navigationType:(UIWebViewNavigationType)navigationType;\n{\n    BOOL shouldLoad = NO;\n    \n    NSURL *requestURL = request.URL;\n    NSString *requestURLString = request.URL.absoluteString;\n    \n    // Now check if we've reached the end URL and we're done\n    if ([requestURLString rangeOfString:self.endURLString].location == 0) {\n        [self callCompletion:requestURL orError:nil];\n    }\n    else {\n        \n        // Check if this request is to the Microsoft Azure Mobile Service and\n        // if so, make the request with the MSClientConnection so that we\n        // can inspect the response\n        NSString *appURLString = self.client.applicationURL.absoluteString;\n        if ([self.currentURL isEqual:requestURL] ||\n            [requestURLString rangeOfString:appURLString].location != 0)\n        {\n            shouldLoad = YES;\n        }\n        else {\n            [self makeRequest:request];\n        }\n    }\n    \n    return shouldLoad;\n}\n\n-(void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error\n{    \n    // Ignore \"Fame Load Interrupted\" errors.  These are caused by us\n    // taking over the HTTP calls to the Microsoft Azure Mobile Service\n    if (error.code == 102 && [error.domain isEqual:@\"WebKitErrorDomain\"]) {\n        return;\n    }\n    \n    // Ignore the NSURLErrorCancelled error which occurs if a user navigates\n    // before the current request completes\n    if ([error code] == NSURLErrorCancelled) {\n        return;\n    }\n\n    [self callCompletion:nil orError:error];\n}\n\n-(void) webViewDidStartLoad:(UIWebView *)webView\n{\n    [self.activityIndicator startAnimating];\n}\n\n-(void) webViewDidFinishLoad:(UIWebView *)webView\n{\n    [self.activityIndicator stopAnimating];\n}\n\n\n#pragma mark * Private Methods\n\n\n-(UIToolbar *) createToolbar:(UIActivityIndicatorView *)activityIndicatorView\n{\n    // Create the toolbar\n    UIToolbar *toolbar = [[UIToolbar alloc] init];\n    toolbar.barStyle = UIBarStyleDefault;\n    \n    // Create the three toolbar items\n    UIBarButtonItem *activity = [[UIBarButtonItem alloc]\n                                 initWithCustomView:activityIndicatorView];\n    UIBarButtonItem *cancel = [[UIBarButtonItem alloc]\n                        initWithBarButtonSystemItem:UIBarButtonSystemItemCancel\n                        target:self\n                        action:@selector(cancel:)];\n    UIBarButtonItem *space = [[UIBarButtonItem alloc]\n                 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace\n                 target:self\n                 action:nil];\n    \n    // Add the items to the toolbar\n    [toolbar setItems:[NSArray arrayWithObjects:cancel, space, activity, nil]];\n    \n    return toolbar;\n}\n\n- (IBAction)cancel:(id)sender\n{\n    [self.activityIndicator stopAnimating];\n    \n    NSError *error =[self errorForLoginViewCanceled];\n    [self callCompletion:nil orError:error];\n}\n\n-(void) setViewFrames\n{\n    CGRect rootFrame = self.frame;\n    CGFloat toolBarHeight = 44;\n    CGFloat webViewHeightOffset = 0;\n    CGFloat webViewYOffset = 0;\n    \n    // Set the toolbar's frame if it should be displayed\n    if (self.showToolbar) {\n        if (self.toolbarPosition == UIToolbarPositionTop) {\n            self.toolbar.frame = CGRectMake(0,\n                                            0,\n                                            rootFrame.size.width,\n                                            toolBarHeight);\n            self.toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth |\n            UIViewAutoresizingFlexibleBottomMargin;\n            \n            // Offset the webView to make room for the toolbar at the top\n            webViewYOffset = toolBarHeight;\n        }\n        else {\n            self.toolbar.frame = CGRectMake(0,\n                                            rootFrame.size.height-toolBarHeight,\n                                            rootFrame.size.width,\n                                            toolBarHeight);\n            self.toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth |\n            UIViewAutoresizingFlexibleTopMargin;\n            \n            // Shorten the webview to make room for the toolbar at the bottom\n            webViewHeightOffset = toolBarHeight;\n        }\n    }\n    \n    // Set the webview's frame\n    self.webView.frame = CGRectMake(0,\n                                    webViewYOffset,\n                                    rootFrame.size.width,\n                                    rootFrame.size.height - webViewHeightOffset);\n    self.webView.autoresizingMask = UIViewAutoresizingFlexibleWidth |\n    UIViewAutoresizingFlexibleHeight;\n}\n\n-(void) makeRequest:(NSURLRequest *)request\n{\n    // Create the callback\n    MSResponseBlock responseCompletion =\n    ^(NSHTTPURLResponse *response, NSData *data, NSError *error)\n    {\n        [self.activityIndicator stopAnimating];\n\n        if (!error && response.statusCode >= 400) {\n            error = [self errorForLoginViewFailedWithResponse:response\n                                                      andData:data];\n        }\n        \n        // If the connection had an error or we got an error status code,\n        // then we call the completion block\n        if (error) {\n            [self callCompletion:nil orError:error];\n        }\n        else {\n            \n            // Check for a redirect and if so, build a new request. Otherwise\n            // just have the WebView load the response data.\n            if (response.statusCode >= 300) {\n                NSString *newURLString = [response.allHeaderFields valueForKey:@\"Location\"];\n                NSURL *newURL = [NSURL URLWithString:newURLString];\n                NSURLRequest *newRequest = [NSURLRequest requestWithURL:newURL];\n                [self.webView loadRequest:newRequest];\n            }\n            else {\n                // The request was successful, so ask the WebView to load the\n                // response data\n                NSURL *URL = response.URL;\n                NSString *MIMEType = response.MIMEType;\n                NSString *textEncodingName = response.textEncodingName;\n                \n                self.currentURL = URL;\n                [self.webView loadData:data\n                              MIMEType:MIMEType\n                      textEncodingName:textEncodingName\n                               baseURL:self.currentURL];\n            }\n        }\n    };\n    \n    // Make the connection and start it\n    MSClientConnection  *connection = [[MSClientConnection alloc]\n                                       initWithRequest:request\n                                       client:self.client\n                                       completion:responseCompletion];\n    \n    [self.activityIndicator startAnimating];\n    \n    [connection startWithoutFilters];\n}\n\n-(void) callCompletion:(NSURL *)endURL orError:(NSError *)error\n{\n    // Call the completion and then set it to nil so that it does not\n    // get called twice.\n    if (self.completion) {\n        self.completion(endURL, error);\n        self.completion = nil;\n    }\n}\n\n\n#pragma mark * Private NSError Generation Methods\n\n\n-(NSError *) errorForLoginViewFailedWithResponse:(NSURLResponse *)response\n                                         andData:(NSData *)data\n{\n    NSDictionary *userInfo = @{\n        MSErrorResponseKey:response,\n        MSLoginViewErrorResponseData : data\n    };\n    \n    return [self errorWithDescriptionKey:@\"The login operation failed.\"\n                            andErrorCode:MSLoginViewFailed\n                             andUserInfo:userInfo];\n}\n\n-(NSError *) errorForLoginViewCanceled\n{\n    return [self errorWithDescriptionKey:@\"The login operation was canceled.\"\n                            andErrorCode:MSLoginViewCanceled\n                             andUserInfo:nil];\n}\n\n-(NSError *) errorWithDescriptionKey:(NSString *)descriptionKey\n                        andErrorCode:(NSInteger)errorCode\n                         andUserInfo:(NSDictionary *)userInfo\n{\n    NSString *description = NSLocalizedString(descriptionKey, nil);\n    \n    if (!userInfo) {\n        userInfo = [[NSMutableDictionary alloc] init];\n    }\n    else {\n        userInfo = [userInfo mutableCopy];\n    }\n    \n    [userInfo setValue:description forKey:NSLocalizedDescriptionKey];\n    \n    return [NSError errorWithDomain:MSLoginViewErrorDomain\n                               code:errorCode\n                           userInfo:userInfo];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSNaiveISODateFormatter.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n\n#pragma mark * MSDateFormatter Public Interface\n\n\n// An NSDateFormatter for a naive implementation of the ISO 8061 date format\n// that uses the format string: yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\n@interface MSNaiveISODateFormatter : NSDateFormatter\n\n// A singleton instance of the MSNaiveISODateFormatter.\n+(MSNaiveISODateFormatter *)naiveISODateFormatter;\n+(MSNaiveISODateFormatter *)naiveISODateNoFractionalSecondsFormatter;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSNaiveISODateFormatter.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSNaiveISODateFormatter.h\"\n\n\n#pragma mark * DateTime Format\n\nstatic NSString *const formatDate = @\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\";\nstatic NSString *const formatDateNoFractionalSeconds = @\"yyyy-MM-dd'T'HH:mm:ss'Z'\";\n\n\n#pragma mark * MSDateFormatter Implementation\n\n\n@implementation MSNaiveISODateFormatter\n\n\nstatic MSNaiveISODateFormatter *staticDateFormatterSingleton;\nstatic MSNaiveISODateFormatter *staticDateNoFractionalSecondsFormatterSingleton;\n\n\n#pragma mark * Public Static Singleton Constructor\n\n\n+(MSNaiveISODateFormatter *) naiveISODateFormatter\n{\n    if (staticDateFormatterSingleton == nil) {\n        staticDateFormatterSingleton = [[MSNaiveISODateFormatter alloc] initWithFormat:formatDate];\n    }\n    \n    return  staticDateFormatterSingleton;\n}\n\n+(MSNaiveISODateFormatter *)naiveISODateNoFractionalSecondsFormatter\n{\n    if (staticDateNoFractionalSecondsFormatterSingleton == nil) {\n        staticDateNoFractionalSecondsFormatterSingleton = [[MSNaiveISODateFormatter alloc] initWithFormat:formatDateNoFractionalSeconds];\n    }\n    \n    return  staticDateNoFractionalSecondsFormatterSingleton;\n}\n\n#pragma mark * Public Initializer Methods\n\n\n-(id) initWithFormat:(NSString *)format\n{\n    self = [super init];\n    if (self) {\n\n        // To ensure we ignore user locale and preferences we use the\n        // following locale\n        NSLocale *locale = [[NSLocale alloc]\n                            initWithLocaleIdentifier:@\"en_US_POSIX\"];\n        [self setLocale:locale];\n        \n        // Set the date format\n        [self setDateFormat:format];\n        \n        // Set the time zone to GMT\n        [self setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@\"GMT\"]];\n    }\n    return self;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSOperationQueue.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSTableOperation.h\"\n#import \"MSClient.h\"\n#import \"MSSyncContext.h\"\n\n/// A simple queue interface to abstract access from implementation. For now this may just\n/// be an NSArray but long term this is liable to change\n@interface MSOperationQueue : NSObject\n\n/// Creates a MSOperationQueue\n- (id) initWithClient:(MSClient *)client dataSource:(id<MSSyncContextDataSource>)dataSource;\n\n/// Adds a table operation to the queue\n-(void) addOperation:(MSTableOperation *)operation orError:(NSError **)error;\n\n/// Removes a given operation from the queue\n-(void) removeOperation:(MSTableOperation *)operation orError:(NSError **)error;\n\n/// Analyzes the given operation and condenses it with any already in the queue\n/// Letting the last table-item operation win in the queue\n-(BOOL) condenseOperation:(MSTableOperation *)operation orError:(NSError **)error;\n\n/// Gets a list of all operations in the queue for a given table (and optionally item)\n-(NSArray *) getOperationsForTable:(NSString *) table item:(NSString *)item;\n\n/// Returns the topmost operation\n-(id) peek;\n\n/// Get the next operation on the queue, skipping any before the given operation.\n-(id) getOperationAfter:(NSInteger)operationId;\n\n/// Returns a count of the total pending operations\n-(NSUInteger) count;\n\n/// Returns the next operation id available (based on all current operations)\n-(NSInteger) getNextOperationId;\n\n/// Marks an operation as being in use and no other process should update it\n- (BOOL) lockOperation:(MSTableOperation *)operation;\n\n/// Removes the lock on the operation\n- (BOOL) unlockOperation:(MSTableOperation *)operation;\n\n/// Returns true if the operation is locked; otherwise, false\n- (BOOL) isLocked:(MSTableOperation *)operation;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSOperationQueue.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSOperationQueue.h\"\n\n#import \"MSTable.h\"\n#import \"MSTableOperationInternal.h\"\n#import \"MSQuery.h\"\n\n@interface MSOperationQueue()\n@property (nonatomic, weak) id<MSSyncContextDataSource> dataSource;\n@property (nonatomic, weak) MSClient *client;\n@property (atomic, strong) NSMutableDictionary *locks;\n@end\n\n@implementation MSOperationQueue\n@synthesize dataSource = dataSource_;\n@synthesize client = client_;\n@synthesize locks = locks_;\n\n- (id) initWithClient:(MSClient *)client dataSource:(id<MSSyncContextDataSource>)dataSource\n{\n    self = [super init];\n    if (self) {\n        dataSource_ = dataSource;\n        client_ = client;\n        locks_ = [NSMutableDictionary new];\n    }\n    return self;\n}\n\n/// Return the total count of operations that exist in the queue\n-(NSUInteger) count\n{\n    MSSyncTable *table = [[MSSyncTable alloc] initWithName:self.dataSource.operationTableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:table];\n    \n    // We want the total count from the DB, but no records\n    query.includeTotalCount = YES;\n    query.fetchLimit = 0;\n\n    NSError *error;\n    MSSyncContextReadResult *result = [self.dataSource readWithQuery:query orError:&error];\n\n    // Return -1 if count fails\n    if (error) {\n        return -1;\n    }\n    \n    return result.totalCount;\n}\n\n/// Load up all operations for a given table and optionally a specific item on that table\n/// and return the list to the caller\n-(NSArray *) getOperationsForTable:(NSString *)table item:(NSString *)item\n{\n    NSError *error;\n    MSSyncTable *syncTable = [[MSSyncTable alloc] initWithName:self.dataSource.operationTableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:syncTable];\n    \n    if (item) {\n        query.predicate = [NSPredicate predicateWithFormat:@\"(table == %@) AND (itemId ==[c] %@)\", table, item];\n    } else {\n        query.predicate = [NSPredicate predicateWithFormat:@\"(table == %@)\", table];\n    }\n\n    MSSyncContextReadResult *result = [self.dataSource readWithQuery:query orError:&error];\n    if (error) {\n        return nil;\n    }\n    \n    NSMutableArray *operations = [NSMutableArray new];\n    for (NSDictionary *item in result.items) {\n        MSTableOperation *op = [[MSTableOperation alloc] initWithItem:item];\n        op.inProgress = [self isLocked:op];\n        [operations addObject:op];\n    }\n    return [operations copy];\n}\n\n-(void) addOperation:(MSTableOperation *)operation orError:(NSError **)error\n{\n    [self.dataSource upsertItems:[NSArray arrayWithObject:[operation serialize]]\n                          table:self.dataSource.operationTableName\n                        orError:error];\n}\n\n-(void) removeOperation:(MSTableOperation *)operation orError:(NSError **)error\n{\n    // Find all errors for this operation and delete them first\n    MSSyncTable *errorsTable = [[MSSyncTable alloc] initWithName:self.dataSource.errorTableName client:self.client];\n    MSQuery *errorsQuery = [[MSQuery alloc] initWithSyncTable:errorsTable];\n    errorsQuery.predicate = [NSPredicate predicateWithFormat:@\"operationId == %ld\", operation.operationId];\n    [self.dataSource deleteUsingQuery:errorsQuery\n                              orError:error];\n    if (error && *error) {\n        return;\n    }\n\n    [self.dataSource deleteItemsWithIds:[NSArray arrayWithObject:[NSNumber numberWithInteger:operation.operationId]]\n                                  table:[self.dataSource operationTableName]\n                                orError:error];\n    if (error && *error) {\n        return;\n    }\n    // Make sure to clean up any lock if one existed\n    [self unlockOperation:operation];\n}\n\n- (id) peek\n{\n    return [self getOperationAfter:-1];\n}\n\n- (id) getOperationAfter:(NSInteger)operationId\n{\n    MSSyncTable *table = [[MSSyncTable alloc] initWithName:self.dataSource.operationTableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:table];\n    \n    // We want the highest id from the DB, but no records\n    query.fetchLimit = 1;\n    [query orderByAscending:@\"id\"];\n    if (operationId >= 0) {\n        query.predicate = [NSPredicate predicateWithFormat:@\"id > %d\", operationId];\n    }\n    \n    MSSyncContextReadResult *result = [self.dataSource readWithQuery:query orError:nil];\n    if (result.items && result.items.count > 0) {\n        NSDictionary *item = [result.items objectAtIndex:0];\n        if (item) {\n            MSTableOperation *op = [[MSTableOperation alloc] initWithItem:item];\n            op.inProgress = [self isLocked:op];\n            return op;\n        }\n    }\n    \n    return nil;\n}\n\n/// Return the highest id currently in the table + 1. This API should not be called in parallel with\n/// an insert function.\n-(NSInteger) getNextOperationId\n{\n    MSSyncTable *table = [[MSSyncTable alloc] initWithName:self.dataSource.operationTableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:table];\n    \n    // We want the highest id from the DB, but no records\n    query.fetchLimit = 1;\n    [query orderByDescending:@\"id\"];\n    \n    NSError *error;\n    MSSyncContextReadResult *result = [self.dataSource readWithQuery:query orError:&error];\n    \n    // Return -1 if count fails\n    if (error) {\n        return -1;\n    }\n    \n    if (result.items && result.items.count > 0) {\n        NSDictionary *item = [result.items objectAtIndex:0];\n        return [[item objectForKey:@\"id\"] integerValue] + 1;\n    } else {\n        return 1;\n    }\n}\n\n/// Given an operation, analyzes the queue to see if two operations exist on the same\n/// table-item pair and if so, determines if the two can be combined into a single operation\n/// on the queue.\n-(BOOL) condenseOperation:(MSTableOperation *)operation orError:(NSError **)error\n{\n    // FUTURE: Combine operation changes into a single batch\n    \n    // For performance, assume queue is always in a valid state\n    if (operation.type == MSTableOperationDelete) {\n        return NO;\n    }\n    \n    // Look up the second possible operation\n    NSArray *operations = [self getOperationsForTable:operation.tableName item:operation.itemId];\n    if (operations == nil || operations.count < 2) {\n        return NO;\n    }\n    \n    MSTableOperation *firstOperation = [operations objectAtIndex:0];\n    MSTableOperation *secondOperation = [operations objectAtIndex:1];\n\n    // Abort any invalid condense patterns\n    if (secondOperation.type != MSTableOperationInsert) {\n        return NO;\n    }\n    \n    if (firstOperation.type == MSTableOperationUpdate) {\n        // update: condenses to delete when present\n        if (secondOperation.type == MSTableOperationDelete) {\n            firstOperation.type = secondOperation.type;\n            firstOperation.item = secondOperation.item;\n            [self addOperation:firstOperation orError:error];\n        }\n    } else {\n        // insert wins unless a delete also is present\n        if (secondOperation.type == MSTableOperationDelete) {\n            [self removeOperation:firstOperation orError:error];\n        }\n    }\n    \n    // Check for any errors fixing state\n    if (error && *error) {\n        return NO;\n    }\n    \n    // Condense always collapses to first operation\n    [self removeOperation:secondOperation orError:error];\n    \n    // If an error occurred, indicate a condense did not occur\n    if (error && *error) {\n        return NO;\n    }\n    \n    return YES;\n}\n\n- (BOOL) lockOperation:(MSTableOperation *)operation\n{\n    NSNumber *key = [NSNumber numberWithInteger:operation.operationId];\n    BOOL locked = [[self.locks objectForKey:key] boolValue];\n    if (locked) {\n        return NO;\n    } else {\n        [self.locks setObject:[NSNumber numberWithBool:YES] forKey:key];\n        return YES;\n    }\n}\n\n- (BOOL) unlockOperation:(MSTableOperation *)operation\n{\n    NSNumber *key = [NSNumber numberWithInteger:operation.operationId];\n    [self.locks removeObjectForKey:key];\n    return YES;\n}\n\n- (BOOL) isLocked:(MSTableOperation *)operation\n{\n    NSNumber *key = [NSNumber numberWithInteger:operation.operationId];\n    return [[self.locks objectForKey:key] boolValue];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSPredicateTranslator.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n\n#pragma mark * MSPredicateTranslator Public Interface\n\n\n// The |MSPredicateTranslator| traverses the abstract syntax tree of an\n// |NSPredicate| instance and builds the filter portion of a query string.\n@interface MSPredicateTranslator : NSObject\n\n// Returns the filter portion of a query string translated from the\n// given |NSPRedicate|. Will return a nil value and a non-nil error if the\n// predicate is not supported.\n+(NSString *)queryFilterFromPredicate:(NSPredicate *)predicate\n                              orError:(NSError **)error;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSPredicateTranslator.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSPredicateTranslator.h\"\n#import \"MSNaiveISODateFormatter.h\"\n#import \"MSError.h\"\n#import \"MSDateOffset.h\"\n\n#pragma mark * NSExpression Function String Constants\n\n\nstatic NSString *const addFunction = @\"add:to:\";\nstatic NSString *const subFunction =@\"from:subtract:\";\nstatic NSString *const mulFunction = @\"multiply:by:\";\nstatic NSString *const divFunction = @\"divide:by:\";\nstatic NSString *const modFunction = @\"modulus:by:\";\nstatic NSString *const ceilingFunction = @\"ceiling:\";\nstatic NSString *const floorFunction = @\"floor:\";\nstatic NSString *const toUpperFunction =@\"uppercase:\";\nstatic NSString *const toLowerFunction = @\"lowercase:\";\nstatic NSString *const truePredicate = @\"TRUEPREDICATE\";\nstatic NSString *const falsePredicate = @\"FALSEPREDICATE\";\n\n\n#pragma mark * Filter Query String Constants\n\n\nstatic NSString *const openParentheses = @\"(\";\nstatic NSString *const closeParentheses = @\")\";\nstatic NSString *const comma = @\",\";\n\nstatic NSString *const operatorOpenParentheses = @\"%@(\";\nstatic NSString *const operatorWhitespace = @\" %@ \";\n\nstatic NSString *const notOperator = @\"not\";\nstatic NSString *const andOperator = @\"and\";\nstatic NSString *const orOperator = @\"or\";\nstatic NSString *const lessThanOperator = @\"lt\";\nstatic NSString *const lessThanOrEqualsOperator = @\"le\";\nstatic NSString *const greaterThanOperator = @\"gt\";\nstatic NSString *const greaterThanOrEqualsOperator = @\"ge\";\nstatic NSString *const equalsOperator = @\"eq\";\nstatic NSString *const notEqualsOperator = @\"ne\";\nstatic NSString *const addOperator = @\"add\";\nstatic NSString *const subOperator = @\"sub\";\nstatic NSString *const mulOperator =  @\"mul\";\nstatic NSString *const divOperator = @\"div\";\nstatic NSString *const modOperator =  @\"mod\";\nstatic NSString *const ceilingOperator = @\"ceiling\";\nstatic NSString *const floorOperator = @\"floor\";\nstatic NSString *const toUpperOperator = @\"toupper\";\nstatic NSString *const toLowerOperator = @\"tolower\";\nstatic NSString *const startsWithOperator = @\"startswith\";\nstatic NSString *const endsWithOperator = @\"endswith\";\nstatic NSString *const substringOfOperator = @\"substringof\";\n\nstatic NSString *const nullConstant = @\"null\";\nstatic NSString *const stringConstant = @\"'%@'\";\nstatic NSString *const trueConstant = @\"true\";\nstatic NSString *const falseConstant = @\"false\";\nstatic NSString *const decimalConstant = @\"%@m\";\nstatic NSString *const floatConstant = @\"%gf\";\nstatic NSString *const doubleConstant = @\"%gd\";\nstatic NSString *const intConstant = @\"%d\";\nstatic NSString *const longConstant = @\"%ld\";\nstatic NSString *const longLongConstant = @\"%lldl\";\nstatic NSString *const dateTimeConstant = @\"datetime'%@'\";\nstatic NSString *const dateTimeOffsetConstant = @\"datetimeoffset'%@'\";\nstatic NSString *const alwaysTrueConstant = @\"(1 eq 1)\";\nstatic NSString *const alwaysFalseConstant = @\"(1 eq 0)\";\nstatic NSString *const guidConstant = @\"guid'%@'\";\n\n\n#pragma mark * MSPredicateTranslator Implementation\n\n\n@implementation MSPredicateTranslator\n\nstatic NSDictionary *staticFunctionInfoLookup;\n\n\n#pragma mark * Public Static Methods\n\n\n+(NSString *) queryFilterFromPredicate:(NSPredicate *)predicate\n                               orError:(NSError **)error\n{\n    NSString *queryFilter = [MSPredicateTranslator visitPredicate:predicate];\n    \n    if (!queryFilter && error) {\n        *error = [MSPredicateTranslator errorForUnsupportedPredicate];\n    }\n\n    return queryFilter;\n}\n\n\n#pragma mark * Private Visit Predicate Methods\n\n\n+(NSString *) visitPredicate:(NSPredicate *)predicate\n{\n    NSString *result = nil;\n    \n    // Determine which subclass of NSPredicate we have and\n    // then call the appropriate visit*() method\n    if ([predicate isKindOfClass:[NSComparisonPredicate class]]) {\n        \n        result = [MSPredicateTranslator visitComparisonPredicate:\n                  (NSComparisonPredicate *)predicate];\n    }\n    else if ([predicate isKindOfClass:[NSCompoundPredicate class]]){\n        \n        result = [MSPredicateTranslator visitCompoundPredicate:\n                  (NSCompoundPredicate *)predicate];\n    }\n    else {\n        NSString *predicteFormat = predicate.predicateFormat;\n        if ([predicteFormat isEqualToString:truePredicate]){\n            result = alwaysTrueConstant;\n        }\n        else if ([predicteFormat isEqualToString:falsePredicate]) {\n            result = alwaysFalseConstant;\n        }\n    }\n    \n    \n    return result;\n}\n\n+(NSString *) visitPredicates:(NSArray *)predicates\n                 withOperator:(NSString *)operator\n             useInfixNotation:(BOOL)useInfix\n{\n    NSMutableString *result = [NSMutableString string];\n    \n    // Determine the strings to use depending on infix or prefix notation\n    NSString *openParenthesesString = (useInfix) ?\n        openParentheses :\n        [NSString stringWithFormat:operatorOpenParentheses, operator];\n    \n    NSString *predicateSeparatorString = (useInfix) ?\n        [NSString stringWithFormat:operatorWhitespace, operator] :\n        comma;\n    \n    // Start with the open parentheses string\n    [result appendString:openParenthesesString];\n    \n    // Iterate through the predicates\n    BOOL firstPredicate = YES;\n    for (NSPredicate *predicate in predicates) {\n\n        if (!firstPredicate) {\n            [result appendString:predicateSeparatorString];\n        }\n        firstPredicate = NO;\n        \n        NSString *subResult = [MSPredicateTranslator visitPredicate:predicate];\n        if (!subResult) {\n            result = nil;\n            break;\n        }\n        else {\n            [result appendString:subResult];\n        }\n    }\n    \n    // Close the parentheses\n    [result appendString:closeParentheses];\n\n    return result;\n}\n\n+(NSString *) visitComparisonPredicate:(NSComparisonPredicate *)predicate\n{\n    NSString *result = nil;\n    \n    BOOL useInfixNotation = YES;\n    BOOL leftThenRightExpressions = YES;\n    NSPredicate *replacementPredicate = nil;\n    NSString *operator = nil;\n\n    \n    // If the case insensitive option is being used, wrap both expressions\n    // in tolower() function calls\n    if ((predicate.options & NSCaseInsensitivePredicateOption) ==\n         NSCaseInsensitivePredicateOption) {\n        \n        predicate =\n        [MSPredicateTranslator replacementPredicateForCaseInsensitivePredicate:predicate];\n    }\n    \n    // Lookup the operator and whether using infix notation, or determine\n    // if this predicte should be replaced with another equivalent\n    // predicate.\n    switch (predicate.predicateOperatorType) {\n        case NSLessThanPredicateOperatorType:\n            operator = lessThanOperator;\n            break;\n        case NSLessThanOrEqualToPredicateOperatorType:\n            operator = lessThanOrEqualsOperator;\n            break;\n        case NSGreaterThanPredicateOperatorType:\n            operator = greaterThanOperator;\n            break;\n        case NSGreaterThanOrEqualToPredicateOperatorType:\n            operator = greaterThanOrEqualsOperator;\n            break;\n        case NSEqualToPredicateOperatorType:\n            operator = equalsOperator;\n            break;\n        case NSNotEqualToPredicateOperatorType:\n            operator = notEqualsOperator;\n            break;\n        case NSBeginsWithPredicateOperatorType:\n            useInfixNotation = NO;\n            operator = startsWithOperator;\n            break;\n        case NSEndsWithPredicateOperatorType:\n            useInfixNotation = NO;\n            operator = endsWithOperator;\n            break;\n        case NSContainsPredicateOperatorType:\n            useInfixNotation = NO;\n            leftThenRightExpressions = NO;\n            operator = substringOfOperator;\n            break;\n        case NSInPredicateOperatorType:\n            replacementPredicate =\n            [MSPredicateTranslator replacementPredicateForInPredicate:predicate];\n            break;\n        case NSBetweenPredicateOperatorType:\n            replacementPredicate =\n            [MSPredicateTranslator replacementPredicateForBetweenPredicate:predicate];\n            break;\n        case NSMatchesPredicateOperatorType:\n        case NSLikePredicateOperatorType:\n        case NSCustomSelectorPredicateOperatorType:\n        default:\n            // Not supported, so operator remains nil\n            break;\n    }\n\n    if (replacementPredicate) {\n        result = [MSPredicateTranslator visitPredicate:replacementPredicate];\n    }\n    else if (operator) {\n        \n        // Get the expressions in the correct order for the operator if not\n        // already set\n        NSArray *expressions = nil;\n        if (leftThenRightExpressions) {\n            expressions = [NSArray arrayWithObjects:\n                           predicate.leftExpression,\n                           predicate.rightExpression, nil];\n        }\n        else\n        {\n            expressions = [NSArray arrayWithObjects:\n                           predicate.rightExpression,\n                           predicate.leftExpression, nil];\n        }\n        \n        // Now visit the expressions\n        result = [MSPredicateTranslator visitExpressions:expressions\n                                            withOperator:operator\n                                        useInfixNotation:useInfixNotation];\n\n    }\n    \n    return result;\n}\n\n+(NSString *) visitCompoundPredicate:(NSCompoundPredicate *)predicate\n{\n    NSString *result = nil;\n\n    NSString *operator = nil;\n    BOOL useInfixNotation= YES;\n    \n    // Determine the correct operator and if this has a single operand or\n    // multiple\n    switch (predicate.compoundPredicateType) {\n        case NSNotPredicateType:\n            operator = notOperator;\n            useInfixNotation = NO;\n            break;\n        case NSAndPredicateType:\n            operator = andOperator;\n            break;\n        case NSOrPredicateType:\n            operator = orOperator;\n            break;\n        default:\n            // Unknown operator, so operator remains nil\n            break;\n    }\n    \n    if (operator) {\n        result = [MSPredicateTranslator visitPredicates:predicate.subpredicates\n                                           withOperator:operator\n                                       useInfixNotation:useInfixNotation];\n    }\n    \n    return result;\n}\n\n+(NSComparisonPredicate *) replacementPredicateForCaseInsensitivePredicate:(NSComparisonPredicate *)predicate\n{\n    NSExpression *newRightExpression =\n    [NSExpression expressionForFunction:toLowerFunction\n                              arguments:@[predicate.rightExpression]];\n    \n    NSExpression *newLeftExpression =\n    [NSExpression expressionForFunction:toLowerFunction\n                              arguments:@[predicate.leftExpression]];\n    \n    NSPredicate *replacementPredicate =\n    [NSComparisonPredicate predicateWithLeftExpression:newLeftExpression\n                                      rightExpression:newRightExpression\n                                      modifier:predicate.comparisonPredicateModifier\n                                      type:predicate.predicateOperatorType\n                                      options:predicate.options];\n    \n    return (NSComparisonPredicate *)replacementPredicate;\n}\n\n+(NSPredicate *) replacementPredicateForInPredicate:(NSComparisonPredicate *)predicate\n{\n    NSMutableArray *subPredicates = [NSMutableArray array];\n    \n    // The rightExpression will be an array of expressions/items. For each\n    // of these expressions/items we will build an equals predicate and then\n    // 'or' together all of these subpredicates in order to replace this\n    // 'IN' predicate\n    NSExpression *rightExpression = predicate.rightExpression;\n    NSExpression *leftExpression = predicate.leftExpression;\n    \n    // ConstantValue will be an array in this case\n    for (id item in rightExpression.constantValue) {\n        \n        // The new right-side expression we are going to build\n        NSExpression *newRightExpression = [MSPredicateTranslator ensureExpression:item];\n        \n        // Build the equals-to predicate and add it to the array of subPredicates\n        NSPredicate *subPredicate =\n        [NSComparisonPredicate predicateWithLeftExpression:leftExpression\n                               rightExpression:newRightExpression\n                               modifier:predicate.comparisonPredicateModifier\n                               type:NSEqualToPredicateOperatorType\n                               options:predicate.options];\n    \n        [subPredicates addObject:subPredicate];\n    }\n    \n    // Return the or'd compound of all of the sub predicates.\n    return [NSCompoundPredicate orPredicateWithSubpredicates:subPredicates];\n}\n\n+(NSPredicate *) replacementPredicateForBetweenPredicate:(NSComparisonPredicate *)predicate\n{\n    NSMutableArray *subPredicates = [NSMutableArray array];\n    \n    // The rightExpression will be an array of 2 expressions/items. For the\n    // first we will build a greater than or equals predicate and for the second\n    // we will build a less than or equals predicate. Lastly, we will 'and'\n    // together these two subpredicates in order to replace this\n    // 'BETWEEN' predicate\n    NSExpression *rightExpression = predicate.rightExpression;\n    NSExpression *leftExpression = predicate.leftExpression;\n    \n    // First, we'll get the lower and upper bounds\n    NSArray *bounds = rightExpression.constantValue;\n    id lowerBound = [bounds objectAtIndex:0];\n    id upperBound = [bounds objectAtIndex:1];\n    \n    // If variable subsitution was used, the items might be actual values instead\n    // of Expressions, so we need to ensure they are expressions\n    NSExpression *lowerBoundExpression = [MSPredicateTranslator ensureExpression:lowerBound];\n    NSExpression *upperBoundExpression = [MSPredicateTranslator ensureExpression:upperBound];\n    \n    // We'll create the lower bound predicate (greater or equal)\n    NSPredicate *lowerSubPredicate =\n        [NSComparisonPredicate predicateWithLeftExpression:leftExpression\n                                           rightExpression:lowerBoundExpression\n                                                  modifier:predicate.comparisonPredicateModifier\n                                                      type:NSGreaterThanOrEqualToPredicateOperatorType\n                                                   options:predicate.options];\n    [subPredicates addObject:lowerSubPredicate];\n    \n    // We'll create the upper bound predicate (less or equal)\n    NSPredicate *upperSubPredicate =\n        [NSComparisonPredicate predicateWithLeftExpression:leftExpression\n                                       rightExpression:upperBoundExpression\n                                              modifier:predicate.comparisonPredicateModifier\n                                                  type:NSLessThanOrEqualToPredicateOperatorType\n                                               options:predicate.options];\n    [subPredicates addObject:upperSubPredicate];\n    \n    // Return the and'd compound of all of the sub predicates.\n    return [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];\n}\n\n+(NSExpression *) ensureExpression:(id) item\n{\n    NSExpression *expression;\n    \n    // If variable substitution was used, we can get items that are\n    // not expressions but need to be for predicate re-writing purposes.\n    if ([item isKindOfClass:[NSExpression class]]) {\n        expression = item;\n    }\n    else {\n        expression = [NSExpression expressionForConstantValue:item];\n    }\n    \n    return expression;\n}\n\n\n#pragma mark * Private Visit Expression Methods\n\n\n+(NSString *) visitExpression:(NSExpression *)expression\n{\n    NSString *result = nil;\n    \n    switch (expression.expressionType)\n    {\n        case NSConstantValueExpressionType:\n            result = [MSPredicateTranslator visitConstant:expression.constantValue];\n            break;\n        case NSKeyPathExpressionType:\n            result = expression.keyPath;\n            break;\n        case NSFunctionExpressionType:\n            result = [MSPredicateTranslator visitFunction:expression.function\n                                            withArguments:expression.arguments];\n            break;\n        case NSEvaluatedObjectExpressionType:\n        case NSVariableExpressionType:\n        case NSAggregateExpressionType:\n        case NSSubqueryExpressionType:\n        case NSUnionSetExpressionType:\n        case NSIntersectSetExpressionType:\n        case NSMinusSetExpressionType:\n        case NSBlockExpressionType:\n        default:\n            // Not supported so result remains nil\n            break;\n    }\n    \n    return result;\n}\n\n+(NSString *) visitExpressions:(NSArray *)expressions\n                 withOperator:(NSString *)operator\n             useInfixNotation:(BOOL)useInfix\n{\n    NSMutableString *result = [NSMutableString string];\n    \n    // Determine the strings to use depending on infix or prefix notation\n    NSString *openParenthesesString = (useInfix) ?\n    openParentheses :\n    [NSString stringWithFormat:operatorOpenParentheses, operator];\n    \n    NSString *expressionSeparatorString = (useInfix) ?\n    [NSString stringWithFormat:operatorWhitespace, operator] :\n    comma;\n    \n    // Start with the open parentheses string\n    [result appendString:openParenthesesString];\n    \n    // Iterate through the expressions\n    BOOL firstExpression = YES;\n    for (NSExpression *expression in expressions) {\n        \n        if (!firstExpression) {\n            [result appendString:expressionSeparatorString];\n        }\n        firstExpression = NO;\n        \n        NSString *subResult = [MSPredicateTranslator visitExpression:expression];\n        if (!subResult) {\n            result = nil;\n            break;\n        }\n        else {\n            [result appendString:subResult];\n        }\n    }\n    \n    // Close the parentheses\n    [result appendString:closeParentheses];\n    \n    return result;\n}\n\n+(NSString *) visitFunction:(NSString *)function\n              withArguments:(NSArray *)arguments\n{\n    NSString *result = nil;\n    \n    // There are a lot of NSPRedicate functions we don't support because\n    // the query string syntax doesn't have equivalents.\n    NSDictionary *functionInfos = [MSPredicateTranslator functionInfoLookup];\n    \n    // Get info about how to translate the function\n    NSArray *functionInfo = [functionInfos objectForKey:function];\n    if (functionInfo) {\n                      \n        // Get the operator and the use of infixNotation\n        NSString *operator = [functionInfo objectAtIndex:0];\n        BOOL useInfixNotation = [[functionInfo objectAtIndex:1] boolValue];\n        \n        result = [MSPredicateTranslator visitExpressions:arguments\n                                            withOperator:operator\n                                        useInfixNotation:useInfixNotation];\n    }\n    \n    return result;\n}\n\n+(NSString *) visitConstant:(id)constant\n{\n    NSString *result = nil;\n    \n    // The constant can be a nil/null, so check that first\n    if (constant == nil || constant == [NSNull null]) {\n        result = nullConstant;\n    }\n    else if ([constant isKindOfClass:[NSString class]]) {\n        result = [MSPredicateTranslator visitStringConstant:constant];\n    }\n    else if ([constant isKindOfClass:[MSDateOffset class]]) {\n        result = [MSPredicateTranslator visitDateOffsetConstant:constant];\n    }\n    else if ([constant isKindOfClass:[NSDate class]]) {\n        result = [MSPredicateTranslator visitDateConstant:constant];\n    }\n    else if ([constant isKindOfClass:[NSDecimalNumber class]]) {\n        const NSDecimal decimal = [constant decimalValue];\n        result = [NSString stringWithFormat:decimalConstant,\n                  NSDecimalString(&decimal, nil)];\n    }\n    else if ([constant isKindOfClass:[NSNumber class]]) {\n        // Except for decimals, all number types and bools will be this case\n        result = [MSPredicateTranslator visitNumberConstant:constant];\n    }\n    else if ([constant isKindOfClass:[NSUUID class]]) {\n        result = [MSPredicateTranslator visitGuidConstant:constant];\n    }\n    \n    return result;\n}\n\n+(NSString *) visitStringConstant:(NSString *)string\n{\n    string = [string stringByReplacingOccurrencesOfString:@\"'\" withString:@\"''\"];\n    return [NSString stringWithFormat:stringConstant, string];\n}\n\n+(NSString *) visitDateConstant:(NSDate *)date\n{\n    NSString *result = nil;\n    \n    // Get the formatter\n    MSNaiveISODateFormatter *formatter =\n    [MSNaiveISODateFormatter naiveISODateFormatter];\n    \n    // Try to get a formatted date as a string\n    NSString *dateString = [formatter stringFromDate:date];\n    \n    if (dateString) {\n        result = [NSString stringWithFormat:dateTimeConstant, dateString];\n    }\n    \n    return result;\n}\n\n+(NSString *) visitDateOffsetConstant:(MSDateOffset *)dateOffset\n{\n    NSString *result = nil;\n    \n    // Get the formatter\n    MSNaiveISODateFormatter *formatter =\n    [MSNaiveISODateFormatter naiveISODateFormatter];\n    \n    // Try to get a formatted date as a string\n    NSString *dateString = [formatter stringFromDate:dateOffset.date];\n    \n    if (dateString) {\n        result = [NSString stringWithFormat:dateTimeOffsetConstant, dateString];\n    }\n    \n    return result;\n}\n\n+(NSString *) visitNumberConstant:(NSNumber *)number\n{\n    NSString *result = nil;\n    \n    // We need to determine the c-language type of the number in order\n    // to properly format it\n    const char *cType = [number objCType];\n    \n    // 64-bit [NSNumber numberWithBool:] returns 'c' (char) and don't match the BOOL encode of 'B'\n    if (strcmp(@encode(BOOL), cType) == 0 || strcmp(@encode(char), cType) == 0) {\n        result = [number boolValue] ? trueConstant : falseConstant;\n    }\n    else if(strcmp(@encode(int), cType) == 0) {\n        // 32-bit integers don't have a suffix so just the number string works\n        result = [NSString stringWithFormat:intConstant, [number intValue]];\n    }\n    else if(strcmp(@encode(double), cType) == 0) {\n        result = [NSString stringWithFormat:doubleConstant, [number doubleValue]];\n    }\n    else if(strcmp(@encode(float), cType) == 0) {\n        result = [NSString stringWithFormat:floatConstant, [number floatValue]];\n    }\n    else if(strcmp(@encode(long long), cType) == 0) {\n        result = [NSString stringWithFormat:longLongConstant, [number longLongValue]];\n    }\n    else if(strcmp(@encode(long), cType) == 0) {\n        result = [NSString stringWithFormat:longConstant, [number longValue]];\n    } \n\n    return result;\n}\n\n+(NSString *) visitGuidConstant:(NSUUID *) guid\n{\n    return [NSString stringWithFormat:guidConstant, guid.UUIDString];\n}\n\n+(NSDictionary *) functionInfoLookup\n{\n    if (staticFunctionInfoLookup == nil) {\n        \n        // Value is an array with (1) the operator function name, (2)\n        // a bool that indicates if the function uses infix\n        // notation\n        staticFunctionInfoLookup = @{\n            addFunction : @[ addOperator, @(YES)],\n            subFunction : @[ subOperator, @(YES)],\n            mulFunction : @[ mulOperator, @(YES)],\n            divFunction : @[ divOperator, @(YES)],\n            modFunction : @[ modOperator, @(YES)],\n            ceilingFunction : @[ ceilingOperator, @(NO)],\n            floorFunction : @[ floorOperator, @(NO)],\n            toUpperFunction : @[ toUpperOperator, @(NO)],\n            toLowerFunction : @[ toLowerOperator, @(NO)],\n        };\n    }\n    \n    return  staticFunctionInfoLookup;\n}\n\n\n#pragma mark * NSError Generation Methods\n\n\n+(NSError *) errorForUnsupportedPredicate\n{\n    NSString *description = NSLocalizedString(@\"The predicate is not supported.\", nil);\n    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey :description };\n    \n    return [NSError errorWithDomain:MSErrorDomain\n                               code:MSPredicateNotSupported\n                           userInfo:userInfo];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSPullSettings.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n/// Settings that control the pull behavior\n@interface MSPullSettings : NSObject\n\n#pragma mark * Initializer method(s)\n\n///@name Initializing the MSPullSettings object\n///@{\n\n/// Initializes the MSPullSettings object with the specified page size\n- (instancetype)initWithPageSize:(NSInteger)pageSize;\n\n///}\n\n#pragma mark * Properties\n\n///@name Properties that control pull behavior\n///@{\n\n/// Size of pages requested from the server while performing a pull\n@property (nonatomic) NSInteger pageSize;\n\n///@}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSPullSettings.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n//#import \"MSPullSettings.h\"\n#import \"MSPullSettingsInternal.h\"\n\n#pragma mark * MSPullSettings Implementation\n\n@implementation MSPullSettings\n\nstatic NSInteger const MSDefaultPageSize = 50;\n\n#pragma mark * Initializer method(s)\n\n- (instancetype)init {\n    return [self initWithPageSize:MSDefaultPageSize];\n}\n\n- (instancetype)initWithPageSize:(NSInteger)pageSize {\n\n    self = [super init];\n    \n    if (self) {\n        _pageSize = [MSPullSettings validatedPageSizeFromPageSize:pageSize];\n    }\n    \n    return self;\n}\n\n#pragma mark * Accessor method(s)\n\n- (void)setPageSize:(NSInteger)pageSize {\n    _pageSize = [MSPullSettings validatedPageSizeFromPageSize:pageSize];\n}\n\n#pragma mark * Internal method(s)\n\n+ (NSInteger)defaultPageSize {\n    return MSDefaultPageSize;\n}\n\n#pragma mark * Private methods\n\n+ (NSInteger)validatedPageSizeFromPageSize:(NSInteger)pageSize {\n    return pageSize > 0 ? pageSize : MSDefaultPageSize;\n}\n\n@end\n\n"
  },
  {
    "path": "sdk/iOS/src/MSPullSettingsInternal.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSPullSettings.h\"\n\n@interface MSPullSettings()\n\n#pragma mark * Methods\n\n///@name Methods\n///@{\n\n+ (NSInteger) defaultPageSize;\n\n///@}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSPush.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n\n#pragma  mark * MSClient Public Interface\n\n@interface MSPush : NSObject\n\n#pragma  mark * Public Initializer Methods\n\n///@name Initializing the MSPush Object\n///@{\n\n/// Initialize the *MSPush* instance with given *MSClient*\n- (MSPush *)initWithClient:(MSClient *)client;\n\n/// @}\n\n#pragma  mark * Public Native Registration Methods\n\n/// @name Working with Native Registrations\n/// @{\n\n/// Register for notifications with given deviceToken and tags. deviceToken is required.\n- (void)registerNativeWithDeviceToken:(NSData *)deviceToken\n                                 tags:(NSArray *)tags\n                           completion:(MSCompletionBlock)completion;\n\n/// Unregister for native notififications.\n- (void)unregisterNativeWithCompletion:(MSCompletionBlock)completion;\n\n/// @}\n\n#pragma  mark * Public Template Registration Methods\n\n/// @name Working with Template Registrations\n/// @{\n\n/// Register for template notififications. deviceToken, name and bodyTemplate are required.\n/// See http://go.microsoft.com/fwlink/?LinkId=401137 for furthur details.\n- (void)registerTemplateWithDeviceToken:(NSData *)deviceToken\n                                   name:(NSString *)name\n                       jsonBodyTemplate:(NSString *)bodyTemplate\n                         expiryTemplate:(NSString *)expiryTemplate\n                                   tags:(NSArray *)tags\n                             completion:(MSCompletionBlock)completion;\n\n/// Unregister for tempalte notifications. name is required.\n- (void)unregisterTemplateWithName:(NSString *)name\n                        completion:(MSCompletionBlock)completion;\n\n/// @}\n\n#pragma  mark * Public Unregister All Registration Methods\n\n/// @name Debug utilities--Unregistering All Registrations\n/// @{\n\n/// Unregister for all native and template registrations. deviceToken is required.\n/// NOT RECOMMENDED FOR USE IN PRODUCTION APPLICATON.\n- (void)unregisterAllWithDeviceToken:(NSData *)deviceToken\n                          completion:(MSCompletionBlock)completion;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSPush.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSPush.h\"\n#import \"MSRegistrationManager.h\"\n#import \"MSLocalStorage.h\"\n\n@interface MSPush ()\n@property (nonatomic, strong, readonly) MSRegistrationManager *registrationManager;\n@end\n\n#pragma mark * MSPush Implementation\n\n@implementation MSPush\n\n#pragma  mark * Public Initializer Methods\n\n- (MSPush *)initWithClient:(MSClient *)client\n{\n    self = [super init];\n    \n    if (self) {\n        _registrationManager = [[MSRegistrationManager alloc] initWithClient:client];\n    }\n    \n    return self;\n}\n\n#pragma  mark * Public Native Registration Methods\n\n- (void)registerNativeWithDeviceToken:(NSData *)deviceToken\n                                 tags:(NSArray *)tags\n                           completion:(MSCompletionBlock)completion\n{\n    if (!deviceToken) {\n        if (completion) {\n            completion([self errorForMissingParameterWithParameterName:@\"deviceToken\"]);\n        }\n        return;\n    }\n    \n    NSMutableDictionary *registration = [self createBaseRegistration:deviceToken\n                                                                tags:tags];\n    [self.registrationManager upsertRegistration:registration\n                                      completion:completion];\n}\n\n- (void) unregisterNativeWithCompletion:(MSCompletionBlock)completion\n{\n    [self.registrationManager deleteRegistrationWithName:MSNativeRegistrationName\n                                              completion:completion];\n}\n\n#pragma  mark * Public Template Registration Methods\n\n- (void)registerTemplateWithDeviceToken:(NSData *)deviceToken\n                                   name:(NSString *)name\n                       jsonBodyTemplate:(NSString *)bodyTemplate\n                         expiryTemplate:(NSString *)expiryTemplate\n                                   tags:(NSArray *)tags\n                             completion:(MSCompletionBlock)completion\n{\n    if (!deviceToken) {\n        if (completion) {\n            completion([self errorForMissingParameterWithParameterName:@\"deviceToken\"]);\n        }\n        return;\n    }\n    \n    if (!name) {\n        if (completion) {\n            completion([self errorForMissingParameterWithParameterName:@\"name\"]);\n        }\n        return;\n    }\n    \n    if (!bodyTemplate) {\n        if (completion) {\n            completion([self errorForMissingParameterWithParameterName:@\"bodyTemplate\"]);\n        }\n        return;\n    }\n    \n    NSMutableDictionary *registration = [self createBaseRegistration:deviceToken\n                                                                tags:tags];\n    [registration setValue:name forKey:@\"templateName\"];\n    [registration setValue:bodyTemplate forKey:@\"templateBody\"];\n    [registration setValue:expiryTemplate forKey:@\"expiry\"];\n    \n    [self.registrationManager upsertRegistration:registration\n                                      completion:completion];\n}\n\n- (void) unregisterTemplateWithName:(NSString *)name completion:(MSCompletionBlock)completion\n{\n    if (!name) {\n        if (completion) {\n            completion([self errorForMissingParameterWithParameterName:@\"name\"]);\n        }\n        return;\n    }\n    \n    [self.registrationManager deleteRegistrationWithName:name\n                              completion:completion];\n}\n\n#pragma  mark * Public Unregister All Registration Methods\n\n- (void) unregisterAllWithDeviceToken:(NSData *)deviceToken completion:(MSCompletionBlock)completion\n{\n    if (!deviceToken) {\n        if (completion) {\n            completion([self errorForMissingParameterWithParameterName:@\"deviceToken\"]);\n        }\n        return;\n    }\n    \n    [self.registrationManager deleteAllWithDeviceToken:[self convertDeviceToken:deviceToken]\n                                                      completion:completion];\n}\n\n#pragma  mark * Private Methods\n\n- (NSString *)convertDeviceToken:(NSData *)deviceTokenData\n{\n    NSCharacterSet *hexFormattingCharacters = [NSCharacterSet characterSetWithCharactersInString:@\"<>\"];\n    NSString* newDeviceToken = [[[[deviceTokenData description]\n                                 stringByTrimmingCharactersInSet:hexFormattingCharacters]\n                                stringByReplacingOccurrencesOfString:@\" \" withString:@\"\"]\n                                uppercaseString];\n    return newDeviceToken;\n}\n\n- (NSMutableDictionary *)createBaseRegistration:(NSData *)deviceToken\n                                           tags:(NSArray *)tags\n{\n    NSMutableDictionary *registration = [[NSMutableDictionary alloc] init];\n    [registration setValue:[self convertDeviceToken:deviceToken] forKey:@\"deviceId\"];\n    if (tags) {\n        [registration setValue:tags forKey:@\"tags\"];\n    }\n    [registration setValue:@\"apns\" forKey:@\"platform\"];\n    return registration;\n}\n\n-(NSError *) errorForMissingParameterWithParameterName:(NSString *)parameterName\n{\n    NSString *descriptionKey = @\"'%@' is a required parameter.\";\n    NSString *descriptionFormat = NSLocalizedString(descriptionKey, nil);\n    NSString *description = [NSString stringWithFormat:descriptionFormat, parameterName];\n    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey :description };\n    \n    return [NSError errorWithDomain:MSErrorDomain\n                               code:MSPushRequiredParameter\n                           userInfo:userInfo];\n}\n\n@end"
  },
  {
    "path": "sdk/iOS/src/MSPushHttp.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClientConnection.h\"\n#import \"MSPush.h\"\n\ntypedef void (^MSCreateRegistrationIdBlock)(NSString *registrationId, NSError *error);\ntypedef void (^MSListRegistrationsBlock)(NSArray *registrations, NSError *error);\n\n@interface MSPushHttp : NSObject\n\n/// Initialize an MSPushHttp instance with the specified MSClient.\n- (MSPushHttp *)initWithClient:(MSClient *)client;\n\n/// Make the http call to create a registrationId.\n- (void)createRegistrationId:(MSCreateRegistrationIdBlock)completion;\n\n/// Make the http call to upsert a registration.\n- (void)upsertRegistration:(NSDictionary *)registration\n                completion:(MSCompletionBlock)completion;\n\n/// Make the http call to retrieve registrations for the specified deviceToken.\n- (void)registrationsForDeviceToken:(NSString *)deviceToken\n               completion:(MSListRegistrationsBlock)completion;\n\n/// Make the http call to delete the registration having specified registrationId.\n- (void)deleteRegistrationById:(NSString *)registrationId\n                completion:(MSCompletionBlock)completion;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSPushHttp.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSPushRequest.h\"\n#import \"MSPushHttp.h\"\n#import \"MSClientInternal.h\"\n\n@interface MSPushHttp ()\n@property (nonatomic, weak, readonly) MSClient *client;\n@end\n    \n@implementation MSPushHttp\n\n- (MSPushHttp *)initWithClient:(MSClient *)client\n{\n    self = [super init];\n    \n    if (self) {\n        _client = client;\n    }\n    \n    return self;\n}\n\n- (void)createRegistrationId:(MSCreateRegistrationIdBlock)completion\n{\n    NSURL *url = [self.client.applicationURL URLByAppendingPathComponent:@\"push/registrationids\"];\n    MSPushRequest *request = [[MSPushRequest alloc] initWithURL:url\n                                                               data:nil\n                                                         HTTPMethod:@\"POST\"];\n\n    __block MSClientConnection *connection = nil;\n    \n    MSResponseBlock responseCompletion = nil;\n    if (completion) {\n        \n        responseCompletion =\n        ^(NSHTTPURLResponse *response, NSData *data, NSError *error)\n        {\n            NSString *registrationId = nil;\n            \n            if (!error) {\n                [connection isSuccessfulResponse:response\n                                            data:data\n                                         orError:&error];\n                if (!error) {\n                    registrationId = response.allHeaderFields[@\"Location\"];\n                    NSRange stringLocation = [registrationId rangeOfString:@\"/\" options:(NSBackwardsSearch)];\n                    registrationId = [registrationId substringFromIndex:stringLocation.location + 1];\n                }\n            } else {\n                [connection addRequestAndResponse:response toError:&error];\n            }\n            \n            connection = nil;\n            \n            if (completion) {\n                completion(registrationId, error);\n            }\n        };\n    }\n    \n    connection = [[MSClientConnection alloc]\n                  initWithRequest:request\n                  client:self.client\n                  completion:responseCompletion];\n    \n    [connection start];\n}\n\n- (void)upsertRegistration:(NSMutableDictionary *)registration\n                completion:(MSCompletionBlock)completion\n{\n    NSString *registrationId = registration[@\"registrationId\"];\n    NSString *urlPath =[NSString stringWithFormat:@\"push/registrations/%@\", registrationId];\n    NSURL *url = [self.client.applicationURL URLByAppendingPathComponent:urlPath];\n    [registration removeObjectForKey:@\"registrationId\"];\n    \n    NSString *name = registration[@\"name\"];\n    [registration removeObjectForKey:@\"name\"];\n    \n    NSError *error = nil;\n    NSData *data = [NSJSONSerialization dataWithJSONObject:registration options:0 error:&error];\n    \n    MSPushRequest *request = [[MSPushRequest alloc] initWithURL:url\n                                                               data:data\n                                                         HTTPMethod:@\"PUT\"];\n    \n    __block MSClientConnection *connection = nil;\n\n    MSResponseBlock responseCompletion = nil;\n    if (completion) {\n        responseCompletion =\n        ^(NSHTTPURLResponse *response, NSData *data, NSError *error)\n        {\n            [registration setValue:name forKey:@\"name\"];\n            [registration setValue:registrationId forKey:@\"registrationId\"];\n            \n            if (!error) {\n                [connection isSuccessfulResponse:response\n                                            data:data\n                                         orError:&error];\n            } else {\n                [connection addRequestAndResponse:response toError:&error];\n            }\n            \n            connection = nil;\n            \n            if (completion) {\n                completion(error);\n            }\n        };\n    }\n    \n    connection = [[MSClientConnection alloc]\n                  initWithRequest:request\n                  client:self.client\n                  completion:responseCompletion];\n    \n    [connection start];\n}\n\n- (void)registrationsForDeviceToken:(NSString *)deviceToken\n               completion:(MSListRegistrationsBlock)completion\n{\n    NSString *queryAndUrlPath = [NSString stringWithFormat:@\"push/registrations?deviceId=%@&platform=apns\", deviceToken];\n    NSURL *url = [self.client.applicationURL URLByAppendingPathComponent:queryAndUrlPath];\n    \n    MSPushRequest *request = [[MSPushRequest alloc] initWithURL:url\n                                                               data:nil\n                                                         HTTPMethod:@\"GET\"];\n    \n    __block MSClientConnection *connection = nil;\n    \n    MSResponseBlock responseCompletion = nil;\n    if (completion) {\n        responseCompletion =\n        ^(NSHTTPURLResponse *response, NSData *data, NSError *error)\n        {\n            NSArray *registrations = nil;\n            \n            if (!error) {\n                [connection isSuccessfulResponse:response\n                                            data:data\n                                         orError:&error];\n                \n                if (!error) {\n                    registrations = [self.client.serializer arrayFromData:data orError:&error];\n                }\n            } else {\n                [connection addRequestAndResponse:response toError:&error];\n            }\n            \n            completion(registrations, error);\n            connection = nil;\n        };\n    }\n    \n    connection = [[MSClientConnection alloc]\n                  initWithRequest:request\n                  client:self.client\n                  completion:responseCompletion];\n    \n    [connection start];\n}\n\n- (void)deleteRegistrationById:(NSString *)registrationId\n                completion:(MSCompletionBlock)completion\n{\n    NSString *urlPath = [NSString stringWithFormat:@\"push/registrations/%@\", registrationId];\n    NSURL *url = [self.client.applicationURL URLByAppendingPathComponent:urlPath];\n    \n    MSPushRequest *request = [[MSPushRequest alloc] initWithURL:url\n                                                               data:nil\n                                                         HTTPMethod:@\"DELETE\"];\n    \n    __block MSClientConnection *connection = nil;\n    \n    MSResponseBlock responseCompletion = nil;\n    if (completion) {\n        responseCompletion =\n        ^(NSHTTPURLResponse *response, NSData *data, NSError *error)\n        {\n            if (!error) {\n                [connection isSuccessfulResponse:response\n                                            data:data\n                                         orError:&error];\n            } else {\n                [connection addRequestAndResponse:response toError:&error];\n            }\n            \n            completion(error);\n            connection = nil;\n        };\n    }\n    \n    connection = [[MSClientConnection alloc]\n                  initWithRequest:request\n                  client:self.client\n                  completion:responseCompletion];\n    \n    [connection start];\n}\n\n@end"
  },
  {
    "path": "sdk/iOS/src/MSPushRequest.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n\n@interface MSPushRequest : NSMutableURLRequest\n\n/// Initialize an MSPushRequest with url, data and method.\n- (MSPushRequest *)initWithURL:(NSURL *)url\n                          data:(NSData *)data\n                    HTTPMethod:(NSString *)method;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSPushRequest.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSPushRequest.h\"\n#import \"MSURLBuilder.h\"\n\n#pragma mark * MSPushRequest Implementation\n@implementation MSPushRequest\n\n#pragma mark * Private Static Constructors\n- (MSPushRequest *)initWithURL:(NSURL *)url\n                          data:(NSData *)data\n                    HTTPMethod:(NSString *)method\n{\n    // Create the request\n    MSPushRequest *request = [[MSPushRequest alloc] initWithURL:url];\n    \n    // Set the method and headers\n    request.HTTPMethod = [method uppercaseString];\n\n    request.HTTPBody = data;\n    \n    return request;\n}\n\n#pragma mark * Private Initializer Method\n\n- (id)initWithURL:(NSURL *)url\n{\n    self = [super initWithURL:url];\n    \n    return self;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSQuery.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSTable.h\"\n#import \"MSSyncTable.h\"\n\n#pragma mark * MSQuery Public Interface\n\n/// The *MSQuery* class represents a query that can be configured and then\n/// executed against a table of a Microsoft Azure Mobile Service. The query is\n/// serialized as a query string in the URL of the request. A query can be\n/// configured and then sent to the Microsoft Azure Mobile Service using the\n/// *readOnSuccess:onError:* method. *MSQuery* instances can be modfied and\n/// reused, but are not threadsafe.\n@interface MSQuery : NSObject <NSCopying>\n\n#pragma mark * Public Initializer Methods\n\n///@name Initializing the MSQuery object\n///@{\n\n/// Initializes a *MSQuery* instance with the given table.\n-(id)initWithTable:(MSTable *)table;\n\n/// Returns a new *MSQuery* instance with the given table and the given\n/// predicate is used as the filter clause of the query.\n-(id)initWithTable:(MSTable *)table predicate:(NSPredicate *)predicate;\n\n/// Initializes a *MSQuery* instance with the given table.\n-(id)initWithSyncTable:(MSSyncTable *)table;\n\n/// Returns a new *MSQuery* instance with the given table and the given\n/// predicate is used as the filter clause of the query.\n-(id)initWithSyncTable:(MSSyncTable *)table predicate:(NSPredicate *)predicate;\n\n///@}\n\n///@name Modifying the Query\n///@{\n\n#pragma mark * Public ReadWrite Properties\n\n/// The predicate used as the filter clause of the query.\n@property (nonatomic) NSPredicate *predicate;\n\n/// The maximum number of items to return from the query.\n@property (nonatomic) NSInteger fetchLimit;\n\n/// The offset from the initial item to use when returning items from a query.\n/// Can be used with *fetchLimit* to implement paging.\n@property (nonatomic) NSInteger fetchOffset;\n\n/// The array of NSSortDescriptors used to order the query results\n@property (nonatomic, copy) NSArray *orderBy;\n\n/// Indicates if the Microsoft Azure Mobile Service should also include the total\n/// count of items on the server (not just the count of items returned) with\n/// the query results.\n@property (nonatomic) BOOL includeTotalCount;\n\n/// A dictionary of string key-value pairs that can include user-defined\n/// parameters to use with the query.\n@property (nonatomic, retain) NSDictionary *parameters;\n\n/// The fields or keys of an item that should be included in the results. A\n/// value of \"*\" means all fields should be included. \"*\" is the default value\n/// if no select keys are specified.\n@property (nonatomic, retain) NSArray *selectFields;\n\n#pragma mark * Public OrderBy Methods\n/// Indicates that the query results should be returned in ascending order\n/// based on the given field. *orderByAscending:* and *orderByDescending:* can\n/// each be called multiple times to further specify how the query results\n/// should be ordered.\n-(void)orderByAscending:(NSString *)field;\n\n/// Indicates that the query results should be returned in descending order\n/// based on the given field. *orderByAscending:* and *orderByDescending:* can\n/// each be called multiple times to further specify how the query results\n/// should be ordered.\n-(void)orderByDescending:(NSString *)field;\n\n\n///@}\n\n\n\n#pragma mark * Public Read Methods\n///@name Executing the query\n///@{\n\n/// Executes the query by sending a request to the Microsoft Azure Mobile Service.\n-(void)readWithCompletion:(MSReadQueryBlock)completion;\n\n///@}\n\n///@name Properties\n///@{\n\n#pragma mark * Public QueryString Methods\n\n/// Generates a query string for current state of the *MSQuery* instance or an\n/// error if the query string could not be generated.\n-(NSString *)queryStringOrError:(NSError **)error;\n\n\n#pragma mark * Public Readonly Properties\n\n/// The table associated with this query.\n@property (nonatomic, strong)         MSTable *table;\n@property (nonatomic, strong)         MSSyncTable *syncTable;\n///@}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSQuery.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSQuery.h\"\n#import \"MSPredicateTranslator.h\"\n#import \"MSURLBuilder.h\"\n#import \"MSSyncContextInternal.h\"\n#import \"MSTableInternal.h\"\n\n#pragma mark * MSQuery Implementation\n\n\n@implementation MSQuery\n\n@synthesize table = table_;\n@synthesize syncTable = syncTable_;\n@synthesize fetchLimit = fetchLimit_;\n@synthesize fetchOffset = fetchOffset_;\n@synthesize includeTotalCount = includeTotalCount_;\n@synthesize parameters = parameters_;\n@synthesize selectFields = selectFields_;\n@synthesize predicate = predicate_;\n@synthesize orderBy = orderBy_;\n\n\n#pragma mark * Public Initializer Methods\n\n\n-(id) initWithTable:(MSTable *)table;\n{\n    return [self initWithTable:table predicate:nil];\n}\n\n-(id) initWithTable:(MSTable *)table predicate:(NSPredicate *)predicate\n{\n    return [self initWithAnyTable:table predicate:predicate];\n}\n\n-(id) initWithSyncTable:(MSSyncTable *)table;\n{\n    return [self initWithSyncTable:table predicate:nil];\n}\n\n-(id) initWithSyncTable:(MSSyncTable *)table predicate:(NSPredicate *)predicate\n{\n    return [self initWithAnyTable:table predicate:predicate];\n}\n\n- (id) initWithAnyTable:(id)table predicate:(NSPredicate *)predicate\n{\n    self = [super init];\n    if (self)\n    {\n        if ([table isKindOfClass:[MSSyncTable class]]) {\n            syncTable_ = table;\n        } else {\n            table_ = table;\n        }\n        \n        predicate_ = predicate;\n        fetchLimit_ = -1;\n        fetchOffset_ = -1;\n    }\n    return self;\n}\n\n#pragma mark * Public OrderBy Methods\n\n\n-(void) orderByAscending:(NSString *)field\n{\n    [self orderBy:field isAscending:YES];\n}\n\n-(void) orderByDescending:(NSString *)field\n{\n    [self orderBy:field isAscending:NO];\n}\n\n\n#pragma mark * Public Read Methods\n\n\n-(void) readWithCompletion:(MSReadQueryBlock)completion;\n{\n    return [self readInternalWithFeatures:MSFeatureNone completion:completion];\n}\n\n\n#pragma mark * Private Methods\n\n-(void)readInternalWithFeatures:(MSFeatures)features completion:(MSReadQueryBlock)completion {\n    // Get the query string\n    NSError *error = nil;\n    \n    features |= MSFeatureTableReadQuery;\n\n    // query execution logic depends on if its against a sync or remote table\n    if (self.syncTable != nil) {\n        [self.syncTable.client.syncContext readWithQuery:self completion:completion];\n    } else {\n        NSString *queryString = [self queryStringOrError:&error];\n        \n        if (!queryString) {\n            // Query string is invalid, so call error handler\n            if (completion) {\n                completion(nil, error);\n            }\n        }\n        else {\n            // Call read with the query string\n            [self.table readWithQueryStringInternal:queryString features:features completion:completion];\n        }\n    }\n}\n\n-(void) orderBy:(NSString *)field isAscending:(BOOL)isAscending\n{\n    NSAssert(field != nil, @\"'field' can not be nil.\");\n    \n    NSMutableArray *currentOrderBy = [self.orderBy mutableCopy];\n    if (currentOrderBy == nil) {\n        currentOrderBy = [NSMutableArray array];\n    }\n    \n    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:field\n                                                           ascending:isAscending];\n\n    [currentOrderBy addObject:sort];\n    self.orderBy = currentOrderBy;\n}\n\n\n-(NSString *) queryStringOrError:(NSError **)error\n{\n    return [MSURLBuilder queryStringFromQuery:self orError:error];\n}\n\n\n#pragma mark * Overridden Methods\n\n\n-(NSString *) description\n{\n    return [self queryStringOrError:nil];\n}\n\n-(id)copyWithZone:(NSZone *)zone\n{\n    MSQuery *query = [[MSQuery allocWithZone:zone] init];\n    query.predicate = [self.predicate copyWithZone:zone];\n    query.parameters = [self.parameters copyWithZone:zone];\n    query.selectFields = [query.selectFields copyWithZone:zone];\n    query.fetchLimit = self.fetchLimit;\n    query.fetchOffset = self.fetchOffset;\n    query.orderBy = [self.orderBy copyWithZone:zone];\n    query.includeTotalCount = self.includeTotalCount;\n    \n    if (self.syncTable) {\n        query.syncTable = [[MSSyncTable alloc] initWithName:self.syncTable.name\n                                                     client:self.syncTable.client];\n    }\n    if (self.table) {\n        query.table = [[MSTable alloc] initWithName:self.table.name\n                                             client:self.table.client];\n    }\n    \n    return query;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSQueryInternal.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#include \"MSQuery.h\"\n#include \"MSSDKFeatures.h\"\n\n@interface MSQuery ()\n\n#pragma mark * Private Read Methods\n///@name Executing the query with\n///@{\n\n/// Executes the query by sending a request to the Microsoft Azure Mobile Service.\n-(void)readInternalWithFeatures:(MSFeatures)features completion:(MSReadQueryBlock)completion;\n\n///@}\n\n@end"
  },
  {
    "path": "sdk/iOS/src/MSQueryResult.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n@interface MSQueryResult : NSObject\n\n///@name Properties\n///@{\n\n/// The result from a successful read\n@property (nonatomic, strong, readonly)           NSArray *items;\n\n/// there was not an error, then the *items* array will always be non-nil\n/// If the query included a\n/// request for the total count of items on the server (not just those returned\n/// in *items* array), the *totalCount* will have this value; otherwise\n/// *totalCount* will be -1.\n@property (nonatomic, assign, readonly)         NSInteger totalCount;\n\n/// if returned from the server, it will contain the link to next page of results\n@property (nonatomic, strong, readonly)\n    NSString *nextLink;\n///@}\n\n#pragma mark * Public Initializers\n\n///@name Initializing the MSTable Object\n///@{\n\n/// Initializes an *MSTable* instance with the given name and client.\n-(id)initWithItems:(NSArray *)items\n        totalCount:(NSInteger) totalCount\n        nextLink: (NSString *) nextLink;\n\n///@}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSQueryResult.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSQueryResult.h\"\n\n@implementation MSQueryResult\n@synthesize totalCount = totalCount_;\n@synthesize items = items_;\n@synthesize nextLink = nextLink_;\n\n-(id)initWithItems:(NSArray *)items\n        totalCount:(NSInteger) totalCount\n          nextLink: (NSString *) nextLink\n{\n    self = [super init];\n    if (self) {\n        totalCount_ = totalCount;\n        items_ = items;\n        nextLink_ = nextLink;\n    }\n    \n    return self;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSQueuePullOperation.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSSyncContext.h\"\n\n@interface MSQueuePullOperation : NSOperation {\n    BOOL executing_;\n    BOOL finished_;\n}\n\n- (id) initWithSyncContext:(MSSyncContext *)syncContext\n                     query:(MSQuery *)query\n                   queryId:(NSString *)queryId\n                maxRecords:(NSInteger)maxRecords\n             dispatchQueue:(dispatch_queue_t)dispatchQueue\n             callbackQueue:(NSOperationQueue *)callbackQueue\n                completion:(MSSyncBlock)completion;\n\n@end"
  },
  {
    "path": "sdk/iOS/src/MSQueuePullOperation.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSQueuePullOperation.h\"\n#import \"MSTableOperationError.h\"\n#import \"MSSyncContextInternal.h\"\n#import \"MSClientInternal.h\"\n#import \"MSTableOperationInternal.h\"\n#import \"MSQuery.h\"\n#import \"MSSyncContext.h\"\n#import \"MSSyncContextInternal.h\"\n#import \"MSClientInternal.h\"\n#import \"MSQueryInternal.h\"\n#import \"MSNaiveISODateFormatter.h\"\n#import \"MSDateOffset.h\"\n#import \"MSTableConfigValue.h\"\n\n@interface MSQueuePullOperation()\n\n@property (nonatomic, weak)     dispatch_queue_t dispatchQueue;\n@property (nonatomic, weak)     NSOperationQueue *callbackQueue;\n@property (nonatomic, weak)     MSSyncContext *syncContext;\n@property (nonatomic, copy)     MSSyncBlock completion;\n@property (nonatomic, strong)   MSQuery* query;\n@property (nonatomic, strong)   NSString *queryId;\n@property (nonatomic)           NSInteger maxRecords;\n@property (nonatomic)           NSInteger recordsProcessed;\n@property (nonatomic)           NSInteger recordsRemaining;\n@property (nonatomic)           NSInteger originalFetchLimit;\n@property (nonatomic)           NSInteger originalFetchOffset;\n@property (nonatomic, strong)   NSDate *maxDate;\n@property (nonatomic, strong)   NSDate *deltaToken;\n@property (nonatomic, strong)   NSPredicate *originalPredicate;\n@property (nonatomic, strong)   MSTableConfigValue *deltaTokenEntity;\n\n@end\n\n@implementation MSQueuePullOperation\n\n// Initializes a Pull operation with:\n//  syncContext:    The syncContext on which to perform the pull\n//  query:          The query to use for the pull.\n//  queryId:        The id to use for identifying the deltaToken in the MS_Config table for\n//                  incremental pull. If nil, indicates that this should not be an incremental pull\n//  maxRecords:     The total number of records to pull, possibly with paging. The value of\n//                  query.fetchLimit is treated as a pageSize and maxRecords is the total number of records to pull.\n//  dispatchQueue:  The queue to use for data operations\n//  callbackQueue:  The queue to use for callbacks\n//  completion:     The block to call upon completion of the pull operations\n- (id) initWithSyncContext:(MSSyncContext *)syncContext\n                     query:(MSQuery *)query\n                   queryId:(NSString *)queryId\n                maxRecords:(NSInteger)maxRecords\n             dispatchQueue:(dispatch_queue_t)dispatchQueue\n             callbackQueue:(NSOperationQueue *)callbackQueue\n                completion:(MSSyncBlock)completion\n{\n    self = [super init];\n    if (self) {\n        _syncContext = syncContext;\n        _query = query;\n        _queryId = queryId;\n        _maxRecords = maxRecords;\n        _dispatchQueue = dispatchQueue;\n        _callbackQueue = callbackQueue;\n        _completion = [completion copy];\n        _recordsProcessed = 0;\n        _recordsRemaining = maxRecords;\n        _originalFetchLimit = query.fetchLimit;\n        _originalFetchOffset = MAX(0, query.fetchOffset);\n        _maxDate = [NSDate dateWithTimeIntervalSince1970:0.0];\n        _deltaToken = nil;\n        _originalPredicate = self.query.predicate;\n        \n        // changes fetchOffset from -1 to 0, if needed, so we always use skip(0)\n        self.query.fetchOffset = self.originalFetchOffset;\n    }\n    return self;\n}\n\n- (void) completeOperation {\n    [self willChangeValueForKey:@\"isFinished\"];\n    [self willChangeValueForKey:@\"isExecuting\"];\n    \n    executing_ = NO;\n    finished_ = YES;\n    \n    [self didChangeValueForKey:@\"isExecuting\"];\n    [self didChangeValueForKey:@\"isFinished\"];\n}\n\n// Check if the operation was cancelled and if so, begin winding down\n-(BOOL) checkIsCanceled\n{\n    if (self.isCancelled) {\n        NSError *error = [self errorWithDescription:@\"Pull cancelled\" code:MSPullAbortedUnknown];\n        if (self.completion) {\n            [self.callbackQueue addOperationWithBlock:^{\n                self.completion(error);\n            }];\n        }\n        [self completeOperation];\n    }\n    \n    return self.isCancelled;\n}\n\n-(void) start\n{\n    if (finished_) {\n        return;\n    }\n    else if (self.isCancelled) {\n        [self completeOperation];\n        return;\n    }\n    \n    [self willChangeValueForKey:@\"isExecuting\"];\n    executing_ = YES;\n    [self didChangeValueForKey:@\"isExecuting\"];\n    \n    if (self.queryId) {\n        __block NSError *localDataSourceError;\n        dispatch_sync(self.dispatchQueue, ^{\n            [self updateQueryFromDeltaTokenOrError:&localDataSourceError];\n        });\n        \n        if([self callCompletionIfError:localDataSourceError])\n        {\n            return;\n        }\n    }\n    \n    [self processPullOperation];\n}\n\n/// For a given pending table operation, create the request to send it to the remote table\n- (void) processPullOperation\n{\n    if ([self checkIsCanceled]) {\n        return;\n    }\n    \n    MSFeatures features = MSFeatureOffline;\n    \n    if (self.queryId) {\n        features |= MSFeatureIncrementalPull;\n    }\n    \n    // Read from server\n    [self.query readInternalWithFeatures:features completion:^(MSQueryResult *result, NSError *error) {\n        if ([self checkIsCanceled]) {\n            return;\n        }\n        // If error, or no results we can stop processing\n        if (error || result.items.count == 0) {\n            if (self.completion) {\n                [self.callbackQueue addOperationWithBlock:^{\n                    self.completion(error);\n                }];\n            }\n            [self completeOperation];\n            return;\n        }\n        \n        // Update our local store (we need to block inbound operations while we do this)\n        dispatch_async(self.dispatchQueue, ^{\n            if ([self checkIsCanceled]) {\n                return;\n            }\n            \n            NSError *localDataSourceError;\n            \n            // Check if have any pending ops on this table\n            NSArray *pendingOps = [self.syncContext.operationQueue getOperationsForTable:self.query.table.name item:nil];\n            \n            NSMutableArray *itemsToUpsert = [NSMutableArray array];\n            NSMutableArray *itemIdsToDelete = [NSMutableArray array];\n            \n            [result.items enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n                if (self.queryId) {\n                    self.maxDate = [self.maxDate laterDate:(NSDate *)obj[MSSystemColumnUpdatedAt]];\n                }\n                BOOL isDeleted = NO;\n                NSObject *isDeletedObj = obj[MSSystemColumnDeleted];\n                if (isDeletedObj && isDeletedObj != [NSNull null]) {\n                    isDeleted = ((NSNumber *)isDeletedObj).boolValue;\n                }\n                \n                NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"%K ==[c] %@\", @\"itemId\", obj[MSSystemColumnId]];\n                NSArray *matchingRecords = [pendingOps filteredArrayUsingPredicate:predicate];\n                \n                // we want to ignore items that have been touched since the Pull was started\n                if (matchingRecords.count == 0) {\n                    if (isDeleted) {\n                        [itemIdsToDelete addObject:obj[MSSystemColumnId]];\n                    }\n                    else {\n                        [itemsToUpsert addObject:obj];\n                    }\n                }\n            }];\n            \n            [self.syncContext.dataSource deleteItemsWithIds:itemIdsToDelete table:self.query.table.name orError:&localDataSourceError];\n            if ([self callCompletionIfError:localDataSourceError]) {\n                return;\n            }\n            \n            // upsert each item into table that isn't pending to go to the server\n            [self.syncContext.dataSource upsertItems:itemsToUpsert table:self.query.table.name orError:&localDataSourceError];\n            if ([self callCompletionIfError:localDataSourceError]) {\n                return;\n            }\n            \n            self.recordsProcessed += result.items.count;\n            self.recordsRemaining -= result.items.count;\n            \n            if (self.queryId) {\n                if (!self.deltaToken || [self.deltaToken compare:self.maxDate] == NSOrderedAscending) {\n                    // if we have no deltaToken or the maxDate has increased, store it, and requery\n                    [self upsertDeltaTokenOrError:&localDataSourceError];\n                    if([self callCompletionIfError:localDataSourceError]) {\n                        return;\n                    }\n                    \n                    self.recordsProcessed = 0;\n                    \n                    [self updateQueryFromDeltaTokenOrError:&localDataSourceError];\n                    if ([self callCompletionIfError:localDataSourceError]) {\n                        return;\n                    }\n                }\n                else {\n                    self.query.fetchOffset = self.recordsProcessed;\n                }\n            }\n            else {\n                self.query.fetchOffset = self.originalFetchOffset + self.recordsProcessed;\n                self.query.fetchLimit = self.recordsRemaining >= self.originalFetchLimit ? self.originalFetchLimit : self.recordsRemaining;\n            }\n            \n            // If we've gotten all of our results we can stop processing\n            if (self.recordsRemaining <= 0) {\n                if (self.completion) {\n                    [self.callbackQueue addOperationWithBlock:^{\n                        self.completion(error);\n                    }];\n                }\n                [self completeOperation];\n            }\n            else {\n                // try to Pull again with the updated query\n                [self processPullOperation];\n            }\n        });\n    }];\n}\n\n/// Updates deltaToken and deltaTokenEntity with the date stored in self.maxDate. The deltaToken is then\n/// upserted in the syncContext's dataSource. This method must be called on self.dispatchQueue.\n-(void) upsertDeltaTokenOrError:(NSError **)error\n{\n    NSDateFormatter *formatter = [MSNaiveISODateFormatter naiveISODateFormatter];\n    self.deltaTokenEntity.value = [formatter stringFromDate:self.maxDate];\n    [self.syncContext.dataSource upsertItems:@[self.deltaTokenEntity.serialize] table:self.syncContext.dataSource.configTableName orError:error];\n    if (error && *error) {\n        return;\n    }\n    self.deltaToken = self.maxDate;\n}\n\n/// Updates self.query.predicate with the date stored in self.deltaToken. The deltaToken is loaded from\n/// the syncContext's dataSource, if required. This method must be called on self.dispatchQueue.\n-(void) updateQueryFromDeltaTokenOrError:(NSError **)error\n{\n    // only load from local database if nil; we update it when writing\n    if (!self.deltaToken) {\n        NSDateFormatter *formatter = [MSNaiveISODateFormatter naiveISODateFormatter];\n        MSSyncTable *configTable = [[MSSyncTable alloc] initWithName:self.syncContext.dataSource.configTableName client:self.syncContext.client];\n        NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"table == %@ && key == %@ && keyType == %ld\", self.query.table.name, self.queryId, MSConfigKeyDeltaToken];\n        MSQuery *query = [[MSQuery alloc] initWithSyncTable:configTable predicate:predicate];\n        NSArray *results = [self.syncContext.dataSource readWithQuery:query orError:error].items;\n        if (error && *error) {\n            return;\n        }\n        \n        NSDictionary *deltaTokenDict = results.count > 0 ? results[0] : nil;\n        \n        if (deltaTokenDict) {\n            self.deltaTokenEntity = [[MSTableConfigValue alloc] initWithSerializedItem:deltaTokenDict];\n            self.deltaToken = [formatter dateFromString:self.deltaTokenEntity.value];\n        }\n        else {\n            self.deltaTokenEntity = [MSTableConfigValue new];\n            self.deltaTokenEntity.table = self.query.table.name;\n            self.deltaTokenEntity.keyType = MSConfigKeyDeltaToken;\n            self.deltaTokenEntity.key = self.queryId;\n            // we set the value right before we upsert it\n            self.deltaToken = [NSDate dateWithTimeIntervalSince1970:0.0];\n        }\n    }\n    \n    self.query.fetchOffset = 0;\n    \n    if (self.deltaToken) {\n        MSDateOffset *offset = [[MSDateOffset alloc]initWithDate:self.deltaToken];\n        NSPredicate *updatedAt = [NSPredicate predicateWithFormat:@\"%K >= %@\", MSSystemColumnUpdatedAt, offset];\n        if (self.originalPredicate) {\n            self.query.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[self.originalPredicate, updatedAt]];\n        }\n        else {\n            self.query.predicate = updatedAt;\n        }\n    }\n}\n\n-(BOOL) callCompletionIfError:(NSError *)error\n{\n    BOOL isError = NO;\n    if (error) {\n        isError = YES;\n        if (self.completion) {\n            [self.callbackQueue addOperationWithBlock:^{\n                self.completion(error);\n            }];\n        }\n        [self completeOperation];\n    }\n    return isError;\n}\n\n- (NSError *) errorWithDescription:(NSString *)description code:(NSInteger)code\n{\n    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: description };\n    return [NSError errorWithDomain:MSErrorDomain code:code userInfo:userInfo];\n}\n\n- (BOOL) isConcurrent {\n    return YES;\n}\n\n- (BOOL) isExecuting {\n    return executing_;\n}\n\n- (BOOL) isFinished {\n    return finished_;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSQueuePullOperationInternal.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSQueuePullOperation.h\"\n\n@interface MSQueuePullOperation ()\n- (void)completeOperation;\n@end"
  },
  {
    "path": "sdk/iOS/src/MSQueuePurgeOperation.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSSyncContext.h\"\n#import \"MSSyncTable.h\"\n\n@interface MSQueuePurgeOperation : NSOperation {\n    BOOL executing_;\n    BOOL finished_;\n}\n\n- (id) initPurgeWithSyncContext:(MSSyncContext *)syncContext\n                          query:(MSQuery *)query\n                          force:(BOOL)force\n                  dispatchQueue:(dispatch_queue_t)dispatchQueue\n                  callbackQueue:(NSOperationQueue *)callbackQueue\n                     completion:(MSSyncBlock)completion;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSQueuePurgeOperation.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSQueuePurgeOperation.h\"\n#import \"MSTableOperationError.h\"\n#import \"MSSyncContextInternal.h\"\n#import \"MSClientInternal.h\"\n#import \"MSTableOperationInternal.h\"\n#import \"MSQuery.h\"\n#import \"MSSyncContext.h\"\n#import \"MSSyncContextInternal.h\"\n#import \"MSClientInternal.h\"\n#import \"MSQueryInternal.h\"\n#import \"MSTableConfigValue.h\"\n\n@interface MSQueuePurgeOperation()\n\n@property (nonatomic, weak)     dispatch_queue_t dispatchQueue;\n@property (nonatomic, weak)     NSOperationQueue *callbackQueue;\n@property (nonatomic, weak)     MSSyncContext *syncContext;\n@property (nonatomic, copy)     MSSyncBlock completion;\n@property (nonatomic, strong)   MSQuery* query;\n@property (nonatomic)           BOOL force;\n\n@end\n\n@implementation MSQueuePurgeOperation\n\n- (id) initPurgeWithSyncContext:(MSSyncContext *)syncContext\n                          query:(MSQuery *)query\n                          force:(BOOL)force\n                  dispatchQueue:(dispatch_queue_t)dispatchQueue\n                  callbackQueue:(NSOperationQueue *)callbackQueue\n                     completion:(MSSyncBlock)completion\n{\n    self = [super init];\n    if (self) {\n        _syncContext = syncContext;\n        _query = query;\n        _force = force;\n        _dispatchQueue = dispatchQueue;\n        _callbackQueue = callbackQueue;\n        _completion = [completion copy];\n    }\n    return self;\n}\n\n- (void) completeOperation {\n    [self willChangeValueForKey:@\"isFinished\"];\n    [self willChangeValueForKey:@\"isExecuting\"];\n    \n    executing_ = NO;\n    finished_ = YES;\n    \n    [self didChangeValueForKey:@\"isExecuting\"];\n    [self didChangeValueForKey:@\"isFinished\"];\n}\n\n// Check if the operation was cancelled and if so, begin winding down\n-(BOOL) checkIsCanceled\n{\n    if (self.isCancelled) {\n        NSError *error = [self errorWithDescription:@\"Purge cancelled\" code:MSPullAbortedUnknown];\n        [self callCompletionIfError:error];\n    }\n    \n    return self.isCancelled;\n}\n\n-(void) start\n{\n    if (finished_) {\n        return;\n    }\n    else if (self.isCancelled) {\n        [self completeOperation];\n        return;\n    }\n    \n    [self willChangeValueForKey:@\"isExecuting\"];\n    executing_ = YES;\n    [self didChangeValueForKey:@\"isExecuting\"];\n    \n    [self processPurgeWithQueryOperation];\n}\n\n- (void) processPurgeWithQueryOperation\n{\n    if ([self checkIsCanceled]) {\n        return;\n    }\n    \n    // purge needs exclusive access to the storage layer\n    dispatch_async(self.dispatchQueue, ^{\n        NSError *error;\n        \n        if (self.force) {\n            [self purgeOperationsOrError:&error];\n            if ([self callCompletionIfError:error]) {\n                return;\n            }\n            [self purgeDeltaTokensOrError:&error];\n            if ([self callCompletionIfError:error]) {\n                return;\n            }\n        }\n        \n        // Check if our table is dirty, if so, cancel the purge action\n        // If 'force' is true, all operation were removed by the earlier call to purgeOperationsOrError\n        NSArray *tableOps = [self.syncContext.operationQueue getOperationsForTable:self.query.syncTable.name item:nil];\n        \n        if (tableOps.count > 0) {\n            error = [self errorWithDescription:@\"The table cannot be purged because it has pending operations\"\n                                          code:MSPurgeAbortedPendingChanges];\n        } else {\n            // We can safely delete all items on this table (no pending operations)\n            [self.syncContext.dataSource deleteUsingQuery:self.query orError:&error];\n        }\n        \n        if (self.completion) {\n            [self.callbackQueue addOperationWithBlock:^{\n                self.completion(error);\n            }];\n        }\n        [self completeOperation];\n    });\n}\n\n/// Purges all pending operations in the operationQueue of the syncContext. This method must be called from the dispatchQueue.\n- (void) purgeOperationsOrError:(NSError **)error\n{\n    // Check if our table is dirty\n    NSArray *tableOps = [self.syncContext.operationQueue getOperationsForTable:self.query.syncTable.name item:nil];\n    \n    // delete operations one-by-one, which will cascade delete any errors\n    for (int i = 0; i < tableOps.count; i++) {\n        if ([self.syncContext.operationQueue isLocked:tableOps[i]]) {\n            *error = [self errorWithDescription:@\"The table cannot be purged because it has pending operations that have been sent to the server and not yet received a response\"\n                                           code:MSPurgeAbortedPendingChanges];\n            break;\n        }\n        [self.syncContext.operationQueue removeOperation:tableOps[i] orError:error];\n        \n        if (error && *error) {\n            break;\n        }\n    }\n}\n\n/// Purges all deltaTokens for the syncTable. This method must be called from the dispatchQueue.\n- (void) purgeDeltaTokensOrError:(NSError **)error\n{\n    NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"table == %@ && keyType == %ld\", self.query.syncTable.name, MSConfigKeyDeltaToken];\n    MSSyncTable *configTable = [[MSSyncTable alloc] initWithName:self.syncContext.dataSource.configTableName client:self.query.syncTable.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:configTable predicate:predicate];\n    [self.syncContext.dataSource deleteUsingQuery:query orError:error];\n}\n\n-(BOOL) callCompletionIfError:(NSError *)error\n{\n    BOOL isError = NO;\n    if (error) {\n        isError = YES;\n        if (self.completion) {\n            [self.callbackQueue addOperationWithBlock:^{\n                self.completion(error);\n            }];\n        }\n        [self completeOperation];\n    }\n    return isError;\n}\n\n- (NSError *) errorWithDescription:(NSString *)description code:(NSInteger)code\n{\n    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: description };\n    return [NSError errorWithDomain:MSErrorDomain code:code userInfo:userInfo];\n}\n\n- (BOOL) isConcurrent {\n    return YES;\n}\n\n- (BOOL) isExecuting {\n    return executing_;\n}\n\n- (BOOL) isFinished {\n    return finished_;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSQueuePushOperation.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSSyncContext.h\"\n\n/// Performs all actions associated with a push operation including, sending each operation to\n/// the server, processing errors, and triggering the appropriate calls to the delegate, datasource,\n/// and callbacks\n@interface MSQueuePushOperation : NSOperation {\n    BOOL executing_;\n    BOOL finished_;\n}\n\n- (id) initWithSyncContext:(MSSyncContext *)syncContext\n             dispatchQueue:(dispatch_queue_t)dispatchQueue\n             callbackQueue:(NSOperationQueue *)callbackQueue\n                completion:(MSSyncBlock)completion;\n\n@end"
  },
  {
    "path": "sdk/iOS/src/MSQueuePushOperation.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSQueuePushOperation.h\"\n#import \"MSTableOperationError.h\"\n#import \"MSSyncContextInternal.h\"\n#import \"MSClientInternal.h\"\n#import \"MSTableOperationInternal.h\"\n#import \"MSQuery.h\"\n\n@interface MSQueuePushOperation()\n\n@property (nonatomic, strong) NSError *error;\n@property (nonatomic, weak) dispatch_queue_t dispatchQueue;\n@property (nonatomic, weak) MSSyncContext *syncContext;\n@property (nonatomic, copy) MSSyncBlock completion;\n@property (nonatomic, weak) NSOperationQueue *callbackQueue;\n@property (nonatomic, strong) MSTableOperation* currentOp;\n\n@end\n\n@implementation MSQueuePushOperation\n\n- (id) initWithSyncContext:(MSSyncContext *)syncContext\n             dispatchQueue:(dispatch_queue_t)dispatchQueue\n             callbackQueue:(NSOperationQueue *)callbackQueue\n                completion:(MSSyncBlock)completion\n{\n    self = [super init];\n    if (self) {\n        _syncContext = syncContext;\n        _dispatchQueue = dispatchQueue;\n        _callbackQueue = callbackQueue;\n        _completion = [completion copy];\n        \n    }\n    return self;\n}\n\n- (void) completeOperation {\n    [self willChangeValueForKey:@\"isFinished\"];\n    [self willChangeValueForKey:@\"isExecuting\"];\n    \n    executing_ = NO;\n    finished_ = YES;\n    \n    [self didChangeValueForKey:@\"isExecuting\"];\n    [self didChangeValueForKey:@\"isFinished\"];\n}\n\n// Check if the operation was cancelled and if so, begin winding down\n-(BOOL) checkIsCanceled\n{\n    if (self.isCancelled) {\n        self.error = [self errorWithDescription:@\"Push cancelled\" code:MSPushAbortedUnknown internalError:nil];\n        [self pushComplete];\n    }\n    \n    return self.isCancelled;\n}\n\n-(void) start\n{\n    if (finished_) {\n        return;\n    }\n    else if (self.isCancelled) {\n        [self pushComplete];\n        return;\n    }\n    \n    [self willChangeValueForKey:@\"isExecuting\"];\n    executing_ = YES;\n    [self didChangeValueForKey:@\"isExecuting\"];\n    \n    // For now, we process one operation at a time\n    [self processQueueEntry];\n}\n\n/// Pick an operation up out of the queue until we run out of operations or find push\n/// For each operation, attempt to send to the server and record the results until we\n/// recieve a fatal error or we finish all pending operations\n- (void) processQueueEntry\n{\n    dispatch_async(self.dispatchQueue, ^{\n         if (self.currentOp) {\n            NSInteger currentId = self.currentOp.operationId;\n            self.currentOp = [self.syncContext.operationQueue getOperationAfter:currentId];\n        } else {\n            self.currentOp = [self.syncContext.operationQueue peek];\n        }\n\n        if (self.currentOp) {\n            [self processTableOperation:self.currentOp];\n            return;\n        }\n        \n        [self pushComplete];\n        return;\n    });\n}\n\n/// For a given pending table operation, create the request to send it to the remote table\n- (void) processTableOperation:(MSTableOperation *)operation\n{\n    // Lock table-item pair\n    [self.syncContext.operationQueue lockOperation:operation];\n    \n    NSError *error;\n    \n    // Read the item from local store\n    if (operation.type != MSTableOperationDelete) {\n        operation.item = [self.syncContext.dataSource readTable:operation.tableName withItemId:operation.itemId orError:&error];\n    }\n    \n    if (error) {\n        NSString *errorMessage = [NSString stringWithFormat:@\"Unable to read item '%@' from table '%@'\", operation.itemId, operation.tableName];\n        self.error = [self errorWithDescription:errorMessage code:MSPushAbortedDataSource internalError:error];\n        [self pushComplete];\n        return;\n    }\n    \n    if ([self checkIsCanceled]) {\n        return;\n    }\n    \n    // Inserts need system properties removed\n    if (operation.type == MSTableOperationInsert && operation.item) {\n        NSMutableDictionary *item = [operation.item mutableCopy];\n        [self.syncContext.client.serializer removeSystemProperties:item];\n        operation.item = [item copy];\n    }\n\n    // Block to process the results of the table request and populate the appropriate data store\n    id postTableOperation = ^(NSDictionary *item, NSError *error) {\n        [self finishTableOperation:operation item:item error:error];\n    };\n    \n    // Begin sending the table operation to the remote table\n    operation.client = self.syncContext.client;\n    operation.pushOperation = self;\n    \n    id<MSSyncContextDelegate> syncDelegate = self.syncContext.delegate;\n    \n    // Let go of the operation queue\n    [self.callbackQueue addOperationWithBlock:^{\n        if (syncDelegate && [syncDelegate respondsToSelector:@selector(tableOperation:onComplete:)]) {\n            [syncDelegate tableOperation:operation onComplete:postTableOperation];\n        } else {\n            [operation executeWithCompletion:postTableOperation];\n        }\n    }];\n}\n\n/// Process the returned item/error from a call to a remote table. Update the local store state or cancel\n/// the remaining operations as necessary\n- (void) finishTableOperation:(MSTableOperation *)operation item:(NSDictionary *)item error:(NSError *)error\n{\n    // Check if we were cancelled while we awaited our results\n    if ([self checkIsCanceled]) {\n        return;\n    }\n\n    // Remove the operation\n    dispatch_async(self.dispatchQueue, ^{\n        if (error) {\n            NSHTTPURLResponse *response = [error.userInfo objectForKey:MSErrorResponseKey];\n            BOOL didCondense = NO;\n            \n            // Determine if table-item operation is dirty (if so, ignore this operations response)\n            // and condense any table-item logic since new actions can come in while this one is outgoing\n            NSError *condenseError;\n            didCondense = [self.syncContext.operationQueue condenseOperation:operation orError:&condenseError];\n            if (condenseError) {\n                self.error = [self errorWithDescription:@\"Push aborted due to failure to condense operations in the store\"\n                                                   code:MSPushAbortedDataSource\n                                          internalError:error];\n            }\n            \n            if (response && response.statusCode == 401) {\n                self.error = [self errorWithDescription:@\"Push aborted due to authentication error\"\n                                                   code:MSPushAbortedAuthentication\n                                          internalError:error];\n            }\n            else if ([error.domain isEqualToString:NSURLErrorDomain]) {\n                self.error = [self errorWithDescription:@\"Push aborted due to network error\"\n                                                   code:MSPushAbortedNetwork\n                                          internalError:error];\n            }\n            else if (!didCondense) {\n                MSTableOperationError *tableError = [[MSTableOperationError alloc] initWithOperation:operation\n                                                                                                item:operation.item\n                                                                                             context:self.syncContext\n                                                                                               error:error];\n                \n                NSError *storeError;\n                [self.syncContext.dataSource upsertItems:[NSArray arrayWithObject:[tableError serialize]]\n                                                  table:[self.syncContext.dataSource errorTableName]\n                                                orError:&storeError];\n                if (storeError) {\n                    self.error = [self errorWithDescription:@\"Push aborted due to failure to save operation errors to store\"\n                                                       code:MSPushAbortedDataSource\n                                              internalError:storeError];\n                }\n            }\n        }\n        else if (operation.type != MSTableOperationDelete && item != nil) {\n            // The operation executed successfully, so save the item (if we have one)\n            // and no additional changes have happened on this table-item pair\n            NSError *storeError;\n            if ([self.syncContext.operationQueue getOperationsForTable:operation.tableName\n                                                                  item:operation.itemId].count <= 1) {\n                [self.syncContext.dataSource upsertItems:[NSArray arrayWithObject:item]\n                                                   table:operation.tableName\n                                                 orError:&storeError];\n                \n                if (storeError) {\n                    NSString *errorMessage = [NSString stringWithFormat:@\"Unable to upsert item '%@' into table '%@'\",\n                                              operation.itemId, operation.tableName];\n                    \n                    self.error = [self errorWithDescription:errorMessage\n                                                       code:MSPushAbortedDataSource\n                                              internalError:storeError];\n                }\n            }\n        }\n        \n        if (self.error) {\n            [self.syncContext.operationQueue unlockOperation:operation];\n            [self pushComplete];\n            return;\n        }\n            \n        // Remove our operation if it completed successfully\n        if (!error) {\n            NSError *storeError = [self.syncContext removeOperation:operation];\n            if (storeError) {\n                self.error = [self errorWithDescription:@\"error removing successful operation from queue\"\n                                                   code:MSSyncTableInternalError\n                                          internalError:error];\n                [self pushComplete];\n                return;\n            }\n        }\n        \n        [self processQueueEntry];\n    });\n}\n\n/// When all operations are complete (with errors) or any one operation encountered a fatal error\n/// this can be called to begin finalizing a push operation\n-(void) pushComplete\n{\n    MSSyncTable *table = [[MSSyncTable alloc] initWithName:[self.syncContext.dataSource errorTableName]\n                                                    client:self.syncContext.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:table];\n    NSError *error;\n    \n    MSSyncContextReadResult *result = [self.syncContext.dataSource readWithQuery:query orError:&error];\n    \n    // remove all the errors now\n    [self.syncContext.dataSource deleteUsingQuery:query orError:nil];\n    \n    // Create the containing error as needed\n    if (result.items && result.items.count > 0) {\n        NSMutableArray *tableErrors = [NSMutableArray new];\n        for (NSDictionary *item in result.items) {\n            [tableErrors addObject:[[MSTableOperationError alloc] initWithSerializedItem:item context:self.syncContext]];\n        }\n        \n        if (self.error == nil) {\n            self.error = [self errorWithDescription:@\"Not all operations completed successfully\"\n                                               code:MSPushCompleteWithErrors\n                                         pushErrors:tableErrors\n                                      internalError:nil];\n        } else {\n            self.error = [self errorWithDescription:[self.error localizedDescription]\n                                               code:self.error.code\n                                         pushErrors:tableErrors\n                                      internalError:[self.error.userInfo objectForKey:NSUnderlyingErrorKey]];\n        }\n    }\n    \n    // Send the final table operation results to the delegate\n    id<MSSyncContextDelegate> syncDelegate = self.syncContext.delegate;\n    [self.callbackQueue addOperationWithBlock:^{\n        if (syncDelegate && [syncDelegate respondsToSelector:@selector(syncContext:onPushCompleteWithError:completion:)]) {\n            [syncDelegate syncContext:self.syncContext onPushCompleteWithError:self.error completion:^{\n                [self processErrors];\n            }];\n        } else {\n            [self processErrors];\n        }\n    }];\n}\n\n/// Analyze the final errors from all the operations, updating the state as appropriate\n- (void) processErrors\n{\n    if (self.error) {\n        // Update core error to reflect any changes in push errors\n        NSMutableDictionary *userInfo = [self.error.userInfo mutableCopy];\n        \n        NSArray *pushErrors = [userInfo objectForKey:MSErrorPushResultKey];\n        NSMutableArray *remainingErrors = [[NSMutableArray alloc] init];\n        for (MSTableOperationError *error in pushErrors) {\n            // Remove any operations the delegate handled\n            if (!error.handled) {\n                [remainingErrors addObject:error];\n            }\n        }\n        \n        // Ajdust the error\n        if (self.error.code == MSPushCompleteWithErrors && remainingErrors.count == 0) {\n            self.error = nil;\n        } else {\n            self.error = [self errorWithDescription:[self.error localizedDescription]\n                                               code:self.error.code\n                                         pushErrors:remainingErrors\n                                      internalError:[self.error.userInfo objectForKey:NSUnderlyingErrorKey]];\n        }\n    }\n    \n    if (self.completion) {\n        [self.callbackQueue addOperationWithBlock:^{\n            self.completion(self.error);\n        }];\n    }\n    \n    [self completeOperation];\n}\n\n/// Builds a NSError containing the errors related to a push operation\n- (NSError *) errorWithDescription:(NSString *)description code:(NSInteger)code internalError:(NSError *)error\n{\n    NSMutableDictionary *userInfo = [@{ NSLocalizedDescriptionKey: description } mutableCopy];\n    \n    if (error) {\n        [userInfo setObject:error forKey:NSUnderlyingErrorKey];\n    }\n    \n    return [NSError errorWithDomain:MSErrorDomain code:code userInfo:userInfo];\n}\n\n/// Builds a NSError containing the errors related to a push operation\n-(NSError *) errorWithDescription:(NSString *)description code:(NSInteger)code pushErrors:(NSArray *)pushErrors internalError:(NSError *)error\n{\n    NSMutableDictionary *userInfo = [@{ NSLocalizedDescriptionKey: description } mutableCopy];\n    \n    if (error) {\n        [userInfo setObject:error forKey:NSUnderlyingErrorKey];\n    }\n    \n    if (pushErrors && pushErrors.count > 0) {\n        [userInfo setObject:pushErrors forKey:MSErrorPushResultKey];\n    }\n    \n    return [NSError errorWithDomain:MSErrorDomain code:code userInfo:userInfo];\n}\n\n- (BOOL) isConcurrent {\n    return YES;\n}\n\n- (BOOL) isExecuting {\n    return executing_;\n}\n\n- (BOOL) isFinished {\n    return finished_;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSRegistrationManager.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n\n/// MSRegistrationManager orchestrates the steps of registering and unregistering.\n/// Its goal is to ensure that registrations are never duplicated and that\n/// existing registrations for the current device can always be removed.\n@interface MSRegistrationManager : NSObject\n\n/// Initialize with the specified MSClient.\n- (MSRegistrationManager *)initWithClient:(MSClient *)client;\n\n/// Create or update the provided registration.\n- (void)upsertRegistration:(NSMutableDictionary *)registration\n                completion:(MSCompletionBlock)completion;\n\n/// Delete the registration with the specified name.\n- (void)deleteRegistrationWithName:(NSString *)registrationName\n                        completion:(MSCompletionBlock)completion;\n\n/// Delete all registrations for the specified deviceToken.\n- (void)deleteAllWithDeviceToken:(NSString *)deviceToken\n                      completion:(MSCompletionBlock)completion;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSRegistrationManager.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSRegistrationManager.h\"\n#import \"MSLocalStorage.h\"\n#import \"MSPushHttp.h\"\n\n@interface MSRegistrationManager ()\n@property (nonatomic, strong, readonly) MSLocalStorage *storage;\n@property (nonatomic, strong, readonly) MSPushHttp *pushHttp;\n@end\n\n@implementation MSRegistrationManager\n\n- (MSRegistrationManager *)initWithClient:(MSClient *)client\n{\n    self = [super init];\n    \n    if (self) {\n        _storage = [[MSLocalStorage alloc] initWithMobileServiceHost:client.applicationURL.host];\n        _pushHttp = [[MSPushHttp alloc] initWithClient:client];\n    }\n    \n    return self;\n}\n\n- (void)upsertRegistration:(NSMutableDictionary *)registration\n                completion:(MSCompletionBlock)completion\n{\n    if (self.storage.isRefreshNeeded)\n    {\n        [self refreshRegistrations:registration[@\"deviceId\"] completion:^(NSError *error) {\n            if (error) {\n                if (completion) {\n                    completion(error);\n                }\n                return;\n            }\n            \n            [self firstRegistration:registration completion:completion];\n        }];\n    } else {\n        [self firstRegistration:registration completion:completion];\n    }\n}\n\n- (void)refreshRegistrations:(NSString *)deviceToken\n                  completion:(MSCompletionBlock)completion\n{\n    NSString *refreshDeviceToken;\n    if (!self.storage.deviceToken || [self isWhitespace:self.storage.deviceToken]) {\n        refreshDeviceToken = deviceToken;\n    } else {\n        refreshDeviceToken = self.storage.deviceToken;\n    }\n    \n    [self.pushHttp registrationsForDeviceToken:refreshDeviceToken completion:^(NSArray *registrations, NSError *error) {\n        if (!error) {\n            [self.storage updateRegistrations:registrations deviceToken:refreshDeviceToken];\n        }\n        \n        if (completion) {\n            completion(error);\n        }\n    }];\n}\n\n- (void)firstRegistration:(NSMutableDictionary *)registration\n               completion:(MSCompletionBlock)completion\n{\n    NSString *name = registration[@\"templateName\"];\n    if (!name || [name isKindOfClass:[NSNull class]]) {\n        name = MSNativeRegistrationName;\n    }\n    \n    NSString *cachedRegistrationId = [self.storage getRegistrationIdWithName:name];\n    if (cachedRegistrationId) {\n        [registration setValue:cachedRegistrationId forKey:@\"registrationId\"];\n        [self upsertRegistrationCore:registration\n                               retry:YES\n                          completion:completion];\n    } else {\n        [self createRegistrationId:registration completion:^(NSError *error) {\n            if (error) {\n                if (completion) {\n                    completion(error);\n                }\n                return;\n            }\n            \n            [self upsertRegistrationCore:registration\n                                   retry:YES\n                              completion:completion];\n        }];\n    }\n}\n\n- (void)expiredRegistration:(NSMutableDictionary *)registration\n                 completion:(MSCompletionBlock)completion\n{\n    [self createRegistrationId:registration completion:^(NSError *error) {\n        if (error) {\n            if (completion) {\n                completion(error);\n            }\n            return;\n        }\n        \n        [self upsertRegistrationCore:registration\n                               retry:NO\n                          completion:^(NSError *error) {\n                              if (completion) {\n                                  completion(error);\n                              }\n        }];\n    }];\n}\n\n- (void)deleteRegistrationWithName:(NSString *)registrationName\n                        completion:(MSCompletionBlock)completion\n{\n    NSString *cachedRegistrationId = [self.storage getRegistrationIdWithName:registrationName];\n    if (!cachedRegistrationId) {\n        if (completion) {\n            completion(nil);\n        }\n        return;\n    }\n    \n    \n    [self.pushHttp deleteRegistrationById:cachedRegistrationId completion:^(NSError *error) {\n        if (!error) {\n            [self.storage deleteRegistrationWithName:registrationName];\n        }\n\n        if (completion) {\n            completion(error);\n        }\n    }];\n}\n\n- (void)deleteAllWithDeviceToken:(NSString *)deviceToken\n                      completion:(MSCompletionBlock)completion\n{\n    [self refreshRegistrations:deviceToken completion:^(NSError *error) {\n        if (!error) {\n            NSMutableArray *registrationIds = [[self.storage getRegistrationIds] mutableCopy];\n            [self recursiveDelete:registrationIds completion:completion];\n            return;\n        }\n        \n        if (completion) {\n            completion(error);\n        }\n    }];\n}\n\n- (void)recursiveDelete:(NSMutableArray *)registrationIds\n             completion:(MSCompletionBlock)completion\n{\n    NSString *registrationId = registrationIds[registrationIds.count-1];\n    [registrationIds removeLastObject];\n    \n    [self.pushHttp deleteRegistrationById:registrationId completion:^(NSError *error) {\n        if (!error) {\n            if (registrationIds.count > 0) {\n                [self recursiveDelete:registrationIds completion:completion];\n                return;\n            }\n            \n            [self.storage deleteAllRegistrations];\n        }\n\n        if (completion) {\n            completion(error);\n        }\n    }];\n}\n\n- (void)createRegistrationId:(NSMutableDictionary *)registration\n                  completion:(MSCompletionBlock)completion\n{\n    [self.pushHttp createRegistrationId:^(NSString *registrationId, NSError *error) {\n        if (!error) {\n            [self.storage updateRegistrationWithName:registration[@\"templateName\"]\n                                      registrationId:registrationId\n                                         deviceToken:registration[@\"deviceId\"]];\n            [registration setValue:registrationId forKey:@\"registrationId\"];\n        }\n    \n        if (completion) {\n            completion(error);\n        }\n    }];\n}\n\n-(void)upsertRegistrationCore:(NSMutableDictionary *)registration\n                        retry:(BOOL)retry\n                   completion:(MSCompletionBlock)completion\n{\n    [self.pushHttp upsertRegistration:registration completion:^(NSError *error) {\n        if (!error) {\n            \n        } else if (retry && [error.userInfo[MSErrorResponseKey] statusCode] == 410) {\n            // evaluate if error has 410\n            [self expiredRegistration:registration completion:completion];\n            return;\n        }\n        \n        if (completion) {\n            completion(error);\n        }\n    }];\n}\n\n-(BOOL)isWhitespace:(NSString *)string{\n    return [[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSSDKFeatures.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n#pragma mark * Telemetry features definitions\n\ntypedef NS_OPTIONS(NSUInteger, MSFeatures) {\n    MSFeatureNone                     = 0,\n\n    // Custom API where the request / response body is serialized\n    // into / deserialized from JSON\n    MSFeatureApiJson                  = 1 << 0,\n\n    // Custom API where the request / response body is given as a\n    // NSData object\n    MSFeatureApiGeneric               = 1 << 1,\n\n    // Table or API calls where the caller passes additional query\n    // string parameters\n    MSFeatureQueryParameters          = 1 << 2,\n\n    // Table reads where the caller uses a MSQuery / NSPredicate to\n    // determine the items to be returned\n    MSFeatureTableReadQuery           = 1 << 3,\n\n    // Table reads where the caller uses a raw query string to determine\n    // the items to be returned\n    MSFeatureTableReadRaw             = 1 << 4,\n\n    // Conditional table updates / deletes (If-Match based on record version)\n    MSFeatureOpportunisticConcurrency = 1 << 5,\n\n    // Table reads / writes originated from a sync (offline) table\n    MSFeatureOffline                  = 1 << 6,\n    \n    // Table read with absolute url as queryString parameter\n    MSFeatureReadWithLinkHeader       = 1 << 7,\n    \n    // Table read is using incremental pull\n    MSFeatureIncrementalPull          = 1 << 8\n};\n\nextern NSString *const MSFeaturesHeaderName;\n\nextern NSString *const MSFeatureCodeApiJson;\nextern NSString *const MSFeatureCodeApiGeneric;\nextern NSString *const MSFeatureCodeQueryParameters;\nextern NSString *const MSFeatureCodeTableReadQuery;\nextern NSString *const MSFeatureCodeTableReadRaw;\nextern NSString *const MSFeatureCodeOpportunisticConcurrency;\nextern NSString *const MSFeatureCodeOffline;\nextern NSString *const MSFeatureCodeIncrementalPull;\n\n\n// The |MSSDKFeatures| class defines methods to convert between the\n// |MSFeatures| enumeration and the value to be sent in HTTP requests\n// with telemetry information to the service.\n@interface MSSDKFeatures : NSObject\n\n+(NSString *)httpHeaderForFeatures:(MSFeatures)features;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSSDKFeatures.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSSDKFeatures.h\"\n\n#pragma mark * Telemetry Features String Constants\n\nNSString *const MSFeaturesHeaderName = @\"X-ZUMO-FEATURES\";\nNSString *const MSFeatureCodeApiJson = @\"AJ\";\nNSString *const MSFeatureCodeApiGeneric = @\"AG\";\nNSString *const MSFeatureCodeQueryParameters = @\"QS\";\nNSString *const MSFeatureCodeTableReadQuery = @\"TQ\";\nNSString *const MSFeatureCodeTableReadRaw = @\"TR\";\nNSString *const MSFeatureCodeOpportunisticConcurrency = @\"OC\";\nNSString *const MSFeatureCodeOffline = @\"OL\";\nNSString *const MSFeatureCodeReadWithLinkHeader = @\"LH\";\nNSString *const MSFeatureCodeIncrementalPull = @\"IP\";\n\n@implementation MSSDKFeatures\n\n+(NSString *)httpHeaderForFeatures:(MSFeatures)features {\n    if (features == MSFeatureNone) return nil;\n\n    NSMutableArray *allFeatures = [[NSMutableArray alloc] init];\n    if (features & MSFeatureApiGeneric) {\n        [allFeatures addObject:MSFeatureCodeApiGeneric];\n    }\n    if (features & MSFeatureApiJson) {\n        [allFeatures addObject:MSFeatureCodeApiJson];\n    }\n    if (features & MSFeatureTableReadQuery) {\n        [allFeatures addObject:MSFeatureCodeTableReadQuery];\n    }\n    if (features & MSFeatureTableReadRaw) {\n        [allFeatures addObject:MSFeatureCodeTableReadRaw];\n    }\n    if (features & MSFeatureQueryParameters) {\n        [allFeatures addObject:MSFeatureCodeQueryParameters];\n    }\n    if (features & MSFeatureOpportunisticConcurrency) {\n        [allFeatures addObject:MSFeatureCodeOpportunisticConcurrency];\n    }\n    if (features & MSFeatureOffline) {\n        [allFeatures addObject:MSFeatureCodeOffline];\n    }\n    if (features & MSFeatureReadWithLinkHeader) {\n        [allFeatures addObject:MSFeatureCodeReadWithLinkHeader];\n    }\n    if (features & MSFeatureIncrementalPull) {\n        [allFeatures addObject:MSFeatureCodeIncrementalPull];\n    }\n\n    return [allFeatures componentsJoinedByString:@\",\"];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSSerializer.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n\n#pragma mark * MSSerializer Protocol\n\n\n// The |MSSerializer| protocol defines serializers that can serialize\n// items into instances of NSData and vice-versa. It does require that\n// item instances have an associated id that is an unsigned 64-bit integer.\n@protocol MSSerializer <NSObject>\n\n@required\n\n\n#pragma mark * Serialization Methods\n\n\n// Called for updates and inserts so that the item can be serialized into\n// an |NSData| instance.  Inserts are not allows to have items that already have\n// an id.\n-(NSData *)dataFromItem:(id)item\n              idAllowed:(BOOL)idAllowed\n       ensureDictionary:(BOOL)ensureDictionary\n removeSystemProperties:(BOOL)removeSystemProperties\n                orError:(NSError **)error;\n\n// Called to obtain the id of an item.\n-(id)itemIdFromItem:(id)item orError:(NSError **)error;\n\n// Called to obtain a string representation of an id of an item.\n-(NSString *)stringFromItemId:(id)itemId orError:(NSError **)error;\n\n// Called to get a string id only from a given item\n-(NSString *) stringIdFromItem:(NSDictionary *)item orError:(NSError **)error;\n\n#pragma mark * Deserialization Methods\n\n\n// Called for updates and inserts when the data will be a single item. If\n// the original item is--that is the item that was serialized and\n// sent in the update or insert--is non-nil, it should be updated with\n// the values from the item deserialized from the data.\n-(id)itemFromData:(NSData *)data\n        withOriginalItem:(id)originalItem\n        ensureDictionary:(BOOL)ensureDictionary\n                 orError:(NSError **)error;\n\n// Called to deserialize a response to an NSArray\n-(NSArray *) arrayFromData:(NSData *)data\n                   orError:(NSError **)error;\n\n// Called for reads when the data will either by an array of items or\n// an array of items and a total count. After returning, either the items\n// parameter or the error parameter (but not both) will be set. The\n// return value will be the total count, if it was requested or -1 otherwise.\n-(NSInteger)totalCountAndItems:(NSArray **)items\n                      fromData:(NSData *)data\n                       orError:(NSError **)error;\n\n// Called when the data is expected to have an error message instead of\n// an item; for example, if the HTTP response status code was >= 400. May\n// return nil if no error message could be obtained from the data.\n-(NSError *)errorFromData:(NSData *)data MIMEType:(NSString *)MIMEType;\n\n- (void) removeSystemProperties:(NSMutableDictionary *) item;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSSyncContext.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSTableOperation.h\"\n#import \"MSSyncContextReadResult.h\"\n\n@class MSQuery;\n@class MSSyncContext;\n\n/// Callback for updates and deletes. If there was an error, the *error* will be non-nil.\ntypedef void (^MSSyncBlock)(NSError *error);\n\n/// Callback for inserts. If there was an error, the *error* will be non-nil.\ntypedef void (^MSSyncItemBlock)(NSDictionary *item, NSError *error);\n\n/// Callback for push operations\ntypedef void (^MSSyncPushCompletionBlock)(void);\n\n/// The MSSyncContextDelegate allows for customizing the handling of errors, conflicts, and other\n/// conditions that may occur when syncing data between the device and the mobile service.\n@protocol MSSyncContextDelegate <NSObject>\n\n/// @name Handling Conflicts and Errors\n/// @{\n\n@optional\n/// Called once for each entry on the queue, allowing for any adjustments to the item before it is sent to the server,\n/// or custom handling of the server's response (such as conflict handling). Errors returned from this function will\n/// be collected and sent as a group to the [syncContext: onPushCompleteWithError: completion:] function.\n-(void) tableOperation:(MSTableOperation *)operation onComplete:(MSSyncItemBlock)completion;\n\n/// Called when all operations that were triggered due to a [pushWithCompletion:] call have completed. If not provided, any\n/// errors will be passed along to the [pushWithCompletion:] call. If provided, errors can be handled and additional changes\n/// may be made to the local or remote database.\n-(void) syncContext:(MSSyncContext *)context onPushCompleteWithError:(NSError *)error completion:(MSSyncPushCompletionBlock)completion;\n\n/// @}\n\n@end\n\n/// The MSSyncContextDataSource controls how data is stored and retrieved on the device. Errors returned from here will abort\n/// any given sync operation and will be surfaced to the mobile service through push or the delegate.\n@protocol MSSyncContextDataSource <NSObject>\n\n/// @name Controlling Where Data is Stored\n/// @{\n\n/// Provides the name of the table to track all table operation meta data\n- (NSString *) operationTableName;\n\n/// Provides the name of the table to track all table operation errors until they have been resolved\n- (NSString *) errorTableName;\n\n/// Provides the name of the table to track configuration data\n- (NSString *) configTableName;\n\n/// Indicates if the items passed to a sync table call should be saved by the SDK, if disabled, the local store will only\n/// recieve upserts/deletes for data calls originating from the server (pulls & pushes) plus the state tracking on the operation queue.\n@property (nonatomic) BOOL handlesSyncTableOperations;\n\n/// @}\n\n/// @name Fetching and Retrieving Data\n/// @{\n\n/// Returns a dictionary containing the items and totalCount\n- (MSSyncContextReadResult *) readWithQuery:(MSQuery *)query orError:(NSError **)error;\n\n/// Should retrieve a single item from the local store or nil if item with the given ID does not exist.\n-(NSDictionary *) readTable:(NSString *)table withItemId:(NSString *)itemId orError:(NSError **)error;\n\n/// Should insert/update the given item in the local store as appropriate\n-(BOOL) upsertItems:(NSArray *)item table:(NSString *)table orError:(NSError **)error;\n\n/// Should remove the provided item from the local store\n-(BOOL) deleteItemsWithIds:(NSArray *)items table:(NSString *)table orError:(NSError **)error;\n\n/// Should remove all entries from the specified table in the local store\n-(BOOL) deleteUsingQuery:(MSQuery *)query orError:(NSError **)error;\n\n/// @}\n\n/// @name Controlling system properties in local tables\n/// @{\n\n@optional\n\n/// Returns the MSSystemProperties that should be stored locally (example: __createdAt, __updatedAt)\n/// If not implemented, the default of __version will be asked for from the server\n-(NSUInteger) systemPropertiesForTable:(NSString *)table;\n\n/// @}\n\n@end\n\n/// The *MSSyncContext* object controls how offline operations using the *MSSyncTable* object are processed,\n/// stored in local data storage, and sent to the mobile service.\n@interface MSSyncContext : NSObject\n\n/// @name Initializing the MSSyncContext Object\n/// @{\n\n- (id) initWithDelegate:(id<MSSyncContextDelegate>)delegate dataSource:(id<MSSyncContextDataSource>) dataSource callback:(NSOperationQueue *)callbackQueue;\n\n/// @}\n\n/// @name Syncing and Storing Data\n/// @{\n\n/// Returns the number of pending outbound operations on the queue\n@property (nonatomic, readonly) NSUInteger pendingOperationsCount;\n\n/// Executes all current pending operations on the queue\n- (NSOperation *) pushWithCompletion:(MSSyncBlock)completion;\n\n/// Specifies the delegate that will be used in the resolution of syncing issues\n@property (nonatomic, strong) id<MSSyncContextDelegate> delegate;\n\n/// Specifies the dataSource that owns the local data and store of operations\n@property (nonatomic, strong) id<MSSyncContextDataSource> dataSource;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSSyncContext.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSSyncContext.h\"\n#import \"MSSyncContextInternal.h\"\n#import \"MSClientInternal.h\"\n#import \"MSTable.h\"\n#import \"MSTableOperationInternal.h\"\n#import \"MSJSONSerializer.h\"\n#import \"MSQuery.h\"\n#import \"MSQueryInternal.h\"\n#import \"MSQueuePushOperation.h\"\n#import \"MSQueuePullOperationInternal.h\"\n#import \"MSQueuePurgeOperation.h\"\n#import \"MSNaiveISODateFormatter.h\"\n#import \"MSDateOffset.h\"\n#import \"MSTableConfigValue.h\"\n\n@implementation MSSyncContext {\n    dispatch_queue_t writeOperationQueue;\n    dispatch_queue_t readOperationQueue;\n}\n\nstatic NSOperationQueue *pushQueue_;\n\n@synthesize delegate = delegate_;\n@synthesize dataSource = dataSource_;\n@synthesize operationQueue = operationQueue_;\n@synthesize client = client_;\n@synthesize callbackQueue = callbackQueue_;\n\n-(void) setClient:(MSClient *)client\n{\n    client_ = client;\n    operationQueue_ = [[MSOperationQueue alloc] initWithClient:client_ dataSource:self.dataSource];\n\n    // We don't need to wait for this, and all operation creation goes onto this queue so its\n    // guaranteed to happen only after this is populated.\n    dispatch_async(writeOperationQueue, ^{\n        self.operationSequence = [self.operationQueue getNextOperationId];\n    });\n}\n\n-(id) init\n{\n    return [self initWithDelegate:nil dataSource:nil callback:nil];\n}\n\n-(id) initWithDelegate:(id<MSSyncContextDelegate>) delegate dataSource:(id<MSSyncContextDataSource>) dataSource callback:(NSOperationQueue *)callbackQueue\n{\n    self = [super init];\n    if (self)\n    {\n        writeOperationQueue = dispatch_queue_create(\"WriteOperationQueue\", DISPATCH_QUEUE_SERIAL);\n        readOperationQueue = dispatch_queue_create(\"ReadOperationQueue\",  DISPATCH_QUEUE_CONCURRENT);\n\n        callbackQueue_ = callbackQueue;\n        if (!callbackQueue_) {\n            callbackQueue_ = [[NSOperationQueue alloc] init];\n            callbackQueue_.name = @\"Sync Context: Operation Callbacks\";\n            callbackQueue_.maxConcurrentOperationCount = 4;\n        }\n        \n        pushQueue_ = [NSOperationQueue new];\n        pushQueue_.maxConcurrentOperationCount = 1;\n        pushQueue_.name = @\"Sync Context: Push\";\n        \n        dataSource_ = dataSource;\n        delegate_ = delegate;\n    }\n    \n    return self;\n}\n\n/// Return the number of pending operations (including in progress)\n-(NSUInteger) pendingOperationsCount\n{\n    return [self.operationQueue count];\n}\n\n/// Begin sending pending operations to the remote tables. Abort the push attempt whenever any single operation\n/// recieves an error due to network or authorization. Otherwise operations will all run and all errors returned\n/// to the caller at once.\n-(NSOperation *) pushWithCompletion:(MSSyncBlock)completion\n{\n    // TODO: Allow users to cancel operations\n    MSQueuePushOperation *push = [[MSQueuePushOperation alloc] initWithSyncContext:self\n                                                                     dispatchQueue:writeOperationQueue\n                                                                     callbackQueue:self.callbackQueue\n                                                                        completion:completion];\n    \n    [pushQueue_ addOperation:push];\n    \n    return push;\n}\n\n\n#pragma mark private interface implementation\n\n\n/// Given an item and an action to perform (insert, update, delete) determines how that should be represented\n/// when sent to the server based on pending operations.\n-(void) syncTable:(NSString *)table\n             item:(NSDictionary *)item\n           action:(MSTableOperationTypes)action\n       completion:(MSSyncItemBlock)completion\n{\n    NSError *error;\n    NSMutableDictionary *itemToSave = [item mutableCopy];\n    NSString *itemId;\n    \n    // Validate our input and state\n    if (!self.dataSource) {\n        error = [self errorWithDescription:@\"Missing required datasource for MSSyncContext\"\n                              andErrorCode:MSSyncContextInvalid];\n    } else {\n        // All sync table operations require a valid string Id\n        itemId = [self.client.serializer stringIdFromItem:item orError:&error];\n        if (error) {\n            if (error.code == MSMissingItemIdWithRequest && action == MSTableOperationInsert) {\n                itemId = [MSJSONSerializer generateGUID];\n                [itemToSave setValue:itemId forKey:@\"id\"];\n                error = nil;\n            }\n        }\n    }\n    \n    if (error) {\n        if (completion) {\n            [self.callbackQueue addOperationWithBlock:^{\n                completion(nil, error);\n            }];\n        }\n        return;\n    }\n    \n    // Add the operation to the queue\n    dispatch_async(writeOperationQueue, ^{\n        NSError *error;\n        MSCondenseAction condenseAction = MSCondenseAddNew;\n        \n        // Check if this table-item pair already has a pending operation and if so, how the new action\n        // should be combined with the previous one\n        NSArray *pendingActions = [self.operationQueue getOperationsForTable:table item:itemId];\n        MSTableOperation *operation = [pendingActions lastObject];\n        if (operation) {\n            condenseAction = [MSTableOperation condenseAction:action withExistingOperation:operation];\n            if (condenseAction == MSCondenseNotSupported) {\n                error = [self errorWithDescription:@\"The requested operation is not allowed due to an already pending operation\"\n                                      andErrorCode:MSSyncTableInvalidAction];\n            }\n        }\n        \n        if (condenseAction == MSCondenseAddNew) {\n            operation = [MSTableOperation pushOperationForTable:table type:action itemId:itemId];\n            operation.operationId = self.operationSequence;\n            self.operationSequence++;\n        }\n        \n        // Update local store and then the operation queue\n        if (error == nil && self.dataSource.handlesSyncTableOperations) {\n            switch (action) {\n                case MSTableOperationInsert: {\n                    // Check to see if this item already exists\n                    NSString *itemId = itemToSave[MSSystemColumnId];\n                    NSDictionary *result = [self.dataSource readTable:table withItemId:itemId orError:&error];\n                    if (error == nil) {\n                        if (result == nil) {\n                            [self.dataSource upsertItems:@[itemToSave] table:table orError:&error];\n                        } else {\n                            error = [self errorWithDescription:@\"This item already exists.\"\n                                                  andErrorCode:MSSyncTableInvalidAction];\n                        }\n                    }\n                    break;\n                }\n                case MSTableOperationUpdate:\n                    [self.dataSource upsertItems:@[itemToSave] table:table orError:&error];\n                    break;\n                    \n                case MSTableOperationDelete:\n                    [self.dataSource deleteItemsWithIds:@[itemId] table:table orError:&error];\n                    \n                    // Capture the deleted item in case the user wants to cancel it or a conflict occur\n                    operation.item = item;\n                    break;\n                    \n                default:\n                    error = [self errorWithDescription:@\"Unknown table action\" andErrorCode:MSSyncTableInvalidAction];\n                    break;\n            }\n        }\n        \n        if (error) {\n            if (completion) {\n                [self.callbackQueue addOperationWithBlock:^{\n                    completion(nil, error);\n                }];\n            }\n            return;\n        }\n        \n        // Update the operation queue now\n        if (condenseAction == MSCondenseAddNew) {\n            [self.operationQueue addOperation:operation orError:&error];\n        }\n        else if (condenseAction == MSCondenseToDelete) {\n            operation.type = MSTableOperationDelete;\n            \n            // FUTURE: Look at moving this upserts into the operation queue object\n            [self.dataSource upsertItems:@[operation.serialize]\n                                   table:self.dataSource.operationTableName\n                                 orError:&error];\n            \n        } else if (condenseAction != MSCondenseKeep) {\n            [self.operationQueue removeOperation:operation orError:&error];\n        }\n        \n        // FUTURE: If an error occurs in updating the operation queue, we really should undo changes\n        // to the local store if possible\n        \n        if (completion) {\n            [self.callbackQueue addOperationWithBlock:^{\n                if (error) {\n                    completion(nil, error);\n                } else {\n                    completion(itemToSave, nil);\n                }\n            }];\n        }\n    });\n}\n\n/// Simple passthrough to the local storage data source to retrive a single item using its Id\n- (void) syncTable:(NSString *)table readWithId:(NSString *)itemId completion:(MSItemBlock)completion {\n    NSError *error;\n    if (!self.dataSource) {\n        error = [self errorWithDescription:@\"Missing required datasource for MSSyncContext\"\n                              andErrorCode:MSSyncContextInvalid];\n    }\n    \n    if (error) {\n        if (completion) {\n            [self.callbackQueue addOperationWithBlock:^{\n                completion(nil, error);\n            }];\n        }\n        return;\n    }\n    \n    dispatch_async(readOperationQueue, ^{\n        NSError *error;\n        NSDictionary *item = [self.dataSource readTable:table withItemId:itemId orError:&error];\n        if (completion) {\n            [self.callbackQueue addOperationWithBlock:^{\n                completion(item, error);\n            }];\n        }\n    });\n}\n\n/// Assumes running with access to the operation queue\n- (NSError *) removeOperation:(MSTableOperation *)operation\n{\n    NSError *error;\n    [self.operationQueue removeOperation:operation orError:&error];\n    return error;\n}\n\n\n/// Simple passthrough to the local storage data source to retrive a list of items\n-(void)readWithQuery:(MSQuery *)query completion:(MSReadQueryBlock)completion {\n    dispatch_async(readOperationQueue, ^{\n        NSError *error;\n        MSSyncContextReadResult *result = [self.dataSource readWithQuery:query orError:&error];\n        \n        if (completion) {\n            [self.callbackQueue addOperationWithBlock:^{\n                if (error) {\n                    completion(nil, error);\n                } else {\n                    MSQueryResult *queryResult = [[MSQueryResult alloc] initWithItems:result.items\n                                                                           totalCount:result.totalCount\n                                                                             nextLink:nil];\n                    completion(queryResult, nil);\n                }\n            }];\n        }\n    });\n}\n\n/// Given a pending operation in the queue, removes it from the queue and updates the local store\n/// with the given item\n- (void) cancelOperation:(MSTableOperation *)operation updateItem:(NSDictionary *)item completion:(MSSyncBlock)completion;\n{\n    // Removing an operation requires write access to the queue\n    dispatch_async(writeOperationQueue, ^{\n        NSError *error;\n        \n        // FUTURE: Verify operation hasn't been modified by others\n        \n        // Remove system properties but keep __version\n        NSMutableDictionary *itemToSave = [item mutableCopy];\n        \n        NSString *version = [itemToSave objectForKey:MSSystemColumnVersion];\n        [self.client.serializer removeSystemProperties:itemToSave];\n        if (version != nil) {\n            [itemToSave setValue:version forKey:MSSystemColumnVersion];\n        }\n        \n        [self.dataSource upsertItems:@[itemToSave] table:operation.tableName orError:&error];\n        if (!error) {\n            [self.operationQueue removeOperation:operation orError:&error];\n        }\n        \n        if (completion) {\n            [self.callbackQueue addOperationWithBlock:^{\n                completion(error);\n            }];\n        }\n    });\n}\n\n/// Given a pending operation in the queue, removes it from the queue and removes the item from the local\n/// store.\n- (void) cancelOperation:(MSTableOperation *)operation discardItemWithCompletion:(MSSyncBlock)completion\n{\n    // Removing an operation requires write access to the queue\n    dispatch_async(writeOperationQueue, ^{\n        NSError *error;\n        \n        // FUTURE: Verify operation hasn't been modified by others\n        \n        [self.dataSource deleteItemsWithIds:@[operation.itemId]\n                                      table:operation.tableName\n                                    orError:&error];\n        if (!error) {\n            [self.operationQueue removeOperation:operation orError:&error];\n        }\n        \n        if (completion) {\n            [self.callbackQueue addOperationWithBlock:^{\n                completion(error);\n            }];\n        }\n    });\n}\n\n/// Verify our input is valid and try to pull our data down from the server\n- (NSOperation *) pullWithQuery:(MSQuery *)query queryId:(NSString *)queryId settings:(MSPullSettings *)pullSettings completion:(MSSyncBlock)completion;\n{\n    // make a copy since we'll be modifying it internally\n    MSQuery *queryCopy = [query copy];\n    \n    if (!pullSettings) {\n        pullSettings = [MSPullSettings new];\n    }\n    \n    // We want to throw on unsupported fields so we can change this decision later\n    NSError *error;\n    NSDictionary *isDeletedParams = [MSSyncContext dictionary:queryCopy.parameters entriesForCaseInsensitiveKey:@\"__includedeleted\"];\n    if (queryCopy.selectFields) {\n        error = [self errorWithDescription:@\"Use of selectFields in not supported in pullWithQuery:\"\n                              andErrorCode:MSInvalidParameter];\n    }\n    else if (queryCopy.includeTotalCount) {\n        error = [self errorWithDescription:@\"Use of includeTotalCount is not supported in pullWithQuery:\"\n                              andErrorCode:MSInvalidParameter];\n    }\n    else if (queryId && queryCopy.orderBy.count > 0) {\n        error = [self errorWithDescription: @\"Use of orderBy is not supported when a queryId is specified\"\n                              andErrorCode:MSInvalidParameter];\n    }\n    else if (queryId && (queryCopy.fetchOffset >= 0 || queryCopy.fetchLimit >= 0)) {\n        error = [self errorWithDescription: @\"Properties fetchOffset and fetchLimit are not supported when queryId is specified\"\n                              andErrorCode:MSInvalidParameter];\n    }\n    else if ([MSSyncContext dictionary:queryCopy.parameters containsCaseInsensitiveKey:@\"__systemproperties\"]) {\n        error = [self errorWithDescription:@\"Use of '__systemProperties' is not supported in pullWithQuery parameters:\" andErrorCode:MSInvalidParameter];\n    }\n    else if (queryCopy.syncTable) {\n        // Otherwise we convert the sync table to a normal table\n        queryCopy.table = [[MSTable alloc] initWithName:queryCopy.syncTable.name client:queryCopy.syncTable.client];\n        queryCopy.syncTable = nil;\n    }\n    else if (!queryCopy.table) {\n        // MSQuery itself should disallow this, but for safety verify we have a table object\n        error = [self errorWithDescription:@\"Missing required syncTable object in query\"\n                              andErrorCode:MSInvalidParameter];\n    }\n    \n    if (!error && isDeletedParams.count > 0) {\n        error = [self errorWithDescription:@\"The '__includeDeleted' parameter is always true in pullWithQuery: and its value may not be overridden.\"\n                              andErrorCode:MSInvalidParameter];\n    }\n    \n    // Return error if possible, return on calling\n    if (error) {\n        if (completion) {\n            [self.callbackQueue addOperationWithBlock:^{\n                completion(error);\n            }];\n        }\n        return nil;\n    }\n    \n    // Get the required system properties from the Store\n    if ([self.dataSource respondsToSelector:@selector(systemPropertiesForTable:)]) {\n        queryCopy.table.systemProperties = [self.dataSource systemPropertiesForTable:queryCopy.table.name];\n    } else {\n        queryCopy.table.systemProperties = MSSystemPropertyVersion;\n    }\n    \n    // add __includeDeleted\n    if (!queryCopy.parameters) {\n        queryCopy.parameters = @{@\"__includeDeleted\" : @\"true\"};\n    } else {\n        NSMutableDictionary *mutableParameters = [queryCopy.parameters mutableCopy];\n        [mutableParameters setObject:@\"true\" forKey:@\"__includeDeleted\"];\n        queryCopy.parameters = mutableParameters;\n    }\n    \n    queryCopy.table.systemProperties |= MSSystemPropertyDeleted;\n    \n    if (queryId) {\n        queryCopy.table.systemProperties |= MSSystemPropertyUpdatedAt;\n        NSSortDescriptor *orderByUpdatedAt = [NSSortDescriptor sortDescriptorWithKey:MSSystemColumnUpdatedAt ascending:YES];\n        queryCopy.orderBy = @[orderByUpdatedAt];\n    }\n    \n    // For a Pull we treat fetchLimit as the total records we should pull by paging. If there is no fetchLimit, we pull everything.\n    // We enforce a page size of |pullSettings.pageSize|\n    NSInteger maxRecords = query.fetchLimit >= 0 ? query.fetchLimit : NSIntegerMax;\n    queryCopy.fetchLimit = MIN(maxRecords, pullSettings.pageSize);\n    \n    // Begin the actual pull request\n    return [self pullWithQueryInternal:queryCopy queryId:queryId maxRecords:maxRecords completion:completion];\n}\n\n/// Basic pull logic is:\n///  Check if our table has pending operations, if so, push\n///    If push fails, return error, else repeat while we have pending operations\n///  Read from server using an MSQueuePullOperation\n- (NSOperation *) pullWithQueryInternal:(MSQuery *)query queryId:(NSString *)queryId maxRecords:(NSInteger)maxRecords completion:(MSSyncBlock)completion\n{\n    MSQueuePullOperation *pull = [[MSQueuePullOperation alloc] initWithSyncContext:self\n                                                                             query:query\n                                                                           queryId:queryId\n                                                                        maxRecords:maxRecords\n                                                                     dispatchQueue:writeOperationQueue\n                                                                     callbackQueue:self.callbackQueue\n                                                                        completion:completion];\n    \n    dispatch_async(writeOperationQueue, ^{\n        // Before we can pull from the remote, we need to make sure out table doesn't having pending operations\n        NSArray *tableOps = [self.operationQueue getOperationsForTable:query.table.name item:nil];\n        if (tableOps.count > 0) {\n            NSOperation *push = [self pushWithCompletion:^(NSError *error) {\n                // For now we just abort the pull if the push failed to complete successfully\n                // Long term we can be smarter and check if our table succeeded\n                if (error) {\n                    [pull cancel];\n\t\t\t\t\t[pull completeOperation];\n                    \n                    if (completion) {\n                        [self.callbackQueue addOperationWithBlock:^{\n                            completion(error);\n                        }];\n                    }\n                } else {\n                    [pushQueue_ addOperation:pull];\n                }\n            }];\n            \n            [pull addDependency:push];\n        } else {\n            [pushQueue_ addOperation:pull];\n        }\n    });\n    \n    return pull;\n}\n\n/// In order to purge data from the local store, purge first checks if there are any pending operations for\n/// the specific table on the query. If there are, no purge is performed and an error returned to the user.\n/// Otherwise clear the local table of all macthing records\n- (NSOperation *) purgeWithQuery:(MSQuery *)query completion:(MSSyncBlock)completion\n{\n    MSQueuePurgeOperation *purge = [[MSQueuePurgeOperation alloc] initPurgeWithSyncContext:self\n                                                                                     query:query\n                                                                                     force:NO\n                                                                             dispatchQueue:writeOperationQueue\n                                                                             callbackQueue:self.callbackQueue\n                                                                                completion:completion];\n    [pushQueue_ addOperation:purge];\n    \n    return purge;\n}\n\n/// Purges all data, pending operations, operation errors, and metadata for the\n/// MSSyncTable from the local store.\n-(NSOperation *) forcePurgeWithTable:(MSSyncTable *)syncTable completion:(MSSyncBlock)completion\n{\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:syncTable];\n    MSQueuePurgeOperation *purge = [[MSQueuePurgeOperation alloc] initPurgeWithSyncContext:self\n                                                                                     query:query\n                                                                                     force:YES\n                                                                             dispatchQueue:writeOperationQueue\n                                                                             callbackQueue:self.callbackQueue\n                                                                                completion:completion];\n    [pushQueue_ addOperation:purge];\n    \n    return purge;\n}\n\n+ (BOOL) dictionary:(NSDictionary *)dictionary containsCaseInsensitiveKey:(NSString *)key\n{\n    for (NSString *object in dictionary.allKeys) {\n        if ([object caseInsensitiveCompare:key] == NSOrderedSame) {\n            return YES;\n        }\n    }\n    return NO;\n}\n\n+ (NSDictionary *) dictionary:(NSDictionary *)dictionary entriesForCaseInsensitiveKey:(NSString *)key\n{\n    NSMutableDictionary *matches = [NSMutableDictionary dictionary];\n    for (NSString *object in dictionary.allKeys) {\n        if ([object caseInsensitiveCompare:key] == NSOrderedSame) {\n            [matches setValue:dictionary[object] forKey:object];\n        }\n    }\n    return matches;\n}\n\n\n# pragma mark * NSError helpers\n\n\n-(NSError *) errorWithDescription:(NSString *)description\n                     andErrorCode:(NSInteger)errorCode\n{\n    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: description };\n    \n    return [NSError errorWithDomain:MSErrorDomain\n                               code:errorCode\n                           userInfo:userInfo];\n}\n\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSSyncContextInternal.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n#import \"MSOperationQueue.h\"\n#import \"MSTable.h\"\n#import \"MSPullSettings.h\"\n\n@interface MSSyncContext()\n\n@property (nonatomic, weak)             MSClient *client;\n@property (nonatomic, strong, readonly) MSOperationQueue *operationQueue;\n@property (nonatomic, strong)           NSOperationQueue *callbackQueue;\n\n@property (atomic) NSInteger operationSequence;\n\n\n#pragma mark * SyncTable helpers\n\n\n-(void) syncTable:(NSString *)table item:(NSDictionary *)item action:(MSTableOperationTypes)action completion:(MSSyncItemBlock)completion;\n\n-(void) syncTable:(NSString *)table readWithId:(NSString *)itemId completion:(MSItemBlock)completion;\n\n-(void) readWithQuery:(MSQuery *)query completion:(MSReadQueryBlock)completion;\n\n-(NSOperation *) pullWithQuery:(MSQuery *)query queryId:(NSString *)queryId settings:(MSPullSettings *)pullSettings completion:(MSSyncBlock)completion;\n\n-(NSOperation *) purgeWithQuery:(MSQuery *)query completion:(MSSyncBlock)completion;\n\n-(NSOperation *) forcePurgeWithTable:(MSSyncTable *)syncTable completion:(MSSyncBlock)completion;\n\n\n#pragma mark * Operation Helpers\n\n\n-(NSError *) removeOperation:(MSTableOperation *)operation;\n\n-(void) cancelOperation:(MSTableOperation *)operation updateItem:(NSDictionary *)item completion:(MSSyncBlock)completion;\n\n-(void) cancelOperation:(MSTableOperation *)operation discardItemWithCompletion:(MSSyncBlock)completion;\n\n@end"
  },
  {
    "path": "sdk/iOS/src/MSSyncContextReadResult.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n/// The *MSSyncContextReadResult* class represents the results of a read from a\n/// local table. Providing the list of items found and optionally a total count of\n/// records matching the query.\n@interface MSSyncContextReadResult : NSObject\n\n/// @name Initializing the MSSyncContextReadResult Object\n/// @{\n\n/// Creates a MSSyncContextReadResult with the given items and total count.\n- initWithCount:(NSInteger)count items:(NSArray *)items;\n\n/// @}\n\n///@name Accessing search results\n///@{\n\n/// The total record count of the matching records in the table, but does not indicate the\n/// actual returned record count. If the query did not request a total count, this value should\n/// be -1.\n@property (nonatomic, readonly) NSInteger totalCount;\n\n/// An NSArray of NSDictionaries, with each dictionary representing a row\n/// in the table.\n@property (nonatomic, readonly, strong) NSArray *items;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSSyncContextReadResult.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSSyncContextReadResult.h\"\n\n@implementation MSSyncContextReadResult\n\n@synthesize totalCount = totalCount_;\n@synthesize items = items_;\n\n- (id)initWithCount:(NSInteger)count items:(NSArray *)items;\n{\n    self = [super init];\n    if (self) {\n        totalCount_ = count;\n        items_ = items;\n    }\n    \n    return self;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSSyncTable.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n#import \"MSTable.h\"\n#import \"MSPullSettings.h\"\n#import \"MSSyncContext.h\"\n\n@class MSQueuePullOperation;\n@class MSQueuePurgeOperation;\n\n/// The *MSSyncTable* class represents a table of a Windows Azure Mobile Service.\n/// Items can be inserted, updated, deleted and read from the table. The table\n/// can also be queried to retrieve an array of items that meet the given query\n/// conditions. All table operations result in a request to the local store\n/// and an eventual request to the azure mobile service (see the *MSSyncContext* for more\n/// details).\n@interface MSSyncTable : NSObject\n\n///@name Properties\n///@{\n\n/// The name of this table.\n@property (nonatomic, copy, readonly)           NSString *name;\n\n/// The client associated with this table.\n@property (nonatomic, strong, readonly)         MSClient *client;\n\n//@property (nonatomic) MSSystemProperties systemProperties;\n///@}\n\n///@name Initializing the MSTable Object\n///@{\n\n/// Initializes an *MSTable* instance with the given name and client.\n-(id)initWithName:(NSString *)tableName client:(MSClient *)client;\n\n///@}\n\n///@name Modifying Items\n///@{\n\n/// Sends a request to the MSSyncContext's data source to upsert the given\n/// item into the local store. In addition queues a request to send the insert\n/// to the mobile service.\n-(void)insert:(NSDictionary *)item completion:(MSSyncItemBlock)completion;\n\n/// Sends a request to the MSSyncContext's data source to upsert the given\n/// item into the local store. In addition queues a request to send the update\n/// to the mobile service.\n-(void)update:(NSDictionary *)item completion:(MSSyncBlock)completion;\n\n/// Sends a request to the MSSyncContext's data source to delete the given\n/// item in the local store. In addition queues a request to send the delete\n/// to the mobile service.\n-(void)delete:(NSDictionary *)item completion:(MSSyncBlock)completion;\n\n///@}\n\n\n#pragma mark * Public Read Methods\n\n///@name Retreiving Local Items\n///@{\n\n/// Sends a request to the Windows Azure Mobile Service to return the item\n/// with the given id from the table.\n-(void)readWithId:(NSString *)itemId completion:(MSItemBlock)completion;\n\n/// Sends a request to the Windows Azure Mobile Service to return all items\n/// from the table. The Windows Azure Mobile Service will apply a default\n/// limit to the number of items returned.\n-(void)readWithCompletion:(MSReadQueryBlock)completion;\n\n/// Sends a request to the Windows Azure Mobile Service to return all items\n/// from the table that meet the conditions of the given predicate.\n-(void)readWithPredicate:(NSPredicate *)predicate\n              completion:(MSReadQueryBlock)completion;\n\n#pragma mark * Public Query Constructor Methods\n\n/// Returns an *MSQuery* instance associated with the table that can be\n/// configured and then executed to retrieve items from the table. An *MSQuery*\n/// instance provides more flexibilty when querying a table than the table\n/// read* methods.\n-(MSQuery *)query;\n\n/// Returns an *MSQuery* instance associated with the table that uses\n/// the given predicate. An *MSQuery* instance provides more flexibilty when\n/// querying a table than the table read* methods.\n-(MSQuery *)queryWithPredicate:(NSPredicate *)predicate;\n\n/// @}\n\n/// @name Managing local storage\n/// @{\n\n/// Initiates a request to go to the server and get a set of records matching the specified\n/// MSQuery object.\n/// Before a pull is allowed to run, one operation to send all pending requests on the\n/// specified table will be sent to the server. If a pending request for this table fails,\n/// the pull will be cancelled\n-(NSOperation *)pullWithQuery:(MSQuery *)query queryId:(NSString *)queryId completion:(MSSyncBlock)completion;\n\n/// Initiates a request to go to the server and get a set of records matching the specified\n/// MSQuery object.\n/// Before a pull is allowed to run, one operation to send all pending requests on the\n/// specified table will be sent to the server. If a pending request for this table fails,\n/// the pull will be cancelled\n-(NSOperation *)pullWithQuery:(MSQuery *)query queryId:(NSString *)queryId settings:(MSPullSettings *)pullSettings completion:(MSSyncBlock)completion;\n\n/// Removes all records in the local cache that match the results of the specified query.\n/// If query is nil, all records in the local table will be removed.\n/// Before local data is removed, a check will be made for pending operations on this table. If\n/// any are found the purge will be cancelled and an error returned.\n-(NSOperation *)purgeWithQuery:(MSQuery *)query completion:(MSSyncBlock)completion;\n\n/// Purges all data, pending operations, operation errors, and metadata for the\n/// MSSyncTable from the local cache.\n-(NSOperation *)forcePurgeWithCompletion:(MSSyncBlock)completion;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSSyncTable.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSQuery.h\"\n#import \"MSSyncTable.h\"\n#import \"MSClientInternal.h\"\n#import \"MSTableOperation.h\"\n#import \"MSSyncContextInternal.h\"\n\n@implementation MSSyncTable\n\n\n#pragma mark * Public Initializer Methods\n\n\n-(id) initWithName:(NSString *)tableName client:(MSClient *)client;\n{\n    NSAssert(client.syncContext != nil, @\"Client must have an initialized MSSyncContext\");\n\n    self = [super init];\n    if (self)\n    {\n        _client = client;\n        _name = tableName;\n    }\n    \n    return self;\n}\n\n\n#pragma mark * Public Insert, Update, Delete Methods\n\n\n-(void)insert:(NSDictionary *)item completion:(MSSyncItemBlock)completion\n{\n    [self.client.syncContext syncTable:self.name item:item action:MSTableOperationInsert completion:completion];\n}\n\n-(void)update:(NSDictionary *)item completion:(MSSyncBlock)completion\n{\n    [self.client.syncContext syncTable:self.name item:item action:MSTableOperationUpdate completion:^(NSDictionary *item, NSError *error) {\n        if (completion) {\n            completion(error);\n        }\n    }];\n}\n\n-(void)delete:(NSDictionary *)item completion:(MSSyncBlock)completion\n{\n    [self.client.syncContext syncTable:self.name item:item action:MSTableOperationDelete completion:^(NSDictionary *item, NSError *error) {\n        if (completion) {\n            completion(error);\n        }\n    }];\n}\n\n\n#pragma mark * Public Local Storage Management commands\n\n\n-(NSOperation *)pullWithQuery:(MSQuery *)query queryId:(NSString *)queryId completion:(MSSyncBlock)completion\n{\n    return [self pullWithQuery:query queryId:queryId settings:nil completion:completion];\n}\n\n-(NSOperation *)pullWithQuery:(MSQuery *)query queryId:(NSString *)queryId settings:(id)pullSettings completion:(MSSyncBlock)completion\n{\n    return [self.client.syncContext pullWithQuery:query queryId:queryId settings:pullSettings completion:completion];\n}\n\n-(NSOperation *)purgeWithQuery:(MSQuery *)query completion:(MSSyncBlock)completion\n{\n    // If no query, purge all records in the table by default\n    if (query == nil) {\n        MSQuery *allRecords = [[MSQuery alloc] initWithSyncTable:self];\n        return [self.client.syncContext purgeWithQuery:allRecords completion:completion];\n        \n    } else {\n        return [self.client.syncContext purgeWithQuery:query completion:completion];\n    }\n}\n\n/// Purges all data, pending operations, operation errors, and metadata for the\n/// MSSyncTable from the local store.\n-(NSOperation *)forcePurgeWithCompletion:(MSSyncBlock)completion\n{\n    return [self.client.syncContext forcePurgeWithTable:self completion:completion];\n}\n\n#pragma mark * Public Read Methods\n\n\n-(void)readWithId:(NSString *)itemId completion:(MSItemBlock)completion\n{\n    [self.client.syncContext syncTable:self.name readWithId:itemId completion:completion];\n}\n\n-(void)readWithCompletion:(MSReadQueryBlock)completion\n{\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:self];\n    [query readWithCompletion:completion];\n}\n\n-(void)readWithPredicate:(NSPredicate *)predicate completion:(MSReadQueryBlock)completion\n{\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:self predicate:predicate];\n    [query readWithCompletion:completion];\n}\n\n\n#pragma mark * Public Query Methods\n\n\n-(MSQuery *)query {\n    return [[MSQuery alloc] initWithSyncTable:self];\n}\n\n-(MSQuery *)queryWithPredicate:(NSPredicate *)predicate\n{\n    return [[MSQuery alloc] initWithSyncTable:self predicate:predicate];\n}\n\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSTable.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n#import \"MSQueryResult.h\"\n\n@class MSQuery;\n\n#pragma mark * Block Type Definitions\n\n/// Callback for updates, inserts or readWithId requests. If there was an\n/// error, the *error* will be non-nil.\ntypedef void (^MSItemBlock)(NSDictionary *item, NSError *error);\n\n/// Callback for deletes. If there was an error, the *error* will be non-nil.\ntypedef void (^MSDeleteBlock)(id itemId, NSError *error);\n\n/// Callback for reads. If there was an error, the *error* will be non-nil. If\n/// there was not an error, then the result will always be non-nil\n/// but but items may be empty if the query returned no results. If the query included a\n/// request for the total count of items on the server (not just those returned\n/// in *items* array), the *totalCount* in the result will have this value; otherwise\n/// *totalCount* will be -1.\n/// if the server returned a link to next page of results then\n/// nextLink will be non-nil.\ntypedef void (^MSReadQueryBlock)(MSQueryResult *result,\n                                 NSError *error);\n\ntypedef NS_OPTIONS(NSUInteger, MSSystemProperties) {\n    MSSystemPropertyNone        = 0,\n    MSSystemPropertyCreatedAt   = 1 << 0,\n    MSSystemPropertyUpdatedAt   = 1 << 1,\n    MSSystemPropertyVersion     = 1 << 2,\n    MSSystemPropertyDeleted     = 1 << 3,\n    MSSystemPropertyAll         = 0xFFFF\n};\n\nextern NSString *const MSSystemColumnId;\nextern NSString *const MSSystemColumnCreatedAt;\nextern NSString *const MSSystemColumnUpdatedAt;\nextern NSString *const MSSystemColumnVersion;\nextern NSString *const MSSystemColumnDeleted;\n\n#pragma mark * MSTable Public Interface\n\n\n/// The *MSTable* class represents a table of a Windows Azure Mobile Service.\n/// The *MSTable* class represents a table of a Microsoft Azure Mobile Service.\n/// Items can be inserted, updated, deleted and read from the table. The table\n/// can also be queried to retrieve an array of items that meet the given query\n/// conditions. All table operations result in a request to the Windows Azure\n/// conditions. All table operations result in a request to the Microsoft Azure\n/// Mobile Service to perform the given operation.\n@interface MSTable : NSObject\n\n\n#pragma mark * Public Readonly Properties\n\n///@name Properties\n///@{\n\n/// The name of this table.\n@property (nonatomic, copy, readonly)           NSString *name;\n\n/// The client associated with this table.\n@property (nonatomic, strong, readonly)         MSClient *client;\n\n@property (nonatomic) MSSystemProperties systemProperties;\n///@}\n\n#pragma mark * Public Initializers\n\n///@name Initializing the MSTable Object\n///@{\n\n/// Initializes an *MSTable* instance with the given name and client.\n-(id)initWithName:(NSString *)tableName client:(MSClient *)client;\n\n///@}\n\n#pragma mark * Public Insert, Update and Delete Methods\n\n///@name Modifying Items\n///@{\n\n/// Sends a request to the Microsoft Azure Mobile Service to insert the given\n/// item into the table. The item must not have an id.\n-(void)insert:(NSDictionary *)item completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to insert the given\n/// item into the table. Addtional user-defined parameters are sent in the\n/// request query string. The item must not have an id.\n-(void)insert:(NSDictionary *)item\n   parameters:(NSDictionary *)parameters\n   completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to update the given\n/// item in the table. The item must have an id.\n-(void)update:(NSDictionary *)item completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to update the given\n/// item in the table. Addtional user-defined parameters are sent in the\n/// request query string. The item must have an id.\n-(void)update:(NSDictionary *)item\n   parameters:(NSDictionary *)parameters\n   completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the given\n/// item from the table. The item must have an id.\n-(void)delete:(NSDictionary *)item completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the given\n/// item from the table. Addtional user-defined parameters are sent in the\n/// request query string. The item must have an id.\n-(void)delete:(NSDictionary *)item\n   parameters:(NSDictionary *)parameters\n   completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the item\n/// with the given id in from table.\n-(void)deleteWithId:(id)itemId completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the item\n/// with the given id in from table. Addtional user-defined parameters are\n/// sent in the request query string.\n-(void)deleteWithId:(id)itemId\n         parameters:(NSDictionary *)parameters\n         completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Azure Mobile Service to undelete the item\n/// with the given id in from table.\n-(void)undelete:(NSDictionary *)item completion:(MSItemBlock)completion;\n\n/// Sends a request to the Azure Mobile Service to undelete the item\n/// with the given id in from table. Addtional user-defined parameters are\n/// sent in the request query string.\n-(void)undelete:(NSDictionary *)item\n     parameters:(NSDictionary *)parameters\n     completion:(MSItemBlock)completion;\n\n///@}\n\n#pragma mark * Public Read Methods\n\n///@name Retreiving Items\n///@{\n\n/// Sends a request to the Microsoft Azure Mobile Service to return the item\n/// with the given id from the table.\n-(void)readWithId:(id)itemId completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return the item\n/// with the given id from the table. Addtional user-defined parameters are\n/// sent in the request query string.\n-(void)readWithId:(id)itemId\n       parameters:(NSDictionary *)parameters\n       completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// fromm the table that meet the conditions of the given query.\n/// You can also use a URI in place of queryString to fetch results from a URI e.g.\n/// result.nextLink gives you URI to next page of results for a query that you can pass here.\n-(void)readWithQueryString:(NSString *)queryString\n                completion:(MSReadQueryBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// from the table. The Microsoft Azure Mobile Service will apply a default\n/// limit to the number of items returned.\n-(void)readWithCompletion:(MSReadQueryBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// from the table that meet the conditions of the given predicate.\n-(void)readWithPredicate:(NSPredicate *) predicate\n      completion:(MSReadQueryBlock)completion;\n\n#pragma mark * Public Query Constructor Methods\n\n\n/// Returns an *MSQuery* instance associated with the table that can be\n/// configured and then executed to retrieve items from the table. An *MSQuery*\n/// instance provides more flexibilty when querying a table than the table\n/// read* methods.\n-(MSQuery *)query;\n\n/// Returns an *MSQuery* instance associated with the table that uses\n/// the given predicate. An *MSQuery* instance provides more flexibilty when\n/// querying a table than the table read* methods.\n-(MSQuery *)queryWithPredicate:(NSPredicate *)predicate;\n\n///@}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSTable.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSClientInternal.h\"\n#import \"MSTable.h\"\n#import \"MSQuery.h\"\n#import \"MSJSONSerializer.h\"\n#import \"MSTableRequest.h\"\n#import \"MSTableConnection.h\"\n#import \"MSSDKFeatures.h\"\n#import \"MSTableInternal.h\"\n\n#pragma mark * MSTable Implementation\n\nNSString *const MSSystemColumnId = @\"id\";\nNSString *const MSSystemColumnCreatedAt = @\"__createdAt\";\nNSString *const MSSystemColumnUpdatedAt = @\"__updatedAt\";\nNSString *const MSSystemColumnVersion = @\"__version\";\nNSString *const MSSystemColumnDeleted = @\"__deleted\";\n\n@implementation MSTable\n\n@synthesize client = client_;\n@synthesize name = name_;\n@synthesize features = features_;\n\n#pragma mark * Public Initializer Methods\n\n\n-(id) initWithName:(NSString *)tableName client:(MSClient *)client;\n{    \n    self = [super init];\n    if (self)\n    {\n        client_ = client;\n        name_ = tableName;\n        features_ = MSFeatureNone;\n    }\n    return self;\n}\n\n\n#pragma mark * Public Insert, Update, Delete Methods\n\n\n-(void) insert:(NSDictionary *)item completion:(MSItemBlock)completion\n{\n    [self insert:item parameters:nil completion:completion];\n}\n\n-(void) insert:(NSDictionary *)item\n    parameters:(NSDictionary *)parameters\n    completion:(MSItemBlock)completion\n{\n    // Create the request\n    MSTableItemRequest *request = [MSTableRequest\n                                   requestToInsertItem:item\n                                   table:self\n                                   parameters:parameters\n                                   features:self.features\n                                   completion:completion];\n    // Send the request\n    if (request) {\n        MSTableConnection *connection =\n            [MSTableConnection connectionWithItemRequest:request\n                                              completion:completion];\n        [connection start];\n    }\n}\n\n-(void) update:(NSDictionary *)item completion:(MSItemBlock)completion\n{\n    [self update:item parameters:nil completion:completion];\n}\n\n-(void) update:(NSDictionary *)item\n    parameters:(NSDictionary *)parameters\n    completion:(MSItemBlock)completion\n{    \n    MSTableItemRequest *request = [MSTableRequest\n                                   requestToUpdateItem:item\n                                   table:self\n                                   parameters:parameters\n                                   features:self.features\n                                   completion:completion];\n    \n    // Send the request\n    if (request) {        \n        MSTableConnection *connection =\n            [MSTableConnection connectionWithItemRequest:request\n                                              completion:completion];\n        [connection start];\n    }\n}\n\n-(void) delete:(NSDictionary *)item completion:(MSDeleteBlock)completion\n{\n    [self delete:item parameters:nil completion:completion];\n}\n\n-(void) delete:(NSDictionary *)item\n    parameters:(NSDictionary *)parameters\n    completion:(MSDeleteBlock)completion\n{\n    // Create the request\n    MSTableDeleteRequest *request = [MSTableRequest\n                                     requestToDeleteItem:item\n                                     table:self\n                                     parameters:parameters\n                                     features:self.features\n                                     completion:completion];\n    // Send the request\n    if (request) {\n        MSTableConnection *connection =\n            [MSTableConnection connectionWithDeleteRequest:request\n                                                completion:completion];\n        [connection start];\n    }\n}\n\n-(void) deleteWithId:(id)itemId completion:(MSDeleteBlock)completion\n{\n    [self deleteWithId:itemId parameters:nil completion:completion];\n}\n\n-(void) deleteWithId:(id)itemId\n          parameters:(NSDictionary *)parameters\n          completion:(MSDeleteBlock)completion\n{\n    // Create the request\n    MSTableDeleteRequest *request = [MSTableRequest\n                                     requestToDeleteItemWithId:itemId\n                                     table:self\n                                     parameters:parameters\n                                     features:self.features\n                                     completion:completion];\n    // Send the request\n    if (request) {\n        MSTableConnection *connection = \n            [MSTableConnection connectionWithDeleteRequest:request\n                                                completion:completion];\n        [connection start];\n    }\n}\n\n-(void)undelete:(NSDictionary *)item completion:(MSItemBlock)completion\n{\n    [self undelete:item parameters:nil completion:completion];\n}\n\n-(void)undelete:(NSDictionary *)item\n        parameters:(NSDictionary *)parameters\n        completion:(MSItemBlock)completion\n{\n    // Create the request\n    MSTableItemRequest *request = [MSTableRequest\n                                     requestToUndeleteItem:item\n                                     table:self\n                                     parameters:parameters\n                                   features:self.features\n                                     completion:completion];\n                                     \n    // Send the request\n    if (request) {\n        MSTableConnection *connection =\n        [MSTableConnection connectionWithItemRequest:request\n                                          completion:completion];\n        [connection start];\n    }\n    \n}\n\n\n#pragma mark * Public Read Methods\n\n\n-(void) readWithId:(id)itemId completion:(MSItemBlock)completion\n{\n    [self readWithId:itemId parameters:nil completion:completion];\n}\n\n-(void) readWithId:(id)itemId\n        parameters:(NSDictionary *)parameters\n        completion:(MSItemBlock)completion\n{\n    // Create the request\n    MSTableItemRequest *request = [MSTableRequest\n                                   requestToReadWithId:itemId\n                                   table:self\n                                   parameters:parameters\n                                   completion:completion];\n    // Send the request\n    if (request) {\n        MSTableConnection *connection =\n            [MSTableConnection connectionWithItemRequest:request\n                                              completion:completion];\n        [connection start];\n    }\n}\n\n-(void) readWithQueryString:(NSString *)queryString\n                 completion:(MSReadQueryBlock)completion\n{\n    return [self readWithQueryStringInternal:queryString features:MSFeatureTableReadRaw completion:completion];\n}\n\n-(void)readWithQueryStringInternal:(NSString *)queryString\n                          features:(MSFeatures)features\n                        completion:(MSReadQueryBlock)completion {\n    // Create the request\n    MSTableReadQueryRequest *request = [MSTableRequest\n                                        requestToReadItemsWithQuery:queryString\n                                        table:self\n                                        features:features\n                                        completion:completion];\n    // Send the request\n    if (request) {\n        MSTableConnection *connection =\n        [MSTableConnection connectionWithReadRequest:request\n                                          completion:completion];\n        [connection start];\n    }\n}\n\n-(void) readWithCompletion:(MSReadQueryBlock)completion\n{\n    // Read without a query string\n    [self readWithQueryStringInternal:nil features:self.features completion:completion];\n}\n\n-(void) readWithPredicate:(NSPredicate *) predicate\n            completion:(MSReadQueryBlock)completion\n{\n    // Create the query from the predicate\n    MSQuery *query = [self queryWithPredicate:predicate];\n    \n    // Call read on the query\n    [query readWithCompletion:completion];\n}\n\n\n#pragma mark * Public Query Methods\n\n\n-(MSQuery *) query\n{\n    return [[MSQuery alloc] initWithTable:self];\n}\n\n-(MSQuery *) queryWithPredicate:(NSPredicate *)predicate\n{\n    return [[MSQuery alloc] initWithTable:self predicate:predicate];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSTableConfigValue.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\ntypedef NS_ENUM(NSUInteger, MSConfigKeyTypes) {\n    MSConfigKeyDeltaToken = 0\n};\n\n/// The *MSTableConfigValue* class represents internal configuration values used by the\n/// sync operations to maintain state.\n@interface MSTableConfigValue : NSObject\n\n///@name Properties\n///@{\n\n/// Unique identifier for the config value\n@property (nonatomic, copy) NSString *id;\n\n/// The name of the table the config value is for\n@property (nonatomic, copy) NSString *table;\n\n/// The type of key\n@property (nonatomic) MSConfigKeyTypes keyType;\n\n/// The key\n@property (nonatomic, copy) NSString *key;\n\n/// The value\n@property (nonatomic, copy) NSString *value;\n\n///@}\n\n/// @name Initializing the MSTableConfigValue Object\n/// @{\n\n/// Initializes the table config value from a serialized representation of a MSTableConfigValue.\n- (id) initWithSerializedItem:(NSDictionary *)item;\n\n///@}\n\n/// @name Serializing the MSTableConfigValue Object\n/// @{\n\n/// Returns an NSDictionary with two keys, id and properties, where properties contains a serialized version\n/// of the error\n- (NSDictionary *) serialize;\n\n/// @}\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSTableConfigValue.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSTableConfigValue.h\"\n#import \"MSJSONSerializer.h\"\n#import \"MSError.h\"\n\n@implementation MSTableConfigValue\n\n#pragma mark - Initialization\n\n- (id) init {\n    self = [super init];\n    if (self) {\n        _id = [MSJSONSerializer generateGUID];\n    }\n    return self;\n}\n\n- (id) initWithSerializedItem:(NSDictionary *)item\n{\n    self = [self init];\n    if (self) {\n        _id = [item objectForKey:@\"id\"];\n        _table = [item objectForKey:@\"table\"];\n        _keyType = [[item objectForKey:@\"keyType\"] integerValue];\n        _key = [item objectForKey:@\"key\"];\n        _value = [item objectForKey:@\"value\"];\n    }\n    return self;\n}\n\n- (NSDictionary *) serialize\n{\n    return @{ @\"id\": self.id, @\"table\": self.table, @\"keyType\": [NSNumber numberWithInteger:self.keyType], @\"key\": self.key, @\"value\": self.value };\n}\n\n@end\n\n\n"
  },
  {
    "path": "sdk/iOS/src/MSTableConnection.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClientConnection.h\"\n#import \"MSTable.h\"\n#import \"MSTableRequest.h\"\n\n#pragma  mark * MSTableConnection Public Interface\n\n\n// The |MSTableConnection| class is a subclass of the |MSClientConnection|\n// that takes |MSTableRequest| instances and the appropriate |MS*SuccessBlock|\n// instances for calling back into when the response is received.\n@interface MSTableConnection : MSClientConnection\n\n\n#pragma mark * Public Readonly Properties\n\n\n// The table associated with the connection.\n@property (nonatomic, strong, readonly)     MSTable *table;\n\n\n#pragma  mark * Public Static Constructor Methods\n\n\n// Creates a connection for an update, insert, or readWithId request.\n// NOTE: The request is not sent until |start| is called.\n+(MSTableConnection *)connectionWithItemRequest:(MSTableItemRequest *)request\n                                     completion:(MSItemBlock)completion;\n\n// Creates a connection for a delete request. NOTE: The request is not sent\n// until |start| is called.\n+(MSTableConnection *)connectionWithDeleteRequest:(MSTableDeleteRequest *)request\n                                       completion:(MSDeleteBlock)completion;\n\n// Creates a connection for read with query request. NOTE: The request is not\n// sent until |start| is called.\n+(MSTableConnection *)connectionWithReadRequest:(MSTableReadQueryRequest *)request\n                                     completion:(MSReadQueryBlock)completion;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSTableConnection.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSTableConnection.h\"\n#import \"MSSerializer.h\"\n#import \"MSQueryResult.h\"\n#import \"MSClientInternal.h\"\n\n// next link is the format \"http://contoso.com; rel=next\"\nstatic NSString *const nextLinkPattern = @\"^(.*?);\\\\s*rel\\\\s*=\\\\s*(\\\\w+)\\\\s*\"; // $1; rel = $2\n\n#pragma mark * MSTableConnection Implementation\n\n\n@implementation MSTableConnection\n\n@synthesize table = table_;\n\n\n#pragma mark * Public Static Constructors\n\n\n+(MSTableConnection *) connectionWithItemRequest:(MSTableItemRequest *)request\n                                      completion:(MSItemBlock)completion\n{\n    // We'll use the conection in the response block below but won't set\n    // it until the init at the end, so we need to use __block\n    __block MSTableConnection *connection = nil;\n    \n    // Create an HTTP response block that will invoke the MSItemBlock\n    MSResponseBlock responseCompletion = nil;\n    \n    if (completion) {\n    \n        responseCompletion = \n        ^(NSHTTPURLResponse *response, NSData *data, NSError *error)\n        {\n            id item = nil;\n            \n            if (!error) {                \n                [connection isSuccessfulResponse:response\n                                        data:data\n                                         orError:&error];\n                \n                if (!error)\n                {\n                    item = [connection itemFromData:data\n                                           response:response\n                                   ensureDictionary:YES\n                                            orError:&error];\n                } else if (response && response.statusCode == 412) {\n                    error = [self handleConflictResponse:response data:data connection:connection];\n                }\n                \n                if (response && item && !error) {                    \n                    // Add version to item is header is present\n                    NSString *version = [[response allHeaderFields] objectForKey:@\"Etag\"];\n                    if (version) {\n                        if(version.length > 1 && [version characterAtIndex:0] == '\\\"' && [version characterAtIndex:version.length-1] == '\\\"') {\n                            NSRange range = { 1, version.length - 2 };\n                            version = [version substringWithRange:range];\n                        }\n                        [item setValue:[version stringByReplacingOccurrencesOfString:@\"\\\\\\\"\" withString:@\"\\\"\"] forKey:MSSystemColumnVersion];\n                    }\n                    \n                    // Remove unasked for system columns\n                    [MSTableConnection removeSystemColumnsFromItem:item ifNotInQuery:response.URL.query];\n                }\n            }\n            \n            [connection addRequestAndResponse:response toError:&error];\n            completion(item, error);\n            connection = nil;\n        };\n    }\n    \n    // Now create the connection with the MSResponseBlock\n    connection = [[MSTableConnection alloc] initWithTableRequest:request\n                                                      completion:responseCompletion];\n    return connection;\n}\n\n+(MSTableConnection *) connectionWithDeleteRequest:(MSTableDeleteRequest *)request\n                                        completion:(MSDeleteBlock)completion\n{\n    // We'll use the conection in the response block below but won't set\n    // it until the init at the end, so we need to use __block\n    __block MSTableConnection *connection = nil;\n    \n    // Create an HTTP response block that will invoke the MSDeleteBlock\n    MSResponseBlock responseCompletion = nil;\n    \n    if (completion) {\n    \n        responseCompletion =\n        ^(NSHTTPURLResponse *response, NSData *data, NSError *error)\n        {\n            \n            if (!error) {\n                [connection isSuccessfulResponse:response\n                                        data:data\n                                         orError:&error];\n                \n                if (error && response && response.statusCode == 412) {\n                    error = [self handleConflictResponse:response data:data connection:connection];\n                }\n            }\n            \n            if (error) {\n                [connection addRequestAndResponse:response toError:&error];\n                completion(nil, error);\n            }\n            else {\n                completion(request.itemId, nil);\n            }\n            connection = nil;\n        };\n    }\n    \n    // Now create the connection with the MSResponseBlock\n    connection = [[MSTableConnection alloc] initWithTableRequest:request\n                                                      completion:responseCompletion];\n    return connection;\n\n}\n                                      \n+(MSTableConnection *) connectionWithReadRequest:(MSTableReadQueryRequest *)request\n                                      completion:(MSReadQueryBlock)completion\n{\n    // We'll use the conection in the response block below but won't set\n    // it until the init at the end, so we need to use __block\n    __block MSTableConnection *connection = nil;\n    \n    // Create an HTTP response block that will invoke the MSReadQueryBlock\n    MSResponseBlock responseCompletion = nil;\n    \n    if (completion) {\n    \n        responseCompletion =\n        ^(NSHTTPURLResponse *response, NSData *data, NSError *error)\n        {\n            NSArray *items = nil;\n            NSInteger totalCount = -1;\n            \n            if (!error) {\n                \n                [connection isSuccessfulResponse:response\n                                        data:data\n                                         orError:&error];\n                if (!error) {\n                    totalCount = [connection items:&items\n                                          fromData:data\n                                      withResponse:response\n                                           orError:&error];\n                }\n            }\n            \n            [connection addRequestAndResponse:response toError:&error];\n\n            NSString *nextLink = [MSTableConnection parseNextLink:response];\n        \n            MSQueryResult *result = [[MSQueryResult alloc] initWithItems:items totalCount:totalCount nextLink:nextLink];\n            completion(result, error);\n            connection = nil;\n        };\n    }\n    \n    // Now create the connection with the MSSuccessBlock\n    connection = [[MSTableConnection alloc] initWithTableRequest:request\n                                                      completion:responseCompletion];\n    return connection;\n}\n\n# pragma mark * Private Static Methods\n\n+(NSString*) parseNextLink:(NSHTTPURLResponse *) response\n{\n    NSString *nextLink = nil;\n    \n    NSString *link = response.allHeaderFields[@\"Link\"];\n    if (link) {\n        NSRegularExpression *regEx = [NSRegularExpression regularExpressionWithPattern:nextLinkPattern\n                                                                               options:0\n                                                                               error:nil];\n        \n        if (regEx) {\n            NSTextCheckingResult *match = [regEx firstMatchInString:link options:0 range:NSMakeRange(0, link.length)];\n            if (match) {\n                NSString *linkUri = [link substringWithRange:[match rangeAtIndex:1]];\n                NSString *linkRel = [link substringWithRange:[match rangeAtIndex:2]];\n                if ([linkRel isEqualToString:@\"next\"]){\n                    nextLink = linkUri;\n                }\n            }\n        }\n    }\n    \n    return nextLink;\n}\n\n+ (NSError *)handleConflictResponse:(NSHTTPURLResponse *)response data:(NSData *)data connection:(MSTableConnection *)connection\n{\n    NSError *error;\n    NSError *serverItemError;\n    NSDictionary *serverItem = [connection itemFromData:data\n                                               response:response\n                                       ensureDictionary:YES\n                                                orError:&serverItemError];\n    \n    // Only override default error if response was a valid item\n    if (!serverItemError) {\n        NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : @\"The server's version did not match the passed version\",\n                                    MSErrorServerItemKey: serverItem };\n        error = [NSError errorWithDomain:MSErrorDomain code:MSErrorPreconditionFailed userInfo:userInfo];\n    }\n    return error;\n}\n\n\n# pragma mark * Private Init Methods\n\n\n-(id) initWithTableRequest:(MSTableRequest *)request\n                 completion:(MSResponseBlock)completion\n{\n    self = [super initWithRequest:request\n                       client:request.table.client\n                        completion:completion];\n    \n    if (self) {\n        table_ = request.table;\n    }\n    \n    return self;\n}\n\n\n# pragma mark * Private Methods\n\n\n-(NSInteger) items:(NSArray **)items\n                fromData:(NSData *)data\n                withResponse:(NSHTTPURLResponse *)response\n                orError:(NSError **)error\n{\n    // Try to deserialize the data\n    NSInteger totalCount = [self.client.serializer totalCountAndItems:items\n                                                             fromData:data\n                                                              orError:error];\n    \n    // If there was an error, add the request and response\n    if (error && *error) {\n        [self addRequestAndResponse:response toError:error];\n    }\n    \n    return totalCount;\n}\n\n+(void) removeSystemColumnsFromItem:(NSMutableDictionary *)item ifNotInQuery:(NSString *)query\n{\n    // Do nothing for non-string Ids\n    if(![item[@\"id\"] isKindOfClass:[NSString class]]) {\n        return;\n    }\n    \n    NSString *requestedSystemProperties = nil;\n    NSRange range = [query rangeOfString:@\"__systemProperties=\" options:NSCaseInsensitiveSearch];\n    \n    if(query && range.location != NSNotFound)\n    {\n        requestedSystemProperties = [query substringFromIndex:range.location + range.length];\n        NSRange endOfSystemProperties = [query rangeOfString:@\"&\" options:NSCaseInsensitiveSearch];\n        if (endOfSystemProperties.location != NSNotFound) {\n            requestedSystemProperties = [query substringToIndex:endOfSystemProperties.location];\n        }\n    }\n    \n    requestedSystemProperties = [requestedSystemProperties stringByRemovingPercentEncoding];\n    \n    if (requestedSystemProperties && [requestedSystemProperties rangeOfString:@\"*\"].location != NSNotFound) {\n        return;\n    }\n    \n    NSSet *systemProperties = [item keysOfEntriesPassingTest:^BOOL(NSString *key, id obj, BOOL *stop) {\n        return [key hasPrefix:@\"__\"];\n    }];\n    \n    for (NSString *systemProperty in systemProperties) {\n        [MSTableConnection removeSystemColumn:systemProperty fromItem:item ifNotInQuery:requestedSystemProperties];\n    }\n}\n\n+(void) removeSystemColumn:(NSString *)systemColumnName fromItem:(NSMutableDictionary *)item ifNotInQuery:(NSString *)query\n{\n    NSString *shortName = [systemColumnName substringFromIndex:2]; // Remove \"__\"\n    if (item[systemColumnName] != nil) {\n        if (!query || [query rangeOfString:shortName options:NSCaseInsensitiveSearch].location == NSNotFound) {\n            [item removeObjectForKey:systemColumnName];\n        }\n    }\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSTableInternal.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#include \"MSTable.h\"\n#include \"MSSDKFeatures.h\"\n\n@interface MSTable ()\n\n/// Features headers which should be sent for all requests from this table\n@property (nonatomic) MSFeatures features;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// from the table that meet the conditions of the given query, adding a features\n/// header used for telemetry on the features used by this SDK.\n-(void)readWithQueryStringInternal:(NSString *)queryString\n                          features:(MSFeatures)features\n                        completion:(MSReadQueryBlock)completion;\n\n@end"
  },
  {
    "path": "sdk/iOS/src/MSTableOperation.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSUser.h\"\n\n/// The *MSTableOperation* object represents a pending operation that was created by an earlier\n/// call using the *MSSyncTable* object. This is a wrapper to facilitae sending the operation\n/// to the server, handling any errors, and getting the appropriate local versions updated on\n/// completion\n@interface MSTableOperation : NSObject\n\n/// The types of operations possible to perform.\ntypedef NS_OPTIONS(NSUInteger, MSTableOperationTypes) {\n    MSTableOperationInsert = 0,\n    MSTableOperationUpdate,\n    MSTableOperationDelete\n};\n\n#pragma mark * Public Readonly Properties\n\n///@name Properties\n///@{\n\n/// The action that should be taken for this table item, for example\n/// insert or update.\n@property (nonatomic, readonly) MSTableOperationTypes type;\n\n/// The name of the table associated with the item\n@property (nonatomic, copy, readonly) NSString *tableName;\n\n/// The Id of the item the operation should run on.\n@property (nonatomic, copy, readonly) NSString *itemId;\n\n/// The item that will be sent to the server when execute is called.\n@property (nonatomic, strong) NSDictionary *item;\n\n/// @}\n\n///@name Sending an operation to the Mobile Service\n///@{\n\n/// Perform's the associated PushOperationType (insert, etc) for the table item.\n/// The callback will be passed the result (an item on insert/update, and the string\n/// id on a delete) or the error from the mobile service.\n-(void) executeWithCompletion:(void(^)(id itemOrItemId, NSError *error))completion;\n\n/// @}\n\n/// @name Canceling a Push operation\n/// @{\n- (void) cancelPush;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSTableOperation.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSTableOperation.h\"\n#import \"MSTableOperationInternal.h\"\n#import \"MSClient.h\"\n#import \"MSTable.h\"\n#import \"MSTableInternal.h\"\n#import \"MSJSONSerializer.h\"\n\n@implementation MSTableOperation\n\n@synthesize operationId = operationId_;\n@synthesize type = type_;\n@synthesize tableName = tableName_;\n@synthesize itemId = itemId_;\n@synthesize item = item_;\n\n+(MSTableOperation *) pushOperationForTable:(NSString *)tableName\n                                      type:(MSTableOperationTypes)type\n                                      itemId:(NSString *)itemId;\n{\n    return [[MSTableOperation alloc] initWithTable:tableName type:type itemId:itemId];\n}\n\n-(id) initWithTable:(NSString *)tableName\n               type:(MSTableOperationTypes)type\n               itemId:(NSString *)itemId;\n{\n    self = [super init];\n    if (self)\n    {\n        type_ = type;\n        tableName_ = [tableName copy];\n        itemId_ = [itemId copy];\n    }\n    \n    return self;\n}\n\n-(id) initWithItem:(NSDictionary *)item\n{\n    self = [super init];\n    if (self) {\n        NSData *data = [item objectForKey:@\"properties\"];\n        MSJSONSerializer *serializer = [MSJSONSerializer new];\n        \n        NSDictionary *rawItem = [serializer itemFromData:data withOriginalItem:nil ensureDictionary:YES orError:nil];\n        \n        type_ = [[rawItem objectForKey:@\"type\"] integerValue];\n        itemId_ = [item objectForKey:@\"itemId\"];\n        tableName_ = [item objectForKey:@\"table\"];\n        operationId_ = [[item objectForKey:@\"id\"] integerValue];\n        \n        item_ = [rawItem objectForKey:@\"item\"];\n    }\n    return self;\n}\n\n-(NSDictionary *) serialize\n{\n    NSDictionary *properties;\n    if (self.type == MSTableOperationDelete && self.item) {\n        properties = @{ @\"type\": [NSNumber numberWithInteger:self.type],\n                        @\"item\": self.item };\n    } else {\n        properties = @{ @\"type\": [NSNumber numberWithInteger:self.type] };\n    }\n    \n    MSJSONSerializer *serializer = [MSJSONSerializer new];\n    NSData *data = [serializer dataFromItem:properties idAllowed:YES ensureDictionary:NO removeSystemProperties:NO orError:nil];\n    \n    return @{ @\"id\": [NSNumber numberWithInteger:self.operationId], @\"table\": self.tableName, @\"tableKind\": @0, @\"itemId\": self.itemId, @\"properties\": data };\n}\n\n- (void) executeWithCompletion:(void(^)(id, NSError *))completion\n{\n    MSTable *table = [self.client tableWithName:self.tableName];\n    table.features = MSFeatureOffline;\n    \n    if ([self.dataSource respondsToSelector:@selector(systemPropertiesForTable:)]) {\n        table.systemProperties = [self.dataSource systemPropertiesForTable:self.tableName];\n    } else {\n        table.systemProperties = MSSystemPropertyVersion;\n    }\n  \n    if (self.type == MSTableOperationInsert) {\n        [table insert:self.item completion:completion];\n    } else if (self.type == MSTableOperationUpdate) {\n        [table update:self.item completion:completion];\n    } else if (self.type == MSTableOperationDelete) {\n        [table delete:self.item completion:completion];\n    }\n}\n\n- (void) cancelPush\n{\n    [self.pushOperation cancel];\n}\n\n/// Logic for determining how operations should be condensed into one single pending operation\n/// For example: Insert + Update -> Insert\n///              Update + Insert -> Error (don't allow user to do this)\n+ (MSCondenseAction) condenseAction:(MSTableOperationTypes)newAction withExistingOperation:(MSTableOperation *)operation\n{\n    MSTableOperationTypes existingAction = operation.type;\n    MSCondenseAction actionToTake = MSCondenseNotSupported;\n    \n    if (existingAction == MSTableOperationInsert) {\n        switch (newAction) {\n            case MSTableOperationUpdate:\n                actionToTake = MSCondenseKeep;\n                break;\n            case MSTableOperationDelete:\n                actionToTake = MSCondenseRemove;\n                break;\n            default:\n                actionToTake = MSCondenseNotSupported;\n                break;\n        }\n    }\n    else if (existingAction == MSTableOperationUpdate) {\n        switch (newAction) {\n            case MSTableOperationDelete:\n                actionToTake = MSCondenseToDelete;\n                break;\n            case MSTableOperationUpdate:\n                actionToTake = MSCondenseKeep;\n                break;\n            default:\n                actionToTake = MSCondenseNotSupported;\n                break;\n        }\n    }\n    \n    // All actions after a MSPushOperationDelete are invalid\n    \n    if (operation.inProgress && actionToTake != MSCondenseNotSupported) {\n        actionToTake = MSCondenseAddNew;\n    }\n    \n    return actionToTake;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSTableOperationError.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSSyncContext.h\"\n\n/// The *MSTableOperationError* class represents an error that occurred while sending a\n/// a table operation (insert, etc) to the Windows Azure Mobile Service during a sync\n/// event (for example a Push)\n/// The most common causes of a table operation error are non success codes from the\n/// server such as a precondition failed response.\n@interface MSTableOperationError : NSObject\n\n///@name Properties\n///@{\n\n/// Unique error id in table store\n@property (nonatomic, readonly) NSString *guid;\n\n/// The name of the table the operation was being performed for\n@property (nonatomic, readonly, copy) NSString *table;\n\n/// The type of operation being performed on the table (insert, update, delete)\n@property (nonatomic, readonly) MSTableOperationTypes operation;\n\n/// The id of the item to the operation ran for\n@property (nonatomic, readonly, copy) NSString *itemId;\n\n/// The full item being sent to the server, this item may not always be present for all\n/// operations\n@property (nonatomic, readonly, copy) NSDictionary *item;\n\n/// Represents the error code recieved while executing the table operation, see *MSError*\n/// for a list of Mobile Service's error codes\n@property (nonatomic, readonly) NSInteger code;\n\n/// Represents the domain of the error recieved while executing the table operation, this will typically\n/// be the MSErrorDomain, but may differ if the delegate chooses to return other error types\n@property (nonatomic, readonly) NSString *domain;\n\n/// A description of what caused the operation to fail\n@property (nonatomic, readonly) NSString *description;\n\n/// The HTTP status code recieved while executing the operation from the mobile service. Note:\n/// this item may not be set if the operation failed before going to the server\n@property (nonatomic, readonly) NSInteger statusCode;\n\n/// When the status code is a precondition failure, this item will contain the current version\n/// of the item on the server\n@property (nonatomic, readonly) NSDictionary *serverItem;\n\n///@}\n\n/// @name Handling Errors\n\n/// Set the handled flag to indicate that all appropriate actions for this error have been taken and the\n/// error will be removed from the list\n@property (nonatomic) BOOL handled;\n\n/// Removes the pending operation so it will not be tried again the next time push is called. In addition,\n/// updates the local store state\n- (void) cancelOperationAndUpdateItem:(NSDictionary *)item completion:(MSSyncBlock)completion;\n\n/// Removes the pending operation so it will not be tried again the next time push is called. In addition,\n/// removes the item associated with the operation from the local store\n- (void) cancelOperationAndDiscardItemWithCompletion:(MSSyncBlock)completion;\n\n\n/// @name Initializing the MSTableOperationError Object\n/// @{\n\n/// Initializes the table operation error from the provided operation, item, error, and context objects.\n- (id) initWithOperation:(MSTableOperation *)operation item:(NSDictionary *)item context:(MSSyncContext *)context error:(NSError *) error;\n\n- (id) initWithOperation:(MSTableOperation *)operation item:(NSDictionary *)item error:(NSError *) error __deprecated;\n\n/// Initializes the table operation error from a serialized representation of a MSTableOperationError.\n- (id) initWithSerializedItem:(NSDictionary *)item context:(MSSyncContext *)context;\n\n- (id) initWithSerializedItem:(NSDictionary *)item __deprecated;\n\n///@}\n\n/// @name Serializing the MSTableOperationError Object\n/// @{\n\n/// Returns an NSDictionary with two keys, id and properties, where properties contains a serialized version\n/// of the error\n- (NSDictionary *) serialize;\n\n/// @}\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSTableOperationError.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSTableOperationError.h\"\n#import \"MSJSONSerializer.h\"\n#import \"MSError.h\"\n#import \"MSTableOperationInternal.h\"\n#import \"MSSyncContextInternal.h\"\n\n@interface MSTableOperationError()\n\n@property (nonatomic) NSString *guid;\n\n// Error\n@property (nonatomic) NSInteger code;\n@property (nonatomic) NSString *domain;\n\n@property (nonatomic) NSString *description;\n\n@property (nonatomic, copy) NSString *table;\n@property (nonatomic) MSTableOperationTypes operation;\n@property (nonatomic) NSInteger operationId;\n@property (nonatomic, copy) NSString *itemId;\n@property (nonatomic, copy) NSDictionary *item;\n\n// Optional HTTP Response data\n@property (nonatomic) NSInteger statusCode;\n@property (nonatomic) NSString *rawResponse;\n@property (nonatomic) NSDictionary *serverItem;\n\n@property (nonatomic, strong) MSSyncContext *syncContext;\n\n@end\n\n\n@implementation MSTableOperationError\n\n@synthesize description = _description;\n\n#pragma mark - Initialization\n\n\n- (id) init {\n    self = [super init];\n    if (self) {\n        _guid = [MSJSONSerializer generateGUID];\n    }\n    return self;\n}\n\n- (id) initWithOperation:(MSTableOperation *)operation item:(NSDictionary *)item context:(MSSyncContext *)context error:(NSError *) error\n{\n    self = [self init];\n    \n    _code = error.code;\n    _domain = [error.domain copy];\n    _description = [error.localizedDescription copy];\n    \n    NSHTTPURLResponse *response = [error.userInfo objectForKey:MSErrorResponseKey];\n    if (response) {\n        _statusCode = response.statusCode;\n    }\n    \n    _serverItem = [[[error userInfo] objectForKey:MSErrorServerItemKey] copy];\n    \n    _table = [operation.tableName copy];\n    _operation = operation.type;\n    _itemId = [operation.itemId copy];\n    _item = [item copy];\n    _operationId = operation.operationId;\n    _syncContext = context;\n    \n    return self;\n}\n\n- (id) initWithOperation:(MSTableOperation *)operation item:(NSDictionary *)item error:(NSError *) error __deprecated;\n{\n    return [[MSTableOperationError alloc] initWithOperation:operation item:item context:nil error:error];\n}\n\n- (id) initWithSerializedItem:(NSDictionary *)item context:(MSSyncContext *)context {\n    self = [self init];\n    if (self) {\n        _guid = [item objectForKey:@\"id\"];\n        \n        // Unserialize the raw data now\n        NSData *properties = [item objectForKey:@\"properties\"];\n        MSJSONSerializer *serializer = [MSJSONSerializer new];\n        NSDictionary *data = [serializer itemFromData:properties withOriginalItem:nil ensureDictionary:NO orError:nil];\n        \n        _code = [[data objectForKey:@\"code\"] integerValue];\n        _domain = [data objectForKey:@\"domain\"];\n        _description = [data objectForKey:@\"description\"];\n        _table = [data objectForKey:@\"table\"];\n        _operation = [[data objectForKey:@\"operation\"] integerValue];\n        _itemId = [data objectForKey:@\"itemId\"];\n        _item = [data objectForKey:@\"item\"];\n        _serverItem = [data objectForKey:@\"serverItem\"];\n        _statusCode = [[data objectForKey:@\"statusCode\"] integerValue];\n        \n        _syncContext = context;\n    }\n    \n    return self;\n}\n\n- (id) initWithSerializedItem:(NSDictionary *)item \n{\n    return [[MSTableOperationError alloc] initWithSerializedItem:item context:nil];\n}\n\n- (NSDictionary *) serialize\n{\n    NSMutableDictionary *properties = [@{\n            @\"code\": [NSNumber numberWithInteger:self.code],\n            @\"domain\": self.domain,\n            @\"description\": self.description,\n            @\"table\": self.table,\n            @\"operation\": [NSNumber numberWithInteger:self.operation],\n            @\"itemId\": self.itemId,\n            @\"statusCode\": [NSNumber numberWithInteger:self.statusCode]\n        } mutableCopy];\n    \n    if (self.item) {\n        [properties setValue:self.item forKey:@\"item\"];\n    }\n    if (self.serverItem) {\n        [properties setValue:self.serverItem forKey:@\"serverItem\"];\n    }\n    \n    MSJSONSerializer *serializer = [MSJSONSerializer new];\n    NSError *serializeError;\n    NSData *data = [serializer dataFromItem:properties\n                                  idAllowed:YES\n                           ensureDictionary:NO\n                     removeSystemProperties:NO\n                                    orError:&serializeError];\n    \n    // Handle if something is wrong with one of our fields, try again without the possibly\n    // breaking fields (item or serverItem could not be serializable)\n    if (serializeError.code == MSInvalidItemWithRequest) {\n        [properties removeObjectForKey:@\"item\"];\n        [properties removeObjectForKey:@\"serverItem\"];\n        \n        data = [serializer dataFromItem:properties\n                              idAllowed:YES\n                       ensureDictionary:NO\n                 removeSystemProperties:NO\n                                orError:&serializeError];\n    }\n        \n    return @{ @\"id\": self.guid,\n              @\"operationId\": [NSNumber numberWithInteger:self.operationId],\n              @\"tableKind\": @0, @\"properties\": data\n            };\n}\n\n#pragma mark - Error Resolution\n\n- (void) cancelOperationAndUpdateItem:(NSDictionary *)item completion:(MSSyncBlock)completion\n{\n    if (!item) {\n        if (completion) {\n            NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: @\"Item is required\" };\n            NSError *error = [NSError errorWithDomain:MSErrorDomain\n                                                 code:MSSyncTableCancelError\n                                             userInfo:userInfo];\n            completion(error);\n            return;\n        }\n    }\n    \n    MSTableOperation *op = [[MSTableOperation alloc] initWithTable:self.table\n                                                              type:self.operation\n                                                            itemId:self.itemId];\n    op.operationId = self.operationId;\n    op.item = item;\n    \n    [self.syncContext cancelOperation:op updateItem:item completion:completion];\n}\n\n- (void) cancelOperationAndDiscardItemWithCompletion:(MSSyncBlock)completion\n{\n    MSTableOperation *op = [[MSTableOperation alloc] initWithTable:self.table\n                                                              type:self.operation\n                                                            itemId:self.itemId];\n    op.operationId = self.operationId;\n    \n    [self.syncContext cancelOperation:op discardItemWithCompletion:completion];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSTableOperationInternal.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n#import \"MSTableOperation.h\"\n#import \"MSSyncContext.h\"\n\n@interface MSTableOperation()\n\n@property (nonatomic) NSInteger operationId;\n\n@property (nonatomic, weak)   MSClient *client;\n@property (atomic)            BOOL inProgress;\n@property (nonatomic, weak)   id<MSSyncContextDataSource> dataSource;\n@property (nonatomic, weak)   id<MSSyncContextDelegate> delegate;\n@property (nonatomic)         MSTableOperationTypes type;\n@property (nonatomic, weak)   NSOperation *pushOperation;\n\n- (NSDictionary *) serialize;\n\n/// Initialized an *MSTableOperation* instance from a record in the local store\n-(id) initWithItem:(NSDictionary *)item;\n\n/// Initializes an *MSTableOperation* instance for the given type, table, and item.\n-(id) initWithTable:(NSString *)tableName\n               type:(MSTableOperationTypes)type\n             itemId:(NSString *)item;\n\n/// Initializes an *MSPushOperation* instance for the given type, table, and item.\n+(MSTableOperation *) pushOperationForTable:(NSString *)tableName\n                                       type:(MSTableOperationTypes)type\n                                     itemId:(NSString *)item;\n\n\n/// Operation helper for tables\ntypedef NS_OPTIONS(NSUInteger, MSCondenseAction) {\n    MSCondenseRemove = 0,\n    MSCondenseKeep,\n    MSCondenseToDelete,\n    MSCondenseNotSupported,\n    MSCondenseAddNew\n};\n\n/// Determines if two operations can be represented as a single operation in the queue\n+ (MSCondenseAction) condenseAction:(MSTableOperationTypes)newAction withExistingOperation:(MSTableOperation *)operation;\n\n@end\n\n"
  },
  {
    "path": "sdk/iOS/src/MSTableRequest.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSTable.h\"\n#import \"MSSerializer.h\"\n#import \"MSSDKFeatures.h\"\n\n@class MSTableItemRequest;\n@class MSTableDeleteRequest;\n@class MSTableReadQueryRequest;\n\n\n#pragma mark * Public MSTableRequestType Enum Type\n\n// Indicates the type of table request\ntypedef enum MSTableRequestTypeEnum {\n    MSTableInsertRequestType = 0,\n    MSTableUpdateRequestType,\n    MSTableDeleteRequestType,\n    MSTableReadRequestType,\n    MSTableReadQueryRequestType,\n    MSTableUndeleteRequestType\n    \n} MSTableRequestType;\n\n\n#pragma mark * MSTableRequest Public Interface\n\n\n// The |MSTableRequest| class represents an HTTP request for a particular table\n// operation. The static constructors of the |MSTableRequest| only returns\n// instances of one of three subclasses: |MSTableItemRequest|,\n// |MSTableDeleteRequest| and |MSTableReadQueryRequest|. These types correspond\n// to the associated |MS*SuccessBlock| types that should be used with the\n// request's respective response.\n@interface MSTableRequest : NSMutableURLRequest\n\n\n#pragma mark * Public Readonly Properties\n\n\n// The type of the request--insert, update, delete, etc.\n@property (nonatomic, readonly)             MSTableRequestType requestType;\n\n// The table for which this request was created.\n@property (nonatomic, strong, readonly)     MSTable *table;\n\n// The user-defined parameters to be included in the request query string.\n@property (nonatomic, strong, readonly)     NSDictionary *parameters;\n\n\n#pragma  mark * Public Static Constructor Methods\n\n\n// Creates a request to insert the item into the given table.\n+(MSTableItemRequest *) requestToInsertItem:(id)item\n                                      table:(MSTable *)table\n                                 parameters:(NSDictionary *)parameters\n                                   features:(MSFeatures)features\n                                 completion:(MSItemBlock)completion;\n\n// Creates a request to update the item in the given table.\n+(MSTableItemRequest *) requestToUpdateItem:(id)item\n                                      table:(MSTable *)table\n                                 parameters:(NSDictionary *)parameters\n                                   features:(MSFeatures)features\n                                 completion:(MSItemBlock)completion;\n\n// Creates a request to delete the item from the given table.\n+(MSTableDeleteRequest *) requestToDeleteItem:(id)item\n                                        table:(MSTable *)table\n                                   parameters:(NSDictionary *)parameters\n                                     features:(MSFeatures)features\n                                   completion:(MSDeleteBlock)completion;\n\n// Creates a request to delete the item with the given id from the given table.\n+(MSTableDeleteRequest *) requestToDeleteItemWithId:(id)itemId\n                                              table:(MSTable *)table\n                                         parameters:(NSDictionary *)parameters\n                                           features:(MSFeatures)features\n                                         completion:(MSDeleteBlock)completion;\n\n// Creates a request to undelete the item from the given table.\n+(MSTableItemRequest *) requestToUndeleteItem:(id)item\n                                        table:(MSTable *)table\n                                   parameters:(NSDictionary *)parameters\n                                     features:(MSFeatures)features\n                                   completion:(MSItemBlock)completion;\n\n// Creates a request to read the item with the given id from the given table.\n+(MSTableItemRequest *) requestToReadWithId:(id)itemId\n                                      table:(MSTable *)table\n                                 parameters:(NSDictionary *)parameters\n                                 completion:(MSItemBlock)completion;\n\n// Creates a request to the read the given table with the given query.\n+(MSTableReadQueryRequest *) requestToReadItemsWithQuery:(NSString *)queryString\n                                                   table:(MSTable *)table\n                                                features:(MSFeatures)features\n                                              completion:(MSReadQueryBlock)completion;\n\n@end\n\n\n#pragma mark * MSTableItemRequest Public Interface\n\n\n// The |MSTableItemRequest| class represents a request to insert, update or\n// read a single item from a table and should result in a response that includes\n// that item.\n@interface MSTableItemRequest : MSTableRequest\n\n\n#pragma mark * Public Readonly Properties\n\n// The item that is to be inserted or updated in the table. Will be nil if\n// the |readWithId| table operation was invoked.\n@property (nonatomic, strong, readonly)     id item;\n\n// The id of the item to be updated or read from the table. Will be nil if the\n// table operation is an insert.\n@property (nonatomic, strong, readonly)     id itemId;\n\n@end\n\n\n#pragma mark * MSTableDeleteRequest Public Interface\n\n// The |MSTableDeleteRequest| class represents a request to delete an item\n// from a table.\n@interface MSTableDeleteRequest : MSTableRequest\n\n\n#pragma mark * Public Readonly Properties\n\n\n// The item that is to be deleted from the table. May be nil if the\n// |deleteWithId| table operation was invoked.\n@property (nonatomic, strong, readonly)     id item;\n\n// The id of the item to be deleted from the table.\n@property (nonatomic, strong, readonly)     id itemId;\n\n@end\n\n\n#pragma mark * MSTableReadQueryRequest Public Interface\n\n// The |MSTableReadQueryRequest| class represents a request to read a table\n// with a particular query.\n@interface MSTableReadQueryRequest : MSTableRequest\n\n\n#pragma mark * Public Readonly Properties\n\n// The query string associated with the read with query request.\n@property (nonatomic, copy, readonly)       NSString *queryString;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSTableRequest.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSTableRequest.h\"\n#import \"MSURLBuilder.h\"\n#import \"MSSDKFeatures.h\"\n#import \"MSClientInternal.h\"\n\n#pragma mark * HTTP Method String Constants\n\n\nstatic NSString *const httpGet = @\"GET\";\nstatic NSString *const httpPatch = @\"PATCH\";\nstatic NSString *const httpPost = @\"POST\";\nstatic NSString *const httpDelete = @\"DELETE\";\n\n\n#pragma mark * MSTableRequest Private Interface\n\n\n@interface MSTableRequest ()\n\n// Public readonly and private readwrite properties \n@property (nonatomic, readwrite)             MSTableRequestType requestType;\n\n// Private initalizer method\n-(id) initWithURL:(NSURL *)url\n        withTable:(MSTable *)table;\n\n-(void) setIfMatchVersion:(NSString *)version;\n\n+(NSString *) versionFromItem:(NSDictionary *)item ItemId:(NSString *)itemId;\n\n@end\n\n\n#pragma mark * MSTableItemRequest Private Interface\n\n\n@interface MSTableItemRequest ()\n\n// Public readonly and private readwrite properties\n@property (nonatomic, strong, readwrite)     id item;\n@property (nonatomic, strong, readwrite)     id itemId;\n\n@end\n\n\n#pragma mark * MSTableDeleteRequest Private Interface\n\n\n@interface MSTableDeleteRequest ()\n\n// Public readonly and private readwrite properties\n@property (nonatomic, strong, readwrite)     id item;\n@property (nonatomic, strong, readwrite)     id itemId;\n\n@end\n\n\n#pragma mark * MSTableReadQueryRequest Private Interface\n\n\n@interface MSTableReadQueryRequest ()\n\n// Public readonly and private readwrite properties\n@property (nonatomic, copy, readwrite)       NSString *queryString;\n\n@end\n\n\n#pragma mark * MSTableRequest Implementation\n\n\n@implementation MSTableRequest\n\n@synthesize requestType = requestType_;\n@synthesize table = table_;\n\n\n#pragma mark * Private Initializer Method\n\n\n-(id) initWithURL:(NSURL *)url\n            withTable:(MSTable *)table\n{\n    self = [super initWithURL:url];\n    if (self) {\n        table_ = table;\n    }\n    \n    return self;\n}\n\n\n#pragma mark * Private Class Methods\n\n\n-(void) setIfMatchVersion:(NSString *)version\n{\n    if (!version) {\n        return;\n    }\n    \n    NSString *validHeaderVersion = [NSString stringWithFormat:@\"\\\"%@\\\"\",\n                                    [version stringByReplacingOccurrencesOfString:@\"\\\"\"\n                                                                       withString:@\"\\\\\\\"\"]];\n    \n    [self addValue:validHeaderVersion forHTTPHeaderField:@\"If-Match\"];\n}\n\n\n#pragma mark - Private Static Helper Functions\n\n+(NSString *) versionFromItem:(NSDictionary *)item ItemId:(id)itemId\n{\n    if([itemId isKindOfClass:[NSString class]]) {\n        return item[MSSystemColumnVersion];\n    }\n    return nil;\n}\n\n\n#pragma mark * Public Static Constructors\n\n\n+(MSTableItemRequest *) requestToInsertItem:(id)item\n                                      table:(MSTable *)table\n                                 parameters:(NSDictionary *)parameters\n                                   features:(MSFeatures)features\n                                 completion:(MSItemBlock)completion\n{\n    MSTableItemRequest *request = nil;\n    NSError *error = nil;\n\n    // Create the URL\n    NSURL *url = [MSURLBuilder URLForTable:table\n                                 parameters:parameters\n                                    orError:&error];\n    if (!error) {\n        // Create the request\n        request = [[MSTableItemRequest alloc] initWithURL:url\n                                                withTable:table];\n        \n        // Create the body or capture the error from serialization\n        NSData *data = [table.client.serializer dataFromItem:item\n                                                   idAllowed:NO\n                                            ensureDictionary:YES\n                                      removeSystemProperties:NO\n                                                     orError:&error];\n        if (!error) {\n            // Set the body\n            request.HTTPBody = data;\n            \n            // Set the additionl properties\n            request.requestType = MSTableInsertRequestType;\n            request.item = item;\n            \n            // Set the method and headers\n            request.HTTPMethod = httpPost;\n\n            // Set features header if necessary\n            [self addFeaturesHeaderForRequest:request queryParameters:parameters features:features];\n        }\n    }\n    \n    // If there was an error, call the completion and make sure\n    // to return nil for the request\n    if (error) {\n        request = nil;\n        if (completion) {\n            completion(nil, error);\n        }\n    }\n    \n    return request;\n}\n\n+(MSTableItemRequest *) requestToUpdateItem:(id)item\n                                      table:(MSTable *)table\n                                 parameters:(NSDictionary *)parameters\n                                   features:(MSFeatures)features\n                                 completion:(MSItemBlock)completion\n\n{\n    MSTableItemRequest *request = nil;\n    NSError *error = nil;\n    id<MSSerializer> serializer = table.client.serializer;\n    \n    id itemId = [serializer itemIdFromItem:item orError:&error];\n    if (!error) {\n        // Ensure we can get a string from the item Id\n        NSString *idString = [serializer stringFromItemId:itemId\n                                                  orError:&error];\n        \n        if (!error) {\n            // Create the URL\n            NSURL *url = [MSURLBuilder URLForTable:table\n                                       itemIdString:idString\n                                         parameters:parameters\n                                            orError:&error];\n            if (!error) {\n                // Create the request\n                request = [[MSTableItemRequest alloc] initWithURL:url\n                                                        withTable:table];\n                request.itemId = itemId;\n            \n                // If string id, cache the version field as we strip it out during serialization\n                NSString *version = [MSTableRequest versionFromItem:item ItemId:itemId];\n                \n                // Create the body or capture the error from serialization\n                NSData *data = [serializer dataFromItem:item\n                                              idAllowed:YES\n                                       ensureDictionary:YES\n                                 removeSystemProperties:YES\n                                                orError:&error];\n                if (!error) {\n                    // Set the body\n                    request.HTTPBody = data;\n                    \n                    // Set the properties\n                    request.requestType = MSTableUpdateRequestType;\n                    request.item = item;\n                    \n                    // Set the method and headers\n                    request.HTTPMethod = httpPatch;\n                    \n                    // Version becomes an etag if passed\n                    [request setIfMatchVersion:version];\n\n                    // Set features header if necessary\n                    [self addFeaturesHeaderForRequest:request queryParameters:parameters features:features];\n                }\n            }\n        }\n    }\n    \n    // If there was an error, call the completion and make sure\n    // to return nil for the request\n    if (error) {\n        request = nil;\n        if (completion) {\n            completion(nil, error);\n        }\n    }\n    \n    return request;\n}\n\n+(MSTableDeleteRequest *) requestToDeleteItem:(id)item\n                                        table:(MSTable *)table\n                                   parameters:(NSDictionary *)parameters\n                                     features:(MSFeatures)features\n                                   completion:(MSDeleteBlock)completion\n{\n    MSTableDeleteRequest *request = nil;\n    NSError *error = nil;\n    \n    // Ensure we can get the item Id\n    id itemId = [table.client.serializer itemIdFromItem:item orError:&error];\n    if (!error) {\n        // If string id, cache the version field as we strip it out during serialization\n        NSString *version = [MSTableRequest versionFromItem:item ItemId:itemId];\n        \n        // Get the request from the other constructor\n        request = [MSTableRequest requestToDeleteItemWithId:itemId\n                                                      table:table\n                                                 parameters:parameters\n                                                   features:MSFeatureNone\n                                                 completion:completion];\n        \n        // Set the additional properties\n        request.item = item;\n        \n        // Version becomes an etag if passed\n        [request setIfMatchVersion:version];\n\n        // Set features header if necessary\n        [self addFeaturesHeaderForRequest:request queryParameters:parameters features:features];\n    }\n    \n    // If there was an error, call the completion and make sure\n    // to return nil for the request\n    if (error) {\n        request = nil;\n        if (completion) {\n            completion(nil, error);\n        }\n    }\n    \n    return request;\n}\n\n+(MSTableDeleteRequest *) requestToDeleteItemWithId:(id)itemId\n                                              table:(MSTable *)table\n                                         parameters:(NSDictionary *)parameters\n                                           features:(MSFeatures)features\n                                         completion:(MSDeleteBlock)completion\n{\n    MSTableDeleteRequest *request = nil;\n    NSError *error = nil;\n    \n    // Ensure we can get the id as a string\n    NSString *idString = [table.client.serializer stringFromItemId:itemId\n                                                           orError:&error];\n    if (!error) {\n    \n        // Create the URL\n        NSURL *url = [MSURLBuilder URLForTable:table\n                                   itemIdString:idString\n                                     parameters:parameters\n                                            orError:&error];\n        if (!error) {\n            \n            // Create the request\n            request = [[MSTableDeleteRequest alloc] initWithURL:url\n                                                      withTable:table];\n            \n            // Set the additional properties\n            request.requestType = MSTableDeleteRequestType;\n            request.itemId = itemId;\n            \n            // Set the method and headers\n            request.HTTPMethod = httpDelete;\n\n            // Set features header if necessary\n            [self addFeaturesHeaderForRequest:request queryParameters:parameters features:features];\n        }\n    }\n    \n    // If there was an error, call the completion and make sure\n    // to return nil for the request\n    if (error) {\n        request = nil;\n        if (completion) {\n            completion(nil, error);\n        }\n    }\n    \n    return request;\n}\n\n+(MSTableItemRequest *) requestToUndeleteItem:(id)item\n                                        table:(MSTable *)table\n                                   parameters:(NSDictionary *)parameters\n                                     features:(MSFeatures)features\n                                   completion:(MSItemBlock)completion\n{\n    MSTableItemRequest *request = nil;\n    NSError *error = nil;\n    id<MSSerializer> serializer = table.client.serializer;\n    \n    // Ensure we can get the item Id\n    id itemId = [serializer itemIdFromItem:item orError:&error];\n    if (!error) {\n        // Ensure we can get a string from the item Id\n        NSString *idString = [serializer stringFromItemId:itemId\n                                                  orError:&error];\n        \n        if (!error) {\n            // Create the URL\n            NSURL *url =  [MSURLBuilder URLForTable:table\n                                       itemIdString:idString\n                                         parameters:parameters\n                                            orError:&error];\n            \n            if (!error) {\n                // Create the request\n                request = [[MSTableItemRequest alloc] initWithURL:url\n                                                          withTable:table];\n                \n                // Set the additional properties\n                request.requestType = MSTableUndeleteRequestType;\n                request.itemId = itemId;\n                \n                // Set the method and headers\n                request.HTTPMethod = httpPost;\n\n                // Add the optional if-match header\n                NSString *version = [MSTableRequest versionFromItem:item ItemId:itemId];\n                [request setIfMatchVersion:version];\n\n                // Set features header if necessary\n                [self addFeaturesHeaderForRequest:request queryParameters:parameters features:features];\n            }\n        }\n    }\n    \n    // If there was an error, call the completion and make sure\n    // to return nil for the request\n    if (error) {\n        request = nil;\n        if (completion) {\n            completion(nil, error);\n        }\n    }\n    \n    return request;\n}\n\n+(MSTableItemRequest *) requestToReadWithId:(id)itemId\n                                      table:(MSTable *)table\n                                 parameters:(NSDictionary *)parameters\n                                 completion:(MSItemBlock)completion\n{\n    MSTableItemRequest *request = nil;\n    NSError *error = nil;\n    \n    // Ensure we can get the id as a string\n    NSString *idString = [table.client.serializer stringFromItemId:itemId\n                                                           orError:&error];\n    if (!error) {\n\n        // Create the URL\n        NSURL *url =  [MSURLBuilder URLForTable:table\n                                   itemIdString:idString\n                                     parameters:parameters\n                                        orError:&error];\n        if (!error) {\n            \n            // Create the request\n            request = [[MSTableItemRequest alloc] initWithURL:url\n                                                    withTable:table];\n            \n            // Set the additional properties\n            request.requestType = MSTableReadRequestType;\n            request.itemId = itemId;\n            \n            // Set the method and headers\n            request.HTTPMethod = httpGet;\n\n            // Set features header if necessary\n            [self addFeaturesHeaderForRequest:request queryParameters:parameters features:MSFeatureNone];\n        }\n    }\n    \n    // If there was an error, call the completion and make sure\n    // to return nil for the request\n    if (error) {\n        request = nil;\n        if (completion) {\n            completion(nil, error);\n        }\n    }\n    \n    return request;\n}\n\n+(MSTableReadQueryRequest *) requestToReadItemsWithQuery:(NSString *)queryString\n                                                   table:(MSTable *)table\n                                                features:(MSFeatures)features\n                                              completion:(MSReadQueryBlock)completion\n{\n    MSTableReadQueryRequest *request = nil;\n    \n    NSURL *url = [NSURL URLWithString:queryString];\n    \n    if (url && url.scheme && url.host) {\n        // if it is valid absolute URL (e.g. nextLink) then take it as it is\n        queryString = url.query;\n        features |= MSFeatureReadWithLinkHeader;\n    }\n    else {\n        // otherwise consider it to be query string and append it to table endpoint\n        url = [MSURLBuilder URLForTable:table query:queryString];\n    }\n    \n    // Create the request\n    request = [[MSTableReadQueryRequest alloc] initWithURL:url\n                                                 withTable:table];\n    \n    // Set the additional properties\n    request.requestType = MSTableReadQueryRequestType;\n    request.queryString = queryString;\n    \n    // Set the method and headers\n    request.HTTPMethod = httpGet;\n\n    // Set features header if necessary\n    [self addFeaturesHeaderForRequest:request queryParameters:nil features:features];\n\n    return request;\n}\n\n#pragma mark * Private Static Constructors\n\n+ (NSString *)getVersionFromItem:(id)item itemId:(id)itemId\n{\n    // If string id, cache the version field as we strip it out during serialization\n    NSString *version= nil;\n    if([itemId isKindOfClass:[NSString class]]) {\n        version = [item objectForKey:MSSystemColumnVersion];\n    }\n    return version;\n}\n\n+ (void)addFeaturesHeaderForRequest:(MSTableRequest *)request queryParameters:(NSDictionary *)parameters features:(MSFeatures)features {\n    if ([[request allHTTPHeaderFields] objectForKey:@\"If-Match\"]) {\n        features |= MSFeatureOpportunisticConcurrency;\n    }\n    if (parameters && [parameters count]) {\n        features |= MSFeatureQueryParameters;\n    }\n\n    [request setValue:[MSSDKFeatures httpHeaderForFeatures:features] forHTTPHeaderField:MSFeaturesHeaderName];\n}\n\n@end\n\n\n#pragma mark * MSTableItemRequest Implementation\n\n\n@implementation MSTableItemRequest\n\n@synthesize itemId = itemId_;\n@synthesize item = item_;\n\n@end\n\n\n#pragma mark * MSTableDeleteRequest Implementation\n\n\n@implementation MSTableDeleteRequest\n\n@synthesize itemId = itemId_;\n@synthesize item = item_;\n\n@end\n\n\n#pragma mark * MSTableReadQueryRequest Implementation\n\n\n@implementation MSTableReadQueryRequest\n\n@synthesize queryString = queryString_;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSURLBuilder.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n#import \"MSTable.h\"\n#import \"MSQuery.h\"\n\n\n#pragma  mark * MSURLBuilder Public Interface\n\n\n// The |MSURLBuilder| class encapsulates the logic for building the\n// appropriate URLs for the Mobile Service requests.\n@interface MSURLBuilder : NSObject\n\n#pragma  mark * Public URL Builder Methods\n\n// Returns a URL for the table.\n+(NSURL *)URLForTable:(MSTable *)table\n            parameters:(NSDictionary *)parameters\n            orError:(NSError **)error;\n\n// Returns a URL for a particular item in the table.\n+(NSURL *)URLForTable:(MSTable *)table\n            itemIdString:(NSString *)itemId\n            parameters:(NSDictionary *)parameters\n            orError:(NSError **)error;\n\n// Returns a URL for querying a table with the given query.\n+(NSURL *)URLForTable:(MSTable *)table\n                query:(NSString *)query;\n\n// Returns a URL for the custom API.\n+(NSURL *)URLForApi:(MSClient *)client\n            APIName:(NSString *)APIName\n            parameters:(NSDictionary *)parameters\n            orError:(NSError **)error;\n\n// Returns a query string from an |MSQuery| instance\n+(NSString *)queryStringFromQuery:(MSQuery *)query\n                          orError:(NSError **)error;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSURLBuilder.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSURLBuilder.h\"\n#import \"MSPredicateTranslator.h\"\n\n\n#pragma mark * Query String Constants\n\n\nstatic NSString *const topParameter = @\"$top\";\nstatic NSString *const skipParameter = @\"$skip\";\nstatic NSString *const selectParameter = @\"$select\";\nstatic NSString *const orderByParameter = @\"$orderby\";\nstatic NSString *const orderByAscendingFormat = @\"%@ asc\";\nstatic NSString *const orderByDescendingFormat = @\"%@ desc\";\nstatic NSString *const filterParameter = @\"$filter\";\nstatic NSString *const inlineCountParameter = @\"$inlinecount\";\nstatic NSString *const inlineCountAllPage = @\"allpages\";\n\n\n#pragma mark * MSURLBuilder Implementation\n\n\n@implementation MSURLBuilder\n\n\n#pragma mark * Public URL Builder Methods\n\n+ (NSURL *) addTableSystemProperties:(MSTable *)table toURL:(NSURL *)url\n{\n    if (table.systemProperties == MSSystemPropertyNone) {\n        return url;\n    }\n\n    if(url.query != nil && [url.query rangeOfString:@\"__systemProperties\" options:NSCaseInsensitiveSearch].location != NSNotFound) {\n        return url;\n    }\n                               \n    NSString *value = @\"\";\n    if(table.systemProperties == MSSystemPropertyAll) {\n        value = encodeToPercentEscapeString(@\"*\");\n    } else {\n        NSMutableArray *properties = [NSMutableArray array];\n        if (table.systemProperties & MSSystemPropertyCreatedAt) {\n            [properties addObject:MSSystemColumnCreatedAt];\n        }\n        if (table.systemProperties & MSSystemPropertyUpdatedAt) {\n            [properties addObject:MSSystemColumnUpdatedAt];\n        }\n        if (table.systemProperties & MSSystemPropertyDeleted) {\n            [properties addObject:MSSystemColumnDeleted];\n        }\n        if (table.systemProperties & MSSystemPropertyVersion) {\n            [properties addObject:MSSystemColumnVersion];\n        }\n        // Join the properties with \"%2C\" which is URL Friendly\n        value = [properties componentsJoinedByString:@\"%2C\"];\n    }\n    \n    return [MSURLBuilder URLByAppendingQueryString:[@\"__systemProperties=\" stringByAppendingString:value] toURL:url];\n}\n\n+(NSURL *) URLForTable:(MSTable *)table\n            parameters:(NSDictionary *)parameters\n                 query:( NSString *)query\n               orError:(NSError **)error\n{\n    NSURL *url = nil;\n    \n    // Ensure that the user parameters are valid if there are any\n    if ([MSURLBuilder userParametersAreValid:parameters orError:error]) {\n        \n        // Create the table path\n        NSString *tablePath = [NSString stringWithFormat:@\"tables/%@\", table.name];\n        \n        // Append it to the application URL; Don't percent encode the tablePath\n        // because URLByAppending will percent encode for us\n        url = [table.client.applicationURL URLByAppendingPathComponent:tablePath];\n        \n        // Add on the querystring now\n        url = [MSURLBuilder URLByAppendingQueryString:query toURL:url];\n            \n        // Add the query parameters if any\n        url = [MSURLBuilder URLByAppendingQueryParameters:parameters\n                                                    toURL:url];\n        \n        // Check if we should add in system properties\n        url = [MSURLBuilder addTableSystemProperties:table toURL:url];\n    }\n    \n    return url;\n}\n\n+(NSURL *) URLForTable:(MSTable *)table\n        parameters:(NSDictionary *)parameters\n               orError:(NSError **)error\n{\n    return [MSURLBuilder URLForTable:table parameters:parameters query:nil orError:error];\n}\n\n+(NSURL *) URLForTable:(MSTable *)table\n      itemIdString:(NSString *)itemId\n        parameters:(NSDictionary *)parameters\n               orError:(NSError **)error\n{        \n    // Get the URL for the table\n    NSURL *url = [self URLForTable:table\n                        parameters:parameters\n                           orError:error];\n    \n    // Add the itemId; NSURL will do the right thing and account for the\n    // query string if there is one\n    if (itemId) {\n        url = [url URLByAppendingPathComponent:itemId];\n    }\n    \n    return url;\n}\n\n+(NSURL *) URLForTable:(MSTable *)table query:(NSString *)query\n{\n    // Get the URL for the table; no need to pass in the error parameter because\n    // only user-parameters can cause an error\n    return [self URLForTable:table parameters:nil query:query orError:nil];\n}\n\n+(NSURL *)URLForApi:(MSClient *)client\n            APIName:(NSString *)APIName\n            parameters:(NSDictionary *)parameters\n               orError:(NSError **)error\n{\n    NSURL *url = nil;\n    \n    // Ensure that the user parameters are valid if there are any\n    if ([MSURLBuilder userParametersAreValid:parameters orError:error]) {\n        \n        // Treat nil APIName as an empty string\n        if (!APIName) {\n            APIName = @\"\";\n        }\n        \n        // Create the API path\n        NSString *apiPath = [NSString stringWithFormat:@\"api/%@\", APIName];\n        \n        // Check for a query string in the APIName\n        NSString *apiQuery = nil;\n        NSUInteger queryStringStart = [apiPath rangeOfString:@\"?\"].location;\n        if (queryStringStart != NSNotFound) {\n            apiQuery = [apiPath substringFromIndex:queryStringStart + 1];\n            apiPath = [apiPath substringToIndex:queryStringStart];\n        }\n        \n        // Append it to the application URL; Don't percent encode the apiPath\n        // because URLByAppending will percent encode for us\n        url = [client.applicationURL URLByAppendingPathComponent:apiPath];\n        \n        // If there was a query on the APIName, add it back to the url\n        // we are building\n        if (apiQuery) {\n            url = [MSURLBuilder URLByAppendingQueryString:apiQuery toURL:url];\n        }\n        \n        // Add the query parameters if any\n        url = [MSURLBuilder URLByAppendingQueryParameters:parameters\n                                                    toURL:url];\n    }\n    \n    return url;\n}\n\n+(NSString *) queryStringFromQuery:(MSQuery *)query\n                           orError:(NSError **)error;\n{\n    NSString *queryString = nil;\n    NSString *filterValue = nil;\n    \n    // Ensure that the user parameters are valid if there are any\n    if ([MSURLBuilder userParametersAreValid:[query parameters] orError:error]) {\n        \n        if (query.predicate) {\n            // Translate the predicate into the filter first since it might error\n            filterValue = [MSPredicateTranslator\n                           queryFilterFromPredicate:query.predicate\n                           orError:error];\n        }\n        \n        if (filterValue || !query.predicate) {\n            \n            // Create a dictionary to hold all of the query parameters\n            NSMutableDictionary *queryParameters = [NSMutableDictionary dictionary];\n            \n            // Add the $filter parameter\n            if (query.predicate) {\n                [queryParameters setValue:filterValue forKey:filterParameter];\n            }\n            \n            // Add the $top parameter\n            if (query.fetchLimit >= 0) {\n                NSString *topValue = [NSString stringWithFormat:@\"%ld\",\n                                      (long)query.fetchLimit];\n                [queryParameters setValue:topValue forKey:topParameter];\n            }\n            \n            // Add the $skip parameter\n            if (query.fetchOffset >= 0) {\n                NSString *skipValue = [NSString stringWithFormat:@\"%ld\",\n                                       (long)query.fetchOffset];\n                [queryParameters setValue:skipValue forKey:skipParameter];\n            }\n            \n            // Add the $select parameter\n            if (query.selectFields) {\n                NSString *selectFieldsValue = [query.selectFields\n                                               componentsJoinedByString:@\",\"];\n                [queryParameters setValue:selectFieldsValue forKey:selectParameter];\n            }\n            \n            // Add the $orderBy parameter\n            if (query.orderBy) {\n                NSMutableString *orderByString = [NSMutableString string];\n                for (NSSortDescriptor* sort in query.orderBy){\n                    if (orderByString.length > 0) {\n                        [orderByString appendString:@\",\"];\n                    }\n                    NSString *format = (sort.ascending) ?\n                    orderByAscendingFormat :\n                    orderByDescendingFormat;\n                    [orderByString appendFormat:format, sort.key];\n                }\n                [queryParameters setValue:orderByString forKey:orderByParameter];\n            }\n            \n            // Add the $inlineCount parameter\n            \n            if (query.includeTotalCount) {\n                [queryParameters setValue:inlineCountAllPage\n                                 forKey:inlineCountParameter];\n            }\n            \n            // Add the user parameters\n            if (query.parameters) {\n                [queryParameters addEntriesFromDictionary:query.parameters];\n            }\n            \n            queryString = [MSURLBuilder queryStringFromParameters:queryParameters];\n        }\n    }\n    \n    return queryString;\n}\n\n\n#pragma mark * Private Methods\n// This is for 'strict' URL encoding that will encode even reserved URL\n// characters.  It should be used only on URL pieces, not full URLs.\nNSString* encodeToPercentEscapeString(NSString *string) {\n    NSMutableCharacterSet *strictSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy];\n    \n    // We also want these encoded, regardless of if they are allowed in a query\n    [strictSet removeCharactersInString:@\"!*;:@&=+/?%#[]\"];\n\n    return [string stringByAddingPercentEncodingWithAllowedCharacters:strictSet];\n}\n\n+(NSString *) queryStringFromParameters:(NSDictionary *)queryParameters\n{\n    // Iterate through the parameters to build the query string as key=value\n    // pairs seperated by '&'\n    NSMutableString *queryString = [NSMutableString string];\n    for (NSString* key in [queryParameters allKeys]) {\n        NSString *name = [key description];\n        \n        // Get the paremeter name and value\n        id value = [queryParameters objectForKey:key];\n        if ([value isKindOfClass:[NSArray class]]) {\n            for (id arrayValue in value) {\n                [MSURLBuilder appendParameterName:name andValue:[arrayValue description] toQueryString:queryString];\n            }\n        } else {\n            [MSURLBuilder appendParameterName:name andValue:[value description] toQueryString:queryString];\n        }\n    }\n    \n    return queryString;\n}\n\n+(void) appendParameterName:(NSString *)name andValue:(NSString *)value toQueryString:(NSMutableString *)queryString\n{\n    // URL Encode the parameter name and the value\n    NSString *encodedValue = encodeToPercentEscapeString(value);\n    NSString *encodedName = encodeToPercentEscapeString(name);\n\n    if (queryString.length > 0) {\n        [queryString appendFormat:@\"&%@=%@\", encodedName, encodedValue];\n    } else {\n        [queryString appendFormat:@\"%@=%@\", encodedName, encodedValue];\n    }\n}\n\n+(NSURL *) URLByAppendingQueryParameters:(NSDictionary *)queryParameters\n                                   toURL:(NSURL *)url\n{\n    NSURL *newUrl = url;\n    \n    // Do nothing if there are no query paramters\n    if (queryParameters && queryParameters.count > 0) {\n        \n        NSString *queryString =\n            [MSURLBuilder queryStringFromParameters:queryParameters];\n        newUrl = [MSURLBuilder URLByAppendingQueryString:queryString\n                                                        toURL:newUrl];\n    }\n    \n    return newUrl;\n}\n\n+(NSURL *) URLByAppendingQueryString:(NSString *)queryString\n                               toURL:(NSURL *)url\n{\n    NSURL *newUrl = url;\n    \n    // Do nothing if the parameters were empty strings\n    if (queryString && queryString.length > 0) {\n        \n        // Check if we are appending to existing parameters or not\n        BOOL alreadyHasQuery = url.query != nil;\n        NSString *queryChar = alreadyHasQuery ? @\"&\" : @\"?\";\n        \n        // Rebuild a new URL from a string\n        NSString *newUrlString = [NSString stringWithFormat:@\"%@%@%@\",\n                                  [url absoluteString],\n                                  queryChar,\n                                  queryString];\n        \n        newUrl = [NSURL URLWithString:newUrlString];\n    }\n    \n    return newUrl;\n}\n\n+(BOOL) userParametersAreValid:(NSDictionary *)parameters\n                       orError:(NSError **)error\n{\n    BOOL areValid = YES;\n    NSError *localError = nil;\n    \n    // Do nothing if there are no query paramters\n    if (parameters && parameters.count > 0) {\n       \n        for (NSString* key in [parameters allKeys]){\n            \n            // Ensure none of the user parameters start with the '$', as this\n            // is reserved for system-defined query parameters\n            if ([key length] > 0 && [key characterAtIndex:0] == '$') {\n                localError = [MSURLBuilder errorWithUserParameter:key];\n                areValid = NO;\n                break;\n            }\n        }\n    }\n    \n    if (!areValid && error) {\n        *error = localError;\n    }\n    \n    return areValid;\n}\n\n\n#pragma mark * Private NSError Generation Methods\n\n\n+(NSError *) errorWithUserParameter:(NSString *)parameterName\n{\n    NSString *descriptionKey = @\"'%@' is an invalid user-defined query string parameter. User-defined query string parameters must not begin with a '$'.\";\n    NSString *descriptionFormat = NSLocalizedString(descriptionKey, nil);\n    NSString *description = [NSString stringWithFormat:descriptionFormat, parameterName];\n    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey :description };\n    \n    return [NSError errorWithDomain:MSErrorDomain\n                               code:MSInvalidUserParameterWithRequest\n                           userInfo:userInfo];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSUser.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n\n#pragma mark * MSUser Public Interface\n\n\n/// The *MSUser* class represents an end user that can login to a Microsoft Azure\n/// Mobile Service on a client device.\n@interface MSUser : NSObject <NSCopying>\n\n#pragma mark * Public Initializers\n\n///@name Initializing the MSUser Object\n///@{\n\n/// Initializes an *MSUser* instance with the given user id.\n-(id)initWithUserId:(NSString *)userId;\n\n///@}\n\n\n///@name Retrieving User Data\n///@{\n\n#pragma mark * Public Readonly Properties\n\n\n/// The user id of the end user.\n@property (nonatomic, copy, readonly)   NSString *userId;\n\n\n#pragma mark * Public Readwrite Properties\n\n/// A Microsoft Azure Mobile Services authentication token for the logged in\n/// end user. If non-nil, the authentication token will be included in all\n/// requests made to the Microsoft Azure Mobile Service, allowing the client to\n/// perform all actions on the Microsoft Azure Mobile Service that require\n/// authenticated-user level permissions.\n@property (nonatomic, copy)         NSString *mobileServiceAuthenticationToken;\n\n///@}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSUser.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSUser.h\"\n\n\n#pragma mark * MSUser Implementation\n\n\n@implementation MSUser\n\n@synthesize userId = userId_;\n@synthesize mobileServiceAuthenticationToken = mobileServiceAuthenticationToken_;\n\n\n#pragma mark * Public Initializer Methods\n\n\n-(id) initWithUserId:(NSString *)userId\n{\n    self = [super init];\n    if(self)\n    {\n        userId_ = userId;\n    }\n    return self;\n}\n\n\n#pragma mark * NSCopying Methods\n\n\n-(id) copyWithZone:(NSZone *)zone\n{\n    MSUser *user = [[MSUser allocWithZone:zone] initWithUserId:self.userId];\n    user.mobileServiceAuthenticationToken = self.mobileServiceAuthenticationToken;\n    \n    return user;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSUserAgentBuilder.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n\n#pragma  mark * MSUserAgentBuilder Public Interface\n\n\n// The |MSUserAgentBuilder| class encapsulates the logic for building the\n// appropriate HTTP 'User-Agent' header value for all |MSClient| requests.\n// Microsoft Azure Mobile Services expects the 'User-Agent' to be of the form:\n//\n//     ZUMO/<sdk-version> (<sdk-language> <OS> <OS-version> <Architecture> <sdk-fileversion>)\n//\n@interface MSUserAgentBuilder : NSObject\n\n\n#pragma  mark * Public UserAgent Method\n\n\n// The HTTP 'User-Agent' value to use with all |MSClient| requests\n+(NSString *)userAgent;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/MSUserAgentBuilder.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSUserAgentBuilder.h\"\n#import \"WindowsAzureMobileServices.h\"\n#import <UIKit/UIKit.h>\n\n\n#pragma mark * User Agent Header String Constants\n\n\nstatic NSString *const sdkLanguage = @\"objective-c\";\nstatic NSString *const userAgentValueFormat = @\"ZUMO/%@ (lang=%@; os=%@; os_version=%@; arch=%@; version=%@)\";\nstatic NSString *const simulatorModel = @\"iOSSimulator\";\nstatic NSString *const unknownValue = @\"--\";\nstatic NSString *const sdkVersionFormat = @\"%d.%d\";\nstatic NSString *const sdkFileVesionFormat = @\"%d.%d.%d\";\n\n\n#pragma mark * MSUserAgentBuilder Implementation\n\n\n@implementation MSUserAgentBuilder\n\n\n#pragma  mark * Public UserAgent Method\n\n\n+(NSString *) userAgent\n{\n    NSString *model = nil;\n    NSString *OS = nil;\n    NSString *OSversion = nil;\n    \n    // Get the device related info\n#if TARGET_IPHONE_SIMULATOR\n    model = simulatorModel;\n    OS = unknownValue;\n    OSversion = unknownValue;\n#else\n    UIDevice *currentDevice = [UIDevice currentDevice];\n    model = [currentDevice model];\n    OS = [currentDevice systemName];\n    OSversion = [currentDevice systemVersion];\n#endif\n    NSString *sdkVersion = [NSString stringWithFormat:sdkVersionFormat,\n                                WindowsAzureMobileServicesSdkMajorVersion,\n                                WindowsAzureMobileServicesSdkMinorVersion];\n    NSString *fileVersion = [NSString stringWithFormat:sdkFileVesionFormat,\n                                WindowsAzureMobileServicesSdkMajorVersion,\n                                WindowsAzureMobileServicesSdkMinorVersion,\n                                WindowsAzureMobileServicesSdkBuildVersion ];\n    \n    // Build the user agent string\n    NSString *userAgent = [NSString stringWithFormat:userAgentValueFormat,\n                           sdkVersion,\n                           sdkLanguage,\n                           OS,\n                           OSversion,\n                           model,\n                           fileVersion];\n    \n    return userAgent;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/src/WindowsAzureMobileServices-Prefix.pch",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#ifdef __OBJC__\n    #import <Foundation/Foundation.h>\n#endif\n"
  },
  {
    "path": "sdk/iOS/src/WindowsAzureMobileServices.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#ifndef WindowsAzureMobileServices_WindowsAzureMobileServices_h\n#define WindowsAzureMobileServices_WindowsAzureMobileServices_h\n\n#import \"MSClient.h\"\n#import \"MSCoreDataStore.h\"\n#import \"MSDateOffset.h\"\n#import \"MSError.h\"\n#import \"MSFilter.h\"\n#import \"MSLoginController.h\"\n#import \"MSPullSettings.h\"\n#import \"MSPush.h\"\n#import \"MSQuery.h\"\n#import \"MSQueryResult.h\"\n#import \"MSSyncContext.h\"\n#import \"MSSyncContextReadResult.h\"\n#import \"MSSyncTable.h\"\n#import \"MSTable.h\"\n#import \"MSTableOperation.h\"\n#import \"MSTableOperationError.h\"\n#import \"MSUser.h\"\n\n#define WindowsAzureMobileServicesSdkMajorVersion 2\n#define WindowsAzureMobileServicesSdkMinorVersion 2\n#define WindowsAzureMobileServicesSdkBuildVersion 0\n\n#endif\n"
  },
  {
    "path": "sdk/iOS/test/CoreDataTestModel.xcdatamodeld/CoreDataTestModel.xcdatamodel/contents",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<model userDefinedModelVersionIdentifier=\"\" type=\"com.apple.IDECoreDataModeler.DataModel\" documentVersion=\"1.0\" lastSavedToolsVersion=\"8195\" systemVersion=\"15A284\" minimumToolsVersion=\"Xcode 4.3\">\n    <entity name=\"Child\" representedClassName=\"Child\" syncable=\"YES\">\n        <attribute name=\"id\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"value\" optional=\"YES\" attributeType=\"Integer 64\" defaultValueString=\"0\" syncable=\"YES\"/>\n        <relationship name=\"parent\" optional=\"YES\" maxCount=\"1\" deletionRule=\"Nullify\" destinationEntity=\"Parent\" inverseName=\"child\" inverseEntity=\"Parent\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"ColumnTypes\" syncable=\"YES\">\n        <attribute name=\"binary\" optional=\"YES\" attributeType=\"Binary\" syncable=\"YES\"/>\n        <attribute name=\"boolean\" optional=\"YES\" attributeType=\"Boolean\" syncable=\"YES\"/>\n        <attribute name=\"date\" optional=\"YES\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"decimal\" optional=\"YES\" attributeType=\"Decimal\" defaultValueString=\"0.0\" syncable=\"YES\"/>\n        <attribute name=\"double\" optional=\"YES\" attributeType=\"Double\" defaultValueString=\"0.0\" syncable=\"YES\"/>\n        <attribute name=\"float\" optional=\"YES\" attributeType=\"Float\" defaultValueString=\"0.0\" syncable=\"YES\"/>\n        <attribute name=\"id\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"int16\" optional=\"YES\" attributeType=\"Integer 16\" defaultValueString=\"0\" syncable=\"YES\"/>\n        <attribute name=\"int32\" optional=\"YES\" attributeType=\"Integer 32\" defaultValueString=\"0\" syncable=\"YES\"/>\n        <attribute name=\"int64\" optional=\"YES\" attributeType=\"Integer 64\" defaultValueString=\"0\" syncable=\"YES\"/>\n        <attribute name=\"string\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"ManySystemColumns\" syncable=\"YES\">\n        <attribute name=\"id\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"ms_createdAt\" optional=\"YES\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"ms_deleted\" optional=\"YES\" attributeType=\"Boolean\" syncable=\"YES\"/>\n        <attribute name=\"ms_meaningOfLife\" optional=\"YES\" attributeType=\"Integer 32\" defaultValueString=\"0\" syncable=\"YES\"/>\n        <attribute name=\"ms_updatedAt\" optional=\"YES\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"ms_version\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"text\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"MS_TableConfig\" syncable=\"YES\">\n        <attribute name=\"id\" optional=\"YES\" attributeType=\"String\" maxValueString=\"36\" syncable=\"YES\"/>\n        <attribute name=\"key\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"keyType\" optional=\"YES\" attributeType=\"Integer 64\" defaultValueString=\"0\" syncable=\"YES\"/>\n        <attribute name=\"table\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"value\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"MS_TableOperationErrors\" syncable=\"YES\">\n        <attribute name=\"id\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"operationId\" optional=\"YES\" attributeType=\"Integer 64\" defaultValueString=\"0\" syncable=\"YES\"/>\n        <attribute name=\"properties\" optional=\"YES\" attributeType=\"Binary\" syncable=\"YES\"/>\n        <attribute name=\"tableKind\" optional=\"YES\" attributeType=\"Integer 16\" defaultValueString=\"0\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"MS_TableOperations\" syncable=\"YES\">\n        <attribute name=\"id\" optional=\"YES\" attributeType=\"Integer 64\" defaultValueString=\"0\" syncable=\"YES\"/>\n        <attribute name=\"itemId\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"properties\" optional=\"YES\" attributeType=\"Binary\" syncable=\"YES\"/>\n        <attribute name=\"table\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"tableKind\" optional=\"YES\" attributeType=\"Integer 16\" defaultValueString=\"0\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"Parent\" representedClassName=\"Parent\" syncable=\"YES\">\n        <attribute name=\"id\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"name\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"child\" optional=\"YES\" maxCount=\"1\" deletionRule=\"Nullify\" destinationEntity=\"Child\" inverseName=\"parent\" inverseEntity=\"Child\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"TodoItem\" representedClassName=\"TodoItem\" syncable=\"YES\">\n        <attribute name=\"id\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"ms_version\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"sort\" optional=\"YES\" attributeType=\"Integer 16\" defaultValueString=\"0\" syncable=\"YES\"/>\n        <attribute name=\"text\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"TodoNoVersion\" syncable=\"YES\">\n        <attribute name=\"id\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"text\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n    </entity>\n    <elements>\n        <element name=\"Child\" positionX=\"-90\" positionY=\"-9\" width=\"128\" height=\"90\"/>\n        <element name=\"ColumnTypes\" positionX=\"-54\" positionY=\"54\" width=\"128\" height=\"210\"/>\n        <element name=\"ManySystemColumns\" positionX=\"-252\" positionY=\"27\" width=\"128\" height=\"148\"/>\n        <element name=\"MS_TableConfig\" positionX=\"160\" positionY=\"192\" width=\"128\" height=\"118\"/>\n        <element name=\"MS_TableOperationErrors\" positionX=\"153\" positionY=\"-189\" width=\"128\" height=\"103\"/>\n        <element name=\"MS_TableOperations\" positionX=\"-63\" positionY=\"-189\" width=\"128\" height=\"118\"/>\n        <element name=\"Parent\" positionX=\"-99\" positionY=\"-18\" width=\"128\" height=\"90\"/>\n        <element name=\"TodoItem\" positionX=\"-324\" positionY=\"-45\" width=\"128\" height=\"105\"/>\n        <element name=\"TodoNoVersion\" positionX=\"-234\" positionY=\"-126\" width=\"128\" height=\"73\"/>\n    </elements>\n</model>"
  },
  {
    "path": "sdk/iOS/test/MSClientTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSClient.h\"\n#import \"MSSDKFeatures.h\"\n#import \"MSTestFilter.h\"\n\n@interface MSClientTests : XCTestCase {\n    BOOL done;\n}\n\n@end\n\n\n@implementation MSClientTests\n\n\n#pragma mark * Setup and TearDown\n\n\n-(void) setUp\n{\n    NSLog(@\"%@ setUp\", self.name);\n    \n    done = NO;\n}\n\n-(void) tearDown\n{\n    NSLog(@\"%@ tearDown\", self.name);\n}\n\n\n#pragma mark * Static Constructor Method Tests\n\n\n-(void) testStaticConstructor1ReturnsClient\n{\n    MSClient *client =\n    [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n    \n    XCTAssertNotNil(client, @\"client should not be nil.\");\n    \n    XCTAssertNotNil(client.applicationURL, @\"client.applicationURL should not be nil.\");\n    NSString *urlString = [client.applicationURL absoluteString];\n    XCTAssertTrue([urlString isEqualToString:@\"http://someURL.com\"],\n                 @\"The client should be using the url it was created with.\");\n    \n    XCTAssertNil(client.applicationKey, @\"client.applicationKey should be nil.\");\n}\n\n-(void) testStaticConstructor2ReturnsClient\n{\n    MSClient *client =\n    [MSClient clientWithApplicationURLString:@\"http://someURL.com\"\n                          applicationKey:@\"here is some key\"];\n    \n    XCTAssertNotNil(client, @\"client should not be nil.\");\n    \n    XCTAssertNotNil(client.applicationURL, @\"client.applicationURL should not be nil.\");\n    NSString *urlString = [client.applicationURL absoluteString];\n    XCTAssertTrue([urlString isEqualToString:@\"http://someURL.com\"],\n                 @\"The client should be using the url it was created with.\");\n    \n    XCTAssertNotNil(client.applicationKey, @\"client.applicationKey should not be nil.\");\n    XCTAssertTrue([client.applicationKey isEqualToString:@\"here is some key\"],\n                 @\"The client should be using the url it was created with.\");\n}\n\n-(void) testStaticConstructor3ReturnsClient\n{\n    NSURL *appURL = [NSURL URLWithString:@\"http://someURL.com\"];\n    \n    MSClient *client =\n    [MSClient clientWithApplicationURL:appURL];\n    \n    XCTAssertNotNil(client, @\"client should not be nil.\");\n    \n    XCTAssertNotNil(client.applicationURL, @\"client.applicationURL should not be nil.\");\n    NSString *urlString = [client.applicationURL absoluteString];\n    XCTAssertTrue([urlString isEqualToString:@\"http://someURL.com\"],\n                 @\"The client should be using the url it was created with.\");\n    \n    XCTAssertNil(client.applicationKey, @\"client.applicationKey should be nil.\");\n}\n\n-(void) testStaticConstructor4ReturnsClient\n{\n    NSURL *appURL = [NSURL URLWithString:@\"http://someURL.com\"];\n    \n    MSClient *client =\n    [MSClient clientWithApplicationURL:appURL\n                    applicationKey:@\"here is some key\"];\n    \n    XCTAssertNotNil(client, @\"client should not be nil.\");\n    \n    XCTAssertNotNil(client.applicationURL, @\"client.applicationURL should not be nil.\");\n    NSString *urlString = [client.applicationURL absoluteString];\n    XCTAssertTrue([urlString isEqualToString:@\"http://someURL.com\"],\n                 @\"The client should be using the url it was created with.\");\n    \n    XCTAssertNotNil(client.applicationKey, @\"client.applicationKey should not be nil.\");\n    XCTAssertTrue([client.applicationKey isEqualToString:@\"here is some key\"],\n                 @\"The client should be using the url it was created with.\");\n}\n\n-(void) testStaticConstructorPercentEncodesURL\n{\n    MSClient *client =\n        [MSClient clientWithApplicationURLString:@\"http://yeah! .com\"];\n    \n    NSString *urlString = [client.applicationURL absoluteString];\n    XCTAssertTrue([urlString isEqualToString:@\"http://yeah!%20.com\"],\n                 @\"The client should have encoded and normalized the url: %@\", urlString);\n}\n\n\n#pragma mark * Init Method Tests\n\n\n-(void) testInitWithApplicationURL\n{\n    NSURL *appURL = [NSURL URLWithString:@\"http://someURL.com\"];\n    \n    MSClient *client = [[MSClient alloc] initWithApplicationURL:appURL];\n    \n    XCTAssertNotNil(client, @\"client should not be nil.\");\n    \n    XCTAssertNotNil(client.applicationURL, @\"client.applicationURL should not be nil.\");\n    NSString *urlString = [client.applicationURL absoluteString];\n    XCTAssertTrue([urlString isEqualToString:@\"http://someURL.com\"],\n                 @\"The client should be using the url it was created with.\");\n    \n    XCTAssertNil(client.applicationKey, @\"client.applicationKey should be nil.\");\n}\n\n-(void) testInitWithApplicationURLAllowsNilURL\n{    \n    MSClient *client = [[MSClient alloc] initWithApplicationURL:nil];\n    \n    XCTAssertNotNil(client, @\"client should not be nil.\");\n    XCTAssertNil(client.applicationURL, @\"client.applicationURL should be nil.\");\n    XCTAssertNil(client.applicationKey, @\"client.applicationKey should be nil.\");\n}\n\n-(void) testInitWithApplicationURLAndApplicationKey\n{\n    NSURL *appURL = [NSURL URLWithString:@\"http://someURL.com\"];\n    \n    MSClient *client =\n    [[MSClient alloc] initWithApplicationURL:appURL\n                    applicationKey:@\"here is some key\"];\n    \n    XCTAssertNotNil(client, @\"client should not be nil.\");\n    \n    XCTAssertNotNil(client.applicationURL, @\"client.applicationURL should not be nil.\");\n    NSString *urlString = [client.applicationURL absoluteString];\n    XCTAssertTrue([urlString isEqualToString:@\"http://someURL.com\"],\n                 @\"The client should be using the url it was created with.\");\n    \n    XCTAssertNotNil(client.applicationKey, @\"client.applicationKey should not be nil.\");\n    XCTAssertTrue([client.applicationKey isEqualToString:@\"here is some key\"],\n                 @\"The client should be using the url it was created with.\");\n}\n\n\n#pragma mark * Table Method Tests\n\n\n-(void) testTableWithNameReturnsTable\n{\n    MSClient *client =\n    [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n\n    MSTable *table = [client tableWithName:@\"Some Table Name\"];\n    \n    XCTAssertNotNil(table, @\"table should not be nil.\");\n}\n\n-(void) testTableWithNameAllowsNilTableName\n{\n    MSClient *client =\n    [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n    \n    MSTable *table = [client tableWithName:nil];\n    \n    XCTAssertNotNil(table, @\"table should not be nil.\");\n}\n\n\n#pragma mark * Invoke Api Method Tests\n\n\n-(void) testInvokeAPISetsCorrectUrlMethodAndHeaders\n{\n    MSClient *client = [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n    \n    __block NSURLRequest *actualRequest = nil;\n    \n    // Use the filter to capture the request being sent\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n    testFilter.responseToUse = [[NSHTTPURLResponse alloc] initWithURL:nil\n                                                           statusCode:200\n                                                          HTTPVersion:nil\n                                                         headerFields:nil];\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    // Create a client that uses the filter\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    // Invoke the API\n    [filterClient invokeAPI:@\"someAPI\"\n                       body:nil\n                 HTTPMethod:@\"Get\"\n                 parameters:@{ @\"x\" : @24 }\n                    headers:@{ @\"someHeader\" : @\"someValue\" }\n                 completion:\n     ^(id result, NSURLResponse *response, NSError *error) {\n         \n         XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n         XCTAssertNil(error, @\"error should have been nil.\");\n               \n         NSString *actualUrl = actualRequest.URL.absoluteString;\n         XCTAssertTrue([actualUrl isEqualToString:@\"http://someURL.com/api/someAPI?x=24\"],\n                      @\"URL was not as expected.\");\n         \n         NSString *actualHeader = [actualRequest.allHTTPHeaderFields valueForKey:@\"someHeader\"];\n         XCTAssertNotNil(actualHeader, @\"actualHeader should not have been nil.\");\n         XCTAssertTrue([actualHeader isEqualToString:@\"someValue\"],\n                      @\"Header value was not as expected.\");\n         \n         NSString *actualMethod = actualRequest.HTTPMethod;\n         XCTAssertNotNil(actualMethod, @\"actualMethod should not have been nil.\");\n         XCTAssertTrue([actualMethod isEqualToString:@\"GET\"],\n                      @\"HTTP Method was not as expected.\");\n         \n         done = YES;\n     }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testInvokeAPISerializesAsJson\n{\n    MSClient *client = [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n    \n    __block NSURLRequest *actualRequest = nil;\n    \n    // Use the filter to capture the request being sent\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n    testFilter.responseToUse = [[NSHTTPURLResponse alloc] initWithURL:nil\n                                                           statusCode:200\n                                                          HTTPVersion:nil\n                                                         headerFields:nil];\n    \n    testFilter.dataToUse = [@\"{\\\"id\\\":5,\\\"name\\\":\\\"bob\\\"}\"\n                            dataUsingEncoding:NSUTF8StringEncoding];\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    // Create a client that uses the filter\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    // Invoke the API\n    [filterClient invokeAPI:@\"someAPI\"\n                       body:@{@\"id\":@1, @\"name\":@\"jim\" }\n                 HTTPMethod:@\"Get\"\n                 parameters:nil\n                    headers:nil\n                 completion:\n     ^(id result, NSURLResponse *response, NSError *error) {\n         \n         XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n         XCTAssertNil(error, @\"error should have been nil.\");\n         \n         NSData *actualBody = actualRequest.HTTPBody;\n         NSString *bodyString = [[NSString alloc] initWithData:actualBody\n                                                      encoding:NSUTF8StringEncoding];\n         XCTAssertTrue([bodyString isEqualToString:@\"{\\\"id\\\":1,\\\"name\\\":\\\"jim\\\"}\"],\n                      @\"The body was not serialized as expected.\");\n         \n         XCTAssertNotNil(result, @\"result should not have been nil.\");\n         XCTAssertTrue([[result valueForKey:@\"id\"] isEqual:@5], @\"The id should have been 5\");\n         XCTAssertTrue([[result valueForKey:@\"name\"] isEqualToString:@\"bob\"], @\"The name should have been 'bob'\");\n         \n         done = YES;\n     }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testInvokeAPIPassesAlongData\n{\n    MSClient *client = [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n    \n    __block NSURLRequest *actualRequest = nil;\n    \n    NSData *testData = [@\"{\\\"id\\\":5,\\\"name\\\":\\\"bob\\\"}\"\n                        dataUsingEncoding:NSUTF8StringEncoding];\n    \n    // Use the filter to capture the request being sent\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n    testFilter.responseToUse = [[NSHTTPURLResponse alloc] initWithURL:nil\n                                                           statusCode:200\n                                                          HTTPVersion:nil\n                                                         headerFields:nil];\n    testFilter.dataToUse = testData;\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    // Create a client that uses the filter\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    // Invoke the API\n    [filterClient invokeAPI:@\"someAPI\"\n                       data:testData\n                 HTTPMethod:@\"Get\"\n                 parameters:nil\n                    headers:nil\n                 completion:\n     ^(NSData *result, NSURLResponse *response, NSError *error) {\n         \n         XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n         XCTAssertNil(error, @\"error should have been nil.\");\n         \n         NSData *actualBody = actualRequest.HTTPBody;\n         XCTAssertNotNil(actualBody, @\"actualBody should not have been nil.\");\n         XCTAssertEqualObjects(actualBody, testData, @\"Should be the same data instance.\");\n         \n         XCTAssertNotNil(result, @\"result should not have been nil.\");\n         XCTAssertEqualObjects(result, testData, @\"Should be the same data instance.\");\n\n         NSString *contentType = [actualRequest.allHTTPHeaderFields valueForKey:@\"Content-Type\"];\n         XCTAssertNotNil(contentType, @\"contentType should not have been nil.\");\n         XCTAssertTrue([contentType isEqualToString:@\"application/json\"],\n                                                   @\"Content-Type was not as expected.\");\n         done = YES;\n     }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testInvokeAPIHonorsContentTypeIfSet\n{\n    MSClient *client = [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n    \n    __block NSURLRequest *actualRequest = nil;\n    \n    NSData *testData = [@\"{\\\"id\\\":5,\\\"name\\\":\\\"bob\\\"}\"\n                        dataUsingEncoding:NSUTF8StringEncoding];\n    \n    // Use the filter to capture the request being sent\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n    testFilter.responseToUse = [[NSHTTPURLResponse alloc] initWithURL:nil\n                                                           statusCode:200\n                                                          HTTPVersion:nil\n                                                         headerFields:nil];\n    testFilter.dataToUse = testData;\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    // Create a client that uses the filter\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    // Invoke the API\n    [filterClient invokeAPI:@\"someAPI\"\n                       data:testData\n                 HTTPMethod:@\"Get\"\n                 parameters:nil\n                    headers:@{@\"Content-Type\":@\"text/json\"}\n                 completion:\n     ^(NSData *result, NSURLResponse *response, NSError *error) {\n         \n         XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n         XCTAssertNil(error, @\"error should have been nil.\");\n         \n         NSData *actualBody = actualRequest.HTTPBody;\n         XCTAssertNotNil(actualBody, @\"actualBody should not have been nil.\");\n         XCTAssertEqualObjects(actualBody, testData, @\"Should be the same data instance.\");\n         \n         XCTAssertNotNil(result, @\"result should not have been nil.\");\n         XCTAssertEqualObjects(result, testData, @\"Should be the same data instance.\");\n         \n         NSString *contentType = [actualRequest.allHTTPHeaderFields valueForKey:@\"Content-Type\"];\n         XCTAssertNotNil(contentType, @\"contentType should not have been nil.\");\n         XCTAssertTrue([contentType isEqualToString:@\"text/json\"],\n                                                   @\"Content-Type was not as expected.\");\n         \n         done = YES;\n     }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testInvokeAPIAllowsNilAPIName\n{\n    MSClient *client = [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n    \n    __block NSURLRequest *actualRequest = nil;\n    \n    // Use the filter to capture the request being sent\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n    testFilter.responseToUse = [[NSHTTPURLResponse alloc] initWithURL:nil\n                                                           statusCode:200\n                                                          HTTPVersion:nil\n                                                         headerFields:nil];\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    // Create a client that uses the filter\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    // Invoke the API\n    [filterClient invokeAPI:nil\n                       body:nil\n                 HTTPMethod:@\"Get\"\n                 parameters:nil\n                    headers:nil\n                 completion:\n     ^(id result, NSURLResponse *response, NSError *error) {\n         \n         XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n         XCTAssertNil(error, @\"error should have been nil.\");\n         \n         NSString *actualUrl = actualRequest.URL.absoluteString;\n         XCTAssertTrue([actualUrl isEqualToString:@\"http://someURL.com/api/\"],\n                      @\"URL was not as expected.\");\n         \n         done = YES;\n     }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testInvokeAPIAllowsNilData\n{\n    MSClient *client = [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n    \n    __block NSURLRequest *actualRequest = nil;\n    \n    // Use the filter to capture the request being sent\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n    testFilter.responseToUse = [[NSHTTPURLResponse alloc] initWithURL:nil\n                                                           statusCode:200\n                                                          HTTPVersion:nil\n                                                         headerFields:nil];\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    // Create a client that uses the filter\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    // Invoke the API\n    [filterClient invokeAPI:@\"someApi\"\n                       data:nil\n                 HTTPMethod:@\"Get\"\n                 parameters:nil\n                    headers:nil\n                 completion:\n     ^(NSData *result, NSURLResponse *response, NSError *error) {\n         \n         XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n         XCTAssertNil(error, @\"error should have been nil.\");\n         \n         XCTAssertNil(actualRequest.HTTPBody, @\"body should have been nil.\");\n         \n         done = YES;\n     }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testInvokeAPIAllowsNilMethod\n{\n    MSClient *client = [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n    \n    __block NSURLRequest *actualRequest = nil;\n    \n    // Use the filter to capture the request being sent\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n    testFilter.responseToUse = [[NSHTTPURLResponse alloc] initWithURL:nil\n                                                           statusCode:200\n                                                          HTTPVersion:nil\n                                                         headerFields:nil];\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    // Create a client that uses the filter\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    // Invoke the API\n    [filterClient invokeAPI:@\"someApi\"\n                       body:nil\n                 HTTPMethod:nil\n                 parameters:nil\n                    headers:nil\n                 completion:\n     ^(id result, NSURLResponse *response, NSError *error) {\n         \n         XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n         XCTAssertNil(error, @\"error should have been nil.\");\n         \n         NSString *actualUrl = actualRequest.URL.absoluteString;\n         XCTAssertTrue([actualUrl isEqualToString:@\"http://someURL.com/api/someApi\"],\n                      @\"URL was not as expected.\");\n         \n         XCTAssertTrue([actualRequest.HTTPMethod isEqualToString:@\"POST\"], @\"The default HTTP method should have been 'POST'\");\n         \n         done = YES;\n     }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testInvokeReturnsErrorFor400OrGreater\n{\n    MSClient *client = [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n\n    // Use the filter to capture the request being sent\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n    testFilter.responseToUse = [[NSHTTPURLResponse alloc] initWithURL:nil\n                                                           statusCode:500\n                                                          HTTPVersion:nil\n                                                         headerFields:nil];\n    NSString* stringData = @\"This is the error msg.\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    testFilter.dataToUse = data;\n    \n    // Create a client that uses the filter\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    // Invoke the API\n    [filterClient invokeAPI:@\"someApi\"\n                       data:nil\n                 HTTPMethod:@\"GET\"\n                 parameters:nil\n                    headers:nil\n                 completion:\n     ^(NSData *data, NSURLResponse *response, NSError *error) {\n         \n         XCTAssertNil(response, @\"response should have been nil.\");\n         XCTAssertNotNil(error, @\"error should not have been nil.\");\n         XCTAssertTrue([[error localizedDescription] isEqualToString:\n                        @\"This is the error msg.\"],\n                        @\"error description was: %@\", [error localizedDescription]);\n         done = YES;\n     }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n- (void) testInvokeApiAllowsArrayDataOut\n{\n    MSClient *client = [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n    \n    __block NSURLRequest *actualRequest = nil;\n\n    // Use the filter to capture the request being sent\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n    testFilter.responseToUse = [[NSHTTPURLResponse alloc] initWithURL:nil\n                                                           statusCode:200\n                                                          HTTPVersion:nil\n                                                         headerFields:nil];\n    \n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    // Create a client that uses the filter\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    // Invoke the API\n    [filterClient invokeAPI:@\"somApi\"\n                       body:@[@\"apple\", @\"orange\", @\"banana\"]\n                 HTTPMethod:@\"Get\"\n                 parameters:nil\n                    headers:nil\n                 completion:\n     ^(id result, NSHTTPURLResponse *response, NSError *error) {\n         NSString *bodyString = [[NSString alloc] initWithData:actualRequest.HTTPBody\n                                                      encoding:NSUTF8StringEncoding];\n         \n         XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n         XCTAssertNil(error, @\"error should have been nil.\");\n         XCTAssertEqualObjects(@\"[\\\"apple\\\",\\\"orange\\\",\\\"banana\\\"]\", bodyString, @\"Unexpected body found: %@\", bodyString);\n         \n         done = YES;\n     }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void)testInvokeAPIJsonSetsCorrectFeaturesHeader:(BOOL)useQueryParam {\n    MSClient *client = [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n    NSString *expectedFeatures = useQueryParam ? @\"AJ,QS\" : @\"AJ\";\n    NSDictionary *queryParams = useQueryParam ? @{@\"x\":@24} : nil;\n    __block NSURLRequest *actualRequest = nil;\n    \n    // Use the filter to capture the request being sent\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200];\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n\n    // Create a client that uses the filter\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n\n    // Invoke the API\n    [filterClient invokeAPI:@\"someAPI\"\n                       body:nil\n                 HTTPMethod:@\"GET\"\n                 parameters:queryParams\n                    headers:nil\n                 completion:\n     ^(id result, NSURLResponse *response, NSError *error) {\n\n         XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n         XCTAssertNil(error, @\"error should have been nil.\");\n\n         NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n         XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n         XCTAssertTrue([featuresHeader isEqualToString:expectedFeatures], @\"Header value (%@) was not as expected (%@)\", featuresHeader, expectedFeatures);\n\n         done = YES;\n     }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testInvokeAPIJsonNoQueryParametersSetsCorrectFeaturesHeader\n{\n    [self testInvokeAPIJsonSetsCorrectFeaturesHeader:NO];\n}\n\n-(void) testInvokeAPIJsonWithQueryParametersSetsCorrectFeaturesHeader\n{\n    [self testInvokeAPIJsonSetsCorrectFeaturesHeader:YES];\n}\n\n-(void)testInvokeAPIDataSetsCorrectFeaturesHeader:(BOOL)useQueryParam {\n    MSClient *client = [MSClient clientWithApplicationURLString:@\"http://someURL.com\"];\n    NSString *expectedFeatures = useQueryParam ? @\"AG,QS\" : @\"AG\";\n    NSDictionary *queryParams = useQueryParam ? @{@\"x\":@24} : nil;\n    __block NSURLRequest *actualRequest = nil;\n\n    // Use the filter to capture the request being sent\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200];\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n\n    // Create a client that uses the filter\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n\n    NSData *requestBody = [@\"hello world\" dataUsingEncoding:NSUTF8StringEncoding];\n    // Invoke the API\n    [filterClient invokeAPI:@\"someApi\"\n                       data:requestBody\n                 HTTPMethod:@\"POST\"\n                 parameters:queryParams\n                    headers:@{@\"Content-Type\": @\"text/plain\"}\n                 completion:^(NSData *result, NSHTTPURLResponse *response, NSError *error) {\n                     XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n                     XCTAssertNil(error, @\"error should have been nil.\");\n\n                     NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n                     XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n                     XCTAssertTrue([featuresHeader isEqualToString:expectedFeatures], @\"Header value (%@) was not as expected (%@)\", featuresHeader, expectedFeatures);\n\n                     done = YES;\n                 }];\n\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testInvokeAPIDataNoQueryParametersSetsCorrectFeaturesHeader\n{\n    [self testInvokeAPIDataSetsCorrectFeaturesHeader:NO];\n}\n\n-(void) testInvokeAPIDataWithQueryParametersSetsCorrectFeaturesHeader\n{\n    [self testInvokeAPIDataSetsCorrectFeaturesHeader:YES];\n}\n\n\n#pragma mark * Async Test Helper Method\n\n\n-(BOOL) waitForTest:(NSTimeInterval)testDuration {\n    \n    NSDate *timeoutAt = [NSDate dateWithTimeIntervalSinceNow:testDuration];\n    \n    while (!done) {\n        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode\n                                 beforeDate:timeoutAt];\n        if([timeoutAt timeIntervalSinceNow] <= 0.0) {\n            break;\n        }\n    };\n    \n    return done;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSCoreDataStore+TestHelper.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <WindowsAzureMobileServices/WindowsAzureMobileServices.h>\n\n@interface MSCoreDataStore (TestHelper)\n\n+ (NSManagedObjectContext *)inMemoryManagedObjectContext;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSCoreDataStore+TestHelper.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSCoreDataStore+TestHelper.h\"\n\n@implementation MSCoreDataStore (TestHelper)\n\n+ (NSManagedObjectContext *)inMemoryManagedObjectContext\n{\n    NSBundle *bundle = [NSBundle bundleForClass:[self class]];\n    NSURL *url = [bundle URLForResource:@\"CoreDataTestModel\" withExtension:@\"momd\"];\n    NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];\n    \n    NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];\n    [coordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:0];\n    \n    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];\n    context.persistentStoreCoordinator = coordinator;\n    \n    return context;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSCoreDataStoreTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n\n#import <XCTest/XCTest.h>\n#import \"MSCoreDataStore.h\"\n#import \"MSCoreDataStore+TestHelper.h\"\n#import \"MSJSONSerializer.h\"\n#import \"TodoItem.h\"\n\n@interface MSCoreDataStoreTests : XCTestCase {\n    BOOL done;\n}\n@property (nonatomic, strong) MSCoreDataStore *store;\n@property (nonatomic, strong) NSManagedObjectContext *context;\n@property (nonatomic, strong) MSClient *client;\n\n@end\n\n@implementation MSCoreDataStoreTests\n\n// Table used for running tests\nstatic NSString *const TableName = @\"TodoItem\";\n\n- (void)setUp\n{\n    NSLog(@\"%@ setUp\", self.name);\n    \n    self.context = [MSCoreDataStore inMemoryManagedObjectContext];\n    self.store = [[MSCoreDataStore alloc] initWithManagedObjectContext:self.context];\n    self.client = [MSClient clientWithApplicationURLString:@\"\"];\n    self.client.syncContext = [[MSSyncContext alloc] initWithDelegate:nil dataSource:self.store callback:nil];\n    \n    XCTAssertNotNil(self.store, @\"In memory store could not be created\");\n    \n    done = NO;\n}\n\n-(void)tearDown\n{\n    self.store = nil;\n    NSLog(@\"%@ tearDown\", self.name);\n\n    [super tearDown];\n}\n\n-(void)testInit\n{\n    XCTAssertNotNil(self.store, @\"store creation failed\");\n}\n\n// Tests MSCoreDataStore Read, Update and Delete operations are case insensitive for the Id column.\n-(void)testReadUpdateDelete_CaseInsensitiveIdOperations\n{\n    NSError *error;\n\n    // Seed data to be inserted in the table\n    NSString *originalItemId = @\"itemid\";\n    NSArray *originalItems = @[ @{ @\"id\" : originalItemId, @\"text\" : @\"original text\" } ];\n\n    // Data to be used for updating the table. The Id differs from the Id of the seed data only in case\n    NSString *updatedItemId = @\"ITEMID\";\n    NSString *updatedText = @\"updated text\";\n    NSArray *updatedItems = @[ @{ @\"id\" : updatedItemId, @\"text\" : updatedText } ];\n    \n    // Initialize table\n    MSSyncTable *syncTable = [[MSSyncTable alloc] initWithName:TableName client:self.client];\n\n    // Populate the table\n    [self.store upsertItems:originalItems table:TableName orError:&error];\n    XCTAssertNil(error, @\"upsert failed: %@\", error.description);\n\n    // Read the table using ID with different case\n    NSDictionary *item = [self.store readTable:TableName withItemId:updatedItemId orError:&error];\n    XCTAssertNil(error, @\"readTable:withItemId: failed: %@\", error.description);\n    XCTAssertNotNil(item, @\"item should have been found in the table\");\n\n    // Update the item using ID with different case\n    [self.store upsertItems:updatedItems table:TableName orError:&error];\n    XCTAssertNil(error, @\"upsert failed: %@\", error.description);\n\n    // Verify the original row got updated\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:syncTable predicate:nil];\n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertEqual(result.items.count, 1, @\"Expected exactly one item in the table\");\n    XCTAssertTrue([result.items[0][@\"id\"] isEqualToString:updatedItemId], @\"Incorrect item id. Did the query return wrong item?\");\n    XCTAssertTrue([result.items[0][@\"text\"] isEqualToString:updatedText], @\"Incorrect text. Did the query return wrong item?\");\n\n    // Delete the row using an ID with different case\n    [self.store deleteItemsWithIds:@[originalItemId] table:TableName orError:&error];\n    XCTAssertNil(error, @\"deleteItemsWithIds: failed: %@\", error.description);\n\n    // Read to ensure the item is actually gone\n    result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertEqual(result.items.count, 0, @\"Expected the table to be empty\");\n}\n\n\n-(void)testUpsertSingleRecordAndReadSuccess\n{\n    NSError *error;\n    NSArray *testArray = @[@{@\"id\":@\"ABC\", @\"text\": @\"test1\", @\"__version\":@\"APPLE\"}];\n    \n    [self.store upsertItems:testArray table:TableName orError:&error];\n    XCTAssertNil(error, @\"upsert failed: %@\", error.description);\n    \n    NSDictionary *item = [self.store readTable:TableName withItemId:@\"ABC\" orError:&error];\n    XCTAssertNil(error, @\"readTable:withItemId: failed: %@\", error.description);\n    XCTAssertNotNil(item, @\"item should not have been nil\");\n    XCTAssertTrue([item[@\"id\"] isEqualToString:@\"ABC\"], @\"Incorrect item id\");\n    XCTAssertNotNil(item[MSSystemColumnVersion], @\"__version was missing\");\n    XCTAssertNil(item[@\"ms_version\"], @\"__version was missing\");\n    \n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:TableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertEqual(result.items.count, 1);\n    \n    item = (result.items)[0];\n    XCTAssertNotNil(item);\n    XCTAssertEqualObjects(item[@\"id\"], @\"ABC\");\n    XCTAssertNotNil(item[MSSystemColumnVersion]);\n    XCTAssertNil(item[@\"ms_version\"]);\n}\n\n-(void)testUpsertMultipleRecordsAndReadSuccess\n{\n    NSError *error;\n    NSArray *testArray = @[@{@\"id\":@\"A\", @\"text\": @\"test1\"},\n                            @{@\"id\":@\"B\", @\"text\": @\"test2\"},\n                            @{@\"id\":@\"C\", @\"text\": @\"test3\"}];\n    \n    [self.store upsertItems:testArray table:TableName orError:&error];\n    XCTAssertNil(error, @\"upsert failed: %@\", error.description);\n    \n    NSDictionary *item = [self.store readTable:TableName withItemId:@\"B\" orError:&error];\n    XCTAssertNil(error, @\"readTable:withItemId: failed: %@\", error.description);\n    XCTAssertNotNil(item);\n    XCTAssertEqualObjects(item[@\"id\"], @\"B\");\n    XCTAssertEqualObjects(item[@\"text\"], @\"test2\");\n    \n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:TableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertEqual(result.items.count, 3);\n}\n\n-(void)testUpsertWithoutVersionAndReadSuccess\n{\n    NSError *error;\n    NSArray *testArray = @[@{@\"id\":@\"A\", @\"text\": @\"test1\"}];\n    \n    [self.store upsertItems:testArray table:@\"TodoNoVersion\" orError:&error];\n    XCTAssertNil(error, @\"upsert failed: %@\", error.description);\n    \n    NSDictionary *item = [self.store readTable:@\"TodoNoVersion\" withItemId:@\"A\" orError:&error];\n    XCTAssertNil(error, @\"readTable:withItemId: failed: %@\", error.description);\n    XCTAssertNotNil(item, @\"item should not have been nil\");\n    XCTAssertTrue([item[@\"id\"] isEqualToString:@\"A\"], @\"Incorrect item id\");\n    XCTAssertNil(item[MSSystemColumnVersion]);\n    XCTAssertNil(item[@\"ms_version\"]);\n    \n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:@\"TodoNoVersion\" client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertNotNil(result);\n    XCTAssertEqual(result.items.count, 1);\n    \n    item = (result.items)[0];\n    XCTAssertNotNil(item);\n    XCTAssertEqualObjects(item[@\"id\"], @\"A\");\n    XCTAssertNil(item[MSSystemColumnVersion]);\n    XCTAssertNil(item[@\"ms_version\"]);\n}\n\n-(void)testUpsertSystemColumnsConvert_Success\n{\n    NSError *error;\n    \n    NSDate *now = [NSDate date];\n    MSJSONSerializer *serializer = [MSJSONSerializer JSONSerializer];\n    NSData *rawDate = [@\"\\\"2014-05-27T20:37:33.055Z\\\"\" dataUsingEncoding:NSUTF8StringEncoding];\n    NSDate *testDate = [serializer itemFromData:rawDate withOriginalItem:nil ensureDictionary:NO orError:&error];\n    \n    NSDictionary *originalItem = @{\n                               MSSystemColumnId:@\"AmazingRecord1\",\n                               @\"text\": @\"test1\",\n                               MSSystemColumnVersion: @\"AAAAAAAAjlg=\",\n                               MSSystemColumnCreatedAt: testDate,\n                               MSSystemColumnUpdatedAt: now,\n                               @\"__meaningOfLife\": @42,\n                               MSSystemColumnDeleted : @NO\n                           };\n    \n    [self.store upsertItems:@[originalItem] table:@\"ManySystemColumns\" orError:&error];\n    XCTAssertNil(error, @\"upsert failed: %@\", error.description);\n    \n    // Test read with id\n\n    NSDictionary *item = [self.store readTable:@\"ManySystemColumns\" withItemId:@\"AmazingRecord1\" orError:&error];\n    XCTAssertNil(error, @\"readTable:withItemId: failed: %@\", error.description);\n    \n    XCTAssertNotNil(item, @\"item should not have been nil\");\n    XCTAssertTrue([item[MSSystemColumnId] isEqualToString:@\"AmazingRecord1\"], @\"Incorrect item id\");\n    XCTAssertTrue([item[MSSystemColumnVersion] isEqualToString:originalItem[MSSystemColumnVersion]], @\"Incorrect version\");\n    XCTAssertEqualObjects(item[MSSystemColumnUpdatedAt], originalItem[MSSystemColumnUpdatedAt], @\"Incorrect updated at\");\n    XCTAssertEqualObjects(item[MSSystemColumnCreatedAt], originalItem[MSSystemColumnCreatedAt], @\"Incorrect created at\");\n    XCTAssertEqualObjects(item[MSSystemColumnDeleted], originalItem[MSSystemColumnDeleted], @\"Incorrect deleted\");\n    XCTAssertEqualObjects(item[@\"__meaningOfLife\"], originalItem[@\"__meaningOfLife\"], @\"Incorrect meaning of life\");\n    \n    NSSet *msKeys = [item keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {\n        *stop = [(NSString *)key hasPrefix:@\"ms_\"];\n        return *stop;\n    }];\n    XCTAssertTrue(msKeys.count == 0, @\"ms_ column keys were exposed\");\n    \n    // Repeat for query\n    \n    MSSyncTable *manySystemColumns = [[MSSyncTable alloc] initWithName:@\"ManySystemColumns\"\n                                                                client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:manySystemColumns predicate:nil];\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertNotNil(result);\n    XCTAssertEqual(result.items.count, 1);\n    \n    XCTAssertNotNil(item, @\"item should not have been nil\");\n    XCTAssertEqualObjects(item[MSSystemColumnId], @\"AmazingRecord1\");\n    XCTAssertEqualObjects(item[MSSystemColumnVersion], originalItem[MSSystemColumnVersion]);\n    XCTAssertEqualObjects(item[MSSystemColumnUpdatedAt], originalItem[MSSystemColumnUpdatedAt]);\n    XCTAssertEqualObjects(item[MSSystemColumnCreatedAt], originalItem[MSSystemColumnCreatedAt]);\n    XCTAssertEqualObjects(item[MSSystemColumnDeleted], originalItem[MSSystemColumnDeleted]);\n    XCTAssertEqualObjects(item[@\"__meaningOfLife\"], originalItem[@\"__meaningOfLife\"]);\n    \n    msKeys = [item keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {\n        *stop = [(NSString *)key hasPrefix:@\"ms_\"];\n        return *stop;\n    }];\n    XCTAssertTrue(msKeys.count == 0, @\"ms_ column keys were exposed\");\n}\n\n-(void)testUpsertRelationships\n{\n    NSError *error;\n    NSDictionary *originalItem = @{@\"id\":@\"A\", @\"name\": @\"test1\", @\"child\":@\"123\"};\n    \n    [self.store upsertItems:@[originalItem] table:@\"Parent\" orError:&error];\n    XCTAssertNil(error, @\"upsert failed: %@\", error.description);\n    \n    NSDictionary *item = [self.store readTable:@\"Parent\" withItemId:@\"A\" orError:&error];\n    XCTAssertNil(error, @\"readTable:withItemId: failed: %@\", error.description);\n\n    XCTAssertEqual(item.count, 2);\n    XCTAssertNil(item[@\"child\"]);\n}\n\n-(void)testUpsertNoTableError\n{\n    NSError *error;\n    NSArray *testArray = @[@{@\"id\":@\"A\", @\"text\": @\"test1\"}];\n    \n    [self.store upsertItems:testArray table:@\"NoSuchTable\" orError:&error];\n\n    XCTAssertNotNil(error, @\"upsert failed: %@\", error.description);\n    XCTAssertEqual(error.code, MSSyncTableLocalStoreError);\n}\n\n-(void)testReadTable_RecordWithNullPropertyValue\n{\n    NSError *error;\n    NSArray *testArray = @[@{@\"id\":@\"ABC\", @\"text\": [NSNull null]}];\n    \n    [self.store upsertItems:testArray table:TableName orError:&error];\n    XCTAssertNil(error, @\"upsert failed: %@\", error.description);\n    \n    NSDictionary *item = [self.store readTable:TableName withItemId:@\"ABC\" orError:&error];\n    XCTAssertNil(error, @\"readTable:withItemId: failed: %@\", error.description);\n    \n    XCTAssertEqual(item[@\"text\"], [NSNull null], @\"Incorrect text value. Should have been null\");\n}\n\n-(void)testReadTable_RecordWithRelationships\n{\n    NSError *error;\n    NSManagedObject *parent = [NSEntityDescription insertNewObjectForEntityForName:@\"Parent\"\n                                                            inManagedObjectContext:self.context];\n    NSManagedObject *child = [NSEntityDescription insertNewObjectForEntityForName:@\"Child\"\n                                                            inManagedObjectContext:self.context];\n    \n    [parent setValue:@\"A\" forKey:@\"id\"];\n    [parent setValue:@\"TheParent\" forKey:@\"name\"];\n    [child setValue:@\"A-1\" forKey:@\"id\"];\n    [child setValue:@12 forKey:@\"value\"];\n    [parent setValue:child forKey:@\"child\"];\n    \n    if (![self.context save:&error]) {\n        XCTFail(@\"Failed to setup relationship data: %@\", error.description);\n    }\n    \n    NSDictionary *item = [self.store readTable:@\"Parent\" withItemId:@\"A\" orError:&error];\n    XCTAssertNil(error, @\"readTable:withItemId: failed: %@\", error.description);\n    \n    XCTAssertEqualObjects(item[@\"name\"], @\"TheParent\");\n    XCTAssertNil(item[@\"child\"]);\n    \n    item = [self.store readTable:@\"Child\" withItemId:@\"A-1\" orError:&error];\n    XCTAssertNil(error, @\"readTable:withItemId: failed: %@\", error.description);\n    \n    XCTAssertEqualObjects(item[@\"value\"], @12);\n    XCTAssertNil(item[@\"parent\"]);\n    \n    MSSyncTable *parentTable = [[MSSyncTable alloc] initWithName:@\"Parent\" client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:parentTable predicate:nil];\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    \n    XCTAssertNil(error, @\"readWithQuery:orError failed: %@\", error.description);\n    item = result.items[0];\n    XCTAssertEqualObjects(item[@\"name\"], @\"TheParent\");\n    XCTAssertNil(item[@\"child\"]);\n}\n\n-(void)testReadWithQuery_RecordWithNullPropertyValue\n{\n    NSError *error;\n    NSArray *testArray = @[@{@\"id\":@\"ABC\", @\"text\": [NSNull null]}];\n    \n    [self.store upsertItems:testArray table:TableName orError:&error];\n    XCTAssertNil(error, @\"upsert failed: %@\", error.description);\n    \n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:TableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertEqual(result.items.count, 1);\n    \n    NSDictionary *item = (result.items)[0];\n    \n    XCTAssertEqual(item[@\"text\"], [NSNull null], @\"Incorrect text value. Should have been null\");\n}\n\n-(void)testReadWithQuery\n{\n    NSError *error;\n    \n    [self populateTestData];\n    \n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:TableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    query.predicate = [NSPredicate predicateWithFormat:@\"text == 'test3'\"];\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertNotNil(result);\n    XCTAssertEqual(result.items.count, 1);\n    XCTAssertEqual(result.items[0][@\"id\"], @\"C\");\n}\n\n-(void)testReadWithQuery_Take1_IncludeTotalCount\n{\n    NSError *error;\n    \n    [self populateTestData];\n    \n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:TableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    query.fetchLimit = 1;\n    query.includeTotalCount = YES;\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertNotNil(result);\n    XCTAssertEqual(result.totalCount, 3);\n    XCTAssertEqual(result.items.count, 1);\n}\n\n-(void)testReadWithQuery_SortAscending\n{\n    NSError *error;\n    \n    [self populateTestData];\n    \n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:TableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    [query orderByAscending:@\"sort\"];\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertNotNil(result);\n    XCTAssertEqual(result.items.count, 3);\n    \n    NSDictionary *item = (result.items)[0];\n    XCTAssertTrue([item[@\"id\"] isEqualToString:@\"C\"], @\"sort incorrect\");\n}\n\n-(void)testReadWithQuery_SortDescending\n{\n    NSError *error;\n    \n    [self populateTestData];\n    \n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:TableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    [query orderByDescending:@\"sort\"];\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertNotNil(result, @\"result should not have been nil\");\n    XCTAssertEqual(result.items.count, 3);\n    \n    NSDictionary *item = result.items[0];\n    XCTAssertEqualObjects(item[@\"id\"], @\"B\", @\"Incorrect sort order\");\n}\n\n-(void)testReadWithQuery_Select\n{\n    NSError *error;\n    \n    [self populateTestData];\n    \n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:TableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    query.selectFields = @[@\"sort\", @\"text\"];\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertNotNil(result);\n    XCTAssertEqual(result.items.count, 3);\n    \n    NSDictionary *item = (result.items)[0];\n    XCTAssertNil(item[@\"id\"], @\"Unexpected id: %@\", item[@\"id\"]);\n    XCTAssertNotNil(item[@\"sort\"]);\n    XCTAssertNotNil(item[@\"text\"]);\n    \n    // NOTE: to not break oc, you get version regardless\n    XCTAssertNotNil(item[@\"__version\"]);\n}\n\n-(void)testReadWithQuery_Select_SystemColumns\n{\n    NSError *error;\n    \n    NSArray *testData = @[\n      @{ MSSystemColumnId:@\"A\", @\"text\": @\"t1\", MSSystemColumnVersion: @\"AAAAAAAAjlg=\", @\"__meaningOfLife\": @42},\n      @{ MSSystemColumnId:@\"B\", @\"text\": @\"t2\", MSSystemColumnVersion: @\"AAAAAAAAjlh=\", @\"__meaningOfLife\": @43},\n      @{ MSSystemColumnId:@\"C\", @\"text\": @\"t3\", MSSystemColumnVersion: @\"AAAAAAAAjli=\", @\"__meaningOfLife\": @44}\n    ];\n    \n    [self.store upsertItems:testData table:@\"ManySystemColumns\" orError:&error];\n    XCTAssertNil(error, @\"Upsert failed: %@\", error.description);\n    \n    // Now check selecting subset of columns\n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:@\"ManySystemColumns\"\n                                                       client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    query.selectFields = @[@\"text\", @\"__version\", @\"__meaningOfLife\"];\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertNotNil(result, @\"result should not have been nil\");\n    XCTAssertEqual(result.items.count, 3);\n    \n    NSDictionary *item = (result.items)[0];\n    XCTAssertNotNil(item[@\"text\"]);\n    XCTAssertNotNil(item[@\"__meaningOfLife\"]);\n    XCTAssertNotNil(item[MSSystemColumnVersion]);\n    XCTAssertEqual(item.count, 3, @\"Select returned extra columns\");\n}\n\n-(void)testReadWithQuery_NoTable_Error\n{\n    NSError *error;\n\n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:@\"NoSuchTable\" client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    \n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n\n    XCTAssertNil(result);\n    XCTAssertNotNil(error);\n    XCTAssertEqual(error.code, MSSyncTableLocalStoreError);\n}\n\n-(void)testDeleteWithId_Success\n{\n    NSError *error;\n    \n    [self populateTestData];\n    \n    [self.store deleteItemsWithIds:@[@\"B\"] table:TableName orError:&error];\n    XCTAssertNil(error, @\"deleteItemsWithIds: failed: %@\", error.description);\n\n    NSDictionary *item = [self.store readTable:TableName withItemId:@\"B\" orError:&error];\n    XCTAssertNil(error, @\"readTable:withItemId: failed: %@\", error.description);\n    XCTAssertNil(item, @\"item should have been nil\");\n}\n\n-(void)testDeleteWithId_MultipleRecords_Success\n{\n    NSError *error;\n    \n    [self populateTestData];\n    \n    [self.store deleteItemsWithIds:@[@\"A\", @\"C\"] table:TableName orError:&error];\n    XCTAssertNil(error, @\"deleteItemsWithIds: failed: %@\", error.description);\n    \n    NSDictionary *item = [self.store readTable:TableName withItemId:@\"A\" orError:&error];\n    XCTAssertNil(error, @\"readTable:withItemId: failed: %@\", error.description);\n    XCTAssertNil(item, @\"item should have been nil\");\n\n    item = [self.store readTable:TableName withItemId:@\"B\" orError:&error];\n    XCTAssertNil(error, @\"readTable:withItemId: failed: %@\", error.description);\n    XCTAssertNotNil(item, @\"item should not have been nil\");\n}\n\n-(void)testDeleteWithId_NoRecord_Success\n{\n    NSError *error;\n    \n    [self.store deleteItemsWithIds:@[@\"B\"] table:@\"TodoNoVersion\" orError:&error];\n    XCTAssertNil(error, @\"deleteItemsWithIds: failed: %@\", error.description);\n}\n\n-(void)testDeleteWithIds_NoTable_Error\n{\n    NSError *error;\n    \n    [self.store deleteItemsWithIds:@[@\"B\"] table:@\"NoSuchTable\" orError:&error];\n    \n    XCTAssertNotNil(error, @\"upsert failed: %@\", error.description);\n    XCTAssertEqual(error.code, MSSyncTableLocalStoreError);\n}\n\n- (void)testDeleteWithQuery_AllRecord_Success\n{\n    NSError *error;\n    \n    [self populateTestData];\n\n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:TableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    \n    [self.store deleteUsingQuery:query orError:&error];\n    XCTAssertNil(error, @\"deleteItemsWithIds: failed: %@\", error.description);\n\n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertNotNil(result);\n    XCTAssertEqual(result.items.count, 0);\n}\n\n- (void)testDeleteWithQuery_Predicate_Success\n{\n    NSError *error;\n    \n    [self populateTestData];\n    \n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:TableName client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    query.predicate = [NSPredicate predicateWithFormat:@\"text == 'test3'\"];\n    \n    [self.store deleteUsingQuery:query orError:&error];\n    XCTAssertNil(error, @\"deleteItemsWithIds: failed: %@\", error.description);\n    \n    query.predicate = nil;\n    MSSyncContextReadResult *result = [self.store readWithQuery:query orError:&error];\n    XCTAssertNil(error, @\"readWithQuery: failed: %@\", error.description);\n    XCTAssertNotNil(result, @\"result should not have been nil\");\n    XCTAssertEqual(result.items.count, 2);\n    XCTAssertFalse([result.items[0][@\"id\"] isEqualToString:@\"C\"], @\"Record C should have been deleted\");\n    XCTAssertFalse([result.items[1][@\"id\"] isEqualToString:@\"C\"], @\"Record C should have been deleted\");\n}\n\n-(void)testDeleteWithQuery_NoTable_Error\n{\n    NSError *error;\n    \n    MSSyncTable *todoItem = [[MSSyncTable alloc] initWithName:@\"NoSuchTable\" client:self.client];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoItem predicate:nil];\n    query.predicate = [NSPredicate predicateWithFormat:@\"text == 'test3'\"];\n    \n    [self.store deleteUsingQuery:query orError:&error];\n\n    XCTAssertNotNil(error, @\"upsert failed: %@\", error.description);\n    XCTAssertEqual(error.code, MSSyncTableLocalStoreError);\n}\n\n-(void)testSystemProperties\n{\n    MSSystemProperties properties = [self.store systemPropertiesForTable:@\"ManySystemColumns\"];\n    XCTAssertEqual(properties, MSSystemPropertyCreatedAt | MSSystemPropertyUpdatedAt | MSSystemPropertyVersion | MSSystemPropertyDeleted);\n\n    properties = [self.store systemPropertiesForTable:TableName];\n    XCTAssertEqual(properties, MSSystemPropertyVersion);\n\n    properties = [self.store systemPropertiesForTable:@\"TodoItemNoVersion\"];\n    XCTAssertEqual(properties, MSSystemPropertyNone);\n}\n\n-(void)testObjectConversion\n{\n    [self populateTestData];\n    \n    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:TableName];\n    request.predicate = [NSPredicate predicateWithFormat:@\"id == %@\", @\"A\"];\n    NSArray *results = [self.context executeFetchRequest:request error:nil];\n    \n    TodoItem *toDoItemObject = results[0];\n    // Confirm we are using an internal version column\n    XCTAssertEqualObjects(toDoItemObject.ms_version, @\"APPLE\");\n    \n    NSDictionary *todoItemDictionary = [MSCoreDataStore tableItemFromManagedObject:toDoItemObject];\n\n    XCTAssertNotNil(todoItemDictionary);\n    XCTAssertEqual(todoItemDictionary.count, 4);\n    XCTAssertEqualObjects(todoItemDictionary[MSSystemColumnId], @\"A\");\n    // Confirm version was remapped\n    XCTAssertNil(todoItemDictionary[@\"ms_version\"]);\n    XCTAssertEqualObjects(todoItemDictionary[MSSystemColumnVersion], @\"APPLE\");\n    XCTAssertEqualObjects(todoItemDictionary[@\"text\"], @\"test1\");\n    \n    XCTAssertEqualObjects(todoItemDictionary[@\"sort\"], @10);\n}\n\n- (void) populateTestData\n{\n    NSError *error;\n    NSArray *testArray = @[@{@\"id\":@\"A\", @\"text\": @\"test1\", @\"sort\":@10, @\"__version\":@\"APPLE\"},\n                          @{@\"id\":@\"B\", @\"text\": @\"test2\", @\"sort\":@15, @\"__version\":@\"APPLE\"},\n                          @{@\"id\":@\"C\", @\"text\": @\"test3\", @\"sort\":@5, @\"__version\":@\"APPLE\"}];\n    \n    [self.store upsertItems:testArray table:TableName orError:&error];\n    XCTAssertNil(error, @\"upsert failed: %@\", error.description);\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSFilterTest.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSClient.h\"\n#import \"MSTable.h\"\n#import \"MSTestFilter.h\"\n\n@interface MSFilterTest : XCTestCase {\n    MSClient *client;\n        BOOL done;\n}\n\n@end\n\n@implementation MSFilterTest\n\n\n#pragma mark * Setup and TearDown\n\n\n-(void) setUp\n{\n    NSLog(@\"%@ setUp\", self.name);\n    \n    client = [MSClient clientWithApplicationURLString:@\"http://someApp\"];\n    \n    done = NO;\n}\n\n-(void) tearDown\n{\n    NSLog(@\"%@ tearDown\", self.name);\n}\n\n\n#pragma mark * Single Filter Tests\n\n\n-(void) testFilterThatReturnsResponseImmediately\n{\n    // Create a filter that will replace the response with one that has\n    // a 400 status code and an error message\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:400\n                                   HTTPVersion:nil headerFields:nil];\n    NSString* stringData = @\"This is an Error Message!\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    testFilter.responseToUse = response;\n    testFilter.dataToUse = data;\n    testFilter.ignoreNextFilter = YES;\n    \n    // Create the client and the table\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    MSTable *todoTable = [filterClient tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write E2E test!\", @\"complete\": @(NO) };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n\n        XCTAssertNil(item, @\"item should have been nil.\");\n\n        XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n        XCTAssertTrue([error domain] == MSErrorDomain,\n                     @\"error domain was: %@\", [error domain]);\n        XCTAssertTrue([error code] == MSErrorMessageErrorCode,\n                     @\"error code was: %ld\",(long)[error code]);\n        XCTAssertTrue([[error localizedDescription] isEqualToString:\n                      @\"This is an Error Message!\"],\n                     @\"error description was: %@\", [error localizedDescription]);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testFilterThatReturnsErrorImmediately\n{\n    // Create a filter that will replace the error\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSError *error = [NSError errorWithDomain:@\"SomeDomain\"\n                                         code:-102\n                                     userInfo:nil];\n    testFilter.errorToUse = error;\n    testFilter.ignoreNextFilter = YES;\n    \n    // Create the client and the table\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    MSTable *todoTable = [filterClient tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write E2E test!\", @\"complete\": @(NO) };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n    \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n        XCTAssertTrue([[error domain] isEqualToString:@\"SomeDomain\"],\n                     @\"error domain was: %@\", [error domain]);\n        XCTAssertTrue([error code] == -102,\n                     @\"error code was: %ld\",(long)[error code]);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n\n#pragma mark * Multiple Filters Tests\n\n\n-(void) testFiltersCalledInCorrectOrder\n{\n    // Create three filters that each append to the URL of the request\n    MSTestFilter *testFilterA = [[MSTestFilter alloc] init];\n    testFilterA.onInspectRequest = ^(NSURLRequest *request) {\n        NSMutableURLRequest *mutableRequest = [request mutableCopy];\n        mutableRequest.URL = [mutableRequest.URL URLByAppendingPathComponent:@\"A\"];\n        return mutableRequest;\n    };\n    \n    MSTestFilter *testFilterB = [[MSTestFilter alloc] init];\n    testFilterB.onInspectRequest = ^(NSURLRequest *request) {\n        NSMutableURLRequest *mutableRequest = [request mutableCopy];\n        mutableRequest.URL = [mutableRequest.URL URLByAppendingPathComponent:@\"B\"];\n        return mutableRequest;\n    };\n    \n    // Capture the final URL value to check with an assert below\n    __block NSURL *finalURL = nil;\n    \n    MSTestFilter *testFilterC = [[MSTestFilter alloc] init];\n    testFilterC.onInspectRequest = ^(NSURLRequest *request) {\n        NSMutableURLRequest *mutableRequest = [request mutableCopy];\n        mutableRequest.URL = [mutableRequest.URL URLByAppendingPathComponent:@\"C\"];\n        finalURL = mutableRequest.URL;\n        return mutableRequest;\n    };\n    \n    testFilterC.errorToUse = [NSError errorWithDomain:@\"TestErrorDomain\" code:-998 userInfo:nil];\n    testFilterC.ignoreNextFilter = YES;\n    \n    \n    // Create the client and the table\n    MSClient *filterClient = [[[client clientWithFilter:testFilterA]\n                                       clientWithFilter:testFilterB]\n                                       clientWithFilter:testFilterC];\n    \n    MSTable *todoTable = [filterClient tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write E2E test!\", @\"complete\": @(NO) };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n    \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue([error.domain isEqualToString:@\"TestErrorDomain\"],\n                     @\"error domain should have been TestErrorDomain.\");\n        XCTAssertTrue(error.code == -998,\n                     @\"error code should have been -998.\");\n        \n        XCTAssertTrue([finalURL.absoluteString isEqualToString:@\"http://someApp/tables/todoItem/A/B/C\"],\n                     @\"description was: %@\", finalURL.absoluteString);\n        \n        done = YES;\n        \n    }];\n    \n    XCTAssertTrue([self waitForTest:1.0], @\"Test timed out.\");\n}\n\n\n#pragma mark * Async Test Helper Method\n\n\n-(BOOL) waitForTest:(NSTimeInterval)testDuration {\n    \n    NSDate *timeoutAt = [NSDate dateWithTimeIntervalSinceNow:testDuration];\n    \n    while (!done) {\n        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode\n                                 beforeDate:timeoutAt];\n        if([timeoutAt timeIntervalSinceNow] <= 0.0) {\n            break;\n        }\n    };\n    \n    return done;\n}\n\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSJSONSerializerTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"WindowsAzureMobileServices.h\"\n#import \"MSJSONSerializer.h\"\n#import \"MSClientConnection.h\"\n#import \"MSTable+MSTableTestUtilities.h\"\n\n@interface MSJSONSerializerTests : XCTestCase {\n    MSJSONSerializer *serializer;\n}\n\n@end\n\n@implementation MSJSONSerializerTests\n\n\n#pragma mark * Setup and TearDown Methods\n\n\n- (void) setUp\n{\n    NSLog(@\"%@ setUp\", self.name);\n    \n    serializer = [MSJSONSerializer JSONSerializer];\n}\n\n- (void) tearDown\n{\n    NSLog(@\"%@ tearDown\", self.name);\n}\n\n\n#pragma mark * stringFromItem:orError\n\n\n-(void)testStringFromItemReturnsId\n{\n    NSArray *validIds = [MSTable testValidStringIds];\n    validIds = [validIds arrayByAddingObjectsFromArray:@[\n        @{@\"id\" : @1, @\"string\": @\"1\"},\n        @{@\"id\" : @INT_MAX, @\"string\": [NSString stringWithFormat:@\"%d\", INT_MAX]},\n        @{@\"id\" : @LONG_LONG_MAX, @\"string\": [NSString stringWithFormat:@\"%lld\", LONG_LONG_MAX]}\n        ]];\n    \n    NSError *error = nil;\n    \n    for (id test in validIds)\n    {\n        id testId;\n        NSString *expected;\n        if([test isKindOfClass:[NSDictionary class]]) {\n            testId = test[@\"id\"];\n            expected = test[@\"string\"];\n        } else {\n            testId = test;\n            expected = test;\n        }\n        NSString *actualId = [serializer stringFromItemId:testId orError:&error];\n        \n        XCTAssertNil(error, @\"error was not nil after getting string id for %@\", testId);\n        XCTAssertTrue([actualId isEqualToString:expected], @\"error string id was %@ and not %@\", actualId, expected);\n    }\n}\n\n-(void)testStringFromItemErrorsOnInvalidIds\n{\n    NSArray *invalidIds = [MSTable testInvalidStringIds];\n    invalidIds = [invalidIds arrayByAddingObjectsFromArray:[MSTable testEmptyStringIdsIncludingNull:YES]];\n    invalidIds = [invalidIds arrayByAddingObjectsFromArray:[MSTable testInvalidIntIds]];\n    invalidIds = [invalidIds arrayByAddingObjectsFromArray:[MSTable testNonStringNonIntValidJsonIds]];\n    invalidIds = [invalidIds arrayByAddingObjectsFromArray:[MSTable testNonStringNonIntIds]];    \n                  \n    NSError *error = nil;\n    for (id testId in invalidIds)\n    {\n        NSString *actualId = [serializer stringFromItemId:testId orError:&error];\n        XCTAssertNotNil(error, @\"error was nil after getting string id %@\", actualId);\n        \n        XCTAssertEqual(error.code, MSInvalidItemIdWithRequest);\n        XCTAssertEqualObjects(error.localizedDescription, @\"The item provided did not have a valid id.\");\n    }\n}\n\n-(void)testStringFromItemErrorsOnNilItemId\n{\n    NSError *error = nil;\n    [serializer stringFromItemId:nil orError:&error];\n    XCTAssertNotNil(error, @\"error was nil after getting nil item id\");\n    XCTAssertEqual(error.code, MSExpectedItemIdWithRequest);\n    XCTAssertEqualObjects(error.localizedDescription, @\"The item id was not provided.\");\n}\n\n\n#pragma mark * dataFromItem:idAllowed:ensureDictionary:orError: Tests\n\n\n-(void)testDataFromItemReturnsData\n{\n    NSDictionary *item = @{ @\"id\" : @5, @\"name\" : @\"bob\" };\n    \n    NSError *error = nil;\n    NSData *data = [serializer dataFromItem:item\n                                  idAllowed:YES\n                           ensureDictionary:YES\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNotNil(data, @\"data was nil after serializing item.\");\n    XCTAssertNil(error, @\"error was not nil after serializing item.\");\n    \n    NSString *expected = @\"{\\\"id\\\":5,\\\"name\\\":\\\"bob\\\"}\";\n    NSString *actual = [[NSString alloc] initWithData:data\n                                             encoding:NSUTF8StringEncoding];\n    \n    XCTAssertTrue([expected isEqualToString:actual], @\"JSON was: %@\", actual);\n}\n\n-(void)testDataFromItemWithStringIdReturnsData\n{\n    NSDictionary *item = @{ @\"id\" : @\"MY-ID\", @\"name\" : @\"bob\" };\n    \n    NSError *error = nil;\n    NSData *data = [serializer dataFromItem:item\n                                  idAllowed:YES\n                           ensureDictionary:YES\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNotNil(data, @\"data was nil after serializing item.\");\n    XCTAssertNil(error, @\"error was not nil after serializing item.\");\n    \n    NSString *expected = @\"{\\\"id\\\":\\\"MY-ID\\\",\\\"name\\\":\\\"bob\\\"}\";\n    NSString *actual = [[NSString alloc] initWithData:data\n                                             encoding:NSUTF8StringEncoding];\n    \n    XCTAssertTrue([expected isEqualToString:actual], @\"JSON was: %@\", actual);\n}\n\n-(void)testDataFromItemWithStringIdReturnsDataWithIdNotAllowed\n{\n    NSDictionary *item = @{ @\"id\" : @\"MY-ID\", @\"name\" : @\"bob\" };\n    \n    NSError *error = nil;\n    NSData *data = [serializer dataFromItem:item\n                                  idAllowed:NO\n                           ensureDictionary:YES\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNotNil(data, @\"data was nil after serializing item.\");\n    XCTAssertNil(error, @\"error was not nil after serializing item.\");\n    \n    NSString *expected = @\"{\\\"id\\\":\\\"MY-ID\\\",\\\"name\\\":\\\"bob\\\"}\";\n    NSString *actual = [[NSString alloc] initWithData:data\n                                             encoding:NSUTF8StringEncoding];\n    \n    XCTAssertTrue([expected isEqualToString:actual], @\"JSON was: %@\", actual);\n}\n\n-(void)testDataFromItemWithNullUppercaseIdReturnsDataWithIdNotAllowed\n{\n    NSDictionary *item = @{ @\"ID\" : [NSNull null], @\"name\" : @\"bob\" };\n    \n    NSError *error = nil;\n    NSData *data = [serializer dataFromItem:item\n                                  idAllowed:NO\n                           ensureDictionary:YES\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNotNil(data, @\"data was nil after serializing item.\");\n    XCTAssertNil(error, @\"error was not nil after serializing item.\");\n    \n    NSString *expected = @\"{\\\"ID\\\":null,\\\"name\\\":\\\"bob\\\"}\";\n    NSString *actual = [[NSString alloc] initWithData:data\n                                             encoding:NSUTF8StringEncoding];\n    \n    XCTAssertTrue([expected isEqualToString:actual], @\"JSON was: %@\", actual);\n}\n\n-(void)testDataFromItemWithEmptyUppercaseIdReturnsDataWithIdNotAllowed\n{\n    NSDictionary *item = @{ @\"ID\" : @\"\", @\"name\" : @\"bob\" };\n    \n    NSError *error = nil;\n    NSData *data = [serializer dataFromItem:item\n                                  idAllowed:NO\n                           ensureDictionary:YES\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNotNil(data, @\"data was nil after serializing item.\");\n    XCTAssertNil(error, @\"error was not nil after serializing item.\");\n    \n    NSString *expected = @\"{\\\"ID\\\":\\\"\\\",\\\"name\\\":\\\"bob\\\"}\";\n    NSString *actual = [[NSString alloc] initWithData:data\n                                             encoding:NSUTF8StringEncoding];\n    \n    XCTAssertTrue([expected isEqualToString:actual], @\"JSON was: %@\", actual);\n}\n\n-(void)testDataFromItemErrorForNilItem\n{\n    NSError *error = nil;\n    NSData *data = [serializer dataFromItem:nil\n                                  idAllowed:YES\n                           ensureDictionary:YES\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNil(data, @\"data was not nil after serializing item.\");\n    XCTAssertNotNil(error, @\"error was nil after serializing item.\");\n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertTrue(error.code == MSExpectedItemWithRequest,\n                 @\"error code should have been MSExpectedItemWithRequest.\");\n    \n    NSString *description = error.localizedDescription;\n    XCTAssertTrue([description isEqualToString:@\"No item was provided.\"],\n                 @\"description was: %@\", description);\n}\n\n-(void)testDataFromItemReturnsDataWithDatesSerialized\n{\n    // Create some dates\n    NSDateComponents *dateParts = [[NSDateComponents alloc] init];\n    dateParts.year = 1999;\n    dateParts.month = 12;\n    dateParts.day = 3;\n    dateParts.hour = 15;\n    dateParts.minute = 44;\n    dateParts.calendar = [[NSCalendar alloc]\n                          initWithCalendarIdentifier:NSCalendarIdentifierGregorian];\n    dateParts.calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];\n    \n    NSDate *date1 = dateParts.date;\n    dateParts.second = 29;\n    NSDate *date2 = dateParts.date;\n    NSDate *date3 = [date2 dateByAddingTimeInterval:0.3];\n    \n    NSDictionary *item = @{\n        @\"id\" : @5,\n        @\"x\" : @[\n            date1,\n            @{ @\"y\" : date2 }\n        ],\n        @\"z\" : date3\n    };\n    \n    NSError *error = nil;\n    NSData *data = [serializer dataFromItem:item\n                                  idAllowed:YES\n                           ensureDictionary:YES\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNotNil(data, @\"data was nil after serializing item.\");\n    XCTAssertNil(error, @\"error was not nil after serializing item.\");\n    \n    NSString *expected = @\"{\\\"id\\\":5,\\\"x\\\":[\\\"1999-12-03T15:44:00.000Z\\\",{\\\"y\\\":\\\"1999-12-03T15:44:29.000Z\\\"}],\\\"z\\\":\\\"1999-12-03T15:44:29.300Z\\\"}\";\n    NSString *actual = [[NSString alloc] initWithData:data\n                                             encoding:NSUTF8StringEncoding];\n    \n    XCTAssertTrue([expected isEqualToString:actual], @\"JSON was: %@\", actual);\n}\n\n-(void)testDataFromItemErrorWithIdNotAllowed\n{\n    NSError *error = nil;\n    NSDictionary *item = @{ @\"id\" : @5, @\"name\" : @\"bob\" };\n    NSData *data = [serializer dataFromItem:item\n                                  idAllowed:NO\n                           ensureDictionary:YES\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNil(data, @\"data was not nil after serializing item.\");\n    XCTAssertNotNil(error, @\"error was nil after serializing item.\");\n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertTrue(error.code == MSExistingItemIdWithRequest,\n                 @\"error code should have been MSExistingItemIdWithRequest.\");\n    \n    NSString *description = error.localizedDescription;\n    XCTAssertTrue([description isEqualToString:@\"The item provided must not have an id.\"],\n                 @\"description was: %@\", description);\n}\n\n-(void)testDataFromItemErrorWithMultipleIdNotAllowed\n{\n    NSError *error = nil;\n    NSDictionary *item = @{ @\"id\" : @5, @\"Id\": @10, @\"name\" : @\"bob\" };\n    NSData *data = [serializer dataFromItem:item\n                                  idAllowed:NO\n                           ensureDictionary:YES\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNil(data, @\"data was not nil after serializing item.\");\n    XCTAssertNotNil(error, @\"error was nil after serializing item.\");\n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertTrue(error.code == MSExistingItemIdWithRequest,\n                 @\"error code should have been MSExistingItemIdWithRequest.\");\n    \n    NSString *description = error.localizedDescription;\n    XCTAssertTrue([description isEqualToString:@\"The item provided must not have an id.\"],\n                 @\"description was: %@\", description);\n}\n\n-(void)testDataFromItemErrorWithStringUpperCaseIdNotAllowed\n{\n    NSError *error = nil;\n    NSDictionary *item = @{ @\"iD\" : @\"MY-ID\", @\"name\" : @\"bob\" };\n    NSData *data = [serializer dataFromItem:item\n                                  idAllowed:NO\n                           ensureDictionary:YES\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNil(data, @\"data was not nil after serializing item.\");\n    XCTAssertNotNil(error, @\"error was nil after serializing item.\");\n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                 @\"error code should have been MSInvalidItemIdWithRequest.\");\n    \n    NSString *description = error.localizedDescription;\n    XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                 @\"description was: %@\", description);\n}\n\n-(void)testDataFromItemErrorWithIdUpperCaseNotAllowed\n{\n    NSError *error = nil;\n    NSDictionary *item = @{ @\"Id\" : @5, @\"name\" : @\"bob\" };\n    NSData *data = [serializer dataFromItem:item\n                                  idAllowed:NO\n                           ensureDictionary:YES\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNil(data, @\"data was not nil after serializing item.\");\n    XCTAssertNotNil(error, @\"error was nil after serializing item.\");\n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertTrue(error.code == MSExistingItemIdWithRequest,\n                 @\"error code should have been MSExistingItemIdWithRequest.\");\n    \n    NSString *description = error.localizedDescription;\n    XCTAssertTrue([description isEqualToString:@\"The item provided must not have an id.\"],\n                 @\"description was: %@\", description);\n}\n\n-(void)testDataFromItemErrorWithIdNotAllowedAndNoId\n{\n    NSError *error = nil;\n    NSDictionary *item = @{ @\"name\" : @\"bob\" };\n    NSData *data = [serializer dataFromItem:item\n                                  idAllowed:NO\n                           ensureDictionary:YES\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNotNil(data, @\"data was nil after serializing item.\");\n    XCTAssertNil(error, @\"error was not nil after serializing item.\");\n    \n    NSString *expected = @\"{\\\"name\\\":\\\"bob\\\"}\";\n    NSString *actual = [[NSString alloc] initWithData:data\n                                             encoding:NSUTF8StringEncoding];\n    \n    XCTAssertTrue([expected isEqualToString:actual], @\"JSON was: %@\", actual);\n}\n\n-(void)testDataFromItemWithNonDictionaryItem\n{\n    NSArray *item = @[ @{ @\"id\" : @5, @\"name\" : @\"bob\" } ];\n    \n    NSError *error = nil;\n    NSData *data = [serializer dataFromItem:item\n                                  idAllowed:YES\n                           ensureDictionary:NO\n                     removeSystemProperties:NO\n                                    orError:&error];\n    \n    XCTAssertNotNil(data, @\"data was nil after serializing item.\");\n    XCTAssertNil(error, @\"error was not nil after serializing item.\");\n    \n    NSString *expected = @\"[{\\\"id\\\":5,\\\"name\\\":\\\"bob\\\"}]\";\n    NSString *actual = [[NSString alloc] initWithData:data\n                                             encoding:NSUTF8StringEncoding];\n    \n    XCTAssertTrue([expected isEqualToString:actual], @\"JSON was: %@\", actual);\n}\n\n\n#pragma mark * itemIdFromItem: Tests\n\n\n-(void)testItemIdFromItemReturnsId\n{\n    NSDictionary *item = @{ @\"id\" : @5, @\"name\" : @\"bob\" };\n    NSError *error = nil;\n    NSNumber *itemId = [serializer itemIdFromItem:item orError:&error];\n    long long expected = 5;\n    \n    XCTAssertNil(error, @\"error should have been nil.\");\n    XCTAssertEqual(expected, [itemId longLongValue], @\"itemId was not correct.\");\n}\n\n-(void)testItemIdFromItemWithStringIdReturnsId\n{\n    NSDictionary *item = @{ @\"id\" : @\"my-id\", @\"name\" : @\"bob\" };\n    NSError *error = nil;\n    NSString *itemId = [serializer itemIdFromItem:item orError:&error];\n\n    XCTAssertNil(error, @\"error should have been nil.\");\n    XCTAssertEqual(@\"my-id\", itemId, @\"itemId was not correct.\");\n}\n\n-(void)testItemIdFromItemThrowsForMissingId\n{\n    NSDictionary *item = @{ @\"name\" : @\"bob\" };\n\n    NSError *error = nil;\n    NSNumber *itemId = [serializer itemIdFromItem:item orError:&error];\n    \n    XCTAssertNotNil(error, @\"error should not have been nil.\");\n    XCTAssertNil(itemId, @\"itemId should have been nil.\");\n}\n\n-(void)testItemIdFromItemThrowsForNonNumericNonStringMissingId\n{\n    NSDictionary *item = @{ @\"id\" : [NSNull null], @\"name\" : @\"bob\" };\n    \n    NSError *error = nil;\n    id itemId = [serializer itemIdFromItem:item orError:&error];\n    \n    XCTAssertNotNil(error, @\"error should not have been nil.\");\n    XCTAssertNil(itemId, @\"itemId should have been nil.\");\n}\n\n-(void)testItemIdFromItemReturnsErrorIfIdIsNotLowercased\n{\n    NSDictionary *item = @{ @\"Id\" : @\"5\", @\"name\" : @\"bob\" };\n    \n    NSError *error = nil;\n    NSNumber *itemId = [serializer itemIdFromItem:item orError:&error];\n    \n    XCTAssertNotNil(error, @\"error should not have been nil.\");\n    XCTAssertNil(itemId, @\"itemId should have been nil.\");\n}\n\n\n#pragma mark * itemFromData: Tests\n\n\n-(void)testItemFromDataReturnsOriginalItemUpdated\n{\n    NSDictionary *originalItem = @{ @\"id\" : @5, @\"name\" : @\"fred\" };\n    NSMutableDictionary *mutableOriginalItem =\n                    [NSMutableDictionary dictionaryWithDictionary:originalItem];\n    \n    NSString* stringData = @\"{\\\"id\\\":5,\\\"name\\\":\\\"bob\\\"}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n\n    NSError *error = nil;\n    id newItem = [serializer itemFromData:data\n                         withOriginalItem:mutableOriginalItem\n                         ensureDictionary:YES\n                                  orError:&error];\n    \n    XCTAssertNotNil(newItem, @\"item was nil after deserializing item.\");\n    XCTAssertNil(error, @\"error was not nil after deserializing item.\");\n    XCTAssertTrue([newItem[@\"name\"] isEqualToString:@\"bob\"],\n                 @\"The name key should have been updated to 'bob'.\");\n}\n\n-(void)testItemFromDataReturnsNewItem\n{\n    NSString* stringData = @\"{\\\"id\\\":5,\\\"name\\\":\\\"bob\\\"}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = nil;\n    id newItem = [serializer itemFromData:data\n                         withOriginalItem:nil\n                         ensureDictionary:YES\n                                  orError:&error];\n    \n    XCTAssertNotNil(newItem, @\"item was nil after deserializing item.\");\n    XCTAssertNil(error, @\"error was not nil after deserializing item.\");\n    XCTAssertTrue([newItem[@\"name\"] isEqualToString:@\"bob\"],\n                 @\"The name key should have been updated to 'bob'.\");\n}\n\n-(void)testItemFromDataReturnsNewItemWithDates\n{\n    NSString* stringData = @\"{\\\"id\\\":5,\\\"date\\\":\\\"1999-12-03T15:44:29.000Z\\\"}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = nil;\n    id newItem = [serializer itemFromData:data\n                         withOriginalItem:nil\n                         ensureDictionary:YES\n                                  orError:&error];\n    \n    XCTAssertNotNil(newItem, @\"item was nil after deserializing item.\");\n    XCTAssertNil(error, @\"error was not nil after deserializing item.\");\n    \n    NSDate *date = newItem[@\"date\"];\n    XCTAssertNotNil(date, @\"date was nil after deserializing item.\");\n    \n    NSCalendar *gregorian = [[NSCalendar alloc]\n                             initWithCalendarIdentifier:NSCalendarIdentifierGregorian];\n    [gregorian setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];\n    NSDateComponents *dateParts =\n        [gregorian components:(NSCalendarUnitYear |\n                               NSCalendarUnitHour |\n                               NSCalendarUnitSecond)\n                     fromDate:date];\n\n    XCTAssertEqual(dateParts.year, 1999);\n    XCTAssertEqual(dateParts.hour, 15);\n    XCTAssertEqual(dateParts.second, 29);\n}\n\n-(void)testItemFromDataReturnsNewItemWithNoFractionalSecondsDates\n{\n    NSString* stringData = @\"{\\\"id\\\":5,\\\"date\\\":\\\"1999-12-03T15:44:29Z\\\"}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = nil;\n    id newItem = [serializer itemFromData:data\n                         withOriginalItem:nil\n                         ensureDictionary:YES\n                                  orError:&error];\n    \n    XCTAssertNotNil(newItem, @\"item was nil after deserializing item.\");\n    XCTAssertNil(error, @\"error was not nil after deserializing item.\");\n    \n    NSDate *date = newItem[@\"date\"];\n    XCTAssertNotNil(date, @\"date was nil after deserializing item.\");\n    \n    NSCalendar *gregorian = [[NSCalendar alloc]\n                             initWithCalendarIdentifier:NSCalendarIdentifierGregorian];\n    [gregorian setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];\n    NSDateComponents *dateParts =\n    [gregorian components:(NSCalendarUnitYear |\n                           NSCalendarUnitHour |\n                           NSCalendarUnitSecond)\n                 fromDate:date];\n    \n    XCTAssertEqual(dateParts.year, 1999);\n    XCTAssertEqual(dateParts.hour, 15);\n    XCTAssertEqual(dateParts.second, 29);\n}\n\n-(void)testItemFromDataReturnsErrorIfReadFails\n{\n    NSString* stringData = @\"This isn't proper JSON\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = nil;\n    id newItem = [serializer itemFromData:data\n                         withOriginalItem:nil\n                         ensureDictionary:YES\n                                  orError:&error];\n    \n    XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n    XCTAssertNil(newItem, @\"error was not nil after deserializing item.\");\n    XCTAssertTrue([[error domain] isEqualToString:@\"NSCocoaErrorDomain\"],\n                 @\"error domain was: %@\", [error domain]);\n    XCTAssertEqual(error.code, 3840);\n}\n\n-(void)testItemFromDataReturnsErrorIfItemIsNotDictionary\n{\n    NSString* stringData = @\"[ 5, \\\"This is not an object!\\\"  ]\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = nil;\n    id newItem = [serializer itemFromData:data\n                         withOriginalItem:nil\n                         ensureDictionary:YES\n                                  orError:&error];\n    \n    XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n    XCTAssertNil(newItem, @\"newItem was not nil after deserializing item.\");\n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertEqual(error.code, MSExpectedItemWithResponse);\n}\n\n-(void)testItemFromDataReturnsNonDictionary\n{\n    NSString* stringData = @\"[ 5, \\\"This is not an object!\\\"  ]\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = nil;\n    id newItem = [serializer itemFromData:data\n                         withOriginalItem:nil\n                         ensureDictionary:NO\n                                  orError:&error];\n    \n    XCTAssertNil(error, @\"error was not nil after deserializing item.\");\n    XCTAssertNotNil(newItem, @\"newItem was nil after deserializing item.\");\n    XCTAssertTrue([newItem[0] isEqual:@5],\n                 @\"The first element should have been a 5.\");\n    XCTAssertTrue([newItem[1] isEqualToString:@\"This is not an object!\"],\n                 @\"The second element should have been 'This is not an object!'.\");\n}\n\n\n#pragma mark * totalCountAndItems: Tests\n\n\n-(void)testTotalCountAndItemsReturnsItems\n{\n    NSString* stringData = @\"[{\\\"id\\\":5,\\\"name\\\":\\\"bob\\\"},{\\\"id\\\":6,\\\"name\\\":\\\"mary\\\"}]\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = nil;\n    NSArray *items = nil;\n    NSInteger totalCount = [serializer totalCountAndItems:&items\n                                                 fromData:data\n                                                  orError:&error];\n    \n    XCTAssertNotNil(items, @\"items was nil after deserializing item.\");\n    XCTAssertNil(error, @\"error was not nil after deserializing item.\");\n    XCTAssertTrue(totalCount == -1,\n                 @\"The totalCount should have been -1 since it was not given.\");\n    XCTAssertTrue(items.count == 2,\n                 @\"The items array should have had 2 items in it.\");\n    \n    XCTAssertTrue([items[0][@\"name\"]\n                  isEqualToString:@\"bob\"],\n                 @\"The name key should have been updated to 'bob'.\");\n}\n\n-(void)testTotalCountAndItemsReturnsItemsWithDates\n{\n    NSString* stringData = @\"[{\\\"id\\\":5,\\\"name\\\":\\\"bob\\\",\\\"dates\\\":[\\\"1999-12-03T15:44:29.0Z\\\"]},{\\\"id\\\":6,\\\"name\\\":\\\"mary\\\",\\\"date\\\":\\\"2012-11-03T8:44:00.0Z\\\"}]\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = nil;\n    NSArray *items = nil;\n    NSInteger totalCount = [serializer totalCountAndItems:&items\n                                                 fromData:data\n                                                  orError:&error];\n    \n    XCTAssertNotNil(items, @\"items was nil after deserializing item.\");\n    XCTAssertNil(error, @\"error was not nil after deserializing item.\");\n    XCTAssertTrue(totalCount == -1,\n                 @\"The totalCount should have been -1 since it was not given.\");\n    XCTAssertTrue(items.count == 2,\n                 @\"The items array should have had 2 items in it.\");\n    \n    XCTAssertTrue([items[0][@\"name\"]\n                  isEqualToString:@\"bob\"],\n                 @\"The name key should have been updated to 'bob'.\");\n    \n    \n    NSArray *dates = items[0][@\"dates\"];\n    XCTAssertNotNil(dates, @\"dates was nil after deserializing item.\");\n    \n    NSDate *date = dates[0];\n    XCTAssertNotNil(date, @\"date was nil after deserializing item.\");\n    \n    NSCalendar *gregorian = [[NSCalendar alloc]\n                             initWithCalendarIdentifier:NSCalendarIdentifierGregorian];\n    [gregorian setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];\n    NSDateComponents *dateParts =\n    [gregorian components:(NSCalendarUnitYear |\n                           NSCalendarUnitHour |\n                           NSCalendarUnitSecond)\n                 fromDate:date];\n    \n    \n    XCTAssertEqual(dateParts.year, 1999);\n    XCTAssertEqual(dateParts.hour, 15);\n    XCTAssertEqual(dateParts.second, 29);\n    \n    NSDate *date2 = items[1][@\"date\"];\n    XCTAssertNotNil(date2, @\"date was nil after deserializing item.\");\n\n    NSDateComponents *dateParts2 =\n    [gregorian components:(NSCalendarUnitYear |\n                           NSCalendarUnitHour |\n                           NSCalendarUnitSecond)\n                 fromDate:date2];\n\n    XCTAssertEqual(dateParts2.year, 2012);\n    XCTAssertEqual(dateParts2.hour, 8);\n    XCTAssertEqual(dateParts2.second, 0);\n}\n\n-(void)testTotalCountAndItemsReturnsTotalCount\n{\n    NSString* stringData = @\"{\\\"results\\\":[{\\\"id\\\":5,\\\"name\\\":\\\"bob\\\"},{\\\"id\\\":6,\\\"name\\\":\\\"mary\\\"}],\\\"count\\\":50}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = nil;\n    NSArray *items = nil;\n    NSInteger totalCount = [serializer totalCountAndItems:&items\n                                                 fromData:data\n                                                  orError:&error];\n    \n    XCTAssertNotNil(items, @\"items was nil after deserializing item.\");\n    XCTAssertNil(error, @\"error was not nil after deserializing item.\");\n    XCTAssertTrue(totalCount == 50,\n                 @\"The totalCount should have been 50 since it was given.\");\n    XCTAssertTrue(items.count == 2,\n                 @\"The items array should have had 2 items in it.\");\n    \n    XCTAssertTrue([items[0][@\"name\"]\n                  isEqualToString:@\"bob\"],\n                 @\"The name key should have been updated to 'bob'.\");\n}\n\n-(void)testTotalCountAndItemsReturnsErrorIfReadFails\n{\n    NSLog(@\"%@ start\", self.name);\n    \n    NSString* stringData = @\"invalid JSON!\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = nil;\n    NSArray *items = nil;\n    NSInteger totalCount = [serializer totalCountAndItems:&items\n                                                 fromData:data\n                                                  orError:&error];\n    \n    XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n    XCTAssertNil(items, @\"error was not nil after deserializing item.\");\n    XCTAssertTrue(totalCount == -1,\n                 @\"The totalCount should have been -1 since there was an error.\");\n    \n    XCTAssertEqualObjects(error.domain, @\"NSCocoaErrorDomain\");\n    XCTAssertEqual(error.code, 3840);\n}\n\n-(void)testTotalCountAndItemsReturnsErrorIfMissingCount\n{\n    NSString* stringData = @\"{\\\"results\\\":[{\\\"id\\\":5,\\\"name\\\":\\\"bob\\\"},{\\\"id\\\":6,\\\"name\\\":\\\"mary\\\"}]}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = nil;\n    NSArray *items = nil;\n    NSInteger totalCount = [serializer totalCountAndItems:&items\n                                                 fromData:data\n                                                  orError:&error];\n    \n    XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n    XCTAssertNil(items, @\"error was not nil after deserializing item.\");\n    XCTAssertEqual(totalCount, -1, @\"The totalCount should have been -1 since there was an error.\");\n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertEqual(error.code, MSExpectedTotalCountWithResponse);\n}\n\n-(void)testTotalCountAndItemsReturnsErrorIfMissingResults\n{\n    NSString* stringData = @\"{\\\"results\\\":5,\\\"count\\\":50}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = nil;\n    NSArray *items = nil;\n    NSInteger totalCount = [serializer totalCountAndItems:&items\n                                                 fromData:data\n                                                  orError:&error];\n    \n    XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n    XCTAssertNil(items, @\"error was not nil after deserializing item.\");\n    \n    XCTAssertEqual(totalCount, -1, @\"The totalCount should have been -1 since there was an error.\");\n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertEqual(error.code, MSExpectedItemsWithResponse);\n}\n\n\n#pragma mark * errorFromData: Tests\n\n\n-(void)testErrorFromDataReturnsError\n{\n    NSString* stringData = @\"\\\"This is an Error Message!\\\"\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = [serializer errorFromData:data MIMEType:@\"text/json\"];\n    \n    XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n    \n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertEqual(error.code, MSErrorMessageErrorCode);\n    XCTAssertEqualObjects(error.localizedDescription, @\"This is an Error Message!\");\n}\n\n-(void)testErrorFromDataReturnsErrorFromObjectWithErrorKey\n{\n    NSString* stringData = @\"{\\\"error\\\":\\\"This is another Error Message!\\\"}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = [serializer errorFromData:data MIMEType:@\"text/JSON\"];\n    \n    XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertEqual(error.code, MSErrorMessageErrorCode);\n    XCTAssertEqualObjects(error.localizedDescription, @\"This is another Error Message!\");\n}\n\n-(void)testErrorFromDataReturnsErrorFromObjectWithDescriptionKey\n{    \n    NSString* stringData = @\"{\\\"description\\\":\\\"This is another Error Message!\\\"}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = [serializer errorFromData:data MIMEType:@\"application/json\"];\n    \n    XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertEqual(error.code, MSErrorMessageErrorCode);\n    XCTAssertTrue([[error localizedDescription] isEqualToString:\n                  @\"This is another Error Message!\"],\n                 @\"error description was: %@\", [error localizedDescription]);\n}\n\n-(void)testErrorFromDataReturnsErrorIfReadFails\n{\n    NSString* stringData = @\"invalid JSON!\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = [serializer errorFromData:data MIMEType:@\"application/JSON\"];\n    \n    XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n    XCTAssertEqualObjects(error.domain, @\"NSCocoaErrorDomain\");\n    XCTAssertEqual(error.code, 3840);\n}\n\n-(void)testErrorFromDataReturnsJsonEvenIfNotExpectedJsonForm\n{\n    NSString* stringData = @\"{}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = [serializer errorFromData:data MIMEType:@\"text/json\"];\n    \n    XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertEqual(error.code, MSErrorMessageErrorCode);\n    XCTAssertEqualObjects(error.localizedDescription, @\"{}\");\n}\n\n-(void)testErrorFromDataReturnsNonJson\n{\n    NSString* stringData = @\"<Hey>This sure is some poor xml</Hey>\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSError *error = [serializer errorFromData:data MIMEType:@\"application/xml\"];\n    \n    XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n    XCTAssertEqualObjects(error.domain, MSErrorDomain);\n    XCTAssertEqual(error.code, MSErrorMessageErrorCode);\n    XCTAssertEqualObjects(error.localizedDescription, @\"<Hey>This sure is some poor xml</Hey>\");\n}\n\n-(void)testSystemPropertiesNotRemovedWithIntId\n{\n    NSError *error;\n    \n    NSDictionary *item = @{@\"id\": @7, @\"__Prop1\": @6};\n    NSData *data = [serializer dataFromItem:item idAllowed:YES ensureDictionary:NO removeSystemProperties:YES orError:&error];\n    \n    XCTAssertNil(error, @\"An error occurred: %@\", error.localizedDescription);\n    \n    NSString *expected = @\"{\\\"id\\\":7,\\\"__Prop1\\\":6}\";\n    NSString *actual = [[NSString alloc] initWithData:data\n                                             encoding:NSUTF8StringEncoding];\n    \n    XCTAssertEqualObjects(actual, expected);\n}\n\n-(void)testSystemPropertiesNotRemovedWithArray\n{\n    NSError *error;\n    \n    NSArray *item = @[@{@\"id\": @7, @\"__Prop1\": @6}];\n    NSData *data = [serializer dataFromItem:item idAllowed:YES ensureDictionary:NO removeSystemProperties:YES orError:&error];\n    \n    XCTAssertNil(error, @\"An error occurred: %@\", error.localizedDescription);\n    \n    NSString *expected = @\"[{\\\"id\\\":7,\\\"__Prop1\\\":6}]\";\n    NSString *actual = [[NSString alloc] initWithData:data\n                                             encoding:NSUTF8StringEncoding];\n    \n    XCTAssertEqualObjects(actual, expected);\n}\n\n-(void)testSystemPropertiesRemovedWithStringId\n{\n    NSError *error;\n    NSDictionary *item = @{@\"id\": @\"one\", @\"__Prop1\": @6, @\"__prop4\": @\"help\"};\n    NSData *data = [serializer dataFromItem:item idAllowed:YES ensureDictionary:NO removeSystemProperties:YES orError:&error];\n    \n    XCTAssertNil(error, @\"An error occurred: %@\", error.localizedDescription);\n    \n    NSString *expected = @\"{\\\"id\\\":\\\"one\\\"}\";\n    NSString *actual = [[NSString alloc] initWithData:data\n                                         encoding:NSUTF8StringEncoding];\n    \n    XCTAssertTrue([expected isEqualToString:actual], @\"JSON was: %@\", actual);\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSLocalStorageTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSLocalStorage.h\"\n\n@interface MSLocalStorageTests : XCTestCase\n\n@end\n\n@implementation MSLocalStorageTests\n\n-(void)setUp\n{\n    [super setUp];\n    \n    // Clear storage\n    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n    [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:@\"xctest\"];\n    [defaults synchronize];\n    \n    [NSUserDefaults resetStandardUserDefaults];\n}\n\n-(void)testInitialLoadUpdateGetAndReload\n{\n    // initialize MSLocalStorage\n    MSLocalStorage *storage = [[MSLocalStorage alloc] initWithMobileServiceHost:@\"foo.mobileservices.net\"];\n    XCTAssertNil(storage.deviceToken, @\"Device Token should be nil when MSLocalStorage is initialized with empty defaults.\");\n    XCTAssertEqual(storage.isRefreshNeeded, YES, @\"isRefreshNeeded should be YES when MSLocalStorage is initialized with empty defaults.\");\n\n    // Add an item\n    [storage updateRegistrationWithName:@\"regName\" registrationId:@\"regId\" deviceToken:@\"token\"];\n    XCTAssertEqual(storage.deviceToken, @\"token\", @\"Token is expected to be set correctly after updateWithRegistrationName is called.\");\n    \n    // Get that item and ensure it is accurate\n    NSString *reg = [storage getRegistrationIdWithName:@\"regName\"];\n    XCTAssertEqual(reg, @\"regId\", @\"Expected registrationId to be regId\");\n    \n    // Update by registration name to add second registration\n    [storage updateRegistrationWithName:@\"regName2\" registrationId:@\"regId2\" deviceToken:@\"token4\"];\n    XCTAssertEqual(storage.deviceToken, @\"token4\", @\"Token is expected to be set correctly after updateWithRegistrationName is called.\");\n    \n    // Get second item and ensure it is accurate\n    NSString *reg2New = [storage getRegistrationIdWithName:@\"regName2\"];\n    XCTAssertEqual(reg2New, @\"regId2\", @\"Expected registrationId to be regId2\");\n\n    // Update original registration name\n    [storage updateRegistrationWithName:@\"regName\" registrationId:@\"regId4\" deviceToken:@\"token4\"];\n    XCTAssertEqual(storage.deviceToken, @\"token4\", @\"Token is expected to be set correctly after updateWithRegistrationName is called.\");\n    \n    // Get the original item and ensure it is accurate\n    reg2New = [storage getRegistrationIdWithName:@\"regName\"];\n    XCTAssertEqual(reg2New, @\"regId4\", @\"Expected registrationId to be regId4\");\n\n    // Get that item and ensure it is accurate\n    reg2New = [storage getRegistrationIdWithName:@\"regName2\"];\n    XCTAssertEqual(reg2New, @\"regId2\", @\"Expected registrationId to be regId2\");\n    \n    // initialize MSLocalStorage to test loading and saving to local storage\n    MSLocalStorage *storage2 = [[MSLocalStorage alloc] initWithMobileServiceHost:@\"foo.mobileservices.net\"];\n    XCTAssertEqualObjects(storage2.deviceToken, @\"token4\", @\"Token is expected to be set correctly loaded from storage.\");\n    XCTAssertEqual(storage2.isRefreshNeeded, NO, @\"isRefreshNeeded should be NO when MSLocalStorage is initialized with empty defaults.\");\n\n    // Get the original item and ensure it is accurate\n    reg2New = [storage2 getRegistrationIdWithName:@\"regName2\"];\n    XCTAssertEqualObjects(reg2New, @\"regId2\", @\"Expected registrationId to be regId2\");\n    \n    // Get that item and ensure it is accurate\n    reg2New = [storage2 getRegistrationIdWithName:@\"regName\"];\n    XCTAssertEqualObjects(reg2New, @\"regId4\", @\"Expected registrationId to be regId4\");\n    \n    // Handle nil and NSNull name\n    [storage2 updateRegistrationWithName:nil registrationId:@\"regId3\" deviceToken:@\"token5\"];\n    \n    // Get that item using the default name\n    reg2New = [storage2 getRegistrationIdWithName:MSNativeRegistrationName];\n    XCTAssertEqualObjects(reg2New, @\"regId3\", @\"Expected registrationId to be regId3\");\n    \n    // Handle NSNull name\n    NSArray* registrations = [NSArray arrayWithObject:@{@\"templateName\" : [NSNull null], @\"registrationId\": @\"regId5\"}];\n    [storage2 updateRegistrations:registrations deviceToken:@\"token6\"];\n    \n    // Get that item using the default name\n    reg2New = [storage2 getRegistrationIdWithName:MSNativeRegistrationName];\n    XCTAssertEqualObjects(reg2New, @\"regId5\", @\"Expected registrationId to be regId5\");\n}\n\n-(void)testBasicState\n{\n    // initialize MSLocalStorage\n    MSLocalStorage *storage = [[MSLocalStorage alloc] initWithMobileServiceHost:@\"foo.mobileservices.net\"];\n    XCTAssertNil(storage.deviceToken, @\"Device Token should be nil when MSLocalStorage is initialized with empty defaults.\");\n    XCTAssertEqual(storage.isRefreshNeeded, YES, @\"isRefreshNeeded should be YES when MSLocalStorage is initialized with empty defaults.\");\n    \n    // Add an item\n    [storage updateRegistrationWithName:@\"regName\" registrationId:@\"regId\" deviceToken:@\"token\"];\n    XCTAssertEqual(storage.deviceToken, @\"token\", @\"Token is expected to be set correctly after updateWithRegistrationName is called.\");\n    \n    // Add an item\n    [storage updateRegistrationWithName:@\"regName2\" registrationId:@\"regId2\" deviceToken:@\"token\"];\n    XCTAssertEqual(storage.deviceToken, @\"token\", @\"Token is expected to be set correctly after updateWithRegistrationName is called.\");\n    \n    // Test delete\n    [storage deleteRegistrationWithName:@\"regName\"];\n    \n    // Get the original item and ensure it is accurate\n    NSString *reg = [storage getRegistrationIdWithName:@\"regName2\"];\n    XCTAssertEqual(reg, @\"regId2\", @\"Expected registrationId to be regId2\");\n    \n    // Get that item and ensure it is accurate\n    reg = [storage getRegistrationIdWithName:@\"regName\"];\n    XCTAssertNil(reg, @\"reg should be Nil after being deleted.\");\n}\n\n- (void)testDeleteAllRegistrations\n{\n    // initialize MSLocalStorage\n    MSLocalStorage *storage = [[MSLocalStorage alloc] initWithMobileServiceHost:@\"foo.mobileservices.net\"];\n    XCTAssertNil(storage.deviceToken, @\"Device Token should be nil when MSLocalStorage is initialized with empty defaults.\");\n    XCTAssertEqual(storage.isRefreshNeeded, YES, @\"isRefreshNeeded should be YES when MSLocalStorage is initialized with empty defaults.\");\n    \n    // Updare registrations\n    [storage updateRegistrations:@[@{@\"templateName\":@\"regName\", @\"registrationId\":@\"regId\"},@{@\"registrationId\":@\"regId2\"}] deviceToken:@\"token2\"];\n    XCTAssertEqual(storage.deviceToken, @\"token2\", @\"Token is expected to be set correctly after updateWithRegistrationName is called.\");\n    XCTAssertEqual(storage.isRefreshNeeded, NO, @\"isRefreshNeeded should be NO after updateRegistrations.\");\n    \n    // Get that item and ensure it is accurate\n    NSString *reg = [storage getRegistrationIdWithName:@\"regName\"];\n    XCTAssertEqual(reg, @\"regId\", @\"Expected registrationId to be regId\");\n    \n    // Get that item and ensure it is accurate\n    reg = [storage getRegistrationIdWithName:@\"$Default\"];\n    XCTAssertEqual(reg, @\"regId2\", @\"Expected registrationId to be regId2\");\n    \n    [storage deleteAllRegistrations];\n    \n    // Get the original item and ensure it is accurate\n    reg = [storage getRegistrationIdWithName:@\"regName\"];\n    XCTAssertNil(reg, @\"reg should be Nil after being deleted.\");\n    \n    // Get that item and ensure it is accurate\n    reg = [storage getRegistrationIdWithName:@\"$Default\"];\n    XCTAssertNil(reg, @\"$Default should be Nil after being deleted.\");\n}\n\n- (void)testGetRegistrationIds\n{\n    // initialize MSLocalStorage\n    MSLocalStorage *storage = [[MSLocalStorage alloc] initWithMobileServiceHost:@\"foo.mobileservices.net\"];\n    XCTAssertNil(storage.deviceToken, @\"Device Token should be nil when MSLocalStorage is initialized with empty defaults.\");\n    XCTAssertEqual(storage.isRefreshNeeded, YES, @\"isRefreshNeeded should be YES when MSLocalStorage is initialized with empty defaults.\");\n    \n    // Updare registrations\n    [storage updateRegistrations:@[@{@\"templateName\":@\"regName\", @\"registrationId\":@\"regId\"},@{@\"registrationId\":@\"regId2\"}] deviceToken:@\"token2\"];\n    XCTAssertEqual(storage.deviceToken, @\"token2\", @\"Token is expected to be set correctly after updateWithRegistrationName is called.\");\n    XCTAssertEqual(storage.isRefreshNeeded, NO, @\"isRefreshNeeded should be NO after updateRegistrations.\");\n    \n    NSArray *registrationIds = [[storage getRegistrationIds] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];\n    XCTAssertEqual(registrationIds[0], @\"regId\", @\"RegistrationIds should match those in storage.\");\n    XCTAssertEqual(registrationIds[1], @\"regId2\", @\"RegistrationIds should match those in storage.\");\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSMultiRequestTestFilter.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSTestFilter.h\"\n\n@interface MSMultiRequestTestFilter : NSObject <MSFilter>\n\n@property (nonatomic) NSArray *testFilters;\n@property (nonatomic) NSArray *actualRequests;\n@property (nonatomic) NSUInteger currentIndex;\n\n+(NSString *) testDataWithItemCount:(int)itemCount startId:(int)start;\n+(MSMultiRequestTestFilter *) testFilterWithStatusCodes:(NSArray *)statusCodes data:(NSArray *)data appendEmptyRequest:(BOOL)appendEmptyRequest;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSMultiRequestTestFilter.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSMultiRequestTestFilter.h\"\n\n@implementation MSMultiRequestTestFilter\n\n-(MSMultiRequestTestFilter *) init {\n    self = [super init];\n    if (self)\n    {\n        _testFilters = @[];\n        _currentIndex = 0;\n        _actualRequests = @[];\n    }\n    \n    return self;\n}\n\n+(NSString *) testDataWithItemCount:(int)itemCount startId:(int)start\n{\n    NSMutableString *string = [NSMutableString stringWithString:@\"[\"];\n    for (int i = start; i < start + itemCount; i++)\n    {\n        [string appendFormat:@\"{\\\"id\\\": \\\"%d\\\"},\", i];\n    }\n    [string appendString:@\"]\"];\n    return string;\n}\n\n+(MSMultiRequestTestFilter *) testFilterWithStatusCodes:(NSArray *)statusCodes data:(NSArray *)data appendEmptyRequest:(BOOL)appendEmptyRequest {\n    MSMultiRequestTestFilter *multiFilter = [MSMultiRequestTestFilter new];\n    NSMutableArray *filters = [NSMutableArray new];\n    NSMutableArray *requests = [NSMutableArray new];\n    \n    if (appendEmptyRequest) {\n        NSMutableArray *mutableStatusCodes = [statusCodes mutableCopy];\n        [mutableStatusCodes addObject:@200];\n        statusCodes = mutableStatusCodes;\n        NSMutableArray *mutableData = [data mutableCopy];\n        [mutableData addObject:@\"[]\"];\n        data = mutableData;\n    }\n    \n    for (int i=0;i < statusCodes.count; i++) {\n        NSNumber *number = (NSNumber *)statusCodes[i];\n        MSTestFilter *filter = [MSTestFilter testFilterWithStatusCode:[number integerValue]];\n        filter.ignoreNextFilter = YES;\n        \n        id result = data[i];\n        if ([result isKindOfClass:[NSError class]]) {\n            filter.errorToUse = result;\n        } else if ([result isKindOfClass:[NSString class]]) {\n            filter.dataToUse = [result dataUsingEncoding:NSUTF8StringEncoding];\n        } else {\n            filter.dataToUse = result;\n        }\n        \n        filter.onInspectRequest = ^(NSURLRequest *request) {\n            NSLog(@\"%@\", request.URL.absoluteString);\n            [requests addObject:request];\n            return request;\n        };\n        \n        [filters addObject:filter];\n    }\n    multiFilter.testFilters = filters;\n    multiFilter.actualRequests = requests;\n    \n    return multiFilter;\n}\n\n-(void) handleRequest:(NSURLRequest *)request\n                 next:(MSFilterNextBlock)next\n             response:(MSFilterResponseBlock)response\n{\n    MSTestFilter *currentFilter = self.testFilters[self.currentIndex];\n    self.currentIndex++;\n    [currentFilter handleRequest:request next:next response:response];\n}\n\n@end"
  },
  {
    "path": "sdk/iOS/test/MSOfflinePassthroughHelper.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n\n#import <Foundation/Foundation.h>\n#import \"MSSyncContext.h\"\n#import \"MSCoreDataStore.h\"\n\n@interface MSOfflinePassthroughHelper : MSCoreDataStore <MSSyncContextDelegate>\n\n@property (nonatomic) BOOL returnErrors;\n\n@property (nonatomic) NSInteger upsertCalls;\n@property (nonatomic) NSInteger upsertedItems;\n@property (nonatomic) NSInteger deleteCalls;\n@property (nonatomic) NSInteger deletedItems;\n@property (nonatomic) NSInteger readTableCalls;\n@property (nonatomic) NSInteger readTableItems;\n@property (nonatomic) NSInteger readWithQueryCalls;\n@property (nonatomic) NSInteger readWithQueryItems;\n\n@property (nonatomic, copy) void (^operationCompletedHandler)(NSDictionary *item, NSError *error);\n\n@property (nonatomic) BOOL errorOnReadWithQueryOrError;\n@property (nonatomic) BOOL errorOnReadTableWithItemIdOrError;\n\n@property (nonatomic) BOOL errorOnUpsertItemsForOperations;\n\n@property (nonatomic, strong) NSMutableDictionary *data;\n\n-(void) resetCounts;\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSOfflinePassthroughHelper.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSOfflinePassthroughHelper.h\"\n#import \"MSQuery.h\"\n#import \"MSSyncContext.h\"\n#import \"MSCoreDataStore.h\"\n\n@implementation MSOfflinePassthroughHelper\n\n@synthesize data = data_;\n- (NSMutableDictionary *)data {\n    if (data_ == nil) {\n        data_ = [NSMutableDictionary new];\n    }\n    \n    return data_;\n}\n\n- (BOOL) upsertItems:(NSArray *)items table:(NSString *)table orError:(NSError **)error\n{\n    self.upsertCalls++;\n    \n    if (self.errorOnUpsertItemsForOperations && table == self.operationTableName) {\n        *error = [NSError errorWithDomain:@\"TestError\" code:1 userInfo:nil];\n        return NO;\n    }\n    \n    if ([super upsertItems:items table:table orError:error]) {\n        self.upsertedItems += items.count;\n        return YES;\n    }\n    return NO;\n}\n\n- (BOOL) deleteUsingQuery:(MSQuery *)query orError:(NSError *__autoreleasing *)error\n{\n    self.deleteCalls++;\n    \n    MSSyncContextReadResult *preDeleteResult = [self readWithQuery:query orError:error];\n    if (![super deleteUsingQuery:query orError:error]) {\n        return NO;\n    }\n    \n    MSSyncContextReadResult *postDeleteResult = [self readWithQuery:query orError:error];\n    self.deletedItems += preDeleteResult.items.count - postDeleteResult.items.count;\n    \n    return YES;\n}\n\n- (BOOL) deleteItemsWithIds:(NSArray *)items table:(NSString *)table orError:(NSError **)error\n{\n    self.deleteCalls++;\n\n    if ([super deleteItemsWithIds:items table:table orError:error]) {\n        self.deletedItems += items.count;\n        return YES;\n    }\n    \n    return NO;\n}\n\n- (MSSyncContextReadResult *) readWithQuery:(MSQuery *)query orError:(NSError **)error\n{\n    self.readWithQueryCalls++;\n    \n    MSSyncContextReadResult *results = [super readWithQuery:query orError:error];\n    if (self.errorOnReadWithQueryOrError) {\n        *error = [NSError errorWithDomain:@\"TestError\" code:1 userInfo:nil];\n        return nil;\n    }\n    \n    self.readWithQueryItems += results.items.count;\n    return results;\n}\n\n\n-(NSDictionary *) readTable:(NSString *)table withItemId:(NSString *)itemId orError:(NSError **)error\n{\n    self.readTableCalls++;\n    \n    NSDictionary *results = [super readTable:table withItemId:itemId orError:error];\n    \n    if (self.errorOnReadTableWithItemIdOrError) {\n        *error = [NSError errorWithDomain:@\"TestError\" code:1 userInfo:nil];\n        return nil;\n    }\n    \n    self.readTableItems += results.count;\n    return results;\n}\n\n-(void) resetCounts\n{\n    self.upsertedItems = 0;\n    self.upsertCalls = 0;\n    self.deleteCalls = 0;\n    self.deletedItems = 0;\n    self.readTableCalls = 0;\n    self.readTableItems = 0;\n    self.readWithQueryCalls = 0;\n    self.readWithQueryItems = 0;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSPredicateTranslatorTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSPredicateTranslator.h\"\n\n@interface MSPredicateTranslatorTests : XCTestCase\n\n@end\n\n@implementation MSPredicateTranslatorTests\n\n-(void) testSimplePredicateStrings\n{\n    // Create some dates with no seconds, seconds and fractional seconds\n    NSDateComponents *dateParts = [[NSDateComponents alloc] init];\n    dateParts.year = 2012;\n    dateParts.month = 5;\n    dateParts.day = 21;\n    dateParts.calendar = [[NSCalendar alloc]\n                           initWithCalendarIdentifier:NSCalendarIdentifierGregorian];\n    dateParts.calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];\n    \n    NSDate *date1 = dateParts.date;\n    dateParts.second = 29;\n    NSDate *date2 = dateParts.date;\n    NSDate *date3 = [date2 dateByAddingTimeInterval:0.3];\n    \n    NSUUID *guid = [[NSUUID alloc] initWithUUIDString: @\"01234567-89ab-cdef-0123-456789abcdef\"];\n\n    // For each test case: the first element is the expected OData value;\n    // the second element is the predicate format string; and all\n    // additional elements are the arguments to the format string\n    NSArray *testCases = @[\n        // BOOL test\n        @[ @\"(Complete eq true)\",\n            @\"Complete == YES\"],\n        \n        // Test cases for TRUEPREDICATE, FALSEPREDICATE\n        @[ @\"(1 eq 1)\",\n           @\"TRUEPREDICATE\"],\n    \n        @[ @\"((1 eq 1) and startswith(name,'b'))\",\n           @\"TRUEPREDICATE && name BEGINSWITH 'b'\"],\n    \n        @[ @\"(1 eq 0)\",\n           @\"FALSEPREDICATE\"],\n    \n        @[ @\"((1 eq 0) or (Price le 5.99d))\",\n           @\"FALSEPREDICATE OR Price <= 5.99\"],\n        \n        // Test cases for comparison opperators and number formating.\n        // We do not test numberWithInteger or numberWithLong as their translation is different\n        // on 32 vs 64-bit systems resulting in slightly different oData queries\n        @[ @\"(Price gt 50f)\",\n           @\"Price > %@\", @50.0f],\n        \n        @[ @\"(Price ge 22.25d)\",\n           @\"Price >= %@\", @22.25],\n        \n        @[ @\"(Count lt -25)\",\n           @\"Count < %@\", @-25],\n\n        @[ @\"(Count le 500)\",\n            @\"Count =< %@\", @500],\n        \n        @[ @\"(Price eq 1.99m)\",\n           @\"Price == %@\", [NSDecimalNumber decimalNumberWithString:@\"1.99\"]],\n        \n        @[ @\"(Count ne 200l)\",\n           @\"Count != %@\", @200LL],\n    \n        // Test cases for boolean operators\n        @[ @\"((Count gt 0) and (Price le 5.99d))\",\n           @\"Count > 0 && Price <= 5.99\"],\n        \n        @[ @\"((Count eq 0) or (Price le 5.99d))\",\n           @\"Count = 0 OR Price <= 5.99\"],\n        \n        @[ @\"((Count eq 0) and not((Price gt 599.99d)))\",\n           @\"Count = 0 && !(Price > 599.99)\"],\n    \n        // Test cases for math operators and functions\n        @[ @\"((Count add 200) gt 350)\",\n           @\"Count + 200 > 350\"],\n        \n        @[ @\"((Price sub 1.99d) le Cost)\",\n           @\"Price - 1.99 <= Cost\"],\n        \n        @[ @\"((Weight mul -1.5f) lt 225f)\",\n           @\"Weight * %@ < %@\",\n            @-1.5f,\n            @225.0f],\n        \n        @[ @\"((Weight div 3f) gt 225d)\",\n           @\"Weight / %@ > %@\",\n            @3.0f,\n            @225.0],\n        \n        @[ @\"((Id mod 2) eq 1)\",\n           @\"modulus:by:(Id,2) == 1\"],\n        \n        @[ @\"(floor(Price) eq 3)\",\n           @\"floor:(Price) == 3\"],\n        \n        @[ @\"(ceiling(Price) eq 3)\",\n           @\"ceiling:(Price) == 3\"],\n        \n        // Test cases for strings\n        @[ @\"(name eq 'bob')\",\n           @\"name = 'bob'\"],\n    \n        @[ @\"(text eq 'This text has a '' in it!')\",\n            @\"text = %@\", @\"This text has a ' in it!\"],\n    \n        @[ @\"(tolower(name) eq tolower('bob'))\",\n           @\"name =[c] 'bob'\"],\n    \n        @[ @\"(tolower(name) eq 'bob')\",\n           @\"lowercase:(name) = 'bob'\"],\n        \n        @[ @\"(toupper(name) eq 'BOB')\",\n           @\"uppercase:(name) = 'BOB'\"],\n        \n        @[ @\"startswith(name,'b')\",\n           @\"name BEGINSWITH 'b'\"],\n        \n        @[ @\"endswith(name,'b')\",\n           @\"name ENDSWITH 'b'\"],\n        \n        @[ @\"substringof('b',name)\",\n           @\"name CONTAINS 'b'\"],\n    \n        // Test cases for date times\n        @[ @\"(Created eq datetime'2012-05-21T00:00:00.000Z')\",\n           @\"Created == %@\", date1],\n    \n        @[ @\"(Created eq datetime'2012-05-21T00:00:29.000Z')\",\n           @\"Created == %@\", date2],\n    \n        @[ @\"(Created eq datetime'2012-05-21T00:00:29.300Z')\",\n           @\"Created == %@\", date3],\n    \n        // Test cases for IN\n        @[ @\"((Zipcode eq 98008) or (Zipcode eq 98006) or (Zipcode eq 98007))\",\n             @\"Zipcode IN { 98008, 98006, 98007}\"],\n    \n        @[ @\"((Zipcode eq (98007 add 1)) or (Zipcode eq (98007 sub 1)) or (Zipcode eq 98007))\",\n           @\"Zipcode IN { %@ + 1, %@ - 1, %@ }\", @98007, @98007, @98007],\n        \n        @[ @\"(Id eq guid'01234567-89AB-CDEF-0123-456789ABCDEF')\",\n           @\"Id == %@\", guid ],\n    ];\n    \n    for (NSArray *testCase in testCases) {\n        \n        NSString *expected = testCase[0];\n        \n        NSLog(@\"%@ test case start\", expected);\n        \n        NSString *format = testCase[1];\n        \n        NSRange range;\n        range.location = 2;\n        range.length = testCase.count - 2;\n        NSArray *arguments = [testCase subarrayWithRange:range];\n        \n        NSPredicate *predicate = [NSPredicate predicateWithFormat:format\n                                                    argumentArray:arguments];\n        \n        NSError *error = nil;\n        NSString *actual = [MSPredicateTranslator queryFilterFromPredicate:predicate\n                                                                   orError:&error];\n        \n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue([actual isEqualToString:expected],\n                     @\"Query filter actual: '%@' and expected: '%@'\",\n                     actual,\n                     expected);\n        \n        NSLog(@\"%@ test case end\", expected);\n    }\n}\n\n-(void) testPredicatesWithSubstitutionVariables\n{\n    // Create some dates with no seconds, seconds and fractional seconds\n    NSDateComponents *dateParts = [[NSDateComponents alloc] init];\n    dateParts.year = 2012;\n    dateParts.month = 5;\n    dateParts.day = 21;\n    dateParts.calendar = [[NSCalendar alloc]\n                          initWithCalendarIdentifier:NSCalendarIdentifierGregorian];\n    dateParts.calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];\n    \n    NSDate *date1 = dateParts.date;\n    dateParts.second = 29;\n    NSDate *date2 = dateParts.date;\n    NSDate *date3 = [date2 dateByAddingTimeInterval:0.3];\n    \n    // For each test case: the first element is the expected OData value;\n    // the second element is the predicate format string; and all\n    // additional elements are the substitution variables\n    NSArray *testCases = @[\n        // Test cases for comparison opperators and number formating.\n        @[ @\"(Price gt 50f)\",\n           @\"Price > $price\", @{ @\"price\":@50.0f}],\n        \n        @[ @\"(Price ge 22.25d)\",\n           @\"Price >= $price\", @{ @\"price\":@22.25}],\n        \n        @[ @\"(Count lt -25)\",\n           @\"Count < $count\", @{ @\"count\":@-25}],\n\n        @[ @\"(Count le 500)\",\n           @\"Count =< $count\", @{ @\"count\":@500}],\n        \n        @[ @\"(Price eq 1.99m)\",\n           @\"Price == $price\", @{ @\"price\":[NSDecimalNumber decimalNumberWithString:@\"1.99\"]}],\n        \n        @[ @\"(Count ne 200l)\",\n           @\"Count != $count\", @{ @\"count\" :@200LL}],\n    \n        @[ @\"(Complete eq true)\",\n           @\"Complete == $complete\", @{ @\"complete\": @YES }],\n        \n        // Test cases for strings\n        @[ @\"(tolower(name) eq 'bob')\",\n           @\"lowercase:(name) = $name\", @{ @\"name\":@\"bob\"}],\n        \n        @[ @\"(toupper(name) eq 'BOB')\",\n           @\"uppercase:(name) = $name\", @{ @\"name\":@\"BOB\"}],\n        \n        @[ @\"startswith(name,'b')\",\n           @\"name BEGINSWITH $name\", @{ @\"name\":@\"b\"}],\n        \n        // Test cases for date times\n        @[ @\"(Created eq datetime'2012-05-21T00:00:00.000Z')\",\n           @\"Created == $date\", @{@\"date\":date1}],\n        \n        @[ @\"(Created eq datetime'2012-05-21T00:00:29.000Z')\",\n           @\"Created == $date\", @{@\"date\":date2}],\n        \n        @[ @\"(Created eq datetime'2012-05-21T00:00:29.300Z')\",\n           @\"Created == $date\", @{@\"date\":date3}],\n    \n        // Test cases for IN\n        @[ @\"((Zipcode eq 98008) or (Zipcode eq 98006) or (Zipcode eq 98007))\",\n        @\"Zipcode IN $zipcodes\", @{ @\"zipcodes\":@[ @98008, @98006, @98007 ] }],\n    \n        // Test cases for BETWEEN\n        @[ @\"((Zipcode ge 98006) and (Zipcode le 98008))\",\n        @\"Zipcode BETWEEN $zipcodes\", @{ @\"zipcodes\":@[ @98006, @98008] }],\n    ];\n    \n    for (NSArray *testCase in testCases) {\n        \n        NSString *expected = testCase[0];\n        \n        NSLog(@\"%@ test case start\", expected);\n        \n        NSString *format = testCase[1];\n        \n        NSDictionary *variables = testCase[2];\n        \n        NSPredicate *predicate = [NSPredicate predicateWithFormat:format];\n        NSPredicate *predicatewithVariables = [predicate predicateWithSubstitutionVariables:variables];\n        \n        NSError *error = nil;\n        NSString *actual = [MSPredicateTranslator queryFilterFromPredicate:predicatewithVariables\n                                                                   orError:&error];\n        \n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue([actual isEqualToString:expected],\n                     @\"Query filter actual: '%@' and expected: '%@'\",\n                     actual,\n                     expected);\n        \n        NSLog(@\"%@ test case end\", expected);\n    }\n}\n\n@end\n\n"
  },
  {
    "path": "sdk/iOS/test/MSPullSettingsTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSPullSettingsInternal.h\"\n\n@interface MSPullSettingsTests : XCTestCase\n@end\n\n@implementation MSPullSettingsTests\n\n#pragma mark * Setup and TearDown\n\n- (void)setUp\n{\n    NSLog(@\"%@ setUp\", self.name);\n}\n\n- (void)tearDown\n{\n    NSLog(@\"%@ tearDown\", self.name);\n}\n\n#pragma mark * PageSize tests\n\n- (void)testPullSettings_NegativePageSize\n{\n    MSPullSettings *pullSettings = [[MSPullSettings alloc] initWithPageSize:-1];\n\n    XCTAssertEqual(pullSettings.pageSize, MSPullSettings.defaultPageSize, @\"Incorrect page size\");\n}\n\n- (void)testPullSettings_ZeroPageSize\n{\n    MSPullSettings *pullSettings = [[MSPullSettings alloc] initWithPageSize:0];\n    \n    XCTAssertEqual(pullSettings.pageSize, MSPullSettings.defaultPageSize, @\"Incorrect page size\");\n}\n\n- (void)testPullSettings_ValidPageSize\n{\n    MSPullSettings *pullSettings = [[MSPullSettings alloc] initWithPageSize:1];\n    \n    XCTAssertEqual(pullSettings.pageSize, 1, @\"Incorrect page size\");\n}\n\n- (void)testPullSettings_DefaultPageSize\n{\n    MSPullSettings *pullSettings = [MSPullSettings new];\n    \n    XCTAssertEqual(pullSettings.pageSize, MSPullSettings.defaultPageSize, @\"Incorrect page size\");\n}\n\n- (void)testDefaultPageSizeGreaterThanZero\n{\n    XCTAssertGreaterThan(MSPullSettings.defaultPageSize, 0, @\"Page size must be > 0\");\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSPushHttpTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSClient.h\"\n#import \"MSPushHttp.h\"\n#import \"MSTestFilter.h\"\n\n@interface MSPushHttpTests : XCTestCase\n@property (nonatomic) BOOL done;\n@property (nonatomic) MSClient *client;\n@property (nonatomic) NSURL *url;\n@end\n\n@implementation MSPushHttpTests\n\n- (void)setUp\n{\n    [super setUp];\n    self.url = [[NSURL alloc] initWithString:@\"https://aurl.azure-mobilefake.net\"];\n    self.client = [[MSClient alloc] initWithApplicationURL:self.url applicationKey:@\"QdffoEwYCblcmkvbInMEkEoSemgJHm31\"];\n    self.done = NO;\n}\n\n- (void)tearDown\n{\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testCreateRegistrationId\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    NSString *expectedRegistrationId = @\"8313603759421994114-6468852488791307573-9\";\n    NSURL *locationUrl = [[self.url URLByAppendingPathComponent:@\"push/registrations/\"] URLByAppendingPathComponent:expectedRegistrationId];\n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:201\n                                   HTTPVersion:nil\n                                   headerFields:@{@\"Location\":[locationUrl absoluteString]}];\n    \n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"POST\"], @\"Expected request HTTPMethod to be POST.\");\n        NSString *expectedUrl = [[self.url URLByAppendingPathComponent:@\"push/registrationids\"] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        return request;\n    };\n\n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n\n    MSPushHttp *pushHttp = [[MSPushHttp alloc] initWithClient:filteredClient];\n    [pushHttp createRegistrationId:^(NSString *registrationId, NSError *error) {\n        XCTAssertTrue([expectedRegistrationId isEqualToString:registrationId],\n                     @\"Expected registrationId to be parsed correctly from returned header.\");\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testCreateRegistration\n{\n    // Create the registration\n    NSMutableDictionary *registration = [[NSMutableDictionary alloc] init];\n    NSArray *tags = @[@\"tag1\", @\"tag2\"];\n    [registration setValue:@\"59d31b14081b92daa98fad91edc0e61fc23767d5b90892c4f22df56e312045c8\" forKey:@\"deviceId\"];\n    [registration setValue:@\"apns\" forKey:@\"platform\"];\n    [registration setValue:tags forKey:@\"tags\"];\n    NSString *registrationId = @\"8313603759421994114-6468852488791307573-9\";\n    [registration setValue:registrationId forKey:@\"registrationId\"];\n    \n    // Create the test filter to allow testing request and returning response without connecting to service\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:204\n                                   HTTPVersion:nil headerFields:nil];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"PUT\"], @\"Expected request HTTPMethod to be POST.\");\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:registrationId] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        \n        NSString *httpBody = [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding];\n        XCTAssertTrue([httpBody rangeOfString:registrationId].location == NSNotFound, @\"The request body should not included registrationId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"deviceId\\\":\\\"59d31b14081b92daa98fad91edc0e61fc23767d5b90892c4f22df56e312045c8\\\"\"].location != NSNotFound,\n                     @\"The request body should include deviceId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"platform\\\":\\\"apns\\\"\"].location != NSNotFound, @\"The request body should include platform.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"tags\\\":[\\\"tag1\\\",\\\"tag2\\\"]\"].location != NSNotFound, @\"The request body should include tags.\");\n        return request;\n    };\n    \n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n\n    MSPushHttp *pushHttp = [[MSPushHttp alloc] initWithClient:filteredClient];\n    \n    [pushHttp upsertRegistration:registration\n                      completion:^(NSError *error) {\n                          XCTAssertNil(error, @\"error is expected to be nil.\");\n                          self.done = YES;\n                      }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testListRegistrations\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    NSString* stringData = @\"[{\\\"registrationId\\\": \\\"8313603759421994114-6468852488791307573-9\\\", \\\"deviceId\\\":\\\"59d31b14081b92daa98fad91edc0e61fc23767d5b90892c4f22df56e312045c8\\\", \\\"tags\\\":[\\\"tag1\\\",\\\"tag2\\\"]}]\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    \n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    testFilter.dataToUse = data;\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"GET\"], @\"Expected request HTTPMethod to be GET.\");\n        NSString *expectedQueryAndPath = @\"push/registrations?deviceId=59d31b14081b92daa98fad91edc0e61fc23767d5b90892c4f22df56e312045c8&platform=apns\";\n        NSString *expectedUrl = [[self.url URLByAppendingPathComponent:expectedQueryAndPath]  absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri %@, but got %@.\", expectedUrl, [request URL]);\n        \n        return request;\n    };\n    \n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n    \n    MSPushHttp *pushHttp = [[MSPushHttp alloc] initWithClient:filteredClient];\n    [pushHttp registrationsForDeviceToken:@\"59d31b14081b92daa98fad91edc0e61fc23767d5b90892c4f22df56e312045c8\"\n                     completion:^(NSArray *registrations, NSError *error) {\n                         XCTAssertNil(error, @\"error is expected to be nil.\");\n                         XCTAssertTrue([registrations[0][@\"deviceId\"] isEqualToString:@\"59d31b14081b92daa98fad91edc0e61fc23767d5b90892c4f22df56e312045c8\"],\n                                     @\"deviceId is expected to deserialize correctly.\");\n                         XCTAssertTrue([registrations[0][@\"registrationId\"] isEqualToString:@\"8313603759421994114-6468852488791307573-9\"],\n                                      @\"registrationId is expected to deserialize correctly.\");\n                         XCTAssertTrue([registrations[0][@\"tags\"][0] isEqualToString:@\"tag1\"],\n                                      @\"tag1 is expected to deserialize correctly.\");\n                         XCTAssertTrue([registrations[0][@\"tags\"][1] isEqualToString:@\"tag2\"],\n                                      @\"tag2 is expected to deserialize correctly.\");\n                         self.done = YES;\n                      }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testDeleteRegistrations\n{\n    NSString *registrationId = @\"8313603759421994114-6468852488791307573-9\";\n    \n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    \n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"DELETE\"], @\"Expected request HTTPMethod to be DELETE.\");\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:registrationId] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        return request;\n    };\n    \n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n    \n    MSPushHttp *pushHttp = [[MSPushHttp alloc] initWithClient:filteredClient];\n    [pushHttp deleteRegistrationById:registrationId\n                      completion:^(NSError *error) {\n                          XCTAssertNil(error, @\"error is expected to be nil.\");\n                          self.done = YES;\n                      }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n\n#pragma mark * Async Test Helper Method\n\n\n-(BOOL) waitForTest:(NSTimeInterval)testDuration {\n    \n    NSDate *timeoutAt = [NSDate dateWithTimeIntervalSinceNow:testDuration];\n    \n    while (!self.done) {\n        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode\n                                 beforeDate:timeoutAt];\n        if([timeoutAt timeIntervalSinceNow] <= 0.0) {\n            break;\n        }\n    };\n    \n    return self.done;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSPushTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSClient.h\"\n#import \"MSMultiRequestTestFilter.h\"\n#import \"MSPush.h\"\n\n@interface MSPushTests : XCTestCase\n@property (nonatomic) BOOL done;\n@property (nonatomic) MSClient *client;\n@property (nonatomic) NSURL *url;\n@end\n\n@implementation MSPushTests\n\n- (void)setUp\n{\n    [super setUp];\n    self.url = [[NSURL alloc] initWithString:@\"https://aurl.azure-mobilefake.net\"];\n    self.client = [[MSClient alloc] initWithApplicationURL:self.url applicationKey:@\"QdffoEwYCblcmkvbInMEkEoSemgJHm31\"];\n\n    // Clear storage\n    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n    for (NSString* key in [[defaults dictionaryRepresentation] allKeys]) {\n        [defaults removeObjectForKey:key];\n    }\n    [defaults synchronize];\n    \n    self.done = NO;\n}\n\n- (void)tearDown\n{\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testRegisterNativeInitial\n{\n    MSTestFilter *testFilterEmptyListRegistrations = [MSTestFilter new];\n    NSString* stringData = @\"[]\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    \n    testFilterEmptyListRegistrations.responseToUse = response;\n    testFilterEmptyListRegistrations.ignoreNextFilter = YES;\n    testFilterEmptyListRegistrations.dataToUse = data;\n    testFilterEmptyListRegistrations.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"GET\"], @\"Expected request HTTPMethod to be GET.\");\n        NSString *expectedQueryAndPath = @\"push/registrations?deviceId=59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8&platform=apns\";\n        NSString *expectedUrl = [[self.url URLByAppendingPathComponent:expectedQueryAndPath]  absoluteString];\n        \n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri %@, but found %@.\", expectedUrl, [request URL]);\n        \n        return request;\n    };\n    \n    MSTestFilter *testFilterCreateRegistrationId = [MSTestFilter new];\n    __block NSString *expectedRegistrationId = @\"8313603759421994114-6468852488791307573-9\";\n\n    NSURL *locationUrl = [[self.url URLByAppendingPathComponent:@\"push/registrations\"]\n                          URLByAppendingPathComponent:expectedRegistrationId];\n    NSHTTPURLResponse *createRegistrationIdResponse = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:201\n                                   HTTPVersion:nil\n                                   headerFields:@{@\"Location\":[locationUrl absoluteString]}];\n    \n    testFilterCreateRegistrationId.responseToUse = createRegistrationIdResponse;\n    testFilterCreateRegistrationId.ignoreNextFilter = YES;\n    testFilterCreateRegistrationId.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"POST\"], @\"Expected request HTTPMethod to be POST.\");\n        NSString *expectedUrl = [[self.url URLByAppendingPathComponent:@\"push/registrationids\"] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        return request;\n    };\n    \n    // Create the registration\n    NSMutableDictionary *registration = [[NSMutableDictionary alloc] init];\n    NSArray *tags = @[@\"tag1\", @\"tag2\"];\n    [registration setValue:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\" forKey:@\"deviceId\"];\n    [registration setValue:@\"apns\" forKey:@\"platform\"];\n    [registration setValue:tags forKey:@\"tags\"];\n    __block NSString *registrationId = @\"8313603759421994114-6468852488791307573-9\";\n    [registration setValue:registrationId forKey:@\"registrationId\"];\n    \n    // Create the test filter to allow testing request and returning response without connecting to service\n    MSTestFilter *testFilterUpsertRegistration = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *upsertRegistrationResponse = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:204\n                                   HTTPVersion:nil headerFields:nil];\n    testFilterUpsertRegistration.responseToUse = upsertRegistrationResponse;\n    testFilterUpsertRegistration.ignoreNextFilter = YES;\n    \n    testFilterUpsertRegistration.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"PUT\"], @\"Expected request HTTPMethod to be POST.\");\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:registrationId] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        \n        NSString *httpBody = [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding];\n        XCTAssertTrue([httpBody rangeOfString:registrationId].location == NSNotFound, @\"The request body should not included registrationId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"deviceId\\\":\\\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\\\"\"].location != NSNotFound,\n                     @\"The request body should include deviceId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"platform\\\":\\\"apns\\\"\"].location != NSNotFound, @\"The request body should include platform.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"tags\\\":[\\\"tag1\\\",\\\"tag2\\\"]\"].location != NSNotFound, @\"The request body should include tags.\");\n        return request;\n    };\n    \n    MSMultiRequestTestFilter *testFilter = [[MSMultiRequestTestFilter alloc] init];\n    testFilter.testFilters = @[testFilterEmptyListRegistrations,\n                               testFilterCreateRegistrationId,\n                               testFilterUpsertRegistration];\n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n    \n    NSData *deviceToken = [self bytesFromHexString:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\"];\n    [filteredClient.push registerNativeWithDeviceToken:deviceToken tags:@[@\"tag1\",@\"tag2\"] completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error should be nil %@\", error.description);\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testRegisterNativeRequiredDeviceToken {\n    [self.client.push registerNativeWithDeviceToken:nil tags:@[@\"tag1\",@\"tag2\"] completion:^(NSError *error) {\n        XCTAssertEqual(error.code, [@MSPushRequiredParameter integerValue], @\"Error code was expected to be MSPushRequiredParameter.\");\n        XCTAssertEqual(error.domain, MSErrorDomain, @\"Error code was expected to be MSErrorDomain.\");\n        XCTAssertTrue([error.description rangeOfString:@\"deviceToken\"].location != NSNotFound, @\"Expected deviceToken in error description.\");\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testRegisterTemplateRequiredDeviceToken {\n    [self.client.push registerTemplateWithDeviceToken:nil name:nil jsonBodyTemplate:nil expiryTemplate:nil tags:nil completion:^(NSError *error) {\n        XCTAssertEqual(error.code, [@MSPushRequiredParameter integerValue], @\"Error code was expected to be MSPushRequiredParameter.\");\n        XCTAssertEqual(error.domain, MSErrorDomain, @\"Error code was expected to be MSErrorDomain.\");\n        XCTAssertTrue([error.description rangeOfString:@\"deviceToken\"].location != NSNotFound, @\"Expected deviceToken in error description.\");\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testRegisterTemplateRequiredName {\n    NSData *deviceToken = [self bytesFromHexString:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\"];\n    [self.client.push registerTemplateWithDeviceToken:deviceToken name:nil jsonBodyTemplate:nil expiryTemplate:nil tags:nil completion:^(NSError *error) {\n        XCTAssertEqual(error.code, [@MSPushRequiredParameter integerValue], @\"Error code was expected to be MSPushRequiredParameter.\");\n        XCTAssertEqual(error.domain, MSErrorDomain, @\"Error code was expected to be MSErrorDomain.\");\n        XCTAssertTrue([error.description rangeOfString:@\"name\"].location != NSNotFound, @\"Expected name in error description.\");\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testUnregisterTemplateRequiredName {\n    [self.client.push unregisterTemplateWithName:nil completion:^(NSError *error) {\n        XCTAssertEqual(error.code, [@MSPushRequiredParameter integerValue], @\"Error code was expected to be MSPushRequiredParameter.\");\n        XCTAssertEqual(error.domain, MSErrorDomain, @\"Error code was expected to be MSErrorDomain.\");\n        XCTAssertTrue([error.description rangeOfString:@\"name\"].location != NSNotFound, @\"Expected name in error description.\");\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testUnregisterAllRequiredDeviceToken {\n    [self.client.push unregisterAllWithDeviceToken:nil completion:^(NSError *error) {\n        XCTAssertEqual(error.code, [@MSPushRequiredParameter integerValue], @\"Error code was expected to be MSPushRequiredParameter.\");\n        XCTAssertEqual(error.domain, MSErrorDomain, @\"Error code was expected to be MSErrorDomain.\");\n        XCTAssertTrue([error.description rangeOfString:@\"deviceToken\"].location != NSNotFound, @\"Expected deviceToken in error description.\");\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testRegisterTemplateRequiredTemplateBody {\n    NSData *deviceToken = [self bytesFromHexString:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\"];\n    [self.client.push registerTemplateWithDeviceToken:deviceToken name:@\"foo\" jsonBodyTemplate:nil expiryTemplate:nil tags:nil completion:^(NSError *error) {\n        XCTAssertEqual(error.code, [@MSPushRequiredParameter integerValue], @\"Error code was expected to be MSPushRequiredParameter.\");\n        XCTAssertEqual(error.domain, MSErrorDomain, @\"Error code was expected to be MSErrorDomain.\");\n        XCTAssertTrue([error.description rangeOfString:@\"bodyTemplate\"].location != NSNotFound, @\"Expected bodyTemplate in error description.\");\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testRegisterTemplateInitial\n{\n    MSTestFilter *testFilterEmptyListRegistrations = [MSTestFilter new];\n    NSString* stringData = @\"[]\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    \n    testFilterEmptyListRegistrations.responseToUse = response;\n    testFilterEmptyListRegistrations.ignoreNextFilter = YES;\n    testFilterEmptyListRegistrations.dataToUse = data;\n    testFilterEmptyListRegistrations.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"GET\"], @\"Expected request HTTPMethod to be GET.\");\n        NSString *expectedQueryAndPath = @\"push/registrations?deviceId=59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8&platform=apns\";\n        NSString *expectedUrl = [[self.url URLByAppendingPathComponent:expectedQueryAndPath]  absoluteString];\n        \n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        \n        return request;\n    };\n    \n    MSTestFilter *testFilterCreateRegistrationId = [MSTestFilter new];\n    __block NSString *expectedRegistrationId = @\"8313603759421994114-6468852488791307573-9\";\n    \n    NSURL *locationUrl = [[self.url URLByAppendingPathComponent:@\"push/registrations\"]\n                          URLByAppendingPathComponent:expectedRegistrationId];\n    NSHTTPURLResponse *createRegistrationIdResponse = [[NSHTTPURLResponse alloc]\n                                                       initWithURL:nil\n                                                       statusCode:201\n                                                       HTTPVersion:nil\n                                                       headerFields:@{@\"Location\":[locationUrl absoluteString]}];\n    \n    testFilterCreateRegistrationId.responseToUse = createRegistrationIdResponse;\n    testFilterCreateRegistrationId.ignoreNextFilter = YES;\n    testFilterCreateRegistrationId.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"POST\"], @\"Expected request HTTPMethod to be POST.\");\n        NSString *expectedUrl = [[self.url URLByAppendingPathComponent:@\"push/registrationids\"] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        return request;\n    };\n    \n    // Create the registration\n    NSMutableDictionary *registration = [[NSMutableDictionary alloc] init];\n    NSArray *tags = @[@\"tag1\", @\"tag2\"];\n    [registration setValue:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\" forKey:@\"deviceId\"];\n    [registration setValue:@\"apns\" forKey:@\"platform\"];\n    [registration setValue:tags forKey:@\"tags\"];\n    __block NSString *registrationId = @\"8313603759421994114-6468852488791307573-9\";\n    [registration setValue:registrationId forKey:@\"registrationId\"];\n    \n    // Create the test filter to allow testing request and returning response without connecting to service\n    MSTestFilter *testFilterUpsertRegistration = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *upsertRegistrationResponse = [[NSHTTPURLResponse alloc]\n                                                     initWithURL:nil\n                                                     statusCode:204\n                                                     HTTPVersion:nil headerFields:nil];\n    testFilterUpsertRegistration.responseToUse = upsertRegistrationResponse;\n    testFilterUpsertRegistration.ignoreNextFilter = YES;\n    \n    testFilterUpsertRegistration.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"PUT\"], @\"Expected request HTTPMethod to be POST.\");\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:registrationId] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        \n        NSString *httpBody = [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding];\n        XCTAssertTrue([httpBody rangeOfString:registrationId].location == NSNotFound, @\"The request body should not included registrationId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"deviceId\\\":\\\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\\\"\"].location != NSNotFound,\n                     @\"The request body should include deviceId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"platform\\\":\\\"apns\\\"\"].location != NSNotFound, @\"The request body should include platform.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"tags\\\":[\\\"tag1\\\",\\\"tag2\\\"]\"].location != NSNotFound, @\"The request body should include tags.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"templateBody\\\":\\\"{aps:{alert:\\\\\\\"$(prop1)\\\\\\\"}}\\\"\"].location != NSNotFound, @\"The request body should include a templateBody.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"templateName\\\":\\\"template1\\\"\"].location != NSNotFound, @\"The request body should include a templateName.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"expiry\\\":\\\"$(expiry)\\\"\"].location != NSNotFound, @\"The request body should include a templateName.\");\n        return request;\n    };\n    \n    MSMultiRequestTestFilter *testFilter = [[MSMultiRequestTestFilter alloc] init];\n    testFilter.testFilters = @[testFilterEmptyListRegistrations,\n                               testFilterCreateRegistrationId,\n                               testFilterUpsertRegistration];\n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n    \n    NSData *deviceToken = [self bytesFromHexString:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\"];\n    [filteredClient.push registerTemplateWithDeviceToken:deviceToken name:@\"template1\" jsonBodyTemplate:@\"{aps:{alert:\\\"$(prop1)\\\"}}\" expiryTemplate:@\"$(expiry)\" tags:@[@\"tag1\",@\"tag2\"] completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error should be nil %@\", error.description);\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testRegisterUpdateWithEmptyStorage\n{\n    MSTestFilter *testFilterListRegistrations = [MSTestFilter new];\n    NSString* stringData = @\"[{\\\"registrationId\\\":\\\"8313603759421994114-6468852488791307573-9\\\", \\\"deviceId\\\":\\\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\\\", \\\"tags\\\":[\\\"tag1\\\",\\\"tag2\\\"]}]\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    \n    testFilterListRegistrations.responseToUse = response;\n    testFilterListRegistrations.ignoreNextFilter = YES;\n    testFilterListRegistrations.dataToUse = data;\n    testFilterListRegistrations.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"GET\"], @\"Expected request HTTPMethod to be GET.\");\n        NSString *expectedQueryAndPath = @\"push/registrations?deviceId=59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8&platform=apns\";\n        NSString *expectedUrl = [[self.url URLByAppendingPathComponent:expectedQueryAndPath] absoluteString];\n        \n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri %@, but found %@.\", expectedUrl, [request URL]);\n        \n        return request;\n    };\n    \n    // Create the registration\n    NSMutableDictionary *registration = [[NSMutableDictionary alloc] init];\n    NSArray *tags = @[@\"tag1\", @\"tag2\"];\n    [registration setValue:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\" forKey:@\"deviceId\"];\n    [registration setValue:@\"apns\" forKey:@\"platform\"];\n    [registration setValue:tags forKey:@\"tags\"];\n    __block NSString *registrationId = @\"8313603759421994114-6468852488791307573-9\";\n    [registration setValue:registrationId forKey:@\"registrationId\"];\n    \n    // Create the test filter to allow testing request and returning response without connecting to service\n    MSTestFilter *testFilterUpsertRegistration = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *upsertRegistrationResponse = [[NSHTTPURLResponse alloc]\n                                                     initWithURL:nil\n                                                     statusCode:204\n                                                     HTTPVersion:nil headerFields:nil];\n    testFilterUpsertRegistration.responseToUse = upsertRegistrationResponse;\n    testFilterUpsertRegistration.ignoreNextFilter = YES;\n    \n    testFilterUpsertRegistration.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"PUT\"], @\"Expected request HTTPMethod to be POST.\");\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:registrationId] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        \n        NSString *httpBody = [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding];\n        XCTAssertTrue([httpBody rangeOfString:registrationId].location == NSNotFound, @\"The request body should not included registrationId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"deviceId\\\":\\\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\\\"\"].location != NSNotFound,\n                     @\"The request body should include deviceId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"platform\\\":\\\"apns\\\"\"].location != NSNotFound, @\"The request body should include platform.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"tags\\\":[\\\"tag1\\\",\\\"tag2\\\"]\"].location != NSNotFound, @\"The request body should include tags.\");\n        return request;\n    };\n    \n    MSMultiRequestTestFilter *testFilter = [[MSMultiRequestTestFilter alloc] init];\n    testFilter.testFilters = @[testFilterListRegistrations,\n                               testFilterUpsertRegistration];\n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n    \n    NSData *deviceToken = [self bytesFromHexString:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\"];\n    [filteredClient.push registerNativeWithDeviceToken:deviceToken tags:@[@\"tag1\",@\"tag2\"] completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error should be nil %@\", error.description);\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testRegisterUpdateWithRegistrationInStorage\n{\n    [self setStorage:[self.url host] deviceToken:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\" storageVersion:@\"v1.0.0\" registrations:@{@\"$Default\": @\"8313603759421994114-6468852488791307573-9\"}];\n    \n    // Create the registration\n    NSMutableDictionary *registration = [[NSMutableDictionary alloc] init];\n    NSArray *tags = @[@\"tag1\", @\"tag2\"];\n    [registration setValue:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\" forKey:@\"deviceId\"];\n    [registration setValue:@\"apns\" forKey:@\"platform\"];\n    [registration setValue:tags forKey:@\"tags\"];\n    __block NSString *registrationId = @\"8313603759421994114-6468852488791307573-9\";\n    [registration setValue:registrationId forKey:@\"registrationId\"];\n    \n    // Create the test filter to allow testing request and returning response without connecting to service\n    MSTestFilter *testFilterUpsertRegistration = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *upsertRegistrationResponse = [[NSHTTPURLResponse alloc]\n                                                     initWithURL:nil\n                                                     statusCode:204\n                                                     HTTPVersion:nil headerFields:nil];\n    testFilterUpsertRegistration.responseToUse = upsertRegistrationResponse;\n    testFilterUpsertRegistration.ignoreNextFilter = YES;\n    \n    testFilterUpsertRegistration.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"PUT\"], @\"Expected request HTTPMethod to be POST.\");\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:registrationId] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        \n        NSString *httpBody = [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding];\n        XCTAssertTrue([httpBody rangeOfString:registrationId].location == NSNotFound, @\"The request body should not included registrationId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"deviceId\\\":\\\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\\\"\"].location != NSNotFound,\n                     @\"The request body should include deviceId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"platform\\\":\\\"apns\\\"\"].location != NSNotFound, @\"The request body should include platform.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"tags\\\":[\\\"tag1\\\",\\\"tag2\\\"]\"].location != NSNotFound, @\"The request body should include tags.\");\n        return request;\n    };\n    \n    MSMultiRequestTestFilter *testFilter = [[MSMultiRequestTestFilter alloc] init];\n    testFilter.testFilters = @[testFilterUpsertRegistration];\n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n    \n    NSData *deviceToken = [self bytesFromHexString:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\"];\n    [filteredClient.push registerNativeWithDeviceToken:deviceToken tags:@[@\"tag1\",@\"tag2\"] completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error should be nil %@\", error.description);\n        self.done = YES;\n    }];\n\n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testRegisterUpdateWithRegistrationInStorageExpiredRegistrationId\n{\n    [self setStorage:[self.url host] deviceToken:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\" storageVersion:@\"v1.0.0\" registrations:@{@\"$Default\": @\"8313603759421994114-6468852488791307573-9\"}];\n    \n    // Create the registration\n    NSMutableDictionary *registration = [[NSMutableDictionary alloc] init];\n    NSArray *tags = @[@\"tag1\", @\"tag2\"];\n    [registration setValue:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\" forKey:@\"deviceId\"];\n    [registration setValue:@\"apns\" forKey:@\"platform\"];\n    [registration setValue:tags forKey:@\"tags\"];\n    __block NSString *registrationId = @\"8313603759421994114-6468852488791307573-9\";\n    [registration setValue:registrationId forKey:@\"registrationId\"];\n    \n    // Create the test filter to allow testing request and returning response without connecting to service\n    MSTestFilter *testFilterUpsertRegistrationExpired = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *upsertRegistrationResponseExpired = [[NSHTTPURLResponse alloc]\n                                                     initWithURL:nil\n                                                     statusCode:410\n                                                     HTTPVersion:nil headerFields:nil];\n    testFilterUpsertRegistrationExpired.responseToUse = upsertRegistrationResponseExpired;\n    testFilterUpsertRegistrationExpired.ignoreNextFilter = YES;\n    \n    testFilterUpsertRegistrationExpired.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"PUT\"], @\"Expected request HTTPMethod to be POST.\");\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:registrationId] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        \n        NSString *httpBody = [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding];\n        XCTAssertTrue([httpBody rangeOfString:registrationId].location == NSNotFound, @\"The request body should not included registrationId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"deviceId\\\":\\\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\\\"\"].location != NSNotFound,\n                     @\"The request body should include deviceId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"platform\\\":\\\"apns\\\"\"].location != NSNotFound, @\"The request body should include platform.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"tags\\\":[\\\"tag1\\\",\\\"tag2\\\"]\"].location != NSNotFound, @\"The request body should include tags.\");\n        return request;\n    };\n    \n    MSTestFilter *testFilterCreateRegistrationId = [MSTestFilter new];\n    __block NSString *expectedRegistrationId = @\"8313603759421994114-6468852488791307573-9\";\n    \n    NSURL *locationUrl = [[self.url URLByAppendingPathComponent:@\"push/registrations\"]\n                          URLByAppendingPathComponent:expectedRegistrationId];\n    NSHTTPURLResponse *createRegistrationIdResponse = [[NSHTTPURLResponse alloc]\n                                                       initWithURL:nil\n                                                       statusCode:201\n                                                       HTTPVersion:nil\n                                                       headerFields:@{@\"Location\":[locationUrl absoluteString]}];\n    \n    testFilterCreateRegistrationId.responseToUse = createRegistrationIdResponse;\n    testFilterCreateRegistrationId.ignoreNextFilter = YES;\n    testFilterCreateRegistrationId.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"POST\"], @\"Expected request HTTPMethod to be POST.\");\n        NSString *expectedUrl = [[self.url URLByAppendingPathComponent:@\"push/registrationids\"] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        return request;\n    };\n    \n    // Create the test filter to allow testing request and returning response without connecting to service\n    MSTestFilter *testFilterUpsertRegistration = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *upsertRegistrationResponse = [[NSHTTPURLResponse alloc]\n                                                     initWithURL:nil\n                                                     statusCode:204\n                                                     HTTPVersion:nil headerFields:nil];\n    testFilterUpsertRegistration.responseToUse = upsertRegistrationResponse;\n    testFilterUpsertRegistration.ignoreNextFilter = YES;\n    \n    testFilterUpsertRegistration.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"PUT\"], @\"Expected request HTTPMethod to be POST.\");\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:registrationId] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        \n        NSString *httpBody = [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding];\n        XCTAssertTrue([httpBody rangeOfString:registrationId].location == NSNotFound, @\"The request body should not included registrationId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"deviceId\\\":\\\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\\\"\"].location != NSNotFound,\n                     @\"The request body should include deviceId.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"platform\\\":\\\"apns\\\"\"].location != NSNotFound, @\"The request body should include platform.\");\n        XCTAssertTrue([httpBody rangeOfString:@\"\\\"tags\\\":[\\\"tag1\\\",\\\"tag2\\\"]\"].location != NSNotFound, @\"The request body should include tags.\");\n        return request;\n    };\n\n    \n    MSMultiRequestTestFilter *testFilter = [[MSMultiRequestTestFilter alloc] init];\n    testFilter.testFilters = @[testFilterUpsertRegistrationExpired,\n                               testFilterCreateRegistrationId,\n                               testFilterUpsertRegistration];\n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n    \n    NSData *deviceToken = [self bytesFromHexString:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\"];\n    [filteredClient.push registerNativeWithDeviceToken:deviceToken tags:@[@\"tag1\",@\"tag2\"] completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error should be nil %@\", error.description);\n        self.done = YES;\n    }];\n\n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testDeleteForMissingRegistration\n{\n    MSTestFilter *testFilterEmptyListRegistrations = [MSTestFilter new];\n    NSString* stringData = @\"[]\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    \n    testFilterEmptyListRegistrations.responseToUse = response;\n    testFilterEmptyListRegistrations.ignoreNextFilter = YES;\n    testFilterEmptyListRegistrations.dataToUse = data;\n    testFilterEmptyListRegistrations.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"GET\"], @\"Expected request HTTPMethod to be GET.\");\n        NSString *expectedQuery = @\"?deviceId=59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8&platform=apns\";\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:expectedQuery]  absoluteString];\n        \n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        \n        return request;\n    };\n    \n    MSMultiRequestTestFilter *testFilter = [[MSMultiRequestTestFilter alloc] init];\n    testFilter.testFilters = @[testFilterEmptyListRegistrations];\n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n    \n    [filteredClient.push unregisterTemplateWithName:@\"template1\" completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Missing local registration is a no-op on delete\");\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testDeleteForExistingRegistrationFromRefresh\n{\n    [self setStorage:[self.url host] deviceToken:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\" storageVersion:@\"v1.0.0\" registrations:@{}];\n    \n    MSTestFilter *testFilterListRegistrations = [MSTestFilter new];\n    NSString* stringData = @\"[{\\\"templateName\\\":\\\"template1\\\",\\\"registrationId\\\":\\\"8313603759421994114-6468852488791307573-9\\\"}]\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    \n    testFilterListRegistrations.responseToUse = response;\n    testFilterListRegistrations.ignoreNextFilter = YES;\n    testFilterListRegistrations.dataToUse = data;\n    testFilterListRegistrations.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"GET\"], @\"Expected request HTTPMethod to be GET.\");\n        NSString *expectedQuery = @\"?deviceId=59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8&platform=apns\";\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:expectedQuery]  absoluteString];\n        \n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        \n        return request;\n    };\n    \n    MSTestFilter *testFilterDeleteRegistration = [MSTestFilter new];\n    \n    NSHTTPURLResponse *deleteResponse = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    \n    testFilterDeleteRegistration.responseToUse = deleteResponse;\n    testFilterDeleteRegistration.ignoreNextFilter = YES;\n    testFilterDeleteRegistration.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"DELETE\"], @\"Expected request HTTPMethod to be DELETE.\");\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:@\"8313603759421994114-6468852488791307573-9\"] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        return request;\n    };\n    \n    MSMultiRequestTestFilter *testFilter = [[MSMultiRequestTestFilter alloc] init];\n    testFilter.testFilters = @[testFilterListRegistrations,\n                               testFilterDeleteRegistration];\n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n    \n    [filteredClient.push unregisterTemplateWithName:@\"template1\" completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error should be nil %@\", error.description);\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testDeleteForExistingRegistrationFromStorage\n{\n    [self setStorage:[self.url host] deviceToken:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\" storageVersion:@\"v1.0.0\" registrations:@{@\"template1\":@\"8313603759421994114-6468852488791307573-9\"}];\n    \n    MSTestFilter *testFilterDeleteRegistration = [MSTestFilter new];\n    \n    NSHTTPURLResponse *deleteResponse = [[NSHTTPURLResponse alloc]\n                                         initWithURL:nil\n                                         statusCode:200\n                                         HTTPVersion:nil headerFields:nil];\n    \n    testFilterDeleteRegistration.responseToUse = deleteResponse;\n    testFilterDeleteRegistration.ignoreNextFilter = YES;\n    testFilterDeleteRegistration.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"DELETE\"], @\"Expected request HTTPMethod to be DELETE.\");\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:@\"8313603759421994114-6468852488791307573-9\"] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        return request;\n    };\n    \n    MSMultiRequestTestFilter *testFilter = [[MSMultiRequestTestFilter alloc] init];\n    testFilter.testFilters = @[testFilterDeleteRegistration];\n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n    \n    [filteredClient.push unregisterTemplateWithName:@\"template1\" completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error should be nil %@\", error.description);\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testDeleteForMissingRegistrationAfterRefresh\n{\n    [self setStorage:[self.url host] deviceToken:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\" storageVersion:@\"v1.0.0\" registrations:@{}];\n    \n    MSTestFilter *testFilterListRegistrations = [MSTestFilter new];\n    NSString* stringData = @\"[{\\\"templateName\\\":\\\"template1\\\",\\\"registrationId\\\":\\\"8313603759421994114-6468852488791307573-9\\\"}]\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    \n    testFilterListRegistrations.responseToUse = response;\n    testFilterListRegistrations.ignoreNextFilter = YES;\n    testFilterListRegistrations.dataToUse = data;\n    testFilterListRegistrations.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"GET\"], @\"Expected request HTTPMethod to be GET.\");\n        NSString *expectedQuery = @\"?deviceId=59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8&platform=apns\";\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:expectedQuery]  absoluteString];\n        \n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        \n        return request;\n    };\n    \n    MSTestFilter *testFilterDeleteRegistration = [MSTestFilter new];\n    \n    NSHTTPURLResponse *deleteResponse = [[NSHTTPURLResponse alloc]\n                                         initWithURL:nil\n                                         statusCode:200\n                                         HTTPVersion:nil headerFields:nil];\n    \n    testFilterDeleteRegistration.responseToUse = deleteResponse;\n    testFilterDeleteRegistration.ignoreNextFilter = YES;\n    testFilterDeleteRegistration.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"DELETE\"], @\"Expected request HTTPMethod to be DELETE.\");\n        NSString *expectedUrl = [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:@\"8313603759421994114-6468852488791307573-9\"] absoluteString];\n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri.\");\n        return request;\n    };\n    \n    MSMultiRequestTestFilter *testFilter = [[MSMultiRequestTestFilter alloc] init];\n    testFilter.testFilters = @[testFilterListRegistrations,\n                               testFilterDeleteRegistration];\n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n    \n    [filteredClient.push unregisterTemplateWithName:@\"template2\" completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error should be nil %@\", error.description);\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n- (void)testDeleteAllRegistrations\n{\n    [self setStorage:[self.url host] deviceToken:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\" storageVersion:@\"v1.0.0\" registrations:@{}];\n    \n    MSTestFilter *testFilterListRegistrations = [MSTestFilter new];\n    NSString* stringData = @\"[{\\\"templateName\\\":\\\"template1\\\",\\\"registrationId\\\":\\\"8313603759421994114-6468852488791307573-9\\\"},{\\\"templateName\\\":\\\"template2\\\",\\\"registrationId\\\":\\\"8313603759421994114-6468852488791307573-7\\\"}]\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    \n    testFilterListRegistrations.responseToUse = response;\n    testFilterListRegistrations.ignoreNextFilter = YES;\n    testFilterListRegistrations.dataToUse = data;\n    testFilterListRegistrations.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"GET\"], @\"Expected request HTTPMethod to be GET.\");\n        NSString *expectedQueryAndPath = @\"push/registrations?deviceId=59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8&platform=apns\";\n        NSString *expectedUrl = [[self.url URLByAppendingPathComponent:expectedQueryAndPath]  absoluteString];\n        \n        XCTAssertTrue([expectedUrl isEqualToString:[[request URL] absoluteString]], @\"Expected request to have expected Uri %@, but found %@.\", expectedUrl, [request URL]);\n        \n        return request;\n    };\n    \n    MSTestFilter *testFilterDeleteRegistration = [MSTestFilter new];\n    \n    NSHTTPURLResponse *deleteResponse = [[NSHTTPURLResponse alloc]\n                                         initWithURL:nil\n                                         statusCode:200\n                                         HTTPVersion:nil headerFields:nil];\n    \n    __block NSMutableArray *expectedUrls = [@[\n                                              [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:@\"8313603759421994114-6468852488791307573-7\"] absoluteString],\n                                              [[[self.url URLByAppendingPathComponent:@\"push/registrations\"] URLByAppendingPathComponent:@\"8313603759421994114-6468852488791307573-9\"] absoluteString]] mutableCopy];\n    \n    testFilterDeleteRegistration.responseToUse = deleteResponse;\n    testFilterDeleteRegistration.ignoreNextFilter = YES;\n    testFilterDeleteRegistration.onInspectRequest = ^(NSURLRequest *request) {\n        XCTAssertTrue([request.HTTPMethod isEqualToString:@\"DELETE\"], @\"Expected request HTTPMethod to be DELETE.\");\n        NSString *actualUrl = request.URL.absoluteString;\n        XCTAssertTrue([expectedUrls containsObject:actualUrl], @\"Expected request to have expected Uri.\");\n        [expectedUrls removeObject:actualUrl];\n        return request;\n    };\n    \n    MSMultiRequestTestFilter *testFilter = [[MSMultiRequestTestFilter alloc] init];\n    testFilter.testFilters = @[testFilterListRegistrations,\n                               testFilterDeleteRegistration,\n                               testFilterDeleteRegistration];\n    MSClient *filteredClient = [self.client clientWithFilter:testFilter];\n    \n    NSData *deviceToken = [self bytesFromHexString:@\"59D31B14081B92DAA98FAD91EDC0E61FC23767D5B90892C4F22DF56E312045C8\"];\n    [filteredClient.push unregisterAllWithDeviceToken:deviceToken completion:^(NSError *error) {\n        XCTAssertTrue(expectedUrls.count == 0, @\"Expected all URLs to have been hit\");\n        XCTAssertNil(error, @\"Error should be nil %@\", error.description);\n        self.done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:15], @\"Test timed out.\");\n}\n\n-(BOOL) waitForTest:(NSTimeInterval)testDuration {\n    \n    NSDate *timeoutAt = [NSDate dateWithTimeIntervalSinceNow:testDuration];\n    \n    while (!self.done) {\n        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode\n                                 beforeDate:timeoutAt];\n        if([timeoutAt timeIntervalSinceNow] <= 0.0) {\n            break;\n        }\n    };\n    \n    return self.done;\n}\n\n-(NSData*) bytesFromHexString:(NSString *)hexString;\n{\n    NSMutableData* data = [NSMutableData data];\n    for (int idx = 0; idx+2 <= hexString.length; idx+=2) {\n        NSRange range = NSMakeRange(idx, 2);\n        NSString* hexStr = [hexString substringWithRange:range];\n        NSScanner* scanner = [NSScanner scannerWithString:hexStr];\n        unsigned int intValue;\n        if ([scanner scanHexInt:&intValue])\n            [data appendBytes:&intValue length:1];\n    }\n    return data;\n}\n\n-(void) setStorage:(NSString *)mobileServiceHost\n       deviceToken:(NSString *)deviceToken\n    storageVersion:(NSString *)storageVersion\n     registrations:(NSDictionary *)registrations\n{\n    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n    NSString *versionKey = [NSString stringWithFormat:@\"%@-version\", mobileServiceHost];\n    NSString *deviceTokenKey = [NSString stringWithFormat:@\"%@-deviceToken\", mobileServiceHost];\n    NSString *registrationsKey = [NSString stringWithFormat:@\"%@-registrations\", mobileServiceHost];\n    \n    [defaults setObject:deviceToken forKey:deviceTokenKey];\n    [defaults setObject:storageVersion forKey:versionKey];\n    [defaults setObject:registrations forKey:registrationsKey];\n    \n    [defaults synchronize];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSQueryTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSQuery.h\"\n#import \"MSTable.h\"\n#import \"MSClient.h\"\n\n\n@interface MSQueryTests : XCTestCase {\n    MSClient *client;\n    MSTable *table;\n    MSQuery *query;\n}\n\n@end\n\n@implementation MSQueryTests\n\n\n#pragma mark * Setup and TearDown\n\n\n- (void) setUp\n{\n    NSLog(@\"%@ setUp\", self.name);\n    \n    client = [MSClient clientWithApplicationURLString:@\"http://someAppUrl\"];\n    XCTAssertNotNil(client, @\"Could not create test client.\");\n    \n    table = [[MSTable alloc] initWithName:@\"someTable\" client:client];\n    XCTAssertNotNil(table, @\"Could not create test table.\");\n}\n\n- (void) tearDown\n{\n    NSLog(@\"%@ tearDown\", self.name);\n}\n\n\n#pragma mark * Init Method Tests\n\n\n-(void)testMSQueryInitWithNilPredicateIsAllowed\n{\n    NSLog(@\"%@ start\", self.name);\n    \n    query = [[MSQuery alloc] initWithTable:table predicate:nil];\n    XCTAssertTrue([query.description isEqualToString:@\"\"],\n                 @\"OData query string was: %@\",\n                 query.description);\n    \n    NSLog(@\"%@ end\", self.name);\n}\n\n-(void)testMSQueryInitWithSimplePredicate\n{    \n    NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"name == 'bob'\"];\n    \n    query = [[MSQuery alloc] initWithTable:table predicate:predicate];\n    XCTAssertTrue([query.description\n                  isEqualToString:@\"$filter=(name%20eq%20'bob')\"],\n                 @\"OData query string was: %@\",\n                 query.description);\n}\n\n\n#pragma mark * Property Tests\n\n\n-(void)testMSQueryTableProperty\n{\n    query = [[MSQuery alloc] initWithTable:table predicate:nil];\n    XCTAssertEqualObjects(query.table,\n                         table,\n                         @\"'table' property didn't return the table from init.\");\n}\n\n-(void)testMSQueryFetchLimitPropertyCanBeSet\n{\n    query = [[MSQuery alloc] initWithTable:table predicate:nil];\n    query.fetchLimit = 22;\n    XCTAssertTrue([query.description isEqualToString:\n                  @\"$top=22\"],\n                  @\"OData query string was: %@\",\n                  query.description);\n}\n\n-(void)testMSQueryFetchLimitPropertyBoundsCase\n{\n    query = [[MSQuery alloc] initWithTable:table predicate:nil];\n    query.fetchLimit = 0;\n    query.includeTotalCount = YES;\n    XCTAssertTrue([query.description isEqualToString:\n                  @\"$top=0&$inlinecount=allpages\"],\n                 @\"OData query string was: %@\",\n                 query.description);\n}\n\n-(void)testMSQueryFetchOffsetPropertyCanBeSet\n{\n    query = [[MSQuery alloc] initWithTable:table predicate:nil];\n    query.fetchOffset = 542;\n    \n    NSArray *result = [[query.description componentsSeparatedByString:@\"&\"]\n                        sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];\n    NSArray *expected = @[@\"$skip=542\"];\n    \n    XCTAssertTrue([result isEqualToArray:expected],\n                 @\"OData query string was: %@\",\n                 query.description);\n}\n\n-(void)testMSQueryFetchOffsetPropertyBoundsCase\n{\n    query = [[MSQuery alloc] initWithTable:table predicate:nil];\n    query.fetchOffset = 0;\n    NSArray *result = [[query.description componentsSeparatedByString:@\"&\"]\n                       sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];\n    NSArray *expected = @[@\"$skip=0\"];\n    \n    XCTAssertTrue([result isEqualToArray:expected],\n                 @\"OData query string was: %@\",\n                 query.description);\n}\n\n-(void)testMSQueryIncludeTotalCountPropertySetToTrue\n{\n    query = [[MSQuery alloc] initWithTable:table predicate:nil];\n    query.includeTotalCount = YES;\n    XCTAssertTrue([query.description isEqualToString:@\"$inlinecount=allpages\"],\n                 @\"Query string was: %@\",\n                 query.description);\n}\n\n-(void)testMSQueryIncludeTotalCountPropertySetToFalse\n{\n    query = [[MSQuery alloc] initWithTable:table predicate:nil];\n    query.includeTotalCount = NO;\n    XCTAssertTrue([query.description isEqualToString:@\"\"],\n                 @\"Query string was: %@\",\n                 query.description);\n}\n\n-(void)testMSQueryParametersPropertyCanBeSet\n{    \n    query = [[MSQuery alloc] initWithTable:table predicate:nil];\n    query.parameters = @{\n        @\"key1\": @\"someValue\",\n        @\"key2\": @\"14\",\n    };\n\n    NSArray *result = [[query.description componentsSeparatedByString:@\"&\"]\n                       sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];\n    NSArray *expected = @[@\"key1=someValue\", @\"key2=14\"];\n    \n    XCTAssertTrue([result isEqualToArray:expected],\n                 @\"Query string was: %@\",\n                 query.description);\n}\n\n-(void)testMSQuerySelectFieldsPropertyCanBeSet\n{\n    query = [[MSQuery alloc] initWithTable:table predicate:nil];\n    query.selectFields = @[ @\"address\", @\"birthdate\" ];\n    XCTAssertTrue([query.description isEqualToString:\n                 @\"$select=address,birthdate\"],\n                 @\"Query string was: %@\",\n                 query.description);\n}\n\n\n#pragma mark * OrderBy Methods\n\n\n-(void)testMSQueryOrderByCapturesMethodCallOrder\n{\n    query = [[MSQuery alloc] initWithTable:table predicate:nil];\n    [query orderByAscending:@\"name\"];\n    [query orderByDescending:@\"zipcode\"];\n    [query orderByAscending:@\"birthdate\"];\n    \n    NSArray *result = [[query.description componentsSeparatedByString:@\"&\"]\n                       sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];\n    NSArray *expected = @[@\"$orderby=name%20asc,zipcode%20desc,birthdate%20asc\"];\n\n    XCTAssertTrue([result isEqualToArray:expected],\n                 @\"Query string was: %@\",\n                 query.description);\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSSyncTableTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSSyncTable.h\"\n#import \"MSTestFilter.h\"\n#import \"MSMultiRequestTestFilter.h\"\n#import \"MSQuery.h\"\n#import \"MSTable+MSTableTestUtilities.h\"\n#import \"MSOfflinePassthroughHelper.h\"\n#import \"MSCoreDataStore+TestHelper.h\"\n#import \"MSSDKFeatures.h\"\n#import \"MSTestWaiter.h\"\n#import \"MSNaiveISODateFormatter.h\"\n#import \"MSTableOperation.h\"\n#import \"MSTableOperationInternal.h\"\n#import \"MSTableOperationError.h\"\n#import \"MSSyncContextInternal.h\"\n#import \"MSTableConfigValue.h\"\n#import \"MSPullSettingsInternal.h\"\n#import \"MSClientInternal.h\"\n\nstatic NSString *const TodoTableNoVersion = @\"TodoNoVersion\";\nstatic NSString *const TodoTable = @\"TodoItem\";\nstatic NSString *const AllColumnTypesTable = @\"ColumnTypes\";\nstatic NSString *const SyncContextQueueName = @\"Sync Context: Operation Callbacks\";\n\n@interface MSSyncTableTests : XCTestCase {\n    MSClient *client;\n    BOOL done;\n    MSOfflinePassthroughHelper *offline;\n}\n@end\n\n@implementation MSSyncTableTests\n\n#pragma mark * Setup and TearDown\n\n-(void) setUp\n{\n    NSLog(@\"%@ setUp\", self.name);\n    \n    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];\n    config.timeoutIntervalForRequest = 11;\n    \n    client = [MSClient clientWithApplicationURLString:@\"https://someUrl/\"];\n    offline = [[MSOfflinePassthroughHelper alloc] initWithManagedObjectContext:[MSCoreDataStore inMemoryManagedObjectContext]];\n    \n    // Enable offline mode\n    client.syncContext = [[MSSyncContext alloc] initWithDelegate:offline dataSource:offline callback:nil];\n    \n    done = NO;\n}\n\n-(void) tearDown\n{\n    NSLog(@\"%@ tearDown\", self.name);\n}\n\n-(void) testInitWithNameAndClient\n{\n    MSSyncTable *table = [[MSSyncTable alloc] initWithName:@\"SomeName\" client:client];\n    \n    XCTAssertNotNil(table, @\"table should not be nil.\");\n    \n    XCTAssertNotNil(table.client, @\"table.client should not be nil.\");\n    XCTAssertTrue([table.name isEqualToString:@\"SomeName\"],\n                  @\"table.name shouldbe 'SomeName'\");\n}\n\n\n#pragma mark Insert Tests\n\n\n-(void) testInsertItemWithNoId\n{\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    \n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    \n    // Create the item\n    id item = @{ @\"text\":@\"test name\" };\n    __block NSString *itemId;\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item[@\"id\"], @\"The item should have an id\");\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        itemId = item[@\"id\"];\n        \n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Verify the item was in local store\n    NSError *error = nil;\n    NSDictionary *newItem = [offline readTable:TodoTableNoVersion withItemId:itemId orError:&error];\n    XCTAssertNil(error);\n    XCTAssertNotNil(newItem);\n    XCTAssertEqualObjects(newItem[@\"text\"], item[@\"text\"]);\n}\n\n-(void) testInsertItemWithNoIdAndNilIdRecordExistsSuccess\n{\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n\n    // Place record with a id of nil, to ensure the id check is using an actual value for id\n    [offline upsertItems:@[ @{ @\"text\":@\"record with nil id\" } ]\n                   table:TodoTableNoVersion\n                 orError:nil];\n    \n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    \n    id item = @{ @\"text\":@\"test name\" };\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        // If the id check used nil, we would have gotten an error that the id was in use\n        XCTAssertNil(error);\n        XCTAssertNotNil(item[@\"id\"], @\"The item should have an id\");\n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n\n-(void) testInsertItemWithInvalidId\n{\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    \n    MSSyncTable __block *todoTable = nil;\n    todoTable = [client syncTableWithName:TodoTableNoVersion];\n    \n    // Create the item\n    id item = @{ @\"id\": @12345, @\"text\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(error, @\"error should have been set.\");\n        XCTAssertEqualObjects(error.localizedDescription, @\"The item provided did not have a valid id.\");\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertItemWithInvalidItem\n{\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    \n    // Create the item\n    id item = @[ @\"I_am_a\", @\"Array\", @\"I should be an object\" ];\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(error, @\"error should have been set.\");\n        XCTAssertEqualObjects(error.localizedDescription, @\"The item provided was not valid.\");\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n- (void) testInsertItemWithoutDatasource\n{\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    \n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    client.syncContext.dataSource = nil;\n    \n    // Create the item\n    id item = @{ @\"id\": @\"ok\", @\"data\": @\"lots of stuff here\" };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(error, @\"error should have been set.\");\n        XCTAssertEqualObjects(error.localizedDescription, @\"Missing required datasource for MSSyncContext\");\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertIgnoresUnknownColumns\n{\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    \n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    \n    // Create the item with unknown columns\n    id item = @{ @\"fake_column\":@\"test name\", @\"anotherone\": @3, @\"text\": @\"hello\" };\n    \n    // Insert the item and verify no error occurs\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error);\n        \n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertItemWithValidId\n{\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    \n    NSString* stringData = @\"{\\\"id\\\": \\\"test1\\\", \\\"text\\\":\\\"test name\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:stringData];\n    \n    BOOL __block insertRanToServer = NO;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        XCTAssertEqualObjects(request.HTTPMethod, @\"POST\", @\"Incorrect operation (%@) sent to server\", request.HTTPMethod);\n        insertRanToServer = YES;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"id\": @\"test1\", @\"name\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Now try sending the pending operation to the server\n    expectation = [self expectationWithDescription:@\"Push for Valid Item\"];\n    \n    NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue(insertRanToServer, @\"the insert call didn't go to the server\");\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        [expectation fulfill];\n    }];\n    \n    XCTAssertNotNil(push);\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertWithAllColumnTypes {\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    \n    NSString *testData = @\"{\\\"id\\\": \\\"test1\\\", \\\"text\\\":\\\"test name\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200\n                                                                 data:testData];\n    \n    BOOL __block insertRanToServer = NO;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        XCTAssertEqualObjects(request.HTTPMethod, @\"POST\", @\"Incorrect operation (%@) sent to server\", request.HTTPMethod);\n        insertRanToServer = YES;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:AllColumnTypesTable];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"id\": @\"simpleId\",\n                            @\"string\":@\"string value\",\n                            @\"int16\": [NSNumber numberWithInt:16],\n                            @\"int32\": [NSNumber numberWithInt:32],\n                            @\"int64\": [NSNumber numberWithInt:64],\n                            @\"float\": [NSNumber numberWithFloat:3.14],\n                            @\"decimal\": [NSDecimalNumber decimalNumberWithMantissa:6 exponent:2 isNegative:NO],\n                            @\"double\": [NSNumber numberWithDouble:12.12],\n                            @\"date\": [NSDate dateWithTimeIntervalSinceNow:0],\n                            };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Verify the item in local store is correct\n    NSError *error = nil;\n    NSDictionary *newItem = [offline readTable:AllColumnTypesTable withItemId:@\"simpleId\" orError:&error];\n    XCTAssertNil(error);\n    XCTAssertNotNil(newItem);\n    XCTAssertEqualObjects(newItem[@\"int16\"], item[@\"int16\"]);\n    XCTAssertEqualObjects(newItem[@\"int32\"], item[@\"int32\"]);\n    XCTAssertEqualObjects(newItem[@\"int64\"], item[@\"int64\"]);\n    XCTAssertEqualObjects(newItem[@\"float\"], item[@\"float\"]);\n    XCTAssertEqualObjects(newItem[@\"decimal\"], item[@\"decimal\"]);\n    XCTAssertEqualObjects(newItem[@\"double\"], item[@\"double\"]);\n    XCTAssertEqualObjects(newItem[@\"date\"], item[@\"date\"]);\n    \n    // Now push this item to the server\n    expectation = [self expectationWithDescription:@\"Push with many column types\"];\n    \n    NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue(insertRanToServer, @\"the insert call didn't go to the server\");\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        [expectation fulfill];\n    }];\n    XCTAssertNotNil(push);\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertWithBinaryFail {\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    \n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:500];\n    \n    BOOL __block insertRanToServer = NO;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        insertRanToServer = YES;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:AllColumnTypesTable];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"id\": @\"simpleId\",\n                            @\"binary\": [@\"my test data\" dataUsingEncoding:NSUTF8StringEncoding]\n                            };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Now verify that the item is invalid for the server to handle\n    expectation = [self expectationWithDescription:@\"Push with Binary data in it\"];\n    NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertFalse(insertRanToServer);\n        XCTAssertNotNil(error);\n        XCTAssertEqual(error.code, MSPushCompleteWithErrors);\n        \n        NSArray *pushErrors = [error.userInfo objectForKey:MSErrorPushResultKey];\n        XCTAssertNotNil(pushErrors);\n        XCTAssertEqual(pushErrors.count, 1);\n        \n        MSTableOperationError *tableError = [pushErrors objectAtIndex:0];\n        XCTAssertEqual(tableError.code, MSInvalidItemWithRequest);\n\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        [expectation fulfill];\n        \n    }];\n    \n    XCTAssertNotNil(push);\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertPushInsertPush\n{\n    NSString* stringData = @\"{\\\"id\\\": \\\"test1\\\", \\\"text\\\":\\\"test name\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:stringData];\n                                \n    NSInteger __block serverCalls = 0;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        serverCalls++;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    // Create the first item to insert\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    NSDictionary *item = @{ @\"id\": @\"test1\", @\"name\":@\"test name\" };\n    \n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Now push the first item to the server\n    expectation = [self expectationWithDescription:@\"Pushing First Insert\"];\n        NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue(serverCalls == 1, @\"the insert call didn't go to the server\");\n        \n        [expectation fulfill];\n    }];\n    XCTAssertNotNil(push);\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Create the a new item and insert it\n    expectation = [self expectationWithDescription:@\"Second Insert\"];\n    item = @{ @\"id\": @\"test2\", @\"name\":@\"test name\" };\n    \n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n\n    // Finally, push the second item to server\n    expectation = [self expectationWithDescription:@\"Pushing Second Insert\"];\n    push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue(serverCalls == 2, @\"the insert call didn't go to the server\");\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        \n        \n        [expectation fulfill];\n    }];\n    XCTAssertNotNil(push);\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertItemWithValidIdConflict\n{\n    NSString* stringData = @\"{\\\"id\\\": \\\"test1\\\", \\\"text\\\":\\\"servers name\\\", \\\"__version\\\":\\\"1\\\" }\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:412 data:stringData];\n    \n    NSInteger __block serverCalls = 0;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        serverCalls++;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    // Create the item\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    NSDictionary *item = @{ @\"id\": @\"test1\", @\"text\":@\"test name\" };\n    \n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        [expectation fulfill];\n    }];\n    XCTAssertEqual(serverCalls, 0);\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Now try to push and trigger a conflict response\n    expectation = [self expectationWithDescription:@\"Push with server conflict\"];\n    NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        // Verify the call went to the server\n        XCTAssertEqual(serverCalls, 1, @\"the insert call didn't go to the server\");\n        \n        // Verify we got the expected error results\n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertEqual(error.code, [@MSPushCompleteWithErrors integerValue], @\"Unexpected error code\");\n        \n        NSArray *errors = error.userInfo[MSErrorPushResultKey];\n        XCTAssertNotNil(errors, @\"error should not have been nil.\");\n        \n        // Verify we have a precondition failed error\n        MSTableOperationError *errorInfo = errors[0];\n        \n        XCTAssertEqual(errorInfo.statusCode, [@412 integerValue], @\"Unexpected status code\");\n        XCTAssertEqual(errorInfo.code, [@MSErrorPreconditionFailed integerValue], @\"Unexpected error code\");\n        \n        NSDictionary *actualItem = errorInfo.serverItem;\n        XCTAssertNotNil(actualItem, @\"Expected server version to be present\");\n        XCTAssertEqualObjects(actualItem[@\"text\"], @\"servers name\");\n\n        NSDictionary *sentItem = errorInfo.item;\n        XCTAssertNotNil(sentItem, @\"Expected local version to be present\");\n        XCTAssertEqualObjects(sentItem[@\"text\"], @\"test name\");\n        \n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);        \n        \n        [expectation fulfill];\n    }];\n    XCTAssertNotNil(push);\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertUpdateCollapseSuccess\n{\n    NSString* stringData = @\"{\\\"id\\\": \\\"test1\\\", \\\"text\\\":\\\"updated name\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:stringData];\n    \n    __block NSInteger callsToServer = 0;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        callsToServer++;\n        \n        XCTAssertEqualObjects(request.HTTPMethod, @\"POST\", @\"Unexpected method: %@\", request.HTTPMethod);\n        \n        // Verify the item == the final (post update) value and not the initial insert's value)\n        NSString *bodyString = [[NSString alloc] initWithData:request.HTTPBody\n                                                     encoding:NSUTF8StringEncoding];\n        XCTAssertEqualObjects(bodyString, @\"{\\\"id\\\":\\\"test1\\\",\\\"text\\\":\\\"updated name\\\"}\");\n        \n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    // Create & insert the item\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    NSDictionary *item = @{ @\"id\": @\"test1\", @\"text\": @\"test name\" };\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Update the item\n    expectation = [self expectationWithDescription:self.name];\n    item = @{ @\"id\": @\"test1\", @\"text\": @\"updated name\" };\n    [todoTable update:item completion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Push queue to server\n    expectation = [self expectationWithDescription:self.name];\n    NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue(callsToServer == 1, @\"only one call to server should have been made\");\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        [expectation fulfill];\n        \n    }];\n    XCTAssertNotNil(push);\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertDeleteCollapseSuccess\n{\n    NSString *stringData = @\"{\\\"id\\\": \\\"test1\\\", \\\"text\\\":\\\"updated name\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:stringData];\n        \n    __block NSInteger callsToServer = 0;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        callsToServer++;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"id\": @\"test1\", @\"name\": @\"test name\" };\n    XCTestExpectation *expectation = [self expectationWithDescription:@\"Inserting an item\"];\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Now delete the item\n    expectation = [self expectationWithDescription:@\"Deleting the pending item\"];\n    [todoTable delete:item completion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Push to server (no calls expected)\n    expectation = [self expectationWithDescription:@\"Pushing (expecting no items)\"];\n    NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue(callsToServer == 0, @\"no calls to server should have been made\");\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        [expectation fulfill];\n        \n    }];\n    XCTAssertNotNil(push);\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertInsertCollapseThrows\n{\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    \n    NSDictionary *item = @{ @\"name\": @\"test\" };\n    [todoTable insert:item completion:^(NSDictionary *itemOne, NSError *error) {\n        [todoTable insert:itemOne completion:^(NSDictionary *itemTwo, NSError *error) {\n            XCTAssertNotNil(error, @\"expected an error\");\n            XCTAssertTrue(error.code == MSSyncTableInvalidAction, @\"unexpected error code\");\n            XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n            \n            [expectation fulfill];\n        }];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertThenInsertSameItem\n{\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    \n    NSString *insertResponse = @\"{\\\"id\\\":\\\"one\\\", \\\"text\\\":\\\"first item\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:insertResponse];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    NSDictionary *item = @{ @\"id\": @\"one\", @\"text\": @\"first item\" };\n    [todoTable insert:item completion:^(NSDictionary *i, NSError *error) {\n        XCTAssertNil(error);\n        \n        // push it to clear out pending operations\n        [todoTable.client.syncContext pushWithCompletion:^(NSError *error) {\n            [expectation fulfill];\n        }];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    expectation = [self expectationWithDescription:@\"Second Insert\"];\n    [todoTable insert:item completion:^(NSDictionary *i, NSError *error) {\n        XCTAssertNotNil(error);\n        XCTAssertEqual(error.code, MSSyncTableInvalidAction);\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        \n        \n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertWithReadError\n{\n    NSString *insertResponse = @\"{\\\"id\\\":\\\"one\\\", \\\"text\\\":\\\"first item\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:insertResponse];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    offline.errorOnReadTableWithItemIdOrError = YES;\n    NSDictionary *item = @{ @\"id\": @\"one\", @\"text\": @\"first item\" };\n\n    // insert without any items; should give an error\n    XCTestExpectation *expectation = [self expectationWithDescription:@\"InsertError: Item not in table\"];\n    \n    [todoTable insert:item completion:^(NSDictionary *i, NSError *error) {\n        XCTAssertNotNil(error);\n        XCTAssertEqual(error.code, 1);\n        XCTAssertEqual(offline.upsertCalls, 0);\n        XCTAssertEqual(offline.readTableCalls, 1);\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        \n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    offline.errorOnReadTableWithItemIdOrError = NO;\n    [offline resetCounts];\n    expectation = [self expectationWithDescription:@\"InsertError: Setup Expectation\"];\n    \n    // now insert so we end up with an item in the local store\n    [todoTable insert:item completion:^(NSDictionary *i, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertEqual(offline.upsertCalls, 2); // one for the item, one for the operation\n        XCTAssertEqual(offline.readTableCalls, 1);\n        \n        // push it to clear out pending operations\n        [todoTable.client.syncContext pushWithCompletion:^(NSError *error) {\n            [expectation fulfill];\n        }];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    offline.errorOnReadTableWithItemIdOrError = YES;\n    [offline resetCounts];\n    expectation = [self expectationWithDescription:@\"InsertError: Item already in table\"];\n\n    // now this should error as well with our read error.\n    [todoTable insert:item completion:^(NSDictionary *i, NSError *error) {\n        XCTAssertNotNil(error);\n        XCTAssertEqual(error.code, 1);\n        XCTAssertEqual(offline.upsertCalls, 0);\n        XCTAssertEqual(offline.readTableCalls, 1);\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        \n        \n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertWithOperationError {\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    \n    // Insert an item\n    offline.errorOnUpsertItemsForOperations = YES;\n    [todoTable insert:@{ @\"name\":@\"test name\" } completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(error);\n        XCTAssertNil(item);\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n\n#pragma mark Update Tests\n\n\n-(void) testUpdate_Push_Success\n{\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200\n                                                                 data:@\"{\\\"id\\\": \\\"test1\\\", \\\"text\\\":\\\"test name\\\"}\"];\n    \n    BOOL __block updateSentToServer = NO;\n    \n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        XCTAssertEqualObjects(request.HTTPMethod, @\"PATCH\", @\"Incorrect operation (%@) sent to server\", request.HTTPMethod);\n        updateSentToServer = YES;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"id\": @\"test1\", @\"name\":@\"test name\" };\n    \n    // Insert the item\n    done = NO;\n    [todoTable update:item completion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    done = NO;\n    NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue(updateSentToServer, @\"the update call didn't go to the server\");\n        XCTAssertEqualObjects([NSOperationQueue currentQueue].name, SyncContextQueueName);\n        done = YES;\n    }];\n    XCTAssertNotNil(push);\n    XCTAssertTrue([self waitForTest:2000.1], @\"Test timed out.\");\n}\n\n-(void) testUpdateInsert_Collapse_Throws\n{\n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    \n    NSDictionary *item = @{ @\"id\": @\"itemA\", @\"text\": @\"throw an error\" };\n    \n    [todoTable update:item completion:^(NSError *error) {\n        [todoTable insert:item completion:^(NSDictionary *itemTwo, NSError *error) {\n            XCTAssertNotNil(error);\n            XCTAssertEqual(error.code, MSSyncTableInvalidAction);\n            done = YES;\n        }];\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testUpdateUpdate_Collapse_Success\n{\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200\n                                                                 data:@\"{\\\"id\\\": \\\"test1\\\", \\\"text\\\":\\\"test name\\\"}\"];\n    \n    NSInteger __block callsToServer = 0;\n    \n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        XCTAssertEqualObjects(request.HTTPMethod, @\"PATCH\", @\"Incorrect operation (%@) sent to server\", request.HTTPMethod);\n        NSString *bodyString = [[NSString alloc] initWithData:request.HTTPBody\n                                                     encoding:NSUTF8StringEncoding];\n        XCTAssertEqualObjects(bodyString, @\"{\\\"id\\\":\\\"test1\\\",\\\"text\\\":\\\"updated name\\\"}\", @\"Unexpected item: %@\", bodyString);\n        callsToServer++;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"id\": @\"test1\", @\"text\":@\"test name\" };\n    \n    done = NO;\n    [todoTable update:item completion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    done = NO;\n    item = @{ @\"id\": @\"test1\", @\"text\":@\"updated name\" };\n    [todoTable update:item completion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    done = NO;\n    NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue(callsToServer == 1, @\"expected only 1 call to the server\");\n        done = YES;\n    }];\n    XCTAssertNotNil(push);\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testUpdateDelete_CollapseToDelete_Success\n{\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:204];\n    NSInteger __block callsToServer = 0;\n    \n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        XCTAssertEqualObjects(request.HTTPMethod, @\"DELETE\", @\"Incorrect operation (%@) sent to server\", request.HTTPMethod);\n        XCTAssertEqualObjects(request.URL.absoluteString, @\"https://someUrl/tables/TodoNoVersion/test1?__systemProperties=__version\");\n        callsToServer++;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    NSDictionary *item = @{ @\"id\": @\"test1\", @\"text\":@\"test name\" };\n    \n    done = NO;\n    [todoTable update:item completion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    done = NO;\n    [todoTable delete:item completion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    done = NO;\n    NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue(callsToServer == 1, @\"expected only 1 call to the server\");\n        done = YES;\n    }];\n    XCTAssertNotNil(push);\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n\n#pragma mark Delete Tests\n\n\n-(void) testDeleteNoVersion_Push_Success\n{\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200\n                                                                 data:@\"{\\\"id\\\": \\\"test1\\\", \\\"text\\\":\\\"test name\\\"}\"];\n    \n    BOOL __block deleteSentToServer = NO;\n    \n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        XCTAssertEqualObjects(request.HTTPMethod, @\"DELETE\", @\"Incorrect operation (%@) sent to server\", request.HTTPMethod);\n        XCTAssertNil(request.allHTTPHeaderFields[@\"If-Match\"], @\"If-Match header should have been nil\");\n        deleteSentToServer = YES;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"id\": @\"test1\", @\"name\":@\"test name\" };\n    \n    // Insert the item\n    done = NO;\n    [todoTable delete:item completion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    done = NO;\n    NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue(deleteSentToServer, @\"the delete call didn't go to the server\");\n        done = YES;\n    }];\n    XCTAssertNotNil(push);\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteWithVersion_Push_ItemSentWithVersion_Success\n{\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200\n                                                                 data:@\"{\\\"id\\\": \\\"test1\\\", \\\"text\\\":\\\"test name\\\"}\"];\n    \n    BOOL __block deleteSentToServer = NO;\n    \n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        NSString *ifMatchHeader = request.allHTTPHeaderFields[@\"If-Match\"];\n        XCTAssertTrue([ifMatchHeader isEqualToString:@\"\\\"123\\\"\"], @\"Unexpected header: %@\", ifMatchHeader);\n        deleteSentToServer = YES;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"id\": @\"test1\", MSSystemColumnVersion: @\"123\", @\"name\":@\"test name\" };\n    \n    // Insert the item\n    done = NO;\n    [todoTable delete:item completion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:1000.1], @\"Test timed out.\");\n    \n    done = NO;\n    NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue(deleteSentToServer, @\"the delete call didn't go to the server\");\n        done = YES;\n    }];\n    XCTAssertNotNil(push);\n    XCTAssertTrue([self waitForTest:2000.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteInsert_Collapse_Throws\n{\n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    \n    NSDictionary *item = @{ @\"id\": @\"itemA\", @\"text\": @\"throw an error\" };\n    \n    [todoTable delete:item completion:^(NSError *error) {\n        [todoTable insert:item completion:^(NSDictionary *itemTwo, NSError *error) {\n            XCTAssertNotNil(error);\n            XCTAssertEqual(error.code, MSSyncTableInvalidAction);\n            done = YES;\n        }];\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteUpdate_Collapse_Throws\n{\n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    \n    NSDictionary *item = @{ @\"id\": @\"itemA\", @\"text\": @\"throw an error\" };\n    \n    [todoTable delete:item completion:^(NSError *error) {\n        [todoTable update:item completion:^(NSError *error) {\n            XCTAssertNotNil(error);\n            XCTAssertEqual(error.code, MSSyncTableInvalidAction);\n            done = YES;\n        }];\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteDelete_Collapse_Throws\n{\n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    \n    NSDictionary *item = @{ @\"id\": @\"itemA\", @\"text\": @\"throw an error\" };\n    \n    [todoTable delete:item completion:^(NSError *error) {\n        [todoTable delete:item completion:^(NSError *error) {\n            XCTAssertNotNil(error);\n            XCTAssertEqual(error.code, MSSyncTableInvalidAction);\n            done = YES;\n        }];\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n\n#pragma mark Read Tests\n\n-(void) testReadWithIDSucces\n{\n    NSArray *items = @[ @{ @\"id\": @\"123\", @\"text\": @\"hello\" },\n                        @{ @\"id\": @\"456\", @\"text\": @\"goodbye\" } ];\n    [offline upsertItems:items table:TodoTable orError:nil];\n    \n    MSSyncTable *todoTable = [client syncTableWithName:TodoTable];\n    \n    XCTestExpectation *expectation = [self expectationWithDescription:@\"Read\"];\n    \n    [todoTable readWithId:@\"123\" completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item);\n        XCTAssertNil(error);\n        \n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:10.0 handler:nil];\n}\n\n-(void) testReadWithIdNoItemSuccess\n{\n    offline.returnErrors = YES;\n    \n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    \n    [todoTable readWithId:@\"10\" completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(item, @\"No item should have been found\");\n        XCTAssertNil(error, @\"No error should have been returned\");\n    }];\n}\n\n\n-(void) testReadWithCompletionSuccess\n{\n    NSArray *items = @[ @{ @\"id\": @\"123\", @\"text\": @\"hello\" },\n                        @{ @\"id\": @\"456\", @\"text\": @\"goodbye\" } ];\n    [offline upsertItems:items table:TodoTable orError:nil];\n    \n    MSSyncTable *todoTable = [client syncTableWithName:TodoTable];\n    \n    XCTestExpectation *expectation = [self expectationWithDescription:@\"Read\"];\n    \n    [todoTable readWithCompletion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertNotNil(result);\n        XCTAssertEqual(result.items.count, 2);\n        XCTAssertEqual(result.totalCount, -1);\n        \n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:10.0 handler:nil];\n}\n\n-(void) testReadWithPredicateSuccess\n{\n    NSArray *items = @[\n        @{ @\"id\": @\"123\", @\"text\": @\"hello\" },\n        @{ @\"id\": @\"456\", @\"text\": @\"hi\" },\n        @{ @\"id\": @\"789\", @\"text\": @\"goodbye\" }\n    ];\n    \n    [offline upsertItems:items table:TodoTable orError:nil];\n    \n    MSSyncTable *todoTable = [client syncTableWithName:TodoTable];\n    \n    XCTestExpectation *expectation = [self expectationWithDescription:@\"Read\"];\n\n    NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"text BEGINSWITH 'h'\"];\n    [todoTable readWithPredicate:predicate completion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertNotNil(result);\n        XCTAssertEqual(result.items.count, 2);\n        XCTAssertEqual(result.totalCount, -1);\n        \n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:10.0 handler:nil];\n}\n\n\n#pragma mark Push Tests\n\n\n-(void) testPushNetworkTimeout\n{\n    MSTestFilter *filter = [[MSTestFilter alloc] init];\n    filter.ignoreNextFilter = NO;\n    filter.errorToUse = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorTimedOut userInfo:nil];\n    \n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    // Create the first item to insert\n    XCTestExpectation *expectation = [self expectationWithDescription:self.name];\n    NSDictionary *item = @{ @\"id\" : @\"test1\", @\"name\" : @\"test name\" };\n    \n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Now push the first item to the server\n    expectation = [self expectationWithDescription:@\"Pushing First Insert\"];\n    [filteredClient.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNotNil(error, @\"error should have been nil.\");\n        XCTAssertEqual(error.code, MSPushAbortedNetwork);\n        \n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:90.0 handler:nil];\n}\n\n\n-(void) testPushNetworkTimeoutWithErroredOps\n{\n    NSArray *codes = @[ @412, @200, @0 ];\n    NSArray *data = @[\n        @\"{\\\"id\\\": \\\"test1\\\", \\\"name\\\":\\\"servers name\\\", \\\"__version\\\":\\\"1\\\" }\",\n        @\"{\\\"id\\\": \\\"test2\\\", \\\"name\\\":\\\"test name2\\\", \\\"__version\\\":\\\"2\\\" }\",\n        [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorTimedOut userInfo:nil]\n    ];\n    \n    MSMultiRequestTestFilter *filter = [MSMultiRequestTestFilter testFilterWithStatusCodes:codes\n                                                                                      data:data\n                                                                        appendEmptyRequest:NO];\n    \n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    // Queue up 1 update that will conflict\n    XCTestExpectation *expectation = [self expectationWithDescription:@\"Local Update\"];\n    [todoTable update:@{ @\"id\" : @\"test1\", @\"name\": @\"test name\" } completion:^(NSError *error) {\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:10.0 handler:nil];\n\n    // Queue up 2 update that will succeed\n    expectation = [self expectationWithDescription:@\"Local Update\"];\n    [todoTable update:@{ @\"id\" : @\"test2\", @\"name\": @\"test name2\" } completion:^(NSError *error) {\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:10.0 handler:nil];\n\n    \n    // Now add operation that will get the timeout\n    expectation = [self expectationWithDescription:@\"Local Insert\"];\n    [todoTable insert:@{ @\"id\" : @\"test3\", @\"name\": @\"test name3\" } completion:^(NSDictionary *item, NSError *error) {\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:10.0 handler:nil];\n\n    // And a last one that will not execute\n    expectation = [self expectationWithDescription:@\"Local Insert 2\"];\n    [todoTable insert:@{ @\"id\" : @\"test4\", @\"name\": @\"test name4\" } completion:^(NSDictionary *item, NSError *error) {\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:10.0 handler:nil];\n\n    XCTAssertEqual(filteredClient.syncContext.pendingOperationsCount, 4);\n    \n    // Now push the items to the server, and check network error on 3, andr  4th remains\n    expectation = [self expectationWithDescription:@\"Push With Early Abort\"];\n    [filteredClient.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNotNil(error, @\"error should have been nil.\");\n        XCTAssertEqual(error.code, MSPushAbortedNetwork);\n        \n        NSArray *operationErrors = error.userInfo[MSErrorPushResultKey];\n        XCTAssertNotNil(operationErrors);\n        XCTAssertEqual(operationErrors.count, 1);\n        \n        MSTableOperationError *opError = [operationErrors firstObject];\n        XCTAssertEqualObjects(opError.itemId, @\"test1\");\n        XCTAssertEqual(opError.code, MSErrorPreconditionFailed);\n        \n        [expectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:90.0 handler:nil];\n    \n    // Verify we made 3 requests, and of the 4 pending we are now down to 3\n    XCTAssertEqual(filter.actualRequests.count, 3);\n    XCTAssertEqual(filteredClient.syncContext.pendingOperationsCount, 3);\n}\n\n// Tests cancellation of the push operation at various stages of a push workflow.\n// - Verifies that a push following a cancelled push operation works as expected\n// - Verifies that cancelling a push operation finishes the push NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pushed to the server\n-(void) testPushCancellability_SuccessfulPush_CancelBeforeSendingPushRequest\n{\n    XCTAssertEqual([self performPushWithCancellationPoint:0 serverResponseCode:200], 0, \"Push cancellation failed at cancellation point 0\");\n}\n\n// Tests cancellation of the push operation at various stages of a push workflow.\n// - Verifies that a push following a cancelled push operation works as expected\n// - Verifies that cancelling a push operation finishes the push NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pushed to the server\n-(void) testPushCancellability_SuccessfulPush_CancelWhileProcessingPushreponse\n{\n    XCTAssertEqual([self performPushWithCancellationPoint:1 serverResponseCode:200], 0, \"Push cancellation failed at cancellation point 1\");\n}\n\n// Tests cancellation of the push operation at various stages of a push workflow.\n// - Verifies that a push following a cancelled push operation works as expected\n// - Verifies that cancelling a push operation finishes the push NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pushed to the server\n-(void) testPushCancellability_SuccessfulPush_CancelFromCompletionBlock\n{\n    XCTAssertEqual([self performPushWithCancellationPoint:2 serverResponseCode:200], 1, \"Push cancellation failed at cancellation point 2\");\n}\n\n// Tests cancellation of the push operation at various stages of a push workflow.\n// - Verifies that a push following a cancelled push operation works as expected\n// - Verifies that cancelling a push operation finishes the push NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pushed to the server\n-(void) testPushCancellability_SuccessfulPush_CancelRightAfterPushWithCompletionReturns\n{\n    XCTAssertEqual([self performPushWithCancellationPoint:3 serverResponseCode:200], 0, \"Push cancellation failed at cancellation point 3\");\n}\n\n// Tests cancellation of the push operation at various stages of a push workflow.\n// - Verifies that a push following a cancelled push operation works as expected\n// - Verifies that cancelling a push operation finishes the push NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pushed to the server\n-(void) testPushCancellability_UnsuccessfulPush_CancelBeforeSendingPushRequest\n{\n    XCTAssertEqual([self performPushWithCancellationPoint:0 serverResponseCode:500], 0, \"Push cancellation failed at cancellation point 0\");\n}\n\n\n// Tests cancellation of the push operation at various stages of a push workflow.\n// - Verifies that a push following a cancelled push operation works as expected\n// - Verifies that cancelling a push operation finishes the push NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pushed to the server\n-(void) testPushCancellability_UnsuccessfulPush_CancelWhileProcessingPushreponse\n{\n    XCTAssertEqual([self performPushWithCancellationPoint:1 serverResponseCode:500], 0, \"Push cancellation failed at cancellation point 1\");\n}\n\n// Tests cancellation of the push operation at various stages of a push workflow.\n// - Verifies that a push following a cancelled push operation works as expected\n// - Verifies that cancelling a push operation finishes the push NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pushed to the server\n-(void) testPushCancellability_UnsuccessfulPush_CancelFromCompletionBlock\n{\n    XCTAssertEqual([self performPushWithCancellationPoint:2 serverResponseCode:500], 0, \"Push cancellation failed at cancellation point 2\");\n}\n\n// Tests cancellation of the push operation at various stages of a push workflow.\n// - Verifies that a push following a cancelled push operation works as expected\n// - Verifies that cancelling a push operation finishes the push NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pushed to the server\n-(void) testPushCancellability_UnsuccessfulPush_CancelRightAfterPushWithCompletionReturns\n{\n    XCTAssertEqual([self performPushWithCancellationPoint:3 serverResponseCode:500], 0, \"Push cancellation failed at cancellation point 3\");\n}\n\n// Performs push and cancels it at the specified cancellation point.\n// - Verifies that a push operation following a cancelled push operation works as expected\n// - Verifies that cancelling a push finishes the push NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pushed to the server\n// - Returns the number of items pushed to the server.\n// Cancellation point 0: just before the push request is sent to the server\n// Cancellation point 1: while processing the push response\n// Cancellation point 2: while executing the push completion block\n// Cancellation point 4: immediately after the push NSOperation is returned by pushWithCompletion:\n-(int) performPushWithCancellationPoint:(int) requestedCancellationPoint serverResponseCode:(NSInteger)serverResponseCode\n{\n    // Initialization\n    MSTestFilter *filter = [MSTestFilter testFilterWithStatusCode:serverResponseCode data:@\"{\\\"id\\\": \\\"id1\\\", \\\"text\\\":\\\"server\\\"}\"];\n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n\n    __block NSOperation *pushOperation;\n\n    // Define the filter\n    filter.onInspectRequest = ^(NSURLRequest *request) {\n\n        // Cancellation point 0\n        if (requestedCancellationPoint == 0) {\n            [pushOperation cancel];\n        }\n        \n        return request;\n    };\n    \n    filter.onInspectResponseData = ^(NSURLRequest *request, NSData *data) {\n\n        // Cancellation point 1\n        if (requestedCancellationPoint == 1) {\n            [pushOperation cancel];\n        }\n        \n        return data;\n    };\n    \n    // Perform an insert\n    XCTestExpectation *insertExpectation = [self expectationWithDescription:@\"insert expectation\"];\n    [todoTable insert:@{ @\"id\" : @\"id1\", @\"text\" : @\"client\" } completion:^(NSDictionary *item, NSError *error) {\n        [insertExpectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:10 handler:nil];\n    \n    // Perform a push\n    pushOperation = [filteredClient.syncContext pushWithCompletion:^(NSError *error) {\n        \n        // Cancellation point 2\n        if (requestedCancellationPoint == 2) {\n            [pushOperation cancel];\n        }\n    }];\n    \n    // Cancellation point 3\n    if (requestedCancellationPoint == 3) {\n        [pushOperation cancel];\n    }\n\n    [self verifyFinished:pushOperation];\n\n    int synchronizedItemCount = [self synchronizedItemCount];\n\n    // Perform another insert\n    insertExpectation = [self expectationWithDescription:@\"insert expectation\"];\n    [todoTable insert:@{ @\"id\" : @\"id2\", @\"text\" : @\"client\" } completion:^(NSDictionary *item, NSError *error) {\n        [insertExpectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:10 handler:nil];\n\n    XCTAssertEqual([self performFollowupPushWithClient:client], 2, \"Expected all inserted items to have been pushed to the server by now\");\n\n    return synchronizedItemCount;\n}\n\n// Performs a push operation and returns the count of all client items pushed so far\n-(int) performFollowupPushWithClient:(MSClient *)pushClient\n{\n    // Define a filter that returns an appropriate server response for the requested item\n    MSTestFilter *filter = [MSTestFilter new];\n    MSClient *filteredClient = [pushClient clientWithFilter:filter];\n\n    filter.ignoreNextFilter = YES;\n    filter.onInspectResponseData = ^(NSURLRequest *request, NSData *data) {\n        NSError *error = nil;\n        \n        NSDictionary *item = [filteredClient.serializer itemFromData:request.HTTPBody withOriginalItem:nil ensureDictionary:YES orError:&error];\n        XCTAssertNil(error);\n        \n        NSString *responseString = [NSString stringWithFormat:@\"{\\\"id\\\": \\\"%@\\\", \\\"text\\\":\\\"server\\\"}\", item[@\"id\"]];\n        NSData *pushResponse = [responseString dataUsingEncoding:NSUTF8StringEncoding];\n\n        return pushResponse;\n    };\n\n    // Perform push\n    XCTestExpectation *pushExpectation = [self expectationWithDescription:@\"push expectation\"];\n    [filteredClient.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, \"Expected successful push\");\n        [pushExpectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:10 handler:nil];\n    \n    return [self synchronizedItemCount];\n}\n\n// Returns the number of synchronized items, i.e. items that are present on the server as well as the client.\n// An item is synchronized if it was successfully pushed to the server from the client OR\n// if it was successfully pulled from the server to the client.\n-(int) synchronizedItemCount\n{\n    // Initialization\n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    query.predicate = [NSPredicate predicateWithFormat:@\"text == 'server'\"];\n\n    // Number synchronized items\n    __block int numSynchronizedItems = 0;\n    \n    XCTestExpectation *readExpectation = [self expectationWithDescription:@\"read expectation\"];\n    \n    // Read from the table\n    [client.syncContext readWithQuery:query completion:^(MSQueryResult *result, NSError *error) {\n        \n        numSynchronizedItems = result.items.count;\n        [readExpectation fulfill];\n        \n    }];\n    \n    [self waitForExpectationsWithTimeout:10 handler:nil];\n    \n    return numSynchronizedItems;\n}\n\n// Verify that the specified NSOperation has finished\n-(void) verifyFinished:(NSOperation *)operation\n{\n    XCTestExpectation *completionExpectation = [self expectationWithDescription:@\"Completion expectation\"];\n    \n    // Define an operation and make it dependent on blockingOperation\n    NSOperation *dependentOperation = [NSBlockOperation blockOperationWithBlock:^{\n        [completionExpectation fulfill];\n    }];\n\n    // Add the dependentOperation to the queue after configuring dependencies\n    [dependentOperation addDependency:operation];\n    [[NSOperationQueue new] addOperation:dependentOperation];\n    \n    [self waitForExpectationsWithTimeout:10 handler:nil];\n}\n\n#pragma mark Pull Tests\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_SuccessfulPush_SuccessfulPull_CancelBeforeSendingPushRequest\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:0 serverPushResponseCode:@200 serverPullResponseCode:@200], 1, \"Pull cancellation failed at cancellation point 0\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_SuccessfulPush_SuccessfulPull_CancelWhileProcessingPushResponse\n\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:1 serverPushResponseCode:@200 serverPullResponseCode:@200], 1, \"Pull cancellation failed at cancellation point 1\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_SuccessfulPush_SuccessfulPull_CancelBeforeSendingPullReuest\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:2 serverPushResponseCode:@200 serverPullResponseCode:@200], 1, \"Pull cancellation failed at cancellation point 2\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_SuccessfulPush_SuccessfulPull_CancelWhileProcessingPullResponse\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:3 serverPushResponseCode:@200 serverPullResponseCode:@200], 1, \"Pull cancellation failed at cancellation point 3\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_SuccessfulPush_SuccessfulPull_CancelFromCompletionBlock\n{\n\n    XCTAssertEqual([self performPullWithCancellationPoint:4 serverPushResponseCode:@200 serverPullResponseCode:@200], 2, \"Pull cancellation failed at cancellation point 4\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_SuccessfulPush_SuccessfulPull_CancelRightAfterPullWithQueryReturns\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:5 serverPushResponseCode:@200 serverPullResponseCode:@200], 1, \"Pull cancellation failed at cancellation point 5\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_SuccessfulPush_UnsuccessfulPull_CancelBeforeSendingPushRequest\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:0 serverPushResponseCode:@200 serverPullResponseCode:@500], 1, \"Pull cancellation failed at cancellation point 0\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_SuccessfulPush_UnsuccessfulPull_CancelWhileProcessingPushResponse\n{\n\n    XCTAssertEqual([self performPullWithCancellationPoint:1 serverPushResponseCode:@200 serverPullResponseCode:@500], 1, \"Pull cancellation failed at cancellation point 1\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_SuccessfulPush_UnsuccessfulPull_CancelBeforeSendingPullReuest\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:2 serverPushResponseCode:@200 serverPullResponseCode:@500], 1, \"Pull cancellation failed at cancellation point 2\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_SuccessfulPush_UnsuccessfulPull_CancelWhileProcessingPullResponse\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:3 serverPushResponseCode:@200 serverPullResponseCode:@500], 1, \"Pull cancellation failed at cancellation point 3\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_SuccessfulPush_UnsuccessfulPull_CancelFromCompletionBlock\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:4 serverPushResponseCode:@200 serverPullResponseCode:@500], 1, \"Pull cancellation failed at cancellation point 4\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_SuccessfulPush_UnsuccessfulPull_CancelRightAfterPullWithQueryReturns\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:5 serverPushResponseCode:@200 serverPullResponseCode:@500], 1, \"Pull cancellation failed at cancellation point 5\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_UnsuccessfulPush_SuccessfulPull_CancelBeforeSendingPushRequest\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:0 serverPushResponseCode:@500 serverPullResponseCode:@200], 0, \"Pull cancellation failed at cancellation point 0\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_UnsuccessfulPush_SuccessfulPull_CancelWhileProcessingPushResponse\n\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:1 serverPushResponseCode:@500 serverPullResponseCode:@200], 0, \"Pull cancellation failed at cancellation point 1\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_UnsuccessfulPush_SuccessfulPull_CancelBeforeSendingPullReuest\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:2 serverPushResponseCode:@500 serverPullResponseCode:@200], 0, \"Pull cancellation failed at cancellation point 2\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_UnsuccessfulPush_SuccessfulPull_CancelWhileProcessingPullResponse\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:3 serverPushResponseCode:@500 serverPullResponseCode:@200], 0, \"Pull cancellation failed at cancellation point 3\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_UnsuccessfulPush_SuccessfulPull_CancelFromCompletionBlock\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:4 serverPushResponseCode:@500 serverPullResponseCode:@200], 0, \"Pull cancellation failed at cancellation point 4\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_UnsuccessfulPush_SuccessfulPull_CancelRightAfterPullWithQueryReturns\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:5 serverPushResponseCode:@500 serverPullResponseCode:@200], 0, \"Pull cancellation failed at cancellation point 5\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_UnsuccessfulPush_UnsuccessfulPull_CancelBeforeSendingPushRequest\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:0 serverPushResponseCode:@500 serverPullResponseCode:@500], 0, \"Pull cancellation failed at cancellation point 0\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_UnsuccessfulPush_UnsuccessfulPull\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:1 serverPushResponseCode:@500 serverPullResponseCode:@500], 0, \"Pull cancellation failed at cancellation point 1\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_UnsuccessfulPush_UnsuccessfulPull_CancelBeforeSendingPullReuest\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:2 serverPushResponseCode:@500 serverPullResponseCode:@500], 0, \"Pull cancellation failed at cancellation point 2\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_UnsuccessfulPush_UnsuccessfulPull_CancelWhileProcessingPullResponse\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:3 serverPushResponseCode:@500 serverPullResponseCode:@500], 0, \"Pull cancellation failed at cancellation point 3\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_UnsuccessfulPush_UnsuccessfulPull_CancelFromCompletionBlock\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:4 serverPushResponseCode:@500 serverPullResponseCode:@500], 0, \"Pull cancellation failed at cancellation point 4\");\n}\n\n// Tests cancellation of the pull operation at various stages of the pull workflow\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pulled from the server\n-(void) testPullCancellability_UnsuccessfulPush_UnsuccessfulPull_CancelRightAfterPullWithQueryReturns\n{\n    XCTAssertEqual([self performPullWithCancellationPoint:5 serverPushResponseCode:@500 serverPullResponseCode:@500], 0, \"Pull cancellation failed at cancellation point 5\");\n}\n\n// Performs pull and cancels it at the specified cancellation point.\n// - Verifies that a pull operation following a cancelled pull operation works as expected\n// - Verifies that cancelling a pull operation finishes the pull NSOperation regardless of the cancellation point\n// - Verifies that the expected number of items are pull from the server\n// - Returns the number of items pulled from the server.\n// Cancellation point 0: just before the push request initiated by the pull is sent to the server\n// Cancellation point 1: immediately after receiving response for the push initiated by the pull operation\n// Cancellation point 2: just before the pull request is sent to the server\n// Cancellation point 3: immediately after receiving response for the pull request\n// Cancellation point 4: while executing the pull completion block\n// Cancellation point 5: immediately after the pull NSOperation is returned by pullWithQuery:queryId:completion:\n-(int) performPullWithCancellationPoint:(int) requestedCancellationPoint serverPushResponseCode:(NSNumber *)serverPushResponseCode serverPullResponseCode:(NSNumber *)serverPullResponseCode\n{\n    // Initialization\n    NSString *serverPushData = @\"{\\\"id\\\": \\\"id1\\\", \\\"text\\\":\\\"server\\\"}\";\n    NSString *serverPullData = @\"[{\\\"id\\\": \\\"id1\\\", \\\"text\\\":\\\"server\\\"}, {\\\"id\\\": \\\"id2\\\", \\\"text\\\":\\\"server\\\"}]\";\n    MSMultiRequestTestFilter *filter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[serverPushResponseCode, serverPullResponseCode] data:@[serverPushData, serverPullData] appendEmptyRequest:YES];\n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    __block NSOperation *pullOperation;\n    \n    // Define filters\n    ((MSTestFilter *)filter.testFilters[0]).onInspectRequest = ^(NSURLRequest *request) {\n        \n        // Cancellation point 0\n        if (requestedCancellationPoint == 0) {\n            [pullOperation cancel];\n        }\n        \n        return request;\n    };\n    \n    ((MSTestFilter *)filter.testFilters[0]).onInspectResponseData = ^(NSURLRequest *request, NSData *data) {\n        \n        // Cancellation point 1\n        if (requestedCancellationPoint == 1) {\n            [pullOperation cancel];\n        }\n        \n        return data;\n    };\n    \n    ((MSTestFilter *)filter.testFilters[1]).onInspectRequest = ^(NSURLRequest *request) {\n        \n        // Cancellation point 2\n        if (requestedCancellationPoint == 2) {\n            [pullOperation cancel];\n        }\n        \n        return request;\n    };\n    \n    ((MSTestFilter *)filter.testFilters[1]).onInspectResponseData = ^(NSURLRequest *request, NSData *data) {\n        \n        // Cancellation point 3\n        if (requestedCancellationPoint == 3) {\n            [pullOperation cancel];\n        }\n        \n        return data;\n    };\n    \n    // Insert an item\n    XCTestExpectation *insertExpectation = [self expectationWithDescription:@\"insert expectation\"];\n    [todoTable insert:@{ @\"id\" : @\"id1\", @\"text\" : @\"client\" } completion:^(NSDictionary *item, NSError *error) {\n        [insertExpectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:10 handler:nil];\n    \n    // Perform a pull\n    pullOperation = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n\n        // Cancellation point 4\n        if (requestedCancellationPoint == 4) {\n            [pullOperation cancel];\n        }\n    }];\n\n    // Cancellation point 5\n    if (requestedCancellationPoint == 5) {\n        [pullOperation cancel];\n    }\n\n    [self verifyFinished:pullOperation];\n    \n    int synchronizedItemCount = [self synchronizedItemCount];\n    \n    XCTAssertEqual([self performFollowupPullWithClient:client], 3, \"Expected all server items to have been pulled to the client by now\");\n    \n    return synchronizedItemCount;\n}\n\n// Performs a pull operation and returns the count of all the server items pulled so far\n-(int) performFollowupPullWithClient:(MSClient *)pullClient\n{\n    // Initialization\n    MSTestFilter *filter = [MSTestFilter new];\n    MSClient *filteredClient = [pullClient clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n\n    __block bool isFirstPullRequest = true;\n    filter.ignoreNextFilter = YES;\n    filter.onInspectResponseData = ^(NSURLRequest *request, NSData *data) {\n\n        NSDictionary *item = [filteredClient.serializer itemFromData:request.HTTPBody withOriginalItem:nil ensureDictionary:YES orError:nil];\n        \n        NSString *responseString;\n        if (item != nil) // This means it is a push request\n        {\n            responseString = [NSString stringWithFormat:@\"{\\\"id\\\": \\\"%@\\\", \\\"text\\\":\\\"server\\\"}\", item[@\"id\"]];\n        }\n        else if (isFirstPullRequest) // First pull request\n        {\n            responseString = @\"[{\\\"id\\\": \\\"id1\\\", \\\"text\\\":\\\"server\\\"}, {\\\"id\\\": \\\"id2\\\", \\\"text\\\":\\\"server\\\"}, {\\\"id\\\": \\\"id3\\\", \\\"text\\\":\\\"server\\\"}]\";\n            isFirstPullRequest = false;\n        }\n        else // Second pull request\n        {\n            responseString = @\"[]\";\n        }\n        \n        NSData *pushResponse = [responseString dataUsingEncoding:NSUTF8StringEncoding];\n        return pushResponse;\n    };\n    \n    // Perform pull\n    NSOperation *pullOperation = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, \"Expected successful pull\");\n    }];\n    \n    [self verifyFinished:pullOperation];\n    \n    return [self synchronizedItemCount];\n}\n\n-(void) testPullSuccess\n{\n    NSString* stringData = @\"[{\\\"id\\\": \\\"one\\\", \\\"text\\\":\\\"first item\\\", \\\"__updatedAt\\\":\\\"1999-12-03T15:44:29.0Z\\\"},{\\\"id\\\": \\\"two\\\", \\\"text\\\":\\\"second item\\\", \\\"__updatedAt\\\":\\\"1999-12-03T15:44:29.0Z\\\"}]\";\n    MSMultiRequestTestFilter *filter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200] data:@[stringData] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:@\"TodoItem\"];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        XCTAssertEqual(offline.upsertCalls, 1);\n        XCTAssertEqual(offline.upsertedItems, 2);\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    XCTAssertEqual(2, filter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = (NSURLRequest *)filter.actualRequests[0];\n    NSURLRequest *secondRequest = (NSURLRequest *)filter.actualRequests[1];\n    \n    NSArray *expectedFirstResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted%2C__version\", @\"$top=50\", @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedFirstResult],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n\n    NSArray *expectedSecondResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted%2C__version\", @\"$top=50\", @\"$skip=2\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedSecondResult],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n}\n\n-(void) testPullWithoutVersion\n{\n    NSString* stringData = @\"[{\\\"id\\\": \\\"one\\\", \\\"text\\\":\\\"first item\\\"},{\\\"id\\\": \\\"two\\\", \\\"text\\\":\\\"second item\\\"}]\";\n    MSMultiRequestTestFilter *filter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200] data:@[stringData] appendEmptyRequest:YES];\n    \n    offline.upsertCalls = 0;\n    \n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        XCTAssertEqual((int)offline.upsertCalls, 1, @\"Unexpected number of upsert calls\");\n        XCTAssertEqual((int)offline.upsertedItems, 2, @\"Unexpected number of upsert calls\");\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    XCTAssertEqual(2, filter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = (NSURLRequest *)filter.actualRequests[0];\n    NSURLRequest *secondRequest = (NSURLRequest *)filter.actualRequests[1];\n    \n    NSArray *expectedFirstResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFirstResult],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n    \n    NSArray *expectedSecondResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=2\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedSecondResult],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n}\n\n-(void) testPullSuccessWithDeleted\n{\n    NSString* stringData = @\"[{\\\"id\\\": \\\"one\\\", \\\"text\\\":\\\"first item\\\", \\\"__deleted\\\":false},{\\\"id\\\": \\\"two\\\", \\\"text\\\":\\\"second item\\\", \\\"__deleted\\\":true}, {\\\"id\\\": \\\"three\\\", \\\"text\\\":\\\"third item\\\", \\\"__deleted\\\":null}]\";\n    MSMultiRequestTestFilter *testFilter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200] data:@[stringData] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error occurred: %@\", error.description);\n        XCTAssertEqual((int)offline.upsertCalls, 1, @\"Unexpected number of upsert calls\");\n        XCTAssertEqual((int)offline.upsertedItems, 2, @\"Unexpected number of upsert calls\");\n        XCTAssertEqual((int)offline.deleteCalls, 1, @\"Unexpected number of delete calls\");\n        XCTAssertEqual((int)offline.deletedItems, 1, @\"Unexpected number of upsert calls\");\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:30.0], @\"Test timed out.\");\n    \n    NSURLRequest *firstRequest = testFilter.actualRequests[0];\n    NSURLRequest *secondRequest = testFilter.actualRequests[1];\n    \n    NSArray *expectedFirstResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFirstResult],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n    NSArray *expectedSecondResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=3\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedSecondResult],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n}\n\n-(void) testPullWithPushSuccess\n{\n    NSString *insertResponse = @\"{\\\"id\\\": \\\"one\\\", \\\"text\\\":\\\"first item\\\"}\";\n    NSString *pullResponse = @\"[{\\\"id\\\": \\\"one\\\", \\\"text\\\":\\\"first item\\\"},{\\\"id\\\": \\\"two\\\", \\\"text\\\":\\\"second item\\\"}]\";\n    MSMultiRequestTestFilter *testFilter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200,@200] data:@[insertResponse,pullResponse] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    [todoTable insert:@{ @\"id\":@\"test1\", @\"name\": @\"test one\"} completion:^(NSDictionary *item, NSError *error) {\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:60.0], @\"Test timed out.\");\n    \n    done = NO;\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Unexpected error: %@\", error.description);\n        XCTAssertEqual(offline.upsertCalls, 4);\n        XCTAssertEqual(offline.upsertedItems, 5);\n        \n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    NSURLRequest *insertRequest = testFilter.actualRequests[0];\n    NSURLRequest *firstPullRequest = testFilter.actualRequests[1];\n    NSURLRequest *secondPullRequest = testFilter.actualRequests[2];\n    XCTAssertEqualObjects(insertRequest.URL.absoluteString, @\"https://someUrl/tables/TodoNoVersion?__systemProperties=__version\");\n    \n    NSArray *expectedFirstPullResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstPullRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFirstPullResult],\n                  @\"Invalid URL: %@\", firstPullRequest.URL.absoluteString);\n    \n    NSArray *expectedSecondPullResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=2\"];\n    XCTAssertTrue([self checkURL:secondPullRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedSecondPullResult],\n                  @\"Invalid URL: %@\", secondPullRequest.URL.absoluteString);\n}\n\n-(void) testPullAddsProperFeaturesHeader\n{\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:@\"[]\"];\n    __block NSURLRequest *actualRequest = nil;\n    \n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    offline.upsertCalls = 0;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:@\"TodoItem\"];\n    MSQuery *query = [todoTable query];\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Unexpected error: %@\", error.description);\n        XCTAssertNotNil(actualRequest);\n        \n        NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n        XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n        NSString *expectedFeatures = @\"TQ,OL\";\n        XCTAssertTrue([featuresHeader isEqualToString:expectedFeatures], @\"Header value (%@) was not as expected (%@)\", featuresHeader, expectedFeatures);\n        \n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:30.0], @\"Test timed out.\");\n}\n\n-(void) testIncrementalPullAddsProperFeaturesHeader\n{\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:@\"[]\"];\n    __block NSURLRequest *actualRequest = nil;\n    \n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    offline.upsertCalls = 0;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:@\"TodoItem\"];\n    MSQuery *query = [todoTable query];\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:@\"something\" completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Unexpected error: %@\", error.description);\n        XCTAssertNotNil(actualRequest);\n        \n        NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n        XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n        NSString *expectedFeatures = @\"TQ,OL,IP\";\n        XCTAssertTrue([featuresHeader isEqualToString:expectedFeatures], @\"Header value (%@) was not as expected (%@)\", featuresHeader, expectedFeatures);\n        \n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:30.0], @\"Test timed out.\");\n}\n\n-(void) testPullWithCustomParameters\n{\n    NSString* stringData = @\"[{\\\"id\\\": \\\"one\\\", \\\"text\\\":\\\"first item\\\"},{\\\"id\\\": \\\"two\\\", \\\"text\\\":\\\"second item\\\"}]\";\n    MSMultiRequestTestFilter *testFilter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200] data:@[stringData] appendEmptyRequest:YES];\n    \n    offline.upsertCalls = 0;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    query.parameters = @{@\"mykey\": @\"myvalue\"};\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        XCTAssertEqual((int)offline.upsertCalls, 1, @\"Unexpected number of upsert calls\");\n        XCTAssertEqual((int)offline.upsertedItems, 2, @\"Unexpected number of upsert calls\");\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:30.0], @\"Test timed out.\");\n    \n    NSURLRequest *firstRequest = testFilter.actualRequests[0];\n    NSURLRequest *secondRequest = testFilter.actualRequests[1];\n    \n    NSArray *expectedFirstResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"mykey=myvalue\", @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFirstResult],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n    \n    NSArray *expectedSecondResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=2\", @\"mykey=myvalue\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedSecondResult],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n}\n\n-(void) testPullWithSystemPropertiesFails\n{\n    NSString* stringData = @\"[{\\\"id\\\": \\\"one\\\", \\\"text\\\":\\\"first item\\\"},{\\\"id\\\": \\\"two\\\", \\\"text\\\":\\\"second item\\\"}]\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:stringData];\n    \n    __block NSURLRequest *actualRequest = nil;\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    offline.upsertCalls = 0;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    query.parameters = @{@\"__systemProperties\": @\"__createdAt%2C__somethingRandom\"};\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNotNil(error);\n        XCTAssertEqual(error.code, MSInvalidParameter);\n        XCTAssertEqual((int)offline.upsertCalls, 0, @\"Unexpected number of upsert calls\");\n        XCTAssertEqual((int)offline.upsertedItems, 0, @\"Unexpected number of upsert calls\");\n        done = YES;\n    }];\n    \n    XCTAssertNil(pull);\n    \n    XCTAssertTrue([self waitForTest:30.0], @\"Test timed out.\");\n}\n\n-(void) testPullWithFetchLimitGreaterThanDefaultPageSize\n{\n    // Pull should make requests with $top=50 until it has pulled all the data up to fetchLimit.\n    \n    // the ids don't really matter for this test\n    NSString* fiftyItems = [MSMultiRequestTestFilter testDataWithItemCount:50 startId:0];\n    \n    MSMultiRequestTestFilter *testFilter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200, @200, @200] data:@[fiftyItems, fiftyItems, fiftyItems] appendEmptyRequest:NO];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    query.fetchLimit = 150;\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    XCTAssertEqual(3, testFilter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = testFilter.actualRequests[0];\n    NSURLRequest *secondRequest = testFilter.actualRequests[1];\n    NSURLRequest *thirdRequest = testFilter.actualRequests[2];\n    \n    NSArray *expectedFirstResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFirstResult],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n\n    NSArray *expectedSecondResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=50\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedSecondResult],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n    \n    NSArray *expectedThirdResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=100\"];\n    XCTAssertTrue([self checkURL:thirdRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedThirdResult],\n                  @\"Invalid URL: %@\", thirdRequest.URL.absoluteString);\n}\n\n-(void) testPullWithFetchLimitGreaterThanCustomPageSize\n{\n    // Pull should make requests with $top=10 until it has pulled all the data up to fetchLimit.\n    \n    // the ids don't really matter for this test\n    NSString* tenItems = [MSMultiRequestTestFilter testDataWithItemCount:10 startId:0];\n    \n    MSMultiRequestTestFilter *testFilter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200, @200, @200] data:@[tenItems, tenItems, tenItems] appendEmptyRequest:NO];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    query.fetchLimit = 30;\n    \n    MSPullSettings *pullSettings = [[MSPullSettings alloc] initWithPageSize:10];\n    \n    XCTAssertNotEqual(pullSettings.pageSize, MSPullSettings.defaultPageSize, @\"This test requires the custom page size to be different from the default page size\");\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil settings:pullSettings completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    [pull waitUntilFinished];\n    \n    XCTAssertEqual(3, testFilter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = testFilter.actualRequests[0];\n    NSURLRequest *secondRequest = testFilter.actualRequests[1];\n    NSURLRequest *thirdRequest = testFilter.actualRequests[2];\n    \n    NSArray *expectedFirstResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=10\", @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFirstResult],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n    \n    NSArray *expectedSecondResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=10\", @\"$skip=10\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedSecondResult],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n    \n    NSArray *expectedThirdResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=10\", @\"$skip=20\"];\n    XCTAssertTrue([self checkURL:thirdRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedThirdResult],\n                  @\"Invalid URL: %@\", thirdRequest.URL.absoluteString);\n}\n\n-(void) testPullWithFetchLimitLargerThanItems\n{\n    // Pull should make requests with $top=50 until it finds an empty result.\n    \n    // the ids don't really matter for this test\n    NSString* fiftyItems = [MSMultiRequestTestFilter testDataWithItemCount:50 startId:0];\n    NSString* twentyFiveItems = [MSMultiRequestTestFilter testDataWithItemCount:25 startId:0];\n    \n    MSMultiRequestTestFilter *testFilter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200, @200, @200] data:@[fiftyItems, fiftyItems, twentyFiveItems] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    query.fetchLimit = 1000;\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    XCTAssertEqual(4, testFilter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = testFilter.actualRequests[0];\n    NSURLRequest *secondRequest = testFilter.actualRequests[1];\n    NSURLRequest *thirdRequest = testFilter.actualRequests[2];\n    NSURLRequest *fourthRequest = testFilter.actualRequests[3];\n    \n    NSArray *expectedFirstResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFirstResult],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n    \n    NSArray *expectedSecondResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=50\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedSecondResult],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n    \n    NSArray *expectedThirdResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=100\"];\n    XCTAssertTrue([self checkURL:thirdRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedThirdResult],\n                  @\"Invalid URL: %@\", thirdRequest.URL.absoluteString);\n    \n    NSArray *expectedFourthResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=125\"];\n    XCTAssertTrue([self checkURL:fourthRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFourthResult],\n                  @\"Invalid URL: %@\", fourthRequest.URL.absoluteString);\n}\n\n-(void) testPullWithFetchLimitSmallerThanDefault\n{\n    // Pull should make one requests with $top=25.\n    \n    // the ids don't really matter for this test\n    NSString* fiftyItems = [MSMultiRequestTestFilter testDataWithItemCount:50 startId:0];\n    NSString* twentyFiveItems = [MSMultiRequestTestFilter testDataWithItemCount:25 startId:0];\n    \n    MSMultiRequestTestFilter *testFilter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200, @200, @200] data:@[fiftyItems, fiftyItems, twentyFiveItems] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    // we'd expect 4 calls ($top=25)\n    query.fetchLimit = 25;\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    XCTAssertEqual(1, testFilter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = testFilter.actualRequests[0];\n    \n    NSArray *expectedFirstResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=25\", @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFirstResult],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n}\n\n-(void) testPullWithFetchLimitWhenServerHasLowerLimit\n{\n    // Pull should make requests with $top=50 but skip in increments of 25 since that's what the server has returned to us.\n    \n    // the ids don't really matter for this test\n    NSString* twentyFiveItems = [MSMultiRequestTestFilter testDataWithItemCount:25 startId:0];\n    NSString* tenItems = [MSMultiRequestTestFilter testDataWithItemCount:10 startId:0]; // end on a non-divisible-by-25 number\n    \n    MSMultiRequestTestFilter *testFilter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200, @200, @200] data:@[twentyFiveItems, twentyFiveItems, tenItems] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    // we'd expect 4 calls ($top=50, 50, 50, 50) ($skip=0, 25, 50, 60)\n    query.fetchLimit = 100;\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    XCTAssertEqual(4, testFilter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = testFilter.actualRequests[0];\n    NSURLRequest *secondRequest = testFilter.actualRequests[1];\n    NSURLRequest *thirdRequest = testFilter.actualRequests[2];\n    NSURLRequest *fourthRequest = testFilter.actualRequests[3];\n    \n    NSArray *expectedFirstResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFirstResult],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n    \n    NSArray *expectedSecondResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=25\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedSecondResult],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n    \n    NSArray *expectedThirdResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=50\"];\n    XCTAssertTrue([self checkURL:thirdRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedThirdResult],\n                  @\"Invalid URL: %@\", thirdRequest.URL.absoluteString);\n    \n    NSArray *expectedFourthResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=40\", @\"$skip=60\"];\n    XCTAssertTrue([self checkURL:fourthRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFourthResult],\n                  @\"Invalid URL: %@\", fourthRequest.URL.absoluteString);\n}\n\n-(void) testPullWithFetchLimitNotMultipleOfFifty\n{\n    // Pull should make requests with $top=50 but skip in increments of 25 since that's what the server has returned to us.\n    \n    // the ids don't really matter for this test\n    NSString* fiftyItems = [MSMultiRequestTestFilter testDataWithItemCount:50 startId:0];\n    NSString* fortyEightItems = [MSMultiRequestTestFilter testDataWithItemCount:48 startId:0];\n    \n    MSMultiRequestTestFilter *testFilter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200, @200, @200] data:@[fiftyItems, fiftyItems, fortyEightItems] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    // we'd expect 4 calls ($top=50, 50, 50, 50) ($skip=0, 25, 50, 60)\n    query.fetchLimit = 148;\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    XCTAssertEqual(3, testFilter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = testFilter.actualRequests[0];\n    NSURLRequest *secondRequest = testFilter.actualRequests[1];\n    NSURLRequest *thirdRequest = testFilter.actualRequests[2];\n    \n    NSArray *expectedFirstResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFirstResult],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n    \n    NSArray *expectedSecondResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=50\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedSecondResult],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n    \n    NSArray *expectedThirdResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=48\", @\"$skip=100\"];\n    XCTAssertTrue([self checkURL:thirdRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedThirdResult],\n                  @\"Invalid URL: %@\", thirdRequest.URL.absoluteString);\n}\n\n-(void) testVanillaPull_ValidPullSettings\n{\n    // Guard against possible future changes to |MSPullSettings.defaultPageSize|.\n    // Set |pageSize| in such a way that it would never match |MSPullSettings.defaultPageSize|.\n    NSInteger pageSize = MSPullSettings.defaultPageSize + 1;\n\n    MSPullSettings *pullSettings = [[MSPullSettings alloc] initWithPageSize:pageSize];\n    \n    NSURL *pullRequest = [self pullRequestWithSettings:pullSettings shouldUsePullSettings:YES isIncremental:NO];\n    \n    NSString *topParam = [NSString stringWithFormat:@\"$top=%ld\", (long) pullSettings.pageSize];\n    \n    NSArray *expectedPullQuery = @[topParam, @\"$skip=0\", @\"__includeDeleted=true\", @\"__systemProperties=__deleted\"];\n    \n    XCTAssertTrue([self checkURL:pullRequest withPath:@\"/tables/TodoNoVersion\" andQuery:expectedPullQuery],\n                  @\"Invalid pull request: %@\", pullRequest.absoluteString);\n}\n\n-(void) testVanillaPull_NilPullSettings\n{\n    NSURL *pullRequest = [self pullRequestWithSettings:nil shouldUsePullSettings:YES isIncremental:NO];\n    \n    NSString *topParam = [NSString stringWithFormat:@\"$top=%ld\", (long) MSPullSettings.defaultPageSize];\n    \n    NSArray *expectedPullQuery = @[topParam, @\"$skip=0\", @\"__includeDeleted=true\", @\"__systemProperties=__deleted\"];\n    \n    XCTAssertTrue([self checkURL:pullRequest withPath:@\"/tables/TodoNoVersion\" andQuery:expectedPullQuery],\n                  @\"Invalid pull request: %@\", pullRequest.absoluteString);\n}\n\n-(void) testVanillaPull_NoPullSettings\n{\n    NSURL *pullRequest = [self pullRequestWithSettings:nil shouldUsePullSettings:NO isIncremental:NO];\n    \n    NSString *topParam = [NSString stringWithFormat:@\"$top=%ld\", (long) MSPullSettings.defaultPageSize];\n    \n    NSArray *expectedPullQuery = @[topParam, @\"$skip=0\", @\"__includeDeleted=true\", @\"__systemProperties=__deleted\"];\n    \n    XCTAssertTrue([self checkURL:pullRequest withPath:@\"/tables/TodoNoVersion\" andQuery:expectedPullQuery],\n                  @\"Invalid pull request: %@\", pullRequest.absoluteString);\n}\n\n-(void) testIncrementalPull_ValidPullSettings\n{\n    // Guard against possible future changes to |MSPullSettings.defaultPageSize|.\n    // Set |pageSize| in such a way that it would never match |MSPullSettings.defaultPageSize|.\n    NSInteger pageSize = MSPullSettings.defaultPageSize + 1;\n\n    MSPullSettings *pullSettings = [[MSPullSettings alloc] initWithPageSize:pageSize];\n    \n    NSURL *pullRequest = [self pullRequestWithSettings:pullSettings shouldUsePullSettings:YES isIncremental:YES];\n    \n    NSString *topParam = [NSString stringWithFormat:@\"$top=%ld\", (long) pullSettings.pageSize];\n    \n    NSArray *expectedPullQuery = @[topParam, @\"$filter=(__updatedAt%20ge%20datetimeoffset'1970-01-01T00%3A00%3A00.000Z')\", @\"$skip=0\", @\"$orderby=__updatedAt%20asc\", @\"__includeDeleted=true\", @\"__systemProperties=__updatedAt%2C__deleted\"];\n    \n    XCTAssertTrue([self checkURL:pullRequest withPath:@\"/tables/TodoNoVersion\" andQuery:expectedPullQuery],\n                  @\"Invalid pull request: %@\", pullRequest.absoluteString);\n}\n\n-(void) testIncrementalPull_NilPullSettings\n{\n    NSURL *pullRequest = [self pullRequestWithSettings:nil shouldUsePullSettings:YES isIncremental:YES];\n    \n    NSString *topParam = [NSString stringWithFormat:@\"$top=%ld\", (long) MSPullSettings.defaultPageSize];\n    \n    NSArray *expectedPullQuery = @[topParam, @\"$filter=(__updatedAt%20ge%20datetimeoffset'1970-01-01T00%3A00%3A00.000Z')\", @\"$skip=0\", @\"$orderby=__updatedAt%20asc\", @\"__includeDeleted=true\", @\"__systemProperties=__updatedAt%2C__deleted\"];\n    \n    XCTAssertTrue([self checkURL:pullRequest withPath:@\"/tables/TodoNoVersion\" andQuery:expectedPullQuery],\n                  @\"Invalid pull request: %@\", pullRequest.absoluteString);\n}\n\n-(void) testIncrementalPull_NoPullSettings\n{\n    NSURL *pullRequest = [self pullRequestWithSettings:nil shouldUsePullSettings:NO isIncremental:YES];\n    \n    NSString *topParam = [NSString stringWithFormat:@\"$top=%ld\", (long) MSPullSettings.defaultPageSize];\n    \n    NSArray *expectedPullQuery = @[topParam, @\"$filter=(__updatedAt%20ge%20datetimeoffset'1970-01-01T00%3A00%3A00.000Z')\", @\"$skip=0\", @\"$orderby=__updatedAt%20asc\", @\"__includeDeleted=true\", @\"__systemProperties=__updatedAt%2C__deleted\"];\n    \n    XCTAssertTrue([self checkURL:pullRequest withPath:@\"/tables/TodoNoVersion\" andQuery:expectedPullQuery],\n                  @\"Invalid pull request: %@\", pullRequest.absoluteString);\n}\n\n-(NSURL *) pullRequestWithSettings:(MSPullSettings *)pullSettings shouldUsePullSettings:(BOOL)shouldUsePullSettings isIncremental:(BOOL)isIncremental\n{\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:nil];\n    __block NSURL *pullRequest;\n    \n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        pullRequest = request.URL;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    NSString *queryId = isIncremental ? @\"queryId\" : nil;\n    \n    if (shouldUsePullSettings) {\n        [[todoTable pullWithQuery:query queryId:queryId settings:pullSettings completion:nil] waitUntilFinished];\n    }\n    else {\n        [[todoTable pullWithQuery:query queryId:queryId completion:nil] waitUntilFinished];\n    }\n    \n    return pullRequest;\n}\n\n-(void) testPullWithFetchOffset\n{\n    // Pull should start with a $skip and the skip should be incremented by the number of records pulled\n    // we'll simulate having 100 records and skipping the first 12 with no fetchLimit\n    \n    // the ids don't really matter for this test\n    NSString* fiftyItems = [MSMultiRequestTestFilter testDataWithItemCount:50 startId:0];\n    NSString* thirtyEightItems = [MSMultiRequestTestFilter testDataWithItemCount:38 startId:0];\n    \n    MSMultiRequestTestFilter *testFilter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200, @200] data:@[fiftyItems, thirtyEightItems] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    // we'd expect 3 calls ($top=50, 50, 50) ($skip=12, 62, 100)\n    query.fetchOffset = 12;\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n    }];\n    \n    XCTAssertNotNil(pull);\n\n    [pull waitUntilFinished];\n    \n    XCTAssertEqual(3, testFilter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = testFilter.actualRequests[0];\n    NSURLRequest *secondRequest = testFilter.actualRequests[1];\n    NSURLRequest *thirdRequest = testFilter.actualRequests[2];\n    \n    NSArray *expectedFirstResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=12\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFirstResult],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n    \n    NSArray *expectedSecondResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=62\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedSecondResult],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n    \n    NSArray *expectedThirdResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=100\"];\n    XCTAssertTrue([self checkURL:thirdRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedThirdResult],\n                  @\"Invalid URL: %@\", thirdRequest.URL.absoluteString);\n}\n\n-(void) testPullWithFetchOffsetAndFetchLimit\n{\n    // Pull should start with a $skip and the skip should be incremented by the number of records pulled\n    // we'll simulate having 100 records and skipping the first 12 with no fetchLimit\n    \n    // the ids don't really matter for this test\n    NSString* fiftyItems = [MSMultiRequestTestFilter testDataWithItemCount:50 startId:0];\n    NSString* tenItems = [MSMultiRequestTestFilter testDataWithItemCount:10 startId:0];\n    \n    MSMultiRequestTestFilter *testFilter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200, @200, @200] data:@[fiftyItems, fiftyItems, tenItems] appendEmptyRequest:NO];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    // we'd expect 3 calls ($top=50, 50, 50) ($skip=12, 62, 100)\n    query.fetchOffset = 12;\n    query.fetchLimit = 110;\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    XCTAssertEqual(3, testFilter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = testFilter.actualRequests[0];\n    NSURLRequest *secondRequest = testFilter.actualRequests[1];\n    NSURLRequest *thirdRequest = testFilter.actualRequests[2];\n\n    NSArray *expectedFirstResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=12\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedFirstResult],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n    \n    NSArray *expectedSecondResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=50\", @\"$skip=62\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedSecondResult],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n    \n    NSArray *expectedThirdResult = @[@\"__includeDeleted=true\", @\"__systemProperties=__deleted\", @\"$top=10\", @\"$skip=112\"];\n    XCTAssertTrue([self checkURL:thirdRequest.URL withPath:@\"/tables/TodoNoVersion\" andQuery:expectedThirdResult],\n                  @\"Invalid URL: %@\", thirdRequest.URL.absoluteString);\n}\n\n-(void) testPushAddsProperFeaturesHeader\n{\n    NSString* stringData = @\"{\\\"id\\\": \\\"test1\\\", \\\"text\\\":\\\"test name\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:stringData];\n    __block NSURLRequest *actualRequest = nil;\n    \n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:@\"TodoNoVersion\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"id\": @\"test1\", @\"name\":@\"test name\" };\n    \n    // Insert the item\n    done = NO;\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    done = NO;\n    actualRequest = nil;\n    NSOperation *push = [client.syncContext pushWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        \n        NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n        XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n        NSString *expectedFeatures = @\"OL\";\n        XCTAssertTrue([featuresHeader isEqualToString:expectedFeatures], @\"Header value (%@) was not as expected (%@)\", featuresHeader, expectedFeatures);\n        \n        done = YES;\n    }];\n    XCTAssertNotNil(push);\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testIncrementalPullSuccess\n{\n    NSString* stringData1 = @\"[{\\\"id\\\": \\\"one\\\", \\\"text\\\":\\\"first item\\\",\\\"__version\\\":\\\"AAAAAAAAHzg=\\\",\\\"__deleted\\\":false,\\\"__updatedAt\\\":\\\"1999-12-03T15:44:29.0Z\\\"},{\\\"id\\\": \\\"two\\\", \\\"text\\\":\\\"second item\\\", \\\"__updatedAt\\\":\\\"1999-12-03T15:44:29.0Z\\\"}]\";\n    NSString* stringData2 = @\"[{\\\"id\\\": \\\"three\\\", \\\"text\\\":\\\"first item\\\", \\\"__updatedAt\\\":\\\"1999-12-04T16:44:29.0Z\\\"},{\\\"id\\\": \\\"four\\\", \\\"text\\\":\\\"second item\\\", \\\"__updatedAt\\\":\\\"1999-12-04T16:44:59.0Z\\\"}]\";\n    MSMultiRequestTestFilter *filter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200,@200,@200] data:@[stringData1,stringData2,@\"[]\"] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:@\"TodoItem\"];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    // TODO: look at if we want to reenable this\n    // Verifies that we allow __includeDeleted=YES\n    // query.parameters = @{@\"__includeDeleted\":@YES};\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:@\"test_1\" completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        XCTAssertEqual(offline.upsertCalls, 4);\n        XCTAssertEqual(offline.upsertedItems, 6);\n        // readWithQuery is only called once to get the initial deltaToken. otherwise, it's cached.\n        // the other six calls are for each of the upserts (they all return nothing).\n        // TODO -- see if i can do this without creating a new MSSyncTable internally.\n        XCTAssertEqual(offline.readWithQueryCalls, 6);\n        XCTAssertEqual(offline.readWithQueryItems, 0);\n        XCTAssertEqual(offline.readTableCalls, 0);\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:1000.1], @\"Test timed out.\");\n    done = NO;\n    XCTAssertEqual(3, filter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = (NSURLRequest *)filter.actualRequests[0];\n    NSURLRequest *secondRequest = (NSURLRequest *)filter.actualRequests[1];\n    NSURLRequest *thirdRequest = (NSURLRequest *)filter.actualRequests[2];\n\n    NSArray *expectedfirstRequestQuery = @[@\"__includeDeleted=true\",\n                                           @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                           @\"$filter=(__updatedAt%20ge%20datetimeoffset'1970-01-01T00%3A00%3A00.000Z')\",\n                                           @\"$orderby=__updatedAt%20asc\",\n                                           @\"$skip=0\",\n                                           @\"$top=50\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL\n                        withPath:@\"/tables/TodoItem\"\n                        andQuery:expectedfirstRequestQuery],\n                  @\"Invalue URL: %@\", firstRequest.URL.absoluteString);\n    \n    NSArray *expectedSecondRequestQuery = @[@\"__includeDeleted=true\",\n                                            @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                            @\"$filter=(__updatedAt%20ge%20datetimeoffset'1999-12-03T15%3A44%3A29.000Z')\",\n                                            @\"$orderby=__updatedAt%20asc\",\n                                            @\"$skip=0\",\n                                            @\"$top=50\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL\n                        withPath:@\"/tables/TodoItem\"\n                        andQuery:expectedSecondRequestQuery],\n                  @\"Invalue URL: %@\", secondRequest.URL.absoluteString);\n\n    \n    NSArray *expectedThirdRequestQuery = @[@\"__includeDeleted=true\",\n                                           @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                           @\"$filter=(__updatedAt%20ge%20datetimeoffset'1999-12-04T16%3A44%3A59.000Z')\",\n                                           @\"$orderby=__updatedAt%20asc\",\n                                           @\"$skip=0\",\n                                           @\"$top=50\"];\n    XCTAssertTrue([self checkURL:thirdRequest.URL\n                        withPath:@\"/tables/TodoItem\"\n                        andQuery:expectedThirdRequestQuery],\n                  @\"Invalue URL: %@\", thirdRequest.URL.absoluteString);\n    \n    \n    // now try again and make sure we start with the same deltaToken\n    [offline resetCounts];\n    pull = [todoTable pullWithQuery:query queryId:@\"test_1\" completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        XCTAssertEqual(offline.upsertCalls, 0);\n        XCTAssertEqual(offline.upsertedItems, 0);\n        // readWithQuery is only called once to get the initial deltaToken. otherwise, it's cached.\n        XCTAssertEqual(offline.readWithQueryCalls, 2);\n        XCTAssertEqual(offline.readWithQueryItems, 1);\n        XCTAssertEqual(offline.readTableCalls, 0);\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:10000.1], @\"Test timed out.\");\n    XCTAssertEqual(4, filter.actualRequests.count);\n    \n    NSURLRequest *fourthRequest = (NSURLRequest *)filter.actualRequests[3];\n\n    NSArray *expectedFourthRequestQuery = @[@\"__includeDeleted=true\",\n                                            @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                            @\"$filter=(__updatedAt%20ge%20datetimeoffset'1999-12-04T16%3A44%3A59.000Z')\",\n                                            @\"$orderby=__updatedAt%20asc\",\n                                            @\"$skip=0\",\n                                            @\"$top=50\"];\n    XCTAssertTrue([self checkURL:fourthRequest.URL\n                        withPath:@\"/tables/TodoItem\"\n                        andQuery:expectedFourthRequestQuery],\n                  @\"Invalue URL: %@\", fourthRequest.URL.absoluteString);\n}\n\n-(void) testIncrementalPullWithOrderByFails\n{\n    MSMultiRequestTestFilter *filter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[] data:@[] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:@\"TodoItem\"];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    NSSortDescriptor *orderByText = [NSSortDescriptor sortDescriptorWithKey:MSSystemColumnId ascending:NO];\n    query.orderBy = @[orderByText];\n    \n    // without queryId, it should work\n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        XCTAssertEqual(offline.upsertCalls, 0);\n        XCTAssertEqual(offline.upsertedItems, 0);\n        XCTAssertEqual(offline.readTableCalls, 0);\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    done = NO;\n    XCTAssertEqual(1, filter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = (NSURLRequest *)filter.actualRequests[0];\n    \n    NSArray *expectedFirstRequestQuery = @[@\"__includeDeleted=true\",\n                                           @\"__systemProperties=__deleted%2C__version\",\n                                           @\"$orderby=id%20desc\",\n                                           @\"$skip=0\",\n                                           @\"$top=50\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL\n                        withPath:@\"/tables/TodoItem\"\n                        andQuery:expectedFirstRequestQuery],\n                  @\"Invalue URL: %@\", firstRequest.URL.absoluteString);\n    \n    [offline resetCounts];\n    // with queryId, this should produce an error\n    pull = [todoTable pullWithQuery:query queryId:@\"test_1\" completion:^(NSError *error) {\n        XCTAssertNotNil(error);\n        XCTAssertEqual(MSInvalidParameter, error.code);\n        XCTAssertEqual(offline.upsertCalls, 0);\n        XCTAssertEqual(offline.upsertedItems, 0);\n        XCTAssertEqual(offline.readWithQueryCalls, 0);\n        XCTAssertEqual(offline.readTableCalls, 0);\n        done = YES;\n    }];\n    \n    XCTAssertNil(pull);\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    XCTAssertEqual(1, filter.actualRequests.count);\n}\n\n-(void) testPullWithIncludeDeletedReturnsErrorIfNotTrue\n{\n    MSSyncTable *todoTable = [client syncTableWithName:@\"TodoItem\"];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    query.parameters = @{@\"__includeDeleted\":@NO};\n    \n    void (^completion)(NSError*) = ^(NSError *error)\n    {\n        XCTAssertNotNil(error);\n        XCTAssertEqual(error.code, MSInvalidParameter);\n        XCTAssertEqual(offline.upsertCalls, 0, @\"Unexpected number of upsert calls\");\n        XCTAssertEqual(offline.upsertedItems, 0, @\"Unexpected number of upsert calls\");\n        done = YES;\n    };\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:nil completion:completion];\n    XCTAssertNil(pull);\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    done = NO;\n    \n    query.parameters = @{@\"__includeDeleted\":@YES, @\"__INCLUDEDELETED\":@NO};\n    pull = [todoTable pullWithQuery:query queryId:nil completion:completion];\n    XCTAssertNil(pull);\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    done = NO;\n    \n    query.parameters = @{@\"__includeDeleted\":@\"NONSENSE\"};\n    pull = [todoTable pullWithQuery:query queryId:nil completion:completion];\n    XCTAssertNil(pull);\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testIncrementalPullWithInsert\n{\n    // insert in the middle of a Pull should ignore the Insert and continue\n    NSString *firstPullData = @\"[{\\\"id\\\": \\\"one\\\", \\\"text\\\":\\\"first item\\\", \\\"__updatedAt\\\":\\\"1999-12-03T15:44:29.0Z\\\"},{\\\"id\\\": \\\"two\\\", \\\"text\\\":\\\"second item\\\", \\\"__updatedAt\\\":\\\"1999-12-03T15:44:28.0Z\\\"}]\";\n    NSString *secondPullData = @\"[{\\\"id\\\": \\\"three\\\", \\\"text\\\":\\\"third item\\\", \\\"__updatedAt\\\":\\\"1999-12-03T15:44:29.0Z\\\"},{\\\"id\\\": \\\"four\\\", \\\"text\\\":\\\"fourth item\\\", \\\"__updatedAt\\\":\\\"1999-12-07T15:44:28.0Z\\\"}]\";\n    MSMultiRequestTestFilter *filter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200,@200] data:@[firstPullData,secondPullData] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:@\"TodoItem\"];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    // hijack the first filter request to insert\n    __block NSURLRequest *firstPullRequest = nil;\n    ((MSTestFilter *)filter.testFilters[0]).onInspectRequest = ^(NSURLRequest *request) {\n        NSDictionary *item = @{ @\"id\": @\"five\", @\"name\":@\"fifth item\" };\n        MSTestWaiter *insertWaiter = [MSTestWaiter new];\n        \n        [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNil(error, @\"error should have been nil.\");\n            insertWaiter.done = YES;\n        }];\n        \n        XCTAssertTrue([insertWaiter waitForTest:0.1], @\"Test timed out.\");\n        \n        firstPullRequest = request;\n        return request;\n    };\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:@\"test-1\" completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        XCTAssertEqual(offline.upsertCalls, 6);\n        XCTAssertEqual(offline.upsertedItems, 8);\n        NSLog(@\"done pull\");\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:30.0], @\"Test timed out.\");\n    \n    // since we hijacked the first request, the 0th one is actually the second\n    NSURLRequest *secondPullRequest = (NSURLRequest *)filter.actualRequests[0];\n    NSURLRequest *thirdPullRequest = (NSURLRequest *)filter.actualRequests[1];\n    \n    NSArray *expectedFirstPullRequestQuery = @[@\"__includeDeleted=true\",\n                                               @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                               @\"$filter=(__updatedAt%20ge%20datetimeoffset'1970-01-01T00%3A00%3A00.000Z')\",\n                                               @\"$orderby=__updatedAt%20asc\",\n                                               @\"$top=50\",\n                                               @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstPullRequest.URL\n                        withPath:@\"/tables/TodoItem\"\n                        andQuery:expectedFirstPullRequestQuery],\n                  @\"Invalue URL: %@\", firstPullRequest.URL.absoluteString);\n\n    NSArray *expectedSecondPullRequestQuery = @[@\"__includeDeleted=true\",\n                                                @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                                @\"$filter=(__updatedAt%20ge%20datetimeoffset'1999-12-03T15%3A44%3A29.000Z')\",\n                                                @\"$orderby=__updatedAt%20asc\",\n                                                @\"$top=50\",\n                                                @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:secondPullRequest.URL\n                        withPath:@\"/tables/TodoItem\"\n                        andQuery:expectedSecondPullRequestQuery],\n                  @\"Invalue URL: %@\", secondPullRequest.URL.absoluteString);\n    \n\n    NSArray *expectedThirdPullRequestQuery = @[@\"__includeDeleted=true\",\n                                               @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                               @\"$filter=(__updatedAt%20ge%20datetimeoffset'1999-12-07T15%3A44%3A28.000Z')\",\n                                               @\"$orderby=__updatedAt%20asc\",\n                                               @\"$top=50\",\n                                               @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:thirdPullRequest.URL\n                        withPath:@\"/tables/TodoItem\"\n                        andQuery:expectedThirdPullRequestQuery],\n                  @\"Invalue URL: %@\", thirdPullRequest.URL.absoluteString);\n    \n    XCTAssertEqual(client.syncContext.pendingOperationsCount, 1);\n}\n\n// Tests pull when there are pending changes with different cased Id\n-(void)testPullKeepsPendingChangesWithDifferentCasedId\n{\n    // Response of a pull operation\n    NSString *firstPullData = @\"[{\\\"id\\\": \\\"one\\\", \\\"text\\\":\\\"first item\\\", \\\"__updatedAt\\\":\\\"1999-12-03T15:44:29.0Z\\\"},{\\\"id\\\": \\\"two\\\", \\\"text\\\":\\\"second item\\\", \\\"__updatedAt\\\":\\\"1999-12-03T15:44:28.0Z\\\"}]\";\n\n    // Setup filter to get the pull response\n    MSMultiRequestTestFilter *filter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200] data:@[firstPullData] appendEmptyRequest:YES];\n\n    // Initialization\n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:@\"TodoItem\"];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n\n    // Perform an insert operation in the middle of a pull operation\n    ((MSTestFilter *)filter.testFilters[0]).onInspectRequest = ^(NSURLRequest *request) {\n\n        // Insert an item with Id differing from that of the pulled item only in case\n        done = NO;\n        NSDictionary *item = @{ @\"id\" : @\"ONE\", @\"name\" : @\"fifth item\" };\n    \n        [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNil(error, @\"error should have been nil.\");\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out\");\n    \n        return request;\n    };\n\n    XCTestExpectation *pullExpectation = [self expectationWithDescription:@\"table pull\"];\n    [todoTable pullWithQuery:query queryId:@\"test-1\" completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        XCTAssertEqual(offline.upsertCalls, 4);\n        XCTAssertEqual(offline.upsertedItems, 4);\n        [pullExpectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:30.0 handler:nil];\n    \n    // Count the number of items in the table\n    XCTestExpectation *readExpectation = [self expectationWithDescription:@\"table read\"];\n    [client.syncContext readWithQuery:query completion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertEqual(result.items.count, 2, @\"Expected 2 items, one with Id ONE and one with Id two\");\n        [readExpectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:10 handler:nil];\n}\n\n-(void) testIncrementalPullWithUpdateSkipsUpdatedItem\n{\n    NSString *insertResponse = @\"{\\\"id\\\": \\\"one\\\", \\\"text\\\":\\\"first item\\\", \\\"__updatedAt\\\":\\\"1999-12-03T15:44:29.0Z\\\"}\";\n    NSString *firstPullData = @\"[{\\\"id\\\": \\\"one\\\", \\\"text\\\":\\\"first item\\\", \\\"__updatedAt\\\":\\\"1999-12-03T15:44:29.0Z\\\"},{\\\"id\\\": \\\"two\\\", \\\"text\\\":\\\"second item\\\", \\\"__updatedAt\\\":\\\"1999-12-03T15:44:28.0Z\\\"}]\";\n    NSString *secondPullData = @\"[{\\\"id\\\": \\\"three\\\", \\\"text\\\":\\\"third item\\\", \\\"__updatedAt\\\":\\\"1999-12-03T15:44:29.0Z\\\"},{\\\"id\\\": \\\"four\\\", \\\"text\\\":\\\"fourth item\\\", \\\"__updatedAt\\\":\\\"1999-12-07T15:44:28.0Z\\\"}]\";\n    MSMultiRequestTestFilter *filter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@201,@200,@200] data:@[insertResponse,firstPullData,secondPullData] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:@\"TodoItem\"];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    // insert an item that we'll update later\n    NSDictionary *itemToInsert = @{ @\"id\": @\"one\", @\"name\":@\"first item\" };\n    [todoTable insert:itemToInsert completion:^(NSDictionary *item, NSError *error) {\n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    done = NO;\n    \n    // hijack the second filter request (the first pull) to update an item\n    __block NSURLRequest *firstPullRequest = nil;\n    ((MSTestFilter *)filter.testFilters[1]).onInspectRequest = ^(NSURLRequest *request) {\n        NSDictionary *item = @{ @\"id\": @\"one\", @\"name\":@\"UPDATED first item\" };\n        MSTestWaiter *updateWaiter = [MSTestWaiter new];\n        \n        [todoTable update:item completion:^(NSError *error) {\n            XCTAssertNil(error, @\"error should have been nil.\");\n            updateWaiter.done = YES;\n        }];\n        \n        XCTAssertTrue([updateWaiter waitForTest:0.1], @\"Test timed out.\");\n        \n        firstPullRequest = request;\n        return request;\n    };\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:@\"test-1\" completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        XCTAssertEqual(offline.upsertCalls, 9);\n        XCTAssertEqual(offline.upsertedItems, 10);\n        XCTAssertEqual(offline.deleteCalls, 5);\n        // the pending op gets deleted on push\n        XCTAssertEqual(offline.deletedItems, 1);\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:30.0], @\"Test timed out.\");\n    \n    // since we hijacked the second request and the first request is an insert, the item at [1] is actually the second pull\n    NSURLRequest *insertRequest = (NSURLRequest *)filter.actualRequests[0];\n    NSURLRequest *secondPullRequest = (NSURLRequest *)filter.actualRequests[1];\n    NSURLRequest *thirdPullRequest = (NSURLRequest *)filter.actualRequests[2];\n    \n    XCTAssertEqualObjects(insertRequest.URL.absoluteString, @\"https://someUrl/tables/TodoItem?__systemProperties=__version\");\n    NSArray *expectedfirstPullRequest = @[@\"__includeDeleted=true\",\n                                          @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                          @\"$filter=(__updatedAt%20ge%20datetimeoffset'1970-01-01T00%3A00%3A00.000Z')\",\n                                          @\"$orderby=__updatedAt%20asc\",\n                                          @\"$top=50\",\n                                          @\"$skip=0\"];\n\n    XCTAssertTrue([self checkURL:firstPullRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedfirstPullRequest],\n                  @\"Invalid URL: %@\", firstPullRequest.URL.absoluteString);\n\n    \n    NSArray *expectedSecondPullRequest = @[@\"__includeDeleted=true\",\n                                           @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                           @\"$filter=(__updatedAt%20ge%20datetimeoffset'1999-12-03T15%3A44%3A29.000Z')\",\n                                           @\"$orderby=__updatedAt%20asc\",\n                                           @\"$top=50\",\n                                           @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:secondPullRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedSecondPullRequest],\n                  @\"Invalid URL: %@\", secondPullRequest.URL.absoluteString);\n\n    NSArray *expectedThirdPullRequest = @[@\"__includeDeleted=true\",\n                                          @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                          @\"$filter=(__updatedAt%20ge%20datetimeoffset'1999-12-07T15%3A44%3A28.000Z')\",\n                                          @\"$orderby=__updatedAt%20asc\",\n                                          @\"$top=50\",\n                                          @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:thirdPullRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedThirdPullRequest],\n                  @\"Invalid URL: %@\", thirdPullRequest.URL.absoluteString);\n    \n    \n    XCTAssertEqual(client.syncContext.pendingOperationsCount, 1);\n}\n\n-(void) testIncrementalPullRevertsToSkipAndBack\n{\n    // the first response has different _updatedAts so the deltaToken is adjusted with no skip\n    // the second response has the same _updatedAts so it should fall back to skip\n    // the third response also has the same __updatedAts so it should use skip\n    // the fourth response has different __updatedAts so it should move back to use deltaToken with no skip\n    // the fifth response has used >= __updateAt so it returns the seventh item alone, which we've already seen\n    NSString* stringData1 = @\"[{\\\"id\\\":\\\"one\\\",\\\"text\\\":\\\"first item\\\",\\\"__version\\\":\\\"1\\\",\\\"__deleted\\\":false,\\\"__updatedAt\\\":\\\"1999-12-03T15:44:29.0Z\\\"},{\\\"id\\\":\\\"two\\\",\\\"__version\\\":\\\"1\\\",\\\"__deleted\\\":false,\\\"text\\\":\\\"second item\\\", \\\"__updatedAt\\\":\\\"2000-01-01T00:00:00.0Z\\\"}]\";\n    NSString* stringData2 = @\"[{\\\"id\\\": \\\"two\\\",\\\"text\\\":\\\"second item\\\",\\\"__version\\\":\\\"1\\\",\\\"__deleted\\\":false,\\\"__updatedAt\\\":\\\"2000-01-01T00:00:00.0Z\\\"},{\\\"id\\\": \\\"three\\\",\\\"text\\\":\\\"third item\\\",\\\"__version\\\":\\\"1\\\",\\\"__deleted\\\":false,\\\"__updatedAt\\\":\\\"2000-01-01T00:00:00.0Z\\\"}]\";\n    NSString* stringData3 = @\"[{\\\"id\\\": \\\"four\\\",\\\"text\\\":\\\"fourth item\\\",\\\"__version\\\":\\\"1\\\",\\\"__deleted\\\":false,\\\"__updatedAt\\\":\\\"2000-01-01T00:00:00.0Z\\\"},{\\\"id\\\": \\\"five\\\",\\\"text\\\":\\\"fifth item\\\",\\\"__version\\\":\\\"1\\\",\\\"__deleted\\\":false,\\\"__updatedAt\\\":\\\"2000-01-01T00:00:00.0Z\\\"}]\";\n    NSString* stringData4 = @\"[{\\\"id\\\": \\\"six\\\",\\\"text\\\":\\\"sixth item\\\",\\\"__version\\\":\\\"1\\\",\\\"__deleted\\\":false,\\\"__updatedAt\\\":\\\"2000-01-01T00:00:00.0Z\\\"},{\\\"id\\\": \\\"seven\\\",\\\"text\\\":\\\"seventh item\\\",\\\"__version\\\":\\\"1\\\",\\\"__deleted\\\":false,\\\"__updatedAt\\\":\\\"2000-01-02T00:00:00.0Z\\\"}]\";\n    NSString* stringData5 = @\"[{\\\"id\\\": \\\"seven\\\",\\\"text\\\":\\\"seventh item\\\",\\\"__version\\\":\\\"1\\\",\\\"__deleted\\\":false,\\\"__updatedAt\\\":\\\"2000-01-02T00:00:00.0Z\\\"}]\";\n    MSMultiRequestTestFilter *filter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200,@200,@200,@200,@200] data:@[stringData1,stringData2,stringData3,stringData4,stringData5] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:@\"TodoItem\"];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:@\"test_1\" completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        XCTAssertEqual(offline.upsertCalls, 7);\n        XCTAssertEqual(offline.upsertedItems, 11);\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    [pull waitUntilFinished];\n    \n    NSURLRequest *firstRequest = (NSURLRequest *)filter.actualRequests[0];\n    NSURLRequest *secondRequest = (NSURLRequest *)filter.actualRequests[1];\n    NSURLRequest *thirdRequest = (NSURLRequest *)filter.actualRequests[2];\n    NSURLRequest *fourthRequest = (NSURLRequest *)filter.actualRequests[3];\n    NSURLRequest *fifthRequest = (NSURLRequest *)filter.actualRequests[4];\n    NSURLRequest *sixthRequest = (NSURLRequest *)filter.actualRequests[5];\n    \n    XCTAssertEqual(6, filter.actualRequests.count);\n\n    NSArray *expectedFirstRequest = @[@\"__includeDeleted=true\",\n                                      @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                      @\"$filter=(__updatedAt%20ge%20datetimeoffset'1970-01-01T00%3A00%3A00.000Z')\",\n                                      @\"$orderby=__updatedAt%20asc\",\n                                      @\"$top=50\",\n                                      @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedFirstRequest],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n    \n    NSArray *expectedSecondRequest = @[@\"__includeDeleted=true\",\n                                       @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                       @\"$filter=(__updatedAt%20ge%20datetimeoffset'2000-01-01T00%3A00%3A00.000Z')\",\n                                       @\"$orderby=__updatedAt%20asc\",\n                                       @\"$top=50\",\n                                       @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedSecondRequest],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n    \n    // TODO: why does the ordering of $orderby and __includeDeleted change here?\n    NSArray *expectedThirdRequest = @[@\"__includeDeleted=true\",\n                                      @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                      @\"$filter=(__updatedAt%20ge%20datetimeoffset'2000-01-01T00%3A00%3A00.000Z')\",\n                                      @\"$orderby=__updatedAt%20asc\",\n                                      @\"$skip=2\",\n                                      @\"$top=50\"];\n    XCTAssertTrue([self checkURL:thirdRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedThirdRequest],\n                  @\"Invalid URL: %@\", thirdRequest.URL.absoluteString);\n\n    // TODO: why does the ordering of $orderby and __includeDeleted change here?\n    NSArray *expectedFourthRequest = @[@\"__includeDeleted=true\",\n                                       @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                       @\"$filter=(__updatedAt%20ge%20datetimeoffset'2000-01-01T00%3A00%3A00.000Z')\",\n                                       @\"$orderby=__updatedAt%20asc\",\n                                       @\"$skip=4\",\n                                       @\"$top=50\"];\n    XCTAssertTrue([self checkURL:fourthRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedFourthRequest],\n                  @\"Invalid URL: %@\", fourthRequest.URL.absoluteString);\n    \n    NSArray *expectedFifthRequest = @[@\"__includeDeleted=true\",\n                                      @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                      @\"$filter=(__updatedAt%20ge%20datetimeoffset'2000-01-02T00%3A00%3A00.000Z')\",\n                                      @\"$orderby=__updatedAt%20asc\",\n                                      @\"$top=50\",\n                                      @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:fifthRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedFifthRequest],\n                  @\"Invalid URL: %@\", fifthRequest.URL.absoluteString);\n\n    NSArray *expectedSixthRequest = @[@\"__includeDeleted=true\",\n                                      @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                      @\"$filter=(__updatedAt%20ge%20datetimeoffset'2000-01-02T00%3A00%3A00.000Z')\",\n                                      @\"$orderby=__updatedAt%20asc\",\n                                      @\"$skip=1\",\n                                      @\"$top=50\"];\n    \n    XCTAssertTrue([self checkURL:sixthRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedSixthRequest],\n                  @\"Invalid URL: %@\", sixthRequest.URL.absoluteString);\n}\n\n-(void) testIncrementalPullAppendsFilter\n{\n    NSString* stringData1 = @\"[{\\\"id\\\":\\\"one\\\",\\\"text\\\":\\\"MATCH\\\",\\\"__version\\\":\\\"1\\\",\\\"__deleted\\\":false,\\\"__updatedAt\\\":\\\"1999-12-03T15:44:29.0Z\\\"},{\\\"id\\\":\\\"two\\\",\\\"__version\\\":\\\"1\\\",\\\"__deleted\\\":false,\\\"text\\\":\\\"MATCH\\\", \\\"__updatedAt\\\":\\\"2000-01-01T00:00:00.0Z\\\"}]\";\n    NSString* stringData2 = @\"[{\\\"id\\\":\\\"two\\\",\\\"__version\\\":\\\"1\\\",\\\"__deleted\\\":false,\\\"text\\\":\\\"MATCH\\\", \\\"__updatedAt\\\":\\\"2000-01-01T00:00:00.0Z\\\"}]\";\n    MSMultiRequestTestFilter *filter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[@200,@200] data:@[stringData1,stringData2] appendEmptyRequest:YES];\n    \n    MSClient *filteredClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:@\"TodoItem\"];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    query.predicate = [NSPredicate predicateWithFormat:@\"text == 'MATCH'\"];\n    \n    NSOperation *pull = [todoTable pullWithQuery:query queryId:@\"test_1\" completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error found: %@\", error.description);\n        XCTAssertEqual(offline.upsertCalls, 3);\n        XCTAssertEqual(offline.upsertedItems, 4);\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    [pull waitUntilFinished];\n    XCTAssertEqual(3, filter.actualRequests.count);\n    \n    NSURLRequest *firstRequest = (NSURLRequest *)filter.actualRequests[0];\n    NSURLRequest *secondRequest = (NSURLRequest *)filter.actualRequests[1];\n    NSURLRequest *thirdRequest = (NSURLRequest *)filter.actualRequests[2];\n    \n    NSArray *expectedFirstRequest = @[@\"__includeDeleted=true\",\n                                      @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                      @\"$filter=((text%20eq%20'MATCH')%20and%20(__updatedAt%20ge%20datetimeoffset'1970-01-01T00%3A00%3A00.000Z'))\",\n                                      @\"$orderby=__updatedAt%20asc\",\n                                      @\"$top=50\",\n                                      @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:firstRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedFirstRequest],\n                  @\"Invalid URL: %@\", firstRequest.URL.absoluteString);\n\n    NSArray *expectedSecondRequest = @[@\"__includeDeleted=true\",\n                                       @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                       @\"$filter=((text%20eq%20'MATCH')%20and%20(__updatedAt%20ge%20datetimeoffset'2000-01-01T00%3A00%3A00.000Z'))\",\n                                       @\"$orderby=__updatedAt%20asc\",\n                                       @\"$top=50\",\n                                       @\"$skip=0\"];\n    XCTAssertTrue([self checkURL:secondRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedSecondRequest],\n                  @\"Invalid URL: %@\", secondRequest.URL.absoluteString);\n    \n\n    NSArray *expectedThirdRequest = @[@\"__includeDeleted=true\",\n                                      @\"__systemProperties=__updatedAt%2C__deleted%2C__version\",\n                                      @\"$filter=((text%20eq%20'MATCH')%20and%20(__updatedAt%20ge%20datetimeoffset'2000-01-01T00%3A00%3A00.000Z'))\",\n                                      @\"$orderby=__updatedAt%20asc\",\n                                      @\"$skip=1\",\n                                      @\"$top=50\"];\n    XCTAssertTrue([self checkURL:thirdRequest.URL withPath:@\"/tables/TodoItem\" andQuery:expectedThirdRequest],\n                  @\"Invalid URL: %@\", thirdRequest.URL.absoluteString);\n\n}\n\n-(void) testDeltaTokenFailureAbortsPullOperation\n{\n    // passing a response, but this should never get called.\n    MSMultiRequestTestFilter *filter = [MSMultiRequestTestFilter testFilterWithStatusCodes:@[] data:@[] appendEmptyRequest:YES];\n    \n    MSClient *testClient = [client clientWithFilter:filter];\n    MSSyncTable *todoTable = [testClient syncTableWithName:@\"DoesNotMatter\"];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    offline.errorOnReadWithQueryOrError = true;\n    \n    // before the bug was fixed, an error would call the completion but continue to call the pull.\n    // this fails with the bug but passes now that it's been fixed.\n    __block BOOL alreadyCalled = NO;\n    NSOperation *pull = [todoTable pullWithQuery:query queryId:@\"something\" completion:^(NSError *error) {\n        XCTAssertNotNil(error);\n        XCTAssertFalse(alreadyCalled);\n        alreadyCalled = YES;\n        done = YES;\n    }];\n    \n    XCTAssertNotNil(pull);\n    \n    XCTAssertTrue([self waitForTest:0.1]);\n    done = NO;\n    XCTAssertFalse([self waitForTest:0.1]);\n}\n\n-(void) testIncrementalPullWithFetchLimitOrFetchOffsetErrors\n{\n    MSSyncTable *todoTable = [client syncTableWithName:@\"TodoItem\"];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    void (^completion)(NSError*) = ^(NSError *error)\n    {\n        XCTAssertNotNil(error);\n        XCTAssertEqual(error.code, MSInvalidParameter);\n        XCTAssertEqual(offline.upsertCalls, 0, @\"Unexpected number of upsert calls\");\n        XCTAssertEqual(offline.upsertedItems, 0, @\"Unexpected number of upsert calls\");\n        done = YES;\n    };\n    \n    // verify error if fetchOffset is set\n    query.fetchOffset = 10;\n    NSOperation *pull = [todoTable pullWithQuery:query queryId:@\"todo\" completion:completion];\n    XCTAssertNil(pull);\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    done = NO;\n    \n    // verify error if both fetchLimit and fetchOffset are set\n    query.fetchLimit = 10;\n    pull = [todoTable pullWithQuery:query queryId:@\"todo\" completion:completion];\n    XCTAssertNil(pull);\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    done = NO;\n    \n    // now reset fetchOffset back to -1 and verify error if only fetchLimit is set\n    query.fetchOffset = -1;\n    pull = [todoTable pullWithQuery:query queryId:@\"todo\" completion:completion];\n    XCTAssertNil(pull);\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n\n#pragma mark Purge Tests\n\n\n-(void) testPurgeWithEmptyQueueSuccess\n{\n    MSSyncTable *todoTable = [client syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    query.predicate = [NSPredicate predicateWithFormat:@\"text == 'DELETE'\"];\n    \n    NSError *storageError;\n    [offline upsertItems:@[@{ @\"id\": @\"A\", @\"text\":@\"DELETE\"}, @{@\"id\":@\"B\",@\"text\":@\"KEEP\"},@{ @\"id\":@\"C\", @\"text\":@\"DELETE\"}]\n                   table:TodoTableNoVersion\n                 orError:&storageError];\n    XCTAssertNil(storageError);\n    \n    NSOperation *purge = [todoTable purgeWithQuery:query completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Unexpected error: %@\", error.description);\n        \n        XCTAssertEqual(offline.deleteCalls, 1);\n        XCTAssertEqual(offline.deletedItems, 2);\n        \n        NSError *storageError;\n        MSSyncContextReadResult *result = [offline readWithQuery:query orError:&storageError];\n        XCTAssertNil(storageError);\n        XCTAssertTrue(result.items.count == 0, @\"Items should have been deleted\");\n        \n        NSDictionary *item = [offline readTable:TodoTableNoVersion withItemId:@\"B\" orError:&storageError];\n        XCTAssertNil(storageError);\n        XCTAssertNotNil(item, @\"Item B should not have been deleted\");\n        \n        done = YES;\n    }];\n    \n    XCTAssertNotNil(purge);\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testPurgePendingOpsOnDifferentTableSuccess\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n    testFilter.errorToUse = [NSError errorWithDomain:MSErrorDomain code:-1 userInfo:nil];\n    \n    NSError *storageError;\n    [offline upsertItems:@[@{ @\"id\": @\"A\"}]\n                   table:TodoTableNoVersion\n                 orError:&storageError];\n    XCTAssertNil(storageError);\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *testTable = [filteredClient syncTableWithName:@\"TodoItem\"];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    \n    [testTable insert:@{ @\"name\": @\"test one\"} completion:^(NSDictionary *item, NSError *error) {\n        NSOperation *purge = [todoTable purgeWithQuery:nil completion:^(NSError *error) {\n            XCTAssertNil(error, @\"Unexpected error: %@\", error.description);\n            \n            XCTAssertEqual(offline.deleteCalls, 1);\n            XCTAssertEqual(offline.deletedItems, 1);\n            \n            // Verify item is missing as well\n            NSError *storageError;\n            NSDictionary *item = [offline readTable:TodoTableNoVersion withItemId:@\"A\" orError:&storageError];\n            XCTAssertNil(storageError);\n            XCTAssertNil(item, @\"Unexpected item found: %@\", item.description);\n            \n            done = YES;\n        }];\n        XCTAssertNotNil(purge);\n    }];\n    \n    XCTAssertTrue([self waitForTest:30.0], @\"Test timed out.\");\n}\n\n-(void) testForcePurgeWithLockedOperation\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n    testFilter.errorToUse = [NSError errorWithDomain:MSErrorDomain code:-1 userInfo:nil];\n    \n    __block NSError *storageError;\n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    [todoTable insert:@{ @\"id\": @\"B\"} completion:^(NSDictionary *item, NSError *error) {\n        MSSyncContextReadResult *result = [offline readWithQuery:query orError:&storageError];\n        XCTAssertNil(storageError);\n        XCTAssertEqual(result.items.count, 1);\n        done = YES;\n    }];\n    \n    // at this point we have 1 deltaToken, 2 todo items, 1 operation, and 1 operation error\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    done = NO;\n   \n    // get the operation and lock it\n    NSArray *operations = [filteredClient.syncContext.operationQueue getOperationsForTable:todoTable.name item:nil];\n    [filteredClient.syncContext.operationQueue lockOperation:operations[0]];\n    \n    [offline resetCounts];\n    [todoTable forcePurgeWithCompletion:^(NSError *error) {\n        XCTAssertNotNil(error);\n        XCTAssertEqual(error.code, MSPurgeAbortedPendingChanges);\n        XCTAssertEqual(offline.deleteCalls, 0);\n        XCTAssertEqual(offline.deletedItems, 0);\n        XCTAssertEqual(filteredClient.syncContext.pendingOperationsCount, 1);\n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n-(void) testForcePurgeSuccess\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n    testFilter.errorToUse = [NSError errorWithDomain:MSErrorDomain code:-1 userInfo:nil];\n    \n    __block NSError *storageError;\n    MSTableConfigValue *deltaToken = [MSTableConfigValue new];\n    deltaToken.table = TodoTableNoVersion;\n    deltaToken.key = @\"test_id\";\n    deltaToken.keyType = MSConfigKeyDeltaToken;\n    deltaToken.value = @\"SOME RANDOM VALUE\";\n    NSString *tokenId = deltaToken.id;\n    XCTAssertNil(storageError);\n    __block int operationId = 1;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    [offline upsertItems:@[deltaToken.serialize] table:offline.configTableName orError:&storageError];\n    [offline upsertItems:@[@{ @\"id\": @\"A\"}] table:TodoTableNoVersion orError:&storageError];\n    [todoTable insert:@{ @\"id\": @\"B\"} completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(storageError);\n        [todoTable insert:@{ @\"id\": @\"C\"} completion:^(NSDictionary *item, NSError *error) {\n            MSSyncContextReadResult *result = [offline readWithQuery:query orError:&storageError];\n            XCTAssertNil(storageError);\n            XCTAssertEqual(result.items.count, 3);\n            [offline upsertItems:@[@{ @\"id\": @\"A\", @\"operationId\":[NSNumber numberWithInt:operationId++]}] table:offline.errorTableName orError:&storageError];\n            done = YES;\n        }];\n    }];\n    \n    // at this point we have 1 deltaToken, 3 todo items, 2 operations, and 1 operation error\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    done = NO;\n    [offline resetCounts];\n    [todoTable forcePurgeWithCompletion:^(NSError *error) {\n        NSError *storageError;\n        XCTAssertNil(error, @\"Unexpected error: %@\", error.description);\n        \n        XCTAssertEqual(offline.deleteCalls, 6);\n        XCTAssertEqual(offline.deletedItems, 7);\n        XCTAssertEqual(filteredClient.syncContext.pendingOperationsCount, 0);\n        \n        // Verify item is missing as well\n        MSSyncContextReadResult *emptyResult = [offline readWithQuery:query orError:&storageError];\n        XCTAssertNil(storageError);\n        XCTAssertEqual(emptyResult.items.count, 0);\n        \n        NSDictionary *token = [offline readTable:offline.configTableName withItemId:tokenId orError:&storageError];\n        XCTAssertNil(token);\n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testPurgeWithPendingOperationsFails\n{\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:409];\n    testFilter.errorToUse = [NSError errorWithDomain:MSErrorDomain code:-1 userInfo:nil];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSSyncTable *todoTable = [filteredClient syncTableWithName:TodoTableNoVersion];\n    MSQuery *query = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    [todoTable insert:@{ @\"name\": @\"test one\"} completion:^(NSDictionary *item, NSError *error) {\n        NSOperation *purge = [todoTable purgeWithQuery:query completion:^(NSError *error) {\n            XCTAssertNotNil(error);\n            XCTAssertEqual(error.code, MSPurgeAbortedPendingChanges);\n            XCTAssertEqual(offline.deleteCalls, 0);\n            XCTAssertEqual(client.syncContext.pendingOperationsCount, 1);\n            \n            done = YES;\n        }];\n        XCTAssertNotNil(purge);\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n// Tests operation queue querying is case insensitive for Id column\n-(void)testOperationQueueQueryingForIdCaseInsensitivity\n{\n    MSSyncTable *todoTable = [[MSSyncTable alloc] initWithName:@\"TodoItem\" client:client];\n    \n    NSDictionary *item = @{ @\"id\" : @\"itemid\", @\"name\" : @\"some name\" };\n    \n    // Perform an insert operation\n    XCTestExpectation *insertExpectation = [self expectationWithDescription:@\"table insert\"];\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"error should have been nil.\");\n        [insertExpectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:0.1 handler:nil];\n    \n    // Query the operation queue for the inserted item using a different case for the Id\n    NSArray *items = [client.syncContext.operationQueue getOperationsForTable:todoTable.name item:@\"ITEMID\"];\n    \n    XCTAssertEqual(items.count, 1, @\"Expected to find 1 item in the operation queue\");\n}\n\n-(void)testOperationErrorRelationship\n{\n    NSString *opTableName = @\"MS_TableOperations\";\n    NSString *opErrorTableName = @\"MS_TableOperationErrors\";\n    NSString *todoTableName = @\"TodoItem\";\n    NSError *error = [NSError errorWithDomain:@\"TestDomain\" code:123 userInfo:nil];\n    \n    MSSyncTable *opTable = [[MSSyncTable alloc] initWithName:opTableName client:client];\n    MSQuery *opQuery = [[MSQuery alloc] initWithSyncTable:opTable];\n    MSSyncTable *opErrorTable = [[MSSyncTable alloc] initWithName:opErrorTableName client:client];\n    MSQuery *opErrorQuery = [[MSQuery alloc] initWithSyncTable:opErrorTable];\n    MSSyncTable *todoTable = [[MSSyncTable alloc] initWithName:todoTableName client:client];\n    MSQuery *todoQuery = [[MSQuery alloc] initWithSyncTable:todoTable];\n    \n    MSTableOperation *op1 = [[MSTableOperation alloc] initWithTable:todoTableName type:MSTableOperationInsert itemId:@\"one\"];\n    op1.operationId = 1;\n    MSTableOperationError *opError1 = [[MSTableOperationError alloc] initWithOperation:op1 item:op1.item error:error];\n    MSTableOperation *op2 = [[MSTableOperation alloc] initWithTable:todoTableName type:MSTableOperationInsert itemId:@\"two\"];\n    op2.operationId = 2;\n    MSTableOperationError *opError2 = [[MSTableOperationError alloc] initWithOperation:op2 item:op2.item error:error];\n    MSTableOperationError *opError3 = [[MSTableOperationError alloc] initWithOperation:op1 item:op1.item error:error];\n    NSDictionary *item1 = @{@\"id\":@\"one\"};\n    NSDictionary *item2 = @{@\"id\":@\"two\"};\n    \n    NSError *localError;\n    [client.syncContext.dataSource upsertItems:@[item1, item2] table:todoTableName orError:&localError];\n    XCTAssertNil(localError, @\"Error from upserting Todo item\");\n    [client.syncContext.dataSource upsertItems:@[op1.serialize, op2.serialize] table:opTableName orError:&localError];\n    XCTAssertNil(localError, @\"Error from upserting ops\");\n    [client.syncContext.dataSource upsertItems:@[opError1.serialize, opError2.serialize, opError3.serialize] table:opErrorTableName orError:&localError];\n    XCTAssertNil(localError, @\"Error from upserting opErrors\");\n    \n    // make sure everything is there\n    NSArray *todoItems = [client.syncContext.dataSource readWithQuery:todoQuery orError:&localError].items;\n    XCTAssertNil(localError);\n    NSArray *opItems = [client.syncContext.dataSource readWithQuery:opQuery orError:&error].items;\n    XCTAssertNil(localError);\n    NSArray *opErrorItems = [client.syncContext.dataSource readWithQuery:opErrorQuery orError:&error].items;\n    XCTAssertNil(localError, @\"Error from \");\n    \n    XCTAssertEqual(todoItems.count, 2);\n    XCTAssertEqual(opItems.count, 2);\n    XCTAssertEqual(opErrorItems.count, 3);\n    \n    [client.syncContext cancelOperation:op1 discardItemWithCompletion:^(NSError *error) {\n        XCTAssertNil(error);\n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    todoItems = [client.syncContext.dataSource readWithQuery:todoQuery orError:&localError].items;\n    XCTAssertNil(localError);\n    opItems = [client.syncContext.dataSource readWithQuery:opQuery orError:&error].items;\n    XCTAssertNil(localError);\n    opErrorItems = [client.syncContext.dataSource readWithQuery:opErrorQuery orError:&error].items;\n    XCTAssertNil(localError, @\"Error from \");\n    \n    XCTAssertEqual(todoItems.count, 1);\n    XCTAssertEqualObjects([todoItems[0] valueForKey:@\"id\"], @\"two\");\n    XCTAssertEqual(opItems.count, 1);\n    XCTAssertEqualObjects([opItems[0] valueForKey:@\"id\"], @2);\n    XCTAssertEqual(opErrorItems.count, 1);\n    XCTAssertEqualObjects([opErrorItems[0] valueForKey:@\"operationId\"], @2);\n}\n\n#pragma mark * Async Test Helper Method\n\n\n-(BOOL) waitForTest:(NSTimeInterval)testDuration {\n    \n    NSDate *timeoutAt = [NSDate dateWithTimeIntervalSinceNow:testDuration];\n    \n    while (!done) {\n        [[NSRunLoop currentRunLoop] runMode:NSRunLoopCommonModes\n                                 beforeDate:timeoutAt];\n        if([timeoutAt timeIntervalSinceNow] <= 0.0) {\n            break;\n        }\n    };\n    \n    return done;\n}\n\n-(BOOL) checkURL:(NSURL *)url withPath:(NSString *)path andQuery:(NSArray *)query\n{\n    if (![url.path isEqualToString:path]) {\n        return NO;\n    }\n    \n    NSArray *actualQuery = [[url.query componentsSeparatedByString:@\"&\"]\n                                  sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];\n    \n    NSArray *sortedQuery = [query sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];\n    \n    return [actualQuery isEqualToArray:sortedQuery];\n}\n\n#pragma mark * deltaToken Test Helper Method\n\n-(void) initDeltaTokenWithContext:(MSSyncContext *)syncContext query:(MSQuery*)query queryId:(NSString *)queryId date:(NSDate *)date {\n    NSDateFormatter *formatter = [MSNaiveISODateFormatter naiveISODateFormatter];\n    NSString *key = [NSString stringWithFormat:@\"deltaToken|%@|%@\", query.table.name, queryId];\n    NSDictionary *delta = @{@\"id\":key, @\"value\":[formatter stringFromDate:date]};\n    \n    [syncContext.dataSource upsertItems:@[delta] table:syncContext.dataSource.configTableName orError:nil];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSTable+MSTableTestUtilities.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <WindowsAzureMobileServices/WindowsAzureMobileServices.h>\n\n@interface MSTable (MSTableTestUtilities)\n-(void) deleteAllItemsWithCompletion:(void (^)(NSError *error))completion;\n-(void) insertItems:(NSArray *)items completion:(void (^)(NSError *error))completion;\n\n+(NSArray *) testValidStringIds;\n+(NSArray *) testEmptyStringIdsIncludingNull:(bool)includeNull;\n+(NSArray *) testInvalidStringIds;\n+(NSArray *) testValidIntIds;\n+(NSArray *) testInvalidIntIds;\n+(NSArray *) testNonStringNonIntValidJsonIds;\n+(NSArray *) testNonStringNonIntIds;\n\n+(NSArray *) testSystemProperties;\n+(NSArray *) testValidSystemProperties;\n+(NSArray *) testNonSystemProperties;\n+(NSArray *) testValidSystemPropertyQueryStrings;\n+(NSArray *) testInvalidSystemPropertyQueryStrings;\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSTable+MSTableTestUtilities.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSTable+MSTableTestUtilities.h\"\n\n@implementation MSTable (MSTableFunctionalTestUtilities)\n\n-(void) deleteAllItemsWithCompletion:(void (^)(NSError *error))completion;\n{\n    __block MSReadQueryBlock readCompletion;\n    readCompletion = ^(MSQueryResult *result, NSError *error) {\n        if (error) {\n            completion(error);\n        }\n        else if(result.items.count > 0){\n            [self deleteItems:result.items completion:completion];\n        }\n        else {\n            completion(nil);\n        }\n    };\n    \n    [self readWithQueryString:@\"$top=500\" completion:readCompletion];\n}\n\n-(void) deleteItems:(NSArray *)items\n         completion:(void (^)(NSError *))completion\n{\n    __block NSInteger lastItemIndex = -1;\n    \n    void (^nextDeleteBlock)(id, NSError *error);\n    void (^__block __weak weakNextDeleteBlock)(id, NSError *error);\n    weakNextDeleteBlock = nextDeleteBlock = ^(id itemId, NSError *error) {\n        if (error) {\n            completion(error);\n        }\n        else {\n            if (lastItemIndex + 1  < items.count) {\n                lastItemIndex++;\n                id itemToDelete = items[lastItemIndex];\n                [self delete:itemToDelete completion:weakNextDeleteBlock];\n            }\n            else {\n                completion(nil);\n            }\n        }\n    };\n    \n    nextDeleteBlock(0, nil);\n}\n\n-(void) insertItems:(NSArray *)items\n         completion:(void (^)(NSError *))completion\n{\n    __block NSInteger lastItemIndex = -1;\n    \n    void (^ nextInsertBlock)(id, NSError *error);\n    void (^__block __weak weakNextInsertBlock)(id, NSError *error);\n    weakNextInsertBlock = nextInsertBlock = ^(id newItem, NSError *error) {\n        if (error) {\n            completion(error);\n        }\n        else {\n            if (lastItemIndex + 1  < items.count) {\n                lastItemIndex++;\n                id itemToInsert = items[lastItemIndex];\n                [self insert:itemToInsert completion:weakNextInsertBlock];\n            }\n            else {\n                completion(nil);\n            }\n        }\n    };\n    \n    nextInsertBlock(nil, nil);\n}\n\n+ (NSArray *) testValidStringIds\n{\n    return @[\n             @\"id\",\n             @\"true\",\n             @\"false\",\n             @\"00000000-0000-0000-0000-000000000000\",\n             @\"aa4da0b5-308c-4877-a5d2-03f274632636\",\n             @\"69C8BE62-A09F-4638-9A9C-6B448E9ED4E7\",\n             @\"{EC26F57E-1E65-4A90-B949-0661159D0546}\",\n             @\"87D5B05C93614F8EBFADF7BC10F7AE8C\",\n             @\"someone@someplace.com\",\n             @\"id with spaces\",\n             @\"...\",\n             @\" .\",\n             @\"'id' with single quotes\",\n             [@\"id with 256 characters \" stringByPaddingToLength:255 withString:@\".\" startingAtIndex:0],\n             @\"id with Japanese 私の車はどこですか？\",\n             @\"id with Arabic أين هو سيارتي؟\",\n             @\"id with Russian Где моя машина\",\n             @\"id with some URL significant characters % # &\",\n             @\"id with allowed ascii characters \",\n             @\"id with allowed ascii characters  !#$%&'()*,-.0123456789:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}\",\n             @\"id with allowed extended ascii characters ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ\"\n    ];\n};\n\n+ (NSArray *) testEmptyStringIdsIncludingNull:(bool)includeNull\n{\n    NSArray *ids = @[ @\"\" ];\n    if(includeNull) {\n        [ids arrayByAddingObject:[NSNull null]];\n    }\n    return ids;\n};\n\n+ (NSArray *) testInvalidStringIds\n{\n    return @[\n             @\".\",\n             @\"..\",\n             [@\"id with 256 characters \" stringByPaddingToLength:256 withString:@\".\" startingAtIndex:0],\n             @\"\\r\",\n             @\"\\n\",\n             @\"\\t\",\n             @\"id\\twith\\ttabs\",\n             @\"id\\rwith\\rreturns\",\n             @\"id\\nwith\\n\\newline\",\n             @\"id with fowardslash \\\\\",\n             @\"id with backslash /\",\n             @\"1/8/2010 8:00:00 AM\",\n             @\"\\\"idWithQuotes\\\"\",\n             @\"?\",\n             @\"\\\\\",\n             @\"/\",\n             @\"`\",\n             @\"+\"\n    ];\n    //Enumerable.Range(0, 32).Select(number => char.ToString((char)number)))\n    //Enumerable.Range(127, 159 - 127).Select(number => char.ToString((char)number)))\n}\n\n+(NSArray *) testValidIntIds\n{\n    return @[\n             @1,\n             @INT_MAX,\n             @LONG_LONG_MAX\n    ];\n}\n\n+(NSArray *) testInvalidIntIds\n{\n    return @[\n             @-1,\n             @INT_MIN,\n             @LONG_LONG_MIN\n    ];\n}\n\n+(NSArray *) testNonStringNonIntValidJsonIds\n{\n    return @[\n             @YES,\n             @NO,\n             @1.0,\n             @-1.0,\n             @0.0\n    ];\n};\n\n+(NSArray *) testNonStringNonIntIds\n{\n    return @[\n        [[NSObject alloc] init],\n        [NSDate date],\n        @1.0\n    ];\n};\n\n+(NSArray *) testSystemProperties\n{\n    return @[\n        @(MSSystemPropertyNone),\n        @(MSSystemPropertyAll),\n        @(MSSystemPropertyCreatedAt | MSSystemPropertyUpdatedAt | MSSystemPropertyVersion),\n        @(MSSystemPropertyCreatedAt | MSSystemPropertyUpdatedAt),\n        @(MSSystemPropertyCreatedAt | MSSystemPropertyVersion),\n        @(MSSystemPropertyCreatedAt),\n        @(MSSystemPropertyUpdatedAt | MSSystemPropertyVersion),\n        @(MSSystemPropertyUpdatedAt),\n        @(MSSystemPropertyVersion)\n    ];\n}\n\n+(NSArray *) testValidSystemProperties\n{\n    return @[@\"__createdAt\", @\"__updatedAt\", @\"__version\", @\"__CreatedAt\", @\"__futureSystemProperty\"];\n}\n\n+(NSArray *) testNonSystemProperties\n{\n    return @[ @\"someProperty\", @\"createdAt\", @\"updatedAt\", @\"version\", @\"_createdAt\", @\"_updatedAt\", @\"_version\", @\"X__createdAt\"];\n}\n\n+(NSArray *) testValidSystemPropertyQueryStrings\n{\n    return @[\n             @\"__systemProperties=*\",\n             @\"__systemProperties=__createdAt\",\n             @\"__systemProperties=__createdAt,__updatedAt\",\n             @\"__systemProperties=__createdAt,__version\",\n             @\"__systemProperties=__createdAt,__updatedAt,__version\",\n             @\"__systemProperties=__createdAt,__version,__updatedAt\",\n             @\"__systemProperties=__updatedAt\",\n             @\"__systemProperties=__updatedAt,__createdAt\",\n             @\"__systemProperties=__updatedAt,__createdAt,__version\",\n             @\"__systemProperties=__updatedAt,__version\",\n             @\"__systemProperties=__updatedAt,__version, __createdAt\",\n             @\"__systemProperties=__version\",\n             @\"__systemProperties=__version,__createdAt\",\n             @\"__systemProperties=__version,__createdAt,__updatedAt\",\n             @\"__systemProperties=__version,__updatedAt\",\n             @\"__systemProperties=__version,__updatedAt, __createdAt\",\n             @\"__systemProperties=__version,__updatedAt, __createdAt, __deleted\",\n             @\"__systemProperties=__deleted\",\n             \n             // Trailing commas, extra commas\n             @\"__systemProperties=__createdAt,\",\n             @\"__systemProperties=__createdAt,__updatedAt,\",\n             @\"__systemProperties=__createdAt,__updatedAt,__version,\",\n             @\"__systemProperties=,__createdAt\",\n             @\"__systemProperties=__createdAt,,__updatedAt\",\n             @\"__systemProperties=__createdAt, ,__updatedAt,__version\",\n             @\"__systemProperties=__createdAt,,\",\n             @\"__systemProperties=__createdAt, ,\",\n             \n             // Trailing, leading whitespace\n             @\"__systemProperties= *\",\n             @\"__systemProperties=\\t*\\t\",\n             @\"__systemProperties= __createdAt \",\n             @\"__systemProperties=\\t__createdAt,\\t__updatedAt\\t\",\n             @\"__systemProperties=\\r__createdAt,\\r__updatedAt,\\t__version\\r\",\n             @\"__systemProperties=\\n__createdAt\\n\",\n             @\"__systemProperties=__createdAt,\\n__updatedAt\",\n             @\"__systemProperties=__createdAt, __updatedAt, __version\",\n             \n             // Different casing\n             @\"__SystemProperties=*\",\n             @\"__SystemProperties=__createdAt\",\n             @\"__SYSTEMPROPERTIES=__createdAt,__updatedAt\",\n             @\"__systemproperties=__createdAt,__updatedAt,__version\",\n             @\"__SystemProperties=__CreatedAt\",\n             @\"__SYSTEMPROPERTIES=__createdAt,__UPDATEDAT\",\n             @\"__systemproperties=__createdat,__UPDATEDAT,__veRsion\",\n             \n             // Sans __ prefix\n             @\"__systemProperties=createdAt\",\n             @\"__systemProperties=updatedAt,createdAt\",\n             @\"__systemProperties=UPDATEDAT,createdat\",\n             @\"__systemProperties=updatedAt,version,createdAt\",\n             \n             // Combinations of above\n             @\"__SYSTEMPROPERTIES=__createdAt, updatedat\",\n             @\"__systemProperties=__CreatedAt,,\\t__VERSION\",\n             @\"__systemProperties= updatedat ,,\"\n            ];\n}\n\n+(NSArray *) testInvalidSystemPropertyQueryStrings\n{\n    return @[\n             // Unknown system Properties\n             @\"__systemProperties=__created\",\n             @\"__systemProperties=updated At\",\n             @\"__systemProperties=notASystemProperty\",\n             @\"__systemProperties=_version\",\n             \n             // System properties not comma separated\n             @\"__systemProperties=__createdAt __updatedAt\",\n             @\"__systemProperties=__createdAt\\t__version\",\n             @\"__systemProperties=createdAt updatedAt version\",\n             @\"__systemProperties=__createdAt__version\",\n             \n             // All and individual system properties requested\n             @\"__systemProperties=*,__updatedAt\"\n             ];\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSTableFuncTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"WindowsAzureMobileServices.h\"\n#import \"MSTestFilter.h\"\n#import \"MSTable+MSTableTestUtilities.h\"\n#import \"MSJSONSerializer.h\"\n\n@interface MSTableFuncTests : XCTestCase\n@property (nonatomic) BOOL done;\n@property (nonatomic, strong) MSTable *table;\n@end\n\n@implementation MSTableFuncTests\n\n-(void) setUp\n{\n    [super setUp];\n    self.continueAfterFailure = NO;\n    \n    NSLog(@\"%@ setUp\", self.name);\n    \n    // These functional tests requires a working Windows Mobile Azure Service\n    // with a table named \"todoItem\". Enter the application URL and application\n    // key for the Windows Mobile Azure Service in the settings.plist file.\n    \n    NSString *path = [[NSBundle mainBundle] pathForResource:@\"settings\" ofType:@\"plist\"];\n    NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path];\n    \n    MSClient *client = [MSClient\n                        clientWithApplicationURLString:[settings objectForKey:@\"TestAppUrl\"]\n                        applicationKey:[settings objectForKey:@\"TestAppApplicationKey\"]];\n    \n    XCTAssertTrue([client.applicationURL.description hasPrefix:@\"https://\"], @\"The functional tests are currently disabled.\");\n    self.continueAfterFailure = YES;\n    \n    self.table = [client tableWithName:@\"stringId_objC_test_table\"];\n    XCTAssertNotNil(self.table, @\"Could not create test table.\");\n    \n    // Clean up table, all tests start at empty table\n    [self cleanUpData];\n    \n    self.done = NO;\n}\n\n- (void)tearDown\n{\n    self.continueAfterFailure = YES;\n    \n    // Put teardown code here; it will be run once, after the last test case.\n    self.table = nil;\n    \n    [super tearDown];\n}\n\n- (void) cleanUpData\n{\n    // Clean up table, all tests start at empty table\n    self.done = NO;\n    [self.table deleteAllItemsWithCompletion:^(NSError *error) {\n        XCTAssertNil(error, @\"Error %@\", error.localizedDescription);\n        self.done = YES;\n    }];\n    [self waitForTest:90.0];\n}\n\n- (void) populateData\n{\n    self.done = NO;\n    \n    NSArray *validIds = [MSTable testValidStringIds];\n    NSMutableArray *items = [NSMutableArray array];\n    for(NSString *validId in validIds)\n    {\n        [items addObject:@{@\"id\": validId, @\"string\": @\"Hey\" }];\n    }\n    \n    [self.table insertItems:items completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Couldn't insert all records for test\");\n        self.done = YES;\n    }];\n    [self waitForTest:90.0];\n}\n\n\n- (void)testTableOperationsWithValidStringIdAgainstStringIdTable\n{\n    NSArray *testIds = [MSTable testValidStringIds];\n    \n    // Verify functional queries with valid ids\n    for (NSString *testId in testIds) {\n        self.done = NO;\n        [self.table insert:@{@\"id\": testId, @\"string\": @\"Hey\"} completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNil(error, @\"Insert failed for id %@ with error: %@\", testId, error.localizedDescription);\n            XCTAssertEqualObjects(testId, item[@\"id\"], @\"Id %@ was not found\", testId);\n            XCTAssertEqualObjects(@\"Hey\", item[@\"string\"], @\"String value was not retrieved correctly\");\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        [self.table readWithId:testId completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNil(error, @\"ReadWithId failed for id %@ with error: %@\", testId, error.localizedDescription);\n            XCTAssertEqualObjects(testId, item[@\"id\"], @\"Id %@ was not found\", testId);\n            XCTAssertEqualObjects(@\"Hey\", item[@\"string\"], @\"String value was not retrieved correctly\");\n            self.done = YES;\n        }];\n        [self waitForTest:15.0];\n        \n        NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"id == %@\", testId];\n        self.done = NO;\n        [self.table readWithPredicate:predicate completion:^(MSQueryResult *result, NSError *error) {\n            XCTAssertNil(error, @\"Failure for id %@: %@\", testId, error.localizedDescription);\n            NSDictionary *item = result.items[0];\n            XCTAssertEqualObjects(testId, item[@\"id\"], @\"Id %@ was not found\", testId);\n            XCTAssertEqualObjects(@\"Hey\", item[@\"string\"], @\"String value was not retrieved correctly\");\n            self.done = YES;\n        }];\n        [self waitForTest:15.0];\n         \n        // projection, querystring\n        MSQuery *query = [[MSQuery alloc] initWithTable:self.table];\n        query.selectFields = @[@\"id\", @\"string\"];\n        self.done = NO;\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            XCTAssertNil(error, @\"Failure for id %@: %@\", testId, error.localizedDescription);\n            XCTAssertTrue(result.items.count == 1, @\"Incorrect number of items found\");\n            NSDictionary *item = result.items[0];\n            XCTAssertEqualObjects(testId, item[@\"id\"], @\"Invalid id found\");\n            XCTAssertEqualObjects(@\"Hey\", item[@\"string\"], @\"Invalid string value found\");\n            self.done = YES;\n        }];\n        [self waitForTest:15.0];\n        \n        // update\n        self.done = NO;\n        [self.table update:@{@\"id\":testId, @\"string\":@\"What?\"} completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNil(error, @\"Failure for id %@: %@\", testId, error.localizedDescription);\n            XCTAssertEqualObjects(testId, item[@\"id\"], @\"Invalid id found\");\n            XCTAssertEqualObjects(@\"What?\", item[@\"string\"], @\"Invalid string value found\");\n            self.done = YES;\n        }];\n        [self waitForTest:15.0];\n         \n        // delete\n        self.done = NO;\n        [self.table deleteWithId:testId completion:^(id itemId, NSError *error) {\n            XCTAssertNil(error, @\"Failure for id %@: %@\", testId, error.localizedDescription);\n            XCTAssertEqualObjects(testId, itemId, @\"Deleted wrong item; %@ and not %@\", itemId, testId);\n            self.done = YES;\n        }];\n        [self waitForTest:15.0];\n                             \n        // Insert again, would fail if id in use\n        self.done = NO;\n        [self.table insert:@{@\"id\": testId, @\"string\": @\"Hey\"} completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNil(error, @\"Insert failed for id %@ with error: %@\", testId, error.localizedDescription);\n            self.done = YES;\n        }];\n        [self waitForTest:15.0];\n         \n        // delete with item\n        self.done = NO;\n        [self.table delete:@{@\"id\":testId} completion:^(id itemId, NSError *error) {\n            XCTAssertNil(error, @\"Failure for id %@: %@\", testId, error.localizedDescription);\n            XCTAssertEqualObjects(testId, itemId, @\"Deleted wrong item; %@ and not %@\", itemId, testId);\n            self.done = YES;\n        }];\n        [self waitForTest:15.0];\n\n        // verify no item\n        self.done = NO;\n        [self.table readWithId:testId completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNil(item, @\"Item should have been deleted\");\n            NSString *expectedErrorMessage = [NSString stringWithFormat:@\"Error: An item with id '%@' does not exist.\", testId];\n            XCTAssertEqual([@MSErrorMessageErrorCode integerValue], error.code, @\"Unexpected error code: %ld: %@\", (long)error.code, error.localizedDescription);\n            XCTAssertEqualObjects(expectedErrorMessage, error.localizedDescription, @\"Wrong error: %@\", error.localizedDescription);\n            self.done = YES;\n        }];\n        [self waitForTest:15.0];\n    };\n}\n\n-(void) testOrderingReadWithValidStringIdAgainstStringIdTable\n{\t\n    NSArray *testIdData = @[ @\"a\", @\"b\", @\"C\", @\"_A\", @\"_B\", @\"_C\", @\"1\", @\"2\", @\"3\" ];\n    NSArray *orderedTestIdData = @[ @\"_A\", @\"_B\", @\"_C\", @\"1\", @\"2\", @\"3\", @\"a\", @\"b\", @\"C\" ];\n    \n    // Populate table with data\n    NSMutableArray *originalItems = [NSMutableArray array];\n    for (NSString *testId in testIdData)\n    {\n        [originalItems addObject:@{@\"id\":testId, @\"string\": @\"Hey\" }];\n    }\n    self.done = NO;\n    [self.table insertItems:originalItems completion:^(NSError *error) {\n        XCTAssertNil(error, @\"Test failed with error: %@\", error.localizedDescription);\n        self.done = YES;\n    }];\n    [self waitForTest:90.0];\n    \n    // Verify order by ascending works\n    self.done = NO;\n    MSQuery *query = [[MSQuery alloc] initWithTable:self.table];\n    [query orderByAscending:@\"id\"];\n    [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertNil(error, @\"Test failed with error: %@\", error.localizedDescription);\n        NSDictionary *item;\n        NSUInteger index = 0;\n        for(NSString *sortedId in orderedTestIdData) {\n            item = result.items[index++];\n            XCTAssertEqualObjects(sortedId, item[@\"id\"], @\"incorrect id order\");\n        }\n        self.done = YES;\n    }];\n    [self waitForTest:90.0];\n\n    // Verify order by descending works\n    self.done = NO;\n    query = [[MSQuery alloc] initWithTable:self.table];\n    [query orderByDescending:@\"id\"];\n    [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertNil(error, @\"Test failed with error: %@\", error.localizedDescription);\n        NSDictionary *item;\n        NSUInteger index = orderedTestIdData.count;\n        for(NSString *sortedId in orderedTestIdData) {\n            item = result.items[--index];\n            XCTAssertEqualObjects(sortedId, item[@\"id\"], @\"incorrect id order\");\n        }\n        self.done = YES;\n    }];\n    [self waitForTest:90.0];\n}\n\n-(void) testFilterReadWithEmptyAndInvalidStringIdsAgainstStringIdTable\n{\n    NSArray *testIds = [MSTable testInvalidStringIds];\n    testIds = [testIds arrayByAddingObjectsFromArray:[MSTable testEmptyStringIdsIncludingNull:YES]];\n    \n    [self populateData];\n    for (NSString *testId in testIds) {\n        self.done = NO;\n        NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"id == %@\", testId];\n        [self.table readWithPredicate:predicate completion:^(MSQueryResult *result, NSError *error) {\n            XCTAssertNil(error, @\"Error: %@\", error.localizedDescription);\n            XCTAssertTrue(result.items.count == 0, @\"Received %lu results when none expected\", (unsigned long)result.items.count);\n            self.done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:20.0], @\"Test timed out.\");\n    }\n}\n\n-(void) testReadIdWithInvalidIdsAgainstStringIdTable\n{\n    NSArray *testIds = [MSTable testInvalidStringIds];\n    for(NSString *testId in testIds)\n    {\n        self.done = NO;\n        [self.table readWithId:testId completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNil(item, @\"Unexpected item found for id %@\", testId);\n            XCTAssertEqual([@MSInvalidItemIdWithRequest integerValue], error.code, @\"Unexpected error code: %ld\", (long)error.code);\n            XCTAssertEqualObjects(@\"The item provided did not have a valid id.\", error.localizedDescription, @\"Incorrect error message: %@\", error.localizedDescription);\n            self.done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:20.0], @\"Test timed out.\");\n    }\n}\n\n-(void) testInsertWithEmptyStringIdAgainstStringIdTable\n{\n    NSUInteger count = 0;\n    NSArray *testIds = [MSTable testEmptyStringIdsIncludingNull:YES];\n    NSString *countAsString;\n    for (NSString *testId in testIds)\n    {\n        countAsString = [NSString stringWithFormat:@\"%lu\", (unsigned long)count++];\n        NSDictionary *item = @{ @\"id\": testId, @\"string\": countAsString };\n        \n        self.done = NO;\n        [self.table insert:item completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNil(error, @\"Error: %@\", error.localizedDescription);\n            XCTAssertNotNil(item[@\"id\"], @\"Inserted item did not have an id\");\n            XCTAssertEqualObjects(countAsString, item[@\"string\"], @\"Item's value was incorrect\");\n            self.done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:20.0], @\"Test timed out.\");\n    }\n}\n\n-(void) testInsertWithExistingItemAgainstStringIdTable\n{\n    [self populateData];\n    \n    NSArray *testIds = [MSTable testValidStringIds];\n    for(NSString *testId in testIds)\n    {\n        self.done = NO;\n        [self.table insert:@{@\"id\": testId, @\"string\": @\"No we're talking!\"} completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNotNil(error, @\"An error should have occurred\");\n            XCTAssertEqual([@MSErrorMessageErrorCode integerValue], error.code, @\"Unexpected error code:  %ld\", (long)error.code);\n            XCTAssertEqualObjects(@\"Error: Could not insert the item because an item with that id already exists.\", error.localizedDescription, @\"Wrong error: %@\", error.localizedDescription);\n            self.done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n    }\n}\n\n- (void) testUpdateWithNosuchItemAgainstStringIdTable\n{\n    NSArray *testIds = [MSTable testValidStringIds];\n    for(NSString *testId in testIds)\n    {\n        self.done = NO;\n        [self.table update:@{@\"id\":testId, @\"string\": @\"Alright!\"} completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNotNil(error, @\"An error should have occurred\");\n            XCTAssertEqual([@MSErrorMessageErrorCode integerValue], error.code, @\"Unexpected error code:  %ld\", (long)error.code);\n            NSString *expectedErrorMessage = [NSString stringWithFormat:@\"Error: An item with id '%@' does not exist.\", testId];\n            XCTAssertEqualObjects(expectedErrorMessage, error.localizedDescription, @\"Wrong error: %@\", error.localizedDescription);\n            self.done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n    }\n}\n\n-(void) testDeleteWithNosuchItemAgainstStringIdTable\n{\n    NSArray *testIds = [MSTable testValidStringIds];\n    for (NSString *testId in testIds)\n    {\n        self.done = NO;\n        [self.table delete:@{@\"id\":testId} completion:^(id itemId, NSError *error) {\n            XCTAssertNotNil(error, @\"An error should have occurred\");\n            XCTAssertEqual([@MSErrorMessageErrorCode integerValue], error.code, @\"Unexpected error code: %ld\", (long)error.code);\n            NSString *expectedErrorMessage = [NSString stringWithFormat:@\"Error: An item with id '%@' does not exist.\", testId];\n            XCTAssertEqualObjects(expectedErrorMessage, error.localizedDescription, @\"Wrong error: %@\", error.localizedDescription);\n            self.done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n    }\n}\n\n-(void) testDeleteWithIdWithNosuchItemAgainstStringIdTable\n{\n    NSArray *testIds = [MSTable testValidStringIds];\n    for (NSString *testId in testIds)\n    {\n        self.done = NO;\n        [self.table deleteWithId:testId completion:^(id itemId, NSError *error) {\n            XCTAssertNotNil(error, @\"An error should have occurred\");\t\n            XCTAssertEqual([@MSErrorMessageErrorCode integerValue], error.code, @\"Unexpected error code: %ld\", (long)error.code);\n            NSString *expectedErrorMessage = [NSString stringWithFormat:@\"Error: An item with id '%@' does not exist.\", testId];\n            XCTAssertEqualObjects(expectedErrorMessage, error.localizedDescription, @\"Wrong error: %@\", error.localizedDescription);\n            self.done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:15.0], @\"Test timed out.\");\n    }\n}\n\n\n#pragma mark System Properties\n\n\n-(void) testAsyncTableOperationsWithAllSystemProperties\n{\n    NSString *myid = @\"an id\";\n    \n    NSDictionary *item = @{ @\"id\": myid, @\"string\": @\"a value\" };\n    self.table.systemProperties = MSSystemPropertyAll;\n    self.done = NO;\n    [self.table insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item[MSSystemColumnCreatedAt], @\"Missing property\");\n        XCTAssertNotNil(item[MSSystemColumnUpdatedAt], @\"Missing property\");\n        XCTAssertNotNil(item[MSSystemColumnVersion], @\"Missing property\");\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n    \n    self.done = NO;\n    __block id savedItem;\n    [self.table readWithCompletion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertTrue(result.items.count == 1, @\"Incorrect count: %lu\", (unsigned long)result.items.count);\n        NSDictionary *item = result.items[0];\n        XCTAssertNotNil(item[MSSystemColumnCreatedAt], @\"Missing property\");\n        XCTAssertNotNil(item[MSSystemColumnUpdatedAt], @\"Missing property\");\n        XCTAssertNotNil(item[MSSystemColumnVersion], @\"Missing property\");\n        savedItem = item;\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n\n    self.done = NO;\n    NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"__version == %@\", savedItem[MSSystemColumnVersion]];\n    [self.table readWithPredicate:predicate completion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertTrue(result.items.count == 1, @\"Incorrect count: %lu for %@\", (unsigned long)result.items.count, savedItem[MSSystemColumnVersion]);\n        NSDictionary *item = result.items[0];\n        XCTAssertEqualObjects(item[MSSystemColumnCreatedAt], savedItem[MSSystemColumnCreatedAt], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnUpdatedAt], savedItem[MSSystemColumnUpdatedAt], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnVersion], savedItem[MSSystemColumnVersion], @\"Incorrect property\");\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n    \n    // Filter against createdAt\n    self.done = NO;\n    predicate = [NSPredicate predicateWithFormat:@\"__createdAt == %@\", savedItem[MSSystemColumnCreatedAt]];\n    [self.table readWithPredicate:predicate completion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertTrue(result.items.count == 1, @\"Incorrect count: %lu for %@\", (unsigned long)result.items.count, savedItem[MSSystemColumnCreatedAt]);\n        NSDictionary *item = result.items[0];\n        XCTAssertEqualObjects(item[MSSystemColumnCreatedAt], savedItem[MSSystemColumnCreatedAt], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnUpdatedAt], savedItem[MSSystemColumnUpdatedAt], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnVersion], savedItem[MSSystemColumnVersion], @\"Incorrect property\");\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n\n    // Filter against updatedAt\n    self.done = NO;\n    predicate = [NSPredicate predicateWithFormat:@\"__updatedAt == %@\", savedItem[MSSystemColumnUpdatedAt]];\n    [self.table readWithPredicate:predicate completion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertTrue(result.items.count == 1, @\"Incorrect count: %lu for %@\", (unsigned long)result.items.count, savedItem[MSSystemColumnUpdatedAt]);\n        NSDictionary *item = result.items[0];\n        XCTAssertEqualObjects(item[MSSystemColumnCreatedAt], savedItem[MSSystemColumnCreatedAt], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnUpdatedAt], savedItem[MSSystemColumnUpdatedAt], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnVersion], savedItem[MSSystemColumnVersion], @\"Incorrect property\");\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n    \n    // Lookup\n    self.done = NO;\n    [self.table readWithId:savedItem[@\"id\"] completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertEqualObjects(item[@\"id\"],savedItem[@\"id\"], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnCreatedAt],savedItem[MSSystemColumnCreatedAt], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnUpdatedAt], savedItem[MSSystemColumnUpdatedAt], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnVersion],savedItem[MSSystemColumnVersion], @\"Incorrect property\");\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n\n    self.done = NO;\n    savedItem[@\"string\"] = @\"Hello!\";\n    [self.table update:savedItem completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertEqualObjects(item[@\"id\"],savedItem[@\"id\"], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnCreatedAt],savedItem[MSSystemColumnCreatedAt], @\"Incorrect property\");\n        NSDate *originalDate = savedItem[MSSystemColumnUpdatedAt];\n        NSDate *updatedDate = item[MSSystemColumnUpdatedAt];\n        XCTAssertTrue([originalDate compare:updatedDate] == NSOrderedAscending, @\"Updated incorrect\");\n        XCTAssertFalse([item[MSSystemColumnVersion] isEqualToString:savedItem[MSSystemColumnVersion]], @\"Version not updated\");\n        savedItem = item;\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n    \n    self.done = NO;\n    [self.table readWithCompletion:^(MSQueryResult *result, NSError *error) {\n        NSDictionary *item = result.items[0];\n        XCTAssertEqualObjects(item[@\"id\"],savedItem[@\"id\"], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnCreatedAt],savedItem[MSSystemColumnCreatedAt], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnUpdatedAt], savedItem[MSSystemColumnUpdatedAt], @\"Incorrect property\");\n        XCTAssertEqualObjects(item[MSSystemColumnVersion],savedItem[MSSystemColumnVersion], @\"Incorrect property\");\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n}\n\n-(void) testAsyncTableOperationsWithSystemPropertiesSetExplicitly\n{\n    NSDictionary *item = @{ @\"string\": @\"a value\" };\n    \n    self.table.systemProperties = MSSystemPropertyVersion | MSSystemPropertyCreatedAt | MSSystemPropertyUpdatedAt;\n    [self.table insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item[MSSystemColumnCreatedAt], @\"Missing property\");\n        XCTAssertNotNil(item[MSSystemColumnUpdatedAt], @\"Missing property\");\n        XCTAssertNotNil(item[MSSystemColumnVersion], @\"Missing property\");\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n    \n    // Explicit System Properties insert\n    self.done = NO;\n    self.table.systemProperties = MSSystemPropertyVersion | MSSystemPropertyCreatedAt;\n    [self.table insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item[MSSystemColumnCreatedAt], @\"Missing property\");\n        XCTAssertNil(item[MSSystemColumnUpdatedAt], @\"Shouldn't have had updated\");\n        XCTAssertNotNil(item[MSSystemColumnVersion], @\"Missing property\");\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n\n    self.done = NO;\n    __block NSString *savedItemId;\n    self.table.systemProperties = MSSystemPropertyUpdatedAt | MSSystemPropertyCreatedAt;\n    [self.table readWithCompletion:^(MSQueryResult *result, NSError *error) {\n        NSDictionary *item = result.items[0];\n        XCTAssertNotNil(item[MSSystemColumnCreatedAt], @\"Missing property\");\n        XCTAssertNotNil(item[MSSystemColumnUpdatedAt], @\"Missing property\");\n        XCTAssertNil(item[MSSystemColumnVersion], @\"Has extra property\");\n        savedItemId = item[@\"id\"];\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n\n    self.done = NO;\n    self.table.systemProperties = MSSystemPropertyUpdatedAt;\n    [self.table readWithId:savedItemId completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(item[MSSystemColumnCreatedAt], @\"Has extra property\");\n        XCTAssertNotNil(item[MSSystemColumnUpdatedAt], @\"Missing property\");\n        XCTAssertNil(item[MSSystemColumnVersion], @\"Has extra property\");\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n}\n\n-(void) testAsyncTableOperationsWithAllSystemPropertiesUsingCustomSystemParameters\n{\n    NSCharacterSet *equals = [NSCharacterSet characterSetWithCharactersInString:@\"=\"];\n    for (NSString *systemProperties in [MSTable testValidSystemPropertyQueryStrings])\n    {\n        NSArray *systemPropertiesKeyValue = [systemProperties componentsSeparatedByCharactersInSet:equals];\n        NSDictionary *userParams = @{systemPropertiesKeyValue[0]: systemPropertiesKeyValue[1]};\n        __block id savedItem;\n        \n        BOOL shouldHaveCreatedAt = [systemProperties rangeOfString:@\"created\" options:NSCaseInsensitiveSearch].location != NSNotFound;\n        BOOL shouldHaveUpdatedAt = [systemProperties rangeOfString:@\"updated\" options:NSCaseInsensitiveSearch].location != NSNotFound;\n        BOOL shouldHaveVersion = [systemProperties rangeOfString:@\"version\" options:NSCaseInsensitiveSearch].location != NSNotFound;\n        if([systemProperties rangeOfString:@\"*\" options:NSCaseInsensitiveSearch].location != NSNotFound) {\n            shouldHaveCreatedAt = shouldHaveUpdatedAt = shouldHaveVersion = YES;\n        }\n        \n        NSString *myId = @\"an id\";\n        NSDictionary *item = @{ @\"id\": myId, @\"string\": @\"a value\" };\n        \n        self.done = NO;\n        [self.table insert:item parameters:userParams completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertEqual(shouldHaveCreatedAt, (BOOL)(item[MSSystemColumnCreatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n            XCTAssertEqual(shouldHaveUpdatedAt, (BOOL)(item[MSSystemColumnUpdatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n            XCTAssertEqual(shouldHaveVersion, (BOOL)(item[MSSystemColumnVersion] != nil), @\"Property invalid: %@\", systemProperties);\n            savedItem = item;\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        MSQuery *query = self.table.query;\n        query.parameters = userParams;\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            XCTAssertTrue(result.items.count == 1, @\"Should have had results\");\n            NSDictionary *item = result.items[0];\n            XCTAssertEqual(shouldHaveCreatedAt, (BOOL)(item[MSSystemColumnCreatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n            XCTAssertEqual(shouldHaveUpdatedAt, (BOOL)(item[MSSystemColumnUpdatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n            XCTAssertEqual(shouldHaveVersion, (BOOL)(item[MSSystemColumnVersion] != nil), @\"Property invalid: %@\", systemProperties);\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        query.predicate = [NSPredicate predicateWithFormat:@\"__version == %@\", savedItem[MSSystemColumnVersion]];\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            if (shouldHaveVersion) {\n                XCTAssertTrue(result.items.count == 1, @\"Should have had results\");\n                NSDictionary *item = result.items[0];\n                XCTAssertEqual(shouldHaveCreatedAt, (BOOL)(item[MSSystemColumnCreatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n                XCTAssertEqual(shouldHaveUpdatedAt, (BOOL)(item[MSSystemColumnUpdatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n                XCTAssertEqual(shouldHaveVersion, (BOOL)(item[MSSystemColumnVersion] != nil), @\"Property invalid: %@\", systemProperties);\n            } else {\n                XCTAssertTrue(result.items.count == 0, @\"Shouldn't have had results\");\n            }\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        query.predicate = [NSPredicate predicateWithFormat:@\"__createdAt == %@\", savedItem[MSSystemColumnCreatedAt]];\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            if (shouldHaveCreatedAt) {\n                XCTAssertTrue(result.items.count == 1, @\"Should have had results\");\n                NSDictionary *item = result.items[0];\n                XCTAssertEqual(shouldHaveCreatedAt, (BOOL)(item[MSSystemColumnCreatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n                XCTAssertEqual(shouldHaveUpdatedAt, (BOOL)(item[MSSystemColumnUpdatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n                XCTAssertEqual(shouldHaveVersion, (BOOL)(item[MSSystemColumnVersion] != nil), @\"Property invalid: %@\", systemProperties);\n            } else {\n                XCTAssertTrue(result.items.count == 0, @\"Shouldn't have had results\");\n            }\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        query.predicate = [NSPredicate predicateWithFormat:@\"__updatedAt == %@\", savedItem[MSSystemColumnUpdatedAt]];\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            if (shouldHaveUpdatedAt) {\n                XCTAssertTrue(result.items.count == 1, @\"Should have had results\");\n                NSDictionary *item = result.items[0];\n                XCTAssertEqual(shouldHaveCreatedAt, (BOOL)(item[MSSystemColumnCreatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n                XCTAssertEqual(shouldHaveUpdatedAt, (BOOL)(item[MSSystemColumnUpdatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n                XCTAssertEqual(shouldHaveVersion, (BOOL)(item[MSSystemColumnVersion] != nil), @\"Property invalid: %@\", systemProperties);\n            } else {\n                XCTAssertTrue(result.items.count == 0, @\"Shouldn't have had results\");\n            }\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        [self.table readWithId:myId parameters:userParams completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertEqual(shouldHaveCreatedAt, (BOOL)(item[MSSystemColumnCreatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n            XCTAssertEqual(shouldHaveUpdatedAt, (BOOL)(item[MSSystemColumnUpdatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n            XCTAssertEqual(shouldHaveVersion, (BOOL)(item[MSSystemColumnVersion] != nil), @\"Property invalid: %@\", systemProperties);\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        [savedItem setValue:@\"Hello!\" forKey:@\"string\"];\n        [self.table update:savedItem parameters:userParams completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertEqual(shouldHaveCreatedAt, (BOOL)(item[MSSystemColumnCreatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n            XCTAssertEqual(shouldHaveUpdatedAt, (BOOL)(item[MSSystemColumnUpdatedAt] != nil), @\"Property invalid: %@\", systemProperties);\n            XCTAssertEqual(shouldHaveVersion, (BOOL)(item[MSSystemColumnVersion] != nil), @\"Property invalid: %@\", systemProperties);\n            if (shouldHaveVersion) {\n                XCTAssertFalse([savedItem[MSSystemColumnVersion] isEqualToString:item[MSSystemColumnVersion]], @\"Invalid version\");\n            }\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        [self.table delete:item completion:^(id itemId, NSError *error) {\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n    }\n}\n\n-(void) testAsyncTableOperationsWithInvalidSystemPropertiesQuerystring\n{\n    NSDictionary *item = @{@\"id\":@\"an id\", @\"string\":@\"a value\"};\n    \n    __block NSDictionary *savedItem;\n    [self.table insert:item completion:^(NSDictionary *item, NSError *error) {\n        savedItem = item;\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n\n    NSCharacterSet *equals = [NSCharacterSet characterSetWithCharactersInString:@\"=\"];\n    for (NSString *systemProperties in [MSTable testInvalidSystemPropertyQueryStrings])\n    {\n        NSArray *systemPropertiesKeyValue = [systemProperties componentsSeparatedByCharactersInSet:equals];\n        NSDictionary *userParams = @{systemPropertiesKeyValue[0]: systemPropertiesKeyValue[1]};\n        \n        self.done = NO;\n        [self.table insert:item parameters:userParams completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNotNil(error, @\"An error should have occurred\");\n            XCTAssertEqual(error.code, [@MSErrorMessageErrorCode integerValue], @\"Unexpected error %ld\", (long)error.code);\n            XCTAssertTrue([error.localizedDescription rangeOfString:@\"is not a supported system property.\"].location != NSNotFound, @\"Unexpected message %@\", error.localizedDescription);\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        // Read\n        self.done = NO;\n        MSQuery *query = [[MSQuery alloc] initWithTable:self.table];\n        query.parameters = userParams;\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            XCTAssertNotNil(error, @\"An error should have occurred\");\n            XCTAssertEqual(error.code, [@MSErrorMessageErrorCode integerValue], @\"Unexpected error %ld\", (long)error.code);\n            XCTAssertTrue([error.localizedDescription rangeOfString:@\"is not a supported system property.\"].location != NSNotFound, @\"Unexpected message %@\", error.localizedDescription);\n            self.done = YES;\n            }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"__version == %@\", savedItem[MSSystemColumnVersion]];\n        query.predicate = predicate;\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            XCTAssertNotNil(error, @\"An error should have occurred\");\n            XCTAssertEqual(error.code, [@MSErrorMessageErrorCode integerValue], @\"Unexpected error %ld\", (long)error.code);\n            XCTAssertTrue([error.localizedDescription rangeOfString:@\"is not a supported system property.\"].location != NSNotFound, @\"Unexpected message %@\", error.localizedDescription);\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        [self.table readWithId:@\"an id\" parameters:userParams completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNotNil(error, @\"An error should have occurred\");\n            XCTAssertEqual(error.code, [@MSErrorMessageErrorCode integerValue], @\"Unexpected error %ld\", (long)error.code);\n            XCTAssertTrue([error.localizedDescription rangeOfString:@\"is not a supported system property.\"].location != NSNotFound, @\"Unexpected message %@\", error.localizedDescription);\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        [savedItem setValue:@\"Hello!\" forKey:@\"string\"];\n        [self.table update:savedItem parameters:userParams completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertNotNil(error, @\"An error should have occurred\");\n            XCTAssertEqual(error.code, [@MSErrorMessageErrorCode integerValue], @\"Unexpected error %ld\", (long)error.code);\n            XCTAssertTrue([error.localizedDescription rangeOfString:@\"is not a supported system property.\"].location != NSNotFound, @\"Unexpected message %@\", error.localizedDescription);\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n    }\n}\n\n-(void) testAsyncFilterSelectOrderingOperationsNotImpactedBySystemProperties\n{\n    self.table.systemProperties = MSSystemPropertyAll;\n    \n    __block NSMutableArray *savedItems = [NSMutableArray array];\n    for(NSUInteger i = 1; i < 6; i++)\n    {\n        NSDictionary *item = @{@\"id\": [NSString stringWithFormat:@\"%lu\", (unsigned long)i], @\"string\": @\"a value\"};\n        self.done = NO;\n        [self.table insert:item completion:^(NSDictionary *item, NSError *error) {\n            if (error) {\n                XCTAssertNotNil(error);\n            } else {\n                [savedItems addObject:item];\n            }\n            \n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n    }\n    \n    //testSystemProperties\n    for (NSNumber *systemProperties in [MSTable testSystemProperties])\n    {\n        self.table.systemProperties = [systemProperties unsignedIntegerValue];\n        MSQuery *query = self.table.query;\n        [query orderByAscending:MSSystemColumnCreatedAt];\n        self.done = NO;\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            for (NSUInteger i = 0; i < result.items.count - 1; i++) {\n                NSInteger idOne = [result.items[i][@\"id\"] integerValue];\n                NSInteger idTwo = [result.items[i+1][@\"id\"] integerValue];\n                XCTAssertTrue(idOne < idTwo, @\"Incorrect order\");\n            }\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        query = self.table.query;\n        [query orderByAscending:MSSystemColumnUpdatedAt];\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            for (NSUInteger i = 0; i < result.items.count - 1; i++) {\n                NSInteger idOne = [result.items[i][@\"id\"] integerValue];\n                NSInteger idTwo = [result.items[i+1][@\"id\"] integerValue];\n                XCTAssertTrue(idOne < idTwo, @\"Incorrect order\");\n            }\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n\n        self.done = NO;\n        query = self.table.query;\n        [query orderByAscending:MSSystemColumnVersion];\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            for (NSUInteger i = 0; i < result.items.count - 1; i++) {\n                NSInteger idOne = [result.items[i][@\"id\"] integerValue];\n                NSInteger idTwo = [result.items[i+1][@\"id\"] integerValue];\n                XCTAssertTrue(idOne < idTwo, @\"Incorrect order\");\n            }\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        // Filtering\n        self.done = NO;\n        query = [self.table queryWithPredicate:[NSPredicate predicateWithFormat:@\"__createdAt >= %@\", savedItems[3][MSSystemColumnCreatedAt]]];\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            XCTAssertTrue(result.items.count == 2, @\"Incorrect results\");\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n\n        self.done = NO;\n        query = [self.table queryWithPredicate:[NSPredicate predicateWithFormat:@\"__updatedAt >= %@\", savedItems[3][MSSystemColumnUpdatedAt]]];\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            XCTAssertTrue(result.items.count == 2, @\"Incorrect results\");\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        query = [self.table queryWithPredicate:[NSPredicate predicateWithFormat:@\"__version == %@\", savedItems[3][MSSystemColumnVersion]]];\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            XCTAssertTrue(result.items.count == 1, @\"Incorrect results\");\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        query = self.table.query;\n        query.selectFields = @[@\"id\", MSSystemColumnCreatedAt];\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            for (NSDictionary *item in result.items) {\n                XCTAssertNotNil(item[MSSystemColumnCreatedAt], @\"Missing createdAt\");\n            }\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        query = self.table.query;\n        query.selectFields = @[@\"id\", MSSystemColumnUpdatedAt];\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            for (NSDictionary *item in result.items) {\n                XCTAssertNotNil(item[MSSystemColumnUpdatedAt], @\"Missing updatedAt\");\n            }\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n        \n        self.done = NO;\n        query = self.table.query;\n        query.selectFields = @[@\"id\", MSSystemColumnVersion];\n        [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n            for (NSDictionary *item in result.items) {\n                XCTAssertNotNil(item[MSSystemColumnVersion], @\"Missing version\");\n            }\n            self.done = YES;\n        }];\n        [self waitForTest:30.0];\n    }\n}\n\n-(void) testUpdateAsyncWithWithMergeConflict\n{\n    NSDictionary *item = @{ @\"id\": @\"an id\", @\"string\": @\"a value\" };\n    self.table.systemProperties = MSSystemPropertyAll;\n    __block NSDictionary *savedItem;\n    [self.table insert:item completion:^(NSDictionary *item, NSError *error) {\n        savedItem = item;\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n\n    self.done = NO;\n    __block NSDictionary *savedItem2;\n    [savedItem setValue:@\"Hello!\" forKey:@\"string\"];\n    [self.table update:savedItem completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"An error occcurred\");\n        XCTAssertFalse([item[@\"__verison\"] isEqualToString:savedItem[MSSystemColumnVersion]], @\"Version should have changed\");\n        savedItem2 = item;\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n\n    self.done = NO;\n    [savedItem setValue:@\"But Wait!\" forKey:@\"string\"];\n    [self.table update:savedItem completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(error, @\"An error should have occcurred\");\n        XCTAssertEqual([@MSErrorPreconditionFailed integerValue], error.code, @\"Should have had precondition failed error\");\n        \n        NSHTTPURLResponse *response = (error.userInfo)[MSErrorResponseKey];\n        XCTAssertNotNil(response, @\"response should have been available\");\n        XCTAssertEqual([@412 integerValue], response.statusCode, @\"response should have been pre condition failed\");\n        \n        NSDictionary *actualItem = (error.userInfo)[MSErrorServerItemKey];\n        XCTAssertEqualObjects(actualItem[MSSystemColumnVersion], savedItem2[MSSystemColumnVersion], @\"Unexpected version\");\n        XCTAssertEqualObjects(actualItem[@\"string\"], @\"Hello!\", @\"Unexpected value\");\n        \n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n    \n    self.done = NO;\n    [savedItem2 setValue:@\"Hello Again!\" forKey:@\"string\"];\n    [self.table update:savedItem2 completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error, @\"An error occcurred\");\n        XCTAssertFalse([item[@\"__verison\"] isEqualToString:savedItem2[MSSystemColumnVersion]], @\"Version should have changed\");\n        self.done = YES;\n    }];\n    [self waitForTest:30.0];\n}\n\n\n#pragma mark Test Utilities\n\n\n-(BOOL) waitForTest:(NSTimeInterval)testDuration\n{\n    NSDate *timeoutAt = [NSDate dateWithTimeIntervalSinceNow:testDuration];\n    while (!self.done) {\n        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode\n                                 beforeDate:timeoutAt];\n        if([timeoutAt timeIntervalSinceNow] <= 0.0) {\n            break;\n        }\n    };\n    return self.done;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSTableOperationErrorTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <UIKit/UIKit.h>\n#import <XCTest/XCTest.h>\n\n#import \"MSClient.h\"\n#import \"MSCoreDataStore.h\"\n#import \"MSCoreDataStore+TestHelper.h\"\n#import \"MSJSONSerializer.h\"\n#import \"MSOfflinePassthroughHelper.h\"\n#import \"MSSyncContext.h\"\n#import \"MSTableOperationInternal.h\"\n#import \"MSTableOperationError.h\"\n#import \"TodoItem.h\"\n\n@interface MSTableOperationErrorTests : XCTestCase {\n    MSClient *client;\n    BOOL done;\n    MSOfflinePassthroughHelper *offline;\n    NSManagedObjectContext *context;\n}\n@end\n\n\n#pragma mark * Setup and TearDown\n\n@implementation MSTableOperationErrorTests\n\n-(void) setUp\n{\n    NSLog(@\"%@ setUp\", self.name);\n    \n    client = [MSClient clientWithApplicationURLString:@\"https://someUrl/\"];\n    context = [MSCoreDataStore inMemoryManagedObjectContext];\n    offline = [[MSOfflinePassthroughHelper alloc] initWithManagedObjectContext:context];\n    \n    // Enable offline mode\n    client.syncContext = [[MSSyncContext alloc] initWithDelegate:offline dataSource:offline callback:nil];\n    \n    done = NO;\n}\n\n-(void) tearDown\n{\n    NSLog(@\"%@ tearDown\", self.name);\n}\n\n-(void) testBasicInit {\n    MSTableOperation *tableOp = [[MSTableOperation alloc] initWithTable:@\"TodoItem\" type:MSTableOperationInsert itemId:@\"ABC\"];\n    NSDictionary *item = @{@\"id\": @\"ABC\", @\"text\": @\"item one\", @\"complete\": @NO};\n    \n    NSError *error = [NSError errorWithDomain:MSErrorDomain\n                                         code:MSErrorPreconditionFailed\n                                     userInfo:@{NSLocalizedDescriptionKey: @\"Insert error...\"}];\n    \n    MSTableOperationError *opError = [[MSTableOperationError alloc] initWithOperation:tableOp\n                                                                                 item:item\n                                                                              context:client.syncContext\n                                                                                error:error];\n    XCTAssertNotNil(opError);\n    \n    XCTAssertEqualObjects(opError.itemId, @\"ABC\");\n    XCTAssertEqualObjects(opError.table, @\"TodoItem\");\n    XCTAssertEqual(opError.code, MSErrorPreconditionFailed);\n    XCTAssertEqualObjects(opError.domain, MSErrorDomain);\n    XCTAssertEqualObjects(opError.description, @\"Insert error...\");\n}\n\n-(void) testSerializedInit {\n    MSJSONSerializer *serializer = [MSJSONSerializer new];\n    NSDictionary *details = @{\n        @\"id\": @\"1-2-3\",\n        @\"code\": @MSErrorPreconditionFailed,\n        @\"domain\": MSErrorDomain,\n        @\"description\": @\"Insert error...\",\n        @\"table\": @\"TodoItem\",\n        @\"operation\": [NSNumber numberWithInteger:MSTableOperationInsert],\n        @\"itemId\": @\"ABC\",\n        @\"item\": @{ @\"id\":@\"ABC\", @\"text\":@\"one\", @\"complete\":@NO },\n        @\"serverItem\": @{ @\"id\":@\"ABC\", @\"text\":@\"two\", @\"complete\":@YES },\n        @\"statusCode\": @312\n    };\n    NSData *data = [serializer dataFromItem:details idAllowed:YES ensureDictionary:NO removeSystemProperties:NO orError:nil];\n    \n    NSDictionary *serializedError = @{\n        @\"id\": @\"1-2-3\",\n        @\"properties\": data\n    };\n    \n    MSTableOperationError *opError = [[MSTableOperationError alloc] initWithSerializedItem:serializedError\n                                                                                   context:client.syncContext];\n    \n    XCTAssertNotNil(opError);\n    XCTAssertEqualObjects(opError.itemId, @\"ABC\");\n    XCTAssertEqualObjects(opError.table, @\"TodoItem\");\n    XCTAssertEqual(opError.code, MSErrorPreconditionFailed);\n    XCTAssertEqualObjects(opError.domain, MSErrorDomain);\n    XCTAssertEqualObjects(opError.description, @\"Insert error...\");\n}\n\n-(void) testCancelAndDiscard {\n    NSDictionary *item = @{@\"id\": @\"ABC\", @\"text\": @\"initial value\" };\n    MSTableOperation *tableOp = [self createPendingOperationForItem:item];\n    MSTableOperationError *opError = [[MSTableOperationError alloc] initWithOperation:tableOp\n                                                                                 item:item\n                                                                              context:client.syncContext\n                                                                                error:nil];\n    // Cancel our operation now\n    XCTestExpectation *cancelExpectation = [self expectationWithDescription:@\"CancelAndDiscard\"];\n    [opError cancelOperationAndDiscardItemWithCompletion:^(NSError *error) {\n        XCTAssertNil(error);\n        \n        [cancelExpectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Verify item is no longer in the local store layer\n    NSError *error;\n    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@\"TodoItem\"];\n    NSArray *allTodos = [context executeFetchRequest:fetchRequest error:&error];\n    XCTAssertNil(error);\n    XCTAssertEqual(allTodos.count, 0);\n    \n    // Verify operation is not in the local store layer\n    fetchRequest = [NSFetchRequest fetchRequestWithEntityName:offline.operationTableName];\n    NSArray *allOps = [context executeFetchRequest:fetchRequest error:&error];\n    XCTAssertNil(error);\n    XCTAssertEqual(allOps.count, 0);\n}\n\n-(void) testCancelAndUpdate {\n    NSDictionary *item = @{@\"id\": @\"ABC\", @\"text\": @\"initial value\" };\n    MSTableOperation *tableOp = [self createPendingOperationForItem:item];\n    MSTableOperationError *opError = [[MSTableOperationError alloc] initWithOperation:tableOp\n                                                                                 item:item\n                                                                              context:client.syncContext\n                                                                                error:nil];\n    \n    // Cancel our pending operation and update the stored value\n    XCTestExpectation *expectation = [self expectationWithDescription:@\"CancelAndUpdateOperation\"];\n    NSDictionary *newItem = @{ @\"id\": @\"ABC\", @\"text\": @\"value two\" };\n    [opError cancelOperationAndUpdateItem:newItem completion:^(NSError *error) {\n        XCTAssertNil(error);\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Verify item is updated in the local store layer\n    NSError *error;\n    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@\"TodoItem\"];\n    NSArray *allTodos = [context executeFetchRequest:fetchRequest error:&error];\n    XCTAssertNil(error);\n    \n    XCTAssertEqual(allTodos.count, 1);\n    TodoItem *updatedItem = allTodos[0];\n    XCTAssertEqualObjects(updatedItem.text, @\"value two\");\n    \n    // Verify operation is not in the local store layer\n    fetchRequest = [NSFetchRequest fetchRequestWithEntityName:offline.operationTableName];\n    NSArray *allOps = [context executeFetchRequest:fetchRequest error:&error];\n    XCTAssertNil(error);\n    XCTAssertEqual(allOps.count, 0);\n    \n}\n\n-(void) testCancelAndUpdate_NoItem {\n    NSDictionary *item = @{@\"id\": @\"ABC\", @\"text\": @\"initial value\" };\n    MSTableOperation *tableOp = [self createPendingOperationForItem:item];\n    MSTableOperationError *opError = [[MSTableOperationError alloc] initWithOperation:tableOp\n                                                                                 item:item\n                                                                              context:client.syncContext\n                                                                                error:nil];\n    \n    // Cancel our pending operation and update the stored value\n    XCTestExpectation *expectation = [self expectationWithDescription:@\"CancelAndUpdateOperation\"];\n    [opError cancelOperationAndUpdateItem:nil completion:^(NSError *error) {\n        XCTAssertNotNil(error);\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n    \n    // Verify operation is still in the local store layer\n    NSError *error = nil;\n    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:offline.operationTableName];\n    NSArray *allOps = [context executeFetchRequest:fetchRequest error:&error];\n    XCTAssertNil(error);\n    XCTAssertEqual(allOps.count, 1);\n    \n}\n\n- (MSTableOperation *) createPendingOperationForItem:(NSDictionary *)item\n{\n    MSSyncTable *table = [client syncTableWithName:@\"TodoItem\"];\n    \n    XCTestExpectation *expectation = [self expectationWithDescription:@\"UpsertRecord\"];\n    [table update:item completion:^(NSError *error) {\n        XCTAssertNil(error);\n        [expectation fulfill];\n    }];\n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n\n    // To be safe, verify operation is in the local store layer\n    NSError *error;\n    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:offline.operationTableName];\n    NSArray *allOps = [context executeFetchRequest:fetchRequest error:&error];\n    XCTAssertNil(error);\n    XCTAssertEqual(allOps.count, 1);\n    \n    // Create a op that matches what we just did & fake an error\n    MSTableOperation *tableOp = [[MSTableOperation alloc] initWithTable:@\"TodoItem\" type:MSTableOperationInsert itemId:@\"ABC\"];\n    tableOp.operationId = [[allOps[0] valueForKey:@\"id\"] integerValue];\n\n    return tableOp;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSTableOperationTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSTableOperation.h\"\n#import \"MSTableOperationInternal.h\"\n@interface MSTableOperationTests : XCTestCase {\n    BOOL done;\n}\n@end\n\n@implementation MSTableOperationTests\n\n- (void)setUp\n{\n    [super setUp];\n    // Put setup code here. This method is called before the invocation of each test method in the class.\n}\n\n- (void)tearDown\n{\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testOperationAbortSuccess\n{\n    NSOperation *baseOperation = [[NSOperation alloc] init];\n    MSTableOperation *tableOperation = [[MSTableOperation alloc] initWithTable:@\"testTable\" type:MSTableOperationInsert itemId:@\"ABC\"];\n    tableOperation.pushOperation = baseOperation;\n    \n    [tableOperation cancelPush];\n    \n    XCTAssertTrue(baseOperation.isCancelled, @\"NSOperation was not cancelled\");\n}\n\n- (void)testOperationSerializationSuccess\n{\n    MSTableOperation *originalTableOperation = [[MSTableOperation alloc] initWithTable:@\"testTable\" type:MSTableOperationInsert itemId:@\"ABC\"];\n    originalTableOperation.operationId = 7;\n    originalTableOperation.type = MSTableOperationInsert;\n    originalTableOperation.item = @{ @\"id\" : @1, @\"column1\": @NO, @\"column2\": @\"yes\" };\n    \n    NSDictionary *info = [originalTableOperation serialize];\n    MSTableOperation *tableOperation = [[MSTableOperation alloc] initWithItem:info];\n    \n    XCTAssertEqual((int)tableOperation.operationId, 7, @\"Incorrect id\");\n    XCTAssertEqual(tableOperation.tableName, @\"testTable\", @\"Incorrect table name\");\n    XCTAssertEqual(tableOperation.itemId, @\"ABC\", @\"Incorrect table name\");\n    XCTAssertEqual(tableOperation.type, MSTableOperationInsert, @\"incorrect type\");\n    XCTAssertNil(tableOperation.item, @\"Did not expect an item\");\n}\n\n- (void)testDeleteOperationSerialization_KeepsItem_Success\n{\n    MSTableOperation *originalTableOperation = [[MSTableOperation alloc] initWithTable:@\"testTable\" type:MSTableOperationInsert itemId:@\"ABC\"];\n    originalTableOperation.operationId = 7;\n    originalTableOperation.type = MSTableOperationDelete;\n    originalTableOperation.item = @{ @\"id\" : @1, @\"column1\": @YES, @\"column2\": @\"Hello\" };\n    \n    NSDictionary *info = [originalTableOperation serialize];\n    MSTableOperation *tableOperation = [[MSTableOperation alloc] initWithItem:info];\n    \n    XCTAssertEqual((int)tableOperation.operationId, 7, @\"Incorrect id\");\n    XCTAssertEqual(tableOperation.tableName, @\"testTable\", @\"Incorrect table name\");\n    XCTAssertEqual(tableOperation.itemId, @\"ABC\", @\"Incorrect table name\");\n    XCTAssertEqual(tableOperation.type, MSTableOperationDelete, @\"incorrect type\");\n    XCTAssertNotNil(tableOperation.item, @\"Expected an item\");\n    XCTAssertEqualObjects(tableOperation.item[@\"id\"], @1);\n    XCTAssertEqualObjects(tableOperation.item[@\"column1\"], @YES);\n    XCTAssertEqualObjects(tableOperation.item[@\"column2\"], @\"Hello\");\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSTableTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSTable.h\"\n#import \"MSTestFilter.h\"\n#import \"MSQuery.h\"\n#import \"MSTable+MSTableTestUtilities.h\"\n#import \"MSSDKFeatures.h\"\n\n@interface MSTableTests : XCTestCase {\n    MSClient *client;\n    BOOL done;\n}\n\n@end\n\n\n@implementation MSTableTests\n\n\n#pragma mark * Setup and TearDown\n\n\n-(void) setUp\n{\n    NSLog(@\"%@ setUp\", self.name);\n    \n    client = [MSClient clientWithApplicationURLString:@\"https://someUrl/\"];\n    \n    done = NO;\n}\n\n-(void) tearDown\n{\n    NSLog(@\"%@ tearDown\", self.name);\n}\n\n\n#pragma mark * Init Method Tests\n\n\n-(void) testInitWithNameAndClient\n{\n    MSTable *table = [[MSTable alloc] initWithName:@\"SomeName\" client:client];\n    \n    XCTAssertNotNil(table, @\"table should not be nil.\");\n    \n    XCTAssertNotNil(table.client, @\"table.client should not be nil.\");\n    XCTAssertTrue([table.name isEqualToString:@\"SomeName\"],\n                 @\"table.name shouldbe 'SomeName'\");\n}\n\n-(void) testInitWithNameAndClientAllowsNil\n{\n    MSTable *table = [[MSTable alloc] initWithName:nil client:nil];\n    \n    XCTAssertNotNil(table, @\"table should not be nil.\");\n    \n    XCTAssertNil(table.client, @\"table.client should be nil.\");\n    XCTAssertNil(table.name, @\"table.name should be nil.\");\n}\n\n\n#pragma mark * Insert Method Tests\n\n\n// See the WindowsAzureMobileServicesFunctionalTests.m tests for additional\n// insert tests that require a working Microsoft Azure Mobile Service.\n\n-(void) testInsertItem\n{\n    XCTestExpectation *testExpectation = [self expectationWithDescription:@\"Insert: Success\"];\n    \n    NSString *stringData = @\"{\\\"id\\\": 120, \\\"name\\\":\\\"test name\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:stringData];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"name\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertNotNil(item);\n        XCTAssertEqualObjects(item[@\"name\"], @\"test name\", @\"item should have been inserted.\");\n        XCTAssertEqualObjects(item[@\"id\"], @120);\n        \n        [testExpectation fulfill];\n    }];\n        \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertItemWithNilItem\n{\n    XCTestExpectation *testExpectation = [self expectationWithDescription:@\"Insert: Nil Item\"];\n    \n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Insert the item\n    [todoTable insert:nil completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(item);\n        XCTAssertNotNil(error);\n        XCTAssertEqual(error.domain, MSErrorDomain, @\"error domain should have been MSErrorDomain.\");\n        XCTAssertEqual(error.code, MSExpectedItemWithRequest, @\"error code should have been MSExpectedItemWithRequest.\");\n        \n        NSString *description = error.localizedDescription;\n        XCTAssertEqualObjects(description, @\"No item was provided.\", @\"description was: %@\", description);\n        \n        [testExpectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertItemWithInvalidItem\n{\n    XCTestExpectation *testExpectation = [self expectationWithDescription:@\"Insert: Invalid Item\"];\n    \n    MSTable *todoTable = [client tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:0.0];\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(item);\n        XCTAssertNotNil(error);\n        XCTAssertEqual(error.domain, MSErrorDomain, @\"error domain should have been MSErrorDomain.\");\n        XCTAssertEqual(error.code, MSInvalidItemWithRequest, @\"error code should have been MSInvalidItemWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertEqualObjects(description, @\"The item provided was not valid.\", @\"description was: %@\", description);\n        \n        [testExpectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertItemWithIdZero\n{\n    XCTestExpectation *testExpectation = [self expectationWithDescription:@\"Insert: Id is 0\"];\n    \n    NSString* stringData = @\"{\\\"id\\\": 120, \\\"name\\\":\\\"test name\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:stringData];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\":@0, @\"name\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item,);\n        XCTAssertNil(error);\n        \n        [testExpectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertItemWithStringId\n{\n    XCTestExpectation *testExpectation = [self expectationWithDescription:@\"Insert: String Id\"];\n    \n    NSString* stringData = @\"{\\\"id\\\": \\\"120\\\", \\\"name\\\":\\\"test name\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:stringData];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\":@\"120\", @\"name\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item);\n        XCTAssertNil(error);\n        \n        [testExpectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertItemWithNullId\n{\n    XCTestExpectation *testExpectation = [self expectationWithDescription:@\"Insert: Null Id\"];\n    \n    NSString* stringData = @\"{\\\"id\\\": \\\"120\\\", \\\"name\\\":\\\"test name\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:stringData];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\":[NSNull null], @\"name\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item);\n        XCTAssertNil(error);\n        \n        [testExpectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertItemWithEmptyStringId\n{\n    XCTestExpectation *testExpectation = [self expectationWithDescription:@\"Insert: Empty String Id\"];\n    \n    NSString* stringData = @\"{\\\"id\\\": \\\"120\\\", \\\"name\\\":\\\"test name\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:stringData];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\":@\"\", @\"name\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item);\n        XCTAssertNil(error);\n        \n        [testExpectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertHasContentType\n{\n    XCTestExpectation *testExpectation = [self expectationWithDescription:@\"Insert: Content Type\"];\n    \n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:400];\n    \n    __block NSString *contentType = nil;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        contentType = [request valueForHTTPHeaderField:@\"Content-Type\"];\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    id item = @{ @\"id\":@0, @\"name\":@\"test name\" };\n    \n    // insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(contentType, @\"Content-Type should not have been nil.\");\n        \n        [testExpectation fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n-(void) testInsertStripsSystemProperties\n{\n    NSString* stringData = @\"{\\\"id\\\": \\\"A\\\", \\\"name\\\":\\\"test name\\\", \\\"__version\\\":\\\"ABC\\\", \\\"__createdAt\\\":\\\"12-01-01\\\",\\\"__unknown\\\":123}\";\n    \n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:stringData];\n    MSInspectRequestBlock inspectBlock = ^NSURLRequest *(NSURLRequest *request) {\n         testFilter.responseToUse = [[NSHTTPURLResponse alloc]\n                                    initWithURL:request.URL\n                                    statusCode:200\n                                    HTTPVersion:nil headerFields:nil];\n        \n        return request;\n    };\n    testFilter.onInspectRequest =  [inspectBlock copy];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"name\":@\"test name\" };\n    \n    // Insert the item\n    XCTestExpectation *testExpectation1 = [self expectationWithDescription:@\"Insert: No properties\"];\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertNotNil(item);\n\n        XCTAssertNil(item[MSSystemColumnVersion]);\n        XCTAssertNil(item[MSSystemColumnCreatedAt]);\n        XCTAssertNil(item[@\"__unknown\"]);\n\n        [testExpectation1 fulfill];\n    }];\n    \n    // Allow some through table enum\n    XCTestExpectation *testExpectation2 = [self expectationWithDescription:@\"Insert: Created & Version\"];\n    todoTable.systemProperties = MSSystemPropertyCreatedAt | MSSystemPropertyVersion;\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertNotNil(item);\n        \n        XCTAssertNotNil(item[MSSystemColumnVersion]);\n        XCTAssertNotNil(item[MSSystemColumnCreatedAt]);\n        XCTAssertNil(item[@\"__unknown\"]);\n        \n        [testExpectation2 fulfill];\n    }];\n    \n    // Allow all now\n    XCTestExpectation *testExpectation3 = [self expectationWithDescription:@\"Insert: All\"];\n    todoTable.systemProperties = MSSystemPropertyAll;\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertNotNil(item);\n        \n        XCTAssertNotNil(item[MSSystemColumnVersion]);\n        XCTAssertNotNil(item[MSSystemColumnCreatedAt]);\n        XCTAssertNotNil(item[@\"__unknown\"]);\n        \n        [testExpectation3 fulfill];\n    }];\n    \n    // Now using the querystring instead\n    XCTestExpectation *testExpectation4 = [self expectationWithDescription:@\"Insert: Keep Created By Querystring\"];\n    todoTable.systemProperties = MSSystemPropertyNone;\n    [todoTable insert:item\n           parameters:@{@\"__systemProperties\":MSSystemColumnCreatedAt}\n           completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertNotNil(item);\n        \n        XCTAssertNil(item[MSSystemColumnVersion]);\n        XCTAssertNotNil(item[MSSystemColumnCreatedAt]);\n        XCTAssertNil(item[@\"__unknown\"]);\n        \n        [testExpectation4 fulfill];\n    }];\n    \n    // And check int Ids keep them all still\n    XCTestExpectation *testExpectation5 = [self expectationWithDescription:@\"Insert: Int Ids Keep All\"];\n    stringData = @\"{\\\"id\\\": 123, \\\"name\\\":\\\"test name\\\", \\\"__version\\\":\\\"ABC\\\", \\\"__createdAt\\\":\\\"12-01-01\\\",\\\"__unknown\\\":123}\";\n    testFilter.dataToUse = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertNotNil(item);\n\n        XCTAssertNotNil(item[MSSystemColumnVersion]);\n        XCTAssertNotNil(item[MSSystemColumnCreatedAt]);\n        XCTAssertNotNil(item[@\"__unknown\"]);\n\n        [testExpectation5 fulfill];\n    }];\n    \n    [self waitForExpectationsWithTimeout:1.0 handler:nil];\n}\n\n\n#pragma mark * Update Method Tests\n\n\n// See the WindowsAzureMobileServicesFunctionalTests.m tests for additional\n// update tests that require a working Microsoft Azure Mobile Service.\n\n-(void) testUpdateItemWithIntId\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    NSString* stringData = @\"{\\\"id\\\":120, \\\"name\\\":\\\"test name updated\\\"}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    testFilter.responseToUse = response;\n    testFilter.dataToUse = data;\n    testFilter.ignoreNextFilter = YES;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\":@120, @\"name\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item, @\"item should not have  been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue([[item valueForKey:@\"name\"] isEqualToString:@\"test name updated\"],\n                       @\"item should have been updated.\");\n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testUpdateItemWithStringId\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    NSString* stringData = @\"{\\\"id\\\":\\\"120\\\", \\\"name\\\":\\\"test name updated\\\"}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    testFilter.responseToUse = response;\n    testFilter.dataToUse = data;\n    testFilter.ignoreNextFilter = YES;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\":@\"120\", @\"name\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item, @\"item should not have  been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue([[item valueForKey:@\"name\"] isEqualToString:@\"test name updated\"],\n                     @\"item should have been updated.\");\n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testUpdateItemWithNilItem\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Update the item\n    [todoTable update:nil completion:^(NSDictionary *item, NSError *error) {\n    \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSExpectedItemWithRequest,\n                     @\"error code should have been MSExpectedItemWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"No item was provided.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testUpdateItemWithInvalidItem\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    id item = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:0.0];\n    \n    // Update the item\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n        \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemWithRequest,\n                     @\"error code should have been MSInvalidItemWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided was not valid.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testUpdateItemWithNoItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write unit tests!\", @\"complete\": @(NO) };\n    \n    // Update the item\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n  \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSMissingItemIdWithRequest,\n                     @\"error code should have been MSMissingItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have an id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testUpdateItemWithEmptyStringItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write unit tests!\", @\"id\":@\"\" };\n    \n    // Update the item\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n    \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testUpdateItemWithwhiteSpaceItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write unit tests!\", @\"id\":@\"  \" };\n    \n    // Update the item\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n        \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testUpdateItemWithItemIdZero\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write unit tests!\", @\"id\":@0 };\n    \n    // Update the item\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n        \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testUpdateStripsSystemProperties\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    MSInspectRequestBlock inspectBlock = ^NSURLRequest *(NSURLRequest *request) {\n        testFilter.responseToUse = [[NSHTTPURLResponse alloc]\n                                    initWithURL:request.URL\n                                    statusCode:200\n                                    HTTPVersion:nil headerFields:@{@\"Etag\":@\"\\\"AAAAAAAALNU=\\\"\"}];\n        \n        return request;\n    };\n    \n    NSString* stringData = @\"{\\\"id\\\": \\\"A\\\", \\\"name\\\":\\\"test name\\\", \\\"__version\\\":\\\"ABC\\\", \\\"__createdAt\\\":\\\"12-01-01\\\",\\\"__unknown\\\":123}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    //testFilter.responseToUse = response;\n    testFilter.dataToUse = data;\n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest =  [inspectBlock copy];\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\": @\"A\", @\"name\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertNotNil(item);\n        \n        XCTAssertNil(item[MSSystemColumnVersion]);\n        XCTAssertNil(item[MSSystemColumnCreatedAt]);\n        XCTAssertNil(item[@\"__unknown\"]);\n        \n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    done = NO;\n    \n    // Allow some through table enum\n    todoTable.systemProperties = MSSystemPropertyCreatedAt | MSSystemPropertyVersion;\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertNotNil(item);\n        \n        XCTAssertNotNil(item[MSSystemColumnVersion]);\n        XCTAssertNotNil(item[MSSystemColumnCreatedAt]);\n        XCTAssertNil(item[@\"__unknown\"]);\n        \n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    done = NO;\n    \n    // Allow all now\n    todoTable.systemProperties = MSSystemPropertyAll;\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertNotNil(item);\n        \n        XCTAssertNotNil(item[MSSystemColumnVersion]);\n        XCTAssertNotNil(item[MSSystemColumnCreatedAt]);\n        XCTAssertNotNil(item[@\"__unknown\"]);\n        \n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    done = NO;\n    \n    // Now using the querystring instead\n    todoTable.systemProperties = MSSystemPropertyNone;\n    [todoTable update:item\n           parameters:@{@\"__systemProperties\":MSSystemColumnCreatedAt}\n           completion:^(NSDictionary *item, NSError *error) {\n               XCTAssertNil(error);\n               XCTAssertNotNil(item);\n               \n               XCTAssertNil(item[MSSystemColumnVersion]);\n               XCTAssertNotNil(item[MSSystemColumnCreatedAt]);\n               XCTAssertNil(item[@\"__unknown\"]);\n               \n               done = YES;\n           }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    done = NO;\n    \n    // And check int Ids keep them all still\n    stringData = @\"{\\\"id\\\": 123, \\\"name\\\":\\\"test name\\\", \\\"__version\\\":\\\"ABC\\\", \\\"__createdAt\\\":\\\"12-01-01\\\",\\\"__unknown\\\":123}\";\n    item = @{ @\"id\": @123, @\"name\":@\"test name\" };\n    testFilter.dataToUse = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertNotNil(item);\n        \n        XCTAssertNotNil(item[MSSystemColumnVersion]);\n        XCTAssertNotNil(item[MSSystemColumnCreatedAt]);\n        XCTAssertNotNil(item[@\"__unknown\"]);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n\n#pragma mark * Delete Method Tests\n\n\n// See the WindowsAzureMobileServicesFunctionalTests.m tests for additional\n// delete tests that require a working Microsoft Azure Mobile Service.\n\n\n-(void) testDeleteItemWithIntId\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\":@120, @\"name\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable delete:item completion:^(id itemId, NSError *error) {\n        XCTAssertNotNil(itemId, @\"item should not have  been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue([itemId isEqualToNumber:@120],\n                     @\"item should have been inserted.\");\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithStringId\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\":@\"120\", @\"name\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable delete:item completion:^(id itemId, NSError *error) {\n        XCTAssertNotNil(itemId, @\"item should not have  been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue([itemId isEqualToString:@\"120\"],\n                     @\"item should have been inserted.\");\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithStringIdConflict\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    NSString* stringData = @\"{\\\"id\\\": 120, \\\"name\\\":\\\"test name\\\"}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:412\n                                   HTTPVersion:nil headerFields:nil];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    testFilter.dataToUse = data;\n    \n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        NSString *ifMatchHeader = request.allHTTPHeaderFields[@\"If-Match\"];\n        XCTAssertEqualObjects(ifMatchHeader, @\"\\\"123\\\"\", @\"Unexpected header\");\n        return request;\n    };\n    \n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\":@\"120\", MSSystemColumnVersion:@\"123\", @\"name\":@\"test name\" };\n    \n    // Test deletion of the item\n    [todoTable delete:item completion:^(id itemId, NSError *error) {\n        XCTAssertNil(itemId, @\"item should have been nil.\");\n        XCTAssertEqual(error.code, [@MSErrorPreconditionFailed integerValue], @\"Error should be precondition\");\n        NSDictionary* serverItem =(error.userInfo)[MSErrorServerItemKey];\n        XCTAssertEqualObjects(serverItem[@\"id\"], @120, @\"id portion of ServerItem was not expected value\");\n        XCTAssertEqualObjects(serverItem[@\"name\"], @\"test name\", @\"name portion of ServerItem was not expected value\");\n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithStringIdConflictWithEmptyJsonError\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    NSString* stringData = @\"{}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:412\n                                   HTTPVersion:nil headerFields:nil];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    testFilter.dataToUse = data;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\":@\"120\", @\"name\":@\"test name\" };\n    \n    // Test deletion of the item\n    [todoTable delete:item completion:^(id itemId, NSError *error) {\n        XCTAssertNil(itemId, @\"item should have been nil.\");\n        XCTAssertEqual(error.code, [@MSErrorPreconditionFailed integerValue], @\"Error should be precondition\");\n        NSDictionary* serverItem =(error.userInfo)[MSErrorServerItemKey];\n        XCTAssertTrue(serverItem.count == 0, @\"empty JSON object error has no members in userInfo\");\n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithNilItem\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Update the item\n    [todoTable delete:nil completion:^(id itemId, NSError *error) {\n  \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSExpectedItemWithRequest,\n                     @\"error code should have been MSExpectedItemWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"No item was provided.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithInvalidItem\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    id item = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:0.0];\n    \n    // Delete the item\n    [todoTable delete:item completion:^(id itemId, NSError *error) {\n        \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemWithRequest,\n                     @\"error code should have been MSInvalidItemWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided was not valid.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithNoItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write unit tests!\", @\"complete\": @(NO) };\n    \n    // Delete the item\n    [todoTable delete:item completion:^(id itemId, NSError *error) {\n    \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSMissingItemIdWithRequest,\n                     @\"error code should have been MSMissingItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have an id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithInvalidItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write unit tests!\", @\"id\":@0 };\n    \n    // Delete the item\n    [todoTable delete:item completion:^(id itemId, NSError *error) {\n        \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithEmptyStringId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write unit tests!\", @\"id\":@\"\" };\n    \n    // Delete the item\n    [todoTable delete:item completion:^(id itemId, NSError *error) {\n        \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithWhiteSpaceId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write unit tests!\", @\"id\":@\"  \" };\n    \n    // Delete the item\n    [todoTable delete:item completion:^(id itemId, NSError *error) {\n        \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithItemIdZero\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write unit tests!\", @\"id\":@0 };\n    \n    // Delete the item\n    [todoTable delete:item completion:^(id itemId, NSError *error) {\n        \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n}\n\n-(void) testDeleteItemWithIdwithIntId\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n\n    // Insert the item\n    [todoTable deleteWithId:@120 completion:^(id itemId, NSError *error) {\n        XCTAssertNotNil(itemId, @\"item should not have  been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue([itemId isEqualToNumber:@120],\n                     @\"item should have been inserted.\");\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithIdwithStringId\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Insert the item\n    [todoTable deleteWithId:@\"120\" completion:^(id itemId, NSError *error) {\n        XCTAssertNotNil(itemId, @\"item should not have  been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue([itemId isEqualToString:@\"120\"],\n                     @\"item should have been inserted.\");\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithIdWithNoItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n\n    // Delete the item\n    [todoTable deleteWithId:nil completion:^(id itemId, NSError *error) {\n    \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSExpectedItemIdWithRequest,\n                     @\"error code should have been MSExpectedItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item id was not provided.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithIdWithInvalidItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    id itemId = [[NSDate alloc] initWithTimeIntervalSince1970:0.0];\n    \n    // Delete the item\n    [todoTable deleteWithId:itemId completion:^(id itemId, NSError *error) {\n        \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithIdWithIdZero\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n        \n    // Delete the item\n    [todoTable deleteWithId:@0 completion:^(id itemId, NSError *error) {\n        \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithIdWithEmptyStringId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Delete the item\n    [todoTable deleteWithId:@\"\" completion:^(id itemId, NSError *error) {\n        \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithIdWithWhiteSpaceId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Delete the item\n    [todoTable deleteWithId:@\" \" completion:^(id itemId, NSError *error) {\n        \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testDeleteDoesNotHaveContentType\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    __block NSString *contentType = nil;\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:400\n                                   HTTPVersion:nil headerFields:nil];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        contentType = [request valueForHTTPHeaderField:@\"Content-Type\"];\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"todoItem\"];\n    \n    // delete the item\n    [todoTable deleteWithId:@5 completion:^(id itemId, NSError *error) {\n  \n        XCTAssertNil(contentType, @\"Content-Type should not have been set.\");\n    \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n\n#pragma mark * UndeleteItem Method Tests\n\n\n-(void) testUnDeleteItemWithStringId\n{\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:@\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\"];\n\n    __block NSURLRequest *actualRequest;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\":@\"ID-ABC\", @\"name\":@\"test name\" };\n    \n    // Insert the item\n    [todoTable undelete:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertEqualObjects(actualRequest.HTTPMethod, @\"POST\", @\"Expected undelete to send a POST, not %@\", actualRequest.HTTPMethod);\n        XCTAssertEqualObjects(actualRequest.URL.absoluteString, @\"https://someUrl/tables/NoSuchTable/ID-ABC\", @\"Unexpected URL\");\n        \n        XCTAssertNil(error, @\"error should have been nil.\");\n        \n        XCTAssertNotNil(item, @\"item should not have  been nil.\");\n        XCTAssertEqualObjects(item[@\"id\"], @\"an id\", @\"item id should have come from server.\");\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testUnDeleteItemWithParametersWithStringId\n{\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:@\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\", \\\"__version\\\":\\\"def\\\"}\"];\n    \n    __block NSURLRequest *actualRequest;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    id item = @{ @\"id\":@\"ID-ABC\", @\"name\":@\"test name\", MSSystemColumnVersion: @\"abc\" };\n    \n    // Insert the item\n    [todoTable undelete:item parameters:@{@\"extra-extra\": @\"read-all-about-it\"} completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertEqualObjects(actualRequest.HTTPMethod, @\"POST\", @\"Expected undelete to send a POST, not %@\", actualRequest.HTTPMethod);\n        XCTAssertEqualObjects(actualRequest.URL.absoluteString, @\"https://someUrl/tables/NoSuchTable/ID-ABC?extra-extra=read-all-about-it\", @\"Unexpected URL\");\n        XCTAssertEqualObjects(actualRequest.allHTTPHeaderFields[@\"If-Match\"], @\"\\\"abc\\\"\", @\"Missing if-match header\");\n                                          \n        XCTAssertNil(error, @\"error should have been nil.\");\n        \n        XCTAssertNotNil(item, @\"item should not have  been nil.\");\n        XCTAssertEqualObjects(item[@\"id\"], @\"an id\", @\"item id should have come from server.\");\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n\n-(void) testUnDeleteItemWithNoItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write unit tests!\", @\"complete\": @(NO) };\n    \n    // Update the item\n    [todoTable undelete:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertEqualObjects(error.domain, MSErrorDomain);\n        XCTAssertEqual(error.code, MSMissingItemIdWithRequest);\n        NSString *description = error.userInfo[NSLocalizedDescriptionKey];\n        XCTAssertEqualObjects(description, @\"The item provided did not have an id.\");\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n\n#pragma mark * ReadWithId Method Tests\n\n\n// See the WindowsAzureMobileServicesFunctionalTests.m tests for additional\n// readWithId tests that require a working Microsoft Azure Mobile Service.\n\n-(void) testReadItemWithIntId\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    NSString* stringData = @\"{\\\"id\\\": 120, \\\"name\\\":\\\"test name\\\"}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    testFilter.responseToUse = response;\n    testFilter.dataToUse = data;\n    testFilter.ignoreNextFilter = YES;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n\n    // Insert the item\n    [todoTable readWithId:@120 completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item, @\"item should not have  been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue([[item valueForKey:@\"id\"] isEqualToNumber:@120],\n                     @\"item should have been read.\");\n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testReadItemWithStringId\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    NSString* stringData = @\"{\\\"id\\\": \\\"120\\\", \\\"name\\\":\\\"test name\\\"}\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    testFilter.responseToUse = response;\n    testFilter.dataToUse = data;\n    testFilter.ignoreNextFilter = YES;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    \n    // Insert the item\n    [todoTable readWithId:@\"120\" completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(item, @\"item should not have  been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertTrue([[item valueForKey:@\"id\"] isEqualToString:@\"120\"],\n                     @\"item should have been read.\");\n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testReadItemWithIdWithNoItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Read the item\n    [todoTable readWithId:nil completion:^(NSDictionary *item, NSError *error) {\n    \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSExpectedItemIdWithRequest,\n                     @\"error code should have been MSExpectedItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item id was not provided.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testReadItemWithIdWithInvalidItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    id itemId = [[NSDate alloc] initWithTimeIntervalSince1970:0.0];\n    \n    // Read the item\n    [todoTable readWithId:itemId completion:^(NSDictionary *item, NSError *error) {\n     \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testReadItemWithIdWithIdZero\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n\n    // Read the item\n    [todoTable readWithId:@0 completion:^(NSDictionary *item, NSError *error) {\n        \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testReadItemWithEmptyStringId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Read the item\n    [todoTable readWithId:@\"\" completion:^(NSDictionary *item, NSError *error) {\n        \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testReadItemWithWhiteSpaceId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Read the item\n    [todoTable readWithId:@\"  \" completion:^(NSDictionary *item, NSError *error) {\n        \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSInvalidItemIdWithRequest,\n                     @\"error code should have been MSInvalidItemIdWithRequest.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"The item provided did not have a valid id.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testReadItemWithIdDoesNotHaveContentType\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    __block NSString *contentType = nil;\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:400\n                                   HTTPVersion:nil headerFields:nil];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        contentType = [request valueForHTTPHeaderField:@\"Content-Type\"];\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"todoItem\"];\n    \n    // read with id\n    [todoTable readWithId:@5 completion:^(NSDictionary *item, NSError *error){\n        \n        XCTAssertNil(contentType, @\"Content-Type should not have been set.\");\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n\n#pragma mark * Query Method Tests\n\n\n-(void) testQueryReturnsNonNil\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    MSQuery *query = [todoTable query];\n    \n    XCTAssertNotNil(query, @\"query should not have been nil.\");    \n}\n\n-(void) testQueryWithPredicateReturnsNonNil\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    MSQuery *query = [todoTable queryWithPredicate:nil];\n    \n    XCTAssertNotNil(query, @\"query should not have been nil.\");\n}\n\n-(void) testQueryDoesNotHaveContentType\n{\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    __block NSString *contentType = nil;\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:400\n                                   HTTPVersion:nil headerFields:nil];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        contentType = [request valueForHTTPHeaderField:@\"Content-Type\"];\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"todoItem\"];\n    NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"TRUEPREDICATE\"];\n    MSQuery *query = [todoTable queryWithPredicate:predicate];\n    \n    // query\n    [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n        \n        XCTAssertNil(contentType, @\"Content-Type should not have been set.\");\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n\n#pragma mark System Property Tests\n\n\n-(void) testInsertStringIdPropertiesNotRemovedFromRequest\n{\n    __block NSURLRequest *actualRequest = nil;\n    NSArray *testProperties = [MSTable testNonSystemProperties];\n    testProperties = [testProperties arrayByAddingObjectsFromArray:[MSTable testValidSystemProperties]];\n    \n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    MSInspectRequestBlock inspectBlock = ^NSURLRequest *(NSURLRequest *request) {\n        actualRequest = request;\n        \n        testFilter.responseToUse = [[NSHTTPURLResponse alloc]\n                                    initWithURL:request.URL\n                                    statusCode:200\n                                    HTTPVersion:nil headerFields:nil];\n        \n        return request;\n    };\n    \n    for (NSString *property in testProperties)\n    {\n        NSString *dataString = [NSString stringWithFormat:@\"{\\\"id\\\":\\\"an id\\\",\\\"%@\\\":\\\"a value\\\",\\\"string\\\":\\\"What?\\\"}\", property];\n        testFilter.dataToUse = [dataString dataUsingEncoding:NSUTF8StringEncoding];\n        testFilter.ignoreNextFilter = YES;\n        testFilter.onInspectRequest =  [inspectBlock copy];\n        \n        MSClient *filteredClient = [client clientWithFilter:testFilter];\n        MSTable *todoTable = [filteredClient tableWithName:@\"someTable\"];\n        todoTable.systemProperties = MSSystemPropertyAll;\n        \n        NSDictionary *itemToInsert = @{@\"id\": @\"an id\", @\"string\": @\"What?\", property: @\"a value\"};\n        [todoTable insert:itemToInsert completion:^(NSDictionary *item, NSError *error) {\n            NSData *actualBody = actualRequest.HTTPBody;\n            NSString *bodyString = [[NSString alloc] initWithData:actualBody\n                                                         encoding:NSUTF8StringEncoding];\n            XCTAssertTrue([bodyString rangeOfString:property].location != NSNotFound, @\"The body was not serialized as expected.\");\n            XCTAssertEqualObjects(@\"a value\", item[property], @\"Property %@ was removed\", property);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    }\n}\n\n-(void) testInsertNullIdSystemPropertiesNotRemovedFromRequest\n{\n    __block NSURLRequest *actualRequest = nil;\n    NSArray *testSystemProperties = [MSTable testValidSystemProperties];\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    testFilter.ignoreNextFilter = YES;\n\n    MSInspectRequestBlock inspectBlock = ^NSURLRequest *(NSURLRequest *request) {\n        actualRequest = request;\n        testFilter.responseToUse = [[NSHTTPURLResponse alloc]\n                                    initWithURL:request.URL\n                                    statusCode:200\n                                    HTTPVersion:nil headerFields:nil];\n        \n        return request;\n    };\n    \n    for (NSString *property in testSystemProperties)\n    {\n        NSString *dataString = [NSString stringWithFormat:@\"{\\\"id\\\":\\\"an id\\\",\\\"%@\\\":\\\"a value\\\",\\\"string\\\":\\\"What?\\\"}\", property];\n        testFilter.dataToUse = [dataString dataUsingEncoding:NSUTF8StringEncoding];\n        testFilter.onInspectRequest = [inspectBlock copy];\n        \n        MSClient *filteredClient = [client clientWithFilter:testFilter];\n        MSTable *todoTable = [filteredClient tableWithName:@\"someTable\"];\n        todoTable.systemProperties = MSSystemPropertyAll;\n        \n        NSDictionary *itemToInsert = @{@\"id\": [NSNull null], @\"string\": @\"What?\", property: @\"a value\"};\n        [todoTable insert:itemToInsert completion:^(NSDictionary *item, NSError *error) {\n            NSData *actualBody = actualRequest.HTTPBody;\n            NSString *bodyString = [[NSString alloc] initWithData:actualBody\n                                                         encoding:NSUTF8StringEncoding];\n            XCTAssertTrue([bodyString rangeOfString:property].location != NSNotFound, @\"The body was not serialized as expected.\");\n            XCTAssertEqualObjects(@\"a value\", item[property], @\"system property %@ was removed\", property);\n            \n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    }\n}\n\n-(void) testInsertNullIdNonSystemPropertiesNotRemovedFromRequest\n{\n    __block NSURLRequest *actualRequest = nil;\n    NSArray *testProperties = [MSTable testNonSystemProperties];\n    \n    for (NSString *property in testProperties)\n    {\n        MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n        NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                       initWithURL:nil\n                                       statusCode:200\n                                       HTTPVersion:nil headerFields:nil];\n        testFilter.responseToUse = response;\n        NSString *dataString = [NSString stringWithFormat:@\"{\\\"id\\\":\\\"an id\\\",\\\"%@\\\":\\\"a value\\\",\\\"string\\\":\\\"Hey?\\\"}\", property];\n        testFilter.dataToUse = [dataString dataUsingEncoding:NSUTF8StringEncoding];\n        testFilter.ignoreNextFilter = YES;\n        testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n            actualRequest = request;\n            return request;\n        };\n        \n        MSClient *filteredClient = [client clientWithFilter:testFilter];\n        MSTable *todoTable = [filteredClient tableWithName:@\"someTable\"];\n        \n        NSDictionary *itemToInsert = @{@\"id\": [NSNull null], @\"string\": @\"what?\", property: @\"a value\"};\n        [todoTable insert:itemToInsert completion:^(NSDictionary *item, NSError *error) {\n            NSData *actualBody = actualRequest.HTTPBody;\n            NSString *bodyString = [[NSString alloc] initWithData:actualBody\n                                                         encoding:NSUTF8StringEncoding];\n            XCTAssertTrue([bodyString rangeOfString:property].location != NSNotFound, @\"Error: The body was not serialized as expected.\");\n            XCTAssertEqualObjects(@\"a value\", item[property], @\"Error: Non system property %@ was removed\", property);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    }\n}\n\n-(void) testUpdateAsyncStringIdSystemPropertiesRemovedFromRequest\n{\n    __block NSURLRequest *actualRequest = nil;\n    NSArray *testProperties = [MSTable testValidSystemProperties];\n    \n    for (NSString *property in testProperties)\n    {\n        MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n        NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                       initWithURL:nil\n                                       statusCode:200\n                                       HTTPVersion:nil headerFields:nil];\n        testFilter.responseToUse = response;\n        testFilter.dataToUse = [@\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\" dataUsingEncoding:NSUTF8StringEncoding];\n        testFilter.ignoreNextFilter = YES;\n        testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n            actualRequest = request;\n            return request;\n        };\n        \n        MSClient *filteredClient = [client clientWithFilter:testFilter];\n        MSTable *todoTable = [filteredClient tableWithName:@\"someTable\"];\n        \n        NSDictionary *itemToInsert = @{@\"id\": @\"an id\", @\"string\": @\"What?\", property: @\"a value\"};\n        [todoTable update:itemToInsert completion:^(NSDictionary *item, NSError *error) {\n            NSData *actualBody = actualRequest.HTTPBody;\n            NSString *bodyString = [[NSString alloc] initWithData:actualBody\n                                                         encoding:NSUTF8StringEncoding];\n            XCTAssertEqualObjects(bodyString, @\"{\\\"id\\\":\\\"an id\\\",\\\"string\\\":\\\"What?\\\"}\",\n                                 @\"The body was not serialized as expected.\");\n            \n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    }\n}\n\n-(void) testUpdateStringIdNonSystemPropertiesNotRemovedFromRequest\n{\n    __block NSURLRequest *actualRequest = nil;\n    NSArray *testProperties = [MSTable testNonSystemProperties];\n    \n    for (NSString *property in testProperties)\n    {\n        MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n        NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                       initWithURL:nil\n                                       statusCode:200\n                                       HTTPVersion:nil headerFields:nil];\n        testFilter.responseToUse = response;\n        \n        NSString *dataString = [NSString stringWithFormat:@\"{\\\"id\\\":\\\"an id\\\",\\\"%@\\\":\\\"a value\\\",\\\"string\\\":\\\"Hey\\\"}\", property];\n        testFilter.dataToUse = [dataString dataUsingEncoding:NSUTF8StringEncoding];\n        testFilter.ignoreNextFilter = YES;\n        testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n            actualRequest = request;\n            return request;\n        };\n        \n        MSClient *filteredClient = [client clientWithFilter:testFilter];\n        MSTable *todoTable = [filteredClient tableWithName:@\"someTable\"];\n        \n        NSDictionary *itemToInsert = @{@\"id\": @\"an id\", @\"string\": @\"What?\", property: @\"a value\"};\n        [todoTable insert:itemToInsert completion:^(NSDictionary *item, NSError *error) {\n            NSData *actualBody = actualRequest.HTTPBody;\n            NSString *bodyString = [[NSString alloc] initWithData:actualBody\n                                                         encoding:NSUTF8StringEncoding];\n            XCTAssertTrue([bodyString rangeOfString:property].location != NSNotFound, @\"The body was not serialized as expected.\");\n            XCTAssertEqualObjects(@\"a value\", item[property], @\"Non system property %@ was removed\", property);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    }\n}\n\n-(void) testUpdateIntegerIdNoPropertiesRemovedFromRequest\n{\n    __block NSURLRequest *actualRequest = nil;\n    NSArray *testProperties = [MSTable testNonSystemProperties];\n    testProperties = [testProperties arrayByAddingObjectsFromArray:[MSTable testValidSystemProperties]];\n    \n    for (NSString *property in testProperties)\n    {\n        MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n        NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                       initWithURL:nil\n                                       statusCode:200\n                                       HTTPVersion:nil headerFields:nil];\n        testFilter.responseToUse = response;\n        \n        NSString *dataString = [NSString stringWithFormat:@\"{\\\"id\\\":5,\\\"%@\\\":\\\"a value\\\",\\\"string\\\":\\\"Hey\\\"}\", property];\n        testFilter.dataToUse = [dataString dataUsingEncoding:NSUTF8StringEncoding];\n        testFilter.ignoreNextFilter = YES;\n        testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n            actualRequest = request;\n            return request;\n        };\n        \n        MSClient *filteredClient = [client clientWithFilter:testFilter];\n        MSTable *todoTable = [filteredClient tableWithName:@\"someTable\"];\n        \n        NSDictionary *itemToUpdate = @{@\"id\": @5, @\"string\": @\"What?\", property: @\"a value\"};\n        [todoTable update:itemToUpdate completion:^(NSDictionary *item, NSError *error) {\n            NSData *actualBody = actualRequest.HTTPBody;\n            NSString *bodyString = [[NSString alloc] initWithData:actualBody\n                                                         encoding:NSUTF8StringEncoding];\n            XCTAssertTrue([bodyString rangeOfString:property].location != NSNotFound,\n                         @\"The body was not serialized as expected: %@\", bodyString);\n            XCTAssertEqualObjects(@\"a value\", item[property], @\"Property %@ was removed\", property);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    }\n}\n\n- (BOOL) checkRequestURL:(NSURL *)url SystemProperty:(MSSystemProperties) property\n{\n    NSString *query = [url query];\n    \n    BOOL result = YES;\n    if (property == MSSystemPropertyNone)\n    {\n        result = query == nil || [query rangeOfString:@\"__systemProperties\"].location == NSNotFound;\n        return result;\n    } else if (property == MSSystemPropertyAll) {\n        result = [query rangeOfString:@\"__systemProperties=%2A\"].location != NSNotFound;\n        return result;\n    }\n    \n    // Check individual combinations\n    if(query == nil || [query rangeOfString:@\"__systemProperties\"].location == NSNotFound) {\n        return NO;\n    }\n    \n    if (property & MSSystemPropertyCreatedAt)\n    {\n        result = result && [query rangeOfString:@\"__createdAt\"].location != NSNotFound;\n    }\n    \n    if (property & MSSystemPropertyUpdatedAt)\n    {\n        result = result &&  [query rangeOfString:@\"__updatedAt\"].location != NSNotFound;\n    }\n    \n    if (property & MSSystemPropertyVersion)\n    {\n        result = result &&  [query rangeOfString:@\"__version\"].location != NSNotFound;\n    }\n    \n    return result;\n}\n\n- (void) testReadWithQueryString_ReturnsLinkHeader_IfPresent\n{\n    [self verifyLinkHeaderOnRead:@\"https://contoso.com; rel=next\" expectedLink:@\"https://contoso.com\"];\n    [self verifyLinkHeaderOnRead:@\"http://contoso.com; rel=next\" expectedLink:@\"http://contoso.com\"];\n}\n\n- (void) testReadWithQueryString_ReturnsNil_IfNotPresent\n{\n    [self verifyLinkHeaderOnRead:@\"\" expectedLink:nil];\n}\n\n- (void) testReadWithQueryString_ReturnsNil_IfWrongFormat\n{\n    [self verifyLinkHeaderOnRead:@\"http://contoso.com\" expectedLink:nil];\n}\n\n- (void) testReadWithQueryString_ReturnsNil_IfRelIsNotNext\n{\n    [self verifyLinkHeaderOnRead:@\"http://contoso.com; rel=prev\" expectedLink:nil];\n}\n\n- (void) verifyLinkHeaderOnRead: (NSString *) actualLink  expectedLink: (NSString *) expectedLink {\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil\n                                   headerFields:@{@\"Link\": actualLink}];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"someTable\"];\n    testFilter.dataToUse = [@\"[]\" dataUsingEncoding:NSUTF8StringEncoding];\n    [todoTable readWithQueryString:@\"$filter=1 eq 2\" completion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertNil(error);\n        if (expectedLink == nil) {\n            XCTAssertNil(result.nextLink);\n        }\n        else {\n            XCTAssertEqualObjects(result.nextLink, expectedLink);\n        }\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n- (void) testReadWithQueryString_FollowsTheLink_IfQueryIsUri\n{\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data: @\"[]\"];\n    \n    __block NSURLRequest *actualRequest = nil;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"someTable\"];\n    \n    [todoTable readWithQueryString:@\"https://contoso.com?$filter=a%20eq%20c\" completion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertNil(error);\n        XCTAssertEqual(result.items.count, 0);\n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    \n    XCTAssertEqualObjects(actualRequest.URL.absoluteString, @\"https://contoso.com?$filter=a%20eq%20c\");\n    NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n    XCTAssertEqualObjects(featuresHeader, @\"TR,LH\");\n}\n\n-(void) testTableOperationSystemPropertiesQueryStringIsCorrect\n{\n    __block NSURLRequest *actualRequest = nil;\n    NSArray *testSystemProperties = [MSTable testSystemProperties];\n    \n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"someTable\"];\n    \n    for (NSNumber *systemPropertyAsNumber in testSystemProperties)\n    {\n        NSUInteger systemProperty = [systemPropertyAsNumber unsignedIntegerValue];\n        todoTable.systemProperties = systemProperty;\n\n        // String Id (Insert, Update, ReadWithId, Delete)\n\n        done = NO;\n        NSDictionary *item = @{@\"id\":@\"an id\",@\"String\":@\"what?\"};\n        testFilter.dataToUse = [@\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\" dataUsingEncoding:NSUTF8StringEncoding];\n        [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertTrue([self checkRequestURL:[actualRequest URL] SystemProperty:systemProperty], @\"Error for property %lu with url: %@\", (unsigned long)systemProperty, [[actualRequest URL] query]);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertTrue([self checkRequestURL:[actualRequest URL] SystemProperty:systemProperty], @\"Error with url: %@\", [[actualRequest URL] query]);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        [todoTable readWithId:item completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertTrue([self checkRequestURL:[actualRequest URL] SystemProperty:systemProperty], @\"Error with url: %@\", [[actualRequest URL] query]);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        [todoTable delete:item completion:^(id itemId, NSError *error) {\n            XCTAssertTrue([self checkRequestURL:[actualRequest URL] SystemProperty:systemProperty], @\"Error with url: %@\", [[actualRequest URL] query]);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        // Integer Id\n        done = NO;\n        item = @{@\"String\": @\"what?\"};\n        testFilter.dataToUse = [@\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\" dataUsingEncoding:NSUTF8StringEncoding];\n        [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertTrue([self checkRequestURL:[actualRequest URL] SystemProperty:systemProperty], @\"Error with url: %@\", [[actualRequest URL] query]);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        item = @{@\"id\": @5, @\"String\": @\"what?\"};\n        [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertTrue([self checkRequestURL:[actualRequest URL] SystemProperty:systemProperty], @\"Error with url: %@\", [[actualRequest URL] query]);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        [todoTable readWithId:item completion:^(NSDictionary *item, NSError *error) {\n            XCTAssertTrue([self checkRequestURL:[actualRequest URL] SystemProperty:systemProperty], @\"Error with url: %@\", [[actualRequest URL] query]);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        [todoTable delete:item completion:^(id itemId, NSError *error) {\n            XCTAssertTrue([self checkRequestURL:[actualRequest URL] SystemProperty:systemProperty], @\"Error with url: %@\", [[actualRequest URL] query]);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n\n        // Query\n        \n        done = NO;\n        [todoTable readWithQueryString:@\"$filter=id eq 5\" completion:^(MSQueryResult *result, NSError *error) {\n            XCTAssertTrue([self checkRequestURL:[actualRequest URL] SystemProperty:systemProperty], @\"Error with url: %@\", [[actualRequest URL] query]);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n\n        done = NO;\n        [todoTable readWithQueryString:@\"$select=id,String\" completion:^(MSQueryResult *result, NSError *error) {\n            XCTAssertTrue([self checkRequestURL:[actualRequest URL] SystemProperty:systemProperty], @\"Error with url: %@\", [[actualRequest URL] query]);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    }\n}\n\n-(void) testTableOperationUserParameterWithSystemPropertyQueryStringIsCorrect\n{\n    __block NSURLRequest *actualRequest = nil;\n    NSArray *testSystemProperties = [MSTable testSystemProperties];\n    \n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:200\n                                   HTTPVersion:nil headerFields:nil];\n    testFilter.responseToUse = response;\n    testFilter.ignoreNextFilter = YES;\n    testFilter.onInspectRequest =  ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n    \n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"someTable\"];\n    \n    for (NSNumber *systemProperty in testSystemProperties)\n    {\n        todoTable.systemProperties = [systemProperty integerValue];\n        \n        done = NO;\n        NSDictionary *item = @{@\"id\":@\"an id\", @\"string\":@\"what?\"};\n        \n        testFilter.dataToUse = [@\"{\\\"id\\\":\\\"an id\\\",\\\"String\\\":\\\"Hey\\\"}\" dataUsingEncoding:NSUTF8StringEncoding];\n        [todoTable insert:item parameters:@{ @\"__systemProperties\": @\"__createdAt\"} completion:^(NSDictionary *item, NSError *error) {\n            NSString *url = [[actualRequest URL] query];\n            XCTAssertTrue([url rangeOfString:@\"__systemProperties=__createdAt\"].location != NSNotFound, @\"Incorrect query: %@\", url);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        [todoTable update:item parameters:@{ @\"__systemProperties\": @\"createdAt\"} completion:^(NSDictionary *item, NSError *error) {\n            NSString *url = [[actualRequest URL] query];\n            XCTAssertTrue([url rangeOfString:@\"__systemProperties=createdAt\"].location != NSNotFound, @\"Incorrect query: %@\", url);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        [todoTable readWithId:@\"an id\" parameters:@{ @\"__systemProperties\": @\"CreatedAt\"} completion:^(NSDictionary *item, NSError *error) {\n            NSString *url = [[actualRequest URL] query];\n            XCTAssertTrue([url rangeOfString:@\"__systemProperties=CreatedAt\"].location != NSNotFound, @\"Incorrect query: %@\", url);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        [todoTable delete:item parameters:@{ @\"__systemProperties\": @\"unknown\"} completion:^(id itemId, NSError *error) {\n            NSString *url = [[actualRequest URL] query];\n            XCTAssertTrue([url rangeOfString:@\"__systemProperties=unknown\"].location != NSNotFound, @\"Incorrect query: %@\", url);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        // Integer Id\n        done = NO;\n        item = @{@\"string\":@\"what?\"};\n        testFilter.dataToUse = [@\"{\\\"id\\\":5,\\\"String\\\":\\\"Hey\\\"}\" dataUsingEncoding:NSUTF8StringEncoding];\n        [todoTable insert:item parameters:@{ @\"__systemProperties\": @\"__createdAt\"} completion:^(NSDictionary *item, NSError *error) {\n            NSString *url = [[actualRequest URL] query];\n            XCTAssertTrue([url rangeOfString:@\"__systemProperties=__createdAt\"].location != NSNotFound, @\"Incorrect query: %@\", url);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        item = @{@\"id\":@5, @\"string\":@\"what?\"};\n        [todoTable update:item parameters:@{ @\"__systemProperties\": @\"createdAt\"} completion:^(NSDictionary *item, NSError *error) {\n            NSString *url = [[actualRequest URL] query];\n            XCTAssertTrue([url rangeOfString:@\"__systemProperties=createdAt\"].location != NSNotFound, @\"Incorrect query: %@\", url);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        [todoTable readWithId:@5 parameters:@{ @\"__systemProperties\": @\"CreatedAt\"} completion:^(NSDictionary *item, NSError *error) {\n            NSString *url = [[actualRequest URL] query];\n            XCTAssertTrue([url rangeOfString:@\"__systemProperties=CreatedAt\"].location != NSNotFound, @\"Incorrect query: %@\", url);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        [todoTable delete:item parameters:@{ @\"__systemProperties\": @\"unknown\"} completion:^(id itemId, NSError *error) {\n            NSString *url = [[actualRequest URL] query];\n            XCTAssertTrue([url rangeOfString:@\"__systemProperties=unknown\"].location != NSNotFound, @\"Incorrect query: %@\", url);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        // Query\n        \n        done = NO;\n        [todoTable readWithQueryString:@\"$filter=id%20eq%205&__systemproperties=__createdAt\" completion:^(MSQueryResult *result, NSError *error) {\n            NSString *url = [[actualRequest URL] query];\n            XCTAssertEqualObjects(@\"$filter=id%20eq%205&__systemproperties=__createdAt\", url, @\"Incorrect query: %@\", url);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n        \n        done = NO;\n        [todoTable readWithQueryString:@\"$select=id,String&__systemProperties=__CreatedAt\" completion:^(MSQueryResult *result, NSError *error) {\n            NSString *url = [[actualRequest URL] query];\n            XCTAssertEqualObjects(@\"$select=id,String&__systemProperties=__CreatedAt\", url, @\"Incorrect query: %@\", url);\n            done = YES;\n        }];\n        XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    }\n}\n\n\n#pragma mark * Telemetry Features Header Tests\n\n-(void) testQueryAddsProperFeaturesHeader {\n    __block NSURLRequest *actualRequest = nil;\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:@\"[]\"];\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n\n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n\n    // Read with raw query\n    [todoTable readWithQueryString:@\"$filter=a eq 1\" completion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertNotNil(actualRequest);\n        XCTAssertNil(error);\n\n        NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n        XCTAssertNotNil(featuresHeader);\n        XCTAssertTrue([featuresHeader isEqualToString:MSFeatureCodeTableReadRaw], @\"Header value (%@) was not as expected (%@)\", featuresHeader, MSFeatureCodeTableReadRaw);\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    actualRequest = nil;\n    done = NO;\n\n    // Read with predicate\n    [todoTable readWithPredicate:[NSPredicate predicateWithFormat:@\"a = 1\"] completion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n\n        NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n        XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n        XCTAssertTrue([featuresHeader isEqualToString:MSFeatureCodeTableReadQuery], @\"Header value (%@) was not as expected (%@)\", featuresHeader, MSFeatureCodeTableReadQuery);\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    actualRequest = nil;\n    done = NO;\n\n    // Read with query\n    MSQuery *query = [todoTable query];\n    query.fetchLimit = 10;\n    query.fetchOffset = 10;\n    [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n\n        NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n        XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n        XCTAssertTrue([featuresHeader isEqualToString:MSFeatureCodeTableReadQuery], @\"Header value (%@) was not as expected (%@)\", featuresHeader, MSFeatureCodeTableReadQuery);\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n-(void) testInsertUpdateDeleteAddsProperFeaturesHeader {\n    __block NSURLRequest *actualRequest = nil;\n    NSString* response = @\"{\\\"id\\\": \\\"A\\\", \\\"name\\\":\\\"test name\\\", \\\"__version\\\":\\\"ABC\\\"}\";\n    MSTestFilter *testFilter = [MSTestFilter testFilterWithStatusCode:200 data:response];\n    testFilter.onInspectRequest = ^(NSURLRequest *request) {\n        actualRequest = request;\n        return request;\n    };\n\n    MSClient *filteredClient = [client clientWithFilter:testFilter];\n    MSTable *todoTable = [filteredClient tableWithName:@\"NoSuchTable\"];\n    todoTable.systemProperties = MSSystemPropertyVersion;\n\n    // Create the item\n    id item = @{ @\"id\":@\"the-id\", @\"name\":@\"test name\" };\n\n    // Insert without parameters does not have features header\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n        XCTAssertNil([actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName], @\"Unexpected features header\");\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    actualRequest = nil;\n    done = NO;\n\n    // Insert with parameters has appropriate features header\n    [todoTable insert:item parameters:@{@\"a\":@\"b\"} completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n\n        NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n        XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n        XCTAssertTrue([featuresHeader isEqualToString:MSFeatureCodeQueryParameters], @\"Header value (%@) was not as expected (%@)\", featuresHeader, MSFeatureCodeQueryParameters);\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    actualRequest = nil;\n    done = NO;\n\n    // Update with no __version or parameters has no features header\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n\n        XCTAssertNil([actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName], @\"Unexpected features header\");\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    actualRequest = nil;\n    done = NO;\n\n    // Update with __version has OC features header\n    NSDictionary *itemWithVersion = @{@\"id\":@\"the-id\",@\"name\":@\"value\",@\"__version\":@\"abc\"};\n    [todoTable update:itemWithVersion completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n\n        NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n        XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n        XCTAssertTrue([featuresHeader isEqualToString:MSFeatureCodeOpportunisticConcurrency], @\"Header value (%@) was not as expected (%@)\", featuresHeader, MSFeatureCodeOpportunisticConcurrency);\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    actualRequest = nil;\n    done = NO;\n\n    // Update with parameters has appropriate features header\n    [todoTable update:itemWithVersion parameters:@{@\"a\":@\"b\"} completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n\n        NSString *expectedHeader = [MSSDKFeatures httpHeaderForFeatures:MSFeatureOpportunisticConcurrency | MSFeatureQueryParameters];\n        NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n        XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n        XCTAssertTrue([featuresHeader isEqualToString:expectedHeader], @\"Header value (%@) was not as expected (%@)\", featuresHeader, expectedHeader);\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    actualRequest = nil;\n    done = NO;\n\n    // Delete with no __version or parameters has no features header\n    [todoTable delete:item completion:^(id itemId, NSError *error) {\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n\n        XCTAssertNil([actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName], @\"Unexpected features header\");\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    actualRequest = nil;\n    done = NO;\n\n    // Delete with __version has OC features header\n    [todoTable delete:itemWithVersion completion:^(id itemId, NSError *error) {\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n\n        NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n        XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n        XCTAssertTrue([featuresHeader isEqualToString:MSFeatureCodeOpportunisticConcurrency], @\"Header value (%@) was not as expected (%@)\", featuresHeader, MSFeatureCodeOpportunisticConcurrency);\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    actualRequest = nil;\n    done = NO;\n\n    // Delete with parameters has appropriate features header\n    [todoTable delete:itemWithVersion parameters:@{@\"a\":@\"b\"} completion:^(id itemId, NSError *error) {\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n\n        NSString *expectedHeader = [MSSDKFeatures httpHeaderForFeatures:MSFeatureOpportunisticConcurrency | MSFeatureQueryParameters];\n        NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n        XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n        XCTAssertTrue([featuresHeader isEqualToString:expectedHeader], @\"Header value (%@) was not as expected (%@)\", featuresHeader, expectedHeader);\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    actualRequest = nil;\n    done = NO;\n\n    // Delete with id with no parameters has no features header\n    [todoTable deleteWithId:@\"the-id\" completion:^(id itemId, NSError *error) {\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n\n        XCTAssertNil([actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName], @\"Unexpected features header\");\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n    actualRequest = nil;\n    done = NO;\n\n    // Delete with parameters has appropriate features header\n    [todoTable deleteWithId:@\"the-id\" parameters:@{@\"a\":@\"b\"} completion:^(id itemId, NSError *error) {\n        XCTAssertNotNil(actualRequest, @\"actualRequest should not have been nil.\");\n        XCTAssertNil(error, @\"error should have been nil.\");\n\n        NSString *featuresHeader = [actualRequest.allHTTPHeaderFields valueForKey:MSFeaturesHeaderName];\n        XCTAssertNotNil(featuresHeader, @\"actualHeader should not have been nil.\");\n        XCTAssertTrue([featuresHeader isEqualToString:MSFeatureCodeQueryParameters], @\"Header value (%@) was not as expected (%@)\", featuresHeader, MSFeatureCodeQueryParameters);\n\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:0.1], @\"Test timed out.\");\n}\n\n\n#pragma mark * Async Test Helper Method\n\n\n-(BOOL) waitForTest:(NSTimeInterval)testDuration {\n \n    NSDate *timeoutAt = [NSDate dateWithTimeIntervalSinceNow:testDuration];\n \n    while (!done) {\n        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode\n                                 beforeDate:timeoutAt];\n        if([timeoutAt timeIntervalSinceNow] <= 0.0) {\n            break;\n        }\n    };\n \n    return done;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSTestFilter.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSFilter.h\"\n\ntypedef NSURLRequest *(^MSInspectRequestBlock)(NSURLRequest *request);\ntypedef NSData *(^MSInspectResponseDataBlock)(NSURLRequest *request, NSData *data);\n\n@interface MSTestFilter : NSObject <MSFilter>\n\n+(MSTestFilter *)testFilterWithStatusCode:(NSInteger) statusCode;\n+(MSTestFilter *)testFilterWithStatusCode:(NSInteger) statusCode data:(NSString *)data;\n\n@property (nonatomic, strong)   NSURLRequest *requestToUse;\n@property (nonatomic, copy)     MSInspectRequestBlock onInspectRequest;\n@property (nonatomic, strong)   NSHTTPURLResponse *responseToUse;\n@property (nonatomic, strong)   NSData *dataToUse;\n@property (nonatomic, strong)   NSError *errorToUse;\n@property (nonatomic)           BOOL ignoreNextFilter;\n@property (nonatomic, copy)     MSInspectResponseDataBlock onInspectResponseData;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSTestFilter.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"MSTestFilter.h\"\n\n@implementation MSTestFilter\n\n@synthesize requestToUse = requestToUse_;\n@synthesize onInspectRequest = onInspectRequest_;\n@synthesize responseToUse = responseToUse_;\n@synthesize dataToUse = dataToUse_;\n@synthesize errorToUse = errorToUse_;\n@synthesize ignoreNextFilter = ignoreNextFilter_;\n\n+(MSTestFilter *)testFilterWithStatusCode:(NSInteger)statusCode\n{\n    MSTestFilter *filter = [[MSTestFilter alloc] initWithStatusCode:statusCode data:nil];\n    return filter;\n}\n\n+(MSTestFilter *)testFilterWithStatusCode:(NSInteger) statusCode data:(NSString *)data\n{\n    MSTestFilter *filter = [[MSTestFilter alloc] initWithStatusCode:statusCode data:data];\n    return filter;\n}\n\n- (id) initWithStatusCode:(NSInteger) statusCode data:(NSString *) data\n{\n    self = [super init];\n    if (self) {\n        self.ignoreNextFilter = YES;\n        self.responseToUse = [[NSHTTPURLResponse alloc]\n                              initWithURL:nil\n                              statusCode:statusCode\n                              HTTPVersion:nil headerFields:nil];\n        if (data) {\n            self.dataToUse = [data dataUsingEncoding:NSUTF8StringEncoding];\n        }\n    }\n    return self;\n}\n\n-(void) handleRequest:(NSURLRequest *)request\n               next:(MSFilterNextBlock)next\n           response:(MSFilterResponseBlock)response\n{\n    \n    // Replace the request if we have one to replace it with\n    if (self.onInspectRequest) {\n        request = self.onInspectRequest(request);\n    }\n    else if (self.requestToUse) {\n        request = self.requestToUse;\n    }\n    \n    if (self.ignoreNextFilter) {\n        \n        // |ignoreNextFilter| is set so just return a response/data or\n        // error right away.\n        if (self.errorToUse) {\n            \n            // A mock error was provided, so we'll call onError\n            // with it\n            response(nil, nil, self.errorToUse);\n        }\n        else {            \n            if (self.onInspectResponseData) {\n                self.dataToUse = self.onInspectResponseData(request, self.dataToUse);\n            }\n            // Otherwise we'll assume a mock response/data are available\n            response(self.responseToUse, self.dataToUse, nil);\n        }\n    }\n    else {\n        \n        // We'll call into the next filter, but we want to be able to\n        // replace the response/data or error when the server replies so\n        // we'll wrap the onResponse and onError callbacks with our own\n        MSFilterResponseBlock localOnResponse =\n        [^(NSHTTPURLResponse *res, NSData *data, NSError *error){\n            \n            if(self.errorToUse) {\n                response(nil, nil, self.errorToUse);\n            }\n            else {\n            \n                if (self.responseToUse) {\n                    res = self.responseToUse;\n                }\n                \n                if (self.onInspectResponseData) {\n                    data = self.onInspectResponseData(request, data);\n                } else if (self.dataToUse) {\n                    data = self.dataToUse;\n                }\n                \n                response(res, data, error);\n            }\n            \n        } copy];\n\n        // Call the next filter\n        next(request, localOnResponse);\n    }\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSTestWaiter.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n\n#import <Foundation/Foundation.h>\n\n@interface MSTestWaiter : NSObject\n\n@property (nonatomic) BOOL done;\n\n-(BOOL) waitForTest:(NSTimeInterval)testDuration;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSTestWaiter.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n\n#import \"MSTestWaiter.h\"\n#import <Foundation/Foundation.h>\n\n@implementation MSTestWaiter\n\n-(id) init {\n    self = [super init];\n    \n    if (self) {\n        _done = NO;\n    }\n    \n    return self;\n}\n\n-(BOOL) waitForTest:(NSTimeInterval)testDuration {\n    \n    NSDate *timeoutAt = [NSDate dateWithTimeIntervalSinceNow:testDuration];\n    \n    while (!self.done) {\n        [[NSRunLoop currentRunLoop] runMode:NSRunLoopCommonModes\n                                 beforeDate:timeoutAt];\n        if([timeoutAt timeIntervalSinceNow] <= 0.0) {\n            break;\n        }\n    };\n    \n    return self.done;\n}\n\n@end"
  },
  {
    "path": "sdk/iOS/test/MSURLbuilderTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSTable.h\"\n#import \"MSURLBuilder.h\"\n\n@interface MSURLBuilderTests : XCTestCase\n\n@end\n\n@implementation MSURLBuilderTests\n\n\n#pragma mark * Setup and TearDown\n\n\n-(void) setUp\n{\n    NSLog(@\"%@ setUp\", self.name);\n}\n\n-(void) tearDown\n{\n    NSLog(@\"%@ tearDown\", self.name);\n}\n\n\n#pragma mark * URL Building Method Tests\n\n\n-(void) testURLForTable\n{\n    // For each test case: the first element is the expected  URL;\n    // the second element is the app format URL; and third element is\n    // the table name\n    NSArray *testCases = @[\n    \n        // Vanilla test case\n        @[ @\"http://someApp.com/tables/someTable\",\n           @\"http://someApp.com\",\n           @\"someTable\"],\n    \n        // App URL with extra slashes\n        @[ @\"http://someApp.com/tables/someTable\",\n           @\"http://someApp.com/\",\n           @\"someTable\"],\n    \n        // App URL with query string\n        @[ @\"http://someApp.com/tables/someTable?x=y\",\n           @\"http://someApp.com?x=y\",\n           @\"someTable\"],\n    \n        // Whitespace and path in App URL\n        @[ @\"http://someApp.com/some%20path/tables/some%20table\",\n           @\"http://someApp.com/some path\",\n           @\"some table\"]\n    ];\n    \n    for (id testCase in testCases) {\n        \n        NSString *expectedURL = testCase[0];\n        NSString *appURL = testCase[1];\n        NSString *tableName = testCase[2];\n        \n        MSClient *client = [MSClient clientWithApplicationURLString:appURL];\n        MSTable *table = [client tableWithName:tableName];\n        \n        NSURL *url = [MSURLBuilder URLForTable:table\n                                     parameters:nil\n                                            orError:nil];\n        \n        XCTAssertNotNil(url, @\"url should not be nil\");\n        XCTAssertEqualObjects(url.absoluteString, expectedURL);\n    }\n}\n\n-(void) testURLForTableWithParameters\n{\n    // For each test case: the first element is the expected  URL;\n    // the second element is the app format URL; and third element is\n    // the table name and the forth element is the parameters\n    NSArray *testCases = @[\n    \n    // Vanilla test case\n    @[ @\"http://someApp.com/tables/someTable?x=5\",\n       @\"http://someApp.com\",\n       @\"someTable\",\n       @{@\"x\" : @5}],\n    \n    // Parameters that should be URL encoded\n    @[ @\"http://someApp.com/tables/someTable?x=%23%3F%26$'%20encode%20me%21\",\n       @\"http://someApp.com/\",\n       @\"someTable\",\n       @{@\"x\" : @\"#?&$' encode me!\"}],\n    \n    // App URL with query string\n    @[ @\"http://someApp.com/tables/someTable?x=y&x=5\",\n       @\"http://someApp.com?x=y\",\n       @\"someTable\",\n       @{@\"x\" : @5}],\n    \n    // Whitespace and path in App URL\n    @[ @\"http://someApp.com/some%20path/tables/some%20table?%26encode=5\",\n       @\"http://someApp.com/some path\",\n       @\"some table\",\n       @{@\"&encode\" : @5}],\n    \n    // Array\n    @[ @\"http://someApp.com/some%20path/tables/someTable?x=1&x=B\",\n       @\"http://someApp.com/some path\",\n       @\"someTable\",\n       @{@\"x\" : @[@1, @\"B\"]}]\n    ];\n    \n    for (id testCase in testCases) {\n        \n        NSString *expectedURL = testCase[0];\n        NSString *appURL = testCase[1];\n        NSString *tableName = testCase[2];\n        NSDictionary *parameters = testCase[3];\n        \n        MSClient *client = [MSClient clientWithApplicationURLString:appURL];\n        MSTable *table = [client tableWithName:tableName];\n        \n        NSURL *url = [MSURLBuilder URLForTable:table\n                                     parameters:parameters\n                                            orError:nil];\n        \n        XCTAssertNotNil(url, @\"url should not be nil\");\n        XCTAssertEqualObjects(url.absoluteString, expectedURL);\n    }\n}\n\n-(void) testURLForTableWithInvalidParameters\n{\n    NSError *error = nil;\n    NSString *appURL = @\"http://someApp.com/\";\n    NSString *tableName = @\"someTable\";\n    NSDictionary *parameters = @{ @\"$notAllowed\" : @5 };\n    \n    MSClient *client = [MSClient clientWithApplicationURLString:appURL];\n    MSTable *table = [client tableWithName:tableName];\n    \n    \n    NSURL *url = [MSURLBuilder URLForTable:table\n                                 parameters:parameters\n                                        orError:&error];\n    \n    XCTAssertNil(url, @\"url should be nil\");\n    XCTAssertNotNil(error, @\"error should not have been nil.\");\n    XCTAssertTrue(error.domain == MSErrorDomain,\n                 @\"error domain should have been MSErrorDomain.\");\n    XCTAssertTrue(error.code == MSInvalidUserParameterWithRequest,\n                 @\"error code should have been MSInvalidUserParameterWithRequest.\");\n    \n    NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n    XCTAssertTrue([description isEqualToString:@\"'$notAllowed' is an invalid user-defined query string parameter. User-defined query string parameters must not begin with a '$'.\"],\n                 @\"description was: %@\", description);\n}\n\n-(void) testURLForTableWithItemId\n{\n    // For each test case: the first element is the expected  URL;\n    // the second element is the app format URL; the third element is\n    // the table name; and the forth element is the itemId\n    NSArray *testCases = @[\n    \n        // Vanilla test case\n        @[ @\"http://someApp.com/tables/someTable/5\",\n           @\"http://someApp.com\",\n           @\"someTable\",\n           @\"5\"],\n    \n        // App URL with query string\n        @[ @\"http://someApp.com/tables/someTable/100?x=y\",\n           @\"http://someApp.com?x=y\",\n           @\"someTable\",\n           @\"100\"],\n    \n        // Whitespace and path in App URL and non integer id\n        @[ @\"http://someApp.com/some%20path/tables/some%20table/an%20id\",\n           @\"http://someApp.com/some path\",\n           @\"some table\",\n           @\"an id\"]\n    ];\n    \n    for (id testCase in testCases) {\n        \n        NSString *appURL = testCase[1];\n        NSString *tableName = testCase[2];\n        NSString *itemId = testCase[3];\n        NSString *expectedURL = testCase[0];\n        \n        MSClient *client = [MSClient clientWithApplicationURLString:appURL];\n        MSTable *table = [client tableWithName:tableName];\n        \n        NSURL *url = [MSURLBuilder URLForTable:table\n                                   itemIdString:itemId\n                                     parameters:nil\n                                            orError:nil];\n        \n        XCTAssertNotNil(url, @\"url should not be nil\");\n        XCTAssertTrue([[url absoluteString] isEqualToString:expectedURL],\n                     @\"the url was: %@\", [url absoluteString]);\n    }\n}\n\n-(void) testURLForTableWithItemIdWithParameters\n{\n    // For each test case: the first element is the expected  URL;\n    // the second element is the app format URL; the third element is\n    // the table name; the forth element is the itemId and the fifth\n    // element is the parameters\n    NSArray *testCases = @[\n    \n    // Vanilla test case\n    @[ @\"http://someApp.com/tables/someTable/5?x=5\",\n       @\"http://someApp.com\",\n       @\"someTable\",\n       @\"5\",\n       @{@\"x\" : @5}],\n    \n    // Parameter values that should be URL encoded\n    @[ @\"http://someApp.com/tables/someTable/100?x=y&x=%23%3F%26$'%20encode%20me%21\",\n       @\"http://someApp.com?x=y\",\n       @\"someTable\",\n       @\"100\",\n       @{@\"x\" : @\"#?&$' encode me!\"}],\n    \n    // Parameter names that should be URL encoded\n    @[ @\"http://someApp.com/some%20path/tables/some%20table/an%20id?%26encode=5\",\n       @\"http://someApp.com/some path\",\n       @\"some table\",\n       @\"an id\",\n       @{@\"&encode\" : @5}]\n    ];\n    \n    for (id testCase in testCases) {\n        \n        NSString *expectedURL = testCase[0];\n        NSString *appURL = testCase[1];\n        NSString *tableName = testCase[2];\n        NSString *itemId = testCase[3];\n        NSDictionary *parameters = testCase[4];\n        \n        MSClient *client = [MSClient clientWithApplicationURLString:appURL];\n        MSTable *table = [client tableWithName:tableName];\n        \n        NSURL *url = [MSURLBuilder URLForTable:table\n                                   itemIdString:itemId\n                                     parameters:parameters\n                                            orError:nil];\n        \n        XCTAssertNotNil(url, @\"url should not be nil\");\n        XCTAssertTrue([[url absoluteString] isEqualToString:expectedURL],\n                     @\"the url was: %@\", [url absoluteString]);\n    }\n}\n\n-(void) testURLForTableWithItemIdWithInvalidParameters\n{\n    NSError *error = nil;\n    NSString *appURL = @\"http://someApp.com/\";\n    NSString *itemId = @\"someId\";\n    NSString *tableName = @\"someTable\";\n    NSDictionary *parameters = @{ @\"$\" : @5 };\n    \n    MSClient *client = [MSClient clientWithApplicationURLString:appURL];\n    MSTable *table = [client tableWithName:tableName];\n    \n    \n    NSURL *url = [MSURLBuilder URLForTable:table\n                               itemIdString:itemId \n                                 parameters:parameters\n                                        orError:&error];\n    \n    XCTAssertNil(url, @\"url should be nil\");\n    XCTAssertNotNil(error, @\"error should not have been nil.\");\n    XCTAssertTrue(error.domain == MSErrorDomain,\n                 @\"error domain should have been MSErrorDomain.\");\n    XCTAssertTrue(error.code == MSInvalidUserParameterWithRequest,\n                 @\"error code should have been MSInvalidUserParameterWithRequest.\");\n    \n    NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n    XCTAssertTrue([description isEqualToString:@\"'$' is an invalid user-defined query string parameter. User-defined query string parameters must not begin with a '$'.\"],\n                 @\"description was: %@\", description);\n}\n\n-(void) testURLForTableWithQuery\n{\n    // For each test case: the first element is the expected  URL;\n    // the second element is the app format URL; the third element is\n    // the table name; and the forth element is the itemId\n    NSArray *testCases = @[\n    \n        // Vanilla test case\n        @[ @\"http://someApp.com/tables/someTable?$top=5\",\n           @\"http://someApp.com\",\n           @\"someTable\",\n           @\"$top=5\"],\n        \n        // App URL with query string\n        @[ @\"http://someApp.com/tables/someTable?x=y&$filter=(cost%20gt%2015)\",\n           @\"http://someApp.com?x=y\",\n           @\"someTable\",\n           @\"$filter=(cost%20gt%2015)\"],\n        \n        // Whitespace and path in App URL\n        @[ @\"http://someApp.com/some%20path/tables/some%20table?a=b\",\n           @\"http://someApp.com/some path\",\n           @\"some table\",\n           @\"a=b\"]\n    ];\n    \n    for (id testCase in testCases) {\n        \n        NSString *appURL = testCase[1];\n        NSString *tableName = testCase[2];\n        NSString *query = testCase[3];\n        NSString *expectedURL = testCase[0];\n        \n        MSClient *client = [MSClient clientWithApplicationURLString:appURL];\n        MSTable *table = [client tableWithName:tableName];\n        \n        NSURL *url = [MSURLBuilder URLForTable:table\n                                          query:query];\n        \n        XCTAssertNotNil(url, @\"url should not be nil\");\n        XCTAssertTrue([[url absoluteString] isEqualToString:expectedURL],\n                     @\"the url was: %@\", [url absoluteString]);\n    }\n}\n\n-(void) testURLForApi\n{\n    // For each test case: the first element is the expected  URL;\n    // the second element is the app format URL; and third element is\n    // the table name\n    NSArray *testCases = @[\n    \n      // Vanilla test case\n      @[ @\"http://someApp.com/api/someApi\",\n         @\"http://someApp.com\",\n         @\"someApi\"],\n    \n      // App URL with extra slashes\n      @[ @\"http://someApp.com/api/someApi/with/a/path\",\n         @\"http://someApp.com/\",\n         @\"someApi/with/a/path\"],\n    \n      // App URL with query string\n      @[ @\"http://someApp.com/api/someApi/with/a/path/and?x=y&some=query&string=yeah!\",\n         @\"http://someApp.com?x=y\",\n         @\"someApi/with/a/path/and?some=query&string=yeah!\"],\n    \n      // Whitespace and path in App URL\n      @[ @\"http://someApp.com/some%20path/api/some%20api\",\n         @\"http://someApp.com/some path\",\n         @\"some api\"]\n    ];\n    \n    for (id testCase in testCases) {\n        \n        NSString *expectedURL = testCase[0];\n        NSString *appURL = testCase[1];\n        NSString *APIName = testCase[2];\n        \n        MSClient *client = [MSClient clientWithApplicationURLString:appURL];\n        \n        NSURL *url = [MSURLBuilder URLForApi:client\n                                     APIName:APIName\n                                  parameters:nil\n                                     orError:nil];\n        \n        XCTAssertNotNil(url, @\"url should not be nil\");\n        XCTAssertTrue([[url absoluteString] isEqualToString:expectedURL],\n                     @\"the url was: %@\", [url absoluteString]);\n    }\n}\n\n-(void) testURLForApiWithParameters\n{\n    // For each test case: the first element is the expected  URL;\n    // the second element is the app format URL; and third element is\n    // the table name and the forth element is the parameters\n    NSArray *testCases = @[\n    \n      // Vanilla test case\n      @[ @\"http://someApp.com/api/someApi?x=5\",\n         @\"http://someApp.com\",\n         @\"someApi\",\n         @{@\"x\" : @5}],\n    \n      // Parameters that should be URL encoded\n      @[ @\"http://someApp.com/api/some/api/with/a/path?x=%23%3F%26$'%20encode%20me%21\",\n         @\"http://someApp.com/\",\n         @\"some/api/with/a/path\",\n         @{@\"x\" : @\"#?&$' encode me!\"}],\n    \n      // App URL with query string\n      @[ @\"http://someApp.com/api/someApi/with/a/path/and?x=y&some=query&string=yeah!&x=5\",\n         @\"http://someApp.com?x=y\",\n         @\"someApi/with/a/path/and?some=query&string=yeah!\",\n         @{@\"x\" : @5}],\n    \n      // Whitespace and path in App URL\n      @[ @\"http://someApp.com/some%20path/api/some%20api?%26encode=5\",\n         @\"http://someApp.com/some path\",\n         @\"some api\",\n         @{@\"&encode\" : @5}],\n      \n      // Array\n      @[ @\"http://someApp.com/api/someApi?x=1&x=B\",\n         @\"http://someApp.com\",\n         @\"someApi\",\n         @{@\"x\" : @[@1, @\"B\"]}]\n    ];\n    \n    for (id testCase in testCases) {\n        \n        NSString *expectedURL = testCase[0];\n        NSString *appURL = testCase[1];\n        NSString *APIName = testCase[2];\n        NSDictionary *parameters = testCase[3];\n        \n        MSClient *client = [MSClient clientWithApplicationURLString:appURL];\n        \n        NSURL *url = [MSURLBuilder URLForApi:client\n                                     APIName:APIName\n                                  parameters:parameters\n                                     orError:nil];\n        \n        XCTAssertNotNil(url, @\"url should not be nil\");\n        XCTAssertTrue([[url absoluteString] isEqualToString:expectedURL],\n                     @\"the url was: %@\", [url absoluteString]);\n    }\n}\n\n\n-(void) testQueryStringFromQueryEscapesPredicateConstants\n{\n    NSString *expectedQueryString = @\"$filter=(title%20eq%20'%23%3F%26$%20encode%20me%21')\";\n    NSString *appURL = @\"http:\\\\someApp.com\";\n    NSString *tableName = @\"someTable\";\n    NSString *predicateString = @\"title == '#?&$ encode me!'\";\n    \n    MSClient *client = [MSClient clientWithApplicationURLString:appURL];\n    MSTable *table = [client tableWithName:tableName];\n    \n    NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];\n    \n    MSQuery *query = [[MSQuery alloc] initWithTable:table predicate:predicate];\n    \n    NSString *queryString = [MSURLBuilder queryStringFromQuery:query\n                                                            orError:nil];\n    \n    XCTAssertNotNil(queryString, @\"queryString should not be nil\");\n    XCTAssertTrue([queryString isEqualToString:expectedQueryString],\n                 @\"the queryString was: %@\", queryString);\n    \n}\n\n-(void) testQueryStringFromQueryValidatesUserParameters\n{\n    NSError *error = nil;\n    NSString *appURL = @\"http:\\\\someApp.com\";\n    NSString *tableName = @\"someTable\";\n    NSString *predicateString = @\"title == '#?&$ encode me!'\";\n    \n    MSClient *client = [MSClient clientWithApplicationURLString:appURL];\n    MSTable *table = [client tableWithName:tableName];\n    \n    NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];\n    \n    MSQuery *query = [[MSQuery alloc] initWithTable:table predicate:predicate];\n    query.parameters = @{\n        @\"key1\": @\"someValue\",\n        @\"$key2\": @\"14\",\n    };\n\n    NSString *queryString = [MSURLBuilder queryStringFromQuery:query\n                                                            orError:&error];\n    \n    XCTAssertNil(queryString, @\"queryString should be nil\");\n    XCTAssertNotNil(error, @\"error should not have been nil.\");\n    XCTAssertTrue(error.domain == MSErrorDomain,\n                 @\"error domain should have been MSErrorDomain.\");\n    XCTAssertTrue(error.code == MSInvalidUserParameterWithRequest,\n                 @\"error code should have been MSInvalidUserParameterWithRequest.\");\n    \n    NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n    XCTAssertTrue([description isEqualToString:@\"'$key2' is an invalid user-defined query string parameter. User-defined query string parameters must not begin with a '$'.\"],\n                 @\"description was: %@\", description);}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSUserAgentBuilderTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSUserAgentBuilder.h\"\n\n@interface MSUserAgentBuilderTests : XCTestCase\n\n@end\n\n@implementation MSUserAgentBuilderTests\n\n\n#pragma mark * Setup and TearDown\n\n\n-(void) setUp\n{\n    NSLog(@\"%@ setUp\", self.name);\n}\n\n-(void) tearDown\n{\n    NSLog(@\"%@ tearDown\", self.name);\n}\n\n\n#pragma mark * UserAgent Method Tests\n\n\n-(void) testURLForTable\n{\n    NSString *userAgent = [MSUserAgentBuilder userAgent];\n    \n    XCTAssertTrue([userAgent isEqualToString:@\"ZUMO/2.2 (lang=objective-c; os=--; os_version=--; arch=iOSSimulator; version=2.2.0)\"],\n                 @\"user agent was: %@\", userAgent);\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/MSUserTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"MSUser.h\"\n\n@interface MSUserTests : XCTestCase\n\n@end\n\n\n@implementation MSUserTests\n\n\n#pragma mark * Setup and TearDown\n\n\n-(void) setUp\n{    \n    NSLog(@\"%@ setUp\", self.name);\n}\n\n-(void) tearDown\n{    \n    NSLog(@\"%@ tearDown\", self.name);\n}\n\n\n#pragma mark * Init Method Tests\n\n\n-(void) testInitWithUserId\n{\n    MSUser *user = [[MSUser alloc] initWithUserId:@\"SomeUserId\"];\n    \n    XCTAssertNotNil(user, @\"user should not be nil.\");\n    XCTAssertTrue([user.userId isEqualToString:@\"SomeUserId\"],\n                 @\"user id should have been set.\");\n}\n\n-(void) testInitWithUserIdAllowsNilUserId\n{\n    MSUser *user = [[MSUser alloc] initWithUserId:nil];\n    \n    XCTAssertNotNil(user, @\"user should not be nil.\");\n    XCTAssertNil(user.userId, @\"user id should have been nil.\");\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/TodoItem.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import <CoreData/CoreData.h>\n\n@interface TodoItem : NSManagedObject\n\n@property (nonatomic, retain) NSString * id;\n@property (nonatomic, retain) NSString * ms_version;\n@property (nonatomic, retain) NSNumber * sort;\n@property (nonatomic, retain) NSString * text;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/TodoItem.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"TodoItem.h\"\n\n@implementation TodoItem\n\n@dynamic id;\n@dynamic ms_version;\n@dynamic sort;\n@dynamic text;\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/WindowsAzureMobileServicesFunctionalTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <XCTest/XCTest.h>\n#import \"WindowsAzureMobileServices.h\"\n#import \"MSTestFilter.h\"\n#import \"MSTable+MSTableTestUtilities.h\"\n\n@interface WindowsAzureMobileServicesFunctionalTests : XCTestCase {\n    MSClient *client;\n    BOOL done;\n}\n   \n@end\n\n@implementation WindowsAzureMobileServicesFunctionalTests\n\n\n#pragma mark * Setup and TearDown\n\n\n- (void) setUp\n{\n    [super setUp];\n    self.continueAfterFailure = NO;\n    \n    NSLog(@\"%@ setUp\", self.name);\n    \n    // These functional tests requires a working Windows Mobile Azure Service\n    // with a table named \"todoItem\". Enter the application URL and application\n    // key for the Windows Mobile Azure Service in the settings.plist file.\n    \n    NSString *path = [[NSBundle  bundleForClass:[self class]] pathForResource:@\"settings\" ofType:@\"plist\"];\n    NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path];\n    \n    client = [MSClient\n              clientWithApplicationURLString:[settings objectForKey:@\"TestAppUrl\"]\n              applicationKey:[settings objectForKey:@\"TestAppApplicationKey\"]];\n\n    XCTAssertTrue([client.applicationURL.description hasPrefix:@\"https://\"], @\"The functional tests are currently disabled.\");\n\n    self.continueAfterFailure = YES;\n    done = NO;\n    \n    XCTAssertNotNil(client, @\"Could not create test client.\");\n}\n\n- (void) tearDown\n{\n    self.continueAfterFailure = YES;\n    \n    NSLog(@\"%@ tearDown\", self.name);\n}\n\n\n#pragma mark * End-to-End Positive Insert, Update, Delete and Read Tests\n\n\n-(void) testCreateUpdateAndDeleteTodoItem\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write E2E test!\", @\"complete\": @(NO) };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *newItem, NSError *error) {\n        // Check for an error\n        if (error) {\n            XCTAssertTrue(FALSE, @\"Insert failed with error: %@\", error.localizedDescription);\n            done = YES;\n        }\n        \n        // Verify that the insert succeeded\n        XCTAssertNotNil(newItem, @\"newItem should not be nil.\");\n        XCTAssertNotNil(newItem[@\"id\"],\n                       @\"newItem should now have an id.\");\n        \n        // Update the item\n        NSDictionary *itemToUpdate = @{\n            @\"id\" :newItem[@\"id\"],\n            @\"text\":@\"Write E2E test!\",\n            @\"complete\": @(YES)\n        };\n        \n        [todoTable update:itemToUpdate completion:^(NSDictionary *updatedItem, NSError *error) {\n            \n            // Check for an error\n            if (error) {\n                XCTAssertTrue(FALSE, @\"Update failed with error: %@\", error.localizedDescription);\n                done = YES;\n            }\n            \n            // Verify that the update succeeded\n            XCTAssertNotNil(updatedItem, @\"updatedItem should not be nil.\");\n            XCTAssertTrue([updatedItem[@\"complete\"] boolValue],\n                           @\"updatedItem should now be completed.\");\n            \n            // Delete the item\n            [todoTable delete:updatedItem completion:^(NSNumber *itemId, NSError *error) {\n \n                // Check for an error\n                if (error) {\n                    XCTAssertTrue(FALSE, @\"Delete failed with error: %@\", error.localizedDescription);\n                    done = YES;\n                }\n                \n                // Verify that the delete succeeded\n                XCTAssertTrue([itemId longLongValue] ==\n                            [updatedItem[@\"id\"] longLongValue],\n                            @\"itemId deleted was: %@.\", itemId);\n                done = YES;\n                \n            }];\n        }];\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n-(void) testCreateAndQueryTodoItem\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the items\n    NSDictionary *item1 = @{ @\"text\":@\"ItemA\", @\"complete\": @(NO) };\n    NSDictionary *item2 = @{ @\"text\":@\"ItemB\", @\"complete\": @(YES) };\n    NSDictionary *item3 = @{ @\"text\":@\"ItemB\", @\"complete\": @(NO) };\n    NSArray *items = @[item1,item2, item3];\n\n    id query7AfterQuery6 = ^(MSQueryResult *result, NSError *error) {\n        \n        // Check for an error\n        if (error) {\n            XCTAssertTrue(FALSE, @\"Test failed with error: %@\", error.localizedDescription);\n            done = YES;\n        }\n        \n        XCTAssertTrue(result.items.count == 2, @\"items.count was: %lu\", (unsigned long)result.items.count);\n        XCTAssertTrue(result.totalCount == 3, @\"totalCount was: %ld\", (long)result.totalCount);\n        \n        [todoTable deleteAllItemsWithCompletion:^(NSError *error) { done = YES; }];\n    };\n    \n    id query6AfterQuery5 = ^(MSQueryResult *result, NSError *error) {\n        \n        // Check for an error\n        if (error) {\n            XCTAssertTrue(FALSE, @\"Test failed with error: %@\", error.localizedDescription);\n            done = YES;\n        }\n        \n        XCTAssertTrue(result.items.count == 2, @\"items.count was: %lu\", (unsigned long)result.items.count);\n        XCTAssertTrue(result.totalCount == 3, @\"totalCount was: %ld\", (long)result.totalCount);\n        \n        MSQuery *query = [todoTable query];\n        query.fetchOffset = 1;\n        query.includeTotalCount = YES;\n        [query readWithCompletion:query7AfterQuery6];\n    };\n    \n    id query5AfterQuery4 = ^(MSQueryResult *result, NSError *error) {\n        \n        // Check for an error\n        if (error) {\n            XCTAssertTrue(FALSE, @\"Test failed with error: %@\", error.localizedDescription);\n            done = YES;\n        }\n        \n        XCTAssertTrue(result.items.count == 3, @\"items.count was: %lu\", (unsigned long)result.items.count);\n        XCTAssertTrue(result.totalCount == -1, @\"totalCount was: %ld\", (long)result.totalCount);\n        \n        [todoTable readWithQueryString:@\"$top=2&$inlinecount=allpages\"\n                            completion:query6AfterQuery5];\n    };\n    \n    id query4AfterQuery3 = ^(NSDictionary *item, NSError *error) {\n        \n        // Check for an error\n        if (error) {\n            XCTAssertTrue(FALSE, @\"Test failed with error: %@\", error.localizedDescription);\n            done = YES;\n        }\n        \n        XCTAssertNotNil(item, @\"item should not have been nil.\");\n        \n        [todoTable readWithQueryString:nil completion:query5AfterQuery4];\n    };\n    \n    id query3AfterQuery2 = ^(MSQueryResult *result, NSError *error) {\n        \n        // Check for an error\n        if (error) {\n            XCTAssertTrue(FALSE, @\"Test failed with error: %@\", error.localizedDescription);\n            done = YES;\n        }\n        \n        XCTAssertTrue(result.items.count == 1, @\"items.count was: %lu\", (unsigned long)result.items.count);\n        XCTAssertTrue(result.totalCount == -1, @\"totalCount was: %ld\", (long)result.totalCount);\n        \n        [todoTable readWithId:[result.items[0] valueForKey:@\"id\"]\n                    completion:query4AfterQuery3];\n    };\n    \n    id query2AfterQuery1 = ^(MSQueryResult *result, NSError *error) {\n        \n        // Check for an error\n        if (error) {\n            XCTAssertTrue(FALSE, @\"Test failed with error: %@\", error.localizedDescription);\n            done = YES;\n        }\n        \n        XCTAssertTrue(result.items.count == 2, @\"items.count was: %lu\", (unsigned long)result.items.count);\n        XCTAssertTrue(result.totalCount == -1, @\"totalCount was: %ld\", (long)result.totalCount);\n        \n        NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"text ENDSWITH 'B' AND complete == TRUE\"];\n        [todoTable readWithPredicate:predicate completion:query3AfterQuery2];\n    };\n    \n    id query1AfterInsert = ^(NSError *error) {\n        \n        // Check for an error\n        if (error) {\n            XCTAssertTrue(FALSE, @\"Test failed with error: %@\", error.localizedDescription);\n            done = YES;\n        }\n        \n        NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"text ENDSWITH 'B'\"];\n        [todoTable readWithPredicate:predicate completion:query2AfterQuery1];\n    };\n    \n    id insertAfterDeleteAll = ^(NSError *error){\n        \n        // Check for an error\n        if (error) {\n            XCTAssertTrue(FALSE, @\"Test failed with error: %@\", error.localizedDescription);\n            done = YES;\n        }\n        \n        [todoTable insertItems:items completion:query1AfterInsert];\n    };\n    \n    [todoTable deleteAllItemsWithCompletion:insertAfterDeleteAll];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n\n#pragma mark * End-to-End Filter Tests\n\n\n-(void) testFilterThatModifiesRequest\n{\n    // Create a filter that will replace the request with one requesting\n    // a table that doesn't exist.\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSURL *badURL = [client.applicationURL\n                     URLByAppendingPathComponent:@\"tables/NoSuchTable\"];\n    NSURLRequest *badRequest = [NSURLRequest requestWithURL:badURL];\n    \n    testFilter.requestToUse = badRequest;\n    \n    // Create the client and the table\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    MSTable *todoTable = [filterClient tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write E2E test!\", @\"complete\": @(NO) };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n\n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSErrorMessageErrorCode,\n                     @\"error code should have been MSErrorMessageErrorCode.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"Error: Table 'NoSuchTable' does not exist.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n\n    }];\n        \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n-(void) testFilterThatModifiesResponse\n{\n    // Create a filter that will replace the response with one that has\n    // a 400 status code and an error message\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc]\n                                   initWithURL:nil\n                                   statusCode:400\n                                   HTTPVersion:nil headerFields:nil];\n    NSString* stringData = @\"This is an Error Message for the testFilterThatModifiesResponse test!\";\n    NSData* data = [stringData dataUsingEncoding:NSUTF8StringEncoding];\n    \n    testFilter.responseToUse = response;\n    testFilter.dataToUse = data;\n    \n    // Create the client and the table\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    MSTable *todoTable = [filterClient tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write E2E test!\", @\"complete\": @(NO) };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n\n        XCTAssertNil(item, @\"item should have been nil.\");\n\n        XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n        XCTAssertTrue([error domain] == MSErrorDomain,\n                     @\"error domain was: %@\", [error domain]);\n        XCTAssertTrue([error code] == MSErrorMessageErrorCode,\n                     @\"error code was: %ld\",(long)[error code]);\n        XCTAssertTrue([[error localizedDescription] isEqualToString:\n                      @\"This is an Error Message for the testFilterThatModifiesResponse test!\"],\n                     @\"error description was: %@\", [error localizedDescription]);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n-(void) testFilterThatReturnsError\n{\n    // Create a filter that will replace the error\n    MSTestFilter *testFilter = [[MSTestFilter alloc] init];\n    \n    NSError *error = [NSError errorWithDomain:@\"SomeDomain\"\n                                         code:-102\n                                     userInfo:nil];\n    testFilter.errorToUse = error;\n    \n    // Create the client and the table\n    MSClient *filterClient = [client clientWithFilter:testFilter];\n    \n    MSTable *todoTable = [filterClient tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write E2E test!\", @\"complete\": @(NO) };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n\n        XCTAssertNil(item, @\"item should have been nil.\");\n\n        XCTAssertNotNil(error, @\"error was nil after deserializing item.\");\n        XCTAssertTrue([error.domain isEqualToString:@\"SomeDomain\"],\n                     @\"error domain was: %@\", [error domain]);\n        XCTAssertTrue([error code] == -102,\n                     @\"error code was: %ld\",(long)[error code]);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n\n#pragma mark * End-to-End URL Encoding Tests\n\n\n-(void) testFilterConstantsAreURLEncoded\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    NSString *predicateString = @\"text == '#?&$ encode me!'\";\n    NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"#?&$ encode me!\", @\"complete\": @(NO) };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        \n        XCTAssertNotNil(item, @\"item should not have been nil.\");\n        XCTAssertNil(error, @\"error from insert should have been nil.\");\n        \n        // Now try to query the item and make sure we don't error\n        [todoTable readWithPredicate:predicate completion:^(MSQueryResult *result,\n                                                    NSError *error) {\n            \n            XCTAssertNotNil(result.items, @\"items should not have been nil.\");\n            XCTAssertTrue([result.items count] > 0, @\"items should have matched something.\");\n            XCTAssertNil(error, @\"error from query should have been nil.\");\n            \n            // Now delete the inserted item so as not to corrupt future tests\n            NSNumber *itemIdToDelete = item[@\"id\"];\n            [todoTable deleteWithId:itemIdToDelete completion:^(NSNumber *itemId,\n                                                                NSError *error) {\n                XCTAssertNil(error, @\"error from delete should have been nil.\");\n                done = YES;\n            }];\n        }];\n    }];\n\n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n-(void) testUserParametersAreURLEncodedWithQuery\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    MSQuery *query = [todoTable query];\n    query.parameters = @{@\"encodeMe$?\": @\"No really $#%& encode me!\"};\n    [query readWithCompletion:^(MSQueryResult *result, NSError *error) {\n        \n        XCTAssertNotNil(result.items, @\"items should not have been nil.\");\n        XCTAssertNil(error, @\"error from query was: %@\", error.localizedDescription);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n-(void) testUserParametersAreURLEncodedWithInsertUpdateAndDelete\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n\n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"some text\", @\"complete\": @(NO) };\n    NSDictionary *parameters = @{@\"encodeMe$?\": @\"No really $#%& encode me!\"};\n    \n    // Insert the item\n    [todoTable insert:item\n           parameters:parameters\n           completion:^(NSDictionary *item, NSError *error) {\n        \n        XCTAssertNotNil(item, @\"item should not have been nil.\");\n        XCTAssertNil(error, @\"error from insert should have been nil.\");\n        \n        // Now update the inserted item\n        [todoTable update:item\n               parameters:parameters\n               completion:^(NSDictionary *updatedItem, NSError *error) {\n                          \n            XCTAssertNotNil(updatedItem, @\"updatedItem should not have been nil.\");\n            XCTAssertNil(error, @\"error from update should have been nil.\");\n\n            // Now delete the inserted item so as not to corrupt future tests\n            NSNumber *itemIdToDelete = updatedItem[@\"id\"];\n            [todoTable deleteWithId:itemIdToDelete\n                        parameters:parameters\n                         completion:^(NSNumber *itemId, NSError *error) {\n                XCTAssertNil(error, @\"error from delete should have been nil.\");\n                done = YES;\n            }];\n        }];\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n\n#pragma mark * Negative Insert Tests\n\n\n-(void) testInsertItemForNonExistentTable\n{\n    MSTable *todoTable = [client tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    NSDictionary *item = @{ @\"text\":@\"Write E2E test!\", @\"complete\": @(NO) };\n    \n    // Insert the item\n    [todoTable insert:item completion:^(NSDictionary *item, NSError *error) {\n        \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        NSLog(@\"%ld\", (long)error.code);\n        XCTAssertTrue(error.code == MSErrorMessageErrorCode,\n                     @\"error code should have been MSErrorMessageErrorCode.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"Error: Table 'NoSuchTable' does not exist.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n\n#pragma mark * Negative Update Tests\n\n\n-(void) testUpdateItemForNonExistentTable\n{\n    MSTable *todoTable = [client tableWithName:@\"NoSuchTable\"];\n    \n    // Update the item\n    NSDictionary *item = @{\n        @\"text\":@\"Write E2E test!\",\n        @\"complete\": @(NO),\n        @\"id\":@100\n    };\n    \n    // Insert the item\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n        \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSErrorMessageErrorCode,\n                     @\"error code should have been MSErrorMessageErrorCode.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"Error: Table 'NoSuchTable' does not exist.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n-(void) testUpdateItemForNonExistentItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{\n    @\"text\":@\"Write update E2E test!\",\n    @\"complete\": @(NO),\n    @\"id\":@-5\n    };\n    \n    // Update the item\n    [todoTable update:item completion:^(NSDictionary *item, NSError *error) {\n        \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSErrorMessageErrorCode,\n                     @\"error code should have been MSErrorMessageErrorCode.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"Error: An item with id '-5' does not exist.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n\n#pragma mark * Negative Delete Tests\n\n\n-(void) testDeleteItemForNonExistentTable\n{\n    MSTable *todoTable = [client tableWithName:@\"NoSuchTable\"];\n    \n    // Create the item\n    NSDictionary *item = @{\n        @\"text\":@\"Write E2E test!\",\n        @\"complete\": @(NO),\n        @\"id\":@100\n    };\n    \n    // Delete the item\n    [todoTable delete:item completion:^(NSNumber *itemId, NSError *error) {\n        \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSErrorMessageErrorCode,\n                     @\"error code should have been MSErrorMessageErrorCode.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"Error: Table 'NoSuchTable' does not exist.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemForNonExistentItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Create the item\n    NSDictionary *item = @{\n        @\"text\":@\"Write update E2E test!\",\n        @\"complete\": @(NO),\n        @\"id\":@-5\n    };\n    \n    // Delete the item\n    [todoTable delete:item completion:^(NSNumber *itemId, NSError *error) {\n        \n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSErrorMessageErrorCode,\n                     @\"error code should have been MSErrorMessageErrorCode.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"Error: An item with id '-5' does not exist.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n-(void) testDeleteItemWithIdForNonExistentItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Delete the item\n    [todoTable deleteWithId:@-5 completion:^(NSNumber *itemId, NSError *error) {\n\n        XCTAssertNil(itemId, @\"itemId should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSErrorMessageErrorCode,\n                     @\"error code should have been MSErrorMessageErrorCode.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"Error: An item with id '-5' does not exist.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n\n#pragma mark * Negative ReadWithId Tests\n\n\n-(void) testReadWithIdForNonExistentTable\n{\n    MSTable *todoTable = [client tableWithName:@\"NoSuchTable\"];\n\n    // Insert the item\n    [todoTable readWithId:@100 completion:^(NSDictionary *item, NSError *error) {\n    \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSErrorMessageErrorCode,\n                     @\"error code should have been MSErrorMessageErrorCode.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"Error: Table 'NoSuchTable' does not exist.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n-(void) testReadWithIdForNonExistentItemId\n{\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    \n    // Insert the item\n    [todoTable readWithId:@-5 completion:^(NSDictionary *item, NSError *error) {\n    \n        XCTAssertNil(item, @\"item should have been nil.\");\n        \n        XCTAssertNotNil(error, @\"error should not have been nil.\");\n        XCTAssertTrue(error.domain == MSErrorDomain,\n                     @\"error domain should have been MSErrorDomain.\");\n        XCTAssertTrue(error.code == MSErrorMessageErrorCode,\n                     @\"error code should have been MSErrorMessageErrorCode.\");\n        \n        NSString *description = (error.userInfo)[NSLocalizedDescriptionKey];\n        XCTAssertTrue([description isEqualToString:@\"Error: An item with id '-5' does not exist.\"],\n                     @\"description was: %@\", description);\n        \n        done = YES;\n    }];\n    \n    XCTAssertTrue([self waitForTest:90.0], @\"Test timed out.\");\n}\n\n-(void) testConnectionWithDelegateQueue\n{\n    // Verify default behavior (callback on thread calling function, which will be the main thread here\n    MSTable *todoTable = [client tableWithName:@\"todoItem\"];\n    [todoTable readWithId:@1 completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertTrue([NSThread isMainThread], @\"expected to be on main thread\");\n        done = YES;\n    }];\n    done = NO;\n    XCTAssertTrue([self waitForTest:30.0], @\"Test timed out.\");\n    \n    [client invokeAPI:@\"testapi\" body:nil HTTPMethod:@\"GET\" parameters:nil headers:nil completion:^(id result, NSHTTPURLResponse *response, NSError *error) {\n        XCTAssertTrue([NSThread isMainThread], @\"expected to be on main thread\");\n        done = YES;\n    }];\n    done = NO;\n    XCTAssertTrue([self waitForTest:30.0], @\"Test timed out.\");\n\n    // Now verify moved to the operation queue\n    client.connectionDelegateQueue = [[NSOperationQueue alloc] init];\n    client.connectionDelegateQueue.name = @\"azure.mobileservices.testing\";\n\n    todoTable = [client tableWithName:@\"todoItem\"];\n    [todoTable readWithId:@1 completion:^(NSDictionary *item, NSError *error) {\n        XCTAssertFalse([NSThread isMainThread], @\"expected to not be on main thread\");\n        done = YES;\n    }];\n    \n    done = NO;\n    XCTAssertTrue([self waitForTest:30.0 forLoopMode:NSRunLoopCommonModes], @\"Test timed out.\");\n    \n    [client invokeAPI:@\"testapi\" body:nil HTTPMethod:@\"GET\" parameters:nil headers:nil completion:^(id result, NSHTTPURLResponse *response, NSError *error) {\n        XCTAssertFalse([NSThread isMainThread], @\"expected to not be on main thread\");\n        done = YES;\n    }];\n    XCTAssertTrue([self waitForTest:30.0 forLoopMode:NSRunLoopCommonModes], @\"Test timed out.\");\n}\n\n\n#pragma mark * Async Test Helper Method\n\n\n-(BOOL) waitForTest:(NSTimeInterval)testDuration {\n    return [self waitForTest:testDuration forLoopMode:NSDefaultRunLoopMode];\n}\n\n-(BOOL) waitForTest:(NSTimeInterval)testDuration forLoopMode:(NSString *)loopMode {\n\n    NSDate *timeoutAt = [NSDate dateWithTimeIntervalSinceNow:testDuration];\n\n    while (!done) {\n        [[NSRunLoop currentRunLoop] runMode:loopMode\n                                 beforeDate:timeoutAt];\n        if([timeoutAt timeIntervalSinceNow] <= 0.0) {\n            break;\n        }\n    };\n    \n    return done;\n}\n\n@end\n"
  },
  {
    "path": "sdk/iOS/test/WindowsAzureMobileServicesTests-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>Microsoft.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "sdk/iOS/test/en.lproj/InfoPlist.strings",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "sdk/iOS/test/settings.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>TestAppUrl</key>\n\t<string></string>\n\t<key>TestAppApplicationKey</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "test/.gitignore",
    "content": "packages/\n"
  },
  {
    "path": "test/Android/Automation/AndroidAutomation.bat",
    "content": "@echo OFF\n\nif \"%4\"==\"\" goto :Usage\nset _APP_URL=%1\nset _APP_KEY=%2\nset _UPLOAD_LOG_URL=%3\nset _GCM_SENDER_ID=%4\n\nwhere adb > NUL 2>&1\nIF ERRORLEVEL 1 goto :MissingAdb\n\nREM Creates the preferences file to be sent to the app\necho { > tempAutoPrefs.txt\necho \"pref_mobile_service_url\":\"%_APP_URL%\", >> tempAutoPrefs.txt\necho \"pref_mobile_service_key\":\"%_APP_KEY%\", >> tempAutoPrefs.txt\necho \"pref_log_post_url\":\"%_UPLOAD_LOG_URL%\", >> tempAutoPrefs.txt\necho \"pref_GCM_sender_id\":\"%_GCM_SENDER_ID%\", >> tempAutoPrefs.txt\necho \"pref_run_unattended\":true >> tempAutoPrefs.txt\necho } >> tempAutoPrefs.txt\n\necho Created the automation preferences file\n\nREM Remove signalling file, ignore error if it doesn't exist\nadb shell rm /sdcard/zumo/done.txt > NUL\n\nREM Stops any running instances of the app on the device\nadb shell am force-stop com.microsoft.windowsazure.mobileservices.zumoe2etestapp\n\nREM Copies the preferences file to the app\nadb push tempAutoPrefs.txt /sdcard/zumo/automationPreferences.txt\n\nREM Starts the app on the device\necho Starting the test app...\nadb shell am start com.microsoft.windowsazure.mobileservices.zumoe2etestapp/.MainActivity\n\n\n:WaitForFinish\necho Waiting for the app to finish...\ntimeout /T 10 /NOBREAK > NUL\nadb pull /sdcard/zumo/done.txt IAmDone.txt 2> NUL\nIF ERRORLEVEL 1 goto :WaitForFinish\n\n:Done\nREM Stops the running instance of the app\nadb shell am force-stop com.microsoft.windowsazure.mobileservices.zumoe2etestapp\n\nREM Read the test status\nSET /P _TEST_STATUS=<IAmDone.txt\n\nIF \"%_TEST_STATUS%\"==\"PASSED\" goto :TestPassed\n:TestFailed\necho The test run failed\nEXIT /B 1\ngoto :TheEnd\n\n:TestPassed\necho The test run passed!\nEXIT /B 0\n\n:Usage\necho Usage: %0 ^<app url^> ^<app key^> ^<log server url^> ^<GCM sender id^>\ngoto :TheEnd\n\n:MissingAdb\necho Error: Cannot find adb.exe\necho Make sure that the adb.exe (from ADT's sdk\\platform-tools folder) is in the path\ngoto :TheEnd\n\n:TheEnd\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/.gitignore",
    "content": "#built application files\n*.apk\n*.ap_\n\n# files for the dex VM\n*.dex\n\n# Java class files\n*.class\n\n# generated files\nbin/\ngen/\n\n# Local configuration file (sdk path, etc)\nlocal.properties\n\n# Windows thumbnail db\nThumbs.db\n\n# OSX files\n.DS_Store\n\n# Eclipse project files\n.classpath\n.project\n\n# Android Studio\n.idea\n#.idea/workspace.xml - remove # and delete .idea if it better suit your needs.\n.gradle\nbuild/"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\nandroid {\n    compileSdkVersion 21\n    buildToolsVersion '21.1.2'\n\n    defaultConfig {\n        minSdkVersion 8\n        targetSdkVersion 20\n        versionCode 1\n        versionName \"1.0\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    compile \"com.google.android.gms:play-services:3.1.+\"\n    compile project(':sdk')\n    compile 'com.google.code.gson:gson:2.3'\n    compile 'com.google.guava:guava:18.0'\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/libs/getLibs.ps1",
    "content": "$client = new-object System.Net.WebClient \n$shell_app = new-object -com shell.application\n$scriptpath = $MyInvocation.MyCommand.Path\n$dir = Split-Path $scriptpath\n\n$filename = \"gcm_r03.zip\"\n\nWrite-Host \"Downloading Google Cloud Messaging R3\"\n$client.DownloadFile(\"https://dl-ssl.google.com/android/repository/gcm_r03.zip\", \"$dir\\$filename\") \n\nWrite-Host \"Decompressing...\"\n$zip_file = $shell_app.namespace(\"$dir\\$filename\")\n$destination = $shell_app.namespace(\"$dir\")\n$destination.Copyhere($zip_file.items())\n\nWrite-Host \"Removing zip\"\nRemove-Item \"$dir\\$filename\"\n\nWrite-Host \"Move library to destination\"\nMove-Item \"$dir\\gcm_r03\\gcm-client\\dist\\gcm.jar\" \"$dir\"\n\nWrite-Host \"Remove extra files\"\nRemove-Item \"$dir\\gcm_r03\\\" -recurse"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/libs/getLibs.sh",
    "content": "#! /bin/sh\n\necho \"Downloading Google Cloud Messaging R3\"\ncurl -O https://dl-ssl.google.com/android/repository/gcm_r03.zip\n\necho \"Decompressing...\"\nunzip gcm_r03.zip\n\necho \"Removing zip\"\nrm gcm_r03.zip\n\necho \"Move library to destination\"\nmv ./gcm_r03/gcm-client/dist/gcm.jar ./\n\necho \"Remove extra files\"\nrm -rf ./gcm_r03"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/libs/required-libs.txt",
    "content": "This directory should contain the following JARs:\n    - gcm.jar R3"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Applications/Android Studio.app/sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.microsoft.windowsazure.mobileservices.zumoe2etestapp\"\n    android:versionCode=\"1\"\n    android:versionName=\"1.0\">\n\n    <uses-permission android:name=\"android.permission.USE_CREDENTIALS\" />\n\n    <uses-sdk\n        android:minSdkVersion=\"8\"\n        android:targetSdkVersion=\"17\" />\n\n    <!-- GCM-specific settings -->\n    <permission\n        android:name=\"com.microsoft.windowsazure.mobileservices.zumoe2etestapp.permission.C2D_MESSAGE\"\n        android:protectionLevel=\"signature\" />\n    <uses-permission android:name=\"com.microsoft.windowsazure.mobileservices.zumoe2etestapp.permission.C2D_MESSAGE\" />\n    <!-- App receives GCM messages. -->\n    <uses-permission android:name=\"com.google.android.c2dm.permission.RECEIVE\" />\n    <!-- GCM connects to Google Services. -->\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <!-- GCM requires a Google account. -->\n    <uses-permission android:name=\"android.permission.GET_ACCOUNTS\" />\n    <!-- Keeps the processor from sleeping when a message is received. -->\n    <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@drawable/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:theme=\"@style/AppTheme\">\n        <activity\n            android:name=\"com.microsoft.windowsazure.mobileservices.zumoe2etestapp.MainActivity\"\n            android:configChanges=\"orientation|screenSize|keyboard|keyboardHidden\"\n            android:label=\"@string/app_name\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity\n            android:name=\"com.microsoft.windowsazure.mobileservices.zumoe2etestapp.ZumoPreferenceActivity\"\n            android:label=\"@string/title_activity_zumo_preference\"></activity>\n\n        <receiver\n            android:name=\"com.google.android.gcm.GCMBroadcastReceiver\"\n            android:permission=\"com.google.android.c2dm.permission.SEND\">\n            <intent-filter>\n                <action android:name=\"com.google.android.c2dm.intent.RECEIVE\" />\n                <action android:name=\"com.google.android.c2dm.intent.REGISTRATION\" />\n\n                <category android:name=\"com.microsoft.windowsazure.mobileservices.zumoe2etestapp\" />\n            </intent-filter>\n        </receiver>\n\n        <service android:name=\".GCMIntentService\" />\n\n    </application>\n\n</manifest>"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/Constants.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp;\n\npublic class Constants {\n    public static final String PREFERENCE_MOBILE_SERVICE_URL = \"pref_mobile_service_url\";\n\n    public static final String PREFERENCE_MOBILE_SERVICE_KEY = \"pref_mobile_service_key\";\n\n    public static final String PREFERENCE_MASTER_RUN_ID = \"pref_master_run_id\";\n\n    public static final String PREFERENCE_RUNTIME_VERSION = \"pref_runtime_version\";\n\n    public static final String PREFERENCE_DAYLIGHT_CLIENT_ID = \"pref_daylight_client_id\";\n\n    public static final String PREFERENCE_DAYLIGHT_CLIENT_SECRET = \"pref_daylight_client_secret\";\n\n    public static final String PREFERENCE_DAYLIGHT_URL = \"pref_daylight_url\";\n\n    public static final String PREFERENCE_DAYLIGHT_PROJECT = \"pref_daylight_project\";\n\n    public static final String PREFERENCE_GOOGLE_USERID = \"pref_google_userid\";\n\n    public static final String PREFERENCE_GOOGLE_WEBAPP_CLIENTID = \"pref_google_webapp_clientid\";\n\n    public static final String PREFERENCE_GCM_SENDER_ID = \"pref_GCM_sender_id\";\n\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/GCMIntentService.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp;\n\nimport android.content.Context;\nimport android.content.Intent;\n\nimport com.google.android.gcm.GCMBaseIntentService;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.push.GCMMessageManager;\n\npublic class GCMIntentService extends GCMBaseIntentService {\n\n    @Override\n    protected void onError(Context context, String errorId) {\n        GCMMessageManager.instance.newRegistrationMessage(true, errorId);\n\n    }\n\n    @Override\n    protected void onMessage(Context context, Intent intent) {\n        GCMMessageManager.instance.newPushMessage(intent);\n\n    }\n\n    @Override\n    protected void onRegistered(Context context, String registrationId) {\n        GCMMessageManager.instance.newRegistrationMessage(false, registrationId);\n\n    }\n\n    @Override\n    protected void onUnregistered(Context context, String registrationId) {\n\n    }\n\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/MainActivity.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp;\n\nimport android.annotation.SuppressLint;\nimport android.annotation.TargetApi;\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.content.DialogInterface;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.content.res.Configuration;\nimport android.os.AsyncTask;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.os.Environment;\nimport android.preference.PreferenceManager;\nimport android.text.ClipboardManager;\nimport android.text.TextUtils;\nimport android.util.Log;\nimport android.util.Pair;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.webkit.WebView;\nimport android.widget.AdapterView;\nimport android.widget.ArrayAdapter;\nimport android.widget.ListView;\nimport android.widget.Spinner;\n\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.CompositeTestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.log.DaylightLogger;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.ClientSDKLoginTests;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.CustomApiTests;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.EnhancedPushTests;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.LoginTests;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.MiscTests;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.OfflineTests;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.PushTests;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.QueryTests;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.RoundTripTests;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.SystemPropertiesTests;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.UpdateDeleteTests;\n\nimport org.apache.http.HttpResponse;\nimport org.apache.http.HttpStatus;\nimport org.apache.http.StatusLine;\nimport org.apache.http.client.HttpClient;\nimport org.apache.http.client.methods.HttpGet;\nimport org.apache.http.impl.client.DefaultHttpClient;\n\nimport java.io.BufferedWriter;\nimport java.io.ByteArrayOutputStream;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.OutputStreamWriter;\nimport java.net.MalformedURLException;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n//import com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.EnhancedPushTests;\n//import com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.LoginTests;\n//import com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.MiscTests;\n//import com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.PushTests;\n//import com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.OfflineTests;\n//import com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.SystemPropertiesTests;\n\n@TargetApi(Build.VERSION_CODES.HONEYCOMB)\n@SuppressWarnings(\"deprecation\")\npublic class MainActivity extends Activity {\n\n    private static Activity mInstance;\n    private StringBuilder mLog;\n    private SharedPreferences mPrefManager;\n    private Map<String, String> mAutomationPreferences;\n    private ListView mTestCaseList;\n    private Spinner mTestGroupSpinner;\n\n    public static Activity getInstance() {\n        return mInstance;\n    }\n\n    @Override\n    public void onConfigurationChanged(Configuration newConfig) {\n        // don't restart the activity. Just process the configuration change\n        super.onConfigurationChanged(newConfig);\n    }\n\n    @SuppressLint(\"WorldReadableFiles\")\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n        setContentView(R.layout.activity_main);\n\n        mInstance = this;\n\n        mPrefManager = PreferenceManager.getDefaultSharedPreferences(this);\n\n        Bundle extras = getIntent().getExtras();\n        if (extras != null) {\n            mAutomationPreferences = new HashMap<String, String>();\n            mAutomationPreferences.put(\"pref_run_unattended\", extras.getString(\"pref_run_unattended\", \"\"));\n            mAutomationPreferences.put(\"pref_mobile_service_url\", extras.getString(\"pref_mobile_service_url\", \"\"));\n            mAutomationPreferences.put(\"pref_mobile_service_key\", extras.getString(\"pref_mobile_service_key\", \"\"));\n            mAutomationPreferences.put(\"pref_google_userid\", extras.getString(\"pref_google_userid\", \"\"));\n            mAutomationPreferences.put(\"pref_google_webapp_clientid\", extras.getString(\"pref_google_webapp_clientid\", \"\"));\n            mAutomationPreferences.put(\"pref_master_run_id\", extras.getString(\"pref_master_run_id\", \"\"));\n            mAutomationPreferences.put(\"pref_runtime_version\", extras.getString(\"pref_runtime_version\", \"\"));\n            mAutomationPreferences.put(\"pref_daylight_client_id\", extras.getString(\"pref_client_id\", \"\"));\n            mAutomationPreferences.put(\"pref_daylight_client_secret\", extras.getString(\"pref_client_secret\", \"\"));\n            mAutomationPreferences.put(\"pref_daylight_url\", extras.getString(\"pref_daylight_url\", \"\"));\n            mAutomationPreferences.put(\"pref_daylight_project\", extras.getString(\"pref_daylight_project\", \"\"));\n        }\n\n        mTestCaseList = (ListView) findViewById(R.id.testCaseList);\n        TestCaseAdapter testCaseAdapter = new TestCaseAdapter(this, R.layout.row_list_test_case);\n        mTestCaseList.setAdapter(testCaseAdapter);\n\n        mTestGroupSpinner = (Spinner) findViewById(R.id.testGroupSpinner);\n\n        ArrayAdapter<TestGroup> testGroupAdapter = new ArrayAdapter<TestGroup>(this, android.R.layout.simple_spinner_item);\n        mTestGroupSpinner.setAdapter(testGroupAdapter);\n        mTestGroupSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\n\n            @Override\n            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {\n                selectTestGroup(pos);\n            }\n\n            @Override\n            public void onNothingSelected(AdapterView<?> arg0) {\n                // do nothing\n            }\n        });\n\n        ClientSDKLoginTests.mainActivity = this;\n\n        PushTests.mainActivity = this;\n        EnhancedPushTests.mainActivity = this;\n\n        refreshTestGroupsAndLog();\n    }\n\n    private void selectTestGroup(int pos) {\n        TestGroup tg = (TestGroup) mTestGroupSpinner.getItemAtPosition(pos);\n        List<TestCase> testCases = tg.getTestCases();\n\n        fillTestList(testCases);\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    private void refreshTestGroupsAndLog() {\n        mLog = new StringBuilder();\n\n        Thread thread = new Thread() {\n\n            @Override\n            public void run() {\n\n                final boolean isNetBackend = IsNetBackend();\n\n                runOnUiThread(new Runnable() {\n\n                    @Override\n                    public void run() {\n\n                        ArrayAdapter<TestGroup> adapter = (ArrayAdapter<TestGroup>) mTestGroupSpinner.getAdapter();\n                        adapter.clear();\n                        adapter.add(new RoundTripTests());\n                        adapter.add(new QueryTests());\n                        adapter.add(new UpdateDeleteTests());\n                        //adapter.add(new ClientSDKLoginTests());\n                        adapter.add(new LoginTests(isNetBackend));\n                        adapter.add(new MiscTests());\n                        // adapter.add(new PushTests());\n                        adapter.add(new CustomApiTests());\n                        adapter.add(new SystemPropertiesTests(isNetBackend));\n                        adapter.add(new EnhancedPushTests(isNetBackend));\n                        adapter.add(new OfflineTests());\n\n                        ArrayList<Pair<TestCase, String>> allTests = new ArrayList<Pair<TestCase, String>>();\n                        ArrayList<Pair<TestCase, String>> allUnattendedTests = new ArrayList<Pair<TestCase, String>>();\n                        for (int i = 0; i < adapter.getCount(); i++) {\n                            TestGroup group = adapter.getItem(i);\n                            allTests.add(new Pair<TestCase, String>(Util.createSeparatorTest(\"Start of group: \" + group.getName()), \"Separator\"));\n                            allUnattendedTests.add(new Pair<TestCase, String>(Util.createSeparatorTest(\"Start of group: \" + group.getName()), \"Separator\"));\n\n                            List<TestCase> testsForGroup = group.getTestCases();\n                            for (TestCase test : testsForGroup) {\n                                allTests.add(new Pair<TestCase, String>(test, group.getName()));\n                                if (test.canRunUnattended()) {\n                                    allUnattendedTests.add(new Pair<TestCase, String>(test, group.getName()));\n                                }\n                            }\n                            allTests.add(new Pair<TestCase, String>(Util.createSeparatorTest(\"----\" + group.getName() + \"----\"), \"Separator\"));\n                            allUnattendedTests.add(new Pair<TestCase, String>(Util.createSeparatorTest(\"----\" + group.getName() + \"----\"), \"Separator\"));\n                        }\n\n                        int unattendedTestsIndex = adapter.getCount();\n\n                        adapter.add(new CompositeTestGroup(TestGroup.AllUnattendedTestsGroupName, allUnattendedTests));\n                        adapter.add(new CompositeTestGroup(TestGroup.AllTestsGroupName, allTests));\n\n                        if (shouldRunUnattended()) {\n                            mTestGroupSpinner.setSelection(unattendedTestsIndex);\n                            selectTestGroup(unattendedTestsIndex);\n                            changeCheckAllTests(true);\n                            runTests();\n                        } else {\n                            mTestGroupSpinner.setSelection(0);\n                            selectTestGroup(0);\n                        }\n                    }\n                });\n            }\n        };\n\n        thread.start();\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        // Inflate the menu; this adds items to the action bar if it is present.\n        getMenuInflater().inflate(R.menu.activity_main, menu);\n        return true;\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        switch (item.getItemId()) {\n            case R.id.menu_settings:\n                startActivity(new Intent(this, ZumoPreferenceActivity.class));\n                return true;\n\n            case R.id.menu_run_tests:\n                if (getMobileServiceKey().trim() == \"\" || getMobileServiceURL().trim() == \"\") {\n                    startActivity(new Intent(this, ZumoPreferenceActivity.class));\n                } else {\n                    runTests();\n                }\n                return true;\n\n            case R.id.menu_check_all:\n                changeCheckAllTests(true);\n                return true;\n\n            case R.id.menu_uncheck_all:\n                changeCheckAllTests(false);\n                return true;\n\n            case R.id.menu_reset:\n                refreshTestGroupsAndLog();\n                return true;\n\n            case R.id.menu_view_log:\n                AlertDialog.Builder logDialogBuilder = new AlertDialog.Builder(this);\n                logDialogBuilder.setTitle(\"Log\");\n\n                final WebView webView = new WebView(this);\n\n                String logContent = TextUtils.htmlEncode(mLog.toString()).replace(\"\\n\", \"<br />\");\n                String logHtml = \"<html><body><pre>\" + logContent + \"</pre></body></html>\";\n                webView.loadData(logHtml, \"text/html\", \"utf-8\");\n\n                logDialogBuilder.setPositiveButton(\"Copy\", new DialogInterface.OnClickListener() {\n\n                    @Override\n                    public void onClick(DialogInterface dialog, int which) {\n                        ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);\n                        clipboardManager.setText(mLog.toString());\n                    }\n                });\n\n                logDialogBuilder.setView(webView);\n\n                logDialogBuilder.create().show();\n                return true;\n\n            default:\n                return super.onOptionsItemSelected(item);\n        }\n    }\n\n    private void changeCheckAllTests(boolean check) {\n        TestGroup tg = (TestGroup) mTestGroupSpinner.getSelectedItem();\n        List<TestCase> testCases = tg.getTestCases();\n\n        for (TestCase testCase : testCases) {\n            testCase.setEnabled(check);\n        }\n\n        fillTestList(testCases);\n    }\n\n    private void fillTestList(List<TestCase> testCases) {\n        TestCaseAdapter testCaseAdapter = (TestCaseAdapter) mTestCaseList.getAdapter();\n\n        testCaseAdapter.clear();\n        for (TestCase testCase : testCases) {\n            testCaseAdapter.add(testCase);\n        }\n    }\n\n    private void runTests() {\n\n        MobileServiceClient client = null;\n\n        try {\n            client = createMobileServiceClient();\n        } catch (MalformedURLException e) {\n            createAndShowDialog(e, \"Error\");\n        }\n\n        // getMobileServiceRuntimeFeatures(client);\n\n        final TestGroup group = (TestGroup) mTestGroupSpinner.getSelectedItem();\n        logWithTimestamp(new Date(), \"Tests for group \\'\" + group.getName() + \"\\'\");\n\n        logSeparator();\n\n        final MobileServiceClient currentClient = client;\n\n        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1 || Build.VERSION.SDK_INT == Build.VERSION_CODES.ICE_CREAM_SANDWICH) {\n            // For android versions 4.0.x\n            // Run a first Void AsyncTask on UI thread to enable the possibility\n            // of running others on sub threads\n            new AsyncTask<Void, Void, Void>() {\n                @Override\n                protected Void doInBackground(Void... params) {\n                    return null;\n                }\n            }.execute();\n\n        }\n\n        Thread thread = new Thread() {\n\n            @Override\n            public void run() {\n                group.runTests(currentClient, new TestExecutionCallback() {\n\n                    @Override\n                    public void onTestStart(TestCase test) {\n                        final TestCaseAdapter adapter = (TestCaseAdapter) mTestCaseList.getAdapter();\n\n                        runOnUiThread(new Runnable() {\n\n                            @Override\n                            public void run() {\n                                adapter.notifyDataSetChanged();\n                            }\n\n                        });\n\n                        log(\"TEST START\", test.getName());\n                    }\n\n                    @Override\n                    public void onTestGroupComplete(TestGroup group, List<TestResult> results) {\n                        log(\"TEST GROUP COMPLETED\", group.getName() + \" - \" + group.getStatus().toString());\n                        logSeparator();\n\n                        if (group.getName().startsWith(TestGroup.AllTestsGroupName)) {\n\n                            List<TestCase> tests = new ArrayList<TestCase>();\n\n                            for (TestResult result : results) {\n                                tests.add(result.getTestCase());\n                            }\n\n                            DaylightLogger logger = new DaylightLogger(getDaylightURL(), getDaylightProject(), getDaylightClientId(),\n                                    getDaylightClientSecret(), getDaylightRuntime(), getDaylightRunId());\n                            try {\n                                logger.reportResultsToDaylight(group.getFailedTestCount(), group.getStartTime(), group.getEndTime(), tests,\n                                        group.getSourceMap());\n                            } catch (Throwable e) {\n                                log(e.getMessage());\n                            }\n                        }\n\n                        if (shouldRunUnattended()) {\n                            // String logContent = mLog.toString();\n                            // postLogs(logContent, true);\n\n                            boolean passed = true;\n                            for (TestResult result : results) {\n                                if (result.getStatus() != TestStatus.Passed) {\n                                    passed = false;\n                                    break;\n                                }\n                            }\n\n                            try {\n                                String sdCard = Environment.getExternalStorageDirectory().getPath();\n                                FileOutputStream fos = new FileOutputStream(sdCard + \"/done_android_e2e.txt\");\n                                OutputStreamWriter osw = new OutputStreamWriter(fos);\n                                BufferedWriter bw = new BufferedWriter(osw);\n                                bw.write(\"Completed successfully.\\n\");\n                                bw.write(passed ? \"PASSED\" : \"FAILED\");\n                                bw.write(\"\\n\");\n                                bw.close();\n                                osw.close();\n                                fos.close();\n                            } catch (IOException e) {\n                                e.printStackTrace();\n                            }\n                        }\n                    }\n\n                    @Override\n                    public void onTestComplete(TestCase test, TestResult result) {\n                        Throwable e = result.getException();\n                        if (e != null) {\n                            StringBuilder sb = new StringBuilder();\n                            while (e != null) {\n                                sb.append(e.getClass().getSimpleName() + \": \");\n                                sb.append(e.getMessage());\n                                sb.append(\"\\n\");\n                                sb.append(Log.getStackTraceString(e));\n                                sb.append(\"\\n\\n\");\n                                e = e.getCause();\n                            }\n\n                            test.log(\"Exception: \" + sb.toString());\n                        }\n\n                        final TestCaseAdapter adapter = (TestCaseAdapter) mTestCaseList.getAdapter();\n\n                        runOnUiThread(new Runnable() {\n\n                            @Override\n                            public void run() {\n                                adapter.notifyDataSetChanged();\n\n                            }\n\n                        });\n                        logWithTimestamp(test.getStartTime(), \"Logs for test \" + test.getName() + \" (\" + result.getStatus().toString() + \")\");\n                        String testLogs = test.getLog();\n                        if (testLogs.length() > 0) {\n                            if (testLogs.endsWith(\"\\n\")) {\n                                testLogs = testLogs.substring(0, testLogs.length() - 1);\n                            }\n                            log(testLogs);\n                        }\n\n                        logWithTimestamp(test.getEndTime(), \"Test \" + result.getStatus().toString());\n                        logWithTimestamp(test.getEndTime(), \"-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\");\n                        logSeparator();\n                    }\n                });\n            }\n        };\n\n        thread.start();\n    }\n\n    // private static List<Pair<String, String>> mobileServiceRuntimeFeatures;\n\n    // private void getMobileServiceRuntimeFeatures(MobileServiceClient client)\n    // {\n    // mobileServiceRuntimeFeatures = new ArrayList<Pair<String, String>>();\n    //\n    // Pair<String, String> runtimeFeature1 = new Pair<String, String>(\"1\",\n    // \"1\");\n    //\n    // mobileServiceRuntimeFeatures.add(runtimeFeature1);\n    // }\n    //\n    // public boolean mobileServiceRuntimeHasFeature(String featureKey, String\n    // featureValue) {\n    //\n    // for (Pair<String, String> runtimeFeature : mobileServiceRuntimeFeatures)\n    // {\n    // if (runtimeFeature.first.equals(featureKey) &&\n    // runtimeFeature.second.equals(featureValue)) {\n    // return true;\n    // }\n    // }\n    //\n    // return false;\n    // }\n\n    private void logSeparator() {\n        mLog.append(\"\\n\");\n        mLog.append(\"----\\n\");\n        mLog.append(\"\\n\");\n    }\n\n    private void log(String content) {\n        log(\"Info\", content);\n    }\n\n    private void logWithTimestamp(Date time, String content) {\n        // log(\"Info\", \"[\" + Util.dateToString(time, Util.LogTimeFormat) + \"] \"\n        // + content);\n    }\n\n    private void log(String title, String content) {\n        String message = title + \" - \" + content;\n        Log.d(\"ZUMO-E2ETESTAPP\", message);\n\n        mLog.append(content);\n        mLog.append('\\n');\n    }\n\n    private String getMobileServiceURL() {\n        return this.getPreference(Constants.PREFERENCE_MOBILE_SERVICE_URL);\n    }\n\n    private String getMobileServiceKey() {\n        return this.getPreference(Constants.PREFERENCE_MOBILE_SERVICE_KEY);\n    }\n\n    private String getDaylightURL() {\n        return this.getPreference(Constants.PREFERENCE_DAYLIGHT_URL);\n    }\n\n    private String getDaylightProject() {\n        return this.getPreference(Constants.PREFERENCE_DAYLIGHT_PROJECT);\n    }\n\n    private String getDaylightClientId() {\n        return this.getPreference(Constants.PREFERENCE_DAYLIGHT_CLIENT_ID);\n    }\n\n    private String getDaylightClientSecret() {\n        return this.getPreference(Constants.PREFERENCE_DAYLIGHT_CLIENT_SECRET);\n    }\n\n    private String getDaylightRuntime() {\n        return this.getPreference(Constants.PREFERENCE_RUNTIME_VERSION);\n    }\n\n    private String getDaylightRunId() {\n        return this.getPreference(Constants.PREFERENCE_MASTER_RUN_ID);\n    }\n\n    public String getGoogleUserId() {\n        return this.getPreference(Constants.PREFERENCE_GOOGLE_USERID);\n    }\n\n    public String getGCMSenderId() {\n        return this.getPreference(Constants.PREFERENCE_GCM_SENDER_ID);\n    }\n\n    public String getGoogleWebAppClientId() {\n        return this.getPreference(Constants.PREFERENCE_GOOGLE_WEBAPP_CLIENTID);\n    }\n\n    private boolean shouldRunUnattended() {\n        if (mAutomationPreferences != null) {\n            if (mAutomationPreferences.containsKey(\"pref_run_unattended\")) {\n                String runUnattended = mAutomationPreferences.get(\"pref_run_unattended\");\n                return runUnattended.equals(\"true\");\n            }\n        }\n\n        return false;\n    }\n\n    private String getPreference(String key) {\n        if (mAutomationPreferences != null && mAutomationPreferences.containsKey(key)) {\n            return mAutomationPreferences.get(key);\n        } else {\n            return mPrefManager.getString(key, \"\");\n        }\n    }\n\n    private MobileServiceClient createMobileServiceClient() throws MalformedURLException {\n        String url = getMobileServiceURL();\n        String key = getMobileServiceKey();\n\n        MobileServiceClient client = new MobileServiceClient(url, key, this);\n\n        return client;\n    }\n\n    /**\n     * Creates a dialog and shows it\n     *\n     * @param exception The exception to show in the dialog\n     * @param title     The dialog title\n     */\n    private void createAndShowDialog(Exception exception, String title) {\n        createAndShowDialog(exception.toString(), title);\n    }\n\n    /**\n     * Creates a dialog and shows it\n     *\n     * @param message The dialog message\n     * @param title   The dialog title\n     */\n    private void createAndShowDialog(String message, String title) {\n        AlertDialog.Builder builder = new AlertDialog.Builder(this);\n\n        builder.setMessage(message);\n        builder.setTitle(title);\n        builder.create().show();\n    }\n\n    private boolean IsNetBackend() {\n\n        try {\n\n            HttpClient httpclient = new DefaultHttpClient();\n            HttpResponse response = httpclient.execute(new HttpGet(getMobileServiceURL() + \"api/runtimeinfo\"));\n            String runtimeType;\n\n            StatusLine statusLine = response.getStatusLine();\n            if (statusLine.getStatusCode() == HttpStatus.SC_OK) {\n                ByteArrayOutputStream out = new ByteArrayOutputStream();\n                response.getEntity().writeTo(out);\n                String responseString = out.toString();\n\n                JsonObject jsonResult = new JsonParser().parse(responseString).getAsJsonObject();\n\n                runtimeType = jsonResult.get(\"runtime\").getAsJsonObject().get(\"type\").getAsString();\n\n                out.close();\n            } else {\n                response.getEntity().getContent().close();\n                throw new IOException(statusLine.getReasonPhrase());\n            }\n\n            if (runtimeType.equals(\".NET\")) {\n                return true;\n            }\n\n            return false;\n        }\n        catch(Exception ex) {\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/TestCaseAdapter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.graphics.Color;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ArrayAdapter;\nimport android.widget.CheckBox;\n\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\n\n/**\n * Adapter to bind a ToDoItem List to a view\n */\npublic class TestCaseAdapter extends ArrayAdapter<TestCase> {\n\n    /**\n     * Adapter context\n     */\n    Context mContext;\n\n    /**\n     * Adapter View layout\n     */\n    int mLayoutResourceId;\n\n    public TestCaseAdapter(Context context, int layoutResourceId) {\n        super(context, layoutResourceId);\n\n        mContext = context;\n        mLayoutResourceId = layoutResourceId;\n    }\n\n    /**\n     * Returns the view for a specific item on the list\n     */\n    @Override\n    public View getView(final int position, View convertView, ViewGroup parent) {\n        View row = convertView;\n\n        final TestCase testCase = getItem(position);\n\n        if (row == null) {\n            LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();\n            row = inflater.inflate(mLayoutResourceId, parent, false);\n        }\n\n        final CheckBox checkBox = (CheckBox) row.findViewById(R.id.checkTestCase);\n\n        String text = String.format(\"%s - %s\", testCase.getName(), testCase.getStatus().toString());\n\n        if (testCase.getStatus() == TestStatus.Failed) {\n            checkBox.setTextColor(Color.RED);\n        } else if (testCase.getStatus() == TestStatus.Passed) {\n            checkBox.setTextColor(Color.GREEN);\n        } else if (testCase.getStatus() == TestStatus.MissingFeatures) {\n            checkBox.setTextColor(Color.YELLOW);\n        } else {\n            checkBox.setTextColor(Color.BLACK);\n        }\n\n        checkBox.setText(text);\n        checkBox.setChecked(testCase.isEnabled());\n\n        checkBox.setOnClickListener(new View.OnClickListener() {\n\n            @Override\n            public void onClick(View v) {\n                testCase.setEnabled(checkBox.isChecked());\n            }\n        });\n\n        return row;\n    }\n\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/ZumoPreferenceActivity.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp;\n\nimport android.os.Bundle;\nimport android.preference.PreferenceActivity;\n\n/**\n * A {@link PreferenceActivity} that presents a set of application settings.\n */\npublic class ZumoPreferenceActivity extends PreferenceActivity {\n    @SuppressWarnings(\"deprecation\")\n    @Override\n    protected void onPostCreate(Bundle savedInstanceState) {\n        super.onPostCreate(savedInstanceState);\n\n        addPreferencesFromResource(R.xml.pref_general);\n    }\n\n    /**\n     * {@inheritDoc}\n     */\n    @Override\n    public boolean onIsMultiPane() {\n        return false;\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/framework/CompositeTestGroup.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework;\n\nimport android.util.Pair;\n\nimport java.util.List;\n\npublic class CompositeTestGroup extends TestGroup {\n\n    public CompositeTestGroup(String name, List<Pair<TestCase, String>> testCases) {\n        super(name);\n\n        for (Pair<TestCase, String> test : testCases) {\n            this.addTest(test.first, test.second);\n        }\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/framework/ExpectedValueException.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework;\n\npublic class ExpectedValueException extends Exception {\n\n    private static final long serialVersionUID = -1566510176488795332L;\n\n    public ExpectedValueException(Object expected, Object actual) {\n        super(String.format(\"Expected %s - Actual %s\", expected != null ? expected.toString() : \"null\", actual != null ? actual.toString() : \"null\"));\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/framework/FroyoAndroidHttpClientFactory.java",
    "content": "package com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework;\n\nimport android.net.http.AndroidHttpClient;\n\nimport com.microsoft.windowsazure.mobileservices.http.AndroidHttpClientFactoryImpl;\n\n/**\n * AndroidHttpClientFactory with Froyo support\n */\npublic class FroyoAndroidHttpClientFactory extends AndroidHttpClientFactoryImpl {\n\n    @Override\n    public AndroidHttpClient createAndroidHttpClient() {\n        AndroidHttpClient client = super.createAndroidHttpClient();\n\n        FroyoSupport.fixAndroidHttpClientForCertificateValidation(client);\n\n        return client;\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/framework/FroyoSupport.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\n\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework;\n\nimport android.net.http.AndroidHttpClient;\n\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.MainActivity;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.R;\n\nimport org.apache.http.conn.scheme.Scheme;\nimport org.apache.http.conn.scheme.SchemeRegistry;\nimport org.apache.http.conn.ssl.SSLSocketFactory;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.net.Socket;\nimport java.security.KeyManagementException;\nimport java.security.KeyStore;\nimport java.security.KeyStoreException;\nimport java.security.NoSuchAlgorithmException;\nimport java.security.UnrecoverableKeyException;\nimport java.security.cert.CertificateException;\nimport java.security.cert.X509Certificate;\nimport java.util.ArrayList;\nimport java.util.Arrays;\n\nimport javax.net.ssl.SSLContext;\nimport javax.net.ssl.TrustManager;\nimport javax.net.ssl.TrustManagerFactory;\nimport javax.net.ssl.X509TrustManager;\n\n/**\n * Method for Froyo Support for MobileServices\n */\npublic class FroyoSupport {\n    /**\n     * Fixes an AndroidHttpClient instance to accept MobileServices SSL certificate\n     *\n     * @param client AndroidHttpClient to fix\n     */\n    public static void fixAndroidHttpClientForCertificateValidation(AndroidHttpClient client) {\n\n        final SchemeRegistry schemeRegistry = new SchemeRegistry();\n        schemeRegistry.register(new Scheme(\"https\",\n                createAdditionalCertsSSLSocketFactory(), 443));\n        client.getConnectionManager().getSchemeRegistry().unregister(\"https\");\n\n        client.getConnectionManager().getSchemeRegistry().register(new Scheme(\"https\",\n                createAdditionalCertsSSLSocketFactory(), 443));\n    }\n\n    private static SSLSocketFactory createAdditionalCertsSSLSocketFactory() {\n        try {\n            final KeyStore ks = KeyStore.getInstance(\"BKS\");\n\n            final InputStream in = MainActivity.getInstance().getResources().openRawResource(R.raw.mobileservicestore);\n            try {\n                ks.load(in, \"mobileservices\".toCharArray());\n            } finally {\n                in.close();\n            }\n\n            return new AdditionalKeyStoresSSLSocketFactory(ks);\n\n        } catch (Exception e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    private static class AdditionalKeyStoresSSLSocketFactory extends SSLSocketFactory {\n        protected SSLContext sslContext = SSLContext.getInstance(\"TLS\");\n\n        public AdditionalKeyStoresSSLSocketFactory(KeyStore keyStore)\n                throws NoSuchAlgorithmException, KeyManagementException,\n                KeyStoreException, UnrecoverableKeyException {\n            super(null, null, null, null, null, null);\n            sslContext.init(null,\n                    new TrustManager[]{new AdditionalKeyStoresTrustManager(\n                            keyStore)}, null);\n        }\n\n        @Override\n        public Socket createSocket(Socket socket, String host, int port,\n                                   boolean autoClose) throws IOException {\n            return sslContext.getSocketFactory().createSocket(socket, host,\n                    port, autoClose);\n        }\n\n        @Override\n        public Socket createSocket() throws IOException {\n            return sslContext.getSocketFactory().createSocket();\n        }\n\n        class AdditionalKeyStoresTrustManager implements X509TrustManager {\n\n            protected ArrayList<X509TrustManager> x509TrustManagers = new ArrayList<X509TrustManager>();\n\n            protected AdditionalKeyStoresTrustManager(\n                    KeyStore... additionalkeyStores) {\n                final ArrayList<TrustManagerFactory> factories = new ArrayList<TrustManagerFactory>();\n\n                try {\n                    final TrustManagerFactory original = TrustManagerFactory\n                            .getInstance(TrustManagerFactory\n                                    .getDefaultAlgorithm());\n                    original.init((KeyStore) null);\n                    factories.add(original);\n                    for (KeyStore keyStore : additionalkeyStores) {\n\n                        final TrustManagerFactory additionalCerts = TrustManagerFactory\n                                .getInstance(TrustManagerFactory\n                                        .getDefaultAlgorithm());\n                        additionalCerts.init(keyStore);\n                        factories.add(additionalCerts);\n                    }\n\n                } catch (Exception e) {\n                    throw new RuntimeException(e);\n                }\n\n                for (TrustManagerFactory tmf : factories)\n                    for (TrustManager tm : tmf.getTrustManagers())\n                        if (tm instanceof X509TrustManager)\n                            x509TrustManagers.add((X509TrustManager) tm);\n\n                if (x509TrustManagers.size() == 0)\n                    throw new RuntimeException(\n                            \"Couldn't find any X509TrustManagers\");\n            }\n\n            public void checkClientTrusted(X509Certificate[] chain,\n                                           String authType) throws CertificateException {\n                final X509TrustManager defaultX509TrustManager = x509TrustManagers\n                        .get(0);\n                defaultX509TrustManager.checkClientTrusted(chain, authType);\n            }\n\n            public void checkServerTrusted(X509Certificate[] chain,\n                                           String authType) throws CertificateException {\n                for (X509TrustManager tm : x509TrustManagers) {\n                    try {\n                        tm.checkServerTrusted(chain, authType);\n                        return;\n                    } catch (CertificateException e) {\n                    }\n                }\n                throw new CertificateException();\n            }\n\n            public X509Certificate[] getAcceptedIssuers() {\n                final ArrayList<X509Certificate> list = new ArrayList<X509Certificate>();\n                for (X509TrustManager tm : x509TrustManagers) {\n                    list.addAll(Arrays.asList(tm.getAcceptedIssuers()));\n                }\n                return list.toArray(new X509Certificate[list.size()]);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/framework/LogServiceFilter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework;\n\nimport android.util.Log;\n\nimport com.google.common.util.concurrent.FutureCallback;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\npublic class LogServiceFilter implements ServiceFilter {\n\n    @Override\n    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n        final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n        String content = request.getContent();\n        if (content == null)\n            content = \"NULL\";\n\n        String url = request.getUrl();\n        if (url == null)\n            url = \"\";\n\n        Log.d(\"REQUEST URL\", url);\n        Log.d(\"REQUEST CONTENT\", content);\n\n        ListenableFuture<ServiceFilterResponse> nextServiceFilterCallbackFuture = nextServiceFilterCallback.onNext(request);\n\n        Futures.addCallback(nextServiceFilterCallbackFuture, new FutureCallback<ServiceFilterResponse>() {\n\n            @Override\n            public void onFailure(Throwable exception) {\n                resultFuture.setException(exception);\n\n            }\n\n            @Override\n            public void onSuccess(ServiceFilterResponse response) {\n                if (response != null) {\n                    String content = response.getContent();\n                    if (content != null) {\n                        Log.d(\"RESPONSE CONTENT\", content);\n                    }\n                }\n\n                resultFuture.set(response);\n            }\n        });\n\n        return resultFuture;\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/framework/TestCase.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework;\n\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\n\nimport java.util.Date;\nimport java.util.List;\nimport java.util.concurrent.ExecutionException;\n\npublic abstract class TestCase {\n    private String mName;\n\n    private String mDescription;\n\n    private Class<?> mExpectedExceptionClass;\n\n    private boolean mEnabled;\n\n    private TestStatus mStatus;\n\n    private boolean mCanRunUnattended;\n\n    private StringBuilder mTestLog;\n\n    private Date mStartTime;\n\n    private Date mEndTime;\n\n    private String mFileName;\n\n    public TestCase(String name) {\n        mEnabled = false;\n        mCanRunUnattended = true;\n        mStatus = TestStatus.NotRun;\n        mTestLog = new StringBuilder();\n        mName = name;\n    }\n\n    public TestCase() {\n        this(null);\n    }\n\n    public void log(String log) {\n        mTestLog.append(\"[\");\n        mTestLog.append(Util.dateToString(new Date(), Util.LogTimeFormat));\n        mTestLog.append(\"] \");\n        mTestLog.append(log);\n        mTestLog.append(\"\\n\");\n    }\n\n    public String getLog() {\n        return mTestLog.toString();\n    }\n\n    public void clearLog() {\n        mTestLog = new StringBuilder();\n    }\n\n    public Date getStartTime() {\n        return mStartTime;\n    }\n\n    public Date getEndTime() {\n        return mEndTime;\n    }\n\n    public TestStatus getStatus() {\n        return mStatus;\n    }\n\n    public void setStatus(TestStatus status) {\n        mStatus = status;\n    }\n\n    public boolean isEnabled() {\n        return mEnabled;\n    }\n\n    public void setEnabled(boolean enabled) {\n        mEnabled = enabled;\n    }\n\n    public boolean canRunUnattended() {\n        return mCanRunUnattended;\n    }\n\n    public void setCanRunUnattended(boolean canRunUnattended) {\n        mCanRunUnattended = canRunUnattended;\n    }\n\n    public void run(MobileServiceClient client, final TestExecutionCallback callback) {\n        try {\n            if (callback != null)\n                callback.onTestStart(this);\n        } catch (Exception e) {\n            // do nothing\n        }\n        mStatus = TestStatus.Running;\n        try {\n            this.mStartTime = new Date();\n            final TestCase thisTest = this;\n            executeTest(client, new TestExecutionCallback() {\n\n                @Override\n                public void onTestStart(TestCase test) {\n                    // This will never be called\n                }\n\n                @Override\n                public void onTestComplete(TestCase test, TestResult result) {\n                    thisTest.mEndTime = new Date();\n                    if (result != null && result.getTestCase() == null) {\n                        result.setTestCase(thisTest);\n                    }\n                    callback.onTestComplete(test, result);\n                }\n\n                @Override\n                public void onTestGroupComplete(TestGroup group, List<TestResult> results) {\n                    // This will never be called\n                }\n\n            });\n        } catch (Exception e) {\n            this.mEndTime = new Date();\n\n            StackTraceElement[] stackTrace = e.getStackTrace();\n            for (int i = 0; i < stackTrace.length; i++) {\n                log(\"  \" + stackTrace[i].toString());\n            }\n\n            TestResult result;\n            if (e.getClass() != this.getExpectedExceptionClass()) {\n                result = createResultFromException(e);\n                mStatus = result.getStatus();\n            } else {\n                result = new TestResult();\n                result.setException(e);\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(this);\n                mStatus = result.getStatus();\n            }\n\n            if (callback != null)\n                callback.onTestComplete(this, result);\n        }\n    }\n\n    protected abstract void executeTest(MobileServiceClient client, TestExecutionCallback callback);\n\n    public TestResult createResultFromException(Exception e) {\n        return createResultFromException(new TestResult(), e);\n    }\n\n    public TestResult createResultFromException(TestResult result, Exception e) {\n\n        if (e instanceof ExecutionException || e instanceof InterruptedException) {\n\n            e = (Exception) e.getCause();\n        }\n\n        result.setException(e);\n        result.setTestCase(this);\n\n        result.setStatus(TestStatus.Failed);\n\n        return result;\n    }\n\n    public String getName() {\n        return mName;\n    }\n\n    public void setName(String name) {\n        mName = name;\n    }\n\n    public String getDescription() {\n        return mDescription;\n    }\n\n    public void setDescription(String description) {\n        mDescription = description;\n    }\n\n    public Class<?> getExpectedExceptionClass() {\n        return mExpectedExceptionClass;\n    }\n\n    public void setExpectedExceptionClass(Class<?> expectedExceptionClass) {\n        mExpectedExceptionClass = expectedExceptionClass;\n    }\n\n    public String getFileName() {\n        return mFileName;\n    }\n\n    public void setFileName(String fileName) {\n        mFileName = fileName;\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/framework/TestExecutionCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework;\n\nimport java.util.List;\n\npublic interface TestExecutionCallback {\n    public void onTestStart(TestCase test);\n\n    public void onTestComplete(TestCase test, TestResult result);\n\n    public void onTestGroupComplete(TestGroup group, List<TestResult> results);\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/framework/TestGroup.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework;\n\nimport android.annotation.TargetApi;\nimport android.os.Build;\n\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\n\nimport org.apache.http.HttpResponse;\nimport org.apache.http.StatusLine;\nimport org.apache.http.client.HttpClient;\nimport org.apache.http.client.methods.HttpGet;\nimport org.apache.http.impl.client.DefaultHttpClient;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.concurrent.ConcurrentLinkedQueue;\nimport java.util.concurrent.CountDownLatch;\n\npublic abstract class TestGroup {\n    public static final String AllTestsGroupName = \"All tests\";\n    public static final String AllUnattendedTestsGroupName = AllTestsGroupName + \" (unattended)\";\n    public static final String ClientVersionKey = \"client-version\";\n    public static final String ServerVersionKey = \"server-version\";\n    List<TestCase> mTestCases;\n    Map<String, String> mSourceMap;\n    String mName;\n    TestStatus mStatus;\n    ConcurrentLinkedQueue<TestCase> mTestRunQueue;\n    boolean mNewTestRun;\n    private int mFailedTestCount;\n    private Date mStartTime;\n    private Date mEndTime;\n\n    public TestGroup(String name) {\n        mName = name;\n        mStatus = TestStatus.NotRun;\n        mTestCases = new ArrayList<TestCase>();\n        mSourceMap = new HashMap<String, String>();\n        mTestRunQueue = new ConcurrentLinkedQueue<TestCase>();\n        mNewTestRun = false;\n    }\n\n    public TestStatus getStatus() {\n        return mStatus;\n    }\n\n    public List<TestCase> getTestCases() {\n        return mTestCases;\n    }\n\n    public Map<String, String> getSourceMap() {\n        return mSourceMap;\n    }\n\n    protected void addTest(TestCase testCase) {\n        addTest(testCase, this.getClass().getName());\n    }\n\n    protected void addTest(TestCase testCase, String source) {\n        mTestCases.add(testCase);\n        mSourceMap.put(testCase.getName(), source);\n    }\n\n    public void runTests(MobileServiceClient client, TestExecutionCallback callback) {\n        List<TestCase> testsToRun = new ArrayList<TestCase>();\n\n        for (int i = 0; i < mTestCases.size(); i++) {\n            if (mTestCases.get(i).isEnabled()) {\n                testsToRun.add(mTestCases.get(i));\n            }\n        }\n\n        if (testsToRun.size() > 0) {\n            runTests(testsToRun, client, callback);\n        }\n    }\n\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB)\n    public void runTests(List<TestCase> testsToRun, final MobileServiceClient client, final TestExecutionCallback callback) {\n\n        try {\n            onPreExecute(client);\n        } catch (Exception e) {\n            mStatus = TestStatus.Failed;\n            if (callback != null)\n                callback.onTestGroupComplete(this, null);\n            return;\n        }\n\n        final TestRunStatus testRunStatus = new TestRunStatus();\n\n        mNewTestRun = true;\n\n        int oldQueueSize = mTestRunQueue.size();\n        mTestRunQueue.clear();\n        mTestRunQueue.addAll(testsToRun);\n        cleanTestsState();\n        testRunStatus.results.clear();\n        mStatus = TestStatus.NotRun;\n\n        if (oldQueueSize == 0) {\n            for (final TestCase test : mTestRunQueue) {\n\n                final CountDownLatch latch = new CountDownLatch(1);\n\n                Thread thread = new Thread() {\n                    public void run() {\n                        executeNextTest(test, client, callback, testRunStatus, latch);\n                    }\n                };\n\n                thread.run();\n\n                try {\n                    latch.await();\n                } catch (InterruptedException e) {\n                    e.printStackTrace();\n                }\n\n                if (test.getStatus() == TestStatus.Failed) {\n                    mFailedTestCount++;\n                }\n            }\n\n            // End Run\n            final CountDownLatch latch = new CountDownLatch(1);\n\n            Thread thread = new Thread() {\n                public void run() {\n                    executeNextTest(null, client, callback, testRunStatus, latch);\n                }\n            };\n\n            thread.run();\n\n            try {\n                latch.await();\n            } catch (InterruptedException e) {\n                e.printStackTrace();\n            }\n        }\n    }\n\n    private void cleanTestsState() {\n        for (TestCase test : mTestRunQueue) {\n            test.setStatus(TestStatus.NotRun);\n            test.clearLog();\n        }\n    }\n\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB)\n    private void executeNextTest(final TestCase nextTest, final MobileServiceClient client, final TestExecutionCallback callback,\n                                 final TestRunStatus testRunStatus, final CountDownLatch latch) {\n        mNewTestRun = false;\n        final TestGroup group = this;\n\n        try {\n            // TestCase nextTest = mTestRunQueue.poll();\n            if (nextTest != null) {\n                nextTest.run(client, new TestExecutionCallback() {\n                    @Override\n                    public void onTestStart(TestCase test) {\n                        if (!mNewTestRun && callback != null)\n                            callback.onTestStart(test);\n                    }\n\n                    @Override\n                    public void onTestGroupComplete(TestGroup group, List<TestResult> results) {\n                        if (!mNewTestRun && callback != null)\n                            callback.onTestGroupComplete(group, results);\n                    }\n\n                    @Override\n                    public void onTestComplete(TestCase test, TestResult result) {\n                        if (mNewTestRun) {\n                            cleanTestsState();\n                            testRunStatus.results.clear();\n                            mStatus = TestStatus.NotRun;\n                        } else {\n                            if (test.getExpectedExceptionClass() != null) {\n                                if (result.getException() != null && result.getException().getClass() == test.getExpectedExceptionClass()) {\n                                    result.setStatus(TestStatus.Passed);\n                                } else {\n                                    result.setStatus(TestStatus.Failed);\n                                }\n                            }\n\n                            test.setStatus(result.getStatus());\n                            testRunStatus.results.add(result);\n\n                            if (callback != null)\n                                callback.onTestComplete(test, result);\n                        }\n\n                        latch.countDown();\n                        // executeNextTest(client, callback, testRunStatus);\n                    }\n                });\n            } else {\n                // end run\n\n                try {\n                    group.onPostExecute(client);\n                } catch (Exception e) {\n                    mStatus = TestStatus.Failed;\n                }\n\n                // if at least one test failed, the test group\n                // failed\n                if (mStatus != TestStatus.Failed) {\n                    mStatus = TestStatus.Passed;\n                    for (TestResult r : testRunStatus.results) {\n                        if (r.getStatus() == TestStatus.Failed) {\n                            mStatus = TestStatus.Failed;\n                            break;\n                        }\n                    }\n                }\n\n                if (callback != null)\n                    callback.onTestGroupComplete(group, testRunStatus.results);\n\n                latch.countDown();\n            }\n        } catch (Exception e) {\n            if (callback != null)\n                callback.onTestGroupComplete(group, testRunStatus.results);\n\n            latch.countDown();\n        }\n    }\n\n    public String getName() {\n        return mName;\n    }\n\n    protected void setName(String name) {\n        mName = name;\n    }\n\n    public int getFailedTestCount() {\n        return mFailedTestCount;\n    }\n\n    public Date getStartTime() {\n        return mStartTime;\n    }\n\n    public Date getEndTime() {\n        return mEndTime;\n    }\n\n    @Override\n    public String toString() {\n        return getName();\n    }\n\n    public void onPreExecute(MobileServiceClient client) {\n        mFailedTestCount = 0;\n        mStartTime = new Date();\n    }\n\n    public void onPostExecute(MobileServiceClient client) {\n        mEndTime = new Date();\n    }\n\n    private class TestRunStatus {\n        public List<TestResult> results;\n\n        public TestRunStatus() {\n            results = new ArrayList<TestResult>();\n        }\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/framework/TestResult.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework;\n\npublic class TestResult {\n    private TestStatus mStatus;\n\n    private Exception mException;\n\n    private TestCase mTestCase;\n\n    public TestStatus getStatus() {\n        return mStatus;\n    }\n\n    public void setStatus(TestStatus status) {\n        this.mStatus = status;\n    }\n\n    public Exception getException() {\n        return mException;\n    }\n\n    public void setException(Exception e) {\n        this.mException = e;\n    }\n\n    public TestCase getTestCase() {\n        return mTestCase;\n    }\n\n    public void setTestCase(TestCase testCase) {\n        mTestCase = testCase;\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/framework/TestStatus.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework;\n\npublic enum TestStatus {\n    NotRun, Running, Failed, Passed, MissingFeatures\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/framework/Util.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework;\n\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonPrimitive;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.table.serialization.DateSerializer;\n\nimport org.apache.http.Header;\n\nimport java.text.SimpleDateFormat;\nimport java.util.ArrayList;\nimport java.util.Calendar;\nimport java.util.Date;\nimport java.util.GregorianCalendar;\nimport java.util.Hashtable;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Map.Entry;\nimport java.util.Random;\nimport java.util.Set;\nimport java.util.TimeZone;\n\npublic class Util {\n    public final static String LogTimeFormat = \"yyyy-MM-dd HH:mm:ss'.'SSS\";\n    private final static Hashtable<String, String> globalTestParameters = new Hashtable<String, String>();\n\n    public static Hashtable<String, String> getGlobalTestParameters() {\n        return globalTestParameters;\n    }\n\n    public static String createComplexRandomString(Random rndGen, int size) {\n        if (rndGen.nextInt(3) > 0) {\n            return createSimpleRandomString(rndGen, size);\n        } else {\n            return createSimpleRandomString(rndGen, size, ' ', 0xfffe);\n        }\n    }\n\n    public static String createSimpleRandomString(Random rndGen, int size) {\n        int minChar = ' ';\n        int maxChar = '~';\n\n        return createSimpleRandomString(rndGen, size, minChar, maxChar);\n    }\n\n    public static String createSimpleRandomString(Random rndGen, int size, int minChar, int maxChar) {\n        StringBuilder sb = new StringBuilder();\n        for (int i = 0; i < size; i++) {\n\n            int charRand;\n            char c;\n            do {\n                charRand = rndGen.nextInt(maxChar - minChar);\n                c = (char) (minChar + charRand);\n            } while (Character.isLowSurrogate(c) || Character.isHighSurrogate(c));\n\n            sb.append(c);\n        }\n\n        return sb.toString();\n    }\n\n    public static <E> boolean compareLists(List<E> l1, List<E> l2) {\n        return compareArrays(l1.toArray(), l2.toArray());\n    }\n\n    public static boolean compareArrays(Object[] arr1, Object[] arr2) {\n        if (arr1 == null && arr2 == null) {\n            return true;\n        }\n\n        if (arr1 == null || arr2 == null) {\n            return false;\n        }\n\n        if (arr1.length != arr2.length) {\n            return false;\n        }\n\n        for (int i = 0; i < arr1.length; i++) {\n            Object o1 = arr1[i];\n            Object o2 = arr2[i];\n\n            if (!compare(o1, o2)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    public static <E> String listToString(List<E> list) {\n        return arrayToString(list.toArray());\n    }\n\n    public static String arrayToString(Object[] arr) {\n        if (arr == null) {\n            return \"<<NULL>>\";\n        } else {\n            StringBuilder sb = new StringBuilder();\n            sb.append(\"[\");\n\n            for (int i = 0; i < arr.length; i++) {\n                Object elem = arr[i];\n                sb.append(elem.toString());\n\n                if (i != arr.length - 1) {\n                    sb.append(\", \");\n                }\n            }\n\n            sb.append(\"]\");\n\n            return sb.toString();\n        }\n    }\n\n    public static String dateToString(Date date) {\n        return dateToString(date, \"yyyy-MM-dd'T'HH:mm:ss'.'SSS'Z'\");\n    }\n\n    public static String dateToString(Date date, String dateFormatStr) {\n        if (date == null) {\n            return \"NULL\";\n        }\n        SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatStr, Locale.getDefault());\n        dateFormat.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\n        String formatted = dateFormat.format(date);\n\n        return formatted;\n    }\n\n    public static boolean compare(Object o1, Object o2) {\n        if (o1 == null && o2 == null) {\n            return true;\n        }\n\n        if (o1 == null || o2 == null) {\n            return false;\n        }\n\n        return o1.equals(o2);\n    }\n\n    public static TestCase createSeparatorTest(String testName) {\n        return new TestCase(testName) {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                TestResult testResult = new TestResult();\n                testResult.setTestCase(this);\n                testResult.setStatus(TestStatus.Passed);\n                callback.onTestComplete(this, testResult);\n            }\n\n        };\n    }\n\n    public static boolean compareJson(JsonElement e1, JsonElement e2) {\n        // NOTE: if every property defined in e1 is in e2, the objects are\n        // considered equal.\n\n        if (e1 == null && e2 == null) {\n            return true;\n        }\n\n        if (e1 == null || e2 == null) {\n            return false;\n        }\n\n        if (e1.getClass() != e2.getClass()) {\n            return false;\n        }\n\n        if (e1 instanceof JsonPrimitive) {\n            JsonPrimitive p1 = (JsonPrimitive) e1;\n            JsonPrimitive p2 = (JsonPrimitive) e2;\n\n            if (p1.isString()) {\n                try {\n                    Date d1 = DateSerializer.deserialize(p1.getAsString());\n                    Date d2 = DateSerializer.deserialize(p2.getAsString());\n\n                    if (!d1.equals(d2) && !e1.equals(e2)) {\n                        return false;\n                    }\n                } catch (Throwable t) {\n                    if (!e1.equals(e2)) {\n                        return false;\n                    }\n                }\n            } else if (!e1.equals(e2)) {\n                return false;\n            }\n        } else if (e1 instanceof JsonArray) {\n            JsonArray a1 = (JsonArray) e1;\n            JsonArray a2 = (JsonArray) e2;\n\n            if (a1.size() != a2.size()) {\n                return false;\n            }\n\n            for (int i = 0; i < a1.size(); i++) {\n                if (!compareJson(a1.get(i), a2.get(i))) {\n                    return false;\n                }\n            }\n        } else if (e1 instanceof JsonObject) {\n            JsonObject o1 = (JsonObject) e1;\n            JsonObject o2 = (JsonObject) e2;\n\n            Set<Entry<String, JsonElement>> entrySet1 = o1.entrySet();\n\n            for (Entry<String, JsonElement> entry : entrySet1) {\n                if (entry.getKey().toLowerCase(Locale.getDefault()).equals(\"id\")) {\n                    continue;\n                }\n\n                String propertyName1 = entry.getKey();\n                String propertyName2 = null;\n                for (Entry<String, JsonElement> entry2 : o2.entrySet()) {\n                    if (propertyName1.toLowerCase(Locale.getDefault()).equals(entry2.getKey().toLowerCase(Locale.getDefault()))) {\n                        propertyName2 = entry2.getKey();\n                    }\n                }\n\n                if (propertyName2 == null) {\n                    return false;\n                }\n\n                if (!compareJson(entry.getValue(), o2.get(propertyName2))) {\n                    return false;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    public static Date getUTCNow() {\n        return new GregorianCalendar(TimeZone.getTimeZone(\"utc\")).getTime();\n    }\n\n    public static Date getUTCDate(int year, int month, int day) {\n        return getUTCDate(year, month, day, 0, 0, 0);\n    }\n\n    public static Date getUTCDate(int year, int month, int day, int hour, int minute, int second) {\n        GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone(\"utc\"));\n        int dateMonth = month - 1;\n        calendar.set(year, dateMonth, day, hour, minute, second);\n        calendar.set(Calendar.MILLISECOND, 0);\n\n        return calendar.getTime();\n    }\n\n    public static Calendar getUTCCalendar(Date date) {\n        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(\"utc\"), Locale.getDefault());\n        cal.setTime(date);\n\n        return cal;\n    }\n\n    public static boolean responseContainsHeader(ServiceFilterResponse response, String headerName) {\n        for (Header header : response.getHeaders()) {\n            if (header.getName().equals(headerName)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    public static String getHeaderValue(ServiceFilterResponse response, String headerName) {\n        for (Header header : response.getHeaders()) {\n            if (header.getName().equals(headerName)) {\n                return header.getValue();\n            }\n        }\n\n        return null;\n    }\n\n    public static <T> List<T> filter(List<T> list, IPredicate<T> predicate) {\n        if (list == null) {\n            return null;\n        } else {\n            List<T> filteredList = new ArrayList<T>();\n\n            for (T element : list) {\n                if (predicate.evaluate(element)) {\n                    filteredList.add(element);\n                }\n            }\n\n            return filteredList;\n        }\n    }\n\n    public interface IPredicate<T> {\n        boolean evaluate(T type);\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/framework/log/DaylightLogger.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.log;\n\nimport android.annotation.SuppressLint;\nimport android.os.AsyncTask;\nimport android.os.Build;\n\nimport com.google.common.util.concurrent.FutureCallback;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.google.gson.JsonPrimitive;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\n\nimport org.apache.http.Header;\nimport org.apache.http.HttpEntity;\nimport org.apache.http.client.methods.HttpEntityEnclosingRequestBase;\nimport org.apache.http.client.methods.HttpPost;\nimport org.apache.http.client.methods.HttpPut;\nimport org.apache.http.entity.StringEntity;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.io.UnsupportedEncodingException;\nimport java.net.HttpURLConnection;\nimport java.net.URI;\nimport java.net.URISyntaxException;\nimport java.net.URL;\nimport java.text.SimpleDateFormat;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Map;\nimport java.util.TimeZone;\nimport java.util.UUID;\nimport java.util.concurrent.ExecutionException;\n\npublic class DaylightLogger {\n\n    private String mDaylightUrl;\n    private String mDayLightProject;\n    private String mClientId;\n    private String mClientSecret;\n    private String mRuntime;\n    private String mRunId;\n    private String mPlatform = \"Android\";\n    private String mRevision = \"20140729-002505\";\n    private String mSDKVersion = \"sdk v1.2.4\";\n\n    public DaylightLogger(String daylightUrl, String dayLightProject, String clientId, String clientSecret, String runtime, String runId) {\n        mDaylightUrl = daylightUrl;\n        mDayLightProject = dayLightProject;\n        mClientId = clientId;\n        mClientSecret = clientSecret;\n        mRuntime = runtime;\n        mRunId = runId;\n    }\n\n    private static void uploadBlob(List<TestCase> tests, String blobAccessToken) {\n        String urlBlob = \"https://daylight.blob.core.windows.net/attachments\";\n\n        for (TestCase test : tests) {\n            String blobName = test.getFileName();\n            String body = test.getLog();\n\n            URI requestUrl = null;\n\n            try {\n                requestUrl = new URI(urlBlob + \"/\" + blobName + \"?\" + blobAccessToken);\n            } catch (URISyntaxException e) {\n            }\n\n            test.setFileName(blobName);\n\n            HttpPut request = new HttpPut(requestUrl);\n            request.addHeader(\"x-ms-blob-type\", \"BlockBlob\");\n\n            try {\n                request.setEntity(new StringEntity(body, \"UTF-8\"));\n            } catch (UnsupportedEncodingException uee) {\n            }\n\n            final SettableFuture<Void> externalFuture = SettableFuture.create();\n\n            ListenableFuture<HttpURLConnection> internalFuture = execute(request);\n\n            Futures.addCallback(internalFuture, new FutureCallback<HttpURLConnection>() {\n                @Override\n                public void onFailure(Throwable throwable) {\n                    externalFuture.setException(throwable);\n                }\n\n                @Override\n                public void onSuccess(HttpURLConnection connection) {\n                    try {\n                        connection.getInputStream();\n                        externalFuture.set(null);\n                    } catch (Throwable throwable) {\n                        externalFuture.setException(throwable);\n                    }\n                }\n            });\n\n            try {\n                externalFuture.get();\n            } catch (InterruptedException | ExecutionException e) {\n                e.printStackTrace();\n            }\n        }\n    }\n\n    private static ListenableFuture<HttpURLConnection> execute(final HttpEntityEnclosingRequestBase request) {\n        final SettableFuture<HttpURLConnection> result = SettableFuture.create();\n\n        AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {\n            @Override\n            protected Void doInBackground(Void... params) {\n\n                try {\n                    result.set(createHttpURLConnection(request));\n                } catch (Throwable t) {\n                    result.setException(t);\n                }\n\n                return null;\n            }\n        };\n\n        execute(task);\n\n        return result;\n    }\n\n    private static HttpURLConnection createHttpURLConnection(HttpEntityEnclosingRequestBase request) throws IOException {\n        URL url = request.getURI().toURL();\n\n        HttpURLConnection connection = (HttpURLConnection) url.openConnection();\n        connection.setConnectTimeout(15 * 1000);\n        connection.setRequestMethod(request.getMethod());\n\n        Header[] headers = request.getAllHeaders();\n\n        if (headers != null) {\n\n            for (Header header : headers) {\n                connection.setRequestProperty(header.getName(), header.getValue());\n            }\n        }\n\n        HttpEntity entity = request.getEntity();\n\n        if (entity != null) {\n            InputStream in = entity.getContent();\n            OutputStream out = connection.getOutputStream();\n            byte[] buffer = new byte[1024];\n            int length;\n\n            while ((length = in.read(buffer)) != -1) {\n                out.write(buffer, 0, length);\n            }\n\n            in.close();\n            out.close();\n        }\n\n        return connection;\n    }\n\n    private static String getContent(HttpURLConnection connection) throws IOException {\n        String content = null;\n        byte[] rawContent = getRawContent(connection);\n\n        if (rawContent != null) {\n            try {\n                content = new String(rawContent, \"UTF-8\");\n            } catch (UnsupportedEncodingException e) {\n            }\n        }\n\n        return content;\n    }\n\n    private static byte[] getRawContent(HttpURLConnection connection) throws IOException {\n        byte[] rawContent = null;\n        InputStream instream = connection.getInputStream();\n        ByteArrayOutputStream out = new ByteArrayOutputStream();\n        byte[] buffer = new byte[1024];\n        int length;\n\n        while ((length = instream.read(buffer)) != -1) {\n            out.write(buffer, 0, length);\n        }\n\n        instream.close();\n        rawContent = out.toByteArray();\n\n        return rawContent;\n    }\n\n    @SuppressLint(\"NewApi\")\n    private static void execute(AsyncTask<Void, Void, Void> task) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {\n            task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);\n        } else {\n            task.execute();\n        }\n    }\n\n    private static String dateToString(Date date) {\n        SimpleDateFormat dateFormat = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss.SSS'Z'\", Locale.getDefault());\n        dateFormat.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\n        return dateFormat.format(date);\n    }\n\n    private static Long getFileTime(Date date) {\n        return (date.getTime() + 11644473600000L) * 10000L;\n    }\n\n    public void reportResultsToDaylight(final int failedTestCount, final Date startTime, final Date endTime, final List<TestCase> tests,\n                                        final Map<String, String> sourceMap) throws Throwable {\n        try {\n            final int testCount = tests.size();\n            final JsonObject testRun = initializeRun(testCount, startTime);\n\n            String authAccessToken = requestAuthAccessToken().get();\n\n            String runId = requestRunId(authAccessToken, testRun).get();\n\n            String blobAccessToken = requestBlobAccessToken(authAccessToken).get();\n\n            try {\n                List<TestCase> mastertests = createMasterTestLog(testCount, failedTestCount, runId);\n\n                // Post result for master test run\n                JsonArray masterRunResult = createMasterRunResult(failedTestCount, startTime, endTime, mRunId, mastertests.get(0).getFileName());\n                postResult(authAccessToken, masterRunResult).get();\n\n                // Upload master test log\n                uploadBlob(mastertests, blobAccessToken);\n            } catch (Throwable t) {\n\n            }\n\n            // post test results\n            JsonArray result = parseRunResult(runId, tests, sourceMap);\n            postResult(authAccessToken, result).get();\n\n            // Upload test logs\n            uploadBlob(tests, blobAccessToken);\n        } catch (ExecutionException e) {\n            throw e.getCause();\n        }\n    }\n\n    private JsonObject initializeRun(int testCount, Date startTime) {\n        JsonObject versionSpec = new JsonObject();\n        versionSpec.addProperty(\"project_name\", mDayLightProject);\n        versionSpec.addProperty(\"branch_name\", mRuntime);\n        versionSpec.addProperty(\"revision\", mRevision);\n\n        JsonObject testRun = new JsonObject();\n        testRun.addProperty(\"name\", mPlatform + \"|\" + mSDKVersion + \"|\" + mRuntime + \"|\" + dateToString(startTime));\n\n        testRun.addProperty(\"start_time\", getFileTime(startTime));\n        testRun.add(\"version_spec\", versionSpec);\n        testRun.addProperty(\"tags\", mPlatform);\n        testRun.addProperty(\"test_count\", testCount);\n\n        return testRun;\n    }\n\n    private ListenableFuture<String> requestAuthAccessToken() {\n        String url = mDaylightUrl + \"/oauth2/token\";\n\n        HttpPost request = new HttpPost(url);\n        request.addHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n\n        try {\n            request.setEntity(new StringEntity(\"grant_type=client_credentials&client_id=\" + mClientId + \"&client_secret=\" + mClientSecret, \"UTF-8\"));\n        } catch (UnsupportedEncodingException uee) {\n        }\n\n        final SettableFuture<String> result = SettableFuture.create();\n\n        ListenableFuture<HttpURLConnection> internalFuture = execute(request);\n\n        Futures.addCallback(internalFuture, new FutureCallback<HttpURLConnection>() {\n            @Override\n            public void onFailure(Throwable throwable) {\n                result.setException(throwable);\n            }\n\n            @Override\n            public void onSuccess(HttpURLConnection connection) {\n                try {\n                    int statusCode = connection.getResponseCode();\n\n                    if (statusCode == 200) {\n                        String content = getContent(connection);\n                        JsonObject json = new JsonParser().parse(content).getAsJsonObject();\n                        String authAccessToken = json.get(\"access_token\").getAsString();\n                        result.set(authAccessToken);\n                    } else {\n                        result.setException(new Exception(\"Invalid response status code \" + statusCode));\n                    }\n                } catch (Throwable t) {\n                    result.setException(t);\n                }\n            }\n        });\n\n        return result;\n    }\n\n    private ListenableFuture<String> requestRunId(String authAccessToken, JsonObject testRun) {\n        String jsonStr = testRun.toString();\n        String requestUrl = mDaylightUrl + \"/api/zumo2/runs?access_token=\" + authAccessToken;\n\n        HttpPost request = new HttpPost(requestUrl);\n        request.addHeader(\"Accept\", \"application/json\");\n\n        try {\n            request.setEntity(new StringEntity(jsonStr, \"UTF-8\"));\n        } catch (UnsupportedEncodingException uee) {\n        }\n\n        final SettableFuture<String> result = SettableFuture.create();\n\n        ListenableFuture<HttpURLConnection> internalFuture = execute(request);\n\n        Futures.addCallback(internalFuture, new FutureCallback<HttpURLConnection>() {\n            @Override\n            public void onFailure(Throwable throwable) {\n                result.setException(throwable);\n            }\n\n            @Override\n            public void onSuccess(HttpURLConnection connection) {\n                try {\n                    int statusCode = connection.getResponseCode();\n\n                    if (statusCode == 201) {\n                        String content = getContent(connection);\n                        JsonObject json = new JsonParser().parse(content).getAsJsonObject();\n                        String runId = json.get(\"run_id\").getAsString();\n                        result.set(runId);\n                    } else {\n                        result.setException(new Exception(\"Invalid response status code \" + statusCode));\n                    }\n                } catch (Throwable t) {\n                    result.setException(t);\n                }\n            }\n        });\n\n        return result;\n    }\n\n    private ListenableFuture<String> requestBlobAccessToken(String authAccessToken) {\n        String body = \"grant_type=urn%3Adaylight%3Aoauth2%3Ashared-access-signature&permissions=rwdl&scope=attachments\";\n        String requestUrl = mDaylightUrl + \"/api/zumo2/storageaccounts/token?access_token=\" + authAccessToken;\n\n        HttpPost request = new HttpPost(requestUrl);\n        request.addHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n\n        try {\n            request.setEntity(new StringEntity(body, \"UTF-8\"));\n        } catch (UnsupportedEncodingException uee) {\n        }\n\n        final SettableFuture<String> result = SettableFuture.create();\n\n        ListenableFuture<HttpURLConnection> internalFuture = execute(request);\n\n        Futures.addCallback(internalFuture, new FutureCallback<HttpURLConnection>() {\n            @Override\n            public void onFailure(Throwable throwable) {\n                result.setException(throwable);\n            }\n\n            @Override\n            public void onSuccess(HttpURLConnection connection) {\n                try {\n                    int statusCode = connection.getResponseCode();\n\n                    if (statusCode == 201) {\n                        String content = getContent(connection);\n                        JsonObject json = new JsonParser().parse(content).getAsJsonObject();\n                        String blobAccessToken = json.get(\"access_token\").getAsString();\n                        result.set(blobAccessToken);\n                    } else {\n                        result.setException(new Exception(\"Invalid response status code \" + statusCode));\n                    }\n                } catch (Throwable t) {\n                    result.setException(t);\n                }\n            }\n        });\n\n        return result;\n    }\n\n    private List<TestCase> createMasterTestLog(int testCount, int failedTestCount, String runId) {\n        TestCase test = new TestCase() {\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n\n            }\n        };\n\n        String blobName = UUID.randomUUID().toString();\n        test.setFileName(blobName);\n\n        test.log(\"TestRun:\" + mDaylightUrl + \"/\" + mDayLightProject + \"/runs/\" + runId);\n        test.log(\"Passed:\" + (testCount - failedTestCount));\n        test.log(\"Failed:\" + failedTestCount);\n        test.log(\"TestCount:\" + testCount);\n\n        List<TestCase> result = new ArrayList<TestCase>();\n        result.add(test);\n\n        return result;\n    }\n\n    private JsonArray createMasterRunResult(int failedTestCount, Date startTime, Date endTime, String runId, String fileName) {\n        JsonObject test = new JsonObject();\n        test.addProperty(\"adapter\", \"zumotestsconverter\");\n        test.addProperty(\"name\", mPlatform + \" \" + dateToString(startTime));\n        test.addProperty(\"full_name\", mPlatform + \" \" + dateToString(startTime));\n        test.addProperty(\"source\", \"Android\");\n        test.addProperty(\"run_id\", runId);\n        test.addProperty(\"outcome\", failedTestCount == 0 ? \"Passed\" : \"Failed\");\n        test.addProperty(\"start_time\", getFileTime(startTime));\n        test.addProperty(\"end_time\", getFileTime(endTime));\n\n        JsonArray tags = new JsonArray();\n        tags.add(new JsonPrimitive(mPlatform));\n        test.add(\"tags\", tags);\n\n        JsonObject attach = new JsonObject();\n        attach.addProperty(\"logs.txt\", fileName);\n        test.add(\"attachments\", attach);\n\n        JsonArray result = new JsonArray();\n        result.add(test);\n\n        return result;\n    }\n\n    private ListenableFuture<Void> postResult(String authAccessToken, JsonArray testResultArray) {\n        String body = testResultArray.toString();\n        String requestUrl = mDaylightUrl + \"/api/zumo2/results?access_token=\" + authAccessToken;\n\n        HttpPost request = new HttpPost(requestUrl);\n\n        try {\n            request.setEntity(new StringEntity(body, \"UTF-8\"));\n        } catch (UnsupportedEncodingException uee) {\n        }\n\n        final SettableFuture<Void> result = SettableFuture.create();\n\n        ListenableFuture<HttpURLConnection> internalFuture = execute(request);\n\n        Futures.addCallback(internalFuture, new FutureCallback<HttpURLConnection>() {\n            @Override\n            public void onFailure(Throwable throwable) {\n                result.setException(throwable);\n            }\n\n            @Override\n            public void onSuccess(HttpURLConnection connection) {\n                try {\n                    int statusCode = connection.getResponseCode();\n\n                    if (statusCode == 200) {\n                        result.set(null);\n                    } else {\n                        result.setException(new Exception(\"Invalid response status code \" + statusCode));\n                    }\n                } catch (Throwable t) {\n                    result.setException(t);\n                }\n            }\n        });\n\n        return result;\n    }\n\n    private JsonArray parseRunResult(String runId, List<TestCase> tests, Map<String, String> sourceMap) {\n        JsonArray result = new JsonArray();\n\n        for (TestCase testCase : tests) {\n            String blobName = UUID.randomUUID().toString();\n            testCase.setFileName(blobName);\n\n            JsonObject test = new JsonObject();\n            test.addProperty(\"adapter\", \"zumotestsconverter\");\n            test.addProperty(\"name\", testCase.getName());\n            test.addProperty(\"full_name\", testCase.getName());\n            test.addProperty(\"source\", sourceMap.get(testCase.getName()).replace(' ', '_'));\n            test.addProperty(\"run_id\", runId);\n            test.addProperty(\"outcome\", testCase.getStatus().name());\n            test.addProperty(\"start_time\", getFileTime(testCase.getStartTime()));\n            test.addProperty(\"end_time\", getFileTime(testCase.getEndTime()));\n\n            JsonArray tags = new JsonArray();\n            tags.add(new JsonPrimitive(mPlatform));\n            test.add(\"tags\", tags);\n\n            JsonObject attach = new JsonObject();\n            attach.addProperty(\"logs.txt\", testCase.getFileName());\n            test.add(\"attachments\", attach);\n\n            result.add(test);\n        }\n\n        return result;\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/push/GCMMessageCallback.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.push;\n\nimport android.content.Intent;\n\npublic class GCMMessageCallback {\n    public void registrationMessageReceived(boolean isError, String value) {\n\n    }\n\n    public void pushMessageReceived(Intent intent) {\n\n    }\n\n    public void timeoutElapsed() {\n\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/push/GCMMessageHelper.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.push;\n\nimport android.content.Intent;\n\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.EnhancedPushTests;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.PushTests;\n\nimport java.util.Map.Entry;\nimport java.util.Set;\n\npublic class GCMMessageHelper {\n    public static GCMMessageCallback getRegistrationCallBack(final TestCase test, final TestExecutionCallback callback, final Class<?> clazz) {\n        return new GCMMessageCallback() {\n            @Override\n            public void timeoutElapsed() {\n                test.log(\"Error, registration message did not arrive on time\");\n                TestResult testResult = new TestResult();\n                testResult.setTestCase(test);\n                testResult.setStatus(TestStatus.Failed);\n                callback.onTestComplete(test, testResult);\n            }\n\n            @Override\n            public void registrationMessageReceived(boolean isError, String value) {\n                TestResult testResult = new TestResult();\n                testResult.setTestCase(test);\n\n                if (isError) {\n                    test.log(\"Received error during registration: errorId = \" + value);\n                    testResult.setStatus(TestStatus.Failed);\n                    callback.onTestComplete(test, testResult);\n                } else {\n                    if (clazz.getCanonicalName().equals(EnhancedPushTests.class.getCanonicalName())) {\n                        EnhancedPushTests.registrationId = value;\n                    } else if (clazz.getCanonicalName().equals(PushTests.class.getCanonicalName())) {\n                        PushTests.registrationId = value;\n                    }\n\n                    test.log(\"Registration completed successfully. RegistrationId = \" + value);\n                    testResult.setStatus(TestStatus.Passed);\n                    callback.onTestComplete(test, testResult);\n                }\n            }\n        };\n    }\n\n    public static GCMMessageCallback getPushCallback(TestCase test, String expectedPayload, TestExecutionCallback callback) {\n        return getPushCallback(test, new JsonParser().parse(expectedPayload).getAsJsonObject(), callback);\n    }\n\n    public static GCMMessageCallback getPushCallback(final TestCase test, final JsonObject expectedPayload, final TestExecutionCallback callback) {\n        return new GCMMessageCallback() {\n\n            @Override\n            public void timeoutElapsed() {\n\n                test.log(\"Did not receive push message on time, test failed\");\n                TestResult testResult = new TestResult();\n                testResult.setTestCase(test);\n                testResult.setStatus(TestStatus.Failed);\n                callback.onTestComplete(test, testResult);\n            }\n\n            @Override\n            public void pushMessageReceived(Intent intent) {\n                test.log(\"Received push message: \" + intent.toString());\n                TestResult testResult = new TestResult();\n                testResult.setTestCase(test);\n                testResult.setStatus(TestStatus.Passed);\n\n                Set<Entry<String, JsonElement>> payloadEntries = expectedPayload.entrySet();\n\n                for (Entry<String, JsonElement> entry : payloadEntries) {\n                    String key = entry.getKey();\n                    String value = entry.getValue().getAsString();\n                    String intentExtra = intent.getStringExtra(key);\n\n                    if (value.equals(intentExtra)) {\n                        test.log(\"Retrieved correct value for key \" + key);\n                    } else {\n                        test.log(\"Error retrieving value for key \" + key + \". Expected: \" + value + \"; actual: \" + intentExtra);\n                        testResult.setStatus(TestStatus.Failed);\n                    }\n                }\n\n                callback.onTestComplete(test, testResult);\n            }\n        };\n    }\n\n    public static GCMMessageCallback getNegativePushCallback(final TestCase test, final TestExecutionCallback callback) {\n        return new GCMMessageCallback() {\n\n            @Override\n            public void timeoutElapsed() {\n                test.log(\"Did not receive push message after timeout. Correctly unregistered. Test succeded\");\n                TestResult testResult = new TestResult();\n                testResult.setTestCase(test);\n                testResult.setStatus(TestStatus.Passed);\n                callback.onTestComplete(test, testResult);\n            }\n\n            @Override\n            public void pushMessageReceived(Intent intent) {\n                test.log(\"Received push message: \" + intent.toString() + \". Incorrectly unregistered. Test failed.\");\n                TestResult testResult = new TestResult();\n                testResult.setTestCase(test);\n                testResult.setStatus(TestStatus.Failed);\n\n                callback.onTestComplete(test, testResult);\n            }\n        };\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/push/GCMMessageManager.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.push;\n\nimport android.content.Intent;\nimport android.os.Handler;\nimport android.os.Looper;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Timer;\nimport java.util.TimerTask;\n\npublic class GCMMessageManager {\n    static {\n        instance = new GCMMessageManager();\n    }\n\n    public final static GCMMessageManager instance;\n\n    private List<GCMRegistrationMessage> registrationMessages;\n    private List<Intent> pushMessages;\n\n    private GCMMessageManager() {\n        pushMessages = new ArrayList<Intent>();\n        registrationMessages = new ArrayList<GCMRegistrationMessage>();\n    }\n\n    public synchronized void newRegistrationMessage(boolean isError, String value) {\n        registrationMessages.add(new GCMRegistrationMessage(value, isError));\n    }\n\n    public synchronized void newPushMessage(Intent intent) {\n        pushMessages.add(intent);\n    }\n\n    public synchronized void waitForRegistrationMessage(long milliseconds, final GCMMessageCallback callback) {\n        if (!registrationMessages.isEmpty()) {\n            GCMRegistrationMessage message = registrationMessages.get(0);\n            registrationMessages.remove(0);\n            callback.registrationMessageReceived(message.isError, message.value);\n        } else {\n            Looper looper = Looper.myLooper();\n            if (looper == null) {\n                looper = Looper.getMainLooper();\n            }\n\n            final Handler handler = new Handler(looper);\n\n            TimerTask task = new TimerTask() {\n\n                @Override\n                public void run() {\n                    handler.post(new Runnable() {\n\n                        @Override\n                        public void run() {\n                            if (!registrationMessages.isEmpty()) {\n                                GCMRegistrationMessage message = registrationMessages.get(0);\n                                registrationMessages.remove(0);\n                                callback.registrationMessageReceived(message.isError, message.value);\n                            } else {\n                                callback.timeoutElapsed();\n                            }\n                        }\n                    });\n                }\n            };\n\n            Timer timer = new Timer();\n            timer.schedule(task, milliseconds);\n        }\n    }\n\n    public void waitForPushMessage(long milliseconds, final GCMMessageCallback callback) {\n        if (!pushMessages.isEmpty()) {\n            Intent message = pushMessages.get(0);\n            pushMessages.remove(0);\n            callback.pushMessageReceived(message);\n        } else {\n            Looper looper = Looper.myLooper();\n            if (looper == null) {\n                looper = Looper.getMainLooper();\n            }\n\n            final Handler handler = new Handler(looper);\n\n            TimerTask task = new TimerTask() {\n\n                @Override\n                public void run() {\n                    handler.post(new Runnable() {\n\n                        @Override\n                        public void run() {\n                            if (!pushMessages.isEmpty()) {\n                                Intent message = pushMessages.get(0);\n                                pushMessages.remove(0);\n                                callback.pushMessageReceived(message);\n                            } else {\n                                callback.timeoutElapsed();\n                            }\n                        }\n                    });\n                }\n            };\n\n            Timer timer = new Timer();\n            timer.schedule(task, milliseconds);\n        }\n    }\n\n    public void clearRegistrationMessages() {\n        registrationMessages.clear();\n    }\n\n    public void clearPushMessages() {\n        pushMessages.clear();\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/push/GCMRegistrationMessage.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.push;\n\npublic class GCMRegistrationMessage {\n    public final boolean isError;\n    public final String value;\n\n    public GCMRegistrationMessage(String value, boolean isError) {\n        this.value = value;\n        this.isError = isError;\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/ClientSDKLoginTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport com.google.android.gms.auth.GoogleAuthUtil;\nimport com.google.gson.JsonObject;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.MainActivity;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\n\npublic class ClientSDKLoginTests extends TestGroup {\n\n    public static MainActivity mainActivity;\n\n    public ClientSDKLoginTests() {\n        super(\"ClientSDKLogin tests\");\n        this.addTest(createLoginWithGoogleSDKTest());\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public static TestCase createLoginWithGoogleSDKTest() {\n        TestCase test = new TestCase(\"Login With GoogleSDK Test\") {\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                String GOOGLE_SCOPE_TAKE2 = \"audience:server:client_id:\";\n                String CLIENT_ID_WEB_APPS = mainActivity.getGoogleWebAppClientId();\n                String GOOGLE_ID_TOKEN_SCOPE = GOOGLE_SCOPE_TAKE2 + CLIENT_ID_WEB_APPS;\n                final TestCase testCase = this;\n                final TestResult result = new TestResult();\n                String idToken = null;\n                try {\n                    idToken = GoogleAuthUtil.getToken(mainActivity, mainActivity.getGoogleUserId(), GOOGLE_ID_TOKEN_SCOPE);\n                    log(\"Acquired id_token from google\");\n                } catch (Exception exception) {\n                    result.setTestCase(testCase);\n                    result.setException(exception);\n                    result.setStatus(TestStatus.Failed);\n                    callback.onTestComplete(testCase, result);\n                    return;\n                }\n                JsonObject loginBody = new JsonObject();\n                loginBody.addProperty(\"id_token\", idToken);\n                client.login(MobileServiceAuthenticationProvider.Google, loginBody, new UserAuthenticationCallback() {\n                    @Override\n                    public void onCompleted(MobileServiceUser user, Exception error,\n                                            ServiceFilterResponse response) {\n                        try {\n                            if (error != null) {\n                                log(\"Login into mobile service with google token failed. Error: \" + error);\n                                result.setStatus(TestStatus.Failed);\n                            } else {\n                                log(\"Logged in to the mobile service as \" + user.getUserId());\n                                result.setStatus(TestStatus.Passed);\n                                client.logout();\n                            }\n                        } catch (Exception exception) {\n                            result.setException(exception);\n                            result.setStatus(TestStatus.Failed);\n                        } finally {\n                            result.setTestCase(testCase);\n                            callback.onTestComplete(testCase, result);\n                        }\n                    }\n                });\n\n            }\n        };\n        return test;\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/CustomApiTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n\t http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport android.util.Pair;\n\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonNull;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.google.gson.JsonPrimitive;\nimport com.microsoft.windowsazure.mobileservices.ApiJsonOperationCallback;\nimport com.microsoft.windowsazure.mobileservices.ApiOperationCallback;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.ExpectedValueException;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.AllStringIdMovies;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.Movie;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.MovieComparator;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.SimpleMovieFilter;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.StringIdMovie;\n\nimport org.apache.http.client.methods.HttpDelete;\nimport org.apache.http.client.methods.HttpGet;\nimport org.apache.http.client.methods.HttpPost;\nimport org.apache.http.client.methods.HttpPut;\nimport org.apache.http.protocol.HTTP;\n\nimport java.io.UnsupportedEncodingException;\nimport java.util.ArrayList;\nimport java.util.Calendar;\nimport java.util.Collections;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Map;\nimport java.util.Map.Entry;\nimport java.util.Random;\nimport java.util.Set;\nimport java.util.TimeZone;\n\npublic class CustomApiTests extends TestGroup {\n\n    private static final String PUBLIC_API_NAME = \"PublicPermission\";\n    private static final String INEXISTENT_API_NAME = \"InexistenApi\";\n    private static final String APP_API_NAME = \"ApplicationPermission\";\n    private static final String USER_API_NAME = \"UserPermission\";\n    private static final String ADMIN_API_NAME = \"AdminPermission\";\n    private static final String MOVIEFINDER_API_NAME = \"movieFinder\";\n    private static final String PATCH_METHOD_NAME = \"PATCH\";\n    private Map<ApiPermissions, String> apiNames;\n\n    public CustomApiTests() {\n        super(\"Custom API tests\");\n\n        apiNames = new HashMap<CustomApiTests.ApiPermissions, String>();\n        apiNames.put(ApiPermissions.Admin, ADMIN_API_NAME);\n        apiNames.put(ApiPermissions.User, USER_API_NAME);\n        apiNames.put(ApiPermissions.Application, APP_API_NAME);\n        apiNames.put(ApiPermissions.Public, PUBLIC_API_NAME);\n\n        Random rndGen = new Random();\n\n        this.addTest(LoginTests.createLogoutTest());\n\n        for (ApiPermissions permission : ApiPermissions.values()) {\n            for (int i = 0; i < 10; i++) {\n                this.addTest(createJsonApiTest(permission, false, rndGen, i));\n            }\n        }\n\n        TestCase loginTest = LoginTests.createLoginTest(MobileServiceAuthenticationProvider.Facebook);\n        loginTest.setCanRunUnattended(false);\n        this.addTest(loginTest);\n        TestCase apiAuthenticatedTest = createJsonApiTest(ApiPermissions.User, true, rndGen, 0);\n        apiAuthenticatedTest.setCanRunUnattended(false);\n        this.addTest(apiAuthenticatedTest);\n        this.addTest(LoginTests.createLogoutTest());\n\n        for (TypedTestType testType : TypedTestType.values()) {\n            this.addTest(createTypedApiTest(rndGen, testType));\n        }\n\n        for (DataFormat inputFormat : DataFormat.values()) {\n            for (DataFormat outputFormat : DataFormat.values()) {\n                this.addTest(createHttpContentApiTest(inputFormat, outputFormat, rndGen));\n            }\n        }\n\n        this.addTest(invokeJsonApiOverload1WithCallbackTest());\n        this.addTest(invokeJsonApiOverload1WithCallbackFailTest());\n\n        this.addTest(invokeJsonApiOverload2WithCallbackTest());\n        this.addTest(invokeJsonApiOverload2WithCallbackFailTest());\n\n        this.addTest(invokeJsonApiOverload3WithCallbackTest());\n        this.addTest(invokeJsonApiOverload3WithCallbackFailTest());\n\n        this.addTest(invokeJsonApiOverload4WithCallbackTest());\n        this.addTest(invokeJsonApiOverload4WithCallbackFailTest());\n\n        this.addTest(invokeTypedApiOverload1WithCallbackFailTest());\n\n        this.addTest(invokeTypedApiOverload2WithCallbackTest(rndGen));\n        this.addTest(invokeTypedApiOverload2WithCallbackFailTest(rndGen));\n\n        this.addTest(invokeTypedApiOverload3WithCallbackTest(rndGen));\n        this.addTest(invokeTypedApiOverload3WithCallbackFailTest(rndGen));\n\n        this.addTest(invokeTypedApiOverload4WithCallbackTest(rndGen));\n        this.addTest(invokeTypedApiOverload4WithCallbackFailTest(rndGen));\n\n        this.addTest(invokeHttpContentApiOverload1WithCallbackTest());\n        this.addTest(invokeHttpContentApiOverload1WithCallbackFailTest());\n    }\n\n    private TestCase createHttpContentApiTest(final DataFormat inputFormat, final DataFormat outputFormat, final Random rndGen) {\n        String name = String.format(\"HttpContent Overload - Input: %s - Output: %s\", inputFormat, outputFormat);\n\n        TestCase test = new TestCase(name) {\n            private static final String TEST_HEADER_PREFIX = \"x-test-zumo-\";\n            MobileServiceClient mClient;\n            List<Pair<String, String>> mQuery;\n            List<Pair<String, String>> mHeaders;\n            TestExecutionCallback mCallback;\n            JsonObject mExpectedResult;\n            int mExpectedStatusCode;\n            String mHttpMethod;\n            byte[] mContent;\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mClient = client;\n                mCallback = callback;\n                mHeaders = new ArrayList<Pair<String, String>>();\n\n                createHttpContentTestInput(inputFormat, outputFormat, rndGen);\n\n                try {\n\n                    ServiceFilterResponse response = mClient.invokeApi(APP_API_NAME, mContent, mHttpMethod, mHeaders, mQuery).get();\n\n                    Exception ex = validateResponseHeaders(response);\n                    if (ex != null) {\n                        createResultFromException(mResult, ex);\n                    } else {\n                        mResult.getTestCase().log(\"Header validated successfully\");\n\n                        String responseContent = response.getContent();\n\n                        mResult.getTestCase().log(\"Response content: \" + responseContent);\n\n                        JsonElement jsonResponse = null;\n                        if (outputFormat == DataFormat.Json) {\n                            jsonResponse = new JsonParser().parse(responseContent);\n                        } else if (outputFormat == DataFormat.Other) {\n                            String decodedContent = responseContent.replace(\"__{__\", \"{\").replace(\"__}__\", \"}\").replace(\"__[__\", \"[\").replace(\"__]__\", \"]\");\n                            jsonResponse = new JsonParser().parse(decodedContent);\n                        }\n\n                        switch (outputFormat) {\n                            case Json:\n                            case Other:\n                                if (!Util.compareJson(mExpectedResult, jsonResponse)) {\n                                    createResultFromException(mResult, new ExpectedValueException(mExpectedResult, jsonResponse));\n                                }\n                                break;\n                            default:\n                                String expectedResultContent = jsonToXml(mExpectedResult);\n                                // Normalize CRLF\n                                expectedResultContent = expectedResultContent.replace(\"\\r\\n\", \"\\n\");\n                                responseContent = responseContent.replace(\"\\r\\n\", \"\\n\");\n\n                                if (!expectedResultContent.equals(responseContent)) {\n                                    createResultFromException(mResult, new ExpectedValueException(expectedResultContent, responseContent));\n                                }\n                                break;\n                        }\n\n                    }\n                } catch (Exception exception) {\n                    createResultFromException(exception);\n                    mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    return;\n                }\n\n                mCallback.onTestComplete(mResult.getTestCase(), mResult);\n            }\n\n            private Exception validateResponseHeaders(ServiceFilterResponse response) {\n                if (mExpectedStatusCode != response.getStatus().getStatusCode()) {\n                    mResult.getTestCase().log(\"Invalid status code\");\n                    String content = response.getContent();\n                    if (content != null) {\n                        mResult.getTestCase().log(\"Response: \" + content);\n                    }\n                    return new ExpectedValueException(mExpectedStatusCode, response.getStatus().getStatusCode());\n                } else {\n\n                    for (Pair<String, String> header : mHeaders) {\n                        if (header.first.startsWith(TEST_HEADER_PREFIX)) {\n                            if (!Util.responseContainsHeader(response, header.first)) {\n                                mResult.getTestCase().log(\"Header \" + header.first + \" not found\");\n                                return new ExpectedValueException(\"Header: \" + header.first, \"\");\n                            } else {\n                                String headerValue = Util.getHeaderValue(response, header.first);\n                                if (!header.second.equals(headerValue)) {\n                                    mResult.getTestCase().log(\"Invalid Header value for \" + header.first);\n                                    return new ExpectedValueException(header.second, headerValue);\n                                }\n                            }\n                        }\n                    }\n                }\n\n                return null;\n            }\n\n            private void createHttpContentTestInput(DataFormat inputFormat, DataFormat outputFormat, Random rndGen) {\n                mHttpMethod = createHttpMethod(rndGen);\n                log(\"Method = \" + mHttpMethod);\n\n                mExpectedResult = new JsonObject();\n                mExpectedResult.addProperty(\"method\", mHttpMethod);\n                JsonObject user = new JsonObject();\n                user.addProperty(\"level\", \"anonymous\");\n                mExpectedResult.add(\"user\", user);\n\n                JsonElement body = null;\n                String textBody = null;\n                if (!mHttpMethod.equals(HttpGet.METHOD_NAME) && !mHttpMethod.equals(HttpDelete.METHOD_NAME)) {\n                    body = createJson(rndGen, 0, true);\n                    if (outputFormat == DataFormat.Xml || inputFormat == DataFormat.Xml) {\n                        // to prevent non-XML names from interfering with checks\n                        body = sanitizeJsonXml(body);\n                    }\n\n                    try {\n                        switch (inputFormat) {\n                            case Json:\n                                mContent = body.toString().getBytes(\"utf-8\");\n                                mHeaders.add(new Pair<String, String>(HTTP.CONTENT_TYPE, \"application/json\"));\n                                break;\n\n                            case Xml:\n                                textBody = jsonToXml(body);\n                                mContent = textBody.getBytes(\"utf-8\");\n                                mHeaders.add(new Pair<String, String>(HTTP.CONTENT_TYPE, \"text/xml\"));\n                                break;\n                            default:\n                                textBody = body.toString().replace('{', '<').replace('}', '>').replace(\"[\", \"__[__\").replace(\"]\", \"__]__\");\n                                mContent = textBody.getBytes(\"utf-8\");\n                                mHeaders.add(new Pair<String, String>(HTTP.CONTENT_TYPE, \"text/plain\"));\n                                break;\n                        }\n                    } catch (UnsupportedEncodingException e) {\n                        // this will never happen\n                    }\n                }\n\n                if (body != null) {\n                    if (inputFormat == DataFormat.Json) {\n                        mExpectedResult.add(\"body\", body);\n                    } else {\n                        mExpectedResult.addProperty(\"body\", textBody);\n                    }\n                }\n\n                int choice = rndGen.nextInt(5);\n                for (int j = 0; j < choice; j++) {\n                    String name = TEST_HEADER_PREFIX + j;\n                    String value = Util.createSimpleRandomString(rndGen, rndGen.nextInt(10) + 1, 'a', 'z');\n                    mHeaders.add(new Pair<String, String>(name, value));\n                }\n\n                mQuery = createQuery(rndGen);\n                if (mQuery == null) {\n                    mQuery = new ArrayList<Pair<String, String>>();\n                }\n\n                if (mQuery.size() > 0) {\n                    JsonObject outputQuery = new JsonObject();\n                    for (Pair<String, String> element : mQuery) {\n                        outputQuery.addProperty(element.first, element.second);\n                    }\n\n                    mExpectedResult.add(\"query\", outputQuery);\n                }\n\n                mQuery.add(new Pair<String, String>(\"format\", outputFormat.toString().toLowerCase(Locale.getDefault())));\n                mExpectedStatusCode = 200;\n\n                if (rndGen.nextInt(4) == 0) {\n                    // non-200 responses\n                    int[] options = new int[]{400, 404, 500, 201};\n                    int status = options[rndGen.nextInt(options.length)];\n                    mExpectedStatusCode = status;\n                    mQuery.add(new Pair<String, String>(\"status\", Integer.valueOf(status).toString()));\n                }\n            }\n\n            private String jsonToXml(JsonElement json) {\n                StringBuilder sb = new StringBuilder();\n                sb.append(\"<root>\");\n                jsonToXml(json, sb);\n                sb.append(\"</root>\");\n                return sb.toString();\n            }\n\n            private void jsonToXml(JsonElement json, StringBuilder sb) {\n                if (json == null) {\n                    json = new JsonPrimitive(\"\");\n                }\n\n                if (json.isJsonNull()) {\n                    sb.append(\"null\");\n                } else if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isBoolean()) {\n                    sb.append(json.toString().toLowerCase(Locale.getDefault()));\n                } else if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isNumber()) {\n                    sb.append(json.toString());\n                } else if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isString()) {\n                    sb.append(json.getAsJsonPrimitive().getAsString());\n                } else if (json.isJsonArray()) {\n                    sb.append(\"<array>\");\n                    JsonArray array = json.getAsJsonArray();\n                    for (int i = 0; i < array.size(); i++) {\n                        sb.append(\"<item>\");\n                        jsonToXml(array.get(i), sb);\n                        sb.append(\"</item>\");\n                    }\n                    sb.append(\"</array>\");\n                } else {\n                    Set<Entry<String, JsonElement>> entrySet = json.getAsJsonObject().entrySet();\n\n                    List<String> keys = new ArrayList<String>();\n                    for (Entry<String, JsonElement> entry : entrySet) {\n                        keys.add(entry.getKey());\n                    }\n\n                    Collections.sort(keys);\n                    for (String key : keys) {\n                        sb.append(\"<\" + key + \">\");\n                        jsonToXml(json.getAsJsonObject().get(key), sb);\n                        sb.append(\"</\" + key + \">\");\n                    }\n\n                }\n            }\n\n            private JsonElement sanitizeJsonXml(JsonElement body) {\n                if (body.isJsonArray()) {\n                    JsonArray array = new JsonArray();\n                    for (JsonElement element : body.getAsJsonArray()) {\n                        array.add(sanitizeJsonXml(element));\n                    }\n\n                    return array;\n                } else if (body.isJsonObject()) {\n                    JsonObject object = new JsonObject();\n                    Set<Entry<String, JsonElement>> entrySet = body.getAsJsonObject().entrySet();\n\n                    int i = 0;\n                    for (Entry<String, JsonElement> entry : entrySet) {\n                        object.add(\"memeber\" + i, sanitizeJsonXml(entry.getValue()));\n                        i++;\n                    }\n\n                    return object;\n                } else {\n                    return body;\n                }\n            }\n        };\n\n        return test;\n    }\n\n    private TestCase createTypedApiTest(final Random rndGen, final TypedTestType testType) {\n\n        String name = String.format(\"Typed Overload - %s\", testType);\n\n        TestCase test = new TestCase(name) {\n            MobileServiceClient mClient;\n            List<Pair<String, String>> mQuery;\n            TestExecutionCallback mCallback;\n            Movie[] mExpectedResult = null;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mClient = client;\n                mCallback = callback;\n\n                final StringIdMovie ramdomMovie = QueryTestData.getRandomStringIdMovie(rndGen);\n                log(\"Using movie: \" + ramdomMovie.getTitle());\n\n                String apiName = MOVIEFINDER_API_NAME;\n                String apiUrl;\n                switch (testType) {\n                    case GetByTitle:\n                        apiUrl = apiName + \"/title/\" + ramdomMovie.getTitle();\n                        log(\"API: \" + apiUrl);\n                        mExpectedResult = new StringIdMovie[]{ramdomMovie};\n\n                        try {\n                            AllStringIdMovies result = mClient.invokeApi(apiUrl, HttpGet.METHOD_NAME, null, AllStringIdMovies.class).get();\n\n                            if (!Util.compareArrays(mExpectedResult, result.getMovies())) {\n                                createResultFromException(mResult,\n                                        new ExpectedValueException(Util.arrayToString(mExpectedResult), Util.arrayToString(result.getMovies())));\n                            }\n                        } catch (Exception exception) {\n                            createResultFromException(mResult, exception);\n                        } finally {\n                            mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                        }\n\n                        break;\n\n                    case GetByDate:\n                        final Date releaseDate = ramdomMovie.getReleaseDate();\n                        TimeZone tz = TimeZone.getTimeZone(\"UTC\");\n                        Calendar c = Calendar.getInstance(tz);\n                        c.setTime(releaseDate);\n                        apiUrl = apiName + \"/date/\" + c.get(Calendar.YEAR) + \"/\" + (c.get(Calendar.MONTH) + 1) + \"/\" + c.get(Calendar.DATE);\n                        log(\"API: \" + apiUrl);\n                        SimpleMovieFilter dateFilter = new SimpleMovieFilter() {\n                            @Override\n                            protected boolean criteria(Movie movie) {\n                                return movie.getReleaseDate().equals(releaseDate);\n                            }\n                        };\n\n                        mExpectedResult = dateFilter.filter(QueryTestData.getAllStringIdMovies()).elements.toArray(new Movie[0]);\n\n                        try {\n                            AllStringIdMovies result = mClient.invokeApi(apiUrl, HttpGet.METHOD_NAME, null, AllStringIdMovies.class).get();\n\n                            if (!Util.compareArrays(mExpectedResult, result.getMovies())) {\n                                createResultFromException(mResult,\n                                        new ExpectedValueException(Util.arrayToString(mExpectedResult), Util.arrayToString(result.getMovies())));\n                            }\n                        } catch (Exception exception) {\n                            createResultFromException(mResult, exception);\n                        } finally {\n                            mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                        }\n\n                        break;\n\n                    case PostByDuration:\n                    case PostByYear:\n                        String orderBy = null;\n                        switch (rndGen.nextInt(3)) {\n                            case 0:\n                                orderBy = null;\n                                break;\n                            case 1:\n                                orderBy = \"title\";\n                                break;\n                            case 2:\n                                orderBy = \"title\"; //duration\n                                break;\n                        }\n\n                        mQuery = null;\n                        if (orderBy != null) {\n                            mQuery = new ArrayList<Pair<String, String>>();\n                            mQuery.add(new Pair<String, String>(\"orderBy\", orderBy));\n\n                            log(\"OrderBy: \" + orderBy);\n                        }\n\n                        if (testType == TypedTestType.PostByYear) {\n                            apiUrl = apiName + \"/moviesOnSameYear\";\n                        } else {\n                            apiUrl = apiName + \"/moviesWithSameDuration\";\n                        }\n\n                        log(\"API: \" + apiUrl);\n\n                        final String orderByCopy = orderBy;\n                        SimpleMovieFilter movieFilter = new SimpleMovieFilter() {\n\n                            @Override\n                            protected boolean criteria(Movie movie) {\n                                if (testType == TypedTestType.PostByYear) {\n                                    return movie.getYear() == ramdomMovie.getYear();\n                                } else {\n                                    return movie.getDuration() == ramdomMovie.getDuration();\n                                }\n                            }\n\n                            @Override\n                            protected List<Movie> applyOrder(List<? extends Movie> movies) {\n                                if (orderByCopy == null || orderByCopy.equals(\"title\")) {\n                                    Collections.sort(movies, new MovieComparator(\"getTitle\"));\n                                } else if (orderByCopy.equals(\"duration\")) {\n                                    Collections.sort(movies, new MovieComparator(\"getDuration\"));\n                                }\n\n                                return new ArrayList<Movie>(movies);\n                            }\n                        };\n\n                        mExpectedResult = movieFilter.filter(QueryTestData.getAllStringIdMovies()).elements.toArray(new Movie[0]);\n\n                        if (mQuery == null) {\n\n                            try {\n                                AllStringIdMovies result = mClient.invokeApi(apiUrl, ramdomMovie, HttpPost.METHOD_NAME, null, AllStringIdMovies.class).get();\n\n                                if (!Util.compareArrays(mExpectedResult, result.getMovies())) {\n                                    createResultFromException(mResult,\n                                            new ExpectedValueException(Util.arrayToString(mExpectedResult), Util.arrayToString(result.getMovies())));\n                                }\n                            } catch (Exception exception) {\n                                createResultFromException(mResult, exception);\n                            } finally {\n                                mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                            }\n\n                        } else {\n\n                            try {\n                                AllStringIdMovies result = mClient.invokeApi(apiUrl, ramdomMovie, HttpPost.METHOD_NAME, mQuery, AllStringIdMovies.class).get();\n\n                                if (!Util.compareArrays(mExpectedResult, result.getMovies())) {\n                                    createResultFromException(mResult,\n                                            new ExpectedValueException(Util.arrayToString(mExpectedResult), Util.arrayToString(result.getMovies())));\n                                }\n                            } catch (Exception exception) {\n                                createResultFromException(mResult, exception);\n                            } finally {\n                                mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                            }\n                        }\n                        break;\n                }\n            }\n\n        };\n\n        return test;\n    }\n\n    private TestCase createJsonApiTest(final ApiPermissions permission, final boolean isAuthenticated, final Random rndGen, int testNumber) {\n\n        String name = String.format(\"Json Overload - %s - authenticated=%s - Instance=%s\", permission.toString(), isAuthenticated, testNumber + 1);\n\n        TestCase test = new TestCase(name) {\n            MobileServiceClient mClient;\n            List<Pair<String, String>> mQuery;\n            boolean mExpected401;\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n\n                if (permission == ApiPermissions.Public) {\n                    client = client.withFilter(new RemoveAuthenticationServiceFilter());\n                }\n\n                mExpected401 = permission == ApiPermissions.Admin || (permission == ApiPermissions.User && !isAuthenticated);\n                mClient = client;\n\n                String method = createHttpMethod(rndGen);\n                log(\"Method = \" + method);\n\n                JsonElement body = null;\n                if (!method.equals(HttpGet.METHOD_NAME) && !method.equals(HttpDelete.METHOD_NAME)) {\n                    if (method.equals(PATCH_METHOD_NAME) || method.equals(HttpPut.METHOD_NAME)) {\n                        body = createJson(rndGen, 0, false);\n                    } else {\n                        body = createJson(rndGen, 0, true);\n                    }\n                }\n\n                if (body == null) {\n                    log(\"Body: NULL\");\n                } else {\n                    log(\"Body: \" + body.toString());\n                }\n\n                mQuery = createQuery(rndGen);\n\n                JsonElement queryJson = createQueryObject(mQuery);\n                log(\"Query: \" + queryJson.toString());\n\n                String api = apiNames.get(permission);\n                log(\"API: \" + api);\n\n                if (body == null && method.equals(HttpPost.METHOD_NAME) && mQuery == null) {\n\n                    try {\n                        JsonElement jsonElement = client.invokeApi(api).get();\n\n                        JsonObject expectedResult = new JsonObject();\n                        expectedResult.add(\"user\", createUserObject(mClient));\n\n                        if (mQuery != null && mQuery.size() > 0) {\n                            expectedResult.add(\"query\", createQueryObject(mQuery));\n                        }\n\n                        if (!Util.compareJson(expectedResult, jsonElement)) {\n                            createResultFromException(mResult, new ExpectedValueException(expectedResult, jsonElement));\n                        }\n                    } catch (Exception exception) {\n                        MobileServiceException cause = (MobileServiceException) exception.getCause();\n\n                        ServiceFilterResponse response = cause.getResponse();\n\n                        if (mExpected401) {\n                            if (response == null || response.getStatus().getStatusCode() != 401) {\n                                mResult.setStatus(TestStatus.Failed);\n                                mResult.setException(exception);\n                                mResult.getTestCase().log(\"Expected 401\");\n                            }\n                        } else {\n                            if (exception != null) {\n                                createResultFromException(mResult, exception);\n                            }\n                        }\n                    }\n\n                } else if (body != null && method.equals(HttpPost.METHOD_NAME) && mQuery == null) {\n                    try {\n                        JsonElement jsonElement = client.invokeApi(api, body).get();\n\n                        JsonObject expectedResult = new JsonObject();\n                        expectedResult.add(\"user\", createUserObject(mClient));\n\n                        if (mQuery != null && mQuery.size() > 0) {\n                            expectedResult.add(\"query\", createQueryObject(mQuery));\n                        }\n\n                        if (!Util.compareJson(expectedResult, jsonElement)) {\n                            createResultFromException(mResult, new ExpectedValueException(expectedResult, jsonElement));\n                        }\n                    } catch (Exception exception) {\n                        if (mExpected401) {\n                            MobileServiceException cause = (MobileServiceException) exception.getCause();\n\n                            ServiceFilterResponse response = cause.getResponse();\n\n                            if (response == null || response.getStatus().getStatusCode() != 401) {\n                                mResult.setStatus(TestStatus.Failed);\n                                mResult.setException(exception);\n                                mResult.getTestCase().log(\"Expected 401\");\n                            }\n                        } else {\n                            if (exception != null) {\n                                createResultFromException(mResult, exception);\n                            }\n                        }\n                    }\n\n                } else if (body == null) {\n\n                    try {\n                        JsonElement jsonElement = client.invokeApi(api, method, mQuery).get();\n\n                        JsonObject expectedResult = new JsonObject();\n                        expectedResult.add(\"user\", createUserObject(mClient));\n\n                        if (mQuery != null && mQuery.size() > 0) {\n                            expectedResult.add(\"query\", createQueryObject(mQuery));\n                        }\n\n                        if (!Util.compareJson(expectedResult, jsonElement)) {\n                            createResultFromException(mResult, new ExpectedValueException(expectedResult, jsonElement));\n                        }\n                    } catch (Exception exception) {\n                        if (mExpected401) {\n                            MobileServiceException cause = (MobileServiceException) exception.getCause();\n\n                            ServiceFilterResponse response = cause.getResponse();\n\n                            if (response == null || response.getStatus().getStatusCode() != 401) {\n                                mResult.setStatus(TestStatus.Failed);\n                                mResult.setException(exception);\n                                mResult.getTestCase().log(\"Expected 401\");\n                            }\n                        } else {\n                            if (exception != null) {\n                                createResultFromException(mResult, (Exception) exception.getCause());\n                            }\n                        }\n                    }\n\n                } else {\n\n                    try {\n                        JsonElement jsonElement = client.invokeApi(api, body, method, mQuery).get();\n\n                        JsonObject expectedResult = new JsonObject();\n                        expectedResult.add(\"user\", createUserObject(mClient));\n\n                        if (mQuery != null && mQuery.size() > 0) {\n                            expectedResult.add(\"query\", createQueryObject(mQuery));\n                        }\n\n                        if (!Util.compareJson(expectedResult, jsonElement)) {\n                            createResultFromException(mResult, new ExpectedValueException(expectedResult, jsonElement));\n                        }\n                    } catch (Exception exception) {\n                        if (mExpected401) {\n                            MobileServiceException cause = (MobileServiceException) exception.getCause();\n\n                            ServiceFilterResponse response = cause.getResponse();\n\n                            if (response == null || response.getStatus().getStatusCode() != 401) {\n                                mResult.setStatus(TestStatus.Failed);\n                                mResult.setException(exception);\n                                mResult.getTestCase().log(\"Expected 401\");\n                            }\n                        } else {\n                            if (exception != null) {\n                                createResultFromException(mResult, (Exception) exception.getCause());\n                            }\n                        }\n                    }\n                }\n\n                if (callback != null)\n                    callback.onTestComplete(this, mResult);\n            }\n        };\n\n        return test;\n    }\n\n    protected List<Pair<String, String>> createQuery(Random rndGen) {\n        if (rndGen.nextInt(2) == 0) {\n            return null;\n        } else {\n            List<Pair<String, String>> query = new ArrayList<Pair<String, String>>();\n\n            int size = rndGen.nextInt(5);\n\n            for (int i = 0; i < size; i++) {\n                query.add(new Pair<String, String>(Util.createSimpleRandomString(rndGen, rndGen.nextInt(10) + 1, 'a', 'z'), Util.createComplexRandomString(\n                        rndGen, rndGen.nextInt(30))));\n            }\n\n            return query;\n        }\n    }\n\n    private JsonObject createUserObject(MobileServiceClient client) {\n        JsonObject json = new JsonObject();\n\n        if (client.getCurrentUser() == null) {\n            json.addProperty(\"level\", \"anonymous\");\n        } else {\n            json.addProperty(\"level\", \"authenticated\");\n            json.addProperty(\"userid\", client.getCurrentUser().getUserId());\n        }\n\n        return json;\n    }\n\n    private JsonElement createQueryObject(List<Pair<String, String>> query) {\n        JsonObject json = new JsonObject();\n        if (query != null) {\n            for (Pair<String, String> element : query) {\n                json.addProperty(element.first, element.second);\n            }\n\n            return json;\n        } else {\n            return JsonNull.INSTANCE;\n        }\n    }\n\n    private JsonElement createJson(Random rndGen, int currentDepth, boolean canBeNull) {\n        final int maxDepth = 3;\n\n        int kind = rndGen.nextInt(15);\n\n        if (currentDepth == 0) {\n            kind = rndGen.nextInt(8) + 8;\n        }\n\n        switch (kind) {\n            case 0:\n                return new JsonPrimitive(true);\n\n            case 1:\n                return new JsonPrimitive(false);\n\n            case 2:\n                return new JsonPrimitive(rndGen.nextInt());\n\n            case 3:\n                return new JsonPrimitive(rndGen.nextInt() >> rndGen.nextInt(10));\n\n            case 4:\n            case 5:\n            case 6:\n                return new JsonPrimitive(Util.createComplexRandomString(rndGen, rndGen.nextInt(10)));\n\n            case 7:\n                if (canBeNull) {\n                    return JsonNull.INSTANCE;\n                } else {\n                    return new JsonPrimitive(Util.createComplexRandomString(rndGen, rndGen.nextInt(10)));\n                }\n\n            case 8:\n            case 9:\n            case 10:\n                if (currentDepth > maxDepth) {\n                    return new JsonPrimitive(\"max depth\");\n                } else {\n                    int size = rndGen.nextInt(5);\n                    JsonArray array = new JsonArray();\n                    for (int i = 0; i < size; i++) {\n                        array.add(createJson(rndGen, currentDepth + 1, true));\n                    }\n\n                    return array;\n                }\n\n            default:\n                if (currentDepth > maxDepth) {\n                    return new JsonPrimitive(\"max depth\");\n                } else {\n                    int size = rndGen.nextInt(5);\n                    JsonObject result = new JsonObject();\n\n                    for (int i = 0; i < size; i++) {\n                        String key;\n                        do {\n                            key = Util.createComplexRandomString(rndGen, rndGen.nextInt(3) + 3);\n                        } while (result.has(key));\n\n                        result.add(key, createJson(rndGen, currentDepth + 1, true));\n                    }\n\n                    return result;\n                }\n        }\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeTypedApiOverload1WithCallbackTest() {\n\n        String name = String.format(\"Typed With Callback - Overload 1\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                String apiName = MOVIEFINDER_API_NAME;\n                String apiUrl;\n\n                apiUrl = apiName + \"/moviesWithSameDuration\";\n\n                try {\n                    client.invokeApi(apiUrl, AllStringIdMovies.class, typedTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiOperationCallback<AllStringIdMovies> typedTestCallback() {\n                return new ApiOperationCallback<AllStringIdMovies>() {\n\n                    @Override\n                    public void onCompleted(AllStringIdMovies result, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception != null) {\n                            createResultFromException(mResult, exception);\n                        }\n\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeTypedApiOverload1WithCallbackFailTest() {\n\n        String name = String.format(\"Typed With Callback - Overload 1 - Fail\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                String apiName = MOVIEFINDER_API_NAME + \"wronguri\";\n                String apiUrl;\n\n                apiUrl = apiName + \"/moviesWithSameDuration\";\n\n                try {\n                    client.invokeApi(apiUrl, AllStringIdMovies.class, typedTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiOperationCallback<AllStringIdMovies> typedTestCallback() {\n                return new ApiOperationCallback<AllStringIdMovies>() {\n\n                    @Override\n                    public void onCompleted(AllStringIdMovies result, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception == null) {\n                            mResult.setStatus(TestStatus.Failed);\n                        }\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeTypedApiOverload2WithCallbackTest(final Random rndGen) {\n\n        String name = String.format(\"Typed With Callback - Overload 2\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                final StringIdMovie ramdomMovie = QueryTestData.getRandomStringIdMovie(rndGen);\n\n                String apiName = MOVIEFINDER_API_NAME;\n                String apiUrl;\n\n                apiUrl = apiName + \"/moviesWithSameDuration\";\n\n                try {\n                    client.invokeApi(apiUrl, ramdomMovie, AllStringIdMovies.class, typedTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiOperationCallback<AllStringIdMovies> typedTestCallback() {\n                return new ApiOperationCallback<AllStringIdMovies>() {\n\n                    @Override\n                    public void onCompleted(AllStringIdMovies result, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception != null) {\n                            createResultFromException(mResult, exception);\n                        }\n\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeTypedApiOverload2WithCallbackFailTest(final Random rndGen) {\n\n        String name = String.format(\"Typed With Callback - Overload 2 - Fail\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                final StringIdMovie ramdomMovie = QueryTestData.getRandomStringIdMovie(rndGen);\n\n                String apiName = MOVIEFINDER_API_NAME + \"wronguri\";\n                String apiUrl;\n\n                apiUrl = apiName + \"/moviesWithSameDuration\";\n\n                try {\n                    client.invokeApi(apiUrl, ramdomMovie, AllStringIdMovies.class, typedTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiOperationCallback<AllStringIdMovies> typedTestCallback() {\n                return new ApiOperationCallback<AllStringIdMovies>() {\n\n                    @Override\n                    public void onCompleted(AllStringIdMovies result, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception == null) {\n                            mResult.setStatus(TestStatus.Failed);\n                        }\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeTypedApiOverload3WithCallbackTest(final Random rndGen) {\n\n        String name = String.format(\"Typed With Callback - Overload 3\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                final StringIdMovie ramdomMovie = QueryTestData.getRandomStringIdMovie(rndGen);\n\n                String apiName = MOVIEFINDER_API_NAME;\n                String apiUrl;\n\n                apiUrl = apiName + \"/title/\" + ramdomMovie.getTitle();\n\n                List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n\n                try {\n                    client.invokeApi(apiUrl, HttpGet.METHOD_NAME, parameters, AllStringIdMovies.class, typedTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiOperationCallback<AllStringIdMovies> typedTestCallback() {\n                return new ApiOperationCallback<AllStringIdMovies>() {\n\n                    @Override\n                    public void onCompleted(AllStringIdMovies result, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception != null) {\n                            createResultFromException(mResult, exception);\n                        }\n\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeTypedApiOverload3WithCallbackFailTest(final Random rndGen) {\n\n        String name = String.format(\"Typed With Callback - Overload 3 - Fail\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                final StringIdMovie ramdomMovie = QueryTestData.getRandomStringIdMovie(rndGen);\n\n                String apiName = MOVIEFINDER_API_NAME + \"wronguri\";\n                String apiUrl;\n\n                apiUrl = apiName + \"/title/\" + ramdomMovie.getTitle();\n\n                List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n\n                try {\n                    client.invokeApi(apiUrl, HttpGet.METHOD_NAME, parameters, AllStringIdMovies.class, typedTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiOperationCallback<AllStringIdMovies> typedTestCallback() {\n                return new ApiOperationCallback<AllStringIdMovies>() {\n\n                    @Override\n                    public void onCompleted(AllStringIdMovies result, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception == null) {\n                            mResult.setStatus(TestStatus.Failed);\n                        }\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeTypedApiOverload4WithCallbackTest(final Random rndGen) {\n\n        String name = String.format(\"Typed With Callback - Overload 4\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                final StringIdMovie ramdomMovie = QueryTestData.getRandomStringIdMovie(rndGen);\n\n                String apiName = MOVIEFINDER_API_NAME;\n                String apiUrl;\n\n                apiUrl = apiName + \"/moviesWithSameDuration\";\n\n                List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n\n                try {\n                    client.invokeApi(apiUrl, ramdomMovie, HttpPost.METHOD_NAME, parameters, AllStringIdMovies.class, typedTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiOperationCallback<AllStringIdMovies> typedTestCallback() {\n                return new ApiOperationCallback<AllStringIdMovies>() {\n\n                    @Override\n                    public void onCompleted(AllStringIdMovies result, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception != null) {\n                            createResultFromException(mResult, exception);\n                        }\n\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeTypedApiOverload4WithCallbackFailTest(final Random rndGen) {\n\n        String name = String.format(\"Typed With Callback - Overload 4 - Fail\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                final StringIdMovie ramdomMovie = QueryTestData.getRandomStringIdMovie(rndGen);\n\n                String apiName = MOVIEFINDER_API_NAME + \"wronguri\";\n                String apiUrl;\n\n                apiUrl = apiName + \"/moviesWithSameDuration\";\n\n                List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n\n                try {\n                    client.invokeApi(apiUrl, ramdomMovie, HttpPost.METHOD_NAME, parameters, AllStringIdMovies.class, typedTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiOperationCallback<AllStringIdMovies> typedTestCallback() {\n                return new ApiOperationCallback<AllStringIdMovies>() {\n\n                    @Override\n                    public void onCompleted(AllStringIdMovies result, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception == null) {\n                            mResult.setStatus(TestStatus.Failed);\n                        }\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeJsonApiOverload1WithCallbackTest() {\n\n        String name = String.format(\"Json With Callback - Overload 1\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                try {\n                    client.invokeApi(PUBLIC_API_NAME, jsonTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiJsonOperationCallback jsonTestCallback() {\n                return new ApiJsonOperationCallback() {\n\n                    @Override\n                    public void onCompleted(JsonElement jsonObject, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception != null) {\n                            createResultFromException(mResult, exception);\n                        }\n\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeJsonApiOverload1WithCallbackFailTest() {\n\n        String name = String.format(\"Json With Callback - Overload 1 - Fail\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                try {\n                    client.invokeApi(INEXISTENT_API_NAME, jsonTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiJsonOperationCallback jsonTestCallback() {\n                return new ApiJsonOperationCallback() {\n\n                    @Override\n                    public void onCompleted(JsonElement jsonObject, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception == null) {\n                            mResult.setStatus(TestStatus.Failed);\n                        }\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeJsonApiOverload2WithCallbackTest() {\n\n        String name = String.format(\"Json With Callback - Overload 2\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                JsonElement json = createJson(new Random(), 0, false);\n\n                try {\n                    client.invokeApi(PUBLIC_API_NAME, json, jsonTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiJsonOperationCallback jsonTestCallback() {\n                return new ApiJsonOperationCallback() {\n\n                    @Override\n                    public void onCompleted(JsonElement jsonObject, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception != null) {\n                            createResultFromException(mResult, exception);\n                        }\n\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeJsonApiOverload2WithCallbackFailTest() {\n\n        String name = String.format(\"Json With Callback - Overload 2 - Fail\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                JsonElement json = createJson(new Random(), 0, false);\n\n                try {\n                    client.invokeApi(INEXISTENT_API_NAME, json, jsonTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiJsonOperationCallback jsonTestCallback() {\n                return new ApiJsonOperationCallback() {\n\n                    @Override\n                    public void onCompleted(JsonElement jsonObject, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception == null) {\n                            mResult.setStatus(TestStatus.Failed);\n                        }\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeJsonApiOverload3WithCallbackTest() {\n\n        String name = String.format(\"Json With Callback - Overload 3\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n\n                try {\n                    client.invokeApi(PUBLIC_API_NAME, HttpGet.METHOD_NAME, parameters, jsonTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiJsonOperationCallback jsonTestCallback() {\n                return new ApiJsonOperationCallback() {\n\n                    @Override\n                    public void onCompleted(JsonElement jsonObject, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception != null) {\n                            createResultFromException(mResult, exception);\n                        }\n\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeJsonApiOverload3WithCallbackFailTest() {\n\n        String name = String.format(\"Json With Callback - Overload 3 - Fail\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n\n                try {\n                    client.invokeApi(INEXISTENT_API_NAME, HttpGet.METHOD_NAME, parameters, jsonTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiJsonOperationCallback jsonTestCallback() {\n                return new ApiJsonOperationCallback() {\n\n                    @Override\n                    public void onCompleted(JsonElement jsonObject, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception == null) {\n                            mResult.setStatus(TestStatus.Failed);\n                        }\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeJsonApiOverload4WithCallbackTest() {\n\n        String name = String.format(\"Json With Callback - Overload 4\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n\n                JsonElement json = createJson(new Random(), 0, false);\n\n                try {\n                    client.invokeApi(PUBLIC_API_NAME, json, HttpPost.METHOD_NAME, parameters, jsonTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiJsonOperationCallback jsonTestCallback() {\n                return new ApiJsonOperationCallback() {\n\n                    @Override\n                    public void onCompleted(JsonElement jsonObject, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception != null) {\n                            createResultFromException(mResult, exception);\n                        }\n\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase invokeJsonApiOverload4WithCallbackFailTest() {\n\n        String name = String.format(\"Json With Callback - Overload 4 - Fail\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();\n\n                JsonElement json = createJson(new Random(), 0, false);\n\n                try {\n                    client.invokeApi(INEXISTENT_API_NAME, json, HttpPost.METHOD_NAME, parameters, jsonTestCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ApiJsonOperationCallback jsonTestCallback() {\n                return new ApiJsonOperationCallback() {\n\n                    @Override\n                    public void onCompleted(JsonElement jsonObject, Exception exception, ServiceFilterResponse response) {\n\n                        if (exception == null) {\n                            mResult.setStatus(TestStatus.Failed);\n                        }\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    private TestCase invokeHttpContentApiOverload1WithCallbackTest() {\n\n        String name = String.format(\"Http With Callback - Overload 1\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                String apiUrl = APP_API_NAME;\n\n                try {\n\n                    client.invokeApi(apiUrl, new byte[0], HttpPost.METHOD_NAME, new ArrayList<Pair<String, String>>(), new ArrayList<Pair<String, String>>(),\n                            serviceFilterResponseCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ServiceFilterResponseCallback serviceFilterResponseCallback() {\n                return new ServiceFilterResponseCallback() {\n\n                    @Override\n                    public void onResponse(ServiceFilterResponse response, Exception exception) {\n                        if (exception != null) {\n                            createResultFromException(mResult, exception);\n                        }\n\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    private TestCase invokeHttpContentApiOverload1WithCallbackFailTest() {\n\n        String name = String.format(\"Http With Callback - Overload 1 - Fail\");\n\n        TestCase test = new TestCase(name) {\n            TestExecutionCallback mCallback;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mCallback = callback;\n\n                String apiUrl = APP_API_NAME + INEXISTENT_API_NAME;\n\n                try {\n\n                    client.invokeApi(apiUrl, new byte[0], HttpPost.METHOD_NAME, new ArrayList<Pair<String, String>>(), new ArrayList<Pair<String, String>>(),\n                            serviceFilterResponseCallback());\n                } catch (Exception exception) {\n                    createResultFromException(mResult, exception);\n                }\n            }\n\n            private ServiceFilterResponseCallback serviceFilterResponseCallback() {\n                return new ServiceFilterResponseCallback() {\n\n                    @Override\n                    public void onResponse(ServiceFilterResponse response, Exception exception) {\n                        if (exception == null) {\n                            mResult.setStatus(TestStatus.Failed);\n                        }\n                        mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    }\n                };\n            }\n        };\n\n        return test;\n    }\n\n    private String createHttpMethod(final Random rndGen) {\n        switch (rndGen.nextInt(10)) {\n            case 0:\n            case 1:\n            case 2:\n                return HttpPost.METHOD_NAME;\n            case 3:\n            case 4:\n            case 5:\n            case 6:\n                return HttpGet.METHOD_NAME;\n            case 7:\n                return HttpPut.METHOD_NAME;\n            case 8:\n                return HttpDelete.METHOD_NAME;\n            default:\n                return PATCH_METHOD_NAME;\n        }\n    }\n\n    private enum ApiPermissions {\n        Public, Application, User, Admin\n    }\n\n    private enum DataFormat {\n        Json, Xml, Other\n    }\n\n    private enum TypedTestType {\n        GetByTitle, GetByDate, PostByDuration, PostByYear\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/EnhancedPushTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport android.annotation.TargetApi;\nimport android.content.SharedPreferences;\nimport android.content.SharedPreferences.Editor;\nimport android.os.AsyncTask;\nimport android.os.Build;\nimport android.preference.PreferenceManager;\n\nimport com.google.android.gcm.GCMRegistrar;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.notifications.MobileServicePush;\nimport com.microsoft.windowsazure.mobileservices.notifications.Registration;\nimport com.microsoft.windowsazure.mobileservices.notifications.RegistrationCallback;\nimport com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistration;\nimport com.microsoft.windowsazure.mobileservices.notifications.TemplateRegistrationCallback;\nimport com.microsoft.windowsazure.mobileservices.notifications.UnregisterCallback;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.MainActivity;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.push.GCMMessageHelper;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.push.GCMMessageManager;\n\nimport java.util.List;\nimport java.util.Set;\nimport java.util.UUID;\nimport java.util.concurrent.ExecutionException;\n\npublic class EnhancedPushTests extends TestGroup {\n\n    private static final String tableName = \"droidPushTest\";\n    private static final String DEFAULT_REGISTRATION_NAME = \"$Default\";\n    private static final String REGISTRATION_NAME_STORAGE_KEY = \"__NH_REG_NAME_\";\n    private boolean isNetBackend = true;\n\n    /*\n     * Pointer to the main activity used to register with GCM\n     */\n    public static MainActivity mainActivity;\n    public static String registrationId;\n\n    public EnhancedPushTests(boolean isNetBackend) {\n        super(\"Enhanced Push tests\");\n\n        this.isNetBackend = isNetBackend;\n\n        // Notification Roundtrip Tests\n\n        this.addTest(createGCMRegisterTest());\n\n        String json = \"'Notification Hub test notification'\".replace('\\'', '\\\"');\n        this.addTest(createNativePushTestWithRefresh(\"Native Notification Roundtrip - Simple payload - With Refresh\", \"tag1\", json));\n\n        json = \"'Notification Hub test notification'\".replace('\\'', '\\\"');\n        this.addTest(createNativePushTest(\"Native Notification Roundtrip - Simple payload\", \"tag1\", json));\n\n        json = \"{'name':'John Doe','age':'33'}\".replace('\\'', '\\\"');\n        this.addTest(createNativePushTest(\"Native Notification Roundtrip - Complex payload\", \"tag2\", json));\n\n        this.addTest(createNativePushTest(\"Native Notification Roundtrip - No Tag\", null, json));\n\n        String templateNotification = \"{'fullName':'John Doe'}\".replace('\\'', '\\\"');\n        String template = \"{'data':{'user':'$(fullName)'}}\".replace('\\'', '\\\"');\n        String expectedPayload = \"{'user':'John Doe'}\".replace('\\'', '\\\"');\n\n        this.addTest(createTemplatePushTest(\"Template Notification Roundtrip - Tag\", \"tag4\", templateNotification, \"templateTag\", template, expectedPayload));\n\n        this.addTest(createTemplatePushTest(\"Template Notification Roundtrip - No Tag\", null, templateNotification, \"templateNoTag\", template, expectedPayload));\n\n        this.addTest(createReRegisterNativeTestCase(\"Register native - Register / Unregister / Register / Unregister\"));\n\n        this.addTest(createReRegisterTemplateTestCase(\"Register template - Register / Unregister / Register / Unregister\", UUID.randomUUID().toString()));\n\n        this.addTest(createUnregisterNativeNonExistingTestCase(\"Unregister native - Non existing\"));\n        this.addTest(createUnregisterNativeUnexistingRegistrationTestCase(\"Unregister native - Unexisting registration\"));\n\n        this.addTest(createUnregisterTemplateNonExistingTestCase(\"Unregister template - Non existing\", UUID.randomUUID().toString()));\n        this.addTest(createUnregisterTemplateUnexistingRegistrationTestCase(\"Unregister template - Unexisting registration\", UUID.randomUUID().toString()));\n\n        this.addTest(createUnregisterAllUnregisterNativeTestCase(\n                \"Unregister all - Register native / Register template / Unregister all / Unregister native - Unexisting registration\", UUID.randomUUID()\n                        .toString()));\n        this.addTest(createUnregisterAllUnregisterTemplateTestCase(\n                \"Unregister all - Register native / Register template / Unregister all / Unregister template - Unexisting registration\", UUID.randomUUID()\n                        .toString()));\n\n        this.addTest(createCheckIsRefreshNeeded(\"Retrieve existing registrations on first connection\"));\n\n        // With Callbacks\n        this.addTest(RegisterNativeWithCallbackTestCase(\"Register Native With Callback\"));\n        this.addTest(RegisterTemplateWithCallbackTestCase(\"Register Template With Callback\", \"template1\"));\n        this.addTest(UnRegisterNativeWithCallbackTestCase(\"UnRegister Native With Callback\"));\n        this.addTest(UnRegisterTemplateWithCallbackTestCase(\"UnRegister Template With Callback\", \"template1\"));\n        this.addTest(UnRegisterAllNativeWithCallbackTestCase(\"UnRegister All Native With Callback\"));\n        this.addTest(UnRegisterAllTemplateWithCallbackTestCase(\"UnRegister All Template With Callback\", \"template1\"));\n\n        this.addTest(createGCMUnregisterTest());\n    }\n\n    public static void clearNotificationHubStorageData() {\n        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.getInstance());\n        Editor editor = sharedPreferences.edit();\n        Set<String> keys = sharedPreferences.getAll().keySet();\n\n        for (String key : keys) {\n            if (key.startsWith(\"__NH_\")) {\n                editor.remove(key);\n            }\n        }\n\n        editor.commit();\n    }\n\n    public static void clearRegistrationsStorageData() {\n        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.getInstance());\n        Editor editor = sharedPreferences.edit();\n        Set<String> keys = sharedPreferences.getAll().keySet();\n\n        for (String key : keys) {\n            if (key.startsWith(\"REGISTRATION_NAME_STORAGE_KEY\")) {\n                editor.remove(key);\n            }\n        }\n\n        editor.commit();\n    }\n\n    private Registration register(TestCase test, MobileServicePush hub, String gcmId, String[] tags) throws InterruptedException, ExecutionException {\n        test.log(\"Register Native with GCMID = \" + gcmId);\n        if (tags != null && tags.length > 0) {\n            for (String tag : tags) {\n                test.log(\"Using tag: \" + tag);\n            }\n        }\n\n        return hub.register(gcmId, tags).get();\n    }\n\n    private void unregister(TestCase test, MobileServicePush hub) throws InterruptedException, ExecutionException {\n        test.log(\"Unregister Native\");\n\n        hub.unregister().get();\n    }\n\n    private TemplateRegistration registerTemplate(TestCase test, MobileServicePush hub, String gcmId, String templateName, String[] tags)\n            throws InterruptedException, ExecutionException {\n        String template = \"{\\\"time_to_live\\\": 108, \\\"delay_while_idle\\\": true, \\\"data\\\": { \\\"message\\\": \\\"$(msg)\\\" } }\";\n\n        return registerTemplate(test, hub, gcmId, templateName, template, tags);\n    }\n\n    private TemplateRegistration registerTemplate(TestCase test, MobileServicePush hub, String gcmId, String templateName, String template, String[] tags)\n            throws InterruptedException, ExecutionException {\n\n        test.log(\"Register with GCMID = \" + gcmId);\n        test.log(\"Register with templateName = \" + templateName);\n\n        if (tags != null && tags.length > 0) {\n            for (String tag : tags) {\n                test.log(\"Using tag: \" + tag);\n            }\n        }\n\n        return hub.registerTemplate(gcmId, templateName, template, tags).get();\n    }\n\n    private void unregisterTemplate(TestCase test, MobileServicePush hub, String templateName) throws InterruptedException, ExecutionException {\n        test.log(\"UnregisterTemplate with templateName = \" + templateName);\n\n        hub.unregisterTemplate(templateName).get();\n    }\n\n    private void unregisterAll(TestCase test, MobileServicePush hub, String gcmId) throws InterruptedException, ExecutionException {\n        test.log(\"Unregister Native\");\n\n        hub.unregisterAll(gcmId).get();\n    }\n\n    private void addUnexistingNativeRegistration(String registrationId) {\n        addUnexistingTemplateRegistration(DEFAULT_REGISTRATION_NAME, registrationId);\n    }\n\n    private void addUnexistingTemplateRegistration(String templateName, String registrationId) {\n        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.getInstance());\n\n        Editor editor = sharedPreferences.edit();\n        editor.putString(REGISTRATION_NAME_STORAGE_KEY + templateName, registrationId);\n        editor.commit();\n    }\n\n    // Register Native Tests\n\n    private int getRegistrationCountInLocalStorage() {\n        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.getInstance());\n        int regCount = 0;\n\n        for (String key : preferences.getAll().keySet()) {\n            if (key.startsWith(\"__NH_REG_NAME_\")) {\n                regCount++;\n            }\n        }\n\n        return regCount;\n    }\n\n    // Register Template Tests\n\n    private TestCase createReRegisterNativeTestCase(String name) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    final String gcmId = UUID.randomUUID().toString();\n\n                    Registration reg1 = register(this, MobileServicePush, gcmId, (String[]) null);\n\n                    unregister(this, MobileServicePush);\n\n                    Registration reg2 = register(this, MobileServicePush, gcmId, (String[]) null);\n\n                    if (reg2.getRegistrationId().equals(reg1.getRegistrationId())) {\n                        result.setStatus(TestStatus.Failed);\n                    }\n\n                    unregister(this, MobileServicePush);\n\n                    callback.onTestComplete(this, result);\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n\n        return register;\n    }\n\n    // Unregister Native Tests\n\n    private TestCase createReRegisterTemplateTestCase(String name, final String templateName) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    final String gcmId = UUID.randomUUID().toString();\n\n                    TemplateRegistration reg1 = registerTemplate(this, MobileServicePush, gcmId, templateName, (String[]) null);\n\n                    unregisterTemplate(this, MobileServicePush, templateName);\n\n                    TemplateRegistration reg2 = registerTemplate(this, MobileServicePush, gcmId, templateName + \"1\", (String[]) null);\n\n                    if (reg2.getRegistrationId().equals(reg1.getRegistrationId())) {\n                        result.setStatus(TestStatus.Failed);\n                    }\n\n                    unregisterTemplate(this, MobileServicePush, templateName);\n\n                    callback.onTestComplete(this, result);\n                    return;\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n\n        return register;\n    }\n\n    private TestCase createUnregisterNativeNonExistingTestCase(String name) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    unregister(this, MobileServicePush);\n\n                    callback.onTestComplete(this, result);\n                    return;\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n\n        return register;\n    }\n\n    // Unregister Template Tests\n\n    private TestCase createUnregisterNativeUnexistingRegistrationTestCase(String name) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    String gcmId = UUID.randomUUID().toString();\n\n                    Registration registration = register(this, MobileServicePush, gcmId, (String[]) null);\n\n                    final String registrationId = registration.getRegistrationId();\n\n                    unregister(this, MobileServicePush);\n\n                    addUnexistingNativeRegistration(registrationId);\n\n                    unregister(this, MobileServicePush);\n\n                    callback.onTestComplete(this, result);\n                    return;\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n\n        if (!isNetBackend) {\n            register.setExpectedExceptionClass(MobileServiceException.class);\n        }\n\n        return register;\n    }\n\n    private TestCase createUnregisterTemplateNonExistingTestCase(String name, final String templateName) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    unregisterTemplate(this, MobileServicePush, templateName);\n\n                    callback.onTestComplete(this, result);\n                    return;\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n\n        return register;\n    }\n\n    // Unregister All Tests\n\n    private TestCase createUnregisterTemplateUnexistingRegistrationTestCase(String name, final String templateName) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase that = this;\n\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    TemplateRegistration templateRegistration = registerTemplate(this, MobileServicePush, UUID.randomUUID().toString(), templateName,\n                            (String[]) null);\n\n                    final String registrationId = templateRegistration.getRegistrationId();\n\n                    unregisterTemplate(that, MobileServicePush, templateName);\n\n                    addUnexistingTemplateRegistration(templateName, registrationId);\n\n                    unregisterTemplate(that, MobileServicePush, templateName);\n\n                    callback.onTestComplete(this, result);\n                    return;\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n\n        if (!isNetBackend) {\n            register.setExpectedExceptionClass(MobileServiceException.class);\n        }\n\n        return register;\n    }\n\n    private TestCase createUnregisterAllUnregisterNativeTestCase(String name, final String templateName) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    final String gcmId = UUID.randomUUID().toString();\n\n                    unregisterAll(this, MobileServicePush, gcmId);\n\n                    Registration nativeRegistration = register(this, MobileServicePush, gcmId, (String[]) null);\n\n                    final String registrationId = nativeRegistration.getRegistrationId();\n\n                    registerTemplate(this, MobileServicePush, gcmId, templateName, (String[]) null);\n\n                    unregisterAll(this, MobileServicePush, gcmId);\n\n                    addUnexistingNativeRegistration(registrationId);\n\n                    unregister(this, MobileServicePush);\n\n                    callback.onTestComplete(this, result);\n                    return;\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n\n        if (!isNetBackend) {\n            register.setExpectedExceptionClass(MobileServiceException.class);\n        }\n\n        return register;\n    }\n\n    private TestCase createUnregisterAllUnregisterTemplateTestCase(String name, final String templateName) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    final String gcmId = UUID.randomUUID().toString();\n\n                    unregisterAll(this, MobileServicePush, gcmId);\n\n                    register(this, MobileServicePush, gcmId, (String[]) null);\n\n                    TemplateRegistration templateRegistration = registerTemplate(this, MobileServicePush, gcmId, templateName, (String[]) null);\n\n                    final String registrationId = templateRegistration.getRegistrationId();\n\n                    unregisterAll(this, MobileServicePush, gcmId);\n\n                    addUnexistingTemplateRegistration(templateName, registrationId);\n\n                    unregisterTemplate(this, MobileServicePush, templateName);\n\n                    callback.onTestComplete(this, result);\n                    return;\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n        if (!isNetBackend) {\n            register.setExpectedExceptionClass(MobileServiceException.class);\n        }\n\n        return register;\n    }\n\n    // Notification Roundtrip Tests\n\n    private TestCase createCheckIsRefreshNeeded(String name) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    final String gcmId = UUID.randomUUID().toString();\n\n                    unregisterAll(this, MobileServicePush, gcmId);\n\n                    register(this, MobileServicePush, gcmId, (String[]) null);\n\n                    registerTemplate(this, MobileServicePush, gcmId, UUID.randomUUID().toString(), (String[]) null);\n\n                    if (getRegistrationCountInLocalStorage() != 2) {\n                        result.setStatus(TestStatus.Failed);\n                    }\n\n                    callback.onTestComplete(this, result);\n                    return;\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n\n        return register;\n    }\n\n    private TestCase createNativePushTest(String testName, final String tag, String jsonPayload) {\n        final JsonElement orginalPayload = new JsonParser().parse(jsonPayload);\n\n        JsonObject newPayload;\n        if (orginalPayload.isJsonObject()) {\n            newPayload = orginalPayload.getAsJsonObject();\n        } else {\n            newPayload = new JsonObject();\n            newPayload.add(\"message\", orginalPayload);\n        }\n\n        final JsonObject payload = newPayload;\n\n        TestCase result = new TestCase(testName) {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    String[] tags = tag != null ? new String[]{tag} : null;\n\n                    unregisterAll(this, MobileServicePush, registrationId);\n\n                    register(this, MobileServicePush, registrationId, tags);\n\n                    GCMMessageManager.instance.clearPushMessages();\n                    MobileServiceJsonTable table = client.getTable(tableName);\n                    JsonObject item = new JsonObject();\n                    item.addProperty(\"method\", \"send\");\n                    item.addProperty(\"tag\", tag);\n                    JsonObject sentPayload = new JsonObject();\n                    sentPayload.add(\"data\", payload);\n                    item.add(\"payload\", sentPayload);\n                    item.addProperty(\"usingNH\", true);\n\n                    JsonObject jsonObject = table.insert(item).get();\n\n                    this.log(\"OnCompleted: \" + jsonObject.toString());\n                    TestExecutionCallback nativeUnregisterTestExecutionCallback = getNativeUnregisterTestExecutionCallback(client, tag, payload, callback);\n                    GCMMessageManager.instance.waitForPushMessage(20000, GCMMessageHelper.getPushCallback(this, payload, nativeUnregisterTestExecutionCallback));\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        result.setName(testName);\n\n        return result;\n    }\n\n    private TestCase createTemplatePushTest(String testName, final String tag, final String templateNotification, final String templateName,\n                                            final String template, final String expectedPayload) {\n\n        TestCase result = new TestCase(testName) {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n\n                    String[] tags = tag != null ? new String[]{tag} : null;\n\n                    final MobileServicePush MobileServicePush = client.getPush();\n\n                    unregisterAll(this, MobileServicePush, registrationId);\n\n                    registerTemplate(this, MobileServicePush, registrationId, templateName, template, tags);\n\n                    JsonElement templateNotificationJsonElement = new JsonParser().parse(templateNotification);\n\n                    GCMMessageManager.instance.clearPushMessages();\n                    MobileServiceJsonTable table = client.getTable(tableName);\n                    JsonObject item = new JsonObject();\n                    item.addProperty(\"method\", \"send\");\n                    item.addProperty(\"tag\", tag);\n                    item.addProperty(\"payload\", \"not used\");\n                    item.addProperty(\"templatePush\", true);\n                    item.add(\"templateNotification\", templateNotificationJsonElement);\n                    item.addProperty(\"usingNH\", true);\n\n                    JsonObject jsonObject = table.insert(item).get();\n\n                    log(\"OnCompleted: \" + jsonObject.toString());\n                    TestExecutionCallback nativeUnregisterTestExecutionCallback = getTemplateUnregisterTestExecutionCallback(client, tag, templateName,\n                            template, templateNotification, callback);\n                    GCMMessageManager.instance.waitForPushMessage(20000,\n                            GCMMessageHelper.getPushCallback(this, expectedPayload, nativeUnregisterTestExecutionCallback));\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        result.setName(testName);\n\n        return result;\n    }\n\n    private TestCase createGCMUnregisterTest() {\n        TestCase testCase = new TestCase(\"Unregister from GCM\") {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                GCMRegistrar.unregister(mainActivity);\n                log(\"Unregistered from GCM\");\n                TestResult testResult = new TestResult();\n                testResult.setStatus(TestStatus.Passed);\n                testResult.setTestCase(this);\n                callback.onTestComplete(this, testResult);\n            }\n        };\n\n        return testCase;\n    }\n\n    private TestCase createGCMRegisterTest() {\n        TestCase testCase = new TestCase(\"Register app with GCM\") {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n\n                    GCMRegistrar.checkDevice(mainActivity);\n                    GCMRegistrar.checkManifest(mainActivity);\n                    String registrationId = GCMRegistrar.getRegistrationId(mainActivity);\n                    EnhancedPushTests.registrationId = registrationId;\n\n                    log(\"Registration ID: \" + EnhancedPushTests.registrationId);\n\n                    if (\"\".equals(registrationId)) {\n                        GCMRegistrar.register(mainActivity, mainActivity.getGCMSenderId());\n                        log(\"Called GCMRegistrar.register\");\n                        GCMMessageManager.instance.waitForRegistrationMessage(20000,\n                                GCMMessageHelper.getRegistrationCallBack(this, callback, EnhancedPushTests.class));\n                    } else {\n                        TestResult testResult = new TestResult();\n                        testResult.setTestCase(this);\n                        testResult.setStatus(TestStatus.Passed);\n                        callback.onTestComplete(this, testResult);\n                    }\n                } catch (Exception e) {\n                    TestResult testResult = new TestResult();\n                    testResult.setTestCase(this);\n                    testResult.setStatus(TestStatus.Failed);\n                    callback.onTestComplete(this, testResult);\n                }\n            }\n        };\n\n        return testCase;\n    }\n\n    private TestExecutionCallback getNativeUnregisterTestExecutionCallback(final MobileServiceClient client, final String tag, final JsonObject payload,\n                                                                           final TestExecutionCallback callback) {\n        return new TestExecutionCallback() {\n\n            @Override\n            public void onTestStart(TestCase test) {\n                return;\n            }\n\n            @Override\n            public void onTestGroupComplete(TestGroup group, List<TestResult> results) {\n                return;\n            }\n\n            @Override\n            public void onTestComplete(TestCase test, TestResult result) {\n                if (result.getStatus() == TestStatus.Failed) {\n                    callback.onTestComplete(test, result);\n                } else {\n                    nativeUnregisterTestExecution(client, test, tag, payload, callback);\n                }\n            }\n        };\n    }\n\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB)\n    private void nativeUnregisterTestExecution(final MobileServiceClient client, final TestCase test, final String tag, final JsonObject payload,\n                                               final TestExecutionCallback callback) {\n\n        new AsyncTask<Void, Void, Void>() {\n            @Override\n            protected Void doInBackground(Void... arg0) {\n\n                try {\n                    unregister(test, client.getPush());\n\n                    GCMMessageManager.instance.clearPushMessages();\n                    MobileServiceJsonTable table = client.getTable(tableName);\n                    JsonObject item = new JsonObject();\n                    item.addProperty(\"method\", \"send\");\n                    item.addProperty(\"tag\", tag);\n\n                    JsonObject sentPayload = new JsonObject();\n                    sentPayload.add(\"data\", payload);\n                    item.add(\"payload\", sentPayload);\n\n                    item.addProperty(\"usingNH\", true);\n\n                    JsonObject jsonObject = table.insert(item).get();\n\n                    test.log(\"OnCompleted: \" + jsonObject.toString());\n                    GCMMessageManager.instance.waitForPushMessage(20000, GCMMessageHelper.getNegativePushCallback(test, callback));\n                } catch (Exception exception) {\n                    callback.onTestComplete(test, test.createResultFromException(exception));\n                    // return;\n                }\n                return null;\n            }\n        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);\n\n    }\n\n    private TestExecutionCallback getTemplateUnregisterTestExecutionCallback(final MobileServiceClient client, final String tag, final String templateName,\n                                                                             final String template, final String templateNotification, final TestExecutionCallback callback) {\n        return new TestExecutionCallback() {\n\n            @Override\n            public void onTestStart(TestCase test) {\n                return;\n            }\n\n            @Override\n            public void onTestGroupComplete(TestGroup group, List<TestResult> results) {\n                return;\n            }\n\n            @Override\n            public void onTestComplete(TestCase test, TestResult result) {\n                if (result.getStatus() == TestStatus.Failed) {\n                    callback.onTestComplete(test, result);\n                } else {\n                    templateUnregisterTestExecution(client, test, tag, templateName, template, templateNotification, callback);\n                }\n            }\n        };\n    }\n\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB)\n    private void templateUnregisterTestExecution(final MobileServiceClient client, final TestCase test, final String tag, final String templateName,\n                                                 final String template, final String templateNotification, final TestExecutionCallback callback) {\n\n        new AsyncTask<Void, Void, Void>() {\n            @Override\n            protected Void doInBackground(Void... arg0) {\n                try {\n\n                    String[] tags = tag != null ? new String[]{tag} : null;\n\n                    registerTemplate(test, client.getPush(), templateName, template, tags);\n\n                    unregisterTemplate(test, client.getPush(), templateName);\n\n                    JsonElement templateNotificationJsonElement = new JsonParser().parse(templateNotification);\n\n                    GCMMessageManager.instance.clearPushMessages();\n                    MobileServiceJsonTable table = client.getTable(tableName);\n                    JsonObject item = new JsonObject();\n                    item.addProperty(\"method\", \"send\");\n                    item.addProperty(\"tag\", tag);\n                    item.addProperty(\"payload\", \"not used\");\n                    item.addProperty(\"templatePush\", true);\n                    item.add(\"templateNotification\", templateNotificationJsonElement);\n                    item.addProperty(\"usingNH\", true);\n\n                    JsonObject jsonObject = table.insert(item).get();\n                    test.log(\"OnCompleted: \" + jsonObject.toString());\n                    GCMMessageManager.instance.waitForPushMessage(10000, GCMMessageHelper.getNegativePushCallback(test, callback));\n                } catch (Exception exception) {\n                    callback.onTestComplete(test, test.createResultFromException(exception));\n                    // return;\n                }\n                return null;\n            }\n        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);\n    }\n\n    // Test Callbacks\n    @SuppressWarnings(\"deprecation\")\n    private void register(TestCase test, MobileServicePush hub, String gcmId, String[] tags, final RegistrationCallback callback) {\n        test.log(\"Register Native with GCMID = \" + gcmId);\n        if (tags != null && tags.length > 0) {\n            for (String tag : tags) {\n                test.log(\"Using tag: \" + tag);\n            }\n        }\n\n        hub.register(gcmId, tags, callback);\n    }\n\n    private void registerTemplate(TestCase test, MobileServicePush hub, String gcmId, String templateName, String[] tags, TemplateRegistrationCallback callback) {\n        String template = \"{\\\"time_to_live\\\": 108, \\\"delay_while_idle\\\": true, \\\"data\\\": { \\\"message\\\": \\\"$(msg)\\\" } }\";\n        registerTemplate(test, hub, gcmId, templateName, template, tags, callback);\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private void registerTemplate(TestCase test, MobileServicePush hub, String gcmId, String templateName, String template, String[] tags,\n                                  TemplateRegistrationCallback callback) {\n\n        test.log(\"Register with GCMID = \" + gcmId);\n        test.log(\"Register with templateName = \" + templateName);\n\n        if (tags != null && tags.length > 0) {\n            for (String tag : tags) {\n                test.log(\"Using tag: \" + tag);\n            }\n        }\n\n        hub.registerTemplate(gcmId, templateName, template, tags, callback);\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private void unregister(TestCase test, MobileServicePush hub, UnregisterCallback callback) {\n        test.log(\"Unregister Native\");\n        hub.unregister(callback);\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private void unregisterTemplate(TestCase test, MobileServicePush hub, String templateName, final UnregisterCallback callback) {\n        test.log(\"UnregisterTemplate with templateName = \" + templateName);\n\n        hub.unregisterTemplate(templateName, callback);\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private void unregisterAll(TestCase test, MobileServicePush hub, String gcmId, final UnregisterCallback callback) {\n        test.log(\"Unregister Native\");\n        hub.unregisterAll(gcmId, callback);\n    }\n\n    private TestCase RegisterNativeWithCallbackTestCase(String name) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase that = this;\n\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    final String gcmId = UUID.randomUUID().toString();\n\n                    register(this, MobileServicePush, gcmId, (String[]) null, new RegistrationCallback() {\n\n                        @Override\n                        public void onRegister(final Registration reg1, Exception exception) {\n\n                            if (exception != null) {\n                                callback.onTestComplete(that, createResultFromException(exception));\n                                return;\n                            }\n\n                            callback.onTestComplete(that, result);\n\n                            return;\n                        }\n                    });\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n\n        return register;\n    }\n\n    private TestCase RegisterTemplateWithCallbackTestCase(String name, final String templateName) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase that = this;\n\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    final String gcmId = UUID.randomUUID().toString();\n\n                    registerTemplate(this, MobileServicePush, gcmId, templateName, (String[]) null, new TemplateRegistrationCallback() {\n\n                        @Override\n                        public void onRegister(final TemplateRegistration reg1, Exception exception) {\n                            if (exception != null) {\n                                callback.onTestComplete(that, createResultFromException(exception));\n                                return;\n                            }\n\n                            callback.onTestComplete(that, result);\n                            return;\n                        }\n                    });\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n\n        return register;\n    }\n\n    private TestCase UnRegisterNativeWithCallbackTestCase(String name) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                final TestCase that = this;\n\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    unregister(this, MobileServicePush, new UnregisterCallback() {\n\n                        @Override\n                        public void onUnregister(Exception exception) {\n                            if (exception != null) {\n                                callback.onTestComplete(that, createResultFromException(exception));\n                                return;\n                            }\n                            callback.onTestComplete(that, result);\n                            return;\n                        }\n                    });\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n\n        return register;\n    }\n\n    private TestCase UnRegisterTemplateWithCallbackTestCase(String name, final String templateName) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase that = this;\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    unregisterTemplate(this, MobileServicePush, templateName, new UnregisterCallback() {\n\n                        @Override\n                        public void onUnregister(Exception exception) {\n                            if (exception != null) {\n                                callback.onTestComplete(that, createResultFromException(exception));\n                                return;\n                            }\n\n                            callback.onTestComplete(that, result);\n                            return;\n                        }\n                    });\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n\n        return register;\n    }\n\n    private TestCase UnRegisterAllNativeWithCallbackTestCase(String name) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase that = this;\n\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    final String gcmId = UUID.randomUUID().toString();\n\n                    unregisterAll(that, MobileServicePush, gcmId, new UnregisterCallback() {\n\n                        @Override\n                        public void onUnregister(Exception exception) {\n                            if (exception != null) {\n                                callback.onTestComplete(that, createResultFromException(exception));\n                                return;\n                            }\n                            callback.onTestComplete(that, result);\n                            return;\n                        }\n                    });\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n        // register.setExpectedExceptionClass(MobileServiceException.class);\n\n        return register;\n    }\n\n    private TestCase UnRegisterAllTemplateWithCallbackTestCase(String name, final String templateName) {\n        TestCase register = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                final TestCase that = this;\n\n                try {\n                    final MobileServicePush MobileServicePush = client.getPush();\n                    final TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(this);\n\n                    final String gcmId = UUID.randomUUID().toString();\n\n                    unregisterAll(that, MobileServicePush, gcmId, new UnregisterCallback() {\n\n                        @Override\n                        public void onUnregister(Exception exception) {\n                            if (exception != null) {\n                                callback.onTestComplete(that, createResultFromException(exception));\n                                return;\n                            }\n\n                            callback.onTestComplete(that, result);\n                            return;\n                        }\n                    });\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        register.setName(name);\n        // register.setExpectedExceptionClass(MobileServiceException.class);\n\n        return register;\n    }\n\n    private TestCase createNativePushTestWithRefresh(String testName, final String tag, String jsonPayload) {\n        final JsonElement orginalPayload = new JsonParser().parse(jsonPayload);\n\n        JsonObject newPayload;\n        if (orginalPayload.isJsonObject()) {\n            newPayload = orginalPayload.getAsJsonObject();\n        } else {\n            newPayload = new JsonObject();\n            newPayload.add(\"message\", orginalPayload);\n        }\n\n        final JsonObject payload = newPayload;\n\n        TestCase result = new TestCase(testName) {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n\n                    final MobileServicePush mobileServicePush = client.getPush();\n                    String[] tags = tag != null ? new String[]{tag} : null;\n\n                    unregisterAll(this, mobileServicePush, registrationId);\n\n                    removeStorageVersion();\n\n                    MobileServiceClient client2 = new MobileServiceClient(client);\n\n                    final MobileServicePush mobileServicePush2 = client2.getPush();\n\n                    register(this, mobileServicePush2, registrationId, tags);\n\n                    GCMMessageManager.instance.clearPushMessages();\n                    MobileServiceJsonTable table = client.getTable(tableName);\n                    JsonObject item = new JsonObject();\n                    item.addProperty(\"method\", \"send\");\n                    item.addProperty(\"tag\", tag);\n                    JsonObject sentPayload = new JsonObject();\n                    sentPayload.add(\"data\", payload);\n                    item.add(\"payload\", sentPayload);\n                    item.addProperty(\"usingNH\", true);\n\n                    JsonObject jsonObject = table.insert(item).get();\n\n                    this.log(\"OnCompleted: \" + jsonObject.toString());\n                    TestExecutionCallback nativeUnregisterTestExecutionCallback = getNativeUnregisterTestExecutionCallback(client, tag, payload, callback);\n                    GCMMessageManager.instance.waitForPushMessage(20000, GCMMessageHelper.getPushCallback(this, payload, nativeUnregisterTestExecutionCallback));\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        result.setName(testName);\n\n        return result;\n    }\n\n    private void removeStorageVersion() {\n\n        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.getInstance());\n\n        Editor editor = sharedPreferences.edit();\n        editor.remove(\"__NH_STORAGE_VERSION\");\n\n        editor.commit();\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/LoginTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.UserAuthenticationCallback;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback;\nimport com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.LogServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Random;\n\npublic class LoginTests extends TestGroup {\n\n    protected static final String APPLICATION_PERMISSION_TABLE_NAME = \"application\";\n    protected static final String USER_PERMISSION_TABLE_NAME = \"authenticated\";\n    protected static final String ADMIN_PERMISSION_TABLE_NAME = \"admin\";\n\n    private static JsonObject lastUserIdentityObject;\n\n    boolean isNetBackend;\n\n    public LoginTests(boolean isNetBackend) {\n        super(\"Login tests\");\n\n        this.isNetBackend = isNetBackend;\n\n        this.addTest(createLogoutTest());\n        this.addTest(createCRUDTest(APPLICATION_PERMISSION_TABLE_NAME, null, TablePermission.Application, false));\n        this.addTest(createCRUDTest(USER_PERMISSION_TABLE_NAME, null, TablePermission.User, false));\n        this.addTest(createCRUDTest(ADMIN_PERMISSION_TABLE_NAME, null, TablePermission.Admin, false));\n\n        int indexOfStartAuthenticationTests = this.getTestCases().size();\n\n        ArrayList<MobileServiceAuthenticationProvider> providersWithRecycledTokenSupport = new ArrayList<MobileServiceAuthenticationProvider>();\n        providersWithRecycledTokenSupport.add(MobileServiceAuthenticationProvider.Facebook);\n        // Known bug - Drop login via Google token until Google client flow is\n        // reintroduced\n        // providersWithRecycledTokenSupport.add(MobileServiceAuthenticationProvider.Google);\n\n        for (MobileServiceAuthenticationProvider provider : MobileServiceAuthenticationProvider.values()) {\n            this.addTest(createLogoutTest());\n            this.addTest(createLoginTest(provider));\n            this.addTest(createCRUDTest(APPLICATION_PERMISSION_TABLE_NAME, provider, TablePermission.Application, true));\n            this.addTest(createCRUDTest(USER_PERMISSION_TABLE_NAME, provider, TablePermission.User, true));\n            this.addTest(createCRUDTest(ADMIN_PERMISSION_TABLE_NAME, provider, TablePermission.Admin, true));\n\n            if (!isNetBackend) {\n                if (providersWithRecycledTokenSupport.contains(provider)) {\n                    this.addTest(createLogoutTest());\n                    this.addTest(createClientSideLoginTest(provider));\n                    this.addTest(createCRUDTest(USER_PERMISSION_TABLE_NAME, provider, TablePermission.User, true));\n                }\n            }\n        }\n\n        // this.addTest(createLogoutTest());\n        // this.addTest(createLoginWithGoogleAccountTest(true, null));\n        //\n        // this.addTest(createLogoutTest());\n        // this.addTest(createLoginWithGoogleAccountTest(true,\n        // MobileServiceClient.GOOGLE_USER_INFO_SCOPE +\n        // \" https://www.googleapis.com/auth/userinfo.email\"));\n        //\n        // this.addTest(createLogoutTest());\n        // this.addTest(createLoginWithGoogleAccountTest(false, null));\n\n        // With Callback\n        this.addTest(createLogoutWithCallbackTest());\n        this.addTest(createLoginWithCallbackTest(MobileServiceAuthenticationProvider.Google));\n        this.addTest(createCRUDWithCallbackTest(USER_PERMISSION_TABLE_NAME, MobileServiceAuthenticationProvider.Google, TablePermission.User, true));\n        this.addTest(createLogoutWithCallbackTest());\n        this.addTest(createLoginWithCallbackTest(MobileServiceAuthenticationProvider.Facebook));\n        this.addTest(createCRUDWithCallbackTest(USER_PERMISSION_TABLE_NAME, MobileServiceAuthenticationProvider.Facebook, TablePermission.User, true));\n        this.addTest(createLogoutWithCallbackTest());\n        if (!isNetBackend) {\n            this.addTest(createClientSideLoginWithCallbackTest(providersWithRecycledTokenSupport.get(0)));\n        }\n\n        this.addTest(createLogoutWithCallbackTest());\n        // this.addTest(createLoginWithGoogleAccountWithCallbackTest(false,\n        // null));\n\n        List<TestCase> testCases = this.getTestCases();\n        for (int i = indexOfStartAuthenticationTests; i < testCases.size(); i++) {\n            testCases.get(i).setCanRunUnattended(false);\n        }\n    }\n\n    public static TestCase createLoginTest(final MobileServiceAuthenticationProvider provider) {\n        TestCase test = new TestCase(\"Login with \" + provider.toString()) {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n                    final TestCase testCase = this;\n\n                    long seed = new Date().getTime();\n                    final Random rndGen = new Random(seed);\n\n                    boolean useEnumOverload = rndGen.nextBoolean();\n                    if (true) {\n                        log(\"Calling the overload MobileServiceClient.login(MobileServiceAuthenticationProvider, UserAuthenticationCallback)\");\n\n                        TestResult result = new TestResult();\n                        String userName;\n\n                        try {\n\n                            HashMap<String, String> parameters = null;\n                            if (provider == MobileServiceAuthenticationProvider.Facebook) {\n                                parameters = new HashMap<>();\n\n                                parameters.put(\"display\", \"popup\");\n                            }\n\n                            MobileServiceUser user = client.login(provider, parameters).get();\n                            userName = user.getUserId();\n\n                        } catch (Exception exception) {\n                            userName = \"NULL\";\n                            log(\"Error during login, user == null\");\n                            log(\"Exception: \" + exception.toString());\n\n                        }\n\n                        log(\"Logged in as \" + userName);\n\n                        MobileServiceUser currentUser = client.getCurrentUser();\n\n                        if (currentUser == null) {\n                            result.setStatus(TestStatus.Failed);\n                        } else {\n                            result.setStatus(TestStatus.Passed);\n                        }\n                        result.setTestCase(testCase);\n\n                        callback.onTestComplete(testCase, result);\n\n                    } else {\n                        log(\"Calling the overload MobileServiceClient.login(String, UserAuthenticationCallback)\");\n\n                        TestResult result = new TestResult();\n                        String userName;\n\n                        try {\n                            MobileServiceUser user = client.login(provider.toString()).get();\n                            userName = user.getUserId();\n\n                        } catch (Exception exception) {\n                            userName = \"NULL\";\n                            log(\"Error during login, user == null\");\n                            log(\"Exception: \" + exception.toString());\n\n                        }\n\n                        log(\"Logged in as \" + userName);\n\n                        MobileServiceUser currentUser = client.getCurrentUser();\n\n                        if (currentUser == null) {\n                            result.setStatus(TestStatus.Failed);\n                        } else {\n                            result.setStatus(TestStatus.Passed);\n                        }\n\n                        result.setTestCase(testCase);\n\n                        callback.onTestComplete(testCase, result);\n\n                    }\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        return test;\n    }\n\n    public static TestCase createLogoutTest() {\n\n        TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n\n                client.logout();\n                log(\"Logged out\");\n                TestResult result = new TestResult();\n                result.setTestCase(this);\n                result.setStatus(client.getCurrentUser() == null ? TestStatus.Passed : TestStatus.Failed);\n\n                callback.onTestComplete(this, result);\n            }\n        };\n\n        test.setName(\"Logout\");\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public static TestCase createLoginWithCallbackTest(final MobileServiceAuthenticationProvider provider) {\n        TestCase test = new TestCase(\"With Callback - Login with \" + provider.toString()) {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase testCase = this;\n                long seed = new Date().getTime();\n                final Random rndGen = new Random(seed);\n\n                UserAuthenticationCallback authCallback = new UserAuthenticationCallback() {\n\n                    @Override\n                    public void onCompleted(MobileServiceUser user, Exception exception, ServiceFilterResponse response) {\n                        TestResult result = new TestResult();\n                        String userName;\n                        if (user == null) {\n                            log(\"Error during login, user == null\");\n                            if (exception != null) {\n                                log(\"Exception: \" + exception.toString());\n                            }\n\n                            userName = \"NULL\";\n                        } else {\n                            userName = user.getUserId();\n                        }\n\n                        log(\"Logged in as \" + userName);\n                        result.setStatus(client.getCurrentUser() != null ? TestStatus.Passed : TestStatus.Failed);\n                        result.setTestCase(testCase);\n\n                        callback.onTestComplete(testCase, result);\n                    }\n                };\n\n                boolean useEnumOverload = rndGen.nextBoolean();\n                if (useEnumOverload) {\n                    log(\"Calling the overload MobileServiceClient.login(MobileServiceAuthenticationProvider, UserAuthenticationCallback)\");\n                    client.login(provider, authCallback);\n                } else {\n                    log(\"Calling the overload MobileServiceClient.login(String, UserAuthenticationCallback)\");\n                    client.login(provider.toString(), authCallback);\n                }\n            }\n        };\n\n        return test;\n    }\n\n    public static TestCase createLogoutWithCallbackTest() {\n\n        TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n\n                client.logout();\n                log(\"Logged out\");\n                TestResult result = new TestResult();\n                result.setTestCase(this);\n                result.setStatus(client.getCurrentUser() == null ? TestStatus.Passed : TestStatus.Failed);\n\n                callback.onTestComplete(this, result);\n            }\n        };\n\n        test.setName(\"With Callback - Logout\");\n\n        return test;\n    }\n\n    private TestCase createClientSideLoginTest(final MobileServiceAuthenticationProvider provider) {\n        TestCase test = new TestCase(\"Login via token for \" + provider.toString()) {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                final TestCase testCase = this;\n                long seed = new Date().getTime();\n                final Random rndGen = new Random(seed);\n\n                if (lastUserIdentityObject == null) {\n                    log(\"Last identity is null. Cannot run this test.\");\n                    TestResult testResult = new TestResult();\n                    testResult.setTestCase(testCase);\n                    testResult.setStatus(TestStatus.Failed);\n                    callback.onTestComplete(testCase, testResult);\n                    return;\n                }\n\n                JsonObject lastIdentity = lastUserIdentityObject;\n                lastUserIdentityObject = null;\n                JsonObject providerIdentity = new JsonParser().parse(lastIdentity.get(\"Identities\").getAsString()).getAsJsonObject()\n                        .getAsJsonObject(provider.toString().toLowerCase(Locale.US));\n                if (providerIdentity == null) {\n                    log(\"Cannot find identity for specified provider. Cannot run this test.\");\n                    TestResult testResult = new TestResult();\n                    testResult.setTestCase(testCase);\n                    testResult.setStatus(TestStatus.Failed);\n                    callback.onTestComplete(testCase, testResult);\n                    return;\n                }\n\n                JsonObject token = new JsonObject();\n                token.addProperty(\"access_token\", providerIdentity.get(\"accessToken\").getAsString());\n\n                boolean useEnumOverload = rndGen.nextBoolean();\n                if (useEnumOverload) {\n                    log(\"Calling the overload MobileServiceClient.login(MobileServiceAuthenticationProvider, JsonObject, UserAuthenticationCallback)\");\n\n                    TestResult testResult = new TestResult();\n                    testResult.setTestCase(testCase);\n                    try {\n\n                        MobileServiceUser user = client.login(provider, token).get();\n\n                        log(\"Logged in as \" + user.getUserId());\n                        testResult.setStatus(TestStatus.Passed);\n                    } catch (Exception exception) {\n                        log(\"Exception during login: \" + exception.toString());\n                        testResult.setStatus(TestStatus.Failed);\n                    }\n\n                    callback.onTestComplete(testCase, testResult);\n\n                } else {\n                    log(\"Calling the overload MobileServiceClient.login(String, JsonObject, UserAuthenticationCallback)\");\n\n                    TestResult testResult = new TestResult();\n                    testResult.setTestCase(testCase);\n                    try {\n\n                        MobileServiceUser user = client.login(provider.toString(), token).get();\n\n                        log(\"Logged in as \" + user.getUserId());\n                        testResult.setStatus(TestStatus.Passed);\n                    } catch (Exception exception) {\n                        log(\"Exception during login: \" + exception.toString());\n                        testResult.setStatus(TestStatus.Failed);\n                    }\n\n                    callback.onTestComplete(testCase, testResult);\n                }\n            }\n        };\n\n        return test;\n    }\n\n    private TestCase createCRUDTest(final String tableName, final MobileServiceAuthenticationProvider provider, final TablePermission tableType,\n                                    final boolean userIsAuthenticated) {\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(this);\n                final TestCase testCase = this;\n\n                MobileServiceClient logClient = client.withFilter(new LogServiceFilter());\n\n                final MobileServiceJsonTable table = logClient.getTable(tableName);\n                final boolean crudShouldWork = tableType == TablePermission.Public || tableType == TablePermission.Application\n                        || (tableType == TablePermission.User && userIsAuthenticated);\n                final JsonObject item = new JsonObject();\n                item.addProperty(\"name\", \"John Doe\");\n                log(\"insert item\");\n\n                String id = \"1\";\n\n                try {\n\n                    JsonObject jsonEntityInsert = table.insert(item).get();\n\n                    id = jsonEntityInsert.get(\"id\").getAsString();\n\n                    item.addProperty(\"id\", id);\n                } catch (Exception exception) {\n                    if (!validateExecution(crudShouldWork, exception, result)) {\n                        callback.onTestComplete(testCase, result);\n                        return;\n                    }\n                }\n\n                item.addProperty(\"name\", \"Jane Doe\");\n                log(\"update item\");\n\n                try {\n                    table.update(item).get();\n                } catch (Exception exception) {\n                    if (!validateExecution(crudShouldWork, exception, result)) {\n                        callback.onTestComplete(testCase, result);\n                        return;\n                    }\n                }\n\n                log(\"lookup item\");\n\n                try {\n\n                    JsonElement jsonEntityLookUp = table.lookUp(item.get(\"id\").getAsString()).get();\n                    if (userIsAuthenticated && tableType == TablePermission.User) {\n                        lastUserIdentityObject = jsonEntityLookUp.getAsJsonObject();\n                    }\n\n                    log(\"delete item\");\n\n                } catch (Exception exception) {\n                    if (!validateExecution(crudShouldWork, exception, result)) {\n                        callback.onTestComplete(testCase, result);\n                        return;\n                    }\n                }\n\n                try {\n                    table.delete(item.get(\"id\").getAsString()).get();\n                } catch (Exception exception) {\n                    if (!validateExecution(crudShouldWork, exception, result)) {\n                        callback.onTestComplete(testCase, result);\n                        return;\n                    }\n                }\n\n                callback.onTestComplete(testCase, result);\n\n                return;\n            }\n\n            private boolean validateExecution(boolean crudShouldWork, Exception exception, TestResult result) {\n                if (crudShouldWork && exception != null || !crudShouldWork && exception == null) {\n                    createResultFromException(result, exception);\n                    result.setStatus(TestStatus.Failed);\n                    return false;\n                } else {\n                    return true;\n                }\n            }\n        };\n\n        String testKind;\n        if (userIsAuthenticated) {\n            testKind = \"auth by \" + provider.toString();\n        } else {\n            testKind = \"unauthenticated\";\n        }\n\n        String testName = String.format(Locale.getDefault(), \"CRUD, %s, table with %s permissions\", testKind, tableType.toString());\n        test.setName(testName);\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase createClientSideLoginWithCallbackTest(final MobileServiceAuthenticationProvider provider) {\n        TestCase test = new TestCase(\"With Callback - Login via token for \" + provider.toString()) {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                final TestCase testCase = this;\n                long seed = new Date().getTime();\n                final Random rndGen = new Random(seed);\n\n                if (lastUserIdentityObject == null) {\n                    log(\"Last identity is null. Cannot run this test.\");\n                    TestResult testResult = new TestResult();\n                    testResult.setTestCase(testCase);\n                    testResult.setStatus(TestStatus.Failed);\n                    callback.onTestComplete(testCase, testResult);\n                    return;\n                }\n\n                JsonObject lastIdentity = lastUserIdentityObject;\n                lastUserIdentityObject = null;\n                JsonObject providerIdentity = lastIdentity.getAsJsonObject(provider.toString().toLowerCase(Locale.US));\n                if (providerIdentity == null) {\n                    log(\"Cannot find identity for specified provider. Cannot run this test.\");\n                    TestResult testResult = new TestResult();\n                    testResult.setTestCase(testCase);\n                    testResult.setStatus(TestStatus.Failed);\n                    callback.onTestComplete(testCase, testResult);\n                    return;\n                }\n\n                JsonObject token = new JsonObject();\n                token.addProperty(\"access_token\", providerIdentity.get(\"accessToken\").getAsString());\n                UserAuthenticationCallback authCallback = new UserAuthenticationCallback() {\n\n                    @Override\n                    public void onCompleted(MobileServiceUser user, Exception exception, ServiceFilterResponse response) {\n                        TestResult testResult = new TestResult();\n                        testResult.setTestCase(testCase);\n                        if (exception != null) {\n                            log(\"Exception during login: \" + exception.toString());\n                            testResult.setStatus(TestStatus.Failed);\n                        } else {\n                            log(\"Logged in as \" + user.getUserId());\n                            testResult.setStatus(TestStatus.Passed);\n                        }\n\n                        callback.onTestComplete(testCase, testResult);\n                    }\n                };\n                boolean useEnumOverload = rndGen.nextBoolean();\n                if (useEnumOverload) {\n                    log(\"Calling the overload MobileServiceClient.login(MobileServiceAuthenticationProvider, JsonObject, UserAuthenticationCallback)\");\n                    client.login(provider, token, authCallback);\n                } else {\n                    log(\"Calling the overload MobileServiceClient.login(String, JsonObject, UserAuthenticationCallback)\");\n                    client.login(provider.toString(), token, authCallback);\n                }\n            }\n        };\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase createCRUDWithCallbackTest(final String tableName, final MobileServiceAuthenticationProvider provider, final TablePermission tableType,\n                                                final boolean userIsAuthenticated) {\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(this);\n                final TestCase testCase = this;\n\n                MobileServiceClient logClient = client.withFilter(new LogServiceFilter());\n\n                final MobileServiceJsonTable table = logClient.getTable(tableName);\n                final boolean crudShouldWork = tableType == TablePermission.Public || tableType == TablePermission.Application\n                        || (tableType == TablePermission.User && userIsAuthenticated);\n                final JsonObject item = new JsonObject();\n                item.addProperty(\"name\", \"John Doe\");\n                log(\"insert item\");\n                table.insert(item, new TableJsonOperationCallback() {\n\n                    @Override\n                    public void onCompleted(JsonObject jsonEntity, Exception exception, ServiceFilterResponse response) {\n                        String id = \"1\";\n                        if (exception == null) {\n                            id = jsonEntity.get(\"id\").getAsString();\n                        }\n\n                        item.addProperty(\"id\", id);\n                        if (!validateExecution(crudShouldWork, exception, result)) {\n                            callback.onTestComplete(testCase, result);\n                            return;\n                        }\n\n                        item.addProperty(\"name\", \"Jane Doe\");\n                        log(\"update item\");\n                        table.update(item, new TableJsonOperationCallback() {\n\n                            @Override\n                            public void onCompleted(JsonObject jsonEntity, Exception exception, ServiceFilterResponse response) {\n\n                                if (!validateExecution(crudShouldWork, exception, result)) {\n                                    callback.onTestComplete(testCase, result);\n                                    return;\n                                }\n\n                                log(\"lookup item\");\n                                table.lookUp(item.get(\"id\").getAsString(), new TableJsonOperationCallback() {\n\n                                    @Override\n                                    public void onCompleted(JsonObject jsonEntity, Exception exception, ServiceFilterResponse response) {\n                                        if (!validateExecution(crudShouldWork, exception, result)) {\n                                            callback.onTestComplete(testCase, result);\n                                            return;\n                                        }\n\n                                        if (isNetBackend) {\n                                            if (userIsAuthenticated && tableType == TablePermission.User) {\n\n                                                JsonArray jsonIdentities = jsonEntity.get(\"identities\").getAsJsonArray();\n\n                                                if (jsonIdentities.size() == 0) {\n                                                    lastUserIdentityObject = null;\n                                                } else {\n                                                    lastUserIdentityObject = jsonIdentities.get(jsonIdentities.size() - 1).getAsJsonObject();\n                                                }\n                                            }\n                                        } else {\n                                            if (userIsAuthenticated && tableType == TablePermission.User) {\n                                                lastUserIdentityObject = new JsonParser().parse(jsonEntity.get(\"Identities\").getAsString()).getAsJsonObject();\n                                            }\n                                        }\n\n                                        log(\"delete item\");\n                                        table.delete(item.get(\"id\").getAsString(), new TableDeleteCallback() {\n\n                                            @Override\n                                            public void onCompleted(Exception exception, ServiceFilterResponse response) {\n                                                validateExecution(crudShouldWork, exception, result);\n\n                                                callback.onTestComplete(testCase, result);\n                                                return;\n                                            }\n                                        });\n                                    }\n                                });\n                            }\n                        });\n                    }\n                });\n            }\n\n            private boolean validateExecution(boolean crudShouldWork, Exception exception, TestResult result) {\n                if (crudShouldWork && exception != null || !crudShouldWork && exception == null) {\n                    createResultFromException(result, exception);\n                    result.setStatus(TestStatus.Failed);\n                    return false;\n                } else {\n                    return true;\n                }\n            }\n        };\n\n        String testKind;\n        if (userIsAuthenticated) {\n            testKind = \"auth by \" + provider.toString();\n        } else {\n            testKind = \"unauthenticated\";\n        }\n\n        String testName = String.format(Locale.getDefault(), \"CRUD With Callback, %s, table with %s permissions\", testKind, tableType.toString());\n        test.setName(testName);\n\n        return test;\n    }\n\n    enum TablePermission {\n        Public, Application, User, Admin\n    }\n\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/MiscTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.FutureCallback;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\nimport com.microsoft.windowsazure.mobileservices.table.query.ExecutableJsonQuery;\nimport com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.ExpectedValueException;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.FroyoAndroidHttpClientFactory;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.IntIdRoundTripTableElement;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.ParamsTestTableItem;\n\nimport org.apache.http.Header;\nimport org.apache.http.client.methods.HttpGet;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Random;\nimport java.util.UUID;\n\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.field;\n\npublic class MiscTests extends TestGroup {\n\n    protected static final String ROUND_TRIP_TABLE_NAME = \"intIdRoundTripTable\";\n    protected static final String PARAM_TEST_TABLE_NAME = \"ParamsTestTable\";\n    private static final String APP_API_NAME = \"applicationPermission\";\n\n    public MiscTests() {\n        super(\"Misc tests\");\n\n        this.addTest(createFilterTestWithMultipleRequests(true));\n        this.addTest(createFilterTestWithMultipleRequests(false));\n\n        TestCase withFilterDoesNotChangeTheClient = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestResult testResult = new TestResult();\n                testResult.setTestCase(this);\n                testResult.setStatus(TestStatus.Passed);\n                final TestCase testCase = this;\n                client.withFilter(new ServiceFilter() {\n\n                    @Override\n                    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request,\n                                                                                 NextServiceFilterCallback nextServiceFilterCallback) {\n                        log(\"executed filter triggering failure\");\n                        testResult.setStatus(TestStatus.Failed);\n\n                        return nextServiceFilterCallback.onNext(request);\n                    }\n                });\n\n                log(\"execute query\");\n\n                try {\n\n                    client.getTable(ROUND_TRIP_TABLE_NAME).top(5).execute().get();\n                } catch (Exception exception) {\n                    createResultFromException(testResult, exception);\n                }\n\n                if (callback != null)\n                    callback.onTestComplete(testCase, testResult);\n            }\n\n        };\n        withFilterDoesNotChangeTheClient.setName(\"Verify that 'withFilter' does not change the client\");\n        this.addTest(withFilterDoesNotChangeTheClient);\n\n        TestCase bypassTest = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                final TestCase testCase = this;\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(this);\n\n                final String json = \"{'id':1,'name':'John Doe','age':33}\".replace('\\'', '\\\"');\n                MobileServiceClient filtered = client.withFilter(new ServiceFilter() {\n\n                    @Override\n                    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request,\n                                                                                 NextServiceFilterCallback nextServiceFilterCallback) {\n\n                        final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                        // ListenableFuture<ServiceFilterResponse> notifyFuture\n                        // = nextServiceFilterCallback.onNext(request);\n                        //\n                        // Futures.addCallback(notifyFuture, new\n                        // FutureCallback<ServiceFilterResponse>() {\n                        //\n                        // @Override\n                        // public void onFailure(Throwable exception) {\n                        // resultFuture.setException(exception);\n                        // }\n                        //\n                        // @Override\n                        // public void onSuccess(ServiceFilterResponse v) {\n                        resultFuture.set(new MockResponse(json, 201));\n                        // return;\n                        // }\n                        // });\n\n                        return resultFuture;\n                    }\n                });\n\n                log(\"insert item\");\n\n                try {\n\n                    JsonObject jsonEntity = filtered.getTable(\"fakeTable\").insert(new JsonObject()).get();\n\n                    JsonObject expectedObject = new JsonParser().parse(json).getAsJsonObject();\n                    log(\"verify items are equal\");\n                    if (!Util.compareJson(expectedObject, jsonEntity)) {\n                        createResultFromException(result, new ExpectedValueException(expectedObject, jsonEntity));\n                    }\n                } catch (Exception exception) {\n\n                    createResultFromException(result, exception);\n                } finally {\n                    if (callback != null)\n                        callback.onTestComplete(testCase, result);\n                }\n            }\n        };\n\n        bypassTest.setName(\"Filter to bypass service\");\n        this.addTest(bypassTest);\n\n        this.addTest(createParameterPassingTest(true));\n        this.addTest(createParameterPassingTest(false));\n\n        this.addTest(createHttpContentApiTest());\n\n        this.addTest(createFroyoFixedRequestTest());\n\n        this.addTest(new TestCase(\"User-Agent validation\") {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase testCase = this;\n                final TestResult testResult = new TestResult();\n                testResult.setTestCase(testCase);\n                testResult.setStatus(TestStatus.Failed);\n                client = client.withFilter(new ServiceFilter() {\n\n                    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request,\n                                                                                 NextServiceFilterCallback nextServiceFilterCallback) {\n\n                        final SettableFuture<ServiceFilterResponse> resultFuture = SettableFuture.create();\n\n                        Header[] headers = request.getHeaders();\n                        for (Header reqHeader : headers) {\n                            if (reqHeader.getName() == \"User-Agent\") {\n                                String userAgent = reqHeader.getValue();\n                                log(\"User-Agent: \" + userAgent);\n                                testResult.setStatus(TestStatus.Passed);\n                                String clientVersion = userAgent;\n                                if (clientVersion.endsWith(\")\")) {\n                                    clientVersion = clientVersion.substring(0, clientVersion.length() - 1);\n                                }\n                                int indexOfEquals = clientVersion.lastIndexOf('=');\n                                if (indexOfEquals >= 0) {\n                                    clientVersion = clientVersion.substring(indexOfEquals + 1);\n                                    Util.getGlobalTestParameters().put(ClientVersionKey, clientVersion);\n                                }\n                            }\n                        }\n\n                        ListenableFuture<ServiceFilterResponse> notifyFuture = nextServiceFilterCallback.onNext(request);\n\n                        Futures.addCallback(notifyFuture, new FutureCallback<ServiceFilterResponse>() {\n\n                            @Override\n                            public void onFailure(Throwable exception) {\n                            }\n\n                            @Override\n                            public void onSuccess(ServiceFilterResponse response) {\n                                if (response != null) {\n                                    Header[] respHeaders = response.getHeaders();\n                                    for (Header header : respHeaders) {\n                                        if (header.getName().equalsIgnoreCase(\"x-zumo-version\")) {\n                                            String runtimeVersion = header.getValue();\n                                            Util.getGlobalTestParameters().put(ServerVersionKey, runtimeVersion);\n                                        }\n                                    }\n                                }\n\n                                resultFuture.set(response);\n\n                            }\n                        });\n\n                        return resultFuture;\n                    }\n                });\n\n                log(\"execute query to activate filter\");\n\n                try {\n\n                    client.getTable(ROUND_TRIP_TABLE_NAME).top(5).execute().get();\n                } catch (Exception exception) {\n                    createResultFromException(testResult, exception);\n                } finally {\n\n                    if (callback != null)\n                        callback.onTestComplete(testCase, testResult);\n                }\n            }\n        });\n    }\n\n    private TestCase createFroyoFixedRequestTest() {\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestResult result = new TestResult();\n                result.setTestCase(this);\n                result.setStatus(TestStatus.Passed);\n                final TestCase testCase = this;\n\n                // duplicate the client\n                MobileServiceClient froyoClient = new MobileServiceClient(client);\n\n                log(\"add custom AndroidHttpClientFactory with Froyo support\");\n                froyoClient.setAndroidHttpClientFactory(new FroyoAndroidHttpClientFactory());\n\n                MobileServiceTable<IntIdRoundTripTableElement> table = froyoClient.getTable(ROUND_TRIP_TABLE_NAME, IntIdRoundTripTableElement.class);\n\n                try {\n\n                    table.where().field(\"id\").eq(\"1\").execute().get();\n                } catch (Exception exception) {\n                    createResultFromException(result, exception);\n                } finally {\n\n                    if (callback != null)\n                        callback.onTestComplete(testCase, result);\n                }\n            }\n        };\n\n        test.setName(\"Simple request on Froyo\");\n        return test;\n    }\n\n    private TestCase createParameterPassingTest(final boolean typed) {\n        TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestResult result = new TestResult();\n                result.setTestCase(this);\n                result.setStatus(TestStatus.Passed);\n                final TestCase testCase = this;\n\n                final HashMap<String, String> params = createParams();\n\n                final JsonObject expectedParameters = new JsonObject();\n\n                for (String key : params.keySet()) {\n                    expectedParameters.addProperty(key, params.get(key));\n                }\n\n                params.put(\"operation\", \"read\");\n                expectedParameters.addProperty(\"operation\", \"read\");\n\n                log(\"execute query\");\n                if (typed) {\n                    MobileServiceTable<ParamsTestTableItem> table = client.getTable(PARAM_TEST_TABLE_NAME, ParamsTestTableItem.class);\n                    ExecutableQuery<ParamsTestTableItem> query = table.where();\n                    addParametersToQuery(query, params);\n\n                    try {\n                        List<ParamsTestTableItem> elements = query.execute().get();\n\n                        log(\"verify size = 0\");\n                        if (elements.size() != 0) {\n                            JsonObject actualParameters = elements.get(0).getParameters();\n\n                            log(\"verify items are equal\");\n                            if (!Util.compareJson(expectedParameters, actualParameters)) {\n                                createResultFromException(result, new ExpectedValueException(expectedParameters, actualParameters));\n                            }\n\n                            if (callback != null)\n                                callback.onTestComplete(testCase, result);\n                        } else {\n                            createResultFromException(result, new ExpectedValueException(\"SIZE > 0\", \"SIZE == 0\"));\n                            if (callback != null)\n                                callback.onTestComplete(testCase, result);\n                        }\n\n                    } catch (Exception exception) {\n\n                        createResultFromException(result, exception);\n                    } finally {\n                        if (callback != null)\n                            callback.onTestComplete(testCase, result);\n                    }\n                } else {\n                    MobileServiceJsonTable table = client.getTable(PARAM_TEST_TABLE_NAME);\n                    ExecutableJsonQuery query = table.where();\n                    addParametersToQuery(query, params);\n\n                    try {\n                        JsonElement elements = query.execute().get();\n\n                        log(\"verify result is JsonArray with at least one element\");\n                        if (elements.isJsonArray() && (elements.getAsJsonArray()).size() != 0) {\n                            try {\n                                log(\"get parameters object and recreate json\");\n                                JsonObject actualObject = elements.getAsJsonArray().get(0).getAsJsonObject();\n                                actualObject.add(\"parameters\", new JsonParser().parse(actualObject.get(\"parameters\").getAsString()));\n                                JsonObject expectedObject = new JsonObject();\n                                expectedObject.addProperty(\"id\", 1);\n                                expectedObject.add(\"parameters\", expectedParameters);\n\n                                log(\"verify items are equal\");\n                                if (!Util.compareJson(expectedObject, actualObject)) {\n                                    createResultFromException(result, new ExpectedValueException(expectedObject, actualObject));\n                                }\n                            } catch (Exception e) {\n                                createResultFromException(result, e);\n                            }\n\n                        }\n                    } catch (Exception exception) {\n                        createResultFromException(result, new ExpectedValueException(\"JSON ARRAY WITH ELEMENTS\", \"EMPTY RESULT\"));\n                    } finally {\n                        if (callback != null)\n                            callback.onTestComplete(testCase, result);\n                    }\n\n                }\n            }\n\n            private void addParametersToQuery(Query query, HashMap<String, String> params) {\n                for (String key : params.keySet()) {\n                    query.parameter(key, params.get(key));\n                }\n            }\n        };\n\n        test.setName(\"Parameter passing test - tables (\" + (typed ? \"typed\" : \"untyped\") + \")\");\n        return test;\n    }\n\n    private HashMap<String, String> createParams() {\n        HashMap<String, String> params = new HashMap<String, String>();\n        params.put(\"item\", \"simple\");\n        params.put(\"empty\", \"\");\n        params.put(\"spaces\", \"with spaces\");\n        params.put(\"specialChars\", \"`!@#$%^&*()-=[]\\\\;',./~_+{}|:\\\"<>?\");\n        params.put(\"latin\", \"ãéìôü ÇñÑ\");\n        params.put(\"arabic\", \"الكتاب على الطاولة\");\n        params.put(\"chinese\", \"这本书在桌子上\");\n        params.put(\"japanese\", \"本は机の上に\");\n        params.put(\"hebrew\", \"הספר הוא על השולחן\");\n        params.put(\"name+with special&chars\", \"should just work\");\n        return params;\n    }\n\n    private TestCase createFilterTestWithMultipleRequests(final boolean typed) {\n        TestCase test = new TestCase() {\n\n            MobileServiceJsonTable mTable;\n\n            TestExecutionCallback mCallback;\n            int mNumberOfRequest;\n            String mUUID;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                Random rndGen = new Random();\n\n                mNumberOfRequest = rndGen.nextInt(3) + 3;\n                log(\"number of requests: \" + mNumberOfRequest);\n                MobileServiceClient filteredClient = client.withFilter(new MultipleRequestFilter(mNumberOfRequest));\n\n                mTable = client.getTable(ROUND_TRIP_TABLE_NAME);\n\n                mCallback = callback;\n\n                mUUID = UUID.randomUUID().toString();\n                log(\"insert item \" + mUUID);\n                if (typed) {\n                    MobileServiceTable<IntIdRoundTripTableElement> filteredClientTable = filteredClient.getTable(ROUND_TRIP_TABLE_NAME, IntIdRoundTripTableElement.class);\n\n                    IntIdRoundTripTableElement item = new IntIdRoundTripTableElement();\n                    item.name = mUUID;\n\n                    try {\n                        filteredClientTable.insert(item).get();\n                        requestCompleted(null);\n                    } catch (Exception exception) {\n                        requestCompleted(exception);\n                    }\n                } else {\n                    MobileServiceJsonTable filteredClientTable = filteredClient.getTable(ROUND_TRIP_TABLE_NAME);\n\n                    JsonObject item = new JsonObject();\n                    item.addProperty(\"name\", mUUID);\n\n                    try {\n                        filteredClientTable.insert(item).get();\n                        requestCompleted(null);\n                    } catch (Exception exception) {\n                        requestCompleted(exception);\n                    }\n                }\n            }\n\n            private void requestCompleted(Exception exception) {// ,\n                // ServiceFilterResponse\n                // response) {\n                final TestResult testResult = new TestResult();\n                testResult.setTestCase(this);\n                testResult.setStatus(TestStatus.Passed);\n\n                if (exception != null) {\n                    createResultFromException(testResult, exception);\n                    if (mCallback != null)\n                        mCallback.onTestComplete(this, testResult);\n                    return;\n                }\n\n                final TestCase testCase = this;\n                log(\"retrieve the original item\");\n\n                try {\n\n                    JsonElement result = mTable.where(field(\"name\").eq(mUUID)).select(\"name\", \"id\").execute().get();\n\n                    log(\"verify that there are \" + mNumberOfRequest + \" elements in the JsonArray\");\n\n                    if (!result.isJsonArray()) {\n                        createResultFromException(testResult, new ExpectedValueException(\"JSON ARRAY\", result.toString()));\n                    } else if (result.getAsJsonArray().size() != mNumberOfRequest) {\n                        createResultFromException(testResult,\n                                new ExpectedValueException(mNumberOfRequest + \" Times\", result.getAsJsonArray().size() + \" Times\"));\n                    }\n\n                    if (testResult.getStatus() == TestStatus.Failed) {\n                        if (mCallback != null)\n                            mCallback.onTestComplete(testCase, testResult);\n                        return;\n                    }\n\n                    JsonArray jsonArray = result.getAsJsonArray();\n                    for (int i = 0; i < jsonArray.size(); i++) {\n                        final boolean doCallback = i == jsonArray.size() - 1;\n                        log(\"delete item \" + jsonArray.get(i));\n\n                        try {\n                            mTable.delete(jsonArray.get(i).getAsJsonObject()).get();\n\n                        } catch (Exception exception2) {\n                            createResultFromException(testResult, exception2);\n                        } finally {\n                            if (doCallback) {\n                                if (mCallback != null)\n                                    mCallback.onTestComplete(testCase, testResult);\n                            }\n                        }\n                    }\n                } catch (Exception exception3) {\n                    createResultFromException(testResult, exception3);\n\n                    if (mCallback != null)\n                        mCallback.onTestComplete(testCase, testResult);\n                    return;\n                }\n            }\n        };\n\n        String name = String.format(Locale.getDefault(), \"Filter which maps one requests to many - %s client\", typed ? \"typed\" : \"untyped\");\n        test.setName(name);\n\n        return test;\n    }\n\n    private TestCase createHttpContentApiTest() {\n        String name = \"Use \\\"text/plain\\\" Content and \\\"identity\\\" Encoding Headers\";\n\n        TestCase test = new TestCase(name) {\n            MobileServiceClient mClient;\n            List<Pair<String, String>> mQuery;\n            List<Pair<String, String>> mHeaders;\n            TestExecutionCallback mCallback;\n            JsonObject mExpectedResult;\n            int mExpectedStatusCode;\n            String mHttpMethod;\n            byte[] mContent;\n\n            TestResult mResult;\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                mResult = new TestResult();\n                mResult.setTestCase(this);\n                mResult.setStatus(TestStatus.Passed);\n                mClient = client;\n                mCallback = callback;\n\n                createHttpContentTestInput();\n\n                try {\n\n                    ServiceFilterResponse response = mClient.invokeApi(APP_API_NAME, mContent, mHttpMethod, mHeaders, mQuery).get();\n\n                    Exception ex = validateResponse(response);\n                    if (ex != null) {\n                        createResultFromException(mResult, ex);\n                    } else {\n                        mResult.getTestCase().log(\"Header validated successfully\");\n\n                        String responseContent = response.getContent();\n\n                        mResult.getTestCase().log(\"Response content: \" + responseContent);\n\n                        JsonElement jsonResponse = null;\n                        String decodedContent = responseContent.replace(\"__{__\", \"{\").replace(\"__}__\", \"}\").replace(\"__[__\", \"[\").replace(\"__]__\", \"]\");\n                        jsonResponse = new JsonParser().parse(decodedContent);\n\n                        if (!Util.compareJson(mExpectedResult, jsonResponse)) {\n                            createResultFromException(mResult, new ExpectedValueException(mExpectedResult, jsonResponse));\n                        }\n                    }\n\n                    mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                } catch (Exception exception) {\n                    createResultFromException(exception);\n                    mCallback.onTestComplete(mResult.getTestCase(), mResult);\n                    return;\n                }\n            }\n\n            ;\n\n            private Exception validateResponse(ServiceFilterResponse response) {\n                if (mExpectedStatusCode != response.getStatus().getStatusCode()) {\n                    mResult.getTestCase().log(\"Invalid status code\");\n                    String content = response.getContent();\n                    if (content != null) {\n                        mResult.getTestCase().log(\"Response: \" + content);\n                    }\n                    return new ExpectedValueException(mExpectedStatusCode, response.getStatus().getStatusCode());\n                } else {\n                    return null;\n                }\n            }\n\n            private void createHttpContentTestInput() {\n                mHttpMethod = HttpGet.METHOD_NAME;\n                log(\"Method = \" + mHttpMethod);\n\n                mExpectedResult = new JsonObject();\n                mExpectedResult.addProperty(\"method\", mHttpMethod);\n                JsonObject user = new JsonObject();\n                user.addProperty(\"level\", \"anonymous\");\n                mExpectedResult.add(\"user\", user);\n\n                mHeaders = new ArrayList<Pair<String, String>>();\n                mHeaders.add(new Pair<String, String>(\"Accept\", \"text/plain\"));\n                mHeaders.add(new Pair<String, String>(\"Accept-Encoding\", \"identity\"));\n\n                mQuery = new ArrayList<Pair<String, String>>();\n                mQuery.add(new Pair<String, String>(\"format\", \"other\"));\n\n                mExpectedStatusCode = 200;\n            }\n        };\n\n        return test;\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/MockResponse.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\nimport org.apache.http.Header;\nimport org.apache.http.ProtocolVersion;\nimport org.apache.http.StatusLine;\n\nimport java.io.UnsupportedEncodingException;\n\npublic class MockResponse implements ServiceFilterResponse {\n\n    private int mStatus;\n    private byte[] mContent;\n\n    public MockResponse(String content, int status) {\n        mStatus = status;\n        mContent = content.getBytes();\n    }\n\n    public MockResponse(byte[] content, int status) {\n        mStatus = status;\n        mContent = content;\n    }\n\n    @Override\n    public Header[] getHeaders() {\n        return null;\n    }\n\n    @Override\n    public String getContent() {\n        if (mContent != null) {\n            String content = null;\n            try {\n                content = new String(mContent, MobileServiceClient.UTF8_ENCODING);\n            } catch (UnsupportedEncodingException e) {\n            }\n            return content;\n        } else {\n            return null;\n        }\n    }\n\n    @Override\n    public StatusLine getStatus() {\n        return new StatusLine() {\n\n            @Override\n            public int getStatusCode() {\n                return mStatus;\n            }\n\n            @Override\n            public String getReasonPhrase() {\n                return null;\n            }\n\n            @Override\n            public ProtocolVersion getProtocolVersion() {\n                return new ProtocolVersion(\"HTTP\", 1, 1);\n            }\n        };\n    }\n\n    @Override\n    public byte[] getRawContent() {\n        return mContent;\n    }\n\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/MultipleRequestFilter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\npublic class MultipleRequestFilter implements ServiceFilter {\n\n    private int mNumberOfRequests;\n\n    public MultipleRequestFilter(int numberOfRequests) {\n        mNumberOfRequests = numberOfRequests;\n    }\n\n    @Override\n    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n        for (int i = 0; i < mNumberOfRequests; i++) {\n\n            final boolean doCallback = i == mNumberOfRequests - 1;\n\n            if (doCallback) {\n                return nextServiceFilterCallback.onNext(request);\n            } else {\n                try {\n                    nextServiceFilterCallback.onNext(request).get();\n                } catch (Exception e) {\n                }\n            }\n        }\n\n        return null;\n    }\n\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/OfflineTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.gson.Gson;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.google.gson.annotations.SerializedName;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceList;\nimport com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedExceptionJson;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOperations;\nimport com.microsoft.windowsazure.mobileservices.table.serialization.JsonEntityParser;\nimport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext;\nimport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncTable;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.MobileServiceLocalStoreException;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.RemoteTableOperationProcessor;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperation;\nimport com.microsoft.windowsazure.mobileservices.table.sync.operations.TableOperationError;\nimport com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushCompletionResult;\nimport com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException;\nimport com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandler;\nimport com.microsoft.windowsazure.mobileservices.table.sync.synchandler.MobileServiceSyncHandlerException;\nimport com.microsoft.windowsazure.mobileservices.table.sync.synchandler.SimpleSyncHandler;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\n\nimport java.util.ArrayList;\nimport java.util.Calendar;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Map;\nimport java.util.Random;\nimport java.util.UUID;\nimport java.util.concurrent.ExecutionException;\n\npublic class OfflineTests extends TestGroup {\n\n    protected static final String OFFLINE_TABLE_NAME = \"offlineTest.db\";\n    protected static final String INCREMENTAL_PULL_STRATEGY_TABLE = \"__incrementalPullData\";\n\n    public OfflineTests() {\n        super(\"Offline tests\");\n\n\n        this.addTest(createClearStoreTest());\n\n\n        this.addTest(createBasicTest(\"Basic Test\"));\n        this.addTest(createNoCollapseInsertOnPreviousPushError(\"No collapse insert on previous push error\"));\n\n        this.addTest(createLocallyDeleteAlreadyDeletedElementTest());\n\n        this.addTest(createInsertDuplicatedElementTest());\n\n        this.addTest(createDeleteSyncConflict());\n\n        this.addTest(createSyncConflictTest(false));\n        this.addTest(createSyncConflictTest(true));\n\n        this.addTest(createSyncConflictAndResolveWithMethodTest(false));\n        this.addTest(createSyncConflictAndResolveWithMethodTest(true));\n\n        this.addTest(LoginTests.createLogoutTest());\n        this.addTest(createSyncTestForAuthenticatedTable(false));\n        this.addTest(LoginTests.createLoginTest(MobileServiceAuthenticationProvider.Facebook));\n\n        TestCase noOptimisticConcurrencyTest = createNoOptimisticConcurrencyTest();\n        noOptimisticConcurrencyTest.setCanRunUnattended(false);\n        this.addTest(noOptimisticConcurrencyTest);\n\n        this.addTest(createSyncTestForAuthenticatedTable(true));\n        this.addTest(LoginTests.createLogoutTest());\n\n        this.addTest(createOfflineIncrementalSyncTest(null, false, false));\n\n        this.addTest(createOfflineIncrementalSyncTest(\"incrementalQuery\", false, false));\n        this.addTest(createOfflineIncrementalSyncTest(\"incrementalQuery\", false, true));\n        this.addTest(createOfflineIncrementalSyncTest(\"incrementalQuery\", true, false));\n        this.addTest(createOfflineIncrementalSyncTest(\"incrementalQuery\", true, true));\n\n    }\n\n    private TestCase createBasicTest(String name) {\n\n        final String tableName = \"offlineReady\";\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n\n                    TestCase testCase = this;\n                    TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(testCase);\n\n                    ServiceFilterWithRequestCount serviceFilter = new ServiceFilterWithRequestCount();\n\n                    int requestsSentToServer = 0;\n\n                    client = client.withFilter(serviceFilter);\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(client.getContext(), OFFLINE_TABLE_NAME, null, 1);\n\n                    SimpleSyncHandler handler = new SimpleSyncHandler();\n                    MobileServiceSyncContext syncContext = client.getSyncContext();\n\n                    syncContext.initialize(localStore, handler).get();\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n                    tableDefinition.put(\"id\", ColumnDataType.String);\n                    tableDefinition.put(\"name\", ColumnDataType.String);\n                    tableDefinition.put(\"age\", ColumnDataType.Integer);\n                    tableDefinition.put(\"float\", ColumnDataType.Real);\n                    tableDefinition.put(\"date\", ColumnDataType.Date);\n                    tableDefinition.put(\"bool\", ColumnDataType.Boolean);\n                    tableDefinition.put(\"__version\", ColumnDataType.String);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(tableName, tableDefinition);\n\n                    client.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    MobileServiceSyncTable<OfflineReadyItem> localTable = client.getSyncTable(tableName, OfflineReadyItem.class);\n\n                    MobileServiceTable<OfflineReadyItem> remoteTable = client.getTable(tableName, OfflineReadyItem.class);\n\n                    OfflineReadyItem item = new OfflineReadyItem(new Random());\n\n                    log(\"Inserted the item to the local store:\" + item);\n\n                    item = localTable.insert(item).get();\n\n                    log(\"Validating that the item is not in the server table\");\n\n                    try {\n                        requestsSentToServer++;\n                        remoteTable.lookUp(item.getId()).get();\n                        log(\"Error, item is present in the server\");\n                        // return false;\n                    } catch (ExecutionException ex) {\n                        log(\"Ok, item is not in the server:\" + ex.getMessage());\n                    }\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n\n                    log(\"Pushing changes to the server\");\n                    client.getSyncContext().push().get();\n                    requestsSentToServer++;\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n                    log(\"Push done; now verifying that item is in the server\");\n\n                    OfflineReadyItem serverItem = remoteTable.lookUp(item.getId()).get();\n                    requestsSentToServer++;\n\n                    log(\"Retrieved item from server:\" + serverItem);\n\n                    if (serverItem.equals(item)) {\n                        log(\"Items are the same\");\n                    } else {\n                        log(\"Items are different. Local: \" + item + \"; remote: \" + serverItem);\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    log(\"Now updating the item locally\");\n\n                    item.setFlag(!item.getFlag());\n                    // item.addProperty(\"date\", DateSerializer.serialize(new\n                    // Date()));\n                    // item.addProperty(\"__updatedAt\",\n                    // DateSerializer.serialize(new Date()));\n                    // item.addProperty(\"__version\", \"1\");\n\n                    // item.Flag = !item.Flag;\n                    // item.Age++;\n                    // item.Date = new DateTime(now.Year, now.Month, now.Day,\n                    // now.Hour, now.Minute, now.Second, now.Millisecond,\n                    // DateTimeKind.Utc);\n\n                    localTable.update(item).get();\n\n                    log(\"Item has been updated\");\n\n                    OfflineReadyItem newItem = new OfflineReadyItem(new Random());\n\n                    log(\"Adding a new item to the local table:\" + newItem);\n                    newItem = localTable.insert(newItem).get();\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n\n                    log(\"Pushing the new changes to the server\");\n                    client.getSyncContext().push().get();\n                    requestsSentToServer += 2;\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n\n                    log(\"Push done. Verifying changes on the server\");\n                    serverItem = remoteTable.lookUp(item.getId()).get();\n                    requestsSentToServer++;\n\n                    if (serverItem.equals(item)) {\n                        log(\"Updated items are the same\");\n                    } else {\n                        log(\"Items are different. Local: \" + item + \"; remote: \" + serverItem);\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    serverItem = remoteTable.lookUp(newItem.getId()).get();\n                    requestsSentToServer++;\n\n                    if (serverItem.equals(newItem)) {\n                        log(\"New inserted item is the same\");\n                    } else {\n                        log(\"Items are different. Local: \" + item + \"; remote: \" + serverItem);\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    log(\"Cleaning up\");\n                    localTable.delete(item).get();\n\n                    localTable.delete(newItem).get();\n                    log(\"Local table cleaned up. Now sync'ing once more\");\n                    client.getSyncContext().push().get();\n\n                    requestsSentToServer += 2;\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    log(\"Done\");\n\n                    callback.onTestComplete(this, result);\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n\n            ;\n        };\n\n        test.setName(name);\n\n        return test;\n    }\n\n    private TestCase createNoCollapseInsertOnPreviousPushError(String name) {\n\n        final String tableName = \"offlineReady2\";\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n\n                    TestCase testCase = this;\n                    TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(testCase);\n\n                    ServiceFilterWithRequestCount serviceFilter = new ServiceFilterWithRequestCount();\n\n                    int requestsSentToServer = 0;\n\n                    client = client.withFilter(serviceFilter);\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(client.getContext(), OFFLINE_TABLE_NAME, null, 1);\n\n                    SimpleSyncHandler handler = new SimpleSyncHandler();\n                    MobileServiceSyncContext syncContext = client.getSyncContext();\n\n                    syncContext.initialize(localStore, handler).get();\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n                    tableDefinition.put(\"id\", ColumnDataType.String);\n                    tableDefinition.put(\"name\", ColumnDataType.String);\n                    tableDefinition.put(\"age\", ColumnDataType.Integer);\n                    tableDefinition.put(\"float\", ColumnDataType.Real);\n                    tableDefinition.put(\"date\", ColumnDataType.Date);\n                    tableDefinition.put(\"bool\", ColumnDataType.Boolean);\n                    tableDefinition.put(\"__version\", ColumnDataType.String);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(tableName, tableDefinition);\n\n                    client.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    MobileServiceSyncTable<OfflineReadyItem> localTable = client.getSyncTable(tableName, OfflineReadyItem.class);\n\n                    MobileServiceTable<OfflineReadyItem> remoteTable = client.getTable(tableName, OfflineReadyItem.class);\n\n                    OfflineReadyItem item = new OfflineReadyItem(new Random());\n\n                    log(\"Inserted the item to the local store:\" + item);\n\n                    item = localTable.insert(item).get();\n\n                    log(\"Validating that the item is not in the server table\");\n\n                    try {\n                        requestsSentToServer++;\n                        remoteTable.lookUp(item.getId()).get();\n                        log(\"Error, item is present in the server\");\n                        // return false;\n                    } catch (ExecutionException ex) {\n                        log(\"Ok, item is not in the server:\" + ex.getMessage());\n                    }\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n\n                    if (client.getSyncContext().getPendingOperations() != 1) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n\n                    log(\"Pushing changes to the server\");\n\n                    try {\n                        client.getSyncContext().push().get();\n                    } catch (Exception ex2) {\n\n                        requestsSentToServer += 1;\n\n                        log(\"Push should throw error\");\n\n                        if (client.getSyncContext().getPendingOperations() != 1) {\n                            result.setStatus(TestStatus.Failed);\n                            callback.onTestComplete(this, result);\n                        }\n\n                        log(\"adding a delete operation that will not collapse\");\n                        localTable.delete(item).get();\n\n                        if (client.getSyncContext().getPendingOperations() != 1) {\n                            result.setStatus(TestStatus.Failed);\n                            callback.onTestComplete(this, result);\n                        }\n\n                    }\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n\n                    log(\"Cleaning up\");\n\n                    client.getContext().deleteDatabase(OFFLINE_TABLE_NAME);\n\n                    log(\"Done\");\n\n                    callback.onTestComplete(this, result);\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                } catch (Throwable e) {\n                    callback.onTestComplete(this, createResultFromException((Exception) e));\n                    return;\n                }\n            }\n\n            ;\n        };\n\n        test.setName(name);\n\n        return test;\n    }\n\n\n    private TestCase issue536() {\n\n        final String tableName = \"INSTA\";\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n\n                    TestCase testCase = this;\n                    TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(testCase);\n\n                    ServiceFilterWithRequestCount serviceFilter = new ServiceFilterWithRequestCount();\n\n                    int requestsSentToServer = 0;\n\n                    client = client.withFilter(serviceFilter);\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(client.getContext(), OFFLINE_TABLE_NAME, null, 1);\n\n                    SimpleSyncHandler handler = new SimpleSyncHandler();\n                    MobileServiceSyncContext syncContext = client.getSyncContext();\n\n                    syncContext.initialize(localStore, handler).get();\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> instaTableDefinition = new HashMap<String, ColumnDataType>();\n                    instaTableDefinition.put(\"id\", ColumnDataType.String);\n                    instaTableDefinition.put(\"inspectedDateTime\", ColumnDataType.Date);\n                    instaTableDefinition.put(\"inventory\", ColumnDataType.String);\n                    instaTableDefinition.put(\"wall\", ColumnDataType.String);\n                    instaTableDefinition.put(\"floor\", ColumnDataType.String);\n                    instaTableDefinition.put(\"ceiling\", ColumnDataType.String);\n                    instaTableDefinition.put(\"inspected\", ColumnDataType.Boolean);\n                    instaTableDefinition.put(\"rejected\", ColumnDataType.Boolean);\n                    instaTableDefinition.put(\"inspectionId\", ColumnDataType.String);\n                    instaTableDefinition.put(\"levelsInInspectionId\", ColumnDataType.String);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(tableName, instaTableDefinition);\n\n                    client.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    MobileServiceSyncTable<InstaItem> localTable = client.getSyncTable(tableName, InstaItem.class);\n\n                    MobileServiceTable<InstaItem> remoteTable = client.getTable(tableName, InstaItem.class);\n\n                    InstaItem item = new InstaItem(new Random());\n\n                    log(\"Inserted the item to the local store:\" + item);\n\n                    item = localTable.insert(item).get();\n\n                    item = localTable.lookUp(item.getId()).get();\n\n                    log(\"Validating that the item is not in the server table\");\n\n                    try {\n                        requestsSentToServer++;\n                        remoteTable.lookUp(item.getId()).get();\n                        log(\"Error, item is present in the server\");\n                        // return false;\n                    } catch (ExecutionException ex) {\n                        log(\"Ok, item is not in the server:\" + ex.getMessage());\n                    }\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n\n                    log(\"Pushing changes to the server\");\n                    client.getSyncContext().push().get();\n                    requestsSentToServer++;\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n                    log(\"Push done; now verifying that item is in the server\");\n\n                    InstaItem serverItem = remoteTable.lookUp(item.getId()).get();\n                    requestsSentToServer++;\n\n                    log(\"Retrieved item from server:\" + serverItem);\n\n                    if (serverItem.equals(item)) {\n                        log(\"Items are the same\");\n                    } else {\n                        log(\"Items are different. Local: \" + item + \"; remote: \" + serverItem);\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    log(\"Now updating the item locally\");\n\n                    item.setInspected(!item.getInspected());\n\n                    localTable.update(item).get();\n\n                    log(\"Item has been updated\");\n\n                    InstaItem newItem = new InstaItem(new Random());\n\n                    log(\"Adding a new item to the local table:\" + newItem);\n                    newItem = localTable.insert(newItem).get();\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n\n                    log(\"Pushing the new changes to the server\");\n                    client.getSyncContext().push().get();\n                    requestsSentToServer += 2;\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n\n                    log(\"Push done. Verifying changes on the server\");\n                    serverItem = remoteTable.lookUp(item.getId()).get();\n                    requestsSentToServer++;\n\n                    if (serverItem.equals(item)) {\n                        log(\"Updated items are the same\");\n                    } else {\n                        log(\"Items are different. Local: \" + item + \"; remote: \" + serverItem);\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    serverItem = remoteTable.lookUp(newItem.getId()).get();\n                    requestsSentToServer++;\n\n                    if (serverItem.equals(newItem)) {\n                        log(\"New inserted item is the same\");\n                    } else {\n                        log(\"Items are different. Local: \" + item + \"; remote: \" + serverItem);\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    log(\"Cleaning up\");\n                    localTable.delete(item).get();\n                    localTable.delete(newItem).get();\n                    log(\"Local table cleaned up. Now sync'ing once more\");\n                    client.getSyncContext().push().get();\n\n                    requestsSentToServer += 2;\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    log(\"Done\");\n\n                    callback.onTestComplete(this, result);\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n\n            ;\n        };\n\n        test.setName(\"issue536\");\n\n        return test;\n    }\n\n    private TestCase issue417() {\n\n        final String tableName = \"Person\";\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n\n                    TestCase testCase = this;\n                    TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(testCase);\n\n                    ServiceFilterWithRequestCount serviceFilter = new ServiceFilterWithRequestCount();\n\n                    int requestsSentToServer = 0;\n\n                    client = client.withFilter(serviceFilter);\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(client.getContext(), OFFLINE_TABLE_NAME, null, 1);\n\n                    SimpleSyncHandler handler = new SimpleSyncHandler();\n                    MobileServiceSyncContext syncContext = client.getSyncContext();\n\n                    syncContext.initialize(localStore, handler).get();\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> instaTableDefinition = new HashMap<String, ColumnDataType>();\n                    instaTableDefinition.put(\"id\", ColumnDataType.String);\n                    instaTableDefinition.put(\"name\", ColumnDataType.String);\n                    instaTableDefinition.put(\"age\", ColumnDataType.Integer);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(tableName, instaTableDefinition);\n\n                    client.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    MobileServiceSyncTable<PersonItem> localTable = client.getSyncTable(tableName, PersonItem.class);\n\n                    MobileServiceTable<PersonItem> remoteTable = client.getTable(tableName, PersonItem.class);\n\n                    String testFilter = UUID.randomUUID().toString();\n\n                    /*for(int i = 0; i < 50; i++) {\n                        PersonItem item = new PersonItem(new Random(), \"partition\");\n\n                        log(\"Inserted the item to the local store:\" + item);\n\n                        item.setName(testFilter);\n                        localTable.insert(item).get();\n\n                    }\n\n                    log(\"Pushing changes to the server\");\n                    client.getSyncContext().push().get();\n                    log(\"Push done; now verifying that item is in the server\");\n*/\n\n                    Query query =\n                            QueryOperations\n                                    .tableName(tableName)\n                                            //.field(\"name\").eq(testFilter)\n                                    .top(5);\n\n\n                    MobileServiceList<PersonItem> personItems = remoteTable.execute(query).get();\n\n                    while (personItems.getNextLink() != null) {\n                        log(\"Querying \" + personItems.getNextLink());\n                        personItems = remoteTable.execute(personItems.getNextLink()).get();\n                    }\n\n                    log(\"Done\");\n\n                    callback.onTestComplete(this, result);\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n\n            ;\n        };\n\n        test.setName(\"issue417\");\n\n        return test;\n    }\n\n    private TestCase createLocallyDeleteAlreadyDeletedElementTest() {\n\n        final String tableName = \"offlineReady\";\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                try {\n\n                    TestCase testCase = this;\n                    TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(testCase);\n\n                    ServiceFilterWithRequestCount serviceFilter = new ServiceFilterWithRequestCount();\n\n                    int requestsSentToServer = 0;\n\n                    client = client.withFilter(serviceFilter);\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(client.getContext(), OFFLINE_TABLE_NAME, null, 1);\n\n                    SimpleSyncHandler handler = new SimpleSyncHandler();\n                    MobileServiceSyncContext syncContext = client.getSyncContext();\n\n                    syncContext.initialize(localStore, handler).get();\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n                    tableDefinition.put(\"id\", ColumnDataType.String);\n                    tableDefinition.put(\"name\", ColumnDataType.String);\n                    tableDefinition.put(\"age\", ColumnDataType.Integer);\n                    tableDefinition.put(\"float\", ColumnDataType.Real);\n                    tableDefinition.put(\"date\", ColumnDataType.Date);\n                    tableDefinition.put(\"bool\", ColumnDataType.Boolean);\n                    tableDefinition.put(\"__version\", ColumnDataType.String);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(tableName, tableDefinition);\n\n                    client.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    MobileServiceSyncTable<OfflineReadyItem> localTable = client.getSyncTable(tableName, OfflineReadyItem.class);\n\n                    MobileServiceTable<OfflineReadyItem> remoteTable = client.getTable(tableName, OfflineReadyItem.class);\n\n                    OfflineReadyItem item = new OfflineReadyItem(new Random());\n\n                    log(\"Inserted the item to the local store:\" + item);\n\n                    item = localTable.insert(item).get();\n\n                    log(\"Validating that the item is not in the server table\");\n\n                    try {\n                        requestsSentToServer++;\n                        remoteTable.lookUp(item.getId()).get();\n                        log(\"Error, item is present in the server\");\n                        // return false;\n                    } catch (ExecutionException ex) {\n                        log(\"Ok, item is not in the server:\" + ex.getMessage());\n                    }\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n\n                    log(\"Pushing changes to the server\");\n                    client.getSyncContext().push().get();\n                    requestsSentToServer++;\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n\n                    log(\"Push done; now verifying that item is in the server\");\n\n                    OfflineReadyItem serverItem = remoteTable.lookUp(item.getId()).get();\n                    requestsSentToServer++;\n\n                    log(\"Retrieved item from server:\" + serverItem);\n\n                    if (serverItem.equals(item)) {\n                        log(\"Items are the same\");\n                    } else {\n                        log(\"Items are different. Local: \" + item + \"; remote: \" + serverItem);\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    log(\"Delete the remote item\");\n\n                    remoteTable.delete(serverItem).get();\n\n                    log(\"Delete the local item\");\n\n                    localTable.delete(item).get();\n\n                    log(\"Item has been deleted\");\n\n                    log(\"Pushing the new changes to the server\");\n                    client.getSyncContext().push().get();\n                    requestsSentToServer += 2;\n\n                    if (!validateRequestCount(this, serviceFilter.requestCount, requestsSentToServer)) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                    }\n\n                    log(\"Done\");\n\n                    callback.onTestComplete(this, result);\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n\n            ;\n        };\n\n        test.setName(\"Locally delete an already deleted element Test\");\n\n        return test;\n    }\n\n    private TestCase createInsertDuplicatedElementTest() {\n\n        final String tableName = \"offlineReady\";\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient offlineReadyClient, final TestExecutionCallback callback) {\n\n                TestCase testCase = this;\n                TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(testCase);\n                try {\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(offlineReadyClient.getContext(), OFFLINE_TABLE_NAME, null, 1);\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n                    tableDefinition.put(\"id\", ColumnDataType.String);\n                    tableDefinition.put(\"name\", ColumnDataType.String);\n                    tableDefinition.put(\"age\", ColumnDataType.Integer);\n                    tableDefinition.put(\"float\", ColumnDataType.Real);\n                    tableDefinition.put(\"date\", ColumnDataType.Date);\n                    tableDefinition.put(\"bool\", ColumnDataType.Boolean);\n                    tableDefinition.put(\"__version\", ColumnDataType.String);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(tableName, tableDefinition);\n\n                    offlineReadyClient.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    MobileServiceSyncTable<OfflineReadyItem> localTable = offlineReadyClient.getSyncTable(tableName, OfflineReadyItem.class);\n\n                    MobileServiceTable<OfflineReadyItem> remoteTable = offlineReadyClient.getTable(tableName, OfflineReadyItem.class);\n\n                    localTable.purge(null).get();\n\n                    log(\"Removed all items from the local table\");\n\n                    OfflineReadyItem item = new OfflineReadyItem(new Random());\n\n                    item = remoteTable.insert(item).get();\n\n                    log(\"Inserted the item to the remote store:\" + item);\n\n                    Query pullQuery = QueryOperations.tableName(tableName).field(\"id\").eq(item.getId());\n\n                    localTable.pull(pullQuery).get();\n\n                    log(\"Pull changes from server\");\n\n\n                    try {\n                        item = localTable.insert(item).get();\n                    } catch (Exception ex) {\n\n                        MobileServiceLocalStoreException mslse = (MobileServiceLocalStoreException) ex.getCause();\n\n                        if (mslse == null) {\n                            log(\"Expected exception was not thrown.\");\n                            result.setStatus(TestStatus.Failed);\n                            callback.onTestComplete(this, result);\n                        }\n                        log(\"Expected exception was thrown.\");\n                    }\n\n                    log(\"Cleaning up\");\n                    localTable.delete(item).get();\n                    log(\"Local table cleaned up. Now sync'ing once more\");\n                    offlineReadyClient.getSyncContext().push().get();\n                    log(\"Done\");\n\n                    callback.onTestComplete(this, result);\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n\n            ;\n        };\n\n        test.setName(\"Offline - Insert duplicated element Test\");\n\n        return test;\n    }\n\n\n    private TestCase createDeleteSyncConflict() {\n\n        final String tableName = \"offlineReady\";\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient offlineReadyClient, final TestExecutionCallback callback) {\n\n                TestCase testCase = this;\n                TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(testCase);\n                try {\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(offlineReadyClient.getContext(), OFFLINE_TABLE_NAME, null, 1);\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n                    tableDefinition.put(\"id\", ColumnDataType.String);\n                    tableDefinition.put(\"name\", ColumnDataType.String);\n                    tableDefinition.put(\"age\", ColumnDataType.Integer);\n                    tableDefinition.put(\"float\", ColumnDataType.Real);\n                    tableDefinition.put(\"date\", ColumnDataType.Date);\n                    tableDefinition.put(\"bool\", ColumnDataType.Boolean);\n                    tableDefinition.put(\"__version\", ColumnDataType.String);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(tableName, tableDefinition);\n\n                    MobileServiceSyncTable<OfflineReadyItem> localTable = offlineReadyClient.getSyncTable(tableName, OfflineReadyItem.class);\n\n                    MobileServiceTable<OfflineReadyItem> remoteTable = offlineReadyClient.getTable(tableName, OfflineReadyItem.class);\n\n                    offlineReadyClient.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    localTable.purge(null).get();\n                    log(\"Removed all items from the local table\");\n\n                    OfflineReadyItem item = new OfflineReadyItem(new Random());\n\n                    item = localTable.insert(item).get();\n\n                    log(\"Inserted the item to the local store:\" + item);\n\n                    Query pullQuery = QueryOperations.tableName(tableName).field(\"id\").eq(item.getId());\n\n                    localTable.pull(pullQuery).get();\n\n                    log(\"Changing the item on the server\");\n\n                    item.setFlag(!item.getFlag());\n\n                    item = remoteTable.update(item).get();\n\n                    log(\"Updated the item: \" + item);\n\n                    OfflineReadyItem localItem = localTable.lookUp(item.getId()).get();\n                    OfflineReadyItem serverItem = remoteTable.lookUp(item.getId()).get();\n\n                    log(\"Retrieved the item from the local table, now updating it\");\n\n                    localItem.setDate(new Date());\n\n                    localTable.update(localItem).get();\n\n                    log(\"Updated the item on the local table\");\n\n                    localTable.delete(localItem);\n\n                    log(\"Now trying to pull changes from the server (will trigger a push)\");\n\n                    try {\n                        localTable.pull(pullQuery).get();\n                        log(\"Error, pull (push) should have caused a conflict, but none happened.\");\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    } catch (Exception ex) {\n                        log(\"Push exception: \" + ex);\n                        log(\"Expected exception was thrown.\");\n\n                        MobileServicePushFailedException mspfe = (MobileServicePushFailedException) ex.getCause();\n\n                        if (mspfe == null || mspfe.getPushCompletionResult().getOperationErrors().size() != 1) {\n                            result.setStatus(TestStatus.Failed);\n                            callback.onTestComplete(this, result);\n                            return;\n                        }\n\n                        TableOperationError tableOperationError = mspfe.getPushCompletionResult().getOperationErrors().get(0);\n\n                        try {\n\n                            log(\"Count pending operations\");\n\n                            if (offlineReadyClient.getSyncContext().getPendingOperations() != 1) {\n                                log(\"Expected 1 pending operations\");\n\n                                result.setStatus(TestStatus.Failed);\n                                callback.onTestComplete(this, result);\n                                return;\n                            }\n\n                            log(\"Cleaning operation\");\n\n                            try {\n                                offlineReadyClient.getSyncContext().cancelAndUpdateItem(tableOperationError);\n                            } catch (Throwable throwable) {\n                                result.setStatus(TestStatus.Failed);\n                                callback.onTestComplete(this, result);\n                                return;\n                            }\n\n                        } catch (Throwable throwable) {\n                            result.setStatus(TestStatus.Failed);\n                            callback.onTestComplete(this, result);\n                            return;\n                        }\n                    }\n\n                    log(\"Cleaning up\");\n\n                    localTable.delete(serverItem).get();\n\n                    log(\"Local table cleaned up. Now sync'ing once more\");\n                    offlineReadyClient.getSyncContext().push().get();\n                    log(\"Done\");\n\n                    callback.onTestComplete(this, result);\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        test.setName(\"Offline - Test delete a locally updated item\");\n\n        return test;\n    }\n\n    private TestCase createSyncConflictTest(final boolean autoResolve) {\n\n        final String tableName = \"offlineReady\";\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient offlineReadyClient, final TestExecutionCallback callback) {\n\n                TestCase testCase = this;\n                TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(testCase);\n                try {\n\n                    boolean resolveConflictsOnClient = autoResolve;\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(offlineReadyClient.getContext(), OFFLINE_TABLE_NAME, null, 1);\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n                    tableDefinition.put(\"id\", ColumnDataType.String);\n                    tableDefinition.put(\"name\", ColumnDataType.String);\n                    tableDefinition.put(\"age\", ColumnDataType.Integer);\n                    tableDefinition.put(\"float\", ColumnDataType.Real);\n                    tableDefinition.put(\"date\", ColumnDataType.Date);\n                    tableDefinition.put(\"bool\", ColumnDataType.Boolean);\n                    tableDefinition.put(\"__version\", ColumnDataType.String);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(tableName, tableDefinition);\n\n                    MobileServiceSyncTable<OfflineReadyItem> localTable = offlineReadyClient.getSyncTable(tableName, OfflineReadyItem.class);\n\n                    MobileServiceTable<OfflineReadyItem> remoteTable = offlineReadyClient.getTable(tableName, OfflineReadyItem.class);\n\n                    ConflictResolvingSyncHandler conflictResolvingSyncHandler = new ConflictResolvingSyncHandler(this, offlineReadyClient);\n\n                    if (resolveConflictsOnClient) {\n                        offlineReadyClient.getSyncContext().initialize(localStore, conflictResolvingSyncHandler).get();\n                    } else {\n                        offlineReadyClient.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n                    }\n\n                    localTable.purge(null).get();\n                    log(\"Removed all items from the local table\");\n\n                    OfflineReadyItem item = new OfflineReadyItem(new Random());\n\n                    item = localTable.insert(item).get();\n\n                    log(\"Inserted the item to the local store:\" + item);\n\n                    Query pullQuery = QueryOperations.tableName(tableName).field(\"id\").eq(item.getId());\n\n                    localTable.pull(pullQuery).get();\n\n                    log(\"Changing the item on the server\");\n\n                    item.setFlag(!item.getFlag());\n\n                    item = remoteTable.update(item).get();\n\n                    log(\"Updated the item: \" + item);\n\n                    OfflineReadyItem localItem = localTable.lookUp(item.getId()).get();\n\n                    log(\"Retrieved the item from the local table, now updating it\");\n\n                    localItem.setDate(new Date());\n\n                    localTable.update(localItem).get();\n                    log(\"Updated the item on the local table\");\n\n                    log(\"Now trying to pull changes from the server (will trigger a push)\");\n\n                    try {\n                        localTable.pull(pullQuery).get();\n                        if (!autoResolve) {\n                            log(\"Error, pull (push) should have caused a conflict, but none happened.\");\n                            result.setStatus(TestStatus.Failed);\n                            callback.onTestComplete(this, result);\n                            return;\n                        } else {\n                            OfflineReadyItem expectedMergedItem = conflictResolvingSyncHandler.conflictResolution(localItem, item);\n                            OfflineReadyItem localMergedItem = localTable.lookUp(item.getId()).get();\n                            if (localMergedItem.equals(expectedMergedItem)) {\n                                log(\"Item was merged correctly.\");\n                            } else {\n                                log(\"Error, item not merged correctly. Expected: \" + expectedMergedItem + \" Actual: \" + localMergedItem);\n                                result.setStatus(TestStatus.Failed);\n                                callback.onTestComplete(this, result);\n                                return;\n                            }\n                        }\n                    } catch (Exception ex) {\n                        log(\"Push exception: \" + ex);\n\n                        MobileServicePushFailedException mspfe = (MobileServicePushFailedException) ex.getCause();\n\n                        if (autoResolve) {\n                            log(\"Error, push should have succeeded.\");\n                            result.setStatus(TestStatus.Failed);\n                            callback.onTestComplete(this, result);\n                            return;\n                        } else {\n                            log(\"Expected exception was thrown.\");\n\n                            try {\n                                offlineReadyClient.getSyncContext().cancelAndUpdateItem(mspfe.getPushCompletionResult().getOperationErrors().get(0));\n                            } catch (Throwable throwable) {\n                                log(\"Error, cancel And Update Item should have succeeded.\");\n                                result.setStatus(TestStatus.Failed);\n                                callback.onTestComplete(this, result);\n                                return;\n                            }\n                        }\n                    }\n\n                    log(\"Cleaning up\");\n\n                    localTable.delete(item).get();\n\n                    log(\"Local table cleaned up. Now sync'ing once more\");\n                    offlineReadyClient.getSyncContext().push().get();\n                    log(\"Done\");\n\n                    callback.onTestComplete(this, result);\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n\n            ;\n        };\n\n        test.setName(\"Offline - dealing with conflicts - \" + (autoResolve ? \"client resolves conflicts\" : \"push fails after conflicts\"));\n\n        return test;\n    }\n\n    private TestCase createSyncConflictAndResolveWithMethodTest(final boolean useCancelAndUpdateItem) {\n\n        final String tableName = \"offlineReady\";\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient offlineReadyClient, final TestExecutionCallback callback) {\n\n                TestCase testCase = this;\n                TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(testCase);\n                try {\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(offlineReadyClient.getContext(), OFFLINE_TABLE_NAME, null, 1);\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n                    tableDefinition.put(\"id\", ColumnDataType.String);\n                    tableDefinition.put(\"name\", ColumnDataType.String);\n                    tableDefinition.put(\"age\", ColumnDataType.Integer);\n                    tableDefinition.put(\"float\", ColumnDataType.Real);\n                    tableDefinition.put(\"date\", ColumnDataType.Date);\n                    tableDefinition.put(\"bool\", ColumnDataType.Boolean);\n                    tableDefinition.put(\"__version\", ColumnDataType.String);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(tableName, tableDefinition);\n\n                    MobileServiceSyncTable<OfflineReadyItem> localTable = offlineReadyClient.getSyncTable(tableName, OfflineReadyItem.class);\n\n                    MobileServiceTable<OfflineReadyItem> remoteTable = offlineReadyClient.getTable(tableName, OfflineReadyItem.class);\n\n                    ConflictResolvingSyncHandler conflictResolvingSyncHandler = new ConflictResolvingSyncHandler(this, offlineReadyClient);\n\n                    offlineReadyClient.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    localTable.purge(null).get();\n                    log(\"Removed all items from the local table\");\n\n                    OfflineReadyItem item = new OfflineReadyItem(new Random());\n\n                    item = localTable.insert(item).get();\n\n                    log(\"Inserted the item to the local store:\" + item);\n\n                    Query pullQuery = QueryOperations.tableName(tableName).field(\"id\").eq(item.getId());\n\n                    localTable.pull(pullQuery).get();\n\n                    log(\"Changing the item on the server\");\n\n                    item.setFlag(!item.getFlag());\n\n                    item = remoteTable.update(item).get();\n\n                    log(\"Updated the item: \" + item);\n\n                    OfflineReadyItem localItem = localTable.lookUp(item.getId()).get();\n                    OfflineReadyItem serverItem = remoteTable.lookUp(item.getId()).get();\n\n                    log(\"Retrieved the item from the local table, now updating it\");\n\n                    localItem.setDate(new Date());\n\n                    localTable.update(localItem).get();\n                    log(\"Updated the item on the local table\");\n\n                    log(\"Now trying to pull changes from the server (will trigger a push)\");\n\n                    try {\n                        localTable.pull(pullQuery).get();\n                        log(\"Error, pull (push) should have caused a conflict, but none happened.\");\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    } catch (Exception ex) {\n                        log(\"Push exception: \" + ex);\n                        log(\"Expected exception was thrown.\");\n\n                        MobileServicePushFailedException mspfe = (MobileServicePushFailedException) ex.getCause();\n\n                        if (mspfe == null || mspfe.getPushCompletionResult().getOperationErrors().size() != 1) {\n                            result.setStatus(TestStatus.Failed);\n                            callback.onTestComplete(this, result);\n                            return;\n                        }\n\n                        TableOperationError tableOperationError = mspfe.getPushCompletionResult().getOperationErrors().get(0);\n\n                        try {\n\n                            log(\"Count pending operations\");\n\n                            if (offlineReadyClient.getSyncContext().getPendingOperations() != 1) {\n                                log(\"Expected 1 pending operations\");\n\n                                result.setStatus(TestStatus.Failed);\n                                callback.onTestComplete(this, result);\n                                return;\n                            }\n                        } catch (Throwable throwable) {\n                            result.setStatus(TestStatus.Failed);\n                            callback.onTestComplete(this, result);\n                            return;\n                        }\n\n                        if (useCancelAndUpdateItem) {\n                            try {\n                                offlineReadyClient.getSyncContext().cancelAndUpdateItem(tableOperationError);\n                            } catch (Throwable throwable) {\n                                throwable.printStackTrace();\n                            }\n\n                            OfflineReadyItem resolvedLocalItem = localTable.lookUp(tableOperationError.getItemId()).get();\n\n                            if (!serverItem.equals(resolvedLocalItem)) {\n                                result.setStatus(TestStatus.Failed);\n                                result.setStatus(TestStatus.Failed);\n                                callback.onTestComplete(this, result);\n                                return;\n                            }\n\n                        } else {\n                            try {\n                                offlineReadyClient.getSyncContext().cancelAndDiscardItem(tableOperationError);\n                            } catch (Throwable throwable) {\n                                result.setStatus(TestStatus.Failed);\n                                callback.onTestComplete(this, result);\n                                return;\n                            }\n\n                            OfflineReadyItem resolvedItem = localTable.lookUp(tableOperationError.getItemId()).get();\n\n                            if (resolvedItem != null) {\n                                result.setStatus(TestStatus.Failed);\n                                callback.onTestComplete(this, result);\n                            }\n                        }\n                    }\n\n                    try {\n                        if (offlineReadyClient.getSyncContext().getPendingOperations() != 0) {\n                            log(\"Expected 0 pending operations\");\n\n                            result.setStatus(TestStatus.Failed);\n                            callback.onTestComplete(this, result);\n                            return;\n                        }\n                    } catch (Throwable throwable) {\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    log(\"Cleaning up\");\n                    localTable.delete(item).get();\n\n                    log(\"Local table cleaned up. Now sync'ing once more\");\n                    offlineReadyClient.getSyncContext().push().get();\n                    log(\"Done\");\n\n                    callback.onTestComplete(this, result);\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n        };\n\n        test.setName(\"Offline - dealing with conflicts - with \" + (useCancelAndUpdateItem ? \"cancelAndUpdateItem\" : \"cancelAndDiscardItem\"));\n\n        return test;\n    }\n\n    private TestCase createSyncTestForAuthenticatedTable(final boolean isLoggedIn) {\n\n        final String tableName = \"offlineReadyAuthenticated\";\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient offlineReadyClient, final TestExecutionCallback callback) {\n\n                try {\n\n                    TestCase test = this;\n                    TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(test);\n\n                    Calendar now = Calendar.getInstance();\n                    int seed = (now.get(Calendar.YEAR) - 1900) * 10000 + now.get(Calendar.MONTH) * 100 + now.get(Calendar.DAY_OF_MONTH);\n                    test.log(\"Using random seed: \" + seed);\n                    Random rndGen = new Random(seed);\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(offlineReadyClient.getContext(), OFFLINE_TABLE_NAME, null, 1);\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n                    tableDefinition.put(\"id\", ColumnDataType.String);\n                    tableDefinition.put(\"name\", ColumnDataType.String);\n                    tableDefinition.put(\"age\", ColumnDataType.Integer);\n                    tableDefinition.put(\"float\", ColumnDataType.Real);\n                    tableDefinition.put(\"date\", ColumnDataType.Date);\n                    tableDefinition.put(\"bool\", ColumnDataType.Boolean);\n                    tableDefinition.put(\"__version\", ColumnDataType.String);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(tableName, tableDefinition);\n\n                    offlineReadyClient.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    MobileServiceSyncTable<OfflineReadyItem> localTable = offlineReadyClient.getSyncTable(tableName, OfflineReadyItem.class);\n                    MobileServiceTable<OfflineReadyItem> remoteTable = offlineReadyClient.getTable(tableName, OfflineReadyItem.class);\n\n                    OfflineReadyItem item = new OfflineReadyItem(rndGen);\n                    item = localTable.insert(item).get();\n                    test.log(\"Inserted the item to the local store: \" + item);\n\n                    try {\n                        offlineReadyClient.getSyncContext().push().get();\n                        test.log(\"Pushed the changes to the server\");\n                        if (isLoggedIn) {\n                            test.log(\"As expected, push succeeded\");\n                        } else {\n                            test.log(\"Error, table should only work with authenticated access, but user is not logged in\");\n                            result.setStatus(TestStatus.Failed);\n                            callback.onTestComplete(this, result);\n                            return;\n                        }\n                    } catch (Throwable exception) {\n\n                        MobileServicePushFailedException ex = (MobileServicePushFailedException) exception.getCause();\n\n                        if (isLoggedIn) {\n                            test.log(\"Error, user is logged in but push operation failed: \" + ex);\n                            result.setStatus(TestStatus.Failed);\n                            callback.onTestComplete(this, result);\n                            return;\n                        }\n\n                        test.log(\"Got expected exception: \" + ex.getMessage());\n                        // Exception inner = ex.getCause();\n                        // while (inner != null) {\n                        // test.log(\"  {0}: {1}\", inner.GetType().FullName,\n                        // inner.Message);\n                        // inner = inner.InnerException;\n                        // }\n                    }\n\n                    if (!isLoggedIn) {\n                        test.log(\"Push should have failed, so now will try to log in to complete the push operation\");\n                        offlineReadyClient.login(MobileServiceAuthenticationProvider.Facebook).get();\n                        test.log(\"Logged in as \" + offlineReadyClient.getCurrentUser().getUserId());\n                        offlineReadyClient.getSyncContext().push().get();\n                        test.log(\"Push succeeded\");\n                    }\n\n                    localTable.purge(null).get();\n                    test.log(\"Purged the local table\");\n                    Query query = QueryOperations.field(\"id\").eq(item.getId());\n                    localTable.pull(query).get();\n                    test.log(\"Pulled the data into the local table\");\n                    List<OfflineReadyItem> serverItems = localTable.read(null).get();\n                    test.log(\"Retrieved items from the local table\");\n\n                    test.log(\"Removing item from the remote table\");\n                    remoteTable.delete(item).get();\n\n                    if (!isLoggedIn) {\n                        offlineReadyClient.logout();\n                        test.log(\"Logged out again\");\n                    }\n\n                    OfflineReadyItem firstServerItem = serverItems.get(0);\n\n                    if (item.equals(firstServerItem)) {\n                        test.log(\"Data round-tripped successfully\");\n                    } else {\n                        test.log(\"Error, data did not round-trip successfully. Expected: \" + item + \", actual: \" + firstServerItem);\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    test.log(\"Cleaning up\");\n                    localTable.purge(null).get();\n                    test.log(\"Done\");\n\n                    callback.onTestComplete(this, result);\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n\n            ;\n        };\n\n        test.setName(\"Sync test for authenticated table, with user \" + (isLoggedIn ? \"logged in\" : \"not logged in\"));\n\n        return test;\n    }\n\n\n    private TestCase createNoOptimisticConcurrencyTest() {\n\n        final String tableName = \"offlineReadyAuthenticated\";\n\n        // If a table does not have a __version column, then offline will still\n        // work, but there will be no conflicts\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient offlineReadyClient, final TestExecutionCallback callback) {\n\n                try {\n\n                    TestCase test = this;\n                    TestResult result = new TestResult();\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(test);\n\n                    Calendar now = Calendar.getInstance();\n                    int seed = (now.get(Calendar.YEAR) - 1900) * 10000 + now.get(Calendar.MONTH) * 100 + now.get(Calendar.DAY_OF_MONTH);\n                    test.log(\"Using random seed: \" + seed);\n                    Random rndGen = new Random(seed);\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(offlineReadyClient.getContext(), OFFLINE_TABLE_NAME, null, 1);\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n                    tableDefinition.put(\"id\", ColumnDataType.String);\n                    tableDefinition.put(\"name\", ColumnDataType.String);\n                    tableDefinition.put(\"age\", ColumnDataType.Integer);\n                    tableDefinition.put(\"float\", ColumnDataType.Real);\n                    tableDefinition.put(\"date\", ColumnDataType.Date);\n                    tableDefinition.put(\"bool\", ColumnDataType.Boolean);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(tableName, tableDefinition);\n\n                    offlineReadyClient.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    MobileServiceSyncTable<OfflineReadyItemNoVersion> localTable = offlineReadyClient.getSyncTable(tableName, OfflineReadyItemNoVersion.class);\n                    MobileServiceTable<OfflineReadyItemNoVersion> remoteTable = offlineReadyClient.getTable(tableName, OfflineReadyItemNoVersion.class);\n\n                    OfflineReadyItemNoVersion item = new OfflineReadyItemNoVersion(rndGen);\n                    item = localTable.insert(item).get();\n                    test.log(\"Inserted the item to the local store: \" + item);\n\n                    offlineReadyClient.getSyncContext().push().get();\n                    test.log(\"Pushed the changes to the server\");\n\n                    OfflineReadyItemNoVersion serverItem = remoteTable.lookUp(item.getId()).get();\n                    serverItem.setName(\"changed name\");\n                    serverItem.setAge(0);\n                    serverItem = remoteTable.update(serverItem).get();\n                    test.log(\"Server item updated (changes will be overwritten later\");\n\n                    item.setAge(item.getAge() + 1);\n                    item.setName(item.getName() + \" - modified\");\n\n                    localTable.update(item).get();\n                    test.log(\"Updated item locally, will now push changes to the server: \" + item);\n                    offlineReadyClient.getSyncContext().push().get();\n\n                    serverItem = remoteTable.lookUp(item.getId()).get();\n                    test.log(\"Retrieved the item from the server: \" + serverItem);\n\n                    if (serverItem.equals(item)) {\n                        test.log(\"Items are the same\");\n                    } else {\n                        test.log(\"Items are different. Local: \" + item + \"remote: \" + serverItem);\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    test.log(\"Cleaning up\");\n                    localTable.delete(item).get();\n                    test.log(\"Local table cleaned up. Now sync'ing once more\");\n                    offlineReadyClient.getSyncContext().push().get();\n                    test.log(\"Done\");\n\n                    callback.onTestComplete(this, result);\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n\n            ;\n        };\n\n        test.setName(\"Offline without version column\");\n\n        return test;\n    }\n\n    private TestCase createOfflineIncrementalSyncTest(final String queryKey, final boolean cleanStore, final boolean complexQuery) {\n\n        final String tableName = \"offlineReady\";\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient offlineReadyClient, final TestExecutionCallback callback) {\n\n                TestCase testCase = this;\n                TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(testCase);\n                try {\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(offlineReadyClient.getContext(), OFFLINE_TABLE_NAME, null, 1);\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n                    tableDefinition.put(\"id\", ColumnDataType.String);\n                    tableDefinition.put(\"name\", ColumnDataType.String);\n                    tableDefinition.put(\"age\", ColumnDataType.Integer);\n                    tableDefinition.put(\"float\", ColumnDataType.Real);\n                    tableDefinition.put(\"date\", ColumnDataType.Date);\n                    tableDefinition.put(\"bool\", ColumnDataType.Boolean);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(tableName, tableDefinition);\n\n                    offlineReadyClient.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    MobileServiceSyncTable<OfflineReadyItem> localTable = offlineReadyClient.getSyncTable(tableName, OfflineReadyItem.class);\n\n                    MobileServiceTable<OfflineReadyItem> remoteTable = offlineReadyClient.getTable(tableName, OfflineReadyItem.class);\n\n                    offlineReadyClient.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    if (cleanStore) {\n                        localStore.delete(INCREMENTAL_PULL_STRATEGY_TABLE, tableName + \"_\" + queryKey);\n                    }\n\n                    localTable.purge(null).get();\n\n                    log(\"Removed all items from the local table\");\n\n                    Random rand = new Random();\n\n                    int elementsCount = rand.nextInt((100 - 50) + 1) + 50;\n\n                    String testFilter = UUID.randomUUID().toString();\n\n                    for (int i = 0; i < elementsCount; i++) {\n\n                        OfflineReadyItem item = new OfflineReadyItem(new Random());\n                        item.setName(testFilter);\n\n                        remoteTable.insert(item).get();\n\n                    }\n\n                    log(\"Inserted New Items on table\");\n                    Query pullQuery =\n                            QueryOperations\n                                    .tableName(tableName)\n                                    .field(\"name\").eq(testFilter);\n\n                    localTable.pull(pullQuery, queryKey).get();\n\n                    log(\"Pull new Elements\");\n\n                    MobileServiceList<OfflineReadyItem> localElements = localTable\n                            .read(null).get();\n\n                    if (localElements.size() != elementsCount) {\n                        log(\"Error, elements count should be the same.  Actual \" + localElements.size() + \" - Expected \" + elementsCount);\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    log(\"Elements count are the same\");\n\n                    log(\"Done\");\n\n                    callback.onTestComplete(this, result);\n\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n            }\n\n            ;\n        };\n\n        String testName = \"Offline - Incremental Sync\";\n\n        if (queryKey == null) {\n            testName += \"  - Simple Pull\";\n        } else {\n            testName += \"  - Incremental Pull\";\n        }\n\n        if (cleanStore) {\n            testName += \"  - Clear Store\";\n        } else {\n            testName += \"  - Maintain Store\";\n        }\n\n        if (complexQuery) {\n            testName += \"  - Complex Query\";\n        } else {\n            testName += \"  - Simple Query\";\n        }\n\n        test.setName(testName);\n\n        return test;\n    }\n\n\n    private TestCase createClearStoreTest() {\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                TestCase testCase = this;\n                TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(testCase);\n\n                try {\n                    client.getContext().deleteDatabase(OFFLINE_TABLE_NAME);\n                } catch (Exception e) {\n                    callback.onTestComplete(this, createResultFromException(e));\n                    return;\n                }\n\n                callback.onTestComplete(this, result);\n            }\n\n            ;\n        };\n\n        test.setName(\"Clear store\");\n\n        return test;\n    }\n\n    private boolean validateRequestCount(TestCase testCase, int currentCount, int expectedCount) {\n        testCase.log(\"So far \" + currentCount + \" requests sent to the server\");\n\n        if (currentCount != expectedCount) {\n            testCase.log(\"Error, expected \" + expectedCount + \" requests to have been sent to the server\");\n            return false;\n        }\n        return true;\n    }\n}\n\nclass ServiceFilterWithRequestCount implements ServiceFilter {\n\n    public int requestCount = 0;\n\n    @Override\n    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback) {\n\n        requestCount++;\n\n        return nextServiceFilterCallback.onNext(request);\n    }\n}\n\nclass ConflictResolvingSyncHandler implements MobileServiceSyncHandler {\n    // public delegate T ConflictResolution(T clientItem, T serverItem);\n    MobileServiceClient client;\n    // ConflictResolution conflictResolution;\n    TestCase test;\n\n    public ConflictResolvingSyncHandler(TestCase test, MobileServiceClient client) {\n        this.test = test;\n        this.client = client;\n    }\n\n    @Override\n    public JsonObject executeTableOperation(RemoteTableOperationProcessor processor, TableOperation operation) throws MobileServiceSyncHandlerException {\n\n        MobileServicePreconditionFailedExceptionJson ex = null;\n        JsonObject result = null;\n        do {\n            ex = null;\n            try {\n                test.log(\"Attempting to execute the operation\");\n                result = operation.accept(processor);\n            } catch (MobileServicePreconditionFailedExceptionJson e) {\n                ex = e;\n            } catch (Throwable e) {\n                ex = (MobileServicePreconditionFailedExceptionJson) e.getCause();\n            }\n\n            if (ex != null) {\n                test.log(\"A MobileServicePreconditionFailedException was thrown, ex.Value = \" + ex.getValue());\n                JsonObject serverItem = ex.getValue();\n\n                if (serverItem == null) {\n                    test.log(\"Item not returned in the exception, trying to retrieve it from the server\");\n                    try {\n                        serverItem = (JsonObject) (client.getTable(operation.getTableName()).lookUp(operation.getItemId())).get();\n                    } catch (InterruptedException e) {\n                        e.printStackTrace();\n                    } catch (ExecutionException e) {\n                        e.printStackTrace();\n                    }\n                }\n\n                OfflineReadyItem typedClientItem = JsonEntityParser.parseResults(processor.getItem(), client.getGsonBuilder().create(), OfflineReadyItem.class)\n                        .get(0);\n                OfflineReadyItem typedServerItem = JsonEntityParser.parseResults(serverItem, client.getGsonBuilder().create(), OfflineReadyItem.class).get(0);\n\n                OfflineReadyItem typedMergedItem = conflictResolution(typedClientItem, typedServerItem);\n\n                String mergedItemJson = client.getGsonBuilder().create().toJson(typedMergedItem);\n\n                JsonParser jsonParser = new JsonParser();\n                JsonObject mergedItem = (JsonObject) jsonParser.parse(mergedItemJson);\n\n                String serverVersion = serverItem.get(\"__version\").getAsString();\n\n                mergedItem.addProperty(\"__version\", serverVersion);\n\n                test.log(\"Merged the items, will try to resubmit the operation\");\n\n                //client.getSyncContext().removeTableOperation(ex);\n\n                processor.setItem(mergedItem);\n            }\n        } while (ex != null);\n\n        return result;\n\n    }\n\n    public OfflineReadyItem conflictResolution(OfflineReadyItem client, OfflineReadyItem server) {\n\n        OfflineReadyItem result = new OfflineReadyItem();\n\n        result.setId(client.getId());\n        result.setAge(client.getAge() > server.getAge() ? client.getAge() : server.getAge());\n        result.setDate(client.getDate().after(server.getDate()) ? client.getDate() : server.getDate());\n        result.setFlag(client.getFlag() || server.getFlag());\n        result.setFloatingNumber(client.getFloatingNumber() > server.getFloatingNumber() ? client.getFloatingNumber() : server.getFloatingNumber());\n        result.setName(client.getName());\n\n        return result;\n    }\n\n    @Override\n    public void onPushComplete(MobileServicePushCompletionResult pushCompletionResult) throws MobileServiceSyncHandlerException {\n\n    }\n}\n\nclass InstaItem {\n\n    @SerializedName(\"id\")\n    private String id;\n    @SerializedName(\"inspectedDateTime\")\n    private Date mInspectedDateTime;\n    @SerializedName(\"inventory\")\n    private String mInventory;\n    @SerializedName(\"wall\")\n    private String mWall;\n    @SerializedName(\"floor\")\n    private String mFloor;\n    @SerializedName(\"ceiling\")\n    private String mCeiling;\n    @SerializedName(\"inspected\")\n    private boolean mInspected;\n    @SerializedName(\"rejected\")\n    private boolean mRejected;\n    @SerializedName(\"inspectionId\")\n    private String mInspectionId;\n    @SerializedName(\"levelsInInspectionId\")\n    private String mLevelsInInspectionId;\n    @SerializedName(\"__version\")\n    private String mVersion;\n    @SerializedName(\"__deleted\")\n    private boolean mDeleted;\n\n    public InstaItem() {\n        id = \"0\";\n    }\n\n\n    public InstaItem(Random rndGen) {\n        this.mInventory = \"\";//Objects.toString(rndGen.nextLong(), null);\n        this.mWall = \"\";// rndGen.nextLong();\n        this.mFloor = \"\";// rndGen.nextLong();\n        this.mCeiling = \"\";// rndGen.nextLong();\n        this.mInspected = rndGen.nextInt(2) == 0;\n        this.mRejected = rndGen.nextInt(2) == 0;\n        this.mInspectionId = \"943E68F1-A912-4C2C-B9C1-CB8E24A4E301\";\n        this.mLevelsInInspectionId = \"97743F4F-7F35-4A60-9776-530E4BA0E3E3\";\n        this.mInspectedDateTime = new Date();\n    }\n\n    public String getId() {\n        return id;\n    }\n\n    public void setId(String id) {\n        this.id = id;\n    }\n\n    public Date getInspectedDateTime() {\n        return mInspectedDateTime;\n    }\n\n    public void setInspectedDateTime(Date mInspectedDateTime) {\n        this.mInspectedDateTime = mInspectedDateTime;\n    }\n\n    public String getInventory() {\n        return mInventory;\n    }\n\n    public void setInventory(String mAge) {\n        this.mInventory = mInventory;\n    }\n\n    public String getWall() {\n        return mWall;\n    }\n\n    public void setWall(String mWall) {\n        this.mWall = mWall;\n    }\n\n    public String getFloor() {\n        return mFloor;\n    }\n\n    public void setFloor(String mFloor) {\n        this.mFloor = mFloor;\n    }\n\n    public String getCeiling() {\n        return mCeiling;\n    }\n\n    public void setCeiling(String mCeiling) {\n        this.mCeiling = mCeiling;\n    }\n\n    public boolean getInspected() {\n        return mInspected;\n    }\n\n    public void setInspected(boolean mInspected) {\n        this.mInspected = mInspected;\n    }\n\n    public boolean getRejected() {\n        return mRejected;\n    }\n\n    public void setRejected(boolean mRejected) {\n        this.mRejected = mRejected;\n    }\n\n    public String getInspectionId() {\n        return mInspectionId;\n    }\n\n    public void setInspectionId(String mInspectionId) {\n        this.mInspectionId = mInspectionId;\n    }\n\n    public String getLevelsIninspectionId() {\n        return mLevelsInInspectionId;\n    }\n\n    public void setLevelsIninspectionId(String mLevelsIninspectionId) {\n        this.mLevelsInInspectionId = mLevelsIninspectionId;\n    }\n\n    public String getVersion() {\n        return mVersion;\n    }\n\n    public void setVersion(String mVersion) {\n        this.mVersion = mVersion;\n    }\n\n    public boolean getDeleted() {\n        return mDeleted;\n    }\n\n    public void setDeleted(boolean mDeleted) {\n        this.mDeleted = mDeleted;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (o == null)\n            return false;\n\n        if (!(o instanceof InstaItem))\n            return false;\n\n        InstaItem m = (InstaItem) o;\n\n        if (!Util.compare(mInventory, m.getInventory()))\n            return false;\n        if (!Util.compare(mWall, m.getWall()))\n            return false;\n        if (!Util.compare(mFloor, m.getFloor()))\n            return false;\n        if (!Util.compare(mCeiling, m.getCeiling()))\n            return false;\n        if (!Util.compare(mInspected, m.getInspected()))\n            return false;\n        if (!Util.compare(mRejected, m.getRejected()))\n            return false;\n        if (!Util.compare(mInspectionId, m.getInspectionId()))\n            return false;\n        if (!Util.compare(mLevelsInInspectionId, m.getLevelsIninspectionId()))\n            return false;\n        //if (!Util.compare(mVersion, m.getVersion()))\n        //    return false;\n        if (!Util.compare(mDeleted, m.getDeleted()))\n            return false;\n        //if (mInspectedDateTime != null) {\n        //    if (m.getInspectedDateTime() == null)\n        //        return false;\n        //    if (!Util.compare(Util.dateToString(mInspectedDateTime), Util.dateToString(m.getInspectedDateTime())))\n        //        return false;\n        //}\n\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(Locale.getDefault(), \"InstaItem[Id={0},Inventory={1},Wall={2},Floor={3},Ceiling={4},Inspected={5}, Rejected={6}, InspectionId={7}, LevelsIninspectionId={8}, Version={9}, Deleted={9}, InspectedDateTime={10}]\",\n                id, mInventory, mWall, mFloor, mCeiling, mInspected, mRejected, mInspectionId, mLevelsInInspectionId, mVersion, mDeleted,\n                Util.dateToString(mInspectedDateTime));\n    }\n}\n\nclass PersonItem {\n\n    @SerializedName(\"id\")\n    private String id;\n    @SerializedName(\"name\")\n    private String mName;\n    @SerializedName(\"age\")\n    private int mAge;\n\n    public PersonItem() {\n        id = \"0\";\n    }\n\n\n    public PersonItem(Random rndGen, String partition) {\n\n        this.id = partition + \",\" + UUID.randomUUID().toString();\n        this.mName = Integer.toString(rndGen.nextInt(2));\n        this.mAge = rndGen.nextInt(99);\n    }\n\n    public String getId() {\n        return id;\n    }\n\n    public void setId(String id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return mName;\n    }\n\n    public void setName(String mName) {\n        this.mName = mName;\n    }\n\n    public int getAge() {\n        return mAge;\n    }\n\n    public void setAge(int mAge) {\n        this.mAge = mAge;\n    }\n\n\n    @Override\n    public boolean equals(Object o) {\n        if (o == null)\n            return false;\n\n        if (!(o instanceof InstaItem))\n            return false;\n\n        PersonItem m = (PersonItem) o;\n\n        if (!Util.compare(mName, m.getName()))\n            return false;\n        if (!Util.compare(mAge, m.getAge()))\n            return false;\n\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(Locale.getDefault(), \"PersonItem[Id={0},Name={1},Age={2}]\",\n                id, mName, mAge);\n    }\n}\n\nclass OfflineReadyItem {\n\n    @SerializedName(\"id\")\n    private String id;\n    @SerializedName(\"name\")\n    private String mName;\n    @SerializedName(\"age\")\n    private int mAge;\n    @SerializedName(\"float\")\n    private double mFloatingNumber;\n    @SerializedName(\"date\")\n    private Date mDate;\n    @SerializedName(\"bool\")\n    private boolean mFlag;\n    @SerializedName(\"__version\")\n    private String mVersion;\n\n    public OfflineReadyItem() {\n        id = \"0\";\n    }\n\n    public OfflineReadyItem(Random rndGen) {\n        this.id = java.util.UUID.randomUUID().toString();\n        this.mName = \"\";// rndGen.nextLong();\n        this.mAge = 20;//rndGen.nextInt();\n        this.mFloatingNumber = rndGen.nextInt() * rndGen.nextDouble();\n        this.mDate = new Date();\n        this.mFlag = rndGen.nextInt(2) == 0;\n    }\n\n    public String getId() {\n        return id;\n    }\n\n    public void setId(String id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return mName;\n    }\n\n    public void setName(String mName) {\n        this.mName = mName;\n    }\n\n    public int getAge() {\n        return mAge;\n    }\n\n    public void setAge(int mAge) {\n        this.mAge = mAge;\n    }\n\n    public double getFloatingNumber() {\n        return mFloatingNumber;\n    }\n\n    public void setFloatingNumber(double mFloatingNumber) {\n        this.mFloatingNumber = mFloatingNumber;\n    }\n\n    public Date getDate() {\n        return mDate;\n    }\n\n    public void setDate(Date mDate) {\n        this.mDate = mDate;\n    }\n\n    public boolean getFlag() {\n        return mFlag;\n    }\n\n    public void setFlag(boolean mFlag) {\n        this.mFlag = mFlag;\n    }\n\n    public String getVersion() {\n        return mVersion;\n    }\n\n    public void setVersion(String version) {\n        this.mVersion = version;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (o == null)\n            return false;\n\n        if (!(o instanceof OfflineReadyItem))\n            return false;\n        OfflineReadyItem m = (OfflineReadyItem) o;\n\n        if (!Util.compare(mName, m.getName()))\n            return false;\n        if (!Util.compare(mAge, m.getAge()))\n            return false;\n        if (!Util.compare(mFloatingNumber, m.getFloatingNumber()))\n            return false;\n        if (mDate != null) {\n            if (m.mDate == null)\n                return false;\n            if (!Util.compare(mDate, m.getDate()))\n                return false;\n        }\n        if (!Util.compare(mFlag, m.getFlag()))\n            return false;\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(Locale.getDefault(), \"OfflineReadyItem[Id={0},Name={1},Age={2},FloatingNumber={3},Date={4},Flag={5},Version={6}]\", id, mName,\n                mAge, mFloatingNumber, Util.dateToString(mDate), mFlag, mVersion);\n    }\n}\n\nclass OfflineReadyItemNoVersion {\n\n    @SerializedName(\"id\")\n    private String id;\n    @SerializedName(\"name\")\n    private String mName;\n    @SerializedName(\"age\")\n    private int mAge;\n    @SerializedName(\"float\")\n    private double mFloatingNumber;\n    @SerializedName(\"date\")\n    private Date mDate;\n    @SerializedName(\"bool\")\n    private boolean mFlag;\n\n    public OfflineReadyItemNoVersion() {\n        id = \"0\";\n    }\n\n    public OfflineReadyItemNoVersion(Random rndGen) {\n        this.id = java.util.UUID.randomUUID().toString();\n        this.mName = \"\";// rndGen.nextLong();\n        this.mAge = 20;//rndGen.nextInt();\n        this.mFloatingNumber = rndGen.nextInt() * rndGen.nextDouble();\n        this.mDate = new Date();\n        this.mFlag = rndGen.nextInt(2) == 0;\n    }\n\n    public String getId() {\n        return id;\n    }\n\n    public void setId(String id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return mName;\n    }\n\n    public void setName(String mName) {\n        this.mName = mName;\n    }\n\n    public int getAge() {\n        return mAge;\n    }\n\n    public void setAge(int mAge) {\n        this.mAge = mAge;\n    }\n\n    public double getFloatingNumber() {\n        return mFloatingNumber;\n    }\n\n    public void setFloatingNumber(double mFloatingNumber) {\n        this.mFloatingNumber = mFloatingNumber;\n    }\n\n    public Date getDate() {\n        return mDate;\n    }\n\n    public void setDate(Date mDate) {\n        this.mDate = mDate;\n    }\n\n    public boolean getFlag() {\n        return mFlag;\n    }\n\n    public void setFlag(boolean mFlag) {\n        this.mFlag = mFlag;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (o == null)\n            return false;\n\n        if (!(o instanceof OfflineReadyItemNoVersion))\n            return false;\n        OfflineReadyItemNoVersion m = (OfflineReadyItemNoVersion) o;\n\n        if (!Util.compare(mName, m.getName()))\n            return false;\n        if (!Util.compare(mAge, m.getAge()))\n            return false;\n        if (!Util.compare(mFloatingNumber, m.getFloatingNumber()))\n            return false;\n        if (mDate != null) {\n            if (m.mDate == null)\n                return false;\n            if (!Util.compare(mDate, m.getDate()))\n                return false;\n        }\n        if (!Util.compare(mFlag, m.getFlag()))\n            return false;\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(Locale.getDefault(), \"OfflineReadyItem[Id={0},Name={1},Age={2},FloatingNumber={3},Date={4},Flag={5}]\", id, mName,\n                mAge, mFloatingNumber, Util.dateToString(mDate), mFlag);\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/PushTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport com.google.android.gcm.GCMRegistrar;\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.MainActivity;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.push.GCMMessageHelper;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.push.GCMMessageManager;\n\npublic class PushTests extends TestGroup {\n\n    private static final String tableName = \"droidPushTest\";\n\n    /*\n     * Pointer to the main activity used to register with GCM\n     */\n    public static MainActivity mainActivity;\n\n    public static String registrationId;\n\n    public PushTests() {\n        super(\"Push tests\");\n\n        this.addTest(createGCMRegisterTest());\n\n        String json = \"{'name':'John Doe','age':'33'}\".replace('\\'', '\\\"');\n        this.addTest(createPushTest(\"Push - Simple data\", json));\n        json = \"{'ticker':'MSFT'}\".replace('\\'', '\\\"');\n        this.addTest(createPushTest(\"Push - Single value\", json));\n        json = \"{'non-ASCII':'Latin-ãéìôü ÇñÑ, arabic-لكتاب على الطاولة, chinese-这本书在桌子上'}\";\n        this.addTest(createPushTest(\"Push - non-ASCII characters\", json));\n        json = \"\\\"A single string\\\"\";\n        this.addTest(createPushTest(\"Push - Single string\", json));\n\n        this.addTest(createNegativePushTest(\"(Neg) Invalid payload type (array)\", \"[{\\\"name\\\":\\\"John Doe\\\"}]\"));\n        this.addTest(createNegativePushTest(\"(Neg) Invalid payload type (number)\", \"1234\"));\n        this.addTest(createNegativePushTest(\"(Neg) Invalid payload value (number)\", \"{\\\"name\\\":1234}\"));\n        this.addTest(createNegativePushTest(\"(Neg) Invalid payload value (object)\", \"{'name':{'first':'John','last':'Doe'}}\".replace('\\'', '\\\"')));\n\n        this.addTest(createGCMUnregisterTest());\n    }\n\n    private TestCase createNegativePushTest(String testName, String jsonPayload) {\n        final JsonElement payload = new JsonParser().parse(jsonPayload);\n        return new TestCase(testName) {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                JsonObject jsonObject = null;\n                final TestCase testCase = this;\n\n                TestResult testResult = new TestResult();\n                testResult.setTestCase(testCase);\n\n                try {\n\n                    MobileServiceJsonTable table = client.getTable(tableName);\n                    JsonObject item = new JsonObject();\n                    item.addProperty(\"method\", \"send\");\n                    item.addProperty(\"registrationId\", registrationId);\n                    item.add(\"payload\", payload);\n\n                    jsonObject = table.insert(item).get();\n\n                    log(\"Error, expected exception, but got none.\");\n                    log(\"Returned jsonObject: \" + jsonObject.toString());\n                    testResult.setStatus(TestStatus.Failed);\n\n                    callback.onTestComplete(testCase, testResult);\n\n                } catch (Exception e) {\n\n                    log(\"Received expected exception: \" + e.toString());\n\n                    if (jsonObject != null) {\n                        log(\"Returned jsonObject: \" + jsonObject.toString());\n                    }\n\n                    testResult.setStatus(TestStatus.Passed);\n                    callback.onTestComplete(testCase, testResult);\n                    return;\n                }\n            }\n\n            ;\n        };\n    }\n\n    private TestCase createPushTest(String testName, String jsonPayload) {\n        final JsonElement payload = new JsonParser().parse(jsonPayload);\n        TestCase result = new TestCase(testName) {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                try {\n\n                    MobileServiceJsonTable table = client.getTable(tableName);\n                    JsonObject item = new JsonObject();\n                    item.addProperty(\"method\", \"send\");\n                    item.addProperty(\"registrationId\", registrationId);\n                    item.add(\"payload\", payload);\n\n                    final TestCase test = this;\n                    JsonObject jsonObject = table.insert(item).get();\n                    final JsonObject expectedPayload;\n                    if (payload.isJsonObject()) {\n                        expectedPayload = payload.getAsJsonObject();\n                    } else {\n                        expectedPayload = new JsonObject();\n                        expectedPayload.add(\"message\", payload);\n                    }\n\n                    log(\"OnCompleted: \" + jsonObject.toString());\n                    GCMMessageManager.instance.waitForPushMessage(5000, GCMMessageHelper.getPushCallback(test, expectedPayload, callback));\n                } catch (Exception exception) {\n                    callback.onTestComplete(this, createResultFromException(exception));\n                    return;\n                }\n            }\n\n            ;\n        };\n\n        return result;\n    }\n\n    private TestCase createGCMUnregisterTest() {\n        TestCase testCase = new TestCase(\"Unregister from GCM\") {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, TestExecutionCallback callback) {\n                GCMRegistrar.unregister(mainActivity);\n                log(\"Unregistered from GCM\");\n                TestResult testResult = new TestResult();\n                testResult.setStatus(TestStatus.Passed);\n                testResult.setTestCase(this);\n                callback.onTestComplete(this, testResult);\n            }\n\n        };\n\n        return testCase;\n    }\n\n    private TestCase createGCMRegisterTest() {\n        TestCase testCase = new TestCase(\"Register app with GCM\") {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase test = this;\n                final TestResult testResult = new TestResult();\n                testResult.setTestCase(this);\n                GCMRegistrar.checkDevice(mainActivity);\n                GCMRegistrar.checkManifest(mainActivity);\n                String registrationId = GCMRegistrar.getRegistrationId(mainActivity);\n                PushTests.registrationId = registrationId;\n                log(\"Registration ID: \" + PushTests.registrationId);\n                if (\"\".equals(registrationId)) {\n                    GCMRegistrar.register(mainActivity, mainActivity.getGCMSenderId());\n                    log(\"Called GCMRegistrar.register\");\n                    GCMMessageManager.instance.waitForRegistrationMessage(5000, GCMMessageHelper.getRegistrationCallBack(test, callback, PushTests.class));\n                } else {\n                    testResult.setStatus(TestStatus.Passed);\n                    callback.onTestComplete(this, testResult);\n                }\n            }\n\n        };\n\n        return testCase;\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/QueryTestData.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.IntIdMovie;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.StringIdMovie;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Random;\n\nimport static com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util.getUTCDate;\n\npublic class QueryTestData {\n    private static List<IntIdMovie> mAllIntIdMovies;\n\n    static {\n        mAllIntIdMovies = new ArrayList<IntIdMovie>();\n\n        mAllIntIdMovies.add(new IntIdMovie(false, 142, \"R\", getUTCDate(1994, 10, 14), \"The Shawshank Redemption\", 1994));\n        mAllIntIdMovies.add(new IntIdMovie(true, 175, \"R\", getUTCDate(1972, 3, 24), \"The Godfather\", 1972));\n        mAllIntIdMovies.add(new IntIdMovie(true, 200, \"R\", getUTCDate(1974, 12, 20), \"The Godfather: Part II\", 1974));\n        mAllIntIdMovies.add(new IntIdMovie(false, 168, \"R\", getUTCDate(1994, 10, 14), \"Pulp Fiction\", 1994));\n        mAllIntIdMovies.add(new IntIdMovie(false, 161, null, getUTCDate(1967, 12, 29), \"The Good, the Bad and the Ugly\", 1966));\n        mAllIntIdMovies.add(new IntIdMovie(false, 96, null, getUTCDate(1957, 4, 10), \"12 Angry Men\", 1957));\n        mAllIntIdMovies.add(new IntIdMovie(false, 152, \"PG-13\", getUTCDate(2008, 7, 18), \"The Dark Knight\", 2008));\n        mAllIntIdMovies.add(new IntIdMovie(true, 195, \"R\", getUTCDate(1993, 12, 15), \"Schindler's List\", 1993));\n        mAllIntIdMovies.add(new IntIdMovie(true, 201, \"PG-13\", getUTCDate(2003, 12, 17), \"The Lord of the Rings: The Return of the King\", 2003));\n        mAllIntIdMovies.add(new IntIdMovie(false, 139, \"R\", getUTCDate(1999, 10, 15), \"Fight Club\", 1999));\n        mAllIntIdMovies.add(new IntIdMovie(false, 127, \"PG\", getUTCDate(1980, 5, 21), \"Star Wars: Episode V - The Empire Strikes Back\", 1980));\n        mAllIntIdMovies.add(new IntIdMovie(true, 133, null, getUTCDate(1975, 11, 21), \"One Flew Over the Cuckoo's Nest\", 1975));\n        mAllIntIdMovies.add(new IntIdMovie(false, 178, \"PG-13\", getUTCDate(2001, 12, 19), \"The Lord of the Rings: The Fellowship of the Ring\", 2001));\n        mAllIntIdMovies.add(new IntIdMovie(false, 148, \"PG-13\", getUTCDate(2010, 7, 16), \"Inception\", 2010));\n        mAllIntIdMovies.add(new IntIdMovie(false, 146, \"R\", getUTCDate(1990, 9, 19), \"Goodfellas\", 1990));\n        mAllIntIdMovies.add(new IntIdMovie(false, 121, \"PG\", getUTCDate(1977, 5, 25), \"Star Wars\", 1977));\n        mAllIntIdMovies.add(new IntIdMovie(false, 141, null, getUTCDate(1956, 11, 19), \"Seven Samurai\", 1954));\n        mAllIntIdMovies.add(new IntIdMovie(false, 136, \"R\", getUTCDate(1999, 3, 31), \"The Matrix\", 1999));\n        mAllIntIdMovies.add(new IntIdMovie(true, 142, \"PG-13\", getUTCDate(1994, 7, 6), \"Forrest Gump\", 1994));\n        mAllIntIdMovies.add(new IntIdMovie(false, 130, \"R\", getUTCDate(2002, 1, 1), \"City of God\", 2002));\n        mAllIntIdMovies.add(new IntIdMovie(false, 179, \"PG-13\", getUTCDate(2002, 12, 18), \"The Lord of the Rings: The Two Towers\", 2002));\n        mAllIntIdMovies.add(new IntIdMovie(false, 175, \"PG-13\", getUTCDate(1968, 12, 21), \"Once Upon a Time in the West\", 1968));\n        mAllIntIdMovies.add(new IntIdMovie(false, 127, \"R\", getUTCDate(1995, 9, 22), \"Se7en\", 1995));\n        mAllIntIdMovies.add(new IntIdMovie(true, 118, \"R\", getUTCDate(1991, 2, 14), \"The Silence of the Lambs\", 1991));\n        mAllIntIdMovies.add(new IntIdMovie(true, 102, \"PG\", getUTCDate(1943, 1, 23), \"Casablanca\", 1942));\n        mAllIntIdMovies.add(new IntIdMovie(false, 106, \"R\", getUTCDate(1995, 8, 16), \"The Usual Suspects\", 1995));\n        mAllIntIdMovies.add(new IntIdMovie(false, 115, \"PG\", getUTCDate(1981, 6, 12), \"Raiders of the Lost Ark\", 1981));\n        mAllIntIdMovies.add(new IntIdMovie(false, 112, \"PG\", getUTCDate(1955, 1, 13), \"Rear Window\", 1954));\n        mAllIntIdMovies.add(new IntIdMovie(false, 109, \"TV-14\", getUTCDate(1960, 9, 8), \"Psycho\", 1960));\n        mAllIntIdMovies.add(new IntIdMovie(false, 130, \"PG\", getUTCDate(1947, 1, 6), \"It's a Wonderful Life\", 1946));\n        mAllIntIdMovies.add(new IntIdMovie(false, 110, \"R\", getUTCDate(1994, 11, 18), \"Léon: The Professional\", 1994));\n        mAllIntIdMovies.add(new IntIdMovie(false, 110, null, getUTCDate(1950, 8, 25), \"Sunset Blvd.\", 1950));\n        mAllIntIdMovies.add(new IntIdMovie(false, 113, \"R\", getUTCDate(2000, 10, 11), \"Memento\", 2000));\n        mAllIntIdMovies.add(new IntIdMovie(false, 165, \"PG-13\", getUTCDate(2012, 7, 20), \"The Dark Knight Rises\", 2012));\n        mAllIntIdMovies.add(new IntIdMovie(false, 119, \"R\", getUTCDate(1999, 2, 12), \"American History X\", 1998));\n        mAllIntIdMovies.add(new IntIdMovie(false, 153, \"R\", getUTCDate(1979, 8, 15), \"Apocalypse Now\", 1979));\n        mAllIntIdMovies.add(new IntIdMovie(false, 152, \"R\", getUTCDate(1991, 7, 3), \"Terminator 2: Judgment Day\", 1991));\n        mAllIntIdMovies.add(new IntIdMovie(false, 95, \"PG\", getUTCDate(1964, 1, 29), \"Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb\",\n                1964));\n        mAllIntIdMovies.add(new IntIdMovie(false, 169, \"R\", getUTCDate(1998, 7, 24), \"Saving Private Ryan\", 1998));\n        mAllIntIdMovies.add(new IntIdMovie(false, 117, \"TV-14\", getUTCDate(1979, 5, 25), \"Alien\", 1979));\n        mAllIntIdMovies.add(new IntIdMovie(false, 136, null, getUTCDate(1959, 9, 26), \"North by Northwest\", 1959));\n        mAllIntIdMovies.add(new IntIdMovie(false, 87, null, getUTCDate(1931, 3, 7), \"City Lights\", 1931));\n        mAllIntIdMovies.add(new IntIdMovie(false, 125, \"PG\", getUTCDate(2001, 7, 20), \"Spirited Away\", 2001));\n        mAllIntIdMovies.add(new IntIdMovie(false, 119, \"PG\", getUTCDate(1941, 9, 5), \"Citizen Kane\", 1941));\n        mAllIntIdMovies.add(new IntIdMovie(false, 87, null, getUTCDate(1936, 2, 25), \"Modern Times\", 1936));\n        mAllIntIdMovies.add(new IntIdMovie(false, 142, \"R\", getUTCDate(1980, 5, 23), \"The Shining\", 1980));\n        mAllIntIdMovies.add(new IntIdMovie(false, 129, null, getUTCDate(1958, 7, 21), \"Vertigo\", 1958));\n        mAllIntIdMovies.add(new IntIdMovie(false, 116, \"PG\", getUTCDate(1985, 7, 3), \"Back to the Future\", 1985));\n        mAllIntIdMovies.add(new IntIdMovie(true, 122, \"R\", getUTCDate(1999, 10, 1), \"American Beauty\", 1999));\n        mAllIntIdMovies.add(new IntIdMovie(false, 117, null, getUTCDate(1931, 8, 30), \"M\", 1931));\n        mAllIntIdMovies.add(new IntIdMovie(false, 150, \"R\", getUTCDate(2003, 3, 28), \"The Pianist\", 2002));\n        mAllIntIdMovies.add(new IntIdMovie(true, 151, \"R\", getUTCDate(2006, 10, 6), \"The Departed\", 2006));\n        mAllIntIdMovies.add(new IntIdMovie(false, 113, \"R\", getUTCDate(1976, 2, 8), \"Taxi Driver\", 1976));\n        mAllIntIdMovies.add(new IntIdMovie(false, 103, \"G\", getUTCDate(2010, 6, 18), \"Toy Story 3\", 2010));\n        mAllIntIdMovies.add(new IntIdMovie(false, 88, null, getUTCDate(1957, 10, 25), \"Paths of Glory\", 1957));\n        mAllIntIdMovies.add(new IntIdMovie(false, 118, \"PG-13\", getUTCDate(1999, 2, 12), \"Life Is Beautiful\", 1997));\n        mAllIntIdMovies.add(new IntIdMovie(false, 107, null, getUTCDate(1944, 4, 24), \"Double Indemnity\", 1944));\n        mAllIntIdMovies.add(new IntIdMovie(false, 154, \"R\", getUTCDate(1986, 7, 18), \"Aliens\", 1986));\n        mAllIntIdMovies.add(new IntIdMovie(false, 98, \"G\", getUTCDate(2008, 6, 27), \"WALL-E\", 2008));\n        mAllIntIdMovies.add(new IntIdMovie(false, 137, \"R\", getUTCDate(2006, 3, 23), \"The Lives of Others\", 2006));\n        mAllIntIdMovies.add(new IntIdMovie(false, 136, \"R\", getUTCDate(1972, 2, 2), \"A Clockwork Orange\", 1971));\n        mAllIntIdMovies.add(new IntIdMovie(false, 122, \"R\", getUTCDate(2001, 4, 24), \"Amélie\", 2001));\n        mAllIntIdMovies.add(new IntIdMovie(true, 155, \"R\", getUTCDate(2000, 5, 5), \"Gladiator\", 2000));\n        mAllIntIdMovies.add(new IntIdMovie(false, 189, \"R\", getUTCDate(1999, 12, 10), \"The Green Mile\", 1999));\n        mAllIntIdMovies.add(new IntIdMovie(false, 112, \"R\", getUTCDate(2011, 11, 2), \"The Intouchables\", 2011));\n        mAllIntIdMovies.add(new IntIdMovie(true, 227, null, getUTCDate(1963, 1, 30), \"Lawrence of Arabia\", 1962));\n        mAllIntIdMovies.add(new IntIdMovie(false, 129, null, getUTCDate(1963, 3, 16), \"To Kill a Mockingbird\", 1962));\n        mAllIntIdMovies.add(new IntIdMovie(false, 130, \"PG-13\", getUTCDate(2006, 10, 20), \"The Prestige\", 2006));\n        mAllIntIdMovies.add(new IntIdMovie(false, 125, null, getUTCDate(1941, 3, 7), \"The Great Dictator\", 1940));\n        mAllIntIdMovies.add(new IntIdMovie(false, 99, \"R\", getUTCDate(1992, 10, 23), \"Reservoir Dogs\", 1992));\n        mAllIntIdMovies.add(new IntIdMovie(false, 149, \"R\", getUTCDate(1982, 2, 10), \"Das Boot\", 1981));\n        mAllIntIdMovies.add(new IntIdMovie(false, 102, \"NC-17\", getUTCDate(2000, 10, 27), \"Requiem for a Dream\", 2000));\n        mAllIntIdMovies.add(new IntIdMovie(false, 93, null, getUTCDate(1949, 8, 31), \"The Third Man\", 1949));\n        mAllIntIdMovies.add(new IntIdMovie(false, 126, null, getUTCDate(1948, 1, 24), \"The Treasure of the Sierra Madre\", 1948));\n        mAllIntIdMovies.add(new IntIdMovie(false, 108, \"R\", getUTCDate(2004, 3, 19), \"Eternal Sunshine of the Spotless Mind\", 2004));\n        mAllIntIdMovies.add(new IntIdMovie(false, 155, \"PG\", getUTCDate(1990, 2, 23), \"Cinema Paradiso\", 1988));\n        mAllIntIdMovies.add(new IntIdMovie(false, 139, \"R\", getUTCDate(1984, 5, 23), \"Once Upon a Time in America\", 1984));\n        mAllIntIdMovies.add(new IntIdMovie(false, 130, null, getUTCDate(1974, 6, 20), \"Chinatown\", 1974));\n        mAllIntIdMovies.add(new IntIdMovie(false, 138, \"R\", getUTCDate(1997, 9, 19), \"L.A. Confidential\", 1997));\n        mAllIntIdMovies.add(new IntIdMovie(false, 89, \"G\", getUTCDate(1994, 6, 24), \"The Lion King\", 1994));\n        mAllIntIdMovies.add(new IntIdMovie(false, 134, \"PG\", getUTCDate(1983, 5, 25), \"Star Wars: Episode VI - Return of the Jedi\", 1983));\n        mAllIntIdMovies.add(new IntIdMovie(false, 116, \"R\", getUTCDate(1987, 6, 26), \"Full Metal Jacket\", 1987));\n        mAllIntIdMovies.add(new IntIdMovie(false, 91, \"PG\", getUTCDate(1975, 5, 25), \"Monty Python and the Holy Grail\", 1975));\n        mAllIntIdMovies.add(new IntIdMovie(true, 177, \"R\", getUTCDate(1995, 5, 24), \"Braveheart\", 1995));\n        mAllIntIdMovies.add(new IntIdMovie(false, 103, null, getUTCDate(1952, 4, 11), \"Singin' in the Rain\", 1952));\n        mAllIntIdMovies.add(new IntIdMovie(false, 120, \"R\", getUTCDate(2003, 11, 21), \"Oldboy\", 2003));\n        mAllIntIdMovies.add(new IntIdMovie(false, 120, null, getUTCDate(1959, 3, 29), \"Some Like It Hot\", 1959));\n        mAllIntIdMovies.add(new IntIdMovie(true, 160, \"PG\", getUTCDate(1984, 9, 19), \"Amadeus\", 1984));\n        mAllIntIdMovies.add(new IntIdMovie(false, 114, null, getUTCDate(1927, 3, 13), \"Metropolis\", 1927));\n        mAllIntIdMovies.add(new IntIdMovie(false, 88, null, getUTCDate(1951, 12, 26), \"Rashomon\", 1950));\n        mAllIntIdMovies.add(new IntIdMovie(false, 93, null, getUTCDate(1949, 12, 13), \"Bicycle Thieves\", 1948));\n        mAllIntIdMovies.add(new IntIdMovie(false, 141, null, getUTCDate(1968, 4, 6), \"2001: A Space Odyssey\", 1968));\n        mAllIntIdMovies.add(new IntIdMovie(true, 131, \"R\", getUTCDate(1992, 8, 7), \"Unforgiven\", 1992));\n        mAllIntIdMovies.add(new IntIdMovie(true, 138, null, getUTCDate(1951, 1, 15), \"All About Eve\", 1950));\n        mAllIntIdMovies.add(new IntIdMovie(true, 125, null, getUTCDate(1960, 9, 16), \"The Apartment\", 1960));\n        mAllIntIdMovies.add(new IntIdMovie(false, 127, \"PG\", getUTCDate(1989, 5, 24), \"Indiana Jones and the Last Crusade\", 1989));\n        mAllIntIdMovies.add(new IntIdMovie(true, 129, null, getUTCDate(1974, 1, 10), \"The Sting\", 1973));\n        mAllIntIdMovies.add(new IntIdMovie(false, 129, \"R\", getUTCDate(1980, 12, 19), \"Raging Bull\", 1980));\n        mAllIntIdMovies.add(new IntIdMovie(true, 161, null, getUTCDate(1957, 12, 14), \"The Bridge on the River Kwai\", 1957));\n        mAllIntIdMovies.add(new IntIdMovie(false, 131, \"R\", getUTCDate(1988, 7, 15), \"Die Hard\", 1988));\n        mAllIntIdMovies.add(new IntIdMovie(false, 116, null, getUTCDate(1958, 2, 6), \"Witness for the Prosecution\", 1957));\n        mAllIntIdMovies.add(new IntIdMovie(false, 140, \"PG-13\", getUTCDate(2005, 6, 15), \"Batman Begins\", 2005));\n        mAllIntIdMovies.add(new IntIdMovie(false, 123, \"PG-13\", getUTCDate(2011, 3, 16), \"A Separation\", 2011));\n        mAllIntIdMovies.add(new IntIdMovie(false, 89, null, getUTCDate(1988, 4, 16), \"Grave of the Fireflies\", 1988));\n        mAllIntIdMovies.add(new IntIdMovie(false, 118, \"R\", getUTCDate(2007, 1, 19), \"Pan's Labyrinth\", 2006));\n        mAllIntIdMovies.add(new IntIdMovie(false, 156, \"R\", getUTCDate(2004, 9, 16), \"Downfall\", 2004));\n        mAllIntIdMovies.add(new IntIdMovie(false, 129, null, getUTCDate(1939, 10, 19), \"Mr. Smith Goes to Washington\", 1939));\n        mAllIntIdMovies.add(new IntIdMovie(false, 75, \"TV-MA\", getUTCDate(1961, 9, 13), \"Yojimbo\", 1961));\n        mAllIntIdMovies.add(new IntIdMovie(false, 172, null, getUTCDate(1963, 7, 4), \"The Great Escape\", 1963));\n        mAllIntIdMovies.add(new IntIdMovie(false, 132, \"R\", getUTCDate(1967, 5, 10), \"For a Few Dollars More\", 1965));\n        mAllIntIdMovies.add(new IntIdMovie(false, 102, \"R\", getUTCDate(2001, 1, 19), \"Snatch.\", 2000));\n        mAllIntIdMovies.add(new IntIdMovie(false, 153, \"R\", getUTCDate(2009, 8, 21), \"Inglourious Basterds\", 2009));\n        mAllIntIdMovies.add(new IntIdMovie(true, 108, null, getUTCDate(1954, 6, 24), \"On the Waterfront\", 1954));\n        mAllIntIdMovies.add(new IntIdMovie(false, 124, \"PG\", getUTCDate(1980, 10, 10), \"The Elephant Man\", 1980));\n        mAllIntIdMovies.add(new IntIdMovie(false, 96, null, getUTCDate(1958, 10, 13), \"The Seventh Seal\", 1957));\n        mAllIntIdMovies.add(new IntIdMovie(false, 81, \"TV-G\", getUTCDate(1995, 11, 22), \"Toy Story\", 1995));\n        mAllIntIdMovies.add(new IntIdMovie(false, 100, null, getUTCDate(1941, 10, 18), \"The Maltese Falcon\", 1941));\n        mAllIntIdMovies.add(new IntIdMovie(false, 170, \"R\", getUTCDate(1995, 12, 15), \"Heat\", 1995));\n        mAllIntIdMovies.add(new IntIdMovie(false, 75, null, getUTCDate(1927, 2, 24), \"The General\", 1926));\n        mAllIntIdMovies.add(new IntIdMovie(false, 116, \"R\", getUTCDate(2009, 1, 9), \"Gran Torino\", 2008));\n        mAllIntIdMovies.add(new IntIdMovie(true, 130, null, getUTCDate(1940, 4, 12), \"Rebecca\", 1940));\n        mAllIntIdMovies.add(new IntIdMovie(false, 117, \"R\", getUTCDate(1982, 6, 25), \"Blade Runner\", 1982));\n        mAllIntIdMovies.add(new IntIdMovie(false, 143, \"PG-13\", getUTCDate(2012, 5, 4), \"The Avengers\", 2012));\n        mAllIntIdMovies.add(new IntIdMovie(false, 91, null, getUTCDate(1959, 6, 22), \"Wild Strawberries\", 1957));\n        mAllIntIdMovies.add(new IntIdMovie(false, 98, \"R\", getUTCDate(1996, 4, 5), \"Fargo\", 1996));\n        mAllIntIdMovies.add(new IntIdMovie(false, 68, null, getUTCDate(1921, 2, 6), \"The Kid\", 1921));\n        mAllIntIdMovies.add(new IntIdMovie(false, 170, \"R\", getUTCDate(1983, 12, 9), \"Scarface\", 1983));\n        mAllIntIdMovies.add(new IntIdMovie(false, 108, \"PG-13\", getUTCDate(1958, 6, 8), \"Touch of Evil\", 1958));\n        mAllIntIdMovies.add(new IntIdMovie(false, 117, \"R\", getUTCDate(1998, 3, 6), \"The Big Lebowski\", 1998));\n        mAllIntIdMovies.add(new IntIdMovie(false, 162, \"R\", getUTCDate(1985, 6, 1), \"Ran\", 1985));\n        mAllIntIdMovies.add(new IntIdMovie(true, 182, \"R\", getUTCDate(1979, 2, 23), \"The Deer Hunter\", 1978));\n        mAllIntIdMovies.add(new IntIdMovie(false, 126, null, getUTCDate(1967, 11, 1), \"Cool Hand Luke\", 1967));\n        mAllIntIdMovies.add(new IntIdMovie(false, 147, \"R\", getUTCDate(2005, 4, 1), \"Sin City\", 2005));\n        mAllIntIdMovies.add(new IntIdMovie(false, 72, null, getUTCDate(1925, 6, 26), \"The Gold Rush\", 1925));\n        mAllIntIdMovies.add(new IntIdMovie(false, 101, null, getUTCDate(1951, 6, 30), \"Strangers on a Train\", 1951));\n        mAllIntIdMovies.add(new IntIdMovie(true, 105, null, getUTCDate(1934, 2, 23), \"It Happened One Night\", 1934));\n        mAllIntIdMovies.add(new IntIdMovie(true, 122, \"R\", getUTCDate(2007, 11, 21), \"No Country for Old Men\", 2007));\n        mAllIntIdMovies.add(new IntIdMovie(false, 130, \"PG\", getUTCDate(1975, 6, 20), \"Jaws\", 1975));\n        mAllIntIdMovies.add(new IntIdMovie(false, 107, \"R\", getUTCDate(1999, 3, 5), \"Lock, Stock and Two Smoking Barrels\", 1998));\n        mAllIntIdMovies.add(new IntIdMovie(false, 107, \"PG-13\", getUTCDate(1999, 8, 6), \"The Sixth Sense\", 1999));\n        mAllIntIdMovies.add(new IntIdMovie(false, 121, \"PG-13\", getUTCDate(2005, 2, 4), \"Hotel Rwanda\", 2004));\n        mAllIntIdMovies.add(new IntIdMovie(false, 85, null, getUTCDate(1952, 7, 30), \"High Noon\", 1952));\n        mAllIntIdMovies.add(new IntIdMovie(true, 120, \"R\", getUTCDate(1986, 12, 24), \"Platoon\", 1986));\n        mAllIntIdMovies.add(new IntIdMovie(false, 109, \"R\", getUTCDate(1982, 6, 25), \"The Thing\", 1982));\n        mAllIntIdMovies.add(new IntIdMovie(false, 110, \"PG\", getUTCDate(1969, 10, 24), \"Butch Cassidy and the Sundance Kid\", 1969));\n        mAllIntIdMovies.add(new IntIdMovie(false, 101, null, getUTCDate(1939, 8, 25), \"The Wizard of Oz\", 1939));\n        mAllIntIdMovies.add(new IntIdMovie(false, 178, \"R\", getUTCDate(1995, 11, 22), \"Casino\", 1995));\n        mAllIntIdMovies.add(new IntIdMovie(false, 94, \"R\", getUTCDate(1996, 7, 19), \"Trainspotting\", 1996));\n        mAllIntIdMovies.add(new IntIdMovie(false, 111, \"TV-14\", getUTCDate(2003, 10, 10), \"Kill Bill: Vol. 1\", 2003));\n        mAllIntIdMovies.add(new IntIdMovie(false, 140, \"PG-13\", getUTCDate(2011, 9, 9), \"Warrior\", 2011));\n        mAllIntIdMovies.add(new IntIdMovie(true, 93, \"PG\", getUTCDate(1977, 4, 20), \"Annie Hall\", 1977));\n        mAllIntIdMovies.add(new IntIdMovie(false, 101, null, getUTCDate(1946, 9, 6), \"Notorious\", 1946));\n        mAllIntIdMovies.add(new IntIdMovie(false, 129, \"R\", getUTCDate(2009, 8, 13), \"The Secret in Their Eyes\", 2009));\n        mAllIntIdMovies.add(new IntIdMovie(true, 238, \"G\", getUTCDate(1940, 1, 17), \"Gone with the Wind\", 1939));\n        mAllIntIdMovies.add(new IntIdMovie(false, 126, \"R\", getUTCDate(1998, 1, 9), \"Good Will Hunting\", 1997));\n        mAllIntIdMovies.add(new IntIdMovie(true, 118, \"R\", getUTCDate(2010, 12, 24), \"The King's Speech\", 2010));\n        mAllIntIdMovies.add(new IntIdMovie(false, 129, null, getUTCDate(1940, 3, 15), \"The Grapes of Wrath\", 1940));\n        mAllIntIdMovies.add(new IntIdMovie(false, 148, \"R\", getUTCDate(2007, 9, 21), \"Into the Wild\", 2007));\n        mAllIntIdMovies.add(new IntIdMovie(false, 94, \"R\", getUTCDate(1979, 8, 17), \"Life of Brian\", 1979));\n        mAllIntIdMovies.add(new IntIdMovie(false, 100, \"G\", getUTCDate(2003, 5, 30), \"Finding Nemo\", 2003));\n        mAllIntIdMovies.add(new IntIdMovie(false, 132, \"R\", getUTCDate(2006, 3, 17), \"V for Vendetta\", 2005));\n        mAllIntIdMovies.add(new IntIdMovie(false, 98, \"PG\", getUTCDate(2010, 3, 26), \"How to Train Your Dragon\", 2010));\n        mAllIntIdMovies.add(new IntIdMovie(false, 86, \"G\", getUTCDate(1988, 4, 16), \"My Neighbor Totoro\", 1988));\n        mAllIntIdMovies.add(new IntIdMovie(false, 114, null, getUTCDate(1946, 8, 31), \"The Big Sleep\", 1946));\n        mAllIntIdMovies.add(new IntIdMovie(false, 105, \"PG\", getUTCDate(1954, 5, 29), \"Dial M for Murder\", 1954));\n        mAllIntIdMovies.add(new IntIdMovie(true, 212, null, getUTCDate(1960, 3, 30), \"Ben-Hur\", 1959));\n        mAllIntIdMovies.add(new IntIdMovie(false, 107, \"R\", getUTCDate(1984, 10, 26), \"The Terminator\", 1984));\n        mAllIntIdMovies.add(new IntIdMovie(false, 121, \"R\", getUTCDate(1976, 11, 27), \"Network\", 1976));\n        mAllIntIdMovies.add(new IntIdMovie(true, 132, \"PG-13\", getUTCDate(2005, 1, 28), \"Million Dollar Baby\", 2004));\n        mAllIntIdMovies.add(new IntIdMovie(false, 108, \"R\", getUTCDate(2010, 12, 17), \"Black Swan\", 2010));\n        mAllIntIdMovies.add(new IntIdMovie(false, 93, null, getUTCDate(1955, 11, 24), \"The Night of the Hunter\", 1955));\n        mAllIntIdMovies.add(new IntIdMovie(false, 158, \"R\", getUTCDate(2008, 1, 25), \"There Will Be Blood\", 2007));\n        mAllIntIdMovies.add(new IntIdMovie(false, 89, \"R\", getUTCDate(1986, 8, 8), \"Stand by Me\", 1986));\n        mAllIntIdMovies.add(new IntIdMovie(false, 113, \"R\", getUTCDate(2002, 1, 30), \"Donnie Darko\", 2001));\n        mAllIntIdMovies.add(new IntIdMovie(false, 101, \"PG\", getUTCDate(1993, 2, 12), \"Groundhog Day\", 1993));\n        mAllIntIdMovies.add(new IntIdMovie(false, 125, \"R\", getUTCDate(1975, 9, 21), \"Dog Day Afternoon\", 1975));\n        mAllIntIdMovies.add(new IntIdMovie(false, 129, \"R\", getUTCDate(1996, 1, 5), \"Twelve Monkeys\", 1995));\n        mAllIntIdMovies.add(new IntIdMovie(false, 154, \"R\", getUTCDate(2000, 6, 16), \"Amores Perros\", 2000));\n        mAllIntIdMovies.add(new IntIdMovie(false, 115, \"PG-13\", getUTCDate(2007, 8, 3), \"The Bourne Ultimatum\", 2007));\n        mAllIntIdMovies.add(new IntIdMovie(false, 92, null, getUTCDate(2009, 4, 9), \"Mary and Max\", 2009));\n        mAllIntIdMovies.add(new IntIdMovie(false, 99, null, getUTCDate(1959, 11, 16), \"The 400 Blows\", 1959));\n        mAllIntIdMovies.add(new IntIdMovie(false, 83, null, getUTCDate(1967, 3, 16), \"Persona\", 1966));\n        mAllIntIdMovies.add(new IntIdMovie(false, 106, null, getUTCDate(1967, 12, 22), \"The Graduate\", 1967));\n        mAllIntIdMovies.add(new IntIdMovie(true, 191, \"PG\", getUTCDate(1983, 2, 25), \"Gandhi\", 1982));\n        mAllIntIdMovies.add(new IntIdMovie(false, 85, null, getUTCDate(1956, 6, 6), \"The Killing\", 1956));\n        mAllIntIdMovies.add(new IntIdMovie(false, 119, \"PG\", getUTCDate(2005, 6, 17), \"Howl's Moving Castle\", 2004));\n        mAllIntIdMovies.add(new IntIdMovie(true, 100, \"PG-13\", getUTCDate(2012, 1, 20), \"The Artist\", 2011));\n        mAllIntIdMovies.add(new IntIdMovie(false, 98, \"PG\", getUTCDate(1987, 9, 25), \"The Princess Bride\", 1987));\n        mAllIntIdMovies.add(new IntIdMovie(false, 120, \"R\", getUTCDate(2012, 10, 12), \"Argo\", 2012));\n        mAllIntIdMovies.add(new IntIdMovie(true, 120, \"R\", getUTCDate(2009, 1, 23), \"Slumdog Millionaire\", 2008));\n        mAllIntIdMovies.add(new IntIdMovie(false, 131, null, getUTCDate(1966, 6, 22), \"Who's Afraid of Virginia Woolf?\", 1966));\n        mAllIntIdMovies.add(new IntIdMovie(false, 108, \"PG\", getUTCDate(1956, 7, 16), \"La Strada\", 1954));\n        mAllIntIdMovies.add(new IntIdMovie(false, 126, null, getUTCDate(1962, 10, 24), \"The Manchurian Candidate\", 1962));\n        mAllIntIdMovies.add(new IntIdMovie(false, 134, null, getUTCDate(1961, 9, 25), \"The Hustler\", 1961));\n        mAllIntIdMovies.add(new IntIdMovie(true, 135, \"PG-13\", getUTCDate(2002, 1, 4), \"A Beautiful Mind\", 2001));\n        mAllIntIdMovies.add(new IntIdMovie(false, 145, \"R\", getUTCDate(1969, 6, 18), \"The Wild Bunch\", 1969));\n        mAllIntIdMovies.add(new IntIdMovie(true, 119, \"PG\", getUTCDate(1976, 12, 3), \"Rocky\", 1976));\n        mAllIntIdMovies.add(new IntIdMovie(false, 160, \"TV-PG\", getUTCDate(1959, 9, 1), \"Anatomy of a Murder\", 1959));\n        mAllIntIdMovies.add(new IntIdMovie(false, 120, null, getUTCDate(1953, 8, 10), \"Stalag 17\", 1953));\n        mAllIntIdMovies.add(new IntIdMovie(false, 122, \"R\", getUTCDate(1974, 3, 16), \"The Exorcist\", 1973));\n        mAllIntIdMovies.add(new IntIdMovie(false, 138, \"PG\", getUTCDate(1972, 12, 10), \"Sleuth\", 1972));\n        mAllIntIdMovies.add(new IntIdMovie(false, 80, null, getUTCDate(1948, 8, 28), \"Rope\", 1948));\n        mAllIntIdMovies.add(new IntIdMovie(false, 184, \"PG\", getUTCDate(1975, 12, 18), \"Barry Lyndon\", 1975));\n        mAllIntIdMovies.add(new IntIdMovie(false, 123, null, getUTCDate(1962, 4, 22), \"The Man Who Shot Liberty Valance\", 1962));\n        mAllIntIdMovies.add(new IntIdMovie(false, 112, \"R\", getUTCDate(2009, 8, 14), \"District 9\", 2009));\n        mAllIntIdMovies.add(new IntIdMovie(false, 163, null, getUTCDate(1980, 4, 17), \"Stalker\", 1979));\n        mAllIntIdMovies.add(new IntIdMovie(false, 101, \"R\", getUTCDate(2002, 12, 12), \"Infernal Affairs\", 2002));\n        mAllIntIdMovies.add(new IntIdMovie(false, 118, null, getUTCDate(1953, 9, 2), \"Roman Holiday\", 1953));\n        mAllIntIdMovies.add(new IntIdMovie(false, 103, \"PG\", getUTCDate(1998, 6, 5), \"The Truman Show\", 1998));\n        mAllIntIdMovies.add(new IntIdMovie(false, 111, \"G\", getUTCDate(2007, 6, 29), \"Ratatouille\", 2007));\n        mAllIntIdMovies.add(new IntIdMovie(false, 143, \"PG-13\", getUTCDate(2003, 7, 9), \"Pirates of the Caribbean: The Curse of the Black Pearl\", 2003));\n        mAllIntIdMovies.add(new IntIdMovie(false, 106, \"R\", getUTCDate(2008, 12, 12), \"Ip Man\", 2008));\n        mAllIntIdMovies.add(new IntIdMovie(false, 112, \"PG-13\", getUTCDate(2007, 5, 23), \"The Diving Bell and the Butterfly\", 2007));\n        mAllIntIdMovies.add(new IntIdMovie(false, 130, \"PG-13\", getUTCDate(2011, 7, 15), \"Harry Potter and the Deathly Hallows: Part 2\", 2011));\n        mAllIntIdMovies.add(new IntIdMovie(false, 99, \"R\", getUTCDate(1967, 1, 18), \"A Fistful of Dollars\", 1964));\n        mAllIntIdMovies.add(new IntIdMovie(false, 125, \"PG\", getUTCDate(1951, 12, 1), \"A Streetcar Named Desire\", 1951));\n        mAllIntIdMovies.add(new IntIdMovie(false, 92, \"G\", getUTCDate(2001, 11, 2), \"Monsters, Inc.\", 2001));\n        mAllIntIdMovies.add(new IntIdMovie(false, 133, \"R\", getUTCDate(1994, 2, 25), \"In the Name of the Father\", 1993));\n        mAllIntIdMovies.add(new IntIdMovie(false, 127, \"PG-13\", getUTCDate(2009, 5, 8), \"Star Trek\", 2009));\n        mAllIntIdMovies.add(new IntIdMovie(false, 84, \"G\", getUTCDate(1991, 11, 22), \"Beauty and the Beast\", 1991));\n        mAllIntIdMovies.add(new IntIdMovie(false, 136, \"R\", getUTCDate(1968, 6, 12), \"Rosemary's Baby\", 1968));\n        mAllIntIdMovies.add(new IntIdMovie(false, 104, null, getUTCDate(1950, 10, 13), \"Harvey\", 1950));\n        mAllIntIdMovies.add(new IntIdMovie(false, 117, \"PG\", getUTCDate(1984, 3, 11), \"Nauticaä of the Valley of the Wind\", 1984));\n        mAllIntIdMovies.add(new IntIdMovie(false, 109, \"R\", getUTCDate(2009, 1, 30), \"The Wrestler\", 2008));\n        mAllIntIdMovies.add(new IntIdMovie(true, 133, null, getUTCDate(1930, 8, 24), \"All Quiet on the Western Front\", 1930));\n        mAllIntIdMovies.add(new IntIdMovie(false, 98, null, getUTCDate(1996, 2, 23), \"La Haine\", 1995));\n        mAllIntIdMovies.add(new IntIdMovie(true, 133, \"R\", getUTCDate(1988, 12, 16), \"Rain Man\", 1988));\n        mAllIntIdMovies.add(new IntIdMovie(false, 66, null, getUTCDate(1925, 12, 24), \"Battleship Potemkin\", 1925));\n        mAllIntIdMovies.add(new IntIdMovie(false, 138, \"R\", getUTCDate(2010, 2, 19), \"Shutter Island\", 2010));\n        mAllIntIdMovies.add(new IntIdMovie(false, 81, null, getUTCDate(1929, 6, 3), \"Nosferatu\", 1922));\n        mAllIntIdMovies.add(new IntIdMovie(false, 103, \"R\", getUTCDate(2003, 9, 19), \"Spring, Summer, Fall, Winter... and Spring\", 2003));\n        mAllIntIdMovies.add(new IntIdMovie(false, 96, \"R\", getUTCDate(1979, 4, 25), \"Manhattan\", 1979));\n        mAllIntIdMovies.add(new IntIdMovie(false, 138, \"R\", getUTCDate(2003, 10, 15), \"Mystic River\", 2003));\n        mAllIntIdMovies.add(new IntIdMovie(false, 102, null, getUTCDate(1938, 2, 18), \"Bringing Up Baby\", 1938));\n        mAllIntIdMovies.add(new IntIdMovie(false, 108, null, getUTCDate(1943, 1, 15), \"Shadow of a Doubt\", 1943));\n        mAllIntIdMovies.add(new IntIdMovie(false, 125, \"PG-13\", getUTCDate(2004, 1, 9), \"Big Fish\", 2003));\n        mAllIntIdMovies.add(new IntIdMovie(false, 124, \"PG\", getUTCDate(1986, 8, 2), \"Castle in the Sky\", 1986));\n        mAllIntIdMovies.add(new IntIdMovie(false, 151, \"PG\", getUTCDate(1973, 12, 16), \"Papillon\", 1973));\n        mAllIntIdMovies.add(new IntIdMovie(false, 76, \"PG\", getUTCDate(1993, 10, 29), \"The Nightmare Before Christmas\", 1993));\n        mAllIntIdMovies.add(new IntIdMovie(false, 119, \"R\", getUTCDate(1987, 6, 3), \"The Untouchables\", 1987));\n        mAllIntIdMovies.add(new IntIdMovie(false, 127, \"PG-13\", getUTCDate(1993, 6, 11), \"Jurassic Park\", 1993));\n        mAllIntIdMovies.add(new IntIdMovie(false, 115, \"R\", getUTCDate(2008, 10, 24), \"Let the Right One In\", 2008));\n        mAllIntIdMovies.add(new IntIdMovie(true, 109, null, getUTCDate(1967, 10, 14), \"In the Heat of the Night\", 1967));\n        mAllIntIdMovies.add(new IntIdMovie(false, 170, \"PG-13\", getUTCDate(2009, 12, 24), \"3 Idiots\", 2009));\n        mAllIntIdMovies.add(new IntIdMovie(false, 118, null, getUTCDate(1944, 9, 23), \"Arsenic and Old Lace\", 1944));\n        mAllIntIdMovies.add(new IntIdMovie(false, 119, null, getUTCDate(1956, 3, 13), \"The Searchers\", 1956));\n        mAllIntIdMovies.add(new IntIdMovie(false, 98, \"PG\", getUTCDate(2000, 9, 29), \"In the Mood for Love\", 2000));\n        mAllIntIdMovies.add(new IntIdMovie(false, 141, null, getUTCDate(1959, 4, 4), \"Rio Bravo\", 1959));\n    }\n\n    private static List<StringIdMovie> mAllStringIdMovies;\n\n    static {\n        mAllStringIdMovies = new ArrayList<StringIdMovie>(mAllIntIdMovies.size());\n\n        for (int i = 0; i < mAllIntIdMovies.size(); i++) {\n            mAllStringIdMovies.add(new StringIdMovie(String.format(\"Movie %1$03d\", i), mAllIntIdMovies.get(i)));\n        }\n    }\n\n    public static IntIdMovie getRandomIntIdMovie(Random rndGen) {\n        return mAllIntIdMovies.get(rndGen.nextInt(mAllIntIdMovies.size()));\n    }\n\n    public static StringIdMovie getRandomStringIdMovie(Random rndGen) {\n        return mAllStringIdMovies.get(rndGen.nextInt(mAllStringIdMovies.size()));\n    }\n\n    public static List<IntIdMovie> getAllIntIdMovies() {\n        return mAllIntIdMovies;\n    }\n\n    public static List<StringIdMovie> getAllStringIdMovies() {\n        return mAllStringIdMovies;\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/QueryTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport android.util.Pair;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.gson.Gson;\nimport com.google.gson.JsonElement;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.table.TableJsonQueryCallback;\nimport com.microsoft.windowsazure.mobileservices.table.TableQueryCallback;\nimport com.microsoft.windowsazure.mobileservices.table.query.ExecutableJsonQuery;\nimport com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\nimport com.microsoft.windowsazure.mobileservices.table.serialization.JsonEntityParser;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.ExpectedValueException;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.AllIntIdMovies;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.FilterResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.IntIdMovie;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.ListFilter;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.Movie;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.MovieComparator;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.SimpleMovieFilter;\n\nimport java.util.ArrayList;\nimport java.util.Calendar;\nimport java.util.Collections;\nimport java.util.List;\nimport java.util.Locale;\n\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.day;\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.endsWith;\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.field;\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.floor;\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.month;\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.query;\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.startsWith;\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.subStringOf;\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.toLower;\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.toUpper;\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.val;\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.year;\n\npublic class QueryTests extends TestGroup {\n    private static final String MOVIES_TABLE_NAME = \"IntIdMovies\";\n\n    // //private static final String STRING_ID_MOVIES_TABLE_NAME = \"Movies\";\n\n    @SuppressWarnings(\"unchecked\")\n    public QueryTests() {\n        super(\"Query tests\");\n\n        // numeric functions\n        this.addTest(createQueryTest(\"GreaterThan and LessThan - Movies from the 90s\", field(\"Year\").gt(1989).and().field(\"Year\").lt(2000),\n                new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getYear() > 1989 && movie.getYear() < 2000;\n                    }\n                }));\n\n        this.addTest(createQueryTest(\"GreaterEqual and LessEqual - Movies from the 90s\", field(\"Year\").ge(1990).and().field(\"Year\").le(1999),\n                new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getYear() >= 1990 && movie.getYear() <= 1999;\n                    }\n                }));\n\n        this.addTest(createQueryTest(\"Compound statement - OR of ANDs - Movies from the 30s and 50s\",\n                field(\"Year\").ge(1930).and().field(\"Year\").lt(1940).or(field(\"Year\").ge(1950).and().field(\"Year\").lt(1960)), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return (movie.getYear() >= 1930 && movie.getYear() < 1940) || (movie.getYear() >= 1950 && movie.getYear() < 1960);\n                    }\n                }));\n\n        this.addTest(createQueryTest(\"Division, equal and different - Movies from the Year 2000 with rating other than R\", query(field(\"Year\").div(1000d))\n                .eq(2).and().field(\"MpaaRating\").ne(\"R\"), new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return (movie.getYear() / 1000d == 2) && movie.getMPAARating() != \"R\";\n            }\n        }));\n\n        this.addTest(createQueryTest(\"Addition, subtraction, relational, AND - Movies from the 1980s which last less than 2 hours\",\n                field(\"Year\").sub(1900).ge(80).and().field(\"Year\").add(10).lt(2000).and().field(\"Duration\").lt(120), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return (movie.getYear() - 1900 >= 80) && (movie.getYear() + 10 < 2000) && (movie.getDuration() < 120);\n                    }\n                }));\n\n        // string functions\n\n        this.addTest(createQueryTest(\"StartsWith - Movies which starts with 'The'\", startsWith(\"Title\", \"The\"), new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return movie.getTitle().startsWith(\"The\");\n            }\n\n            @Override\n            public FilterResult<Movie> filter(List<? extends Movie> list) {\n                return applyTopSkip(super.filter(list), 100, 0);\n            }\n        }, 100));\n\n        this.addTest(createQueryTest(\"StartsWith, case insensitive - Movies which start with 'the'\", startsWith(toLower(field(\"Title\")), val(\"the\")),\n                new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getTitle().toLowerCase(Locale.getDefault()).startsWith(\"the\");\n                    }\n\n                    @Override\n                    public FilterResult<Movie> filter(List<? extends Movie> list) {\n                        return applyTopSkip(super.filter(list), 100, 0);\n                    }\n                }, 100));\n\n        this.addTest(createQueryTest(\"EndsWith, case insensitive - Movies which end with 'r'\", endsWith(toLower(field(\"Title\")), val(\"r\")),\n                new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getTitle().toLowerCase(Locale.getDefault()).endsWith(\"r\");\n                    }\n                }));\n\n        this.addTest(createQueryTest(\"Contains - Movies which contain the word 'one', case insensitive\", subStringOf(val(\"ONE\"), toUpper(field(\"Title\"))),\n                new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getTitle().toUpperCase(Locale.getDefault()).contains(\"ONE\");\n                    }\n                }));\n\n        this.addTest(createQueryTest(\"String equals - Movies since 1980 with rating PG-13\", field(\"Year\").ge(1980).and().field(\"MpaaRating\").eq(\"PG-13\"),\n                new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getYear() >= 1980 && movie.getMPAARating() == \"PG-13\";\n                    }\n\n                    @Override\n                    public FilterResult<Movie> filter(List<? extends Movie> list) {\n                        return applyTopSkip(super.filter(list), 100, 0);\n                    }\n                }, 100));\n\n        this.addTest(createQueryTest(\"String field, comparison to null - Movies since 1980 without a MPAA rating\",\n                field(\"Year\").ge(1980).and().field(\"MpaaRating\").eq((String) null), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getYear() >= 1980 && movie.getMPAARating() == null;\n                    }\n\n                    @Override\n                    public FilterResult<Movie> filter(List<? extends Movie> list) {\n                        return applyTopSkip(super.filter(list), 100, 0);\n                    }\n                }, 100));\n\n        this.addTest(createQueryTest(\"String field, comparison (not equal) to null - Movies before 1970 with a MPAA rating\", field(\"Year\").lt(1970).and()\n                .field(\"MpaaRating\").ne((String) null), new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return movie.getYear() < 1970 && movie.getMPAARating() != null;\n            }\n\n            @Override\n            public FilterResult<Movie> filter(List<? extends Movie> list) {\n                return applyTopSkip(super.filter(list), 100, 0);\n            }\n        }, 100));\n\n        // Numeric functions\n        this.addTest(createQueryTest(\"Floor - Movies which last more than 3 hours\", floor(field(\"Duration\").div(60d)).ge(3), new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return Math.floor(movie.getDuration() / 60d) >= 3;\n            }\n        }));\n\n        this.addTest(createQueryTest(\"Ceiling - Best picture winners which last at most 2 hours\",\n                field(\"BestPictureWinner\").eq(true).and().ceiling(field(\"Duration\").div(60d)).eq(2), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.isBestPictureWinner() && Math.ceil(movie.getDuration() / 60d) == 2;\n                    }\n                }));\n\n        this.addTest(createQueryTest(\"Round - Best picture winners which last more than 2.5 hours\",\n                field(\"BestPictureWinner\").eq(true).and().round(field(\"Duration\").div(60d)).gt(2), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.isBestPictureWinner() && Math.round(movie.getDuration() / 60d) > 2;\n                    }\n                }));\n\n        this.addTest(createQueryTest(\"Date: Greater than, less than - Movies with release date in the 70s\",\n                field(\"ReleaseDate\").gt(Util.getUTCDate(1969, 12, 31)).and().field(\"ReleaseDate\").lt(Util.getUTCDate(1971, 1, 1)), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getReleaseDate().compareTo(Util.getUTCDate(1969, 12, 31)) > 0\n                                && movie.getReleaseDate().compareTo(Util.getUTCDate(1971, 1, 1)) < 0;\n                    }\n                }));\n\n        this.addTest(createQueryTest(\"Date: Greater than, less than - Movies with release date in the 80s\", field(\"ReleaseDate\")\n                .ge(Util.getUTCDate(1980, 1, 1)).and().field(\"ReleaseDate\").le(Util.getUTCDate(1989, 1, 1, 23, 59, 59)), new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return movie.getReleaseDate().compareTo(Util.getUTCDate(1980, 1, 1)) >= 0\n                        && movie.getReleaseDate().compareTo(Util.getUTCDate(1989, 1, 1, 23, 59, 59)) <= 0;\n            }\n        }));\n\n        this.addTest(createQueryTest(\"Date: Date: Equal - Movies released on 1994-10-14 (Shawshank Redemption / Pulp Fiction)\",\n                field(\"ReleaseDate\").eq(Util.getUTCDate(1994, 10, 14)), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getReleaseDate().compareTo(Util.getUTCDate(1994, 10, 14)) == 0;\n                    }\n                }));\n\n        // Date functions\n        this.addTest(createQueryTest(\"Date (month): Movies released in November\", month(\"ReleaseDate\").eq(11), new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return Util.getUTCCalendar(movie.getReleaseDate()).get(Calendar.MONTH) == Calendar.NOVEMBER;\n            }\n        }));\n\n        this.addTest(createQueryTest(\"Date (day): Movies released in the first day of the month\", day(\"ReleaseDate\").eq(1), new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return Util.getUTCCalendar(movie.getReleaseDate()).get(Calendar.DAY_OF_MONTH) == 1;\n            }\n        }));\n\n        this.addTest(createQueryTest(\"Date (Year): Movies whose Year is different than its release Year\", year(\"ReleaseDate\").ne().field(\"Year\"),\n                new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return Util.getUTCCalendar(movie.getReleaseDate()).get(Calendar.YEAR) != movie.getYear();\n                    }\n\n                    @Override\n                    public FilterResult<Movie> filter(List<? extends Movie> list) {\n                        return applyTopSkip(super.filter(list), 100, 0);\n                    }\n                }, 100));\n\n        // boolean fields\n        this.addTest(createQueryTest(\"Bool: equal to true - Best picture winners before 1950\",\n                field(\"Year\").lt(1950).and().field(\"BestPictureWinner\").eq(true), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getYear() < 1950 && movie.isBestPictureWinner();\n                    }\n                }));\n\n        this.addTest(createQueryTest(\"Bool: equal to false - Best picture winners after 2000\",\n                field(\"Year\").ge(2000).and().not(field(\"BestPictureWinner\").eq(false)), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getYear() >= 2000 && !(movie.isBestPictureWinner() == false);\n                    }\n                }));\n\n        this.addTest(createQueryTest(\"Bool: not equal to false - Best picture winners after 2000\",\n                field(\"BestPictureWinner\").ne(false).and().field(\"Year\").ge(2000), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.isBestPictureWinner() != false && movie.getYear() >= 2000;\n                    }\n                }));\n\n        // top and skip\n\n        this.addTest(createQueryTest(\"Get all using large $top - 500\", null, new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return true;\n            }\n\n            @Override\n            public FilterResult<Movie> filter(List<? extends Movie> list) {\n                return applyTopSkip(super.filter(list), 500, 0);\n            }\n        }, 500));\n\n        this.addTest(createQueryTest(\"Skip all using large skip - 500\", null, new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return true;\n            }\n\n            @Override\n            public FilterResult<Movie> filter(List<? extends Movie> list) {\n                return applyTopSkip(super.filter(list), Integer.MAX_VALUE, 500);\n            }\n\n            @Override\n            protected List<Movie> applyOrder(List<? extends Movie> movies) {\n                Collections.sort(movies, new MovieComparator(\"getTitle\"));\n                return new ArrayList<Movie>(movies);\n            }\n        }, null, 500, createOrder(new Pair<String, QueryOrder>(\"Title\", QueryOrder.Ascending)), null, false, null));\n\n        this.addTest(createQueryTest(\"Get first ($top) - 10\", null, new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return true;\n            }\n\n            @Override\n            public FilterResult<Movie> filter(List<? extends Movie> list) {\n                return applyTopSkip(super.filter(list), 10, 0);\n            }\n        }, 10));\n\n        final int movieCountMinus10 = QueryTestData.getAllIntIdMovies().size() - 10;\n        this.addTest(createQueryTest(\"Get last ($skip) - 10\", null, new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return true;\n            }\n\n            @Override\n            public FilterResult<Movie> filter(List<? extends Movie> list) {\n                return applyTopSkip(super.filter(list), Integer.MAX_VALUE, movieCountMinus10);\n            }\n\n            @Override\n            protected List<Movie> applyOrder(List<? extends Movie> movies) {\n                Collections.sort(movies, new MovieComparator(\"getTitle\"));\n                return new ArrayList<Movie>(movies);\n            }\n        }, null, movieCountMinus10, createOrder(new Pair<String, QueryOrder>(\"Title\", QueryOrder.Ascending)), null, false, null));\n\n        this.addTest(createQueryTest(\"Skip, take, includeTotalCount - movies 21-30, ordered by Title\", null, new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return true;\n            }\n\n            @Override\n            public FilterResult<Movie> filter(List<? extends Movie> list) {\n                return applyTopSkip(super.filter(list), 10, 20);\n            }\n\n            @Override\n            protected List<Movie> applyOrder(List<? extends Movie> movies) {\n                Collections.sort(movies, new MovieComparator(\"getTitle\"));\n                return new ArrayList<Movie>(movies);\n            }\n\n        }, 10, 20, createOrder(new Pair<String, QueryOrder>(\"Title\", QueryOrder.Ascending)), null, false, null));\n\n        this.addTest(createQueryTest(\"Skip, take, filter includeTotalCount - movies 11-20 which won a best picture award, ordered by Year\",\n                field(\"BestPictureWinner\").eq(true), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.isBestPictureWinner();\n                    }\n\n                    @Override\n                    public FilterResult<Movie> filter(List<? extends Movie> list) {\n                        return applyTopSkip(super.filter(list), 10, 10);\n                    }\n\n                    @Override\n                    protected List<Movie> applyOrder(List<? extends Movie> movies) {\n                        Collections.sort(movies, new MovieComparator(new Pair<String, QueryOrder>(\"getYear\", QueryOrder.Descending)));\n                        return new ArrayList<Movie>(movies);\n                    }\n\n                }, 10, 10, createOrder(new Pair<String, QueryOrder>(\"Year\", QueryOrder.Descending)), null, true, null));\n\n        this.addTest(createQueryTest(\"Select one field - Only Title of movies from 2008\", field(\"Year\").eq(2008), new SimpleMovieFilter() {\n\n            @Override\n            protected FilterResult<Movie> getElements(List<? extends Movie> list) {\n                FilterResult<Movie> res = super.getElements(list);\n                FilterResult<Movie> newRes = new FilterResult<Movie>();\n                newRes.totalCount = res.totalCount;\n                newRes.elements = new ArrayList<Movie>();\n\n                for (Movie movie : res.elements) {\n                    // only add Title field\n                    Movie newMovie = new IntIdMovie();\n                    newMovie.setTitle(movie.getTitle());\n                    newRes.elements.add(newMovie);\n                }\n\n                return newRes;\n            }\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return movie.getYear() == 2008;\n            }\n\n        }, null, null, null, project(\"title\"), true, null));\n\n        this.addTest(createQueryTest(\"Select multiple fields - List of movies from the 2000's\", field(\"Year\").ge(2000), new SimpleMovieFilter() {\n\n                    @Override\n                    protected FilterResult<Movie> getElements(List<? extends Movie> list) {\n                        FilterResult<Movie> res = super.getElements(list);\n                        FilterResult<Movie> newRes = new FilterResult<Movie>();\n                        newRes.totalCount = res.totalCount;\n                        newRes.elements = new ArrayList<Movie>();\n\n                        for (Movie movie : res.elements) {\n                            // only add Title, BestPictureWinner,\n                            // ReleaseDate\n                            // and Duration fields\n                            IntIdMovie newMovie = new IntIdMovie();\n                            newMovie.setTitle(movie.getTitle());\n                            newMovie.setBestPictureWinner(movie.isBestPictureWinner());\n                            newMovie.setReleaseDate(movie.getReleaseDate());\n                            newMovie.setDuration(movie.getDuration());\n                            newRes.elements.add(newMovie);\n                        }\n\n                        return newRes;\n                    }\n\n                    @Override\n                    public FilterResult<Movie> filter(List<? extends Movie> list) {\n                        return applyTopSkip(super.filter(list), 5, 0);\n                    }\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getYear() >= 2000;\n                    }\n\n                    @Override\n                    protected List<Movie> applyOrder(List<? extends Movie> movies) {\n                        Collections.sort(movies, new MovieComparator(new Pair<String, QueryOrder>(\"getReleaseDate\", QueryOrder.Descending),\n                                new Pair<String, QueryOrder>(\"getTitle\", QueryOrder.Ascending)));\n                        return new ArrayList<Movie>(movies);\n                    }\n\n                }, 5, null,\n                createOrder(new Pair<String, QueryOrder>(\"ReleaseDate\", QueryOrder.Descending), new Pair<String, QueryOrder>(\"Title\", QueryOrder.Ascending)),\n                project(\"title\", \"bestPictureWinner\", \"duration\", \"releaseDate\"), true, null));\n\n        this.addTest(createQueryTest(\"(Neg) Very large top value\", field(\"Year\").gt(2000), null, 1001, null, null, null, false, MobileServiceException.class));\n\n        this.addTest(createJsonQueryTest(\"Select multiple fields - Json - List of movies from the 2000's\", field(\"Year\").ge(2000), new SimpleMovieFilter() {\n\n                    @Override\n                    protected FilterResult<Movie> getElements(List<? extends Movie> list) {\n                        FilterResult<Movie> res = super.getElements(list);\n                        FilterResult<Movie> newRes = new FilterResult<Movie>();\n                        newRes.totalCount = res.totalCount;\n                        newRes.elements = new ArrayList<Movie>();\n\n                        for (Movie movie : res.elements) {\n                            // only add Title, BestPictureWinner,\n                            // ReleaseDate\n                            // and Duration fields\n                            IntIdMovie newMovie = new IntIdMovie();\n                            newMovie.setTitle(movie.getTitle());\n                            newMovie.setBestPictureWinner(movie.isBestPictureWinner());\n                            newMovie.setReleaseDate(movie.getReleaseDate());\n                            newMovie.setDuration(movie.getDuration());\n                            newRes.elements.add(newMovie);\n                        }\n\n                        return newRes;\n                    }\n\n                    @Override\n                    public FilterResult<Movie> filter(List<? extends Movie> list) {\n                        return applyTopSkip(super.filter(list), 5, 0);\n                    }\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getYear() >= 2000;\n                    }\n\n                    @Override\n                    protected List<Movie> applyOrder(List<? extends Movie> movies) {\n                        Collections.sort(movies, new MovieComparator(new Pair<String, QueryOrder>(\"getReleaseDate\", QueryOrder.Descending),\n                                new Pair<String, QueryOrder>(\"getTitle\", QueryOrder.Ascending)));\n                        return new ArrayList<Movie>(movies);\n                    }\n\n                }, 5, null,\n                createOrder(new Pair<String, QueryOrder>(\"ReleaseDate\", QueryOrder.Descending), new Pair<String, QueryOrder>(\"Title\", QueryOrder.Ascending)),\n                project(\"title\", \"bestPictureWinner\", \"duration\", \"releaseDate\"), true, null));\n\n        // invalid lookup\n        for (int i = -1; i <= 0; i++) {\n            final int id = i;\n            TestCase test = new TestCase() {\n\n                @Override\n                protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                    final TestCase testCase = this;\n\n                    log(\"lookup id \" + id);\n\n                    TestResult result = new TestResult();\n                    result.setTestCase(testCase);\n\n                    try {\n                        client.getTable(MOVIES_TABLE_NAME).lookUp(id).get();\n                        result.setStatus(TestStatus.Passed);\n\n                    } catch (Exception exception) {\n                        createResultFromException(result, exception);\n                        result.setStatus(TestStatus.Failed);\n                    } finally {\n                        if (callback != null)\n                            callback.onTestComplete(testCase, result);\n                    }\n                }\n            };\n\n            test.setExpectedExceptionClass(IllegalArgumentException.class);\n            test.setName(\"(Neg) Invalid Lookup - ID: \" + id);\n            this.addTest(test);\n        }\n\n        // With Callback\n        this.addTest(createQueryWithCallbackTest(\"With Callback - Addition, subtraction, relational, AND - Movies from the 1980s which last less than 2 hours\",\n                field(\"Year\").sub(1900).ge(80).and().field(\"Year\").add(10).lt(2000).and().field(\"Duration\").lt(120), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return (movie.getYear() - 1900 >= 80) && (movie.getYear() + 10 < 2000) && (movie.getDuration() < 120);\n                    }\n                }));\n\n        this.addTest(createQueryWithCallbackTest(\"With Callback - String field, comparison (not equal) to null - Movies before 1970 with a MPAA rating\",\n                field(\"Year\").lt(1970).and().field(\"MpaaRating\").ne((String) null), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getYear() < 1970 && movie.getMPAARating() != null;\n                    }\n\n                    @Override\n                    public FilterResult<Movie> filter(List<? extends Movie> list) {\n                        return applyTopSkip(super.filter(list), 100, 0);\n                    }\n                }, 100));\n\n        this.addTest(createQueryWithCallbackTest(\"With Callback - Date: Date: Equal - Movies released on 1994-10-14 (Shawshank Redemption / Pulp Fiction)\",\n                field(\"ReleaseDate\").eq(Util.getUTCDate(1994, 10, 14)), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getReleaseDate().compareTo(Util.getUTCDate(1994, 10, 14)) == 0;\n                    }\n                }));\n\n        this.addTest(createQueryWithCallbackTest(\"With Callback - Date (Year): Movies whose Year is different than its release Year\", year(\"ReleaseDate\").ne()\n                .field(\"Year\"), new SimpleMovieFilter() {\n\n            @Override\n            protected boolean criteria(Movie movie) {\n                return Util.getUTCCalendar(movie.getReleaseDate()).get(Calendar.YEAR) != movie.getYear();\n            }\n\n            @Override\n            public FilterResult<Movie> filter(List<? extends Movie> list) {\n                return applyTopSkip(super.filter(list), 100, 0);\n            }\n        }, 100));\n\n        this.addTest(createQueryWithCallbackTest(\"With Callback - Bool: not equal to false - Best picture winners after 2000\",\n                field(\"BestPictureWinner\").ne(false).and().field(\"Year\").ge(2000), new SimpleMovieFilter() {\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.isBestPictureWinner() != false && movie.getYear() >= 2000;\n                    }\n                }));\n\n        this.addTest(createQueryWithCallbackTest(\"With Callback - Select multiple fields - List of movies from the 2000's\", field(\"Year\").ge(2000),\n                new SimpleMovieFilter() {\n\n                    @Override\n                    protected FilterResult<Movie> getElements(List<? extends Movie> list) {\n                        FilterResult<Movie> res = super.getElements(list);\n                        FilterResult<Movie> newRes = new FilterResult<Movie>();\n                        newRes.totalCount = res.totalCount;\n                        newRes.elements = new ArrayList<Movie>();\n\n                        for (Movie movie : res.elements) {\n                            // only add Title, BestPictureWinner,\n                            // ReleaseDate\n                            // and Duration fields\n                            Movie newMovie = new IntIdMovie();\n                            newMovie.setTitle(movie.getTitle());\n                            newMovie.setBestPictureWinner(movie.isBestPictureWinner());\n                            newMovie.setReleaseDate(movie.getReleaseDate());\n                            newMovie.setDuration(movie.getDuration());\n                            newRes.elements.add(newMovie);\n                        }\n\n                        return newRes;\n                    }\n\n                    @Override\n                    public FilterResult<Movie> filter(List<? extends Movie> list) {\n                        return applyTopSkip(super.filter(list), 5, 0);\n                    }\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getYear() >= 2000;\n                    }\n\n                    @Override\n                    protected List<Movie> applyOrder(List<? extends Movie> movies) {\n                        Collections.sort(movies, new MovieComparator(new Pair<String, QueryOrder>(\"getReleaseDate\", QueryOrder.Descending),\n                                new Pair<String, QueryOrder>(\"getTitle\", QueryOrder.Ascending)));\n                        return new ArrayList<Movie>(movies);\n                    }\n\n                }, 5, null,\n                createOrder(new Pair<String, QueryOrder>(\"ReleaseDate\", QueryOrder.Descending), new Pair<String, QueryOrder>(\"Title\", QueryOrder.Ascending)),\n                project(\"title\", \"bestPictureWinner\", \"duration\", \"releaseDate\"), true, null));\n\n        this.addTest(createJsonQueryWithCallbackTest(\"With Callback - Select multiple fields - Json - List of movies from the 2000's\", field(\"Year\").ge(2000),\n                new SimpleMovieFilter() {\n\n                    @Override\n                    protected FilterResult<Movie> getElements(List<? extends Movie> list) {\n                        FilterResult<Movie> res = super.getElements(list);\n                        FilterResult<Movie> newRes = new FilterResult<Movie>();\n                        newRes.totalCount = res.totalCount;\n                        newRes.elements = new ArrayList<Movie>();\n\n                        for (Movie movie : res.elements) {\n                            // only add Title, BestPictureWinner,\n                            // ReleaseDate\n                            // and Duration fields\n                            Movie newMovie = new IntIdMovie();\n                            newMovie.setTitle(movie.getTitle());\n                            newMovie.setBestPictureWinner(movie.isBestPictureWinner());\n                            newMovie.setReleaseDate(movie.getReleaseDate());\n                            newMovie.setDuration(movie.getDuration());\n                            newRes.elements.add(newMovie);\n                        }\n\n                        return newRes;\n                    }\n\n                    @Override\n                    public FilterResult<Movie> filter(List<? extends Movie> list) {\n                        return applyTopSkip(super.filter(list), 5, 0);\n                    }\n\n                    @Override\n                    protected boolean criteria(Movie movie) {\n                        return movie.getYear() >= 2000;\n                    }\n\n                    @Override\n                    protected List<Movie> applyOrder(List<? extends Movie> movies) {\n                        Collections.sort(movies, new MovieComparator(new Pair<String, QueryOrder>(\"getReleaseDate\", QueryOrder.Descending),\n                                new Pair<String, QueryOrder>(\"getTitle\", QueryOrder.Ascending)));\n                        return new ArrayList<Movie>(movies);\n                    }\n\n                }, 5, null,\n                createOrder(new Pair<String, QueryOrder>(\"ReleaseDate\", QueryOrder.Descending), new Pair<String, QueryOrder>(\"Title\", QueryOrder.Ascending)),\n                project(\"title\", \"bestPictureWinner\", \"duration\", \"releaseDate\"), true, null));\n    }\n\n    private static String[] project(String... fields) {\n        return fields;\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    private List<Pair<String, QueryOrder>> createOrder(Pair<String, QueryOrder>... entries) {\n        List<Pair<String, QueryOrder>> ret = new ArrayList<Pair<String, QueryOrder>>();\n\n        for (Pair<String, QueryOrder> Pair : entries) {\n            ret.add(Pair);\n        }\n\n        return ret;\n    }\n\n    private TestCase createQueryTest(String name, final Query filter, final ListFilter<Movie> expectedResultFilter) {\n        return createQueryTest(name, filter, expectedResultFilter, null, null, null, null, false, null);\n    }\n\n    private TestCase createQueryTest(String name, final Query filter, final ListFilter<Movie> expectedResultFilter, final int top) {\n        return createQueryTest(name, filter, expectedResultFilter, top, null, null, null, false, null);\n    }\n\n    private TestCase createQueryTest(String name, final Query filter, final ListFilter<Movie> expectedResultFilter, final Integer top, final Integer skip,\n                                     final List<Pair<String, QueryOrder>> orderBy, final String[] projection, final boolean includeInlineCount, final Class<?> expectedExceptionClass) {\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                ExecutableQuery<IntIdMovie> query;\n\n                if (filter != null) {\n                    log(\"add filter\");\n                    query = client.getTable(MOVIES_TABLE_NAME, IntIdMovie.class).where(filter);\n                } else {\n                    query = client.getTable(MOVIES_TABLE_NAME, IntIdMovie.class).where();\n                }\n\n                if (top != null) {\n                    log(\"add top\");\n                    query = query.top(top);\n                }\n\n                if (skip != null) {\n                    log(\"add skip\");\n                    query = query.skip(skip);\n                }\n\n                if (orderBy != null) {\n                    log(\"add orderby\");\n                    for (Pair<String, QueryOrder> order : orderBy) {\n                        query = query.orderBy(order.first, order.second);\n                    }\n                }\n\n                if (projection != null) {\n                    log(\"add projection\");\n                    query = query.select(projection);\n                }\n\n                if (includeInlineCount) {\n                    log(\"add inlinecount\");\n                    query.includeInlineCount();\n                }\n\n                TestCase testCase = this;\n                TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(testCase);\n\n                try {\n                    List<IntIdMovie> movies = query.execute().get();\n\n                    FilterResult<Movie> expectedData = expectedResultFilter.filter(QueryTestData.getAllIntIdMovies());\n\n                    log(\"verify result\");\n\n                    if (Util.compareLists(expectedData.elements, new ArrayList<Movie>(movies))) {\n                    } else {\n                        createResultFromException(result, new ExpectedValueException(Util.listToString(expectedData.elements), Util.listToString(movies)));\n                    }\n                } catch (Exception exception) {\n\n                    createResultFromException(result, exception);\n                } finally {\n                    callback.onTestComplete(testCase, result);\n\n                }\n            }\n        };\n\n        test.setExpectedExceptionClass(expectedExceptionClass);\n        test.setName(name);\n\n        return test;\n    }\n\n    private TestCase createJsonQueryTest(String name, final Query filter, final ListFilter<Movie> expectedResultFilter, final Integer top, final Integer skip,\n                                         final List<Pair<String, QueryOrder>> orderBy, final String[] projection, final boolean includeInlineCount, final Class<?> expectedExceptionClass) {\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                ExecutableJsonQuery query;\n\n                if (filter != null) {\n                    log(\"add filter\");\n                    query = client.getTable(MOVIES_TABLE_NAME).where(filter);\n                } else {\n                    query = client.getTable(MOVIES_TABLE_NAME).where();\n                }\n\n                if (top != null) {\n                    log(\"add top\");\n                    query = query.top(top);\n                }\n\n                if (skip != null) {\n                    log(\"add skip\");\n                    query = query.skip(skip);\n                }\n\n                if (orderBy != null) {\n                    log(\"add orderby\");\n                    for (Pair<String, QueryOrder> order : orderBy) {\n                        query = query.orderBy(order.first, order.second);\n                    }\n                }\n\n                if (projection != null) {\n                    log(\"add projection\");\n                    query = query.select(projection);\n                }\n\n                if (includeInlineCount) {\n                    log(\"add inlinecount\");\n                    query.includeInlineCount();\n                }\n\n                TestCase testCase = this;\n                TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(testCase);\n\n                try {\n                    JsonElement moviesJson = query.execute().get();\n                    List<IntIdMovie> movies;\n\n                    Gson gson = client.getGsonBuilder().create();\n\n                    if (moviesJson.isJsonObject()) {\n                        JsonElement elements = moviesJson.getAsJsonObject().get(\"results\");\n\n                        movies = JsonEntityParser.parseResults(elements, gson, IntIdMovie.class);\n                    } else {\n                        movies = JsonEntityParser.parseResults(moviesJson, gson, IntIdMovie.class);\n                    }\n\n                    FilterResult<Movie> expectedData = expectedResultFilter.filter(QueryTestData.getAllIntIdMovies());\n\n                    log(\"verify result\");\n\n                    if (Util.compareLists(expectedData.elements, new ArrayList<Movie>(movies))) {\n                    } else {\n                        createResultFromException(result, new ExpectedValueException(Util.listToString(expectedData.elements), Util.listToString(movies)));\n                    }\n\n                } catch (Exception exception) {\n\n                    createResultFromException(result, exception);\n                } finally {\n                    callback.onTestComplete(testCase, result);\n\n                }\n            }\n        };\n\n        test.setExpectedExceptionClass(expectedExceptionClass);\n        test.setName(name);\n\n        return test;\n    }\n\n    private TestCase createQueryWithCallbackTest(String name, final Query filter, final ListFilter<Movie> expectedResultFilter) {\n\n        return createQueryTest(name, filter, expectedResultFilter, null, null, null, null, false, null);\n    }\n\n    private TestCase createQueryWithCallbackTest(String name, final Query filter, final ListFilter<Movie> expectedResultFilter, final int top) {\n\n        return createQueryTest(name, filter, expectedResultFilter, top, null, null, null, false, null);\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase createQueryWithCallbackTest(String name, final Query filter, final ListFilter<Movie> expectedResultFilter, final Integer top,\n                                                 final Integer skip, final List<Pair<String, QueryOrder>> orderBy, final String[] projection, final boolean includeInlineCount,\n                                                 final Class<?> expectedExceptionClass) {\n\n        final TestCase test = new TestCase() {\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                ExecutableQuery<IntIdMovie> query;\n\n                if (filter != null) {\n                    log(\"add filter\");\n                    query = client.getTable(MOVIES_TABLE_NAME, IntIdMovie.class).where(filter);\n                } else {\n                    query = client.getTable(MOVIES_TABLE_NAME, IntIdMovie.class).where();\n                }\n\n                if (top != null) {\n                    log(\"add top\");\n                    query = query.top(top);\n                }\n\n                if (skip != null) {\n                    log(\"add skip\");\n                    query = query.skip(skip);\n                }\n\n                if (orderBy != null) {\n                    log(\"add orderby\");\n                    for (Pair<String, QueryOrder> order : orderBy) {\n                        query = query.orderBy(order.first, order.second);\n                    }\n                }\n\n                if (projection != null) {\n                    log(\"add projection\");\n                    query = query.select(projection);\n                }\n\n                if (includeInlineCount) {\n                    log(\"add inlinecount\");\n                    query.includeInlineCount();\n                }\n\n                final TestCase testCase = this;\n\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(testCase);\n\n                try {\n                    query.execute(new TableQueryCallback<IntIdMovie>() {\n\n                        @Override\n                        public void onCompleted(List<IntIdMovie> movies, int count, Exception exception, ServiceFilterResponse response) {\n\n                            if (exception == null) {\n                                FilterResult<Movie> expectedData = expectedResultFilter.filter(QueryTestData.getAllIntIdMovies());\n\n                                log(\"verify result\");\n                                if (Util.compareLists(expectedData.elements, new ArrayList<Movie>(movies))) {\n                                } else {\n                                    createResultFromException(result,\n                                            new ExpectedValueException(Util.listToString(expectedData.elements), Util.listToString(movies)));\n                                }\n                            } else {\n                                createResultFromException(result, exception);\n                            }\n\n                            if (callback != null)\n                                callback.onTestComplete(testCase, result);\n                        }\n                    });\n                } catch (Exception exception) {\n                    createResultFromException(result, exception);\n                    callback.onTestComplete(testCase, result);\n                }\n            }\n        };\n\n        test.setExpectedExceptionClass(expectedExceptionClass);\n        test.setName(name);\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase createJsonQueryWithCallbackTest(String name, final Query filter, final ListFilter<Movie> expectedResultFilter, final Integer top,\n                                                     final Integer skip, final List<Pair<String, QueryOrder>> orderBy, final String[] projection, final boolean includeInlineCount,\n                                                     final Class<?> expectedExceptionClass) {\n\n        final TestCase test = new TestCase() {\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n\n                ExecutableJsonQuery query;\n\n                if (filter != null) {\n                    log(\"add filter\");\n                    query = client.getTable(MOVIES_TABLE_NAME).where(filter);\n                } else {\n                    query = client.getTable(MOVIES_TABLE_NAME).where();\n                }\n\n                if (top != null) {\n                    log(\"add top\");\n                    query = query.top(top);\n                }\n\n                if (skip != null) {\n                    log(\"add skip\");\n                    query = query.skip(skip);\n                }\n\n                if (orderBy != null) {\n                    log(\"add orderby\");\n                    for (Pair<String, QueryOrder> order : orderBy) {\n                        query = query.orderBy(order.first, order.second);\n                    }\n                }\n\n                if (projection != null) {\n                    log(\"add projection\");\n                    query = query.select(projection);\n                }\n\n                if (includeInlineCount) {\n                    log(\"add inlinecount\");\n                    query.includeInlineCount();\n                }\n\n                final TestCase testCase = this;\n\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                result.setTestCase(testCase);\n\n                try {\n                    query.execute(new TableJsonQueryCallback() {\n\n                        @Override\n                        public void onCompleted(JsonElement moviesJson, Exception exception, ServiceFilterResponse response) {\n\n                            if (exception == null) {\n                                List<IntIdMovie> movies;\n\n                                Gson gson = client.getGsonBuilder().create();\n\n                                if (moviesJson.isJsonObject()) {\n                                    JsonElement elements = moviesJson.getAsJsonObject().get(\"results\");\n\n                                    movies = JsonEntityParser.parseResults(elements, gson, IntIdMovie.class);\n                                } else {\n                                    movies = JsonEntityParser.parseResults(moviesJson, gson, IntIdMovie.class);\n                                }\n\n                                FilterResult<Movie> expectedData = expectedResultFilter.filter(QueryTestData.getAllIntIdMovies());\n\n                                log(\"verify result\");\n                                if (Util.compareLists(expectedData.elements, new ArrayList<Movie>(movies))) {\n                                } else {\n                                    createResultFromException(result,\n                                            new ExpectedValueException(Util.listToString(expectedData.elements), Util.listToString(movies)));\n                                }\n                            } else {\n                                createResultFromException(result, exception);\n                            }\n\n                            if (callback != null)\n                                callback.onTestComplete(testCase, result);\n                        }\n                    });\n                } catch (Exception exception) {\n                    createResultFromException(result, exception);\n                    callback.onTestComplete(testCase, result);\n                }\n            }\n        };\n\n        test.setExpectedExceptionClass(expectedExceptionClass);\n        test.setName(name);\n\n        return test;\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/RemoveAuthenticationServiceFilter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.microsoft.windowsazure.mobileservices.http.NextServiceFilterCallback;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilter;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequest;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\n\npublic class RemoveAuthenticationServiceFilter implements ServiceFilter {\n\n    @Override\n    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request,\n                                                                 NextServiceFilterCallback nextServiceFilterCallback) {\n\n        request.removeHeader(\"X-ZUMO-AUTH\");\n        request.removeHeader(\"X-ZUMO-APPLICATION\");\n\n        return nextServiceFilterCallback.onNext(request);\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/RoundTripTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.ExpectedValueException;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.IntIdRoundTripTableElement;\n\nimport java.util.Calendar;\nimport java.util.Date;\nimport java.util.GregorianCalendar;\nimport java.util.Random;\nimport java.util.TimeZone;\n\npublic class RoundTripTests extends TestGroup {\n\n    protected static final String ROUND_TRIP_TABLE_NAME = \"IntIdRoundTripTable\";\n\n    public RoundTripTests() {\n        super(\"RoundTrip tests\");\n\n        Random rndGen = new Random();\n\n        TestCase createDeleteFullRecord = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n                IntIdRoundTripTableElement element = new IntIdRoundTripTableElement(true);\n                final TestCase test = this;\n\n                TestResult result = new TestResult();\n\n                try {\n                    MobileServiceTable<IntIdRoundTripTableElement> table = client.getTable(ROUND_TRIP_TABLE_NAME, IntIdRoundTripTableElement.class);\n                    IntIdRoundTripTableElement fullRecord = table.insert(element).get();\n                    log(\"inserted full record\");\n\n                    table.delete(fullRecord).get();\n                    log(\"deleted full record\");\n\n                    result.setStatus(TestStatus.Passed);\n                } catch (Exception exception) {\n                    result = createResultFromException(exception);\n                } finally {\n                    result.setTestCase(test);\n                    callback.onTestComplete(test, result);\n                }\n            }\n        };\n\n        createDeleteFullRecord.setName(\"Create - Delete full record\");\n        this.addTest(createDeleteFullRecord);\n\n        // typed tests\n        this.addTest(createSimpleTypedRoundTripTest(\"String: Empty\", \"\", String.class));\n        // this.addTest(createSimpleTypedRoundTripTest(\"String: null\", null,\n        // String.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"String: random value\", Util.createSimpleRandomString(rndGen, 10), String.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"String: large (1000 characters)\", Util.createSimpleRandomString(rndGen, 1000), String.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"String: large (64k+1 characters)\", Util.createSimpleRandomString(rndGen, 65537), String.class));\n\n        this.addTest(createSimpleTypedRoundTripTest(\"String: non-ASCII characters - Latin\", \"ãéìôü ÇñÑ\", String.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"String: non-ASCII characters - Arabic\", \"الكتاب على الطاولة\", String.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"String: non-ASCII characters - Chinese\", \"这本书在桌子上\", String.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"String: non-ASCII characters - Chinese 2\", \"⒈①Ⅻㄨㄩ 啊阿鼾齄 丂丄狚狛 狜狝﨨﨩 ˊˋ˙–〇 㐀㐁䶴䶵\", String.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"String: non-ASCII characters - Japanese\", \"本は机の上に\", String.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"String: non-ASCII characters - Hebrew\", \"הספר הוא על השולחן\", String.class));\n\n        Calendar calendar = Calendar.getInstance();\n        Calendar calendarUTC = Calendar.getInstance(TimeZone.getTimeZone(\"utc\"));\n\n        GregorianCalendar minCalendar = new GregorianCalendar(TimeZone.getTimeZone(\"utc\"));\n        minCalendar.set(1, 1, 1);\n\n        this.addTest(createSimpleTypedRoundTripTest(\"Date: now\", calendar.getTime(), Date.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"Date: now (UTC)\", calendarUTC.getTime(), Date.class));\n        // this.addTest(createSimpleTypedRoundTripTest(\"Date: null\", null,\n        // Date.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"Date: min date\", minCalendar.getTime(), Date.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"Date: specific date, before unix 0\", new GregorianCalendar(1901, 1, 1).getTime(), Date.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"Date: specific date, after unix 0\", new GregorianCalendar(2000, 12, 31).getTime(), Date.class));\n\n        this.addTest(createSimpleTypedRoundTripTest(\"Bool: true\", true, Boolean.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"Bool: false\", false, Boolean.class));\n        // this.addTest(createSimpleTypedRoundTripTest(\"Bool: null\", null,\n        // Boolean.class));\n\n        this.addTest(createSimpleTypedRoundTripTest(\"Int: zero\", Integer.valueOf(0), Integer.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"Int: MaxValue\", Integer.valueOf(Integer.MAX_VALUE), Integer.class));\n        this.addTest(createSimpleTypedRoundTripTest(\"Int: MinValue\", Integer.valueOf(Integer.MIN_VALUE), Integer.class));\n\n\t\t/*\n         * this.addTest(createSimpleTypedRoundTripTest(\"Long: zero\",\n\t\t * Long.valueOf(0), Long.class));\n\t\t * \n\t\t * Long maxAllowedValue = 0x0020000000000000L; Long minAllowedValue =\n\t\t * 0L; minAllowedValue = Long.valueOf(0xFFE0000000000000L);\n\t\t * \n\t\t * this.addTest(createSimpleTypedRoundTripTest(\"Long: max allowed\",\n\t\t * maxAllowedValue, Long.class));\n\t\t * this.addTest(createSimpleTypedRoundTripTest(\"Long: min allowed\",\n\t\t * minAllowedValue, Long.class)); Long largePositiveValue =\n\t\t * maxAllowedValue - rndGen.nextInt(5000); Long largeNegativeValue =\n\t\t * minAllowedValue + rndGen.nextInt(5000);\n\t\t * this.addTest(createSimpleTypedRoundTripTest\n\t\t * (\"Long: large value, less than max allowed (\" + largePositiveValue +\n\t\t * \")\", largePositiveValue, Long.class));\n\t\t * this.addTest(createSimpleTypedRoundTripTest\n\t\t * (\"Long: large negative value, more than min allowed (\" +\n\t\t * largeNegativeValue + \")\", largeNegativeValue, Long.class));\n\t\t * \n\t\t * this.addTest(createSimpleTypedRoundTripTestWithException(\n\t\t * \"(Neg) Long: more than max allowed\", maxAllowedValue + 1, Long.class,\n\t\t * IllegalArgumentException.class));\n\t\t * this.addTest(createSimpleTypedRoundTripTestWithException\n\t\t * (\"(Neg) Long: less than min allowed\", minAllowedValue - 1,\n\t\t * Long.class, IllegalArgumentException.class));\n\t\t */\n\n        IntIdRoundTripTableElement element1 = new IntIdRoundTripTableElement();\n        element1.id = 1L;\n        this.addTest(createSimpleTypedRoundTripTestWithException(\"(Neg) Insert item with non-default id\", element1, IllegalArgumentException.class, false));\n\n        // untyped tests\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped String: Empty\", \"\", String.class));\n        // this.addTest(createSimpleUntypedRoundTripTest(\"Untyped String: null\",\n        // null, String.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped String: random value\", Util.createSimpleRandomString(rndGen, 10), String.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped String: large (1000 characters)\", Util.createSimpleRandomString(rndGen, 1000), String.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped String: large (64k+1 characters)\", Util.createSimpleRandomString(rndGen, 65537), String.class));\n\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Latin\", \"ãéìôü ÇñÑ\", String.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Arabic\", \"الكتاب على الطاولة\", String.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Chinese\", \"这本书在桌子上\", String.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Chinese 2\", \"⒈①Ⅻㄨㄩ 啊阿鼾齄 丂丄狚狛 狜狝﨨﨩 ˊˋ˙–〇 㐀㐁䶴䶵\", String.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Japanese\", \"本は机の上に\", String.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Hebrew\", \"הספר הוא על השולחן\", String.class));\n\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Date: now\", Util.dateToString(calendar.getTime()), Date.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Date: now (UTC)\", Util.dateToString(calendarUTC.getTime()), Date.class));\n        // this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Date: null\",\n        // null, Date.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Date: min date\", Util.dateToString(minCalendar.getTime()), Date.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Date: specific date, before unix 0\",\n                Util.dateToString(new GregorianCalendar(1901, 1, 1).getTime()), Date.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Date: specific date, after unix 0\",\n                Util.dateToString(new GregorianCalendar(2000, 12, 31).getTime()), Date.class));\n\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Bool: true\", true, Boolean.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Bool: false\", false, Boolean.class));\n        // this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Bool: null\",\n        // null, Boolean.class));\n\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Int: zero\", Integer.valueOf(0), Integer.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Int: MaxValue\", Integer.valueOf(Integer.MAX_VALUE), Integer.class));\n        this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Int: MinValue\", Integer.valueOf(Integer.MIN_VALUE), Integer.class));\n\n\t\t/*\n         * this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Long: zero\",\n\t\t * Long.valueOf(0), Long.class));\n\t\t * \n\t\t * this.addTest(createSimpleUntypedRoundTripTest(\"Untyped Long: max allowed\"\n\t\t * , maxAllowedValue, Long.class));\n\t\t * this.addTest(createSimpleUntypedRoundTripTest\n\t\t * (\"Untyped Long: min allowed\", minAllowedValue, Long.class));\n\t\t * this.addTest(createSimpleUntypedRoundTripTest(\n\t\t * \"Untyped Long: large value, less than max allowed (\" +\n\t\t * largePositiveValue + \")\", largePositiveValue, Long.class));\n\t\t * this.addTest(createSimpleUntypedRoundTripTest(\n\t\t * \"Untyped Long: large negative value, more than min allowed (\" +\n\t\t * largeNegativeValue + \")\", largeNegativeValue, Long.class));\n\t\t * \n\t\t * this.addTest(createSimpleUntypedRoundTripTestWithException(\n\t\t * \"Untyped Long: more than max allowed\", maxAllowedValue + 1,\n\t\t * Long.class, null));\n\t\t * this.addTest(createSimpleUntypedRoundTripTestWithException\n\t\t * (\"Untyped Long: less than min allowed\", minAllowedValue - 1,\n\t\t * Long.class, null));\n\t\t */\n\n        this.addTest(createSimpleUntypedRoundTripTestWithException(\"(Neg) Insert item with non-default 'id' property\", \"{\\\"id\\\":1,\\\"value\\\":2}\",\n                IllegalArgumentException.class));\n        this.addTest(createSimpleUntypedRoundTripTestWithException(\"(Neg) Insert item with non-default 'ID' property\", \"{\\\"ID\\\":1,\\\"value\\\":2}\",\n                IllegalArgumentException.class));\n        this.addTest(createSimpleUntypedRoundTripTestWithException(\"(Neg) Insert item with non-default 'Id' property\", \"{\\\"Id\\\":1,\\\"value\\\":2}\",\n                IllegalArgumentException.class));\n\n    }\n\n    private TestCase createSimpleUntypedRoundTripTest(String testName, final Object val, final Class<?> elementClass) {\n        return createSimpleUntypedRoundTripTestWithException(testName, val, elementClass, null);\n    }\n\n    private TestCase createSimpleUntypedRoundTripTestWithException(String testName, final Object val, final Class<?> elementClass,\n                                                                   Class<?> expectedExceptionClass) {\n        String propertyName = null;\n        if (elementClass == String.class) {\n            propertyName = \"name\";\n        } else if (elementClass == Date.class) {\n            propertyName = \"date1\";\n        } else if (elementClass == Boolean.class) {\n            propertyName = \"bool\";\n        } else if (elementClass == Double.class) {\n            propertyName = \"number\";\n        } else if (elementClass == Integer.class) {\n            propertyName = \"integer\";\n        }\n\n        String propertyValue;\n        if (val == null) {\n            propertyValue = \"null\";\n        } else if (val instanceof Number || val instanceof Boolean) {\n            propertyValue = val.toString();\n        } else {\n            propertyValue = \"\\\"\" + val.toString().replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\") + \"\\\"\";\n        }\n\n        String jsonString = String.format(\"{\\\"%s\\\": %s}\", propertyName, propertyValue);\n\n        return createSimpleUntypedRoundTripTestWithException(testName, jsonString, expectedExceptionClass);\n    }\n\n    private TestCase createSimpleUntypedRoundTripTestWithException(String testName, final String jsonString, final Class<?> expectedExceptionClass) {\n        TestCase testCase = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                final MobileServiceJsonTable table = client.getTable(ROUND_TRIP_TABLE_NAME);\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                final TestCase test = this;\n\n                try {\n\n                    final JsonObject json = new JsonParser().parse(jsonString).getAsJsonObject();\n\n                    log(\"insert item\");\n                    JsonObject jsonEntity = table.insert(json).get();\n\n                    int id = jsonEntity.get(\"id\").getAsInt();\n                    log(\"lookup item \" + id);\n                    JsonObject newJsonEntity = (JsonObject) table.lookUp(id).get();\n\n                    log(\"verify items are equal\");\n                    if (!Util.compareJson(json, newJsonEntity)) {\n                        createResultFromException(result, new ExpectedValueException(json, newJsonEntity));\n                    }\n\n                    if (callback != null) {\n                        callback.onTestComplete(test, result);\n                    }\n                } catch (Exception exception) {\n                    createResultFromException(result, exception);\n\n                    if (callback != null) {\n                        callback.onTestComplete(test, result);\n                    }\n                }\n            }\n        };\n\n        testCase.setExpectedExceptionClass(expectedExceptionClass);\n        testCase.setName(testName);\n        return testCase;\n    }\n\n    private TestCase createSimpleTypedRoundTripTest(String testName, final Object val, final Class<?> elementClass) {\n        return createSimpleTypedRoundTripTestWithException(testName, val, elementClass, null);\n    }\n\n    private TestCase createSimpleTypedRoundTripTestWithException(String testName, final Object val, final Class<?> elementClass, Class<?> expectedExceptionClass) {\n        final IntIdRoundTripTableElement element = new IntIdRoundTripTableElement();\n\n        if (elementClass == String.class) {\n            element.name = (String) val;\n        } else if (elementClass == Date.class) {\n            element.date1 = (Date) val;\n        } else if (elementClass == Boolean.class) {\n            element.bool = (Boolean) val;\n        } else if (elementClass == Double.class) {\n            element.number = (Double) val;\n        } else if (elementClass == Integer.class) {\n            element.integer = (Integer) val;\n        }\n\n        return createSimpleTypedRoundTripTestWithException(testName, element, expectedExceptionClass, true);\n    }\n\n    private TestCase createSimpleTypedRoundTripTestWithException(String testName, final IntIdRoundTripTableElement element,\n                                                                 final Class<?> expectedExceptionClass, final boolean removeId) {\n        TestCase testCase = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                final MobileServiceTable<IntIdRoundTripTableElement> table = client.getTable(ROUND_TRIP_TABLE_NAME, IntIdRoundTripTableElement.class);\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                final TestCase test = this;\n\n                if (removeId) {\n                    element.id = null;\n                }\n\n                log(\"insert item\");\n\n                try {\n                    IntIdRoundTripTableElement entity = table.insert(element).get();\n\n                    log(\"lookup item \" + entity.id);\n                    IntIdRoundTripTableElement newEntity = table.lookUp(entity.id).get();\n                    entity.id = newEntity.id; // patch\n                    // to\n                    // make\n                    // \"equals\"\n                    // works\n                    log(\"verify items are equal\");\n                    if (!Util.compare(entity, newEntity)) {\n                        result.setException(new ExpectedValueException(entity, newEntity));\n                        result.setStatus(TestStatus.Failed);\n                    }\n\n                    if (callback != null)\n                        callback.onTestComplete(test, result);\n\n                } catch (Exception exception) {\n                    createResultFromException(result, exception);\n                    if (callback != null)\n                        callback.onTestComplete(test, result);\n                }\n            }\n        };\n\n        testCase.setExpectedExceptionClass(expectedExceptionClass);\n        testCase.setName(testName);\n        return testCase;\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/StringIdTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport android.util.Pair;\n\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\nimport com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.ExpectedValueException;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.FilterResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.ListFilter;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.SimpleFilter;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.StringIdTableItem;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.UUID;\n\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.subString;\n\npublic class StringIdTests extends TestGroup {\n\n    protected static final String STRING_ID_TABLE_NAME = \"droidStringIdTable\";\n\n    public StringIdTests() {\n        super(\"String Id tests\");\n\n        List<StringIdTableItem> allItems = loadInitialItems();\n\n        this.addTest(createQueryTest(\"Data begining with 0-7\", allItems, subString(\"data\", 0).ge().val(\"0\").and().subString(\"data\", 0).lt().val(\"8\"),\n                new SimpleFilter<StringIdTableItem>() {\n\n                    @Override\n                    protected boolean criteria(StringIdTableItem element) {\n                        return element.data.substring(0, 1).compareToIgnoreCase(\"0\") >= 0 && element.data.substring(0, 1).compareToIgnoreCase(\"8\") < 0;\n                    }\n                }));\n\n        this.addTest(createQueryTest(\"Id begining with 0-7\", allItems, subString(\"id\", 0).ge().val(\"0\").and().subString(\"id\", 0).lt().val(\"8\"),\n                new SimpleFilter<StringIdTableItem>() {\n\n                    @Override\n                    protected boolean criteria(StringIdTableItem element) {\n                        return element.id.substring(0, 1).compareToIgnoreCase(\"0\") >= 0 && element.id.substring(0, 1).compareToIgnoreCase(\"8\") < 0;\n                    }\n                }));\n\n        String jsonItem = \"{\\\"data\\\": \\\"\" + UUID.randomUUID().toString() + \"\\\"}\";\n\n        this.addTest(createSimpleUntypedRoundTripTestWithException(\"Round Trip Untyped\", jsonItem, null));\n\n        StringIdTableItem item = new StringIdTableItem();\n        item.data = UUID.randomUUID().toString();\n\n        this.addTest(createSimpleTypedRoundTripTestWithException(\"Round Trip Typed\", item, null, false));\n    }\n\n    private List<StringIdTableItem> loadInitialItems() {\n        List<StringIdTableItem> allItems = new ArrayList<StringIdTableItem>();\n\n        for (int i = 0; i < 10; i++) {\n            final StringIdTableItem item = new StringIdTableItem();\n            item.data = UUID.randomUUID().toString();\n\n            TestCase test = new TestCase() {\n\n                @Override\n                protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                    final TestCase testCase = this;\n                    TestResult result = null;\n\n                    try {\n                        client.getTable(STRING_ID_TABLE_NAME, StringIdTableItem.class).insert(item).get();\n\n                        result = new TestResult();\n                        result.setTestCase(testCase);\n                        result.setStatus(TestStatus.Passed);\n\n                    } catch (Exception exception) {\n                        result = createResultFromException(exception);\n                    } finally {\n                        if (callback != null)\n                            callback.onTestComplete(testCase, result);\n\n                    }\n                }\n            };\n\n            allItems.add(item);\n\n            test.setName(\"Add initial item - Index: \" + i);\n            this.addTest(test);\n        }\n\n        return allItems;\n    }\n\n    private TestCase createQueryTest(String name, List<StringIdTableItem> allItems, final Query filter, final ListFilter<StringIdTableItem> expectedResultFilter) {\n\n        return createQueryTest(name, allItems, filter, expectedResultFilter, null, null, null, null, false, null);\n    }\n\n    private TestCase createQueryTest(String name, final List<StringIdTableItem> allItems, final Query filter,\n                                     final ListFilter<StringIdTableItem> expectedResultFilter, final Integer top, final Integer skip, final List<Pair<String, QueryOrder>> orderBy,\n                                     final String[] projection, final boolean includeInlineCount, final Class<?> expectedExceptionClass) {\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                ExecutableQuery<StringIdTableItem> query;\n\n                if (filter != null) {\n                    log(\"add filter\");\n                    query = client.getTable(STRING_ID_TABLE_NAME, StringIdTableItem.class).where(filter);\n                } else {\n                    query = client.getTable(STRING_ID_TABLE_NAME, StringIdTableItem.class).where();\n                }\n\n                if (top != null) {\n                    log(\"add top\");\n                    query = query.top(top);\n                }\n\n                if (skip != null) {\n                    log(\"add skip\");\n                    query = query.skip(skip);\n                }\n\n                if (orderBy != null) {\n                    log(\"add orderby\");\n                    for (Pair<String, QueryOrder> order : orderBy) {\n                        query = query.orderBy(order.first, order.second);\n                    }\n                }\n\n                if (projection != null) {\n                    log(\"add projection\");\n                    query = query.select(projection);\n                }\n\n                if (includeInlineCount) {\n                    log(\"add inlinecount\");\n                    query.includeInlineCount();\n                }\n\n                final TestCase testCase = this;\n                TestResult result = new TestResult();\n\n                try {\n                    List<StringIdTableItem> elements = query.execute().get();\n\n                    result.setStatus(TestStatus.Passed);\n                    result.setTestCase(testCase);\n\n                    FilterResult<StringIdTableItem> expectedData = expectedResultFilter.filter(allItems);\n\n                    log(\"verify result\");\n                    if (Util.compareLists(expectedData.elements, elements)) {\n                    } else {\n                        createResultFromException(result, new ExpectedValueException(Util.listToString(expectedData.elements), Util.listToString(elements)));\n                    }\n                } catch (Exception exception) {\n                    createResultFromException(result, exception);\n                } finally {\n                    callback.onTestComplete(testCase, result);\n                }\n            }\n        };\n\n        test.setExpectedExceptionClass(expectedExceptionClass);\n        test.setName(name);\n\n        return test;\n    }\n\n    private TestCase createSimpleUntypedRoundTripTestWithException(String testName, final String jsonString, final Class<?> expectedExceptionClass) {\n        TestCase testCase = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                final MobileServiceJsonTable table = client.getTable(STRING_ID_TABLE_NAME);\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                final TestCase test = this;\n\n                final JsonObject json = new JsonParser().parse(jsonString).getAsJsonObject();\n\n                log(\"insert item\");\n\n                try {\n\n                    JsonObject jsonEntity = table.insert(json).get();\n\n                    String id = jsonEntity.get(\"id\").getAsString();\n                    log(\"lookup item \" + id);\n\n                    JsonObject newJsonEntity = (JsonObject) table.lookUp(id).get();\n\n                    log(\"verify items are equal\");\n                    if (!Util.compareJson(json, newJsonEntity)) {\n                        createResultFromException(result, new ExpectedValueException(jsonEntity, newJsonEntity));\n                    }\n\n                    if (callback != null)\n                        callback.onTestComplete(test, result);\n                } catch (Exception exception) {\n\n                    createResultFromException(result, exception);\n                    if (callback != null)\n                        callback.onTestComplete(test, result);\n                }\n            }\n        };\n\n        testCase.setExpectedExceptionClass(expectedExceptionClass);\n        testCase.setName(testName);\n        return testCase;\n    }\n\n    private TestCase createSimpleTypedRoundTripTestWithException(String testName, final StringIdTableItem element, final Class<?> expectedExceptionClass,\n                                                                 final boolean removeId) {\n        TestCase testCase = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                final MobileServiceTable<StringIdTableItem> table = client.getTable(STRING_ID_TABLE_NAME, StringIdTableItem.class);\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n                final TestCase test = this;\n\n                if (removeId) {\n                    element.id = null;\n                }\n\n                log(\"insert item\");\n\n                try {\n                    StringIdTableItem entity = table.insert(element).get();\n\n                    log(\"lookup item \" + entity.id);\n                    StringIdTableItem newEntity = table.lookUp(entity.id).get();\n\n                    entity.id = newEntity.id; // patch\n                    // to\n                    // make\n                    // \"equals\"\n                    // works\n                    log(\"verify items are equal\");\n\n                    if (!Util.compare(entity, newEntity)) {\n                        result.setException(new ExpectedValueException(entity, newEntity));\n                        result.setStatus(TestStatus.Failed);\n                    }\n\n                    if (callback != null)\n                        callback.onTestComplete(test, result);\n                } catch (Exception exception) {\n                    createResultFromException(result, exception);\n                    if (callback != null)\n                        callback.onTestComplete(test, result);\n                }\n            }\n        };\n\n        testCase.setExpectedExceptionClass(expectedExceptionClass);\n        testCase.setName(testName);\n        return testCase;\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/SystemPropertiesTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport android.annotation.SuppressLint;\nimport android.os.AsyncTask;\nimport android.os.Build;\nimport android.util.Base64;\nimport android.util.Pair;\n\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.table.DateTimeOffset;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceConflictException;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceConflictExceptionJson;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedException;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServicePreconditionFailedExceptionJson;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\nimport com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOperations;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.ExpectedValueException;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util.IPredicate;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.StringIdJsonElement;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.StringIdRoundTripTableElement;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.SystemPropertiesTestData;\n\nimport java.util.ArrayList;\nimport java.util.EnumSet;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.UUID;\nimport java.util.concurrent.ExecutionException;\n\nimport static com.microsoft.windowsazure.mobileservices.table.query.QueryOperations.field;\nimport static com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util.compare;\nimport static com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util.filter;\n\n//import com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.StringIdRoundTripTableSoftDeleteElement;\n\npublic class SystemPropertiesTests extends TestGroup {\n\n    protected static final String STRING_ID_TABLE_NAME = \"RoundTripTable\";\n\n    boolean isNetBackend;\n\n    public SystemPropertiesTests(boolean isNetBackend) {\n        super(\"System Properties tests\");\n\n        this.isNetBackend = isNetBackend;\n\n        this.addTest(createTypeSystemPropertiesTest(\"Operations with All System Properties from Type\"));\n\n        if (!this.isNetBackend) {\n            this.addTest(createCustomSystemPropertiesTest(\"Operations with Custom System Properties set on Table\"));\n        }\n\n        if (isNetBackend) {\n            for (String systemProperties : SystemPropertiesTestData.ValidSystemPropertyQueryStringsForNet) {\n                this.addTest(createQueryParameterSystemPropertiesTest(\"Operations with Query Parameter System Properties set on Table - \" + systemProperties,\n                        systemProperties));\n            }\n        } else {\n            for (String systemProperties : SystemPropertiesTestData.ValidSystemPropertyQueryStringsForNode) {\n                this.addTest(createQueryParameterSystemPropertiesTest(\"Operations with Query Parameter System Properties set on Table - \" + systemProperties,\n                        systemProperties));\n            }\n        }\n        this.addTest(createMergeConflictTest(\"Merge Conflict\"));\n        this.addTest(createMergeConflictGenericTest(\"Merge Conflict Generic\"));\n\n        this.addTest(createDuplicateConflictTest(\"Duplicate Conflict\"));\n        this.addTest(createDuplicateConflictGenericTest(\"Duplicate Conflict Generic\"));\n\n    }\n\n    private TestCase createTypeSystemPropertiesTest(String name) {\n        final StringIdRoundTripTableElement element = new StringIdRoundTripTableElement(true);\n        element.id = UUID.randomUUID().toString();\n\n        TestCase roundtripTest = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase test = this;\n\n                executeTask(new AsyncTask<Void, Void, Void>() {\n                    @Override\n                    protected Void doInBackground(Void... params) {\n                        TestResult result = new TestResult();\n                        result.setTestCase(test);\n\n                        try {\n\n                            MobileServiceTable<StringIdRoundTripTableElement> table = client\n                                    .getTable(STRING_ID_TABLE_NAME, StringIdRoundTripTableElement.class);\n\n                            log(\"Insert item - \" + element.toString());\n                            final StringIdRoundTripTableElement responseElement1 = insert(table, element);\n\n                            log(\"Verify system properties are not null\");\n                            verifySystemProperties(\"Insert response\", responseElement1, isNetBackend) ;\n\n                            log(\"Read table\");\n\n                            Query query = QueryOperations.field(\"id\");\n\n                            query.eq(responseElement1.id);\n\n                            List<StringIdRoundTripTableElement> responseElements2 = read(table, query);\n\n                            List<StringIdRoundTripTableElement> filteredResponseElements = filter(responseElements2,\n                                    new IPredicate<StringIdRoundTripTableElement>() {\n                                        @Override\n                                        public boolean evaluate(StringIdRoundTripTableElement type) {\n                                            return type.id.equals(responseElement1.id);\n                                        }\n                                    });\n\n                            log(\"Verify previously inserted item is included in the response\");\n                            if (filteredResponseElements == null || filteredResponseElements.size() == 0) {\n                                throw new Exception(\"Read response - Missing previously inserted element\");\n                            }\n\n                            StringIdRoundTripTableElement responseElement2 = filteredResponseElements.get(0);\n\n                            log(\"Verify system properties are not null\");\n                            verifySystemProperties(\"Read response\", responseElement2, isNetBackend);\n\n                            final String versionFilter = responseElement1.Version;\n\n                            List<StringIdRoundTripTableElement> filteredVersionResponseElements = filter(responseElements2,\n                                    new IPredicate<StringIdRoundTripTableElement>() {\n                                        @Override\n                                        public boolean evaluate(StringIdRoundTripTableElement element) {\n                                            return element.Version.equals(versionFilter);\n                                        }\n                                    });\n\n                            log(\"Filter table - Version\");\n\n                            List<StringIdRoundTripTableElement> filteredVersionElements = null;\n\n                            if (isNetBackend) {\n                                byte[] versionFilterBytes = Base64.decode(versionFilter.getBytes(), Base64.DEFAULT);\n                                filteredVersionElements = read(table, field(\"__version\").eq(versionFilterBytes));\n                            } else {\n                                filteredVersionElements = read(table, field(\"__version\").eq().val(versionFilter));\n                            }\n\n                            log(\"Verify response size\");\n                            if (filteredVersionElements == null || filteredVersionElements.size() != filteredVersionResponseElements.size()) {\n                                throw new Exception(\"Filter response - Version - incorrect number of records\");\n                            }\n\n                            log(\"Verify system properties are not null\");\n                            for (StringIdRoundTripTableElement filteredVersionElement : filteredVersionElements) {\n                                if (filteredVersionElement.Version == null) {\n                                    throw new Exception(\"Filter response - Version is null\");\n                                } else if (!filteredVersionElement.Version.equals(versionFilter)) {\n                                    throw new ExpectedValueException(versionFilter, filteredVersionElement.Version);\n                                }\n                            }\n\n                            final DateTimeOffset createdAtFilter = new DateTimeOffset(responseElement1.CreatedAt);\n\n                            List<StringIdRoundTripTableElement> filteredCreatedAtResponseElements = filter(responseElements2,\n                                    new IPredicate<StringIdRoundTripTableElement>() {\n                                        @Override\n                                        public boolean evaluate(StringIdRoundTripTableElement element) {\n                                            return element.CreatedAt.equals(createdAtFilter);\n                                        }\n                                    });\n\n                            log(\"Filter table - CreatedAt\");\n                            List<StringIdRoundTripTableElement> filteredCreatedAtElements = read(table, field(\"__createdAt\").ge().val(createdAtFilter));\n\n                            log(\"verify response size\");\n                            if (filteredCreatedAtElements == null || filteredCreatedAtElements.size() != filteredCreatedAtResponseElements.size()) {\n                                throw new Exception(\"Filter response - CreatedAt - incorrect number of records\");\n                            }\n\n                            log(\"verify system properties are not null\");\n                            for (StringIdRoundTripTableElement filteredCreatedAtElement : filteredCreatedAtElements) {\n                                if (filteredCreatedAtElement.CreatedAt == null) {\n                                    throw new Exception(\"Filter response - CreatedAt is null\");\n                                } else if (!filteredCreatedAtElement.CreatedAt.equals(createdAtFilter)) {\n                                    throw new ExpectedValueException(createdAtFilter, filteredCreatedAtElement.CreatedAt);\n                                }\n                            }\n\n                            final DateTimeOffset updatedAtFilter = new DateTimeOffset(responseElement1.UpdatedAt);\n\n                            List<StringIdRoundTripTableElement> filteredUpdatedAtResponseElements = filter(responseElements2,\n                                    new IPredicate<StringIdRoundTripTableElement>() {\n                                        @Override\n                                        public boolean evaluate(StringIdRoundTripTableElement element) {\n                                            return element.UpdatedAt.equals(updatedAtFilter);\n                                        }\n                                    });\n\n                            log(\"Filter table - UpdatedAt\");\n                            List<StringIdRoundTripTableElement> filteredUpdatedAtElements = read(table, field(\"__updatedAt\").ge().val(updatedAtFilter));\n\n                            log(\"verify response size\");\n                            if (filteredUpdatedAtElements == null || filteredUpdatedAtElements.size() != filteredUpdatedAtResponseElements.size()) {\n                                throw new Exception(\"Filter response - UpdatedAt - incorrect number of records\");\n                            }\n\n                            log(\"verify system properties are not null\");\n                            for (StringIdRoundTripTableElement filteredUpdatedAtElement : filteredUpdatedAtElements) {\n                                if (filteredUpdatedAtElement.UpdatedAt == null) {\n                                    throw new Exception(\"Filter response - UpdatedAt is null\");\n                                } else if (!filteredUpdatedAtElement.UpdatedAt.equals(updatedAtFilter)) {\n                                    throw new ExpectedValueException(updatedAtFilter, filteredUpdatedAtElement.UpdatedAt);\n                                }\n                            }\n\n                            String lookUpId = responseElement1.id;\n\n                            log(\"LookUp\");\n                            StringIdRoundTripTableElement lookUpElement = lookUp(table, lookUpId);\n\n                            log(\"verify element is not null\");\n                            if (lookUpElement == null) {\n                                throw new Exception(\"LookUp response - Element is null\");\n                            }\n\n                            if (!compare(responseElement1.id, lookUpElement.id)) {\n                                throw new ExpectedValueException(responseElement1.id, lookUpElement.id);\n                            }\n\n                            if (!compare(responseElement1.Version, lookUpElement.Version)) {\n                                throw new ExpectedValueException(responseElement1.Version, lookUpElement.Version);\n                            }\n\n                            if (!compare(responseElement1.CreatedAt, lookUpElement.CreatedAt)) {\n                                throw new ExpectedValueException(responseElement1.CreatedAt, lookUpElement.CreatedAt);\n                            }\n\n                            if (!compare(responseElement1.UpdatedAt, lookUpElement.UpdatedAt)) {\n                                throw new ExpectedValueException(responseElement1.UpdatedAt, lookUpElement.UpdatedAt);\n                            }\n\n                            StringIdRoundTripTableElement updateElement = new StringIdRoundTripTableElement(responseElement1);\n                            updateElement.name = \"Other Sample Data\";\n\n                            log(\"Update\");\n                            updateElement = update(table, updateElement);\n\n                            log(\"Verify element is not null\");\n                            if (updateElement == null) {\n                                throw new Exception(\"Update response - Element is null\");\n                            }\n\n                            if (!compare(responseElement1.id, updateElement.id)) {\n                                throw new ExpectedValueException(responseElement1.id, updateElement.id);\n                            }\n\n                            if (compare(responseElement1.Version, updateElement.Version)) {\n                                throw new Exception(\"Update response - same Version\");\n                            }\n\n                            if (!compare(responseElement1.CreatedAt, updateElement.CreatedAt)) {\n                                throw new ExpectedValueException(responseElement1.CreatedAt, updateElement.CreatedAt);\n                            }\n\n                            if (!responseElement1.UpdatedAt.before(updateElement.UpdatedAt)) {\n                                throw new Exception(\"Update response - incorrect UpdatedAt\");\n                            }\n\n                            log(\"Delete element\");\n                            delete(table, updateElement);\n\n                            result.setStatus(TestStatus.Passed);\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        } catch (Exception ex) {\n                            result = createResultFromException(result, ex);\n\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        }\n\n                        return null;\n                    }\n                });\n            }\n        };\n\n        roundtripTest.setName(name);\n        return roundtripTest;\n    }\n\n    private TestCase createCustomSystemPropertiesTest(String name) {\n        TestCase roundtripTest = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase test = this;\n\n                executeTask(new AsyncTask<Void, Void, Void>() {\n                    @Override\n                    protected Void doInBackground(Void... params) {\n                        TestResult result = new TestResult();\n                        result.setTestCase(test);\n\n                        try {\n\n                            MobileServiceTable<StringIdRoundTripTableElement> table = client\n                                    .getTable(STRING_ID_TABLE_NAME, StringIdRoundTripTableElement.class);\n\n                            StringIdRoundTripTableElement element1 = new StringIdRoundTripTableElement(true);\n                            element1.id = UUID.randomUUID().toString();\n\n                            log(\"Insert element 1 with Type System Properties - \" + element1.toString());\n                            StringIdRoundTripTableElement responseElement1 = insert(table, element1);\n\n                            log(\"Verify system properties are not null\");\n                            verifySystemProperties(\"Insert response\", responseElement1, isNetBackend);\n\n                            StringIdRoundTripTableElement element2 = new StringIdRoundTripTableElement(true);\n                            element2.id = UUID.randomUUID().toString();\n\n                            EnumSet<MobileServiceSystemProperty> systemProperties2 = EnumSet.noneOf(MobileServiceSystemProperty.class);\n                            systemProperties2.add(MobileServiceSystemProperty.Version);\n                            systemProperties2.add(MobileServiceSystemProperty.CreatedAt);\n\n                            table.setSystemProperties(systemProperties2);\n\n                            log(\"Insert element 2 with Custom System Properties - Version|CreatedAt - \" + element2.toString());\n                            StringIdRoundTripTableElement responseElement2 = insert(table, element2);\n\n                            log(\"Verify Version|CreatedAt System Properties are not null, and UpdateAt and Delete is null or default\");\n                            verifySystemProperties(\"Insert response\", true, false, true, false, responseElement2, isNetBackend);\n\n                            EnumSet<MobileServiceSystemProperty> systemProperties3 = EnumSet.noneOf(MobileServiceSystemProperty.class);\n                            systemProperties3.add(MobileServiceSystemProperty.Version);\n                            systemProperties3.add(MobileServiceSystemProperty.UpdatedAt);\n                            systemProperties3.add(MobileServiceSystemProperty.Deleted);\n\n\n                            table.setSystemProperties(systemProperties3);\n\n                            log(\"Filter element2 id with Custom System Properties - Version|UpdatedAt\");\n                            List<StringIdRoundTripTableElement> responseElements3 = read(table, field(\"id\").eq().val(element2.id));\n\n                            log(\"Verify response size\");\n                            if (responseElements3 == null || responseElements3.size() != 1) {\n                                throw new Exception(\"Read response - incorrect number of records\");\n                            }\n\n                            StringIdRoundTripTableElement responseElement3 = responseElements3.get(0);\n\n                            log(\"Verify Version|UpdatedAt|Deleted System Properties are not null, and CreatedAt is null or default\");\n                            verifySystemProperties(\"Read response\", false, true, true, true, responseElement3, isNetBackend);\n\n                            EnumSet<MobileServiceSystemProperty> systemProperties4 = EnumSet.noneOf(MobileServiceSystemProperty.class);\n\n                            table.setSystemProperties(systemProperties4);\n\n                            log(\"Lookup element2 id with No System Properties\");\n                            StringIdRoundTripTableElement responseElement4 = lookUp(table, element2.id);\n\n                            log(\"Verify Version|CreatedAt|UpdatedAt|Deleted System Properties are null\");\n                            verifySystemProperties(\"Read response\", false, false, false, false, responseElement4, isNetBackend);\n\n                            log(\"Delete element\");\n                            delete(table, responseElement1);\n\n                            result.setStatus(TestStatus.Passed);\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        } catch (Exception ex) {\n                            result = createResultFromException(result, ex);\n\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        }\n\n                        return null;\n                    }\n                });\n            }\n        };\n\n        roundtripTest.setName(name);\n        return roundtripTest;\n    }\n\n    private TestCase createQueryParameterSystemPropertiesTest(String name, final String systemProperties) {\n        TestCase roundtripTest = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase test = this;\n\n                executeTask(new AsyncTask<Void, Void, Void>() {\n                    @Override\n                    protected Void doInBackground(Void... params) {\n                        TestResult result = new TestResult();\n                        result.setTestCase(test);\n\n                        try {\n\n                            MobileServiceTable<StringIdRoundTripTableElement> table = client\n                                    .getTable(STRING_ID_TABLE_NAME, StringIdRoundTripTableElement.class);\n\n                            String[] systemPropertiesKeyValue = systemProperties.split(\"=\");\n                            String key = systemPropertiesKeyValue[0];\n                            String value = systemPropertiesKeyValue[1];\n                            List<Pair<String, String>> userParameters = new ArrayList<Pair<String, String>>();\n                            userParameters.add(new Pair<String, String>(key, value));\n\n                            boolean shouldHaveCreatedAt = value.toLowerCase(Locale.getDefault()).contains(\"created\");\n                            boolean shouldHaveUpdatedAt = value.toLowerCase(Locale.getDefault()).contains(\"updated\");\n                            boolean shouldHaveVersion = value.toLowerCase(Locale.getDefault()).contains(\"version\");\n                            boolean shouldHaveDeleted = value.toLowerCase(Locale.getDefault()).contains(\"deleted\");\n\n                            if (value.trim().equals(\"*\")) {\n                                shouldHaveVersion = shouldHaveUpdatedAt = shouldHaveCreatedAt = shouldHaveDeleted = true;\n                            }\n\n                            StringIdRoundTripTableElement element1 = new StringIdRoundTripTableElement(true);\n                            element1.id = UUID.randomUUID().toString();\n\n                            log(\"Insert element 1 with Query Parameter System Properties - \" + element1.toString() + \" - \" + systemProperties);\n                            final StringIdRoundTripTableElement responseElement1 = insert(table, element1, userParameters);\n\n                            log(\"Verify Query Parameter System Properties\");\n                            verifySystemProperties(\"Insert Response\", shouldHaveCreatedAt, shouldHaveUpdatedAt, shouldHaveVersion, shouldHaveDeleted, responseElement1, isNetBackend);\n\n                            Query query = QueryOperations.field(\"id\");\n\n                            query.eq(responseElement1.id);\n\n                            log(\"Read with Query Parameter System Properties - \" + systemProperties);\n                            List<StringIdRoundTripTableElement> responseElements2 = read(table, query, userParameters);\n\n                            List<StringIdRoundTripTableElement> filteredResponseElements = filter(responseElements2,\n                                    new IPredicate<StringIdRoundTripTableElement>() {\n                                        @Override\n                                        public boolean evaluate(StringIdRoundTripTableElement type) {\n                                            return type.id.equals(responseElement1.id);\n                                        }\n                                    });\n\n                            log(\"Verify previously inserted item is included in the response\");\n                            if (filteredResponseElements == null || filteredResponseElements.size() == 0) {\n                                throw new Exception(\"Read response - Missing previously inserted element\");\n                            }\n\n                            StringIdRoundTripTableElement responseElement2 = filteredResponseElements.get(0);\n\n                            log(\"Verify Query Parameter System Properties\");\n                            verifySystemProperties(\"Read Response\", shouldHaveCreatedAt, shouldHaveUpdatedAt, shouldHaveVersion, shouldHaveDeleted, responseElement2, isNetBackend);\n\n                            log(\"Filter element1 id with Query Parameter System Properties - \" + systemProperties);\n                            List<StringIdRoundTripTableElement> responseElements3 = read(table, field(\"id\").eq().val(element1.id), userParameters);\n\n                            log(\"Verify response size\");\n                            if (responseElements3 == null || responseElements3.size() != 1) {\n                                throw new Exception(\"Filter response - incorrect number of records\");\n                            }\n\n                            StringIdRoundTripTableElement responseElement3 = responseElements3.get(0);\n\n                            log(\"Verify Query Parameter System Properties\");\n                            verifySystemProperties(\"Filter Response\", shouldHaveCreatedAt, shouldHaveUpdatedAt, shouldHaveVersion, shouldHaveDeleted, responseElement3, isNetBackend);\n\n                            log(\"Lookup element1 id with Query Parameter System Properties - \" + systemProperties);\n                            StringIdRoundTripTableElement responseElement4 = lookUp(table, element1.id, userParameters);\n\n                            log(\"Verify Query Parameter System Properties\");\n                            verifySystemProperties(\"Lookup Response\", shouldHaveCreatedAt, shouldHaveUpdatedAt, shouldHaveVersion, shouldHaveDeleted, responseElement4, isNetBackend);\n\n                            StringIdRoundTripTableElement updateElement1 = new StringIdRoundTripTableElement(element1);\n                            updateElement1.name = \"Other Sample Data\";\n\n                            log(\"Update element1 with Query Parameter System Properties - \" + updateElement1.toString() + \" - \" + systemProperties);\n                            StringIdRoundTripTableElement responseElement5 = update(table, updateElement1, userParameters);\n\n                            log(\"Verify Query Parameter System Properties\");\n                            verifySystemProperties(\"Update Response\", shouldHaveCreatedAt, shouldHaveUpdatedAt, shouldHaveVersion, shouldHaveDeleted, responseElement5, isNetBackend);\n\n                            log(\"Delete element\");\n                            delete(table, responseElement5);\n\n                            result.setStatus(TestStatus.Passed);\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        } catch (Exception ex) {\n                            result = createResultFromException(result, ex);\n\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        }\n\n                        return null;\n                    }\n                });\n            }\n        };\n\n        roundtripTest.setName(name);\n\n        return roundtripTest;\n    }\n\n    private TestCase createMergeConflictTest(String name) {\n        TestCase roundtripTest = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase test = this;\n\n                executeTask(new AsyncTask<Void, Void, Void>() {\n                    @Override\n                    protected Void doInBackground(Void... params) {\n                        TestResult result = new TestResult();\n                        result.setTestCase(test);\n\n                        JsonObject responseJsonElement1 = null;\n\n                        try {\n                            MobileServiceJsonTable jsonTable = client.getTable(STRING_ID_TABLE_NAME);\n\n                            EnumSet<MobileServiceSystemProperty> systemProperties = EnumSet.noneOf(MobileServiceSystemProperty.class);\n                            systemProperties.add(MobileServiceSystemProperty.Version);\n\n                            jsonTable.setSystemProperties(systemProperties);\n\n                            StringIdJsonElement element1 = new StringIdJsonElement(true);\n\n                            JsonObject jsonElement1 = client.getGsonBuilder().create().toJsonTree(element1).getAsJsonObject();\n\n                            log(\"Insert Json element 1 - \" + jsonElement1.toString());\n                            responseJsonElement1 = insert(jsonTable, jsonElement1);\n\n                            JsonObject responseJsonElement1Copy = new JsonParser().parse(responseJsonElement1.toString()).getAsJsonObject();\n\n                            responseJsonElement1Copy.remove(\"__version\");\n                            responseJsonElement1Copy.addProperty(\"__version\", \"BAAAAAAAdkw=\");\n\n                            log(\"Update response Json element 1 copy - \" + responseJsonElement1Copy.toString());\n                            update(jsonTable, responseJsonElement1Copy);\n\n                            result.setStatus(TestStatus.Failed);\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        } catch (Exception ex) {\n                            if (ex.getCause() instanceof MobileServicePreconditionFailedExceptionJson) {\n                                MobileServicePreconditionFailedExceptionJson preconditionFailed = (MobileServicePreconditionFailedExceptionJson) ex.getCause();\n                                JsonObject serverValue = preconditionFailed.getValue();\n\n                                String serverVersion = serverValue.get(\"__version\").getAsString();\n                                String responseVersion = responseJsonElement1.get(\"__version\").getAsString();\n\n                                if (!serverVersion.equals(responseVersion)) {\n                                    ex = new ExpectedValueException(serverVersion, responseVersion);\n                                } else {\n                                    result.setStatus(TestStatus.Passed);\n\n                                    if (callback != null) {\n                                        callback.onTestComplete(test, result);\n                                    }\n\n                                    return null;\n                                }\n                            }\n\n                            result = createResultFromException(result, ex);\n\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        }\n\n                        return null;\n                    }\n\n                    ;\n                });\n            }\n        };\n\n        roundtripTest.setName(name);\n        return roundtripTest;\n    }\n\n    private TestCase createMergeConflictGenericTest(String name) {\n        TestCase roundtripTest = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase test = this;\n\n                executeTask(new AsyncTask<Void, Void, Void>() {\n                    @Override\n                    protected Void doInBackground(Void... params) {\n                        TestResult result = new TestResult();\n                        result.setTestCase(test);\n\n                        StringIdRoundTripTableElement responseElement1 = null;\n\n                        try {\n                            MobileServiceTable<StringIdRoundTripTableElement> table = client\n                                    .getTable(STRING_ID_TABLE_NAME, StringIdRoundTripTableElement.class);\n\n                            StringIdRoundTripTableElement element1 = new StringIdRoundTripTableElement(true);\n\n                            log(\"Insert element 1 - \" + element1.toString());\n                            responseElement1 = insert(table, element1);\n\n                            StringIdRoundTripTableElement responseElement1Copy = new StringIdRoundTripTableElement(responseElement1);\n\n                            responseElement1Copy.Version = \"BAAAAAAAdkw=\";\n\n                            log(\"Update response element 1 copy - \" + responseElement1Copy.toString());\n                            update(table, responseElement1Copy);\n\n                            result.setStatus(TestStatus.Failed);\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        } catch (Exception ex) {\n                            if (ex.getCause() instanceof MobileServicePreconditionFailedException) {\n                                MobileServicePreconditionFailedException preconditionFailed = (MobileServicePreconditionFailedException) ex.getCause();\n                                StringIdRoundTripTableElement serverValue = (StringIdRoundTripTableElement) preconditionFailed.getItem();\n\n                                String serverVersion = serverValue.Version;\n                                String responseVersion = responseElement1.Version;\n\n                                if (!serverVersion.equals(responseVersion)) {\n                                    ex = new ExpectedValueException(serverVersion, responseVersion);\n                                } else {\n                                    result.setStatus(TestStatus.Passed);\n\n                                    if (callback != null) {\n                                        callback.onTestComplete(test, result);\n                                    }\n\n                                    return null;\n                                }\n                            }\n\n                            result = createResultFromException(result, ex);\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n\n                        }\n\n                        return null;\n                    }\n                });\n            }\n        };\n\n        roundtripTest.setName(name);\n        return roundtripTest;\n    }\n\n    private TestCase createDuplicateConflictTest(String name) {\n        TestCase roundtripTest = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase test = this;\n\n                executeTask(new AsyncTask<Void, Void, Void>() {\n                    @Override\n                    protected Void doInBackground(Void... params) {\n                        TestResult result = new TestResult();\n                        result.setTestCase(test);\n\n\n                        UUID uuId = UUID.randomUUID();\n\n                        StringIdJsonElement element1 = new StringIdJsonElement(uuId.toString());\n\n                        try {\n                            MobileServiceJsonTable jsonTable = client.getTable(STRING_ID_TABLE_NAME);\n\n                            EnumSet<MobileServiceSystemProperty> systemProperties = EnumSet.noneOf(MobileServiceSystemProperty.class);\n                            systemProperties.add(MobileServiceSystemProperty.Version);\n\n                            jsonTable.setSystemProperties(systemProperties);\n\n                            JsonObject jsonElement1 = client.getGsonBuilder().create().toJsonTree(element1).getAsJsonObject();\n\n                            log(\"Insert Json element 1 - \" + jsonElement1.toString());\n                            insert(jsonTable, jsonElement1);\n\n                            log(\"Insert Json element 1 Again - \" + jsonElement1.toString());\n                            insert(jsonTable, jsonElement1);\n\n                            result.setStatus(TestStatus.Failed);\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        } catch (Exception ex) {\n                            if (ex.getCause() instanceof MobileServiceConflictExceptionJson) {\n\n                                MobileServiceConflictExceptionJson exc = (MobileServiceConflictExceptionJson) ex.getCause();\n\n                                JsonObject item = exc.getValue();\n\n                                if (item != null) {\n                                    result = createResultFromException(result, new ExpectedValueException(null, exc.getValue()));\n                                } else {\n                                    result.setStatus(TestStatus.Passed);\n                                }\n\n                                if (callback != null) {\n                                    callback.onTestComplete(test, result);\n                                }\n\n                                return null;\n                            }\n\n                            result = createResultFromException(result, ex);\n\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        }\n\n                        return null;\n                    }\n\n                    ;\n                });\n            }\n        };\n\n        roundtripTest.setName(name);\n        return roundtripTest;\n    }\n\n    private TestCase createDuplicateConflictGenericTest(String name) {\n        TestCase roundtripTest = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                final TestCase test = this;\n\n                executeTask(new AsyncTask<Void, Void, Void>() {\n                    @Override\n                    protected Void doInBackground(Void... params) {\n                        TestResult result = new TestResult();\n                        result.setTestCase(test);\n\n                        StringIdRoundTripTableElement element1 = new StringIdRoundTripTableElement(\"1\");\n\n                        try {\n                            MobileServiceTable<StringIdRoundTripTableElement> table = client\n                                    .getTable(STRING_ID_TABLE_NAME, StringIdRoundTripTableElement.class);\n\n                            log(\"Insert element 1 - \" + element1.toString());\n                            insert(table, element1);\n\n                            log(\"Insert element 1 Again - \" + element1.toString());\n                            insert(table, element1);\n\n                            result.setStatus(TestStatus.Failed);\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        } catch (Exception ex) {\n                            if (ex.getCause() instanceof MobileServiceConflictException) {\n\n                                MobileServiceConflictException exc = (MobileServiceConflictException) ex.getCause();\n\n                                Object item = exc.getItem();\n\n                                if (item != null) {\n                                    result = createResultFromException(result, new ExpectedValueException(null, exc.getItem()));\n                                } else {\n                                    result.setStatus(TestStatus.Passed);\n                                }\n\n                                if (callback != null) {\n                                    callback.onTestComplete(test, result);\n                                }\n\n                                return null;\n                            }\n\n                            result = createResultFromException(result, ex);\n\n                            if (callback != null) {\n                                callback.onTestComplete(test, result);\n                            }\n                        }\n\n                        return null;\n                    }\n                });\n            }\n        };\n\n        roundtripTest.setName(name);\n        return roundtripTest;\n    }\n\n    private <T> List<T> read(final MobileServiceTable<T> table, final Query filter) throws Exception {\n        return read(table, filter, null);\n    }\n\n    private <T> List<T> read(final MobileServiceTable<T> table, final Query filter, final List<Pair<String, String>> parameters) throws Exception {\n\n        ExecutableQuery<T> query;\n\n        if (filter != null) {\n            query = table.where(filter);\n        } else {\n            query = table.where();\n        }\n\n        if (parameters != null) {\n            for (Pair<String, String> parameter : parameters) {\n                query.parameter(parameter.first, parameter.second);\n            }\n        }\n\n        try {\n            List<T> responseElements = table.execute(query).get();\n            return responseElements;\n\n        } catch (Exception exception) {\n            throw exception;\n        }\n    }\n\n    private <T> T lookUp(final MobileServiceTable<T> table, final Object id) throws Exception {\n        return lookUp(table, id, null);\n    }\n\n    private <T> T lookUp(final MobileServiceTable<T> table, final Object id, final List<Pair<String, String>> parameters) throws Exception {\n\n        try {\n            T responseElement = table.lookUp(id, parameters).get();\n            return responseElement;\n        } catch (Exception exception) {\n            throw exception;\n        }\n    }\n\n    private <T> T insert(final MobileServiceTable<T> table, final T element) throws Exception {\n        return insert(table, element, null);\n    }\n\n    private <T> T insert(final MobileServiceTable<T> table, final T element, final List<Pair<String, String>> parameters) throws Exception {\n        try {\n            T responseElement = table.insert(element, parameters).get();\n            return responseElement;\n        } catch (Exception exception) {\n            throw exception;\n        }\n    }\n\n    private JsonObject insert(final MobileServiceJsonTable table, final JsonObject element) throws Exception {\n        return insert(table, element, null);\n    }\n\n    private JsonObject insert(final MobileServiceJsonTable table, final JsonObject element, final List<Pair<String, String>> parameters) throws Exception {\n\n        try {\n            JsonObject jsonObject = table.insert(element, parameters).get();\n            return jsonObject;\n        } catch (Exception exception) {\n            throw exception;\n        }\n    }\n\n    private <T> T update(final MobileServiceTable<T> table, final T element) throws Exception {\n        return update(table, element, null);\n    }\n\n    private <T> T update(final MobileServiceTable<T> table, final T element, final List<Pair<String, String>> parameters) throws Exception {\n\n        try {\n            T responseElement = table.update(element, parameters).get();\n            return responseElement;\n        } catch (Exception exception) {\n            throw exception;\n        }\n    }\n\n    private JsonObject update(final MobileServiceJsonTable table, final JsonObject element) throws Exception {\n        return update(table, element, null);\n    }\n\n    private JsonObject update(final MobileServiceJsonTable table, final JsonObject element, final List<Pair<String, String>> parameters) throws Exception {\n\n        try {\n            JsonObject responseElement = table.update(element, parameters).get();\n            return responseElement;\n        } catch (Exception exception) {\n            throw exception;\n        }\n\n    }\n\n    private <T> void delete(final MobileServiceTable<T> table, final T element) throws Exception {\n\n        try {\n            table.delete(element).get();\n            return;\n        } catch (Exception exception) {\n            throw exception;\n        }\n    }\n\n    @SuppressLint(\"NewApi\")\n    private void executeTask(AsyncTask<Void, Void, Void> task) {\n        // If it's running with Honeycomb or greater, it must execute each\n        // request in a different thread\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {\n            task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);\n        } else {\n            task.execute();\n        }\n    }\n\n    private void verifySystemProperties(String message, StringIdRoundTripTableElement element, boolean netBackend) throws Exception {\n        verifySystemProperties(message, true, true, true, true, element, netBackend);\n    }\n\n    /*private void verifySystemProperties(String message, StringIdRoundTripTableSoftDeleteElement element) throws Exception {\n        verifySystemProperties(message, true, true, true, true, element);\n    }*/\n\n    private void verifySystemProperties(String message, boolean shouldHaveCreatedAt, boolean shouldHaveUpdatedAt, boolean shouldHaveVersion, boolean shouldHaveDeleted,\n                                        StringIdRoundTripTableElement element, boolean netBackend) throws Exception {\n\n\n        if ((shouldHaveCreatedAt && element.CreatedAt == null) || (!shouldHaveCreatedAt && element.CreatedAt != null)\n                || (shouldHaveUpdatedAt && element.UpdatedAt == null) || (!shouldHaveUpdatedAt && element.UpdatedAt != null)\n                || (shouldHaveVersion && element.Version == null) || (!shouldHaveVersion && element.Version != null)) {\n            StringBuilder builder = new StringBuilder();\n            builder.append(message);\n            builder.append(\" - System Properties\");\n\n            if (shouldHaveCreatedAt && element.CreatedAt == null) {\n                builder.append(\" - CreatedAt is null\");\n            } else if (!shouldHaveCreatedAt && element.CreatedAt != null) {\n                builder.append(\" - CreatedAt is not null\");\n            }\n\n            if (shouldHaveUpdatedAt && element.UpdatedAt == null) {\n                builder.append(\" - UpdatedAt is null\");\n            } else if (!shouldHaveUpdatedAt && element.UpdatedAt != null) {\n                builder.append(\" - UpdatedAt is not null\");\n            }\n\n            if (shouldHaveVersion && element.Version == null) {\n                builder.append(\" - Version is null\");\n            } else if (!shouldHaveVersion && element.Version != null) {\n                builder.append(\" - Version is not null\");\n            }\n\n            throw new Exception(builder.toString());\n        }\n    }\n\n    /*private void verifySystemProperties(String message, boolean shouldHaveCreatedAt, boolean shouldHaveUpdatedAt, boolean shouldHaveVersion, boolean shouldHaveDeleted,\n                                        StringIdRoundTripTableSoftDeleteElement element) throws Exception {\n        if ((shouldHaveCreatedAt && element.CreatedAt == null) || (!shouldHaveCreatedAt && element.CreatedAt != null)\n                || (shouldHaveUpdatedAt && element.UpdatedAt == null) || (!shouldHaveUpdatedAt && element.UpdatedAt != null)\n                || (shouldHaveVersion && element.Version == null) || (!shouldHaveVersion && element.Version != null)\n                || (shouldHaveDeleted && element.Deleted == null) || (!shouldHaveDeleted && element.Deleted != null)) {\n            StringBuilder builder = new StringBuilder();\n            builder.append(message);\n            builder.append(\" - System Properties\");\n\n            if (shouldHaveCreatedAt && element.CreatedAt == null) {\n                builder.append(\" - CreatedAt is null\");\n            } else if (!shouldHaveCreatedAt && element.CreatedAt != null) {\n                builder.append(\" - CreatedAt is not null\");\n            }\n\n            if (shouldHaveUpdatedAt && element.UpdatedAt == null) {\n                builder.append(\" - UpdatedAt is null\");\n            } else if (!shouldHaveUpdatedAt && element.UpdatedAt != null) {\n                builder.append(\" - UpdatedAt is not null\");\n            }\n\n            if (shouldHaveVersion && element.Version == null) {\n                builder.append(\" - Version is null\");\n            } else if (!shouldHaveVersion && element.Version != null) {\n                builder.append(\" - Version is not null\");\n            }\n\n            throw new Exception(builder.toString());\n        }\n    }\n    */\n\n    class ResultsContainer<T> {\n        private Exception mException;\n        private T mItem;\n        private List<T> mItems;\n\n        public Exception getException() {\n            return mException;\n        }\n\n        public void setException(Exception exception) {\n            this.mException = exception;\n        }\n\n        public T getItem() {\n            return mItem;\n        }\n\n        public void setItem(T item) {\n            this.mItem = item;\n        }\n\n        public List<T> getItems() {\n            return mItems;\n        }\n\n        public void setItems(List<T> items) {\n            this.mItems = items;\n        }\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/UpdateDeleteTests.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests;\n\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceClient;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceException;\nimport com.microsoft.windowsazure.mobileservices.MobileServiceList;\nimport com.microsoft.windowsazure.mobileservices.http.ServiceFilterResponse;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable;\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceTable;\nimport com.microsoft.windowsazure.mobileservices.table.TableDeleteCallback;\nimport com.microsoft.windowsazure.mobileservices.table.TableJsonOperationCallback;\nimport com.microsoft.windowsazure.mobileservices.table.TableOperationCallback;\nimport com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery;\nimport com.microsoft.windowsazure.mobileservices.table.query.Query;\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOperations;\nimport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext;\nimport com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncTable;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.ColumnDataType;\nimport com.microsoft.windowsazure.mobileservices.table.sync.localstore.SQLiteLocalStore;\nimport com.microsoft.windowsazure.mobileservices.table.sync.synchandler.SimpleSyncHandler;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.ExpectedValueException;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestCase;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestExecutionCallback;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestGroup;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestResult;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.TestStatus;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.IntIdRoundTripTableElement;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types.StringIdRoundTripTableSoftDeleteElement;\n\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.Random;\nimport java.util.concurrent.ExecutionException;\n\npublic class UpdateDeleteTests extends TestGroup {\n\n    protected static final String ROUNDTRIP_TABLE_NAME = \"IntIdRoundTripTable\";\n    protected static final String STRING_ID_ROUNDTRIP_SOFT_DELETE_TABLE_NAME = \"StringIdRoundTripTableSoftDelete\";\n\n    public UpdateDeleteTests() {\n        super(\"Insert/Update/Delete Tests\");\n\n        Random rndGen = new Random();\n\n        // typed update\n\n        this.addTest(createTypedUpdateTest(\"Update typed item\", new IntIdRoundTripTableElement(rndGen), new IntIdRoundTripTableElement(rndGen), true, null));\n\n        this.addTest(createTypedUpdateTest(\"Update typed item, setting values to null\", new IntIdRoundTripTableElement(rndGen), new IntIdRoundTripTableElement(\n                false), true, null));\n\n        IntIdRoundTripTableElement elem1 = new IntIdRoundTripTableElement(rndGen);\n        IntIdRoundTripTableElement elem2 = new IntIdRoundTripTableElement(rndGen);\n        elem2.id = 1000000000L;\n\n        this.addTest(createTypedUpdateTest(\"(Neg) Update typed item, non-existing item id\", elem1, elem2, false, MobileServiceException.class));\n\n        elem1 = new IntIdRoundTripTableElement(rndGen);\n        elem2 = new IntIdRoundTripTableElement(rndGen);\n        elem2.id = 0L;\n\n        this.addTest(createTypedUpdateTest(\"(Neg) Update typed item, id = 0\", elem1, elem2, false, IllegalArgumentException.class));\n\n        // untyped update\n        JsonParser parser = new JsonParser();\n\n        String toInsertJsonString = \"{\" + \"\\\"name\\\":\\\"hello\\\",\" + \"\\\"bool\\\":true,\" + \"\\\"integer\\\":-1234,\" + \"\\\"number\\\":123.45,\"\n                + \"\\\"date1\\\":\\\"2012-12-13T09:23:12.000Z\\\"\" + \"}\";\n\n        String toUpdateJsonString = \"{\" + \"\\\"name\\\":\\\"world\\\",\" + \"\\\"bool\\\":false,\" + \"\\\"integer\\\":9999,\" + \"\\\"number\\\":888.88,\"\n                + \"\\\"date1\\\":\\\"1999-05-23T19:15:54.000Z\\\"\" + \"}\";\n\n        this.addTest(createUntypedUpdateTest(\"Update untyped item\", parser.parse(toInsertJsonString).getAsJsonObject(), parser.parse(toUpdateJsonString)\n                .getAsJsonObject(), true, null));\n\n        JsonObject toUpdate = parser.parse(toUpdateJsonString).getAsJsonObject();\n        toUpdate.add(\"name\", null);\n        toUpdate.add(\"bool\", null);\n        toUpdate.add(\"integer\", null);\n\n        this.addTest(createUntypedUpdateTest(\"Update untyped item, setting values to null\", parser.parse(toInsertJsonString).getAsJsonObject(),\n                cloneJson(toUpdate), true, null));\n\n        toUpdate.addProperty(\"id\", 1000000000);\n        this.addTest(createUntypedUpdateTest(\"(Neg) Update untyped item, non-existing item id\", parser.parse(toInsertJsonString).getAsJsonObject(),\n                cloneJson(toUpdate), false, MobileServiceException.class));\n\n        toUpdate.addProperty(\"id\", 0);\n        this.addTest(createUntypedUpdateTest(\"(Neg) Update untyped item, id = 0\", parser.parse(toInsertJsonString).getAsJsonObject(), cloneJson(toUpdate),\n                false, IllegalArgumentException.class));\n\n        // delete tests\n        this.addTest(createDeleteTest(\"Delete typed item\", true, false, true, null));\n        this.addTest(createDeleteTest(\"(Neg) Delete typed item with non-existing id\", true, true, true, MobileServiceException.class));\n        this.addTest(createDeleteTest(\"Delete untyped item\", false, false, true, null));\n        this.addTest(createDeleteTest(\"(Neg) Delete untyped item with non-existing id\", false, true, true, MobileServiceException.class));\n        this.addTest(createDeleteTest(\"(Neg) Delete untyped item without id field\", false, false, false, IllegalArgumentException.class));\n\n        // soft delete test\n        this.addTest(createSoftDeleteTest(\"Soft Delete typed item - Return on query\", true, false, true, true, null));\n        this.addTest(createSoftDeleteTest(\"Soft Delete typed item - No return on query\", true, false, true, false, null));\n        this.addTest(createSoftDeleteTest(\"(Neg)Soft Delete typed item with non-existing id\", true, true, true, false, MobileServiceException.class));\n        this.addTest(createSoftDeleteTest(\"Soft Delete untyped item - Return on query\", false, false, true, true, null));\n        this.addTest(createSoftDeleteTest(\"Soft Delete untyped item - No return on query\", false, false, true, false, null));\n        this.addTest(createSoftDeleteTest(\"(Neg)Soft Delete untyped item with non-existing id\", false, true, true, false, MobileServiceException.class));\n        this.addTest(createSoftDeleteTest(\"(Neg)Soft Delete untyped item without id field\", false, false, false, false, IllegalArgumentException.class));\n\n        this.addTest(createSoftDeleteUndeleteTest(\"Soft Delete - Undelete typed item\", true, null));\n        this.addTest(createSoftDeleteUndeleteTest(\"Soft Delete - Undelete untyped item\", false, null));\n\n        this.addTest(createSoftDeletePullTest(\"Soft Delete - Pull typed item\", true, null));\n        this.addTest(createSoftDeletePullTest(\"Soft Delete - Pull untyped item\", false, null));\n\n        // With Callbacks\n        this.addTest(createTypedUpdateWithCallbackTest(\"With Callback - Update typed item\", new IntIdRoundTripTableElement(rndGen),\n                new IntIdRoundTripTableElement(rndGen), true, null));\n        this.addTest(createUntypedUpdateWithCallbackTest(\"With Callback - Update untyped item, setting values to null\", parser.parse(toInsertJsonString)\n                .getAsJsonObject(), cloneJson(toUpdate), true, null));\n\n        this.addTest(createDeleteWithCallbackTest(\"With Callback - Delete typed item\", true, false, true, null));\n        this.addTest(createDeleteWithCallbackTest(\"With Callback - Delete untyped item\", false, false, true, null));\n\n    }\n\n    private JsonObject cloneJson(JsonObject json) {\n        return new JsonParser().parse(json.toString()).getAsJsonObject();\n    }\n\n    private TestCase createTypedUpdateTest(String name, final IntIdRoundTripTableElement itemToInsert, final IntIdRoundTripTableElement itemToUpdate,\n                                           final boolean setUpdatedId, final Class<?> expectedExceptionClass) {\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                final MobileServiceTable<IntIdRoundTripTableElement> table = client.getTable(ROUNDTRIP_TABLE_NAME, IntIdRoundTripTableElement.class);\n                final TestCase testCase = this;\n\n                log(\"insert item\");\n                itemToInsert.id = null;\n\n                final TestResult result = new TestResult();\n                result.setTestCase(testCase);\n                result.setStatus(TestStatus.Passed);\n\n                try {\n\n                    IntIdRoundTripTableElement insertedItem = table.insert(itemToInsert).get();\n\n                    if (setUpdatedId) {\n                        log(\"update item id \" + insertedItem.id);\n                        itemToUpdate.id = insertedItem.id;\n                    }\n\n                    log(\"update the item\");\n\n                    IntIdRoundTripTableElement updatedItem = table.update(itemToUpdate).get();\n\n                    log(\"lookup item\");\n\n                    IntIdRoundTripTableElement lookedUpItem = table.lookUp(updatedItem.id).get();\n\n                    log(\"verify items are equal\");\n                    if (Util.compare(updatedItem, lookedUpItem)) { // check\n                        // the\n                        // items\n                        // are\n                        // equal\n                        log(\"cleanup\");\n\n                        table.delete(lookedUpItem.id).get();// clean\n                        // up\n\n                        if (callback != null)\n                            callback.onTestComplete(testCase, result);\n\n                    } else {\n                        createResultFromException(result, new ExpectedValueException(updatedItem, lookedUpItem));\n                        if (callback != null)\n                            callback.onTestComplete(testCase, result);\n                    }\n                } catch (Exception exception) {\n                    createResultFromException(result, exception);\n                    if (callback != null)\n                        callback.onTestComplete(testCase, result);\n                }\n            }\n        };\n\n        test.setExpectedExceptionClass(expectedExceptionClass);\n        test.setName(name);\n\n        return test;\n    }\n\n    private TestCase createUntypedUpdateTest(String name, final JsonObject itemToInsert, final JsonObject itemToUpdate, final boolean setUpdatedId,\n                                             final Class<?> expectedExceptionClass) {\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                final MobileServiceJsonTable table = client.getTable(ROUNDTRIP_TABLE_NAME);\n                final TestCase testCase = this;\n\n                final TestResult result = new TestResult();\n                result.setTestCase(testCase);\n                result.setStatus(TestStatus.Passed);\n\n                log(\"insert item\");\n\n                try {\n\n                    JsonObject insertedItem = table.insert(itemToInsert).get();\n\n                    if (setUpdatedId) {\n                        int id = insertedItem.get(\"id\").getAsInt();\n                        log(\"update item id \" + id);\n                        itemToUpdate.addProperty(\"id\", id);\n                    }\n\n                    log(\"update the item\");\n                    JsonObject updatedItem = table.update(itemToUpdate).get();\n\n                    log(\"lookup the item\");\n                    JsonObject lookedUpItem = (JsonObject) table.lookUp(updatedItem.get(\"id\").getAsInt()).get();\n\n                    log(\"verify items are equal\");\n                    if (Util.compareJson(updatedItem, lookedUpItem)) { // check\n                        // the\n                        // items\n                        // are\n                        // equal\n                        log(\"cleanup\");\n                        table.delete(lookedUpItem.get(\"id\").getAsInt()).get(); // clean\n\n                        if (callback != null)\n                            callback.onTestComplete(testCase, result);\n                    } else {\n                        createResultFromException(result, new ExpectedValueException(updatedItem, lookedUpItem));\n                        if (callback != null)\n                            callback.onTestComplete(testCase, result);\n                    }\n                } catch (Exception exception) {\n                    createResultFromException(result, exception);\n                    if (callback != null)\n                        callback.onTestComplete(testCase, result);\n                }\n            }\n        };\n\n        test.setExpectedExceptionClass(expectedExceptionClass);\n        test.setName(name);\n\n        return test;\n    }\n\n    private TestCase createSoftDeleteTest(String name, final boolean typed, final boolean useFakeId, final boolean includeId, final boolean includeSoftDeleteInQueries, Class<?> expectedExceptionClass) {\n        TestCase testCase = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n\n                StringIdRoundTripTableSoftDeleteElement element = new StringIdRoundTripTableSoftDeleteElement(new Random());\n\n                final MobileServiceTable<StringIdRoundTripTableSoftDeleteElement> typedTable =\n                        client.getTable(STRING_ID_ROUNDTRIP_SOFT_DELETE_TABLE_NAME, StringIdRoundTripTableSoftDeleteElement.class);\n\n                final MobileServiceJsonTable jsonTable = client.getTable(STRING_ID_ROUNDTRIP_SOFT_DELETE_TABLE_NAME);\n\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n\n                final TestCase testCase = this;\n                result.setTestCase(testCase);\n\n                log(\"insert item\");\n\n                try {\n\n                    StringIdRoundTripTableSoftDeleteElement entity = typedTable.insert(element).get();\n\n                    if (useFakeId) {\n                        log(\"use fake id\");\n                        entity.id = \"1000000000\";\n                    }\n\n                    if (!includeId) {\n                        log(\"include id\");\n                        entity.id = null;\n                    }\n\n                    log(\"soft delete\");\n\n                    if (typed) {\n                        typedTable.delete(entity).get();\n                    } else {\n                        jsonTable.delete(client.getGsonBuilder().create().toJsonTree(entity).getAsJsonObject()).get();\n                    }\n\n                    log(\"verifiying if was soft deleted\");\n\n                    if (includeSoftDeleteInQueries) {\n\n                        ExecutableQuery<StringIdRoundTripTableSoftDeleteElement> query =\n                                typedTable.includeDeleted().field(\"id\").eq(entity.id);\n\n                        MobileServiceList<StringIdRoundTripTableSoftDeleteElement> results = typedTable.execute(query).get();\n\n                        if (results.size() != 1) {\n                            createResultFromException(result, new ExpectedValueException(1, 0));\n                        }\n\n                        StringIdRoundTripTableSoftDeleteElement deletedElement = results.get(0);\n\n                        if (!deletedElement.Deleted) {\n                            createResultFromException(result, new ExpectedValueException(true, false));\n                        }\n                    } else {\n\n                        try {\n                            StringIdRoundTripTableSoftDeleteElement resultElement = typedTable.lookUp(entity.id).get();\n                        } catch (Exception exception) {\n\n                            MobileServiceException ex = (MobileServiceException) exception.getCause();\n\n                            String message = \"An item with id '\" + entity.id + \"' does not exist.\";\n\n                            if (!ex.getMessage().contains(message) && !ex.getMessage().contains(\"404\")) {\n                                createResultFromException(result, new ExpectedValueException(message, ex.getMessage()));\n                            }\n                        }\n                    }\n                } catch (Exception exception) {\n                    if (exception != null) {\n                        createResultFromException(result, exception);\n                    }\n                } finally {\n                    if (callback != null)\n                        callback.onTestComplete(testCase, result);\n                }\n            }\n        };\n\n        testCase.setName(name);\n        testCase.setExpectedExceptionClass(expectedExceptionClass);\n\n        return testCase;\n    }\n\n    private TestCase createSoftDeleteUndeleteTest(String name, final boolean typed, Class<?> expectedExceptionClass) {\n        TestCase testCase = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n\n                StringIdRoundTripTableSoftDeleteElement element = new StringIdRoundTripTableSoftDeleteElement(new Random());\n\n                final MobileServiceTable<StringIdRoundTripTableSoftDeleteElement> typedTable = client.getTable(STRING_ID_ROUNDTRIP_SOFT_DELETE_TABLE_NAME, StringIdRoundTripTableSoftDeleteElement.class);\n\n                final MobileServiceJsonTable jsonTable = client.getTable(STRING_ID_ROUNDTRIP_SOFT_DELETE_TABLE_NAME);\n\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n\n                final TestCase testCase = this;\n                result.setTestCase(testCase);\n\n                log(\"insert item\");\n\n                try {\n\n                    StringIdRoundTripTableSoftDeleteElement entity = typedTable.insert(element).get();\n\n                    if (typed) {\n                        typedTable.delete(entity).get();\n                    } else {\n                        jsonTable.delete(client.getGsonBuilder().create().toJsonTree(entity).getAsJsonObject()).get();\n                    }\n\n                    log(\"soft delete\");\n\n\n                    log(\"verifiying if was soft deleted\");\n\n                    try {\n                        typedTable.lookUp(entity.id).get();\n                    } catch (Exception exception) {\n\n                        MobileServiceException ex = (MobileServiceException) exception.getCause();\n\n                        String message = \"An item with id '\" + entity.id + \"' does not exist.\";\n\n                        if (!ex.getMessage().contains(message) && !ex.getMessage().contains(\"404\")) {\n                            createResultFromException(result, new ExpectedValueException(message, ex.getMessage()));\n                        }\n                    }\n\n                    log(\"undelete element\");\n\n                    ExecutableQuery<StringIdRoundTripTableSoftDeleteElement> deletedQuery = typedTable.includeDeleted().field(\"id\").eq(entity.id);\n\n                    StringIdRoundTripTableSoftDeleteElement deletedElement = typedTable.execute(deletedQuery).get().get(0);\n\n                    if (typed) {\n                        typedTable.undelete(deletedElement).get();\n                    } else {\n\n                        JsonObject deletedJsonObject = client.getGsonBuilder().create().toJsonTree(deletedElement).getAsJsonObject();\n                        jsonTable.undelete(deletedJsonObject).get();\n                    }\n\n                    log(\"read undeleted element\");\n                    StringIdRoundTripTableSoftDeleteElement resultElement = typedTable.lookUp(entity.id).get();\n\n\n                } catch (Exception exception) {\n\n                    if (exception != null) {\n                        createResultFromException(result, exception);\n                    }\n                } finally {\n                    if (callback != null)\n                        callback.onTestComplete(testCase, result);\n                }\n            }\n        };\n\n        testCase.setName(name);\n        testCase.setExpectedExceptionClass(expectedExceptionClass);\n\n        return testCase;\n    }\n\n    private TestCase createSoftDeletePullTest(String name, final boolean typed, Class<?> expectedExceptionClass) {\n        TestCase testCase = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n\n                final TestCase testCase = this;\n                result.setTestCase(testCase);\n\n                try {\n\n                    SQLiteLocalStore localStore = new SQLiteLocalStore(client.getContext(), STRING_ID_ROUNDTRIP_SOFT_DELETE_TABLE_NAME, null, 1);\n\n                    SimpleSyncHandler handler = new SimpleSyncHandler();\n                    MobileServiceSyncContext syncContext = client.getSyncContext();\n\n                    syncContext.initialize(localStore, handler).get();\n\n                    log(\"Defined the table on the local store\");\n\n                    Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>();\n                    tableDefinition.put(\"id\", ColumnDataType.String);\n                    tableDefinition.put(\"name\", ColumnDataType.String);\n                    tableDefinition.put(\"number\", ColumnDataType.Real);\n                    tableDefinition.put(\"bool\", ColumnDataType.Boolean);\n                    tableDefinition.put(\"date1\", ColumnDataType.Date);\n                    tableDefinition.put(\"__createdAt\", ColumnDataType.DateTimeOffset);\n                    tableDefinition.put(\"__updatedAt\", ColumnDataType.DateTimeOffset);\n                    tableDefinition.put(\"__version\", ColumnDataType.String);\n                    tableDefinition.put(\"__deleted\", ColumnDataType.Boolean);\n\n                    log(\"Initialized the store and sync context\");\n\n                    localStore.defineTable(STRING_ID_ROUNDTRIP_SOFT_DELETE_TABLE_NAME, tableDefinition);\n\n                    client.getSyncContext().initialize(localStore, new SimpleSyncHandler()).get();\n\n                    MobileServiceSyncTable<StringIdRoundTripTableSoftDeleteElement> localTable = client.getSyncTable(STRING_ID_ROUNDTRIP_SOFT_DELETE_TABLE_NAME, StringIdRoundTripTableSoftDeleteElement.class);\n\n                    MobileServiceTable<StringIdRoundTripTableSoftDeleteElement> remoteTable = client.getTable(STRING_ID_ROUNDTRIP_SOFT_DELETE_TABLE_NAME, StringIdRoundTripTableSoftDeleteElement.class);\n\n                    MobileServiceJsonTable jsonTable = client.getTable(STRING_ID_ROUNDTRIP_SOFT_DELETE_TABLE_NAME);\n\n                    StringIdRoundTripTableSoftDeleteElement element = new StringIdRoundTripTableSoftDeleteElement(new Random());\n\n                    log(\"Inserted the item to the local store:\" + element);\n\n                    element = localTable.insert(element).get();\n\n                    log(\"Validating that the item is not in the server table\");\n\n                    try {\n                        remoteTable.lookUp(element.id).get();\n                        log(\"Error, item is present in the server\");\n                        // return false;\n                    } catch (ExecutionException ex) {\n                        log(\"Ok, item is not in the server:\" + ex.getMessage());\n                    }\n\n                    log(\"Pushing changes to the server\");\n                    client.getSyncContext().push().get();\n\n                    log(\"Push done; now verifying that item is in the server\");\n\n                    StringIdRoundTripTableSoftDeleteElement serverElement = remoteTable.lookUp(element.id).get();\n\n                    log(\"Retrieved item from server:\" + serverElement);\n\n                    if (serverElement.equals(serverElement)) {\n                        log(\"Items are the same\");\n                    } else {\n                        log(\"Items are different. Local: \" + element + \"; remote: \" + serverElement);\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n\n                    Object deleteObject;\n\n                    if (typed) {\n                        remoteTable.delete(element).get();\n                    } else {\n                        jsonTable.delete(client.getGsonBuilder().create().toJsonTree(element).getAsJsonObject()).get();\n                    }\n\n                    log(\"Soft delete element on server\");\n\n\n                    log(\"Verifiying remote item was soft deleted\");\n\n                    try {\n                        remoteTable.lookUp(element.id).get();\n                    } catch (Exception exception) {\n\n                        MobileServiceException ex = (MobileServiceException) exception.getCause();\n\n                        String message = \"An item with id '\" + element.id + \"' does not exist.\";\n\n                        if (!ex.getMessage().contains(message) && !ex.getMessage().contains(\"404\")) {\n                            createResultFromException(result, new ExpectedValueException(message, ex.getMessage()));\n                        }\n                    }\n\n                    log(\"Verifying item is in local storage\");\n\n                    StringIdRoundTripTableSoftDeleteElement localElement = localTable.lookUp(element.id).get();\n\n                    log(\"Pull local table form server\");\n                    Query pullQuery = QueryOperations.tableName(STRING_ID_ROUNDTRIP_SOFT_DELETE_TABLE_NAME)\n                            .field(\"id\").eq(element.id);// \"$filter=id eq '\"\n\n                    localTable.pull(pullQuery).get();\n\n                    log(\"Verifying local item was deleted\");\n\n                    StringIdRoundTripTableSoftDeleteElement localDeletedElement = localTable.lookUp(element.id).get();\n\n                    if (localDeletedElement == null) {\n                        log(\"Item was deleted from local storage\");\n                    } else {\n                        log(\"Item exist on local storage:\" + element);\n                        result.setStatus(TestStatus.Failed);\n                        callback.onTestComplete(this, result);\n                        return;\n                    }\n                } catch (Exception exception) {\n\n                    if (exception != null) {\n                        createResultFromException(result, exception);\n                    }\n                } finally {\n                    if (callback != null)\n                        callback.onTestComplete(testCase, result);\n                }\n            }\n        };\n\n        testCase.setName(name);\n        testCase.setExpectedExceptionClass(expectedExceptionClass);\n\n        return testCase;\n    }\n\n    private TestCase createDeleteTest(String name, final boolean typed, final boolean useFakeId, final boolean includeId, Class<?> expectedExceptionClass) {\n        TestCase testCase = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                IntIdRoundTripTableElement element = new IntIdRoundTripTableElement(new Random());\n                final MobileServiceTable<IntIdRoundTripTableElement> typedTable = client.getTable(ROUNDTRIP_TABLE_NAME, IntIdRoundTripTableElement.class);\n                final MobileServiceJsonTable jsonTable = client.getTable(ROUNDTRIP_TABLE_NAME);\n\n                final TestResult result = new TestResult();\n                result.setStatus(TestStatus.Passed);\n\n                final TestCase testCase = this;\n                result.setTestCase(testCase);\n\n                log(\"insert item\");\n\n                try {\n\n                    IntIdRoundTripTableElement entity = typedTable.insert(element).get();\n\n                    if (useFakeId) {\n                        log(\"use fake id\");\n                        entity.id = 1000000000L;\n                    }\n\n                    if (!includeId) {\n                        log(\"include id\");\n                        entity.id = null;\n                    }\n\n                    log(\"delete\");\n\n                    if (typed) {\n                        typedTable.delete(element).get();\n                    } else {\n                        jsonTable.delete(client.getGsonBuilder().create().toJsonTree(element).getAsJsonObject()).get();\n                    }\n\n\n                } catch (Exception exception) {\n                    if (exception != null) {\n                        createResultFromException(result, exception);\n                    }\n                } finally {\n                    if (callback != null)\n                        callback.onTestComplete(testCase, result);\n                }\n            }\n        };\n\n        testCase.setName(name);\n        testCase.setExpectedExceptionClass(expectedExceptionClass);\n\n        return testCase;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase createTypedUpdateWithCallbackTest(String name, final IntIdRoundTripTableElement itemToInsert,\n                                                       final IntIdRoundTripTableElement itemToUpdate, final boolean setUpdatedId, final Class<?> expectedExceptionClass) {\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                final MobileServiceTable<IntIdRoundTripTableElement> table = client.getTable(ROUNDTRIP_TABLE_NAME, IntIdRoundTripTableElement.class);\n                final TestCase testCase = this;\n\n                log(\"insert item\");\n                itemToInsert.id = null;\n\n                table.insert(itemToInsert, new TableOperationCallback<IntIdRoundTripTableElement>() {\n\n                    @Override\n                    public void onCompleted(final IntIdRoundTripTableElement insertedItem, Exception exception, ServiceFilterResponse response) {\n                        final TestResult result = new TestResult();\n                        result.setTestCase(testCase);\n                        result.setStatus(TestStatus.Passed);\n\n                        if (exception == null) { // if it was ok\n\n                            if (setUpdatedId) {\n                                log(\"update item id \" + insertedItem.id);\n                                itemToUpdate.id = insertedItem.id;\n                            }\n\n                            log(\"update the item\");\n                            table.update(itemToUpdate, new TableOperationCallback<IntIdRoundTripTableElement>() {\n\n                                @Override\n                                public void onCompleted(final IntIdRoundTripTableElement updatedItem, Exception exception, ServiceFilterResponse response) {\n\n                                    if (exception == null) { // if it was ok\n\n                                        log(\"lookup item\");\n                                        table.lookUp(updatedItem.id, new TableOperationCallback<IntIdRoundTripTableElement>() {\n\n                                            @Override\n                                            public void onCompleted(IntIdRoundTripTableElement lookedUpItem, Exception exception, ServiceFilterResponse response) {\n                                                if (exception == null) { // if\n                                                    // it\n                                                    // was\n                                                    // ok\n\n                                                    log(\"verify items are equal\");\n                                                    if (Util.compare(updatedItem, lookedUpItem)) { // check\n                                                        // the\n                                                        // items\n                                                        // are\n                                                        // equal\n                                                        log(\"cleanup\");\n                                                        table.delete(lookedUpItem.id, new TableDeleteCallback() { // clean\n                                                            // up\n\n                                                            @Override\n                                                            public void onCompleted(Exception exception, ServiceFilterResponse response) {\n                                                                if (exception != null) {\n                                                                    createResultFromException(result, exception);\n                                                                }\n\n                                                                // callback\n                                                                // with\n                                                                // success\n                                                                // or\n                                                                // error\n                                                                // on\n                                                                // cleanup\n                                                                if (callback != null)\n                                                                    callback.onTestComplete(testCase, result);\n                                                            }\n                                                        });\n                                                    } else {\n                                                        createResultFromException(result, new ExpectedValueException(insertedItem, lookedUpItem));\n                                                        if (callback != null)\n                                                            callback.onTestComplete(testCase, result);\n                                                    }\n                                                } else {\n                                                    createResultFromException(result, exception);\n                                                    if (callback != null)\n                                                        callback.onTestComplete(testCase, result);\n                                                }\n                                            }\n\n                                        });\n                                    } else {\n                                        createResultFromException(result, exception);\n                                        if (callback != null)\n                                            callback.onTestComplete(testCase, result);\n                                    }\n                                }\n\n                            });\n                        } else {\n                            createResultFromException(result, exception);\n                            if (callback != null)\n                                callback.onTestComplete(testCase, result);\n                        }\n                    }\n\n                });\n\n            }\n        };\n\n        test.setExpectedExceptionClass(expectedExceptionClass);\n        test.setName(name);\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase createUntypedUpdateWithCallbackTest(String name, final JsonObject itemToInsert, final JsonObject itemToUpdate, final boolean setUpdatedId,\n                                                         final Class<?> expectedExceptionClass) {\n\n        final TestCase test = new TestCase() {\n\n            @Override\n            protected void executeTest(MobileServiceClient client, final TestExecutionCallback callback) {\n\n                final MobileServiceJsonTable table = client.getTable(ROUNDTRIP_TABLE_NAME);\n                final TestCase testCase = this;\n\n                log(\"insert item\");\n                table.insert(itemToInsert, new TableJsonOperationCallback() {\n\n                    @Override\n                    public void onCompleted(final JsonObject insertedItem, Exception exception, ServiceFilterResponse response) {\n                        final TestResult result = new TestResult();\n                        result.setTestCase(testCase);\n                        result.setStatus(TestStatus.Passed);\n\n                        if (exception == null) { // if it was ok\n\n                            if (setUpdatedId) {\n                                int id = insertedItem.get(\"id\").getAsInt();\n                                log(\"update item id \" + id);\n                                itemToUpdate.addProperty(\"id\", id);\n                            }\n\n                            log(\"update the item\");\n                            table.update(itemToUpdate, new TableJsonOperationCallback() {\n\n                                @Override\n                                public void onCompleted(final JsonObject updatedItem, Exception exception, ServiceFilterResponse response) {\n\n                                    if (exception == null) { // if it was ok\n\n                                        log(\"lookup the item\");\n                                        table.lookUp(updatedItem.get(\"id\").getAsInt(), new TableJsonOperationCallback() {\n\n                                            @Override\n                                            public void onCompleted(JsonObject lookedUpItem, Exception exception, ServiceFilterResponse response) {\n                                                if (exception == null) { // if\n                                                    // it\n                                                    // was\n                                                    // ok\n                                                    log(\"verify items are equal\");\n                                                    if (Util.compareJson(updatedItem, lookedUpItem)) { // check\n                                                        // the\n                                                        // items\n                                                        // are\n                                                        // equal\n                                                        log(\"cleanup\");\n                                                        table.delete(lookedUpItem.get(\"id\").getAsInt(), new TableDeleteCallback() { // clean\n                                                            // up\n\n                                                            @Override\n                                                            public void onCompleted(Exception exception, ServiceFilterResponse response) {\n                                                                if (exception != null) {\n                                                                    createResultFromException(result, exception);\n                                                                }\n\n                                                                // callback\n                                                                // with\n                                                                // success\n                                                                // or\n                                                                // error\n                                                                // on\n                                                                // cleanup\n                                                                if (callback != null)\n                                                                    callback.onTestComplete(testCase, result);\n                                                            }\n                                                        });\n                                                    } else {\n                                                        createResultFromException(result, new ExpectedValueException(insertedItem, lookedUpItem));\n                                                        if (callback != null)\n                                                            callback.onTestComplete(testCase, result);\n                                                    }\n                                                } else {\n                                                    createResultFromException(result, exception);\n                                                    if (callback != null)\n                                                        callback.onTestComplete(testCase, result);\n                                                }\n                                            }\n\n                                        });\n                                    } else {\n                                        createResultFromException(result, exception);\n                                        if (callback != null)\n                                            callback.onTestComplete(testCase, result);\n                                    }\n                                }\n\n                            });\n                        } else {\n                            createResultFromException(result, exception);\n                            if (callback != null)\n                                callback.onTestComplete(testCase, result);\n                        }\n                    }\n\n                });\n\n            }\n        };\n\n        test.setExpectedExceptionClass(expectedExceptionClass);\n        test.setName(name);\n\n        return test;\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private TestCase createDeleteWithCallbackTest(String name, final boolean typed, final boolean useFakeId, final boolean includeId,\n                                                  Class<?> expectedExceptionClass) {\n        TestCase testCase = new TestCase() {\n\n            @Override\n            protected void executeTest(final MobileServiceClient client, final TestExecutionCallback callback) {\n                IntIdRoundTripTableElement element = new IntIdRoundTripTableElement(new Random());\n                final MobileServiceTable<IntIdRoundTripTableElement> typedTable = client.getTable(ROUNDTRIP_TABLE_NAME, IntIdRoundTripTableElement.class);\n                final MobileServiceJsonTable jsonTable = client.getTable(ROUNDTRIP_TABLE_NAME);\n\n                final TestCase testCase = this;\n                log(\"insert item\");\n                typedTable.insert(element, new TableOperationCallback<IntIdRoundTripTableElement>() {\n\n                    @Override\n                    public void onCompleted(IntIdRoundTripTableElement entity, Exception exception, ServiceFilterResponse response) {\n                        final TestResult result = new TestResult();\n                        result.setStatus(TestStatus.Passed);\n                        result.setTestCase(testCase);\n\n                        if (exception == null) {\n                            Object deleteObject;\n\n                            if (useFakeId) {\n                                log(\"use fake id\");\n                                entity.id = 1000000000L;\n                            }\n\n                            if (!includeId) {\n                                log(\"include id\");\n                                entity.id = null;\n                            }\n\n                            if (typed) {\n                                log(\"delete\");\n                                typedTable.delete(entity, new TableDeleteCallback() {\n\n                                    @Override\n                                    public void onCompleted(Exception exception, ServiceFilterResponse response) {\n                                        if (exception != null) {\n                                            createResultFromException(result, exception);\n                                        }\n\n                                        if (callback != null)\n                                            callback.onTestComplete(testCase, result);\n                                    }\n                                });\n                            } else {\n                                log(\"delete\");\n                                jsonTable.delete(client.getGsonBuilder().create().toJsonTree(entity).getAsJsonObject(),\n                                        new TableDeleteCallback() {\n\n                                            @Override\n                                            public void onCompleted(Exception exception, ServiceFilterResponse response) {\n                                                if (exception != null) {\n                                                    createResultFromException(result, exception);\n                                                }\n\n                                                if (callback != null)\n                                                    callback.onTestComplete(testCase, result);\n                                            }\n                                        });\n                            }\n\n\n                        } else {\n                            createResultFromException(result, exception);\n                            if (callback != null)\n                                callback.onTestComplete(testCase, result);\n                        }\n                    }\n\n                });\n            }\n        };\n\n        testCase.setName(name);\n        testCase.setExpectedExceptionClass(expectedExceptionClass);\n\n        return testCase;\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/AggregateException.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class AggregateException extends Exception {\n    /**\n     *\n     */\n    private static final long serialVersionUID = -3507943118377161658L;\n\n    private List<Exception> mAggregatedExceptions = Collections.synchronizedList(new ArrayList<Exception>());\n\n    public AggregateException() {\n        super();\n    }\n\n    public AggregateException(String detailMessage) {\n        super(detailMessage);\n    }\n\n    public AggregateException(Throwable throwable) {\n        super(throwable);\n    }\n\n    public AggregateException(String detailMessage, Throwable throwable) {\n        super(detailMessage, throwable);\n    }\n\n    public void addException(Exception exception) {\n        mAggregatedExceptions.add(exception);\n    }\n\n    public List<Exception> getAggregatedExceptions() {\n        return mAggregatedExceptions;\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/AllIntIdMovies.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport com.google.gson.annotations.SerializedName;\n\nimport java.util.List;\n\npublic class AllIntIdMovies {\n    private int id;\n\n    @SerializedName(\"status\")\n    private String mStatus;\n\n    @SerializedName(\"movies\")\n    private IntIdMovie[] mMovies;\n\n    public AllIntIdMovies() {\n        mMovies = new IntIdMovie[0];\n    }\n\n    public int getId() {\n        return id;\n    }\n\n    public void setId(int id) {\n        this.id = id;\n    }\n\n    public String getStatus() {\n        return mStatus;\n    }\n\n    public void setStatus(String status) {\n        mStatus = status;\n    }\n\n    public IntIdMovie[] getMovies() {\n        return mMovies;\n    }\n\n    public void setMovies(IntIdMovie[] movies) {\n        mMovies = movies;\n    }\n\n    public void setMovies(List<IntIdMovie> movies) {\n        mMovies = movies.toArray(mMovies);\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/AllStringIdMovies.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport com.google.gson.annotations.SerializedName;\n\nimport java.util.List;\n\npublic class AllStringIdMovies {\n    @SerializedName(\"id\")\n    private String mId;\n\n    @SerializedName(\"status\")\n    private String mStatus;\n\n    @SerializedName(\"movies\")\n    private StringIdMovie[] mMovies;\n\n    public AllStringIdMovies() {\n        mMovies = new StringIdMovie[0];\n    }\n\n    public String getId() {\n        return mId;\n    }\n\n    public void setId(String id) {\n        mId = id;\n    }\n\n    public String getStatus() {\n        return mStatus;\n    }\n\n    public void setStatus(String status) {\n        mStatus = status;\n    }\n\n    public StringIdMovie[] getMovies() {\n        return mMovies;\n    }\n\n    public void setMovies(List<StringIdMovie> movies) {\n        mMovies = movies.toArray(mMovies);\n    }\n\n    public void setMovies(StringIdMovie[] movies) {\n        mMovies = movies;\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/ComplexType.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\n\nimport java.util.Random;\n\npublic class ComplexType {\n\n    public String name;\n\n    public Integer age;\n\n    public ComplexType() {\n\n    }\n\n    public ComplexType(Random r) {\n        name = Util.createSimpleRandomString(r, 10);\n        age = r.nextInt(80);\n    }\n\n    public ComplexType(ComplexType other) {\n        name = String.valueOf(other.name);\n        age = Integer.valueOf(other.age);\n    }\n\n    @Override\n    public String toString() {\n        return String.format(\"ComplexType[Name=%s},Age=%s]\", name, age);\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (o == null)\n            return false;\n\n        if (!(o instanceof ComplexType))\n            return false;\n\n        ComplexType element = (ComplexType) o;\n\n        if (!Util.compare(element.name, name))\n            return false;\n        if (!Util.compare(element.age, age))\n            return false;\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/ComplexType2.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\n\nimport java.util.Random;\n\npublic class ComplexType2 {\n\n    public String name;\n    public Integer age;\n    public String[] friends;\n\n    public ComplexType2() {\n    }\n\n    public ComplexType2(Random rndGen) {\n        this.name = Util.createSimpleRandomString(rndGen, 10);\n        this.age = rndGen.nextInt(80);\n        this.friends = new String[5];\n\n        for (int i = 0; i < 5; i++) {\n            this.friends[i] = Util.createSimpleRandomString(rndGen, 5);\n        }\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (o == null)\n            return false;\n        if (!(o instanceof ComplexType2))\n            return false;\n\n        ComplexType2 element = (ComplexType2) o;\n\n        if (!Util.compare(element.name, name))\n            return false;\n        if (!Util.compare(element.age, age))\n            return false;\n        if (!Util.compareArrays(element.friends, friends))\n            return false;\n\n        return true;\n    }\n\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/EnumType.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\npublic enum EnumType {\n    Empty, First, Second, Third\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/FilterResult.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport java.util.List;\n\npublic class FilterResult<E> {\n    public List<E> elements;\n    public int totalCount;\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/IntIdMovie.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport com.google.gson.annotations.SerializedName;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\n\nimport java.util.Date;\nimport java.util.Locale;\n\npublic class IntIdMovie implements Movie {\n\n    @SerializedName(\"id\")\n    private int id;\n\n    @SerializedName(\"title\")\n    private String mTitle;\n\n    @SerializedName(\"duration\")\n    private int mDuration;\n\n    @SerializedName(\"mpaaRating\")\n    private String mMPAARating;\n\n    @SerializedName(\"releaseDate\")\n    private Date mReleaseDate;\n\n    @SerializedName(\"bestPictureWinner\")\n    private boolean mBestPictureWinner;\n\n    @SerializedName(\"year\")\n    private int mYear;\n\n    public IntIdMovie() {\n        id = 0;\n    }\n\n    public IntIdMovie(boolean bestPictureWinner, int duration, String mpaaRating, Date releaseDate, String title, int year) {\n\n        id = 0;\n\n        mBestPictureWinner = bestPictureWinner;\n        mDuration = duration;\n        mMPAARating = mpaaRating;\n        mReleaseDate = releaseDate;\n        mTitle = title;\n        mYear = year;\n    }\n\n    public int getId() {\n        return id;\n    }\n\n    public void setId(int id) {\n        this.id = id;\n    }\n\n    @Override\n    public String getTitle() {\n        return mTitle;\n    }\n\n    @Override\n    public void setTitle(String title) {\n        mTitle = title;\n    }\n\n    @Override\n    public int getDuration() {\n        return mDuration;\n    }\n\n    @Override\n    public void setDuration(int duration) {\n        mDuration = duration;\n    }\n\n    @Override\n    public String getMPAARating() {\n        return mMPAARating;\n    }\n\n    @Override\n    public void setMPAARating(String mPAARating) {\n        mMPAARating = mPAARating;\n    }\n\n    @Override\n    public Date getReleaseDate() {\n        return mReleaseDate;\n    }\n\n    @Override\n    public void setReleaseDate(Date releaseDate) {\n        mReleaseDate = releaseDate;\n    }\n\n    @Override\n    public boolean isBestPictureWinner() {\n        return mBestPictureWinner;\n    }\n\n    @Override\n    public void setBestPictureWinner(boolean bestPictureWinner) {\n        mBestPictureWinner = bestPictureWinner;\n    }\n\n    @Override\n    public int getYear() {\n        return mYear;\n    }\n\n    @Override\n    public void setYear(int year) {\n        mYear = year;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (o == null)\n            return false;\n\n        if (!(o instanceof IntIdMovie))\n            return false;\n        IntIdMovie m = (IntIdMovie) o;\n\n        if (!Util.compare(mTitle, m.mTitle))\n            return false;\n        if (!Util.compare(mDuration, m.mDuration))\n            return false;\n        if (!Util.compare(mMPAARating, m.mMPAARating))\n            return false;\n        if (mReleaseDate != null) {\n            if (m.mReleaseDate == null)\n                return false;\n            if (!Util.compare(mReleaseDate, m.mReleaseDate))\n                return false;\n        }\n        if (!Util.compare(mBestPictureWinner, m.mBestPictureWinner))\n            return false;\n        if (!Util.compare(mYear, m.mYear))\n            return false;\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(Locale.getDefault(), \"Movie[Title=%s,Duration=%d,Rating=%s,ReleaseDate=%s,BestPictureWinner=%B,Year=%d]\", mTitle, mDuration,\n                mMPAARating, Util.dateToString(mReleaseDate), mBestPictureWinner, mYear);\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/IntIdRoundTripTableElement.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport android.annotation.SuppressLint;\n\nimport com.google.gson.annotations.SerializedName;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\n\nimport java.util.Date;\nimport java.util.GregorianCalendar;\nimport java.util.Random;\n\n@SuppressLint(\"DefaultLocale\")\npublic class IntIdRoundTripTableElement {\n    public Long id;\n\n    public String name;\n\n    public Double number;\n\n    public Boolean bool;\n\n    public Date date1;\n\n    public Integer integer;\n\n    public IntIdRoundTripTableElement() {\n        this(false);\n    }\n\n    public IntIdRoundTripTableElement(boolean initialized) {\n        if (initialized) {\n            name = \"Sample Data\";\n            number = 10.5;\n            bool = true;\n            date1 = new GregorianCalendar().getTime();\n            integer = 42;\n        } else {\n            name = null;\n            number = null;\n            bool = null;\n            date1 = null;\n            integer = null;\n        }\n    }\n\n    public IntIdRoundTripTableElement(Random rndGen) {\n        name = Util.createSimpleRandomString(rndGen, 10);\n        number = rndGen.nextDouble();\n        bool = rndGen.nextBoolean();\n        date1 = new GregorianCalendar(rndGen.nextInt(20) + 1980, rndGen.nextInt(12), rndGen.nextInt(27) + 1, rndGen.nextInt(24), rndGen.nextInt(60),\n                rndGen.nextInt(60)).getTime();\n        integer = rndGen.nextInt();\n    }\n\n    public IntIdRoundTripTableElement(IntIdRoundTripTableElement other) {\n        id = Long.valueOf(other.id);\n        name = String.valueOf(other.name);\n        number = Double.valueOf(other.number);\n        bool = Boolean.valueOf(other.bool);\n        date1 = new Date(other.date1.getTime());\n        integer = Integer.valueOf(other.integer);\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof IntIdRoundTripTableElement))\n            return false;\n\n        IntIdRoundTripTableElement element = (IntIdRoundTripTableElement) o;\n        if (!Util.compare(element.id, id))\n            return false;\n        if (!Util.compare(element.name, name))\n            return false;\n        if (!Util.compare(element.number, number))\n            return false;\n        if (!Util.compare(element.bool, bool))\n            return false;\n        if (!Util.compare(element.date1, date1))\n            return false;\n        if (!Util.compare(element.integer, integer))\n            return false;\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(\"IntIdRoundTripTableItem[Bool=%B,Date1=%s,Integer=%s,Name=%s,Number=%s]\", bool == null ? \"<<NULL>>\" : bool.toString(),\n                date1 == null ? \"<<NULL>>\" : Util.dateToString(date1), integer == null ? \"<<NULL>>\" : integer.toString(), name, number == null ? \"<<NULL>>\"\n                        : number.toString());\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/ListFilter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport java.util.List;\n\npublic interface ListFilter<E> {\n    public FilterResult<E> filter(List<? extends E> list);\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/Movie.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport java.util.Date;\n\npublic interface Movie {\n    String getTitle();\n\n    void setTitle(String title);\n\n    int getDuration();\n\n    void setDuration(int duration);\n\n    String getMPAARating();\n\n    void setMPAARating(String mPAARating);\n\n    Date getReleaseDate();\n\n    void setReleaseDate(Date releaseDate);\n\n    boolean isBestPictureWinner();\n\n    void setBestPictureWinner(boolean bestPictureWinner);\n\n    int getYear();\n\n    void setYear(int year);\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/MovieComparator.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport android.util.Pair;\n\nimport com.microsoft.windowsazure.mobileservices.table.query.QueryOrder;\n\nimport java.util.ArrayList;\nimport java.util.Comparator;\nimport java.util.List;\n\npublic class MovieComparator implements Comparator<Movie> {\n    protected Pair<String, QueryOrder>[] mFields;\n\n    // default ascending\n    @SuppressWarnings(\"unchecked\")\n    public MovieComparator(String... fields) {\n        List<Pair<String, QueryOrder>> newFields = new ArrayList<Pair<String, QueryOrder>>();\n\n        for (String field : fields) {\n            newFields.add(new Pair<String, QueryOrder>(field, QueryOrder.Ascending));\n        }\n\n        mFields = new Pair[0];\n        mFields = newFields.toArray(mFields);\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    public MovieComparator(Pair<String, QueryOrder>... fields) {\n        mFields = fields;\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    @Override\n    public int compare(Movie m1, Movie m2) {\n        try {\n            for (Pair<String, QueryOrder> field : mFields) {\n                Object fieldM1 = m1.getClass().getMethod(field.first, (Class<?>[]) null).invoke(m1, (Object[]) null);\n                Object fieldM2 = m2.getClass().getMethod(field.first, (Class<?>[]) null).invoke(m2, (Object[]) null);\n\n                if (fieldM1 instanceof Comparable) {\n                    int res = ((Comparable<Object>) fieldM1).compareTo((Comparable<Object>) fieldM2);\n                    if (res != 0) {\n                        if (field.second == QueryOrder.Ascending)\n                            return res;\n                        else\n                            return res * -1;\n                    }\n                }\n            }\n\n            return 0;\n        } catch (Exception e) {\n            return 0;\n        }\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/ParamsTestTableItem.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport com.google.gson.JsonObject;\nimport com.google.gson.JsonParser;\n\npublic class ParamsTestTableItem {\n    public int id;\n    public String parameters;\n\n    public ParamsTestTableItem() {\n        this(0);\n    }\n\n    public ParamsTestTableItem(int id) {\n        this.id = id;\n    }\n\n    public JsonObject getParameters() {\n        return new JsonParser().parse(parameters).getAsJsonObject();\n    }\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/RoundTripTableElement.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport android.annotation.SuppressLint;\n\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\n\nimport java.util.Date;\nimport java.util.GregorianCalendar;\nimport java.util.Random;\n\n@SuppressLint(\"DefaultLocale\")\npublic class RoundTripTableElement {\n    public Integer id;\n\n    public String string1;\n\n    public Date date1;\n\n    public Boolean bool1;\n\n    // Number types\n    public Double double1;\n    public Long long1;\n    public Integer int1;\n\n    public EnumType enumType;\n\n    // Complex type array.\n    public ComplexType[] complexType1;\n\n    // Complex type\n    public ComplexType2 complexType2;\n\n    public RoundTripTableElement() {\n        this(false);\n    }\n\n    public RoundTripTableElement(boolean initialized) {\n        if (initialized) {\n            string1 = \"Sample Data\";\n            date1 = new GregorianCalendar().getTime();\n            bool1 = true;\n            double1 = 10.5;\n            long1 = 5000000000L;\n            int1 = 42;\n            enumType = EnumType.First;\n            Random rndGen = new Random();\n            complexType1 = new ComplexType[1];\n            complexType1[0] = new ComplexType(rndGen);\n            complexType2 = new ComplexType2(rndGen);\n        } else {\n            string1 = null;\n            date1 = null;\n            bool1 = null;\n            double1 = null;\n            long1 = null;\n            int1 = null;\n            enumType = null;\n            complexType1 = null;\n            complexType2 = null;\n        }\n    }\n\n    public RoundTripTableElement(Random rndGen) {\n        string1 = Util.createSimpleRandomString(rndGen, 10);\n        date1 = new GregorianCalendar(rndGen.nextInt(20) + 1980, rndGen.nextInt(12), rndGen.nextInt(27) + 1, rndGen.nextInt(24), rndGen.nextInt(60),\n                rndGen.nextInt(60)).getTime();\n        bool1 = rndGen.nextBoolean();\n        double1 = rndGen.nextDouble();\n        long1 = rndGen.nextInt(3000) + 5000000000L;\n        int1 = rndGen.nextInt();\n        enumType = EnumType.values()[rndGen.nextInt(4)];\n        complexType1 = new ComplexType[1];\n        complexType1[0] = new ComplexType(rndGen);\n        complexType2 = new ComplexType2(rndGen);\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof RoundTripTableElement))\n            return false;\n\n        RoundTripTableElement element = (RoundTripTableElement) o;\n        if (!Util.compare(element.id, id))\n            return false;\n        if (!Util.compare(element.string1, string1))\n            return false;\n        if (!Util.compare(element.date1, date1))\n            return false;\n        if (!Util.compare(element.bool1, bool1))\n            return false;\n        if (!Util.compare(element.double1, double1))\n            return false;\n        if (!Util.compare(element.long1, long1))\n            return false;\n        if (!Util.compare(element.int1, int1))\n            return false;\n        if (!Util.compareArrays(element.complexType1, complexType1))\n            return false;\n        if (!Util.compare(element.complexType2, complexType2))\n            return false;\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(\"RoundTripTableItem[Bool1=%B,ComplexType1=%s,ComplexType2=%s,Date1=%s,Double1=%s,EnumType=%s,Int1=%d,Long1=%d,String1=%s]\",\n                bool1 == null ? \"<<NULL>>\" : bool1.toString(), Util.arrayToString(complexType1), complexType2 == null ? \"<<NULL>>\" : complexType2.toString(),\n                date1 == null ? \"<<NULL>>\" : Util.dateToString(date1), double1 == null ? \"<NULL>\" : double1.toString(), enumType.toString(),\n                int1 == null ? \"<<NULL>>\" : int1, long1, string1);\n\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/SimpleFilter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic abstract class SimpleFilter<E> implements ListFilter<E> {\n\n    @Override\n    public FilterResult<E> filter(List<? extends E> list) {\n        return getElements(list);\n    }\n\n    abstract protected boolean criteria(E element);\n\n    protected FilterResult<E> getElements(List<? extends E> list) {\n        List<E> newList = new ArrayList<E>();\n        FilterResult<E> result = new FilterResult<E>();\n\n        for (E element : list) {\n            if (criteria(element)) {\n                newList.add(element);\n            }\n        }\n        result.totalCount = newList.size();\n\n        result.elements = applyOrder(newList);\n        return result;\n    }\n\n    protected List<E> applyOrder(List<E> list) {\n        return list;\n    }\n\n    protected FilterResult<E> applyTopSkip(FilterResult<E> result, int top, int skip) {\n        if (result.elements.size() <= skip) {\n            result.elements = new ArrayList<E>();\n            return result;\n        } else {\n            result.elements = result.elements.subList(skip, result.elements.size());\n        }\n\n        if (result.elements.size() > top) {\n            result.elements = result.elements.subList(0, top);\n        }\n\n        return result;\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/SimpleMovieFilter.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic abstract class SimpleMovieFilter implements ListFilter<Movie> {\n\n    @Override\n    public FilterResult<Movie> filter(List<? extends Movie> list) {\n        return getElements(list);\n    }\n\n    abstract protected boolean criteria(Movie movie);\n\n    protected FilterResult<Movie> getElements(List<? extends Movie> list) {\n        List<Movie> newList = new ArrayList<Movie>();\n        FilterResult<Movie> result = new FilterResult<Movie>();\n\n        for (Movie movie : list) {\n            if (criteria(movie)) {\n                newList.add(movie);\n            }\n        }\n        result.totalCount = newList.size();\n\n        result.elements = applyOrder(newList);\n        return result;\n    }\n\n    protected List<Movie> applyOrder(List<? extends Movie> movies) {\n        return new ArrayList<Movie>(movies);\n    }\n\n    protected FilterResult<Movie> applyTopSkip(FilterResult<Movie> result, int top, int skip) {\n        if (result.elements.size() <= skip) {\n            result.elements = new ArrayList<Movie>();\n            return result;\n        } else {\n            result.elements = result.elements.subList(skip, result.elements.size());\n        }\n\n        if (result.elements.size() > top) {\n            result.elements = result.elements.subList(0, top);\n        }\n\n        return result;\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/StringIdJsonElement.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport android.annotation.SuppressLint;\n\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\n\nimport java.util.Date;\nimport java.util.GregorianCalendar;\nimport java.util.Random;\n\n@SuppressLint(\"DefaultLocale\")\npublic class StringIdJsonElement {\n    public String id;\n\n    public String name;\n\n    public Double number;\n\n    public Boolean bool;\n\n    public Date date1;\n\n    public StringIdJsonElement() {\n        this(false);\n    }\n\n    public StringIdJsonElement(String id) {\n        this(true);\n        this.id = id;\n    }\n\n    public StringIdJsonElement(boolean initialized) {\n        if (initialized) {\n            name = \"Sample Data\";\n            number = 10.5;\n            bool = true;\n            date1 = new GregorianCalendar().getTime();\n            Random rndGen = new Random();\n        } else {\n            name = null;\n            number = null;\n            bool = null;\n            date1 = null;\n        }\n    }\n\n    public StringIdJsonElement(Random rndGen) {\n        name = Util.createSimpleRandomString(rndGen, 10);\n        number = rndGen.nextDouble();\n        bool = rndGen.nextBoolean();\n        date1 = new GregorianCalendar(rndGen.nextInt(20) + 1980, rndGen.nextInt(12), rndGen.nextInt(27) + 1, rndGen.nextInt(24), rndGen.nextInt(60),\n                rndGen.nextInt(60)).getTime();\n    }\n\n    public StringIdJsonElement(StringIdJsonElement other) {\n        id = String.valueOf(other.id);\n        name = String.valueOf(other.name);\n        number = Double.valueOf(other.number);\n        bool = Boolean.valueOf(other.bool);\n        date1 = new Date(other.date1.getTime());\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof StringIdJsonElement))\n            return false;\n\n        StringIdJsonElement element = (StringIdJsonElement) o;\n        if (!Util.compare(element.id, id))\n            return false;\n        if (!Util.compare(element.name, name))\n            return false;\n        if (!Util.compare(element.bool, bool))\n            return false;\n        if (!Util.compare(element.number, number))\n            return false;\n        if (!Util.compare(element.date1, date1))\n            return false;\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(\"StringIdRoundTripTableItem[Bool=%B,Date1=%s,Name=%s,Number=%s]\", bool == null ? \"<<NULL>>\" : bool.toString(),\n                 date1 == null ? \"<<NULL>>\" : Util.dateToString(date1), name, number == null ? \"<<NULL>>\"\n                        : number.toString());\n\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/StringIdMovie.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport com.google.gson.annotations.SerializedName;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\n\nimport java.util.Date;\nimport java.util.Locale;\n\npublic class StringIdMovie implements Movie {\n\n    @SerializedName(\"id\")\n    private String mId;\n\n    @SerializedName(\"title\")\n    private String mTitle;\n\n    @SerializedName(\"duration\")\n    private int mDuration;\n\n    @SerializedName(\"mpaaRating\")\n    private String mMPAARating;\n\n    @SerializedName(\"releaseDate\")\n    private Date mReleaseDate;\n\n    @SerializedName(\"bestPictureWinner\")\n    private boolean mBestPictureWinner;\n\n    @SerializedName(\"year\")\n    private int mYear;\n\n    public StringIdMovie() {\n    }\n\n    public StringIdMovie(String id, boolean bestPictureWinner, int duration, String mpaaRating, Date releaseDate, String title, int year) {\n        mId = id;\n        mBestPictureWinner = bestPictureWinner;\n        mDuration = duration;\n        mMPAARating = mpaaRating;\n        mReleaseDate = releaseDate;\n        mTitle = title;\n        mYear = year;\n    }\n\n    public StringIdMovie(String id, IntIdMovie movie) {\n        mId = id;\n        mBestPictureWinner = movie.isBestPictureWinner();\n        mDuration = movie.getDuration();\n        mMPAARating = movie.getMPAARating();\n        mReleaseDate = movie.getReleaseDate();\n        mTitle = movie.getTitle();\n        mYear = movie.getYear();\n    }\n\n    public String getId() {\n        return mId;\n    }\n\n    public void setId(String id) {\n        this.mId = id;\n    }\n\n    @Override\n    public String getTitle() {\n        return mTitle;\n    }\n\n    @Override\n    public void setTitle(String title) {\n        mTitle = title;\n    }\n\n    @Override\n    public int getDuration() {\n        return mDuration;\n    }\n\n    @Override\n    public void setDuration(int duration) {\n        mDuration = duration;\n    }\n\n    @Override\n    public String getMPAARating() {\n        return mMPAARating;\n    }\n\n    @Override\n    public void setMPAARating(String mPAARating) {\n        mMPAARating = mPAARating;\n    }\n\n    @Override\n    public Date getReleaseDate() {\n        return mReleaseDate;\n    }\n\n    @Override\n    public void setReleaseDate(Date releaseDate) {\n        mReleaseDate = releaseDate;\n    }\n\n    @Override\n    public boolean isBestPictureWinner() {\n        return mBestPictureWinner;\n    }\n\n    @Override\n    public void setBestPictureWinner(boolean bestPictureWinner) {\n        mBestPictureWinner = bestPictureWinner;\n    }\n\n    @Override\n    public int getYear() {\n        return mYear;\n    }\n\n    @Override\n    public void setYear(int year) {\n        mYear = year;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (o == null)\n            return false;\n\n        if (!(o instanceof StringIdMovie))\n            return false;\n        StringIdMovie m = (StringIdMovie) o;\n\n        if (!Util.compare(mTitle, m.mTitle))\n            return false;\n        if (!Util.compare(mDuration, m.mDuration))\n            return false;\n        if (!Util.compare(mMPAARating, m.mMPAARating))\n            return false;\n        if (mReleaseDate != null) {\n            if (m.mReleaseDate == null)\n                return false;\n            if (!Util.compare(mReleaseDate, m.mReleaseDate))\n                return false;\n        }\n        if (!Util.compare(mBestPictureWinner, m.mBestPictureWinner))\n            return false;\n        if (!Util.compare(mYear, m.mYear))\n            return false;\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(Locale.getDefault(), \"Movie/string id[Title=%s,Duration=%d,Rating=%s,ReleaseDate=%s,BestPictureWinner=%B,Year=%d]\", mTitle,\n                mDuration, mMPAARating, Util.dateToString(mReleaseDate), mBestPictureWinner, mYear);\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/StringIdRoundTripTableElement.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport android.annotation.SuppressLint;\n\nimport com.google.gson.annotations.SerializedName;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\n\nimport java.util.Date;\nimport java.util.GregorianCalendar;\nimport java.util.Random;\n\n@SuppressLint(\"DefaultLocale\")\npublic class StringIdRoundTripTableElement {\n    public String id;\n\n    public String name;\n\n    public Double number;\n\n    public Boolean bool;\n\n    public Date date1;\n\n    // Complex type\n    public ComplexType complex;\n\n    @SerializedName(\"__createdAt\")\n    public Date CreatedAt;\n\n    @SerializedName(\"__updatedAt\")\n    public Date UpdatedAt;\n\n    @SerializedName(\"__version\")\n    public String Version;\n\n    public StringIdRoundTripTableElement() {\n        this(false);\n    }\n\n    public StringIdRoundTripTableElement(String id) {\n        this(true);\n        this.id = id;\n    }\n\n    public StringIdRoundTripTableElement(boolean initialized) {\n        if (initialized) {\n            name = \"Sample Data\";\n            number = 10.5;\n            bool = true;\n            date1 = new GregorianCalendar().getTime();\n            Random rndGen = new Random();\n            complex = new ComplexType(rndGen);\n        } else {\n            name = null;\n            number = null;\n            bool = null;\n            date1 = null;\n            complex = null;\n        }\n    }\n\n    public StringIdRoundTripTableElement(Random rndGen) {\n        name = Util.createSimpleRandomString(rndGen, 10);\n        number = rndGen.nextDouble();\n        bool = rndGen.nextBoolean();\n        date1 = new GregorianCalendar(rndGen.nextInt(20) + 1980, rndGen.nextInt(12), rndGen.nextInt(27) + 1, rndGen.nextInt(24), rndGen.nextInt(60),\n                rndGen.nextInt(60)).getTime();\n        complex = new ComplexType(rndGen);\n    }\n\n    public StringIdRoundTripTableElement(StringIdRoundTripTableElement other) {\n        id = String.valueOf(other.id);\n        name = String.valueOf(other.name);\n        number = Double.valueOf(other.number);\n        bool = Boolean.valueOf(other.bool);\n        date1 = new Date(other.date1.getTime());\n        complex = new ComplexType(other.complex);\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof StringIdRoundTripTableElement))\n            return false;\n\n        StringIdRoundTripTableElement element = (StringIdRoundTripTableElement) o;\n        if (!Util.compare(element.id, id))\n            return false;\n        if (!Util.compare(element.name, name))\n            return false;\n        if (!Util.compare(element.bool, bool))\n            return false;\n        if (!Util.compare(element.number, number))\n            return false;\n        if (!Util.compare(element.date1, date1))\n            return false;\n        if (!Util.compare(element.complex, complex))\n            return false;\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(\"StringIdRoundTripTableItem[Bool=%B,ComplexType=%s,Date1=%s,Name=%s,Number=%s]\", bool == null ? \"<<NULL>>\" : bool.toString(),\n                complex == null ? \"<<NULL>>\" : complex.toString(), date1 == null ? \"<<NULL>>\" : Util.dateToString(date1), name, number == null ? \"<NULL>\"\n                        : number.toString());\n\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/StringIdRoundTripTableSoftDeleteElement.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport android.annotation.SuppressLint;\n\nimport com.google.gson.annotations.SerializedName;\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\n\nimport java.util.Date;\nimport java.util.GregorianCalendar;\nimport java.util.Random;\n\n@SuppressLint(\"DefaultLocale\")\npublic class StringIdRoundTripTableSoftDeleteElement {\n    public String id;\n\n    public String name;\n\n    public Double number;\n\n    public Boolean bool;\n\n    public Date date1;\n\n    @SerializedName(\"__createdAt\")\n    public Date CreatedAt;\n\n    @SerializedName(\"__updatedAt\")\n    public Date UpdatedAt;\n\n    @SerializedName(\"__version\")\n    public String Version;\n\n    @SerializedName(\"__deleted\")\n    public Boolean Deleted;\n\n    public StringIdRoundTripTableSoftDeleteElement() {\n        this(false);\n    }\n\n    public StringIdRoundTripTableSoftDeleteElement(String id) {\n        this(true);\n        this.id = id;\n    }\n\n    public StringIdRoundTripTableSoftDeleteElement(boolean initialized) {\n        if (initialized) {\n            name = \"Sample Data\";\n            number = 10.5;\n            bool = true;\n            date1 = new GregorianCalendar().getTime();\n            Random rndGen = new Random();\n        } else {\n            name = null;\n            number = null;\n            bool = null;\n            date1 = null;\n        }\n    }\n\n    public StringIdRoundTripTableSoftDeleteElement(Random rndGen) {\n        name = Util.createSimpleRandomString(rndGen, 10);\n        number = rndGen.nextDouble();\n        bool = rndGen.nextBoolean();\n        date1 = new GregorianCalendar(rndGen.nextInt(20) + 1980, rndGen.nextInt(12), rndGen.nextInt(27) + 1, rndGen.nextInt(24), rndGen.nextInt(60),\n                rndGen.nextInt(60)).getTime();\n    }\n\n    public StringIdRoundTripTableSoftDeleteElement(StringIdRoundTripTableSoftDeleteElement other) {\n        id = String.valueOf(other.id);\n        name = String.valueOf(other.name);\n        number = Double.valueOf(other.number);\n        bool = Boolean.valueOf(other.bool);\n        date1 = new Date(other.date1.getTime());\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (!(o instanceof StringIdRoundTripTableSoftDeleteElement))\n            return false;\n\n        StringIdRoundTripTableSoftDeleteElement element = (StringIdRoundTripTableSoftDeleteElement) o;\n        if (!Util.compare(element.id, id))\n            return false;\n        if (!Util.compare(element.name, name))\n            return false;\n        if (!Util.compare(element.bool, bool))\n            return false;\n        if (!Util.compare(element.number, number))\n            return false;\n        if (!Util.compare(element.date1, date1))\n            return false;\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(\"StringIdRoundTripTableItem[Bool=%B,Date1=%s,Name=%s,Number=%s]\", bool == null ? \"<<NULL>>\" : bool.toString(),\n                date1 == null ? \"<<NULL>>\" : Util.dateToString(date1), name, number == null ? \"<NULL>\"\n                        : number.toString());\n\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/StringIdTableItem.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport com.microsoft.windowsazure.mobileservices.zumoe2etestapp.framework.Util;\n\nimport java.util.Locale;\n\npublic class StringIdTableItem {\n\n    public String id;\n\n    public String data;\n\n    public StringIdTableItem() {\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (o == null)\n            return false;\n\n        if (!(o instanceof StringIdTableItem))\n            return false;\n\n        StringIdTableItem m = (StringIdTableItem) o;\n        if (!Util.compare(this.id, m.id))\n            return false;\n        if (!Util.compare(this.data, m.data))\n            return false;\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(Locale.getDefault(), \"StringIdTableItem[Data=%s]\", this.data);\n    }\n\n}\n"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/java/com/microsoft/windowsazure/mobileservices/zumoe2etestapp/tests/types/SystemPropertiesTestData.java",
    "content": "/*\nCopyright (c) Microsoft Open Technologies, Inc.\nAll Rights Reserved\nApache 2.0 License\n \n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n \n     http://www.apache.org/licenses/LICENSE-2.0\n \n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n \nSee the Apache Version 2.0 License for specific language governing permissions and limitations under the License.\n */\npackage com.microsoft.windowsazure.mobileservices.zumoe2etestapp.tests.types;\n\nimport android.util.Pair;\n\nimport com.microsoft.windowsazure.mobileservices.table.MobileServiceSystemProperty;\n\nimport java.util.ArrayList;\nimport java.util.EnumSet;\nimport java.util.List;\n\n\npublic class SystemPropertiesTestData {\n    public static List<EnumSet<MobileServiceSystemProperty>> AllSystemProperties;\n\n    static {\n        List<MobileServiceSystemProperty> col;\n        EnumSet<MobileServiceSystemProperty> set;\n        AllSystemProperties = new ArrayList<EnumSet<MobileServiceSystemProperty>>();\n\n        AllSystemProperties.add(EnumSet.noneOf(MobileServiceSystemProperty.class));\n\n        AllSystemProperties.add(EnumSet.allOf(MobileServiceSystemProperty.class));\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.CreatedAt);\n        col.add(MobileServiceSystemProperty.UpdatedAt);\n        col.add(MobileServiceSystemProperty.Version);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.CreatedAt);\n        col.add(MobileServiceSystemProperty.UpdatedAt);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.CreatedAt);\n        col.add(MobileServiceSystemProperty.Version);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.UpdatedAt);\n        col.add(MobileServiceSystemProperty.Version);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.CreatedAt);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.UpdatedAt);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n\n        col = new ArrayList<MobileServiceSystemProperty>();\n        col.add(MobileServiceSystemProperty.Version);\n        set = EnumSet.noneOf(MobileServiceSystemProperty.class);\n        set.addAll(col);\n        AllSystemProperties.add(set);\n    }\n\n    ;\n\n    public static String[] ValidSystemProperties = new String[]{\"__createdAt\", \"__updatedAt\", \"__version\", \"__CreatedAt\"};\n\n    public static String[] NonSystemProperties = new String[]{\"someProperty\", \"createdAt\", \"updatedAt\", \"version\", \"_createdAt\", \"_updatedAt\", \"_version\",\n            \"X__createdAt\"};\n\n    public static String[] ValidSystemPropertyQueryStringsForNode = new String[]{\n            // General\n            \"__systemProperties=*\", \"__systemProperties=__createdAt\", \"__systemProperties=__createdAt,__updatedAt\", \"__systemProperties=__createdAt,__version\",\n            \"__systemProperties=__createdAt,__updatedAt,__version\", \"__systemProperties=__createdAt,__version,__updatedAt\",\n            \"__systemProperties=__updatedAt\",\n            \"__systemProperties=__updatedAt,__createdAt\",\n            \"__systemProperties=__updatedAt,__createdAt,__version\",\n            \"__systemProperties=__updatedAt,__version\",\n            \"__systemProperties=__updatedAt,__version, __createdAt\",\n            \"__systemProperties=__version\",\n            \"__systemProperties=__version,__createdAt\",\n            \"__systemProperties=__version,__createdAt,__updatedAt\",\n            \"__systemProperties=__version,__updatedAt\",\n            \"__systemProperties=__version,__updatedAt, __createdAt\",\n\n            // Trailing commas, extra commas\n            \"__systemProperties=__createdAt,\", \"__systemProperties=__createdAt,__updatedAt,\",\n            \"__systemProperties=__createdAt,__updatedAt,__version,\",\n            \"__systemProperties=,__createdAt\",\n            \"__systemProperties=__createdAt,,__updatedAt\",\n            \"__systemProperties=__createdAt, ,__updatedAt,__version\",\n            \"__systemProperties=__createdAt,,\",\n            \"__systemProperties=__createdAt, ,\",\n\n            // Trailing, leading whitespace\n            \"__systemProperties= *\", \"__systemProperties=\\t*\\t\", \"__systemProperties= __createdAt \", \"__systemProperties=\\t__createdAt,\\t__updatedAt\\t\",\n            \"__systemProperties=\\r__createdAt,\\r__updatedAt,\\t__version\\r\",\n            \"__systemProperties=\\n__createdAt\\n\",\n            \"__systemProperties=__createdAt,\\n__updatedAt\",\n            \"__systemProperties=__createdAt, __updatedAt, __version\",\n\n            // Different casing\n            \"__SystemProperties=*\", \"__SystemProperties=__createdAt\", \"__SYSTEMPROPERTIES=__createdAt,__updatedAt\",\n            \"__systemproperties=__createdAt,__updatedAt,__version\", \"__SystemProperties=__CreatedAt\", \"__SYSTEMPROPERTIES=__createdAt,__UPDATEDAT\",\n            \"__systemproperties=__createdat,__UPDATEDAT,__veRsion\",\n\n            // Sans __ prefix\n            \"__systemProperties=createdAt\", \"__systemProperties=updatedAt,createdAt\", \"__systemProperties=UPDATEDAT,createdat\",\n            \"__systemProperties=updatedAt,version,createdAt\",\n\n            // Combinations of above\n            \"__SYSTEMPROPERTIES=__createdAt, updatedat\", \"__systemProperties=__CreatedAt,,\\t__VERSION\", \"__systemProperties= updatedat ,,\"};\n\n    public static String[] ValidSystemPropertyQueryStringsForNet = new String[]{\n            // General\n            \"__systemProperties=*\",\n            \"__systemProperties=__createdAt,__updatedAt,__version\",\n            \"__systemProperties=__createdAt,__version,__updatedAt\",\n            \"__systemProperties=__updatedAt,__createdAt,__version\",\n            \"__systemProperties=__updatedAt,__version, __createdAt\",\n            \"__systemProperties=__version,__createdAt,__updatedAt\",\n            \"__systemProperties=__version,__updatedAt, __createdAt\",\n\n            // Trailing commas, extra commas\n            \"__systemProperties=__createdAt,__updatedAt,__version,\",\n\n            // Trailing, leading whitespace\n            \"__systemProperties= *\",\n            \"__systemProperties=\\t*\\t\",\n            \"__systemProperties=__createdAt, __updatedAt, __version\",\n\n            // Different casing\n            \"__SystemProperties=*\",\n            \"__systemproperties=__createdAt,__updatedAt,__version\",\n            \"__systemproperties=__createdat,__UPDATEDAT,__veRsion\",\n\n            // Sans __ prefix\n            \"__systemProperties=updatedAt,version,createdAt\"};\n\n    public static String[] InvalidSystemPropertyQueryStrings = new String[]{\n            // Unknown system Properties\n            \"__systemProperties=__created\", \"__systemProperties=updated At\", \"__systemProperties=notASystemProperty\", \"__systemProperties=_version\",\n\n            // System properties not comma separated\n            \"__systemProperties=__createdAt __updatedAt\", \"__systemProperties=__createdAt\\t__version\", \"__systemProperties=createdAt updatedAt version\",\n            \"__systemProperties=__createdAt__version\",\n\n            // All and individual system properties requested\n            \"__systemProperties=*,__updatedAt\",};\n\n    // Missing ‘__’ prefix to systemProperties query string parameter\n    public static String InvalidSystemParameterQueryString = \"_systemProperties=__createdAt,__version\";\n\n    public static List<Pair<String, String>> VersionsSerialize;\n\n    static {\n        VersionsSerialize = new ArrayList<Pair<String, String>>();\n        VersionsSerialize.add(new Pair<String, String>(\"AAAAAAAAH2o=\", \"\\\"AAAAAAAAH2o=\\\"\"));\n        VersionsSerialize.add(new Pair<String, String>(\"a version\", \"\\\"a version\\\"\"));\n        VersionsSerialize.add(new Pair<String, String>(\"a version with a \\\" quote\", \"\\\"a version with a \\\\\\\" quote\\\"\"));\n        VersionsSerialize.add(new Pair<String, String>(\"a version with an already escaped \\\\\\\" quote\", \"\\\"a version with an already escaped \\\\\\\" quote\\\"\"));\n        VersionsSerialize.add(new Pair<String, String>(\"\\\"a version with a quote at the start\", \"\\\"\\\\\\\"a version with a quote at the start\\\"\"));\n        VersionsSerialize.add(new Pair<String, String>(\"a version with a quote at the end\\\"\", \"\\\"a version with a quote at the end\\\\\\\"\\\"\"));\n        VersionsSerialize.add(new Pair<String, String>(\"datetime'2013-10-08T04%3A12%3A36.96Z'\", \"\\\"datetime'2013-10-08T04%3A12%3A36.96Z'\\\"\"));\n    }\n\n    public static List<Pair<String, String>> VersionsDeserialize;\n\n    static {\n        VersionsDeserialize = new ArrayList<Pair<String, String>>();\n        VersionsDeserialize.add(new Pair<String, String>(\"AAAAAAAAH2o=\", \"\\\"AAAAAAAAH2o=\\\"\"));\n        VersionsDeserialize.add(new Pair<String, String>(\"a version\", \"\\\"a version\\\"\"));\n        VersionsDeserialize.add(new Pair<String, String>(\"a version with a \\\" quote\", \"\\\"a version with a \\\\\\\" quote\\\"\"));\n        VersionsDeserialize.add(new Pair<String, String>(\"a version with an already escaped \\\" quote\", \"\\\"a version with an already escaped \\\\\\\" quote\\\"\"));\n        VersionsDeserialize.add(new Pair<String, String>(\"\\\"a version with a quote at the start\", \"\\\"\\\\\\\"a version with a quote at the start\\\"\"));\n        VersionsDeserialize.add(new Pair<String, String>(\"a version with a quote at the end\\\"\", \"\\\"a version with a quote at the end\\\\\\\"\\\"\"));\n        VersionsDeserialize.add(new Pair<String, String>(\"datetime'2013-10-08T04%3A12%3A36.96Z'\", \"\\\"datetime'2013-10-08T04%3A12%3A36.96Z'\\\"\"));\n    }\n}"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/res/layout/activity_main.xml",
    "content": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/LinearLayout1\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    tools:context=\".MainActivity\">\n\n    <Spinner\n        android:id=\"@+id/testGroupSpinner\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n\n    <ListView\n        android:id=\"@+id/testCaseList\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        tools:listitem=\"@layout/row_list_test_case\">\n\n    </ListView>\n\n</LinearLayout>"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/res/layout/row_list_test_case.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"horizontal\">\n\n    <CheckBox\n        android:id=\"@+id/checkTestCase\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/test_case_name\" />\n\n</LinearLayout>"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/res/menu/activity_main.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item\n        android:id=\"@+id/menu_settings\"\n        android:orderInCategory=\"100\"\n        android:showAsAction=\"never\"\n        android:title=\"@string/menu_settings\" />\n    <item\n        android:id=\"@+id/menu_run_tests\"\n        android:orderInCategory=\"101\"\n        android:showAsAction=\"always\"\n        android:title=\"@string/menu_run_tests\"></item>\n    <item\n        android:id=\"@+id/menu_check_all\"\n        android:orderInCategory=\"102\"\n        android:showAsAction=\"never\"\n        android:title=\"@string/menu_check_all\"></item>\n    <item\n        android:id=\"@+id/menu_uncheck_all\"\n        android:orderInCategory=\"103\"\n        android:showAsAction=\"never\"\n        android:title=\"@string/menu_uncheck_all\"></item>\n    <item\n        android:id=\"@+id/menu_reset\"\n        android:orderInCategory=\"105\"\n        android:showAsAction=\"never\"\n        android:title=\"@string/menu_reset\"></item>\n    <item\n        android:id=\"@+id/menu_view_log\"\n        android:orderInCategory=\"106\"\n        android:showAsAction=\"never\"\n        android:title=\"@string/menu_view_log\"></item>\n\n</menu>"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/res/values/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <string name=\"app_name\">ZumoE2ETestApp</string>\n    <string name=\"menu_settings\">Settings</string>\n    <string name=\"menu_run_tests\">Run Selected Tests</string>\n    <string name=\"menu_check_all\">Check all tests</string>\n    <string name=\"menu_uncheck_all\">Uncheck all tests</string>\n    <string name=\"test_case_name\">Test Case Name</string>\n    <string name=\"menu_reset\">Reset</string>\n    <string name=\"menu_view_log\">View Log</string>\n</resources>"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/res/values/strings_activity_zumo_preference.xml",
    "content": "<resources>\n\n    <string name=\"title_activity_zumo_preference\">Settings</string>\n\n    <!-- General settings -->\n    <string name=\"pref_header_general\">General</string>\n\t\n\t<string name=\"pref_mobile_service_url\">Mobile Service URL</string>\n    <string name=\"pref_default_mobile_service_url\">https://lagash-android.azure-mobile.net/</string>\n    <string name=\"pref_mobile_service_key\">Mobile Service Key</string>\n    <string name=\"pref_default_mobile_service_key\">CpAMwnhRWlXIPLyVlvSaJCLovuGxWT15</string>\n    <string name=\"pref_log_post_url\">Log POST URL</string>\n    <string name=\"pref_default_log_post_url\"></string>\n    <string name=\"pref_GCM_sender_id\">GCM Sender Id</string>\n    <string name=\"pref_default_GCM_sender_id\">245086394985</string>\n    \n</resources>"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!--\n        Base application theme, dependent on API level. This theme is replaced\n        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.\n    -->\n    <style name=\"AppBaseTheme\" parent=\"android:Theme.Light\">\n        <!--\n            Theme customizations available in newer API levels can go in\n            res/values-vXX/styles.xml, while customizations related to\n            backward-compatibility can go here.\n        -->\n    </style>\n\n    <!-- Application theme. -->\n    <style name=\"AppTheme\" parent=\"AppBaseTheme\">\n        <!-- All customizations that are NOT specific to a particular API-level can go here. -->\n    </style>\n\n</resources>"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/res/values-v11/styles.xml",
    "content": "<resources>\n\n    <!--\n        Base application theme for API 11+. This theme completely replaces\n        AppBaseTheme from res/values/styles.xml on API 11+ devices.\n    -->\n    <style name=\"AppBaseTheme\" parent=\"android:Theme.Holo.Light\">\n        <!-- API 11 theme customizations can go here. -->\n    </style>\n\n</resources>"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/res/values-v14/styles.xml",
    "content": "<resources>\n\n    <!--\n        Base application theme for API 14+. This theme completely replaces\n        AppBaseTheme from BOTH res/values/styles.xml and\n        res/values-v11/styles.xml on API 14+ devices.\n    -->\n    <style name=\"AppBaseTheme\" parent=\"android:Theme.Holo.Light.DarkActionBar\">\n        <!-- API 14 theme customizations can go here. -->\n    </style>\n\n</resources>"
  },
  {
    "path": "test/Android/ZumoE2ETestApp/src/main/res/xml/pref_general.xml",
    "content": "<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <EditTextPreference\n        android:defaultValue=\"@string/pref_default_mobile_service_url\"\n        android:key=\"pref_mobile_service_url\"\n        android:maxLines=\"1\"\n        android:singleLine=\"true\"\n        android:title=\"@string/pref_mobile_service_url\" />\n\n    <EditTextPreference\n        android:defaultValue=\"@string/pref_default_mobile_service_key\"\n        android:key=\"pref_mobile_service_key\"\n        android:maxLines=\"1\"\n        android:singleLine=\"true\"\n        android:title=\"@string/pref_mobile_service_key\" />\n\n    <EditTextPreference\n        android:defaultValue=\"@string/pref_default_log_post_url\"\n        android:key=\"pref_log_post_url\"\n        android:maxLines=\"1\"\n        android:singleLine=\"true\"\n        android:title=\"@string/pref_log_post_url\" />\n\n    <EditTextPreference\n        android:defaultValue=\"@string/pref_default_GCM_sender_id\"\n        android:key=\"pref_GCM_sender_id\"\n        android:maxLines=\"1\"\n        android:singleLine=\"true\"\n        android:title=\"@string/pref_GCM_sender_id\" />\n\n\n</PreferenceScreen>"
  },
  {
    "path": "test/JavaScript/.gitignore",
    "content": "*.suo\nobj/\nbin/\nbld/\nbuild/\ndebug/\n*.jsproj.user\npackages/"
  },
  {
    "path": "test/JavaScript/TestFramework/css/default.css",
    "content": "﻿body {\n}\n\n@media screen and (-ms-view-state: fullscreen-landscape) {\n}\n\n@media screen and (-ms-view-state: filled) {\n}\n\n@media screen and (-ms-view-state: snapped) {\n}\n\n@media screen and (-ms-view-state: fullscreen-portrait) {\n}\n\n#mainTable \n{\n    width: 100%;\n    height: 100%;\n}\n\n.mainTitle\n{\n    font-size: 40px;\n}\n        \n.borderedCell \n{\n    border-style: inset;\n    border-width: 8px;\n    border-color: Olive;\n    color: Yellow;\n    padding: 5px;\n    background-color: Black;\n}\n        \n#testGroupsTableCell \n{\n    width: 30%;\n}\n        \n#testsTableCell\n{\n    width: 70%;\n}\n        \n#appUrlLabelCell, #appKeyLabelCell \n{\n    padding: 5px;\n    width: 100px;\n    font-size: 20px;\n}\n        \n#txtAppUrl, #txtAppKey\n{\n    padding: 5px;\n    width: 100%;\n}\n        \n#saveAppInfoCell, #loadAppInfoCell \n{\n    padding: 5px;\n    width: 150px;\n}\n        \nbutton \n{\n    height: 30px;\n}\n        \n.testsTitle \n{\n    font-size: 25px;\n    text-align: center;\n    vertical-align: middle;\n    padding: 10px;\n}\n        \n.testGroupItem \n{\n    font-size: 16px;\n    padding: 10px;\n    color: Lime;\n}\n"
  },
  {
    "path": "test/JavaScript/TestFramework/js/testFramework.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"//Microsoft.WinJS.1.0/js/base.js\" />\n/// <reference path=\"../../ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/MobileServices.js\" />\n/// <reference path=\"../../ZumoE2EHTMLApp/ZumoE2EHTMLApp/../../TestFramework/js/platformSpecificFunctions.js\" />\n\nfunction createZumoNamespace() {\n    var TSPassed = 0;\n    var TSFailed = 1;\n    var TSNotRun = 2;\n    var TSRunning = 3;\n    var TSSkipped = 4;\n    var AllTestsGroupName = \"All tests\";\n    var AllTestsUnattendedGroupName = AllTestsGroupName + ' (unattended)';\n    var ClientVersionKey = 'client-version';\n    var ServerVersionKey = 'server-version';\n    var RuntimeFeaturesKey = 'runtime-features';\n\n    function ZumoTest(name, execution, requiredRuntimeFeatures) {\n        /// <summary>\n        /// Creates a new test object.\n        /// </summary>\n        /// <param name=\"name\" type=\"String\">The name of the test.</param>\n        /// <param name=\"execution\" type=\"function(test, done)\">The function to be called when the\n        ///   test needs to be executed. The function is passed two parameters: the test itself, and\n        ///   a callback function to be called when the test is done. The callback function should be\n        ///   passed <code>true</code> if the test passed; <code>false</code> if the test failed, or\n        ///   <code>null</code> if the test should be skipped.</param>\n        /// <param name=\"requiredRuntimeFeatures\" optional=\"true\">Any runtime features required for this\n        ///   test to run. Can be a single feature name, or an array of feature names.</param>\n        this.name = name;\n        this.execution = execution;\n        this.status = TSNotRun;\n        this.canRunUnattended = true;\n        this.logs = [];\n        this.requiredFeatures = [];\n        if (requiredRuntimeFeatures) {\n            if (typeof requiredRuntimeFeatures === 'string') {\n                requiredRuntimeFeatures = [requiredRuntimeFeatures];\n            }\n            var that = this;\n            requiredRuntimeFeatures.forEach(function (feature) {\n                that.requiredFeatures.push(feature);\n            });\n        }\n    }\n\n    ZumoTest.prototype.addFullLog = function (text, args) {\n        /// <summary>\n        /// Adds a new log entry to the test\n        /// </summary>\n        /// <param name=\"text\" type=\"String\">The text to be added to the log</param>\n        /// <param name=\"args\" optional=\"true\">Any additional arguments, which will be\n        ///       JSON.stringify'ed and concatenated with the text.</param>\n        for (var i = 1; i < arguments.length; i++) {\n            var arg = arguments[i];\n            if (typeof arg === 'string') {\n                text = text + arg;\n            } else {\n                text = text + JSON.stringify(arg);\n            }\n        }\n        text = addTimestamp(text);\n        this.logs.push(text);\n    }\n\n    function addTimestamp(text) {\n        var now = new Date();\n        text = '[' + dateToString(now) + '] ' + text;\n        return text;\n    }\n\n    ZumoTest.prototype.shouldBeSkipped = function () {\n        /// <summary>\n        /// Determines whether this test should be skipped, given the features enabled in the runtime.\n        /// </summary>\n        /// <remarks>\n        /// If the test client does not have any runtime information, the test will not be skipped;\n        ///   if the runtime info is present, then if there are any required features in the test which are\n        ///   not enabled in the runtime, the test will be skipped.\n        /// </remarks>\n        /// <returns><code>true</code> if the test should be skipped; <code>false</code> otherwise.</returns>\n        var runtimeFeatures = zumo.util.globalTestParams[zumo.constants.RUNTIME_FEATURES_KEY];\n        if (!runtimeFeatures) {\n            return false;\n        }\n        for (var i = 0; i < this.requiredFeatures.length; i++) {\n            var isEnabled = runtimeFeatures[this.requiredFeatures[i]];\n            if (!isEnabled) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    ZumoTest.prototype.addRequiredFeature = function (featureName) {\n        /// <summary>\n        /// Determines that this test can only run if the runtime with which\n        /// the client is talking to has the given feature enabled.\n        /// </summary>\n        /// <param name=\"featureName\" type=\"String\">The name of the feature required by this test.</param>\n        this.requiredFeatures.push(featureName);\n    }\n\n    ZumoTest.prototype.addLog = function (text, args) {\n        /// <summary>\n        /// Adds a new log entry to the test, capped at a maximum of 500 characters\n        /// </summary>\n        /// <param name=\"text\" type=\"String\">The text to be added to the log</param>\n        /// <param name=\"args\" optional=\"true\">Any additional arguments, which will be\n        ///       JSON.stringify'ed and concatenated with the text.</param>\n        for (var i = 1; i < arguments.length; i++) {\n            var arg = arguments[i];\n            if (typeof arg === 'string') {\n                text = text + arg;\n            } else {\n                text = text + JSON.stringify(arg);\n            }\n        }\n        text = addTimestamp(text);\n\n        if (text.length > 500) {\n            text = text.substring(0, 500) + '... (truncated)';\n        }\n\n        this.logs.push(text);\n    }\n\n    ZumoTest.prototype.displayText = function () {\n        var result = 'Test: ' + this.name + ' (';\n        result = result + this.statusText() + ')';\n        return result;\n    }\n\n    ZumoTest.prototype.statusText = function () {\n        switch (this.status) {\n            case TSFailed:\n                return 'failed';\n            case TSPassed:\n                return 'passed';\n            case TSNotRun:\n                return 'not run';\n            case TSRunning:\n                return 'running';\n            case TSSkipped:\n                return 'skipped';\n            default:\n                return 'unknown';\n        }\n    }\n\n    ZumoTest.prototype.getLogs = function () {\n        return this.displayText() + '\\n' + this.logs.join('\\n');\n    }\n\n    // testDone is a function which will be called (with a boolean value indicating\n    //    pass or fail) when the test is done. If the value is null (or undefined),\n    //    the test is considered to be skipped.\n    ZumoTest.prototype.runTest = function (testDone) {\n        var that = this;\n        that.startTime = new Date();\n        if (that.shouldBeSkipped()) {\n            that.endTime = new Date();\n            testDone(null);\n        } else {\n            that.execution(this, function (passed) {\n                that.endTime = new Date();\n                testDone(passed)\n            });\n        }\n    }\n\n    ZumoTest.prototype.reset = function () {\n        this.status = TSNotRun;\n        this.startTime = null;\n        this.endTime = null;\n        this.logs = [];\n    }\n\n    function ZumoTestGroup(name, tests) {\n        this.name = name;\n        this.startTime = null;\n        this.endTime = null;\n        this.tests = tests || [];\n    }\n\n    ZumoTestGroup.prototype.addTest = function (test) {\n        /// <summary>\n        /// Adds a new test to this group.\n        /// </summary>\n        /// <param name=\"test\" type=\"zumo.Test\">The test to be added.</param>\n        this.tests.push(test);\n    }\n\n    // testStarted: function(test, testIndex)\n    // testDone: function(test, testIndex)\n    // groupDone: function(testsPassed, testsFailed, testsSkipped)\n    ZumoTestGroup.prototype.runTests = function (testStarted, testDone, groupDone) {\n        var group = this;\n        var passed = 0;\n        var failed = 0;\n        var skipped = 0;\n        this.startTime = new Date();\n        var that = this;\n        var runNextTest = function (index) {\n            if (index === group.tests.length) {\n                that.endTime = new Date();\n                if (groupDone) {\n                    groupDone(passed, failed, skipped);\n                }\n            } else {\n                var testToRun = group.tests[index];\n\n                if (testStarted) {\n                    testStarted(testToRun, index);\n                }\n\n                testToRun.status = TSRunning;\n                try {\n                    testToRun.runTest(function (result) {\n                        var isSkipped = result === null || result === undefined;\n                        if (isSkipped) {\n                            testToRun.status = TSSkipped;\n                            skipped++;\n                        } else {\n                            testToRun.status = result ? TSPassed : TSFailed;\n                            if (result) {\n                                passed++;\n                            } else {\n                                failed++;\n                            }\n                        }\n\n                        if (testDone) {\n                            testDone(testToRun, index);\n                        }\n\n                        testToRun.addLog('Test ' + testToRun.statusText());\n                        runNextTest(index + 1);\n                    });\n                } catch (ex) {\n                    testToRun.addLog('Caught exception running test: ' + JSON.stringify(ex));\n                    testToRun.status = TSFailed;\n                    failed++;\n                    testToRun.addLog('Test failed');\n                    if (testDone) {\n                        testDone(testToRun, index);\n                    }\n                    runNextTest(index + 1);\n                }\n            }\n        }\n\n        runNextTest(0);\n    }\n\n    ZumoTestGroup.prototype.getLogs = function () {\n        var lines = [];\n        lines.push('[' + dateToString(this.startTime) + '] Tests for group \\'' + this.name + '\\'');\n        lines.push('----------------------------');\n        this.tests.forEach(function (test) {\n            if (test.status !== TSSkipped) {\n                lines.push('[' + dateToString(test.startTime) + '] Logs for test ' + test.name + ' (' + test.statusText() + ')');\n                lines.push(test.getLogs());\n                lines.push('[' + dateToString(test.endTime) + '] -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-');\n            }\n        });\n\n        return lines.join('\\n');\n    }\n\n    var client = null;\n    var testGroups = [];\n    var currentGroup = -1;\n\n    // Returns 'true' if the initialization was successful; false otherwise\n    function initializeClient(appUrl, appKey) {\n        var mustInitialize = true;\n        if (client && client.applicationUrl === appUrl && client.applicationKey === appKey) {\n            mustInitialize = false;\n        }\n        \n        if (mustInitialize) {\n            if (appUrl && appKey) { \n                client = new WindowsAzure.MobileServiceClient(appUrl, appKey);\n                return true;\n            } else {\n                testPlatform.alert('Please enter valid application URL and key', 'Error', function () {\n                    return false;\n                });\n            }\n        } else {\n            return true;\n        }\n    }\n\n    function getClient() {\n        /// <summary>\n        /// Returns the shared MobileServiceClient instance.\n        /// </summary>\n        /// <returns type=\"Microsoft.WindowsAzure.MobileServices.MobileServiceClient\">\n        /// The shared cliens instance.\n        /// </returns>\n        return client;\n    }\n    function getIEBrowserVersion() {\n        // Get Version of IE browser\n        var rv = -1;\n        if (navigator.appName == 'Microsoft Internet Explorer') {\n            var ua = navigator.userAgent;\n            var re = new RegExp(\"MSIE ([0-9]{1,}[\\.0-9]{0,})\");\n            if (re.exec(ua) != null)\n                rv = parseFloat(RegExp.$1);\n        }\n        return rv;\n    }\n\n    function compareValues(expected, actual, errors) {\n        var i, key;\n        if (expected === actual) {\n            // easy case\n            return true;\n        }\n\n        if ((expected === null) != (actual === null)) {\n            return false;\n        }\n\n        if (expected === null) {\n            return true;\n        }\n\n        function getValueType(value) {\n            var result = typeof value;\n            if (result === 'object') {\n                var objType = Object.prototype.toString.call(value);\n                if (objType === '[object Date]') {\n                    result = 'date';\n                } else if (objType === '[object Array]') {\n                    result = 'array';\n                }\n            }\n\n            return result;\n        }\n\n        var expectedType = getValueType(expected);\n        var actualType = getValueType(actual);\n        if (expectedType !== actualType) {\n            if (errors && errors.push) {\n                errors.push('Different types: expected: ' + expectedType + ', actual: ' + actualType);\n                return false;\n            }\n        }\n\n        switch (expectedType) {\n            case 'boolean':\n            case 'string':\n                // not the same, comparison done in easy case\n                if (errors && errors.push) {\n                    errors.push('Expected: ' + expected + ', actual: ' + actual);\n                }\n                return false;\n            case 'date':\n                var dExpected = expected.getTime();\n                var dActual = actual.getTime();\n                if (dExpected !== dActual) {\n                    if (errors && errors.push) {\n                        errors.push('Expected: ' + expected + '(' + dExpected + '), actual: ' + actual + '(' + dActual + ')');\n                    }\n                    return false;\n                } else {\n                    return true;\n                }\n            case 'number':\n                var acceptableDelta = 1e-8;\n                var delta = 1 - expected / actual;\n                if (Math.abs(delta) > acceptableDelta) {\n                    if (errors && errors.push) {\n                        errors.push('Numbers differ by more than the allowed difference: ' + expected + ' - ' + actual);\n                    }\n                    return false;\n                } else {\n                    return true;\n                }\n            case 'array':\n                if (expected.length !== actual.length) {\n                    if (errors && errors.push) {\n                        errors.push('Size of arrays are different: ' + expected.length + ' - ' + actual.length);\n                    }\n                    return false;\n                }\n\n                for (i = 0; i < expected.length; i++) {\n                    if (!compareValues(expected[i], actual[i], errors)) {\n                        if (errors && errors.push) {\n                            errors.push('Difference in array at index ' + i);\n                        }\n                        return false;\n                    }\n                }\n\n                return true;\n            case 'object':\n                for (key in expected) {\n                    if (expected.hasOwnProperty(key)) {\n                        var actualValue = actual[key];\n                        var expectedValue = expected[key];\n                        if (expectedValue === undefined) {\n                            if (errors && errors.push) {\n                                errors.push('Expected object has member with key ' + key + ', actual does not.');\n                            }\n                            return false;\n                        }\n\n                        if (!compareValues(expectedValue, actualValue, errors)) {\n                            if (errors && errors.push) {\n                                errors.push('Difference in object member with key: ' + key);\n                            }\n                            return false;\n                        }\n                    }\n                }\n\n                return true;\n            default:\n                if (errors && errors.push) {\n                    errors.push('Don\\'t know how to compare object with type ' + expectedType);\n                }\n                return false;\n        }\n    }\n\n    function traceResponse(test, xhr) {\n        if (xhr) {\n            test.addLog('Response info:');\n            test.addLog('  Status code: ' + xhr.status);\n\n            if (xhr.getAllResponseHeaders) {\n                test.addLog('  Headers: ' + xhr.getAllResponseHeaders());\n            }\n\n            test.addLog('  Body: ' + xhr.responseText);\n        } else {\n            test.addLog('No XMLHttpRequest information');\n        }\n    }\n\n    function createSeparatorTest(testName) {\n        /// <summary>\n        /// Creates a test which doesn't do anything, used only to separate groups of tests\n        /// </summary>\n        /// <param name=\"name\">The test name.</param>\n        /// <returns>A test which always passes without doing anything.</returns>\n        return new zumo.Test(testName, function (test, done) {\n            done(true);\n        });\n    }\n\n    function dateToString(date) {\n        /// <param name=\"date\" type=\"Date\">The date to convert to string</param>\n\n        function padLeft0(number, size) {\n            number = number.toString();\n            while (number.length < size) number = '0' + number;\n            return number;\n        }\n\n        date = date || new Date(Date.UTC(1900, 0, 1, 0, 0, 0, 0));\n\n        var result =\n            padLeft0(date.getUTCFullYear(), 4) + '-' +\n            padLeft0(date.getUTCMonth() + 1, 2) + '-' +\n            padLeft0(date.getUTCDate(), 2) + ' ' +\n            padLeft0(date.getUTCHours(), 2) + ':' +\n            padLeft0(date.getUTCMinutes(), 2) + ':' +\n            padLeft0(date.getUTCSeconds(), 2) + '.' +\n            padLeft0(date.getUTCMilliseconds(), 3);\n\n        return result;\n    }\n\n    function randomDate() {\n        var year = Math.floor(Math.random() * 9999) + 1;\n        var month = Math.floor(Math.random() * 12);\n        var day = Math.floor(Math.random() * 31);\n        var hour = Math.floor(Math.random() * 24);\n        var minute = Math.floor(Math.random() * 60);\n        var second = Math.floor(Math.random() * 60);\n        var milliseconds = Math.floor(Math.random() * 100);\n        return new Date(Date.UTC(year, month, day, hour, minute, second, milliseconds));\n    }\n\n    return {\n        testGroups: testGroups,\n        currentGroup: currentGroup,\n        getClient: getClient,\n        getIEBrowserVersion: getIEBrowserVersion,\n        initializeClient: initializeClient,\n        TSPassed: TSPassed,\n        TSFailed: TSFailed,\n        TSNotRun: TSNotRun,\n        TSRunning: TSRunning,\n        TSSkipped: TSSkipped,\n        AllTestsGroupName: AllTestsGroupName,\n        AllTestsUnattendedGroupName: AllTestsUnattendedGroupName,\n        constants: {\n            CLIENT_VERSION_KEY: ClientVersionKey,\n            SERVER_VERSION_KEY: ServerVersionKey,\n            RUNTIME_FEATURES_KEY: RuntimeFeaturesKey\n        },\n        runtimeFeatureNames: {\n            INT_ID_TABLES: 'intIdTables',\n            STRING_ID_TABLES: 'stringIdTables',\n            NH_PUSH_ENABLED: 'nhPushEnabled'\n        },\n        Test: ZumoTest,\n        Group: ZumoTestGroup,\n        tests: {},\n        util: {\n            createSeparatorTest: createSeparatorTest,\n            compare: compareValues,\n            traceResponse: traceResponse,\n            dateToString: dateToString,\n            randomDate: randomDate,\n            globalTestParams: {}\n        }\n    };\n}\n\nvar zumo = createZumoNamespace();\n"
  },
  {
    "path": "test/JavaScript/TestFramework/js/testFrameworkConnections.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"platformSpecificFunctions.js\" />\n/// <reference path=\"testFramework.js\" />\n\nif (!testPlatform.IsHTMLApplication) { // Call UpdateTestListHeight() if WinJS application is running\n    function updateTestListHeight() {\n        var tableScroll = document.getElementById('table-scroll');\n        var tableHead = document.getElementById('tblTestsHead');\n        var tableHeight = document.getElementById('testGroupsTableCell').getBoundingClientRect().height;\n        var padding = 30;\n        var headerHeight = tableHead.getBoundingClientRect().height;\n        var bodyHeight = tableHeight - headerHeight - padding;\n        tableScroll.style.height = bodyHeight + \"px\";\n    }\n    updateTestListHeight();\n}\n\nfunction setDefaultButtonEventHandler() {\n    var buttons = document.getElementsByTagName('button');\n    for (var i = 0; i < buttons.length; i++) {\n        var btn = buttons[i];\n        btn.onclick = function (evt) {\n            var name = evt.target.innerText;\n            testPlatform.alert('Operation ' + name + ' not implemented');\n        }\n    }\n}\n\nsetDefaultButtonEventHandler();\n\nfunction saveLastUsedAppInfo() {\n    var lastAppUrl = document.getElementById('txtAppUrl').value;\n    var lastAppKey = document.getElementById('txtAppKey').value;\n    var lastUploadUrl = document.getElementById('txtSendLogsUrl').value;\n\n    testPlatform.saveAppInfo(lastAppUrl, lastAppKey, lastUploadUrl);\n\n}\n\nfunction getTestDisplayColor(test) {\n    if (test.status === zumo.TSFailed) {\n        return 'Red';\n    } else if (test.status == zumo.TSPassed) {\n        return 'Lime';\n    } else if (test.status == zumo.TSRunning) {\n        return 'Gray';\n    } else if (test.status == zumo.TSSkipped) {\n        return 'Blue';\n    } else {\n        return 'White';\n    }\n}\n\ndocument.getElementById('btnRunTests').onclick = function (evt) {\n    if (zumo.currentGroup < 0) {\n        testPlatform.alert('Please select a test group to run');\n        return;\n    }\n\n    var currentGroup = zumo.testGroups[zumo.currentGroup];\n    var appUrl = document.getElementById('txtAppUrl').value;\n    var appKey = document.getElementById('txtAppKey').value;\n    var uploadUrl = document.getElementById('txtSendLogsUrl').value.trim();\n\n    if (zumo.initializeClient(appUrl, appKey)) {\n\n        saveLastUsedAppInfo();\n\n        var groupDone = function (testsPassed, testsFailed) {\n            var logs = 'Test group finished';\n            logs = logs + '\\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\\n';\n            logs = logs + 'Tests passed: ' + testsPassed + '\\n';\n            logs = logs + 'Tests failed: ' + testsFailed;\n            if (currentGroup.name.indexOf(zumo.AllTestsGroupName) === 0 && uploadUrl !== '') {\n                // For all tests, upload logs automatically if URL is set\n                var testLogs = currentGroup.getLogs();\n                uploadLogs(uploadUrl, testLogs, true);\n                if (testsFailed == 0) {\n                    if (currentGroup.name == zumo.AllTestsGroupName) {\n                        btnRunAllTests.textContent = \"Passed\";\n                    }\n                    else {\n                        btnRunAllUnattendedTests.textContent = \"Passed\";\n                    }\n                }\n            }\n\n            if (showAlerts) {\n                testPlatform.alert(logs);\n            }\n        }\n\n        var updateTest = function (test, index) {\n            var tblTests = document.getElementById('tblTestsBody');\n            var tr = tblTests.childNodes[index];\n            var td = tr.firstChild;\n            td.style.color = getTestDisplayColor(test);\n            td.innerText = \"\" + (index + 1) + \". \" + test.displayText();\n        }\n        var testFinished = updateTest;\n        var testStarted = updateTest;\n        currentGroup.runTests(testStarted, testFinished, groupDone);\n    }\n}\n\ndocument.getElementById('btnResetTests').onclick = function (evt) {\n    if (zumo.currentGroup < 0) {\n        testPlatform.alert('Please select a test group to reset its tests');\n        return;\n    }\n\n    var currentGroup = zumo.testGroups[zumo.currentGroup];\n    var tests = currentGroup.tests;\n    var tblTests = document.getElementById('tblTestsBody');\n    tests.forEach(function (test, index) {\n        test.reset();\n        var tr = tblTests.childNodes[index];\n        var td = tr.firstChild;\n        td.style.color = getTestDisplayColor(test);\n        td.innerText = \"\" + (index + 1) + \". \" + test.displayText();\n    });\n}\n\ndocument.getElementById('btnSendLogs').onclick = function (evt) {\n    if (zumo.currentGroup < 0) {\n        testPlatform.alert('Please select a test group to upload the logs for');\n        return;\n    }\n\n    var uploadUrl = document.getElementById('txtSendLogsUrl').value;\n    if (uploadUrl.trim() == '') {\n        testPlatform.alert('Please enter a valid upload url');\n        return;\n    }\n\n    var currentGroup = zumo.testGroups[zumo.currentGroup];\n    var logs = currentGroup.getLogs();\n    uploadLogs(uploadUrl, logs, false, function () {\n        saveLastUsedAppInfo();\n    });\n}\n\nfunction uploadLogs(url, logs, allTests, done) {\n    var xhr = new XMLHttpRequest();\n    xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n            var continuation = function () {\n                if (done) {\n                    done();\n                }\n                document.getElementById('btnSendLogs').textContent = xhr.responseText;\n                if (!testPlatform.IsHTMLApplication) {\n                    Windows.Storage.KnownFolders.picturesLibrary.createFileAsync(\"done.txt\", Windows.Storage.CreationCollisionOption.replaceExisting).then(function (file) {\n                        Windows.Storage.FileIO.writeTextAsync(file, xhr.responseText);\n                    });\n                }\n            };\n            if (showAlerts) {\n                testPlatform.alert(xhr.responseText, continuation);\n            } else {\n                continuation();\n            }\n        }\n    }\n\n    var platform = testPlatform.IsHTMLApplication ? 'htmljs' : 'winstorejs';\n    var uploadUrl = url + '?platform=' + platform;\n    if (allTests) {\n        uploadUrl = uploadUrl + '&allTests=true';\n    }\n\n    var runtimeVersion = zumo.util.globalTestParams[zumo.constants.SERVER_VERSION_KEY];\n    var clientVersion = zumo.util.globalTestParams[zumo.constants.CLIENT_VERSION_KEY];\n    if (runtimeVersion) {\n        uploadUrl = uploadUrl + '&runtimeVersion=' + runtimeVersion;\n    }\n\n    if (clientVersion) {\n        uploadUrl = uploadUrl + '&clientVersion=' + clientVersion;\n    }\n\n    xhr.open('POST', uploadUrl, true);\n    xhr.setRequestHeader('content-type', 'text/plain');\n    xhr.send(logs);\n}\n\nvar testGroups = zumo.testGroups;\n\nvar btnRunAllTests = document.getElementById('btnRunAllTests');\nvar btnRunAllUnattendedTests = document.getElementById('btnRunAllUnattendedTests');\nvar showAlerts = true;\n\nif (btnRunAllTests) btnRunAllTests.onclick = handlerForAllTestsButtons(false);\n\nif (btnRunAllUnattendedTests) btnRunAllUnattendedTests.onclick = handlerForAllTestsButtons(true);\n\nfunction handlerForAllTestsButtons(unattendedOnly) {\n    return function (evt) {\n        showAlerts = false;\n        for (var i = 0; i < testGroups.length; i++) {\n            var groupName = testGroups[i].name;\n            if (!unattendedOnly && groupName === zumo.AllTestsGroupName) {\n                testGroupSelected(i);\n                break;\n            } else if (unattendedOnly && groupName == zumo.AllTestsUnattendedGroupName) {\n                testGroupSelected(i);\n                break;\n            }\n        }\n    }\n}\n\nfunction highlightSelectedGroup(groupIndex) {\n    var testsGroupBody = document.getElementById('tblTestsGroupBody');\n    for (var i = 0; i < testsGroupBody.children.length; i++) {\n        var tr = testsGroupBody.children[i];\n        var td = tr.firstElementChild;\n        td.style.fontWeight = i == groupIndex ? 'bold' : 'normal';\n    }\n}\n\nfunction testGroupSelected(index) {\n    highlightSelectedGroup(index);\n    var group = testGroups[index];\n    zumo.currentGroup = index;\n    document.getElementById('testsTitle').innerText = 'Tests for group: ' + group.name;\n    var tblTests = document.getElementById('tblTestsBody');\n    for (var i = tblTests.childElementCount - 1; i >= 0; i--) {\n        tblTests.removeChild(tblTests.children[i]);\n    }\n\n    function viewTestLogs(groupIndex, testIndex) {\n        var test = zumo.testGroups[groupIndex].tests[testIndex];\n        var logs = test.getLogs();\n        testPlatform.alert(logs);\n    }\n\n    group.tests.forEach(function (test, index) {\n        var tr = document.createElement('tr');\n        var td = document.createElement('td');\n        td.innerText = \"\" + (index + 1) + \". \" + test.displayText();\n        tr.appendChild(td);\n        td.style.color = getTestDisplayColor(test);\n        td.ondblclick = function () {\n            viewTestLogs(zumo.currentGroup, index);\n        }\n        tblTests.appendChild(tr);\n    });\n\n    if (group.name === zumo.AllTestsGroupName || group.name === zumo.AllTestsUnattendedGroupName) {\n        document.getElementById('btnRunTests').click();\n    }\n}\n\nfunction addAttribute(element, name, value) {\n    var attr = document.createAttribute(name);\n    attr.value = value.toString();\n    element.attributes.setNamedItem(attr);\n}\n\nfunction addTestGroups() {\n    var tblTestsGroup = document.getElementById('tblTestsGroupBody');\n\n    for (var index = 0; index < testGroups.length; index++) {\n        var item = testGroups[index];\n        var name = \"\" + (index + 1) + \". \" + item.name + \" tests\";\n        var tr = document.createElement('tr');\n        var td = document.createElement('td');\n        tr.appendChild(td);\n        var a = document.createElement('a');\n        td.appendChild(a);\n        addAttribute(a, 'href', '#');\n        addAttribute(a, 'class', 'testGroupItem');\n\n        var attachEvent = function (a, index) {\n            if (a.attachEvent) {\n\n                a.attachEvent('onclick', function () {\n                    testGroupSelected(index);\n                });\n                a.innerText = toStaticHTML(name);\n            }\n            else {\n                a.addEventListener('click', function () {\n                    testGroupSelected(index);\n                }, false);\n                a.textContent = name;\n            }\n        }\n\n        attachEvent(a, index);\n\n        tblTestsGroup.appendChild(tr);\n    }\n\n}\n\naddTestGroups();\n"
  },
  {
    "path": "test/JavaScript/TestFramework/js/tests/allTests.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"../testFramework.js\" />\n/// <reference path=\"roundTripTests.js\" />\n/// <reference path=\"queryTests.js\" />\n/// <reference path=\"updateDeleteTests.js\" />\n/// <reference path=\"loginTests.js\" />\n/// <reference path=\"miscTests.js\" />\n/// <reference path=\"pushTests.js\" />\n/// <reference path=\"apiTests.js\" />\n/// <reference path=\"../../../ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/MobileServices.js\" />\n\n(function () {\n    var setupGroup = new zumo.Group('Tests setup', [\n        new zumo.Test('Identify enabled runtime features', function (test, done) {\n            var client = zumo.getClient();\n            client.invokeApi('runtimeInfo', {\n                method: 'GET'\n            }).done(function (response) {\n                var runtimeInfo = response.result;\n                test.addLog('Runtime features: ', runtimeInfo);\n                var features = runtimeInfo.features;\n                zumo.util.globalTestParams[zumo.constants.RUNTIME_FEATURES_KEY] = features;\n                done(true);\n            }, function (err) {\n                test.addLog('Error retrieving runtime info: ', err);\n                done(false);\n            });\n        })\n    ]);\n    zumo.testGroups.push(setupGroup);\n\n    zumo.testGroups.push(new zumo.Group(zumo.tests.roundTrip.name, zumo.tests.roundTrip.tests));\n    zumo.testGroups.push(new zumo.Group(zumo.tests.query.name, zumo.tests.query.tests));\n    //Add addistional Win JS scenario if user run WinJS application\n    if (!testPlatform.IsHTMLApplication) {\n        zumo.testGroups.push(new zumo.Group(zumo.tests.query.name + ' (server side)', zumo.tests.query.serverSideTests));\n    }\n    zumo.testGroups.push(new zumo.Group(zumo.tests.updateDelete.name, zumo.tests.updateDelete.tests));\n    zumo.testGroups.push(new zumo.Group(zumo.tests.login.name, zumo.tests.login.tests));\n    zumo.testGroups.push(new zumo.Group(zumo.tests.misc.name, zumo.tests.misc.tests));\n    if (!testPlatform.IsHTMLApplication) {\n        zumo.testGroups.push(new zumo.Group(zumo.tests.push.name, zumo.tests.push.tests));\n    }\n\n    zumo.testGroups.push(new zumo.Group(zumo.tests.api.name, zumo.tests.api.tests));\n\n    var allTests = [];\n    var allUnattendedTests = [];\n    for (var i = 0; i < zumo.testGroups.length; i++) {\n        var group = zumo.testGroups[i];\n        var startGroupTest = zumo.util.createSeparatorTest('Start of group: ' + group.name);\n        allTests.push(startGroupTest);\n        allUnattendedTests.push(startGroupTest);\n        for (var j = 0; j < group.tests.length; j++) {\n            var test = group.tests[j];\n            allTests.push(test);\n            if (test.canRunUnattended) {\n                allUnattendedTests.push(test);\n            }\n        }\n        var endGroupTest = zumo.util.createSeparatorTest('------------------');\n        allTests.push(endGroupTest);\n        allUnattendedTests.push(endGroupTest);\n    }\n\n    zumo.testGroups.push(new zumo.Group(zumo.AllTestsUnattendedGroupName, allUnattendedTests));\n    zumo.testGroups.push(new zumo.Group(zumo.AllTestsGroupName, allTests));\n})();\n"
  },
  {
    "path": "test/JavaScript/TestFramework/js/tests/apiTests.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"../../../ZumoE2ETestAppJs/ZumoE2ETestAppHTML/js/platformSpecificFunctions.js\" />\n/// <reference path=\"../../../ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/MobileServices.js\" />\n/// <reference path=\"../testFramework.js\" />\n\nfunction defineApiTestsNamespace() {\n    var tests = [];\n    var i;\n    var publicApiName = 'public';\n    var applicationApiName = 'application';\n    var userApiName = 'user';\n    var adminApiName = 'admin';\n\n    var dataTypeJson = 'json';\n    var dataTypeXml = 'xml';\n    var dataTypeOther = 'other';\n\n    tests.push(createCustomApiTest('Simple object - POST', applicationApiName, 'POST', { name: 'value' }, null, null, 200));\n    tests.push(createCustomApiTest('Simple call - GET', applicationApiName, 'GET', null, null, { param: 'value' }));\n    tests.push(createCustomApiTest('Simple object - PUT', applicationApiName, 'PUT', { array: [1, true, 'str'] }, null, { method: 'PUT' }));\n    tests.push(createCustomApiTest('Simple object - PATCH', applicationApiName, 'PATCH', { array: [1, true, 'str'] }, null, { method: 'PATCH' }));\n    tests.push(createCustomApiTest('Simple call - DELETE', applicationApiName, 'DELETE', null, null, { method: 'DELETE' }));\n\n    tests.push(createCustomApiTest('POST - array body', applicationApiName, 'POST', [1, false, 2], null, null, 200));\n    tests.push(createCustomApiTest('POST - empty array body', applicationApiName, 'POST', [], null, null, 200));\n    tests.push(createCustomApiTest('POST - empty object body', applicationApiName, 'POST', {}, null, null, 200));\n\n    tests.push(createCustomApiTest('GET - custom headers', applicationApiName, 'GET', null, { 'x-test-zumo-first': 'header value' }));\n    tests.push(createCustomApiTest('PATCH - query parameters', applicationApiName, 'PATCH', [1, 2, 3], null, { x: '6', y: '7' }));\n    tests.push(createCustomApiTest('PUT - non-ASCII query parameters', applicationApiName, 'PUT', [1, 2, 3], null, { latin: 'Łåţıñ', arabic: 'الكتاب على الطاولة' }));\n\n    tests.push(createCustomApiTest('GET - 500 response', applicationApiName, 'GET', null, { 'x-test-zumo-1': 'header value' }, { x: '4' }, 500));\n    tests.push(createCustomApiTest('POST - 400 response', applicationApiName, 'POST', { a: { b: [] } }, { 'x-test-zumo-1': 'header value' }, { x: '6' }, 400));\n    tests.push(createCustomApiTest('DELETE - 201 response', applicationApiName, 'DELETE', null, { 'x-test-zumo-1': 'header value' }, { x: '9' }, 201));\n\n    tests.push(createCustomApiTest('POST - JSON input, XML output', applicationApiName, 'POST', [{ number: 1, word: 'one' }], null, null, 200, dataTypeXml));\n    tests.push(createCustomApiTest('PUT - XML input, text output', applicationApiName, 'PUT', '<text id=\"1\">hello world</text>', { 'Content-Type': 'text/xml' }, null, 200, dataTypeOther));\n    tests.push(createCustomApiTest('PATCH - text input, JSON output', applicationApiName, 'PATCH', 'This is a text input', { 'Content-Type': 'text/plain' }, null, 200, dataTypeJson));\n    tests.push(createCustomApiTest('PUT - JSON input, XML output, custom headers', applicationApiName, 'PUT', [1], { 'x-test-zumo-1': 'header value' }, null, 200, dataTypeXml));\n    tests.push(createCustomApiTest('POST - XML input, text output, custom query parameters', applicationApiName, 'PUT', '<hello>world</hello>', { 'content-type': 'text/xml' }, { name: 'value' }, 200, dataTypeOther));\n    tests.push(createCustomApiTest('GET - XML output, 500 response', applicationApiName, 'GET', null, null, { name: 'value' }, 500, dataTypeXml));\n    tests.push(createCustomApiTest('DELETE - Text output, 400 response', applicationApiName, 'DELETE', null, null, null, 400, dataTypeOther));\n\n    return {\n        name: 'Custom API',\n        tests: tests\n    };\n\n    function createCustomApiTest(testName, apiName, httpMethod, body, headers, query, status, outputFormat) {\n        /// <summary>\n        /// Creates a custom API test\n        /// </summary>\n        /// <param name=\"testName\" type=\"String\" optional=\"false\">Name of the test to be created</param>\n        /// <param name=\"apiName\" type=\"String\" optional=\"false\">Name of the API to be called</param>\n        /// <param name=\"httpMethod\" type=\"String\" optional=\"false\">Name of the test to be created</param>\n        /// <param name=\"body\" optional=\"false\">Body of the request. Can be null for requests with no body.</param>\n        /// <param name=\"headers\" type=\"Object\" optional=\"false\">HTTP headers. Can be null. For non-JSON input,\n        ///       the 'Content-Type' header must be specified.</param>\n        /// <param name=\"query\" type=\"Object\" optional=\"false\">Additional query string name/value pairs to\n        ///       be sent on the API call.</param>\n        /// <param name=\"status\" type=\"Number\" optional=\"true\">Value to be passed to the 'status' query\n        ///       parameter, which will cause the response to have that status code. Default = 200.</param>\n        /// <param name=\"outputFormat\" type=\"Number\" optional=\"true\">Value of the to be passed to the 'format' query\n        ///       parameter, which will cause the response to have that format. Default = 'json'.</param>\n        var queryParameters = {};\n        query = query || {};\n        headers = headers || {};\n        status = status || 200;\n\n        for (var key in query) {\n            if (query.hasOwnProperty(key)) {\n                queryParameters[key] = query[key];\n            }\n        }\n        if (status && status !== 200) {\n            queryParameters.status = status;\n        }\n        if (outputFormat) {\n            queryParameters.format = outputFormat;\n        }\n        \n        return new zumo.Test(testName, function (test, done) {\n            var client = zumo.getClient();\n            var options = { method: httpMethod };\n            if (queryParameters) {\n                options.parameters = queryParameters;\n            }\n            if (body) {\n                options.body = body;\n            }\n            if (headers) {\n                options.headers = headers;\n            }\n\n            var expectedResultBody = { method: httpMethod };\n            if (client.currentUser) {\n                expectedResultBody.user = { level: 'authenticated', userId: client.currentUser.userId };\n            } else {\n                expectedResultBody.user = { level: 'anonymous' };\n            }\n            if (query && !isEmptyObject(query)) {\n                expectedResultBody.query = query;\n            }\n            if (body) {\n                expectedResultBody.body = body;\n            }\n\n            client.invokeApi(apiName, options).done(function (response) {\n                var xhr = response;\n                if (!validateStatus(test, xhr, status) ||\n                    !validateHeaders(test, headers, xhr) ||\n                    !validateBody(test, response.result, xhr, expectedResultBody, outputFormat)) {\n                    done(false);\n                    return;\n                }\n\n                test.addLog('  - All validations succeeded');\n                done(true);\n            }, function (error) {\n                var xhr = error.request;\n                if (!validateStatus(test, xhr, status) ||\n                    !validateHeaders(test, headers, xhr) ||\n                    !validateBody(test, null, xhr, expectedResultBody, outputFormat)) {\n                    done(false);\n                    return;\n                }\n\n                test.addLog('  - All validations succeeded');\n                done(true);\n            });\n\n            function objToXml(obj) {\n                return '<root>' + jsToXml(obj) + '</root>';\n            }\n\n            function jsToXml(value) {\n                if (value === null) return 'null';\n                var type = typeof value;\n                var result = '';\n                var i = 0;\n                switch (type.toLowerCase()) {\n                    case 'string':\n                    case 'boolean':\n                    case 'number':\n                        return value.toString();\n                    case 'function':\n                    case 'object':\n                        if (Object.prototype.toString.call(value) === '[object Array]') {\n                            result = result + '<array>';\n                            for (i = 0; i < value.length; i++) {\n                                result = result + '<item>' + jsToXml(value[i]) + '</item>';\n                            }\n                            result = result + '</array>';\n                        } else {\n                            var k;\n                            var keys = [];\n                            for (k in value) {\n                                if (value.hasOwnProperty(k)) {\n                                    if (typeof value[k] !== 'function') {\n                                        keys.push(k);\n                                    }\n                                }\n                            }\n                            keys.sort();\n                            for (i = 0; i < keys.length; i++) {\n                                k = keys[i];\n                                result = result + '<' + k + '>' + jsToXml(value[k]) + '</' + k + '>';\n                            }\n                        }\n                }\n                return result;\n            }\n\n            function validateBody(test, resultObject, xhr, expectedBodyObject, outputFormat) {\n                outputFormat = outputFormat || dataTypeJson;\n                var responseText = xhr.responseText;\n                if (outputFormat === dataTypeXml) {\n                    var expectedBodyString = objToXml(expectedBodyObject);\n                    if (expectedBodyString !== responseText) {\n                        test.addLog('Error comparing response. Expected: ', expectedBodyString, '; actual: ', responseText);\n                        return false;\n                    }                    \n                } else {\n                    if (outputFormat == dataTypeOther) {\n                        test.addLog('Unescaping response. Original: ', responseText);\n                        responseText = responseText.replace(/__\\[__/g, '[')\n                                                   .replace(/__\\]__/g, ']')\n                                                   .replace(/__\\{__/g, '{')\n                                                   .replace(/__\\}__/g, '}');\n                        test.addLog('Unescaped: ', responseText);\n                    }\n\n                    resultObject = resultObject || JSON.parse(responseText);\n\n                    var errors = [];\n                    if (!zumo.util.compare(expectedBodyObject, resultObject, errors)) {\n                        test.addLog('Error comparing objects:');\n                        for (var i = 0; i < errors.length; i++) {\n                            test.addLog('  ', errors[i]);\n                        }\n\n                        return false;\n                    }\n                }\n\n                test.addLog('  - Received expected response body');\n                return true;\n            }\n\n            function validateStatus(test, xhr, expectedStatus) {\n                expectedStatus = expectedStatus || 200;\n                if (xhr.status !== expectedStatus) {\n                    test.addLog('Error, expected ', expectedStatus, ' received ', xhr.status);\n                    traceFullResponse(test, xhr);\n                    return false;\n                } else {\n                    test.addLog('  - Received expected status code');\n                    return true;\n                }\n            }\n\n            function validateHeaders(test, requestHeaders, xhr) {\n                test.addLog('are we running in pure HTML?', testPlatform.IsHTMLApplication);\n                if (testPlatform.IsHTMLApplication) {\n                    test.addLog('XMLHttpRequest does not expose custom response headers; skipping this verification');\n                    return true;\n                }\n\n                if (requestHeaders) {\n                    for (var headerName in requestHeaders) {\n                        if (requestHeaders.hasOwnProperty(headerName) && headerName.indexOf('x-test-zumo-') === 0) {\n                            var headerValue = requestHeaders[headerName];\n                            var responseHeader = xhr.getResponseHeader(headerName);\n                            if (headerValue !== responseHeader) {\n                                test.addLog('Error validating header ', headerName, '. Expected: ', headerValue, ', received: ', responseHeader);\n                                traceFullResponse(test, xhr);\n                                return false;\n                            }\n                        }\n                    }\n\n                    test.addLog('  - Validated response headers');\n                }\n\n                return true;\n            }\n\n            function traceFullResponse(test, xhr) {\n                test.addLog('Response status: ', xhr.status);\n                test.addLog('Response headers: ', xhr.getAllResponseHeaders());\n                test.addLog('Response body: ', xhr.responseText);\n            }\n\n            function isEmptyObject(obj) {\n                for (var key in obj) {\n                    if (obj.hasOwnProperty(key)) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n        });\n    }\n}\n\nzumo.tests.api = defineApiTestsNamespace();\n"
  },
  {
    "path": "test/JavaScript/TestFramework/js/tests/loginTests.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"../../../ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/MobileServices.js\" />\n/// <reference path=\"/LiveSDKHTML/js/wl.js\" />\n/// <reference path=\"../testFramework.js\" />\n\nfunction defineLoginTestsNamespace() {\n    var tests = [];\n    var i;\n    var TABLE_PERMISSION_PUBLIC = 1;\n    var TABLE_PERMISSION_APPLICATION = 2;\n    var TABLE_PERMISSION_USER = 3;\n    var TABLE_PERMISSION_ADMIN = 4;\n    var TABLE_NAME_PUBLIC = 'public';\n    var TABLE_NAME_APPLICATION = 'application';\n    var TABLE_NAME_AUTHENTICATED = 'authenticated';\n    var TABLE_NAME_ADMIN = 'admin';\n\n    var tables = [\n        { name: TABLE_NAME_PUBLIC, permission: TABLE_PERMISSION_PUBLIC },\n        { name: TABLE_NAME_APPLICATION, permission: TABLE_PERMISSION_APPLICATION },\n        { name: TABLE_NAME_AUTHENTICATED, permission: TABLE_PERMISSION_USER },\n        { name: TABLE_NAME_ADMIN, permission: TABLE_PERMISSION_ADMIN }];\n\n    var supportRecycledToken = {\n        facebook: true,\n        google: false, // Known bug - Drop login via Google token until Google client flow is reintroduced\n        twitter: false,\n        microsoftaccount: false\n    };\n\n    tests.push(createLogoutTest());\n\n    var index, table;\n    for (index = 0; index < tables.length; index++) {\n        table = tables[index];\n        tests.push(createCRUDTest(table.name, null, table.permission, false));\n    }\n\n    var indexOfTestsWithAuthentication = tests.length;\n\n    var lastUserIdentityObject = null;\n\n    var providers = ['facebook', 'google', 'twitter', 'microsoftaccount'];\n    for (i = 0; i < providers.length; i++) {\n        var provider = providers[i];\n        tests.push(createLogoutTest());\n        tests.push(createLoginTest(provider));\n\n        for (index = 0; index < tables.length; index++) {\n            table = tables[index];\n            if (table.permission !== TABLE_PERMISSION_PUBLIC) {\n                tests.push(createCRUDTest(table.name, provider, table.permission, true));\n            }\n        }\n\n        if (supportRecycledToken[provider]) {\n            tests.push(createLogoutTest());\n            tests.push(createClientSideLoginTest(provider));\n            tests.push(createCRUDTest(TABLE_NAME_AUTHENTICATED, provider, TABLE_PERMISSION_USER, true));\n        }\n    }\n\n    if (!testPlatform.IsHTMLApplication) {\n        //In Browser, default is single signon and LIVE SDK is not supported\n        tests.push(createLogoutTest());\n        tests.push(createLiveSDKLoginTest());\n        tests.push(createCRUDTest(TABLE_NAME_AUTHENTICATED, 'microsoftaccount', TABLE_PERMISSION_USER, true));\n\n        providers.forEach(function (provider) {\n            if (provider === 'microsoftaccount') {\n                // Known issue - SSO for MS account does not work in application which also uses the Live SDK\n            } else {\n                tests.push(createLogoutTest());\n                tests.push(createLoginTest(provider, true));\n                tests.push(createCRUDTest(TABLE_NAME_AUTHENTICATED, provider, TABLE_PERMISSION_USER, true));\n            }\n        });\n    }\n\n    for (var i = indexOfTestsWithAuthentication; i < tests.length; i++) {\n        tests[i].canRunUnattended = false;\n    }\n\n    function createLiveSDKLoginTest() {\n        var liveSDKInitialized = false;\n        return new zumo.Test('Login via token with the Live SDK', function (test, done) {\n            /// <param name=\"test\" type=\"zumo.Test\">The test associated with this execution.</param>\n            var client = zumo.getClient();\n            if (!liveSDKInitialized) {\n                WL.init({ redirect_uri: client.applicationUrl });\n                liveSDKInitialized = true;\n                test.addLog('Initialized the WL object');\n            }\n            WL.login({ scope: 'wl.basic' }).then(function (wlLoginResult) {\n                test.addLog('Logged in via Live SDK: ', wlLoginResult);\n                WL.api({ path: 'me', method: 'GET' }).then(function (wlMeResult) {\n                    test.addLog('My information: ', wlMeResult);\n                    var token = { authenticationToken: wlLoginResult.session.authentication_token };\n                    client.login('microsoftaccount', token).done(function (user) {\n                        test.addLog('Logged in as ', user);\n                        done(true);\n                    }, function (err) {\n                        test.addLog('Error logging into the mobile service: ', err);\n                        done(false);\n                    });\n                }, function (err) {\n                    test.addLog('Error calling WL.api: ', err);\n                    done(false);\n                });\n            }, function (err) {\n                test.addLog('Error logging in via Live SDK: ', err);\n                done(false);\n            });\n        });\n    }\n\n    function createClientSideLoginTest(provider) {\n        /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">The name of the authentication provider for\n        ///            the client. Currently only 'facebook' and 'google' are supported for this test.</param>\n        return new zumo.Test('Login via token for ' + provider, function (test, done) {\n            /// <param name=\"test\" type=\"zumo.Test\">The test associated with this execution.</param>\n            var client = zumo.getClient();\n            var lastIdentity = lastUserIdentityObject;\n            if (!lastIdentity) {\n                test.addLog('Last identity object is null. Cannot run this test.');\n                done(false);\n            } else {\n                var token = {};\n                if (provider === 'facebook' || provider === 'google') {\n                    token.access_token = lastIdentity[provider].accessToken;\n                    client.login(provider, token).done(function (user) {\n                        test.addLog('Logged in as ', user);\n                        done(true);\n                    }, function (err) {\n                        test.addLog('Error on login: ', err);\n                        done(false);\n                    });\n                } else {\n                    test.addLog('Client-side login for ' + provider + ' is not implemented or not supported.');\n                    done(false);\n                }\n            }\n        });\n    }\n\n    function createCRUDTest(tableName, provider, tablePermission, userIsAuthenticated) {\n        /// <param name=\"tableName\" type=\"String\">The name of the table to attempt the CRUD operations for.</param>\n        /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">The name of the authentication provider for\n        ///            the client.</param>\n        /// <param name=\"tablePermission\" type=\"Number\" mayBeNull=\"false\">The permission required to access the\n        ///            table. One of the constants defined in the scope.</param>\n        /// <param name=\"userIsAuthenticated\" type=\"Boolean\" mayBeNull=\"false\">The name of the table to attempt\n        ///            the CRUD operations for.</param>\n        /// <return type=\"zumo.Test\"/>\n        var testName = 'CRUD, ' + (userIsAuthenticated ? ('auth by ' + provider) : 'unauthenticated');\n        testName = testName + ', table with ';\n        testName = testName + ['public', 'application', 'user', 'admin'][tablePermission - 1];\n        testName = testName + ' permission.';\n        return new zumo.Test(testName, function (test, done) {\n            /// <param name=\"test\" type=\"zumo.Test\">The test associated with this execution.</param>\n            var crudShouldWork = tablePermission === TABLE_PERMISSION_PUBLIC ||\n                tablePermission === TABLE_PERMISSION_APPLICATION ||\n                (tablePermission === TABLE_PERMISSION_USER && userIsAuthenticated);\n            var client = zumo.getClient();\n            var table = client.getTable(tableName);\n            var currentUser = client.currentUser;\n            var item = { name: 'hello' };\n            var insertedItem;\n\n            var validateCRUDResult = function (operation, error) {\n                var result = false;\n                if (crudShouldWork) {\n                    if (error) {\n                        test.addLog(operation + ' should have succeeded, but got error: ', error);\n                    } else {\n                        test.addLog(operation + ' succeeded as expected.');\n                        result = true;\n                    }\n                } else {\n                    if (error) {\n                        var xhr = error.request;\n                        if (xhr) {\n                            var isInternetExplorer10 = testPlatform.IsHTMLApplication && window.ActiveXObject && window.navigator.userAgent.toLowerCase().match(/msie ([\\d.]+)/)[1] == \"10.0\";\n                            // IE 10 has a bug in which it doesn't set the status code correctly - https://connect.microsoft.com/IE/feedback/details/785990\n                            // so we cannot validate the status code if this is the case.\n                            if (isInternetExplorer10) {\n                                result = true;\n                            } else {\n                                if (xhr.status == 401) {\n                                    test.addLog('Got expected response code (401) for ', operation);\n                                    result = true;\n                                } else {\n                                    zumo.util.traceResponse(test, xhr);\n                                    test.addLog('Error, incorrect response.');\n                                }\n                            }\n                        } else {\n                            test.addLog('Error, error object does not have a \\'request\\' (for the XMLHttpRequest object) property.');\n                        }\n                    } else {\n                        test.addLog(operation + ' should not have succeeded, but the success callback was called.');\n                    }\n                }\n\n                if (!result) {\n                    done(false);\n                }\n\n                return result;\n            }\n\n            // The last of the callbacks, which will call 'done(true);' if validation succeeds.\n            // called by readCallback\n            function deleteCallback(error) {\n                if (validateCRUDResult('delete', error)) {\n                    test.addLog('Validation succeeded for all operations');\n                    done(true);\n                }\n            }\n\n            // called by updateCallback\n            function readCallback(error) {\n                if (validateCRUDResult('read', error)) {\n                    //table.del({ id: insertedItem.id || 1 }).done(function () { deleteCallback(); }, function (err) { deleteCallback(err); });\n                    table.del({ id: insertedItem.id }).done(function () { deleteCallback(); }, function (err) { deleteCallback(err); });\n                }\n            }\n\n            // called by insertCallback\n            function updateCallback(error) {\n                if (validateCRUDResult('update', error)) {\n                    item.id = insertedItem.id || 1;\n                    table.where({ id: item.id }).read().done(function (items) {\n                        test.addLog('Read items: ', items);\n                        if (items.length !== 1) {\n                            test.addLog('Error, query should have returned exactly one item');\n                            done(false);\n                        } else {\n                            var retrievedItem = items[0];\n                            var usersFeatureEnabled = retrievedItem.UsersEnabled;\n                            if (retrievedItem.Identities) {\n                                lastUserIdentityObject = JSON.parse(items[0].Identities);\n                                test.addLog('Identities object: ', lastUserIdentityObject);\n                                var providerName = provider;\n                                if (providerName.toLowerCase() === 'microsoftaccount') {\n                                    providerName = 'microsoft';\n                                }\n                                var providerIdentity = lastUserIdentityObject[providerName];\n                                if (!providerIdentity) {\n                                    test.addLog('Error, cannot fetch the identity for provider ', providerName);\n                                    done(false);\n                                    return;\n                                }\n                                if (usersFeatureEnabled) {\n                                    var userName = providerIdentity.name || providerIdentity.screen_name;\n                                    if (userName) {\n                                        test.addLog('Found user name: ', userName);\n                                    } else {\n                                        test.addLog('Could not find user name!');\n                                        done(false);\n                                        return;\n                                    }\n                                }\n                            }\n                            readCallback();\n                        }\n                    }, function (err) {\n                        readCallback(err);\n                    });\n                }\n            }\n\n            // called by the callback for insert.\n            function insertCallback(error) {\n                if (validateCRUDResult('insert', error)) {\n                    if (tablePermission === TABLE_PERMISSION_PUBLIC) {\n                        // No need for app key anymore\n                        client = new WindowsAzure.MobileServiceClient(client.applicationUrl);\n                        table = client.getTable(tableName);\n                    }\n                    item.id = insertedItem.id || 1;\n                    item.text = 'world';\n                    table.update(item).done(function (newItem) {\n                        test.addLog('Updated item: ', newItem);\n                        updateCallback();\n                    }, function (err) {\n                        updateCallback(err);\n                    });\n                }\n            }\n\n            table.insert(item).done(function (newItem) {\n                insertedItem = newItem;\n                test.addLog('Inserted item: ', newItem);\n                if (tablePermission === TABLE_PERMISSION_USER) {\n                    var currentUser = client.currentUser.userId;\n                    if (currentUser === newItem.userId) {\n                        test.addLog('User id correctly added by the server script');\n                    } else {\n                        test.addLog('Error, user id not set by the server script');\n                        done(false);\n                        return;\n                    }\n                }\n                insertCallback();\n            }, function (err) {\n                insertedItem = item;\n                insertedItem.id = item.id || 1;\n                insertCallback(err);\n            });\n        });\n    }\n\n    function createLoginTest(provider, useSingleSignOn) {\n        /// <param name=\"provider\" type=\"String\">The authentication provider to use.</param>\n        /// <param name=\"useSingleSignOn\" type=\"Boolean\">Whether to use the single sign-on parameter for login.</param>\n        /// <return type=\"zumo.Test\" />\n        return new zumo.Test('Login with ' + provider + (useSingleSignOn ? ' (using single sign-on)' : ''), function (test, done) {\n            /// <param name=\"test\" type=\"zumo.Test\">The test associated with this execution.</param>\n            var client = zumo.getClient();\n            var successFunction = function (user) {\n                test.addLog('Logged in: ', user);\n                done(true);\n            };\n            var errorFunction = function (err) {\n                test.addLog('Error during login: ', err);\n                done(false);\n            };\n            if (useSingleSignOn) {\n                client.login(provider, true).done(successFunction, errorFunction);\n            } else {\n                client.login(provider).done(successFunction, errorFunction);\n            }\n        });\n    }\n\n    function createLogoutTest() {\n        return new zumo.Test('Log out', function (test, done) {\n            var client = zumo.getClient();\n            client.logout();\n            test.addLog('Logged out');\n            done(true);\n        });\n    }\n\n    return {\n        name: 'Login',\n        tests: tests\n    };\n}\n\nzumo.tests.login = defineLoginTestsNamespace();\n"
  },
  {
    "path": "test/JavaScript/TestFramework/js/tests/miscTests.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"../../../ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/MobileServices.js\" />\n/// <reference path=\"../testFramework.js\" />\n\nfunction defineMiscTestsNamespace() {\n    var tests = [];\n    var i;\n    var roundTripTableName = 'w8jsRoundTripTable';\n    var paramsTableName = 'ParamsTestTable';\n    var stringIdTableName = 'stringIdRoundTripTable';\n\n    tests.push(new zumo.Test('Filter does not modify client', function (test, done) {\n        var client = zumo.getClient();\n        var filtered = client.withFilter(function (request, next, callback) {\n            throw \"This is an error\";\n        });\n        var table = client.getTable(stringIdTableName);\n        table.take(1).read().done(function (items) {\n            test.addLog('Retrieved data successfully: ', items);\n            done(true);\n        }, function (err) {\n            test.addLog('Unexpected error: ', err);\n            done(false);\n        });\n    }, zumo.runtimeFeatureNames.STRING_ID_TABLES));\n\n    var createLoggingFilter = function () {\n        var filter = function (request, next, callback) {\n            filter.request = request;\n            var clientVersion = request.headers['X-ZUMO-VERSION'];\n            if (clientVersion && clientVersion.length) {\n                if (clientVersion[clientVersion.length - 1] == ')') {\n                    clientVersion = clientVersion.substring(0, clientVersion.length - 1);\n                }\n\n                var equalsIndex = clientVersion.lastIndexOf('=');\n                if (equalsIndex >= 0) {\n                    clientVersion = clientVersion.substring(equalsIndex + 1);\n                    zumo.util.globalTestParams[zumo.constants.CLIENT_VERSION_KEY] = clientVersion;\n                }\n            }\n\n            next(request, function (error, response) {\n                filter.error = error;\n                filter.response = response;\n                if (!error && response && response.getResponseHeader) { // IE9 not support response.getResponseHeader\n                    var serverVersion = response.getResponseHeader('x-zumo-version');\n                    if (serverVersion) {\n                        zumo.util.globalTestParams[zumo.constants.SERVER_VERSION_KEY] = serverVersion;\n                    }\n                }\n\n                callback(error, response);\n            });\n        };\n\n        return filter;\n    }\n\n    tests.push(createFilterCaptureTest(true));\n    tests.push(createFilterCaptureTest(false));\n\n    tests.push(new zumo.Test('Filter can bypass service', function (test, done) {\n        var client = zumo.getClient();\n        var filter = function (request, next, callback) {\n            var data = JSON.parse(request.data);\n            data.id = 1;\n            callback(null, {\n                status: 201,\n                responseText: JSON.stringify(data)\n            });\n        };\n        var filtered = client.withFilter(filter);\n        var table = filtered.getTable('TableWhichDoesNotExist');\n        var item = { name: 'John Doe', age: 33 };\n        table.insert(item).done(function (inserted) {\n            var expected = { name: item.name, age: item.age, id: 1 };\n            var errors = [];\n            if (zumo.util.compare(expected, inserted, errors)) {\n                done(true);\n            } else {\n                for (var error in errors) {\n                    test.addLog(error);\n                }\n                test.addLog('Comparison error. Expected: ', expected, ', actual: ', inserted);\n                done(false);\n            }\n        }, function (err) {\n            test.addLog('Error on insert: ', err);\n            done(false);\n        });\n    }));\n\n    tests.push(new zumo.Test('Filter can send multiple requests', function (test, done) {\n        var client = zumo.getClient();\n        var numberOfRequests = 2 + Math.floor(Math.random() * 4);\n        test.addLog('Filter will send ', numberOfRequests, ' requests');\n        var filter = function (request, next, callback) {\n            var sendRequest = function (requestsSent, error, response) {\n                if (requestsSent === numberOfRequests) {\n                    test.addLog('Already sent ', numberOfRequests, ' requests, invoking the callback.');\n                    callback(error, response);\n                } else {\n                    test.addLog('Sending the request with index ', requestsSent);\n                    next(request, function (nextError, nextResponse) {\n                        sendRequest(requestsSent + 1, nextError, nextResponse);\n                    });\n                }\n            }\n\n            sendRequest(0);\n        };\n        var filtered = client.withFilter(filter);\n        var table = filtered.getTable(stringIdTableName);\n        var randomValue = Math.floor(Math.random() * 0x100000000).toString(16);\n        var item = { name: randomValue };\n        table.insert(item).done(function () {\n            table.where({ name: randomValue }).select('name').read().done(function (results) {\n                var expectedResult = [];\n                for (i = 0; i < numberOfRequests; i++) expectedResult.push({ name: randomValue });\n                var errors = [];\n                if (zumo.util.compare(expectedResult, results, errors)) {\n                    done(true);\n                } else {\n                    for (var error in errors) {\n                        test.addLog(error);\n                    }\n                    test.addLog('Comparison error. Expected: ', expectedResult, ', actual: ', results);\n                    done(false);\n                }\n            }, function (err) {\n                test.addLog('Error on read: ', err);\n                done(false);\n            });\n        }, function (err) {\n            test.addLog('Error on insert: ', err);\n            done(false);\n        });\n    }, zumo.runtimeFeatureNames.STRING_ID_TABLES));\n\n    tests.push(new zumo.Test('Passing additional parameters in CRUD operations', function (test, done) {\n        var client = zumo.getClient();\n        var table = client.getTable(paramsTableName);\n        var dict = {\n            item: 'simple',\n            empty: '',\n            spaces: 'with spaces',\n            specialChars: '`!@#$%^&*()-=[]\\\\;\\',./~_+{}|:\\\"<>?',\n            latin: 'ãéìôü ÇñÑ',\n            arabic: 'الكتاب على الطاولة',\n            chinese: '这本书在桌子上',\n            japanese: '本は机の上に',\n            hebrew: 'הספר הוא על השולחן',\n            russian: 'Книга лежит на столе',\n            'name+with special&chars': 'should just work'\n        };\n\n        var handleError = function (operation) {\n            return function (err) {\n                test.addLog('Error for ', operation, ': ', err);\n                done(false);\n            }\n        };\n\n        var validateParameters = function (operation, expected, actual) {\n            test.addLog('Called ', operation, ', now validating the parameters');\n            var errors = [];\n            if (zumo.util.compare(expected, actual, errors)) {\n                test.addLog('Parameter passing for operation ', operation, ' succeeded');\n                return true;\n            } else {\n                test.addLog('Error validating parameters');\n                for (var error in errors) {\n                    test.addLog(error);\n                }\n                test.addLog('Expected: ', expected);\n                test.addLog('Actual: ', actual);\n                return false;\n            }\n        }\n\n        var item = { string1: 'hello' };\n        var testPassed = true;\n        dict.operation = 'insert';\n        table.insert(item, dict).done(function (inserted) {\n            testPassed = testPassed && validateParameters('insert', dict, JSON.parse(inserted.parameters));\n            dict.operation = 'update';\n            var id = inserted.id || 1;\n            table.update({ id: id, string1: item.string1 }, dict).done(function (updated) {\n                testPassed = testPassed && validateParameters('update', dict, JSON.parse(updated.parameters));\n                dict.operation = 'lookup';\n                table.lookup(id, dict).done(function (retrieved) {\n                    testPassed = testPassed && validateParameters('lookup', dict, JSON.parse(retrieved.parameters));\n                    dict.operation = 'read';\n                    table.read(dict).done(function (retrievedItems) {\n                        testPassed = testPassed && validateParameters('read', dict, JSON.parse(retrievedItems[0].parameters));\n\n                        // response to delete operations don't get passed to the callback;\n                        // using a filter to check the values.\n                        var filter = createLoggingFilter();\n                        var filteredTable = client.withFilter(filter).getTable(paramsTableName);\n                        dict.operation = 'delete';\n                        filteredTable.del({ id: id }, dict).done(function () {\n                            var response = JSON.parse(filter.response.responseText);\n                            testPassed = testPassed && validateParameters('delete', dict, JSON.parse(response.parameters));\n                            done(testPassed);\n                        }, handleError('delete'));\n                    }, handleError('read'));\n                }, handleError('lookup'));\n            }, handleError('update'));\n        }, handleError('insert'));\n    }));\n\n    tests.push(new zumo.Test('Using filters to access optimistic concurrency features', function (test, done) {\n        var client = zumo.getClient();\n\n        var ocFilter = function (req, next, callback) {\n            var url = req.url;\n            url = addSystemProperties(url);\n            req.url = url;\n\n            removeSystemPropertiesFromBody(req);\n            next(req, function (error, response) {\n                if (response && response.getResponseHeader) {\n                    var etag = response.getResponseHeader('ETag');\n                    if (etag) {\n                        if (etag.substring(0, 1) === '\\\"') {\n                            etag = etag.substring(1);\n                        }\n                        if (etag.substring(etag.length - 1) === '\\\"') {\n                            etag = etag.substring(0, etag.length - 1);\n                        }\n                        var body = JSON.parse(response.responseText);\n                        body['__version'] = etag;\n                        response.responseText = JSON.stringify(body);\n                    }\n                }\n\n                callback(error, response);\n            });\n\n            function addSystemProperties(url) {\n                var queryIndex = url.indexOf('?');\n                var query, urlNoQuery;\n                if (queryIndex >= 0) {\n                    urlNoQuery = url.substring(0, queryIndex);\n                    query = url.substring(queryIndex + 1) + '&';\n                } else {\n                    urlNoQuery = url;\n                    query = '';\n                }\n                query = query + '__systemProperties=*';\n                return urlNoQuery + '?' + query;\n            }\n\n            function removeSystemPropertiesFromBody(request) {\n                var method = request.type;\n                var data = request.data;\n                if (method === 'PATCH' || method === 'PUT') {\n                    var body = JSON.parse(data);\n                    if (typeof body === 'object') {\n                        var toRemove = [];\n                        for (var k in body) {\n                            if (k.indexOf('__') === 0) {\n                                toRemove.push(k);\n                                if (k === '__version') {\n                                    var etag = '\\\"' + body[k] + '\\\"';\n                                    req.headers['If-Match'] = etag;\n                                }\n                            }\n                        }\n\n                        if (toRemove.length) {\n                            for (var i = 0; i < toRemove.length; i++) {\n                                delete body[toRemove[i]];\n                            }\n                            req.data = JSON.stringify(body);\n                        }\n                    }\n                }\n            }\n        };\n\n        client = client.withFilter(ocFilter);\n        var table = client.getTable(stringIdTableName);\n\n        var errFunction = function (err) {\n            test.addLog('Error: ', err);\n            done(false);\n        };\n        table.insert({ name: 'John Doe', number: 123 }).done(function (inserted) {\n            test.addLog('Inserted: ', inserted);\n            inserted.name = 'Jane Roe';\n            table.update(inserted).done(function (updated) {\n                test.addLog('Updated: ', updated);\n                test.addLog('Now updating with incorrect version');\n                updated['__version'] = 'incorrect';\n                table.update(updated).done(function (updated2) {\n                    test.addLog('Updated again (should not happen): ', updated2);\n                    done(false);\n                }, function (err) {\n                    test.addLog('Got (expected) error: ', err);\n                    done(true);\n                });\n            }, errFunction);\n        }, errFunction);\n    }, zumo.runtimeFeatureNames.STRING_ID_TABLES));\n\n    function createFilterCaptureTest(successfulRequest) {\n        var testName = 'Filter can be used to trace request / ' + (successfulRequest ? 'successful' : 'error') + ' response'\n        return new zumo.Test(testName, function (test, done) {\n            var client = zumo.getClient();\n            var filter = createLoggingFilter();\n            var filtered = client.withFilter(filter);\n            var table = filtered.getTable(stringIdTableName);\n            var item = { name: 'hello world' };\n            if (!successfulRequest) {\n                item.unsupported = { arr: [1, 3, 4] };\n            }\n            var expectedRequestBody = JSON.stringify(item);\n            var traceAndValidateRequestBody = function () {\n                test.addLog('Request from the filter: ', filter.request);\n                if (!filter.request || filter.request.data !== expectedRequestBody) {\n                    test.addLog('Request body not the expected value');\n                    return false;\n                } else {\n                    return true;\n                }\n            }\n            var traceAndValidateResponse = function () {\n                var error = filter.error;\n                var response = filter.response;\n                test.addLog('Error: ', error);\n                test.addLog('Response(' + Object.prototype.toString.call(response) + '): ' + response.status + ' - ' + response.responseText);\n                if (successfulRequest) {\n                    if (error) {\n                        test.addLog('Request should have succeeded, but an error was captured by the filter: ', error);\n                        return false;\n                    }\n\n                    if (!response) {\n                        test.addLog('Request should have succeeded, but no response was captured by the filter');\n                        return false;\n                    }\n\n                    if (response.status !== 200 && response.status !== 201) {\n                        test.addLog('Invalid response status');\n                        return false;\n                    }\n                } else {\n                    if (!response) {\n                        test.addLog('Request should have failed on the server, but a response was not captured by the filter.');\n                        return false;\n                    }\n\n                    if (response.status < 400) {\n                        test.addLog('Invalid response status');\n                        return false;\n                    }\n                }\n\n                return true;\n            }\n            table.insert(item).done(function (item) {\n                test.addLog('Inserted: ', item);\n                if (!traceAndValidateRequestBody()) {\n                    done(false);\n                    return;\n                }\n\n                if (!successfulRequest) {\n                    test.addLog('Error, request should have failed');\n                    done(false);\n                    return;\n                }\n\n                if (!traceAndValidateResponse()) {\n                    done(false);\n                    return;\n                }\n\n                done(true);\n            }, function (err) {\n                test.addLog('Error during insert: ', err);\n                if (!traceAndValidateRequestBody()) {\n                    test.addLog('Error validating request');\n                    done(false);\n                    return;\n                }\n\n                if (successfulRequest) {\n                    test.addLog('Error, request should have succeeded');\n                    done(false);\n                    return;\n                }\n\n                if (!traceAndValidateResponse()) {\n                    test.addLog('Error validating response');\n                    done(false);\n                    return;\n                }\n\n                done(true);\n            });\n        }, zumo.runtimeFeatureNames.STRING_ID_TABLES);\n    }\n\n    function createBypassingFilter(statusCode, body) {\n        return function (request, next, callback) {\n            callback();\n        }\n    }\n\n    return {\n        name: 'Misc',\n        tests: tests\n    };\n}\n\nzumo.tests.misc = defineMiscTestsNamespace();\n"
  },
  {
    "path": "test/JavaScript/TestFramework/js/tests/pushTests.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"../testFramework.js\" />\n\nfunction definePushTestsNamespace() {\n    var tests = [];\n    var i;\n    var tableName = 'w8PushTest';\n    var toastTemplateName = 'newsToastTemplate';\n    var tileTemplateName = 'newsTileTemplate';\n    var badgeTemplateName = 'newsBadgeTemplate';\n    var rawTemplateName = 'newsRawTemplate';\n    var templateNotification = {\n        \"News_English\": \"World News in English!\",\n        \"News_French\": \"Nouvelles du monde en français!\",\n        \"News_Mandarin\": \"在普通话的世界新闻 ！\",\n        \"News_Badge\": \"10\"\n    }\n\n    var pushChannel;\n    var pushNotifications = Windows.Networking.PushNotifications;\n    var pushNotificationQueue = [];\n    var imageUrl = 'http://zumotestserver.azurewebsites.net/content/zumo2.png';\n    var wideImageUrl = 'http://zumotestserver.azurewebsites.net/content/zumo1.png';\n\n    var onPushNotificationReceived = function (e) {\n        var notificationPayload;\n        switch (e.notificationType) {\n            case pushNotifications.PushNotificationType.toast:\n                notificationPayload = e.toastNotification.content.getXml();\n                break;\n\n            case pushNotifications.PushNotificationType.tile:\n                notificationPayload = e.tileNotification.content.getXml();\n                break;\n\n            case pushNotifications.PushNotificationType.badge:\n                notificationPayload = e.badgeNotification.content.getXml();\n                break;\n\n            case pushNotifications.PushNotificationType.raw:\n                notificationPayload = e.rawNotification.content;\n                break;\n        }\n        pushNotificationQueue.push({ type: e.notificationType, content: notificationPayload });\n    }\n\n    function waitForNotification(timeout, timeAfterPush, continuation) {\n        /// <param name=\"timeout\" type=\"Number\">Time to wait for push notification in milliseconds</param>\n        /// <param name=\"timeAfterPush\" type=\"Number\">Time to sleep after a push is received. Used to prevent\n        ///            blasting the push notification service.</param>\n        /// <param name=\"continuation\" type=\"function(Object)\">Function called when the timeout expires.\n        ///            If there was a push notification, it will be passed; otherwise null will be passed\n        ///            to the function.</param>\n        if (typeof timeAfterPush === 'function') {\n            continuation = timeAfterPush;\n            timeAfterPush = 3000; // default to 3 seconds\n        }\n        var start = Date.now();\n        var waitForPush = function () {\n            var now = Date.now();\n            if (pushNotificationQueue.length) {\n                var notification = pushNotificationQueue.pop();\n                setTimeout(function () {\n                    continuation(notification);\n                }, timeAfterPush);\n            } else {\n                if ((now - start) > timeout) {\n                    continuation(null); // Timed out\n                } else {\n                    setTimeout(waitForPush, 500); // try it again in 500ms\n                }\n            }\n        }\n\n        waitForPush();\n    }\n\n    function RegisterTemplateForPush(templateBody, templateName, wnsHeaders, tags, test) {\n        return new WinJS.Promise(function (complete) {\n            var pushManager = Windows.Networking.PushNotifications.PushNotificationChannelManager;\n            pushManager.createPushNotificationChannelForApplicationAsync().done(function (channel) {\n                test.addLog('Created push channel: ', { uri: channel.uri, expirationTime: channel.expirationTime });\n                channel.onpushnotificationreceived = onPushNotificationReceived;\n                zumo.getClient().push.registerTemplate(channel.uri, templateBody, templateName, wnsHeaders, tags).done(function () {\n                    test.addLog('success: Registered template', templateName);\n                    pushChannel = channel;\n                    complete(true);\n                }, function (error) {\n                    test.addLog('Error regsitering template push channel: ', error);\n                    complete(false);\n                });\n            }, function (error) {\n                test.addLog('Error creating push channel: ', error);\n                complete(false);\n            });\n        });\n    }\n\n    function UnRegisterTemplateForPush(templateName, test) {\n        return new WinJS.Promise(function (complete) {\n            if (pushChannel) {\n                zumo.getClient().push.unregisterTemplate(templateName).done(function () {\n                    test.addLog('Template Unregistered with NH: ', templateName);\n                    complete(true);\n                }, function (error) {\n                    test.addLog('Failed to unregister template with NH: ', error);\n                    complete(false);\n                });\n            } else {\n                test.addLog('Error, push channel needs to be registered.');\n                complete(false);\n            }\n            pushChannel = null;\n        });\n    }\n\n    var indexOfTemplatePushTests = 0;\n\n    tests.push(new zumo.Test('Register Template toast push channel', function (test, done) {\n        var templateBody = '<toast><visual><binding template=\"ToastText01\"><text id=\"1\">$(News_French)</text></binding></visual></toast>';\n        var wnsHeaders = { 'X-WNS-Type': 'wns/toast' };\n        var tags = [\"World\", \"French\"];\n        RegisterTemplateForPush(templateBody, toastTemplateName, wnsHeaders, tags, test).done(function (result) {\n            done(result);\n        });\n    }));\n    tests.push(createPushTest('sendToastText01',\n        { text1: 'This is not used in template tests' },\n        '<toast><visual><binding template=\"ToastText01\"><text id=\"1\">Nouvelles du monde en français!</text></binding></visual></toast>', true));\n    tests.push(new zumo.Test('Unregister Toast Template push channel', function (test, done) {\n        UnRegisterTemplateForPush(toastTemplateName, test).done(function (result) {\n            done(result);\n        });\n    }));\n\n    tests.push(new zumo.Test('Register Template tile push channel', function (test, done) {\n        var templateBody = '<tile><visual><binding template=\"TileWideImageAndText02\"><image id=\"1\" src=\"' + wideImageUrl + '\" alt=\"zumowide\"/><text id=\"1\">$(News_Mandarin)</text><text id=\"2\">tl-wiat2-2</text></binding></visual></tile>';\n        var wnsHeaders = { 'X-WNS-Type': 'wns/tile' };\n        var tags = [\"World\", \"Mandarin\"];\n        RegisterTemplateForPush(templateBody, \"newsTileTemplate\", wnsHeaders, tags, test).done(function (result) {\n            done(result);\n        });\n    }));\n    tests.push(createPushTest('sendTileWideImageAndText02',\n        { text1: 'This is not used in template tests' },\n        '<tile><visual><binding template=\"TileWideImageAndText02\"><image id=\"1\" src=\"' + wideImageUrl + '\" alt=\"zumowide\"/><text id=\"1\">在普通话的世界新闻 ！</text><text id=\"2\">tl-wiat2-2</text></binding></visual></tile>', true));\n    tests.push(new zumo.Test('Unregister Tile Template push channel', function (test, done) {\n        UnRegisterTemplateForPush(tileTemplateName, test).done(function (result) {\n            done(result);\n        });\n    }));\n\n    tests.push(new zumo.Test('Register Template Raw push channel', function (test, done) {\n        var templateBody = '<raw>$(News_English)</raw>';\n        var wnsHeaders = { 'X-WNS-Type': 'wns/raw' };\n        var tags = [\"World\", \"English\"];\n        RegisterTemplateForPush(templateBody, \"newsRawTemplate\", wnsHeaders, tags, test).done(function (result) {\n            done(result);\n        });\n    }));\n    tests.push(createPushTest('sendRaw', 'This is not used in template tests', '<raw>World News in English!</raw>', true));\n    tests.push(new zumo.Test('Unregister Raw Template push channel', function (test, done) {\n        UnRegisterTemplateForPush(rawTemplateName, test).done(function (result) {\n            done(result);\n        });\n    }));\n\n    tests.push(new zumo.Test('Register Template Badge push channel', function (test, done) {\n        var templateBody = '<badge value=\"$(News_Badge)\" version=\"1\" />';\n        var wnsHeaders = { 'X-WNS-Type': 'wns/badge' };\n        var tags = [\"World\", \"Badge\"];\n        RegisterTemplateForPush(templateBody, \"newsBadgeTemplate\", wnsHeaders, tags, test).done(function (result) {\n            done(result);\n        });\n    }));\n    tests.push(createPushTest('sendBadge', 10, '<badge value=\"10\" version=\"1\"/>', true));\n    tests.push(new zumo.Test('Unregister Badge Template push channel', function (test, done) {\n        UnRegisterTemplateForPush(badgeTemplateName, test).done(function (result) {\n            done(result);\n        });\n    }));\n\n    for (var i = indexOfTemplatePushTests; i < tests.length; i++) {\n        tests[i].addRequiredFeature(zumo.runtimeFeatureNames.NH_PUSH_ENABLED);\n    }\n\n    tests.push(new zumo.Test('Register push channel', function (test, done) {\n        var pushManager = Windows.Networking.PushNotifications.PushNotificationChannelManager;\n        pushManager.createPushNotificationChannelForApplicationAsync().done(function (channel) {\n            test.addLog('Created push channel: ', { uri: channel.uri, expirationTime: channel.expirationTime });\n            channel.onpushnotificationreceived = onPushNotificationReceived;\n            var runtimeFeatures = zumo.util.globalTestParams[zumo.constants.RUNTIME_FEATURES_KEY];\n            if (runtimeFeatures[zumo.runtimeFeatureNames.NH_PUSH_ENABLED]) {\n                var tags = [\"tag1\", \"tag2\"];\n                zumo.getClient().push.registerNative(channel.uri, tags).done(function () {\n                    test.addLog('Registered with NH');\n                    pushChannel = channel;\n                    done(true);\n                }, function (error) {\n                    test.addLog('Error registering with NH: ', error);\n                    done(false);\n                });;\n            }\n            else {\n                pushChannel = channel;\n                done(true);\n            }\n        }, function (error) {\n            test.addLog('Error creating push channel: ', error);\n            done(false);\n        });\n    }));\n\n    tests.push(createPushTest('sendRaw', 'hello world', 'hello world'));\n    tests.push(createPushTest('sendRaw', 'non-ASCII áéíóú', 'non-ASCII áéíóú'));\n    tests.push(createPushTest('sendToastText01',\n        { text1: 'hello world' },\n        '<toast><visual><binding template=\"ToastText01\"><text id=\"1\">hello world</text></binding></visual></toast>'));\n    tests.push(createPushTest('sendToastImageAndText03',\n        { text1: 'ts-iat3-1', text2: 'ts-iat3-2', image1src: imageUrl, image1alt: 'zumo' },\n        '<toast><visual><binding template=\"ToastImageAndText03\"><image id=\"1\" src=\"' + imageUrl + '\" alt=\"zumo\"/><text id=\"1\">ts-iat3-1</text><text id=\"2\">ts-iat3-2</text></binding></visual></toast>'));\n    tests.push(createPushTest('sendToastImageAndText04',\n        { text1: 'ts-iat4-1', text2: 'ts-iat4-2', text3: 'ts-iat4-3', image1src: imageUrl, image1alt: 'zumo' },\n        '<toast><visual><binding template=\"ToastImageAndText04\"><image id=\"1\" src=\"' + imageUrl + '\" alt=\"zumo\"/><text id=\"1\">ts-iat4-1</text><text id=\"2\">ts-iat4-2</text><text id=\"3\">ts-iat4-3</text></binding></visual></toast>'));\n\n    tests.push(createPushTest('sendBadge', 4, '<badge value=\"4\" version=\"1\"/>'));\n    tests.push(createPushTest('sendBadge', 'playing', '<badge value=\"playing\" version=\"1\"/>'));\n\n    tests.push(createPushTest('sendTileWideImageAndText02',\n        { text1: 'tl-wiat2-1', text2: 'tl-wiat2-2', image1src: wideImageUrl, image1alt: 'zumowide' },\n        '<tile><visual><binding template=\"TileWideImageAndText02\"><image id=\"1\" src=\"' + wideImageUrl + '\" alt=\"zumowide\"/><text id=\"1\">tl-wiat2-1</text><text id=\"2\">tl-wiat2-2</text></binding></visual></tile>'));\n    tests.push(createPushTest('sendTileWideImageCollection',\n        {\n            image1src: wideImageUrl, image2src: imageUrl, image3src: imageUrl, image4src: imageUrl, image5src: imageUrl,\n            image1alt: 'widezumo', image2alt: 'zumo', image3alt: 'zumo', image4alt: 'zumo', image5alt: 'zumo'\n        },\n        '<tile><visual><binding template=\"TileWideImageCollection\">' +\n            '<image id=\"1\" src=\"' + wideImageUrl + '\" alt=\"widezumo\"/>' +\n            '<image id=\"2\" src=\"' + imageUrl + '\" alt=\"zumo\"/>' +\n            '<image id=\"3\" src=\"' + imageUrl + '\" alt=\"zumo\"/>' +\n            '<image id=\"4\" src=\"' + imageUrl + '\" alt=\"zumo\"/>' +\n            '<image id=\"5\" src=\"' + imageUrl + '\" alt=\"zumo\"/>' +\n            '</binding></visual></tile>'));\n    tests.push(createPushTest('sendTileWideText02',\n        {\n            text1: 'tl-wt02-caption',\n            text2: 'tl-wt02-1', text3: 'tl-wt02-2', text4: 'tl-wt02-3', text5: 'tl-wt02-4',\n            text6: 'tl-wt02-5', text7: 'tl-wt02-6', text8: 'tl-wt02-7', text9: 'tl-wt02-8'\n        },\n        '<tile><visual><binding template=\"TileWideText02\">' +\n            '<text id=\"1\">tl-wt02-caption</text>' +\n            '<text id=\"2\">tl-wt02-1</text>' +\n            '<text id=\"3\">tl-wt02-2</text>' +\n            '<text id=\"4\">tl-wt02-3</text>' +\n            '<text id=\"5\">tl-wt02-4</text>' +\n            '<text id=\"6\">tl-wt02-5</text>' +\n            '<text id=\"7\">tl-wt02-6</text>' +\n            '<text id=\"8\">tl-wt02-7</text>' +\n            '<text id=\"9\">tl-wt02-8</text>' +\n            '</binding></visual></tile>'));\n    tests.push(createPushTest('sendTileSquarePeekImageAndText01',\n        {\n            text1: 'tl-spiat1-1',\n            text2: 'tl-spiat1-2',\n            text3: 'tl-spiat1-3',\n            text4: 'tl-spiat1-4',\n            image1src: imageUrl,\n            image1alt: 'zumo'\n        },\n        '<tile><visual><binding template=\"TileSquarePeekImageAndText01\">' +\n            '<image id=\"1\" src=\"' + imageUrl + '\" alt=\"zumo\"/>' +\n            '<text id=\"1\">tl-spiat1-1</text>' +\n            '<text id=\"2\">tl-spiat1-2</text>' +\n            '<text id=\"3\">tl-spiat1-3</text>' +\n            '<text id=\"4\">tl-spiat1-4</text>' +\n            '</binding></visual></tile>'));\n    tests.push(createPushTest('sendTileSquareBlock',\n    { text1: '24', text2: 'aliquam' },\n    '<tile><visual><binding template=\"TileSquareBlock\"><text id=\"1\">24</text><text id=\"2\">aliquam</text></binding></visual></tile>'));\n\n    tests.push(new zumo.Test('Unregister push channel', function (test, done) {\n        if (pushChannel) {\n            var runtimeFeatures = zumo.util.globalTestParams[zumo.constants.RUNTIME_FEATURES_KEY];\n            if (runtimeFeatures[zumo.runtimeFeatureNames.NH_PUSH_ENABLED]) {\n                zumo.getClient().push.unregisterNative().done(function () {\n                    test.addLog('Unregistered with NH: ');\n                    done(true);\n                }, function (error) {\n                    test.addLog('Failed to unregister with NH: ', error);\n                    done(false);\n                });\n            }\n            else {\n                pushChannel.close();\n                done(true);\n            }\n        } else {\n            test.addLog('Error, push channel needs to be registered.');\n            done(false);\n        }\n        pushChannel = null;\n    }));\n\n    function createPushTest(wnsMethod, payload, expectedPushPayload, templatePush) {\n        /// <param name=\"wnsMethod\" type=\"String\">The method on the WNS module</param>\n        /// <param name=\"payload\" type=\"object\">The payload to be sent to WNS</param>\n        /// <param name=\"expectedPushPayload\" type=\"String\">The result which will be returned on the callback</param>\n        var testName = 'Test for ' + wnsMethod + ': ';\n        var payloadString = JSON.stringify(payload);\n        testName += payloadString.length < 15 ? payloadString : (payloadString.substring(0, 15) + \"...\");\n\n        var expectedNotificationType;\n        var notificatonType;\n        if (wnsMethod.indexOf('Badge') >= 0) {\n            expectedNotificationType = pushNotifications.PushNotificationType.badge;\n            notificatonType = 'badge';\n        } else if (wnsMethod.indexOf('Raw') >= 0) {\n            expectedNotificationType = pushNotifications.PushNotificationType.raw;\n            notificatonType = 'raw';\n        } else if (wnsMethod.indexOf('Tile') >= 0) {\n            expectedNotificationType = pushNotifications.PushNotificationType.tile;\n            notificatonType = 'tile';\n        } else if (wnsMethod.indexOf('Toast') >= 0) {\n            expectedNotificationType = pushNotifications.PushNotificationType.toast;\n            notificatonType = 'toast';\n        } else {\n            throw \"Unknown wnsMethod\";\n        }\n\n        if (templatePush) {\n            notificatonType = 'template';\n        }\n\n        if (typeof expectedPushPayload === 'object') {\n            expectedPushPayload = JSON.stringify(expectedPushPayload);\n        }\n\n        return new zumo.Test(testName, function (test, done) {\n            test.addLog('Test for method ', wnsMethod, ' with payload ', payload);\n            var client = zumo.getClient();\n            var runtimeFeatures = zumo.util.globalTestParams[zumo.constants.RUNTIME_FEATURES_KEY];\n            var table = client.getTable(tableName);\n            var item = {\n                method: wnsMethod,\n                channelUri: pushChannel.uri,\n                payload: payload,\n                xmlPayload: expectedPushPayload,\n                usingNH: runtimeFeatures[zumo.runtimeFeatureNames.NH_PUSH_ENABLED],\n                nhNotificationType: notificatonType,\n                templateNotification: templateNotification\n            };\n            table.insert(item).done(function (inserted) {\n                if (inserted.response) {\n                    delete inserted.response.channel;\n                }\n                test.addLog('Push request: ', inserted);\n                waitForNotification(15000, function (notification) {\n                    if (notification) {\n                        test.addLog('Notification received: ', notification);\n                        if (notification.type !== expectedNotificationType) {\n                            test.addLog('Error, notification type (', notification.type, ') is not the expected (', expectedNotificationType, ')');\n                            done(false);\n                        } else {\n                            var xmlTag = \"<?xml version=\\\"1.0\\\"?>\";\n                            notification.content = notification.content.replace(xmlTag, \"\");\n                            if (notification.content !== expectedPushPayload) {\n                                test.addLog('Error, notification payload (', notification.content, ') is not the expected (', expectedPushPayload, ')');\n                                done(false);\n                            } else {\n                                test.addLog('Push notification received successfully');\n                                done(true);\n                            }\n                        }\n                    } else {\n                        test.addLog('Error, push not received on the allowed timeout');\n                        done(false);\n                    }\n                });\n            }, function (err) {\n                test.addLog('Error requesting push notification: ', err);\n                done(false);\n            });\n        });\n    }\n\n    return {\n        name: 'Push',\n        tests: tests\n    };\n}\n\nzumo.tests.push = definePushTestsNamespace();\n"
  },
  {
    "path": "test/JavaScript/TestFramework/js/tests/queryTestData.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"../testFramework.js\" />\n\nfunction createQueryTestData() {\n    var movies = [];\n\n    movies.push({\n        Title: \"The Shawshank Redemption\",\n        Year: 1994,\n        Duration: 142,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1994, 9, 14)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Godfather\",\n        Year: 1972,\n        Duration: 175,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1972, 2, 24)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Godfather: Part II\",\n        Year: 1974,\n        Duration: 200,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1974, 11, 20)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Pulp Fiction\",\n        Year: 1994,\n        Duration: 168,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1994, 9, 14)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Good, the Bad and the Ugly\",\n        Year: 1966,\n        Duration: 161,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1967, 11, 29)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"12 Angry Men\",\n        Year: 1957,\n        Duration: 96,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1957, 3, 10)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Dark Knight\",\n        Year: 2008,\n        Duration: 152,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2008, 6, 18)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Schindler's List\",\n        Year: 1993,\n        Duration: 195,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1993, 11, 15)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Lord of the Rings: The Return of the King\",\n        Year: 2003,\n        Duration: 201,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2003, 11, 17)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Fight Club\",\n        Year: 1999,\n        Duration: 139,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1999, 9, 15)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Star Wars: Episode V - The Empire Strikes Back\",\n        Year: 1980,\n        Duration: 127,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1980, 4, 21)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"One Flew Over the Cuckoo's Nest\",\n        Year: 1975,\n        Duration: 133,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1975, 10, 21)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Lord of the Rings: The Fellowship of the Ring\",\n        Year: 2001,\n        Duration: 178,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2001, 11, 19)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Inception\",\n        Year: 2010,\n        Duration: 148,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2010, 6, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Goodfellas\",\n        Year: 1990,\n        Duration: 146,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1990, 8, 19)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Star Wars\",\n        Year: 1977,\n        Duration: 121,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1977, 4, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Seven Samurai\",\n        Year: 1954,\n        Duration: 141,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1956, 10, 19)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Matrix\",\n        Year: 1999,\n        Duration: 136,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1999, 2, 31)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Forrest Gump\",\n        Year: 1994,\n        Duration: 142,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(1994, 6, 06)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"City of God\",\n        Year: 2002,\n        Duration: 130,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2002, 0, 01)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Lord of the Rings: The Two Towers\",\n        Year: 2002,\n        Duration: 179,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2002, 11, 18)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Once Upon a Time in the West\",\n        Year: 1968,\n        Duration: 175,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(1968, 11, 21)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Se7en\",\n        Year: 1995,\n        Duration: 127,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1995, 8, 22)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Silence of the Lambs\",\n        Year: 1991,\n        Duration: 118,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1991, 1, 14)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Casablanca\",\n        Year: 1942,\n        Duration: 102,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1943, 0, 23)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Usual Suspects\",\n        Year: 1995,\n        Duration: 106,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1995, 7, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Raiders of the Lost Ark\",\n        Year: 1981,\n        Duration: 115,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1981, 5, 12)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Rear Window\",\n        Year: 1954,\n        Duration: 112,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1955, 0, 13)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Psycho\",\n        Year: 1960,\n        Duration: 109,\n        MPAARating: \"TV-14\",\n        ReleaseDate: new Date(Date.UTC(1960, 8, 8)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"It's a Wonderful Life\",\n        Year: 1946,\n        Duration: 130,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1947, 0, 06)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Léon: The Professional\",\n        Year: 1994,\n        Duration: 110,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1994, 10, 18)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Sunset Blvd.\",\n        Year: 1950,\n        Duration: 110,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1950, 7, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Memento\",\n        Year: 2000,\n        Duration: 113,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2000, 9, 11)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Dark Knight Rises\",\n        Year: 2012,\n        Duration: 165,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2012, 6, 20)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"American History X\",\n        Year: 1998,\n        Duration: 119,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1999, 1, 12)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Apocalypse Now\",\n        Year: 1979,\n        Duration: 153,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1979, 7, 15)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Terminator 2: Judgment Day\",\n        Year: 1991,\n        Duration: 152,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1991, 6, 03)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb\",\n        Year: 1964,\n        Duration: 95,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1964, 0, 29)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Saving Private Ryan\",\n        Year: 1998,\n        Duration: 169,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1998, 6, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Alien\",\n        Year: 1979,\n        Duration: 117,\n        MPAARating: \"TV-14\",\n        ReleaseDate: new Date(Date.UTC(1979, 4, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"North by Northwest\",\n        Year: 1959,\n        Duration: 136,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1959, 8, 26)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"City Lights\",\n        Year: 1931,\n        Duration: 87,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1931, 2, 7)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Spirited Away\",\n        Year: 2001,\n        Duration: 125,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(2001, 6, 20)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Citizen Kane\",\n        Year: 1941,\n        Duration: 119,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1941, 8, 5)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Modern Times\",\n        Year: 1936,\n        Duration: 87,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1936, 1, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Shining\",\n        Year: 1980,\n        Duration: 142,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1980, 4, 23)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Vertigo\",\n        Year: 1958,\n        Duration: 129,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1958, 6, 21)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Back to the Future\",\n        Year: 1985,\n        Duration: 116,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1985, 6, 03)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"American Beauty\",\n        Year: 1999,\n        Duration: 122,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1999, 9, 01)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"M\",\n        Year: 1931,\n        Duration: 117,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1931, 7, 30)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Pianist\",\n        Year: 2002,\n        Duration: 150,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2003, 2, 28)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Departed\",\n        Year: 2006,\n        Duration: 151,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2006, 9, 06)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Taxi Driver\",\n        Year: 1976,\n        Duration: 113,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1976, 1, 08)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Toy Story 3\",\n        Year: 2010,\n        Duration: 103,\n        MPAARating: \"G\",\n        ReleaseDate: new Date(Date.UTC(2010, 5, 18)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Paths of Glory\",\n        Year: 1957,\n        Duration: 88,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1957, 9, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Life Is Beautiful\",\n        Year: 1997,\n        Duration: 118,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(1999, 1, 12)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Double Indemnity\",\n        Year: 1944,\n        Duration: 107,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1944, 3, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Aliens\",\n        Year: 1986,\n        Duration: 154,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1986, 6, 18)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"WALL-E\",\n        Year: 2008,\n        Duration: 98,\n        MPAARating: \"G\",\n        ReleaseDate: new Date(Date.UTC(2008, 5, 27)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Lives of Others\",\n        Year: 2006,\n        Duration: 137,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2006, 2, 23)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"A Clockwork Orange\",\n        Year: 1971,\n        Duration: 136,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1972, 1, 02)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Amélie\",\n        Year: 2001,\n        Duration: 122,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2001, 3, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Gladiator\",\n        Year: 2000,\n        Duration: 155,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2000, 4, 05)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Green Mile\",\n        Year: 1999,\n        Duration: 189,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1999, 11, 10)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Intouchables\",\n        Year: 2011,\n        Duration: 112,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2011, 10, 02)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Lawrence of Arabia\",\n        Year: 1962,\n        Duration: 227,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1963, 0, 30)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"To Kill a Mockingbird\",\n        Year: 1962,\n        Duration: 129,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1963, 2, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Prestige\",\n        Year: 2006,\n        Duration: 130,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2006, 9, 20)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Great Dictator\",\n        Year: 1940,\n        Duration: 125,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1941, 2, 7)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Reservoir Dogs\",\n        Year: 1992,\n        Duration: 99,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1992, 9, 23)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Das Boot\",\n        Year: 1981,\n        Duration: 149,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1982, 1, 10)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Requiem for a Dream\",\n        Year: 2000,\n        Duration: 102,\n        MPAARating: \"NC-17\",\n        ReleaseDate: new Date(Date.UTC(2000, 9, 27)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Third Man\",\n        Year: 1949,\n        Duration: 93,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1949, 7, 31)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Treasure of the Sierra Madre\",\n        Year: 1948,\n        Duration: 126,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1948, 0, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Eternal Sunshine of the Spotless Mind\",\n        Year: 2004,\n        Duration: 108,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2004, 2, 19)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Cinema Paradiso\",\n        Year: 1988,\n        Duration: 155,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1990, 1, 23)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Once Upon a Time in America\",\n        Year: 1984,\n        Duration: 139,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1984, 4, 23)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Chinatown\",\n        Year: 1974,\n        Duration: 130,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1974, 5, 20)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"L.A. Confidential\",\n        Year: 1997,\n        Duration: 138,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1997, 8, 19)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Lion King\",\n        Year: 1994,\n        Duration: 89,\n        MPAARating: \"G\",\n        ReleaseDate: new Date(Date.UTC(1994, 5, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Star Wars: Episode VI - Return of the Jedi\",\n        Year: 1983,\n        Duration: 134,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1983, 4, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Full Metal Jacket\",\n        Year: 1987,\n        Duration: 116,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1987, 5, 26)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Monty Python and the Holy Grail\",\n        Year: 1975,\n        Duration: 91,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1975, 4, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Braveheart\",\n        Year: 1995,\n        Duration: 177,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1995, 4, 24)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Singin' in the Rain\",\n        Year: 1952,\n        Duration: 103,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1952, 3, 11)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Oldboy\",\n        Year: 2003,\n        Duration: 120,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2003, 10, 21)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Some Like It Hot\",\n        Year: 1959,\n        Duration: 120,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1959, 2, 29)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Amadeus\",\n        Year: 1984,\n        Duration: 160,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1984, 8, 19)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Metropolis\",\n        Year: 1927,\n        Duration: 114,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1927, 2, 13)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Rashomon\",\n        Year: 1950,\n        Duration: 88,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1951, 11, 26)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Bicycle Thieves\",\n        Year: 1948,\n        Duration: 93,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1949, 11, 13)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"2001: A Space Odyssey\",\n        Year: 1968,\n        Duration: 141,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1968, 3, 6)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Unforgiven\",\n        Year: 1992,\n        Duration: 131,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1992, 7, 07)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"All About Eve\",\n        Year: 1950,\n        Duration: 138,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1951, 0, 15)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Apartment\",\n        Year: 1960,\n        Duration: 125,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1960, 8, 16)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Indiana Jones and the Last Crusade\",\n        Year: 1989,\n        Duration: 127,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1989, 4, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Sting\",\n        Year: 1973,\n        Duration: 129,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1974, 0, 10)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Raging Bull\",\n        Year: 1980,\n        Duration: 129,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1980, 11, 19)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Bridge on the River Kwai\",\n        Year: 1957,\n        Duration: 161,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1957, 11, 14)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Die Hard\",\n        Year: 1988,\n        Duration: 131,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1988, 6, 15)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Witness for the Prosecution\",\n        Year: 1957,\n        Duration: 116,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1958, 1, 6)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Batman Begins\",\n        Year: 2005,\n        Duration: 140,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2005, 5, 15)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"A Separation\",\n        Year: 2011,\n        Duration: 123,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2011, 2, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Grave of the Fireflies\",\n        Year: 1988,\n        Duration: 89,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1988, 3, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Pan's Labyrinth\",\n        Year: 2006,\n        Duration: 118,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2007, 0, 19)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Downfall\",\n        Year: 2004,\n        Duration: 156,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2004, 8, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Mr. Smith Goes to Washington\",\n        Year: 1939,\n        Duration: 129,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1939, 9, 19)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Yojimbo\",\n        Year: 1961,\n        Duration: 75,\n        MPAARating: \"TV-MA\",\n        ReleaseDate: new Date(Date.UTC(1961, 8, 13)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Great Escape\",\n        Year: 1963,\n        Duration: 172,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1963, 6, 4)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"For a Few Dollars More\",\n        Year: 1965,\n        Duration: 132,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1967, 4, 10)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Snatch.\",\n        Year: 2000,\n        Duration: 102,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2001, 0, 19)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Inglourious Basterds\",\n        Year: 2009,\n        Duration: 153,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2009, 7, 21)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"On the Waterfront\",\n        Year: 1954,\n        Duration: 108,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1954, 5, 24)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Elephant Man\",\n        Year: 1980,\n        Duration: 124,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1980, 9, 10)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Seventh Seal\",\n        Year: 1957,\n        Duration: 96,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1958, 9, 13)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Toy Story\",\n        Year: 1995,\n        Duration: 81,\n        MPAARating: \"TV-G\",\n        ReleaseDate: new Date(Date.UTC(1995, 10, 22)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Maltese Falcon\",\n        Year: 1941,\n        Duration: 100,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1941, 9, 18)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Heat\",\n        Year: 1995,\n        Duration: 170,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1995, 11, 15)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The General\",\n        Year: 1926,\n        Duration: 75,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1927, 1, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Gran Torino\",\n        Year: 2008,\n        Duration: 116,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2009, 0, 09)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Rebecca\",\n        Year: 1940,\n        Duration: 130,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1940, 3, 12)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Blade Runner\",\n        Year: 1982,\n        Duration: 117,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1982, 5, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Avengers\",\n        Year: 2012,\n        Duration: 143,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2012, 4, 04)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Wild Strawberries\",\n        Year: 1957,\n        Duration: 91,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1959, 5, 22)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Fargo\",\n        Year: 1996,\n        Duration: 98,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1996, 3, 05)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Kid\",\n        Year: 1921,\n        Duration: 68,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1921, 1, 6)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Scarface\",\n        Year: 1983,\n        Duration: 170,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1983, 11, 09)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Touch of Evil\",\n        Year: 1958,\n        Duration: 108,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(1958, 5, 8)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Big Lebowski\",\n        Year: 1998,\n        Duration: 117,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1998, 2, 06)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Ran\",\n        Year: 1985,\n        Duration: 162,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1985, 5, 01)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Deer Hunter\",\n        Year: 1978,\n        Duration: 182,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1979, 1, 23)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Cool Hand Luke\",\n        Year: 1967,\n        Duration: 126,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1967, 10, 1)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Sin City\",\n        Year: 2005,\n        Duration: 147,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2005, 3, 01)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Gold Rush\",\n        Year: 1925,\n        Duration: 72,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1925, 5, 26)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Strangers on a Train\",\n        Year: 1951,\n        Duration: 101,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1951, 5, 30)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"It Happened One Night\",\n        Year: 1934,\n        Duration: 105,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1934, 1, 23)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"No Country for Old Men\",\n        Year: 2007,\n        Duration: 122,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2007, 10, 21)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Jaws\",\n        Year: 1975,\n        Duration: 130,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1975, 5, 20)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Lock, Stock and Two Smoking Barrels\",\n        Year: 1998,\n        Duration: 107,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1999, 2, 05)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Sixth Sense\",\n        Year: 1999,\n        Duration: 107,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(1999, 7, 06)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Hotel Rwanda\",\n        Year: 2004,\n        Duration: 121,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2005, 1, 04)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"High Noon\",\n        Year: 1952,\n        Duration: 85,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1952, 6, 30)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Platoon\",\n        Year: 1986,\n        Duration: 120,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1986, 11, 24)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Thing\",\n        Year: 1982,\n        Duration: 109,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1982, 5, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Butch Cassidy and the Sundance Kid\",\n        Year: 1969,\n        Duration: 110,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1969, 9, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Wizard of Oz\",\n        Year: 1939,\n        Duration: 101,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1939, 7, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Casino\",\n        Year: 1995,\n        Duration: 178,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1995, 10, 22)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Trainspotting\",\n        Year: 1996,\n        Duration: 94,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1996, 6, 19)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Kill Bill: Vol. 1\",\n        Year: 2003,\n        Duration: 111,\n        MPAARating: \"TV-14\",\n        ReleaseDate: new Date(Date.UTC(2003, 9, 10)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Warrior\",\n        Year: 2011,\n        Duration: 140,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2011, 8, 09)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Annie Hall\",\n        Year: 1977,\n        Duration: 93,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1977, 3, 20)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Notorious\",\n        Year: 1946,\n        Duration: 101,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1946, 8, 6)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Secret in Their Eyes\",\n        Year: 2009,\n        Duration: 129,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2009, 7, 13)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Gone with the Wind\",\n        Year: 1939,\n        Duration: 238,\n        MPAARating: \"G\",\n        ReleaseDate: new Date(Date.UTC(1940, 0, 17)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Good Will Hunting\",\n        Year: 1997,\n        Duration: 126,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1998, 0, 09)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The King's Speech\",\n        Year: 2010,\n        Duration: 118,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2010, 11, 24)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Grapes of Wrath\",\n        Year: 1940,\n        Duration: 129,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1940, 2, 15)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Into the Wild\",\n        Year: 2007,\n        Duration: 148,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2007, 8, 21)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Life of Brian\",\n        Year: 1979,\n        Duration: 94,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1979, 7, 17)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Finding Nemo\",\n        Year: 2003,\n        Duration: 100,\n        MPAARating: \"G\",\n        ReleaseDate: new Date(Date.UTC(2003, 4, 30)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"V for Vendetta\",\n        Year: 2005,\n        Duration: 132,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2006, 2, 17)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"How to Train Your Dragon\",\n        Year: 2010,\n        Duration: 98,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(2010, 2, 26)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"My Neighbor Totoro\",\n        Year: 1988,\n        Duration: 86,\n        MPAARating: \"G\",\n        ReleaseDate: new Date(Date.UTC(1988, 3, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Big Sleep\",\n        Year: 1946,\n        Duration: 114,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1946, 7, 31)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Dial M for Murder\",\n        Year: 1954,\n        Duration: 105,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1954, 4, 29)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Ben-Hur\",\n        Year: 1959,\n        Duration: 212,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1960, 2, 30)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Terminator\",\n        Year: 1984,\n        Duration: 107,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1984, 9, 26)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Network\",\n        Year: 1976,\n        Duration: 121,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1976, 10, 27)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Million Dollar Baby\",\n        Year: 2004,\n        Duration: 132,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2005, 0, 28)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Black Swan\",\n        Year: 2010,\n        Duration: 108,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2010, 11, 17)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Night of the Hunter\",\n        Year: 1955,\n        Duration: 93,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1955, 10, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"There Will Be Blood\",\n        Year: 2007,\n        Duration: 158,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2008, 0, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Stand by Me\",\n        Year: 1986,\n        Duration: 89,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1986, 7, 08)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Donnie Darko\",\n        Year: 2001,\n        Duration: 113,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2002, 0, 30)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Groundhog Day\",\n        Year: 1993,\n        Duration: 101,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1993, 1, 12)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Dog Day Afternoon\",\n        Year: 1975,\n        Duration: 125,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1975, 8, 21)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Twelve Monkeys\",\n        Year: 1995,\n        Duration: 129,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1996, 0, 05)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Amores Perros\",\n        Year: 2000,\n        Duration: 154,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2000, 5, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Bourne Ultimatum\",\n        Year: 2007,\n        Duration: 115,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2007, 7, 03)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Mary and Max\",\n        Year: 2009,\n        Duration: 92,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(2009, 3, 09)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The 400 Blows\",\n        Year: 1959,\n        Duration: 99,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1959, 10, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Persona\",\n        Year: 1966,\n        Duration: 83,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1967, 2, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Graduate\",\n        Year: 1967,\n        Duration: 106,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1967, 11, 22)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Gandhi\",\n        Year: 1982,\n        Duration: 191,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1983, 1, 25)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Killing\",\n        Year: 1956,\n        Duration: 85,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1956, 5, 6)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Howl's Moving Castle\",\n        Year: 2004,\n        Duration: 119,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(2005, 5, 17)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Artist\",\n        Year: 2011,\n        Duration: 100,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2012, 0, 20)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Princess Bride\",\n        Year: 1987,\n        Duration: 98,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1987, 8, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Argo\",\n        Year: 2012,\n        Duration: 120,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2012, 9, 12)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Slumdog Millionaire\",\n        Year: 2008,\n        Duration: 120,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2009, 0, 23)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Who's Afraid of Virginia Woolf?\",\n        Year: 1966,\n        Duration: 131,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1966, 5, 22)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"La Strada\",\n        Year: 1954,\n        Duration: 108,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1956, 6, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Manchurian Candidate\",\n        Year: 1962,\n        Duration: 126,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1962, 9, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Hustler\",\n        Year: 1961,\n        Duration: 134,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1961, 8, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"A Beautiful Mind\",\n        Year: 2001,\n        Duration: 135,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2002, 0, 04)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"The Wild Bunch\",\n        Year: 1969,\n        Duration: 145,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1969, 5, 18)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Rocky\",\n        Year: 1976,\n        Duration: 119,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1976, 11, 03)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Anatomy of a Murder\",\n        Year: 1959,\n        Duration: 160,\n        MPAARating: \"TV-PG\",\n        ReleaseDate: new Date(Date.UTC(1959, 8, 1)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Stalag 17\",\n        Year: 1953,\n        Duration: 120,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1953, 7, 10)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Exorcist\",\n        Year: 1973,\n        Duration: 122,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1974, 2, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Sleuth\",\n        Year: 1972,\n        Duration: 138,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1972, 11, 10)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Rope\",\n        Year: 1948,\n        Duration: 80,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1948, 7, 28)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Barry Lyndon\",\n        Year: 1975,\n        Duration: 184,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1975, 11, 18)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Man Who Shot Liberty Valance\",\n        Year: 1962,\n        Duration: 123,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1962, 3, 22)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"District 9\",\n        Year: 2009,\n        Duration: 112,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2009, 7, 14)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Stalker\",\n        Year: 1979,\n        Duration: 163,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1980, 3, 17)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Infernal Affairs\",\n        Year: 2002,\n        Duration: 101,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2002, 11, 12)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Roman Holiday\",\n        Year: 1953,\n        Duration: 118,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1953, 8, 2)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Truman Show\",\n        Year: 1998,\n        Duration: 103,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1998, 5, 05)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Ratatouille\",\n        Year: 2007,\n        Duration: 111,\n        MPAARating: \"G\",\n        ReleaseDate: new Date(Date.UTC(2007, 5, 29)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Pirates of the Caribbean: The Curse of the Black Pearl\",\n        Year: 2003,\n        Duration: 143,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2003, 6, 09)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Ip Man\",\n        Year: 2008,\n        Duration: 106,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2008, 11, 12)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Diving Bell and the Butterfly\",\n        Year: 2007,\n        Duration: 112,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2007, 4, 23)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Harry Potter and the Deathly Hallows: Part 2\",\n        Year: 2011,\n        Duration: 130,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2011, 6, 15)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"A Fistful of Dollars\",\n        Year: 1964,\n        Duration: 99,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1967, 0, 18)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"A Streetcar Named Desire\",\n        Year: 1951,\n        Duration: 125,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1951, 11, 1)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Monsters, Inc.\",\n        Year: 2001,\n        Duration: 92,\n        MPAARating: \"G\",\n        ReleaseDate: new Date(Date.UTC(2001, 10, 02)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"In the Name of the Father\",\n        Year: 1993,\n        Duration: 133,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1994, 1, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Star Trek\",\n        Year: 2009,\n        Duration: 127,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2009, 4, 08)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Beauty and the Beast\",\n        Year: 1991,\n        Duration: 84,\n        MPAARating: \"G\",\n        ReleaseDate: new Date(Date.UTC(1991, 10, 22)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Rosemary's Baby\",\n        Year: 1968,\n        Duration: 136,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1968, 5, 12)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Harvey\",\n        Year: 1950,\n        Duration: 104,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1950, 9, 13)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Nauticaä of the Valley of the Wind\",\n        Year: 1984,\n        Duration: 117,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1984, 2, 11)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Wrestler\",\n        Year: 2008,\n        Duration: 109,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2009, 0, 30)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"All Quiet on the Western Front\",\n        Year: 1930,\n        Duration: 133,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1930, 7, 24)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"La Haine\",\n        Year: 1995,\n        Duration: 98,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1996, 1, 23)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Rain Man\",\n        Year: 1988,\n        Duration: 133,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1988, 11, 16)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"Battleship Potemkin\",\n        Year: 1925,\n        Duration: 66,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1925, 11, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Shutter Island\",\n        Year: 2010,\n        Duration: 138,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2010, 1, 19)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Nosferatu\",\n        Year: 1922,\n        Duration: 81,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1929, 5, 3)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Spring, Summer, Fall, Winter... and Spring\",\n        Year: 2003,\n        Duration: 103,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2003, 8, 19)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Manhattan\",\n        Year: 1979,\n        Duration: 96,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1979, 3, 25)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Mystic River\",\n        Year: 2003,\n        Duration: 138,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2003, 9, 15)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Bringing Up Baby\",\n        Year: 1938,\n        Duration: 102,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1938, 1, 18)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Shadow of a Doubt\",\n        Year: 1943,\n        Duration: 108,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1943, 0, 15)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Big Fish\",\n        Year: 2003,\n        Duration: 125,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2004, 0, 09)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Castle in the Sky\",\n        Year: 1986,\n        Duration: 124,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1986, 7, 02)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Papillon\",\n        Year: 1973,\n        Duration: 151,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1973, 11, 16)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Nightmare Before Christmas\",\n        Year: 1993,\n        Duration: 76,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(1993, 9, 29)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Untouchables\",\n        Year: 1987,\n        Duration: 119,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(1987, 5, 03)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Jurassic Park\",\n        Year: 1993,\n        Duration: 127,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(1993, 5, 11)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Let the Right One In\",\n        Year: 2008,\n        Duration: 115,\n        MPAARating: \"R\",\n        ReleaseDate: new Date(Date.UTC(2008, 9, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"In the Heat of the Night\",\n        Year: 1967,\n        Duration: 109,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1967, 9, 14)),\n        BestPictureWinner: true\n    });\n    movies.push({\n        Title: \"3 Idiots\",\n        Year: 2009,\n        Duration: 170,\n        MPAARating: \"PG-13\",\n        ReleaseDate: new Date(Date.UTC(2009, 11, 24)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Arsenic and Old Lace\",\n        Year: 1944,\n        Duration: 118,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1944, 8, 23)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"The Searchers\",\n        Year: 1956,\n        Duration: 119,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1956, 2, 13)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"In the Mood for Love\",\n        Year: 2000,\n        Duration: 98,\n        MPAARating: \"PG\",\n        ReleaseDate: new Date(Date.UTC(2000, 8, 29)),\n        BestPictureWinner: false\n    });\n    movies.push({\n        Title: \"Rio Bravo\",\n        Year: 1959,\n        Duration: 141,\n        MPAARating: null,\n        ReleaseDate: new Date(Date.UTC(1959, 3, 4)),\n        BestPictureWinner: false\n    });\n\n    return movies;\n}\n\nzumo.tests.getQueryTestData = createQueryTestData;\n"
  },
  {
    "path": "test/JavaScript/TestFramework/js/tests/queryTests.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"../testFramework.js\" />\n\nfunction defineQueryTestsNamespace() {\n    var tests = [];\n    var serverSideTests = [];\n    var i;\n    var tableName = 'intIdMovies';\n    var tableNameForServerSideFilterTest = 'w8jsServerQueryMovies';\n    var stringIdMoviesTableName = 'stringIdMovies';\n\n    function isAllDataPopulated(test, table, expectCount, success, error) {\n        var retryTimes = 20;\n        function checkDataCount() {\n            table.take(0).includeTotalCount().read().done(function (results) {\n                var totalCount = results.totalCount;\n                if (totalCount === expectCount) {\n                    success();\n                } else {\n                    if (retryTimes-- > 0) {\n                        test.addLog('Already inserted ' + totalCount + ' items, waiting for insertion to complete');\n                        setTimeout(checkDataCount, 5000);\n                    } else {\n                        error();\n                    }\n                }\n            }, function (err) {\n                test.addLog('Error querying data: ' + JSON.stringify(err));\n                error();\n            });\n        }\n\n        checkDataCount();\n    }\n\n    var populateTableTest = new zumo.Test('Populate table, if necessary', function (test, done) {\n        test.addLog('Populating the table');\n        var item = {\n            movies: zumo.tests.getQueryTestData()\n        };\n        var client = zumo.getClient();\n        var table = client.getTable(tableName);\n        table.insert(item).done(function (readItem) {\n            var status = readItem ? readItem.status : (item.status || 'no status');\n            isAllDataPopulated(test, table, item.movies.length, function () {\n                test.addLog('status: ' + JSON.stringify(status));\n                done(true);\n            }, function () {\n                test.addLog('Error populating the table: Time out. Not populate enough data.');\n                done(false);\n            });\n        }, function (err) {\n            test.addLog('Error populating the table: ', err);\n            done(false);\n        });\n    }, zumo.runtimeFeatureNames.INT_ID_TABLES);\n\n    tests.push(populateTableTest);\n\n    var populateStringIdTableTest = new zumo.Test('Populate string id table, if necessary', function (test, done) {\n        test.addLog('Populating the string id table');\n        var item = {\n            movies: zumo.tests.getQueryTestData()\n        };\n        item.movies.forEach(function (movie, index) {\n            var strIndex = index.toString();\n            var id = 'Movie ';\n            for (var i = strIndex.length; i < 3; i++) {\n                id = id + '0';\n            }\n\n            movie.id = id + strIndex;\n        });\n        var client = zumo.getClient();\n        var table = client.getTable(stringIdMoviesTableName);\n        table.insert(item).done(function (readItem) {\n            var status = readItem ? readItem.status : (item.status || 'no status');\n            isAllDataPopulated(test, table, item.movies.length, function () {\n                test.addLog('status: ' + JSON.stringify(status));\n                done(true);\n            }, function () {\n                test.addLog('Error populating the string id table: Time out. Not populate enough data.');\n                done(false);\n            });\n        }, function (err) {\n            test.addLog('Error populating the string id table: ', err);\n            done(false);\n        });\n    }, zumo.runtimeFeatureNames.STRING_ID_TABLES);\n\n    tests.push(populateStringIdTableTest);\n\n    // For server-side filtering tests, we will create a function to add the tests;\n    // We'll then compare with the function which we expect from the client, to make\n    // sure that we're testing the same thing.\n    var getWhereClauseCreatorHeader = 'function getWhereClauseCreator(testName) {\\n    switch (testName) {\\n';\n    var getWhereClauseCreatorFooter = '    }\\n    return null;\\n}';\n    var getWhereClauseSwitchBody = '';\n\n    function addQueryTest(testName, getQueryFunction, filter, options) {\n        tests.push(createQueryTest(testName, getQueryFunction, filter, options, false));\n        tests.push(createQueryTest('String id: ' + testName, getQueryFunction, filter, options, true));\n        options = options || {};\n\n        if (!getQueryFunction || !filter || typeof getQueryFunction === 'string') {\n            // Not interesting\n            return;\n        }\n\n        if (options.isNegativeClientValidation || options.isNegativeServerValidation) {\n            // Not interesting\n            return;\n        }\n\n        if (testName.indexOf('Date: Greater') === 0 || testName.indexOf('String.length - Movie with small names') === 0) {\n            // Use captured variables, cannot pass to the server\n            return;\n        }\n\n        if (testName.indexOf('String.replace, trim') === 0) {\n            // String.trim currently not supported on the server\n            return;\n        }\n\n        serverSideTests.push(createServerSideQueryTest(testName, filter, options));\n        var getQueryFunctionBody = getQueryFunction.toString();\n        getWhereClauseSwitchBody += '        case \\'' + testName + '\\':\\n';\n        getWhereClauseSwitchBody += '            return ' + getQueryFunctionBody + ';\\n';\n    }\n\n    addQueryTest('GreaterThan and LessThen - Movies from the 90s',\n        function (table) { return table.where(function () { return this.Year > 1989 && this.Year < 2000; }); },\n        function (item) { return item.Year > 1989 && item.Year < 2000; });\n    addQueryTest('GreaterEqual and LessEqual - Movies from the 90s', \n        function (table) { return table.where(function () { return this.Year >= 1990 && this.Year <= 1999; }); },\n        function (item) { return item.Year > 1989 && item.Year < 2000; });\n    addQueryTest('Compound statement - OR of ANDs - Movies from the 30s and 50s', \n        function (table) { return table.where(function () { return (this.Year >= 1930 && this.Year < 1940) || (this.Year >= 1950 && this.Year < 1960); }); },\n        function (item) { return (item.Year >= 1930 && item.Year < 1940) || (item.Year >= 1950 && item.Year < 1960); });\n    addQueryTest('Division, equal and different - Movies from the year 2000 with rating other than R', \n        function (table) { return table.where(function () { return ((this.Year / 1000.0) == 2) && this.MPAARating != 'R'; }); },\n        function (item) { return ((item.Year / 1000.0) == 2) && item.MPAARating != 'R'; });\n    addQueryTest('Addition, subtraction, relational, AND - Movies from the 1980s which last less than 2 hours', \n        function (table) { return table.where(function () { return ((this.Year - 1900) >= 80) && (this.Year + 10 < 2000) && (this.Duration < 120); }); },\n        function (item) { return ((item.Year - 1900) >= 80) && (item.Year + 10 < 2000) && (item.Duration < 120); });\n\n    addQueryTest('Query via template object - Movies from the year 2000 with rating R',\n        function (table) { return table.where({ Year: 2000, MPAARating: 'R' }); },\n        function (item) { return item.Year == 2000 && item.MPAARating == 'R'; });\n\n    // String functions\n    addQueryTest('String.indexOf - Movies which start with \"The\"',\n        function (table) { return table.where(function () { return this.Title.indexOf('The') === 0; }); },\n        function (item) { return item.Title.indexOf('The') === 0; }, { top: 100 });\n    addQueryTest('String.toUpperCase - Finding \"THE GODFATHER\"',\n        function (table) { return table.where(function () { return this.Title.toUpperCase() === 'THE GODFATHER'; }); },\n        function (item) { return item.Title.toUpperCase() === 'THE GODFATHER'; });\n    addQueryTest('String.toLowerCase - Finding \"pulp fiction\"',\n        function (table) { return table.where(function () { return this.Title.toLowerCase() === 'pulp fiction'; }); },\n        function (item) { return item.Title.toLowerCase() === 'pulp fiction'; });\n    addQueryTest('String.indexOf, String.toLowerCase - Movie which start with \"the\"',\n        function (table) { return table.where(function () { return this.Title.toLowerCase().indexOf('the') === 0; }); },\n        function (item) { return item.Title.toLowerCase().indexOf('the') === 0; }, { top: 100 });\n    addQueryTest('String.indexOf, String.toUpperCase - Movie which start with \"THE\"',\n        function (table) { return table.where(function () { return this.Title.toUpperCase().indexOf('THE') === 0; }); },\n        function (item) { return item.Title.toUpperCase().indexOf('THE') === 0; }, { top: 100 });\n    for (i = 0; i < 2; i++) {\n        var characters = (i + 1) * 6;\n        addQueryTest('String.length - Movie with small names (< ' + characters + ' characters)',\n            function (table) { return table.where(function (numCharacters) { return this.Title.length <= numCharacters; }, characters); },\n            function (item) { return item.Title.length <= characters; }, { top: 100 });\n    }\n    addQueryTest('String.indexOf (non-ASCII) - movies containing the \"é\" character',\n        function (table) { return table.where(function () { return this.Title.indexOf('é') >= 0; }); },\n        function (item) { return item.Title.indexOf('é') >= 0; });\n    addQueryTest('String.replace, trim - movies starting with \"godfather\", after removing starting \"the\"',\n        function (table) { return table.where(function () { return this.Title.replace('The ', '').trim().indexOf('Godfather') === 0; }); },\n        function (item) { return item.Title.replace('The ', '').trim().indexOf('Godfather') === 0; });\n    addQueryTest('String.substring, length - movies which end with \"r\"',\n        function (table) { return table.where(function () { return this.Title.substring(this.Title.length - 1, 1) === 'r'; }); },\n        function (item) { return /r$/.test(item.Title); });\n    addQueryTest('String.substr - movies with \"father\" starting at position 7',\n        function (table) { return table.where(function () { return this.Title.substr(7, 6) === 'father'; }); },\n        function (item) { var result = item.Title.substr(7, 6) === 'father'; return result; }, { debug: true });\n\n    // String fields\n    addQueryTest('Equals - movies since 1980 with rating PG-13',\n        function (table) { return table.where(function () { return this.MPAARating === 'PG-13' && this.Year >= 1980; }); },\n        function (item) { return item.MPAARating == 'PG-13' && item.Year >= 1980; }, { top: 100 });\n    addQueryTest('Comparison to null - Movies since 1980 without a MPAA rating',\n        function (table) { return table.where(function () { return this.MPAARating === null && this.Year >= 1980; }); },\n        function (item) { return item.MPAARating == null && item.Year >= 1980; });\n    addQueryTest('Comparison to null (not null) - Movies before 1970 with a MPAA rating',\n        function (table) { return table.where(function () { return this.MPAARating !== null && this.Year < 1970; }); },\n        function (item) { return item.MPAARating != null && item.Year < 1970; });\n\n    // Numeric functions\n    addQueryTest('Math.floor - Movies which last more than 3 hours',\n        function (table) { return table.where(function () { return Math.floor(this.Duration / 60.0) >= 3; }); },\n        function (item) { return Math.floor(item.Duration / 60.0) >= 3; });\n    addQueryTest('Math.ceil - Movies which last at most 2 hours',\n        function (table) { return table.where(function () { return Math.ceil(this.Duration / 60.0) == 2; }); },\n        function (item) { return Math.ceil(item.Duration / 60.0) == 2; }, { top: 200 });\n    addQueryTest('Math.round - Movies which last between 2.5 (inclusive) and 3.5 (exclusive) hours',\n        function (table) { return table.where(function () { return Math.round(this.Duration / 60.0) == 3; }); },\n        function (item) { return Math.round(item.Duration / 60.0) == 3; });\n\n    // Date fields\n    var dateBefore1970 = new Date(Date.UTC(1969, 12 - 1, 31, 23, 59, 59));\n    var date1980 = new Date(Date.UTC(1980, 1 - 1, 1));\n    var dateBefore1990 = new Date(Date.UTC(1989, 12 - 1, 31, 23, 59, 59));\n    var dateOfPulpFiction = new Date(Date.UTC(1994, 10 - 1, 14));\n    addQueryTest('Date: Greater than, less than - Movies with release date in the 70s',\n        function (table) { return table.where(function (d1, d2) { return this.ReleaseDate > d1 && this.ReleaseDate < d2; }, dateBefore1970, date1980); },\n        function (item) { return item.ReleaseDate > dateBefore1970 && item.ReleaseDate < date1980; });\n    addQueryTest('Date: Greater or equal, less or equal - Movies with release date in the 80s',\n        function (table) { return table.where(function (d1, d2) { return this.ReleaseDate >= d1 && this.ReleaseDate <= d2; }, date1980, dateBefore1990); },\n        function (item) { return item.ReleaseDate >= date1980 && item.ReleaseDate <= dateBefore1990; });\n    addQueryTest('Date: Equals - Movies released on 1994-10-14 (Shawshank Redemption / Pulp Fiction)',\n        function (table) { return table.where({ ReleaseDate: new Date(Date.UTC(1994, 10 - 1, 14)) }); },\n        function (item) { return item.ReleaseDate.getTime() === dateOfPulpFiction.getTime(); });\n\n    // Date functions\n    addQueryTest('Date (month): Movies released in November',\n        function (table) { return table.where(function () { return this.ReleaseDate.getUTCMonth() == (11 - 1); }); },\n        function (item) { return item.ReleaseDate.getUTCMonth() == (11 - 1); });\n    addQueryTest('Date (day): Movies released in the first day of the month',\n        function (table) { return table.where(function () { return this.ReleaseDate.getUTCDate() == 1; }); },\n        function (item) { return item.ReleaseDate.getUTCDate() == 1; });\n    addQueryTest('Date (year): Movies whose year is different than its release year',\n        function (table) { return table.where(function () { return this.ReleaseDate.getUTCFullYear() !== this.Year; }); },\n        function (item) { return item.ReleaseDate.getUTCFullYear() !== item.Year; }, { debug: true, top: 100 });\n\n    // Boolean fields\n    addQueryTest('Boolean: equal to true - Best picture winners before 1950',\n        function (table) { return table.where(function () { return this.BestPictureWinner === true && this.Year < 1950; }); },\n        function (item) { return item.BestPictureWinner === true && item.Year < 1950; }, { debug: true });\n    addQueryTest('Boolean: not and equal to false - Best picture winners since 2000',\n        function (table) { return table.where(function () { return !(this.BestPictureWinner === false) && this.Year >= 2000; }); },\n        function (item) { return !(item.BestPictureWinner === false) && item.Year >= 2000; });\n    addQueryTest('Boolean: not equal to false - Best picture winners since 2000',\n        function (table) { return table.where(function () { return this.BestPictureWinner !== false && this.Year >= 2000; }); },\n        function (item) { return item.BestPictureWinner !== false && item.Year >= 2000; });\n\n    // In operator\n    addQueryTest('In operator: Movies since 2000 with MPAA ratings of \"G\", \"PG\" or \" PG-13\"',\n        function (table) { return table.where(function (ratings) { return this.Year >= 2000 && this.MPAARating in ratings; }, ['G', 'PG', 'PG-13']); },\n        function (item) { return item.Year >= 2000 && ['G', 'PG', 'PG-13'].indexOf(item.MPAARating) >= 0; });\n\n    // Top and skip\n    addQueryTest('Get all using large $top: take(500)', null, null, { top: 500 });\n    addQueryTest('Skip all using large skip: skip(500)', null, null, { skip: 500 });\n    addQueryTest('Get first ($top) - 10', null, null, { top: 10 });\n    addQueryTest('Get last ($skip) - 10', null, null, { skip: zumo.tests.getQueryTestData().length - 10, sortFields: [new OrderByClause('id', true)] });\n    addQueryTest('Skip, take and includeTotalCount: movies 11-20, ordered by title', null, null,\n        { top: 10, skip: 10, includeTotalCount: true, sortFields: [new OrderByClause('Title', true)] });\n    addQueryTest('Skip, take and includeTotalCount with filter: movies 11-20, which won the best picture, ordered by release date',\n        function (table) { return table.where({ BestPictureWinner: true }); },\n        function (item) { return item.BestPictureWinner; },\n        { top: 10, skip: 10, includeTotalCount: true, sortFields: [new OrderByClause('ReleaseDate', false)] });\n\n    // Orderby\n    addQueryTest('Order by date and string - 50 movies, ordered by release date, then title', null, null,\n        { top: 50, sortFields: [new OrderByClause('ReleaseDate', false), new OrderByClause('Title', true)] });\n    addQueryTest('Order by number - 30 shortest movies since 1970', \n        function (table) { return table.where(function () { return this.Year >= 1970; }); },\n        function (item) { return item.Year >= 1970; },\n        { top: 30, sortFields: [new OrderByClause('Duration', true), new OrderByClause('Title', true)] });\n\n    // Select\n    addQueryTest('Select single field - Title of movies since 2000',\n        function (table) { return table.where(function () { return this.Year >= 2000; }); },\n        function (item) { return item.Year >= 2000; },\n        { top: 200, selectFields: ['Title'] });\n    addQueryTest('Select multiple fields - Title, BestPictureWinner, Duration, order by release date, of movies from the 1990s',\n        function (table) { return table.where(function () { return this.Year >= 1990 && this.Year < 2000; }); },\n        function (item) { return item.Year >= 1990 && item.Year < 2000; },\n        {\n            top: 200,\n            selectFields: ['Title', 'BestPictureWinner', 'Duration'],\n            sortFields: [new OrderByClause('ReleaseDate', true), new OrderByClause('Title', true)]\n        });\n\n    // Read passing OData query directly\n    addQueryTest('Passing OData query directly - movies from the 80s, ordered by Title, items 3, 4 and 5',\n        '$filter=((Year ge 1980) and (Year le 1989))&$top=3&$skip=2&$orderby=Title asc',\n        function (item) { return item.Year >= 1980 && item.Year <= 1989; },\n        { top: 3, skip: 2, sortFields: [new OrderByClause('Title', true)] });\n\n    // Negative tests\n    addQueryTest('(Neg) Unsupported predicate: lastIndexOf',\n        function (table) { return table.where(function () { return this.Title.lastIndexOf('r') >= 0; }); },\n        function (item) { return item.lastIndexOf('r') == item.length - 1 }, { isNegativeClientValidation: true });\n    addQueryTest('(Neg) Unsupported predicate: regular expression',\n        function (table) { return table.where(function () { return /Godfather/.test(this.Title); }); },\n        function (item) { return /Godfather/.test(item.Title); }, { isNegativeClientValidation: true });\n    addQueryTest('(Neg) Unsupported predicate: function with multiple statements',\n        function (table) { return table.where(function () { var year = 2000; return this.Year > year; }); },\n        function (item) { var year = 2000; return item.Title > year; }, { isNegativeClientValidation: true });\n    var someVariable = 2000;\n    addQueryTest('(Neg) Unsupported predicate: using variables from closure',\n        function (table) { return table.where(function () { return this.Year > someVariable; }); },\n        function (item) { return item.Title > someVariable; }, { isNegativeClientValidation: true });\n    addQueryTest('(Neg) Very large \"top\"', null, null, { top: 1001, isNegativeServerValidation: true });\n    \n    for (i = -1; i <= 0; i++) {\n        var id = i;\n        tests.push(new zumo.Test('(Neg) invalid offset: ' + id, function (test, done) {\n            var client = zumo.getClient();\n            var table = client.getTable(tableName);\n            table.lookup(id).done(function (item) {\n                test.addLog('Error, lookup for id = ' + id + ' succeeded, it should have failed. Item = ' + JSON.stringify(item));\n                done(false);\n            }, function (err) {\n                test.addLog('Got expected error: ' + JSON.stringify(err));\n                done(true);\n            });\n        }, zumo.runtimeFeatureNames.INT_ID_TABLES));\n    }\n\n    tests.push(createQueryTest('String id: query by id',\n        function (table) { return table.where(function () { return this.id.indexOf('Movie 12') === 0; }); },\n        function (item, index) { return index >= 120 && index <= 129; }, {}, true));\n\n    // Now that all server-side tests have been added, will add one test to validate the server-side script\n    var getWhereClauseCreator = getWhereClauseCreatorHeader + getWhereClauseSwitchBody + getWhereClauseCreatorFooter;\n    serverSideTests.splice(0, 0, new zumo.Test('Validate getWhereClauseCreator server function', function (test, done) {\n        /// <param name=\"test\" type=\"zumo.Test\">The test being executed</param>\n        test.addLog('Will validate that the server implementation of the getWhereClauseCreator function is the expected one.');\n        var client = zumo.getClient();\n        var table = client.getTable(tableNameForServerSideFilterTest);\n        table.read({ testName: 'getWhereClauseCreator' }).done(function (results) {\n            var actualGetWhereClauseCreator = results[0].code;\n            var clientFunction = getWhereClauseCreator.replace(/\\r\\n/g, '\\n');\n            var serverFunction = actualGetWhereClauseCreator.replace(/\\r\\n/g, '\\n');\n            if (clientFunction === serverFunction) {\n                test.addLog('Function matches');\n                done(true);\n            } else {\n                test.addLog('Error, functions do not match. Expected:');\n                test.addFullLog(getWhereClauseCreator);\n                test.addLog('Actual:');\n                test.addFullLog(actualGetWhereClauseCreator);\n                done(false);\n            }\n        }, function (err) {\n            test.addLog('Error retrieving the \"getWhereClauseCreator\" method from the server: ', err);\n            done(false);\n        });\n    }, zumo.runtimeFeatureNames.INT_ID_TABLES));\n\n    function OrderByClause(fieldName, isAscending) {\n        this.fieldName = fieldName;\n        this.isAscending = isAscending;\n    }\n\n    OrderByClause.prototype.getSortFunction = function(a, b) {\n        var field1 = a[this.fieldName];\n        var field2 = b[this.fieldName];\n        var result = 0;\n        if (typeof field1 === 'string') {\n            result = field1.localeCompare(field2);\n        } else if (typeof field1 === 'number') {\n            result = field1 - field2;\n        } else if (typeof field1 === 'object' && Object.prototype.toString.call(field1) == '[object Date]') {\n            result = field1 - field2;\n        } else {\n            result = 0; // unsupported\n        }\n\n        if (!this.isAscending) {\n            result = -result;\n        }\n\n        return result;\n    }\n\n    function createServerSideQueryTest(testName, filter, options) {\n        return new zumo.Test('[Server] ' + testName, function (test, done) {\n            var client = zumo.getClient();\n            var table = client.getTable(tableNameForServerSideFilterTest);\n            table.read({ testName: testName, options: JSON.stringify(options) }).done(function (results) {\n                test.addLog('Received results from the server');\n                var filteredMovies = zumo.tests.getQueryTestData();\n                if (filter) {\n                    filteredMovies = filteredMovies.filter(filter);\n                }\n                filteredMovies = applyOptions(filteredMovies, options);\n                var errors = [];\n                if (!zumo.util.compare(filteredMovies, results, errors)) {\n                    errors.forEach(function (error) {\n                        test.addLog(error);\n                    });\n                    test.addLog('Retrieved data is not the expected');\n                    test.addLog('Expected: ' + JSON.stringify(filteredMovies));\n                    test.addLog('Actual: ' + JSON.stringify(results));\n                    done(false);\n                } else {\n                    done(true);\n                }\n            }, function (err) {\n                test.addLog('Error retrieving data: ', err);\n                done(false);\n            });\n        }, zumo.runtimeFeatureNames.INT_ID_TABLES);\n    }\n\n    function applyOptions(filteredMovies, options) {\n        /// <param name='movies' type='Array'/>\n        /// <param name='options' type='Object'>\n        /// {\n        ///   top (number): number of elements to 'take'\n        ///   skip (number): number of elements to 'skip'\n        ///   sortFields (array of OrderByClause): fields to sort the data by\n        ///   selectFields (array of string): fields to retrieve\n        /// }\n        /// </param>\n        options = options || {};\n        if (options.sortFields && options.sortFields.length) {\n            var compareFunction = function (a, b) {\n                var i;\n                for (i = 0; i < options.sortFields.length; i++) {\n                    var temp = options.sortFields[i].getSortFunction(a, b);\n                    if (temp !== 0) {\n                        return temp;\n                    }\n                }\n\n                return 0;\n            }\n            filteredMovies = filteredMovies.sort(compareFunction);\n        }\n\n        if (options.skip) {\n            filteredMovies = filteredMovies.slice(options.skip, 1000);\n        }\n\n        if (options.top) {\n            filteredMovies = filteredMovies.slice(0, options.top);\n        }\n\n        if (options.selectFields && options.selectFields.length) {\n            filteredMovies = filteredMovies.map(function (obj) {\n                var result = {};\n                var key;\n                for (key in obj) {\n                    if (obj.hasOwnProperty(key)) {\n                        if (options.selectFields.indexOf(key) >= 0) {\n                            result[key] = obj[key];\n                        }\n                    }\n                }\n                return result;\n            });\n        }\n\n        return filteredMovies;\n    }\n\n    function createQueryTest(testName, getQueryFunction, filter, options, useStringIdTable) {\n        /// <param name=\"testName\" type=\"String\">Name of the test to be created.</param>\n        /// <param name=\"getQueryFunction\" optional=\"true\" type=\"function or String\">Either a function which takes a\n        ///    table object and returns a query, or a String with the OData query to be sent to the server.</param>\n        /// <param name=\"filter\" optional=\"true\" type=\"function\">Function which takes a movie object and returns a boolean</param>\n        /// <param name=\"options\" type=\"Object\" optional=\"true\">Optional object with additional parameters for query.\n        ///   Supported fields:\n        ///    top (number): number of elements to 'take'\n        ///    skip (number): number of elements to 'skip'\n        ///    includeTotalCount (boolean): whether to request a total could (wrapped response)\n        ///    sortFields (array of OrderByClause): fields to sort the data by\n        ///    selectFields (array of string): fields to retrieve\n        ///    debug (boolean): whether to log more information than normal\n        ///    isNegativeClientValidation (boolean): if an exception should be thrown before the request is sent the server\n        ///    isNegativeServerValidation (boolean): if the error callback should be returned by the server\n        /// </param>\n        return new zumo.Test(testName, function (test, done) {\n            var i;\n            var filteredMovies;\n            var query;\n            var readODataQuery = null;\n            var exception = null;\n            options = options || {};\n            useStringIdTable = !!useStringIdTable;\n            var top = options.top;\n            var skip = options.skip;\n            var sortFields = options.sortFields;\n            var includeTotalCount = options.includeTotalCount;\n            var selectFields = options.selectFields;\n            var debug = options.debug;\n            var isNegativeClientValidation = options.isNegativeClientValidation;\n            var isNegativeServerValidation = options.isNegativeServerValidation;\n\n            try {\n                var client = zumo.getClient();\n                var allMovies = zumo.tests.getQueryTestData();\n                var table = useStringIdTable ? client.getTable(stringIdMoviesTableName) : client.getTable(tableName);\n\n                if (getQueryFunction) {\n                    if (typeof getQueryFunction === 'string') {\n                        readODataQuery = getQueryFunction;\n                    } else {\n                        query = getQueryFunction(table);\n                    }\n                } else {\n                    query = table;\n                }\n\n                if (filter) {\n                    filteredMovies = allMovies.filter(filter);\n                } else {\n                    filteredMovies = allMovies;\n                }\n\n                var expectedTotalCount = filteredMovies.length;\n\n                if (includeTotalCount && query) {\n                    query = query.includeTotalCount();\n                }\n\n                filteredMovies = applyOptions(filteredMovies, options);\n\n                if (!readODataQuery) {\n                    if (sortFields && sortFields.length) {\n                        for (i = 0; i < sortFields.length; i++) {\n                            if (sortFields[i].isAscending) {\n                                query = query.orderBy(sortFields[i].fieldName);\n                            } else {\n                                query = query.orderByDescending(sortFields[i].fieldName);\n                            }\n                        }\n                    }\n\n                    if (skip) {\n                        query = query.skip(skip);\n                    }\n\n                    if (top) {\n                        query = query.take(top);\n                    }\n\n                    if (selectFields && selectFields.length) {\n                        query.select(selectFields.join(','));\n                    }\n                }\n            } catch (ex) {\n                exception = ex;\n            }\n\n            if (exception) {\n                test.addLog('Exception: ' + JSON.stringify(exception));\n                if (isNegativeClientValidation) {\n                    test.addLog('Exception is expected.');\n                    done(true);\n                } else {\n                    done(false);\n                }\n                return;\n            } else {\n                if (isNegativeClientValidation) {\n                    test.addLog('Error, expected an exception before sending the \\'read\\' call, but none was thrown.');\n                    done(false);\n                    return;\n                }\n            }\n\n            var errorFunction = function (err) {\n                test.addLog('Read called the error callback: ' + JSON.stringify(err));\n                zumo.util.traceResponse(test, err.request);\n                if (isNegativeServerValidation) {\n                    test.addLog('Error was expected');\n                    done(true);\n                } else {\n                    done(false);\n                }\n            };\n\n            var successFunction = function (results) {\n                test.addLog('Received results from the server');\n                if (isNegativeServerValidation) {\n                    test.addLog('Error, expected an error response from the server, but received results: ' + JSON.stringify(results));\n                    done(false);\n                    return;\n                }\n                if (debug) {\n                    test.addLog('Results: ' + JSON.stringify(results));\n                }\n                var actualTotalCount;\n                var actualResults;\n                if (includeTotalCount) {\n                    actualTotalCount = results.totalCount;\n                    actualResults = results;\n                    if (actualResults === undefined || actualTotalCount === undefined) {\n                        test.addLog('Error, query with \\'includeTotalCount()\\' should return an object, it did not');\n                        test.addLog('Result: ' + JSON.stringify(results));\n                        done(false);\n                        return;\n                    }\n\n                    if (expectedTotalCount !== actualTotalCount) {\n                        test.addLog('Error in \\'totalCount\\'. Expected: ' + expectedTotalCount + ', actual: ' + actualTotalCount);\n                        done(false);\n                        return;\n                    }\n                } else {\n                    actualTotalCount = -1;\n                    actualResults = results;\n                }\n\n                var errors = [];\n                if (!zumo.util.compare(filteredMovies, actualResults, errors)) {\n                    errors.forEach(function (error) {\n                        test.addLog(error);\n                    });\n                    test.addLog('Retrieved data is not the expected');\n                    if (debug) {\n                        test.addLog('Expected: ' + JSON.stringify(filteredMovies));\n                        test.addLog('Actual: ' + JSON.stringify(actualResults));\n                    }\n                    done(false);\n                } else {\n                    done(true);\n                }\n            };\n\n            if (readODataQuery) {\n                table.read(readODataQuery).done(successFunction, errorFunction);\n            } else {\n                query.read().done(successFunction, errorFunction);\n            }\n        }, useStringIdTable ? zumo.runtimeFeatureNames.STRING_ID_TABLES : zumo.runtimeFeatureNames.INT_ID_TABLES);\n    }\n\n    return {\n        name: 'Query',\n        tests: tests,\n        serverSideTests: serverSideTests\n    };\n}\n\nzumo.tests.query = defineQueryTestsNamespace();\n"
  },
  {
    "path": "test/JavaScript/TestFramework/js/tests/roundTripTests.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"../../../ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/MobileServices.js\" />\n/// <reference path=\"../testFramework.js\" />\n\nfunction defineRoundTripTestsNamespace() {\n    var tests = [];\n    var tableName = 'w8jsRoundTripTable';\n    var stringIdTableName = 'stringIdRoundTripTable';\n\n    tests.push(new zumo.Test('Setup dynamic schema', function (test, done) {\n        var table = zumo.getClient().getTable(tableName);\n        var item = {\n            string1: \"test\",\n            date1: new Date(),\n            bool1: true,\n            number: -1,\n        };\n        table.insert(item).done(function () {\n            test.addLog('Successfully set up the dynamic schema: ' + JSON.stringify(item));\n            done(true);\n        }, function (err) {\n            test.addLog('Error setting up dynamic schema: ' + JSON.stringify(err));\n            done(false);\n        });\n    }));\n\n    tests.push(createRoundTripTest('String: empty', 'string1', ''));\n    tests.push(createRoundTripTest('String: null', 'string1', null));\n    tests.push(createRoundTripTest('String: multiple characters', 'string1',\n        ' !\\\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'));\n    tests.push(createRoundTripTest('String: large (1000 characters)', 'string1', Array(1001).join('*')));\n    tests.push(createRoundTripTest('String: large (64k+ characters)', 'string1', Array(65538).join('*')));\n\n    tests.push(createRoundTripTest('String: non-ASCII characters - Latin', 'string1', 'ãéìôü ÇñÑ'));\n    tests.push(createRoundTripTest('String: non-ASCII characters - Arabic', 'string1', 'الكتاب على الطاولة'));\n    tests.push(createRoundTripTest('String: non-ASCII characters - Chinese', 'string1', '这本书在桌子上'));\n    tests.push(createRoundTripTest('String: non-ASCII characters - Chinese 2', 'string1', '⒈①Ⅻㄨㄩ 啊阿鼾齄 丂丄狚狛 狜狝﨨﨩 ˊˋ˙–〇 㐀㐁䶴䶵'));\n    tests.push(createRoundTripTest('String: non-ASCII characters - Japanese', 'string1', '本は机の上に'));\n    tests.push(createRoundTripTest('String: non-ASCII characters - Hebrew', 'string1', 'הספר הוא על השולחן'));\n\n    tests.push(createRoundTripTest('Date: now', 'date1', new Date()));\n    tests.push(createRoundTripTest('Date: null', 'date1', null));\n    tests.push(createRoundTripTest('Date: unix 0', 'date1', new Date(Date.UTC(1970, 1 - 1, 1, 0, 0, 0, 0))));\n    tests.push(createRoundTripTest('Date: before unix 0', 'date1', new Date(Date.UTC(1969, 12 - 1, 31, 23, 59, 59, 999))));\n    tests.push(createRoundTripTest('Date: after unix 0', 'date1', new Date(Date.UTC(1970, 1 - 1, 1, 0, 0, 0, 1))));\n    tests.push(createRoundTripTest('Date: distant past', 'date1', new Date(1, 2 - 1, 3, 4, 5, 6, 7)));\n    tests.push(createRoundTripTest('Date: distant future', 'date1', new Date(9876, 5 - 1, 4, 3, 2, 1)));\n\n    tests.push(createRoundTripTest('Bool: true', 'bool1', true));\n    tests.push(createRoundTripTest('Bool: false', 'bool1', false));\n    tests.push(createRoundTripTest('Bool: null', 'bool1', null));\n\n    tests.push(createRoundTripTest('Number: zero', 'number', 0));\n    tests.push(createRoundTripTest('Number: positive', 'number', 12345678));\n    tests.push(createRoundTripTest('Number: negative', 'number', -1232435));\n    tests.push(createRoundTripTest('Number: large long', 'number', 1152921504606846975));\n    tests.push(createRoundTripTest('Number: large long (negative)', 'number', -1152921504606846976));\n    tests.push(createRoundTripTest('Number: floating point', 'number', 12345.678));\n    tests.push(createRoundTripTest('Number: POSITIVE_INFINITY', 'number', Number.POSITIVE_INFINITY));\n    tests.push(createRoundTripTest('Number: NEGATIVE_INFINITY', 'number', Number.NEGATIVE_INFINITY));\n    tests.push(createRoundTripTest('Number: MAX_VALUE', 'number', Number.MAX_VALUE));\n    tests.push(createRoundTripTest('Number: MIN_VALUE', 'number', Number.MIN_VALUE));\n    tests.push(createRoundTripTest('Number: positive NaN', 'number', Number.NaN));\n    tests.push(createRoundTripTest('Number: large floating point', 'number', 1.234e+123));\n\n    tests.push(createRoundTripTest('Complex type (object): simple value', 'complexType',\n        { Name: 'John Doe', Age: 33, Friends: ['Jane Roe', 'John Smith'] }));\n    tests.push(createRoundTripTest('Complex type (object): null', 'complexType', null));\n    tests.push(createRoundTripTest('Complex type (object): empty object', 'complexType', {}));\n    tests.push(createRoundTripTest('Complex type (array): simple value', 'complexType',\n        [{ Name: 'Scooby Doo', Age: 10 }, { Name: 'Shaggy', Age: 19 }]));\n    tests.push(createRoundTripTest('Complex type (array): empty array', 'complexType', []));\n    tests.push(createRoundTripTest('Complex type (array): array with null elements', 'complexType',\n        [{ Name: 'Scooby Doo', Age: 10 }, null, { Name: 'Shaggy', Age: 19 }]));\n\n    tests.push(createRoundTripTest('Invalid id: zero', 'id', 0));\n    tests.push(createRoundTripTest('Invalid id: empty', 'id', ''));\n    tests.push(createRoundTripTest('Invalid id: null', 'id', null));\n    tests.push(createNegativeRoundTripTest('(Neg) Insert item with \\'id\\' property (value = 1)', { id: 1, string1: 'hello' }));\n    tests.push(createNegativeRoundTripTest('(Neg) Insert item with \\'Id\\' property (value = 1)', { Id: 1, string1: 'hello' }));\n    tests.push(createNegativeRoundTripTest('(Neg) Insert item with \\'ID\\' property (value = 1)', { ID: 1, string1: 'hello' }));\n\n    for (var i = 0; i < tests.length; i++) {\n        tests[i].addRequiredFeature(zumo.runtimeFeatureNames.INT_ID_TABLES);\n    }\n\n    var firstStringIdTestIndex = tests.length;\n\n    tests.push(new zumo.Test('Setup string id dynamic schema', function (test, done) {\n        var table = zumo.getClient().getTable(stringIdTableName);\n        var item = {\n            name: 'a string',\n            number: 123.45,\n            bool: true,\n            date1: new Date(),\n            complex: [ 'a complex object which will be converted to string at the database' ]\n        };\n        table.insert(item).done(function () {\n            test.addLog('Successfully set up the dynamic schema: ' + JSON.stringify(item));\n            done(true);\n        }, function (err) {\n            test.addLog('Error setting up dynamic schema: ' + JSON.stringify(err));\n            done(false);\n        });\n    }));\n\n    var itemName = 'ãéìôü ÇñÑ - الكتاب على الطاولة - 这本书在桌子上 - ⒈①Ⅻㄨㄩ 啊阿鼾齄 丂丄狚狛 狜狝﨨﨩 ˊˋ˙–〇 㐀㐁䶴䶵 - 本は机の上に - הספר הוא על השולחן';\n    var itemNumber = Number.MAX_VALUE;\n    var itemBool = true;\n    var itemComplex = ['abc', 'def', 'ghi'];\n\n    var differentIds = { ascii: 'id-', latin: 'ãéìôü ÇñÑ', arabic: 'الكتاب على الطاولة', chinese: '这本书在桌子上', hebrew: 'הספר הוא על השולחן' };\n    tests.push(createStringIdRoundTripTest('String id - no id on insert, multiple properties', { name: itemName, number: itemNumber, bool: itemBool, date1: zumo.util.randomDate(), complex: itemComplex }));\n    for (var t in differentIds) {\n        tests.push(createStringIdRoundTripTest('String id - ' + t + ' id on insert, multiple properties', { id: differentIds[t], name: t, number: itemNumber, bool: itemBool, date1: zumo.util.randomDate(), complex: itemComplex }));\n    }\n\n    var invalidIds = ['.', '..', 'control\\u0010characters', 'large id' + Array(260).join('*')];\n    invalidIds.forEach(function (id) {\n        tests.push(createNegativeRoundTripTest('(Neg) String id - insert with invalid id: ' + (id.length > 30 ? (id.substring(0, 30) + '...') : id), { id: id, name: 'hello' }));\n    });\n\n    for (var i = firstStringIdTestIndex; i < tests.length; i++) {\n        tests[i].addRequiredFeature(zumo.runtimeFeatureNames.STRING_ID_TABLES);\n    }\n\n    var currentIEVersion = zumo.getIEBrowserVersion(); // get IE8 version ...\n    function dateReviver(key, value) {\n        var re = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d{3})Z$/;\n        if (typeof value === 'string') {\n            if (currentIEVersion === 8.0) {\n                // UTC date(yyyy-mm-ddTtt:hh:mm:milZ) format isn't supported in IE8\n                re = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})Z$/;\n                if (value === '--T::Z') { // '--T::Z this format is not supported by IE8 so we use defult date\n                    value = '1970-01-01T00:00:00Z'; //Default Date and time\n                    item[propertyName] = value;\n                }\n            }\n\n            var a = re.exec(value);\n            if (a) {\n                if (currentIEVersion === 8.0) {\n                    var d = new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));\n                    return d;\n                }\n\n                var d = new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6], +a[7]));\n                return d;\n\n            }\n        }\n        return value;\n    }\n\n    function createStringIdRoundTripTest(testName, objectToInsert) {\n        return new zumo.Test(testName, function (test, done) {\n            var table = zumo.getClient().getTable(stringIdTableName);\n            var currentIEVersion = zumo.getIEBrowserVersion();\n            var strItem = JSON.stringify(objectToInsert);\n            var originalItem = JSON.parse(strItem, dateReviver);\n            var hasId = !!objectToInsert.id;\n            if (hasId) {\n                // force id to be unique\n                originalItem.id = originalItem.id + '-' + (new Date().toISOString());\n            }\n            var originalId = originalItem.id;\n            table.insert(originalItem).done(function (itemInserted) {\n                test.addLog('Inserted item: ', JSON.stringify(itemInserted));\n                var id = itemInserted.id;\n\n                if (hasId) {\n                    if (originalId !== id) {\n                        test.addLog('Error, id passed to insert is not the same (' + objectToInsert.id + ') as the id returned by the server (' + id + ')');\n                        done(false);\n                        return;\n                    }\n                } else {\n                    if (!id) {\n                        test.addLog('Error, inserted object does not have an \\'id\\' property');\n                        done(false);\n                        return;\n                    } else {\n                        if (typeof id !== 'string') {\n                            test.addLog('Error, id should be a string');\n                            done(false);\n                            return;\n                        }\n                    }\n                }\n\n                table.lookup(id).done(function (retrieved) {\n                    test.addLog('Retrieved the item from the service: ' + JSON.stringify(retrieved));\n                    var errors = [];\n                    if (zumo.util.compare(originalItem, retrieved, errors)) {\n                        test.addLog('Object round tripped successfully.');\n                        test.addLog('Now trying to insert an item with an existing id (should fail)');\n                        var newItem = { id: id, name: 'something' };\n                        table.insert(newItem).done(function (inserted2) {\n                            test.addLog('Error, item was inserted but should not have been: ', inserted2);\n                            done(false);\n                        }, function (err) {\n                            test.addLog('Ok, got expected error');\n                            done(true);\n                        });\n                    } else {\n                        for (var index = 0; index < errors.length; index++) {\n                            var error = errors[index];\n                            test.addLog(error);\n                        }\n                        test.addLog('Round-tripped item is different!');\n                        done(false);\n                    }\n                }, function (err) {\n                    test.addLog('Error retrieving data: ' + JSON.stringify(err));\n                    done(false);\n                });\n            }, function (err) {\n                test.addLog('Error inserting data: ' + JSON.stringify(err));\n                done(false);\n            });\n        });\n    }\n\n    function createNegativeRoundTripTest(testName, objectToInsert) {\n        return new zumo.Test(testName, function (test, done) {\n            var table = zumo.getClient().getTable(tableName);\n            table.insert(objectToInsert).done(function () {\n                test.addLog('Error, insertion of object should have failed, but succeeded: ', JSON.stringify(objectToInsert));\n                done(false);\n            }, function (err) {\n                test.addLog('Received expected error: ' + JSON.stringify(err));\n                done(true);\n            });\n        });\n    }\n\n    function createRoundTripTest(testName, propertyName, value) {\n        return new zumo.Test(testName, function (test, done) {\n            var item = {};\n            item[propertyName] = value;\n            var table = zumo.getClient().getTable(tableName);\n            var currentIEVersion = zumo.getIEBrowserVersion(); // get IE8 version ...\n            var strItem = JSON.stringify(item);\n            var originalItem = JSON.parse(strItem, dateReviver);\n            table.insert(item).done(function (itemInserted) {\n                test.addLog('Inserted item: ', JSON.stringify(itemInserted));\n                var id = itemInserted.id;\n                if (id <= 0) {\n                    test.addLog('Error, insert did not succeed: id=' + id);\n                    done(false);\n                } else {\n                    table.lookup(id).done(function (retrieved) {\n                        test.addLog('Retrieved the item from the service: ' + JSON.stringify(retrieved));\n                        var errors = [];\n                        if (propertyName === 'id') {\n                            originalItem.id = id;\n                        }\n                        if (zumo.util.compare(originalItem, retrieved, errors)) {\n                            test.addLog('Object round tripped successfully.');\n                            done(true);\n                        } else {\n                            for (var index = 0; index < errors.length; index++) {\n                                var error = errors[index];\n                                test.addLog(error);\n                            }\n                            test.addLog('Round-tripped item is different!');\n                            done(false);\n                        }\n                    }, function (err) {\n                        test.addLog('Error retrieving data: ' + JSON.stringify(err));\n                        done(false);\n                    });\n                }\n            }, function (err) {\n                test.addLog('Error inserting data: ' + JSON.stringify(err));\n                done(false);\n            });\n        });\n    }\n\n    return {\n        name: 'Round trip',\n        tests: tests\n    };\n}\n\nzumo.tests.roundTrip = defineRoundTripTestsNamespace();\n"
  },
  {
    "path": "test/JavaScript/TestFramework/js/tests/updateDeleteTests.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n/// <reference path=\"../../../ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/MobileServices.js\" />\n/// <reference path=\"../testFramework.js\" />\n\nfunction defineUpdateDeleteTestsNamespace() {\n    var tests = [];\n    var i;\n    var tableName = 'w8jsRoundTripTable';\n    var stringIdTableName = 'stringIdRoundTripTable';\n\n    tests.push(createDeleteTest('Delete item', function (test, done, table, id) {\n        table.del({ id: id }).done(function () {\n            test.addLog('Success callback called. Now trying to retrieve the data, it should return a 404');\n            table.lookup(id).done(function (item) {\n                test.addLog('Error, item has not been deleted: ' + JSON.stringify(item));\n                done(false);\n            }, function (err) {\n                test.addLog('Error callback called as expected: ' + JSON.stringify(err));\n                var request = err.request;\n                if (request && request.status == 404) {\n                    test.addLog('Got expected status code from server');\n                    done(true);\n                } else {\n                    test.addLog('Error, status code not the expected');\n                    done(false);\n                }\n            });\n        }, function (err) {\n            test.addLog('Error, this should be a positive test, but error callback was called: ' + JSON.stringify(err));\n            done(false);\n        });\n    }));\n\n    tests.push(createDeleteTest('(Neg) Delete item by passing a non-object', function (test, done, table, id) {\n        table.del(id).done(function () {\n            test.addLog('Error, success function was called but expected error.');\n            done(false);\n        }, function (err) {\n            test.addLog('Expected error callback called: ' + JSON.stringify(err));\n            done(true);\n        });\n    }));\n\n    tests.push(createDeleteTest('(Neg) Delete item by passing an object with no \\'id\\' property', function (test, done, table, id) {\n        table.del({ string1: 'test' }).done(function () {\n            test.addLog('Error, success function was called but expected error.');\n            done(false);\n        }, function (err) {\n            test.addLog('Expected error callback called: ' + JSON.stringify(err));\n            done(true);\n        });\n    }));\n\n    tests.push(createDeleteTest('(Neg) Delete item by passing an object with invalid \\'id\\' property', function (test, done, table, id) {\n        table.del({ string1: 'test', id: 1234567890 }).done(function () {\n            test.addLog('Error, success function was called but expected error.');\n            done(false);\n        }, function (err) {\n            test.addLog('Expected error callback called: ' + JSON.stringify(err));\n            var request = err.request;\n            if (request && request.status == 404) {\n                test.addLog('Got expected status code from server');\n                done(true);\n            } else {\n                test.addLog('Error, status code not the expected');\n                done(false);\n            }\n        });\n    }));\n\n    var ids = ['with space', '1234567', 'non-english ãéìôü ÇñÑالكتاب على الطاولة这本书在桌子上הספר הוא על השולחן'];\n    ids.forEach(function (id) {\n        tests.push(new zumo.Test('[string id] Delete, id = ' + id, function (test, done) {\n            var client = zumo.getClient();\n            var table = client.getTable(stringIdTableName);\n\n            function afterInsert(place) {\n                // insert will either have failed (item already exists) or succeeded (item didn't exist);\n                // in either case we'll be able to delete it.\n                return function (obj) {\n                    test.addLog(place + ': ', obj);\n                    table.del({ id: id }).done(function () {\n                        test.addLog('Delete succeeded');\n                        done(true);\n                    }, function (err) {\n                        test.addLog('Error calling delete: ', err);\n                        done(false);\n                    });\n                }\n            }\n\n            table.insert({ id: id, name: 'test' }).done(afterInsert('Inserted'), afterInsert('Insert error (likely expected)'));\n        }, zumo.runtimeFeatureNames.STRING_ID_TABLES));\n    });\n\n    tests.push(createUpdateTest('Update item', function (test, done, table, insertedItem) {\n        var newNumber = Math.floor(Math.random() * 10000);\n        test.addLog('New number: ', newNumber);\n        table.update({ id: insertedItem.id, number: newNumber }).done(function (item) {\n            if (item.number === newNumber) {\n                test.addLog('Updated number seems correct. Will retrieve it again to guarantee');\n                table.lookup(insertedItem.id).done(function (newItem) {\n                    var errors = [];\n                    if (zumo.util.compare(item, newItem, errors)) {\n                        test.addLog('Retrieved item is correct.');\n                        done(true);\n                    } else {\n                        for (var i = 0; i < errors.length; i++) {\n                            test.addLog(errors[i]);\n                        }\n                        test.addLog('Retrieved item is not the expected one: ' + JSON.stringify(newItem));\n                        done(false);\n                    }\n                }, function (err) {\n                    test.addLog('Error retrieving the item: ' + JSON.stringify(err));\n                    zumo.util.traceResponse(test, err.request);\n                    done(false);\n                });\n            } else {\n                test.addLog('Error, update did not succeed, item = ' + JSON.stringify(item));\n                done(false);\n            }\n        }, function (err) {\n            test.addLog('Error, this should be a positive test, but error callback was called: ' + JSON.stringify(err));\n            zumo.util.traceResponse(test, err.request);\n            done(false);\n        });\n    }));\n\n    tests.push(createUpdateTest('(Neg) Update non-object', function (test, done, table, insertedItem) {\n        table.update(insertedItem.id).done(function () {\n            test.addLog('Error, success function was called but expected error.');\n            done(false);\n        }, function (err) {\n            test.addLog('Expected error callback called: ' + JSON.stringify(err));\n            zumo.util.traceResponse(test, err.request);\n            done(true);\n        });\n    }));\n\n    tests.push(createUpdateTest('(Neg) Update object without an id', function (test, done, table, insertedItem) {\n        var newItem = JSON.parse(JSON.stringify(insertedItem));\n        delete newItem.id;\n        table.update(newItem).done(function () {\n            test.addLog('Error, success function was called but expected error.');\n            done(false);\n        }, function (err) {\n            test.addLog('Expected error callback called: ' + JSON.stringify(err));\n            zumo.util.traceResponse(test, err.request);\n            done(true);\n        });\n    }));\n\n    tests.push(createUpdateTest('(Neg) Update object with inexistent id', function (test, done, table, insertedItem) {\n        table.update({ id: 123456789, number: 123 }).done(function () {\n            test.addLog('Error, success function was called but expected error.');\n            done(false);\n        }, function (err) {\n            test.addLog('Expected error callback called: ' + JSON.stringify(err));\n            var request = err.request;\n            if (request && request.status == 404) {\n                test.addLog('Got expected status code from server');\n                done(true);\n            } else {\n                test.addLog('Error, status code not the expected');\n                zumo.util.traceResponse(test, request);\n                done(false);\n            }\n        });\n    }));\n\n    ids.forEach(function (id) {\n        tests.push(new zumo.Test('[string id] Update, id = ' + id, function (test, done) {\n            var client = zumo.getClient();\n            var table = client.getTable(stringIdTableName);\n            var originalNumber = Math.floor(Math.random() * 10000);\n            var updatedNumber = Math.floor(Math.random() * 10000);\n\n            function afterDelete(callbackName, testResult) {\n                return function (obj) {\n                    test.addLog('In delete ' + callbackName + ' callback, arg = ', obj);\n                    done(testResult);\n                }\n            }\n\n            function afterInsert(place) {\n                // insert will either have failed (item already exists) or succeeded (item didn't exist);\n                // in either case we'll be able to delete it.\n                return function (obj) {\n                    test.addLog(place + ': ', obj);\n                    table.lookup(id).done(function (retrieved) {\n                        test.addLog('Retrieved item: ', retrieved);\n                        var toUpdate = { id: id, name: 'test2', number: updatedNumber };\n                        table.update({ id: id, name: 'test2', number: updatedNumber }).done(function (updated) {\n                            test.addLog('Updated: ', updated);\n                            table.lookup(id).done(function (item) {\n                                var errors = [];\n                                var testResult = true;\n                                if (zumo.util.compare(toUpdate, item, errors)) {\n                                    test.addLog('Item was updated successfully');\n                                } else {\n                                    testResult = false;\n                                    test.addLog('Error during update:');\n                                    errors.forEach(function (error) {\n                                        test.addLog(error);\n                                    });\n                                }\n                                table.del({ id: id }).done(afterDelete('success', testResult), afterDelete('error', testResult));\n                            }, function (err) {\n                                test.addLog('Error calling lookup: ', err);\n                                done(false);\n                            });\n                        }, function (err) {\n                            test.addLog('Error calling update: ', err);\n                            done(false);\n                        });\n                    }, function (err) {\n                        test.addLog('Error calling lookup: ', err);\n                        done(false);\n                    });\n                }\n            }\n\n            table.insert({ id: id, name: 'test', number: originalNumber }).done(afterInsert('Inserted'), afterInsert('Insert error (likely expected)'));\n        }, zumo.runtimeFeatureNames.STRING_ID_TABLES));\n    });\n\n    function createDeleteTest(testName, actionAfterInsert) {\n        // actionAfterInsert: function(test, done, table, insertedItemId)\n        return new zumo.Test(testName, function (test, done) {\n            var client = zumo.getClient();\n            var table = client.getTable(tableName);\n            table.insert({ string1: 'test' }).done(function (inserted) {\n                var id = inserted.id;\n                test.addLog('Inserted item to be deleted, with id = ' + id);\n                actionAfterInsert(test, done, table, id);\n            }, function (insertError) {\n                test.addLog('Error inserting item: ' + JSON.stringify(insertError));\n                zumo.util.traceResponse(test, insertError.request);\n                done(false);\n            });\n        }, zumo.runtimeFeatureNames.INT_ID_TABLES);\n    }\n\n    function createUpdateTest(testName, actionAfterInsert) {\n        // actionAfterInsert: function(test, done, table, insertedItem)\n        return new zumo.Test(testName, function (test, done) {\n            var client = zumo.getClient();\n            var table = client.getTable(tableName);\n            var number = Math.floor(Math.random() * 10000);\n            test.addLog('Number: ', number);\n            table.insert({ string1: 'test', number: number }).done(function (inserted) {\n                var id = inserted.id;\n                test.addLog('Inserted item to be updated, with id = ' + id);\n                table.lookup(id).done(function (retrieved) {\n                    test.addLog('Retrieved the item: ', retrieved);\n                    var errors = [];\n                    if (zumo.util.compare({ string1: 'test', number: number }, retrieved, errors)) {\n                        actionAfterInsert(test, done, table, inserted);\n                    } else {\n                        test.addLog('Error retrieving the item:')\n                        for (var i = 0; i < errors.length; i++) {\n                            test.addLog(errors[i]);\n                        }\n                        done(false);\n                    }\n                }, function (lookupError) {\n                    test.addLog('Error retrieving item: ' + JSON.stringify(lookupError));\n                    zumo.util.traceResponse(test, lookupError.request);\n                    done(false);\n                });\n            }, function (insertError) {\n                test.addLog('Error inserting item: ' + JSON.stringify(insertError));\n                zumo.util.traceResponse(test, insertError.request);\n                done(false);\n            });\n        }, zumo.runtimeFeatureNames.INT_ID_TABLES);\n    }\n\n    return {\n        name: 'Update / Delete',\n        tests: tests\n    };\n}\n\nzumo.tests.updateDelete = defineUpdateDeleteTestsNamespace();\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/.gitignore",
    "content": ".nuget/NuGet.exe\n*.csproj.user\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppHTML/.gitignore",
    "content": "TestFramework/"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppHTML/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"ZumoE2ETestAppHTML\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"ZumoE2ETestAppHTML\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"a8341e23-5e6e-4bb6-9600-b9f851b4a5c8\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppHTML/Web.Debug.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppHTML/Web.Release.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppHTML/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=169433\n  -->\n\n<configuration>\n    <system.web>\n      <compilation debug=\"true\" targetFramework=\"4.5\" />\n      <httpRuntime targetFramework=\"4.5\" />\n    </system.web>\n\n</configuration>\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppHTML/ZumoE2ETestAppHTML.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{31DC90AB-38E6-496B-A74F-1123FB6E00A8}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>ZumoE2ETestAppHTML</RootNamespace>\n    <AssemblyName>ZumoE2ETestAppHTML</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>TestFramework\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"..\\..\\TestFramework\\css\\default.css\">\n      <Link>css\\default.css</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\testFramework.js\">\n      <Link>js\\testFramework.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\testFrameworkConnections.js\">\n      <Link>js\\testFrameworkConnections.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\allTests.js\">\n      <Link>js\\tests\\allTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\loginTests.js\">\n      <Link>js\\tests\\loginTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\miscTests.js\">\n      <Link>js\\tests\\miscTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\apiTests.js\">\n      <Link>js\\tests\\apiTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\pushTests.js\">\n      <Link>js\\tests\\pushTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\queryTestData.js\">\n      <Link>js\\tests\\queryTestData.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\queryTests.js\">\n      <Link>js\\tests\\queryTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\roundTripTests.js\">\n      <Link>js\\tests\\roundTripTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\updateDeleteTests.js\">\n      <Link>js\\tests\\updateDeleteTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"default.html\" />\n    <Content Include=\"js\\lib\\MobileServices.Web.js\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"js\\platformSpecificFunctions.js\" />\n    <Content Include=\"Web.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n    <None Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>1208</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:1076/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppHTML/default.html",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <title>ZumoE2ETestAppJs</title>\n\n\n    <!-- ZumoE2ETestAppJs references -->\n    <link href=\"../../TestFramework/css/default.css\" rel=\"stylesheet\" />\n    <script src=\"http://ajax.aspnetcdn.com/ajax/mobileservices/MobileServices.Web-1.2.2.js\"></script>\n\n    <!-- Uncomment for pre-release testing -->\n    <!-- <script src=\"../../TestFramework/js/lib/MobileServices.Web.js\"></script> -->\n    \n    <!-- Test framework scripts -->\n    <script src=\"js/platformSpecificFunctions.js\"></script>\n    <script src=\"../../TestFramework/js/testFramework.js\"></script>\n    <script src=\"../../TestFramework/js/tests/roundTripTests.js\" type=\"text/javascript\"></script>\n    <script src=\"../../TestFramework/js/tests/queryTestData.js\" type=\"text/javascript\"></script>\n    <script src=\"../../TestFramework/js/tests/queryTests.js\" type=\"text/javascript\"></script>\n    <script src=\"../../TestFramework/js/tests/updateDeleteTests.js\"></script>\n    <script src=\"../../TestFramework/js/tests/loginTests.js\" type=\"text/javascript\"></script>\n    <script src=\"../../TestFramework/js/tests/miscTests.js\" type=\"text/javascript\"></script>\n    <script src=\"../../TestFramework/js/tests/apiTests.js\" type=\"text/javascript\"></script>\n    <script src=\"../../TestFramework/js/tests/allTests.js\" type=\"text/javascript\"></script>\n\n\n</head>\n<body>\n    <table id='mainTable'>\n        <tr style=\"height: 100px;\">\n            <th colspan='2' class='borderedCell mainTitle'>Zumo E2E Test App - JS</th>\n        </tr>\n        <tr style=\"height: 150px;\">\n            <td class='borderedCell' colspan='2'>\n                <table style='width: 100%'>\n                    <tr>\n                        <th id='appUrlLabelCell'>App URL:</th>\n                        <th id='appUrlTextCell'>\n                            <input id='txtAppUrl' /></th>\n                        <th id='saveAppInfoCell'>\n                            <button id='btnSaveAppInfo'>Save App Info</button></th>\n                        <td>\n                            <button id=\"btnRunAllTests\">Run All Tests</button>\n                        </td>\n\n                    </tr>\n                    <tr>\n                        <th id='appKeyLabelCell'>App Key:</th>\n                        <th id='appKeyTextCell'>\n                            <input id='txtAppKey' /></th>\n                        <th id='loadAppInfoCell'>\n                            <button id='btnLoadAppInfo'>Load App Info</button></th>\n                        <td>\n                            <button id=\"btnRunAllUnattendedTests\">Run All Tests (unattended)</button>\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n        <tr>\n            <td id='testGroupsTableCell' class='borderedCell' style=\"vertical-align: text-top;\">\n                <table id='tblTestsGroup'>\n                    <thead>\n                        <tr>\n                            <th class='testsTitle'>Test Groups</th>\n                        </tr>\n                    </thead>\n                    <tbody id='tblTestsGroupBody'></tbody>\n                </table>\n            </td>\n            <td id='testsTableCell' class='borderedCell' style=\"vertical-align: text-top; height: 100%;\">\n                <table id='tblTests' style=\"width: 100%; height: 100%;\">\n                    <thead id=\"tblTestsHead\">\n                        <tr>\n                            <th id='testsTitle' class='testsTitle'>Tests for group: XXX</th>\n                        </tr>\n                        <tr>\n                            <td>\n                                <button id='btnRunTests' style=\"margin: 10px;\">Run Tests</button>\n                                <button id='btnResetTests' style=\"margin: 10px;\">Reset</button>\n                            </td>\n                        </tr>\n                        <tr>\n                            <td>\n                                <button style=\"margin: 10px; width: auto;\" id='btnSendLogs'>Send logs to:</button>\n                                <input type='text' id='txtSendLogsUrl' style='width: 75%; margin: 10px;' />\n                            </td>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td style=\"height: 100%;\">\n                                <div id='table-scroll' style=\"overflow: auto;\">\n                                    <table>\n                                        <tbody id=\"tblTestsBody\" style=\"overflow: auto;\"></tbody>\n                                    </table>\n                                </div>\n                            </td>\n                        </tr>\n                    </tbody>\n                </table>\n            </td>\n        </tr>\n    </table>\n    \n    <script src=\"../../TestFramework/js/testFrameworkConnections.js\"></script>\n    <script type=\"text/javascript\">\n        if (window.navigator.userAgent.toLowerCase().indexOf(\"firefox\") > 0) { //Firefox innerText define\n            HTMLElement.prototype.__defineGetter__(\"innerText\", function () {\n                var anyString = \"\";\n                var childS = this.childNodes;\n                for (var i = 0; i < childS.length; i++) {\n                    if (childS[i].nodetype == Node.ELEMENT_NODE) {\n                        anyString += childS[i].tagname == \"br\" ? '\\n' : childS[i].innertext;\n                    }\n                    else if (childS[i].nodeType == Node.TEXT_NODE) {\n                        anyString += childS[i].nodeValue;\n                    }\n                }\n                return anyString;\n            });\n\n            HTMLElement.prototype.__defineSetter__(\"innerText\", function (sText) {\n                this.textContent = sText;\n            });\n        }\n    </script>\n\n</body>\n</html>\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppHTML/js/lib/MobileServices.Web.js",
    "content": "﻿// ----------------------------------------------------------------------------\n//! Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n\n// WARNING: This code was generated by a tool from the library definition\n//     MobileServices.library\n// Do not modify this file directly.  Any changes made to this file will be\n// lost the next time it is regenerated.\n\n\n(function (global) {\n    /// <field name=\"$__modules__\">\n    /// Map module names to either their cached exports or a function which\n    /// will define the module's exports when invoked.\n    /// </field>\n    var $__modules__ = {};\n    var $__fileVersion__ = \"1.0.20702.0\";\n\n    function require(name) {\n        /// <summary>\n        /// Require a module's exports.\n        /// </summary>\n        /// <param name=\"name\" type=\"String\">\n        /// The name of the module.  Note that we don't support full CommonJS\n        /// Module specification names here - we only allow the name of the\n        /// module's file without any extension.\n        /// </param>\n        /// <returns type=\"Object\">\n        /// The exports provided by the module.\n        /// </returns>\n\n        if (name && name.length > 2 && name[0] == '.' && name[1] == '/') {\n            name = name.slice(2);\n        }\n\n        var existing = $__modules__[name];\n        if (typeof existing == 'function') {\n            var exports = {};\n            $__modules__[name] = exports;\n            existing(exports);\n            return exports;\n        } else if (typeof existing == 'object') {\n            return existing;\n        } else {\n            throw 'Unknown module ' + name;\n        }\n    }\n\n    $__modules__.Resources = {};\n\n    $__modules__.Resources['en-US'] =\n        {\n            \"Validate_NotNullError\": \"{0} cannot be null.\",\n            \"Validate_NotNullOrEmptyError\": \"{0} cannot be null or empty.\",\n            \"Validate_InvalidId\": \"{0} is not valid.\",\n            \"Validate_TypeCheckError\": \"{0} is expected to be a value of type {1}, not {2}.\",\n            \"Validate_LengthUnexpected\": \"{0} is expected to have length {1}, not {2}.\",\n            \"Validate_InvalidUserParameter\": \"{0} contains an invalid user-defined query string parameter: {1}. User-defined query string parameters must not begin with a '$'.\",\n            \"Extensions_DefaultErrorMessage\": \"Unexpected failure.\",\n            \"Extensions_ConnectionFailureMessage\": \"Unexpected connection failure.\",\n            \"MobileServiceTable_ReadMismatchedQueryTables\": \"Cannot get the results of a query for table '{1}' via table '{0}'.\",\n            \"MobileServiceTable_InsertIdAlreadySet\": \"Cannot insert if the {0} member is already set.\",\n            \"MobileServiceLogin_AuthenticationProviderNotSupported\": \"Unsupported authentication provider name. Please specify one of {0}.\",\n            \"MobileServiceLogin_LoginErrorResponse\": \"Cannot start a login operation because login is already in progress.\",\n            \"MobileServiceLogin_InvalidResponseFormat\": \"Invalid format of the authentication response.\",\n            \"MobileServiceLogin_InvalidProvider\": \"The first parameter must be the name of the autentication provider or a Microsoft Account authentication token.\",\n            \"MobileServiceTable_NotSingleObject\": \"Could not get object from response {0}.\",\n            \"Push_ConflictWithReservedName\": \"Template name conflicts with reserved name '{0}'.\",\n            \"Push_InvalidTemplateName\": \"Template name can't contain ';' or ':'.\",\n            \"Push_NotSupportedXMLFormatAsBodyTemplateWin8\": \"The bodyTemplate is not in accepted XML format. The first node of the bodyTemplate should be Badge\\/Tile\\/Toast, except for the wns\\/raw template, which need to be a valid XML.\",\n            \"Push_BodyTemplateMustBeXml\": \"Valid XML is required for any template without a raw header.\",\n            \"Push_TagNoCommas\": \"Tags must not contain ','.\"\n        };\n\n    $__modules__.MobileServiceClient = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"Generated\\MobileServices.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Validate = require('Validate');\n        var Platform = require('Platform');\n        var MobileServiceTable = require('MobileServiceTable').MobileServiceTable;\n        var MobileServiceLogin = require('MobileServiceLogin').MobileServiceLogin;\n        var Push;\n        try {\n            Push = require('Push').Push;\n        } catch (e) { }\n\n        function MobileServiceClient(applicationUrl, applicationKey) {\n            /// <summary>\n            /// Initializes a new instance of the MobileServiceClient class.\n            /// </summary>\n            /// <param name=\"applicationUrl\" type=\"string\" mayBeNull=\"false\">\n            /// The URL to the Mobile Services application.\n            /// </param>\n            /// <param name=\"applicationKey\" type=\"string\" mayBeNull=\"false\">\n            /// The Mobile Service application's key.\n            /// </param>\n\n            Validate.isString(applicationUrl, 'applicationUrl');\n            Validate.notNullOrEmpty(applicationUrl, 'applicationUrl');\n            Validate.isString(applicationKey, 'applicationKey');\n\n            this.applicationUrl = applicationUrl;\n            this.applicationKey = applicationKey || null;\n\n            var sdkInfo = Platform.getSdkInfo();\n            var osInfo = Platform.getOperatingSystemInfo();\n            var sdkVersion = sdkInfo.fileVersion.split(\".\").slice(0, 2).join(\".\");\n            this.version = \"ZUMO/\" + sdkVersion + \" (lang=\" + sdkInfo.language + \"; \" +\n                                                    \"os=\" + osInfo.name + \"; \" +\n                                                    \"os_version=\" + osInfo.version + \"; \" +\n                                                    \"arch=\" + osInfo.architecture + \"; \" +\n                                                    \"version=\" + sdkInfo.fileVersion + \")\";\n            this.currentUser = null;\n            this._serviceFilter = null;\n            this._login = new MobileServiceLogin(this);\n            this.getTable = function (tableName) {\n                /// <summary>\n                /// Gets a reference to a table and its data operations.\n                /// </summary>\n                /// <param name=\"tableName\">The name of the table.</param>\n                /// <returns>A reference to the table.</returns>\n\n                Validate.isString(tableName, 'tableName');\n                Validate.notNullOrEmpty(tableName, 'tableName');\n                return new MobileServiceTable(tableName, this);\n            };\n\n            if (Push) {\n                this.push = new Push(this);\n            }\n        }\n\n        // Export the MobileServiceClient class\n        exports.MobileServiceClient = MobileServiceClient;\n\n        // Define the MobileServiceClient in a namespace (note: this has global effects\n        // unless the platform we're using chooses to ignore it because exports are\n        // good enough).\n        Platform.addToMobileServicesClientNamespace({ MobileServiceClient: MobileServiceClient });\n\n        MobileServiceClient.prototype.withFilter = function (serviceFilter) {\n            /// <summary>\n            /// Create a new MobileServiceClient with a filter used to process all\n            /// of its HTTP requests and responses.\n            /// </summary>\n            /// <param name=\"serviceFilter\" type=\"Function\">\n            /// The filter to use on the service.  The signature of a serviceFilter is\n            ///    function(request, next, callback)\n            ///  where\n            ///    next := function(request, callback)\n            ///    callback := function(error, response)\n            /// </param>\n            /// <returns type=\"MobileServiceClient\">\n            /// A new MobileServiceClient whose HTTP requests and responses will be\n            /// filtered as desired.\n            /// </returns>\n            /// <remarks>\n            /// The Mobile Services HTTP pipeline is a chain of filters composed\n            /// together by giving each the next operation which it can invoke\n            /// (zero, one, or many times as necessary).  The default continuation\n            /// of a brand new MobileServiceClient will just get the HTTP response\n            /// for the corresponding request.  Here's an example of a Handle\n            /// implementation that will automatically retry a request that times\n            /// out.\n            ///     function(req, next, callback) {\n            ///         next(req, function(err, rsp) {\n            ///           if (rsp.statusCode >= 400) {\n            ///               next(req, callback);\n            ///           } else {\n            ///               callback(err, rsp);\n            ///           }\n            ///         });\n            ///     }\n            /// Note that because these operations are asynchronous, this sample\n            /// filter could end up actually making two HTTP requests before\n            /// returning a response to the developer without the developer writing\n            /// any special code to handle the situation.\n            /// -\n            /// Filters are composed just like standard function composition.  If\n            /// we had new MobileServiceClient().withFilter(F1).withFilter(F2)\n            /// .withFilter(F3), it's conceptually equivalent to saying:\n            ///     var response = F3(F2(F1(next(request)));\n            /// </remarks>\n\n            Validate.notNull(serviceFilter, 'serviceFilter');\n\n            // Clone the current instance\n            var client = new MobileServiceClient(this.applicationUrl, this.applicationKey);\n            client.currentUser = this.currentUser;\n\n            // Chain the service filter with any existing filters\n            var existingFilter = this._serviceFilter;\n            client._serviceFilter = _.isNull(existingFilter) ?\n                serviceFilter :\n                function (req, next, callback) {\n                    // compose existingFilter with next so it can be used as the next\n                    // of the new serviceFilter\n                    var composed = function (req, callback) {\n                        existingFilter(req, next, callback);\n                    };\n                    serviceFilter(req, composed, callback);\n                };\n\n            return client;\n        };\n\n        MobileServiceClient.prototype._request = function (method, uriFragment, content, ignoreFilters, headers, callback) {\n            /// <summary>\n            /// Perform a web request and include the standard Mobile Services headers.\n            /// </summary>\n            /// <param name=\"method\" type=\"string\">\n            /// The HTTP method used to request the resource.\n            /// </param>\n            /// <param name=\"uriFragment\" type=\"String\">\n            /// URI of the resource to request (relative to the Mobile Services\n            /// runtime).\n            /// </param>\n            /// <param name=\"content\" type=\"Object\">\n            /// Optional content to send to the resource.\n            /// </param>\n            /// <param name=\"ignoreFilters\" type=\"Boolean\" mayBeNull=\"true\">\n            /// Optional parameter to indicate if the client filters should be ignored\n            /// and the request should be sent directly. Is false by default.\n            /// </param>\n            /// <param name=\"headers\" type=\"Object\">\n            /// Optional request headers\n            /// </param>\n            /// <param name=\"callback\" type=\"function(error, response)\">\n            /// Handler that will be called on the response.\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback) && (typeof headers === 'function')) {\n                callback = headers;\n                headers = null;\n            }\n\n            if (_.isNull(callback) && (typeof ignoreFilters === 'function')) {\n                callback = ignoreFilters;\n                ignoreFilters = false;\n            }\n\n            if (_.isNull(callback) && (typeof content === 'function')) {\n                callback = content;\n                content = null;\n            }\n\n            Validate.isString(method, 'method');\n            Validate.notNullOrEmpty(method, 'method');\n            Validate.isString(uriFragment, 'uriFragment');\n            Validate.notNull(uriFragment, 'uriFragment');\n            Validate.notNull(callback, 'callback');\n\n            // Create the absolute URI\n            var options = { type: method.toUpperCase() };\n            options.url = _.url.combinePathSegments(this.applicationUrl, uriFragment);\n\n            // Set MobileServices authentication, application, User-Agent and telemetry headers\n            options.headers = {};\n            if (!_.isNull(headers)) {\n                _.extend(options.headers, headers);\n            }\n            options.headers[\"X-ZUMO-INSTALLATION-ID\"] = MobileServiceClient._applicationInstallationId;\n            if (!_.isNullOrEmpty(this.applicationKey)) {\n                options.headers[\"X-ZUMO-APPLICATION\"] = this.applicationKey;\n            }\n            if (this.currentUser && !_.isNullOrEmpty(this.currentUser.mobileServiceAuthenticationToken)) {\n                options.headers[\"X-ZUMO-AUTH\"] = this.currentUser.mobileServiceAuthenticationToken;\n            }\n            if (!_.isNull(MobileServiceClient._userAgent)) {\n                options.headers[\"User-Agent\"] = MobileServiceClient._userAgent;\n            }\n            if (!_.isNullOrEmpty[\"X-ZUMO-VERSION\"]) {\n                options.headers[\"X-ZUMO-VERSION\"] = this.version;\n            }\n\n            // Add any content as JSON\n            if (!_.isNull(content)) {\n                if (!_.isString(content)) {\n                    options.data = _.toJson(content);\n                } else {\n                    options.data = content;\n                }\n\n                if (!_.hasProperty(options.headers, ['Content-Type', 'content-type', 'CONTENT-TYPE', 'Content-type'])) {\n                    options.headers['Content-Type'] = 'application/json';\n                }\n            } else {\n                // options.data must be set to null if there is no content or the xhr object\n                // will set the content-type to \"application/text\" for non-GET requests.\n                options.data = null;\n            }\n\n            // Treat any >=400 status codes as errors.  Also treat the status code 0 as\n            // an error (which indicates a connection failure).\n            var handler = function (error, response) {\n                if (!_.isNull(error)) {\n                    error = _.createError(error);\n                } else if (!_.isNull(response) && (response.status >= 400 || response.status === 0)) {\n                    error = _.createError(null, response);\n                    response = null;\n                }\n                callback(error, response);\n            };\n\n            // Make the web request\n            if (!_.isNull(this._serviceFilter) && !ignoreFilters) {\n                this._serviceFilter(options, Platform.webRequest, handler);\n            } else {\n                Platform.webRequest(options, handler);\n            }\n        };\n\n        MobileServiceClient.prototype.login = Platform.async(\n            function (provider, token, useSingleSignOn, callback) {\n                /// <summary>\n                /// Log a user into a Mobile Services application given a provider name and optional \n                /// authentication token.\n                /// </summary>\n                /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">\n                /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', \n                /// 'windowsazureactivedirectory' (can also use 'aad')\n                /// or 'microsoftaccount'. If no provider is specified, the 'token' parameter\n                /// is considered a Microsoft Account authentication token. If a provider is specified, \n                /// the 'token' parameter is considered a provider-specific authentication token.\n                /// </param>\n                /// <param name=\"token\" type=\"Object\" mayBeNull=\"true\">\n                /// Optional, provider specific object with existing OAuth token to log in with.\n                /// </param>\n                /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n                /// Only applies to Windows 8 clients.  Will be ignored on other platforms.\n                /// Indicates if single sign-on should be used. Single sign-on requires that the \n                /// application's Package SID be registered with the Microsoft Azure Mobile Service, \n                /// but it provides a better experience as HTTP cookies are supported so that users \n                /// do not have to login in everytime the application is launched.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n                /// Optional callback accepting (error, user) parameters.\n                /// </param>\n                this._login.login(provider, token, useSingleSignOn, callback);\n            });\n\n        MobileServiceClient.prototype.logout = function () {\n            /// <summary>\n            /// Log a user out of a Mobile Services application.\n            /// </summary>\n            this.currentUser = null;\n        };\n\n        MobileServiceClient.prototype.invokeApi = Platform.async(\n            function (apiName, options, callback) {\n                /// <summary>\n                /// Invokes the specified custom api and returns a response object.\n                /// </summary>\n                /// <param name=\"apiName\">\n                /// The custom api to invoke.\n                /// </param>\n                /// <param name=\"options\" mayBeNull=\"true\">\n                /// Contains additional parameter information, valid values are:\n                /// body: The body of the HTTP request.\n                /// method: The HTTP method to use in the request, with the default being POST,\n                /// parameters: Any additional query string parameters, \n                /// headers: HTTP request headers, specified as an object.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n                /// Optional callback accepting (error, results) parameters.\n                /// </param>\n\n                Validate.isString(apiName, 'apiName');\n\n                // Account for absent optional arguments\n                if (_.isNull(callback)) {\n                    if (typeof options === 'function') {\n                        callback = options;\n                        options = null;\n                    }\n                }\n                Validate.notNull(callback, 'callback');\n\n                var parameters, method, body, headers;\n                if (!_.isNull(options)) {\n                    parameters = options.parameters;\n                    if (!_.isNull(parameters)) {\n                        Validate.isValidParametersObject(options.parameters);\n                    }\n\n                    method = options.method;\n                    body = options.body;\n                    headers = options.headers;\n                }\n                if (_.isNull(method)) {\n                    method = \"POST\";\n                }\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(\"api\", apiName);\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this._request(\n                    method,\n                    urlFragment,\n                    body,\n                    null,\n                    headers,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            callback(error, null);\n                        } else {\n                            if (typeof response.getResponseHeader === 'undefined') { // (when using IframeTransport, IE9)\n                                try {\n                                    response.result = _.fromJson(response.responseText);\n                                } catch (e) {\n                                    // Do nothing, since we don't know the content-type, failing may be ok\n                                }\n                            } else if (response.getResponseHeader('Content-Type').toLowerCase().indexOf('json') !== -1) {\n                                response.result = _.fromJson(response.responseText);\n                            }\n\n                            callback(null, response);\n                        }\n                    });\n\n            });\n\n        function getApplicationInstallationId() {\n            /// <summary>\n            /// Gets or creates the static application installation ID.\n            /// </summary>\n            /// <returns type=\"string\">\n            /// The application installation ID.\n            /// </returns>\n\n            // Get or create a new installation ID that can be passed along on each\n            // request to provide telemetry data\n            var applicationInstallationId = null;\n\n            // Check if the config settings exist\n            var path = \"MobileServices.Installation.config\";\n            var contents = Platform.readSetting(path);\n            if (!_.isNull(contents)) {\n                // Parse the contents of the file as JSON and pull out the\n                // application's installation ID.\n                try {\n                    var config = _.fromJson(contents);\n                    applicationInstallationId = config.applicationInstallationId;\n                } catch (ex) {\n                    // Ignore any failures (like invalid JSON, etc.) which will allow\n                    // us to fall through to and regenerate a valid config below\n                }\n            }\n\n            // If no installation ID was found, generate a new one and save the config\n            // settings.  This is pulled out as a separate function because we'll do it\n            // even if we successfully read an existing config but there's no\n            // installation ID.\n            if (_.isNullOrEmpty(applicationInstallationId)) {\n                applicationInstallationId = _.createUniqueInstallationId();\n\n                // TODO: How many other settings should we write out as well?\n                var configText = _.toJson({ applicationInstallationId: applicationInstallationId });\n                Platform.writeSetting(path, configText);\n            }\n\n            return applicationInstallationId;\n        }\n\n\n        /// <summary>\n        /// Get or set the static _applicationInstallationId by checking the settings\n        /// and create the value if necessary.\n        /// </summary>\n        MobileServiceClient._applicationInstallationId = getApplicationInstallationId();\n\n        /// <summary>\n        /// Get or set the static _userAgent by calling into the Platform.\n        /// </summary>\n        MobileServiceClient._userAgent = Platform.getUserAgent();\n\n\n    };\n\n    $__modules__.MobileServiceTable = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"Generated\\MobileServices.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Validate = require('Validate');\n        var Platform = require('Platform');\n        var Query = require('Query').Query;\n\n        // Name of the reserved Mobile Services ID member.\n        var idPropertyName = \"id\";\n\n        // The route separator used to denote the table in a uri like\n        // .../{app}/collections/{coll}.\n        var tableRouteSeperatorName = \"tables\";\n        var idNames = [\"ID\", \"Id\", \"id\", \"iD\"];\n\n        var MobileServiceSystemProperties = {\n            None: 0,\n            CreatedAt: 1,\n            UpdatedAt: 2,\n            Version: 4,\n            All: 0xFFFF\n        };\n\n        var MobileServiceSystemColumns = {\n            CreatedAt: \"__createdAt\",\n            UpdatedAt: \"__updatedAt\",\n            Version: \"__version\"\n        };\n\n        Platform.addToMobileServicesClientNamespace({\n            MobileServiceTable:\n                {\n                    SystemProperties: MobileServiceSystemProperties\n                }\n        });\n\n        function MobileServiceTable(tableName, client) {\n            /// <summary>\n            /// Initializes a new instance of the MobileServiceTable class.\n            /// </summary>\n            /// <param name=\"tableName\" type=\"String\">\n            /// Name of the table.\n            /// </param>\n            /// <param name=\"client\" type=\"MobileServiceClient\" mayBeNull=\"false\">\n            /// The MobileServiceClient used to make requests.\n            /// </param>\n\n            this.getTableName = function () {\n                /// <summary>\n                /// Gets the name of the table.\n                /// </summary>\n                /// <returns type=\"String\">The name of the table.</returns>\n                return tableName;\n            };\n\n            this.getMobileServiceClient = function () {\n                /// <summary>\n                /// Gets the MobileServiceClient associated with this table.\n                /// </summary>\n                /// <returns type=\"MobileServiceClient\">\n                /// The MobileServiceClient associated with this table.\n                /// </returns>\n                return client;\n            };\n\n            this.systemProperties = 0;\n        }\n\n        // Export the MobileServiceTable class\n        exports.MobileServiceTable = MobileServiceTable;\n\n        // We have an internal _read method using callbacks since it's used by both\n        // table.read(query) and query.read().\n        MobileServiceTable.prototype._read = function (query, parameters, callback) {\n            /// <summary>\n            /// Query a table.\n            /// </summary>\n            /// <param name=\"query\" type=\"Object\" mayBeNull=\"true\">\n            /// The query to execute.  It can be null or undefined to get the entire\n            /// collection.\n            /// </param>\n            /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n            /// An object of user-defined parameters and values to include in the request URI query string.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// The callback to invoke when the query is complete.\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback)) {\n                if (_.isNull(parameters) && (typeof query === 'function')) {\n                    callback = query;\n                    query = null;\n                    parameters = null;\n                } else if (typeof parameters === 'function') {\n                    callback = parameters;\n                    parameters = null;\n                    if (!_.isNull(query) && _.isObject(query)) {\n                        // This 'query' argument could be either the query or the user-defined \n                        // parameters object since both are optional.  A query is either (a) a simple string \n                        // or (b) an Object with an toOData member. A user-defined parameters object is just \n                        // an Object.  We need to detect which of these has been passed in here.\n                        if (!_.isString(query) && _.isNull(query.toOData)) {\n                            parameters = query;\n                            query = null;\n                        }\n                    }\n                }\n            }\n\n            // Validate the arguments\n            if (query && _.isString(query)) {\n                Validate.notNullOrEmpty(query, 'query');\n            }\n            if (!_.isNull(parameters)) {\n                Validate.isValidParametersObject(parameters, 'parameters');\n            }\n            Validate.notNull(callback, 'callback');\n\n            // Get the query string\n            var tableName = this.getTableName();\n            var queryString = null;\n            var projection = null;\n            if (_.isString(query)) {\n                queryString = query;\n            } else if (_.isObject(query) && !_.isNull(query.toOData)) {\n                if (query.getComponents) {\n                    var components = query.getComponents();\n                    projection = components.projection;\n                    if (components.table) {\n                        // If the query has a table name, make sure it's compatible with\n                        // the table executing the query\n\n                        if (tableName !== components.table) {\n                            var message = _.format(Platform.getResourceString(\"MobileServiceTable_ReadMismatchedQueryTables\"), tableName, components.table);\n                            callback(_.createError(message), null);\n                            return;\n                        }\n\n                        // The oDataQuery will include the table name; we need to remove\n                        // because the url fragment already includes the table name.\n                        var oDataQuery = query.toOData();\n                        queryString = oDataQuery.replace(new RegExp('^/' + components.table), '');\n                    }\n                }\n            }\n\n            // Add any user-defined query string parameters\n            parameters = addSystemProperties(parameters, this.systemProperties, queryString);\n            if (!_.isNull(parameters)) {\n                var userDefinedQueryString = _.url.getQueryString(parameters);\n                if (!_.isNullOrEmpty(queryString)) {\n                    queryString += '&' + userDefinedQueryString;\n                }\n                else {\n                    queryString = userDefinedQueryString;\n                }\n            }\n\n            // Construct the URL\n            var urlFragment = _.url.combinePathSegments(tableRouteSeperatorName, tableName);\n            if (!_.isNull(queryString)) {\n                urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n            }\n\n            // Make the request\n            this.getMobileServiceClient()._request(\n                'GET',\n                urlFragment,\n                null,\n                function (error, response) {\n                    var values = null;\n                    if (_.isNull(error)) {\n                        // Parse the response\n                        values = _.fromJson(response.responseText);\n\n                        // If the values include the total count, we'll attach that\n                        // directly to the array\n                        if (values &&\n                            !Array.isArray(values) &&\n                            typeof values.count !== 'undefined' &&\n                            typeof values.results !== 'undefined') {\n                            // Create a new total count property on the values array\n                            values.results.totalCount = values.count;\n                            values = values.results;\n                        }\n\n                        // If we have a projection function, apply it to each item\n                        // in the collection\n                        if (projection !== null) {\n                            var i = 0;\n                            for (i = 0; i < values.length; i++) {\n                                values[i] = projection.call(values[i]);\n                            }\n                        }\n                    }\n                    callback(error, values);\n                });\n        };\n\n        MobileServiceTable.prototype.read = Platform.async(MobileServiceTable.prototype._read);\n\n        MobileServiceTable.prototype.insert = Platform.async(\n            function (instance, parameters, callback) {\n                /// <summary>\n                /// Insert a new object into a table.\n                /// </summary>\n                /// <param name=\"instance\" type=\"Object\">\n                /// The instance to insert into the table.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the insert is complete.\n                /// </param>\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.notNull(instance, 'instance');\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters);\n                }\n                Validate.notNull(callback, 'callback');\n\n                // Integer Ids can not have any Id set\n                for (var i in idNames) {\n                    var id = instance[idNames[i]];\n\n                    if (!_.isNullOrZero(id)) {\n                        if (_.isString(id)) {\n                            // String Id's are allowed iif using 'id'\n                            if (idNames[i] !== idPropertyName) {\n                                throw _.format(\n                                    Platform.getResourceString(\"MobileServiceTable_InsertIdAlreadySet\"),\n                                    idPropertyName);\n                            } else {\n                                Validate.isValidId(id, idPropertyName);\n                            }\n                        } else {\n                            throw _.format(\n                                Platform.getResourceString(\"MobileServiceTable_InsertIdAlreadySet\"),\n                                idPropertyName);\n                        }\n                    }\n                }\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(tableRouteSeperatorName, this.getTableName());\n                parameters = addSystemProperties(parameters, this.systemProperties);\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'POST',\n                    urlFragment,\n                    instance,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            callback(error, null);\n                        } else {\n                            var result = getItemFromResponse(response);\n                            result = Platform.allowPlatformToMutateOriginal(instance, result);\n                            callback(null, result);\n                        }\n                    });\n            });\n\n        MobileServiceTable.prototype.update = Platform.async(\n            function (instance, parameters, callback) {\n                /// <summary>\n                /// Update an object in a given table.\n                /// </summary>\n                /// <param name=\"instance\" type=\"Object\">\n                /// The instance to update in the table.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the update is complete.\n                /// </param>\n                var version,\n                    headers = [],\n                    serverInstance;\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.notNull(instance, 'instance');\n                Validate.isValidId(instance[idPropertyName], 'instance.' + idPropertyName);\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters, 'parameters');\n                }\n                Validate.notNull(callback, 'callback');\n\n                if (_.isString(instance[idPropertyName])) {\n                    version = instance.__version;\n                    serverInstance = removeSystemProperties(instance);\n                } else {\n                    serverInstance = instance;\n                }\n                parameters = addSystemProperties(parameters, this.systemProperties);\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(\n                        tableRouteSeperatorName,\n                        this.getTableName(),\n                        encodeURIComponent(instance[idPropertyName].toString()));\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                if (!_.isNullOrEmpty(version)) {\n                    headers['If-Match'] = getEtagFromVersion(version);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'PATCH',\n                    urlFragment,\n                    serverInstance,\n                    false,\n                    headers,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            setServerItemIfPreconditionFailed(error);\n                            callback(error);\n                        } else {\n                            var result = getItemFromResponse(response);\n                            result = Platform.allowPlatformToMutateOriginal(instance, result);\n                            callback(null, result);\n                        }\n                    });\n            });\n\n        MobileServiceTable.prototype.refresh = Platform.async(\n            function (instance, parameters, callback) {\n                /// <summary>\n                ///  Refresh the current instance with the latest values from the\n                ///  table.\n                /// </summary>\n                /// <param name=\"instance\" type=\"Object\">\n                /// The instance to refresh.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the refresh is complete.\n                /// </param>\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.notNull(instance, 'instance');\n                if (!_.isValidId(instance[idPropertyName], idPropertyName)) {\n                    if (typeof instance[idPropertyName] === 'string' && instance[idPropertyName] !== '') {\n                        throw _.format(Platform.getResourceString(\"Validate_InvalidId\"), idPropertyName);\n                    } else {\n                        callback(null, instance);\n                    }\n                    return;\n                }\n\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters, 'parameters');\n                }\n                Validate.notNull(callback, 'callback');\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(\n                        tableRouteSeperatorName,\n                        this.getTableName());\n\n                if (typeof instance[idPropertyName] === 'string') {\n                    var id = encodeURIComponent(instance[idPropertyName]).replace(/\\'/g, '%27%27');\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, \"?$filter=id eq '\" + id + \"'\");\n                } else {\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, \"?$filter=id eq \" + encodeURIComponent(instance[idPropertyName].toString()));\n                }\n\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'GET',\n                    urlFragment,\n                    instance,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            callback(error, null);\n                        } else {\n                            var result = _.fromJson(response.responseText);\n                            if (Array.isArray(result)) {\n                                result = result[0]; //get first object from array\n                            }\n\n                            if (!result) {\n                                var message = _.format(\n                                    Platform.getResourceString(\"MobileServiceTable_NotSingleObject\"),\n                                    idPropertyName);\n                                callback(_.createError(message), null);\n                            }\n\n                            result = Platform.allowPlatformToMutateOriginal(instance, result);\n                            callback(null, result);\n                        }\n                    });\n            });\n\n        MobileServiceTable.prototype.lookup = Platform.async(\n            function (id, parameters, callback) {\n                /// <summary>\n                /// Gets an instance from a given table.\n                /// </summary>\n                /// <param name=\"id\" type=\"Number\" integer=\"true\">\n                /// The id of the instance to get from the table.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the lookup is complete.\n                /// </param>\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.isValidId(id, idPropertyName);\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters);\n                }\n                Validate.notNull(callback, 'callback');\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(\n                        tableRouteSeperatorName,\n                        this.getTableName(),\n                        encodeURIComponent(id.toString()));\n\n                parameters = addSystemProperties(parameters, this.systemProperties);\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'GET',\n                    urlFragment,\n                    null,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            callback(error, null);\n                        } else {\n                            var result = getItemFromResponse(response);\n                            callback(null, result);\n                        }\n                    });\n            });\n\n        MobileServiceTable.prototype.del = Platform.async(\n            function (instance, parameters, callback) {\n                /// <summary>\n                /// Delete an object from a given table.\n                /// </summary>\n                /// <param name=\"instance\" type=\"Object\">\n                /// The instance to delete from the table.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the delete is complete.\n                /// </param>\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.notNull(instance, 'instance');\n                Validate.isValidId(instance[idPropertyName], 'instance.' + idPropertyName);\n                parameters = addSystemProperties(parameters, this.systemProperties);\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters);\n                }\n                Validate.notNull(callback, 'callback');\n\n                var headers = [];\n\n                if (_.isString(instance[idPropertyName])) {\n                    if (!_.isNullOrEmpty(instance.__version)) {\n                        headers['If-Match'] = getEtagFromVersion(instance.__version);\n                    }\n                }\n\n                // Contruct the URL\n                var urlFragment = _.url.combinePathSegments(\n                        tableRouteSeperatorName,\n                        this.getTableName(),\n                        encodeURIComponent(instance[idPropertyName].toString()));\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'DELETE',\n                    urlFragment,\n                    null,\n                    false,\n                    headers,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            setServerItemIfPreconditionFailed(error);\n                        }\n                        callback(error);\n                    });\n            });\n\n        // Copy select Query operators to MobileServiceTable so queries can be created\n        // compactly.  We'll just add them to the MobileServiceTable prototype and then\n        // forward on directly to a new Query instance.\n        var queryOperators =\n            ['where', 'select', 'orderBy', 'orderByDescending', 'skip', 'take', 'includeTotalCount'];\n        var copyOperator = function (operator) {\n            MobileServiceTable.prototype[operator] = function () {\n                /// <summary>\n                /// Creates a new query.\n                /// </summary>\n\n                // Create a query associated with this table\n                var table = this;\n                var query = new Query(table.getTableName());\n\n                // Add a .read() method on the query which will execute the query.\n                // This method is defined here per query instance because it's\n                // implicitly tied to the table.\n                query.read = Platform.async(\n                    function (parameters, callback) {\n                        /// <summary>\n                        /// Execute the query.\n                        /// </summary>                \n                        table._read(query, parameters, callback);\n                    });\n\n                // Invoke the query operator on the newly created query\n                return query[operator].apply(query, arguments);\n            };\n        };\n        var i = 0;\n        for (; i < queryOperators.length; i++) {\n            // Avoid unintended closure capture\n            copyOperator(queryOperators[i]);\n        }\n\n        // Table system properties\n        function removeSystemProperties(instance) {\n            var copy = {};\n            for (var property in instance) {\n                if (property.substr(0, 2) !== '__') {\n                    copy[property] = instance[property];\n                }\n            }\n            return copy;\n        }\n\n        function addSystemProperties(parameters, properties, querystring) {\n            if (properties === MobileServiceSystemProperties.None || (typeof querystring === 'string' && querystring.toLowerCase().indexOf('__systemproperties') >= 0)) {\n                return parameters;\n            }\n\n            // Initialize an object if none passed in\n            parameters = parameters || {};\n\n            // Don't override system properties if already set\n            if (!_.isNull(parameters['__systemProperties'])) {\n                return parameters;\n            }\n\n            if (properties === MobileServiceSystemProperties.All) {\n                parameters['__systemProperties'] = '*';\n            } else {\n                var options = [];\n                if (MobileServiceSystemProperties.CreatedAt & properties) {\n                    options.push(MobileServiceSystemColumns.CreatedAt);\n                }\n                if (MobileServiceSystemProperties.UpdatedAt & properties) {\n                    options.push(MobileServiceSystemColumns.UpdatedAt);\n                }\n                if (MobileServiceSystemProperties.Version & properties) {\n                    options.push(MobileServiceSystemColumns.Version);\n                }\n                parameters['__systemProperties'] = options.join(',');\n            }\n\n            return parameters;\n        }\n\n        // Add double quotes and unescape any internal quotes\n        function getItemFromResponse(response) {\n            var result = _.fromJson(response.responseText);\n            if (response.getResponseHeader) {\n                var eTag = response.getResponseHeader('ETag');\n                if (!_.isNullOrEmpty(eTag)) {\n                    result.__version = getVersionFromEtag(eTag);\n                }\n            }\n            return result;\n        }\n\n        // Converts an error to precondition failed error\n        function setServerItemIfPreconditionFailed(error) {\n            if (error.request && error.request.status === 412) {\n                error.serverInstance = _.fromJson(error.request.responseText);\n            }\n        }\n\n        // Add wrapping double quotes and escape all double quotes\n        function getEtagFromVersion(version) {\n            var result = version.replace(/\\\"/g, '\\\\\\\"');\n            return \"\\\"\" + result + \"\\\"\";\n        }\n\n        // Remove surrounding double quotes and unescape internal quotes\n        function getVersionFromEtag(etag) {\n            var len = etag.length,\n                result = etag;\n\n            if (len > 1 && etag[0] === '\"' && etag[len - 1] === '\"') {\n                result = etag.substr(1, len - 2);\n            }\n            return result.replace(/\\\\\\\"/g, '\"');\n        }\n    };\n\n    $__modules__.MobileServiceLogin = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"Generated\\MobileServices.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Validate = require('Validate');\n        var Platform = require('Platform');\n\n        var loginUrl = \"login\";\n        var loginDone = \"done\";\n\n        function MobileServiceLogin(client, ignoreFilters) {\n            /// <summary>\n            /// Initializes a new instance of the MobileServiceLogin class.\n            /// </summary>\n            /// <param name=\"client\" type=\"MobileServiceClient\" mayBeNull=\"false\">\n            /// Reference to the MobileServiceClient associated with this login.\n            /// </param>\n            /// <param name=\"ignoreFilters\" type=\"Boolean\" mayBeNull=\"true\">\n            /// Optional parameter to indicate if the client filters should be ignored\n            /// and requests should be sent directly. Is true by default. This should\n            /// only be set to false for testing purposes when filters are needed to intercept\n            /// and validate requests and responses.\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(ignoreFilters)) {\n                ignoreFilters = true;\n            }\n\n            // Validate arguments\n            Validate.notNull(client);\n            Validate.isObject(client, 'client');\n\n            // Create read/write fields\n            this._loginState = { inProcess: false, cancelCallback: null };\n            this.ignoreFilters = ignoreFilters;\n\n            // Create get accessors for read-only fields\n            this.getMobileServiceClient = function () {\n                /// <summary>\n                /// Gets the MobileServiceClient associated with this table.\n                /// <summary>\n                /// <returns type=\"MobileServiceClient\">\n                /// The MobileServiceClient associated with this table.\n                /// </returns>\n                return client;\n            };\n\n            this.getLoginInProcess = function () {\n                /// <summary>\n                /// Indicates if a login is currently in process or not.\n                /// <summary>\n                /// <returns type=\"Boolean\">\n                /// True if a login is in process and false otherwise.\n                /// </returns>\n                return this._loginState.inProcess;\n            };\n        }\n\n        // Export the MobileServiceLogin class\n        exports.MobileServiceLogin = MobileServiceLogin;\n\n        // Define the MobileServiceLogin in a namespace (note: this has global effects\n        // unless the platform we're using chooses to ignore it because exports are\n        // good enough).\n        Platform.addToMobileServicesClientNamespace({ MobileServiceLogin: MobileServiceLogin });\n\n        MobileServiceLogin.prototype.login = function (provider, token, useSingleSignOn, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application given a provider name and optional token object\n            /// Microsoft Account authentication token.\n            /// </summary>\n            /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">\n            /// Optional name of the authentication provider to use; one of 'facebook', 'twitter', 'google',\n            /// 'windowsazureactivedirectory' (can also use 'aad'), or 'microsoftaccount'.\n            /// </param>\n            /// <param name=\"token\" type=\"Object\"  mayBeNull=\"true\">\n            /// Optional provider specific object with existing OAuth token to log in with or\n            /// a JWT Mobile Services authentication token if the provider is null.\n            /// </param>\n            /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n            /// Only applies to Windows 8 clients.  Will be ignored on other platforms.\n            /// Indicates if single sign-on should be used. Single sign-on requires that the \n            /// application's Package SID be registered with the Microsoft Azure Mobile Service, \n            /// but it provides a better experience as HTTP cookies are supported so that users \n            /// do not have to login in everytime the application is launched.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\"  mayBeNull=\"true\">\n            /// Optional callback accepting (error, user) parameters.\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback)) {\n                if (!_.isNull(useSingleSignOn) && (typeof useSingleSignOn === 'function')) {\n                    callback = useSingleSignOn;\n                    useSingleSignOn = null;\n                }\n                else if (!_.isNull(token) && (typeof token === 'function')) {\n                    callback = token;\n                    useSingleSignOn = null;\n                    token = null;\n                }\n            }\n            if (_.isNull(useSingleSignOn)) {\n                if (_.isBool(token)) {\n                    useSingleSignOn = token;\n                    token = null;\n                }\n                else {\n                    useSingleSignOn = false;\n                }\n            }\n\n            // Determine if the provider is actually a Mobile Services authentication token\n            if (_.isNull(token) && _.isString(provider) && provider.split('.').length === 3) {\n                token = provider;\n                provider = null;\n            }\n\n            // Validate parameters; there must be either a provider, a token or both\n            if (_.isNull(provider)) {\n                Validate.notNull(token);\n                Validate.isString(token);\n            }\n            if (_.isNull(token)) {\n                Validate.notNull(provider);\n                Validate.isString(provider);\n                provider = provider.toLowerCase();\n            }\n\n            if (!_.isNull(provider)) {\n                if (provider.toLowerCase() === 'windowsazureactivedirectory') {\n                    // The mobile service REST API uses '/login/aad' for Microsoft Azure Active Directory\n                    provider = 'aad';\n                }\n                this.loginWithProvider(provider, token, useSingleSignOn, callback);\n            }\n            else {\n                this.loginWithMobileServiceToken(token, callback);\n            }\n        };\n\n        MobileServiceLogin.prototype.loginWithMobileServiceToken = function (authenticationToken, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application given an Mobile Service authentication token.\n            /// </summary>\n            /// <param name=\"authenticationToken\" type=\"String\">\n            /// OAuth access token that authenticates the user.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// Optional callback accepting (error, user) parameters.\n            /// </param>\n\n            var self = this;\n            var client = self.getMobileServiceClient();\n\n            Validate.isString(authenticationToken, 'authenticationToken');\n            Validate.notNullOrEmpty(authenticationToken, 'authenticationToken');\n\n            client._request(\n                'POST',\n                loginUrl,\n                { authenticationToken: authenticationToken },\n                self.ignoreFilters,\n                function (error, response) {\n                    onLoginResponse(error, response, client, callback);\n                });\n        };\n\n        MobileServiceLogin.prototype.loginWithProvider = function (provider, token, useSingleSignOn, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application given a provider name and optional token object.\n            /// </summary>\n            /// <param name=\"provider\" type=\"String\">\n            /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google',\n            /// 'windowsazureactivedirectory' (can also use 'aad'), or 'microsoftaccount'.\n            /// </param>\n            /// <param name=\"token\" type=\"Object\" mayBeNull=\"true\">\n            /// Optional, provider specific object with existing OAuth token to log in with.\n            /// </param>\n            /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n            /// Optional, indicates if single sign-on should be used.  Single sign-on requires that the\n            /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n            /// provides a better experience as HTTP cookies are supported so that users do not have to\n            /// login in everytime the application is launched. Is false be default.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback)) {\n                if (_.isNull(useSingleSignOn) && (typeof token === 'function')) {\n                    callback = token;\n                    token = null;\n                    useSingleSignOn = false;\n                } else if (typeof useSingleSignOn === 'function') {\n                    callback = useSingleSignOn;\n                    useSingleSignOn = false;\n                    if (!_.isNull(token) && _.isBool(token)) {\n                        useSingleSignOn = token;\n                        token = null;\n                    }\n                }\n            }\n\n            // Validate arguments\n            Validate.isString(provider, 'provider');\n            if (!_.isNull(token)) {\n                Validate.isObject(token, 'token');\n            }\n\n            // Throw if a login is already in process and is not cancellable\n            if (this._loginState.inProcess) {\n                var didCancel = this._loginState.cancelCallback && this._loginState.cancelCallback();\n                if (!didCancel) {\n                    throw Platform.getResourceString(\"MobileServiceLogin_LoginErrorResponse\");\n                }\n            }\n\n            provider = provider.toLowerCase();\n\n            // Either login with the token or the platform specific login control.\n            if (!_.isNull(token)) {\n                loginWithProviderAndToken(this, provider, token, callback);\n            }\n            else {\n                loginWithLoginControl(this, provider, useSingleSignOn, callback);\n            }\n        };\n\n        function onLoginComplete(error, token, client, callback) {\n            /// <summary>\n            /// Handles the completion of the login and calls the user's callback with\n            /// either a user or an error.\n            /// </summary>\n            /// <param name=\"error\" type=\"string\" mayBeNull=\"true\">\n            /// Optional error that may have occurred during login. Will be null if the\n            /// login succeeded and their is a token.\n            /// </param>\n            /// <param name=\"token\" type=\"string\" mayBeNull=\"true\">\n            /// Optional token that represents the logged-in user. Will be null if the\n            /// login failed and their is an error.\n            /// </param>\n            /// <param name=\"client\" type=\"MobileServiceClient\">\n            /// The Mobile Service client associated with the login.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n            var user = null;\n\n            if (_.isNull(error)) {\n\n                // Validate the token\n                if (_.isNull(token) ||\n                    !_.isObject(token) ||\n                    !_.isObject(token.user) ||\n                    !_.isString(token.authenticationToken)) {\n                    error = Platform.getResourceString(\"MobileServiceLogin_InvalidResponseFormat\");\n                }\n                else {\n                    // Set the current user on the client and return it in the callback\n                    client.currentUser = token.user;\n                    client.currentUser.mobileServiceAuthenticationToken = token.authenticationToken;\n                    user = client.currentUser;\n                }\n            }\n\n            if (!_.isNull(callback)) {\n                callback(error, user);\n            }\n        }\n\n        function onLoginResponse(error, response, client, callback) {\n            /// <summary>\n            /// Handles the completion of the login HTTP call and calls the user's callback with\n            /// either a user or an error.\n            /// </summary>\n            /// <param name=\"error\" type=\"string\" mayBeNull=\"true\">\n            /// Optional error that may have occurred during login. Will be null if the\n            /// login succeeded and their is a token.\n            /// </param>\n            /// <param name=\"response\" type=\"string\" mayBeNull=\"true\">\n            /// Optional HTTP login response from the Mobile Service. Will be null if the\n            /// login failed and their is an error.\n            /// </param>\n            /// <param name=\"client\" type=\"MobileServiceClient\">\n            /// The Mobile Service client associated with the login.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n\n            var mobileServiceToken = null;\n            if (_.isNull(error)) {\n                try {\n                    mobileServiceToken = _.fromJson(response.responseText);\n                }\n                catch (e) {\n                    error = e;\n                }\n            }\n\n            onLoginComplete(error, mobileServiceToken, client, callback);\n        }\n\n        function loginWithProviderAndToken(login, provider, token, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application given a provider name and token object.\n            /// </summary>\n            /// <param name=\"login\" type=\"MobileServiceLogin\">\n            /// The login instance that holds the context used with the login process.\n            /// </param>\n            /// <param name=\"provider\" type=\"String\">\n            /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', or \n            /// 'microsoftaccount'. The provider should already have been validated.\n            /// </param>\n            /// <param name=\"token\" type=\"Object\">\n            /// Provider specific object with existing OAuth token to log in with.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n\n            var client = login.getMobileServiceClient();\n\n            // This design has always been problematic, because the operation can take arbitrarily\n            // long and there is no way for the UI to cancel it. We should probably remove this\n            // one-at-a-time restriction.\n            login._loginState = { inProcess: true, cancelCallback: null };\n\n            // Invoke the POST endpoint to exchange provider-specific token for a \n            // Microsoft Azure Mobile Services token\n            client._request(\n                'POST',\n                loginUrl + '/' + provider,\n                token,\n                login.ignoreFilters,\n                function (error, response) {\n                    login._loginState = { inProcess: false, cancelCallback: null };\n                    onLoginResponse(error, response, client, callback);\n                });\n        }\n\n        function loginWithLoginControl(login, provider, useSingleSignOn, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application using a platform specific\n            /// login control that will present the user with the given provider's login web page.\n            /// </summary>\n            /// <param name=\"login\" type=\"MobileServiceLogin\">\n            /// The login instance that holds the context used with the login process.\n            /// </param>\n            /// <param name=\"provider\" type=\"String\">\n            /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', or 'microsoftaccount'.\n            /// </param>\n            /// <param name=\"useSingleSignOn\" type=\"Boolean\">\n            /// Optional, indicates if single sign-on should be used.  Single sign-on requires that the\n            /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n            /// provides a better experience as HTTP cookies are supported so that users do not have to\n            /// login in everytime the application is launched. Is false be default.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\"  mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n\n            var client = login.getMobileServiceClient();\n            var startUri = _.url.combinePathSegments(\n                client.applicationUrl,\n                loginUrl,\n                provider);\n            var endUri = null;\n\n            // If not single sign-on, then we need to construct a non-null end uri.\n            if (!useSingleSignOn) {\n                endUri = _.url.combinePathSegments(\n                    client.applicationUrl,\n                    loginUrl,\n                    loginDone);\n            }\n\n            login._loginState = { inProcess: true, cancelCallback: null }; // cancelCallback gets set below\n\n            // Call the platform to launch the login control, capturing any\n            // 'cancel' callback that it returns\n            var platformResult = Platform.login(\n                startUri,\n                endUri,\n                function (error, mobileServiceToken) {\n                    login._loginState = { inProcess: false, cancelCallback: null };\n                    onLoginComplete(error, mobileServiceToken, client, callback);\n                });\n\n            if (login._loginState.inProcess && platformResult && platformResult.cancelCallback) {\n                login._loginState.cancelCallback = platformResult.cancelCallback;\n            }\n        }\n    };\n\n    $__modules__.Platform = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n        /*global $__fileVersion__:false, $__version__:false */\n\n        var _ = require('Extensions');\n        var Validate = require('Validate');\n        var Promises = require('Promises');\n        var Resources = require('Resources');\n        var inMemorySettingStore = {};\n        if (window.localStorage) {\n            inMemorySettingStore = window.localStorage;\n        }\n        var bestAvailableTransport = null;\n        var knownTransports = [ // In order of preference\n            require('DirectAjaxTransport'),\n            require('IframeTransport')\n        ];\n        var knownLoginUis = [ // In order of preference\n            require('CordovaPopup'),\n            require('BrowserPopup')\n        ];\n\n        // Matches an ISO date and separates out the fractional part of the seconds\n        // because IE < 10 has quirks parsing fractional seconds\n        var isoDateRegex = /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(?:\\.(\\d*))?Z$/;\n\n        // Feature-detect IE8's date serializer\n        var dateSerializerOmitsDecimals = !JSON.stringify(new Date(100)).match(/\\.100Z\"$/);\n\n        exports.async = function async(func) {\n            /// <summary>\n            /// Wrap a function that takes a callback into platform specific async\n            /// operation (i.e., keep using callbacks or switch to promises).\n            /// </summary>\n            /// <param name=\"func\" type=\"Function\">\n            /// An async function with a callback as its last parameter \n            /// </param>\n            /// <returns type=\"Function\">\n            /// Function that when invoked will return a promise.\n            /// </returns>\n\n            return function () {\n                // Capture the context of the original call\n                var that = this;\n                var args = arguments;\n\n                // Create a new promise that will wrap the async call\n                return new Promises.Promise(function (complete, error) {\n\n                    // Add a callback to the args which will call the appropriate\n                    // promise handlers\n                    var callback = function (err) {\n                        if (_.isNull(err)) {\n                            // Call complete with all the args except for err\n                            complete.apply(null, Array.prototype.slice.call(arguments, 1));\n                        } else {\n                            error(err);\n                        }\n                    };\n                    Array.prototype.push.call(args, callback);\n\n                    try {\n                        // Invoke the async method which will in turn invoke our callback\n                        // which will in turn invoke the promise's handlers\n                        func.apply(that, args);\n                    } catch (ex) {\n                        // Thread any immediate errors like parameter validation\n                        // through the the callback\n                        callback(_.createError(ex));\n                    }\n                });\n            };\n        };\n\n        exports.addToMobileServicesClientNamespace = function (declarations) {\n            /// <summary>\n            /// Define a collection of declarations in the Mobile Services Client namespace.\n            /// </summary>\n            /// <param name=\"declarations\" type=\"Object\">\n            /// Object consisting of names and values to define in the namespace.\n            /// </param>\n\n            // First ensure our 'WindowsAzure' namespace exists\n            var namespaceObject = global.WindowsAzure = global.WindowsAzure || {};\n\n            // Now add each of the declarations to the namespace\n            for (var key in declarations) {\n                if (declarations.hasOwnProperty(key)) {\n                    namespaceObject[key] = declarations[key];\n                }\n            }\n        };\n\n        exports.readSetting = function readSetting(name) {\n            /// <summary>\n            /// Read a setting from a global configuration store.\n            /// </summary>\n            /// <param name=\"name\" type=\"String\">\n            /// Name of the setting to read.\n            /// </param>\n            /// <returns type=\"String\" mayBeNull=\"true\">\n            /// The value of the setting or null if not set.\n            /// </returns>\n\n            return inMemorySettingStore[name];\n        };\n\n        exports.writeSetting = function writeSetting(name, value) {\n            /// <summary>\n            /// Write a setting to a global configuration store.\n            /// </summary>\n            /// <param name=\"name\" type=\"String\">\n            /// Name of the setting to write.\n            /// </param>\n            /// <param name=\"value\" type=\"String\" mayBeNull=\"true\">\n            /// The value of the setting.\n            /// </returns>\n\n            inMemorySettingStore[name] = value;\n        };\n\n        exports.webRequest = function (request, callback) {\n            /// <summary>\n            /// Make a web request.\n            /// </summary>\n            /// <param name=\"request\" type=\"Object\">\n            /// Object describing the request (in the WinJS.xhr format).\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// The callback to execute when the request completes.\n            /// </param>\n\n            return getBestTransport().performRequest(request, callback);\n        };\n\n        exports.getUserAgent = function () {\n            // Browsers don't allow you to set a custom user-agent in ajax requests. Trying to do so\n            // will cause an exception. So we don't.\n            return null;\n        };\n\n        exports.getOperatingSystemInfo = function () {\n            return {\n                name: \"--\",\n                version: \"--\",\n                architecture: \"--\"\n            };\n        };\n\n        exports.getSdkInfo = function () {\n            return {\n                language: \"Web\",\n                fileVersion: $__fileVersion__\n            };\n        };\n\n        exports.login = function (startUri, endUri, callback) {\n            // Force logins to go over HTTPS because the runtime is hardcoded to redirect\n            // the server flow back to HTTPS, and we need the origin to match.\n            var findProtocol = /^[a-z]+:/,\n                requiredProtocol = 'https:';\n            startUri = startUri.replace(findProtocol, requiredProtocol);\n            endUri = endUri.replace(findProtocol, requiredProtocol);\n\n            return getBestProvider(knownLoginUis).login(startUri, endUri, callback);\n        };\n\n        exports.toJson = function (value) {\n            /// <summary>\n            /// Convert an object into JSON format.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to convert.</param>\n            /// <returns type=\"String\">The value as JSON.</returns>\n\n            // We're wrapping this so we can hook the process and perform custom JSON\n            // conversions.  Note that we don't have to add a special hook to correctly\n            // serialize dates in ISO8061 because JSON.stringify does that by defualt.\n            // TODO: Convert geolocations once they're supported\n            // TODO: Expose the ability for developers to convert custom types\n            return JSON.stringify(value, function (key, stringifiedValue) {\n                if (dateSerializerOmitsDecimals && this && _.isDate(this[key])) {\n                    // IE8 doesn't include the decimal part in its serialization of dates\n                    // For consistency, we extract the non-decimal part from the string\n                    // representation, and then append the expected decimal part.\n                    var msec = this[key].getMilliseconds(),\n                        msecString = String(msec + 1000).substring(1);\n                    return stringifiedValue.replace(isoDateRegex, function (all, datetime) {\n                        return datetime + \".\" + msecString + \"Z\";\n                    });\n                } else {\n                    return stringifiedValue;\n                }\n            });\n        };\n\n        exports.tryParseIsoDateString = function (text) {\n            /// <summary>\n            /// Try to parse an ISO date string.\n            /// </summary>\n            /// <param name=\"text\" type=\"String\">The text to parse.</param>\n            /// <returns type=\"Date\">The parsed Date or null.</returns>\n\n            Validate.isString(text);\n\n            // Check against a lenient regex\n            var matchedDate = isoDateRegex.exec(text);\n            if (matchedDate) {\n                // IE9 only handles precisely 0 or 3 decimal places when parsing ISO dates,\n                // and IE8 doesn't parse them at all. Fortunately, all browsers can handle \n                // 'yyyy/mm/dd hh:MM:ss UTC' (without fractional seconds), so we can rewrite\n                // the date to that format, and the apply fractional seconds.\n                var dateWithoutFraction = matchedDate[1],\n                    fraction = matchedDate[2] || \"0\",\n                    milliseconds = Math.round(1000 * Number(\"0.\" + fraction)); // 6 -> 600, 65 -> 650, etc.\n                dateWithoutFraction = dateWithoutFraction\n                    .replace(/\\-/g, \"/\")   // yyyy-mm-ddThh:mm:ss -> yyyy/mm/ddThh:mm:ss\n                    .replace(\"T\", \" \");    // yyyy/mm/ddThh:mm:ss -> yyyy/mm/dd hh:mm:ss\n\n                // Try and parse - it will return NaN if invalid\n                var ticks = Date.parse(dateWithoutFraction + \" UTC\");\n                if (!isNaN(ticks)) {\n                    return new Date(ticks + milliseconds); // ticks are just milliseconds since 1970/01/01\n                }\n            }\n\n            // Doesn't look like a date\n            return null;\n        };\n\n        exports.getResourceString = function (resourceName) {\n            // For now, we'll just always use English\n            return Resources[\"en-US\"][resourceName];\n        };\n\n\n        exports.allowPlatformToMutateOriginal = function (original, updated) {\n            // For the Web/HTML client, we don't modify the original object.\n            // This is the more typical arrangement for most JavaScript data access.\n            return updated;\n        };\n\n        function getBestTransport() {\n            // We cache this just because it gets called such a lot\n            if (!bestAvailableTransport) {\n                bestAvailableTransport = getBestProvider(knownTransports);\n            }\n\n            return bestAvailableTransport;\n        }\n\n        function getBestProvider(providers) {\n            /// <summary>\n            /// Given an array of objects which each have a 'supportsCurrentRuntime' function,\n            /// returns the first instance where that function returns true.\n            /// </summary>\n\n            for (var i = 0; i < providers.length; i++) {\n                if (providers[i].supportsCurrentRuntime()) {\n                    return providers[i];\n                }\n            }\n\n            throw new Error(\"Unsupported browser - no suitable providers are available.\");\n        }\n    };\n\n    $__modules__.DirectAjaxTransport = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n        // This transport is for modern browsers - it uses XMLHttpRequest with Cross-Origin Resource Sharing (CORS)\n\n        exports.name = \"DirectAjaxTransport\";\n\n        exports.supportsCurrentRuntime = function () {\n            /// <summary>\n            /// Determines whether or not this transport is usable in the current runtime.\n            /// </summary>\n\n            // Feature-detect support for CORS (for IE, it's in version 10+)\n            return (typeof global.XMLHttpRequest !== \"undefined\") &&\n                   ('withCredentials' in new global.XMLHttpRequest());\n        };\n\n        exports.performRequest = function (request, callback) {\n            /// <summary>\n            /// Make a web request.\n            /// </summary>\n            /// <param name=\"request\" type=\"Object\">\n            /// Object describing the request (in the WinJS.xhr format).\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// The callback to execute when the request completes.\n            /// </param>\n\n            var headers = request.headers || {},\n                url = request.url.replace(/#.*$/, \"\"), // Strip hash part of URL for consistency across browsers\n                httpMethod = request.type ? request.type.toUpperCase() : \"GET\",\n                xhr = new global.XMLHttpRequest();\n\n            xhr.onreadystatechange = function () {\n                if (xhr.readyState === 4) {\n                    callback(null, xhr);\n                }\n            };\n\n            xhr.open(httpMethod, url);\n\n            for (var key in headers) {\n                if (request.headers.hasOwnProperty(key)) {\n                    xhr.setRequestHeader(key, request.headers[key]);\n                }\n            }\n\n            xhr.send(request.data);\n        };\n    };\n\n    $__modules__.IframeTransport = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n        // This transport is for midlevel browsers (IE8-9) that don't support CORS but do support postMessage.\n        // It creates an invisible <iframe> that loads a special bridge.html page from the runtime domain.\n        // To issue a request, it uses postMessage to pass the request into the <iframe>, which in turn makes\n        // a same-domain Ajax request to the runtime. To associate postMessage replies with the original\n        // request, we track an array of promises that eventually time out if not resolved (see PostMessageExchange).\n\n        var Promises = require('Promises'),\n            PostMessageExchange = require('PostMessageExchange'),\n            loadBridgeFramePromises = [], // One per target proto/host/port triplet\n            messageExchange = PostMessageExchange.instance;\n\n        exports.name = \"IframeTransport\";\n\n        exports.supportsCurrentRuntime = function () {\n            /// <summary>\n            /// Determines whether or not this transport is usable in the current runtime.\n            /// </summary>\n\n            return typeof global.postMessage !== \"undefined\";\n        };\n\n        exports.performRequest = function (request, callback) {\n            /// <summary>\n            /// Make a web request.\n            /// </summary>\n            /// <param name=\"request\" type=\"Object\">\n            /// Object describing the request (in the WinJS.xhr format).\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// The callback to execute when the request completes.\n            /// </param>\n\n            var originRoot = PostMessageExchange.getOriginRoot(request.url);\n            whenBridgeLoaded(originRoot, function (bridgeFrame) {\n                var message = {\n                    type: request.type,\n                    url: request.url,\n                    headers: request.headers,\n                    data: request.data\n                };\n                messageExchange.request(bridgeFrame.contentWindow, message, originRoot).then(function (reply) {\n                    fixupAjax(reply);\n                    callback(null, reply);\n                }, function (error) {\n                    callback(error, null);\n                });\n            });\n        };\n\n        function fixupAjax(xhr) {\n            if (xhr) {\n                // IE sometimes converts status 204 into 1223\n                // http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request\n                if (xhr.status === 1223) {\n                    xhr.status = 204;\n                }\n            }\n        }\n\n        function whenBridgeLoaded(originRoot, callback) {\n            /// <summary>\n            /// Performs the callback once the bridge iframe has finished loading.\n            /// Lazily creates the bridge iframe if necessary. Note that each proto/host/port\n            /// triplet (i.e., same-domain origin) needs a separate bridge.\n            /// </summary>\n\n            var cacheEntry = loadBridgeFramePromises[originRoot];\n\n            if (!cacheEntry) {\n                cacheEntry = loadBridgeFramePromises[originRoot] = new Promises.Promise(function (complete, error) {\n                    var bridgeFrame = document.createElement(\"iframe\"),\n                        callerOrigin = PostMessageExchange.getOriginRoot(window.location.href),\n                        handleBridgeLoaded = function () {\n                            complete(bridgeFrame);\n                        };\n\n                    if (bridgeFrame.addEventListener) {\n                        bridgeFrame.addEventListener(\"load\", handleBridgeLoaded, false);\n                    } else {\n                        // For IE8\n                        bridgeFrame.attachEvent(\"onload\", handleBridgeLoaded);\n                    }\n\n                    bridgeFrame.src = originRoot + \"/crossdomain/bridge?origin=\" + encodeURIComponent(callerOrigin);\n\n                    // Try to keep it invisible, even if someone does $(\"iframe\").show()\n                    bridgeFrame.setAttribute(\"width\", 0);\n                    bridgeFrame.setAttribute(\"height\", 0);\n                    bridgeFrame.style.display = \"none\";\n\n                    global.document.body.appendChild(bridgeFrame);\n                });\n            }\n\n            cacheEntry.then(callback);\n        }\n\n    };\n\n    $__modules__.BrowserPopup = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        var PostMessageExchange = require('PostMessageExchange');\n\n        exports.supportsCurrentRuntime = function () {\n            /// <summary>\n            /// Determines whether or not this login UI is usable in the current runtime.\n            /// </summary>\n            return true;\n        };\n\n        exports.login = function (startUri, endUri, callback) {\n            /// <summary>\n            /// Displays the login UI and calls back on completion\n            /// </summary>\n\n            // Tell the runtime which form of completion signal we are looking for,\n            // and which origin should be allowed to receive the result (note that this\n            // is validated against whitelist on the server; we are only supplying this\n            // origin to indicate *which* of the whitelisted origins to use).\n            var completionOrigin = PostMessageExchange.getOriginRoot(window.location.href),\n                runtimeOrigin = PostMessageExchange.getOriginRoot(startUri),\n                // IE does not support popup->opener postMessage calls, so we have to\n                // route the message via an iframe\n                useIntermediateIframe = window.navigator.userAgent.indexOf(\"MSIE\") >= 0 || window.navigator.userAgent.indexOf(\"Trident\") >= 0,\n                intermediateIframe = useIntermediateIframe && createIntermediateIframeForLogin(runtimeOrigin, completionOrigin),\n                completionType = useIntermediateIframe ? \"iframe\" : \"postMessage\";\n            startUri += \"?completion_type=\" + completionType + \"&completion_origin=\" + encodeURIComponent(completionOrigin);\n\n            // Browsers don't allow postMessage to a file:// URL (except by setting origin to \"*\", which is unacceptable)\n            // so abort the process early with an explanation in that case.\n            if (!(completionOrigin && (completionOrigin.indexOf(\"http:\") === 0 || completionOrigin.indexOf(\"https:\") === 0))) {\n                var error = \"Login is only supported from http:// or https:// URLs. Please host your page in a web server.\";\n                callback(error, null);\n                return;\n            }\n\n            var loginWindow = window.open(startUri, \"_blank\", \"location=no\"),\n                complete = function (errorValue, oauthValue) {\n                    // Clean up event handlers, windows, frames, ...\n                    window.clearInterval(checkForWindowClosedInterval);\n                    loginWindow.close();\n                    if (window.removeEventListener) {\n                        window.removeEventListener(\"message\", handlePostMessage);\n                    } else {\n                        // For IE8\n                        window.detachEvent(\"onmessage\", handlePostMessage);\n                    }\n                    if (intermediateIframe) {\n                        intermediateIframe.parentNode.removeChild(intermediateIframe);\n                    }\n\n                    // Finally, notify the caller\n                    callback(errorValue, oauthValue);\n                },\n                handlePostMessage = function (evt) {\n                    // Validate source\n                    var expectedSource = useIntermediateIframe ? intermediateIframe.contentWindow : loginWindow;\n                    if (evt.source !== expectedSource) {\n                        return;\n                    }\n\n                    // Parse message\n                    var envelope;\n                    try {\n                        envelope = JSON.parse(evt.data);\n                    } catch (ex) {\n                        // Not JSON - it's not for us. Ignore it and keep waiting for the next message.\n                        return;\n                    }\n\n                    // Process message only if it's for us\n                    if (envelope && envelope.type === \"LoginCompleted\" && (envelope.oauth || envelope.error)) {\n                        complete(envelope.error, envelope.oauth);\n                    }\n                },\n                checkForWindowClosedInterval = window.setInterval(function () {\n                    // We can't directly catch any \"onclose\" event from the popup because it's usually on a different\n                    // origin, but in all the mainstream browsers we can poll for changes to its \"closed\" property\n                    if (loginWindow && loginWindow.closed === true) {\n                        complete(\"canceled\", null);\n                    }\n                }, 250);\n\n            if (window.addEventListener) {\n                window.addEventListener(\"message\", handlePostMessage, false);\n            } else {\n                // For IE8\n                window.attachEvent(\"onmessage\", handlePostMessage);\n            }\n\n            // Permit cancellation, e.g., if the app tries to login again while the popup is still open\n            return {\n                cancelCallback: function () {\n                    complete(\"canceled\", null);\n                    return true; // Affirm that it was cancelled\n                }\n            };\n        };\n\n        function createIntermediateIframeForLogin(runtimeOrigin, completionOrigin) {\n            var frame = document.createElement(\"iframe\");\n            frame.name = \"zumo-login-receiver\"; // loginviaiframe.html specifically looks for this name\n            frame.src = runtimeOrigin +\n                \"/crossdomain/loginreceiver?completion_origin=\" + encodeURIComponent(completionOrigin);\n            frame.setAttribute(\"width\", 0);\n            frame.setAttribute(\"height\", 0);\n            frame.style.display = \"none\";\n            document.body.appendChild(frame);\n            return frame;\n        }\n    };\n\n    $__modules__.CordovaPopup = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        // Note: Cordova is PhoneGap.\n        // This login UI implementation uses the InAppBrowser plugin which is built into Cordova 2.3.0+.\n\n        var requiredCordovaVersion = { major: 2, minor: 3 };\n\n        exports.supportsCurrentRuntime = function () {\n            /// <summary>\n            /// Determines whether or not this login UI is usable in the current runtime.\n            /// </summary>\n\n            return !!currentCordovaVersion();\n        };\n\n        exports.login = function (startUri, endUri, callback) {\n            /// <summary>\n            /// Displays the login UI and calls back on completion\n            /// </summary>\n\n            // Ensure it's a sufficiently new version of Cordova, and if not fail synchronously so that\n            // the error message will show up in the browser console.\n            var foundCordovaVersion = currentCordovaVersion();\n            if (!isSupportedCordovaVersion(foundCordovaVersion)) {\n                var message = \"Not a supported version of Cordova. Detected: \" + foundCordovaVersion +\n                            \". Required: \" + requiredCordovaVersion.major + \".\" + requiredCordovaVersion.minor;\n                throw new Error(message);\n            }\n\n            // Initially we show a page with a spinner. This stays on screen until the login form has loaded.\n            var redirectionScript = \"<script>location.href = unescape('\" + window.escape(startUri) + \"')</script>\",\n                startPage = \"data:text/html,\" + encodeURIComponent(getSpinnerMarkup() + redirectionScript),\n                loginWindow = window.open(startPage, \"_blank\", \"location=no\"),\n                flowHasFinished = false,\n                loadEventHandler = function (evt) {\n                    if (!flowHasFinished && evt.url.indexOf(endUri) === 0) {\n                        flowHasFinished = true;\n                        loginWindow.close();\n                        var result = parseOAuthResultFromDoneUrl(evt.url);\n                        callback(result.error, result.oAuthToken);\n                    }\n                };\n\n            // Ideally we'd just use loadstart because it happens earlier, but it randomly skips\n            // requests on iOS, so we have to listen for loadstop as well (which is reliable).\n            loginWindow.addEventListener('loadstart', loadEventHandler);\n            loginWindow.addEventListener('loadstop', loadEventHandler);\n\n            loginWindow.addEventListener('exit', function (evt) {\n                if (!flowHasFinished) {\n                    flowHasFinished = true;\n                    callback(\"UserCancelled\", null);\n                }\n            });\n        };\n\n        function currentCordovaVersion() {\n            // If running inside Cordova, returns a string similar to \"2.3.0\". Otherwise, returns a falsey value.\n            // Note: We can only detect Cordova after its deviceready event has fired, so don't call login until then.\n            return window.device && window.device.cordova;\n        }\n\n        function isSupportedCordovaVersion(version) {\n            var versionParts = currentCordovaVersion().match(/^(\\d+).(\\d+)./);\n            if (versionParts) {\n                var major = Number(versionParts[1]),\n                    minor = Number(versionParts[2]),\n                    required = requiredCordovaVersion;\n                return (major > required.major) ||\n                       (major === required.major && minor >= required.minor);\n            }\n            return false;\n        }\n\n        function parseOAuthResultFromDoneUrl(url) {\n            var successMessage = extractMessageFromUrl(url, \"#token=\"),\n                errorMessage = extractMessageFromUrl(url, \"#error=\");\n            return {\n                oAuthToken: successMessage ? JSON.parse(successMessage) : null,\n                error: errorMessage\n            };\n        }\n\n        function extractMessageFromUrl(url, separator) {\n            var pos = url.indexOf(separator);\n            return pos < 0 ? null : decodeURIComponent(url.substring(pos + separator.length));\n        }\n\n        function getSpinnerMarkup() {\n            // The default InAppBrowser experience isn't ideal, as it just shows the user a blank white screen\n            // until the login form appears. This might take 10+ seconds during which it looks broken.\n            // Also on iOS it's possible for the InAppBrowser to initially show the results of the *previous*\n            // login flow if the InAppBrowser was dismissed before completion, which is totally undesirable.\n            // To fix both of these problems, we display a simple \"spinner\" graphic via a data: URL until\n            // the current login screen has loaded. We generate the spinner via CSS rather than referencing\n            // an animated GIF just because this makes the client library smaller overall.\n            var vendorPrefix = \"webkitTransform\" in document.documentElement.style ? \"-webkit-\" : \"\",\n                numSpokes = 12,\n                spokesMarkup = \"\";\n            for (var i = 0; i < numSpokes; i++) {\n                spokesMarkup += \"<div style='-prefix-transform: rotateZ(\" + (180 + i * 360 / numSpokes) + \"deg);\" +\n                                            \"-prefix-animation-delay: \" + (0.75 * i / numSpokes) + \"s;'></div>\";\n            }\n            return [\n                \"<!DOCTYPE html><html>\",\n                \"<head><meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1'></head>\",\n                \"<body><div id='spinner'>\" + spokesMarkup + \"</div>\",\n                \"<style type='text/css'>\",\n                \"    #spinner { position: absolute; top: 50%; left: 50%; -prefix-animation: spinner 10s linear infinite; }\",\n                \"    #spinner > div {\",\n                \"        background: #333; opacity: 0; position: absolute; top: 11px; left: -2px; width: 4px; height: 21px; border-radius: 2px;\",\n                \"        -prefix-transform-origin: 50% -11px; -prefix-animation: spinner-spoke 0.75s linear infinite;\",\n                \"    }\",\n                \"    @-prefix-keyframes spinner { 0% { -prefix-transform: rotateZ(0deg); } 100% { -prefix-transform: rotateZ(-360deg); } }\",\n                \"    @-prefix-keyframes spinner-spoke { 0% { opacity: 0; } 5% { opacity: 1; } 70% { opacity: 0; } 100% { opacity: 0; } }\",\n                \"</style>\",\n                \"</body></html>\"\n            ].join(\"\").replace(/-prefix-/g, vendorPrefix);\n        }\n    };\n\n    $__modules__.Extensions = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n        // Declare JSHint globals\n        /*global XMLHttpRequest:false */\n\n        var Validate = require('Validate');\n        var Platform = require('Platform');\n        var _ = exports;\n\n        exports.isNull = function (value) {\n            /// <summary>\n            /// Gets a value indicating whether the provided value is null (or\n            /// undefined).\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\" mayBeNull=\"true\">\n            /// The value to check.\n            /// </param>\n            /// <returns type=\"Boolean\">\n            /// A value indicating whether the provided value is null (or undefined).\n            /// </returns>\n\n            return value === null || value === undefined;\n        };\n\n        exports.isNullOrZero = function (value) {\n            /// <summary>\n            /// Gets a value indicating whether the provided value is null (or\n            /// undefined) or zero / empty string\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\" mayBeNull=\"true\">\n            /// The value to check.\n            /// </param>\n            /// <returns type=\"Boolean\">\n            /// A value indicating whether the provided value is null (or undefined) or zero or empty string.\n            /// </returns>\n\n            return value === null || value === undefined || value === 0 || value === '';\n        };\n\n        exports.isNullOrEmpty = function (value) {\n            /// <summary>\n            /// Gets a value indicating whether the provided value is null (or\n            /// undefined) or empty.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\" mayBeNull=\"true\">\n            /// The value to check.\n            /// </param>\n            /// <returns type=\"Boolean\">\n            /// A value inHdicating whether the provided value is null (or undefined).\n            /// </returns>\n\n            return _.isNull(value) || value.length === 0;\n        };\n\n        exports.format = function (message) {\n            /// <summary>\n            /// Format a string by replacing all of its numbered arguments with\n            /// parameters to the method. Arguments are of the form {0}, {1}, ..., like\n            /// in .NET.\n            /// </summary>\n            /// <param name=\"message\" type=\"string\" mayBeNull=\"false\">\n            /// The format string for the message.\n            /// </param>\n            /// <param name=\"arguments\" type=\"array\" optional=\"true\">\n            /// A variable number of arguments that can be used to format the message.\n            /// </param>\n            /// <returns type=\"string\">The formatted string.</returns>\n\n            Validate.isString(message, 'message');\n\n            // Note: There are several flaws in this implementation that we are\n            // ignoring for simplicity as it's only used internally.  Examples that\n            // could be handled better include:\n            //    format('{0} {1}', 'arg') => 'arg {1}'\n            //    format('{0} {1}', '{1}', 'abc') => 'abc abc'\n            //    format('{0}', '{0}') => <stops responding>\n\n            if (!_.isNullOrEmpty(message) && arguments.length > 1) {\n                for (var i = 1; i < arguments.length; i++) {\n                    var pattern = '{' + (i - 1) + '}';\n                    while (message.indexOf(pattern) !== -1) {\n                        message = message.replace(pattern, arguments[i]);\n                    }\n                }\n            }\n\n            return message;\n        };\n\n        exports.has = function (value, key) {\n            /// <summary>\n            /// Determine if an object defines a given property.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The object to check.</param>\n            /// <param name=\"key\" type=\"String\">\n            /// The name of the property to check for.\n            /// </param>\n            /// <returns type=\"Boolean\">\n            /// A value indicating whether the object defines the property.\n            /// </returns>\n\n            Validate.notNull(key, 'key');\n            Validate.isString(key, 'key');\n\n            return !_.isNull(value) && value.hasOwnProperty(key);\n        };\n\n        exports.hasProperty = function (object, properties) {\n            /// <summary>\n            /// Determines if an object has any of the passed in properties\n            /// </summary>\n            /// <returns type=\"boolean\">True if it contains any one of the properties\n            /// </returns>\n            for (var i = 0; i < properties.length; i++) {\n                if (_.has(object, properties[i])) {\n                    return true;\n                }\n            }\n            return false;\n        };\n\n        exports.extend = function extend(target, members) {\n            /// <summary>\n            /// Extends the target with the members of the members object.\n            /// </summary>\n            /// <param name=\"target\" type=\"Object\">The target object to extend.</param>\n            /// <param name=\"members\" type=\"Object\">The members object to add to the target.</param>\n            /// <returns type=\"Object\">The target object extended with the members.\n            /// </returns>\n            for (var member in members) {\n                if (members.hasOwnProperty(member)) {\n                    target[member] = members[member];\n                }\n            }\n            return target;\n        };\n\n        exports.isObject = function (value) {\n            /// <summary>\n            /// Determine if a value is an object.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is an object (or null), false othwerise.\n            /// </returns>\n\n            return _.isNull(value) || (typeof value === 'object' && !_.isDate(value));\n        };\n\n        exports.isValidId = function (value) {\n            /// <summary>\n            /// Determine if a value is an acceptable id for use by the mobile service\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a string or number, meeting all criteria, or false othwerise.\n            /// </returns>\n            if (_.isNullOrZero(value)) {\n                return false;\n            }\n\n            if (_.isString(value)) {\n                // Strings must contain at least one non whitespace character\n                if (value.length === 0 || value.length > 255 || value.trim().length === 0) {\n                    return false;\n                }\n\n                var ex = /[+\"\\/?`\\\\]|[\\u0000-\\u001F]|[\\u007F-\\u009F]|^\\.{1,2}$/;\n                if (value.match(ex) !== null) {\n                    return false;\n                }\n\n                return true;\n\n            } else if (_.isNumber(value)) {\n                return value > 0;\n            }\n\n            return false;\n        };\n\n        exports.isString = function (value) {\n            /// <summary>\n            /// Determine if a value is a string.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a string (or null), false othwerise.\n            /// </returns>\n\n            return _.isNull(value) || (typeof value === 'string');\n        };\n\n        exports.isNumber = function (value) {\n            /// <summary>\n            /// Determine if a value is a number.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a number, false othwerise.\n            /// </returns>\n\n            return !_.isNull(value) && (typeof value === 'number');\n        };\n\n        exports.isBool = function (value) {\n            /// <summary>\n            /// Determine if a value is a boolean.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a boolean, false othwerise.\n            /// </returns>\n            return !_.isNull(value) && (typeof value == 'boolean');\n        };\n\n        function classOf(value) {\n            return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();\n        }\n\n        exports.isDate = function (value) {\n            /// <summary>\n            /// Determine if a value is a date.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a date, false othwerise.\n            /// </returns>\n            return !_.isNull(value) && (classOf(value) == 'date');\n        };\n\n        exports.toJson = function (value) {\n            /// <summary>\n            /// Convert an object into JSON format.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to convert.</param>\n            /// <returns type=\"String\">The value as JSON.</returns>\n\n            return Platform.toJson(value);\n        };\n\n        exports.fromJson = function (value) {\n            /// <summary>\n            /// Convert an object from JSON format.\n            /// </summary>\n            /// <param name=\"value\" type=\"String\">The value to convert.</param>\n            /// <returns type=\"Object\">The value as an object.</returns>\n\n            var jsonValue = null;\n            if (!_.isNullOrEmpty(value)) {\n                // We're wrapping this so we can hook the process and perform custom JSON\n                // conversions\n                jsonValue = JSON.parse(\n                    value,\n                    function (k, v) {\n                        // Try to convert the value as a Date\n                        if (_.isString(v) && !_.isNullOrEmpty(v)) {\n                            var date = exports.tryParseIsoDateString(v);\n                            if (!_.isNull(date)) {\n                                return date;\n                            }\n                        }\n\n                        // TODO: Convert geolocations once they're supported\n                        // TODO: Expose the ability for developers to convert custom types\n\n                        // Return the original value if we couldn't do anything with it\n                        return v;\n                    });\n            }\n\n            return jsonValue;\n        };\n\n        exports.createUniqueInstallationId = function () {\n            /// <summary>\n            /// Create a unique identifier that can be used for the installation of\n            /// the current application.\n            /// </summary>\n            /// <returns type=\"String\">Unique identifier.</returns>\n\n            var pad4 = function (str) { return \"0000\".substring(str.length) + str; };\n            var hex4 = function () { return pad4(Math.floor(Math.random() * 0x10000 /* 65536 */).toString(16)); };\n\n            return (hex4() + hex4() + \"-\" + hex4() + \"-\" + hex4() + \"-\" + hex4() + \"-\" + hex4() + hex4() + hex4());\n        };\n\n        exports.mapProperties = function (instance, action) {\n            /// <summary>\n            /// Map a function over the key/value pairs in an instance.\n            /// </summary>\n            /// <param name=\"instance\" type=\"Object\">\n            /// The instance to map over.\n            /// </param>\n            /// <param name=\"action\" type=\"function (key, value)\">\n            /// The action to map over the key/value pairs.\n            /// </param>\n            /// <returns elementType=\"object\">Mapped results.</returns>\n\n            var results = [];\n            if (!_.isNull(instance)) {\n                var key = null;\n                for (key in instance) {\n                    results.push(action(key, instance[key]));\n                }\n            }\n            return results;\n        };\n\n        exports.pad = function (value, length, ch) {\n            /// <summary>\n            /// Pad the a value with a given character until it reaches the desired\n            /// length.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to pad.</param>\n            /// <param name=\"length\" type=\"Number\">The desired length.</param>\n            /// <param name=\"ch\" type=\"String\">The character to pad with.</param>\n            /// <returns type=\"String\">The padded string.</returns>\n\n            Validate.notNull(value, 'value');\n            Validate.isInteger(length, 'length');\n            Validate.isString(ch, 'ch');\n            Validate.notNullOrEmpty(ch, 'ch');\n            Validate.length(ch, 1, 'ch');\n\n            var text = value.toString();\n            while (text.length < length) {\n                text = ch + text;\n            }\n            return text;\n        };\n\n        exports.trimEnd = function (text, ch) {\n            /// <summary>\n            /// Trim all instance of a given characher from the end of a string.\n            /// </summary>\n            /// <param name=\"text\" type=\"String\" mayBeNull=\"false\">\n            /// The string to trim.\n            /// <param name=\"ch\" type=\"String\" mayBeNull=\"false\">\n            /// The character to trim.\n            /// </param>\n            /// <returns type=\"String\">The trimmed string.</returns>\n\n            Validate.isString(text, 'text');\n            Validate.notNull(text, 'text');\n            Validate.isString(ch, 'ch');\n            Validate.notNullOrEmpty('ch', 'ch');\n            Validate.length(ch, 1, 'ch');\n\n            var end = text.length - 1;\n            while (end >= 0 && text[end] === ch) {\n                end--;\n            }\n\n            return end >= 0 ?\n                text.substr(0, end + 1) :\n                '';\n        };\n\n        exports.trimStart = function (text, ch) {\n            /// <summary>\n            /// Trim all instance of a given characher from the start of a string.\n            /// </summary>\n            /// <param name=\"text\" type=\"String\" mayBeNull=\"false\">\n            /// The string to trim.\n            /// </param>\n            /// <param name=\"ch\" type=\"String\" mayBeNull=\"false\">\n            /// The character to trim.\n            /// </param>\n            /// <returns type=\"String\">The trimmed string.</returns>\n\n            Validate.isString(text, 'text');\n            Validate.notNull(text, 'text');\n            Validate.isString(ch, 'ch');\n            Validate.notNullOrEmpty(ch, 'ch');\n            Validate.length(ch, 1, 'ch');\n\n            var start = 0;\n            while (start < text.length && text[start] === ch) {\n                start++;\n            }\n\n            return start < text.length ?\n                text.substr(start, text.length - start) :\n                '';\n        };\n\n        exports.compareCaseInsensitive = function (first, second) {\n            /// <summary>\n            /// Compare two strings for equality while igorning case.\n            /// </summary>\n            /// <param name=\"first\" type=\"String\">First value.</param>\n            /// <param name=\"second\" type=\"String\">Second value.</param>\n            /// <returns type=\"Boolean\">Whether the strings are the same.</returns>\n\n            // NOTE: We prefer uppercase on Windows for historical reasons where it was\n            // possible to have alphabets where several uppercase characters mapped to\n            // the same lowercase character.\n\n            if (_.isString(first) && !_.isNullOrEmpty(first)) {\n                first = first.toUpperCase();\n            }\n\n            if (_.isString(first) && !_.isNullOrEmpty(second)) {\n                second = second.toUpperCase();\n            }\n\n            return first === second;\n        };\n\n        /// <field name=\"url\" type=\"Object\">\n        /// Path specific utilities for working with URIs.\n        /// </field>\n        exports.url = {\n            /// <field name=\"separator\" type=\"String\">\n            /// The path separator character used for combining path segments.\n            /// </field>\n            separator: '/',\n\n            combinePathSegments: function () {\n                /// <summary>\n                /// Combine several segments into a path.\n                /// </summary>\n                /// <param parameterArray=\"true\" elementType=\"String\">\n                /// The segments of the path that should be combined.\n                /// </param>\n                /// <returns type=\"String\">The combined path.</returns>\n\n                // Normalize the segements\n                var segments = [];\n                var i = 0;\n                Validate.notNullOrEmpty(arguments, 'arguments');\n                for (i = 0; i < arguments.length; i++) {\n                    var segment = arguments[i];\n                    Validate.isString(segment, _.format('argument[{0}]', i));\n\n                    if (i !== 0) {\n                        segment = _.trimStart(segment || '', _.url.separator);\n                    }\n                    if (i < arguments.length - 1) {\n                        segment = _.trimEnd(segment || '', _.url.separator);\n                    }\n\n                    segments.push(segment);\n                }\n\n                // Combine the segments\n                return segments.reduce(\n                    function (a, b) { return a + _.url.separator + b; });\n            },\n\n            getQueryString: function (parameters) {\n                /// <summary>\n                /// Converts an Object instance into a query string\n                /// </summary>\n                /// <param name=\"parameters\" type=\"Object\">The parameters from which to create a query string.</param>\n                /// <returns type=\"String\">A query string</returns>\n\n                Validate.notNull(parameters, 'parameters');\n                Validate.isObject(parameters, 'parameters');\n\n                var pairs = [];\n                for (var parameter in parameters) {\n                    var value = parameters[parameter];\n                    if (exports.isObject(value)) {\n                        value = exports.toJson(value);\n                    }\n                    pairs.push(encodeURIComponent(parameter) + \"=\" + encodeURIComponent(value));\n                }\n\n                return pairs.join(\"&\");\n            },\n\n            combinePathAndQuery: function (path, queryString) {\n                /// <summary>\n                /// Concatenates the URI query string to the URI path.\n                /// </summary>\n                /// <param name=\"path\" type=\"String>The URI path</param>\n                /// <param name=\"queryString\" type=\"String>The query string.</param>\n                /// <returns type=\"String>The concatenated URI path and query string.</returns>\n                Validate.notNullOrEmpty(path, 'path');\n                Validate.isString(path, 'path');\n                if (_.isNullOrEmpty(queryString)) {\n                    return path;\n                }\n                Validate.isString(queryString, 'queryString');\n\n                if (path.indexOf('?') >= 0) {\n                    return path + '&' + exports.trimStart(queryString, '?');\n                } else {\n                    return path + '?' + exports.trimStart(queryString, '?');\n                }\n            }\n        };\n\n        exports.tryParseIsoDateString = function (text) {\n            /// <summary>\n            /// Try to parse an ISO date string.\n            /// </summary>\n            /// <param name=\"text\" type=\"String\">The text to parse.</param>\n            /// <returns type=\"Date\">The parsed Date or null.</returns>\n\n            return Platform.tryParseIsoDateString(text);\n        };\n\n        exports.createError = function (exceptionOrMessage, request) {\n            /// <summary>\n            /// Wrap an error thrown as an exception.\n            /// </summary>\n            /// <param name=\"exceptionOrMessage\">\n            /// The exception or message to throw.\n            /// </param>\n            /// <param name=\"request\">\n            /// The failing request.\n            /// </param>\n            /// <returns>An object with error details</returns>\n\n            // Create an error object to return\n            var error = { message: Platform.getResourceString(\"Extensions_DefaultErrorMessage\") };\n            error.toString = function () {\n                return error.message;\n            };\n\n            if (request) {\n                error.request = request;\n                if (request.status === 0) {\n                    // Provide a more helpful message for connection failures\n                    error.message = Platform.getResourceString(\"Extensions_ConnectionFailureMessage\");\n                } else {\n                    // Try to pull out an error message from the response before\n                    // defaulting to the status\n                    var isText = false;\n                    if (request.getResponseHeader) {\n                        isText = request.getResponseHeader('Content-Type').toLowerCase().indexOf(\"text\") >= 0;\n                    }\n\n                    try {\n                        var response = JSON.parse(request.responseText);\n                        if (typeof response === 'string') {\n                            error.message = response;\n                        } else {\n                            error.message =\n                                response.error ||\n                                response.description ||\n                                request.statusText ||\n                                Platform.getResourceString(\"Extensions_DefaultErrorMessage\");\n                        }\n                    } catch (ex) {\n                        if (isText) {\n                            error.message = request.responseText;\n                        } else {\n                            error.message =\n                                request.statusText ||\n                                Platform.getResourceString(\"Extensions_DefaultErrorMessage\");\n                        }\n                    }\n                }\n            } else if (_.isString(exceptionOrMessage) && !_.isNullOrEmpty(exceptionOrMessage)) {\n                // If it's a string, just use that as the message\n                error.message = exceptionOrMessage;\n            } else if (!_.isNull(exceptionOrMessage)) {\n                // Otherwise we'll use the object as an exception and leave the\n                // default error message\n                error.exception = exceptionOrMessage;\n            }\n\n            return error;\n        };\n    };\n\n    $__modules__.PostMessageExchange = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        // window.postMessage does not have a concept of responses, so this class associates messages\n        // with IDs so that we can identify which message a reply refers to.\n\n        var Promises = require('Promises'),\n            messageTimeoutDuration = 5 * 60 * 1000; // If no reply after 5 mins, surely there will be no reply\n\n        function PostMessageExchange() {\n            var self = this;\n            self._lastMessageId = 0;\n            self._hasListener = false;\n            self._pendingMessages = {};\n        }\n\n        PostMessageExchange.prototype.request = function (targetWindow, messageData, origin) {\n            /// <summary>\n            /// Issues a request to the target window via postMessage\n            /// </summary>\n            /// <param name=\"targetWindow\" type=\"Object\">\n            /// The window object (on an actual window, or iframe) to send the request to\n            /// </param>\n            /// <param name=\"messageData\" type=\"Object\">\n            /// A JSON-serializable object to pass to the target\n            /// </param>\n            /// <param name=\"origin\" type=\"String\">\n            /// The expected origin (e.g., \"http://example.com:81\") of the recipient window.\n            /// If at runtime the origin does not match, the request will not be issued.\n            /// </param>\n            /// <returns type=\"Object\">\n            /// A promise that completes once the target window sends back a reply, with\n            /// value equal to that reply.\n            /// </returns>\n\n            var self = this,\n                messageId = ++self._lastMessageId,\n                envelope = { messageId: messageId, contents: messageData };\n\n            self._ensureHasListener();\n\n            return new Promises.Promise(function (complete, error) {\n                // Track callbacks and origin data so we can complete the promise only for valid replies\n                self._pendingMessages[messageId] = {\n                    messageId: messageId,\n                    complete: complete,\n                    error: error,\n                    targetWindow: targetWindow,\n                    origin: origin\n                };\n\n                // Don't want to leak memory, so if there's no reply, forget about it eventually\n                self._pendingMessages[messageId].timeoutId = global.setTimeout(function () {\n                    var pendingMessage = self._pendingMessages[messageId];\n                    if (pendingMessage) {\n                        delete self._pendingMessages[messageId];\n                        pendingMessage.error({ status: 0, statusText: \"Timeout\", responseText: null });\n                    }\n                }, messageTimeoutDuration);\n\n                targetWindow.postMessage(JSON.stringify(envelope), origin);\n            });\n        };\n\n        PostMessageExchange.prototype._ensureHasListener = function () {\n            if (this._hasListener) {\n                return;\n            }\n            this._hasListener = true;\n\n            var self = this,\n                boundHandleMessage = function () {\n                    self._handleMessage.apply(self, arguments);\n                };\n\n            if (window.addEventListener) {\n                window.addEventListener('message', boundHandleMessage, false);\n            } else {\n                // For IE8\n                window.attachEvent('onmessage', boundHandleMessage);\n            }\n        };\n\n        PostMessageExchange.prototype._handleMessage = function (evt) {\n            var envelope = this._tryDeserializeMessage(evt.data),\n                messageId = envelope && envelope.messageId,\n                pendingMessage = messageId && this._pendingMessages[messageId],\n                isValidReply = pendingMessage && pendingMessage.targetWindow === evt.source &&\n                               pendingMessage.origin === getOriginRoot(evt.origin);\n\n            if (isValidReply) {\n                global.clearTimeout(pendingMessage.timeoutId); // No point holding this in memory until the timeout expires\n                delete this._pendingMessages[messageId];\n                pendingMessage.complete(envelope.contents);\n            }\n        };\n\n        PostMessageExchange.prototype._tryDeserializeMessage = function (messageString) {\n            if (!messageString || typeof messageString !== 'string') {\n                return null;\n            }\n\n            try {\n                return JSON.parse(messageString);\n            } catch (ex) {\n                // It's not JSON, so it's not a message for us. Ignore it.\n                return null;\n            }\n        };\n\n        function getOriginRoot(url) {\n            // Returns the proto/host/port part of a URL, i.e., the part that defines the access boundary\n            // for same-origin policy. This is of the form \"protocol://host:port\", where \":port\" is omitted\n            // if it is the default port for that protocol.\n            var parsedUrl = parseUrl(url),\n                portString = parsedUrl.port ? parsedUrl.port.toString() : null,\n                isDefaultPort = (parsedUrl.protocol === 'http:' && portString === '80') ||\n                                (parsedUrl.protocol === 'https:' && portString === '443'),\n                portSuffix = (portString && !isDefaultPort) ? ':' + portString : '';\n            return parsedUrl.protocol + '//' + parsedUrl.hostname + portSuffix;\n        }\n\n        function parseUrl(url) {\n            // https://gist.github.com/2428561 - works on IE8+. Could switch to a more manual, less magic\n            // parser in the future if we need to support IE < 8.\n            var elem = global.document.createElement('a');\n            elem.href = url;\n            return elem;\n        }\n\n        exports.instance = new PostMessageExchange();\n        exports.getOriginRoot = getOriginRoot;\n    };\n\n    $__modules__.Promises = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        // In WinJS, we use WinJS.Promise.\n        // There's no native equivalent for regular JavaScript in the browser, so we implement it here.\n        // This implementation conforms to Promises/A+, making it compatible with WinJS.Promise.\n\n        // Note: There is a standard Promises/A+ test suite, to which this implementation conforms.\n        // See test\\Microsoft.Azure.Zumo.Web.Test\\promiseTests\n\n        // Declare JSHint globals\n        /*global setTimeout:false */\n\n        (function (exports) {\n            \"use strict\";\n\n            var resolutionState = { success: {}, error: {} },\n                bind = function (func, target) { return function () { func.apply(target, arguments); }; }, // Older browsers lack Function.prototype.bind\n                isGenericPromise = function (obj) { return obj && (typeof obj.then === \"function\"); };\n\n            function Promise(init) {\n                this._callbackFrames = [];\n                this._resolutionState = null;\n                this._resolutionValueOrError = null;\n                this._resolveSuccess = bind(this._resolveSuccess, this);\n                this._resolveError = bind(this._resolveError, this);\n\n                if (init) {\n                    init(this._resolveSuccess, this._resolveError);\n                }\n            }\n\n            Promise.prototype.then = function (success, error) {\n                var callbackFrame = { success: success, error: error, chainedPromise: new Promise() };\n\n                // If this promise is already resolved, invoke callbacks immediately. Otherwise queue them.\n                if (this._resolutionState) {\n                    this._invokeCallback(callbackFrame);\n                } else {\n                    this._callbackFrames.push(callbackFrame);\n                }\n\n                return callbackFrame.chainedPromise;\n            };\n\n            Promise.prototype._resolveSuccess = function (val) { this._resolve(resolutionState.success, val); };\n            Promise.prototype._resolveError = function (err) { this._resolve(resolutionState.error, err); };\n\n            Promise.prototype._resolve = function (state, valueOrError) {\n                if (this._resolutionState) {\n                    // Can't affect resolution state when already resolved. We silently ignore the request, without throwing an error,\n                    // to prevent concurrent resolvers from affecting each other during race conditions.\n                    return;\n                }\n\n                this._resolutionState = state;\n                this._resolutionValueOrError = valueOrError;\n\n                // Notify all queued callbacks\n                for (var i = 0, j = this._callbackFrames.length; i < j; i++) {\n                    this._invokeCallback(this._callbackFrames[i]);\n                }\n            };\n\n            Promise.prototype._invokeCallback = function (frame) {\n                var callbackToInvoke = this._resolutionState === resolutionState.success ? frame.success : frame.error;\n                if (typeof callbackToInvoke === \"function\") {\n                    // Call the supplied callback either to transform the result (for success) or to handle the error (for error)\n                    // The setTimeout ensures handlers are always invoked asynchronosly, even if the promise was already resolved,\n                    // to avoid callers having to differentiate between sync/async cases\n                    setTimeout(bind(function () {\n                        var passthroughValue, passthroughState, callbackDidNotThrow = true;\n                        try {\n                            passthroughValue = callbackToInvoke(this._resolutionValueOrError);\n                            passthroughState = resolutionState.success;\n                        } catch (ex) {\n                            callbackDidNotThrow = false;\n                            passthroughValue = ex;\n                            passthroughState = resolutionState.error;\n                        }\n\n                        if (callbackDidNotThrow && isGenericPromise(passthroughValue)) {\n                            // By returning a futher promise from a callback, you can insert it into the chain. This is the basis for composition.\n                            // This rule is in the Promises/A+ spec, but not Promises/A.\n                            passthroughValue.then(frame.chainedPromise._resolveSuccess, frame.chainedPromise._resolveError);\n                        } else {\n                            frame.chainedPromise._resolve(passthroughState, passthroughValue);\n                        }\n                    }, this), 1);\n                } else {\n                    // No callback of the applicable type, so transparently pass existing state/value down the chain\n                    frame.chainedPromise._resolve(this._resolutionState, this._resolutionValueOrError);\n                }\n            };\n\n            // -----------\n            // Everything from here on is extensions beyond the Promises/A+ spec intended to ease code\n            // sharing between WinJS and browser-based Mobile Services apps\n\n            Promise.prototype.done = function (success, error) {\n                this.then(success, error).then(null, function (err) {\n                    // \"done\" throws any final errors as global uncaught exceptions. The setTimeout\n                    // ensures the exception won't get caught in the Promises machinery or user code.\n                    setTimeout(function () { throw new Error(err); }, 1);\n                });\n                return undefined; // You can't chain onto a .done()\n            };\n\n            // Note that we're not implementing any of the static WinJS.Promise.* functions because\n            // the Mobile Services client doesn't even expose any static \"Promise\" object that you\n            // could reference static functions on. Developers who want to use any of the WinJS-style\n            // static functions (any, join, theneach, ...) can use any Promises/A-compatible library\n            // such as when.js.\n            //\n            // Additionally, we don't implement .cancel() yet because Mobile Services operations don't\n            // support cancellation in WinJS yet either. This could be added to both WinJS and Web\n            // client libraries in the future.\n\n            exports.Promise = Promise;\n        })(exports);\n    };\n\n    $__modules__.Validate = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"..\\Generated\\Zumo.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Platform = require('Platform');\n\n        exports.notNull = function (value, name) {\n            /// <summary>\n            /// Ensure the value is not null (or undefined).\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (_.isNull(value)) {\n                throw _.format(Platform.getResourceString(\"Validate_NotNullError\"), name || 'Value');\n            }\n        };\n\n        exports.notNullOrEmpty = function (value, name) {\n            /// <summary>\n            /// Ensure the value is not null, undefined, or empty.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (_.isNullOrEmpty(value)) {\n                throw _.format(Platform.getResourceString(\"Validate_NotNullOrEmptyError\"), name || 'Value');\n            }\n        };\n\n        exports.notNullOrZero = function (value, name) {\n            /// <summary>\n            /// Ensure the value is not null, undefined, zero, or empty.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (_.isNullOrZero(value)) {\n                throw _.format(Platform.getResourceString(\"Validate_NotNullOrEmptyError\"), name || 'Value');\n            }\n        };\n\n        exports.isValidId = function (value, name) {\n            /// <summary>\n            /// Ensure the value is a valid id for mobile services.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (!_.isValidId(value)) {\n                throw _.format(Platform.getResourceString(\"Validate_InvalidId\"), name || 'id');\n            }\n        };\n\n        exports.isDate = function (value, name) {\n            /// <summary>\n            /// Ensure the value is a date.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n            if (!_.isDate(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'Date',\n                    typeof value);\n            }\n        };\n\n        exports.isNumber = function (value, name) {\n            /// <summary>\n            /// Ensure the value is a number.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n\n            if (!_.isNumber(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'Number',\n                    typeof value);\n            }\n        };\n\n        exports.isValidParametersObject = function (value, name) {\n            /// <summary>\n            /// Ensure the Object instance of user-defined parameters is valid.\n            /// </summary>\n            /// <param name=\"value\">The parameters to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n            exports.isObject(value, name);\n\n            for (var parameter in value) {\n                if (parameter.indexOf('$') === 0) {\n                    throw _.format(\n                        Platform.getResourceString(\"Validate_InvalidUserParameter\"),\n                        name,\n                        parameter);\n                }\n            }\n        };\n\n        exports.isInteger = function (value, name) {\n            /// <summary>\n            /// Ensure the value is an integer.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n            exports.isNumber(value, name);\n\n            if (parseInt(value, 10) !== parseFloat(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'number',\n                    typeof value);\n            }\n        };\n\n        exports.isString = function (value, name) {\n            /// <summary>\n            /// Ensure the value is a string.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (!_.isString(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'string',\n                    typeof value);\n            }\n        };\n\n        exports.isObject = function (value, name) {\n            /// <summary>\n            /// Ensure the value is an Object.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (!_.isObject(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'object',\n                    typeof value);\n            }\n        };\n\n        exports.isArray = function (value, name) {\n            /// <summary>\n            /// Ensure the value is an Array.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (!Array.isArray(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'array',\n                    typeof value);\n            }\n        };\n\n        exports.length = function (value, length, name) {\n            /// <summary>\n            /// Ensure the value is of a given length.\n            /// </summary>\n            /// <param name=\"value\" type=\"String\">\n            /// The value to check.\n            /// </param>\n            /// <param name=\"length\" type=\"Number\" integer=\"true\">\n            /// The desired length of the value.\n            /// </param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n            exports.isInteger(length, 'length');\n\n            if (value.length !== length) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_LengthUnexpected\"),\n                    name || 'Value',\n                    length,\n                    value.length);\n            }\n        };\n    };\n\n    $__modules__.JavaScript = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var JS, JavaScript, JavaScriptToQueryVisitor, PartialEvaluator, esprima;\n\n            esprima = require('esprima');\n\n            JS = require('./JavaScriptNodes');\n\n            PartialEvaluator = require('./PartialEvaluator').PartialEvaluator;\n\n            JavaScriptToQueryVisitor = require('./JavaScriptToQueryVisitor').JavaScriptToQueryVisitor;\n\n\n            /*\n             * Define operations on JavaScript\n             */\n\n            exports.JavaScript = JavaScript = (function () {\n                function JavaScript() { }\n\n\n                /*\n                 * Static method to transform a constraint specified as a function into\n                 * a QueryExpression tree.\n                 */\n\n                JavaScript.transformConstraint = function (func, env) {\n\n                    /*\n                     * Parse the body of the function into a JavaScriptExpression tree\n                     * (into a context that also contains its source and manually reified\n                     * environment)\n                     */\n                    var context, translator;\n                    context = JavaScript.getExpression(func, env);\n\n                    /*\n                     * Evaluate any independent subexpressions and turn them into\n                     * literals.\n                     */\n                    context.expression = PartialEvaluator.evaluate(context);\n\n                    /*\n                     * Convert the JavaScriptExpression tree into a QueryExpression tree\n                     */\n                    translator = new JavaScriptToQueryVisitor(context);\n                    return translator.visit(context.expression);\n                };\n\n\n                /*\n                 * Static method to walk a projection specified as a function and\n                 * determine which fields it uses.\n                 */\n\n                JavaScript.getProjectedFields = function (func) {\n\n                    /*\n                     * This currently returns an empty array which indicates all fields.\n                     * At some point we'll need to go through and walk the expression\n                     * tree for func and see exactly which fields it uses.  This is\n                     * complicated by the fact that we support arbitrary expressions and\n                     * could for example pass 'this' to a nested lambda which means we\n                     * can't just check for MemberExpressions (though in that case we'll\n                     * probably just default to [] rather than trying to do alias\n                     * analysis across function calls, etc.)\n                     */\n                    return [];\n                };\n\n\n                /*\n                 * Turn a function and its explicitly passed environment into an\n                 * expression tree\n                 */\n\n                JavaScript.getExpression = function (func, env) {\n\n                    /*\n                     * An anonymous function isn't considered a valid program, so we'll wrap\n                     * it in an assignment statement to keep the parser happy\n                     */\n                    var environment, expr, i, name, names, program, source, _i, _len, _ref, _ref1, _ref10, _ref11, _ref12, _ref13, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;\n                    source = \"var _$$_stmt_$$_ = \" + func + \";\";\n\n                    /*\n                     * Use esprima to parse the source of the function body (and have it\n                     * return source locations in character ranges )\n                     */\n                    program = esprima.parse(source, {\n                        range: true\n                    });\n\n                    /*\n                     * Get the expression from return statement of the function body to use\n                     * as our lambda expression\n                     */\n                    expr = (program != null ? program.type : void 0) === 'Program' && (program != null ? (_ref = program.body) != null ? _ref.length : void 0 : void 0) === 1 && ((_ref1 = program.body[0]) != null ? _ref1.type : void 0) === 'VariableDeclaration' && ((_ref2 = program.body[0]) != null ? (_ref3 = _ref2.declarations) != null ? _ref3.length : void 0 : void 0) === 1 && ((_ref4 = program.body[0].declarations[0]) != null ? _ref4.type : void 0) === 'VariableDeclarator' && ((_ref5 = program.body[0].declarations[0]) != null ? (_ref6 = _ref5.init) != null ? _ref6.type : void 0 : void 0) === 'FunctionExpression' && ((_ref7 = program.body[0].declarations[0].init) != null ? (_ref8 = _ref7.body) != null ? _ref8.type : void 0 : void 0) === 'BlockStatement' && ((_ref9 = program.body[0].declarations[0].init.body) != null ? (_ref10 = _ref9.body) != null ? _ref10.length : void 0 : void 0) === 1 && ((_ref11 = program.body[0].declarations[0].init.body.body[0]) != null ? _ref11.type : void 0) === 'ReturnStatement' && ((_ref12 = program.body[0].declarations[0].init.body.body[0]) != null ? _ref12.argument : void 0);\n                    if (!expr) {\n                        throw \"Expected a predicate with a single return statement, not \" + func;\n                    }\n\n                    /*\n                     * Create the environment mqpping parameters to values\n                     */\n                    names = (_ref13 = program.body[0].declarations[0].init.params) != null ? _ref13.map(function (p) {\n                        return p.name;\n                    }) : void 0;\n                    if (names.length > env.length) {\n                        throw \"Expected value(s) for parameter(s) \" + names.slice(env.length);\n                    } else if (env.length > names.length) {\n                        throw \"Expected parameter(s) for value(s) \" + env.slice(names.length);\n                    }\n                    environment = {};\n                    for (i = _i = 0, _len = names.length; _i < _len; i = ++_i) {\n                        name = names[i];\n                        environment[name] = env[i];\n                    }\n                    return {\n\n                        /*\n                         * Return the environment context\n                         */\n                        source: source,\n                        expression: expr,\n                        environment: environment\n                    };\n                };\n\n                return JavaScript;\n\n            })();\n\n        }).call(this);\n    };\n\n    $__modules__.JavaScriptNodes = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n\n        /*\n         * Define the Esprima node structure for JavaScript parse trees.  This is mostly\n         * identical to the SpiderMonkey API defined at\n         * https://developer.mozilla.org/en/SpiderMonkey/Parser_API without any of the\n         * SpiderMonkey specifics and a few simplifications made by Esprima (i.e. it\n         * doesn't have separate objects for operator types, etc.).\n         *\n         * It's important to note that the Esprima parse tree will return object literals\n         * and not instances of these types.  They're provided primarily for reference\n         * and for easily constructing new subtrees during transformations by visitors.\n         */\n\n\n        /* Get the base Node and Visitor classes. */\n\n        (function () {\n            var ArrayExpression, ArrayPattern, AssignmentExpression, BinaryExpression, BlockStatement, BreakStatement, CallExpression, CatchClause, ConditionalExpression, ContinueStatement, DebuggerStatement, Declaration, DoWhileStatement, EmptyStatement, Expression, ExpressionStatement, ForInStatement, ForStatement, Function, FunctionDeclaration, FunctionExpression, Identifier, IfStatement, JavaScriptNode, JavaScriptVisitor, LabeledStatement, Literal, LogicalExpression, MemberExpression, NewExpression, Node, ObjectExpression, ObjectPattern, Pattern, Program, ReturnStatement, SequenceExpression, Statement, SwitchCase, SwitchStatement, ThisExpression, ThrowStatement, TryStatement, UnaryExpression, UpdateExpression, VariableDeclaration, VariableDeclarator, Visitor, WhileStatement, WithStatement, _ref,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ref = require('./Node'), Node = _ref.Node, Visitor = _ref.Visitor;\n\n\n            /*\n             * Base node for all JavaScript nodes.\n             */\n\n            exports.JavaScriptNode = JavaScriptNode = (function (_super) {\n                __extends(JavaScriptNode, _super);\n\n                function JavaScriptNode() {\n                    JavaScriptNode.__super__.constructor.call(this);\n                }\n\n                return JavaScriptNode;\n\n            })(Node);\n\n\n            /*\n             * Base visitor for all JavaScript nodes.\n             */\n\n            exports.JavaScriptVisitor = JavaScriptVisitor = (function (_super) {\n                __extends(JavaScriptVisitor, _super);\n\n                function JavaScriptVisitor() {\n                    JavaScriptVisitor.__super__.constructor.call(this);\n                }\n\n                JavaScriptVisitor.prototype.JavaScriptNode = function (node) {\n                    return node;\n                };\n\n                return JavaScriptVisitor;\n\n            })(Visitor);\n\n\n            /*\n             * A complete program source tree.\n             */\n\n            exports.Program = Program = (function (_super) {\n                __extends(Program, _super);\n\n\n                /*\n                 * @elements: [Statement]\n                 */\n\n                function Program(elements) {\n                    this.elements = elements;\n                    Program.__super__.constructor.call(this);\n                }\n\n                return Program;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Program = function (node) {\n                node = this.JavaScriptNode(node);\n                node.elements = this.visit(node.elements);\n                return node;\n            };\n\n\n            /*\n             * A function declaration or expression. The body of the function is a  block\n             * statement.\n             */\n\n            exports.Function = Function = (function (_super) {\n                __extends(Function, _super);\n\n\n                /*\n                 * @id: Identifier | null\n                 * @params: [Pattern]\n                 * @body: BlockStatement\n                 */\n\n                function Function(id, params, body) {\n                    this.id = id;\n                    this.params = params;\n                    this.body = body;\n                    Function.__super__.constructor.call(this);\n                }\n\n                return Function;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Function = function (node) {\n                node = this.JavaScriptNode(node);\n                node.id = this.visit(node.id);\n                node.params = this.visit(node.params);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * Any statement.\n             */\n\n            exports.Statement = Statement = (function (_super) {\n                __extends(Statement, _super);\n\n                function Statement() {\n                    Statement.__super__.constructor.call(this);\n                }\n\n                return Statement;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Statement = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * An empty statement, i.e., a solitary semicolon.\n             */\n\n            exports.EmptyStatement = EmptyStatement = (function (_super) {\n                __extends(EmptyStatement, _super);\n\n                function EmptyStatement() {\n                    EmptyStatement.__super__.constructor.call(this);\n                }\n\n                return EmptyStatement;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.EmptyStatement = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * A block statement, i.e., a sequence of statements surrounded by braces.\n             */\n\n            exports.BlockStatement = BlockStatement = (function (_super) {\n                __extends(BlockStatement, _super);\n\n\n                /*\n                 * @body: [Statement]\n                 */\n\n                function BlockStatement(body) {\n                    this.body = body;\n                    BlockStatement.__super__.constructor.call(this);\n                }\n\n                return BlockStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.BlockStatement = function (node) {\n                node = this.Statement(node);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * An expression statement, i.e., a statement consisting of a single expression.\n             */\n\n            exports.ExpressionStatement = ExpressionStatement = (function (_super) {\n                __extends(ExpressionStatement, _super);\n\n                function ExpressionStatement() {\n                    ExpressionStatement.__super__.constructor.call(this);\n                }\n\n                return ExpressionStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ExpressionStatement = function (node) {\n                node = this.Statement(node);\n                return node;\n            };\n\n\n            /*\n             * An if statement.\n             */\n\n            exports.IfStatement = IfStatement = (function (_super) {\n                __extends(IfStatement, _super);\n\n\n                /*\n                 * @test: Expression\n                 * @consequent: Statement\n                 * @alternate: Statement | null\n                 */\n\n                function IfStatement(test, consequent, alternate) {\n                    this.test = test;\n                    this.consequent = consequent;\n                    this.alternate = alternate;\n                    IfStatement.__super__.constructor.call(this);\n                }\n\n                return IfStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.IfStatement = function (node) {\n                node = this.Statement(node);\n                node.test = this.visit(node.test);\n                node.consequent = this.visit(node.consequent);\n                node.alternate = this.visit(node.alternate);\n                return node;\n            };\n\n\n            /*\n             * A labeled statement, i.e., a statement prefixed by a break/continue label.\n             */\n\n            exports.LabeledStatement = LabeledStatement = (function (_super) {\n                __extends(LabeledStatement, _super);\n\n\n                /*\n                 * @label: Identifier\n                 * @body: Statement\n                 */\n\n                function LabeledStatement(label, body) {\n                    this.label = label;\n                    this.body = body;\n                    LabeledStatement.__super__.constructor.call(this);\n                }\n\n                return LabeledStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.LabeledStatement = function (node) {\n                node = this.Statement(node);\n                node.label = this.visit(node.label);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A break statement.\n             */\n\n            exports.BreakStatement = BreakStatement = (function (_super) {\n                __extends(BreakStatement, _super);\n\n\n                /*\n                 * @label: Identifier | null\n                 */\n\n                function BreakStatement(label) {\n                    this.label = label;\n                    BreakStatement.__super__.constructor.call(this);\n                }\n\n                return BreakStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.BreakStatement = function (node) {\n                node = this.Statement(node);\n                node.label = this.visit(node.label);\n                return node;\n            };\n\n\n            /*\n            A continue statement.\n             */\n\n            exports.ContinueStatement = ContinueStatement = (function (_super) {\n                __extends(ContinueStatement, _super);\n\n\n                /*\n                @label: Identifier | null\n                 */\n\n                function ContinueStatement(label) {\n                    this.label = label;\n                    ContinueStatement.__super__.constructor.call(this);\n                }\n\n                return ContinueStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ContinueStatement = function (node) {\n                node = this.Statement(node);\n                node.label = this.visit(node.label);\n                return node;\n            };\n\n\n            /*\n             * A with statement.\n             */\n\n            exports.WithStatement = WithStatement = (function (_super) {\n                __extends(WithStatement, _super);\n\n\n                /*\n                 * @object: Expression\n                 * @body: Statement\n                 */\n\n                function WithStatement(object, body) {\n                    this.object = object;\n                    this.body = body;\n                    WithStatement.__super__.constructor.call(this);\n                }\n\n                return WithStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.WithStatement = function (node) {\n                node = this.Statement(node);\n                node.object = this.visit(node.object);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A switch statement.\n             */\n\n            exports.SwitchStatement = SwitchStatement = (function (_super) {\n                __extends(SwitchStatement, _super);\n\n\n                /*\n                 * @discriminant: Expression\n                 * @cases: [SwitchCase]\n                 */\n\n                function SwitchStatement(discriminant, cases) {\n                    this.discriminant = discriminant;\n                    this.cases = cases;\n                    SwitchStatement.__super__.constructor.call(this);\n                }\n\n                return SwitchStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.SwitchStatement = function (node) {\n                node = this.Statement(node);\n                node.discriminant = this.visit(node.discriminant);\n                node.cases = this.visit(node.cases);\n                return node;\n            };\n\n\n            /*\n             * A return statement.\n             */\n\n            exports.ReturnStatement = ReturnStatement = (function (_super) {\n                __extends(ReturnStatement, _super);\n\n\n                /*\n                 * @argument: Expression | null\n                 */\n\n                function ReturnStatement(argument) {\n                    this.argument = argument;\n                    ReturnStatement.__super__.constructor.call(this);\n                }\n\n                return ReturnStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ReturnStatement = function (node) {\n                node = this.Statement(node);\n                node.argument = this.visit(node.argument);\n                return node;\n            };\n\n\n            /*\n             * A throw statement.\n             */\n\n            exports.ThrowStatement = ThrowStatement = (function (_super) {\n                __extends(ThrowStatement, _super);\n\n\n                /*\n                 * @argument: Expression\n                 */\n\n                function ThrowStatement(argument) {\n                    this.argument = argument;\n                    ThrowStatement.__super__.constructor.call(this);\n                }\n\n                return ThrowStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ThrowStatement = function (node) {\n                node = this.Statement(node);\n                node.argument = this.visit(node.argument);\n                return node;\n            };\n\n\n            /*\n             * A try statement.\n             */\n\n            exports.TryStatement = TryStatement = (function (_super) {\n                __extends(TryStatement, _super);\n\n\n                /*\n                 * @block: BlockStatement\n                 * @handlers: [CatchClause]\n                 * @finalizer: BlockStatement | null\n                 */\n\n                function TryStatement(block, handlers, finalizer) {\n                    this.block = block;\n                    this.handlers = handlers;\n                    this.finalizer = finalizer;\n                    TryStatement.__super__.constructor.call(this);\n                }\n\n                return TryStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.TryStatement = function (node) {\n                node = this.Statement(node);\n                node.block = this.visit(node.block);\n                node.handlers = this.visit(node.handlers);\n                node.finalizer = this.visit(node.finalizer);\n                return node;\n            };\n\n\n            /*\n             * A while statement.\n             */\n\n            exports.WhileStatement = WhileStatement = (function (_super) {\n                __extends(WhileStatement, _super);\n\n\n                /*\n                 * @test: Expression\n                 * @body: Statement\n                 */\n\n                function WhileStatement(test, body) {\n                    this.test = test;\n                    this.body = body;\n                    WhileStatement.__super__.constructor.call(this);\n                }\n\n                return WhileStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.WhileStatement = function (node) {\n                node = this.Statement(node);\n                node.test = this.visit(node.test);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A do/while statement.\n             */\n\n            exports.DoWhileStatement = DoWhileStatement = (function (_super) {\n                __extends(DoWhileStatement, _super);\n\n\n                /*\n                 * @body: Statement\n                 * @test: Expression\n                 */\n\n                function DoWhileStatement(body, test) {\n                    this.body = body;\n                    this.test = test;\n                    DoWhileStatement.__super__.constructor.call(this);\n                }\n\n                return DoWhileStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.DoWhileStatement = function (node) {\n                node = this.Statement(node);\n                node.body = this.visit(node.body);\n                node.test = this.visit(node.test);\n                return node;\n            };\n\n\n            /*\n             * A for statement.\n             */\n\n            exports.ForStatement = ForStatement = (function (_super) {\n                __extends(ForStatement, _super);\n\n\n                /*\n                 * @init: VariableDeclaration | Expression | null\n                 * @test: Expression | null\n                 * @update: Expression | null\n                 * @body: Statement\n                 */\n\n                function ForStatement(init, test, update, body) {\n                    this.init = init;\n                    this.test = test;\n                    this.update = update;\n                    this.body = body;\n                    ForStatement.__super__.constructor.call(this);\n                }\n\n                return ForStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ForStatement = function (node) {\n                node = this.Statement(node);\n                node.init = this.visit(node.init);\n                node.test = this.visit(node.test);\n                node.update = this.visit(node.update);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A for/in statement, or, if each is true, a for each/in statement.\n             */\n\n            exports.ForInStatement = ForInStatement = (function (_super) {\n                __extends(ForInStatement, _super);\n\n\n                /*\n                 * @left: VariableDeclaration |  Expression\n                 * @right: Expression\n                 * @body: Statement\n                 */\n\n                function ForInStatement(left, right, body) {\n                    this.left = left;\n                    this.right = right;\n                    this.body = body;\n                    ForInStatement.__super__.constructor.call(this);\n                }\n\n                return ForInStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ForInStatement = function (node) {\n                node = this.Statement(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A debugger statement.\n             */\n\n            exports.DebuggerStatement = DebuggerStatement = (function (_super) {\n                __extends(DebuggerStatement, _super);\n\n                function DebuggerStatement() {\n                    DebuggerStatement.__super__.constructor.call(this);\n                }\n\n                return DebuggerStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.DebuggerStatement = function (node) {\n                node = this.Statement(node);\n                return node;\n            };\n\n\n            /*\n             * Any declaration node. Note that declarations are considered statements; this\n             * is because declarations can appear in any statement context in the language.\n             */\n\n            exports.Declaration = Declaration = (function (_super) {\n                __extends(Declaration, _super);\n\n                function Declaration() {\n                    Declaration.__super__.constructor.call(this);\n                }\n\n                return Declaration;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.Declaration = function (node) {\n                node = this.Statement(node);\n                return node;\n            };\n\n\n            /*\n             * A function declaration.  Note: The id field cannot be null.\n             */\n\n            exports.FunctionDeclaration = FunctionDeclaration = (function (_super) {\n                __extends(FunctionDeclaration, _super);\n\n\n                /*\n                 * @id: Identifier\n                 * @params: [ Pattern ]\n                 * @body: BlockStatement | Expression\n                 */\n\n                function FunctionDeclaration(id, params, body) {\n                    this.id = id;\n                    this.params = params;\n                    this.body = body;\n                    FunctionDeclaration.__super__.constructor.call(this);\n                }\n\n                return FunctionDeclaration;\n\n            })(Declaration);\n\n            JavaScriptVisitor.prototype.FunctionDeclaration = function (node) {\n                node = this.Declaration(node);\n                node.id = this.visit(node.id);\n                node.params = this.visit(node.params);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A variable declaration, via one of var, let, or const.\n             */\n\n            exports.VariableDeclaration = VariableDeclaration = (function (_super) {\n                __extends(VariableDeclaration, _super);\n\n\n                /*\n                 * @declarations: [ VariableDeclarator ]\n                 * @kind: \"var\"\n                 */\n\n                function VariableDeclaration(declarations, kind) {\n                    this.declarations = declarations;\n                    this.kind = kind;\n                    VariableDeclaration.__super__.constructor.call(this);\n                }\n\n                return VariableDeclaration;\n\n            })(Declaration);\n\n            JavaScriptVisitor.prototype.VariableDeclaration = function (node) {\n                node = this.Declaration(node);\n                node.declarations = this.visit(node.declarations);\n                return node;\n            };\n\n\n            /*\n             * A variable declarator.  Note: The id field cannot be null.\n             */\n\n            exports.VariableDeclarator = VariableDeclarator = (function (_super) {\n                __extends(VariableDeclarator, _super);\n\n\n                /*\n                 * @id: Pattern\n                 * @init: Expression | null\n                 */\n\n                function VariableDeclarator(id, init) {\n                    this.id = id;\n                    this.init = init;\n                    VariableDeclarator.__super__.constructor.call(this);\n                }\n\n                return VariableDeclarator;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.VariableDeclarator = function (node) {\n                node = this.JavaScriptNode(node);\n                node.id = this.visit(node.id);\n                node.init = this.visit(node.init);\n                return node;\n            };\n\n\n            /*\n             * Any expression node. Since the left-hand side of an assignment may be any\n             * expression in general, an expression can also be a pattern.\n             */\n\n            exports.Expression = Expression = (function (_super) {\n                __extends(Expression, _super);\n\n                function Expression() {\n                    return Expression.__super__.constructor.apply(this, arguments);\n                }\n\n                Expression.prototype.constuctor = function () {\n                    return Expression.__super__.constuctor.call(this);\n                };\n\n                return Expression;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Expression = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * A this expression.\n             */\n\n            exports.ThisExpression = ThisExpression = (function (_super) {\n                __extends(ThisExpression, _super);\n\n                function ThisExpression() {\n                    ThisExpression.__super__.constructor.call(this);\n                }\n\n                return ThisExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.ThisExpression = function (node) {\n                node = this.Expression(node);\n                return node;\n            };\n\n\n            /*\n             * An array expression.\n             */\n\n            exports.ArrayExpression = ArrayExpression = (function (_super) {\n                __extends(ArrayExpression, _super);\n\n\n                /*\n                 * @elements: [ Expression | null ]\n                 */\n\n                function ArrayExpression(elements) {\n                    this.elements = elements;\n                    ArrayExpression.__super__.constructor.call(this);\n                }\n\n                return ArrayExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.ArrayExpression = function (node) {\n                node = this.Expression(node);\n                node.elements = this.visit(node.elements);\n                return node;\n            };\n\n\n            /*\n             * An object expression. A literal property in an object expression can have\n             * either a string or number as its value.  Ordinary property initializers have a\n             * kind value \"init\"; getters and setters have the kind values \"get\" and \"set\",\n             * respectively.\n             */\n\n            exports.ObjectExpression = ObjectExpression = (function (_super) {\n                __extends(ObjectExpression, _super);\n\n\n                /*\n                 * @properties: [ { key: Literal | Identifier,\n                 *                 value: Expression,\n                 *                 kind: \"init\" | \"get\" | \"set\" } ];\n                 */\n\n                function ObjectExpression(properties) {\n                    this.properties = properties;\n                    ObjectExpression.__super__.constructor.call(this);\n                }\n\n                return ObjectExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.ObjectExpression = function (node) {\n                var setter, _i, _len, _ref1;\n                node = this.Expression(node);\n                _ref1 = node.properties;\n                for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n                    setter = _ref1[_i];\n                    setter.key = this.visit(setter.key);\n                    setter.value = this.visit(setter.value);\n                }\n                return node;\n            };\n\n\n            /*\n             * A function expression.\n             */\n\n            exports.FunctionExpression = FunctionExpression = (function (_super) {\n                __extends(FunctionExpression, _super);\n\n\n                /*\n                 * @id: Identifier | null\n                 * @params: [ Pattern ]\n                 * @body: BlockStatement | Expression\n                 */\n\n                function FunctionExpression(id, params, body) {\n                    this.id = id;\n                    this.params = params;\n                    this.body = body;\n                    FunctionExpression.__super__.constructor.call(this);\n                }\n\n                return FunctionExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.FunctionExpression = function (node) {\n                node = this.Expression(node);\n                node.id = this.visit(node.id);\n                node.params = this.visit(node.params);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A sequence expression, i.e., a comma-separated sequence of expressions.\n             */\n\n            exports.SequenceExpression = SequenceExpression = (function (_super) {\n                __extends(SequenceExpression, _super);\n\n\n                /*\n                 * @expressions: [ Expression ]\n                 */\n\n                function SequenceExpression(expressions) {\n                    this.expressions = expressions;\n                    SequenceExpression.__super__.constructor.call(this);\n                }\n\n                return SequenceExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.SequenceExpression = function (node) {\n                node = this.Expression(node);\n                node.expressions = this.visit(node.expressions);\n                return node;\n            };\n\n\n            /*\n             * A unary operator expression.\n             */\n\n            exports.UnaryExpression = UnaryExpression = (function (_super) {\n                __extends(UnaryExpression, _super);\n\n\n                /*\n                 * @operator: \"-\" | \"+\" | \"!\" | \"~\" | \"typeof\" | \"void\" | \"delete\"\n                 * @prefix: boolean\n                 * @argument: Expression\n                 */\n\n                function UnaryExpression(operator, prefix, argument) {\n                    this.operator = operator;\n                    this.prefix = prefix;\n                    this.argument = argument;\n                    UnaryExpression.__super__.constructor.call(this);\n                }\n\n                return UnaryExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.UnaryExpression = function (node) {\n                node = this.Expression(node);\n                node.argument = this.visit(node.argument);\n                return node;\n            };\n\n\n            /*\n             * A binary operator expression.\n             */\n\n            exports.BinaryExpression = BinaryExpression = (function (_super) {\n                __extends(BinaryExpression, _super);\n\n\n                /*\n                 * @operator: \"==\" | \"!=\" | \"===\" | \"!==\" | \"<\" | \"<=\" | \">\" | \">=\"\n                 *     | \"<<\" | \">>\" | \">>>\" | \"+\" | \"-\" | \"*\" | \"/\" | \"%\"\n                 *     | \"|\" | \"&\" | \"^\" | \"in\" | \"instanceof\" | \"..\"\n                 * @left: Expression\n                 * @right: Expression\n                 */\n\n                function BinaryExpression(operator, left, right) {\n                    this.operator = operator;\n                    this.left = left;\n                    this.right = right;\n                    BinaryExpression.__super__.constructor.call(this);\n                }\n\n                return BinaryExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.BinaryExpression = function (node) {\n                node = this.Expression(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                return node;\n            };\n\n\n            /*\n             * An assignment operator expression.\n             */\n\n            exports.AssignmentExpression = AssignmentExpression = (function (_super) {\n                __extends(AssignmentExpression, _super);\n\n\n                /*\n                 * @operator: \"=\" | \"+=\" | \"-=\" | \"*=\" | \"/=\" | \"%=\"\n                 *     | \"<<=\" | \">>=\" | \">>>=\" | \"|=\" | \"^=\" | \"&=\";\n                 * @left: Expression\n                 * @right: Expression\n                 */\n\n                function AssignmentExpression(operator, left, right) {\n                    this.operator = operator;\n                    this.left = left;\n                    this.right = right;\n                    AssignmentExpression.__super__.constructor.call(this);\n                }\n\n                return AssignmentExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.AssignmentExpression = function (node) {\n                node = this.Expression(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                return node;\n            };\n\n\n            /*\n             * An update (increment or decrement) operator expression.\n             */\n\n            exports.UpdateExpression = UpdateExpression = (function (_super) {\n                __extends(UpdateExpression, _super);\n\n\n                /*\n                 * @operator: \"++\" | \"--\"\n                 * @argument: Expression\n                 * @prefix: boolean\n                 */\n\n                function UpdateExpression(operator, argument, prefix) {\n                    this.operator = operator;\n                    this.argument = argument;\n                    this.prefix = prefix;\n                    UpdateExpression.__super__.constructor.call(this);\n                }\n\n                return UpdateExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.UpdateExpression = function (node) {\n                node = this.Expression(node);\n                node.argument = this.visit(node.argument);\n                return node;\n            };\n\n\n            /*\n             * A logical operator expression.\n             */\n\n            exports.LogicalExpression = LogicalExpression = (function (_super) {\n                __extends(LogicalExpression, _super);\n\n\n                /*\n                 * @operator: \"||\" | \"&&\"\n                 * @left: Expression\n                 * @right: Expression\n                 */\n\n                function LogicalExpression(operator, left, right) {\n                    this.operator = operator;\n                    this.left = left;\n                    this.right = right;\n                    LogicalExpression.__super__.constructor.call(this);\n                }\n\n                return LogicalExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.LogicalExpression = function (node) {\n                node = this.Expression(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                return node;\n            };\n\n\n            /*\n             * A conditional expression, i.e., a ternary ?/: expression.\n             */\n\n            exports.ConditionalExpression = ConditionalExpression = (function (_super) {\n                __extends(ConditionalExpression, _super);\n\n\n                /*\n                 * @test: Expression\n                 * @alternate: Expression\n                 * @consequent: Expression\n                 */\n\n                function ConditionalExpression(test, alternate, consequent) {\n                    this.test = test;\n                    this.alternate = alternate;\n                    this.consequent = consequent;\n                    ConditionalExpression.__super__.constructor.call(this);\n                }\n\n                return ConditionalExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.ConditionalExpression = function (node) {\n                node = this.Expression(node);\n                node.test = this.visit(node.test);\n                node.alternate = this.visit(node.alternate);\n                node.consequent = this.visit(node.consequent);\n                return node;\n            };\n\n\n            /*\n             * A new expression.\n             */\n\n            exports.NewExpression = NewExpression = (function (_super) {\n                __extends(NewExpression, _super);\n\n\n                /*\n                 * @callee: Expression\n                 * @arguments: [ Expression ] | null\n                 */\n\n                function NewExpression(callee, _arguments) {\n                    this.callee = callee;\n                    this[\"arguments\"] = _arguments;\n                    NewExpression.__super__.constructor.call(this);\n                }\n\n                return NewExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.NewExpression = function (node) {\n                node = this.Expression(node);\n                node.callee = this.visit(node.callee);\n                node[\"arguments\"] = this.visit(node[\"arguments\"]);\n                return node;\n            };\n\n\n            /*\n             * A function or method call expression.\n             */\n\n            exports.CallExpression = CallExpression = (function (_super) {\n                __extends(CallExpression, _super);\n\n\n                /*\n                 * @callee: Expression\n                 * @arguments: [ Expression ]\n                 */\n\n                function CallExpression(callee, _arguments) {\n                    this.callee = callee;\n                    this[\"arguments\"] = _arguments;\n                    CallExpression.__super__.constructor.call(this);\n                }\n\n                return CallExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.CallExpression = function (node) {\n                node = this.Expression(node);\n                node.callee = this.visit(node.callee);\n                node[\"arguments\"] = this.visit(node[\"arguments\"]);\n                return node;\n            };\n\n\n            /*\n             * A member expression. If computed === true, the node corresponds to a computed\n             * e1[e2] expression and property is an Expression. If computed === false, the\n             * node corresponds to a static e1.x expression and property is an Identifier.\n             */\n\n            exports.MemberExpression = MemberExpression = (function (_super) {\n                __extends(MemberExpression, _super);\n\n\n                /*\n                 * @object: Expression\n                 * @property: Identifier | Expression\n                 * @computed : boolean\n                 */\n\n                function MemberExpression(object, property, computed) {\n                    this.object = object;\n                    this.property = property;\n                    this.computed = computed;\n                    MemberExpression.__super__.constructor.call(this);\n                }\n\n                return MemberExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.MemberExpression = function (node) {\n                node = this.Expression(node);\n                node.object = this.visit(node.object);\n                node.property = this.visit(node.property);\n                return node;\n            };\n\n\n            /*\n             * JavaScript 1.7 introduced destructuring assignment and binding forms.  All\n             * binding forms (such as function parameters, variable declarations, and catch\n             * block headers), accept array and object destructuring patterns in addition to\n             * plain identifiers. The left-hand sides of assignment expressions can be\n             * arbitrary expressions, but in the case where the expression is an object or\n             * array literal, it is interpreted by SpiderMonkey as a destructuring pattern.\n             *\n             * Since the left-hand side of an assignment can in general be any expression, in\n             * an assignment context, a pattern can be any expression. In binding positions\n             * (such as function parameters, variable declarations, and catch headers),\n             * patterns can only be identifiers in the base case, not arbitrary expressions.\n             */\n\n            exports.Pattern = Pattern = (function (_super) {\n                __extends(Pattern, _super);\n\n                function Pattern() {\n                    Pattern.__super__.constructor.call(this);\n                }\n\n                return Pattern;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Pattern = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * An object-destructuring pattern. A literal property in an object pattern can\n             * have either a string or number as its value.\n             */\n\n            exports.ObjectPattern = ObjectPattern = (function (_super) {\n                __extends(ObjectPattern, _super);\n\n\n                /*\n                 * @properties: [ { key: Literal | Identifier, value: Pattern } ]\n                 */\n\n                function ObjectPattern(properties) {\n                    this.properties = properties;\n                    ObjectPattern.__super__.constructor.call(this);\n                }\n\n                return ObjectPattern;\n\n            })(Pattern);\n\n            JavaScriptVisitor.prototype.ObjectPattern = function (node) {\n                var setter, _i, _len, _ref1;\n                node = this.Pattern(node);\n                _ref1 = node.properties;\n                for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n                    setter = _ref1[_i];\n                    setter.key = this.visit(setter.key);\n                    setter.value = this.visit(setter.value);\n                }\n                return node;\n            };\n\n\n            /*\n             * An array-destructuring pattern.\n             */\n\n            exports.ArrayPattern = ArrayPattern = (function (_super) {\n                __extends(ArrayPattern, _super);\n\n\n                /*\n                 * @elements: [ Pattern | null ]\n                 */\n\n                function ArrayPattern(elements) {\n                    this.elements = elements;\n                    ArrayPattern.__super__.constructor.call(this);\n                }\n\n                return ArrayPattern;\n\n            })(Pattern);\n\n            JavaScriptVisitor.prototype.ArrayPattern = function (node) {\n                node = this.Pattern(node);\n                node.elements = this.visit(node.elements);\n                return node;\n            };\n\n\n            /*\n             * A case (if test is an Expression) or default (if test === null) clause in the\n             * body of a switch statement.\n             */\n\n            exports.SwitchCase = SwitchCase = (function (_super) {\n                __extends(SwitchCase, _super);\n\n\n                /*\n                 * @test: Expression | null\n                 * @consequent: [ Statement ]\n                 */\n\n                function SwitchCase(test, consequent) {\n                    this.test = test;\n                    this.consequent = consequent;\n                    SwitchCase.__super__.constructor.call(this);\n                }\n\n                return SwitchCase;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.SwitchCase = function (node) {\n                node = this.JavaScriptNode(node);\n                node.test = this.visit(node.test);\n                node.consequent = this.visit(node.consequent);\n                return node;\n            };\n\n\n            /*\n             * A catch clause following a try block. The optional guard property corresponds\n             * to the optional expression guard on the bound variable.\n             */\n\n            exports.CatchClause = CatchClause = (function (_super) {\n                __extends(CatchClause, _super);\n\n\n                /*\n                 * @param: Pattern\n                 * @body: BlockStatement\n                 */\n\n                function CatchClause(param, body) {\n                    this.param = param;\n                    this.body = body;\n                    CatchClause.__super__.constructor.call(this);\n                }\n\n                return CatchClause;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.CatchClause = function (node) {\n                node = this.JavaScriptNode(node);\n                node.param = this.visit(node.param);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * An identifier. Note that an identifier may be an expression or a destructuring\n             * pattern.\n             */\n\n            exports.Identifier = Identifier = (function (_super) {\n                __extends(Identifier, _super);\n\n\n                /*\n                 * @name: string\n                 */\n\n                function Identifier(name) {\n                    this.name = name;\n                    Identifier.__super__.constructor.call(this);\n                }\n\n                return Identifier;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Identifier = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * A literal token. Note that a literal can be an expression.\n             */\n\n            exports.Literal = Literal = (function (_super) {\n                __extends(Literal, _super);\n\n\n                /*\n                 * @value: string | boolean | null | number | RegExp\n                 */\n\n                function Literal(value) {\n                    this.value = value;\n                    Literal.__super__.constructor.call(this);\n                }\n\n                return Literal;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.Literal = function (node) {\n                node = this.Expression(node);\n                return node;\n            };\n\n        }).call(this);\n    };\n\n    $__modules__.JavaScriptToQueryVisitor = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var JS, JavaScriptToQueryVisitor, Q, _,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ = require('./Utilities');\n\n            JS = require('./JavaScriptNodes');\n\n            Q = require('./QueryNodes');\n\n\n            /*\n             * Walk the JavaScriptExpression tree and convert its nodes into QueryExpression\n             * trees\n             */\n\n            exports.JavaScriptToQueryVisitor = JavaScriptToQueryVisitor = (function (_super) {\n                __extends(JavaScriptToQueryVisitor, _super);\n\n                function JavaScriptToQueryVisitor(context) {\n                    this.context = context;\n                }\n\n\n                /* Get the source code for a given node */\n\n                JavaScriptToQueryVisitor.prototype.getSource = function (node) {\n                    var _ref, _ref1;\n                    return this.context.source.slice(node != null ? (_ref = node.range) != null ? _ref[0] : void 0 : void 0, +((node != null ? (_ref1 = node.range) != null ? _ref1[1] : void 0 : void 0) - 1) + 1 || 9e9);\n                };\n\n\n                /* Throw an exception for an invalid node. */\n\n                JavaScriptToQueryVisitor.prototype.invalid = function (node) {\n                    throw \"The expression '\" + (this.getSource(node)) + \"'' is not supported.\";\n                };\n\n\n                /* Unary expressions just map operators */\n\n                JavaScriptToQueryVisitor.prototype.translateUnary = function (node, mapping) {\n                    var op, value;\n                    op = mapping[node.operator];\n                    if (op) {\n                        value = this.visit(node.argument);\n                        return new Q.UnaryExpression(op, value);\n                    } else {\n                        return null;\n                    }\n                };\n\n\n                /* Binary expressions just map operators */\n\n                JavaScriptToQueryVisitor.prototype.translateBinary = function (node, mapping) {\n                    var left, op, right;\n                    op = mapping[node.operator];\n                    if (op) {\n                        left = this.visit(node.left);\n                        right = this.visit(node.right);\n                        return new Q.BinaryExpression(op, left, right);\n                    } else {\n                        return null;\n                    }\n                };\n\n\n                /*\n                 * The base visit method will throw exceptions for any nodes that remain\n                 * untransformed (which allows us to only bother defining meaningful\n                 * translations)\n                 */\n\n                JavaScriptToQueryVisitor.prototype.visit = function (node) {\n                    var visited;\n                    visited = JavaScriptToQueryVisitor.__super__.visit.call(this, node);\n                    if (node === visited) {\n                        this.invalid(node);\n                    }\n                    return visited;\n                };\n\n                JavaScriptToQueryVisitor.prototype.MemberExpression = function (node) {\n                    var expr;\n                    expr = (function () {\n                        var _ref, _ref1, _ref2, _ref3;\n                        if ((node != null ? (_ref = node.object) != null ? _ref.type : void 0 : void 0) === 'ThisExpression' && (node != null ? (_ref1 = node.property) != null ? _ref1.type : void 0 : void 0) === 'Identifier') {\n\n                            /* Simple member access */\n                            return new Q.MemberExpression(node.property.name);\n                        } else if ((node != null ? (_ref2 = node.object) != null ? _ref2.type : void 0 : void 0) === 'MemberExpression' && ((_ref3 = node.object.object) != null ? _ref3.type : void 0) === 'ThisExpression' && node.property.type === 'Identifier') {\n\n                            /* Methods that look like properties */\n                            if (node.property.name === 'length') {\n                                return new Q.InvocationExpression(Q.Methods.Length, new Q.MemberExpression(node.object.property.name));\n                            }\n                        }\n                    })();\n                    return expr != null ? expr : JavaScriptToQueryVisitor.__super__.MemberExpression.call(this, node);\n                };\n\n                JavaScriptToQueryVisitor.prototype.Literal = function (node) {\n                    return new Q.ConstantExpression(node.value);\n                };\n\n                JavaScriptToQueryVisitor.prototype.UnaryExpression = function (node) {\n                    var mapping, _ref;\n                    if (node.operator === '+') {\n\n                        /* Ignore the + in '+52' */\n                        return this.visit(node.argument);\n                    } else {\n                        mapping = {\n                            '!': Q.UnaryOperators.Not,\n                            '-': Q.UnaryOperators.Negate\n                        };\n                        return (_ref = this.translateUnary(node, mapping)) != null ? _ref : JavaScriptToQueryVisitor.__super__.UnaryExpression.call(this, node);\n                    }\n                };\n\n                JavaScriptToQueryVisitor.prototype.UpdateExpression = function (node) {\n                    var mapping, _ref;\n                    mapping = {\n                        '++': Q.UnaryOperators.Increment,\n                        '--': Q.UnaryOperators.Decrement\n                    };\n                    return (_ref = this.translateUnary(node, mapping)) != null ? _ref : JavaScriptToQueryVisitor.__super__.UpdateExpression.call(this, node);\n                };\n\n                JavaScriptToQueryVisitor.prototype.LogicalExpression = function (node) {\n                    var mapping, _ref;\n                    mapping = {\n                        '&&': Q.BinaryOperators.And,\n                        '||': Q.BinaryOperators.Or\n                    };\n                    return (_ref = this.translateBinary(node, mapping)) != null ? _ref : JavaScriptToQueryVisitor.__super__.LogicalExpression.call(this, node);\n                };\n\n                JavaScriptToQueryVisitor.prototype.BinaryExpression = function (node) {\n                    var k, left, mapping, properties, v, value, _ref;\n                    mapping = {\n                        '+': Q.BinaryOperators.Add,\n                        '-': Q.BinaryOperators.Subtract,\n                        '*': Q.BinaryOperators.Multiply,\n                        '/': Q.BinaryOperators.Divide,\n                        '%': Q.BinaryOperators.Modulo,\n                        '>': Q.BinaryOperators.GreaterThan,\n                        '>=': Q.BinaryOperators.GreaterThanOrEqual,\n                        '<': Q.BinaryOperators.LessThan,\n                        '<=': Q.BinaryOperators.LessThanOrEqual,\n                        '!=': Q.BinaryOperators.NotEqual,\n                        '!==': Q.BinaryOperators.NotEqual,\n                        '==': Q.BinaryOperators.Equal,\n                        '===': Q.BinaryOperators.Equal\n                    };\n                    return (function () {\n                        var _ref1, _ref2;\n                        if ((_ref = this.translateBinary(node, mapping)) != null) {\n                            return _ref;\n                        } else if (node.operator === 'in' && ((_ref1 = node.right) != null ? _ref1.type : void 0) === 'Literal' && _.isArray((_ref2 = node.right) != null ? _ref2.value : void 0)) {\n\n                            /*\n                             * Transform the 'varName in [x, y, z]' operator into a series of\n                             * comparisons like varName == x || varName == y || varName == z.\n                             */\n                            if (node.right.value.length > 0) {\n                                left = this.visit(node.left);\n                                return Q.QueryExpression.groupClauses(Q.BinaryOperators.Or, (function () {\n                                    var _i, _len, _ref3, _results;\n                                    _ref3 = node.right.value;\n                                    _results = [];\n                                    for (_i = 0, _len = _ref3.length; _i < _len; _i++) {\n                                        value = _ref3[_i];\n\n                                        /*\n                                         * If we've got an array of objects who each have\n                                         * a single property, we'll use the value of that\n                                         * property.  Otherwise we'll throw an exception.\n                                         */\n                                        if (_.isObject(value)) {\n                                            properties = (function () {\n                                                var _results1;\n                                                _results1 = [];\n                                                for (k in value) {\n                                                    v = value[k];\n                                                    _results1.push(v);\n                                                }\n                                                return _results1;\n                                            })();\n                                            if ((properties != null ? properties.length : void 0) !== 1) {\n                                                throw \"in operator requires comparison objects with a single field, not \" + value + \" (\" + (JSON.stringify(value)) + \"), for expression '\" + (this.getSource(node)) + \"'\";\n                                            }\n                                            value = properties[0];\n                                        }\n                                        _results.push(new Q.BinaryExpression(Q.BinaryOperators.Equal, left, new Q.ConstantExpression(value)));\n                                    }\n                                    return _results;\n                                }).call(this));\n                            } else {\n\n                                /*\n                                 * If the array of values is empty, change the query to\n                                 * true == false since it can't be satisfied.\n                                 */\n                                return new Q.BinaryExpression(Q.BinaryOperators.Equal, new Q.ConstantExpression(true), new Q.ConstantExpression(false));\n                            }\n                        } else {\n                            return JavaScriptToQueryVisitor.__super__.BinaryExpression.call(this, node);\n                        }\n                    }).call(this);\n                };\n\n                JavaScriptToQueryVisitor.prototype.CallExpression = function (node) {\n                    var expr, func, getSingleArg, getTwoArgs, member, method, _ref;\n                    getSingleArg = (function (_this) {\n                        return function (name) {\n                            var _ref;\n                            if (((_ref = node[\"arguments\"]) != null ? _ref.length : void 0) !== 1) {\n                                throw \"Function \" + name + \" expects one argument in expression '\" + (_this.getSource(node)) + \"'\";\n                            }\n                            return _this.visit(node[\"arguments\"][0]);\n                        };\n                    })(this);\n                    getTwoArgs = (function (_this) {\n                        return function (member, name) {\n                            var _ref;\n                            if (((_ref = node[\"arguments\"]) != null ? _ref.length : void 0) !== 2) {\n                                throw \"Function \" + name + \" expects two arguments in expression '\" + (_this.getSource(node)) + \"'\";\n                            }\n                            return [member, _this.visit(node[\"arguments\"][0]), _this.visit(node[\"arguments\"][1])];\n                        };\n                    })(this);\n\n                    /*\n                     * Translate known method calls that aren't attached to an instance.\n                     * Note that we can compare against the actual method because the\n                     * partial evaluator will have converted it into a literal for us.\n                     */\n                    func = node != null ? (_ref = node.callee) != null ? _ref.value : void 0 : void 0;\n                    expr = (function () {\n                        var _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;\n                        if (func === Math.floor) {\n                            return new Q.InvocationExpression(Q.Methods.Floor, [getSingleArg('floor')]);\n                        } else if (func === Math.ceil) {\n                            return new Q.InvocationExpression(Q.Methods.Ceiling, [getSingleArg('ceil')]);\n                        } else if (func === Math.round) {\n                            return new Q.InvocationExpression(Q.Methods.Round, [getSingleArg('round')]);\n                        } else {\n\n                            /*\n                             * Translate methods dangling off an instance\n                             */\n                            if (node.callee.type === 'MemberExpression' && ((_ref1 = node.callee.object) != null ? _ref1.__hasThisExp : void 0) === true) {\n                                if ((node != null ? (_ref2 = node.callee) != null ? (_ref3 = _ref2.object) != null ? _ref3.type : void 0 : void 0 : void 0) === 'CallExpression') {\n                                    member = this.visit(node.callee.object);\n                                } else {\n                                    member = new Q.MemberExpression((_ref4 = node.callee.object) != null ? (_ref5 = _ref4.property) != null ? _ref5.name : void 0 : void 0);\n                                }\n                                method = (_ref6 = node.callee) != null ? (_ref7 = _ref6.property) != null ? _ref7.name : void 0 : void 0;\n                                if (method === 'toUpperCase') {\n                                    return new Q.InvocationExpression(Q.Methods.ToUpperCase, [member]);\n                                } else if (method === 'toLowerCase') {\n                                    return new Q.InvocationExpression(Q.Methods.ToLowerCase, [member]);\n                                } else if (method === 'trim') {\n                                    return new Q.InvocationExpression(Q.Methods.Trim, [member]);\n                                } else if (method === 'indexOf') {\n                                    return new Q.InvocationExpression(Q.Methods.IndexOf, [member, getSingleArg('indexOf')]);\n                                } else if (method === 'concat') {\n                                    return new Q.InvocationExpression(Q.Methods.Concat, [member, getSingleArg('concat')]);\n                                } else if (method === 'substring' || method === 'substr') {\n                                    return new Q.InvocationExpression(Q.Methods.Substring, getTwoArgs(member, 'substring'));\n                                } else if (method === 'replace') {\n                                    return new Q.InvocationExpression(Q.Methods.Replace, getTwoArgs(member, 'replace'));\n                                } else if (method === 'getFullYear' || method === 'getUTCFullYear') {\n                                    return new Q.InvocationExpression(Q.Methods.Year, [member]);\n                                } else if (method === 'getYear') {\n                                    return new Q.BinaryExpression(Q.BinaryOperators.Subtract, new Q.InvocationExpression(Q.Methods.Year, [member]), new Q.ConstantExpression(1900));\n                                } else if (method === 'getMonth' || method === 'getUTCMonth') {\n\n                                    /* getMonth is 0 indexed in JavaScript */\n                                    return new Q.BinaryExpression(Q.BinaryOperators.Subtract, new Q.InvocationExpression(Q.Methods.Month, [member]), new Q.ConstantExpression(1));\n                                } else if (method === 'getDate' || method === 'getUTCDate') {\n                                    return new Q.InvocationExpression(Q.Methods.Day, [member]);\n                                }\n                            }\n                        }\n                    }).call(this);\n                    return expr != null ? expr : JavaScriptToQueryVisitor.__super__.CallExpression.call(this, node);\n                };\n\n                return JavaScriptToQueryVisitor;\n\n            })(JS.JavaScriptVisitor);\n\n        }).call(this);\n    };\n\n    $__modules__.Node = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var Node, Visitor, _;\n\n            _ = require('./Utilities');\n\n\n            /*\n             * The base Node class for all expressions used for analysis and translation by\n             * visitors.  It's designed to interop with other modules that create expression\n             * trees using object literals with a type tag.\n             */\n\n            exports.Node = Node = (function () {\n\n                /*\n                 * Type tag of the node that allows for eash dispatch in visitors.  This is\n                 * automatically set in the constructor (so it's important to call super() in\n                 * derived Node classes).\n                 */\n                Node.prototype.type = 'Node';\n\n\n                /*\n                 * Initializes a new instance of the Node class and sets its type tag.\n                 */\n\n                function Node() {\n                    this.type = _.functionName(this.constructor);\n                }\n\n                return Node;\n\n            })();\n\n\n            /*\n             * Base class for all visitors\n             */\n\n            exports.Visitor = Visitor = (function () {\n                function Visitor() { }\n\n\n                /*\n                 * Visit a node.\n                 */\n\n                Visitor.prototype.visit = function (node) {\n                    var element, _i, _len, _results;\n                    if (_.isArray(node)) {\n                        _results = [];\n                        for (_i = 0, _len = node.length; _i < _len; _i++) {\n                            element = node[_i];\n                            _results.push(this.visit(element));\n                        }\n                        return _results;\n                    } else if (!(node != null ? node.type : void 0)) {\n                        return node;\n                    } else if (!_.isFunction(this[node.type])) {\n                        throw \"Unsupported expression \" + (this.getSource(node));\n                    } else {\n                        return this[node.type](node);\n                    }\n                };\n\n\n                /*\n                 * Get the source code corresponding to a node.\n                 */\n\n                Visitor.prototype.getSource = function (node) {\n\n                    /* It is expected this will be overridden in derived visitors. */\n                    return null;\n                };\n\n                return Visitor;\n\n            })();\n\n        }).call(this);\n    };\n\n    $__modules__.ODataProvider = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var ODataFilterQueryVisitor, ODataProvider, Q, Query, _,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ = require('./Utilities');\n\n            Q = require('./QueryNodes');\n\n            Query = require('./Query').Query;\n\n            exports.ODataProvider = ODataProvider = (function () {\n                function ODataProvider() { }\n\n\n                /*\n                 * Convert a query into an OData URI.\n                 */\n\n                ODataProvider.prototype.toQuery = function (query) {\n                    var odata, s, url;\n                    odata = this.toOData(query, true);\n                    url = \"/\" + odata.table;\n                    s = '?';\n                    if (odata.filters) {\n                        url += \"\" + s + \"$filter=\" + odata.filters;\n                        s = '&';\n                    }\n                    if (odata.ordering) {\n                        url += \"\" + s + \"$orderby=\" + odata.ordering;\n                        s = '&';\n                    }\n                    if (odata.skip) {\n                        url += \"\" + s + \"$skip=\" + odata.skip;\n                        s = '&';\n                    }\n                    if (odata.take || odata.take === 0) {\n                        url += \"\" + s + \"$top=\" + odata.take;\n                        s = '&';\n                    }\n                    if (odata.selections) {\n                        url += \"\" + s + \"$select=\" + odata.selections;\n                        s = '&';\n                    }\n                    if (odata.includeTotalCount) {\n                        url += \"\" + s + \"$inlinecount=allpages\";\n                    }\n                    return url;\n                };\n\n\n                /*\n                 * Translate the query components into OData strings\n                 */\n\n                ODataProvider.prototype.toOData = function (query, encodeForUri) {\n                    var asc, components, name, odata, ordering, _ref, _ref1;\n                    if (encodeForUri == null) {\n                        encodeForUri = false;\n                    }\n                    components = (_ref = query != null ? query.getComponents() : void 0) != null ? _ref : {};\n                    ordering = (function () {\n                        var _ref1, _results;\n                        _ref1 = components != null ? components.ordering : void 0;\n                        _results = [];\n                        for (name in _ref1) {\n                            asc = _ref1[name];\n                            _results.push(asc ? name : \"\" + name + \" desc\");\n                        }\n                        return _results;\n                    })();\n                    return odata = {\n                        table: components != null ? components.table : void 0,\n                        filters: ODataFilterQueryVisitor.convert(components.filters, encodeForUri),\n                        ordering: ordering != null ? ordering.toString() : void 0,\n                        skip: components != null ? components.skip : void 0,\n                        take: components != null ? components.take : void 0,\n                        selections: components != null ? (_ref1 = components.selections) != null ? _ref1.toString() : void 0 : void 0,\n                        includeTotalCount: components != null ? components.includeTotalCount : void 0\n                    };\n                };\n\n\n                /*\n                 * Convert OData components into a query object\n                 */\n\n                ODataProvider.prototype.fromOData = function (table, filters, ordering, skip, take, selections, includeTotalCount) {\n                    var direction, field, item, query, _i, _j, _len, _len1, _ref, _ref1, _ref2, _ref3;\n                    query = new Query(table);\n                    if (filters) {\n                        query.where(filters);\n                    }\n                    if (skip || skip === 0) {\n                        query.skip(skip);\n                    }\n                    if (take || take === 0) {\n                        query.take(take);\n                    }\n                    if (includeTotalCount) {\n                        query.includeTotalCount();\n                    }\n                    _ref1 = (_ref = selections != null ? selections.split(',') : void 0) != null ? _ref : [];\n                    for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n                        field = _ref1[_i];\n                        query.select(field.trim());\n                    }\n                    _ref2 = (function () {\n                        var _k, _len1, _ref2, _ref3, _results;\n                        _ref3 = (_ref2 = ordering != null ? ordering.split(',') : void 0) != null ? _ref2 : [];\n                        _results = [];\n                        for (_k = 0, _len1 = _ref3.length; _k < _len1; _k++) {\n                            item = _ref3[_k];\n                            _results.push(item.trim().split(' '));\n                        }\n                        return _results;\n                    })();\n                    for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n                        _ref3 = _ref2[_j], field = _ref3[0], direction = _ref3[1];\n                        if ((direction != null ? direction.toUpperCase() : void 0) !== 'DESC') {\n                            query.orderBy(field);\n                        } else {\n                            query.orderByDescending(field);\n                        }\n                    }\n                    return query;\n                };\n\n                return ODataProvider;\n\n            })();\n\n\n            /*\n             * Visitor that converts query expression trees into OData filter statements.\n             */\n\n            ODataFilterQueryVisitor = (function (_super) {\n                __extends(ODataFilterQueryVisitor, _super);\n\n                function ODataFilterQueryVisitor(encodeForUri) {\n                    this.encodeForUri = encodeForUri;\n                }\n\n                ODataFilterQueryVisitor.convert = function (filters, encodeForUri) {\n                    var visitor, _ref;\n                    visitor = new ODataFilterQueryVisitor(encodeForUri);\n                    return (_ref = (filters ? visitor.visit(filters) : void 0)) != null ? _ref : null;\n                };\n\n                ODataFilterQueryVisitor.prototype.toOData = function (value) {\n                    var text;\n                    if ((_.isNumber(value)) || (_.isBoolean(value))) {\n                        return value.toString();\n                    } else if (_.isString(value)) {\n                        value = value.replace(/'/g, \"''\");\n                        if ((this.encodeForUri != null) && this.encodeForUri === true) {\n                            value = encodeURIComponent(value);\n                        }\n                        return \"'\" + value + \"'\";\n                    } else if (_.isDate(value)) {\n\n                        /*\n                         * Dates are expected in the format\n                         *   \"datetime'yyyy-mm-ddThh:mm[:ss[.fffffff]]'\"\n                         * which JSON.stringify gives us by default\n                         */\n                        text = JSON.stringify(value);\n                        if (text.length > 2) {\n                            text = text.slice(1, +(text.length - 2) + 1 || 9e9);\n                        }\n                        text = text.replace(/(T\\d{2}:\\d{2}:\\d{2})Z$/, function (all, time) {\n                            var msec;\n                            msec = String(value.getMilliseconds() + 1000).substring(1);\n                            return \"\" + time + \".\" + msec + \"Z\";\n                        });\n                        return \"datetime'\" + text + \"'\";\n                    } else if (!value) {\n                        return \"null\";\n                    } else {\n                        throw \"Unsupported literal value \" + value;\n                    }\n                };\n\n                ODataFilterQueryVisitor.prototype.ConstantExpression = function (node) {\n                    return this.toOData(node.value);\n                };\n\n                ODataFilterQueryVisitor.prototype.MemberExpression = function (node) {\n                    return node.member;\n                };\n\n                ODataFilterQueryVisitor.prototype.UnaryExpression = function (node) {\n                    if (node.operator === Q.UnaryOperators.Not) {\n                        return \"not \" + (this.visit(node.operand));\n                    } else if (node.operator === Q.UnaryOperators.Negate) {\n                        return \"(0 sub \" + (this.visit(node.operand)) + \")\";\n                    } else {\n                        throw \"Unsupported operator \" + node.operator;\n                    }\n                };\n\n                ODataFilterQueryVisitor.prototype.BinaryExpression = function (node) {\n                    var mapping, op;\n                    mapping = {\n                        And: 'and',\n                        Or: 'or',\n                        Add: 'add',\n                        Subtract: 'sub',\n                        Multiply: 'mul',\n                        Divide: 'div',\n                        Modulo: 'mod',\n                        GreaterThan: 'gt',\n                        GreaterThanOrEqual: 'ge',\n                        LessThan: 'lt',\n                        LessThanOrEqual: 'le',\n                        NotEqual: 'ne',\n                        Equal: 'eq'\n                    };\n                    op = mapping[node.operator];\n                    if (op) {\n                        return \"(\" + (this.visit(node.left)) + \" \" + op + \" \" + (this.visit(node.right)) + \")\";\n                    } else {\n                        throw \"Unsupported operator \" + node.operator;\n                    }\n                };\n\n                ODataFilterQueryVisitor.prototype.InvocationExpression = function (node) {\n                    var mapping, method;\n                    mapping = {\n                        Length: 'length',\n                        ToUpperCase: 'toupper',\n                        ToLowerCase: 'tolower',\n                        Trim: 'trim',\n                        IndexOf: 'indexof',\n                        Replace: 'replace',\n                        Substring: 'substring',\n                        Concat: 'concat',\n                        Day: 'day',\n                        Month: 'month',\n                        Year: 'year',\n                        Floor: 'floor',\n                        Ceiling: 'ceiling',\n                        Round: 'round'\n                    };\n                    method = mapping[node.method];\n                    if (method) {\n                        return \"\" + method + \"(\" + (this.visit(node.args)) + \")\";\n                    } else {\n                        throw \"Invocation of unsupported method \" + node.method;\n                    }\n                };\n\n                ODataFilterQueryVisitor.prototype.LiteralExpression = function (node) {\n                    var ch, inString, literal, _i, _len, _ref;\n                    literal = '';\n                    inString = false;\n                    _ref = node.queryString;\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        ch = _ref[_i];\n                        if (inString) {\n                            literal += ch;\n                            inString = ch !== \"'\";\n                        } else if (ch === '?') {\n                            if ((!node.args) || (node.args.length <= 0)) {\n                                throw \"Too few arguments for \" + node.queryString + \".\";\n                            }\n                            literal += this.toOData(node.args.shift());\n                        } else if (ch === \"'\") {\n                            literal += ch;\n                            inString = true;\n                        } else {\n                            literal += ch;\n                        }\n                    }\n                    if (node.args && node.args.length > 0) {\n                        throw \"Too many arguments for \" + node.queryString;\n                    }\n                    return literal;\n                };\n\n                return ODataFilterQueryVisitor;\n\n            })(Q.QueryExpressionVisitor);\n\n        }).call(this);\n    };\n\n    $__modules__.PartialEvaluator = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var IndependenceNominator, JS, PartialEvaluator, _,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ = require('./Utilities');\n\n            JS = require('./JavaScriptNodes');\n\n\n            /*\n             * Partially evaluate a complex expression in the context of its environment.\n             * This allows us to support arbitrary JavaScript expressions even though we\n             * only explicitly transform a subset of expressions into QueryExpressions.\n             *\n             * For example, assuming we have an expression like (x) -> @id == x + 1 with an\n             * environment where x == 12, then the entire right hand side of the comparison\n             * is independent of any values computed by the query and could be replaced with\n             * the literal value 13.\n             */\n\n            exports.PartialEvaluator = PartialEvaluator = (function (_super) {\n                __extends(PartialEvaluator, _super);\n\n                function PartialEvaluator(context) {\n                    this.context = context;\n                }\n\n                PartialEvaluator.prototype.visit = function (node) {\n                    var key, params, source, thunk, value, values, _ref, _ref1, _ref2, _ref3;\n                    if (!node.__independent || node.type === 'Literal' || (!node.type)) {\n\n                        /*\n                         * If the node isn't independent or it's already a literal, then\n                         * just keep walking the tree\n                         */\n                        return PartialEvaluator.__super__.visit.call(this, node);\n                    } else {\n\n                        /*\n                         * Otherwse we'll evaluate the node in the context of the\n                         * environment by either looking up identifiers directly or\n                         * evaluating whole sub expressions\n                         */\n                        if (node.type === 'Identifier' && this.context.environment[node.name]) {\n                            return new JS.Literal(this.context.environment[node.name]);\n                        } else {\n\n                            /*\n                             * Evaluate the source of the sub expression in the context\n                             * of the environment\n                             */\n                            source = this.context.source.slice(node != null ? (_ref = node.range) != null ? _ref[0] : void 0 : void 0, +((node != null ? (_ref1 = node.range) != null ? _ref1[1] : void 0 : void 0) - 1) + 1 || 9e9);\n                            params = (_ref2 = (function () {\n                                var _ref3, _results;\n                                _ref3 = this.context.environment;\n                                _results = [];\n                                for (key in _ref3) {\n                                    value = _ref3[key];\n                                    _results.push(key);\n                                }\n                                return _results;\n                            }).call(this)) != null ? _ref2 : [];\n                            values = (_ref3 = (function () {\n                                var _ref4, _results;\n                                _ref4 = this.context.environment;\n                                _results = [];\n                                for (key in _ref4) {\n                                    value = _ref4[key];\n                                    _results.push(JSON.stringify(value));\n                                }\n                                return _results;\n                            }).call(this)) != null ? _ref3 : [];\n                            thunk = \"(function(\" + params + \") { return \" + source + \"; })(\" + values + \")\";\n                            value = eval(thunk);\n                            return new JS.Literal(value);\n                        }\n                    }\n                };\n\n                PartialEvaluator.evaluate = function (context) {\n                    var evaluator, nominator;\n                    nominator = new IndependenceNominator(context);\n                    nominator.visit(context.expression);\n                    evaluator = new PartialEvaluator(context);\n                    return evaluator.visit(context.expression);\n                };\n\n                return PartialEvaluator;\n\n            })(JS.JavaScriptVisitor);\n\n\n            /*\n             * Nominate independent nodes in an expression tree that don't depend on any\n             * server side values.\n             */\n\n            exports.IndependenceNominator = IndependenceNominator = (function (_super) {\n                __extends(IndependenceNominator, _super);\n\n                function IndependenceNominator(context) {\n                    this.context = context;\n                }\n\n                IndependenceNominator.prototype.Literal = function (node) {\n                    IndependenceNominator.__super__.Literal.call(this, node);\n                    node.__independent = true;\n                    node.__hasThisExp = false;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.ThisExpression = function (node) {\n                    IndependenceNominator.__super__.ThisExpression.call(this, node);\n                    node.__independent = false;\n                    node.__hasThisExp = true;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.Identifier = function (node) {\n                    IndependenceNominator.__super__.Identifier.call(this, node);\n                    node.__independent = true;\n                    node.__hasThisExp = false;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.MemberExpression = function (node) {\n                    var _ref;\n                    IndependenceNominator.__super__.MemberExpression.call(this, node);\n\n                    /*\n                     * Undo independence of identifiers when they're members of this.* or\n                     * this.member.* (the latter allows for member functions)\n                     */\n                    node.__hasThisExp = (_ref = node.object) != null ? _ref.__hasThisExp : void 0;\n                    if (node.__hasThisExp) {\n                        node.__independent = false;\n                        if (node != null) {\n                            node.property.__independent = false;\n                        }\n                    }\n                    return node;\n                };\n\n                IndependenceNominator.prototype.CallExpression = function (node) {\n                    IndependenceNominator.__super__.CallExpression.call(this, node);\n                    node.__hasThisExp = node.callee.__hasThisExp;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.ObjectExpression = function (node) {\n                    var independence, setter, _i, _j, _len, _len1, _ref, _ref1;\n                    IndependenceNominator.__super__.ObjectExpression.call(this, node);\n\n                    /*\n                     * Prevent literal key identifiers from being evaluated out of\n                     * context\n                     */\n                    _ref = node.properties;\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        setter = _ref[_i];\n                        setter.key.__independent = false;\n                    }\n\n                    /*\n                     * An object literal is independent if all of its values are\n                     * independent\n                     */\n                    independence = true;\n                    _ref1 = node.properties;\n                    for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n                        setter = _ref1[_j];\n                        independence &= setter.value.__independent;\n                    }\n                    node.__independent = independence ? true : false;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.visit = function (node) {\n\n                    /*\n                     * Call the base visit method which will both visit all of our\n                     * subexpressions and also call the couple of overrides above which\n                     * handle the base independence cases\n                     */\n                    var independence, isIndependent, name, v, value, _i, _len;\n                    IndependenceNominator.__super__.visit.call(this, node);\n\n                    /*\n                     * If the node's independence wasn't determined automatically by the\n                     * base cases above, then it's independence is determined by checking\n                     * all of its values and aggregating their independence\n                     */\n                    if (!(Object.prototype.hasOwnProperty.call(node, '__independent'))) {\n                        independence = true;\n                        isIndependent = function (node) {\n                            var _ref;\n                            if (_.isObject(node)) {\n                                return (_ref = value.__independent) != null ? _ref : false;\n                            } else {\n                                return true;\n                            }\n                        };\n                        for (name in node) {\n                            value = node[name];\n                            if (_.isArray(value)) {\n                                for (_i = 0, _len = value.length; _i < _len; _i++) {\n                                    v = value[_i];\n                                    independence &= isIndependent(v);\n                                }\n                            } else if (_.isObject(value)) {\n                                independence &= isIndependent(value);\n                            }\n                        }\n\n                        /* &= will turn true/false into 1/0 so we'll turn it back */\n                        node.__independent = independence ? true : false;\n                    }\n                    return node;\n                };\n\n                return IndependenceNominator;\n\n            })(JS.JavaScriptVisitor);\n\n        }).call(this);\n    };\n\n    $__modules__.Query = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n\n        /* Pull in references */\n\n        (function () {\n            var JavaScript, ODataProvider, Q, Query, _,\n              __slice = [].slice;\n\n            _ = require('./Utilities');\n\n            Q = require('./QueryNodes');\n\n            JavaScript = require('./JavaScript').JavaScript;\n\n\n            /*\n             * Define a query that can be translated into a desired query language and\n             * executed remotely.\n             */\n\n            exports.Query = Query = (function () {\n                function Query(table, context) {\n                    var _context, _filters, _includeTotalCount, _ordering, _projection, _selections, _skip, _table, _take, _version;\n                    if (!table || !(_.isString(table))) {\n                        throw 'Expected the name of a table!';\n                    }\n\n                    /* Store the table name and any extra context */\n                    _table = table;\n                    _context = context;\n\n                    /* Private Query component members */\n                    _filters = null;\n                    _projection = null;\n                    _selections = [];\n                    _ordering = {};\n                    _skip = null;\n                    _take = null;\n                    _includeTotalCount = false;\n\n                    /*\n                     * Keep a version flag that's updated on each mutation so we can\n                     * track whether changes have been made.  This is to enable caching\n                     * of compiled queries without reevaluating unless necessary.\n                     */\n                    _version = 0;\n\n                    /* Get the individual components of the query */\n                    this.getComponents = function () {\n                        return {\n                            filters: _filters,\n                            selections: _selections,\n                            projection: _projection,\n                            ordering: _ordering,\n                            skip: _skip,\n                            take: _take,\n                            table: _table,\n                            context: _context,\n                            includeTotalCount: _includeTotalCount,\n                            version: _version\n                        };\n                    };\n\n                    /*\n                     * Set the individual components of the query (this is primarily\n                     * meant to be used for rehydrating a query).\n                     */\n                    this.setComponents = function (components) {\n                        var _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;\n                        _version++;\n                        _filters = (_ref = components != null ? components.filters : void 0) != null ? _ref : null;\n                        _selections = (_ref1 = components != null ? components.selections : void 0) != null ? _ref1 : [];\n                        _projection = (_ref2 = components != null ? components.projection : void 0) != null ? _ref2 : null;\n                        _ordering = (_ref3 = components != null ? components.ordering : void 0) != null ? _ref3 : {};\n                        _skip = (_ref4 = components != null ? components.skip : void 0) != null ? _ref4 : null;\n                        _take = (_ref5 = components != null ? components.take : void 0) != null ? _ref5 : null;\n                        _includeTotalCount = (_ref6 = components != null ? components.includeTotalCount : void 0) != null ? _ref6 : false;\n                        _table = (_ref7 = components != null ? components.table : void 0) != null ? _ref7 : null;\n                        _context = (_ref8 = components != null ? components.context : void 0) != null ? _ref8 : null;\n                        return this;\n                    };\n\n                    /*\n                     * Add a constraint to a query.  Constraints can take the form of\n                     * a function with a single return statement, key/value pairs of\n                     * equality comparisons, or provider-specific literal strings (note\n                     * that not all providers support literals).\n                     */\n                    this.where = function () {\n                        var args, constraint, expr, name, value;\n                        constraint = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                        _version++;\n\n                        /*\n                         * Translate the constraint from its high level form into a\n                         * QueryExpression tree that can be manipulated by a query\n                         * provider\n                         */\n                        expr = (function () {\n                            if (_.isFunction(constraint)) {\n                                return JavaScript.transformConstraint(constraint, args);\n                            } else if (_.isObject(constraint)) {\n\n                                /*\n                                 * Turn an object of key value pairs into a series of\n                                 * equality expressions that are and'ed together to form\n                                 * a single expression\n                                 */\n                                return Q.QueryExpression.groupClauses(Q.BinaryOperators.And, (function () {\n                                    var _results;\n                                    _results = [];\n                                    for (name in constraint) {\n                                        value = constraint[name];\n                                        _results.push(expr = new Q.BinaryExpression(Q.BinaryOperators.Equal, new Q.MemberExpression(name), new Q.ConstantExpression(value)));\n                                    }\n                                    return _results;\n                                })());\n                            } else if (_.isString(constraint)) {\n\n                                /*\n                                 * Store the literal query along with any arguments for\n                                 * providers that support basic string replacement (i.e.,\n                                 * something like where('name eq ?', 'Steve'))\n                                 */\n                                return new Q.LiteralExpression(constraint, args);\n                            } else {\n                                throw \"Expected a function, object, or string, not \" + constraint;\n                            }\n                        })();\n\n                        /* Merge the new filters with any existing filters */\n                        _filters = Q.QueryExpression.groupClauses(Q.BinaryOperators.And, [_filters, expr]);\n                        return this;\n                    };\n\n                    /*\n                     * Project the query results.  A projection can either be defined as\n                     * a set of fields that we'll pull back (instead of the entire row)\n                     * or a function that will transform a row into a new type.  If a\n                     * function is used, we'll analyze the function to pull back the\n                     * minimal number of fields required.\n                     */\n                    this.select = function () {\n                        var param, parameters, projectionOrParameter, _i, _len;\n                        projectionOrParameter = arguments[0], parameters = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                        _version++;\n                        if (_.isString(projectionOrParameter)) {\n\n                            /* Add all the literal string parameters */\n                            _selections.push(projectionOrParameter);\n                            for (_i = 0, _len = parameters.length; _i < _len; _i++) {\n                                param = parameters[_i];\n                                if (!(_.isString(param))) {\n                                    throw \"Expected string parameters, not \" + param;\n                                }\n                                _selections.push(param);\n                            }\n                        } else if (_.isFunction(projectionOrParameter)) {\n\n                            /* Set the projection and calculate the fields it uses */\n                            _projection = projectionOrParameter;\n                            _selections = JavaScript.getProjectedFields(_projection);\n                        } else {\n                            throw \"Expected a string or a function, not \" + projectionOrParameter;\n                        }\n                        return this;\n                    };\n                    this.orderBy = function () {\n                        var param, parameters, _i, _len;\n                        parameters = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n                        _version++;\n                        for (_i = 0, _len = parameters.length; _i < _len; _i++) {\n                            param = parameters[_i];\n                            if (!(_.isString(param))) {\n                                throw \"Expected string parameters, not \" + param;\n                            }\n                            _ordering[param] = true;\n                        }\n                        return this;\n                    };\n                    this.orderByDescending = function () {\n                        var param, parameters, _i, _len;\n                        parameters = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n                        _version++;\n                        for (_i = 0, _len = parameters.length; _i < _len; _i++) {\n                            param = parameters[_i];\n                            if (!(_.isString(param))) {\n                                throw \"Expected string parameters, not \" + param;\n                            }\n                            _ordering[param] = false;\n                        }\n                        return this;\n                    };\n                    this.skip = function (count) {\n                        _version++;\n                        if (!(_.isNumber(count))) {\n                            throw \"Expected a number, not \" + count;\n                        }\n                        _skip = count;\n                        return this;\n                    };\n                    this.take = function (count) {\n                        _version++;\n                        if (!(_.isNumber(count))) {\n                            throw \"Expected a number, not \" + count;\n                        }\n                        _take = count;\n                        return this;\n                    };\n\n                    /*\n                     * Indicate that the query should include the total count for all the\n                     * records that would have been returned ignoring any take paging\n                     * limit clause specified by client or server.\n                     */\n                    this.includeTotalCount = function () {\n                        _version++;\n                        _includeTotalCount = true;\n                        return this;\n                    };\n                }\n\n\n                /*\n                 * Static method to register custom provider types.  A custom provider is\n                 * an object with a toQuery method that takes a Query instance and\n                 * returns a compiled query for that provider.\n                 */\n\n                Query.registerProvider = function (name, provider) {\n                    Query.Providers[name] = provider;\n                    return Query.prototype[\"to\" + name] = function () {\n                        return provider != null ? typeof provider.toQuery === \"function\" ? provider.toQuery(this) : void 0 : void 0;\n                    };\n                };\n\n\n                /*\n                 * Expose the registered providers via the Query.Providers namespace.\n                 */\n\n                Query.Providers = {};\n\n\n                /*\n                 * Expose the query expressions and visitors externally via a\n                 * Query.Expressions namespace.\n                 */\n\n                Query.Expressions = Q;\n\n                return Query;\n\n            })();\n\n\n            /* Register the built in OData provider */\n\n            ODataProvider = require('./ODataProvider').ODataProvider;\n\n            Query.registerProvider('OData', new ODataProvider);\n\n        }).call(this);\n    };\n\n    $__modules__.QueryNodes = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n\n        /*\n         * Define a low level intermediate query expression language that we can\n         * translate other expressions languages (like JavaScript) into.\n         */\n\n\n        /* Get the base Node class. */\n\n        (function () {\n            var BinaryExpression, ConstantExpression, InvocationExpression, LiteralExpression, MemberExpression, Node, QueryExpression, QueryExpressionVisitor, UnaryExpression, Visitor, _ref,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ref = require('./Node'), Node = _ref.Node, Visitor = _ref.Visitor;\n\n\n            /*\n             * Provides the base class from which the classes that represent expression tree\n             * nodes are derived.\n             */\n\n            exports.QueryExpression = QueryExpression = (function (_super) {\n                __extends(QueryExpression, _super);\n\n                function QueryExpression() {\n                    QueryExpression.__super__.constructor.call(this);\n                }\n\n\n                /*\n                 * Group a sequence of clauses together with a given operator (like And\n                 * or Or).\n                 */\n\n                QueryExpression.groupClauses = function (operator, clauses) {\n                    var combine;\n                    combine = function (left, right) {\n                        if (!left) {\n                            return right;\n                        } else if (!right) {\n                            return left;\n                        } else {\n                            return new BinaryExpression(operator, left, right);\n                        }\n                    };\n                    return clauses.reduce(combine, null);\n                };\n\n                return QueryExpression;\n\n            })(Node);\n\n            exports.QueryExpressionVisitor = QueryExpressionVisitor = (function (_super) {\n                __extends(QueryExpressionVisitor, _super);\n\n                function QueryExpressionVisitor() {\n                    QueryExpressionVisitor.__super__.constructor.call(this);\n                }\n\n                QueryExpressionVisitor.prototype.QueryExpression = function (node) {\n                    return node;\n                };\n\n                return QueryExpressionVisitor;\n\n            })(Visitor);\n\n\n            /*\n             * Represents an expression that has a constant value.\n             */\n\n            exports.ConstantExpression = ConstantExpression = (function (_super) {\n                __extends(ConstantExpression, _super);\n\n\n                /*\n                 * @value: The value of the constant expression.\n                 */\n\n                function ConstantExpression(value) {\n                    this.value = value;\n                    ConstantExpression.__super__.constructor.call(this);\n                }\n\n                return ConstantExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.ConstantExpression = function (node) {\n                return this.QueryExpression(node);\n            };\n\n\n            /*\n             * Represents accessing a field.\n             */\n\n            exports.MemberExpression = MemberExpression = (function (_super) {\n                __extends(MemberExpression, _super);\n\n\n                /*\n                 * @member: Gets the field to be accessed.\n                 */\n\n                function MemberExpression(member) {\n                    this.member = member;\n                    MemberExpression.__super__.constructor.call(this);\n                }\n\n                return MemberExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.MemberExpression = function (node) {\n                return this.QueryExpression(node);\n            };\n\n\n            /*\n             * Represents an expression that has a binary operator.\n             */\n\n            exports.BinaryExpression = BinaryExpression = (function (_super) {\n                __extends(BinaryExpression, _super);\n\n\n                /*\n                 * @operator: The operator of the binary expression.\n                 * @left: The left operand of the binary operation.\n                 * @right: The right operand of the binary operation.\n                 */\n\n                function BinaryExpression(operator, left, right) {\n                    this.operator = operator;\n                    this.left = left;\n                    this.right = right;\n                    BinaryExpression.__super__.constructor.call(this);\n                }\n\n                return BinaryExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.BinaryExpression = function (node) {\n                node = this.QueryExpression(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                return node;\n            };\n\n\n            /*\n             * Represents the known binary operators.\n             */\n\n            exports.BinaryOperators = {\n                And: 'And',\n                Or: 'Or',\n                Add: 'Add',\n                Subtract: 'Subtract',\n                Multiply: 'Multiply',\n                Divide: 'Divide',\n                Modulo: 'Modulo',\n                GreaterThan: 'GreaterThan',\n                GreaterThanOrEqual: 'GreaterThanOrEqual',\n                LessThan: 'LessThan',\n                LessThanOrEqual: 'LessThanOrEqual',\n                NotEqual: 'NotEqual',\n                Equal: 'Equal'\n            };\n\n\n            /*\n             * Represents the known unary operators.\n             */\n\n            exports.UnaryExpression = UnaryExpression = (function (_super) {\n                __extends(UnaryExpression, _super);\n\n\n                /*\n                 * @operator: The operator of the unary expression.\n                 * @operand: The operand of the unary expression.\n                 */\n\n                function UnaryExpression(operator, operand) {\n                    this.operator = operator;\n                    this.operand = operand;\n                    UnaryExpression.__super__.constructor.call(this);\n                }\n\n                return UnaryExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.UnaryExpression = function (node) {\n                node = this.QueryExpression(node);\n                node.operand = this.visit(node.operand);\n                return node;\n            };\n\n\n            /*\n             * Represents the known unary operators.\n             */\n\n            exports.UnaryOperators = {\n                Not: 'Not',\n                Negate: 'Negate',\n                Increment: 'Increment',\n                Decrement: 'Decrement'\n            };\n\n\n            /*\n             * Represents a method invocation.\n             */\n\n            exports.InvocationExpression = InvocationExpression = (function (_super) {\n                __extends(InvocationExpression, _super);\n\n\n                /*\n                 * @method: The name of the method to invoke.\n                 * @args: The arguments to the method.\n                 */\n\n                function InvocationExpression(method, args) {\n                    this.method = method;\n                    this.args = args;\n                    InvocationExpression.__super__.constructor.call(this);\n                }\n\n                return InvocationExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.InvocationExpression = function (node) {\n                node = this.QueryExpression(node);\n                node.args = this.visit(node.args);\n                return node;\n            };\n\n\n            /*\n             * Represents the known unary operators.\n             */\n\n            exports.Methods = {\n                Length: 'Length',\n                ToUpperCase: 'ToUpperCase',\n                ToLowerCase: 'ToLowerCase',\n                Trim: 'Trim',\n                IndexOf: 'IndexOf',\n                Replace: 'Replace',\n                Substring: 'Substring',\n                Concat: 'Concat',\n                Day: 'Day',\n                Month: 'Month',\n                Year: 'Year',\n                Floor: 'Floor',\n                Ceiling: 'Ceiling',\n                Round: 'Round'\n            };\n\n\n            /*\n             * Represents a literal string in the query language.\n             */\n\n            exports.LiteralExpression = LiteralExpression = (function (_super) {\n                __extends(LiteralExpression, _super);\n\n\n                /*\n                 * @queryString\n                 * @args\n                 */\n\n                function LiteralExpression(queryString, args) {\n                    this.queryString = queryString;\n                    this.args = args != null ? args : [];\n                    LiteralExpression.__super__.constructor.call(this);\n                }\n\n                return LiteralExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.LiteralExpression = function (node) {\n                return this.QueryExpression(node);\n            };\n\n        }).call(this);\n    };\n\n    $__modules__.Utilities = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var classOf,\n              __slice = [].slice;\n\n            classOf = function (obj) {\n                return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();\n            };\n\n            if (Array.prototype.reduce == null) {\n                Array.prototype.reduce = function () {\n                    var accumulator, array, arrayLength, currentIndex, currentValue, moreArgs;\n                    accumulator = arguments[0], moreArgs = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                    array = this;\n                    arrayLength = array.length;\n                    currentIndex = 0;\n                    currentValue = void 0;\n                    if (array == null) {\n                        throw new TypeError(\"Object is null or undefined\");\n                    }\n                    if (typeof accumulator !== \"function\") {\n                        throw new TypeError(\"First argument is not callable\");\n                    }\n                    if (moreArgs.length === 0) {\n                        if (arrayLength === 0) {\n                            throw new TypeError(\"Array length is 0 and no second argument\");\n                        } else {\n                            currentValue = array[0];\n                            currentIndex = 1;\n                        }\n                    } else {\n                        currentValue = moreArgs[0];\n                    }\n                    while (currentIndex < arrayLength) {\n                        if (currentIndex in array) {\n                            currentValue = accumulator.call(void 0, currentValue, array[currentIndex], array);\n                        }\n                        ++currentIndex;\n                    }\n                    return currentValue;\n                };\n            }\n\n            if (Array.prototype.map == null) {\n                Array.prototype.map = function (callback, thisArg) {\n                    var elem, index, inputArray, len, outputArray, _i, _len;\n                    if (typeof this === \"undefined\" || this === null) {\n                        throw new TypeError(\"this is null or not defined\");\n                    }\n                    if (typeof callback !== \"function\") {\n                        throw new TypeError(callback + \" is not a function\");\n                    }\n                    thisArg = thisArg ? thisArg : void 0;\n                    inputArray = Object(this);\n                    len = inputArray.length >>> 0;\n                    outputArray = new Array(len);\n                    for (index = _i = 0, _len = inputArray.length; _i < _len; index = ++_i) {\n                        elem = inputArray[index];\n                        if (index in inputArray) {\n                            outputArray[index] = callback.call(thisArg, elem, index, inputArray);\n                        }\n                    }\n                    return outputArray;\n                };\n            }\n\n            if (Array.isArray == null) {\n                Array.isArray = function (vArg) {\n                    return Object.prototype.toString.call(vArg) === \"[object Array]\";\n                };\n            }\n\n            exports.isObject = function (obj) {\n                return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase() === 'object';\n            };\n\n            exports.isString = function (obj) {\n                return typeof obj === 'string';\n            };\n\n            exports.isFunction = function (obj) {\n                return typeof obj === 'function';\n            };\n\n            exports.isArray = Array.isArray;\n\n            exports.isNumber = function (obj) {\n                return typeof obj === 'number';\n            };\n\n            exports.isBoolean = function (obj) {\n                return typeof obj === 'boolean';\n            };\n\n            exports.isDate = function (obj) {\n                return classOf(obj) === 'date';\n            };\n\n            exports.functionName = function (fn) {\n                var index, prefix, source;\n                if (typeof Function.prototype.name === 'function') {\n                    return Function.prototype.name.call(fn);\n                } else {\n                    source = fn.toString();\n                    prefix = 'function ';\n                    if (source.slice(0, +(prefix.length - 1) + 1 || 9e9) === prefix) {\n                        index = source.indexOf('(', prefix.length);\n                        if (index > prefix.length) {\n                            return source.slice(prefix.length, +(index - 1) + 1 || 9e9);\n                        }\n                    }\n                    return null;\n                }\n            };\n\n        }).call(this);\n    };\n\n    $__modules__.esprima = function (exports) {\n        /*\n          Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n          Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n          Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n          Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n          Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n          Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>\n          Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n          Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n          Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n        \n          Redistribution and use in source and binary forms, with or without\n          modification, are permitted provided that the following conditions are met:\n        \n            * Redistributions of source code must retain the above copyright\n              notice, this list of conditions and the following disclaimer.\n            * Redistributions in binary form must reproduce the above copyright\n              notice, this list of conditions and the following disclaimer in the\n              documentation and/or other materials provided with the distribution.\n        \n          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n          AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n          IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n          ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n          DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n          (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n          LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n          ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n          (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n          THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n        */\n\n        /*jslint bitwise:true plusplus:true */\n        /*global esprima:true, define:true, exports:true, window: true,\n        createLocationMarker: true,\n        throwError: true, generateStatement: true, peek: true,\n        parseAssignmentExpression: true, parseBlock: true, parseExpression: true,\n        parseFunctionDeclaration: true, parseFunctionExpression: true,\n        parseFunctionSourceElements: true, parseVariableIdentifier: true,\n        parseLeftHandSideExpression: true,\n        parseUnaryExpression: true,\n        parseStatement: true, parseSourceElement: true */\n\n        (function (root, factory) {\n            'use strict';\n\n            // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,\n            // Rhino, and plain browser loading.\n            if (typeof define === 'function' && define.amd) {\n                define(['exports'], factory);\n            } else if (typeof exports !== 'undefined') {\n                factory(exports);\n            } else {\n                factory((root.esprima = {}));\n            }\n        }(this, function (exports) {\n            'use strict';\n\n            var Token,\n                TokenName,\n                FnExprTokens,\n                Syntax,\n                PropertyKind,\n                Messages,\n                Regex,\n                SyntaxTreeDelegate,\n                source,\n                strict,\n                index,\n                lineNumber,\n                lineStart,\n                length,\n                delegate,\n                lookahead,\n                state,\n                extra;\n\n            Token = {\n                BooleanLiteral: 1,\n                EOF: 2,\n                Identifier: 3,\n                Keyword: 4,\n                NullLiteral: 5,\n                NumericLiteral: 6,\n                Punctuator: 7,\n                StringLiteral: 8,\n                RegularExpression: 9\n            };\n\n            TokenName = {};\n            TokenName[Token.BooleanLiteral] = 'Boolean';\n            TokenName[Token.EOF] = '<end>';\n            TokenName[Token.Identifier] = 'Identifier';\n            TokenName[Token.Keyword] = 'Keyword';\n            TokenName[Token.NullLiteral] = 'Null';\n            TokenName[Token.NumericLiteral] = 'Numeric';\n            TokenName[Token.Punctuator] = 'Punctuator';\n            TokenName[Token.StringLiteral] = 'String';\n            TokenName[Token.RegularExpression] = 'RegularExpression';\n\n            // A function following one of those tokens is an expression.\n            FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n                            'return', 'case', 'delete', 'throw', 'void',\n                            // assignment operators\n                            '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',\n                            '&=', '|=', '^=', ',',\n                            // binary/unary operators\n                            '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n                            '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n                            '<=', '<', '>', '!=', '!=='];\n\n            Syntax = {\n                AssignmentExpression: 'AssignmentExpression',\n                ArrayExpression: 'ArrayExpression',\n                BlockStatement: 'BlockStatement',\n                BinaryExpression: 'BinaryExpression',\n                BreakStatement: 'BreakStatement',\n                CallExpression: 'CallExpression',\n                CatchClause: 'CatchClause',\n                ConditionalExpression: 'ConditionalExpression',\n                ContinueStatement: 'ContinueStatement',\n                DoWhileStatement: 'DoWhileStatement',\n                DebuggerStatement: 'DebuggerStatement',\n                EmptyStatement: 'EmptyStatement',\n                ExpressionStatement: 'ExpressionStatement',\n                ForStatement: 'ForStatement',\n                ForInStatement: 'ForInStatement',\n                FunctionDeclaration: 'FunctionDeclaration',\n                FunctionExpression: 'FunctionExpression',\n                Identifier: 'Identifier',\n                IfStatement: 'IfStatement',\n                Literal: 'Literal',\n                LabeledStatement: 'LabeledStatement',\n                LogicalExpression: 'LogicalExpression',\n                MemberExpression: 'MemberExpression',\n                NewExpression: 'NewExpression',\n                ObjectExpression: 'ObjectExpression',\n                Program: 'Program',\n                Property: 'Property',\n                ReturnStatement: 'ReturnStatement',\n                SequenceExpression: 'SequenceExpression',\n                SwitchStatement: 'SwitchStatement',\n                SwitchCase: 'SwitchCase',\n                ThisExpression: 'ThisExpression',\n                ThrowStatement: 'ThrowStatement',\n                TryStatement: 'TryStatement',\n                UnaryExpression: 'UnaryExpression',\n                UpdateExpression: 'UpdateExpression',\n                VariableDeclaration: 'VariableDeclaration',\n                VariableDeclarator: 'VariableDeclarator',\n                WhileStatement: 'WhileStatement',\n                WithStatement: 'WithStatement'\n            };\n\n            PropertyKind = {\n                Data: 1,\n                Get: 2,\n                Set: 4\n            };\n\n            // Error messages should be identical to V8.\n            Messages = {\n                UnexpectedToken: 'Unexpected token %0',\n                UnexpectedNumber: 'Unexpected number',\n                UnexpectedString: 'Unexpected string',\n                UnexpectedIdentifier: 'Unexpected identifier',\n                UnexpectedReserved: 'Unexpected reserved word',\n                UnexpectedEOS: 'Unexpected end of input',\n                NewlineAfterThrow: 'Illegal newline after throw',\n                InvalidRegExp: 'Invalid regular expression',\n                UnterminatedRegExp: 'Invalid regular expression: missing /',\n                InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n                InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n                MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n                NoCatchOrFinally: 'Missing catch or finally after try',\n                UnknownLabel: 'Undefined label \\'%0\\'',\n                Redeclaration: '%0 \\'%1\\' has already been declared',\n                IllegalContinue: 'Illegal continue statement',\n                IllegalBreak: 'Illegal break statement',\n                IllegalReturn: 'Illegal return statement',\n                StrictModeWith: 'Strict mode code may not include a with statement',\n                StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n                StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n                StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n                StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n                StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n                StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n                StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n                StrictDuplicateProperty: 'Duplicate data property in object literal not allowed in strict mode',\n                AccessorDataProperty: 'Object literal may not have data and accessor property with the same name',\n                AccessorGetSet: 'Object literal may not have multiple get/set accessors with the same name',\n                StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n                StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n                StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n                StrictReservedWord: 'Use of future reserved word in strict mode'\n            };\n\n            // See also tools/generate-unicode-regex.py.\n            Regex = {\n                NonAsciiIdentifierStart: new RegExp('[\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]'),\n                NonAsciiIdentifierPart: new RegExp('[\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u0800-\\u082d\\u0840-\\u085b\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\u0900-\\u0963\\u0966-\\u096f\\u0971-\\u0977\\u0979-\\u097f\\u0981-\\u0983\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5c\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c58\\u0c59\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1\\u0cf2\\u0d02\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d57\\u0d60-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb9\\u0ebb-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772\\u1773\\u1780-\\u17d3\\u17d7\\u17dc\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1cd0-\\u1cd2\\u1cd4-\\u1cf6\\u1d00-\\u1de6\\u1dfc-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u200c\\u200d\\u203f\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u2e2f\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099\\u309a\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua697\\ua69f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua827\\ua840-\\ua873\\ua880-\\ua8c4\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua900-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a\\uaa7b\\uaa80-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]')\n            };\n\n            // Ensure the condition is true, otherwise throw an error.\n            // This is only to have a better contract semantic, i.e. another safety net\n            // to catch a logic error. The condition shall be fulfilled in normal case.\n            // Do NOT use this to enforce a certain condition on any user input.\n\n            function assert(condition, message) {\n                if (!condition) {\n                    throw new Error('ASSERT: ' + message);\n                }\n            }\n\n            function isDecimalDigit(ch) {\n                return (ch >= 48 && ch <= 57);   // 0..9\n            }\n\n            function isHexDigit(ch) {\n                return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n            }\n\n            function isOctalDigit(ch) {\n                return '01234567'.indexOf(ch) >= 0;\n            }\n\n\n            // 7.2 White Space\n\n            function isWhiteSpace(ch) {\n                return (ch === 32) ||  // space\n                    (ch === 9) ||      // tab\n                    (ch === 0xB) ||\n                    (ch === 0xC) ||\n                    (ch === 0xA0) ||\n                    (ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromCharCode(ch)) > 0);\n            }\n\n            // 7.3 Line Terminators\n\n            function isLineTerminator(ch) {\n                return (ch === 10) || (ch === 13) || (ch === 0x2028) || (ch === 0x2029);\n            }\n\n            // 7.6 Identifier Names and Identifiers\n\n            function isIdentifierStart(ch) {\n                return (ch === 36) || (ch === 95) ||  // $ (dollar) and _ (underscore)\n                    (ch >= 65 && ch <= 90) ||         // A..Z\n                    (ch >= 97 && ch <= 122) ||        // a..z\n                    (ch === 92) ||                    // \\ (backslash)\n                    ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch)));\n            }\n\n            function isIdentifierPart(ch) {\n                return (ch === 36) || (ch === 95) ||  // $ (dollar) and _ (underscore)\n                    (ch >= 65 && ch <= 90) ||         // A..Z\n                    (ch >= 97 && ch <= 122) ||        // a..z\n                    (ch >= 48 && ch <= 57) ||         // 0..9\n                    (ch === 92) ||                    // \\ (backslash)\n                    ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n            }\n\n            // 7.6.1.2 Future Reserved Words\n\n            function isFutureReservedWord(id) {\n                switch (id) {\n                    case 'class':\n                    case 'enum':\n                    case 'export':\n                    case 'extends':\n                    case 'import':\n                    case 'super':\n                        return true;\n                    default:\n                        return false;\n                }\n            }\n\n            function isStrictModeReservedWord(id) {\n                switch (id) {\n                    case 'implements':\n                    case 'interface':\n                    case 'package':\n                    case 'private':\n                    case 'protected':\n                    case 'public':\n                    case 'static':\n                    case 'yield':\n                    case 'let':\n                        return true;\n                    default:\n                        return false;\n                }\n            }\n\n            function isRestrictedWord(id) {\n                return id === 'eval' || id === 'arguments';\n            }\n\n            // 7.6.1.1 Keywords\n\n            function isKeyword(id) {\n                if (strict && isStrictModeReservedWord(id)) {\n                    return true;\n                }\n\n                // 'const' is specialized as Keyword in V8.\n                // 'yield' and 'let' are for compatiblity with SpiderMonkey and ES.next.\n                // Some others are from future reserved words.\n\n                switch (id.length) {\n                    case 2:\n                        return (id === 'if') || (id === 'in') || (id === 'do');\n                    case 3:\n                        return (id === 'var') || (id === 'for') || (id === 'new') ||\n                            (id === 'try') || (id === 'let');\n                    case 4:\n                        return (id === 'this') || (id === 'else') || (id === 'case') ||\n                            (id === 'void') || (id === 'with') || (id === 'enum');\n                    case 5:\n                        return (id === 'while') || (id === 'break') || (id === 'catch') ||\n                            (id === 'throw') || (id === 'const') || (id === 'yield') ||\n                            (id === 'class') || (id === 'super');\n                    case 6:\n                        return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n                            (id === 'switch') || (id === 'export') || (id === 'import');\n                    case 7:\n                        return (id === 'default') || (id === 'finally') || (id === 'extends');\n                    case 8:\n                        return (id === 'function') || (id === 'continue') || (id === 'debugger');\n                    case 10:\n                        return (id === 'instanceof');\n                    default:\n                        return false;\n                }\n            }\n\n            // 7.4 Comments\n\n            function addComment(type, value, start, end, loc) {\n                var comment;\n\n                assert(typeof start === 'number', 'Comment must have valid position');\n\n                // Because the way the actual token is scanned, often the comments\n                // (if any) are skipped twice during the lexical analysis.\n                // Thus, we need to skip adding a comment if the comment array already\n                // handled it.\n                if (state.lastCommentStart >= start) {\n                    return;\n                }\n                state.lastCommentStart = start;\n\n                comment = {\n                    type: type,\n                    value: value\n                };\n                if (extra.range) {\n                    comment.range = [start, end];\n                }\n                if (extra.loc) {\n                    comment.loc = loc;\n                }\n                extra.comments.push(comment);\n            }\n\n            function skipSingleLineComment() {\n                var start, loc, ch, comment;\n\n                start = index - 2;\n                loc = {\n                    start: {\n                        line: lineNumber,\n                        column: index - lineStart - 2\n                    }\n                };\n\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    ++index;\n                    if (isLineTerminator(ch)) {\n                        if (extra.comments) {\n                            comment = source.slice(start + 2, index - 1);\n                            loc.end = {\n                                line: lineNumber,\n                                column: index - lineStart - 1\n                            };\n                            addComment('Line', comment, start, index - 1, loc);\n                        }\n                        if (ch === 13 && source.charCodeAt(index) === 10) {\n                            ++index;\n                        }\n                        ++lineNumber;\n                        lineStart = index;\n                        return;\n                    }\n                }\n\n                if (extra.comments) {\n                    comment = source.slice(start + 2, index);\n                    loc.end = {\n                        line: lineNumber,\n                        column: index - lineStart\n                    };\n                    addComment('Line', comment, start, index, loc);\n                }\n            }\n\n            function skipMultiLineComment() {\n                var start, loc, ch, comment;\n\n                if (extra.comments) {\n                    start = index - 2;\n                    loc = {\n                        start: {\n                            line: lineNumber,\n                            column: index - lineStart - 2\n                        }\n                    };\n                }\n\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    if (isLineTerminator(ch)) {\n                        if (ch === 13 && source.charCodeAt(index + 1) === 10) {\n                            ++index;\n                        }\n                        ++lineNumber;\n                        ++index;\n                        lineStart = index;\n                        if (index >= length) {\n                            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                        }\n                    } else if (ch === 42) {\n                        // Block comment ends with '*/' (char #42, char #47).\n                        if (source.charCodeAt(index + 1) === 47) {\n                            ++index;\n                            ++index;\n                            if (extra.comments) {\n                                comment = source.slice(start + 2, index - 2);\n                                loc.end = {\n                                    line: lineNumber,\n                                    column: index - lineStart\n                                };\n                                addComment('Block', comment, start, index, loc);\n                            }\n                            return;\n                        }\n                        ++index;\n                    } else {\n                        ++index;\n                    }\n                }\n\n                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n            }\n\n            function skipComment() {\n                var ch;\n\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n\n                    if (isWhiteSpace(ch)) {\n                        ++index;\n                    } else if (isLineTerminator(ch)) {\n                        ++index;\n                        if (ch === 13 && source.charCodeAt(index) === 10) {\n                            ++index;\n                        }\n                        ++lineNumber;\n                        lineStart = index;\n                    } else if (ch === 47) { // 47 is '/'\n                        ch = source.charCodeAt(index + 1);\n                        if (ch === 47) {\n                            ++index;\n                            ++index;\n                            skipSingleLineComment();\n                        } else if (ch === 42) {  // 42 is '*'\n                            ++index;\n                            ++index;\n                            skipMultiLineComment();\n                        } else {\n                            break;\n                        }\n                    } else {\n                        break;\n                    }\n                }\n            }\n\n            function scanHexEscape(prefix) {\n                var i, len, ch, code = 0;\n\n                len = (prefix === 'u') ? 4 : 2;\n                for (i = 0; i < len; ++i) {\n                    if (index < length && isHexDigit(source[index])) {\n                        ch = source[index++];\n                        code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n                    } else {\n                        return '';\n                    }\n                }\n                return String.fromCharCode(code);\n            }\n\n            function getEscapedIdentifier() {\n                var ch, id;\n\n                ch = source.charCodeAt(index++);\n                id = String.fromCharCode(ch);\n\n                // '\\u' (char #92, char #117) denotes an escaped character.\n                if (ch === 92) {\n                    if (source.charCodeAt(index) !== 117) {\n                        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                    }\n                    ++index;\n                    ch = scanHexEscape('u');\n                    if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n                        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                    }\n                    id = ch;\n                }\n\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    if (!isIdentifierPart(ch)) {\n                        break;\n                    }\n                    ++index;\n                    id += String.fromCharCode(ch);\n\n                    // '\\u' (char #92, char #117) denotes an escaped character.\n                    if (ch === 92) {\n                        id = id.substr(0, id.length - 1);\n                        if (source.charCodeAt(index) !== 117) {\n                            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                        }\n                        ++index;\n                        ch = scanHexEscape('u');\n                        if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n                            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                        }\n                        id += ch;\n                    }\n                }\n\n                return id;\n            }\n\n            function getIdentifier() {\n                var start, ch;\n\n                start = index++;\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    if (ch === 92) {\n                        // Blackslash (char #92) marks Unicode escape sequence.\n                        index = start;\n                        return getEscapedIdentifier();\n                    }\n                    if (isIdentifierPart(ch)) {\n                        ++index;\n                    } else {\n                        break;\n                    }\n                }\n\n                return source.slice(start, index);\n            }\n\n            function scanIdentifier() {\n                var start, id, type;\n\n                start = index;\n\n                // Backslash (char #92) starts an escaped character.\n                id = (source.charCodeAt(index) === 92) ? getEscapedIdentifier() : getIdentifier();\n\n                // There is no keyword or literal with only one character.\n                // Thus, it must be an identifier.\n                if (id.length === 1) {\n                    type = Token.Identifier;\n                } else if (isKeyword(id)) {\n                    type = Token.Keyword;\n                } else if (id === 'null') {\n                    type = Token.NullLiteral;\n                } else if (id === 'true' || id === 'false') {\n                    type = Token.BooleanLiteral;\n                } else {\n                    type = Token.Identifier;\n                }\n\n                return {\n                    type: type,\n                    value: id,\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n\n            // 7.7 Punctuators\n\n            function scanPunctuator() {\n                var start = index,\n                    code = source.charCodeAt(index),\n                    code2,\n                    ch1 = source[index],\n                    ch2,\n                    ch3,\n                    ch4;\n\n                switch (code) {\n\n                    // Check for most common single-character punctuators.\n                    case 46:   // . dot\n                    case 40:   // ( open bracket\n                    case 41:   // ) close bracket\n                    case 59:   // ; semicolon\n                    case 44:   // , comma\n                    case 123:  // { open curly brace\n                    case 125:  // } close curly brace\n                    case 91:   // [\n                    case 93:   // ]\n                    case 58:   // :\n                    case 63:   // ?\n                    case 126:  // ~\n                        ++index;\n                        if (extra.tokenize) {\n                            if (code === 40) {\n                                extra.openParenToken = extra.tokens.length;\n                            } else if (code === 123) {\n                                extra.openCurlyToken = extra.tokens.length;\n                            }\n                        }\n                        return {\n                            type: Token.Punctuator,\n                            value: String.fromCharCode(code),\n                            lineNumber: lineNumber,\n                            lineStart: lineStart,\n                            range: [start, index]\n                        };\n\n                    default:\n                        code2 = source.charCodeAt(index + 1);\n\n                        // '=' (char #61) marks an assignment or comparison operator.\n                        if (code2 === 61) {\n                            switch (code) {\n                                case 37:  // %\n                                case 38:  // &\n                                case 42:  // *:\n                                case 43:  // +\n                                case 45:  // -\n                                case 47:  // /\n                                case 60:  // <\n                                case 62:  // >\n                                case 94:  // ^\n                                case 124: // |\n                                    index += 2;\n                                    return {\n                                        type: Token.Punctuator,\n                                        value: String.fromCharCode(code) + String.fromCharCode(code2),\n                                        lineNumber: lineNumber,\n                                        lineStart: lineStart,\n                                        range: [start, index]\n                                    };\n\n                                case 33: // !\n                                case 61: // =\n                                    index += 2;\n\n                                    // !== and ===\n                                    if (source.charCodeAt(index) === 61) {\n                                        ++index;\n                                    }\n                                    return {\n                                        type: Token.Punctuator,\n                                        value: source.slice(start, index),\n                                        lineNumber: lineNumber,\n                                        lineStart: lineStart,\n                                        range: [start, index]\n                                    };\n                                default:\n                                    break;\n                            }\n                        }\n                        break;\n                }\n\n                // Peek more characters.\n\n                ch2 = source[index + 1];\n                ch3 = source[index + 2];\n                ch4 = source[index + 3];\n\n                // 4-character punctuator: >>>=\n\n                if (ch1 === '>' && ch2 === '>' && ch3 === '>') {\n                    if (ch4 === '=') {\n                        index += 4;\n                        return {\n                            type: Token.Punctuator,\n                            value: '>>>=',\n                            lineNumber: lineNumber,\n                            lineStart: lineStart,\n                            range: [start, index]\n                        };\n                    }\n                }\n\n                // 3-character punctuators: === !== >>> <<= >>=\n\n                if (ch1 === '>' && ch2 === '>' && ch3 === '>') {\n                    index += 3;\n                    return {\n                        type: Token.Punctuator,\n                        value: '>>>',\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                if (ch1 === '<' && ch2 === '<' && ch3 === '=') {\n                    index += 3;\n                    return {\n                        type: Token.Punctuator,\n                        value: '<<=',\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                if (ch1 === '>' && ch2 === '>' && ch3 === '=') {\n                    index += 3;\n                    return {\n                        type: Token.Punctuator,\n                        value: '>>=',\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                // Other 2-character punctuators: ++ -- << >> && ||\n\n                if (ch1 === ch2 && ('+-<>&|'.indexOf(ch1) >= 0)) {\n                    index += 2;\n                    return {\n                        type: Token.Punctuator,\n                        value: ch1 + ch2,\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n                    ++index;\n                    return {\n                        type: Token.Punctuator,\n                        value: ch1,\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n            }\n\n            // 7.8.3 Numeric Literals\n\n            function scanHexLiteral(start) {\n                var number = '';\n\n                while (index < length) {\n                    if (!isHexDigit(source[index])) {\n                        break;\n                    }\n                    number += source[index++];\n                }\n\n                if (number.length === 0) {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                if (isIdentifierStart(source.charCodeAt(index))) {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                return {\n                    type: Token.NumericLiteral,\n                    value: parseInt('0x' + number, 16),\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n            function scanOctalLiteral(start) {\n                var number = '0' + source[index++];\n                while (index < length) {\n                    if (!isOctalDigit(source[index])) {\n                        break;\n                    }\n                    number += source[index++];\n                }\n\n                if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                return {\n                    type: Token.NumericLiteral,\n                    value: parseInt(number, 8),\n                    octal: true,\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n            function scanNumericLiteral() {\n                var number, start, ch;\n\n                ch = source[index];\n                assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n                    'Numeric literal must start with a decimal digit or a decimal point');\n\n                start = index;\n                number = '';\n                if (ch !== '.') {\n                    number = source[index++];\n                    ch = source[index];\n\n                    // Hex number starts with '0x'.\n                    // Octal number starts with '0'.\n                    if (number === '0') {\n                        if (ch === 'x' || ch === 'X') {\n                            ++index;\n                            return scanHexLiteral(start);\n                        }\n                        if (isOctalDigit(ch)) {\n                            return scanOctalLiteral(start);\n                        }\n\n                        // decimal number starts with '0' such as '09' is illegal.\n                        if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n                            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                        }\n                    }\n\n                    while (isDecimalDigit(source.charCodeAt(index))) {\n                        number += source[index++];\n                    }\n                    ch = source[index];\n                }\n\n                if (ch === '.') {\n                    number += source[index++];\n                    while (isDecimalDigit(source.charCodeAt(index))) {\n                        number += source[index++];\n                    }\n                    ch = source[index];\n                }\n\n                if (ch === 'e' || ch === 'E') {\n                    number += source[index++];\n\n                    ch = source[index];\n                    if (ch === '+' || ch === '-') {\n                        number += source[index++];\n                    }\n                    if (isDecimalDigit(source.charCodeAt(index))) {\n                        while (isDecimalDigit(source.charCodeAt(index))) {\n                            number += source[index++];\n                        }\n                    } else {\n                        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                    }\n                }\n\n                if (isIdentifierStart(source.charCodeAt(index))) {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                return {\n                    type: Token.NumericLiteral,\n                    value: parseFloat(number),\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n            // 7.8.4 String Literals\n\n            function scanStringLiteral() {\n                var str = '', quote, start, ch, code, unescaped, restore, octal = false;\n\n                quote = source[index];\n                assert((quote === '\\'' || quote === '\"'),\n                    'String literal must starts with a quote');\n\n                start = index;\n                ++index;\n\n                while (index < length) {\n                    ch = source[index++];\n\n                    if (ch === quote) {\n                        quote = '';\n                        break;\n                    } else if (ch === '\\\\') {\n                        ch = source[index++];\n                        if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n                            switch (ch) {\n                                case 'n':\n                                    str += '\\n';\n                                    break;\n                                case 'r':\n                                    str += '\\r';\n                                    break;\n                                case 't':\n                                    str += '\\t';\n                                    break;\n                                case 'u':\n                                case 'x':\n                                    restore = index;\n                                    unescaped = scanHexEscape(ch);\n                                    if (unescaped) {\n                                        str += unescaped;\n                                    } else {\n                                        index = restore;\n                                        str += ch;\n                                    }\n                                    break;\n                                case 'b':\n                                    str += '\\b';\n                                    break;\n                                case 'f':\n                                    str += '\\f';\n                                    break;\n                                case 'v':\n                                    str += '\\x0B';\n                                    break;\n\n                                default:\n                                    if (isOctalDigit(ch)) {\n                                        code = '01234567'.indexOf(ch);\n\n                                        // \\0 is not octal escape sequence\n                                        if (code !== 0) {\n                                            octal = true;\n                                        }\n\n                                        if (index < length && isOctalDigit(source[index])) {\n                                            octal = true;\n                                            code = code * 8 + '01234567'.indexOf(source[index++]);\n\n                                            // 3 digits are only allowed when string starts\n                                            // with 0, 1, 2, 3\n                                            if ('0123'.indexOf(ch) >= 0 &&\n                                                    index < length &&\n                                                    isOctalDigit(source[index])) {\n                                                code = code * 8 + '01234567'.indexOf(source[index++]);\n                                            }\n                                        }\n                                        str += String.fromCharCode(code);\n                                    } else {\n                                        str += ch;\n                                    }\n                                    break;\n                            }\n                        } else {\n                            ++lineNumber;\n                            if (ch === '\\r' && source[index] === '\\n') {\n                                ++index;\n                            }\n                        }\n                    } else if (isLineTerminator(ch.charCodeAt(0))) {\n                        break;\n                    } else {\n                        str += ch;\n                    }\n                }\n\n                if (quote !== '') {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                return {\n                    type: Token.StringLiteral,\n                    value: str,\n                    octal: octal,\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n            function scanRegExp() {\n                var str, ch, start, pattern, flags, value, classMarker = false, restore, terminated = false;\n\n                lookahead = null;\n                skipComment();\n\n                start = index;\n                ch = source[index];\n                assert(ch === '/', 'Regular expression literal must start with a slash');\n                str = source[index++];\n\n                while (index < length) {\n                    ch = source[index++];\n                    str += ch;\n                    if (classMarker) {\n                        if (ch === ']') {\n                            classMarker = false;\n                        }\n                    } else {\n                        if (ch === '\\\\') {\n                            ch = source[index++];\n                            // ECMA-262 7.8.5\n                            if (isLineTerminator(ch.charCodeAt(0))) {\n                                throwError({}, Messages.UnterminatedRegExp);\n                            }\n                            str += ch;\n                        } else if (ch === '/') {\n                            terminated = true;\n                            break;\n                        } else if (ch === '[') {\n                            classMarker = true;\n                        } else if (isLineTerminator(ch.charCodeAt(0))) {\n                            throwError({}, Messages.UnterminatedRegExp);\n                        }\n                    }\n                }\n\n                if (!terminated) {\n                    throwError({}, Messages.UnterminatedRegExp);\n                }\n\n                // Exclude leading and trailing slash.\n                pattern = str.substr(1, str.length - 2);\n\n                flags = '';\n                while (index < length) {\n                    ch = source[index];\n                    if (!isIdentifierPart(ch.charCodeAt(0))) {\n                        break;\n                    }\n\n                    ++index;\n                    if (ch === '\\\\' && index < length) {\n                        ch = source[index];\n                        if (ch === 'u') {\n                            ++index;\n                            restore = index;\n                            ch = scanHexEscape('u');\n                            if (ch) {\n                                flags += ch;\n                                for (str += '\\\\u'; restore < index; ++restore) {\n                                    str += source[restore];\n                                }\n                            } else {\n                                index = restore;\n                                flags += 'u';\n                                str += '\\\\u';\n                            }\n                        } else {\n                            str += '\\\\';\n                        }\n                    } else {\n                        flags += ch;\n                        str += ch;\n                    }\n                }\n\n                try {\n                    value = new RegExp(pattern, flags);\n                } catch (e) {\n                    throwError({}, Messages.InvalidRegExp);\n                }\n\n                peek();\n\n\n                if (extra.tokenize) {\n                    return {\n                        type: Token.RegularExpression,\n                        value: value,\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n                return {\n                    literal: str,\n                    value: value,\n                    range: [start, index]\n                };\n            }\n\n            function isIdentifierName(token) {\n                return token.type === Token.Identifier ||\n                    token.type === Token.Keyword ||\n                    token.type === Token.BooleanLiteral ||\n                    token.type === Token.NullLiteral;\n            }\n\n            function advanceSlash() {\n                var prevToken,\n                    checkToken;\n                // Using the following algorithm:\n                // https://github.com/mozilla/sweet.js/wiki/design\n                prevToken = extra.tokens[extra.tokens.length - 1];\n                if (!prevToken) {\n                    // Nothing before that: it cannot be a division.\n                    return scanRegExp();\n                }\n                if (prevToken.type === 'Punctuator') {\n                    if (prevToken.value === ')') {\n                        checkToken = extra.tokens[extra.openParenToken - 1];\n                        if (checkToken &&\n                                checkToken.type === 'Keyword' &&\n                                (checkToken.value === 'if' ||\n                                 checkToken.value === 'while' ||\n                                 checkToken.value === 'for' ||\n                                 checkToken.value === 'with')) {\n                            return scanRegExp();\n                        }\n                        return scanPunctuator();\n                    }\n                    if (prevToken.value === '}') {\n                        // Dividing a function by anything makes little sense,\n                        // but we have to check for that.\n                        if (extra.tokens[extra.openCurlyToken - 3] &&\n                                extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') {\n                            // Anonymous function.\n                            checkToken = extra.tokens[extra.openCurlyToken - 4];\n                            if (!checkToken) {\n                                return scanPunctuator();\n                            }\n                        } else if (extra.tokens[extra.openCurlyToken - 4] &&\n                                extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') {\n                            // Named function.\n                            checkToken = extra.tokens[extra.openCurlyToken - 5];\n                            if (!checkToken) {\n                                return scanRegExp();\n                            }\n                        } else {\n                            return scanPunctuator();\n                        }\n                        // checkToken determines whether the function is\n                        // a declaration or an expression.\n                        if (FnExprTokens.indexOf(checkToken.value) >= 0) {\n                            // It is an expression.\n                            return scanPunctuator();\n                        }\n                        // It is a declaration.\n                        return scanRegExp();\n                    }\n                    return scanRegExp();\n                }\n                if (prevToken.type === 'Keyword') {\n                    return scanRegExp();\n                }\n                return scanPunctuator();\n            }\n\n            function advance() {\n                var ch;\n\n                skipComment();\n\n                if (index >= length) {\n                    return {\n                        type: Token.EOF,\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [index, index]\n                    };\n                }\n\n                ch = source.charCodeAt(index);\n\n                // Very common: ( and ) and ;\n                if (ch === 40 || ch === 41 || ch === 58) {\n                    return scanPunctuator();\n                }\n\n                // String literal starts with single quote (#39) or double quote (#34).\n                if (ch === 39 || ch === 34) {\n                    return scanStringLiteral();\n                }\n\n                if (isIdentifierStart(ch)) {\n                    return scanIdentifier();\n                }\n\n                // Dot (.) char #46 can also start a floating-point number, hence the need\n                // to check the next character.\n                if (ch === 46) {\n                    if (isDecimalDigit(source.charCodeAt(index + 1))) {\n                        return scanNumericLiteral();\n                    }\n                    return scanPunctuator();\n                }\n\n                if (isDecimalDigit(ch)) {\n                    return scanNumericLiteral();\n                }\n\n                // Slash (/) char #47 can also start a regex.\n                if (extra.tokenize && ch === 47) {\n                    return advanceSlash();\n                }\n\n                return scanPunctuator();\n            }\n\n            function lex() {\n                var token;\n\n                token = lookahead;\n                index = token.range[1];\n                lineNumber = token.lineNumber;\n                lineStart = token.lineStart;\n\n                lookahead = advance();\n\n                index = token.range[1];\n                lineNumber = token.lineNumber;\n                lineStart = token.lineStart;\n\n                return token;\n            }\n\n            function peek() {\n                var pos, line, start;\n\n                pos = index;\n                line = lineNumber;\n                start = lineStart;\n                lookahead = advance();\n                index = pos;\n                lineNumber = line;\n                lineStart = start;\n            }\n\n            SyntaxTreeDelegate = {\n\n                name: 'SyntaxTree',\n\n                markStart: function () {\n                    if (extra.loc) {\n                        state.markerStack.push(index - lineStart);\n                        state.markerStack.push(lineNumber);\n                    }\n                    if (extra.range) {\n                        state.markerStack.push(index);\n                    }\n                },\n\n                markEnd: function (node) {\n                    if (extra.range) {\n                        node.range = [state.markerStack.pop(), index];\n                    }\n                    if (extra.loc) {\n                        node.loc = {\n                            start: {\n                                line: state.markerStack.pop(),\n                                column: state.markerStack.pop()\n                            },\n                            end: {\n                                line: lineNumber,\n                                column: index - lineStart\n                            }\n                        };\n                        this.postProcess(node);\n                    }\n                    return node;\n                },\n\n                markEndIf: function (node) {\n                    if (node.range || node.loc) {\n                        if (extra.loc) {\n                            state.markerStack.pop();\n                            state.markerStack.pop();\n                        }\n                        if (extra.range) {\n                            state.markerStack.pop();\n                        }\n                    } else {\n                        this.markEnd(node);\n                    }\n                    return node;\n                },\n\n                postProcess: function (node) {\n                    if (extra.source) {\n                        node.loc.source = extra.source;\n                    }\n                    return node;\n                },\n\n                createArrayExpression: function (elements) {\n                    return {\n                        type: Syntax.ArrayExpression,\n                        elements: elements\n                    };\n                },\n\n                createAssignmentExpression: function (operator, left, right) {\n                    return {\n                        type: Syntax.AssignmentExpression,\n                        operator: operator,\n                        left: left,\n                        right: right\n                    };\n                },\n\n                createBinaryExpression: function (operator, left, right) {\n                    var type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression :\n                                Syntax.BinaryExpression;\n                    return {\n                        type: type,\n                        operator: operator,\n                        left: left,\n                        right: right\n                    };\n                },\n\n                createBlockStatement: function (body) {\n                    return {\n                        type: Syntax.BlockStatement,\n                        body: body\n                    };\n                },\n\n                createBreakStatement: function (label) {\n                    return {\n                        type: Syntax.BreakStatement,\n                        label: label\n                    };\n                },\n\n                createCallExpression: function (callee, args) {\n                    return {\n                        type: Syntax.CallExpression,\n                        callee: callee,\n                        'arguments': args\n                    };\n                },\n\n                createCatchClause: function (param, body) {\n                    return {\n                        type: Syntax.CatchClause,\n                        param: param,\n                        body: body\n                    };\n                },\n\n                createConditionalExpression: function (test, consequent, alternate) {\n                    return {\n                        type: Syntax.ConditionalExpression,\n                        test: test,\n                        consequent: consequent,\n                        alternate: alternate\n                    };\n                },\n\n                createContinueStatement: function (label) {\n                    return {\n                        type: Syntax.ContinueStatement,\n                        label: label\n                    };\n                },\n\n                createDebuggerStatement: function () {\n                    return {\n                        type: Syntax.DebuggerStatement\n                    };\n                },\n\n                createDoWhileStatement: function (body, test) {\n                    return {\n                        type: Syntax.DoWhileStatement,\n                        body: body,\n                        test: test\n                    };\n                },\n\n                createEmptyStatement: function () {\n                    return {\n                        type: Syntax.EmptyStatement\n                    };\n                },\n\n                createExpressionStatement: function (expression) {\n                    return {\n                        type: Syntax.ExpressionStatement,\n                        expression: expression\n                    };\n                },\n\n                createForStatement: function (init, test, update, body) {\n                    return {\n                        type: Syntax.ForStatement,\n                        init: init,\n                        test: test,\n                        update: update,\n                        body: body\n                    };\n                },\n\n                createForInStatement: function (left, right, body) {\n                    return {\n                        type: Syntax.ForInStatement,\n                        left: left,\n                        right: right,\n                        body: body,\n                        each: false\n                    };\n                },\n\n                createFunctionDeclaration: function (id, params, defaults, body) {\n                    return {\n                        type: Syntax.FunctionDeclaration,\n                        id: id,\n                        params: params,\n                        defaults: defaults,\n                        body: body,\n                        rest: null,\n                        generator: false,\n                        expression: false\n                    };\n                },\n\n                createFunctionExpression: function (id, params, defaults, body) {\n                    return {\n                        type: Syntax.FunctionExpression,\n                        id: id,\n                        params: params,\n                        defaults: defaults,\n                        body: body,\n                        rest: null,\n                        generator: false,\n                        expression: false\n                    };\n                },\n\n                createIdentifier: function (name) {\n                    return {\n                        type: Syntax.Identifier,\n                        name: name\n                    };\n                },\n\n                createIfStatement: function (test, consequent, alternate) {\n                    return {\n                        type: Syntax.IfStatement,\n                        test: test,\n                        consequent: consequent,\n                        alternate: alternate\n                    };\n                },\n\n                createLabeledStatement: function (label, body) {\n                    return {\n                        type: Syntax.LabeledStatement,\n                        label: label,\n                        body: body\n                    };\n                },\n\n                createLiteral: function (token) {\n                    return {\n                        type: Syntax.Literal,\n                        value: token.value,\n                        raw: source.slice(token.range[0], token.range[1])\n                    };\n                },\n\n                createMemberExpression: function (accessor, object, property) {\n                    return {\n                        type: Syntax.MemberExpression,\n                        computed: accessor === '[',\n                        object: object,\n                        property: property\n                    };\n                },\n\n                createNewExpression: function (callee, args) {\n                    return {\n                        type: Syntax.NewExpression,\n                        callee: callee,\n                        'arguments': args\n                    };\n                },\n\n                createObjectExpression: function (properties) {\n                    return {\n                        type: Syntax.ObjectExpression,\n                        properties: properties\n                    };\n                },\n\n                createPostfixExpression: function (operator, argument) {\n                    return {\n                        type: Syntax.UpdateExpression,\n                        operator: operator,\n                        argument: argument,\n                        prefix: false\n                    };\n                },\n\n                createProgram: function (body) {\n                    return {\n                        type: Syntax.Program,\n                        body: body\n                    };\n                },\n\n                createProperty: function (kind, key, value) {\n                    return {\n                        type: Syntax.Property,\n                        key: key,\n                        value: value,\n                        kind: kind\n                    };\n                },\n\n                createReturnStatement: function (argument) {\n                    return {\n                        type: Syntax.ReturnStatement,\n                        argument: argument\n                    };\n                },\n\n                createSequenceExpression: function (expressions) {\n                    return {\n                        type: Syntax.SequenceExpression,\n                        expressions: expressions\n                    };\n                },\n\n                createSwitchCase: function (test, consequent) {\n                    return {\n                        type: Syntax.SwitchCase,\n                        test: test,\n                        consequent: consequent\n                    };\n                },\n\n                createSwitchStatement: function (discriminant, cases) {\n                    return {\n                        type: Syntax.SwitchStatement,\n                        discriminant: discriminant,\n                        cases: cases\n                    };\n                },\n\n                createThisExpression: function () {\n                    return {\n                        type: Syntax.ThisExpression\n                    };\n                },\n\n                createThrowStatement: function (argument) {\n                    return {\n                        type: Syntax.ThrowStatement,\n                        argument: argument\n                    };\n                },\n\n                createTryStatement: function (block, guardedHandlers, handlers, finalizer) {\n                    return {\n                        type: Syntax.TryStatement,\n                        block: block,\n                        guardedHandlers: guardedHandlers,\n                        handlers: handlers,\n                        finalizer: finalizer\n                    };\n                },\n\n                createUnaryExpression: function (operator, argument) {\n                    if (operator === '++' || operator === '--') {\n                        return {\n                            type: Syntax.UpdateExpression,\n                            operator: operator,\n                            argument: argument,\n                            prefix: true\n                        };\n                    }\n                    return {\n                        type: Syntax.UnaryExpression,\n                        operator: operator,\n                        argument: argument,\n                        prefix: true\n                    };\n                },\n\n                createVariableDeclaration: function (declarations, kind) {\n                    return {\n                        type: Syntax.VariableDeclaration,\n                        declarations: declarations,\n                        kind: kind\n                    };\n                },\n\n                createVariableDeclarator: function (id, init) {\n                    return {\n                        type: Syntax.VariableDeclarator,\n                        id: id,\n                        init: init\n                    };\n                },\n\n                createWhileStatement: function (test, body) {\n                    return {\n                        type: Syntax.WhileStatement,\n                        test: test,\n                        body: body\n                    };\n                },\n\n                createWithStatement: function (object, body) {\n                    return {\n                        type: Syntax.WithStatement,\n                        object: object,\n                        body: body\n                    };\n                }\n            };\n\n            // Return true if there is a line terminator before the next token.\n\n            function peekLineTerminator() {\n                var pos, line, start, found;\n\n                pos = index;\n                line = lineNumber;\n                start = lineStart;\n                skipComment();\n                found = lineNumber !== line;\n                index = pos;\n                lineNumber = line;\n                lineStart = start;\n\n                return found;\n            }\n\n            // Throw an exception\n\n            function throwError(token, messageFormat) {\n                var error,\n                    args = Array.prototype.slice.call(arguments, 2),\n                    msg = messageFormat.replace(\n                        /%(\\d)/g,\n                        function (whole, index) {\n                            assert(index < args.length, 'Message reference must be in range');\n                            return args[index];\n                        }\n                    );\n\n                if (typeof token.lineNumber === 'number') {\n                    error = new Error('Line ' + token.lineNumber + ': ' + msg);\n                    error.index = token.range[0];\n                    error.lineNumber = token.lineNumber;\n                    error.column = token.range[0] - lineStart + 1;\n                } else {\n                    error = new Error('Line ' + lineNumber + ': ' + msg);\n                    error.index = index;\n                    error.lineNumber = lineNumber;\n                    error.column = index - lineStart + 1;\n                }\n\n                error.description = msg;\n                throw error;\n            }\n\n            function throwErrorTolerant() {\n                try {\n                    throwError.apply(null, arguments);\n                } catch (e) {\n                    if (extra.errors) {\n                        extra.errors.push(e);\n                    } else {\n                        throw e;\n                    }\n                }\n            }\n\n\n            // Throw an exception because of the token.\n\n            function throwUnexpected(token) {\n                if (token.type === Token.EOF) {\n                    throwError(token, Messages.UnexpectedEOS);\n                }\n\n                if (token.type === Token.NumericLiteral) {\n                    throwError(token, Messages.UnexpectedNumber);\n                }\n\n                if (token.type === Token.StringLiteral) {\n                    throwError(token, Messages.UnexpectedString);\n                }\n\n                if (token.type === Token.Identifier) {\n                    throwError(token, Messages.UnexpectedIdentifier);\n                }\n\n                if (token.type === Token.Keyword) {\n                    if (isFutureReservedWord(token.value)) {\n                        throwError(token, Messages.UnexpectedReserved);\n                    } else if (strict && isStrictModeReservedWord(token.value)) {\n                        throwErrorTolerant(token, Messages.StrictReservedWord);\n                        return;\n                    }\n                    throwError(token, Messages.UnexpectedToken, token.value);\n                }\n\n                // BooleanLiteral, NullLiteral, or Punctuator.\n                throwError(token, Messages.UnexpectedToken, token.value);\n            }\n\n            // Expect the next token to match the specified punctuator.\n            // If not, an exception will be thrown.\n\n            function expect(value) {\n                var token = lex();\n                if (token.type !== Token.Punctuator || token.value !== value) {\n                    throwUnexpected(token);\n                }\n            }\n\n            // Expect the next token to match the specified keyword.\n            // If not, an exception will be thrown.\n\n            function expectKeyword(keyword) {\n                var token = lex();\n                if (token.type !== Token.Keyword || token.value !== keyword) {\n                    throwUnexpected(token);\n                }\n            }\n\n            // Return true if the next token matches the specified punctuator.\n\n            function match(value) {\n                return lookahead.type === Token.Punctuator && lookahead.value === value;\n            }\n\n            // Return true if the next token matches the specified keyword\n\n            function matchKeyword(keyword) {\n                return lookahead.type === Token.Keyword && lookahead.value === keyword;\n            }\n\n            // Return true if the next token is an assignment operator\n\n            function matchAssign() {\n                var op;\n\n                if (lookahead.type !== Token.Punctuator) {\n                    return false;\n                }\n                op = lookahead.value;\n                return op === '=' ||\n                    op === '*=' ||\n                    op === '/=' ||\n                    op === '%=' ||\n                    op === '+=' ||\n                    op === '-=' ||\n                    op === '<<=' ||\n                    op === '>>=' ||\n                    op === '>>>=' ||\n                    op === '&=' ||\n                    op === '^=' ||\n                    op === '|=';\n            }\n\n            function consumeSemicolon() {\n                var line;\n\n                // Catch the very common case first: immediately a semicolon (char #59).\n                if (source.charCodeAt(index) === 59) {\n                    lex();\n                    return;\n                }\n\n                line = lineNumber;\n                skipComment();\n                if (lineNumber !== line) {\n                    return;\n                }\n\n                if (match(';')) {\n                    lex();\n                    return;\n                }\n\n                if (lookahead.type !== Token.EOF && !match('}')) {\n                    throwUnexpected(lookahead);\n                }\n            }\n\n            // Return true if provided expression is LeftHandSideExpression\n\n            function isLeftHandSide(expr) {\n                return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression;\n            }\n\n            // 11.1.4 Array Initialiser\n\n            function parseArrayInitialiser() {\n                var elements = [];\n\n                expect('[');\n\n                while (!match(']')) {\n                    if (match(',')) {\n                        lex();\n                        elements.push(null);\n                    } else {\n                        elements.push(parseAssignmentExpression());\n\n                        if (!match(']')) {\n                            expect(',');\n                        }\n                    }\n                }\n\n                expect(']');\n\n                return delegate.createArrayExpression(elements);\n            }\n\n            // 11.1.5 Object Initialiser\n\n            function parsePropertyFunction(param, first) {\n                var previousStrict, body;\n\n                previousStrict = strict;\n                skipComment();\n                delegate.markStart();\n                body = parseFunctionSourceElements();\n                if (first && strict && isRestrictedWord(param[0].name)) {\n                    throwErrorTolerant(first, Messages.StrictParamName);\n                }\n                strict = previousStrict;\n                return delegate.markEnd(delegate.createFunctionExpression(null, param, [], body));\n            }\n\n            function parseObjectPropertyKey() {\n                var token;\n\n                skipComment();\n                delegate.markStart();\n                token = lex();\n\n                // Note: This function is called only from parseObjectProperty(), where\n                // EOF and Punctuator tokens are already filtered out.\n\n                if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {\n                    if (strict && token.octal) {\n                        throwErrorTolerant(token, Messages.StrictOctalLiteral);\n                    }\n                    return delegate.markEnd(delegate.createLiteral(token));\n                }\n\n                return delegate.markEnd(delegate.createIdentifier(token.value));\n            }\n\n            function parseObjectProperty() {\n                var token, key, id, value, param;\n\n                token = lookahead;\n                skipComment();\n                delegate.markStart();\n\n                if (token.type === Token.Identifier) {\n\n                    id = parseObjectPropertyKey();\n\n                    // Property Assignment: Getter and Setter.\n\n                    if (token.value === 'get' && !match(':')) {\n                        key = parseObjectPropertyKey();\n                        expect('(');\n                        expect(')');\n                        value = parsePropertyFunction([]);\n                        return delegate.markEnd(delegate.createProperty('get', key, value));\n                    }\n                    if (token.value === 'set' && !match(':')) {\n                        key = parseObjectPropertyKey();\n                        expect('(');\n                        token = lookahead;\n                        if (token.type !== Token.Identifier) {\n                            expect(')');\n                            throwErrorTolerant(token, Messages.UnexpectedToken, token.value);\n                            value = parsePropertyFunction([]);\n                        } else {\n                            param = [parseVariableIdentifier()];\n                            expect(')');\n                            value = parsePropertyFunction(param, token);\n                        }\n                        return delegate.markEnd(delegate.createProperty('set', key, value));\n                    }\n                    expect(':');\n                    value = parseAssignmentExpression();\n                    return delegate.markEnd(delegate.createProperty('init', id, value));\n                }\n                if (token.type === Token.EOF || token.type === Token.Punctuator) {\n                    throwUnexpected(token);\n                } else {\n                    key = parseObjectPropertyKey();\n                    expect(':');\n                    value = parseAssignmentExpression();\n                    return delegate.markEnd(delegate.createProperty('init', key, value));\n                }\n            }\n\n            function parseObjectInitialiser() {\n                var properties = [], property, name, key, kind, map = {}, toString = String;\n\n                expect('{');\n\n                while (!match('}')) {\n                    property = parseObjectProperty();\n\n                    if (property.key.type === Syntax.Identifier) {\n                        name = property.key.name;\n                    } else {\n                        name = toString(property.key.value);\n                    }\n                    kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set;\n\n                    key = '$' + name;\n                    if (Object.prototype.hasOwnProperty.call(map, key)) {\n                        if (map[key] === PropertyKind.Data) {\n                            if (strict && kind === PropertyKind.Data) {\n                                throwErrorTolerant({}, Messages.StrictDuplicateProperty);\n                            } else if (kind !== PropertyKind.Data) {\n                                throwErrorTolerant({}, Messages.AccessorDataProperty);\n                            }\n                        } else {\n                            if (kind === PropertyKind.Data) {\n                                throwErrorTolerant({}, Messages.AccessorDataProperty);\n                            } else if (map[key] & kind) {\n                                throwErrorTolerant({}, Messages.AccessorGetSet);\n                            }\n                        }\n                        map[key] |= kind;\n                    } else {\n                        map[key] = kind;\n                    }\n\n                    properties.push(property);\n\n                    if (!match('}')) {\n                        expect(',');\n                    }\n                }\n\n                expect('}');\n\n                return delegate.createObjectExpression(properties);\n            }\n\n            // 11.1.6 The Grouping Operator\n\n            function parseGroupExpression() {\n                var expr;\n\n                expect('(');\n\n                expr = parseExpression();\n\n                expect(')');\n\n                return expr;\n            }\n\n\n            // 11.1 Primary Expressions\n\n            function parsePrimaryExpression() {\n                var type, token, expr;\n\n                if (match('(')) {\n                    return parseGroupExpression();\n                }\n\n                type = lookahead.type;\n                delegate.markStart();\n\n                if (type === Token.Identifier) {\n                    expr = delegate.createIdentifier(lex().value);\n                } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {\n                    if (strict && lookahead.octal) {\n                        throwErrorTolerant(lookahead, Messages.StrictOctalLiteral);\n                    }\n                    expr = delegate.createLiteral(lex());\n                } else if (type === Token.Keyword) {\n                    if (matchKeyword('this')) {\n                        lex();\n                        expr = delegate.createThisExpression();\n                    } else if (matchKeyword('function')) {\n                        expr = parseFunctionExpression();\n                    }\n                } else if (type === Token.BooleanLiteral) {\n                    token = lex();\n                    token.value = (token.value === 'true');\n                    expr = delegate.createLiteral(token);\n                } else if (type === Token.NullLiteral) {\n                    token = lex();\n                    token.value = null;\n                    expr = delegate.createLiteral(token);\n                } else if (match('[')) {\n                    expr = parseArrayInitialiser();\n                } else if (match('{')) {\n                    expr = parseObjectInitialiser();\n                } else if (match('/') || match('/=')) {\n                    expr = delegate.createLiteral(scanRegExp());\n                }\n\n                if (expr) {\n                    return delegate.markEnd(expr);\n                }\n\n                throwUnexpected(lex());\n            }\n\n            // 11.2 Left-Hand-Side Expressions\n\n            function parseArguments() {\n                var args = [];\n\n                expect('(');\n\n                if (!match(')')) {\n                    while (index < length) {\n                        args.push(parseAssignmentExpression());\n                        if (match(')')) {\n                            break;\n                        }\n                        expect(',');\n                    }\n                }\n\n                expect(')');\n\n                return args;\n            }\n\n            function parseNonComputedProperty() {\n                var token;\n\n                delegate.markStart();\n                token = lex();\n\n                if (!isIdentifierName(token)) {\n                    throwUnexpected(token);\n                }\n\n                return delegate.markEnd(delegate.createIdentifier(token.value));\n            }\n\n            function parseNonComputedMember() {\n                expect('.');\n\n                return parseNonComputedProperty();\n            }\n\n            function parseComputedMember() {\n                var expr;\n\n                expect('[');\n\n                expr = parseExpression();\n\n                expect(']');\n\n                return expr;\n            }\n\n            function parseNewExpression() {\n                var callee, args;\n\n                delegate.markStart();\n                expectKeyword('new');\n                callee = parseLeftHandSideExpression();\n                args = match('(') ? parseArguments() : [];\n\n                return delegate.markEnd(delegate.createNewExpression(callee, args));\n            }\n\n            function parseLeftHandSideExpressionAllowCall() {\n                var marker, expr, args, property;\n\n                marker = createLocationMarker();\n\n                expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();\n\n                while (match('.') || match('[') || match('(')) {\n                    if (match('(')) {\n                        args = parseArguments();\n                        expr = delegate.createCallExpression(expr, args);\n                    } else if (match('[')) {\n                        property = parseComputedMember();\n                        expr = delegate.createMemberExpression('[', expr, property);\n                    } else {\n                        property = parseNonComputedMember();\n                        expr = delegate.createMemberExpression('.', expr, property);\n                    }\n                    if (marker) {\n                        marker.end();\n                        marker.apply(expr);\n                    }\n                }\n\n                return expr;\n            }\n\n            function parseLeftHandSideExpression() {\n                var marker, expr, property;\n\n                marker = createLocationMarker();\n\n                expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();\n\n                while (match('.') || match('[')) {\n                    if (match('[')) {\n                        property = parseComputedMember();\n                        expr = delegate.createMemberExpression('[', expr, property);\n                    } else {\n                        property = parseNonComputedMember();\n                        expr = delegate.createMemberExpression('.', expr, property);\n                    }\n                    if (marker) {\n                        marker.end();\n                        marker.apply(expr);\n                    }\n                }\n\n                return expr;\n            }\n\n            // 11.3 Postfix Expressions\n\n            function parsePostfixExpression() {\n                var expr, token;\n\n                delegate.markStart();\n                expr = parseLeftHandSideExpressionAllowCall();\n\n                if (lookahead.type === Token.Punctuator) {\n                    if ((match('++') || match('--')) && !peekLineTerminator()) {\n                        // 11.3.1, 11.3.2\n                        if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n                            throwErrorTolerant({}, Messages.StrictLHSPostfix);\n                        }\n\n                        if (!isLeftHandSide(expr)) {\n                            throwError({}, Messages.InvalidLHSInAssignment);\n                        }\n\n                        token = lex();\n                        expr = delegate.createPostfixExpression(token.value, expr);\n                    }\n                }\n\n                return delegate.markEndIf(expr);\n            }\n\n            // 11.4 Unary Operators\n\n            function parseUnaryExpression() {\n                var token, expr;\n\n                delegate.markStart();\n\n                if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n                    expr = parsePostfixExpression();\n                } else if (match('++') || match('--')) {\n                    token = lex();\n                    expr = parseUnaryExpression();\n                    // 11.4.4, 11.4.5\n                    if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n                        throwErrorTolerant({}, Messages.StrictLHSPrefix);\n                    }\n\n                    if (!isLeftHandSide(expr)) {\n                        throwError({}, Messages.InvalidLHSInAssignment);\n                    }\n\n                    expr = delegate.createUnaryExpression(token.value, expr);\n                } else if (match('+') || match('-') || match('~') || match('!')) {\n                    token = lex();\n                    expr = parseUnaryExpression();\n                    expr = delegate.createUnaryExpression(token.value, expr);\n                } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n                    token = lex();\n                    expr = parseUnaryExpression();\n                    expr = delegate.createUnaryExpression(token.value, expr);\n                    if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {\n                        throwErrorTolerant({}, Messages.StrictDelete);\n                    }\n                } else {\n                    expr = parsePostfixExpression();\n                }\n\n                return delegate.markEndIf(expr);\n            }\n\n            function binaryPrecedence(token, allowIn) {\n                var prec = 0;\n\n                if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {\n                    return 0;\n                }\n\n                switch (token.value) {\n                    case '||':\n                        prec = 1;\n                        break;\n\n                    case '&&':\n                        prec = 2;\n                        break;\n\n                    case '|':\n                        prec = 3;\n                        break;\n\n                    case '^':\n                        prec = 4;\n                        break;\n\n                    case '&':\n                        prec = 5;\n                        break;\n\n                    case '==':\n                    case '!=':\n                    case '===':\n                    case '!==':\n                        prec = 6;\n                        break;\n\n                    case '<':\n                    case '>':\n                    case '<=':\n                    case '>=':\n                    case 'instanceof':\n                        prec = 7;\n                        break;\n\n                    case 'in':\n                        prec = allowIn ? 7 : 0;\n                        break;\n\n                    case '<<':\n                    case '>>':\n                    case '>>>':\n                        prec = 8;\n                        break;\n\n                    case '+':\n                    case '-':\n                        prec = 9;\n                        break;\n\n                    case '*':\n                    case '/':\n                    case '%':\n                        prec = 11;\n                        break;\n\n                    default:\n                        break;\n                }\n\n                return prec;\n            }\n\n            // 11.5 Multiplicative Operators\n            // 11.6 Additive Operators\n            // 11.7 Bitwise Shift Operators\n            // 11.8 Relational Operators\n            // 11.9 Equality Operators\n            // 11.10 Binary Bitwise Operators\n            // 11.11 Binary Logical Operators\n\n            function parseBinaryExpression() {\n                var marker, markers, expr, token, prec, previousAllowIn, stack, right, operator, left, i;\n\n                previousAllowIn = state.allowIn;\n                state.allowIn = true;\n\n                marker = createLocationMarker();\n                left = parseUnaryExpression();\n\n                token = lookahead;\n                prec = binaryPrecedence(token, previousAllowIn);\n                if (prec === 0) {\n                    return left;\n                }\n                token.prec = prec;\n                lex();\n\n                markers = [marker, createLocationMarker()];\n                right = parseUnaryExpression();\n\n                stack = [left, token, right];\n\n                while ((prec = binaryPrecedence(lookahead, previousAllowIn)) > 0) {\n\n                    // Reduce: make a binary expression from the three topmost entries.\n                    while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n                        right = stack.pop();\n                        operator = stack.pop().value;\n                        left = stack.pop();\n                        expr = delegate.createBinaryExpression(operator, left, right);\n                        markers.pop();\n                        marker = markers.pop();\n                        if (marker) {\n                            marker.end();\n                            marker.apply(expr);\n                        }\n                        stack.push(expr);\n                        markers.push(marker);\n                    }\n\n                    // Shift.\n                    token = lex();\n                    token.prec = prec;\n                    stack.push(token);\n                    markers.push(createLocationMarker());\n                    expr = parseUnaryExpression();\n                    stack.push(expr);\n                }\n\n                state.allowIn = previousAllowIn;\n\n                // Final reduce to clean-up the stack.\n                i = stack.length - 1;\n                expr = stack[i];\n                markers.pop();\n                while (i > 1) {\n                    expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n                    i -= 2;\n                    marker = markers.pop();\n                    if (marker) {\n                        marker.end();\n                        marker.apply(expr);\n                    }\n                }\n\n                return expr;\n            }\n\n\n            // 11.12 Conditional Operator\n\n            function parseConditionalExpression() {\n                var expr, previousAllowIn, consequent, alternate;\n\n                delegate.markStart();\n                expr = parseBinaryExpression();\n\n                if (match('?')) {\n                    lex();\n                    previousAllowIn = state.allowIn;\n                    state.allowIn = true;\n                    consequent = parseAssignmentExpression();\n                    state.allowIn = previousAllowIn;\n                    expect(':');\n                    alternate = parseAssignmentExpression();\n\n                    expr = delegate.markEnd(delegate.createConditionalExpression(expr, consequent, alternate));\n                } else {\n                    delegate.markEnd({});\n                }\n\n                return expr;\n            }\n\n            // 11.13 Assignment Operators\n\n            function parseAssignmentExpression() {\n                var token, left, right, node;\n\n                token = lookahead;\n                delegate.markStart();\n                node = left = parseConditionalExpression();\n\n                if (matchAssign()) {\n                    // LeftHandSideExpression\n                    if (!isLeftHandSide(left)) {\n                        throwError({}, Messages.InvalidLHSInAssignment);\n                    }\n\n                    // 11.13.1\n                    if (strict && left.type === Syntax.Identifier && isRestrictedWord(left.name)) {\n                        throwErrorTolerant(token, Messages.StrictLHSAssignment);\n                    }\n\n                    token = lex();\n                    right = parseAssignmentExpression();\n                    node = delegate.createAssignmentExpression(token.value, left, right);\n                }\n\n                return delegate.markEndIf(node);\n            }\n\n            // 11.14 Comma Operator\n\n            function parseExpression() {\n                var expr;\n\n                delegate.markStart();\n                expr = parseAssignmentExpression();\n\n                if (match(',')) {\n                    expr = delegate.createSequenceExpression([expr]);\n\n                    while (index < length) {\n                        if (!match(',')) {\n                            break;\n                        }\n                        lex();\n                        expr.expressions.push(parseAssignmentExpression());\n                    }\n                }\n\n                return delegate.markEndIf(expr);\n            }\n\n            // 12.1 Block\n\n            function parseStatementList() {\n                var list = [],\n                    statement;\n\n                while (index < length) {\n                    if (match('}')) {\n                        break;\n                    }\n                    statement = parseSourceElement();\n                    if (typeof statement === 'undefined') {\n                        break;\n                    }\n                    list.push(statement);\n                }\n\n                return list;\n            }\n\n            function parseBlock() {\n                var block;\n\n                skipComment();\n                delegate.markStart();\n                expect('{');\n\n                block = parseStatementList();\n\n                expect('}');\n\n                return delegate.markEnd(delegate.createBlockStatement(block));\n            }\n\n            // 12.2 Variable Statement\n\n            function parseVariableIdentifier() {\n                var token;\n\n                skipComment();\n                delegate.markStart();\n                token = lex();\n\n                if (token.type !== Token.Identifier) {\n                    throwUnexpected(token);\n                }\n\n                return delegate.markEnd(delegate.createIdentifier(token.value));\n            }\n\n            function parseVariableDeclaration(kind) {\n                var init = null, id;\n\n                skipComment();\n                delegate.markStart();\n                id = parseVariableIdentifier();\n\n                // 12.2.1\n                if (strict && isRestrictedWord(id.name)) {\n                    throwErrorTolerant({}, Messages.StrictVarName);\n                }\n\n                if (kind === 'const') {\n                    expect('=');\n                    init = parseAssignmentExpression();\n                } else if (match('=')) {\n                    lex();\n                    init = parseAssignmentExpression();\n                }\n\n                return delegate.markEnd(delegate.createVariableDeclarator(id, init));\n            }\n\n            function parseVariableDeclarationList(kind) {\n                var list = [];\n\n                do {\n                    list.push(parseVariableDeclaration(kind));\n                    if (!match(',')) {\n                        break;\n                    }\n                    lex();\n                } while (index < length);\n\n                return list;\n            }\n\n            function parseVariableStatement() {\n                var declarations;\n\n                expectKeyword('var');\n\n                declarations = parseVariableDeclarationList();\n\n                consumeSemicolon();\n\n                return delegate.createVariableDeclaration(declarations, 'var');\n            }\n\n            // kind may be `const` or `let`\n            // Both are experimental and not in the specification yet.\n            // see http://wiki.ecmascript.org/doku.php?id=harmony:const\n            // and http://wiki.ecmascript.org/doku.php?id=harmony:let\n            function parseConstLetDeclaration(kind) {\n                var declarations;\n\n                skipComment();\n                delegate.markStart();\n\n                expectKeyword(kind);\n\n                declarations = parseVariableDeclarationList(kind);\n\n                consumeSemicolon();\n\n                return delegate.markEnd(delegate.createVariableDeclaration(declarations, kind));\n            }\n\n            // 12.3 Empty Statement\n\n            function parseEmptyStatement() {\n                expect(';');\n                return delegate.createEmptyStatement();\n            }\n\n            // 12.4 Expression Statement\n\n            function parseExpressionStatement() {\n                var expr = parseExpression();\n                consumeSemicolon();\n                return delegate.createExpressionStatement(expr);\n            }\n\n            // 12.5 If statement\n\n            function parseIfStatement() {\n                var test, consequent, alternate;\n\n                expectKeyword('if');\n\n                expect('(');\n\n                test = parseExpression();\n\n                expect(')');\n\n                consequent = parseStatement();\n\n                if (matchKeyword('else')) {\n                    lex();\n                    alternate = parseStatement();\n                } else {\n                    alternate = null;\n                }\n\n                return delegate.createIfStatement(test, consequent, alternate);\n            }\n\n            // 12.6 Iteration Statements\n\n            function parseDoWhileStatement() {\n                var body, test, oldInIteration;\n\n                expectKeyword('do');\n\n                oldInIteration = state.inIteration;\n                state.inIteration = true;\n\n                body = parseStatement();\n\n                state.inIteration = oldInIteration;\n\n                expectKeyword('while');\n\n                expect('(');\n\n                test = parseExpression();\n\n                expect(')');\n\n                if (match(';')) {\n                    lex();\n                }\n\n                return delegate.createDoWhileStatement(body, test);\n            }\n\n            function parseWhileStatement() {\n                var test, body, oldInIteration;\n\n                expectKeyword('while');\n\n                expect('(');\n\n                test = parseExpression();\n\n                expect(')');\n\n                oldInIteration = state.inIteration;\n                state.inIteration = true;\n\n                body = parseStatement();\n\n                state.inIteration = oldInIteration;\n\n                return delegate.createWhileStatement(test, body);\n            }\n\n            function parseForVariableDeclaration() {\n                var token, declarations;\n\n                delegate.markStart();\n                token = lex();\n                declarations = parseVariableDeclarationList();\n\n                return delegate.markEnd(delegate.createVariableDeclaration(declarations, token.value));\n            }\n\n            function parseForStatement() {\n                var init, test, update, left, right, body, oldInIteration;\n\n                init = test = update = null;\n\n                expectKeyword('for');\n\n                expect('(');\n\n                if (match(';')) {\n                    lex();\n                } else {\n                    if (matchKeyword('var') || matchKeyword('let')) {\n                        state.allowIn = false;\n                        init = parseForVariableDeclaration();\n                        state.allowIn = true;\n\n                        if (init.declarations.length === 1 && matchKeyword('in')) {\n                            lex();\n                            left = init;\n                            right = parseExpression();\n                            init = null;\n                        }\n                    } else {\n                        state.allowIn = false;\n                        init = parseExpression();\n                        state.allowIn = true;\n\n                        if (matchKeyword('in')) {\n                            // LeftHandSideExpression\n                            if (!isLeftHandSide(init)) {\n                                throwError({}, Messages.InvalidLHSInForIn);\n                            }\n\n                            lex();\n                            left = init;\n                            right = parseExpression();\n                            init = null;\n                        }\n                    }\n\n                    if (typeof left === 'undefined') {\n                        expect(';');\n                    }\n                }\n\n                if (typeof left === 'undefined') {\n\n                    if (!match(';')) {\n                        test = parseExpression();\n                    }\n                    expect(';');\n\n                    if (!match(')')) {\n                        update = parseExpression();\n                    }\n                }\n\n                expect(')');\n\n                oldInIteration = state.inIteration;\n                state.inIteration = true;\n\n                body = parseStatement();\n\n                state.inIteration = oldInIteration;\n\n                return (typeof left === 'undefined') ?\n                        delegate.createForStatement(init, test, update, body) :\n                        delegate.createForInStatement(left, right, body);\n            }\n\n            // 12.7 The continue statement\n\n            function parseContinueStatement() {\n                var label = null, key;\n\n                expectKeyword('continue');\n\n                // Optimize the most common form: 'continue;'.\n                if (source.charCodeAt(index) === 59) {\n                    lex();\n\n                    if (!state.inIteration) {\n                        throwError({}, Messages.IllegalContinue);\n                    }\n\n                    return delegate.createContinueStatement(null);\n                }\n\n                if (peekLineTerminator()) {\n                    if (!state.inIteration) {\n                        throwError({}, Messages.IllegalContinue);\n                    }\n\n                    return delegate.createContinueStatement(null);\n                }\n\n                if (lookahead.type === Token.Identifier) {\n                    label = parseVariableIdentifier();\n\n                    key = '$' + label.name;\n                    if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n                        throwError({}, Messages.UnknownLabel, label.name);\n                    }\n                }\n\n                consumeSemicolon();\n\n                if (label === null && !state.inIteration) {\n                    throwError({}, Messages.IllegalContinue);\n                }\n\n                return delegate.createContinueStatement(label);\n            }\n\n            // 12.8 The break statement\n\n            function parseBreakStatement() {\n                var label = null, key;\n\n                expectKeyword('break');\n\n                // Catch the very common case first: immediately a semicolon (char #59).\n                if (source.charCodeAt(index) === 59) {\n                    lex();\n\n                    if (!(state.inIteration || state.inSwitch)) {\n                        throwError({}, Messages.IllegalBreak);\n                    }\n\n                    return delegate.createBreakStatement(null);\n                }\n\n                if (peekLineTerminator()) {\n                    if (!(state.inIteration || state.inSwitch)) {\n                        throwError({}, Messages.IllegalBreak);\n                    }\n\n                    return delegate.createBreakStatement(null);\n                }\n\n                if (lookahead.type === Token.Identifier) {\n                    label = parseVariableIdentifier();\n\n                    key = '$' + label.name;\n                    if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n                        throwError({}, Messages.UnknownLabel, label.name);\n                    }\n                }\n\n                consumeSemicolon();\n\n                if (label === null && !(state.inIteration || state.inSwitch)) {\n                    throwError({}, Messages.IllegalBreak);\n                }\n\n                return delegate.createBreakStatement(label);\n            }\n\n            // 12.9 The return statement\n\n            function parseReturnStatement() {\n                var argument = null;\n\n                expectKeyword('return');\n\n                if (!state.inFunctionBody) {\n                    throwErrorTolerant({}, Messages.IllegalReturn);\n                }\n\n                // 'return' followed by a space and an identifier is very common.\n                if (source.charCodeAt(index) === 32) {\n                    if (isIdentifierStart(source.charCodeAt(index + 1))) {\n                        argument = parseExpression();\n                        consumeSemicolon();\n                        return delegate.createReturnStatement(argument);\n                    }\n                }\n\n                if (peekLineTerminator()) {\n                    return delegate.createReturnStatement(null);\n                }\n\n                if (!match(';')) {\n                    if (!match('}') && lookahead.type !== Token.EOF) {\n                        argument = parseExpression();\n                    }\n                }\n\n                consumeSemicolon();\n\n                return delegate.createReturnStatement(argument);\n            }\n\n            // 12.10 The with statement\n\n            function parseWithStatement() {\n                var object, body;\n\n                if (strict) {\n                    throwErrorTolerant({}, Messages.StrictModeWith);\n                }\n\n                expectKeyword('with');\n\n                expect('(');\n\n                object = parseExpression();\n\n                expect(')');\n\n                body = parseStatement();\n\n                return delegate.createWithStatement(object, body);\n            }\n\n            // 12.10 The swith statement\n\n            function parseSwitchCase() {\n                var test,\n                    consequent = [],\n                    statement;\n\n                skipComment();\n                delegate.markStart();\n                if (matchKeyword('default')) {\n                    lex();\n                    test = null;\n                } else {\n                    expectKeyword('case');\n                    test = parseExpression();\n                }\n                expect(':');\n\n                while (index < length) {\n                    if (match('}') || matchKeyword('default') || matchKeyword('case')) {\n                        break;\n                    }\n                    statement = parseStatement();\n                    consequent.push(statement);\n                }\n\n                return delegate.markEnd(delegate.createSwitchCase(test, consequent));\n            }\n\n            function parseSwitchStatement() {\n                var discriminant, cases, clause, oldInSwitch, defaultFound;\n\n                expectKeyword('switch');\n\n                expect('(');\n\n                discriminant = parseExpression();\n\n                expect(')');\n\n                expect('{');\n\n                if (match('}')) {\n                    lex();\n                    return delegate.createSwitchStatement(discriminant);\n                }\n\n                cases = [];\n\n                oldInSwitch = state.inSwitch;\n                state.inSwitch = true;\n                defaultFound = false;\n\n                while (index < length) {\n                    if (match('}')) {\n                        break;\n                    }\n                    clause = parseSwitchCase();\n                    if (clause.test === null) {\n                        if (defaultFound) {\n                            throwError({}, Messages.MultipleDefaultsInSwitch);\n                        }\n                        defaultFound = true;\n                    }\n                    cases.push(clause);\n                }\n\n                state.inSwitch = oldInSwitch;\n\n                expect('}');\n\n                return delegate.createSwitchStatement(discriminant, cases);\n            }\n\n            // 12.13 The throw statement\n\n            function parseThrowStatement() {\n                var argument;\n\n                expectKeyword('throw');\n\n                if (peekLineTerminator()) {\n                    throwError({}, Messages.NewlineAfterThrow);\n                }\n\n                argument = parseExpression();\n\n                consumeSemicolon();\n\n                return delegate.createThrowStatement(argument);\n            }\n\n            // 12.14 The try statement\n\n            function parseCatchClause() {\n                var param, body;\n\n                skipComment();\n                delegate.markStart();\n                expectKeyword('catch');\n\n                expect('(');\n                if (match(')')) {\n                    throwUnexpected(lookahead);\n                }\n\n                param = parseVariableIdentifier();\n                // 12.14.1\n                if (strict && isRestrictedWord(param.name)) {\n                    throwErrorTolerant({}, Messages.StrictCatchVariable);\n                }\n\n                expect(')');\n                body = parseBlock();\n                return delegate.markEnd(delegate.createCatchClause(param, body));\n            }\n\n            function parseTryStatement() {\n                var block, handlers = [], finalizer = null;\n\n                expectKeyword('try');\n\n                block = parseBlock();\n\n                if (matchKeyword('catch')) {\n                    handlers.push(parseCatchClause());\n                }\n\n                if (matchKeyword('finally')) {\n                    lex();\n                    finalizer = parseBlock();\n                }\n\n                if (handlers.length === 0 && !finalizer) {\n                    throwError({}, Messages.NoCatchOrFinally);\n                }\n\n                return delegate.createTryStatement(block, [], handlers, finalizer);\n            }\n\n            // 12.15 The debugger statement\n\n            function parseDebuggerStatement() {\n                expectKeyword('debugger');\n\n                consumeSemicolon();\n\n                return delegate.createDebuggerStatement();\n            }\n\n            // 12 Statements\n\n            function parseStatement() {\n                var type = lookahead.type,\n                    expr,\n                    labeledBody,\n                    key;\n\n                if (type === Token.EOF) {\n                    throwUnexpected(lookahead);\n                }\n\n                skipComment();\n                delegate.markStart();\n\n                if (type === Token.Punctuator) {\n                    switch (lookahead.value) {\n                        case ';':\n                            return delegate.markEnd(parseEmptyStatement());\n                        case '{':\n                            return delegate.markEnd(parseBlock());\n                        case '(':\n                            return delegate.markEnd(parseExpressionStatement());\n                        default:\n                            break;\n                    }\n                }\n\n                if (type === Token.Keyword) {\n                    switch (lookahead.value) {\n                        case 'break':\n                            return delegate.markEnd(parseBreakStatement());\n                        case 'continue':\n                            return delegate.markEnd(parseContinueStatement());\n                        case 'debugger':\n                            return delegate.markEnd(parseDebuggerStatement());\n                        case 'do':\n                            return delegate.markEnd(parseDoWhileStatement());\n                        case 'for':\n                            return delegate.markEnd(parseForStatement());\n                        case 'function':\n                            return delegate.markEnd(parseFunctionDeclaration());\n                        case 'if':\n                            return delegate.markEnd(parseIfStatement());\n                        case 'return':\n                            return delegate.markEnd(parseReturnStatement());\n                        case 'switch':\n                            return delegate.markEnd(parseSwitchStatement());\n                        case 'throw':\n                            return delegate.markEnd(parseThrowStatement());\n                        case 'try':\n                            return delegate.markEnd(parseTryStatement());\n                        case 'var':\n                            return delegate.markEnd(parseVariableStatement());\n                        case 'while':\n                            return delegate.markEnd(parseWhileStatement());\n                        case 'with':\n                            return delegate.markEnd(parseWithStatement());\n                        default:\n                            break;\n                    }\n                }\n\n                expr = parseExpression();\n\n                // 12.12 Labelled Statements\n                if ((expr.type === Syntax.Identifier) && match(':')) {\n                    lex();\n\n                    key = '$' + expr.name;\n                    if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n                        throwError({}, Messages.Redeclaration, 'Label', expr.name);\n                    }\n\n                    state.labelSet[key] = true;\n                    labeledBody = parseStatement();\n                    delete state.labelSet[key];\n                    return delegate.markEnd(delegate.createLabeledStatement(expr, labeledBody));\n                }\n\n                consumeSemicolon();\n\n                return delegate.markEnd(delegate.createExpressionStatement(expr));\n            }\n\n            // 13 Function Definition\n\n            function parseFunctionSourceElements() {\n                var sourceElement, sourceElements = [], token, directive, firstRestricted,\n                    oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody;\n\n                skipComment();\n                delegate.markStart();\n                expect('{');\n\n                while (index < length) {\n                    if (lookahead.type !== Token.StringLiteral) {\n                        break;\n                    }\n                    token = lookahead;\n\n                    sourceElement = parseSourceElement();\n                    sourceElements.push(sourceElement);\n                    if (sourceElement.expression.type !== Syntax.Literal) {\n                        // this is not directive\n                        break;\n                    }\n                    directive = source.slice(token.range[0] + 1, token.range[1] - 1);\n                    if (directive === 'use strict') {\n                        strict = true;\n                        if (firstRestricted) {\n                            throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);\n                        }\n                    } else {\n                        if (!firstRestricted && token.octal) {\n                            firstRestricted = token;\n                        }\n                    }\n                }\n\n                oldLabelSet = state.labelSet;\n                oldInIteration = state.inIteration;\n                oldInSwitch = state.inSwitch;\n                oldInFunctionBody = state.inFunctionBody;\n\n                state.labelSet = {};\n                state.inIteration = false;\n                state.inSwitch = false;\n                state.inFunctionBody = true;\n\n                while (index < length) {\n                    if (match('}')) {\n                        break;\n                    }\n                    sourceElement = parseSourceElement();\n                    if (typeof sourceElement === 'undefined') {\n                        break;\n                    }\n                    sourceElements.push(sourceElement);\n                }\n\n                expect('}');\n\n                state.labelSet = oldLabelSet;\n                state.inIteration = oldInIteration;\n                state.inSwitch = oldInSwitch;\n                state.inFunctionBody = oldInFunctionBody;\n\n                return delegate.markEnd(delegate.createBlockStatement(sourceElements));\n            }\n\n            function parseParams(firstRestricted) {\n                var param, params = [], token, stricted, paramSet, key, message;\n                expect('(');\n\n                if (!match(')')) {\n                    paramSet = {};\n                    while (index < length) {\n                        token = lookahead;\n                        param = parseVariableIdentifier();\n                        key = '$' + token.value;\n                        if (strict) {\n                            if (isRestrictedWord(token.value)) {\n                                stricted = token;\n                                message = Messages.StrictParamName;\n                            }\n                            if (Object.prototype.hasOwnProperty.call(paramSet, key)) {\n                                stricted = token;\n                                message = Messages.StrictParamDupe;\n                            }\n                        } else if (!firstRestricted) {\n                            if (isRestrictedWord(token.value)) {\n                                firstRestricted = token;\n                                message = Messages.StrictParamName;\n                            } else if (isStrictModeReservedWord(token.value)) {\n                                firstRestricted = token;\n                                message = Messages.StrictReservedWord;\n                            } else if (Object.prototype.hasOwnProperty.call(paramSet, key)) {\n                                firstRestricted = token;\n                                message = Messages.StrictParamDupe;\n                            }\n                        }\n                        params.push(param);\n                        paramSet[key] = true;\n                        if (match(')')) {\n                            break;\n                        }\n                        expect(',');\n                    }\n                }\n\n                expect(')');\n\n                return {\n                    params: params,\n                    stricted: stricted,\n                    firstRestricted: firstRestricted,\n                    message: message\n                };\n            }\n\n            function parseFunctionDeclaration() {\n                var id, params = [], body, token, stricted, tmp, firstRestricted, message, previousStrict;\n\n                skipComment();\n                delegate.markStart();\n\n                expectKeyword('function');\n                token = lookahead;\n                id = parseVariableIdentifier();\n                if (strict) {\n                    if (isRestrictedWord(token.value)) {\n                        throwErrorTolerant(token, Messages.StrictFunctionName);\n                    }\n                } else {\n                    if (isRestrictedWord(token.value)) {\n                        firstRestricted = token;\n                        message = Messages.StrictFunctionName;\n                    } else if (isStrictModeReservedWord(token.value)) {\n                        firstRestricted = token;\n                        message = Messages.StrictReservedWord;\n                    }\n                }\n\n                tmp = parseParams(firstRestricted);\n                params = tmp.params;\n                stricted = tmp.stricted;\n                firstRestricted = tmp.firstRestricted;\n                if (tmp.message) {\n                    message = tmp.message;\n                }\n\n                previousStrict = strict;\n                body = parseFunctionSourceElements();\n                if (strict && firstRestricted) {\n                    throwError(firstRestricted, message);\n                }\n                if (strict && stricted) {\n                    throwErrorTolerant(stricted, message);\n                }\n                strict = previousStrict;\n\n                return delegate.markEnd(delegate.createFunctionDeclaration(id, params, [], body));\n            }\n\n            function parseFunctionExpression() {\n                var token, id = null, stricted, firstRestricted, message, tmp, params = [], body, previousStrict;\n\n                delegate.markStart();\n                expectKeyword('function');\n\n                if (!match('(')) {\n                    token = lookahead;\n                    id = parseVariableIdentifier();\n                    if (strict) {\n                        if (isRestrictedWord(token.value)) {\n                            throwErrorTolerant(token, Messages.StrictFunctionName);\n                        }\n                    } else {\n                        if (isRestrictedWord(token.value)) {\n                            firstRestricted = token;\n                            message = Messages.StrictFunctionName;\n                        } else if (isStrictModeReservedWord(token.value)) {\n                            firstRestricted = token;\n                            message = Messages.StrictReservedWord;\n                        }\n                    }\n                }\n\n                tmp = parseParams(firstRestricted);\n                params = tmp.params;\n                stricted = tmp.stricted;\n                firstRestricted = tmp.firstRestricted;\n                if (tmp.message) {\n                    message = tmp.message;\n                }\n\n                previousStrict = strict;\n                body = parseFunctionSourceElements();\n                if (strict && firstRestricted) {\n                    throwError(firstRestricted, message);\n                }\n                if (strict && stricted) {\n                    throwErrorTolerant(stricted, message);\n                }\n                strict = previousStrict;\n\n                return delegate.markEnd(delegate.createFunctionExpression(id, params, [], body));\n            }\n\n            // 14 Program\n\n            function parseSourceElement() {\n                if (lookahead.type === Token.Keyword) {\n                    switch (lookahead.value) {\n                        case 'const':\n                        case 'let':\n                            return parseConstLetDeclaration(lookahead.value);\n                        case 'function':\n                            return parseFunctionDeclaration();\n                        default:\n                            return parseStatement();\n                    }\n                }\n\n                if (lookahead.type !== Token.EOF) {\n                    return parseStatement();\n                }\n            }\n\n            function parseSourceElements() {\n                var sourceElement, sourceElements = [], token, directive, firstRestricted;\n\n                while (index < length) {\n                    token = lookahead;\n                    if (token.type !== Token.StringLiteral) {\n                        break;\n                    }\n\n                    sourceElement = parseSourceElement();\n                    sourceElements.push(sourceElement);\n                    if (sourceElement.expression.type !== Syntax.Literal) {\n                        // this is not directive\n                        break;\n                    }\n                    directive = source.slice(token.range[0] + 1, token.range[1] - 1);\n                    if (directive === 'use strict') {\n                        strict = true;\n                        if (firstRestricted) {\n                            throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);\n                        }\n                    } else {\n                        if (!firstRestricted && token.octal) {\n                            firstRestricted = token;\n                        }\n                    }\n                }\n\n                while (index < length) {\n                    sourceElement = parseSourceElement();\n                    if (typeof sourceElement === 'undefined') {\n                        break;\n                    }\n                    sourceElements.push(sourceElement);\n                }\n                return sourceElements;\n            }\n\n            function parseProgram() {\n                var body;\n\n                skipComment();\n                delegate.markStart();\n                strict = false;\n                peek();\n                body = parseSourceElements();\n                return delegate.markEnd(delegate.createProgram(body));\n            }\n\n            function collectToken() {\n                var start, loc, token, range, value;\n\n                skipComment();\n                start = index;\n                loc = {\n                    start: {\n                        line: lineNumber,\n                        column: index - lineStart\n                    }\n                };\n\n                token = extra.advance();\n                loc.end = {\n                    line: lineNumber,\n                    column: index - lineStart\n                };\n\n                if (token.type !== Token.EOF) {\n                    range = [token.range[0], token.range[1]];\n                    value = source.slice(token.range[0], token.range[1]);\n                    extra.tokens.push({\n                        type: TokenName[token.type],\n                        value: value,\n                        range: range,\n                        loc: loc\n                    });\n                }\n\n                return token;\n            }\n\n            function collectRegex() {\n                var pos, loc, regex, token;\n\n                skipComment();\n\n                pos = index;\n                loc = {\n                    start: {\n                        line: lineNumber,\n                        column: index - lineStart\n                    }\n                };\n\n                regex = extra.scanRegExp();\n                loc.end = {\n                    line: lineNumber,\n                    column: index - lineStart\n                };\n\n                if (!extra.tokenize) {\n                    // Pop the previous token, which is likely '/' or '/='\n                    if (extra.tokens.length > 0) {\n                        token = extra.tokens[extra.tokens.length - 1];\n                        if (token.range[0] === pos && token.type === 'Punctuator') {\n                            if (token.value === '/' || token.value === '/=') {\n                                extra.tokens.pop();\n                            }\n                        }\n                    }\n\n                    extra.tokens.push({\n                        type: 'RegularExpression',\n                        value: regex.literal,\n                        range: [pos, index],\n                        loc: loc\n                    });\n                }\n\n                return regex;\n            }\n\n            function filterTokenLocation() {\n                var i, entry, token, tokens = [];\n\n                for (i = 0; i < extra.tokens.length; ++i) {\n                    entry = extra.tokens[i];\n                    token = {\n                        type: entry.type,\n                        value: entry.value\n                    };\n                    if (extra.range) {\n                        token.range = entry.range;\n                    }\n                    if (extra.loc) {\n                        token.loc = entry.loc;\n                    }\n                    tokens.push(token);\n                }\n\n                extra.tokens = tokens;\n            }\n\n            function createLocationMarker() {\n\n                if (!extra.loc && !extra.range) {\n                    return null;\n                }\n\n                skipComment();\n\n                return {\n                    marker: [index, lineNumber, index - lineStart, 0, 0, 0],\n\n                    end: function () {\n                        this.marker[3] = index;\n                        this.marker[4] = lineNumber;\n                        this.marker[5] = index - lineStart;\n                    },\n\n                    apply: function (node) {\n                        if (extra.range) {\n                            node.range = [this.marker[0], this.marker[3]];\n                        }\n                        if (extra.loc) {\n                            node.loc = {\n                                start: {\n                                    line: this.marker[1],\n                                    column: this.marker[2]\n                                },\n                                end: {\n                                    line: this.marker[4],\n                                    column: this.marker[5]\n                                }\n                            };\n                        }\n                        node = delegate.postProcess(node);\n                    }\n                };\n            }\n\n            function patch() {\n                if (typeof extra.tokens !== 'undefined') {\n                    extra.advance = advance;\n                    extra.scanRegExp = scanRegExp;\n\n                    advance = collectToken;\n                    scanRegExp = collectRegex;\n                }\n            }\n\n            function unpatch() {\n                if (typeof extra.scanRegExp === 'function') {\n                    advance = extra.advance;\n                    scanRegExp = extra.scanRegExp;\n                }\n            }\n\n            function tokenize(code, options) {\n                var toString,\n                    token,\n                    tokens;\n\n                toString = String;\n                if (typeof code !== 'string' && !(code instanceof String)) {\n                    code = toString(code);\n                }\n\n                delegate = SyntaxTreeDelegate;\n                source = code;\n                index = 0;\n                lineNumber = (source.length > 0) ? 1 : 0;\n                lineStart = 0;\n                length = source.length;\n                lookahead = null;\n                state = {\n                    allowIn: true,\n                    labelSet: {},\n                    inFunctionBody: false,\n                    inIteration: false,\n                    inSwitch: false,\n                    lastCommentStart: -1,\n                };\n\n                extra = {};\n\n                // Options matching.\n                options = options || {};\n\n                // Of course we collect tokens here.\n                options.tokens = true;\n                extra.tokens = [];\n                extra.tokenize = true;\n                // The following two fields are necessary to compute the Regex tokens.\n                extra.openParenToken = -1;\n                extra.openCurlyToken = -1;\n\n                extra.range = (typeof options.range === 'boolean') && options.range;\n                extra.loc = (typeof options.loc === 'boolean') && options.loc;\n\n                if (typeof options.comment === 'boolean' && options.comment) {\n                    extra.comments = [];\n                }\n                if (typeof options.tolerant === 'boolean' && options.tolerant) {\n                    extra.errors = [];\n                }\n\n                if (length > 0) {\n                    if (typeof source[0] === 'undefined') {\n                        // Try first to convert to a string. This is good as fast path\n                        // for old IE which understands string indexing for string\n                        // literals only and not for string object.\n                        if (code instanceof String) {\n                            source = code.valueOf();\n                        }\n                    }\n                }\n\n                patch();\n\n                try {\n                    peek();\n                    if (lookahead.type === Token.EOF) {\n                        return extra.tokens;\n                    }\n\n                    token = lex();\n                    while (lookahead.type !== Token.EOF) {\n                        try {\n                            token = lex();\n                        } catch (lexError) {\n                            token = lookahead;\n                            if (extra.errors) {\n                                extra.errors.push(lexError);\n                                // We have to break on the first error\n                                // to avoid infinite loops.\n                                break;\n                            } else {\n                                throw lexError;\n                            }\n                        }\n                    }\n\n                    filterTokenLocation();\n                    tokens = extra.tokens;\n                    if (typeof extra.comments !== 'undefined') {\n                        tokens.comments = extra.comments;\n                    }\n                    if (typeof extra.errors !== 'undefined') {\n                        tokens.errors = extra.errors;\n                    }\n                } catch (e) {\n                    throw e;\n                } finally {\n                    unpatch();\n                    extra = {};\n                }\n                return tokens;\n            }\n\n            function parse(code, options) {\n                var program, toString;\n\n                toString = String;\n                if (typeof code !== 'string' && !(code instanceof String)) {\n                    code = toString(code);\n                }\n\n                delegate = SyntaxTreeDelegate;\n                source = code;\n                index = 0;\n                lineNumber = (source.length > 0) ? 1 : 0;\n                lineStart = 0;\n                length = source.length;\n                lookahead = null;\n                state = {\n                    allowIn: true,\n                    labelSet: {},\n                    inFunctionBody: false,\n                    inIteration: false,\n                    inSwitch: false,\n                    lastCommentStart: -1,\n                    markerStack: []\n                };\n\n                extra = {};\n                if (typeof options !== 'undefined') {\n                    extra.range = (typeof options.range === 'boolean') && options.range;\n                    extra.loc = (typeof options.loc === 'boolean') && options.loc;\n\n                    if (extra.loc && options.source !== null && options.source !== undefined) {\n                        extra.source = toString(options.source);\n                    }\n\n                    if (typeof options.tokens === 'boolean' && options.tokens) {\n                        extra.tokens = [];\n                    }\n                    if (typeof options.comment === 'boolean' && options.comment) {\n                        extra.comments = [];\n                    }\n                    if (typeof options.tolerant === 'boolean' && options.tolerant) {\n                        extra.errors = [];\n                    }\n                }\n\n                if (length > 0) {\n                    if (typeof source[0] === 'undefined') {\n                        // Try first to convert to a string. This is good as fast path\n                        // for old IE which understands string indexing for string\n                        // literals only and not for string object.\n                        if (code instanceof String) {\n                            source = code.valueOf();\n                        }\n                    }\n                }\n\n                patch();\n                try {\n                    program = parseProgram();\n                    if (typeof extra.comments !== 'undefined') {\n                        program.comments = extra.comments;\n                    }\n                    if (typeof extra.tokens !== 'undefined') {\n                        filterTokenLocation();\n                        program.tokens = extra.tokens;\n                    }\n                    if (typeof extra.errors !== 'undefined') {\n                        program.errors = extra.errors;\n                    }\n                } catch (e) {\n                    throw e;\n                } finally {\n                    unpatch();\n                    extra = {};\n                }\n\n                return program;\n            }\n\n            // Sync with package.json and component.json.\n            exports.version = '1.1.0-dev';\n\n            exports.tokenize = tokenize;\n\n            exports.parse = parse;\n\n            // Deep copy.\n            exports.Syntax = (function () {\n                var name, types = {};\n\n                if (typeof Object.create === 'function') {\n                    types = Object.create(null);\n                }\n\n                for (name in Syntax) {\n                    if (Syntax.hasOwnProperty(name)) {\n                        types[name] = Syntax[name];\n                    }\n                }\n\n                if (typeof Object.freeze === 'function') {\n                    Object.freeze(types);\n                }\n\n                return types;\n            }());\n\n        }));\n        /* vim: set sw=4 ts=4 et tw=80 : */\n    };\n\n    require('MobileServiceClient');\n})(this || exports);\n// ----------------------------------------------------------------------------\n//! Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n\n// WARNING: This code was generated by a tool from the library definition\n//     MobileServices.library\n// Do not modify this file directly.  Any changes made to this file will be\n// lost the next time it is regenerated.\n\n\n(function (global) {\n    /// <field name=\"$__modules__\">\n    /// Map module names to either their cached exports or a function which\n    /// will define the module's exports when invoked.\n    /// </field>\n    var $__modules__ = {};\n    var $__fileVersion__ = \"1.0.20702.0\";\n\n    function require(name) {\n        /// <summary>\n        /// Require a module's exports.\n        /// </summary>\n        /// <param name=\"name\" type=\"String\">\n        /// The name of the module.  Note that we don't support full CommonJS\n        /// Module specification names here - we only allow the name of the\n        /// module's file without any extension.\n        /// </param>\n        /// <returns type=\"Object\">\n        /// The exports provided by the module.\n        /// </returns>\n\n        if (name && name.length > 2 && name[0] == '.' && name[1] == '/') {\n            name = name.slice(2);\n        }\n\n        var existing = $__modules__[name];\n        if (typeof existing == 'function') {\n            var exports = {};\n            $__modules__[name] = exports;\n            existing(exports);\n            return exports;\n        } else if (typeof existing == 'object') {\n            return existing;\n        } else {\n            throw 'Unknown module ' + name;\n        }\n    }\n\n    $__modules__.Resources = {};\n\n    $__modules__.Resources['en-US'] =\n        {\n            \"Validate_NotNullError\": \"{0} cannot be null.\",\n            \"Validate_NotNullOrEmptyError\": \"{0} cannot be null or empty.\",\n            \"Validate_InvalidId\": \"{0} is not valid.\",\n            \"Validate_TypeCheckError\": \"{0} is expected to be a value of type {1}, not {2}.\",\n            \"Validate_LengthUnexpected\": \"{0} is expected to have length {1}, not {2}.\",\n            \"Validate_InvalidUserParameter\": \"{0} contains an invalid user-defined query string parameter: {1}. User-defined query string parameters must not begin with a '$'.\",\n            \"Extensions_DefaultErrorMessage\": \"Unexpected failure.\",\n            \"Extensions_ConnectionFailureMessage\": \"Unexpected connection failure.\",\n            \"MobileServiceTable_ReadMismatchedQueryTables\": \"Cannot get the results of a query for table '{1}' via table '{0}'.\",\n            \"MobileServiceTable_InsertIdAlreadySet\": \"Cannot insert if the {0} member is already set.\",\n            \"MobileServiceLogin_AuthenticationProviderNotSupported\": \"Unsupported authentication provider name. Please specify one of {0}.\",\n            \"MobileServiceLogin_LoginErrorResponse\": \"Cannot start a login operation because login is already in progress.\",\n            \"MobileServiceLogin_InvalidResponseFormat\": \"Invalid format of the authentication response.\",\n            \"MobileServiceLogin_InvalidProvider\": \"The first parameter must be the name of the autentication provider or a Microsoft Account authentication token.\",\n            \"MobileServiceTable_NotSingleObject\": \"Could not get object from response {0}.\",\n            \"Push_ConflictWithReservedName\": \"Template name conflicts with reserved name '{0}'.\",\n            \"Push_InvalidTemplateName\": \"Template name can't contain ';' or ':'.\",\n            \"Push_NotSupportedXMLFormatAsBodyTemplateWin8\": \"The bodyTemplate is not in accepted XML format. The first node of the bodyTemplate should be Badge\\/Tile\\/Toast, except for the wns\\/raw template, which need to be a valid XML.\",\n            \"Push_BodyTemplateMustBeXml\": \"Valid XML is required for any template without a raw header.\",\n            \"Push_TagNoCommas\": \"Tags must not contain ','.\"\n        };\n\n    $__modules__.MobileServiceClient = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"Generated\\MobileServices.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Validate = require('Validate');\n        var Platform = require('Platform');\n        var MobileServiceTable = require('MobileServiceTable').MobileServiceTable;\n        var MobileServiceLogin = require('MobileServiceLogin').MobileServiceLogin;\n        var Push;\n        try {\n            Push = require('Push').Push;\n        } catch (e) { }\n\n        function MobileServiceClient(applicationUrl, applicationKey) {\n            /// <summary>\n            /// Initializes a new instance of the MobileServiceClient class.\n            /// </summary>\n            /// <param name=\"applicationUrl\" type=\"string\" mayBeNull=\"false\">\n            /// The URL to the Mobile Services application.\n            /// </param>\n            /// <param name=\"applicationKey\" type=\"string\" mayBeNull=\"false\">\n            /// The Mobile Service application's key.\n            /// </param>\n\n            Validate.isString(applicationUrl, 'applicationUrl');\n            Validate.notNullOrEmpty(applicationUrl, 'applicationUrl');\n            Validate.isString(applicationKey, 'applicationKey');\n\n            this.applicationUrl = applicationUrl;\n            this.applicationKey = applicationKey || null;\n\n            var sdkInfo = Platform.getSdkInfo();\n            var osInfo = Platform.getOperatingSystemInfo();\n            var sdkVersion = sdkInfo.fileVersion.split(\".\").slice(0, 2).join(\".\");\n            this.version = \"ZUMO/\" + sdkVersion + \" (lang=\" + sdkInfo.language + \"; \" +\n                                                    \"os=\" + osInfo.name + \"; \" +\n                                                    \"os_version=\" + osInfo.version + \"; \" +\n                                                    \"arch=\" + osInfo.architecture + \"; \" +\n                                                    \"version=\" + sdkInfo.fileVersion + \")\";\n            this.currentUser = null;\n            this._serviceFilter = null;\n            this._login = new MobileServiceLogin(this);\n            this.getTable = function (tableName) {\n                /// <summary>\n                /// Gets a reference to a table and its data operations.\n                /// </summary>\n                /// <param name=\"tableName\">The name of the table.</param>\n                /// <returns>A reference to the table.</returns>\n\n                Validate.isString(tableName, 'tableName');\n                Validate.notNullOrEmpty(tableName, 'tableName');\n                return new MobileServiceTable(tableName, this);\n            };\n\n            if (Push) {\n                this.push = new Push(this);\n            }\n        }\n\n        // Export the MobileServiceClient class\n        exports.MobileServiceClient = MobileServiceClient;\n\n        // Define the MobileServiceClient in a namespace (note: this has global effects\n        // unless the platform we're using chooses to ignore it because exports are\n        // good enough).\n        Platform.addToMobileServicesClientNamespace({ MobileServiceClient: MobileServiceClient });\n\n        MobileServiceClient.prototype.withFilter = function (serviceFilter) {\n            /// <summary>\n            /// Create a new MobileServiceClient with a filter used to process all\n            /// of its HTTP requests and responses.\n            /// </summary>\n            /// <param name=\"serviceFilter\" type=\"Function\">\n            /// The filter to use on the service.  The signature of a serviceFilter is\n            ///    function(request, next, callback)\n            ///  where\n            ///    next := function(request, callback)\n            ///    callback := function(error, response)\n            /// </param>\n            /// <returns type=\"MobileServiceClient\">\n            /// A new MobileServiceClient whose HTTP requests and responses will be\n            /// filtered as desired.\n            /// </returns>\n            /// <remarks>\n            /// The Mobile Services HTTP pipeline is a chain of filters composed\n            /// together by giving each the next operation which it can invoke\n            /// (zero, one, or many times as necessary).  The default continuation\n            /// of a brand new MobileServiceClient will just get the HTTP response\n            /// for the corresponding request.  Here's an example of a Handle\n            /// implementation that will automatically retry a request that times\n            /// out.\n            ///     function(req, next, callback) {\n            ///         next(req, function(err, rsp) {\n            ///           if (rsp.statusCode >= 400) {\n            ///               next(req, callback);\n            ///           } else {\n            ///               callback(err, rsp);\n            ///           }\n            ///         });\n            ///     }\n            /// Note that because these operations are asynchronous, this sample\n            /// filter could end up actually making two HTTP requests before\n            /// returning a response to the developer without the developer writing\n            /// any special code to handle the situation.\n            /// -\n            /// Filters are composed just like standard function composition.  If\n            /// we had new MobileServiceClient().withFilter(F1).withFilter(F2)\n            /// .withFilter(F3), it's conceptually equivalent to saying:\n            ///     var response = F3(F2(F1(next(request)));\n            /// </remarks>\n\n            Validate.notNull(serviceFilter, 'serviceFilter');\n\n            // Clone the current instance\n            var client = new MobileServiceClient(this.applicationUrl, this.applicationKey);\n            client.currentUser = this.currentUser;\n\n            // Chain the service filter with any existing filters\n            var existingFilter = this._serviceFilter;\n            client._serviceFilter = _.isNull(existingFilter) ?\n                serviceFilter :\n                function (req, next, callback) {\n                    // compose existingFilter with next so it can be used as the next\n                    // of the new serviceFilter\n                    var composed = function (req, callback) {\n                        existingFilter(req, next, callback);\n                    };\n                    serviceFilter(req, composed, callback);\n                };\n\n            return client;\n        };\n\n        MobileServiceClient.prototype._request = function (method, uriFragment, content, ignoreFilters, headers, callback) {\n            /// <summary>\n            /// Perform a web request and include the standard Mobile Services headers.\n            /// </summary>\n            /// <param name=\"method\" type=\"string\">\n            /// The HTTP method used to request the resource.\n            /// </param>\n            /// <param name=\"uriFragment\" type=\"String\">\n            /// URI of the resource to request (relative to the Mobile Services\n            /// runtime).\n            /// </param>\n            /// <param name=\"content\" type=\"Object\">\n            /// Optional content to send to the resource.\n            /// </param>\n            /// <param name=\"ignoreFilters\" type=\"Boolean\" mayBeNull=\"true\">\n            /// Optional parameter to indicate if the client filters should be ignored\n            /// and the request should be sent directly. Is false by default.\n            /// </param>\n            /// <param name=\"headers\" type=\"Object\">\n            /// Optional request headers\n            /// </param>\n            /// <param name=\"callback\" type=\"function(error, response)\">\n            /// Handler that will be called on the response.\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback) && (typeof headers === 'function')) {\n                callback = headers;\n                headers = null;\n            }\n\n            if (_.isNull(callback) && (typeof ignoreFilters === 'function')) {\n                callback = ignoreFilters;\n                ignoreFilters = false;\n            }\n\n            if (_.isNull(callback) && (typeof content === 'function')) {\n                callback = content;\n                content = null;\n            }\n\n            Validate.isString(method, 'method');\n            Validate.notNullOrEmpty(method, 'method');\n            Validate.isString(uriFragment, 'uriFragment');\n            Validate.notNull(uriFragment, 'uriFragment');\n            Validate.notNull(callback, 'callback');\n\n            // Create the absolute URI\n            var options = { type: method.toUpperCase() };\n            options.url = _.url.combinePathSegments(this.applicationUrl, uriFragment);\n\n            // Set MobileServices authentication, application, User-Agent and telemetry headers\n            options.headers = {};\n            if (!_.isNull(headers)) {\n                _.extend(options.headers, headers);\n            }\n            options.headers[\"X-ZUMO-INSTALLATION-ID\"] = MobileServiceClient._applicationInstallationId;\n            if (!_.isNullOrEmpty(this.applicationKey)) {\n                options.headers[\"X-ZUMO-APPLICATION\"] = this.applicationKey;\n            }\n            if (this.currentUser && !_.isNullOrEmpty(this.currentUser.mobileServiceAuthenticationToken)) {\n                options.headers[\"X-ZUMO-AUTH\"] = this.currentUser.mobileServiceAuthenticationToken;\n            }\n            if (!_.isNull(MobileServiceClient._userAgent)) {\n                options.headers[\"User-Agent\"] = MobileServiceClient._userAgent;\n            }\n            if (!_.isNullOrEmpty[\"X-ZUMO-VERSION\"]) {\n                options.headers[\"X-ZUMO-VERSION\"] = this.version;\n            }\n\n            // Add any content as JSON\n            if (!_.isNull(content)) {\n                if (!_.isString(content)) {\n                    options.data = _.toJson(content);\n                } else {\n                    options.data = content;\n                }\n\n                if (!_.hasProperty(options.headers, ['Content-Type', 'content-type', 'CONTENT-TYPE', 'Content-type'])) {\n                    options.headers['Content-Type'] = 'application/json';\n                }\n            } else {\n                // options.data must be set to null if there is no content or the xhr object\n                // will set the content-type to \"application/text\" for non-GET requests.\n                options.data = null;\n            }\n\n            // Treat any >=400 status codes as errors.  Also treat the status code 0 as\n            // an error (which indicates a connection failure).\n            var handler = function (error, response) {\n                if (!_.isNull(error)) {\n                    error = _.createError(error);\n                } else if (!_.isNull(response) && (response.status >= 400 || response.status === 0)) {\n                    error = _.createError(null, response);\n                    response = null;\n                }\n                callback(error, response);\n            };\n\n            // Make the web request\n            if (!_.isNull(this._serviceFilter) && !ignoreFilters) {\n                this._serviceFilter(options, Platform.webRequest, handler);\n            } else {\n                Platform.webRequest(options, handler);\n            }\n        };\n\n        MobileServiceClient.prototype.login = Platform.async(\n            function (provider, token, useSingleSignOn, callback) {\n                /// <summary>\n                /// Log a user into a Mobile Services application given a provider name and optional \n                /// authentication token.\n                /// </summary>\n                /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">\n                /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', \n                /// 'windowsazureactivedirectory' (can also use 'aad')\n                /// or 'microsoftaccount'. If no provider is specified, the 'token' parameter\n                /// is considered a Microsoft Account authentication token. If a provider is specified, \n                /// the 'token' parameter is considered a provider-specific authentication token.\n                /// </param>\n                /// <param name=\"token\" type=\"Object\" mayBeNull=\"true\">\n                /// Optional, provider specific object with existing OAuth token to log in with.\n                /// </param>\n                /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n                /// Only applies to Windows 8 clients.  Will be ignored on other platforms.\n                /// Indicates if single sign-on should be used. Single sign-on requires that the \n                /// application's Package SID be registered with the Microsoft Azure Mobile Service, \n                /// but it provides a better experience as HTTP cookies are supported so that users \n                /// do not have to login in everytime the application is launched.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n                /// Optional callback accepting (error, user) parameters.\n                /// </param>\n                this._login.login(provider, token, useSingleSignOn, callback);\n            });\n\n        MobileServiceClient.prototype.logout = function () {\n            /// <summary>\n            /// Log a user out of a Mobile Services application.\n            /// </summary>\n            this.currentUser = null;\n        };\n\n        MobileServiceClient.prototype.invokeApi = Platform.async(\n            function (apiName, options, callback) {\n                /// <summary>\n                /// Invokes the specified custom api and returns a response object.\n                /// </summary>\n                /// <param name=\"apiName\">\n                /// The custom api to invoke.\n                /// </param>\n                /// <param name=\"options\" mayBeNull=\"true\">\n                /// Contains additional parameter information, valid values are:\n                /// body: The body of the HTTP request.\n                /// method: The HTTP method to use in the request, with the default being POST,\n                /// parameters: Any additional query string parameters, \n                /// headers: HTTP request headers, specified as an object.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n                /// Optional callback accepting (error, results) parameters.\n                /// </param>\n\n                Validate.isString(apiName, 'apiName');\n\n                // Account for absent optional arguments\n                if (_.isNull(callback)) {\n                    if (typeof options === 'function') {\n                        callback = options;\n                        options = null;\n                    }\n                }\n                Validate.notNull(callback, 'callback');\n\n                var parameters, method, body, headers;\n                if (!_.isNull(options)) {\n                    parameters = options.parameters;\n                    if (!_.isNull(parameters)) {\n                        Validate.isValidParametersObject(options.parameters);\n                    }\n\n                    method = options.method;\n                    body = options.body;\n                    headers = options.headers;\n                }\n                if (_.isNull(method)) {\n                    method = \"POST\";\n                }\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(\"api\", apiName);\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this._request(\n                    method,\n                    urlFragment,\n                    body,\n                    null,\n                    headers,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            callback(error, null);\n                        } else {\n                            if (typeof response.getResponseHeader === 'undefined') { // (when using IframeTransport, IE9)\n                                try {\n                                    response.result = _.fromJson(response.responseText);\n                                } catch (e) {\n                                    // Do nothing, since we don't know the content-type, failing may be ok\n                                }\n                            } else if (response.getResponseHeader('Content-Type').toLowerCase().indexOf('json') !== -1) {\n                                response.result = _.fromJson(response.responseText);\n                            }\n\n                            callback(null, response);\n                        }\n                    });\n\n            });\n\n        function getApplicationInstallationId() {\n            /// <summary>\n            /// Gets or creates the static application installation ID.\n            /// </summary>\n            /// <returns type=\"string\">\n            /// The application installation ID.\n            /// </returns>\n\n            // Get or create a new installation ID that can be passed along on each\n            // request to provide telemetry data\n            var applicationInstallationId = null;\n\n            // Check if the config settings exist\n            var path = \"MobileServices.Installation.config\";\n            var contents = Platform.readSetting(path);\n            if (!_.isNull(contents)) {\n                // Parse the contents of the file as JSON and pull out the\n                // application's installation ID.\n                try {\n                    var config = _.fromJson(contents);\n                    applicationInstallationId = config.applicationInstallationId;\n                } catch (ex) {\n                    // Ignore any failures (like invalid JSON, etc.) which will allow\n                    // us to fall through to and regenerate a valid config below\n                }\n            }\n\n            // If no installation ID was found, generate a new one and save the config\n            // settings.  This is pulled out as a separate function because we'll do it\n            // even if we successfully read an existing config but there's no\n            // installation ID.\n            if (_.isNullOrEmpty(applicationInstallationId)) {\n                applicationInstallationId = _.createUniqueInstallationId();\n\n                // TODO: How many other settings should we write out as well?\n                var configText = _.toJson({ applicationInstallationId: applicationInstallationId });\n                Platform.writeSetting(path, configText);\n            }\n\n            return applicationInstallationId;\n        }\n\n\n        /// <summary>\n        /// Get or set the static _applicationInstallationId by checking the settings\n        /// and create the value if necessary.\n        /// </summary>\n        MobileServiceClient._applicationInstallationId = getApplicationInstallationId();\n\n        /// <summary>\n        /// Get or set the static _userAgent by calling into the Platform.\n        /// </summary>\n        MobileServiceClient._userAgent = Platform.getUserAgent();\n\n\n    };\n\n    $__modules__.MobileServiceTable = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"Generated\\MobileServices.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Validate = require('Validate');\n        var Platform = require('Platform');\n        var Query = require('Query').Query;\n\n        // Name of the reserved Mobile Services ID member.\n        var idPropertyName = \"id\";\n\n        // The route separator used to denote the table in a uri like\n        // .../{app}/collections/{coll}.\n        var tableRouteSeperatorName = \"tables\";\n        var idNames = [\"ID\", \"Id\", \"id\", \"iD\"];\n\n        var MobileServiceSystemProperties = {\n            None: 0,\n            CreatedAt: 1,\n            UpdatedAt: 2,\n            Version: 4,\n            All: 0xFFFF\n        };\n\n        var MobileServiceSystemColumns = {\n            CreatedAt: \"__createdAt\",\n            UpdatedAt: \"__updatedAt\",\n            Version: \"__version\"\n        };\n\n        Platform.addToMobileServicesClientNamespace({\n            MobileServiceTable:\n                {\n                    SystemProperties: MobileServiceSystemProperties\n                }\n        });\n\n        function MobileServiceTable(tableName, client) {\n            /// <summary>\n            /// Initializes a new instance of the MobileServiceTable class.\n            /// </summary>\n            /// <param name=\"tableName\" type=\"String\">\n            /// Name of the table.\n            /// </param>\n            /// <param name=\"client\" type=\"MobileServiceClient\" mayBeNull=\"false\">\n            /// The MobileServiceClient used to make requests.\n            /// </param>\n\n            this.getTableName = function () {\n                /// <summary>\n                /// Gets the name of the table.\n                /// </summary>\n                /// <returns type=\"String\">The name of the table.</returns>\n                return tableName;\n            };\n\n            this.getMobileServiceClient = function () {\n                /// <summary>\n                /// Gets the MobileServiceClient associated with this table.\n                /// </summary>\n                /// <returns type=\"MobileServiceClient\">\n                /// The MobileServiceClient associated with this table.\n                /// </returns>\n                return client;\n            };\n\n            this.systemProperties = 0;\n        }\n\n        // Export the MobileServiceTable class\n        exports.MobileServiceTable = MobileServiceTable;\n\n        // We have an internal _read method using callbacks since it's used by both\n        // table.read(query) and query.read().\n        MobileServiceTable.prototype._read = function (query, parameters, callback) {\n            /// <summary>\n            /// Query a table.\n            /// </summary>\n            /// <param name=\"query\" type=\"Object\" mayBeNull=\"true\">\n            /// The query to execute.  It can be null or undefined to get the entire\n            /// collection.\n            /// </param>\n            /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n            /// An object of user-defined parameters and values to include in the request URI query string.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// The callback to invoke when the query is complete.\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback)) {\n                if (_.isNull(parameters) && (typeof query === 'function')) {\n                    callback = query;\n                    query = null;\n                    parameters = null;\n                } else if (typeof parameters === 'function') {\n                    callback = parameters;\n                    parameters = null;\n                    if (!_.isNull(query) && _.isObject(query)) {\n                        // This 'query' argument could be either the query or the user-defined \n                        // parameters object since both are optional.  A query is either (a) a simple string \n                        // or (b) an Object with an toOData member. A user-defined parameters object is just \n                        // an Object.  We need to detect which of these has been passed in here.\n                        if (!_.isString(query) && _.isNull(query.toOData)) {\n                            parameters = query;\n                            query = null;\n                        }\n                    }\n                }\n            }\n\n            // Validate the arguments\n            if (query && _.isString(query)) {\n                Validate.notNullOrEmpty(query, 'query');\n            }\n            if (!_.isNull(parameters)) {\n                Validate.isValidParametersObject(parameters, 'parameters');\n            }\n            Validate.notNull(callback, 'callback');\n\n            // Get the query string\n            var tableName = this.getTableName();\n            var queryString = null;\n            var projection = null;\n            if (_.isString(query)) {\n                queryString = query;\n            } else if (_.isObject(query) && !_.isNull(query.toOData)) {\n                if (query.getComponents) {\n                    var components = query.getComponents();\n                    projection = components.projection;\n                    if (components.table) {\n                        // If the query has a table name, make sure it's compatible with\n                        // the table executing the query\n\n                        if (tableName !== components.table) {\n                            var message = _.format(Platform.getResourceString(\"MobileServiceTable_ReadMismatchedQueryTables\"), tableName, components.table);\n                            callback(_.createError(message), null);\n                            return;\n                        }\n\n                        // The oDataQuery will include the table name; we need to remove\n                        // because the url fragment already includes the table name.\n                        var oDataQuery = query.toOData();\n                        queryString = oDataQuery.replace(new RegExp('^/' + components.table), '');\n                    }\n                }\n            }\n\n            // Add any user-defined query string parameters\n            parameters = addSystemProperties(parameters, this.systemProperties, queryString);\n            if (!_.isNull(parameters)) {\n                var userDefinedQueryString = _.url.getQueryString(parameters);\n                if (!_.isNullOrEmpty(queryString)) {\n                    queryString += '&' + userDefinedQueryString;\n                }\n                else {\n                    queryString = userDefinedQueryString;\n                }\n            }\n\n            // Construct the URL\n            var urlFragment = _.url.combinePathSegments(tableRouteSeperatorName, tableName);\n            if (!_.isNull(queryString)) {\n                urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n            }\n\n            // Make the request\n            this.getMobileServiceClient()._request(\n                'GET',\n                urlFragment,\n                null,\n                function (error, response) {\n                    var values = null;\n                    if (_.isNull(error)) {\n                        // Parse the response\n                        values = _.fromJson(response.responseText);\n\n                        // If the values include the total count, we'll attach that\n                        // directly to the array\n                        if (values &&\n                            !Array.isArray(values) &&\n                            typeof values.count !== 'undefined' &&\n                            typeof values.results !== 'undefined') {\n                            // Create a new total count property on the values array\n                            values.results.totalCount = values.count;\n                            values = values.results;\n                        }\n\n                        // If we have a projection function, apply it to each item\n                        // in the collection\n                        if (projection !== null) {\n                            var i = 0;\n                            for (i = 0; i < values.length; i++) {\n                                values[i] = projection.call(values[i]);\n                            }\n                        }\n                    }\n                    callback(error, values);\n                });\n        };\n\n        MobileServiceTable.prototype.read = Platform.async(MobileServiceTable.prototype._read);\n\n        MobileServiceTable.prototype.insert = Platform.async(\n            function (instance, parameters, callback) {\n                /// <summary>\n                /// Insert a new object into a table.\n                /// </summary>\n                /// <param name=\"instance\" type=\"Object\">\n                /// The instance to insert into the table.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the insert is complete.\n                /// </param>\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.notNull(instance, 'instance');\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters);\n                }\n                Validate.notNull(callback, 'callback');\n\n                // Integer Ids can not have any Id set\n                for (var i in idNames) {\n                    var id = instance[idNames[i]];\n\n                    if (!_.isNullOrZero(id)) {\n                        if (_.isString(id)) {\n                            // String Id's are allowed iif using 'id'\n                            if (idNames[i] !== idPropertyName) {\n                                throw _.format(\n                                    Platform.getResourceString(\"MobileServiceTable_InsertIdAlreadySet\"),\n                                    idPropertyName);\n                            } else {\n                                Validate.isValidId(id, idPropertyName);\n                            }\n                        } else {\n                            throw _.format(\n                                Platform.getResourceString(\"MobileServiceTable_InsertIdAlreadySet\"),\n                                idPropertyName);\n                        }\n                    }\n                }\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(tableRouteSeperatorName, this.getTableName());\n                parameters = addSystemProperties(parameters, this.systemProperties);\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'POST',\n                    urlFragment,\n                    instance,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            callback(error, null);\n                        } else {\n                            var result = getItemFromResponse(response);\n                            result = Platform.allowPlatformToMutateOriginal(instance, result);\n                            callback(null, result);\n                        }\n                    });\n            });\n\n        MobileServiceTable.prototype.update = Platform.async(\n            function (instance, parameters, callback) {\n                /// <summary>\n                /// Update an object in a given table.\n                /// </summary>\n                /// <param name=\"instance\" type=\"Object\">\n                /// The instance to update in the table.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the update is complete.\n                /// </param>\n                var version,\n                    headers = [],\n                    serverInstance;\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.notNull(instance, 'instance');\n                Validate.isValidId(instance[idPropertyName], 'instance.' + idPropertyName);\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters, 'parameters');\n                }\n                Validate.notNull(callback, 'callback');\n\n                if (_.isString(instance[idPropertyName])) {\n                    version = instance.__version;\n                    serverInstance = removeSystemProperties(instance);\n                } else {\n                    serverInstance = instance;\n                }\n                parameters = addSystemProperties(parameters, this.systemProperties);\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(\n                        tableRouteSeperatorName,\n                        this.getTableName(),\n                        encodeURIComponent(instance[idPropertyName].toString()));\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                if (!_.isNullOrEmpty(version)) {\n                    headers['If-Match'] = getEtagFromVersion(version);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'PATCH',\n                    urlFragment,\n                    serverInstance,\n                    false,\n                    headers,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            setServerItemIfPreconditionFailed(error);\n                            callback(error);\n                        } else {\n                            var result = getItemFromResponse(response);\n                            result = Platform.allowPlatformToMutateOriginal(instance, result);\n                            callback(null, result);\n                        }\n                    });\n            });\n\n        MobileServiceTable.prototype.refresh = Platform.async(\n            function (instance, parameters, callback) {\n                /// <summary>\n                ///  Refresh the current instance with the latest values from the\n                ///  table.\n                /// </summary>\n                /// <param name=\"instance\" type=\"Object\">\n                /// The instance to refresh.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the refresh is complete.\n                /// </param>\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.notNull(instance, 'instance');\n                if (!_.isValidId(instance[idPropertyName], idPropertyName)) {\n                    if (typeof instance[idPropertyName] === 'string' && instance[idPropertyName] !== '') {\n                        throw _.format(Platform.getResourceString(\"Validate_InvalidId\"), idPropertyName);\n                    } else {\n                        callback(null, instance);\n                    }\n                    return;\n                }\n\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters, 'parameters');\n                }\n                Validate.notNull(callback, 'callback');\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(\n                        tableRouteSeperatorName,\n                        this.getTableName());\n\n                if (typeof instance[idPropertyName] === 'string') {\n                    var id = encodeURIComponent(instance[idPropertyName]).replace(/\\'/g, '%27%27');\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, \"?$filter=id eq '\" + id + \"'\");\n                } else {\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, \"?$filter=id eq \" + encodeURIComponent(instance[idPropertyName].toString()));\n                }\n\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'GET',\n                    urlFragment,\n                    instance,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            callback(error, null);\n                        } else {\n                            var result = _.fromJson(response.responseText);\n                            if (Array.isArray(result)) {\n                                result = result[0]; //get first object from array\n                            }\n\n                            if (!result) {\n                                var message = _.format(\n                                    Platform.getResourceString(\"MobileServiceTable_NotSingleObject\"),\n                                    idPropertyName);\n                                callback(_.createError(message), null);\n                            }\n\n                            result = Platform.allowPlatformToMutateOriginal(instance, result);\n                            callback(null, result);\n                        }\n                    });\n            });\n\n        MobileServiceTable.prototype.lookup = Platform.async(\n            function (id, parameters, callback) {\n                /// <summary>\n                /// Gets an instance from a given table.\n                /// </summary>\n                /// <param name=\"id\" type=\"Number\" integer=\"true\">\n                /// The id of the instance to get from the table.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the lookup is complete.\n                /// </param>\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.isValidId(id, idPropertyName);\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters);\n                }\n                Validate.notNull(callback, 'callback');\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(\n                        tableRouteSeperatorName,\n                        this.getTableName(),\n                        encodeURIComponent(id.toString()));\n\n                parameters = addSystemProperties(parameters, this.systemProperties);\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'GET',\n                    urlFragment,\n                    null,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            callback(error, null);\n                        } else {\n                            var result = getItemFromResponse(response);\n                            callback(null, result);\n                        }\n                    });\n            });\n\n        MobileServiceTable.prototype.del = Platform.async(\n            function (instance, parameters, callback) {\n                /// <summary>\n                /// Delete an object from a given table.\n                /// </summary>\n                /// <param name=\"instance\" type=\"Object\">\n                /// The instance to delete from the table.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the delete is complete.\n                /// </param>\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.notNull(instance, 'instance');\n                Validate.isValidId(instance[idPropertyName], 'instance.' + idPropertyName);\n                parameters = addSystemProperties(parameters, this.systemProperties);\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters);\n                }\n                Validate.notNull(callback, 'callback');\n\n                var headers = [];\n\n                if (_.isString(instance[idPropertyName])) {\n                    if (!_.isNullOrEmpty(instance.__version)) {\n                        headers['If-Match'] = getEtagFromVersion(instance.__version);\n                    }\n                }\n\n                // Contruct the URL\n                var urlFragment = _.url.combinePathSegments(\n                        tableRouteSeperatorName,\n                        this.getTableName(),\n                        encodeURIComponent(instance[idPropertyName].toString()));\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'DELETE',\n                    urlFragment,\n                    null,\n                    false,\n                    headers,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            setServerItemIfPreconditionFailed(error);\n                        }\n                        callback(error);\n                    });\n            });\n\n        // Copy select Query operators to MobileServiceTable so queries can be created\n        // compactly.  We'll just add them to the MobileServiceTable prototype and then\n        // forward on directly to a new Query instance.\n        var queryOperators =\n            ['where', 'select', 'orderBy', 'orderByDescending', 'skip', 'take', 'includeTotalCount'];\n        var copyOperator = function (operator) {\n            MobileServiceTable.prototype[operator] = function () {\n                /// <summary>\n                /// Creates a new query.\n                /// </summary>\n\n                // Create a query associated with this table\n                var table = this;\n                var query = new Query(table.getTableName());\n\n                // Add a .read() method on the query which will execute the query.\n                // This method is defined here per query instance because it's\n                // implicitly tied to the table.\n                query.read = Platform.async(\n                    function (parameters, callback) {\n                        /// <summary>\n                        /// Execute the query.\n                        /// </summary>                \n                        table._read(query, parameters, callback);\n                    });\n\n                // Invoke the query operator on the newly created query\n                return query[operator].apply(query, arguments);\n            };\n        };\n        var i = 0;\n        for (; i < queryOperators.length; i++) {\n            // Avoid unintended closure capture\n            copyOperator(queryOperators[i]);\n        }\n\n        // Table system properties\n        function removeSystemProperties(instance) {\n            var copy = {};\n            for (var property in instance) {\n                if (property.substr(0, 2) !== '__') {\n                    copy[property] = instance[property];\n                }\n            }\n            return copy;\n        }\n\n        function addSystemProperties(parameters, properties, querystring) {\n            if (properties === MobileServiceSystemProperties.None || (typeof querystring === 'string' && querystring.toLowerCase().indexOf('__systemproperties') >= 0)) {\n                return parameters;\n            }\n\n            // Initialize an object if none passed in\n            parameters = parameters || {};\n\n            // Don't override system properties if already set\n            if (!_.isNull(parameters['__systemProperties'])) {\n                return parameters;\n            }\n\n            if (properties === MobileServiceSystemProperties.All) {\n                parameters['__systemProperties'] = '*';\n            } else {\n                var options = [];\n                if (MobileServiceSystemProperties.CreatedAt & properties) {\n                    options.push(MobileServiceSystemColumns.CreatedAt);\n                }\n                if (MobileServiceSystemProperties.UpdatedAt & properties) {\n                    options.push(MobileServiceSystemColumns.UpdatedAt);\n                }\n                if (MobileServiceSystemProperties.Version & properties) {\n                    options.push(MobileServiceSystemColumns.Version);\n                }\n                parameters['__systemProperties'] = options.join(',');\n            }\n\n            return parameters;\n        }\n\n        // Add double quotes and unescape any internal quotes\n        function getItemFromResponse(response) {\n            var result = _.fromJson(response.responseText);\n            if (response.getResponseHeader) {\n                var eTag = response.getResponseHeader('ETag');\n                if (!_.isNullOrEmpty(eTag)) {\n                    result.__version = getVersionFromEtag(eTag);\n                }\n            }\n            return result;\n        }\n\n        // Converts an error to precondition failed error\n        function setServerItemIfPreconditionFailed(error) {\n            if (error.request && error.request.status === 412) {\n                error.serverInstance = _.fromJson(error.request.responseText);\n            }\n        }\n\n        // Add wrapping double quotes and escape all double quotes\n        function getEtagFromVersion(version) {\n            var result = version.replace(/\\\"/g, '\\\\\\\"');\n            return \"\\\"\" + result + \"\\\"\";\n        }\n\n        // Remove surrounding double quotes and unescape internal quotes\n        function getVersionFromEtag(etag) {\n            var len = etag.length,\n                result = etag;\n\n            if (len > 1 && etag[0] === '\"' && etag[len - 1] === '\"') {\n                result = etag.substr(1, len - 2);\n            }\n            return result.replace(/\\\\\\\"/g, '\"');\n        }\n    };\n\n    $__modules__.MobileServiceLogin = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"Generated\\MobileServices.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Validate = require('Validate');\n        var Platform = require('Platform');\n\n        var loginUrl = \"login\";\n        var loginDone = \"done\";\n\n        function MobileServiceLogin(client, ignoreFilters) {\n            /// <summary>\n            /// Initializes a new instance of the MobileServiceLogin class.\n            /// </summary>\n            /// <param name=\"client\" type=\"MobileServiceClient\" mayBeNull=\"false\">\n            /// Reference to the MobileServiceClient associated with this login.\n            /// </param>\n            /// <param name=\"ignoreFilters\" type=\"Boolean\" mayBeNull=\"true\">\n            /// Optional parameter to indicate if the client filters should be ignored\n            /// and requests should be sent directly. Is true by default. This should\n            /// only be set to false for testing purposes when filters are needed to intercept\n            /// and validate requests and responses.\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(ignoreFilters)) {\n                ignoreFilters = true;\n            }\n\n            // Validate arguments\n            Validate.notNull(client);\n            Validate.isObject(client, 'client');\n\n            // Create read/write fields\n            this._loginState = { inProcess: false, cancelCallback: null };\n            this.ignoreFilters = ignoreFilters;\n\n            // Create get accessors for read-only fields\n            this.getMobileServiceClient = function () {\n                /// <summary>\n                /// Gets the MobileServiceClient associated with this table.\n                /// <summary>\n                /// <returns type=\"MobileServiceClient\">\n                /// The MobileServiceClient associated with this table.\n                /// </returns>\n                return client;\n            };\n\n            this.getLoginInProcess = function () {\n                /// <summary>\n                /// Indicates if a login is currently in process or not.\n                /// <summary>\n                /// <returns type=\"Boolean\">\n                /// True if a login is in process and false otherwise.\n                /// </returns>\n                return this._loginState.inProcess;\n            };\n        }\n\n        // Export the MobileServiceLogin class\n        exports.MobileServiceLogin = MobileServiceLogin;\n\n        // Define the MobileServiceLogin in a namespace (note: this has global effects\n        // unless the platform we're using chooses to ignore it because exports are\n        // good enough).\n        Platform.addToMobileServicesClientNamespace({ MobileServiceLogin: MobileServiceLogin });\n\n        MobileServiceLogin.prototype.login = function (provider, token, useSingleSignOn, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application given a provider name and optional token object\n            /// Microsoft Account authentication token.\n            /// </summary>\n            /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">\n            /// Optional name of the authentication provider to use; one of 'facebook', 'twitter', 'google',\n            /// 'windowsazureactivedirectory' (can also use 'aad'), or 'microsoftaccount'.\n            /// </param>\n            /// <param name=\"token\" type=\"Object\"  mayBeNull=\"true\">\n            /// Optional provider specific object with existing OAuth token to log in with or\n            /// a JWT Mobile Services authentication token if the provider is null.\n            /// </param>\n            /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n            /// Only applies to Windows 8 clients.  Will be ignored on other platforms.\n            /// Indicates if single sign-on should be used. Single sign-on requires that the \n            /// application's Package SID be registered with the Microsoft Azure Mobile Service, \n            /// but it provides a better experience as HTTP cookies are supported so that users \n            /// do not have to login in everytime the application is launched.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\"  mayBeNull=\"true\">\n            /// Optional callback accepting (error, user) parameters.\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback)) {\n                if (!_.isNull(useSingleSignOn) && (typeof useSingleSignOn === 'function')) {\n                    callback = useSingleSignOn;\n                    useSingleSignOn = null;\n                }\n                else if (!_.isNull(token) && (typeof token === 'function')) {\n                    callback = token;\n                    useSingleSignOn = null;\n                    token = null;\n                }\n            }\n            if (_.isNull(useSingleSignOn)) {\n                if (_.isBool(token)) {\n                    useSingleSignOn = token;\n                    token = null;\n                }\n                else {\n                    useSingleSignOn = false;\n                }\n            }\n\n            // Determine if the provider is actually a Mobile Services authentication token\n            if (_.isNull(token) && _.isString(provider) && provider.split('.').length === 3) {\n                token = provider;\n                provider = null;\n            }\n\n            // Validate parameters; there must be either a provider, a token or both\n            if (_.isNull(provider)) {\n                Validate.notNull(token);\n                Validate.isString(token);\n            }\n            if (_.isNull(token)) {\n                Validate.notNull(provider);\n                Validate.isString(provider);\n                provider = provider.toLowerCase();\n            }\n\n            if (!_.isNull(provider)) {\n                if (provider.toLowerCase() === 'windowsazureactivedirectory') {\n                    // The mobile service REST API uses '/login/aad' for Microsoft Azure Active Directory\n                    provider = 'aad';\n                }\n                this.loginWithProvider(provider, token, useSingleSignOn, callback);\n            }\n            else {\n                this.loginWithMobileServiceToken(token, callback);\n            }\n        };\n\n        MobileServiceLogin.prototype.loginWithMobileServiceToken = function (authenticationToken, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application given an Mobile Service authentication token.\n            /// </summary>\n            /// <param name=\"authenticationToken\" type=\"String\">\n            /// OAuth access token that authenticates the user.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// Optional callback accepting (error, user) parameters.\n            /// </param>\n\n            var self = this;\n            var client = self.getMobileServiceClient();\n\n            Validate.isString(authenticationToken, 'authenticationToken');\n            Validate.notNullOrEmpty(authenticationToken, 'authenticationToken');\n\n            client._request(\n                'POST',\n                loginUrl,\n                { authenticationToken: authenticationToken },\n                self.ignoreFilters,\n                function (error, response) {\n                    onLoginResponse(error, response, client, callback);\n                });\n        };\n\n        MobileServiceLogin.prototype.loginWithProvider = function (provider, token, useSingleSignOn, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application given a provider name and optional token object.\n            /// </summary>\n            /// <param name=\"provider\" type=\"String\">\n            /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google',\n            /// 'windowsazureactivedirectory' (can also use 'aad'), or 'microsoftaccount'.\n            /// </param>\n            /// <param name=\"token\" type=\"Object\" mayBeNull=\"true\">\n            /// Optional, provider specific object with existing OAuth token to log in with.\n            /// </param>\n            /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n            /// Optional, indicates if single sign-on should be used.  Single sign-on requires that the\n            /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n            /// provides a better experience as HTTP cookies are supported so that users do not have to\n            /// login in everytime the application is launched. Is false be default.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback)) {\n                if (_.isNull(useSingleSignOn) && (typeof token === 'function')) {\n                    callback = token;\n                    token = null;\n                    useSingleSignOn = false;\n                } else if (typeof useSingleSignOn === 'function') {\n                    callback = useSingleSignOn;\n                    useSingleSignOn = false;\n                    if (!_.isNull(token) && _.isBool(token)) {\n                        useSingleSignOn = token;\n                        token = null;\n                    }\n                }\n            }\n\n            // Validate arguments\n            Validate.isString(provider, 'provider');\n            if (!_.isNull(token)) {\n                Validate.isObject(token, 'token');\n            }\n\n            // Throw if a login is already in process and is not cancellable\n            if (this._loginState.inProcess) {\n                var didCancel = this._loginState.cancelCallback && this._loginState.cancelCallback();\n                if (!didCancel) {\n                    throw Platform.getResourceString(\"MobileServiceLogin_LoginErrorResponse\");\n                }\n            }\n\n            provider = provider.toLowerCase();\n\n            // Either login with the token or the platform specific login control.\n            if (!_.isNull(token)) {\n                loginWithProviderAndToken(this, provider, token, callback);\n            }\n            else {\n                loginWithLoginControl(this, provider, useSingleSignOn, callback);\n            }\n        };\n\n        function onLoginComplete(error, token, client, callback) {\n            /// <summary>\n            /// Handles the completion of the login and calls the user's callback with\n            /// either a user or an error.\n            /// </summary>\n            /// <param name=\"error\" type=\"string\" mayBeNull=\"true\">\n            /// Optional error that may have occurred during login. Will be null if the\n            /// login succeeded and their is a token.\n            /// </param>\n            /// <param name=\"token\" type=\"string\" mayBeNull=\"true\">\n            /// Optional token that represents the logged-in user. Will be null if the\n            /// login failed and their is an error.\n            /// </param>\n            /// <param name=\"client\" type=\"MobileServiceClient\">\n            /// The Mobile Service client associated with the login.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n            var user = null;\n\n            if (_.isNull(error)) {\n\n                // Validate the token\n                if (_.isNull(token) ||\n                    !_.isObject(token) ||\n                    !_.isObject(token.user) ||\n                    !_.isString(token.authenticationToken)) {\n                    error = Platform.getResourceString(\"MobileServiceLogin_InvalidResponseFormat\");\n                }\n                else {\n                    // Set the current user on the client and return it in the callback\n                    client.currentUser = token.user;\n                    client.currentUser.mobileServiceAuthenticationToken = token.authenticationToken;\n                    user = client.currentUser;\n                }\n            }\n\n            if (!_.isNull(callback)) {\n                callback(error, user);\n            }\n        }\n\n        function onLoginResponse(error, response, client, callback) {\n            /// <summary>\n            /// Handles the completion of the login HTTP call and calls the user's callback with\n            /// either a user or an error.\n            /// </summary>\n            /// <param name=\"error\" type=\"string\" mayBeNull=\"true\">\n            /// Optional error that may have occurred during login. Will be null if the\n            /// login succeeded and their is a token.\n            /// </param>\n            /// <param name=\"response\" type=\"string\" mayBeNull=\"true\">\n            /// Optional HTTP login response from the Mobile Service. Will be null if the\n            /// login failed and their is an error.\n            /// </param>\n            /// <param name=\"client\" type=\"MobileServiceClient\">\n            /// The Mobile Service client associated with the login.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n\n            var mobileServiceToken = null;\n            if (_.isNull(error)) {\n                try {\n                    mobileServiceToken = _.fromJson(response.responseText);\n                }\n                catch (e) {\n                    error = e;\n                }\n            }\n\n            onLoginComplete(error, mobileServiceToken, client, callback);\n        }\n\n        function loginWithProviderAndToken(login, provider, token, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application given a provider name and token object.\n            /// </summary>\n            /// <param name=\"login\" type=\"MobileServiceLogin\">\n            /// The login instance that holds the context used with the login process.\n            /// </param>\n            /// <param name=\"provider\" type=\"String\">\n            /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', or \n            /// 'microsoftaccount'. The provider should already have been validated.\n            /// </param>\n            /// <param name=\"token\" type=\"Object\">\n            /// Provider specific object with existing OAuth token to log in with.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n\n            var client = login.getMobileServiceClient();\n\n            // This design has always been problematic, because the operation can take arbitrarily\n            // long and there is no way for the UI to cancel it. We should probably remove this\n            // one-at-a-time restriction.\n            login._loginState = { inProcess: true, cancelCallback: null };\n\n            // Invoke the POST endpoint to exchange provider-specific token for a \n            // Microsoft Azure Mobile Services token\n            client._request(\n                'POST',\n                loginUrl + '/' + provider,\n                token,\n                login.ignoreFilters,\n                function (error, response) {\n                    login._loginState = { inProcess: false, cancelCallback: null };\n                    onLoginResponse(error, response, client, callback);\n                });\n        }\n\n        function loginWithLoginControl(login, provider, useSingleSignOn, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application using a platform specific\n            /// login control that will present the user with the given provider's login web page.\n            /// </summary>\n            /// <param name=\"login\" type=\"MobileServiceLogin\">\n            /// The login instance that holds the context used with the login process.\n            /// </param>\n            /// <param name=\"provider\" type=\"String\">\n            /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', or 'microsoftaccount'.\n            /// </param>\n            /// <param name=\"useSingleSignOn\" type=\"Boolean\">\n            /// Optional, indicates if single sign-on should be used.  Single sign-on requires that the\n            /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n            /// provides a better experience as HTTP cookies are supported so that users do not have to\n            /// login in everytime the application is launched. Is false be default.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\"  mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n\n            var client = login.getMobileServiceClient();\n            var startUri = _.url.combinePathSegments(\n                client.applicationUrl,\n                loginUrl,\n                provider);\n            var endUri = null;\n\n            // If not single sign-on, then we need to construct a non-null end uri.\n            if (!useSingleSignOn) {\n                endUri = _.url.combinePathSegments(\n                    client.applicationUrl,\n                    loginUrl,\n                    loginDone);\n            }\n\n            login._loginState = { inProcess: true, cancelCallback: null }; // cancelCallback gets set below\n\n            // Call the platform to launch the login control, capturing any\n            // 'cancel' callback that it returns\n            var platformResult = Platform.login(\n                startUri,\n                endUri,\n                function (error, mobileServiceToken) {\n                    login._loginState = { inProcess: false, cancelCallback: null };\n                    onLoginComplete(error, mobileServiceToken, client, callback);\n                });\n\n            if (login._loginState.inProcess && platformResult && platformResult.cancelCallback) {\n                login._loginState.cancelCallback = platformResult.cancelCallback;\n            }\n        }\n    };\n\n    $__modules__.Platform = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n        /*global $__fileVersion__:false, $__version__:false */\n\n        var _ = require('Extensions');\n        var Validate = require('Validate');\n        var Promises = require('Promises');\n        var Resources = require('Resources');\n        var inMemorySettingStore = {};\n        if (window.localStorage) {\n            inMemorySettingStore = window.localStorage;\n        }\n        var bestAvailableTransport = null;\n        var knownTransports = [ // In order of preference\n            require('DirectAjaxTransport'),\n            require('IframeTransport')\n        ];\n        var knownLoginUis = [ // In order of preference\n            require('CordovaPopup'),\n            require('BrowserPopup')\n        ];\n\n        // Matches an ISO date and separates out the fractional part of the seconds\n        // because IE < 10 has quirks parsing fractional seconds\n        var isoDateRegex = /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(?:\\.(\\d*))?Z$/;\n\n        // Feature-detect IE8's date serializer\n        var dateSerializerOmitsDecimals = !JSON.stringify(new Date(100)).match(/\\.100Z\"$/);\n\n        exports.async = function async(func) {\n            /// <summary>\n            /// Wrap a function that takes a callback into platform specific async\n            /// operation (i.e., keep using callbacks or switch to promises).\n            /// </summary>\n            /// <param name=\"func\" type=\"Function\">\n            /// An async function with a callback as its last parameter \n            /// </param>\n            /// <returns type=\"Function\">\n            /// Function that when invoked will return a promise.\n            /// </returns>\n\n            return function () {\n                // Capture the context of the original call\n                var that = this;\n                var args = arguments;\n\n                // Create a new promise that will wrap the async call\n                return new Promises.Promise(function (complete, error) {\n\n                    // Add a callback to the args which will call the appropriate\n                    // promise handlers\n                    var callback = function (err) {\n                        if (_.isNull(err)) {\n                            // Call complete with all the args except for err\n                            complete.apply(null, Array.prototype.slice.call(arguments, 1));\n                        } else {\n                            error(err);\n                        }\n                    };\n                    Array.prototype.push.call(args, callback);\n\n                    try {\n                        // Invoke the async method which will in turn invoke our callback\n                        // which will in turn invoke the promise's handlers\n                        func.apply(that, args);\n                    } catch (ex) {\n                        // Thread any immediate errors like parameter validation\n                        // through the the callback\n                        callback(_.createError(ex));\n                    }\n                });\n            };\n        };\n\n        exports.addToMobileServicesClientNamespace = function (declarations) {\n            /// <summary>\n            /// Define a collection of declarations in the Mobile Services Client namespace.\n            /// </summary>\n            /// <param name=\"declarations\" type=\"Object\">\n            /// Object consisting of names and values to define in the namespace.\n            /// </param>\n\n            // First ensure our 'WindowsAzure' namespace exists\n            var namespaceObject = global.WindowsAzure = global.WindowsAzure || {};\n\n            // Now add each of the declarations to the namespace\n            for (var key in declarations) {\n                if (declarations.hasOwnProperty(key)) {\n                    namespaceObject[key] = declarations[key];\n                }\n            }\n        };\n\n        exports.readSetting = function readSetting(name) {\n            /// <summary>\n            /// Read a setting from a global configuration store.\n            /// </summary>\n            /// <param name=\"name\" type=\"String\">\n            /// Name of the setting to read.\n            /// </param>\n            /// <returns type=\"String\" mayBeNull=\"true\">\n            /// The value of the setting or null if not set.\n            /// </returns>\n\n            return inMemorySettingStore[name];\n        };\n\n        exports.writeSetting = function writeSetting(name, value) {\n            /// <summary>\n            /// Write a setting to a global configuration store.\n            /// </summary>\n            /// <param name=\"name\" type=\"String\">\n            /// Name of the setting to write.\n            /// </param>\n            /// <param name=\"value\" type=\"String\" mayBeNull=\"true\">\n            /// The value of the setting.\n            /// </returns>\n\n            inMemorySettingStore[name] = value;\n        };\n\n        exports.webRequest = function (request, callback) {\n            /// <summary>\n            /// Make a web request.\n            /// </summary>\n            /// <param name=\"request\" type=\"Object\">\n            /// Object describing the request (in the WinJS.xhr format).\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// The callback to execute when the request completes.\n            /// </param>\n\n            return getBestTransport().performRequest(request, callback);\n        };\n\n        exports.getUserAgent = function () {\n            // Browsers don't allow you to set a custom user-agent in ajax requests. Trying to do so\n            // will cause an exception. So we don't.\n            return null;\n        };\n\n        exports.getOperatingSystemInfo = function () {\n            return {\n                name: \"--\",\n                version: \"--\",\n                architecture: \"--\"\n            };\n        };\n\n        exports.getSdkInfo = function () {\n            return {\n                language: \"Web\",\n                fileVersion: $__fileVersion__\n            };\n        };\n\n        exports.login = function (startUri, endUri, callback) {\n            // Force logins to go over HTTPS because the runtime is hardcoded to redirect\n            // the server flow back to HTTPS, and we need the origin to match.\n            var findProtocol = /^[a-z]+:/,\n                requiredProtocol = 'https:';\n            startUri = startUri.replace(findProtocol, requiredProtocol);\n            endUri = endUri.replace(findProtocol, requiredProtocol);\n\n            return getBestProvider(knownLoginUis).login(startUri, endUri, callback);\n        };\n\n        exports.toJson = function (value) {\n            /// <summary>\n            /// Convert an object into JSON format.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to convert.</param>\n            /// <returns type=\"String\">The value as JSON.</returns>\n\n            // We're wrapping this so we can hook the process and perform custom JSON\n            // conversions.  Note that we don't have to add a special hook to correctly\n            // serialize dates in ISO8061 because JSON.stringify does that by defualt.\n            // TODO: Convert geolocations once they're supported\n            // TODO: Expose the ability for developers to convert custom types\n            return JSON.stringify(value, function (key, stringifiedValue) {\n                if (dateSerializerOmitsDecimals && this && _.isDate(this[key])) {\n                    // IE8 doesn't include the decimal part in its serialization of dates\n                    // For consistency, we extract the non-decimal part from the string\n                    // representation, and then append the expected decimal part.\n                    var msec = this[key].getMilliseconds(),\n                        msecString = String(msec + 1000).substring(1);\n                    return stringifiedValue.replace(isoDateRegex, function (all, datetime) {\n                        return datetime + \".\" + msecString + \"Z\";\n                    });\n                } else {\n                    return stringifiedValue;\n                }\n            });\n        };\n\n        exports.tryParseIsoDateString = function (text) {\n            /// <summary>\n            /// Try to parse an ISO date string.\n            /// </summary>\n            /// <param name=\"text\" type=\"String\">The text to parse.</param>\n            /// <returns type=\"Date\">The parsed Date or null.</returns>\n\n            Validate.isString(text);\n\n            // Check against a lenient regex\n            var matchedDate = isoDateRegex.exec(text);\n            if (matchedDate) {\n                // IE9 only handles precisely 0 or 3 decimal places when parsing ISO dates,\n                // and IE8 doesn't parse them at all. Fortunately, all browsers can handle \n                // 'yyyy/mm/dd hh:MM:ss UTC' (without fractional seconds), so we can rewrite\n                // the date to that format, and the apply fractional seconds.\n                var dateWithoutFraction = matchedDate[1],\n                    fraction = matchedDate[2] || \"0\",\n                    milliseconds = Math.round(1000 * Number(\"0.\" + fraction)); // 6 -> 600, 65 -> 650, etc.\n                dateWithoutFraction = dateWithoutFraction\n                    .replace(/\\-/g, \"/\")   // yyyy-mm-ddThh:mm:ss -> yyyy/mm/ddThh:mm:ss\n                    .replace(\"T\", \" \");    // yyyy/mm/ddThh:mm:ss -> yyyy/mm/dd hh:mm:ss\n\n                // Try and parse - it will return NaN if invalid\n                var ticks = Date.parse(dateWithoutFraction + \" UTC\");\n                if (!isNaN(ticks)) {\n                    return new Date(ticks + milliseconds); // ticks are just milliseconds since 1970/01/01\n                }\n            }\n\n            // Doesn't look like a date\n            return null;\n        };\n\n        exports.getResourceString = function (resourceName) {\n            // For now, we'll just always use English\n            return Resources[\"en-US\"][resourceName];\n        };\n\n\n        exports.allowPlatformToMutateOriginal = function (original, updated) {\n            // For the Web/HTML client, we don't modify the original object.\n            // This is the more typical arrangement for most JavaScript data access.\n            return updated;\n        };\n\n        function getBestTransport() {\n            // We cache this just because it gets called such a lot\n            if (!bestAvailableTransport) {\n                bestAvailableTransport = getBestProvider(knownTransports);\n            }\n\n            return bestAvailableTransport;\n        }\n\n        function getBestProvider(providers) {\n            /// <summary>\n            /// Given an array of objects which each have a 'supportsCurrentRuntime' function,\n            /// returns the first instance where that function returns true.\n            /// </summary>\n\n            for (var i = 0; i < providers.length; i++) {\n                if (providers[i].supportsCurrentRuntime()) {\n                    return providers[i];\n                }\n            }\n\n            throw new Error(\"Unsupported browser - no suitable providers are available.\");\n        }\n    };\n\n    $__modules__.DirectAjaxTransport = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n        // This transport is for modern browsers - it uses XMLHttpRequest with Cross-Origin Resource Sharing (CORS)\n\n        exports.name = \"DirectAjaxTransport\";\n\n        exports.supportsCurrentRuntime = function () {\n            /// <summary>\n            /// Determines whether or not this transport is usable in the current runtime.\n            /// </summary>\n\n            // Feature-detect support for CORS (for IE, it's in version 10+)\n            return (typeof global.XMLHttpRequest !== \"undefined\") &&\n                   ('withCredentials' in new global.XMLHttpRequest());\n        };\n\n        exports.performRequest = function (request, callback) {\n            /// <summary>\n            /// Make a web request.\n            /// </summary>\n            /// <param name=\"request\" type=\"Object\">\n            /// Object describing the request (in the WinJS.xhr format).\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// The callback to execute when the request completes.\n            /// </param>\n\n            var headers = request.headers || {},\n                url = request.url.replace(/#.*$/, \"\"), // Strip hash part of URL for consistency across browsers\n                httpMethod = request.type ? request.type.toUpperCase() : \"GET\",\n                xhr = new global.XMLHttpRequest();\n\n            xhr.onreadystatechange = function () {\n                if (xhr.readyState === 4) {\n                    callback(null, xhr);\n                }\n            };\n\n            xhr.open(httpMethod, url);\n\n            for (var key in headers) {\n                if (request.headers.hasOwnProperty(key)) {\n                    xhr.setRequestHeader(key, request.headers[key]);\n                }\n            }\n\n            xhr.send(request.data);\n        };\n    };\n\n    $__modules__.IframeTransport = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n        // This transport is for midlevel browsers (IE8-9) that don't support CORS but do support postMessage.\n        // It creates an invisible <iframe> that loads a special bridge.html page from the runtime domain.\n        // To issue a request, it uses postMessage to pass the request into the <iframe>, which in turn makes\n        // a same-domain Ajax request to the runtime. To associate postMessage replies with the original\n        // request, we track an array of promises that eventually time out if not resolved (see PostMessageExchange).\n\n        var Promises = require('Promises'),\n            PostMessageExchange = require('PostMessageExchange'),\n            loadBridgeFramePromises = [], // One per target proto/host/port triplet\n            messageExchange = PostMessageExchange.instance;\n\n        exports.name = \"IframeTransport\";\n\n        exports.supportsCurrentRuntime = function () {\n            /// <summary>\n            /// Determines whether or not this transport is usable in the current runtime.\n            /// </summary>\n\n            return typeof global.postMessage !== \"undefined\";\n        };\n\n        exports.performRequest = function (request, callback) {\n            /// <summary>\n            /// Make a web request.\n            /// </summary>\n            /// <param name=\"request\" type=\"Object\">\n            /// Object describing the request (in the WinJS.xhr format).\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// The callback to execute when the request completes.\n            /// </param>\n\n            var originRoot = PostMessageExchange.getOriginRoot(request.url);\n            whenBridgeLoaded(originRoot, function (bridgeFrame) {\n                var message = {\n                    type: request.type,\n                    url: request.url,\n                    headers: request.headers,\n                    data: request.data\n                };\n                messageExchange.request(bridgeFrame.contentWindow, message, originRoot).then(function (reply) {\n                    fixupAjax(reply);\n                    callback(null, reply);\n                }, function (error) {\n                    callback(error, null);\n                });\n            });\n        };\n\n        function fixupAjax(xhr) {\n            if (xhr) {\n                // IE sometimes converts status 204 into 1223\n                // http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request\n                if (xhr.status === 1223) {\n                    xhr.status = 204;\n                }\n            }\n        }\n\n        function whenBridgeLoaded(originRoot, callback) {\n            /// <summary>\n            /// Performs the callback once the bridge iframe has finished loading.\n            /// Lazily creates the bridge iframe if necessary. Note that each proto/host/port\n            /// triplet (i.e., same-domain origin) needs a separate bridge.\n            /// </summary>\n\n            var cacheEntry = loadBridgeFramePromises[originRoot];\n\n            if (!cacheEntry) {\n                cacheEntry = loadBridgeFramePromises[originRoot] = new Promises.Promise(function (complete, error) {\n                    var bridgeFrame = document.createElement(\"iframe\"),\n                        callerOrigin = PostMessageExchange.getOriginRoot(window.location.href),\n                        handleBridgeLoaded = function () {\n                            complete(bridgeFrame);\n                        };\n\n                    if (bridgeFrame.addEventListener) {\n                        bridgeFrame.addEventListener(\"load\", handleBridgeLoaded, false);\n                    } else {\n                        // For IE8\n                        bridgeFrame.attachEvent(\"onload\", handleBridgeLoaded);\n                    }\n\n                    bridgeFrame.src = originRoot + \"/crossdomain/bridge?origin=\" + encodeURIComponent(callerOrigin);\n\n                    // Try to keep it invisible, even if someone does $(\"iframe\").show()\n                    bridgeFrame.setAttribute(\"width\", 0);\n                    bridgeFrame.setAttribute(\"height\", 0);\n                    bridgeFrame.style.display = \"none\";\n\n                    global.document.body.appendChild(bridgeFrame);\n                });\n            }\n\n            cacheEntry.then(callback);\n        }\n\n    };\n\n    $__modules__.BrowserPopup = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        var PostMessageExchange = require('PostMessageExchange');\n\n        exports.supportsCurrentRuntime = function () {\n            /// <summary>\n            /// Determines whether or not this login UI is usable in the current runtime.\n            /// </summary>\n            return true;\n        };\n\n        exports.login = function (startUri, endUri, callback) {\n            /// <summary>\n            /// Displays the login UI and calls back on completion\n            /// </summary>\n\n            // Tell the runtime which form of completion signal we are looking for,\n            // and which origin should be allowed to receive the result (note that this\n            // is validated against whitelist on the server; we are only supplying this\n            // origin to indicate *which* of the whitelisted origins to use).\n            var completionOrigin = PostMessageExchange.getOriginRoot(window.location.href),\n                runtimeOrigin = PostMessageExchange.getOriginRoot(startUri),\n                // IE does not support popup->opener postMessage calls, so we have to\n                // route the message via an iframe\n                useIntermediateIframe = window.navigator.userAgent.indexOf(\"MSIE\") >= 0 || window.navigator.userAgent.indexOf(\"Trident\") >= 0,\n                intermediateIframe = useIntermediateIframe && createIntermediateIframeForLogin(runtimeOrigin, completionOrigin),\n                completionType = useIntermediateIframe ? \"iframe\" : \"postMessage\";\n            startUri += \"?completion_type=\" + completionType + \"&completion_origin=\" + encodeURIComponent(completionOrigin);\n\n            // Browsers don't allow postMessage to a file:// URL (except by setting origin to \"*\", which is unacceptable)\n            // so abort the process early with an explanation in that case.\n            if (!(completionOrigin && (completionOrigin.indexOf(\"http:\") === 0 || completionOrigin.indexOf(\"https:\") === 0))) {\n                var error = \"Login is only supported from http:// or https:// URLs. Please host your page in a web server.\";\n                callback(error, null);\n                return;\n            }\n\n            var loginWindow = window.open(startUri, \"_blank\", \"location=no\"),\n                complete = function (errorValue, oauthValue) {\n                    // Clean up event handlers, windows, frames, ...\n                    window.clearInterval(checkForWindowClosedInterval);\n                    loginWindow.close();\n                    if (window.removeEventListener) {\n                        window.removeEventListener(\"message\", handlePostMessage);\n                    } else {\n                        // For IE8\n                        window.detachEvent(\"onmessage\", handlePostMessage);\n                    }\n                    if (intermediateIframe) {\n                        intermediateIframe.parentNode.removeChild(intermediateIframe);\n                    }\n\n                    // Finally, notify the caller\n                    callback(errorValue, oauthValue);\n                },\n                handlePostMessage = function (evt) {\n                    // Validate source\n                    var expectedSource = useIntermediateIframe ? intermediateIframe.contentWindow : loginWindow;\n                    if (evt.source !== expectedSource) {\n                        return;\n                    }\n\n                    // Parse message\n                    var envelope;\n                    try {\n                        envelope = JSON.parse(evt.data);\n                    } catch (ex) {\n                        // Not JSON - it's not for us. Ignore it and keep waiting for the next message.\n                        return;\n                    }\n\n                    // Process message only if it's for us\n                    if (envelope && envelope.type === \"LoginCompleted\" && (envelope.oauth || envelope.error)) {\n                        complete(envelope.error, envelope.oauth);\n                    }\n                },\n                checkForWindowClosedInterval = window.setInterval(function () {\n                    // We can't directly catch any \"onclose\" event from the popup because it's usually on a different\n                    // origin, but in all the mainstream browsers we can poll for changes to its \"closed\" property\n                    if (loginWindow && loginWindow.closed === true) {\n                        complete(\"canceled\", null);\n                    }\n                }, 250);\n\n            if (window.addEventListener) {\n                window.addEventListener(\"message\", handlePostMessage, false);\n            } else {\n                // For IE8\n                window.attachEvent(\"onmessage\", handlePostMessage);\n            }\n\n            // Permit cancellation, e.g., if the app tries to login again while the popup is still open\n            return {\n                cancelCallback: function () {\n                    complete(\"canceled\", null);\n                    return true; // Affirm that it was cancelled\n                }\n            };\n        };\n\n        function createIntermediateIframeForLogin(runtimeOrigin, completionOrigin) {\n            var frame = document.createElement(\"iframe\");\n            frame.name = \"zumo-login-receiver\"; // loginviaiframe.html specifically looks for this name\n            frame.src = runtimeOrigin +\n                \"/crossdomain/loginreceiver?completion_origin=\" + encodeURIComponent(completionOrigin);\n            frame.setAttribute(\"width\", 0);\n            frame.setAttribute(\"height\", 0);\n            frame.style.display = \"none\";\n            document.body.appendChild(frame);\n            return frame;\n        }\n    };\n\n    $__modules__.CordovaPopup = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        // Note: Cordova is PhoneGap.\n        // This login UI implementation uses the InAppBrowser plugin which is built into Cordova 2.3.0+.\n\n        var requiredCordovaVersion = { major: 2, minor: 3 };\n\n        exports.supportsCurrentRuntime = function () {\n            /// <summary>\n            /// Determines whether or not this login UI is usable in the current runtime.\n            /// </summary>\n\n            return !!currentCordovaVersion();\n        };\n\n        exports.login = function (startUri, endUri, callback) {\n            /// <summary>\n            /// Displays the login UI and calls back on completion\n            /// </summary>\n\n            // Ensure it's a sufficiently new version of Cordova, and if not fail synchronously so that\n            // the error message will show up in the browser console.\n            var foundCordovaVersion = currentCordovaVersion();\n            if (!isSupportedCordovaVersion(foundCordovaVersion)) {\n                var message = \"Not a supported version of Cordova. Detected: \" + foundCordovaVersion +\n                            \". Required: \" + requiredCordovaVersion.major + \".\" + requiredCordovaVersion.minor;\n                throw new Error(message);\n            }\n\n            // Initially we show a page with a spinner. This stays on screen until the login form has loaded.\n            var redirectionScript = \"<script>location.href = unescape('\" + window.escape(startUri) + \"')</script>\",\n                startPage = \"data:text/html,\" + encodeURIComponent(getSpinnerMarkup() + redirectionScript),\n                loginWindow = window.open(startPage, \"_blank\", \"location=no\"),\n                flowHasFinished = false,\n                loadEventHandler = function (evt) {\n                    if (!flowHasFinished && evt.url.indexOf(endUri) === 0) {\n                        flowHasFinished = true;\n                        loginWindow.close();\n                        var result = parseOAuthResultFromDoneUrl(evt.url);\n                        callback(result.error, result.oAuthToken);\n                    }\n                };\n\n            // Ideally we'd just use loadstart because it happens earlier, but it randomly skips\n            // requests on iOS, so we have to listen for loadstop as well (which is reliable).\n            loginWindow.addEventListener('loadstart', loadEventHandler);\n            loginWindow.addEventListener('loadstop', loadEventHandler);\n\n            loginWindow.addEventListener('exit', function (evt) {\n                if (!flowHasFinished) {\n                    flowHasFinished = true;\n                    callback(\"UserCancelled\", null);\n                }\n            });\n        };\n\n        function currentCordovaVersion() {\n            // If running inside Cordova, returns a string similar to \"2.3.0\". Otherwise, returns a falsey value.\n            // Note: We can only detect Cordova after its deviceready event has fired, so don't call login until then.\n            return window.device && window.device.cordova;\n        }\n\n        function isSupportedCordovaVersion(version) {\n            var versionParts = currentCordovaVersion().match(/^(\\d+).(\\d+)./);\n            if (versionParts) {\n                var major = Number(versionParts[1]),\n                    minor = Number(versionParts[2]),\n                    required = requiredCordovaVersion;\n                return (major > required.major) ||\n                       (major === required.major && minor >= required.minor);\n            }\n            return false;\n        }\n\n        function parseOAuthResultFromDoneUrl(url) {\n            var successMessage = extractMessageFromUrl(url, \"#token=\"),\n                errorMessage = extractMessageFromUrl(url, \"#error=\");\n            return {\n                oAuthToken: successMessage ? JSON.parse(successMessage) : null,\n                error: errorMessage\n            };\n        }\n\n        function extractMessageFromUrl(url, separator) {\n            var pos = url.indexOf(separator);\n            return pos < 0 ? null : decodeURIComponent(url.substring(pos + separator.length));\n        }\n\n        function getSpinnerMarkup() {\n            // The default InAppBrowser experience isn't ideal, as it just shows the user a blank white screen\n            // until the login form appears. This might take 10+ seconds during which it looks broken.\n            // Also on iOS it's possible for the InAppBrowser to initially show the results of the *previous*\n            // login flow if the InAppBrowser was dismissed before completion, which is totally undesirable.\n            // To fix both of these problems, we display a simple \"spinner\" graphic via a data: URL until\n            // the current login screen has loaded. We generate the spinner via CSS rather than referencing\n            // an animated GIF just because this makes the client library smaller overall.\n            var vendorPrefix = \"webkitTransform\" in document.documentElement.style ? \"-webkit-\" : \"\",\n                numSpokes = 12,\n                spokesMarkup = \"\";\n            for (var i = 0; i < numSpokes; i++) {\n                spokesMarkup += \"<div style='-prefix-transform: rotateZ(\" + (180 + i * 360 / numSpokes) + \"deg);\" +\n                                            \"-prefix-animation-delay: \" + (0.75 * i / numSpokes) + \"s;'></div>\";\n            }\n            return [\n                \"<!DOCTYPE html><html>\",\n                \"<head><meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1'></head>\",\n                \"<body><div id='spinner'>\" + spokesMarkup + \"</div>\",\n                \"<style type='text/css'>\",\n                \"    #spinner { position: absolute; top: 50%; left: 50%; -prefix-animation: spinner 10s linear infinite; }\",\n                \"    #spinner > div {\",\n                \"        background: #333; opacity: 0; position: absolute; top: 11px; left: -2px; width: 4px; height: 21px; border-radius: 2px;\",\n                \"        -prefix-transform-origin: 50% -11px; -prefix-animation: spinner-spoke 0.75s linear infinite;\",\n                \"    }\",\n                \"    @-prefix-keyframes spinner { 0% { -prefix-transform: rotateZ(0deg); } 100% { -prefix-transform: rotateZ(-360deg); } }\",\n                \"    @-prefix-keyframes spinner-spoke { 0% { opacity: 0; } 5% { opacity: 1; } 70% { opacity: 0; } 100% { opacity: 0; } }\",\n                \"</style>\",\n                \"</body></html>\"\n            ].join(\"\").replace(/-prefix-/g, vendorPrefix);\n        }\n    };\n\n    $__modules__.Extensions = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n        // Declare JSHint globals\n        /*global XMLHttpRequest:false */\n\n        var Validate = require('Validate');\n        var Platform = require('Platform');\n        var _ = exports;\n\n        exports.isNull = function (value) {\n            /// <summary>\n            /// Gets a value indicating whether the provided value is null (or\n            /// undefined).\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\" mayBeNull=\"true\">\n            /// The value to check.\n            /// </param>\n            /// <returns type=\"Boolean\">\n            /// A value indicating whether the provided value is null (or undefined).\n            /// </returns>\n\n            return value === null || value === undefined;\n        };\n\n        exports.isNullOrZero = function (value) {\n            /// <summary>\n            /// Gets a value indicating whether the provided value is null (or\n            /// undefined) or zero / empty string\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\" mayBeNull=\"true\">\n            /// The value to check.\n            /// </param>\n            /// <returns type=\"Boolean\">\n            /// A value indicating whether the provided value is null (or undefined) or zero or empty string.\n            /// </returns>\n\n            return value === null || value === undefined || value === 0 || value === '';\n        };\n\n        exports.isNullOrEmpty = function (value) {\n            /// <summary>\n            /// Gets a value indicating whether the provided value is null (or\n            /// undefined) or empty.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\" mayBeNull=\"true\">\n            /// The value to check.\n            /// </param>\n            /// <returns type=\"Boolean\">\n            /// A value inHdicating whether the provided value is null (or undefined).\n            /// </returns>\n\n            return _.isNull(value) || value.length === 0;\n        };\n\n        exports.format = function (message) {\n            /// <summary>\n            /// Format a string by replacing all of its numbered arguments with\n            /// parameters to the method. Arguments are of the form {0}, {1}, ..., like\n            /// in .NET.\n            /// </summary>\n            /// <param name=\"message\" type=\"string\" mayBeNull=\"false\">\n            /// The format string for the message.\n            /// </param>\n            /// <param name=\"arguments\" type=\"array\" optional=\"true\">\n            /// A variable number of arguments that can be used to format the message.\n            /// </param>\n            /// <returns type=\"string\">The formatted string.</returns>\n\n            Validate.isString(message, 'message');\n\n            // Note: There are several flaws in this implementation that we are\n            // ignoring for simplicity as it's only used internally.  Examples that\n            // could be handled better include:\n            //    format('{0} {1}', 'arg') => 'arg {1}'\n            //    format('{0} {1}', '{1}', 'abc') => 'abc abc'\n            //    format('{0}', '{0}') => <stops responding>\n\n            if (!_.isNullOrEmpty(message) && arguments.length > 1) {\n                for (var i = 1; i < arguments.length; i++) {\n                    var pattern = '{' + (i - 1) + '}';\n                    while (message.indexOf(pattern) !== -1) {\n                        message = message.replace(pattern, arguments[i]);\n                    }\n                }\n            }\n\n            return message;\n        };\n\n        exports.has = function (value, key) {\n            /// <summary>\n            /// Determine if an object defines a given property.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The object to check.</param>\n            /// <param name=\"key\" type=\"String\">\n            /// The name of the property to check for.\n            /// </param>\n            /// <returns type=\"Boolean\">\n            /// A value indicating whether the object defines the property.\n            /// </returns>\n\n            Validate.notNull(key, 'key');\n            Validate.isString(key, 'key');\n\n            return !_.isNull(value) && value.hasOwnProperty(key);\n        };\n\n        exports.hasProperty = function (object, properties) {\n            /// <summary>\n            /// Determines if an object has any of the passed in properties\n            /// </summary>\n            /// <returns type=\"boolean\">True if it contains any one of the properties\n            /// </returns>\n            for (var i = 0; i < properties.length; i++) {\n                if (_.has(object, properties[i])) {\n                    return true;\n                }\n            }\n            return false;\n        };\n\n        exports.extend = function extend(target, members) {\n            /// <summary>\n            /// Extends the target with the members of the members object.\n            /// </summary>\n            /// <param name=\"target\" type=\"Object\">The target object to extend.</param>\n            /// <param name=\"members\" type=\"Object\">The members object to add to the target.</param>\n            /// <returns type=\"Object\">The target object extended with the members.\n            /// </returns>\n            for (var member in members) {\n                if (members.hasOwnProperty(member)) {\n                    target[member] = members[member];\n                }\n            }\n            return target;\n        };\n\n        exports.isObject = function (value) {\n            /// <summary>\n            /// Determine if a value is an object.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is an object (or null), false othwerise.\n            /// </returns>\n\n            return _.isNull(value) || (typeof value === 'object' && !_.isDate(value));\n        };\n\n        exports.isValidId = function (value) {\n            /// <summary>\n            /// Determine if a value is an acceptable id for use by the mobile service\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a string or number, meeting all criteria, or false othwerise.\n            /// </returns>\n            if (_.isNullOrZero(value)) {\n                return false;\n            }\n\n            if (_.isString(value)) {\n                // Strings must contain at least one non whitespace character\n                if (value.length === 0 || value.length > 255 || value.trim().length === 0) {\n                    return false;\n                }\n\n                var ex = /[+\"\\/?`\\\\]|[\\u0000-\\u001F]|[\\u007F-\\u009F]|^\\.{1,2}$/;\n                if (value.match(ex) !== null) {\n                    return false;\n                }\n\n                return true;\n\n            } else if (_.isNumber(value)) {\n                return value > 0;\n            }\n\n            return false;\n        };\n\n        exports.isString = function (value) {\n            /// <summary>\n            /// Determine if a value is a string.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a string (or null), false othwerise.\n            /// </returns>\n\n            return _.isNull(value) || (typeof value === 'string');\n        };\n\n        exports.isNumber = function (value) {\n            /// <summary>\n            /// Determine if a value is a number.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a number, false othwerise.\n            /// </returns>\n\n            return !_.isNull(value) && (typeof value === 'number');\n        };\n\n        exports.isBool = function (value) {\n            /// <summary>\n            /// Determine if a value is a boolean.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a boolean, false othwerise.\n            /// </returns>\n            return !_.isNull(value) && (typeof value == 'boolean');\n        };\n\n        function classOf(value) {\n            return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();\n        }\n\n        exports.isDate = function (value) {\n            /// <summary>\n            /// Determine if a value is a date.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a date, false othwerise.\n            /// </returns>\n            return !_.isNull(value) && (classOf(value) == 'date');\n        };\n\n        exports.toJson = function (value) {\n            /// <summary>\n            /// Convert an object into JSON format.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to convert.</param>\n            /// <returns type=\"String\">The value as JSON.</returns>\n\n            return Platform.toJson(value);\n        };\n\n        exports.fromJson = function (value) {\n            /// <summary>\n            /// Convert an object from JSON format.\n            /// </summary>\n            /// <param name=\"value\" type=\"String\">The value to convert.</param>\n            /// <returns type=\"Object\">The value as an object.</returns>\n\n            var jsonValue = null;\n            if (!_.isNullOrEmpty(value)) {\n                // We're wrapping this so we can hook the process and perform custom JSON\n                // conversions\n                jsonValue = JSON.parse(\n                    value,\n                    function (k, v) {\n                        // Try to convert the value as a Date\n                        if (_.isString(v) && !_.isNullOrEmpty(v)) {\n                            var date = exports.tryParseIsoDateString(v);\n                            if (!_.isNull(date)) {\n                                return date;\n                            }\n                        }\n\n                        // TODO: Convert geolocations once they're supported\n                        // TODO: Expose the ability for developers to convert custom types\n\n                        // Return the original value if we couldn't do anything with it\n                        return v;\n                    });\n            }\n\n            return jsonValue;\n        };\n\n        exports.createUniqueInstallationId = function () {\n            /// <summary>\n            /// Create a unique identifier that can be used for the installation of\n            /// the current application.\n            /// </summary>\n            /// <returns type=\"String\">Unique identifier.</returns>\n\n            var pad4 = function (str) { return \"0000\".substring(str.length) + str; };\n            var hex4 = function () { return pad4(Math.floor(Math.random() * 0x10000 /* 65536 */).toString(16)); };\n\n            return (hex4() + hex4() + \"-\" + hex4() + \"-\" + hex4() + \"-\" + hex4() + \"-\" + hex4() + hex4() + hex4());\n        };\n\n        exports.mapProperties = function (instance, action) {\n            /// <summary>\n            /// Map a function over the key/value pairs in an instance.\n            /// </summary>\n            /// <param name=\"instance\" type=\"Object\">\n            /// The instance to map over.\n            /// </param>\n            /// <param name=\"action\" type=\"function (key, value)\">\n            /// The action to map over the key/value pairs.\n            /// </param>\n            /// <returns elementType=\"object\">Mapped results.</returns>\n\n            var results = [];\n            if (!_.isNull(instance)) {\n                var key = null;\n                for (key in instance) {\n                    results.push(action(key, instance[key]));\n                }\n            }\n            return results;\n        };\n\n        exports.pad = function (value, length, ch) {\n            /// <summary>\n            /// Pad the a value with a given character until it reaches the desired\n            /// length.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to pad.</param>\n            /// <param name=\"length\" type=\"Number\">The desired length.</param>\n            /// <param name=\"ch\" type=\"String\">The character to pad with.</param>\n            /// <returns type=\"String\">The padded string.</returns>\n\n            Validate.notNull(value, 'value');\n            Validate.isInteger(length, 'length');\n            Validate.isString(ch, 'ch');\n            Validate.notNullOrEmpty(ch, 'ch');\n            Validate.length(ch, 1, 'ch');\n\n            var text = value.toString();\n            while (text.length < length) {\n                text = ch + text;\n            }\n            return text;\n        };\n\n        exports.trimEnd = function (text, ch) {\n            /// <summary>\n            /// Trim all instance of a given characher from the end of a string.\n            /// </summary>\n            /// <param name=\"text\" type=\"String\" mayBeNull=\"false\">\n            /// The string to trim.\n            /// <param name=\"ch\" type=\"String\" mayBeNull=\"false\">\n            /// The character to trim.\n            /// </param>\n            /// <returns type=\"String\">The trimmed string.</returns>\n\n            Validate.isString(text, 'text');\n            Validate.notNull(text, 'text');\n            Validate.isString(ch, 'ch');\n            Validate.notNullOrEmpty('ch', 'ch');\n            Validate.length(ch, 1, 'ch');\n\n            var end = text.length - 1;\n            while (end >= 0 && text[end] === ch) {\n                end--;\n            }\n\n            return end >= 0 ?\n                text.substr(0, end + 1) :\n                '';\n        };\n\n        exports.trimStart = function (text, ch) {\n            /// <summary>\n            /// Trim all instance of a given characher from the start of a string.\n            /// </summary>\n            /// <param name=\"text\" type=\"String\" mayBeNull=\"false\">\n            /// The string to trim.\n            /// </param>\n            /// <param name=\"ch\" type=\"String\" mayBeNull=\"false\">\n            /// The character to trim.\n            /// </param>\n            /// <returns type=\"String\">The trimmed string.</returns>\n\n            Validate.isString(text, 'text');\n            Validate.notNull(text, 'text');\n            Validate.isString(ch, 'ch');\n            Validate.notNullOrEmpty(ch, 'ch');\n            Validate.length(ch, 1, 'ch');\n\n            var start = 0;\n            while (start < text.length && text[start] === ch) {\n                start++;\n            }\n\n            return start < text.length ?\n                text.substr(start, text.length - start) :\n                '';\n        };\n\n        exports.compareCaseInsensitive = function (first, second) {\n            /// <summary>\n            /// Compare two strings for equality while igorning case.\n            /// </summary>\n            /// <param name=\"first\" type=\"String\">First value.</param>\n            /// <param name=\"second\" type=\"String\">Second value.</param>\n            /// <returns type=\"Boolean\">Whether the strings are the same.</returns>\n\n            // NOTE: We prefer uppercase on Windows for historical reasons where it was\n            // possible to have alphabets where several uppercase characters mapped to\n            // the same lowercase character.\n\n            if (_.isString(first) && !_.isNullOrEmpty(first)) {\n                first = first.toUpperCase();\n            }\n\n            if (_.isString(first) && !_.isNullOrEmpty(second)) {\n                second = second.toUpperCase();\n            }\n\n            return first === second;\n        };\n\n        /// <field name=\"url\" type=\"Object\">\n        /// Path specific utilities for working with URIs.\n        /// </field>\n        exports.url = {\n            /// <field name=\"separator\" type=\"String\">\n            /// The path separator character used for combining path segments.\n            /// </field>\n            separator: '/',\n\n            combinePathSegments: function () {\n                /// <summary>\n                /// Combine several segments into a path.\n                /// </summary>\n                /// <param parameterArray=\"true\" elementType=\"String\">\n                /// The segments of the path that should be combined.\n                /// </param>\n                /// <returns type=\"String\">The combined path.</returns>\n\n                // Normalize the segements\n                var segments = [];\n                var i = 0;\n                Validate.notNullOrEmpty(arguments, 'arguments');\n                for (i = 0; i < arguments.length; i++) {\n                    var segment = arguments[i];\n                    Validate.isString(segment, _.format('argument[{0}]', i));\n\n                    if (i !== 0) {\n                        segment = _.trimStart(segment || '', _.url.separator);\n                    }\n                    if (i < arguments.length - 1) {\n                        segment = _.trimEnd(segment || '', _.url.separator);\n                    }\n\n                    segments.push(segment);\n                }\n\n                // Combine the segments\n                return segments.reduce(\n                    function (a, b) { return a + _.url.separator + b; });\n            },\n\n            getQueryString: function (parameters) {\n                /// <summary>\n                /// Converts an Object instance into a query string\n                /// </summary>\n                /// <param name=\"parameters\" type=\"Object\">The parameters from which to create a query string.</param>\n                /// <returns type=\"String\">A query string</returns>\n\n                Validate.notNull(parameters, 'parameters');\n                Validate.isObject(parameters, 'parameters');\n\n                var pairs = [];\n                for (var parameter in parameters) {\n                    var value = parameters[parameter];\n                    if (exports.isObject(value)) {\n                        value = exports.toJson(value);\n                    }\n                    pairs.push(encodeURIComponent(parameter) + \"=\" + encodeURIComponent(value));\n                }\n\n                return pairs.join(\"&\");\n            },\n\n            combinePathAndQuery: function (path, queryString) {\n                /// <summary>\n                /// Concatenates the URI query string to the URI path.\n                /// </summary>\n                /// <param name=\"path\" type=\"String>The URI path</param>\n                /// <param name=\"queryString\" type=\"String>The query string.</param>\n                /// <returns type=\"String>The concatenated URI path and query string.</returns>\n                Validate.notNullOrEmpty(path, 'path');\n                Validate.isString(path, 'path');\n                if (_.isNullOrEmpty(queryString)) {\n                    return path;\n                }\n                Validate.isString(queryString, 'queryString');\n\n                if (path.indexOf('?') >= 0) {\n                    return path + '&' + exports.trimStart(queryString, '?');\n                } else {\n                    return path + '?' + exports.trimStart(queryString, '?');\n                }\n            }\n        };\n\n        exports.tryParseIsoDateString = function (text) {\n            /// <summary>\n            /// Try to parse an ISO date string.\n            /// </summary>\n            /// <param name=\"text\" type=\"String\">The text to parse.</param>\n            /// <returns type=\"Date\">The parsed Date or null.</returns>\n\n            return Platform.tryParseIsoDateString(text);\n        };\n\n        exports.createError = function (exceptionOrMessage, request) {\n            /// <summary>\n            /// Wrap an error thrown as an exception.\n            /// </summary>\n            /// <param name=\"exceptionOrMessage\">\n            /// The exception or message to throw.\n            /// </param>\n            /// <param name=\"request\">\n            /// The failing request.\n            /// </param>\n            /// <returns>An object with error details</returns>\n\n            // Create an error object to return\n            var error = { message: Platform.getResourceString(\"Extensions_DefaultErrorMessage\") };\n            error.toString = function () {\n                return error.message;\n            };\n\n            if (request) {\n                error.request = request;\n                if (request.status === 0) {\n                    // Provide a more helpful message for connection failures\n                    error.message = Platform.getResourceString(\"Extensions_ConnectionFailureMessage\");\n                } else {\n                    // Try to pull out an error message from the response before\n                    // defaulting to the status\n                    var isText = false;\n                    if (request.getResponseHeader) {\n                        isText = request.getResponseHeader('Content-Type').toLowerCase().indexOf(\"text\") >= 0;\n                    }\n\n                    try {\n                        var response = JSON.parse(request.responseText);\n                        if (typeof response === 'string') {\n                            error.message = response;\n                        } else {\n                            error.message =\n                                response.error ||\n                                response.description ||\n                                request.statusText ||\n                                Platform.getResourceString(\"Extensions_DefaultErrorMessage\");\n                        }\n                    } catch (ex) {\n                        if (isText) {\n                            error.message = request.responseText;\n                        } else {\n                            error.message =\n                                request.statusText ||\n                                Platform.getResourceString(\"Extensions_DefaultErrorMessage\");\n                        }\n                    }\n                }\n            } else if (_.isString(exceptionOrMessage) && !_.isNullOrEmpty(exceptionOrMessage)) {\n                // If it's a string, just use that as the message\n                error.message = exceptionOrMessage;\n            } else if (!_.isNull(exceptionOrMessage)) {\n                // Otherwise we'll use the object as an exception and leave the\n                // default error message\n                error.exception = exceptionOrMessage;\n            }\n\n            return error;\n        };\n    };\n\n    $__modules__.PostMessageExchange = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        // window.postMessage does not have a concept of responses, so this class associates messages\n        // with IDs so that we can identify which message a reply refers to.\n\n        var Promises = require('Promises'),\n            messageTimeoutDuration = 5 * 60 * 1000; // If no reply after 5 mins, surely there will be no reply\n\n        function PostMessageExchange() {\n            var self = this;\n            self._lastMessageId = 0;\n            self._hasListener = false;\n            self._pendingMessages = {};\n        }\n\n        PostMessageExchange.prototype.request = function (targetWindow, messageData, origin) {\n            /// <summary>\n            /// Issues a request to the target window via postMessage\n            /// </summary>\n            /// <param name=\"targetWindow\" type=\"Object\">\n            /// The window object (on an actual window, or iframe) to send the request to\n            /// </param>\n            /// <param name=\"messageData\" type=\"Object\">\n            /// A JSON-serializable object to pass to the target\n            /// </param>\n            /// <param name=\"origin\" type=\"String\">\n            /// The expected origin (e.g., \"http://example.com:81\") of the recipient window.\n            /// If at runtime the origin does not match, the request will not be issued.\n            /// </param>\n            /// <returns type=\"Object\">\n            /// A promise that completes once the target window sends back a reply, with\n            /// value equal to that reply.\n            /// </returns>\n\n            var self = this,\n                messageId = ++self._lastMessageId,\n                envelope = { messageId: messageId, contents: messageData };\n\n            self._ensureHasListener();\n\n            return new Promises.Promise(function (complete, error) {\n                // Track callbacks and origin data so we can complete the promise only for valid replies\n                self._pendingMessages[messageId] = {\n                    messageId: messageId,\n                    complete: complete,\n                    error: error,\n                    targetWindow: targetWindow,\n                    origin: origin\n                };\n\n                // Don't want to leak memory, so if there's no reply, forget about it eventually\n                self._pendingMessages[messageId].timeoutId = global.setTimeout(function () {\n                    var pendingMessage = self._pendingMessages[messageId];\n                    if (pendingMessage) {\n                        delete self._pendingMessages[messageId];\n                        pendingMessage.error({ status: 0, statusText: \"Timeout\", responseText: null });\n                    }\n                }, messageTimeoutDuration);\n\n                targetWindow.postMessage(JSON.stringify(envelope), origin);\n            });\n        };\n\n        PostMessageExchange.prototype._ensureHasListener = function () {\n            if (this._hasListener) {\n                return;\n            }\n            this._hasListener = true;\n\n            var self = this,\n                boundHandleMessage = function () {\n                    self._handleMessage.apply(self, arguments);\n                };\n\n            if (window.addEventListener) {\n                window.addEventListener('message', boundHandleMessage, false);\n            } else {\n                // For IE8\n                window.attachEvent('onmessage', boundHandleMessage);\n            }\n        };\n\n        PostMessageExchange.prototype._handleMessage = function (evt) {\n            var envelope = this._tryDeserializeMessage(evt.data),\n                messageId = envelope && envelope.messageId,\n                pendingMessage = messageId && this._pendingMessages[messageId],\n                isValidReply = pendingMessage && pendingMessage.targetWindow === evt.source &&\n                               pendingMessage.origin === getOriginRoot(evt.origin);\n\n            if (isValidReply) {\n                global.clearTimeout(pendingMessage.timeoutId); // No point holding this in memory until the timeout expires\n                delete this._pendingMessages[messageId];\n                pendingMessage.complete(envelope.contents);\n            }\n        };\n\n        PostMessageExchange.prototype._tryDeserializeMessage = function (messageString) {\n            if (!messageString || typeof messageString !== 'string') {\n                return null;\n            }\n\n            try {\n                return JSON.parse(messageString);\n            } catch (ex) {\n                // It's not JSON, so it's not a message for us. Ignore it.\n                return null;\n            }\n        };\n\n        function getOriginRoot(url) {\n            // Returns the proto/host/port part of a URL, i.e., the part that defines the access boundary\n            // for same-origin policy. This is of the form \"protocol://host:port\", where \":port\" is omitted\n            // if it is the default port for that protocol.\n            var parsedUrl = parseUrl(url),\n                portString = parsedUrl.port ? parsedUrl.port.toString() : null,\n                isDefaultPort = (parsedUrl.protocol === 'http:' && portString === '80') ||\n                                (parsedUrl.protocol === 'https:' && portString === '443'),\n                portSuffix = (portString && !isDefaultPort) ? ':' + portString : '';\n            return parsedUrl.protocol + '//' + parsedUrl.hostname + portSuffix;\n        }\n\n        function parseUrl(url) {\n            // https://gist.github.com/2428561 - works on IE8+. Could switch to a more manual, less magic\n            // parser in the future if we need to support IE < 8.\n            var elem = global.document.createElement('a');\n            elem.href = url;\n            return elem;\n        }\n\n        exports.instance = new PostMessageExchange();\n        exports.getOriginRoot = getOriginRoot;\n    };\n\n    $__modules__.Promises = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        // In WinJS, we use WinJS.Promise.\n        // There's no native equivalent for regular JavaScript in the browser, so we implement it here.\n        // This implementation conforms to Promises/A+, making it compatible with WinJS.Promise.\n\n        // Note: There is a standard Promises/A+ test suite, to which this implementation conforms.\n        // See test\\Microsoft.Azure.Zumo.Web.Test\\promiseTests\n\n        // Declare JSHint globals\n        /*global setTimeout:false */\n\n        (function (exports) {\n            \"use strict\";\n\n            var resolutionState = { success: {}, error: {} },\n                bind = function (func, target) { return function () { func.apply(target, arguments); }; }, // Older browsers lack Function.prototype.bind\n                isGenericPromise = function (obj) { return obj && (typeof obj.then === \"function\"); };\n\n            function Promise(init) {\n                this._callbackFrames = [];\n                this._resolutionState = null;\n                this._resolutionValueOrError = null;\n                this._resolveSuccess = bind(this._resolveSuccess, this);\n                this._resolveError = bind(this._resolveError, this);\n\n                if (init) {\n                    init(this._resolveSuccess, this._resolveError);\n                }\n            }\n\n            Promise.prototype.then = function (success, error) {\n                var callbackFrame = { success: success, error: error, chainedPromise: new Promise() };\n\n                // If this promise is already resolved, invoke callbacks immediately. Otherwise queue them.\n                if (this._resolutionState) {\n                    this._invokeCallback(callbackFrame);\n                } else {\n                    this._callbackFrames.push(callbackFrame);\n                }\n\n                return callbackFrame.chainedPromise;\n            };\n\n            Promise.prototype._resolveSuccess = function (val) { this._resolve(resolutionState.success, val); };\n            Promise.prototype._resolveError = function (err) { this._resolve(resolutionState.error, err); };\n\n            Promise.prototype._resolve = function (state, valueOrError) {\n                if (this._resolutionState) {\n                    // Can't affect resolution state when already resolved. We silently ignore the request, without throwing an error,\n                    // to prevent concurrent resolvers from affecting each other during race conditions.\n                    return;\n                }\n\n                this._resolutionState = state;\n                this._resolutionValueOrError = valueOrError;\n\n                // Notify all queued callbacks\n                for (var i = 0, j = this._callbackFrames.length; i < j; i++) {\n                    this._invokeCallback(this._callbackFrames[i]);\n                }\n            };\n\n            Promise.prototype._invokeCallback = function (frame) {\n                var callbackToInvoke = this._resolutionState === resolutionState.success ? frame.success : frame.error;\n                if (typeof callbackToInvoke === \"function\") {\n                    // Call the supplied callback either to transform the result (for success) or to handle the error (for error)\n                    // The setTimeout ensures handlers are always invoked asynchronosly, even if the promise was already resolved,\n                    // to avoid callers having to differentiate between sync/async cases\n                    setTimeout(bind(function () {\n                        var passthroughValue, passthroughState, callbackDidNotThrow = true;\n                        try {\n                            passthroughValue = callbackToInvoke(this._resolutionValueOrError);\n                            passthroughState = resolutionState.success;\n                        } catch (ex) {\n                            callbackDidNotThrow = false;\n                            passthroughValue = ex;\n                            passthroughState = resolutionState.error;\n                        }\n\n                        if (callbackDidNotThrow && isGenericPromise(passthroughValue)) {\n                            // By returning a futher promise from a callback, you can insert it into the chain. This is the basis for composition.\n                            // This rule is in the Promises/A+ spec, but not Promises/A.\n                            passthroughValue.then(frame.chainedPromise._resolveSuccess, frame.chainedPromise._resolveError);\n                        } else {\n                            frame.chainedPromise._resolve(passthroughState, passthroughValue);\n                        }\n                    }, this), 1);\n                } else {\n                    // No callback of the applicable type, so transparently pass existing state/value down the chain\n                    frame.chainedPromise._resolve(this._resolutionState, this._resolutionValueOrError);\n                }\n            };\n\n            // -----------\n            // Everything from here on is extensions beyond the Promises/A+ spec intended to ease code\n            // sharing between WinJS and browser-based Mobile Services apps\n\n            Promise.prototype.done = function (success, error) {\n                this.then(success, error).then(null, function (err) {\n                    // \"done\" throws any final errors as global uncaught exceptions. The setTimeout\n                    // ensures the exception won't get caught in the Promises machinery or user code.\n                    setTimeout(function () { throw new Error(err); }, 1);\n                });\n                return undefined; // You can't chain onto a .done()\n            };\n\n            // Note that we're not implementing any of the static WinJS.Promise.* functions because\n            // the Mobile Services client doesn't even expose any static \"Promise\" object that you\n            // could reference static functions on. Developers who want to use any of the WinJS-style\n            // static functions (any, join, theneach, ...) can use any Promises/A-compatible library\n            // such as when.js.\n            //\n            // Additionally, we don't implement .cancel() yet because Mobile Services operations don't\n            // support cancellation in WinJS yet either. This could be added to both WinJS and Web\n            // client libraries in the future.\n\n            exports.Promise = Promise;\n        })(exports);\n    };\n\n    $__modules__.Validate = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"..\\Generated\\Zumo.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Platform = require('Platform');\n\n        exports.notNull = function (value, name) {\n            /// <summary>\n            /// Ensure the value is not null (or undefined).\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (_.isNull(value)) {\n                throw _.format(Platform.getResourceString(\"Validate_NotNullError\"), name || 'Value');\n            }\n        };\n\n        exports.notNullOrEmpty = function (value, name) {\n            /// <summary>\n            /// Ensure the value is not null, undefined, or empty.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (_.isNullOrEmpty(value)) {\n                throw _.format(Platform.getResourceString(\"Validate_NotNullOrEmptyError\"), name || 'Value');\n            }\n        };\n\n        exports.notNullOrZero = function (value, name) {\n            /// <summary>\n            /// Ensure the value is not null, undefined, zero, or empty.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (_.isNullOrZero(value)) {\n                throw _.format(Platform.getResourceString(\"Validate_NotNullOrEmptyError\"), name || 'Value');\n            }\n        };\n\n        exports.isValidId = function (value, name) {\n            /// <summary>\n            /// Ensure the value is a valid id for mobile services.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (!_.isValidId(value)) {\n                throw _.format(Platform.getResourceString(\"Validate_InvalidId\"), name || 'id');\n            }\n        };\n\n        exports.isDate = function (value, name) {\n            /// <summary>\n            /// Ensure the value is a date.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n            if (!_.isDate(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'Date',\n                    typeof value);\n            }\n        };\n\n        exports.isNumber = function (value, name) {\n            /// <summary>\n            /// Ensure the value is a number.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n\n            if (!_.isNumber(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'Number',\n                    typeof value);\n            }\n        };\n\n        exports.isValidParametersObject = function (value, name) {\n            /// <summary>\n            /// Ensure the Object instance of user-defined parameters is valid.\n            /// </summary>\n            /// <param name=\"value\">The parameters to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n            exports.isObject(value, name);\n\n            for (var parameter in value) {\n                if (parameter.indexOf('$') === 0) {\n                    throw _.format(\n                        Platform.getResourceString(\"Validate_InvalidUserParameter\"),\n                        name,\n                        parameter);\n                }\n            }\n        };\n\n        exports.isInteger = function (value, name) {\n            /// <summary>\n            /// Ensure the value is an integer.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n            exports.isNumber(value, name);\n\n            if (parseInt(value, 10) !== parseFloat(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'number',\n                    typeof value);\n            }\n        };\n\n        exports.isString = function (value, name) {\n            /// <summary>\n            /// Ensure the value is a string.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (!_.isString(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'string',\n                    typeof value);\n            }\n        };\n\n        exports.isObject = function (value, name) {\n            /// <summary>\n            /// Ensure the value is an Object.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (!_.isObject(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'object',\n                    typeof value);\n            }\n        };\n\n        exports.isArray = function (value, name) {\n            /// <summary>\n            /// Ensure the value is an Array.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (!Array.isArray(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'array',\n                    typeof value);\n            }\n        };\n\n        exports.length = function (value, length, name) {\n            /// <summary>\n            /// Ensure the value is of a given length.\n            /// </summary>\n            /// <param name=\"value\" type=\"String\">\n            /// The value to check.\n            /// </param>\n            /// <param name=\"length\" type=\"Number\" integer=\"true\">\n            /// The desired length of the value.\n            /// </param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n            exports.isInteger(length, 'length');\n\n            if (value.length !== length) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_LengthUnexpected\"),\n                    name || 'Value',\n                    length,\n                    value.length);\n            }\n        };\n    };\n\n    $__modules__.JavaScript = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var JS, JavaScript, JavaScriptToQueryVisitor, PartialEvaluator, esprima;\n\n            esprima = require('esprima');\n\n            JS = require('./JavaScriptNodes');\n\n            PartialEvaluator = require('./PartialEvaluator').PartialEvaluator;\n\n            JavaScriptToQueryVisitor = require('./JavaScriptToQueryVisitor').JavaScriptToQueryVisitor;\n\n\n            /*\n             * Define operations on JavaScript\n             */\n\n            exports.JavaScript = JavaScript = (function () {\n                function JavaScript() { }\n\n\n                /*\n                 * Static method to transform a constraint specified as a function into\n                 * a QueryExpression tree.\n                 */\n\n                JavaScript.transformConstraint = function (func, env) {\n\n                    /*\n                     * Parse the body of the function into a JavaScriptExpression tree\n                     * (into a context that also contains its source and manually reified\n                     * environment)\n                     */\n                    var context, translator;\n                    context = JavaScript.getExpression(func, env);\n\n                    /*\n                     * Evaluate any independent subexpressions and turn them into\n                     * literals.\n                     */\n                    context.expression = PartialEvaluator.evaluate(context);\n\n                    /*\n                     * Convert the JavaScriptExpression tree into a QueryExpression tree\n                     */\n                    translator = new JavaScriptToQueryVisitor(context);\n                    return translator.visit(context.expression);\n                };\n\n\n                /*\n                 * Static method to walk a projection specified as a function and\n                 * determine which fields it uses.\n                 */\n\n                JavaScript.getProjectedFields = function (func) {\n\n                    /*\n                     * This currently returns an empty array which indicates all fields.\n                     * At some point we'll need to go through and walk the expression\n                     * tree for func and see exactly which fields it uses.  This is\n                     * complicated by the fact that we support arbitrary expressions and\n                     * could for example pass 'this' to a nested lambda which means we\n                     * can't just check for MemberExpressions (though in that case we'll\n                     * probably just default to [] rather than trying to do alias\n                     * analysis across function calls, etc.)\n                     */\n                    return [];\n                };\n\n\n                /*\n                 * Turn a function and its explicitly passed environment into an\n                 * expression tree\n                 */\n\n                JavaScript.getExpression = function (func, env) {\n\n                    /*\n                     * An anonymous function isn't considered a valid program, so we'll wrap\n                     * it in an assignment statement to keep the parser happy\n                     */\n                    var environment, expr, i, name, names, program, source, _i, _len, _ref, _ref1, _ref10, _ref11, _ref12, _ref13, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;\n                    source = \"var _$$_stmt_$$_ = \" + func + \";\";\n\n                    /*\n                     * Use esprima to parse the source of the function body (and have it\n                     * return source locations in character ranges )\n                     */\n                    program = esprima.parse(source, {\n                        range: true\n                    });\n\n                    /*\n                     * Get the expression from return statement of the function body to use\n                     * as our lambda expression\n                     */\n                    expr = (program != null ? program.type : void 0) === 'Program' && (program != null ? (_ref = program.body) != null ? _ref.length : void 0 : void 0) === 1 && ((_ref1 = program.body[0]) != null ? _ref1.type : void 0) === 'VariableDeclaration' && ((_ref2 = program.body[0]) != null ? (_ref3 = _ref2.declarations) != null ? _ref3.length : void 0 : void 0) === 1 && ((_ref4 = program.body[0].declarations[0]) != null ? _ref4.type : void 0) === 'VariableDeclarator' && ((_ref5 = program.body[0].declarations[0]) != null ? (_ref6 = _ref5.init) != null ? _ref6.type : void 0 : void 0) === 'FunctionExpression' && ((_ref7 = program.body[0].declarations[0].init) != null ? (_ref8 = _ref7.body) != null ? _ref8.type : void 0 : void 0) === 'BlockStatement' && ((_ref9 = program.body[0].declarations[0].init.body) != null ? (_ref10 = _ref9.body) != null ? _ref10.length : void 0 : void 0) === 1 && ((_ref11 = program.body[0].declarations[0].init.body.body[0]) != null ? _ref11.type : void 0) === 'ReturnStatement' && ((_ref12 = program.body[0].declarations[0].init.body.body[0]) != null ? _ref12.argument : void 0);\n                    if (!expr) {\n                        throw \"Expected a predicate with a single return statement, not \" + func;\n                    }\n\n                    /*\n                     * Create the environment mqpping parameters to values\n                     */\n                    names = (_ref13 = program.body[0].declarations[0].init.params) != null ? _ref13.map(function (p) {\n                        return p.name;\n                    }) : void 0;\n                    if (names.length > env.length) {\n                        throw \"Expected value(s) for parameter(s) \" + names.slice(env.length);\n                    } else if (env.length > names.length) {\n                        throw \"Expected parameter(s) for value(s) \" + env.slice(names.length);\n                    }\n                    environment = {};\n                    for (i = _i = 0, _len = names.length; _i < _len; i = ++_i) {\n                        name = names[i];\n                        environment[name] = env[i];\n                    }\n                    return {\n\n                        /*\n                         * Return the environment context\n                         */\n                        source: source,\n                        expression: expr,\n                        environment: environment\n                    };\n                };\n\n                return JavaScript;\n\n            })();\n\n        }).call(this);\n    };\n\n    $__modules__.JavaScriptNodes = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n\n        /*\n         * Define the Esprima node structure for JavaScript parse trees.  This is mostly\n         * identical to the SpiderMonkey API defined at\n         * https://developer.mozilla.org/en/SpiderMonkey/Parser_API without any of the\n         * SpiderMonkey specifics and a few simplifications made by Esprima (i.e. it\n         * doesn't have separate objects for operator types, etc.).\n         *\n         * It's important to note that the Esprima parse tree will return object literals\n         * and not instances of these types.  They're provided primarily for reference\n         * and for easily constructing new subtrees during transformations by visitors.\n         */\n\n\n        /* Get the base Node and Visitor classes. */\n\n        (function () {\n            var ArrayExpression, ArrayPattern, AssignmentExpression, BinaryExpression, BlockStatement, BreakStatement, CallExpression, CatchClause, ConditionalExpression, ContinueStatement, DebuggerStatement, Declaration, DoWhileStatement, EmptyStatement, Expression, ExpressionStatement, ForInStatement, ForStatement, Function, FunctionDeclaration, FunctionExpression, Identifier, IfStatement, JavaScriptNode, JavaScriptVisitor, LabeledStatement, Literal, LogicalExpression, MemberExpression, NewExpression, Node, ObjectExpression, ObjectPattern, Pattern, Program, ReturnStatement, SequenceExpression, Statement, SwitchCase, SwitchStatement, ThisExpression, ThrowStatement, TryStatement, UnaryExpression, UpdateExpression, VariableDeclaration, VariableDeclarator, Visitor, WhileStatement, WithStatement, _ref,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ref = require('./Node'), Node = _ref.Node, Visitor = _ref.Visitor;\n\n\n            /*\n             * Base node for all JavaScript nodes.\n             */\n\n            exports.JavaScriptNode = JavaScriptNode = (function (_super) {\n                __extends(JavaScriptNode, _super);\n\n                function JavaScriptNode() {\n                    JavaScriptNode.__super__.constructor.call(this);\n                }\n\n                return JavaScriptNode;\n\n            })(Node);\n\n\n            /*\n             * Base visitor for all JavaScript nodes.\n             */\n\n            exports.JavaScriptVisitor = JavaScriptVisitor = (function (_super) {\n                __extends(JavaScriptVisitor, _super);\n\n                function JavaScriptVisitor() {\n                    JavaScriptVisitor.__super__.constructor.call(this);\n                }\n\n                JavaScriptVisitor.prototype.JavaScriptNode = function (node) {\n                    return node;\n                };\n\n                return JavaScriptVisitor;\n\n            })(Visitor);\n\n\n            /*\n             * A complete program source tree.\n             */\n\n            exports.Program = Program = (function (_super) {\n                __extends(Program, _super);\n\n\n                /*\n                 * @elements: [Statement]\n                 */\n\n                function Program(elements) {\n                    this.elements = elements;\n                    Program.__super__.constructor.call(this);\n                }\n\n                return Program;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Program = function (node) {\n                node = this.JavaScriptNode(node);\n                node.elements = this.visit(node.elements);\n                return node;\n            };\n\n\n            /*\n             * A function declaration or expression. The body of the function is a  block\n             * statement.\n             */\n\n            exports.Function = Function = (function (_super) {\n                __extends(Function, _super);\n\n\n                /*\n                 * @id: Identifier | null\n                 * @params: [Pattern]\n                 * @body: BlockStatement\n                 */\n\n                function Function(id, params, body) {\n                    this.id = id;\n                    this.params = params;\n                    this.body = body;\n                    Function.__super__.constructor.call(this);\n                }\n\n                return Function;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Function = function (node) {\n                node = this.JavaScriptNode(node);\n                node.id = this.visit(node.id);\n                node.params = this.visit(node.params);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * Any statement.\n             */\n\n            exports.Statement = Statement = (function (_super) {\n                __extends(Statement, _super);\n\n                function Statement() {\n                    Statement.__super__.constructor.call(this);\n                }\n\n                return Statement;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Statement = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * An empty statement, i.e., a solitary semicolon.\n             */\n\n            exports.EmptyStatement = EmptyStatement = (function (_super) {\n                __extends(EmptyStatement, _super);\n\n                function EmptyStatement() {\n                    EmptyStatement.__super__.constructor.call(this);\n                }\n\n                return EmptyStatement;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.EmptyStatement = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * A block statement, i.e., a sequence of statements surrounded by braces.\n             */\n\n            exports.BlockStatement = BlockStatement = (function (_super) {\n                __extends(BlockStatement, _super);\n\n\n                /*\n                 * @body: [Statement]\n                 */\n\n                function BlockStatement(body) {\n                    this.body = body;\n                    BlockStatement.__super__.constructor.call(this);\n                }\n\n                return BlockStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.BlockStatement = function (node) {\n                node = this.Statement(node);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * An expression statement, i.e., a statement consisting of a single expression.\n             */\n\n            exports.ExpressionStatement = ExpressionStatement = (function (_super) {\n                __extends(ExpressionStatement, _super);\n\n                function ExpressionStatement() {\n                    ExpressionStatement.__super__.constructor.call(this);\n                }\n\n                return ExpressionStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ExpressionStatement = function (node) {\n                node = this.Statement(node);\n                return node;\n            };\n\n\n            /*\n             * An if statement.\n             */\n\n            exports.IfStatement = IfStatement = (function (_super) {\n                __extends(IfStatement, _super);\n\n\n                /*\n                 * @test: Expression\n                 * @consequent: Statement\n                 * @alternate: Statement | null\n                 */\n\n                function IfStatement(test, consequent, alternate) {\n                    this.test = test;\n                    this.consequent = consequent;\n                    this.alternate = alternate;\n                    IfStatement.__super__.constructor.call(this);\n                }\n\n                return IfStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.IfStatement = function (node) {\n                node = this.Statement(node);\n                node.test = this.visit(node.test);\n                node.consequent = this.visit(node.consequent);\n                node.alternate = this.visit(node.alternate);\n                return node;\n            };\n\n\n            /*\n             * A labeled statement, i.e., a statement prefixed by a break/continue label.\n             */\n\n            exports.LabeledStatement = LabeledStatement = (function (_super) {\n                __extends(LabeledStatement, _super);\n\n\n                /*\n                 * @label: Identifier\n                 * @body: Statement\n                 */\n\n                function LabeledStatement(label, body) {\n                    this.label = label;\n                    this.body = body;\n                    LabeledStatement.__super__.constructor.call(this);\n                }\n\n                return LabeledStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.LabeledStatement = function (node) {\n                node = this.Statement(node);\n                node.label = this.visit(node.label);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A break statement.\n             */\n\n            exports.BreakStatement = BreakStatement = (function (_super) {\n                __extends(BreakStatement, _super);\n\n\n                /*\n                 * @label: Identifier | null\n                 */\n\n                function BreakStatement(label) {\n                    this.label = label;\n                    BreakStatement.__super__.constructor.call(this);\n                }\n\n                return BreakStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.BreakStatement = function (node) {\n                node = this.Statement(node);\n                node.label = this.visit(node.label);\n                return node;\n            };\n\n\n            /*\n            A continue statement.\n             */\n\n            exports.ContinueStatement = ContinueStatement = (function (_super) {\n                __extends(ContinueStatement, _super);\n\n\n                /*\n                @label: Identifier | null\n                 */\n\n                function ContinueStatement(label) {\n                    this.label = label;\n                    ContinueStatement.__super__.constructor.call(this);\n                }\n\n                return ContinueStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ContinueStatement = function (node) {\n                node = this.Statement(node);\n                node.label = this.visit(node.label);\n                return node;\n            };\n\n\n            /*\n             * A with statement.\n             */\n\n            exports.WithStatement = WithStatement = (function (_super) {\n                __extends(WithStatement, _super);\n\n\n                /*\n                 * @object: Expression\n                 * @body: Statement\n                 */\n\n                function WithStatement(object, body) {\n                    this.object = object;\n                    this.body = body;\n                    WithStatement.__super__.constructor.call(this);\n                }\n\n                return WithStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.WithStatement = function (node) {\n                node = this.Statement(node);\n                node.object = this.visit(node.object);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A switch statement.\n             */\n\n            exports.SwitchStatement = SwitchStatement = (function (_super) {\n                __extends(SwitchStatement, _super);\n\n\n                /*\n                 * @discriminant: Expression\n                 * @cases: [SwitchCase]\n                 */\n\n                function SwitchStatement(discriminant, cases) {\n                    this.discriminant = discriminant;\n                    this.cases = cases;\n                    SwitchStatement.__super__.constructor.call(this);\n                }\n\n                return SwitchStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.SwitchStatement = function (node) {\n                node = this.Statement(node);\n                node.discriminant = this.visit(node.discriminant);\n                node.cases = this.visit(node.cases);\n                return node;\n            };\n\n\n            /*\n             * A return statement.\n             */\n\n            exports.ReturnStatement = ReturnStatement = (function (_super) {\n                __extends(ReturnStatement, _super);\n\n\n                /*\n                 * @argument: Expression | null\n                 */\n\n                function ReturnStatement(argument) {\n                    this.argument = argument;\n                    ReturnStatement.__super__.constructor.call(this);\n                }\n\n                return ReturnStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ReturnStatement = function (node) {\n                node = this.Statement(node);\n                node.argument = this.visit(node.argument);\n                return node;\n            };\n\n\n            /*\n             * A throw statement.\n             */\n\n            exports.ThrowStatement = ThrowStatement = (function (_super) {\n                __extends(ThrowStatement, _super);\n\n\n                /*\n                 * @argument: Expression\n                 */\n\n                function ThrowStatement(argument) {\n                    this.argument = argument;\n                    ThrowStatement.__super__.constructor.call(this);\n                }\n\n                return ThrowStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ThrowStatement = function (node) {\n                node = this.Statement(node);\n                node.argument = this.visit(node.argument);\n                return node;\n            };\n\n\n            /*\n             * A try statement.\n             */\n\n            exports.TryStatement = TryStatement = (function (_super) {\n                __extends(TryStatement, _super);\n\n\n                /*\n                 * @block: BlockStatement\n                 * @handlers: [CatchClause]\n                 * @finalizer: BlockStatement | null\n                 */\n\n                function TryStatement(block, handlers, finalizer) {\n                    this.block = block;\n                    this.handlers = handlers;\n                    this.finalizer = finalizer;\n                    TryStatement.__super__.constructor.call(this);\n                }\n\n                return TryStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.TryStatement = function (node) {\n                node = this.Statement(node);\n                node.block = this.visit(node.block);\n                node.handlers = this.visit(node.handlers);\n                node.finalizer = this.visit(node.finalizer);\n                return node;\n            };\n\n\n            /*\n             * A while statement.\n             */\n\n            exports.WhileStatement = WhileStatement = (function (_super) {\n                __extends(WhileStatement, _super);\n\n\n                /*\n                 * @test: Expression\n                 * @body: Statement\n                 */\n\n                function WhileStatement(test, body) {\n                    this.test = test;\n                    this.body = body;\n                    WhileStatement.__super__.constructor.call(this);\n                }\n\n                return WhileStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.WhileStatement = function (node) {\n                node = this.Statement(node);\n                node.test = this.visit(node.test);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A do/while statement.\n             */\n\n            exports.DoWhileStatement = DoWhileStatement = (function (_super) {\n                __extends(DoWhileStatement, _super);\n\n\n                /*\n                 * @body: Statement\n                 * @test: Expression\n                 */\n\n                function DoWhileStatement(body, test) {\n                    this.body = body;\n                    this.test = test;\n                    DoWhileStatement.__super__.constructor.call(this);\n                }\n\n                return DoWhileStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.DoWhileStatement = function (node) {\n                node = this.Statement(node);\n                node.body = this.visit(node.body);\n                node.test = this.visit(node.test);\n                return node;\n            };\n\n\n            /*\n             * A for statement.\n             */\n\n            exports.ForStatement = ForStatement = (function (_super) {\n                __extends(ForStatement, _super);\n\n\n                /*\n                 * @init: VariableDeclaration | Expression | null\n                 * @test: Expression | null\n                 * @update: Expression | null\n                 * @body: Statement\n                 */\n\n                function ForStatement(init, test, update, body) {\n                    this.init = init;\n                    this.test = test;\n                    this.update = update;\n                    this.body = body;\n                    ForStatement.__super__.constructor.call(this);\n                }\n\n                return ForStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ForStatement = function (node) {\n                node = this.Statement(node);\n                node.init = this.visit(node.init);\n                node.test = this.visit(node.test);\n                node.update = this.visit(node.update);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A for/in statement, or, if each is true, a for each/in statement.\n             */\n\n            exports.ForInStatement = ForInStatement = (function (_super) {\n                __extends(ForInStatement, _super);\n\n\n                /*\n                 * @left: VariableDeclaration |  Expression\n                 * @right: Expression\n                 * @body: Statement\n                 */\n\n                function ForInStatement(left, right, body) {\n                    this.left = left;\n                    this.right = right;\n                    this.body = body;\n                    ForInStatement.__super__.constructor.call(this);\n                }\n\n                return ForInStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ForInStatement = function (node) {\n                node = this.Statement(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A debugger statement.\n             */\n\n            exports.DebuggerStatement = DebuggerStatement = (function (_super) {\n                __extends(DebuggerStatement, _super);\n\n                function DebuggerStatement() {\n                    DebuggerStatement.__super__.constructor.call(this);\n                }\n\n                return DebuggerStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.DebuggerStatement = function (node) {\n                node = this.Statement(node);\n                return node;\n            };\n\n\n            /*\n             * Any declaration node. Note that declarations are considered statements; this\n             * is because declarations can appear in any statement context in the language.\n             */\n\n            exports.Declaration = Declaration = (function (_super) {\n                __extends(Declaration, _super);\n\n                function Declaration() {\n                    Declaration.__super__.constructor.call(this);\n                }\n\n                return Declaration;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.Declaration = function (node) {\n                node = this.Statement(node);\n                return node;\n            };\n\n\n            /*\n             * A function declaration.  Note: The id field cannot be null.\n             */\n\n            exports.FunctionDeclaration = FunctionDeclaration = (function (_super) {\n                __extends(FunctionDeclaration, _super);\n\n\n                /*\n                 * @id: Identifier\n                 * @params: [ Pattern ]\n                 * @body: BlockStatement | Expression\n                 */\n\n                function FunctionDeclaration(id, params, body) {\n                    this.id = id;\n                    this.params = params;\n                    this.body = body;\n                    FunctionDeclaration.__super__.constructor.call(this);\n                }\n\n                return FunctionDeclaration;\n\n            })(Declaration);\n\n            JavaScriptVisitor.prototype.FunctionDeclaration = function (node) {\n                node = this.Declaration(node);\n                node.id = this.visit(node.id);\n                node.params = this.visit(node.params);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A variable declaration, via one of var, let, or const.\n             */\n\n            exports.VariableDeclaration = VariableDeclaration = (function (_super) {\n                __extends(VariableDeclaration, _super);\n\n\n                /*\n                 * @declarations: [ VariableDeclarator ]\n                 * @kind: \"var\"\n                 */\n\n                function VariableDeclaration(declarations, kind) {\n                    this.declarations = declarations;\n                    this.kind = kind;\n                    VariableDeclaration.__super__.constructor.call(this);\n                }\n\n                return VariableDeclaration;\n\n            })(Declaration);\n\n            JavaScriptVisitor.prototype.VariableDeclaration = function (node) {\n                node = this.Declaration(node);\n                node.declarations = this.visit(node.declarations);\n                return node;\n            };\n\n\n            /*\n             * A variable declarator.  Note: The id field cannot be null.\n             */\n\n            exports.VariableDeclarator = VariableDeclarator = (function (_super) {\n                __extends(VariableDeclarator, _super);\n\n\n                /*\n                 * @id: Pattern\n                 * @init: Expression | null\n                 */\n\n                function VariableDeclarator(id, init) {\n                    this.id = id;\n                    this.init = init;\n                    VariableDeclarator.__super__.constructor.call(this);\n                }\n\n                return VariableDeclarator;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.VariableDeclarator = function (node) {\n                node = this.JavaScriptNode(node);\n                node.id = this.visit(node.id);\n                node.init = this.visit(node.init);\n                return node;\n            };\n\n\n            /*\n             * Any expression node. Since the left-hand side of an assignment may be any\n             * expression in general, an expression can also be a pattern.\n             */\n\n            exports.Expression = Expression = (function (_super) {\n                __extends(Expression, _super);\n\n                function Expression() {\n                    return Expression.__super__.constructor.apply(this, arguments);\n                }\n\n                Expression.prototype.constuctor = function () {\n                    return Expression.__super__.constuctor.call(this);\n                };\n\n                return Expression;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Expression = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * A this expression.\n             */\n\n            exports.ThisExpression = ThisExpression = (function (_super) {\n                __extends(ThisExpression, _super);\n\n                function ThisExpression() {\n                    ThisExpression.__super__.constructor.call(this);\n                }\n\n                return ThisExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.ThisExpression = function (node) {\n                node = this.Expression(node);\n                return node;\n            };\n\n\n            /*\n             * An array expression.\n             */\n\n            exports.ArrayExpression = ArrayExpression = (function (_super) {\n                __extends(ArrayExpression, _super);\n\n\n                /*\n                 * @elements: [ Expression | null ]\n                 */\n\n                function ArrayExpression(elements) {\n                    this.elements = elements;\n                    ArrayExpression.__super__.constructor.call(this);\n                }\n\n                return ArrayExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.ArrayExpression = function (node) {\n                node = this.Expression(node);\n                node.elements = this.visit(node.elements);\n                return node;\n            };\n\n\n            /*\n             * An object expression. A literal property in an object expression can have\n             * either a string or number as its value.  Ordinary property initializers have a\n             * kind value \"init\"; getters and setters have the kind values \"get\" and \"set\",\n             * respectively.\n             */\n\n            exports.ObjectExpression = ObjectExpression = (function (_super) {\n                __extends(ObjectExpression, _super);\n\n\n                /*\n                 * @properties: [ { key: Literal | Identifier,\n                 *                 value: Expression,\n                 *                 kind: \"init\" | \"get\" | \"set\" } ];\n                 */\n\n                function ObjectExpression(properties) {\n                    this.properties = properties;\n                    ObjectExpression.__super__.constructor.call(this);\n                }\n\n                return ObjectExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.ObjectExpression = function (node) {\n                var setter, _i, _len, _ref1;\n                node = this.Expression(node);\n                _ref1 = node.properties;\n                for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n                    setter = _ref1[_i];\n                    setter.key = this.visit(setter.key);\n                    setter.value = this.visit(setter.value);\n                }\n                return node;\n            };\n\n\n            /*\n             * A function expression.\n             */\n\n            exports.FunctionExpression = FunctionExpression = (function (_super) {\n                __extends(FunctionExpression, _super);\n\n\n                /*\n                 * @id: Identifier | null\n                 * @params: [ Pattern ]\n                 * @body: BlockStatement | Expression\n                 */\n\n                function FunctionExpression(id, params, body) {\n                    this.id = id;\n                    this.params = params;\n                    this.body = body;\n                    FunctionExpression.__super__.constructor.call(this);\n                }\n\n                return FunctionExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.FunctionExpression = function (node) {\n                node = this.Expression(node);\n                node.id = this.visit(node.id);\n                node.params = this.visit(node.params);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A sequence expression, i.e., a comma-separated sequence of expressions.\n             */\n\n            exports.SequenceExpression = SequenceExpression = (function (_super) {\n                __extends(SequenceExpression, _super);\n\n\n                /*\n                 * @expressions: [ Expression ]\n                 */\n\n                function SequenceExpression(expressions) {\n                    this.expressions = expressions;\n                    SequenceExpression.__super__.constructor.call(this);\n                }\n\n                return SequenceExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.SequenceExpression = function (node) {\n                node = this.Expression(node);\n                node.expressions = this.visit(node.expressions);\n                return node;\n            };\n\n\n            /*\n             * A unary operator expression.\n             */\n\n            exports.UnaryExpression = UnaryExpression = (function (_super) {\n                __extends(UnaryExpression, _super);\n\n\n                /*\n                 * @operator: \"-\" | \"+\" | \"!\" | \"~\" | \"typeof\" | \"void\" | \"delete\"\n                 * @prefix: boolean\n                 * @argument: Expression\n                 */\n\n                function UnaryExpression(operator, prefix, argument) {\n                    this.operator = operator;\n                    this.prefix = prefix;\n                    this.argument = argument;\n                    UnaryExpression.__super__.constructor.call(this);\n                }\n\n                return UnaryExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.UnaryExpression = function (node) {\n                node = this.Expression(node);\n                node.argument = this.visit(node.argument);\n                return node;\n            };\n\n\n            /*\n             * A binary operator expression.\n             */\n\n            exports.BinaryExpression = BinaryExpression = (function (_super) {\n                __extends(BinaryExpression, _super);\n\n\n                /*\n                 * @operator: \"==\" | \"!=\" | \"===\" | \"!==\" | \"<\" | \"<=\" | \">\" | \">=\"\n                 *     | \"<<\" | \">>\" | \">>>\" | \"+\" | \"-\" | \"*\" | \"/\" | \"%\"\n                 *     | \"|\" | \"&\" | \"^\" | \"in\" | \"instanceof\" | \"..\"\n                 * @left: Expression\n                 * @right: Expression\n                 */\n\n                function BinaryExpression(operator, left, right) {\n                    this.operator = operator;\n                    this.left = left;\n                    this.right = right;\n                    BinaryExpression.__super__.constructor.call(this);\n                }\n\n                return BinaryExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.BinaryExpression = function (node) {\n                node = this.Expression(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                return node;\n            };\n\n\n            /*\n             * An assignment operator expression.\n             */\n\n            exports.AssignmentExpression = AssignmentExpression = (function (_super) {\n                __extends(AssignmentExpression, _super);\n\n\n                /*\n                 * @operator: \"=\" | \"+=\" | \"-=\" | \"*=\" | \"/=\" | \"%=\"\n                 *     | \"<<=\" | \">>=\" | \">>>=\" | \"|=\" | \"^=\" | \"&=\";\n                 * @left: Expression\n                 * @right: Expression\n                 */\n\n                function AssignmentExpression(operator, left, right) {\n                    this.operator = operator;\n                    this.left = left;\n                    this.right = right;\n                    AssignmentExpression.__super__.constructor.call(this);\n                }\n\n                return AssignmentExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.AssignmentExpression = function (node) {\n                node = this.Expression(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                return node;\n            };\n\n\n            /*\n             * An update (increment or decrement) operator expression.\n             */\n\n            exports.UpdateExpression = UpdateExpression = (function (_super) {\n                __extends(UpdateExpression, _super);\n\n\n                /*\n                 * @operator: \"++\" | \"--\"\n                 * @argument: Expression\n                 * @prefix: boolean\n                 */\n\n                function UpdateExpression(operator, argument, prefix) {\n                    this.operator = operator;\n                    this.argument = argument;\n                    this.prefix = prefix;\n                    UpdateExpression.__super__.constructor.call(this);\n                }\n\n                return UpdateExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.UpdateExpression = function (node) {\n                node = this.Expression(node);\n                node.argument = this.visit(node.argument);\n                return node;\n            };\n\n\n            /*\n             * A logical operator expression.\n             */\n\n            exports.LogicalExpression = LogicalExpression = (function (_super) {\n                __extends(LogicalExpression, _super);\n\n\n                /*\n                 * @operator: \"||\" | \"&&\"\n                 * @left: Expression\n                 * @right: Expression\n                 */\n\n                function LogicalExpression(operator, left, right) {\n                    this.operator = operator;\n                    this.left = left;\n                    this.right = right;\n                    LogicalExpression.__super__.constructor.call(this);\n                }\n\n                return LogicalExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.LogicalExpression = function (node) {\n                node = this.Expression(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                return node;\n            };\n\n\n            /*\n             * A conditional expression, i.e., a ternary ?/: expression.\n             */\n\n            exports.ConditionalExpression = ConditionalExpression = (function (_super) {\n                __extends(ConditionalExpression, _super);\n\n\n                /*\n                 * @test: Expression\n                 * @alternate: Expression\n                 * @consequent: Expression\n                 */\n\n                function ConditionalExpression(test, alternate, consequent) {\n                    this.test = test;\n                    this.alternate = alternate;\n                    this.consequent = consequent;\n                    ConditionalExpression.__super__.constructor.call(this);\n                }\n\n                return ConditionalExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.ConditionalExpression = function (node) {\n                node = this.Expression(node);\n                node.test = this.visit(node.test);\n                node.alternate = this.visit(node.alternate);\n                node.consequent = this.visit(node.consequent);\n                return node;\n            };\n\n\n            /*\n             * A new expression.\n             */\n\n            exports.NewExpression = NewExpression = (function (_super) {\n                __extends(NewExpression, _super);\n\n\n                /*\n                 * @callee: Expression\n                 * @arguments: [ Expression ] | null\n                 */\n\n                function NewExpression(callee, _arguments) {\n                    this.callee = callee;\n                    this[\"arguments\"] = _arguments;\n                    NewExpression.__super__.constructor.call(this);\n                }\n\n                return NewExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.NewExpression = function (node) {\n                node = this.Expression(node);\n                node.callee = this.visit(node.callee);\n                node[\"arguments\"] = this.visit(node[\"arguments\"]);\n                return node;\n            };\n\n\n            /*\n             * A function or method call expression.\n             */\n\n            exports.CallExpression = CallExpression = (function (_super) {\n                __extends(CallExpression, _super);\n\n\n                /*\n                 * @callee: Expression\n                 * @arguments: [ Expression ]\n                 */\n\n                function CallExpression(callee, _arguments) {\n                    this.callee = callee;\n                    this[\"arguments\"] = _arguments;\n                    CallExpression.__super__.constructor.call(this);\n                }\n\n                return CallExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.CallExpression = function (node) {\n                node = this.Expression(node);\n                node.callee = this.visit(node.callee);\n                node[\"arguments\"] = this.visit(node[\"arguments\"]);\n                return node;\n            };\n\n\n            /*\n             * A member expression. If computed === true, the node corresponds to a computed\n             * e1[e2] expression and property is an Expression. If computed === false, the\n             * node corresponds to a static e1.x expression and property is an Identifier.\n             */\n\n            exports.MemberExpression = MemberExpression = (function (_super) {\n                __extends(MemberExpression, _super);\n\n\n                /*\n                 * @object: Expression\n                 * @property: Identifier | Expression\n                 * @computed : boolean\n                 */\n\n                function MemberExpression(object, property, computed) {\n                    this.object = object;\n                    this.property = property;\n                    this.computed = computed;\n                    MemberExpression.__super__.constructor.call(this);\n                }\n\n                return MemberExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.MemberExpression = function (node) {\n                node = this.Expression(node);\n                node.object = this.visit(node.object);\n                node.property = this.visit(node.property);\n                return node;\n            };\n\n\n            /*\n             * JavaScript 1.7 introduced destructuring assignment and binding forms.  All\n             * binding forms (such as function parameters, variable declarations, and catch\n             * block headers), accept array and object destructuring patterns in addition to\n             * plain identifiers. The left-hand sides of assignment expressions can be\n             * arbitrary expressions, but in the case where the expression is an object or\n             * array literal, it is interpreted by SpiderMonkey as a destructuring pattern.\n             *\n             * Since the left-hand side of an assignment can in general be any expression, in\n             * an assignment context, a pattern can be any expression. In binding positions\n             * (such as function parameters, variable declarations, and catch headers),\n             * patterns can only be identifiers in the base case, not arbitrary expressions.\n             */\n\n            exports.Pattern = Pattern = (function (_super) {\n                __extends(Pattern, _super);\n\n                function Pattern() {\n                    Pattern.__super__.constructor.call(this);\n                }\n\n                return Pattern;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Pattern = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * An object-destructuring pattern. A literal property in an object pattern can\n             * have either a string or number as its value.\n             */\n\n            exports.ObjectPattern = ObjectPattern = (function (_super) {\n                __extends(ObjectPattern, _super);\n\n\n                /*\n                 * @properties: [ { key: Literal | Identifier, value: Pattern } ]\n                 */\n\n                function ObjectPattern(properties) {\n                    this.properties = properties;\n                    ObjectPattern.__super__.constructor.call(this);\n                }\n\n                return ObjectPattern;\n\n            })(Pattern);\n\n            JavaScriptVisitor.prototype.ObjectPattern = function (node) {\n                var setter, _i, _len, _ref1;\n                node = this.Pattern(node);\n                _ref1 = node.properties;\n                for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n                    setter = _ref1[_i];\n                    setter.key = this.visit(setter.key);\n                    setter.value = this.visit(setter.value);\n                }\n                return node;\n            };\n\n\n            /*\n             * An array-destructuring pattern.\n             */\n\n            exports.ArrayPattern = ArrayPattern = (function (_super) {\n                __extends(ArrayPattern, _super);\n\n\n                /*\n                 * @elements: [ Pattern | null ]\n                 */\n\n                function ArrayPattern(elements) {\n                    this.elements = elements;\n                    ArrayPattern.__super__.constructor.call(this);\n                }\n\n                return ArrayPattern;\n\n            })(Pattern);\n\n            JavaScriptVisitor.prototype.ArrayPattern = function (node) {\n                node = this.Pattern(node);\n                node.elements = this.visit(node.elements);\n                return node;\n            };\n\n\n            /*\n             * A case (if test is an Expression) or default (if test === null) clause in the\n             * body of a switch statement.\n             */\n\n            exports.SwitchCase = SwitchCase = (function (_super) {\n                __extends(SwitchCase, _super);\n\n\n                /*\n                 * @test: Expression | null\n                 * @consequent: [ Statement ]\n                 */\n\n                function SwitchCase(test, consequent) {\n                    this.test = test;\n                    this.consequent = consequent;\n                    SwitchCase.__super__.constructor.call(this);\n                }\n\n                return SwitchCase;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.SwitchCase = function (node) {\n                node = this.JavaScriptNode(node);\n                node.test = this.visit(node.test);\n                node.consequent = this.visit(node.consequent);\n                return node;\n            };\n\n\n            /*\n             * A catch clause following a try block. The optional guard property corresponds\n             * to the optional expression guard on the bound variable.\n             */\n\n            exports.CatchClause = CatchClause = (function (_super) {\n                __extends(CatchClause, _super);\n\n\n                /*\n                 * @param: Pattern\n                 * @body: BlockStatement\n                 */\n\n                function CatchClause(param, body) {\n                    this.param = param;\n                    this.body = body;\n                    CatchClause.__super__.constructor.call(this);\n                }\n\n                return CatchClause;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.CatchClause = function (node) {\n                node = this.JavaScriptNode(node);\n                node.param = this.visit(node.param);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * An identifier. Note that an identifier may be an expression or a destructuring\n             * pattern.\n             */\n\n            exports.Identifier = Identifier = (function (_super) {\n                __extends(Identifier, _super);\n\n\n                /*\n                 * @name: string\n                 */\n\n                function Identifier(name) {\n                    this.name = name;\n                    Identifier.__super__.constructor.call(this);\n                }\n\n                return Identifier;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Identifier = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * A literal token. Note that a literal can be an expression.\n             */\n\n            exports.Literal = Literal = (function (_super) {\n                __extends(Literal, _super);\n\n\n                /*\n                 * @value: string | boolean | null | number | RegExp\n                 */\n\n                function Literal(value) {\n                    this.value = value;\n                    Literal.__super__.constructor.call(this);\n                }\n\n                return Literal;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.Literal = function (node) {\n                node = this.Expression(node);\n                return node;\n            };\n\n        }).call(this);\n    };\n\n    $__modules__.JavaScriptToQueryVisitor = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var JS, JavaScriptToQueryVisitor, Q, _,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ = require('./Utilities');\n\n            JS = require('./JavaScriptNodes');\n\n            Q = require('./QueryNodes');\n\n\n            /*\n             * Walk the JavaScriptExpression tree and convert its nodes into QueryExpression\n             * trees\n             */\n\n            exports.JavaScriptToQueryVisitor = JavaScriptToQueryVisitor = (function (_super) {\n                __extends(JavaScriptToQueryVisitor, _super);\n\n                function JavaScriptToQueryVisitor(context) {\n                    this.context = context;\n                }\n\n\n                /* Get the source code for a given node */\n\n                JavaScriptToQueryVisitor.prototype.getSource = function (node) {\n                    var _ref, _ref1;\n                    return this.context.source.slice(node != null ? (_ref = node.range) != null ? _ref[0] : void 0 : void 0, +((node != null ? (_ref1 = node.range) != null ? _ref1[1] : void 0 : void 0) - 1) + 1 || 9e9);\n                };\n\n\n                /* Throw an exception for an invalid node. */\n\n                JavaScriptToQueryVisitor.prototype.invalid = function (node) {\n                    throw \"The expression '\" + (this.getSource(node)) + \"'' is not supported.\";\n                };\n\n\n                /* Unary expressions just map operators */\n\n                JavaScriptToQueryVisitor.prototype.translateUnary = function (node, mapping) {\n                    var op, value;\n                    op = mapping[node.operator];\n                    if (op) {\n                        value = this.visit(node.argument);\n                        return new Q.UnaryExpression(op, value);\n                    } else {\n                        return null;\n                    }\n                };\n\n\n                /* Binary expressions just map operators */\n\n                JavaScriptToQueryVisitor.prototype.translateBinary = function (node, mapping) {\n                    var left, op, right;\n                    op = mapping[node.operator];\n                    if (op) {\n                        left = this.visit(node.left);\n                        right = this.visit(node.right);\n                        return new Q.BinaryExpression(op, left, right);\n                    } else {\n                        return null;\n                    }\n                };\n\n\n                /*\n                 * The base visit method will throw exceptions for any nodes that remain\n                 * untransformed (which allows us to only bother defining meaningful\n                 * translations)\n                 */\n\n                JavaScriptToQueryVisitor.prototype.visit = function (node) {\n                    var visited;\n                    visited = JavaScriptToQueryVisitor.__super__.visit.call(this, node);\n                    if (node === visited) {\n                        this.invalid(node);\n                    }\n                    return visited;\n                };\n\n                JavaScriptToQueryVisitor.prototype.MemberExpression = function (node) {\n                    var expr;\n                    expr = (function () {\n                        var _ref, _ref1, _ref2, _ref3;\n                        if ((node != null ? (_ref = node.object) != null ? _ref.type : void 0 : void 0) === 'ThisExpression' && (node != null ? (_ref1 = node.property) != null ? _ref1.type : void 0 : void 0) === 'Identifier') {\n\n                            /* Simple member access */\n                            return new Q.MemberExpression(node.property.name);\n                        } else if ((node != null ? (_ref2 = node.object) != null ? _ref2.type : void 0 : void 0) === 'MemberExpression' && ((_ref3 = node.object.object) != null ? _ref3.type : void 0) === 'ThisExpression' && node.property.type === 'Identifier') {\n\n                            /* Methods that look like properties */\n                            if (node.property.name === 'length') {\n                                return new Q.InvocationExpression(Q.Methods.Length, new Q.MemberExpression(node.object.property.name));\n                            }\n                        }\n                    })();\n                    return expr != null ? expr : JavaScriptToQueryVisitor.__super__.MemberExpression.call(this, node);\n                };\n\n                JavaScriptToQueryVisitor.prototype.Literal = function (node) {\n                    return new Q.ConstantExpression(node.value);\n                };\n\n                JavaScriptToQueryVisitor.prototype.UnaryExpression = function (node) {\n                    var mapping, _ref;\n                    if (node.operator === '+') {\n\n                        /* Ignore the + in '+52' */\n                        return this.visit(node.argument);\n                    } else {\n                        mapping = {\n                            '!': Q.UnaryOperators.Not,\n                            '-': Q.UnaryOperators.Negate\n                        };\n                        return (_ref = this.translateUnary(node, mapping)) != null ? _ref : JavaScriptToQueryVisitor.__super__.UnaryExpression.call(this, node);\n                    }\n                };\n\n                JavaScriptToQueryVisitor.prototype.UpdateExpression = function (node) {\n                    var mapping, _ref;\n                    mapping = {\n                        '++': Q.UnaryOperators.Increment,\n                        '--': Q.UnaryOperators.Decrement\n                    };\n                    return (_ref = this.translateUnary(node, mapping)) != null ? _ref : JavaScriptToQueryVisitor.__super__.UpdateExpression.call(this, node);\n                };\n\n                JavaScriptToQueryVisitor.prototype.LogicalExpression = function (node) {\n                    var mapping, _ref;\n                    mapping = {\n                        '&&': Q.BinaryOperators.And,\n                        '||': Q.BinaryOperators.Or\n                    };\n                    return (_ref = this.translateBinary(node, mapping)) != null ? _ref : JavaScriptToQueryVisitor.__super__.LogicalExpression.call(this, node);\n                };\n\n                JavaScriptToQueryVisitor.prototype.BinaryExpression = function (node) {\n                    var k, left, mapping, properties, v, value, _ref;\n                    mapping = {\n                        '+': Q.BinaryOperators.Add,\n                        '-': Q.BinaryOperators.Subtract,\n                        '*': Q.BinaryOperators.Multiply,\n                        '/': Q.BinaryOperators.Divide,\n                        '%': Q.BinaryOperators.Modulo,\n                        '>': Q.BinaryOperators.GreaterThan,\n                        '>=': Q.BinaryOperators.GreaterThanOrEqual,\n                        '<': Q.BinaryOperators.LessThan,\n                        '<=': Q.BinaryOperators.LessThanOrEqual,\n                        '!=': Q.BinaryOperators.NotEqual,\n                        '!==': Q.BinaryOperators.NotEqual,\n                        '==': Q.BinaryOperators.Equal,\n                        '===': Q.BinaryOperators.Equal\n                    };\n                    return (function () {\n                        var _ref1, _ref2;\n                        if ((_ref = this.translateBinary(node, mapping)) != null) {\n                            return _ref;\n                        } else if (node.operator === 'in' && ((_ref1 = node.right) != null ? _ref1.type : void 0) === 'Literal' && _.isArray((_ref2 = node.right) != null ? _ref2.value : void 0)) {\n\n                            /*\n                             * Transform the 'varName in [x, y, z]' operator into a series of\n                             * comparisons like varName == x || varName == y || varName == z.\n                             */\n                            if (node.right.value.length > 0) {\n                                left = this.visit(node.left);\n                                return Q.QueryExpression.groupClauses(Q.BinaryOperators.Or, (function () {\n                                    var _i, _len, _ref3, _results;\n                                    _ref3 = node.right.value;\n                                    _results = [];\n                                    for (_i = 0, _len = _ref3.length; _i < _len; _i++) {\n                                        value = _ref3[_i];\n\n                                        /*\n                                         * If we've got an array of objects who each have\n                                         * a single property, we'll use the value of that\n                                         * property.  Otherwise we'll throw an exception.\n                                         */\n                                        if (_.isObject(value)) {\n                                            properties = (function () {\n                                                var _results1;\n                                                _results1 = [];\n                                                for (k in value) {\n                                                    v = value[k];\n                                                    _results1.push(v);\n                                                }\n                                                return _results1;\n                                            })();\n                                            if ((properties != null ? properties.length : void 0) !== 1) {\n                                                throw \"in operator requires comparison objects with a single field, not \" + value + \" (\" + (JSON.stringify(value)) + \"), for expression '\" + (this.getSource(node)) + \"'\";\n                                            }\n                                            value = properties[0];\n                                        }\n                                        _results.push(new Q.BinaryExpression(Q.BinaryOperators.Equal, left, new Q.ConstantExpression(value)));\n                                    }\n                                    return _results;\n                                }).call(this));\n                            } else {\n\n                                /*\n                                 * If the array of values is empty, change the query to\n                                 * true == false since it can't be satisfied.\n                                 */\n                                return new Q.BinaryExpression(Q.BinaryOperators.Equal, new Q.ConstantExpression(true), new Q.ConstantExpression(false));\n                            }\n                        } else {\n                            return JavaScriptToQueryVisitor.__super__.BinaryExpression.call(this, node);\n                        }\n                    }).call(this);\n                };\n\n                JavaScriptToQueryVisitor.prototype.CallExpression = function (node) {\n                    var expr, func, getSingleArg, getTwoArgs, member, method, _ref;\n                    getSingleArg = (function (_this) {\n                        return function (name) {\n                            var _ref;\n                            if (((_ref = node[\"arguments\"]) != null ? _ref.length : void 0) !== 1) {\n                                throw \"Function \" + name + \" expects one argument in expression '\" + (_this.getSource(node)) + \"'\";\n                            }\n                            return _this.visit(node[\"arguments\"][0]);\n                        };\n                    })(this);\n                    getTwoArgs = (function (_this) {\n                        return function (member, name) {\n                            var _ref;\n                            if (((_ref = node[\"arguments\"]) != null ? _ref.length : void 0) !== 2) {\n                                throw \"Function \" + name + \" expects two arguments in expression '\" + (_this.getSource(node)) + \"'\";\n                            }\n                            return [member, _this.visit(node[\"arguments\"][0]), _this.visit(node[\"arguments\"][1])];\n                        };\n                    })(this);\n\n                    /*\n                     * Translate known method calls that aren't attached to an instance.\n                     * Note that we can compare against the actual method because the\n                     * partial evaluator will have converted it into a literal for us.\n                     */\n                    func = node != null ? (_ref = node.callee) != null ? _ref.value : void 0 : void 0;\n                    expr = (function () {\n                        var _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;\n                        if (func === Math.floor) {\n                            return new Q.InvocationExpression(Q.Methods.Floor, [getSingleArg('floor')]);\n                        } else if (func === Math.ceil) {\n                            return new Q.InvocationExpression(Q.Methods.Ceiling, [getSingleArg('ceil')]);\n                        } else if (func === Math.round) {\n                            return new Q.InvocationExpression(Q.Methods.Round, [getSingleArg('round')]);\n                        } else {\n\n                            /*\n                             * Translate methods dangling off an instance\n                             */\n                            if (node.callee.type === 'MemberExpression' && ((_ref1 = node.callee.object) != null ? _ref1.__hasThisExp : void 0) === true) {\n                                if ((node != null ? (_ref2 = node.callee) != null ? (_ref3 = _ref2.object) != null ? _ref3.type : void 0 : void 0 : void 0) === 'CallExpression') {\n                                    member = this.visit(node.callee.object);\n                                } else {\n                                    member = new Q.MemberExpression((_ref4 = node.callee.object) != null ? (_ref5 = _ref4.property) != null ? _ref5.name : void 0 : void 0);\n                                }\n                                method = (_ref6 = node.callee) != null ? (_ref7 = _ref6.property) != null ? _ref7.name : void 0 : void 0;\n                                if (method === 'toUpperCase') {\n                                    return new Q.InvocationExpression(Q.Methods.ToUpperCase, [member]);\n                                } else if (method === 'toLowerCase') {\n                                    return new Q.InvocationExpression(Q.Methods.ToLowerCase, [member]);\n                                } else if (method === 'trim') {\n                                    return new Q.InvocationExpression(Q.Methods.Trim, [member]);\n                                } else if (method === 'indexOf') {\n                                    return new Q.InvocationExpression(Q.Methods.IndexOf, [member, getSingleArg('indexOf')]);\n                                } else if (method === 'concat') {\n                                    return new Q.InvocationExpression(Q.Methods.Concat, [member, getSingleArg('concat')]);\n                                } else if (method === 'substring' || method === 'substr') {\n                                    return new Q.InvocationExpression(Q.Methods.Substring, getTwoArgs(member, 'substring'));\n                                } else if (method === 'replace') {\n                                    return new Q.InvocationExpression(Q.Methods.Replace, getTwoArgs(member, 'replace'));\n                                } else if (method === 'getFullYear' || method === 'getUTCFullYear') {\n                                    return new Q.InvocationExpression(Q.Methods.Year, [member]);\n                                } else if (method === 'getYear') {\n                                    return new Q.BinaryExpression(Q.BinaryOperators.Subtract, new Q.InvocationExpression(Q.Methods.Year, [member]), new Q.ConstantExpression(1900));\n                                } else if (method === 'getMonth' || method === 'getUTCMonth') {\n\n                                    /* getMonth is 0 indexed in JavaScript */\n                                    return new Q.BinaryExpression(Q.BinaryOperators.Subtract, new Q.InvocationExpression(Q.Methods.Month, [member]), new Q.ConstantExpression(1));\n                                } else if (method === 'getDate' || method === 'getUTCDate') {\n                                    return new Q.InvocationExpression(Q.Methods.Day, [member]);\n                                }\n                            }\n                        }\n                    }).call(this);\n                    return expr != null ? expr : JavaScriptToQueryVisitor.__super__.CallExpression.call(this, node);\n                };\n\n                return JavaScriptToQueryVisitor;\n\n            })(JS.JavaScriptVisitor);\n\n        }).call(this);\n    };\n\n    $__modules__.Node = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var Node, Visitor, _;\n\n            _ = require('./Utilities');\n\n\n            /*\n             * The base Node class for all expressions used for analysis and translation by\n             * visitors.  It's designed to interop with other modules that create expression\n             * trees using object literals with a type tag.\n             */\n\n            exports.Node = Node = (function () {\n\n                /*\n                 * Type tag of the node that allows for eash dispatch in visitors.  This is\n                 * automatically set in the constructor (so it's important to call super() in\n                 * derived Node classes).\n                 */\n                Node.prototype.type = 'Node';\n\n\n                /*\n                 * Initializes a new instance of the Node class and sets its type tag.\n                 */\n\n                function Node() {\n                    this.type = _.functionName(this.constructor);\n                }\n\n                return Node;\n\n            })();\n\n\n            /*\n             * Base class for all visitors\n             */\n\n            exports.Visitor = Visitor = (function () {\n                function Visitor() { }\n\n\n                /*\n                 * Visit a node.\n                 */\n\n                Visitor.prototype.visit = function (node) {\n                    var element, _i, _len, _results;\n                    if (_.isArray(node)) {\n                        _results = [];\n                        for (_i = 0, _len = node.length; _i < _len; _i++) {\n                            element = node[_i];\n                            _results.push(this.visit(element));\n                        }\n                        return _results;\n                    } else if (!(node != null ? node.type : void 0)) {\n                        return node;\n                    } else if (!_.isFunction(this[node.type])) {\n                        throw \"Unsupported expression \" + (this.getSource(node));\n                    } else {\n                        return this[node.type](node);\n                    }\n                };\n\n\n                /*\n                 * Get the source code corresponding to a node.\n                 */\n\n                Visitor.prototype.getSource = function (node) {\n\n                    /* It is expected this will be overridden in derived visitors. */\n                    return null;\n                };\n\n                return Visitor;\n\n            })();\n\n        }).call(this);\n    };\n\n    $__modules__.ODataProvider = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var ODataFilterQueryVisitor, ODataProvider, Q, Query, _,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ = require('./Utilities');\n\n            Q = require('./QueryNodes');\n\n            Query = require('./Query').Query;\n\n            exports.ODataProvider = ODataProvider = (function () {\n                function ODataProvider() { }\n\n\n                /*\n                 * Convert a query into an OData URI.\n                 */\n\n                ODataProvider.prototype.toQuery = function (query) {\n                    var odata, s, url;\n                    odata = this.toOData(query, true);\n                    url = \"/\" + odata.table;\n                    s = '?';\n                    if (odata.filters) {\n                        url += \"\" + s + \"$filter=\" + odata.filters;\n                        s = '&';\n                    }\n                    if (odata.ordering) {\n                        url += \"\" + s + \"$orderby=\" + odata.ordering;\n                        s = '&';\n                    }\n                    if (odata.skip) {\n                        url += \"\" + s + \"$skip=\" + odata.skip;\n                        s = '&';\n                    }\n                    if (odata.take || odata.take === 0) {\n                        url += \"\" + s + \"$top=\" + odata.take;\n                        s = '&';\n                    }\n                    if (odata.selections) {\n                        url += \"\" + s + \"$select=\" + odata.selections;\n                        s = '&';\n                    }\n                    if (odata.includeTotalCount) {\n                        url += \"\" + s + \"$inlinecount=allpages\";\n                    }\n                    return url;\n                };\n\n\n                /*\n                 * Translate the query components into OData strings\n                 */\n\n                ODataProvider.prototype.toOData = function (query, encodeForUri) {\n                    var asc, components, name, odata, ordering, _ref, _ref1;\n                    if (encodeForUri == null) {\n                        encodeForUri = false;\n                    }\n                    components = (_ref = query != null ? query.getComponents() : void 0) != null ? _ref : {};\n                    ordering = (function () {\n                        var _ref1, _results;\n                        _ref1 = components != null ? components.ordering : void 0;\n                        _results = [];\n                        for (name in _ref1) {\n                            asc = _ref1[name];\n                            _results.push(asc ? name : \"\" + name + \" desc\");\n                        }\n                        return _results;\n                    })();\n                    return odata = {\n                        table: components != null ? components.table : void 0,\n                        filters: ODataFilterQueryVisitor.convert(components.filters, encodeForUri),\n                        ordering: ordering != null ? ordering.toString() : void 0,\n                        skip: components != null ? components.skip : void 0,\n                        take: components != null ? components.take : void 0,\n                        selections: components != null ? (_ref1 = components.selections) != null ? _ref1.toString() : void 0 : void 0,\n                        includeTotalCount: components != null ? components.includeTotalCount : void 0\n                    };\n                };\n\n\n                /*\n                 * Convert OData components into a query object\n                 */\n\n                ODataProvider.prototype.fromOData = function (table, filters, ordering, skip, take, selections, includeTotalCount) {\n                    var direction, field, item, query, _i, _j, _len, _len1, _ref, _ref1, _ref2, _ref3;\n                    query = new Query(table);\n                    if (filters) {\n                        query.where(filters);\n                    }\n                    if (skip || skip === 0) {\n                        query.skip(skip);\n                    }\n                    if (take || take === 0) {\n                        query.take(take);\n                    }\n                    if (includeTotalCount) {\n                        query.includeTotalCount();\n                    }\n                    _ref1 = (_ref = selections != null ? selections.split(',') : void 0) != null ? _ref : [];\n                    for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n                        field = _ref1[_i];\n                        query.select(field.trim());\n                    }\n                    _ref2 = (function () {\n                        var _k, _len1, _ref2, _ref3, _results;\n                        _ref3 = (_ref2 = ordering != null ? ordering.split(',') : void 0) != null ? _ref2 : [];\n                        _results = [];\n                        for (_k = 0, _len1 = _ref3.length; _k < _len1; _k++) {\n                            item = _ref3[_k];\n                            _results.push(item.trim().split(' '));\n                        }\n                        return _results;\n                    })();\n                    for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n                        _ref3 = _ref2[_j], field = _ref3[0], direction = _ref3[1];\n                        if ((direction != null ? direction.toUpperCase() : void 0) !== 'DESC') {\n                            query.orderBy(field);\n                        } else {\n                            query.orderByDescending(field);\n                        }\n                    }\n                    return query;\n                };\n\n                return ODataProvider;\n\n            })();\n\n\n            /*\n             * Visitor that converts query expression trees into OData filter statements.\n             */\n\n            ODataFilterQueryVisitor = (function (_super) {\n                __extends(ODataFilterQueryVisitor, _super);\n\n                function ODataFilterQueryVisitor(encodeForUri) {\n                    this.encodeForUri = encodeForUri;\n                }\n\n                ODataFilterQueryVisitor.convert = function (filters, encodeForUri) {\n                    var visitor, _ref;\n                    visitor = new ODataFilterQueryVisitor(encodeForUri);\n                    return (_ref = (filters ? visitor.visit(filters) : void 0)) != null ? _ref : null;\n                };\n\n                ODataFilterQueryVisitor.prototype.toOData = function (value) {\n                    var text;\n                    if ((_.isNumber(value)) || (_.isBoolean(value))) {\n                        return value.toString();\n                    } else if (_.isString(value)) {\n                        value = value.replace(/'/g, \"''\");\n                        if ((this.encodeForUri != null) && this.encodeForUri === true) {\n                            value = encodeURIComponent(value);\n                        }\n                        return \"'\" + value + \"'\";\n                    } else if (_.isDate(value)) {\n\n                        /*\n                         * Dates are expected in the format\n                         *   \"datetime'yyyy-mm-ddThh:mm[:ss[.fffffff]]'\"\n                         * which JSON.stringify gives us by default\n                         */\n                        text = JSON.stringify(value);\n                        if (text.length > 2) {\n                            text = text.slice(1, +(text.length - 2) + 1 || 9e9);\n                        }\n                        text = text.replace(/(T\\d{2}:\\d{2}:\\d{2})Z$/, function (all, time) {\n                            var msec;\n                            msec = String(value.getMilliseconds() + 1000).substring(1);\n                            return \"\" + time + \".\" + msec + \"Z\";\n                        });\n                        return \"datetime'\" + text + \"'\";\n                    } else if (!value) {\n                        return \"null\";\n                    } else {\n                        throw \"Unsupported literal value \" + value;\n                    }\n                };\n\n                ODataFilterQueryVisitor.prototype.ConstantExpression = function (node) {\n                    return this.toOData(node.value);\n                };\n\n                ODataFilterQueryVisitor.prototype.MemberExpression = function (node) {\n                    return node.member;\n                };\n\n                ODataFilterQueryVisitor.prototype.UnaryExpression = function (node) {\n                    if (node.operator === Q.UnaryOperators.Not) {\n                        return \"not \" + (this.visit(node.operand));\n                    } else if (node.operator === Q.UnaryOperators.Negate) {\n                        return \"(0 sub \" + (this.visit(node.operand)) + \")\";\n                    } else {\n                        throw \"Unsupported operator \" + node.operator;\n                    }\n                };\n\n                ODataFilterQueryVisitor.prototype.BinaryExpression = function (node) {\n                    var mapping, op;\n                    mapping = {\n                        And: 'and',\n                        Or: 'or',\n                        Add: 'add',\n                        Subtract: 'sub',\n                        Multiply: 'mul',\n                        Divide: 'div',\n                        Modulo: 'mod',\n                        GreaterThan: 'gt',\n                        GreaterThanOrEqual: 'ge',\n                        LessThan: 'lt',\n                        LessThanOrEqual: 'le',\n                        NotEqual: 'ne',\n                        Equal: 'eq'\n                    };\n                    op = mapping[node.operator];\n                    if (op) {\n                        return \"(\" + (this.visit(node.left)) + \" \" + op + \" \" + (this.visit(node.right)) + \")\";\n                    } else {\n                        throw \"Unsupported operator \" + node.operator;\n                    }\n                };\n\n                ODataFilterQueryVisitor.prototype.InvocationExpression = function (node) {\n                    var mapping, method;\n                    mapping = {\n                        Length: 'length',\n                        ToUpperCase: 'toupper',\n                        ToLowerCase: 'tolower',\n                        Trim: 'trim',\n                        IndexOf: 'indexof',\n                        Replace: 'replace',\n                        Substring: 'substring',\n                        Concat: 'concat',\n                        Day: 'day',\n                        Month: 'month',\n                        Year: 'year',\n                        Floor: 'floor',\n                        Ceiling: 'ceiling',\n                        Round: 'round'\n                    };\n                    method = mapping[node.method];\n                    if (method) {\n                        return \"\" + method + \"(\" + (this.visit(node.args)) + \")\";\n                    } else {\n                        throw \"Invocation of unsupported method \" + node.method;\n                    }\n                };\n\n                ODataFilterQueryVisitor.prototype.LiteralExpression = function (node) {\n                    var ch, inString, literal, _i, _len, _ref;\n                    literal = '';\n                    inString = false;\n                    _ref = node.queryString;\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        ch = _ref[_i];\n                        if (inString) {\n                            literal += ch;\n                            inString = ch !== \"'\";\n                        } else if (ch === '?') {\n                            if ((!node.args) || (node.args.length <= 0)) {\n                                throw \"Too few arguments for \" + node.queryString + \".\";\n                            }\n                            literal += this.toOData(node.args.shift());\n                        } else if (ch === \"'\") {\n                            literal += ch;\n                            inString = true;\n                        } else {\n                            literal += ch;\n                        }\n                    }\n                    if (node.args && node.args.length > 0) {\n                        throw \"Too many arguments for \" + node.queryString;\n                    }\n                    return literal;\n                };\n\n                return ODataFilterQueryVisitor;\n\n            })(Q.QueryExpressionVisitor);\n\n        }).call(this);\n    };\n\n    $__modules__.PartialEvaluator = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var IndependenceNominator, JS, PartialEvaluator, _,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ = require('./Utilities');\n\n            JS = require('./JavaScriptNodes');\n\n\n            /*\n             * Partially evaluate a complex expression in the context of its environment.\n             * This allows us to support arbitrary JavaScript expressions even though we\n             * only explicitly transform a subset of expressions into QueryExpressions.\n             *\n             * For example, assuming we have an expression like (x) -> @id == x + 1 with an\n             * environment where x == 12, then the entire right hand side of the comparison\n             * is independent of any values computed by the query and could be replaced with\n             * the literal value 13.\n             */\n\n            exports.PartialEvaluator = PartialEvaluator = (function (_super) {\n                __extends(PartialEvaluator, _super);\n\n                function PartialEvaluator(context) {\n                    this.context = context;\n                }\n\n                PartialEvaluator.prototype.visit = function (node) {\n                    var key, params, source, thunk, value, values, _ref, _ref1, _ref2, _ref3;\n                    if (!node.__independent || node.type === 'Literal' || (!node.type)) {\n\n                        /*\n                         * If the node isn't independent or it's already a literal, then\n                         * just keep walking the tree\n                         */\n                        return PartialEvaluator.__super__.visit.call(this, node);\n                    } else {\n\n                        /*\n                         * Otherwse we'll evaluate the node in the context of the\n                         * environment by either looking up identifiers directly or\n                         * evaluating whole sub expressions\n                         */\n                        if (node.type === 'Identifier' && this.context.environment[node.name]) {\n                            return new JS.Literal(this.context.environment[node.name]);\n                        } else {\n\n                            /*\n                             * Evaluate the source of the sub expression in the context\n                             * of the environment\n                             */\n                            source = this.context.source.slice(node != null ? (_ref = node.range) != null ? _ref[0] : void 0 : void 0, +((node != null ? (_ref1 = node.range) != null ? _ref1[1] : void 0 : void 0) - 1) + 1 || 9e9);\n                            params = (_ref2 = (function () {\n                                var _ref3, _results;\n                                _ref3 = this.context.environment;\n                                _results = [];\n                                for (key in _ref3) {\n                                    value = _ref3[key];\n                                    _results.push(key);\n                                }\n                                return _results;\n                            }).call(this)) != null ? _ref2 : [];\n                            values = (_ref3 = (function () {\n                                var _ref4, _results;\n                                _ref4 = this.context.environment;\n                                _results = [];\n                                for (key in _ref4) {\n                                    value = _ref4[key];\n                                    _results.push(JSON.stringify(value));\n                                }\n                                return _results;\n                            }).call(this)) != null ? _ref3 : [];\n                            thunk = \"(function(\" + params + \") { return \" + source + \"; })(\" + values + \")\";\n                            value = eval(thunk);\n                            return new JS.Literal(value);\n                        }\n                    }\n                };\n\n                PartialEvaluator.evaluate = function (context) {\n                    var evaluator, nominator;\n                    nominator = new IndependenceNominator(context);\n                    nominator.visit(context.expression);\n                    evaluator = new PartialEvaluator(context);\n                    return evaluator.visit(context.expression);\n                };\n\n                return PartialEvaluator;\n\n            })(JS.JavaScriptVisitor);\n\n\n            /*\n             * Nominate independent nodes in an expression tree that don't depend on any\n             * server side values.\n             */\n\n            exports.IndependenceNominator = IndependenceNominator = (function (_super) {\n                __extends(IndependenceNominator, _super);\n\n                function IndependenceNominator(context) {\n                    this.context = context;\n                }\n\n                IndependenceNominator.prototype.Literal = function (node) {\n                    IndependenceNominator.__super__.Literal.call(this, node);\n                    node.__independent = true;\n                    node.__hasThisExp = false;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.ThisExpression = function (node) {\n                    IndependenceNominator.__super__.ThisExpression.call(this, node);\n                    node.__independent = false;\n                    node.__hasThisExp = true;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.Identifier = function (node) {\n                    IndependenceNominator.__super__.Identifier.call(this, node);\n                    node.__independent = true;\n                    node.__hasThisExp = false;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.MemberExpression = function (node) {\n                    var _ref;\n                    IndependenceNominator.__super__.MemberExpression.call(this, node);\n\n                    /*\n                     * Undo independence of identifiers when they're members of this.* or\n                     * this.member.* (the latter allows for member functions)\n                     */\n                    node.__hasThisExp = (_ref = node.object) != null ? _ref.__hasThisExp : void 0;\n                    if (node.__hasThisExp) {\n                        node.__independent = false;\n                        if (node != null) {\n                            node.property.__independent = false;\n                        }\n                    }\n                    return node;\n                };\n\n                IndependenceNominator.prototype.CallExpression = function (node) {\n                    IndependenceNominator.__super__.CallExpression.call(this, node);\n                    node.__hasThisExp = node.callee.__hasThisExp;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.ObjectExpression = function (node) {\n                    var independence, setter, _i, _j, _len, _len1, _ref, _ref1;\n                    IndependenceNominator.__super__.ObjectExpression.call(this, node);\n\n                    /*\n                     * Prevent literal key identifiers from being evaluated out of\n                     * context\n                     */\n                    _ref = node.properties;\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        setter = _ref[_i];\n                        setter.key.__independent = false;\n                    }\n\n                    /*\n                     * An object literal is independent if all of its values are\n                     * independent\n                     */\n                    independence = true;\n                    _ref1 = node.properties;\n                    for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n                        setter = _ref1[_j];\n                        independence &= setter.value.__independent;\n                    }\n                    node.__independent = independence ? true : false;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.visit = function (node) {\n\n                    /*\n                     * Call the base visit method which will both visit all of our\n                     * subexpressions and also call the couple of overrides above which\n                     * handle the base independence cases\n                     */\n                    var independence, isIndependent, name, v, value, _i, _len;\n                    IndependenceNominator.__super__.visit.call(this, node);\n\n                    /*\n                     * If the node's independence wasn't determined automatically by the\n                     * base cases above, then it's independence is determined by checking\n                     * all of its values and aggregating their independence\n                     */\n                    if (!(Object.prototype.hasOwnProperty.call(node, '__independent'))) {\n                        independence = true;\n                        isIndependent = function (node) {\n                            var _ref;\n                            if (_.isObject(node)) {\n                                return (_ref = value.__independent) != null ? _ref : false;\n                            } else {\n                                return true;\n                            }\n                        };\n                        for (name in node) {\n                            value = node[name];\n                            if (_.isArray(value)) {\n                                for (_i = 0, _len = value.length; _i < _len; _i++) {\n                                    v = value[_i];\n                                    independence &= isIndependent(v);\n                                }\n                            } else if (_.isObject(value)) {\n                                independence &= isIndependent(value);\n                            }\n                        }\n\n                        /* &= will turn true/false into 1/0 so we'll turn it back */\n                        node.__independent = independence ? true : false;\n                    }\n                    return node;\n                };\n\n                return IndependenceNominator;\n\n            })(JS.JavaScriptVisitor);\n\n        }).call(this);\n    };\n\n    $__modules__.Query = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n\n        /* Pull in references */\n\n        (function () {\n            var JavaScript, ODataProvider, Q, Query, _,\n              __slice = [].slice;\n\n            _ = require('./Utilities');\n\n            Q = require('./QueryNodes');\n\n            JavaScript = require('./JavaScript').JavaScript;\n\n\n            /*\n             * Define a query that can be translated into a desired query language and\n             * executed remotely.\n             */\n\n            exports.Query = Query = (function () {\n                function Query(table, context) {\n                    var _context, _filters, _includeTotalCount, _ordering, _projection, _selections, _skip, _table, _take, _version;\n                    if (!table || !(_.isString(table))) {\n                        throw 'Expected the name of a table!';\n                    }\n\n                    /* Store the table name and any extra context */\n                    _table = table;\n                    _context = context;\n\n                    /* Private Query component members */\n                    _filters = null;\n                    _projection = null;\n                    _selections = [];\n                    _ordering = {};\n                    _skip = null;\n                    _take = null;\n                    _includeTotalCount = false;\n\n                    /*\n                     * Keep a version flag that's updated on each mutation so we can\n                     * track whether changes have been made.  This is to enable caching\n                     * of compiled queries without reevaluating unless necessary.\n                     */\n                    _version = 0;\n\n                    /* Get the individual components of the query */\n                    this.getComponents = function () {\n                        return {\n                            filters: _filters,\n                            selections: _selections,\n                            projection: _projection,\n                            ordering: _ordering,\n                            skip: _skip,\n                            take: _take,\n                            table: _table,\n                            context: _context,\n                            includeTotalCount: _includeTotalCount,\n                            version: _version\n                        };\n                    };\n\n                    /*\n                     * Set the individual components of the query (this is primarily\n                     * meant to be used for rehydrating a query).\n                     */\n                    this.setComponents = function (components) {\n                        var _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;\n                        _version++;\n                        _filters = (_ref = components != null ? components.filters : void 0) != null ? _ref : null;\n                        _selections = (_ref1 = components != null ? components.selections : void 0) != null ? _ref1 : [];\n                        _projection = (_ref2 = components != null ? components.projection : void 0) != null ? _ref2 : null;\n                        _ordering = (_ref3 = components != null ? components.ordering : void 0) != null ? _ref3 : {};\n                        _skip = (_ref4 = components != null ? components.skip : void 0) != null ? _ref4 : null;\n                        _take = (_ref5 = components != null ? components.take : void 0) != null ? _ref5 : null;\n                        _includeTotalCount = (_ref6 = components != null ? components.includeTotalCount : void 0) != null ? _ref6 : false;\n                        _table = (_ref7 = components != null ? components.table : void 0) != null ? _ref7 : null;\n                        _context = (_ref8 = components != null ? components.context : void 0) != null ? _ref8 : null;\n                        return this;\n                    };\n\n                    /*\n                     * Add a constraint to a query.  Constraints can take the form of\n                     * a function with a single return statement, key/value pairs of\n                     * equality comparisons, or provider-specific literal strings (note\n                     * that not all providers support literals).\n                     */\n                    this.where = function () {\n                        var args, constraint, expr, name, value;\n                        constraint = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                        _version++;\n\n                        /*\n                         * Translate the constraint from its high level form into a\n                         * QueryExpression tree that can be manipulated by a query\n                         * provider\n                         */\n                        expr = (function () {\n                            if (_.isFunction(constraint)) {\n                                return JavaScript.transformConstraint(constraint, args);\n                            } else if (_.isObject(constraint)) {\n\n                                /*\n                                 * Turn an object of key value pairs into a series of\n                                 * equality expressions that are and'ed together to form\n                                 * a single expression\n                                 */\n                                return Q.QueryExpression.groupClauses(Q.BinaryOperators.And, (function () {\n                                    var _results;\n                                    _results = [];\n                                    for (name in constraint) {\n                                        value = constraint[name];\n                                        _results.push(expr = new Q.BinaryExpression(Q.BinaryOperators.Equal, new Q.MemberExpression(name), new Q.ConstantExpression(value)));\n                                    }\n                                    return _results;\n                                })());\n                            } else if (_.isString(constraint)) {\n\n                                /*\n                                 * Store the literal query along with any arguments for\n                                 * providers that support basic string replacement (i.e.,\n                                 * something like where('name eq ?', 'Steve'))\n                                 */\n                                return new Q.LiteralExpression(constraint, args);\n                            } else {\n                                throw \"Expected a function, object, or string, not \" + constraint;\n                            }\n                        })();\n\n                        /* Merge the new filters with any existing filters */\n                        _filters = Q.QueryExpression.groupClauses(Q.BinaryOperators.And, [_filters, expr]);\n                        return this;\n                    };\n\n                    /*\n                     * Project the query results.  A projection can either be defined as\n                     * a set of fields that we'll pull back (instead of the entire row)\n                     * or a function that will transform a row into a new type.  If a\n                     * function is used, we'll analyze the function to pull back the\n                     * minimal number of fields required.\n                     */\n                    this.select = function () {\n                        var param, parameters, projectionOrParameter, _i, _len;\n                        projectionOrParameter = arguments[0], parameters = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                        _version++;\n                        if (_.isString(projectionOrParameter)) {\n\n                            /* Add all the literal string parameters */\n                            _selections.push(projectionOrParameter);\n                            for (_i = 0, _len = parameters.length; _i < _len; _i++) {\n                                param = parameters[_i];\n                                if (!(_.isString(param))) {\n                                    throw \"Expected string parameters, not \" + param;\n                                }\n                                _selections.push(param);\n                            }\n                        } else if (_.isFunction(projectionOrParameter)) {\n\n                            /* Set the projection and calculate the fields it uses */\n                            _projection = projectionOrParameter;\n                            _selections = JavaScript.getProjectedFields(_projection);\n                        } else {\n                            throw \"Expected a string or a function, not \" + projectionOrParameter;\n                        }\n                        return this;\n                    };\n                    this.orderBy = function () {\n                        var param, parameters, _i, _len;\n                        parameters = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n                        _version++;\n                        for (_i = 0, _len = parameters.length; _i < _len; _i++) {\n                            param = parameters[_i];\n                            if (!(_.isString(param))) {\n                                throw \"Expected string parameters, not \" + param;\n                            }\n                            _ordering[param] = true;\n                        }\n                        return this;\n                    };\n                    this.orderByDescending = function () {\n                        var param, parameters, _i, _len;\n                        parameters = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n                        _version++;\n                        for (_i = 0, _len = parameters.length; _i < _len; _i++) {\n                            param = parameters[_i];\n                            if (!(_.isString(param))) {\n                                throw \"Expected string parameters, not \" + param;\n                            }\n                            _ordering[param] = false;\n                        }\n                        return this;\n                    };\n                    this.skip = function (count) {\n                        _version++;\n                        if (!(_.isNumber(count))) {\n                            throw \"Expected a number, not \" + count;\n                        }\n                        _skip = count;\n                        return this;\n                    };\n                    this.take = function (count) {\n                        _version++;\n                        if (!(_.isNumber(count))) {\n                            throw \"Expected a number, not \" + count;\n                        }\n                        _take = count;\n                        return this;\n                    };\n\n                    /*\n                     * Indicate that the query should include the total count for all the\n                     * records that would have been returned ignoring any take paging\n                     * limit clause specified by client or server.\n                     */\n                    this.includeTotalCount = function () {\n                        _version++;\n                        _includeTotalCount = true;\n                        return this;\n                    };\n                }\n\n\n                /*\n                 * Static method to register custom provider types.  A custom provider is\n                 * an object with a toQuery method that takes a Query instance and\n                 * returns a compiled query for that provider.\n                 */\n\n                Query.registerProvider = function (name, provider) {\n                    Query.Providers[name] = provider;\n                    return Query.prototype[\"to\" + name] = function () {\n                        return provider != null ? typeof provider.toQuery === \"function\" ? provider.toQuery(this) : void 0 : void 0;\n                    };\n                };\n\n\n                /*\n                 * Expose the registered providers via the Query.Providers namespace.\n                 */\n\n                Query.Providers = {};\n\n\n                /*\n                 * Expose the query expressions and visitors externally via a\n                 * Query.Expressions namespace.\n                 */\n\n                Query.Expressions = Q;\n\n                return Query;\n\n            })();\n\n\n            /* Register the built in OData provider */\n\n            ODataProvider = require('./ODataProvider').ODataProvider;\n\n            Query.registerProvider('OData', new ODataProvider);\n\n        }).call(this);\n    };\n\n    $__modules__.QueryNodes = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n\n        /*\n         * Define a low level intermediate query expression language that we can\n         * translate other expressions languages (like JavaScript) into.\n         */\n\n\n        /* Get the base Node class. */\n\n        (function () {\n            var BinaryExpression, ConstantExpression, InvocationExpression, LiteralExpression, MemberExpression, Node, QueryExpression, QueryExpressionVisitor, UnaryExpression, Visitor, _ref,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ref = require('./Node'), Node = _ref.Node, Visitor = _ref.Visitor;\n\n\n            /*\n             * Provides the base class from which the classes that represent expression tree\n             * nodes are derived.\n             */\n\n            exports.QueryExpression = QueryExpression = (function (_super) {\n                __extends(QueryExpression, _super);\n\n                function QueryExpression() {\n                    QueryExpression.__super__.constructor.call(this);\n                }\n\n\n                /*\n                 * Group a sequence of clauses together with a given operator (like And\n                 * or Or).\n                 */\n\n                QueryExpression.groupClauses = function (operator, clauses) {\n                    var combine;\n                    combine = function (left, right) {\n                        if (!left) {\n                            return right;\n                        } else if (!right) {\n                            return left;\n                        } else {\n                            return new BinaryExpression(operator, left, right);\n                        }\n                    };\n                    return clauses.reduce(combine, null);\n                };\n\n                return QueryExpression;\n\n            })(Node);\n\n            exports.QueryExpressionVisitor = QueryExpressionVisitor = (function (_super) {\n                __extends(QueryExpressionVisitor, _super);\n\n                function QueryExpressionVisitor() {\n                    QueryExpressionVisitor.__super__.constructor.call(this);\n                }\n\n                QueryExpressionVisitor.prototype.QueryExpression = function (node) {\n                    return node;\n                };\n\n                return QueryExpressionVisitor;\n\n            })(Visitor);\n\n\n            /*\n             * Represents an expression that has a constant value.\n             */\n\n            exports.ConstantExpression = ConstantExpression = (function (_super) {\n                __extends(ConstantExpression, _super);\n\n\n                /*\n                 * @value: The value of the constant expression.\n                 */\n\n                function ConstantExpression(value) {\n                    this.value = value;\n                    ConstantExpression.__super__.constructor.call(this);\n                }\n\n                return ConstantExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.ConstantExpression = function (node) {\n                return this.QueryExpression(node);\n            };\n\n\n            /*\n             * Represents accessing a field.\n             */\n\n            exports.MemberExpression = MemberExpression = (function (_super) {\n                __extends(MemberExpression, _super);\n\n\n                /*\n                 * @member: Gets the field to be accessed.\n                 */\n\n                function MemberExpression(member) {\n                    this.member = member;\n                    MemberExpression.__super__.constructor.call(this);\n                }\n\n                return MemberExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.MemberExpression = function (node) {\n                return this.QueryExpression(node);\n            };\n\n\n            /*\n             * Represents an expression that has a binary operator.\n             */\n\n            exports.BinaryExpression = BinaryExpression = (function (_super) {\n                __extends(BinaryExpression, _super);\n\n\n                /*\n                 * @operator: The operator of the binary expression.\n                 * @left: The left operand of the binary operation.\n                 * @right: The right operand of the binary operation.\n                 */\n\n                function BinaryExpression(operator, left, right) {\n                    this.operator = operator;\n                    this.left = left;\n                    this.right = right;\n                    BinaryExpression.__super__.constructor.call(this);\n                }\n\n                return BinaryExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.BinaryExpression = function (node) {\n                node = this.QueryExpression(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                return node;\n            };\n\n\n            /*\n             * Represents the known binary operators.\n             */\n\n            exports.BinaryOperators = {\n                And: 'And',\n                Or: 'Or',\n                Add: 'Add',\n                Subtract: 'Subtract',\n                Multiply: 'Multiply',\n                Divide: 'Divide',\n                Modulo: 'Modulo',\n                GreaterThan: 'GreaterThan',\n                GreaterThanOrEqual: 'GreaterThanOrEqual',\n                LessThan: 'LessThan',\n                LessThanOrEqual: 'LessThanOrEqual',\n                NotEqual: 'NotEqual',\n                Equal: 'Equal'\n            };\n\n\n            /*\n             * Represents the known unary operators.\n             */\n\n            exports.UnaryExpression = UnaryExpression = (function (_super) {\n                __extends(UnaryExpression, _super);\n\n\n                /*\n                 * @operator: The operator of the unary expression.\n                 * @operand: The operand of the unary expression.\n                 */\n\n                function UnaryExpression(operator, operand) {\n                    this.operator = operator;\n                    this.operand = operand;\n                    UnaryExpression.__super__.constructor.call(this);\n                }\n\n                return UnaryExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.UnaryExpression = function (node) {\n                node = this.QueryExpression(node);\n                node.operand = this.visit(node.operand);\n                return node;\n            };\n\n\n            /*\n             * Represents the known unary operators.\n             */\n\n            exports.UnaryOperators = {\n                Not: 'Not',\n                Negate: 'Negate',\n                Increment: 'Increment',\n                Decrement: 'Decrement'\n            };\n\n\n            /*\n             * Represents a method invocation.\n             */\n\n            exports.InvocationExpression = InvocationExpression = (function (_super) {\n                __extends(InvocationExpression, _super);\n\n\n                /*\n                 * @method: The name of the method to invoke.\n                 * @args: The arguments to the method.\n                 */\n\n                function InvocationExpression(method, args) {\n                    this.method = method;\n                    this.args = args;\n                    InvocationExpression.__super__.constructor.call(this);\n                }\n\n                return InvocationExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.InvocationExpression = function (node) {\n                node = this.QueryExpression(node);\n                node.args = this.visit(node.args);\n                return node;\n            };\n\n\n            /*\n             * Represents the known unary operators.\n             */\n\n            exports.Methods = {\n                Length: 'Length',\n                ToUpperCase: 'ToUpperCase',\n                ToLowerCase: 'ToLowerCase',\n                Trim: 'Trim',\n                IndexOf: 'IndexOf',\n                Replace: 'Replace',\n                Substring: 'Substring',\n                Concat: 'Concat',\n                Day: 'Day',\n                Month: 'Month',\n                Year: 'Year',\n                Floor: 'Floor',\n                Ceiling: 'Ceiling',\n                Round: 'Round'\n            };\n\n\n            /*\n             * Represents a literal string in the query language.\n             */\n\n            exports.LiteralExpression = LiteralExpression = (function (_super) {\n                __extends(LiteralExpression, _super);\n\n\n                /*\n                 * @queryString\n                 * @args\n                 */\n\n                function LiteralExpression(queryString, args) {\n                    this.queryString = queryString;\n                    this.args = args != null ? args : [];\n                    LiteralExpression.__super__.constructor.call(this);\n                }\n\n                return LiteralExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.LiteralExpression = function (node) {\n                return this.QueryExpression(node);\n            };\n\n        }).call(this);\n    };\n\n    $__modules__.Utilities = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var classOf,\n              __slice = [].slice;\n\n            classOf = function (obj) {\n                return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();\n            };\n\n            if (Array.prototype.reduce == null) {\n                Array.prototype.reduce = function () {\n                    var accumulator, array, arrayLength, currentIndex, currentValue, moreArgs;\n                    accumulator = arguments[0], moreArgs = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                    array = this;\n                    arrayLength = array.length;\n                    currentIndex = 0;\n                    currentValue = void 0;\n                    if (array == null) {\n                        throw new TypeError(\"Object is null or undefined\");\n                    }\n                    if (typeof accumulator !== \"function\") {\n                        throw new TypeError(\"First argument is not callable\");\n                    }\n                    if (moreArgs.length === 0) {\n                        if (arrayLength === 0) {\n                            throw new TypeError(\"Array length is 0 and no second argument\");\n                        } else {\n                            currentValue = array[0];\n                            currentIndex = 1;\n                        }\n                    } else {\n                        currentValue = moreArgs[0];\n                    }\n                    while (currentIndex < arrayLength) {\n                        if (currentIndex in array) {\n                            currentValue = accumulator.call(void 0, currentValue, array[currentIndex], array);\n                        }\n                        ++currentIndex;\n                    }\n                    return currentValue;\n                };\n            }\n\n            if (Array.prototype.map == null) {\n                Array.prototype.map = function (callback, thisArg) {\n                    var elem, index, inputArray, len, outputArray, _i, _len;\n                    if (typeof this === \"undefined\" || this === null) {\n                        throw new TypeError(\"this is null or not defined\");\n                    }\n                    if (typeof callback !== \"function\") {\n                        throw new TypeError(callback + \" is not a function\");\n                    }\n                    thisArg = thisArg ? thisArg : void 0;\n                    inputArray = Object(this);\n                    len = inputArray.length >>> 0;\n                    outputArray = new Array(len);\n                    for (index = _i = 0, _len = inputArray.length; _i < _len; index = ++_i) {\n                        elem = inputArray[index];\n                        if (index in inputArray) {\n                            outputArray[index] = callback.call(thisArg, elem, index, inputArray);\n                        }\n                    }\n                    return outputArray;\n                };\n            }\n\n            if (Array.isArray == null) {\n                Array.isArray = function (vArg) {\n                    return Object.prototype.toString.call(vArg) === \"[object Array]\";\n                };\n            }\n\n            exports.isObject = function (obj) {\n                return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase() === 'object';\n            };\n\n            exports.isString = function (obj) {\n                return typeof obj === 'string';\n            };\n\n            exports.isFunction = function (obj) {\n                return typeof obj === 'function';\n            };\n\n            exports.isArray = Array.isArray;\n\n            exports.isNumber = function (obj) {\n                return typeof obj === 'number';\n            };\n\n            exports.isBoolean = function (obj) {\n                return typeof obj === 'boolean';\n            };\n\n            exports.isDate = function (obj) {\n                return classOf(obj) === 'date';\n            };\n\n            exports.functionName = function (fn) {\n                var index, prefix, source;\n                if (typeof Function.prototype.name === 'function') {\n                    return Function.prototype.name.call(fn);\n                } else {\n                    source = fn.toString();\n                    prefix = 'function ';\n                    if (source.slice(0, +(prefix.length - 1) + 1 || 9e9) === prefix) {\n                        index = source.indexOf('(', prefix.length);\n                        if (index > prefix.length) {\n                            return source.slice(prefix.length, +(index - 1) + 1 || 9e9);\n                        }\n                    }\n                    return null;\n                }\n            };\n\n        }).call(this);\n    };\n\n    $__modules__.esprima = function (exports) {\n        /*\n          Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n          Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n          Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n          Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n          Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n          Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>\n          Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n          Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n          Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n        \n          Redistribution and use in source and binary forms, with or without\n          modification, are permitted provided that the following conditions are met:\n        \n            * Redistributions of source code must retain the above copyright\n              notice, this list of conditions and the following disclaimer.\n            * Redistributions in binary form must reproduce the above copyright\n              notice, this list of conditions and the following disclaimer in the\n              documentation and/or other materials provided with the distribution.\n        \n          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n          AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n          IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n          ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n          DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n          (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n          LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n          ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n          (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n          THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n        */\n\n        /*jslint bitwise:true plusplus:true */\n        /*global esprima:true, define:true, exports:true, window: true,\n        createLocationMarker: true,\n        throwError: true, generateStatement: true, peek: true,\n        parseAssignmentExpression: true, parseBlock: true, parseExpression: true,\n        parseFunctionDeclaration: true, parseFunctionExpression: true,\n        parseFunctionSourceElements: true, parseVariableIdentifier: true,\n        parseLeftHandSideExpression: true,\n        parseUnaryExpression: true,\n        parseStatement: true, parseSourceElement: true */\n\n        (function (root, factory) {\n            'use strict';\n\n            // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,\n            // Rhino, and plain browser loading.\n            if (typeof define === 'function' && define.amd) {\n                define(['exports'], factory);\n            } else if (typeof exports !== 'undefined') {\n                factory(exports);\n            } else {\n                factory((root.esprima = {}));\n            }\n        }(this, function (exports) {\n            'use strict';\n\n            var Token,\n                TokenName,\n                FnExprTokens,\n                Syntax,\n                PropertyKind,\n                Messages,\n                Regex,\n                SyntaxTreeDelegate,\n                source,\n                strict,\n                index,\n                lineNumber,\n                lineStart,\n                length,\n                delegate,\n                lookahead,\n                state,\n                extra;\n\n            Token = {\n                BooleanLiteral: 1,\n                EOF: 2,\n                Identifier: 3,\n                Keyword: 4,\n                NullLiteral: 5,\n                NumericLiteral: 6,\n                Punctuator: 7,\n                StringLiteral: 8,\n                RegularExpression: 9\n            };\n\n            TokenName = {};\n            TokenName[Token.BooleanLiteral] = 'Boolean';\n            TokenName[Token.EOF] = '<end>';\n            TokenName[Token.Identifier] = 'Identifier';\n            TokenName[Token.Keyword] = 'Keyword';\n            TokenName[Token.NullLiteral] = 'Null';\n            TokenName[Token.NumericLiteral] = 'Numeric';\n            TokenName[Token.Punctuator] = 'Punctuator';\n            TokenName[Token.StringLiteral] = 'String';\n            TokenName[Token.RegularExpression] = 'RegularExpression';\n\n            // A function following one of those tokens is an expression.\n            FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n                            'return', 'case', 'delete', 'throw', 'void',\n                            // assignment operators\n                            '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',\n                            '&=', '|=', '^=', ',',\n                            // binary/unary operators\n                            '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n                            '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n                            '<=', '<', '>', '!=', '!=='];\n\n            Syntax = {\n                AssignmentExpression: 'AssignmentExpression',\n                ArrayExpression: 'ArrayExpression',\n                BlockStatement: 'BlockStatement',\n                BinaryExpression: 'BinaryExpression',\n                BreakStatement: 'BreakStatement',\n                CallExpression: 'CallExpression',\n                CatchClause: 'CatchClause',\n                ConditionalExpression: 'ConditionalExpression',\n                ContinueStatement: 'ContinueStatement',\n                DoWhileStatement: 'DoWhileStatement',\n                DebuggerStatement: 'DebuggerStatement',\n                EmptyStatement: 'EmptyStatement',\n                ExpressionStatement: 'ExpressionStatement',\n                ForStatement: 'ForStatement',\n                ForInStatement: 'ForInStatement',\n                FunctionDeclaration: 'FunctionDeclaration',\n                FunctionExpression: 'FunctionExpression',\n                Identifier: 'Identifier',\n                IfStatement: 'IfStatement',\n                Literal: 'Literal',\n                LabeledStatement: 'LabeledStatement',\n                LogicalExpression: 'LogicalExpression',\n                MemberExpression: 'MemberExpression',\n                NewExpression: 'NewExpression',\n                ObjectExpression: 'ObjectExpression',\n                Program: 'Program',\n                Property: 'Property',\n                ReturnStatement: 'ReturnStatement',\n                SequenceExpression: 'SequenceExpression',\n                SwitchStatement: 'SwitchStatement',\n                SwitchCase: 'SwitchCase',\n                ThisExpression: 'ThisExpression',\n                ThrowStatement: 'ThrowStatement',\n                TryStatement: 'TryStatement',\n                UnaryExpression: 'UnaryExpression',\n                UpdateExpression: 'UpdateExpression',\n                VariableDeclaration: 'VariableDeclaration',\n                VariableDeclarator: 'VariableDeclarator',\n                WhileStatement: 'WhileStatement',\n                WithStatement: 'WithStatement'\n            };\n\n            PropertyKind = {\n                Data: 1,\n                Get: 2,\n                Set: 4\n            };\n\n            // Error messages should be identical to V8.\n            Messages = {\n                UnexpectedToken: 'Unexpected token %0',\n                UnexpectedNumber: 'Unexpected number',\n                UnexpectedString: 'Unexpected string',\n                UnexpectedIdentifier: 'Unexpected identifier',\n                UnexpectedReserved: 'Unexpected reserved word',\n                UnexpectedEOS: 'Unexpected end of input',\n                NewlineAfterThrow: 'Illegal newline after throw',\n                InvalidRegExp: 'Invalid regular expression',\n                UnterminatedRegExp: 'Invalid regular expression: missing /',\n                InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n                InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n                MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n                NoCatchOrFinally: 'Missing catch or finally after try',\n                UnknownLabel: 'Undefined label \\'%0\\'',\n                Redeclaration: '%0 \\'%1\\' has already been declared',\n                IllegalContinue: 'Illegal continue statement',\n                IllegalBreak: 'Illegal break statement',\n                IllegalReturn: 'Illegal return statement',\n                StrictModeWith: 'Strict mode code may not include a with statement',\n                StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n                StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n                StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n                StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n                StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n                StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n                StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n                StrictDuplicateProperty: 'Duplicate data property in object literal not allowed in strict mode',\n                AccessorDataProperty: 'Object literal may not have data and accessor property with the same name',\n                AccessorGetSet: 'Object literal may not have multiple get/set accessors with the same name',\n                StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n                StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n                StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n                StrictReservedWord: 'Use of future reserved word in strict mode'\n            };\n\n            // See also tools/generate-unicode-regex.py.\n            Regex = {\n                NonAsciiIdentifierStart: new RegExp('[\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]'),\n                NonAsciiIdentifierPart: new RegExp('[\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u0800-\\u082d\\u0840-\\u085b\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\u0900-\\u0963\\u0966-\\u096f\\u0971-\\u0977\\u0979-\\u097f\\u0981-\\u0983\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5c\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c58\\u0c59\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1\\u0cf2\\u0d02\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d57\\u0d60-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb9\\u0ebb-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772\\u1773\\u1780-\\u17d3\\u17d7\\u17dc\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1cd0-\\u1cd2\\u1cd4-\\u1cf6\\u1d00-\\u1de6\\u1dfc-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u200c\\u200d\\u203f\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u2e2f\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099\\u309a\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua697\\ua69f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua827\\ua840-\\ua873\\ua880-\\ua8c4\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua900-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a\\uaa7b\\uaa80-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]')\n            };\n\n            // Ensure the condition is true, otherwise throw an error.\n            // This is only to have a better contract semantic, i.e. another safety net\n            // to catch a logic error. The condition shall be fulfilled in normal case.\n            // Do NOT use this to enforce a certain condition on any user input.\n\n            function assert(condition, message) {\n                if (!condition) {\n                    throw new Error('ASSERT: ' + message);\n                }\n            }\n\n            function isDecimalDigit(ch) {\n                return (ch >= 48 && ch <= 57);   // 0..9\n            }\n\n            function isHexDigit(ch) {\n                return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n            }\n\n            function isOctalDigit(ch) {\n                return '01234567'.indexOf(ch) >= 0;\n            }\n\n\n            // 7.2 White Space\n\n            function isWhiteSpace(ch) {\n                return (ch === 32) ||  // space\n                    (ch === 9) ||      // tab\n                    (ch === 0xB) ||\n                    (ch === 0xC) ||\n                    (ch === 0xA0) ||\n                    (ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromCharCode(ch)) > 0);\n            }\n\n            // 7.3 Line Terminators\n\n            function isLineTerminator(ch) {\n                return (ch === 10) || (ch === 13) || (ch === 0x2028) || (ch === 0x2029);\n            }\n\n            // 7.6 Identifier Names and Identifiers\n\n            function isIdentifierStart(ch) {\n                return (ch === 36) || (ch === 95) ||  // $ (dollar) and _ (underscore)\n                    (ch >= 65 && ch <= 90) ||         // A..Z\n                    (ch >= 97 && ch <= 122) ||        // a..z\n                    (ch === 92) ||                    // \\ (backslash)\n                    ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch)));\n            }\n\n            function isIdentifierPart(ch) {\n                return (ch === 36) || (ch === 95) ||  // $ (dollar) and _ (underscore)\n                    (ch >= 65 && ch <= 90) ||         // A..Z\n                    (ch >= 97 && ch <= 122) ||        // a..z\n                    (ch >= 48 && ch <= 57) ||         // 0..9\n                    (ch === 92) ||                    // \\ (backslash)\n                    ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n            }\n\n            // 7.6.1.2 Future Reserved Words\n\n            function isFutureReservedWord(id) {\n                switch (id) {\n                    case 'class':\n                    case 'enum':\n                    case 'export':\n                    case 'extends':\n                    case 'import':\n                    case 'super':\n                        return true;\n                    default:\n                        return false;\n                }\n            }\n\n            function isStrictModeReservedWord(id) {\n                switch (id) {\n                    case 'implements':\n                    case 'interface':\n                    case 'package':\n                    case 'private':\n                    case 'protected':\n                    case 'public':\n                    case 'static':\n                    case 'yield':\n                    case 'let':\n                        return true;\n                    default:\n                        return false;\n                }\n            }\n\n            function isRestrictedWord(id) {\n                return id === 'eval' || id === 'arguments';\n            }\n\n            // 7.6.1.1 Keywords\n\n            function isKeyword(id) {\n                if (strict && isStrictModeReservedWord(id)) {\n                    return true;\n                }\n\n                // 'const' is specialized as Keyword in V8.\n                // 'yield' and 'let' are for compatiblity with SpiderMonkey and ES.next.\n                // Some others are from future reserved words.\n\n                switch (id.length) {\n                    case 2:\n                        return (id === 'if') || (id === 'in') || (id === 'do');\n                    case 3:\n                        return (id === 'var') || (id === 'for') || (id === 'new') ||\n                            (id === 'try') || (id === 'let');\n                    case 4:\n                        return (id === 'this') || (id === 'else') || (id === 'case') ||\n                            (id === 'void') || (id === 'with') || (id === 'enum');\n                    case 5:\n                        return (id === 'while') || (id === 'break') || (id === 'catch') ||\n                            (id === 'throw') || (id === 'const') || (id === 'yield') ||\n                            (id === 'class') || (id === 'super');\n                    case 6:\n                        return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n                            (id === 'switch') || (id === 'export') || (id === 'import');\n                    case 7:\n                        return (id === 'default') || (id === 'finally') || (id === 'extends');\n                    case 8:\n                        return (id === 'function') || (id === 'continue') || (id === 'debugger');\n                    case 10:\n                        return (id === 'instanceof');\n                    default:\n                        return false;\n                }\n            }\n\n            // 7.4 Comments\n\n            function addComment(type, value, start, end, loc) {\n                var comment;\n\n                assert(typeof start === 'number', 'Comment must have valid position');\n\n                // Because the way the actual token is scanned, often the comments\n                // (if any) are skipped twice during the lexical analysis.\n                // Thus, we need to skip adding a comment if the comment array already\n                // handled it.\n                if (state.lastCommentStart >= start) {\n                    return;\n                }\n                state.lastCommentStart = start;\n\n                comment = {\n                    type: type,\n                    value: value\n                };\n                if (extra.range) {\n                    comment.range = [start, end];\n                }\n                if (extra.loc) {\n                    comment.loc = loc;\n                }\n                extra.comments.push(comment);\n            }\n\n            function skipSingleLineComment() {\n                var start, loc, ch, comment;\n\n                start = index - 2;\n                loc = {\n                    start: {\n                        line: lineNumber,\n                        column: index - lineStart - 2\n                    }\n                };\n\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    ++index;\n                    if (isLineTerminator(ch)) {\n                        if (extra.comments) {\n                            comment = source.slice(start + 2, index - 1);\n                            loc.end = {\n                                line: lineNumber,\n                                column: index - lineStart - 1\n                            };\n                            addComment('Line', comment, start, index - 1, loc);\n                        }\n                        if (ch === 13 && source.charCodeAt(index) === 10) {\n                            ++index;\n                        }\n                        ++lineNumber;\n                        lineStart = index;\n                        return;\n                    }\n                }\n\n                if (extra.comments) {\n                    comment = source.slice(start + 2, index);\n                    loc.end = {\n                        line: lineNumber,\n                        column: index - lineStart\n                    };\n                    addComment('Line', comment, start, index, loc);\n                }\n            }\n\n            function skipMultiLineComment() {\n                var start, loc, ch, comment;\n\n                if (extra.comments) {\n                    start = index - 2;\n                    loc = {\n                        start: {\n                            line: lineNumber,\n                            column: index - lineStart - 2\n                        }\n                    };\n                }\n\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    if (isLineTerminator(ch)) {\n                        if (ch === 13 && source.charCodeAt(index + 1) === 10) {\n                            ++index;\n                        }\n                        ++lineNumber;\n                        ++index;\n                        lineStart = index;\n                        if (index >= length) {\n                            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                        }\n                    } else if (ch === 42) {\n                        // Block comment ends with '*/' (char #42, char #47).\n                        if (source.charCodeAt(index + 1) === 47) {\n                            ++index;\n                            ++index;\n                            if (extra.comments) {\n                                comment = source.slice(start + 2, index - 2);\n                                loc.end = {\n                                    line: lineNumber,\n                                    column: index - lineStart\n                                };\n                                addComment('Block', comment, start, index, loc);\n                            }\n                            return;\n                        }\n                        ++index;\n                    } else {\n                        ++index;\n                    }\n                }\n\n                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n            }\n\n            function skipComment() {\n                var ch;\n\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n\n                    if (isWhiteSpace(ch)) {\n                        ++index;\n                    } else if (isLineTerminator(ch)) {\n                        ++index;\n                        if (ch === 13 && source.charCodeAt(index) === 10) {\n                            ++index;\n                        }\n                        ++lineNumber;\n                        lineStart = index;\n                    } else if (ch === 47) { // 47 is '/'\n                        ch = source.charCodeAt(index + 1);\n                        if (ch === 47) {\n                            ++index;\n                            ++index;\n                            skipSingleLineComment();\n                        } else if (ch === 42) {  // 42 is '*'\n                            ++index;\n                            ++index;\n                            skipMultiLineComment();\n                        } else {\n                            break;\n                        }\n                    } else {\n                        break;\n                    }\n                }\n            }\n\n            function scanHexEscape(prefix) {\n                var i, len, ch, code = 0;\n\n                len = (prefix === 'u') ? 4 : 2;\n                for (i = 0; i < len; ++i) {\n                    if (index < length && isHexDigit(source[index])) {\n                        ch = source[index++];\n                        code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n                    } else {\n                        return '';\n                    }\n                }\n                return String.fromCharCode(code);\n            }\n\n            function getEscapedIdentifier() {\n                var ch, id;\n\n                ch = source.charCodeAt(index++);\n                id = String.fromCharCode(ch);\n\n                // '\\u' (char #92, char #117) denotes an escaped character.\n                if (ch === 92) {\n                    if (source.charCodeAt(index) !== 117) {\n                        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                    }\n                    ++index;\n                    ch = scanHexEscape('u');\n                    if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n                        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                    }\n                    id = ch;\n                }\n\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    if (!isIdentifierPart(ch)) {\n                        break;\n                    }\n                    ++index;\n                    id += String.fromCharCode(ch);\n\n                    // '\\u' (char #92, char #117) denotes an escaped character.\n                    if (ch === 92) {\n                        id = id.substr(0, id.length - 1);\n                        if (source.charCodeAt(index) !== 117) {\n                            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                        }\n                        ++index;\n                        ch = scanHexEscape('u');\n                        if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n                            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                        }\n                        id += ch;\n                    }\n                }\n\n                return id;\n            }\n\n            function getIdentifier() {\n                var start, ch;\n\n                start = index++;\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    if (ch === 92) {\n                        // Blackslash (char #92) marks Unicode escape sequence.\n                        index = start;\n                        return getEscapedIdentifier();\n                    }\n                    if (isIdentifierPart(ch)) {\n                        ++index;\n                    } else {\n                        break;\n                    }\n                }\n\n                return source.slice(start, index);\n            }\n\n            function scanIdentifier() {\n                var start, id, type;\n\n                start = index;\n\n                // Backslash (char #92) starts an escaped character.\n                id = (source.charCodeAt(index) === 92) ? getEscapedIdentifier() : getIdentifier();\n\n                // There is no keyword or literal with only one character.\n                // Thus, it must be an identifier.\n                if (id.length === 1) {\n                    type = Token.Identifier;\n                } else if (isKeyword(id)) {\n                    type = Token.Keyword;\n                } else if (id === 'null') {\n                    type = Token.NullLiteral;\n                } else if (id === 'true' || id === 'false') {\n                    type = Token.BooleanLiteral;\n                } else {\n                    type = Token.Identifier;\n                }\n\n                return {\n                    type: type,\n                    value: id,\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n\n            // 7.7 Punctuators\n\n            function scanPunctuator() {\n                var start = index,\n                    code = source.charCodeAt(index),\n                    code2,\n                    ch1 = source[index],\n                    ch2,\n                    ch3,\n                    ch4;\n\n                switch (code) {\n\n                    // Check for most common single-character punctuators.\n                    case 46:   // . dot\n                    case 40:   // ( open bracket\n                    case 41:   // ) close bracket\n                    case 59:   // ; semicolon\n                    case 44:   // , comma\n                    case 123:  // { open curly brace\n                    case 125:  // } close curly brace\n                    case 91:   // [\n                    case 93:   // ]\n                    case 58:   // :\n                    case 63:   // ?\n                    case 126:  // ~\n                        ++index;\n                        if (extra.tokenize) {\n                            if (code === 40) {\n                                extra.openParenToken = extra.tokens.length;\n                            } else if (code === 123) {\n                                extra.openCurlyToken = extra.tokens.length;\n                            }\n                        }\n                        return {\n                            type: Token.Punctuator,\n                            value: String.fromCharCode(code),\n                            lineNumber: lineNumber,\n                            lineStart: lineStart,\n                            range: [start, index]\n                        };\n\n                    default:\n                        code2 = source.charCodeAt(index + 1);\n\n                        // '=' (char #61) marks an assignment or comparison operator.\n                        if (code2 === 61) {\n                            switch (code) {\n                                case 37:  // %\n                                case 38:  // &\n                                case 42:  // *:\n                                case 43:  // +\n                                case 45:  // -\n                                case 47:  // /\n                                case 60:  // <\n                                case 62:  // >\n                                case 94:  // ^\n                                case 124: // |\n                                    index += 2;\n                                    return {\n                                        type: Token.Punctuator,\n                                        value: String.fromCharCode(code) + String.fromCharCode(code2),\n                                        lineNumber: lineNumber,\n                                        lineStart: lineStart,\n                                        range: [start, index]\n                                    };\n\n                                case 33: // !\n                                case 61: // =\n                                    index += 2;\n\n                                    // !== and ===\n                                    if (source.charCodeAt(index) === 61) {\n                                        ++index;\n                                    }\n                                    return {\n                                        type: Token.Punctuator,\n                                        value: source.slice(start, index),\n                                        lineNumber: lineNumber,\n                                        lineStart: lineStart,\n                                        range: [start, index]\n                                    };\n                                default:\n                                    break;\n                            }\n                        }\n                        break;\n                }\n\n                // Peek more characters.\n\n                ch2 = source[index + 1];\n                ch3 = source[index + 2];\n                ch4 = source[index + 3];\n\n                // 4-character punctuator: >>>=\n\n                if (ch1 === '>' && ch2 === '>' && ch3 === '>') {\n                    if (ch4 === '=') {\n                        index += 4;\n                        return {\n                            type: Token.Punctuator,\n                            value: '>>>=',\n                            lineNumber: lineNumber,\n                            lineStart: lineStart,\n                            range: [start, index]\n                        };\n                    }\n                }\n\n                // 3-character punctuators: === !== >>> <<= >>=\n\n                if (ch1 === '>' && ch2 === '>' && ch3 === '>') {\n                    index += 3;\n                    return {\n                        type: Token.Punctuator,\n                        value: '>>>',\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                if (ch1 === '<' && ch2 === '<' && ch3 === '=') {\n                    index += 3;\n                    return {\n                        type: Token.Punctuator,\n                        value: '<<=',\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                if (ch1 === '>' && ch2 === '>' && ch3 === '=') {\n                    index += 3;\n                    return {\n                        type: Token.Punctuator,\n                        value: '>>=',\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                // Other 2-character punctuators: ++ -- << >> && ||\n\n                if (ch1 === ch2 && ('+-<>&|'.indexOf(ch1) >= 0)) {\n                    index += 2;\n                    return {\n                        type: Token.Punctuator,\n                        value: ch1 + ch2,\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n                    ++index;\n                    return {\n                        type: Token.Punctuator,\n                        value: ch1,\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n            }\n\n            // 7.8.3 Numeric Literals\n\n            function scanHexLiteral(start) {\n                var number = '';\n\n                while (index < length) {\n                    if (!isHexDigit(source[index])) {\n                        break;\n                    }\n                    number += source[index++];\n                }\n\n                if (number.length === 0) {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                if (isIdentifierStart(source.charCodeAt(index))) {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                return {\n                    type: Token.NumericLiteral,\n                    value: parseInt('0x' + number, 16),\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n            function scanOctalLiteral(start) {\n                var number = '0' + source[index++];\n                while (index < length) {\n                    if (!isOctalDigit(source[index])) {\n                        break;\n                    }\n                    number += source[index++];\n                }\n\n                if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                return {\n                    type: Token.NumericLiteral,\n                    value: parseInt(number, 8),\n                    octal: true,\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n            function scanNumericLiteral() {\n                var number, start, ch;\n\n                ch = source[index];\n                assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n                    'Numeric literal must start with a decimal digit or a decimal point');\n\n                start = index;\n                number = '';\n                if (ch !== '.') {\n                    number = source[index++];\n                    ch = source[index];\n\n                    // Hex number starts with '0x'.\n                    // Octal number starts with '0'.\n                    if (number === '0') {\n                        if (ch === 'x' || ch === 'X') {\n                            ++index;\n                            return scanHexLiteral(start);\n                        }\n                        if (isOctalDigit(ch)) {\n                            return scanOctalLiteral(start);\n                        }\n\n                        // decimal number starts with '0' such as '09' is illegal.\n                        if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n                            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                        }\n                    }\n\n                    while (isDecimalDigit(source.charCodeAt(index))) {\n                        number += source[index++];\n                    }\n                    ch = source[index];\n                }\n\n                if (ch === '.') {\n                    number += source[index++];\n                    while (isDecimalDigit(source.charCodeAt(index))) {\n                        number += source[index++];\n                    }\n                    ch = source[index];\n                }\n\n                if (ch === 'e' || ch === 'E') {\n                    number += source[index++];\n\n                    ch = source[index];\n                    if (ch === '+' || ch === '-') {\n                        number += source[index++];\n                    }\n                    if (isDecimalDigit(source.charCodeAt(index))) {\n                        while (isDecimalDigit(source.charCodeAt(index))) {\n                            number += source[index++];\n                        }\n                    } else {\n                        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                    }\n                }\n\n                if (isIdentifierStart(source.charCodeAt(index))) {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                return {\n                    type: Token.NumericLiteral,\n                    value: parseFloat(number),\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n            // 7.8.4 String Literals\n\n            function scanStringLiteral() {\n                var str = '', quote, start, ch, code, unescaped, restore, octal = false;\n\n                quote = source[index];\n                assert((quote === '\\'' || quote === '\"'),\n                    'String literal must starts with a quote');\n\n                start = index;\n                ++index;\n\n                while (index < length) {\n                    ch = source[index++];\n\n                    if (ch === quote) {\n                        quote = '';\n                        break;\n                    } else if (ch === '\\\\') {\n                        ch = source[index++];\n                        if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n                            switch (ch) {\n                                case 'n':\n                                    str += '\\n';\n                                    break;\n                                case 'r':\n                                    str += '\\r';\n                                    break;\n                                case 't':\n                                    str += '\\t';\n                                    break;\n                                case 'u':\n                                case 'x':\n                                    restore = index;\n                                    unescaped = scanHexEscape(ch);\n                                    if (unescaped) {\n                                        str += unescaped;\n                                    } else {\n                                        index = restore;\n                                        str += ch;\n                                    }\n                                    break;\n                                case 'b':\n                                    str += '\\b';\n                                    break;\n                                case 'f':\n                                    str += '\\f';\n                                    break;\n                                case 'v':\n                                    str += '\\x0B';\n                                    break;\n\n                                default:\n                                    if (isOctalDigit(ch)) {\n                                        code = '01234567'.indexOf(ch);\n\n                                        // \\0 is not octal escape sequence\n                                        if (code !== 0) {\n                                            octal = true;\n                                        }\n\n                                        if (index < length && isOctalDigit(source[index])) {\n                                            octal = true;\n                                            code = code * 8 + '01234567'.indexOf(source[index++]);\n\n                                            // 3 digits are only allowed when string starts\n                                            // with 0, 1, 2, 3\n                                            if ('0123'.indexOf(ch) >= 0 &&\n                                                    index < length &&\n                                                    isOctalDigit(source[index])) {\n                                                code = code * 8 + '01234567'.indexOf(source[index++]);\n                                            }\n                                        }\n                                        str += String.fromCharCode(code);\n                                    } else {\n                                        str += ch;\n                                    }\n                                    break;\n                            }\n                        } else {\n                            ++lineNumber;\n                            if (ch === '\\r' && source[index] === '\\n') {\n                                ++index;\n                            }\n                        }\n                    } else if (isLineTerminator(ch.charCodeAt(0))) {\n                        break;\n                    } else {\n                        str += ch;\n                    }\n                }\n\n                if (quote !== '') {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                return {\n                    type: Token.StringLiteral,\n                    value: str,\n                    octal: octal,\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n            function scanRegExp() {\n                var str, ch, start, pattern, flags, value, classMarker = false, restore, terminated = false;\n\n                lookahead = null;\n                skipComment();\n\n                start = index;\n                ch = source[index];\n                assert(ch === '/', 'Regular expression literal must start with a slash');\n                str = source[index++];\n\n                while (index < length) {\n                    ch = source[index++];\n                    str += ch;\n                    if (classMarker) {\n                        if (ch === ']') {\n                            classMarker = false;\n                        }\n                    } else {\n                        if (ch === '\\\\') {\n                            ch = source[index++];\n                            // ECMA-262 7.8.5\n                            if (isLineTerminator(ch.charCodeAt(0))) {\n                                throwError({}, Messages.UnterminatedRegExp);\n                            }\n                            str += ch;\n                        } else if (ch === '/') {\n                            terminated = true;\n                            break;\n                        } else if (ch === '[') {\n                            classMarker = true;\n                        } else if (isLineTerminator(ch.charCodeAt(0))) {\n                            throwError({}, Messages.UnterminatedRegExp);\n                        }\n                    }\n                }\n\n                if (!terminated) {\n                    throwError({}, Messages.UnterminatedRegExp);\n                }\n\n                // Exclude leading and trailing slash.\n                pattern = str.substr(1, str.length - 2);\n\n                flags = '';\n                while (index < length) {\n                    ch = source[index];\n                    if (!isIdentifierPart(ch.charCodeAt(0))) {\n                        break;\n                    }\n\n                    ++index;\n                    if (ch === '\\\\' && index < length) {\n                        ch = source[index];\n                        if (ch === 'u') {\n                            ++index;\n                            restore = index;\n                            ch = scanHexEscape('u');\n                            if (ch) {\n                                flags += ch;\n                                for (str += '\\\\u'; restore < index; ++restore) {\n                                    str += source[restore];\n                                }\n                            } else {\n                                index = restore;\n                                flags += 'u';\n                                str += '\\\\u';\n                            }\n                        } else {\n                            str += '\\\\';\n                        }\n                    } else {\n                        flags += ch;\n                        str += ch;\n                    }\n                }\n\n                try {\n                    value = new RegExp(pattern, flags);\n                } catch (e) {\n                    throwError({}, Messages.InvalidRegExp);\n                }\n\n                peek();\n\n\n                if (extra.tokenize) {\n                    return {\n                        type: Token.RegularExpression,\n                        value: value,\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n                return {\n                    literal: str,\n                    value: value,\n                    range: [start, index]\n                };\n            }\n\n            function isIdentifierName(token) {\n                return token.type === Token.Identifier ||\n                    token.type === Token.Keyword ||\n                    token.type === Token.BooleanLiteral ||\n                    token.type === Token.NullLiteral;\n            }\n\n            function advanceSlash() {\n                var prevToken,\n                    checkToken;\n                // Using the following algorithm:\n                // https://github.com/mozilla/sweet.js/wiki/design\n                prevToken = extra.tokens[extra.tokens.length - 1];\n                if (!prevToken) {\n                    // Nothing before that: it cannot be a division.\n                    return scanRegExp();\n                }\n                if (prevToken.type === 'Punctuator') {\n                    if (prevToken.value === ')') {\n                        checkToken = extra.tokens[extra.openParenToken - 1];\n                        if (checkToken &&\n                                checkToken.type === 'Keyword' &&\n                                (checkToken.value === 'if' ||\n                                 checkToken.value === 'while' ||\n                                 checkToken.value === 'for' ||\n                                 checkToken.value === 'with')) {\n                            return scanRegExp();\n                        }\n                        return scanPunctuator();\n                    }\n                    if (prevToken.value === '}') {\n                        // Dividing a function by anything makes little sense,\n                        // but we have to check for that.\n                        if (extra.tokens[extra.openCurlyToken - 3] &&\n                                extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') {\n                            // Anonymous function.\n                            checkToken = extra.tokens[extra.openCurlyToken - 4];\n                            if (!checkToken) {\n                                return scanPunctuator();\n                            }\n                        } else if (extra.tokens[extra.openCurlyToken - 4] &&\n                                extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') {\n                            // Named function.\n                            checkToken = extra.tokens[extra.openCurlyToken - 5];\n                            if (!checkToken) {\n                                return scanRegExp();\n                            }\n                        } else {\n                            return scanPunctuator();\n                        }\n                        // checkToken determines whether the function is\n                        // a declaration or an expression.\n                        if (FnExprTokens.indexOf(checkToken.value) >= 0) {\n                            // It is an expression.\n                            return scanPunctuator();\n                        }\n                        // It is a declaration.\n                        return scanRegExp();\n                    }\n                    return scanRegExp();\n                }\n                if (prevToken.type === 'Keyword') {\n                    return scanRegExp();\n                }\n                return scanPunctuator();\n            }\n\n            function advance() {\n                var ch;\n\n                skipComment();\n\n                if (index >= length) {\n                    return {\n                        type: Token.EOF,\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [index, index]\n                    };\n                }\n\n                ch = source.charCodeAt(index);\n\n                // Very common: ( and ) and ;\n                if (ch === 40 || ch === 41 || ch === 58) {\n                    return scanPunctuator();\n                }\n\n                // String literal starts with single quote (#39) or double quote (#34).\n                if (ch === 39 || ch === 34) {\n                    return scanStringLiteral();\n                }\n\n                if (isIdentifierStart(ch)) {\n                    return scanIdentifier();\n                }\n\n                // Dot (.) char #46 can also start a floating-point number, hence the need\n                // to check the next character.\n                if (ch === 46) {\n                    if (isDecimalDigit(source.charCodeAt(index + 1))) {\n                        return scanNumericLiteral();\n                    }\n                    return scanPunctuator();\n                }\n\n                if (isDecimalDigit(ch)) {\n                    return scanNumericLiteral();\n                }\n\n                // Slash (/) char #47 can also start a regex.\n                if (extra.tokenize && ch === 47) {\n                    return advanceSlash();\n                }\n\n                return scanPunctuator();\n            }\n\n            function lex() {\n                var token;\n\n                token = lookahead;\n                index = token.range[1];\n                lineNumber = token.lineNumber;\n                lineStart = token.lineStart;\n\n                lookahead = advance();\n\n                index = token.range[1];\n                lineNumber = token.lineNumber;\n                lineStart = token.lineStart;\n\n                return token;\n            }\n\n            function peek() {\n                var pos, line, start;\n\n                pos = index;\n                line = lineNumber;\n                start = lineStart;\n                lookahead = advance();\n                index = pos;\n                lineNumber = line;\n                lineStart = start;\n            }\n\n            SyntaxTreeDelegate = {\n\n                name: 'SyntaxTree',\n\n                markStart: function () {\n                    if (extra.loc) {\n                        state.markerStack.push(index - lineStart);\n                        state.markerStack.push(lineNumber);\n                    }\n                    if (extra.range) {\n                        state.markerStack.push(index);\n                    }\n                },\n\n                markEnd: function (node) {\n                    if (extra.range) {\n                        node.range = [state.markerStack.pop(), index];\n                    }\n                    if (extra.loc) {\n                        node.loc = {\n                            start: {\n                                line: state.markerStack.pop(),\n                                column: state.markerStack.pop()\n                            },\n                            end: {\n                                line: lineNumber,\n                                column: index - lineStart\n                            }\n                        };\n                        this.postProcess(node);\n                    }\n                    return node;\n                },\n\n                markEndIf: function (node) {\n                    if (node.range || node.loc) {\n                        if (extra.loc) {\n                            state.markerStack.pop();\n                            state.markerStack.pop();\n                        }\n                        if (extra.range) {\n                            state.markerStack.pop();\n                        }\n                    } else {\n                        this.markEnd(node);\n                    }\n                    return node;\n                },\n\n                postProcess: function (node) {\n                    if (extra.source) {\n                        node.loc.source = extra.source;\n                    }\n                    return node;\n                },\n\n                createArrayExpression: function (elements) {\n                    return {\n                        type: Syntax.ArrayExpression,\n                        elements: elements\n                    };\n                },\n\n                createAssignmentExpression: function (operator, left, right) {\n                    return {\n                        type: Syntax.AssignmentExpression,\n                        operator: operator,\n                        left: left,\n                        right: right\n                    };\n                },\n\n                createBinaryExpression: function (operator, left, right) {\n                    var type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression :\n                                Syntax.BinaryExpression;\n                    return {\n                        type: type,\n                        operator: operator,\n                        left: left,\n                        right: right\n                    };\n                },\n\n                createBlockStatement: function (body) {\n                    return {\n                        type: Syntax.BlockStatement,\n                        body: body\n                    };\n                },\n\n                createBreakStatement: function (label) {\n                    return {\n                        type: Syntax.BreakStatement,\n                        label: label\n                    };\n                },\n\n                createCallExpression: function (callee, args) {\n                    return {\n                        type: Syntax.CallExpression,\n                        callee: callee,\n                        'arguments': args\n                    };\n                },\n\n                createCatchClause: function (param, body) {\n                    return {\n                        type: Syntax.CatchClause,\n                        param: param,\n                        body: body\n                    };\n                },\n\n                createConditionalExpression: function (test, consequent, alternate) {\n                    return {\n                        type: Syntax.ConditionalExpression,\n                        test: test,\n                        consequent: consequent,\n                        alternate: alternate\n                    };\n                },\n\n                createContinueStatement: function (label) {\n                    return {\n                        type: Syntax.ContinueStatement,\n                        label: label\n                    };\n                },\n\n                createDebuggerStatement: function () {\n                    return {\n                        type: Syntax.DebuggerStatement\n                    };\n                },\n\n                createDoWhileStatement: function (body, test) {\n                    return {\n                        type: Syntax.DoWhileStatement,\n                        body: body,\n                        test: test\n                    };\n                },\n\n                createEmptyStatement: function () {\n                    return {\n                        type: Syntax.EmptyStatement\n                    };\n                },\n\n                createExpressionStatement: function (expression) {\n                    return {\n                        type: Syntax.ExpressionStatement,\n                        expression: expression\n                    };\n                },\n\n                createForStatement: function (init, test, update, body) {\n                    return {\n                        type: Syntax.ForStatement,\n                        init: init,\n                        test: test,\n                        update: update,\n                        body: body\n                    };\n                },\n\n                createForInStatement: function (left, right, body) {\n                    return {\n                        type: Syntax.ForInStatement,\n                        left: left,\n                        right: right,\n                        body: body,\n                        each: false\n                    };\n                },\n\n                createFunctionDeclaration: function (id, params, defaults, body) {\n                    return {\n                        type: Syntax.FunctionDeclaration,\n                        id: id,\n                        params: params,\n                        defaults: defaults,\n                        body: body,\n                        rest: null,\n                        generator: false,\n                        expression: false\n                    };\n                },\n\n                createFunctionExpression: function (id, params, defaults, body) {\n                    return {\n                        type: Syntax.FunctionExpression,\n                        id: id,\n                        params: params,\n                        defaults: defaults,\n                        body: body,\n                        rest: null,\n                        generator: false,\n                        expression: false\n                    };\n                },\n\n                createIdentifier: function (name) {\n                    return {\n                        type: Syntax.Identifier,\n                        name: name\n                    };\n                },\n\n                createIfStatement: function (test, consequent, alternate) {\n                    return {\n                        type: Syntax.IfStatement,\n                        test: test,\n                        consequent: consequent,\n                        alternate: alternate\n                    };\n                },\n\n                createLabeledStatement: function (label, body) {\n                    return {\n                        type: Syntax.LabeledStatement,\n                        label: label,\n                        body: body\n                    };\n                },\n\n                createLiteral: function (token) {\n                    return {\n                        type: Syntax.Literal,\n                        value: token.value,\n                        raw: source.slice(token.range[0], token.range[1])\n                    };\n                },\n\n                createMemberExpression: function (accessor, object, property) {\n                    return {\n                        type: Syntax.MemberExpression,\n                        computed: accessor === '[',\n                        object: object,\n                        property: property\n                    };\n                },\n\n                createNewExpression: function (callee, args) {\n                    return {\n                        type: Syntax.NewExpression,\n                        callee: callee,\n                        'arguments': args\n                    };\n                },\n\n                createObjectExpression: function (properties) {\n                    return {\n                        type: Syntax.ObjectExpression,\n                        properties: properties\n                    };\n                },\n\n                createPostfixExpression: function (operator, argument) {\n                    return {\n                        type: Syntax.UpdateExpression,\n                        operator: operator,\n                        argument: argument,\n                        prefix: false\n                    };\n                },\n\n                createProgram: function (body) {\n                    return {\n                        type: Syntax.Program,\n                        body: body\n                    };\n                },\n\n                createProperty: function (kind, key, value) {\n                    return {\n                        type: Syntax.Property,\n                        key: key,\n                        value: value,\n                        kind: kind\n                    };\n                },\n\n                createReturnStatement: function (argument) {\n                    return {\n                        type: Syntax.ReturnStatement,\n                        argument: argument\n                    };\n                },\n\n                createSequenceExpression: function (expressions) {\n                    return {\n                        type: Syntax.SequenceExpression,\n                        expressions: expressions\n                    };\n                },\n\n                createSwitchCase: function (test, consequent) {\n                    return {\n                        type: Syntax.SwitchCase,\n                        test: test,\n                        consequent: consequent\n                    };\n                },\n\n                createSwitchStatement: function (discriminant, cases) {\n                    return {\n                        type: Syntax.SwitchStatement,\n                        discriminant: discriminant,\n                        cases: cases\n                    };\n                },\n\n                createThisExpression: function () {\n                    return {\n                        type: Syntax.ThisExpression\n                    };\n                },\n\n                createThrowStatement: function (argument) {\n                    return {\n                        type: Syntax.ThrowStatement,\n                        argument: argument\n                    };\n                },\n\n                createTryStatement: function (block, guardedHandlers, handlers, finalizer) {\n                    return {\n                        type: Syntax.TryStatement,\n                        block: block,\n                        guardedHandlers: guardedHandlers,\n                        handlers: handlers,\n                        finalizer: finalizer\n                    };\n                },\n\n                createUnaryExpression: function (operator, argument) {\n                    if (operator === '++' || operator === '--') {\n                        return {\n                            type: Syntax.UpdateExpression,\n                            operator: operator,\n                            argument: argument,\n                            prefix: true\n                        };\n                    }\n                    return {\n                        type: Syntax.UnaryExpression,\n                        operator: operator,\n                        argument: argument,\n                        prefix: true\n                    };\n                },\n\n                createVariableDeclaration: function (declarations, kind) {\n                    return {\n                        type: Syntax.VariableDeclaration,\n                        declarations: declarations,\n                        kind: kind\n                    };\n                },\n\n                createVariableDeclarator: function (id, init) {\n                    return {\n                        type: Syntax.VariableDeclarator,\n                        id: id,\n                        init: init\n                    };\n                },\n\n                createWhileStatement: function (test, body) {\n                    return {\n                        type: Syntax.WhileStatement,\n                        test: test,\n                        body: body\n                    };\n                },\n\n                createWithStatement: function (object, body) {\n                    return {\n                        type: Syntax.WithStatement,\n                        object: object,\n                        body: body\n                    };\n                }\n            };\n\n            // Return true if there is a line terminator before the next token.\n\n            function peekLineTerminator() {\n                var pos, line, start, found;\n\n                pos = index;\n                line = lineNumber;\n                start = lineStart;\n                skipComment();\n                found = lineNumber !== line;\n                index = pos;\n                lineNumber = line;\n                lineStart = start;\n\n                return found;\n            }\n\n            // Throw an exception\n\n            function throwError(token, messageFormat) {\n                var error,\n                    args = Array.prototype.slice.call(arguments, 2),\n                    msg = messageFormat.replace(\n                        /%(\\d)/g,\n                        function (whole, index) {\n                            assert(index < args.length, 'Message reference must be in range');\n                            return args[index];\n                        }\n                    );\n\n                if (typeof token.lineNumber === 'number') {\n                    error = new Error('Line ' + token.lineNumber + ': ' + msg);\n                    error.index = token.range[0];\n                    error.lineNumber = token.lineNumber;\n                    error.column = token.range[0] - lineStart + 1;\n                } else {\n                    error = new Error('Line ' + lineNumber + ': ' + msg);\n                    error.index = index;\n                    error.lineNumber = lineNumber;\n                    error.column = index - lineStart + 1;\n                }\n\n                error.description = msg;\n                throw error;\n            }\n\n            function throwErrorTolerant() {\n                try {\n                    throwError.apply(null, arguments);\n                } catch (e) {\n                    if (extra.errors) {\n                        extra.errors.push(e);\n                    } else {\n                        throw e;\n                    }\n                }\n            }\n\n\n            // Throw an exception because of the token.\n\n            function throwUnexpected(token) {\n                if (token.type === Token.EOF) {\n                    throwError(token, Messages.UnexpectedEOS);\n                }\n\n                if (token.type === Token.NumericLiteral) {\n                    throwError(token, Messages.UnexpectedNumber);\n                }\n\n                if (token.type === Token.StringLiteral) {\n                    throwError(token, Messages.UnexpectedString);\n                }\n\n                if (token.type === Token.Identifier) {\n                    throwError(token, Messages.UnexpectedIdentifier);\n                }\n\n                if (token.type === Token.Keyword) {\n                    if (isFutureReservedWord(token.value)) {\n                        throwError(token, Messages.UnexpectedReserved);\n                    } else if (strict && isStrictModeReservedWord(token.value)) {\n                        throwErrorTolerant(token, Messages.StrictReservedWord);\n                        return;\n                    }\n                    throwError(token, Messages.UnexpectedToken, token.value);\n                }\n\n                // BooleanLiteral, NullLiteral, or Punctuator.\n                throwError(token, Messages.UnexpectedToken, token.value);\n            }\n\n            // Expect the next token to match the specified punctuator.\n            // If not, an exception will be thrown.\n\n            function expect(value) {\n                var token = lex();\n                if (token.type !== Token.Punctuator || token.value !== value) {\n                    throwUnexpected(token);\n                }\n            }\n\n            // Expect the next token to match the specified keyword.\n            // If not, an exception will be thrown.\n\n            function expectKeyword(keyword) {\n                var token = lex();\n                if (token.type !== Token.Keyword || token.value !== keyword) {\n                    throwUnexpected(token);\n                }\n            }\n\n            // Return true if the next token matches the specified punctuator.\n\n            function match(value) {\n                return lookahead.type === Token.Punctuator && lookahead.value === value;\n            }\n\n            // Return true if the next token matches the specified keyword\n\n            function matchKeyword(keyword) {\n                return lookahead.type === Token.Keyword && lookahead.value === keyword;\n            }\n\n            // Return true if the next token is an assignment operator\n\n            function matchAssign() {\n                var op;\n\n                if (lookahead.type !== Token.Punctuator) {\n                    return false;\n                }\n                op = lookahead.value;\n                return op === '=' ||\n                    op === '*=' ||\n                    op === '/=' ||\n                    op === '%=' ||\n                    op === '+=' ||\n                    op === '-=' ||\n                    op === '<<=' ||\n                    op === '>>=' ||\n                    op === '>>>=' ||\n                    op === '&=' ||\n                    op === '^=' ||\n                    op === '|=';\n            }\n\n            function consumeSemicolon() {\n                var line;\n\n                // Catch the very common case first: immediately a semicolon (char #59).\n                if (source.charCodeAt(index) === 59) {\n                    lex();\n                    return;\n                }\n\n                line = lineNumber;\n                skipComment();\n                if (lineNumber !== line) {\n                    return;\n                }\n\n                if (match(';')) {\n                    lex();\n                    return;\n                }\n\n                if (lookahead.type !== Token.EOF && !match('}')) {\n                    throwUnexpected(lookahead);\n                }\n            }\n\n            // Return true if provided expression is LeftHandSideExpression\n\n            function isLeftHandSide(expr) {\n                return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression;\n            }\n\n            // 11.1.4 Array Initialiser\n\n            function parseArrayInitialiser() {\n                var elements = [];\n\n                expect('[');\n\n                while (!match(']')) {\n                    if (match(',')) {\n                        lex();\n                        elements.push(null);\n                    } else {\n                        elements.push(parseAssignmentExpression());\n\n                        if (!match(']')) {\n                            expect(',');\n                        }\n                    }\n                }\n\n                expect(']');\n\n                return delegate.createArrayExpression(elements);\n            }\n\n            // 11.1.5 Object Initialiser\n\n            function parsePropertyFunction(param, first) {\n                var previousStrict, body;\n\n                previousStrict = strict;\n                skipComment();\n                delegate.markStart();\n                body = parseFunctionSourceElements();\n                if (first && strict && isRestrictedWord(param[0].name)) {\n                    throwErrorTolerant(first, Messages.StrictParamName);\n                }\n                strict = previousStrict;\n                return delegate.markEnd(delegate.createFunctionExpression(null, param, [], body));\n            }\n\n            function parseObjectPropertyKey() {\n                var token;\n\n                skipComment();\n                delegate.markStart();\n                token = lex();\n\n                // Note: This function is called only from parseObjectProperty(), where\n                // EOF and Punctuator tokens are already filtered out.\n\n                if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {\n                    if (strict && token.octal) {\n                        throwErrorTolerant(token, Messages.StrictOctalLiteral);\n                    }\n                    return delegate.markEnd(delegate.createLiteral(token));\n                }\n\n                return delegate.markEnd(delegate.createIdentifier(token.value));\n            }\n\n            function parseObjectProperty() {\n                var token, key, id, value, param;\n\n                token = lookahead;\n                skipComment();\n                delegate.markStart();\n\n                if (token.type === Token.Identifier) {\n\n                    id = parseObjectPropertyKey();\n\n                    // Property Assignment: Getter and Setter.\n\n                    if (token.value === 'get' && !match(':')) {\n                        key = parseObjectPropertyKey();\n                        expect('(');\n                        expect(')');\n                        value = parsePropertyFunction([]);\n                        return delegate.markEnd(delegate.createProperty('get', key, value));\n                    }\n                    if (token.value === 'set' && !match(':')) {\n                        key = parseObjectPropertyKey();\n                        expect('(');\n                        token = lookahead;\n                        if (token.type !== Token.Identifier) {\n                            expect(')');\n                            throwErrorTolerant(token, Messages.UnexpectedToken, token.value);\n                            value = parsePropertyFunction([]);\n                        } else {\n                            param = [parseVariableIdentifier()];\n                            expect(')');\n                            value = parsePropertyFunction(param, token);\n                        }\n                        return delegate.markEnd(delegate.createProperty('set', key, value));\n                    }\n                    expect(':');\n                    value = parseAssignmentExpression();\n                    return delegate.markEnd(delegate.createProperty('init', id, value));\n                }\n                if (token.type === Token.EOF || token.type === Token.Punctuator) {\n                    throwUnexpected(token);\n                } else {\n                    key = parseObjectPropertyKey();\n                    expect(':');\n                    value = parseAssignmentExpression();\n                    return delegate.markEnd(delegate.createProperty('init', key, value));\n                }\n            }\n\n            function parseObjectInitialiser() {\n                var properties = [], property, name, key, kind, map = {}, toString = String;\n\n                expect('{');\n\n                while (!match('}')) {\n                    property = parseObjectProperty();\n\n                    if (property.key.type === Syntax.Identifier) {\n                        name = property.key.name;\n                    } else {\n                        name = toString(property.key.value);\n                    }\n                    kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set;\n\n                    key = '$' + name;\n                    if (Object.prototype.hasOwnProperty.call(map, key)) {\n                        if (map[key] === PropertyKind.Data) {\n                            if (strict && kind === PropertyKind.Data) {\n                                throwErrorTolerant({}, Messages.StrictDuplicateProperty);\n                            } else if (kind !== PropertyKind.Data) {\n                                throwErrorTolerant({}, Messages.AccessorDataProperty);\n                            }\n                        } else {\n                            if (kind === PropertyKind.Data) {\n                                throwErrorTolerant({}, Messages.AccessorDataProperty);\n                            } else if (map[key] & kind) {\n                                throwErrorTolerant({}, Messages.AccessorGetSet);\n                            }\n                        }\n                        map[key] |= kind;\n                    } else {\n                        map[key] = kind;\n                    }\n\n                    properties.push(property);\n\n                    if (!match('}')) {\n                        expect(',');\n                    }\n                }\n\n                expect('}');\n\n                return delegate.createObjectExpression(properties);\n            }\n\n            // 11.1.6 The Grouping Operator\n\n            function parseGroupExpression() {\n                var expr;\n\n                expect('(');\n\n                expr = parseExpression();\n\n                expect(')');\n\n                return expr;\n            }\n\n\n            // 11.1 Primary Expressions\n\n            function parsePrimaryExpression() {\n                var type, token, expr;\n\n                if (match('(')) {\n                    return parseGroupExpression();\n                }\n\n                type = lookahead.type;\n                delegate.markStart();\n\n                if (type === Token.Identifier) {\n                    expr = delegate.createIdentifier(lex().value);\n                } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {\n                    if (strict && lookahead.octal) {\n                        throwErrorTolerant(lookahead, Messages.StrictOctalLiteral);\n                    }\n                    expr = delegate.createLiteral(lex());\n                } else if (type === Token.Keyword) {\n                    if (matchKeyword('this')) {\n                        lex();\n                        expr = delegate.createThisExpression();\n                    } else if (matchKeyword('function')) {\n                        expr = parseFunctionExpression();\n                    }\n                } else if (type === Token.BooleanLiteral) {\n                    token = lex();\n                    token.value = (token.value === 'true');\n                    expr = delegate.createLiteral(token);\n                } else if (type === Token.NullLiteral) {\n                    token = lex();\n                    token.value = null;\n                    expr = delegate.createLiteral(token);\n                } else if (match('[')) {\n                    expr = parseArrayInitialiser();\n                } else if (match('{')) {\n                    expr = parseObjectInitialiser();\n                } else if (match('/') || match('/=')) {\n                    expr = delegate.createLiteral(scanRegExp());\n                }\n\n                if (expr) {\n                    return delegate.markEnd(expr);\n                }\n\n                throwUnexpected(lex());\n            }\n\n            // 11.2 Left-Hand-Side Expressions\n\n            function parseArguments() {\n                var args = [];\n\n                expect('(');\n\n                if (!match(')')) {\n                    while (index < length) {\n                        args.push(parseAssignmentExpression());\n                        if (match(')')) {\n                            break;\n                        }\n                        expect(',');\n                    }\n                }\n\n                expect(')');\n\n                return args;\n            }\n\n            function parseNonComputedProperty() {\n                var token;\n\n                delegate.markStart();\n                token = lex();\n\n                if (!isIdentifierName(token)) {\n                    throwUnexpected(token);\n                }\n\n                return delegate.markEnd(delegate.createIdentifier(token.value));\n            }\n\n            function parseNonComputedMember() {\n                expect('.');\n\n                return parseNonComputedProperty();\n            }\n\n            function parseComputedMember() {\n                var expr;\n\n                expect('[');\n\n                expr = parseExpression();\n\n                expect(']');\n\n                return expr;\n            }\n\n            function parseNewExpression() {\n                var callee, args;\n\n                delegate.markStart();\n                expectKeyword('new');\n                callee = parseLeftHandSideExpression();\n                args = match('(') ? parseArguments() : [];\n\n                return delegate.markEnd(delegate.createNewExpression(callee, args));\n            }\n\n            function parseLeftHandSideExpressionAllowCall() {\n                var marker, expr, args, property;\n\n                marker = createLocationMarker();\n\n                expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();\n\n                while (match('.') || match('[') || match('(')) {\n                    if (match('(')) {\n                        args = parseArguments();\n                        expr = delegate.createCallExpression(expr, args);\n                    } else if (match('[')) {\n                        property = parseComputedMember();\n                        expr = delegate.createMemberExpression('[', expr, property);\n                    } else {\n                        property = parseNonComputedMember();\n                        expr = delegate.createMemberExpression('.', expr, property);\n                    }\n                    if (marker) {\n                        marker.end();\n                        marker.apply(expr);\n                    }\n                }\n\n                return expr;\n            }\n\n            function parseLeftHandSideExpression() {\n                var marker, expr, property;\n\n                marker = createLocationMarker();\n\n                expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();\n\n                while (match('.') || match('[')) {\n                    if (match('[')) {\n                        property = parseComputedMember();\n                        expr = delegate.createMemberExpression('[', expr, property);\n                    } else {\n                        property = parseNonComputedMember();\n                        expr = delegate.createMemberExpression('.', expr, property);\n                    }\n                    if (marker) {\n                        marker.end();\n                        marker.apply(expr);\n                    }\n                }\n\n                return expr;\n            }\n\n            // 11.3 Postfix Expressions\n\n            function parsePostfixExpression() {\n                var expr, token;\n\n                delegate.markStart();\n                expr = parseLeftHandSideExpressionAllowCall();\n\n                if (lookahead.type === Token.Punctuator) {\n                    if ((match('++') || match('--')) && !peekLineTerminator()) {\n                        // 11.3.1, 11.3.2\n                        if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n                            throwErrorTolerant({}, Messages.StrictLHSPostfix);\n                        }\n\n                        if (!isLeftHandSide(expr)) {\n                            throwError({}, Messages.InvalidLHSInAssignment);\n                        }\n\n                        token = lex();\n                        expr = delegate.createPostfixExpression(token.value, expr);\n                    }\n                }\n\n                return delegate.markEndIf(expr);\n            }\n\n            // 11.4 Unary Operators\n\n            function parseUnaryExpression() {\n                var token, expr;\n\n                delegate.markStart();\n\n                if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n                    expr = parsePostfixExpression();\n                } else if (match('++') || match('--')) {\n                    token = lex();\n                    expr = parseUnaryExpression();\n                    // 11.4.4, 11.4.5\n                    if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n                        throwErrorTolerant({}, Messages.StrictLHSPrefix);\n                    }\n\n                    if (!isLeftHandSide(expr)) {\n                        throwError({}, Messages.InvalidLHSInAssignment);\n                    }\n\n                    expr = delegate.createUnaryExpression(token.value, expr);\n                } else if (match('+') || match('-') || match('~') || match('!')) {\n                    token = lex();\n                    expr = parseUnaryExpression();\n                    expr = delegate.createUnaryExpression(token.value, expr);\n                } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n                    token = lex();\n                    expr = parseUnaryExpression();\n                    expr = delegate.createUnaryExpression(token.value, expr);\n                    if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {\n                        throwErrorTolerant({}, Messages.StrictDelete);\n                    }\n                } else {\n                    expr = parsePostfixExpression();\n                }\n\n                return delegate.markEndIf(expr);\n            }\n\n            function binaryPrecedence(token, allowIn) {\n                var prec = 0;\n\n                if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {\n                    return 0;\n                }\n\n                switch (token.value) {\n                    case '||':\n                        prec = 1;\n                        break;\n\n                    case '&&':\n                        prec = 2;\n                        break;\n\n                    case '|':\n                        prec = 3;\n                        break;\n\n                    case '^':\n                        prec = 4;\n                        break;\n\n                    case '&':\n                        prec = 5;\n                        break;\n\n                    case '==':\n                    case '!=':\n                    case '===':\n                    case '!==':\n                        prec = 6;\n                        break;\n\n                    case '<':\n                    case '>':\n                    case '<=':\n                    case '>=':\n                    case 'instanceof':\n                        prec = 7;\n                        break;\n\n                    case 'in':\n                        prec = allowIn ? 7 : 0;\n                        break;\n\n                    case '<<':\n                    case '>>':\n                    case '>>>':\n                        prec = 8;\n                        break;\n\n                    case '+':\n                    case '-':\n                        prec = 9;\n                        break;\n\n                    case '*':\n                    case '/':\n                    case '%':\n                        prec = 11;\n                        break;\n\n                    default:\n                        break;\n                }\n\n                return prec;\n            }\n\n            // 11.5 Multiplicative Operators\n            // 11.6 Additive Operators\n            // 11.7 Bitwise Shift Operators\n            // 11.8 Relational Operators\n            // 11.9 Equality Operators\n            // 11.10 Binary Bitwise Operators\n            // 11.11 Binary Logical Operators\n\n            function parseBinaryExpression() {\n                var marker, markers, expr, token, prec, previousAllowIn, stack, right, operator, left, i;\n\n                previousAllowIn = state.allowIn;\n                state.allowIn = true;\n\n                marker = createLocationMarker();\n                left = parseUnaryExpression();\n\n                token = lookahead;\n                prec = binaryPrecedence(token, previousAllowIn);\n                if (prec === 0) {\n                    return left;\n                }\n                token.prec = prec;\n                lex();\n\n                markers = [marker, createLocationMarker()];\n                right = parseUnaryExpression();\n\n                stack = [left, token, right];\n\n                while ((prec = binaryPrecedence(lookahead, previousAllowIn)) > 0) {\n\n                    // Reduce: make a binary expression from the three topmost entries.\n                    while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n                        right = stack.pop();\n                        operator = stack.pop().value;\n                        left = stack.pop();\n                        expr = delegate.createBinaryExpression(operator, left, right);\n                        markers.pop();\n                        marker = markers.pop();\n                        if (marker) {\n                            marker.end();\n                            marker.apply(expr);\n                        }\n                        stack.push(expr);\n                        markers.push(marker);\n                    }\n\n                    // Shift.\n                    token = lex();\n                    token.prec = prec;\n                    stack.push(token);\n                    markers.push(createLocationMarker());\n                    expr = parseUnaryExpression();\n                    stack.push(expr);\n                }\n\n                state.allowIn = previousAllowIn;\n\n                // Final reduce to clean-up the stack.\n                i = stack.length - 1;\n                expr = stack[i];\n                markers.pop();\n                while (i > 1) {\n                    expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n                    i -= 2;\n                    marker = markers.pop();\n                    if (marker) {\n                        marker.end();\n                        marker.apply(expr);\n                    }\n                }\n\n                return expr;\n            }\n\n\n            // 11.12 Conditional Operator\n\n            function parseConditionalExpression() {\n                var expr, previousAllowIn, consequent, alternate;\n\n                delegate.markStart();\n                expr = parseBinaryExpression();\n\n                if (match('?')) {\n                    lex();\n                    previousAllowIn = state.allowIn;\n                    state.allowIn = true;\n                    consequent = parseAssignmentExpression();\n                    state.allowIn = previousAllowIn;\n                    expect(':');\n                    alternate = parseAssignmentExpression();\n\n                    expr = delegate.markEnd(delegate.createConditionalExpression(expr, consequent, alternate));\n                } else {\n                    delegate.markEnd({});\n                }\n\n                return expr;\n            }\n\n            // 11.13 Assignment Operators\n\n            function parseAssignmentExpression() {\n                var token, left, right, node;\n\n                token = lookahead;\n                delegate.markStart();\n                node = left = parseConditionalExpression();\n\n                if (matchAssign()) {\n                    // LeftHandSideExpression\n                    if (!isLeftHandSide(left)) {\n                        throwError({}, Messages.InvalidLHSInAssignment);\n                    }\n\n                    // 11.13.1\n                    if (strict && left.type === Syntax.Identifier && isRestrictedWord(left.name)) {\n                        throwErrorTolerant(token, Messages.StrictLHSAssignment);\n                    }\n\n                    token = lex();\n                    right = parseAssignmentExpression();\n                    node = delegate.createAssignmentExpression(token.value, left, right);\n                }\n\n                return delegate.markEndIf(node);\n            }\n\n            // 11.14 Comma Operator\n\n            function parseExpression() {\n                var expr;\n\n                delegate.markStart();\n                expr = parseAssignmentExpression();\n\n                if (match(',')) {\n                    expr = delegate.createSequenceExpression([expr]);\n\n                    while (index < length) {\n                        if (!match(',')) {\n                            break;\n                        }\n                        lex();\n                        expr.expressions.push(parseAssignmentExpression());\n                    }\n                }\n\n                return delegate.markEndIf(expr);\n            }\n\n            // 12.1 Block\n\n            function parseStatementList() {\n                var list = [],\n                    statement;\n\n                while (index < length) {\n                    if (match('}')) {\n                        break;\n                    }\n                    statement = parseSourceElement();\n                    if (typeof statement === 'undefined') {\n                        break;\n                    }\n                    list.push(statement);\n                }\n\n                return list;\n            }\n\n            function parseBlock() {\n                var block;\n\n                skipComment();\n                delegate.markStart();\n                expect('{');\n\n                block = parseStatementList();\n\n                expect('}');\n\n                return delegate.markEnd(delegate.createBlockStatement(block));\n            }\n\n            // 12.2 Variable Statement\n\n            function parseVariableIdentifier() {\n                var token;\n\n                skipComment();\n                delegate.markStart();\n                token = lex();\n\n                if (token.type !== Token.Identifier) {\n                    throwUnexpected(token);\n                }\n\n                return delegate.markEnd(delegate.createIdentifier(token.value));\n            }\n\n            function parseVariableDeclaration(kind) {\n                var init = null, id;\n\n                skipComment();\n                delegate.markStart();\n                id = parseVariableIdentifier();\n\n                // 12.2.1\n                if (strict && isRestrictedWord(id.name)) {\n                    throwErrorTolerant({}, Messages.StrictVarName);\n                }\n\n                if (kind === 'const') {\n                    expect('=');\n                    init = parseAssignmentExpression();\n                } else if (match('=')) {\n                    lex();\n                    init = parseAssignmentExpression();\n                }\n\n                return delegate.markEnd(delegate.createVariableDeclarator(id, init));\n            }\n\n            function parseVariableDeclarationList(kind) {\n                var list = [];\n\n                do {\n                    list.push(parseVariableDeclaration(kind));\n                    if (!match(',')) {\n                        break;\n                    }\n                    lex();\n                } while (index < length);\n\n                return list;\n            }\n\n            function parseVariableStatement() {\n                var declarations;\n\n                expectKeyword('var');\n\n                declarations = parseVariableDeclarationList();\n\n                consumeSemicolon();\n\n                return delegate.createVariableDeclaration(declarations, 'var');\n            }\n\n            // kind may be `const` or `let`\n            // Both are experimental and not in the specification yet.\n            // see http://wiki.ecmascript.org/doku.php?id=harmony:const\n            // and http://wiki.ecmascript.org/doku.php?id=harmony:let\n            function parseConstLetDeclaration(kind) {\n                var declarations;\n\n                skipComment();\n                delegate.markStart();\n\n                expectKeyword(kind);\n\n                declarations = parseVariableDeclarationList(kind);\n\n                consumeSemicolon();\n\n                return delegate.markEnd(delegate.createVariableDeclaration(declarations, kind));\n            }\n\n            // 12.3 Empty Statement\n\n            function parseEmptyStatement() {\n                expect(';');\n                return delegate.createEmptyStatement();\n            }\n\n            // 12.4 Expression Statement\n\n            function parseExpressionStatement() {\n                var expr = parseExpression();\n                consumeSemicolon();\n                return delegate.createExpressionStatement(expr);\n            }\n\n            // 12.5 If statement\n\n            function parseIfStatement() {\n                var test, consequent, alternate;\n\n                expectKeyword('if');\n\n                expect('(');\n\n                test = parseExpression();\n\n                expect(')');\n\n                consequent = parseStatement();\n\n                if (matchKeyword('else')) {\n                    lex();\n                    alternate = parseStatement();\n                } else {\n                    alternate = null;\n                }\n\n                return delegate.createIfStatement(test, consequent, alternate);\n            }\n\n            // 12.6 Iteration Statements\n\n            function parseDoWhileStatement() {\n                var body, test, oldInIteration;\n\n                expectKeyword('do');\n\n                oldInIteration = state.inIteration;\n                state.inIteration = true;\n\n                body = parseStatement();\n\n                state.inIteration = oldInIteration;\n\n                expectKeyword('while');\n\n                expect('(');\n\n                test = parseExpression();\n\n                expect(')');\n\n                if (match(';')) {\n                    lex();\n                }\n\n                return delegate.createDoWhileStatement(body, test);\n            }\n\n            function parseWhileStatement() {\n                var test, body, oldInIteration;\n\n                expectKeyword('while');\n\n                expect('(');\n\n                test = parseExpression();\n\n                expect(')');\n\n                oldInIteration = state.inIteration;\n                state.inIteration = true;\n\n                body = parseStatement();\n\n                state.inIteration = oldInIteration;\n\n                return delegate.createWhileStatement(test, body);\n            }\n\n            function parseForVariableDeclaration() {\n                var token, declarations;\n\n                delegate.markStart();\n                token = lex();\n                declarations = parseVariableDeclarationList();\n\n                return delegate.markEnd(delegate.createVariableDeclaration(declarations, token.value));\n            }\n\n            function parseForStatement() {\n                var init, test, update, left, right, body, oldInIteration;\n\n                init = test = update = null;\n\n                expectKeyword('for');\n\n                expect('(');\n\n                if (match(';')) {\n                    lex();\n                } else {\n                    if (matchKeyword('var') || matchKeyword('let')) {\n                        state.allowIn = false;\n                        init = parseForVariableDeclaration();\n                        state.allowIn = true;\n\n                        if (init.declarations.length === 1 && matchKeyword('in')) {\n                            lex();\n                            left = init;\n                            right = parseExpression();\n                            init = null;\n                        }\n                    } else {\n                        state.allowIn = false;\n                        init = parseExpression();\n                        state.allowIn = true;\n\n                        if (matchKeyword('in')) {\n                            // LeftHandSideExpression\n                            if (!isLeftHandSide(init)) {\n                                throwError({}, Messages.InvalidLHSInForIn);\n                            }\n\n                            lex();\n                            left = init;\n                            right = parseExpression();\n                            init = null;\n                        }\n                    }\n\n                    if (typeof left === 'undefined') {\n                        expect(';');\n                    }\n                }\n\n                if (typeof left === 'undefined') {\n\n                    if (!match(';')) {\n                        test = parseExpression();\n                    }\n                    expect(';');\n\n                    if (!match(')')) {\n                        update = parseExpression();\n                    }\n                }\n\n                expect(')');\n\n                oldInIteration = state.inIteration;\n                state.inIteration = true;\n\n                body = parseStatement();\n\n                state.inIteration = oldInIteration;\n\n                return (typeof left === 'undefined') ?\n                        delegate.createForStatement(init, test, update, body) :\n                        delegate.createForInStatement(left, right, body);\n            }\n\n            // 12.7 The continue statement\n\n            function parseContinueStatement() {\n                var label = null, key;\n\n                expectKeyword('continue');\n\n                // Optimize the most common form: 'continue;'.\n                if (source.charCodeAt(index) === 59) {\n                    lex();\n\n                    if (!state.inIteration) {\n                        throwError({}, Messages.IllegalContinue);\n                    }\n\n                    return delegate.createContinueStatement(null);\n                }\n\n                if (peekLineTerminator()) {\n                    if (!state.inIteration) {\n                        throwError({}, Messages.IllegalContinue);\n                    }\n\n                    return delegate.createContinueStatement(null);\n                }\n\n                if (lookahead.type === Token.Identifier) {\n                    label = parseVariableIdentifier();\n\n                    key = '$' + label.name;\n                    if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n                        throwError({}, Messages.UnknownLabel, label.name);\n                    }\n                }\n\n                consumeSemicolon();\n\n                if (label === null && !state.inIteration) {\n                    throwError({}, Messages.IllegalContinue);\n                }\n\n                return delegate.createContinueStatement(label);\n            }\n\n            // 12.8 The break statement\n\n            function parseBreakStatement() {\n                var label = null, key;\n\n                expectKeyword('break');\n\n                // Catch the very common case first: immediately a semicolon (char #59).\n                if (source.charCodeAt(index) === 59) {\n                    lex();\n\n                    if (!(state.inIteration || state.inSwitch)) {\n                        throwError({}, Messages.IllegalBreak);\n                    }\n\n                    return delegate.createBreakStatement(null);\n                }\n\n                if (peekLineTerminator()) {\n                    if (!(state.inIteration || state.inSwitch)) {\n                        throwError({}, Messages.IllegalBreak);\n                    }\n\n                    return delegate.createBreakStatement(null);\n                }\n\n                if (lookahead.type === Token.Identifier) {\n                    label = parseVariableIdentifier();\n\n                    key = '$' + label.name;\n                    if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n                        throwError({}, Messages.UnknownLabel, label.name);\n                    }\n                }\n\n                consumeSemicolon();\n\n                if (label === null && !(state.inIteration || state.inSwitch)) {\n                    throwError({}, Messages.IllegalBreak);\n                }\n\n                return delegate.createBreakStatement(label);\n            }\n\n            // 12.9 The return statement\n\n            function parseReturnStatement() {\n                var argument = null;\n\n                expectKeyword('return');\n\n                if (!state.inFunctionBody) {\n                    throwErrorTolerant({}, Messages.IllegalReturn);\n                }\n\n                // 'return' followed by a space and an identifier is very common.\n                if (source.charCodeAt(index) === 32) {\n                    if (isIdentifierStart(source.charCodeAt(index + 1))) {\n                        argument = parseExpression();\n                        consumeSemicolon();\n                        return delegate.createReturnStatement(argument);\n                    }\n                }\n\n                if (peekLineTerminator()) {\n                    return delegate.createReturnStatement(null);\n                }\n\n                if (!match(';')) {\n                    if (!match('}') && lookahead.type !== Token.EOF) {\n                        argument = parseExpression();\n                    }\n                }\n\n                consumeSemicolon();\n\n                return delegate.createReturnStatement(argument);\n            }\n\n            // 12.10 The with statement\n\n            function parseWithStatement() {\n                var object, body;\n\n                if (strict) {\n                    throwErrorTolerant({}, Messages.StrictModeWith);\n                }\n\n                expectKeyword('with');\n\n                expect('(');\n\n                object = parseExpression();\n\n                expect(')');\n\n                body = parseStatement();\n\n                return delegate.createWithStatement(object, body);\n            }\n\n            // 12.10 The swith statement\n\n            function parseSwitchCase() {\n                var test,\n                    consequent = [],\n                    statement;\n\n                skipComment();\n                delegate.markStart();\n                if (matchKeyword('default')) {\n                    lex();\n                    test = null;\n                } else {\n                    expectKeyword('case');\n                    test = parseExpression();\n                }\n                expect(':');\n\n                while (index < length) {\n                    if (match('}') || matchKeyword('default') || matchKeyword('case')) {\n                        break;\n                    }\n                    statement = parseStatement();\n                    consequent.push(statement);\n                }\n\n                return delegate.markEnd(delegate.createSwitchCase(test, consequent));\n            }\n\n            function parseSwitchStatement() {\n                var discriminant, cases, clause, oldInSwitch, defaultFound;\n\n                expectKeyword('switch');\n\n                expect('(');\n\n                discriminant = parseExpression();\n\n                expect(')');\n\n                expect('{');\n\n                if (match('}')) {\n                    lex();\n                    return delegate.createSwitchStatement(discriminant);\n                }\n\n                cases = [];\n\n                oldInSwitch = state.inSwitch;\n                state.inSwitch = true;\n                defaultFound = false;\n\n                while (index < length) {\n                    if (match('}')) {\n                        break;\n                    }\n                    clause = parseSwitchCase();\n                    if (clause.test === null) {\n                        if (defaultFound) {\n                            throwError({}, Messages.MultipleDefaultsInSwitch);\n                        }\n                        defaultFound = true;\n                    }\n                    cases.push(clause);\n                }\n\n                state.inSwitch = oldInSwitch;\n\n                expect('}');\n\n                return delegate.createSwitchStatement(discriminant, cases);\n            }\n\n            // 12.13 The throw statement\n\n            function parseThrowStatement() {\n                var argument;\n\n                expectKeyword('throw');\n\n                if (peekLineTerminator()) {\n                    throwError({}, Messages.NewlineAfterThrow);\n                }\n\n                argument = parseExpression();\n\n                consumeSemicolon();\n\n                return delegate.createThrowStatement(argument);\n            }\n\n            // 12.14 The try statement\n\n            function parseCatchClause() {\n                var param, body;\n\n                skipComment();\n                delegate.markStart();\n                expectKeyword('catch');\n\n                expect('(');\n                if (match(')')) {\n                    throwUnexpected(lookahead);\n                }\n\n                param = parseVariableIdentifier();\n                // 12.14.1\n                if (strict && isRestrictedWord(param.name)) {\n                    throwErrorTolerant({}, Messages.StrictCatchVariable);\n                }\n\n                expect(')');\n                body = parseBlock();\n                return delegate.markEnd(delegate.createCatchClause(param, body));\n            }\n\n            function parseTryStatement() {\n                var block, handlers = [], finalizer = null;\n\n                expectKeyword('try');\n\n                block = parseBlock();\n\n                if (matchKeyword('catch')) {\n                    handlers.push(parseCatchClause());\n                }\n\n                if (matchKeyword('finally')) {\n                    lex();\n                    finalizer = parseBlock();\n                }\n\n                if (handlers.length === 0 && !finalizer) {\n                    throwError({}, Messages.NoCatchOrFinally);\n                }\n\n                return delegate.createTryStatement(block, [], handlers, finalizer);\n            }\n\n            // 12.15 The debugger statement\n\n            function parseDebuggerStatement() {\n                expectKeyword('debugger');\n\n                consumeSemicolon();\n\n                return delegate.createDebuggerStatement();\n            }\n\n            // 12 Statements\n\n            function parseStatement() {\n                var type = lookahead.type,\n                    expr,\n                    labeledBody,\n                    key;\n\n                if (type === Token.EOF) {\n                    throwUnexpected(lookahead);\n                }\n\n                skipComment();\n                delegate.markStart();\n\n                if (type === Token.Punctuator) {\n                    switch (lookahead.value) {\n                        case ';':\n                            return delegate.markEnd(parseEmptyStatement());\n                        case '{':\n                            return delegate.markEnd(parseBlock());\n                        case '(':\n                            return delegate.markEnd(parseExpressionStatement());\n                        default:\n                            break;\n                    }\n                }\n\n                if (type === Token.Keyword) {\n                    switch (lookahead.value) {\n                        case 'break':\n                            return delegate.markEnd(parseBreakStatement());\n                        case 'continue':\n                            return delegate.markEnd(parseContinueStatement());\n                        case 'debugger':\n                            return delegate.markEnd(parseDebuggerStatement());\n                        case 'do':\n                            return delegate.markEnd(parseDoWhileStatement());\n                        case 'for':\n                            return delegate.markEnd(parseForStatement());\n                        case 'function':\n                            return delegate.markEnd(parseFunctionDeclaration());\n                        case 'if':\n                            return delegate.markEnd(parseIfStatement());\n                        case 'return':\n                            return delegate.markEnd(parseReturnStatement());\n                        case 'switch':\n                            return delegate.markEnd(parseSwitchStatement());\n                        case 'throw':\n                            return delegate.markEnd(parseThrowStatement());\n                        case 'try':\n                            return delegate.markEnd(parseTryStatement());\n                        case 'var':\n                            return delegate.markEnd(parseVariableStatement());\n                        case 'while':\n                            return delegate.markEnd(parseWhileStatement());\n                        case 'with':\n                            return delegate.markEnd(parseWithStatement());\n                        default:\n                            break;\n                    }\n                }\n\n                expr = parseExpression();\n\n                // 12.12 Labelled Statements\n                if ((expr.type === Syntax.Identifier) && match(':')) {\n                    lex();\n\n                    key = '$' + expr.name;\n                    if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n                        throwError({}, Messages.Redeclaration, 'Label', expr.name);\n                    }\n\n                    state.labelSet[key] = true;\n                    labeledBody = parseStatement();\n                    delete state.labelSet[key];\n                    return delegate.markEnd(delegate.createLabeledStatement(expr, labeledBody));\n                }\n\n                consumeSemicolon();\n\n                return delegate.markEnd(delegate.createExpressionStatement(expr));\n            }\n\n            // 13 Function Definition\n\n            function parseFunctionSourceElements() {\n                var sourceElement, sourceElements = [], token, directive, firstRestricted,\n                    oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody;\n\n                skipComment();\n                delegate.markStart();\n                expect('{');\n\n                while (index < length) {\n                    if (lookahead.type !== Token.StringLiteral) {\n                        break;\n                    }\n                    token = lookahead;\n\n                    sourceElement = parseSourceElement();\n                    sourceElements.push(sourceElement);\n                    if (sourceElement.expression.type !== Syntax.Literal) {\n                        // this is not directive\n                        break;\n                    }\n                    directive = source.slice(token.range[0] + 1, token.range[1] - 1);\n                    if (directive === 'use strict') {\n                        strict = true;\n                        if (firstRestricted) {\n                            throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);\n                        }\n                    } else {\n                        if (!firstRestricted && token.octal) {\n                            firstRestricted = token;\n                        }\n                    }\n                }\n\n                oldLabelSet = state.labelSet;\n                oldInIteration = state.inIteration;\n                oldInSwitch = state.inSwitch;\n                oldInFunctionBody = state.inFunctionBody;\n\n                state.labelSet = {};\n                state.inIteration = false;\n                state.inSwitch = false;\n                state.inFunctionBody = true;\n\n                while (index < length) {\n                    if (match('}')) {\n                        break;\n                    }\n                    sourceElement = parseSourceElement();\n                    if (typeof sourceElement === 'undefined') {\n                        break;\n                    }\n                    sourceElements.push(sourceElement);\n                }\n\n                expect('}');\n\n                state.labelSet = oldLabelSet;\n                state.inIteration = oldInIteration;\n                state.inSwitch = oldInSwitch;\n                state.inFunctionBody = oldInFunctionBody;\n\n                return delegate.markEnd(delegate.createBlockStatement(sourceElements));\n            }\n\n            function parseParams(firstRestricted) {\n                var param, params = [], token, stricted, paramSet, key, message;\n                expect('(');\n\n                if (!match(')')) {\n                    paramSet = {};\n                    while (index < length) {\n                        token = lookahead;\n                        param = parseVariableIdentifier();\n                        key = '$' + token.value;\n                        if (strict) {\n                            if (isRestrictedWord(token.value)) {\n                                stricted = token;\n                                message = Messages.StrictParamName;\n                            }\n                            if (Object.prototype.hasOwnProperty.call(paramSet, key)) {\n                                stricted = token;\n                                message = Messages.StrictParamDupe;\n                            }\n                        } else if (!firstRestricted) {\n                            if (isRestrictedWord(token.value)) {\n                                firstRestricted = token;\n                                message = Messages.StrictParamName;\n                            } else if (isStrictModeReservedWord(token.value)) {\n                                firstRestricted = token;\n                                message = Messages.StrictReservedWord;\n                            } else if (Object.prototype.hasOwnProperty.call(paramSet, key)) {\n                                firstRestricted = token;\n                                message = Messages.StrictParamDupe;\n                            }\n                        }\n                        params.push(param);\n                        paramSet[key] = true;\n                        if (match(')')) {\n                            break;\n                        }\n                        expect(',');\n                    }\n                }\n\n                expect(')');\n\n                return {\n                    params: params,\n                    stricted: stricted,\n                    firstRestricted: firstRestricted,\n                    message: message\n                };\n            }\n\n            function parseFunctionDeclaration() {\n                var id, params = [], body, token, stricted, tmp, firstRestricted, message, previousStrict;\n\n                skipComment();\n                delegate.markStart();\n\n                expectKeyword('function');\n                token = lookahead;\n                id = parseVariableIdentifier();\n                if (strict) {\n                    if (isRestrictedWord(token.value)) {\n                        throwErrorTolerant(token, Messages.StrictFunctionName);\n                    }\n                } else {\n                    if (isRestrictedWord(token.value)) {\n                        firstRestricted = token;\n                        message = Messages.StrictFunctionName;\n                    } else if (isStrictModeReservedWord(token.value)) {\n                        firstRestricted = token;\n                        message = Messages.StrictReservedWord;\n                    }\n                }\n\n                tmp = parseParams(firstRestricted);\n                params = tmp.params;\n                stricted = tmp.stricted;\n                firstRestricted = tmp.firstRestricted;\n                if (tmp.message) {\n                    message = tmp.message;\n                }\n\n                previousStrict = strict;\n                body = parseFunctionSourceElements();\n                if (strict && firstRestricted) {\n                    throwError(firstRestricted, message);\n                }\n                if (strict && stricted) {\n                    throwErrorTolerant(stricted, message);\n                }\n                strict = previousStrict;\n\n                return delegate.markEnd(delegate.createFunctionDeclaration(id, params, [], body));\n            }\n\n            function parseFunctionExpression() {\n                var token, id = null, stricted, firstRestricted, message, tmp, params = [], body, previousStrict;\n\n                delegate.markStart();\n                expectKeyword('function');\n\n                if (!match('(')) {\n                    token = lookahead;\n                    id = parseVariableIdentifier();\n                    if (strict) {\n                        if (isRestrictedWord(token.value)) {\n                            throwErrorTolerant(token, Messages.StrictFunctionName);\n                        }\n                    } else {\n                        if (isRestrictedWord(token.value)) {\n                            firstRestricted = token;\n                            message = Messages.StrictFunctionName;\n                        } else if (isStrictModeReservedWord(token.value)) {\n                            firstRestricted = token;\n                            message = Messages.StrictReservedWord;\n                        }\n                    }\n                }\n\n                tmp = parseParams(firstRestricted);\n                params = tmp.params;\n                stricted = tmp.stricted;\n                firstRestricted = tmp.firstRestricted;\n                if (tmp.message) {\n                    message = tmp.message;\n                }\n\n                previousStrict = strict;\n                body = parseFunctionSourceElements();\n                if (strict && firstRestricted) {\n                    throwError(firstRestricted, message);\n                }\n                if (strict && stricted) {\n                    throwErrorTolerant(stricted, message);\n                }\n                strict = previousStrict;\n\n                return delegate.markEnd(delegate.createFunctionExpression(id, params, [], body));\n            }\n\n            // 14 Program\n\n            function parseSourceElement() {\n                if (lookahead.type === Token.Keyword) {\n                    switch (lookahead.value) {\n                        case 'const':\n                        case 'let':\n                            return parseConstLetDeclaration(lookahead.value);\n                        case 'function':\n                            return parseFunctionDeclaration();\n                        default:\n                            return parseStatement();\n                    }\n                }\n\n                if (lookahead.type !== Token.EOF) {\n                    return parseStatement();\n                }\n            }\n\n            function parseSourceElements() {\n                var sourceElement, sourceElements = [], token, directive, firstRestricted;\n\n                while (index < length) {\n                    token = lookahead;\n                    if (token.type !== Token.StringLiteral) {\n                        break;\n                    }\n\n                    sourceElement = parseSourceElement();\n                    sourceElements.push(sourceElement);\n                    if (sourceElement.expression.type !== Syntax.Literal) {\n                        // this is not directive\n                        break;\n                    }\n                    directive = source.slice(token.range[0] + 1, token.range[1] - 1);\n                    if (directive === 'use strict') {\n                        strict = true;\n                        if (firstRestricted) {\n                            throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);\n                        }\n                    } else {\n                        if (!firstRestricted && token.octal) {\n                            firstRestricted = token;\n                        }\n                    }\n                }\n\n                while (index < length) {\n                    sourceElement = parseSourceElement();\n                    if (typeof sourceElement === 'undefined') {\n                        break;\n                    }\n                    sourceElements.push(sourceElement);\n                }\n                return sourceElements;\n            }\n\n            function parseProgram() {\n                var body;\n\n                skipComment();\n                delegate.markStart();\n                strict = false;\n                peek();\n                body = parseSourceElements();\n                return delegate.markEnd(delegate.createProgram(body));\n            }\n\n            function collectToken() {\n                var start, loc, token, range, value;\n\n                skipComment();\n                start = index;\n                loc = {\n                    start: {\n                        line: lineNumber,\n                        column: index - lineStart\n                    }\n                };\n\n                token = extra.advance();\n                loc.end = {\n                    line: lineNumber,\n                    column: index - lineStart\n                };\n\n                if (token.type !== Token.EOF) {\n                    range = [token.range[0], token.range[1]];\n                    value = source.slice(token.range[0], token.range[1]);\n                    extra.tokens.push({\n                        type: TokenName[token.type],\n                        value: value,\n                        range: range,\n                        loc: loc\n                    });\n                }\n\n                return token;\n            }\n\n            function collectRegex() {\n                var pos, loc, regex, token;\n\n                skipComment();\n\n                pos = index;\n                loc = {\n                    start: {\n                        line: lineNumber,\n                        column: index - lineStart\n                    }\n                };\n\n                regex = extra.scanRegExp();\n                loc.end = {\n                    line: lineNumber,\n                    column: index - lineStart\n                };\n\n                if (!extra.tokenize) {\n                    // Pop the previous token, which is likely '/' or '/='\n                    if (extra.tokens.length > 0) {\n                        token = extra.tokens[extra.tokens.length - 1];\n                        if (token.range[0] === pos && token.type === 'Punctuator') {\n                            if (token.value === '/' || token.value === '/=') {\n                                extra.tokens.pop();\n                            }\n                        }\n                    }\n\n                    extra.tokens.push({\n                        type: 'RegularExpression',\n                        value: regex.literal,\n                        range: [pos, index],\n                        loc: loc\n                    });\n                }\n\n                return regex;\n            }\n\n            function filterTokenLocation() {\n                var i, entry, token, tokens = [];\n\n                for (i = 0; i < extra.tokens.length; ++i) {\n                    entry = extra.tokens[i];\n                    token = {\n                        type: entry.type,\n                        value: entry.value\n                    };\n                    if (extra.range) {\n                        token.range = entry.range;\n                    }\n                    if (extra.loc) {\n                        token.loc = entry.loc;\n                    }\n                    tokens.push(token);\n                }\n\n                extra.tokens = tokens;\n            }\n\n            function createLocationMarker() {\n\n                if (!extra.loc && !extra.range) {\n                    return null;\n                }\n\n                skipComment();\n\n                return {\n                    marker: [index, lineNumber, index - lineStart, 0, 0, 0],\n\n                    end: function () {\n                        this.marker[3] = index;\n                        this.marker[4] = lineNumber;\n                        this.marker[5] = index - lineStart;\n                    },\n\n                    apply: function (node) {\n                        if (extra.range) {\n                            node.range = [this.marker[0], this.marker[3]];\n                        }\n                        if (extra.loc) {\n                            node.loc = {\n                                start: {\n                                    line: this.marker[1],\n                                    column: this.marker[2]\n                                },\n                                end: {\n                                    line: this.marker[4],\n                                    column: this.marker[5]\n                                }\n                            };\n                        }\n                        node = delegate.postProcess(node);\n                    }\n                };\n            }\n\n            function patch() {\n                if (typeof extra.tokens !== 'undefined') {\n                    extra.advance = advance;\n                    extra.scanRegExp = scanRegExp;\n\n                    advance = collectToken;\n                    scanRegExp = collectRegex;\n                }\n            }\n\n            function unpatch() {\n                if (typeof extra.scanRegExp === 'function') {\n                    advance = extra.advance;\n                    scanRegExp = extra.scanRegExp;\n                }\n            }\n\n            function tokenize(code, options) {\n                var toString,\n                    token,\n                    tokens;\n\n                toString = String;\n                if (typeof code !== 'string' && !(code instanceof String)) {\n                    code = toString(code);\n                }\n\n                delegate = SyntaxTreeDelegate;\n                source = code;\n                index = 0;\n                lineNumber = (source.length > 0) ? 1 : 0;\n                lineStart = 0;\n                length = source.length;\n                lookahead = null;\n                state = {\n                    allowIn: true,\n                    labelSet: {},\n                    inFunctionBody: false,\n                    inIteration: false,\n                    inSwitch: false,\n                    lastCommentStart: -1,\n                };\n\n                extra = {};\n\n                // Options matching.\n                options = options || {};\n\n                // Of course we collect tokens here.\n                options.tokens = true;\n                extra.tokens = [];\n                extra.tokenize = true;\n                // The following two fields are necessary to compute the Regex tokens.\n                extra.openParenToken = -1;\n                extra.openCurlyToken = -1;\n\n                extra.range = (typeof options.range === 'boolean') && options.range;\n                extra.loc = (typeof options.loc === 'boolean') && options.loc;\n\n                if (typeof options.comment === 'boolean' && options.comment) {\n                    extra.comments = [];\n                }\n                if (typeof options.tolerant === 'boolean' && options.tolerant) {\n                    extra.errors = [];\n                }\n\n                if (length > 0) {\n                    if (typeof source[0] === 'undefined') {\n                        // Try first to convert to a string. This is good as fast path\n                        // for old IE which understands string indexing for string\n                        // literals only and not for string object.\n                        if (code instanceof String) {\n                            source = code.valueOf();\n                        }\n                    }\n                }\n\n                patch();\n\n                try {\n                    peek();\n                    if (lookahead.type === Token.EOF) {\n                        return extra.tokens;\n                    }\n\n                    token = lex();\n                    while (lookahead.type !== Token.EOF) {\n                        try {\n                            token = lex();\n                        } catch (lexError) {\n                            token = lookahead;\n                            if (extra.errors) {\n                                extra.errors.push(lexError);\n                                // We have to break on the first error\n                                // to avoid infinite loops.\n                                break;\n                            } else {\n                                throw lexError;\n                            }\n                        }\n                    }\n\n                    filterTokenLocation();\n                    tokens = extra.tokens;\n                    if (typeof extra.comments !== 'undefined') {\n                        tokens.comments = extra.comments;\n                    }\n                    if (typeof extra.errors !== 'undefined') {\n                        tokens.errors = extra.errors;\n                    }\n                } catch (e) {\n                    throw e;\n                } finally {\n                    unpatch();\n                    extra = {};\n                }\n                return tokens;\n            }\n\n            function parse(code, options) {\n                var program, toString;\n\n                toString = String;\n                if (typeof code !== 'string' && !(code instanceof String)) {\n                    code = toString(code);\n                }\n\n                delegate = SyntaxTreeDelegate;\n                source = code;\n                index = 0;\n                lineNumber = (source.length > 0) ? 1 : 0;\n                lineStart = 0;\n                length = source.length;\n                lookahead = null;\n                state = {\n                    allowIn: true,\n                    labelSet: {},\n                    inFunctionBody: false,\n                    inIteration: false,\n                    inSwitch: false,\n                    lastCommentStart: -1,\n                    markerStack: []\n                };\n\n                extra = {};\n                if (typeof options !== 'undefined') {\n                    extra.range = (typeof options.range === 'boolean') && options.range;\n                    extra.loc = (typeof options.loc === 'boolean') && options.loc;\n\n                    if (extra.loc && options.source !== null && options.source !== undefined) {\n                        extra.source = toString(options.source);\n                    }\n\n                    if (typeof options.tokens === 'boolean' && options.tokens) {\n                        extra.tokens = [];\n                    }\n                    if (typeof options.comment === 'boolean' && options.comment) {\n                        extra.comments = [];\n                    }\n                    if (typeof options.tolerant === 'boolean' && options.tolerant) {\n                        extra.errors = [];\n                    }\n                }\n\n                if (length > 0) {\n                    if (typeof source[0] === 'undefined') {\n                        // Try first to convert to a string. This is good as fast path\n                        // for old IE which understands string indexing for string\n                        // literals only and not for string object.\n                        if (code instanceof String) {\n                            source = code.valueOf();\n                        }\n                    }\n                }\n\n                patch();\n                try {\n                    program = parseProgram();\n                    if (typeof extra.comments !== 'undefined') {\n                        program.comments = extra.comments;\n                    }\n                    if (typeof extra.tokens !== 'undefined') {\n                        filterTokenLocation();\n                        program.tokens = extra.tokens;\n                    }\n                    if (typeof extra.errors !== 'undefined') {\n                        program.errors = extra.errors;\n                    }\n                } catch (e) {\n                    throw e;\n                } finally {\n                    unpatch();\n                    extra = {};\n                }\n\n                return program;\n            }\n\n            // Sync with package.json and component.json.\n            exports.version = '1.1.0-dev';\n\n            exports.tokenize = tokenize;\n\n            exports.parse = parse;\n\n            // Deep copy.\n            exports.Syntax = (function () {\n                var name, types = {};\n\n                if (typeof Object.create === 'function') {\n                    types = Object.create(null);\n                }\n\n                for (name in Syntax) {\n                    if (Syntax.hasOwnProperty(name)) {\n                        types[name] = Syntax[name];\n                    }\n                }\n\n                if (typeof Object.freeze === 'function') {\n                    Object.freeze(types);\n                }\n\n                return types;\n            }());\n\n        }));\n        /* vim: set sw=4 ts=4 et tw=80 : */\n    };\n\n    require('MobileServiceClient');\n})(this || exports);\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppHTML/js/platformSpecificFunctions.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nfunction createPlatformSpecificFunctions() {\n\n    var alertFunction;\n\n    alertFunction = function (text, done) {\n        window.alert(text);\n        if (done) {\n            done();\n        }\n    }\n\n    var saveAppInfo = function (lastAppUrl, lastAppKey, lastUploadLogUrl) {\n        /// <param name=\"lastAppUrl\" type=\"String\">The last value used in the application URL text box</param>\n        /// <param name=\"lastAppKey\" type=\"String\">The last value used in the application key text box</param>\n        /// <param name=\"lastUploadLogUrl\" type=\"String\">The last value used in the upload logs URL text box</param>\n        var state = {\n            lastAppUrl: lastAppUrl,\n            lastAppKey: lastAppKey,\n            lastUploadUrl: lastUploadLogUrl\n        };\n    }\n\n    return {\n        alert: alertFunction,\n        saveAppInfo: saveAppInfo,\n        IsHTMLApplication: true,\n    };\n}\n\nvar testPlatform = createPlatformSpecificFunctions();\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs/Package.StoreAssociation.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<StoreAssociation xmlns=\"http://schemas.microsoft.com/appx/2010/storeassociation\">\n  <Publisher>CN=B2D1C358-6AF8-4416-BF73-129CC1F3C152</Publisher>\n  <NamespacePrefix>10805zumoTestUser</NamespacePrefix>\n  <PublisherDisplayName>zumoTestUser</PublisherDisplayName>\n  <GeneratePackageHash>http://www.w3.org/2001/04/xmlenc#sha256</GeneratePackageHash>\n  <SupportedLocales>\n    <Language Code=\"af\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"af-za\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"am\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"am-et\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ar\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-ae\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-bh\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-dz\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-eg\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-iq\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-jo\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-kw\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-lb\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-ly\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-ma\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-om\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-qa\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-sa\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-sy\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-tn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-ye\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"as\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"as-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"az-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"az-arab-az\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"az-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"az-cyrl-az\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"az-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"az-latn-az\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"be\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"be-by\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bg\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"bg-bg\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"bn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bn-bd\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bn-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bs\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bs-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bs-cyrl-ba\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bs-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bs-latn-ba\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ca\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ca-es\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ca-es-valencia\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"chr-cher\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"chr-cher-us\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"chr-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"cs\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"cs-cz\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"cy\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"cy-gb\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"da\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"da-dk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"de\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"de-at\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"de-ch\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"de-de\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"de-li\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"de-lu\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"el\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"el-gr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-au\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-bz\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-ca\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-gb\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-hk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-id\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-ie\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-in\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-jm\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-kz\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-mt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-my\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-nz\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-ph\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-pk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-sg\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-tt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-us\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-vn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-za\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-ar\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-bo\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-cl\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-co\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-cr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-do\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-ec\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-es\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-gt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-hn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-mx\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-ni\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-pa\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-pe\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-pr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-py\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-sv\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-us\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-uy\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-ve\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"et\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"et-ee\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"eu\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"eu-es\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"fa\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"fa-ir\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"fi\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fi-fi\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fil\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"fil-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"fil-ph\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"fr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-015\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-be\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-ca\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-cd\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-ch\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-ci\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-cm\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-fr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-ht\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-lu\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-ma\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-mc\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-ml\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-re\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"frc-latn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"frp-latn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ga\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ga-ie\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"gd-gb\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"gd-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"gl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"gl-es\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"gu\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"gu-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ha-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ha-latn-ng\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"he\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"he-il\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hi\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hi-in\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hr-ba\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hr-hr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hu\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hu-hu\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hy\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"hy-am\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"id\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"id-id\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ig-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ig-ng\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"is\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"is-is\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"it\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"it-ch\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"it-it\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"iu-cans\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"iu-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"iu-latn-ca\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ja\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ja-jp\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ka\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ka-ge\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"kk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"kk-kz\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"km\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"km-kh\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"kn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"kn-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ko\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ko-kr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"kok\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"kok-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ku-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ku-arab-iq\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ky-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ky-kg\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"lb\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"lb-lu\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"lt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"lt-lt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"lv\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"lv-lv\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"mi\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mi-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mi-nz\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mk-mk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ml\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ml-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mn-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mn-mn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mn-mong\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mn-phag\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mr\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mr-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ms\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ms-bn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ms-my\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mt\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mt-mt\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"nb\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"nb-no\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ne\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ne-np\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"nl\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"nl-be\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"nl-nl\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"nn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"nn-no\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"no\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"no-no\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"nso\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"nso-za\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"or\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"or-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pa\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pa-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pa-arab-pk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pa-deva\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pa-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pl\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"pl-pl\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"prs\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"prs-af\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"prs-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"pt-br\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"pt-pt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"quc-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"qut-gt\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"qut-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"quz\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"quz-bo\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"quz-ec\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"quz-pe\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ro\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ro-ro\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ru\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ru-ru\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"rw\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"rw-rw\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sd-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sd-arab-pk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sd-deva\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"si\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"si-lk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sk-sk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sl\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sl-si\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sq\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sq-al\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sr-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sr-cyrl-ba\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sr-cyrl-cs\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sr-cyrl-me\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sr-cyrl-rs\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sr-latn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sr-latn-ba\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sr-latn-cs\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sr-latn-me\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sr-latn-rs\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sv\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sv-fi\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sv-se\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sw\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sw-ke\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ta\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ta-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"te\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"te-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tg-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tg-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tg-cyrl-tj\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tg-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"th\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"th-th\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ti\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ti-et\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tk-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tk-cyrl-tr\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tk-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tk-latn-tr\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tk-tm\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tn-bw\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tn-za\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"tr-tr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"tt-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tt-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tt-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tt-ru\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ug-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ug-cn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ug-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ug-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"uk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"uk-ua\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ur\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ur-pk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"uz-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"uz-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"uz-latn-uz\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"vi\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"vi-vn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"wo\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"wo-sn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"xh\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"xh-za\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"yo-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"yo-ng\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"zh-cn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hans\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hans-cn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hans-sg\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hant\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hant-hk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hant-mo\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hant-tw\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-tw\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zu\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"zu-za\" InMinimumRequirementSet=\"false\" />\n  </SupportedLocales>\n  <ProductReservedInfo>\n    <MainPackageIdentityName>10805zumoTestUser.zumotestblu2</MainPackageIdentityName>\n    <ReservedNames>\n      <ReservedName>zumotestblu2</ReservedName>\n    </ReservedNames>\n  </ProductReservedInfo>\n  <AccountPackageIdentityNames>\n    <MainPackageIdentityName>10805zumoTestUser.ExistingAppBluCurrent</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.ExistingAppBluNext</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.ExistingAppBluPreview</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.ExistingAppDB3Current</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.ExistingAppDB3Next</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.ExistingAppDB3Preview</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.OGFExistingAppBluTC</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.ProdBayZumo</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.ProdBluZumo</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.ProdDB3Zumo</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.ProdHK1Zumo</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.StageBayZumo</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.StageBluZumo</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.StageDB3Zumo</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.ws---fullscaletest</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.ZumoAuthTestEnv</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.zumotestbay3</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.zumotestblu1</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.zumotestblu3</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.zumotestblu4</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.zumotestblu5</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.zumotestdb1</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.zumotestdb2</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.zumotestdb3</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.zumotestdb4</MainPackageIdentityName>\n    <MainPackageIdentityName>10805zumoTestUser.zumotestdb5</MainPackageIdentityName>\n  </AccountPackageIdentityNames>\n  <PackageInfoList LandingUrl=\"https://appdev.microsoft.com:443/StorePortals/Developer/Catalog/ReleaseAnchor/debcddac-702d-4618-92ec-99493d2b5bdf\" />\n</StoreAssociation>"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs/ZumoE2ETestAppJs.jsproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|AnyCPU\">\n      <Configuration>Debug</Configuration>\n      <Platform>AnyCPU</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|ARM\">\n      <Configuration>Debug</Configuration>\n      <Platform>ARM</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x86\">\n      <Configuration>Debug</Configuration>\n      <Platform>x86</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|AnyCPU\">\n      <Configuration>Release</Configuration>\n      <Platform>AnyCPU</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|ARM\">\n      <Configuration>Release</Configuration>\n      <Platform>ARM</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x86\">\n      <Configuration>Release</Configuration>\n      <Platform>x86</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>4864ea0b-c8a1-4af3-88a2-d2daf96c3421</ProjectGuid>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '11.0'\">\n    <VisualStudioVersion>11.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\$(WMSJSProjectDirectory)\\Microsoft.VisualStudio.$(WMSJSProject).Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\$(WMSJSProjectDirectory)\\Microsoft.VisualStudio.$(WMSJSProject).props\" />\n  <PropertyGroup>\n    <TargetPlatformIdentifier>Windows</TargetPlatformIdentifier>\n    <TargetPlatformVersion>8.0</TargetPlatformVersion>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <PackageCertificateKeyFile>ZumoE2ETestAppJs_StoreKey.pfx</PackageCertificateKeyFile>\n    <PackageCertificateThumbprint>160A2C9222BD8CEEB16407105B1A8C8448107DE3</PackageCertificateThumbprint>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|AnyCPU'\">\n    <OutputPath>TestFramework\\$(Configuration)</OutputPath>\n  </PropertyGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n    <Content Include=\"..\\..\\TestFramework\\css\\default.css\">\n      <Link>css\\default.css</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\testFramework.js\">\n      <Link>js\\testFramework.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\testFrameworkConnections.js\">\n      <Link>js\\testFrameworkConnections.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\allTests.js\">\n      <Link>js\\tests\\allTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\apiTests.js\">\n      <Link>js\\tests\\apiTests.js</Link>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\loginTests.js\">\n      <Link>js\\tests\\loginTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\miscTests.js\">\n      <Link>js\\tests\\miscTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\pushTests.js\">\n      <Link>js\\tests\\pushTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\queryTestData.js\">\n      <Link>js\\tests\\queryTestData.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\queryTests.js\">\n      <Link>js\\tests\\queryTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\roundTripTests.js\">\n      <Link>js\\tests\\roundTripTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"..\\..\\TestFramework\\js\\tests\\updateDeleteTests.js\">\n      <Link>js\\tests\\updateDeleteTests.js</Link>\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"default.html\" />\n    <Content Include=\"Fonts\\LiveSymbol.ttf\" />\n    <Content Include=\"images\\logo.png\" />\n    <Content Include=\"images\\smalllogo.png\" />\n    <Content Include=\"images\\splashscreen.png\" />\n    <Content Include=\"images\\storelogo.png\" />\n    <Content Include=\"js\\default.js\" />\n    <Content Include=\"js\\MobileServices.intellisense.js\" />\n    <Content Include=\"js\\MobileServices.js\" />\n    <Content Include=\"js\\MobileServices.min.js\" />\n    <Content Include=\"js\\MobileServices.pri\" />\n    <Content Include=\"js\\platformSpecificFunctions.js\" />\n    <Content Include=\"js\\wl.js\" />\n    <Content Include=\"packages.config\" />\n    <None Include=\"ZumoE2ETestAppJs_StoreKey.pfx\" />\n    <None Include=\"Package.StoreAssociation.xml\" />\n    <None Include=\"ZumoE2ETestAppJs_TemporaryKey.pfx\" />\n  </ItemGroup>\n  <ItemGroup>\n    <SDKReference Include=\"Microsoft.WinJS.1.0, Version=1.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"css\\\" />\n    <Folder Include=\"js\\tests\\\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\$(WMSJSProjectDirectory)\\Microsoft.VisualStudio.$(WMSJSProject).targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below then uncomment\n       that target and the DisableFastUpToDateCheck PropertyGroup. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  <PropertyGroup>\n    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>\n  </PropertyGroup>\n  -->\n</Project>"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs/css/where.txt",
    "content": "The files in this folder are linked to ..\\..\\..\\TestFramework\\css\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs/default.html",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <title>ZumoE2ETestAppJs</title>\n\n    <!-- WinJS references -->\n    <link href=\"//Microsoft.WinJS.1.0/css/ui-dark.css\" rel=\"stylesheet\" />\n    <script src=\"//Microsoft.WinJS.1.0/js/base.js\"></script>\n    <script src=\"//Microsoft.WinJS.1.0/js/ui.js\"></script>\n\n    <!-- ZumoE2ETestAppJs references -->\n    <script type=\"text/javascript\" src=\"/lib/jquery.js\"></script>\n    <link href=\"css/default.css\" rel=\"stylesheet\" />\n    <script src=\"/js/default.js\"></script>\n    <script src=\"js/wl.js\"></script>\n    <script src=\"js/MobileServices.js\"></script>\n\n    <!-- Zumo tests; the order of the references is important -->\n\n    <script src=\"js/platformSpecificFunctions.js\"></script>\n    <script src=\"js/testFramework.js\"></script>\n    <script src=\"js/tests/roundTripTests.js\"></script>\n    <script src=\"js/tests/queryTestData.js\"></script>\n    <script src=\"js/tests/queryTests.js\"></script>\n    <script src=\"js/tests/updateDeleteTests.js\"></script>\n    <script src=\"js/tests/loginTests.js\"></script>\n    <script src=\"js/tests/miscTests.js\"></script>\n    <script src=\"js/tests/pushTests.js\"></script>\n    <script src=\"js/tests/apiTests.js\"></script>\n    <script src=\"js/tests/allTests.js\"></script>\n</head>\n<body>\n    <table id='mainTable'>\n        <tr style=\"height: 100px;\">\n            <th colspan='2' class='borderedCell mainTitle'>Zumo E2E Test App - JS</th>\n        </tr>\n        <tr style=\"height: 150px;\">\n            <td class='borderedCell' colspan='2'>\n                <table style='width: 100%'>\n                    <tr>\n                        <th id='appUrlLabelCell'>App URL:</th>\n                        <th id='appUrlTextCell'>\n                            <input id='txtAppUrl' /></th>\n                        <th id='saveAppInfoCell'>\n                            <button id='btnSaveAppInfo'>Save App Info</button></th>\n                        <td>\n                            <button id=\"btnRunAllTests\">Run All Tests</button>\n                        </td>\n                    </tr>\n                    <tr>\n                        <th id='appKeyLabelCell'>App Key:</th>\n                        <th id='appKeyTextCell'>\n                            <input id='txtAppKey' /></th>\n                        <th id='loadAppInfoCell'>\n                            <button id='btnLoadAppInfo'>Load App Info</button></th>\n                        <td>\n                            <button id=\"btnRunAllUnattendedTests\">Run All Tests (unattended)</button>\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n        <tr>\n            <td id='testGroupsTableCell' class='borderedCell' style=\"vertical-align: text-top;\">\n                <table id='tblTestsGroup'>\n                    <thead>\n                        <tr>\n                            <th class='testsTitle'>Test Groups</th>\n                        </tr>\n                    </thead>\n                    <tbody id='tblTestsGroupBody'></tbody>\n                </table>\n            </td>\n            <td id='testsTableCell' class='borderedCell' style=\"vertical-align: text-top;\">\n                <table id='tblTests' style=\"width: 100%; height: 100%;\">\n                    <thead id=\"tblTestsHead\">\n                        <tr>\n                            <th id='testsTitle' class='testsTitle'>Tests for group: XXX</th>\n                        </tr>\n                        <tr>\n                            <td>\n                                <button id='btnRunTests' style=\"margin: 10px;\">Run Tests</button>\n                                <button id='btnResetTests' style=\"margin: 10px;\">Reset</button>\n                            </td>\n                        </tr>\n                        <tr>\n                            <td>\n                                <button style=\"margin: 10px; width: auto;\" id='btnSendLogs'>Send logs to:</button>\n                                <input type='text' id='txtSendLogsUrl' style='width: 75%; margin: 10px;' />\n                            </td>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td style=\"height: 100%;\">\n                                <div id='table-scroll' style=\"overflow: auto;\">\n                                    <table>\n                                        <tbody id=\"tblTestsBody\" style=\"overflow: auto;\"></tbody>\n                                    </table>\n                                </div>\n                            </td>\n                        </tr>\n                    </tbody>\n                </table>\n            </td>\n        </tr>\n    </table>\n\n    <script type=\"text/javascript\" src=\"js/platformSpecificFunctions.js\"></script>\n    <script type=\"text/javascript\" src=\"js/testFrameworkConnections.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/MobileServices.intellisense.js",
    "content": "﻿// ----------------------------------------------------------------------------\n//! Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n// Declare JSHint globals\n/*global WindowsAzure:false, intellisense:false */\n\nintellisense.annotate(WindowsAzure.MobileServiceClient.prototype, {\n    withFilter: function () {\n        /// <signature>\n        /// <summary>\n        /// Create a new MobileServiceClient with a filter inserted into the http \n        /// pipeline to process all of its HTTP requests and responses.\n        /// </summary>\n        /// <param name=\"serviceFilter\" type=\"Function\">\n        /// The filter to use on the service.  The signature of a serviceFilter is\n        /// function(request, next, callback) where next := function(request, callback)\n        /// and callback := function(error, response).\n        /// </param>\n        /// <returns type=\"WindowsAzure.MobileServiceClient\">\n        /// A new MobileServiceClient whose HTTP requests and responses will be\n        /// filtered as desired.\n        /// </returns>\n        /// </signature>\n    },\n    login: function () {\n        /// <signature>\n        /// <summary>\n        /// Logs a user into a mobile service by using the specified identity provider.\n        /// </summary>\n        /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">\n        /// The name of the identity provider, which instructs Mobile Services which provider to use for authentication. \n        /// The following values are supported: 'facebook', 'twitter', 'google', 'windowsazureactivedirectory' (can also use 'aad')\n        /// or 'microsoftaccount'. If no provider is specified, the 'token' parameter\n        /// is considered a Microsoft Account authentication token. If a provider is specified, \n        /// the 'token' parameter is considered a provider-specific authentication token.\n        /// </param>\n        /// <param name=\"token\" type=\"Object\" mayBeNull=\"true\">\n        /// Optional JSON representation of an authentication token, which can be supplied when the client has already\n        /// obtained a token from the identity provider.\n        /// </param>\n        /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n        /// Only applies to Windows 8 clients.  Will be ignored on other platforms.\n        /// Indicates if single sign-on should be used. Single sign-on requires that the \n        /// application's Package SID be registered with the Windows Azure Mobile Service, \n        /// but it provides a better experience as HTTP cookies are supported so that users \n        /// do not have to login in everytime the application is launched.\n        /// </param>\n        /// <returns type=\"WinJS.Promise\">\n        /// A winJS.Promise object\n        /// </returns>\n        ///</signature>\n    },\n\n    logout: function () {\n        /// <signature>\n        /// <summary>\n        /// Logs a user out of a Mobile Services application.\n        /// </summary>\n        /// </signature>\n    }\n});\n\nintellisense.annotate(WindowsAzure, {\n    MobileServiceClient: function () {\n        ///<signature>\n        /// <summary>\n        /// Creates a new instance of the MobileServiceClient.\n        /// </summary>\n        /// <param name=\"applicationUrl\" type=\"string\" mayBeNull=\"false\">\n        /// The URL of the mobile service..\n        /// </param>\n        /// <param name=\"applicationKey\" type=\"string\" mayBeNull=\"false\">\n        /// The application key of the mobile service..\n        /// </param>\n        ///</signature>\t\t\n    },\n    MobileServiceTable: function () {\n        /// <signature>\n        /// <summary>\n        /// Represents a table in a mobile service to support insert, update, delete, and query operations.\n        /// </summary>\n        /// </signature>\n    }\n});\n\nWindowsAzure.MobileServiceClient = (function () {\n    var _client = WindowsAzure.MobileServiceClient;\n    var wrapper = function () {\n        var instance = new _client();\n        intellisense.annotate(instance, {\n            /// <field name=\"applicationKey\" type=\"string\">The application key</field>\n            applicationKey: String,\n            /// <field name=\"currentUser\" type=\"UserObject\">The current user</field>\n            currentUser: undefined,\n            /// <field name=\"applicationUrl\" type=\"string\">The application Url</field>\n            applicationUrl: String,\n            getTable: function () {\n                /// <signature>\n                /// <summary>\n                /// Gets a reference to a table and its data operations.\n                /// </summary>\n                /// <param name=\"tableName\" type=\"string\">The name of the table.</param>\n                /// <returns type=\"WindowsAzure.MobileServiceTable\">A reference to the table.</returns>\n                /// </signature>\n            },\n            invokeApi: function () {\n                /// <signature>\n                /// <summary>\n                /// Invokes the specified custom api and returns a response object.\n                /// </summary>\n                /// <param name=\"apiName\">\n                /// The custom api to invoke.\n                /// </param>\n                /// <param name=\"options\" mayBeNull=\"true\">\n                /// Contains additional parameter information, valid values are:\n                /// body: The body of the HTTP request.\n                /// method: The HTTP method to use in the request, with the default being POST,\n                /// parameters: Any additional query string parameters, \n                /// headers: HTTP request headers, specified as an object.\n                /// </param>\n                /// </signature>\n            }\n        });\n\n        instance.getTable = (function () {\n            var _table = instance.getTable;\n            var wrapper2 = function () {\n                var instance2 = new _table();\n                intellisense.annotate(instance2, {\n                    del: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Deletes an object from a given table.\n                        /// </summary>\n                        /// <param name=\"instance\" type=\"Object\">The instance to delete from the table.</param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    getMobileServiceClient: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// The client associated with this table.\n                        /// </summary>\n                        /// <returns type=\"WindowsAzure.MobileServiceClient\">A MobileServiceClient</returns>\n                        /// </signature>\n                    },\n                    getTableName: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// The name of the table.\n                        /// </summary>\n                        /// <returns type=\"string\"></returns>\n                        /// </signature>\n                    },\n                    includeTotalCount: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Indicate that the query should include the total count for all the records returned\n                        /// ignoring any take paging limit clause specified.\n                        /// </summary>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    insert: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Inserts data from the supplied JSON object into the table.\n                        /// </summary>\n                        /// <param name=\"instance\" type=\"Object\" mayBeNull=\"false\">\n                        /// The instance to insert into the table.  It will be updated upon completion.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    orderBy: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Sorts a query against the table by the selected columns, in ascending order.\n                        /// </summary>\n                        /// <param name=\"col\" type=\"string\" mayBeNull=\"false\" parameterArray=\"true\">\n                        /// An array of the names of the columns to use for ordering\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    orderByDescending: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Sorts a query against the table by the selected columns, in descending order.\n                        /// </summary>\n                        /// <param name=\"col\" type=\"string\" mayBeNull=\"false\" parameterArray=\"true\">\n                        /// An array of the names of the columns to use for ordering\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    read: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Executes a query against the table.\n                        /// </summary>\n                        /// <param name=\"query\" type=\"Query\" mayBeNull=\"true\">\n                        /// The query to execute. When null or undefined, all rows are returned.\n                        /// </param>\n                        /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                        /// An object of user-defined parameters and values to include in the request URI query string.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    lookup: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Gets an instance from a given table.\n                        /// </summary>\n                        /// <param name=\"id\" type=\"Number\" integer=\"true\">\n                        /// The id of the instance to get from the table.\n                        /// </param>\n                        /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                        /// An object of user-defined parameters and values to include in the request URI query string.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    refresh: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Refresh the current instance with the latest values from the table.\n                        /// </summary>\n                        /// <param name=\"instance\" type=\"Object\">\n                        /// The instance to refresh.\n                        /// </param>\n                        /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                        /// An object of user-defined parameters and values to include in the request URI query string.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    select: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Applies the specific column projection to the query against the table.\n                        /// </summary>\n                        /// <param name=\"projection\" type=\"function\" mayBeNull=\"false\">\n                        /// Function that defines the projection.\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    skip: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Skips the specified number of rows in the query.\n                        /// </summary>\n                        /// <param name=\"count\" type=\"Number\" mayBeNull=\"false\">\n                        /// The number of rows to skip when returning the result.\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    take: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Returns the specified number of rows in the query.\n                        /// </summary>\n                        /// <param name=\"count\" type=\"Number\" mayBeNull=\"false\">\n                        /// The number of rows in the query to return.\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    },\n                    update: function () {\n                        /// <signature>\n                        /// <summary>\t\t\t\t\t\t\n                        /// Updates an object in a given table.\n                        /// </summary>\n                        /// <param name=\"instance\" type=\"Object\" mayBeNull=\"false\"> \n                        /// The instance to update in the table, as a JSON object.\n                        /// </param>\n                        /// <returns type=\"WinJS.Promise\">A WinJS.Promise</returns>\n                        /// </signature>\n                    },\n                    where: function () {\n                        /// <signature>\n                        /// <summary>\n                        /// Applies a row filtering predicate to the query against the table.\n                        /// </summary>\n                        /// <param name=\"object\" type=\"Object\" mayBeNull=\"true\">\n                        /// JSON object that defines the row filter.\n                        /// </param>\n                        /// <returns type=\"Query\">A query that can be further composed.</returns>\n                        /// </signature>\n                    }\n                });\n                return instance2;\n            };\n            intellisense.redirectDefinition(wrapper2, _table);\n            return wrapper2;\n        })();\n\n        return instance;\n    };\n\n    intellisense.redirectDefinition(wrapper, _client);\n    return wrapper;\n})();"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/MobileServices.js",
    "content": "﻿// ----------------------------------------------------------------------------\n//! Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n\n// WARNING: This code was generated by a tool from the library definition\n//     MobileServices.library\n// Do not modify this file directly.  Any changes made to this file will be\n// lost the next time it is regenerated.\n\n\n(function (global) {\n    /// <field name=\"$__modules__\">\n    /// Map module names to either their cached exports or a function which\n    /// will define the module's exports when invoked.\n    /// </field>\n    var $__modules__ = {};\n    var $__fileVersion__ = \"1.0.20702.0\";\n\n    function require(name) {\n        /// <summary>\n        /// Require a module's exports.\n        /// </summary>\n        /// <param name=\"name\" type=\"String\">\n        /// The name of the module.  Note that we don't support full CommonJS\n        /// Module specification names here - we only allow the name of the\n        /// module's file without any extension.\n        /// </param>\n        /// <returns type=\"Object\">\n        /// The exports provided by the module.\n        /// </returns>\n\n        if (name && name.length > 2 && name[0] == '.' && name[1] == '/') {\n            name = name.slice(2);\n        }\n\n        var existing = $__modules__[name];\n        if (typeof existing == 'function') {\n            var exports = {};\n            $__modules__[name] = exports;\n            existing(exports);\n            return exports;\n        } else if (typeof existing == 'object') {\n            return existing;\n        } else {\n            throw 'Unknown module ' + name;\n        }\n    }\n\n    $__modules__.MobileServiceClient = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"Generated\\MobileServices.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Validate = require('Validate');\n        var Platform = require('Platform');\n        var MobileServiceTable = require('MobileServiceTable').MobileServiceTable;\n        var MobileServiceLogin = require('MobileServiceLogin').MobileServiceLogin;\n        var Push;\n        try {\n            Push = require('Push').Push;\n        } catch (e) { }\n\n        function MobileServiceClient(applicationUrl, applicationKey) {\n            /// <summary>\n            /// Initializes a new instance of the MobileServiceClient class.\n            /// </summary>\n            /// <param name=\"applicationUrl\" type=\"string\" mayBeNull=\"false\">\n            /// The URL to the Mobile Services application.\n            /// </param>\n            /// <param name=\"applicationKey\" type=\"string\" mayBeNull=\"false\">\n            /// The Mobile Service application's key.\n            /// </param>\n\n            Validate.isString(applicationUrl, 'applicationUrl');\n            Validate.notNullOrEmpty(applicationUrl, 'applicationUrl');\n            Validate.isString(applicationKey, 'applicationKey');\n\n            this.applicationUrl = applicationUrl;\n            this.applicationKey = applicationKey || null;\n\n            var sdkInfo = Platform.getSdkInfo();\n            var osInfo = Platform.getOperatingSystemInfo();\n            var sdkVersion = sdkInfo.fileVersion.split(\".\").slice(0, 2).join(\".\");\n            this.version = \"ZUMO/\" + sdkVersion + \" (lang=\" + sdkInfo.language + \"; \" +\n                                                    \"os=\" + osInfo.name + \"; \" +\n                                                    \"os_version=\" + osInfo.version + \"; \" +\n                                                    \"arch=\" + osInfo.architecture + \"; \" +\n                                                    \"version=\" + sdkInfo.fileVersion + \")\";\n            this.currentUser = null;\n            this._serviceFilter = null;\n            this._login = new MobileServiceLogin(this);\n            this.getTable = function (tableName) {\n                /// <summary>\n                /// Gets a reference to a table and its data operations.\n                /// </summary>\n                /// <param name=\"tableName\">The name of the table.</param>\n                /// <returns>A reference to the table.</returns>\n\n                Validate.isString(tableName, 'tableName');\n                Validate.notNullOrEmpty(tableName, 'tableName');\n                return new MobileServiceTable(tableName, this);\n            };\n\n            if (Push) {\n                this.push = new Push(this);\n            }\n        }\n\n        // Export the MobileServiceClient class\n        exports.MobileServiceClient = MobileServiceClient;\n\n        // Define the MobileServiceClient in a namespace (note: this has global effects\n        // unless the platform we're using chooses to ignore it because exports are\n        // good enough).\n        Platform.addToMobileServicesClientNamespace({ MobileServiceClient: MobileServiceClient });\n\n        MobileServiceClient.prototype.withFilter = function (serviceFilter) {\n            /// <summary>\n            /// Create a new MobileServiceClient with a filter used to process all\n            /// of its HTTP requests and responses.\n            /// </summary>\n            /// <param name=\"serviceFilter\" type=\"Function\">\n            /// The filter to use on the service.  The signature of a serviceFilter is\n            ///    function(request, next, callback)\n            ///  where\n            ///    next := function(request, callback)\n            ///    callback := function(error, response)\n            /// </param>\n            /// <returns type=\"MobileServiceClient\">\n            /// A new MobileServiceClient whose HTTP requests and responses will be\n            /// filtered as desired.\n            /// </returns>\n            /// <remarks>\n            /// The Mobile Services HTTP pipeline is a chain of filters composed\n            /// together by giving each the next operation which it can invoke\n            /// (zero, one, or many times as necessary).  The default continuation\n            /// of a brand new MobileServiceClient will just get the HTTP response\n            /// for the corresponding request.  Here's an example of a Handle\n            /// implementation that will automatically retry a request that times\n            /// out.\n            ///     function(req, next, callback) {\n            ///         next(req, function(err, rsp) {\n            ///           if (rsp.statusCode >= 400) {\n            ///               next(req, callback);\n            ///           } else {\n            ///               callback(err, rsp);\n            ///           }\n            ///         });\n            ///     }\n            /// Note that because these operations are asynchronous, this sample\n            /// filter could end up actually making two HTTP requests before\n            /// returning a response to the developer without the developer writing\n            /// any special code to handle the situation.\n            /// -\n            /// Filters are composed just like standard function composition.  If\n            /// we had new MobileServiceClient().withFilter(F1).withFilter(F2)\n            /// .withFilter(F3), it's conceptually equivalent to saying:\n            ///     var response = F3(F2(F1(next(request)));\n            /// </remarks>\n\n            Validate.notNull(serviceFilter, 'serviceFilter');\n\n            // Clone the current instance\n            var client = new MobileServiceClient(this.applicationUrl, this.applicationKey);\n            client.currentUser = this.currentUser;\n\n            // Chain the service filter with any existing filters\n            var existingFilter = this._serviceFilter;\n            client._serviceFilter = _.isNull(existingFilter) ?\n                serviceFilter :\n                function (req, next, callback) {\n                    // compose existingFilter with next so it can be used as the next\n                    // of the new serviceFilter\n                    var composed = function (req, callback) {\n                        existingFilter(req, next, callback);\n                    };\n                    serviceFilter(req, composed, callback);\n                };\n\n            return client;\n        };\n\n        MobileServiceClient.prototype._request = function (method, uriFragment, content, ignoreFilters, headers, callback) {\n            /// <summary>\n            /// Perform a web request and include the standard Mobile Services headers.\n            /// </summary>\n            /// <param name=\"method\" type=\"string\">\n            /// The HTTP method used to request the resource.\n            /// </param>\n            /// <param name=\"uriFragment\" type=\"String\">\n            /// URI of the resource to request (relative to the Mobile Services\n            /// runtime).\n            /// </param>\n            /// <param name=\"content\" type=\"Object\">\n            /// Optional content to send to the resource.\n            /// </param>\n            /// <param name=\"ignoreFilters\" type=\"Boolean\" mayBeNull=\"true\">\n            /// Optional parameter to indicate if the client filters should be ignored\n            /// and the request should be sent directly. Is false by default.\n            /// </param>\n            /// <param name=\"headers\" type=\"Object\">\n            /// Optional request headers\n            /// </param>\n            /// <param name=\"callback\" type=\"function(error, response)\">\n            /// Handler that will be called on the response.\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback) && (typeof headers === 'function')) {\n                callback = headers;\n                headers = null;\n            }\n\n            if (_.isNull(callback) && (typeof ignoreFilters === 'function')) {\n                callback = ignoreFilters;\n                ignoreFilters = false;\n            }\n\n            if (_.isNull(callback) && (typeof content === 'function')) {\n                callback = content;\n                content = null;\n            }\n\n            Validate.isString(method, 'method');\n            Validate.notNullOrEmpty(method, 'method');\n            Validate.isString(uriFragment, 'uriFragment');\n            Validate.notNull(uriFragment, 'uriFragment');\n            Validate.notNull(callback, 'callback');\n\n            // Create the absolute URI\n            var options = { type: method.toUpperCase() };\n            options.url = _.url.combinePathSegments(this.applicationUrl, uriFragment);\n\n            // Set MobileServices authentication, application, User-Agent and telemetry headers\n            options.headers = {};\n            if (!_.isNull(headers)) {\n                _.extend(options.headers, headers);\n            }\n            options.headers[\"X-ZUMO-INSTALLATION-ID\"] = MobileServiceClient._applicationInstallationId;\n            if (!_.isNullOrEmpty(this.applicationKey)) {\n                options.headers[\"X-ZUMO-APPLICATION\"] = this.applicationKey;\n            }\n            if (this.currentUser && !_.isNullOrEmpty(this.currentUser.mobileServiceAuthenticationToken)) {\n                options.headers[\"X-ZUMO-AUTH\"] = this.currentUser.mobileServiceAuthenticationToken;\n            }\n            if (!_.isNull(MobileServiceClient._userAgent)) {\n                options.headers[\"User-Agent\"] = MobileServiceClient._userAgent;\n            }\n            if (!_.isNullOrEmpty[\"X-ZUMO-VERSION\"]) {\n                options.headers[\"X-ZUMO-VERSION\"] = this.version;\n            }\n\n            // Add any content as JSON\n            if (!_.isNull(content)) {\n                if (!_.isString(content)) {\n                    options.data = _.toJson(content);\n                } else {\n                    options.data = content;\n                }\n\n                if (!_.hasProperty(options.headers, ['Content-Type', 'content-type', 'CONTENT-TYPE', 'Content-type'])) {\n                    options.headers['Content-Type'] = 'application/json';\n                }\n            } else {\n                // options.data must be set to null if there is no content or the xhr object\n                // will set the content-type to \"application/text\" for non-GET requests.\n                options.data = null;\n            }\n\n            // Treat any >=400 status codes as errors.  Also treat the status code 0 as\n            // an error (which indicates a connection failure).\n            var handler = function (error, response) {\n                if (!_.isNull(error)) {\n                    error = _.createError(error);\n                } else if (!_.isNull(response) && (response.status >= 400 || response.status === 0)) {\n                    error = _.createError(null, response);\n                    response = null;\n                }\n                callback(error, response);\n            };\n\n            // Make the web request\n            if (!_.isNull(this._serviceFilter) && !ignoreFilters) {\n                this._serviceFilter(options, Platform.webRequest, handler);\n            } else {\n                Platform.webRequest(options, handler);\n            }\n        };\n\n        MobileServiceClient.prototype.login = Platform.async(\n            function (provider, token, useSingleSignOn, callback) {\n                /// <summary>\n                /// Log a user into a Mobile Services application given a provider name and optional \n                /// authentication token.\n                /// </summary>\n                /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">\n                /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', \n                /// 'windowsazureactivedirectory' (can also use 'aad')\n                /// or 'microsoftaccount'. If no provider is specified, the 'token' parameter\n                /// is considered a Microsoft Account authentication token. If a provider is specified, \n                /// the 'token' parameter is considered a provider-specific authentication token.\n                /// </param>\n                /// <param name=\"token\" type=\"Object\" mayBeNull=\"true\">\n                /// Optional, provider specific object with existing OAuth token to log in with.\n                /// </param>\n                /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n                /// Only applies to Windows 8 clients.  Will be ignored on other platforms.\n                /// Indicates if single sign-on should be used. Single sign-on requires that the \n                /// application's Package SID be registered with the Microsoft Azure Mobile Service, \n                /// but it provides a better experience as HTTP cookies are supported so that users \n                /// do not have to login in everytime the application is launched.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n                /// Optional callback accepting (error, user) parameters.\n                /// </param>\n                this._login.login(provider, token, useSingleSignOn, callback);\n            });\n\n        MobileServiceClient.prototype.logout = function () {\n            /// <summary>\n            /// Log a user out of a Mobile Services application.\n            /// </summary>\n            this.currentUser = null;\n        };\n\n        MobileServiceClient.prototype.invokeApi = Platform.async(\n            function (apiName, options, callback) {\n                /// <summary>\n                /// Invokes the specified custom api and returns a response object.\n                /// </summary>\n                /// <param name=\"apiName\">\n                /// The custom api to invoke.\n                /// </param>\n                /// <param name=\"options\" mayBeNull=\"true\">\n                /// Contains additional parameter information, valid values are:\n                /// body: The body of the HTTP request.\n                /// method: The HTTP method to use in the request, with the default being POST,\n                /// parameters: Any additional query string parameters, \n                /// headers: HTTP request headers, specified as an object.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n                /// Optional callback accepting (error, results) parameters.\n                /// </param>\n\n                Validate.isString(apiName, 'apiName');\n\n                // Account for absent optional arguments\n                if (_.isNull(callback)) {\n                    if (typeof options === 'function') {\n                        callback = options;\n                        options = null;\n                    }\n                }\n                Validate.notNull(callback, 'callback');\n\n                var parameters, method, body, headers;\n                if (!_.isNull(options)) {\n                    parameters = options.parameters;\n                    if (!_.isNull(parameters)) {\n                        Validate.isValidParametersObject(options.parameters);\n                    }\n\n                    method = options.method;\n                    body = options.body;\n                    headers = options.headers;\n                }\n                if (_.isNull(method)) {\n                    method = \"POST\";\n                }\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(\"api\", apiName);\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this._request(\n                    method,\n                    urlFragment,\n                    body,\n                    null,\n                    headers,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            callback(error, null);\n                        } else {\n                            if (typeof response.getResponseHeader === 'undefined') { // (when using IframeTransport, IE9)\n                                try {\n                                    response.result = _.fromJson(response.responseText);\n                                } catch (e) {\n                                    // Do nothing, since we don't know the content-type, failing may be ok\n                                }\n                            } else if (response.getResponseHeader('Content-Type').toLowerCase().indexOf('json') !== -1) {\n                                response.result = _.fromJson(response.responseText);\n                            }\n\n                            callback(null, response);\n                        }\n                    });\n\n            });\n\n        function getApplicationInstallationId() {\n            /// <summary>\n            /// Gets or creates the static application installation ID.\n            /// </summary>\n            /// <returns type=\"string\">\n            /// The application installation ID.\n            /// </returns>\n\n            // Get or create a new installation ID that can be passed along on each\n            // request to provide telemetry data\n            var applicationInstallationId = null;\n\n            // Check if the config settings exist\n            var path = \"MobileServices.Installation.config\";\n            var contents = Platform.readSetting(path);\n            if (!_.isNull(contents)) {\n                // Parse the contents of the file as JSON and pull out the\n                // application's installation ID.\n                try {\n                    var config = _.fromJson(contents);\n                    applicationInstallationId = config.applicationInstallationId;\n                } catch (ex) {\n                    // Ignore any failures (like invalid JSON, etc.) which will allow\n                    // us to fall through to and regenerate a valid config below\n                }\n            }\n\n            // If no installation ID was found, generate a new one and save the config\n            // settings.  This is pulled out as a separate function because we'll do it\n            // even if we successfully read an existing config but there's no\n            // installation ID.\n            if (_.isNullOrEmpty(applicationInstallationId)) {\n                applicationInstallationId = _.createUniqueInstallationId();\n\n                // TODO: How many other settings should we write out as well?\n                var configText = _.toJson({ applicationInstallationId: applicationInstallationId });\n                Platform.writeSetting(path, configText);\n            }\n\n            return applicationInstallationId;\n        }\n\n\n        /// <summary>\n        /// Get or set the static _applicationInstallationId by checking the settings\n        /// and create the value if necessary.\n        /// </summary>\n        MobileServiceClient._applicationInstallationId = getApplicationInstallationId();\n\n        /// <summary>\n        /// Get or set the static _userAgent by calling into the Platform.\n        /// </summary>\n        MobileServiceClient._userAgent = Platform.getUserAgent();\n\n\n    };\n\n    $__modules__.MobileServiceTable = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"Generated\\MobileServices.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Validate = require('Validate');\n        var Platform = require('Platform');\n        var Query = require('Query').Query;\n\n        // Name of the reserved Mobile Services ID member.\n        var idPropertyName = \"id\";\n\n        // The route separator used to denote the table in a uri like\n        // .../{app}/collections/{coll}.\n        var tableRouteSeperatorName = \"tables\";\n        var idNames = [\"ID\", \"Id\", \"id\", \"iD\"];\n\n        var MobileServiceSystemProperties = {\n            None: 0,\n            CreatedAt: 1,\n            UpdatedAt: 2,\n            Version: 4,\n            All: 0xFFFF\n        };\n\n        var MobileServiceSystemColumns = {\n            CreatedAt: \"__createdAt\",\n            UpdatedAt: \"__updatedAt\",\n            Version: \"__version\"\n        };\n\n        Platform.addToMobileServicesClientNamespace({\n            MobileServiceTable:\n                {\n                    SystemProperties: MobileServiceSystemProperties\n                }\n        });\n\n        function MobileServiceTable(tableName, client) {\n            /// <summary>\n            /// Initializes a new instance of the MobileServiceTable class.\n            /// </summary>\n            /// <param name=\"tableName\" type=\"String\">\n            /// Name of the table.\n            /// </param>\n            /// <param name=\"client\" type=\"MobileServiceClient\" mayBeNull=\"false\">\n            /// The MobileServiceClient used to make requests.\n            /// </param>\n\n            this.getTableName = function () {\n                /// <summary>\n                /// Gets the name of the table.\n                /// </summary>\n                /// <returns type=\"String\">The name of the table.</returns>\n                return tableName;\n            };\n\n            this.getMobileServiceClient = function () {\n                /// <summary>\n                /// Gets the MobileServiceClient associated with this table.\n                /// </summary>\n                /// <returns type=\"MobileServiceClient\">\n                /// The MobileServiceClient associated with this table.\n                /// </returns>\n                return client;\n            };\n\n            this.systemProperties = 0;\n        }\n\n        // Export the MobileServiceTable class\n        exports.MobileServiceTable = MobileServiceTable;\n\n        // We have an internal _read method using callbacks since it's used by both\n        // table.read(query) and query.read().\n        MobileServiceTable.prototype._read = function (query, parameters, callback) {\n            /// <summary>\n            /// Query a table.\n            /// </summary>\n            /// <param name=\"query\" type=\"Object\" mayBeNull=\"true\">\n            /// The query to execute.  It can be null or undefined to get the entire\n            /// collection.\n            /// </param>\n            /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n            /// An object of user-defined parameters and values to include in the request URI query string.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// The callback to invoke when the query is complete.\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback)) {\n                if (_.isNull(parameters) && (typeof query === 'function')) {\n                    callback = query;\n                    query = null;\n                    parameters = null;\n                } else if (typeof parameters === 'function') {\n                    callback = parameters;\n                    parameters = null;\n                    if (!_.isNull(query) && _.isObject(query)) {\n                        // This 'query' argument could be either the query or the user-defined \n                        // parameters object since both are optional.  A query is either (a) a simple string \n                        // or (b) an Object with an toOData member. A user-defined parameters object is just \n                        // an Object.  We need to detect which of these has been passed in here.\n                        if (!_.isString(query) && _.isNull(query.toOData)) {\n                            parameters = query;\n                            query = null;\n                        }\n                    }\n                }\n            }\n\n            // Validate the arguments\n            if (query && _.isString(query)) {\n                Validate.notNullOrEmpty(query, 'query');\n            }\n            if (!_.isNull(parameters)) {\n                Validate.isValidParametersObject(parameters, 'parameters');\n            }\n            Validate.notNull(callback, 'callback');\n\n            // Get the query string\n            var tableName = this.getTableName();\n            var queryString = null;\n            var projection = null;\n            if (_.isString(query)) {\n                queryString = query;\n            } else if (_.isObject(query) && !_.isNull(query.toOData)) {\n                if (query.getComponents) {\n                    var components = query.getComponents();\n                    projection = components.projection;\n                    if (components.table) {\n                        // If the query has a table name, make sure it's compatible with\n                        // the table executing the query\n\n                        if (tableName !== components.table) {\n                            var message = _.format(Platform.getResourceString(\"MobileServiceTable_ReadMismatchedQueryTables\"), tableName, components.table);\n                            callback(_.createError(message), null);\n                            return;\n                        }\n\n                        // The oDataQuery will include the table name; we need to remove\n                        // because the url fragment already includes the table name.\n                        var oDataQuery = query.toOData();\n                        queryString = oDataQuery.replace(new RegExp('^/' + components.table), '');\n                    }\n                }\n            }\n\n            // Add any user-defined query string parameters\n            parameters = addSystemProperties(parameters, this.systemProperties, queryString);\n            if (!_.isNull(parameters)) {\n                var userDefinedQueryString = _.url.getQueryString(parameters);\n                if (!_.isNullOrEmpty(queryString)) {\n                    queryString += '&' + userDefinedQueryString;\n                }\n                else {\n                    queryString = userDefinedQueryString;\n                }\n            }\n\n            // Construct the URL\n            var urlFragment = _.url.combinePathSegments(tableRouteSeperatorName, tableName);\n            if (!_.isNull(queryString)) {\n                urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n            }\n\n            // Make the request\n            this.getMobileServiceClient()._request(\n                'GET',\n                urlFragment,\n                null,\n                function (error, response) {\n                    var values = null;\n                    if (_.isNull(error)) {\n                        // Parse the response\n                        values = _.fromJson(response.responseText);\n\n                        // If the values include the total count, we'll attach that\n                        // directly to the array\n                        if (values &&\n                            !Array.isArray(values) &&\n                            typeof values.count !== 'undefined' &&\n                            typeof values.results !== 'undefined') {\n                            // Create a new total count property on the values array\n                            values.results.totalCount = values.count;\n                            values = values.results;\n                        }\n\n                        // If we have a projection function, apply it to each item\n                        // in the collection\n                        if (projection !== null) {\n                            var i = 0;\n                            for (i = 0; i < values.length; i++) {\n                                values[i] = projection.call(values[i]);\n                            }\n                        }\n                    }\n                    callback(error, values);\n                });\n        };\n\n        MobileServiceTable.prototype.read = Platform.async(MobileServiceTable.prototype._read);\n\n        MobileServiceTable.prototype.insert = Platform.async(\n            function (instance, parameters, callback) {\n                /// <summary>\n                /// Insert a new object into a table.\n                /// </summary>\n                /// <param name=\"instance\" type=\"Object\">\n                /// The instance to insert into the table.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the insert is complete.\n                /// </param>\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.notNull(instance, 'instance');\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters);\n                }\n                Validate.notNull(callback, 'callback');\n\n                // Integer Ids can not have any Id set\n                for (var i in idNames) {\n                    var id = instance[idNames[i]];\n\n                    if (!_.isNullOrZero(id)) {\n                        if (_.isString(id)) {\n                            // String Id's are allowed iif using 'id'\n                            if (idNames[i] !== idPropertyName) {\n                                throw _.format(\n                                    Platform.getResourceString(\"MobileServiceTable_InsertIdAlreadySet\"),\n                                    idPropertyName);\n                            } else {\n                                Validate.isValidId(id, idPropertyName);\n                            }\n                        } else {\n                            throw _.format(\n                                Platform.getResourceString(\"MobileServiceTable_InsertIdAlreadySet\"),\n                                idPropertyName);\n                        }\n                    }\n                }\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(tableRouteSeperatorName, this.getTableName());\n                parameters = addSystemProperties(parameters, this.systemProperties);\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'POST',\n                    urlFragment,\n                    instance,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            callback(error, null);\n                        } else {\n                            var result = getItemFromResponse(response);\n                            result = Platform.allowPlatformToMutateOriginal(instance, result);\n                            callback(null, result);\n                        }\n                    });\n            });\n\n        MobileServiceTable.prototype.update = Platform.async(\n            function (instance, parameters, callback) {\n                /// <summary>\n                /// Update an object in a given table.\n                /// </summary>\n                /// <param name=\"instance\" type=\"Object\">\n                /// The instance to update in the table.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the update is complete.\n                /// </param>\n                var version,\n                    headers = [],\n                    serverInstance;\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.notNull(instance, 'instance');\n                Validate.isValidId(instance[idPropertyName], 'instance.' + idPropertyName);\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters, 'parameters');\n                }\n                Validate.notNull(callback, 'callback');\n\n                if (_.isString(instance[idPropertyName])) {\n                    version = instance.__version;\n                    serverInstance = removeSystemProperties(instance);\n                } else {\n                    serverInstance = instance;\n                }\n                parameters = addSystemProperties(parameters, this.systemProperties);\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(\n                        tableRouteSeperatorName,\n                        this.getTableName(),\n                        encodeURIComponent(instance[idPropertyName].toString()));\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                if (!_.isNullOrEmpty(version)) {\n                    headers['If-Match'] = getEtagFromVersion(version);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'PATCH',\n                    urlFragment,\n                    serverInstance,\n                    false,\n                    headers,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            setServerItemIfPreconditionFailed(error);\n                            callback(error);\n                        } else {\n                            var result = getItemFromResponse(response);\n                            result = Platform.allowPlatformToMutateOriginal(instance, result);\n                            callback(null, result);\n                        }\n                    });\n            });\n\n        MobileServiceTable.prototype.refresh = Platform.async(\n            function (instance, parameters, callback) {\n                /// <summary>\n                ///  Refresh the current instance with the latest values from the\n                ///  table.\n                /// </summary>\n                /// <param name=\"instance\" type=\"Object\">\n                /// The instance to refresh.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the refresh is complete.\n                /// </param>\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.notNull(instance, 'instance');\n                if (!_.isValidId(instance[idPropertyName], idPropertyName)) {\n                    if (typeof instance[idPropertyName] === 'string' && instance[idPropertyName] !== '') {\n                        throw _.format(Platform.getResourceString(\"Validate_InvalidId\"), idPropertyName);\n                    } else {\n                        callback(null, instance);\n                    }\n                    return;\n                }\n\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters, 'parameters');\n                }\n                Validate.notNull(callback, 'callback');\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(\n                        tableRouteSeperatorName,\n                        this.getTableName());\n\n                if (typeof instance[idPropertyName] === 'string') {\n                    var id = encodeURIComponent(instance[idPropertyName]).replace(/\\'/g, '%27%27');\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, \"?$filter=id eq '\" + id + \"'\");\n                } else {\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, \"?$filter=id eq \" + encodeURIComponent(instance[idPropertyName].toString()));\n                }\n\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'GET',\n                    urlFragment,\n                    instance,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            callback(error, null);\n                        } else {\n                            var result = _.fromJson(response.responseText);\n                            if (Array.isArray(result)) {\n                                result = result[0]; //get first object from array\n                            }\n\n                            if (!result) {\n                                var message = _.format(\n                                    Platform.getResourceString(\"MobileServiceTable_NotSingleObject\"),\n                                    idPropertyName);\n                                callback(_.createError(message), null);\n                            }\n\n                            result = Platform.allowPlatformToMutateOriginal(instance, result);\n                            callback(null, result);\n                        }\n                    });\n            });\n\n        MobileServiceTable.prototype.lookup = Platform.async(\n            function (id, parameters, callback) {\n                /// <summary>\n                /// Gets an instance from a given table.\n                /// </summary>\n                /// <param name=\"id\" type=\"Number\" integer=\"true\">\n                /// The id of the instance to get from the table.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the lookup is complete.\n                /// </param>\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.isValidId(id, idPropertyName);\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters);\n                }\n                Validate.notNull(callback, 'callback');\n\n                // Construct the URL\n                var urlFragment = _.url.combinePathSegments(\n                        tableRouteSeperatorName,\n                        this.getTableName(),\n                        encodeURIComponent(id.toString()));\n\n                parameters = addSystemProperties(parameters, this.systemProperties);\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'GET',\n                    urlFragment,\n                    null,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            callback(error, null);\n                        } else {\n                            var result = getItemFromResponse(response);\n                            callback(null, result);\n                        }\n                    });\n            });\n\n        MobileServiceTable.prototype.del = Platform.async(\n            function (instance, parameters, callback) {\n                /// <summary>\n                /// Delete an object from a given table.\n                /// </summary>\n                /// <param name=\"instance\" type=\"Object\">\n                /// The instance to delete from the table.\n                /// </param>\n                /// <param name=\"parameters\" type=\"Object\" mayBeNull=\"true\">\n                /// An object of user-defined parameters and values to include in the request URI query string.\n                /// </param>\n                /// <param name=\"callback\" type=\"Function\">\n                /// The callback to invoke when the delete is complete.\n                /// </param>\n\n                // Account for absent optional arguments\n                if (_.isNull(callback) && (typeof parameters === 'function')) {\n                    callback = parameters;\n                    parameters = null;\n                }\n\n                // Validate the arguments\n                Validate.notNull(instance, 'instance');\n                Validate.isValidId(instance[idPropertyName], 'instance.' + idPropertyName);\n                parameters = addSystemProperties(parameters, this.systemProperties);\n                if (!_.isNull(parameters)) {\n                    Validate.isValidParametersObject(parameters);\n                }\n                Validate.notNull(callback, 'callback');\n\n                var headers = [];\n\n                if (_.isString(instance[idPropertyName])) {\n                    if (!_.isNullOrEmpty(instance.__version)) {\n                        headers['If-Match'] = getEtagFromVersion(instance.__version);\n                    }\n                }\n\n                // Contruct the URL\n                var urlFragment = _.url.combinePathSegments(\n                        tableRouteSeperatorName,\n                        this.getTableName(),\n                        encodeURIComponent(instance[idPropertyName].toString()));\n                if (!_.isNull(parameters)) {\n                    var queryString = _.url.getQueryString(parameters);\n                    urlFragment = _.url.combinePathAndQuery(urlFragment, queryString);\n                }\n\n                // Make the request\n                this.getMobileServiceClient()._request(\n                    'DELETE',\n                    urlFragment,\n                    null,\n                    false,\n                    headers,\n                    function (error, response) {\n                        if (!_.isNull(error)) {\n                            setServerItemIfPreconditionFailed(error);\n                        }\n                        callback(error);\n                    });\n            });\n\n        // Copy select Query operators to MobileServiceTable so queries can be created\n        // compactly.  We'll just add them to the MobileServiceTable prototype and then\n        // forward on directly to a new Query instance.\n        var queryOperators =\n            ['where', 'select', 'orderBy', 'orderByDescending', 'skip', 'take', 'includeTotalCount'];\n        var copyOperator = function (operator) {\n            MobileServiceTable.prototype[operator] = function () {\n                /// <summary>\n                /// Creates a new query.\n                /// </summary>\n\n                // Create a query associated with this table\n                var table = this;\n                var query = new Query(table.getTableName());\n\n                // Add a .read() method on the query which will execute the query.\n                // This method is defined here per query instance because it's\n                // implicitly tied to the table.\n                query.read = Platform.async(\n                    function (parameters, callback) {\n                        /// <summary>\n                        /// Execute the query.\n                        /// </summary>                \n                        table._read(query, parameters, callback);\n                    });\n\n                // Invoke the query operator on the newly created query\n                return query[operator].apply(query, arguments);\n            };\n        };\n        var i = 0;\n        for (; i < queryOperators.length; i++) {\n            // Avoid unintended closure capture\n            copyOperator(queryOperators[i]);\n        }\n\n        // Table system properties\n        function removeSystemProperties(instance) {\n            var copy = {};\n            for (var property in instance) {\n                if (property.substr(0, 2) !== '__') {\n                    copy[property] = instance[property];\n                }\n            }\n            return copy;\n        }\n\n        function addSystemProperties(parameters, properties, querystring) {\n            if (properties === MobileServiceSystemProperties.None || (typeof querystring === 'string' && querystring.toLowerCase().indexOf('__systemproperties') >= 0)) {\n                return parameters;\n            }\n\n            // Initialize an object if none passed in\n            parameters = parameters || {};\n\n            // Don't override system properties if already set\n            if (!_.isNull(parameters['__systemProperties'])) {\n                return parameters;\n            }\n\n            if (properties === MobileServiceSystemProperties.All) {\n                parameters['__systemProperties'] = '*';\n            } else {\n                var options = [];\n                if (MobileServiceSystemProperties.CreatedAt & properties) {\n                    options.push(MobileServiceSystemColumns.CreatedAt);\n                }\n                if (MobileServiceSystemProperties.UpdatedAt & properties) {\n                    options.push(MobileServiceSystemColumns.UpdatedAt);\n                }\n                if (MobileServiceSystemProperties.Version & properties) {\n                    options.push(MobileServiceSystemColumns.Version);\n                }\n                parameters['__systemProperties'] = options.join(',');\n            }\n\n            return parameters;\n        }\n\n        // Add double quotes and unescape any internal quotes\n        function getItemFromResponse(response) {\n            var result = _.fromJson(response.responseText);\n            if (response.getResponseHeader) {\n                var eTag = response.getResponseHeader('ETag');\n                if (!_.isNullOrEmpty(eTag)) {\n                    result.__version = getVersionFromEtag(eTag);\n                }\n            }\n            return result;\n        }\n\n        // Converts an error to precondition failed error\n        function setServerItemIfPreconditionFailed(error) {\n            if (error.request && error.request.status === 412) {\n                error.serverInstance = _.fromJson(error.request.responseText);\n            }\n        }\n\n        // Add wrapping double quotes and escape all double quotes\n        function getEtagFromVersion(version) {\n            var result = version.replace(/\\\"/g, '\\\\\\\"');\n            return \"\\\"\" + result + \"\\\"\";\n        }\n\n        // Remove surrounding double quotes and unescape internal quotes\n        function getVersionFromEtag(etag) {\n            var len = etag.length,\n                result = etag;\n\n            if (len > 1 && etag[0] === '\"' && etag[len - 1] === '\"') {\n                result = etag.substr(1, len - 2);\n            }\n            return result.replace(/\\\\\\\"/g, '\"');\n        }\n    };\n\n    $__modules__.MobileServiceLogin = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"Generated\\MobileServices.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Validate = require('Validate');\n        var Platform = require('Platform');\n\n        var loginUrl = \"login\";\n        var loginDone = \"done\";\n\n        function MobileServiceLogin(client, ignoreFilters) {\n            /// <summary>\n            /// Initializes a new instance of the MobileServiceLogin class.\n            /// </summary>\n            /// <param name=\"client\" type=\"MobileServiceClient\" mayBeNull=\"false\">\n            /// Reference to the MobileServiceClient associated with this login.\n            /// </param>\n            /// <param name=\"ignoreFilters\" type=\"Boolean\" mayBeNull=\"true\">\n            /// Optional parameter to indicate if the client filters should be ignored\n            /// and requests should be sent directly. Is true by default. This should\n            /// only be set to false for testing purposes when filters are needed to intercept\n            /// and validate requests and responses.\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(ignoreFilters)) {\n                ignoreFilters = true;\n            }\n\n            // Validate arguments\n            Validate.notNull(client);\n            Validate.isObject(client, 'client');\n\n            // Create read/write fields\n            this._loginState = { inProcess: false, cancelCallback: null };\n            this.ignoreFilters = ignoreFilters;\n\n            // Create get accessors for read-only fields\n            this.getMobileServiceClient = function () {\n                /// <summary>\n                /// Gets the MobileServiceClient associated with this table.\n                /// <summary>\n                /// <returns type=\"MobileServiceClient\">\n                /// The MobileServiceClient associated with this table.\n                /// </returns>\n                return client;\n            };\n\n            this.getLoginInProcess = function () {\n                /// <summary>\n                /// Indicates if a login is currently in process or not.\n                /// <summary>\n                /// <returns type=\"Boolean\">\n                /// True if a login is in process and false otherwise.\n                /// </returns>\n                return this._loginState.inProcess;\n            };\n        }\n\n        // Export the MobileServiceLogin class\n        exports.MobileServiceLogin = MobileServiceLogin;\n\n        // Define the MobileServiceLogin in a namespace (note: this has global effects\n        // unless the platform we're using chooses to ignore it because exports are\n        // good enough).\n        Platform.addToMobileServicesClientNamespace({ MobileServiceLogin: MobileServiceLogin });\n\n        MobileServiceLogin.prototype.login = function (provider, token, useSingleSignOn, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application given a provider name and optional token object\n            /// Microsoft Account authentication token.\n            /// </summary>\n            /// <param name=\"provider\" type=\"String\" mayBeNull=\"true\">\n            /// Optional name of the authentication provider to use; one of 'facebook', 'twitter', 'google',\n            /// 'windowsazureactivedirectory' (can also use 'aad'), or 'microsoftaccount'.\n            /// </param>\n            /// <param name=\"token\" type=\"Object\"  mayBeNull=\"true\">\n            /// Optional provider specific object with existing OAuth token to log in with or\n            /// a JWT Mobile Services authentication token if the provider is null.\n            /// </param>\n            /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n            /// Only applies to Windows 8 clients.  Will be ignored on other platforms.\n            /// Indicates if single sign-on should be used. Single sign-on requires that the \n            /// application's Package SID be registered with the Microsoft Azure Mobile Service, \n            /// but it provides a better experience as HTTP cookies are supported so that users \n            /// do not have to login in everytime the application is launched.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\"  mayBeNull=\"true\">\n            /// Optional callback accepting (error, user) parameters.\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback)) {\n                if (!_.isNull(useSingleSignOn) && (typeof useSingleSignOn === 'function')) {\n                    callback = useSingleSignOn;\n                    useSingleSignOn = null;\n                }\n                else if (!_.isNull(token) && (typeof token === 'function')) {\n                    callback = token;\n                    useSingleSignOn = null;\n                    token = null;\n                }\n            }\n            if (_.isNull(useSingleSignOn)) {\n                if (_.isBool(token)) {\n                    useSingleSignOn = token;\n                    token = null;\n                }\n                else {\n                    useSingleSignOn = false;\n                }\n            }\n\n            // Determine if the provider is actually a Mobile Services authentication token\n            if (_.isNull(token) && _.isString(provider) && provider.split('.').length === 3) {\n                token = provider;\n                provider = null;\n            }\n\n            // Validate parameters; there must be either a provider, a token or both\n            if (_.isNull(provider)) {\n                Validate.notNull(token);\n                Validate.isString(token);\n            }\n            if (_.isNull(token)) {\n                Validate.notNull(provider);\n                Validate.isString(provider);\n                provider = provider.toLowerCase();\n            }\n\n            if (!_.isNull(provider)) {\n                if (provider.toLowerCase() === 'windowsazureactivedirectory') {\n                    // The mobile service REST API uses '/login/aad' for Microsoft Azure Active Directory\n                    provider = 'aad';\n                }\n                this.loginWithProvider(provider, token, useSingleSignOn, callback);\n            }\n            else {\n                this.loginWithMobileServiceToken(token, callback);\n            }\n        };\n\n        MobileServiceLogin.prototype.loginWithMobileServiceToken = function (authenticationToken, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application given an Mobile Service authentication token.\n            /// </summary>\n            /// <param name=\"authenticationToken\" type=\"String\">\n            /// OAuth access token that authenticates the user.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// Optional callback accepting (error, user) parameters.\n            /// </param>\n\n            var self = this;\n            var client = self.getMobileServiceClient();\n\n            Validate.isString(authenticationToken, 'authenticationToken');\n            Validate.notNullOrEmpty(authenticationToken, 'authenticationToken');\n\n            client._request(\n                'POST',\n                loginUrl,\n                { authenticationToken: authenticationToken },\n                self.ignoreFilters,\n                function (error, response) {\n                    onLoginResponse(error, response, client, callback);\n                });\n        };\n\n        MobileServiceLogin.prototype.loginWithProvider = function (provider, token, useSingleSignOn, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application given a provider name and optional token object.\n            /// </summary>\n            /// <param name=\"provider\" type=\"String\">\n            /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google',\n            /// 'windowsazureactivedirectory' (can also use 'aad'), or 'microsoftaccount'.\n            /// </param>\n            /// <param name=\"token\" type=\"Object\" mayBeNull=\"true\">\n            /// Optional, provider specific object with existing OAuth token to log in with.\n            /// </param>\n            /// <param name=\"useSingleSignOn\" type=\"Boolean\" mayBeNull=\"true\">\n            /// Optional, indicates if single sign-on should be used.  Single sign-on requires that the\n            /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n            /// provides a better experience as HTTP cookies are supported so that users do not have to\n            /// login in everytime the application is launched. Is false be default.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback)) {\n                if (_.isNull(useSingleSignOn) && (typeof token === 'function')) {\n                    callback = token;\n                    token = null;\n                    useSingleSignOn = false;\n                } else if (typeof useSingleSignOn === 'function') {\n                    callback = useSingleSignOn;\n                    useSingleSignOn = false;\n                    if (!_.isNull(token) && _.isBool(token)) {\n                        useSingleSignOn = token;\n                        token = null;\n                    }\n                }\n            }\n\n            // Validate arguments\n            Validate.isString(provider, 'provider');\n            if (!_.isNull(token)) {\n                Validate.isObject(token, 'token');\n            }\n\n            // Throw if a login is already in process and is not cancellable\n            if (this._loginState.inProcess) {\n                var didCancel = this._loginState.cancelCallback && this._loginState.cancelCallback();\n                if (!didCancel) {\n                    throw Platform.getResourceString(\"MobileServiceLogin_LoginErrorResponse\");\n                }\n            }\n\n            provider = provider.toLowerCase();\n\n            // Either login with the token or the platform specific login control.\n            if (!_.isNull(token)) {\n                loginWithProviderAndToken(this, provider, token, callback);\n            }\n            else {\n                loginWithLoginControl(this, provider, useSingleSignOn, callback);\n            }\n        };\n\n        function onLoginComplete(error, token, client, callback) {\n            /// <summary>\n            /// Handles the completion of the login and calls the user's callback with\n            /// either a user or an error.\n            /// </summary>\n            /// <param name=\"error\" type=\"string\" mayBeNull=\"true\">\n            /// Optional error that may have occurred during login. Will be null if the\n            /// login succeeded and their is a token.\n            /// </param>\n            /// <param name=\"token\" type=\"string\" mayBeNull=\"true\">\n            /// Optional token that represents the logged-in user. Will be null if the\n            /// login failed and their is an error.\n            /// </param>\n            /// <param name=\"client\" type=\"MobileServiceClient\">\n            /// The Mobile Service client associated with the login.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n            var user = null;\n\n            if (_.isNull(error)) {\n\n                // Validate the token\n                if (_.isNull(token) ||\n                    !_.isObject(token) ||\n                    !_.isObject(token.user) ||\n                    !_.isString(token.authenticationToken)) {\n                    error = Platform.getResourceString(\"MobileServiceLogin_InvalidResponseFormat\");\n                }\n                else {\n                    // Set the current user on the client and return it in the callback\n                    client.currentUser = token.user;\n                    client.currentUser.mobileServiceAuthenticationToken = token.authenticationToken;\n                    user = client.currentUser;\n                }\n            }\n\n            if (!_.isNull(callback)) {\n                callback(error, user);\n            }\n        }\n\n        function onLoginResponse(error, response, client, callback) {\n            /// <summary>\n            /// Handles the completion of the login HTTP call and calls the user's callback with\n            /// either a user or an error.\n            /// </summary>\n            /// <param name=\"error\" type=\"string\" mayBeNull=\"true\">\n            /// Optional error that may have occurred during login. Will be null if the\n            /// login succeeded and their is a token.\n            /// </param>\n            /// <param name=\"response\" type=\"string\" mayBeNull=\"true\">\n            /// Optional HTTP login response from the Mobile Service. Will be null if the\n            /// login failed and their is an error.\n            /// </param>\n            /// <param name=\"client\" type=\"MobileServiceClient\">\n            /// The Mobile Service client associated with the login.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n\n            var mobileServiceToken = null;\n            if (_.isNull(error)) {\n                try {\n                    mobileServiceToken = _.fromJson(response.responseText);\n                }\n                catch (e) {\n                    error = e;\n                }\n            }\n\n            onLoginComplete(error, mobileServiceToken, client, callback);\n        }\n\n        function loginWithProviderAndToken(login, provider, token, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application given a provider name and token object.\n            /// </summary>\n            /// <param name=\"login\" type=\"MobileServiceLogin\">\n            /// The login instance that holds the context used with the login process.\n            /// </param>\n            /// <param name=\"provider\" type=\"String\">\n            /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', or \n            /// 'microsoftaccount'. The provider should already have been validated.\n            /// </param>\n            /// <param name=\"token\" type=\"Object\">\n            /// Provider specific object with existing OAuth token to log in with.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n\n            var client = login.getMobileServiceClient();\n\n            // This design has always been problematic, because the operation can take arbitrarily\n            // long and there is no way for the UI to cancel it. We should probably remove this\n            // one-at-a-time restriction.\n            login._loginState = { inProcess: true, cancelCallback: null };\n\n            // Invoke the POST endpoint to exchange provider-specific token for a \n            // Microsoft Azure Mobile Services token\n            client._request(\n                'POST',\n                loginUrl + '/' + provider,\n                token,\n                login.ignoreFilters,\n                function (error, response) {\n                    login._loginState = { inProcess: false, cancelCallback: null };\n                    onLoginResponse(error, response, client, callback);\n                });\n        }\n\n        function loginWithLoginControl(login, provider, useSingleSignOn, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application using a platform specific\n            /// login control that will present the user with the given provider's login web page.\n            /// </summary>\n            /// <param name=\"login\" type=\"MobileServiceLogin\">\n            /// The login instance that holds the context used with the login process.\n            /// </param>\n            /// <param name=\"provider\" type=\"String\">\n            /// Name of the authentication provider to use; one of 'facebook', 'twitter', 'google', or 'microsoftaccount'.\n            /// </param>\n            /// <param name=\"useSingleSignOn\" type=\"Boolean\">\n            /// Optional, indicates if single sign-on should be used.  Single sign-on requires that the\n            /// application's Package SID be registered with the Microsoft Azure Mobile Service, but it\n            /// provides a better experience as HTTP cookies are supported so that users do not have to\n            /// login in everytime the application is launched. Is false be default.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\"  mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, user).\n            /// </param>\n\n            var client = login.getMobileServiceClient();\n            var startUri = _.url.combinePathSegments(\n                client.applicationUrl,\n                loginUrl,\n                provider);\n            var endUri = null;\n\n            // If not single sign-on, then we need to construct a non-null end uri.\n            if (!useSingleSignOn) {\n                endUri = _.url.combinePathSegments(\n                    client.applicationUrl,\n                    loginUrl,\n                    loginDone);\n            }\n\n            login._loginState = { inProcess: true, cancelCallback: null }; // cancelCallback gets set below\n\n            // Call the platform to launch the login control, capturing any\n            // 'cancel' callback that it returns\n            var platformResult = Platform.login(\n                startUri,\n                endUri,\n                function (error, mobileServiceToken) {\n                    login._loginState = { inProcess: false, cancelCallback: null };\n                    onLoginComplete(error, mobileServiceToken, client, callback);\n                });\n\n            if (login._loginState.inProcess && platformResult && platformResult.cancelCallback) {\n                login._loginState.cancelCallback = platformResult.cancelCallback;\n            }\n        }\n    };\n\n    $__modules__.Push = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n        var Validate = require('Validate');\n        var LocalStorageManager = require('LocalStorageManager').LocalStorageManager;\n        var RegistrationManager = require('RegistrationManager').RegistrationManager;\n        var PushHttpClient = require('PushHttpClient').PushHttpClient;\n\n        function Push(mobileServicesClient, tileId) {\n            var localStorage = new LocalStorageManager(mobileServicesClient.applicationUrl, tileId);\n            this.registrationManager = new RegistrationManager(\n                new PushHttpClient(mobileServicesClient),\n                localStorage\n                );\n        }\n\n        exports.Push = Push;\n\n        Push.prototype.registerNative = function (channelUri, tags) {\n            /// <summary>\n            /// Register for native notification\n            /// </summary>\n            /// <param name=\"channelUri\">The channelUri to register</param>\n            /// <param name=\"tags\">Array containing the tags for this registeration</param>\n            /// <returns>Promise that will complete when the registration is completed</returns>\n\n            var registration = makeCoreRegistration(channelUri, tags);\n            return this.registrationManager.register(registration);\n        };\n\n\n        Push.prototype.registerTemplate = function (channelUri, templateBody, templateName, headers, tags) {\n            /// <summary>\n            /// Register for template notification\n            /// </summary>\n            /// <param name=\"channelUri\">The channelUri to register</param>\n            /// <param name=\"templateBody\">The xml body to register</param>\n            /// <param name=\"templateName\">The name of the template</param>\n            /// <param name=\"headers\">Object containing key/value pairs for the template to provide to WNS. X-WNS-Type is required. Example: { 'X-WNS-Type' : 'wns/toast' }</param>\n            /// <param name=\"tags\">Array containing the tags for this registeration</param>\n            /// <returns>Promise that will complete when the template registration is completed</returns>\n\n            var registration = makeCoreRegistration(channelUri, tags);\n\n            if (templateBody) {\n                Validate.isString(templateBody, 'templateBody');\n                registration.templateBody = templateBody;\n                Validate.isString(templateName, 'templateName');\n                Validate.notNullOrEmpty(templateName);\n                registration.templateName = templateName;\n\n                if (headers) {\n                    Validate.isObject(headers);\n                    registration.headers = headers;\n                }\n            }\n\n            return this.registrationManager.register(registration);\n        };\n\n        Push.prototype.unregisterNative = function () {\n            /// <summary>\n            /// Unregister for native notification\n            /// </summary>\n            /// <returns>Promise that will complete when the unregister is completed</returns>\n\n            return this.unregisterTemplate(RegistrationManager.nativeRegistrationName);\n        };\n\n        Push.prototype.unregisterTemplate = function (templateName) {\n            /// <summary>\n            /// Unregister for template notification\n            /// </summary>\n            /// <param name=\"templateName\">The name of the template</param>\n            /// <returns>Promise that will complete when the unregister is completed</returns>\n\n            Validate.notNullOrEmpty(templateName);\n            return this.registrationManager.unregister(templateName);\n        };\n\n        Push.prototype.unregisterAll = function (channelUri) {\n            /// <summary>\n            /// Unregister all notifications for a specfic channelUri\n            /// </summary>\n            /// <param name=\"channelUri\">The channelUri to unregister</param>\n            /// <returns>Promise that will complete when the unregistration of all registrations at the channelUri is completed</returns>\n\n            Validate.notNullOrEmpty(channelUri);\n            return this.registrationManager.deleteRegistrationsForChannel(channelUri);\n        };\n\n        Push.prototype.getSecondaryTile = function (tileId) {\n            return new Push(this.mobileServicesClient, tileId);\n        };\n\n        function makeCoreRegistration(channelUri, tags) {\n            var registration = {};\n\n            registration.platform = 'wns';\n\n            Validate.isString(channelUri, 'channelUri');\n            Validate.notNullOrEmpty(channelUri, 'channelUri');\n\n            registration.deviceId = channelUri;\n\n            if (tags) {\n                Validate.isArray(tags, 'tags');\n                registration.tags = tags;\n            }\n\n            return registration;\n        }\n    };\n\n    $__modules__.RegistrationManager = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n        // Declare JSHint globals\n        /*global WinJS:false */\n\n        function RegistrationManager(pushHttpClient, storageManager) {\n            this.pushHttpClient = pushHttpClient;\n            this.localStorageManager = storageManager;\n        }\n\n        exports.RegistrationManager = RegistrationManager;\n\n        RegistrationManager.nativeRegistrationName = '$Default';\n\n        RegistrationManager.prototype.refreshLocalStorage = function (refreshChannelUri) {\n            var refreshPromise;\n            var self = this;\n            // if localStorage is empty or has different storage version, we need retrieve registrations and refresh local storage\n            if (this.localStorageManager.isRefreshNeeded) {\n                refreshPromise = this.pushHttpClient.listRegistrations(refreshChannelUri)\n                    .then(function (registrations) {\n                        var count = registrations.length;\n                        if (count === 0) {\n                            self.localStorageManager.clearRegistrations();\n                        }\n\n                        for (var i = 0; i < count; i++) {\n                            self.localStorageManager.updateRegistrationByRegistrationId(registrations[i].registrationId, registrations[i].registrationName || RegistrationManager.nativeRegistrationName, refreshChannelUri);\n                        }\n                    })\n                    .then(function () {\n                        self.localStorageManager.refreshFinished(refreshChannelUri);\n                    });\n\n            } else {\n                refreshPromise = WinJS.Promise.wrap();\n            }\n\n            return refreshPromise;\n        };\n\n        RegistrationManager.prototype.register = function (registration) {\n            var self = this;\n            return this.refreshLocalStorage(this.localStorageManager.channelUri || registration.deviceId)\n                .then(function () {\n                    return self.localStorageManager.getRegistration(registration.templateName || RegistrationManager.nativeRegistrationName);\n                })\n                .then(function (cached) {\n                    if (cached !== null) {\n                        registration.registrationId = cached.registrationId;\n                        return WinJS.Promise.wrap();\n                    } else {\n                        return self.createRegistrationId(registration);\n                    }\n                })\n                .then(function () {\n                    return self.upsertRegistration(registration);\n                })\n                .then(\n                    function () {\n                        // dead complete function\n                        return WinJS.Promise.wrap();\n                    },\n                    function (error) {\n                        // if we get an RegistrationGoneException (410) from service, we will recreate registration id and will try to do upsert one more time.\n                        // The likely cause of this is an expired registration in local storage due to a long unused app.\n                        if (error.request.status === 410) {\n                            return self.createRegistrationId(registration)\n                                .then(function () {\n                                    return self.upsertRegistration(registration);\n                                });\n                        }\n\n                        throw error;\n                    }\n                );\n        };\n\n        RegistrationManager.prototype.unregister = function (registrationName) {\n            var cached = this.localStorageManager.getRegistration(registrationName);\n            if (!cached) {\n                return WinJS.Promise.wrap();\n            }\n\n            var self = this;\n            return this.pushHttpClient.unregister(cached.registrationId)\n                .then(function () {\n                    self.localStorageManager.deleteRegistrationByName(registrationName);\n                });\n        };\n\n        RegistrationManager.prototype.deleteRegistrationsForChannel = function (channelUri) {\n            var self = this;\n            return this.pushHttpClient.listRegistrations(channelUri)\n                .then(function (registrations) {\n                    return WinJS.Promise.join(\n                        registrations.map(function (registration) {\n                            return self.pushHttpClient.unregister(registration.registrationId)\n                                .then(function () {\n                                    self.localStorageManager.deleteRegistrationByRegistrationId(registration.registrationId);\n                                });\n                        }));\n                })\n                .then(function () {\n                    self.localStorageManager.clearRegistrations();\n                });\n        };\n\n        RegistrationManager.prototype.createRegistrationId = function (registration) {\n            var self = this;\n            return this.pushHttpClient.createRegistrationId()\n                .then(function (registrationId) {\n                    registration.registrationId = registrationId;\n                    self.localStorageManager.updateRegistrationByRegistrationName(registration.templateName || RegistrationManager.nativeRegistrationName, registration.registrationId, registration.deviceId);\n                });\n        };\n\n        RegistrationManager.prototype.upsertRegistration = function (registration) {\n            var self = this;\n            return this.pushHttpClient.createOrUpdateRegistration(registration)\n                .then(function () {\n                    self.localStorageManager.updateRegistrationByRegistrationName(registration.templateName || RegistrationManager.nativeRegistrationName, registration.registrationId, registration.deviceId);\n                });\n        };\n    };\n\n    $__modules__.LocalStorageManager = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path='C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js' />\n        /// <reference path='C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js' />\n        /// <reference path='..\\Generated\\MobileServices.DevIntellisense.js' />\n\n        // Declare JSHint globals\n        /*global WinJS:false, Windows:false */\n\n        var _ = require('Extensions');\n        var Platform = require('Platform');\n\n        function LocalStorageManager(applicationUri, tileId) {\n            this.storageVersion = 'v1.0.0';\n            this.primaryChannelId = '$Primary';\n            this.keyNameVersion = 'Version';\n            this.keyNameChannelUri = 'ChannelUri';\n            this.keyNameRegistrations = 'Registrations';\n\n            if (!tileId) {\n                tileId = this.primaryChannelId;\n            }\n\n            var name = _.format('{0}-PushContainer-{1}-{2}', Windows.ApplicationModel.Package.current.id.name, applicationUri, tileId);\n            this.settings = Windows.Storage.ApplicationData.current.localSettings.createContainer(name, Windows.Storage.ApplicationDataCreateDisposition.always).values;\n            this.isRefreshNeeded = false;\n            this.channelUri = null;\n\n            this.initializeRegistrationInfoFromStorage();\n        }\n\n        exports.LocalStorageManager = LocalStorageManager;\n\n        LocalStorageManager.prototype.getChannelUri = function () {\n            return this.channelUri;\n        };\n\n        LocalStorageManager.prototype.setChannelUri = function (channelUri) {\n            this.channelUri = channelUri;\n            this.flushToSettings();\n        };\n\n        LocalStorageManager.prototype.getRegistration = function (registrationName) {\n            return this.readRegistration(registrationName);\n        };\n\n        LocalStorageManager.prototype.deleteRegistrationByName = function (registrationName) {\n            if (tryRemoveSetting(registrationName, this.registrations)) {\n                this.flushToSettings();\n                return true;\n            }\n\n            return false;\n        };\n\n        LocalStorageManager.prototype.deleteRegistrationByRegistrationId = function (registrationId) {\n            var registration = this.getFirstRegistrationByRegistrationId(registrationId);\n\n            if (registration) {\n                this.deleteRegistrationByName(registration.registrationName);\n                return true;\n            }\n\n            return false;\n        };\n\n        LocalStorageManager.prototype.getFirstRegistrationByRegistrationId = function (registrationId) {\n            var returnValue = null;\n            for (var regName in this.registrations) {\n                if (this.registrations.hasOwnProperty(regName)) {\n                    // Update only the first registration with matching registrationId\n                    var registration = this.readRegistration(regName);\n                    if (!returnValue && registration && (registration.registrationId === registrationId)) {\n                        returnValue = registration;\n                    }\n                }\n            }\n\n            return returnValue;\n        };\n\n        LocalStorageManager.prototype.updateRegistrationByRegistrationName = function (registrationName, registrationId, channelUri) {\n            var cacheReg = {};\n            cacheReg.registrationName = registrationName;\n            cacheReg.registrationId = registrationId;\n            this.writeRegistration(registrationName, cacheReg);\n            this.channelUri = channelUri;\n            this.flushToSettings();\n        };\n\n        LocalStorageManager.prototype.writeRegistration = function (registrationName, cacheReg) {\n            var cachedRegForPropertySet = JSON.stringify(cacheReg);\n            this.registrations.insert(registrationName, cachedRegForPropertySet);\n        };\n\n        LocalStorageManager.prototype.readRegistration = function (registrationName) {\n            if (this.registrations.hasKey(registrationName)) {\n                var cachedRegFromPropertySet = this.registrations[registrationName];\n                return JSON.parse(cachedRegFromPropertySet);\n            } else {\n                return null;\n            }\n        };\n\n        LocalStorageManager.prototype.updateRegistrationByRegistrationId = function (registrationId, registrationName, channelUri) {\n            var registration = this.getFirstRegistrationByRegistrationId(registrationId);\n\n            if (registration) {\n                this.updateRegistrationByRegistrationName(registration.registrationName, registration.registrationId, channelUri);\n            } else {\n                this.updateRegistrationByRegistrationName(registrationName, registrationId, channelUri);\n            }\n        };\n\n        LocalStorageManager.prototype.clearRegistrations = function () {\n            this.registrations.clear();\n            this.flushToSettings();\n        };\n\n        LocalStorageManager.prototype.refreshFinished = function (refreshedChannelUri) {\n            this.setChannelUri(refreshedChannelUri);\n            this.isRefreshNeeded = false;\n        };\n\n        LocalStorageManager.prototype.flushToSettings = function () {\n            this.settings.insert(this.keyNameVersion, this.storageVersion);\n            this.settings.insert(this.keyNameChannelUri, this.channelUri);\n\n            var str = '';\n            if (this.registrations !== null) {\n                str = JSON.stringify(this.registrations);\n            }\n\n            this.settings.insert(this.keyNameRegistrations, str);\n        };\n\n        LocalStorageManager.prototype.initializeRegistrationInfoFromStorage = function () {\n            this.registrations = new Windows.Foundation.Collections.PropertySet();\n\n            try {\n                // Read channelUri\n                this.channelUri = readContent(this.settings, this.keyNameChannelUri);\n\n                // Verify this.storage version\n                var version = readContent(this.settings, this.keyNameVersion);\n                if (this.storageVersion !== version.toLowerCase()) {\n                    this.isRefreshNeeded = true;\n                    return;\n                }\n\n                this.isRefreshNeeded = false;\n\n                // read registrations\n                var regsStr = readContent(this.settings, this.keyNameRegistrations);\n                if (regsStr) {\n                    var entries = JSON.parse(regsStr);\n\n                    for (var reg in entries) {\n                        if (entries.hasOwnProperty(reg)) {\n                            this.registrations.insert(reg, entries[reg]);\n                        }\n                    }\n                }\n            } catch (err) {\n                // It is possible that local storage is corrupted by users, bugs or other issues.\n                // If this occurs, force a full refresh.\n                this.isRefreshNeeded = true;\n            }\n        };\n\n        function readContent(propertySet, key) {\n            if (propertySet.hasKey(key)) {\n                return propertySet[key];\n            }\n            return '';\n        }\n\n        function tryRemoveSetting(name, values) {\n            if (values[name]) {\n                values.remove(name);\n                return true;\n            }\n            return false;\n        };\n    };\n\n    $__modules__.PushHttpClient = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Platform = require('Platform');\n        var noCacheHeader = { 'If-Modified-Since': 'Mon, 27 Mar 1972 00:00:00 GMT' };\n        function PushHttpClient(mobileServicesClient) {\n            this.mobileServicesClient = mobileServicesClient;\n        }\n\n        exports.PushHttpClient = PushHttpClient;\n\n        PushHttpClient.prototype.listRegistrations = function (channelUri) {\n            return this._request('GET', '/push/registrations?platform=wns&deviceId=' + encodeURIComponent(channelUri), null, null, noCacheHeader)\n                .then(function (request) {\n                    return JSON.parse(request.response);\n                });\n        };\n\n        PushHttpClient.prototype.unregister = function (registrationId) {\n            return this._request('DELETE', '/push/registrations/' + encodeURIComponent(registrationId), null, null, noCacheHeader);\n        };\n\n        PushHttpClient.prototype.createRegistrationId = function () {\n            return this._request('POST', '/push/registrationIds', null, null, noCacheHeader)\n                .then(function (response) {\n                    var locationHeader = response.getResponseHeader('Location');\n                    return locationHeader.slice(locationHeader.lastIndexOf('/') + 1);\n                });\n        };\n\n        PushHttpClient.prototype.createOrUpdateRegistration = function (registration) {\n            return this._request('PUT', '/push/registrations/' + encodeURIComponent(registration.registrationId), registration, null, noCacheHeader);\n        };\n\n        PushHttpClient.prototype._request = Platform.async(\n            function (method, uriFragment, content, ignoreFilters, headers, callback) {\n                this.mobileServicesClient._request(method, uriFragment, content, ignoreFilters, headers, callback);\n            });\n    };\n\n    $__modules__.Platform = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n        // Declare JSHint globals\n        /*global WinJS:false, Windows:false, $__fileVersion__:false, $__version__:false */\n\n        var _ = require('Extensions');\n        var Validate = require('Validate');\n\n        exports.async = function async(func) {\n            /// <summary>\n            /// Wrap a function that takes a callback into platform specific async\n            /// operation (i.e., keep using callbacks or switch to promises).\n            /// </summary>\n            /// <param name=\"func\" type=\"Function\">\n            /// An async function with a callback as its last parameter \n            /// </param>\n            /// <returns type=\"Function\">\n            /// Function that when invoked will return a WinJS.Promise.\n            /// </returns>\n\n            return function () {\n                // Capture the context of the original call\n                var that = this;\n                var args = arguments;\n\n                // Create a new promise that will wrap the async call\n                return new WinJS.Promise(function (complete, error) {\n\n                    // Add a callback to the args which will call the appropriate\n                    // promise handlers\n                    var callback = function (err) {\n                        if (_.isNull(err)) {\n                            // Call complete with all the args except for err\n                            complete.apply(null, Array.prototype.slice.call(arguments, 1));\n                        } else {\n                            error(err);\n                        }\n                    };\n                    Array.prototype.push.call(args, callback);\n\n                    try {\n                        // Invoke the async method which will in turn invoke our callback\n                        // which will in turn invoke the promise's handlers\n                        func.apply(that, args);\n                    } catch (ex) {\n                        // Thread any immediate errors like parameter validation\n                        // through the the callback\n                        callback(_.createError(ex));\n                    }\n                });\n            };\n        };\n\n        exports.addToMobileServicesClientNamespace = function (declarations) {\n            /// <summary>\n            /// Define a collection of declarations in the Mobile Services Client namespace.\n            /// </summary>\n            /// <param name=\"declarations\" type=\"Object\">\n            /// Object consisting of names and values to define in the namespace.\n            /// </param>\n\n            try {\n                // The following namespace is retained for backward compatibility, but\n                // may soon change to 'WindowsAzure'\n                WinJS.Namespace.define('WindowsAzure', declarations);\n            } catch (ex) {\n                // This can fail due to a WinRT issue where another assembly defining a\n                // non-JavaScript type with a Microsoft namespace.  The wrapper object\n                // created to represent the namespace doesn't allow expando\n                // properties...  so it will never let any additional JavaScript\n                // namespaces be defined under it.  We only see this with our test\n                // library at the moment, but it could also appear if customers are\n                // using other Microsoft libraries in WinJS.        \n            }\n        };\n\n        exports.readSetting = function readSetting(name) {\n            /// <summary>\n            /// Read a setting from a global configuration store.\n            /// </summary>\n            /// <param name=\"name\" type=\"String\">\n            /// Name of the setting to read.\n            /// </param>\n            /// <returns type=\"String\" mayBeNull=\"true\">\n            /// The value of the setting or null if not set.\n            /// </returns>\n\n            var localSettings = Windows.Storage.ApplicationData.current.localSettings;\n            return !_.isNull(localSettings) ?\n                localSettings.values[name] :\n                null;\n        };\n\n        exports.writeSetting = function writeSetting(name, value) {\n            /// <summary>\n            /// Write a setting to a global configuration store.\n            /// </summary>\n            /// <param name=\"name\" type=\"String\">\n            /// Name of the setting to write.\n            /// </param>\n            /// <param name=\"value\" type=\"String\" mayBeNull=\"true\">\n            /// The value of the setting.\n            /// </returns>\n\n            var localSettings = Windows.Storage.ApplicationData.current.localSettings;\n            if (!_.isNull(localSettings)) {\n                localSettings.values[name] = value;\n            }\n        };\n\n        exports.webRequest = function (request, callback) {\n            /// <summary>\n            /// Make a web request.\n            /// </summary>\n            /// <param name=\"request\" type=\"Object\">\n            /// Object describing the request (in the WinJS.xhr format).\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\">\n            /// The callback to execute when the request completes.\n            /// </param>\n\n            WinJS.xhr(request).done(\n                function (response) { callback(null, response); },\n                function (error) { callback(null, error); });\n        };\n\n        exports.login = function (startUri, endUri, callback) {\n            /// <summary>\n            /// Log a user into a Mobile Services application by launching a\n            /// browser-based control that will allow the user to enter their credentials\n            /// with a given provider.\n            /// </summary>\n            /// <param name=\"startUri\" type=\"string\">\n            /// The absolute URI to which the login control should first navigate to in order to\n            /// start the login process flow.\n            /// </param>\n            /// <param name=\"endUri\" type=\"string\" mayBeNull=\"true\">\n            /// The absolute URI that indicates login is complete. Once the login control navigates\n            /// to this URI, it will execute the callback.\n            /// </param>\n            /// <param name=\"callback\" type=\"Function\" mayBeNull=\"true\">\n            /// The callback to execute when the login completes: callback(error, endUri).\n            /// </param>\n\n            // Account for absent optional arguments\n            if (_.isNull(callback) && typeof endUri === 'function') {\n                callback = endUri;\n                endUri = null;\n            }\n\n            Validate.notNullOrEmpty(startUri, 'startUri');\n            Validate.isString(startUri, 'startUri');\n\n            var windowsWebAuthBroker = Windows.Security.Authentication.Web.WebAuthenticationBroker;\n            var noneWebAuthOptions = Windows.Security.Authentication.Web.WebAuthenticationOptions.none;\n            var successWebAuthStatus = Windows.Security.Authentication.Web.WebAuthenticationStatus.success;\n\n            var webAuthBrokerSuccessCallback = null;\n            var webAuthBrokerErrorCallback = null;\n            if (!_.isNull(callback)) {\n                webAuthBrokerSuccessCallback = function (result) {\n                    var error = null;\n                    var token = null;\n\n                    if (result.responseStatus !== successWebAuthStatus) {\n                        error = result;\n                    }\n                    else {\n                        var callbackEndUri = result.responseData;\n                        var tokenAsJson = null;\n                        if (_.isNull(error)) {\n                            var i = callbackEndUri.indexOf('#token=');\n                            if (i > 0) {\n                                tokenAsJson = decodeURIComponent(callbackEndUri.substring(i + 7));\n                            }\n                            else {\n                                i = callbackEndUri.indexOf('#error=');\n                                if (i > 0) {\n                                    error = decodeURIComponent(callbackEndUri.substring(i + 7));\n                                }\n                            }\n                        }\n\n                        if (!_.isNull(tokenAsJson)) {\n                            try {\n                                token = _.fromJson(tokenAsJson);\n                            }\n                            catch (e) {\n                                error = e;\n                            }\n                        }\n                    }\n\n                    callback(error, token);\n                };\n\n                webAuthBrokerErrorCallback = function (error) {\n                    callback(error, null);\n                };\n            }\n\n            if (!_.isNull(endUri)) {\n                var windowsStartUri = new Windows.Foundation.Uri(startUri);\n                var windowsEndUri = new Windows.Foundation.Uri(endUri);\n                windowsWebAuthBroker.authenticateAsync(noneWebAuthOptions, windowsStartUri, windowsEndUri)\n                                    .done(webAuthBrokerSuccessCallback, webAuthBrokerErrorCallback);\n            }\n            else {\n                // If no endURI was given, then we'll use the single sign-on overload of the \n                // windowsWebAuthBroker. Single sign-on requires that the application's Package SID \n                // be registered with the Microsoft Azure Mobile Service, but it provides a better \n                // experience as HTTP cookies are supported so that users do not have to\n                // login in everytime the application is launched.\n                var redirectUri = windowsWebAuthBroker.getCurrentApplicationCallbackUri().absoluteUri;\n                var startUriWithRedirect = startUri + \"?sso_end_uri=\" + encodeURIComponent(redirectUri);\n                var windowsStartUriWithRedirect = new Windows.Foundation.Uri(startUriWithRedirect);\n                windowsWebAuthBroker.authenticateAsync(noneWebAuthOptions, windowsStartUriWithRedirect)\n                                    .done(webAuthBrokerSuccessCallback, webAuthBrokerErrorCallback);\n            }\n        };\n\n        exports.getOperatingSystemInfo = function () {\n\n            var architecture = \"Unknown\";\n\n            // The Windows API provides the architecture as an enum, so we have to \n            // lookup the string value\n            var archValue = Windows.ApplicationModel.Package.current.id.architecture;\n            switch (archValue) {\n                case 0: architecture = \"X86\"; break;\n                case 5: architecture = \"Arm\"; break;\n                case 9: architecture = \"X64\"; break;\n                case 11: architecture = \"Neutral\"; break;\n            }\n\n            return {\n                name: \"Windows 8\",\n                version: \"--\",\n                architecture: architecture\n            };\n        };\n\n        exports.getSdkInfo = function () {\n            return {\n                language: \"WinJS\",\n                fileVersion: $__fileVersion__\n            };\n        };\n\n        exports.getUserAgent = function () {\n            // The User-Agent header can not be set in WinJS\n            return null;\n        };\n\n        exports.toJson = function (value) {\n            /// <summary>\n            /// Convert an object into JSON format.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to convert.</param>\n            /// <returns type=\"String\">The value as JSON.</returns>\n\n            // We're wrapping this so we can hook the process and perform custom JSON\n            // conversions.  Note that we don't have to add a special hook to correctly\n            // serialize dates in ISO8061 because JSON.stringify does that by defualt.\n            // TODO: Convert geolocations once they're supported\n            // TODO: Expose the ability for developers to convert custom types\n            return JSON.stringify(value);\n        };\n\n        exports.tryParseIsoDateString = function (text) {\n            /// <summary>\n            /// Try to parse an ISO date string.\n            /// </summary>\n            /// <param name=\"text\" type=\"String\">The text to parse.</param>\n            /// <returns type=\"Date\">The parsed Date or null.</returns>\n\n            Validate.isString(text);\n\n            // Check against a lenient regex\n            if (/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2})\\:(\\d{2})\\:(\\d{2})(\\.(\\d{1,3}))?Z$/.test(text)) {\n                // Try and parse - it will return NaN if invalid\n                var ticks = Date.parse(text);\n                if (!isNaN(ticks)) {\n                    // Convert to a regular Date\n                    return new Date(ticks);\n                }\n            }\n\n            // Return null if not found\n            return null;\n        };\n\n        exports.getResourceString = function (resourceName) {\n            var resourceManager = Windows.ApplicationModel.Resources.Core.ResourceManager.current;\n            var resource = resourceManager.mainResourceMap.getValue(\"MobileServices/Resources/\" + resourceName);\n            return resource.valueAsString;\n        };\n\n        exports.allowPlatformToMutateOriginal = function (original, updated) {\n            /// <summary>\n            /// Patch an object with the values returned by from the server.  Given\n            /// that it's possible for the server to change values on an insert/update,\n            /// we want to make sure the client object reflects those changes.\n            /// </summary>\n            /// <param name=\"original\" type=\"Object\">The original value.</param>\n            /// <param name=\"updated\" type=\"Object\">The updated value.</param>\n            /// <returns type=\"Object\">The patched original object.</returns>\n            if (!_.isNull(original) && !_.isNull(updated)) {\n                var key = null;\n                var binding = WinJS.Binding.as(original);\n\n                for (key in updated) {\n                    if (key in original) {\n                        binding[key] = updated[key];\n                    } else {\n                        binding.addProperty(key, updated[key]);\n                    }\n                }\n\n                // TODO: Should we also delete any fields on the original object that\n                // aren't also on the updated object?  Is that a scenario for scripts?\n            }\n\n            return original;\n        };\n    };\n\n    $__modules__.Extensions = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"..\\Generated\\MobileServices.DevIntellisense.js\" />\n\n        // Declare JSHint globals\n        /*global XMLHttpRequest:false */\n\n        var Validate = require('Validate');\n        var Platform = require('Platform');\n        var _ = exports;\n\n        exports.isNull = function (value) {\n            /// <summary>\n            /// Gets a value indicating whether the provided value is null (or\n            /// undefined).\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\" mayBeNull=\"true\">\n            /// The value to check.\n            /// </param>\n            /// <returns type=\"Boolean\">\n            /// A value indicating whether the provided value is null (or undefined).\n            /// </returns>\n\n            return value === null || value === undefined;\n        };\n\n        exports.isNullOrZero = function (value) {\n            /// <summary>\n            /// Gets a value indicating whether the provided value is null (or\n            /// undefined) or zero / empty string\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\" mayBeNull=\"true\">\n            /// The value to check.\n            /// </param>\n            /// <returns type=\"Boolean\">\n            /// A value indicating whether the provided value is null (or undefined) or zero or empty string.\n            /// </returns>\n\n            return value === null || value === undefined || value === 0 || value === '';\n        };\n\n        exports.isNullOrEmpty = function (value) {\n            /// <summary>\n            /// Gets a value indicating whether the provided value is null (or\n            /// undefined) or empty.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\" mayBeNull=\"true\">\n            /// The value to check.\n            /// </param>\n            /// <returns type=\"Boolean\">\n            /// A value inHdicating whether the provided value is null (or undefined).\n            /// </returns>\n\n            return _.isNull(value) || value.length === 0;\n        };\n\n        exports.format = function (message) {\n            /// <summary>\n            /// Format a string by replacing all of its numbered arguments with\n            /// parameters to the method. Arguments are of the form {0}, {1}, ..., like\n            /// in .NET.\n            /// </summary>\n            /// <param name=\"message\" type=\"string\" mayBeNull=\"false\">\n            /// The format string for the message.\n            /// </param>\n            /// <param name=\"arguments\" type=\"array\" optional=\"true\">\n            /// A variable number of arguments that can be used to format the message.\n            /// </param>\n            /// <returns type=\"string\">The formatted string.</returns>\n\n            Validate.isString(message, 'message');\n\n            // Note: There are several flaws in this implementation that we are\n            // ignoring for simplicity as it's only used internally.  Examples that\n            // could be handled better include:\n            //    format('{0} {1}', 'arg') => 'arg {1}'\n            //    format('{0} {1}', '{1}', 'abc') => 'abc abc'\n            //    format('{0}', '{0}') => <stops responding>\n\n            if (!_.isNullOrEmpty(message) && arguments.length > 1) {\n                for (var i = 1; i < arguments.length; i++) {\n                    var pattern = '{' + (i - 1) + '}';\n                    while (message.indexOf(pattern) !== -1) {\n                        message = message.replace(pattern, arguments[i]);\n                    }\n                }\n            }\n\n            return message;\n        };\n\n        exports.has = function (value, key) {\n            /// <summary>\n            /// Determine if an object defines a given property.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The object to check.</param>\n            /// <param name=\"key\" type=\"String\">\n            /// The name of the property to check for.\n            /// </param>\n            /// <returns type=\"Boolean\">\n            /// A value indicating whether the object defines the property.\n            /// </returns>\n\n            Validate.notNull(key, 'key');\n            Validate.isString(key, 'key');\n\n            return !_.isNull(value) && value.hasOwnProperty(key);\n        };\n\n        exports.hasProperty = function (object, properties) {\n            /// <summary>\n            /// Determines if an object has any of the passed in properties\n            /// </summary>\n            /// <returns type=\"boolean\">True if it contains any one of the properties\n            /// </returns>\n            for (var i = 0; i < properties.length; i++) {\n                if (_.has(object, properties[i])) {\n                    return true;\n                }\n            }\n            return false;\n        };\n\n        exports.extend = function extend(target, members) {\n            /// <summary>\n            /// Extends the target with the members of the members object.\n            /// </summary>\n            /// <param name=\"target\" type=\"Object\">The target object to extend.</param>\n            /// <param name=\"members\" type=\"Object\">The members object to add to the target.</param>\n            /// <returns type=\"Object\">The target object extended with the members.\n            /// </returns>\n            for (var member in members) {\n                if (members.hasOwnProperty(member)) {\n                    target[member] = members[member];\n                }\n            }\n            return target;\n        };\n\n        exports.isObject = function (value) {\n            /// <summary>\n            /// Determine if a value is an object.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is an object (or null), false othwerise.\n            /// </returns>\n\n            return _.isNull(value) || (typeof value === 'object' && !_.isDate(value));\n        };\n\n        exports.isValidId = function (value) {\n            /// <summary>\n            /// Determine if a value is an acceptable id for use by the mobile service\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a string or number, meeting all criteria, or false othwerise.\n            /// </returns>\n            if (_.isNullOrZero(value)) {\n                return false;\n            }\n\n            if (_.isString(value)) {\n                // Strings must contain at least one non whitespace character\n                if (value.length === 0 || value.length > 255 || value.trim().length === 0) {\n                    return false;\n                }\n\n                var ex = /[+\"\\/?`\\\\]|[\\u0000-\\u001F]|[\\u007F-\\u009F]|^\\.{1,2}$/;\n                if (value.match(ex) !== null) {\n                    return false;\n                }\n\n                return true;\n\n            } else if (_.isNumber(value)) {\n                return value > 0;\n            }\n\n            return false;\n        };\n\n        exports.isString = function (value) {\n            /// <summary>\n            /// Determine if a value is a string.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a string (or null), false othwerise.\n            /// </returns>\n\n            return _.isNull(value) || (typeof value === 'string');\n        };\n\n        exports.isNumber = function (value) {\n            /// <summary>\n            /// Determine if a value is a number.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a number, false othwerise.\n            /// </returns>\n\n            return !_.isNull(value) && (typeof value === 'number');\n        };\n\n        exports.isBool = function (value) {\n            /// <summary>\n            /// Determine if a value is a boolean.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a boolean, false othwerise.\n            /// </returns>\n            return !_.isNull(value) && (typeof value == 'boolean');\n        };\n\n        function classOf(value) {\n            return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();\n        }\n\n        exports.isDate = function (value) {\n            /// <summary>\n            /// Determine if a value is a date.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to check.</param>\n            /// <returns type=\"boolean\">\n            /// True if the value is a date, false othwerise.\n            /// </returns>\n            return !_.isNull(value) && (classOf(value) == 'date');\n        };\n\n        exports.toJson = function (value) {\n            /// <summary>\n            /// Convert an object into JSON format.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to convert.</param>\n            /// <returns type=\"String\">The value as JSON.</returns>\n\n            return Platform.toJson(value);\n        };\n\n        exports.fromJson = function (value) {\n            /// <summary>\n            /// Convert an object from JSON format.\n            /// </summary>\n            /// <param name=\"value\" type=\"String\">The value to convert.</param>\n            /// <returns type=\"Object\">The value as an object.</returns>\n\n            var jsonValue = null;\n            if (!_.isNullOrEmpty(value)) {\n                // We're wrapping this so we can hook the process and perform custom JSON\n                // conversions\n                jsonValue = JSON.parse(\n                    value,\n                    function (k, v) {\n                        // Try to convert the value as a Date\n                        if (_.isString(v) && !_.isNullOrEmpty(v)) {\n                            var date = exports.tryParseIsoDateString(v);\n                            if (!_.isNull(date)) {\n                                return date;\n                            }\n                        }\n\n                        // TODO: Convert geolocations once they're supported\n                        // TODO: Expose the ability for developers to convert custom types\n\n                        // Return the original value if we couldn't do anything with it\n                        return v;\n                    });\n            }\n\n            return jsonValue;\n        };\n\n        exports.createUniqueInstallationId = function () {\n            /// <summary>\n            /// Create a unique identifier that can be used for the installation of\n            /// the current application.\n            /// </summary>\n            /// <returns type=\"String\">Unique identifier.</returns>\n\n            var pad4 = function (str) { return \"0000\".substring(str.length) + str; };\n            var hex4 = function () { return pad4(Math.floor(Math.random() * 0x10000 /* 65536 */).toString(16)); };\n\n            return (hex4() + hex4() + \"-\" + hex4() + \"-\" + hex4() + \"-\" + hex4() + \"-\" + hex4() + hex4() + hex4());\n        };\n\n        exports.mapProperties = function (instance, action) {\n            /// <summary>\n            /// Map a function over the key/value pairs in an instance.\n            /// </summary>\n            /// <param name=\"instance\" type=\"Object\">\n            /// The instance to map over.\n            /// </param>\n            /// <param name=\"action\" type=\"function (key, value)\">\n            /// The action to map over the key/value pairs.\n            /// </param>\n            /// <returns elementType=\"object\">Mapped results.</returns>\n\n            var results = [];\n            if (!_.isNull(instance)) {\n                var key = null;\n                for (key in instance) {\n                    results.push(action(key, instance[key]));\n                }\n            }\n            return results;\n        };\n\n        exports.pad = function (value, length, ch) {\n            /// <summary>\n            /// Pad the a value with a given character until it reaches the desired\n            /// length.\n            /// </summary>\n            /// <param name=\"value\" type=\"Object\">The value to pad.</param>\n            /// <param name=\"length\" type=\"Number\">The desired length.</param>\n            /// <param name=\"ch\" type=\"String\">The character to pad with.</param>\n            /// <returns type=\"String\">The padded string.</returns>\n\n            Validate.notNull(value, 'value');\n            Validate.isInteger(length, 'length');\n            Validate.isString(ch, 'ch');\n            Validate.notNullOrEmpty(ch, 'ch');\n            Validate.length(ch, 1, 'ch');\n\n            var text = value.toString();\n            while (text.length < length) {\n                text = ch + text;\n            }\n            return text;\n        };\n\n        exports.trimEnd = function (text, ch) {\n            /// <summary>\n            /// Trim all instance of a given characher from the end of a string.\n            /// </summary>\n            /// <param name=\"text\" type=\"String\" mayBeNull=\"false\">\n            /// The string to trim.\n            /// <param name=\"ch\" type=\"String\" mayBeNull=\"false\">\n            /// The character to trim.\n            /// </param>\n            /// <returns type=\"String\">The trimmed string.</returns>\n\n            Validate.isString(text, 'text');\n            Validate.notNull(text, 'text');\n            Validate.isString(ch, 'ch');\n            Validate.notNullOrEmpty('ch', 'ch');\n            Validate.length(ch, 1, 'ch');\n\n            var end = text.length - 1;\n            while (end >= 0 && text[end] === ch) {\n                end--;\n            }\n\n            return end >= 0 ?\n                text.substr(0, end + 1) :\n                '';\n        };\n\n        exports.trimStart = function (text, ch) {\n            /// <summary>\n            /// Trim all instance of a given characher from the start of a string.\n            /// </summary>\n            /// <param name=\"text\" type=\"String\" mayBeNull=\"false\">\n            /// The string to trim.\n            /// </param>\n            /// <param name=\"ch\" type=\"String\" mayBeNull=\"false\">\n            /// The character to trim.\n            /// </param>\n            /// <returns type=\"String\">The trimmed string.</returns>\n\n            Validate.isString(text, 'text');\n            Validate.notNull(text, 'text');\n            Validate.isString(ch, 'ch');\n            Validate.notNullOrEmpty(ch, 'ch');\n            Validate.length(ch, 1, 'ch');\n\n            var start = 0;\n            while (start < text.length && text[start] === ch) {\n                start++;\n            }\n\n            return start < text.length ?\n                text.substr(start, text.length - start) :\n                '';\n        };\n\n        exports.compareCaseInsensitive = function (first, second) {\n            /// <summary>\n            /// Compare two strings for equality while igorning case.\n            /// </summary>\n            /// <param name=\"first\" type=\"String\">First value.</param>\n            /// <param name=\"second\" type=\"String\">Second value.</param>\n            /// <returns type=\"Boolean\">Whether the strings are the same.</returns>\n\n            // NOTE: We prefer uppercase on Windows for historical reasons where it was\n            // possible to have alphabets where several uppercase characters mapped to\n            // the same lowercase character.\n\n            if (_.isString(first) && !_.isNullOrEmpty(first)) {\n                first = first.toUpperCase();\n            }\n\n            if (_.isString(first) && !_.isNullOrEmpty(second)) {\n                second = second.toUpperCase();\n            }\n\n            return first === second;\n        };\n\n        /// <field name=\"url\" type=\"Object\">\n        /// Path specific utilities for working with URIs.\n        /// </field>\n        exports.url = {\n            /// <field name=\"separator\" type=\"String\">\n            /// The path separator character used for combining path segments.\n            /// </field>\n            separator: '/',\n\n            combinePathSegments: function () {\n                /// <summary>\n                /// Combine several segments into a path.\n                /// </summary>\n                /// <param parameterArray=\"true\" elementType=\"String\">\n                /// The segments of the path that should be combined.\n                /// </param>\n                /// <returns type=\"String\">The combined path.</returns>\n\n                // Normalize the segements\n                var segments = [];\n                var i = 0;\n                Validate.notNullOrEmpty(arguments, 'arguments');\n                for (i = 0; i < arguments.length; i++) {\n                    var segment = arguments[i];\n                    Validate.isString(segment, _.format('argument[{0}]', i));\n\n                    if (i !== 0) {\n                        segment = _.trimStart(segment || '', _.url.separator);\n                    }\n                    if (i < arguments.length - 1) {\n                        segment = _.trimEnd(segment || '', _.url.separator);\n                    }\n\n                    segments.push(segment);\n                }\n\n                // Combine the segments\n                return segments.reduce(\n                    function (a, b) { return a + _.url.separator + b; });\n            },\n\n            getQueryString: function (parameters) {\n                /// <summary>\n                /// Converts an Object instance into a query string\n                /// </summary>\n                /// <param name=\"parameters\" type=\"Object\">The parameters from which to create a query string.</param>\n                /// <returns type=\"String\">A query string</returns>\n\n                Validate.notNull(parameters, 'parameters');\n                Validate.isObject(parameters, 'parameters');\n\n                var pairs = [];\n                for (var parameter in parameters) {\n                    var value = parameters[parameter];\n                    if (exports.isObject(value)) {\n                        value = exports.toJson(value);\n                    }\n                    pairs.push(encodeURIComponent(parameter) + \"=\" + encodeURIComponent(value));\n                }\n\n                return pairs.join(\"&\");\n            },\n\n            combinePathAndQuery: function (path, queryString) {\n                /// <summary>\n                /// Concatenates the URI query string to the URI path.\n                /// </summary>\n                /// <param name=\"path\" type=\"String>The URI path</param>\n                /// <param name=\"queryString\" type=\"String>The query string.</param>\n                /// <returns type=\"String>The concatenated URI path and query string.</returns>\n                Validate.notNullOrEmpty(path, 'path');\n                Validate.isString(path, 'path');\n                if (_.isNullOrEmpty(queryString)) {\n                    return path;\n                }\n                Validate.isString(queryString, 'queryString');\n\n                if (path.indexOf('?') >= 0) {\n                    return path + '&' + exports.trimStart(queryString, '?');\n                } else {\n                    return path + '?' + exports.trimStart(queryString, '?');\n                }\n            }\n        };\n\n        exports.tryParseIsoDateString = function (text) {\n            /// <summary>\n            /// Try to parse an ISO date string.\n            /// </summary>\n            /// <param name=\"text\" type=\"String\">The text to parse.</param>\n            /// <returns type=\"Date\">The parsed Date or null.</returns>\n\n            return Platform.tryParseIsoDateString(text);\n        };\n\n        exports.createError = function (exceptionOrMessage, request) {\n            /// <summary>\n            /// Wrap an error thrown as an exception.\n            /// </summary>\n            /// <param name=\"exceptionOrMessage\">\n            /// The exception or message to throw.\n            /// </param>\n            /// <param name=\"request\">\n            /// The failing request.\n            /// </param>\n            /// <returns>An object with error details</returns>\n\n            // Create an error object to return\n            var error = { message: Platform.getResourceString(\"Extensions_DefaultErrorMessage\") };\n            error.toString = function () {\n                return error.message;\n            };\n\n            if (request) {\n                error.request = request;\n                if (request.status === 0) {\n                    // Provide a more helpful message for connection failures\n                    error.message = Platform.getResourceString(\"Extensions_ConnectionFailureMessage\");\n                } else {\n                    // Try to pull out an error message from the response before\n                    // defaulting to the status\n                    var isText = false;\n                    if (request.getResponseHeader) {\n                        isText = request.getResponseHeader('Content-Type').toLowerCase().indexOf(\"text\") >= 0;\n                    }\n\n                    try {\n                        var response = JSON.parse(request.responseText);\n                        if (typeof response === 'string') {\n                            error.message = response;\n                        } else {\n                            error.message =\n                                response.error ||\n                                response.description ||\n                                request.statusText ||\n                                Platform.getResourceString(\"Extensions_DefaultErrorMessage\");\n                        }\n                    } catch (ex) {\n                        if (isText) {\n                            error.message = request.responseText;\n                        } else {\n                            error.message =\n                                request.statusText ||\n                                Platform.getResourceString(\"Extensions_DefaultErrorMessage\");\n                        }\n                    }\n                }\n            } else if (_.isString(exceptionOrMessage) && !_.isNullOrEmpty(exceptionOrMessage)) {\n                // If it's a string, just use that as the message\n                error.message = exceptionOrMessage;\n            } else if (!_.isNull(exceptionOrMessage)) {\n                // Otherwise we'll use the object as an exception and leave the\n                // default error message\n                error.exception = exceptionOrMessage;\n            }\n\n            return error;\n        };\n    };\n\n    $__modules__.Validate = function (exports) {\n        // ----------------------------------------------------------------------------\n        // Copyright (c) Microsoft Corporation. All rights reserved.\n        // ----------------------------------------------------------------------------\n\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\base.js\" />\n        /// <reference path=\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0\\ExtensionSDKs\\Microsoft.WinJS.1.0\\1.0\\DesignTime\\CommonConfiguration\\Neutral\\Microsoft.WinJS.1.0\\js\\ui.js\" />\n        /// <reference path=\"..\\Generated\\Zumo.DevIntellisense.js\" />\n\n        var _ = require('Extensions');\n        var Platform = require('Platform');\n\n        exports.notNull = function (value, name) {\n            /// <summary>\n            /// Ensure the value is not null (or undefined).\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (_.isNull(value)) {\n                throw _.format(Platform.getResourceString(\"Validate_NotNullError\"), name || 'Value');\n            }\n        };\n\n        exports.notNullOrEmpty = function (value, name) {\n            /// <summary>\n            /// Ensure the value is not null, undefined, or empty.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (_.isNullOrEmpty(value)) {\n                throw _.format(Platform.getResourceString(\"Validate_NotNullOrEmptyError\"), name || 'Value');\n            }\n        };\n\n        exports.notNullOrZero = function (value, name) {\n            /// <summary>\n            /// Ensure the value is not null, undefined, zero, or empty.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (_.isNullOrZero(value)) {\n                throw _.format(Platform.getResourceString(\"Validate_NotNullOrEmptyError\"), name || 'Value');\n            }\n        };\n\n        exports.isValidId = function (value, name) {\n            /// <summary>\n            /// Ensure the value is a valid id for mobile services.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (!_.isValidId(value)) {\n                throw _.format(Platform.getResourceString(\"Validate_InvalidId\"), name || 'id');\n            }\n        };\n\n        exports.isDate = function (value, name) {\n            /// <summary>\n            /// Ensure the value is a date.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n            if (!_.isDate(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'Date',\n                    typeof value);\n            }\n        };\n\n        exports.isNumber = function (value, name) {\n            /// <summary>\n            /// Ensure the value is a number.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n\n            if (!_.isNumber(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'Number',\n                    typeof value);\n            }\n        };\n\n        exports.isValidParametersObject = function (value, name) {\n            /// <summary>\n            /// Ensure the Object instance of user-defined parameters is valid.\n            /// </summary>\n            /// <param name=\"value\">The parameters to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n            exports.isObject(value, name);\n\n            for (var parameter in value) {\n                if (parameter.indexOf('$') === 0) {\n                    throw _.format(\n                        Platform.getResourceString(\"Validate_InvalidUserParameter\"),\n                        name,\n                        parameter);\n                }\n            }\n        };\n\n        exports.isInteger = function (value, name) {\n            /// <summary>\n            /// Ensure the value is an integer.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n            exports.isNumber(value, name);\n\n            if (parseInt(value, 10) !== parseFloat(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'number',\n                    typeof value);\n            }\n        };\n\n        exports.isString = function (value, name) {\n            /// <summary>\n            /// Ensure the value is a string.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (!_.isString(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'string',\n                    typeof value);\n            }\n        };\n\n        exports.isObject = function (value, name) {\n            /// <summary>\n            /// Ensure the value is an Object.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (!_.isObject(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'object',\n                    typeof value);\n            }\n        };\n\n        exports.isArray = function (value, name) {\n            /// <summary>\n            /// Ensure the value is an Array.\n            /// </summary>\n            /// <param name=\"value\" mayBeNull=\"true\">The value to check.</param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            if (!Array.isArray(value)) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_TypeCheckError\"),\n                    name || 'Value',\n                    'array',\n                    typeof value);\n            }\n        };\n\n        exports.length = function (value, length, name) {\n            /// <summary>\n            /// Ensure the value is of a given length.\n            /// </summary>\n            /// <param name=\"value\" type=\"String\">\n            /// The value to check.\n            /// </param>\n            /// <param name=\"length\" type=\"Number\" integer=\"true\">\n            /// The desired length of the value.\n            /// </param>\n            /// <param name=\"name\" mayBeNull=\"true\" optional=\"true\" type=\"String\">\n            /// Optional name of the value to throw.\n            /// </param>\n\n            exports.notNull(value, name);\n            exports.isInteger(length, 'length');\n\n            if (value.length !== length) {\n                throw _.format(\n                    Platform.getResourceString(\"Validate_LengthUnexpected\"),\n                    name || 'Value',\n                    length,\n                    value.length);\n            }\n        };\n    };\n\n    $__modules__.JavaScript = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var JS, JavaScript, JavaScriptToQueryVisitor, PartialEvaluator, esprima;\n\n            esprima = require('esprima');\n\n            JS = require('./JavaScriptNodes');\n\n            PartialEvaluator = require('./PartialEvaluator').PartialEvaluator;\n\n            JavaScriptToQueryVisitor = require('./JavaScriptToQueryVisitor').JavaScriptToQueryVisitor;\n\n\n            /*\n             * Define operations on JavaScript\n             */\n\n            exports.JavaScript = JavaScript = (function () {\n                function JavaScript() { }\n\n\n                /*\n                 * Static method to transform a constraint specified as a function into\n                 * a QueryExpression tree.\n                 */\n\n                JavaScript.transformConstraint = function (func, env) {\n\n                    /*\n                     * Parse the body of the function into a JavaScriptExpression tree\n                     * (into a context that also contains its source and manually reified\n                     * environment)\n                     */\n                    var context, translator;\n                    context = JavaScript.getExpression(func, env);\n\n                    /*\n                     * Evaluate any independent subexpressions and turn them into\n                     * literals.\n                     */\n                    context.expression = PartialEvaluator.evaluate(context);\n\n                    /*\n                     * Convert the JavaScriptExpression tree into a QueryExpression tree\n                     */\n                    translator = new JavaScriptToQueryVisitor(context);\n                    return translator.visit(context.expression);\n                };\n\n\n                /*\n                 * Static method to walk a projection specified as a function and\n                 * determine which fields it uses.\n                 */\n\n                JavaScript.getProjectedFields = function (func) {\n\n                    /*\n                     * This currently returns an empty array which indicates all fields.\n                     * At some point we'll need to go through and walk the expression\n                     * tree for func and see exactly which fields it uses.  This is\n                     * complicated by the fact that we support arbitrary expressions and\n                     * could for example pass 'this' to a nested lambda which means we\n                     * can't just check for MemberExpressions (though in that case we'll\n                     * probably just default to [] rather than trying to do alias\n                     * analysis across function calls, etc.)\n                     */\n                    return [];\n                };\n\n\n                /*\n                 * Turn a function and its explicitly passed environment into an\n                 * expression tree\n                 */\n\n                JavaScript.getExpression = function (func, env) {\n\n                    /*\n                     * An anonymous function isn't considered a valid program, so we'll wrap\n                     * it in an assignment statement to keep the parser happy\n                     */\n                    var environment, expr, i, name, names, program, source, _i, _len, _ref, _ref1, _ref10, _ref11, _ref12, _ref13, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;\n                    source = \"var _$$_stmt_$$_ = \" + func + \";\";\n\n                    /*\n                     * Use esprima to parse the source of the function body (and have it\n                     * return source locations in character ranges )\n                     */\n                    program = esprima.parse(source, {\n                        range: true\n                    });\n\n                    /*\n                     * Get the expression from return statement of the function body to use\n                     * as our lambda expression\n                     */\n                    expr = (program != null ? program.type : void 0) === 'Program' && (program != null ? (_ref = program.body) != null ? _ref.length : void 0 : void 0) === 1 && ((_ref1 = program.body[0]) != null ? _ref1.type : void 0) === 'VariableDeclaration' && ((_ref2 = program.body[0]) != null ? (_ref3 = _ref2.declarations) != null ? _ref3.length : void 0 : void 0) === 1 && ((_ref4 = program.body[0].declarations[0]) != null ? _ref4.type : void 0) === 'VariableDeclarator' && ((_ref5 = program.body[0].declarations[0]) != null ? (_ref6 = _ref5.init) != null ? _ref6.type : void 0 : void 0) === 'FunctionExpression' && ((_ref7 = program.body[0].declarations[0].init) != null ? (_ref8 = _ref7.body) != null ? _ref8.type : void 0 : void 0) === 'BlockStatement' && ((_ref9 = program.body[0].declarations[0].init.body) != null ? (_ref10 = _ref9.body) != null ? _ref10.length : void 0 : void 0) === 1 && ((_ref11 = program.body[0].declarations[0].init.body.body[0]) != null ? _ref11.type : void 0) === 'ReturnStatement' && ((_ref12 = program.body[0].declarations[0].init.body.body[0]) != null ? _ref12.argument : void 0);\n                    if (!expr) {\n                        throw \"Expected a predicate with a single return statement, not \" + func;\n                    }\n\n                    /*\n                     * Create the environment mqpping parameters to values\n                     */\n                    names = (_ref13 = program.body[0].declarations[0].init.params) != null ? _ref13.map(function (p) {\n                        return p.name;\n                    }) : void 0;\n                    if (names.length > env.length) {\n                        throw \"Expected value(s) for parameter(s) \" + names.slice(env.length);\n                    } else if (env.length > names.length) {\n                        throw \"Expected parameter(s) for value(s) \" + env.slice(names.length);\n                    }\n                    environment = {};\n                    for (i = _i = 0, _len = names.length; _i < _len; i = ++_i) {\n                        name = names[i];\n                        environment[name] = env[i];\n                    }\n                    return {\n\n                        /*\n                         * Return the environment context\n                         */\n                        source: source,\n                        expression: expr,\n                        environment: environment\n                    };\n                };\n\n                return JavaScript;\n\n            })();\n\n        }).call(this);\n    };\n\n    $__modules__.JavaScriptNodes = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n\n        /*\n         * Define the Esprima node structure for JavaScript parse trees.  This is mostly\n         * identical to the SpiderMonkey API defined at\n         * https://developer.mozilla.org/en/SpiderMonkey/Parser_API without any of the\n         * SpiderMonkey specifics and a few simplifications made by Esprima (i.e. it\n         * doesn't have separate objects for operator types, etc.).\n         *\n         * It's important to note that the Esprima parse tree will return object literals\n         * and not instances of these types.  They're provided primarily for reference\n         * and for easily constructing new subtrees during transformations by visitors.\n         */\n\n\n        /* Get the base Node and Visitor classes. */\n\n        (function () {\n            var ArrayExpression, ArrayPattern, AssignmentExpression, BinaryExpression, BlockStatement, BreakStatement, CallExpression, CatchClause, ConditionalExpression, ContinueStatement, DebuggerStatement, Declaration, DoWhileStatement, EmptyStatement, Expression, ExpressionStatement, ForInStatement, ForStatement, Function, FunctionDeclaration, FunctionExpression, Identifier, IfStatement, JavaScriptNode, JavaScriptVisitor, LabeledStatement, Literal, LogicalExpression, MemberExpression, NewExpression, Node, ObjectExpression, ObjectPattern, Pattern, Program, ReturnStatement, SequenceExpression, Statement, SwitchCase, SwitchStatement, ThisExpression, ThrowStatement, TryStatement, UnaryExpression, UpdateExpression, VariableDeclaration, VariableDeclarator, Visitor, WhileStatement, WithStatement, _ref,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ref = require('./Node'), Node = _ref.Node, Visitor = _ref.Visitor;\n\n\n            /*\n             * Base node for all JavaScript nodes.\n             */\n\n            exports.JavaScriptNode = JavaScriptNode = (function (_super) {\n                __extends(JavaScriptNode, _super);\n\n                function JavaScriptNode() {\n                    JavaScriptNode.__super__.constructor.call(this);\n                }\n\n                return JavaScriptNode;\n\n            })(Node);\n\n\n            /*\n             * Base visitor for all JavaScript nodes.\n             */\n\n            exports.JavaScriptVisitor = JavaScriptVisitor = (function (_super) {\n                __extends(JavaScriptVisitor, _super);\n\n                function JavaScriptVisitor() {\n                    JavaScriptVisitor.__super__.constructor.call(this);\n                }\n\n                JavaScriptVisitor.prototype.JavaScriptNode = function (node) {\n                    return node;\n                };\n\n                return JavaScriptVisitor;\n\n            })(Visitor);\n\n\n            /*\n             * A complete program source tree.\n             */\n\n            exports.Program = Program = (function (_super) {\n                __extends(Program, _super);\n\n\n                /*\n                 * @elements: [Statement]\n                 */\n\n                function Program(elements) {\n                    this.elements = elements;\n                    Program.__super__.constructor.call(this);\n                }\n\n                return Program;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Program = function (node) {\n                node = this.JavaScriptNode(node);\n                node.elements = this.visit(node.elements);\n                return node;\n            };\n\n\n            /*\n             * A function declaration or expression. The body of the function is a  block\n             * statement.\n             */\n\n            exports.Function = Function = (function (_super) {\n                __extends(Function, _super);\n\n\n                /*\n                 * @id: Identifier | null\n                 * @params: [Pattern]\n                 * @body: BlockStatement\n                 */\n\n                function Function(id, params, body) {\n                    this.id = id;\n                    this.params = params;\n                    this.body = body;\n                    Function.__super__.constructor.call(this);\n                }\n\n                return Function;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Function = function (node) {\n                node = this.JavaScriptNode(node);\n                node.id = this.visit(node.id);\n                node.params = this.visit(node.params);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * Any statement.\n             */\n\n            exports.Statement = Statement = (function (_super) {\n                __extends(Statement, _super);\n\n                function Statement() {\n                    Statement.__super__.constructor.call(this);\n                }\n\n                return Statement;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Statement = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * An empty statement, i.e., a solitary semicolon.\n             */\n\n            exports.EmptyStatement = EmptyStatement = (function (_super) {\n                __extends(EmptyStatement, _super);\n\n                function EmptyStatement() {\n                    EmptyStatement.__super__.constructor.call(this);\n                }\n\n                return EmptyStatement;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.EmptyStatement = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * A block statement, i.e., a sequence of statements surrounded by braces.\n             */\n\n            exports.BlockStatement = BlockStatement = (function (_super) {\n                __extends(BlockStatement, _super);\n\n\n                /*\n                 * @body: [Statement]\n                 */\n\n                function BlockStatement(body) {\n                    this.body = body;\n                    BlockStatement.__super__.constructor.call(this);\n                }\n\n                return BlockStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.BlockStatement = function (node) {\n                node = this.Statement(node);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * An expression statement, i.e., a statement consisting of a single expression.\n             */\n\n            exports.ExpressionStatement = ExpressionStatement = (function (_super) {\n                __extends(ExpressionStatement, _super);\n\n                function ExpressionStatement() {\n                    ExpressionStatement.__super__.constructor.call(this);\n                }\n\n                return ExpressionStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ExpressionStatement = function (node) {\n                node = this.Statement(node);\n                return node;\n            };\n\n\n            /*\n             * An if statement.\n             */\n\n            exports.IfStatement = IfStatement = (function (_super) {\n                __extends(IfStatement, _super);\n\n\n                /*\n                 * @test: Expression\n                 * @consequent: Statement\n                 * @alternate: Statement | null\n                 */\n\n                function IfStatement(test, consequent, alternate) {\n                    this.test = test;\n                    this.consequent = consequent;\n                    this.alternate = alternate;\n                    IfStatement.__super__.constructor.call(this);\n                }\n\n                return IfStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.IfStatement = function (node) {\n                node = this.Statement(node);\n                node.test = this.visit(node.test);\n                node.consequent = this.visit(node.consequent);\n                node.alternate = this.visit(node.alternate);\n                return node;\n            };\n\n\n            /*\n             * A labeled statement, i.e., a statement prefixed by a break/continue label.\n             */\n\n            exports.LabeledStatement = LabeledStatement = (function (_super) {\n                __extends(LabeledStatement, _super);\n\n\n                /*\n                 * @label: Identifier\n                 * @body: Statement\n                 */\n\n                function LabeledStatement(label, body) {\n                    this.label = label;\n                    this.body = body;\n                    LabeledStatement.__super__.constructor.call(this);\n                }\n\n                return LabeledStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.LabeledStatement = function (node) {\n                node = this.Statement(node);\n                node.label = this.visit(node.label);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A break statement.\n             */\n\n            exports.BreakStatement = BreakStatement = (function (_super) {\n                __extends(BreakStatement, _super);\n\n\n                /*\n                 * @label: Identifier | null\n                 */\n\n                function BreakStatement(label) {\n                    this.label = label;\n                    BreakStatement.__super__.constructor.call(this);\n                }\n\n                return BreakStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.BreakStatement = function (node) {\n                node = this.Statement(node);\n                node.label = this.visit(node.label);\n                return node;\n            };\n\n\n            /*\n            A continue statement.\n             */\n\n            exports.ContinueStatement = ContinueStatement = (function (_super) {\n                __extends(ContinueStatement, _super);\n\n\n                /*\n                @label: Identifier | null\n                 */\n\n                function ContinueStatement(label) {\n                    this.label = label;\n                    ContinueStatement.__super__.constructor.call(this);\n                }\n\n                return ContinueStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ContinueStatement = function (node) {\n                node = this.Statement(node);\n                node.label = this.visit(node.label);\n                return node;\n            };\n\n\n            /*\n             * A with statement.\n             */\n\n            exports.WithStatement = WithStatement = (function (_super) {\n                __extends(WithStatement, _super);\n\n\n                /*\n                 * @object: Expression\n                 * @body: Statement\n                 */\n\n                function WithStatement(object, body) {\n                    this.object = object;\n                    this.body = body;\n                    WithStatement.__super__.constructor.call(this);\n                }\n\n                return WithStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.WithStatement = function (node) {\n                node = this.Statement(node);\n                node.object = this.visit(node.object);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A switch statement.\n             */\n\n            exports.SwitchStatement = SwitchStatement = (function (_super) {\n                __extends(SwitchStatement, _super);\n\n\n                /*\n                 * @discriminant: Expression\n                 * @cases: [SwitchCase]\n                 */\n\n                function SwitchStatement(discriminant, cases) {\n                    this.discriminant = discriminant;\n                    this.cases = cases;\n                    SwitchStatement.__super__.constructor.call(this);\n                }\n\n                return SwitchStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.SwitchStatement = function (node) {\n                node = this.Statement(node);\n                node.discriminant = this.visit(node.discriminant);\n                node.cases = this.visit(node.cases);\n                return node;\n            };\n\n\n            /*\n             * A return statement.\n             */\n\n            exports.ReturnStatement = ReturnStatement = (function (_super) {\n                __extends(ReturnStatement, _super);\n\n\n                /*\n                 * @argument: Expression | null\n                 */\n\n                function ReturnStatement(argument) {\n                    this.argument = argument;\n                    ReturnStatement.__super__.constructor.call(this);\n                }\n\n                return ReturnStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ReturnStatement = function (node) {\n                node = this.Statement(node);\n                node.argument = this.visit(node.argument);\n                return node;\n            };\n\n\n            /*\n             * A throw statement.\n             */\n\n            exports.ThrowStatement = ThrowStatement = (function (_super) {\n                __extends(ThrowStatement, _super);\n\n\n                /*\n                 * @argument: Expression\n                 */\n\n                function ThrowStatement(argument) {\n                    this.argument = argument;\n                    ThrowStatement.__super__.constructor.call(this);\n                }\n\n                return ThrowStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ThrowStatement = function (node) {\n                node = this.Statement(node);\n                node.argument = this.visit(node.argument);\n                return node;\n            };\n\n\n            /*\n             * A try statement.\n             */\n\n            exports.TryStatement = TryStatement = (function (_super) {\n                __extends(TryStatement, _super);\n\n\n                /*\n                 * @block: BlockStatement\n                 * @handlers: [CatchClause]\n                 * @finalizer: BlockStatement | null\n                 */\n\n                function TryStatement(block, handlers, finalizer) {\n                    this.block = block;\n                    this.handlers = handlers;\n                    this.finalizer = finalizer;\n                    TryStatement.__super__.constructor.call(this);\n                }\n\n                return TryStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.TryStatement = function (node) {\n                node = this.Statement(node);\n                node.block = this.visit(node.block);\n                node.handlers = this.visit(node.handlers);\n                node.finalizer = this.visit(node.finalizer);\n                return node;\n            };\n\n\n            /*\n             * A while statement.\n             */\n\n            exports.WhileStatement = WhileStatement = (function (_super) {\n                __extends(WhileStatement, _super);\n\n\n                /*\n                 * @test: Expression\n                 * @body: Statement\n                 */\n\n                function WhileStatement(test, body) {\n                    this.test = test;\n                    this.body = body;\n                    WhileStatement.__super__.constructor.call(this);\n                }\n\n                return WhileStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.WhileStatement = function (node) {\n                node = this.Statement(node);\n                node.test = this.visit(node.test);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A do/while statement.\n             */\n\n            exports.DoWhileStatement = DoWhileStatement = (function (_super) {\n                __extends(DoWhileStatement, _super);\n\n\n                /*\n                 * @body: Statement\n                 * @test: Expression\n                 */\n\n                function DoWhileStatement(body, test) {\n                    this.body = body;\n                    this.test = test;\n                    DoWhileStatement.__super__.constructor.call(this);\n                }\n\n                return DoWhileStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.DoWhileStatement = function (node) {\n                node = this.Statement(node);\n                node.body = this.visit(node.body);\n                node.test = this.visit(node.test);\n                return node;\n            };\n\n\n            /*\n             * A for statement.\n             */\n\n            exports.ForStatement = ForStatement = (function (_super) {\n                __extends(ForStatement, _super);\n\n\n                /*\n                 * @init: VariableDeclaration | Expression | null\n                 * @test: Expression | null\n                 * @update: Expression | null\n                 * @body: Statement\n                 */\n\n                function ForStatement(init, test, update, body) {\n                    this.init = init;\n                    this.test = test;\n                    this.update = update;\n                    this.body = body;\n                    ForStatement.__super__.constructor.call(this);\n                }\n\n                return ForStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ForStatement = function (node) {\n                node = this.Statement(node);\n                node.init = this.visit(node.init);\n                node.test = this.visit(node.test);\n                node.update = this.visit(node.update);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A for/in statement, or, if each is true, a for each/in statement.\n             */\n\n            exports.ForInStatement = ForInStatement = (function (_super) {\n                __extends(ForInStatement, _super);\n\n\n                /*\n                 * @left: VariableDeclaration |  Expression\n                 * @right: Expression\n                 * @body: Statement\n                 */\n\n                function ForInStatement(left, right, body) {\n                    this.left = left;\n                    this.right = right;\n                    this.body = body;\n                    ForInStatement.__super__.constructor.call(this);\n                }\n\n                return ForInStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.ForInStatement = function (node) {\n                node = this.Statement(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A debugger statement.\n             */\n\n            exports.DebuggerStatement = DebuggerStatement = (function (_super) {\n                __extends(DebuggerStatement, _super);\n\n                function DebuggerStatement() {\n                    DebuggerStatement.__super__.constructor.call(this);\n                }\n\n                return DebuggerStatement;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.DebuggerStatement = function (node) {\n                node = this.Statement(node);\n                return node;\n            };\n\n\n            /*\n             * Any declaration node. Note that declarations are considered statements; this\n             * is because declarations can appear in any statement context in the language.\n             */\n\n            exports.Declaration = Declaration = (function (_super) {\n                __extends(Declaration, _super);\n\n                function Declaration() {\n                    Declaration.__super__.constructor.call(this);\n                }\n\n                return Declaration;\n\n            })(Statement);\n\n            JavaScriptVisitor.prototype.Declaration = function (node) {\n                node = this.Statement(node);\n                return node;\n            };\n\n\n            /*\n             * A function declaration.  Note: The id field cannot be null.\n             */\n\n            exports.FunctionDeclaration = FunctionDeclaration = (function (_super) {\n                __extends(FunctionDeclaration, _super);\n\n\n                /*\n                 * @id: Identifier\n                 * @params: [ Pattern ]\n                 * @body: BlockStatement | Expression\n                 */\n\n                function FunctionDeclaration(id, params, body) {\n                    this.id = id;\n                    this.params = params;\n                    this.body = body;\n                    FunctionDeclaration.__super__.constructor.call(this);\n                }\n\n                return FunctionDeclaration;\n\n            })(Declaration);\n\n            JavaScriptVisitor.prototype.FunctionDeclaration = function (node) {\n                node = this.Declaration(node);\n                node.id = this.visit(node.id);\n                node.params = this.visit(node.params);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A variable declaration, via one of var, let, or const.\n             */\n\n            exports.VariableDeclaration = VariableDeclaration = (function (_super) {\n                __extends(VariableDeclaration, _super);\n\n\n                /*\n                 * @declarations: [ VariableDeclarator ]\n                 * @kind: \"var\"\n                 */\n\n                function VariableDeclaration(declarations, kind) {\n                    this.declarations = declarations;\n                    this.kind = kind;\n                    VariableDeclaration.__super__.constructor.call(this);\n                }\n\n                return VariableDeclaration;\n\n            })(Declaration);\n\n            JavaScriptVisitor.prototype.VariableDeclaration = function (node) {\n                node = this.Declaration(node);\n                node.declarations = this.visit(node.declarations);\n                return node;\n            };\n\n\n            /*\n             * A variable declarator.  Note: The id field cannot be null.\n             */\n\n            exports.VariableDeclarator = VariableDeclarator = (function (_super) {\n                __extends(VariableDeclarator, _super);\n\n\n                /*\n                 * @id: Pattern\n                 * @init: Expression | null\n                 */\n\n                function VariableDeclarator(id, init) {\n                    this.id = id;\n                    this.init = init;\n                    VariableDeclarator.__super__.constructor.call(this);\n                }\n\n                return VariableDeclarator;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.VariableDeclarator = function (node) {\n                node = this.JavaScriptNode(node);\n                node.id = this.visit(node.id);\n                node.init = this.visit(node.init);\n                return node;\n            };\n\n\n            /*\n             * Any expression node. Since the left-hand side of an assignment may be any\n             * expression in general, an expression can also be a pattern.\n             */\n\n            exports.Expression = Expression = (function (_super) {\n                __extends(Expression, _super);\n\n                function Expression() {\n                    return Expression.__super__.constructor.apply(this, arguments);\n                }\n\n                Expression.prototype.constuctor = function () {\n                    return Expression.__super__.constuctor.call(this);\n                };\n\n                return Expression;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Expression = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * A this expression.\n             */\n\n            exports.ThisExpression = ThisExpression = (function (_super) {\n                __extends(ThisExpression, _super);\n\n                function ThisExpression() {\n                    ThisExpression.__super__.constructor.call(this);\n                }\n\n                return ThisExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.ThisExpression = function (node) {\n                node = this.Expression(node);\n                return node;\n            };\n\n\n            /*\n             * An array expression.\n             */\n\n            exports.ArrayExpression = ArrayExpression = (function (_super) {\n                __extends(ArrayExpression, _super);\n\n\n                /*\n                 * @elements: [ Expression | null ]\n                 */\n\n                function ArrayExpression(elements) {\n                    this.elements = elements;\n                    ArrayExpression.__super__.constructor.call(this);\n                }\n\n                return ArrayExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.ArrayExpression = function (node) {\n                node = this.Expression(node);\n                node.elements = this.visit(node.elements);\n                return node;\n            };\n\n\n            /*\n             * An object expression. A literal property in an object expression can have\n             * either a string or number as its value.  Ordinary property initializers have a\n             * kind value \"init\"; getters and setters have the kind values \"get\" and \"set\",\n             * respectively.\n             */\n\n            exports.ObjectExpression = ObjectExpression = (function (_super) {\n                __extends(ObjectExpression, _super);\n\n\n                /*\n                 * @properties: [ { key: Literal | Identifier,\n                 *                 value: Expression,\n                 *                 kind: \"init\" | \"get\" | \"set\" } ];\n                 */\n\n                function ObjectExpression(properties) {\n                    this.properties = properties;\n                    ObjectExpression.__super__.constructor.call(this);\n                }\n\n                return ObjectExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.ObjectExpression = function (node) {\n                var setter, _i, _len, _ref1;\n                node = this.Expression(node);\n                _ref1 = node.properties;\n                for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n                    setter = _ref1[_i];\n                    setter.key = this.visit(setter.key);\n                    setter.value = this.visit(setter.value);\n                }\n                return node;\n            };\n\n\n            /*\n             * A function expression.\n             */\n\n            exports.FunctionExpression = FunctionExpression = (function (_super) {\n                __extends(FunctionExpression, _super);\n\n\n                /*\n                 * @id: Identifier | null\n                 * @params: [ Pattern ]\n                 * @body: BlockStatement | Expression\n                 */\n\n                function FunctionExpression(id, params, body) {\n                    this.id = id;\n                    this.params = params;\n                    this.body = body;\n                    FunctionExpression.__super__.constructor.call(this);\n                }\n\n                return FunctionExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.FunctionExpression = function (node) {\n                node = this.Expression(node);\n                node.id = this.visit(node.id);\n                node.params = this.visit(node.params);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * A sequence expression, i.e., a comma-separated sequence of expressions.\n             */\n\n            exports.SequenceExpression = SequenceExpression = (function (_super) {\n                __extends(SequenceExpression, _super);\n\n\n                /*\n                 * @expressions: [ Expression ]\n                 */\n\n                function SequenceExpression(expressions) {\n                    this.expressions = expressions;\n                    SequenceExpression.__super__.constructor.call(this);\n                }\n\n                return SequenceExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.SequenceExpression = function (node) {\n                node = this.Expression(node);\n                node.expressions = this.visit(node.expressions);\n                return node;\n            };\n\n\n            /*\n             * A unary operator expression.\n             */\n\n            exports.UnaryExpression = UnaryExpression = (function (_super) {\n                __extends(UnaryExpression, _super);\n\n\n                /*\n                 * @operator: \"-\" | \"+\" | \"!\" | \"~\" | \"typeof\" | \"void\" | \"delete\"\n                 * @prefix: boolean\n                 * @argument: Expression\n                 */\n\n                function UnaryExpression(operator, prefix, argument) {\n                    this.operator = operator;\n                    this.prefix = prefix;\n                    this.argument = argument;\n                    UnaryExpression.__super__.constructor.call(this);\n                }\n\n                return UnaryExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.UnaryExpression = function (node) {\n                node = this.Expression(node);\n                node.argument = this.visit(node.argument);\n                return node;\n            };\n\n\n            /*\n             * A binary operator expression.\n             */\n\n            exports.BinaryExpression = BinaryExpression = (function (_super) {\n                __extends(BinaryExpression, _super);\n\n\n                /*\n                 * @operator: \"==\" | \"!=\" | \"===\" | \"!==\" | \"<\" | \"<=\" | \">\" | \">=\"\n                 *     | \"<<\" | \">>\" | \">>>\" | \"+\" | \"-\" | \"*\" | \"/\" | \"%\"\n                 *     | \"|\" | \"&\" | \"^\" | \"in\" | \"instanceof\" | \"..\"\n                 * @left: Expression\n                 * @right: Expression\n                 */\n\n                function BinaryExpression(operator, left, right) {\n                    this.operator = operator;\n                    this.left = left;\n                    this.right = right;\n                    BinaryExpression.__super__.constructor.call(this);\n                }\n\n                return BinaryExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.BinaryExpression = function (node) {\n                node = this.Expression(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                return node;\n            };\n\n\n            /*\n             * An assignment operator expression.\n             */\n\n            exports.AssignmentExpression = AssignmentExpression = (function (_super) {\n                __extends(AssignmentExpression, _super);\n\n\n                /*\n                 * @operator: \"=\" | \"+=\" | \"-=\" | \"*=\" | \"/=\" | \"%=\"\n                 *     | \"<<=\" | \">>=\" | \">>>=\" | \"|=\" | \"^=\" | \"&=\";\n                 * @left: Expression\n                 * @right: Expression\n                 */\n\n                function AssignmentExpression(operator, left, right) {\n                    this.operator = operator;\n                    this.left = left;\n                    this.right = right;\n                    AssignmentExpression.__super__.constructor.call(this);\n                }\n\n                return AssignmentExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.AssignmentExpression = function (node) {\n                node = this.Expression(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                return node;\n            };\n\n\n            /*\n             * An update (increment or decrement) operator expression.\n             */\n\n            exports.UpdateExpression = UpdateExpression = (function (_super) {\n                __extends(UpdateExpression, _super);\n\n\n                /*\n                 * @operator: \"++\" | \"--\"\n                 * @argument: Expression\n                 * @prefix: boolean\n                 */\n\n                function UpdateExpression(operator, argument, prefix) {\n                    this.operator = operator;\n                    this.argument = argument;\n                    this.prefix = prefix;\n                    UpdateExpression.__super__.constructor.call(this);\n                }\n\n                return UpdateExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.UpdateExpression = function (node) {\n                node = this.Expression(node);\n                node.argument = this.visit(node.argument);\n                return node;\n            };\n\n\n            /*\n             * A logical operator expression.\n             */\n\n            exports.LogicalExpression = LogicalExpression = (function (_super) {\n                __extends(LogicalExpression, _super);\n\n\n                /*\n                 * @operator: \"||\" | \"&&\"\n                 * @left: Expression\n                 * @right: Expression\n                 */\n\n                function LogicalExpression(operator, left, right) {\n                    this.operator = operator;\n                    this.left = left;\n                    this.right = right;\n                    LogicalExpression.__super__.constructor.call(this);\n                }\n\n                return LogicalExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.LogicalExpression = function (node) {\n                node = this.Expression(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                return node;\n            };\n\n\n            /*\n             * A conditional expression, i.e., a ternary ?/: expression.\n             */\n\n            exports.ConditionalExpression = ConditionalExpression = (function (_super) {\n                __extends(ConditionalExpression, _super);\n\n\n                /*\n                 * @test: Expression\n                 * @alternate: Expression\n                 * @consequent: Expression\n                 */\n\n                function ConditionalExpression(test, alternate, consequent) {\n                    this.test = test;\n                    this.alternate = alternate;\n                    this.consequent = consequent;\n                    ConditionalExpression.__super__.constructor.call(this);\n                }\n\n                return ConditionalExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.ConditionalExpression = function (node) {\n                node = this.Expression(node);\n                node.test = this.visit(node.test);\n                node.alternate = this.visit(node.alternate);\n                node.consequent = this.visit(node.consequent);\n                return node;\n            };\n\n\n            /*\n             * A new expression.\n             */\n\n            exports.NewExpression = NewExpression = (function (_super) {\n                __extends(NewExpression, _super);\n\n\n                /*\n                 * @callee: Expression\n                 * @arguments: [ Expression ] | null\n                 */\n\n                function NewExpression(callee, _arguments) {\n                    this.callee = callee;\n                    this[\"arguments\"] = _arguments;\n                    NewExpression.__super__.constructor.call(this);\n                }\n\n                return NewExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.NewExpression = function (node) {\n                node = this.Expression(node);\n                node.callee = this.visit(node.callee);\n                node[\"arguments\"] = this.visit(node[\"arguments\"]);\n                return node;\n            };\n\n\n            /*\n             * A function or method call expression.\n             */\n\n            exports.CallExpression = CallExpression = (function (_super) {\n                __extends(CallExpression, _super);\n\n\n                /*\n                 * @callee: Expression\n                 * @arguments: [ Expression ]\n                 */\n\n                function CallExpression(callee, _arguments) {\n                    this.callee = callee;\n                    this[\"arguments\"] = _arguments;\n                    CallExpression.__super__.constructor.call(this);\n                }\n\n                return CallExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.CallExpression = function (node) {\n                node = this.Expression(node);\n                node.callee = this.visit(node.callee);\n                node[\"arguments\"] = this.visit(node[\"arguments\"]);\n                return node;\n            };\n\n\n            /*\n             * A member expression. If computed === true, the node corresponds to a computed\n             * e1[e2] expression and property is an Expression. If computed === false, the\n             * node corresponds to a static e1.x expression and property is an Identifier.\n             */\n\n            exports.MemberExpression = MemberExpression = (function (_super) {\n                __extends(MemberExpression, _super);\n\n\n                /*\n                 * @object: Expression\n                 * @property: Identifier | Expression\n                 * @computed : boolean\n                 */\n\n                function MemberExpression(object, property, computed) {\n                    this.object = object;\n                    this.property = property;\n                    this.computed = computed;\n                    MemberExpression.__super__.constructor.call(this);\n                }\n\n                return MemberExpression;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.MemberExpression = function (node) {\n                node = this.Expression(node);\n                node.object = this.visit(node.object);\n                node.property = this.visit(node.property);\n                return node;\n            };\n\n\n            /*\n             * JavaScript 1.7 introduced destructuring assignment and binding forms.  All\n             * binding forms (such as function parameters, variable declarations, and catch\n             * block headers), accept array and object destructuring patterns in addition to\n             * plain identifiers. The left-hand sides of assignment expressions can be\n             * arbitrary expressions, but in the case where the expression is an object or\n             * array literal, it is interpreted by SpiderMonkey as a destructuring pattern.\n             *\n             * Since the left-hand side of an assignment can in general be any expression, in\n             * an assignment context, a pattern can be any expression. In binding positions\n             * (such as function parameters, variable declarations, and catch headers),\n             * patterns can only be identifiers in the base case, not arbitrary expressions.\n             */\n\n            exports.Pattern = Pattern = (function (_super) {\n                __extends(Pattern, _super);\n\n                function Pattern() {\n                    Pattern.__super__.constructor.call(this);\n                }\n\n                return Pattern;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Pattern = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * An object-destructuring pattern. A literal property in an object pattern can\n             * have either a string or number as its value.\n             */\n\n            exports.ObjectPattern = ObjectPattern = (function (_super) {\n                __extends(ObjectPattern, _super);\n\n\n                /*\n                 * @properties: [ { key: Literal | Identifier, value: Pattern } ]\n                 */\n\n                function ObjectPattern(properties) {\n                    this.properties = properties;\n                    ObjectPattern.__super__.constructor.call(this);\n                }\n\n                return ObjectPattern;\n\n            })(Pattern);\n\n            JavaScriptVisitor.prototype.ObjectPattern = function (node) {\n                var setter, _i, _len, _ref1;\n                node = this.Pattern(node);\n                _ref1 = node.properties;\n                for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n                    setter = _ref1[_i];\n                    setter.key = this.visit(setter.key);\n                    setter.value = this.visit(setter.value);\n                }\n                return node;\n            };\n\n\n            /*\n             * An array-destructuring pattern.\n             */\n\n            exports.ArrayPattern = ArrayPattern = (function (_super) {\n                __extends(ArrayPattern, _super);\n\n\n                /*\n                 * @elements: [ Pattern | null ]\n                 */\n\n                function ArrayPattern(elements) {\n                    this.elements = elements;\n                    ArrayPattern.__super__.constructor.call(this);\n                }\n\n                return ArrayPattern;\n\n            })(Pattern);\n\n            JavaScriptVisitor.prototype.ArrayPattern = function (node) {\n                node = this.Pattern(node);\n                node.elements = this.visit(node.elements);\n                return node;\n            };\n\n\n            /*\n             * A case (if test is an Expression) or default (if test === null) clause in the\n             * body of a switch statement.\n             */\n\n            exports.SwitchCase = SwitchCase = (function (_super) {\n                __extends(SwitchCase, _super);\n\n\n                /*\n                 * @test: Expression | null\n                 * @consequent: [ Statement ]\n                 */\n\n                function SwitchCase(test, consequent) {\n                    this.test = test;\n                    this.consequent = consequent;\n                    SwitchCase.__super__.constructor.call(this);\n                }\n\n                return SwitchCase;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.SwitchCase = function (node) {\n                node = this.JavaScriptNode(node);\n                node.test = this.visit(node.test);\n                node.consequent = this.visit(node.consequent);\n                return node;\n            };\n\n\n            /*\n             * A catch clause following a try block. The optional guard property corresponds\n             * to the optional expression guard on the bound variable.\n             */\n\n            exports.CatchClause = CatchClause = (function (_super) {\n                __extends(CatchClause, _super);\n\n\n                /*\n                 * @param: Pattern\n                 * @body: BlockStatement\n                 */\n\n                function CatchClause(param, body) {\n                    this.param = param;\n                    this.body = body;\n                    CatchClause.__super__.constructor.call(this);\n                }\n\n                return CatchClause;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.CatchClause = function (node) {\n                node = this.JavaScriptNode(node);\n                node.param = this.visit(node.param);\n                node.body = this.visit(node.body);\n                return node;\n            };\n\n\n            /*\n             * An identifier. Note that an identifier may be an expression or a destructuring\n             * pattern.\n             */\n\n            exports.Identifier = Identifier = (function (_super) {\n                __extends(Identifier, _super);\n\n\n                /*\n                 * @name: string\n                 */\n\n                function Identifier(name) {\n                    this.name = name;\n                    Identifier.__super__.constructor.call(this);\n                }\n\n                return Identifier;\n\n            })(JavaScriptNode);\n\n            JavaScriptVisitor.prototype.Identifier = function (node) {\n                node = this.JavaScriptNode(node);\n                return node;\n            };\n\n\n            /*\n             * A literal token. Note that a literal can be an expression.\n             */\n\n            exports.Literal = Literal = (function (_super) {\n                __extends(Literal, _super);\n\n\n                /*\n                 * @value: string | boolean | null | number | RegExp\n                 */\n\n                function Literal(value) {\n                    this.value = value;\n                    Literal.__super__.constructor.call(this);\n                }\n\n                return Literal;\n\n            })(Expression);\n\n            JavaScriptVisitor.prototype.Literal = function (node) {\n                node = this.Expression(node);\n                return node;\n            };\n\n        }).call(this);\n    };\n\n    $__modules__.JavaScriptToQueryVisitor = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var JS, JavaScriptToQueryVisitor, Q, _,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ = require('./Utilities');\n\n            JS = require('./JavaScriptNodes');\n\n            Q = require('./QueryNodes');\n\n\n            /*\n             * Walk the JavaScriptExpression tree and convert its nodes into QueryExpression\n             * trees\n             */\n\n            exports.JavaScriptToQueryVisitor = JavaScriptToQueryVisitor = (function (_super) {\n                __extends(JavaScriptToQueryVisitor, _super);\n\n                function JavaScriptToQueryVisitor(context) {\n                    this.context = context;\n                }\n\n\n                /* Get the source code for a given node */\n\n                JavaScriptToQueryVisitor.prototype.getSource = function (node) {\n                    var _ref, _ref1;\n                    return this.context.source.slice(node != null ? (_ref = node.range) != null ? _ref[0] : void 0 : void 0, +((node != null ? (_ref1 = node.range) != null ? _ref1[1] : void 0 : void 0) - 1) + 1 || 9e9);\n                };\n\n\n                /* Throw an exception for an invalid node. */\n\n                JavaScriptToQueryVisitor.prototype.invalid = function (node) {\n                    throw \"The expression '\" + (this.getSource(node)) + \"'' is not supported.\";\n                };\n\n\n                /* Unary expressions just map operators */\n\n                JavaScriptToQueryVisitor.prototype.translateUnary = function (node, mapping) {\n                    var op, value;\n                    op = mapping[node.operator];\n                    if (op) {\n                        value = this.visit(node.argument);\n                        return new Q.UnaryExpression(op, value);\n                    } else {\n                        return null;\n                    }\n                };\n\n\n                /* Binary expressions just map operators */\n\n                JavaScriptToQueryVisitor.prototype.translateBinary = function (node, mapping) {\n                    var left, op, right;\n                    op = mapping[node.operator];\n                    if (op) {\n                        left = this.visit(node.left);\n                        right = this.visit(node.right);\n                        return new Q.BinaryExpression(op, left, right);\n                    } else {\n                        return null;\n                    }\n                };\n\n\n                /*\n                 * The base visit method will throw exceptions for any nodes that remain\n                 * untransformed (which allows us to only bother defining meaningful\n                 * translations)\n                 */\n\n                JavaScriptToQueryVisitor.prototype.visit = function (node) {\n                    var visited;\n                    visited = JavaScriptToQueryVisitor.__super__.visit.call(this, node);\n                    if (node === visited) {\n                        this.invalid(node);\n                    }\n                    return visited;\n                };\n\n                JavaScriptToQueryVisitor.prototype.MemberExpression = function (node) {\n                    var expr;\n                    expr = (function () {\n                        var _ref, _ref1, _ref2, _ref3;\n                        if ((node != null ? (_ref = node.object) != null ? _ref.type : void 0 : void 0) === 'ThisExpression' && (node != null ? (_ref1 = node.property) != null ? _ref1.type : void 0 : void 0) === 'Identifier') {\n\n                            /* Simple member access */\n                            return new Q.MemberExpression(node.property.name);\n                        } else if ((node != null ? (_ref2 = node.object) != null ? _ref2.type : void 0 : void 0) === 'MemberExpression' && ((_ref3 = node.object.object) != null ? _ref3.type : void 0) === 'ThisExpression' && node.property.type === 'Identifier') {\n\n                            /* Methods that look like properties */\n                            if (node.property.name === 'length') {\n                                return new Q.InvocationExpression(Q.Methods.Length, new Q.MemberExpression(node.object.property.name));\n                            }\n                        }\n                    })();\n                    return expr != null ? expr : JavaScriptToQueryVisitor.__super__.MemberExpression.call(this, node);\n                };\n\n                JavaScriptToQueryVisitor.prototype.Literal = function (node) {\n                    return new Q.ConstantExpression(node.value);\n                };\n\n                JavaScriptToQueryVisitor.prototype.UnaryExpression = function (node) {\n                    var mapping, _ref;\n                    if (node.operator === '+') {\n\n                        /* Ignore the + in '+52' */\n                        return this.visit(node.argument);\n                    } else {\n                        mapping = {\n                            '!': Q.UnaryOperators.Not,\n                            '-': Q.UnaryOperators.Negate\n                        };\n                        return (_ref = this.translateUnary(node, mapping)) != null ? _ref : JavaScriptToQueryVisitor.__super__.UnaryExpression.call(this, node);\n                    }\n                };\n\n                JavaScriptToQueryVisitor.prototype.UpdateExpression = function (node) {\n                    var mapping, _ref;\n                    mapping = {\n                        '++': Q.UnaryOperators.Increment,\n                        '--': Q.UnaryOperators.Decrement\n                    };\n                    return (_ref = this.translateUnary(node, mapping)) != null ? _ref : JavaScriptToQueryVisitor.__super__.UpdateExpression.call(this, node);\n                };\n\n                JavaScriptToQueryVisitor.prototype.LogicalExpression = function (node) {\n                    var mapping, _ref;\n                    mapping = {\n                        '&&': Q.BinaryOperators.And,\n                        '||': Q.BinaryOperators.Or\n                    };\n                    return (_ref = this.translateBinary(node, mapping)) != null ? _ref : JavaScriptToQueryVisitor.__super__.LogicalExpression.call(this, node);\n                };\n\n                JavaScriptToQueryVisitor.prototype.BinaryExpression = function (node) {\n                    var k, left, mapping, properties, v, value, _ref;\n                    mapping = {\n                        '+': Q.BinaryOperators.Add,\n                        '-': Q.BinaryOperators.Subtract,\n                        '*': Q.BinaryOperators.Multiply,\n                        '/': Q.BinaryOperators.Divide,\n                        '%': Q.BinaryOperators.Modulo,\n                        '>': Q.BinaryOperators.GreaterThan,\n                        '>=': Q.BinaryOperators.GreaterThanOrEqual,\n                        '<': Q.BinaryOperators.LessThan,\n                        '<=': Q.BinaryOperators.LessThanOrEqual,\n                        '!=': Q.BinaryOperators.NotEqual,\n                        '!==': Q.BinaryOperators.NotEqual,\n                        '==': Q.BinaryOperators.Equal,\n                        '===': Q.BinaryOperators.Equal\n                    };\n                    return (function () {\n                        var _ref1, _ref2;\n                        if ((_ref = this.translateBinary(node, mapping)) != null) {\n                            return _ref;\n                        } else if (node.operator === 'in' && ((_ref1 = node.right) != null ? _ref1.type : void 0) === 'Literal' && _.isArray((_ref2 = node.right) != null ? _ref2.value : void 0)) {\n\n                            /*\n                             * Transform the 'varName in [x, y, z]' operator into a series of\n                             * comparisons like varName == x || varName == y || varName == z.\n                             */\n                            if (node.right.value.length > 0) {\n                                left = this.visit(node.left);\n                                return Q.QueryExpression.groupClauses(Q.BinaryOperators.Or, (function () {\n                                    var _i, _len, _ref3, _results;\n                                    _ref3 = node.right.value;\n                                    _results = [];\n                                    for (_i = 0, _len = _ref3.length; _i < _len; _i++) {\n                                        value = _ref3[_i];\n\n                                        /*\n                                         * If we've got an array of objects who each have\n                                         * a single property, we'll use the value of that\n                                         * property.  Otherwise we'll throw an exception.\n                                         */\n                                        if (_.isObject(value)) {\n                                            properties = (function () {\n                                                var _results1;\n                                                _results1 = [];\n                                                for (k in value) {\n                                                    v = value[k];\n                                                    _results1.push(v);\n                                                }\n                                                return _results1;\n                                            })();\n                                            if ((properties != null ? properties.length : void 0) !== 1) {\n                                                throw \"in operator requires comparison objects with a single field, not \" + value + \" (\" + (JSON.stringify(value)) + \"), for expression '\" + (this.getSource(node)) + \"'\";\n                                            }\n                                            value = properties[0];\n                                        }\n                                        _results.push(new Q.BinaryExpression(Q.BinaryOperators.Equal, left, new Q.ConstantExpression(value)));\n                                    }\n                                    return _results;\n                                }).call(this));\n                            } else {\n\n                                /*\n                                 * If the array of values is empty, change the query to\n                                 * true == false since it can't be satisfied.\n                                 */\n                                return new Q.BinaryExpression(Q.BinaryOperators.Equal, new Q.ConstantExpression(true), new Q.ConstantExpression(false));\n                            }\n                        } else {\n                            return JavaScriptToQueryVisitor.__super__.BinaryExpression.call(this, node);\n                        }\n                    }).call(this);\n                };\n\n                JavaScriptToQueryVisitor.prototype.CallExpression = function (node) {\n                    var expr, func, getSingleArg, getTwoArgs, member, method, _ref;\n                    getSingleArg = (function (_this) {\n                        return function (name) {\n                            var _ref;\n                            if (((_ref = node[\"arguments\"]) != null ? _ref.length : void 0) !== 1) {\n                                throw \"Function \" + name + \" expects one argument in expression '\" + (_this.getSource(node)) + \"'\";\n                            }\n                            return _this.visit(node[\"arguments\"][0]);\n                        };\n                    })(this);\n                    getTwoArgs = (function (_this) {\n                        return function (member, name) {\n                            var _ref;\n                            if (((_ref = node[\"arguments\"]) != null ? _ref.length : void 0) !== 2) {\n                                throw \"Function \" + name + \" expects two arguments in expression '\" + (_this.getSource(node)) + \"'\";\n                            }\n                            return [member, _this.visit(node[\"arguments\"][0]), _this.visit(node[\"arguments\"][1])];\n                        };\n                    })(this);\n\n                    /*\n                     * Translate known method calls that aren't attached to an instance.\n                     * Note that we can compare against the actual method because the\n                     * partial evaluator will have converted it into a literal for us.\n                     */\n                    func = node != null ? (_ref = node.callee) != null ? _ref.value : void 0 : void 0;\n                    expr = (function () {\n                        var _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;\n                        if (func === Math.floor) {\n                            return new Q.InvocationExpression(Q.Methods.Floor, [getSingleArg('floor')]);\n                        } else if (func === Math.ceil) {\n                            return new Q.InvocationExpression(Q.Methods.Ceiling, [getSingleArg('ceil')]);\n                        } else if (func === Math.round) {\n                            return new Q.InvocationExpression(Q.Methods.Round, [getSingleArg('round')]);\n                        } else {\n\n                            /*\n                             * Translate methods dangling off an instance\n                             */\n                            if (node.callee.type === 'MemberExpression' && ((_ref1 = node.callee.object) != null ? _ref1.__hasThisExp : void 0) === true) {\n                                if ((node != null ? (_ref2 = node.callee) != null ? (_ref3 = _ref2.object) != null ? _ref3.type : void 0 : void 0 : void 0) === 'CallExpression') {\n                                    member = this.visit(node.callee.object);\n                                } else {\n                                    member = new Q.MemberExpression((_ref4 = node.callee.object) != null ? (_ref5 = _ref4.property) != null ? _ref5.name : void 0 : void 0);\n                                }\n                                method = (_ref6 = node.callee) != null ? (_ref7 = _ref6.property) != null ? _ref7.name : void 0 : void 0;\n                                if (method === 'toUpperCase') {\n                                    return new Q.InvocationExpression(Q.Methods.ToUpperCase, [member]);\n                                } else if (method === 'toLowerCase') {\n                                    return new Q.InvocationExpression(Q.Methods.ToLowerCase, [member]);\n                                } else if (method === 'trim') {\n                                    return new Q.InvocationExpression(Q.Methods.Trim, [member]);\n                                } else if (method === 'indexOf') {\n                                    return new Q.InvocationExpression(Q.Methods.IndexOf, [member, getSingleArg('indexOf')]);\n                                } else if (method === 'concat') {\n                                    return new Q.InvocationExpression(Q.Methods.Concat, [member, getSingleArg('concat')]);\n                                } else if (method === 'substring' || method === 'substr') {\n                                    return new Q.InvocationExpression(Q.Methods.Substring, getTwoArgs(member, 'substring'));\n                                } else if (method === 'replace') {\n                                    return new Q.InvocationExpression(Q.Methods.Replace, getTwoArgs(member, 'replace'));\n                                } else if (method === 'getFullYear' || method === 'getUTCFullYear') {\n                                    return new Q.InvocationExpression(Q.Methods.Year, [member]);\n                                } else if (method === 'getYear') {\n                                    return new Q.BinaryExpression(Q.BinaryOperators.Subtract, new Q.InvocationExpression(Q.Methods.Year, [member]), new Q.ConstantExpression(1900));\n                                } else if (method === 'getMonth' || method === 'getUTCMonth') {\n\n                                    /* getMonth is 0 indexed in JavaScript */\n                                    return new Q.BinaryExpression(Q.BinaryOperators.Subtract, new Q.InvocationExpression(Q.Methods.Month, [member]), new Q.ConstantExpression(1));\n                                } else if (method === 'getDate' || method === 'getUTCDate') {\n                                    return new Q.InvocationExpression(Q.Methods.Day, [member]);\n                                }\n                            }\n                        }\n                    }).call(this);\n                    return expr != null ? expr : JavaScriptToQueryVisitor.__super__.CallExpression.call(this, node);\n                };\n\n                return JavaScriptToQueryVisitor;\n\n            })(JS.JavaScriptVisitor);\n\n        }).call(this);\n    };\n\n    $__modules__.Node = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var Node, Visitor, _;\n\n            _ = require('./Utilities');\n\n\n            /*\n             * The base Node class for all expressions used for analysis and translation by\n             * visitors.  It's designed to interop with other modules that create expression\n             * trees using object literals with a type tag.\n             */\n\n            exports.Node = Node = (function () {\n\n                /*\n                 * Type tag of the node that allows for eash dispatch in visitors.  This is\n                 * automatically set in the constructor (so it's important to call super() in\n                 * derived Node classes).\n                 */\n                Node.prototype.type = 'Node';\n\n\n                /*\n                 * Initializes a new instance of the Node class and sets its type tag.\n                 */\n\n                function Node() {\n                    this.type = _.functionName(this.constructor);\n                }\n\n                return Node;\n\n            })();\n\n\n            /*\n             * Base class for all visitors\n             */\n\n            exports.Visitor = Visitor = (function () {\n                function Visitor() { }\n\n\n                /*\n                 * Visit a node.\n                 */\n\n                Visitor.prototype.visit = function (node) {\n                    var element, _i, _len, _results;\n                    if (_.isArray(node)) {\n                        _results = [];\n                        for (_i = 0, _len = node.length; _i < _len; _i++) {\n                            element = node[_i];\n                            _results.push(this.visit(element));\n                        }\n                        return _results;\n                    } else if (!(node != null ? node.type : void 0)) {\n                        return node;\n                    } else if (!_.isFunction(this[node.type])) {\n                        throw \"Unsupported expression \" + (this.getSource(node));\n                    } else {\n                        return this[node.type](node);\n                    }\n                };\n\n\n                /*\n                 * Get the source code corresponding to a node.\n                 */\n\n                Visitor.prototype.getSource = function (node) {\n\n                    /* It is expected this will be overridden in derived visitors. */\n                    return null;\n                };\n\n                return Visitor;\n\n            })();\n\n        }).call(this);\n    };\n\n    $__modules__.ODataProvider = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var ODataFilterQueryVisitor, ODataProvider, Q, Query, _,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ = require('./Utilities');\n\n            Q = require('./QueryNodes');\n\n            Query = require('./Query').Query;\n\n            exports.ODataProvider = ODataProvider = (function () {\n                function ODataProvider() { }\n\n\n                /*\n                 * Convert a query into an OData URI.\n                 */\n\n                ODataProvider.prototype.toQuery = function (query) {\n                    var odata, s, url;\n                    odata = this.toOData(query, true);\n                    url = \"/\" + odata.table;\n                    s = '?';\n                    if (odata.filters) {\n                        url += \"\" + s + \"$filter=\" + odata.filters;\n                        s = '&';\n                    }\n                    if (odata.ordering) {\n                        url += \"\" + s + \"$orderby=\" + odata.ordering;\n                        s = '&';\n                    }\n                    if (odata.skip) {\n                        url += \"\" + s + \"$skip=\" + odata.skip;\n                        s = '&';\n                    }\n                    if (odata.take || odata.take === 0) {\n                        url += \"\" + s + \"$top=\" + odata.take;\n                        s = '&';\n                    }\n                    if (odata.selections) {\n                        url += \"\" + s + \"$select=\" + odata.selections;\n                        s = '&';\n                    }\n                    if (odata.includeTotalCount) {\n                        url += \"\" + s + \"$inlinecount=allpages\";\n                    }\n                    return url;\n                };\n\n\n                /*\n                 * Translate the query components into OData strings\n                 */\n\n                ODataProvider.prototype.toOData = function (query, encodeForUri) {\n                    var asc, components, name, odata, ordering, _ref, _ref1;\n                    if (encodeForUri == null) {\n                        encodeForUri = false;\n                    }\n                    components = (_ref = query != null ? query.getComponents() : void 0) != null ? _ref : {};\n                    ordering = (function () {\n                        var _ref1, _results;\n                        _ref1 = components != null ? components.ordering : void 0;\n                        _results = [];\n                        for (name in _ref1) {\n                            asc = _ref1[name];\n                            _results.push(asc ? name : \"\" + name + \" desc\");\n                        }\n                        return _results;\n                    })();\n                    return odata = {\n                        table: components != null ? components.table : void 0,\n                        filters: ODataFilterQueryVisitor.convert(components.filters, encodeForUri),\n                        ordering: ordering != null ? ordering.toString() : void 0,\n                        skip: components != null ? components.skip : void 0,\n                        take: components != null ? components.take : void 0,\n                        selections: components != null ? (_ref1 = components.selections) != null ? _ref1.toString() : void 0 : void 0,\n                        includeTotalCount: components != null ? components.includeTotalCount : void 0\n                    };\n                };\n\n\n                /*\n                 * Convert OData components into a query object\n                 */\n\n                ODataProvider.prototype.fromOData = function (table, filters, ordering, skip, take, selections, includeTotalCount) {\n                    var direction, field, item, query, _i, _j, _len, _len1, _ref, _ref1, _ref2, _ref3;\n                    query = new Query(table);\n                    if (filters) {\n                        query.where(filters);\n                    }\n                    if (skip || skip === 0) {\n                        query.skip(skip);\n                    }\n                    if (take || take === 0) {\n                        query.take(take);\n                    }\n                    if (includeTotalCount) {\n                        query.includeTotalCount();\n                    }\n                    _ref1 = (_ref = selections != null ? selections.split(',') : void 0) != null ? _ref : [];\n                    for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n                        field = _ref1[_i];\n                        query.select(field.trim());\n                    }\n                    _ref2 = (function () {\n                        var _k, _len1, _ref2, _ref3, _results;\n                        _ref3 = (_ref2 = ordering != null ? ordering.split(',') : void 0) != null ? _ref2 : [];\n                        _results = [];\n                        for (_k = 0, _len1 = _ref3.length; _k < _len1; _k++) {\n                            item = _ref3[_k];\n                            _results.push(item.trim().split(' '));\n                        }\n                        return _results;\n                    })();\n                    for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n                        _ref3 = _ref2[_j], field = _ref3[0], direction = _ref3[1];\n                        if ((direction != null ? direction.toUpperCase() : void 0) !== 'DESC') {\n                            query.orderBy(field);\n                        } else {\n                            query.orderByDescending(field);\n                        }\n                    }\n                    return query;\n                };\n\n                return ODataProvider;\n\n            })();\n\n\n            /*\n             * Visitor that converts query expression trees into OData filter statements.\n             */\n\n            ODataFilterQueryVisitor = (function (_super) {\n                __extends(ODataFilterQueryVisitor, _super);\n\n                function ODataFilterQueryVisitor(encodeForUri) {\n                    this.encodeForUri = encodeForUri;\n                }\n\n                ODataFilterQueryVisitor.convert = function (filters, encodeForUri) {\n                    var visitor, _ref;\n                    visitor = new ODataFilterQueryVisitor(encodeForUri);\n                    return (_ref = (filters ? visitor.visit(filters) : void 0)) != null ? _ref : null;\n                };\n\n                ODataFilterQueryVisitor.prototype.toOData = function (value) {\n                    var text;\n                    if ((_.isNumber(value)) || (_.isBoolean(value))) {\n                        return value.toString();\n                    } else if (_.isString(value)) {\n                        value = value.replace(/'/g, \"''\");\n                        if ((this.encodeForUri != null) && this.encodeForUri === true) {\n                            value = encodeURIComponent(value);\n                        }\n                        return \"'\" + value + \"'\";\n                    } else if (_.isDate(value)) {\n\n                        /*\n                         * Dates are expected in the format\n                         *   \"datetime'yyyy-mm-ddThh:mm[:ss[.fffffff]]'\"\n                         * which JSON.stringify gives us by default\n                         */\n                        text = JSON.stringify(value);\n                        if (text.length > 2) {\n                            text = text.slice(1, +(text.length - 2) + 1 || 9e9);\n                        }\n                        text = text.replace(/(T\\d{2}:\\d{2}:\\d{2})Z$/, function (all, time) {\n                            var msec;\n                            msec = String(value.getMilliseconds() + 1000).substring(1);\n                            return \"\" + time + \".\" + msec + \"Z\";\n                        });\n                        return \"datetime'\" + text + \"'\";\n                    } else if (!value) {\n                        return \"null\";\n                    } else {\n                        throw \"Unsupported literal value \" + value;\n                    }\n                };\n\n                ODataFilterQueryVisitor.prototype.ConstantExpression = function (node) {\n                    return this.toOData(node.value);\n                };\n\n                ODataFilterQueryVisitor.prototype.MemberExpression = function (node) {\n                    return node.member;\n                };\n\n                ODataFilterQueryVisitor.prototype.UnaryExpression = function (node) {\n                    if (node.operator === Q.UnaryOperators.Not) {\n                        return \"not \" + (this.visit(node.operand));\n                    } else if (node.operator === Q.UnaryOperators.Negate) {\n                        return \"(0 sub \" + (this.visit(node.operand)) + \")\";\n                    } else {\n                        throw \"Unsupported operator \" + node.operator;\n                    }\n                };\n\n                ODataFilterQueryVisitor.prototype.BinaryExpression = function (node) {\n                    var mapping, op;\n                    mapping = {\n                        And: 'and',\n                        Or: 'or',\n                        Add: 'add',\n                        Subtract: 'sub',\n                        Multiply: 'mul',\n                        Divide: 'div',\n                        Modulo: 'mod',\n                        GreaterThan: 'gt',\n                        GreaterThanOrEqual: 'ge',\n                        LessThan: 'lt',\n                        LessThanOrEqual: 'le',\n                        NotEqual: 'ne',\n                        Equal: 'eq'\n                    };\n                    op = mapping[node.operator];\n                    if (op) {\n                        return \"(\" + (this.visit(node.left)) + \" \" + op + \" \" + (this.visit(node.right)) + \")\";\n                    } else {\n                        throw \"Unsupported operator \" + node.operator;\n                    }\n                };\n\n                ODataFilterQueryVisitor.prototype.InvocationExpression = function (node) {\n                    var mapping, method;\n                    mapping = {\n                        Length: 'length',\n                        ToUpperCase: 'toupper',\n                        ToLowerCase: 'tolower',\n                        Trim: 'trim',\n                        IndexOf: 'indexof',\n                        Replace: 'replace',\n                        Substring: 'substring',\n                        Concat: 'concat',\n                        Day: 'day',\n                        Month: 'month',\n                        Year: 'year',\n                        Floor: 'floor',\n                        Ceiling: 'ceiling',\n                        Round: 'round'\n                    };\n                    method = mapping[node.method];\n                    if (method) {\n                        return \"\" + method + \"(\" + (this.visit(node.args)) + \")\";\n                    } else {\n                        throw \"Invocation of unsupported method \" + node.method;\n                    }\n                };\n\n                ODataFilterQueryVisitor.prototype.LiteralExpression = function (node) {\n                    var ch, inString, literal, _i, _len, _ref;\n                    literal = '';\n                    inString = false;\n                    _ref = node.queryString;\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        ch = _ref[_i];\n                        if (inString) {\n                            literal += ch;\n                            inString = ch !== \"'\";\n                        } else if (ch === '?') {\n                            if ((!node.args) || (node.args.length <= 0)) {\n                                throw \"Too few arguments for \" + node.queryString + \".\";\n                            }\n                            literal += this.toOData(node.args.shift());\n                        } else if (ch === \"'\") {\n                            literal += ch;\n                            inString = true;\n                        } else {\n                            literal += ch;\n                        }\n                    }\n                    if (node.args && node.args.length > 0) {\n                        throw \"Too many arguments for \" + node.queryString;\n                    }\n                    return literal;\n                };\n\n                return ODataFilterQueryVisitor;\n\n            })(Q.QueryExpressionVisitor);\n\n        }).call(this);\n    };\n\n    $__modules__.PartialEvaluator = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var IndependenceNominator, JS, PartialEvaluator, _,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ = require('./Utilities');\n\n            JS = require('./JavaScriptNodes');\n\n\n            /*\n             * Partially evaluate a complex expression in the context of its environment.\n             * This allows us to support arbitrary JavaScript expressions even though we\n             * only explicitly transform a subset of expressions into QueryExpressions.\n             *\n             * For example, assuming we have an expression like (x) -> @id == x + 1 with an\n             * environment where x == 12, then the entire right hand side of the comparison\n             * is independent of any values computed by the query and could be replaced with\n             * the literal value 13.\n             */\n\n            exports.PartialEvaluator = PartialEvaluator = (function (_super) {\n                __extends(PartialEvaluator, _super);\n\n                function PartialEvaluator(context) {\n                    this.context = context;\n                }\n\n                PartialEvaluator.prototype.visit = function (node) {\n                    var key, params, source, thunk, value, values, _ref, _ref1, _ref2, _ref3;\n                    if (!node.__independent || node.type === 'Literal' || (!node.type)) {\n\n                        /*\n                         * If the node isn't independent or it's already a literal, then\n                         * just keep walking the tree\n                         */\n                        return PartialEvaluator.__super__.visit.call(this, node);\n                    } else {\n\n                        /*\n                         * Otherwse we'll evaluate the node in the context of the\n                         * environment by either looking up identifiers directly or\n                         * evaluating whole sub expressions\n                         */\n                        if (node.type === 'Identifier' && this.context.environment[node.name]) {\n                            return new JS.Literal(this.context.environment[node.name]);\n                        } else {\n\n                            /*\n                             * Evaluate the source of the sub expression in the context\n                             * of the environment\n                             */\n                            source = this.context.source.slice(node != null ? (_ref = node.range) != null ? _ref[0] : void 0 : void 0, +((node != null ? (_ref1 = node.range) != null ? _ref1[1] : void 0 : void 0) - 1) + 1 || 9e9);\n                            params = (_ref2 = (function () {\n                                var _ref3, _results;\n                                _ref3 = this.context.environment;\n                                _results = [];\n                                for (key in _ref3) {\n                                    value = _ref3[key];\n                                    _results.push(key);\n                                }\n                                return _results;\n                            }).call(this)) != null ? _ref2 : [];\n                            values = (_ref3 = (function () {\n                                var _ref4, _results;\n                                _ref4 = this.context.environment;\n                                _results = [];\n                                for (key in _ref4) {\n                                    value = _ref4[key];\n                                    _results.push(JSON.stringify(value));\n                                }\n                                return _results;\n                            }).call(this)) != null ? _ref3 : [];\n                            thunk = \"(function(\" + params + \") { return \" + source + \"; })(\" + values + \")\";\n                            value = eval(thunk);\n                            return new JS.Literal(value);\n                        }\n                    }\n                };\n\n                PartialEvaluator.evaluate = function (context) {\n                    var evaluator, nominator;\n                    nominator = new IndependenceNominator(context);\n                    nominator.visit(context.expression);\n                    evaluator = new PartialEvaluator(context);\n                    return evaluator.visit(context.expression);\n                };\n\n                return PartialEvaluator;\n\n            })(JS.JavaScriptVisitor);\n\n\n            /*\n             * Nominate independent nodes in an expression tree that don't depend on any\n             * server side values.\n             */\n\n            exports.IndependenceNominator = IndependenceNominator = (function (_super) {\n                __extends(IndependenceNominator, _super);\n\n                function IndependenceNominator(context) {\n                    this.context = context;\n                }\n\n                IndependenceNominator.prototype.Literal = function (node) {\n                    IndependenceNominator.__super__.Literal.call(this, node);\n                    node.__independent = true;\n                    node.__hasThisExp = false;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.ThisExpression = function (node) {\n                    IndependenceNominator.__super__.ThisExpression.call(this, node);\n                    node.__independent = false;\n                    node.__hasThisExp = true;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.Identifier = function (node) {\n                    IndependenceNominator.__super__.Identifier.call(this, node);\n                    node.__independent = true;\n                    node.__hasThisExp = false;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.MemberExpression = function (node) {\n                    var _ref;\n                    IndependenceNominator.__super__.MemberExpression.call(this, node);\n\n                    /*\n                     * Undo independence of identifiers when they're members of this.* or\n                     * this.member.* (the latter allows for member functions)\n                     */\n                    node.__hasThisExp = (_ref = node.object) != null ? _ref.__hasThisExp : void 0;\n                    if (node.__hasThisExp) {\n                        node.__independent = false;\n                        if (node != null) {\n                            node.property.__independent = false;\n                        }\n                    }\n                    return node;\n                };\n\n                IndependenceNominator.prototype.CallExpression = function (node) {\n                    IndependenceNominator.__super__.CallExpression.call(this, node);\n                    node.__hasThisExp = node.callee.__hasThisExp;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.ObjectExpression = function (node) {\n                    var independence, setter, _i, _j, _len, _len1, _ref, _ref1;\n                    IndependenceNominator.__super__.ObjectExpression.call(this, node);\n\n                    /*\n                     * Prevent literal key identifiers from being evaluated out of\n                     * context\n                     */\n                    _ref = node.properties;\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        setter = _ref[_i];\n                        setter.key.__independent = false;\n                    }\n\n                    /*\n                     * An object literal is independent if all of its values are\n                     * independent\n                     */\n                    independence = true;\n                    _ref1 = node.properties;\n                    for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n                        setter = _ref1[_j];\n                        independence &= setter.value.__independent;\n                    }\n                    node.__independent = independence ? true : false;\n                    return node;\n                };\n\n                IndependenceNominator.prototype.visit = function (node) {\n\n                    /*\n                     * Call the base visit method which will both visit all of our\n                     * subexpressions and also call the couple of overrides above which\n                     * handle the base independence cases\n                     */\n                    var independence, isIndependent, name, v, value, _i, _len;\n                    IndependenceNominator.__super__.visit.call(this, node);\n\n                    /*\n                     * If the node's independence wasn't determined automatically by the\n                     * base cases above, then it's independence is determined by checking\n                     * all of its values and aggregating their independence\n                     */\n                    if (!(Object.prototype.hasOwnProperty.call(node, '__independent'))) {\n                        independence = true;\n                        isIndependent = function (node) {\n                            var _ref;\n                            if (_.isObject(node)) {\n                                return (_ref = value.__independent) != null ? _ref : false;\n                            } else {\n                                return true;\n                            }\n                        };\n                        for (name in node) {\n                            value = node[name];\n                            if (_.isArray(value)) {\n                                for (_i = 0, _len = value.length; _i < _len; _i++) {\n                                    v = value[_i];\n                                    independence &= isIndependent(v);\n                                }\n                            } else if (_.isObject(value)) {\n                                independence &= isIndependent(value);\n                            }\n                        }\n\n                        /* &= will turn true/false into 1/0 so we'll turn it back */\n                        node.__independent = independence ? true : false;\n                    }\n                    return node;\n                };\n\n                return IndependenceNominator;\n\n            })(JS.JavaScriptVisitor);\n\n        }).call(this);\n    };\n\n    $__modules__.Query = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n\n        /* Pull in references */\n\n        (function () {\n            var JavaScript, ODataProvider, Q, Query, _,\n              __slice = [].slice;\n\n            _ = require('./Utilities');\n\n            Q = require('./QueryNodes');\n\n            JavaScript = require('./JavaScript').JavaScript;\n\n\n            /*\n             * Define a query that can be translated into a desired query language and\n             * executed remotely.\n             */\n\n            exports.Query = Query = (function () {\n                function Query(table, context) {\n                    var _context, _filters, _includeTotalCount, _ordering, _projection, _selections, _skip, _table, _take, _version;\n                    if (!table || !(_.isString(table))) {\n                        throw 'Expected the name of a table!';\n                    }\n\n                    /* Store the table name and any extra context */\n                    _table = table;\n                    _context = context;\n\n                    /* Private Query component members */\n                    _filters = null;\n                    _projection = null;\n                    _selections = [];\n                    _ordering = {};\n                    _skip = null;\n                    _take = null;\n                    _includeTotalCount = false;\n\n                    /*\n                     * Keep a version flag that's updated on each mutation so we can\n                     * track whether changes have been made.  This is to enable caching\n                     * of compiled queries without reevaluating unless necessary.\n                     */\n                    _version = 0;\n\n                    /* Get the individual components of the query */\n                    this.getComponents = function () {\n                        return {\n                            filters: _filters,\n                            selections: _selections,\n                            projection: _projection,\n                            ordering: _ordering,\n                            skip: _skip,\n                            take: _take,\n                            table: _table,\n                            context: _context,\n                            includeTotalCount: _includeTotalCount,\n                            version: _version\n                        };\n                    };\n\n                    /*\n                     * Set the individual components of the query (this is primarily\n                     * meant to be used for rehydrating a query).\n                     */\n                    this.setComponents = function (components) {\n                        var _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;\n                        _version++;\n                        _filters = (_ref = components != null ? components.filters : void 0) != null ? _ref : null;\n                        _selections = (_ref1 = components != null ? components.selections : void 0) != null ? _ref1 : [];\n                        _projection = (_ref2 = components != null ? components.projection : void 0) != null ? _ref2 : null;\n                        _ordering = (_ref3 = components != null ? components.ordering : void 0) != null ? _ref3 : {};\n                        _skip = (_ref4 = components != null ? components.skip : void 0) != null ? _ref4 : null;\n                        _take = (_ref5 = components != null ? components.take : void 0) != null ? _ref5 : null;\n                        _includeTotalCount = (_ref6 = components != null ? components.includeTotalCount : void 0) != null ? _ref6 : false;\n                        _table = (_ref7 = components != null ? components.table : void 0) != null ? _ref7 : null;\n                        _context = (_ref8 = components != null ? components.context : void 0) != null ? _ref8 : null;\n                        return this;\n                    };\n\n                    /*\n                     * Add a constraint to a query.  Constraints can take the form of\n                     * a function with a single return statement, key/value pairs of\n                     * equality comparisons, or provider-specific literal strings (note\n                     * that not all providers support literals).\n                     */\n                    this.where = function () {\n                        var args, constraint, expr, name, value;\n                        constraint = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                        _version++;\n\n                        /*\n                         * Translate the constraint from its high level form into a\n                         * QueryExpression tree that can be manipulated by a query\n                         * provider\n                         */\n                        expr = (function () {\n                            if (_.isFunction(constraint)) {\n                                return JavaScript.transformConstraint(constraint, args);\n                            } else if (_.isObject(constraint)) {\n\n                                /*\n                                 * Turn an object of key value pairs into a series of\n                                 * equality expressions that are and'ed together to form\n                                 * a single expression\n                                 */\n                                return Q.QueryExpression.groupClauses(Q.BinaryOperators.And, (function () {\n                                    var _results;\n                                    _results = [];\n                                    for (name in constraint) {\n                                        value = constraint[name];\n                                        _results.push(expr = new Q.BinaryExpression(Q.BinaryOperators.Equal, new Q.MemberExpression(name), new Q.ConstantExpression(value)));\n                                    }\n                                    return _results;\n                                })());\n                            } else if (_.isString(constraint)) {\n\n                                /*\n                                 * Store the literal query along with any arguments for\n                                 * providers that support basic string replacement (i.e.,\n                                 * something like where('name eq ?', 'Steve'))\n                                 */\n                                return new Q.LiteralExpression(constraint, args);\n                            } else {\n                                throw \"Expected a function, object, or string, not \" + constraint;\n                            }\n                        })();\n\n                        /* Merge the new filters with any existing filters */\n                        _filters = Q.QueryExpression.groupClauses(Q.BinaryOperators.And, [_filters, expr]);\n                        return this;\n                    };\n\n                    /*\n                     * Project the query results.  A projection can either be defined as\n                     * a set of fields that we'll pull back (instead of the entire row)\n                     * or a function that will transform a row into a new type.  If a\n                     * function is used, we'll analyze the function to pull back the\n                     * minimal number of fields required.\n                     */\n                    this.select = function () {\n                        var param, parameters, projectionOrParameter, _i, _len;\n                        projectionOrParameter = arguments[0], parameters = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                        _version++;\n                        if (_.isString(projectionOrParameter)) {\n\n                            /* Add all the literal string parameters */\n                            _selections.push(projectionOrParameter);\n                            for (_i = 0, _len = parameters.length; _i < _len; _i++) {\n                                param = parameters[_i];\n                                if (!(_.isString(param))) {\n                                    throw \"Expected string parameters, not \" + param;\n                                }\n                                _selections.push(param);\n                            }\n                        } else if (_.isFunction(projectionOrParameter)) {\n\n                            /* Set the projection and calculate the fields it uses */\n                            _projection = projectionOrParameter;\n                            _selections = JavaScript.getProjectedFields(_projection);\n                        } else {\n                            throw \"Expected a string or a function, not \" + projectionOrParameter;\n                        }\n                        return this;\n                    };\n                    this.orderBy = function () {\n                        var param, parameters, _i, _len;\n                        parameters = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n                        _version++;\n                        for (_i = 0, _len = parameters.length; _i < _len; _i++) {\n                            param = parameters[_i];\n                            if (!(_.isString(param))) {\n                                throw \"Expected string parameters, not \" + param;\n                            }\n                            _ordering[param] = true;\n                        }\n                        return this;\n                    };\n                    this.orderByDescending = function () {\n                        var param, parameters, _i, _len;\n                        parameters = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n                        _version++;\n                        for (_i = 0, _len = parameters.length; _i < _len; _i++) {\n                            param = parameters[_i];\n                            if (!(_.isString(param))) {\n                                throw \"Expected string parameters, not \" + param;\n                            }\n                            _ordering[param] = false;\n                        }\n                        return this;\n                    };\n                    this.skip = function (count) {\n                        _version++;\n                        if (!(_.isNumber(count))) {\n                            throw \"Expected a number, not \" + count;\n                        }\n                        _skip = count;\n                        return this;\n                    };\n                    this.take = function (count) {\n                        _version++;\n                        if (!(_.isNumber(count))) {\n                            throw \"Expected a number, not \" + count;\n                        }\n                        _take = count;\n                        return this;\n                    };\n\n                    /*\n                     * Indicate that the query should include the total count for all the\n                     * records that would have been returned ignoring any take paging\n                     * limit clause specified by client or server.\n                     */\n                    this.includeTotalCount = function () {\n                        _version++;\n                        _includeTotalCount = true;\n                        return this;\n                    };\n                }\n\n\n                /*\n                 * Static method to register custom provider types.  A custom provider is\n                 * an object with a toQuery method that takes a Query instance and\n                 * returns a compiled query for that provider.\n                 */\n\n                Query.registerProvider = function (name, provider) {\n                    Query.Providers[name] = provider;\n                    return Query.prototype[\"to\" + name] = function () {\n                        return provider != null ? typeof provider.toQuery === \"function\" ? provider.toQuery(this) : void 0 : void 0;\n                    };\n                };\n\n\n                /*\n                 * Expose the registered providers via the Query.Providers namespace.\n                 */\n\n                Query.Providers = {};\n\n\n                /*\n                 * Expose the query expressions and visitors externally via a\n                 * Query.Expressions namespace.\n                 */\n\n                Query.Expressions = Q;\n\n                return Query;\n\n            })();\n\n\n            /* Register the built in OData provider */\n\n            ODataProvider = require('./ODataProvider').ODataProvider;\n\n            Query.registerProvider('OData', new ODataProvider);\n\n        }).call(this);\n    };\n\n    $__modules__.QueryNodes = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n\n        /*\n         * Define a low level intermediate query expression language that we can\n         * translate other expressions languages (like JavaScript) into.\n         */\n\n\n        /* Get the base Node class. */\n\n        (function () {\n            var BinaryExpression, ConstantExpression, InvocationExpression, LiteralExpression, MemberExpression, Node, QueryExpression, QueryExpressionVisitor, UnaryExpression, Visitor, _ref,\n              __hasProp = {}.hasOwnProperty,\n              __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n            _ref = require('./Node'), Node = _ref.Node, Visitor = _ref.Visitor;\n\n\n            /*\n             * Provides the base class from which the classes that represent expression tree\n             * nodes are derived.\n             */\n\n            exports.QueryExpression = QueryExpression = (function (_super) {\n                __extends(QueryExpression, _super);\n\n                function QueryExpression() {\n                    QueryExpression.__super__.constructor.call(this);\n                }\n\n\n                /*\n                 * Group a sequence of clauses together with a given operator (like And\n                 * or Or).\n                 */\n\n                QueryExpression.groupClauses = function (operator, clauses) {\n                    var combine;\n                    combine = function (left, right) {\n                        if (!left) {\n                            return right;\n                        } else if (!right) {\n                            return left;\n                        } else {\n                            return new BinaryExpression(operator, left, right);\n                        }\n                    };\n                    return clauses.reduce(combine, null);\n                };\n\n                return QueryExpression;\n\n            })(Node);\n\n            exports.QueryExpressionVisitor = QueryExpressionVisitor = (function (_super) {\n                __extends(QueryExpressionVisitor, _super);\n\n                function QueryExpressionVisitor() {\n                    QueryExpressionVisitor.__super__.constructor.call(this);\n                }\n\n                QueryExpressionVisitor.prototype.QueryExpression = function (node) {\n                    return node;\n                };\n\n                return QueryExpressionVisitor;\n\n            })(Visitor);\n\n\n            /*\n             * Represents an expression that has a constant value.\n             */\n\n            exports.ConstantExpression = ConstantExpression = (function (_super) {\n                __extends(ConstantExpression, _super);\n\n\n                /*\n                 * @value: The value of the constant expression.\n                 */\n\n                function ConstantExpression(value) {\n                    this.value = value;\n                    ConstantExpression.__super__.constructor.call(this);\n                }\n\n                return ConstantExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.ConstantExpression = function (node) {\n                return this.QueryExpression(node);\n            };\n\n\n            /*\n             * Represents accessing a field.\n             */\n\n            exports.MemberExpression = MemberExpression = (function (_super) {\n                __extends(MemberExpression, _super);\n\n\n                /*\n                 * @member: Gets the field to be accessed.\n                 */\n\n                function MemberExpression(member) {\n                    this.member = member;\n                    MemberExpression.__super__.constructor.call(this);\n                }\n\n                return MemberExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.MemberExpression = function (node) {\n                return this.QueryExpression(node);\n            };\n\n\n            /*\n             * Represents an expression that has a binary operator.\n             */\n\n            exports.BinaryExpression = BinaryExpression = (function (_super) {\n                __extends(BinaryExpression, _super);\n\n\n                /*\n                 * @operator: The operator of the binary expression.\n                 * @left: The left operand of the binary operation.\n                 * @right: The right operand of the binary operation.\n                 */\n\n                function BinaryExpression(operator, left, right) {\n                    this.operator = operator;\n                    this.left = left;\n                    this.right = right;\n                    BinaryExpression.__super__.constructor.call(this);\n                }\n\n                return BinaryExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.BinaryExpression = function (node) {\n                node = this.QueryExpression(node);\n                node.left = this.visit(node.left);\n                node.right = this.visit(node.right);\n                return node;\n            };\n\n\n            /*\n             * Represents the known binary operators.\n             */\n\n            exports.BinaryOperators = {\n                And: 'And',\n                Or: 'Or',\n                Add: 'Add',\n                Subtract: 'Subtract',\n                Multiply: 'Multiply',\n                Divide: 'Divide',\n                Modulo: 'Modulo',\n                GreaterThan: 'GreaterThan',\n                GreaterThanOrEqual: 'GreaterThanOrEqual',\n                LessThan: 'LessThan',\n                LessThanOrEqual: 'LessThanOrEqual',\n                NotEqual: 'NotEqual',\n                Equal: 'Equal'\n            };\n\n\n            /*\n             * Represents the known unary operators.\n             */\n\n            exports.UnaryExpression = UnaryExpression = (function (_super) {\n                __extends(UnaryExpression, _super);\n\n\n                /*\n                 * @operator: The operator of the unary expression.\n                 * @operand: The operand of the unary expression.\n                 */\n\n                function UnaryExpression(operator, operand) {\n                    this.operator = operator;\n                    this.operand = operand;\n                    UnaryExpression.__super__.constructor.call(this);\n                }\n\n                return UnaryExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.UnaryExpression = function (node) {\n                node = this.QueryExpression(node);\n                node.operand = this.visit(node.operand);\n                return node;\n            };\n\n\n            /*\n             * Represents the known unary operators.\n             */\n\n            exports.UnaryOperators = {\n                Not: 'Not',\n                Negate: 'Negate',\n                Increment: 'Increment',\n                Decrement: 'Decrement'\n            };\n\n\n            /*\n             * Represents a method invocation.\n             */\n\n            exports.InvocationExpression = InvocationExpression = (function (_super) {\n                __extends(InvocationExpression, _super);\n\n\n                /*\n                 * @method: The name of the method to invoke.\n                 * @args: The arguments to the method.\n                 */\n\n                function InvocationExpression(method, args) {\n                    this.method = method;\n                    this.args = args;\n                    InvocationExpression.__super__.constructor.call(this);\n                }\n\n                return InvocationExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.InvocationExpression = function (node) {\n                node = this.QueryExpression(node);\n                node.args = this.visit(node.args);\n                return node;\n            };\n\n\n            /*\n             * Represents the known unary operators.\n             */\n\n            exports.Methods = {\n                Length: 'Length',\n                ToUpperCase: 'ToUpperCase',\n                ToLowerCase: 'ToLowerCase',\n                Trim: 'Trim',\n                IndexOf: 'IndexOf',\n                Replace: 'Replace',\n                Substring: 'Substring',\n                Concat: 'Concat',\n                Day: 'Day',\n                Month: 'Month',\n                Year: 'Year',\n                Floor: 'Floor',\n                Ceiling: 'Ceiling',\n                Round: 'Round'\n            };\n\n\n            /*\n             * Represents a literal string in the query language.\n             */\n\n            exports.LiteralExpression = LiteralExpression = (function (_super) {\n                __extends(LiteralExpression, _super);\n\n\n                /*\n                 * @queryString\n                 * @args\n                 */\n\n                function LiteralExpression(queryString, args) {\n                    this.queryString = queryString;\n                    this.args = args != null ? args : [];\n                    LiteralExpression.__super__.constructor.call(this);\n                }\n\n                return LiteralExpression;\n\n            })(QueryExpression);\n\n            QueryExpressionVisitor.prototype.LiteralExpression = function (node) {\n                return this.QueryExpression(node);\n            };\n\n        }).call(this);\n    };\n\n    $__modules__.Utilities = function (exports) {\n        // Generated by CoffeeScript 1.7.1\n\n        /*\n         * ----------------------------------------------------------------------------\n         * Copyright (c) Microsoft Corporation. All rights reserved.\n         * ----------------------------------------------------------------------------\n         */\n\n        (function () {\n            var classOf,\n              __slice = [].slice;\n\n            classOf = function (obj) {\n                return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();\n            };\n\n            if (Array.prototype.reduce == null) {\n                Array.prototype.reduce = function () {\n                    var accumulator, array, arrayLength, currentIndex, currentValue, moreArgs;\n                    accumulator = arguments[0], moreArgs = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                    array = this;\n                    arrayLength = array.length;\n                    currentIndex = 0;\n                    currentValue = void 0;\n                    if (array == null) {\n                        throw new TypeError(\"Object is null or undefined\");\n                    }\n                    if (typeof accumulator !== \"function\") {\n                        throw new TypeError(\"First argument is not callable\");\n                    }\n                    if (moreArgs.length === 0) {\n                        if (arrayLength === 0) {\n                            throw new TypeError(\"Array length is 0 and no second argument\");\n                        } else {\n                            currentValue = array[0];\n                            currentIndex = 1;\n                        }\n                    } else {\n                        currentValue = moreArgs[0];\n                    }\n                    while (currentIndex < arrayLength) {\n                        if (currentIndex in array) {\n                            currentValue = accumulator.call(void 0, currentValue, array[currentIndex], array);\n                        }\n                        ++currentIndex;\n                    }\n                    return currentValue;\n                };\n            }\n\n            if (Array.prototype.map == null) {\n                Array.prototype.map = function (callback, thisArg) {\n                    var elem, index, inputArray, len, outputArray, _i, _len;\n                    if (typeof this === \"undefined\" || this === null) {\n                        throw new TypeError(\"this is null or not defined\");\n                    }\n                    if (typeof callback !== \"function\") {\n                        throw new TypeError(callback + \" is not a function\");\n                    }\n                    thisArg = thisArg ? thisArg : void 0;\n                    inputArray = Object(this);\n                    len = inputArray.length >>> 0;\n                    outputArray = new Array(len);\n                    for (index = _i = 0, _len = inputArray.length; _i < _len; index = ++_i) {\n                        elem = inputArray[index];\n                        if (index in inputArray) {\n                            outputArray[index] = callback.call(thisArg, elem, index, inputArray);\n                        }\n                    }\n                    return outputArray;\n                };\n            }\n\n            if (Array.isArray == null) {\n                Array.isArray = function (vArg) {\n                    return Object.prototype.toString.call(vArg) === \"[object Array]\";\n                };\n            }\n\n            exports.isObject = function (obj) {\n                return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase() === 'object';\n            };\n\n            exports.isString = function (obj) {\n                return typeof obj === 'string';\n            };\n\n            exports.isFunction = function (obj) {\n                return typeof obj === 'function';\n            };\n\n            exports.isArray = Array.isArray;\n\n            exports.isNumber = function (obj) {\n                return typeof obj === 'number';\n            };\n\n            exports.isBoolean = function (obj) {\n                return typeof obj === 'boolean';\n            };\n\n            exports.isDate = function (obj) {\n                return classOf(obj) === 'date';\n            };\n\n            exports.functionName = function (fn) {\n                var index, prefix, source;\n                if (typeof Function.prototype.name === 'function') {\n                    return Function.prototype.name.call(fn);\n                } else {\n                    source = fn.toString();\n                    prefix = 'function ';\n                    if (source.slice(0, +(prefix.length - 1) + 1 || 9e9) === prefix) {\n                        index = source.indexOf('(', prefix.length);\n                        if (index > prefix.length) {\n                            return source.slice(prefix.length, +(index - 1) + 1 || 9e9);\n                        }\n                    }\n                    return null;\n                }\n            };\n\n        }).call(this);\n    };\n\n    $__modules__.esprima = function (exports) {\n        /*\n          Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n          Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n          Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n          Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n          Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n          Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>\n          Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n          Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n          Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n        \n          Redistribution and use in source and binary forms, with or without\n          modification, are permitted provided that the following conditions are met:\n        \n            * Redistributions of source code must retain the above copyright\n              notice, this list of conditions and the following disclaimer.\n            * Redistributions in binary form must reproduce the above copyright\n              notice, this list of conditions and the following disclaimer in the\n              documentation and/or other materials provided with the distribution.\n        \n          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n          AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n          IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n          ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n          DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n          (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n          LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n          ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n          (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n          THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n        */\n\n        /*jslint bitwise:true plusplus:true */\n        /*global esprima:true, define:true, exports:true, window: true,\n        createLocationMarker: true,\n        throwError: true, generateStatement: true, peek: true,\n        parseAssignmentExpression: true, parseBlock: true, parseExpression: true,\n        parseFunctionDeclaration: true, parseFunctionExpression: true,\n        parseFunctionSourceElements: true, parseVariableIdentifier: true,\n        parseLeftHandSideExpression: true,\n        parseUnaryExpression: true,\n        parseStatement: true, parseSourceElement: true */\n\n        (function (root, factory) {\n            'use strict';\n\n            // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,\n            // Rhino, and plain browser loading.\n            if (typeof define === 'function' && define.amd) {\n                define(['exports'], factory);\n            } else if (typeof exports !== 'undefined') {\n                factory(exports);\n            } else {\n                factory((root.esprima = {}));\n            }\n        }(this, function (exports) {\n            'use strict';\n\n            var Token,\n                TokenName,\n                FnExprTokens,\n                Syntax,\n                PropertyKind,\n                Messages,\n                Regex,\n                SyntaxTreeDelegate,\n                source,\n                strict,\n                index,\n                lineNumber,\n                lineStart,\n                length,\n                delegate,\n                lookahead,\n                state,\n                extra;\n\n            Token = {\n                BooleanLiteral: 1,\n                EOF: 2,\n                Identifier: 3,\n                Keyword: 4,\n                NullLiteral: 5,\n                NumericLiteral: 6,\n                Punctuator: 7,\n                StringLiteral: 8,\n                RegularExpression: 9\n            };\n\n            TokenName = {};\n            TokenName[Token.BooleanLiteral] = 'Boolean';\n            TokenName[Token.EOF] = '<end>';\n            TokenName[Token.Identifier] = 'Identifier';\n            TokenName[Token.Keyword] = 'Keyword';\n            TokenName[Token.NullLiteral] = 'Null';\n            TokenName[Token.NumericLiteral] = 'Numeric';\n            TokenName[Token.Punctuator] = 'Punctuator';\n            TokenName[Token.StringLiteral] = 'String';\n            TokenName[Token.RegularExpression] = 'RegularExpression';\n\n            // A function following one of those tokens is an expression.\n            FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n                            'return', 'case', 'delete', 'throw', 'void',\n                            // assignment operators\n                            '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',\n                            '&=', '|=', '^=', ',',\n                            // binary/unary operators\n                            '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n                            '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n                            '<=', '<', '>', '!=', '!=='];\n\n            Syntax = {\n                AssignmentExpression: 'AssignmentExpression',\n                ArrayExpression: 'ArrayExpression',\n                BlockStatement: 'BlockStatement',\n                BinaryExpression: 'BinaryExpression',\n                BreakStatement: 'BreakStatement',\n                CallExpression: 'CallExpression',\n                CatchClause: 'CatchClause',\n                ConditionalExpression: 'ConditionalExpression',\n                ContinueStatement: 'ContinueStatement',\n                DoWhileStatement: 'DoWhileStatement',\n                DebuggerStatement: 'DebuggerStatement',\n                EmptyStatement: 'EmptyStatement',\n                ExpressionStatement: 'ExpressionStatement',\n                ForStatement: 'ForStatement',\n                ForInStatement: 'ForInStatement',\n                FunctionDeclaration: 'FunctionDeclaration',\n                FunctionExpression: 'FunctionExpression',\n                Identifier: 'Identifier',\n                IfStatement: 'IfStatement',\n                Literal: 'Literal',\n                LabeledStatement: 'LabeledStatement',\n                LogicalExpression: 'LogicalExpression',\n                MemberExpression: 'MemberExpression',\n                NewExpression: 'NewExpression',\n                ObjectExpression: 'ObjectExpression',\n                Program: 'Program',\n                Property: 'Property',\n                ReturnStatement: 'ReturnStatement',\n                SequenceExpression: 'SequenceExpression',\n                SwitchStatement: 'SwitchStatement',\n                SwitchCase: 'SwitchCase',\n                ThisExpression: 'ThisExpression',\n                ThrowStatement: 'ThrowStatement',\n                TryStatement: 'TryStatement',\n                UnaryExpression: 'UnaryExpression',\n                UpdateExpression: 'UpdateExpression',\n                VariableDeclaration: 'VariableDeclaration',\n                VariableDeclarator: 'VariableDeclarator',\n                WhileStatement: 'WhileStatement',\n                WithStatement: 'WithStatement'\n            };\n\n            PropertyKind = {\n                Data: 1,\n                Get: 2,\n                Set: 4\n            };\n\n            // Error messages should be identical to V8.\n            Messages = {\n                UnexpectedToken: 'Unexpected token %0',\n                UnexpectedNumber: 'Unexpected number',\n                UnexpectedString: 'Unexpected string',\n                UnexpectedIdentifier: 'Unexpected identifier',\n                UnexpectedReserved: 'Unexpected reserved word',\n                UnexpectedEOS: 'Unexpected end of input',\n                NewlineAfterThrow: 'Illegal newline after throw',\n                InvalidRegExp: 'Invalid regular expression',\n                UnterminatedRegExp: 'Invalid regular expression: missing /',\n                InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n                InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n                MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n                NoCatchOrFinally: 'Missing catch or finally after try',\n                UnknownLabel: 'Undefined label \\'%0\\'',\n                Redeclaration: '%0 \\'%1\\' has already been declared',\n                IllegalContinue: 'Illegal continue statement',\n                IllegalBreak: 'Illegal break statement',\n                IllegalReturn: 'Illegal return statement',\n                StrictModeWith: 'Strict mode code may not include a with statement',\n                StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n                StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n                StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n                StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n                StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n                StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n                StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n                StrictDuplicateProperty: 'Duplicate data property in object literal not allowed in strict mode',\n                AccessorDataProperty: 'Object literal may not have data and accessor property with the same name',\n                AccessorGetSet: 'Object literal may not have multiple get/set accessors with the same name',\n                StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n                StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n                StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n                StrictReservedWord: 'Use of future reserved word in strict mode'\n            };\n\n            // See also tools/generate-unicode-regex.py.\n            Regex = {\n                NonAsciiIdentifierStart: new RegExp('[\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]'),\n                NonAsciiIdentifierPart: new RegExp('[\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u0487\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0610-\\u061a\\u0620-\\u0669\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07c0-\\u07f5\\u07fa\\u0800-\\u082d\\u0840-\\u085b\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\u0900-\\u0963\\u0966-\\u096f\\u0971-\\u0977\\u0979-\\u097f\\u0981-\\u0983\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc\\u09dd\\u09df-\\u09e3\\u09e6-\\u09f1\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a66-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5c\\u0b5d\\u0b5f-\\u0b63\\u0b66-\\u0b6f\\u0b71\\u0b82\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c58\\u0c59\\u0c60-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0ce6-\\u0cef\\u0cf1\\u0cf2\\u0d02\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d57\\u0d60-\\u0d63\\u0d66-\\u0d6f\\u0d7a-\\u0d7f\\u0d82\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e50-\\u0e59\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb9\\u0ebb-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0edc-\\u0edf\\u0f00\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1049\\u1050-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772\\u1773\\u1780-\\u17d3\\u17d7\\u17dc\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1aa7\\u1b00-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1bf3\\u1c00-\\u1c37\\u1c40-\\u1c49\\u1c4d-\\u1c7d\\u1cd0-\\u1cd2\\u1cd4-\\u1cf6\\u1d00-\\u1de6\\u1dfc-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u200c\\u200d\\u203f\\u2040\\u2054\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u2e2f\\u3005-\\u3007\\u3021-\\u302f\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u3099\\u309a\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua62b\\ua640-\\ua66f\\ua674-\\ua67d\\ua67f-\\ua697\\ua69f-\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua827\\ua840-\\ua873\\ua880-\\ua8c4\\ua8d0-\\ua8d9\\ua8e0-\\ua8f7\\ua8fb\\ua900-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf-\\ua9d9\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa50-\\uaa59\\uaa60-\\uaa76\\uaa7a\\uaa7b\\uaa80-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff10-\\uff19\\uff21-\\uff3a\\uff3f\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]')\n            };\n\n            // Ensure the condition is true, otherwise throw an error.\n            // This is only to have a better contract semantic, i.e. another safety net\n            // to catch a logic error. The condition shall be fulfilled in normal case.\n            // Do NOT use this to enforce a certain condition on any user input.\n\n            function assert(condition, message) {\n                if (!condition) {\n                    throw new Error('ASSERT: ' + message);\n                }\n            }\n\n            function isDecimalDigit(ch) {\n                return (ch >= 48 && ch <= 57);   // 0..9\n            }\n\n            function isHexDigit(ch) {\n                return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n            }\n\n            function isOctalDigit(ch) {\n                return '01234567'.indexOf(ch) >= 0;\n            }\n\n\n            // 7.2 White Space\n\n            function isWhiteSpace(ch) {\n                return (ch === 32) ||  // space\n                    (ch === 9) ||      // tab\n                    (ch === 0xB) ||\n                    (ch === 0xC) ||\n                    (ch === 0xA0) ||\n                    (ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromCharCode(ch)) > 0);\n            }\n\n            // 7.3 Line Terminators\n\n            function isLineTerminator(ch) {\n                return (ch === 10) || (ch === 13) || (ch === 0x2028) || (ch === 0x2029);\n            }\n\n            // 7.6 Identifier Names and Identifiers\n\n            function isIdentifierStart(ch) {\n                return (ch === 36) || (ch === 95) ||  // $ (dollar) and _ (underscore)\n                    (ch >= 65 && ch <= 90) ||         // A..Z\n                    (ch >= 97 && ch <= 122) ||        // a..z\n                    (ch === 92) ||                    // \\ (backslash)\n                    ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch)));\n            }\n\n            function isIdentifierPart(ch) {\n                return (ch === 36) || (ch === 95) ||  // $ (dollar) and _ (underscore)\n                    (ch >= 65 && ch <= 90) ||         // A..Z\n                    (ch >= 97 && ch <= 122) ||        // a..z\n                    (ch >= 48 && ch <= 57) ||         // 0..9\n                    (ch === 92) ||                    // \\ (backslash)\n                    ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n            }\n\n            // 7.6.1.2 Future Reserved Words\n\n            function isFutureReservedWord(id) {\n                switch (id) {\n                    case 'class':\n                    case 'enum':\n                    case 'export':\n                    case 'extends':\n                    case 'import':\n                    case 'super':\n                        return true;\n                    default:\n                        return false;\n                }\n            }\n\n            function isStrictModeReservedWord(id) {\n                switch (id) {\n                    case 'implements':\n                    case 'interface':\n                    case 'package':\n                    case 'private':\n                    case 'protected':\n                    case 'public':\n                    case 'static':\n                    case 'yield':\n                    case 'let':\n                        return true;\n                    default:\n                        return false;\n                }\n            }\n\n            function isRestrictedWord(id) {\n                return id === 'eval' || id === 'arguments';\n            }\n\n            // 7.6.1.1 Keywords\n\n            function isKeyword(id) {\n                if (strict && isStrictModeReservedWord(id)) {\n                    return true;\n                }\n\n                // 'const' is specialized as Keyword in V8.\n                // 'yield' and 'let' are for compatiblity with SpiderMonkey and ES.next.\n                // Some others are from future reserved words.\n\n                switch (id.length) {\n                    case 2:\n                        return (id === 'if') || (id === 'in') || (id === 'do');\n                    case 3:\n                        return (id === 'var') || (id === 'for') || (id === 'new') ||\n                            (id === 'try') || (id === 'let');\n                    case 4:\n                        return (id === 'this') || (id === 'else') || (id === 'case') ||\n                            (id === 'void') || (id === 'with') || (id === 'enum');\n                    case 5:\n                        return (id === 'while') || (id === 'break') || (id === 'catch') ||\n                            (id === 'throw') || (id === 'const') || (id === 'yield') ||\n                            (id === 'class') || (id === 'super');\n                    case 6:\n                        return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n                            (id === 'switch') || (id === 'export') || (id === 'import');\n                    case 7:\n                        return (id === 'default') || (id === 'finally') || (id === 'extends');\n                    case 8:\n                        return (id === 'function') || (id === 'continue') || (id === 'debugger');\n                    case 10:\n                        return (id === 'instanceof');\n                    default:\n                        return false;\n                }\n            }\n\n            // 7.4 Comments\n\n            function addComment(type, value, start, end, loc) {\n                var comment;\n\n                assert(typeof start === 'number', 'Comment must have valid position');\n\n                // Because the way the actual token is scanned, often the comments\n                // (if any) are skipped twice during the lexical analysis.\n                // Thus, we need to skip adding a comment if the comment array already\n                // handled it.\n                if (state.lastCommentStart >= start) {\n                    return;\n                }\n                state.lastCommentStart = start;\n\n                comment = {\n                    type: type,\n                    value: value\n                };\n                if (extra.range) {\n                    comment.range = [start, end];\n                }\n                if (extra.loc) {\n                    comment.loc = loc;\n                }\n                extra.comments.push(comment);\n            }\n\n            function skipSingleLineComment() {\n                var start, loc, ch, comment;\n\n                start = index - 2;\n                loc = {\n                    start: {\n                        line: lineNumber,\n                        column: index - lineStart - 2\n                    }\n                };\n\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    ++index;\n                    if (isLineTerminator(ch)) {\n                        if (extra.comments) {\n                            comment = source.slice(start + 2, index - 1);\n                            loc.end = {\n                                line: lineNumber,\n                                column: index - lineStart - 1\n                            };\n                            addComment('Line', comment, start, index - 1, loc);\n                        }\n                        if (ch === 13 && source.charCodeAt(index) === 10) {\n                            ++index;\n                        }\n                        ++lineNumber;\n                        lineStart = index;\n                        return;\n                    }\n                }\n\n                if (extra.comments) {\n                    comment = source.slice(start + 2, index);\n                    loc.end = {\n                        line: lineNumber,\n                        column: index - lineStart\n                    };\n                    addComment('Line', comment, start, index, loc);\n                }\n            }\n\n            function skipMultiLineComment() {\n                var start, loc, ch, comment;\n\n                if (extra.comments) {\n                    start = index - 2;\n                    loc = {\n                        start: {\n                            line: lineNumber,\n                            column: index - lineStart - 2\n                        }\n                    };\n                }\n\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    if (isLineTerminator(ch)) {\n                        if (ch === 13 && source.charCodeAt(index + 1) === 10) {\n                            ++index;\n                        }\n                        ++lineNumber;\n                        ++index;\n                        lineStart = index;\n                        if (index >= length) {\n                            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                        }\n                    } else if (ch === 42) {\n                        // Block comment ends with '*/' (char #42, char #47).\n                        if (source.charCodeAt(index + 1) === 47) {\n                            ++index;\n                            ++index;\n                            if (extra.comments) {\n                                comment = source.slice(start + 2, index - 2);\n                                loc.end = {\n                                    line: lineNumber,\n                                    column: index - lineStart\n                                };\n                                addComment('Block', comment, start, index, loc);\n                            }\n                            return;\n                        }\n                        ++index;\n                    } else {\n                        ++index;\n                    }\n                }\n\n                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n            }\n\n            function skipComment() {\n                var ch;\n\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n\n                    if (isWhiteSpace(ch)) {\n                        ++index;\n                    } else if (isLineTerminator(ch)) {\n                        ++index;\n                        if (ch === 13 && source.charCodeAt(index) === 10) {\n                            ++index;\n                        }\n                        ++lineNumber;\n                        lineStart = index;\n                    } else if (ch === 47) { // 47 is '/'\n                        ch = source.charCodeAt(index + 1);\n                        if (ch === 47) {\n                            ++index;\n                            ++index;\n                            skipSingleLineComment();\n                        } else if (ch === 42) {  // 42 is '*'\n                            ++index;\n                            ++index;\n                            skipMultiLineComment();\n                        } else {\n                            break;\n                        }\n                    } else {\n                        break;\n                    }\n                }\n            }\n\n            function scanHexEscape(prefix) {\n                var i, len, ch, code = 0;\n\n                len = (prefix === 'u') ? 4 : 2;\n                for (i = 0; i < len; ++i) {\n                    if (index < length && isHexDigit(source[index])) {\n                        ch = source[index++];\n                        code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n                    } else {\n                        return '';\n                    }\n                }\n                return String.fromCharCode(code);\n            }\n\n            function getEscapedIdentifier() {\n                var ch, id;\n\n                ch = source.charCodeAt(index++);\n                id = String.fromCharCode(ch);\n\n                // '\\u' (char #92, char #117) denotes an escaped character.\n                if (ch === 92) {\n                    if (source.charCodeAt(index) !== 117) {\n                        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                    }\n                    ++index;\n                    ch = scanHexEscape('u');\n                    if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n                        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                    }\n                    id = ch;\n                }\n\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    if (!isIdentifierPart(ch)) {\n                        break;\n                    }\n                    ++index;\n                    id += String.fromCharCode(ch);\n\n                    // '\\u' (char #92, char #117) denotes an escaped character.\n                    if (ch === 92) {\n                        id = id.substr(0, id.length - 1);\n                        if (source.charCodeAt(index) !== 117) {\n                            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                        }\n                        ++index;\n                        ch = scanHexEscape('u');\n                        if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n                            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                        }\n                        id += ch;\n                    }\n                }\n\n                return id;\n            }\n\n            function getIdentifier() {\n                var start, ch;\n\n                start = index++;\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    if (ch === 92) {\n                        // Blackslash (char #92) marks Unicode escape sequence.\n                        index = start;\n                        return getEscapedIdentifier();\n                    }\n                    if (isIdentifierPart(ch)) {\n                        ++index;\n                    } else {\n                        break;\n                    }\n                }\n\n                return source.slice(start, index);\n            }\n\n            function scanIdentifier() {\n                var start, id, type;\n\n                start = index;\n\n                // Backslash (char #92) starts an escaped character.\n                id = (source.charCodeAt(index) === 92) ? getEscapedIdentifier() : getIdentifier();\n\n                // There is no keyword or literal with only one character.\n                // Thus, it must be an identifier.\n                if (id.length === 1) {\n                    type = Token.Identifier;\n                } else if (isKeyword(id)) {\n                    type = Token.Keyword;\n                } else if (id === 'null') {\n                    type = Token.NullLiteral;\n                } else if (id === 'true' || id === 'false') {\n                    type = Token.BooleanLiteral;\n                } else {\n                    type = Token.Identifier;\n                }\n\n                return {\n                    type: type,\n                    value: id,\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n\n            // 7.7 Punctuators\n\n            function scanPunctuator() {\n                var start = index,\n                    code = source.charCodeAt(index),\n                    code2,\n                    ch1 = source[index],\n                    ch2,\n                    ch3,\n                    ch4;\n\n                switch (code) {\n\n                    // Check for most common single-character punctuators.\n                    case 46:   // . dot\n                    case 40:   // ( open bracket\n                    case 41:   // ) close bracket\n                    case 59:   // ; semicolon\n                    case 44:   // , comma\n                    case 123:  // { open curly brace\n                    case 125:  // } close curly brace\n                    case 91:   // [\n                    case 93:   // ]\n                    case 58:   // :\n                    case 63:   // ?\n                    case 126:  // ~\n                        ++index;\n                        if (extra.tokenize) {\n                            if (code === 40) {\n                                extra.openParenToken = extra.tokens.length;\n                            } else if (code === 123) {\n                                extra.openCurlyToken = extra.tokens.length;\n                            }\n                        }\n                        return {\n                            type: Token.Punctuator,\n                            value: String.fromCharCode(code),\n                            lineNumber: lineNumber,\n                            lineStart: lineStart,\n                            range: [start, index]\n                        };\n\n                    default:\n                        code2 = source.charCodeAt(index + 1);\n\n                        // '=' (char #61) marks an assignment or comparison operator.\n                        if (code2 === 61) {\n                            switch (code) {\n                                case 37:  // %\n                                case 38:  // &\n                                case 42:  // *:\n                                case 43:  // +\n                                case 45:  // -\n                                case 47:  // /\n                                case 60:  // <\n                                case 62:  // >\n                                case 94:  // ^\n                                case 124: // |\n                                    index += 2;\n                                    return {\n                                        type: Token.Punctuator,\n                                        value: String.fromCharCode(code) + String.fromCharCode(code2),\n                                        lineNumber: lineNumber,\n                                        lineStart: lineStart,\n                                        range: [start, index]\n                                    };\n\n                                case 33: // !\n                                case 61: // =\n                                    index += 2;\n\n                                    // !== and ===\n                                    if (source.charCodeAt(index) === 61) {\n                                        ++index;\n                                    }\n                                    return {\n                                        type: Token.Punctuator,\n                                        value: source.slice(start, index),\n                                        lineNumber: lineNumber,\n                                        lineStart: lineStart,\n                                        range: [start, index]\n                                    };\n                                default:\n                                    break;\n                            }\n                        }\n                        break;\n                }\n\n                // Peek more characters.\n\n                ch2 = source[index + 1];\n                ch3 = source[index + 2];\n                ch4 = source[index + 3];\n\n                // 4-character punctuator: >>>=\n\n                if (ch1 === '>' && ch2 === '>' && ch3 === '>') {\n                    if (ch4 === '=') {\n                        index += 4;\n                        return {\n                            type: Token.Punctuator,\n                            value: '>>>=',\n                            lineNumber: lineNumber,\n                            lineStart: lineStart,\n                            range: [start, index]\n                        };\n                    }\n                }\n\n                // 3-character punctuators: === !== >>> <<= >>=\n\n                if (ch1 === '>' && ch2 === '>' && ch3 === '>') {\n                    index += 3;\n                    return {\n                        type: Token.Punctuator,\n                        value: '>>>',\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                if (ch1 === '<' && ch2 === '<' && ch3 === '=') {\n                    index += 3;\n                    return {\n                        type: Token.Punctuator,\n                        value: '<<=',\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                if (ch1 === '>' && ch2 === '>' && ch3 === '=') {\n                    index += 3;\n                    return {\n                        type: Token.Punctuator,\n                        value: '>>=',\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                // Other 2-character punctuators: ++ -- << >> && ||\n\n                if (ch1 === ch2 && ('+-<>&|'.indexOf(ch1) >= 0)) {\n                    index += 2;\n                    return {\n                        type: Token.Punctuator,\n                        value: ch1 + ch2,\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n                    ++index;\n                    return {\n                        type: Token.Punctuator,\n                        value: ch1,\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n\n                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n            }\n\n            // 7.8.3 Numeric Literals\n\n            function scanHexLiteral(start) {\n                var number = '';\n\n                while (index < length) {\n                    if (!isHexDigit(source[index])) {\n                        break;\n                    }\n                    number += source[index++];\n                }\n\n                if (number.length === 0) {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                if (isIdentifierStart(source.charCodeAt(index))) {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                return {\n                    type: Token.NumericLiteral,\n                    value: parseInt('0x' + number, 16),\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n            function scanOctalLiteral(start) {\n                var number = '0' + source[index++];\n                while (index < length) {\n                    if (!isOctalDigit(source[index])) {\n                        break;\n                    }\n                    number += source[index++];\n                }\n\n                if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                return {\n                    type: Token.NumericLiteral,\n                    value: parseInt(number, 8),\n                    octal: true,\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n            function scanNumericLiteral() {\n                var number, start, ch;\n\n                ch = source[index];\n                assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n                    'Numeric literal must start with a decimal digit or a decimal point');\n\n                start = index;\n                number = '';\n                if (ch !== '.') {\n                    number = source[index++];\n                    ch = source[index];\n\n                    // Hex number starts with '0x'.\n                    // Octal number starts with '0'.\n                    if (number === '0') {\n                        if (ch === 'x' || ch === 'X') {\n                            ++index;\n                            return scanHexLiteral(start);\n                        }\n                        if (isOctalDigit(ch)) {\n                            return scanOctalLiteral(start);\n                        }\n\n                        // decimal number starts with '0' such as '09' is illegal.\n                        if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n                            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                        }\n                    }\n\n                    while (isDecimalDigit(source.charCodeAt(index))) {\n                        number += source[index++];\n                    }\n                    ch = source[index];\n                }\n\n                if (ch === '.') {\n                    number += source[index++];\n                    while (isDecimalDigit(source.charCodeAt(index))) {\n                        number += source[index++];\n                    }\n                    ch = source[index];\n                }\n\n                if (ch === 'e' || ch === 'E') {\n                    number += source[index++];\n\n                    ch = source[index];\n                    if (ch === '+' || ch === '-') {\n                        number += source[index++];\n                    }\n                    if (isDecimalDigit(source.charCodeAt(index))) {\n                        while (isDecimalDigit(source.charCodeAt(index))) {\n                            number += source[index++];\n                        }\n                    } else {\n                        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                    }\n                }\n\n                if (isIdentifierStart(source.charCodeAt(index))) {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                return {\n                    type: Token.NumericLiteral,\n                    value: parseFloat(number),\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n            // 7.8.4 String Literals\n\n            function scanStringLiteral() {\n                var str = '', quote, start, ch, code, unescaped, restore, octal = false;\n\n                quote = source[index];\n                assert((quote === '\\'' || quote === '\"'),\n                    'String literal must starts with a quote');\n\n                start = index;\n                ++index;\n\n                while (index < length) {\n                    ch = source[index++];\n\n                    if (ch === quote) {\n                        quote = '';\n                        break;\n                    } else if (ch === '\\\\') {\n                        ch = source[index++];\n                        if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n                            switch (ch) {\n                                case 'n':\n                                    str += '\\n';\n                                    break;\n                                case 'r':\n                                    str += '\\r';\n                                    break;\n                                case 't':\n                                    str += '\\t';\n                                    break;\n                                case 'u':\n                                case 'x':\n                                    restore = index;\n                                    unescaped = scanHexEscape(ch);\n                                    if (unescaped) {\n                                        str += unescaped;\n                                    } else {\n                                        index = restore;\n                                        str += ch;\n                                    }\n                                    break;\n                                case 'b':\n                                    str += '\\b';\n                                    break;\n                                case 'f':\n                                    str += '\\f';\n                                    break;\n                                case 'v':\n                                    str += '\\x0B';\n                                    break;\n\n                                default:\n                                    if (isOctalDigit(ch)) {\n                                        code = '01234567'.indexOf(ch);\n\n                                        // \\0 is not octal escape sequence\n                                        if (code !== 0) {\n                                            octal = true;\n                                        }\n\n                                        if (index < length && isOctalDigit(source[index])) {\n                                            octal = true;\n                                            code = code * 8 + '01234567'.indexOf(source[index++]);\n\n                                            // 3 digits are only allowed when string starts\n                                            // with 0, 1, 2, 3\n                                            if ('0123'.indexOf(ch) >= 0 &&\n                                                    index < length &&\n                                                    isOctalDigit(source[index])) {\n                                                code = code * 8 + '01234567'.indexOf(source[index++]);\n                                            }\n                                        }\n                                        str += String.fromCharCode(code);\n                                    } else {\n                                        str += ch;\n                                    }\n                                    break;\n                            }\n                        } else {\n                            ++lineNumber;\n                            if (ch === '\\r' && source[index] === '\\n') {\n                                ++index;\n                            }\n                        }\n                    } else if (isLineTerminator(ch.charCodeAt(0))) {\n                        break;\n                    } else {\n                        str += ch;\n                    }\n                }\n\n                if (quote !== '') {\n                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n                }\n\n                return {\n                    type: Token.StringLiteral,\n                    value: str,\n                    octal: octal,\n                    lineNumber: lineNumber,\n                    lineStart: lineStart,\n                    range: [start, index]\n                };\n            }\n\n            function scanRegExp() {\n                var str, ch, start, pattern, flags, value, classMarker = false, restore, terminated = false;\n\n                lookahead = null;\n                skipComment();\n\n                start = index;\n                ch = source[index];\n                assert(ch === '/', 'Regular expression literal must start with a slash');\n                str = source[index++];\n\n                while (index < length) {\n                    ch = source[index++];\n                    str += ch;\n                    if (classMarker) {\n                        if (ch === ']') {\n                            classMarker = false;\n                        }\n                    } else {\n                        if (ch === '\\\\') {\n                            ch = source[index++];\n                            // ECMA-262 7.8.5\n                            if (isLineTerminator(ch.charCodeAt(0))) {\n                                throwError({}, Messages.UnterminatedRegExp);\n                            }\n                            str += ch;\n                        } else if (ch === '/') {\n                            terminated = true;\n                            break;\n                        } else if (ch === '[') {\n                            classMarker = true;\n                        } else if (isLineTerminator(ch.charCodeAt(0))) {\n                            throwError({}, Messages.UnterminatedRegExp);\n                        }\n                    }\n                }\n\n                if (!terminated) {\n                    throwError({}, Messages.UnterminatedRegExp);\n                }\n\n                // Exclude leading and trailing slash.\n                pattern = str.substr(1, str.length - 2);\n\n                flags = '';\n                while (index < length) {\n                    ch = source[index];\n                    if (!isIdentifierPart(ch.charCodeAt(0))) {\n                        break;\n                    }\n\n                    ++index;\n                    if (ch === '\\\\' && index < length) {\n                        ch = source[index];\n                        if (ch === 'u') {\n                            ++index;\n                            restore = index;\n                            ch = scanHexEscape('u');\n                            if (ch) {\n                                flags += ch;\n                                for (str += '\\\\u'; restore < index; ++restore) {\n                                    str += source[restore];\n                                }\n                            } else {\n                                index = restore;\n                                flags += 'u';\n                                str += '\\\\u';\n                            }\n                        } else {\n                            str += '\\\\';\n                        }\n                    } else {\n                        flags += ch;\n                        str += ch;\n                    }\n                }\n\n                try {\n                    value = new RegExp(pattern, flags);\n                } catch (e) {\n                    throwError({}, Messages.InvalidRegExp);\n                }\n\n                peek();\n\n\n                if (extra.tokenize) {\n                    return {\n                        type: Token.RegularExpression,\n                        value: value,\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [start, index]\n                    };\n                }\n                return {\n                    literal: str,\n                    value: value,\n                    range: [start, index]\n                };\n            }\n\n            function isIdentifierName(token) {\n                return token.type === Token.Identifier ||\n                    token.type === Token.Keyword ||\n                    token.type === Token.BooleanLiteral ||\n                    token.type === Token.NullLiteral;\n            }\n\n            function advanceSlash() {\n                var prevToken,\n                    checkToken;\n                // Using the following algorithm:\n                // https://github.com/mozilla/sweet.js/wiki/design\n                prevToken = extra.tokens[extra.tokens.length - 1];\n                if (!prevToken) {\n                    // Nothing before that: it cannot be a division.\n                    return scanRegExp();\n                }\n                if (prevToken.type === 'Punctuator') {\n                    if (prevToken.value === ')') {\n                        checkToken = extra.tokens[extra.openParenToken - 1];\n                        if (checkToken &&\n                                checkToken.type === 'Keyword' &&\n                                (checkToken.value === 'if' ||\n                                 checkToken.value === 'while' ||\n                                 checkToken.value === 'for' ||\n                                 checkToken.value === 'with')) {\n                            return scanRegExp();\n                        }\n                        return scanPunctuator();\n                    }\n                    if (prevToken.value === '}') {\n                        // Dividing a function by anything makes little sense,\n                        // but we have to check for that.\n                        if (extra.tokens[extra.openCurlyToken - 3] &&\n                                extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') {\n                            // Anonymous function.\n                            checkToken = extra.tokens[extra.openCurlyToken - 4];\n                            if (!checkToken) {\n                                return scanPunctuator();\n                            }\n                        } else if (extra.tokens[extra.openCurlyToken - 4] &&\n                                extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') {\n                            // Named function.\n                            checkToken = extra.tokens[extra.openCurlyToken - 5];\n                            if (!checkToken) {\n                                return scanRegExp();\n                            }\n                        } else {\n                            return scanPunctuator();\n                        }\n                        // checkToken determines whether the function is\n                        // a declaration or an expression.\n                        if (FnExprTokens.indexOf(checkToken.value) >= 0) {\n                            // It is an expression.\n                            return scanPunctuator();\n                        }\n                        // It is a declaration.\n                        return scanRegExp();\n                    }\n                    return scanRegExp();\n                }\n                if (prevToken.type === 'Keyword') {\n                    return scanRegExp();\n                }\n                return scanPunctuator();\n            }\n\n            function advance() {\n                var ch;\n\n                skipComment();\n\n                if (index >= length) {\n                    return {\n                        type: Token.EOF,\n                        lineNumber: lineNumber,\n                        lineStart: lineStart,\n                        range: [index, index]\n                    };\n                }\n\n                ch = source.charCodeAt(index);\n\n                // Very common: ( and ) and ;\n                if (ch === 40 || ch === 41 || ch === 58) {\n                    return scanPunctuator();\n                }\n\n                // String literal starts with single quote (#39) or double quote (#34).\n                if (ch === 39 || ch === 34) {\n                    return scanStringLiteral();\n                }\n\n                if (isIdentifierStart(ch)) {\n                    return scanIdentifier();\n                }\n\n                // Dot (.) char #46 can also start a floating-point number, hence the need\n                // to check the next character.\n                if (ch === 46) {\n                    if (isDecimalDigit(source.charCodeAt(index + 1))) {\n                        return scanNumericLiteral();\n                    }\n                    return scanPunctuator();\n                }\n\n                if (isDecimalDigit(ch)) {\n                    return scanNumericLiteral();\n                }\n\n                // Slash (/) char #47 can also start a regex.\n                if (extra.tokenize && ch === 47) {\n                    return advanceSlash();\n                }\n\n                return scanPunctuator();\n            }\n\n            function lex() {\n                var token;\n\n                token = lookahead;\n                index = token.range[1];\n                lineNumber = token.lineNumber;\n                lineStart = token.lineStart;\n\n                lookahead = advance();\n\n                index = token.range[1];\n                lineNumber = token.lineNumber;\n                lineStart = token.lineStart;\n\n                return token;\n            }\n\n            function peek() {\n                var pos, line, start;\n\n                pos = index;\n                line = lineNumber;\n                start = lineStart;\n                lookahead = advance();\n                index = pos;\n                lineNumber = line;\n                lineStart = start;\n            }\n\n            SyntaxTreeDelegate = {\n\n                name: 'SyntaxTree',\n\n                markStart: function () {\n                    if (extra.loc) {\n                        state.markerStack.push(index - lineStart);\n                        state.markerStack.push(lineNumber);\n                    }\n                    if (extra.range) {\n                        state.markerStack.push(index);\n                    }\n                },\n\n                markEnd: function (node) {\n                    if (extra.range) {\n                        node.range = [state.markerStack.pop(), index];\n                    }\n                    if (extra.loc) {\n                        node.loc = {\n                            start: {\n                                line: state.markerStack.pop(),\n                                column: state.markerStack.pop()\n                            },\n                            end: {\n                                line: lineNumber,\n                                column: index - lineStart\n                            }\n                        };\n                        this.postProcess(node);\n                    }\n                    return node;\n                },\n\n                markEndIf: function (node) {\n                    if (node.range || node.loc) {\n                        if (extra.loc) {\n                            state.markerStack.pop();\n                            state.markerStack.pop();\n                        }\n                        if (extra.range) {\n                            state.markerStack.pop();\n                        }\n                    } else {\n                        this.markEnd(node);\n                    }\n                    return node;\n                },\n\n                postProcess: function (node) {\n                    if (extra.source) {\n                        node.loc.source = extra.source;\n                    }\n                    return node;\n                },\n\n                createArrayExpression: function (elements) {\n                    return {\n                        type: Syntax.ArrayExpression,\n                        elements: elements\n                    };\n                },\n\n                createAssignmentExpression: function (operator, left, right) {\n                    return {\n                        type: Syntax.AssignmentExpression,\n                        operator: operator,\n                        left: left,\n                        right: right\n                    };\n                },\n\n                createBinaryExpression: function (operator, left, right) {\n                    var type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression :\n                                Syntax.BinaryExpression;\n                    return {\n                        type: type,\n                        operator: operator,\n                        left: left,\n                        right: right\n                    };\n                },\n\n                createBlockStatement: function (body) {\n                    return {\n                        type: Syntax.BlockStatement,\n                        body: body\n                    };\n                },\n\n                createBreakStatement: function (label) {\n                    return {\n                        type: Syntax.BreakStatement,\n                        label: label\n                    };\n                },\n\n                createCallExpression: function (callee, args) {\n                    return {\n                        type: Syntax.CallExpression,\n                        callee: callee,\n                        'arguments': args\n                    };\n                },\n\n                createCatchClause: function (param, body) {\n                    return {\n                        type: Syntax.CatchClause,\n                        param: param,\n                        body: body\n                    };\n                },\n\n                createConditionalExpression: function (test, consequent, alternate) {\n                    return {\n                        type: Syntax.ConditionalExpression,\n                        test: test,\n                        consequent: consequent,\n                        alternate: alternate\n                    };\n                },\n\n                createContinueStatement: function (label) {\n                    return {\n                        type: Syntax.ContinueStatement,\n                        label: label\n                    };\n                },\n\n                createDebuggerStatement: function () {\n                    return {\n                        type: Syntax.DebuggerStatement\n                    };\n                },\n\n                createDoWhileStatement: function (body, test) {\n                    return {\n                        type: Syntax.DoWhileStatement,\n                        body: body,\n                        test: test\n                    };\n                },\n\n                createEmptyStatement: function () {\n                    return {\n                        type: Syntax.EmptyStatement\n                    };\n                },\n\n                createExpressionStatement: function (expression) {\n                    return {\n                        type: Syntax.ExpressionStatement,\n                        expression: expression\n                    };\n                },\n\n                createForStatement: function (init, test, update, body) {\n                    return {\n                        type: Syntax.ForStatement,\n                        init: init,\n                        test: test,\n                        update: update,\n                        body: body\n                    };\n                },\n\n                createForInStatement: function (left, right, body) {\n                    return {\n                        type: Syntax.ForInStatement,\n                        left: left,\n                        right: right,\n                        body: body,\n                        each: false\n                    };\n                },\n\n                createFunctionDeclaration: function (id, params, defaults, body) {\n                    return {\n                        type: Syntax.FunctionDeclaration,\n                        id: id,\n                        params: params,\n                        defaults: defaults,\n                        body: body,\n                        rest: null,\n                        generator: false,\n                        expression: false\n                    };\n                },\n\n                createFunctionExpression: function (id, params, defaults, body) {\n                    return {\n                        type: Syntax.FunctionExpression,\n                        id: id,\n                        params: params,\n                        defaults: defaults,\n                        body: body,\n                        rest: null,\n                        generator: false,\n                        expression: false\n                    };\n                },\n\n                createIdentifier: function (name) {\n                    return {\n                        type: Syntax.Identifier,\n                        name: name\n                    };\n                },\n\n                createIfStatement: function (test, consequent, alternate) {\n                    return {\n                        type: Syntax.IfStatement,\n                        test: test,\n                        consequent: consequent,\n                        alternate: alternate\n                    };\n                },\n\n                createLabeledStatement: function (label, body) {\n                    return {\n                        type: Syntax.LabeledStatement,\n                        label: label,\n                        body: body\n                    };\n                },\n\n                createLiteral: function (token) {\n                    return {\n                        type: Syntax.Literal,\n                        value: token.value,\n                        raw: source.slice(token.range[0], token.range[1])\n                    };\n                },\n\n                createMemberExpression: function (accessor, object, property) {\n                    return {\n                        type: Syntax.MemberExpression,\n                        computed: accessor === '[',\n                        object: object,\n                        property: property\n                    };\n                },\n\n                createNewExpression: function (callee, args) {\n                    return {\n                        type: Syntax.NewExpression,\n                        callee: callee,\n                        'arguments': args\n                    };\n                },\n\n                createObjectExpression: function (properties) {\n                    return {\n                        type: Syntax.ObjectExpression,\n                        properties: properties\n                    };\n                },\n\n                createPostfixExpression: function (operator, argument) {\n                    return {\n                        type: Syntax.UpdateExpression,\n                        operator: operator,\n                        argument: argument,\n                        prefix: false\n                    };\n                },\n\n                createProgram: function (body) {\n                    return {\n                        type: Syntax.Program,\n                        body: body\n                    };\n                },\n\n                createProperty: function (kind, key, value) {\n                    return {\n                        type: Syntax.Property,\n                        key: key,\n                        value: value,\n                        kind: kind\n                    };\n                },\n\n                createReturnStatement: function (argument) {\n                    return {\n                        type: Syntax.ReturnStatement,\n                        argument: argument\n                    };\n                },\n\n                createSequenceExpression: function (expressions) {\n                    return {\n                        type: Syntax.SequenceExpression,\n                        expressions: expressions\n                    };\n                },\n\n                createSwitchCase: function (test, consequent) {\n                    return {\n                        type: Syntax.SwitchCase,\n                        test: test,\n                        consequent: consequent\n                    };\n                },\n\n                createSwitchStatement: function (discriminant, cases) {\n                    return {\n                        type: Syntax.SwitchStatement,\n                        discriminant: discriminant,\n                        cases: cases\n                    };\n                },\n\n                createThisExpression: function () {\n                    return {\n                        type: Syntax.ThisExpression\n                    };\n                },\n\n                createThrowStatement: function (argument) {\n                    return {\n                        type: Syntax.ThrowStatement,\n                        argument: argument\n                    };\n                },\n\n                createTryStatement: function (block, guardedHandlers, handlers, finalizer) {\n                    return {\n                        type: Syntax.TryStatement,\n                        block: block,\n                        guardedHandlers: guardedHandlers,\n                        handlers: handlers,\n                        finalizer: finalizer\n                    };\n                },\n\n                createUnaryExpression: function (operator, argument) {\n                    if (operator === '++' || operator === '--') {\n                        return {\n                            type: Syntax.UpdateExpression,\n                            operator: operator,\n                            argument: argument,\n                            prefix: true\n                        };\n                    }\n                    return {\n                        type: Syntax.UnaryExpression,\n                        operator: operator,\n                        argument: argument,\n                        prefix: true\n                    };\n                },\n\n                createVariableDeclaration: function (declarations, kind) {\n                    return {\n                        type: Syntax.VariableDeclaration,\n                        declarations: declarations,\n                        kind: kind\n                    };\n                },\n\n                createVariableDeclarator: function (id, init) {\n                    return {\n                        type: Syntax.VariableDeclarator,\n                        id: id,\n                        init: init\n                    };\n                },\n\n                createWhileStatement: function (test, body) {\n                    return {\n                        type: Syntax.WhileStatement,\n                        test: test,\n                        body: body\n                    };\n                },\n\n                createWithStatement: function (object, body) {\n                    return {\n                        type: Syntax.WithStatement,\n                        object: object,\n                        body: body\n                    };\n                }\n            };\n\n            // Return true if there is a line terminator before the next token.\n\n            function peekLineTerminator() {\n                var pos, line, start, found;\n\n                pos = index;\n                line = lineNumber;\n                start = lineStart;\n                skipComment();\n                found = lineNumber !== line;\n                index = pos;\n                lineNumber = line;\n                lineStart = start;\n\n                return found;\n            }\n\n            // Throw an exception\n\n            function throwError(token, messageFormat) {\n                var error,\n                    args = Array.prototype.slice.call(arguments, 2),\n                    msg = messageFormat.replace(\n                        /%(\\d)/g,\n                        function (whole, index) {\n                            assert(index < args.length, 'Message reference must be in range');\n                            return args[index];\n                        }\n                    );\n\n                if (typeof token.lineNumber === 'number') {\n                    error = new Error('Line ' + token.lineNumber + ': ' + msg);\n                    error.index = token.range[0];\n                    error.lineNumber = token.lineNumber;\n                    error.column = token.range[0] - lineStart + 1;\n                } else {\n                    error = new Error('Line ' + lineNumber + ': ' + msg);\n                    error.index = index;\n                    error.lineNumber = lineNumber;\n                    error.column = index - lineStart + 1;\n                }\n\n                error.description = msg;\n                throw error;\n            }\n\n            function throwErrorTolerant() {\n                try {\n                    throwError.apply(null, arguments);\n                } catch (e) {\n                    if (extra.errors) {\n                        extra.errors.push(e);\n                    } else {\n                        throw e;\n                    }\n                }\n            }\n\n\n            // Throw an exception because of the token.\n\n            function throwUnexpected(token) {\n                if (token.type === Token.EOF) {\n                    throwError(token, Messages.UnexpectedEOS);\n                }\n\n                if (token.type === Token.NumericLiteral) {\n                    throwError(token, Messages.UnexpectedNumber);\n                }\n\n                if (token.type === Token.StringLiteral) {\n                    throwError(token, Messages.UnexpectedString);\n                }\n\n                if (token.type === Token.Identifier) {\n                    throwError(token, Messages.UnexpectedIdentifier);\n                }\n\n                if (token.type === Token.Keyword) {\n                    if (isFutureReservedWord(token.value)) {\n                        throwError(token, Messages.UnexpectedReserved);\n                    } else if (strict && isStrictModeReservedWord(token.value)) {\n                        throwErrorTolerant(token, Messages.StrictReservedWord);\n                        return;\n                    }\n                    throwError(token, Messages.UnexpectedToken, token.value);\n                }\n\n                // BooleanLiteral, NullLiteral, or Punctuator.\n                throwError(token, Messages.UnexpectedToken, token.value);\n            }\n\n            // Expect the next token to match the specified punctuator.\n            // If not, an exception will be thrown.\n\n            function expect(value) {\n                var token = lex();\n                if (token.type !== Token.Punctuator || token.value !== value) {\n                    throwUnexpected(token);\n                }\n            }\n\n            // Expect the next token to match the specified keyword.\n            // If not, an exception will be thrown.\n\n            function expectKeyword(keyword) {\n                var token = lex();\n                if (token.type !== Token.Keyword || token.value !== keyword) {\n                    throwUnexpected(token);\n                }\n            }\n\n            // Return true if the next token matches the specified punctuator.\n\n            function match(value) {\n                return lookahead.type === Token.Punctuator && lookahead.value === value;\n            }\n\n            // Return true if the next token matches the specified keyword\n\n            function matchKeyword(keyword) {\n                return lookahead.type === Token.Keyword && lookahead.value === keyword;\n            }\n\n            // Return true if the next token is an assignment operator\n\n            function matchAssign() {\n                var op;\n\n                if (lookahead.type !== Token.Punctuator) {\n                    return false;\n                }\n                op = lookahead.value;\n                return op === '=' ||\n                    op === '*=' ||\n                    op === '/=' ||\n                    op === '%=' ||\n                    op === '+=' ||\n                    op === '-=' ||\n                    op === '<<=' ||\n                    op === '>>=' ||\n                    op === '>>>=' ||\n                    op === '&=' ||\n                    op === '^=' ||\n                    op === '|=';\n            }\n\n            function consumeSemicolon() {\n                var line;\n\n                // Catch the very common case first: immediately a semicolon (char #59).\n                if (source.charCodeAt(index) === 59) {\n                    lex();\n                    return;\n                }\n\n                line = lineNumber;\n                skipComment();\n                if (lineNumber !== line) {\n                    return;\n                }\n\n                if (match(';')) {\n                    lex();\n                    return;\n                }\n\n                if (lookahead.type !== Token.EOF && !match('}')) {\n                    throwUnexpected(lookahead);\n                }\n            }\n\n            // Return true if provided expression is LeftHandSideExpression\n\n            function isLeftHandSide(expr) {\n                return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression;\n            }\n\n            // 11.1.4 Array Initialiser\n\n            function parseArrayInitialiser() {\n                var elements = [];\n\n                expect('[');\n\n                while (!match(']')) {\n                    if (match(',')) {\n                        lex();\n                        elements.push(null);\n                    } else {\n                        elements.push(parseAssignmentExpression());\n\n                        if (!match(']')) {\n                            expect(',');\n                        }\n                    }\n                }\n\n                expect(']');\n\n                return delegate.createArrayExpression(elements);\n            }\n\n            // 11.1.5 Object Initialiser\n\n            function parsePropertyFunction(param, first) {\n                var previousStrict, body;\n\n                previousStrict = strict;\n                skipComment();\n                delegate.markStart();\n                body = parseFunctionSourceElements();\n                if (first && strict && isRestrictedWord(param[0].name)) {\n                    throwErrorTolerant(first, Messages.StrictParamName);\n                }\n                strict = previousStrict;\n                return delegate.markEnd(delegate.createFunctionExpression(null, param, [], body));\n            }\n\n            function parseObjectPropertyKey() {\n                var token;\n\n                skipComment();\n                delegate.markStart();\n                token = lex();\n\n                // Note: This function is called only from parseObjectProperty(), where\n                // EOF and Punctuator tokens are already filtered out.\n\n                if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {\n                    if (strict && token.octal) {\n                        throwErrorTolerant(token, Messages.StrictOctalLiteral);\n                    }\n                    return delegate.markEnd(delegate.createLiteral(token));\n                }\n\n                return delegate.markEnd(delegate.createIdentifier(token.value));\n            }\n\n            function parseObjectProperty() {\n                var token, key, id, value, param;\n\n                token = lookahead;\n                skipComment();\n                delegate.markStart();\n\n                if (token.type === Token.Identifier) {\n\n                    id = parseObjectPropertyKey();\n\n                    // Property Assignment: Getter and Setter.\n\n                    if (token.value === 'get' && !match(':')) {\n                        key = parseObjectPropertyKey();\n                        expect('(');\n                        expect(')');\n                        value = parsePropertyFunction([]);\n                        return delegate.markEnd(delegate.createProperty('get', key, value));\n                    }\n                    if (token.value === 'set' && !match(':')) {\n                        key = parseObjectPropertyKey();\n                        expect('(');\n                        token = lookahead;\n                        if (token.type !== Token.Identifier) {\n                            expect(')');\n                            throwErrorTolerant(token, Messages.UnexpectedToken, token.value);\n                            value = parsePropertyFunction([]);\n                        } else {\n                            param = [parseVariableIdentifier()];\n                            expect(')');\n                            value = parsePropertyFunction(param, token);\n                        }\n                        return delegate.markEnd(delegate.createProperty('set', key, value));\n                    }\n                    expect(':');\n                    value = parseAssignmentExpression();\n                    return delegate.markEnd(delegate.createProperty('init', id, value));\n                }\n                if (token.type === Token.EOF || token.type === Token.Punctuator) {\n                    throwUnexpected(token);\n                } else {\n                    key = parseObjectPropertyKey();\n                    expect(':');\n                    value = parseAssignmentExpression();\n                    return delegate.markEnd(delegate.createProperty('init', key, value));\n                }\n            }\n\n            function parseObjectInitialiser() {\n                var properties = [], property, name, key, kind, map = {}, toString = String;\n\n                expect('{');\n\n                while (!match('}')) {\n                    property = parseObjectProperty();\n\n                    if (property.key.type === Syntax.Identifier) {\n                        name = property.key.name;\n                    } else {\n                        name = toString(property.key.value);\n                    }\n                    kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set;\n\n                    key = '$' + name;\n                    if (Object.prototype.hasOwnProperty.call(map, key)) {\n                        if (map[key] === PropertyKind.Data) {\n                            if (strict && kind === PropertyKind.Data) {\n                                throwErrorTolerant({}, Messages.StrictDuplicateProperty);\n                            } else if (kind !== PropertyKind.Data) {\n                                throwErrorTolerant({}, Messages.AccessorDataProperty);\n                            }\n                        } else {\n                            if (kind === PropertyKind.Data) {\n                                throwErrorTolerant({}, Messages.AccessorDataProperty);\n                            } else if (map[key] & kind) {\n                                throwErrorTolerant({}, Messages.AccessorGetSet);\n                            }\n                        }\n                        map[key] |= kind;\n                    } else {\n                        map[key] = kind;\n                    }\n\n                    properties.push(property);\n\n                    if (!match('}')) {\n                        expect(',');\n                    }\n                }\n\n                expect('}');\n\n                return delegate.createObjectExpression(properties);\n            }\n\n            // 11.1.6 The Grouping Operator\n\n            function parseGroupExpression() {\n                var expr;\n\n                expect('(');\n\n                expr = parseExpression();\n\n                expect(')');\n\n                return expr;\n            }\n\n\n            // 11.1 Primary Expressions\n\n            function parsePrimaryExpression() {\n                var type, token, expr;\n\n                if (match('(')) {\n                    return parseGroupExpression();\n                }\n\n                type = lookahead.type;\n                delegate.markStart();\n\n                if (type === Token.Identifier) {\n                    expr = delegate.createIdentifier(lex().value);\n                } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {\n                    if (strict && lookahead.octal) {\n                        throwErrorTolerant(lookahead, Messages.StrictOctalLiteral);\n                    }\n                    expr = delegate.createLiteral(lex());\n                } else if (type === Token.Keyword) {\n                    if (matchKeyword('this')) {\n                        lex();\n                        expr = delegate.createThisExpression();\n                    } else if (matchKeyword('function')) {\n                        expr = parseFunctionExpression();\n                    }\n                } else if (type === Token.BooleanLiteral) {\n                    token = lex();\n                    token.value = (token.value === 'true');\n                    expr = delegate.createLiteral(token);\n                } else if (type === Token.NullLiteral) {\n                    token = lex();\n                    token.value = null;\n                    expr = delegate.createLiteral(token);\n                } else if (match('[')) {\n                    expr = parseArrayInitialiser();\n                } else if (match('{')) {\n                    expr = parseObjectInitialiser();\n                } else if (match('/') || match('/=')) {\n                    expr = delegate.createLiteral(scanRegExp());\n                }\n\n                if (expr) {\n                    return delegate.markEnd(expr);\n                }\n\n                throwUnexpected(lex());\n            }\n\n            // 11.2 Left-Hand-Side Expressions\n\n            function parseArguments() {\n                var args = [];\n\n                expect('(');\n\n                if (!match(')')) {\n                    while (index < length) {\n                        args.push(parseAssignmentExpression());\n                        if (match(')')) {\n                            break;\n                        }\n                        expect(',');\n                    }\n                }\n\n                expect(')');\n\n                return args;\n            }\n\n            function parseNonComputedProperty() {\n                var token;\n\n                delegate.markStart();\n                token = lex();\n\n                if (!isIdentifierName(token)) {\n                    throwUnexpected(token);\n                }\n\n                return delegate.markEnd(delegate.createIdentifier(token.value));\n            }\n\n            function parseNonComputedMember() {\n                expect('.');\n\n                return parseNonComputedProperty();\n            }\n\n            function parseComputedMember() {\n                var expr;\n\n                expect('[');\n\n                expr = parseExpression();\n\n                expect(']');\n\n                return expr;\n            }\n\n            function parseNewExpression() {\n                var callee, args;\n\n                delegate.markStart();\n                expectKeyword('new');\n                callee = parseLeftHandSideExpression();\n                args = match('(') ? parseArguments() : [];\n\n                return delegate.markEnd(delegate.createNewExpression(callee, args));\n            }\n\n            function parseLeftHandSideExpressionAllowCall() {\n                var marker, expr, args, property;\n\n                marker = createLocationMarker();\n\n                expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();\n\n                while (match('.') || match('[') || match('(')) {\n                    if (match('(')) {\n                        args = parseArguments();\n                        expr = delegate.createCallExpression(expr, args);\n                    } else if (match('[')) {\n                        property = parseComputedMember();\n                        expr = delegate.createMemberExpression('[', expr, property);\n                    } else {\n                        property = parseNonComputedMember();\n                        expr = delegate.createMemberExpression('.', expr, property);\n                    }\n                    if (marker) {\n                        marker.end();\n                        marker.apply(expr);\n                    }\n                }\n\n                return expr;\n            }\n\n            function parseLeftHandSideExpression() {\n                var marker, expr, property;\n\n                marker = createLocationMarker();\n\n                expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();\n\n                while (match('.') || match('[')) {\n                    if (match('[')) {\n                        property = parseComputedMember();\n                        expr = delegate.createMemberExpression('[', expr, property);\n                    } else {\n                        property = parseNonComputedMember();\n                        expr = delegate.createMemberExpression('.', expr, property);\n                    }\n                    if (marker) {\n                        marker.end();\n                        marker.apply(expr);\n                    }\n                }\n\n                return expr;\n            }\n\n            // 11.3 Postfix Expressions\n\n            function parsePostfixExpression() {\n                var expr, token;\n\n                delegate.markStart();\n                expr = parseLeftHandSideExpressionAllowCall();\n\n                if (lookahead.type === Token.Punctuator) {\n                    if ((match('++') || match('--')) && !peekLineTerminator()) {\n                        // 11.3.1, 11.3.2\n                        if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n                            throwErrorTolerant({}, Messages.StrictLHSPostfix);\n                        }\n\n                        if (!isLeftHandSide(expr)) {\n                            throwError({}, Messages.InvalidLHSInAssignment);\n                        }\n\n                        token = lex();\n                        expr = delegate.createPostfixExpression(token.value, expr);\n                    }\n                }\n\n                return delegate.markEndIf(expr);\n            }\n\n            // 11.4 Unary Operators\n\n            function parseUnaryExpression() {\n                var token, expr;\n\n                delegate.markStart();\n\n                if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n                    expr = parsePostfixExpression();\n                } else if (match('++') || match('--')) {\n                    token = lex();\n                    expr = parseUnaryExpression();\n                    // 11.4.4, 11.4.5\n                    if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n                        throwErrorTolerant({}, Messages.StrictLHSPrefix);\n                    }\n\n                    if (!isLeftHandSide(expr)) {\n                        throwError({}, Messages.InvalidLHSInAssignment);\n                    }\n\n                    expr = delegate.createUnaryExpression(token.value, expr);\n                } else if (match('+') || match('-') || match('~') || match('!')) {\n                    token = lex();\n                    expr = parseUnaryExpression();\n                    expr = delegate.createUnaryExpression(token.value, expr);\n                } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n                    token = lex();\n                    expr = parseUnaryExpression();\n                    expr = delegate.createUnaryExpression(token.value, expr);\n                    if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {\n                        throwErrorTolerant({}, Messages.StrictDelete);\n                    }\n                } else {\n                    expr = parsePostfixExpression();\n                }\n\n                return delegate.markEndIf(expr);\n            }\n\n            function binaryPrecedence(token, allowIn) {\n                var prec = 0;\n\n                if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {\n                    return 0;\n                }\n\n                switch (token.value) {\n                    case '||':\n                        prec = 1;\n                        break;\n\n                    case '&&':\n                        prec = 2;\n                        break;\n\n                    case '|':\n                        prec = 3;\n                        break;\n\n                    case '^':\n                        prec = 4;\n                        break;\n\n                    case '&':\n                        prec = 5;\n                        break;\n\n                    case '==':\n                    case '!=':\n                    case '===':\n                    case '!==':\n                        prec = 6;\n                        break;\n\n                    case '<':\n                    case '>':\n                    case '<=':\n                    case '>=':\n                    case 'instanceof':\n                        prec = 7;\n                        break;\n\n                    case 'in':\n                        prec = allowIn ? 7 : 0;\n                        break;\n\n                    case '<<':\n                    case '>>':\n                    case '>>>':\n                        prec = 8;\n                        break;\n\n                    case '+':\n                    case '-':\n                        prec = 9;\n                        break;\n\n                    case '*':\n                    case '/':\n                    case '%':\n                        prec = 11;\n                        break;\n\n                    default:\n                        break;\n                }\n\n                return prec;\n            }\n\n            // 11.5 Multiplicative Operators\n            // 11.6 Additive Operators\n            // 11.7 Bitwise Shift Operators\n            // 11.8 Relational Operators\n            // 11.9 Equality Operators\n            // 11.10 Binary Bitwise Operators\n            // 11.11 Binary Logical Operators\n\n            function parseBinaryExpression() {\n                var marker, markers, expr, token, prec, previousAllowIn, stack, right, operator, left, i;\n\n                previousAllowIn = state.allowIn;\n                state.allowIn = true;\n\n                marker = createLocationMarker();\n                left = parseUnaryExpression();\n\n                token = lookahead;\n                prec = binaryPrecedence(token, previousAllowIn);\n                if (prec === 0) {\n                    return left;\n                }\n                token.prec = prec;\n                lex();\n\n                markers = [marker, createLocationMarker()];\n                right = parseUnaryExpression();\n\n                stack = [left, token, right];\n\n                while ((prec = binaryPrecedence(lookahead, previousAllowIn)) > 0) {\n\n                    // Reduce: make a binary expression from the three topmost entries.\n                    while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n                        right = stack.pop();\n                        operator = stack.pop().value;\n                        left = stack.pop();\n                        expr = delegate.createBinaryExpression(operator, left, right);\n                        markers.pop();\n                        marker = markers.pop();\n                        if (marker) {\n                            marker.end();\n                            marker.apply(expr);\n                        }\n                        stack.push(expr);\n                        markers.push(marker);\n                    }\n\n                    // Shift.\n                    token = lex();\n                    token.prec = prec;\n                    stack.push(token);\n                    markers.push(createLocationMarker());\n                    expr = parseUnaryExpression();\n                    stack.push(expr);\n                }\n\n                state.allowIn = previousAllowIn;\n\n                // Final reduce to clean-up the stack.\n                i = stack.length - 1;\n                expr = stack[i];\n                markers.pop();\n                while (i > 1) {\n                    expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n                    i -= 2;\n                    marker = markers.pop();\n                    if (marker) {\n                        marker.end();\n                        marker.apply(expr);\n                    }\n                }\n\n                return expr;\n            }\n\n\n            // 11.12 Conditional Operator\n\n            function parseConditionalExpression() {\n                var expr, previousAllowIn, consequent, alternate;\n\n                delegate.markStart();\n                expr = parseBinaryExpression();\n\n                if (match('?')) {\n                    lex();\n                    previousAllowIn = state.allowIn;\n                    state.allowIn = true;\n                    consequent = parseAssignmentExpression();\n                    state.allowIn = previousAllowIn;\n                    expect(':');\n                    alternate = parseAssignmentExpression();\n\n                    expr = delegate.markEnd(delegate.createConditionalExpression(expr, consequent, alternate));\n                } else {\n                    delegate.markEnd({});\n                }\n\n                return expr;\n            }\n\n            // 11.13 Assignment Operators\n\n            function parseAssignmentExpression() {\n                var token, left, right, node;\n\n                token = lookahead;\n                delegate.markStart();\n                node = left = parseConditionalExpression();\n\n                if (matchAssign()) {\n                    // LeftHandSideExpression\n                    if (!isLeftHandSide(left)) {\n                        throwError({}, Messages.InvalidLHSInAssignment);\n                    }\n\n                    // 11.13.1\n                    if (strict && left.type === Syntax.Identifier && isRestrictedWord(left.name)) {\n                        throwErrorTolerant(token, Messages.StrictLHSAssignment);\n                    }\n\n                    token = lex();\n                    right = parseAssignmentExpression();\n                    node = delegate.createAssignmentExpression(token.value, left, right);\n                }\n\n                return delegate.markEndIf(node);\n            }\n\n            // 11.14 Comma Operator\n\n            function parseExpression() {\n                var expr;\n\n                delegate.markStart();\n                expr = parseAssignmentExpression();\n\n                if (match(',')) {\n                    expr = delegate.createSequenceExpression([expr]);\n\n                    while (index < length) {\n                        if (!match(',')) {\n                            break;\n                        }\n                        lex();\n                        expr.expressions.push(parseAssignmentExpression());\n                    }\n                }\n\n                return delegate.markEndIf(expr);\n            }\n\n            // 12.1 Block\n\n            function parseStatementList() {\n                var list = [],\n                    statement;\n\n                while (index < length) {\n                    if (match('}')) {\n                        break;\n                    }\n                    statement = parseSourceElement();\n                    if (typeof statement === 'undefined') {\n                        break;\n                    }\n                    list.push(statement);\n                }\n\n                return list;\n            }\n\n            function parseBlock() {\n                var block;\n\n                skipComment();\n                delegate.markStart();\n                expect('{');\n\n                block = parseStatementList();\n\n                expect('}');\n\n                return delegate.markEnd(delegate.createBlockStatement(block));\n            }\n\n            // 12.2 Variable Statement\n\n            function parseVariableIdentifier() {\n                var token;\n\n                skipComment();\n                delegate.markStart();\n                token = lex();\n\n                if (token.type !== Token.Identifier) {\n                    throwUnexpected(token);\n                }\n\n                return delegate.markEnd(delegate.createIdentifier(token.value));\n            }\n\n            function parseVariableDeclaration(kind) {\n                var init = null, id;\n\n                skipComment();\n                delegate.markStart();\n                id = parseVariableIdentifier();\n\n                // 12.2.1\n                if (strict && isRestrictedWord(id.name)) {\n                    throwErrorTolerant({}, Messages.StrictVarName);\n                }\n\n                if (kind === 'const') {\n                    expect('=');\n                    init = parseAssignmentExpression();\n                } else if (match('=')) {\n                    lex();\n                    init = parseAssignmentExpression();\n                }\n\n                return delegate.markEnd(delegate.createVariableDeclarator(id, init));\n            }\n\n            function parseVariableDeclarationList(kind) {\n                var list = [];\n\n                do {\n                    list.push(parseVariableDeclaration(kind));\n                    if (!match(',')) {\n                        break;\n                    }\n                    lex();\n                } while (index < length);\n\n                return list;\n            }\n\n            function parseVariableStatement() {\n                var declarations;\n\n                expectKeyword('var');\n\n                declarations = parseVariableDeclarationList();\n\n                consumeSemicolon();\n\n                return delegate.createVariableDeclaration(declarations, 'var');\n            }\n\n            // kind may be `const` or `let`\n            // Both are experimental and not in the specification yet.\n            // see http://wiki.ecmascript.org/doku.php?id=harmony:const\n            // and http://wiki.ecmascript.org/doku.php?id=harmony:let\n            function parseConstLetDeclaration(kind) {\n                var declarations;\n\n                skipComment();\n                delegate.markStart();\n\n                expectKeyword(kind);\n\n                declarations = parseVariableDeclarationList(kind);\n\n                consumeSemicolon();\n\n                return delegate.markEnd(delegate.createVariableDeclaration(declarations, kind));\n            }\n\n            // 12.3 Empty Statement\n\n            function parseEmptyStatement() {\n                expect(';');\n                return delegate.createEmptyStatement();\n            }\n\n            // 12.4 Expression Statement\n\n            function parseExpressionStatement() {\n                var expr = parseExpression();\n                consumeSemicolon();\n                return delegate.createExpressionStatement(expr);\n            }\n\n            // 12.5 If statement\n\n            function parseIfStatement() {\n                var test, consequent, alternate;\n\n                expectKeyword('if');\n\n                expect('(');\n\n                test = parseExpression();\n\n                expect(')');\n\n                consequent = parseStatement();\n\n                if (matchKeyword('else')) {\n                    lex();\n                    alternate = parseStatement();\n                } else {\n                    alternate = null;\n                }\n\n                return delegate.createIfStatement(test, consequent, alternate);\n            }\n\n            // 12.6 Iteration Statements\n\n            function parseDoWhileStatement() {\n                var body, test, oldInIteration;\n\n                expectKeyword('do');\n\n                oldInIteration = state.inIteration;\n                state.inIteration = true;\n\n                body = parseStatement();\n\n                state.inIteration = oldInIteration;\n\n                expectKeyword('while');\n\n                expect('(');\n\n                test = parseExpression();\n\n                expect(')');\n\n                if (match(';')) {\n                    lex();\n                }\n\n                return delegate.createDoWhileStatement(body, test);\n            }\n\n            function parseWhileStatement() {\n                var test, body, oldInIteration;\n\n                expectKeyword('while');\n\n                expect('(');\n\n                test = parseExpression();\n\n                expect(')');\n\n                oldInIteration = state.inIteration;\n                state.inIteration = true;\n\n                body = parseStatement();\n\n                state.inIteration = oldInIteration;\n\n                return delegate.createWhileStatement(test, body);\n            }\n\n            function parseForVariableDeclaration() {\n                var token, declarations;\n\n                delegate.markStart();\n                token = lex();\n                declarations = parseVariableDeclarationList();\n\n                return delegate.markEnd(delegate.createVariableDeclaration(declarations, token.value));\n            }\n\n            function parseForStatement() {\n                var init, test, update, left, right, body, oldInIteration;\n\n                init = test = update = null;\n\n                expectKeyword('for');\n\n                expect('(');\n\n                if (match(';')) {\n                    lex();\n                } else {\n                    if (matchKeyword('var') || matchKeyword('let')) {\n                        state.allowIn = false;\n                        init = parseForVariableDeclaration();\n                        state.allowIn = true;\n\n                        if (init.declarations.length === 1 && matchKeyword('in')) {\n                            lex();\n                            left = init;\n                            right = parseExpression();\n                            init = null;\n                        }\n                    } else {\n                        state.allowIn = false;\n                        init = parseExpression();\n                        state.allowIn = true;\n\n                        if (matchKeyword('in')) {\n                            // LeftHandSideExpression\n                            if (!isLeftHandSide(init)) {\n                                throwError({}, Messages.InvalidLHSInForIn);\n                            }\n\n                            lex();\n                            left = init;\n                            right = parseExpression();\n                            init = null;\n                        }\n                    }\n\n                    if (typeof left === 'undefined') {\n                        expect(';');\n                    }\n                }\n\n                if (typeof left === 'undefined') {\n\n                    if (!match(';')) {\n                        test = parseExpression();\n                    }\n                    expect(';');\n\n                    if (!match(')')) {\n                        update = parseExpression();\n                    }\n                }\n\n                expect(')');\n\n                oldInIteration = state.inIteration;\n                state.inIteration = true;\n\n                body = parseStatement();\n\n                state.inIteration = oldInIteration;\n\n                return (typeof left === 'undefined') ?\n                        delegate.createForStatement(init, test, update, body) :\n                        delegate.createForInStatement(left, right, body);\n            }\n\n            // 12.7 The continue statement\n\n            function parseContinueStatement() {\n                var label = null, key;\n\n                expectKeyword('continue');\n\n                // Optimize the most common form: 'continue;'.\n                if (source.charCodeAt(index) === 59) {\n                    lex();\n\n                    if (!state.inIteration) {\n                        throwError({}, Messages.IllegalContinue);\n                    }\n\n                    return delegate.createContinueStatement(null);\n                }\n\n                if (peekLineTerminator()) {\n                    if (!state.inIteration) {\n                        throwError({}, Messages.IllegalContinue);\n                    }\n\n                    return delegate.createContinueStatement(null);\n                }\n\n                if (lookahead.type === Token.Identifier) {\n                    label = parseVariableIdentifier();\n\n                    key = '$' + label.name;\n                    if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n                        throwError({}, Messages.UnknownLabel, label.name);\n                    }\n                }\n\n                consumeSemicolon();\n\n                if (label === null && !state.inIteration) {\n                    throwError({}, Messages.IllegalContinue);\n                }\n\n                return delegate.createContinueStatement(label);\n            }\n\n            // 12.8 The break statement\n\n            function parseBreakStatement() {\n                var label = null, key;\n\n                expectKeyword('break');\n\n                // Catch the very common case first: immediately a semicolon (char #59).\n                if (source.charCodeAt(index) === 59) {\n                    lex();\n\n                    if (!(state.inIteration || state.inSwitch)) {\n                        throwError({}, Messages.IllegalBreak);\n                    }\n\n                    return delegate.createBreakStatement(null);\n                }\n\n                if (peekLineTerminator()) {\n                    if (!(state.inIteration || state.inSwitch)) {\n                        throwError({}, Messages.IllegalBreak);\n                    }\n\n                    return delegate.createBreakStatement(null);\n                }\n\n                if (lookahead.type === Token.Identifier) {\n                    label = parseVariableIdentifier();\n\n                    key = '$' + label.name;\n                    if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n                        throwError({}, Messages.UnknownLabel, label.name);\n                    }\n                }\n\n                consumeSemicolon();\n\n                if (label === null && !(state.inIteration || state.inSwitch)) {\n                    throwError({}, Messages.IllegalBreak);\n                }\n\n                return delegate.createBreakStatement(label);\n            }\n\n            // 12.9 The return statement\n\n            function parseReturnStatement() {\n                var argument = null;\n\n                expectKeyword('return');\n\n                if (!state.inFunctionBody) {\n                    throwErrorTolerant({}, Messages.IllegalReturn);\n                }\n\n                // 'return' followed by a space and an identifier is very common.\n                if (source.charCodeAt(index) === 32) {\n                    if (isIdentifierStart(source.charCodeAt(index + 1))) {\n                        argument = parseExpression();\n                        consumeSemicolon();\n                        return delegate.createReturnStatement(argument);\n                    }\n                }\n\n                if (peekLineTerminator()) {\n                    return delegate.createReturnStatement(null);\n                }\n\n                if (!match(';')) {\n                    if (!match('}') && lookahead.type !== Token.EOF) {\n                        argument = parseExpression();\n                    }\n                }\n\n                consumeSemicolon();\n\n                return delegate.createReturnStatement(argument);\n            }\n\n            // 12.10 The with statement\n\n            function parseWithStatement() {\n                var object, body;\n\n                if (strict) {\n                    throwErrorTolerant({}, Messages.StrictModeWith);\n                }\n\n                expectKeyword('with');\n\n                expect('(');\n\n                object = parseExpression();\n\n                expect(')');\n\n                body = parseStatement();\n\n                return delegate.createWithStatement(object, body);\n            }\n\n            // 12.10 The swith statement\n\n            function parseSwitchCase() {\n                var test,\n                    consequent = [],\n                    statement;\n\n                skipComment();\n                delegate.markStart();\n                if (matchKeyword('default')) {\n                    lex();\n                    test = null;\n                } else {\n                    expectKeyword('case');\n                    test = parseExpression();\n                }\n                expect(':');\n\n                while (index < length) {\n                    if (match('}') || matchKeyword('default') || matchKeyword('case')) {\n                        break;\n                    }\n                    statement = parseStatement();\n                    consequent.push(statement);\n                }\n\n                return delegate.markEnd(delegate.createSwitchCase(test, consequent));\n            }\n\n            function parseSwitchStatement() {\n                var discriminant, cases, clause, oldInSwitch, defaultFound;\n\n                expectKeyword('switch');\n\n                expect('(');\n\n                discriminant = parseExpression();\n\n                expect(')');\n\n                expect('{');\n\n                if (match('}')) {\n                    lex();\n                    return delegate.createSwitchStatement(discriminant);\n                }\n\n                cases = [];\n\n                oldInSwitch = state.inSwitch;\n                state.inSwitch = true;\n                defaultFound = false;\n\n                while (index < length) {\n                    if (match('}')) {\n                        break;\n                    }\n                    clause = parseSwitchCase();\n                    if (clause.test === null) {\n                        if (defaultFound) {\n                            throwError({}, Messages.MultipleDefaultsInSwitch);\n                        }\n                        defaultFound = true;\n                    }\n                    cases.push(clause);\n                }\n\n                state.inSwitch = oldInSwitch;\n\n                expect('}');\n\n                return delegate.createSwitchStatement(discriminant, cases);\n            }\n\n            // 12.13 The throw statement\n\n            function parseThrowStatement() {\n                var argument;\n\n                expectKeyword('throw');\n\n                if (peekLineTerminator()) {\n                    throwError({}, Messages.NewlineAfterThrow);\n                }\n\n                argument = parseExpression();\n\n                consumeSemicolon();\n\n                return delegate.createThrowStatement(argument);\n            }\n\n            // 12.14 The try statement\n\n            function parseCatchClause() {\n                var param, body;\n\n                skipComment();\n                delegate.markStart();\n                expectKeyword('catch');\n\n                expect('(');\n                if (match(')')) {\n                    throwUnexpected(lookahead);\n                }\n\n                param = parseVariableIdentifier();\n                // 12.14.1\n                if (strict && isRestrictedWord(param.name)) {\n                    throwErrorTolerant({}, Messages.StrictCatchVariable);\n                }\n\n                expect(')');\n                body = parseBlock();\n                return delegate.markEnd(delegate.createCatchClause(param, body));\n            }\n\n            function parseTryStatement() {\n                var block, handlers = [], finalizer = null;\n\n                expectKeyword('try');\n\n                block = parseBlock();\n\n                if (matchKeyword('catch')) {\n                    handlers.push(parseCatchClause());\n                }\n\n                if (matchKeyword('finally')) {\n                    lex();\n                    finalizer = parseBlock();\n                }\n\n                if (handlers.length === 0 && !finalizer) {\n                    throwError({}, Messages.NoCatchOrFinally);\n                }\n\n                return delegate.createTryStatement(block, [], handlers, finalizer);\n            }\n\n            // 12.15 The debugger statement\n\n            function parseDebuggerStatement() {\n                expectKeyword('debugger');\n\n                consumeSemicolon();\n\n                return delegate.createDebuggerStatement();\n            }\n\n            // 12 Statements\n\n            function parseStatement() {\n                var type = lookahead.type,\n                    expr,\n                    labeledBody,\n                    key;\n\n                if (type === Token.EOF) {\n                    throwUnexpected(lookahead);\n                }\n\n                skipComment();\n                delegate.markStart();\n\n                if (type === Token.Punctuator) {\n                    switch (lookahead.value) {\n                        case ';':\n                            return delegate.markEnd(parseEmptyStatement());\n                        case '{':\n                            return delegate.markEnd(parseBlock());\n                        case '(':\n                            return delegate.markEnd(parseExpressionStatement());\n                        default:\n                            break;\n                    }\n                }\n\n                if (type === Token.Keyword) {\n                    switch (lookahead.value) {\n                        case 'break':\n                            return delegate.markEnd(parseBreakStatement());\n                        case 'continue':\n                            return delegate.markEnd(parseContinueStatement());\n                        case 'debugger':\n                            return delegate.markEnd(parseDebuggerStatement());\n                        case 'do':\n                            return delegate.markEnd(parseDoWhileStatement());\n                        case 'for':\n                            return delegate.markEnd(parseForStatement());\n                        case 'function':\n                            return delegate.markEnd(parseFunctionDeclaration());\n                        case 'if':\n                            return delegate.markEnd(parseIfStatement());\n                        case 'return':\n                            return delegate.markEnd(parseReturnStatement());\n                        case 'switch':\n                            return delegate.markEnd(parseSwitchStatement());\n                        case 'throw':\n                            return delegate.markEnd(parseThrowStatement());\n                        case 'try':\n                            return delegate.markEnd(parseTryStatement());\n                        case 'var':\n                            return delegate.markEnd(parseVariableStatement());\n                        case 'while':\n                            return delegate.markEnd(parseWhileStatement());\n                        case 'with':\n                            return delegate.markEnd(parseWithStatement());\n                        default:\n                            break;\n                    }\n                }\n\n                expr = parseExpression();\n\n                // 12.12 Labelled Statements\n                if ((expr.type === Syntax.Identifier) && match(':')) {\n                    lex();\n\n                    key = '$' + expr.name;\n                    if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n                        throwError({}, Messages.Redeclaration, 'Label', expr.name);\n                    }\n\n                    state.labelSet[key] = true;\n                    labeledBody = parseStatement();\n                    delete state.labelSet[key];\n                    return delegate.markEnd(delegate.createLabeledStatement(expr, labeledBody));\n                }\n\n                consumeSemicolon();\n\n                return delegate.markEnd(delegate.createExpressionStatement(expr));\n            }\n\n            // 13 Function Definition\n\n            function parseFunctionSourceElements() {\n                var sourceElement, sourceElements = [], token, directive, firstRestricted,\n                    oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody;\n\n                skipComment();\n                delegate.markStart();\n                expect('{');\n\n                while (index < length) {\n                    if (lookahead.type !== Token.StringLiteral) {\n                        break;\n                    }\n                    token = lookahead;\n\n                    sourceElement = parseSourceElement();\n                    sourceElements.push(sourceElement);\n                    if (sourceElement.expression.type !== Syntax.Literal) {\n                        // this is not directive\n                        break;\n                    }\n                    directive = source.slice(token.range[0] + 1, token.range[1] - 1);\n                    if (directive === 'use strict') {\n                        strict = true;\n                        if (firstRestricted) {\n                            throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);\n                        }\n                    } else {\n                        if (!firstRestricted && token.octal) {\n                            firstRestricted = token;\n                        }\n                    }\n                }\n\n                oldLabelSet = state.labelSet;\n                oldInIteration = state.inIteration;\n                oldInSwitch = state.inSwitch;\n                oldInFunctionBody = state.inFunctionBody;\n\n                state.labelSet = {};\n                state.inIteration = false;\n                state.inSwitch = false;\n                state.inFunctionBody = true;\n\n                while (index < length) {\n                    if (match('}')) {\n                        break;\n                    }\n                    sourceElement = parseSourceElement();\n                    if (typeof sourceElement === 'undefined') {\n                        break;\n                    }\n                    sourceElements.push(sourceElement);\n                }\n\n                expect('}');\n\n                state.labelSet = oldLabelSet;\n                state.inIteration = oldInIteration;\n                state.inSwitch = oldInSwitch;\n                state.inFunctionBody = oldInFunctionBody;\n\n                return delegate.markEnd(delegate.createBlockStatement(sourceElements));\n            }\n\n            function parseParams(firstRestricted) {\n                var param, params = [], token, stricted, paramSet, key, message;\n                expect('(');\n\n                if (!match(')')) {\n                    paramSet = {};\n                    while (index < length) {\n                        token = lookahead;\n                        param = parseVariableIdentifier();\n                        key = '$' + token.value;\n                        if (strict) {\n                            if (isRestrictedWord(token.value)) {\n                                stricted = token;\n                                message = Messages.StrictParamName;\n                            }\n                            if (Object.prototype.hasOwnProperty.call(paramSet, key)) {\n                                stricted = token;\n                                message = Messages.StrictParamDupe;\n                            }\n                        } else if (!firstRestricted) {\n                            if (isRestrictedWord(token.value)) {\n                                firstRestricted = token;\n                                message = Messages.StrictParamName;\n                            } else if (isStrictModeReservedWord(token.value)) {\n                                firstRestricted = token;\n                                message = Messages.StrictReservedWord;\n                            } else if (Object.prototype.hasOwnProperty.call(paramSet, key)) {\n                                firstRestricted = token;\n                                message = Messages.StrictParamDupe;\n                            }\n                        }\n                        params.push(param);\n                        paramSet[key] = true;\n                        if (match(')')) {\n                            break;\n                        }\n                        expect(',');\n                    }\n                }\n\n                expect(')');\n\n                return {\n                    params: params,\n                    stricted: stricted,\n                    firstRestricted: firstRestricted,\n                    message: message\n                };\n            }\n\n            function parseFunctionDeclaration() {\n                var id, params = [], body, token, stricted, tmp, firstRestricted, message, previousStrict;\n\n                skipComment();\n                delegate.markStart();\n\n                expectKeyword('function');\n                token = lookahead;\n                id = parseVariableIdentifier();\n                if (strict) {\n                    if (isRestrictedWord(token.value)) {\n                        throwErrorTolerant(token, Messages.StrictFunctionName);\n                    }\n                } else {\n                    if (isRestrictedWord(token.value)) {\n                        firstRestricted = token;\n                        message = Messages.StrictFunctionName;\n                    } else if (isStrictModeReservedWord(token.value)) {\n                        firstRestricted = token;\n                        message = Messages.StrictReservedWord;\n                    }\n                }\n\n                tmp = parseParams(firstRestricted);\n                params = tmp.params;\n                stricted = tmp.stricted;\n                firstRestricted = tmp.firstRestricted;\n                if (tmp.message) {\n                    message = tmp.message;\n                }\n\n                previousStrict = strict;\n                body = parseFunctionSourceElements();\n                if (strict && firstRestricted) {\n                    throwError(firstRestricted, message);\n                }\n                if (strict && stricted) {\n                    throwErrorTolerant(stricted, message);\n                }\n                strict = previousStrict;\n\n                return delegate.markEnd(delegate.createFunctionDeclaration(id, params, [], body));\n            }\n\n            function parseFunctionExpression() {\n                var token, id = null, stricted, firstRestricted, message, tmp, params = [], body, previousStrict;\n\n                delegate.markStart();\n                expectKeyword('function');\n\n                if (!match('(')) {\n                    token = lookahead;\n                    id = parseVariableIdentifier();\n                    if (strict) {\n                        if (isRestrictedWord(token.value)) {\n                            throwErrorTolerant(token, Messages.StrictFunctionName);\n                        }\n                    } else {\n                        if (isRestrictedWord(token.value)) {\n                            firstRestricted = token;\n                            message = Messages.StrictFunctionName;\n                        } else if (isStrictModeReservedWord(token.value)) {\n                            firstRestricted = token;\n                            message = Messages.StrictReservedWord;\n                        }\n                    }\n                }\n\n                tmp = parseParams(firstRestricted);\n                params = tmp.params;\n                stricted = tmp.stricted;\n                firstRestricted = tmp.firstRestricted;\n                if (tmp.message) {\n                    message = tmp.message;\n                }\n\n                previousStrict = strict;\n                body = parseFunctionSourceElements();\n                if (strict && firstRestricted) {\n                    throwError(firstRestricted, message);\n                }\n                if (strict && stricted) {\n                    throwErrorTolerant(stricted, message);\n                }\n                strict = previousStrict;\n\n                return delegate.markEnd(delegate.createFunctionExpression(id, params, [], body));\n            }\n\n            // 14 Program\n\n            function parseSourceElement() {\n                if (lookahead.type === Token.Keyword) {\n                    switch (lookahead.value) {\n                        case 'const':\n                        case 'let':\n                            return parseConstLetDeclaration(lookahead.value);\n                        case 'function':\n                            return parseFunctionDeclaration();\n                        default:\n                            return parseStatement();\n                    }\n                }\n\n                if (lookahead.type !== Token.EOF) {\n                    return parseStatement();\n                }\n            }\n\n            function parseSourceElements() {\n                var sourceElement, sourceElements = [], token, directive, firstRestricted;\n\n                while (index < length) {\n                    token = lookahead;\n                    if (token.type !== Token.StringLiteral) {\n                        break;\n                    }\n\n                    sourceElement = parseSourceElement();\n                    sourceElements.push(sourceElement);\n                    if (sourceElement.expression.type !== Syntax.Literal) {\n                        // this is not directive\n                        break;\n                    }\n                    directive = source.slice(token.range[0] + 1, token.range[1] - 1);\n                    if (directive === 'use strict') {\n                        strict = true;\n                        if (firstRestricted) {\n                            throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);\n                        }\n                    } else {\n                        if (!firstRestricted && token.octal) {\n                            firstRestricted = token;\n                        }\n                    }\n                }\n\n                while (index < length) {\n                    sourceElement = parseSourceElement();\n                    if (typeof sourceElement === 'undefined') {\n                        break;\n                    }\n                    sourceElements.push(sourceElement);\n                }\n                return sourceElements;\n            }\n\n            function parseProgram() {\n                var body;\n\n                skipComment();\n                delegate.markStart();\n                strict = false;\n                peek();\n                body = parseSourceElements();\n                return delegate.markEnd(delegate.createProgram(body));\n            }\n\n            function collectToken() {\n                var start, loc, token, range, value;\n\n                skipComment();\n                start = index;\n                loc = {\n                    start: {\n                        line: lineNumber,\n                        column: index - lineStart\n                    }\n                };\n\n                token = extra.advance();\n                loc.end = {\n                    line: lineNumber,\n                    column: index - lineStart\n                };\n\n                if (token.type !== Token.EOF) {\n                    range = [token.range[0], token.range[1]];\n                    value = source.slice(token.range[0], token.range[1]);\n                    extra.tokens.push({\n                        type: TokenName[token.type],\n                        value: value,\n                        range: range,\n                        loc: loc\n                    });\n                }\n\n                return token;\n            }\n\n            function collectRegex() {\n                var pos, loc, regex, token;\n\n                skipComment();\n\n                pos = index;\n                loc = {\n                    start: {\n                        line: lineNumber,\n                        column: index - lineStart\n                    }\n                };\n\n                regex = extra.scanRegExp();\n                loc.end = {\n                    line: lineNumber,\n                    column: index - lineStart\n                };\n\n                if (!extra.tokenize) {\n                    // Pop the previous token, which is likely '/' or '/='\n                    if (extra.tokens.length > 0) {\n                        token = extra.tokens[extra.tokens.length - 1];\n                        if (token.range[0] === pos && token.type === 'Punctuator') {\n                            if (token.value === '/' || token.value === '/=') {\n                                extra.tokens.pop();\n                            }\n                        }\n                    }\n\n                    extra.tokens.push({\n                        type: 'RegularExpression',\n                        value: regex.literal,\n                        range: [pos, index],\n                        loc: loc\n                    });\n                }\n\n                return regex;\n            }\n\n            function filterTokenLocation() {\n                var i, entry, token, tokens = [];\n\n                for (i = 0; i < extra.tokens.length; ++i) {\n                    entry = extra.tokens[i];\n                    token = {\n                        type: entry.type,\n                        value: entry.value\n                    };\n                    if (extra.range) {\n                        token.range = entry.range;\n                    }\n                    if (extra.loc) {\n                        token.loc = entry.loc;\n                    }\n                    tokens.push(token);\n                }\n\n                extra.tokens = tokens;\n            }\n\n            function createLocationMarker() {\n\n                if (!extra.loc && !extra.range) {\n                    return null;\n                }\n\n                skipComment();\n\n                return {\n                    marker: [index, lineNumber, index - lineStart, 0, 0, 0],\n\n                    end: function () {\n                        this.marker[3] = index;\n                        this.marker[4] = lineNumber;\n                        this.marker[5] = index - lineStart;\n                    },\n\n                    apply: function (node) {\n                        if (extra.range) {\n                            node.range = [this.marker[0], this.marker[3]];\n                        }\n                        if (extra.loc) {\n                            node.loc = {\n                                start: {\n                                    line: this.marker[1],\n                                    column: this.marker[2]\n                                },\n                                end: {\n                                    line: this.marker[4],\n                                    column: this.marker[5]\n                                }\n                            };\n                        }\n                        node = delegate.postProcess(node);\n                    }\n                };\n            }\n\n            function patch() {\n                if (typeof extra.tokens !== 'undefined') {\n                    extra.advance = advance;\n                    extra.scanRegExp = scanRegExp;\n\n                    advance = collectToken;\n                    scanRegExp = collectRegex;\n                }\n            }\n\n            function unpatch() {\n                if (typeof extra.scanRegExp === 'function') {\n                    advance = extra.advance;\n                    scanRegExp = extra.scanRegExp;\n                }\n            }\n\n            function tokenize(code, options) {\n                var toString,\n                    token,\n                    tokens;\n\n                toString = String;\n                if (typeof code !== 'string' && !(code instanceof String)) {\n                    code = toString(code);\n                }\n\n                delegate = SyntaxTreeDelegate;\n                source = code;\n                index = 0;\n                lineNumber = (source.length > 0) ? 1 : 0;\n                lineStart = 0;\n                length = source.length;\n                lookahead = null;\n                state = {\n                    allowIn: true,\n                    labelSet: {},\n                    inFunctionBody: false,\n                    inIteration: false,\n                    inSwitch: false,\n                    lastCommentStart: -1,\n                };\n\n                extra = {};\n\n                // Options matching.\n                options = options || {};\n\n                // Of course we collect tokens here.\n                options.tokens = true;\n                extra.tokens = [];\n                extra.tokenize = true;\n                // The following two fields are necessary to compute the Regex tokens.\n                extra.openParenToken = -1;\n                extra.openCurlyToken = -1;\n\n                extra.range = (typeof options.range === 'boolean') && options.range;\n                extra.loc = (typeof options.loc === 'boolean') && options.loc;\n\n                if (typeof options.comment === 'boolean' && options.comment) {\n                    extra.comments = [];\n                }\n                if (typeof options.tolerant === 'boolean' && options.tolerant) {\n                    extra.errors = [];\n                }\n\n                if (length > 0) {\n                    if (typeof source[0] === 'undefined') {\n                        // Try first to convert to a string. This is good as fast path\n                        // for old IE which understands string indexing for string\n                        // literals only and not for string object.\n                        if (code instanceof String) {\n                            source = code.valueOf();\n                        }\n                    }\n                }\n\n                patch();\n\n                try {\n                    peek();\n                    if (lookahead.type === Token.EOF) {\n                        return extra.tokens;\n                    }\n\n                    token = lex();\n                    while (lookahead.type !== Token.EOF) {\n                        try {\n                            token = lex();\n                        } catch (lexError) {\n                            token = lookahead;\n                            if (extra.errors) {\n                                extra.errors.push(lexError);\n                                // We have to break on the first error\n                                // to avoid infinite loops.\n                                break;\n                            } else {\n                                throw lexError;\n                            }\n                        }\n                    }\n\n                    filterTokenLocation();\n                    tokens = extra.tokens;\n                    if (typeof extra.comments !== 'undefined') {\n                        tokens.comments = extra.comments;\n                    }\n                    if (typeof extra.errors !== 'undefined') {\n                        tokens.errors = extra.errors;\n                    }\n                } catch (e) {\n                    throw e;\n                } finally {\n                    unpatch();\n                    extra = {};\n                }\n                return tokens;\n            }\n\n            function parse(code, options) {\n                var program, toString;\n\n                toString = String;\n                if (typeof code !== 'string' && !(code instanceof String)) {\n                    code = toString(code);\n                }\n\n                delegate = SyntaxTreeDelegate;\n                source = code;\n                index = 0;\n                lineNumber = (source.length > 0) ? 1 : 0;\n                lineStart = 0;\n                length = source.length;\n                lookahead = null;\n                state = {\n                    allowIn: true,\n                    labelSet: {},\n                    inFunctionBody: false,\n                    inIteration: false,\n                    inSwitch: false,\n                    lastCommentStart: -1,\n                    markerStack: []\n                };\n\n                extra = {};\n                if (typeof options !== 'undefined') {\n                    extra.range = (typeof options.range === 'boolean') && options.range;\n                    extra.loc = (typeof options.loc === 'boolean') && options.loc;\n\n                    if (extra.loc && options.source !== null && options.source !== undefined) {\n                        extra.source = toString(options.source);\n                    }\n\n                    if (typeof options.tokens === 'boolean' && options.tokens) {\n                        extra.tokens = [];\n                    }\n                    if (typeof options.comment === 'boolean' && options.comment) {\n                        extra.comments = [];\n                    }\n                    if (typeof options.tolerant === 'boolean' && options.tolerant) {\n                        extra.errors = [];\n                    }\n                }\n\n                if (length > 0) {\n                    if (typeof source[0] === 'undefined') {\n                        // Try first to convert to a string. This is good as fast path\n                        // for old IE which understands string indexing for string\n                        // literals only and not for string object.\n                        if (code instanceof String) {\n                            source = code.valueOf();\n                        }\n                    }\n                }\n\n                patch();\n                try {\n                    program = parseProgram();\n                    if (typeof extra.comments !== 'undefined') {\n                        program.comments = extra.comments;\n                    }\n                    if (typeof extra.tokens !== 'undefined') {\n                        filterTokenLocation();\n                        program.tokens = extra.tokens;\n                    }\n                    if (typeof extra.errors !== 'undefined') {\n                        program.errors = extra.errors;\n                    }\n                } catch (e) {\n                    throw e;\n                } finally {\n                    unpatch();\n                    extra = {};\n                }\n\n                return program;\n            }\n\n            // Sync with package.json and component.json.\n            exports.version = '1.1.0-dev';\n\n            exports.tokenize = tokenize;\n\n            exports.parse = parse;\n\n            // Deep copy.\n            exports.Syntax = (function () {\n                var name, types = {};\n\n                if (typeof Object.create === 'function') {\n                    types = Object.create(null);\n                }\n\n                for (name in Syntax) {\n                    if (Syntax.hasOwnProperty(name)) {\n                        types[name] = Syntax[name];\n                    }\n                }\n\n                if (typeof Object.freeze === 'function') {\n                    Object.freeze(types);\n                }\n\n                return types;\n            }());\n\n        }));\n        /* vim: set sw=4 ts=4 et tw=80 : */\n    };\n\n    require('MobileServiceClient');\n})(this || exports);\n\n// SIG // Begin signature block\n// SIG // MIIkCwYJKoZIhvcNAQcCoIIj/DCCI/gCAQExDzANBglg\n// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor\n// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC\n// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg\n// SIG // 5sLedTbDAAC4og1zXXPj1Me2K6nAY/HGqXiy0M0ohPug\n// SIG // gg2SMIIGEDCCA/igAwIBAgITMwAAABp3u3SzB9EWuAAA\n// SIG // AAAAGjANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV\n// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH\n// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv\n// SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT\n// SIG // aWduaW5nIFBDQSAyMDExMB4XDTEzMDkyNDE3NDE0MVoX\n// SIG // DTE0MTIyNDE3NDE0MVowgYMxCzAJBgNVBAYTAlVTMRMw\n// SIG // EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt\n// SIG // b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp\n// SIG // b24xDTALBgNVBAsTBE1PUFIxHjAcBgNVBAMTFU1pY3Jv\n// SIG // c29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB\n// SIG // BQADggEPADCCAQoCggEBAOV8Ly0Mqex6qDTgTD9/SQ4N\n// SIG // thWtGRPeUoommRVxqWInBzelgzCCYmwLo/0GDRcUBubg\n// SIG // rcyVlgogWqKW4eBXMDxdYpvFXYkM0DTf2dj6Ne8RI4vA\n// SIG // +etK9DnaL3EQ6xGzLDejcOiGFz7vKkbQjse5SAChN/HH\n// SIG // yOfSHmtKKvLGTB1wn3zDaEKOPO2BGlLjPjKUPX4Y8Zvk\n// SIG // S1wR5NbDhR5sAzBzvMmoAX2drdH1c/BbGnsvH4syvrOO\n// SIG // tTvZ9//zX7MTfBOTV7igXjWYg6E0NPLFBJ+5/kYXDJHf\n// SIG // 7w9V9uzMOclhZaEp7r4RNxu3bkJVycw10VKzA3CcmDSe\n// SIG // KTapFxlfC78CAwEAAaOCAX8wggF7MB8GA1UdJQQYMBYG\n// SIG // CCsGAQUFBwMDBgorBgEEAYI3TAgBMB0GA1UdDgQWBBQk\n// SIG // Kz3KkJyeKHVyPM8Msz3mrCRWWTBRBgNVHREESjBIpEYw\n// SIG // RDENMAsGA1UECxMETU9QUjEzMDEGA1UEBRMqMzE2NDIr\n// SIG // Mjg2MGI1MmUtYzRhMy00NTRkLWJjMWUtMzJjNWFkZDE3\n// SIG // ZTkwMB8GA1UdIwQYMBaAFEhuZOVQBdOCqhc3NyK1bajK\n// SIG // dQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu\n// SIG // bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNp\n// SIG // Z1BDQTIwMTFfMjAxMS0wNy0wOC5jcmwwYQYIKwYBBQUH\n// SIG // AQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3Lm1p\n// SIG // Y3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNp\n// SIG // Z1BDQTIwMTFfMjAxMS0wNy0wOC5jcnQwDAYDVR0TAQH/\n// SIG // BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAEXJgC/KsJrYE\n// SIG // BWbcOFjX1GzaI6pgLUEouGs/lHL/PmJRZVkXMVELP9QJ\n// SIG // Djg2gynneJhUbaQWwS5EwMhRoD7SUEWF5sK8eW5bWzTh\n// SIG // FtQxOcUjWbcH50yxiU+AYsdXoEl+nsMYwCJG6LBt5iDG\n// SIG // KR8ImoRtyoAOg729Ft5/vgjzzYB5kdP43OhDTPZmAhJq\n// SIG // 9ICOSwbRbYgMW9GBHO30shHFkC9Um41gByQhgW00y5Kd\n// SIG // jqpAE0KsID/g9hBlwFvKgKjaju+GWpek9RFLhoVvYquK\n// SIG // LqBPKA0S+cXNkUcDCsQ2yWPX3feFelj9W4fsZsGY/I3u\n// SIG // WHqintEde4lJjh77PsOyiu7EZ0ildbH9zmyms6DgFFeI\n// SIG // b3xI8UiMT5Ieq2wkZAy6sa6I6V2NLz8LUQJcaqysGUzU\n// SIG // THpfuRu1TjWua7G/2FoorUjKFVO4i7QsjOrEpBPklxlR\n// SIG // JvEgH36kw+Oux3uJ+WOhtqgGXELd+GR37wYxpR/pEV/L\n// SIG // pKAVaJ0Y8Sh7ehOuckYgvyJ9CEwg0jCWMQ2W1Cf0RkVg\n// SIG // LZHM1/C6VHlGTZ4w6NsgKzC2chWxQaeU4KKUJQf8+Hnt\n// SIG // JsLwZj2Pg/7645RBM513Rr0lrAKkq0jqh21bQL0m7/UY\n// SIG // Fzkc/Mnd2ey+06QFZIC417t6tSHGCCN7gbKcjDxc+wvi\n// SIG // U+LB6boPX1Awggd6MIIFYqADAgECAgphDpDSAAAAAAAD\n// SIG // MA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzET\n// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk\n// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0\n// SIG // aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0\n// SIG // aWZpY2F0ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgy\n// SIG // MDU5MDlaFw0yNjA3MDgyMTA5MDlaMH4xCzAJBgNVBAYT\n// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH\n// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y\n// SIG // cG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2Rl\n// SIG // IFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB\n// SIG // AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS6\n// SIG // 8rZYIZ9CGypr6VpQqrgGOBoESbp/wwwe3TdrxhLYC/A4\n// SIG // wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S35tT\n// SIG // sgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDP\n// SIG // s0S3XdjELgN1q2jzy23zOlyhFvRGuuA4ZKxuZDV4pqBj\n// SIG // Dy3TQJP4494HDdVceaVJKecNvqATd76UPe/74ytaEB9N\n// SIG // ViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa\n// SIG // 8qEvWeSQOy2uM1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5W\n// SIG // kSE1JcM5bmR/U7qcD60ZI4TL9LoDho33X/DQUr+MlIe8\n// SIG // wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEo\n// SIG // SZ1fiOIlXdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez\n// SIG // +ADhvKwCgl/bwBWzvRvUVUvnOaEP6SNJvBi4RHxF5MHD\n// SIG // cnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2w\n// SIG // ZuLBl4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xc\n// SIG // v3coKPHtbcMojyyPQDdPweGFRInECUzF1KVDL3SV9274\n// SIG // eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM\n// SIG // CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAw\n// SIG // HQYDVR0OBBYEFEhuZOVQBdOCqhc3NyK1bajKdQKVMBkG\n// SIG // CSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQE\n// SIG // AwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaA\n// SIG // FHItOgIxkEO5FAVO4eqnxzHRI4k0MFoGA1UdHwRTMFEw\n// SIG // T6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9w\n// SIG // a2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFf\n// SIG // MjAxMV8wM18yMi5jcmwwXgYIKwYBBQUHAQEEUjBQME4G\n// SIG // CCsGAQUFBzAChkJodHRwOi8vd3d3Lm1pY3Jvc29mdC5j\n// SIG // b20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAx\n// SIG // MV8wM18yMi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYB\n// SIG // BAGCNy4DMIGDMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3\n// SIG // Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFy\n// SIG // eWNwcy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcA\n// SIG // YQBsAF8AcABvAGwAaQBjAHkAXwBzAHQAYQB0AGUAbQBl\n// SIG // AG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY\n// SIG // 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjD\n// SIG // ctFtg/6+P+gKyju/R6mj82nbY78iNaWXXWWEkH2LRlBV\n// SIG // 2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUdd5Q5\n// SIG // 4ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvt\n// SIG // aPpoLpWgKj8qa1hJYx8JaW5amJbkg/TAj/NGK978O9C9\n// SIG // Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYfwzIY4vDF\n// SIG // Lc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf4\n// SIG // 3iw6IGmYslmJaG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN\n// SIG // 9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1jNpeG39rz+PIW\n// SIG // oZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDc\n// SIG // xhsEvt9Bxw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQ\n// SIG // mYAf0AApxbGbpT9Fdx41xtKiop96eiL6SJUfq/tHI4D1\n// SIG // nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA\n// SIG // 6mk7r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrv\n// SIG // QQqxP/uozKRdwaGIm1dxVk5IRcBCyZt2WwqASGv9eZ/B\n// SIG // vW1taslScxMNelDNMYIV0TCCFc0CAQEwgZUwfjELMAkG\n// SIG // A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO\n// SIG // BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m\n// SIG // dCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9zb2Z0\n// SIG // IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAABp3u3Sz\n// SIG // B9EWuAAAAAAAGjANBglghkgBZQMEAgEFAKCB1DAZBgkq\n// SIG // hkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3\n// SIG // AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQx\n// SIG // IgQg9hiexyo7dV+p93AWxFF1EQDB8dsSaZb2r9MB9V5+\n// SIG // L3QwaAYKKwYBBAGCNwIBDDFaMFigPoA8AE0AaQBjAHIA\n// SIG // bwBzAG8AZgB0ACAAVwBpAG4AZABvAHcAcwAgAEEAegB1\n// SIG // AHIAZQAgAE0AbwBiAGkAbABloRaAFGh0dHA6Ly93d3cu\n// SIG // YXNwLm5ldC8gMA0GCSqGSIb3DQEBAQUABIIBAGf/v8Bx\n// SIG // DjriYPkE+S2bUengCcW8vdj5ZsOYMEYaqXfI6dh8Y/y6\n// SIG // dGiWKhZm3G2C0F0Gp4fc2vwSGPE3xHPZyOTN8oqU/0C2\n// SIG // inzgF09U5Pgm8fR0/5gv1ZT4UVQ6cY6jyQhQzdww57vb\n// SIG // W10Bo7iC4JyseftHXNRjZDL67KC76TvwscieXKX/A6kL\n// SIG // RjxCvxJHkp0OhXLnrmaC06WwaCWNLveC5/xYhwkUyghw\n// SIG // TxBasSLgWj015KkC/e2CGrXmttgfKkQpiJAGevwTy1GK\n// SIG // hd1Re3lFtlJLWzgciIBzLoL5UnlKWhdTF8PF6x02SbN3\n// SIG // qFTvE1Q6iueqn7/AdagsJjo5vDihghM1MIITMQYKKwYB\n// SIG // BAGCNwMDATGCEyEwghMdBgkqhkiG9w0BBwKgghMOMIIT\n// SIG // CgIBAzEPMA0GCWCGSAFlAwQCAQUAMIIBNQYLKoZIhvcN\n// SIG // AQkQAQSgggEkBIIBIDCCARwCAQEGCisGAQQBhFkKAwEw\n// SIG // MTANBglghkgBZQMEAgEFAAQgQrvkJoFTxoEIkxPN7qs+\n// SIG // 7Z4i0A7qrtj6oQRvRfFRtNsCBlOi+IPLAxgTMjAxNDA3\n// SIG // MDIyMjMzMzYuMzAxWjAHAgEBgAIB9KCBsaSBrjCBqzEL\n// SIG // MAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQH\n// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y\n// SIG // cG9yYXRpb24xDTALBgNVBAsTBE1PUFIxJzAlBgNVBAsT\n// SIG // Hm5DaXBoZXIgRFNFIEVTTjo3RDJFLTM3ODItQjBGNzEl\n// SIG // MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy\n// SIG // dmljZaCCDsAwggZxMIIEWaADAgECAgphCYEqAAAAAAAC\n// SIG // MA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzET\n// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk\n// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0\n// SIG // aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0\n// SIG // aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0xMDA3MDEy\n// SIG // MTM2NTVaFw0yNTA3MDEyMTQ2NTVaMHwxCzAJBgNVBAYT\n// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH\n// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y\n// SIG // cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l\n// SIG // LVN0YW1wIFBDQSAyMDEwMIIBIjANBgkqhkiG9w0BAQEF\n// SIG // AAOCAQ8AMIIBCgKCAQEAqR0NvHcRijog7PwTl/X6f2mU\n// SIG // a3RUENWlCgCChfvtfGhLLF/Fw+Vhwna3PmYrW/AVUycE\n// SIG // MR9BGxqVHc4JE458YTBZsTBED/FgiIRUQwzXTbg4CLNC\n// SIG // 3ZOs1nMwVyaCo0UN0Or1R4HNvyRgMlhgRvJYR4YyhB50\n// SIG // YWeRX4FUsc+TTJLBxKZd0WETbijGGvmGgLvfYfxGwScd\n// SIG // JGcSchohiq9LZIlQYrFd/XcfPfBXday9ikJNQFHRD5wG\n// SIG // Pmd/9WbAA5ZEfu/QS/1u5ZrKsajyeioKMfDaTgaRtogI\n// SIG // Neh4HLDpmc085y9Euqf03GS9pAHBIAmTeM38vMDJRF1e\n// SIG // FpwBBU8iTQIDAQABo4IB5jCCAeIwEAYJKwYBBAGCNxUB\n// SIG // BAMCAQAwHQYDVR0OBBYEFNVjOlyKMZDzQ3t8RhvFM2ha\n// SIG // hW1VMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsG\n// SIG // A1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1Ud\n// SIG // IwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1Ud\n// SIG // HwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0\n// SIG // LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1\n// SIG // dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQROMEww\n// SIG // SgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0\n// SIG // LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAt\n// SIG // MDYtMjMuY3J0MIGgBgNVHSABAf8EgZUwgZIwgY8GCSsG\n// SIG // AQQBgjcuAzCBgTA9BggrBgEFBQcCARYxaHR0cDovL3d3\n// SIG // dy5taWNyb3NvZnQuY29tL1BLSS9kb2NzL0NQUy9kZWZh\n// SIG // dWx0Lmh0bTBABggrBgEFBQcCAjA0HjIgHQBMAGUAZwBh\n// SIG // AGwAXwBQAG8AbABpAGMAeQBfAFMAdABhAHQAZQBtAGUA\n// SIG // bgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAB+aIUQ3i\n// SIG // xuCYP4FxAz2do6Ehb7Prpsz1Mb7PBeKp/vpXbRkws8LF\n// SIG // Zslq3/Xn8Hi9x6ieJeP5vO1rVFcIK1GCRBL7uVOMzPRg\n// SIG // Eop2zEBAQZvcXBf/XPleFzWYJFZLdO9CEMivv3/Gf/I3\n// SIG // fVo/HPKZeUqRUgCvOA8X9S95gWXZqbVr5MfO9sp6AG9L\n// SIG // MEQkIjzP7QOllo9ZKby2/QThcJ8ySif9Va8v/rbljjO7\n// SIG // Yl+a21dA6fHOmWaQjP9qYn/dxUoLkSbiOewZSnFjnXsh\n// SIG // bcOco6I8+n99lmqQeKZt0uGc+R38ONiU9MalCpaGpL2e\n// SIG // Gq4EQoO4tYCbIjggtSXlZOz39L9+Y1klD3ouOVd2onGq\n// SIG // BooPiRa6YacRy5rYDkeagMXQzafQ732D8OE7cQnfXXSY\n// SIG // Ighh2rBQHm+98eEA3+cxB6STOvdlR3jo+KhIq/fecn5h\n// SIG // a293qYHLpwmsObvsxsvYgrRyzR30uIUBHoD7G4kqVDmy\n// SIG // W9rIDVWZeodzOwjmmC3qjeAzLhIp9cAvVCch98isTtoo\n// SIG // uLGp25ayp0Kiyc8ZQU3ghvkqmqMRZjDTu3QyS99je/WZ\n// SIG // ii8bxyGvWbWu3EQ8l1Bx16HSxVXjad5XwdHeMMD9zOZN\n// SIG // +w2/XU/pnR4ZOC+8z1gFLu8NoFA12u8JJxzVs341Hgi6\n// SIG // 2jbb01+P3nSISRIwggTSMIIDuqADAgECAhMzAAAAUf1o\n// SIG // 4FZkFcM6AAAAAABRMA0GCSqGSIb3DQEBCwUAMHwxCzAJ\n// SIG // BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw\n// SIG // DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv\n// SIG // ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m\n// SIG // dCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTE0MDUyMzE3\n// SIG // MjAwOVoXDTE1MDgyMzE3MjAwOVowgasxCzAJBgNVBAYT\n// SIG // AlVTMQswCQYDVQQIEwJXQTEQMA4GA1UEBxMHUmVkbW9u\n// SIG // ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u\n// SIG // MQ0wCwYDVQQLEwRNT1BSMScwJQYDVQQLEx5uQ2lwaGVy\n// SIG // IERTRSBFU046N0QyRS0zNzgyLUIwRjcxJTAjBgNVBAMT\n// SIG // HE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2UwggEi\n// SIG // MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCdoMHD\n// SIG // CiueaTXOKReXVF98kGuwid2UcrElgBt/PMHHmOrGTOl+\n// SIG // c9s6zVaU+VhAp4QuvSiuv0PxPKhuRYS2C1bHkd2qtEYq\n// SIG // FFsxEYrAwyJuYLbQf1z+dowW4GpHRxIDnBaCTsmeMYrp\n// SIG // geEpQkeOq9UUFIqywM9wTrQTdj521UugGhaSuXqXxClO\n// SIG // TuYWfoyUiVLmVBc3MCfV3JmgJD3j8KrbDf/LWaNpBpmw\n// SIG // 9dKF4NVYQE5cxW74ELcmELrUO4RNYslxwM5jmHYG0w5t\n// SIG // 04YPjt1vEPdamwS2VM2nh9WMbCZqtHExX7DRjilvcSNr\n// SIG // rb1CZGMKc4DwQS+LhQVozmG9qyMFAgMBAAGjggEbMIIB\n// SIG // FzAdBgNVHQ4EFgQURsQO7BFCXdbg4fxRLbhcjVj7mZQw\n// SIG // HwYDVR0jBBgwFoAU1WM6XIoxkPNDe3xGG8UzaFqFbVUw\n// SIG // VgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNy\n// SIG // b3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljVGlt\n// SIG // U3RhUENBXzIwMTAtMDctMDEuY3JsMFoGCCsGAQUFBwEB\n// SIG // BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNy\n// SIG // b3NvZnQuY29tL3BraS9jZXJ0cy9NaWNUaW1TdGFQQ0Ff\n// SIG // MjAxMC0wNy0wMS5jcnQwDAYDVR0TAQH/BAIwADATBgNV\n// SIG // HSUEDDAKBggrBgEFBQcDCDANBgkqhkiG9w0BAQsFAAOC\n// SIG // AQEAWtViIXrzBsM1Rp+3TjCPFV5I+6mPSuVT7f04J2t7\n// SIG // paDp7R3Mc6XKcw7r955bYklZn8QprPy3CF9hQ9wFRAMl\n// SIG // lxnUPgimir3uN5+AT7Q4OrNLCC0UfFJguGVH70NIGUBc\n// SIG // Bh2cENhuDgV+Clf6Wdt2kNGAX9GbX/SwpQtzGTcPHLLd\n// SIG // /qVOqovfwvnrH25O/8nhHLn8BndeBR5uF6Lvzfvc15JQ\n// SIG // /1qAM0JHvnmAwohkszevEdqJXTEDYYIc8lm5utllZ/ep\n// SIG // ilMP6qa0kOzT+hhmu5ARgIMv0ivUYuoqxGRb8DneJyq7\n// SIG // xiBkQoYxrk6fI96Ci7hbBsuiX77RzLAI9M1xiaGCA3Ew\n// SIG // ggJZAgEBMIHboYGxpIGuMIGrMQswCQYDVQQGEwJVUzEL\n// SIG // MAkGA1UECBMCV0ExEDAOBgNVBAcTB1JlZG1vbmQxHjAc\n// SIG // BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjENMAsG\n// SIG // A1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0Ug\n// SIG // RVNOOjdEMkUtMzc4Mi1CMEY3MSUwIwYDVQQDExxNaWNy\n// SIG // b3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloiUKAQEwCQYF\n// SIG // Kw4DAhoFAAMVALPt+sqglgTwYRiGYELfAzF7wkNfoIHC\n// SIG // MIG/pIG8MIG5MQswCQYDVQQGEwJVUzETMBEGA1UECBMK\n// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG\n// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMQ0wCwYD\n// SIG // VQQLEwRNT1BSMScwJQYDVQQLEx5uQ2lwaGVyIE5UUyBF\n// SIG // U046QjAyNy1DNkY4LTFEODgxKzApBgNVBAMTIk1pY3Jv\n// SIG // c29mdCBUaW1lIFNvdXJjZSBNYXN0ZXIgQ2xvY2swDQYJ\n// SIG // KoZIhvcNAQEFBQACBQDXXtiGMCIYDzIwMTQwNzAyMTkx\n// SIG // NDE0WhgPMjAxNDA3MDMxOTE0MTRaMHcwPQYKKwYBBAGE\n// SIG // WQoEATEvMC0wCgIFANde2IYCAQAwCgIBAAICFP0CAf8w\n// SIG // BwIBAAICGEEwCgIFANdgKgYCAQAwNgYKKwYBBAGEWQoE\n// SIG // AjEoMCYwDAYKKwYBBAGEWQoDAaAKMAgCAQACAxbjYKEK\n// SIG // MAgCAQACAwehIDANBgkqhkiG9w0BAQUFAAOCAQEAZJef\n// SIG // 1XB+JEJFWptXBC9dbb9RTgadYGIHVafUracbInoCBnKu\n// SIG // pqejRB6/6L3C8tDlB8e88KWfoOyU8E2ztkmoe/+iMnfd\n// SIG // FCBl/Kr1hg5eqDl/FzuBJnxuVfUhoeEr4KBsFUyDAAr0\n// SIG // tP/fqbNg7NvnoGxA98FzOcwClnkXwfoNqNEPCVNQMl1M\n// SIG // WppiHJ8euUHwyStpUQAJWvtfDbq1V+6iffjVz6ropsD8\n// SIG // g9EcR2sMyJBvnjerLBMWc2+D42FE4y+kYIQrFOTNYSpT\n// SIG // Wu4HjD+rihH7ogpTCcw0SrJDdtwC8+p3h+ZNofko/HJe\n// SIG // +X3hdTRw5HEh1pneAua8f1zYbPA+0TGCAvUwggLxAgEB\n// SIG // MIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo\n// SIG // aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK\n// SIG // ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT\n// SIG // HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMz\n// SIG // AAAAUf1o4FZkFcM6AAAAAABRMA0GCWCGSAFlAwQCAQUA\n// SIG // oIIBMjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQw\n// SIG // LwYJKoZIhvcNAQkEMSIEIJ/iS74sdIh+qa8TKZ8Muyyl\n// SIG // 2unmARB6Mbxeu9jpuVAoMIHiBgsqhkiG9w0BCRACDDGB\n// SIG // 0jCBzzCBzDCBsQQUs+36yqCWBPBhGIZgQt8DMXvCQ18w\n// SIG // gZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK\n// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG\n// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD\n// SIG // VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx\n// SIG // MAITMwAAAFH9aOBWZBXDOgAAAAAAUTAWBBQ3yqzN6dia\n// SIG // OdFlEysS4AhfelZPljANBgkqhkiG9w0BAQsFAASCAQAu\n// SIG // DKwxTB5bIEVh5j1NnmKV9hK5m2bK0JIZJcxmrlXBnulE\n// SIG // Avx3sL6naqmgV5lCJ6BOVhUQa533yd72DkjNyN8kHqxl\n// SIG // cfErcCixC5y4V/kvBopb5DvdIYZpi4rQqf0MkbHCEREc\n// SIG // 0co/C4eWH8i9krIUW3jWOV+YUxM0usVR4e/chup+Egyj\n// SIG // Cq7PJT7gEvObT8nP/oNlN3g/RnQFJl+Es9UQfispVDwe\n// SIG // GsnGt2q/CvUKrHX6TVEyrVCqMmUnYJpCZ31Zz5/wmRrq\n// SIG // WjEP/UZY/KEoj9IexJgQ8StIgAqbvmkrB1YIeB5/bc3X\n// SIG // mJdKRaidh1ecguKokL6t7d+XAfuXG0AO\n// SIG // End signature block\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/default.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n(function () {\n    \"use strict\";\n\n    WinJS.Binding.optimizeBindingReferences = true;\n\n    var app = WinJS.Application;\n    var activation = Windows.ApplicationModel.Activation;\n\n    app.onactivated = function (args) {\n        if (args.detail.kind === activation.ActivationKind.launch) {\n            if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {\n                // TODO: This application has been newly launched. Initialize\n                // your application here.\n            } else {\n                // TODO: This application has been reactivated from suspension.\n                // Restore application state here.\n            }\n\n            args.setPromise(WinJS.UI.processAll().then(function () {\n                return app.local.exists('savedAppInfo.txt').then(function (exists) {\n                    if (exists) {\n                        return app.local.readText('savedAppInfo.txt').then(function (data) {\n                            var state = JSON.parse(data);\n                            var lastAppUrl = state.lastAppUrl;\n                            var lastAppKey = state.lastAppKey;\n                            var lastUploadUrl = state.lastUploadUrl;\n                            if (lastAppUrl) {\n                                document.getElementById('txtAppUrl').value = lastAppUrl;\n                            }\n                            if (lastAppKey) {\n                                document.getElementById('txtAppKey').value = lastAppKey;\n                            }\n                            if (lastUploadUrl) {\n                                document.getElementById('txtSendLogsUrl').value = lastUploadUrl;\n                            }\n                        });\n                    } else {\n                        return null;\n                    }\n                });\n            }));\n        }\n    };\n\n    app.oncheckpoint = function (args) {\n        // TODO: This application is about to be suspended. Save any state\n        // that needs to persist across suspensions here. You might use the\n        // WinJS.Application.sessionState object, which is automatically\n        // saved and restored across suspension. If you need to complete an\n        // asynchronous operation before your application is suspended, call\n        // args.setPromise().\n    };\n\n    app.start();\n})();\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/platformSpecificFunctions.js",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nfunction createPlatformSpecificFunctions() {\n\n    var alertFunction;\n    if (typeof alert === 'undefined') {\n        alertFunction = function (text, done) {\n            var dialog = new Windows.UI.Popups.MessageDialog(text);\n            dialog.showAsync().done(function () {\n                if (typeof done === 'function') {\n                    done();\n                }\n            });\n        }\n    }\n\n    var saveAppInfo = function (lastAppUrl, lastAppKey, lastUploadLogUrl) {\n        /// <param name=\"lastAppUrl\" type=\"String\">The last value used in the application URL text box</param>\n        /// <param name=\"lastAppKey\" type=\"String\">The last value used in the application key text box</param>\n        /// <param name=\"lastUploadLogUrl\" type=\"String\">The last value used in the upload logs URL text box</param>\n        var state = {\n            lastAppUrl: lastAppUrl,\n            lastAppKey: lastAppKey,\n            lastUploadUrl: lastUploadLogUrl\n        };\n\n        WinJS.Application.local.writeText('savedAppInfo.txt', JSON.stringify(state));\n    }\n\n    return {\n        alert: alertFunction,\n        saveAppInfo: saveAppInfo,\n        IsHTMLApplication: false,\n    };\n}\n\nvar testPlatform = createPlatformSpecificFunctions();\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/tests/where.txt",
    "content": "The files in this folder are linked to ..\\..\\..\\..\\TestFramework\\js\\tests\n"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs/js/wl.js",
    "content": "﻿(function(){if(!window.WL){var Hf=\"download\",n=\"interface_method\",Yd=\"WL.Internal.jsonp.\",Ke=2000,fc=\"body\",K=\"callback\",gc=\"code\",Xe=\"element\",bc=\"error\",Be=\"error_description\",Qb=\"logging\",nd=\"tracing\",Rb=\"message\",w=\"method\",Mb=\"file_input\",Wc=\"stream_input\",P=\"file_name\",O=\"file_output\",o=\"overwrite\",q=\"path\",ud=\"pretty\",ff=\"result\",gf=\"status\",Vc=\"return_ssl_resources\",Pe=\"success\",hf=\"error\",Pc=\"suppress_redirects\",wb=\"suppress_response_codes\",t=\"x_http_live_library\",cc=0,Gb=1,b=\"access_token\",Lf=\"appstate\",r=\"authentication_token\",mc=\"client_id\",Nf=\"display\",Sd=\"code\",k=\"error\",V=\"error_description\",qc=\"expires\",jc=\"expires_in\",Pf=\"locale\",ac=\"redirect_uri\",td=\"response_type\",yf=\"request_ts\",H=\"scope\",Kd=\"session\",ef=\"secure_cookie\",Pd=\"state\",y=\"status\",sf=[b,r,H,jc,qc],B=\"connected\",zd=\"notConnected\",If=\"unchecked\",X=\"unknown\",Id=\"expiring\",Of=\"expired\",dc=\"live-sdk-upload\",Tb=\"live-sdk-download\",Qf=\"appId\",Af=\"channelUrl\",Mf=\"wl_auth\",Bf=\"wl_upload\",Hd=\"page\",Cf=\"touch\",C=\"none\",jf=\"none\",Yb=\"auth.login\",Vb=\"auth.logout\",db=\"auth.sessionChange\",Eb=\"auth.statusChange\",tc=\"wl.log\",A=\"access_denied\",ne=\"connection_failed\",Re=\"invalid_cookie\",Kb=\"invalid_request\",ib=\"request_canceled\",h=\"request_failed\",Dd=\"timed_out\",gb=\"unknown_user\",Le=\"user_canceled\",ie=\"METHOD: Failed to get the required user permission to perform this operation.\",je=\"The request could not be completed due to browser issues.\",ke=\"The request could not be completed due to browser limitations.\",hb=\"METHOD: The operation has been canceled.\",fe=\"The 'wl_auth' cookie is not valid.\",ee=\"The 'wl_auth' cookie has been modified incorrectly. Ensure that the redirect URI only modifies sub-keys for values received from the OAuth endpoint.\",ae=\"The 'wl_auth' cookie has multiple values. Ensure that the redirect URI specifies a cookie domain and path when setting cookies.\",Rc=\"METHOD: The input property 'PARAM' does not reference a valid DOM element.\",Yc=\"METHOD: An exception was received for EVENT. Detail: MESSAGE\",Sc=\"METHOD: The WL object must be initialized with WL.init() prior to invoking this method.\",Nc=\"A connection to the server could not be established.\",de=\"The user could not be identified.\",oe=\"The pending login request has been canceled.\",Bc=\"Logging out the user is not supported in current session because the user is logged in with a Microsoft account on this computer. To logout, the user may quit the app or log out from the computer.\",Jc=\"METHOD: The input value for parameter/property 'PARAM' is not valid.\",Kc=\"METHOD: The input parameter/property 'PARAM' must be included.\",Cc=\"METHOD: The type of the provided value for the input parameter/property 'PARAM' is not valid.\",Z=\"METHOD: There is a pending METHOD request, the current call will be ignored.\",tb=Z.replace(/METHOD/g,\"WL.login\"),Wd=Z.replace(/METHOD/g,\"WL.fileDialog\"),Zd=Z.replace(/METHOD/g,\"WL.upload\"),ce=\"METHOD: The input property 'redirect_uri' is required if the value of the 'response_type' property is 'code'.\",yc=\"WL.init: The redirect_uri value should be the same as the value of 'Redirect Domain' of your registered app. It must begin with 'http://' or 'https://'.\",be=\"METHOD: The api call is not supported on this platform.\",wc=\"WL.init: The response_type value 'code' is not supported on this platform.\",Se=\"METHOD: The input property 'redirect_uri' must use https: to match the scheme of the current page.\",le=\"The auth request is timed out.\",qe=\"The popup is closed without receiving consent.\",Ye=0,ge=1,me=2,Te=3,S=\"GET\",wd=\"POST\",Bd=\"PUT\",kd=\"DELETE\",kf=\"COPY\",lf=\"MOVE\",pe=30000,Ud=\"METHOD\",f=\"onSuccess\",g=\"onError\",m=\"onProgress\",Df=\"redirect_type\",Ue=\"auth\",Ee=\"upload\",Ve=\"code\",Me=\"token\",ob=\"https:\",rb=\"http:\",D=\"wl.signin\",tf=\"wl.skydrive\",ve=\"wl.skydrive_update\",Wb=/\\s|,/,W=\"boolean\",Rf=\"dom\",j=\"function\",Jd=\"number\",c=\"string\",F=\"object\",Pb=\"string_or_array\",lb=\"undefined\",Ff=\"name\",of=\"element\",vf=\"brand\",Gf=\"type\",we=\"sign_in_text\",re=\"sign_out_text\",wf=\"theme\",Oe=\"onloggedin\",Ge=\"onloggedout\",pf=\"onerror\",We=\"messenger\",mf=\"hotmail\",cf=\"skydrive\",nf=\"windows\",Fe=\"windowslive\",Ef=\"none\",Od=\"signin\",Ae=Od,Je=\"login\",se=\"connect\",ze=\"custom\",He=\"blue\",ye=\"white\",Ie=\"dark\",xe=\"light\",qf=\"id\",xf=\"auth_server\",df=\"apiservice_uri\",rf=\"skydrive_uri\",pc=\"sdk_root\",Sf=\"wl_trace\";window.WL={getSession:function(){try{return a.getSession()}catch(b){M(b.message)}},getLoginStatus:function(){try{return a.getLoginStatus({callback:Ob(arguments,j,2),internal:false},Ob(arguments,W,2))}catch(d){return u(\"WL.getLoginStatus\",d)}},logout:function(b){try{U(b,z,\"WL.logout\");return a.logout({callback:b})}catch(c){return u(\"WL.logout\",c)}},canLogout:function(){return a.canLogout()},api:function(){try{var b=Xc(arguments);L(b,[{name:q,type:c,optional:false},{name:w,type:c,optional:true},z],\"WL.api\");return a.api(b)}catch(f){return u(\"WL.api\",f)}}};var kc=[Yb,Vb,db,Eb,tc];WL.Event={subscribe:function(b,a){try{U([b,a],[{name:\"event\",type:c,allowedValues:kc,caseSensitive:true,optional:false},Gc],\"WL.Event.subscribe\");d.subscribe(b,a)}catch(e){M(e.message)}},unsubscribe:function(b,a){try{U([b,a],[{name:\"event\",type:c,allowedValues:kc,caseSensitive:true,optional:false},z],\"WL.Event.unsubscribe\");d.unsubscribe(b,a)}catch(e){M(e.message)}}};WL.Internal={};var d={subscribe:function(a,b){s(\"Subscribe \"+a);var c=d.getHandlers(a);c.push(b)},unsubscribe:function(c,f){s(\"Unsubscribe \"+c);var b=d.getHandlers(c),e=[];if(f!=null){var g=false;for(var a=0;a<b.length;a++)if(g||b[a]!=f)e.push(b[a]);else g=true}d._eHandlers[c]=e},getHandlers:function(b){if(!d._eHandlers)d._eHandlers={};var a=d._eHandlers[b];if(a==null)d._eHandlers[b]=a=[];return a},notify:function(c,e){s(\"Notify \"+c);var b=d.getHandlers(c);for(var a=0;a<b.length;a++)b[a](e)}},a={_status:cc,_statusRequests:[],_rpsAuth:false};a.appInit=function(c){if(a._status==Gb){var e=a._session.getNormalStatus();return J(\"WL.init\",true,c.callback,e)}var b=WL[pc];if(b){if(b.charAt(b.length-1)!==\"/\")b+=\"/\";a[pc]=b}var d=c[Qb];if(d===false)a._logEnabled=d;if(a.testInit)a.testInit(c);a._status=Gb;return Mc(c)};a.onloadInit=function(){Cd();Fd()};function x(b){if(a._status===cc)throw new Error(Sc.replace(\"METHOD\",b))}function sb(){return WL.Internal.tApp||a}a.api=function(a){x(\"WL.api\");var c=a[fc];if(c){a=E(kb(c),a);delete a[fc]}var b=a[w];a[w]=(b!=null?G(b):S).toUpperCase();return (new rc(a)).execute()};var Zc=function(){var b=a.api.lastId,c;b=b===undefined?1:b+1;c=\"WLAPI_REQ_\"+b+\"_\"+(new Date).getTime();a.api.lastId=b;return c},rc=function(b){var c=this;c._properties=b;c._completed=false;c._id=Zc();b[ud]=false;b[Vc]=a._isHttps;b[t]=a[t];var d=b[q];c._url=Zb()+(d.charAt(0)===\"/\"?d.substring(1):d);c._promise=new e(\"WL.api\",null,null)};rc.prototype={execute:function(){qd(this);return this._promise},onCompleted:function(a){if(this._completed)return;this._completed=true;l(this._properties.callback,a,true);if(a[k])this._promise[g](a);else this._promise[f](a)}};function ld(e,c,a,d){a=a?G(a):\"\";var b=a!==\"\"?ec(a):null;if(b===null){b={};if(c/100!==2)b[bc]=pd(c,d)}e.onCompleted(b)}function pd(c,b){var a={};a[gc]=h;a[Rb]=b||Nc;return a}function Lb(){var d=null;if(!a._rpsAuth){var c=sb()._session.getStatus();if(c.status===Id||c.status===B)d=c.session[b]}return d}function kb(i){var c={};for(var b in i){var a=i[b],j=typeof a;if(a instanceof Array)for(var d=0;d<a.length;d++){var f=a[d],l=typeof f;if(j==F&&!(a instanceof Date)){var h=kb(f);for(var e in h)c[b+\".\"+d+\".\"+e]=h[e]}else c[b+\".\"+d]=f}else if(j==F&&!(a instanceof Date)){var k=kb(a);for(var g in k)c[b+\".\"+g]=k[g]}else c[b]=a}return c}function ad(c){if(!Qd())return false;var b=sd(c),a=new XMLHttpRequest;a.open(b.method,b.url,true);var d=c._properties[w];if(b.method!=S)a.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\");a.onreadystatechange=function(){if(a.readyState==4)ld(c,a.status,a.responseText)};a.send(b.body);return true}function sd(e){var a=od(e._properties,null,[K,q,w]),f=e._properties[w],g=Nb(e._url,{\"ts\":(new Date).getTime()}),h=Lb(),d,c;a[Pc]=\"true\";a[wb]=\"true\";if(h!=null)a[b]=h;if(f===S||f===kd){d=null;c=S;g+=\"&\"+fb(a)}else{d=fb(a);c=wd}g+=\"&method=\"+f;return {url:g,method:c,body:d}}a.download=function(a){Fc(a);x(\"WL.download\");return (new Ub(a)).execute()};function Hb(c,f){var d=f||{},g=Zb();if(!mb(c))c=g+(c.charAt(0)===\"/\"?c.substring(1):c);var e=Lb();if(e)d[b]=e;d[t]=a[t];return Nb(c,d)}function yb(a,b){b.downloadComplete(false,p(h,\"WL.download: \"+a))}var xb=\"notStarted\",Ib=\"ready\",Y=\"downloadCompleted\",vb=\"downloadFailed\",zb=\"canceled\",Ec=\"completed\";function Ub(a){this._properties=a;this._status=xb}Ub.prototype={execute:function(){this._promise=new e(\"WL.download\",this,null);this._process();return this._promise},cancel:function(){this._status=zb;if(this._cancel)try{this._cancel()}catch(a){}else{this._result=p(ib,hb.replace(\"METHOD\",\"WL.download\"));this._process()}},downloadComplete:function(b,c){var a=this;a._result=c;a._status=b?Y:vb;a._process()},downloadProgress:function(a){this._promise[m](a)},_process:function(){switch(this._status){case xb:this._start();break;case Ib:this._download();break;case Y:case vb:case zb:this._complete()}},_start:function(){var b=this;a.getLoginStatus({internal:true,callback:function(){b._status=Ib;b._process()}})},_download:function(){var a=this;Ad(a)},_complete:function(){var a=this,c=a._result,d=a._status===Y?f:g;a._status=Ec;var b=a._properties[K];if(b)b(c);a._promise[d](c)}};a.login=function(b,d){x(\"WL.login\");dd(b);if(!jd(d))return J(\"WL.login\",false,null,p(h,tb));var c=a._session.tryGetResponse(b.normalizedScope);if(c!=null)return J(\"WL.login\",true,b.callback,c);a._pendingLogin=id(b,Tc);return a._pendingLogin.execute()};function Tc(c,b){a._pendingLogin=null;var d=b[k];if(d)I(\"WL.login: \"+b[V]);else l(c.callback,b,true)}function ed(b){var a=b||\"\";if(a instanceof Array)a=a.join(\" \");return G(a)}a.getSession=function(){x(\"WL.getSession\");return a._session.getStatus()[Kd]};a.getLoginStatus=function(b,f){x(\"WL.getLoginStatus\");b=b||{};if(!f){var d=a._session.tryGetResponse();if(d)return J(\"WL.getLoginStatus\",true,b.callback,d)}s(\"wl_app:getLoginStatus\");var e=a._statusRequests,c=null;if(!a._pendingStatusRequest){c=Ic(b,Hc);a._pendingStatusRequest=c}e.push(b);if(c!=null)c.execute();return a._pendingStatusRequest._promise};function Hc(h,b){var f=a._statusRequests;a._pendingStatusRequest=null;s(\"wl_app:onGetLoginStatusCompleted\");var d=b[k],e=false;while(f.length>0){var c=f.shift(),g=E(b);if(!d||c.internal)l(c.callback,g,true);if(!c.internal)e=true}if(d)if(e&&d!==Dd)I(\"WL.getLoginStatus: \"+b[V]);else s(\"wl_app-onGetLoginStatusCompleted: \"+b[V])}a.logout=function(i){var b=\"WL.logout\";x(b);var d=new e(b,null,null),c=function(c){qb(function(){var e,h=f;if(c){M(c.message);h=g;e=eb(b,b,c)}else e=a._session.getNormalStatus();l(i.callback,e,false);d[h](e)})},h=function(){var b=a._session;if(b.isSignedIn())if(a.canLogout()){b.updateStatus(X);rd(c)}else c(new Error(Bc));else c()};if(a._pendingStatusRequest!=null)a.getLoginStatus({internal:true,callback:h},false);else h();return d};a.upload=function(a){var b=a[n];x(b);L(a,[{name:q,type:c,optional:false},z],b);Ac(a);Oc(a);return (new jb(a)).execute()};function Oc(a){var b=a[Mb],c=a[P];if(b)a[P]=c||b.name}function Dc(a,h,i){var c=a.indexOf(\"?\"),e=c!==-1,g=\"\";if(e){g=a.substring(c+1);a=a.substring(0,c)}var f=typeof h!==lb,j=a.charAt(a.length-1)===\"/\";if(f&&!j)a+=\"/\";var b=a,d={};if(f)b+=encodeURIComponent(h);if(i===\"rename\")d[o]=\"choosenewname\";else d[o]=i;if(e)b=Sb(b,g);return cb(b,d)}function Nd(a){return /^(file|\\/file)/.test(a.toLowerCase())}function cb(b,a){a=a||{};a[wb]=\"true\";return Hb(b,a)}function Ac(a){if(o in a){var b=a[n],d=a[o],f=typeof d,h=f===W,e=f===c;if(!(h||e))throw v(o,b);if(e){var g=/^(true|false|rename)$/i.test(d);if(!g)throw Cb(o,b)}}else a[o]=false}var Ab=0,Bb=1,bb=2,ab=3,N=4,Fb=5,Lc=6;function jb(a){this._props=a;this._status=Ab}jb.prototype={execute:function(){var a=this;a._strategy=a._getStrategy(a._props);a._promise=new e(a._props[n],a,null);a._process();return a._promise},cancel:function(){var a=this;a._status=Fb;if(a._cancel)try{a._cancel()}catch(c){}else{var b=hb.replace(Ud,a._props[n]);a._result=p(ib,b);a._process()}},uploadProgress:function(a){this._promise[m](a)},uploadComplete:function(b,c){var a=this;a._result=c;a._status=b?ab:N;a._process()},onErr:function(c){var a=this._props[n]+\":\"+c,b=p(h,a);this.uploadComplete(false,b)},onResp:function(a){a=a?G(a):\"\";var b=a!==\"\"?ec(a):null;b=b||{};this.uploadComplete(b.error==null,b)},setFileName:function(a){this._props[P]=a},_process:function(){switch(this._status){case Ab:this._start();break;case Bb:this._getUploadPath();break;case bb:this._upload();break;case ab:case N:case Fb:this._complete()}},_start:function(){var a=this;sb().getLoginStatus({internal:true,callback:function(){a._status=Bb;a._process()}})},_getUploadPath:function(){var a=this,c=a._props,b=c[q];if(mb(b)){a._uploadPath=cb(b);a._status=bb;a._process();return}sb().api({path:b}).then(function(i){var d=i.upload_location;if(d){var e=yd(b);d=Sb(d,e);var f=c[P],g=c[o];if(Nd(b))a._uploadPath=cb(d);else a._uploadPath=Dc(d,f,g);a._status=bb}else{a._result=p(h,\"WL.upload: Failed to get upload_location of the resource.\");a._status=N}a._process()},function(b){a._result=b;a._status=N;a._process()})},_upload:function(){this._strategy.upload(this._uploadPath)},_complete:function(){var a=this,c=a._result,d=a._status===ab?f:g;a._status=Lc;var b=a._props[K];if(b)b(c);a._promise[d](c)}};function G(a){return a.replace(/^\\s+|\\s+$/g,\"\")}function E(b,d){var c=d||{};if(b!=null)for(var a in b)c[a]=b[a];return c}function od(e,d,b){var c=E(e,d);for(var a=0;a<b.length;a++)delete c[b[a]];return c}function Ld(d,e){var c=[],b={},a=function(d){for(var a=0;a<d.length;a++){arrElm=d[a];if(arrElm!=\"\"&&!b[arrElm]){b[arrElm]=true;c.push(arrElm)}}};a(d);a(e);return c}function sc(a){return Array.prototype.slice.call(a)}function T(b,a){return function(){if(typeof a===j)return a.apply(b,arguments)}}function vc(a,e){a=\"[WL]\"+a;var b=window.console;if(b&&b.log)switch(e){case \"warning\":b.warn(a);break;case \"error\":b.error(a);break;default:b.log(a)}var d=window.opera;if(d)d.postError(a);var c=window.debugService;if(c)c.trace(a)}function mb(a){return a.indexOf(\"https://\")===0||a.indexOf(\"http://\")===0}function s(b){if(a._traceEnabled)vc(b)}function I(b,c){if(a._logEnabled||a._traceEnabled)vc(b,c);d.notify(tc,b)}if(window.WL&&WL.Internal){WL.Internal.trace=s;WL.Internal.log=I}function M(a){I(a,\"error\")}function ic(a){return document.getElementById(a)}function yd(b){var a=b.indexOf(\"?\");if(a===-1)return \"\";var c=b.indexOf(\"#\",a+1);if(c!==-1)return b.substring(a+1,c);return b.substring(a+1)}function Sb(a,b){if(typeof b===lb||b===null||b===\"\")return a;var c=a.indexOf(\"?\");if(c===-1)return a+\"?\"+b;if(a.charAt(a.length-1)!==\"&\")a+=\"&\";return a+b}function Vd(a){E(uc(a),this)}Vd.prototype={toString:function(){var a=this,b=(a.scheme!=\"\"?a.scheme+\"//\":\"\")+a.host+(a.port!=\"\"?\":\"+a.port:\"\")+a.path;return b},resolve:function(){var a=this;if(a.scheme==\"\"){var b=window.location.port,c=window.location.host;a.scheme=window.location.protocol;a.host=c.split(\":\")[0];a.port=b!=null?b:\"\";if(a.path.charAt(0)!=\"/\")a.path=fd(a.host,window.location.href,a.path)}}};function uc(c){var e=c.indexOf(ob)==0?ob:c.indexOf(rb)==0?rb:\"\",h=\"\",i=\"\",f;if(e!=\"\")var b=c.substring(e.length+2),a=b.indexOf(\"/\"),g=a>0?b.substring(0,a):b,d=g.split(\":\"),h=d[0],i=d.length>1?d[1]:\"\",f=a>0?b.substring(a):\"\";else f=c;return {scheme:e,host:h,port:i,path:f}}function Gd(a){return uc(a.toLowerCase()).host}function fd(e,b,h){var d=function(a,c){charIdx=b.indexOf(c);a=charIdx>0?a.substring(0,charIdx):a;return a};b=d(d(b,\"?\"),\"#\");var f=b.indexOf(e),a=b.substring(f+e.length),g=a.indexOf(\"/\"),c=a.lastIndexOf(\"/\");a=c>=0?a.substring(g,c):a;return a+\"/\"+h}function l(a,b,d,c){if(a!=null){if(c)b[Pd]=c;if(d)a(b);else qb(function(){a(b)})}}function ec(a){if(window.JSON)return JSON.parse(a);else return eval(\"(\"+a+\")\")}function Td(b,c){var d=b.length;for(var a=0;a<d;a++)c(b[a])}function R(c,b){var a={};a[k]=c;a[V]=b;return a}function p(d,c){var a={},b={};a[gc]=d,a[Rb]=c;b[bc]=a;return b}function eb(a,b,c){return p(h,Yc.replace(\"METHOD\",a).replace(\"EVENT\",b).replace(\"MESSAGE\",c.message))}function Uc(b){var a=b.split(\".\");return a[0]+\".\"+a[1]}function qb(a,b){if(window.wlUnitTests)wlUnitTests.delayInvoke(a);else window.setTimeout(a,b||1)}function Cd(){var b=Ed(navigator.userAgent,document.documentMode),c=a[t];a._browser=b;a[t]=c.replace(\"DEVICE\",b.device)}function Ed(a,e){a=a.toLowerCase();var c=\"other\",b={\"firefox\":/firefox/.test(a),\"firefox1.5\":/firefox\\/1\\.5/.test(a),\"firefox2\":/firefox\\/2/.test(a),\"firefox3\":/firefox\\/3/.test(a),\"firefox4\":/firefox\\/4/.test(a),\"ie\":(/msie/.test(a)||/trident/.test(a))&&!/opera/.test(a),\"ie6\":false,\"ie7\":false,\"ie8\":false,\"ie9\":false,\"ie10\":false,\"ie11\":false,\"opera\":/opera/.test(a),\"webkit\":/webkit/.test(a),\"chrome\":/chrome/.test(a),\"mobile\":/mobile/.test(a)||/phone/.test(a)};if(b[\"ie\"]){var d=0;if(e)d=e;else if(/msie 7/.test(a))d=7;d=Math.min(11,Math.max(d,6));c=\"ie\"+d;b[c]=true}else if(b.firefox)c=\"firefox\";else if(b.chrome)c=\"chrome\";else if(b.webkit)c=\"webkit\";else if(b.opera)c=\"opera\";if(b.mobile)c+=\"mobile\";b.device=c;return b}function fb(b){var a=\"\";if(b!=null)for(var c in b){var d=a.length==0?\"\":\"&\",e=b[c];a+=d+encodeURIComponent(c)+\"=\"+encodeURIComponent(gd(e))}return a}function gd(a){if(a instanceof Date){var b=function(a,b){switch(b){case 2:return a<10?\"0\"+a:a;case 3:return (a<10?\"00\":a<100?\"0\":\"\")+a}};return a.getUTCFullYear()+\"-\"+b(a.getUTCMonth()+1,2)+\"-\"+b(a.getUTCDate(),2)+\"T\"+b(a.getUTCHours(),2)+\":\"+b(a.getUTCMinutes(),2)+\":\"+b(a.getUTCSeconds(),2)+\".\"+b(a.getUTCMilliseconds(),3)+\"Z\"}return \"\"+a}function Nb(a,b){return a+(a.indexOf(\"?\")<0?\"?\":\"&\")+fb(b)}var z={name:K,type:j,optional:true},Gc={name:K,type:j,optional:false};function U(a,c,d){if(a instanceof Array)for(var b=0;b<a.length;b++)lc(a[b],c[b],d);else lc(a,c,d)}function lc(c,a,b){Xb(c,a,b);if(a.type===\"properties\")L(c,a.properties,b)}function Xb(f,e,b){var d=e.name,a=typeof f,g=e.type;if(a===\"undefined\"||f==null)if(e.optional)return;else throw Db(d,b);switch(g){case \"string\":if(a!==c)throw v(d,b);if(!e.optional&&G(f)===\"\")throw Db(d,b);break;case \"properties\":if(a!=F)throw v(d,b);break;case \"function\":if(a!=j)throw v(a,b);break;case \"dom\":if(a==c){if(ic(f)==null)throw new Error(Rc.replace(\"METHOD\",b).replace(\"PARAM\",d))}else if(a!=F)throw v(d,b);break;case \"string_or_array\":if(a!==c&&!(f instanceof Array))throw v(a,b);break;default:if(a!==g)throw v(d,b)}if(e.allowedValues!=null)bd(f,e.allowedValues,e.caseSensitive,d,b)}function L(g,c,f){var d=g||{};for(var b=0;b<c.length;b++){var a=c[b],e=d[a.name]||d[a.altName];Xb(e,a,f)}}function bd(d,a,e,f,h){var g=typeof a[0]===c;for(var b=0;b<a.length;b++)if(g&&!e){if(d.toLowerCase()===a[b].toLowerCase())return}else if(d===a[b])return;throw Cb(f,h)}function v(a,b){return new Error(Cc.replace(\"METHOD\",b).replace(\"PARAM\",a))}function Db(a,b){return new Error(Kc.replace(\"METHOD\",b).replace(\"PARAM\",a))}function Cb(c,d,a){var b=Jc.replace(\"METHOD\",d).replace(\"PARAM\",c);if(typeof a!==lb)b+=\" \"+a;return new Error(b)}function Ob(b,d,c){if(b)for(var a=0;a<c&&a<b.length;a++)if(d===typeof b[a])return b[a];return undefined}function Q(h,g){var e=sc(h),a=null,b=null;for(var d=0;d<e.length;d++){var c=e[d],f=typeof c;if(f===F&&a===null)a=E(c);else if(f===j&&b===null)b=c}a=a||{};if(b)a.callback=b;a[n]=g;return a}function Xc(e){var a=sc(e),d=null,b=null;if(typeof a[0]===c){d=a.shift();if(typeof a[0]===c)b=a.shift()}normalizedArgs=Q(a);if(d!==null){normalizedArgs[q]=d;if(b!=null)normalizedArgs[w]=b}return normalizedArgs}function u(a,b){var c=eb(a,a,b);M(b.message);return J(a,false,null,c)}var e=function(b,c,a){this._name=b;this._op=c;this._uplinkPromise=a;this._isCompleted=false;this._listeners=[]};e.prototype={then:function(d,h,c){var b=new e(null,null,this),a={};a[f]=d;a[g]=h;a[m]=c;a.chainedPromise=b;this._listeners.push(a);return b},cancel:function(){if(this._isCompleted)return;if(this._uplinkPromise&&!this._uplinkPromise._isCompleted)this._uplinkPromise.cancel();else{var a=this._op?this._op.cancel:null;if(typeof a===j)this._op.cancel();else this.onError(p(ib,hb.replace(\"METHOD\",this._getName())))}},_getName:function(){if(this._name)return this._name;if(this._op&&typeof this._op._getName===j)return this._op._getName();if(this._uplinkPromise)return this._uplinkPromise._getName();return \"\"},_onEvent:function(b,a){if(this._isCompleted)return;this._isCompleted=a!==m;this._notify(b,a)},_notify:function(b,a){var c=this;Td(this._listeners,function(i){var j=i[a],d=i.chainedPromise,h=a!==m;if(j)try{var e=j.apply(i,b);if(h&&e&&e.then){d._op=e;e.then(function(a){d[f](a)},function(a){d[g](a)},function(a){d[m](a)})}}catch(k){if(h)d.onError(eb(c._getName(),a,k))}else if(h)d[a].apply(d,b)})}};e.prototype[f]=function(){this._onEvent(arguments,f)};e.prototype[g]=function(){this._onEvent(arguments,g)};e.prototype[m]=function(){this._onEvent(arguments,m)};function J(h,d,b,i){var a=new e(h,null,null),c=d?f:g;if(typeof b===j)a.then(function(a){b(a)});qb(function(){a[c](i)});return a}var sf=[b,r,H,jc,qc],hc=\"apiservice_uri\",nc=\"auth_server\",Xd=-2147023579;WL.init=function(d){try{var b=E(d);U(b,{name:\"properties\",type:\"properties\",optional:false,properties:[{name:H,type:Pb,optional:true},{name:ac,type:c,optional:true},{name:Qb,type:W,optional:true}]},\"WL.init\");return a.appInit(b)}catch(e){return u(\"WL.init\",e)}};WL.login=function(){try{var b=Q(arguments);L(b,[{name:H,type:Pb,optional:true},z],\"WL.login\");return a.login(b)}catch(e){return u(\"WL.login\",e)}};WL.backgroundDownload=function(){try{var b=\"WL.backgroundDownload\",c=Q(arguments,b);return a.download(c)}catch(f){return u(b,f)}};WL.backgroundUpload=function(){try{var b=\"WL.backgroundUpload\",c=Q(arguments,b);return a.upload(c)}catch(f){return u(b,f)}};function Mc(b){a._authScope=ed(b[H]);if(b[td]===Sd)throw new Error(wc);a._isHttps=true;a._authScope=Qc(a._authScope);if(b[nd])a._traceEnabled=true;a._domain=md(b);var d=Windows.Security.Authentication.Web.WebAuthenticationBroker.getCurrentApplicationCallbackUri().absoluteUri;b[mc]=d;xc();a._session=new oc(d);var c=new e(\"WL.init\");a.getLoginStatus({internal:true,callback:function(a){var b=!!a.error?g:f;c[b](a)}},true);return c}function md(c){var a=c[ac],b=null;if(a!=null)if(a.indexOf(rb)===0||a.indexOf(ob)===0)b=Gd(a);else throw new Error(yc);return b}function Fd(){a._logEnabled=true;a._traceEnabled=false;hd(function(){var a=window.wlAsyncInit;if(a&&typeof a===j)a.call()})}function Qc(a){a=a||D;if(a.indexOf(D)<0)a=a+\" \"+D;return G(a)}function xc(){var b=Windows.Networking.BackgroundTransfer,a=function(a){try{var b=a.attachAsync().then(function(){},function(){},function(){})}catch(c){}};b.BackgroundDownloader.getCurrentDownloadsAsync(Tb).then(function(b){if(b&&b.size>0)for(i=0;i<b.size;i++)a(b[i])});b.BackgroundUploader.getCurrentUploadsAsync(dc).then(function(b){if(b&&b.size>0)for(i=0;i<b.size;i++)a(b[i])})}function jd(c){var b=a._pendingLogin;if(b!=null){if(!c)I(tb);return false}return true}function dd(d){var b=d[H]||[],e=a._authScope.split(Wb);if(typeof b===c)b=b.split(Wb);d.normalizedScope=Ld(e,b).join(\" \")}function id(a,b){return new pb(Hd,a.normalizedScope,a,b)}function Ic(c,b){return new pb(C,a._authScope,c,b)}a.canLogout=function(){return Windows.Security.Authentication.OnlineId.OnlineIdAuthenticator().canSignOut};function rd(a){try{var c=Windows.Security.Authentication.OnlineId,b=new c.OnlineIdAuthenticator,d=b.signOutUserAsync().then(function(){a()},a)}catch(e){I(e);a(e)}}var pb=function(b,g,c,d){var a=this;a._display=b;a._completed=false;a._requestFired=false;a._properties=c;a._callback=d;a._scope=g;var f=b===C?\"WL.login\":\"WL.getLoginStatus\";a._promise=new e(f,null,null)};pb.prototype={execute:function(){return this._sendRequest(this._scope)},_sendRequest:function(b){var a=this,d=T(a,a._onResponse),c=Windows.Security.Authentication.OnlineId,e=a._display===C?c.CredentialPromptType.doNotPrompt:c.CredentialPromptType.promptIfNeeded;a._currentScope=b;vd(e,b,d);return a._promise},_onResponse:function(b){var a=this;if(a._display===C&&b[k]===A&&a._currentScope!==D)a._sendRequest(D);else a._onComplete(b)},_onComplete:function(c){var e=this;if(!e._completed){e._completed=true;if(e._display===C&&e._scope===D&&(c[k]===A||c[k]===gb)){var i=c[k]===A?zd:X;a._session.updateStatus(i)}else a._session.onAuthResponse(c);var h=false,d=a._session.getStatus();if(this._display!==C)if(c[b]==null){h=true;d=c}else a._authScope=this._scope;else if(c[k])switch(c[k]){case gb:case A:break;default:h=true;d=c}this._callback(this._properties,d);if(h)this._promise[g](d);else this._promise[f](d)}}};function vd(g,n,c){var d=\"The authentication process failed with error: \",e=\" To configure your app correctly, please follow the instructions on http://go.microsoft.com/fwlink/?LinkId=220871.\",j=-2147023579,i=-2138701812,m=-2138701821,k=-2138701823;try{var f=a._authMethod?a._authMethod:xd;f(g,n,\"DELEGATION\").then(function(m){var j=m.tickets[0].value,i=null;if(j&&j!==\"\")if(a._domain)f(g,a._domain,\"JWT\").then(function(a){var d=a.tickets[0].value;i={};i[b]=j;i[r]=d;l(c,i,false)},function(a){var b=h,f=d+a.message;if(a.name===\"WinRTError\"&&a.number===k){b=Kb;f+=e}i=R(b,f);l(c,i,false)});else{i={};i[b]=j}else i=R(h,d+\"Unable to get access token.\");if(i)l(c,i,false)},function(b){var a=h,f=d+b.message;switch(b.name){case \"Canceled\":a=A;break;case \"WinRTError\":switch(b.number){case j:a=gb;break;case i:a=A;break;case m:a=Kb;f+=e;break;default:a=h}}var g=R(a,f);l(c,g,false)})}catch(p){var o=R(h,d+p.message);l(c,o,false)}}function xd(c,f,e){var a=Windows.Security.Authentication.OnlineId,b=new a.OnlineIdAuthenticator,d=new a.OnlineIdServiceTicketRequest(f,e);return b.authenticateUserAsync([d],c)}var oc=function(c){var a=this;a._state={};a._state[mc]=c;a._state[y]=X;a._state[b]=null};oc.prototype={isSignedIn:function(){return this._state[y]===B},getStatus:function(){var a=null,c=this._state[y];if(c===B){a={};a[b]=this._state[b];a[r]=this._state[r]}return {status:c,session:a}},getNormalStatus:function(){return this.getStatus()},updateStatus:function(a){var c=this._state[y],e=this._state[b];if(c!=a){this._state[y]=a;this._stateDirty=true;this.onStatusChanged(c,a);if(e!=this._state[b])d.notify(db,this.getNormalStatus())}},tryGetResponse:function(){return null},onAuthResponse:function(i){var g=false,a=this._state,h=a[y],c=i[b],e=i[r];if(c&&a[b]!=c||e&&a[r]!=e){a[b]=c;a[r]=e;g=true}var f=a[b]?B:X;if(h!=f){this._statusChecked=true;a[y]=f;this.onStatusChanged(h,f)}if(g)d.notify(db,this.getNormalStatus())},onStatusChanged:function(c,a){s(\"AuthSession: Auth status changed: \"+c+\"=>\"+a);if(c!=a){var f=c==B,e=a==B;if(!e)if(this._state[b])delete this._state[b];if(c!=a)d.notify(Eb,this.getStatus());if(e!=f)if(e)d.notify(Yb,this.getStatus());else d.notify(Vb,this.getStatus())}}};function qd(b){var c=function(){ad(b)};a.getLoginStatus({internal:true,callback:c})}function Qd(){return true}function Zb(){return a._settings[a._env][hc]}function Fc(a){var b=a[n];L(a,[{name:q,type:c,optional:false},{name:O,type:F,optional:true},z],b);if(a[O]&&!(a[O]instanceof Windows.Storage.StorageFile))throw new Error(b+\": unsupported file_output object type\")}function Ad(b){var a=b._properties,d=a[q],c=a[O];zc(d,c,b)}function zc(b,g,a){var e=mb(b)?b:Hb(b),f=new Windows.Foundation.Uri(e);try{var c=new Windows.Networking.BackgroundTransfer.BackgroundDownloader;c.group=Tb;var h=c.createDownload(f,g),d=h.startAsync().then(function(b){var c={content_type:b.getResponseInformation().headers.lookup(\"Content-Type\"),stream:b.getResultStreamAt(0)};a.downloadComplete(true,c)},function(b){yb(b.message,a)},function(d){var b=d.progress,c={bytesTransferred:b.bytesReceived,totalBytes:b.totalBytesToReceive,progressPercentage:b.totalBytesToReceive==0?0:b.bytesReceived/b.totalBytesToReceive*100};a.downloadProgress(c)});a._cancel=T(d,d.cancel)}catch(i){yb(i.message,a)}}jb.prototype._getStrategy=function(a){var c=a[n],b=a[Mb],d=a[Wc];if(b)if(b instanceof Windows.Storage.StorageFile)return new ub(this,b);else throw new Error(c+\": unsupported file_input object type\");else if(d)return new ub(this,d);else throw new Error(c+\": file_input or stream_input must be specified.\")};function ub(a,b){this.upload=function(i){var h=new Windows.Foundation.Uri(i),c=new Windows.Networking.BackgroundTransfer.BackgroundUploader,g=function(f){var c=\"\",d=f.getResultStreamAt(0);if(d){var b=new Windows.Storage.Streams.DataReader(d),e=function(d){if(d)c=b.readString(d);a.onResp(c);b.close()};b.loadAsync(100000).then(e,e)}else a.onResp(c)},d=function(b){a.onErr(b.message)},f=function(d){var b=d.progress,c={bytesTransferred:b.bytesSent,totalBytes:b.totalBytesToSend,progressPercentage:b.totalBytesToSend==0?0:b.bytesSent/b.totalBytesToSend*100};a.uploadProgress(c)},e=function(b){try{b()}catch(c){a.onErr(c.message)}};c.group=dc;c.method=Bd;e(function(){var i;if(b instanceof Windows.Storage.StorageFile)i=c.createUpload(h,b).startAsync().then(g,d,f);else i=c.createUploadFromStreamAsync(h,b).then(function(b){e(function(){i=b.startAsync().then(g,d,f);a._cancel=T(i,i.cancel)})},d);a._cancel=T(i,i.cancel)})}}function hd(a){var b=document.readyState;if(b===\"complete\"||document.body!==null)a();else window.addEventListener(\"DOMContentLoaded\",a,false)}a[t]=\"Windows/HTML8_\"+Uc(\"5.5.3502.1014\");if(!a._settings)a._settings={};var Rd=a._settings,nb={},Md=\"login.live.com\";nb[hc]=\"https://apis.live.net/v5.0/\";nb[nc]=Md;Rd[\"PROD\"]=nb;a._env=\"PROD\";a.onloadInit()}})();"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs/package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\">\n  <Identity Name=\"10805zumoTestUser.zumotestblu2\" Version=\"1.0.0.0\" Publisher=\"CN=B2D1C358-6AF8-4416-BF73-129CC1F3C152\" />\n  <Properties>\n    <DisplayName>zumotestblu2</DisplayName>\n    <PublisherDisplayName>zumoTestUser</PublisherDisplayName>\n    <Logo>images\\storelogo.png</Logo>\n  </Properties>\n  <Prerequisites>\n    <OSMinVersion>6.2.1</OSMinVersion>\n    <OSMaxVersionTested>6.2.1</OSMaxVersionTested>\n  </Prerequisites>\n  <Resources>\n    <Resource Language=\"x-generate\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"App\" StartPage=\"default.html\">\n      <VisualElements DisplayName=\"zumotestblu2\" Logo=\"images\\logo.png\" SmallLogo=\"images\\smalllogo.png\" Description=\"ZumoE2ETestAppJs\" ForegroundText=\"light\" BackgroundColor=\"#464646\" ToastCapable=\"true\">\n        <DefaultTile ShowName=\"allLogos\" />\n        <SplashScreen Image=\"images\\splashscreen.png\" />\n      </VisualElements>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n    <Capability Name=\"picturesLibrary\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"LiveSDK\" version=\"5.5\" targetFramework=\"win80\" />\n  <package id=\"WindowsAzure.MobileServices.WinJS\" version=\"1.2.2\" targetFramework=\"win80\" />\n</packages>"
  },
  {
    "path": "test/JavaScript/ZumoE2ETestAppJs/ZumoE2ETestAppJs.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nProject(\"{262852C6-CD72-467D-83FE-5EEB1973A190}\") = \"ZumoE2ETestAppJs\", \"ZumoE2ETestAppJs\\ZumoE2ETestAppJs.jsproj\", \"{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ZumoE2ETestAppHTML\", \"ZumoE2ETestAppHTML\\ZumoE2ETestAppHTML.csproj\", \"{31DC90AB-38E6-496B-A74F-1123FB6E00A8}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \".nuget\", \".nuget\", \"{A68C2458-CE17-4347-B970-73AE214874F3}\"\n\tProjectSection(SolutionItems) = preProject\n\t\t.nuget\\NuGet.Config = .nuget\\NuGet.Config\n\t\t.nuget\\NuGet.targets = .nuget\\NuGet.targets\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Debug|x64.Build.0 = Debug|x64\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Debug|x86.Build.0 = Debug|x86\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Release|ARM.Build.0 = Release|ARM\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Release|x64.ActiveCfg = Release|x64\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Release|x64.Build.0 = Release|x64\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Release|x64.Deploy.0 = Release|x64\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Release|x86.ActiveCfg = Release|x86\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Release|x86.Build.0 = Release|x86\n\t\t{4864EA0B-C8A1-4AF3-88A2-D2DAF96C3421}.Release|x86.Deploy.0 = Release|x86\n\t\t{31DC90AB-38E6-496B-A74F-1123FB6E00A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{31DC90AB-38E6-496B-A74F-1123FB6E00A8}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{31DC90AB-38E6-496B-A74F-1123FB6E00A8}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{31DC90AB-38E6-496B-A74F-1123FB6E00A8}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{31DC90AB-38E6-496B-A74F-1123FB6E00A8}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{31DC90AB-38E6-496B-A74F-1123FB6E00A8}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{31DC90AB-38E6-496B-A74F-1123FB6E00A8}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{31DC90AB-38E6-496B-A74F-1123FB6E00A8}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{31DC90AB-38E6-496B-A74F-1123FB6E00A8}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{31DC90AB-38E6-496B-A74F-1123FB6E00A8}.Release|x86.ActiveCfg = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "test/PLib/.gitignore",
    "content": "# Visual Studio files #\n#######################\n*.suo\nobj/\nbin/\n*.csproj.user\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/.gitignore",
    "content": "packages/*\n.nuget/NuGet.exe\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/.nuget/NuGet.Config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <solution>\n    <add key=\"disableSourceControlIntegration\" value=\"true\" />\n  </solution>\n</configuration>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/.nuget/NuGet.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n    <PropertyGroup>\n        <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">$(MSBuildProjectDirectory)\\..\\</SolutionDir>\n        \n        <!-- Enable the restore command to run before builds -->\n        <RestorePackages Condition=\"  '$(RestorePackages)' == '' \">false</RestorePackages>\n\n        <!-- Property that enables building a package from a project -->\n        <BuildPackage Condition=\" '$(BuildPackage)' == '' \">false</BuildPackage>\n\n        <!-- Determines if package restore consent is required to restore packages -->\n        <RequireRestoreConsent Condition=\" '$(RequireRestoreConsent)' != 'false' \">true</RequireRestoreConsent>\n        \n        <!-- Download NuGet.exe if it does not already exist -->\n        <DownloadNuGetExe Condition=\" '$(DownloadNuGetExe)' == '' \">true</DownloadNuGetExe>\n    </PropertyGroup>\n    \n    <ItemGroup Condition=\" '$(PackageSources)' == '' \">\n        <!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\\NuGet\\NuGet.Config will be used -->\n        <!-- The official NuGet package source (https://nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list -->\n        <!--\n            <PackageSource Include=\"https://nuget.org/api/v2/\" />\n            <PackageSource Include=\"https://my-nuget-source/nuget/\" />\n        -->\n    </ItemGroup>\n\n    <PropertyGroup Condition=\" '$(OS)' == 'Windows_NT'\">\n        <!-- Windows specific commands -->\n        <NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), \".nuget\"))</NuGetToolsPath>\n        <PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), \"packages.config\"))</PackagesConfig>\n    </PropertyGroup>\n    \n    <PropertyGroup Condition=\" '$(OS)' != 'Windows_NT'\">\n        <!-- We need to launch nuget.exe with the mono command if we're not on windows -->\n        <NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath>\n        <PackagesConfig>packages.config</PackagesConfig>\n    </PropertyGroup>\n    \n    <PropertyGroup>\n        <!-- NuGet command -->\n        <NuGetExePath Condition=\" '$(NuGetExePath)' == '' \">$(NuGetToolsPath)\\nuget.exe</NuGetExePath>\n        <PackageSources Condition=\" $(PackageSources) == '' \">@(PackageSource)</PackageSources>\n        \n        <NuGetCommand Condition=\" '$(OS)' == 'Windows_NT'\">\"$(NuGetExePath)\"</NuGetCommand>\n        <NuGetCommand Condition=\" '$(OS)' != 'Windows_NT' \">mono --runtime=v4.0.30319 $(NuGetExePath)</NuGetCommand>\n\n        <PackageOutputDir Condition=\"$(PackageOutputDir) == ''\">$(TargetDir.Trim('\\\\'))</PackageOutputDir>\n        \n        <RequireConsentSwitch Condition=\" $(RequireRestoreConsent) == 'true' \">-RequireConsent</RequireConsentSwitch>\n        <!-- Commands -->\n        <RestoreCommand>$(NuGetCommand) install \"$(PackagesConfig)\" -source \"$(PackageSources)\"  $(RequireConsentSwitch) -solutionDir \"$(SolutionDir) \"</RestoreCommand>\n        <BuildCommand>$(NuGetCommand) pack \"$(ProjectPath)\" -p Configuration=$(Configuration) -o \"$(PackageOutputDir)\" -symbols</BuildCommand>\n\n        <!-- We need to ensure packages are restored prior to assembly resolve -->\n        <BuildDependsOn Condition=\"$(RestorePackages) == 'true'\">\n            RestorePackages;\n            $(BuildDependsOn);\n        </BuildDependsOn>\n\n        <!-- Make the build depend on restore packages -->\n        <BuildDependsOn Condition=\"$(BuildPackage) == 'true'\">\n            $(BuildDependsOn);\n            BuildPackage;\n        </BuildDependsOn>\n    </PropertyGroup>\n\n    <Target Name=\"CheckPrerequisites\">\n        <!-- Raise an error if we're unable to locate nuget.exe  -->\n        <Error Condition=\"'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')\" Text=\"Unable to locate '$(NuGetExePath)'\" />\n        <SetEnvironmentVariable EnvKey=\"VisualStudioVersion\" EnvValue=\"$(VisualStudioVersion)\" Condition=\" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' \" />\n        <!--\n        Take advantage of MsBuild's build dependency tracking to make sure that we only ever download nuget.exe once.\n        This effectively acts as a lock that makes sure that the download operation will only happen once and all\n        parallel builds will have to wait for it to complete.\n        -->\n        <MsBuild Targets=\"_DownloadNuGet\" Projects=\"$(MSBuildThisFileFullPath)\" Properties=\"Configuration=NOT_IMPORTANT\" />\n    </Target>\n\n    <Target Name=\"_DownloadNuGet\">\n        <DownloadNuGet OutputFilename=\"$(NuGetExePath)\" Condition=\" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')\" />\n    </Target>\n\n    <Target Name=\"RestorePackages\" DependsOnTargets=\"CheckPrerequisites\">\n        <Exec Command=\"$(RestoreCommand)\"\n              Condition=\"'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')\" />\n              \n        <Exec Command=\"$(RestoreCommand)\"\n              LogStandardErrorAsError=\"true\"\n              Condition=\"'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')\" />\n    </Target>\n\n    <Target Name=\"BuildPackage\" DependsOnTargets=\"CheckPrerequisites\">\n        <Exec Command=\"$(BuildCommand)\" \n              Condition=\" '$(OS)' != 'Windows_NT' \" />\n              \n        <Exec Command=\"$(BuildCommand)\"\n              LogStandardErrorAsError=\"true\"\n              Condition=\" '$(OS)' == 'Windows_NT' \" />\n    </Target>\n    \n    <UsingTask TaskName=\"DownloadNuGet\" TaskFactory=\"CodeTaskFactory\" AssemblyFile=\"$(MSBuildToolsPath)\\Microsoft.Build.Tasks.v4.0.dll\">\n        <ParameterGroup>\n            <OutputFilename ParameterType=\"System.String\" Required=\"true\" />\n        </ParameterGroup>\n        <Task>\n            <Reference Include=\"System.Core\" />\n            <Using Namespace=\"System\" />\n            <Using Namespace=\"System.IO\" />\n            <Using Namespace=\"System.Net\" />\n            <Using Namespace=\"Microsoft.Build.Framework\" />\n            <Using Namespace=\"Microsoft.Build.Utilities\" />\n            <Code Type=\"Fragment\" Language=\"cs\">\n                <![CDATA[\n                try {\n                    OutputFilename = Path.GetFullPath(OutputFilename);\n\n                    Log.LogMessage(\"Downloading latest version of NuGet.exe...\");\n                    WebClient webClient = new WebClient();\n                    webClient.DownloadFile(\"https://nuget.org/nuget.exe\", OutputFilename);\n\n                    return true;\n                }\n                catch (Exception ex) {\n                    Log.LogErrorFromException(ex);\n                    return false;\n                }\n            ]]>\n            </Code>\n        </Task>\n    </UsingTask>\n    \n     <UsingTask TaskName=\"SetEnvironmentVariable\" TaskFactory=\"CodeTaskFactory\" AssemblyFile=\"$(MSBuildToolsPath)\\Microsoft.Build.Tasks.v4.0.dll\">\n        <ParameterGroup>\n            <EnvKey ParameterType=\"System.String\" Required=\"true\" />\n            <EnvValue ParameterType=\"System.String\" Required=\"true\" />\n        </ParameterGroup>\n        <Task>\n            <Using Namespace=\"System\" />\n            <Code Type=\"Fragment\" Language=\"cs\">\n                <![CDATA[\n                try {\n                    Environment.SetEnvironmentVariable(EnvKey, EnvValue, System.EnvironmentVariableTarget.Process);\n                }\n                catch  {\n                }\n            ]]>\n            </Code>\n        </Task>\n    </UsingTask>\n</Project>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/App.xaml",
    "content": "﻿<Application\n    x:Class=\"ZumoE2ETestApp.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:ZumoE2ETestApp\">\n\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n\n                <!-- \n                    Styles that define common aspects of the platform look and feel\n                    Required by Visual Studio project and item templates\n                 -->\n                <ResourceDictionary Source=\"Common/StandardStyles.xaml\"/>\n            </ResourceDictionary.MergedDictionaries>\n\n        </ResourceDictionary>\n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/App.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\n// The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=234227\n\nnamespace ZumoE2ETestApp\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default Application class.\n    /// </summary>\n    sealed partial class App : Application\n    {\n        /// <summary>\n        /// Initializes the singleton application object.  This is the first line of authored code\n        /// executed, and as such is the logical equivalent of main() or WinMain().\n        /// </summary>\n        public App()\n        {\n            this.InitializeComponent();\n            this.Suspending += OnSuspending;\n        }\n\n        /// <summary>\n        /// Invoked when the application is launched normally by the end user.  Other entry points\n        /// will be used when the application is launched to open a specific file, to display\n        /// search results, and so forth.\n        /// </summary>\n        /// <param name=\"args\">Details about the launch request and process.</param>\n        protected override void OnLaunched(LaunchActivatedEventArgs args)\n        {\n            Frame rootFrame = Window.Current.Content as Frame;\n\n            // Do not repeat app initialization when the Window already has content,\n            // just ensure that the window is active\n            if (rootFrame == null)\n            {\n                // Create a Frame to act as the navigation context and navigate to the first page\n                rootFrame = new Frame();\n\n                if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)\n                {\n                    //TODO: Load state from previously suspended application\n                }\n\n                // Place the frame in the current Window\n                Window.Current.Content = rootFrame;\n            }\n\n            if (rootFrame.Content == null)\n            {\n                // When the navigation stack isn't restored navigate to the first page,\n                // configuring the new page by passing required information as a navigation\n                // parameter\n                if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))\n                {\n                    throw new Exception(\"Failed to create initial page\");\n                }\n            }\n            // Ensure the current window is active\n            Window.Current.Activate();\n        }\n\n        /// <summary>\n        /// Invoked when application execution is being suspended.  Application state is saved\n        /// without knowing whether the application will be terminated or resumed with the contents\n        /// of memory still intact.\n        /// </summary>\n        /// <param name=\"sender\">The source of the suspend request.</param>\n        /// <param name=\"e\">Details about the suspend request.</param>\n        private void OnSuspending(object sender, SuspendingEventArgs e)\n        {\n            var deferral = e.SuspendingOperation.GetDeferral();\n            //TODO: Save application state and stop any background activity\n            deferral.Complete();\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Common/StandardStyles.xaml",
    "content": "﻿<!--\n    This file contains XAML styles that simplify application development.\n\n    These are not merely convenient, but are required by most Visual Studio project and item templates.\n    Removing, renaming, or otherwise modifying the content of these files may result in a project that\n    does not build, or that will not build once additional pages are added.  If variations on these\n    styles are desired it is recommended that you copy the content under a new name and modify your\n    private copy.\n-->\n\n<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <!-- Non-brush values that vary across themes -->\n\n    <ResourceDictionary.ThemeDictionaries>\n        <ResourceDictionary x:Key=\"Default\">\n            <x:String x:Key=\"BackButtonGlyph\">&#xE071;</x:String>\n            <x:String x:Key=\"BackButtonSnappedGlyph\">&#xE0BA;</x:String>\n        </ResourceDictionary>\n\n        <ResourceDictionary x:Key=\"HighContrast\">\n            <x:String x:Key=\"BackButtonGlyph\">&#xE071;</x:String>\n            <x:String x:Key=\"BackButtonSnappedGlyph\">&#xE0C4;</x:String>\n        </ResourceDictionary>\n    </ResourceDictionary.ThemeDictionaries>\n\n    <x:String x:Key=\"ChevronGlyph\">&#xE26B;</x:String>\n\n    <!-- RichTextBlock styles -->\n\n    <Style x:Key=\"BasicRichTextStyle\" TargetType=\"RichTextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationForegroundThemeBrush}\"/>\n        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\"/>\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style x:Key=\"BaselineRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BasicRichTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"ItemRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BaselineRichTextStyle}\"/>\n\n    <Style x:Key=\"BodyRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BaselineRichTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiLight\"/>\n    </Style>\n\n    <!-- TextBlock styles -->\n\n    <Style x:Key=\"BasicTextStyle\" TargetType=\"TextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationForegroundThemeBrush}\"/>\n        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\"/>\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style x:Key=\"BaselineTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"HeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"40\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-2\" Y=\"8\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"SubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"26.667\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"30\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"6\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"TitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiBold\"/>\n    </Style>\n\n    <Style x:Key=\"SubtitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n    </Style>\n\n    <Style x:Key=\"ItemTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\"/>\n\n    <Style x:Key=\"BodyTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiLight\"/>\n    </Style>\n\n    <Style x:Key=\"CaptionTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"12\"/>\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n    </Style>\n\n    <Style x:Key=\"GroupHeaderTextStyle\" TargetType=\"TextBlock\">\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n        <Setter Property=\"FontSize\" Value=\"26.667\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"30\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"6\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- Button styles -->\n    \n    <!--\n        TextButtonStyle is used to style a Button using subheader-styled text with no other adornment.  There\n        are two styles that are based on TextButtonStyle (TextPrimaryButtonStyle and TextSecondaryButtonStyle)\n        which are used in the GroupedItemsPage as a group header and in the FileOpenPickerPage for triggering\n        commands.\n    -->\n    <Style x:Key=\"TextButtonStyle\" TargetType=\"ButtonBase\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"MinHeight\" Value=\"0\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"ButtonBase\">\n                    <Grid Background=\"Transparent\">\n                        <ContentPresenter x:Name=\"Text\" Content=\"{TemplateBinding Content}\" />\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualWhite\" Storyboard.TargetProperty=\"Opacity\"/>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualBlack\" Storyboard.TargetProperty=\"Opacity\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\"/>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CheckStates\">\n                                <VisualState x:Name=\"Checked\"/>\n                                <VisualState x:Name=\"Unchecked\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Indeterminate\"/>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"TextPrimaryButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource TextButtonStyle}\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationHeaderForegroundThemeBrush}\"/>\n    </Style>\n\n    <Style x:Key=\"TextSecondaryButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource TextButtonStyle}\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n    </Style>\n\n    <!--\n        TextRadioButtonStyle is used to style a RadioButton using subheader-styled text with no other adornment.\n        This style is used in the SearchResultsPage to allow selection among filters.\n    -->\n    <Style x:Key=\"TextRadioButtonStyle\" TargetType=\"RadioButton\" BasedOn=\"{StaticResource TextButtonStyle}\">\n        <Setter Property=\"Margin\" Value=\"0,0,30,0\"/>\n    </Style>\n\n    <!--\n        AppBarButtonStyle is used to style a Button (or ToggleButton) for use in an App Bar.  Content will be centered \n        and should fit within the 40 pixel radius glyph provided.  16-point Segoe UI Symbol is used for content text \n        to simplify the use of glyphs from that font.  AutomationProperties.Name is used for the text below the glyph.\n    -->\n    <Style x:Key=\"AppBarButtonStyle\" TargetType=\"ButtonBase\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"20\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"App Bar Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"ButtonBase\">\n                    <Grid x:Name=\"RootGrid\" Width=\"100\" Background=\"Transparent\">\n                        <StackPanel VerticalAlignment=\"Top\" Margin=\"0,12,0,11\">\n                            <Grid Width=\"40\" Height=\"40\" Margin=\"0,0,0,5\" HorizontalAlignment=\"Center\">\n                                <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0A8;\" FontFamily=\"Segoe UI Symbol\" FontSize=\"53.333\" Margin=\"-4,-19,0,0\" Foreground=\"{StaticResource AppBarItemBackgroundThemeBrush}\"/>\n                                <TextBlock x:Name=\"OutlineGlyph\" Text=\"&#xE0A7;\" FontFamily=\"Segoe UI Symbol\" FontSize=\"53.333\" Margin=\"-4,-19,0,0\"/>\n                                <ContentPresenter x:Name=\"Content\" HorizontalAlignment=\"Center\" Margin=\"-1,-1,0,0\" VerticalAlignment=\"Center\"/>\n                            </Grid>\n                            <TextBlock\n                                x:Name=\"TextLabel\"\n                                Text=\"{TemplateBinding AutomationProperties.Name}\"\n                                Foreground=\"{StaticResource AppBarItemForegroundThemeBrush}\"\n                                Margin=\"0,0,2,0\"\n                                FontSize=\"12\"\n                                TextAlignment=\"Center\"\n                                Width=\"88\"\n                                MaxHeight=\"32\"\n                                TextTrimming=\"WordEllipsis\"\n                                Style=\"{StaticResource BasicTextStyle}\"/>\n                        </StackPanel>\n                        <Rectangle\n                                x:Name=\"FocusVisualWhite\"\n                                IsHitTestVisible=\"False\"\n                                Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                                StrokeEndLineCap=\"Square\"\n                                StrokeDashArray=\"1,1\"\n                                Opacity=\"0\"\n                                StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                                x:Name=\"FocusVisualBlack\"\n                                IsHitTestVisible=\"False\"\n                                Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                                StrokeEndLineCap=\"Square\"\n                                StrokeDashArray=\"1,1\"\n                                Opacity=\"0\"\n                                StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"ApplicationViewStates\">\n                                <VisualState x:Name=\"FullScreenLandscape\"/>\n                                <VisualState x:Name=\"Filled\"/>\n                                <VisualState x:Name=\"FullScreenPortrait\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Width\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"60\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Snapped\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Width\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"60\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                                Storyboard.TargetName=\"FocusVisualWhite\"\n                                                Storyboard.TargetProperty=\"Opacity\"\n                                                To=\"1\"\n                                                Duration=\"0\"/>\n                                        <DoubleAnimation\n                                                Storyboard.TargetName=\"FocusVisualBlack\"\n                                                Storyboard.TargetProperty=\"Opacity\"\n                                                To=\"1\"\n                                                Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CheckStates\">\n                                <VisualState x:Name=\"Checked\">\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0\" To=\"0\" Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Opacity\"/>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundCheckedGlyph\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unchecked\"/>\n                                <VisualState x:Name=\"Indeterminate\"/>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- \n        Standard AppBarButton Styles for use with Button and ToggleButton\n    \n        An AppBarButton Style is provided for each of the glyphs in the Segoe UI Symbol font.  \n        Uncomment any style you reference (as not all may be required).\n    -->\n\n    <!--\n    \n    <Style x:Key=\"SkipBackAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SkipBackAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skip Back\"/>\n        <Setter Property=\"Content\" Value=\"&#xE100;\"/>\n    </Style>\n    <Style x:Key=\"SkipAheadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SkipAheadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skip Ahead\"/>\n        <Setter Property=\"Content\" Value=\"&#xE101;\"/>\n    </Style>\n    <Style x:Key=\"PlayAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PlayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Play\"/>\n        <Setter Property=\"Content\" Value=\"&#xE102;\"/>\n    </Style>\n    <Style x:Key=\"PauseAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PauseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pause\"/>\n        <Setter Property=\"Content\" Value=\"&#xE103;\"/>\n    </Style>\n    <Style x:Key=\"EditAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"EditAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Edit\"/>\n        <Setter Property=\"Content\" Value=\"&#xE104;\"/>\n    </Style>\n    <Style x:Key=\"SaveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SaveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Save\"/>\n        <Setter Property=\"Content\" Value=\"&#xE105;\"/>\n    </Style>\n    <Style x:Key=\"DeleteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DeleteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Delete\"/>\n        <Setter Property=\"Content\" Value=\"&#xE106;\"/>\n    </Style>\n    <Style x:Key=\"DiscardAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DiscardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Discard\"/>\n        <Setter Property=\"Content\" Value=\"&#xE107;\"/>\n    </Style>\n    <Style x:Key=\"RemoveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RemoveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Remove\"/>\n        <Setter Property=\"Content\" Value=\"&#xE108;\"/>\n    </Style>\n    <Style x:Key=\"AddAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AddAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Add\"/>\n        <Setter Property=\"Content\" Value=\"&#xE109;\"/>\n    </Style>\n    <Style x:Key=\"NoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"No\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10A;\"/>\n    </Style>\n    <Style x:Key=\"YesAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"YesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Yes\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10B;\"/>\n    </Style>\n    <Style x:Key=\"MoreAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MoreAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"More\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10C;\"/>\n    </Style>\n    <Style x:Key=\"RedoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RedoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Redo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10D;\"/>\n    </Style>\n    <Style x:Key=\"UndoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UndoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Undo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10E;\"/>\n    </Style>\n    <Style x:Key=\"HomeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HomeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Home\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10F;\"/>\n    </Style>\n    <Style x:Key=\"OutAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Out\"/>\n        <Setter Property=\"Content\" Value=\"&#xE110;\"/>\n    </Style>\n    <Style x:Key=\"NextAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NextAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Next\"/>\n        <Setter Property=\"Content\" Value=\"&#xE111;\"/>\n    </Style>\n    <Style x:Key=\"PreviousAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PreviousAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Previous\"/>\n        <Setter Property=\"Content\" Value=\"&#xE112;\"/>\n    </Style>\n    <Style x:Key=\"FavoriteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FavoriteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Favorite\"/>\n        <Setter Property=\"Content\" Value=\"&#xE113;\"/>\n    </Style>\n    <Style x:Key=\"PhotoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhotoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Photo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE114;\"/>\n    </Style>\n    <Style x:Key=\"SettingsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SettingsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Settings\"/>\n        <Setter Property=\"Content\" Value=\"&#xE115;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"VideoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VideoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Video\"/>\n        <Setter Property=\"Content\" Value=\"&#xE116;\"/>\n    </Style>\n    <Style x:Key=\"RefreshAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RefreshAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Refresh\"/>\n        <Setter Property=\"Content\" Value=\"&#xE117;\"/>\n    </Style>\n    <Style x:Key=\"DownloadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DownloadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Download\"/>\n        <Setter Property=\"Content\" Value=\"&#xE118;\"/>\n    </Style>\n    <Style x:Key=\"MailAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mail\"/>\n        <Setter Property=\"Content\" Value=\"&#xE119;\"/>\n    </Style>\n    <Style x:Key=\"SearchAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SearchAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Search\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11A;\"/>\n    </Style>\n    <Style x:Key=\"HelpAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HelpAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Help\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11B;\"/>\n    </Style>\n    <Style x:Key=\"UploadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UploadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Upload\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11C;\"/>\n    </Style>\n    <Style x:Key=\"EmojiAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"EmojiAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Emoji\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11D;\"/>\n    </Style>\n    <Style x:Key=\"TwoPageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TwoPageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Two Page\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11E;\"/>\n    </Style>\n    <Style x:Key=\"LeaveChatAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LeaveChatAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Upload\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11F;\"/>\n    </Style>\n    <Style x:Key=\"MailForwardAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailForwardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Forward Mail\"/>\n        <Setter Property=\"Content\" Value=\"&#xE120;\"/>\n    </Style>\n    <Style x:Key=\"ClockAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ClockAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Clock\"/>\n        <Setter Property=\"Content\" Value=\"&#xE121;\"/>\n    </Style>\n    <Style x:Key=\"SendAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SendAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Send\"/>\n        <Setter Property=\"Content\" Value=\"&#xE122;\"/>\n    </Style>\n    <Style x:Key=\"CropAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CropAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Crop\"/>\n        <Setter Property=\"Content\" Value=\"&#xE123;\"/>\n    </Style>\n    <Style x:Key=\"RotateCameraAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RotateCameraAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Rotate Camera\"/>\n        <Setter Property=\"Content\" Value=\"&#xE124;\"/>\n    </Style>\n    <Style x:Key=\"PeopleAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PeopleAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"People\"/>\n        <Setter Property=\"Content\" Value=\"&#xE125;\"/>\n    </Style>\n    <Style x:Key=\"ClosePaneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ClosePaneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Close Pane\"/>\n        <Setter Property=\"Content\" Value=\"&#xE126;\"/>\n    </Style>\n    <Style x:Key=\"OpenPaneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenPaneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open Pane\"/>\n        <Setter Property=\"Content\" Value=\"&#xE127;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"WorldAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"WorldAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"World\"/>\n        <Setter Property=\"Content\" Value=\"&#xE128;\"/>\n    </Style>\n    <Style x:Key=\"FlagAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FlagAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Flag\"/>\n        <Setter Property=\"Content\" Value=\"&#xE129;\"/>\n    </Style>\n    <Style x:Key=\"PreviewLinkAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PreviewLinkAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Preview Link\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12A;\"/>\n    </Style>\n    <Style x:Key=\"GlobeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GlobeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Globe\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12B;\"/>\n    </Style>\n    <Style x:Key=\"TrimAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TrimAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Trim\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12C;\"/>\n    </Style>\n    <Style x:Key=\"AttachCameraAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AttachCameraAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Attach Camera\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12D;\"/>\n    </Style>\n    <Style x:Key=\"ZoomInAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZoomInAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zoom In\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12E;\"/>\n    </Style>\n    <Style x:Key=\"BookmarksAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BookmarksAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Bookmarks\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12F;\"/>\n    </Style>\n    <Style x:Key=\"DocumentAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DocumentAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Document\"/>\n        <Setter Property=\"Content\" Value=\"&#xE130;\"/>\n    </Style>\n    <Style x:Key=\"ProtectedDocumentAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ProtectedDocumentAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Protected Document\"/>\n        <Setter Property=\"Content\" Value=\"&#xE131;\"/>\n    </Style>\n    <Style x:Key=\"PageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Page\"/>\n        <Setter Property=\"Content\" Value=\"&#xE132;\"/>\n    </Style>\n    <Style x:Key=\"BulletsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BulletsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Bullets\"/>\n        <Setter Property=\"Content\" Value=\"&#xE133;\"/>\n    </Style>\n    <Style x:Key=\"CommentAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CommentAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Comment\"/>\n        <Setter Property=\"Content\" Value=\"&#xE134;\"/>\n    </Style>\n    <Style x:Key=\"Mail2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Mail2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mail2\"/>\n        <Setter Property=\"Content\" Value=\"&#xE135;\"/>\n    </Style>\n    <Style x:Key=\"ContactInfoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ContactInfoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Contact Info\"/>\n        <Setter Property=\"Content\" Value=\"&#xE136;\"/>\n    </Style>\n    <Style x:Key=\"HangUpAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HangUpAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Hang Up\"/>\n        <Setter Property=\"Content\" Value=\"&#xE137;\"/>\n    </Style>\n    <Style x:Key=\"ViewAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ViewAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"View All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE138;\"/>\n    </Style>\n    <Style x:Key=\"MapPinAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MapPinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Map Pin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE139;\"/>\n    </Style>\n    <Style x:Key=\"PhoneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhoneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Phone\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13A;\"/>\n    </Style>\n    <Style x:Key=\"VideoChatAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VideoChatAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Video Chat\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13B;\"/>\n    </Style>\n    <Style x:Key=\"SwitchAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SwitchAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Switch\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13C;\"/>\n    </Style>\n    <Style x:Key=\"ContactAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ContactAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Contact\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13D;\"/>\n    </Style>\n\n    -->\n\n    <!--\n\n    <Style x:Key=\"RenameAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RenameAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Rename\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13E;\"/>\n    </Style>\n    <Style x:Key=\"PinAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE141;\"/>\n    </Style>\n    <Style x:Key=\"MusicInfoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MusicInfoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Music Info\"/>\n        <Setter Property=\"Content\" Value=\"&#xE142;\"/>\n    </Style>\n    <Style x:Key=\"GoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Go\"/>\n        <Setter Property=\"Content\" Value=\"&#xE143;\"/>\n    </Style>\n    <Style x:Key=\"KeyboardAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"KeyboardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Keyboard\"/>\n        <Setter Property=\"Content\" Value=\"&#xE144;\"/>\n    </Style>\n    <Style x:Key=\"DockLeftAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DockLeftAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dock Left\"/>\n        <Setter Property=\"Content\" Value=\"&#xE145;\"/>\n    </Style>\n    <Style x:Key=\"DockRightAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DockRightAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dock Right\"/>\n        <Setter Property=\"Content\" Value=\"&#xE146;\"/>\n    </Style>\n    <Style x:Key=\"DockBottomAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DockBottomAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dock Bottom\"/>\n        <Setter Property=\"Content\" Value=\"&#xE147;\"/>\n    </Style>\n    <Style x:Key=\"RemoteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RemoteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Remote\"/>\n        <Setter Property=\"Content\" Value=\"&#xE148;\"/>\n    </Style>\n    <Style x:Key=\"SyncAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SyncAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Sync\"/>\n        <Setter Property=\"Content\" Value=\"&#xE149;\"/>\n    </Style>\n    <Style x:Key=\"RotateAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RotateAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Rotate\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14A;\"/>\n    </Style>\n    <Style x:Key=\"ShuffleAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShuffleAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Shuffle\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14B;\"/>\n    </Style>\n    <Style x:Key=\"ListAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ListAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"List\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14C;\"/>\n    </Style>\n    <Style x:Key=\"ShopAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShopAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Shop\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14D;\"/>\n    </Style>\n    <Style x:Key=\"SelectAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SelectAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Select All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14E;\"/>\n    </Style>\n    <Style x:Key=\"OrientationAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OrientationAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Orientation\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14F;\"/>\n    </Style>\n    <Style x:Key=\"ImportAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ImportAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Import\"/>\n        <Setter Property=\"Content\" Value=\"&#xE150;\"/>\n    </Style>\n    <Style x:Key=\"ImportAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ImportAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Import All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE151;\"/>\n    </Style>\n    <Style x:Key=\"BrowsePhotosAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BrowsePhotosAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Browse Photos\"/>\n        <Setter Property=\"Content\" Value=\"&#xE155;\"/>\n    </Style>\n    <Style x:Key=\"WebcamAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"WebcamAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Webcam\"/>\n        <Setter Property=\"Content\" Value=\"&#xE156;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"PicturesAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PicturesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pictures\"/>\n        <Setter Property=\"Content\" Value=\"&#xE158;\"/>\n    </Style>\n    <Style x:Key=\"SaveLocalAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SaveLocalAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Save Local\"/>\n        <Setter Property=\"Content\" Value=\"&#xE159;\"/>\n    </Style>\n    <Style x:Key=\"CaptionAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CaptionAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Caption\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15A;\"/>\n    </Style>\n    <Style x:Key=\"StopAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"StopAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Stop\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15B;\"/>\n    </Style>\n    <Style x:Key=\"ShowResultsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShowResultsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Show Results\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15C;\"/>\n    </Style>\n    <Style x:Key=\"VolumeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VolumeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Volume\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15D;\"/>\n    </Style>\n    <Style x:Key=\"RepairAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RepairAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Repair\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15E;\"/>\n    </Style>\n    <Style x:Key=\"MessageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MessageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Message\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15F;\"/>\n    </Style>\n    <Style x:Key=\"Page2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Page2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Page2\"/>\n        <Setter Property=\"Content\" Value=\"&#xE160;\"/>\n    </Style>\n    <Style x:Key=\"CalendarDayAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarDayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Day\"/>\n        <Setter Property=\"Content\" Value=\"&#xE161;\"/>\n    </Style>\n    <Style x:Key=\"CalendarWeekAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarWeekAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Week\"/>\n        <Setter Property=\"Content\" Value=\"&#xE162;\"/>\n    </Style>\n    <Style x:Key=\"CalendarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Calendar\"/>\n        <Setter Property=\"Content\" Value=\"&#xE163;\"/>\n    </Style>\n    <Style x:Key=\"CharactersAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CharactersAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Characters\"/>\n        <Setter Property=\"Content\" Value=\"&#xE164;\"/>\n    </Style>\n    <Style x:Key=\"MailReplyAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailReplyAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Reply All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE165;\"/>\n    </Style>\n    <Style x:Key=\"ReadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ReadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Read\"/>\n        <Setter Property=\"Content\" Value=\"&#xE166;\"/>\n    </Style>\n    <Style x:Key=\"LinkAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LinkAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Link\"/>\n        <Setter Property=\"Content\" Value=\"&#xE167;\"/>\n    </Style>\n    <Style x:Key=\"AccountsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AccountsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Accounts\"/>\n        <Setter Property=\"Content\" Value=\"&#xE168;\"/>\n    </Style>\n    <Style x:Key=\"ShowBccAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShowBccAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Show Bcc\"/>\n        <Setter Property=\"Content\" Value=\"&#xE169;\"/>\n    </Style>\n    <Style x:Key=\"HideBccAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HideBccAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Hide Bcc\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16A;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"CutAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Cut\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16B;\"/>\n    </Style>\n    <Style x:Key=\"AttachAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AttachAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Attach\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16C;\"/>\n    </Style>\n    <Style x:Key=\"PasteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PasteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Paste\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16D;\"/>\n    </Style>\n    <Style x:Key=\"FilterAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FilterAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Filter\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16E;\"/>\n    </Style>\n    <Style x:Key=\"CopyAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CopyAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Copy\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16F;\"/>\n    </Style>\n    <Style x:Key=\"Emoji2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Emoji2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Emoji2\"/>\n        <Setter Property=\"Content\" Value=\"&#xE170;\"/>\n    </Style>\n    <Style x:Key=\"ImportantAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ImportantAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Important\"/>\n        <Setter Property=\"Content\" Value=\"&#xE171;\"/>\n    </Style>\n    <Style x:Key=\"MailReplyAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailReplyAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Reply\"/>\n        <Setter Property=\"Content\" Value=\"&#xE172;\"/>\n    </Style>\n    <Style x:Key=\"SlideShowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SlideShowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Slideshow\"/>\n        <Setter Property=\"Content\" Value=\"&#xE173;\"/>\n    </Style>\n    <Style x:Key=\"SortAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SortAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Sort\"/>\n        <Setter Property=\"Content\" Value=\"&#xE174;\"/>\n    </Style>\n    <Style x:Key=\"ManageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ManageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Manage\"/>\n        <Setter Property=\"Content\" Value=\"&#xE178;\"/>\n    </Style>\n    <Style x:Key=\"AllAppsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AllAppsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"All Apps\"/>\n        <Setter Property=\"Content\" Value=\"&#xE179;\"/>\n    </Style>\n    <Style x:Key=\"DisconnectDriveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DisconnectDriveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Disconnect Drive\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17A;\"/>\n    </Style>\n    <Style x:Key=\"MapDriveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MapDriveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Map Drive\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17B;\"/>\n    </Style>\n    <Style x:Key=\"NewWindowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NewWindowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"New Window\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17C;\"/>\n    </Style>\n    <Style x:Key=\"OpenWithAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenWithAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open With\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17D;\"/>\n    </Style>\n    <Style x:Key=\"ContactPresenceAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ContactPresenceAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Presence\"/>\n        <Setter Property=\"Content\" Value=\"&#xE181;\"/>\n    </Style>\n    <Style x:Key=\"PriorityAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PriorityAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Priority\"/>\n        <Setter Property=\"Content\" Value=\"&#xE182;\"/>\n    </Style>\n    <Style x:Key=\"UploadSkyDriveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UploadSkyDriveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skydrive\"/>\n        <Setter Property=\"Content\" Value=\"&#xE183;\"/>\n    </Style>\n    <Style x:Key=\"GoToTodayAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GoToTodayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Today\"/>\n        <Setter Property=\"Content\" Value=\"&#xE184;\"/>\n    </Style>\n    <Style x:Key=\"FontAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Font\"/>\n        <Setter Property=\"Content\" Value=\"&#xE185;\"/>\n    </Style>\n\n    -->\n\n    <!--\n\n    <Style x:Key=\"FontColorAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontColorAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Font Color\"/>\n        <Setter Property=\"Content\" Value=\"&#xE186;\"/>\n    </Style>\n    <Style x:Key=\"Contact2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Contact2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Contact\"/>\n        <Setter Property=\"Content\" Value=\"&#xE187;\"/>\n    </Style>\n    <Style x:Key=\"FolderppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE188;\"/>\n    </Style>\n    <Style x:Key=\"AudioAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AudioAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Audio\"/>\n        <Setter Property=\"Content\" Value=\"&#xE189;\"/>\n    </Style>\n    <Style x:Key=\"PlaceholderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PlaceholderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Placeholder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18A;\"/>\n    </Style>\n    <Style x:Key=\"ViewAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ViewAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"View\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18B;\"/>\n    </Style>\n    <Style x:Key=\"SetLockScreenAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SetLockscreenAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Set Lockscreen\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18C;\"/>\n    </Style>\n    <Style x:Key=\"SetTitleAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SetTitleAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Set Title\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18D;\"/>\n    </Style>\n    <Style x:Key=\"CcAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CcAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Cc\"/>\n        <Setter Property=\"Content\" Value=\"&#xE190;\"/>\n    </Style>\n    <Style x:Key=\"StopSlideShowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"StopSlideshowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Stop Slideshow\"/>\n        <Setter Property=\"Content\" Value=\"&#xE191;\"/>\n    </Style>\n    <Style x:Key=\"PermissionsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PermissionsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Permisions\"/>\n        <Setter Property=\"Content\" Value=\"&#xE192;\"/>\n    </Style>\n    <Style x:Key=\"HighlightAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HighlightAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Highlight\"/>\n        <Setter Property=\"Content\" Value=\"&#xE193;\"/>\n    </Style>\n    <Style x:Key=\"DisableUpdatesAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DisableUpdatesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Disable Updates\"/>\n        <Setter Property=\"Content\" Value=\"&#xE194;\"/>\n    </Style>\n    <Style x:Key=\"UnfavoriteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnfavoriteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unfavorite\"/>\n        <Setter Property=\"Content\" Value=\"&#xE195;\"/>\n    </Style>\n    <Style x:Key=\"UnPinAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnPinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unpin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE196;\"/>\n    </Style>\n    <Style x:Key=\"OpenLocalAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenLocalAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open Loal\"/>\n        <Setter Property=\"Content\" Value=\"&#xE197;\"/>\n    </Style>\n    <Style x:Key=\"MuteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MuteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mute\"/>\n        <Setter Property=\"Content\" Value=\"&#xE198;\"/>\n    </Style>\n    <Style x:Key=\"ItalicAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ItalicAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Italic\"/>\n        <Setter Property=\"Content\" Value=\"&#xE199;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"UnderlineAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnderlineAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Underline\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19A;\"/>\n    </Style>\n    <Style x:Key=\"BoldAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BoldAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Bold\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19B;\"/>\n    </Style>\n    <Style x:Key=\"MoveToFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MoveToFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Move to Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19C;\"/>\n    </Style>\n    <Style x:Key=\"LikeDislikeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LikeDislikeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Like/Dislike\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19D;\"/>\n    </Style>\n    <Style x:Key=\"DislikeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DislikeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dislike\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19E;\"/>\n    </Style>\n    <Style x:Key=\"LikeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LikeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Like\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19F;\"/>\n    </Style>\n    <Style x:Key=\"AlignRightAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AlignRightAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Align Right\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A0;\"/>\n    </Style>\n    <Style x:Key=\"AlignCenterAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AlignCenterAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Align Center\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A1;\"/>\n    </Style>\n    <Style x:Key=\"AlignLeftAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AlignLeftAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Align Left\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A2;\"/>\n    </Style>\n    <Style x:Key=\"ZoomAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZoomAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zoom\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A3;\"/>\n    </Style>\n    <Style x:Key=\"ZoomOutAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZoomOutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zoom Out\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A4;\"/>\n    </Style>\n    <Style x:Key=\"OpenFileAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenFileAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open File\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A5;\"/>\n    </Style>\n    <Style x:Key=\"OtherUserAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OtherUserAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Other User\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A6;\"/>\n    </Style>\n    <Style x:Key=\"AdminAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AdminAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Admin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A7;\"/>\n    </Style>\n    <Style x:Key=\"StreetAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"StreetAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Street\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C3;\"/>\n    </Style>\n    <Style x:Key=\"MapAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MapAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Map\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C4;\"/>\n    </Style>\n    <Style x:Key=\"ClearSelectionAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ClearSelectionAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Clear Selection\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C5;\"/>\n    </Style>\n    <Style x:Key=\"FontDecreaseAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontDecreaseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Decrease Font\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C6;\"/>\n    </Style>\n    <Style x:Key=\"FontIncreaseAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontIncreaseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Increase Font\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C7;\"/>\n    </Style>\n    <Style x:Key=\"FontSizeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontSizeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Font Size\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C8;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"CellphoneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CellphoneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Cellphone\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C9;\"/>\n    </Style>\n    <Style x:Key=\"ReshareAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ReshareAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Reshare\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CA;\"/>\n    </Style>\n    <Style x:Key=\"TagAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TagAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Tag\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CB;\"/>\n    </Style>\n    <Style x:Key=\"RepeatOneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RepeatOneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Repeat Once\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CC;\"/>\n    </Style>\n    <Style x:Key=\"RepeatAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RepeatAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Repeat All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CD;\"/>\n    </Style>\n    <Style x:Key=\"OutlineStarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OutlineStarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Outline Star\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CE;\"/>\n    </Style>\n    <Style x:Key=\"SolidStarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SolidStarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Solid Star\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CF;\"/>\n    </Style>\n    <Style x:Key=\"CalculatorAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalculatorAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Calculator\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D0;\"/>\n    </Style>\n    <Style x:Key=\"DirectionsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DirectionsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Directions\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D1;\"/>\n    </Style>\n    <Style x:Key=\"TargetAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TargetAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Target\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D2;\"/>\n    </Style>\n    <Style x:Key=\"LibraryAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LibraryAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Library\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D3;\"/>\n    </Style>\n    <Style x:Key=\"PhonebookAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhonebookAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Phonebook\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D4;\"/>\n    </Style>\n    <Style x:Key=\"MemoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MemoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Memo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D5;\"/>\n    </Style>\n    <Style x:Key=\"MicrophoneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MicrophoneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Microphone\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D6;\"/>\n    </Style>\n    <Style x:Key=\"PostUpdateAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PostUpdateAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Post Update\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D7;\"/>\n    </Style>\n    <Style x:Key=\"BackToWindowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackToWindowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back to Window\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D8;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"FullScreenAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FullScreenAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Full Screen\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D9;\"/>\n    </Style>\n    <Style x:Key=\"NewFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NewFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"New Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DA;\"/>\n    </Style>\n    <Style x:Key=\"CalendarReplyAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarReplyAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Calendar Reply\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DB;\"/>\n    </Style>\n    <Style x:Key=\"UnsyncFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnsyncFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unsync Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DD;\"/>\n    </Style>\n    <Style x:Key=\"ReportHackedAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ReportHackedAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Report Hacked\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DE;\"/>\n    </Style>\n    <Style x:Key=\"SyncFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SyncFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Sync Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DF;\"/>\n    </Style>\n    <Style x:Key=\"BlockContactAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Block ContactAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"BlockContact\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E0;\"/>\n    </Style>\n    <Style x:Key=\"SwitchAppsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SwitchAppsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Switch Apps\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E1;\"/>\n    </Style>\n    <Style x:Key=\"AddFriendAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AddFriendAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Add Friend\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E2;\"/>\n    </Style>\n    <Style x:Key=\"TouchPointerAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TouchPointerAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Touch Pointer\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E3;\"/>\n    </Style>\n    <Style x:Key=\"GoToStartAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GoToStartAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Go to Start\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E4;\"/>\n    </Style>\n    <Style x:Key=\"ZeroBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZeroBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zero Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E5;\"/>\n    </Style>\n    <Style x:Key=\"OneBarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OneBarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"One Bar\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E6;\"/>\n    </Style>\n    <Style x:Key=\"TwoBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TwoBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Two Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E7;\"/>\n    </Style>\n    <Style x:Key=\"ThreeBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ThreeBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Three Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E8;\"/>\n    </Style>\n    <Style x:Key=\"FourBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FourBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Four Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E9;\"/>\n    </Style>\n\n    -->\n\n    <!-- Title area styles -->\n\n    <Style x:Key=\"PageHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,30,40\"/>\n    </Style>\n\n    <Style x:Key=\"PageSubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,0,40\"/>\n    </Style>\n\n    <Style x:Key=\"SnappedPageHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource PageSubheaderTextStyle}\">\n        <Setter Property=\"Margin\" Value=\"0,0,18,40\"/>\n    </Style>\n\n    <!--\n        BackButtonStyle is used to style a Button for use in the title area of a page.  Margins appropriate for\n        the conventional page layout are included as part of the style.\n    -->\n    <Style x:Key=\"BackButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"Width\" Value=\"48\"/>\n        <Setter Property=\"Height\" Value=\"48\"/>\n        <Setter Property=\"Margin\" Value=\"36,0,36,36\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"Navigation Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\">\n                        <Grid Margin=\"-1,-16,0,0\">\n                            <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0A8;\" Foreground=\"{StaticResource BackButtonBackgroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"NormalGlyph\" Text=\"{StaticResource BackButtonGlyph}\" Foreground=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"ArrowGlyph\" Text=\"&#xE0A6;\" Foreground=\"{StaticResource BackButtonPressedForegroundThemeBrush}\" Opacity=\"0\"/>\n                        </Grid>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"NormalGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"ArrowGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"NormalGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"0\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualWhite\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualBlack\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--\n        PortraitBackButtonStyle is used to style a Button for use in the title area of a portrait page.  Margins appropriate\n        for the conventional page layout are included as part of the style.\n    -->\n    <Style x:Key=\"PortraitBackButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource BackButtonStyle}\">\n        <Setter Property=\"Margin\" Value=\"26,0,26,36\"/>\n    </Style>\n\n    <!--\n        SnappedBackButtonStyle is used to style a Button for use in the title area of a snapped page.  Margins appropriate\n        for the conventional page layout are included as part of the style.\n        \n        The obvious duplication here is necessary as the glyphs used in snapped are not merely smaller versions of the same\n        glyph but are actually distinct.\n    -->\n    <Style x:Key=\"SnappedBackButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"Margin\" Value=\"20,0,0,0\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"26.66667\"/>\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"Navigation Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\" Width=\"36\" Height=\"36\" Margin=\"-3,0,7,33\">\n                        <Grid Margin=\"-1,-1,0,0\">\n                            <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0D4;\" Foreground=\"{StaticResource BackButtonBackgroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"NormalGlyph\" Text=\"{StaticResource BackButtonSnappedGlyph}\" Foreground=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"ArrowGlyph\" Text=\"&#xE0C4;\" Foreground=\"{StaticResource BackButtonPressedForegroundThemeBrush}\" Opacity=\"0\"/>\n                        </Grid>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"NormalGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"ArrowGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"NormalGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"0\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualWhite\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualBlack\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- Item templates -->\n\n    <!-- Grid-appropriate 250 pixel square item template as seen in the GroupedItemsPage and ItemsPage -->\n    <DataTemplate x:Key=\"Standard250x250ItemTemplate\">\n        <Grid HorizontalAlignment=\"Left\" Width=\"250\" Height=\"250\">\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n            </Border>\n            <StackPanel VerticalAlignment=\"Bottom\" Background=\"{StaticResource ListViewItemOverlayBackgroundThemeBrush}\">\n                <TextBlock Text=\"{Binding Title}\" Foreground=\"{StaticResource ListViewItemOverlayForegroundThemeBrush}\" Style=\"{StaticResource TitleTextStyle}\" Height=\"60\" Margin=\"15,0,15,0\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Foreground=\"{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\" Margin=\"15,0,15,10\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- Grid-appropriate 500 by 130 pixel item template as seen in the GroupDetailPage -->\n    <DataTemplate x:Key=\"Standard500x130ItemTemplate\">\n        <Grid Height=\"110\" Width=\"480\" Margin=\"10\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" MaxHeight=\"60\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- List-appropriate 130 pixel high item template as seen in the SplitPage -->\n    <DataTemplate x:Key=\"Standard130ItemTemplate\">\n        <Grid Height=\"110\" Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" MaxHeight=\"60\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!--\n        List-appropriate 80 pixel high item template as seen in the SplitPage when Filled, and\n        the following pages when snapped: GroupedItemsPage, GroupDetailPage, and ItemsPage\n    -->\n    <DataTemplate x:Key=\"Standard80ItemTemplate\">\n        <Grid Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"60\" Height=\"60\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource ItemTextStyle}\" MaxHeight=\"40\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- Grid-appropriate 300 by 70 pixel item template as seen in the SearchResultsPage -->\n    <DataTemplate x:Key=\"StandardSmallIcon300x70ItemTemplate\">\n        <Grid Width=\"294\" Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"0,0,0,10\" Width=\"40\" Height=\"40\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,-10,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource BodyTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- List-appropriate 70 pixel high item template as seen in the SearchResultsPage when Snapped -->\n    <DataTemplate x:Key=\"StandardSmallIcon70ItemTemplate\">\n        <Grid Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"0,0,0,10\" Width=\"40\" Height=\"40\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,-10,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource BodyTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!--\n      190x130 pixel item template for displaying file previews as seen in the FileOpenPickerPage\n      Includes an elaborate tooltip to display title and description text\n  -->\n    <DataTemplate x:Key=\"StandardFileWithTooltip190x130ItemTemplate\">\n        <Grid>\n            <Grid Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                <Image\n                    Source=\"{Binding Image}\"\n                    Width=\"190\"\n                    Height=\"130\"\n                    HorizontalAlignment=\"Center\"\n                    VerticalAlignment=\"Center\"\n                    Stretch=\"Uniform\"/>\n            </Grid>\n            <ToolTipService.Placement>Mouse</ToolTipService.Placement>\n            <ToolTipService.ToolTip>\n                <ToolTip>\n                    <ToolTip.Style>\n                        <Style TargetType=\"ToolTip\">\n                            <Setter Property=\"BorderBrush\" Value=\"{StaticResource ToolTipBackgroundThemeBrush}\" />\n                            <Setter Property=\"Padding\" Value=\"0\" />\n                        </Style>\n                    </ToolTip.Style>\n\n                    <Grid Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Grid Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"20\">\n                            <Image\n                                Source=\"{Binding Image}\"\n                                Width=\"160\"\n                                Height=\"160\"\n                                HorizontalAlignment=\"Center\"\n                                VerticalAlignment=\"Center\"\n                                Stretch=\"Uniform\"/>\n                        </Grid>\n                        <StackPanel Width=\"200\" Grid.Column=\"1\" Margin=\"0,20,20,20\">\n                            <TextBlock Text=\"{Binding Title}\" TextWrapping=\"NoWrap\" Style=\"{StaticResource BodyTextStyle}\"/>\n                            <TextBlock Text=\"{Binding Description}\" MaxHeight=\"140\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" Style=\"{StaticResource BodyTextStyle}\"/>\n                        </StackPanel>\n                    </Grid>\n                </ToolTip>\n            </ToolTipService.ToolTip>\n        </Grid>\n    </DataTemplate>\n\n    <!-- ScrollViewer styles -->\n\n    <Style x:Key=\"HorizontalScrollViewerStyle\" TargetType=\"ScrollViewer\">\n        <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Disabled\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Enabled\" />\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Disabled\" />\n        <Setter Property=\"ScrollViewer.ZoomMode\" Value=\"Disabled\" />\n    </Style>\n\n    <Style x:Key=\"VerticalScrollViewerStyle\" TargetType=\"ScrollViewer\">\n        <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Disabled\"/>\n        <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Disabled\" />\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Enabled\" />\n        <Setter Property=\"ScrollViewer.ZoomMode\" Value=\"Disabled\" />\n    </Style>\n\n    <!-- Page layout roots typically use entrance animations and a theme-appropriate background color -->\n\n    <Style x:Key=\"LayoutRootStyle\" TargetType=\"Panel\">\n        <Setter Property=\"Background\" Value=\"{StaticResource ApplicationPageBackgroundThemeBrush}\"/>\n        <Setter Property=\"ChildrenTransitions\">\n            <Setter.Value>\n                <TransitionCollection>\n                    <EntranceThemeTransition/>\n                </TransitionCollection>\n            </Setter.Value>\n        </Setter>\n    </Style>\n</ResourceDictionary>\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Framework/TestStatus.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nnamespace ZumoE2ETestApp.Framework\n{\n    public enum TestStatus\n    {\n        NotRun,\n        Running,\n        Failed,\n        Passed,\n        Skipped,\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Framework/Util.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Reflection;\nusing System.Text;\n#if WP75\nusing System.Threading;\n#endif\nusing System.Threading.Tasks;\n\nnamespace ZumoE2ETestApp.Framework\n{\n    /// <summary>\n    ///  Utilitary functions used in the tests.\n    /// </summary>\n    public static class Util\n    {\n        /// <summary>\n        /// Dates are represented in the server with millisecond precision. This method\n        /// will trim the sub-millisecond part of a DateTime instance to make sure that, when\n        /// round-tripping, the value will remain the same.\n        /// </summary>\n        /// <param name=\"dateTime\">The date to have its sub-millisecond portion removed.</param>\n        /// <returns>A new instance, with millisecond precision.</returns>\n        public static DateTime TrimSubMilliseconds(DateTime dateTime)\n        {\n            return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day,\n                dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Millisecond, dateTime.Kind);\n        }\n\n        public static async Task<string> UploadLogs(string uploadLogsUrl, string testLogs, string platform, bool allTests)\n        {\n            using (var client = new HttpClient())\n            {\n                string url = uploadLogsUrl + \"?platform=\" + platform;\n                if (allTests)\n                {\n                    url = url + \"&allTests=true\";\n                }\n\n                object clientVersion, runtimeVersion;\n                if (ZumoTestGlobals.Instance.GlobalTestParams.TryGetValue(ZumoTestGlobals.ClientVersionKeyName, out clientVersion))\n                {\n                    url = url + \"&clientVersion=\" + clientVersion;\n                }\n\n                if (ZumoTestGlobals.Instance.GlobalTestParams.TryGetValue(ZumoTestGlobals.RuntimeVersionKeyName, out runtimeVersion))\n                {\n                    url = url + \"&runtimeVersion=\" + runtimeVersion;\n                }\n\n                using (var request = new HttpRequestMessage(HttpMethod.Post, url))\n                {\n                    request.Content = new StringContent(testLogs, Encoding.UTF8, \"text/plain\");\n                    using (var response = await client.SendAsync(request))\n                    {\n                        var body = await response.Content.ReadAsStringAsync();\n                        var title = response.IsSuccessStatusCode ? \"Upload successful\" : \"Error uploading logs\";\n\n                        if (ZumoTestGlobals.ShowAlerts)\n                        {\n                            // do not show dialog if test run was started by the run all buttons; used in test automation scenarios\n                            await MessageBox(body, title);\n                        }\n                        return body;\n                    }\n                }\n            }\n        }\n\n        #region Methods which are different based on platforms\n\n        /// <summary>\n        /// Returns a task which completes after the specified delay.\n        /// </summary>\n        /// <param name=\"milliseconds\">The number of milliseconds before the task completes.</param>\n        /// <returns>A task which completes after the specified delay.</returns>\n        public static Task TaskDelay(int milliseconds)\n        {\n#if !WP75\n            return Task.Delay(milliseconds);\n#else\n            return Task.Factory.StartNew(() => Thread.Sleep(1000));\n#endif\n        }\n\n        /// <summary>\n        /// Retrieves an array of the values of the constants in a specified enumeration.\n        /// </summary>\n        /// <param name=\"enumType\">An enumeration type.</param>\n        /// <returns>An array that contains the values of the constants in <paramref name=\"enumType\"/>.</returns>\n        public static Array EnumGetValues(Type enumType)\n        {\n#if !WP75\n            return Enum.GetValues(enumType);\n#else\n            if (enumType == null) throw new ArgumentNullException(\"enumType\");\n            if (!enumType.IsEnum) throw new ArgumentException(\"Argument must be an enum type\");\n\n            var fields = enumType.GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);\n            Array result = Array.CreateInstance(enumType, fields.Length);\n            for (int i = 0; i < fields.Length; i++)\n            {\n                result.SetValue(fields[i].GetValue(null), i);\n            }\n\n            return result;\n#endif\n        }\n\n        /// <summary>\n        /// Returns a task with a stream to be used to read app settings.\n        /// </summary>\n        /// <param name=\"appSettingsFileName\">The name of the file used to store the application settings.</param>\n        /// <returns>A task with a stream to be used to read app settings.</returns>\n        public static Task<Stream> OpenAppSettingsForRead(string appSettingsFileName)\n        {\n#if NET45\n            return Task.FromResult(\n                (Stream)File.OpenRead(\n                    Path.Combine(\n                        Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),\n                        appSettingsFileName)));\n#else\n#if !WP75\n            return NetfxCoreOpenAppSettings(appSettingsFileName, false);\n#else\n            var isolatedStorage = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication();\n                    return Task.Factory.StartNew<Stream>(\n                        () => isolatedStorage.OpenFile(appSettingsFileName, FileMode.OpenOrCreate));\n#endif\n#endif\n        }\n\n#if !NET45 && !WP75\n        private static async Task<Stream> NetfxCoreOpenAppSettings(string appSettingsFileName, bool forWrite)\n        {\n            if (forWrite)\n            {\n                var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync(\n                    appSettingsFileName, Windows.Storage.CreationCollisionOption.ReplaceExisting);\n                return await file.OpenStreamForWriteAsync();\n            }\n            else\n            {\n                var file = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(appSettingsFileName);\n                return await file.OpenStreamForReadAsync();\n            }\n        }\n#endif\n\n        public static Task<Stream> OpenAppSettingsForWrite(string appSettingsFileName)\n        {\n#if NET45\n            return Task.FromResult(\n                (Stream)File.OpenWrite(\n                    Path.Combine(\n                        Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),\n                        appSettingsFileName)));\n#else\n#if !WP75\n            return NetfxCoreOpenAppSettings(appSettingsFileName, true);\n#else\n            var isolatedStorage = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication();\n            return Task.Factory.StartNew<Stream>(\n                () => isolatedStorage.OpenFile(appSettingsFileName, FileMode.Create));\n#endif\n#endif\n        }\n\n        public static Task MessageBox(string text, string title = null)\n        {\n#if NETFX_CORE\n            return new Windows.UI.Popups.MessageDialog(text, title).ShowAsync().AsTask();\n#else\n            System.Windows.MessageBox.Show(text, title, System.Windows.MessageBoxButton.OK);\n            TaskCompletionSource<int> tcs = new TaskCompletionSource<int>();\n            tcs.SetResult(1);\n            return tcs.Task;\n#endif\n        }\n        #endregion\n\n        public static string CreateSimpleRandomString(Random rndGen, int size)\n        {\n            return new string(\n                Enumerable.Range(0, size)\n                    .Select(_ => (char)rndGen.Next(' ', '~' + 1))\n                    .ToArray());\n        }\n\n        public static string ArrayToString<T>(T[] array)\n        {\n            if (array == null)\n            {\n                return \"<<NULL>>\";\n            }\n            else\n            {\n                return \"[\" + string.Join(\", \", array.Select(i => i == null ? \"<NULL>\" : i.ToString())) + \"]\";\n            }\n        }\n\n        public static int GetArrayHashCode<T>(T[] array)\n        {\n            int result = 0;\n            if (array != null)\n            {\n                for (int i = 0; i < array.Length; i++)\n                {\n                    object item = array.GetValue(i);\n                    if (item != null)\n                    {\n                        result ^= item.GetHashCode();\n                    }\n                }\n            }\n\n            return result;\n        }\n\n        public static bool CompareArrays<T>(T[] array1, T[] array2)\n        {\n            return CompareArrays<T>(array1, array2, null);\n        }\n\n        public static bool CompareArrays<T>(T[] array1, T[] array2, List<string> errors)\n        {\n            if (array1 == null)\n            {\n                if (array2 != null && errors != null)\n                {\n                    errors.Add(\"First array is null, second is not\");\n                }\n\n                return array2 == null;\n            }\n\n            if (array2 == null)\n            {\n                if (errors != null)\n                {\n                    errors.Add(\"First array is not null, second is null\");\n                }\n\n                return false;\n            }\n\n            if (array1.Length != array2.Length)\n            {\n                if (errors != null)\n                {\n                    errors.Add(string.Format(CultureInfo.InvariantCulture, \"Size of first array ({0}) is different than second ({1})\", array1.Length, array2.Length));\n                }\n\n                return false;\n            }\n\n            for (int i = 0; i < array2.Length; i++)\n            {\n                object item1 = array1.GetValue(i);\n                object item2 = array2.GetValue(i);\n                if ((item1 == null) != (item2 == null))\n                {\n                    if (errors != null)\n                    {\n                        errors.Add(string.Format(CultureInfo.InvariantCulture, \"Difference in item {0}: first {1} null, second {2} null\",\n                            i, item1 == null ? \"is\" : \"is not\", item2 == null ? \"is\" : \"is not\"));\n                    }\n\n                    return false;\n                }\n\n                if (item1 != null && !item1.Equals(item2))\n                {\n                    if (errors != null)\n                    {\n                        errors.Add(string.Format(CultureInfo.InvariantCulture, \"Difference in item {0}: first = {1}; second = {2}\", i, item1, item2));\n                    }\n\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        public static bool CompareJson(JToken expected, JToken actual, List<string> errors)\n        {\n            if (expected == null)\n            {\n                return actual == null;\n            }\n\n            if (actual == null)\n            {\n                return false;\n            }\n\n            if (expected.Type != actual.Type)\n            {\n                errors.Add(string.Format(\"Expected value type {0} != actual {1}\", expected.Type, actual.Type));\n                return false;\n            }\n\n            switch (expected.Type)\n            {\n                case JTokenType.Boolean:\n                    return expected.Value<bool>() == actual.Value<bool>();\n                case JTokenType.Null:\n                    return true;\n                case JTokenType.String:\n                case JTokenType.Date:\n                    return expected.Value<string>() == actual.Value<string>();\n                case JTokenType.Float:\n                case JTokenType.Integer:\n                    double expectedNumber = expected.Value<double>();\n                    double actualNumber = actual.Value<double>();\n                    double delta = 1 - expectedNumber / actualNumber;\n                    double acceptableEpsilon = 0.000001;\n                    if (Math.Abs(delta) > acceptableEpsilon)\n                    {\n                        errors.Add(string.Format(\"Numbers differ more than the allowed difference: {0} - {1}\",\n                            expected, actual));\n                        return false;\n                    }\n                    else\n                    {\n                        return true;\n                    }\n                case JTokenType.Array:\n                    JArray expectedArray = (JArray)expected;\n                    JArray actualArray = (JArray)actual;\n                    if (expectedArray.Count != actualArray.Count)\n                    {\n                        errors.Add(string.Format(\"Size of arrays are different: expected {0} != actual {1}\", expectedArray.Count, actualArray.Count));\n                        return false;\n                    }\n\n                    for (int i = 0; i < expectedArray.Count; i++)\n                    {\n                        if (!CompareJson(expectedArray[i], actualArray[i], errors))\n                        {\n                            errors.Add(\"Difference in array item at index \" + i);\n                            return false;\n                        }\n                    }\n\n                    return true;\n                case JTokenType.Object:\n                    JObject expectedObject = (JObject)expected;\n                    Dictionary<string, string> expectedKeyMap = new Dictionary<string, string>();\n                    foreach (var child in expectedObject)\n                    {\n                        expectedKeyMap.Add(child.Key.ToLowerInvariant(), child.Key);\n                    }\n\n                    JObject actualObject = (JObject)actual;\n                    Dictionary<string, string> actualKeyMap = new Dictionary<string, string>();\n                    foreach (var child in actualObject)\n                    {\n                        actualKeyMap.Add(child.Key.ToLowerInvariant(), child.Key);\n                    }\n\n                    foreach (var child in expectedObject)\n                    {\n                        var key = child.Key.ToLowerInvariant();\n                        if (key == \"id\") continue; // set by server, ignored at comparison\n\n                        if (!actualKeyMap.ContainsKey(key) || actualObject[actualKeyMap[key]] == null)\n                        {\n                            // Still might be OK, if the missing value is default.\n                            var expectedObjectValue = expectedObject[expectedKeyMap[key]];\n\n                            if (expectedObjectValue.Type == JTokenType.Null ||\n                                (expectedObjectValue.Type == JTokenType.Integer && expectedObjectValue.Value<long>() == 0) ||\n                                (expectedObjectValue.Type == JTokenType.Float && expectedObjectValue.Value<double>() == 0.0))\n                            {\n                                // No problem.\n                            }\n                            else\n                            {\n                                errors.Add(string.Format(\"Expected object contains a pair with key {0}, actual does not.\", child.Key));\n                                return false;\n                            }\n                        }\n                        else\n                        {\n                            if (!CompareJson(expectedObject[expectedKeyMap[key]], actualObject[actualKeyMap[key]], errors))\n                            {\n                                errors.Add(\"Difference in object member with key \" + key);\n                                return false;\n                            }\n                        }\n                    }\n\n                    return true;\n                default:\n                    throw new ArgumentException(\"Don't know how to compare JToken of type \" + expected.Type);\n            }\n        }\n\n        public static void CamelCaseProps(JObject itemToUpdate)\n        {\n            List<string> keys = new List<string>();\n            foreach (var x in itemToUpdate)\n            {\n                keys.Add(x.Key);\n            }\n\n            foreach (var key in keys)\n            {\n                if (char.IsUpper(key[0]))\n                {\n                    StringBuilder camel = new StringBuilder(key);\n                    camel[0] = Char.ToLowerInvariant(key[0]);\n                    itemToUpdate[camel.ToString()] = itemToUpdate[key];\n                    itemToUpdate.Remove(key);\n                }\n            }\n        }\n\n        public static string GetSerializedId<T>()\n        {\n            var idName = typeof(T).GetTypeInfo()\n                .DeclaredProperties\n                .Where(p => p.Name.ToLowerInvariant() == \"id\")\n                .Select(p =>\n                {\n                    var a = p.GetCustomAttribute<JsonPropertyAttribute>();\n                    return a == null ? p.Name : a.PropertyName;\n                })\n                .First();\n            return idName;\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Framework/ZumoPushGlobals.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Newtonsoft.Json.Linq;\nusing System;\n\nnamespace ZumoE2ETestApp.Framework\n{\n    class ZumoPushTestGlobals\n    {\n        public static string NHWp8RawTemplate = String.Format(\"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><wp:Notification xmlns:wp=\\\"WPNotification\\\"><wp:Toast><wp:Text1>$(News_{0})</wp:Text1></wp:Toast></wp:Notification>\", \"French\");\n        public static string NHWp8ToastTemplate = String.Format(\"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><wp:Notification xmlns:wp=\\\"WPNotification\\\"><wp:Toast><wp:Text1>$(News_{0})</wp:Text1></wp:Toast></wp:Notification>\", \"English\");\n        public static string NHWp8TileTemplate = @\"<?xml version=\"\"1.0\"\" encoding=\"\"utf-8\"\"?>\n                                                    <wp:Notification xmlns:wp=\"\"WPNotification\"\">\n                                                       <wp:Tile>\n                                                          <wp:BackgroundImage>http://zumotestserver.azurewebsites.net/content/zumo2.png</wp:BackgroundImage>\n                                                          <wp:Count>count</wp:Count>\n                                                          <wp:Title>$(News_Mandarin)</wp:Title>\n                                                       </wp:Tile>\n                                                    </wp:Notification>\";\n        public static string NHToastTemplateName = \"newsToastTemplate\";\n        public static string NHTileTemplateName = \"newsTileTemplate\";\n        public static string NHBadgeTemplateName = \"newsBadgeTemplate\";\n        public static string NHRawTemplateName = \"newsRawTemplate\";\n        public static JObject TemplateNotification = new JObject()\n        {\n            {\"News_English\", \"World News in English!\"},\n            {\"News_French\", \"Nouvelles du monde en français!\"},\n            {\"News_Mandarin\", \"在普通话的世界新闻！\"},\n            {\"News_Badge\", \"10\"}\n        };\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Framework/ZumoTest.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Threading.Tasks;\n\nnamespace ZumoE2ETestApp.Framework\n{\n    public delegate Task<bool> TestExecution(ZumoTest test);\n\n    public class TestStatusChangedEventArgs : EventArgs\n    {\n        public TestStatusChangedEventArgs(TestStatus status)\n        {\n            this.NewStatus = status;\n        }\n\n        public TestStatus NewStatus { get; private set; }\n    }\n\n    public class ZumoTest\n    {\n        public string Name { get; private set; }\n        public Dictionary<string, object> Data { get; private set; }\n        public TestStatus Status { get; private set; }\n\n        public DateTime StartTime { get; private set; }\n        public DateTime EndTime { get; private set; }\n\n        public bool CanRunUnattended { get; set; }\n\n        internal const string TimestampFormat = \"yyyy-MM-dd HH:mm:ss.fff\";\n        private TestExecution execution;\n        private List<string> logs;\n        private List<string> runtimeFeatures;\n\n        public event EventHandler<TestStatusChangedEventArgs> TestStatusChanged;\n\n        public ZumoTest(string name, TestExecution execution, params string[] requiredRuntimeFeatures)\n        {\n            this.Name = name;\n            this.Data = new Dictionary<string, object>();\n            this.CanRunUnattended = true;\n            this.logs = new List<string>();\n            this.execution = execution;\n            this.Status = TestStatus.NotRun;\n            this.runtimeFeatures = new List<string>();\n            if (requiredRuntimeFeatures.Length > 0)\n            {\n                foreach (string requiredRuntimeFeature in requiredRuntimeFeatures)\n                {\n                    if (requiredRuntimeFeature != null)\n                    {\n                        this.runtimeFeatures.Add(requiredRuntimeFeature);\n                    }\n                }\n            }\n        }\n\n        public void AddLog(string text, params object[] args)\n        {\n            if (args != null && args.Length > 0)\n            {\n                text = string.Format(CultureInfo.InvariantCulture, text, args);\n            }\n\n            text = string.Format(CultureInfo.InvariantCulture, \"[{0}] {1}\",\n                DateTime.UtcNow.ToString(TimestampFormat, CultureInfo.InvariantCulture),\n                text);\n            this.logs.Add(text);\n        }\n\n        public void Reset()\n        {\n            this.logs.Clear();\n            this.Status = TestStatus.NotRun;\n            if (this.TestStatusChanged != null)\n            {\n                this.TestStatusChanged(this, new TestStatusChangedEventArgs(this.Status));\n            }\n        }\n\n        public IEnumerable<string> GetLogs()\n        {\n            return this.logs;\n        }\n\n        public async Task<string> GetUnsupportedFeaturesAsync()\n        {\n            List<string> unsupportedFeatures = new List<string>();\n            if (runtimeFeatures.Count > 0)\n            {\n                foreach (var requiredFeature in this.runtimeFeatures)\n                {\n                    bool isEnabled;\n                    if (!(await ZumoTestGlobals.Instance.GetRuntimeFeatures(this)).TryGetValue(requiredFeature, out isEnabled))\n                    {\n                        // Not in the list.\n                        AddLog(\"Warning: Status of feature '{0}' is not provided by the runtime\", requiredFeature);\n                    }\n                    else if (!isEnabled)\n                    {\n                        unsupportedFeatures.Add(requiredFeature);\n                    }\n                }\n            }\n\n            return string.Join(\",\", unsupportedFeatures);\n        }\n\n        public async Task Run()\n        {\n            this.Status = TestStatus.Running;\n            if (this.TestStatusChanged != null)\n            {\n                this.TestStatusChanged(this, new TestStatusChangedEventArgs(this.Status));\n            }\n\n            try\n            {\n                this.StartTime = DateTime.UtcNow;\n                string unsupportedFeatures = await GetUnsupportedFeaturesAsync();\n                if (!string.IsNullOrEmpty(unsupportedFeatures))\n                {\n                    this.AddLog(\"Test skipped, missing required runtime features [{0}].\", unsupportedFeatures);\n                    this.Status = TestStatus.Skipped;\n                }\n                else\n                {\n                    bool passed = await this.execution(this);\n                    this.Status = passed ? TestStatus.Passed : TestStatus.Failed;\n                    this.AddLog(\"Test {0}\", this.Status);\n                }\n            }\n            catch (Exception ex)\n            {\n                this.AddLog(\"Test failed with exception: {0}\", ex);\n                this.Status = TestStatus.Failed;\n            }\n\n            this.EndTime = DateTime.UtcNow;\n\n            if (this.TestStatusChanged != null)\n            {\n                this.TestStatusChanged(this, new TestStatusChangedEventArgs(this.Status));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Framework/ZumoTestEventArgs.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace ZumoE2ETestApp.Framework\n{\n    public class ZumoTestEventArgs : EventArgs\n    {\n        public TestStatus TestStatus { get; set; }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Framework/ZumoTestGlobals.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.MobileServices;\nusing System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing System.Linq;\n\nnamespace ZumoE2ETestApp.Framework\n{\n    public class ZumoTestGlobals\n    {\n        public const string RoundTripTableName = \"w8RoundTripTable\";\n        public const string StringIdRoundTripTableName = \"stringIdRoundTripTable\";\n        public const string MoviesTableName = \"intIdMovies\";\n        public const string StringIdMoviesTableName = \"stringIdMovies\";\n#if !WINDOWS_PHONE\n        public const string PushTestTableName = \"w8PushTest\";\n#else\n        public const string PushTestTableName = \"wp8PushTest\";\n#endif\n        public const string ParamsTestTableName = \"ParamsTestTable\";\n\n        public const string ClientVersionKeyName = \"clientVersion\";\n        public const string RuntimeVersionKeyName = \"x-zumo-version\";\n\n        private static ZumoTestGlobals instance = new ZumoTestGlobals();\n\n        private static bool showAlerts = true;\n        public static bool ShowAlerts\n        {\n            get { return showAlerts; }\n            set { showAlerts = value; }\n        }\n\n        public const string LogsLocationFile = \"done.txt\";\n\n        public static class RuntimeFeatureNames\n        {\n            public static string AAD_LOGIN = \"azureActiveDirectoryLogin\";\n            public static string SSO_LOGIN = \"singleSignOnLogin\";\n            public static string LIVE_LOGIN = \"liveSDKLogin\";\n            public static string INT_ID_TABLES = \"intIdTables\";\n            public static string STRING_ID_TABLES = \"stringIdTables\";\n            public static string NH_PUSH_ENABLED = \"nhPushEnabled\";\n        }\n\n        private Dictionary<string, bool> runtimeFeatures;\n        public async Task<Dictionary<string, bool>> GetRuntimeFeatures(ZumoTest test)\n        {\n            if (runtimeFeatures == null)\n            {\n                RuntimeType = \"unknown\";\n                RuntimeVersion = \"unknown\";\n                IsNetRuntime = false;\n                IsNHPushEnabled = false;\n\n                try\n                {\n                    JToken apiResult = await Client.InvokeApiAsync(\"runtimeInfo\", HttpMethod.Get, null);\n                    runtimeFeatures = apiResult[\"features\"].ToObject<Dictionary<string, bool>>();\n                    var runtimeInfo = apiResult[\"runtime\"].ToObject<Dictionary<string, string>>();\n                    RuntimeType = runtimeInfo[\"type\"];\n                    RuntimeVersion = runtimeInfo[\"version\"];\n\n                    IsNetRuntime = RuntimeType.Equals(\".NET\");\n                    IsNHPushEnabled = runtimeFeatures[ZumoTestGlobals.RuntimeFeatureNames.NH_PUSH_ENABLED];\n                }\n                catch (Exception ex)\n                {\n                    test.AddLog(ex.Message);\n                }\n\n                if (runtimeFeatures.Count > 0)\n                {\n                    test.AddLog(\"Runtime: {0}\", ZumoTestGlobals.Instance.RuntimeType);\n                    test.AddLog(\"Version: {0}\", ZumoTestGlobals.Instance.RuntimeVersion);\n                    foreach (var entry in runtimeFeatures)\n                    {\n                        test.AddLog(\"Runtime feature: {0} : {1}\", entry.Key, entry.Value);\n                    }\n                }\n                else\n                {\n                    test.AddLog(\"Could not load the runtime information\");\n                }\n            }\n\n            return runtimeFeatures;\n        }\n\n        public string RuntimeType { get; private set; }\n\n        public string RuntimeVersion { get; private set; }\n        public bool IsNetRuntime { get; private set; }\n\n        public bool IsNHPushEnabled { get; private set; }\n\n        public MobileServiceClient Client { get; private set; }\n        public Dictionary<string, object> GlobalTestParams { get; private set; }\n\n        private ZumoTestGlobals()\n        {\n            this.GlobalTestParams = new Dictionary<string, object>();\n        }\n\n        public static ZumoTestGlobals Instance\n        {\n            get { return instance; }\n        }\n\n        public static void ResetInstance()\n        {\n            instance = new ZumoTestGlobals();\n        }\n\n        public void InitializeClient(string appUrl, string appKey)\n        {\n            bool needsUpdate = this.Client == null ||\n                (this.Client.ApplicationUri.ToString() != appUrl) ||\n                (this.Client.ApplicationKey != appKey);\n\n            if (needsUpdate)\n            {\n                if (string.IsNullOrEmpty(appUrl) || string.IsNullOrEmpty(appKey))\n                {\n                    throw new ArgumentException(\"Please enter valid application URL and key.\");\n                }\n\n                this.Client = new MobileServiceClient(appUrl, appKey);\n                this.runtimeFeatures = null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Framework/ZumoTestGroup.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace ZumoE2ETestApp.Framework\n{\n    public class ZumoTestGroup\n    {\n        public string Name { get; private set; }\n        public string HelpText { get; set; }\n\n        public DateTime StartTime { get; private set; }\n        public DateTime EndTime { get; private set; }\n\n        public event EventHandler TestGroupStarted;\n        public event EventHandler<ZumoTestGroupEventArgs> TestGroupFinished;\n        public event EventHandler TestStarted;\n        public event EventHandler<ZumoTestEventArgs> TestFinished;\n\n        private bool runningTests;\n        private int testsPassed;\n        private int testsFailed;\n        private int testsSkipped;\n        private List<ZumoTest> tests;\n\n        public IEnumerable<ZumoTest> AllTests\n        {\n            get { return tests; }\n        }\n\n        public ZumoTestGroup(string name)\n        {\n            this.Name = name;\n            this.testsFailed = 0;\n            this.testsPassed = 0;\n            this.testsSkipped = 0;\n            this.tests = new List<ZumoTest>();\n            this.runningTests = false;\n        }\n\n        public void AddTest(ZumoTest test)\n        {\n            this.tests.Add(test);\n        }\n\n        public IEnumerable<ZumoTest> GetTests()\n        {\n            return this.tests.AsEnumerable();\n        }\n\n        public void Reset()\n        {\n            this.testsFailed = 0;\n            this.testsPassed = 0;\n            this.testsSkipped = 0;\n            this.tests.Clear();\n            this.runningTests = false;\n        }\n\n        public List<string> GetLogs()\n        {\n            List<string> result = new List<string>();\n            result.Add(string.Format(\"[{0}] Tests for group '{1}'\",\n                this.StartTime.ToString(ZumoTest.TimestampFormat, CultureInfo.InvariantCulture),\n                this.Name));\n            if (testsSkipped == 0)\n            {\n                result.Add(string.Format(CultureInfo.InvariantCulture, \"Passed: {0}; Failed: {1}\", this.testsPassed, this.testsFailed));\n            }\n            else\n            {\n                result.Add(string.Format(CultureInfo.InvariantCulture, \"Passed: {0}; Failed: {1}; Skipped: {2}\", this.testsPassed, this.testsFailed, this.testsSkipped));\n            }\n\n            result.Add(\"----------------------------\");\n            foreach (var test in this.tests)\n            {\n                result.Add(string.Format(CultureInfo.InvariantCulture, \"[{0}] Logs for test {1} ({2})\",\n                    test.StartTime.ToString(ZumoTest.TimestampFormat, CultureInfo.InvariantCulture),\n                    test.Name,\n                    test.Status));\n                result.AddRange(test.GetLogs());\n                result.Add(string.Format(\"[{0}] -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\",\n                    test.EndTime.ToString(ZumoTest.TimestampFormat, CultureInfo.InvariantCulture)));\n            }\n\n            result.Add(string.Format(\"[{0}] ----------------------------\",\n                this.EndTime.ToString(ZumoTest.TimestampFormat, CultureInfo.InvariantCulture)));\n\n            return result;\n        }\n\n        private bool shouldStop = false;\n\n        public async Task Run(bool unattendedOnly = false)\n        {\n            this.shouldStop = false;\n\n            if (this.runningTests)\n            {\n                throw new InvalidOperationException(\"This group is already running\");\n            }\n\n            this.runningTests = true;\n\n            if (this.TestGroupStarted != null)\n            {\n                this.TestGroupStarted(this, new EventArgs());\n            }\n\n            this.StartTime = DateTime.UtcNow;\n\n            foreach (ZumoTest test in this.tests)\n            {\n                if (shouldStop)\n                {\n                    break;\n                }\n\n                if (!test.CanRunUnattended && unattendedOnly)\n                {\n                    continue;\n                }\n\n                if (this.TestStarted != null)\n                {\n                    this.TestStarted(test, new EventArgs());\n                }\n\n                await test.Run();\n\n                if (this.TestFinished != null)\n                {\n                    this.TestFinished(test, new ZumoTestEventArgs { TestStatus = test.Status });\n                }\n\n                switch (test.Status)\n                {\n                    case TestStatus.Failed:\n                        testsFailed++;\n                        break;\n                    case TestStatus.Passed:\n                        testsPassed++;\n                        break;\n                    case TestStatus.Skipped:\n                        testsSkipped++;\n                        break;\n                    default:\n                        throw new InvalidOperationException(\"Status out of range: \" + test.Status.ToString());\n                }\n            }\n\n            this.EndTime = DateTime.UtcNow;\n\n            if (this.TestGroupFinished != null)\n            {\n                this.TestGroupFinished(this, new ZumoTestGroupEventArgs\n                {\n                    TestsFailed = this.testsFailed,\n                    TestsPassed = this.testsPassed,\n                    TestsSkipped = this.testsSkipped,\n                });\n            }\n\n            this.runningTests = false;\n        }\n\n        internal void Stop()\n        {\n            this.shouldStop = true;\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Framework/ZumoTestGroupEventArgs.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace ZumoE2ETestApp.Framework\n{\n    public class ZumoTestGroupEventArgs : EventArgs\n    {\n        public int TestsPassed { get; set; }\n        public int TestsFailed { get; set; }\n        public int TestsSkipped { get; set; }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/MainPage.xaml",
    "content": "﻿<Page\n    x:Class=\"ZumoE2ETestApp.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:ZumoE2ETestApp\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"80\" />\n            <RowDefinition Height=\"5\" />\n            <RowDefinition Height=\"100\" />\n            <RowDefinition Height=\"5\" />\n            <RowDefinition Height=\"*\" />\n        </Grid.RowDefinitions>\n        <Canvas Grid.Row=\"1\" Background=\"Olive\" />\n        <Canvas Grid.Row=\"3\" Background=\"Olive\" />\n        <TextBlock FontSize=\"50\" FontWeight=\"Bold\"\n                   HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n                   Margin=\"10\" Text=\"Azure Mobile Services E2E Tests\" />\n        <Grid Grid.Row=\"2\" Margin=\"10\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\" />\n                <ColumnDefinition Width=\"*\" />\n                <ColumnDefinition Width=\"Auto\" />\n            </Grid.ColumnDefinitions>\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"*\"/>\n            </Grid.RowDefinitions>\n            <TextBlock Text=\"App URL:\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n                       Grid.Row=\"0\" FontSize=\"20\"/>\n            <TextBlock Text=\"App Key:\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n                       Grid.Row=\"1\" FontSize=\"20\"/>\n            <StackPanel Orientation=\"Horizontal\"  Grid.Row=\"0\" Grid.Column=\"3\" >\n                <Button Content=\"Save App Info\" Name=\"btnSaveAppInfo\" Click=\"btnSaveAppInfo_Click_1\" />\n                <Button  Name=\"btnRunAllTests\" Content=\"Run All Tests\" HorizontalAlignment=\"Right\" Click=\"btnRunAllTests_Click\"/>\n            </StackPanel>\n            <StackPanel Orientation=\"Horizontal\"  Grid.Row=\"1\" Grid.Column=\"3\" >\n                <Button Content=\"Load App Info\" Name=\"btnLoadAppInfo\" Click=\"btnLoadAppInfo_Click_1\" />\n                <Button Name=\"btnRunAllUnattendedTests\" Content=\"Run All Tests (unattended)\" Click=\"btnRunAllUnattendedTests_Click\"/>\n            </StackPanel>\n            <TextBox Name=\"txtAppUrl\" Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"5\" Text=\"https://SERVICENAMEHERE.azure-mobile.net/\" />\n            <TextBox Name=\"txtAppKey\" Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"5\" Text=\"\" />\n        </Grid>\n        <Grid Grid.Row=\"4\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\" />\n                <ColumnDefinition Width=\"5\" />\n                <ColumnDefinition Width=\"3*\" />\n            </Grid.ColumnDefinitions>\n            <Canvas Grid.Column=\"1\" Background=\"Olive\" />\n            <StackPanel Orientation=\"Vertical\" Grid.Column=\"0\">\n                <TextBlock HorizontalAlignment=\"Center\" Margin=\"10\" FontSize=\"30\"\n                           Text=\"Test Groups\" />\n                <ListBox Margin=\"10\" Name=\"lstTestGroups\" SelectionChanged=\"lstTestGroups_SelectionChanged_1\">\n                    <ListBox.ItemTemplate>\n                        <DataTemplate>\n                            <TextBlock Text=\"{Binding Path=Name}\" Margin=\"5\" />\n                        </DataTemplate>\n                    </ListBox.ItemTemplate>\n                </ListBox>\n            </StackPanel>\n            <Grid Grid.Column=\"2\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"60\"/>\n                    <RowDefinition Height=\"60\"/>\n                    <RowDefinition Height=\"60\"/>\n                    <RowDefinition Height=\"*\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"150\" />\n                    <ColumnDefinition Width=\"*\" />\n                </Grid.ColumnDefinitions>\n                <TextBlock HorizontalAlignment=\"Center\" Grid.ColumnSpan=\"2\" Margin=\"10\" FontSize=\"25\"\n                           Text=\"Tests for Group\" Name=\"lblTestGroupTitle\" />\n                <ToggleButton Grid.Row=\"1\" Grid.Column=\"0\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Center\"\n                        Margin=\"10\" Content=\"Run Tests\" Name=\"btnRunTests\" Checked=\"btnRunTests_Click_1\" Unchecked=\"btnRunTests_Unchecked_1\" />\n                <StackPanel Orientation=\"Horizontal\"\n                            Grid.Row=\"1\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\">\n                    <Button Margin=\"10\" Content=\"Reset\" Name=\"btnResetTests\" Click=\"btnResetTests_Click_1\" />\n                    <Button Margin=\"10\" Content=\"Run Selected Tests\" Name=\"btnRunSelected\" Click=\"btnRunSelected_Click_1\"\n                            IsEnabled=\"False\" />\n                </StackPanel>\n                <Button Margin=\"10\" Content=\"Send logs to: \" HorizontalAlignment=\"Stretch\"\n                        Grid.Column=\"0\" Grid.Row=\"2\" Name=\"btnSendLogs\" Click=\"btnSendLogs_Click_1\" />\n                <TextBox Name=\"txtUploadLogsUrl\" Margin=\"10,11,10,9\" Grid.Column=\"1\" Grid.Row=\"2\" />\n                <ListBox Margin=\"10\" Name=\"lstTests\" Grid.Row=\"3\" Grid.ColumnSpan=\"2\" \n                         SelectionMode=\"Extended\"\n                         DoubleTapped=\"lstTests_DoubleTapped_1\" SelectionChanged=\"lstTests_SelectionChanged_1\">\n                    <ListBox.ItemTemplate>\n                        <DataTemplate>\n                            <TextBlock Foreground=\"{Binding Path=ColorFromStatus}\"\n                                       Text=\"{Binding Path=TestName}\" Margin=\"5\" />\n                        </DataTemplate>\n                    </ListBox.ItemTemplate>\n                </ListBox>\n            </Grid>\n        </Grid>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/MainPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Windows.Storage;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Navigation;\nusing ZumoE2ETestApp.Framework;\nusing ZumoE2ETestApp.Tests;\nusing ZumoE2ETestApp.UIElements;\n\n// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace ZumoE2ETestApp\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        List<ZumoTestGroup> allTests;\n\n        public MainPage()\n        {\n            this.InitializeComponent();\n            this.allTests = TestStore.CreateTestGroups();\n        }\n\n        /// <summary>\n        /// Invoked when this page is about to be displayed in a Frame.\n        /// </summary>\n        /// <param name=\"e\">Event data that describes how this page was reached.  The Parameter\n        /// property is typically used to configure the page.</param>\n        protected override async void OnNavigatedTo(NavigationEventArgs e)\n        {\n            List<ListViewForTestGroup> sources = allTests.Select((tg, i) => new ListViewForTestGroup(i + 1, tg)).ToList();\n            this.lstTestGroups.ItemsSource = sources;\n            SavedAppInfo savedAppInfo = await AppInfoRepository.Instance.GetSavedAppInfo();\n            this.txtUploadLogsUrl.Text = savedAppInfo.LastUploadUrl ?? \"\";\n            if (savedAppInfo.LastService != null && !string.IsNullOrEmpty(savedAppInfo.LastService.AppUrl) && !string.IsNullOrEmpty(savedAppInfo.LastService.AppKey))\n            {\n                this.txtAppUrl.Text = savedAppInfo.LastService.AppUrl;\n                this.txtAppKey.Text = savedAppInfo.LastService.AppKey;\n            }\n        }\n\n        private async void btnSaveAppInfo_Click_1(object sender, RoutedEventArgs e)\n        {\n            ZumoTestGlobals.ResetInstance();\n            SavedAppInfo appInfo = await AppInfoRepository.Instance.GetSavedAppInfo();\n            string appUrl = this.txtAppUrl.Text;\n            string appKey = this.txtAppKey.Text;\n            if (string.IsNullOrEmpty(appUrl) || string.IsNullOrEmpty(appKey))\n            {\n                await Util.MessageBox(\"Please enter valid application URL / key\", \"Error\");\n            }\n            else\n            {\n                if (appInfo.MobileServices.Any(ms => ms.AppKey == appKey && ms.AppUrl == appUrl))\n                {\n                    await Util.MessageBox(\"Mobile service info already saved\", \"Information\");\n                }\n                else\n                {\n                    appInfo.MobileServices.Add(new MobileServiceInfo { AppUrl = appUrl, AppKey = appKey });\n                    await AppInfoRepository.Instance.SaveAppInfo(appInfo);\n                    await Util.MessageBox(\"Mobile service info successfully saved\", \"Information\");\n                }\n            }\n        }\n\n        private async void btnLoadAppInfo_Click_1(object sender, RoutedEventArgs e)\n        {\n            ZumoTestGlobals.ResetInstance();\n            SavedAppInfo savedAppInfo = await AppInfoRepository.Instance.GetSavedAppInfo();\n            if (savedAppInfo.MobileServices.Count == 0)\n            {\n                await Util.MessageBox(\"There are no saved applications.\", \"Error\");\n            }\n            else\n            {\n                Popup popup = new Popup();\n                SaveAppsControl page = new SaveAppsControl(savedAppInfo.MobileServices);\n                page.CloseRequested += (snd, ea) =>\n                {\n                    if (page.ApplicationUrl != null && page.ApplicationKey != null)\n                    {\n                        this.txtAppUrl.Text = page.ApplicationUrl;\n                        this.txtAppKey.Text = page.ApplicationKey;\n                    }\n\n                    popup.IsOpen = false;\n                };\n\n                popup.Child = page;\n                popup.IsOpen = true;\n            }\n        }\n\n        private async void lstTestGroups_SelectionChanged_1(object sender, SelectionChangedEventArgs e)\n        {\n            int selectedIndex = this.lstTestGroups.SelectedIndex;\n            if (selectedIndex >= 0)\n            {\n                ZumoTestGroup testGroup = allTests[selectedIndex];\n                List<ListViewForTest> sources = testGroup.GetTests().Select((t, i) => new ListViewForTest(i + 1, t)).ToList();\n                this.lstTests.ItemsSource = sources;\n                this.lblTestGroupTitle.Text = string.Format(\"{0}. {1}\", selectedIndex + 1, testGroup.Name);\n                if (testGroup.Name.StartsWith(TestStore.AllTestsGroupName) && !string.IsNullOrEmpty(this.txtUploadLogsUrl.Text))\n                {\n                    await this.RunTestGroup(testGroup);\n                    int passed = testGroup.AllTests.Count(t => t.Status == TestStatus.Passed);\n                    int failed = testGroup.AllTests.Count(t => t.Status == TestStatus.Failed);\n                    int skipped = testGroup.AllTests.Count(t => t.Status == TestStatus.Skipped);\n                    string message = string.Format(CultureInfo.InvariantCulture, \"Passed {0} of {1} tests (skipped {2})\", passed, (passed + failed), skipped);\n                    if (failed == 0)\n                    {\n                        if (testGroup.Name == TestStore.AllTestsGroupName)\n                        {\n                            btnRunAllTests.Content = \"Passed\";\n                        }\n                        else\n                        {\n                            btnRunAllUnattendedTests.Content = \"Passed\";\n                        }\n                    }\n\n                    if (ZumoTestGlobals.ShowAlerts)\n                    {\n                        await Util.MessageBox(message, \"Test group finished\");\n                    }\n\n                    ZumoTestGlobals.ShowAlerts = true;\n                }\n            }\n            else\n            {\n                this.lstTests.ItemsSource = null;\n            }\n        }\n\n        private async void btnRunTests_Click_1(object sender, RoutedEventArgs e)\n        {\n            btnRunTests.Content = \"Cancel Run\";\n            int selectedIndex = this.lstTestGroups.SelectedIndex;\n            if (selectedIndex >= 0)\n            {\n                ZumoTestGroup testGroup = allTests[selectedIndex];\n                await this.RunTestGroup(testGroup);\n                int passed = testGroup.AllTests.Count(t => t.Status == TestStatus.Passed);\n                int failed = testGroup.AllTests.Count(t => t.Status == TestStatus.Failed);\n                int skipped = testGroup.AllTests.Count(t => t.Status == TestStatus.Skipped);\n                string message = string.Format(CultureInfo.InvariantCulture, \"Passed {0} of {1} tests (skipped {2})\", passed, (passed + failed), skipped);\n                await Util.MessageBox(message, \"Test group finished\");\n            }\n            else\n            {\n                await Util.MessageBox(\"Please select a test group.\", \"Error\");\n            }\n\n            var tb = (ToggleButton)sender;\n            if (!tb.IsChecked.HasValue || tb.IsChecked.Value)\n            {\n                tb.IsChecked = false;\n            }\n        }\n\n        private void btnRunTests_Unchecked_1(object sender, RoutedEventArgs e)\n        {\n            btnRunTests.Content = \"Run Tests\";\n            this.StopTestGroup();\n        }\n\n        private async Task<bool> InitializeClient()\n        {\n            var appUrl = this.txtAppUrl.Text;\n            var appKey = this.txtAppKey.Text;\n\n            string error = null;\n            try\n            {\n                ZumoTestGlobals.Instance.InitializeClient(appUrl, appKey);\n            }\n            catch (Exception ex)\n            {\n                error = string.Format(CultureInfo.InvariantCulture, \"{0}\", ex);\n            }\n\n            if (error != null)\n            {\n                await Util.MessageBox(error, \"Error initializing client\");\n                return false;\n            }\n            else\n            {\n                // Saving app info for future runs\n                var savedAppInfo = await AppInfoRepository.Instance.GetSavedAppInfo();\n                if (savedAppInfo.LastService == null || savedAppInfo.LastService.AppUrl != appUrl || savedAppInfo.LastService.AppKey != appKey)\n                {\n                    if (savedAppInfo.LastService == null)\n                    {\n                        savedAppInfo.LastService = new MobileServiceInfo();\n                    }\n\n                    savedAppInfo.LastService.AppKey = appKey;\n                    savedAppInfo.LastService.AppUrl = appUrl;\n                    savedAppInfo.LastUploadUrl = this.txtUploadLogsUrl.Text;\n                    await AppInfoRepository.Instance.SaveAppInfo(savedAppInfo);\n                }\n\n                return true;\n            }\n        }\n\n        private ZumoTestGroup currentTestGroup;\n\n        private async Task RunTestGroup(ZumoTestGroup testGroup)\n        {\n            this.currentTestGroup = testGroup;\n            var clientInitialized = await InitializeClient();\n            if (!clientInitialized)\n            {\n                return;\n            }\n\n            string error = null;\n            try\n            {\n                await testGroup.Run();\n            }\n            catch (Exception ex)\n            {\n                error = string.Format(CultureInfo.InvariantCulture, \"Unhandled exception: {0}\", ex);\n            }\n\n            if (error != null)\n            {\n                await Util.MessageBox(error, \"Error\");\n            }\n\n            if (testGroup.Name.StartsWith(TestStore.AllTestsGroupName) && !string.IsNullOrEmpty(this.txtUploadLogsUrl.Text))\n            {\n                // Upload logs automatically if running all tests and write the the logs location to done.txt\n                var logsUploadedURL = await Util.UploadLogs(this.txtUploadLogsUrl.Text, string.Join(\"\\n\", testGroup.GetLogs()), \"winstorecs\", true);\n                StorageFolder storageFolder = KnownFolders.PicturesLibrary;\n                StorageFile logsUploadedFile = await storageFolder.CreateFileAsync(ZumoTestGlobals.LogsLocationFile, CreationCollisionOption.ReplaceExisting);\n                await FileIO.WriteTextAsync(logsUploadedFile, logsUploadedURL);\n            }\n        }\n\n        private void StopTestGroup()\n        {\n            currentTestGroup.Stop();\n        }\n\n        private void btnResetTests_Click_1(object sender, RoutedEventArgs e)\n        {\n            try\n            {\n                int selectedIndex = this.lstTestGroups.SelectedIndex;\n                if (selectedIndex >= 0)\n                {\n                    foreach (var test in this.allTests[selectedIndex].AllTests)\n                    {\n                        test.Reset();\n                    }\n                }\n                else\n                {\n                    Util.MessageBox(\"Please select a group to reset the tests from.\", \"Error\");\n                }\n            }\n            catch (Exception ex)\n            {\n                Util.MessageBox(string.Format(CultureInfo.InvariantCulture, \"Unhandled exception: {0}\", ex), \"Error\");\n            }\n        }\n\n        private async void btnSendLogs_Click_1(object sender, RoutedEventArgs e)\n        {\n            int selectedIndex = this.lstTestGroups.SelectedIndex;\n            if (selectedIndex >= 0)\n            {\n                // Saves URL in local storage\n                SavedAppInfo appInfo = await AppInfoRepository.Instance.GetSavedAppInfo();\n                string uploadUrl = this.txtUploadLogsUrl.Text;\n                if (appInfo.LastUploadUrl != uploadUrl)\n                {\n                    appInfo.LastUploadUrl = uploadUrl;\n                    await AppInfoRepository.Instance.SaveAppInfo(appInfo);\n                }\n\n                ZumoTestGroup testGroup = allTests[selectedIndex];\n                List<string> lines = new List<string>();\n                foreach (var test in testGroup.AllTests)\n                {\n                    lines.Add(string.Format(\"Logs for test {0} (status = {1})\", test.Name, test.Status));\n                    lines.AddRange(test.GetLogs());\n                    lines.Add(\"-----------------------\");\n                }\n\n                UploadLogsControl uploadLogsPage = new UploadLogsControl(testGroup.Name, string.Join(\"\\n\", lines), uploadUrl);\n                await uploadLogsPage.Display();\n            }\n            else\n            {\n                await Util.MessageBox(\"A test group needs to be selected\", \"Error\");\n            }\n        }\n\n        private void lstTests_DoubleTapped_1(object sender, DoubleTappedRoutedEventArgs e)\n        {\n            int selectedGroup = this.lstTestGroups.SelectedIndex;\n            if (selectedGroup >= 0)\n            {\n                ZumoTestGroup testGroup = allTests[selectedGroup];\n                int selectedTest = this.lstTests.SelectedIndex;\n                List<ZumoTest> tests = testGroup.AllTests.ToList();\n                if (selectedTest >= 0 && selectedTest < tests.Count)\n                {\n                    ZumoTest test = tests[selectedTest];\n                    List<string> lines = new List<string>();\n                    lines.Add(string.Format(\"Logs for test {0} (status = {1})\", test.Name, test.Status));\n                    lines.AddRange(test.GetLogs());\n                    lines.Add(\"-----------------------\");\n\n                    UploadLogsControl uploadLogsPage = new UploadLogsControl(testGroup.Name, string.Join(\"\\n\", lines), null);\n                    uploadLogsPage.Display();\n                }\n            }\n        }\n\n        private async void btnRunSelected_Click_1(object sender, RoutedEventArgs e)\n        {\n            var items = this.lstTests.SelectedItems;\n            if (items.Count == 0)\n            {\n                await Util.MessageBox(\"No tests selected\", \"Error\");\n            }\n            else\n            {\n                ZumoTestGroup partialGroup = new ZumoTestGroup(\"Partial test group\");\n                foreach (ListViewForTest test in items)\n                {\n                    partialGroup.AddTest(test.Test);\n                }\n\n                await this.RunTestGroup(partialGroup);\n            }\n        }\n\n        private void lstTests_SelectionChanged_1(object sender, SelectionChangedEventArgs e)\n        {\n            var selectedItems = this.lstTests.SelectedItems;\n            this.btnRunSelected.IsEnabled = selectedItems.Count > 0;\n        }\n\n        private void btnRunAllTests_Click(object sender, RoutedEventArgs e)\n        {\n            ZumoTestGlobals.ShowAlerts = false;\n            for (int i = 0; i < this.allTests.Count; i++)\n            {\n                if (allTests[i].Name == TestStore.AllTestsGroupName)\n                {\n                    this.lstTestGroups.SelectedIndex = i;\n                    break;\n                }\n            }\n        }\n\n        private void btnRunAllUnattendedTests_Click(object sender, RoutedEventArgs e)\n        {\n            ZumoTestGlobals.ShowAlerts = false;\n            for (int i = 0; i < this.allTests.Count; i++)\n            {\n                if (allTests[i].Name == TestStore.AllTestsUnattendedGroupName)\n                {\n                    this.lstTestGroups.SelectedIndex = i;\n                    break;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Package.StoreAssociation.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<StoreAssociation xmlns=\"http://schemas.microsoft.com/appx/2010/storeassociation\">\n  <Publisher>CN=ADEAF8A7-89BC-443A-AD64-12C7A75AE7EB</Publisher>\n  <NamespacePrefix>36229carlosff</NamespacePrefix>\n  <PublisherDisplayName>carlosff</PublisherDisplayName>\n  <GeneratePackageHash>http://www.w3.org/2001/04/xmlenc#sha256</GeneratePackageHash>\n  <SupportedLocales>\n    <Language Code=\"af\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"af-za\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"am\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"am-et\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ar\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-ae\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-bh\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-dz\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-eg\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-iq\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-jo\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-kw\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-lb\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-ly\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-ma\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-om\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-qa\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-sa\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-sy\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-tn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ar-ye\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"as\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"as-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"az-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"az-arab-az\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"az-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"az-cyrl-az\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"az-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"az-latn-az\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"be\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"be-by\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bg\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"bg-bg\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"bn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bn-bd\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bn-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bs\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bs-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bs-cyrl-ba\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bs-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"bs-latn-ba\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ca\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ca-es\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ca-es-valencia\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"chr-cher\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"chr-cher-us\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"chr-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"cs\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"cs-cz\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"cy\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"cy-gb\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"da\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"da-dk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"de\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"de-at\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"de-ch\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"de-de\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"de-li\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"de-lu\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"el\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"el-gr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-011\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-014\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-018\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-021\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-029\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-053\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-au\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-bz\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-ca\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-gb\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-hk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-id\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-ie\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-in\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-jm\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-kz\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-mt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-my\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-nz\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-ph\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-pk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-sg\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-tt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-us\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-vn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"en-za\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-019\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-419\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-ar\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-bo\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-cl\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-co\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-cr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-do\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-ec\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-es\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-gt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-hn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-mx\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-ni\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-pa\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-pe\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-pr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-py\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-sv\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-us\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-uy\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"es-ve\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"et\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"et-ee\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"eu\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"eu-es\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"fa\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"fa-ir\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"fi\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fi-fi\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fil\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"fil-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"fil-ph\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"fr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-011\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-015\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-021\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-029\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-155\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-be\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-ca\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-cd\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-ch\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-ci\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-cm\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-fr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-ht\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-lu\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-ma\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-mc\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-ml\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"fr-re\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"frc-latn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"frp-latn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ga\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ga-ie\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"gd-gb\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"gd-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"gl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"gl-es\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"gu\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"gu-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ha-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ha-latn-ng\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"he\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"he-il\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hi\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hi-in\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hr-ba\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hr-hr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hu\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hu-hu\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"hy\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"hy-am\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"id\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"id-id\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ig-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ig-ng\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"is\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"is-is\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"it\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"it-ch\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"it-it\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"iu-cans\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"iu-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"iu-latn-ca\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ja\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ja-jp\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ka\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ka-ge\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"kk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"kk-kz\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"km\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"km-kh\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"kn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"kn-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ko\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ko-kr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"kok\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"kok-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ku-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ku-arab-iq\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ky-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ky-kg\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"lb\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"lb-lu\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"lt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"lt-lt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"lv\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"lv-lv\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"mi\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mi-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mi-nz\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mk-mk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ml\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ml-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mn-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mn-mn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mn-mong\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mn-phag\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mr\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mr-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ms\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ms-bn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ms-my\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mt\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"mt-mt\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"nb\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"nb-no\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ne\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ne-np\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"nl\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"nl-be\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"nl-nl\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"nn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"nn-no\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"no\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"no-no\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"nso\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"nso-za\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"or\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"or-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pa\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pa-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pa-arab-pk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pa-deva\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pa-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pl\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"pl-pl\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"prs\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"prs-af\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"prs-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"pt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"pt-br\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"pt-pt\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"quc-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"qut-gt\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"qut-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"quz\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"quz-bo\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"quz-ec\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"quz-pe\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ro\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ro-ro\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ru\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ru-ru\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"rw\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"rw-rw\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sd-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sd-arab-pk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sd-deva\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"si\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"si-lk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sk-sk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sl\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sl-si\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sq\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sq-al\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sr-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sr-cyrl-ba\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sr-cyrl-cs\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sr-cyrl-me\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sr-cyrl-rs\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sr-latn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sr-latn-ba\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sr-latn-cs\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sr-latn-me\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sr-latn-rs\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sv\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sv-fi\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sv-se\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"sw\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"sw-ke\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ta\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ta-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"te\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"te-in\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tg-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tg-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tg-cyrl-tj\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tg-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"th\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"th-th\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ti\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ti-et\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tk-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tk-cyrl-tr\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tk-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tk-latn-tr\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tk-tm\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tn-bw\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tn-za\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"tr-tr\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"tt-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tt-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tt-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"tt-ru\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ug-arab\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ug-cn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ug-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ug-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"uk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"uk-ua\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"ur\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"ur-pk\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"uz-cyrl\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"uz-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"uz-latn-uz\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"vi\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"vi-vn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"wo\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"wo-sn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"xh\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"xh-za\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"yo-latn\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"yo-ng\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"zh-cn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hans\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hans-cn\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hans-sg\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hant\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hant-hk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hant-mo\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hant-tw\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-hk\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zh-tw\" InMinimumRequirementSet=\"true\" />\n    <Language Code=\"zu\" InMinimumRequirementSet=\"false\" />\n    <Language Code=\"zu-za\" InMinimumRequirementSet=\"false\" />\n  </SupportedLocales>\n  <ProductReservedInfo>\n    <MainPackageIdentityName>36229carlosff.ZumoE2ETestApp</MainPackageIdentityName>\n    <ReservedNames>\n      <ReservedName>ZumoE2ETestApp</ReservedName>\n    </ReservedNames>\n  </ProductReservedInfo>\n  <AccountPackageIdentityNames>\n    <MainPackageIdentityName>36229carlosff.carlos20130909</MainPackageIdentityName>\n    <MainPackageIdentityName>36229carlosff.CarlosSSOLive</MainPackageIdentityName>\n    <MainPackageIdentityName>36229carlosff.carlostest1024</MainPackageIdentityName>\n    <MainPackageIdentityName>36229carlosff.carlostest1029</MainPackageIdentityName>\n    <MainPackageIdentityName>36229carlosff.MicrosoftAuthTest</MainPackageIdentityName>\n    <MainPackageIdentityName>36229carlosff.QuickOperationsMathGame</MainPackageIdentityName>\n    <MainPackageIdentityName>36229carlosff.zumotestblu</MainPackageIdentityName>\n  </AccountPackageIdentityNames>\n  <PackageInfoList LandingUrl=\"https://appdev.microsoft.com:443/StorePortals/Developer/Catalog/ReleaseAnchor/a8638a53-27c2-4c2e-a11c-7285a02d0ef0\" />\n</StoreAssociation>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\">\n  <Identity Name=\"36229carlosff.ZumoE2ETestApp\" Publisher=\"CN=ADEAF8A7-89BC-443A-AD64-12C7A75AE7EB\" Version=\"1.0.0.0\" />\n  <Properties>\n    <DisplayName>ZumoE2ETestApp</DisplayName>\n    <PublisherDisplayName>carlosff</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n  <Prerequisites>\n    <OSMinVersion>6.2.1</OSMinVersion>\n    <OSMaxVersionTested>6.2.1</OSMaxVersionTested>\n  </Prerequisites>\n  <Resources>\n    <Resource Language=\"x-generate\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"App\" Executable=\"$targetnametoken$.exe\" EntryPoint=\"ZumoE2ETestApp.App\">\n      <VisualElements DisplayName=\"ZumoE2ETestApp\" Logo=\"Assets\\Logo.png\" SmallLogo=\"Assets\\SmallLogo.png\" Description=\"ZumoE2ETestApp\" ForegroundText=\"light\" BackgroundColor=\"#464646\" ToastCapable=\"true\">\n        <DefaultTile ShowName=\"allLogos\" WideLogo=\"Assets\\WideLogo.png\" />\n        <SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </VisualElements>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n    <Capability Name=\"picturesLibrary\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Properties/AssemblyInfo.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"ZumoE2ETestApp\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"ZumoE2ETestApp\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/ExceptionTypeWhichWillNeverBeThrown.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\n\nnamespace ZumoE2ETestApp.Tests\n{\n    // Used as the type parameter to positive tests\n    internal class ExceptionTypeWhichWillNeverBeThrown : Exception\n    {\n        private ExceptionTypeWhichWillNeverBeThrown() { }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/TestStore.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing ZumoE2ETestApp.Framework;\n#if WINDOWS_PHONE\nusing ZumoE2ETestAppWP8.Tests;\n#endif\n\nnamespace ZumoE2ETestApp.Tests\n{\n    public static class TestStore\n    {\n        public const string AllTestsGroupName = \"All tests\";\n        public const string AllTestsUnattendedGroupName = AllTestsGroupName + \" (unattended)\";\n\n        public static List<ZumoTestGroup> CreateTestGroups()\n        {\n            List<ZumoTestGroup> result = new List<ZumoTestGroup>\n            {\n                ZumoSetupTests.CreateTests(),\n#if !NET45\n                ZumoLoginTests.CreateTests(),\n#endif\n                ZumoCustomApiTests.CreateTests(),\n                ZumoRoundTripTests.CreateTests(),\n                ZumoQueryTests.CreateTests(),\n                ZumoCUDTests.CreateTests(),\n                ZumoMiscTests.CreateTests(),\n#if WINDOWS_PHONE\n                ZumoWP8PushTests.CreateTests(),\n#endif\n\n#if NETFX_CORE\n                ZumoPushTests.CreateTests(),\n                ZumoOfflineTests.CreateTests(),\n#endif\n            };\n\n            ZumoTestGroup allTestsUnattendedGroup = CreateGroupWithAllTests(result, true);\n            ZumoTestGroup allTestsGroup = CreateGroupWithAllTests(result, false);\n            result.Add(allTestsUnattendedGroup);\n            result.Add(allTestsGroup);\n\n            return result;\n        }\n\n        private static ZumoTestGroup CreateGroupWithAllTests(List<ZumoTestGroup> testGroups, bool unattendedOnly)\n        {\n            ZumoTestGroup result = new ZumoTestGroup(unattendedOnly ? AllTestsUnattendedGroupName : AllTestsGroupName);\n            foreach (var group in testGroups)\n            {\n                result.AddTest(ZumoTestCommon.CreateSeparator(\"Start of group: \" + group.Name));\n                foreach (var test in group.AllTests)\n                {\n                    if (test.CanRunUnattended || !unattendedOnly)\n                    {\n                        result.AddTest(test);\n                    }\n                }\n\n                result.AddTest(ZumoTestCommon.CreateSeparator(\"------------------\"));\n            }\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/Types/ICloneableItem.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n\nnamespace ZumoE2ETestApp.Tests.Types\n{\n    public interface ICloneableItem<T> where T : ICloneableItem<T>\n    {\n        T Clone();\n        object Id { get; set; }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/Types/Movie.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Globalization;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json;\nusing ZumoE2ETestApp.Framework;\n\nnamespace ZumoE2ETestApp.Tests.Types\n{\n    public interface IMovie\n    {\n        string Title { get; set; }\n        int Duration { get; set; }\n        string MPAARating { get; set; }\n        DateTime ReleaseDate { get; set; }\n        bool BestPictureWinner { get; set; }\n        int Year { get; set; }\n    }\n\n    [DataTable(ZumoTestGlobals.MoviesTableName)]\n    public class Movie : IMovie\n    {\n        [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]\n        public int Id { get; set; }\n        public string Title { get; set; }\n        public int Duration { get; set; }\n        public string MPAARating { get; set; }\n        public DateTime ReleaseDate { get; set; }\n        public bool BestPictureWinner { get; set; }\n        public int Year { get; set; }\n\n        public override string ToString()\n        {\n            return string.Format(CultureInfo.InvariantCulture, \"Movie[Title={0},Duration={1},Rating={2},ReleaseDate={3},BestPictureWinner={4},Year={5}\",\n                Title, Duration, MPAARating,\n                ReleaseDate.ToUniversalTime().ToString(\"yyyy-MM-dd:HH:mm:ss.fffZ\", CultureInfo.InvariantCulture),\n                BestPictureWinner, Year);\n        }\n\n        public override int GetHashCode()\n        {\n            int result = 0;\n            if (Title != null) result ^= Title.GetHashCode();\n            result ^= Duration.GetHashCode();\n            if (MPAARating != null) result ^= MPAARating.GetHashCode();\n            result ^= ReleaseDate.ToUniversalTime().GetHashCode();\n            result ^= BestPictureWinner.GetHashCode();\n            result ^= Year.GetHashCode();\n            return result;\n        }\n\n        public override bool Equals(object obj)\n        {\n            Movie other = obj as Movie;\n            if (other == null) return false;\n            if (this.Title != other.Title) return false;\n            if (this.Duration != other.Duration) return false;\n            if (this.MPAARating != other.MPAARating) return false;\n            if (!this.ReleaseDate.ToUniversalTime().Equals(other.ReleaseDate.ToUniversalTime())) return false;\n            if (this.BestPictureWinner != other.BestPictureWinner) return false;\n            if (this.Year != other.Year) return false;\n            return true;\n        }\n    }\n\n    [DataTable(ZumoTestGlobals.StringIdMoviesTableName)]\n    public class StringIdMovie : IMovie\n    {\n        public string Id { get; set; }\n        public string Title { get; set; }\n        public int Duration { get; set; }\n        public string MPAARating { get; set; }\n        public DateTime ReleaseDate { get; set; }\n        public bool BestPictureWinner { get; set; }\n        public int Year { get; set; }\n\n        public StringIdMovie() { }\n        public StringIdMovie(string id, Movie movie)\n        {\n            this.Id = id;\n            this.Title = movie.Title;\n            this.Duration = movie.Duration;\n            this.MPAARating = movie.MPAARating;\n            this.ReleaseDate = movie.ReleaseDate;\n            this.BestPictureWinner = movie.BestPictureWinner;\n            this.Year = movie.Year;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(CultureInfo.InvariantCulture, \"Movie/string id[Title={0},Duration={1},Rating={2},ReleaseDate={3},BestPictureWinner={4},Year={5}\",\n                Title, Duration, MPAARating,\n                ReleaseDate.ToUniversalTime().ToString(\"yyyy-MM-dd:HH:mm:ss.fffZ\", CultureInfo.InvariantCulture),\n                BestPictureWinner, Year);\n        }\n\n        public override int GetHashCode()\n        {\n            int result = 0;\n            if (Title != null) result ^= Title.GetHashCode();\n            result ^= Duration.GetHashCode();\n            if (MPAARating != null) result ^= MPAARating.GetHashCode();\n            result ^= ReleaseDate.ToUniversalTime().GetHashCode();\n            result ^= BestPictureWinner.GetHashCode();\n            result ^= Year.GetHashCode();\n            return result;\n        }\n\n        public override bool Equals(object obj)\n        {\n            StringIdMovie other = obj as StringIdMovie;\n            if (other == null) return false;\n            if (this.Title != other.Title) return false;\n            if (this.Duration != other.Duration) return false;\n            if (this.MPAARating != other.MPAARating) return false;\n            if (!this.ReleaseDate.ToUniversalTime().Equals(other.ReleaseDate.ToUniversalTime())) return false;\n            if (this.BestPictureWinner != other.BestPictureWinner) return false;\n            if (this.Year != other.Year) return false;\n            return true;\n        }\n    }\n\n    [DataTable(ZumoTestGlobals.MoviesTableName)]\n    public class AllMovies\n    {\n        [JsonProperty(PropertyName = \"id\")]\n        public int Id { get; set; }\n        [JsonProperty(PropertyName = \"status\")]\n        public string Status { get; set; }\n        [JsonProperty(PropertyName = \"movies\")]\n        public Movie[] Movies { get; set; }\n    }\n\n    [DataTable(ZumoTestGlobals.StringIdMoviesTableName)]\n    public class AllStringIdMovies\n    {\n        [JsonProperty(PropertyName = \"id\")]\n        public string Id { get; set; }\n        [JsonProperty(PropertyName = \"status\")]\n        public string Status { get; set; }\n        [JsonProperty(PropertyName = \"movies\")]\n        public StringIdMovie[] Movies { get; set; }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/Types/OfflineReadyItem.cs",
    "content": "﻿﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Globalization;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json;\nusing ZumoE2ETestApp.Framework;\n\nnamespace ZumoE2ETestApp.Tests.Types\n{\n    [DataTable(ZumoOfflineTests.OfflineReadyTableName)]\n    public class OfflineReadyItem\n    {\n        [JsonProperty(\"id\")]\n        public string Id { get; set; }\n\n        [JsonProperty(\"__version\")]\n        public string Version { get; set; }\n\n        [JsonProperty(\"name\")]\n        public string Name { get; set; }\n\n        [JsonProperty(\"age\")]\n        public int Age { get; set; }\n\n        [JsonProperty(\"float\")]\n        public double FloatingNumber { get; set; }\n\n        [JsonProperty(\"date\")]\n        public DateTimeOffset Date { get; set; }\n\n        [JsonProperty(\"bool\")]\n        public bool Flag { get; set; }\n\n        public OfflineReadyItem() { }\n\n        public OfflineReadyItem(Random rndGen)\n        {\n            this.Name = Util.CreateSimpleRandomString(rndGen, 10);\n            this.Age = rndGen.Next();\n            this.FloatingNumber = rndGen.Next() * rndGen.NextDouble();\n            this.Date = new DateTime(rndGen.Next(1980, 2000), rndGen.Next(1, 12), rndGen.Next(1, 25), rndGen.Next(0, 24), rndGen.Next(0, 60), rndGen.Next(0, 60), DateTimeKind.Utc);\n            this.Flag = rndGen.Next(2) == 0;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(CultureInfo.InvariantCulture, \"OfflineItem[Id={0},Name={1},Age={2},FloatingNumber={3},Date={4},Flag={5},Version={6}\",\n                this.Id, this.Name, this.Age, this.FloatingNumber,\n                this.Date.ToString(\"o\", CultureInfo.InvariantCulture), this.Flag, this.Version);\n        }\n\n        public override bool Equals(object obj)\n        {\n            const double acceptableDifference = 1e-6;\n            OfflineReadyItem other = obj as OfflineReadyItem;\n            if (other == null) return false;\n            if (this.Age != other.Age) return false;\n            if (!this.Date.ToUniversalTime().Equals(other.Date.ToUniversalTime())) return false;\n            if (this.Flag != other.Flag) return false;\n            if (this.Name != other.Name) return false;\n            if (Math.Abs(this.FloatingNumber - other.FloatingNumber) > acceptableDifference) return false;\n            return true;\n        }\n\n        public override int GetHashCode()\n        {\n            return this.Age.GetHashCode() ^\n                this.Date.ToUniversalTime().GetHashCode() ^\n                this.Flag.GetHashCode() ^\n                this.Name.GetHashCode();\n        }\n    }\n}"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/Types/OfflineReadyItemNoVersion.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json;\nusing ZumoE2ETestApp.Framework;\n\nnamespace ZumoE2ETestApp.Tests.Types\n{\n    [DataTable(ZumoOfflineTests.OfflineReadyNoVersionAuthenticatedTableName)]\n    public class OfflineReadyItemNoVersion\n    {\n        [JsonProperty(\"id\")]\n        public string Id { get; set; }\n\n        [JsonProperty(\"name\")]\n        public string Name { get; set; }\n\n        [JsonProperty(\"age\")]\n        public int Age { get; set; }\n\n        [JsonProperty(\"float\")]\n        public double FloatingNumber { get; set; }\n\n        [JsonProperty(\"date\")]\n        public DateTime Date { get; set; }\n\n        [JsonProperty(\"bool\")]\n        public bool Flag { get; set; }\n\n        public OfflineReadyItemNoVersion() { }\n\n        public OfflineReadyItemNoVersion(Random rndGen)\n        {\n            this.Name = Util.CreateSimpleRandomString(rndGen, 10);\n            this.Age = rndGen.Next();\n            this.FloatingNumber = rndGen.Next() * rndGen.NextDouble();\n            this.Date = new DateTime(rndGen.Next(1980, 2000), rndGen.Next(1, 12), rndGen.Next(1, 25), rndGen.Next(0, 24), rndGen.Next(0, 60), rndGen.Next(0, 60), DateTimeKind.Utc);\n            this.Flag = rndGen.Next(2) == 0;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(CultureInfo.InvariantCulture, \"OfflineItem[Id={0},Name={1},Age={2},FloatingNumber={3},Date={4},Flag={5}]\",\n                this.Id, this.Name, this.Age, this.FloatingNumber,\n                this.Date.ToString(\"o\", CultureInfo.InvariantCulture), this.Flag);\n        }\n\n        public override bool Equals(object obj)\n        {\n            const double acceptableDifference = 1e-6;\n            OfflineReadyItemNoVersion other = obj as OfflineReadyItemNoVersion;\n            if (other == null) return false;\n            if (this.Age != other.Age) return false;\n            if (!this.Date.ToUniversalTime().Equals(other.Date.ToUniversalTime())) return false;\n            if (this.Flag != other.Flag) return false;\n            if (this.Name != other.Name) return false;\n            if (Math.Abs(this.FloatingNumber - other.FloatingNumber) > acceptableDifference) return false;\n            return true;\n        }\n\n        public override int GetHashCode()\n        {\n            return this.Age.GetHashCode() ^\n                this.Date.ToUniversalTime().GetHashCode() ^\n                this.Flag.GetHashCode() ^\n                this.Name.GetHashCode();\n        }\n    }\n}"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/Types/RoundTripTableItem.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Globalization;\nusing System.Linq;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json;\nusing ZumoE2ETestApp.Framework;\n\nnamespace ZumoE2ETestApp.Tests.Types\n{\n    [DataTable(ZumoTestGlobals.RoundTripTableName)]\n    public class RoundTripTableItem : ICloneableItem<RoundTripTableItem>\n    {\n        [JsonProperty(PropertyName = \"id\")]\n        public int Id { get; set; }\n\n        [JsonProperty(PropertyName = \"string1\")]\n        public string String1 { get; set; }\n\n        [JsonProperty(PropertyName = \"date1\")]\n        public DateTime? Date1 { get; set; }\n\n        [JsonProperty(PropertyName = \"bool1\")]\n        public bool? Bool1 { get; set; }\n\n        // Number types\n        [JsonProperty(PropertyName = \"double1\")]\n        public double Double1 { get; set; }\n        [JsonProperty(PropertyName = \"long1\")]\n        public long Long1 { get; set; }\n        [JsonProperty(PropertyName = \"int1\")]\n        public int? Int1 { get; set; }\n\n        // Enum, with converter\n        [JsonProperty(PropertyName = \"enumType1\")]\n        [JsonConverter(typeof(EnumTypeConverter<EnumType>))]\n        public EnumType EnumType { get; set; }\n\n        [JsonProperty(PropertyName = \"complexType1\")]\n        public ComplexType[] ComplexType1 { get; set; }\n\n        [JsonProperty(PropertyName = \"complexType2\")]\n        public ComplexType2 ComplexType2 { get; set; }\n\n        public RoundTripTableItem() { }\n        public RoundTripTableItem(Random rndGen)\n        {\n            this.String1 = Util.CreateSimpleRandomString(rndGen, 5);\n            this.Date1 = new DateTime(rndGen.Next(1980, 2000), rndGen.Next(1, 12), rndGen.Next(1, 25), rndGen.Next(0, 24), rndGen.Next(0, 60), rndGen.Next(0, 60), DateTimeKind.Utc);\n            this.Bool1 = rndGen.Next(2) == 0;\n            this.Double1 = rndGen.Next(10000) * rndGen.NextDouble();\n            this.EnumType = (Types.EnumType)rndGen.Next(3);\n            this.Int1 = rndGen.Next();\n            this.Long1 = rndGen.Next();\n            this.ComplexType1 = new ComplexType[] { new ComplexType(rndGen) };\n            this.ComplexType2 = new ComplexType2(rndGen);\n        }\n\n        object ICloneableItem<RoundTripTableItem>.Id\n        {\n            get { return this.Id; }\n            set { this.Id = (int)value; }\n        }\n\n        public RoundTripTableItem Clone()\n        {\n            RoundTripTableItem result = new RoundTripTableItem\n            {\n                Id = this.Id,\n                Bool1 = this.Bool1,\n                Date1 = this.Date1,\n                Double1 = this.Double1,\n                EnumType = this.EnumType,\n                Int1 = this.Int1,\n                Long1 = this.Long1,\n                String1 = this.String1,\n            };\n\n            if (this.ComplexType1 != null)\n            {\n                result.ComplexType1 = this.ComplexType1.Select(ct => ct == null ? null : ct.Clone()).ToArray();\n            }\n\n            if (this.ComplexType2 != null)\n            {\n                result.ComplexType2 = this.ComplexType2.Clone();\n            }\n\n            return result;\n        }\n\n        public override bool Equals(object obj)\n        {\n            const double acceptableDifference = 1e-6;\n            RoundTripTableItem other = obj as RoundTripTableItem;\n            if (other == null) return false;\n            if (!this.Bool1.Equals(other.Bool1)) return false;\n            if (!Util.CompareArrays(this.ComplexType1, other.ComplexType1)) return false;\n            if ((this.ComplexType2 == null) != (other.ComplexType2 == null)) return false;\n            if (this.Date1.HasValue != other.Date1.HasValue) return false;\n            if (this.Date1.HasValue && !this.Date1.Value.ToUniversalTime().Equals(other.Date1.Value.ToUniversalTime())) return false;\n            if (Math.Abs(this.Double1 - other.Double1) > acceptableDifference) return false;\n            if (!this.EnumType.Equals(other.EnumType)) return false;\n            if (!this.Int1.Equals(other.Int1)) return false;\n            if (!this.Long1.Equals(other.Long1)) return false;\n            if (this.String1 != other.String1) return false;\n            return true;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(CultureInfo.InvariantCulture,\n                \"RoundTripTableItem[Bool1={0},ComplexType1={1},ComplexType2={2},Date1={3},Double1={4},EnumType={5},Int1={6},Long1={7},String1={8}]\",\n                Bool1.HasValue ? Bool1.Value.ToString() : \"<<NULL>>\",\n                Util.ArrayToString(ComplexType1),\n                ComplexType2 == null ? \"<<NULL>>\" : ComplexType2.ToString(),\n                Date1.HasValue ? Date1.Value.ToUniversalTime().ToString(\"yyyy-MM-ddTHH:mm:ss.fff\") : \"<<NULL>>\",\n                Double1,\n                EnumType,\n                Int1.HasValue ? Int1.Value.ToString(CultureInfo.InvariantCulture) : \"<<NULL>>\",\n                Long1,\n                String1);\n        }\n\n        public override int GetHashCode()\n        {\n            int result = 0;\n            result ^= this.Bool1.GetHashCode();\n            result ^= Util.GetArrayHashCode(this.ComplexType1);\n\n            if (this.ComplexType2 != null)\n            {\n                result ^= this.ComplexType2.GetHashCode();\n            }\n\n            if (this.Date1.HasValue)\n            {\n                result ^= this.Date1.Value.ToUniversalTime().GetHashCode();\n            }\n\n            result ^= this.Double1.GetHashCode();\n            result ^= this.EnumType.GetHashCode();\n            result ^= this.Int1.GetHashCode();\n            result ^= this.Long1.GetHashCode();\n\n            if (this.String1 != null)\n            {\n                result ^= this.String1.GetHashCode();\n            }\n\n            return result;\n        }\n    }\n\n    public class ComplexType2\n    {\n        public string Name { get; set; }\n        public int Age { get; set; }\n        public string[] Friends { get; set; }\n\n        public ComplexType2() { }\n        public ComplexType2(Random rndGen)\n        {\n            this.Name = Util.CreateSimpleRandomString(rndGen, 10);\n            this.Age = rndGen.Next(80);\n            this.Friends = Enumerable.Range(1, 5)\n                .Select(_ => Util.CreateSimpleRandomString(rndGen, 5))\n                .ToArray();\n        }\n\n        public override int GetHashCode()\n        {\n            int result = 0;\n            if (this.Name != null) result ^= this.Name.GetHashCode();\n            result ^= this.Age.GetHashCode();\n            result ^= Util.GetArrayHashCode(this.Friends);\n            return result;\n        }\n\n        public override bool Equals(object obj)\n        {\n            ComplexType2 other = obj as ComplexType2;\n            if (other == null) return false;\n            if (this.Age != other.Age) return false;\n            if (this.Name != other.Name) return false;\n            if (!Util.CompareArrays(this.Friends, other.Friends)) return false;\n            return true;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"ComplexType2[Name={0},Age={1},Friends={2}]\",\n                Name,\n                Age,\n                Util.ArrayToString(Friends));\n        }\n\n        internal ComplexType2 Clone()\n        {\n            return new ComplexType2\n            {\n                Name = this.Name,\n                Age = this.Age,\n                Friends = this.Friends == null ? null : this.Friends.Select(a => a).ToArray()\n            };\n        }\n    }\n\n    public class ComplexType\n    {\n        public ComplexType() { }\n        public ComplexType(Random rndGen)\n        {\n            this.Name = Util.CreateSimpleRandomString(rndGen, 10);\n            this.Age = rndGen.Next(80);\n        }\n\n        public string Name { get; set; }\n        public int Age { get; set; }\n\n        public override int GetHashCode()\n        {\n            int result = this.Age.GetHashCode();\n            if (this.Name != null)\n            {\n                result ^= this.Name.GetHashCode();\n            }\n\n            return result;\n        }\n\n        public override bool Equals(object obj)\n        {\n            ComplexType other = obj as ComplexType;\n            return other != null && this.Age == other.Age && this.Name == other.Name;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"ComplexType[Name={0},Age={1}]\", Name, Age);\n        }\n\n        internal ComplexType Clone()\n        {\n            return new ComplexType { Name = this.Name, Age = this.Age };\n        }\n    }\n\n    public enum EnumType { First, Second, Third }\n\n    public class EnumTypeConverter<TEnum> : JsonConverter\n    {\n        public override bool CanConvert(Type objectType)\n        {\n            return objectType == typeof(TEnum);\n        }\n\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\n        {\n            return Enum.Parse(typeof(TEnum), (reader.Value ?? default(TEnum)).ToString(), true);\n        }\n\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n        {\n            writer.WriteValue(value == null ? (string)null : value.ToString());\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/Types/StringIdRoundTripTableItem.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Globalization;\nusing System.Linq;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json;\nusing ZumoE2ETestApp.Framework;\n\nnamespace ZumoE2ETestApp.Tests.Types\n{\n    [DataTable(ZumoTestGlobals.StringIdRoundTripTableName)]\n    public class StringIdRoundTripTableItem : ICloneableItem<StringIdRoundTripTableItem>\n    {\n        [JsonProperty(PropertyName = \"id\")]\n        public string Id { get; set; }\n\n        [JsonProperty(PropertyName = \"name\")]\n        public string Name { get; set; }\n\n        [JsonProperty(PropertyName = \"date1\")]\n        public DateTime? Date { get; set; }\n\n        [JsonProperty(PropertyName = \"bool\")]\n        public bool? Bool { get; set; }\n\n        [JsonProperty(PropertyName = \"integer\")]\n        public int Integer { get; set; }\n\n        [JsonProperty(PropertyName = \"number\")]\n        public double Number { get; set; }\n\n        [JsonProperty(PropertyName = \"complex\")]\n        public string[] ComplexType { get; set; }\n\n        public StringIdRoundTripTableItem() { }\n        public StringIdRoundTripTableItem(Random rndGen)\n        {\n            this.Name = Util.CreateSimpleRandomString(rndGen, 5);\n            this.Date = new DateTime(rndGen.Next(1980, 2000), rndGen.Next(1, 12), rndGen.Next(1, 25), rndGen.Next(0, 24), rndGen.Next(0, 60), rndGen.Next(0, 60), DateTimeKind.Utc);\n            this.Bool = rndGen.Next(2) == 0;\n            this.Integer = rndGen.Next();\n            this.Number = rndGen.Next(10000) * rndGen.NextDouble();\n            this.ComplexType = Enumerable.Range(0, rndGen.Next(3, 5)).Select(_ => Util.CreateSimpleRandomString(rndGen, 10)).ToArray();\n        }\n\n        object ICloneableItem<StringIdRoundTripTableItem>.Id\n        {\n            get { return this.Id; }\n            set { this.Id = (string)value; }\n        }\n\n        public StringIdRoundTripTableItem Clone()\n        {\n            var result = new StringIdRoundTripTableItem\n            {\n                Id = this.Id,\n                Bool = this.Bool,\n                Date = this.Date,\n                Integer = this.Integer,\n                Number = this.Number,\n                Name = this.Name,\n            };\n\n            if (this.ComplexType != null)\n            {\n                result.ComplexType = this.ComplexType.Select(ct => ct).ToArray();\n            }\n\n            return result;\n        }\n\n        public override bool Equals(object obj)\n        {\n            const double acceptableDifference = 1e-6;\n            var other = obj as StringIdRoundTripTableItem;\n            if (other == null) return false;\n            if (!this.Bool.Equals(other.Bool)) return false;\n            if (!Util.CompareArrays(this.ComplexType, other.ComplexType)) return false;\n            if (this.Date.HasValue != other.Date.HasValue) return false;\n            if (this.Date.HasValue && !this.Date.Value.ToUniversalTime().Equals(other.Date.Value.ToUniversalTime())) return false;\n            if (this.Integer != other.Integer) return false;\n            if (Math.Abs(this.Number - other.Number) > acceptableDifference) return false;\n            if (this.Name != other.Name) return false;\n            return true;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(CultureInfo.InvariantCulture,\n                \"StringIdRoundTripTableItem[Bool={0},ComplexType={1},Date1={2},Integer={3},Number={4},Name={5}]\",\n                Bool.HasValue ? Bool.Value.ToString() : \"<<NULL>>\",\n                Util.ArrayToString(ComplexType),\n                Date.HasValue ? Date.Value.ToUniversalTime().ToString(\"yyyy-MM-ddTHH:mm:ss.fff\") : \"<<NULL>>\",\n                Integer,\n                Number,\n                Name);\n        }\n\n        public override int GetHashCode()\n        {\n            int result = 0;\n            result ^= this.Bool.GetHashCode();\n            result ^= Util.GetArrayHashCode(this.ComplexType);\n\n            if (this.Date.HasValue)\n            {\n                result ^= this.Date.Value.ToUniversalTime().GetHashCode();\n            }\n\n            result ^= this.Integer.GetHashCode();\n            result ^= this.Number.GetHashCode();\n\n            if (this.Name != null)\n            {\n                result ^= this.Name.GetHashCode();\n            }\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/Types/VersionedType.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Globalization;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json;\nusing ZumoE2ETestApp.Framework;\n\nnamespace ZumoE2ETestApp.Tests.Types\n{\n    [DataTable(ZumoTestGlobals.StringIdRoundTripTableName)]\n    public class VersionedType\n    {\n        public string Id { get; set; }\n        [JsonProperty(PropertyName = \"name\")]\n        public string Name { get; set; }\n        [JsonProperty(PropertyName = \"number\")]\n        public double Number { get; set; }\n        [Version]\n        public string Version { get; set; }\n        [CreatedAt]\n        public DateTime CreatedAt { get; set; }\n        [UpdatedAt]\n        public DateTime UpdatedAt { get; set; }\n\n        public VersionedType() { }\n        public VersionedType(Random rndGen)\n        {\n            this.Name = Util.CreateSimpleRandomString(rndGen, 20);\n            this.Number = rndGen.Next(10000);\n        }\n        private VersionedType(VersionedType other)\n        {\n            this.Id = other.Id;\n            this.Name = other.Name;\n            this.Number = other.Number;\n            this.Version = other.Version;\n            this.CreatedAt = other.CreatedAt;\n            this.UpdatedAt = other.UpdatedAt;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Versioned[Id={0},Name={1},Number={2},Version={3},CreatedAt={4},UpdatedAt={5}]\",\n                Id, Name, Number, Version,\n                CreatedAt.ToString(\"yyyy-MM-dd'T'HH:mm:ss.fff'Z'\", CultureInfo.InvariantCulture),\n                UpdatedAt.ToString(\"yyyy-MM-dd'T'HH:mm:ss.fff'Z'\", CultureInfo.InvariantCulture));\n        }\n\n        public override int GetHashCode()\n        {\n            int result = 0;\n            if (Name != null) result ^= Name.GetHashCode();\n            result ^= Number.GetHashCode();\n            return result;\n        }\n\n        public override bool Equals(object obj)\n        {\n            var other = obj as VersionedType;\n            if (other == null) return false;\n            if (this.Name != other.Name) return false;\n            if (this.Number != other.Number) return false;\n            return true;\n        }\n\n        public VersionedType Clone()\n        {\n            return new VersionedType(this);\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/ZumoCUDTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Reflection;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing ZumoE2ETestApp.Framework;\nusing ZumoE2ETestApp.Tests.Types;\n\nnamespace ZumoE2ETestApp.Tests\n{\n    internal static class ZumoCUDTests\n    {\n        private static string idName;\n\n        internal static ZumoTestGroup CreateTests()\n        {\n            ZumoTestGroup result = new ZumoTestGroup(\"Update / delete tests\");\n\n            // Assume the same for both types.\n            idName = Util.GetSerializedId<StringIdRoundTripTableItem>();\n\n            DateTime now = DateTime.UtcNow;\n            int seed = now.Year * 10000 + now.Month * 100 + now.Day;\n            Random rndGen = new Random(seed);\n\n            result.AddTest(CreateTypedUpdateTest(\"Update typed item\", new RoundTripTableItem(rndGen), new RoundTripTableItem(rndGen)));\n            result.AddTest(CreateTypedUpdateTest(\n                \"Update typed item, setting values to null\",\n                new RoundTripTableItem(rndGen),\n                new RoundTripTableItem(rndGen) { Bool1 = null, ComplexType2 = null, Int1 = null, String1 = null, ComplexType1 = null }));\n            result.AddTest(CreateTypedUpdateTest<RoundTripTableItem, MobileServiceInvalidOperationException>(\"(Neg) Update typed item, non-existing item id\",\n                new RoundTripTableItem(rndGen), new RoundTripTableItem(rndGen) { Id = 1000000000 }, false));\n            result.AddTest(CreateTypedUpdateTest<RoundTripTableItem, ArgumentException>(\"(Neg) Update typed item, id = 0\",\n                new RoundTripTableItem(rndGen), new RoundTripTableItem(rndGen) { Id = 0 }, false));\n\n            result.AddTest(CreateTypedUpdateTest(\"[string id] Update typed item\",\n                new StringIdRoundTripTableItem(rndGen), new StringIdRoundTripTableItem(rndGen)));\n            result.AddTest(CreateTypedUpdateTest(\n                \"[string id] Update typed item, setting values to null\",\n                new StringIdRoundTripTableItem(rndGen),\n                new StringIdRoundTripTableItem(rndGen) { Name = null, Bool = null, ComplexType = null, Date = null }));\n            result.AddTest(CreateTypedUpdateTest(\n                \"Update typed item, setting values to 0\",\n                new StringIdRoundTripTableItem(rndGen),\n                new StringIdRoundTripTableItem(rndGen) { Integer = 0, Number = 0.0 }));\n\n            result.AddTest(CreateTypedUpdateTest<StringIdRoundTripTableItem, MobileServiceInvalidOperationException>(\"(Neg) Update typed item, non-existing item id\",\n                new StringIdRoundTripTableItem(rndGen), new StringIdRoundTripTableItem(rndGen) { Id = \"does not exist\" }, false));\n            result.AddTest(CreateTypedUpdateTest<StringIdRoundTripTableItem, ArgumentException>(\"(Neg) Update typed item, id = null\",\n                new StringIdRoundTripTableItem(rndGen), new StringIdRoundTripTableItem(rndGen) { Id = null }, false));\n\n            string toInsertJsonString = @\"{\n                \"\"string1\"\":\"\"hello\"\",\n                \"\"bool1\"\":true,\n                \"\"int1\"\":-1234,\n                \"\"double1\"\":123.45,\n                \"\"long1\"\":1234,\n                \"\"date1\"\":\"\"2012-12-13T09:23:12.000Z\"\",\n                \"\"complexType1\"\":[{\"\"Name\"\":\"\"John Doe\"\",\"\"Age\"\":33}, null],\n                \"\"complexType2\"\":{\"\"Name\"\":\"\"John Doe\"\",\"\"Age\"\":33,\"\"Friends\"\":[\"\"Jane\"\"]}\n            }\";\n\n            string toUpdateJsonString = @\"{\n                \"\"string1\"\":\"\"world\"\",\n                \"\"bool1\"\":false,\n                \"\"int1\"\":9999,\n                \"\"double1\"\":888.88,\n                \"\"long1\"\":77777777,\n                \"\"date1\"\":\"\"1999-05-23T19:15:54.000Z\"\",\n                \"\"complexType1\"\":[{\"\"Name\"\":\"\"Jane Roe\"\",\"\"Age\"\":23}, null],\n                \"\"complexType2\"\":{\"\"Name\"\":\"\"Jane Roe\"\",\"\"Age\"\":23,\"\"Friends\"\":[\"\"John\"\"]}\n            }\";\n\n            result.AddTest(CreateUntypedUpdateTest(\"Update untyped item\", toInsertJsonString, toUpdateJsonString));\n\n            JToken nullValue = JValue.Parse(\"null\");\n            JObject toUpdate = JObject.Parse(toUpdateJsonString);\n            toUpdate[\"string1\"] = nullValue;\n            toUpdate[\"bool1\"] = nullValue;\n            toUpdate[\"complexType2\"] = nullValue;\n            toUpdate[\"complexType1\"] = nullValue;\n            toUpdate[\"int1\"] = nullValue;\n            result.AddTest(CreateUntypedUpdateTest(\"Update untyped item, setting values to null\", toInsertJsonString, toUpdate.ToString()));\n\n            toUpdate[idName] = 1000000000;\n            result.AddTest(CreateUntypedUpdateTest<MobileServiceInvalidOperationException>(\"(Neg) Update untyped item, non-existing item id\",\n                toInsertJsonString, toUpdate.ToString(), false));\n\n            toUpdate[idName] = 0;\n            result.AddTest(CreateUntypedUpdateTest<ArgumentException>(\"(Neg) Update typed item, id = 0\",\n                toInsertJsonString, toUpdateJsonString, false));\n\n            toInsertJsonString = JsonConvert.SerializeObject(new StringIdRoundTripTableItem(rndGen) { Id = null });\n            toUpdateJsonString = JsonConvert.SerializeObject(new StringIdRoundTripTableItem(rndGen) { Id = null });\n            result.AddTest(CreateUntypedUpdateTest(\"[string id] Update untyped item\", toInsertJsonString, toUpdateJsonString, true));\n            toUpdate = JObject.Parse(toUpdateJsonString);\n            toUpdate[\"name\"] = nullValue;\n            toUpdate[\"number\"] = nullValue;\n            toUpdate[\"date1\"] = nullValue;\n            toUpdate[\"bool\"] = nullValue;\n            toUpdate[\"complex\"] = nullValue;\n            result.AddTest(CreateUntypedUpdateTest(\"[string id] Update untyped item, setting values to null\", toInsertJsonString, toUpdate.ToString(), true));\n\n            toUpdate[idName] = Guid.NewGuid().ToString();\n            result.AddTest(CreateUntypedUpdateTest<MobileServiceInvalidOperationException>(\"(Neg) [string id] Update untyped item, non-existing item id\",\n                toInsertJsonString, toUpdate.ToString(), false, true));\n\n            toUpdate[idName] = nullValue;\n            result.AddTest(CreateUntypedUpdateTest<InvalidOperationException>(\"(Neg) [string id] Update typed item, id = null\",\n                toInsertJsonString, toUpdateJsonString, false, true));\n\n            // Delete tests\n            result.AddTest(CreateDeleteTest<RoundTripTableItem>(\"Delete typed item\", true, DeleteTestType.ValidDelete));\n            result.AddTest(CreateDeleteTest<RoundTripTableItem>(\"(Neg) Delete typed item with non-existing id\", true, DeleteTestType.NonExistingId));\n            result.AddTest(CreateDeleteTest<RoundTripTableItem>(\"Delete untyped item\", false, DeleteTestType.ValidDelete));\n            result.AddTest(CreateDeleteTest<RoundTripTableItem>(\"(Neg) Delete untyped item with non-existing id\", false, DeleteTestType.NonExistingId));\n            result.AddTest(CreateDeleteTest<RoundTripTableItem>(\"(Neg) Delete untyped item without id field\", false, DeleteTestType.NoIdField));\n\n            result.AddTest(CreateDeleteTest<StringIdRoundTripTableItem>(\"[string id] Delete typed item\", true, DeleteTestType.ValidDelete));\n            result.AddTest(CreateDeleteTest<StringIdRoundTripTableItem>(\"(Neg) [string id] Delete typed item with non-existing id\", true, DeleteTestType.NonExistingId));\n            result.AddTest(CreateDeleteTest<StringIdRoundTripTableItem>(\"[string id] Delete untyped item\", false, DeleteTestType.ValidDelete));\n            result.AddTest(CreateDeleteTest<StringIdRoundTripTableItem>(\"(Neg) [string id] Delete untyped item with non-existing id\", false, DeleteTestType.NonExistingId));\n            result.AddTest(CreateDeleteTest<StringIdRoundTripTableItem>(\"(Neg) [string id] Delete untyped item without id field\", false, DeleteTestType.NoIdField));\n\n            result.AddTest(new ZumoTest(\"Refresh - updating item with server modifications\", async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable<RoundTripTableItem>();\n                int randomSeed = Environment.TickCount;\n                test.AddLog(\"Using random seed {0}\", randomSeed);\n                Random random = new Random(randomSeed);\n                var item = new RoundTripTableItem(random);\n                test.AddLog(\"Item to be inserted: {0}\", item);\n                await table.InsertAsync(item);\n                test.AddLog(\"Added item with id = {0}\", item.Id);\n\n                var item2 = new RoundTripTableItem(random);\n                item2.Id = item.Id;\n                test.AddLog(\"Item to update: {0}\", item2);\n                await table.UpdateAsync(item2);\n                test.AddLog(\"Updated item\");\n\n                test.AddLog(\"Now refreshing first object\");\n                await table.RefreshAsync(item);\n                test.AddLog(\"Refreshed item: {0}\", item);\n\n                if (item.Equals(item2))\n                {\n                    test.AddLog(\"Item was refreshed successfully\");\n                    return true;\n                }\n                else\n                {\n                    test.AddLog(\"Error, refresh didn't happen successfully\");\n                    return false;\n                }\n            }, ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES));\n\n            result.AddTest(new ZumoTest(\"Refresh item without id does not send request\", async delegate(ZumoTest test)\n            {\n                var client = new MobileServiceClient(\n                    ZumoTestGlobals.Instance.Client.ApplicationUri,\n                    ZumoTestGlobals.Instance.Client.ApplicationKey,\n                    new HandlerWhichThrows());\n                var table = client.GetTable<RoundTripTableItem>();\n                var item = new RoundTripTableItem(new Random());\n                item.Id = 0;\n                await table.RefreshAsync(item);\n                test.AddLog(\"Call to RefreshAsync didn't go to the network, as expected.\");\n                return true;\n            }));\n\n            return result;\n        }\n\n        class HandlerWhichThrows : DelegatingHandler\n        {\n            protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        enum DeleteTestType { ValidDelete, NonExistingId, NoIdField }\n\n        private static ZumoTest CreateDeleteTest<TItemType>(string testName, bool useTypedTable, DeleteTestType testType) where TItemType : ICloneableItem<TItemType>\n        {\n            if (useTypedTable && testType == DeleteTestType.NoIdField)\n            {\n                throw new ArgumentException(\"Cannot send a delete request without an id field on a typed table.\");\n            }\n\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var typedTable = client.GetTable<TItemType>();\n                var useStringIdTable = typeof(TItemType) == typeof(StringIdRoundTripTableItem);\n                var untypedTable = client.GetTable(\n                    useStringIdTable ? \n                    ZumoTestGlobals.StringIdRoundTripTableName : \n                    ZumoTestGlobals.RoundTripTableName);\n                TItemType itemToInsert;\n                if (useStringIdTable)\n                {\n                    itemToInsert = (TItemType)(object)new StringIdRoundTripTableItem { Name = \"will be deleted\", Number = 123 };\n                }\n                else\n                {\n                    itemToInsert = (TItemType)(object)new RoundTripTableItem { String1 = \"will be deleted\", Int1 = 123 };\n                }\n\n                await typedTable.InsertAsync(itemToInsert);\n                test.AddLog(\"Inserted item to be deleted\");\n                object id = itemToInsert.Id;\n                switch (testType)\n                {\n                    case DeleteTestType.ValidDelete:\n                        if (useTypedTable)\n                        {\n                            await typedTable.DeleteAsync(itemToInsert);\n                        }\n                        else\n                        {\n                            await untypedTable.DeleteAsync(new JObject(new JProperty(\"id\", id)));\n                        }\n\n                        test.AddLog(\"Delete succeeded; verifying that object isn't in the service anymore.\");\n                        try\n                        {\n                            var response = await untypedTable.LookupAsync(id);\n                            test.AddLog(\"Error, delete succeeded, but item was returned by the service: {0}\", response);\n                            return false;\n                        }\n                        catch (MobileServiceInvalidOperationException msioe)\n                        {\n                            return Validate404Response(test, msioe);\n                        }\n\n                    case DeleteTestType.NonExistingId:\n                        try\n                        {\n                            object nonExistingId = useStringIdTable ? (object)Guid.NewGuid().ToString() : (object)1000000000;\n                            if (useTypedTable)\n                            {\n                                itemToInsert.Id = nonExistingId;\n                                await typedTable.DeleteAsync(itemToInsert);\n                            }\n                            else\n                            {\n                                JObject jo = new JObject(new JProperty(\"id\", nonExistingId));\n                                await untypedTable.DeleteAsync(jo);\n                            }\n\n                            test.AddLog(\"Error, deleting item with non-existing id should fail, but succeeded\");\n                            return false;\n                        }\n                        catch (MobileServiceInvalidOperationException msioe)\n                        {\n                            return Validate404Response(test, msioe);\n                        }\n\n                    default:\n                        try\n                        {\n                            JObject jo = new JObject(new JProperty(\"Name\", \"hello\"));\n                            await untypedTable.DeleteAsync(jo);\n\n                            test.AddLog(\"Error, deleting item without an id should fail, but succeeded\");\n                            return false;\n                        }\n                        catch (ArgumentException ex)\n                        {\n                            test.AddLog(\"Caught expected exception - {0}: {1}\", ex.GetType().FullName, ex.Message);\n                            return true;\n                        }\n                }\n            }, (typeof(TItemType) == typeof(RoundTripTableItem) ? ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES : ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES));\n        }\n\n        private static bool Validate404Response(ZumoTest test, MobileServiceInvalidOperationException msioe)\n        {\n            test.AddLog(\"Received expected exception - {0}: {1}\", msioe.GetType().FullName, msioe.Message);\n            var response = msioe.Response;\n            if (response.StatusCode == HttpStatusCode.NotFound)\n            {\n                test.AddLog(\"And error code is the expected one.\");\n                return true;\n            }\n            else\n            {\n                test.AddLog(\"Received error code is not the expected one: {0} - {1}\", response.StatusCode, response.ReasonPhrase);\n                return false;\n            }\n        }\n\n        private static ZumoTest CreateTypedUpdateTest<TRoundTripType>(\n            string testName, TRoundTripType itemToInsert, TRoundTripType itemToUpdate) where TRoundTripType : ICloneableItem<TRoundTripType>\n        {\n            return CreateTypedUpdateTest<TRoundTripType, ExceptionTypeWhichWillNeverBeThrown>(testName, itemToInsert, itemToUpdate);\n        }\n\n        private static ZumoTest CreateTypedUpdateTest<TRoundTripType, TExpectedException>(\n            string testName, TRoundTripType itemToInsert, TRoundTripType itemToUpdate, bool setUpdatedId = true)\n            where TExpectedException : Exception\n            where TRoundTripType : ICloneableItem<TRoundTripType>\n        {\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable<TRoundTripType>();\n                var toInsert = itemToInsert.Clone();\n                var toUpdate = itemToUpdate.Clone();\n                try\n                {\n                    await table.InsertAsync(toInsert);\n                    test.AddLog(\"Inserted item with id {0}\", toInsert.Id);\n\n                    if (setUpdatedId)\n                    {\n                        toUpdate.Id = toInsert.Id;\n                    }\n\n                    var expectedItem = toUpdate.Clone();\n\n                    await table.UpdateAsync(toUpdate);\n                    test.AddLog(\"Updated item; now retrieving it to compare with the expected value\");\n\n                    var retrievedItem = await table.LookupAsync(toInsert.Id);\n                    test.AddLog(\"Retrieved item\");\n\n                    if (!expectedItem.Equals(retrievedItem))\n                    {\n                        test.AddLog(\"Error, retrieved item is different than the expected value. Expected: {0}; actual: {1}\", expectedItem, retrievedItem);\n                        return false;\n                    }\n\n                    // cleanup\n                    await table.DeleteAsync(retrievedItem);\n\n                    if (typeof(TExpectedException) == typeof(ExceptionTypeWhichWillNeverBeThrown))\n                    {\n                        return true;\n                    }\n                    else\n                    {\n                        test.AddLog(\"Error, test should have failed with {0}, but succeeded.\", typeof(TExpectedException).FullName);\n                        return false;\n                    }\n                }\n                catch (TExpectedException ex)\n                {\n                    test.AddLog(\"Caught expected exception - {0}: {1}\", ex.GetType().FullName, ex.Message);\n                    return true;\n                }\n            }, (typeof(TRoundTripType) == typeof(RoundTripTableItem) ? ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES : ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES));\n        }\n\n        private static ZumoTest CreateUntypedUpdateTest(\n            string testName, string itemToInsert, string itemToUpdate, bool useStringIdTable = false)\n        {\n            return CreateUntypedUpdateTest<ExceptionTypeWhichWillNeverBeThrown>(testName, itemToInsert, itemToUpdate, true, useStringIdTable);\n        }\n\n        private static ZumoTest CreateUntypedUpdateTest<TExpectedException>(\n            string testName, string itemToInsertJson, string itemToUpdateJson, bool setUpdatedId = true, bool useStringIdTable = false)\n            where TExpectedException : Exception\n        {\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var itemToInsert = JObject.Parse(itemToInsertJson);\n                var itemToUpdate = JObject.Parse(itemToUpdateJson);\n                Util.CamelCaseProps(itemToUpdate);\n\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable(useStringIdTable ? ZumoTestGlobals.StringIdRoundTripTableName : ZumoTestGlobals.RoundTripTableName);\n                try\n                {\n                    var inserted = await table.InsertAsync(itemToInsert);\n                    object id = useStringIdTable ?\n                        (object)(string)inserted[\"id\"] : \n                        (object)(int)inserted[\"id\"];\n                    test.AddLog(\"Inserted item with id {0}\", id);\n\n                    if (setUpdatedId)\n                    {\n                        itemToUpdate[\"id\"] = new JValue(id);\n                    }\n\n                    var expectedItem = JObject.Parse(itemToUpdate.ToString());\n\n                    var updated = await table.UpdateAsync(itemToUpdate);\n                    test.AddLog(\"Updated item; now retrieving it to compare with the expected value\");\n\n                    var retrievedItem = await table.LookupAsync(id);\n                    test.AddLog(\"Retrieved item\");\n\n                    List<string> errors = new List<string>();\n                    if (!Util.CompareJson(expectedItem, retrievedItem, errors))\n                    {\n                        foreach (var error in errors)\n                        {\n                            test.AddLog(error);\n                        }\n\n                        test.AddLog(\"Error, retrieved item is different than the expected value. Expected: {0}; actual: {1}\", expectedItem, retrievedItem);\n                        return false;\n                    }\n\n                    // cleanup\n                    await table.DeleteAsync(new JObject(new JProperty(\"id\", id)));\n\n                    if (typeof(TExpectedException) == typeof(ExceptionTypeWhichWillNeverBeThrown))\n                    {\n                        return true;\n                    }\n                    else\n                    {\n                        test.AddLog(\"Error, test should have failed with {0}, but succeeded.\", typeof(TExpectedException).FullName);\n                        return false;\n                    }\n                }\n                catch (TExpectedException ex)\n                {\n                    test.AddLog(\"Caught expected exception - {0}: {1}\", ex.GetType().FullName, ex.Message);\n                    return true;\n                }\n            }, useStringIdTable ? ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES : ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES);\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/ZumoCustomApiTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Xml;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json.Linq;\nusing ZumoE2ETestApp.Framework;\nusing ZumoE2ETestApp.Tests.Types;\n\nnamespace ZumoE2ETestApp.Tests\n{\n    public static class ZumoCustomApiTests\n    {\n        private const string PublicApiName = \"public\";\n        private const string AppApiName = \"application\";\n        private const string UserApiName = \"user\";\n        private const string AdminApiName = \"admin\";\n        private const string MovieFinderApiName = \"movieFinder\";\n\n        private const string Letters = \"abcdefghijklmnopqrstuvwxyz\";\n\n        public enum ApiPermissions { Public, Application, User, Admin }\n        public enum DataFormat { Json, Xml, Other }\n        public enum TypedTestType { GetByTitle, GetByDate, PostByDuration, PostByYear }\n\n        private static readonly Dictionary<ApiPermissions, string> apiNames = new Dictionary<ApiPermissions, string>\n        {\n            { ApiPermissions.Admin, AdminApiName },\n            { ApiPermissions.Application, AppApiName },\n            { ApiPermissions.Public, PublicApiName },\n            { ApiPermissions.User, UserApiName },\n        };\n\n        internal static ZumoTestGroup CreateTests()\n        {\n            ZumoTestGroup result = new ZumoTestGroup(\"Custom API tests\");\n\n            DateTime now = DateTime.UtcNow;\n            int seed = now.Year * 10000 + now.Month * 100 + now.Day;\n            Random rndGen = new Random(seed);\n\n#if !NET45\n            result.AddTest(ZumoLoginTests.CreateLogoutTest());\n#endif\n\n            result.AddTest(CreateHttpContentApiTest(DataFormat.Xml, DataFormat.Json, rndGen));\n\n#if !NET45\n            List<ZumoTest> testsWhichNeedAuth = new List<ZumoTest>();\n\n            foreach (ApiPermissions apiPermission in Util.EnumGetValues(typeof(ApiPermissions)))\n            {\n                testsWhichNeedAuth.Add(CreateJTokenApiTest(apiPermission, false, rndGen));\n            }\n\n            testsWhichNeedAuth.Add(ZumoLoginTests.CreateLoginTest(MobileServiceAuthenticationProvider.Google));\n            testsWhichNeedAuth.Add(CreateJTokenApiTest(ApiPermissions.User, true, rndGen));\n            testsWhichNeedAuth.Add(ZumoLoginTests.CreateLogoutTest());\n\n            foreach (var test in testsWhichNeedAuth)\n            {\n                test.CanRunUnattended = false;\n                result.AddTest(test);\n            }\n#endif\n\n            foreach (DataFormat inputFormat in Util.EnumGetValues(typeof(DataFormat)))\n            {\n                foreach (DataFormat outputFormat in Util.EnumGetValues(typeof(DataFormat)))\n                {\n                    result.AddTest(CreateHttpContentApiTest(inputFormat, outputFormat, rndGen));\n                }\n            }\n\n\n            result.AddTest(ZumoQueryTests.CreatePopulateStringIdTableTest());\n            foreach (TypedTestType testType in Util.EnumGetValues(typeof(TypedTestType)))\n            {\n                result.AddTest(CreateTypedApiTest(rndGen, testType));\n            }\n\n            return result;\n        }\n\n        private static ZumoTest CreateTypedApiTest(Random seedGenerator, TypedTestType testType)\n        {\n            string testName = \"Typed overload - \" + testType;\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var apiName = MovieFinderApiName;\n                var testResult = true;\n                for (int i = 0; i < 10; i++)\n                {\n                    int seed = seedGenerator.Next();\n                    test.AddLog(\"Test with seed = {0}\", seed);\n                    Random rndGen = new Random(seed);\n\n                    StringIdMovie[] expectedResult = null;\n                    AllStringIdMovies actualResult = null;\n                    StringIdMovie inputTemplate = ZumoQueryTestData.AllStringIdMovies()[rndGen.Next(ZumoQueryTestData.AllStringIdMovies().Length)];\n                    test.AddLog(\"Using movie '{0}' as template\", inputTemplate.Title);\n                    string apiUrl;\n                    switch (testType)\n                    {\n                        case TypedTestType.GetByTitle:\n                            apiUrl = apiName + \"/title/\" + inputTemplate.Title;\n                            expectedResult = new StringIdMovie[] { inputTemplate };\n                            actualResult = await client.InvokeApiAsync<AllStringIdMovies>(apiUrl, HttpMethod.Get, null);\n                            break;\n                        case TypedTestType.GetByDate:\n                            var releaseDate = inputTemplate.ReleaseDate;\n                            apiUrl = apiName + \"/date/\" + releaseDate.Year + \"/\" + releaseDate.Month + \"/\" + releaseDate.Day;\n                            expectedResult = ZumoQueryTestData.AllStringIdMovies().Where(m => m.ReleaseDate == releaseDate).ToArray();\n                            actualResult = await client.InvokeApiAsync<AllStringIdMovies>(apiUrl, HttpMethod.Get, null);\n                            break;\n                        case TypedTestType.PostByDuration:\n                        case TypedTestType.PostByYear:\n                            string orderBy = null;\n                            switch (rndGen.Next(3))\n                            {\n                                case 0:\n                                    orderBy = null;\n                                    break;\n                                case 1:\n                                    orderBy = \"id\";\n                                    break;\n                                case 2:\n                                    orderBy = \"Title\";\n                                    break;\n                            }\n\n                            Dictionary<string, string> queryParams = orderBy == null ?\n                                null :\n                                new Dictionary<string, string> { { \"orderBy\", orderBy } };\n\n                            Func<StringIdMovie, bool> predicate;\n                            if (testType == TypedTestType.PostByYear)\n                            {\n                                predicate = m => m.Year == inputTemplate.Year;\n                                apiUrl = apiName + \"/moviesOnSameYear\";\n                            }\n                            else\n                            {\n                                predicate = m => m.Duration == inputTemplate.Duration;\n                                apiUrl = apiName + \"/moviesWithSameDuration\";\n                            }\n\n                            if (queryParams == null)\n                            {\n                                actualResult = await client.InvokeApiAsync<StringIdMovie, AllStringIdMovies>(apiUrl, inputTemplate);\n                            }\n                            else\n                            {\n                                actualResult = await client.InvokeApiAsync<StringIdMovie, AllStringIdMovies>(apiUrl, inputTemplate, HttpMethod.Post, queryParams);\n                            }\n\n                            expectedResult = ZumoQueryTestData.AllStringIdMovies().Where(predicate).ToArray();\n                            if (orderBy == null || orderBy == \"Title\")\n                            {\n                                Array.Sort(expectedResult, (m1, m2) => m1.Title.CompareTo(m2.Title));\n                            }\n\n                            break;\n                        default:\n                            throw new ArgumentException(\"Invalid test type: \" + testType);\n                    }\n\n                    test.AddLog(\"  - Sent request to {0}\", apiUrl);\n                    List<string> errors = new List<string>();\n                    if (Util.CompareArrays(expectedResult, actualResult.Movies, errors))\n                    {\n                        test.AddLog(\"  - Result is expected\");\n                    }\n                    else\n                    {\n                        foreach (var error in errors)\n                        {\n                            test.AddLog(\"  - {0}\", error);\n                        }\n\n                        test.AddLog(\"Expected: {0}\", string.Join(\", \", expectedResult.Select(m => m.Title)));\n                        test.AddLog(\"Actual: {0}\", string.Join(\", \", actualResult.Movies.Select(m => m.Title)));\n                        testResult = false;\n                        break;\n                    }\n                }\n\n                return testResult;\n            }, ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES);\n        }\n\n        private static ZumoTest CreateHttpContentApiTest(DataFormat inputFormat, DataFormat outputFormat, Random seedGenerator)\n        {\n            string testName = string.Format(\"HttpContent overload - input {0} / output {1}\", inputFormat, outputFormat);\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var apiName = AppApiName;\n                var testResult = true;\n                for (int i = 0; i < 10; i++)\n                {\n                    int seed = seedGenerator.Next();\n                    test.AddLog(\"Test with seed = {0}\", seed);\n                    Random rndGen = new Random(seed);\n                    HttpMethod method;\n                    HttpContent content;\n                    JObject expectedResult;\n                    Dictionary<string, string> headers;\n                    Dictionary<string, string> query;\n                    HttpStatusCode expectedStatus;\n                    CreateHttpContentTestInput(inputFormat, outputFormat, rndGen, out method, out content, out expectedResult, out headers, out query, out expectedStatus);\n\n                    HttpResponseMessage response;\n                    try\n                    {\n                        response = await client.InvokeApiAsync(apiName, content, method, headers, query);\n                    }\n                    catch (MobileServiceInvalidOperationException ex)\n                    {\n                        response = ex.Response;\n                    }\n\n                    using (response)\n                    {\n                        test.AddLog(\"Response: {0}\", response);\n                        if (!ValidateResponseHeader(test, expectedStatus, headers, response))\n                        {\n                            testResult = false;\n                            break;\n                        }\n\n                        test.AddLog(\"  - All request / response headers validated successfully\");\n\n                        string responseContent = null;\n                        if (response.Content != null)\n                        {\n                            responseContent = await response.Content.ReadAsStringAsync();\n                            test.AddLog(\"Response content: {0}\", responseContent);\n                        }\n\n                        JToken jsonResponse = null;\n                        if (outputFormat == DataFormat.Json)\n                        {\n                            jsonResponse = JToken.Parse(responseContent);\n                        }\n                        else if (outputFormat == DataFormat.Other)\n                        {\n                            string decodedContent = responseContent\n                                .Replace(\"__{__\", \"{\")\n                                .Replace(\"__}__\", \"}\")\n                                .Replace(\"__[__\", \"[\")\n                                .Replace(\"__]__\", \"]\");\n                            jsonResponse = JToken.Parse(decodedContent);\n                        }\n\n                        bool contentIsExpected = false;\n                        List<string> errors = new List<string>();\n                        switch (outputFormat)\n                        {\n                            case DataFormat.Json:\n                            case DataFormat.Other:\n                                contentIsExpected = Util.CompareJson(expectedResult, jsonResponse, errors);\n                                break;\n                            case DataFormat.Xml:\n                                string expectedResultContent = JsonToXml(expectedResult);\n\n                                // Normalize CRLF\n                                expectedResultContent = expectedResultContent.Replace(\"\\r\\n\", \"\\n\");\n                                responseContent = responseContent.Replace(\"\\r\\n\", \"\\n\");\n\n                                contentIsExpected = expectedResultContent == responseContent;\n                                if (!contentIsExpected)\n                                {\n                                    errors.Add(string.Format(\n                                        \"Error, response content is incorrect. Expected: {0}. Actual: {1}\",\n                                        expectedResultContent, responseContent));\n                                }\n\n                                break;\n                        }\n\n                        if (!contentIsExpected)\n                        {\n                            foreach (var error in errors)\n                            {\n                                test.AddLog(\"{0}\", error);\n                            }\n\n                            testResult = false;\n                            break;\n                        }\n\n                        test.AddLog(\"  - Validation completed successfully\");\n                    }\n                }\n\n                return testResult;\n            });\n        }\n\n        private static bool ValidateResponseHeader(ZumoTest test, HttpStatusCode expectedStatus, Dictionary<string, string> expectedHeaders, HttpResponseMessage response)\n        {\n            bool result = true;\n            if (expectedStatus != response.StatusCode)\n            {\n                test.AddLog(\"Error in response status: expected {0}, received {1}\", expectedStatus, response.StatusCode);\n                result = false;\n            }\n            else\n            {\n                foreach (var reqHeader in expectedHeaders.Keys)\n                {\n                    IEnumerable<string> headerValue;\n                    if (!response.Headers.TryGetValues(reqHeader, out headerValue))\n                    {\n                        test.AddLog(\"Error, expected header {0} not found\", reqHeader);\n                        result = false;\n                        break;\n                    }\n                    else\n                    {\n                        if (!expectedHeaders[reqHeader].Equals(headerValue.FirstOrDefault()))\n                        {\n                            test.AddLog(\"Error, header value for {0} is incorrect. Expected {1}, actual {2}\",\n                                reqHeader, expectedHeaders[reqHeader], headerValue.FirstOrDefault() ?? \"<<NULL>>\");\n                            result = false;\n                            break;\n                        }\n                    }\n                }\n            }\n\n            return result;\n        }\n\n        private static void CreateHttpContentTestInput(DataFormat inputFormat, DataFormat outputFormat, Random rndGen, out HttpMethod method, out HttpContent content, out JObject expectedResult, out Dictionary<string, string> headers, out Dictionary<string, string> query, out HttpStatusCode expectedStatus)\n        {\n            method = CreateHttpMethod(rndGen);\n            content = null;\n            expectedResult = new JObject();\n            expectedResult.Add(\"method\", method.Method);\n            expectedResult.Add(\"user\", new JObject(new JProperty(\"level\", \"anonymous\")));\n            JToken body = null;\n            string textBody = null;\n            if (method.Method != \"GET\" && method.Method != \"DELETE\")\n            {\n                body = CreateJson(rndGen);\n                if (outputFormat == DataFormat.Xml || inputFormat == DataFormat.Xml)\n                {\n                    // to prevent non-XML names from interfering with checks\n                    body = SanitizeJsonXml(body);\n                }\n\n                switch (inputFormat)\n                {\n                    case DataFormat.Json:\n                        // JSON\n                        content = new StringContent(body.ToString(), Encoding.UTF8, \"application/json\");\n                        break;\n                    case DataFormat.Xml:\n                        textBody = JsonToXml(body);\n                        content = new StringContent(textBody, Encoding.UTF8, \"text/xml\");\n                        break;\n                    default:\n                        textBody = body.ToString().Replace(\"{\", \"<\").Replace(\"}\", \">\").Replace(\"[\", \"__[__\").Replace(\"]\", \"__]__\");\n                        content = new StringContent(textBody, Encoding.UTF8, \"text/plain\");\n                        break;\n                }\n            }\n\n            if (body != null)\n            {\n                if (inputFormat == DataFormat.Json)\n                {\n                    expectedResult.Add(\"body\", body);\n                }\n                else\n                {\n                    expectedResult.Add(\"body\", textBody);\n                }\n            }\n\n            headers = new Dictionary<string, string>();\n            var choice = rndGen.Next(5);\n            for (int j = 0; j < choice; j++)\n            {\n                string name = \"x-test-zumo-\" + j;\n                string value = CreateString(rndGen, 1, 10, Letters);\n                headers.Add(name, value);\n            }\n\n            query = CreateQueryParams(rndGen) ?? new Dictionary<string, string>();\n            if (query.Count > 0)\n            {\n                JObject outputQuery = new JObject();\n                expectedResult.Add(\"query\", outputQuery);\n                foreach (var kvp in query)\n                {\n                    outputQuery.Add(kvp.Key, kvp.Value);\n                }\n            }\n\n            query.Add(\"format\", outputFormat.ToString().ToLowerInvariant());\n            expectedStatus = HttpStatusCode.OK;\n            if (rndGen.Next(4) == 0)\n            {\n                // non-200 responses\n                int[] options = new[] { 400, 404, 500, 201 };\n                int status = options[rndGen.Next(options.Length)];\n                expectedStatus = (HttpStatusCode)status;\n                query.Add(\"status\", status.ToString(CultureInfo.InvariantCulture));\n            }\n        }\n\n        private static JToken SanitizeJsonXml(JToken body)\n        {\n            switch (body.Type)\n            {\n                case JTokenType.Null:\n                    return JToken.Parse(\"null\");\n                case JTokenType.Boolean:\n                case JTokenType.String:\n                case JTokenType.Integer:\n                case JTokenType.Float:\n                    return new JValue((JValue)body);\n                case JTokenType.Array:\n                    JArray array = (JArray)body;\n                    return new JArray(array.Select(jt => SanitizeJsonXml(jt)));\n                case JTokenType.Object:\n                    JObject obj = (JObject)body;\n                    return new JObject(\n                        obj.Properties().Select((jp, i) =>\n                            new JProperty(\"member\" + i, SanitizeJsonXml(jp.Value))));\n                default:\n                    throw new ArgumentException(\"Invalid type: \" + body.Type);\n\n            }\n        }\n\n        private static string JsonToXml(JToken json)\n        {\n            StringBuilder sb = new StringBuilder();\n            sb.Append(\"<root>\");\n            JsonToXml(json, sb);\n            sb.Append(\"</root>\");\n            return sb.ToString();\n        }\n\n        private static void JsonToXml(JToken json, StringBuilder sb)\n        {\n            if (json == null)\n            {\n                json = \"\";\n            }\n\n            switch (json.Type)\n            {\n                case JTokenType.Null:\n                    sb.Append(\"null\");\n                    break;\n                case JTokenType.Boolean:\n                    sb.Append(json.ToString().ToLowerInvariant());\n                    break;\n                case JTokenType.Float:\n                case JTokenType.Integer:\n                    sb.Append(json.ToString());\n                    break;\n                case JTokenType.String:\n                    sb.Append(json.ToObject<string>());\n                    break;\n                case JTokenType.Array:\n                    sb.Append(\"<array>\");\n                    JArray array = (JArray)json;\n                    for (int i = 0; i < array.Count; i++)\n                    {\n                        sb.Append(\"<item>\");\n                        JsonToXml(array[i], sb);\n                        sb.Append(\"</item>\");\n                    }\n\n                    sb.Append(\"</array>\");\n                    break;\n                case JTokenType.Object:\n                    JObject obj = (JObject)json;\n                    var keys = obj.Properties().Select(p => p.Name).ToArray();\n                    Array.Sort(keys);\n                    foreach (var key in keys)\n                    {\n                        sb.Append(\"<\" + key + \">\");\n                        JsonToXml(obj[key], sb);\n                        sb.Append(\"</\" + key + \">\");\n                    }\n\n                    break;\n                default:\n                    throw new ArgumentException(\"Type \" + json.Type + \" is not supported\");\n            }\n        }\n\n        private static ZumoTest CreateJTokenApiTest(ApiPermissions apiPermission, bool isAuthenticated, Random seedGenerator)\n        {\n            string testName = string.Format(CultureInfo.InvariantCulture, \"JToken overload - {0}{1}\",\n                apiPermission, isAuthenticated ? \" (user authenticated)\" : \"\");\n            var expecting401 = apiPermission == ApiPermissions.Admin || apiPermission == ApiPermissions.User && !isAuthenticated;\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                if (apiPermission == ApiPermissions.Public)\n                {\n                    test.AddLog(\"Public permission, using a client without an application key\");\n                    client = new MobileServiceClient(client.ApplicationUri);\n                }\n\n                var testResult = true;\n\n                for (int i = 0; i < 10; i++)\n                {\n                    int seed = seedGenerator.Next();\n                    test.AddLog(\"Test with seed = {0}\", seed);\n                    Random rndGen = new Random(seed);\n                    var method = CreateHttpMethod(rndGen);\n                    JToken body = null;\n                    if (method.Method != \"GET\" && method.Method != \"DELETE\")\n                    {\n                        if (method.Method == \"PATCH\" || method.Method == \"PUT\")\n                        {\n                            // verbs which require a body\n                            body = CreateJson(rndGen, 0, false);\n                        }\n                        else if (rndGen.Next(4) > 0)\n                        {\n                            body = CreateJson(rndGen);\n                        }\n                    }\n\n                    var query = CreateQueryParams(rndGen);\n\n                    JToken apiResult = null;\n                    MobileServiceInvalidOperationException exception = null;\n                    try\n                    {\n                        if (body == null && method == HttpMethod.Post && query == null)\n                        {\n                            test.AddLog(\"  -> Using the InvokeApiAsync(string) overload\");\n                            apiResult = await client.InvokeApiAsync(apiNames[apiPermission]);\n                        }\n                        else if (method == HttpMethod.Post && query == null)\n                        {\n                            test.AddLog(\"  -> Using the InvokeApiAsync(string, JToken) overload\");\n                            apiResult = await client.InvokeApiAsync(apiNames[apiPermission], body);\n                        }\n                        else if (body == null)\n                        {\n                            test.AddLog(\"  -> Using the InvokeApiAsync(string, HttpMethod ({0}), Dictionary<string, string>) overload\", method.Method);\n                            apiResult = await client.InvokeApiAsync(apiNames[apiPermission], method, query);\n                        }\n                        else\n                        {\n                            test.AddLog(\"  -> Using the InvokeApiAsync(string, JToken, HttpMethod ({0}), Dictionary<string, string>) overload\", method.Method);\n                            apiResult = await client.InvokeApiAsync(apiNames[apiPermission], body, method, query);\n                        }\n                    }\n                    catch (MobileServiceInvalidOperationException ex)\n                    {\n                        exception = ex;\n                    }\n\n                    if (expecting401 && exception == null)\n                    {\n                        throw new InvalidOperationException(\"Test should have failed, but didn't - result = \" + apiResult);\n                    }\n\n                    if (expecting401)\n                    {\n                        if (exception.Response.StatusCode == HttpStatusCode.Unauthorized)\n                        {\n                            test.AddLog(\"  -> Succeeded\");\n                        }\n                        else\n                        {\n                            test.AddLog(\"Unexpected exception: {0}\", exception);\n                            test.AddLog(\"Response: {0}\", exception.Response);\n                            var respBody = await exception.Response.Content.ReadAsStringAsync();\n                            test.AddLog(\"Response body: {0}\", respBody);\n                            testResult = false;\n                            break;\n                        }\n                    }\n                    else\n                    {\n                        if (exception != null)\n                        {\n                            test.AddLog(\"Unexpected exception: {0}\", exception);\n                            test.AddLog(\"Response: {0}\", exception.Response);\n                            var respBody = await exception.Response.Content.ReadAsStringAsync();\n                            test.AddLog(\"Response body: {0}\", respBody);\n                            testResult = false;\n                            break;\n                        }\n\n                        JObject expectedResult = new JObject();\n                        expectedResult.Add(\"user\", GetUserObject(client));\n                        if (query != null && query.Count > 0)\n                        {\n                            expectedResult.Add(\"query\", GetQueryObject(query));\n                        }\n\n                        List<string> errors = new List<string>();\n                        if (Util.CompareJson(expectedResult, apiResult, errors))\n                        {\n                            test.AddLog(\"  -> Succeeded\");\n                        }\n                        else\n                        {\n                            test.AddLog(\"Results are different\");\n                            foreach (var error in errors)\n                            {\n                                test.AddLog(\"{0}\", error);\n                            }\n\n                            testResult = false;\n                            break;\n                        }\n                    }\n                }\n\n                return testResult;\n            });\n        }\n\n        private static JObject GetQueryObject(Dictionary<string, string> query)\n        {\n            return new JObject(query.Select(kvp => new JProperty(kvp.Key, kvp.Value)).ToArray());\n        }\n\n        private static JObject GetUserObject(MobileServiceClient client)\n        {\n            if (client.CurrentUser == null)\n            {\n                return new JObject(new JProperty(\"level\", \"anonymous\"));\n            }\n            else\n            {\n                return new JObject(\n                    new JProperty(\"level\", \"authenticated\"),\n                    new JProperty(\"userId\", client.CurrentUser.UserId));\n            }\n        }\n\n        private static Dictionary<string, string> CreateQueryParams(Random rndGen)\n        {\n            if (rndGen.Next(2) == 0)\n            {\n                return null;\n            }\n\n            var result = new Dictionary<string, string>();\n            var size = rndGen.Next(5);\n            for (int i = 0; i < size; i++)\n            {\n                var name = CreateString(rndGen, 1, 10, Letters);\n                var value = CreateString(rndGen);\n                if (!result.ContainsKey(name))\n                {\n                    result.Add(name, value);\n                }\n            }\n\n            return result;\n        }\n\n        private static string CreateString(Random rndGen, int minLength = 0, int maxLength = 30, string specificChars = null)\n        {\n            int length = rndGen.Next(minLength, maxLength);\n            StringBuilder sb = new StringBuilder();\n            for (int i = 0; i < length; i++)\n            {\n                if (specificChars == null)\n                {\n                    if (rndGen.Next(3) > 0)\n                    {\n                        // common case, ascii characters\n                        sb.Append((char)rndGen.Next(' ', '~'));\n                    }\n                    else\n                    {\n                        // all unicode, except surrogate\n                        char c;\n                        do\n                        {\n                            c = (char)rndGen.Next(' ', 0xfffe);\n                        } while (Char.IsSurrogate(c));\n                        sb.Append(c);\n                    }\n                }\n                else\n                {\n                    sb.Append(specificChars[rndGen.Next(specificChars.Length)]);\n                }\n            }\n\n            return sb.ToString();\n        }\n\n        private static JToken CreateJson(Random rndGen, int currentDepth = 0, bool canBeNull = true)\n        {\n            const int maxDepth = 3;\n            int kind = rndGen.Next(15);\n\n            // temp workaround\n            if (currentDepth == 0)\n            {\n                kind = rndGen.Next(8, 15);\n            }\n\n            switch (kind)\n            {\n                case 0:\n                    return true;\n                case 1:\n                    return false;\n                case 2:\n                    return rndGen.Next();\n                case 3:\n                    return rndGen.Next() >> rndGen.Next(10);\n                case 4:\n                case 5:\n                case 6:\n                    return CreateString(rndGen, 0, 10);\n                case 7:\n                    if (canBeNull)\n                    {\n                        return JToken.Parse(\"null\");\n                    }\n                    else\n                    {\n                        return CreateString(rndGen, 0, 10);\n                    }\n                case 8:\n                case 9:\n                case 10:\n                    if (currentDepth > maxDepth)\n                    {\n                        return \"max depth\";\n                    }\n                    else\n                    {\n                        int size = rndGen.Next(5);\n                        JArray result = new JArray();\n                        for (int i = 0; i < size; i++)\n                        {\n                            result.Add(CreateJson(rndGen, currentDepth + 1));\n                        }\n\n                        return result;\n                    }\n                default:\n                    if (currentDepth > maxDepth)\n                    {\n                        return \"max depth\";\n                    }\n                    else\n                    {\n                        int size = rndGen.Next(5);\n                        JObject result = new JObject();\n                        for (int i = 0; i < size; i++)\n                        {\n                            string key;\n                            do\n                            {\n                                key = CreateString(rndGen, 3, 5);\n                            } while (result[key] != null);\n                            result.Add(key, CreateJson(rndGen, currentDepth + 1));\n                        }\n\n                        return result;\n                    }\n            }\n        }\n\n        private static HttpMethod CreateHttpMethod(Random rndGen)\n        {\n            switch (rndGen.Next(10))\n            {\n                case 0:\n                case 1:\n                case 2:\n                    return HttpMethod.Post;\n                case 3:\n                case 4:\n                case 5:\n                case 6:\n                    return HttpMethod.Get;\n                case 7:\n                    return HttpMethod.Put;\n                case 8:\n                    return HttpMethod.Delete;\n                default:\n                    return new HttpMethod(\"PATCH\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/ZumoLoginTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.Live;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Net;\nusing System.Threading.Tasks;\nusing ZumoE2ETestApp.Framework;\n\nnamespace ZumoE2ETestApp.Tests\n{\n    internal static class ZumoLoginTests\n    {\n        private const string TablePublicPermission = \"public\";\n        private const string TableApplicationPermission = \"application\";\n        private const string TableUserPermission = \"authenticated\";\n        private const string TableAdminPermission = \"admin\";\n\n        private static JObject lastUserIdentityObject = null;\n\n        private static Dictionary<string, string> testPropertyBag = new Dictionary<string, string>();\n        private const string ClientIdKeyName = \"clientId\";\n        private const string MicrosoftViaLiveSDK = \"Microsoft via Live SDK\";\n\n        public static ZumoTestGroup CreateTests()\n        {\n            ZumoTestGroup result = new ZumoTestGroup(\"Login tests\");\n            result.AddTest(CreateLogoutTest());\n            result.AddTest(CreateCRUDTest(TablePublicPermission, null, TablePermission.Public, false));\n            result.AddTest(CreateCRUDTest(TableApplicationPermission, null, TablePermission.Application, false));\n            result.AddTest(CreateCRUDTest(TableUserPermission, null, TablePermission.User, false));\n            result.AddTest(CreateCRUDTest(TableAdminPermission, null, TablePermission.Admin, false));\n\n            int indexOfTestsWithAuthentication = result.AllTests.Count();\n\n            Dictionary<MobileServiceAuthenticationProvider, bool> providersWithRecycledTokenSupport;\n            providersWithRecycledTokenSupport = new Dictionary<MobileServiceAuthenticationProvider, bool>\n            {\n                { MobileServiceAuthenticationProvider.Facebook, true },\n                { MobileServiceAuthenticationProvider.Google, false },   // Known bug - Drop login via Google token until Google client flow is reintroduced\n                { MobileServiceAuthenticationProvider.MicrosoftAccount, false },\n                { MobileServiceAuthenticationProvider.Twitter, false },\n                { MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, false }\n            };\n\n#if !WINDOWS_PHONE\n            result.AddTest(ZumoTestCommon.CreateTestWithSingleAlert(\"In the next few tests you will be prompted for username / password five times.\"));\n#endif\n\n            foreach (MobileServiceAuthenticationProvider provider in Util.EnumGetValues(typeof(MobileServiceAuthenticationProvider)))\n            {\n                result.AddTest(CreateLogoutTest());\n#if !WINDOWS_PHONE\n                result.AddTest(CreateLoginTest(provider, false));\n#else\n                result.AddTest(CreateLoginTest(provider));\n#endif\n                result.AddTest(CreateCRUDTest(TableApplicationPermission, provider.ToString(), TablePermission.Application, true));\n                result.AddTest(CreateCRUDTest(TableUserPermission, provider.ToString(), TablePermission.User, true));\n                result.AddTest(CreateCRUDTest(TableAdminPermission, provider.ToString(), TablePermission.Admin, true));\n\n                bool supportsTokenRecycling;\n                if (providersWithRecycledTokenSupport.TryGetValue(provider, out supportsTokenRecycling) && supportsTokenRecycling)\n                {\n                    result.AddTest(CreateLogoutTest());\n                    result.AddTest(CreateClientSideLoginTest(provider));\n                    result.AddTest(CreateCRUDTest(TableUserPermission, provider.ToString(), TablePermission.User, userIsAuthenticated: true, usingSingleSignOnOrToken: true));\n                }\n            }\n\n#if !WINDOWS_PHONE\n            result.AddTest(ZumoTestCommon.CreateYesNoTest(\"Were you prompted for username / password five times?\", true));\n#endif\n\n            result.AddTest(CreateLogoutTest());\n\n#if WINDOWS_PHONE && !WP75\n            result.AddTest(ZumoTestCommon.CreateInputTest(\"Enter Live App Client ID\", testPropertyBag, ClientIdKeyName));\n#endif\n\n#if !WP75\n            result.AddTest(CreateLiveSDKLoginTest());\n            result.AddTest(CreateCRUDTest(TableUserPermission, MicrosoftViaLiveSDK, TablePermission.User, true));\n#endif\n\n#if !WINDOWS_PHONE\n            result.AddTest(ZumoTestCommon.CreateTestWithSingleAlert(\"We'll log in again; you may or may not be asked for password in the next few moments.\"));\n            foreach (MobileServiceAuthenticationProvider provider in Enum.GetValues(typeof(MobileServiceAuthenticationProvider)))\n            {\n                if (provider == MobileServiceAuthenticationProvider.MicrosoftAccount)\n                {\n                    // Known issue - SSO with MS account will not work if Live SDK is also used\n                    continue;\n                }\n\n                result.AddTest(CreateLogoutTest());\n                result.AddTest(CreateLoginTest(provider, true));\n                result.AddTest(CreateCRUDTest(TableUserPermission, provider.ToString(), TablePermission.User, userIsAuthenticated: true, usingSingleSignOnOrToken: true));\n            }\n\n            result.AddTest(ZumoTestCommon.CreateTestWithSingleAlert(\"Now we'll continue running the tests, but you *should not be prompted for the username or password anymore*.\"));\n            foreach (MobileServiceAuthenticationProvider provider in Enum.GetValues(typeof(MobileServiceAuthenticationProvider)))\n            {\n                if (provider == MobileServiceAuthenticationProvider.MicrosoftAccount)\n                {\n                    // Known issue - SSO with MS account will not work if Live SDK is also used\n                    continue;\n                }\n\n                result.AddTest(CreateLogoutTest());\n                result.AddTest(CreateLoginTest(provider, true));\n                result.AddTest(CreateCRUDTest(TableUserPermission, provider.ToString(), TablePermission.User, userIsAuthenticated: true, usingSingleSignOnOrToken: true));\n            }\n\n            result.AddTest(ZumoTestCommon.CreateYesNoTest(\"Were you prompted for the username in any of the providers?\", false));\n#endif\n\n            foreach (var test in result.AllTests.Skip(indexOfTestsWithAuthentication))\n            {\n                test.CanRunUnattended = false;\n            }\n\n            // Clean-up any logged in user\n            result.AddTest(CreateLogoutTest());\n\n            return result;\n        }\n\n#if !WINDOWS_PHONE\n        internal static ZumoTest CreateLoginTest(MobileServiceAuthenticationProvider provider, bool useSingleSignOn = false)\n        {\n            string testName = string.Format(\"Login with {0}{1}\", provider, useSingleSignOn ? \" (using single sign-on)\" : \"\");\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var user = await client.LoginAsync(provider, useSingleSignOn);\n                test.AddLog(\"Logged in as {0}\", user.UserId);\n                return true;\n            }, provider == MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory ? ZumoTestGlobals.RuntimeFeatureNames.AAD_LOGIN : null,\n               useSingleSignOn ? ZumoTestGlobals.RuntimeFeatureNames.SSO_LOGIN : null);\n        }\n\n#else\n        internal static ZumoTest CreateLoginTest(MobileServiceAuthenticationProvider provider)\n        {\n            string testName = string.Format(\"Login with {0}\", provider);\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var user = await client.LoginAsync(provider);\n                test.AddLog(\"Logged in as {0}\", user.UserId);\n                return true;\n            }, provider == MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory ? ZumoTestGlobals.RuntimeFeatureNames.AAD_LOGIN : null);\n        }\n#endif\n\n        internal static ZumoTest CreateLogoutTest()\n        {\n            return new ZumoTest(\"Logout\", delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                client.Logout();\n                test.AddLog(\"Logged out. Current logged-in client: {0}\", client.CurrentUser == null ? \"<<NULL>>\" : client.CurrentUser.UserId);\n                TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n                tcs.SetResult(true);\n                return tcs.Task;\n            });\n        }\n\n        enum TablePermission { Public, Application, User, Admin }\n\n#if !WP75\n        private static ZumoTest CreateLiveSDKLoginTest()\n        {\n            return new ZumoTest(\"Login via token with Live SDK\", async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n#if !WINDOWS_PHONE\n                var uri = client.ApplicationUri.ToString();\n                var liveIdClient = new LiveAuthClient(uri);\n#else\n                string clientId;\n                testPropertyBag.TryGetValue(ClientIdKeyName, out clientId);\n                if (clientId == null)\n                {\n                    test.AddLog(\"ClientId of Microsoft application not entered correctly.\");\n                    return false;\n                }\n\n                var liveIdClient = new LiveAuthClient(clientId);\n#endif\n                var liveLoginResult = await liveIdClient.LoginAsync(new string[] { \"wl.basic\" });\n                if (liveLoginResult.Status == LiveConnectSessionStatus.Connected)\n                {\n                    var liveConnectClient = new LiveConnectClient(liveLoginResult.Session);\n                    var me = await liveConnectClient.GetAsync(\"me\");\n                    test.AddLog(\"Logged in as {0}\", me.RawResult);\n                    if (liveLoginResult.Session.AuthenticationToken == null)\n                    {\n                        test.AddLog(\"Error, authentication token in the live login result is null\");\n                        return false;\n                    }\n                    else\n                    {\n                        var token = new JObject(new JProperty(\"authenticationToken\", liveLoginResult.Session.AuthenticationToken));\n                        var user = await client.LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount, token);\n                        test.AddLog(\"Logged in as {0}\", user.UserId);\n                        return true;\n                    }\n                }\n                else\n                {\n                    test.AddLog(\"Login failed.\");\n                    return false;\n                }\n            }, ZumoTestGlobals.RuntimeFeatureNames.LIVE_LOGIN);\n        }\n#endif\n\n        private static ZumoTest CreateClientSideLoginTest(MobileServiceAuthenticationProvider provider)\n        {\n            return new ZumoTest(\"Login via token for \" + provider, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var lastIdentity = lastUserIdentityObject;\n                if (lastIdentity == null)\n                {\n                    test.AddLog(\"Last identity object is null. Cannot run this test.\");\n                    return false;\n                }\n\n                lastUserIdentityObject = null;\n\n                test.AddLog(\"Last user identity object: {0}\", lastIdentity);\n                var token = new JObject();\n                switch (provider)\n                {\n                    case MobileServiceAuthenticationProvider.Facebook:\n                        token.Add(\"access_token\", lastIdentity[\"facebook\"][\"accessToken\"]);\n                        break;\n                    case MobileServiceAuthenticationProvider.Google:\n                        token.Add(\"access_token\", lastIdentity[\"google\"][\"accessToken\"]);\n                        break;\n                    default:\n                        test.AddLog(\"Client-side login test for {0} is not implemented or not supported.\", provider);\n                        return false;\n                }\n\n                var user = await client.LoginAsync(provider, token);\n                test.AddLog(\"Logged in as {0}\", user.UserId);\n                return true;\n            }, ZumoTestGlobals.RuntimeFeatureNames.SSO_LOGIN);\n        }\n\n        private static ZumoTest CreateCRUDTest(string tableName, string providerName, TablePermission tableType, bool userIsAuthenticated, bool usingSingleSignOnOrToken = false)\n        {\n            List<string> requiredRuntimeReatures = new List<string>() { ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES };\n            if (MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory.ToString().Equals(providerName))\n            {\n                requiredRuntimeReatures.Add(ZumoTestGlobals.RuntimeFeatureNames.AAD_LOGIN);\n            }\n\n            if (usingSingleSignOnOrToken || MicrosoftViaLiveSDK.Equals(providerName))\n            {\n                requiredRuntimeReatures.Add(ZumoTestGlobals.RuntimeFeatureNames.SSO_LOGIN);\n            }\n\n            string testName = string.Format(CultureInfo.InvariantCulture, \"CRUD, {0}, table with {1} permissions\",\n                userIsAuthenticated ? (\"auth by \" + providerName) : \"unauthenticated\", tableType);\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var currentUser = client.CurrentUser;\n                var table = client.GetTable(tableName);\n                var crudShouldWork = tableType == TablePermission.Public ||\n                    tableType == TablePermission.Application ||\n                    (tableType == TablePermission.User && userIsAuthenticated);\n                var item = new JObject();\n                item.Add(\"name\", \"John Doe\");\n                int id = 1;\n                Dictionary<string, string> queryParameters = new Dictionary<string, string>\n                {\n                    { \"userIsAuthenticated\", userIsAuthenticated.ToString().ToLowerInvariant() },\n                };\n                MobileServiceInvalidOperationException ex = null;\n                try\n                {\n                    var inserted = await table.InsertAsync(item, queryParameters);\n                    item = (JObject)inserted;\n                    Util.CamelCaseProps(item);\n\n                    test.AddLog(\"Inserted item: {0}\", item);\n                    id = item[\"id\"].Value<int>();\n                    if (tableType == TablePermission.User)\n                    {\n                        // script added user id to the document. Validating it\n                        var userId = item[\"userId\"].Value<string>();\n                        if (userId == currentUser.UserId)\n                        {\n                            test.AddLog(\"User id correctly added by the server script\");\n                        }\n                        else\n                        {\n                            test.AddLog(\"Error, user id not set by the server script\");\n                            return false;\n                        }\n                    }\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    item[\"id\"] = 1; // used in other requests\n                    ex = e;\n                }\n\n                if (!ValidateExpectedError(test, ex, crudShouldWork))\n                {\n                    return false;\n                }\n\n                if (tableType == TablePermission.Public)\n                {\n                    // Update, Read and Delete are public; we don't need the app key anymore\n                    var oldClient = client;\n                    client = new MobileServiceClient(oldClient.ApplicationUri);\n                    if (oldClient.CurrentUser != null)\n                    {\n                        client.CurrentUser = new MobileServiceUser(oldClient.CurrentUser.UserId);\n                        client.CurrentUser.MobileServiceAuthenticationToken = oldClient.CurrentUser.MobileServiceAuthenticationToken;\n                    }\n\n                    table = client.GetTable(tableName);\n                }\n\n                ex = null;\n                try\n                {\n                    item[\"name\"] = \"Jane Roe\";\n                    var updated = await table.UpdateAsync(item, queryParameters);\n                    test.AddLog(\"Updated item: {0}\", updated);\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    ex = e;\n                }\n\n                if (!ValidateExpectedError(test, ex, crudShouldWork))\n                {\n                    return false;\n                }\n\n                ex = null;\n                try\n                {\n                    var item2 = await table.LookupAsync(id, queryParameters);\n                    test.AddLog(\"Retrieved item via Lookup: {0}\", item2);\n                    var obj = item2 as JObject;\n                    bool usersEnabled = false;\n                    if (obj[\"UsersEnabled\"] != null)\n                    {\n                        usersEnabled = obj[\"UsersEnabled\"].Value<bool>();\n                    }\n                    if (obj[\"Identities\"] != null)\n                    {\n                        string identities = obj[\"Identities\"].Value<string>();\n                        try\n                        {\n                            var identitiesObj = JObject.Parse(identities);\n                            test.AddLog(\"Identities object: {0}\", identitiesObj);\n                            if (usersEnabled)\n                            {\n                                string userName = NameOrScreenName(providerName, identitiesObj);\n                                test.AddLog(\"User name: {0}\", userName ?? \"<<null>>\");\n                                if (userName == null)\n                                {\n                                    test.AddLog(\"Error, with users feature enabled, user identity should have a name (or screen_name in case of twitter)\");\n                                    return false;\n                                }\n                            }\n\n                            lastUserIdentityObject = identitiesObj;\n                        }\n                        catch (Exception ex2)\n                        {\n                            test.AddLog(\"Could not parse the identites object as JSON: {0}\", ex2);\n                            lastUserIdentityObject = null;\n                        }\n                    }\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    ex = e;\n                }\n\n                if (!ValidateExpectedError(test, ex, crudShouldWork))\n                {\n                    return false;\n                }\n\n                ex = null;\n                try\n                {\n                    JToken items = null;\n                    if (ZumoTestGlobals.Instance.IsNetRuntime)\n                    {\n                        items = await table.ReadAsync(\"$filter=Id eq '\" + id + \"'\", queryParameters);\n                    }\n                    else\n                    {\n                        items = await table.ReadAsync(\"$filter=id eq \" + id, queryParameters);\n                    }\n                    test.AddLog(\"Retrieved items via Read: {0}\", items);\n                    if (((JArray)items).Count != 1)\n                    {\n                        test.AddLog(\"Error, query should have returned exactly one item\");\n                        return false;\n                    }\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    ex = e;\n                }\n\n                if (!ValidateExpectedError(test, ex, crudShouldWork))\n                {\n                    return false;\n                }\n\n                ex = null;\n                try\n                {\n                    await table.DeleteAsync(item, queryParameters);\n                    test.AddLog(\"Deleted item: {0}\", item);\n                }\n                catch (MobileServiceInvalidOperationException e)\n                {\n                    ex = e;\n                }\n\n                if (!ValidateExpectedError(test, ex, crudShouldWork))\n                {\n                    return false;\n                }\n\n                return true;\n            }, requiredRuntimeReatures.ToArray());\n        }\n\n        private static string NameOrScreenName(string providerName, JObject identities)\n        {\n            string provider = providerName.ToLowerInvariant();\n            if (provider == \"microsoftaccount\")\n            {\n                provider = \"microsoft\";\n            }\n\n            JToken name = identities[provider][\"screen_name\"] ?? identities[provider][\"name\"];\n            if (name != null)\n            {\n                return name.Value<string>();\n            }\n            else\n            {\n                return null;\n            }\n        }\n\n        private static bool ValidateExpectedError(ZumoTest test, MobileServiceInvalidOperationException exception, bool operationShouldSucceed)\n        {\n            if (operationShouldSucceed)\n            {\n                if (exception != null)\n                {\n                    test.AddLog(\"Operation should have succeeded, but it failed: {0}\", exception);\n                    return false;\n                }\n                else\n                {\n                    return true;\n                }\n            }\n            else\n            {\n                if (exception == null)\n                {\n                    test.AddLog(\"Operation should have failed, but it succeeded.\");\n                    return false;\n                }\n                else\n                {\n                    if (exception.Response.StatusCode == HttpStatusCode.Unauthorized ||\n                        exception.Response.StatusCode == HttpStatusCode.Forbidden)\n                    {\n                        test.AddLog(\"Expected exception thrown, with expected status code.\");\n                        return true;\n                    }\n                    else\n                    {\n                        test.AddLog(\"Expected exception was thrown, but with invalid status code: {0}\", exception.Response.StatusCode);\n                        return false;\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/ZumoMiscTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Text.RegularExpressions;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json.Linq;\nusing ZumoE2ETestApp.Framework;\nusing ZumoE2ETestApp.Tests.Types;\n\nnamespace ZumoE2ETestApp.Tests\n{\n    internal static class ZumoMiscTests\n    {\n        public static ZumoTestGroup CreateTests()\n        {\n            ZumoTestGroup result = new ZumoTestGroup(\"Misc tests\");\n            \n            result.AddTest(CreateFilterTestWithMultipleRequests(true));\n            result.AddTest(CreateFilterTestWithMultipleRequests(false));\n\n            result.AddTest(new ZumoTest(\"Validate that filter can bypass service\", async delegate(ZumoTest test)\n            {\n                string json = \"{'id':1,'name':'John Doe','age':33}\".Replace('\\'', '\\\"');\n                var client = new MobileServiceClient(\n                    ZumoTestGlobals.Instance.Client.ApplicationUri,\n                    ZumoTestGlobals.Instance.Client.ApplicationKey,\n                    new HandlerToBypassService(201, \"application/json\", json));\n                var table = client.GetTable(\"TableWhichDoesNotExist\");\n                var item = new JObject();\n                var inserted = await table.InsertAsync(item);\n                List<string> errors = new List<string>();\n                if (!Util.CompareJson(JObject.Parse(json), inserted, errors))\n                {\n                    foreach (var error in errors)\n                    {\n                        test.AddLog(error);\n                    }\n\n                    test.AddLog(\"Error comparing object returned by the filter\");\n                    return false;\n                }\n                else\n                {\n                    return true;\n                }\n            }, ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES));\n\n            result.AddTest(CreateUserAgentValidationTest());\n            result.AddTest(CreateParameterPassingTest(true));\n            result.AddTest(CreateParameterPassingTest(false));\n\n            result.AddTest(CreateOptimisticConcurrencyTest(\"Conflicts (client side) - client wins\", (clientItem, serverItem) =>\n            {\n                var mergeResult = clientItem.Clone();\n                mergeResult.Version = serverItem.Version;\n                return mergeResult;\n            }));\n            result.AddTest(CreateOptimisticConcurrencyTest(\"Conflicts (client side) - server wins\", (clientItem, serverItem) =>\n            {\n                return serverItem;\n            }));\n            result.AddTest(CreateOptimisticConcurrencyTest(\"Conflicts (client side) - Name from client, Number from server\", (clientItem, serverItem) =>\n            {\n                var mergeResult = serverItem.Clone();\n                mergeResult.Name = clientItem.Name;\n                return mergeResult;\n            }));\n\n            result.AddTest(CreateOptimisticConcurrencyWithServerConflictsTest(\"Conflicts (server side) - client wins\", true));\n            result.AddTest(CreateOptimisticConcurrencyWithServerConflictsTest(\"Conflicts (server side) - server wins\", false));\n\n            result.AddTest(CreateSystemPropertiesTest(true));\n            result.AddTest(CreateSystemPropertiesTest(false));\n\n            return result;\n        }\n\n        private static ZumoTest CreateSystemPropertiesTest(bool useTypedTable)\n        {\n            return new ZumoTest(\"System properties in \" + (useTypedTable ? \"\" : \"un\") + \"typed tables\", async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var typedTable = client.GetTable<VersionedType>();\n                var untypedTable = client.GetTable(ZumoTestGlobals.StringIdRoundTripTableName);\n                untypedTable.SystemProperties =\n                    MobileServiceSystemProperties.CreatedAt |\n                    MobileServiceSystemProperties.UpdatedAt |\n                    MobileServiceSystemProperties.Version;\n                DateTime now = DateTime.UtcNow;\n                int seed = now.Year * 10000 + now.Month * 100 + now.Day;\n                test.AddLog(\"Using seed: {0}\", seed);\n                Random rndGen = new Random(seed);\n                VersionedType item = null;\n                JObject untypedItem = null;\n                DateTime createdAt, updatedAt;\n                string id;\n                if (useTypedTable)\n                {\n                    item = new VersionedType(rndGen);\n                    await typedTable.InsertAsync(item);\n                    test.AddLog(\"Inserted: {0}\", item);\n                    id = item.Id;\n                    createdAt = item.CreatedAt;\n                    updatedAt = item.UpdatedAt;\n                }\n                else\n                {\n                    untypedItem = new JObject();\n                    untypedItem.Add(\"name\", \"unused\");\n                    untypedItem = (JObject)(await untypedTable.InsertAsync(untypedItem));\n                    test.AddLog(\"Inserted: {0}\", untypedItem);\n                    id = (string)untypedItem[\"id\"];\n                    createdAt = untypedItem[\"__createdAt\"].ToObject<DateTime>();\n                    updatedAt = untypedItem[\"__updatedAt\"].ToObject<DateTime>();\n                }\n\n                test.AddLog(\"Now adding a new item\");\n                DateTime otherCreatedAt, otherUpdatedAt;\n                string otherId;\n                if (useTypedTable)\n                {\n                    item = new VersionedType(rndGen);\n                    await typedTable.InsertAsync(item);\n                    test.AddLog(\"Inserted: {0}\", item);\n                    otherId = item.Id;\n                    otherCreatedAt = item.CreatedAt;\n                    otherUpdatedAt = item.UpdatedAt;\n                }\n                else\n                {\n                    untypedItem = new JObject();\n                    untypedItem.Add(\"name\", \"unused\");\n                    untypedItem = (JObject)(await untypedTable.InsertAsync(untypedItem));\n                    test.AddLog(\"Inserted: {0}\", untypedItem);\n                    otherId = (string)untypedItem[\"id\"];\n                    otherCreatedAt = untypedItem[\"__createdAt\"].ToObject<DateTime>();\n                    otherUpdatedAt = untypedItem[\"__updatedAt\"].ToObject<DateTime>();\n                }\n\n                if (createdAt >= otherCreatedAt)\n                {\n                    test.AddLog(\"Error, first __createdAt value is not smaller than second one\");\n                    return false;\n                }\n\n                if (updatedAt >= otherUpdatedAt)\n                {\n                    test.AddLog(\"Error, first __updatedAt value is not smaller than second one\");\n                    return false;\n                }\n\n                createdAt = otherCreatedAt;\n                updatedAt = otherUpdatedAt;\n\n                test.AddLog(\"Now updating the item\");\n                if (useTypedTable)\n                {\n                    item = new VersionedType(rndGen) { Id = otherId };\n                    await typedTable.UpdateAsync(item);\n                    test.AddLog(\"Updated: {0}\", item);\n                    otherUpdatedAt = item.UpdatedAt;\n                    otherCreatedAt = item.CreatedAt;\n                }\n                else\n                {\n                    untypedItem = new JObject(new JProperty(\"id\", otherId), new JProperty(\"name\", \"other name\"));\n                    untypedItem = (JObject)(await untypedTable.UpdateAsync(untypedItem));\n                    test.AddLog(\"Updated: {0}\", untypedItem);\n                    otherCreatedAt = untypedItem[\"__createdAt\"].ToObject<DateTime>();\n                    otherUpdatedAt = untypedItem[\"__updatedAt\"].ToObject<DateTime>();\n                }\n\n                if (createdAt != otherCreatedAt)\n                {\n                    test.AddLog(\"Error, update changed the value of the __createdAt property\");\n                    return false;\n                }\n\n                if (otherUpdatedAt <= updatedAt)\n                {\n                    test.AddLog(\"Error, update did not change the __updatedAt property to a later value\");\n                    return false;\n                }\n\n                test.AddLog(\"Cleanup: deleting items\");\n                await untypedTable.DeleteAsync(new JObject(new JProperty(\"id\", id)));\n                await untypedTable.DeleteAsync(new JObject(new JProperty(\"id\", otherId)));\n                return true;\n            }, ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES);\n        }\n\n        private static ZumoTest CreateOptimisticConcurrencyTest(string testName, Func<VersionedType, VersionedType, VersionedType> mergingPolicy)\n        {\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable<VersionedType>();\n                DateTime now = DateTime.UtcNow;\n                int seed = now.Year * 10000 + now.Month * 100 + now.Day;\n                test.AddLog(\"Using seed: {0}\", seed);\n                Random rndGen = new Random(seed);\n                var item = new VersionedType(rndGen);\n                await table.InsertAsync(item);\n                test.AddLog(\"[client 1] Inserted item: {0}\", item);\n\n                var client2 = new MobileServiceClient(client.ApplicationUri, client.ApplicationKey);\n                var table2 = client.GetTable<VersionedType>();\n                var item2 = await table2.LookupAsync(item.Id);\n                test.AddLog(\"[client 2] Retrieved the item\");\n                item2.Name = Util.CreateSimpleRandomString(rndGen, 20);\n                item2.Number = rndGen.Next(100000);\n                test.AddLog(\"[client 2] Updated the item, will update on the server now\");\n                await table2.UpdateAsync(item2);\n                test.AddLog(\"[client 2] Item has been updated: {0}\", item2);\n\n                test.AddLog(\"[client 1] Will try to update; should fail\");\n                MobileServicePreconditionFailedException<VersionedType> ex = null;\n                try\n                {\n                    item.Name = Util.CreateSimpleRandomString(rndGen, 20);\n                    await table.UpdateAsync(item);\n                    test.AddLog(\"[client 1] Error, the update succeeded, but it should have failed. Item = {0}\", item);\n                    return false;\n                }\n                catch (MobileServicePreconditionFailedException<VersionedType> e)\n                {\n                    test.AddLog(\"[client 1] Received expected exception; server item = {0}\", e.Item);\n                    ex = e;\n                }\n\n                var serverItem = ex.Item;\n                if (serverItem.Version != item2.Version)\n                {\n                    test.AddLog(\"[client 1] Error, server item's version is not the same as the second item version\");\n                    return false;\n                }\n\n                var cachedMergedItem = mergingPolicy(item, serverItem);\n                var mergedItem = mergingPolicy(item, serverItem);\n                test.AddLog(\"[client 1] Merged item: {0}\", mergedItem);\n                test.AddLog(\"[client 1] Trying to update it again, should succeed this time\");\n\n                await table.UpdateAsync(mergedItem);\n                test.AddLog(\"[client 1] Updated the item: {0}\", mergedItem);\n\n                if (!cachedMergedItem.Equals(mergedItem))\n                {\n                    test.AddLog(\"[client 1] Error, the server version of the merged item doesn't match the client one\");\n                    return false;\n                }\n\n                test.AddLog(\"[client 2] Refreshing the item\");\n                await table2.RefreshAsync(item2);\n                test.AddLog(\"[client 2] Refreshed the item: {0}\", item2);\n\n                if (!item2.Equals(mergedItem))\n                {\n                    test.AddLog(\"[client] Error, item is different than the item from the client 1\");\n                    return false;\n                }\n\n                return true;\n            }, ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES);\n        }\n\n        private static ZumoTest CreateOptimisticConcurrencyWithServerConflictsTest(string testName, bool clientWins)\n        {\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable<VersionedType>();\n                DateTime now = DateTime.UtcNow;\n                int seed = now.Year * 10000 + now.Month * 100 + now.Day;\n                test.AddLog(\"Using seed: {0}\", seed);\n                Random rndGen = new Random(seed);\n                var item = new VersionedType(rndGen);\n                await table.InsertAsync(item);\n                test.AddLog(\"[client 1] Inserted item: {0}\", item);\n\n                var client2 = new MobileServiceClient(client.ApplicationUri, client.ApplicationKey);\n                var table2 = client.GetTable<VersionedType>();\n                var item2 = await table2.LookupAsync(item.Id);\n                test.AddLog(\"[client 2] Retrieved the item\");\n                item2.Name = Util.CreateSimpleRandomString(rndGen, 20);\n                item2.Number = rndGen.Next(100000);\n                test.AddLog(\"[client 2] Updated the item, will update on the server now\");\n                await table2.UpdateAsync(item2);\n                test.AddLog(\"[client 2] Item has been updated: {0}\", item2);\n\n                test.AddLog(\"[client 1] Will try to update - using policy that data on {0} wins\", clientWins ? \"client\" : \"server\");\n                string oldName = item2.Name;\n                string newName = Util.CreateSimpleRandomString(rndGen, 20);\n                item.Name = newName;\n                await table.UpdateAsync(item, new Dictionary<string, string> { { \"conflictPolicy\", clientWins ? \"clientWins\" : \"serverWins\" } });\n                test.AddLog(\"[client 1] Updated the item: {0}\", item);\n\n                test.AddLog(\"[client 2] Now refreshing the second item\");\n                await table2.RefreshAsync(item2);\n                test.AddLog(\"[client 2] Refreshed: {0}\", item2);\n                if (clientWins)\n                {\n                    // The name should be the new one\n                    if (item.Name != newName || item2.Name != newName)\n                    {\n                        test.AddLog(\"Error, name wasn't updated in a 'client wins' policy\");\n                        return false;\n                    }\n                }\n                else\n                {\n                    // The name should have remained the old one\n                    if (item.Name != oldName || item2.Name != oldName)\n                    {\n                        test.AddLog(\"Error, name was updated in a 'server wins' policy\");\n                        return false;\n                    }\n                }\n\n                test.AddLog(\"Table operations behaved as expected. Cleaning up...\");\n                await table.DeleteAsync(item);\n                test.AddLog(\"...done\");\n                return true;\n            }, ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES);\n        }\n\n        private static ZumoTest CreateParameterPassingTest(bool useTypedTable)\n        {\n            return new ZumoTest(\"Parameter passing test - \" + (useTypedTable ? \"typed\" : \"untyped\") + \" tables\", async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var typed = client.GetTable<ParamsTestTableItem>();\n                var untyped = client.GetTable(ZumoTestGlobals.ParamsTestTableName);\n                var dict = new Dictionary<string, string>\n                {\n                    { \"item\", \"simple\" },\n                    { \"empty\", \"\" },\n                    { \"spaces\", \"with spaces\" },\n                    { \"specialChars\", \"`!@#$%^&*()-=[]\\\\;',./~_+{}|:\\\"<>?\" },\n                    { \"latin\", \"ãéìôü ÇñÑ\" },\n                    { \"arabic\", \"الكتاب على الطاولة\" },\n                    { \"chinese\", \"这本书在桌子上\" },\n                    { \"japanese\", \"本は机の上に\" },\n                    { \"hebrew\", \"הספר הוא על השולחן\" },\n                    { \"name+with special&chars\", \"should just work\" }\n                };\n\n                var expectedParameters = new JObject();\n                foreach (var key in dict.Keys)\n                {\n                    expectedParameters.Add(key, dict[key]);\n                }\n\n                bool testPassed = true;\n\n                ParamsTestTableItem typedItem = new ParamsTestTableItem();\n                var untypedItem = new JObject();\n                JObject actualParameters;\n\n                dict[\"operation\"] = \"insert\";\n                expectedParameters.Add(\"operation\", \"insert\");\n                if (useTypedTable)\n                {\n                    await typed.InsertAsync(typedItem, dict);\n                    actualParameters = JObject.Parse(typedItem.parameters);\n                }\n                else\n                {\n                    var inserted = await untyped.InsertAsync(untypedItem, dict);\n                    untypedItem = inserted as JObject;\n                    actualParameters = JObject.Parse(untypedItem[\"parameters\"].Value<string>());\n                }\n\n                testPassed = testPassed && ValidateParameters(test, \"insert\", expectedParameters, actualParameters);\n\n                dict[\"operation\"] = \"update\";\n                expectedParameters[\"operation\"] = \"update\";\n                if (useTypedTable)\n                {\n                    await typed.UpdateAsync(typedItem, dict);\n                    actualParameters = JObject.Parse(typedItem.parameters);\n                }\n                else\n                {\n                    var updated = await untyped.UpdateAsync(untypedItem, dict);\n                    actualParameters = JObject.Parse(updated[\"parameters\"].Value<string>());\n                }\n\n                testPassed = testPassed && ValidateParameters(test, \"update\", expectedParameters, actualParameters);\n\n                dict[\"operation\"] = \"lookup\";\n                expectedParameters[\"operation\"] = \"lookup\";\n                if (useTypedTable)\n                {\n                    var temp = await typed.LookupAsync(1, dict);\n                    actualParameters = JObject.Parse(temp.parameters);\n                }\n                else\n                {\n                    var temp = await untyped.LookupAsync(1, dict);\n                    actualParameters = JObject.Parse(temp[\"parameters\"].Value<string>());\n                }\n\n                testPassed = testPassed && ValidateParameters(test, \"lookup\", expectedParameters, actualParameters);\n\n                dict[\"operation\"] = \"read\";\n                expectedParameters[\"operation\"] = \"read\";\n                if (useTypedTable)\n                {\n                    var temp = await typed.Where(t => t.Id >= 1).WithParameters(dict).ToListAsync();\n                    actualParameters = JObject.Parse(temp[0].parameters);\n                }\n                else\n                {\n                    var temp = await untyped.ReadAsync(\"$filter=id ge 1\", dict);\n                    actualParameters = JObject.Parse(temp[0][\"parameters\"].Value<string>());\n                }\n\n                testPassed = testPassed && ValidateParameters(test, \"read\", expectedParameters, actualParameters);\n\n                if (useTypedTable)\n                {\n                    // Refresh operation only exists for typed tables\n                    dict[\"operation\"] = \"read\";\n                    expectedParameters[\"operation\"] = \"read\";\n                    typedItem.Id = 1;\n                    typedItem.parameters = \"\";\n                    await typed.RefreshAsync(typedItem, dict);\n                    actualParameters = JObject.Parse(typedItem.parameters);\n                    testPassed = testPassed && ValidateParameters(test, \"refresh\", expectedParameters, actualParameters);\n                }\n\n                // Delete operation doesn't populate the object with the response, so we'll use a filter to capture that\n                var handler = new HandlerToCaptureHttpTraffic();\n                var filteredClient = new MobileServiceClient(client.ApplicationUri, client.ApplicationKey, handler);\n                typed = filteredClient.GetTable<ParamsTestTableItem>();\n                untyped = filteredClient.GetTable(ZumoTestGlobals.ParamsTestTableName);\n\n                dict[\"operation\"] = \"delete\";\n                expectedParameters[\"operation\"] = \"delete\";\n                if (useTypedTable)\n                {\n                    await typed.DeleteAsync(typedItem, dict);\n                }\n                else\n                {\n                    await untyped.DeleteAsync(untypedItem, dict);\n                }\n\n                JObject response = JObject.Parse(handler.ResponseBody);\n                actualParameters = JObject.Parse(response[\"parameters\"].Value<string>());\n\n                testPassed = testPassed && ValidateParameters(test, \"delete\", expectedParameters, actualParameters);\n\n                return testPassed;\n            }, ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES);\n        }\n\n        private static bool ValidateParameters(ZumoTest test, string operation, JObject expected, JObject actual)\n        {\n            test.AddLog(\"Called {0}, now validating parameters\", operation);\n            List<string> errors = new List<string>();\n            if (!Util.CompareJson(expected, actual, errors))\n            {\n                foreach (var error in errors)\n                {\n                    test.AddLog(error);\n                }\n\n                test.AddLog(\"Parameters passing for the {0} operation failed\", operation);\n                test.AddLog(\"Expected: {0}\", expected);\n                test.AddLog(\"Actual: {0}\", actual);\n                return false;\n            }\n            else\n            {\n                test.AddLog(\"Parameters passing for the {0} operation succeeded\", operation);\n                return true;\n            }\n        }\n\n        private static ZumoTest CreateUserAgentValidationTest()\n        {\n            return new ZumoTest(\"Validation User-Agent header\", async delegate(ZumoTest test)\n            {\n                var handler = new HandlerToCaptureHttpTraffic();\n                MobileServiceClient client = new MobileServiceClient(\n                    ZumoTestGlobals.Instance.Client.ApplicationUri,\n                    ZumoTestGlobals.Instance.Client.ApplicationKey,\n                    handler);\n                var table = client.GetTable<RoundTripTableItem>();\n                var item = new RoundTripTableItem { String1 = \"hello\" };\n                await table.InsertAsync(item);\n                Action<string> dumpAndValidateHeaders = delegate(string operation)\n                {\n                    test.AddLog(\"Headers for {0}:\", operation);\n                    test.AddLog(\"  Request:\");\n                    foreach (var header in handler.RequestHeaders.Keys)\n                    {\n                        test.AddLog(\"    {0}: {1}\", header, handler.RequestHeaders[header]);\n                    }\n\n                    test.AddLog(\"  Response:\");\n                    foreach (var header in handler.ResponseHeaders.Keys)\n                    {\n                        test.AddLog(\"    {0}: {1}\", header, handler.ResponseHeaders[header]);\n                    }\n\n                    string userAgent;\n                    if (!handler.RequestHeaders.TryGetValue(\"User-Agent\", out userAgent))\n                    {\n                        test.AddLog(\"No user-agent header in the request\");\n                        throw new InvalidOperationException(\"This will fail the test\");\n                    }\n                    else\n                    {\n                        Regex expected = new Regex(@\"^ZUMO\\/\\d.\\d\");\n                        if (expected.IsMatch(userAgent))\n                        {\n                            test.AddLog(\"User-Agent validated correclty\");\n                        }\n                        else\n                        {\n                            test.AddLog(\"User-Agent didn't validate properly.\");\n                            throw new InvalidOperationException(\"This will fail the test\");\n                        }\n                    }\n                };\n\n                dumpAndValidateHeaders(\"Insert\");\n\n                item.Double1 = 123;\n                await table.UpdateAsync(item);\n                dumpAndValidateHeaders(\"Update\");\n\n                var item2 = await table.LookupAsync(item.Id);\n                dumpAndValidateHeaders(\"Read\");\n\n                await table.DeleteAsync(item);\n                dumpAndValidateHeaders(\"Delete\");\n\n                return true;\n            }, ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES);\n        }\n\n        private static ZumoTest CreateFilterTestWithMultipleRequests(bool typed)\n        {\n            string testName = string.Format(CultureInfo.InvariantCulture, \"Filter which maps one requests to many - {0} client\", typed ? \"typed\" : \"untyped\");\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                int numberOfRequests = new Random().Next(2, 5);\n                var handler = new HandlerWithMultipleRequests(test, numberOfRequests);\n                test.AddLog(\"Created a filter which will replay the request {0} times\", numberOfRequests);\n                var filteredClient = new MobileServiceClient(client.ApplicationUri, client.ApplicationKey, handler);\n\n                var typedTable = filteredClient.GetTable<RoundTripTableItem>();\n                var untypedTable = filteredClient.GetTable(ZumoTestGlobals.RoundTripTableName);\n                var uniqueId = Guid.NewGuid().ToString(\"N\");\n                if (typed)\n                {\n                    var item = new RoundTripTableItem { String1 = uniqueId };\n                    await typedTable.InsertAsync(item);\n                }\n                else\n                {\n                    var item = new JObject(new JProperty(\"string1\", uniqueId));\n                    await untypedTable.InsertAsync(item);\n                }\n\n                if (handler.TestFailed)\n                {\n                    test.AddLog(\"Filter reported a test failure. Aborting.\");\n                    return false;\n                }\n\n                test.AddLog(\"Inserted the data; now retrieving it to see how many items we have inserted.\");\n                handler.NumberOfRequests = 1; // no need to send it multiple times anymore\n\n                var items = await untypedTable.ReadAsync(\"$select=string1,id&$filter=string1 eq '\" + uniqueId + \"'\");\n                var array = (JArray)items;\n                bool passed;\n                if (array.Count == numberOfRequests)\n                {\n                    test.AddLog(\"Filter inserted correct number of items.\");\n                    passed = true;\n                }\n                else\n                {\n                    test.AddLog(\"Error, filtered client should have inserted {0} items, but there are {1}\", numberOfRequests, array.Count);\n                    passed = false;\n                }\n\n                // Cleanup\n                foreach (var item in array)\n                {\n                    await untypedTable.DeleteAsync(item as JObject);\n                }\n\n                test.AddLog(\"Cleanup: removed added items.\");\n                return passed;\n            }, ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES);\n        }\n\n        class HandlerWhichThrows : DelegatingHandler\n        {\n            protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        class HandlerToBypassService : DelegatingHandler\n        {\n            HttpStatusCode statusCode;\n            string contentType;\n            string content;\n\n            public HandlerToBypassService(int statusCode, string contentType, string content)\n            {\n                this.statusCode = (HttpStatusCode)statusCode;\n                this.contentType = contentType;\n                this.content = content;\n            }\n\n            protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n            {\n                TaskCompletionSource<HttpResponseMessage> tcs = new TaskCompletionSource<HttpResponseMessage>();\n                HttpResponseMessage result = new HttpResponseMessage(this.statusCode);\n                result.Content = new StringContent(this.content, Encoding.UTF8, this.contentType);\n                tcs.SetResult(result);\n                return tcs.Task;\n            }\n        }\n\n        class HandlerToCaptureHttpTraffic : DelegatingHandler\n        {\n            public Dictionary<string, string> RequestHeaders { get; private set; }\n            public Dictionary<string, string> ResponseHeaders { get; private set; }\n            public string ResponseBody { get; set; }\n\n            public HandlerToCaptureHttpTraffic()\n            {\n                this.RequestHeaders = new Dictionary<string, string>();\n                this.ResponseHeaders = new Dictionary<string, string>();\n            }\n\n            protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n            {\n                this.RequestHeaders.Clear();\n                foreach (var header in request.Headers)\n                {\n                    this.RequestHeaders.Add(header.Key, string.Join(\", \", header.Value));\n                    if (header.Key.Equals(\"user-agent\", StringComparison.OrdinalIgnoreCase))\n                    {\n                        string userAgent = this.RequestHeaders[header.Key];\n                        userAgent.TrimEnd(')');\n                        int equalsIndex = userAgent.LastIndexOf('=');\n                        if (equalsIndex >= 0)\n                        {\n                            var clientVersion = userAgent.Substring(equalsIndex + 1);\n                            ZumoTestGlobals.Instance.GlobalTestParams[ZumoTestGlobals.ClientVersionKeyName] = clientVersion;\n                        }\n                    }\n                }\n\n                var response = await base.SendAsync(request, cancellationToken);\n                this.ResponseHeaders.Clear();\n                foreach (var header in response.Headers)\n                {\n                    this.ResponseHeaders.Add(header.Key, string.Join(\", \", header.Value));\n                    if (header.Key.Equals(\"x-zumo-version\", StringComparison.OrdinalIgnoreCase))\n                    {\n                        ZumoTestGlobals.Instance.GlobalTestParams[ZumoTestGlobals.RuntimeVersionKeyName] = this.ResponseHeaders[header.Key];\n                    }\n                }\n\n                this.ResponseBody = await response.Content.ReadAsStringAsync();\n                return response;\n            }\n        }\n\n        class HandlerWithMultipleRequests : DelegatingHandler\n        {\n            private ZumoTest test;\n\n            public bool TestFailed { get; private set; }\n            public int NumberOfRequests { get; set; }\n\n            public HandlerWithMultipleRequests(ZumoTest test, int numberOfRequests)\n            {\n                this.test = test;\n                this.NumberOfRequests = numberOfRequests;\n                this.TestFailed = false;\n\n                if (numberOfRequests < 1)\n                {\n                    throw new ArgumentOutOfRangeException(\"numberOfRequests\", \"Number of requests must be at least 1.\");\n                }\n            }\n\n            private static async Task<HttpRequestMessage> CloneRequest(HttpRequestMessage request)\n            {\n                HttpRequestMessage result = new HttpRequestMessage(request.Method, request.RequestUri);\n                if (request.Content != null)\n                {\n                    string content = await request.Content.ReadAsStringAsync();\n                    string mediaType = request.Content.Headers.ContentType.MediaType;\n                    result.Content = new StringContent(content, Encoding.UTF8, mediaType);\n                }\n\n                foreach (var header in request.Headers)\n                {\n                    if (!header.Key.Equals(\"Content-Type\", StringComparison.OrdinalIgnoreCase))\n                    {\n                        result.Headers.Add(header.Key, header.Value);\n                    }\n                }\n\n                return result;\n            }\n\n            protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n            {\n                HttpResponseMessage response = null;\n                try\n                {\n                    for (int i = 0; i < this.NumberOfRequests; i++)\n                    {\n                        HttpRequestMessage clonedRequest = await CloneRequest(request);\n                        response = await base.SendAsync(clonedRequest, cancellationToken);\n                        if (i < this.NumberOfRequests - 1)\n                        {\n                            response.Dispose();\n                            response = null;\n                        }\n                    }\n                }\n                catch (Exception ex)\n                {\n                    test.AddLog(\"Exception while calling continuation: {0}\", ex);\n                    this.TestFailed = true;\n                    throw;\n                }\n\n                return response;\n            }\n        }\n    }\n\n    [DataTable(ZumoTestGlobals.ParamsTestTableName)]\n    public class ParamsTestTableItem\n    {\n        public int Id { get; set; }\n        public string parameters { get; set; }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/ZumoOfflineTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Microsoft.WindowsAzure.MobileServices.SQLiteStore;\nusing Microsoft.WindowsAzure.MobileServices.Sync;\nusing Newtonsoft.Json.Linq;\nusing Windows.Storage;\nusing ZumoE2ETestApp.Framework;\nusing ZumoE2ETestApp.Tests.Types;\n\nnamespace ZumoE2ETestApp.Tests\n{\n    internal static class ZumoOfflineTests\n    {\n        public const string OfflineReadyTableName = \"offlineReady\";\n        public const string OfflineReadyNoVersionAuthenticatedTableName = \"offlineReadyNoVersionAuthenticated\";\n\n        private const string StoreFileName = \"store.bin\";\n\n        internal static ZumoTestGroup CreateTests()\n        {\n            ZumoTestGroup result = new ZumoTestGroup(\"Offline tests\");\n\n            result.AddTest(CreateClearStoreTest());\n\n            result.AddTest(CreateBasicTest());\n            result.AddTest(CreateSyncConflictTest(true));\n            result.AddTest(CreateSyncConflictTest(false));\n\n            result.AddTest(CreateAbortPushDuringSyncTest(whereToAbort: SyncAbortLocation.Start));\n            result.AddTest(CreateAbortPushDuringSyncTest(whereToAbort: SyncAbortLocation.Middle));\n            result.AddTest(CreateAbortPushDuringSyncTest(whereToAbort: SyncAbortLocation.End));\n\n            result.AddTest(ZumoLoginTests.CreateLogoutTest());\n            result.AddTest(CreateSyncTestForAuthenticatedTable(false));\n            result.AddTest(ZumoLoginTests.CreateLoginTest(MobileServiceAuthenticationProvider.Facebook));\n            var noOptimisticConcurrencyTest = CreateNoOptimisticConcurrencyTest();\n            noOptimisticConcurrencyTest.CanRunUnattended = false;\n            result.AddTest(noOptimisticConcurrencyTest);\n            result.AddTest(CreateSyncTestForAuthenticatedTable(true));\n            result.AddTest(ZumoLoginTests.CreateLogoutTest());\n\n            return result;\n        }\n\n        private static MobileServiceClient CreateClient(params HttpMessageHandler[] handlers)\n        {\n            var globalClient = ZumoTestGlobals.Instance.Client;\n            var offlineReadyClient = new MobileServiceClient(\n                globalClient.ApplicationUri,\n                globalClient.ApplicationKey,\n                handlers);\n\n            if (globalClient.CurrentUser != null)\n            {\n                offlineReadyClient.CurrentUser = new MobileServiceUser(globalClient.CurrentUser.UserId);\n                offlineReadyClient.CurrentUser.MobileServiceAuthenticationToken = globalClient.CurrentUser.MobileServiceAuthenticationToken;\n            }\n            else\n            {\n                offlineReadyClient.Logout();\n            }\n\n            return offlineReadyClient;\n        }\n\n        private static ZumoTest CreateSyncTestForAuthenticatedTable(bool userIsLoggedIn)\n        {\n            bool isLoggedIn = userIsLoggedIn;\n            var testName = \"Sync test for authenticated table, with user \" + (isLoggedIn ? \"logged in\" : \"not logged in\");\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                DateTime now = DateTime.UtcNow;\n                int seed = now.Year * 10000 + now.Month * 100 + now.Day;\n                test.AddLog(\"Using random seed: {0}\", seed);\n                Random rndGen = new Random(seed);\n\n                var offlineReadyClient = CreateClient();\n\n                var localStore = new MobileServiceSQLiteStore(StoreFileName);\n                test.AddLog(\"Defined the table on the local store\");\n                localStore.DefineTable<OfflineReadyItemNoVersion>();\n\n                await offlineReadyClient.SyncContext.InitializeAsync(localStore);\n                test.AddLog(\"Initialized the store and sync context\");\n\n                var localTable = offlineReadyClient.GetSyncTable<OfflineReadyItemNoVersion>();\n                var remoteTable = offlineReadyClient.GetTable<OfflineReadyItemNoVersion>();\n\n                var item = new OfflineReadyItemNoVersion(rndGen);\n                await localTable.InsertAsync(item);\n                test.AddLog(\"Inserted the item to the local store:\", item);\n\n                try\n                {\n                    await offlineReadyClient.SyncContext.PushAsync();\n                    test.AddLog(\"Pushed the changes to the server\");\n                    if (isLoggedIn)\n                    {\n                        test.AddLog(\"As expected, push succeeded\");\n                    }\n                    else\n                    {\n                        test.AddLog(\"Error, table should only work with authenticated access, but user is not logged in\");\n                        return false;\n                    }\n                }\n                catch (MobileServicePushFailedException ex)\n                {\n                    if (isLoggedIn)\n                    {\n                        test.AddLog(\"Error, user is logged in but push operation failed: {0}\", ex);\n                        return false;\n                    }\n\n                    test.AddLog(\"Got expected exception: {0}: {1}\", ex.GetType().FullName, ex.Message);\n                    Exception inner = ex.InnerException;\n                    while (inner != null)\n                    {\n                        test.AddLog(\"  {0}: {1}\", inner.GetType().FullName, inner.Message);\n                        inner = inner.InnerException;\n                    }\n                }\n\n                if (!isLoggedIn)\n                {\n                    test.AddLog(\"Push should have failed, so now will try to log in to complete the push operation\");\n                    await offlineReadyClient.LoginAsync(MobileServiceAuthenticationProvider.Facebook);\n                    test.AddLog(\"Logged in as {0}\", offlineReadyClient.CurrentUser.UserId);\n                    await offlineReadyClient.SyncContext.PushAsync();\n                    test.AddLog(\"Push succeeded\");\n                }\n\n                await localTable.PurgeAsync();\n                test.AddLog(\"Purged the local table\");\n                await localTable.PullAsync(null, localTable.Where(i => i.Id == item.Id));\n                test.AddLog(\"Pulled the data into the local table\");\n                List<OfflineReadyItemNoVersion> serverItems = await localTable.ToListAsync();\n                test.AddLog(\"Retrieved items from the local table\");\n\n                test.AddLog(\"Removing item from the remote table\");\n                await remoteTable.DeleteAsync(item);\n\n                if (!isLoggedIn)\n                {\n                    offlineReadyClient.Logout();\n                    test.AddLog(\"Logged out again\");\n                }\n\n                var firstServerItem = serverItems.FirstOrDefault();\n                bool testResult = true;\n                if (item.Equals(firstServerItem))\n                {\n                    test.AddLog(\"Data round-tripped successfully\");\n                }\n                else\n                {\n                    test.AddLog(\"Error, data did not round-trip successfully. Expected: {0}, actual: {1}\", item, firstServerItem);\n                    testResult = false;\n                }\n\n                test.AddLog(\"Cleaning up\");\n                await localTable.PurgeAsync();\n                test.AddLog(\"Done\");\n                return testResult;\n            })\n            {\n                CanRunUnattended = false\n            };\n        }\n\n        enum SyncAbortLocation { Start, Middle, End };\n\n        class AbortingSyncHandler : IMobileServiceSyncHandler\n        {\n            ZumoTest test;\n\n            public AbortingSyncHandler(ZumoTest test, Func<string, bool> shouldAbortForId)\n            {\n                this.test = test;\n                this.AbortCondition = shouldAbortForId;\n            }\n\n            public Func<string, bool> AbortCondition { get; set; }\n\n            public Task<JObject> ExecuteTableOperationAsync(IMobileServiceTableOperation operation)\n            {\n                var itemId = (string)operation.Item[MobileServiceSystemColumns.Id];\n                if (this.AbortCondition(itemId))\n                {\n                    test.AddLog(\"Found id to abort ({0}), aborting the push operation\");\n                    operation.AbortPush();\n                }\n                else\n                {\n                    test.AddLog(\"Pushing operation {0} for item {1}\", operation.Kind, itemId);\n                }\n\n                return operation.ExecuteAsync();\n            }\n\n            public Task OnPushCompleteAsync(MobileServicePushCompletionResult result)\n            {\n                return Task.FromResult(0);\n            }\n        }\n\n        private static ZumoTest CreateAbortPushDuringSyncTest(SyncAbortLocation whereToAbort)\n        {\n            SyncAbortLocation abortLocation = whereToAbort;\n            var testName = \"Aborting push during sync - aborting at \" + whereToAbort.ToString().ToLowerInvariant() + \" of queue\";\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                DateTime now = DateTime.UtcNow;\n                int seed = now.Year * 10000 + now.Month * 100 + now.Day;\n                test.AddLog(\"Using random seed: {0}\", seed);\n                Random rndGen = new Random(seed);\n\n                var offlineReadyClient = CreateClient();\n\n                var items = Enumerable.Range(0, 10).Select(_ => new OfflineReadyItem(rndGen)).ToArray();\n                foreach (var item in items)\n                {\n                    item.Id = Guid.NewGuid().ToString(\"D\");\n                }\n\n                int abortIndex = abortLocation == SyncAbortLocation.Start ? 0 :\n                    (abortLocation == SyncAbortLocation.End ? items.Length - 1 : rndGen.Next(1, items.Length - 1));\n                var idToAbort = items[abortIndex].Id;\n                test.AddLog(\"Will send {0} items, aborting when id = {1}\", items.Length, idToAbort);\n\n                var localStore = new MobileServiceSQLiteStore(StoreFileName);\n                test.AddLog(\"Defined the table on the local store\");\n                localStore.DefineTable<OfflineReadyItem>();\n\n                var syncHandler = new AbortingSyncHandler(test, id => id == idToAbort);\n                await offlineReadyClient.SyncContext.InitializeAsync(localStore, syncHandler);\n                test.AddLog(\"Initialized the store and sync context\");\n\n                var localTable = offlineReadyClient.GetSyncTable<OfflineReadyItem>();\n                var remoteTable = offlineReadyClient.GetTable<OfflineReadyItem>();\n\n                foreach (var item in items)\n                {\n                    await localTable.InsertAsync(item);\n                }\n\n                test.AddLog(\"Inserted {0} items in the local table. Now pushing those\");\n\n                try\n                {\n                    await offlineReadyClient.SyncContext.PushAsync();\n                    test.AddLog(\"Error, push call should have failed\");\n                    return false;\n                }\n                catch (MobileServicePushFailedException ex)\n                {\n                    test.AddLog(\"Caught (expected) exception: {0}\", ex);\n                }\n\n                var expectedOperationQueueSize = items.Length - abortIndex;\n                test.AddLog(\"Current operation queue size: {0}\", offlineReadyClient.SyncContext.PendingOperations);\n                if (expectedOperationQueueSize != offlineReadyClient.SyncContext.PendingOperations)\n                {\n                    test.AddLog(\"Error, expected {0} items in the queue\", expectedOperationQueueSize);\n                    return false;\n                }\n\n                foreach (var allItemsPushed in new bool[] { false, true })\n                {\n                    HashSet<OfflineReadyItem> itemsInServer, itemsNotInServer;\n                    if (allItemsPushed)\n                    {\n                        itemsInServer = new HashSet<OfflineReadyItem>(items.ToArray());\n                        itemsNotInServer = new HashSet<OfflineReadyItem>(Enumerable.Empty<OfflineReadyItem>());\n                    }\n                    else\n                    {\n                        itemsInServer = new HashSet<OfflineReadyItem>(items.Where((item, index) => index < abortIndex));\n                        itemsNotInServer = new HashSet<OfflineReadyItem>(items.Where((item, index) => index >= abortIndex));\n                    }\n\n                    foreach (var item in items)\n                    {\n                        var itemFromServer = (await remoteTable.Where(i => i.Id == item.Id).Take(1).ToEnumerableAsync()).FirstOrDefault();\n                        test.AddLog(\"Item with id = {0} from server: {1}\", item.Id,\n                            itemFromServer == null ? \"<<null>>\" : itemFromServer.ToString());\n                        if (itemsInServer.Contains(item) && itemFromServer == null)\n                        {\n                            test.AddLog(\"Error, the item {0} should have made to the server\", item.Id);\n                            return false;\n                        }\n                        else if (itemsNotInServer.Contains(item) && itemFromServer != null)\n                        {\n                            test.AddLog(\"Error, the item {0} should not have made to the server\", item.Id);\n                            return false;\n                        }\n                    }\n\n                    if (!allItemsPushed)\n                    {\n                        test.AddLog(\"Changing the handler so that it doesn't abort anymore.\");\n                        syncHandler.AbortCondition = _ => false;\n                        test.AddLog(\"Pushing again\");\n                        await offlineReadyClient.SyncContext.PushAsync();\n                        test.AddLog(\"Finished pushing all elements\");\n                    }\n                }\n\n                test.AddLog(\"Changing the handler so that it doesn't abort anymore.\");\n                syncHandler.AbortCondition = _ => false;\n\n                test.AddLog(\"Cleaning up\");\n                foreach (var item in items)\n                {\n                    await localTable.DeleteAsync(item);\n                }\n\n                await offlineReadyClient.SyncContext.PushAsync();\n                test.AddLog(\"Done\");\n\n                return true;\n            });\n        }\n\n        private static ZumoTest CreateClearStoreTest()\n        {\n            return new ZumoTest(\"Clear store\", async delegate(ZumoTest test)\n            {\n                var files = await ApplicationData.Current.LocalFolder.GetFilesAsync();\n                foreach (var file in files)\n                {\n                    if (file.Name == StoreFileName)\n                    {\n                        test.AddLog(\"Deleting store file\");\n                        await file.DeleteAsync();\n                        break;\n                    }\n                }\n\n                return true;\n            });\n        }\n\n        class CountingHandler : DelegatingHandler\n        {\n            public int RequestCount { get; private set; }\n\n            protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n            {\n                this.RequestCount++;\n                return base.SendAsync(request, cancellationToken);\n            }\n        }\n\n        private static ZumoTest CreateBasicTest()\n        {\n            return new ZumoTest(\"Basic offline scenario\", async delegate(ZumoTest test)\n            {\n                DateTime now = DateTime.UtcNow;\n                int seed = now.Year * 10000 + now.Month * 100 + now.Day;\n                test.AddLog(\"Using random seed: {0}\", seed);\n                Random rndGen = new Random(seed);\n\n                CountingHandler handler = new CountingHandler();\n                var requestsSentToServer = 0;\n                var offlineReadyClient = CreateClient(handler);\n\n                var localStore = new MobileServiceSQLiteStore(StoreFileName);\n                test.AddLog(\"Defined the table on the local store\");\n                localStore.DefineTable<OfflineReadyItem>();\n\n                await offlineReadyClient.SyncContext.InitializeAsync(localStore);\n                test.AddLog(\"Initialized the store and sync context\");\n\n                var localTable = offlineReadyClient.GetSyncTable<OfflineReadyItem>();\n                var remoteTable = offlineReadyClient.GetTable<OfflineReadyItem>();\n\n                var item = new OfflineReadyItem(rndGen);\n                await localTable.InsertAsync(item);\n                test.AddLog(\"Inserted the item to the local store:\", item);\n\n                test.AddLog(\"Validating that the item is not in the server table\");\n                try\n                {\n                    requestsSentToServer++;\n                    await remoteTable.LookupAsync(item.Id);\n                    test.AddLog(\"Error, item is present in the server\");\n                    return false;\n                }\n                catch (MobileServiceInvalidOperationException ex)\n                {\n                    test.AddLog(\"Ok, item is not in the server: {0}\", ex.Message);\n                }\n\n                Func<int, bool> validateRequestCount = expectedCount =>\n                {\n                    test.AddLog(\"So far {0} requests sent to the server\", handler.RequestCount);\n                    if (handler.RequestCount != expectedCount)\n                    {\n                        test.AddLog(\"Error, expected {0} requests to have been sent to the server\", expectedCount);\n                        return false;\n                    }\n                    else\n                    {\n                        return true;\n                    }\n                };\n\n                if (!validateRequestCount(requestsSentToServer)) return false;\n\n                test.AddLog(\"Pushing changes to the server\");\n                await offlineReadyClient.SyncContext.PushAsync();\n                requestsSentToServer++;\n\n                if (!validateRequestCount(requestsSentToServer)) return false;\n\n                test.AddLog(\"Push done; now verifying that item is in the server\");\n\n                var serverItem = await remoteTable.LookupAsync(item.Id);\n                requestsSentToServer++;\n                test.AddLog(\"Retrieved item from server: {0}\", serverItem);\n                if (serverItem.Equals(item))\n                {\n                    test.AddLog(\"Items are the same\");\n                }\n                else\n                {\n                    test.AddLog(\"Items are different. Local: {0}; remote: {1}\", item, serverItem);\n                    return false;\n                }\n\n                test.AddLog(\"Now updating the item locally\");\n                item.Flag = !item.Flag;\n                item.Age++;\n                item.Date = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond, DateTimeKind.Utc);\n                await localTable.UpdateAsync(item);\n                test.AddLog(\"Item has been updated\");\n\n                var newItem = new OfflineReadyItem(rndGen);\n                test.AddLog(\"Adding a new item to the local table: {0}\", newItem);\n                await localTable.InsertAsync(newItem);\n\n                if (!validateRequestCount(requestsSentToServer)) return false;\n\n                test.AddLog(\"Pushing the new changes to the server\");\n                await offlineReadyClient.SyncContext.PushAsync();\n                requestsSentToServer += 2;\n\n                if (!validateRequestCount(requestsSentToServer)) return false;\n\n                test.AddLog(\"Push done. Verifying changes on the server\");\n                serverItem = await remoteTable.LookupAsync(item.Id);\n                requestsSentToServer++;\n                if (serverItem.Equals(item))\n                {\n                    test.AddLog(\"Updated items are the same\");\n                }\n                else\n                {\n                    test.AddLog(\"Items are different. Local: {0}; remote: {1}\", item, serverItem);\n                    return false;\n                }\n\n                serverItem = await remoteTable.LookupAsync(newItem.Id);\n                requestsSentToServer++;\n                if (serverItem.Equals(newItem))\n                {\n                    test.AddLog(\"New inserted item is the same\");\n                }\n                else\n                {\n                    test.AddLog(\"Items are different. Local: {0}; remote: {1}\", item, serverItem);\n                    return false;\n                }\n\n                test.AddLog(\"Cleaning up\");\n                await localTable.DeleteAsync(item);\n                await localTable.DeleteAsync(newItem);\n                test.AddLog(\"Local table cleaned up. Now sync'ing once more\");\n                await offlineReadyClient.SyncContext.PushAsync();\n                requestsSentToServer += 2;\n                if (!validateRequestCount(requestsSentToServer)) return false;\n                test.AddLog(\"Done\");\n                return true;\n            }, ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES);\n        }\n\n        private static ZumoTest CreateNoOptimisticConcurrencyTest()\n        {\n            // If a table does not have a __version column, then offline will still\n            // work, but there will be no conflicts\n            return new ZumoTest(\"Offline without version column\", async delegate(ZumoTest test)\n            {\n                if (ZumoTestGlobals.Instance.IsNetRuntime)\n                {\n                    return true;\n                }\n\n                DateTime now = DateTime.UtcNow;\n                int seed = now.Year * 10000 + now.Month * 100 + now.Day;\n                test.AddLog(\"Using random seed: {0}\", seed);\n                Random rndGen = new Random(seed);\n\n                var offlineReadyClient = CreateClient();\n\n                var localStore = new MobileServiceSQLiteStore(StoreFileName);\n                test.AddLog(\"Defined the table on the local store\");\n                localStore.DefineTable<OfflineReadyItemNoVersion>();\n\n                await offlineReadyClient.SyncContext.InitializeAsync(localStore);\n                test.AddLog(\"Initialized the store and sync context\");\n\n                var localTable = offlineReadyClient.GetSyncTable<OfflineReadyItemNoVersion>();\n                var remoteTable = offlineReadyClient.GetTable<OfflineReadyItemNoVersion>();\n\n                var item = new OfflineReadyItemNoVersion(rndGen);\n                await localTable.InsertAsync(item);\n                test.AddLog(\"Inserted the item to the local store:\", item);\n\n                await offlineReadyClient.SyncContext.PushAsync();\n                test.AddLog(\"Pushed the changes to the server\");\n\n                var serverItem = await remoteTable.LookupAsync(item.Id);\n                serverItem.Name = \"changed name\";\n                serverItem.Age = 0;\n                await remoteTable.UpdateAsync(serverItem);\n                test.AddLog(\"Server item updated (changes will be overwritten later\");\n\n                item.Age = item.Age + 1;\n                item.Name = item.Name + \" - modified\";\n                await localTable.UpdateAsync(item);\n                test.AddLog(\"Updated item locally, will now push changes to the server: {0}\", item);\n                await offlineReadyClient.SyncContext.PushAsync();\n\n                serverItem = await remoteTable.LookupAsync(item.Id);\n                test.AddLog(\"Retrieved the item from the server: {0}\", serverItem);\n\n                if (serverItem.Equals(item))\n                {\n                    test.AddLog(\"Items are the same\");\n                }\n                else\n                {\n                    test.AddLog(\"Items are different. Local: {0}; remote: {1}\", item, serverItem);\n                    return false;\n                }\n\n                test.AddLog(\"Cleaning up\");\n                await localTable.DeleteAsync(item);\n                test.AddLog(\"Local table cleaned up. Now sync'ing once more\");\n                await offlineReadyClient.SyncContext.PushAsync();\n                test.AddLog(\"Done\");\n                return true;\n            });\n        }\n\n        class ConflictResolvingSyncHandler<T> : IMobileServiceSyncHandler\n        {\n            public delegate T ConflictResolution(T clientItem, T serverItem);\n            IMobileServiceClient client;\n            ConflictResolution conflictResolution;\n            ZumoTest test;\n\n            public ConflictResolvingSyncHandler(ZumoTest test, IMobileServiceClient client, ConflictResolution resolutionPolicy)\n            {\n                this.test = test;\n                this.client = client;\n                this.conflictResolution = resolutionPolicy;\n            }\n\n            public async Task<JObject> ExecuteTableOperationAsync(IMobileServiceTableOperation operation)\n            {\n                MobileServicePreconditionFailedException ex = null;\n                JObject result = null;\n                do\n                {\n                    ex = null;\n                    try\n                    {\n                        test.AddLog(\"Attempting to execute the operation\");\n                        result = await operation.ExecuteAsync();\n                    }\n                    catch (MobileServicePreconditionFailedException e)\n                    {\n                        ex = e;\n                    }\n\n                    if (ex != null)\n                    {\n                        test.AddLog(\"A MobileServicePreconditionFailedException was thrown, ex.Value = {0}\", ex.Value);\n                        var serverItem = ex.Value;\n                        if (serverItem == null)\n                        {\n                            test.AddLog(\"Item not returned in the exception, trying to retrieve it from the server\");\n                            serverItem = (JObject)(await client.GetTable(operation.Table.TableName).LookupAsync((string)operation.Item[\"id\"]));\n                        }\n\n                        var typedClientItem = operation.Item.ToObject<T>();\n                        var typedServerItem = serverItem.ToObject<T>();\n                        var typedMergedItem = conflictResolution(typedClientItem, typedServerItem);\n                        var mergedItem = JObject.FromObject(typedMergedItem);\n                        mergedItem[MobileServiceSystemColumns.Version] = serverItem[MobileServiceSystemColumns.Version];\n                        test.AddLog(\"Merged the items, will try to resubmit the operation\");\n                        operation.Item = mergedItem;\n                    }\n                } while (ex != null);\n\n                return result;\n            }\n\n            public Task OnPushCompleteAsync(MobileServicePushCompletionResult result)\n            {\n                return Task.FromResult(0);\n            }\n        }\n\n        private static ZumoTest CreateSyncConflictTest(bool autoResolve)\n        {\n            var testName = \"Offline - dealing with conflicts - \" +\n                (autoResolve ? \"client resolves conflicts\" : \"push fails after conflicts\");\n            bool resolveConflictsOnClient = autoResolve;\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                DateTime now = DateTime.UtcNow;\n                int seed = now.Year * 10000 + now.Month * 100 + now.Day;\n                test.AddLog(\"Using random seed: {0}\", seed);\n                Random rndGen = new Random(seed);\n\n                var offlineReadyClient = CreateClient();\n\n                var localStore = new MobileServiceSQLiteStore(StoreFileName);\n                test.AddLog(\"Defined the table on the local store\");\n                localStore.DefineTable<OfflineReadyItem>();\n\n                ConflictResolvingSyncHandler<OfflineReadyItem>.ConflictResolution conflictHandlingPolicy;\n                conflictHandlingPolicy = (client, server) =>\n                        new OfflineReadyItem\n                        {\n                            Id = client.Id,\n                            Age = Math.Max(client.Age, server.Age),\n                            Date = client.Date > server.Date ? client.Date : server.Date,\n                            Flag = client.Flag || server.Flag,\n                            FloatingNumber = Math.Max(client.FloatingNumber, server.FloatingNumber),\n                            Name = client.Name\n                        };\n                if (resolveConflictsOnClient)\n                {\n                    var handler = new ConflictResolvingSyncHandler<OfflineReadyItem>(test, offlineReadyClient, conflictHandlingPolicy);\n                    await offlineReadyClient.SyncContext.InitializeAsync(localStore, handler);\n                }\n                else\n                {\n                    await offlineReadyClient.SyncContext.InitializeAsync(localStore);\n                }\n\n                test.AddLog(\"Initialized the store and sync context\");\n\n                var localTable = offlineReadyClient.GetSyncTable<OfflineReadyItem>();\n                var remoteTable = offlineReadyClient.GetTable<OfflineReadyItem>();\n\n                await localTable.PurgeAsync();\n                test.AddLog(\"Removed all items from the local table\");\n\n                var item = new OfflineReadyItem(rndGen);\n                await remoteTable.InsertAsync(item);\n                test.AddLog(\"Inserted the item to the remote store:\", item);\n\n                var pullQuery = \"$filter=id eq '\" + item.Id + \"'\";\n                await localTable.PullAsync(null, pullQuery);\n\n                test.AddLog(\"Changing the item on the server\");\n                item.Age++;\n                await remoteTable.UpdateAsync(item);\n                test.AddLog(\"Updated the item: {0}\", item);\n\n                var localItem = await localTable.LookupAsync(item.Id);\n                test.AddLog(\"Retrieved the item from the local table, now updating it\");\n                localItem.Date = localItem.Date.AddDays(1);\n                await localTable.UpdateAsync(localItem);\n                test.AddLog(\"Updated the item on the local table\");\n\n                test.AddLog(\"Now trying to pull changes from the server (will trigger a push)\");\n                bool testResult = true;\n                try\n                {\n                    await localTable.PullAsync(null, pullQuery);\n                    if (!autoResolve)\n                    {\n                        test.AddLog(\"Error, pull (push) should have caused a conflict, but none happened.\");\n                        testResult = false;\n                    }\n                    else\n                    {\n                        var expectedMergedItem = conflictHandlingPolicy(localItem, item);\n                        var localMergedItem = await localTable.LookupAsync(item.Id);\n                        if (localMergedItem.Equals(expectedMergedItem))\n                        {\n                            test.AddLog(\"Item was merged correctly.\");\n                        }\n                        else\n                        {\n                            test.AddLog(\"Error, item not merged correctly. Expected: {0}, Actual: {1}\", expectedMergedItem, localMergedItem);\n                            testResult = false;\n                        }\n                    }\n                }\n                catch (MobileServicePushFailedException ex)\n                {\n                    test.AddLog(\"Push exception: {0}\", ex);\n                    if (autoResolve)\n                    {\n                        test.AddLog(\"Error, push should have succeeded.\");\n                        testResult = false;\n                    }\n                    else\n                    {\n                        test.AddLog(\"Expected exception was thrown.\");\n                    }\n                }\n\n                test.AddLog(\"Cleaning up\");\n                await localTable.DeleteAsync(item);\n                test.AddLog(\"Local table cleaned up. Now sync'ing once more\");\n                await offlineReadyClient.SyncContext.PushAsync();\n                test.AddLog(\"Done\");\n\n                return testResult;\n            }, ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES);\n        }\n    }\n}"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/ZumoPushTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Xml.Linq;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing Windows.Networking.PushNotifications;\nusing ZumoE2ETestApp.Framework;\nusing System.Net.Http;\n\nnamespace ZumoE2ETestApp.Tests\n{\n    internal static class ZumoPushTests\n    {\n        private static string pushChannelUri;\n        private static PushNotificationChannel pushChannel;\n        private static Queue<PushNotificationReceivedEventArgs> pushesReceived = new Queue<PushNotificationReceivedEventArgs>();\n        const string imageUrl = \"http://zumotestserver.azurewebsites.net/content/zumo2.png\";\n        const string wideImageUrl = \"http://zumotestserver.azurewebsites.net/content/zumo1.png\";\n\n        public static ZumoTestGroup CreateTests()\n        {\n            ZumoTestGroup result = new ZumoTestGroup(\"Push tests\");\n            result.AddTest(CreateRegisterChannelTest());\n            result.AddTest(CreateToastPushTest(\"sendToastText01\", \"hello world\"));\n            result.AddTest(CreateToastPushTest(\"sendToastImageAndText03\", \"ts-iat3-1\", \"ts-iat3-2\", null, imageUrl, \"zumo\"));\n            result.AddTest(CreateToastPushTest(\"sendToastImageAndText04\", \"ts-iat4-1\", \"ts-iat4-2\", \"ts-iat4-3\", imageUrl, \"zumo\"));\n            result.AddTest(CreateBadgePushTest(4));\n            result.AddTest(CreateBadgePushTest(\"playing\"));\n            result.AddTest(CreateRawPushTest(\"hello world\"));\n            result.AddTest(CreateRawPushTest(\"foobaráéíóú\"));\n            result.AddTest(CreateTilePushTest(\"TileWideImageAndText02\", new[] { \"tl-wiat2-1\", \"tl-wiat2-2\" }, new[] { wideImageUrl }, new[] { \"zumowide\" }));\n            result.AddTest(CreateTilePushTest(\"TileWideImageCollection\",\n                new string[0],\n                new[] { wideImageUrl, imageUrl, imageUrl, imageUrl, imageUrl },\n                new[] { \"zumowide\", \"zumo\", \"zumo\", \"zumo\", \"zumo\" }));\n            result.AddTest(CreateTilePushTest(\"TileWideText02\",\n                new[] { \"large caption\", \"tl-wt2-1\", \"tl-wt2-2\", \"tl-wt2-3\", \"tl-wt2-4\", \"tl-wt2-5\", \"tl-wt2-6\", \"tl-wt2-7\", \"tl-wt2-8\" },\n                new string[0], new string[0]));\n            result.AddTest(CreateTilePushTest(\"TileSquarePeekImageAndText01\",\n                new[] { \"tl-spiat1-1\", \"tl-spiat1-2\", \"tl-spiat1-3\", \"tl-spiat1-4\" },\n                new[] { imageUrl }, new[] { \"zumo img\" }));\n            result.AddTest(CreateTilePushTest(\"TileSquareBlock\",\n                new[] { \"24\", \"aliquam\" },\n                new string[0], new string[0]));\n            result.AddTest(CreateUnregisterChannelTest());\n            result.AddTest(CreateRegisterTemplateChannelTest(\"Toast\"));\n            result.AddTest(CreateTemplateToastPushTest(\"sendToastText01\", \"World News in English!\"));\n            result.AddTest(CreateUnregisterTemplateChannelTest(ZumoPushTestGlobals.NHToastTemplateName));\n            result.AddTest(CreateRegisterTemplateChannelTest(\"Tile\"));\n            result.AddTest(CreateTemplateTilePushTest(\"TileWideImageAndText02\", new[] { \"tl-wiat2-1\", \"在普通话的世界新闻！\" }, new[] { wideImageUrl }, new[] { \"zumowide\" }));\n            result.AddTest(CreateUnregisterTemplateChannelTest(ZumoPushTestGlobals.NHTileTemplateName));\n            result.AddTest(CreateRegisterTemplateChannelTest(\"Badge\"));\n            result.AddTest(CreateTemplateBadgePushTest(\"10\"));\n            result.AddTest(CreateUnregisterTemplateChannelTest(ZumoPushTestGlobals.NHBadgeTemplateName));\n            result.AddTest(CreateRegisterTemplateChannelTest(\"Raw\"));\n            result.AddTest(CreateTemplateRawPushTest(\"Nouvelles du monde en français!\"));\n            result.AddTest(CreateUnregisterTemplateChannelTest(ZumoPushTestGlobals.NHRawTemplateName));\n\n            return result;\n        }\n\n        private static ZumoTest CreateRawPushTest(string rawData)\n        {\n            XElement expected = new XElement(\"raw\", new XText(rawData));\n            JToken payload = rawData;\n            return CreatePushTest(\"sendRaw\", \"raw\", payload, expected);\n        }\n\n        private static ZumoTest CreateTemplateRawPushTest(string rawData)\n        {\n            XElement expected = new XElement(\"raw\", new XText(rawData));\n            JToken payload = rawData;\n            return CreatePushTest(\"sendRaw\", \"template\", payload, expected, true);\n        }\n\n        private static ZumoTest CreateTilePushTest(string template, string[] texts, string[] imageUrls, string[] imageAlts)\n        {\n            var payload = BuildTilPayload(template, texts, imageUrls, imageAlts);\n            XElement expected = BuildXmlTilePayload(template, texts, imageUrls, imageAlts);\n            return CreatePushTest(\"send\" + template, \"tile\", payload, expected);\n        }\n\n        private static ZumoTest CreateTemplateTilePushTest(string template, string[] texts, string[] imageUrls, string[] imageAlts)\n        {\n            var payload = BuildTilPayload(template, texts, imageUrls, imageAlts);\n            XElement expected = BuildXmlTilePayload(template, texts, imageUrls, imageAlts);\n            return CreatePushTest(\"send\" + template, \"template\", payload, expected, true);\n        }\n\n        private static JObject BuildTilPayload(string template, string[] texts, string[] imageUrls, string[] imageAlts)\n        {\n            if (imageAlts.Length != imageAlts.Length)\n            {\n                throw new ArgumentException(\"Size of 'imageUrls' and 'imageAlts' arrays must be the same\");\n            }\n\n            if (texts.Any(t => t == null) || imageAlts.Any(i => i == null) || imageUrls.Any(i => i == null))\n            {\n                throw new ArgumentException(\"No nulls allowed in the arrays\");\n            }\n            var payload = new JObject();\n            for (int i = 0; i < imageAlts.Length; i++)\n            {\n                payload.Add(\"image\" + (i + 1) + \"src\", imageUrls[i]);\n                payload.Add(\"image\" + (i + 1) + \"alt\", imageAlts[i]);\n            }\n\n            for (int i = 0; i < texts.Length; i++)\n            {\n                payload.Add(\"text\" + (i + 1), texts[i]);\n            }\n\n            return payload;\n        }\n\n        private static XElement BuildXmlTilePayload(string template, string[] texts, string[] imageUrls, string[] imageAlts)\n        {\n            XElement binding = new XElement(\"binding\", new XAttribute(\"template\", template));\n\n            for (int i = 0; i < imageAlts.Length; i++)\n            {\n                binding.Add(new XElement(\"image\",\n                new XAttribute(\"id\", (i + 1)),\n                new XAttribute(\"src\", imageUrls[i]),\n                new XAttribute(\"alt\", imageAlts[i])));\n            }\n\n            for (int i = 0; i < texts.Length; i++)\n            {\n                binding.Add(new XElement(\"text\", new XAttribute(\"id\", (i + 1)), new XText(texts[i])));\n            }\n\n            XElement xmlPayload = new XElement(\"tile\",\n                new XElement(\"visual\",\n                    binding));\n            return xmlPayload;\n        }\n\n        private static ZumoTest CreateToastPushTest(string wnsMethod, string text1, string text2 = null, string text3 = null, string imageUrl = null, string imageAlt = null)\n        {\n            var payload = new JObject();\n            payload.Add(\"text1\", text1);\n            AddIfNotNull(payload, \"text2\", text2);\n            AddIfNotNull(payload, \"text3\", text3);\n            AddIfNotNull(payload, \"image1src\", imageUrl);\n            AddIfNotNull(payload, \"image1alt\", imageAlt);\n\n            XElement expectedResult = BuildXmlToastPayload(wnsMethod, text1, text2, text3, imageUrl, imageAlt);\n\n            return CreatePushTest(wnsMethod, \"toast\", payload, expectedResult);\n        }\n\n        private static ZumoTest CreateTemplateToastPushTest(string wnsMethod, string text1)\n        {\n            var payload = new JObject();\n            payload.Add(\"text1\", text1);\n            XElement expectedResult = BuildXmlToastPayload(wnsMethod, text1);\n\n            return CreatePushTest(wnsMethod, \"template\", payload, expectedResult, true);\n        }\n\n        private static XElement BuildXmlToastPayload(string wnsMethod, string text1, string text2 = null, string text3 = null, string imageUrl = null, string imageAlt = null)\n        {\n            XElement binding = new XElement(\"binding\", new XAttribute(\"template\", wnsMethod.Substring(\"send\".Length)));\n            if (imageUrl != null)\n            {\n                XElement image = new XElement(\"image\",\n                    new XAttribute(\"id\", \"1\"),\n                    new XAttribute(\"src\", imageUrl),\n                    new XAttribute(\"alt\", imageAlt));\n                binding.Add(image);\n            }\n\n            binding.Add(new XElement(\"text\", new XAttribute(\"id\", 1), new XText(text1)));\n            if (text2 != null)\n            {\n                binding.Add(new XElement(\"text\", new XAttribute(\"id\", 2), new XText(text2)));\n            }\n\n            if (text3 != null)\n            {\n                binding.Add(new XElement(\"text\", new XAttribute(\"id\", 3), new XText(text3)));\n            }\n\n            XElement xmlPayload = new XElement(\"toast\",\n                new XElement(\"visual\",\n                    binding));\n            return xmlPayload;\n        }\n\n        private static ZumoTest CreateBadgePushTest(object badgeValue, int? version = null)\n        {\n            var badge = BuildBadgePayload(badgeValue, version);\n            XElement expected = BuildBadgeXmlPayload(badgeValue, version);\n\n            return CreatePushTest(\"sendBadge\", \"badge\", badge, expected);\n        }\n\n        private static ZumoTest CreateTemplateBadgePushTest(object badgeValue, int? version = null)\n        {\n            var badge = BuildBadgePayload(badgeValue, version);\n            XElement expected = BuildBadgeXmlPayload(badgeValue, version);\n\n            return CreatePushTest(\"sendBadge\", \"template\", badge, expected, true);\n        }\n\n        private static JToken BuildBadgePayload(object badgeValue, int? version = null)\n        {\n            JToken badge;\n            if (badgeValue is int)\n            {\n                badge = new JValue((int)badgeValue);\n            }\n            else if (badgeValue is string)\n            {\n                badge = new JValue((string)badgeValue);\n            }\n            else\n            {\n                throw new ArgumentException(\"Invalid badge value: \" + badgeValue);\n            }\n\n            if (version.HasValue)\n            {\n                var payload = new JObject();\n                payload.Add(\"value\", badge);\n                payload.Add(\"version\", version.Value);\n                badge = payload;\n            }\n\n            return badge;\n        }\n\n        private static XElement BuildBadgeXmlPayload(object badgeValue, int? version = null)\n        {\n            XElement xmlPayload = new XElement(\"badge\",\n                new XAttribute(\"value\", badgeValue),\n                new XAttribute(\"version\", version.HasValue ? version.GetValueOrDefault() : 1));\n            return xmlPayload;\n        }\n\n        private static void AddIfNotNull(JObject obj, string name, string value)\n        {\n            if (value != null)\n            {\n                obj.Add(name, (string)value);\n            }\n        }\n        private static ZumoTest CreatePushTest(string wnsMethod, string nhNotificationType, JToken payload, XElement expectedResult, bool templatePush = false)\n        {\n            string testName = \"Test for \" + wnsMethod + \": \";\n            string payloadString = payload.ToString(Formatting.None);\n            testName += payloadString.Length < 15 ? payloadString : (payloadString.Substring(0, 15) + \"...\");\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                test.AddLog(\"Test for method {0}, with payload {1}\", wnsMethod, payload);\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable(ZumoTestGlobals.PushTestTableName);\n\n                // Workaround for multiple registration bug\n                ZumoPushTests.pushesReceived.Clear();\n\n                PushWatcher watcher = new PushWatcher();\n                var item = new JObject();\n                item.Add(\"method\", wnsMethod);\n                item.Add(\"channelUri\", pushChannelUri);\n                item.Add(\"payload\", payload);\n                item.Add(\"xmlPayload\", expectedResult.ToString());\n                item.Add(\"templateNotification\", ZumoPushTestGlobals.TemplateNotification);\n                if (ZumoTestGlobals.Instance.IsNHPushEnabled)\n                {\n                    item.Add(\"usingNH\", true);\n                    item.Add(\"nhNotificationType\", nhNotificationType);\n                }\n                var pushResult = await table.InsertAsync(item);\n                test.AddLog(\"Push result: {0}\", pushResult);\n                var notificationResult = await watcher.WaitForPush(TimeSpan.FromSeconds(10));\n                if (notificationResult == null)\n                {\n                    test.AddLog(\"Error, push not received on the timeout allowed\");\n                    return false;\n                }\n                else\n                {\n                    test.AddLog(\"Push notification received:\");\n                    XElement receivedPushInfo = null;\n                    switch (notificationResult.NotificationType)\n                    {\n                        case PushNotificationType.Raw:\n                            if (nhNotificationType == \"template\")\n                            {\n                                receivedPushInfo = XElement.Parse(notificationResult.RawNotification.Content);\n                            }\n                            else\n                            {\n                                receivedPushInfo = new XElement(\"raw\", new XText(notificationResult.RawNotification.Content));\n                            }\n                            break;\n                        case PushNotificationType.Toast:\n                            receivedPushInfo = XElement.Parse(notificationResult.ToastNotification.Content.GetXml());\n                            break;\n                        case PushNotificationType.Badge:\n                            receivedPushInfo = XElement.Parse(notificationResult.BadgeNotification.Content.GetXml());\n                            break;\n                        case PushNotificationType.Tile:\n                            receivedPushInfo = XElement.Parse(notificationResult.TileNotification.Content.GetXml());\n                            break;\n                    }\n\n                    test.AddLog(\"  {0}: {1}\", notificationResult.NotificationType, receivedPushInfo);\n\n                    bool passed;\n                    if (expectedResult.ToString(SaveOptions.DisableFormatting) == receivedPushInfo.ToString(SaveOptions.DisableFormatting))\n                    {\n                        test.AddLog(\"Received notification is the expected one.\");\n                        passed = true;\n                    }\n                    else\n                    {\n                        test.AddLog(\"Received notification is not the expected one. Expected:\");\n                        test.AddLog(expectedResult.ToString());\n                        test.AddLog(\"Actual:\");\n                        test.AddLog(receivedPushInfo.ToString());\n                        passed = false;\n                    }\n\n                    await Task.Delay(5000); // leave some time between pushes\n                    return passed;\n                }\n            }, templatePush ? ZumoTestGlobals.RuntimeFeatureNames.NH_PUSH_ENABLED : ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES);\n        }\n\n        private static ZumoTest CreateRegisterChannelTest()\n        {\n            return new ZumoTest(\"Register push channel\", async delegate(ZumoTest test)\n            {\n                ZumoPushTests.pushChannel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();\n                test.AddLog(\"Register the channel; uri = {0}\", pushChannel.Uri);\n                if (ZumoTestGlobals.Instance.IsNHPushEnabled)\n                {\n                    var client = ZumoTestGlobals.Instance.Client;\n                    var push = client.GetPush();\n                    await push.RegisterNativeAsync(ZumoPushTests.pushChannel.Uri, \"tag1 tag2\".Split());\n                    pushChannelUri = null;\n                    test.AddLog(\"RegisterNative with NH succeeded.\");\n                }\n                else\n                {\n                    pushChannelUri = pushChannel.Uri;\n                    test.AddLog(\"Register succeeded.\");\n                }\n\n                pushChannel.PushNotificationReceived += pushChannel_PushNotificationReceived;\n                return true;\n            });\n        }\n\n        private static ZumoTest CreateRegisterTemplateChannelTest(string nhNotificationType)\n        {\n            return new ZumoTest(\"Register template \" + nhNotificationType + \" push channel\", async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var push = client.GetPush();\n                WnsTemplateRegistration reg = null;\n                switch (nhNotificationType.ToLower())\n                {\n                    case \"toast\":\n                        var toastTemplate = BuildXmlToastPayload(\"sendToastText01\", \"$(News_English)\");\n                        reg = new WnsTemplateRegistration(ZumoPushTests.pushChannel.Uri, toastTemplate.ToString(), ZumoPushTestGlobals.NHToastTemplateName, \"World English\".Split());\n                        break;\n                    case \"raw\":\n                        var rawTemplate = \"<raw>$(News_French)</raw>\";\n                        IDictionary<string, string> wnsHeaders = new Dictionary<string, string>();\n                        wnsHeaders.Add(\"X-WNS-Type\", \"wns/raw\");\n                        reg = new WnsTemplateRegistration(ZumoPushTests.pushChannel.Uri, rawTemplate, ZumoPushTestGlobals.NHRawTemplateName, \"World Mandarin\".Split(), wnsHeaders);\n                        break;\n                    case \"badge\":\n                        var badgeTemplate = BuildBadgeXmlPayload(\"$(News_Badge)\");\n                        reg = new WnsTemplateRegistration(ZumoPushTests.pushChannel.Uri, badgeTemplate.ToString(), ZumoPushTestGlobals.NHBadgeTemplateName, \"World Badge\".Split());\n                        break;\n                    case \"tile\":\n                        var tileTemplate = BuildXmlTilePayload(\"TileWideImageAndText02\", new[] { \"tl-wiat2-1\", \"$(News_Mandarin)\" }, new[] { wideImageUrl }, new[] { \"zumowide\" });\n                        reg = new WnsTemplateRegistration(ZumoPushTests.pushChannel.Uri, tileTemplate.ToString(), ZumoPushTestGlobals.NHTileTemplateName, \"World Mandarin\".Split());\n                        break;\n                    default:\n                        throw new Exception(\"Template type\" + nhNotificationType + \"is not supported.\");\n                }\n\n                await push.RegisterAsync(reg);\n                pushChannelUri = null;\n                test.AddLog(\"Registered \" + nhNotificationType + \" template with NH succeeded.\");\n                pushChannel.PushNotificationReceived += pushChannel_PushNotificationReceived;\n                return true;\n            }, ZumoTestGlobals.RuntimeFeatureNames.NH_PUSH_ENABLED);\n        }\n\n        private static ZumoTest CreateUnregisterChannelTest()\n        {\n            return new ZumoTest(\"Unregister push channel\", async delegate(ZumoTest test)\n            {\n                if (ZumoTestGlobals.Instance.IsNHPushEnabled)\n                {\n                    var client = ZumoTestGlobals.Instance.Client;\n                    var push = client.GetPush();\n                    await push.UnregisterNativeAsync();\n                    test.AddLog(\"Unregister NH push channel succeeded.\");\n                }\n                else\n                {\n                    pushChannel.Close();\n                    test.AddLog(\"Unregister push channel succeeded.\");\n                }\n                TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n                tcs.SetResult(true);\n                return await tcs.Task;\n            });\n        }\n\n        private static ZumoTest CreateUnregisterTemplateChannelTest(string templateName)\n        {\n            return new ZumoTest(\"Unregister \" + templateName + \" push channel\", async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var push = client.GetPush();\n                await push.UnregisterTemplateAsync(templateName);\n                test.AddLog(\"Unregister \" + templateName + \" push channel succeeded.\");\n                TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n                tcs.SetResult(true);\n                return await tcs.Task;\n            }, ZumoTestGlobals.RuntimeFeatureNames.NH_PUSH_ENABLED);\n        }\n\n        static void pushChannel_PushNotificationReceived(PushNotificationChannel sender, PushNotificationReceivedEventArgs args)\n        {\n            pushesReceived.Enqueue(args);\n        }\n\n        class PushWatcher\n        {\n            public async Task<PushNotificationReceivedEventArgs> WaitForPush(TimeSpan maximumWait)\n            {\n                PushNotificationReceivedEventArgs result = null;\n                var tcs = new TaskCompletionSource<PushNotificationReceivedEventArgs>();\n                DateTime start = DateTime.UtcNow;\n                while (DateTime.UtcNow.Subtract(start) < maximumWait)\n                {\n                    if (pushesReceived.Count > 0)\n                    {\n                        result = pushesReceived.Dequeue();\n                        break;\n                    }\n\n                    await Task.Delay(500);\n                }\n\n                return result;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/ZumoQueryTestData.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Linq;\nusing ZumoE2ETestApp.Tests.Types;\n\nnamespace ZumoE2ETestApp.Tests\n{\n    public static class ZumoQueryTestData\n    {\n        public static StringIdMovie[] AllStringIdMovies()\n        {\n            return AllMovies.Select((m, i) => new StringIdMovie(string.Format(\"Movie {0:000}\", i), m)).ToArray();\n        }\n\n        public static Movie[] AllMovies = new Movie[]\n        {\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 142,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1994, 10, 14, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Shawshank Redemption\",\n                Year = 1994\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 175,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1972, 03, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Godfather\",\n                Year = 1972\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 200,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1974, 12, 20, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Godfather: Part II\",\n                Year = 1974\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 168,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1994, 10, 14, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Pulp Fiction\",\n                Year = 1994\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 161,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1967, 12, 29, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Good, the Bad and the Ugly\",\n                Year = 1966\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 96,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1957, 4, 10, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"12 Angry Men\",\n                Year = 1957\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 152,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2008, 07, 18, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Dark Knight\",\n                Year = 2008\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 195,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1993, 12, 15, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Schindler's List\",\n                Year = 1993\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 201,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2003, 12, 17, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Lord of the Rings: The Return of the King\",\n                Year = 2003\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 139,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1999, 10, 15, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Fight Club\",\n                Year = 1999\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 127,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1980, 05, 21, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Star Wars: Episode V - The Empire Strikes Back\",\n                Year = 1980\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 133,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1975, 11, 21, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"One Flew Over the Cuckoo's Nest\",\n                Year = 1975\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 178,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2001, 12, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Lord of the Rings: The Fellowship of the Ring\",\n                Year = 2001\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 148,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2010, 07, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Inception\",\n                Year = 2010\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 146,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1990, 09, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Goodfellas\",\n                Year = 1990\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 121,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1977, 05, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Star Wars\",\n                Year = 1977\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 141,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1956, 11, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Seven Samurai\",\n                Year = 1954\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 136,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1999, 03, 31, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Matrix\",\n                Year = 1999\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 142,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(1994, 07, 06, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Forrest Gump\",\n                Year = 1994\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 130,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2002, 01, 01, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"City of God\",\n                Year = 2002\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 179,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2002, 12, 18, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Lord of the Rings: The Two Towers\",\n                Year = 2002\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 175,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(1968, 12, 21, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Once Upon a Time in the West\",\n                Year = 1968\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 127,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1995, 09, 22, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Se7en\",\n                Year = 1995\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 118,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1991, 02, 14, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Silence of the Lambs\",\n                Year = 1991\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 102,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1943, 01, 23, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Casablanca\",\n                Year = 1942\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 106,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1995, 08, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Usual Suspects\",\n                Year = 1995\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 115,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1981, 06, 12, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Raiders of the Lost Ark\",\n                Year = 1981\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 112,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1955, 01, 13, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Rear Window\",\n                Year = 1954\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 109,\n                MPAARating = \"TV-14\",\n                ReleaseDate = new DateTime(1960, 9, 8, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Psycho\",\n                Year = 1960\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 130,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1947, 01, 06, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"It's a Wonderful Life\",\n                Year = 1946\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 110,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1994, 11, 18, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Léon: The Professional\",\n                Year = 1994\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 110,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1950, 08, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Sunset Blvd.\",\n                Year = 1950\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 113,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2000, 10, 11, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Memento\",\n                Year = 2000\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 165,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2012, 07, 20, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Dark Knight Rises\",\n                Year = 2012\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 119,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1999, 02, 12, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"American History X\",\n                Year = 1998\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 153,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1979, 08, 15, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Apocalypse Now\",\n                Year = 1979\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 152,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1991, 07, 03, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Terminator 2: Judgment Day\",\n                Year = 1991\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 95,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1964, 01, 29, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb\",\n                Year = 1964\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 169,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1998, 07, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Saving Private Ryan\",\n                Year = 1998\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 117,\n                MPAARating = \"TV-14\",\n                ReleaseDate = new DateTime(1979, 05, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Alien\",\n                Year = 1979\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 136,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1959, 09, 26, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"North by Northwest\",\n                Year = 1959\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 87,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1931, 03, 07, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"City Lights\",\n                Year = 1931\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 125,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(2001, 07, 20, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Spirited Away\",\n                Year = 2001\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 119,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1941, 9, 5, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Citizen Kane\",\n                Year = 1941\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 87,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1936, 02, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Modern Times\",\n                Year = 1936\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 142,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1980, 05, 23, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Shining\",\n                Year = 1980\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 129,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1958, 07, 21, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Vertigo\",\n                Year = 1958\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 116,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1985, 07, 03, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Back to the Future\",\n                Year = 1985\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 122,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1999, 10, 01, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"American Beauty\",\n                Year = 1999\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 117,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1931, 08, 30, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"M\",\n                Year = 1931\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 150,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2003, 03, 28, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Pianist\",\n                Year = 2002\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 151,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2006, 10, 06, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Departed\",\n                Year = 2006\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 113,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1976, 02, 08, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Taxi Driver\",\n                Year = 1976\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 103,\n                MPAARating = \"G\",\n                ReleaseDate = new DateTime(2010, 06, 18, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Toy Story 3\",\n                Year = 2010\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 88,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1957, 10, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Paths of Glory\",\n                Year = 1957\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 118,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(1999, 02, 12, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Life Is Beautiful\",\n                Year = 1997\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 107,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1944, 04, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Double Indemnity\",\n                Year = 1944\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 154,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1986, 07, 18, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Aliens\",\n                Year = 1986\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 98,\n                MPAARating = \"G\",\n                ReleaseDate = new DateTime(2008, 06, 27, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"WALL-E\",\n                Year = 2008\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 137,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2006, 03, 23, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Lives of Others\",\n                Year = 2006\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 136,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1972, 02, 02, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"A Clockwork Orange\",\n                Year = 1971\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 122,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2001, 04, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Amélie\",\n                Year = 2001\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 155,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2000, 05, 05, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Gladiator\",\n                Year = 2000\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 189,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1999, 12, 10, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Green Mile\",\n                Year = 1999\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 112,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2011, 11, 02, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Intouchables\",\n                Year = 2011\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 227,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1963, 01, 30, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Lawrence of Arabia\",\n                Year = 1962\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 129,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1963, 03, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"To Kill a Mockingbird\",\n                Year = 1962\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 130,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2006, 10, 20, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Prestige\",\n                Year = 2006\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 125,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1941, 3, 7, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Great Dictator\",\n                Year = 1940\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 99,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1992, 10, 23, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Reservoir Dogs\",\n                Year = 1992\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 149,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1982, 02, 10, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Das Boot\",\n                Year = 1981\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 102,\n                MPAARating = \"NC-17\",\n                ReleaseDate = new DateTime(2000, 10, 27, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Requiem for a Dream\",\n                Year = 2000\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 93,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1949, 08, 31, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Third Man\",\n                Year = 1949\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 126,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1948, 01, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Treasure of the Sierra Madre\",\n                Year = 1948\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 108,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2004, 03, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Eternal Sunshine of the Spotless Mind\",\n                Year = 2004\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 155,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1990, 02, 23, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Cinema Paradiso\",\n                Year = 1988\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 139,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1984, 05, 23, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Once Upon a Time in America\",\n                Year = 1984\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 130,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1974, 06, 20, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Chinatown\",\n                Year = 1974\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 138,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1997, 09, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"L.A. Confidential\",\n                Year = 1997\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 89,\n                MPAARating = \"G\",\n                ReleaseDate = new DateTime(1994, 06, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Lion King\",\n                Year = 1994\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 134,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1983, 05, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Star Wars: Episode VI - Return of the Jedi\",\n                Year = 1983\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 116,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1987, 06, 26, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Full Metal Jacket\",\n                Year = 1987\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 91,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1975, 05, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Monty Python and the Holy Grail\",\n                Year = 1975\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 177,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1995, 05, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Braveheart\",\n                Year = 1995\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 103,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1952, 04, 11, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Singin' in the Rain\",\n                Year = 1952\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 120,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2003, 11, 21, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Oldboy\",\n                Year = 2003\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 120,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1959, 03, 29, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Some Like It Hot\",\n                Year = 1959\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 160,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1984, 09, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Amadeus\",\n                Year = 1984\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 114,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1927, 03, 13, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Metropolis\",\n                Year = 1927\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 88,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1951, 12, 26, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Rashomon\",\n                Year = 1950\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 93,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1949, 12, 13, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Bicycle Thieves\",\n                Year = 1948\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 141,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1968, 4, 6, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"2001: A Space Odyssey\",\n                Year = 1968\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 131,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1992, 08, 07, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Unforgiven\",\n                Year = 1992\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 138,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1951, 1, 15, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"All About Eve\",\n                Year = 1950\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 125,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1960, 9, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Apartment\",\n                Year = 1960\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 127,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1989, 05, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Indiana Jones and the Last Crusade\",\n                Year = 1989\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 129,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1974, 01, 10, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Sting\",\n                Year = 1973\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 129,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1980, 12, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Raging Bull\",\n                Year = 1980\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 161,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1957, 12, 14, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Bridge on the River Kwai\",\n                Year = 1957\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 131,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1988, 07, 15, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Die Hard\",\n                Year = 1988\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 116,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1958, 2, 6, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Witness for the Prosecution\",\n                Year = 1957\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 140,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2005, 06, 15, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Batman Begins\",\n                Year = 2005\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 123,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2011, 03, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"A Separation\",\n                Year = 2011\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 89,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1988, 04, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Grave of the Fireflies\",\n                Year = 1988\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 118,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2007, 01, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Pan's Labyrinth\",\n                Year = 2006\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 156,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2004, 09, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Downfall\",\n                Year = 2004\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 129,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1939, 10, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Mr. Smith Goes to Washington\",\n                Year = 1939\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 75,\n                MPAARating = \"TV-MA\",\n                ReleaseDate = new DateTime(1961, 09, 13, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Yojimbo\",\n                Year = 1961\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 172,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1963, 7, 4, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Great Escape\",\n                Year = 1963\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 132,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1967, 5, 10, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"For a Few Dollars More\",\n                Year = 1965\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 102,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2001, 01, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Snatch.\",\n                Year = 2000\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 153,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2009, 08, 21, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Inglourious Basterds\",\n                Year = 2009\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 108,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1954, 06, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"On the Waterfront\",\n                Year = 1954\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 124,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1980, 10, 10, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Elephant Man\",\n                Year = 1980\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 96,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1958, 10, 13, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Seventh Seal\",\n                Year = 1957\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 81,\n                MPAARating = \"TV-G\",\n                ReleaseDate = new DateTime(1995, 11, 22, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Toy Story\",\n                Year = 1995\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 100,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1941, 10, 18, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Maltese Falcon\",\n                Year = 1941\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 170,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1995, 12, 15, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Heat\",\n                Year = 1995\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 75,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1927, 02, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The General\",\n                Year = 1926\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 116,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2009, 01, 09, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Gran Torino\",\n                Year = 2008\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 130,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1940, 04, 12, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Rebecca\",\n                Year = 1940\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 117,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1982, 06, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Blade Runner\",\n                Year = 1982\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 143,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2012, 05, 04, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Avengers\",\n                Year = 2012\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 91,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1959, 06, 22, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Wild Strawberries\",\n                Year = 1957\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 98,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1996, 04, 05, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Fargo\",\n                Year = 1996\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 68,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1921, 2, 6, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Kid\",\n                Year = 1921\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 170,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1983, 12, 09, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Scarface\",\n                Year = 1983\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 108,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(1958, 6, 8, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Touch of Evil\",\n                Year = 1958\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 117,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1998, 03, 06, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Big Lebowski\",\n                Year = 1998\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 162,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1985, 06, 01, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Ran\",\n                Year = 1985\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 182,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1979, 02, 23, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Deer Hunter\",\n                Year = 1978\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 126,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1967, 11, 1, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Cool Hand Luke\",\n                Year = 1967\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 147,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2005, 04, 01, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Sin City\",\n                Year = 2005\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 72,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1925, 6, 26, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Gold Rush\",\n                Year = 1925\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 101,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1951, 06, 30, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Strangers on a Train\",\n                Year = 1951\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 105,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1934, 02, 23, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"It Happened One Night\",\n                Year = 1934\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 122,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2007, 11, 21, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"No Country for Old Men\",\n                Year = 2007\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 130,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1975, 06, 20, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Jaws\",\n                Year = 1975\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 107,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1999, 03, 05, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Lock, Stock and Two Smoking Barrels\",\n                Year = 1998\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 107,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(1999, 08, 06, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Sixth Sense\",\n                Year = 1999\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 121,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2005, 02, 04, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Hotel Rwanda\",\n                Year = 2004\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 85,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1952, 07, 30, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"High Noon\",\n                Year = 1952\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 120,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1986, 12, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Platoon\",\n                Year = 1986\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 109,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1982, 06, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Thing\",\n                Year = 1982\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 110,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1969, 10, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Butch Cassidy and the Sundance Kid\",\n                Year = 1969\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 101,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1939, 08, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Wizard of Oz\",\n                Year = 1939\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 178,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1995, 11, 22, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Casino\",\n                Year = 1995\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 94,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1996, 07, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Trainspotting\",\n                Year = 1996\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 111,\n                MPAARating = \"TV-14\",\n                ReleaseDate = new DateTime(2003, 10, 10, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Kill Bill: Vol. 1\",\n                Year = 2003\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 140,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2011, 09, 09, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Warrior\",\n                Year = 2011\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 93,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1977, 04, 20, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Annie Hall\",\n                Year = 1977\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 101,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1946, 9, 6, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Notorious\",\n                Year = 1946\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 129,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2009, 08, 13, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Secret in Their Eyes\",\n                Year = 2009\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 238,\n                MPAARating = \"G\",\n                ReleaseDate = new DateTime(1940, 01, 17, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Gone with the Wind\",\n                Year = 1939\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 126,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1998, 01, 09, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Good Will Hunting\",\n                Year = 1997\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 118,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2010, 12, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The King's Speech\",\n                Year = 2010\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 129,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1940, 03, 15, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Grapes of Wrath\",\n                Year = 1940\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 148,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2007, 09, 21, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Into the Wild\",\n                Year = 2007\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 94,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1979, 08, 17, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Life of Brian\",\n                Year = 1979\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 100,\n                MPAARating = \"G\",\n                ReleaseDate = new DateTime(2003, 05, 30, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Finding Nemo\",\n                Year = 2003\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 132,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2006, 03, 17, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"V for Vendetta\",\n                Year = 2005\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 98,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(2010, 03, 26, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"How to Train Your Dragon\",\n                Year = 2010\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 86,\n                MPAARating = \"G\",\n                ReleaseDate = new DateTime(1988, 04, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"My Neighbor Totoro\",\n                Year = 1988\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 114,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1946, 08, 31, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Big Sleep\",\n                Year = 1946\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 105,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1954, 05, 29, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Dial M for Murder\",\n                Year = 1954\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 212,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1960, 03, 30, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Ben-Hur\",\n                Year = 1959\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 107,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1984, 10, 26, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Terminator\",\n                Year = 1984\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 121,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1976, 11, 27, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Network\",\n                Year = 1976\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 132,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2005, 01, 28, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Million Dollar Baby\",\n                Year = 2004\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 108,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2010, 12, 17, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Black Swan\",\n                Year = 2010\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 93,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1955, 11, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Night of the Hunter\",\n                Year = 1955\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 158,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2008, 01, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"There Will Be Blood\",\n                Year = 2007\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 89,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1986, 08, 08, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Stand by Me\",\n                Year = 1986\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 113,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2002, 01, 30, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Donnie Darko\",\n                Year = 2001\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 101,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1993, 02, 12, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Groundhog Day\",\n                Year = 1993\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 125,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1975, 09, 21, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Dog Day Afternoon\",\n                Year = 1975\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 129,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1996, 01, 05, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Twelve Monkeys\",\n                Year = 1995\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 154,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2000, 06, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Amores Perros\",\n                Year = 2000\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 115,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2007, 08, 03, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Bourne Ultimatum\",\n                Year = 2007\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 92,\n                MPAARating = null,\n                ReleaseDate = new DateTime(2009, 04, 09, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Mary and Max\",\n                Year = 2009\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 99,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1959, 11, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The 400 Blows\",\n                Year = 1959\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 83,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1967, 03, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Persona\",\n                Year = 1966\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 106,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1967, 12, 22, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Graduate\",\n                Year = 1967\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 191,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1983, 02, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Gandhi\",\n                Year = 1982\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 85,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1956, 6, 6, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Killing\",\n                Year = 1956\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 119,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(2005, 06, 17, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Howl's Moving Castle\",\n                Year = 2004\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 100,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2012, 01, 20, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Artist\",\n                Year = 2011\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 98,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1987, 09, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Princess Bride\",\n                Year = 1987\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 120,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2012, 10, 12, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Argo\",\n                Year = 2012\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 120,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2009, 01, 23, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Slumdog Millionaire\",\n                Year = 2008\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 131,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1966, 06, 22, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Who's Afraid of Virginia Woolf?\",\n                Year = 1966\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 108,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1956, 07, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"La Strada\",\n                Year = 1954\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 126,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1962, 10, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Manchurian Candidate\",\n                Year = 1962\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 134,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1961, 09, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Hustler\",\n                Year = 1961\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 135,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2002, 01, 04, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"A Beautiful Mind\",\n                Year = 2001\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 145,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1969, 06, 18, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Wild Bunch\",\n                Year = 1969\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 119,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1976, 12, 03, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Rocky\",\n                Year = 1976\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 160,\n                MPAARating = \"TV-PG\",\n                ReleaseDate = new DateTime(1959, 9, 1, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Anatomy of a Murder\",\n                Year = 1959\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 120,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1953, 8, 10, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Stalag 17\",\n                Year = 1953\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 122,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1974, 03, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Exorcist\",\n                Year = 1973\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 138,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1972, 12, 10, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Sleuth\",\n                Year = 1972\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 80,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1948, 8, 28, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Rope\",\n                Year = 1948\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 184,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1975, 12, 18, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Barry Lyndon\",\n                Year = 1975\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 123,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1962, 4, 22, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Man Who Shot Liberty Valance\",\n                Year = 1962\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 112,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2009, 08, 14, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"District 9\",\n                Year = 2009\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 163,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1980, 04, 17, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Stalker\",\n                Year = 1979\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 101,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2002, 12, 12, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Infernal Affairs\",\n                Year = 2002\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 118,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1953, 9, 2, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Roman Holiday\",\n                Year = 1953\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 103,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1998, 06, 05, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Truman Show\",\n                Year = 1998\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 111,\n                MPAARating = \"G\",\n                ReleaseDate = new DateTime(2007, 06, 29, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Ratatouille\",\n                Year = 2007\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 143,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2003, 07, 09, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Pirates of the Caribbean: The Curse of the Black Pearl\",\n                Year = 2003\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 106,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2008, 12, 12, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Ip Man\",\n                Year = 2008\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 112,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2007, 05, 23, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Diving Bell and the Butterfly\",\n                Year = 2007\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 130,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2011, 07, 15, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Harry Potter and the Deathly Hallows: Part 2\",\n                Year = 2011\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 99,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1967, 01, 18, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"A Fistful of Dollars\",\n                Year = 1964\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 125,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1951, 12, 1, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"A Streetcar Named Desire\",\n                Year = 1951\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 92,\n                MPAARating = \"G\",\n                ReleaseDate = new DateTime(2001, 11, 02, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Monsters, Inc.\",\n                Year = 2001\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 133,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1994, 02, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"In the Name of the Father\",\n                Year = 1993\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 127,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2009, 05, 08, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Star Trek\",\n                Year = 2009\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 84,\n                MPAARating = \"G\",\n                ReleaseDate = new DateTime(1991, 11, 22, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Beauty and the Beast\",\n                Year = 1991\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 136,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1968, 06, 12, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Rosemary's Baby\",\n                Year = 1968\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 104,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1950, 10, 13, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Harvey\",\n                Year = 1950\n            },\n            new Movie {\n                BestPictureWinner = false,\n                Duration = 117,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1984, 3, 11, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Nauticaä of the Valley of the Wind\",\n                Year = 1984\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 109,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2009, 01, 30, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Wrestler\",\n                Year = 2008\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 133,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1930, 08, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"All Quiet on the Western Front\",\n                Year = 1930\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 98,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1996, 02, 23, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"La Haine\",\n                Year = 1995\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 133,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1988, 12, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Rain Man\",\n                Year = 1988\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 66,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1925, 12, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Battleship Potemkin\",\n                Year = 1925\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 138,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2010, 02, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Shutter Island\",\n                Year = 2010\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 81,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1929, 6, 3, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Nosferatu\",\n                Year = 1922\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 103,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2003, 09, 19, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Spring, Summer, Fall, Winter... and Spring\",\n                Year = 2003\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 96,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1979, 04, 25, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Manhattan\",\n                Year = 1979\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 138,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2003, 10, 15, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Mystic River\",\n                Year = 2003\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 102,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1938, 2, 18, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Bringing Up Baby\",\n                Year = 1938\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 108,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1943, 1, 15, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Shadow of a Doubt\",\n                Year = 1943\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 125,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2004, 01, 09, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Big Fish\",\n                Year = 2003\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 124,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1986, 08, 02, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Castle in the Sky\",\n                Year = 1986\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 151,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1973, 12, 16, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Papillon\",\n                Year = 1973\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 76,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(1993, 10, 29, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Nightmare Before Christmas\",\n                Year = 1993\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 119,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(1987, 06, 03, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Untouchables\",\n                Year = 1987\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 127,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(1993, 06, 11, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Jurassic Park\",\n                Year = 1993\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 115,\n                MPAARating = \"R\",\n                ReleaseDate = new DateTime(2008, 10, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Let the Right One In\",\n                Year = 2008\n            },\n            new Movie\n            {\n                BestPictureWinner = true,\n                Duration = 109,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1967, 10, 14, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"In the Heat of the Night\",\n                Year = 1967\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 170,\n                MPAARating = \"PG-13\",\n                ReleaseDate = new DateTime(2009, 12, 24, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"3 Idiots\",\n                Year = 2009\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 118,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1944, 9, 23, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Arsenic and Old Lace\",\n                Year = 1944\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 119,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1956, 3, 13, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"The Searchers\",\n                Year = 1956\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 98,\n                MPAARating = \"PG\",\n                ReleaseDate = new DateTime(2000, 09, 29, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"In the Mood for Love\",\n                Year = 2000\n            },\n            new Movie\n            {\n                BestPictureWinner = false,\n                Duration = 141,\n                MPAARating = null,\n                ReleaseDate = new DateTime(1959, 4, 4, 0, 0, 0, DateTimeKind.Utc),\n                Title = \"Rio Bravo\",\n                Year = 1959\n            },\n        };\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/ZumoQueryTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json.Linq;\nusing ZumoE2ETestApp.Framework;\nusing ZumoE2ETestApp.Tests.Types;\nusing ZumoE2ETestApp.UIElements;\nusing Newtonsoft.Json;\n\nnamespace ZumoE2ETestApp.Tests\n{\n    internal static class ZumoQueryTests\n    {\n        private const int VeryLargeTopValue = 1001;\n\n        internal static ZumoTestGroup CreateTests()\n        {\n            ZumoTestGroup result = new ZumoTestGroup(\"Query tests\");\n            result.AddTest(CreatePopulateTableTest());\n            result.AddTest(CreatePopulateStringIdTableTest());\n\n            // Numeric fields\n            result.AddTest(CreateQueryTestIntId(\"GreaterThan and LessThan - Movies from the 90s\", m => m.Year > 1989 && m.Year < 2000));\n            result.AddTest(CreateQueryTestIntId(\"GreaterEqual and LessEqual - Movies from the 90s\", m => m.Year >= 1990 && m.Year <= 1999));\n            result.AddTest(CreateQueryTestIntId(\"Compound statement - OR of ANDs - Movies from the 30s and 50s\",\n                m => ((m.Year >= 1930) && (m.Year < 1940)) || ((m.Year >= 1950) && (m.Year < 1960))));\n            result.AddTest(CreateQueryTestIntId(\"Division, equal and different - Movies from the year 2000 with rating other than R\",\n                m => ((m.Year / 1000.0) == 2) && (m.MPAARating != \"R\")));\n            result.AddTest(CreateQueryTestIntId(\"Addition, subtraction, relational, AND - Movies from the 1980s which last less than 2 hours\",\n                m => ((m.Year - 1900) >= 80) && (m.Year + 10 < 2000) && (m.Duration < 120)));\n\n            result.AddTest(CreateQueryTestStringId(\"GreaterThan and LessThan - Movies from the 90s\", m => m.Year > 1989 && m.Year < 2000));\n            result.AddTest(CreateQueryTestStringId(\"GreaterEqual and LessEqual - Movies from the 90s\", m => m.Year >= 1990 && m.Year <= 1999));\n            result.AddTest(CreateQueryTestStringId(\"Compound statement - OR of ANDs - Movies from the 30s and 50s\",\n                m => ((m.Year >= 1930) && (m.Year < 1940)) || ((m.Year >= 1950) && (m.Year < 1960))));\n            result.AddTest(CreateQueryTestStringId(\"Division, equal and different - Movies from the year 2000 with rating other than R\",\n                m => ((m.Year / 1000.0) == 2) && (m.MPAARating != \"R\")));\n            result.AddTest(CreateQueryTestStringId(\"Addition, subtraction, relational, AND - Movies from the 1980s which last less than 2 hours\",\n                m => ((m.Year - 1900) >= 80) && (m.Year + 10 < 2000) && (m.Duration < 120)));\n\n            // String functions\n            result.AddTest(CreateQueryTestIntId(\"String: StartsWith - Movies which starts with 'The'\",\n                m => m.Title.StartsWith(\"The\"), 100));\n            result.AddTest(CreateQueryTestIntId(\"String: StartsWith, case insensitive - Movies which start with 'the'\",\n                m => m.Title.ToLower().StartsWith(\"the\"), 100));\n            result.AddTest(CreateQueryTestIntId(\"String: EndsWith, case insensitive - Movies which end with 'r'\",\n                m => m.Title.ToLower().EndsWith(\"r\")));\n            result.AddTest(CreateQueryTestIntId(\"String: Contains - Movies which contain the word 'one', case insensitive\",\n                m => m.Title.ToUpper().Contains(\"ONE\")));\n            result.AddTest(CreateQueryTestIntId(\"String: Length - Movies with small names\",\n                m => m.Title.Length < 10, 200));\n            result.AddTest(CreateQueryTestIntId(\"String: Substring (1 parameter), length - Movies which end with 'r'\",\n                m => m.Title.Substring(m.Title.Length - 1) == \"r\"));\n            result.AddTest(CreateQueryTestIntId(\"String: Substring (2 parameters), length - Movies which end with 'r'\",\n                m => m.Title.Substring(m.Title.Length - 1, 1) == \"r\"));\n            result.AddTest(CreateQueryTestIntId(\"String: Replace - Movies ending with either 'Part 2' or 'Part II'\",\n                m => m.Title.Replace(\"II\", \"2\").EndsWith(\"Part 2\")));\n            result.AddTest(CreateQueryTestIntId(\"String: Concat - Movies rated 'PG' or 'PG-13' from the 2000s\",\n                m => m.Year >= 2000 && string.Concat(m.MPAARating, \"-13\").StartsWith(\"PG-13\")));\n\n            result.AddTest(CreateQueryTestStringId(\"String: StartsWith - Movies which starts with 'The'\",\n                m => m.Title.StartsWith(\"The\"), 100));\n            result.AddTest(CreateQueryTestStringId(\"String: StartsWith, case insensitive - Movies which start with 'the'\",\n                m => m.Title.ToLower().StartsWith(\"the\"), 100));\n            result.AddTest(CreateQueryTestStringId(\"String: EndsWith, case insensitive - Movies which end with 'r'\",\n                m => m.Title.ToLower().EndsWith(\"r\")));\n            result.AddTest(CreateQueryTestStringId(\"String: Contains - Movies which contain the word 'one', case insensitive\",\n                m => m.Title.ToUpper().Contains(\"ONE\")));\n            result.AddTest(CreateQueryTestStringId(\"String: Length - Movies with small names\",\n                m => m.Title.Length < 10, 200));\n            result.AddTest(CreateQueryTestStringId(\"String: Substring (1 parameter), length - Movies which end with 'r'\",\n                m => m.Title.Substring(m.Title.Length - 1) == \"r\"));\n            result.AddTest(CreateQueryTestStringId(\"String: Substring (2 parameters), length - Movies which end with 'r'\",\n                m => m.Title.Substring(m.Title.Length - 1, 1) == \"r\"));\n\n                // The OData library in .NET does not support replace?\n            result.AddTest(CreateQueryTestStringId(\"String: Replace - Movies ending with either 'Part 2' or 'Part II'\",\n                m => m.Title.Replace(\"II\", \"2\").EndsWith(\"Part 2\")));\n\n            result.AddTest(CreateQueryTestStringId(\"String: Concat - Movies rated 'PG' or 'PG-13' from the 2000s\",\n                m => m.Year >= 2000 && string.Concat(m.MPAARating, \"-13\").StartsWith(\"PG-13\")));\n\n            // String fields\n            result.AddTest(CreateQueryTestIntId(\"String equals - Movies since 1980 with rating PG-13\",\n                m => m.Year >= 1980 && m.MPAARating == \"PG-13\", 100));\n            result.AddTest(CreateQueryTestIntId(\"String field, comparison to null - Movies since 1980 without a MPAA rating\",\n                m => m.Year >= 1980 && m.MPAARating == null));\n            result.AddTest(CreateQueryTestIntId(\"String field, comparison (not equal) to null - Movies before 1970 with a MPAA rating\",\n                m => m.Year < 1970 && m.MPAARating != null));\n\n            result.AddTest(CreateQueryTestStringId(\"String equals - Movies since 1980 with rating PG-13\",\n                m => m.Year >= 1980 && m.MPAARating == \"PG-13\", 100));\n            result.AddTest(CreateQueryTestStringId(\"String field, comparison to null - Movies since 1980 without a MPAA rating\",\n                m => m.Year >= 1980 && m.MPAARating == null));\n            result.AddTest(CreateQueryTestStringId(\"String field, comparison (not equal) to null - Movies before 1970 with a MPAA rating\",\n                m => m.Year < 1970 && m.MPAARating != null));\n\n            // Numeric functions\n            result.AddTest(CreateQueryTestIntId(\"Floor - Movies which last more than 3 hours\",\n                m => Math.Floor(m.Duration / 60.0) >= 3));\n            result.AddTest(CreateQueryTestIntId(\"Ceiling - Best picture winners which last at most 2 hours\",\n                m => m.BestPictureWinner == true && Math.Ceiling(m.Duration / 60.0) == 2));\n            result.AddTest(CreateQueryTestIntId(\"Round - Best picture winners which last more than 2.5 hours\",\n                m => m.BestPictureWinner == true && Math.Round(m.Duration / 60.0) > 2));\n\n            result.AddTest(CreateQueryTestStringId(\"Floor - Movies which last more than 3 hours\",\n                m => Math.Floor(m.Duration / 60.0) >= 3));\n            result.AddTest(CreateQueryTestStringId(\"Ceiling - Best picture winners which last at most 2 hours\",\n                m => m.BestPictureWinner == true && Math.Ceiling(m.Duration / 60.0) == 2));\n            result.AddTest(CreateQueryTestStringId(\"Round - Best picture winners which last more than 2.5 hours\",\n                m => m.BestPictureWinner == true && Math.Round(m.Duration / 60.0) > 2));\n\n            // Date fields\n            result.AddTest(CreateQueryTestIntId(\"Date: Greater than, less than - Movies with release date in the 70s\",\n                m => m.ReleaseDate > new DateTime(1969, 12, 31, 0, 0, 0, DateTimeKind.Utc) &&\n                    m.ReleaseDate < new DateTime(1971, 1, 1, 0, 0, 0, DateTimeKind.Utc)));\n            result.AddTest(CreateQueryTestIntId(\"Date: Greater than, less than - Movies with release date in the 80s\",\n                m => m.ReleaseDate >= new DateTime(1980, 1, 1, 0, 0, 0, DateTimeKind.Utc) &&\n                    m.ReleaseDate < new DateTime(1989, 12, 31, 23, 59, 59, DateTimeKind.Utc)));\n            result.AddTest(CreateQueryTestIntId(\"Date: Equal - Movies released on 1994-10-14 (Shawshank Redemption / Pulp Fiction)\",\n                m => m.ReleaseDate == new DateTime(1994, 10, 14, 0, 0, 0, DateTimeKind.Utc)));\n\n            result.AddTest(CreateQueryTestStringId(\"Date: Greater than, less than - Movies with release date in the 70s\",\n                m => m.ReleaseDate > new DateTime(1969, 12, 31, 0, 0, 0, DateTimeKind.Utc) &&\n                    m.ReleaseDate < new DateTime(1971, 1, 1, 0, 0, 0, DateTimeKind.Utc)));\n            result.AddTest(CreateQueryTestStringId(\"Date: Greater than, less than - Movies with release date in the 80s\",\n                m => m.ReleaseDate >= new DateTime(1980, 1, 1, 0, 0, 0, DateTimeKind.Utc) &&\n                    m.ReleaseDate < new DateTime(1989, 12, 31, 23, 59, 59, DateTimeKind.Utc)));\n            result.AddTest(CreateQueryTestStringId(\"Date: Equal - Movies released on 1994-10-14 (Shawshank Redemption / Pulp Fiction)\",\n                m => m.ReleaseDate == new DateTime(1994, 10, 14, 0, 0, 0, DateTimeKind.Utc)));\n\n            // Date functions\n            result.AddTest(CreateQueryTestIntId(\"Date (month): Movies released in November\",\n                m => m.ReleaseDate.Month == 11));\n            result.AddTest(CreateQueryTestIntId(\"Date (day): Movies released in the first day of the month\",\n                m => m.ReleaseDate.Day == 1));\n            result.AddTest(CreateQueryTestIntId(\"Date (year): Movies whose year is different than its release year\",\n                m => m.ReleaseDate.Year != m.Year, 100));\n\n            result.AddTest(CreateQueryTestStringId(\"Date (month): Movies released in November\",\n                m => m.ReleaseDate.Month == 11));\n            result.AddTest(CreateQueryTestStringId(\"Date (day): Movies released in the first day of the month\",\n                m => m.ReleaseDate.Day == 1));\n            result.AddTest(CreateQueryTestStringId(\"Date (year): Movies whose year is different than its release year\",\n                m => m.ReleaseDate.Year != m.Year, 100));\n\n            // Bool fields\n            result.AddTest(CreateQueryTestIntId(\"Bool: equal to true - Best picture winners before 1950\",\n                m => m.Year < 1950 && m.BestPictureWinner == true));\n            result.AddTest(CreateQueryTestIntId(\"Bool: equal to false - Best picture winners after 2000\",\n                m => m.Year >= 2000 && !(m.BestPictureWinner == false)));\n            result.AddTest(CreateQueryTestIntId(\"Bool: not equal to false - Best picture winners after 2000\",\n                m => m.BestPictureWinner != false && m.Year >= 2000));\n\n            result.AddTest(CreateQueryTestStringId(\"Bool: equal to true - Best picture winners before 1950\",\n                m => m.Year < 1950 && m.BestPictureWinner == true));\n            result.AddTest(CreateQueryTestStringId(\"Bool: equal to false - Best picture winners after 2000\",\n                m => m.Year >= 2000 && !(m.BestPictureWinner == false)));\n            result.AddTest(CreateQueryTestStringId(\"Bool: not equal to false - Best picture winners after 2000\",\n                m => m.BestPictureWinner != false && m.Year >= 2000));\n\n            // Top and skip\n            result.AddTest(CreateQueryTestIntId(\"Get all using large $top - 500\", null, 500));\n            result.AddTest(CreateQueryTestIntId(\"Skip all using large skip - 500\", null, null, 500));\n            result.AddTest(CreateQueryTestIntId(\"Get first ($top) - 10\", null, 10));\n            result.AddTest(CreateQueryTestIntId(\"Get last ($skip) - 10\", null, null, ZumoQueryTestData.AllMovies.Length - 10));\n            result.AddTest(CreateQueryTestIntId(\"Skip, take, includeTotalCount - movies 11-20, ordered by title\",\n                null, 10, 10, new[] { new OrderByClause(\"Title\", true) }, null, true));\n            result.AddTest(CreateQueryTestIntId(\"Skip, take, filter includeTotalCount - movies 11-20 which won a best picture award, ordered by year\",\n                m => m.BestPictureWinner == true, 10, 10, new[] { new OrderByClause(\"Year\", false) }, null, true));\n            result.AddTest(CreateQueryTestStringId(\"Get all using large $top - 500\", null, 500));\n            result.AddTest(CreateQueryTestStringId(\"Skip all using large skip - 500\", null, null, 500));\n            result.AddTest(CreateQueryTestStringId(\"Get first ($top) - 10\", null, 10));\n            result.AddTest(CreateQueryTestStringId(\"Get last ($skip) - 10\", null, null, ZumoQueryTestData.AllStringIdMovies().Length - 10));\n            result.AddTest(CreateQueryTestStringId(\"Skip, take, includeTotalCount - movies 11-20, ordered by title\",\n                null, 10, 10, new[] { new OrderByClause(\"Title\", true) }, null, true));\n            result.AddTest(CreateQueryTestStringId(\"Skip, take, filter includeTotalCount - movies 11-20 which won a best picture award, ordered by year\",\n                m => m.BestPictureWinner == true, 10, 10, new[] { new OrderByClause(\"Year\", false) }, null, true));\n\n            // Order by\n            result.AddTest(CreateQueryTestIntId(\"Order by date and string - 50 movies, ordered by release date, then title\",\n                null, 50, null, new[] { new OrderByClause(\"ReleaseDate\", false), new OrderByClause(\"Title\", true) }));\n            result.AddTest(CreateQueryTestIntId(\"Order by number - 30 shortest movies since 1970\",\n                m => m.Year >= 1970, 30, null, new[] { new OrderByClause(\"Duration\", true), new OrderByClause(\"Title\", true) }, null, true));\n\n            result.AddTest(CreateQueryTestStringId(\"Order by date and string - 50 movies, ordered by release date, then title\",\n                null, 50, null, new[] { new OrderByClause(\"ReleaseDate\", false), new OrderByClause(\"Title\", true) }));\n            result.AddTest(CreateQueryTestStringId(\"Order by number - 30 shortest movies since 1970\",\n                m => m.Year >= 1970, 30, null, new[] { new OrderByClause(\"Duration\", true), new OrderByClause(\"Title\", true) }, null, true));\n\n            // Select\n            result.AddTest(CreateQueryTestIntId(\"Select one field - Only title of movies from 2008\",\n                m => m.Year == 2008, null, null, null, m => m.Title));\n            result.AddTest(CreateQueryTestIntId(\"Select multiple fields - Nicely formatted list of movies from the 2000's\",\n                m => m.Year >= 2000, 200, null, new[] { new OrderByClause(\"ReleaseDate\", false), new OrderByClause(\"Title\", true) },\n                m => string.Format(\"{0} {1} - {2} minutes\", m.Title.PadRight(30), m.BestPictureWinner ? \"(best picture)\" : \"\", m.Duration)));\n\n            result.AddTest(CreateQueryTestStringId(\"Select one field - Only title of movies from 2008\",\n                m => m.Year == 2008, null, null, null, m => m.Title));\n            result.AddTest(CreateQueryTestStringId(\"Select multiple fields - Nicely formatted list of movies from the 2000's\",\n                m => m.Year >= 2000, 200, null, new[] { new OrderByClause(\"ReleaseDate\", false), new OrderByClause(\"Title\", true) },\n                m => string.Format(\"{0} {1} - {2} minutes\", m.Title.PadRight(30), m.BestPictureWinner ? \"(best picture)\" : \"\", m.Duration)));\n\n            // Tests passing the OData query directly to the Read operation\n            result.AddTest(CreateQueryTestIntId(\"Passing OData query directly - movies from the 80's, ordered by Title, items 3, 4 and 5\",\n                whereClause: m => m.Year >= 1980 && m.Year <= 1989,\n                top: 3, skip: 2,\n                orderBy: new OrderByClause[] { new OrderByClause(\"Title\", true) },\n                odataQueryExpression: \"$filter=((Year ge 1980) and (Year le 1989))&$top=3&$skip=2&$orderby=Title asc\"));\n\n            result.AddTest(CreateQueryTestStringId(\"Passing OData query directly - movies from the 80's, ordered by Title, items 3, 4 and 5\",\n                whereClause: m => m.Year >= 1980 && m.Year <= 1989,\n                top: 3, skip: 2,\n                orderBy: new OrderByClause[] { new OrderByClause(\"Title\", true) },\n                odataQueryExpression: \"$filter=((Year ge 1980) and (Year le 1989))&$top=3&$skip=2&$orderby=Title asc\"));\n\n            // Negative tests\n            result.AddTest(CreateQueryTest<Movie, MobileServiceInvalidOperationException>(\"[Int id] (Neg) Very large top value\", m => m.Year > 2000, VeryLargeTopValue));\n            result.AddTest(CreateQueryTest<StringIdMovie, MobileServiceInvalidOperationException>(\"[String id] (Neg) Very large top value\", m => m.Year > 2000, VeryLargeTopValue));\n            result.AddTest(CreateQueryTest<Movie, NotSupportedException>(\"[Int id] (Neg) Unsupported predicate: unsupported arithmetic\",\n                m => Math.Sqrt(m.Year) > 43));\n            result.AddTest(CreateQueryTest<StringIdMovie, NotSupportedException>(\"[String id] (Neg) Unsupported predicate: unsupported arithmetic\",\n                m => Math.Sqrt(m.Year) > 43));\n\n            // Invalid lookup\n            for (int i = -1; i <= 0; i++)\n            {\n                int id = i;\n                result.AddTest(new ZumoTest(\"(Neg) Invalid id for lookup: \" + i, async delegate(ZumoTest test)\n                {\n                    var table = ZumoTestGlobals.Instance.Client.GetTable<Movie>();\n                    try\n                    {\n                        var item = await table.LookupAsync(id);\n                        test.AddLog(\"Error, LookupAsync for id = {0} should have failed, but succeeded: {1}\", id, item);\n                        return false;\n                    }\n                    catch (InvalidOperationException ex)\n                    {\n                        test.AddLog(\"Caught expected exception - {0}: {1}\", ex.GetType().FullName, ex.Message);\n                        return true;\n                    }\n                }, ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES));\n            }\n\n#if !WINDOWS_PHONE\n            result.AddTest(new ZumoTest(\"ToCollection - displaying movies on a ListBox\", async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable<StringIdMovie>();\n                var query = from m in table\n                            where m.Year > 1980\n                            orderby m.ReleaseDate descending\n                            select new\n                            {\n                                Date = m.ReleaseDate.ToUniversalTime().ToString(\"yyyy-MM-dd\", CultureInfo.InvariantCulture),\n                                Title = m.Title\n                            };\n                query = query.Take(50);\n                var expectedItems = ZumoQueryTestData.AllMovies\n                    .Where(m => m.Year > 1980)\n                    .OrderByDescending(m => m.ReleaseDate)\n                    .Select(m => string.Format(\n                        \"{0} - {1}\",\n                        m.ReleaseDate.ToUniversalTime().ToString(\"yyyy-MM-dd\", CultureInfo.InvariantCulture),\n                        m.Title))\n                    .Take(50)\n                    .ToList();\n                var newPage = new MoviesDisplayControl();\n                var collection = await query.ToCollectionAsync();\n                newPage.SetMoviesSource(collection);\n\n                test.AddLog(\"Displaying the movie display control with the bound collection\");\n                await newPage.Display();\n                test.AddLog(\"Dialog displayed, verifying that the items displayed are correct...\");\n                var pageItems = newPage.ItemsAsString;\n                List<string> errors = new List<string>();\n                if (Util.CompareArrays(expectedItems.ToArray(), pageItems.ToArray(), errors))\n                {\n                    test.AddLog(\"Movies were displayed correctly.\");\n                    return true;\n                }\n                else\n                {\n                    test.AddLog(\"Error comparing the movies:\");\n                    foreach (var error in errors)\n                    {\n                        test.AddLog(\"  {0}\", error);\n                    }\n\n                    return false;\n                }\n            }, ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES));\n#endif\n            return result;\n        }\n\n        internal static ZumoTest CreatePopulateTableTest()\n        {\n            return new ZumoTest(\"Populate movies table, if necessary\", new TestExecution(async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable<AllMovies>();\n                AllMovies allMovies = new AllMovies\n                {\n                    Movies = ZumoQueryTestData.AllMovies\n                };\n                await table.InsertAsync(allMovies);\n\n                for (int i = 0; i < 20; i++)\n                {\n                    var counter = await table.Take(0).IncludeTotalCount().ToListAsync();\n                    var totalCount = ((ITotalCountProvider)counter).TotalCount;\n                    if (totalCount == allMovies.Movies.Length)\n                    {\n                        test.AddLog(\"Result of populating table: {0}\", allMovies.Status);\n                        return true;\n                    }\n                    else\n                    {\n                        test.AddLog(\"Already inserted {0} items, waiting for insertion to complete\", totalCount);\n                        await Util.TaskDelay(5000);\n                    }\n                }\n\n                test.AddLog(\"Result of populating table: Time out. Not populate enough data.\");\n                return false;\n            }), ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES);\n        }\n\n        internal static ZumoTest CreatePopulateStringIdTableTest()\n        {\n            return new ZumoTest(\"Populate [string id] movies table, if necessary\", new TestExecution(async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable<AllStringIdMovies>();\n                AllStringIdMovies allMovies = new AllStringIdMovies\n                {\n                    Movies = new StringIdMovie[ZumoQueryTestData.AllStringIdMovies().Length]\n                };\n                for (int i = 0; i < allMovies.Movies.Length; i++)\n                {\n                    allMovies.Movies[i] = new StringIdMovie(string.Format(\"Movie {0:000}\", i), ZumoQueryTestData.AllMovies[i]);\n                }\n                await table.InsertAsync(allMovies);\n\n                for (int i = 0; i < 20; i++)\n                {\n                    var counter = await table.Take(0).IncludeTotalCount().ToListAsync();\n                    var totalCount = ((ITotalCountProvider)counter).TotalCount;\n                    if (totalCount == allMovies.Movies.Length)\n                    {\n                        test.AddLog(\"Result of populating [string id] table: {0}\", allMovies.Status);\n                        return true;\n                    }\n                    else\n                    {\n                        test.AddLog(\"Already inserted {0} items, waiting for insertion to complete\", totalCount);\n                        await Util.TaskDelay(5000);\n                    }\n                }\n\n                test.AddLog(\"Result of populating [string id] table: Time out. Not populate enough data.\");\n                return false;\n            }), ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES);\n        }\n\n        class OrderByClause\n        {\n            public OrderByClause(string fieldName, bool isAscending)\n            {\n                this.FieldName = fieldName;\n                this.IsAscending = isAscending;\n            }\n\n            public bool IsAscending { get; private set; }\n            public string FieldName { get; private set; }\n        }\n\n        private static ZumoTest CreateQueryTestIntId(\n            string name, Expression<Func<Movie, bool>> whereClause,\n            int? top = null, int? skip = null, OrderByClause[] orderBy = null,\n            Expression<Func<Movie, string>> selectExpression = null, bool? includeTotalCount = null,\n            string odataQueryExpression = null)\n        {\n            return CreateQueryTest<Movie, ExceptionTypeWhichWillNeverBeThrown>(\n                \"[Int id] \" + name, whereClause, top, skip, orderBy, selectExpression, includeTotalCount, odataQueryExpression, false);\n        }\n\n        private static ZumoTest CreateQueryTestStringId(\n            string name, Expression<Func<StringIdMovie, bool>> whereClause,\n            int? top = null, int? skip = null, OrderByClause[] orderBy = null,\n            Expression<Func<StringIdMovie, string>> selectExpression = null, bool? includeTotalCount = null,\n            string odataQueryExpression = null)\n        {\n            return CreateQueryTest<StringIdMovie, ExceptionTypeWhichWillNeverBeThrown>(\n                \"[String id] \" + name, whereClause, top, skip, orderBy, selectExpression, includeTotalCount, odataQueryExpression, true);\n        }\n\n        private static ZumoTest CreateQueryTest<MovieType>(\n            string name, Expression<Func<MovieType, bool>> whereClause,\n            int? top = null, int? skip = null, OrderByClause[] orderBy = null,\n            Expression<Func<MovieType, string>> selectExpression = null, bool? includeTotalCount = null,\n            string odataQueryExpression = null, bool useStringIdTable = false) where MovieType : class, IMovie\n        {\n            return CreateQueryTest<MovieType, ExceptionTypeWhichWillNeverBeThrown>(name, whereClause, top, skip, orderBy, selectExpression, includeTotalCount, odataQueryExpression);\n        }\n\n        private static ZumoTest CreateQueryTest<MovieType, TExpectedException>(\n            string name, Expression<Func<MovieType, bool>> whereClause,\n            int? top = null, int? skip = null, OrderByClause[] orderBy = null,\n            Expression<Func<MovieType, string>> selectExpression = null, bool? includeTotalCount = null,\n            string odataExpression = null, bool useStringIdTable = false)\n            where MovieType : class, IMovie\n            where TExpectedException : Exception\n        {\n            return new ZumoTest(name, async delegate(ZumoTest test)\n            {\n                try\n                {\n                    var table = ZumoTestGlobals.Instance.Client.GetTable<MovieType>();\n                    IEnumerable<MovieType> readMovies = null;\n                    IEnumerable<string> readProjectedMovies = null;\n\n                    if (odataExpression == null)\n                    {\n                        IMobileServiceTableQuery<MovieType> query = null;\n                        IMobileServiceTableQuery<string> selectedQuery = null;\n\n                        if (whereClause != null)\n                        {\n                            query = table.Where(whereClause);\n                        }\n\n                        if (orderBy != null)\n                        {\n                            if (query == null)\n                            {\n                                query = table.Where(m => m.Duration == m.Duration);\n                            }\n\n                            query = ApplyOrdering(query, orderBy);\n                        }\n\n                        if (top.HasValue)\n                        {\n                            query = query == null ? table.Take(top.Value) : query.Take(top.Value);\n                        }\n\n                        if (skip.HasValue)\n                        {\n                            query = query == null ? table.Skip(skip.Value) : query.Skip(skip.Value);\n                        }\n\n                        if (selectExpression != null)\n                        {\n                            selectedQuery = query == null ? table.Select(selectExpression) : query.Select(selectExpression);\n                        }\n\n                        if (includeTotalCount.HasValue)\n                        {\n                            query = query.IncludeTotalCount();\n                        }\n\n                        if (selectedQuery == null)\n                        {\n                            // Both ways of querying should be equivalent, so using both with equal probability here.\n                            var tickCount = Environment.TickCount;\n                            if ((tickCount % 2) == 0)\n                            {\n                                test.AddLog(\"Querying using MobileServiceTableQuery<T>.ToEnumerableAsync\");\n                                readMovies = await query.ToEnumerableAsync();\n                            }\n                            else\n                            {\n                                test.AddLog(\"Querying using IMobileServiceTable<T>.ReadAsync(MobileServiceTableQuery<U>)\");\n                                readMovies = await table.ReadAsync(query);\n                            }\n                        }\n                        else\n                        {\n                            readProjectedMovies = await selectedQuery.ToEnumerableAsync();\n                        }\n                    }\n                    else\n                    {\n                        test.AddLog(\"Using the OData query directly\");\n                        JToken result = await table.ReadAsync(odataExpression);\n                        if (ZumoTestGlobals.Instance.IsNetRuntime)\n                        {\n                            var serializer = new JsonSerializer();\n                            serializer.Converters.Add(new MobileServiceIsoDateTimeConverter());\n                            readMovies = result.ToObject<IEnumerable<MovieType>>(serializer);\n                        }\n                        else\n                        {\n                            readMovies = result.ToObject<IEnumerable<MovieType>>();\n                        }\n                    }\n\n                    long actualTotalCount = -1;\n                    ITotalCountProvider totalCountProvider = (readMovies as ITotalCountProvider) ?? (readProjectedMovies as ITotalCountProvider);\n                    if (totalCountProvider != null)\n                    {\n                        actualTotalCount = totalCountProvider.TotalCount;\n                    }\n\n                    if (ZumoTestGlobals.Instance.IsNetRuntime && top.HasValue && top.Value == VeryLargeTopValue)\n                    {\n                        test.AddLog(\"NetRuntime throttles to 100 and does not throw\");\n                        return readMovies.Count() == 100;\n                    }\n\n                    IEnumerable<MovieType> expectedData;\n                    if (useStringIdTable)\n                    {\n                        var movies = ZumoQueryTestData.AllStringIdMovies();\n                        expectedData = new MovieType[movies.Length];\n                        for (var i = 0; i < movies.Length; i++)\n                        {\n                            ((MovieType[])expectedData)[i] = (MovieType)(IMovie)movies[i];\n                        }\n                    }\n                    else\n                    {\n                        expectedData = ZumoQueryTestData.AllMovies.Select(s => (MovieType)(IMovie)s);\n                    }\n\n                    if (whereClause != null)\n                    {\n                        expectedData = expectedData.Where(whereClause.Compile());\n                    }\n\n                    long expectedTotalCount = -1;\n                    if (includeTotalCount.HasValue && includeTotalCount.Value)\n                    {\n                        expectedTotalCount = expectedData.Count();\n                    }\n\n                    if (orderBy != null)\n                    {\n                        expectedData = ApplyOrdering(expectedData, orderBy);\n                    }\n\n                    if (skip.HasValue)\n                    {\n                        expectedData = expectedData.Skip(skip.Value);\n                    }\n\n                    if (top.HasValue)\n                    {\n                        expectedData = expectedData.Take(top.Value);\n                    }\n\n\n                    if (includeTotalCount.HasValue)\n                    {\n                        if (expectedTotalCount != actualTotalCount)\n                        {\n                            test.AddLog(\"Total count was requested, but the returned value is incorrect: expected={0}, actual={1}\", expectedTotalCount, actualTotalCount);\n                            return false;\n                        }\n                    }\n\n                    List<string> errors = new List<string>();\n                    bool expectedDataIsSameAsReadData;\n\n                    if (selectExpression != null)\n                    {\n                        string[] expectedProjectedData = expectedData.Select(selectExpression.Compile()).ToArray();\n                        expectedDataIsSameAsReadData = Util.CompareArrays(expectedProjectedData, readProjectedMovies.ToArray(), errors);\n                    }\n                    else\n                    {\n                        expectedDataIsSameAsReadData = Util.CompareArrays(expectedData.ToArray(), readMovies.ToArray(), errors);\n                    }\n\n                    if (!expectedDataIsSameAsReadData)\n                    {\n                        foreach (var error in errors)\n                        {\n                            test.AddLog(error);\n                        }\n\n                        test.AddLog(\"Expected data is different\");\n                        return false;\n                    }\n                    else\n                    {\n                        if (typeof(TExpectedException) == typeof(ExceptionTypeWhichWillNeverBeThrown))\n                        {\n                            return true;\n                        }\n                        else\n                        {\n                            test.AddLog(\"Error, test should have failed with {0}, but succeeded.\", typeof(TExpectedException).FullName);\n                            return false;\n                        }\n                    }\n                }\n                catch (TExpectedException ex)\n                {\n                    test.AddLog(\"Caught expected exception - {0}: {1}\", ex.GetType().FullName, ex.Message);\n                    return true;\n                }\n            }, typeof(MovieType) == typeof(Movie) ? ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES : ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES);\n        }\n\n        private static IMobileServiceTableQuery<MovieType> ApplyOrdering<MovieType>(IMobileServiceTableQuery<MovieType> query, OrderByClause[] orderBy)\n            where MovieType : class, IMovie\n        {\n            if (orderBy.Length == 1)\n            {\n                if (orderBy[0].IsAscending && orderBy[0].FieldName == \"Title\")\n                {\n                    return query.OrderBy(m => m.Title);\n                }\n                else if (!orderBy[0].IsAscending && orderBy[0].FieldName == \"Year\")\n                {\n                    return query.OrderByDescending(m => m.Year);\n                }\n            }\n            else if (orderBy.Length == 2)\n            {\n                if (orderBy[1].FieldName == \"Title\" && orderBy[1].IsAscending)\n                {\n                    if (orderBy[0].FieldName == \"Duration\" && orderBy[0].IsAscending)\n                    {\n                        return query.OrderBy(m => m.Duration).ThenBy(m => m.Title);\n                    }\n                    else if (orderBy[0].FieldName == \"ReleaseDate\" && !orderBy[0].IsAscending)\n                    {\n                        return query.OrderByDescending(m => m.ReleaseDate).ThenBy(m => m.Title);\n                    }\n                }\n            }\n\n            throw new NotImplementedException(string.Format(\"Ordering by [{0}] not implemented yet\",\n                string.Join(\", \", orderBy.Select(c => string.Format(\"{0} {1}\", c.FieldName, c.IsAscending ? \"asc\" : \"desc\")))));\n        }\n\n        private static IEnumerable<MovieType> ApplyOrdering<MovieType>(IEnumerable<MovieType> data, OrderByClause[] orderBy)\n            where MovieType : class, IMovie\n        {\n            if (orderBy.Length == 1)\n            {\n                if (orderBy[0].IsAscending && orderBy[0].FieldName == \"Title\")\n                {\n                    return data.OrderBy(m => m.Title);\n                }\n                else if (!orderBy[0].IsAscending && orderBy[0].FieldName == \"Year\")\n                {\n                    return data.OrderByDescending(m => m.Year);\n                }\n            }\n            else if (orderBy.Length == 2)\n            {\n                if (orderBy[1].FieldName == \"Title\" && orderBy[1].IsAscending)\n                {\n                    if (orderBy[0].FieldName == \"Duration\" && orderBy[0].IsAscending)\n                    {\n                        return data.OrderBy(m => m.Duration).ThenBy(m => m.Title);\n                    }\n                    else if (orderBy[0].FieldName == \"ReleaseDate\" && !orderBy[0].IsAscending)\n                    {\n                        return data.OrderByDescending(m => m.ReleaseDate).ThenBy(m => m.Title);\n                    }\n                }\n            }\n\n            throw new NotImplementedException(string.Format(\"Ordering by [{0}] not implemented yet\",\n                string.Join(\", \", orderBy.Select(c => string.Format(\"{0} {1}\", c.FieldName, c.IsAscending ? \"asc\" : \"desc\")))));\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/ZumoRoundTripTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\nusing Microsoft.WindowsAzure.MobileServices;\nusing Newtonsoft.Json.Linq;\nusing ZumoE2ETestApp.Framework;\nusing ZumoE2ETestApp.Tests.Types;\n\nnamespace ZumoE2ETestApp.Tests\n{\n    public static class ZumoRoundTripTests\n    {\n        public static ZumoTestGroup CreateTests()\n        {\n            ZumoTestGroup result = new ZumoTestGroup(\"Round trip tests\");\n            result.AddTest(CreateSetupSchemaTest());\n\n            DateTime now = DateTime.UtcNow;\n            int seed = now.Year * 10000 + now.Month * 100 + now.Day;\n            Random rndGen = new Random(seed);\n\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"String: Empty\", RoundTripTestType.String, \"\"));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"String: null\", RoundTripTestType.String, null));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"String: random value\",\n                RoundTripTestType.String, Util.CreateSimpleRandomString(rndGen, 10)));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"String: large (1000 characters)\", RoundTripTestType.String, new string('*', 1000)));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"String: large (64k+1 characters)\", RoundTripTestType.String, new string('*', 65537)));\n\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"String: non-ASCII characters - Latin\", RoundTripTestType.String, \"ãéìôü ÇñÑ\"));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"String: non-ASCII characters - Arabic\", RoundTripTestType.String, \"الكتاب على الطاولة\"));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"String: non-ASCII characters - Chinese\", RoundTripTestType.String, \"这本书在桌子上\"));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"String: non-ASCII characters - Chinese 2\", RoundTripTestType.String, \"⒈①Ⅻㄨㄩ 啊阿鼾齄 丂丄狚狛 狜狝﨨﨩 ˊˋ˙–〇 㐀㐁䶴䶵\"));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"String: non-ASCII characters - Japanese\", RoundTripTestType.String, \"本は机の上に\"));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"String: non-ASCII characters - Hebrew\", RoundTripTestType.String, \"הספר הוא על השולחן\"));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"String: non-ASCII characters - Russian\", RoundTripTestType.String, \"Книга лежит на столе\"));\n\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Date: now\", RoundTripTestType.Date, Util.TrimSubMilliseconds(DateTime.Now)));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Date: now (UTC)\", RoundTripTestType.Date, Util.TrimSubMilliseconds(DateTime.UtcNow)));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Date: null\", RoundTripTestType.Date, null));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Date: specific date, before unix 0\", RoundTripTestType.Date, new DateTime(1901, 1, 1)));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Date: specific date, after unix 0\", RoundTripTestType.Date, new DateTime(2000, 12, 31)));\n\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Bool: true\", RoundTripTestType.Bool, true));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Bool: false\", RoundTripTestType.Bool, false));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Bool: null\", RoundTripTestType.Bool, null));\n\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Int: zero\", RoundTripTestType.Int, 0));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Int: MaxValue\", RoundTripTestType.Int, int.MaxValue));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Int: MinValue\", RoundTripTestType.Int, int.MinValue));\n\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Long: zero\", RoundTripTestType.Long, 0L));\n            long maxAllowedValue = 0x0020000000000000;\n            long minAllowedValue = 0;\n            unchecked\n            {\n                minAllowedValue = (long)0xFFE0000000000000;\n            }\n\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Long: max allowed\", RoundTripTestType.Long, maxAllowedValue));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Long: min allowed\", RoundTripTestType.Long, minAllowedValue));\n            long largePositiveValue = maxAllowedValue - rndGen.Next(0, int.MaxValue);\n            long largeNegativeValue = minAllowedValue + rndGen.Next(0, int.MaxValue);\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Long: large value, less than max allowed (\" + largePositiveValue + \")\", RoundTripTestType.Long, largePositiveValue));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Long: large negative value, more than min allowed (\" + largeNegativeValue + \")\", RoundTripTestType.Long, largeNegativeValue));\n\n            result.AddTest(CreateSimpleTypedRoundTripTest<InvalidOperationException>(\"(Neg) Long: more than max allowed\", RoundTripTestType.Long, maxAllowedValue + 1));\n            result.AddTest(CreateSimpleTypedRoundTripTest<InvalidOperationException>(\"(Neg) Long: less than min allowed\", RoundTripTestType.Long, minAllowedValue - 1));\n\n            result.AddTest(CreateSimpleTypedRoundTripTest(\"Enum (with JSON converter): simple value\", RoundTripTestType.Enum, EnumType.Second));\n\n            result.AddTest(CreateSimpleTypedRoundTripTest(\n                \"Complex type (custom table serialization): simple value\",\n                RoundTripTestType.ComplexWithCustomSerialization,\n                new ComplexType2(rndGen)));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\n                \"Complex type (custom table serialization): null\",\n                RoundTripTestType.ComplexWithCustomSerialization,\n                null));\n\n            result.AddTest(CreateSimpleTypedRoundTripTest(\n                \"Complex type (converter): empty array\",\n                RoundTripTestType.ComplexWithConverter,\n                new ComplexType[0]));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\n                \"Complex type (converter): 1-element array\",\n                RoundTripTestType.ComplexWithConverter,\n                new ComplexType[] { new ComplexType(rndGen) }));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\n                \"Complex type (converter): multi-element array\",\n                RoundTripTestType.ComplexWithConverter,\n                new ComplexType[] { new ComplexType(rndGen), null, new ComplexType(rndGen) }));\n            result.AddTest(CreateSimpleTypedRoundTripTest(\n                \"Complex type (converter): null array\",\n                RoundTripTestType.ComplexWithConverter,\n                null));\n\n            result.AddTest(\n                CreateSimpleTypedRoundTripTest<ArgumentException>(\n                    \"(Neg) Insert item with non-default id\", RoundTripTestType.Id, 1));\n\n            var uniqueId = Environment.TickCount.ToString(CultureInfo.InvariantCulture);\n            var differentIds = new Dictionary<string, string>\n            {\n                { \"none\", null },\n                { \"ascii\", \"myid\" },\n                { \"latin\", \"ãéìôü ÇñÑ\" },\n                { \"arabic\", \"الكتاب على الطاولة\" },\n                { \"chinese\", \"这本书在桌子上\" },\n                { \"hebrew\", \"הספר הוא על השולחן\" }\n            };\n\n            foreach (var name in differentIds.Keys)\n            {\n                var id = differentIds[name];\n                result.AddTest(new ZumoTest(\"String id - \" + name + \" id on insert\", async delegate(ZumoTest test) {\n                    var item = new StringIdRoundTripTableItem(rndGen);\n                    var itemId = id;\n                    if (itemId != null)\n                    {\n                        itemId = itemId + \"-\" + Guid.NewGuid().ToString();\n                    }\n\n                    item.Id = itemId;\n                    var client = ZumoTestGlobals.Instance.Client;\n                    var table = client.GetTable<StringIdRoundTripTableItem>();\n                    await table.InsertAsync(item);\n                    test.AddLog(\"Inserted item with id = {0}\", item.Id);\n                    if (id != null && itemId != item.Id)\n                    {\n                        test.AddLog(\"Error, id passed to insert is not the same ({0}) as the id returned by the server ({1})\", id, item.Id);\n                        return false;\n                    }\n\n                    var retrieved = await table.LookupAsync(item.Id);\n                    test.AddLog(\"Retrieved item: {0}\", retrieved);\n                    if (!item.Equals(retrieved))\n                    {\n                        test.AddLog(\"Error, round-tripped item is different\");\n                        return false;\n                    }\n\n                    test.AddLog(\"Now trying to insert an item with an existing id (should fail)\");\n                    try\n                    {\n                        await table.InsertAsync(new StringIdRoundTripTableItem { Id = retrieved.Id, Name = \"should not work\" });\n                        test.AddLog(\"Error, insertion succeeded but it should have failed\");\n                        return false;\n                    }\n                    catch (MobileServiceInvalidOperationException e)\n                    {\n                        test.AddLog(\"Caught expected exception: {0}\", e);\n                    }\n\n                    test.AddLog(\"Cleaning up...\");\n                    await table.DeleteAsync(retrieved);\n                    test.AddLog(\"Removed the inserted item\");\n                    return true;\n                }, ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES));\n            }\n\n            var invalidIds = new string[] { \".\", \"..\", \"control\\u0010characters\", \"large id \" + new string('*', 260) };\n            foreach (var id in invalidIds)\n            {\n                result.AddTest(new ZumoTest(\"(Neg) string id - insert with invalid id: \" + (id.Length > 30 ? (id.Substring(0, 30) + \"...\") : id), async delegate(ZumoTest test)\n                {\n                    var client = ZumoTestGlobals.Instance.Client;\n                    var table = client.GetTable<StringIdRoundTripTableItem>();\n                    var item = new StringIdRoundTripTableItem { Id = id, Name = \"should not work\" };\n                    try\n                    {\n                        await table.InsertAsync(item);\n                        test.AddLog(\"Error, insert operation should have failed. Inserted id = {0}\", item.Id);\n                        return false;\n                    }\n                    catch (InvalidOperationException ex)\n                    {\n                        test.AddLog(\"Caught expected exception: {0}\", ex);\n                        return true;\n                    }\n                }, ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES));\n            }\n\n            // Untyped overloads\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped String: Empty\", \"string1\", \"\"));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped String: null\", \"string1\", null));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped String: random value\",\n                \"string1\", Util.CreateSimpleRandomString(rndGen, 10)));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped String: large (1000 characters)\", \"string1\", new string('*', 1000)));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped String: large (64k+1 characters)\", \"string1\", new string('*', 65537)));\n\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Latin\", \"string1\", \"ãéìôü ÇñÑ\"));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Arabic\", \"string1\", \"الكتاب على الطاولة\"));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Chinese\", \"string1\", \"这本书在桌子上\"));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Chinese 2\", \"string1\", \"⒈①Ⅻㄨㄩ 啊阿鼾齄 丂丄狚狛 狜狝﨨﨩 ˊˋ˙–〇 㐀㐁䶴䶵\"));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Japanese\", \"string1\", \"本は机の上に\"));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Hebrew\", \"string1\", \"הספר הוא על השולחן\"));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped String: non-ASCII characters - Russian\", \"string1\", \"Книга лежит на столе\"));\n\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Date: now\", \"date1\", Util.TrimSubMilliseconds(DateTime.Now)));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Date: now (UTC)\", \"date1\", Util.TrimSubMilliseconds(DateTime.UtcNow)));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Date: null\", \"date1\", null));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Date: specific date, before unix 0\", \"date1\", new DateTime(1901, 1, 1)));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Date: specific date, after unix 0\", \"date1\", new DateTime(2000, 12, 31)));\n\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Bool: true\", \"bool1\", true));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Bool: false\", \"bool1\", false));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Bool: null\", \"bool1\", null));\n\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Int: zero\", \"int1\", 0));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Int: MaxValue\", \"int1\", int.MaxValue));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Int: MinValue\", \"int1\", int.MinValue));\n\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Long: zero\", \"long1\", 0L));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Long: max allowed\", \"long1\", maxAllowedValue));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Long: min allowed\", \"long1\", minAllowedValue));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Long: more than max allowed (positive) for typed\", \"long1\", maxAllowedValue + 1));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped Long: more than max allowed (negative) for typed\", \"long1\", minAllowedValue - 1));\n\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\"Untyped complex (object): simple value\",\n                JObject.Parse(@\"{\"\"complexType2\"\":{\"\"Name\"\":\"\"John Doe\"\",\"\"Age\"\":33,\"\"Friends\"\":[\"\"Jane Roe\"\", \"\"John Smith\"\"]}}\")));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\n                \"Untyped complex (object): null\",\n                JObject.Parse(@\"{\"\"complexType2\"\":null}\")));\n\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\n                \"Untyped complex (array): simple value\",\n                JObject.Parse(@\"{\"\"complexType1\"\":[{\"\"Name\"\":\"\"Scooby\"\",\"\"Age\"\":10}, {\"\"Name\"\":\"\"Shaggy\"\",\"\"Age\"\":19}]}\")));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\n                \"Untyped complex (array): empty array\",\n                JObject.Parse(@\"{\"\"complexType1\"\":[]}\")));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\n                \"Untyped complex (array): null\",\n                JObject.Parse(@\"{\"\"complexType1\"\":null}\")));\n            result.AddTest(CreateSimpleUntypedRoundTripTest(\n                \"Untyped complex (array): array with null elements\",\n                JObject.Parse(@\"{\"\"complexType1\"\":[{\"\"Name\"\":\"\"Scooby\"\",\"\"Age\"\":10}, null, {\"\"Name\"\":\"\"Shaggy\"\",\"\"Age\"\":19}]}\")));\n\n            result.AddTest(CreateSimpleUntypedRoundTripTest<ArgumentException>(\"(Neg) Insert item with non-default 'id' property\",\n                JObject.Parse(\"{\\\"id\\\":1,\\\"value\\\":2}\"), false));\n            result.AddTest(CreateSimpleUntypedRoundTripTest<ArgumentException>(\"(Neg) Insert item with non-default 'ID' property\",\n                JObject.Parse(\"{\\\"ID\\\":1,\\\"value\\\":2}\"), false));\n            result.AddTest(CreateSimpleUntypedRoundTripTest<ArgumentException>(\"(Neg) Insert item with non-default 'Id' property\",\n                JObject.Parse(\"{\\\"Id\\\":1,\\\"value\\\":2}\"), false));\n\n            uniqueId = (Environment.TickCount + 1).ToString(CultureInfo.InvariantCulture);\n\n            var obj = new StringIdRoundTripTableItem(rndGen);\n            var properties = new Dictionary<string, object>\n            {\n                { \"name\", obj.Name },\n                { \"date1\", obj.Date },\n                { \"bool\", obj.Bool },\n                { \"number\", obj.Number },\n                { \"complex\", obj.ComplexType },\n            };\n            foreach (var name in differentIds.Keys)\n            {\n                foreach (var property in properties.Keys)\n                {\n                    var testName = \"String id (untyped) - \" + name + \" id on insert - \" + property;\n                    var item = JObjectFromValue(property, properties[property]);\n                    var id = differentIds[name];\n                    if (id != null)\n                    {\n                        item.Add(\"id\", id + \"-\" + property + \"-\" + Guid.NewGuid().ToString());\n                    }\n\n                    result.AddTest(CreateSimpleUntypedRoundTripTest(testName, item, true));\n                }\n            }\n\n            foreach (var id in invalidIds)\n            {\n                var testName = \"(Neg) [string id] Insert item with invalid 'id' property: \" + (id.Length > 30 ? (id.Substring(0, 30) + \"...\") : id);\n                JObject jo = new JObject(new JProperty(\"id\", id), new JProperty(\"name\", \"should not work\"));\n                result.AddTest(CreateSimpleUntypedRoundTripTest<InvalidOperationException>(testName, jo, true));\n            }\n\n            return result;\n        }\n\n        private static ZumoTest CreateSetupSchemaTest()\n        {\n            return new ZumoTest(\"Setup dynamic schema\", async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                Random rndGen = new Random(1);\n                try\n                {\n                    if (!ZumoTestGlobals.Instance.IsNetRuntime)\n                    {\n                        var table = client.GetTable<RoundTripTableItem>();\n                        RoundTripTableItem item = new RoundTripTableItem\n                        {\n                            Bool1 = true,\n                            ComplexType1 = new ComplexType[] { new ComplexType(rndGen) },\n                            ComplexType2 = new ComplexType2(rndGen),\n                            Date1 = DateTime.Now,\n                            Double1 = 123.456,\n                            EnumType = EnumType.First,\n                            Int1 = 1,\n                            Long1 = 1,\n                            String1 = \"hello\",\n                        };\n\n                        await table.InsertAsync(item);\n                        test.AddLog(\"Inserted item to create schema on the int id table\");\n                    }\n\n                    var table2 = client.GetTable<StringIdRoundTripTableItem>();\n                    var item2 = new StringIdRoundTripTableItem { Bool = true, Name = \"hello\", Number = 1.23, ComplexType = \"a b c\".Split(), Date = DateTime.UtcNow };\n                    await table2.InsertAsync(item2);\n                    test.AddLog(\"Inserted item to create schema on the string id table\");\n\n                    return true;\n                }\n                catch (Exception ex)\n                {\n                    test.AddLog(\"Error setting up the dynamic schema: {0}\", ex);\n                    return false;\n                }\n            }, ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES, ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES);\n        }\n\n        private static JObject JObjectFromValue(string propertyName, object propertyValue)\n        {\n            var item = new JObject();\n            if (propertyValue == null)\n            {\n                item.Add(propertyName, JToken.Parse(\"null\"));\n            }\n            else\n            {\n                Type propType = propertyValue.GetType();\n                if (propType == typeof(string))\n                {\n                    item.Add(propertyName, (string)propertyValue);\n                }\n                else if (propType == typeof(DateTime))\n                {\n                    item.Add(\n                        propertyName,\n                        ((DateTime)propertyValue).ToUniversalTime().ToString(\n                            \"yyyy-MM-ddTHH:mm:ss.fffZ\", CultureInfo.InvariantCulture));\n                }\n                else if (propType == typeof(bool))\n                {\n                    item.Add(propertyName, (bool)propertyValue);\n                }\n                else if (propType == typeof(int))\n                {\n                    item.Add(propertyName, (int)propertyValue);\n                }\n                else if (propType == typeof(long))\n                {\n                    item.Add(propertyName, (long)propertyValue);\n                }\n                else if (propType == typeof(double))\n                {\n                    item.Add(propertyName, (double)propertyValue);\n                }\n                else if (propType == typeof(string[]))\n                {\n                    var ja = new JArray();\n                    foreach (var value in (string[])propertyValue)\n                    {\n                        ja.Add(value);\n                    }\n\n                    item.Add(propertyName, ja);\n                }\n                else\n                {\n                    throw new ArgumentException(\"Don't know how to create test for type \" + propType.FullName);\n                }\n            }\n\n            return item;\n        }\n\n        private static ZumoTest CreateSimpleUntypedRoundTripTest(string testName, string propertyName, object propertyValue, bool useStringIdTable = false)\n        {\n            var item = JObjectFromValue(propertyName, propertyValue);\n            return CreateSimpleUntypedRoundTripTest<ExceptionTypeWhichWillNeverBeThrown>(testName, item, useStringIdTable);\n        }\n\n        private static ZumoTest CreateSimpleUntypedRoundTripTest(string testName, JObject item, bool useStringIdTable = false)\n        {\n            return CreateSimpleUntypedRoundTripTest<ExceptionTypeWhichWillNeverBeThrown>(testName, item, useStringIdTable);\n        }\n\n        private static ZumoTest CreateSimpleUntypedRoundTripTest<TExpectedException>(string testName, JObject templateItem, bool useStringIdTable)\n            where TExpectedException : Exception\n        {\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var item = JObject.Parse(templateItem.ToString()); // prevent outer object from being captured and reused\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable(useStringIdTable ? ZumoTestGlobals.StringIdRoundTripTableName : ZumoTestGlobals.RoundTripTableName);\n\n                try\n                {\n                    string originalItem = item == null ? \"null\" : item.ToString();\n\n                    var inserted = await table.InsertAsync(item);\n                    object id;\n                    if (!useStringIdTable)\n                    {\n                        int intId = inserted[\"id\"].Value<int>();\n                        test.AddLog(\"Inserted item, id = {0}\", intId);\n                        if (intId <= 0)\n                        {\n                            test.AddLog(\"Error, insert didn't succeed (id == 0)\");\n                            return false;\n                        }\n\n                        id = intId;\n                    }\n                    else\n                    {\n                        var originalId = item[\"id\"];\n                        bool hadId = originalId != null && originalId.Type != JTokenType.Null;\n                        var originalStringId = (string)originalId;\n                        string newId = (string)inserted[\"id\"];\n                        if (hadId && newId != originalStringId)\n                        {\n                            test.AddLog(\"Error, insert changed the item id!\");\n                            return false;\n                        }\n\n                        id = newId;\n                    }\n\n                    JToken roundTripped = await table.LookupAsync(id);\n                    if (roundTripped.Type != JTokenType.Object)\n                    {\n                        test.AddLog(\"Result of Lookup is not an object: {0}\", roundTripped);\n                        return false;\n                    }\n\n                    test.AddLog(\"Retrieved the item from the service\");\n\n                    List<string> errors = new List<string>();\n                    bool testResult;\n                    if (!Util.CompareJson(item, roundTripped, errors))\n                    {\n                        foreach (var error in errors)\n                        {\n                            test.AddLog(error);\n                        }\n\n                        test.AddLog(\"Round-tripped item is different! Expected: {0}; actual: {1}\", originalItem, roundTripped);\n                        testResult = false;\n                    }\n                    else\n                    {\n                        if (typeof(TExpectedException) == typeof(ExceptionTypeWhichWillNeverBeThrown))\n                        {\n                            testResult = true;\n                        }\n                        else\n                        {\n                            test.AddLog(\"Error, test should have failed with {0}, but succeeded.\", typeof(TExpectedException).FullName);\n                            testResult = false;\n                        }\n                    }\n\n                    test.AddLog(\"Cleaning up...\");\n                    await table.DeleteAsync(new JObject(new JProperty(\"id\", id)));\n                    test.AddLog(\"Item deleted\");\n                    return testResult;\n                }\n                catch (TExpectedException ex)\n                {\n                    test.AddLog(\"Caught expected exception - {0}: {1}\", ex.GetType().FullName, ex.Message);\n                    return true;\n                }\n            }, useStringIdTable ? ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES : ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES);\n        }\n\n        enum RoundTripTestType\n        {\n            String, \n            Double, \n            Bool, \n            Int, \n            Long, \n            Date, \n            Enum, \n            ComplexWithConverter,\n            ComplexWithCustomSerialization,\n            Id\n        }\n\n        private static ZumoTest CreateSimpleTypedRoundTripTest(string testName, RoundTripTestType type, object value)\n        {\n            return CreateSimpleTypedRoundTripTest<ExceptionTypeWhichWillNeverBeThrown>(testName, type, value);\n        }\n\n        private static ZumoTest CreateSimpleTypedRoundTripTest<TExpectedException>(\n            string testName, RoundTripTestType type, object value)\n            where TExpectedException : Exception\n        {\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable<RoundTripTableItem>();\n                var item = new RoundTripTableItem();\n                switch (type)\n                {\n                    case RoundTripTestType.Bool:\n                        item.Bool1 = (bool?)value;\n                        break;\n                    case RoundTripTestType.ComplexWithConverter:\n                        item.ComplexType1 = (ComplexType[])value;\n                        break;\n                    case RoundTripTestType.ComplexWithCustomSerialization:\n                        item.ComplexType2 = (ComplexType2)value;\n                        break;\n                    case RoundTripTestType.Date:\n                        item.Date1 = (DateTime?)value;\n                        break;\n                    case RoundTripTestType.Double:\n                        item.Double1 = (double)value;\n                        break;\n                    case RoundTripTestType.Enum:\n                        item.EnumType = (EnumType)value;\n                        break;\n                    case RoundTripTestType.Int:\n                        item.Int1 = (int)value;\n                        break;\n                    case RoundTripTestType.Long:\n                        item.Long1 = (long)value;\n                        break;\n                    case RoundTripTestType.String:\n                        item.String1 = (string)value;\n                        break;\n                    case RoundTripTestType.Id:\n                        item.Id = (int)value;\n                        break;\n                    default:\n                        throw new ArgumentException(\"Invalid type\");\n                }\n\n                RoundTripTableItem originalItem = item.Clone();\n                try\n                {\n                    await table.InsertAsync(item);\n                    test.AddLog(\"Inserted item, id = {0}\", item.Id);\n                    if (item.Id <= 0)\n                    {\n                        test.AddLog(\"Error, insert didn't succeed (id == 0)\");\n                        return false;\n                    }\n\n                    RoundTripTableItem roundTripped = await table.LookupAsync(item.Id);\n                    test.AddLog(\"Retrieved the item from the service\");\n                    bool testResult;\n                    if (!originalItem.Equals(roundTripped))\n                    {\n                        test.AddLog(\"Round-tripped item is different! Expected: {0}; actual: {1}\", originalItem, roundTripped);\n                        testResult = false;\n                    }\n\n                    if (type == RoundTripTestType.String && item.String1 != null && item.String1.Length < 50)\n                    {\n                        test.AddLog(\"Now querying the table for the item (validating characters on query)\");\n                        var queried = await table.Where(i => i.Id > (item.Id - 40) && i.String1 == item.String1).ToListAsync();\n                        var lastItem = queried.Where(i => i.Id == item.Id).First();\n                        if (originalItem.Equals(lastItem))\n                        {\n                            test.AddLog(\"Query for item succeeded\");\n                        }\n                        else\n                        {\n                            test.AddLog(\"Round-tripped (queried) item is different! Expected: {0}; actual: {1}\", originalItem, lastItem);\n                            testResult = false;\n                        }\n                    }\n\n                    if (typeof(TExpectedException) == typeof(ExceptionTypeWhichWillNeverBeThrown))\n                    {\n                        testResult = true;\n                    }\n                    else\n                    {\n                        test.AddLog(\"Error, test should have failed with {0}, but succeeded.\", typeof(TExpectedException).FullName);\n                        testResult = false;\n                    }\n\n                    test.AddLog(\"Cleaning up...\");\n                    await table.DeleteAsync(roundTripped);\n                    test.AddLog(\"Item deleted\");\n\n                    return testResult;\n                }\n                catch (TExpectedException ex)\n                {\n                    test.AddLog(\"Caught expected exception - {0}: {1}\", ex.GetType().FullName, ex.Message);\n                    return true;\n                }\n            }, ZumoTestGlobals.RuntimeFeatureNames.INT_ID_TABLES);\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/ZumoSetupTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing ZumoE2ETestApp.Framework;\n\nnamespace ZumoE2ETestApp.Tests\n{\n    internal static class ZumoSetupTests\n    {\n        public static ZumoTestGroup CreateTests()\n        {\n            ZumoTestGroup result = new ZumoTestGroup(\"Tests Setup\");\n            result.AddTest(CreateSetupTest());\n\n            return result;\n        }\n\n        private static ZumoTest CreateSetupTest()\n        {\n            return new ZumoTest(\"Identify enabled runtime features\", async delegate(ZumoTest test)\n                {\n                    // Start clean.\n                    Dictionary<string, bool> runtimeFeatures = await ZumoTestGlobals.Instance.GetRuntimeFeatures(test);\n                    if (runtimeFeatures.Count > 0)\n                    {\n                        test.AddLog(\"Runtime: {0}\", ZumoTestGlobals.Instance.RuntimeType);\n                        test.AddLog(\"Version: {0}\", ZumoTestGlobals.Instance.RuntimeVersion);\n                        return true;\n                    }\n                    else\n                    {\n                        test.AddLog(\"Could not load the runtime information\");\n                        return false;\n                    }\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/Tests/ZumoTestCommon.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Threading.Tasks;\n#if WINDOWS_PHONE\nusing System.Windows;\n#endif\nusing ZumoE2ETestApp.Framework;\n#if !WINDOWS_PHONE\nusing ZumoE2ETestApp.UIElements;\n#else\nusing ZumoE2ETestAppWP8.UIElements;\n#endif\n\nnamespace ZumoE2ETestApp.Tests\n{\n    internal static class ZumoTestCommon\n    {\n        public static ZumoTest CreateTestWithSingleAlert(string alert)\n        {\n#if !WINDOWS_PHONE\n            return new ZumoTest(\"Simple alert\", async delegate(ZumoTest test)\n            {\n                InputDialog dialog = new InputDialog(\"Information\", alert, \"OK\");\n                if (ZumoTestGlobals.ShowAlerts)\n                {\n                    await dialog.Display();\n                }\n                return true;\n            })\n            {\n                CanRunUnattended = false\n            };\n#else\n            return new ZumoTest(\"Alert: \" + alert, delegate(ZumoTest test)\n            {\n                MessageBox.Show(alert);\n                TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n                tcs.SetResult(true);\n                return tcs.Task;\n            })\n            {\n                CanRunUnattended = false\n            };\n#endif\n        }\n\n        public static ZumoTest CreateYesNoTest(string question, bool expectedAnswer, int delayBeforeDialogMilliseconds = 0)\n        {\n            string testName = string.Format(CultureInfo.InvariantCulture, \"Validation: {0} (expected {1})\", question, expectedAnswer ? \"Yes\" : \"No\");\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                if (delayBeforeDialogMilliseconds > 0)\n                {\n                    await Util.TaskDelay(delayBeforeDialogMilliseconds);\n                }\n\n#if !WINDOWS_PHONE\n                InputDialog dialog = new InputDialog(\"Question\", question, \"No\", \"Yes\");\n                bool answerWasYes = expectedAnswer;\n\n                if (ZumoTestGlobals.ShowAlerts)\n                {\n                    await dialog.Display();\n                    answerWasYes = !dialog.Cancelled;\n                }\n\n#else\n                bool answerWasYes = await InputDialog.DisplayYesNo(question);\n#endif\n                if (expectedAnswer != answerWasYes)\n                {\n                    test.AddLog(\"Test failed. The answer to <<{0}>> was {1}, it should have been {2}\",\n                        question, answerWasYes ? \"Yes\" : \"No\", expectedAnswer ? \"Yes\" : \"No\");\n                    return false;\n                }\n                else\n                {\n                    return true;\n                }\n            })\n            {\n                CanRunUnattended = false\n            };\n        }\n\n#if WINDOWS_PHONE\n        public static ZumoTest CreateInputTest(string title, Dictionary<string, string> propertyBag, string key)\n        {\n            return new ZumoTest(\"Input: \" + title, async delegate(ZumoTest test)\n            {\n                string initialText;\n                if (System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.TryGetValue<string>(key, out initialText))\n                {\n                    // From the isolated storage, takes precedence (used in automation)\n                    test.AddLog(\"Retrieved value from isolated storage: {0}\", initialText);\n                    propertyBag[key] = initialText;\n                    return true;\n                }\n\n                propertyBag.TryGetValue(key, out initialText);\n                var result = await InputDialog.Display(title, initialText);\n                if (result != null)\n                {\n                    propertyBag[key] = result;\n                }\n\n                return true;\n            })\n            {\n                CanRunUnattended = false\n            };\n        }\n\n#endif\n\n        /// <summary>\n        /// Creates a test which doesn't do anything, used only to separate groups of tests\n        /// </summary>\n        /// <param name=\"name\">The test name.</param>\n        /// <returns>A test which always passes without doing anything.</returns>\n        public static ZumoTest CreateSeparator(string name)\n        {\n            return new ZumoTest(name, delegate(ZumoTest test)\n            {\n                TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n                tcs.SetResult(true);\n                return tcs.Task;\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/UIElements/AppInfoRepository.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.Serialization.Json;\nusing System.Threading.Tasks;\nusing ZumoE2ETestApp.Framework;\n\nnamespace ZumoE2ETestApp.UIElements\n{\n    internal class AppInfoRepository\n    {\n        const string SavedAppsFileName = \"AppInfo.txt\";\n\n        public static AppInfoRepository Instance = new AppInfoRepository();\n        private SavedAppInfo savedAppInfo = null;\n\n        private AppInfoRepository() { }\n\n        public async Task<SavedAppInfo> GetSavedAppInfo()\n        {\n            if (savedAppInfo == null)\n            {\n                try\n                {\n                    using (var stream = await Util.OpenAppSettingsForRead(SavedAppsFileName))\n                    {\n                        DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(SavedAppInfo));\n                        savedAppInfo = (SavedAppInfo)dcjs.ReadObject(stream);\n                    }\n                }\n                catch (Exception)\n                {\n                    // Cannot retrieve saved info\n                    return new SavedAppInfo();\n                }\n            }\n\n            return savedAppInfo;\n        }\n\n        public async Task SaveAppInfo(SavedAppInfo appInfo)\n        {\n            Exception ex = null;\n            this.savedAppInfo = appInfo;\n            try\n            {\n                using (var stream = await Util.OpenAppSettingsForWrite(SavedAppsFileName))\n                {\n                    DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(SavedAppInfo));\n                    dcjs.WriteObject(stream, appInfo);\n                }\n            }\n            catch (Exception e)\n            {\n                ex = e;\n            }\n\n            if (ex != null)\n            {\n                string errorText = string.Format(\"{0}: {1}\", ex.GetType().FullName, ex.Message);\n                await Util.MessageBox(errorText, \"Error saving app info\");\n            }\n        }\n    }\n\n    public class MobileServiceInfo\n    {\n        public string AppUrl { get; set; }\n        public string AppKey { get; set; }\n    }\n\n    public class SavedAppInfo\n    {\n        public List<MobileServiceInfo> MobileServices;\n        public MobileServiceInfo LastService;\n        public string LastUploadUrl { get; set; }\n\n        public SavedAppInfo()\n        {\n            this.MobileServices = new List<MobileServiceInfo>();\n            this.LastService = new MobileServiceInfo { AppKey = \"\", AppUrl = \"\" };\n            this.LastUploadUrl = \"\";\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/UIElements/InputDialog.xaml",
    "content": "﻿<Page\n    x:Class=\"ZumoE2ETestApp.UIElements.InputDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:ZumoE2ETestApp.UIElements\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid Name=\"grdRootPanel\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" Opacity=\"0.75\" Margin=\"10\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\" />\n            <RowDefinition Height=\"300\" />\n            <RowDefinition Height=\"*\" />\n        </Grid.RowDefinitions>\n        <Border Name=\"brdBorder\" Background=\"White\" Margin=\"20\" Grid.Row=\"1\">\n            <Grid Background=\"LightGray\" Margin=\"10\" Name=\"grdContent\" Opacity=\"1\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"60\" />\n                    <RowDefinition Height=\"120\" />\n                    <RowDefinition Height=\"60\" />\n                </Grid.RowDefinitions>\n                <TextBlock FontSize=\"40\" FontWeight=\"Bold\" Name=\"lblTitle\" Text=\"Title of the dialog\"\n                   Foreground=\"Black\" Margin=\"10\" \n                   HorizontalAlignment=\"Center\"\n                   VerticalAlignment=\"Center\" Grid.Row=\"0\"/>\n                <Grid Background=\"White\" Grid.Row=\"1\">\n                    <TextBlock Name=\"txtText\" Margin=\"10\" FontSize=\"25\" Foreground=\"Black\"\n                    Text=\"the quick brown fox jumped over the lazy dog\" TextWrapping=\"Wrap\" />\n                </Grid>\n                <StackPanel Grid.Row=\"2\" Orientation=\"Horizontal\" HorizontalAlignment=\"Right\">\n                    <Button Name=\"btnOk\" Margin=\"10,2,10,2\" Content=\"Ok\" Click=\"btnOk_Click_1\"  Foreground=\"Black\" FontSize=\"25\" />\n                    <Button Name=\"btnCancel\" Margin=\"10,2,10,2\" Content=\"Cancel\" Click=\"btnCancel_Click_1\"  Foreground=\"Black\" FontSize=\"25\" />\n                </StackPanel>\n            </Grid>\n        </Border>\n    </Grid>\n</Page>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/UIElements/InputDialog.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\n// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace ZumoE2ETestApp.UIElements\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class InputDialog : Page\n    {\n        public bool Cancelled { get; private set; }\n\n        public InputDialog(string caption, string text, string cancelButtonText, string okButtonText)\n        {\n            this.InitializeComponent();\n\n            this.btnCancel.Content = cancelButtonText;\n            this.lblTitle.Text = caption;\n            this.txtText.Text = text;\n            if (okButtonText == null)\n            {\n                this.btnOk.Visibility = Visibility.Collapsed;\n            }\n            else\n            {\n                this.btnOk.Visibility = Visibility.Visible;\n                this.btnOk.Content = okButtonText;\n            }\n\n            var bounds = Window.Current.Bounds;\n            this.grdRootPanel.Height = bounds.Height;\n            this.grdRootPanel.Width = bounds.Width;\n        }\n\n        public InputDialog(string caption, string text, string cancelButtonText)\n            : this(caption, text, cancelButtonText, null)\n        {\n        }\n\n        /// <summary>\n        /// Invoked when this page is about to be displayed in a Frame.\n        /// </summary>\n        /// <param name=\"e\">Event data that describes how this page was reached.  The Parameter\n        /// property is typically used to configure the page.</param>\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n        }\n\n        private void btnCancel_Click_1(object sender, RoutedEventArgs e)\n        {\n            this.Cancelled = true;\n            ((Popup)this.Parent).IsOpen = false;\n        }\n\n        private void btnOk_Click_1(object sender, RoutedEventArgs e)\n        {\n            this.Cancelled = false;\n            ((Popup)this.Parent).IsOpen = false;\n        }\n\n        public Task Display()\n        {\n            Popup popup = new Popup();\n            popup.Child = this;\n            TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n            popup.IsOpen = true;\n            popup.Closed += (snd, ea) =>\n            {\n                tcs.SetResult(true);\n            };\n\n            return tcs.Task;\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/UIElements/ListViewForTest.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.ComponentModel;\n#if NETFX_CORE\nusing Windows.UI;\nusing Windows.UI.Xaml.Media;\n#else\nusing System.Windows.Media;\n#endif\nusing ZumoE2ETestApp.Framework;\n\nnamespace ZumoE2ETestApp.UIElements\n{\n    public class ListViewForTest : INotifyPropertyChanged\n    {\n        private int index;\n        private ZumoTest test;\n\n        public ListViewForTest(int index, ZumoTest test)\n        {\n            this.index = index;\n            this.test = test;\n            test.TestStatusChanged += test_TestStatusChanged;\n        }\n\n        void test_TestStatusChanged(object sender, TestStatusChangedEventArgs e)\n        {\n            var propChanged = this.PropertyChanged;\n            if (propChanged != null)\n            {\n                propChanged(this, new PropertyChangedEventArgs(\"ColorFromStatus\"));\n                propChanged(this, new PropertyChangedEventArgs(\"TestName\"));\n            }\n        }\n\n        internal ZumoTest Test\n        {\n            get { return this.test; }\n        }\n\n        public string TestName\n        {\n            get { return string.Format(\"{0}. {1} - {2}\", this.index, this.test.Name, this.test.Status); }\n        }\n\n        public Brush ColorFromStatus\n        {\n            get\n            {\n                Color color = Colors.Black;\n                switch (this.test.Status)\n                {\n                    case TestStatus.Failed:\n                        color = Colors.Red;\n                        break;\n                    case TestStatus.NotRun:\n#if !WINDOWS_PHONE\n                        color = Colors.Black;\n#else\n                        color = Colors.Gray;\n#endif\n                        break;\n                    case TestStatus.Passed:\n                        color = Colors.Green;\n                        break;\n                    case TestStatus.Skipped:\n                        color = Colors.Blue;\n                        break;\n                    case TestStatus.Running:\n                        color = Colors.Gray;\n                        break;\n                }\n\n                return new SolidColorBrush(color);\n            }\n        }\n\n        public event PropertyChangedEventHandler PropertyChanged;\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/UIElements/ListViewForTestGroup.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing ZumoE2ETestApp.Framework;\n\nnamespace ZumoE2ETestApp.UIElements\n{\n    public class ListViewForTestGroup\n    {\n        private int index;\n        private ZumoTestGroup testGroup;\n\n        public ListViewForTestGroup(int index, ZumoTestGroup testGroup)\n        {\n            this.index = index;\n            this.testGroup = testGroup;\n        }\n\n        public string Name\n        {\n            get { return string.Format(\"{0}. {1}\", this.index, this.testGroup.Name); }\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/UIElements/MoviesDisplayControl.xaml",
    "content": "﻿<Page\n    x:Class=\"ZumoE2ETestApp.UIElements.MoviesDisplayControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:ZumoE2ETestApp.UIElements\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid Name=\"grdRootPanel\"\n          HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" Opacity=\"0.75\">\n        <Border Background=\"White\" Margin=\"20\">\n            <Grid Background=\"Blue\" Margin=\"10\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"80\"/>\n                    <RowDefinition Height=\"*\"/>\n                </Grid.RowDefinitions>\n                <TextBlock FontSize=\"50\" FontWeight=\"Bold\"\n                           HorizontalAlignment=\"Center\"\n                           VerticalAlignment=\"Center\"\n                           Text=\"List of Movies\" />\n                <Button Name=\"btnClose\" Content=\"Close\" Margin=\"10\" FontSize=\"30\"\n                        HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"\n                        Click=\"btnClose_Click_1\" />\n                <ListBox Grid.Row=\"1\" Name=\"lstMovies\">\n                    <ListBox.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\">\n                                <TextBlock Foreground=\"Blue\" FontSize=\"25\" Margin=\"10\"\n                                           Text=\"{Binding Path=Date}\" />\n                                <TextBlock Foreground=\"Blue\" FontSize=\"22\" Margin=\"10\"\n                                           Text=\"{Binding Path=Title}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ListBox.ItemTemplate>\n                </ListBox>\n            </Grid>\n        </Border>\n    </Grid>\n</Page>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/UIElements/MoviesDisplayControl.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\n\n// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace ZumoE2ETestApp.UIElements\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class MoviesDisplayControl : Page\n    {\n        private List<string> itemsAsString;\n\n        public MoviesDisplayControl()\n        {\n            this.InitializeComponent();\n\n            var bounds = Window.Current.Bounds;\n            this.grdRootPanel.Width = bounds.Width;\n            this.grdRootPanel.Height = bounds.Height;\n\n            this.itemsAsString = new List<string>();\n        }\n\n        internal void SetMoviesSource(object itemsSource)\n        {\n            this.lstMovies.ItemsSource = itemsSource;\n        }\n\n        internal IEnumerable<string> ItemsAsString\n        {\n            get { return this.itemsAsString; }\n        }\n\n        internal Task Display()\n        {\n            Popup popup = new Popup();\n            popup.Child = this;\n            TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n            popup.IsOpen = true;\n            popup.Closed += (snd, ea) =>\n            {\n                tcs.SetResult(true);\n            };\n\n            // Close the dialog after a couple of seconds, saving the items in the list\n            Task.Run(async delegate\n            {\n                await Task.Delay(3000);\n\n                await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate\n                {\n                    this.btnClose_Click_1(this.btnClose, new RoutedEventArgs());\n                });\n            });\n\n            return tcs.Task;\n        }\n\n        private void btnClose_Click_1(object sender, RoutedEventArgs e)\n        {\n            foreach (dynamic item in this.lstMovies.Items)\n            {\n                this.itemsAsString.Add(string.Format(\"{0} - {1}\", item.Date, item.Title));\n            }\n\n            ((Popup)this.Parent).IsOpen = false;\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/UIElements/SaveAppsControl.xaml",
    "content": "﻿<Page\n    x:Class=\"ZumoE2ETestApp.UIElements.SaveAppsControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:ZumoE2ETestApp.UIElements\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid Name=\"grdRootPanel\"\n          HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\"\n          Opacity=\"0.75\">\n        <Border Background=\"White\" Margin=\"20\">\n            <Grid Background=\"Blue\" Margin=\"10\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"80\" />\n                    <RowDefinition Height=\"*\" />\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <TextBlock FontSize=\"30\" Name=\"lblTitle\" Text=\"Manage saved app info\" FontWeight=\"Bold\" \n                           HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" />\n                <StackPanel Orientation=\"Horizontal\" Grid.Row=\"0\" Grid.Column=\"1\" HorizontalAlignment=\"Right\">\n                    <Button FontSize=\"30\" Margin=\"10\" Content=\"Select\" Name=\"btnSelect\" Click=\"btnSelect_Click_1\" />\n                    <Button FontSize=\"30\" Margin=\"10\" Content=\"Close\" Name=\"btnClose\" Click=\"btnClose_Click_1\" />\n                </StackPanel>\n                <ListBox Name=\"lstApps\" Grid.Row=\"1\" Grid.ColumnSpan=\"2\" Margin=\"10\"\n                         DoubleTapped=\"lstApps_DoubleTapped_1\">\n                    <ListBox.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\" Margin=\"5\">\n                                <TextBlock Margin=\"5\" Text=\"{Binding Path=AppUrl}\" />\n                                <TextBlock Margin=\"5\" Text=\"{Binding Path=AppKey}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ListBox.ItemTemplate>\n                </ListBox>\n            </Grid>\n        </Border>\n    </Grid>\n</Page>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/UIElements/SaveAppsControl.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Popups;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\n// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace ZumoE2ETestApp.UIElements\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class SaveAppsControl : Page\n    {\n        public string ApplicationUrl { get; set; }\n        public string ApplicationKey { get; set; }\n\n        public event EventHandler CloseRequested;\n\n        public SaveAppsControl(List<MobileServiceInfo> savedServices)\n        {\n            this.InitializeComponent();\n            var bounds = Window.Current.Bounds;\n            this.grdRootPanel.Width = bounds.Width;\n            this.grdRootPanel.Height = bounds.Height;\n            this.lstApps.ItemsSource = savedServices;\n        }\n\n        private async void btnSelect_Click_1(object sender, RoutedEventArgs e)\n        {\n            int selectedIndex = this.lstApps.SelectedIndex;\n            if (selectedIndex >= 0)\n            {\n                MobileServiceInfo info = (MobileServiceInfo)this.lstApps.SelectedItem;\n                this.ApplicationUrl = info.AppUrl;\n                this.ApplicationKey = info.AppKey;\n                if (this.CloseRequested != null)\n                {\n                    this.CloseRequested(this, EventArgs.Empty);\n                }\n            }\n            else\n            {\n                await new MessageDialog(\"Please select a service first\", \"Error\").ShowAsync();\n            }\n        }\n\n        private void btnClose_Click_1(object sender, RoutedEventArgs e)\n        {\n            this.ApplicationUrl = null;\n            this.ApplicationKey = null;\n            if (this.CloseRequested != null)\n            {\n                this.CloseRequested(this, EventArgs.Empty);\n            }\n        }\n\n        private void lstApps_DoubleTapped_1(object sender, DoubleTappedRoutedEventArgs e)\n        {\n            btnSelect_Click_1(sender, e);\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/UIElements/UploadLogsControl.xaml",
    "content": "﻿<Page\n    x:Class=\"ZumoE2ETestApp.UIElements.UploadLogsControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:ZumoE2ETestApp.UIElements\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid Name=\"grdRootPanel\"\n          HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\"\n          Opacity=\"0.75\">\n        <Border Background=\"White\" Margin=\"20\">\n            <Grid Background=\"Blue\" Margin=\"10\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"80\" />\n                    <RowDefinition Height=\"*\" />\n                </Grid.RowDefinitions>\n                <Button FontSize=\"30\" Margin=\"10\"\n                    HorizontalAlignment=\"Right\" Content=\"Close\" Name=\"btnClose\" Click=\"btnClose_Click_1\" />\n                <TextBlock FontSize=\"30\" Name=\"lblTitle\" Text=\"Logs for test group\" FontWeight=\"Bold\" \n                           HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" />\n                <TextBox AcceptsReturn=\"True\" Grid.Row=\"1\"\n                         ScrollViewer.HorizontalScrollBarVisibility=\"Auto\"\n                         ScrollViewer.HorizontalScrollMode=\"Auto\"\n                         ScrollViewer.VerticalScrollMode=\"Auto\"\n                         ScrollViewer.VerticalScrollBarVisibility=\"Auto\"\n                         Name=\"txtArea\" Margin=\"10\" Background=\"White\" />\n            </Grid>\n        </Border>\n    </Grid>\n</Page>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/UIElements/UploadLogsControl.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Popups;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\nusing ZumoE2ETestApp.Framework;\n\n// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace ZumoE2ETestApp.UIElements\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class UploadLogsControl : Page\n    {\n        private string uploadUrl;\n        public string logs;\n\n        public UploadLogsControl(string testGroupName, string logs, string uploadUrl)\n        {\n            this.InitializeComponent();\n            this.lblTitle.Text = \"Logs for \" + testGroupName;\n            var bounds = Window.Current.Bounds;\n            this.grdRootPanel.Width = bounds.Width;\n            this.grdRootPanel.Height = bounds.Height;\n\n            this.uploadUrl = uploadUrl;\n            this.logs = logs;\n            this.txtArea.Text = logs;\n        }\n\n        internal Task Display()\n        {\n            Task popupTask = this.DisplayPopup();\n            Task uploadTask = this.UploadLogs();\n            return Task.WhenAll(popupTask, uploadTask);\n        }\n\n        private Task DisplayPopup()\n        {\n            Popup popup = new Popup();\n            popup.Child = this;\n            TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n            popup.IsOpen = true;\n            popup.Closed += (snd, ea) =>\n            {\n                tcs.SetResult(true);\n            };\n\n            return tcs.Task;\n        }\n\n        private async Task UploadLogs()\n        {\n            string uploadUrl = this.uploadUrl;\n            if (!string.IsNullOrEmpty(uploadUrl))\n            {\n                await Util.UploadLogs(uploadUrl, this.logs, \"winstorecs\", false);\n            }\n        }\n\n        private void btnClose_Click_1(object sender, RoutedEventArgs e)\n        {\n            ((Popup)this.Parent).IsOpen = false;\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/ZumoE2ETestApp.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.props\" Condition=\"Exists('..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{B39A075E-B376-4413-9ABE-FF948F0D1F05}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>ZumoE2ETestApp</RootNamespace>\n    <AssemblyName>ZumoE2ETestApp</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <PackageCertificateKeyFile>ZumoE2ETestApp_StoreKey.pfx</PackageCertificateKeyFile>\n    <PackageCertificateThumbprint>95C222AB50077111C7A45BF84761B4714ADF5B01</PackageCertificateThumbprint>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n    <NuGetPackageImportStamp>4868e485</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Framework\\TestStatus.cs\" />\n    <Compile Include=\"Framework\\Util.cs\" />\n    <Compile Include=\"Framework\\ZumoPushGlobals.cs\" />\n    <Compile Include=\"Framework\\ZumoTest.cs\" />\n    <Compile Include=\"Framework\\ZumoTestEventArgs.cs\" />\n    <Compile Include=\"Framework\\ZumoTestGlobals.cs\" />\n    <Compile Include=\"Framework\\ZumoTestGroup.cs\" />\n    <Compile Include=\"Framework\\ZumoTestGroupEventArgs.cs\" />\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Tests\\ExceptionTypeWhichWillNeverBeThrown.cs\" />\n    <Compile Include=\"Tests\\TestStore.cs\" />\n    <Compile Include=\"Tests\\Types\\ICloneableItem.cs\" />\n    <Compile Include=\"Tests\\Types\\OfflineReadyItem.cs\" />\n    <Compile Include=\"Tests\\Types\\OfflineReadyItemNoVersion.cs\" />\n    <Compile Include=\"Tests\\Types\\StringIdRoundTripTableItem.cs\" />\n    <Compile Include=\"Tests\\Types\\Movie.cs\" />\n    <Compile Include=\"Tests\\Types\\RoundTripTableItem.cs\" />\n    <Compile Include=\"Tests\\Types\\VersionedType.cs\" />\n    <Compile Include=\"Tests\\ZumoCUDTests.cs\" />\n    <Compile Include=\"Tests\\ZumoCustomApiTests.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Tests\\ZumoLoginTests.cs\" />\n    <Compile Include=\"Tests\\ZumoMiscTests.cs\" />\n    <Compile Include=\"Tests\\ZumoOfflineTests.cs\" />\n    <Compile Include=\"Tests\\ZumoPushTests.cs\" />\n    <Compile Include=\"Tests\\ZumoQueryTestData.cs\" />\n    <Compile Include=\"Tests\\ZumoQueryTests.cs\" />\n    <Compile Include=\"Tests\\ZumoRoundTripTests.cs\" />\n    <Compile Include=\"Tests\\ZumoSetupTests.cs\" />\n    <Compile Include=\"Tests\\ZumoTestCommon.cs\" />\n    <Compile Include=\"UIElements\\AppInfoRepository.cs\" />\n    <Compile Include=\"UIElements\\InputDialog.xaml.cs\">\n      <DependentUpon>InputDialog.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"UIElements\\ListViewForTestGroup.cs\" />\n    <Compile Include=\"UIElements\\ListViewForTest.cs\" />\n    <Compile Include=\"UIElements\\MoviesDisplayControl.xaml.cs\">\n      <DependentUpon>MoviesDisplayControl.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"UIElements\\SaveAppsControl.xaml.cs\">\n      <DependentUpon>SaveAppsControl.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"UIElements\\UploadLogsControl.xaml.cs\">\n      <DependentUpon>UploadLogsControl.xaml</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n    <Content Include=\"Fonts\\LiveSymbol.ttf\" />\n    <None Include=\"packages.config\" />\n    <None Include=\"ZumoE2ETestApp_StoreKey.pfx\" />\n    <None Include=\"ZumoE2ETestApp_TemporaryKey.pfx\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Assets\\Logo.png\" />\n    <Content Include=\"Assets\\SmallLogo.png\" />\n    <Content Include=\"Assets\\SplashScreen.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\WideLogo.png\" />\n    <Page Include=\"UIElements\\MoviesDisplayControl.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"UIElements\\InputDialog.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <None Include=\"Package.StoreAssociation.xml\" />\n    <Page Include=\"UIElements\\SaveAppsControl.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"UIElements\\UploadLogsControl.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"Common\\StandardStyles.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.Live, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\LiveSDK.5.6\\WindowsXAML\\Microsoft.Live.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\WindowsAzure.MobileServices.1.3.1\\lib\\netcore45\\Microsoft.WindowsAzure.Mobile.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile.Ext, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\WindowsAzure.MobileServices.1.3.1\\lib\\netcore45\\Microsoft.WindowsAzure.Mobile.Ext.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile.SQLiteStore\">\n      <HintPath>..\\packages\\WindowsAzure.MobileServices.SQLiteStore.1.0.1\\lib\\portable-win+net45+wp8+wpa81+monotouch+monoandroid\\Microsoft.WindowsAzure.Mobile.SQLiteStore.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Newtonsoft.Json.6.0.4\\lib\\netcore45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SQLitePCL, Version=3.8.7.2, Culture=neutral, PublicKeyToken=bddade01e9c850c5, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\SQLitePCL.3.8.7.2\\lib\\netcore45\\SQLitePCL.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\win8\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\win8\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <SDKReference Include=\"Microsoft.VCLibs, version=11.0\">\n      <Name>Microsoft Visual C++ Runtime Package</Name>\n    </SDKReference>\n    <SDKReference Include=\"SQLite.WinRT, Version=3.8.8\">\n      <Name>SQLite for Windows Runtime %28SQLite.WinRT, Version=3.8.8%29</Name>\n    </SDKReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '11.0' \">\n    <VisualStudioVersion>11.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <Import Project=\"$(SolutionDir)\\.nuget\\nuget.targets\" />\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.props'))\" />\n    <Error Condition=\"!Exists('..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.targets'))\" />\n  </Target>\n  <Import Project=\"..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.targets\" Condition=\"Exists('..\\packages\\SQLitePCL.3.8.7.2\\build\\netcore45\\SQLitePCL.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"LiveSDK\" version=\"5.6\" targetFramework=\"win\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"win\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"win\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"win\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.4\" targetFramework=\"win\" />\n  <package id=\"SQLitePCL\" version=\"3.8.7.2\" targetFramework=\"win\" />\n  <package id=\"WindowsAzure.MobileServices\" version=\"1.3.1\" targetFramework=\"win\" />\n  <package id=\"WindowsAzure.MobileServices.SQLiteStore\" version=\"1.0.1\" targetFramework=\"win\" />\n</packages>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestApp.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.21005.1\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ZumoE2ETestApp\", \"ZumoE2ETestApp\\ZumoE2ETestApp.csproj\", \"{B39A075E-B376-4413-9ABE-FF948F0D1F05}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \".nuget\", \".nuget\", \"{F1DF3205-49D4-412A-892C-9A8A41F387DA}\"\n\tProjectSection(SolutionItems) = preProject\n\t\t.nuget\\NuGet.Config = .nuget\\NuGet.Config\n\t\t.nuget\\NuGet.targets = .nuget\\NuGet.targets\n\tEndProjectSection\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ZumoE2ETestAppWP8\", \"ZumoE2ETestAppWP8\\ZumoE2ETestAppWP8.csproj\", \"{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ZumoE2ETestAppNet45\", \"ZumoE2ETestAppNet45\\ZumoE2ETestAppNet45.csproj\", \"{504B8436-CB5B-4337-A290-A2105D605A27}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ZumoE2EServerApp\", \"..\\..\\ZumoE2EServerApp\\ZumoE2EServerApp.csproj\", \"{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Debug|Any CPU.Build.0 = Debug|x86\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Debug|Any CPU.Deploy.0 = Debug|x86\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Debug|x64.Build.0 = Debug|x64\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Debug|x86.Build.0 = Debug|x86\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Release|ARM.Build.0 = Release|ARM\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Release|x64.ActiveCfg = Release|x64\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Release|x64.Build.0 = Release|x64\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Release|x64.Deploy.0 = Release|x64\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Release|x86.ActiveCfg = Release|x86\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Release|x86.Build.0 = Release|x86\n\t\t{B39A075E-B376-4413-9ABE-FF948F0D1F05}.Release|x86.Deploy.0 = Release|x86\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Debug|x86.Build.0 = Debug|x86\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Release|ARM.Build.0 = Release|ARM\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Release|x86.ActiveCfg = Release|x86\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Release|x86.Build.0 = Release|x86\n\t\t{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}.Release|x86.Deploy.0 = Release|x86\n\t\t{504B8436-CB5B-4337-A290-A2105D605A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{504B8436-CB5B-4337-A290-A2105D605A27}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{504B8436-CB5B-4337-A290-A2105D605A27}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{504B8436-CB5B-4337-A290-A2105D605A27}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{504B8436-CB5B-4337-A290-A2105D605A27}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{504B8436-CB5B-4337-A290-A2105D605A27}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{504B8436-CB5B-4337-A290-A2105D605A27}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{504B8436-CB5B-4337-A290-A2105D605A27}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{504B8436-CB5B-4337-A290-A2105D605A27}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{504B8436-CB5B-4337-A290-A2105D605A27}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Release|x86.ActiveCfg = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n  </startup>\n  \n  <runtime>\n  \n       <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  \n            <dependentAssembly>\n  \n                 <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n  \n                 <bindingRedirect oldVersion=\"0.0.0.0-4.2.22.0\" newVersion=\"4.2.22.0\" />\n  \n            </dependentAssembly>\n  \n            <dependentAssembly>\n  \n                 <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n  \n                 <bindingRedirect oldVersion=\"0.0.0.0-6.0.0.0\" newVersion=\"6.0.0.0\" />\n  \n            </dependentAssembly>\n  \n       </assemblyBinding>\n  \n  </runtime>\n</configuration>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/App.xaml",
    "content": "﻿<Application x:Class=\"ZumoE2ETestApp.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             StartupUri=\"MainWindow.xaml\">\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n\n                <!-- \n                    Styles that define common aspects of the platform look and feel\n                    Required by Visual Studio project and item templates\n                 -->\n                <ResourceDictionary Source=\"Common/StandardStyles.xaml\"/>\n            </ResourceDictionary.MergedDictionaries>\n\n        </ResourceDictionary>\n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/App.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Data;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\n\nnamespace ZumoE2ETestApp\n{\n    /// <summary>\n    /// Interaction logic for App.xaml\n    /// </summary>\n    public partial class App : Application\n    {\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/Common/StandardStyles.xaml",
    "content": "﻿<!--\n    This file contains XAML styles that simplify application development.\n\n    These are not merely convenient, but are required by most Visual Studio project and item templates.\n    Removing, renaming, or otherwise modifying the content of these files may result in a project that\n    does not build, or that will not build once additional pages are added.  If variations on these\n    styles are desired it is recommended that you copy the content under a new name and modify your\n    private copy.\n-->\n\n<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:sys=\"clr-namespace:System;assembly=mscorlib\">\n\n    <FontFamily x:Key=\"ContentControlThemeFontFamily\">Segoe UI</FontFamily>\n    <FontFamily x:Key=\"SymbolThemeFontFamily\">Segoe UI Symbol</FontFamily>\n    <sys:Double x:Key=\"AppBarThemeMinHeight\">68</sys:Double>\n    <sys:Double x:Key=\"CheckBoxBorderThemeThickness\">0</sys:Double>\n    <sys:Double x:Key=\"ComboBoxArrowThemeFontSize\">21</sys:Double>\n    <sys:Double x:Key=\"ControlContentThemeFontSize\">14.667</sys:Double>\n    <sys:Double x:Key=\"GridViewItemSelectedBorderThemeThickness\">4</sys:Double>\n    <sys:Double x:Key=\"ListViewItemDisabledThemeOpacity\">0.55</sys:Double>\n    <sys:Double x:Key=\"ListViewItemDragThemeOpacity\">0.60</sys:Double>\n    <sys:Double x:Key=\"ListViewItemReorderHintThemeOffset\">40.0</sys:Double>\n    <sys:Double x:Key=\"ListViewItemSelectedBorderThemeThickness\">4</sys:Double>\n    <sys:Double x:Key=\"ProgressBarThemeMinHeight\">6</sys:Double>\n    <sys:Double x:Key=\"RadioButtonBorderThemeThickness\">0</sys:Double>\n    <sys:Double x:Key=\"ScrollBarTrackBorderThemeThickness\">0</sys:Double>\n    <sys:Double x:Key=\"SemanticZoomButtonFontSize\">14.667</sys:Double>\n    <sys:Double x:Key=\"SliderOutsideTickBarThemeHeight\">6</sys:Double>\n    <sys:Double x:Key=\"SliderTrackThemeHeight\">11</sys:Double>\n    <sys:Double x:Key=\"TextControlBackgroundThemeOpacity\">0.8</sys:Double>\n    <sys:Double x:Key=\"TextControlBorderThemeOpacity\">0.8</sys:Double>\n    <sys:Double x:Key=\"TextControlPointerOverBackgroundThemeOpacity\">0.87</sys:Double>\n    <sys:Double x:Key=\"TextControlPointerOverBorderThemeOpacity\">0.87</sys:Double>\n    <sys:Double x:Key=\"TextControlThemeMinHeight\">32</sys:Double>\n    <sys:Double x:Key=\"TextControlThemeMinWidth\">64</sys:Double>\n    <sys:Double x:Key=\"ToolTipContentThemeFontSize\">12</sys:Double>\n    <Thickness x:Key=\"AppBarBottomBorderThemeThickness\">0,2,0,0</Thickness>\n    <Thickness x:Key=\"AppBarBottomThemePadding\">0,0,0,2</Thickness>\n    <Thickness x:Key=\"AppBarTopBorderThemeThickness\">0,0,0,2</Thickness>\n    <Thickness x:Key=\"AppBarTopThemePadding\">0,2,0,0</Thickness>\n    <Thickness x:Key=\"ButtonBorderThemeThickness\">2</Thickness>\n    <Thickness x:Key=\"ComboBoxBorderThemeThickness\">2</Thickness>\n    <Thickness x:Key=\"ComboBoxPopupBorderThemeThickness\">2</Thickness>\n    <Thickness x:Key=\"FlipViewButtonBorderThemeThickness\">1</Thickness>\n    <Thickness x:Key=\"HyperlinkButtonBorderThemeThickness\">2</Thickness>\n    <Thickness x:Key=\"ListBoxBorderThemeThickness\">2</Thickness>\n    <Thickness x:Key=\"ProgressBarBorderThemeThickness\">0</Thickness>\n    <Thickness x:Key=\"RepeatButtonBorderThemeThickness\">2</Thickness>\n    <Thickness x:Key=\"ScrollBarPanningBorderThemeThickness\">1</Thickness>\n    <Thickness x:Key=\"SliderBorderThemeThickness\">0</Thickness>\n    <Thickness x:Key=\"TextControlBorderThemeThickness\">2</Thickness>\n    <Thickness x:Key=\"TextControlThemePadding\">10,3,10,5</Thickness>\n    <Thickness x:Key=\"ToggleButtonBorderThemeThickness\">2</Thickness>\n    <Thickness x:Key=\"ToolTipBorderThemeThickness\">2</Thickness>\n    <SolidColorBrush x:Key=\"AppBarBackgroundThemeBrush\" Color=\"#E5000000\" />\n    <SolidColorBrush x:Key=\"AppBarBorderThemeBrush\" Color=\"#E5000000\" />\n    <SolidColorBrush x:Key=\"AppBarItemBackgroundThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"AppBarItemDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"AppBarItemForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"AppBarItemPointerOverBackgroundThemeBrush\" Color=\"#21FFFFFF\" />\n    <SolidColorBrush x:Key=\"AppBarItemPointerOverForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"AppBarItemPressedForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ApplicationForegroundThemeBrush\" Color=\"#DEFFFFFF\" />\n    <SolidColorBrush x:Key=\"ApplicationHeaderForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ApplicationPageBackgroundThemeBrush\" Color=\"#FF1D1D1D\" />\n    <SolidColorBrush x:Key=\"ApplicationPointerOverForegroundThemeBrush\" Color=\"#CCFFFFFF\" />\n    <SolidColorBrush x:Key=\"ApplicationPressedForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ApplicationSecondaryForegroundThemeBrush\" Color=\"#99FFFFFF\" />\n    <SolidColorBrush x:Key=\"BackButtonBackgroundThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"BackButtonDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"BackButtonForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"BackButtonPointerOverBackgroundThemeBrush\" Color=\"#21FFFFFF\" />\n    <SolidColorBrush x:Key=\"BackButtonPointerOverForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"BackButtonPressedForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ButtonBackgroundThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"ButtonBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ButtonDisabledBackgroundThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"ButtonDisabledBorderThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ButtonDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ButtonForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ButtonPointerOverBackgroundThemeBrush\" Color=\"#21FFFFFF\" />\n    <SolidColorBrush x:Key=\"ButtonPointerOverForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ButtonPressedBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ButtonPressedForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"CheckBoxBackgroundThemeBrush\" Color=\"#CCFFFFFF\" />\n    <SolidColorBrush x:Key=\"CheckBoxBorderThemeBrush\" Color=\"#CCFFFFFF\" />\n    <SolidColorBrush x:Key=\"CheckBoxContentDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"CheckBoxContentForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"CheckBoxDisabledBackgroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"CheckBoxDisabledBorderThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"CheckBoxDisabledForegroundThemeBrush\" Color=\"#66000000\" />\n    <SolidColorBrush x:Key=\"CheckBoxForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"CheckBoxPointerOverBackgroundThemeBrush\" Color=\"#DEFFFFFF\" />\n    <SolidColorBrush x:Key=\"CheckBoxPointerOverBorderThemeBrush\" Color=\"#DEFFFFFF\" />\n    <SolidColorBrush x:Key=\"CheckBoxPointerOverForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"CheckBoxPressedBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"CheckBoxPressedBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"CheckBoxPressedForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ComboBoxArrowDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ComboBoxArrowForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ComboBoxArrowPressedForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ComboBoxBackgroundThemeBrush\" Color=\"#CCFFFFFF\" />\n    <SolidColorBrush x:Key=\"ComboBoxBorderThemeBrush\" Color=\"#CCFFFFFF\" />\n    <SolidColorBrush x:Key=\"ComboBoxDisabledBackgroundThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"ComboBoxDisabledBorderThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ComboBoxDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ComboBoxFocusedBackgroundThemeBrush\" Color=\"White\" />\n    <SolidColorBrush x:Key=\"ComboBoxFocusedBorderThemeBrush\" Color=\"White\" />\n    <SolidColorBrush x:Key=\"ComboBoxFocusedForegroundThemeBrush\" Color=\"White\" />\n    <SolidColorBrush x:Key=\"ComboBoxForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ComboBoxItemDisabledForegroundThemeBrush\" Color=\"#66000000\" />\n    <SolidColorBrush x:Key=\"ComboBoxItemPointerOverBackgroundThemeBrush\" Color=\"#21000000\" />\n    <SolidColorBrush x:Key=\"ComboBoxItemPointerOverForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ComboBoxItemPressedBackgroundThemeBrush\" Color=\"#FFD3D3D3\" />\n    <SolidColorBrush x:Key=\"ComboBoxItemPressedForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ComboBoxItemSelectedBackgroundThemeBrush\" Color=\"#FF4617B4\" />\n    <SolidColorBrush x:Key=\"ComboBoxItemSelectedDisabledBackgroundThemeBrush\" Color=\"#8C000000\" />\n    <SolidColorBrush x:Key=\"ComboBoxItemSelectedDisabledForegroundThemeBrush\" Color=\"#99FFFFFF\" />\n    <SolidColorBrush x:Key=\"ComboBoxItemSelectedForegroundThemeBrush\" Color=\"White\" />\n    <SolidColorBrush x:Key=\"ComboBoxItemSelectedPointerOverBackgroundThemeBrush\" Color=\"#FF5F37BE\" />\n    <SolidColorBrush x:Key=\"ComboBoxPointerOverBackgroundThemeBrush\" Color=\"#DEFFFFFF\" />\n    <SolidColorBrush x:Key=\"ComboBoxPointerOverBorderThemeBrush\" Color=\"#DEFFFFFF\" />\n    <SolidColorBrush x:Key=\"ComboBoxPopupBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ComboBoxPopupBorderThemeBrush\" Color=\"#FF212121\" />\n    <SolidColorBrush x:Key=\"ComboBoxPopupForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ComboBoxPressedBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ComboBoxPressedBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ComboBoxPressedHighlightThemeBrush\" Color=\"#FFD3D3D3\" />\n    <SolidColorBrush x:Key=\"ComboBoxPressedForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ComboBoxSelectedBackgroundThemeBrush\" Color=\"#FF4617B4\" />\n    <SolidColorBrush x:Key=\"ComboBoxSelectedPointerOverBackgroundThemeBrush\" Color=\"#FF5F37BE\" />\n    <SolidColorBrush x:Key=\"DefaultTextForegroundThemeBrush\" Color=\"White\" />\n    <SolidColorBrush x:Key=\"FlipViewButtonBackgroundThemeBrush\" Color=\"#59D5D5D5\" />\n    <SolidColorBrush x:Key=\"FlipViewButtonBorderThemeBrush\" Color=\"#59D5D5D5\" />\n    <SolidColorBrush x:Key=\"FlipViewButtonForegroundThemeBrush\" Color=\"#99000000\" />\n    <SolidColorBrush x:Key=\"FlipViewButtonPointerOverBackgroundThemeBrush\" Color=\"#F0D7D7D7\" />\n    <SolidColorBrush x:Key=\"FlipViewButtonPointerOverBorderThemeBrush\" Color=\"#9EC1C1C1\" />\n    <SolidColorBrush x:Key=\"FlipViewButtonPointerOverForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"FlipViewButtonPressedBackgroundThemeBrush\" Color=\"#BD292929\" />\n    <SolidColorBrush x:Key=\"FlipViewButtonPressedBorderThemeBrush\" Color=\"#BD292929\" />\n    <SolidColorBrush x:Key=\"FlipViewButtonPressedForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"FocusVisualBlackStrokeThemeBrush\" Color=\"Black\" />\n    <SolidColorBrush x:Key=\"FocusVisualWhiteStrokeThemeBrush\" Color=\"White\" />\n    <SolidColorBrush x:Key=\"HyperlinkButtonBackgroundThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"HyperlinkButtonBorderThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"HyperlinkDisabledThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"HyperlinkForegroundThemeBrush\" Color=\"#FF9C72FF\" />\n    <SolidColorBrush x:Key=\"HyperlinkPointerOverForegroundThemeBrush\" Color=\"#CC9C72FF\" />\n    <SolidColorBrush x:Key=\"HyperlinkPressedForegroundThemeBrush\" Color=\"#999C72FF\" />\n    <SolidColorBrush x:Key=\"ListBoxBackgroundThemeBrush\" Color=\"#CCFFFFFF\" />\n    <SolidColorBrush x:Key=\"ListBoxBorderThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"ListBoxDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ListBoxFocusBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ListBoxForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ListBoxItemDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ListBoxItemPointerOverBackgroundThemeBrush\" Color=\"#21000000\" />\n    <SolidColorBrush x:Key=\"ListBoxItemPointerOverForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ListBoxItemPressedBackgroundThemeBrush\" Color=\"#FFD3D3D3\" />\n    <SolidColorBrush x:Key=\"ListBoxItemPressedForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ListBoxItemSelectedBackgroundThemeBrush\" Color=\"#FF4617B4\" />\n    <SolidColorBrush x:Key=\"ListBoxItemSelectedDisabledBackgroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ListBoxItemSelectedDisabledForegroundThemeBrush\" Color=\"#99000000\" />\n    <SolidColorBrush x:Key=\"ListBoxItemSelectedForegroundThemeBrush\" Color=\"White\" />\n    <SolidColorBrush x:Key=\"ListBoxItemSelectedPointerOverBackgroundThemeBrush\" Color=\"#FF5F37BE\" />\n    <SolidColorBrush x:Key=\"ListViewGroupHeaderForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ListViewGroupHeaderPointerOverForegroundThemeBrush\" Color=\"#CCFFFFFF\" />\n    <SolidColorBrush x:Key=\"ListViewGroupHeaderPressedForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ListViewItemCheckHintThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ListViewItemCheckSelectingThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ListViewItemCheckThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ListViewItemDragBackgroundThemeBrush\" Color=\"#994617B4\" />\n    <SolidColorBrush x:Key=\"ListViewItemDragForegroundThemeBrush\" Color=\"White\" />\n    <SolidColorBrush x:Key=\"ListViewItemFocusBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ListViewItemOverlayBackgroundThemeBrush\" Color=\"#A6000000\" />\n    <SolidColorBrush x:Key=\"ListViewItemOverlayForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ListViewItemOverlaySecondaryForegroundThemeBrush\" Color=\"#99FFFFFF\" />\n    <SolidColorBrush x:Key=\"ListViewItemPlaceholderBackgroundThemeBrush\" Color=\"#FF3D3D3D\" />\n    <SolidColorBrush x:Key=\"ListViewItemPointerOverBackgroundThemeBrush\" Color=\"#4DFFFFFF\" />\n    <SolidColorBrush x:Key=\"ListViewItemSelectedBackgroundThemeBrush\" Color=\"#FF4617B4\" />\n    <SolidColorBrush x:Key=\"ListViewItemSelectedForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ListViewItemSelectedPointerOverBackgroundThemeBrush\" Color=\"#FF5F37BE\" />\n    <SolidColorBrush x:Key=\"ListViewItemSelectedPointerOverBorderThemeBrush\" Color=\"#FF5F37BE\" />\n    <SolidColorBrush x:Key=\"ProgressBarBackgroundThemeBrush\" Color=\"#59FFFFFF\" />\n    <SolidColorBrush x:Key=\"ProgressBarBorderThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"ProgressBarForegroundThemeBrush\" Color=\"#FF5B2EC5\" />\n    <SolidColorBrush x:Key=\"ProgressBarIndeterminateForegroundThemeBrush\" Color=\"#FF8A57FF\" />\n    <SolidColorBrush x:Key=\"RadioButtonBackgroundThemeBrush\" Color=\"#CCFFFFFF\" />\n    <SolidColorBrush x:Key=\"RadioButtonBorderThemeBrush\" Color=\"#CCFFFFFF\" />\n    <SolidColorBrush x:Key=\"RadioButtonContentDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"RadioButtonContentForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"RadioButtonDisabledBackgroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"RadioButtonDisabledBorderThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"RadioButtonDisabledForegroundThemeBrush\" Color=\"#66000000\" />\n    <SolidColorBrush x:Key=\"RadioButtonForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"RadioButtonPointerOverBackgroundThemeBrush\" Color=\"#DEFFFFFF\" />\n    <SolidColorBrush x:Key=\"RadioButtonPointerOverBorderThemeBrush\" Color=\"#DEFFFFFF\" />\n    <SolidColorBrush x:Key=\"RadioButtonPointerOverForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"RadioButtonPressedBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"RadioButtonPressedBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"RadioButtonPressedForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"RepeatButtonBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"RepeatButtonDisabledBackgroundThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"RepeatButtonDisabledBorderThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"RepeatButtonDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"RepeatButtonForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"RepeatButtonPointerOverBackgroundThemeBrush\" Color=\"#21FFFFFF\" />\n    <SolidColorBrush x:Key=\"RepeatButtonPointerOverForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"RepeatButtonPressedBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"RepeatButtonPressedForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ScrollBarButtonForegroundThemeBrush\" Color=\"#99000000\" />\n    <SolidColorBrush x:Key=\"ScrollBarButtonPointerOverBackgroundThemeBrush\" Color=\"#FFDADADA\" />\n    <SolidColorBrush x:Key=\"ScrollBarButtonPointerOverBorderThemeBrush\" Color=\"#FFDADADA\" />\n    <SolidColorBrush x:Key=\"ScrollBarButtonPointerOverForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ScrollBarButtonPressedBackgroundThemeBrush\" Color=\"#99000000\" />\n    <SolidColorBrush x:Key=\"ScrollBarButtonPressedBorderThemeBrush\" Color=\"#99000000\" />\n    <SolidColorBrush x:Key=\"ScrollBarButtonPressedForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ScrollBarPanningBackgroundThemeBrush\" Color=\"#FFCDCDCD\" />\n    <SolidColorBrush x:Key=\"ScrollBarPanningBorderThemeBrush\" Color=\"#7D9A9A9A\" />\n    <SolidColorBrush x:Key=\"ScrollBarThumbBackgroundThemeBrush\" Color=\"#FFCDCDCD\" />\n    <SolidColorBrush x:Key=\"ScrollBarThumbBorderThemeBrush\" Color=\"#3B555555\" />\n    <SolidColorBrush x:Key=\"ScrollBarThumbPointerOverBackgroundThemeBrush\" Color=\"#FFDADADA\" />\n    <SolidColorBrush x:Key=\"ScrollBarThumbPointerOverBorderThemeBrush\" Color=\"#6BB7B7B7\" />\n    <SolidColorBrush x:Key=\"ScrollBarThumbPressedBackgroundThemeBrush\" Color=\"#99000000\" />\n    <SolidColorBrush x:Key=\"ScrollBarThumbPressedBorderThemeBrush\" Color=\"#ED555555\" />\n    <SolidColorBrush x:Key=\"ScrollBarTrackBackgroundThemeBrush\" Color=\"#59D5D5D5\" />\n    <SolidColorBrush x:Key=\"ScrollBarTrackBorderThemeBrush\" Color=\"#59D5D5D5\" />\n    <SolidColorBrush x:Key=\"SemanticZoomButtonBackgroundThemeBrush\" Color=\"#59D5D5D5\" />\n    <SolidColorBrush x:Key=\"SemanticZoomButtonBorderThemeBrush\" Color=\"#59D5D5D5\" />\n    <SolidColorBrush x:Key=\"SemanticZoomButtonForegroundThemeBrush\" Color=\"#99000000\" />\n    <SolidColorBrush x:Key=\"SemanticZoomButtonPointerOverBackgroundThemeBrush\" Color=\"#FFDADADA\" />\n    <SolidColorBrush x:Key=\"SemanticZoomButtonPointerOverBorderThemeBrush\" Color=\"#FFDADADA\" />\n    <SolidColorBrush x:Key=\"SemanticZoomButtonPointerOverForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"SemanticZoomButtonPressedBackgroundThemeBrush\" Color=\"#99000000\" />\n    <SolidColorBrush x:Key=\"SemanticZoomButtonPressedBorderThemeBrush\" Color=\"#99000000\" />\n    <SolidColorBrush x:Key=\"SemanticZoomButtonPressedForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderBorderThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"SliderDisabledBorderThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"SliderThumbBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderThumbBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderThumbDisabledBackgroundThemeBrush\" Color=\"#FF7E7E7E\" />\n    <SolidColorBrush x:Key=\"SliderThumbPointerOverBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderThumbPointerOverBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderThumbPressedBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderThumbPressedBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderTickMarkInlineBackgroundThemeBrush\" Color=\"Black\" />\n    <SolidColorBrush x:Key=\"SliderTickMarkInlineDisabledForegroundThemeBrush\" Color=\"Black\" />\n    <SolidColorBrush x:Key=\"SliderTickmarkOutsideBackgroundThemeBrush\" Color=\"#80FFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderTickMarkOutsideDisabledForegroundThemeBrush\" Color=\"#80FFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderTrackBackgroundThemeBrush\" Color=\"#29FFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderTrackDecreaseBackgroundThemeBrush\" Color=\"#FF5B2EC5\" />\n    <SolidColorBrush x:Key=\"SliderTrackDecreaseDisabledBackgroundThemeBrush\" Color=\"#1FFFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderTrackDecreasePointerOverBackgroundThemeBrush\" Color=\"#FF724BCD\" />\n    <SolidColorBrush x:Key=\"SliderTrackDecreasePressedBackgroundThemeBrush\" Color=\"#FF8152EF\" />\n    <SolidColorBrush x:Key=\"SliderTrackDisabledBackgroundThemeBrush\" Color=\"#29FFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderTrackPointerOverBackgroundThemeBrush\" Color=\"#46FFFFFF\" />\n    <SolidColorBrush x:Key=\"SliderTrackPressedBackgroundThemeBrush\" Color=\"#59FFFFFF\" />\n    <SolidColorBrush x:Key=\"TextBoxBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"TextBoxBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"TextBoxButtonBackgroundThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"TextBoxButtonBorderThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"TextBoxButtonForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"TextBoxButtonPointerOverBackgroundThemeBrush\" Color=\"#FFDEDEDE\" />\n    <SolidColorBrush x:Key=\"TextBoxButtonPointerOverBorderThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"TextBoxButtonPointerOverForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"TextBoxButtonPressedBackgroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"TextBoxButtonPressedBorderThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"TextBoxButtonPressedForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"TextBoxDisabledBackgroundThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"TextBoxDisabledBorderThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"TextBoxDisabledForegroundThemeBrush\" Color=\"#FF666666\" />\n    <SolidColorBrush x:Key=\"TextBoxForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ThumbBackgroundThemeBrush\" Color=\"#FFCDCDCD\" />\n    <SolidColorBrush x:Key=\"ThumbBorderThemeBrush\" Color=\"#3B555555\" />\n    <SolidColorBrush x:Key=\"ThumbPointerOverBackgroundThemeBrush\" Color=\"#FFDADADA\" />\n    <SolidColorBrush x:Key=\"ThumbPointerOverBorderThemeBrush\" Color=\"#6BB7B7B7\" />\n    <SolidColorBrush x:Key=\"ThumbPressedBackgroundThemeBrush\" Color=\"#99000000\" />\n    <SolidColorBrush x:Key=\"ThumbPressedBorderThemeBrush\" Color=\"#ED555555\" />\n    <SolidColorBrush x:Key=\"ToggleButtonBackgroundThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"ToggleButtonBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonCheckedBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonCheckedBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonCheckedDisabledBackgroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonCheckedDisabledForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ToggleButtonCheckedForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ToggleButtonCheckedPointerOverBackgroundThemeBrush\" Color=\"#99FFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonCheckedPointerOverBorderThemeBrush\" Color=\"#99FFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonCheckedPressedBackgroundThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"ToggleButtonCheckedPressedBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonCheckedPressedForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonDisabledBorderThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonPointerOverBackgroundThemeBrush\" Color=\"#21FFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonPressedBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleButtonPressedForegroundThemeBrush\" Color=\"#FF000000\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchCurtainBackgroundThemeBrush\" Color=\"#FF5729C1\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchCurtainDisabledBackgroundThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchCurtainPointerOverBackgroundThemeBrush\" Color=\"#FF6E46CA\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchCurtainPressedBackgroundThemeBrush\" Color=\"#FF7E4FEC\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchHeaderDisabledForegroundThemeBrush\" Color=\"#66FFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchHeaderForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchOuterBorderBorderThemeBrush\" Color=\"#59FFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchOuterBorderDisabledBorderThemeBrush\" Color=\"#33FFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchThumbBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchThumbBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchThumbDisabledBackgroundThemeBrush\" Color=\"#FF7E7E7E\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchThumbDisabledBorderThemeBrush\" Color=\"#FF7E7E7E\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchThumbPointerOverBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchThumbPointerOverBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchThumbPressedBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchThumbPressedForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchTrackBackgroundThemeBrush\" Color=\"#42FFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchTrackBorderThemeBrush\" Color=\"Transparent\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchTrackDisabledBackgroundThemeBrush\" Color=\"#1FFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchTrackPointerOverBackgroundThemeBrush\" Color=\"#4AFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToggleSwitchTrackPressedBackgroundThemeBrush\" Color=\"#59FFFFFF\" />\n    <SolidColorBrush x:Key=\"ToolTipBackgroundThemeBrush\" Color=\"#FFFFFFFF\" />\n    <SolidColorBrush x:Key=\"ToolTipBorderThemeBrush\" Color=\"#FF808080\" />\n    <SolidColorBrush x:Key=\"ToolTipForegroundThemeBrush\" Color=\"#FF666666\" />\n\n    <sys:String x:Key=\"BackButtonGlyph\">&#xE071;</sys:String>\n    <sys:String x:Key=\"BackButtonSnappedGlyph\">&#xE0BA;</sys:String>\n\n    <Style TargetType=\"Button\">\n        <Setter Property=\"Background\" Value=\"{StaticResource ButtonBackgroundThemeBrush}\" />\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ButtonForegroundThemeBrush}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{StaticResource ButtonBorderThemeBrush}\" />\n        <Setter Property=\"BorderThickness\" Value=\"{StaticResource ButtonBorderThemeThickness}\" />\n        <Setter Property=\"Padding\" Value=\"12,4,12,4\" />\n        <Setter Property=\"HorizontalAlignment\" Value=\"Left\" />\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\" />\n        <Setter Property=\"FontWeight\" Value=\"SemiBold\" />\n        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\" />\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid>\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Border\"\n                                                                       Storyboard.TargetProperty=\"Background\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ButtonPointerOverBackgroundThemeBrush}\" />\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\"\n                                                                       Storyboard.TargetProperty=\"(TextElement.Foreground)\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ButtonPointerOverForegroundThemeBrush}\" />\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Border\"\n                                                                       Storyboard.TargetProperty=\"Background\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ButtonPressedBackgroundThemeBrush}\" />\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\"\n                                                                       Storyboard.TargetProperty=\"(TextElement.Foreground)\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ButtonPressedForegroundThemeBrush}\" />\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Border\"\n                                                                       Storyboard.TargetProperty=\"Background\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ButtonDisabledBackgroundThemeBrush}\" />\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Border\"\n                                                                       Storyboard.TargetProperty=\"BorderBrush\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ButtonDisabledBorderThemeBrush}\" />\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\"\n                                                                       Storyboard.TargetProperty=\"(TextElement.Foreground)\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ButtonDisabledForegroundThemeBrush}\" />\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation Storyboard.TargetName=\"FocusVisualWhite\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         To=\"1\"\n                                                         Duration=\"0\" />\n                                        <DoubleAnimation Storyboard.TargetName=\"FocusVisualBlack\"\n                                                         Storyboard.TargetProperty=\"Opacity\"\n                                                         To=\"1\"\n                                                         Duration=\"0\" />\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                        <Border x:Name=\"Border\"\n                                Background=\"{TemplateBinding Background}\"\n                                BorderBrush=\"{TemplateBinding BorderBrush}\"\n                                BorderThickness=\"{TemplateBinding BorderThickness}\"\n                                Margin=\"3\">\n                            <ContentPresenter x:Name=\"ContentPresenter\"\n                                              Content=\"{TemplateBinding Content}\"\n                                              ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                              Margin=\"{TemplateBinding Padding}\"\n                                              HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                              VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" />\n                        </Border>\n                        <Rectangle x:Name=\"FocusVisualWhite\"\n                                   IsHitTestVisible=\"False\"\n                                   Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                                   StrokeEndLineCap=\"Square\"\n                                   StrokeDashArray=\"1,1\"\n                                   Opacity=\"0\"\n                                   StrokeDashOffset=\"1.5\" />\n                        <Rectangle x:Name=\"FocusVisualBlack\"\n                                   IsHitTestVisible=\"False\"\n                                   Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                                   StrokeEndLineCap=\"Square\"\n                                   StrokeDashArray=\"1,1\"\n                                   Opacity=\"0\"\n                                   StrokeDashOffset=\"0.5\" />\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- TextBlock styles -->\n\n    <Style x:Key=\"BasicTextStyle\" TargetType=\"TextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationForegroundThemeBrush}\"/>\n        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\"/>\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\" />\n\n    <Style x:Key=\"BaselineTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"HeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"40\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-2\" Y=\"8\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"SubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"26.667\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"30\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"6\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"TitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiBold\"/>\n    </Style>\n\n    <Style x:Key=\"SubtitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n    </Style>\n\n    <Style x:Key=\"ItemTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\"/>\n\n    <Style x:Key=\"BodyTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n    </Style>\n\n    <Style x:Key=\"CaptionTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"12\"/>\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n    </Style>\n\n    <Style x:Key=\"GroupHeaderTextStyle\" TargetType=\"TextBlock\">\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n        <Setter Property=\"FontSize\" Value=\"26.667\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"30\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"6\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- Button styles -->\n    \n    <!--\n        TextButtonStyle is used to style a Button using subheader-styled text with no other adornment.  There\n        are two styles that are based on TextButtonStyle (TextPrimaryButtonStyle and TextSecondaryButtonStyle)\n        which are used in the GroupedItemsPage as a group header and in the FileOpenPickerPage for triggering\n        commands.\n    -->\n    <Style x:Key=\"TextButtonStyle\" TargetType=\"ButtonBase\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"MinHeight\" Value=\"0\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"ButtonBase\">\n                    <Grid Background=\"Transparent\">\n                        <ContentPresenter x:Name=\"Text\" Content=\"{TemplateBinding Content}\" />\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualWhite\" Storyboard.TargetProperty=\"Opacity\"/>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualBlack\" Storyboard.TargetProperty=\"Opacity\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\"/>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CheckStates\">\n                                <VisualState x:Name=\"Checked\"/>\n                                <VisualState x:Name=\"Unchecked\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Indeterminate\"/>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"TextPrimaryButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource TextButtonStyle}\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationHeaderForegroundThemeBrush}\"/>\n    </Style>\n\n    <Style x:Key=\"TextSecondaryButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource TextButtonStyle}\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n    </Style>\n\n    <!--\n        TextRadioButtonStyle is used to style a RadioButton using subheader-styled text with no other adornment.\n        This style is used in the SearchResultsPage to allow selection among filters.\n    -->\n    <Style x:Key=\"TextRadioButtonStyle\" TargetType=\"RadioButton\" BasedOn=\"{StaticResource TextButtonStyle}\">\n        <Setter Property=\"Margin\" Value=\"0,0,30,0\"/>\n    </Style>\n\n    <!--\n        AppBarButtonStyle is used to style a Button (or ToggleButton) for use in an App Bar.  Content will be centered \n        and should fit within the 40 pixel radius glyph provided.  16-point Segoe UI Symbol is used for content text \n        to simplify the use of glyphs from that font.  AutomationProperties.Name is used for the text below the glyph.\n    -->\n    <Style x:Key=\"AppBarButtonStyle\" TargetType=\"ButtonBase\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"20\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"App Bar Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"ButtonBase\">\n                    <Grid x:Name=\"RootGrid\" Width=\"100\" Background=\"Transparent\">\n                        <StackPanel VerticalAlignment=\"Top\" Margin=\"0,12,0,11\">\n                            <Grid Width=\"40\" Height=\"40\" Margin=\"0,0,0,5\" HorizontalAlignment=\"Center\">\n                                <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0A8;\" FontFamily=\"Segoe UI Symbol\" FontSize=\"53.333\" Margin=\"-4,-19,0,0\" Foreground=\"{StaticResource AppBarItemBackgroundThemeBrush}\"/>\n                                <TextBlock x:Name=\"OutlineGlyph\" Text=\"&#xE0A7;\" FontFamily=\"Segoe UI Symbol\" FontSize=\"53.333\" Margin=\"-4,-19,0,0\"/>\n                                <ContentPresenter x:Name=\"Content\" HorizontalAlignment=\"Center\" Margin=\"-1,-1,0,0\" VerticalAlignment=\"Center\"/>\n                            </Grid>\n                            <TextBlock\n                                x:Name=\"TextLabel\"\n                                Text=\"{TemplateBinding AutomationProperties.Name}\"\n                                Foreground=\"{StaticResource AppBarItemForegroundThemeBrush}\"\n                                Margin=\"0,0,2,0\"\n                                FontSize=\"12\"\n                                TextAlignment=\"Center\"\n                                Width=\"88\"\n                                MaxHeight=\"32\"\n                                TextTrimming=\"WordEllipsis\"\n                                Style=\"{StaticResource BasicTextStyle}\"/>\n                        </StackPanel>\n                        <Rectangle\n                                x:Name=\"FocusVisualWhite\"\n                                IsHitTestVisible=\"False\"\n                                Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                                StrokeEndLineCap=\"Square\"\n                                StrokeDashArray=\"1,1\"\n                                Opacity=\"0\"\n                                StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                                x:Name=\"FocusVisualBlack\"\n                                IsHitTestVisible=\"False\"\n                                Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                                StrokeEndLineCap=\"Square\"\n                                StrokeDashArray=\"1,1\"\n                                Opacity=\"0\"\n                                StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"ApplicationViewStates\">\n                                <VisualState x:Name=\"FullScreenLandscape\"/>\n                                <VisualState x:Name=\"Filled\"/>\n                                <VisualState x:Name=\"FullScreenPortrait\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Width\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"60\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Snapped\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Width\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"60\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                                Storyboard.TargetName=\"FocusVisualWhite\"\n                                                Storyboard.TargetProperty=\"Opacity\"\n                                                To=\"1\"\n                                                Duration=\"0\"/>\n                                        <DoubleAnimation\n                                                Storyboard.TargetName=\"FocusVisualBlack\"\n                                                Storyboard.TargetProperty=\"Opacity\"\n                                                To=\"1\"\n                                                Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CheckStates\">\n                                <VisualState x:Name=\"Checked\">\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0\" To=\"0\" Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Opacity\"/>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundCheckedGlyph\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unchecked\"/>\n                                <VisualState x:Name=\"Indeterminate\"/>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- \n        Standard AppBarButton Styles for use with Button and ToggleButton\n    \n        An AppBarButton Style is provided for each of the glyphs in the Segoe UI Symbol font.  \n        Uncomment any style you reference (as not all may be required).\n    -->\n\n    <!--\n    \n    <Style x:Key=\"SkipBackAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SkipBackAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skip Back\"/>\n        <Setter Property=\"Content\" Value=\"&#xE100;\"/>\n    </Style>\n    <Style x:Key=\"SkipAheadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SkipAheadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skip Ahead\"/>\n        <Setter Property=\"Content\" Value=\"&#xE101;\"/>\n    </Style>\n    <Style x:Key=\"PlayAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PlayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Play\"/>\n        <Setter Property=\"Content\" Value=\"&#xE102;\"/>\n    </Style>\n    <Style x:Key=\"PauseAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PauseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pause\"/>\n        <Setter Property=\"Content\" Value=\"&#xE103;\"/>\n    </Style>\n    <Style x:Key=\"EditAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"EditAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Edit\"/>\n        <Setter Property=\"Content\" Value=\"&#xE104;\"/>\n    </Style>\n    <Style x:Key=\"SaveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SaveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Save\"/>\n        <Setter Property=\"Content\" Value=\"&#xE105;\"/>\n    </Style>\n    <Style x:Key=\"DeleteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DeleteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Delete\"/>\n        <Setter Property=\"Content\" Value=\"&#xE106;\"/>\n    </Style>\n    <Style x:Key=\"DiscardAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DiscardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Discard\"/>\n        <Setter Property=\"Content\" Value=\"&#xE107;\"/>\n    </Style>\n    <Style x:Key=\"RemoveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RemoveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Remove\"/>\n        <Setter Property=\"Content\" Value=\"&#xE108;\"/>\n    </Style>\n    <Style x:Key=\"AddAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AddAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Add\"/>\n        <Setter Property=\"Content\" Value=\"&#xE109;\"/>\n    </Style>\n    <Style x:Key=\"NoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"No\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10A;\"/>\n    </Style>\n    <Style x:Key=\"YesAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"YesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Yes\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10B;\"/>\n    </Style>\n    <Style x:Key=\"MoreAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MoreAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"More\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10C;\"/>\n    </Style>\n    <Style x:Key=\"RedoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RedoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Redo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10D;\"/>\n    </Style>\n    <Style x:Key=\"UndoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UndoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Undo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10E;\"/>\n    </Style>\n    <Style x:Key=\"HomeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HomeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Home\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10F;\"/>\n    </Style>\n    <Style x:Key=\"OutAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Out\"/>\n        <Setter Property=\"Content\" Value=\"&#xE110;\"/>\n    </Style>\n    <Style x:Key=\"NextAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NextAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Next\"/>\n        <Setter Property=\"Content\" Value=\"&#xE111;\"/>\n    </Style>\n    <Style x:Key=\"PreviousAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PreviousAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Previous\"/>\n        <Setter Property=\"Content\" Value=\"&#xE112;\"/>\n    </Style>\n    <Style x:Key=\"FavoriteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FavoriteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Favorite\"/>\n        <Setter Property=\"Content\" Value=\"&#xE113;\"/>\n    </Style>\n    <Style x:Key=\"PhotoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhotoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Photo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE114;\"/>\n    </Style>\n    <Style x:Key=\"SettingsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SettingsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Settings\"/>\n        <Setter Property=\"Content\" Value=\"&#xE115;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"VideoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VideoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Video\"/>\n        <Setter Property=\"Content\" Value=\"&#xE116;\"/>\n    </Style>\n    <Style x:Key=\"RefreshAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RefreshAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Refresh\"/>\n        <Setter Property=\"Content\" Value=\"&#xE117;\"/>\n    </Style>\n    <Style x:Key=\"DownloadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DownloadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Download\"/>\n        <Setter Property=\"Content\" Value=\"&#xE118;\"/>\n    </Style>\n    <Style x:Key=\"MailAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mail\"/>\n        <Setter Property=\"Content\" Value=\"&#xE119;\"/>\n    </Style>\n    <Style x:Key=\"SearchAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SearchAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Search\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11A;\"/>\n    </Style>\n    <Style x:Key=\"HelpAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HelpAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Help\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11B;\"/>\n    </Style>\n    <Style x:Key=\"UploadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UploadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Upload\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11C;\"/>\n    </Style>\n    <Style x:Key=\"EmojiAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"EmojiAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Emoji\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11D;\"/>\n    </Style>\n    <Style x:Key=\"TwoPageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TwoPageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Two Page\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11E;\"/>\n    </Style>\n    <Style x:Key=\"LeaveChatAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LeaveChatAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Upload\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11F;\"/>\n    </Style>\n    <Style x:Key=\"MailForwardAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailForwardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Forward Mail\"/>\n        <Setter Property=\"Content\" Value=\"&#xE120;\"/>\n    </Style>\n    <Style x:Key=\"ClockAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ClockAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Clock\"/>\n        <Setter Property=\"Content\" Value=\"&#xE121;\"/>\n    </Style>\n    <Style x:Key=\"SendAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SendAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Send\"/>\n        <Setter Property=\"Content\" Value=\"&#xE122;\"/>\n    </Style>\n    <Style x:Key=\"CropAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CropAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Crop\"/>\n        <Setter Property=\"Content\" Value=\"&#xE123;\"/>\n    </Style>\n    <Style x:Key=\"RotateCameraAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RotateCameraAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Rotate Camera\"/>\n        <Setter Property=\"Content\" Value=\"&#xE124;\"/>\n    </Style>\n    <Style x:Key=\"PeopleAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PeopleAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"People\"/>\n        <Setter Property=\"Content\" Value=\"&#xE125;\"/>\n    </Style>\n    <Style x:Key=\"ClosePaneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ClosePaneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Close Pane\"/>\n        <Setter Property=\"Content\" Value=\"&#xE126;\"/>\n    </Style>\n    <Style x:Key=\"OpenPaneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenPaneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open Pane\"/>\n        <Setter Property=\"Content\" Value=\"&#xE127;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"WorldAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"WorldAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"World\"/>\n        <Setter Property=\"Content\" Value=\"&#xE128;\"/>\n    </Style>\n    <Style x:Key=\"FlagAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FlagAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Flag\"/>\n        <Setter Property=\"Content\" Value=\"&#xE129;\"/>\n    </Style>\n    <Style x:Key=\"PreviewLinkAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PreviewLinkAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Preview Link\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12A;\"/>\n    </Style>\n    <Style x:Key=\"GlobeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GlobeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Globe\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12B;\"/>\n    </Style>\n    <Style x:Key=\"TrimAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TrimAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Trim\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12C;\"/>\n    </Style>\n    <Style x:Key=\"AttachCameraAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AttachCameraAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Attach Camera\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12D;\"/>\n    </Style>\n    <Style x:Key=\"ZoomInAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZoomInAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zoom In\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12E;\"/>\n    </Style>\n    <Style x:Key=\"BookmarksAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BookmarksAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Bookmarks\"/>\n        <Setter Property=\"Content\" Value=\"&#xE12F;\"/>\n    </Style>\n    <Style x:Key=\"DocumentAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DocumentAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Document\"/>\n        <Setter Property=\"Content\" Value=\"&#xE130;\"/>\n    </Style>\n    <Style x:Key=\"ProtectedDocumentAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ProtectedDocumentAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Protected Document\"/>\n        <Setter Property=\"Content\" Value=\"&#xE131;\"/>\n    </Style>\n    <Style x:Key=\"PageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Page\"/>\n        <Setter Property=\"Content\" Value=\"&#xE132;\"/>\n    </Style>\n    <Style x:Key=\"BulletsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BulletsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Bullets\"/>\n        <Setter Property=\"Content\" Value=\"&#xE133;\"/>\n    </Style>\n    <Style x:Key=\"CommentAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CommentAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Comment\"/>\n        <Setter Property=\"Content\" Value=\"&#xE134;\"/>\n    </Style>\n    <Style x:Key=\"Mail2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Mail2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mail2\"/>\n        <Setter Property=\"Content\" Value=\"&#xE135;\"/>\n    </Style>\n    <Style x:Key=\"ContactInfoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ContactInfoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Contact Info\"/>\n        <Setter Property=\"Content\" Value=\"&#xE136;\"/>\n    </Style>\n    <Style x:Key=\"HangUpAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HangUpAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Hang Up\"/>\n        <Setter Property=\"Content\" Value=\"&#xE137;\"/>\n    </Style>\n    <Style x:Key=\"ViewAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ViewAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"View All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE138;\"/>\n    </Style>\n    <Style x:Key=\"MapPinAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MapPinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Map Pin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE139;\"/>\n    </Style>\n    <Style x:Key=\"PhoneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhoneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Phone\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13A;\"/>\n    </Style>\n    <Style x:Key=\"VideoChatAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VideoChatAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Video Chat\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13B;\"/>\n    </Style>\n    <Style x:Key=\"SwitchAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SwitchAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Switch\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13C;\"/>\n    </Style>\n    <Style x:Key=\"ContactAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ContactAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Contact\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13D;\"/>\n    </Style>\n\n    -->\n\n    <!--\n\n    <Style x:Key=\"RenameAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RenameAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Rename\"/>\n        <Setter Property=\"Content\" Value=\"&#xE13E;\"/>\n    </Style>\n    <Style x:Key=\"PinAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE141;\"/>\n    </Style>\n    <Style x:Key=\"MusicInfoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MusicInfoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Music Info\"/>\n        <Setter Property=\"Content\" Value=\"&#xE142;\"/>\n    </Style>\n    <Style x:Key=\"GoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Go\"/>\n        <Setter Property=\"Content\" Value=\"&#xE143;\"/>\n    </Style>\n    <Style x:Key=\"KeyboardAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"KeyboardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Keyboard\"/>\n        <Setter Property=\"Content\" Value=\"&#xE144;\"/>\n    </Style>\n    <Style x:Key=\"DockLeftAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DockLeftAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dock Left\"/>\n        <Setter Property=\"Content\" Value=\"&#xE145;\"/>\n    </Style>\n    <Style x:Key=\"DockRightAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DockRightAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dock Right\"/>\n        <Setter Property=\"Content\" Value=\"&#xE146;\"/>\n    </Style>\n    <Style x:Key=\"DockBottomAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DockBottomAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dock Bottom\"/>\n        <Setter Property=\"Content\" Value=\"&#xE147;\"/>\n    </Style>\n    <Style x:Key=\"RemoteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RemoteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Remote\"/>\n        <Setter Property=\"Content\" Value=\"&#xE148;\"/>\n    </Style>\n    <Style x:Key=\"SyncAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SyncAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Sync\"/>\n        <Setter Property=\"Content\" Value=\"&#xE149;\"/>\n    </Style>\n    <Style x:Key=\"RotateAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RotateAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Rotate\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14A;\"/>\n    </Style>\n    <Style x:Key=\"ShuffleAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShuffleAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Shuffle\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14B;\"/>\n    </Style>\n    <Style x:Key=\"ListAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ListAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"List\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14C;\"/>\n    </Style>\n    <Style x:Key=\"ShopAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShopAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Shop\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14D;\"/>\n    </Style>\n    <Style x:Key=\"SelectAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SelectAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Select All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14E;\"/>\n    </Style>\n    <Style x:Key=\"OrientationAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OrientationAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Orientation\"/>\n        <Setter Property=\"Content\" Value=\"&#xE14F;\"/>\n    </Style>\n    <Style x:Key=\"ImportAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ImportAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Import\"/>\n        <Setter Property=\"Content\" Value=\"&#xE150;\"/>\n    </Style>\n    <Style x:Key=\"ImportAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ImportAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Import All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE151;\"/>\n    </Style>\n    <Style x:Key=\"BrowsePhotosAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BrowsePhotosAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Browse Photos\"/>\n        <Setter Property=\"Content\" Value=\"&#xE155;\"/>\n    </Style>\n    <Style x:Key=\"WebcamAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"WebcamAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Webcam\"/>\n        <Setter Property=\"Content\" Value=\"&#xE156;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"PicturesAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PicturesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pictures\"/>\n        <Setter Property=\"Content\" Value=\"&#xE158;\"/>\n    </Style>\n    <Style x:Key=\"SaveLocalAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SaveLocalAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Save Local\"/>\n        <Setter Property=\"Content\" Value=\"&#xE159;\"/>\n    </Style>\n    <Style x:Key=\"CaptionAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CaptionAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Caption\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15A;\"/>\n    </Style>\n    <Style x:Key=\"StopAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"StopAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Stop\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15B;\"/>\n    </Style>\n    <Style x:Key=\"ShowResultsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShowResultsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Show Results\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15C;\"/>\n    </Style>\n    <Style x:Key=\"VolumeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VolumeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Volume\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15D;\"/>\n    </Style>\n    <Style x:Key=\"RepairAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RepairAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Repair\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15E;\"/>\n    </Style>\n    <Style x:Key=\"MessageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MessageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Message\"/>\n        <Setter Property=\"Content\" Value=\"&#xE15F;\"/>\n    </Style>\n    <Style x:Key=\"Page2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Page2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Page2\"/>\n        <Setter Property=\"Content\" Value=\"&#xE160;\"/>\n    </Style>\n    <Style x:Key=\"CalendarDayAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarDayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Day\"/>\n        <Setter Property=\"Content\" Value=\"&#xE161;\"/>\n    </Style>\n    <Style x:Key=\"CalendarWeekAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarWeekAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Week\"/>\n        <Setter Property=\"Content\" Value=\"&#xE162;\"/>\n    </Style>\n    <Style x:Key=\"CalendarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Calendar\"/>\n        <Setter Property=\"Content\" Value=\"&#xE163;\"/>\n    </Style>\n    <Style x:Key=\"CharactersAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CharactersAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Characters\"/>\n        <Setter Property=\"Content\" Value=\"&#xE164;\"/>\n    </Style>\n    <Style x:Key=\"MailReplyAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailReplyAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Reply All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE165;\"/>\n    </Style>\n    <Style x:Key=\"ReadAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ReadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Read\"/>\n        <Setter Property=\"Content\" Value=\"&#xE166;\"/>\n    </Style>\n    <Style x:Key=\"LinkAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LinkAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Link\"/>\n        <Setter Property=\"Content\" Value=\"&#xE167;\"/>\n    </Style>\n    <Style x:Key=\"AccountsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AccountsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Accounts\"/>\n        <Setter Property=\"Content\" Value=\"&#xE168;\"/>\n    </Style>\n    <Style x:Key=\"ShowBccAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ShowBccAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Show Bcc\"/>\n        <Setter Property=\"Content\" Value=\"&#xE169;\"/>\n    </Style>\n    <Style x:Key=\"HideBccAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HideBccAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Hide Bcc\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16A;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"CutAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Cut\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16B;\"/>\n    </Style>\n    <Style x:Key=\"AttachAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AttachAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Attach\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16C;\"/>\n    </Style>\n    <Style x:Key=\"PasteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PasteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Paste\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16D;\"/>\n    </Style>\n    <Style x:Key=\"FilterAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FilterAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Filter\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16E;\"/>\n    </Style>\n    <Style x:Key=\"CopyAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CopyAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Copy\"/>\n        <Setter Property=\"Content\" Value=\"&#xE16F;\"/>\n    </Style>\n    <Style x:Key=\"Emoji2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Emoji2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Emoji2\"/>\n        <Setter Property=\"Content\" Value=\"&#xE170;\"/>\n    </Style>\n    <Style x:Key=\"ImportantAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ImportantAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Important\"/>\n        <Setter Property=\"Content\" Value=\"&#xE171;\"/>\n    </Style>\n    <Style x:Key=\"MailReplyAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailReplyAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Reply\"/>\n        <Setter Property=\"Content\" Value=\"&#xE172;\"/>\n    </Style>\n    <Style x:Key=\"SlideShowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SlideShowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Slideshow\"/>\n        <Setter Property=\"Content\" Value=\"&#xE173;\"/>\n    </Style>\n    <Style x:Key=\"SortAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SortAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Sort\"/>\n        <Setter Property=\"Content\" Value=\"&#xE174;\"/>\n    </Style>\n    <Style x:Key=\"ManageAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ManageAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Manage\"/>\n        <Setter Property=\"Content\" Value=\"&#xE178;\"/>\n    </Style>\n    <Style x:Key=\"AllAppsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AllAppsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"All Apps\"/>\n        <Setter Property=\"Content\" Value=\"&#xE179;\"/>\n    </Style>\n    <Style x:Key=\"DisconnectDriveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DisconnectDriveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Disconnect Drive\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17A;\"/>\n    </Style>\n    <Style x:Key=\"MapDriveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MapDriveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Map Drive\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17B;\"/>\n    </Style>\n    <Style x:Key=\"NewWindowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NewWindowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"New Window\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17C;\"/>\n    </Style>\n    <Style x:Key=\"OpenWithAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenWithAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open With\"/>\n        <Setter Property=\"Content\" Value=\"&#xE17D;\"/>\n    </Style>\n    <Style x:Key=\"ContactPresenceAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ContactPresenceAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Presence\"/>\n        <Setter Property=\"Content\" Value=\"&#xE181;\"/>\n    </Style>\n    <Style x:Key=\"PriorityAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PriorityAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Priority\"/>\n        <Setter Property=\"Content\" Value=\"&#xE182;\"/>\n    </Style>\n    <Style x:Key=\"UploadSkyDriveAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UploadSkyDriveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skydrive\"/>\n        <Setter Property=\"Content\" Value=\"&#xE183;\"/>\n    </Style>\n    <Style x:Key=\"GoToTodayAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GoToTodayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Today\"/>\n        <Setter Property=\"Content\" Value=\"&#xE184;\"/>\n    </Style>\n    <Style x:Key=\"FontAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Font\"/>\n        <Setter Property=\"Content\" Value=\"&#xE185;\"/>\n    </Style>\n\n    -->\n\n    <!--\n\n    <Style x:Key=\"FontColorAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontColorAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Font Color\"/>\n        <Setter Property=\"Content\" Value=\"&#xE186;\"/>\n    </Style>\n    <Style x:Key=\"Contact2AppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Contact2AppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Contact\"/>\n        <Setter Property=\"Content\" Value=\"&#xE187;\"/>\n    </Style>\n    <Style x:Key=\"FolderppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE188;\"/>\n    </Style>\n    <Style x:Key=\"AudioAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AudioAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Audio\"/>\n        <Setter Property=\"Content\" Value=\"&#xE189;\"/>\n    </Style>\n    <Style x:Key=\"PlaceholderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PlaceholderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Placeholder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18A;\"/>\n    </Style>\n    <Style x:Key=\"ViewAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ViewAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"View\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18B;\"/>\n    </Style>\n    <Style x:Key=\"SetLockScreenAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SetLockscreenAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Set Lockscreen\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18C;\"/>\n    </Style>\n    <Style x:Key=\"SetTitleAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SetTitleAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Set Title\"/>\n        <Setter Property=\"Content\" Value=\"&#xE18D;\"/>\n    </Style>\n    <Style x:Key=\"CcAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CcAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Cc\"/>\n        <Setter Property=\"Content\" Value=\"&#xE190;\"/>\n    </Style>\n    <Style x:Key=\"StopSlideShowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"StopSlideshowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Stop Slideshow\"/>\n        <Setter Property=\"Content\" Value=\"&#xE191;\"/>\n    </Style>\n    <Style x:Key=\"PermissionsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PermissionsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Permisions\"/>\n        <Setter Property=\"Content\" Value=\"&#xE192;\"/>\n    </Style>\n    <Style x:Key=\"HighlightAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HighlightAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Highlight\"/>\n        <Setter Property=\"Content\" Value=\"&#xE193;\"/>\n    </Style>\n    <Style x:Key=\"DisableUpdatesAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DisableUpdatesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Disable Updates\"/>\n        <Setter Property=\"Content\" Value=\"&#xE194;\"/>\n    </Style>\n    <Style x:Key=\"UnfavoriteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnfavoriteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unfavorite\"/>\n        <Setter Property=\"Content\" Value=\"&#xE195;\"/>\n    </Style>\n    <Style x:Key=\"UnPinAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnPinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unpin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE196;\"/>\n    </Style>\n    <Style x:Key=\"OpenLocalAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenLocalAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open Loal\"/>\n        <Setter Property=\"Content\" Value=\"&#xE197;\"/>\n    </Style>\n    <Style x:Key=\"MuteAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MuteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mute\"/>\n        <Setter Property=\"Content\" Value=\"&#xE198;\"/>\n    </Style>\n    <Style x:Key=\"ItalicAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ItalicAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Italic\"/>\n        <Setter Property=\"Content\" Value=\"&#xE199;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"UnderlineAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnderlineAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Underline\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19A;\"/>\n    </Style>\n    <Style x:Key=\"BoldAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BoldAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Bold\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19B;\"/>\n    </Style>\n    <Style x:Key=\"MoveToFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MoveToFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Move to Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19C;\"/>\n    </Style>\n    <Style x:Key=\"LikeDislikeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LikeDislikeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Like/Dislike\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19D;\"/>\n    </Style>\n    <Style x:Key=\"DislikeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DislikeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Dislike\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19E;\"/>\n    </Style>\n    <Style x:Key=\"LikeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LikeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Like\"/>\n        <Setter Property=\"Content\" Value=\"&#xE19F;\"/>\n    </Style>\n    <Style x:Key=\"AlignRightAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AlignRightAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Align Right\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A0;\"/>\n    </Style>\n    <Style x:Key=\"AlignCenterAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AlignCenterAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Align Center\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A1;\"/>\n    </Style>\n    <Style x:Key=\"AlignLeftAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AlignLeftAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Align Left\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A2;\"/>\n    </Style>\n    <Style x:Key=\"ZoomAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZoomAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zoom\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A3;\"/>\n    </Style>\n    <Style x:Key=\"ZoomOutAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZoomOutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zoom Out\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A4;\"/>\n    </Style>\n    <Style x:Key=\"OpenFileAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OpenFileAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Open File\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A5;\"/>\n    </Style>\n    <Style x:Key=\"OtherUserAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OtherUserAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Other User\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A6;\"/>\n    </Style>\n    <Style x:Key=\"AdminAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AdminAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Admin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1A7;\"/>\n    </Style>\n    <Style x:Key=\"StreetAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"StreetAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Street\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C3;\"/>\n    </Style>\n    <Style x:Key=\"MapAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MapAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Map\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C4;\"/>\n    </Style>\n    <Style x:Key=\"ClearSelectionAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ClearSelectionAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Clear Selection\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C5;\"/>\n    </Style>\n    <Style x:Key=\"FontDecreaseAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontDecreaseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Decrease Font\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C6;\"/>\n    </Style>\n    <Style x:Key=\"FontIncreaseAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontIncreaseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Increase Font\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C7;\"/>\n    </Style>\n    <Style x:Key=\"FontSizeAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FontSizeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Font Size\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C8;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"CellphoneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CellphoneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Cellphone\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1C9;\"/>\n    </Style>\n    <Style x:Key=\"ReshareAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ReshareAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Reshare\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CA;\"/>\n    </Style>\n    <Style x:Key=\"TagAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TagAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Tag\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CB;\"/>\n    </Style>\n    <Style x:Key=\"RepeatOneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RepeatOneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Repeat Once\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CC;\"/>\n    </Style>\n    <Style x:Key=\"RepeatAllAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RepeatAllAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Repeat All\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CD;\"/>\n    </Style>\n    <Style x:Key=\"OutlineStarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OutlineStarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Outline Star\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CE;\"/>\n    </Style>\n    <Style x:Key=\"SolidStarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SolidStarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Solid Star\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1CF;\"/>\n    </Style>\n    <Style x:Key=\"CalculatorAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalculatorAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Calculator\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D0;\"/>\n    </Style>\n    <Style x:Key=\"DirectionsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DirectionsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Directions\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D1;\"/>\n    </Style>\n    <Style x:Key=\"TargetAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TargetAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Target\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D2;\"/>\n    </Style>\n    <Style x:Key=\"LibraryAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"LibraryAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Library\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D3;\"/>\n    </Style>\n    <Style x:Key=\"PhonebookAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhonebookAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Phonebook\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D4;\"/>\n    </Style>\n    <Style x:Key=\"MemoAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MemoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Memo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D5;\"/>\n    </Style>\n    <Style x:Key=\"MicrophoneAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MicrophoneAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Microphone\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D6;\"/>\n    </Style>\n    <Style x:Key=\"PostUpdateAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PostUpdateAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Post Update\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D7;\"/>\n    </Style>\n    <Style x:Key=\"BackToWindowAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackToWindowAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back to Window\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D8;\"/>\n    </Style>\n    -->\n\n    <!--\n    <Style x:Key=\"FullScreenAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FullScreenAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Full Screen\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1D9;\"/>\n    </Style>\n    <Style x:Key=\"NewFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NewFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"New Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DA;\"/>\n    </Style>\n    <Style x:Key=\"CalendarReplyAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"CalendarReplyAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Calendar Reply\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DB;\"/>\n    </Style>\n    <Style x:Key=\"UnsyncFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnsyncFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unsync Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DD;\"/>\n    </Style>\n    <Style x:Key=\"ReportHackedAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ReportHackedAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Report Hacked\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DE;\"/>\n    </Style>\n    <Style x:Key=\"SyncFolderAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SyncFolderAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Sync Folder\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1DF;\"/>\n    </Style>\n    <Style x:Key=\"BlockContactAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"Block ContactAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"BlockContact\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E0;\"/>\n    </Style>\n    <Style x:Key=\"SwitchAppsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SwitchAppsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Switch Apps\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E1;\"/>\n    </Style>\n    <Style x:Key=\"AddFriendAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AddFriendAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Add Friend\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E2;\"/>\n    </Style>\n    <Style x:Key=\"TouchPointerAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TouchPointerAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Touch Pointer\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E3;\"/>\n    </Style>\n    <Style x:Key=\"GoToStartAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"GoToStartAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Go to Start\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E4;\"/>\n    </Style>\n    <Style x:Key=\"ZeroBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ZeroBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Zero Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E5;\"/>\n    </Style>\n    <Style x:Key=\"OneBarAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OneBarAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"One Bar\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E6;\"/>\n    </Style>\n    <Style x:Key=\"TwoBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"TwoBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Two Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E7;\"/>\n    </Style>\n    <Style x:Key=\"ThreeBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"ThreeBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Three Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E8;\"/>\n    </Style>\n    <Style x:Key=\"FourBarsAppBarButtonStyle\" TargetType=\"ButtonBase\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FourBarsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Four Bars\"/>\n        <Setter Property=\"Content\" Value=\"&#xE1E9;\"/>\n    </Style>\n\n    -->\n\n    <!-- Title area styles -->\n\n    <Style x:Key=\"PageHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,30,40\"/>\n    </Style>\n\n    <Style x:Key=\"PageSubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,0,40\"/>\n    </Style>\n\n    <Style x:Key=\"SnappedPageHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource PageSubheaderTextStyle}\">\n        <Setter Property=\"Margin\" Value=\"0,0,18,40\"/>\n    </Style>\n\n    <!--\n        BackButtonStyle is used to style a Button for use in the title area of a page.  Margins appropriate for\n        the conventional page layout are included as part of the style.\n    -->\n    <Style x:Key=\"BackButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"Width\" Value=\"48\"/>\n        <Setter Property=\"Height\" Value=\"48\"/>\n        <Setter Property=\"Margin\" Value=\"36,0,36,36\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"Navigation Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\">\n                        <Grid Margin=\"-1,-16,0,0\">\n                            <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0A8;\" Foreground=\"{StaticResource BackButtonBackgroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"NormalGlyph\" Text=\"{StaticResource BackButtonGlyph}\" Foreground=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"ArrowGlyph\" Text=\"&#xE0A6;\" Foreground=\"{StaticResource BackButtonPressedForegroundThemeBrush}\" Opacity=\"0\"/>\n                        </Grid>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"NormalGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"ArrowGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"NormalGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"0\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualWhite\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualBlack\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--\n        PortraitBackButtonStyle is used to style a Button for use in the title area of a portrait page.  Margins appropriate\n        for the conventional page layout are included as part of the style.\n    -->\n    <Style x:Key=\"PortraitBackButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource BackButtonStyle}\">\n        <Setter Property=\"Margin\" Value=\"26,0,26,36\"/>\n    </Style>\n\n    <!--\n        SnappedBackButtonStyle is used to style a Button for use in the title area of a snapped page.  Margins appropriate\n        for the conventional page layout are included as part of the style.\n        \n        The obvious duplication here is necessary as the glyphs used in snapped are not merely smaller versions of the same\n        glyph but are actually distinct.\n    -->\n    <Style x:Key=\"SnappedBackButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"Margin\" Value=\"20,0,0,0\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"26.66667\"/>\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"Navigation Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\" Width=\"36\" Height=\"36\" Margin=\"-3,0,7,33\">\n                        <Grid Margin=\"-1,-1,0,0\">\n                            <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0D4;\" Foreground=\"{StaticResource BackButtonBackgroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"NormalGlyph\" Text=\"{StaticResource BackButtonSnappedGlyph}\" Foreground=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"ArrowGlyph\" Text=\"&#xE0C4;\" Foreground=\"{StaticResource BackButtonPressedForegroundThemeBrush}\" Opacity=\"0\"/>\n                        </Grid>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"NormalGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"ArrowGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"NormalGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"0\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualWhite\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualBlack\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- Item templates -->\n\n    <!-- Grid-appropriate 250 pixel square item template as seen in the GroupedItemsPage and ItemsPage -->\n    <DataTemplate x:Key=\"Standard250x250ItemTemplate\">\n        <Grid HorizontalAlignment=\"Left\" Width=\"250\" Height=\"250\">\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n            </Border>\n            <StackPanel VerticalAlignment=\"Bottom\" Background=\"{StaticResource ListViewItemOverlayBackgroundThemeBrush}\">\n                <TextBlock Text=\"{Binding Title}\" Foreground=\"{StaticResource ListViewItemOverlayForegroundThemeBrush}\" Style=\"{StaticResource TitleTextStyle}\" Height=\"60\" Margin=\"15,0,15,0\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Foreground=\"{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\" Margin=\"15,0,15,10\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- Grid-appropriate 500 by 130 pixel item template as seen in the GroupDetailPage -->\n    <DataTemplate x:Key=\"Standard500x130ItemTemplate\">\n        <Grid Height=\"110\" Width=\"480\" Margin=\"10\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" MaxHeight=\"60\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- List-appropriate 130 pixel high item template as seen in the SplitPage -->\n    <DataTemplate x:Key=\"Standard130ItemTemplate\">\n        <Grid Height=\"110\" Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" MaxHeight=\"60\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!--\n        List-appropriate 80 pixel high item template as seen in the SplitPage when Filled, and\n        the following pages when snapped: GroupedItemsPage, GroupDetailPage, and ItemsPage\n    -->\n    <DataTemplate x:Key=\"Standard80ItemTemplate\">\n        <Grid Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"60\" Height=\"60\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource ItemTextStyle}\" MaxHeight=\"40\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- Grid-appropriate 300 by 70 pixel item template as seen in the SearchResultsPage -->\n    <DataTemplate x:Key=\"StandardSmallIcon300x70ItemTemplate\">\n        <Grid Width=\"294\" Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"0,0,0,10\" Width=\"40\" Height=\"40\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,-10,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource BodyTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- List-appropriate 70 pixel high item template as seen in the SearchResultsPage when Snapped -->\n    <DataTemplate x:Key=\"StandardSmallIcon70ItemTemplate\">\n        <Grid Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"0,0,0,10\" Width=\"40\" Height=\"40\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,-10,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource BodyTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!--\n      190x130 pixel item template for displaying file previews as seen in the FileOpenPickerPage\n      Includes an elaborate tooltip to display title and description text\n  -->\n    <DataTemplate x:Key=\"StandardFileWithTooltip190x130ItemTemplate\">\n        <Grid>\n            <Grid Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                <Image\n                    Source=\"{Binding Image}\"\n                    Width=\"190\"\n                    Height=\"130\"\n                    HorizontalAlignment=\"Center\"\n                    VerticalAlignment=\"Center\"\n                    Stretch=\"Uniform\"/>\n            </Grid>\n            <ToolTipService.Placement>Mouse</ToolTipService.Placement>\n            <ToolTipService.ToolTip>\n                <ToolTip>\n                    <ToolTip.Style>\n                        <Style TargetType=\"ToolTip\">\n                            <Setter Property=\"BorderBrush\" Value=\"{StaticResource ToolTipBackgroundThemeBrush}\" />\n                            <Setter Property=\"Padding\" Value=\"0\" />\n                        </Style>\n                    </ToolTip.Style>\n\n                    <Grid Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Grid Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"20\">\n                            <Image\n                                Source=\"{Binding Image}\"\n                                Width=\"160\"\n                                Height=\"160\"\n                                HorizontalAlignment=\"Center\"\n                                VerticalAlignment=\"Center\"\n                                Stretch=\"Uniform\"/>\n                        </Grid>\n                        <StackPanel Width=\"200\" Grid.Column=\"1\" Margin=\"0,20,20,20\">\n                            <TextBlock Text=\"{Binding Title}\" TextWrapping=\"NoWrap\" Style=\"{StaticResource BodyTextStyle}\"/>\n                            <TextBlock Text=\"{Binding Description}\" MaxHeight=\"140\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" Style=\"{StaticResource BodyTextStyle}\"/>\n                        </StackPanel>\n                    </Grid>\n                </ToolTip>\n            </ToolTipService.ToolTip>\n        </Grid>\n    </DataTemplate>\n\n    <!-- ScrollViewer styles -->\n\n    <Style x:Key=\"HorizontalScrollViewerStyle\" TargetType=\"ScrollViewer\">\n        <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Disabled\"/>\n    </Style>\n\n    <Style x:Key=\"VerticalScrollViewerStyle\" TargetType=\"ScrollViewer\">\n        <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Disabled\"/>\n        <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Auto\"/>\n    </Style>\n\n    <!-- Page layout roots typically use entrance animations and a theme-appropriate background color -->\n\n    <Style x:Key=\"LayoutRootStyle\" TargetType=\"Panel\">\n        <Setter Property=\"Background\" Value=\"{StaticResource ApplicationPageBackgroundThemeBrush}\"/>\n    </Style>\n</ResourceDictionary>\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/MainPage.xaml",
    "content": "﻿<Page\n    x:Class=\"ZumoE2ETestApp.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:ZumoE2ETestApp\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"80\" />\n            <RowDefinition Height=\"5\" />\n            <RowDefinition Height=\"100\" />\n            <RowDefinition Height=\"5\" />\n            <RowDefinition Height=\"*\" />\n        </Grid.RowDefinitions>\n        <Canvas Grid.Row=\"1\" Background=\"Olive\" />\n        <Canvas Grid.Row=\"3\" Background=\"Olive\" />\n        <TextBlock FontSize=\"50\" FontWeight=\"Bold\"\n                   HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n                   Margin=\"10\" Text=\"Azure Mobile Services E2E Tests\" />\n        <Button Grid.Row=\"0\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"\n                FontSize=\"20\" Content=\"Help\" Name=\"btnMainHelp\" Click=\"btnMainHelp_Click_1\" />\n        <Grid Grid.Row=\"2\" Margin=\"10\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\" />\n                <ColumnDefinition Width=\"*\" />\n                <ColumnDefinition Width=\"Auto\" />\n            </Grid.ColumnDefinitions>\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"*\"/>\n            </Grid.RowDefinitions>\n            <TextBlock Text=\"App URL:\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n                       Grid.Row=\"0\" FontSize=\"20\"/>\n            <TextBlock Text=\"App Key:\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n                       Grid.Row=\"1\" FontSize=\"20\"/>\n            <Button Grid.Column=\"2\" Grid.Row=\"0\" Content=\"Save App Info\" Name=\"btnSaveAppInfo\" Click=\"btnSaveAppInfo_Click_1\" />\n            <Button Grid.Column=\"2\" Grid.Row=\"1\" Content=\"Load App Info\" Name=\"btnLoadAppInfo\" Click=\"btnLoadAppInfo_Click_1\" />\n            <TextBox Name=\"txtAppUrl\" Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"5\" Text=\"https://SERVICENAMEHERE.azure-mobile.net/\" />\n            <TextBox Name=\"txtAppKey\" Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"5\" Text=\"\" />\n        </Grid>\n        <Grid Grid.Row=\"4\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\" />\n                <ColumnDefinition Width=\"5\" />\n                <ColumnDefinition Width=\"3*\" />\n            </Grid.ColumnDefinitions>\n            <Canvas Grid.Column=\"1\" Background=\"Olive\" />\n            <StackPanel Orientation=\"Vertical\" Grid.Column=\"0\" Margin=\"0,3,0,-3\">\n                <TextBlock HorizontalAlignment=\"Center\" Margin=\"10\" FontSize=\"30\"\n                           Text=\"Test Groups\" />\n                <ListBox Margin=\"10\" Name=\"lstTestGroups\" SelectionChanged=\"lstTestGroups_SelectionChanged_1\">\n                    <ListBox.ItemTemplate>\n                        <DataTemplate>\n                            <TextBlock Text=\"{Binding Path=Name}\" Margin=\"5\" Foreground=\"Black\" />\n                        </DataTemplate>\n                    </ListBox.ItemTemplate>\n                </ListBox>\n            </StackPanel>\n            <Grid Grid.Column=\"2\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"60\"/>\n                    <RowDefinition Height=\"60\"/>\n                    <RowDefinition Height=\"60\"/>\n                    <RowDefinition Height=\"*\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"150\" />\n                    <ColumnDefinition Width=\"*\" />\n                </Grid.ColumnDefinitions>\n                <TextBlock HorizontalAlignment=\"Center\" Grid.ColumnSpan=\"2\" Margin=\"10\" FontSize=\"25\"\n                           Text=\"Tests for Group\" Name=\"lblTestGroupTitle\" />\n                <Button Grid.Row=\"1\" Grid.Column=\"0\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Center\"\n                        Margin=\"10\" Content=\"Run Tests\" Name=\"btnRunTests\" Click=\"btnRunTests_Click_1\" />\n                <StackPanel Orientation=\"Horizontal\"\n                            Grid.Row=\"1\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\">\n                    <Button Margin=\"10\" Content=\"Reset\" Name=\"btnResetTests\" Click=\"btnResetTests_Click_1\" />\n                    <Button Margin=\"10\" Content=\"Run Selected Tests\" Name=\"btnRunSelected\" Click=\"btnRunSelected_Click_1\"\n                            Visibility=\"Collapsed\" />\n                </StackPanel>\n                <Button Margin=\"10\" Content=\"Send logs to: \" HorizontalAlignment=\"Stretch\"\n                        Grid.Column=\"0\" Grid.Row=\"2\" Name=\"btnSendLogs\" Click=\"btnSendLogs_Click_1\" />\n                <TextBox Name=\"txtUploadLogsUrl\" Margin=\"10,11,10,9\" Grid.Column=\"1\" Grid.Row=\"2\" />\n                <ListBox Margin=\"10\" Name=\"lstTests\" Grid.Row=\"3\" Grid.ColumnSpan=\"2\" \n                         SelectionMode=\"Extended\"\n                         MouseDoubleClick=\"lstTests_DoubleTapped_1\" SelectionChanged=\"lstTests_SelectionChanged_1\">\n                    <ListBox.ItemTemplate>\n                        <DataTemplate>\n                            <TextBlock Foreground=\"{Binding Path=ColorFromStatus}\"\n                                       Text=\"{Binding Path=TestName}\" Margin=\"5\" />\n                        </DataTemplate>\n                    </ListBox.ItemTemplate>\n                </ListBox>\n            </Grid>\n        </Grid>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/MainPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Input;\nusing System.Windows.Navigation;\nusing ZumoE2ETestApp.Framework;\nusing ZumoE2ETestApp.Tests;\nusing ZumoE2ETestApp.UIElements;\n\n// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace ZumoE2ETestApp\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        List<ZumoTestGroup> allTests;\n\n        public MainPage()\n        {\n            this.InitializeComponent();\n            this.allTests = TestStore.CreateTestGroups();\n\n            OnNavigatedTo(null);\n        }\n\n        /// <summary>\n        /// Invoked when this page is about to be displayed in a Frame.\n        /// </summary>\n        /// <param name=\"e\">Event data that describes how this page was reached.  The Parameter\n        /// property is typically used to configure the page.</param>\n        private async void OnNavigatedTo(NavigationEventArgs e)\n        {\n            List<ListViewForTestGroup> sources = allTests.Select((tg, i) => new ListViewForTestGroup(i + 1, tg)).ToList();\n            this.lstTestGroups.ItemsSource = sources;\n            SavedAppInfo savedAppInfo = await AppInfoRepository.Instance.GetSavedAppInfo();\n            this.txtUploadLogsUrl.Text = savedAppInfo.LastUploadUrl ?? \"\";\n            if (savedAppInfo.LastService != null && !string.IsNullOrEmpty(savedAppInfo.LastService.AppUrl) && !string.IsNullOrEmpty(savedAppInfo.LastService.AppKey))\n            {\n                this.txtAppUrl.Text = savedAppInfo.LastService.AppUrl;\n                this.txtAppKey.Text = savedAppInfo.LastService.AppKey;\n            }\n        }\n\n        private void btnMainHelp_Click_1(object sender, RoutedEventArgs e)\n        {\n            Alert(\"Error\", \"Not implemented yet\");\n        }\n\n        private async void btnSaveAppInfo_Click_1(object sender, RoutedEventArgs e)\n        {\n            SavedAppInfo appInfo = await AppInfoRepository.Instance.GetSavedAppInfo();\n            string appUrl = this.txtAppUrl.Text;\n            string appKey = this.txtAppKey.Text;\n            if (string.IsNullOrEmpty(appUrl) || string.IsNullOrEmpty(appKey))\n            {\n                await Alert(\"Error\", \"Please enter valid application URL / key\");\n            }\n            else\n            {\n                if (appInfo.MobileServices.Any(ms => ms.AppKey == appKey && ms.AppUrl == appUrl))\n                {\n                    await Alert(\"Information\", \"Mobile service info already saved\");\n                }\n                else\n                {\n                    appInfo.MobileServices.Add(new MobileServiceInfo { AppUrl = appUrl, AppKey = appKey });\n                    await AppInfoRepository.Instance.SaveAppInfo(appInfo);\n                    await Alert(\"Information\", \"Mobile service info successfully saved\");\n                }\n            }\n        }\n\n        private async void btnLoadAppInfo_Click_1(object sender, RoutedEventArgs e)\n        {\n            SavedAppInfo savedAppInfo = await AppInfoRepository.Instance.GetSavedAppInfo();\n            if (savedAppInfo.MobileServices.Count == 0)\n            {\n                await Alert(\"Error\", \"There are no saved applications.\");\n            }\n            else\n            {\n                Popup popup = new Popup();\n                SaveAppsControl page = new SaveAppsControl(savedAppInfo.MobileServices);\n                page.CloseRequested += (snd, ea) =>\n                {\n                    if (page.ApplicationUrl != null && page.ApplicationKey != null)\n                    {\n                        this.txtAppUrl.Text = page.ApplicationUrl;\n                        this.txtAppKey.Text = page.ApplicationKey;\n                    }\n\n                    popup.IsOpen = false;\n                };\n\n                popup.Child = page;\n                popup.PlacementTarget = Application.Current.MainWindow;\n                popup.Placement = PlacementMode.Center;\n                popup.IsOpen = true;\n            }\n        }\n\n        private void lstTestGroups_SelectionChanged_1(object sender, SelectionChangedEventArgs e)\n        {\n            int selectedIndex = this.lstTestGroups.SelectedIndex;\n            if (selectedIndex >= 0)\n            {\n                ZumoTestGroup testGroup = allTests[selectedIndex];\n                List<ListViewForTest> sources = testGroup.GetTests().Select((t, i) => new ListViewForTest(i + 1, t)).ToList();\n                this.lstTests.ItemsSource = sources;\n                this.lblTestGroupTitle.Text = string.Format(\"{0}. {1}\", selectedIndex + 1, testGroup.Name);\n            }\n            else\n            {\n                this.lstTests.ItemsSource = null;\n            }\n        }\n\n        private async void btnRunTests_Click_1(object sender, RoutedEventArgs e)\n        {\n            int selectedIndex = this.lstTestGroups.SelectedIndex;\n            if (selectedIndex >= 0)\n            {\n                ZumoTestGroup testGroup = allTests[selectedIndex];\n                await this.RunTestGroup(testGroup);\n                if (!testGroup.Name.StartsWith(TestStore.AllTestsGroupName) || string.IsNullOrEmpty(this.txtUploadLogsUrl.Text))\n                {\n                    int passed = testGroup.AllTests.Count(t => t.Status == TestStatus.Passed);\n                    string message = string.Format(CultureInfo.InvariantCulture, \"Passed {0} of {1} tests\", passed, testGroup.AllTests.Count());\n                    await Util.MessageBox(message, \"Test group finished\");\n                }\n                else\n                {\n                    // Upload logs automatically if running all tests\n                    await Util.UploadLogs(this.txtUploadLogsUrl.Text, string.Join(\"\\n\", testGroup.GetLogs()), \"net45\", true);\n                }\n            }\n            else\n            {\n                await Alert(\"Error\", \"Please select a test group.\");\n            }\n        }\n\n        private async Task<bool> InitializeClient()\n        {\n            var appUrl = this.txtAppUrl.Text;\n            var appKey = this.txtAppKey.Text;\n\n            string error = null;\n            try\n            {\n                ZumoTestGlobals.Instance.InitializeClient(appUrl, appKey);\n            }\n            catch (Exception ex)\n            {\n                error = string.Format(CultureInfo.InvariantCulture, \"{0}\", ex);\n            }\n\n            if (error != null)\n            {\n                await Alert(\"Error initializing client\", error);\n                return false;\n            }\n            else\n            {\n                // Saving app info for future runs\n                var savedAppInfo = await AppInfoRepository.Instance.GetSavedAppInfo();\n                if (savedAppInfo.LastService == null || savedAppInfo.LastService.AppUrl != appUrl || savedAppInfo.LastService.AppKey != appKey)\n                {\n                    if (savedAppInfo.LastService == null)\n                    {\n                        savedAppInfo.LastService = new MobileServiceInfo();\n                    }\n\n                    savedAppInfo.LastService.AppKey = appKey;\n                    savedAppInfo.LastService.AppUrl = appUrl;\n                    await AppInfoRepository.Instance.SaveAppInfo(savedAppInfo);\n                }\n\n                return true;\n            }\n        }\n\n        private async Task RunTestGroup(ZumoTestGroup testGroup)\n        {\n            var clientInitialized = await InitializeClient();\n            if (!clientInitialized)\n            {\n                return;\n            }\n\n            string error = null;\n            try\n            {\n                await testGroup.Run();\n            }\n            catch (Exception ex)\n            {\n                error = string.Format(CultureInfo.InvariantCulture, \"Unhandled exception: {0}\", ex);\n            }\n\n            if (error != null)\n            {\n                await Alert(\"Error\", error);\n            }\n        }\n\n        private void btnResetTests_Click_1(object sender, RoutedEventArgs e)\n        {\n            try\n            {\n                int selectedIndex = this.lstTestGroups.SelectedIndex;\n                if (selectedIndex >= 0)\n                {\n                    foreach (var test in this.allTests[selectedIndex].AllTests)\n                    {\n                        test.Reset();\n                    }\n                }\n                else\n                {\n                    Alert(\"Error\", \"Please select a group to reset the tests from.\");\n                }\n            }\n            catch (Exception ex)\n            {\n                Alert(\"Error\", string.Format(CultureInfo.InvariantCulture, \"Unhandled exception: {0}\", ex));\n            }\n        }\n\n        private async void btnSendLogs_Click_1(object sender, RoutedEventArgs e)\n        {\n            int selectedIndex = this.lstTestGroups.SelectedIndex;\n            if (selectedIndex >= 0)\n            {\n                // Saves URL in local storage\n                SavedAppInfo appInfo = await AppInfoRepository.Instance.GetSavedAppInfo();\n                string uploadUrl = this.txtUploadLogsUrl.Text;\n                if (appInfo.LastUploadUrl != uploadUrl)\n                {\n                    appInfo.LastUploadUrl = uploadUrl;\n                    await AppInfoRepository.Instance.SaveAppInfo(appInfo);\n                }\n\n                ZumoTestGroup testGroup = allTests[selectedIndex];\n                List<string> lines = new List<string>();\n                foreach (var test in testGroup.AllTests)\n                {\n                    lines.Add(string.Format(\"Logs for test {0} (status = {1})\", test.Name, test.Status));\n                    lines.AddRange(test.GetLogs());\n                    lines.Add(\"-----------------------\");\n                }\n\n                UploadLogsControl uploadLogsPage = new UploadLogsControl(testGroup.Name, string.Join(\"\\n\", lines), uploadUrl);\n                await uploadLogsPage.Display();\n            }\n            else\n            {\n                await Alert(\"Error\", \"A test group needs to be selected\");\n            }\n        }\n\n        private Task Alert(string title, string text)\n        {\n            MessageBox.Show(text, title);\n            return Task.FromResult(true);\n        }\n\n        private void lstTests_DoubleTapped_1(object sender, MouseEventArgs e)\n        {\n            int selectedGroup = this.lstTestGroups.SelectedIndex;\n            if (selectedGroup >= 0)\n            {\n                ZumoTestGroup testGroup = allTests[selectedGroup];\n                int selectedTest = this.lstTests.SelectedIndex;\n                List<ZumoTest> tests = testGroup.AllTests.ToList();\n                if (selectedTest >= 0 && selectedTest < tests.Count)\n                {\n                    ZumoTest test = tests[selectedTest];\n                    List<string> lines = new List<string>();\n                    lines.Add(string.Format(\"Logs for test {0} (status = {1})\", test.Name, test.Status));\n                    lines.AddRange(test.GetLogs());\n                    lines.Add(\"-----------------------\");\n\n                    UploadLogsControl uploadLogsPage = new UploadLogsControl(testGroup.Name, string.Join(\"\\n\", lines), null);\n                    uploadLogsPage.Display();\n                }\n            }\n        }\n\n        private async void btnRunSelected_Click_1(object sender, RoutedEventArgs e)\n        {\n            var items = this.lstTests.SelectedItems;\n            if (items.Count == 0)\n            {\n                await Alert(\"Error\", \"No tests selected\");\n            }\n            else\n            {\n                ZumoTestGroup partialGroup = new ZumoTestGroup(\"Partial test group\");\n                foreach (ListViewForTest test in items)\n                {\n                    partialGroup.AddTest(test.Test);\n                }\n\n                await this.RunTestGroup(partialGroup);\n            }\n        }\n\n        private void lstTests_SelectionChanged_1(object sender, SelectionChangedEventArgs e)\n        {\n            var selectedItems = this.lstTests.SelectedItems;\n            if (selectedItems.Count > 0)\n            {\n                this.btnRunSelected.Visibility = Visibility.Visible;\n            }\n            else\n            {\n                this.btnRunSelected.Visibility = Visibility.Collapsed;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/MainWindow.xaml",
    "content": "﻿<Window x:Class=\"ZumoE2ETestApp.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        Title=\"MainWindow\" Height=\"600\" Width=\"800\"\n        Background=\"Black\">\n    <Grid>\n        <Frame x:Name=\"_mainFrame\" />\n    </Grid>\n</Window>\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/MainWindow.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace ZumoE2ETestApp\n{\n    /// <summary>\n    /// Interaction logic for MainWindow.xaml\n    /// </summary>\n    public partial class MainWindow : Window\n    {\n        public MainWindow()\n        {\n            InitializeComponent();\n            _mainFrame.Navigate(new MainPage());\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/Properties/AssemblyInfo.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Windows;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"ZumoE2ETestAppNet45\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"ZumoE2ETestAppNet45\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n//In order to begin building localizable applications, set \n//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file\n//inside a <PropertyGroup>.  For example, if you are using US english\n//in your source files, set the <UICulture> to en-US.  Then uncomment\n//the NeutralResourceLanguage attribute below.  Update the \"en-US\" in\n//the line below to match the UICulture setting in the project file.\n\n//[assembly: NeutralResourcesLanguage(\"en-US\", UltimateResourceFallbackLocation.Satellite)]\n\n\n[assembly: ThemeInfo(\n    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located\n    //(used if a resource is not found in the page, \n    // or application resource dictionaries)\n    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located\n    //(used if a resource is not found in the page, \n    // app, or any theme specific resource dictionaries)\n)]\n\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18033\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace ZumoE2ETestApp.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"ZumoE2ETestApp.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18033\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace ZumoE2ETestApp.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"11.0.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"uri:settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/UIElements/InputDialog.xaml",
    "content": "﻿<UserControl\n    x:Class=\"ZumoE2ETestApp.UIElements.InputDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:ZumoE2ETestApp.UIElements\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid Name=\"grdRootPanel\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" Opacity=\"0.75\" Margin=\"10\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\" />\n            <RowDefinition Height=\"300\" />\n            <RowDefinition Height=\"*\" />\n        </Grid.RowDefinitions>\n        <Border Name=\"brdBorder\" Background=\"White\" Margin=\"20\" Grid.Row=\"1\">\n            <Grid Background=\"LightGray\" Margin=\"10\" Name=\"grdContent\" Opacity=\"1\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"60\" />\n                    <RowDefinition Height=\"120\" />\n                    <RowDefinition Height=\"60\" />\n                </Grid.RowDefinitions>\n                <TextBlock FontSize=\"40\" FontWeight=\"Bold\" Name=\"lblTitle\" Text=\"Title of the dialog\"\n                   Foreground=\"Black\" Margin=\"10\" \n                   HorizontalAlignment=\"Center\"\n                   VerticalAlignment=\"Center\" Grid.Row=\"0\"/>\n                <Grid Background=\"White\" Grid.Row=\"1\">\n                    <TextBlock Name=\"txtText\" Margin=\"10\" FontSize=\"25\" Foreground=\"Black\"\n                    Text=\"the quick brown fox jumped over the lazy dog\" TextWrapping=\"Wrap\" />\n                </Grid>\n                <StackPanel Grid.Row=\"2\" Orientation=\"Horizontal\" HorizontalAlignment=\"Right\">\n                    <Button Name=\"btnOk\" Margin=\"10,2,10,2\" Content=\"Ok\" Click=\"btnOk_Click_1\"  Foreground=\"Black\" FontSize=\"25\" />\n                    <Button Name=\"btnCancel\" Margin=\"10,2,10,2\" Content=\"Cancel\" Click=\"btnCancel_Click_1\"  Foreground=\"Black\" FontSize=\"25\" />\n                </StackPanel>\n            </Grid>\n        </Border>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/UIElements/InputDialog.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Navigation;\n\nnamespace ZumoE2ETestApp.UIElements\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class InputDialog : UserControl\n    {\n        public bool Cancelled { get; private set; }\n\n        public InputDialog(string caption, string text, string cancelButtonText, string okButtonText)\n        {\n            this.InitializeComponent();\n\n            this.btnCancel.Content = cancelButtonText;\n            this.lblTitle.Text = caption;\n            this.txtText.Text = text;\n            if (okButtonText == null)\n            {\n                this.btnOk.Visibility = Visibility.Collapsed;\n            }\n            else\n            {\n                this.btnOk.Visibility = Visibility.Visible;\n                this.btnOk.Content = okButtonText;\n            }\n\n            var bounds = Application.Current.MainWindow.RenderSize;\n            this.grdRootPanel.Height = bounds.Height;\n            this.grdRootPanel.Width = bounds.Width;\n        }\n\n        public InputDialog(string caption, string text, string cancelButtonText)\n            : this(caption, text, cancelButtonText, null)\n        {\n        }\n\n        private void btnCancel_Click_1(object sender, RoutedEventArgs e)\n        {\n            this.Cancelled = true;\n            ((Popup)this.Parent).IsOpen = false;\n        }\n\n        private void btnOk_Click_1(object sender, RoutedEventArgs e)\n        {\n            this.Cancelled = false;\n            ((Popup)this.Parent).IsOpen = false;\n        }\n\n        public Task Display()\n        {\n            Popup popup = new Popup();\n            popup.Child = this;\n            popup.PlacementTarget = Application.Current.MainWindow;\n            popup.Placement = PlacementMode.Center;\n            TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n            popup.IsOpen = true;\n            popup.Closed += (snd, ea) =>\n            {\n                tcs.SetResult(true);\n            };\n\n            return tcs.Task;\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/UIElements/MoviesDisplayControl.xaml",
    "content": "﻿<UserControl\n    x:Class=\"ZumoE2ETestApp.UIElements.MoviesDisplayControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:ZumoE2ETestApp.UIElements\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid Name=\"grdRootPanel\"\n          HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" Opacity=\"0.75\">\n        <Border Background=\"White\" Margin=\"20\">\n            <Grid Background=\"Blue\" Margin=\"10\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"80\"/>\n                    <RowDefinition Height=\"*\"/>\n                </Grid.RowDefinitions>\n                <TextBlock FontSize=\"50\" FontWeight=\"Bold\"\n                           HorizontalAlignment=\"Center\"\n                           VerticalAlignment=\"Center\"\n                           Text=\"List of Movies\" />\n                <Button Name=\"btnClose\" Content=\"Close\" Margin=\"10\" FontSize=\"30\"\n                        HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"\n                        Click=\"btnClose_Click_1\" />\n                <ListBox Grid.Row=\"1\" Name=\"lstMovies\">\n                    <ListBox.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\">\n                                <TextBlock Foreground=\"Blue\" FontSize=\"25\" Margin=\"10\"\n                                           Text=\"{Binding Path=Date}\" />\n                                <TextBlock Foreground=\"Blue\" FontSize=\"22\" Margin=\"10\"\n                                           Text=\"{Binding Path=Title}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ListBox.ItemTemplate>\n                </ListBox>\n            </Grid>\n        </Border>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/UIElements/MoviesDisplayControl.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\n\nnamespace ZumoE2ETestApp.UIElements\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class MoviesDisplayControl : UserControl\n    {\n        private List<string> itemsAsString;\n\n        public MoviesDisplayControl()\n        {\n            this.InitializeComponent();\n\n            var bounds = Application.Current.MainWindow.RenderSize;\n            this.grdRootPanel.Width = bounds.Width;\n            this.grdRootPanel.Height = bounds.Height;\n\n            this.itemsAsString = new List<string>();\n        }\n\n        internal void SetMoviesSource(IEnumerable itemsSource)\n        {\n            this.lstMovies.ItemsSource = itemsSource;\n        }\n\n        internal IEnumerable<string> ItemsAsString\n        {\n            get { return this.itemsAsString; }\n        }\n\n        internal Task Display()\n        {\n            Popup popup = new Popup();\n            popup.Child = this;\n            popup.PlacementTarget = Application.Current.MainWindow;\n            popup.Placement = PlacementMode.Center;\n            TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n            popup.IsOpen = true;\n            popup.Closed += (snd, ea) =>\n            {\n                tcs.SetResult(true);\n            };\n\n            // Close the dialog after a couple of seconds, saving the items in the list\n            var threadProc = new ThreadStart(async delegate\n            {\n                Thread.CurrentThread.Join(3000);\n\n                await this.Dispatcher.BeginInvoke(new Action(delegate\n                {\n                    this.btnClose_Click_1(this.btnClose, new RoutedEventArgs());\n                }));\n            });\n            new Thread(threadProc).Start();\n\n            return tcs.Task;\n        }\n\n        private void btnClose_Click_1(object sender, RoutedEventArgs e)\n        {\n            foreach (dynamic item in this.lstMovies.Items)\n            {\n                this.itemsAsString.Add(string.Format(\"{0} - {1}\", item.Date, item.Title));\n            }\n\n            ((Popup)this.Parent).IsOpen = false;\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/UIElements/SaveAppsControl.xaml",
    "content": "﻿<UserControl\n    x:Class=\"ZumoE2ETestApp.UIElements.SaveAppsControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:ZumoE2ETestApp.UIElements\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid Name=\"grdRootPanel\"\n          HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\"\n          Opacity=\"0.75\">\n        <Border Background=\"White\" Margin=\"20\">\n            <Grid Background=\"Blue\" Margin=\"10\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"80\" />\n                    <RowDefinition Height=\"*\" />\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <TextBlock FontSize=\"30\" Name=\"lblTitle\" Text=\"Manage saved app info\" FontWeight=\"Bold\" \n                           HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" />\n                <StackPanel Orientation=\"Horizontal\" Grid.Row=\"0\" Grid.Column=\"1\" HorizontalAlignment=\"Right\">\n                    <Button FontSize=\"30\" Margin=\"10\" Content=\"Select\" Name=\"btnSelect\" Click=\"btnSelect_Click_1\" />\n                    <Button FontSize=\"30\" Margin=\"10\" Content=\"Close\" Name=\"btnClose\" Click=\"btnClose_Click_1\" />\n                </StackPanel>\n                <ListBox Name=\"lstApps\" Grid.Row=\"1\" Grid.ColumnSpan=\"2\" Margin=\"10\"\n                         MouseDoubleClick=\"lstApps_DoubleTapped_1\">\n                    <ListBox.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\" Margin=\"5\">\n                                <TextBlock Margin=\"5\" Text=\"{Binding Path=AppUrl}\" />\n                                <TextBlock Margin=\"5\" Text=\"{Binding Path=AppKey}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ListBox.ItemTemplate>\n                </ListBox>\n            </Grid>\n        </Border>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/UIElements/SaveAppsControl.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing System.Windows.Navigation;\n\nnamespace ZumoE2ETestApp.UIElements\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class SaveAppsControl : UserControl\n    {\n        public string ApplicationUrl { get; set; }\n        public string ApplicationKey { get; set; }\n\n        public event EventHandler CloseRequested;\n\n        public SaveAppsControl(List<MobileServiceInfo> savedServices)\n        {\n            this.InitializeComponent();\n            var bounds = Application.Current.MainWindow.RenderSize;\n            this.grdRootPanel.Width = bounds.Width;\n            this.grdRootPanel.Height = bounds.Height;\n            this.lstApps.ItemsSource = savedServices;\n        }\n\n        private void btnSelect_Click_1(object sender, RoutedEventArgs e)\n        {\n            int selectedIndex = this.lstApps.SelectedIndex;\n            if (selectedIndex >= 0)\n            {\n                MobileServiceInfo info = (MobileServiceInfo)this.lstApps.SelectedItem;\n                this.ApplicationUrl = info.AppUrl;\n                this.ApplicationKey = info.AppKey;\n                if (this.CloseRequested != null)\n                {\n                    this.CloseRequested(this, EventArgs.Empty);\n                }\n            }\n            else\n            {\n                MessageBox.Show(\"Please select a service first\", \"Error\");\n            }\n        }\n\n        private void btnClose_Click_1(object sender, RoutedEventArgs e)\n        {\n            this.ApplicationUrl = null;\n            this.ApplicationKey = null;\n            if (this.CloseRequested != null)\n            {\n                this.CloseRequested(this, EventArgs.Empty);\n            }\n        }\n\n        private void lstApps_DoubleTapped_1(object sender, MouseEventArgs e)\n        {\n            btnSelect_Click_1(sender, e);\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/UIElements/UploadLogsControl.xaml",
    "content": "﻿<UserControl\n    x:Class=\"ZumoE2ETestApp.UIElements.UploadLogsControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:ZumoE2ETestApp.UIElements\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid Name=\"grdRootPanel\"\n          HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\"\n          Opacity=\"0.75\">\n        <Border Background=\"White\" Margin=\"20\">\n            <Grid Background=\"Blue\" Margin=\"10\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"80\" />\n                    <RowDefinition Height=\"*\" />\n                </Grid.RowDefinitions>\n                <Button FontSize=\"30\" Margin=\"10\"\n                    HorizontalAlignment=\"Right\" Content=\"Close\" Name=\"btnClose\" Click=\"btnClose_Click_1\" />\n                <TextBlock FontSize=\"30\" Name=\"lblTitle\" Text=\"Logs for test group\" FontWeight=\"Bold\" \n                           HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" />\n                <TextBox AcceptsReturn=\"True\" Grid.Row=\"1\"\n                         ScrollViewer.HorizontalScrollBarVisibility=\"Auto\"\n                         ScrollViewer.VerticalScrollBarVisibility=\"Auto\"\n                         Name=\"txtArea\" Margin=\"10\" Background=\"White\" />\n            </Grid>\n        </Border>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/UIElements/UploadLogsControl.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing ZumoE2ETestApp.Framework;\n\nnamespace ZumoE2ETestApp.UIElements\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class UploadLogsControl : UserControl\n    {\n        private string uploadUrl;\n        public string logs;\n\n        public UploadLogsControl(string testGroupName, string logs, string uploadUrl)\n        {\n            this.InitializeComponent();\n            this.lblTitle.Text = \"Logs for \" + testGroupName;\n            var bounds = Application.Current.MainWindow.RenderSize;\n            this.grdRootPanel.Width = bounds.Width;\n            this.grdRootPanel.Height = bounds.Height;\n\n            this.uploadUrl = uploadUrl;\n            this.logs = logs;\n            this.txtArea.Text = logs;\n        }\n\n        internal Task Display()\n        {\n            Task popupTask = this.DisplayPopup();\n            Task uploadTask = this.UploadLogs();\n            return Task.WhenAll(popupTask, uploadTask);\n        }\n\n        private Task DisplayPopup()\n        {\n            Popup popup = new Popup();\n            popup.Child = this;\n            popup.PlacementTarget = Application.Current.MainWindow;\n            popup.Placement = PlacementMode.Center;\n            TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n            popup.IsOpen = true;\n            popup.Closed += (snd, ea) =>\n            {\n                tcs.SetResult(true);\n            };\n\n            return tcs.Task;\n        }\n\n        private async Task UploadLogs()\n        {\n            string uploadUrl = this.uploadUrl;\n            if (!string.IsNullOrEmpty(uploadUrl))\n            {\n                await Util.UploadLogs(uploadUrl, this.logs, \"net45\", false);\n            }\n        }\n\n        private void btnClose_Click_1(object sender, RoutedEventArgs e)\n        {\n            ((Popup)this.Parent).IsOpen = false;\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/ZumoE2ETestAppNet45.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{504B8436-CB5B-4337-A290-A2105D605A27}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>ZumoE2ETestApp</RootNamespace>\n    <AssemblyName>ZumoE2ETestAppNet45</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <WarningLevel>4</WarningLevel>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>TRACE;DEBUG;NET45</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Bcl.Async.1.0.165\\lib\\net45\\Microsoft.Threading.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Bcl.Async.1.0.165\\lib\\net45\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\WindowsAzure.MobileServices.1.3.0-beta\\lib\\net45\\Microsoft.WindowsAzure.Mobile.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile.Ext, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\WindowsAzure.MobileServices.1.3.0-beta\\lib\\net45\\Microsoft.WindowsAzure.Mobile.Ext.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Newtonsoft.Json.6.0.3\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.22.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.22\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.22.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.22\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Windows\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xaml\">\n      <RequiredTargetFramework>4.0</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"WindowsBase\" />\n    <Reference Include=\"PresentationCore\" />\n    <Reference Include=\"PresentationFramework\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoCustomApiTests.cs\">\n      <Link>Tests\\ZumoCustomApiTests.cs</Link>\n    </Compile>\n    <Compile Include=\"UIElements\\InputDialog.xaml.cs\" />\n    <Compile Include=\"UIElements\\MoviesDisplayControl.xaml.cs\" />\n    <Compile Include=\"UIElements\\SaveAppsControl.xaml.cs\" />\n    <Compile Include=\"UIElements\\UploadLogsControl.xaml.cs\" />\n    <Page Include=\"Common\\StandardStyles.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"MainWindow.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\TestStatus.cs\">\n      <Link>Framework\\TestStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\Util.cs\">\n      <Link>Framework\\Util.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\ZumoTest.cs\">\n      <Link>Framework\\ZumoTest.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\ZumoTestEventArgs.cs\">\n      <Link>Framework\\ZumoTestEventArgs.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\ZumoTestGlobals.cs\">\n      <Link>Framework\\ZumoTestGlobals.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\ZumoTestGroup.cs\">\n      <Link>Framework\\ZumoTestGroup.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\ZumoTestGroupEventArgs.cs\">\n      <Link>Framework\\ZumoTestGroupEventArgs.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ExceptionTypeWhichWillNeverBeThrown.cs\">\n      <Link>Tests\\ExceptionTypeWhichWillNeverBeThrown.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\TestStore.cs\">\n      <Link>Tests\\TestStore.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\Types\\Movie.cs\">\n      <Link>Tests\\Types\\Movie.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\Types\\RoundTripTableItem.cs\">\n      <Link>Tests\\Types\\RoundTripTableItem.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\Types\\StringIdRoundTripTableItem.cs\">\n      <Link>Tests\\Types\\StringIdRoundTripTableItem.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\Types\\ICloneableItem.cs\">\n      <Link>Tests\\Types\\ICloneableItem.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\Types\\VersionedType.cs\">\n      <Link>Tests\\Types\\VersionedType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoCUDTests.cs\">\n      <Link>Tests\\ZumoCUDTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoMiscTests.cs\">\n      <Link>Tests\\ZumoMiscTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoQueryTestData.cs\">\n      <Link>Tests\\ZumoQueryTestData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoQueryTests.cs\">\n      <Link>Tests\\ZumoQueryTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoRoundTripTests.cs\">\n      <Link>Tests\\ZumoRoundTripTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoSetupTests.cs\">\n      <Link>Tests\\ZumoSetupTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoTestCommon.cs\">\n      <Link>Tests\\ZumoTestCommon.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\UIElements\\AppInfoRepository.cs\">\n      <Link>UIElements\\AppInfoRepository.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\UIElements\\ListViewForTest.cs\">\n      <Link>UIElements\\ListViewForTest.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\UIElements\\ListViewForTestGroup.cs\">\n      <Link>UIElements\\ListViewForTestGroup.cs</Link>\n    </Compile>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"MainWindow.xaml.cs\">\n      <DependentUpon>MainWindow.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Page Include=\"UIElements\\InputDialog.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"UIElements\\MoviesDisplayControl.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"UIElements\\SaveAppsControl.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"UIElements\\UploadLogsControl.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n    <AppDesigner Include=\"Properties\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(SolutionDir)\\.nuget\\nuget.targets\" />\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppNet45/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.22\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.3\" targetFramework=\"net45\" />\n  <package id=\"WindowsAzure.MobileServices\" version=\"1.3.0-beta\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/App.xaml",
    "content": "﻿<Application\n    x:Class=\"ZumoE2ETestAppWP8.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\">\n\n    <!--Application Resources-->\n    <Application.Resources>\n        <local:LocalizedStrings xmlns:local=\"clr-namespace:ZumoE2ETestAppWP8\" x:Key=\"LocalizedStrings\"/>\n    </Application.Resources>\n\n    <Application.ApplicationLifetimeObjects>\n        <!--Required object that handles lifetime events for the application-->\n        <shell:PhoneApplicationService\n            Launching=\"Application_Launching\" Closing=\"Application_Closing\"\n            Activated=\"Application_Activated\" Deactivated=\"Application_Deactivated\"/>\n    </Application.ApplicationLifetimeObjects>\n\n</Application>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/App.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Diagnostics;\nusing System.Resources;\nusing System.Windows;\nusing System.Windows.Markup;\nusing System.Windows.Navigation;\nusing Microsoft.Phone.Controls;\nusing Microsoft.Phone.Shell;\nusing ZumoE2ETestAppWP8.Resources;\n\nnamespace ZumoE2ETestAppWP8\n{\n    public partial class App : Application\n    {\n        /// <summary>\n        /// Provides easy access to the root frame of the Phone Application.\n        /// </summary>\n        /// <returns>The root frame of the Phone Application.</returns>\n        public static PhoneApplicationFrame RootFrame { get; private set; }\n\n        /// <summary>\n        /// Constructor for the Application object.\n        /// </summary>\n        public App()\n        {\n            // Global handler for uncaught exceptions.\n            UnhandledException += Application_UnhandledException;\n\n            // Standard XAML initialization\n            InitializeComponent();\n\n            // Phone-specific initialization\n            InitializePhoneApplication();\n\n            // Language display initialization\n            InitializeLanguage();\n\n            // Show graphics profiling information while debugging.\n            if (Debugger.IsAttached)\n            {\n                // Display the current frame rate counters.\n                Application.Current.Host.Settings.EnableFrameRateCounter = true;\n\n                // Show the areas of the app that are being redrawn in each frame.\n                //Application.Current.Host.Settings.EnableRedrawRegions = true;\n\n                // Enable non-production analysis visualization mode,\n                // which shows areas of a page that are handed off to GPU with a colored overlay.\n                //Application.Current.Host.Settings.EnableCacheVisualization = true;\n\n                // Prevent the screen from turning off while under the debugger by disabling\n                // the application's idle detection.\n                // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run\n                // and consume battery power when the user is not using the phone.\n                PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;\n            }\n\n        }\n\n        // Code to execute when the application is launching (eg, from Start)\n        // This code will not execute when the application is reactivated\n        private void Application_Launching(object sender, LaunchingEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is activated (brought to foreground)\n        // This code will not execute when the application is first launched\n        private void Application_Activated(object sender, ActivatedEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is deactivated (sent to background)\n        // This code will not execute when the application is closing\n        private void Application_Deactivated(object sender, DeactivatedEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is closing (eg, user hit Back)\n        // This code will not execute when the application is deactivated\n        private void Application_Closing(object sender, ClosingEventArgs e)\n        {\n        }\n\n        // Code to execute if a navigation fails\n        private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            if (Debugger.IsAttached)\n            {\n                // A navigation has failed; break into the debugger\n                Debugger.Break();\n            }\n        }\n\n        // Code to execute on Unhandled Exceptions\n        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)\n        {\n            if (Debugger.IsAttached)\n            {\n                // An unhandled exception has occurred; break into the debugger\n                Debugger.Break();\n            }\n        }\n\n        #region Phone application initialization\n\n        // Avoid double-initialization\n        private bool phoneApplicationInitialized = false;\n\n        // Do not add any additional code to this method\n        private void InitializePhoneApplication()\n        {\n            if (phoneApplicationInitialized)\n                return;\n\n            // Create the frame but don't set it as RootVisual yet; this allows the splash\n            // screen to remain active until the application is ready to render.\n            RootFrame = new PhoneApplicationFrame();\n            RootFrame.Navigated += CompleteInitializePhoneApplication;\n\n            // Handle navigation failures\n            RootFrame.NavigationFailed += RootFrame_NavigationFailed;\n\n            // Handle reset requests for clearing the backstack\n            RootFrame.Navigated += CheckForResetNavigation;\n\n            // Ensure we don't initialize again\n            phoneApplicationInitialized = true;\n        }\n\n        // Do not add any additional code to this method\n        private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)\n        {\n            // Set the root visual to allow the application to render\n            if (RootVisual != RootFrame)\n                RootVisual = RootFrame;\n\n            // Remove this handler since it is no longer needed\n            RootFrame.Navigated -= CompleteInitializePhoneApplication;\n        }\n\n        private void CheckForResetNavigation(object sender, NavigationEventArgs e)\n        {\n            // If the app has received a 'reset' navigation, then we need to check\n            // on the next navigation to see if the page stack should be reset\n            if (e.NavigationMode == NavigationMode.Reset)\n                RootFrame.Navigated += ClearBackStackAfterReset;\n        }\n\n        private void ClearBackStackAfterReset(object sender, NavigationEventArgs e)\n        {\n            // Unregister the event so it doesn't get called again\n            RootFrame.Navigated -= ClearBackStackAfterReset;\n\n            // Only clear the stack for 'new' (forward) and 'refresh' navigations\n            if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh)\n                return;\n\n            // For UI consistency, clear the entire page stack\n            while (RootFrame.RemoveBackEntry() != null)\n            {\n                ; // do nothing\n            }\n        }\n\n        #endregion\n\n        // Initialize the app's font and flow direction as defined in its localized resource strings.\n        //\n        // To ensure that the font of your application is aligned with its supported languages and that the\n        // FlowDirection for each of those languages follows its traditional direction, ResourceLanguage\n        // and ResourceFlowDirection should be initialized in each resx file to match these values with that\n        // file's culture. For example:\n        //\n        // AppResources.es-ES.resx\n        //    ResourceLanguage's value should be \"es-ES\"\n        //    ResourceFlowDirection's value should be \"LeftToRight\"\n        //\n        // AppResources.ar-SA.resx\n        //     ResourceLanguage's value should be \"ar-SA\"\n        //     ResourceFlowDirection's value should be \"RightToLeft\"\n        //\n        // For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072.\n        //\n        private void InitializeLanguage()\n        {\n            try\n            {\n                // Set the font to match the display language defined by the\n                // ResourceLanguage resource string for each supported language.\n                //\n                // Fall back to the font of the neutral language if the Display\n                // language of the phone is not supported.\n                //\n                // If a compiler error is hit then ResourceLanguage is missing from\n                // the resource file.\n                RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);\n\n                // Set the FlowDirection of all elements under the root frame based\n                // on the ResourceFlowDirection resource string for each\n                // supported language.\n                //\n                // If a compiler error is hit then ResourceFlowDirection is missing from\n                // the resource file.\n                FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection);\n                RootFrame.FlowDirection = flow;\n            }\n            catch\n            {\n                // If an exception is caught here it is most likely due to either\n                // ResourceLangauge not being correctly set to a supported language\n                // code or ResourceFlowDirection is set to a value other than LeftToRight\n                // or RightToLeft.\n\n                if (Debugger.IsAttached)\n                {\n                    Debugger.Break();\n                }\n\n                throw;\n            }\n        }\n    }\n}"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/Framework/Readme.txt",
    "content": "Files on this folder of the project are linked from the\n  ..\\..\\ZumoE2ETestApp\\Framework folder.\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/LocalizedStrings.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing ZumoE2ETestAppWP8.Resources;\n\nnamespace ZumoE2ETestAppWP8\n{\n    /// <summary>\n    /// Provides access to string resources.\n    /// </summary>\n    public class LocalizedStrings\n    {\n        private static AppResources _localizedResources = new AppResources();\n\n        public AppResources LocalizedResources { get { return _localizedResources; } }\n    }\n}"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/MainPage.xaml",
    "content": "﻿<phone:PhoneApplicationPage\n    x:Class=\"ZumoE2ETestAppWP8.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Margin=\"10,17,5,10\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <TextBlock Text=\"{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}\" Style=\"{StaticResource PhoneTextNormalStyle}\" \n                       FontWeight=\"Bold\" Margin=\"0\" Grid.ColumnSpan=\"2\"/>\n            <Grid Grid.Row=\"1\" Name=\"grdSettings\"\n                  Visibility=\"Visible\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <TextBlock Text=\"App URL:\" Grid.Row=\"0\" VerticalAlignment=\"Center\" />\n                <TextBox Name=\"txtAppUrl\" Grid.Row=\"0\" Grid.Column=\"1\" \n                     HorizontalAlignment=\"Stretch\" FontSize=\"18\" Margin=\"-5\" />\n                <TextBlock Text=\"App Key:\" Grid.Row=\"1\" VerticalAlignment=\"Center\" />\n                <TextBox Name=\"txtAppKey\" Grid.Row=\"1\" Grid.Column=\"1\" \n                     HorizontalAlignment=\"Stretch\" FontSize=\"18\" Margin=\"-5\" />\n                <TextBlock Text=\"Upload URL:\" Grid.Row=\"2\" VerticalAlignment=\"Center\" />\n                <TextBox Name=\"txtUploadUrl\" Grid.Row=\"2\" Grid.Column=\"1\" \n                     HorizontalAlignment=\"Stretch\" FontSize=\"18\" Margin=\"-5\" />\n            </Grid>\n        </Grid>\n\n        <StackPanel Grid.Row=\"1\"\n            Orientation=\"Vertical\" Name=\"pnlGroups\">\n            <TextBlock Text=\"Test Groups\" Margin=\"10\"\n                       FontSize=\"26\" FontWeight=\"Bold\"/>\n            <ListBox x:Name=\"lstTestGroups\"\n                     SelectionChanged=\"lstTestGroups_SelectionChanged_1\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate>\n                        <TextBlock Text=\"{Binding Path=Name}\" Margin=\"5\" />\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n        </StackPanel>\n        \n        <Grid Grid.Row=\"1\" Name=\"grdTests\" Visibility=\"Collapsed\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"*\"/>\n            </Grid.RowDefinitions>\n            <TextBlock Name=\"lblTestGroupTitle\" Margin=\"10\"\n                       FontSize=\"24\" Text=\"Test Group\"\n                       HorizontalAlignment=\"Center\"/>\n            <ListBox Name=\"lstTests\" Grid.Row=\"1\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate>\n                        <TextBlock Foreground=\"{Binding Path=ColorFromStatus}\"\n                                       Text=\"{Binding Path=TestName}\" Margin=\"5\" />\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n        </Grid>\n    </Grid>\n\n    <phone:PhoneApplicationPage.ApplicationBar>\n        <shell:ApplicationBar>\n            <shell:ApplicationBarIconButton IconUri=\"/Assets/AppBar/back.png\"\n                                            x:Name=\"appBtnBack\"\n                                            Text=\"Test Groups\"\n                                            Click=\"appBtnBack_Click_1\"\n                                            IsEnabled=\"False\"\n                                            />\n            <shell:ApplicationBarIconButton IconUri=\"/Assets/AppBar/reset.png\"\n                                            x:Name=\"appBtnReset\"\n                                            Text=\"Reset\"\n                                            Click=\"appBtnReset_Click_1\"\n                                            IsEnabled=\"False\"\n                                            />\n            <shell:ApplicationBarIconButton IconUri=\"/Assets/AppBar/upload.png\"\n                                            x:Name=\"appBtnUploadLogs\"\n                                            Text=\"Upload Logs\" \n                                            Click=\"appBtnUploadLogs_Click_1\"/>\n            <shell:ApplicationBarIconButton IconUri=\"/Assets/AppBar/run.png\"\n                                            x:Name=\"appBtnRunTests\"\n                                            Text=\"Run Tests\"\n                                            Click=\"appBtnRunTests_Click_1\"\n                                            />\n        </shell:ApplicationBar>\n    </phone:PhoneApplicationPage.ApplicationBar>\n</phone:PhoneApplicationPage>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/MainPage.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.IO.IsolatedStorage;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Navigation;\nusing Microsoft.Phone.Controls;\nusing Microsoft.Phone.Shell;\nusing ZumoE2ETestApp.Framework;\nusing ZumoE2ETestApp.Tests;\nusing ZumoE2ETestApp.UIElements;\nusing ZumoE2ETestAppWP8.Resources;\n\nnamespace ZumoE2ETestAppWP8\n{\n    public partial class MainPage : PhoneApplicationPage\n    {\n        List<ZumoTestGroup> allTestGroups;\n        ZumoTestGroup currentGroup;\n\n        const string AllTestsGroupName = \"All tests\";\n\n        // Constructor\n        public MainPage()\n        {\n            InitializeComponent();\n\n            this.allTestGroups = TestStore.CreateTestGroups();\n            if (this.appBtnBack == null)\n            {\n                var appBar = this.ApplicationBar;\n                foreach (ApplicationBarIconButton button in appBar.Buttons)\n                {\n                    switch (button.Text.ToLowerInvariant())\n                    {\n                        case \"test groups\":\n                            this.appBtnBack = button;\n                            break;\n                        case \"reset\":\n                            this.appBtnReset = button;\n                            break;\n                        case \"upload logs\":\n                            this.appBtnUploadLogs = button;\n                            break;\n                        case \"run tests\":\n                            this.appBtnRunTests = button;\n                            break;\n                    }\n                }\n            }\n        }\n\n        protected override async void OnNavigatedTo(NavigationEventArgs e)\n        {\n            base.OnNavigatedTo(e);\n            if (this.lstTestGroups.ItemsSource == null)\n            {\n                List<ListViewForTestGroup> sources = allTestGroups.Select((tg, i) => new ListViewForTestGroup(i + 1, tg)).ToList();\n                this.lstTestGroups.ItemsSource = sources;\n\n                SavedAppInfo savedAppInfo = await AppInfoRepository.Instance.GetSavedAppInfo();\n                this.txtUploadUrl.Text = savedAppInfo.LastUploadUrl ?? \"\";\n                if (savedAppInfo.LastService != null && !string.IsNullOrEmpty(savedAppInfo.LastService.AppUrl) && !string.IsNullOrEmpty(savedAppInfo.LastService.AppKey))\n                {\n                    this.txtAppUrl.Text = savedAppInfo.LastService.AppUrl;\n                    this.txtAppKey.Text = savedAppInfo.LastService.AppKey;\n                }\n            }\n\n            // Check if any of the text box values can be found in app settings\n            // This is used for test automation, and takes precedence over saved app info.\n            Action<TextBox, string> overrideFromAppSettings = (control, settingName) =>\n            {\n                string value;\n                if (System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.TryGetValue<string>(settingName, out value))\n                {\n                    control.Text = value;\n                }\n            };\n\n            overrideFromAppSettings(this.txtAppUrl, \"appUrl\");\n            overrideFromAppSettings(this.txtAppKey, \"appKey\");\n            overrideFromAppSettings(this.txtUploadUrl, \"uploadUrl\");\n        }\n\n        private void lstTestGroups_SelectionChanged_1(object sender, SelectionChangedEventArgs e)\n        {\n            int selectedIndex = this.lstTestGroups.SelectedIndex;\n            if (selectedIndex >= 0)\n            {\n                ZumoTestGroup testGroup = allTestGroups[selectedIndex];\n                this.currentGroup = testGroup;\n                List<ListViewForTest> sources = testGroup.GetTests().Select((t, i) => new ListViewForTest(i + 1, t)).ToList();\n                this.lstTests.ItemsSource = sources;\n                this.lblTestGroupTitle.Text = string.Format(\"{0}. {1}\", selectedIndex + 1, testGroup.Name);\n                SwapPanels(false);\n            }\n            else\n            {\n                this.lstTests.ItemsSource = null;\n                this.currentGroup = null;\n                SwapPanels(true);\n            }\n        }\n\n        private void SwapPanels(bool showTestGroups)\n        {\n            this.appBtnBack.IsEnabled = !showTestGroups;\n            this.appBtnReset.IsEnabled = !showTestGroups;\n            this.pnlGroups.Visibility = showTestGroups ? Visibility.Visible : Visibility.Collapsed;\n            this.grdTests.Visibility = showTestGroups ? Visibility.Collapsed : Visibility.Visible;\n            if (showTestGroups)\n            {\n                this.currentGroup = null;\n            }\n        }\n\n        private async Task SaveAppInfo()\n        {\n            SavedAppInfo appInfo = await AppInfoRepository.Instance.GetSavedAppInfo();\n            string uploadUrl = this.txtUploadUrl.Text;\n            string appUrl = this.txtAppUrl.Text;\n            string appKey = this.txtAppKey.Text;\n            if (appInfo.LastUploadUrl != uploadUrl || appInfo.LastService.AppUrl != appUrl || appInfo.LastService.AppKey != appKey)\n            {\n                appInfo.LastUploadUrl = uploadUrl;\n                appInfo.LastService.AppUrl = appUrl;\n                appInfo.LastService.AppKey = appKey;\n                await AppInfoRepository.Instance.SaveAppInfo(appInfo);\n            }\n        }\n\n        private async void appBtnUploadLogs_Click_1(object sender, EventArgs e)\n        {\n            var uploadUrl = this.txtUploadUrl.Text;\n            int selectedIndex = this.lstTestGroups.SelectedIndex;\n            if (this.currentGroup == null)\n            {\n                MessageBox.Show(\"Please select a test group.\", \"Error\", MessageBoxButton.OK);\n                return;\n            }\n\n            if (string.IsNullOrEmpty(uploadUrl))\n            {\n                MessageBox.Show(\"Please enter an URL for the logs to be uploaded\");\n                return;\n            }\n\n            var logs = string.Join(Environment.NewLine, this.currentGroup.GetLogs());\n            await Util.UploadLogs(uploadUrl, logs, \"wp8\", false);\n        }\n\n        private async void appBtnRunTests_Click_1(object sender, EventArgs e)\n        {\n            if (this.currentGroup != null)\n            {\n                await this.RunTestGroup(this.currentGroup);\n            }\n            else\n            {\n                MessageBox.Show(\"Please select a test group.\", \"Error\", MessageBoxButton.OK);\n            }\n        }\n\n        private async Task RunTestGroup(ZumoTestGroup testGroup)\n        {\n            var appUrl = this.txtAppUrl.Text;\n            var appKey = this.txtAppKey.Text;\n\n            await SaveAppInfo();\n\n            string error = null;\n            try\n            {\n                ZumoTestGlobals.Instance.InitializeClient(appUrl, appKey);\n            }\n            catch (Exception ex)\n            {\n                error = string.Format(CultureInfo.InvariantCulture, \"{0}\", ex);\n            }\n\n            if (error != null)\n            {\n                MessageBox.Show(error, \"Error initializing client\", MessageBoxButton.OK);\n            }\n            else\n            {\n                try\n                {\n                    await testGroup.Run();\n                }\n                catch (Exception ex)\n                {\n                    error = string.Format(CultureInfo.InvariantCulture, \"Unhandled exception: {0}\", ex);\n                }\n\n                if (error != null)\n                {\n                    MessageBox.Show(error, \"Error\", MessageBoxButton.OK);\n                }\n                else\n                {\n                    if (testGroup.Name.StartsWith(TestStore.AllTestsGroupName) && !string.IsNullOrEmpty(this.txtUploadUrl.Text))\n                    {\n                        // Upload logs automatically if running all tests\n                        await Util.UploadLogs(this.txtUploadUrl.Text, string.Join(\"\\n\", testGroup.GetLogs()), \"wp8\", true);\n                    }\n                    else\n                    {\n                        int passed = this.currentGroup.AllTests.Count(t => t.Status == TestStatus.Passed);\n                        int skipped = this.currentGroup.AllTests.Count(t => t.Status == TestStatus.Skipped);\n                        int failed = this.currentGroup.AllTests.Count(t => t.Status == TestStatus.Failed);\n                        string message = string.Format(CultureInfo.InvariantCulture, \"Passed {0} of {1} tests (Skipped {2})\", passed, (passed + failed), skipped);\n                        MessageBox.Show(message, \"Test group finished\", MessageBoxButton.OK);\n                    }\n                }\n            }\n        }\n\n        private void appBtnBack_Click_1(object sender, EventArgs e)\n        {\n            SwapPanels(true);\n        }\n\n        private void appBtnReset_Click_1(object sender, EventArgs e)\n        {\n            try\n            {\n                if (this.currentGroup != null)\n                {\n                    foreach (var test in this.currentGroup.AllTests)\n                    {\n                        test.Reset();\n                    }\n                }\n                else\n                {\n                    MessageBox.Show(\"Please select a group to reset the tests from.\", \"Error\", MessageBoxButton.OK);\n                }\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(string.Format(CultureInfo.InvariantCulture, \"Unhandled exception: {0}\", ex), \"Error\", MessageBoxButton.OK);\n            }\n        }\n    }\n}"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/Properties/AppManifest.xml",
    "content": "﻿<Deployment xmlns=\"http://schemas.microsoft.com/client/2007/deployment\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n>\n    <Deployment.Parts>\n    </Deployment.Parts>\n</Deployment>\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/Properties/AssemblyInfo.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Resources;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"ZumoE2ETestAppWP8\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"ZumoE2ETestAppWP8\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"2220245f-5e6e-4881-85b3-ae6cc29ea4d9\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/Properties/WMAppManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Deployment xmlns=\"http://schemas.microsoft.com/windowsphone/2012/deployment\" AppPlatformVersion=\"8.0\">\n  <DefaultLanguage xmlns=\"\" code=\"en-US\" />\n  <App xmlns=\"\" ProductID=\"{520d957a-0b0e-4e85-a54f-dc5ce97c4a67}\" Title=\"ZumoE2ETestAppWP8\" RuntimeType=\"Silverlight\" Version=\"1.0.0.0\" Genre=\"apps.normal\" Author=\"ZumoE2ETestAppWP8 author\" Description=\"Sample description\" Publisher=\"ZumoE2ETestAppWP8\" PublisherID=\"{b7011139-5161-4ab6-8090-0a23119fbe6f}\">\n    <IconPath IsRelative=\"true\" IsResource=\"false\">Assets\\ApplicationIcon.png</IconPath>\n    <Capabilities>\n      <Capability Name=\"ID_CAP_NETWORKING\" />\n      <Capability Name=\"ID_CAP_MEDIALIB_AUDIO\" />\n      <Capability Name=\"ID_CAP_MEDIALIB_PLAYBACK\" />\n      <Capability Name=\"ID_CAP_SENSORS\" />\n      <Capability Name=\"ID_CAP_WEBBROWSERCOMPONENT\" />\n      <Capability Name=\"ID_CAP_PUSH_NOTIFICATION\" />\n    </Capabilities>\n    <Tasks>\n      <DefaultTask Name=\"_default\" NavigationPage=\"MainPage.xaml\" />\n    </Tasks>\n    <Tokens>\n      <PrimaryToken TokenID=\"ZumoE2ETestAppWP8Token\" TaskName=\"_default\">\n        <TemplateFlip>\n          <SmallImageURI IsRelative=\"true\" IsResource=\"false\">Assets\\Tiles\\FlipCycleTileSmall.png</SmallImageURI>\n          <Count>0</Count>\n          <BackgroundImageURI IsRelative=\"true\" IsResource=\"false\">Assets\\Tiles\\FlipCycleTileMedium.png</BackgroundImageURI>\n          <Title>ZumoE2ETestAppWP8</Title>\n          <BackContent>\n          </BackContent>\n          <BackBackgroundImageURI>\n          </BackBackgroundImageURI>\n          <BackTitle>\n          </BackTitle>\n          <DeviceLockImageURI>\n          </DeviceLockImageURI>\n          <HasLarge>\n          </HasLarge>\n        </TemplateFlip>\n      </PrimaryToken>\n    </Tokens>\n    <ScreenResolutions>\n      <ScreenResolution Name=\"ID_RESOLUTION_WVGA\" />\n      <ScreenResolution Name=\"ID_RESOLUTION_WXGA\" />\n      <ScreenResolution Name=\"ID_RESOLUTION_HD720P\" />\n    </ScreenResolutions>\n  </App>\n</Deployment>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/Resources/AppResources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.17929\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace ZumoE2ETestAppWP8.Resources {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AppResources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AppResources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"ZumoE2ETestAppWP8.Resources.AppResources\", typeof(AppResources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to add.\n        /// </summary>\n        public static string AppBarButtonText {\n            get {\n                return ResourceManager.GetString(\"AppBarButtonText\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Menu Item.\n        /// </summary>\n        public static string AppBarMenuItemText {\n            get {\n                return ResourceManager.GetString(\"AppBarMenuItemText\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Zumo E2E Test App.\n        /// </summary>\n        public static string ApplicationTitle {\n            get {\n                return ResourceManager.GetString(\"ApplicationTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to LeftToRight.\n        /// </summary>\n        public static string ResourceFlowDirection {\n            get {\n                return ResourceManager.GetString(\"ResourceFlowDirection\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to en-US.\n        /// </summary>\n        public static string ResourceLanguage {\n            get {\n                return ResourceManager.GetString(\"ResourceLanguage\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/Resources/AppResources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ResourceFlowDirection\" xml:space=\"preserve\">\n    <value>LeftToRight</value>\n    <comment>Controls the FlowDirection for all elements in the RootFrame. Set to the traditional direction of this resource file's language</comment>\n  </data>\n  <data name=\"ResourceLanguage\" xml:space=\"preserve\">\n    <value>en-US</value>\n    <comment>Controls the Language and ensures that the font for all elements in the RootFrame aligns with the app's language. Set to the language code of this resource file's language.</comment>\n  </data>\n  <data name=\"ApplicationTitle\" xml:space=\"preserve\">\n    <value>Zumo E2E Test App</value>\n  </data>\n  <data name=\"AppBarButtonText\" xml:space=\"preserve\">\n    <value>add</value>\n  </data>\n  <data name=\"AppBarMenuItemText\" xml:space=\"preserve\">\n    <value>Menu Item</value>\n  </data>\n</root>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/Tests/Types/Readme.txt",
    "content": "Files on this folder of the project are linked from the\n  ..\\..\\..\\ZumoE2ETestApp\\Test\\Types folder.\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/Tests/ZumoWP8PushTests.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Microsoft.Phone.Notification;\nusing Newtonsoft.Json.Linq;\nusing ZumoE2ETestApp.Framework;\nusing System.Xml.Linq;\nusing Microsoft.WindowsAzure.MobileServices;\n#if WINDOWS_PHONE\nusing ZumoE2ETestApp.Tests;\n#endif\n\nnamespace ZumoE2ETestAppWP8.Tests\n{\n    internal static class ZumoWP8PushTests\n    {\n        private static HttpNotificationChannel pushChannel;\n        private static Queue<HttpNotificationEventArgs> rawPushesReceived = new Queue<HttpNotificationEventArgs>();\n        private static Queue<NotificationEventArgs> toastPushesReceived = new Queue<NotificationEventArgs>();\n        const string ImageUrlDomain = \"http://zumotestserver.azurewebsites.net\";\n        const string imageUrl = \"http://zumotestserver.azurewebsites.net/content/zumo2.png\";\n        const string wideImageUrl = \"http://zumotestserver.azurewebsites.net/content/zumo1.png\";\n\n        public static ZumoTestGroup CreateTests()\n        {\n            ZumoTestGroup result = new ZumoTestGroup(\"Push tests\");\n            result.AddTest(CreateRegisterChannelTest());\n            result.AddTest(CreateToastPushTest(\"first text\", \"second text\"));\n            result.AddTest(CreateToastPushTest(\"ãéìôü ÇñÑ\", \"الكتاب على الطاولة\"));\n            result.AddTest(CreateToastPushTest(\"这本书在桌子上\", \"本は机の上に\"));\n            result.AddTest(CreateToastPushTest(\"הספר הוא על השולחן\", \"Книга лежит на столе\"));\n            result.AddTest(CreateToastPushTest(\"with param\", \"a value\", \"/UIElements/InputDialog\"));\n            result.AddTest(CreateRawPushTest(\"hello world\"));\n            result.AddTest(CreateRawPushTest(\"foobaráéíóú\"));\n            result.AddTest(CreateTilePushTest(\n                \"Simple tile\", new Uri(\"/Assets/Tiles/IconicTileMediumLarge.png\", UriKind.Relative), 0,\n                \"Simple tile\",\n                new Uri(\"/Assets/Tiles/IconicTileMediumLarge.png\", UriKind.Relative), \"Back title\", \"Back content\"));\n            result.AddTest(ZumoTestCommon.CreateTestWithSingleAlert(\"After clicking OK, make sure the application is pinned to the start menu\"));\n            result.AddTest(ZumoTestCommon.CreateYesNoTest(\"Is the app in the start menu?\", true));\n            result.AddTest(CreateTilePushTest(\"Tile with image\", new Uri(imageUrl), 3, \"Test title\", new Uri(wideImageUrl), \"Back title\", \"Back content\"));\n            result.AddTest(ZumoTestCommon.CreateYesNoTest(\"Did the tile change?\", true, 3000));\n            result.AddTest(CreateFlipTilePushTest(\"Flip tile\",\n                new Uri(\"/Assets/Tiles/FlipCycleTileMedium.png\", UriKind.Relative), 5, \"Flip title\",\n                new Uri(\"/Assets/Tiles/IconicTileSmall.png\", UriKind.Relative), \"Flip back title\", \"Flip back content\",\n                new Uri(\"/Assets/Tiles/FlipCycleTileSmall.png\", UriKind.Relative), new Uri(\"/Assets/Tiles/FlipCycleTileLarge.png\", UriKind.Relative),\n                \"Flip wide back content\", new Uri(\"/Assets/Tiles/FlipCycleTileLarge.png\", UriKind.Relative)));\n            result.AddTest(ZumoTestCommon.CreateYesNoTest(\"Did the tile change?\", true, 3000));\n\n            result.AddTest(CreateUnregisterChannelTest());\n\n            result.AddTest(CreateRegisterChannelTest(true, \"toast\"));\n            result.AddTest(CreateToastPushTest(\"World News in English!\", null, null, true));\n            result.AddTest(CreateUnregisterChannelTest(true, \"wp8\" + ZumoPushTestGlobals.NHToastTemplateName));\n            result.AddTest(CreateRegisterChannelTest(true, \"tile\"));\n            result.AddTest(CreateTilePushTest(\"Tile Template\", new Uri(imageUrl), 3, \"在普通话的世界新闻！\", null, null, null, true));\n            result.AddTest(CreateUnregisterChannelTest(true, \"wp8\" + ZumoPushTestGlobals.NHTileTemplateName));\n            result.AddTest(CreateRegisterChannelTest(true, \"raw\"));\n            result.AddTest(CreateRawPushTest(\"Nouvelles du monde en français!\", true));\n            result.AddTest(CreateUnregisterChannelTest(true, \"wp8\" + ZumoPushTestGlobals.NHRawTemplateName));\n\n            return result;\n        }\n\n        private static ZumoTest CreateTilePushTest(string testName,\n            Uri backgroundImage, int? count, string title,\n            Uri backBackgroundImage = null, string backTitle = null, string backContent = null, bool templatePush = false)\n        {\n            return CreateTilePushTest(testName, \"sendTile\",\n                backgroundImage, count, title,\n                backBackgroundImage, backTitle, backContent, null, null, null, null, templatePush);\n        }\n\n        private static ZumoTest CreateFlipTilePushTest(\n            string testName,\n            Uri backgroundImage, int? count, string title,\n            Uri backBackgroundImage, string backTitle, string backContent,\n            Uri smallBackgroundImage, Uri wideBackgroundImage,\n            string wideBackContent, Uri wideBackBackgroundImage)\n        {\n            return CreateTilePushTest(testName, \"sendFlipTile\",\n                backgroundImage, count, title,\n                backBackgroundImage, backTitle, backContent,\n                smallBackgroundImage, wideBackgroundImage,\n                wideBackContent, wideBackBackgroundImage);\n        }\n\n        private static ZumoTest CreateTilePushTest(\n            string testName, string methodName,\n            Uri backgroundImage, int? count, string title,\n            Uri backBackgroundImage = null, string backTitle = null, string backContent = null,\n            Uri smallBackgroundImage = null, Uri wideBackgroundImage = null,\n            string wideBackContent = null, Uri wideBackBackgroundImage = null, bool templatePush = false)\n        {\n            return new ZumoTest(\"SendTile - \" + testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable(ZumoTestGlobals.PushTestTableName);\n                var item = new JObject();\n                item.Add(\"method\", methodName);\n                item.Add(\"channelUri\", ZumoWP8PushTests.pushChannel.ChannelUri.AbsoluteUri);\n                item.Add(\"templateNotification\", ZumoPushTestGlobals.TemplateNotification);\n                if (ZumoTestGlobals.Instance.IsNHPushEnabled)\n                {\n                    item.Add(\"usingNH\", true);\n                }\n                if (templatePush)\n                {\n                    item.Add(\"templatePush\", true);\n                }\n                var payload = new JObject();\n                payload.Add(\"backgroundImage\", backgroundImage);\n                if (count.HasValue)\n                {\n                    payload.Add(\"count\", count);\n                }\n\n                payload.Add(\"title\", title);\n                payload.Add(\"backBackgroundImage\", backBackgroundImage);\n                payload.Add(\"backTitle\", backTitle);\n                payload.Add(\"backContent\", backContent);\n\n                if (smallBackgroundImage != null) payload.Add(\"smallBackgroundImage\", smallBackgroundImage);\n                if (wideBackgroundImage != null) payload.Add(\"wideBackgroundImage\", wideBackgroundImage);\n                if (wideBackContent != null) payload.Add(\"wideBackContent\", wideBackContent);\n                if (wideBackBackgroundImage != null) payload.Add(\"wideBackBackgroundImage\", wideBackBackgroundImage);\n\n                item.Add(\"payload\", payload);\n                var response = await table.InsertAsync(item);\n                test.AddLog(\"Response to (virtual) insert for push: {0}\", response);\n                return true;\n            }, templatePush ? ZumoTestGlobals.RuntimeFeatureNames.NH_PUSH_ENABLED : ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES)\n            {\n                CanRunUnattended = false\n            };\n        }\n\n        private static ZumoTest CreateToastPushTest(string text1, string text2 = null, string param = null, bool templatePush = false)\n        {\n            var testName = \"SendToast - [\" + text1 + \", \" + text2 + \", \" + (param ?? \"<<null>>\") + \"]\";\n            return new ZumoTest(testName, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable(ZumoTestGlobals.PushTestTableName);\n                var item = new JObject();\n                item.Add(\"method\", \"sendToast\");\n                item.Add(\"channelUri\", ZumoWP8PushTests.pushChannel.ChannelUri.AbsoluteUri);\n                item.Add(\"templateNotification\", ZumoPushTestGlobals.TemplateNotification);\n                if (ZumoTestGlobals.Instance.IsNHPushEnabled)\n                {\n                    item.Add(\"usingNH\", true);\n                }\n                if (templatePush)\n                {\n                    item.Add(\"templatePush\", true);\n                }\n                var payload = new JObject();\n                var expectedPushPayload = new JObject();\n                payload.Add(new JProperty(\"text1\", text1));\n                expectedPushPayload.Add(new JProperty(\"wp:Text1\", text1));\n                if (text2 != null)\n                {\n                    payload.Add(new JProperty(\"text2\", text2));\n                    expectedPushPayload.Add(new JProperty(\"wp:Text2\", text2));\n                }\n                if (param != null)\n                {\n                    payload.Add(\"param\", param);\n                }\n\n                item.Add(\"payload\", payload);\n                var response = await table.InsertAsync(item);\n                test.AddLog(\"Response to (virtual) insert for push: {0}\", response);\n                test.AddLog(\"Waiting for push...\");\n                var notification = await WaitForToastNotification(TimeSpan.FromSeconds(10));\n                if (notification != null)\n                {\n                    test.AddLog(\"Received notification:\");\n                    JObject actual = new JObject();\n                    foreach (var key in notification.Keys)\n                    {\n                        actual.Add(key, notification[key]);\n                        test.AddLog(\"  {0}: {1}\", key, notification[key]);\n                    }\n\n                    List<string> errors = new List<string>();\n                    if (Util.CompareJson(expectedPushPayload, actual, errors))\n                    {\n                        return true;\n                    }\n                    else\n                    {\n                        test.AddLog(\"Error, push received isn't the expected value\");\n                        foreach (var error in errors)\n                        {\n                            test.AddLog(error);\n                        }\n                        return false;\n                    }\n                }\n                else\n                {\n                    test.AddLog(\"Did not receive notification on time\");\n                    return false;\n                }\n            }, templatePush ? ZumoTestGlobals.RuntimeFeatureNames.NH_PUSH_ENABLED : ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES);\n        }\n\n        private async static Task<IDictionary<string, string>> WaitForToastNotification(TimeSpan maximumWait)\n        {\n            IDictionary<string, string> result = null;\n            var tcs = new TaskCompletionSource<IDictionary<string, string>>();\n            DateTime start = DateTime.UtcNow;\n            while (DateTime.UtcNow.Subtract(start) < maximumWait)\n            {\n                if (toastPushesReceived.Count > 0)\n                {\n                    result = toastPushesReceived.Dequeue().Collection;\n                    break;\n                }\n\n                await Util.TaskDelay(500);\n            }\n\n            return result;\n        }\n\n        private static ZumoTest CreateRawPushTest(string rawText, bool templatePush = false)\n        {\n            return new ZumoTest(\"SendRaw - \" + rawText, async delegate(ZumoTest test)\n            {\n                var client = ZumoTestGlobals.Instance.Client;\n                var table = client.GetTable(ZumoTestGlobals.PushTestTableName);\n                var item = new JObject();\n                item.Add(\"method\", \"sendRaw\");\n                item.Add(\"channelUri\", ZumoWP8PushTests.pushChannel.ChannelUri.AbsoluteUri);\n                item.Add(\"payload\", rawText);\n                item.Add(\"templateNotification\", ZumoPushTestGlobals.TemplateNotification);\n                if (ZumoTestGlobals.Instance.IsNHPushEnabled)\n                {\n                    item.Add(\"usingNH\", true);\n                }\n                if (templatePush)\n                {\n                    item.Add(\"templatePush\", true);\n                }\n                var response = await table.InsertAsync(item);\n                test.AddLog(\"Response to (virtual) insert for push: {0}\", response);\n                test.AddLog(\"Waiting for push...\");\n                var notification = await WaitForHttpNotification(TimeSpan.FromSeconds(10));\n                if (notification != null)\n                {\n                    test.AddLog(\"Received notification... headers:\");\n                    foreach (var header in notification.Headers.AllKeys)\n                    {\n                        test.AddLog(\"  {0}: {1}\", header, notification.Headers[header]);\n                    }\n\n                    string notificationBody = new StreamReader(notification.Body).ReadToEnd();\n                    test.AddLog(\"Received raw notification: {0}\", notificationBody);\n                    if (templatePush)\n                    {\n                        XElement rawNotificationContent = XElement.Parse(notificationBody);\n                        notificationBody = rawNotificationContent.Value;\n                    }\n                    if (notificationBody == rawText)\n                    {\n                        test.AddLog(\"Received expected notification\");\n                        return true;\n                    }\n                    else\n                    {\n                        test.AddLog(\"Notification received is incorrect!\");\n                        return false;\n                    }\n                }\n                else\n                {\n                    test.AddLog(\"Did not receive the notification on time\");\n                    return false;\n                }\n            }, templatePush ? ZumoTestGlobals.RuntimeFeatureNames.NH_PUSH_ENABLED : ZumoTestGlobals.RuntimeFeatureNames.STRING_ID_TABLES);\n        }\n\n        private async static Task<HttpNotification> WaitForHttpNotification(TimeSpan maximumWait)\n        {\n            HttpNotification result = null;\n            var tcs = new TaskCompletionSource<HttpNotification>();\n            DateTime start = DateTime.UtcNow;\n            while (DateTime.UtcNow.Subtract(start) < maximumWait)\n            {\n                if (rawPushesReceived.Count > 0)\n                {\n                    result = rawPushesReceived.Dequeue().Notification;\n                    break;\n                }\n\n                await Util.TaskDelay(500);\n            }\n\n            return result;\n        }\n\n        private static ZumoTest CreateUnregisterChannelTest(bool unRegisterTemplate = false, string templateName = null)\n        {\n            return new ZumoTest(\"Unregister push channel\", async delegate(ZumoTest test)\n            {\n                if (ZumoTestGlobals.Instance.IsNHPushEnabled)\n                {\n                    var client = ZumoTestGlobals.Instance.Client;\n                    var push = client.GetPush();\n                    if (unRegisterTemplate)\n                    {\n                        await push.UnregisterTemplateAsync(templateName);\n                    }\n                    else\n                    {\n                        await push.UnregisterNativeAsync();\n                    }\n                }\n\n                if (ZumoWP8PushTests.pushChannel != null)\n                {\n                    ZumoWP8PushTests.pushChannel.HttpNotificationReceived -= pushChannel_HttpNotificationReceived;\n                    ZumoWP8PushTests.pushChannel.ShellToastNotificationReceived -= pushChannel_ShellToastNotificationReceived;\n                    ZumoWP8PushTests.pushChannel.UnbindToShellTile();\n                    ZumoWP8PushTests.pushChannel.UnbindToShellToast();\n                    test.AddLog(\"Unbound from shell tile/toast\");\n                    ZumoWP8PushTests.pushChannel.Close();\n                    test.AddLog(\"Closed the push channel\");\n                    ZumoWP8PushTests.pushChannel = null;\n                }\n\n                TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n                tcs.SetResult(true);\n                return await tcs.Task;\n            }, unRegisterTemplate ? ZumoTestGlobals.RuntimeFeatureNames.NH_PUSH_ENABLED : null);\n        }\n\n        private static ZumoTest CreateRegisterChannelTest(bool registerTemplate = false, string templateType = null)\n        {\n            return new ZumoTest(\"Register push channel\", async delegate(ZumoTest test)\n            {\n                string channelName = \"MyPushChannel\";\n                var pushChannel = HttpNotificationChannel.Find(channelName);\n                if (pushChannel == null)\n                {\n                    pushChannel = new HttpNotificationChannel(channelName);\n                    test.AddLog(\"Created new channel\");\n                }\n                else\n                {\n                    test.AddLog(\"Reusing existing channel\");\n                }\n\n                ZumoWP8PushTests.pushChannel = pushChannel;\n\n                if (pushChannel.ConnectionStatus == ChannelConnectionStatus.Disconnected || pushChannel.ChannelUri == null)\n                {\n                    pushChannel.Open();\n                    test.AddLog(\"Opened the push channel\");\n                }\n                else\n                {\n                    test.AddLog(\"Channel already opened\");\n                }\n\n                if (pushChannel.IsShellToastBound)\n                {\n                    test.AddLog(\"Channel is already bound to shell toast\");\n                }\n                else\n                {\n                    var uris = new System.Collections.ObjectModel.Collection<Uri>();\n                    uris.Add(new Uri(ImageUrlDomain));\n                    pushChannel.BindToShellTile(uris);\n                    pushChannel.BindToShellToast();\n                    test.AddLog(\"Bound the push channel to shell toast / tile\");\n                }\n\n                TimeSpan maxWait = TimeSpan.FromSeconds(30);\n                await WaitForChannelUriAssignment(test, pushChannel, maxWait);\n\n\n                if (ZumoTestGlobals.Instance.IsNHPushEnabled)\n                {\n                    var zumoPush = ZumoTestGlobals.Instance.Client.GetPush();\n                    MpnsTemplateRegistration reg = null;\n                    if (registerTemplate)\n                    {\n                        switch (templateType)\n                        {\n                            case \"toast\":\n                                reg = new MpnsTemplateRegistration(pushChannel.ChannelUri.ToString(), ZumoPushTestGlobals.NHWp8ToastTemplate, \"wp8\" + ZumoPushTestGlobals.NHToastTemplateName, \"World English\".Split());\n                                break;\n                            case \"tile\":\n                                reg = new MpnsTemplateRegistration(pushChannel.ChannelUri.ToString(), ZumoPushTestGlobals.NHWp8TileTemplate, \"wp8\" + ZumoPushTestGlobals.NHTileTemplateName, \"World Mandarin\".Split());\n                                break;\n                            case \"raw\":\n                                IDictionary<string, string> wp8Headers = new Dictionary<string, string>();\n                                wp8Headers.Add(\"X-NotificationClass\", \"3\");\n                                reg = new MpnsTemplateRegistration(pushChannel.ChannelUri.ToString(), ZumoPushTestGlobals.NHWp8RawTemplate, \"wp8\" + ZumoPushTestGlobals.NHRawTemplateName, \"World French\".Split(), wp8Headers);\n                                break;\n                        }\n\n                        await zumoPush.RegisterAsync(reg);\n                        pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(async (o, args) =>\n                        {\n                            await zumoPush.RegisterAsync(reg);\n                        });\n\n                        test.AddLog(\"Registered to Notification hub\");\n                    }\n                    else\n                    {\n                        await zumoPush.RegisterNativeAsync(pushChannel.ChannelUri.ToString(), \"tag1 tag2\".Split());\n                        pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(async (o, args) =>\n                        {\n                            await zumoPush.RegisterNativeAsync(args.ChannelUri.ToString(), \"tag1 tag2\".Split());\n                        });\n                        test.AddLog(\"Registered with NH\");\n                    }\n                }\n                pushChannel.HttpNotificationReceived += pushChannel_HttpNotificationReceived;\n                pushChannel.ShellToastNotificationReceived += pushChannel_ShellToastNotificationReceived;\n                test.AddLog(\"Registered to raw / shell toast events\");\n\n                if (pushChannel.ConnectionStatus != ChannelConnectionStatus.Connected || pushChannel.ChannelUri == null)\n                {\n                    test.AddLog(\"Error, push channel isn't connected or channel URI is null\");\n                    return false;\n                }\n                else\n                {\n                    return true;\n                }\n            }, registerTemplate ? ZumoTestGlobals.RuntimeFeatureNames.NH_PUSH_ENABLED : null);\n        }\n\n        static async Task WaitForChannelUriAssignment(ZumoTest test, HttpNotificationChannel pushChannel, TimeSpan maxWait)\n        {\n            DateTime start = DateTime.UtcNow;\n            while (DateTime.UtcNow.Subtract(start) < maxWait)\n            {\n                if (pushChannel.ConnectionStatus == ChannelConnectionStatus.Connected && pushChannel.ChannelUri != null)\n                {\n                    test.AddLog(\"Channel URI: {0}\", pushChannel.ChannelUri);\n                    break;\n                }\n                else\n                {\n                    test.AddLog(\"Waiting for the push channel URI to be assigned\");\n                }\n\n                await Util.TaskDelay(500);\n            }\n        }\n\n        static void pushChannel_ShellToastNotificationReceived(object sender, NotificationEventArgs e)\n        {\n            ZumoWP8PushTests.toastPushesReceived.Enqueue(e);\n        }\n\n        static void pushChannel_HttpNotificationReceived(object sender, HttpNotificationEventArgs e)\n        {\n            ZumoWP8PushTests.rawPushesReceived.Enqueue(e);\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/UIElements/InputDialog.xaml",
    "content": "﻿<UserControl x:Class=\"ZumoE2ETestAppWP8.UIElements.InputDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    d:DesignHeight=\"240\" d:DesignWidth=\"480\">\n    \n    <Grid x:Name=\"LayoutRoot\" \n          Background=\"{StaticResource PhoneChromeBrush}\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"60\" />\n            <RowDefinition Height=\"*\" />\n            <RowDefinition Height=\"80\" />\n        </Grid.RowDefinitions>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"*\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n        <TextBlock Name=\"lblTitle\" Text=\"Title here\"\n                   Grid.ColumnSpan=\"2\" FontSize=\"30\"\n                   Margin=\"10\" VerticalAlignment=\"Center\"\n                   HorizontalAlignment=\"Center\"/>\n        <TextBox Name=\"txtContent\" Margin=\"10\"\n                 Text=\"\"\n                 Grid.Row=\"1\" Grid.ColumnSpan=\"2\"/>\n        <Button Name=\"btnOk\" Content=\"OK\" Grid.Row=\"2\"\n                Margin=\"5\" />\n        <Button Name=\"btnCancel\" Content=\"Cancel\" \n                Grid.Row=\"2\" Grid.Column=\"1\"\n                Margin=\"5\" />\n    </Grid>\n</UserControl>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/UIElements/InputDialog.xaml.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Navigation;\nusing Microsoft.Phone.Controls;\nusing Microsoft.Phone.Shell;\n\nnamespace ZumoE2ETestAppWP8.UIElements\n{\n    public partial class InputDialog : UserControl\n    {\n        public InputDialog()\n        {\n            InitializeComponent();\n        }\n\n        public static Task<bool> DisplayYesNo(string text)\n        {\n            Popup popup = new Popup();\n            popup.Height = 240;\n            popup.Width = 480;\n            popup.VerticalOffset = 100;\n            popup.VerticalAlignment = VerticalAlignment.Center;\n            InputDialog dialog = new InputDialog();\n            dialog.lblTitle.Text = \"Question\";\n            dialog.txtContent.Text = text;\n            dialog.btnCancel.Content = \"No\";\n            dialog.btnOk.Content = \"Yes\";\n            popup.Child = dialog;\n            TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();\n            dialog.btnCancel.Click += (s, ea) =>\n            {\n                tcs.SetResult(false);\n                popup.IsOpen = false;\n            };\n\n            dialog.btnOk.Click += (s, ea) =>\n            {\n                tcs.SetResult(true);\n                popup.IsOpen = false;\n            };\n\n            popup.IsOpen = true;\n            return tcs.Task;\n        }\n\n        public static Task<string> Display(string title, string text = null)\n        {\n            Popup popup = new Popup();\n            popup.Height = 240;\n            popup.Width = 480;\n            popup.VerticalOffset = 100;\n            popup.VerticalAlignment = VerticalAlignment.Center;\n            InputDialog dialog = new InputDialog();\n            dialog.lblTitle.Text = title;\n            dialog.txtContent.Text = text ?? \"\";\n            popup.Child = dialog;\n            TaskCompletionSource<string> tcs = new TaskCompletionSource<string>();\n            dialog.btnCancel.Click += (s, ea) =>\n            {\n                tcs.SetResult(null);\n                popup.IsOpen = false;\n            };\n\n            dialog.btnOk.Click += (s, ea) =>\n            {\n                tcs.SetResult(dialog.txtContent.Text);\n                popup.IsOpen = false;\n            };\n\n            popup.IsOpen = true;\n            return tcs.Task;\n        }\n    }\n}\n"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/ZumoE2ETestAppWP8.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{520D957A-0B0E-4E85-A54F-DC5CE97C4A67}</ProjectGuid>\n    <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>ZumoE2ETestAppWP8</RootNamespace>\n    <AssemblyName>ZumoE2ETestAppWP8</AssemblyName>\n    <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>\n    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>\n    <SilverlightApplication>true</SilverlightApplication>\n    <SupportedCultures>\n    </SupportedCultures>\n    <XapOutputs>true</XapOutputs>\n    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>\n    <XapFilename>ZumoE2ETestAppWP8_$(Configuration)_$(Platform).xap</XapFilename>\n    <SilverlightManifestTemplate>Properties\\AppManifest.xml</SilverlightManifestTemplate>\n    <SilverlightAppEntry>ZumoE2ETestAppWP8.App</SilverlightAppEntry>\n    <ValidateXaml>true</ValidateXaml>\n    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>\n    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\x86\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\x86\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|ARM' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\ARM\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|ARM' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\ARM\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\TestStatus.cs\">\n      <Link>Framework\\TestStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\Util.cs\">\n      <Link>Framework\\Util.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\ZumoPushGlobals.cs\">\n      <Link>Framework\\ZumoPushGlobals.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\ZumoTest.cs\">\n      <Link>Framework\\ZumoTest.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\ZumoTestEventArgs.cs\">\n      <Link>Framework\\ZumoTestEventArgs.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\ZumoTestGlobals.cs\">\n      <Link>Framework\\ZumoTestGlobals.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\ZumoTestGroup.cs\">\n      <Link>Framework\\ZumoTestGroup.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Framework\\ZumoTestGroupEventArgs.cs\">\n      <Link>Framework\\ZumoTestGroupEventArgs.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ExceptionTypeWhichWillNeverBeThrown.cs\">\n      <Link>Tests\\ExceptionTypeWhichWillNeverBeThrown.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\TestStore.cs\">\n      <Link>Tests\\TestStore.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\Types\\Movie.cs\">\n      <Link>Tests\\Types\\Movie.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\Types\\RoundTripTableItem.cs\">\n      <Link>Tests\\Types\\RoundTripTableItem.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\Types\\StringIdRoundTripTableItem.cs\">\n      <Link>Tests\\Types\\StringIdRoundTripTableItem.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\Types\\ICloneableItem.cs\">\n      <Link>Tests\\Types\\ICloneableItem.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\Types\\VersionedType.cs\">\n      <Link>Tests\\Types\\VersionedType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoCUDTests.cs\">\n      <Link>Tests\\ZumoCUDTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoCustomApiTests.cs\">\n      <Link>Tests\\ZumoCustomApiTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoLoginTests.cs\">\n      <Link>Tests\\ZumoLoginTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoMiscTests.cs\">\n      <Link>Tests\\ZumoMiscTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoQueryTestData.cs\">\n      <Link>Tests\\ZumoQueryTestData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoQueryTests.cs\">\n      <Link>Tests\\ZumoQueryTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoRoundTripTests.cs\">\n      <Link>Tests\\ZumoRoundTripTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoSetupTests.cs\">\n      <Link>Tests\\ZumoSetupTests.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\Tests\\ZumoTestCommon.cs\">\n      <Link>Tests\\ZumoTestCommon.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\UIElements\\AppInfoRepository.cs\">\n      <Link>UIElements\\AppInfoRepository.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\UIElements\\ListViewForTest.cs\">\n      <Link>UIElements\\ListViewForTest.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\ZumoE2ETestApp\\UIElements\\ListViewForTestGroup.cs\">\n      <Link>UIElements\\ListViewForTestGroup.cs</Link>\n    </Compile>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"LocalizedStrings.cs\" />\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Resources\\AppResources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>AppResources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Tests\\ZumoWP8PushTests.cs\" />\n    <Compile Include=\"UIElements\\InputDialog.xaml.cs\">\n      <DependentUpon>InputDialog.xaml</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"UIElements\\InputDialog.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"Fonts\\LiveSymbol.ttf\" />\n    <None Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"Properties\\AppManifest.xml\" />\n    <None Include=\"Properties\\WMAppManifest.xml\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Assets\\AlignmentGrid.png\" />\n    <Content Include=\"Assets\\AppBar\\back.png\" />\n    <Content Include=\"Assets\\AppBar\\run.png\" />\n    <Content Include=\"Assets\\AppBar\\upload.png\" />\n    <Content Include=\"Assets\\ApplicationIcon.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileLarge.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileMedium.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileSmall.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\IconicTileMediumLarge.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\IconicTileSmall.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Resources\\AppResources.resx\">\n      <Generator>PublicResXFileCodeGenerator</Generator>\n      <LastGenOutput>AppResources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.Live, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\LiveSDK.5.6\\lib\\WindowsPhone8\\Microsoft.Live.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Live.Controls, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\LiveSDK.5.6\\lib\\WindowsPhone8\\Microsoft.Live.Controls.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\WindowsAzure.MobileServices.1.3.0-beta\\lib\\wp8\\Microsoft.WindowsAzure.Mobile.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile.Ext, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\WindowsAzure.MobileServices.1.3.0-beta\\lib\\wp8\\Microsoft.WindowsAzure.Mobile.Ext.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile.UI, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\WindowsAzure.MobileServices.1.3.0-beta\\lib\\wp8\\Microsoft.WindowsAzure.Mobile.UI.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Newtonsoft.Json.6.0.3\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.22\\lib\\sl4-windowsphone71\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.22\\lib\\sl4-windowsphone71\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.22\\lib\\sl4-windowsphone71\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ProjectExtensions />\n  <Import Project=\"$(SolutionDir)\\.nuget\\nuget.targets\" />\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n</Project>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.0.0.0\" newVersion=\"6.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "test/PLib/ZumoE2ETestApp/ZumoE2ETestAppWP8/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"LiveSDK\" version=\"5.6\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.22\" targetFramework=\"wp80\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.3\" targetFramework=\"wp80\" />\n  <package id=\"WindowsAzure.MobileServices\" version=\"1.3.0-beta\" targetFramework=\"wp80\" />\n</packages>"
  },
  {
    "path": "test/SetupScripts/apis/SetupAPIs.bat",
    "content": "@echo off\nif \"%1\" == \"\" goto :Error\ngoto :Start\n\n:Error\necho usage: %0 ^<application name^>\necho   where application name is a azure mobile Service app.\ngoto :TheEnd\n\n:Start\ncall azure mobile api create %1 admin --permissions *=admin\ncall azure mobile api create %1 application --permissions *=application\ncall azure mobile api create %1 user  --permissions *=user\ncall azure mobile api create %1 public --permissions *=public\ncall azure mobile api create %1 shared --permissions *=admin\ncall azure mobile api create %1 movieFinder --permissions *=application\ncall azure mobile api create %1 runtimeInfo --permissions GET=public,POST=admin\n\ncall azure mobile script upload %1 api/admin.js -f admin.js\ncall azure mobile script upload %1 api/application.js -f application.js\ncall azure mobile script upload %1 api/user.js -f user.js\ncall azure mobile script upload %1 api/public.js -f public.js\ncall azure mobile script upload %1 api/shared.js -f shared.js\ncall azure mobile script upload %1 api/moviefinder.js -f moviefinder.js\ncall azure mobile script upload %1 api/runtimeInfo.js -f runtimeInfo.js\n\n:TheEnd\n"
  },
  {
    "path": "test/SetupScripts/apis/SetupAPIs.sh",
    "content": "#!/bin/bash\nif [ \"$1\" = \"\" ]; then\n  echo Usage: $0 \\<applicationName\\>\n  echo .  Where \\<applicationName\\> is an Azure Mobile Service app.\nelse\n  azure mobile api create $1 admin —-permissions *=admin\n  azure mobile api create $1 application —-permissions *=application\n  azure mobile api create $1 user —-permissions *=user\n  azure mobile api create $1 public —-permissions *=public\n  azure mobile api create $1 shared —-permissions *=admin\n  azure mobile api create $1 movieFinder —-permissions *=application\n  azure mobile api create $1 runtimeInfo —-permissions GET=public,POST=admin\n\n  azure mobile script upload $1 api/admin.js -f admin.js\n  azure mobile script upload $1 api/application -f application.js\n  azure mobile script upload $1 api/user -f user.js\n  azure mobile script upload $1 api/public -f public.js\n  azure mobile script upload $1 api/shared -f shared.js\n  azure mobile script upload $1 api/movieFinder -f movieFinder.js\n  azure mobile script upload $1 api/runtimeInfo -f runtimeInfo.js\n\nfi\n"
  },
  {
    "path": "test/SetupScripts/apis/admin.js",
    "content": "var handleRequest = require('./shared').handleRequest;\nexports.get = handleRequest;\nexports.post = handleRequest;\nexports.put = handleRequest;\nexports.patch = handleRequest;\nexports.delete = handleRequest;\n"
  },
  {
    "path": "test/SetupScripts/apis/admin.json",
    "content": "{\n    \"routes\": {\n        \"*\": { \"permission\": \"admin\" }\n    }\n}\n"
  },
  {
    "path": "test/SetupScripts/apis/application.js",
    "content": "var handleRequest = require('./shared').handleRequest;\nexports.get = handleRequest;\nexports.post = handleRequest;\nexports.put = handleRequest;\nexports.patch = handleRequest;\nexports.delete = handleRequest;\n"
  },
  {
    "path": "test/SetupScripts/apis/application.json",
    "content": "{\n    \"routes\": {\n        \"*\": { \"permission\": \"application\" }\n    }\n}\n"
  },
  {
    "path": "test/SetupScripts/apis/movieFinder.js",
    "content": "exports.register = function(app) {\n    app.get('/title/:title', getByTitle);\n    app.get('/date/:year/:month/:day', getByDate);\n    app.post('moviesOnSameYear', fetchMoviesSameYear);\n    app.post('moviesWithSameDuration', fetchMoviesSameDuration);\n}\n\nfunction getByTitle(req, res) { getMovie(req, res, 'Title', req.params.title); }\nfunction getByDate(req, res) {\n    var year = parseInt(req.params.year, 10);\n    var month = parseInt(req.params.month, 10);\n    var day = parseInt(req.params.day, 10);\n    getMovie(req, res, 'ReleaseDate', new Date(Date.UTC(year, month - 1, day)));\n}\nfunction replyWithError(response) {\n    return function(err) {\n        console.log('Error: ', err);\n        response.send(500, { error: err });\n    }\n}\nfunction getMovie(req, res, field, value) {\n    var table = req.service.tables.getTable('stringIdMovies');\n    console.log('table: ', table);\n    var filter = {};\n    filter[field] = value;\n    console.log('Field: ', field, ', value: ', value);\n    table.where(filter).read({\n        success: function(results) {\n            res.send(200, { movies: results });\n        }, error: replyWithError(res)\n    });\n}\nfunction fetchMoviesSameYear(req, res) {\n    var movie = req.body;\n    var table = req.service.tables.getTable('stringIdMovies');\n    var orderBy = req.query.orderBy || 'Title';\n    table.where({ Year: movie.Year }).orderBy(orderBy).read({\n        success: function(results) {\n            res.send(200, { movies: results });\n        }, error: replyWithError(res)\n    });\n}\nfunction fetchMoviesSameDuration(req, res) {\n    var movie = req.body;\n    var table = req.service.tables.getTable('stringIdMovies');\n    var orderBy = req.query.orderBy || 'Title';\n    table.where({ Duration: movie.Duration }).orderBy(orderBy).read({\n        success: function(results) {\n            res.send(200, { movies: results });\n        }, error: replyWithError(res)\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/apis/movieFinder.json",
    "content": "{\n    \"routes\": {\n        \"*\": { \"permission\": \"application\" }\n    }\n}\n"
  },
  {
    "path": "test/SetupScripts/apis/public.js",
    "content": "var handleRequest = require('./shared').handleRequest;\nexports.get = handleRequest;\nexports.post = handleRequest;\nexports.put = handleRequest;\nexports.patch = handleRequest;\nexports.delete = handleRequest;\n"
  },
  {
    "path": "test/SetupScripts/apis/public.json",
    "content": "{\n    \"routes\": {\n        \"*\": { \"permission\": \"public\" }\n    }\n}\n"
  },
  {
    "path": "test/SetupScripts/apis/runtimeInfo.js",
    "content": "exports.get = function(request, response) {\n    response.send(statusCodes.OK, {\n        runtime : { type: 'node.js', version: process.version },\n        features: {\n            intIdTables: true,\n            stringIdTables: true,\n            nhPushEnabled: !!(request.service.push.send),\n            queryExpandSupport: false,\n            usersEnabled: /\\\"users\\\"/i.test(process.env.MS_PreviewFeatures),\n            liveSDKLogin: true,\n            azureActiveDirectoryLogin: true,\n            singleSignOnLogin: true\n        }\n    });\n};\n"
  },
  {
    "path": "test/SetupScripts/apis/runtimeInfo.json",
    "content": "﻿{\n    \"routes\": {\n        \"GET\": { \"permission\": \"public\" },\n        \"POST\": { \"permission\": \"admin\" },\n        \"DELETE\": { \"permission\": \"admin\" },\n        \"PUT\": { \"permission\": \"admin\" },\n        \"PATCH\": { \"permission\": \"admin\" }\n    }\n}\n"
  },
  {
    "path": "test/SetupScripts/apis/shared.js",
    "content": "exports.get = handleRequest;\nexports.post = handleRequest;\nexports.put = handleRequest;\nexports.patch = handleRequest;\nexports.del = handleRequest;\n\nexports.handleRequest = handleRequest;\nfunction handleRequest(req, res) {\n    var format = req.query.format || 'json';\n    var status = req.query.status || 200;\n    var output = { method: req.method };\n    for (var q in req.query) {\n        if (q !== 'format' && q !== 'status' && req.query.hasOwnProperty(q)) {\n            var val = req.query[q];\n            if (typeof val === 'string') {\n                if (!output.query) output.query = {};\n                output.query[q] = req.query[q];\n            }\n        }\n    }\n    var reqHeaders = req.headers;\n    for (var reqHeader in reqHeaders) {\n        if (reqHeaders.hasOwnProperty(reqHeader) && reqHeader.indexOf('x-test-zumo-') === 0) {\n            res.set(reqHeader, reqHeaders[reqHeader]);\n        }\n    }\n\n    if (req.body) {\n        output.body = req.body;\n    }\n\n    output.user = JSON.parse(JSON.stringify(req.user)); // remove functions\n\n    switch (format) {\n        case 'json':\n            break; // nothing to do\n        case 'xml':\n            res.set('Content-Type', 'text/xml');\n            output = objToXml(output);\n            break;\n        default:\n            res.set('Content-Type', 'text/plain');\n            output = JSON.stringify(output)\n                         .replace(/{/g, '__{__')\n                         .replace(/}/g, '__}__')\n                         .replace(/\\[/g, '__[__')\n                         .replace(/\\]/g, '__]__');\n            break;\n    }\n    \n    res.send(status, output);\n    res.end();\n}\n\nfunction objToXml(obj) {\n    return '<root>' + jsToXml(obj) + '</root>';\n}\n\nfunction jsToXml(value) {\n    if (value === null) return 'null';\n    var type = typeof value;\n    var result = '';\n    var i = 0;\n    switch (type.toLowerCase()) {\n        case 'string':\n        case 'boolean':\n        case 'number':\n            return value.toString();\n        case 'function':\n        case 'object':\n            if (Object.prototype.toString.call( value ) === '[object Array]') {\n                result = result + '<array>';\n                for (i = 0; i < value.length; i++) {\n                    result = result + '<item>' + jsToXml(value[i]) + '</item>';\n                }\n                result = result + '</array>';\n            } else {\n                var k;\n                var keys = [];\n                for (k in value) {\n                    if (value.hasOwnProperty(k)) {\n                        if (typeof value[k] !== 'function') {\n                            keys.push(k);\n                        }\n                    }\n                }\n                keys.sort();\n                for (i = 0; i < keys.length; i++) {\n                    k = keys[i];\n                    result = result + '<' + k + '>' + jsToXml(value[k]) + '</' + k + '>';\n                }\n            }\n    }\n    return result;\n}\n"
  },
  {
    "path": "test/SetupScripts/apis/shared.json",
    "content": "{\n    \"routes\": {\n        \"*\": { \"permission\": \"admin\" }\n    }\n}\n"
  },
  {
    "path": "test/SetupScripts/apis/user.js",
    "content": "var handleRequest = require('./shared').handleRequest;\nexports.get = handleRequest;\nexports.post = handleRequest;\nexports.put = handleRequest;\nexports.patch = handleRequest;\nexports.delete = handleRequest;\n"
  },
  {
    "path": "test/SetupScripts/apis/user.json",
    "content": "{\n    \"routes\": {\n        \"*\": { \"permission\": \"user\" }\n    }\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/ParamsTestTable.delete.js",
    "content": "function del(id, user, request) {\n    var params = request.parameters;\n    request.respond(200, { id: id, parameters: JSON.stringify(params) });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/ParamsTestTable.insert.js",
    "content": "function insert(item, user, request) {\n    var params = request.parameters;\n    request.respond(201, { id: 1, parameters: JSON.stringify(params) });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/ParamsTestTable.read.js",
    "content": "function read(query, user, request) {\n    var params = request.parameters;\n    if (query.id) {\n        request.respond(200, { id: query.id, parameters: JSON.stringify(params) });\n    } else {\n        request.respond(200, [{ id: 1, parameters: JSON.stringify(params) }]);\n    }\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/ParamsTestTable.update.js",
    "content": "function update(item, user, request) {\n    var params = request.parameters;\n    request.respond(200, { id: item.id, parameters: JSON.stringify(params) });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/SetupTables.bat",
    "content": "@echo off\nif \"%1\" == \"\" goto :Error\ngoto :Start\n\n:Error\necho usage: %0 ^<application name^>\necho   where application name is an  azure mobileService app.\necho   To run the login tests, the application needs to be configured\necho   with all four providers.\ngoto :TheEnd\n\n:Start\ncall azure mobile table create %1 stringIdRoundTripTable\ncall azure mobile table create %1 stringIdRoundTripSoftDeleteTable\ncall azure mobile table create %1 stringIdMovies\ncall azure mobile table create %1 offlineReady\ncall azure mobile table create %1 offlineReadyNoVersionAuthenticated\ncall azure mobile table update --deleteColumn __version --quiet %1 offlineReadyNoVersionAuthenticated\ncall azure mobile table create --integerId %1 intIdMovies\ncall azure mobile table create --integerId %1 ParamsTestTable\n\nREM Tables specific to functional tests\ncall azure mobile table create --integerId %1 blog_posts\ncall azure mobile table create --integerId %1 blog_comments\ncall azure mobile table create --integerId %1 books\ncall azure mobile table create %1 stringId_test_table\ncall azure mobile table create --integerId %1 test_table\ncall azure mobile table create --integerId %1 types\n\nREM Tables specific to E2E tests\ncall azure mobile table create --integerId %1 admin\ncall azure mobile table create --integerId %1 application\ncall azure mobile table create --integerId %1 authenticated\ncall azure mobile table create --integerId %1 public\n\nREM Tables specific to JS tests\ncall azure mobile table create --integerId %1 w8jsRoundTripTable\ncall azure mobile table create %1 w8jsServerQueryMovies\n\nREM Tables specific to Managed tests\ncall azure mobile table create %1 --integerId w8RoundTripTable\n\nREM Tables specific to iOS tests\ncall azure mobile table create --integerId %1 iosRoundTripTable\n\nREM Tables specific to Android tests\ncall azure mobile table create --integerId %1 droidRoundTripTable\n\nREM Tables specific to push tests\ncall azure mobile table create %1 iosPushTest\ncall azure mobile table create %1 w8PushTest\ncall azure mobile table create %1 wp8PushTest\ncall azure mobile table create --integerId %1 droidPushTest\n\nREM Permissions\nREM Tables specific to unit tests\ncall azure mobile table update --addColumn title=string,commentCount=number,showComments=boolean,data=string -p insert=public,read=public,update=application,delete=public %1 blog_posts\ncall azure mobile table update --addColumn postId=string,commentText=string,name=string,test=number -p insert=public,read=public,update=public,delete=public %1 blog_comments\ncall azure mobile table update --addColumn title=string,type=string,pub_id=string,price=number,advance=number,royalty=number,ytd_sales=number,notes=string,pubdate=date -p insert=public,read=public,update=public,delete=public %1 books\ncall azure mobile table update --addColumn col5=boolean,name=string -p insert=public,read=public,update=public,delete=public %1 stringId_test_table\ncall azure mobile table update --addColumn col5=boolean,__anything=string -p insert=public,read=public,update=public,delete=public %1 test_table\ncall azure mobile table update --addColumn numCol=number,stringCol=string,dateCol=date,boolCol=boolean -p insert=public,read=public,update=public,delete=public %1 types\n\nREM Tables specific to E2E tests\ncall azure mobile table update -p insert=admin,read=admin,update=admin,delete=admin %1 admin\ncall azure mobile table update -p insert=application,read=application,update=application,delete=application %1 application\ncall azure mobile table update -p insert=user,read=user,update=user,delete=user %1 authenticated\ncall azure mobile table update -p insert=application,read=public,update=public,delete=public %1 public\ncall azure mobile table update -p insert=admin,read=application,update=admin,delete=admin %1 w8jsServerQueryMovies\ncall azure mobile table update -p insert=user,read=user,update=user,delete=user %1 offlineReadyNoVersionAuthenticated\n\nREM Scripts\nREM Tables specific to unit tests\ncall azure mobile script upload %1 table/blog_comments.insert -f blog_comments.insert.js\ncall azure mobile script upload %1 table/blog_comments.read -f blog_comments.read.js\n\nREM Tables specific to E2E tests\ncall azure mobile script upload %1 table/stringIdRoundTripTable.insert -f stringIdRoundTripTable.insert.js\ncall azure mobile script upload %1 table/stringIdRoundTripTable.read -f stringIdRoundTripTable.read.js\ncall azure mobile script upload %1 table/stringIdRoundTripTable.update -f stringIdRoundTripTable.update.js\ncall azure mobile script upload %1 table/stringIdMovies.insert -f bothIdTypeMovies.insert.js\ncall azure mobile script upload %1 table/intIdMovies.insert -f bothIdTypeMovies.insert.js\ncall azure mobile script upload %1 table/ParamsTestTable.insert -f ParamsTestTable.insert.js\ncall azure mobile script upload %1 table/ParamsTestTable.read -f ParamsTestTable.read.js\ncall azure mobile script upload %1 table/ParamsTestTable.update -f ParamsTestTable.update.js\ncall azure mobile script upload %1 table/ParamsTestTable.delete -f ParamsTestTable.delete.js\ncall azure mobile script upload %1 table/authenticated.insert -f authenticated.insert.js\ncall azure mobile script upload %1 table/authenticated.read -f authenticated.read.js\ncall azure mobile script upload %1 table/authenticated.update -f authenticated.update.js\ncall azure mobile script upload %1 table/authenticated.delete -f authenticated.delete.js\n\nREM Tables specific to JS tests\ncall azure mobile script upload %1 table/w8jsRoundTripTable.insert -f w8jsRoundTripTable.insert.js\ncall azure mobile script upload %1 table/w8jsRoundTripTable.read -f w8jsRoundTripTable.read.js\ncall azure mobile script upload %1 table/w8jsRoundTripTable.update -f w8jsRoundTripTable.update.js\ncall azure mobile script upload %1 table/w8jsServerQueryMovies.read -f w8jsServerQueryMovies.read.js\n\nREM Tables specific to managed tests\ncall azure mobile script upload %1 table/w8RoundTripTable.insert -f w8RoundTripTable.insert.js\ncall azure mobile script upload %1 table/w8RoundTripTable.read -f w8RoundTripTable.read.js\ncall azure mobile script upload %1 table/w8RoundTripTable.update -f w8RoundTripTable.update.js\n\nREM Tables specific to iOS tests\ncall azure mobile script upload %1 table/iosRoundTripTable.insert -f iosRoundTripTable.insert.js\n\nREM Tables specific to Android tests\ncall azure mobile script upload %1 table/droidRoundTripTable.insert -f droidRoundTripTable.insert.js\ncall azure mobile script upload %1 table/droidRoundTripTable.read -f droidRoundTripTable.read.js\ncall azure mobile script upload %1 table/droidRoundTripTable.update -f droidRoundTripTable.update.js\n\nREM Tables specific to push tests\ncall azure mobile script upload %1 table/iosPushTest.insert -f iosPushTest.insert.js\ncall azure mobile script upload %1 table/w8PushTest.insert -f w8PushTest.insert.js\ncall azure mobile script upload %1 table/wp8PushTest.insert -f wp8PushTest.insert.js\ncall azure mobile script upload %1 table/droidPushTest.insert -f droidPushTest.insert.js\n\n:TheEnd\n"
  },
  {
    "path": "test/SetupScripts/tables/SetupTables.sh",
    "content": "#!/bin/bash\nif [ \"$1\" = \"\" ]; then\n  echo Usage: $0 \\<applicationName\\>\n  echo .  Where \\<applicationName\\> is an Azure Mobile Service app.\n  echo .  To run the login tests, the application needs to be configured\n  echo .    with all four login providers.\nelse\n  azure mobile table create $1 stringIdRoundTripTable\n  azure mobile table create $1 stringIdRoundTripSoftDeleteTable\n  azure mobile table create $1 stringIdMovies\n  azure mobile table create $1 offlineReady\n  azure mobile table create $1 offlineReadyNoVersion\n  azure mobile table update --deleteColumn __version --quiet $1 offlineReadyNoVersion\n  azure mobile table create --integerId $1 public\n  azure mobile table create --integerId $1 admin\n  azure mobile table create --integerId $1 application\n  azure mobile table create --integerId $1 authenticated\n  azure mobile table create --integerId $1 intIdMovies\n  azure mobile table create --integerId $1 ParamsTestTable\n\n  #Tables specific to JS tests\n  azure mobile table create --integerId $1 w8jsRoundTripTable\n  azure mobile table create $1 w8jsServerQueryMovies\n\n  #Tables specific to Managed tests\n  azure mobile table create --integerId $1 w8RoundTripTable\n\n  #Tables specific to iOS tests\n  azure mobile table create --integerId $1 iosRoundTripTable\n\n  #Tables specific to Android tests\n  azure mobile table create --integerId $1 droidRoundTripTable\n\n  #Tables used in push tests\n  azure mobile table create $1 iosPushTest\n  azure mobile table create $1 w8PushTest\n  azure mobile table create $1 wp8PushTest\n  azure mobile table create --integerId $1 droidPushTest\n\n  azure mobile table update -p insert=admin,read=admin,update=admin,delete=admin $1 admin\n  azure mobile table update -p insert=application,read=application,update=application,delete=application $1 application\n  azure mobile table update -p insert=user,read=user,update=user,delete=user $1 authenticated\n  azure mobile table update -p insert=application,read=public,update=public,delete=public $1 public\n  azure mobile table update -p insert=user,read=user,update=user,delete=user $1 offlineReadyNoVersionAuthenticated\n\n  azure mobile script upload $1 table/stringIdRoundTripTable.insert -f stringIdRoundTripTable.insert.js\n  azure mobile script upload $1 table/stringIdRoundTripTable.update -f stringIdRoundTripTable.update.js\n  azure mobile script upload $1 table/stringIdRoundTripTable.read -f stringIdRoundTripTable.read.js\n  azure mobile script upload $1 table/stringIdMovies.insert -f bothIdTypeMovies.insert.js\n  azure mobile script upload $1 table/intIdMovies.insert -f bothIdTypeMovies.insert.js\n  azure mobile script upload $1 table/ParamsTestTable.insert -f ParamsTestTable.insert.js\n  azure mobile script upload $1 table/ParamsTestTable.read -f ParamsTestTable.read.js\n  azure mobile script upload $1 table/ParamsTestTable.delete -f ParamsTestTable.delete.js\n  azure mobile script upload $1 table/ParamsTestTable.update -f ParamsTestTable.update.js\n  azure mobile script upload $1 table/iosAuthenticated.insert -f iosAuthenticated.insert.js\n  azure mobile script upload $1 table/iosAuthenticated.read -f iosAuthenticated.read.js\n  azure mobile script upload $1 table/iosAuthenticated.update -f iosAuthenticated.update.js\n  azure mobile script upload $1 table/iosAuthenticated.delete -f iosAuthenticated.delete.js\n\n  #Tables specific to JS tests\n  azure mobile script upload $1 table/w8jsRoundTripTable.insert -f w8jsRoundTripTable.insert.js\n  azure mobile script upload $1 table/w8jsRoundTripTable.read -f w8jsRoundTripTable.read.js\n  azure mobile script upload $1 table/w8jsRoundTripTable.update -f w8jsRoundTripTable.update.js\n  azure mobile script upload $1 table/w8jsServerQueryMovies.read -f w8jsServerQueryMovies.read.js\n\n  #Tables specific to managed tests\n  azure mobile script upload $1 table/w8RoundTripTable.insert -f w8RoundTripTable.insert.js\n  azure mobile script upload $1 table/w8RoundTripTable.read -f w8RoundTripTable.read.js\n  azure mobile script upload $1 table/w8RoundTripTable.update -f w8RoundTripTable.update.js\n\n  #Tables specific to iOS tests\n  azure mobile script upload $1 table/iosRoundTripTable.insert -f iosRoundTripTable.insert.js\n\n  #Tables specific to Android tests\n  azure mobile script upload $1 table/droidRoundTripTable.insert -f droidRoundTripTable.insert.js\n  azure mobile script upload $1 table/droidRoundTripTable.read -f droidRoundTripTable.read.js\n  azure mobile script upload $1 table/droidRoundTripTable.update -f droidRoundTripTable.update.js\n\n  #Tables used in Push tests\n  azure mobile script upload $1 table/w8PushTest.insert -f w8PushTest.insert.js\n  azure mobile script upload $1 table/wp8PushTest.insert -f wp8PushTest.insert.js\n  azure mobile script upload $1 table/iosPushTest.insert -f iosPushTest.insert.js\n  azure mobile script upload $1 table/droidPushTest.insert -f droidPushTest.insert.js\n\nfi\n"
  },
  {
    "path": "test/SetupScripts/tables/authenticated.delete.js",
    "content": "function del(id, user, request) {\n    tables.current.where({id: id}).read({\n        success: function(results) {\n            if (results.length) {\n                var existingItem = results[0];\n                if (existingItem.userId !== user.userId) {\n                    request.respond(400, {error: 'Mismatching user id'});\n                } else {\n                    request.execute(); // it's ok, continue\n                }\n            } else {\n                request.execute(); // default behavior, error due to 404\n            }\n        }\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/authenticated.insert.js",
    "content": "function insert(item, user, request) {\n    item.userId = user.userId;\n    request.execute();\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/authenticated.read.js",
    "content": "function read(query, user, request) {    \n    query.where({userId: user.userId});\n    request.execute({\n        success: addIdentityToResults.bind(null, request, user)\n    });\n}\n\nfunction addIdentityToResults(request, user, results) {\n    user.getIdentities({\n        success: function(identities) {\n            identities = JSON.stringify(identities);\n            results.forEach(function(item) {\n                item.Identities = identities;\n                item.UsersEnabled = isUsersEnabled();\n            });\n            request.respond();\n        }\n   });    \n}\n\nfunction isUsersEnabled() {\n    var enabled = /\\\"users\\\"/i.test(process.env.MS_PreviewFeatures);\n    return enabled;\n}"
  },
  {
    "path": "test/SetupScripts/tables/authenticated.update.js",
    "content": "function update(item, user, request) {\n    tables.current.where({id: item.id}).read({\n        success: function(results) {\n            if (results.length) {\n                var existingItem = results[0];\n                if (existingItem.userId !== user.userId) {\n                    request.respond(400, {error: 'Mismatching user id'});\n                } else {\n                    request.execute(); // it's ok, continue\n                }\n            } else {\n                request.execute(); // default behavior, error due to 404\n            }\n        }\n    });\n}"
  },
  {
    "path": "test/SetupScripts/tables/blog_comments.insert.js",
    "content": "function insert(item, user, request) {\n    if (!item.postid) {\n        request.respond(400, { error: 'comments must have a postid' });\n        return;\n    }\n\n    request.execute({\n        success: function () {\n            mssql.query(\"update [zumo_app].[blog_posts] set commentcount = (select count(*) from [zumo_app].[blog_posts] where id = ?) where id = ?\", [item.postid, item.postid], {\n                    success: function () {\n                        request.respond();                        \n                    }\n                }\n            );\n        }\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/blog_comments.read.js",
    "content": "function read(query, user, request) {\n    console.log('blog comments read script called');\n\n    // Only return comments for blog posts that have not been deleted.\n    var table = tables.getTable(\"blog_posts\");\n    table.where({ showComments: true }).select(function () { return this.id; }).read({\n        success: function (results) {\n            query.where(function (posts) { return this.postid in posts; }, results);\n            request.execute();\n        },\n        error: function (err) {\n            console.error(err);\n            request.respond();\n        }\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/bothIdTypeMovies.insert.js",
    "content": "function insert(item, user, request) {\n    item.id = 1;\n    var table = tables.current;\n    table.take(1).read({\n        success: function(items) {\n            if (items.length > 0) {\n                // table already populated\n                request.respond(201, {id: 1, status: 'Already populated'});\n            } else {\n                // Need to populate the table\n                populateTable(table, request, item.movies);\n                request.respond(201, { id: 1, status: 'Table is being populated' });\n            }\n        }\n    });\n}\n\nfunction populateTable(table, request, films) {\n    var index = 0;\n    films.forEach(changeReleaseDate);\n    var insertNext = function() {\n        if (index < films.length) {\n            var toInsert = films[index];\n            table.insert(toInsert, {\n                success: function() {\n                    index++;\n                    if ((index % 20) === 0) {\n                        console.log('Inserted %d items', index);\n                    }\n                    \n                    insertNext();\n                }\n            });\n        }\n    };\n    \n    insertNext();\n}\n\nfunction changeReleaseDate(obj) {\n    var releaseDate = obj.ReleaseDate;\n    if (typeof releaseDate === 'string') {\n        releaseDate = new Date(releaseDate);\n        obj.ReleaseDate = releaseDate;\n    }\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/droidPushTest.insert.js",
    "content": "function insert(item, user, request) {\n    var method = item.method;\n    if (!method) {\n        request.respond(400, { error: 'request must have a \\'method\\' member' });\n        return;\n    }\n    \n    var registrationId = item.registrationId;\n    var tag = item.tag;\n    \n    var usingNH = item.usingNH;\n    if (!usingNH) {\n        if (!registrationId) {\n            request.respond(400, { error: 'request must have a \\'registrationId\\' member' });\n            return;\n        }\n    }\n    \n    var payload = item.payload;\n    if (!payload) {\n        request.respond(400, { error: 'request must have a \\'payload\\' member' });\n        return;\n    }\n    \n    var successFunction = function(pushResponse) {\n        console.log('GCM push sent: ', pushResponse);\n        request.respond(201, { id: 1, response: pushResponse });\n    };\n    \n    var errorFunction = function(pushError) {\n        console.log('Error in GCM push: ', pushError);\n        request.respond(500, { error: pushError });\n    };\n    \n    var options = {\n        success: successFunction,\n        error: errorFunction\n    };\n    \n    if (usingNH) {\n        if (item.templatePush) {\n            push.send(tag, item.templateNotification, options);\n        } else {\n            push.gcm.send(tag, payload, options);\n        }\n    } else {\n        var gcmFunction = push.gcm[method];\n        if (gcmFunction) {\n            gcmFunction(registrationId, payload, options);\n        } else {\n            request.respond(400, { error: 'method not supported: ' + method });\n        }\n    }\n}"
  },
  {
    "path": "test/SetupScripts/tables/droidRoundTripTable.insert.js",
    "content": "function insert(item, user, request) {\n    if (item.complexType1) {\n        item.complexType1 = JSON.stringify(item.complexType1);\n    }\n\n    if (item.complexType2) {\n        item.complexType2 = JSON.stringify(item.complexType2);\n    }\n\n    request.execute({\n        success: function() {\n            if (item.complexType1) {\n                item.complexType1 = JSON.parse(item.complexType1);\n            }\n\n            if (item.complexType2) {\n                item.complexType2 = JSON.parse(item.complexType2);\n            }\n            \n            request.respond();\n        }\n    });\n}"
  },
  {
    "path": "test/SetupScripts/tables/droidRoundTripTable.read.js",
    "content": "function read(query, user, request) {\n    request.execute({\n        success: function(results) {\n            results.forEach(function(item) {\n                if (item.complexType1) {\n                    item.complexType1 = JSON.parse(item.complexType1);\n                }\n\n                if (item.complexType2) {\n                    item.complexType2 = JSON.parse(item.complexType2);\n                }\n            });\n\n            request.respond();\n        }\n    });\n}"
  },
  {
    "path": "test/SetupScripts/tables/droidRoundTripTable.update.js",
    "content": "function update(item, user, request) {\n    if (item.complexType1) {\n        item.complexType1 = JSON.stringify(item.complexType1);\n    }\n\n    if (item.complexType2) {\n        item.complexType2 = JSON.stringify(item.complexType2);\n    }\n\n    request.execute({\n        success: function() {\n            if (item.complexType1) {\n                item.complexType1 = JSON.parse(item.complexType1);\n            }\n\n            if (item.complexType2) {\n                item.complexType2 = JSON.parse(item.complexType2);\n            }\n            \n            request.respond();\n        }\n    });\n}"
  },
  {
    "path": "test/SetupScripts/tables/iosPushTest.insert.js",
    "content": "function insert(item, user, request) {\n    var method = item.method;\n    if (!method) {\n        request.respond(400, { error: 'request must have a \\'method\\' member' });\n        return;\n    }\n    \n    if (method === 'send') {\n        var token = item.token;\n        var payload = item.payload;\n        var delay = item.delay || 0;\n        if (!payload || !token) {\n            request.respond(400, { error: 'request must have a \\'payload\\' and a \\'token\\' members for sending push notifications.' });\n        } else {\n            var sendPush = function() {\n                push.apns.send(token, payload, {\n                    error: function(err) {\n                        console.warn('Error sending push notification: ', err);\n                    }\n                });\n            }\n            if (delay) {\n                setTimeout(sendPush, delay);\n            } else {\n                sendPush();\n            }\n            \n            request.respond(201, { id: 1, status: 'Push sent' });\n        }\n    } else if (method === 'getFeedback') {\n        push.apns.getFeedback({\n            success: function(results) {\n                request.respond(201, { id: 1, devices: results });\n            }, error: function(err) {\n                request.respond(500, { error: err });\n            }\n        });\n    } else {\n        request.respond(400, { error: 'valid values for the \\'method\\' parameter are \\'send\\' and \\'getFeedback\\'.' });\n    }\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/iosRoundTripTable.insert.js",
    "content": "function insert(item, user, request) {\n    var products = item.products;\n    if (!products) {\n        // Normal case, no scripts needed\n        request.execute();\n    } else {\n        delete item.products;\n        var productToString = function(prod) {\n            var result = '{';\n            var first = true;\n            for (var key in prod) {\n                if (prod.hasOwnProperty(key)) {\n                    if (first) {\n                        first = false;\n                    } else {\n                        result = result + ', ';\n                    }\n                    result = result + prod[key];\n                }\n            }\n\n            result = result + '}';\n            return result;\n        }\n\n        var strProducts = '[' + products.map(productToString).join(',') + ']';\n        item.products = strProducts;\n\n        request.execute({\n            success: function() {\n                item.products = products;\n                var totalPrice = products.reduce(function(total, obj) {\n                    return obj.price + total;\n                }, 0);\n                item.totalPrice = totalPrice;\n                request.respond();\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/offlinereadyitemnoversion.insert.js",
    "content": "function insert(item, user, request) {\n\n    if (item.offlinereadyitems === undefined ) {\n        console.log('No offlinereadyitems property');\n        request.execute();\n    } else {\n        console.log('offlinereadyitems property');\n        var table = tables.current;\n        populateTable(table, request, item.offlinereadyitems);\n    }\n}\n\nfunction populateTable(table, request, items) {\n    var index = 0;\n    var insertNext = function() {\n        if (index < items.length) {\n            var toInsert = items[index];\n            table.insert(toInsert, {\n                success: function() {\n                    index++;\n                    if ((index % 20) === 0) {\n                        console.log('Inserted %d items', index);\n                    }\n                    \n                    insertNext();\n                }\n            });\n        }\n        else if (index == items.length){\n            request.respond(201, { id: 1, status: 'Table is populated' });\n        }\n    };\n    \n    insertNext();\n}"
  },
  {
    "path": "test/SetupScripts/tables/stringIdRoundTripTable.insert.js",
    "content": "function insert(item, user, request) {\n    if (item.complex) {\n        item.complex = JSON.stringify(item.complex);\n    }\n\n    request.execute({\n        success: function() {\n            if (item.complex) {\n                item.complex = JSON.parse(item.complex);\n            }\n\n            request.respond();\n        }\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/stringIdRoundTripTable.read.js",
    "content": "function read(query, user, request) {\n    request.execute({\n        success: function(results) {\n            results.forEach(function(item) {\n                if (item.complex) {\n                    item.complex = JSON.parse(item.complex);\n                }\n            });\n\n            request.respond();\n        }\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/stringIdRoundTripTable.update.js",
    "content": "function update(item, user, request) {\n    if (item.complex) {\n        item.complex = JSON.stringify(item.complex);\n    }\n\n    request.execute({\n        success: function() {\n            if (item.complex) {\n                item.complex = JSON.parse(item.complex);\n            }\n\n            request.respond();\n        }, conflict: function(serverItem) {\n            var policy = request.parameters.conflictPolicy || \"\";\n            policy = policy.toLowerCase();\n            if (policy === 'client' || policy === 'clientwins') {\n                // item.__version has been updated with server version\n                request.execute();\n            } else if (policy === 'server' || policy === 'serverwins') {\n                request.respond(statusCodes.OK, serverItem);\n            } else {\n                if (serverItem.complex) {\n                    serverItem.complex = JSON.parse(serverItem.complex);\n                }\n                \n                request.respond(statusCodes.PRECONDITION_FAILED, serverItem);\n            }\n        }\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/w8PushTest.insert.js",
    "content": "﻿function insert(item, user, request) {\n    var method = item.method;\n    if (!method) {\n        request.respond(400, { error: 'request must have a \\'method\\' member' });\n        return;\n    }\n\n    var channelUri = item.channelUri;\n    if (!item.usingNH) {\n        if (!channelUri) {\n            request.respond(400, { error: 'request must have a \\'channelUri\\' member' });\n            return;\n        }\n    }\n\n    var payload = item.payload;\n    if (!payload) {\n        request.respond(400, { error: 'request must have a \\'payload\\' member' });\n        return;\n    }\n\n    if (!item.xmlPayload) {\n        request.respond(400, { error: 'request must have a \\'xml payload\\' member' });\n        return;\n    }\n    var nhPayload = '<?xml version=\"1.0\" encoding=\"utf-8\"?>' + item.xmlPayload;\n    if (item.nhNotificationType == 'raw') {\n        nhPayload = payload;\n    }\n\n    var successFunction = function (pushResponse) {\n        console.log('WNS push sent: ', pushResponse);\n        request.respond(201, { id: 1, response: pushResponse });\n    };\n\n    var errorFunction = function (pushError) {\n        console.log('Error in WNS push: ', pushError);\n        request.respond(500, { error: pushError });\n    }\n\n    var options = {\n        success: successFunction,\n        error: errorFunction\n    };\n\n    if (item.usingNH) {\n        if (item.nhNotificationType == 'template') {\n            push.send('World', item.templateNotification, options);\n        }\n        else {\n            var wnsType = 'wns/' + item.nhNotificationType;\n            push.wns.send(\"tag1\",\n\t\t\tnhPayload,\n\t\t\twnsType, options);\n        }\n    }\n    else {\n        var wnsFunction = push.wns[method];\n        if (wnsFunction) {\n            wnsFunction(channelUri, payload, options);\n        } else {\n            request.respond(400, { error: 'method not supported: ' + method });\n        }\n    }\n}"
  },
  {
    "path": "test/SetupScripts/tables/w8RoundTripTable.insert.js",
    "content": "function insert(item, user, request) {\n    if (item.complexType1) {\n        item.complexType1 = JSON.stringify(item.complexType1);\n    }\n\n    if (item.complexType2) {\n        item.complexType2 = JSON.stringify(item.complexType2);\n    }\n\n    request.execute({\n        success: function() {\n            if (item.complexType1) {\n                item.complexType1 = JSON.parse(item.complexType1);\n            }\n\n            if (item.complexType2) {\n                item.complexType2 = JSON.parse(item.complexType2);\n            }\n            \n            request.respond();\n        }\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/w8RoundTripTable.read.js",
    "content": "function read(query, user, request) {\n    request.execute({\n        success: function(results) {\n            results.forEach(function(item) {\n                if (item.complexType1) {\n                    item.complexType1 = JSON.parse(item.complexType1);\n                }\n\n                if (item.complexType2) {\n                    item.complexType2 = JSON.parse(item.complexType2);\n                }\n            });\n\n            request.respond();\n        }\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/w8RoundTripTable.update.js",
    "content": "function update(item, user, request) {\n    if (item.complexType1) {\n        item.complexType1 = JSON.stringify(item.complexType1);\n    }\n\n    if (item.complexType2) {\n        item.complexType2 = JSON.stringify(item.complexType2);\n    }\n\n    request.execute({\n        success: function() {\n            if (item.complexType1) {\n                item.complexType1 = JSON.parse(item.complexType1);\n            }\n\n            if (item.complexType2) {\n                item.complexType2 = JSON.parse(item.complexType2);\n            }\n            \n            request.respond();\n        }\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/w8jsRoundTripTable.insert.js",
    "content": "function insert(item, user, request) {\n    if (item.complexType) {\n        item.complexType = JSON.stringify(item.complexType);\n    }\n\n    request.execute({\n        success: function() {\n            if (item.complexType) {\n                item.complexType = JSON.parse(item.complexType);\n            }\n            \n            request.respond();\n        }\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/w8jsRoundTripTable.read.js",
    "content": "function read(query, user, request) {\n    request.execute({\n        success: function(results) {\n            results.forEach(function(item) {\n                if (item.complexType) {\n                    item.complexType = JSON.parse(item.complexType);\n                }\n            });\n\n            request.respond();\n        }\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/w8jsRoundTripTable.update.js",
    "content": "function update(item, user, request) {\n    if (item.complexType) {\n        item.complexType = JSON.stringify(item.complexType);\n    }\n\n    request.execute({\n        success: function() {\n            if (item.complexType) {\n                item.complexType = JSON.parse(item.complexType);\n            }\n\n            request.respond();\n        }\n    });\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/w8jsServerQueryMovies.read.js",
    "content": "﻿function read(query, user, request) {\n    var table = tables.getTable('intIdMovies');\n    var testName = request.parameters.testName;\n    if (testName === 'getWhereClauseCreator') {\n        var code = getWhereClauseCreator.toString();\n        request.respond(200, [{ code: code }]);\n        return;\n    }\n    try {\n        var options = JSON.parse(request.parameters.options || '{}');\n        var whereCreator = getWhereClauseCreator(testName);\n        \n        if (whereCreator) {\n            var serverQuery = whereCreator(table);\n            if (options.sortFields && options.sortFields.length) {\n                options.sortFields.forEach(function(sortClause) {\n                    if (sortClause.isAscending) {\n                        serverQuery = serverQuery.orderBy(sortClause.fieldName);\n                    } else {\n                        serverQuery = serverQuery.orderByDescending(sortClause.fieldName);\n                    }\n                });\n            }\n            if (options.top) {\n                serverQuery = serverQuery.take(options.top);\n            }\n            if (options.skip) {\n                serverQuery = serverQuery.skip(options.skip);\n            }\n            if (options.selectFields && options.selectFields.length) {\n                serverQuery = serverQuery.select(options.selectFields.join(','));\n            }\n            serverQuery.read({\n                success: function(results) {\n                    request.respond(200, results);\n                }, error: function(err){\n                    request.respond(500, { error: err });\n                }\n            });\n        } else {\n            request.respond(400, { error: 'Invalid test name: ' + testName });\n        }\n    } catch (ex) {\n        console.log('Error: ', ex);\n        request.respond(500, { error: ex });\n    }\n}\n\nfunction getWhereClauseCreator(testName) {\n    switch (testName) {\n        case 'GreaterThan and LessThen - Movies from the 90s':\n            return function (table) { return table.where(function () { return this.Year > 1989 && this.Year < 2000; }); };\n        case 'GreaterEqual and LessEqual - Movies from the 90s':\n            return function (table) { return table.where(function () { return this.Year >= 1990 && this.Year <= 1999; }); };\n        case 'Compound statement - OR of ANDs - Movies from the 30s and 50s':\n            return function (table) { return table.where(function () { return (this.Year >= 1930 && this.Year < 1940) || (this.Year >= 1950 && this.Year < 1960); }); };\n        case 'Division, equal and different - Movies from the year 2000 with rating other than R':\n            return function (table) { return table.where(function () { return ((this.Year / 1000.0) == 2) && this.MPAARating != 'R'; }); };\n        case 'Addition, subtraction, relational, AND - Movies from the 1980s which last less than 2 hours':\n            return function (table) { return table.where(function () { return ((this.Year - 1900) >= 80) && (this.Year + 10 < 2000) && (this.Duration < 120); }); };\n        case 'Query via template object - Movies from the year 2000 with rating R':\n            return function (table) { return table.where({ Year: 2000, MPAARating: 'R' }); };\n        case 'String.indexOf - Movies which start with \"The\"':\n            return function (table) { return table.where(function () { return this.Title.indexOf('The') === 0; }); };\n        case 'String.toUpperCase - Finding \"THE GODFATHER\"':\n            return function (table) { return table.where(function () { return this.Title.toUpperCase() === 'THE GODFATHER'; }); };\n        case 'String.toLowerCase - Finding \"pulp fiction\"':\n            return function (table) { return table.where(function () { return this.Title.toLowerCase() === 'pulp fiction'; }); };\n        case 'String.indexOf, String.toLowerCase - Movie which start with \"the\"':\n            return function (table) { return table.where(function () { return this.Title.toLowerCase().indexOf('the') === 0; }); };\n        case 'String.indexOf, String.toUpperCase - Movie which start with \"THE\"':\n            return function (table) { return table.where(function () { return this.Title.toUpperCase().indexOf('THE') === 0; }); };\n        case 'String.indexOf (non-ASCII) - movies containing the \"é\" character':\n            return function (table) { return table.where(function () { return this.Title.indexOf('é') >= 0; }); };\n        case 'String.substring, length - movies which end with \"r\"':\n            return function (table) { return table.where(function () { return this.Title.substring(this.Title.length - 1, 1) === 'r'; }); };\n        case 'String.substr - movies with \"father\" starting at position 7':\n            return function (table) { return table.where(function () { return this.Title.substr(7, 6) === 'father'; }); };\n        case 'Equals - movies since 1980 with rating PG-13':\n            return function (table) { return table.where(function () { return this.MPAARating === 'PG-13' && this.Year >= 1980; }); };\n        case 'Comparison to null - Movies since 1980 without a MPAA rating':\n            return function (table) { return table.where(function () { return this.MPAARating === null && this.Year >= 1980; }); };\n        case 'Comparison to null (not null) - Movies before 1970 with a MPAA rating':\n            return function (table) { return table.where(function () { return this.MPAARating !== null && this.Year < 1970; }); };\n        case 'Math.floor - Movies which last more than 3 hours':\n            return function (table) { return table.where(function () { return Math.floor(this.Duration / 60.0) >= 3; }); };\n        case 'Math.ceil - Movies which last at most 2 hours':\n            return function (table) { return table.where(function () { return Math.ceil(this.Duration / 60.0) == 2; }); };\n        case 'Math.round - Movies which last between 2.5 (inclusive) and 3.5 (exclusive) hours':\n            return function (table) { return table.where(function () { return Math.round(this.Duration / 60.0) == 3; }); };\n        case 'Date: Equals - Movies released on 1994-10-14 (Shawshank Redemption / Pulp Fiction)':\n            return function (table) { return table.where({ ReleaseDate: new Date(Date.UTC(1994, 10 - 1, 14)) }); };\n        case 'Date (month): Movies released in November':\n            return function (table) { return table.where(function () { return this.ReleaseDate.getUTCMonth() == (11 - 1); }); };\n        case 'Date (day): Movies released in the first day of the month':\n            return function (table) { return table.where(function () { return this.ReleaseDate.getUTCDate() == 1; }); };\n        case 'Date (year): Movies whose year is different than its release year':\n            return function (table) { return table.where(function () { return this.ReleaseDate.getUTCFullYear() !== this.Year; }); };\n        case 'Boolean: equal to true - Best picture winners before 1950':\n            return function (table) { return table.where(function () { return this.BestPictureWinner === true && this.Year < 1950; }); };\n        case 'Boolean: not and equal to false - Best picture winners since 2000':\n            return function (table) { return table.where(function () { return !(this.BestPictureWinner === false) && this.Year >= 2000; }); };\n        case 'Boolean: not equal to false - Best picture winners since 2000':\n            return function (table) { return table.where(function () { return this.BestPictureWinner !== false && this.Year >= 2000; }); };\n        case 'In operator: Movies since 2000 with MPAA ratings of \"G\", \"PG\" or \" PG-13\"':\n            return function (table) { return table.where(function (ratings) { return this.Year >= 2000 && this.MPAARating in ratings; }, ['G', 'PG', 'PG-13']); };\n        case 'Skip, take and includeTotalCount with filter: movies 11-20, which won the best picture, ordered by release date':\n            return function (table) { return table.where({ BestPictureWinner: true }); };\n        case 'Order by number - 30 shortest movies since 1970':\n            return function (table) { return table.where(function () { return this.Year >= 1970; }); };\n        case 'Select single field - Title of movies since 2000':\n            return function (table) { return table.where(function () { return this.Year >= 2000; }); };\n        case 'Select multiple fields - Title, BestPictureWinner, Duration, order by release date, of movies from the 1990s':\n            return function (table) { return table.where(function () { return this.Year >= 1990 && this.Year < 2000; }); };\n    }\n    return null;\n}\n"
  },
  {
    "path": "test/SetupScripts/tables/wp8PushTest.insert.js",
    "content": "﻿function insert(item, user, request) {\n    var method = item.method;\n    if (!method) {\n        request.respond(400, { error: 'request must have a \\'method\\' member' });\n        return;\n    }\n\n    var channelUri = item.channelUri;\n    if (!item.usingNH) {\n        if (!channelUri) {\n            request.respond(400, { error: 'request must have a \\'channelUri\\' member' });\n            return;\n        }\n    }\n\n    var payload = item.payload;\n    if (!payload) {\n        request.respond(400, { error: 'request must have a \\'payload\\' member' });\n        return;\n    }\n\n    var successFunction = function (pushResponse) {\n        console.log('MPNS push sent: ', pushResponse);\n        request.respond(201, { id: 1, response: pushResponse });\n    };\n\n    var errorFunction = function (pushError) {\n        console.log('Error in MPNS push: ', pushError);\n        request.respond(500, { error: pushError });\n    }\n\n    var options = {\n        success: successFunction,\n        error: errorFunction\n    };\n\n    var mpnsFunction = push.mpns[method];\n    if (mpnsFunction) {\n        if (item.usingNH) {\n            if (item.templatePush) {\n                push.send('World', item.templateNotification, options);\n            }\n            else {\n                mpnsFunction(\"tag1\", payload, options);\n            }\n        }\n        else {\n            mpnsFunction(channelUri, payload, options);\n        }\n    }\n    else {\n        request.respond(400, { error: 'method not supported: ' + method });\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/App_Start/WebApiConfig.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing AutoMapper;\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing Microsoft.WindowsAzure.Mobile.Service.Config;\nusing Microsoft.WindowsAzure.Mobile.Service.Security;\nusing Newtonsoft.Json;\nusing System;\nusing System.Collections;\nusing System.Data.Entity;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Web.Http;\nusing ZumoE2EServerApp.DataObjects;\nusing ZumoE2EServerApp.Models;\n\nnamespace ZumoE2EServerApp\n{\n    public static class WebApiConfig\n    {\n        public static void Register()\n        {\n            ConfigOptions options = new ConfigOptions\n            {\n                PushAuthorization = AuthorizationLevel.Application,\n                DiagnosticsAuthorization = AuthorizationLevel.Anonymous,\n            };\n\n            HttpConfiguration config = ServiceConfig.Initialize(new ConfigBuilder(options));\n\n            // Now add any missing connection strings and app settings from the environment.\n            // Any envrionment variables found with names that match existing connection\n            // string and app setting names will be used to replace the value.\n            // This allows the Web.config (which typically would contain secrets) to be\n            // checked in, but requires people running the tests to config their environment.\n            IServiceSettingsProvider settingsProvider = config.DependencyResolver.GetServiceSettingsProvider();\n            ServiceSettingsDictionary settings = settingsProvider.GetServiceSettings();\n            IDictionary environmentVariables = Environment.GetEnvironmentVariables();\n            foreach (var conKey in settings.Connections.Keys.ToArray())\n            {\n                var envKey = environmentVariables.Keys.OfType<string>().FirstOrDefault(p => p == conKey);\n                if (!string.IsNullOrEmpty(envKey))\n                {\n                    settings.Connections[conKey].ConnectionString = (string)environmentVariables[envKey];\n                }\n            }\n\n            foreach (var setKey in settings.Keys.ToArray())\n            {\n                var envKey = environmentVariables.Keys.OfType<string>().FirstOrDefault(p => p == setKey);\n                if (!string.IsNullOrEmpty(envKey))\n                {\n                    settings[setKey] = (string)environmentVariables[envKey];\n                }\n            }\n\n            // Emulate the auth behavior of the server: default is application unless explicitly set.\n            config.Properties[\"MS_IsHosted\"] = true;\n\n            config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;\n\n            Mapper.Initialize(cfg =>\n            {\n                cfg.CreateMap<RoundTripTableItem, RoundTripTableItemFakeStringId>()\n                    // While we would like to use ResolveUsing here, for ComplexType1 and 2, \n                    // we cannot because it is incompatable with LINQ queries, which is the\n                    // whole point of doing this mapping. Instead use AfterMap below.\n                    .ForMember(dst => dst.ComplexType1, map => map.Ignore())\n                    .ForMember(dst => dst.ComplexType2, map => map.Ignore())\n                    .ForMember(dst => dst.IntId, map => map.MapFrom(src => src.RoundTripTableItemId))\n                    .ForMember(dst => dst.Id, map => map.MapFrom(src => SqlFuncs.StringConvert(src.RoundTripTableItemId).Trim()))\n                    .AfterMap((src, dst) =>\n                    {\n                        dst.ComplexType1 = src.ComplexType1Serialized == null ? null : JsonConvert.DeserializeObject<ComplexType[]>(src.ComplexType1Serialized);\n                        dst.ComplexType2 = src.ComplexType2Serialized == null ? null : JsonConvert.DeserializeObject<ComplexType2>(src.ComplexType2Serialized);\n                    });\n                cfg.CreateMap<RoundTripTableItemFakeStringId, RoundTripTableItem>()\n                    .ForMember(dst => dst.ComplexType1Serialized, map => map.ResolveUsing(src => (src.ComplexType1 == null ? null : JsonConvert.SerializeObject(src.ComplexType1))))\n                    .ForMember(dst => dst.ComplexType2Serialized, map => map.ResolveUsing(src => (src.ComplexType2 == null ? null : JsonConvert.SerializeObject(src.ComplexType2))))\n                    .ForMember(dst => dst.RoundTripTableItemId, map => map.MapFrom(src => src.Id));\n\n\n                cfg.CreateMap<StringIdRoundTripTableItemForDB, StringIdRoundTripTableItem>()\n                    .ForMember(dst => dst.Complex, map => map.Ignore())\n                    .ForMember(dst => dst.ComplexType, map => map.Ignore())\n                    .AfterMap((src, dst) =>\n                    {\n                        dst.Complex = src.ComplexSerialized == null ? null : JsonConvert.DeserializeObject<string[]>(src.ComplexSerialized);\n                        dst.ComplexType = src.ComplexTypeSerialized == null ? null : JsonConvert.DeserializeObject<string[]>(src.ComplexTypeSerialized);\n                    });\n                cfg.CreateMap<StringIdRoundTripTableItem, StringIdRoundTripTableItemForDB>()\n                    .ForMember(dst => dst.ComplexSerialized, map => map.ResolveUsing(src => (src.Complex == null ? null : JsonConvert.SerializeObject(src.Complex))))\n                    .ForMember(dst => dst.ComplexTypeSerialized, map => map.ResolveUsing(src => (src.ComplexType == null ? null : JsonConvert.SerializeObject(src.ComplexType))));\n\n                cfg.CreateMap<W8JSRoundTripTableItemForDB, W8JSRoundTripTableItem>()\n                    .ForMember(dst => dst.ComplexType, map => map.Ignore())\n                    .ForMember(dst => dst.Id, map => map.MapFrom(src => src.W8JSRoundTripTableItemForDBId))\n                    .AfterMap((src, dst) =>\n                    {\n                        dst.ComplexType = src.ComplexTypeSerialized == null ? null : JsonConvert.DeserializeObject<string[]>(src.ComplexTypeSerialized);\n                    });\n                cfg.CreateMap<W8JSRoundTripTableItem, W8JSRoundTripTableItemForDB>()\n                    .ForMember(dst => dst.ComplexTypeSerialized, map => map.ResolveUsing(src => (src.ComplexType == null ? null : JsonConvert.SerializeObject(src.ComplexType))))\n                    .ForMember(dst => dst.W8JSRoundTripTableItemForDBId, map => map.MapFrom(src => src.Id));\n            });\n\n            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SDKClientTestContext>());\n        }\n    }\n}\n"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/AdminController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service.Security;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing System.Web.Http.OData;\nusing ZumoE2EServerApp.DataObjects;\n\nnamespace ZumoE2EServerApp.Controllers\n{\n    [AuthorizeLevel(AuthorizationLevel.Admin)]\n    public class AdminController : PublicController\n    {\n        public override Task<IQueryable<TestUser>> GetAllTestUser()\n        {\n            return base.GetAllTestUser();\n        }\n\n        public override Task<SingleResult<TestUser>> GetTestUser(string id)\n        {\n            return base.GetTestUser(id);\n        }\n\n        public override Task<HttpResponseMessage> PatchTestUser(string id, Delta<TestUser> patch)\n        {\n            return base.PatchTestUser(id, patch);\n        }\n\n        public override Task<HttpResponseMessage> PostTestUser(TestUser item)\n        {\n            return base.PostTestUser(item);\n        }\n\n        public override Task<HttpResponseMessage> DeleteTestUser(string id)\n        {\n            return base.DeleteTestUser(id);\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/ApplicationApiController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service.Security;\nusing Newtonsoft.Json.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing ZumoE2EServerApp.Utils;\n\nnamespace ZumoE2EServerApp.Controllers\n{\n    [AuthorizeLevel(AuthorizationLevel.Application)]\n    public class ApplicationApiController : ApiController\n    {\n        [Route(\"api/application\")]\n        public Task<HttpResponseMessage> Get()\n        {\n            return CustomSharedApi.handleRequest(this.Request, (ServiceUser)this.User);\n        }\n\n        [Route(\"api/application\")]\n        public Task<HttpResponseMessage> Post()\n        {\n            return CustomSharedApi.handleRequest(this.Request, (ServiceUser)this.User);\n        }\n\n        [Route(\"api/application\")]\n        public Task<HttpResponseMessage> Put()\n        {\n            return CustomSharedApi.handleRequest(this.Request, (ServiceUser)this.User);\n        }\n\n        [Route(\"api/application\")]\n        public Task<HttpResponseMessage> Delete()\n        {\n            return CustomSharedApi.handleRequest(this.Request, (ServiceUser)this.User);\n        }\n\n        [Route(\"api/application\")]\n        public Task<HttpResponseMessage> Patch()\n        {\n            return CustomSharedApi.handleRequest(this.Request, (ServiceUser)this.User);\n        }\n    }\n}\n"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/ApplicationController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service.Security;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing System.Web.Http.OData;\nusing ZumoE2EServerApp.DataObjects;\n\nnamespace ZumoE2EServerApp.Controllers\n{\n    [AuthorizeLevel(AuthorizationLevel.Application)]\n    public class ApplicationController : PublicController\n    {\n        public override Task<IQueryable<TestUser>> GetAllTestUser()\n        {\n            return base.GetAllTestUser();\n        }\n\n        public override Task<SingleResult<TestUser>> GetTestUser(string id)\n        {\n            return base.GetTestUser(id);\n        }\n\n        public override Task<HttpResponseMessage> PatchTestUser(string id, Delta<TestUser> patch)\n        {\n            return base.PatchTestUser(id, patch);\n        }\n\n        public override Task<HttpResponseMessage> PostTestUser(TestUser item)\n        {\n            return base.PostTestUser(item);\n        }\n\n        public override Task<HttpResponseMessage> DeleteTestUser(string id)\n        {\n            return base.DeleteTestUser(id);\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/AuthenticatedController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service.Security;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing System.Web.Http.OData;\nusing ZumoE2EServerApp.DataObjects;\n\nnamespace ZumoE2EServerApp.Controllers\n{\n    [AuthorizeLevel(AuthorizationLevel.User)]\n    public class AuthenticatedController : PublicController\n    {\n        public override async Task<IQueryable<TestUser>> GetAllTestUser()\n        {\n            ServiceUser user = (ServiceUser)this.User;\n            var all = (await base.GetAllTestUser()).Where(p => p.UserId == user.Id).ToArray();\n\n            var ids = await user.GetIdentitiesAsync();\n            var identities = ids.Where(q => q.Provider == \"urn:microsoft:credentials\").Select(p => p.UserId).ToArray();\n            var identitiesOld = user.Identities.Select(q => q.Claims.First(p => p.Type == \"urn:microsoft:credentials\").Value).ToArray();\n            foreach (var item in all)\n            {\n                item.Identities = identities;\n            }\n\n            return all.AsQueryable();\n        }\n\n        public override async Task<SingleResult<TestUser>> GetTestUser(string id)\n        {\n            return SingleResult.Create((await GetAllTestUser()).Where(p => p.Id == id));\n        }\n\n        public override async Task<HttpResponseMessage> PatchTestUser(string id, Delta<TestUser> patch)\n        {\n            ServiceUser user = (ServiceUser)this.User;\n            var all = (await base.GetAllTestUser()).Where(p => p.UserId == user.Id).ToArray();\n            if (all.Length == 0)\n            {\n                return this.Request.CreateResponse(HttpStatusCode.NotFound);\n            }\n            else if (all[0].UserId != user.Id)\n            {\n                return this.Request.CreateResponse(HttpStatusCode.BadRequest, new JObject(new JProperty(\"error\", \"Mismatching user id\")));\n            }\n            else\n            {\n                return await base.PatchTestUser(id, patch);\n            }\n        }\n\n        public override Task<HttpResponseMessage> PostTestUser(TestUser item)\n        {\n            ServiceUser user = (ServiceUser)this.User;\n            item.UserId = user.Id;\n            return base.PostTestUser(item);\n        }\n\n        public override async Task<HttpResponseMessage> DeleteTestUser(string id)\n        {\n            ServiceUser user = (ServiceUser)this.User;\n            var all = (await base.GetAllTestUser()).Where(p => p.UserId == user.Id).ToArray();\n            if (all.Length == 0)\n            {\n                return this.Request.CreateResponse(HttpStatusCode.NotFound);\n            }\n            else if (all[0].UserId != user.Id)\n            {\n                return this.Request.CreateResponse(HttpStatusCode.BadRequest, new JObject(new JProperty(\"error\", \"Mismatching user id\")));\n            }\n            else\n            {\n                return await base.DeleteTestUser(id);\n            }\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/MovieFinderApiController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing System;\nusing System.Data.Entity;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing ZumoE2EServerApp.DataObjects;\nusing ZumoE2EServerApp.Models;\n\nnamespace ZumoE2EServerApp.Controllers\n{\n    public class MovieFinderApiController : ApiController\n    {\n        public ApiServices Services { get; set; }\n\n        [Route(\"api/movieFinder/title/{title}\")]\n        public Task<MovieResult> getByTitle(string title)\n        {\n            return getMovie(\"Title\", title);\n        }\n\n        [Route(\"api/movieFinder/date/{year}/{month}/{day}\")]\n        public Task<MovieResult> getByDate(int year, int month, int day)\n        {\n            return getMovie(\"ReleaseDate\", new DateTime(year, month, day));\n        }\n\n        [Route(\"api/movieFinder/moviesOnSameYear\")]\n        public Task<MovieResult> fetchMoviesSameYear(StringIdMovie movie)\n        {\n            var orderBy = GetQueryValue(\"orderby\", \"Title\");\n            return getMovie(\"Year\", movie.Year, orderBy);\n        }\n\n        [Route(\"api/movieFinder/moviesWithSameDuration\")]\n        public Task<MovieResult> fetchMoviesSameDuration(StringIdMovie movie)\n        {\n            var orderBy = GetQueryValue(\"orderby\", \"Title\");\n            return getMovie(\"Duration\", movie.Duration, orderBy);\n        }\n\n        private async Task<MovieResult> getMovie(string field, object value, string orderBy = null)\n        {\n            SDKClientTestContext context = new SDKClientTestContext(Services.Settings.Name);\n            var Movies = context.Movies;\n\n            Services.Log.Debug(\"table: \" + \"Movies\");\n            Services.Log.Debug(\"Field: \" + field + \", value: \" + value);\n            Services.Log.Debug(\"OrderBy: \" + (orderBy == null ? \"<null>\" : orderBy));\n            IQueryable<StringIdMovie> t2 = Movies.Where(p => true);\n            t2 = Where(t2, field, value);\n            if (orderBy != null)\n            {\n                t2 = OrderBy(t2, orderBy);\n            }\n\n            var results = await t2.ToListAsync();\n            return new MovieResult() { Movies = results.ToArray() };\n        }\n\n        private string GetQueryValue(string key, string defaultValue)\n        {\n            var v = this.Request.GetQueryNameValuePairs().FirstOrDefault(p => p.Key.ToLowerInvariant() == key.ToLowerInvariant());\n            return (!string.IsNullOrEmpty(v.Value) ? v.Value : defaultValue);\n        }\n\n        private static IQueryable<StringIdMovie> Where(IQueryable<StringIdMovie> t2, string columnName, object value)\n        {\n            switch (columnName.ToLowerInvariant())\n            {\n                case \"title\":\n                    t2 = t2.Where(p => p.Title == (string)value);\n                    break;\n                case \"releasedate\":\n                    t2 = t2.Where(p => p.ReleaseDate == (DateTime)value);\n                    break;\n                case \"year\":\n                    t2 = t2.Where(p => p.Year == (int)value);\n                    break;\n                case \"duration\":\n                    t2 = t2.Where(p => p.Duration == (int)value);\n                    break;\n                default:\n                    throw new ArgumentOutOfRangeException(\"field\");\n            }\n            return t2;\n        }\n\n        private static IQueryable<StringIdMovie> OrderBy(IQueryable<StringIdMovie> t2, string columnName)\n        {\n            switch (columnName.ToLowerInvariant())\n            {\n                case \"id\":\n                    t2 = t2.OrderBy(p => p.Id);\n                    break;\n                case \"title\":\n                    t2 = t2.OrderBy(p => p.Title);\n                    break;\n                default:\n                    throw new ArgumentOutOfRangeException(\"field\");\n            }\n            return t2;\n        }\n\n        public class MovieResult\n        {\n            public StringIdMovie[] Movies { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/OfflineReadyController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing System.Web.Http.Controllers;\nusing System.Web.Http.OData;\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing ZumoE2EServerApp.DataObjects;\nusing ZumoE2EServerApp.Models;\n\nnamespace ZumoE2EServerApp.Controllers\n{\n    public class OfflineReadyController : TableController<OfflineReady>\n    {\n        private SDKClientTestContext context;\n\n        protected override void Initialize(HttpControllerContext controllerContext)\n        {\n            base.Initialize(controllerContext);\n            context = new SDKClientTestContext(Services.Settings.Name);\n            this.DomainManager = new EntityDomainManager<OfflineReady>(context, Request, Services);\n        }\n\n        [Queryable(MaxTop = 1000)]\n        public IQueryable<OfflineReady> GetAll()\n        {\n            return Query();\n        }\n\n        public SingleResult<OfflineReady> Get(string id)\n        {\n            return Lookup(id);\n        }\n\n        public Task<OfflineReady> Post(OfflineReady item)\n        {\n            return InsertAsync(item);\n        }\n\n        public Task<OfflineReady> Patch(string id, Delta<OfflineReady> item)\n        {\n            return UpdateAsync(id, item);\n        }\n\n        public Task Delete(string id)\n        {\n            return DeleteAsync(id);\n        }\n    }\n}\n"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/ParamsTestTableController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing System.Web.Http.OData;\nusing ZumoE2EServerApp.DataObjects;\n\nnamespace ZumoE2EServerApp.Controllers\n{\n    public class ParamsTestTableController : TableController<ParamsTestTableEntity>\n    {\n        public Task<IQueryable<ParamsTestTableEntity>> GetAllNoDB()\n        {\n            var retEnt = MainProcessor();\n            return Task.FromResult(new ParamsTestTableEntity[] { retEnt }.AsQueryable());\n        }\n\n        public Task<ParamsTestTableEntity> GetNoDB(string id)\n        {\n            return Task.FromResult(MainProcessor(id));\n        }\n\n        public Task<ParamsTestTableEntity> PatchNoDB(string id, Delta<ParamsTestTableEntity> patch)\n        {\n            return Task.FromResult(MainProcessor(id));\n        }\n\n        public Task<ParamsTestTableEntity> PostNoDB(ParamsTestTableEntity item)\n        {\n            return Task.FromResult(MainProcessor());\n        }\n\n        public Task<ParamsTestTableEntity> DeleteNoDB(string id)\n        {\n            return Task.FromResult(MainProcessor(id));\n        }\n\n        private ParamsTestTableEntity MainProcessor(string id = null)\n        {\n            var parameters = this.Request.GetQueryNameValuePairs();\n            if (id == null)\n            {\n                var val = parameters.FirstOrDefault(p => p.Key == \"id\");\n                id = (val.Key == \"id\") ? val.Value : \"1\";\n            }\n\n            JObject parametersJObj = new JObject();\n            foreach (var kvp in parameters)\n            {\n                parametersJObj[kvp.Key] = kvp.Value;\n            }\n\n            var retEnt = new ParamsTestTableEntity()\n            {\n                Id = int.Parse(id),\n                Parameters = JsonConvert.SerializeObject(parametersJObj)\n            };\n            return retEnt;\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/PublicController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing Microsoft.WindowsAzure.Mobile.Service.Security;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing System.Web.Http.Controllers;\nusing System.Web.Http.OData;\nusing ZumoE2EServerApp.DataObjects;\nusing ZumoE2EServerApp.Utils;\n\nnamespace ZumoE2EServerApp.Controllers\n{\n    [AuthorizeLevel(AuthorizationLevel.Anonymous)]\n    public class PublicController : TableController<TestUser>\n    {\n        protected override void Initialize(HttpControllerContext controllerContext)\n        {\n            base.Initialize(controllerContext);\n            this.DomainManager = new InMemoryDomainManager<TestUser>();\n        }\n\n        public virtual Task<IQueryable<TestUser>> GetAllTestUser()\n        {\n            return Task.FromResult(Query());\n        }\n\n        public virtual Task<SingleResult<TestUser>> GetTestUser(string id)\n        {\n            return Task.FromResult(Lookup(id));\n        }\n\n        public virtual async Task<HttpResponseMessage> PatchTestUser(string id, Delta<TestUser> patch)\n        {\n            return this.Request.CreateResponse(HttpStatusCode.OK, await UpdateAsync(id, patch));\n        }\n\n        public virtual async Task<HttpResponseMessage> PostTestUser(TestUser item)\n        {\n            return this.Request.CreateResponse(HttpStatusCode.Created, await InsertAsync(item));\n        }\n\n        public virtual async Task<HttpResponseMessage> DeleteTestUser(string id)\n        {\n            await this.DeleteAsync(id);\n            return this.Request.CreateResponse(HttpStatusCode.NoContent);\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/RuntimeInfoController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing Microsoft.WindowsAzure.Mobile.Service.Security;\nusing Microsoft.WindowsAzure.Mobile.Service.Config;\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Diagnostics;\nusing System.Web.Http;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace ZumoE2EServerApp.Controllers\n{\n    [AuthorizeLevel(AuthorizationLevel.Anonymous)]\n    public class RuntimeInfoController : ApiController\n    {\n        public ApiServices Services { get; set; }\n\n        [Route(\"api/runtimeInfo\")]\n        public JObject GetFeatures()\n        {\n            string version;\n            if (!this.Services.Settings.TryGetValue(ServiceSettingsKeys.SiteExtensionVersion, out version))\n            {\n                // Get here if the site ext. version is missing. That should never happen when deployed,\n                // but is expected whe running locally. If local, try to get the version info \n                // from the dll directly.\n                try\n                {\n                    var afva = typeof(ApiServices).Assembly.CustomAttributes.FirstOrDefault(p => p.AttributeType == typeof(AssemblyFileVersionAttribute));\n                    if (afva != null)\n                    {\n                        version = afva.ConstructorArguments[0].Value as string;\n                    }\n                }\n                catch (Exception)\n                {\n                    version = \"unknown\";\n                }\n            }\n\n            return new JObject(\n                new JProperty(\"runtime\", new JObject(\n                    new JProperty(\"type\", \".NET\"),\n                    new JProperty(\"version\", version)\n                )),\n                new JProperty(\"features\", new JObject(\n                    new JProperty(\"intIdTables\", false),\n                    new JProperty(\"stringIdTables\", true),\n                    new JProperty(\"nhPushEnabled\", true),\n                    new JProperty(\"queryExpandSupport\", true),\n                    new JProperty(\"usersEnabled\", false),\n                    new JProperty(\"liveSDKLogin\", false),\n                    new JProperty(\"singleSignOnLogin\", false),\n                    new JProperty(\"azureActiveDirectoryLogin\", false)\n                ))\n            );\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/StringIdMoviesController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing System.Web.Http.Controllers;\nusing ZumoE2EServerApp.DataObjects;\nusing ZumoE2EServerApp.Models;\n\nnamespace ZumoE2EServerApp.Controllers\n{\n    public class StringIdMoviesController : TableController<StringIdMovie>\n    {\n        private SDKClientTestContext context;\n\n        protected override void Initialize(HttpControllerContext controllerContext)\n        {\n            base.Initialize(controllerContext);\n            context = new SDKClientTestContext(Services.Settings.Name);\n            this.DomainManager = new EntityDomainManager<StringIdMovie>(context, Request, Services);\n        }\n\n        [Queryable(MaxTop = 1000)]\n        public IQueryable<StringIdMovie> GetAllMovies()\n        {\n            return Query();\n        }\n\n        public SingleResult<StringIdMovie> GetMovie(string id)\n        {\n            return Lookup(id);\n        }\n\n        public async Task<AllStringIdMovies> PostMovie(AllStringIdMovies item)\n        {\n            var table = this.context.Movies;\n            if (table.Count() == 0)\n            {\n                table.AddRange(item.Movies);\n                await this.context.SaveChangesAsync();\n            }\n            return item;\n        }\n    }\n}\n"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/StringIdRoundTripTableController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing System.Web.Http.Controllers;\nusing System.Web.Http.OData;\nusing ZumoE2EServerApp.DataObjects;\nusing ZumoE2EServerApp.Models;\nusing ZumoE2EServerApp.Utils;\n\nnamespace ZumoE2EServerApp.Tables\n{\n    public class StringIdRoundTripTableController : TableController<StringIdRoundTripTableItem>\n    {\n        protected override void Initialize(HttpControllerContext controllerContext)\n        {\n            base.Initialize(controllerContext);\n            SDKClientTestContext context = new SDKClientTestContext(Services.Settings.Name);\n            this.DomainManager = new StringIdRoundTripDomainManager(context, Request, Services);\n        }\n\n        public IQueryable<StringIdRoundTripTableItem> GetAllRoundTrips()\n        {\n            return Query();\n        }\n\n        public SingleResult<StringIdRoundTripTableItem> GetRoundTrip(string id)\n        {\n            return Lookup(id);\n        }\n\n        public Task<StringIdRoundTripTableItem> PatchRoundTrip(string id, Delta<StringIdRoundTripTableItem> patch)\n        {\n            return UpdateAsync(id, patch);\n        }\n\n        public Task<StringIdRoundTripTableItem> PostRoundTrip(StringIdRoundTripTableItem item)\n        {\n            if (string.IsNullOrEmpty(item.Id))\n            {\n                item.Id = System.Guid.NewGuid().ToString();\n            }\n\n            return InsertAsync(item);\n        }\n\n        public Task DeleteRoundTrip(string id)\n        {\n            return DeleteAsync(id);\n        }\n    }\n}\n"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/W8JSRoundTripTableController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing System.Web.Http.Controllers;\nusing System.Web.Http.OData;\nusing ZumoE2EServerApp.DataObjects;\nusing ZumoE2EServerApp.Models;\nusing ZumoE2EServerApp.Utils;\n\nnamespace ZumoE2EServerApp.Tables\n{\n    public class W8JSRoundTripTableController : TableController<W8JSRoundTripTableItem>\n    {\n        protected override void Initialize(HttpControllerContext controllerContext)\n        {\n            base.Initialize(controllerContext);\n            SDKClientTestContext context = new SDKClientTestContext(Services.Settings.Name);\n            this.DomainManager = new W8JSRoundTripDomainManager(context, Request, Services);\n        }\n\n        public IQueryable<W8JSRoundTripTableItem> GetAllRoundTrips()\n        {\n            return Query();\n        }\n\n        public SingleResult<W8JSRoundTripTableItem> GetRoundTrip(string id)\n        {\n            return Lookup(id);\n        }\n\n        public Task<W8JSRoundTripTableItem> PatchRoundTrip(string id, Delta<W8JSRoundTripTableItem> patch)\n        {\n            return UpdateAsync(id, patch);\n        }\n\n        public Task<W8JSRoundTripTableItem> PostRoundTrip(W8JSRoundTripTableItem item)\n        {\n            if (string.IsNullOrEmpty(item.Id))\n            {\n                item.Id = System.Guid.NewGuid().ToString();\n            }\n\n            return InsertAsync(item);\n        }\n\n        public Task DeleteRoundTrip(string id)\n        {\n            return DeleteAsync(id);\n        }\n    }\n}\n"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/W8PushTestController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.ServiceBus.Notifications;\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing Microsoft.WindowsAzure.Mobile.Service.Notifications;\nusing Microsoft.WindowsAzure.Mobile.Service.Security;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing ZumoE2EServerApp.DataObjects;\n\nnamespace ZumoE2EServerApp.Controllers\n{\n    public class W8PushTestController : TableController<W8PushTestEntity>\n    {\n        public async Task<W8PushTestEntity> PostW8PushTestEntity(W8PushTestEntity item)\n        {\n            IPushMessage message = null;\n            string tag = null;\n            if (item.NHNotificationType == \"template\")\n            {\n                message = item.TemplateNotification.ToObject<TemplatePushMessage>();\n                tag = \"World\";\n            }\n            else\n            {\n                var windowsMessage = new WindowsPushMessage();\n                if (item.NHNotificationType == \"raw\")\n                {\n                    windowsMessage.XmlPayload = item.Payload;\n                }\n                else\n                {\n                    windowsMessage.XmlPayload = \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\" + item.XmlPayload;\n                }\n\n                windowsMessage.Headers.Add(\"X-WNS-Type\", \"wns/\" + item.NHNotificationType);\n                message = windowsMessage;\n                tag = \"tag1\";\n            }\n\n            NotificationOutcome pushResponse = await this.Services.Push.SendAsync(message, tag);\n            this.Services.Log.Info(\"WNS push sent: \" + pushResponse, this.Request);\n            return new W8PushTestEntity()\n            {\n                Id = \"1\",\n                PushResponse = pushResponse.State.ToString() + \"-\" + pushResponse.TrackingId,\n            };\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Controllers/W8RoundTripTableController.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing System.Web.Http.Controllers;\nusing System.Web.Http.OData;\nusing ZumoE2EServerApp.DataObjects;\nusing ZumoE2EServerApp.Models;\nusing ZumoE2EServerApp.Utils;\n\nnamespace ZumoE2EServerApp.Controllers\n{\n    public class W8RoundTripTableController : TableController<RoundTripTableItemFakeStringId>\n    {\n        protected override void Initialize(HttpControllerContext controllerContext)\n        {\n            base.Initialize(controllerContext);\n            var context = new SDKClientTestContext(Services.Settings.Name);\n            this.DomainManager = new W8RoundTripDomainManager(context, Request, Services);\n        }\n\n        public IQueryable<RoundTripTableItemFakeStringId> GetAllRoundTrips()\n        {\n            return Query();\n        }\n\n//        public SingleResult<RoundTripTableItemFakeStringId> GetRoundTrip(int id)\n        public RoundTripTableItemFakeStringId GetRoundTrip(int id)\n        {\n//            return Lookup(id.ToString());\n            return Lookup(id.ToString()).Queryable.FirstOrDefault();\n        }\n\n        public Task<RoundTripTableItemFakeStringId> PatchRoundTrip(int id, Delta<RoundTripTableItemFakeStringId> patch)\n        {\n            return UpdateAsync(id.ToString(), patch);\n        }\n\n        public Task<RoundTripTableItemFakeStringId> PostRoundTrip(RoundTripTableItemFakeStringId item)\n        {\n            return InsertAsync(item);\n        }\n\n        public Task DeleteRoundTrip(int id)\n        {\n            return DeleteAsync(id.ToString());\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/DataObjects/Movie.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing Newtonsoft.Json;\nusing System;\n\nnamespace ZumoE2EServerApp.DataObjects\n{\n    public class StringIdMovie : EntityData\n    {\n        public string Title { get; set; }\n        public int Duration { get; set; }\n        public string MPAARating { get; set; }\n        public DateTime ReleaseDate { get; set; }\n        public bool BestPictureWinner { get; set; }\n        public int Year { get; set; }\n    }\n\n    public class AllStringIdMovies\n    {\n        public string Status { get; set; }\n        public StringIdMovie[] Movies { get; set; }\n    }\n}\n"
  },
  {
    "path": "test/ZumoE2EServerApp/DataObjects/OfflineReady.cs",
    "content": "﻿using System;\nusing Microsoft.WindowsAzure.Mobile.Service;\n\nnamespace ZumoE2EServerApp.DataObjects\n{\n    public class OfflineReady : EntityData\n    {\n        public string Name { get; set; }\n\n        public int Age { get; set; }\n\n        public double Float { get; set; }\n\n        public DateTimeOffset Date { get; set; }\n\n        public bool Bool { get; set; }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/DataObjects/ParamsTestTableEntity.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service.Tables;\nusing System;\n\nnamespace ZumoE2EServerApp.DataObjects\n{\n    public class ParamsTestTableEntity : ITableData\n    {\n        public int Id { get; set; }\n        public string Parameters { get; set; }\n\n        public ParamsTestTableEntity()\n        {\n            this.Id = 1;\n        }\n\n        string ITableData.Id { get; set; }\n\n        byte[] ITableData.Version { get; set; }\n\n        DateTimeOffset? ITableData.CreatedAt { get; set; }\n\n        DateTimeOffset? ITableData.UpdatedAt { get; set; }\n\n        bool ITableData.Deleted { get; set; }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/DataObjects/RoundTripTableItem.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service.Tables;\nusing Newtonsoft.Json;\nusing System;\n\nnamespace ZumoE2EServerApp.DataObjects\n{\n    public class RoundTripTableItem\n    {\n        public int RoundTripTableItemId { get; set; }\n\n        public string String1 { get; set; }\n\n        public DateTime? Date1 { get; set; }\n\n        public bool? Bool1 { get; set; }\n\n        // Number types\n        public double Double1 { get; set; }\n\n        public long Long1 { get; set; }\n\n        public int? Int1 { get; set; }\n\n        // Enum, with converter\n        public EnumType EnumType { get; set; }\n\n        public string ComplexType1Serialized { get; set; }\n\n        public string ComplexType2Serialized { get; set; }\n\n        public byte[] Version { get; set; }\n\n        public DateTimeOffset? CreatedAt { get; set; }\n\n        public DateTimeOffset? UpdatedAt { get; set; }\n\n        public bool Deleted { get; set; }\n    }\n\n    public class RoundTripTableItemFakeStringId : ITableData\n    {\n        public string Id { get { return this.IntId.ToString(); } set { this.IntId = int.Parse(value); } }\n\n        [JsonIgnore]\n        public int IntId { get; set; }\n\n        public string String1 { get; set; }\n\n        public DateTime? Date1 { get; set; }\n\n        public bool? Bool1 { get; set; }\n\n        // Number types\n        public double Double1 { get; set; }\n\n        public long Long1 { get; set; }\n\n        public int? Int1 { get; set; }\n\n        // Enum, with converter\n        [JsonConverter(typeof(EnumTypeConverter<EnumType>))]\n        public EnumType EnumType { get; set; }\n\n        public ComplexType[] ComplexType1 { get; set;}\n\n        public ComplexType2 ComplexType2 { get ; set;}\n\n        public byte[] Version { get; set; }\n\n        public DateTimeOffset? CreatedAt { get; set; }\n\n        public DateTimeOffset? UpdatedAt { get; set; }\n\n        public bool Deleted { get; set; }\n    }\n\n    public class ComplexType2\n    {\n        [JsonProperty(PropertyName = \"Name\")]\n        public string Name { get; set; }\n\n        [JsonProperty(PropertyName = \"Age\")]\n        public int Age { get; set; }\n\n        [JsonProperty(PropertyName = \"Friends\")]\n        public string[] Friends { get; set; }\n    }\n\n    public class ComplexType\n    {\n        [JsonProperty(PropertyName = \"Name\")]\n        public string Name { get; set; }\n\n        [JsonProperty(PropertyName = \"Age\")]\n        public int Age { get; set; }\n    }\n\n    public enum EnumType { First, Second, Third }\n\n    public class EnumTypeConverter<TEnum> : JsonConverter\n    {\n        public override bool CanConvert(Type objectType)\n        {\n            return objectType == typeof(TEnum);\n        }\n\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\n        {\n            return Enum.Parse(typeof(TEnum), (reader.Value ?? default(TEnum)).ToString(), true);\n        }\n\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n        {\n            writer.WriteValue(value == null ? (string)null : value.ToString());\n        }\n    }\n}\n"
  },
  {
    "path": "test/ZumoE2EServerApp/DataObjects/StringIdRoundTripTableItem.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing System;\n\nnamespace ZumoE2EServerApp.DataObjects\n{\n    public class StringIdRoundTripTableItemForDB : EntityData\n    {\n        public string Name { get; set; }\n\n        public DateTime? Date { get; set; }\n\n        public DateTime? Date1 { get; set; }\n\n        public bool? Bool { get; set; }\n\n        public int Integer { get; set; }\n\n        public double? Number { get; set; }\n\n        public string ComplexSerialized { get; set; }\n\n        public string ComplexTypeSerialized { get; set; }\n    }\n\n    public class StringIdRoundTripTableItem : EntityData\n    {\n        public string Name { get; set; }\n\n        public DateTime? Date { get; set; }\n\n        public DateTime? Date1 { get; set; }\n\n        public bool? Bool { get; set; }\n\n        public int Integer { get; set; }\n\n        public double? Number { get; set; }\n\n        public string[] Complex { get; set; }\n\n        public string[] ComplexType { get; set; }\n    }\n}\n"
  },
  {
    "path": "test/ZumoE2EServerApp/DataObjects/TestUser.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service.Tables;\nusing System;\n\nnamespace ZumoE2EServerApp.DataObjects\n{\n    public class TestUser : ITableData\n    {\n        public string Name { get; set; }\n\n        public string Id { get; set; }\n\n        public string UserId { get; set; }\n\n        public string[] Identities { get; set; }\n\n        public byte[] Version { get; set; }\n\n        public DateTimeOffset? CreatedAt { get; set; }\n\n        public DateTimeOffset? UpdatedAt { get; set; }\n\n        public bool Deleted { get; set; }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/DataObjects/W8JSRoundTripTableItem.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing Newtonsoft.Json;\nusing System;\nusing System.ComponentModel.DataAnnotations.Schema;\n\nnamespace ZumoE2EServerApp.DataObjects\n{\n    public class W8JSRoundTripTableItemForDB\n    {\n        public string W8JSRoundTripTableItemForDBId { get; set; }\n\n        public string String1 { get; set; }\n\n        public DateTimeOffset? Date1 { get; set; }\n\n        public bool? Bool1 { get; set; }\n\n        public double? Number { get; set; }\n\n        public string ComplexTypeSerialized { get; set; }\n\n        public byte[] Version { get; set; }\n\n        public DateTimeOffset? CreatedAt { get; set; }\n\n        public DateTimeOffset? UpdatedAt { get; set; }\n\n        public bool Deleted { get; set; }\n    }\n\n    public class W8JSRoundTripTableItem : EntityData\n    {\n        public string String1 { get; set; }\n\n        public DateTimeOffset? Date1 { get; set; }\n\n        public bool? Bool1 { get; set; }\n\n        public double? Number { get; set; }\n\n        public string[] ComplexType { get; set; }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/DataObjects/W8PushTestEntity.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing Newtonsoft.Json.Linq;\n\nnamespace ZumoE2EServerApp.DataObjects\n{\n    public class W8PushTestEntity : EntityData\n    {\n        public string NHNotificationType { get; set; }\n        public string Payload { get; set; }\n        public string XmlPayload { get; set; }\n        public string PushResponse { get; set; }\n        public JToken TemplateNotification { get; set; }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"ZumoE2EServerApp.WebApiApplication\" Language=\"C#\" %>\n"
  },
  {
    "path": "test/ZumoE2EServerApp/Global.asax.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Web.Http;\nusing System.Web.Routing;\n\nnamespace ZumoE2EServerApp\n{\n    public class WebApiApplication : System.Web.HttpApplication\n    {\n        protected void Application_Start()\n        {\n            WebApiConfig.Register();\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Models/SDKClientTestContext.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Data.Entity;\nusing System.Data.Entity.ModelConfiguration.Conventions;\nusing System.Linq;\nusing Microsoft.WindowsAzure.Mobile.Service.Tables;\nusing ZumoE2EServerApp.DataObjects;\n\nnamespace ZumoE2EServerApp.Models\n{\n    public class SDKClientTestContext : DbContext\n    {\n        // If you want Entity Framework to drop and regenerate your database\n        // automatically whenever you change your model schema, please use data migrations.\n        // For more information refer to the documentation:\n        // http://msdn.microsoft.com/en-us/data/jj591621.aspx\n\n        public SDKClientTestContext(string schema)\n            : base(\"Name=MS_TableConnectionString\")\n        {\n            Schema = schema;\n        }\n\n        public string Schema { get; set; }\n\n        public DbSet<StringIdMovie> Movies { get; set; }\n\n        public DbSet<RoundTripTableItem> RoundTripTableItems { get; set; }\n\n        public DbSet<StringIdRoundTripTableItemForDB> StringIdRoundTripTableItemForDBs { get; set; }\n\n        public DbSet<W8JSRoundTripTableItemForDB> W8JSRoundTripTableForDBs { get; set; }\n\n        public DbSet<OfflineReady> OfflineReadyItems { get; set; }\n\n        protected override void OnModelCreating(DbModelBuilder modelBuilder)\n        {\n            if (Schema != null)\n            {\n                modelBuilder.HasDefaultSchema(Schema);\n            }\n\n            modelBuilder.Conventions.Add(\n                new AttributeToColumnAnnotationConvention<TableColumnAttribute, string>(\n                    \"ServiceTableColumn\", (property, attributes) => attributes.Single().ColumnType.ToString()));\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Properties/AssemblyInfo.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"ZumoE2EServerApp\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"ZumoE2EServerApp\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"568b1837-ee93-447f-8286-c086c83b0c3c\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "test/ZumoE2EServerApp/ScheduledJobs/SimpleJob.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing Microsoft.WindowsAzure.Mobile.Service;\n\nnamespace ZumoE2EServerApp2\n{\n    // A simple scheduled job which can be invoked manually by submitting an HTTP\n    // POST request to the path \"/jobs/simple\".\n\n    public class SimpleJob : ScheduledJob\n    {\n        public override Task ExecuteAsync()\n        {\n            Services.Log.Info(\"Hello from scheduled job!\");\n            return Task.FromResult(true);\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Utils/ComplexTypeDomainManager.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing AutoMapper;\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing System.Web.Http.OData;\nusing ZumoE2EServerApp.Models;\n\nnamespace ZumoE2EServerApp.Utils\n{\n    internal class ComplexTypeDomainManager<TData, TModel, TKey> : MappedEntityDomainManager<TData, TModel>\n        where TData : class, Microsoft.WindowsAzure.Mobile.Service.Tables.ITableData\n        where TModel : class\n    {\n        public ComplexTypeDomainManager(SDKClientTestContext context, HttpRequestMessage request, ApiServices services)\n            : base(context, request, services)\n        {\n        }\n\n        public override SingleResult<TData> Lookup(string id)\n        {\n            TKey tkey = GetKey<TKey>(id);\n            TModel model = this.Context.Set<TModel>().Find(tkey);\n            List<TData> result = new List<TData>();\n            if (model != null)\n            {\n                result.Add(Mapper.Map<TData>(model));\n            }\n\n            return SingleResult.Create(result.AsQueryable());\n        }\n\n        public override async Task<TData> UpdateAsync(string id, Delta<TData> patch)\n        {\n            TKey tkey = GetKey<TKey>(id);\n            TModel model = await this.Context.Set<TModel>().FindAsync(tkey);\n            if (model == null)\n            {\n                throw new HttpResponseException(this.Request.CreateNotFoundResponse());\n            }\n\n            TData data = Mapper.Map<TData>(model);\n\n            patch.Patch(data);\n            // Need to update reference types too.\n            foreach (var pn in patch.GetChangedPropertyNames())\n            {\n                Type t;\n                if (patch.TryGetPropertyType(pn, out t) && t.IsClass)\n                {\n                    object v;\n                    if (patch.TryGetPropertyValue(pn, out v))\n                    {\n                        data.GetType().GetProperty(pn).GetSetMethod().Invoke(data, new object[] { v });\n                    }\n                }\n            }\n\n            Mapper.Map<TData, TModel>(data, model);\n            await this.SubmitChangesAsync();\n\n            return data;\n        }\n\n        public override Task<bool> DeleteAsync(string id)\n        {\n            TKey tkey = GetKey<TKey>(id);\n            return this.DeleteItemAsync(tkey);\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Utils/CustomSharedApi.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.Mobile.Service.Security;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace ZumoE2EServerApp.Utils\n{\n    public static class CustomSharedApi\n    {\n        internal static async Task<HttpResponseMessage> handleRequest(\n            HttpRequestMessage request,\n            ServiceUser user)\n        {\n            var query = request.GetQueryNameValuePairs();\n\n            var format = GetQueryParamOrDefault(query, \"format\", \"json\");\n            var status = int.Parse(GetQueryParamOrDefault(query, \"status\", \"200\"));\n            var output = new Output() { Method = request.Method.Method };\n            foreach (var q in query.Where(q => q.Key != \"format\" && q.Key != \"status\"))\n            {\n                output.Query[q.Key] = q.Value;\n            }\n\n            if (output.Query.Keys.Count == 0)\n            {\n                output.Query = null;\n            }\n\n            var reqHeaders = request.Headers;\n            var outputHeaders = new Dictionary<string, IEnumerable<string>>();\n            foreach (var reqHeader in reqHeaders.Where(p => p.Key.Contains(\"x-test-zumo-\")))\n            {\n                outputHeaders.Add(reqHeader.Key, reqHeader.Value);\n            }\n\n            if (request.Content != null)\n            {\n                var requestBody = await request.Content.ReadAsStringAsync();\n                if (request.Content.Headers.ContentType != null && !string.IsNullOrEmpty(requestBody))\n                {\n                    if (request.Content.Headers.ContentType.MediaType.Contains(\"/json\"))\n                    {\n                        output.Body = JToken.Parse(requestBody);\n                    }\n                    else\n                    {\n                        output.Body = requestBody;\n                    }\n                }\n            }\n\n            //output.Body = body;\n            output.User = new NodeUser(user);\n\n            string responseMediaType;\n            string responseBodyString = \"\";\n            switch (format)\n            {\n                case \"json\":\n                    // Convert to JSON.\n                    responseBodyString = JsonConvert.SerializeObject(output);\n                    responseMediaType = \"application/json\";\n                    break; // nothing to do\n                case \"xml\":\n                    responseMediaType = \"text/xml\";\n                    responseBodyString = output.ToXml();\n                    break;\n                default:\n                    responseMediaType = \"text/plain\";\n                    responseBodyString = JsonConvert.SerializeObject(output)\n                        .Replace(\"{\", \"__{__\")\n                        .Replace(\"}\", \"__}__\")\n                        .Replace(\"[\", \"__[__\")\n                        .Replace(\"]\", \"__]__\");\n                    break;\n            }\n\n            var responseContent = new StringContent(responseBodyString, Encoding.UTF8, responseMediaType);\n            var resp = new HttpResponseMessage((HttpStatusCode)status) { Content = responseContent };\n            foreach (var h in outputHeaders)\n            {\n                if (!resp.Headers.Contains(h.Key))\n                {\n                    resp.Headers.Add(h.Key, h.Value);\n                }\n            }\n\n            return resp;\n        }\n\n        private static string GetQueryParamOrDefault(IEnumerable<KeyValuePair<string, string>> query, string key, string def)\n        {\n            var val = query.FirstOrDefault(p => p.Key == key);\n            return (val.Key == key) ? val.Value : def;\n        }\n    }\n\n    class NodeUser\n    {\n        public NodeUser(ServiceUser user)\n        {\n            this.Id = user.Id;\n            if (user.Level == AuthorizationLevel.User)\n            {\n                this.Level = \"authenticated\";\n                this.Id = user.Id;\n            }\n            else\n            {\n                this.Level = \"anonymous\";\n            }\n        }\n\n        [JsonProperty(PropertyName = \"userId\")]\n        public string Id { get; set; }\n\n        [JsonProperty(PropertyName = \"level\")]\n        public string Level { get; set; }\n\n    }\n    class Output\n    {\n        [JsonProperty(PropertyName = \"method\")]\n        public string Method { get; set; }\n\n        [JsonProperty(PropertyName = \"query\")]\n        public Dictionary<string, string> Query = new Dictionary<string, string>();\n\n        [JsonProperty(PropertyName = \"user\")]\n        public NodeUser User { get; set; }\n\n        [JsonProperty(PropertyName = \"body\")]\n        public object Body { get; set; }\n\n        public string ToXml()\n        {\n            StringBuilder sb = new StringBuilder();\n            sb.Append(\"<root>\");\n            this.ConvertBodyToXml(sb);\n            sb.AppendFormat(\"<method>{0}</method>\", this.Method);\n            this.ConvertQueryToXml(sb);\n            this.ConvertUserToXml(sb);\n            sb.Append(\"</root>\");\n            return sb.ToString();\n        }\n\n        private void ConvertBodyToXml(StringBuilder sb)\n        {\n            if (this.Body != null)\n            {\n                sb.Append(\"<body>\");\n                var strBody = this.Body as string;\n                if (strBody != null)\n                {\n                    sb.Append(strBody);\n                }\n                else\n                {\n                    var jtokenBody = this.Body as JToken;\n                    if (jtokenBody != null)\n                    {\n                        JsonToXml(jtokenBody, sb);\n                    }\n                    else\n                    {\n                        sb.AppendFormat(\"ERROR! Invalid body type: {0} - {1}\", this.Body.GetType().FullName, this.Body);\n                    }\n                }\n\n                sb.Append(\"</body>\");\n            }\n        }\n\n        private static void JsonToXml(JToken json, StringBuilder sb)\n        {\n            if (json == null)\n            {\n                json = \"\";\n            }\n\n            switch (json.Type)\n            {\n                case JTokenType.Null:\n                    sb.Append(\"null\");\n                    break;\n                case JTokenType.Boolean:\n                    sb.Append(json.ToString().ToLowerInvariant());\n                    break;\n                case JTokenType.Float:\n                case JTokenType.Integer:\n                    sb.Append(json.ToString());\n                    break;\n                case JTokenType.String:\n                    sb.Append(json.ToObject<string>());\n                    break;\n                case JTokenType.Array:\n                    sb.Append(\"<array>\");\n                    JArray array = (JArray)json;\n                    for (int i = 0; i < array.Count; i++)\n                    {\n                        sb.Append(\"<item>\");\n                        JsonToXml(array[i], sb);\n                        sb.Append(\"</item>\");\n                    }\n\n                    sb.Append(\"</array>\");\n                    break;\n                case JTokenType.Object:\n                    JObject obj = (JObject)json;\n                    var keys = obj.Properties().Select(p => p.Name).ToArray();\n                    Array.Sort(keys);\n                    foreach (var key in keys)\n                    {\n                        sb.Append(\"<\" + key + \">\");\n                        JsonToXml(obj[key], sb);\n                        sb.Append(\"</\" + key + \">\");\n                    }\n\n                    break;\n                default:\n                    throw new ArgumentException(\"Type \" + json.Type + \" is not supported\");\n            }\n        }\n\n        private void ConvertUserToXml(StringBuilder sb)\n        {\n            sb.Append(\"<user>\");\n            sb.AppendFormat(\"<level>{0}</level>\", this.User.Level.ToLowerInvariant());\n            if (this.User.Id != null)\n            {\n                sb.AppendFormat(\"<userId>{0}</userId>\", this.User.Id);\n            }\n\n            sb.Append(\"</user>\");\n        }\n\n        private void ConvertQueryToXml(StringBuilder sb)\n        {\n            if (this.Query != null && this.Query.Count > 0)\n            {\n                sb.Append(\"<query>\");\n                foreach (var key in this.Query.Keys.OrderBy(k => k))\n                {\n                    sb.AppendFormat(\"<{0}>\", key);\n                    sb.Append(this.Query[key]);\n                    sb.AppendFormat(\"</{0}>\", key);\n                }\n\n                sb.Append(\"</query>\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Utils/InMemoryDomainManager.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service.Tables;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing System.Web.Http.OData;\nusing System.Web.Http.OData.Query;\n\nnamespace ZumoE2EServerApp.Utils\n{\n    internal class InMemoryDomainManager<TData> : IDomainManager<TData> where TData : class, ITableData\n    {\n        private static List<TData> store;\n        private static object lockObj = new object();\n        private static int counter = 1;\n\n        public InMemoryDomainManager(List<TData> initial = null)\n        {\n            if (store == null)\n            {\n                lock (lockObj)\n                {\n                    if (store == null)\n                    {\n                        store = (initial != null ? initial : new List<TData>());\n                    }\n                }\n            }\n        }\n\n        public IQueryable<TData> Query()\n        {\n            lock (lockObj)\n            {\n                return store.AsQueryable();\n            }\n        }\n\n        public SingleResult<TData> Lookup(string id)\n        {\n            lock (lockObj)\n            {\n                return SingleResult.Create(store.Where(p => p.Id == id).AsQueryable());\n            }\n        }\n\n        public Task<IEnumerable<TData>> QueryAsync(ODataQueryOptions query)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<SingleResult<TData>> LookupAsync(string id)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<TData> InsertAsync(TData data)\n        {\n            lock (lockObj)\n            {\n                data.Id = (counter++).ToString();\n                store.Add(data);\n                return Task.FromResult(data);\n            }\n        }\n\n        public Task<TData> UpdateAsync(string id, Delta<TData> patch)\n        {\n            lock (lockObj)\n            {\n                TData data = store.First(p => p.Id == id);\n                patch.Patch(data);\n                return Task.FromResult(data);\n            }\n        }\n\n        public Task<TData> ReplaceAsync(string id, TData data)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<bool> DeleteAsync(string id)\n        {\n            lock (lockObj)\n            {\n                bool ret = false;\n                var data = store.FirstOrDefault(p => p.Id == id);\n                if (data != null)\n                {\n                    store.Remove(data);\n                    ret = true;\n                }\n                return Task.FromResult(ret);\n            }\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Utils/StringIdRoundTripDomainManager.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing System.Net.Http;\nusing ZumoE2EServerApp.DataObjects;\nusing ZumoE2EServerApp.Models;\n\nnamespace ZumoE2EServerApp.Utils\n{\n    internal class StringIdRoundTripDomainManager : ComplexTypeDomainManager<StringIdRoundTripTableItem, StringIdRoundTripTableItemForDB, string>\n    {\n        public StringIdRoundTripDomainManager(SDKClientTestContext context, HttpRequestMessage request, ApiServices services)\n            : base(context, request, services)\n        {\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Utils/W8JSRoundTripDomainManager.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing System.Net.Http;\nusing ZumoE2EServerApp.DataObjects;\nusing ZumoE2EServerApp.Models;\n\nnamespace ZumoE2EServerApp.Utils\n{\n    internal class W8JSRoundTripDomainManager : ComplexTypeDomainManager<W8JSRoundTripTableItem, W8JSRoundTripTableItemForDB, string>\n    {\n        public W8JSRoundTripDomainManager(SDKClientTestContext context, HttpRequestMessage request, ApiServices services)\n            : base(context, request, services)\n        {\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Utils/W8RoundTripDomainManager.cs",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\nusing Microsoft.WindowsAzure.Mobile.Service;\nusing System.Net.Http;\nusing ZumoE2EServerApp.DataObjects;\nusing ZumoE2EServerApp.Models;\n\nnamespace ZumoE2EServerApp.Utils\n{\n    internal class W8RoundTripDomainManager : ComplexTypeDomainManager<RoundTripTableItemFakeStringId, RoundTripTableItem, int>\n    {\n        public W8RoundTripDomainManager(SDKClientTestContext context, HttpRequestMessage request, ApiServices services)\n            : base(context, request, services)\n        {\n        }\n    }\n}"
  },
  {
    "path": "test/ZumoE2EServerApp/Web.Debug.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--  Copyright (c) Microsoft Corporation. All rights reserved. -->\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "test/ZumoE2EServerApp/Web.Release.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--  Copyright (c) Microsoft Corporation. All rights reserved. -->\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "test/ZumoE2EServerApp/Web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--  Copyright (c) Microsoft Corporation. All rights reserved. -->\n\n<configuration>\n  <configSections>\n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n    \n  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>\n  <connectionStrings>\n    <add name=\"MS_TableConnectionString\" connectionString=\"Data Source=(localdb)\\v11.0;AttachDbFilename=|DataDirectory|\\aspnet-ZumoE2EServerApp-localtest2.mdf;Initial Catalog=aspnet-ZumoE2EServerApp-localtest2;Integrated Security=True;MultipleActiveResultSets=True\" providerName=\"System.Data.SqlClient\" />\n    <add name=\"MS_NotificationHubConnectionString\" connectionString=\"set by portal\" />\n  </connectionStrings>\n  <appSettings>\n    <!-- Use these settings for local development. After publishing to \n    Mobile Services, these settings will be overriden by the values specified\n    in the portal. -->\n    <!-- Service Bus specific app setings for messaging connections --><add key=\"MS_MobileServiceName\" value=\"ZumoE2EServerApp\" />\n    <add key=\"MS_ApplicationKey\" value=\"applicationKey\" />\n    <add key=\"MS_MasterKey\" value=\"masterKey\" />\n    <add key=\"MS_ApplicationSystemKey\" value=\"systemKey\" />\n    <add key=\"MS_FacebookAppID\" value=\"set by portal\" />\n    <add key=\"MS_FacebookAppSecret\" value=\"set by portal\" />\n    <add key=\"MS_GoogleClientID\" value=\"set by portal\" />\n    <add key=\"MS_GoogleClientSecret\" value=\"set by portal\" />\n    <add key=\"MS_TwitterConsumerKey\" value=\"set by portal\" />\n    <add key=\"MS_TwitterConsumerSecret\" value=\"set by portal\" />\n    <add key=\"MS_MicrosoftClientID\" value=\"set by portal\" />\n    <add key=\"MS_MicrosoftClientSecret\" value=\"set by portal\" />\n    <add key=\"MS_NotificationHubName\" value=\"set by portal\" />\n  <add key=\"Microsoft.ServiceBus.ConnectionString\" value=\"Endpoint=sb://[your namespace].servicebus.windows.net;SharedSecretIssuer=owner;SharedSecretValue=[your secret]\" /></appSettings>\n  <system.web>\n    <httpRuntime targetFramework=\"4.5\" />\n    <compilation debug=\"true\" targetFramework=\"4.5\" />\n    <customErrors mode=\"Off\" />\n  </system.web>\n  <system.webServer>\n    <validation validateIntegratedModeConfiguration=\"false\" />\n    <modules runAllManagedModulesForAllRequests=\"true\" />\n    \n  <handlers>\n      <remove name=\"ExtensionlessUrlHandler-Integrated-4.0\" />\n      <remove name=\"OPTIONSVerbHandler\" />\n      <remove name=\"TRACEVerbHandler\" />\n      <add name=\"ExtensionlessUrlHandler-Integrated-4.0\" path=\"*.\" verb=\"*\" type=\"System.Web.Handlers.TransferRequestHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n    </handlers></system.webServer>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework\" />\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.1.0.0\" newVersion=\"2.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.1.0.0\" newVersion=\"2.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.Cookies\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.1.0.0\" newVersion=\"2.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.OAuth\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.1.0.0\" newVersion=\"2.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.0.0.0\" newVersion=\"6.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.IdentityModel.Tokens.Jwt\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.0.0\" newVersion=\"2.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.ServiceBus\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.4.0.0\" newVersion=\"2.4.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Data.Edm\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.6.1.0\" newVersion=\"5.6.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Data.OData\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.6.1.0\" newVersion=\"5.6.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Spatial\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.6.1.0\" newVersion=\"5.6.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Http\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.0.0\" newVersion=\"5.2.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Http.Tracing\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.0.0\" newVersion=\"5.2.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Formatting\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.0.0\" newVersion=\"5.2.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Http.Cors\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.0.0\" newVersion=\"5.2.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Http.Owin\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.0.0\" newVersion=\"5.2.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Http.OData\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.0.0\" newVersion=\"5.2.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n<system.serviceModel>\n    <extensions>\n      <!-- In this extension section we are introducing all known service bus extensions. User can remove the ones they don't need. -->\n      <behaviorExtensions>\n        <add name=\"connectionStatusBehavior\" type=\"Microsoft.ServiceBus.Configuration.ConnectionStatusElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"transportClientEndpointBehavior\" type=\"Microsoft.ServiceBus.Configuration.TransportClientEndpointBehaviorElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"serviceRegistrySettings\" type=\"Microsoft.ServiceBus.Configuration.ServiceRegistrySettingsElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n      </behaviorExtensions>\n      <bindingElementExtensions>\n        <add name=\"netMessagingTransport\" type=\"Microsoft.ServiceBus.Messaging.Configuration.NetMessagingTransportExtensionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"tcpRelayTransport\" type=\"Microsoft.ServiceBus.Configuration.TcpRelayTransportElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"httpRelayTransport\" type=\"Microsoft.ServiceBus.Configuration.HttpRelayTransportElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"httpsRelayTransport\" type=\"Microsoft.ServiceBus.Configuration.HttpsRelayTransportElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"onewayRelayTransport\" type=\"Microsoft.ServiceBus.Configuration.RelayedOnewayTransportElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n      </bindingElementExtensions>\n      <bindingExtensions>\n        <add name=\"basicHttpRelayBinding\" type=\"Microsoft.ServiceBus.Configuration.BasicHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"webHttpRelayBinding\" type=\"Microsoft.ServiceBus.Configuration.WebHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"ws2007HttpRelayBinding\" type=\"Microsoft.ServiceBus.Configuration.WS2007HttpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"netTcpRelayBinding\" type=\"Microsoft.ServiceBus.Configuration.NetTcpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"netOnewayRelayBinding\" type=\"Microsoft.ServiceBus.Configuration.NetOnewayRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"netEventRelayBinding\" type=\"Microsoft.ServiceBus.Configuration.NetEventRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"netMessagingBinding\" type=\"Microsoft.ServiceBus.Messaging.Configuration.NetMessagingBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n      </bindingExtensions>\n    </extensions>\n  </system.serviceModel></configuration>\n"
  },
  {
    "path": "test/ZumoE2EServerApp/ZumoE2EServerApp.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>ZumoE2EServerApp</RootNamespace>\n    <AssemblyName>ZumoE2EServerApp</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <MvcBuildViews>false</MvcBuildViews>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort>44303</IISExpressSSLPort>\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Autofac, Version=3.5.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Autofac.3.5.0\\lib\\net40\\Autofac.dll</HintPath>\n    </Reference>\n    <Reference Include=\"AutoMapper, Version=3.2.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\AutoMapper.3.2.1\\lib\\net40\\AutoMapper.dll</HintPath>\n    </Reference>\n    <Reference Include=\"AutoMapper.Net4, Version=3.2.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\AutoMapper.3.2.1\\lib\\net40\\AutoMapper.Net4.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\EntityFramework.6.1.0\\lib\\net45\\EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\EntityFramework.6.1.0\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.AspNet.Identity.Core.2.0.1\\lib\\net45\\Microsoft.AspNet.Identity.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Owin, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.AspNet.Identity.Owin.2.0.1\\lib\\net45\\Microsoft.AspNet.Identity.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"Microsoft.Data.Edm, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Data.Edm.5.6.0\\lib\\net40\\Microsoft.Data.Edm.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Data.OData, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Data.OData.5.6.0\\lib\\net40\\Microsoft.Data.OData.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Owin.2.1.0\\lib\\net45\\Microsoft.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Owin.Security.2.1.0\\lib\\net45\\Microsoft.Owin.Security.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.ActiveDirectory, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Owin.Security.ActiveDirectory.2.1.0\\lib\\net45\\Microsoft.Owin.Security.ActiveDirectory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Cookies, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Owin.Security.Cookies.2.1.0\\lib\\net45\\Microsoft.Owin.Security.Cookies.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Facebook, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Owin.Security.Facebook.2.1.0\\lib\\net45\\Microsoft.Owin.Security.Facebook.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Google, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Owin.Security.Google.2.1.0\\lib\\net45\\Microsoft.Owin.Security.Google.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Jwt, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Owin.Security.Jwt.2.1.0\\lib\\net45\\Microsoft.Owin.Security.Jwt.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.MicrosoftAccount, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Owin.Security.MicrosoftAccount.2.1.0\\lib\\net45\\Microsoft.Owin.Security.MicrosoftAccount.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.OAuth, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Owin.Security.OAuth.2.1.0\\lib\\net45\\Microsoft.Owin.Security.OAuth.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Twitter, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Owin.Security.Twitter.2.1.0\\lib\\net45\\Microsoft.Owin.Security.Twitter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.ServiceBus, Version=2.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\WindowsAzure.ServiceBus.2.3.4.0\\lib\\net40-full\\Microsoft.ServiceBus.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks\">\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Bcl.Async.1.0.16\\lib\\net45\\Microsoft.Threading.Tasks.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Threading.Tasks.Extensions\">\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Bcl.Async.1.0.16\\lib\\net45\\Microsoft.Threading.Tasks.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.WindowsAzure.ConfigurationManager.2.0.3\\lib\\net40\\Microsoft.WindowsAzure.Configuration.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile.Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\WindowsAzure.MobileServices.Backend.1.0.348\\lib\\net45\\Microsoft.WindowsAzure.Mobile.Service.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile.Service.Entity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\WindowsAzure.MobileServices.Backend.Entity.1.0.348\\lib\\net45\\Microsoft.WindowsAzure.Mobile.Service.Entity.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.WindowsAzure.Mobile.Service.Tables, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\WindowsAzure.MobileServices.Backend.Tables.1.0.348\\lib\\net45\\Microsoft.WindowsAzure.Mobile.Service.Tables.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Newtonsoft.Json.6.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Owin.1.0\\lib\\net40\\Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"RazorEngine, Version=3.4.1.0, Culture=neutral, PublicKeyToken=9ee697374c7e744a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\RazorEngine.3.4.1\\lib\\net45\\RazorEngine.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.Composition\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.Services.Client\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.IdentityModel.Tokens.Jwt, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\System.IdentityModel.Tokens.Jwt.1.0.0\\lib\\net45\\System.IdentityModel.Tokens.Jwt.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Net.Http.Formatting, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.AspNet.WebApi.Client.5.1.2\\lib\\net45\\System.Net.Http.Formatting.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Security\" />\n    <Reference Include=\"System.ServiceModel\" />\n    <Reference Include=\"System.Spatial, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\System.Spatial.5.6.0\\lib\\net40\\System.Spatial.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Cors, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.AspNet.Cors.5.1.2\\lib\\net45\\System.Web.Cors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web.Http, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.AspNet.WebApi.Core.5.1.2\\lib\\net45\\System.Web.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Http.Cors, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.AspNet.WebApi.Cors.5.1.2\\lib\\net45\\System.Web.Http.Cors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Http.OData, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.AspNet.WebApi.OData.5.1.2\\lib\\net45\\System.Web.Http.OData.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Http.Owin, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.AspNet.WebApi.Owin.5.1.2\\lib\\net45\\System.Web.Http.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Http.Tracing, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.AspNet.WebApi.Tracing.5.1.2\\lib\\net45\\System.Web.Http.Tracing.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.AspNet.Razor.3.0.0\\lib\\net45\\System.Web.Razor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Abstractions\" />\n    <Reference Include=\"System.Web.Routing\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.Net.Http\">\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\">\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Controllers\\ApplicationApiController.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Controllers\\RuntimeInfoController.cs\" />\n    <Compile Include=\"Controllers\\OfflineReadyController.cs\" />\n    <Compile Include=\"Controllers\\W8JSRoundTripTableController.cs\" />\n    <Compile Include=\"DataObjects\\OfflineReady.cs\" />\n    <Compile Include=\"DataObjects\\ParamsTestTableEntity.cs\" />\n    <Compile Include=\"DataObjects\\W8JSRoundTripTableItem.cs\" />\n    <Compile Include=\"DataObjects\\W8PushTestEntity.cs\" />\n    <Compile Include=\"Utils\\ComplexTypeDomainManager.cs\" />\n    <Compile Include=\"Utils\\CustomSharedApi.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Controllers\\MovieFinderApiController.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"DataObjects\\TestUser.cs\" />\n    <Compile Include=\"ScheduledJobs\\SimpleJob.cs\" />\n    <Compile Include=\"Controllers\\AuthenticatedController.cs\" />\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"DataObjects\\Movie.cs\" />\n    <Compile Include=\"DataObjects\\RoundTripTableItem.cs\" />\n    <Compile Include=\"Models\\SDKClientTestContext.cs\" />\n    <Compile Include=\"DataObjects\\StringIdRoundTripTableItem.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Controllers\\AdminController.cs\" />\n    <Compile Include=\"Controllers\\ApplicationController.cs\" />\n    <Compile Include=\"Controllers\\ParamsTestTableController.cs\" />\n    <Compile Include=\"Controllers\\PublicController.cs\" />\n    <Compile Include=\"Controllers\\StringIdMoviesController.cs\" />\n    <Compile Include=\"Controllers\\StringIdRoundTripTableController.cs\" />\n    <Compile Include=\"Controllers\\W8PushTestController.cs\" />\n    <Compile Include=\"Controllers\\W8RoundTripTableController.cs\" />\n    <Compile Include=\"Utils\\InMemoryDomainManager.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Utils\\StringIdRoundTripDomainManager.cs\" />\n    <Compile Include=\"Utils\\W8JSRoundTripDomainManager.cs\" />\n    <Compile Include=\"Utils\\W8RoundTripDomainManager.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App_Start\\WebApiConfig.cs\" />\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Web.config\">\n      <SubType>Designer</SubType>\n    </Content>\n    <Content Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <Service Include=\"{508349B6-6B84-4DF5-91F0-309BEEBAD82D}\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"App_Data\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"packages.config\">\n      <SubType>Designer</SubType>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Performance\\Microsoft.ServiceBus.MessagingPerformanceCounters.man\" />\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <Target Name=\"MvcBuildViews\" AfterTargets=\"AfterBuild\" Condition=\"'$(MvcBuildViews)'=='true'\">\n    <AspNetCompiler VirtualPath=\"temp\" PhysicalPath=\"$(WebProjectOutputDir)\" />\n  </Target>\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>8947</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:57067/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <Import Project=\"$(SolutionDir)\\.nuget\\NuGet.targets\" Condition=\"Exists('$(SolutionDir)\\.nuget\\NuGet.targets')\" />\n  <Import Project=\"..\\PLib\\ZumoE2ETestApp\\packages\\AutoMapper.3.2.1\\tools\\AutoMapper.targets\" Condition=\"Exists('..\\PLib\\ZumoE2ETestApp\\packages\\AutoMapper.3.2.1\\tools\\AutoMapper.targets')\" />\n  <Import Project=\"..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\PLib\\ZumoE2ETestApp\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target> -->\n</Project>"
  },
  {
    "path": "test/ZumoE2EServerApp/ZumoE2EServerApp.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.30501.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ZumoE2EServerApp\", \"ZumoE2EServerApp.csproj\", \"{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{74BCC6A6-0BF1-4FF6-B63F-63E59FC0DE3A}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "test/ZumoE2EServerApp/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Autofac\" version=\"3.5.0\" targetFramework=\"net45\" />\n  <package id=\"AutoMapper\" version=\"3.2.1\" targetFramework=\"net45\" />\n  <package id=\"EntityFramework\" version=\"6.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Cors\" version=\"5.1.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Core\" version=\"2.0.1\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Owin\" version=\"2.0.1\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Razor\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.Client\" version=\"5.1.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.Core\" version=\"5.1.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.Cors\" version=\"5.1.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.OData\" version=\"5.1.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.Owin\" version=\"5.1.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.Tracing\" version=\"5.1.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.7\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Async\" version=\"1.0.16\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Data.Edm\" version=\"5.6.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Data.OData\" version=\"5.6.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.ActiveDirectory\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Cookies\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Facebook\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Google\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Jwt\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.MicrosoftAccount\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.OAuth\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Twitter\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.WindowsAzure.ConfigurationManager\" version=\"2.0.3\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"6.0.1\" targetFramework=\"net45\" />\n  <package id=\"Owin\" version=\"1.0\" targetFramework=\"net45\" />\n  <package id=\"RazorEngine\" version=\"3.4.1\" targetFramework=\"net45\" />\n  <package id=\"System.IdentityModel.Tokens.Jwt\" version=\"1.0.0\" targetFramework=\"net45\" />\n  <package id=\"System.Spatial\" version=\"5.6.0\" targetFramework=\"net45\" />\n  <package id=\"WindowsAzure.MobileServices.Backend\" version=\"1.0.348\" targetFramework=\"net45\" />\n  <package id=\"WindowsAzure.MobileServices.Backend.Entity\" version=\"1.0.348\" targetFramework=\"net45\" />\n  <package id=\"WindowsAzure.MobileServices.Backend.Tables\" version=\"1.0.348\" targetFramework=\"net45\" />\n  <package id=\"WindowsAzure.ServiceBus\" version=\"2.3.4.0\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "test/iOS/.gitignore",
    "content": "xcuserdata/\nproject.xcworkspace/\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Headers/MSClient.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n#import \"MSError.h\"\n#import \"MSFilter.h\"\n#import \"MSLoginController.h\"\n\n@class MSTable;\n@class MSUser;\n@class MSPush;\n\n#pragma mark * Block Type Definitions\n/// Callback for method with no return other than error.\ntypedef void (^MSCompletionBlock)(NSError *error);\n\n/// Callback for invokeAPI method that expects a JSON result.\ntypedef void (^MSAPIBlock)(id result, NSHTTPURLResponse *response, NSError *error);\n\n/// Callback for the invokeAPI method that can return any media type.\ntypedef void (^MSAPIDataBlock)(NSData *result,\n                               NSHTTPURLResponse *response,\n                               NSError *error);\n\n#pragma  mark * MSClient Public Interface\n\n/// The MSClient class is the starting point for working with a Microsoft Azure\n/// Mobile Service on a client device. An instance of the *MSClient* class is\n/// created with a URL pointing to a Microsoft Azure Mobile Service. The *MSClient*\n/// allows the developer to get MSTable instances, which are used to work with\n/// the data of the Microsoft Azure Mobile Service, as well as login and logout an\n/// end user.\n@interface MSClient : NSObject <NSCopying>\n\n#pragma mark * Public Readonly Properties\n\n/// @name Properties\n/// @{\n\n/// The URL of the Microsoft Azure Mobile Service associated with the client.\n@property (nonatomic, strong, readonly)     NSURL *applicationURL;\n\n/// The application key for the Microsoft Azure Mobile Service associated with\n/// the client if one was provided in the creation of the client and nil\n/// otherwise. If non-nil, the application key will be included in all requests\n/// made to the Microsoft Azure Mobile Service, allowing the client to perform\n/// all actions on the Microsoft Azure Mobile Service that require application-key\n/// level permissions.\n@property (nonatomic, copy, readonly)     NSString *applicationKey;\n\n/// A collection of MSFilter instances to apply to use with the requests and\n/// responses sent and received by the client. The property is readonly and the\n/// array is not-mutable. To apply a filter to a client, use the withFilter:\n/// method.\n@property (nonatomic, strong, readonly)         NSArray *filters;\n\n/// @name Registering and unregistering for push notifications\n\n/// The property to use for registering and unregistering for notifications via *MSPush*.\n@property (nonatomic, strong, readonly)     MSPush *push;\n\n/// @}\n\n#pragma mark * Public ReadWrite Properties\n\n\n/// The currently logged in user. While the currentUser property can be set\n/// directly, the login* and logout methods are more convenient and\n/// recommended for non-testing use.\n@property (nonatomic, strong)               MSUser *currentUser;\n\n/// @}\n\n#pragma  mark * Public Static Constructor Methods\n\n/// @name Initializing the MSClient Object\n/// @{\n\n/// Creates a client with the given URL for the Microsoft Azure Mobile Service.\n+(MSClient *)clientWithApplicationURLString:(NSString *)urlString;\n\n/// Creates a client with the given URL and application key for the Microsoft Azure\n/// Mobile Service.\n+(MSClient *)clientWithApplicationURLString:(NSString *)urlString\n                         applicationKey:(NSString *)key;\n\n/// Old method to create a client with the given URL and application key for the\n/// Microsoft Azure Mobile Service. This has been deprecated. Use\n/// clientWithApplicationURLString:applicationKey:\n/// @deprecated\n+(MSClient *)clientWithApplicationURLString:(NSString *)urlString\n                         withApplicationKey:(NSString *)key __deprecated;\n\n/// Creates a client with the given URL for the Microsoft Azure Mobile Service.\n+(MSClient *)clientWithApplicationURL:(NSURL *)url;\n\n/// Creates a client with the given URL and application key for the Microsoft Azure\n/// Mobile Service.\n+(MSClient *)clientWithApplicationURL:(NSURL *)url\n                       applicationKey:(NSString *)key;\n\n#pragma  mark * Public Initializer Methods\n\n/// Initializes a client with the given URL for the Microsoft Azure Mobile Service.\n-(id)initWithApplicationURL:(NSURL *)url;\n\n/// Initializes a client with the given URL and application key for the Windows\n/// Azure Mobile Service.\n-(id)initWithApplicationURL:(NSURL *)url applicationKey:(NSString *)key;\n\n#pragma mark * Public Filter Methods\n\n/// Creates a clone of the client with the given filter applied to the new client.\n-(MSClient *)clientWithFilter:(id<MSFilter>)filter;\n\n///@}\n\n/// @name Authenticating Users\n/// @{\n\n#pragma mark * Public Login and Logout Methods\n\n/// Logs in the current end user with the given provider by presenting the\n/// MSLoginController with the given controller.\n-(void)loginWithProvider:(NSString *)provider\n              controller:(UIViewController *)controller\n                animated:(BOOL)animated\n              completion:(MSClientLoginBlock)completion;\n\n/// Returns an MSLoginController that can be used to log in the current\n/// end user with the given provider.\n-(MSLoginController *)loginViewControllerWithProvider:(NSString *)provider\n                                 completion:(MSClientLoginBlock)completion;\n\n/// Logs in the current end user with the given provider and the given token for\n/// the provider.\n-(void)loginWithProvider:(NSString *)provider\n                   token:(NSDictionary *)token\n              completion:(MSClientLoginBlock)completion;\n\n/// Logs out the current end user.\n-(void)logout;\n\n/// @}\n\n#pragma mark * Public Table Methods\n\n/// @name Querying Tables\n/// @{\n\n/// Returns an MSTable instance for a table with the given name.\n-(MSTable *)tableWithName:(NSString *)tableName;\n\n/// Old method to return an MSTable instance for a table with the given name.\n/// This has been deprecated. Use tableWithName:\n-(MSTable *)getTable:(NSString *)tableName __deprecated;\n\n/// @}\n\n#pragma mark * Public invokeAPI Methods\n\n/// @name Invoking Custom APIs\n/// @{\n\n/// Invokes a user-defined API of the Mobile Service.  The HTTP request and\n/// response content will be treated as JSON.\n-(void)invokeAPI:(NSString *)APIName\n            body:(id)body\n      HTTPMethod:(NSString *)method\n      parameters:(NSDictionary *)parameters\n         headers:(NSDictionary *)headers\n      completion:(MSAPIBlock)completion;\n\n/// Invokes a user-defined API of the Mobile Service.  The HTTP request and\n/// response content can be of any media type.\n-(void)invokeAPI:(NSString *)APIName\n            data:(NSData *)data\n      HTTPMethod:(NSString *)method\n      parameters:(NSDictionary *)parameters\n         headers:(NSDictionary *)headers\n      completion:(MSAPIDataBlock)completion;\n\n/// @}\n\n\n#pragma mark * Public Connection Methods\n\n\n/// @name Controlling connections to the server\n/// @{\n\n/// Determines where connections made to the mobile service are run. If set, connection related\n/// logic will occur on this queue. Otherwise, the thread that made the call will be used.\n@property (nonatomic, strong) NSOperationQueue *connectionDelegateQueue;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Headers/MSError.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#ifndef WindowsAzureMobileServices_MSError_h\n#define WindowsAzureMobileServices_MSError_h\n\n\n#pragma mark * MSErrorDomain\n\n\n/// The error domain for the Microsoft Azure Mobile Service client framework\nextern NSString *const MSErrorDomain;\n\n\n#pragma mark * UserInfo Request and Response Keys\n\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the request\n/// that was sent to the Microsoft Azure Mobile Service related to the error. Not\n/// all errors will include the request so the userInfo dicitionary may return\n/// nil.\nextern NSString *const MSErrorRequestKey;\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the\n/// response that was returned from the Microsoft Azure Mobile Service related to\n/// the error. Not all errors will include the response so the userInfo\n/// dicitionary may return nil.\nextern NSString *const MSErrorResponseKey;\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the\n/// server item that was returned from the Microsoft Azure Mobile Service related to\n/// the precondition failed error. This will only be present on MSPreconditionFailed\n/// errors.\nextern NSString *const MSErrorServerItemKey;\n\n\n#pragma mark * MSErrorCodes\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// a nil item was used.\n#define MSExpectedItemWithRequest               -1101\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an item without an id was used\n#define MSMissingItemIdWithRequest              -1102\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an invalid item was used.\n#define MSInvalidItemWithRequest                -1103\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// a nil itemId was used.\n#define MSExpectedItemIdWithRequest             -1104\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an invalid itemId was used.\n#define MSInvalidItemIdWithRequest              -1105\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an invalid user-parameter in the query string.\n#define MSInvalidUserParameterWithRequest       -1106\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an item with an id was used with an insert operation.\n#define MSExistingItemIdWithRequest             -1107\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// include an item as expected.\n#define MSExpectedItemWithResponse              -1201\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// include an array of items as expected.\n#define MSExpectedItemsWithResponse             -1202\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// include a total count as expected.\n#define MSExpectedTotalCountWithResponse        -1203\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// have body content as expected.\n#define MSExpectedBodyWithResponse              -1204\n\n/// Indicates that the response from the Microsoft Azure Mobile Service indicated\n/// there was an error but that an error message was not provided.\n#define MSErrorNoMessageErrorCode               -1301\n\n/// Indicates that the response from the Microsoft Azure Mobile Service indicated\n/// there was an error and an error message was provided.\n#define MSErrorMessageErrorCode                 -1302\n\n/// Indicates that the response from the Microsoft Azure Mobile Service indicated\n/// there was an error\n#define MSErrorPreconditionFailed               -1303\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// the *NSPredicate* used in the query could not be translated into a query\n/// string supported by the Microsoft Azure Mobile Service.\n#define MSPredicateNotSupported                 -1400\n\n/// Indicates that the login operation has failed.\n#define MSLoginFailed                           -1501\n\n/// Indicates that the Microsoft Azure Mobile Service returned a login response\n/// with invalid syntax.\n#define MSLoginInvalidResponseSyntax            -1502\n\n/// Indicates that the login operation was canceled.\n#define MSLoginCanceled                         -1503\n\n/// Indicates that the login operation failed because a nil token was used.\n#define MSLoginExpectedToken                    -1504\n\n/// Indicates that the login operation failed because an invalid token was used.\n#define MSLoginInvalidToken                     -1505\n\n/// Indicates that a required parameter for push operation was not provided\n#define MSPushRequiredParameter                 -1600\n\n/// Indicates that local storage is corrupt until register or deleteAllRegistrations are invoked\n#define MSPushLocalStorageCorrupt               -1601\n\n#endif\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Headers/MSFilter.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSError.h\"\n\n\n#pragma mark * Block Type Definitions\n\n\n/// Callback that the filter should invoke once an HTTP response (with or\n/// without data) or an error has been received by the filter.\ntypedef void (^MSFilterResponseBlock)(NSHTTPURLResponse *response, NSData *data, NSError *error);\n\n/// Callback that the filter should invoke to allow the next filter to handle\n/// the given request.\ntypedef void (^MSFilterNextBlock)(NSURLRequest *request,\n                                  MSFilterResponseBlock onResponse);\n\n\n#pragma  mark * MSFilter Public Protocol\n\n\n/// The *MSFilter* protocol allows developers to implement a class that can\n/// inspect and/or replace HTTP request and HTTP response messages being sent\n/// and received by an *MSClient* instance.\n@protocol MSFilter <NSObject>\n\n/// @name Modify the request\n/// @{\n\n/// Allows for the inspection and/or modification of the HTTP request and HTTP response messages\n/// being sent and received by an *MSClient* instance.\n-(void)handleRequest:(NSURLRequest *)request\n                next:(MSFilterNextBlock)next\n            response:(MSFilterResponseBlock)response;\n\n///@}\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Headers/MSLoginController.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <UIKit/UIKit.h>\n\n@class MSClient;\n@class MSUser;\n\n\n#pragma mark * Block Type Definitions\n\n/// Callback logging in an end user. If there was an error or the login was\n/// cancelled, *error* will be non-nil.\ntypedef void (^MSClientLoginBlock)(MSUser *user, NSError *error);\n\n#pragma  mark * MSLoginController Public Interface\n\n\n/// The *MSLoginController* class provides a UIViewController that can be\n/// presented to allow an end user to authenticate with a Microsoft Azure Mobile\n/// Service.\n@interface MSLoginController : UIViewController\n\n#pragma  mark * Public Initializer Methods\n\n///@name Initializing the MSLoginController object\n///@{\n\n/// Initializes an *MSLoginController* instance with the given client, login\n/// provider and completion block.\n-(id)initWithClient:(MSClient *)client\n           provider:(NSString *)provider\n         completion:(MSClientLoginBlock)completion;\n\n///@}\n\n\n#pragma mark * Public Readonly Properties\n\n///@name Properties\n///@{\n\n/// The client associated with this *MSLoginController*.\n@property (nonatomic, strong, readonly)     MSClient *client;\n\n/// The login provider associated with this *MSLoginController*.\n@property (nonatomic, copy,   readonly)     NSString *provider;\n\n/// The *UIActivityIndicatorView* on the *UIToolbar* associated with the\n/// *MSLoginController*. If the toolbar is visible, the actvivity indicator\n/// will become active whenever the end user is navigating to a new URL during\n/// the login flow.\n@property (nonatomic, strong, readonly)     UIActivityIndicatorView *activityIndicator;\n\n/// The *UIToolbar* associated with the *MSLoginController*. The toolbar includes\n/// a cancel button and an activity indicator. The visibility and placement of\n/// the toolbar can be configured using the *showToolbar* and *toolbarPosition*\n/// properties respectively.\n@property (nonatomic, strong, readonly)     UIToolbar *toolbar;\n\n///@}\n\n\n#pragma mark * Public Readwrite Properties\n\n///@name Customizing the Toolbar\n///@{\n\n/// Indicates if the *toolbar* show be displayed. By default, *showToolbar* is\n/// YES.\n@property (nonatomic, readwrite)            BOOL showToolbar;\n\n/// Indicates if the *toolbar* should be positioned at the top or bottom of\n/// the login view.  By default, the *toolbarPosition* is *UIToolbarPositionBottom*.\n@property (nonatomic, readwrite)            UIToolbarPosition toolbarPosition;\n\n///@}\n\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Headers/MSPush.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n\n#pragma  mark * MSClient Public Interface\n\n@interface MSPush : NSObject\n\n#pragma  mark * Public Initializer Methods\n\n///@name Initializing the MSPush Object\n///@{\n\n/// Initialize the *MSPush* instance with given *MSClient*\n- (MSPush *)initWithClient:(MSClient *)client;\n\n/// @}\n\n#pragma  mark * Public Native Registration Methods\n\n/// @name Working with Native Registrations\n/// @{\n\n/// Register for notifications with given deviceToken and tags. deviceToken is required.\n- (void)registerNativeWithDeviceToken:(NSData *)deviceToken\n                                 tags:(NSArray *)tags\n                           completion:(MSCompletionBlock)completion;\n\n/// Unregister for native notififications.\n- (void)unregisterNativeWithCompletion:(MSCompletionBlock)completion;\n\n/// @}\n\n#pragma  mark * Public Template Registration Methods\n\n/// @name Working with Template Registrations\n/// @{\n\n/// Register for template notififications. deviceToken, name and bodyTemplate are required.\n/// See http://go.microsoft.com/fwlink/?LinkId=401137 for furthur details.\n- (void)registerTemplateWithDeviceToken:(NSData *)deviceToken\n                                   name:(NSString *)name\n                       jsonBodyTemplate:(NSString *)bodyTemplate\n                         expiryTemplate:(NSString *)expiryTemplate\n                                   tags:(NSArray *)tags\n                             completion:(MSCompletionBlock)completion;\n\n/// Unregister for tempalte notifications. name is required.\n- (void)unregisterTemplateWithName:(NSString *)name\n                        completion:(MSCompletionBlock)completion;\n\n/// @}\n\n#pragma  mark * Public Unregister All Registration Methods\n\n/// @name Debug utilities--Unregistering All Registrations\n/// @{\n\n/// Unregister for all native and template registrations. deviceToken is required.\n/// NOT RECOMMENDED FOR USE IN PRODUCTION APPLICATON.\n- (void)unregisterAllWithDeviceToken:(NSData *)deviceToken\n                          completion:(MSCompletionBlock)completion;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Headers/MSQuery.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSTable.h\"\n\n\n#pragma mark * MSQuery Public Interface\n\n\n/// The *MSQuery* class represents a query that can be configured and then\n/// executed against a table of a Microsoft Azure Mobile Service. The query is\n/// serialized as a query string in the URL of the request. A query can be\n/// configured and then sent to the Microsoft Azure Mobile Service using the\n/// *readOnSuccess:onError:* method. *MSQuery* instances can be modfied and\n/// reused, but are not threadsafe.\n@interface MSQuery : NSObject\n\n#pragma mark * Public Initializer Methods\n\n///@name Initializing the MSQuery object\n///@{\n\n/// Initializes a *MSQuery* instance with the given table.\n-(id)initWithTable:(MSTable *)table;\n\n/// Returns a new *MSQuery* instance with the given table and the given\n/// predicate is used as the filter clause of the query.\n-(id)initWithTable:(MSTable *)table predicate:(NSPredicate *)predicate;\n\n///@}\n\n///@name Modifying the Query\n///@{\n\n#pragma mark * Public ReadWrite Properties\n\n/// The predicate used as the filter clause of the query.\n@property (nonatomic) NSPredicate *predicate;\n\n/// The maximum number of items to return from the query.\n@property (nonatomic) NSInteger fetchLimit;\n\n/// The offset from the initial item to use when returning items from a query.\n/// Can be used with *fetchLimit* to implement paging.\n@property (nonatomic) NSInteger fetchOffset;\n\n/// The array of NSSortDescriptors used to order the query results\n@property (nonatomic, copy) NSArray *orderBy;\n\n/// Indicates if the Microsoft Azure Mobile Service should also include the total\n/// count of items on the server (not just the count of items returned) with\n/// the query results.\n@property (nonatomic) BOOL includeTotalCount;\n\n/// A dictionary of string key-value pairs that can include user-defined\n/// parameters to use with the query.\n@property (nonatomic, retain) NSDictionary *parameters;\n\n/// The fields or keys of an item that should be included in the results. A\n/// value of \"*\" means all fields should be included. \"*\" is the default value\n/// if no select keys are specified.\n@property (nonatomic, retain) NSArray *selectFields;\n\n#pragma mark * Public OrderBy Methods\n/// Indicates that the query results should be returned in ascending order\n/// based on the given field. *orderByAscending:* and *orderByDescending:* can\n/// each be called multiple times to further specify how the query results\n/// should be ordered.\n-(void)orderByAscending:(NSString *)field;\n\n/// Indicates that the query results should be returned in descending order\n/// based on the given field. *orderByAscending:* and *orderByDescending:* can\n/// each be called multiple times to further specify how the query results\n/// should be ordered.\n-(void)orderByDescending:(NSString *)field;\n\n\n///@}\n\n\n\n#pragma mark * Public Read Methods\n///@name Executing the query\n///@{\n\n/// Executes the query by sending a request to the Microsoft Azure Mobile Service.\n-(void)readWithCompletion:(MSReadQueryBlock)completion;\n\n///@}\n\n///@name Properties\n///@{\n\n#pragma mark * Public QueryString Methods\n\n/// Generates a query string for current state of the *MSQuery* instance or an\n/// error if the query string could not be generated.\n-(NSString *)queryStringOrError:(NSError **)error;\n\n\n#pragma mark * Public Readonly Properties\n\n/// The table associated with this query.\n@property (nonatomic, strong, readonly)         MSTable *table;\n\n///@}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Headers/MSTable.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n\n@class MSQuery;\n\n\n#pragma mark * Block Type Definitions\n\n\n/// Callback for updates, inserts or readWithId requests. If there was an\n/// error, the *error* will be non-nil.\ntypedef void (^MSItemBlock)(NSDictionary *item, NSError *error);\n\n/// Callback for deletes. If there was an error, the *error* will be non-nil.\ntypedef void (^MSDeleteBlock)(id itemId, NSError *error);\n\n/// Callback for reads. If there was an error, the *error* will be non-nil. If\n/// there was not an error, then the *items* array will always be non-nil\n/// but may be empty if the query returned no results. If the query included a\n/// request for the total count of items on the server (not just those returned\n/// in *items* array), the *totalCount* will have this value; otherwise\n/// *totalCount* will be -1.\ntypedef void (^MSReadQueryBlock)(NSArray *items,\n                                 NSInteger totalCount,\n                                 NSError *error);\n\ntypedef NS_OPTIONS(NSUInteger, MSSystemProperties) {\n    MSSystemPropertyNone        = 0,\n    MSSystemPropertyCreatedAt   = 1 << 0,\n    MSSystemPropertyUpdatedAt   = 1 << 1,\n    MSSystemPropertyVersion     = 1 << 2,\n    MSSystemPropertyAll         = 0xFFFF\n};\n\nextern NSString *const MSSystemColumnCreatedAt;\nextern NSString *const MSSystemColumnUpdatedAt;\nextern NSString *const MSSystemColumnVersion;\n\n#pragma mark * MSTable Public Interface\n\n\n/// The *MSTable* class represents a table of a Microsoft Azure Mobile Service.\n/// Items can be inserted, updated, deleted and read from the table. The table\n/// can also be queried to retrieve an array of items that meet the given query\n/// conditions. All table operations result in a request to the Microsoft Azure\n/// Mobile Service to perform the given operation.\n@interface MSTable : NSObject\n\n\n#pragma mark * Public Readonly Properties\n\n///@name Properties\n///@{\n\n/// The name of this table.\n@property (nonatomic, copy, readonly)           NSString *name;\n\n/// The client associated with this table.\n@property (nonatomic, strong, readonly)         MSClient *client;\n\n@property (nonatomic) MSSystemProperties systemProperties;\n///@}\n\n#pragma mark * Public Initializers\n\n///@name Initializing the MSTable Object\n///@{\n\n/// Initializes an *MSTable* instance with the given name and client.\n-(id)initWithName:(NSString *)tableName client:(MSClient *)client;\n\n///@}\n\n#pragma mark * Public Insert, Update and Delete Methods\n\n///@name Modifying Items\n///@{\n\n/// Sends a request to the Microsoft Azure Mobile Service to insert the given\n/// item into the table. The item must not have an id.\n-(void)insert:(NSDictionary *)item completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to insert the given\n/// item into the table. Addtional user-defined parameters are sent in the\n/// request query string. The item must not have an id.\n-(void)insert:(NSDictionary *)item\n   parameters:(NSDictionary *)parameters\n   completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to update the given\n/// item in the table. The item must have an id.\n-(void)update:(NSDictionary *)item completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to update the given\n/// item in the table. Addtional user-defined parameters are sent in the\n/// request query string. The item must have an id.\n-(void)update:(NSDictionary *)item\n   parameters:(NSDictionary *)parameters\n   completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the given\n/// item from the table. The item must have an id.\n-(void)delete:(NSDictionary *)item completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the given\n/// item from the table. Addtional user-defined parameters are sent in the\n/// request query string. The item must have an id.\n-(void)delete:(NSDictionary *)item\n   parameters:(NSDictionary *)parameters\n   completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the item\n/// with the given id in from table.\n-(void)deleteWithId:(id)itemId completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the item\n/// with the given id in from table. Addtional user-defined parameters are\n/// sent in the request query string.\n-(void)deleteWithId:(id)itemId\n         parameters:(NSDictionary *)parameters\n         completion:(MSDeleteBlock)completion;\n\n///@}\n\n#pragma mark * Public Read Methods\n\n///@name Retreiving Items\n///@{\n\n/// Sends a request to the Microsoft Azure Mobile Service to return the item\n/// with the given id from the table.\n-(void)readWithId:(id)itemId completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return the item\n/// with the given id from the table. Addtional user-defined parameters are\n/// sent in the request query string.\n-(void)readWithId:(id)itemId\n       parameters:(NSDictionary *)parameters\n       completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// fromm the table that meet the conditions of the given query.\n-(void)readWithQueryString:(NSString *)queryString\n                completion:(MSReadQueryBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// from the table. The Microsoft Azure Mobile Service will apply a default\n/// limit to the number of items returned.\n-(void)readWithCompletion:(MSReadQueryBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// from the table that meet the conditions of the given predicate.\n-(void)readWithPredicate:(NSPredicate *) predicate\n      completion:(MSReadQueryBlock)completion;\n\n#pragma mark * Public Query Constructor Methods\n\n\n/// Returns an *MSQuery* instance associated with the table that can be\n/// configured and then executed to retrieve items from the table. An *MSQuery*\n/// instance provides more flexibilty when querying a table than the table\n/// read* methods.\n-(MSQuery *)query;\n\n/// Returns an *MSQuery* instance associated with the table that uses\n/// the given predicate. An *MSQuery* instance provides more flexibilty when\n/// querying a table than the table read* methods.\n-(MSQuery *)queryWithPredicate:(NSPredicate *)predicate;\n\n///@}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Headers/MSUser.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n\n#pragma mark * MSUser Public Interface\n\n\n/// The *MSUser* class represents an end user that can login to a Microsoft Azure\n/// Mobile Service on a client device.\n@interface MSUser : NSObject <NSCopying>\n\n#pragma mark * Public Initializers\n\n///@name Initializing the MSUser Object\n///@{\n\n/// Initializes an *MSUser* instance with the given user id.\n-(id)initWithUserId:(NSString *)userId;\n\n///@}\n\n\n///@name Retrieving User Data\n///@{\n\n#pragma mark * Public Readonly Properties\n\n\n/// The user id of the end user.\n@property (nonatomic, copy, readonly)   NSString *userId;\n\n\n#pragma mark * Public Readwrite Properties\n\n/// A Microsoft Azure Mobile Services authentication token for the logged in\n/// end user. If non-nil, the authentication token will be included in all\n/// requests made to the Microsoft Azure Mobile Service, allowing the client to\n/// perform all actions on the Microsoft Azure Mobile Service that require\n/// authenticated-user level permissions.\n@property (nonatomic, copy)         NSString *mobileServiceAuthenticationToken;\n\n///@}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Headers/WindowsAzureMobileServices.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#ifndef WindowsAzureMobileServices_WindowsAzureMobileServices_h\n#define WindowsAzureMobileServices_WindowsAzureMobileServices_h\n\n#import \"MSClient.h\"\n#import \"MSTable.h\"\n#import \"MSQuery.h\"\n#import \"MSUser.h\"\n#import \"MSFilter.h\"\n#import \"MSError.h\"\n#import \"MSLoginController.h\"\n#import \"MSPush.h\"\n\n#define WindowsAzureMobileServicesSdkMajorVersion 1\n#define WindowsAzureMobileServicesSdkMinorVersion 2\n#define WindowsAzureMobileServicesSdkBuildVersion 3\n\n#endif\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/A/Headers/MSClient.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n#import \"MSError.h\"\n#import \"MSFilter.h\"\n#import \"MSLoginController.h\"\n\n@class MSTable;\n@class MSUser;\n@class MSPush;\n\n#pragma mark * Block Type Definitions\n/// Callback for method with no return other than error.\ntypedef void (^MSCompletionBlock)(NSError *error);\n\n/// Callback for invokeAPI method that expects a JSON result.\ntypedef void (^MSAPIBlock)(id result, NSHTTPURLResponse *response, NSError *error);\n\n/// Callback for the invokeAPI method that can return any media type.\ntypedef void (^MSAPIDataBlock)(NSData *result,\n                               NSHTTPURLResponse *response,\n                               NSError *error);\n\n#pragma  mark * MSClient Public Interface\n\n/// The MSClient class is the starting point for working with a Microsoft Azure\n/// Mobile Service on a client device. An instance of the *MSClient* class is\n/// created with a URL pointing to a Microsoft Azure Mobile Service. The *MSClient*\n/// allows the developer to get MSTable instances, which are used to work with\n/// the data of the Microsoft Azure Mobile Service, as well as login and logout an\n/// end user.\n@interface MSClient : NSObject <NSCopying>\n\n#pragma mark * Public Readonly Properties\n\n/// @name Properties\n/// @{\n\n/// The URL of the Microsoft Azure Mobile Service associated with the client.\n@property (nonatomic, strong, readonly)     NSURL *applicationURL;\n\n/// The application key for the Microsoft Azure Mobile Service associated with\n/// the client if one was provided in the creation of the client and nil\n/// otherwise. If non-nil, the application key will be included in all requests\n/// made to the Microsoft Azure Mobile Service, allowing the client to perform\n/// all actions on the Microsoft Azure Mobile Service that require application-key\n/// level permissions.\n@property (nonatomic, copy, readonly)     NSString *applicationKey;\n\n/// A collection of MSFilter instances to apply to use with the requests and\n/// responses sent and received by the client. The property is readonly and the\n/// array is not-mutable. To apply a filter to a client, use the withFilter:\n/// method.\n@property (nonatomic, strong, readonly)         NSArray *filters;\n\n/// @name Registering and unregistering for push notifications\n\n/// The property to use for registering and unregistering for notifications via *MSPush*.\n@property (nonatomic, strong, readonly)     MSPush *push;\n\n/// @}\n\n#pragma mark * Public ReadWrite Properties\n\n\n/// The currently logged in user. While the currentUser property can be set\n/// directly, the login* and logout methods are more convenient and\n/// recommended for non-testing use.\n@property (nonatomic, strong)               MSUser *currentUser;\n\n/// @}\n\n#pragma  mark * Public Static Constructor Methods\n\n/// @name Initializing the MSClient Object\n/// @{\n\n/// Creates a client with the given URL for the Microsoft Azure Mobile Service.\n+(MSClient *)clientWithApplicationURLString:(NSString *)urlString;\n\n/// Creates a client with the given URL and application key for the Microsoft Azure\n/// Mobile Service.\n+(MSClient *)clientWithApplicationURLString:(NSString *)urlString\n                         applicationKey:(NSString *)key;\n\n/// Old method to create a client with the given URL and application key for the\n/// Microsoft Azure Mobile Service. This has been deprecated. Use\n/// clientWithApplicationURLString:applicationKey:\n/// @deprecated\n+(MSClient *)clientWithApplicationURLString:(NSString *)urlString\n                         withApplicationKey:(NSString *)key __deprecated;\n\n/// Creates a client with the given URL for the Microsoft Azure Mobile Service.\n+(MSClient *)clientWithApplicationURL:(NSURL *)url;\n\n/// Creates a client with the given URL and application key for the Microsoft Azure\n/// Mobile Service.\n+(MSClient *)clientWithApplicationURL:(NSURL *)url\n                       applicationKey:(NSString *)key;\n\n#pragma  mark * Public Initializer Methods\n\n/// Initializes a client with the given URL for the Microsoft Azure Mobile Service.\n-(id)initWithApplicationURL:(NSURL *)url;\n\n/// Initializes a client with the given URL and application key for the Windows\n/// Azure Mobile Service.\n-(id)initWithApplicationURL:(NSURL *)url applicationKey:(NSString *)key;\n\n#pragma mark * Public Filter Methods\n\n/// Creates a clone of the client with the given filter applied to the new client.\n-(MSClient *)clientWithFilter:(id<MSFilter>)filter;\n\n///@}\n\n/// @name Authenticating Users\n/// @{\n\n#pragma mark * Public Login and Logout Methods\n\n/// Logs in the current end user with the given provider by presenting the\n/// MSLoginController with the given controller.\n-(void)loginWithProvider:(NSString *)provider\n              controller:(UIViewController *)controller\n                animated:(BOOL)animated\n              completion:(MSClientLoginBlock)completion;\n\n/// Returns an MSLoginController that can be used to log in the current\n/// end user with the given provider.\n-(MSLoginController *)loginViewControllerWithProvider:(NSString *)provider\n                                 completion:(MSClientLoginBlock)completion;\n\n/// Logs in the current end user with the given provider and the given token for\n/// the provider.\n-(void)loginWithProvider:(NSString *)provider\n                   token:(NSDictionary *)token\n              completion:(MSClientLoginBlock)completion;\n\n/// Logs out the current end user.\n-(void)logout;\n\n/// @}\n\n#pragma mark * Public Table Methods\n\n/// @name Querying Tables\n/// @{\n\n/// Returns an MSTable instance for a table with the given name.\n-(MSTable *)tableWithName:(NSString *)tableName;\n\n/// Old method to return an MSTable instance for a table with the given name.\n/// This has been deprecated. Use tableWithName:\n-(MSTable *)getTable:(NSString *)tableName __deprecated;\n\n/// @}\n\n#pragma mark * Public invokeAPI Methods\n\n/// @name Invoking Custom APIs\n/// @{\n\n/// Invokes a user-defined API of the Mobile Service.  The HTTP request and\n/// response content will be treated as JSON.\n-(void)invokeAPI:(NSString *)APIName\n            body:(id)body\n      HTTPMethod:(NSString *)method\n      parameters:(NSDictionary *)parameters\n         headers:(NSDictionary *)headers\n      completion:(MSAPIBlock)completion;\n\n/// Invokes a user-defined API of the Mobile Service.  The HTTP request and\n/// response content can be of any media type.\n-(void)invokeAPI:(NSString *)APIName\n            data:(NSData *)data\n      HTTPMethod:(NSString *)method\n      parameters:(NSDictionary *)parameters\n         headers:(NSDictionary *)headers\n      completion:(MSAPIDataBlock)completion;\n\n/// @}\n\n\n#pragma mark * Public Connection Methods\n\n\n/// @name Controlling connections to the server\n/// @{\n\n/// Determines where connections made to the mobile service are run. If set, connection related\n/// logic will occur on this queue. Otherwise, the thread that made the call will be used.\n@property (nonatomic, strong) NSOperationQueue *connectionDelegateQueue;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/A/Headers/MSError.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#ifndef WindowsAzureMobileServices_MSError_h\n#define WindowsAzureMobileServices_MSError_h\n\n\n#pragma mark * MSErrorDomain\n\n\n/// The error domain for the Microsoft Azure Mobile Service client framework\nextern NSString *const MSErrorDomain;\n\n\n#pragma mark * UserInfo Request and Response Keys\n\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the request\n/// that was sent to the Microsoft Azure Mobile Service related to the error. Not\n/// all errors will include the request so the userInfo dicitionary may return\n/// nil.\nextern NSString *const MSErrorRequestKey;\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the\n/// response that was returned from the Microsoft Azure Mobile Service related to\n/// the error. Not all errors will include the response so the userInfo\n/// dicitionary may return nil.\nextern NSString *const MSErrorResponseKey;\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the\n/// server item that was returned from the Microsoft Azure Mobile Service related to\n/// the precondition failed error. This will only be present on MSPreconditionFailed\n/// errors.\nextern NSString *const MSErrorServerItemKey;\n\n\n#pragma mark * MSErrorCodes\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// a nil item was used.\n#define MSExpectedItemWithRequest               -1101\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an item without an id was used\n#define MSMissingItemIdWithRequest              -1102\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an invalid item was used.\n#define MSInvalidItemWithRequest                -1103\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// a nil itemId was used.\n#define MSExpectedItemIdWithRequest             -1104\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an invalid itemId was used.\n#define MSInvalidItemIdWithRequest              -1105\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an invalid user-parameter in the query string.\n#define MSInvalidUserParameterWithRequest       -1106\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an item with an id was used with an insert operation.\n#define MSExistingItemIdWithRequest             -1107\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// include an item as expected.\n#define MSExpectedItemWithResponse              -1201\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// include an array of items as expected.\n#define MSExpectedItemsWithResponse             -1202\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// include a total count as expected.\n#define MSExpectedTotalCountWithResponse        -1203\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// have body content as expected.\n#define MSExpectedBodyWithResponse              -1204\n\n/// Indicates that the response from the Microsoft Azure Mobile Service indicated\n/// there was an error but that an error message was not provided.\n#define MSErrorNoMessageErrorCode               -1301\n\n/// Indicates that the response from the Microsoft Azure Mobile Service indicated\n/// there was an error and an error message was provided.\n#define MSErrorMessageErrorCode                 -1302\n\n/// Indicates that the response from the Microsoft Azure Mobile Service indicated\n/// there was an error\n#define MSErrorPreconditionFailed               -1303\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// the *NSPredicate* used in the query could not be translated into a query\n/// string supported by the Microsoft Azure Mobile Service.\n#define MSPredicateNotSupported                 -1400\n\n/// Indicates that the login operation has failed.\n#define MSLoginFailed                           -1501\n\n/// Indicates that the Microsoft Azure Mobile Service returned a login response\n/// with invalid syntax.\n#define MSLoginInvalidResponseSyntax            -1502\n\n/// Indicates that the login operation was canceled.\n#define MSLoginCanceled                         -1503\n\n/// Indicates that the login operation failed because a nil token was used.\n#define MSLoginExpectedToken                    -1504\n\n/// Indicates that the login operation failed because an invalid token was used.\n#define MSLoginInvalidToken                     -1505\n\n/// Indicates that a required parameter for push operation was not provided\n#define MSPushRequiredParameter                 -1600\n\n/// Indicates that local storage is corrupt until register or deleteAllRegistrations are invoked\n#define MSPushLocalStorageCorrupt               -1601\n\n#endif\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/A/Headers/MSFilter.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSError.h\"\n\n\n#pragma mark * Block Type Definitions\n\n\n/// Callback that the filter should invoke once an HTTP response (with or\n/// without data) or an error has been received by the filter.\ntypedef void (^MSFilterResponseBlock)(NSHTTPURLResponse *response, NSData *data, NSError *error);\n\n/// Callback that the filter should invoke to allow the next filter to handle\n/// the given request.\ntypedef void (^MSFilterNextBlock)(NSURLRequest *request,\n                                  MSFilterResponseBlock onResponse);\n\n\n#pragma  mark * MSFilter Public Protocol\n\n\n/// The *MSFilter* protocol allows developers to implement a class that can\n/// inspect and/or replace HTTP request and HTTP response messages being sent\n/// and received by an *MSClient* instance.\n@protocol MSFilter <NSObject>\n\n/// @name Modify the request\n/// @{\n\n/// Allows for the inspection and/or modification of the HTTP request and HTTP response messages\n/// being sent and received by an *MSClient* instance.\n-(void)handleRequest:(NSURLRequest *)request\n                next:(MSFilterNextBlock)next\n            response:(MSFilterResponseBlock)response;\n\n///@}\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/A/Headers/MSLoginController.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <UIKit/UIKit.h>\n\n@class MSClient;\n@class MSUser;\n\n\n#pragma mark * Block Type Definitions\n\n/// Callback logging in an end user. If there was an error or the login was\n/// cancelled, *error* will be non-nil.\ntypedef void (^MSClientLoginBlock)(MSUser *user, NSError *error);\n\n#pragma  mark * MSLoginController Public Interface\n\n\n/// The *MSLoginController* class provides a UIViewController that can be\n/// presented to allow an end user to authenticate with a Microsoft Azure Mobile\n/// Service.\n@interface MSLoginController : UIViewController\n\n#pragma  mark * Public Initializer Methods\n\n///@name Initializing the MSLoginController object\n///@{\n\n/// Initializes an *MSLoginController* instance with the given client, login\n/// provider and completion block.\n-(id)initWithClient:(MSClient *)client\n           provider:(NSString *)provider\n         completion:(MSClientLoginBlock)completion;\n\n///@}\n\n\n#pragma mark * Public Readonly Properties\n\n///@name Properties\n///@{\n\n/// The client associated with this *MSLoginController*.\n@property (nonatomic, strong, readonly)     MSClient *client;\n\n/// The login provider associated with this *MSLoginController*.\n@property (nonatomic, copy,   readonly)     NSString *provider;\n\n/// The *UIActivityIndicatorView* on the *UIToolbar* associated with the\n/// *MSLoginController*. If the toolbar is visible, the actvivity indicator\n/// will become active whenever the end user is navigating to a new URL during\n/// the login flow.\n@property (nonatomic, strong, readonly)     UIActivityIndicatorView *activityIndicator;\n\n/// The *UIToolbar* associated with the *MSLoginController*. The toolbar includes\n/// a cancel button and an activity indicator. The visibility and placement of\n/// the toolbar can be configured using the *showToolbar* and *toolbarPosition*\n/// properties respectively.\n@property (nonatomic, strong, readonly)     UIToolbar *toolbar;\n\n///@}\n\n\n#pragma mark * Public Readwrite Properties\n\n///@name Customizing the Toolbar\n///@{\n\n/// Indicates if the *toolbar* show be displayed. By default, *showToolbar* is\n/// YES.\n@property (nonatomic, readwrite)            BOOL showToolbar;\n\n/// Indicates if the *toolbar* should be positioned at the top or bottom of\n/// the login view.  By default, the *toolbarPosition* is *UIToolbarPositionBottom*.\n@property (nonatomic, readwrite)            UIToolbarPosition toolbarPosition;\n\n///@}\n\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/A/Headers/MSPush.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n\n#pragma  mark * MSClient Public Interface\n\n@interface MSPush : NSObject\n\n#pragma  mark * Public Initializer Methods\n\n///@name Initializing the MSPush Object\n///@{\n\n/// Initialize the *MSPush* instance with given *MSClient*\n- (MSPush *)initWithClient:(MSClient *)client;\n\n/// @}\n\n#pragma  mark * Public Native Registration Methods\n\n/// @name Working with Native Registrations\n/// @{\n\n/// Register for notifications with given deviceToken and tags. deviceToken is required.\n- (void)registerNativeWithDeviceToken:(NSData *)deviceToken\n                                 tags:(NSArray *)tags\n                           completion:(MSCompletionBlock)completion;\n\n/// Unregister for native notififications.\n- (void)unregisterNativeWithCompletion:(MSCompletionBlock)completion;\n\n/// @}\n\n#pragma  mark * Public Template Registration Methods\n\n/// @name Working with Template Registrations\n/// @{\n\n/// Register for template notififications. deviceToken, name and bodyTemplate are required.\n/// See http://go.microsoft.com/fwlink/?LinkId=401137 for furthur details.\n- (void)registerTemplateWithDeviceToken:(NSData *)deviceToken\n                                   name:(NSString *)name\n                       jsonBodyTemplate:(NSString *)bodyTemplate\n                         expiryTemplate:(NSString *)expiryTemplate\n                                   tags:(NSArray *)tags\n                             completion:(MSCompletionBlock)completion;\n\n/// Unregister for tempalte notifications. name is required.\n- (void)unregisterTemplateWithName:(NSString *)name\n                        completion:(MSCompletionBlock)completion;\n\n/// @}\n\n#pragma  mark * Public Unregister All Registration Methods\n\n/// @name Debug utilities--Unregistering All Registrations\n/// @{\n\n/// Unregister for all native and template registrations. deviceToken is required.\n/// NOT RECOMMENDED FOR USE IN PRODUCTION APPLICATON.\n- (void)unregisterAllWithDeviceToken:(NSData *)deviceToken\n                          completion:(MSCompletionBlock)completion;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/A/Headers/MSQuery.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSTable.h\"\n\n\n#pragma mark * MSQuery Public Interface\n\n\n/// The *MSQuery* class represents a query that can be configured and then\n/// executed against a table of a Microsoft Azure Mobile Service. The query is\n/// serialized as a query string in the URL of the request. A query can be\n/// configured and then sent to the Microsoft Azure Mobile Service using the\n/// *readOnSuccess:onError:* method. *MSQuery* instances can be modfied and\n/// reused, but are not threadsafe.\n@interface MSQuery : NSObject\n\n#pragma mark * Public Initializer Methods\n\n///@name Initializing the MSQuery object\n///@{\n\n/// Initializes a *MSQuery* instance with the given table.\n-(id)initWithTable:(MSTable *)table;\n\n/// Returns a new *MSQuery* instance with the given table and the given\n/// predicate is used as the filter clause of the query.\n-(id)initWithTable:(MSTable *)table predicate:(NSPredicate *)predicate;\n\n///@}\n\n///@name Modifying the Query\n///@{\n\n#pragma mark * Public ReadWrite Properties\n\n/// The predicate used as the filter clause of the query.\n@property (nonatomic) NSPredicate *predicate;\n\n/// The maximum number of items to return from the query.\n@property (nonatomic) NSInteger fetchLimit;\n\n/// The offset from the initial item to use when returning items from a query.\n/// Can be used with *fetchLimit* to implement paging.\n@property (nonatomic) NSInteger fetchOffset;\n\n/// The array of NSSortDescriptors used to order the query results\n@property (nonatomic, copy) NSArray *orderBy;\n\n/// Indicates if the Microsoft Azure Mobile Service should also include the total\n/// count of items on the server (not just the count of items returned) with\n/// the query results.\n@property (nonatomic) BOOL includeTotalCount;\n\n/// A dictionary of string key-value pairs that can include user-defined\n/// parameters to use with the query.\n@property (nonatomic, retain) NSDictionary *parameters;\n\n/// The fields or keys of an item that should be included in the results. A\n/// value of \"*\" means all fields should be included. \"*\" is the default value\n/// if no select keys are specified.\n@property (nonatomic, retain) NSArray *selectFields;\n\n#pragma mark * Public OrderBy Methods\n/// Indicates that the query results should be returned in ascending order\n/// based on the given field. *orderByAscending:* and *orderByDescending:* can\n/// each be called multiple times to further specify how the query results\n/// should be ordered.\n-(void)orderByAscending:(NSString *)field;\n\n/// Indicates that the query results should be returned in descending order\n/// based on the given field. *orderByAscending:* and *orderByDescending:* can\n/// each be called multiple times to further specify how the query results\n/// should be ordered.\n-(void)orderByDescending:(NSString *)field;\n\n\n///@}\n\n\n\n#pragma mark * Public Read Methods\n///@name Executing the query\n///@{\n\n/// Executes the query by sending a request to the Microsoft Azure Mobile Service.\n-(void)readWithCompletion:(MSReadQueryBlock)completion;\n\n///@}\n\n///@name Properties\n///@{\n\n#pragma mark * Public QueryString Methods\n\n/// Generates a query string for current state of the *MSQuery* instance or an\n/// error if the query string could not be generated.\n-(NSString *)queryStringOrError:(NSError **)error;\n\n\n#pragma mark * Public Readonly Properties\n\n/// The table associated with this query.\n@property (nonatomic, strong, readonly)         MSTable *table;\n\n///@}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/A/Headers/MSTable.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n\n@class MSQuery;\n\n\n#pragma mark * Block Type Definitions\n\n\n/// Callback for updates, inserts or readWithId requests. If there was an\n/// error, the *error* will be non-nil.\ntypedef void (^MSItemBlock)(NSDictionary *item, NSError *error);\n\n/// Callback for deletes. If there was an error, the *error* will be non-nil.\ntypedef void (^MSDeleteBlock)(id itemId, NSError *error);\n\n/// Callback for reads. If there was an error, the *error* will be non-nil. If\n/// there was not an error, then the *items* array will always be non-nil\n/// but may be empty if the query returned no results. If the query included a\n/// request for the total count of items on the server (not just those returned\n/// in *items* array), the *totalCount* will have this value; otherwise\n/// *totalCount* will be -1.\ntypedef void (^MSReadQueryBlock)(NSArray *items,\n                                 NSInteger totalCount,\n                                 NSError *error);\n\ntypedef NS_OPTIONS(NSUInteger, MSSystemProperties) {\n    MSSystemPropertyNone        = 0,\n    MSSystemPropertyCreatedAt   = 1 << 0,\n    MSSystemPropertyUpdatedAt   = 1 << 1,\n    MSSystemPropertyVersion     = 1 << 2,\n    MSSystemPropertyAll         = 0xFFFF\n};\n\nextern NSString *const MSSystemColumnCreatedAt;\nextern NSString *const MSSystemColumnUpdatedAt;\nextern NSString *const MSSystemColumnVersion;\n\n#pragma mark * MSTable Public Interface\n\n\n/// The *MSTable* class represents a table of a Microsoft Azure Mobile Service.\n/// Items can be inserted, updated, deleted and read from the table. The table\n/// can also be queried to retrieve an array of items that meet the given query\n/// conditions. All table operations result in a request to the Microsoft Azure\n/// Mobile Service to perform the given operation.\n@interface MSTable : NSObject\n\n\n#pragma mark * Public Readonly Properties\n\n///@name Properties\n///@{\n\n/// The name of this table.\n@property (nonatomic, copy, readonly)           NSString *name;\n\n/// The client associated with this table.\n@property (nonatomic, strong, readonly)         MSClient *client;\n\n@property (nonatomic) MSSystemProperties systemProperties;\n///@}\n\n#pragma mark * Public Initializers\n\n///@name Initializing the MSTable Object\n///@{\n\n/// Initializes an *MSTable* instance with the given name and client.\n-(id)initWithName:(NSString *)tableName client:(MSClient *)client;\n\n///@}\n\n#pragma mark * Public Insert, Update and Delete Methods\n\n///@name Modifying Items\n///@{\n\n/// Sends a request to the Microsoft Azure Mobile Service to insert the given\n/// item into the table. The item must not have an id.\n-(void)insert:(NSDictionary *)item completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to insert the given\n/// item into the table. Addtional user-defined parameters are sent in the\n/// request query string. The item must not have an id.\n-(void)insert:(NSDictionary *)item\n   parameters:(NSDictionary *)parameters\n   completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to update the given\n/// item in the table. The item must have an id.\n-(void)update:(NSDictionary *)item completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to update the given\n/// item in the table. Addtional user-defined parameters are sent in the\n/// request query string. The item must have an id.\n-(void)update:(NSDictionary *)item\n   parameters:(NSDictionary *)parameters\n   completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the given\n/// item from the table. The item must have an id.\n-(void)delete:(NSDictionary *)item completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the given\n/// item from the table. Addtional user-defined parameters are sent in the\n/// request query string. The item must have an id.\n-(void)delete:(NSDictionary *)item\n   parameters:(NSDictionary *)parameters\n   completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the item\n/// with the given id in from table.\n-(void)deleteWithId:(id)itemId completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the item\n/// with the given id in from table. Addtional user-defined parameters are\n/// sent in the request query string.\n-(void)deleteWithId:(id)itemId\n         parameters:(NSDictionary *)parameters\n         completion:(MSDeleteBlock)completion;\n\n///@}\n\n#pragma mark * Public Read Methods\n\n///@name Retreiving Items\n///@{\n\n/// Sends a request to the Microsoft Azure Mobile Service to return the item\n/// with the given id from the table.\n-(void)readWithId:(id)itemId completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return the item\n/// with the given id from the table. Addtional user-defined parameters are\n/// sent in the request query string.\n-(void)readWithId:(id)itemId\n       parameters:(NSDictionary *)parameters\n       completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// fromm the table that meet the conditions of the given query.\n-(void)readWithQueryString:(NSString *)queryString\n                completion:(MSReadQueryBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// from the table. The Microsoft Azure Mobile Service will apply a default\n/// limit to the number of items returned.\n-(void)readWithCompletion:(MSReadQueryBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// from the table that meet the conditions of the given predicate.\n-(void)readWithPredicate:(NSPredicate *) predicate\n      completion:(MSReadQueryBlock)completion;\n\n#pragma mark * Public Query Constructor Methods\n\n\n/// Returns an *MSQuery* instance associated with the table that can be\n/// configured and then executed to retrieve items from the table. An *MSQuery*\n/// instance provides more flexibilty when querying a table than the table\n/// read* methods.\n-(MSQuery *)query;\n\n/// Returns an *MSQuery* instance associated with the table that uses\n/// the given predicate. An *MSQuery* instance provides more flexibilty when\n/// querying a table than the table read* methods.\n-(MSQuery *)queryWithPredicate:(NSPredicate *)predicate;\n\n///@}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/A/Headers/MSUser.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n\n#pragma mark * MSUser Public Interface\n\n\n/// The *MSUser* class represents an end user that can login to a Microsoft Azure\n/// Mobile Service on a client device.\n@interface MSUser : NSObject <NSCopying>\n\n#pragma mark * Public Initializers\n\n///@name Initializing the MSUser Object\n///@{\n\n/// Initializes an *MSUser* instance with the given user id.\n-(id)initWithUserId:(NSString *)userId;\n\n///@}\n\n\n///@name Retrieving User Data\n///@{\n\n#pragma mark * Public Readonly Properties\n\n\n/// The user id of the end user.\n@property (nonatomic, copy, readonly)   NSString *userId;\n\n\n#pragma mark * Public Readwrite Properties\n\n/// A Microsoft Azure Mobile Services authentication token for the logged in\n/// end user. If non-nil, the authentication token will be included in all\n/// requests made to the Microsoft Azure Mobile Service, allowing the client to\n/// perform all actions on the Microsoft Azure Mobile Service that require\n/// authenticated-user level permissions.\n@property (nonatomic, copy)         NSString *mobileServiceAuthenticationToken;\n\n///@}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/A/Headers/WindowsAzureMobileServices.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#ifndef WindowsAzureMobileServices_WindowsAzureMobileServices_h\n#define WindowsAzureMobileServices_WindowsAzureMobileServices_h\n\n#import \"MSClient.h\"\n#import \"MSTable.h\"\n#import \"MSQuery.h\"\n#import \"MSUser.h\"\n#import \"MSFilter.h\"\n#import \"MSError.h\"\n#import \"MSLoginController.h\"\n#import \"MSPush.h\"\n\n#define WindowsAzureMobileServicesSdkMajorVersion 1\n#define WindowsAzureMobileServicesSdkMinorVersion 2\n#define WindowsAzureMobileServicesSdkBuildVersion 3\n\n#endif\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/Current/Headers/MSClient.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n#import \"MSError.h\"\n#import \"MSFilter.h\"\n#import \"MSLoginController.h\"\n\n@class MSTable;\n@class MSUser;\n@class MSPush;\n\n#pragma mark * Block Type Definitions\n/// Callback for method with no return other than error.\ntypedef void (^MSCompletionBlock)(NSError *error);\n\n/// Callback for invokeAPI method that expects a JSON result.\ntypedef void (^MSAPIBlock)(id result, NSHTTPURLResponse *response, NSError *error);\n\n/// Callback for the invokeAPI method that can return any media type.\ntypedef void (^MSAPIDataBlock)(NSData *result,\n                               NSHTTPURLResponse *response,\n                               NSError *error);\n\n#pragma  mark * MSClient Public Interface\n\n/// The MSClient class is the starting point for working with a Microsoft Azure\n/// Mobile Service on a client device. An instance of the *MSClient* class is\n/// created with a URL pointing to a Microsoft Azure Mobile Service. The *MSClient*\n/// allows the developer to get MSTable instances, which are used to work with\n/// the data of the Microsoft Azure Mobile Service, as well as login and logout an\n/// end user.\n@interface MSClient : NSObject <NSCopying>\n\n#pragma mark * Public Readonly Properties\n\n/// @name Properties\n/// @{\n\n/// The URL of the Microsoft Azure Mobile Service associated with the client.\n@property (nonatomic, strong, readonly)     NSURL *applicationURL;\n\n/// The application key for the Microsoft Azure Mobile Service associated with\n/// the client if one was provided in the creation of the client and nil\n/// otherwise. If non-nil, the application key will be included in all requests\n/// made to the Microsoft Azure Mobile Service, allowing the client to perform\n/// all actions on the Microsoft Azure Mobile Service that require application-key\n/// level permissions.\n@property (nonatomic, copy, readonly)     NSString *applicationKey;\n\n/// A collection of MSFilter instances to apply to use with the requests and\n/// responses sent and received by the client. The property is readonly and the\n/// array is not-mutable. To apply a filter to a client, use the withFilter:\n/// method.\n@property (nonatomic, strong, readonly)         NSArray *filters;\n\n/// @name Registering and unregistering for push notifications\n\n/// The property to use for registering and unregistering for notifications via *MSPush*.\n@property (nonatomic, strong, readonly)     MSPush *push;\n\n/// @}\n\n#pragma mark * Public ReadWrite Properties\n\n\n/// The currently logged in user. While the currentUser property can be set\n/// directly, the login* and logout methods are more convenient and\n/// recommended for non-testing use.\n@property (nonatomic, strong)               MSUser *currentUser;\n\n/// @}\n\n#pragma  mark * Public Static Constructor Methods\n\n/// @name Initializing the MSClient Object\n/// @{\n\n/// Creates a client with the given URL for the Microsoft Azure Mobile Service.\n+(MSClient *)clientWithApplicationURLString:(NSString *)urlString;\n\n/// Creates a client with the given URL and application key for the Microsoft Azure\n/// Mobile Service.\n+(MSClient *)clientWithApplicationURLString:(NSString *)urlString\n                         applicationKey:(NSString *)key;\n\n/// Old method to create a client with the given URL and application key for the\n/// Microsoft Azure Mobile Service. This has been deprecated. Use\n/// clientWithApplicationURLString:applicationKey:\n/// @deprecated\n+(MSClient *)clientWithApplicationURLString:(NSString *)urlString\n                         withApplicationKey:(NSString *)key __deprecated;\n\n/// Creates a client with the given URL for the Microsoft Azure Mobile Service.\n+(MSClient *)clientWithApplicationURL:(NSURL *)url;\n\n/// Creates a client with the given URL and application key for the Microsoft Azure\n/// Mobile Service.\n+(MSClient *)clientWithApplicationURL:(NSURL *)url\n                       applicationKey:(NSString *)key;\n\n#pragma  mark * Public Initializer Methods\n\n/// Initializes a client with the given URL for the Microsoft Azure Mobile Service.\n-(id)initWithApplicationURL:(NSURL *)url;\n\n/// Initializes a client with the given URL and application key for the Windows\n/// Azure Mobile Service.\n-(id)initWithApplicationURL:(NSURL *)url applicationKey:(NSString *)key;\n\n#pragma mark * Public Filter Methods\n\n/// Creates a clone of the client with the given filter applied to the new client.\n-(MSClient *)clientWithFilter:(id<MSFilter>)filter;\n\n///@}\n\n/// @name Authenticating Users\n/// @{\n\n#pragma mark * Public Login and Logout Methods\n\n/// Logs in the current end user with the given provider by presenting the\n/// MSLoginController with the given controller.\n-(void)loginWithProvider:(NSString *)provider\n              controller:(UIViewController *)controller\n                animated:(BOOL)animated\n              completion:(MSClientLoginBlock)completion;\n\n/// Returns an MSLoginController that can be used to log in the current\n/// end user with the given provider.\n-(MSLoginController *)loginViewControllerWithProvider:(NSString *)provider\n                                 completion:(MSClientLoginBlock)completion;\n\n/// Logs in the current end user with the given provider and the given token for\n/// the provider.\n-(void)loginWithProvider:(NSString *)provider\n                   token:(NSDictionary *)token\n              completion:(MSClientLoginBlock)completion;\n\n/// Logs out the current end user.\n-(void)logout;\n\n/// @}\n\n#pragma mark * Public Table Methods\n\n/// @name Querying Tables\n/// @{\n\n/// Returns an MSTable instance for a table with the given name.\n-(MSTable *)tableWithName:(NSString *)tableName;\n\n/// Old method to return an MSTable instance for a table with the given name.\n/// This has been deprecated. Use tableWithName:\n-(MSTable *)getTable:(NSString *)tableName __deprecated;\n\n/// @}\n\n#pragma mark * Public invokeAPI Methods\n\n/// @name Invoking Custom APIs\n/// @{\n\n/// Invokes a user-defined API of the Mobile Service.  The HTTP request and\n/// response content will be treated as JSON.\n-(void)invokeAPI:(NSString *)APIName\n            body:(id)body\n      HTTPMethod:(NSString *)method\n      parameters:(NSDictionary *)parameters\n         headers:(NSDictionary *)headers\n      completion:(MSAPIBlock)completion;\n\n/// Invokes a user-defined API of the Mobile Service.  The HTTP request and\n/// response content can be of any media type.\n-(void)invokeAPI:(NSString *)APIName\n            data:(NSData *)data\n      HTTPMethod:(NSString *)method\n      parameters:(NSDictionary *)parameters\n         headers:(NSDictionary *)headers\n      completion:(MSAPIDataBlock)completion;\n\n/// @}\n\n\n#pragma mark * Public Connection Methods\n\n\n/// @name Controlling connections to the server\n/// @{\n\n/// Determines where connections made to the mobile service are run. If set, connection related\n/// logic will occur on this queue. Otherwise, the thread that made the call will be used.\n@property (nonatomic, strong) NSOperationQueue *connectionDelegateQueue;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/Current/Headers/MSError.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#ifndef WindowsAzureMobileServices_MSError_h\n#define WindowsAzureMobileServices_MSError_h\n\n\n#pragma mark * MSErrorDomain\n\n\n/// The error domain for the Microsoft Azure Mobile Service client framework\nextern NSString *const MSErrorDomain;\n\n\n#pragma mark * UserInfo Request and Response Keys\n\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the request\n/// that was sent to the Microsoft Azure Mobile Service related to the error. Not\n/// all errors will include the request so the userInfo dicitionary may return\n/// nil.\nextern NSString *const MSErrorRequestKey;\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the\n/// response that was returned from the Microsoft Azure Mobile Service related to\n/// the error. Not all errors will include the response so the userInfo\n/// dicitionary may return nil.\nextern NSString *const MSErrorResponseKey;\n\n/// The key to use with the *NSError* userInfo dictionary to retrieve the\n/// server item that was returned from the Microsoft Azure Mobile Service related to\n/// the precondition failed error. This will only be present on MSPreconditionFailed\n/// errors.\nextern NSString *const MSErrorServerItemKey;\n\n\n#pragma mark * MSErrorCodes\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// a nil item was used.\n#define MSExpectedItemWithRequest               -1101\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an item without an id was used\n#define MSMissingItemIdWithRequest              -1102\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an invalid item was used.\n#define MSInvalidItemWithRequest                -1103\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// a nil itemId was used.\n#define MSExpectedItemIdWithRequest             -1104\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an invalid itemId was used.\n#define MSInvalidItemIdWithRequest              -1105\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an invalid user-parameter in the query string.\n#define MSInvalidUserParameterWithRequest       -1106\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// an item with an id was used with an insert operation.\n#define MSExistingItemIdWithRequest             -1107\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// include an item as expected.\n#define MSExpectedItemWithResponse              -1201\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// include an array of items as expected.\n#define MSExpectedItemsWithResponse             -1202\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// include a total count as expected.\n#define MSExpectedTotalCountWithResponse        -1203\n\n/// Indicates that the response from the Microsoft Azure Mobile Service did not\n/// have body content as expected.\n#define MSExpectedBodyWithResponse              -1204\n\n/// Indicates that the response from the Microsoft Azure Mobile Service indicated\n/// there was an error but that an error message was not provided.\n#define MSErrorNoMessageErrorCode               -1301\n\n/// Indicates that the response from the Microsoft Azure Mobile Service indicated\n/// there was an error and an error message was provided.\n#define MSErrorMessageErrorCode                 -1302\n\n/// Indicates that the response from the Microsoft Azure Mobile Service indicated\n/// there was an error\n#define MSErrorPreconditionFailed               -1303\n\n/// Indicates that a request to the Microsoft Azure Mobile Service failed because\n/// the *NSPredicate* used in the query could not be translated into a query\n/// string supported by the Microsoft Azure Mobile Service.\n#define MSPredicateNotSupported                 -1400\n\n/// Indicates that the login operation has failed.\n#define MSLoginFailed                           -1501\n\n/// Indicates that the Microsoft Azure Mobile Service returned a login response\n/// with invalid syntax.\n#define MSLoginInvalidResponseSyntax            -1502\n\n/// Indicates that the login operation was canceled.\n#define MSLoginCanceled                         -1503\n\n/// Indicates that the login operation failed because a nil token was used.\n#define MSLoginExpectedToken                    -1504\n\n/// Indicates that the login operation failed because an invalid token was used.\n#define MSLoginInvalidToken                     -1505\n\n/// Indicates that a required parameter for push operation was not provided\n#define MSPushRequiredParameter                 -1600\n\n/// Indicates that local storage is corrupt until register or deleteAllRegistrations are invoked\n#define MSPushLocalStorageCorrupt               -1601\n\n#endif\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/Current/Headers/MSFilter.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSError.h\"\n\n\n#pragma mark * Block Type Definitions\n\n\n/// Callback that the filter should invoke once an HTTP response (with or\n/// without data) or an error has been received by the filter.\ntypedef void (^MSFilterResponseBlock)(NSHTTPURLResponse *response, NSData *data, NSError *error);\n\n/// Callback that the filter should invoke to allow the next filter to handle\n/// the given request.\ntypedef void (^MSFilterNextBlock)(NSURLRequest *request,\n                                  MSFilterResponseBlock onResponse);\n\n\n#pragma  mark * MSFilter Public Protocol\n\n\n/// The *MSFilter* protocol allows developers to implement a class that can\n/// inspect and/or replace HTTP request and HTTP response messages being sent\n/// and received by an *MSClient* instance.\n@protocol MSFilter <NSObject>\n\n/// @name Modify the request\n/// @{\n\n/// Allows for the inspection and/or modification of the HTTP request and HTTP response messages\n/// being sent and received by an *MSClient* instance.\n-(void)handleRequest:(NSURLRequest *)request\n                next:(MSFilterNextBlock)next\n            response:(MSFilterResponseBlock)response;\n\n///@}\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/Current/Headers/MSLoginController.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <UIKit/UIKit.h>\n\n@class MSClient;\n@class MSUser;\n\n\n#pragma mark * Block Type Definitions\n\n/// Callback logging in an end user. If there was an error or the login was\n/// cancelled, *error* will be non-nil.\ntypedef void (^MSClientLoginBlock)(MSUser *user, NSError *error);\n\n#pragma  mark * MSLoginController Public Interface\n\n\n/// The *MSLoginController* class provides a UIViewController that can be\n/// presented to allow an end user to authenticate with a Microsoft Azure Mobile\n/// Service.\n@interface MSLoginController : UIViewController\n\n#pragma  mark * Public Initializer Methods\n\n///@name Initializing the MSLoginController object\n///@{\n\n/// Initializes an *MSLoginController* instance with the given client, login\n/// provider and completion block.\n-(id)initWithClient:(MSClient *)client\n           provider:(NSString *)provider\n         completion:(MSClientLoginBlock)completion;\n\n///@}\n\n\n#pragma mark * Public Readonly Properties\n\n///@name Properties\n///@{\n\n/// The client associated with this *MSLoginController*.\n@property (nonatomic, strong, readonly)     MSClient *client;\n\n/// The login provider associated with this *MSLoginController*.\n@property (nonatomic, copy,   readonly)     NSString *provider;\n\n/// The *UIActivityIndicatorView* on the *UIToolbar* associated with the\n/// *MSLoginController*. If the toolbar is visible, the actvivity indicator\n/// will become active whenever the end user is navigating to a new URL during\n/// the login flow.\n@property (nonatomic, strong, readonly)     UIActivityIndicatorView *activityIndicator;\n\n/// The *UIToolbar* associated with the *MSLoginController*. The toolbar includes\n/// a cancel button and an activity indicator. The visibility and placement of\n/// the toolbar can be configured using the *showToolbar* and *toolbarPosition*\n/// properties respectively.\n@property (nonatomic, strong, readonly)     UIToolbar *toolbar;\n\n///@}\n\n\n#pragma mark * Public Readwrite Properties\n\n///@name Customizing the Toolbar\n///@{\n\n/// Indicates if the *toolbar* show be displayed. By default, *showToolbar* is\n/// YES.\n@property (nonatomic, readwrite)            BOOL showToolbar;\n\n/// Indicates if the *toolbar* should be positioned at the top or bottom of\n/// the login view.  By default, the *toolbarPosition* is *UIToolbarPositionBottom*.\n@property (nonatomic, readwrite)            UIToolbarPosition toolbarPosition;\n\n///@}\n\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/Current/Headers/MSPush.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n\n#pragma  mark * MSClient Public Interface\n\n@interface MSPush : NSObject\n\n#pragma  mark * Public Initializer Methods\n\n///@name Initializing the MSPush Object\n///@{\n\n/// Initialize the *MSPush* instance with given *MSClient*\n- (MSPush *)initWithClient:(MSClient *)client;\n\n/// @}\n\n#pragma  mark * Public Native Registration Methods\n\n/// @name Working with Native Registrations\n/// @{\n\n/// Register for notifications with given deviceToken and tags. deviceToken is required.\n- (void)registerNativeWithDeviceToken:(NSData *)deviceToken\n                                 tags:(NSArray *)tags\n                           completion:(MSCompletionBlock)completion;\n\n/// Unregister for native notififications.\n- (void)unregisterNativeWithCompletion:(MSCompletionBlock)completion;\n\n/// @}\n\n#pragma  mark * Public Template Registration Methods\n\n/// @name Working with Template Registrations\n/// @{\n\n/// Register for template notififications. deviceToken, name and bodyTemplate are required.\n/// See http://go.microsoft.com/fwlink/?LinkId=401137 for furthur details.\n- (void)registerTemplateWithDeviceToken:(NSData *)deviceToken\n                                   name:(NSString *)name\n                       jsonBodyTemplate:(NSString *)bodyTemplate\n                         expiryTemplate:(NSString *)expiryTemplate\n                                   tags:(NSArray *)tags\n                             completion:(MSCompletionBlock)completion;\n\n/// Unregister for tempalte notifications. name is required.\n- (void)unregisterTemplateWithName:(NSString *)name\n                        completion:(MSCompletionBlock)completion;\n\n/// @}\n\n#pragma  mark * Public Unregister All Registration Methods\n\n/// @name Debug utilities--Unregistering All Registrations\n/// @{\n\n/// Unregister for all native and template registrations. deviceToken is required.\n/// NOT RECOMMENDED FOR USE IN PRODUCTION APPLICATON.\n- (void)unregisterAllWithDeviceToken:(NSData *)deviceToken\n                          completion:(MSCompletionBlock)completion;\n\n/// @}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/Current/Headers/MSQuery.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSTable.h\"\n\n\n#pragma mark * MSQuery Public Interface\n\n\n/// The *MSQuery* class represents a query that can be configured and then\n/// executed against a table of a Microsoft Azure Mobile Service. The query is\n/// serialized as a query string in the URL of the request. A query can be\n/// configured and then sent to the Microsoft Azure Mobile Service using the\n/// *readOnSuccess:onError:* method. *MSQuery* instances can be modfied and\n/// reused, but are not threadsafe.\n@interface MSQuery : NSObject\n\n#pragma mark * Public Initializer Methods\n\n///@name Initializing the MSQuery object\n///@{\n\n/// Initializes a *MSQuery* instance with the given table.\n-(id)initWithTable:(MSTable *)table;\n\n/// Returns a new *MSQuery* instance with the given table and the given\n/// predicate is used as the filter clause of the query.\n-(id)initWithTable:(MSTable *)table predicate:(NSPredicate *)predicate;\n\n///@}\n\n///@name Modifying the Query\n///@{\n\n#pragma mark * Public ReadWrite Properties\n\n/// The predicate used as the filter clause of the query.\n@property (nonatomic) NSPredicate *predicate;\n\n/// The maximum number of items to return from the query.\n@property (nonatomic) NSInteger fetchLimit;\n\n/// The offset from the initial item to use when returning items from a query.\n/// Can be used with *fetchLimit* to implement paging.\n@property (nonatomic) NSInteger fetchOffset;\n\n/// The array of NSSortDescriptors used to order the query results\n@property (nonatomic, copy) NSArray *orderBy;\n\n/// Indicates if the Microsoft Azure Mobile Service should also include the total\n/// count of items on the server (not just the count of items returned) with\n/// the query results.\n@property (nonatomic) BOOL includeTotalCount;\n\n/// A dictionary of string key-value pairs that can include user-defined\n/// parameters to use with the query.\n@property (nonatomic, retain) NSDictionary *parameters;\n\n/// The fields or keys of an item that should be included in the results. A\n/// value of \"*\" means all fields should be included. \"*\" is the default value\n/// if no select keys are specified.\n@property (nonatomic, retain) NSArray *selectFields;\n\n#pragma mark * Public OrderBy Methods\n/// Indicates that the query results should be returned in ascending order\n/// based on the given field. *orderByAscending:* and *orderByDescending:* can\n/// each be called multiple times to further specify how the query results\n/// should be ordered.\n-(void)orderByAscending:(NSString *)field;\n\n/// Indicates that the query results should be returned in descending order\n/// based on the given field. *orderByAscending:* and *orderByDescending:* can\n/// each be called multiple times to further specify how the query results\n/// should be ordered.\n-(void)orderByDescending:(NSString *)field;\n\n\n///@}\n\n\n\n#pragma mark * Public Read Methods\n///@name Executing the query\n///@{\n\n/// Executes the query by sending a request to the Microsoft Azure Mobile Service.\n-(void)readWithCompletion:(MSReadQueryBlock)completion;\n\n///@}\n\n///@name Properties\n///@{\n\n#pragma mark * Public QueryString Methods\n\n/// Generates a query string for current state of the *MSQuery* instance or an\n/// error if the query string could not be generated.\n-(NSString *)queryStringOrError:(NSError **)error;\n\n\n#pragma mark * Public Readonly Properties\n\n/// The table associated with this query.\n@property (nonatomic, strong, readonly)         MSTable *table;\n\n///@}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/Current/Headers/MSTable.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"MSClient.h\"\n\n@class MSQuery;\n\n\n#pragma mark * Block Type Definitions\n\n\n/// Callback for updates, inserts or readWithId requests. If there was an\n/// error, the *error* will be non-nil.\ntypedef void (^MSItemBlock)(NSDictionary *item, NSError *error);\n\n/// Callback for deletes. If there was an error, the *error* will be non-nil.\ntypedef void (^MSDeleteBlock)(id itemId, NSError *error);\n\n/// Callback for reads. If there was an error, the *error* will be non-nil. If\n/// there was not an error, then the *items* array will always be non-nil\n/// but may be empty if the query returned no results. If the query included a\n/// request for the total count of items on the server (not just those returned\n/// in *items* array), the *totalCount* will have this value; otherwise\n/// *totalCount* will be -1.\ntypedef void (^MSReadQueryBlock)(NSArray *items,\n                                 NSInteger totalCount,\n                                 NSError *error);\n\ntypedef NS_OPTIONS(NSUInteger, MSSystemProperties) {\n    MSSystemPropertyNone        = 0,\n    MSSystemPropertyCreatedAt   = 1 << 0,\n    MSSystemPropertyUpdatedAt   = 1 << 1,\n    MSSystemPropertyVersion     = 1 << 2,\n    MSSystemPropertyAll         = 0xFFFF\n};\n\nextern NSString *const MSSystemColumnCreatedAt;\nextern NSString *const MSSystemColumnUpdatedAt;\nextern NSString *const MSSystemColumnVersion;\n\n#pragma mark * MSTable Public Interface\n\n\n/// The *MSTable* class represents a table of a Microsoft Azure Mobile Service.\n/// Items can be inserted, updated, deleted and read from the table. The table\n/// can also be queried to retrieve an array of items that meet the given query\n/// conditions. All table operations result in a request to the Microsoft Azure\n/// Mobile Service to perform the given operation.\n@interface MSTable : NSObject\n\n\n#pragma mark * Public Readonly Properties\n\n///@name Properties\n///@{\n\n/// The name of this table.\n@property (nonatomic, copy, readonly)           NSString *name;\n\n/// The client associated with this table.\n@property (nonatomic, strong, readonly)         MSClient *client;\n\n@property (nonatomic) MSSystemProperties systemProperties;\n///@}\n\n#pragma mark * Public Initializers\n\n///@name Initializing the MSTable Object\n///@{\n\n/// Initializes an *MSTable* instance with the given name and client.\n-(id)initWithName:(NSString *)tableName client:(MSClient *)client;\n\n///@}\n\n#pragma mark * Public Insert, Update and Delete Methods\n\n///@name Modifying Items\n///@{\n\n/// Sends a request to the Microsoft Azure Mobile Service to insert the given\n/// item into the table. The item must not have an id.\n-(void)insert:(NSDictionary *)item completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to insert the given\n/// item into the table. Addtional user-defined parameters are sent in the\n/// request query string. The item must not have an id.\n-(void)insert:(NSDictionary *)item\n   parameters:(NSDictionary *)parameters\n   completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to update the given\n/// item in the table. The item must have an id.\n-(void)update:(NSDictionary *)item completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to update the given\n/// item in the table. Addtional user-defined parameters are sent in the\n/// request query string. The item must have an id.\n-(void)update:(NSDictionary *)item\n   parameters:(NSDictionary *)parameters\n   completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the given\n/// item from the table. The item must have an id.\n-(void)delete:(NSDictionary *)item completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the given\n/// item from the table. Addtional user-defined parameters are sent in the\n/// request query string. The item must have an id.\n-(void)delete:(NSDictionary *)item\n   parameters:(NSDictionary *)parameters\n   completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the item\n/// with the given id in from table.\n-(void)deleteWithId:(id)itemId completion:(MSDeleteBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to delete the item\n/// with the given id in from table. Addtional user-defined parameters are\n/// sent in the request query string.\n-(void)deleteWithId:(id)itemId\n         parameters:(NSDictionary *)parameters\n         completion:(MSDeleteBlock)completion;\n\n///@}\n\n#pragma mark * Public Read Methods\n\n///@name Retreiving Items\n///@{\n\n/// Sends a request to the Microsoft Azure Mobile Service to return the item\n/// with the given id from the table.\n-(void)readWithId:(id)itemId completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return the item\n/// with the given id from the table. Addtional user-defined parameters are\n/// sent in the request query string.\n-(void)readWithId:(id)itemId\n       parameters:(NSDictionary *)parameters\n       completion:(MSItemBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// fromm the table that meet the conditions of the given query.\n-(void)readWithQueryString:(NSString *)queryString\n                completion:(MSReadQueryBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// from the table. The Microsoft Azure Mobile Service will apply a default\n/// limit to the number of items returned.\n-(void)readWithCompletion:(MSReadQueryBlock)completion;\n\n/// Sends a request to the Microsoft Azure Mobile Service to return all items\n/// from the table that meet the conditions of the given predicate.\n-(void)readWithPredicate:(NSPredicate *) predicate\n      completion:(MSReadQueryBlock)completion;\n\n#pragma mark * Public Query Constructor Methods\n\n\n/// Returns an *MSQuery* instance associated with the table that can be\n/// configured and then executed to retrieve items from the table. An *MSQuery*\n/// instance provides more flexibilty when querying a table than the table\n/// read* methods.\n-(MSQuery *)query;\n\n/// Returns an *MSQuery* instance associated with the table that uses\n/// the given predicate. An *MSQuery* instance provides more flexibilty when\n/// querying a table than the table read* methods.\n-(MSQuery *)queryWithPredicate:(NSPredicate *)predicate;\n\n///@}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/Current/Headers/MSUser.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n\n#pragma mark * MSUser Public Interface\n\n\n/// The *MSUser* class represents an end user that can login to a Microsoft Azure\n/// Mobile Service on a client device.\n@interface MSUser : NSObject <NSCopying>\n\n#pragma mark * Public Initializers\n\n///@name Initializing the MSUser Object\n///@{\n\n/// Initializes an *MSUser* instance with the given user id.\n-(id)initWithUserId:(NSString *)userId;\n\n///@}\n\n\n///@name Retrieving User Data\n///@{\n\n#pragma mark * Public Readonly Properties\n\n\n/// The user id of the end user.\n@property (nonatomic, copy, readonly)   NSString *userId;\n\n\n#pragma mark * Public Readwrite Properties\n\n/// A Microsoft Azure Mobile Services authentication token for the logged in\n/// end user. If non-nil, the authentication token will be included in all\n/// requests made to the Microsoft Azure Mobile Service, allowing the client to\n/// perform all actions on the Microsoft Azure Mobile Service that require\n/// authenticated-user level permissions.\n@property (nonatomic, copy)         NSString *mobileServiceAuthenticationToken;\n\n///@}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/Versions/Current/Headers/WindowsAzureMobileServices.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#ifndef WindowsAzureMobileServices_WindowsAzureMobileServices_h\n#define WindowsAzureMobileServices_WindowsAzureMobileServices_h\n\n#import \"MSClient.h\"\n#import \"MSTable.h\"\n#import \"MSQuery.h\"\n#import \"MSUser.h\"\n#import \"MSFilter.h\"\n#import \"MSError.h\"\n#import \"MSLoginController.h\"\n#import \"MSPush.h\"\n\n#define WindowsAzureMobileServicesSdkMajorVersion 1\n#define WindowsAzureMobileServicesSdkMinorVersion 2\n#define WindowsAzureMobileServicesSdkBuildVersion 3\n\n#endif\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/WindowsAzureMobileServices.framework/license.rtf",
    "content": "{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1\\adeff39\\deff0\\stshfdbch11\\stshfloch0\\stshfhich0\\stshfbi0\\deflang1033\\deflangfe1033\\themelang1033\\themelangfe2052\\themelangcs1025{\\fonttbl{\\f0\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times};}\n{\\f2\\fbidi \\fmodern\\fcharset0\\fprq1{\\*\\panose 02070309020205020404}Courier New{\\*\\falt Arial};}{\\f3\\fbidi \\froman\\fcharset2\\fprq2{\\*\\panose 05050102010706020507}Symbol{\\*\\falt Bookshelf Symbol 3};}\n{\\f10\\fbidi \\fnil\\fcharset2\\fprq2{\\*\\panose 05000000000000000000}Wingdings{\\*\\falt Symbol};}{\\f11\\fbidi \\fmodern\\fcharset128\\fprq1{\\*\\panose 02020609040205080304}MS Mincho{\\*\\falt ?l?r ??\\'81\\'66c};}\n{\\f13\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 02010600030101010101}SimSun{\\*\\falt ????????\\'a8\\'ac????};}{\\f34\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02040503050406030204}Cambria Math{\\*\\falt Calisto MT};}\n{\\f39\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604030504040204}Tahoma{\\*\\falt ?? ??};}{\\f40\\fbidi \\fmodern\\fcharset128\\fprq1{\\*\\panose 00000000000000000000}@MS Mincho{\\*\\falt @MS Gothic};}\n{\\f41\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 00000000000000000000}@SimSun{\\*\\falt Minion Web};}{\\f42\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 00000000000000000000}Trebuchet MS{\\*\\falt Univers};}\n{\\flomajor\\f31500\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times};}{\\fdbmajor\\f31501\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 02010600030101010101}SimSun{\\*\\falt ????????\\'a8\\'ac????};}\n{\\fhimajor\\f31502\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02040503050406030204}Cambria;}{\\fbimajor\\f31503\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times};}\n{\\flominor\\f31504\\fbidi \\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Times};}{\\fdbminor\\f31505\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 02010600030101010101}SimSun{\\*\\falt ????????\\'a8\\'ac????};}\n{\\fhiminor\\f31506\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020f0502020204030204}Calibri;}{\\fbiminor\\f31507\\fbidi \\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604020202020204}Arial;}{\\f44\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times};}\n{\\f45\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times};}{\\f47\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times};}{\\f48\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times};}\n{\\f49\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times};}{\\f50\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times};}{\\f51\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times};}\n{\\f52\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times};}{\\f64\\fbidi \\fmodern\\fcharset238\\fprq1 Courier New CE{\\*\\falt Arial};}{\\f65\\fbidi \\fmodern\\fcharset204\\fprq1 Courier New Cyr{\\*\\falt Arial};}\n{\\f67\\fbidi \\fmodern\\fcharset161\\fprq1 Courier New Greek{\\*\\falt Arial};}{\\f68\\fbidi \\fmodern\\fcharset162\\fprq1 Courier New Tur{\\*\\falt Arial};}{\\f69\\fbidi \\fmodern\\fcharset177\\fprq1 Courier New (Hebrew){\\*\\falt Arial};}\n{\\f70\\fbidi \\fmodern\\fcharset178\\fprq1 Courier New (Arabic){\\*\\falt Arial};}{\\f71\\fbidi \\fmodern\\fcharset186\\fprq1 Courier New Baltic{\\*\\falt Arial};}{\\f72\\fbidi \\fmodern\\fcharset163\\fprq1 Courier New (Vietnamese){\\*\\falt Arial};}\n{\\f156\\fbidi \\fmodern\\fcharset0\\fprq1 MS Mincho Western{\\*\\falt ?l?r ??\\'81\\'66c};}{\\f154\\fbidi \\fmodern\\fcharset238\\fprq1 MS Mincho CE{\\*\\falt ?l?r ??\\'81\\'66c};}{\\f155\\fbidi \\fmodern\\fcharset204\\fprq1 MS Mincho Cyr{\\*\\falt ?l?r ??\\'81\\'66c};}\n{\\f157\\fbidi \\fmodern\\fcharset161\\fprq1 MS Mincho Greek{\\*\\falt ?l?r ??\\'81\\'66c};}{\\f158\\fbidi \\fmodern\\fcharset162\\fprq1 MS Mincho Tur{\\*\\falt ?l?r ??\\'81\\'66c};}{\\f161\\fbidi \\fmodern\\fcharset186\\fprq1 MS Mincho Baltic{\\*\\falt ?l?r ??\\'81\\'66c};}\n{\\f176\\fbidi \\fnil\\fcharset0\\fprq2 SimSun Western{\\*\\falt ????????\\'a8\\'ac????};}{\\f384\\fbidi \\froman\\fcharset238\\fprq2 Cambria Math CE{\\*\\falt Calisto MT};}{\\f385\\fbidi \\froman\\fcharset204\\fprq2 Cambria Math Cyr{\\*\\falt Calisto MT};}\n{\\f387\\fbidi \\froman\\fcharset161\\fprq2 Cambria Math Greek{\\*\\falt Calisto MT};}{\\f388\\fbidi \\froman\\fcharset162\\fprq2 Cambria Math Tur{\\*\\falt Calisto MT};}{\\f391\\fbidi \\froman\\fcharset186\\fprq2 Cambria Math Baltic{\\*\\falt Calisto MT};}\n{\\f392\\fbidi \\froman\\fcharset163\\fprq2 Cambria Math (Vietnamese){\\*\\falt Calisto MT};}{\\f434\\fbidi \\fswiss\\fcharset238\\fprq2 Tahoma CE{\\*\\falt ?? ??};}{\\f435\\fbidi \\fswiss\\fcharset204\\fprq2 Tahoma Cyr{\\*\\falt ?? ??};}\n{\\f437\\fbidi \\fswiss\\fcharset161\\fprq2 Tahoma Greek{\\*\\falt ?? ??};}{\\f438\\fbidi \\fswiss\\fcharset162\\fprq2 Tahoma Tur{\\*\\falt ?? ??};}{\\f439\\fbidi \\fswiss\\fcharset177\\fprq2 Tahoma (Hebrew){\\*\\falt ?? ??};}\n{\\f440\\fbidi \\fswiss\\fcharset178\\fprq2 Tahoma (Arabic){\\*\\falt ?? ??};}{\\f441\\fbidi \\fswiss\\fcharset186\\fprq2 Tahoma Baltic{\\*\\falt ?? ??};}{\\f442\\fbidi \\fswiss\\fcharset163\\fprq2 Tahoma (Vietnamese){\\*\\falt ?? ??};}\n{\\f443\\fbidi \\fswiss\\fcharset222\\fprq2 Tahoma (Thai){\\*\\falt ?? ??};}{\\f446\\fbidi \\fmodern\\fcharset0\\fprq1 @MS Mincho Western{\\*\\falt @MS Gothic};}{\\f444\\fbidi \\fmodern\\fcharset238\\fprq1 @MS Mincho CE{\\*\\falt @MS Gothic};}\n{\\f445\\fbidi \\fmodern\\fcharset204\\fprq1 @MS Mincho Cyr{\\*\\falt @MS Gothic};}{\\f447\\fbidi \\fmodern\\fcharset161\\fprq1 @MS Mincho Greek{\\*\\falt @MS Gothic};}{\\f448\\fbidi \\fmodern\\fcharset162\\fprq1 @MS Mincho Tur{\\*\\falt @MS Gothic};}\n{\\f451\\fbidi \\fmodern\\fcharset186\\fprq1 @MS Mincho Baltic{\\*\\falt @MS Gothic};}{\\f456\\fbidi \\fnil\\fcharset0\\fprq2 @SimSun Western{\\*\\falt Minion Web};}{\\f464\\fbidi \\fswiss\\fcharset238\\fprq2 Trebuchet MS CE{\\*\\falt Univers};}\n{\\f465\\fbidi \\fswiss\\fcharset204\\fprq2 Trebuchet MS Cyr{\\*\\falt Univers};}{\\f467\\fbidi \\fswiss\\fcharset161\\fprq2 Trebuchet MS Greek{\\*\\falt Univers};}{\\f468\\fbidi \\fswiss\\fcharset162\\fprq2 Trebuchet MS Tur{\\*\\falt Univers};}\n{\\f471\\fbidi \\fswiss\\fcharset186\\fprq2 Trebuchet MS Baltic{\\*\\falt Univers};}{\\flomajor\\f31508\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times};}{\\flomajor\\f31509\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times};}\n{\\flomajor\\f31511\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times};}{\\flomajor\\f31512\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times};}\n{\\flomajor\\f31513\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times};}{\\flomajor\\f31514\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times};}\n{\\flomajor\\f31515\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times};}{\\flomajor\\f31516\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times};}\n{\\fdbmajor\\f31520\\fbidi \\fnil\\fcharset0\\fprq2 SimSun Western{\\*\\falt ????????\\'a8\\'ac????};}{\\fhimajor\\f31528\\fbidi \\froman\\fcharset238\\fprq2 Cambria CE;}{\\fhimajor\\f31529\\fbidi \\froman\\fcharset204\\fprq2 Cambria Cyr;}\n{\\fhimajor\\f31531\\fbidi \\froman\\fcharset161\\fprq2 Cambria Greek;}{\\fhimajor\\f31532\\fbidi \\froman\\fcharset162\\fprq2 Cambria Tur;}{\\fhimajor\\f31535\\fbidi \\froman\\fcharset186\\fprq2 Cambria Baltic;}\n{\\fhimajor\\f31536\\fbidi \\froman\\fcharset163\\fprq2 Cambria (Vietnamese);}{\\fbimajor\\f31538\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times};}{\\fbimajor\\f31539\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times};}\n{\\fbimajor\\f31541\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times};}{\\fbimajor\\f31542\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times};}\n{\\fbimajor\\f31543\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times};}{\\fbimajor\\f31544\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times};}\n{\\fbimajor\\f31545\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times};}{\\fbimajor\\f31546\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times};}\n{\\flominor\\f31548\\fbidi \\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Times};}{\\flominor\\f31549\\fbidi \\froman\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Times};}\n{\\flominor\\f31551\\fbidi \\froman\\fcharset161\\fprq2 Times New Roman Greek{\\*\\falt Times};}{\\flominor\\f31552\\fbidi \\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Times};}\n{\\flominor\\f31553\\fbidi \\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Times};}{\\flominor\\f31554\\fbidi \\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Times};}\n{\\flominor\\f31555\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Times};}{\\flominor\\f31556\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese){\\*\\falt Times};}\n{\\fdbminor\\f31560\\fbidi \\fnil\\fcharset0\\fprq2 SimSun Western{\\*\\falt ????????\\'a8\\'ac????};}{\\fhiminor\\f31568\\fbidi \\fswiss\\fcharset238\\fprq2 Calibri CE;}{\\fhiminor\\f31569\\fbidi \\fswiss\\fcharset204\\fprq2 Calibri Cyr;}\n{\\fhiminor\\f31571\\fbidi \\fswiss\\fcharset161\\fprq2 Calibri Greek;}{\\fhiminor\\f31572\\fbidi \\fswiss\\fcharset162\\fprq2 Calibri Tur;}{\\fhiminor\\f31575\\fbidi \\fswiss\\fcharset186\\fprq2 Calibri Baltic;}\n{\\fhiminor\\f31576\\fbidi \\fswiss\\fcharset163\\fprq2 Calibri (Vietnamese);}{\\fbiminor\\f31578\\fbidi \\fswiss\\fcharset238\\fprq2 Arial CE;}{\\fbiminor\\f31579\\fbidi \\fswiss\\fcharset204\\fprq2 Arial Cyr;}\n{\\fbiminor\\f31581\\fbidi \\fswiss\\fcharset161\\fprq2 Arial Greek;}{\\fbiminor\\f31582\\fbidi \\fswiss\\fcharset162\\fprq2 Arial Tur;}{\\fbiminor\\f31583\\fbidi \\fswiss\\fcharset177\\fprq2 Arial (Hebrew);}\n{\\fbiminor\\f31584\\fbidi \\fswiss\\fcharset178\\fprq2 Arial (Arabic);}{\\fbiminor\\f31585\\fbidi \\fswiss\\fcharset186\\fprq2 Arial Baltic;}{\\fbiminor\\f31586\\fbidi \\fswiss\\fcharset163\\fprq2 Arial (Vietnamese);}}{\\colortbl;\\red0\\green0\\blue0;\\red0\\green0\\blue255;\n\\red0\\green255\\blue255;\\red0\\green255\\blue0;\\red255\\green0\\blue255;\\red255\\green0\\blue0;\\red255\\green255\\blue0;\\red255\\green255\\blue255;\\red0\\green0\\blue128;\\red0\\green128\\blue128;\\red0\\green128\\blue0;\\red128\\green0\\blue128;\\red128\\green0\\blue0;\n\\red128\\green128\\blue0;\\red128\\green128\\blue128;\\red192\\green192\\blue192;\\ctextone\\ctint255\\cshade255\\red0\\green0\\blue0;}{\\*\\defchp \\fs22\\dbch\\af11 }{\\*\\defpap \\ql \\li0\\ri0\\sa200\\sl276\\slmult1\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 }\\noqfpromote {\\stylesheet{\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext0 \\sautoupd \\sqformat \\spriority0 Normal;}{\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext1 \\slink15 \\sqformat heading 1;}{\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext2 \\slink16 \\sqformat heading 2;}{\\s3\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\n\\tx1077\\jclisttab\\tx1440\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext3 \\slink17 \\sqformat heading 3;}{\\s4\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl3\\outlinelevel3\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext4 \\slink18 \\sqformat heading 4;}{\\s5\\ql \\fi-357\\li1792\\ri0\\sb120\\sa120\\widctlpar\n\\tx1792\\jclisttab\\tx2155\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl4\\outlinelevel4\\adjustright\\rin0\\lin1792\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext5 \\slink19 \\sqformat heading 5;}{\\s6\\ql \\fi-357\\li2149\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx2152\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl5\\outlinelevel5\\adjustright\\rin0\\lin2149\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext6 \\slink20 \\sqformat heading 6;}{\\s7\\ql \\fi-357\\li2506\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx2509\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl6\\outlinelevel6\\adjustright\\rin0\\lin2506\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext7 \\slink21 \\sqformat heading 7;}{\\s8\\ql \\fi-357\\li2863\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx2866\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl7\\outlinelevel7\\adjustright\\rin0\\lin2863\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext8 \\slink22 \\sqformat heading 8;}{\\s9\\ql \\fi-358\\li3221\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx3223\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl8\\outlinelevel8\\adjustright\\rin0\\lin3221\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext9 \\slink23 \\sqformat heading 9;}{\\*\\cs10 \\additive \\ssemihidden \\sunhideused \\spriority1 Default Paragraph Font;}{\\*\n\\ts11\\tsrowd\\trftsWidthB3\\trpaddl108\\trpaddr108\\trpaddfl3\\trpaddft3\\trpaddfb3\\trpaddfr3\\trcbpat1\\trcfpat1\\tblind0\\tblindtype3\\tsvertalt\\tsbrdrt\\tsbrdrl\\tsbrdrb\\tsbrdrr\\tsbrdrdgl\\tsbrdrdgr\\tsbrdrh\\tsbrdrv \\ql \\li0\\ri0\\sa200\\sl276\\slmult1\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af0\\afs22\\alang1025 \\ltrch\\fcs0 \\fs22\\lang1033\\langfe1033\\loch\\f0\\hich\\af0\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext11 \\ssemihidden \\sunhideused Normal Table;}{\\*\n\\cs15 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs19 \\ltrch\\fcs0 \\b\\f39\\fs19 \\sbasedon10 \\slink1 \\slocked Heading 1 Char;}{\\*\\cs16 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs19 \\ltrch\\fcs0 \\b\\f39\\fs19 \\sbasedon10 \\slink2 \\slocked Heading 2 Char;}{\\*\\cs17 \\additive \n\\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink3 \\slocked Heading 3 Char;}{\\*\\cs18 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink4 \\slocked Heading 4 Char;}{\\*\\cs19 \\additive \\rtlch\\fcs1 \\af39\\afs19 \n\\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink5 \\slocked Heading 5 Char;}{\\*\\cs20 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink6 \\slocked Heading 6 Char;}{\\*\\cs21 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \n\\sbasedon10 \\slink7 \\slocked Heading 7 Char;}{\\*\\cs22 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink8 \\slocked Heading 8 Char;}{\\*\\cs23 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink9 \\slocked \nHeading 9 Char;}{\\s24\\ql \\li357\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext24 Body 1;}{\\s25\\ql \\li720\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext25 Body 2;}{\\s26\\ql \\li1077\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext26 Body 3;}{\n\\s27\\ql \\li1435\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext27 Body 4;}{\\s28\\ql \\li1803\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin1803\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext28 Body 5;}{\\s29\\ql \\li2160\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin2160\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext29 Body 6;}{\n\\s30\\ql \\li2506\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin2506\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext30 Body 7;}{\\s31\\ql \\li2863\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin2863\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext31 Body 8;}{\\s32\\ql \\li3221\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin3221\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext32 Body 9;}{\\s33\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls1\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext33 Bullet 1;}{\n\\s34\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext34 Bullet 2;}{\\s35\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1080\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls3\\adjustright\\rin0\\lin1077\\itap0 \n\\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext35 \\slink87 Bullet 3;}{\\s36\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext36 Bullet 4;}{\n\\s37\\ql \\fi-357\\li1792\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1795\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls5\\adjustright\\rin0\\lin1792\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext37 Bullet 5;}{\\s38\\ql \\fi-357\\li2149\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx2152\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls6\\adjustright\\rin0\\lin2149\\itap0 \n\\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext38 Bullet 6;}{\\s39\\ql \\fi-357\\li2506\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx2509\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls7\\adjustright\\rin0\\lin2506\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext39 Bullet 7;}{\n\\s40\\ql \\fi-357\\li2863\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx2866\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls8\\adjustright\\rin0\\lin2863\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext40 Bullet 8;}{\\s41\\ql \\fi-358\\li3221\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx3223\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls9\\adjustright\\rin0\\lin3221\\itap0 \n\\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon32 \\snext41 Bullet 9;}{\n\\s42\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs28\\alang1025 \\ltrch\\fcs0 \\b\\fs28\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext0 Heading EULA;}{\\s43\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\brdrb\\brdrs\\brdrw10\\brsp20 \\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs28\\alang1025 \\ltrch\\fcs0 \n\\b\\fs28\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext0 Heading Software Title;}{\\s44\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \n\\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext44 Preamble;}{\\s45\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\brdrb\\brdrs\\brdrw10\\brsp20 \n\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext1 Preamble Border;}{\n\\s46\\qc \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext46 Heading Warranty;}{\\s47\\ql \\fi-360\\li360\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls11\\outlinelevel0\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext0 Heading 1 Warranty;}{\\s48\\ql \\fi-360\\li720\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls11\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext0 Heading 2 Warranty;}{\\s49\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\\tx1077\\jclisttab\\tx1440\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon3 \\snext49 \\slink107 Heading 3 Bold;}{\\s50\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon36 \\snext50 \nBullet 4 Underline;}{\\s51\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon35 \\snext51 Bullet 3 Underline;}{\\s52\\ql \\li720\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon25 \\snext52 Body 2 Underline;}{\n\\s53\\ql \\li1077\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon26 \\snext53 Body 3 Underline;}{\\s54\\ql \\li0\\ri0\\sb120\\sa120\\sl480\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext54 \\slink55 Body Text Indent;}{\\*\\cs55 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink54 \\slocked \\ssemihidden \nBody Text Indent Char;}{\\s56\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\ai\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\i\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon36 \\snext56 Bullet 4 Italics;}{\\*\\cs57 \\additive \\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\f39\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Body 2 Char;}{\\*\n\\cs58 \\additive \\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\f39\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Body 3 Char;}{\\*\\cs59 \\additive \\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\f39\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Body 4 Char;}{\\*\\cs60 \n\\additive \\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\f39\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Body 1 Char;}{\\s61\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\brdrt\\brdrs\\brdrw10\\brsp20 \\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \n\\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon44 \\snext61 Preamble Border Above;}{\n\\s62\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext62 \\slink63 \\ssemihidden footnote text;}{\\*\\cs63 \\additive \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\f39\\fs20 \\sbasedon10 \\slink62 \\slocked \\ssemihidden Footnote Text Char;}{\\*\\cs64 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\super \n\\sbasedon10 \\ssemihidden footnote reference;}{\\s65\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext65 \\slink66 \\ssemihidden endnote text;}{\\*\\cs66 \\additive \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\f39\\fs20 \\sbasedon10 \\slink65 \\slocked \\ssemihidden \nEndnote Text Char;}{\\*\\cs67 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\super \\sbasedon10 \\ssemihidden endnote reference;}{\\s68\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \n\\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext68 \\slink69 \\ssemihidden annotation text;}{\\*\\cs69 \\additive \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\f39\\fs20 \n\\sbasedon10 \\slink68 \\slocked \\ssemihidden Comment Text Char;}{\\*\\cs70 \\additive \\rtlch\\fcs1 \\af0\\afs16 \\ltrch\\fcs0 \\fs16 \\sbasedon10 \\ssemihidden annotation reference;}{\\s71\\ql \\li0\\ri0\\sa160\\sl-240\\slmult0\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext71 Char;}{\n\\s72\\ql \\li0\\ri0\\sa160\\sl-240\\slmult0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon0 \\snext72 Char Char Char Char;}{\\*\\cs73 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\ul\\cf2 \\sbasedon10 Hyperlink,Char Char7;}{\\s74\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \n\\af39\\afs16\\alang1025 \\ltrch\\fcs0 \\fs16\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext74 \\slink75 \\ssemihidden Balloon Text;}{\\*\\cs75 \\additive \\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16 \n\\sbasedon10 \\slink74 \\slocked \\ssemihidden Balloon Text Char;}{\\*\\cs76 \\additive \\rtlch\\fcs1 \\ab\\af42 \\ltrch\\fcs0 \\b\\f42\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \\sbasedon10 Heading 2 Char1;}{\\*\\cs77 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\sbasedon10 \npage number;}{\\s78\\ql \\li0\\ri0\\sa160\\sl-240\\slmult0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext78 Char Char Char Char1;}{\\s79\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \n\\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext0 \\slink109 Body 0 Bold;}{\\s80\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \n\\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext0 Body 0;}{\\s81\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \n\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext81 \\slink82 header;}{\\*\\cs82 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink81 \\slocked \nHeader Char;}{\\s83\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext83 \\slink84 footer;}{\\*\\cs84 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink83 \\slocked Footer Char;}{\n\\s85\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs20\\alang1025 \\ltrch\\fcs0 \\b\\fs20\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \n\\sbasedon68 \\snext68 \\slink86 \\ssemihidden \\sunhideused annotation subject;}{\\*\\cs86 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\f39\\fs20 \\sbasedon69 \\slink85 \\slocked \\ssemihidden Comment Subject Char;}{\\*\\cs87 \\additive \\rtlch\\fcs1 \\af39\\afs19 \n\\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink35 \\slocked Bullet 3 Char1;}{\\s88\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1080\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls3\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon35 \\snext88 Bullet 3 Underlined;}{\\*\\cs89 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\langnp1033\\langfenp1033 \\sbasedon10 Char Char;}{\\s90\\ql \\li0\\ri0\\sl-240\\slmult0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs20\\alang1025 \\ltrch\\fcs0 \n\\fs18\\lang1033\\langfe1033\\loch\\f42\\hich\\af42\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\snext90 \\spriority0 AdditionalSoftware;}{\\*\\cs91 \\additive \\rtlch\\fcs1 \\af39\\afs24\\alang1025 \\ltrch\\fcs0 \\b\\f42\\fs24\\lang1033\\langfe1033\\langnp1033\\langfenp1033 \n\\sbasedon10 \\spriority0 Char Char1;}{\\s92\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\ul\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon36 \\snext92 \\spriority0 Bullet 4 Underlined;}{\\s93\\ql \\fi-360\\li360\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls31\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext93 \\spriority0 \nHeading French Warranty;}{\\*\\cs94 \\additive \\f39\\lang1033\\langfe0\\langnp1033\\langfenp0 \\slocked Body 3 Char Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car Car;}{\\*\\cs95 \\additive \n\\f2\\cf15\\lang1024\\langfe1024\\noproof tw4winExternal;}{\\*\\cs96 \\additive \\v\\f2\\fs24\\cf12\\sub tw4winMark;}{\\*\\cs97 \\additive \\b\\f39 Preamble Char;}{\\*\\cs98 \\additive \\f2\\fs40\\cf4 tw4winError;}{\\*\\cs99 \\additive \\cf2 tw4winTerm;}{\\*\\cs100 \\additive \n\\f2\\cf11\\lang1024\\langfe1024\\noproof tw4winPopup;}{\\*\\cs101 \\additive \\f2\\cf10\\lang1024\\langfe1024\\noproof tw4winJump;}{\\*\\cs102 \\additive \\f2\\cf6\\lang1024\\langfe1024\\noproof tw4winInternal;}{\\*\\cs103 \\additive \\f2\\cf13\\lang1024\\langfe1024\\noproof \nDO_NOT_TRANSLATE;}{\\s104\\ql \\li0\\ri0\\sb120\\sa120\\sl480\\slmult1\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext104 \\slink105 Body Text 2;}{\\*\\cs105 \\additive \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f39\\fs19 \\sbasedon10 \\slink104 \\slocked Body Text 2 Char;}{\n\\s106\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\widctlpar\\tx1077\\jclisttab\\tx1440\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 \\sbasedon49 \\snext106 \\slink108 Style Heading 3 Bold + (Asian) Times New Roman 9.5 pt;}{\\*\\cs107 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs19 \\ltrch\\fcs0 \\b\\f39\\fs19 \n\\sbasedon10 \\slink49 \\slocked Heading 3 Bold Char;}{\\*\\cs108 \\additive \\rtlch\\fcs1 \\ab0\\af39\\afs19 \\ltrch\\fcs0 \\b0\\f39\\fs19 \\sbasedon107 \\slink106 \\slocked Style Heading 3 Bold + (Asian) Times New Roman 9.5 pt Char;}{\\*\\cs109 \\additive \\rtlch\\fcs1 \n\\ab\\af39\\afs19 \\ltrch\\fcs0 \\b\\f39\\fs19 \\sbasedon10 \\slink79 \\slocked Body 0 Bold Char;}{\\s110\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs20\\alang1025 \\ltrch\\fcs0 \n\\b\\fs20\\lang1026\\langfe2052\\super\\loch\\f39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1026\\langfenp2052 \\sbasedon0 \\snext110 \\slink111 LIMPA_T4WINEXTERNAL;}{\\*\\cs111 \\additive \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \n\\b\\f39\\fs20\\lang1026\\langfe2052\\super\\langnp1026\\langfenp2052 \\sbasedon10 \\slink110 \\slocked LIMPA_T4WINEXTERNAL Char;}}{\\*\\listtable{\\list\\listtemplateid1821544400\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1380\\jclisttab\\tx1380\\lin1380 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2100\\jclisttab\\tx2100\\lin2100 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2820\\jclisttab\\tx2820\\lin2820 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3540\\jclisttab\\tx3540\\lin3540 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4260\\jclisttab\\tx4260\\lin4260 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li4980\\jclisttab\\tx4980\\lin4980 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5700\\jclisttab\\tx5700\\lin5700 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6420\\jclisttab\\tx6420\\lin6420 }{\\listname ;}\\listid189493747}{\\list\\listtemplateid176468498\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\leveltemplateid692200086\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s41\\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\n\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\n\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }\n{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid196815738}{\\list\\listtemplateid-1793664660{\\listlevel\\levelnfc3\n\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af0 \\ltrch\\fcs0 \\b\\i0\\fbias0 \\s47\\fi-360\\li360\\jclisttab\\tx360\\lin360 }{\\listlevel\\levelnfc0\\levelnfcn0\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af0 \\ltrch\\fcs0 \\b\\i0\\fbias0 \\s48\\fi-360\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02);}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li1080\\jclisttab\\tx1080\\lin1080 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'03(\\'03);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\'03(\\'04);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li1800\\jclisttab\\tx1800\\lin1800 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'03(\\'05);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\n\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li2520\\jclisttab\\tx2520\\lin2520 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'07.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \n\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'08.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fbias0 \\fi-360\\li3240\n\\jclisttab\\tx3240\\lin3240 }{\\listname ;}\\listid394402059}{\\list\\listtemplateid1928476992{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\s49\\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\'02i.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\'02A.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid398796681}{\\list\\listtemplateid789093748\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-317712510\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s34\\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\n\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\n\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid477573462}\n{\\list\\listtemplateid1948578256{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\n\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af0\\afs20 \\ltrch\\fcs0 \\b\\i0\\fs20\\fbias0 \\fi-360\\li720\n\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li1077\n\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \n\\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid630479929}{\\list\\listtemplateid67698717{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'00);}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li360\\jclisttab\\tx360\\lin360 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'01);}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02);}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\af0 \\ltrch\\fcs0 \\fi-360\\li1080\\jclisttab\\tx1080\\lin1080 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'03(\\'03);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1440\n\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'03(\\'04);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1800\\jclisttab\\tx1800\\lin1800 }{\\listlevel\n\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'03(\\'05);}{\\levelnumbers\\'02;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2520\\jclisttab\\tx2520\\lin2520 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'07.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'02\\'08.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li3240\\jclisttab\\tx3240\\lin3240 }{\\listname ;}\\listid700712945}{\\list\\listtemplateid-53848358{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\s1\\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\s2\\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\s3\\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\s4\\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\s5\\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\s6\\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\s7\\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\n\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\s8\\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\n\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\s9\\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname \n;}\\listid752163927}{\\list\\listtemplateid2088029282{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f42\\fs20\\fbias0 \\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f39\\fs20\\fbias0 \\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers\n;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\n\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid800729109}{\\list\\listtemplateid-296591990\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s40\\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\n\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\n\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname \n;}\\listid810947713}{\\list\\listtemplateid1567531878{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b\\i0\\f42\\fs20\\fbias0 \\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \n\\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \n\\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\n\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers\n;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\n\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid826823576}{\\list\\listtemplateid2088029282{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b\\i0\\f42\\fs20\\fbias0 \\fi-363\\li720\\jclisttab\\tx720\\lin720 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af39\\afs20 \\ltrch\\fcs0 \\b\\i0\\f39\\fs20\\fbias0 \\fi-357\\li1077\\jclisttab\\tx1440\\lin1077 }{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc1\\levelnfcn1\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\strike0\\f42\\fs20\\ulnone\\fbias0 \\fi-357\\li1792\\jclisttab\\tx2155\\lin1792 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2149\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2506\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02i.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-357\\li2863\\jclisttab\\tx2866\\lin2863 }{\\listlevel\\levelnfc255\\levelnfcn255\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'02A.;}{\\levelnumbers;}\\rtlch\\fcs1 \\ab0\\ai0\\af42\\afs20 \\ltrch\\fcs0 \\b0\\i0\\f42\\fs20\\fbias0 \\fi-358\\li3221\\jclisttab\\tx3223\\lin3221 }{\\listname ;}\\listid974869818}\n{\\list\\listtemplateid-924022824\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li1797\\lin1797 }\n{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li2517\\lin2517 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li3237\\lin3237 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li3957\\lin3957 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li4677\\lin4677 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li5397\\lin5397 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li6117\\lin6117 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \n\\fi-360\\li6837\\lin6837 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li7557\\lin7557 }{\\listname \n;}\\listid1210149136}{\\list\\listtemplateid-1813845996\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s39\\fi-357\\li2506\n\\jclisttab\\tx2509\\lin2506 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\n\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1219436735}{\\list\\listtemplateid280937824\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li1124\\lin1124 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1844\\lin1844 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2564\\lin2564 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li3284\\lin3284 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \n\\fi-360\\li4004\\lin4004 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4724\\lin4724 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5444\\lin5444 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li6164\\lin6164 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6884\\lin6884 }{\\listname ;}\\listid1422722544}{\\list\\listtemplateid303218272\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid612407812\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\cf17\\fbias0 \\s36\\fi-358\\li1435\\jclisttab\\tx1437\\lin1435 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \n\\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\n\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1559511898}{\\list\\listtemplateid-743794326\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid2033377338\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s35\\fi-357\\li1077\\jclisttab\\tx1080\\lin1077 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\n\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\n\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }\n{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1567649130}{\\list\\listtemplateid-154908222\\listhybrid{\\listlevel\\levelnfc3\\levelnfcn3\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-596080174\\'02\\'00.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\ab\\ai0\\af0 \\ltrch\\fcs0 \\b\\i0\\fbias0 \\s93\\fi-360\\li360\\jclisttab\\tx360\\lin360 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698713\\'02\\'01.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc2\\leveljcn2\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698715\\'02\\'02.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-180\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698703\\'02\\'03.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\n\\levelindent0{\\leveltext\\leveltemplateid67698713\\'02\\'04.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc2\\leveljcn2\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698715\\'02\\'05.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-180\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc0\\levelnfcn0\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698703\\'02\\'06.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc4\\levelnfcn4\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698713\\'02\\'07.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc2\\levelnfcn2\\leveljc2\\leveljcn2\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698715\\'02\\'08.;}{\\levelnumbers\\'01;}\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\fi-180\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1795057320}{\\list\\listtemplateid-961874242\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-1175557160\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s37\\fi-357\\li1792\\jclisttab\\tx1795\\lin1792 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\n\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\n\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1848404271}\n{\\list\\listtemplateid-1802592190\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid1229593488\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s38\\fi-357\\li2149\n\\jclisttab\\tx2152\\lin2149 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\n\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1877695764}{\\list\\listtemplateid1186249844\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid1637229796\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\s33\\fi-357\\li357\\jclisttab\\tx360\\lin357 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1440\\jclisttab\\tx1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\n\\f10\\fbias0 \\fi-360\\li2160\\jclisttab\\tx2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2880\n\\jclisttab\\tx2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li3600\\jclisttab\\tx3600\\lin3600 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li4320\\jclisttab\\tx4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\n\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698689\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li5040\\jclisttab\\tx5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\n\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698691\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5760\\jclisttab\\tx5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0\n{\\leveltext\\leveltemplateid67698693\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid2054619191}{\\list\\listtemplateid-235387302\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\n\\levelfollow0\\levelstartat1\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid-1242156798\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li360\\lin360 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\n\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698713\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li1080\\lin1080 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\n\\leveltemplateid67698715\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li1800\\lin1800 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698703\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li2520\\lin2520 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698713\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \n\\fi-360\\li3240\\lin3240 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698715\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li3960\\lin3960 }{\\listlevel\n\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698703\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0 \\fi-360\\li4680\\lin4680 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698713\\'01o;}{\\levelnumbers;}\\f2\\fbias0 \\fi-360\\li5400\\lin5400 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\n\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\leveltemplateid67698715\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0 \\fi-360\\li6120\\lin6120 }{\\listname ;}\\listid2106606675}}{\\*\\listoverridetable{\\listoverride\\listid2054619191\\listoverridecount0\\ls1}\n{\\listoverride\\listid477573462\\listoverridecount0\\ls2}{\\listoverride\\listid1567649130\\listoverridecount0\\ls3}{\\listoverride\\listid1559511898\\listoverridecount0\\ls4}{\\listoverride\\listid1848404271\\listoverridecount0\\ls5}{\\listoverride\\listid1877695764\n\\listoverridecount0\\ls6}{\\listoverride\\listid1219436735\\listoverridecount0\\ls7}{\\listoverride\\listid810947713\\listoverridecount0\\ls8}{\\listoverride\\listid196815738\\listoverridecount0\\ls9}{\\listoverride\\listid398796681\\listoverridecount0\\ls10}\n{\\listoverride\\listid394402059\\listoverridecount0\\ls11}{\\listoverride\\listid752163927\\listoverridecount0\\ls12}{\\listoverride\\listid189493747\\listoverridecount0\\ls13}{\\listoverride\\listid2106606675\\listoverridecount0\\ls14}{\\listoverride\\listid1559511898\n\\listoverridecount0\\ls15}{\\listoverride\\listid1848404271\\listoverridecount0\\ls16}{\\listoverride\\listid1848404271\\listoverridecount0\\ls17}{\\listoverride\\listid1848404271\\listoverridecount0\\ls18}{\\listoverride\\listid1848404271\\listoverridecount0\\ls19}\n{\\listoverride\\listid1848404271\\listoverridecount0\\ls20}{\\listoverride\\listid1848404271\\listoverridecount0\\ls21}{\\listoverride\\listid1848404271\\listoverridecount0\\ls22}{\\listoverride\\listid1848404271\\listoverridecount0\\ls23}{\\listoverride\\listid1848404271\n\\listoverridecount0\\ls24}{\\listoverride\\listid1422722544\\listoverridecount0\\ls25}{\\listoverride\\listid1848404271\\listoverridecount0\\ls26}{\\listoverride\\listid1848404271\\listoverridecount0\\ls27}{\\listoverride\\listid1848404271\\listoverridecount0\\ls28}\n{\\listoverride\\listid1559511898\\listoverridecount0\\ls29}{\\listoverride\\listid1559511898\\listoverridecount0\\ls30}{\\listoverride\\listid1795057320\\listoverridecount0\\ls31}{\\listoverride\\listid1559511898\\listoverridecount0\\ls32}{\\listoverride\\listid700712945\n\\listoverridecount0\\ls33}{\\listoverride\\listid826823576\\listoverridecount0\\ls34}{\\listoverride\\listid630479929\\listoverridecount0\\ls35}{\\listoverride\\listid800729109\\listoverridecount0\\ls36}{\\listoverride\\listid974869818\\listoverridecount0\\ls37}\n{\\listoverride\\listid398796681\\listoverridecount9{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\n\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\\ls38}{\\listoverride\\listid1210149136\n\\listoverridecount0\\ls39}{\\listoverride\\listid752163927\\listoverridecount9{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\n{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\\ls40}\n{\\listoverride\\listid398796681\\listoverridecount9{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\n\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}{\\lfolevel\\listoverridestartat\\levelstartat1}\\ls41}{\\listoverride\\listid752163927\n\\listoverridecount0\\ls42}{\\listoverride\\listid1567649130\\listoverridecount0\\ls43}{\\listoverride\\listid1567649130\\listoverridecount0\\ls44}{\\listoverride\\listid752163927\\listoverridecount0\\ls45}{\\listoverride\\listid1567649130\\listoverridecount0\\ls46}\n{\\listoverride\\listid1567649130\\listoverridecount0\\ls47}}{\\*\\pgptbl {\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}{\\pgp\\ipgp0\\itap0\\li0\\ri0\\sb0\\sa0}}{\\*\\rsidtbl \\rsid132812\\rsid675178\\rsid1799879\n\\rsid3958498\\rsid4605597\\rsid5720217\\rsid7042433\\rsid7755012\\rsid8343752\\rsid12265033\\rsid12279895\\rsid12678245\\rsid13524579\\rsid13651777\\rsid14051756\\rsid16255017}{\\mmathPr\\mmathFont34\\mbrkBin0\\mbrkBinSub0\\msmallFrac0\\mdispDef1\\mlMargin0\\mrMargin0\n\\mdefJc1\\mwrapIndent1440\\mintLim0\\mnaryLim1}{\\info{\\title English}{\\creatim\\yr2013\\mo7\\dy12\\hr8\\min22}{\\revtim\\yr2014\\mo6\\dy16\\hr16\\min12}{\\version1}{\\edmins0}{\\nofpages3}{\\nofwords1371}{\\nofchars7818}{\\nofcharsws9171}{\\vern57437}}{\\*\\userprops \n{\\propname db_document_id}\\proptype30{\\staticval 22469}{\\propname ContentTypeId}\\proptype30{\\staticval 0x01010022795EB251D4644FBEC12BD5D4B08D7C}}{\\*\\xmlnstbl {\\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\n\\paperw12240\\paperh15840\\margl720\\margr720\\margt720\\margb720\\gutter0\\ltrsect \n\\widowctrl\\ftnbj\\aenddoc\\trackmoves0\\trackformatting1\\donotembedsysfont0\\relyonvml0\\donotembedlingdata0\\grfdocevents0\\validatexml1\\showplaceholdtext0\\ignoremixedcontent0\\saveinvalidxml0\\showxmlerrors1\\noxlattoyen\n\\expshrtn\\noultrlspc\\dntblnsbdb\\nospaceforul\\hyphcaps0\\formshade\\horzdoc\\dgmargin\\dghspace95\\dgvspace180\\dghorigin720\\dgvorigin720\\dghshow2\\dgvshow1\n\\jexpand\\viewkind1\\viewscale100\\pgbrdrhead\\pgbrdrfoot\\splytwnine\\ftnlytwnine\\htmautsp\\nolnhtadjtbl\\useltbaln\\alntblind\\lytcalctblwd\\lyttblrtgr\\lnbrkrule\\nobrkwrptbl\\snaptogridincell\\rempersonalinfo\\allowfieldendsel\n\\wrppunct\\asianbrkrule\\rsidroot4605597\\newtblstyruls\\nogrowautofit\\usenormstyforlist\\noindnmbrts\\felnbrelev\\nocxsptable\\indrlsweleven\\noafcnsttbl\\afelev\\utinl\\hwelev\\spltpgpar\\notcvasp\\notbrkcnstfrctbl\\notvatxbx\\krnprsnet\\cachedcolbal \\nouicompat \\fet0\n{\\*\\wgrffmtfilter 013f}\\nofeaturethrottle1\\ilfomacatclnup12{\\*\\ftnsep \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid1799879 \\chftnsep \n\\par }}{\\*\\ftnsepc \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid1799879 \\chftnsepc \n\\par }}{\\*\\aftnsep \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid1799879 \\chftnsep \n\\par }}{\\*\\aftnsepc \\ltrpar \\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid1799879 \\chftnsepc \n\\par }}\\ltrpar \\sectd \\ltrsect\\psz1\\linex0\\headery0\\footery0\\endnhere\\sectlinegrid360\\sectdefaultcl\\sftnbj {\\*\\pnseclvl1\\pnucrm\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl2\\pnucltr\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl3\n\\pndec\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl4\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxta )}}{\\*\\pnseclvl5\\pndec\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl6\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}\n{\\*\\pnseclvl7\\pnlcrm\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl8\\pnlcltr\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl9\\pnlcrm\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}\\pard\\plain \\ltrpar\n\\s42\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs28\\alang1025 \\ltrch\\fcs0 \\b\\fs28\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 MICROSOFT SOFTWARE LICENSE TERMS}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s43\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\brdrb\\brdrs\\brdrw10\\brsp20 \\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs28\\alang1025 \\ltrch\\fcs0 \n\\b\\fs28\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 MICROSOFT \\hich\\af39\\dbch\\af13\\loch\\f39 AZURE MOBILE SDK }{\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s44\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \nThese license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, w\\hich\\af39\\dbch\\af13\\loch\\f39 \nhich includes the media on which you received it, if any. The terms also apply to any Microsoft}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s34\\ql \\fi-360\\li360\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 updates,}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 supplements,}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 Internet-based services, and}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 support services}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s44\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \nfor this software, unless other terms accompany those items. If so, those terms appl\\hich\\af39\\dbch\\af13\\loch\\f39 y.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 By using the software, you accept these terms. If you do not accept them, do not use the software.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s61\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\brdrt\\brdrs\\brdrw10\\brsp20 \\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid14051756 \\hich\\af39\\dbch\\af11\\loch\\f39 If you comply with these license terms, you have the perpetual rights below.}{\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 1.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 INSTALLATION AND USE RIGHTS. }{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 a.\\tab}}\\pard\\plain \\ltrpar\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Installation and Use.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs57\\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  You may install and\n\\hich\\af39\\dbch\\af13\\loch\\f39  use any number of copies of the software on your devices.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs57\\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 b.\\tab}}\\pard \\ltrpar\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Third Party Programs.}{\\rtlch\\fcs1 \n\\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs57\\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  The software may include third party programs that Microsoft, not the third party, licenses to you under this agreement. Notices, if any, for\n\\hich\\af39\\dbch\\af13\\loch\\f39  the third party program are included for your information only.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 2.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 a.\\tab}}\\pard\\plain \\ltrpar\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Distributable Code.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs57\\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  The software \n\\hich\\af39\\dbch\\af13\\loch\\f39 contains code that you are permitted to distribute in programs you develop if you comply with the terms below.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s49 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 i.\\tab}}\\pard\\plain \\ltrpar\\s49\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1080\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Right to Use and Distribute.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\cs58\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \\hich\\f39 \n The code and text files listed below are \\'93\\loch\\f39 \\hich\\f39 Distributable Code.\\'94}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs19 \\ltrch\\fcs0 \\f3\\fs19\\cf17\\lang9\\langfe1033\\langnp9\\insrsid132812\\charrsid132812 \\loch\\af3\\dbch\\af11\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s36\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0\\pararsid12279895 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39 \\ltrch\\fcs0 \\ul\\lang9\\langfe1033\\langnp9\\insrsid132812\\charrsid132812 \\hich\\af39\\dbch\\af11\\loch\\f39 Redistributable }{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\ul\\lang9\\langfe1033\\langnp9\\insrsid12265033\\charrsid132812 \\hich\\af39\\dbch\\af11\\loch\\f39 Files}{\n\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid12265033\\charrsid132812 \\hich\\af39\\dbch\\af11\\loch\\f39 . You may copy and distribu\\hich\\af39\\dbch\\af11\\loch\\f39 te the object code form of }{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \n\\lang9\\langfe1033\\langnp9\\insrsid132812 .}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid13651777\\charrsid132812 \\hich\\af39\\dbch\\af11\\loch\\f39 dll}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid7042433 \n\\hich\\af39\\dbch\\af11\\loch\\f39 , .jar and iOS framework}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid12279895 \\hich\\af39\\dbch\\af11\\loch\\f39  and static library }{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid132812 \n\\hich\\af39\\dbch\\af11\\loch\\f39 files}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid12265033\\charrsid132812 .}{\\rtlch\\fcs1 \\af39 \\ltrch\\fcs0 \\lang9\\langfe1033\\langnp9\\insrsid12279895\\charrsid12279895 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s50 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s50\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\ul\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Third Party Distribution}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\ulnone\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\ulnone\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s49 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 ii.\\tab}}\\pard\\plain \\ltrpar\\s49\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1077\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Distribution Requirements.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\cs58\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n For any Distributable Code you distribute, you must}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s36\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 add significant primary functionality to it in your programs;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 require distributors and external end users to agree to terms that protect it at least as much as this agreemen\\hich\\af39\\dbch\\af13\\loch\\f39 t; }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 display your valid copyright notice on your programs; and}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\\hich\\f39 \\rquote \\loch\\f39  fees, related to the distribution or use of your programs.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s49 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 iii.\\tab}}\\pard\\plain \\ltrpar\\s49\\ql \\fi-357\\li1077\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1077\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls10\\ilvl2\\outlinelevel2\\adjustright\\rin0\\lin1077\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 Distribution Restrictions.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\cs58\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  You may not}{\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s36\\ql \\fi-358\\li1435\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1437\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin1435\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 alter any copyright, trademark or patent notice in the Distributable Code;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 use Microsoft\\hich\\f39 \\rquote \\loch\\f39 s trademarks in your programs\\hich\\f39 \\rquote \\loch\\f39  names or in a way that suggests your programs come from or are endorsed by Microsoft;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756\\charrsid12265033 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid14051756\\charrsid12265033 \\hich\\af39\\dbch\\af13\\loch\\f39 distribute Distributable Code to run on a platform other than the Microsoft }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid3958498\\charrsid12265033 \n\\hich\\af39\\dbch\\af13\\loch\\f39 Azure }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756\\charrsid12265033 \\hich\\af39\\dbch\\af13\\loch\\f39 platform}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 ;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 include Distributable Code in malicious, deceptive or unlawful programs; or}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s36 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\cf17\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 modify or distribute the source code of any Distributable Code so that any part of it \\hich\\af39\\dbch\\af13\\loch\\f39 \nbecomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s37 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s37\\ql \\fi-357\\li1792\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx1795\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls5\\adjustright\\rin0\\lin1792\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 the code be disclosed or distributed in source code form; or}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s37 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 others have the right to modify it.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 3.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 SCOPE OF LIC\\hich\\af39\\dbch\\af13\\loch\\f39 ENSE.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly pe\n\\hich\\af39\\dbch\\af13\\loch\\f39 rmitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \n\\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s34\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 work around any technical limitations in the software;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 reverse engineer, decompile or disa\\hich\\af39\\dbch\\af13\\loch\\f39 ssemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 publish the software for others to copy;}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 rent, lease or lend the software; or}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 use the software for commercial software hosting service\\hich\\af39\\dbch\\af13\\loch\\f39 s.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 4.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 BACKUP COPY.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n You may make one backup copy of the software. You may use it only to reinstall the software.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 5.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 DOCUMENTATION.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  Any per\\hich\\af39\\dbch\\af13\\loch\\f39 \nson that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 6.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 TRANSFER TO A THIRD PARTY.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  The first user of the software may transfer it and this agreement directly to a third par\n\\hich\\af39\\dbch\\af13\\loch\\f39 \nty. Before the transfer, that party must agree that this agreement applies to the transfer and use of the software. The first user must uninstall the software before transferring it separately from the device. The first user may not retain any copies.}{\n\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 7.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 E\\hich\\af39\\dbch\\af13\\loch\\f39 XPORT RESTRICTIONS.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users\n\\hich\\af39\\dbch\\af13\\loch\\f39  and end use. For additional information, see }{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs73\\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 www.microsoft.com/exporting}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \n\\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 .}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\cs73\\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 8.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 SUPPORT SERVICES. }{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \\hich\\f39 Because this software is \\'93\\loch\\f39 \\hich\\f39 as is,\\'94\\loch\\f39 \n we may not provide support services for it.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 9.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 ENTIRE AGREEMENT.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  This agreement, and the terms for supplements, updates, Inter\\hich\\af39\\dbch\\af13\\loch\\f39 \nnet-based services and support services that you use, are the entire agreement for the software and support services.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 10.\\tab}}\\pard \\ltrpar\\s1\\ql \\fi-360\\li360\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin360\\itap0 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 APPLICABLE LAW.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 a.\\tab}}\\pard\\plain \\ltrpar\\s2\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\ilvl1\\outlinelevel1\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\n\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 United States.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n If you acquired the software in the United States, Washington state law governs the interpretation o\\hich\\af39\\dbch\\af13\\loch\\f39 \nf this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.}\n{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s2 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 b.\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 Outside the United States.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39  If you acquired the software in any other country, the laws of that country apply.}{\n\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 11.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 LEGAL EFFECT.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \\b0\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \n This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rig\\hich\\af39\\dbch\\af13\\loch\\f39 \nhts with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.}{\\rtlch\\fcs1 \\ab0\\af39\\afs20 \\ltrch\\fcs0 \n\\b0\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 12.\\tab}}\\pard \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \\hich\\f39 \nDISCLAIMER OF WARRANTY. The software is licensed \\'93\\loch\\f39 as-is.\\loch\\af39\\dbch\\af13\\hich\\f39 \\'94\\loch\\f39 \n You bear the risk of using it. Microsoft gives no express warranties, guarantees or conditions. You may have additional consumer rights or statutory guarantees under your local laws which this agreement cannot change. To the extent permitted under your \n\\hich\\af39\\dbch\\af13\\loch\\f39 l\\hich\\af39\\dbch\\af13\\loch\\f39 ocal laws, Microsoft excludes the implied warranties of merchantability, fitness for a particular purpose and non-infringement.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s24\\ql \\li357\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 FOR AUSTRALIA \\hich\\f39 \\endash \\loch\\f39 \n You have statutory guarantees under the Australian Consumer Law and nothing in these terms is intended to affect\\hich\\af39\\dbch\\af13\\loch\\f39  those rights.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s1 \\rtlch\\fcs1 \\ab\\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\loch\\af39\\hich\\af39\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 13.\\tab}}\\pard\\plain \\ltrpar\\s1\\ql \\fi-357\\li357\\ri0\\sb120\\sa120\\widctlpar\n\\jclisttab\\tx360\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls12\\outlinelevel0\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid14051756 \\hich\\af39\\dbch\\af11\\loch\\f39 \n. You can recover from Microsoft and its suppliers only direct damages up to U.S. $5.00. You cannot recover any other damages, including consequential, lost profits, special, ind\\hich\\af39\\dbch\\af11\\loch\\f39 irect or incidental damages.}{\\rtlch\\fcs1 \n\\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s24\\ql \\li357\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin357\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 This limitation applies to}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}\\pard\\plain \\ltrpar\\s34\\ql \\fi-363\\li720\\ri0\\sb120\\sa120\\nowidctlpar\n\\jclisttab\\tx720\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\dbch\\af13\\insrsid4605597 \n\\par {\\listtext\\pard\\plain\\ltrpar \\s34 \\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\loch\\af3\\hich\\af3\\dbch\\af13\\insrsid14051756 \\loch\\af3\\dbch\\af13\\hich\\f3 \\'b7\\tab}}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \n\\hich\\af39\\dbch\\af13\\loch\\f39 claims for breach of contract, breach of warranty, guarantee or con\\hich\\af39\\dbch\\af13\\loch\\f39 dition, strict liability, negligence, or other tort to the extent permitted by applicable law.}{\\rtlch\\fcs1 \\af39\\afs20 \n\\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\ql \\li360\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin360\\itap0 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid14051756 \\hich\\af39\\dbch\\af13\\loch\\f39 \nIt also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because \\hich\\af39\\dbch\\af13\\loch\\f39 \nyour country may not allow the exclusion or limitation of incidental, consequential or other damages.}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid4605597 \n\\par }\\pard\\plain \\ltrpar\\s79\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid132812 \\rtlch\\fcs1 \\ab\\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\b\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af13\\loch\\f39 \nPlease note: As this software is distributed in Quebec, Canada, these license terms are provided below in French.\n\\par }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\lang1036\\langfe1033\\dbch\\af13\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af13\\loch\\f39 Remarque\\~\\hich\\f39 : Ce logiciel \\'e9\\loch\\f39 \\hich\\f39 tant distribu\\'e9\\loch\\f39  a\n\\hich\\af39\\dbch\\af13\\loch\\f39 \\hich\\f39 u Qu\\'e9\\loch\\f39 \\hich\\f39 bec, Canada, les termes de cette licence sont fournis ci-dessous en fran\\'e7\\loch\\f39 ais.\n\\par }\\pard\\plain \\ltrpar\\ql \\li0\\ri0\\sb120\\sa120\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0\\pararsid132812 \\rtlch\\fcs1 \\af39\\afs19\\alang1025 \\ltrch\\fcs0 \n\\fs19\\lang1033\\langfe1033\\loch\\af39\\hich\\af39\\dbch\\af11\\cgrid\\langnp1033\\langfenp1033 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 EXON\\'c9\\loch\\f39 \nRATION DE GARANTIE}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 . Le logiciel vis\\'e9\\loch\\f39 \\hich\\f39  par une licence est offert \\'ab\\loch\\f39 \n\\hich\\f39  tel quel \\'bb\\loch\\f39 \\hich\\f39 . Toute utilisation de ce logiciel est \\'e0\\loch\\f39 \\hich\\f39  votre seule risque et p\\'e9\\loch\\f39 ril. Microsoft n\\hich\\f39 \\rquote \\loch\\f39 accorde au\\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 \ncune autre garantie expresse. Vous pouvez b\\'e9\\loch\\f39 \\hich\\f39 n\\'e9\\loch\\f39 \\hich\\f39 \nficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\\'e9\\loch\\f39  ma\\hich\\af39\\dbch\\af11\\loch\\f39 r\n\\hich\\af39\\dbch\\af11\\loch\\f39 chande, d\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 ad\\'e9\\loch\\f39 \\hich\\f39 quation \\'e0\\loch\\f39  un usage particulier et d\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 absence de contrefa\\'e7\\loch\\f39 on sont exclues.\n\\par }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 LIMITATION DES DOMMAGES-INT\\'c9\\loch\\f39 \\hich\\f39 R\\'ca\\loch\\f39 \\hich\\f39 \nTS ET EXCLUSION DE RESPONSABILIT\\'c9\\loch\\f39  POUR LES DOMMAGES}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \n. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dom\\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 mages directs uniquement \\'e0\\loch\\f39 \\hich\\f39  hauteur de 5,00 $ US. Vous ne pouvez pr\\'e9\\loch\\f39 \\hich\\f39 tendre \\'e0\n\\loch\\f39 \\hich\\f39  aucune indemnisation pour les autres dommages, y compris les dommages sp\\'e9\\loch\\f39 \\hich\\f39 ciaux, indirects ou accessoires et pertes de b\\'e9\\loch\\f39 \\hich\\f39 n\\'e9\\loch\\f39 fices.\n\\par \\hich\\af39\\dbch\\af11\\loch\\f39 Cette limitation concerne :\n\\par \\bullet \\tab \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 tout ce qui est reli\\'e9\\hich\\af39\\dbch\\af11\\loch\\f39  au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers ; et\n\\par \\bullet \\tab \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 les r\\'e9\\loch\\f39 \\hich\\f39 clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\\'e9\\loch\\f39 \\hich\\f39  stricte, de n\\'e9\\loch\\f39 gligence ou\n\\hich\\af39\\dbch\\af11\\loch\\f39  d\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 une autre faute dans la limite autoris\\'e9\\loch\\f39 e par la loi en vigueur.\n\\par \\hich\\af39\\dbch\\af11\\loch\\f39 Elle s\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 applique \\'e9\\loch\\f39 \\hich\\f39 galement, m\\'ea\\loch\\f39 \\hich\\f39 me si Microsoft connaissait ou devrait conna\\'ee\\loch\\f39 tre l\\hich\\f39 \\rquote \\'e9\\loch\\f39 \\hich\\f39 \nventualit\\'e9\\loch\\f39  d\\hich\\f39 \\rquote \\loch\\f39 un tel dommage. Si votre pays n\\hich\\f39 \\rquote \\loch\\f39 autorise pas l\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 exclusion ou la limitation de responsabilit\\'e9\\hich\\af39\\dbch\\af11\\loch\\f39 \n pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l\\hich\\f39 \\rquote \\loch\\f39 exclusion ci-dessus ne s\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 appliquera pas \\'e0\\loch\\f39 \\hich\\f39  votre \\'e9\n\\loch\\f39 gard.\n\\par }{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\b\\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 EFFET JURIDIQUE}{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \n\\fs20\\lang1036\\langfe1033\\langnp1036\\insrsid132812\\charrsid16255017 \\hich\\af39\\dbch\\af11\\loch\\f39 \\hich\\f39 . Le pr\\'e9\\loch\\f39 \\hich\\f39 sent contrat d\\'e9\\loch\\f39 crit certains droits juridiques. Vous pourriez avoir \\hich\\af39\\dbch\\af11\\loch\\f39 d\n\\hich\\f39 \\rquote \\loch\\f39 \\hich\\f39 autres droits pr\\'e9\\loch\\f39 \\hich\\f39 vus par les lois de votre pays. Le pr\\'e9\\loch\\f39 \\hich\\f39 sent contrat ne modifie pas les droits que vous conf\\'e8\\loch\\f39 \nrent les lois de votre pays si celles-ci ne le permettent pas.\n\\par }\\pard \\ltrpar\\ql \\li360\\ri0\\sb120\\sa120\\nowidctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin360\\itap0 {\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\dbch\\af13\\insrsid132812 \n\\par }{\\*\\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a\n9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad\n5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6\nb01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0\n0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6\na7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f\nc7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512\n0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462\na1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865\n6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b\n4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b\n4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f\n7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87\n615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad\n79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b\n5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab\n999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9\n699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586\n8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6\n0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f\n9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be\n15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979\n3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d\n32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a\nf074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86\ne877f0034e16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb\n44f95d843b5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a\n6409fb44d08741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c\n3d9058edf2c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db0256\n5e85f3b9660d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276\nb9f7dec44b7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8\nc33585b5fb9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e\n51440ca2e0088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95\nb21be5ceaf8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff\n6dce591a26ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec6\n9ffb9e65d028d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239\nb75a5bb1e6345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a449\n59d366ad93b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e8\n2db8df9f30254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468\n656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4\n350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d2624\n52282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe5141\n73d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c020000130000000000000000\n0000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000\n000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c0000000000000000000000000019\n0200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b00001600000000\n000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b01000027\n00000000000000000000000000a00900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d0100009b0a00000000}\n{\\*\\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d\n617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169\n6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363\n656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}\n{\\*\\latentstyles\\lsdstimax371\\lsdlockeddef0\\lsdsemihiddendef0\\lsdunhideuseddef0\\lsdqformatdef0\\lsdprioritydef99{\\lsdlockedexcept \\lsdqformat1 \\lsdpriority0 \\lsdlocked0 Normal;\\lsdqformat1 \\lsdlocked0 heading 1;\\lsdqformat1 \\lsdlocked0 heading 2;\n\\lsdqformat1 \\lsdlocked0 heading 3;\\lsdqformat1 \\lsdlocked0 heading 4;\\lsdqformat1 \\lsdlocked0 heading 5;\\lsdqformat1 \\lsdlocked0 heading 6;\\lsdqformat1 \\lsdlocked0 heading 7;\\lsdqformat1 \\lsdlocked0 heading 8;\\lsdqformat1 \\lsdlocked0 heading 9;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 1;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 4;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 6;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 7;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 8;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index 9;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 1;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 6;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 7;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 8;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority39 \\lsdlocked0 toc 9;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Normal Indent;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 footnote text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 annotation text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 header;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 footer;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 index heading;\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority35 \\lsdlocked0 caption;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 table of figures;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 envelope address;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 envelope return;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 footnote reference;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 annotation reference;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 line number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 page number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 endnote reference;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 endnote text;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 table of authorities;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 macro;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 toa heading;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Bullet 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 4;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Number 5;\\lsdqformat1 \\lsdpriority10 \\lsdlocked0 Title;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Closing;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Signature;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority1 \\lsdlocked0 Default Paragraph Font;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text Indent;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 4;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 List Continue 5;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Message Header;\\lsdqformat1 \\lsdpriority11 \\lsdlocked0 Subtitle;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Salutation;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Date;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text First Indent;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text First Indent 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Note Heading;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text Indent 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Body Text Indent 3;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Block Text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Hyperlink;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 FollowedHyperlink;\\lsdqformat1 \\lsdpriority22 \\lsdlocked0 Strong;\n\\lsdqformat1 \\lsdpriority20 \\lsdlocked0 Emphasis;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Document Map;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Plain Text;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 E-mail Signature;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Top of Form;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Bottom of Form;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Normal (Web);\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Acronym;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Address;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Cite;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Code;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Definition;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Keyboard;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Preformatted;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Sample;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Typewriter;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 HTML Variable;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 annotation subject;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 No List;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Outline List 1;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Outline List 2;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Outline List 3;\\lsdsemihidden1 \\lsdunhideused1 \\lsdlocked0 Balloon Text;\\lsdpriority59 \\lsdlocked0 Table Grid;\n\\lsdsemihidden1 \\lsdlocked0 Placeholder Text;\\lsdqformat1 \\lsdpriority1 \\lsdlocked0 No Spacing;\\lsdpriority60 \\lsdlocked0 Light Shading;\\lsdpriority61 \\lsdlocked0 Light List;\\lsdpriority62 \\lsdlocked0 Light Grid;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1;\\lsdpriority64 \\lsdlocked0 Medium Shading 2;\\lsdpriority65 \\lsdlocked0 Medium List 1;\\lsdpriority66 \\lsdlocked0 Medium List 2;\\lsdpriority67 \\lsdlocked0 Medium Grid 1;\\lsdpriority68 \\lsdlocked0 Medium Grid 2;\n\\lsdpriority69 \\lsdlocked0 Medium Grid 3;\\lsdpriority70 \\lsdlocked0 Dark List;\\lsdpriority71 \\lsdlocked0 Colorful Shading;\\lsdpriority72 \\lsdlocked0 Colorful List;\\lsdpriority73 \\lsdlocked0 Colorful Grid;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 1;\n\\lsdpriority61 \\lsdlocked0 Light List Accent 1;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 1;\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 1;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 1;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 1;\n\\lsdsemihidden1 \\lsdlocked0 Revision;\\lsdqformat1 \\lsdpriority34 \\lsdlocked0 List Paragraph;\\lsdqformat1 \\lsdpriority29 \\lsdlocked0 Quote;\\lsdqformat1 \\lsdpriority30 \\lsdlocked0 Intense Quote;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 1;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 1;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 1;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 1;\\lsdpriority70 \\lsdlocked0 Dark List Accent 1;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 1;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 1;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 1;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 2;\\lsdpriority61 \\lsdlocked0 Light List Accent 2;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 2;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 2;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 2;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 2;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 2;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 2;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 2;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 2;\\lsdpriority70 \\lsdlocked0 Dark List Accent 2;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 2;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 2;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 2;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 3;\\lsdpriority61 \\lsdlocked0 Light List Accent 3;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 3;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 3;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 3;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 3;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 3;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 3;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 3;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 3;\\lsdpriority70 \\lsdlocked0 Dark List Accent 3;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 3;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 3;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 3;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 4;\\lsdpriority61 \\lsdlocked0 Light List Accent 4;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 4;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 4;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 4;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 4;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 4;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 4;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 4;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 4;\\lsdpriority70 \\lsdlocked0 Dark List Accent 4;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 4;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 4;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 4;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 5;\\lsdpriority61 \\lsdlocked0 Light List Accent 5;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 5;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 5;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 5;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 5;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 5;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 5;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 5;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 5;\\lsdpriority70 \\lsdlocked0 Dark List Accent 5;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 5;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 5;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 5;\\lsdpriority60 \\lsdlocked0 Light Shading Accent 6;\\lsdpriority61 \\lsdlocked0 Light List Accent 6;\\lsdpriority62 \\lsdlocked0 Light Grid Accent 6;\n\\lsdpriority63 \\lsdlocked0 Medium Shading 1 Accent 6;\\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 6;\\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 6;\\lsdpriority66 \\lsdlocked0 Medium List 2 Accent 6;\n\\lsdpriority67 \\lsdlocked0 Medium Grid 1 Accent 6;\\lsdpriority68 \\lsdlocked0 Medium Grid 2 Accent 6;\\lsdpriority69 \\lsdlocked0 Medium Grid 3 Accent 6;\\lsdpriority70 \\lsdlocked0 Dark List Accent 6;\\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 6;\n\\lsdpriority72 \\lsdlocked0 Colorful List Accent 6;\\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 6;\\lsdqformat1 \\lsdpriority19 \\lsdlocked0 Subtle Emphasis;\\lsdqformat1 \\lsdpriority21 \\lsdlocked0 Intense Emphasis;\n\\lsdqformat1 \\lsdpriority31 \\lsdlocked0 Subtle Reference;\\lsdqformat1 \\lsdpriority32 \\lsdlocked0 Intense Reference;\\lsdqformat1 \\lsdpriority33 \\lsdlocked0 Book Title;\\lsdsemihidden1 \\lsdunhideused1 \\lsdpriority37 \\lsdlocked0 Bibliography;\n\\lsdsemihidden1 \\lsdunhideused1 \\lsdqformat1 \\lsdpriority39 \\lsdlocked0 TOC Heading;\\lsdpriority41 \\lsdlocked0 Plain Table 1;\\lsdpriority42 \\lsdlocked0 Plain Table 2;\\lsdpriority43 \\lsdlocked0 Plain Table 3;\\lsdpriority44 \\lsdlocked0 Plain Table 4;\n\\lsdpriority45 \\lsdlocked0 Plain Table 5;\\lsdpriority40 \\lsdlocked0 Grid Table Light;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light;\\lsdpriority47 \\lsdlocked0 Grid Table 2;\\lsdpriority48 \\lsdlocked0 Grid Table 3;\\lsdpriority49 \\lsdlocked0 Grid Table 4;\n\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 1;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 1;\n\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 1;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 1;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 1;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 1;\n\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 1;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 2;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 2;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 2;\n\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 2;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 2;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 2;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 2;\n\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 3;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 3;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 3;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 3;\n\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 3;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 3;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 3;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 4;\n\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 4;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 4;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 4;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 4;\n\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 4;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 4;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 5;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 5;\n\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 5;\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 5;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 5;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 5;\n\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 5;\\lsdpriority46 \\lsdlocked0 Grid Table 1 Light Accent 6;\\lsdpriority47 \\lsdlocked0 Grid Table 2 Accent 6;\\lsdpriority48 \\lsdlocked0 Grid Table 3 Accent 6;\n\\lsdpriority49 \\lsdlocked0 Grid Table 4 Accent 6;\\lsdpriority50 \\lsdlocked0 Grid Table 5 Dark Accent 6;\\lsdpriority51 \\lsdlocked0 Grid Table 6 Colorful Accent 6;\\lsdpriority52 \\lsdlocked0 Grid Table 7 Colorful Accent 6;\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light;\\lsdpriority47 \\lsdlocked0 List Table 2;\\lsdpriority48 \\lsdlocked0 List Table 3;\\lsdpriority49 \\lsdlocked0 List Table 4;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark;\n\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 1;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 1;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 1;\n\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 1;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 1;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 1;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 1;\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 2;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 2;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 2;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 2;\n\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 2;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 2;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 2;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 3;\n\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 3;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 3;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 3;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 3;\n\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 3;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 3;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 4;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 4;\n\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 4;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 4;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 4;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 4;\n\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 4;\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 5;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 5;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 5;\n\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 5;\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 5;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 5;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 5;\n\\lsdpriority46 \\lsdlocked0 List Table 1 Light Accent 6;\\lsdpriority47 \\lsdlocked0 List Table 2 Accent 6;\\lsdpriority48 \\lsdlocked0 List Table 3 Accent 6;\\lsdpriority49 \\lsdlocked0 List Table 4 Accent 6;\n\\lsdpriority50 \\lsdlocked0 List Table 5 Dark Accent 6;\\lsdpriority51 \\lsdlocked0 List Table 6 Colorful Accent 6;\\lsdpriority52 \\lsdlocked0 List Table 7 Colorful Accent 6;}}{\\*\\datastore 010500000200000018000000\n4d73786d6c322e534158584d4c5265616465722e362e30000000000000000000003a0000\nd0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000002000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nfffffffffffffffffdffffff0a000000120000000400000005000000060000000700000008000000090000000b0000000e0000000c0000000d0000000f0000001100000010000000130000001a000000feffffff1400000015000000160000001700000018000000190000001b000000fefffffffeffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff010000000c6ad98892f1d411a65f0040963251e5000000000000000000000000409a\na067b889cf010300000040270000000000004d0073006f004400610074006100530074006f0072006500000000000000000000000000000000000000000000000000000000000000000000000000000000001a000101ffffffffffffffff050000000000000000000000000000000000000000000000409aa067b889cf01\n409aa067b889cf0100000000000000000000000032003500cd00dd00c10058004600c3005900550053005400de004900db00db00c300d900310034004700d0003d003d000000000000000000000000000000000032000101ffffffffffffffff030000000000000000000000000000000000000000000000409aa067b889\ncf01409aa067b889cf010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff04000000ffffffff000000000000000000000000000000000000000000000000\n00000000000000000000000000000000ad0d0000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a00\n00001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000feffffff3800000039000000\n3a0000003b0000003c0000003d0000003e0000003f0000004000000041000000420000004300000044000000feffffff460000004700000048000000feffffff4a0000004b0000004c0000004d0000004e000000feffffff500000005100000052000000feffffff5400000055000000560000005700000058000000feff\nffff5a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000\n790000007a0000007b0000007c0000007d0000007e0000007f000000800000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d38223f3e3c63743a636f6e74656e7454797065536368656d612063743a5f3d2222206d613a5f3d2222206d613a636f6e74656e74547970654e616d65\n3d22446f63756d656e7422206d613a636f6e74656e745479706549443d223078303130313030323237393545423235314434363434464245433132424435443442303844374322206d613a636f6e74656e745479706556657273696f6e3d223022206d613a636f6e74656e74547970654465736372697074696f6e3d2243\n72656174652061206e657720646f63756d656e742e22206d613a636f6e74656e745479706553636f70653d2222206d613a76657273696f6e49443d2264636264643635633032373738363565303939666233646330353635336235372220786d6c6e733a63743d22687474703a2f2f736368656d61732e6d6963726f736f\n66742e636f6d2f6f66666963652f323030362f6d657461646174612f636f6e74656e74547970652220786d6c6e733a6d613d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f6d657461646174612f70726f706572746965732f6d65746141747472696275746573\n223e0d0a3c7873643a736368656d61207461726765744e616d6573706163653d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f6d657461646174612f70726f7065727469657322206d613a726f6f743d227472756522206d613a6669656c647349443d22346165\n62323063306533343432363733616637656531303738363435383736342220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a703d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f\n6d657461646174612f70726f70657274696573223e0d0a3c7873643a656c656d656e74206e616d653d2270726f70657274696573223e0d0a3c7873643a636f6d706c6578547970653e0d0a3c7873643a73657175656e63653e0d0a3c7873643a656c656d656e74206e616d653d22646f63756d656e744d616e6167656d65\n6e74223e0d0a3c7873643a636f6d706c6578547970653e0d0a3c7873643a616c6c2f3e0d0a3c2f7873643a636f6d706c6578547970653e0d0a3c2f7873643a656c656d656e743e0d0a3c2f7873643a73657175656e63653e0d0a3c2f7873643a636f6d706c6578547970653e0d0a3c2f7873643a656c656d656e743e0d0a\n3c2f7873643a736368656d613e0d0a3c7873643a736368656d61207461726765744e616d6573706163653d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f7061636b6167652f323030362f6d657461646174612f636f72652d70726f706572746965732220656c656d656e74466f\n726d44656661756c743d227175616c69666965642220617474726962757465466f726d44656661756c743d22756e7175616c69666965642220626c6f636b44656661756c743d2223616c6c2220786d6c6e733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f7061636b6167652f\n323030362f6d657461646174612f636f72652d70726f706572746965732220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612d696e7374616e\n63652220786d6c6e733a64633d22687474703a2f2f7075726c2e6f72672f64632f656c656d656e74732f312e312f2220786d6c6e733a64637465726d733d22687474703a2f2f7075726c2e6f72672f64632f7465726d732f2220786d6c6e733a6f646f633d22687474703a2f2f736368656d61732e6d6963726f736f6674\n2e636f6d2f6f66666963652f696e7465726e616c2f323030352f696e7465726e616c446f63756d656e746174696f6e223e0d0a3c7873643a696d706f7274206e616d6573706163653d22687474703a2f2f7075726c2e6f72672f64632f656c656d656e74732f312e312f2220736368656d614c6f636174696f6e3d226874\n74703a2f2f6475626c696e636f72652e6f72672f736368656d61732f786d6c732f7164632f323030332f30342f30322f64632e787364222f3e0d0a3c7873643a696d706f7274206e616d6573706163653d22687474703a2f2f7075726c2e6f72672f64632f7465726d732f2220736368656d614c6f636174696f6e3d2268\n7474703a2f2f6475626c696e636f72652e6f72672f736368656d61732f786d6c732f7164632f323030332f30342f30322f64637465726d732e787364222f3e0d0a3c7873643a656c656d656e74206e616d653d22636f726550726f706572746965732220747970653d2243545f636f726550726f70657274696573222f3e\n0d0a3c7873643a636f6d706c657854797065206e616d653d2243545f636f726550726f70657274696573223e0d0a3c7873643a616c6c3e0d0a3c7873643a656c656d656e74207265663d2264633a63726561746f7222206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c65\n6d656e74207265663d2264637465726d733a6372656174656422206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c656d656e74207265663d2264633a6964656e74696669657222206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c787364\n3a656c656d656e74206e616d653d22636f6e74656e745479706522206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e6722206d613a696e6465783d223022206d613a646973706c61794e616d653d22436f6e74656e74205479706522206d613a726561644f6e\n6c793d2274727565222f3e0d0a3c7873643a656c656d656e74207265663d2264633a7469746c6522206d696e4f63637572733d223022206d61784f63637572733d223122206d613a696e6465783d223422206d613a646973706c61794e616d653d225469746c65222f3e0d0a3c7873643a656c656d656e74207265663d22\n64633a7375626a65637422206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c656d656e74207265663d2264633a6465736372697074696f6e22206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c656d656e74206e616d653d\n226b6579776f72647322206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67222f3e0d0a3c7873643a656c656d656e74207265663d2264633a6c616e677561676522206d696e4f63637572733d223022206d61784f63637572733d2231222f3e0d0a3c787364\n3a656c656d656e74206e616d653d2263617465676f727922206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67222f3e0d0a3c7873643a656c656d656e74206e616d653d2276657273696f6e22206d696e4f63637572733d223022206d61784f63637572733d\n22312220747970653d227873643a737472696e67222f3e0d0a3c7873643a656c656d656e74206e616d653d227265766973696f6e22206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67223e0d0a3c7873643a616e6e6f746174696f6e3e0d0a3c7873643a64\n6f63756d656e746174696f6e3e0d0a202020202020202020202020202020202020202020202020546869732076616c756520696e6469636174657320746865206e756d626572206f66207361766573206f72207265766973696f6e732e20546865206170706c69636174696f6e20697320726573706f6e7369626c652066\n6f72207570646174696e6720746869732076616c75652061667465722065616368207265766973696f6e2e0d0a20202020202020202020202020202020202020203c2f7873643a646f63756d656e746174696f6e3e0d0a3c2f7873643a616e6e6f746174696f6e3e0d0a3c2f7873643a656c656d656e743e0d0a3c787364\n3a656c656d656e74206e616d653d226c6173744d6f646966696564427922206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67222f3e0d0a3c7873643a656c656d656e74207265663d2264637465726d733a6d6f64696669656422206d696e4f63637572733d\n223022206d61784f63637572733d2231222f3e0d0a3c7873643a656c656d656e74206e616d653d226c6173745072696e74656422206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a6461746554696d65222f3e0d0a3c7873643a656c656d656e74206e616d653d22636f6e\n74656e7453746174757322206d696e4f63637572733d223022206d61784f63637572733d22312220747970653d227873643a737472696e67222f3e0d0a3c2f7873643a616c6c3e0d0a3c2f7873643a636f6d706c6578547970653e0d0a3c2f7873643a736368656d613e0d0a3c2f63743a636f6e74656e74547970655363\n68656d613e000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a64617461500072006f007000650072007400690065007300000000000000000000000000000000000000\n000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000370000006d030000000000004100d300cb00470056003200ce00dd00c0004500de00df004c00d100d300d0004e005800\ndd00ce004e00c0003d003d000000000000000000000000000000000032000101020000000b000000060000000000000000000000000000000000000000000000409aa067b889cf01409aa067b889cf010000000000000000000000004900740065006d000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000a000201ffffffff07000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000045000000d800000000000000500072006f007000650072007400690065007300000000000000000000000000\n000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000049000000550100000000000073746f72654974656d2064733a6974656d49443d227b3835374446423731\n2d363337312d343436312d393346382d3845464238463936444531427d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c64733a73\n6368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f6d657461646174612f636f6e74656e7454797065222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66\n742e636f6d2f6f66666963652f323030362f6d657461646174612f70726f706572746965732f6d65746141747472696275746573222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222f3e3c64733a736368656d6152656620\n64733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f323030362f6d657461646174612f70726f70657274696573222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f7267\n2f7061636b6167652f323030362f6d657461646174612f636f72652d70726f70657274696573222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f7075726c2e6f72672f64632f656c656d656e74732f312e312f222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f\n2f7075726c2e6f72672f64632f7465726d732f222f3e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f6f66666963652f696e7465726e616c2f323030352f696e7465726e616c446f63756d656e746174696f6e222f3e3c2f64733a736368\n656d61526566733e3c2f64733a6461746173746f72654974656d3e000000000000000000000000000000000000003c623a536f75726365732053656c65637465645374796c653d225c4150412e58534c22205374796c654e616d653d224150412220786d6c6e733a623d22687474703a2f2f736368656d61732e6f70656e\n786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f6772617068792220786d6c6e733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879223e3c2f\n623a536f75726365733e000000000000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d206473\n3a6974656d49443d227b35354336334130332d424443422d344638302d424632462d3143463033353746364533367d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64\n733a736368656d61526566733e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879222f3e3c2f64733a736368656d61526566733e3c2f64733a64\n61746173746f72654974656d3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d3822207374616e64616c6f6e653d22796573223f3e3c44696374696f6e614700cf00cd00\n4600c80054005800d300da00d400da003100d700c1005800ce00da004d004700d800c80051003d003d000000000000000000000000000000000032000100ffffffffffffffff090000000000000000000000000000000000000000000000409aa067b889cf01409aa067b889cf0100000000000000000000000049007400\n65006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff0a000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000004f000000c1000000000000005000\n72006f007000650072007400690065007300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000530000005401000000000000\nc900c70047003500c400c90055004a0058005500470042004c004600db0046004b00c5005000c4005600d0003d003d000000000000000000000000000000000032000101080000000e0000000c0000000000000000000000000000000000000000000000409aa067b889cf01409aa067b889cf0100000000000000000000\n00007279205361766564427956657273696f6e3d22332e362e31382e3022204d696e696d756d56657273696f6e3d22332e362e342e302220786d6c6e733d22687474703a2f2f736368656d61732e627573696e6573732d696e746567726974792e636f6d2f6465616c6275696c6465722f323030362f64696374696f6e61\n7279222f3e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64\n733a6461746173746f72654974656d2064733a6974656d49443d227b41313435464231412d463333352d344545422d394244452d3135454545384331423841317d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f\n323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e627573696e6573732d696e746567726974792e636f6d2f6465616c6275696c6465722f323030362f64696374696f6e617279222f3e3c2f64733a\n736368656d61526566733e3c2f64733a6461746173746f72654974656d3e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d3822207374616e64616c6f6e653d22796573\n223f3e3c53657373696f6e20786d6c6e733d22687474703a2f2f736368656d61732e627573696e6573732d696e746567726974792e636f6d2f6465616c6275696c6465722f323030362f616e7377657273223e3c5661726961626c65204e616d653d226d73636f6d223e3c56616c75653e66616c73653c2f56616c75653e\n3c2f5661726961626c653e3c5661726961626c65204e616d653d2266696c6574797065223e3c56616c75653e2e7274663c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226c616e6775616765616c6c223e3c56616c75653e456e676c6973683c2f56616c75653e3c2f566172696162\n6c653e3c5661726961626c65204e616d653d225f5f6576656e7474617267657422204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c7365222f3e3c5661726961626c65204e616d653d225f5f6576656e74617267756d656e7422204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c\n7365222f3e3c5661726961626c65204e616d4900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff0d000000ffffffff00000000000000000000000000000000000000000000000000000000\n000000000000000059000000e70c000000000000500072006f007000650072007400690065007300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000\n000000000000000000008d0000005101000000000000d600cb003100db0030005700d000cb00c400d400da00d300dc00dd004900350059004400db0046004300d0003d003d000000000000000000000000000000000032000100ffffffffffffffff0f0000000000000000000000000000000000000000000000409aa067\nb889cf01409aa067b889cf010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff10000000ffffffff00000000000000000000000000000000000000000000\n000000000000000000000000000093000000db000000000000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c000000feffffff8e0000008f000000900000009100000092000000feffffff940000009500000096000000feffffff9800000099000000\n9a0000009b0000009c000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff653d225f5f72657175657374646967657374222052656c6576616e743d2266616c7365223e3c56616c75653e307832413132373530313835344436453732354235383634334143363432343044324330453738303532304133453636\n434335343433424146394143413637333635323134443445323036394639304346463532463630354238333845433844353332353237344143464233453336363734463338324439434344353144414336302c3234204a756e20323031332031363a30353a3130202d303030303c2f56616c75653e3c2f5661726961626c\n653e3c5661726961626c65204e616d653d225f5f6576656e7476616c69646174696f6e222052656c6576616e743d2266616c7365223e3c56616c75653e2f77455741674b4f3239697043414c623449756d444c2b75437032397970624e71637a6d5230493767414e52424e67333c2f56616c75653e3c2f5661726961626c\n653e3c5661726961626c65204e616d653d2263746c303024706c616365686f6c6465726d61696e24686663657370636f6e74726163747265666572656e6365222052656c6576616e743d2266616c7365223e3c56616c75653e323031332d4d41494e422d3030303636303c2f56616c75653e3c2f5661726961626c653e3c\n5661726961626c65204e616d653d226c61756e6368646976616374696f6e22204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c7365222f3e3c5661726961626c65204e616d653d225f5f737064756d6d79746578743122204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c736522\n2f3e3c5661726961626c65204e616d653d225f5f737064756d6d79746578743222204b6e6f776e3d2266616c7365222052656c6576616e743d2266616c7365222f3e3c5661726961626c65204e616d653d2263616e616461617661696c223e3c56616c75653e747275653c2f56616c75653e3c2f5661726961626c653e3c\n5661726961626c65204e616d653d2263616e6164616672656e6368223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2266696c65666f726d6174223e3c56616c75653e747275653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c\n65204e616d653d22736f66747761726574797065223e3c56616c75653e467265652c205374616e64616c6f6e6520536f6674776172653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2270726f647563746e616d65223e3c56616c75653e57696e646f777320417a757265204d6f62\n696c652053444b3c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226e756d6265726f66636f70696573223e3c56616c75653e416e79206e756d626572206f6620636f706965733c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2270726f647563\n7476657273696f6e223e3c56616c75653e4e6f6e653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2276657273696f6e76697369626c65223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226368616e6e656c\n223e3c56616c75653e52657461696c3c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d227374616e64616c6f6e657573657269676874223e3c56616c75653e4f6e2074686520757365722773206465766963652873293c2f56616c75653e3c2f5661726961626c653e3c566172696162\n6c65204e616d653d226d65646961656c656d656e747374656d706c61746573223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2264697374726962757461626c65636f6465223e3c56616c75653e747275653c2f56616c75653e3c2f566172696162\n6c653e3c5661726961626c65204e616d653d2264697374726962757461626c65636f646574797065223e3c56616c75653e4d4643732c2041544c7320616e6420435254733c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d22696e7465726e616c726561737369676e6d656e74223e3c\n56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226c6963656e73657472616e73666572223e3c56616c75653e747275653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226f746865726d6963726f736f667470726f\n6772616d73223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2270726572656c65617365636f6465223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d22746869726470617274\n7970726f6772616d73223e3c56616c75653e747275653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d2262656e63686d61726b696e67223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226d706567223e3c56\n616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d22696e7465726e657462617365647365727669636573223e3c56616c75653e66616c73653c2f56616c75653e3c2f5661726961626c653e3c5661726961626c65204e616d653d226f726967696e61746f7222\n3e3c56616c75653e5245444d4f4e445c697269736c3c2f56616c75653e3c2f5661726961626c653e3c506172616d65746572204e616d653d2264625f646973706c61795f616c6c5f636f6d6d656e7473223e3c56616c75653e66616c73653c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e\n616d653d2264625f73686f775f73756d6d617279223e3c56616c75653e64697361626c65643c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f74656d706c6174655f666f726d223e3c56616c75653e35663336633330632d333166662d343666652d386264382d316563\n3864663732623131363c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f74656d706c6174655f7265666572656e6365223e3c56616c75653e5553455445524d535f4d41494e423c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d\n2264625f74656d706c6174655f76657273696f6e223e3c56616c75653e32303132303831363c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f7472616e73616374696f6e5f65787465726e616c5f6c6162656c223e3c56616c75653e323031332d4d41494e422d303030\n3636303c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f7472616e73616374696f6e5f6964223e3c56616c75653e383238393c2f56616c75653e3c2f506172616d657465723e3c506172616d65746572204e616d653d2264625f766973697465645f7061676573223e3c\n56616c75653e313c2f56616c75653e3c56616c75653e323c2f56616c75653e3c56616c75653e333c2f56616c75653e3c56616c75653e343c2f56616c75653e3c56616c75653e363c2f56616c75653e3c56616c75653e373c2f56616c75653e3c2f506172616d657465723e3c2f53657373696f6e3e000000000000000000\n000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d2064733a6974656d49443d227b39323946373141362d303939352d343135442d383132432d\n3545433532413533453435377d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c64733a736368656d615265662064733a7572693d\n22687474703a2f2f736368656d61732e627573696e6573732d696e746567726974792e636f6d2f6465616c6275696c6465722f323030362f616e7377657273222f3e3c2f64733a736368656d61526566733e3c2f64733a6461746173746f72654974656d3e00000000000000000000000000000000000000000000000000\n000000000000000000000000000000000000000000003c3f6d736f2d636f6e74656e74547970653f3e3c466f726d54656d706c6174657320786d6c6e733d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f7368617265706f696e742f76332f636f6e74656e74747970652f666f726d73223e3c\n446973706c61793e446f63756d656e744c696272617279466f726d3c2f446973706c61793e3c456469743e446f63756d656e744c696272617279466f726d3c2f456469743e3c4e65773e446f63756d656e744c696272617279466f726d3c2f4e65773e3c2f466f726d54656d706c617465733e0000000000000000000000\n00000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a64617461500072006f00700065007200740069006500730000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000970000004f0100000000000000000000000000000000000000000000000000000000000000000000000000000000\n00000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073746f72654974656d2064733a6974656d49443d227b363946424236\n44412d324236432d344539332d423346332d4432314636303345433530427d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c6473\n3a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6d6963726f736f66742e636f6d2f7368617265706f696e742f76332f636f6e74656e74747970652f666f726d73222f3e3c2f64733a736368656d61526566733e3c2f64733a6461746173746f72654974656d3e000000000000000000\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105000000000000}}"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/TestLoggingFilter.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import <WindowsAzureMobileServices/WindowsAzureMobileServices.h>\n\n// Useful for debugging - dumps HTTP requests and responses to the output console.\n@interface TestLoggingFilter : NSObject<MSFilter>\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/TestLoggingFilter.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"TestLoggingFilter.h\"\n\n@implementation TestLoggingFilter\n\n- (void)handleRequest:(NSURLRequest *)request next:(MSFilterNextBlock)onNext response:(MSFilterResponseBlock)onResponse {\n    NSDictionary *headers = [request allHTTPHeaderFields];\n    NSLog(@\"All request headers: %@\", headers);\n    NSString *reqBody = [[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding];\n    NSLog(@\"Request body: %@\", reqBody);\n    onNext(request, ^(NSHTTPURLResponse *response, NSData *data, NSError *error) {\n        NSDictionary *respHeaders = [response allHeaderFields];\n        NSLog(@\"All response headers: %@\", respHeaders);\n        NSString *respBody = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];\n        NSLog(@\"Response body: %@\", respBody);\n        onResponse(response, data, error);\n    });\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoAppDelegate.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <UIKit/UIKit.h>\n\n@interface ZumoAppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoAppDelegate.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoAppDelegate.h\"\n#import \"ZumoMainTableViewController.h\"\n#import \"ZumoTestStore.h\"\n#import \"ZumoTestGlobals.h\"\n\n@implementation ZumoAppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];\n    // Override point for customization after application launch.\n    \n    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];\n    \n    ZumoMainTableViewController *mainController = [[ZumoMainTableViewController alloc] init];\n    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:mainController];\n    [navController setTitle:@\"Azure Mobile Service E2E Tests\"];\n    self.window.rootViewController = navController;\n    \n    NSArray *allTests = [ZumoTestStore createTests];\n    [mainController setTestGroups:allTests];\n    \n    self.window.backgroundColor = [UIColor whiteColor];\n    [self.window makeKeyAndVisible];\n    return YES;\n}\n\n- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {\n    [[ZumoTestGlobals sharedInstance] setRemoteNotificationRegistrationStatus:[NSString stringWithFormat:@\"Failed to register for remote notification: %@\", error]];\n}\n\n- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {\n    [[ZumoTestGlobals sharedInstance] setRemoteNotificationRegistrationStatus:@\"Successfully registered for remote notifications\"];\n    [ZumoTestGlobals sharedInstance].deviceToken = deviceToken;\n}\n\n- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {\n    id<PushNotificationReceiver> pushReceiver = [[ZumoTestGlobals sharedInstance] pushNotificationDelegate];\n    if (pushReceiver) {\n        [pushReceiver pushReceived:userInfo];\n    }\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application\n{\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application\n{\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. \n    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application\n{\n    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application\n{\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application\n{\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoCUDTests.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n@interface ZumoCUDTests : NSObject\n\n+ (NSArray *)createTests;\n+ (NSString *)groupDescription;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoCUDTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoCUDTests.h\"\n#import \"ZumoTest.h\"\n#import \"ZumoTestGlobals.h\"\n#import <WindowsAzureMobileServices/WindowsAzureMobileServices.h>\n\n@implementation ZumoCUDTests\n\nstatic NSString *tableName = @\"iosRoundTripTable\";\nstatic NSString *stringIdTableName = @\"stringIdRoundTripTable\";\n\n+ (NSArray *)createTests {\n    NSMutableArray *result = [[NSMutableArray alloc] init];\n    [result addObject:[self createDeleteTestWithName:@\"Delete with id\" andType:DeleteUsingId]];\n    [result addObject:[self createDeleteTestWithName:@\"(Neg) Delete with non-existent id\" andType:NegDeleteUsingInvalidId]];\n    [result addObject:[self createDeleteTestWithName:@\"Delete with object\" andType:DeleteUsingObject]];\n    [result addObject:[self createDeleteTestWithName:@\"(Neg) Delete with object and non-existent id\" andType:NegDeleteObjectInvalidId]];\n    [result addObject:[self createDeleteTestWithName:@\"(Neg) Delete with object without 'id' field\" andType:NegDeleteObjectNoId]];\n    \n    NSArray *validStringIds = @[@\"iOS with space\", @\"random number\", @\"iOS non-english ãéìôü ÇñÑالكتاب على الطاولة这本书在桌子上הספר הוא על השולחן\"];\n    for (NSString *validId in validStringIds) {\n        for (int i = 0; i < 2; i++) {\n            BOOL useDeleteWithId = i == 0;\n            NSString *testName = [NSString stringWithFormat:@\"[string id] Delete (%@), id = %@\", useDeleteWithId ? @\"by id\" : @\"by object\", validId];\n            ZumoTest *test = [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n                NSString *itemId;\n                if ([validId isEqualToString:@\"random number\"]) {\n                    itemId = [NSString stringWithFormat:@\"%d\", rand()];\n                } else {\n                    itemId = validId;\n                }\n                [test addLog:[@\"Using id = \" stringByAppendingString:itemId]];\n                MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n                MSTable *table = [client tableWithName:stringIdTableName];\n                [table insert:@{@\"id\":itemId,@\"name\":@\"unused\"} completion:^(NSDictionary *item, NSError *error) {\n                    // it's fine if the insert failed (possible if the item already existed.\n                    \n                    [test addLog:@\"Calling delete\"];\n                    MSDeleteBlock deleteCompletion = ^(id deletedItemId, NSError *error) {\n                        if (error) {\n                            [test addLog:[NSString stringWithFormat:@\"Error calling delete: %@\", error]];\n                            completion(NO);\n                        } else {\n                            [test addLog:[NSString stringWithFormat:@\"Delete succeeded for item: %@\", deletedItemId]];\n                            completion(YES);\n                        }\n                    };\n                    if (useDeleteWithId) {\n                        [table deleteWithId:itemId completion:deleteCompletion];\n                    } else {\n                        [table delete:@{@\"id\":itemId,@\"name\":@\"unused\"} completion:deleteCompletion];\n                    }\n                }];\n            }];\n            [test addRequiredFeature:FEATURE_STRING_ID_TABLES];\n            [result addObject:test];\n        }\n    }\n\n    [result addObject:[self createUpdateTestWithName:@\"Update item\" andType:UpdateUsingObject]];\n    [result addObject:[self createUpdateTestWithName:@\"(Neg) Update with non-existing id\" andType:NegUpdateObjectInvalidId]];\n    [result addObject:[self createUpdateTestWithName:@\"(Neg) Update with no id\" andType:NegUpdateObjectNoId]];\n    \n    for (NSString *validId in validStringIds) {\n        NSString *testName = [@\"[string id] Update with id = \" stringByAppendingString:validId];\n        ZumoTest *test = [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n            NSString *itemId;\n            if ([validId isEqualToString:@\"random number\"]) {\n                itemId = [NSString stringWithFormat:@\"%d\", rand()];\n            } else {\n                itemId = validId;\n            }\n            [test addLog:[@\"Using id = \" stringByAppendingString:itemId]];\n            MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n            MSTable *table = [client tableWithName:stringIdTableName];\n            [table insert:@{@\"id\":itemId,@\"name\":@\"unused\"} completion:^(NSDictionary *item, NSError *error) {\n                // it's fine if the insert failed (possible if the item already existed.\n                NSDictionary *toUpdate = @{@\"id\":itemId,@\"name\":@\"another value\"};\n                [table update:toUpdate completion:^(NSDictionary *updated, NSError *error) {\n                    BOOL testPassed;\n                    if (error) {\n                        [test addLog:[NSString stringWithFormat:@\"Error calling delete: %@\", error]];\n                        testPassed = NO;\n                    } else {\n                        [test addLog:[NSString stringWithFormat:@\"Updated: %@\", updated]];\n                        NSMutableArray *errors = [[NSMutableArray alloc] init];\n                        if ([ZumoTestGlobals compareObjects:toUpdate with:updated log:errors]) {\n                            [test addLog:@\"Object compared successfully\"];\n                            testPassed = YES;\n                        } else {\n                            [test addLog:@\"Error comparing the objects:\"];\n                            for (NSString *err in errors) {\n                                [test addLog:err];\n                            }\n                            testPassed = NO;\n                        }\n                    }\n                    \n                    [test addLog:@\"Cleanup: deleting the item\"];\n                    [table deleteWithId:itemId completion:^(id itemId, NSError *error) {\n                        [test addLog:[@\"Delete \" stringByAppendingString:(error ? @\"failed\" : @\"succeeded\")]];\n                        completion(testPassed);\n                    }];\n                }];\n            }];\n        }];\n        [test addRequiredFeature:FEATURE_STRING_ID_TABLES];\n        [result addObject:test];\n    }\n    \n    return result;\n}\n\ntypedef enum { UpdateUsingObject, NegUpdateObjectInvalidId, NegUpdateObjectNoId } UpdateTestType;\n\n+ (ZumoTest *)createUpdateTestWithName:(NSString *)name andType:(UpdateTestType)type {\n    ZumoTest *result = [ZumoTest createTestWithName:name andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:tableName];\n        [table insert:@{@\"name\":@\"John Doe\",@\"age\":[NSNumber numberWithInt:33]} completion:^(NSDictionary *inserted, NSError *insertError) {\n            if (insertError) {\n                [test addLog:[NSString stringWithFormat:@\"Error inserting data: %@\", insertError]];\n                [test setTestStatus:TSFailed];\n                completion(NO);\n            } else {\n                NSNumber *itemId = [inserted objectForKey:@\"id\"];\n                [test addLog:[NSString stringWithFormat:@\"Inserted element %d to be deleted\", [itemId intValue]]];\n                [table readWithId:itemId completion:^(NSDictionary *roundTripped, NSError *rtError) {\n                    if (rtError) {\n                        [test addLog:[NSString stringWithFormat:@\"Error retrieving inserted item: %@\", rtError]];\n                        [test setTestStatus:TSFailed];\n                        completion(NO);\n                    } else {\n                        BOOL isPositiveTest = type == UpdateUsingObject;\n                        NSNumber *updatedValue = [NSNumber numberWithInt:35];\n                        NSMutableDictionary *itemToUpdate = [[NSMutableDictionary alloc] initWithDictionary:inserted copyItems:YES];\n                        if (type == NegUpdateObjectNoId) {\n                            [itemToUpdate removeObjectForKey:@\"id\"];\n                        } else if (type == NegUpdateObjectInvalidId) {\n                            [itemToUpdate setValue:[NSNumber numberWithInt:1000000000] forKey:@\"id\"];\n                        } else {\n                            [itemToUpdate setValue:updatedValue forKey:@\"age\"];\n                        }\n                        \n                        [table update:itemToUpdate completion:^(NSDictionary *updatedItem, NSError *updateError) {\n                            BOOL passed = YES;\n                            if (isPositiveTest) {\n                                if (updateError) {\n                                    passed = NO;\n                                    [test addLog:[NSString stringWithFormat:@\"Error updating item: %@\", updateError]];\n                                } else {\n                                    if (![updatedValue isEqualToNumber:[updatedItem objectForKey:@\"age\"]]) {\n                                        passed = NO;\n                                        [test addLog:[NSString stringWithFormat:@\"Incorrect value for updated object: %@\", updatedItem]];\n                                    }\n                                }\n                            } else {\n                                if (!updateError) {\n                                    passed = NO;\n                                    [test addLog:[NSString stringWithFormat:@\"Expected error, but update succeeded for item: %@\", itemToUpdate]];\n                                } else if (type == NegUpdateObjectNoId) {\n                                    if (updateError.code != MSMissingItemIdWithRequest) {\n                                        [test addLog:[NSString stringWithFormat:@\"Unexpected error code: %d\", updateError.code]];\n                                        passed = NO;\n                                    }\n                                } else if (updateError.code != MSErrorMessageErrorCode) {\n                                    [test addLog:[NSString stringWithFormat:@\"Unexpected error code: %d\", updateError.code]];\n                                    passed = NO;\n                                } else {\n                                    NSHTTPURLResponse *resp = [[updateError userInfo] objectForKey:MSErrorResponseKey];\n                                    if (resp.statusCode != 404) {\n                                        [test addLog:[NSString stringWithFormat:@\"Invalid response status code, expected 404, found %d\", resp.statusCode]];\n                                        passed = NO;\n                                    }\n                                }\n                            }\n                            \n                            if (isPositiveTest && passed) {\n                                [self validateUpdateForTest:test andTable:table andId:itemId andExpectedValue:updatedValue withCompletion:completion];\n                            } else {\n                                [test setTestStatus:(passed ? TSPassed : TSFailed)];\n                                completion(passed);\n                            }\n                        }];\n                    }\n                }];\n            }\n        }];\n    }];\n    [result addRequiredFeature:FEATURE_INT_ID_TABLES];\n    return result;\n}\n\n+ (void)validateUpdateForTest:(ZumoTest *)test andTable:(MSTable *)table andId:(NSNumber *)itemId andExpectedValue:(NSNumber *)expectedValue withCompletion:(ZumoTestCompletion)completion {\n    [table readWithId:itemId completion:^(NSDictionary *item, NSError *err) {\n        BOOL passed = YES;\n        if (err) {\n            [test addLog:[NSString stringWithFormat:@\"Error retrieving updated item: %@\", err]];\n            passed = NO;\n        } else {\n            if (![expectedValue isEqualToNumber:[item objectForKey:@\"age\"]]) {\n                [test addLog:[NSString stringWithFormat:@\"Update not successful, expected %@, got %@\", expectedValue, item]];\n                passed = NO;\n            } else {\n                [test addLog:@\"Item updated successfully\"];\n            }\n        }\n        \n        [test setTestStatus:(passed ? TSPassed : TSFailed)];\n        completion(passed);\n    }];\n}\n\ntypedef enum { DeleteUsingId, DeleteUsingObject, NegDeleteUsingInvalidId, NegDeleteObjectInvalidId, NegDeleteObjectNoId } DeleteTestType;\n\n+ (ZumoTest *)createDeleteTestWithName:(NSString *)name andType:(DeleteTestType)type {\n    ZumoTest *result = [ZumoTest createTestWithName:name andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:tableName];\n        [table insert:@{@\"name\":@\"John Doe\",@\"age\":[NSNumber numberWithInt:33]} completion:^(NSDictionary *inserted, NSError *insertError) {\n            if (insertError) {\n                [test addLog:[NSString stringWithFormat:@\"Error inserting data: %@\", insertError]];\n                [test setTestStatus:TSFailed];\n                completion(NO);\n            } else {\n                NSNumber *itemId = [inserted objectForKey:@\"id\"];\n                [test addLog:[NSString stringWithFormat:@\"Inserted element %d to be deleted\", [itemId intValue]]];\n                [table readWithId:itemId completion:^(NSDictionary *roundTripped, NSError *rtError) {\n                    if (rtError) {\n                        [test addLog:[NSString stringWithFormat:@\"Error retrieving inserted item: %@\", rtError]];\n                        [test setTestStatus:TSFailed];\n                        completion(NO);\n                    } else {\n                        BOOL isPositiveTest = type == DeleteUsingId || type == DeleteUsingObject;\n                        if (type == DeleteUsingId || type == NegDeleteUsingInvalidId) {\n                            NSNumber *idToDelete = isPositiveTest ? itemId : [NSNumber numberWithInt:1000000000];\n                            [table deleteWithId:idToDelete completion:^(NSNumber *deletedItemId, NSError *deleteError) {\n                                BOOL passed = YES;\n                                if (isPositiveTest) {\n                                    if (deleteError) {\n                                        passed = NO;\n                                        [test addLog:[NSString stringWithFormat:@\"Error deleting item: %@\", deleteError]];\n                                    } else if (![itemId isEqualToNumber:deletedItemId]) {\n                                        [test addLog:[NSString stringWithFormat:@\"Invalid returned value after deleting: %@\", deletedItemId]];\n                                        passed = NO;\n                                    }\n                                } else {\n                                    if (!deleteError) {\n                                        passed = NO;\n                                        [test addLog:[NSString stringWithFormat:@\"Expected error, but delete succeeded for item: %@\", deletedItemId]];\n                                    } else if (deleteError.code != MSErrorMessageErrorCode) {\n                                        [test addLog:[NSString stringWithFormat:@\"Unexpected error code: %d\", deleteError.code]];\n                                        passed = NO;\n                                    } else {\n                                        NSHTTPURLResponse *resp = [[deleteError userInfo] objectForKey:MSErrorResponseKey];\n                                        if (resp.statusCode != 404) {\n                                            [test addLog:[NSString stringWithFormat:@\"Invalid response status code, expected 404, found %d\", resp.statusCode]];\n                                            passed = NO;\n                                        }\n                                    }\n                                }\n                                \n                                [test setTestStatus:(passed ? TSPassed : TSFailed)];\n                                completion(passed);\n                            }];\n                        } else {\n                            NSMutableDictionary *itemToDelete = [[NSMutableDictionary alloc] initWithDictionary:inserted copyItems:YES];\n                            if (type == NegDeleteObjectNoId) {\n                                [itemToDelete removeObjectForKey:@\"id\"];\n                            } else if (type == NegDeleteObjectInvalidId) {\n                                [itemToDelete setValue:[NSNumber numberWithInt:1000000000] forKey:@\"id\"];\n                            }\n                            \n                            [table delete:itemToDelete completion:^(NSNumber *deletedItemId, NSError *deleteError) {\n                                BOOL passed = YES;\n                                if (isPositiveTest) {\n                                    if (deleteError) {\n                                        passed = NO;\n                                        [test addLog:[NSString stringWithFormat:@\"Error deleting item: %@\", deleteError]];\n                                    } else if (![itemId isEqualToNumber:deletedItemId]) {\n                                        [test addLog:[NSString stringWithFormat:@\"Invalid returned value after deleting: %@\", deletedItemId]];\n                                        passed = NO;\n                                    }\n                                } else {\n                                    if (!deleteError) {\n                                        passed = NO;\n                                        [test addLog:[NSString stringWithFormat:@\"Expected error, but delete succeeded for item: %@\", deletedItemId]];\n                                    } else if (type == NegDeleteObjectNoId) {\n                                        if (deleteError.code != MSMissingItemIdWithRequest) {\n                                            [test addLog:[NSString stringWithFormat:@\"Unexpected error code: %d\", deleteError.code]];\n                                            passed = NO;\n                                        }\n                                    } else if (deleteError.code != MSErrorMessageErrorCode) {\n                                        [test addLog:[NSString stringWithFormat:@\"Unexpected error code: %d\", deleteError.code]];\n                                        passed = NO;\n                                    } else {\n                                        NSHTTPURLResponse *resp = [[deleteError userInfo] objectForKey:MSErrorResponseKey];\n                                        if (resp.statusCode != 404) {\n                                            [test addLog:[NSString stringWithFormat:@\"Invalid response status code, expected 404, found %d\", resp.statusCode]];\n                                            passed = NO;\n                                        }\n                                    }\n                                }\n                                \n                                if (isPositiveTest && passed) {\n                                    [self validateDeletionForTest:test andTable:table andId:itemId withCompletion:completion];\n                                } else {\n                                    [test setTestStatus:(passed ? TSPassed : TSFailed)];\n                                    completion(passed);\n                                }\n                            }];\n                        }\n                    }\n                }];\n            }\n        }];\n    }];\n    [result addRequiredFeature:FEATURE_INT_ID_TABLES];\n    \n    return result;\n}\n\n+ (void)validateDeletionForTest:(ZumoTest *)test andTable:(MSTable *)table andId:(NSNumber *)itemId withCompletion:(ZumoTestCompletion)completion {\n    [table readWithId:itemId completion:^(NSDictionary *item, NSError *err) {\n        if (!err) {\n            [test addLog:[NSString stringWithFormat:@\"Delete failed, item %@ still exists: %@\", itemId, item]];\n        } else {\n            [test addLog:@\"Item deleted successfully\"];\n        }\n        \n        [test setTestStatus:(err ? TSPassed : TSFailed)];\n        completion(err ? YES : NO);\n    }];\n}\n\n+ (NSString *)groupDescription {\n    return @\"Tests for validating update and delete operations\";\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoCustomApiTests.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n@interface ZumoCustomApiTests : NSObject\n\n+ (NSArray *)createTests;\n+ (NSString *)groupDescription;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoCustomApiTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoCustomApiTests.h\"\n#import \"ZumoTest.h\"\n#import \"ZumoTestGlobals.h\"\n#import \"ZumoLoginTests.h\"\n\n@implementation ZumoCustomApiTests\n\nstatic NSString *apiPublicName = @\"public\";\nstatic NSString *apiApplicationName = @\"application\";\nstatic NSString *apiUserName = @\"user\";\nstatic NSString *apiAdminName = @\"admin\";\n\ntypedef enum { DataFormatJson, DataFormatXml, DataFormatOther } ApiDataFormat;\n\n+ (NSArray *)createTests {\n    NSMutableArray *result = [[NSMutableArray alloc] init];\n    [result addObject:[self createJsonBasedTestWithName:@\"Simple object - POST\" apiName:apiApplicationName httpMethod:@\"POST\" body:@{@\"name\":@\"value\"} headers:nil query:nil statusCode:200]];\n    [result addObject:[self createJsonBasedTestWithName:@\"Simple call - GET\" apiName:apiApplicationName httpMethod:@\"GET\" body:nil headers:nil query:@{@\"param\": @\"value\"} statusCode:200]];\n    [result addObject:[self createJsonBasedTestWithName:@\"Simple object - PUT\" apiName:apiApplicationName httpMethod:@\"PUT\" body:@{@\"array\":@[@1, @YES, @\"str\"]} headers:nil query:@{@\"method\": @\"PUT\"} statusCode:200]];\n    [result addObject:[self createJsonBasedTestWithName:@\"Simple object - PATCH\" apiName:apiApplicationName httpMethod:@\"PATCH\" body:@{@\"array\":@[@1, @YES, @\"str\"]} headers:nil query:@{@\"method\": @\"PATCH\"} statusCode:200]];\n    [result addObject:[self createJsonBasedTestWithName:@\"Simple call - DELETE\" apiName:apiApplicationName httpMethod:@\"DELETE\" body:nil headers:nil query:@{@\"method\": @\"DELETE\"} statusCode:200]];\n    \n    [result addObject:[self createJsonBasedTestWithName:@\"POST - array body\" apiName:apiApplicationName httpMethod:@\"POST\" body:@[@1,@NO,@2] headers:nil query:nil statusCode:200]];\n    [result addObject:[self createJsonBasedTestWithName:@\"POST - empty array body\" apiName:apiApplicationName httpMethod:@\"POST\" body:@[] headers:nil query:nil statusCode:200]];\n    [result addObject:[self createJsonBasedTestWithName:@\"POST - empty object body\" apiName:apiApplicationName httpMethod:@\"POST\" body:@{} headers:nil query:nil statusCode:200]];\n    \n    [result addObject:[self createJsonBasedTestWithName:@\"GET - custom headers\" apiName:apiApplicationName httpMethod:@\"GET\" body:nil headers:@{@\"x-test-zumo-1\": @\"header value\"} query:nil statusCode:200]];\n    \n    [result addObject:[self createJsonBasedTestWithName:@\"PATCH - query parameters\" apiName:apiApplicationName httpMethod:@\"PATCH\" body:@{@\"name\":@123} headers:nil query:@{@\"key\":@\"value\"} statusCode:200]];\n    [result addObject:[self createJsonBasedTestWithName:@\"GET - query parameters non-ASCII\" apiName:apiApplicationName httpMethod:@\"GET\" body:nil headers:nil query:@{@\"latin\":@\"áñüø\",@\"arabic\":@\"الكتاب على الطاولة\", @\"japanese\":@\"本は机の上に\", @\"name needs & escape\": @\"value too\"} statusCode:200]];\n    \n    [result addObject:[self createJsonBasedTestWithName:@\"GET - 500 response\" apiName:apiApplicationName httpMethod:@\"GET\" body:nil headers:nil query:@{@\"name\":@\"value\"} statusCode:500]];\n    [result addObject:[self createJsonBasedTestWithName:@\"GET - 400 response\" apiName:apiApplicationName httpMethod:@\"GET\" body:nil headers:@{@\"x-test-zumo-x\":@\"header value\"} query:@{@\"name\":@\"value\"} statusCode:400]];\n\n    [result addObject:[self createDataBasedTestWithName:@\"GET - JSON result\" apiName:apiApplicationName httpMethod:@\"GET\" body:nil headers:nil query:nil statusCode:200 inputFormat:DataFormatJson outputFormat:DataFormatJson]];\n    [result addObject:[self createDataBasedTestWithName:@\"GET - XML result\" apiName:apiApplicationName httpMethod:@\"GET\" body:nil headers:nil query:nil statusCode:200 inputFormat:DataFormatJson outputFormat:DataFormatXml]];\n    [result addObject:[self createDataBasedTestWithName:@\"GET - Text result\" apiName:apiApplicationName httpMethod:@\"GET\" body:nil headers:nil query:nil statusCode:200 inputFormat:DataFormatJson outputFormat:DataFormatOther]];\n \n    [result addObject:[self createDataBasedTestWithName:@\"POST - JSON input, XML output\" apiName:apiApplicationName httpMethod:@\"POST\" body:@{@\"values\":@[@1, @YES]} headers:nil query:nil statusCode:200 inputFormat:DataFormatJson outputFormat:DataFormatXml]];\n    [result addObject:[self createDataBasedTestWithName:@\"POST - text input, JSON output\" apiName:apiApplicationName httpMethod:@\"POST\" body:@\"This is a text body\" headers:nil query:nil statusCode:200 inputFormat:DataFormatOther outputFormat:DataFormatJson]];\n    [result addObject:[self createDataBasedTestWithName:@\"POST - XML input, text output\" apiName:apiApplicationName httpMethod:@\"POST\" body:@\"<hello id=\\\"1\\\">world</hello>\" headers:nil query:nil statusCode:200 inputFormat:DataFormatXml outputFormat:DataFormatOther]];\n    \n    [result addObject:[self createDataBasedTestWithName:@\"PUT - JSON input, XML output, custom headers\" apiName:apiApplicationName httpMethod:@\"PUT\" body:@{} headers:@{@\"x-test-zumo-1\":@\"first header\", @\"x-test-zumo-2\":@\"second header\"} query:nil statusCode:200 inputFormat:DataFormatJson outputFormat:DataFormatXml]];\n    [result addObject:[self createDataBasedTestWithName:@\"PATCH - JSON input, text output, custom query parameters\" apiName:apiApplicationName httpMethod:@\"PATCH\" body:@{@\"values\":@[@1, @2]} headers:@{@\"x-test-zumo-1\":@\"first header\"} query:@{@\"latin\":@\"ñøî†é\", @\"hebrew\":@\"הספר הוא על השולחן\"} statusCode:200 inputFormat:DataFormatJson outputFormat:DataFormatOther]];\n    [result addObject:[self createDataBasedTestWithName:@\"DELETE - XML output, 400 response\" apiName:apiApplicationName httpMethod:@\"DELETE\" body:nil headers:nil query:nil statusCode:400 inputFormat:DataFormatJson outputFormat:DataFormatXml]];\n    [result addObject:[self createDataBasedTestWithName:@\"GET - JSON output, 500 response\" apiName:apiApplicationName httpMethod:@\"GET\" body:nil headers:@{@\"x-test-zumo-1\":@\"header value\"} query:nil statusCode:500 inputFormat:DataFormatJson outputFormat:DataFormatJson]];\n\n    [result addObject:[ZumoLoginTests createLogoutTest]];\n    [result addObject:[self createApiPermissionsTestWithName:@\"Public API - no keys\" apiName:apiPublicName shouldSucceed:YES]];\n    [result addObject:[self createApiPermissionsTestWithName:@\"Application API - logged out\" apiName:apiApplicationName shouldSucceed:YES]];\n    [result addObject:[self createApiPermissionsTestWithName:@\"Authenticated API - logged out\" apiName:apiUserName shouldSucceed:NO]];\n    [result addObject:[self createApiPermissionsTestWithName:@\"Admin API - logged out\" apiName:apiAdminName shouldSucceed:NO]];\n\n    int indexOfLastUnattendedTest = [result count];\n    \n    [result addObject:[ZumoLoginTests createLoginTestForProvider:@\"facebook\" usingSimplifiedMode:YES]];\n    [result addObject:[self createApiPermissionsTestWithName:@\"Application API - logged in\" apiName:apiApplicationName shouldSucceed:YES]];\n    [result addObject:[self createApiPermissionsTestWithName:@\"Authenticated API - logged in\" apiName:apiUserName shouldSucceed:YES]];\n    [result addObject:[self createApiPermissionsTestWithName:@\"Admin API - logged in\" apiName:apiAdminName shouldSucceed:NO]];\n\n    for (int i = indexOfLastUnattendedTest; i < [result count]; i++) {\n        ZumoTest *test = result[i];\n        [test setCanRunUnattended:NO];\n    }\n    \n    [result addObject:[ZumoLoginTests createLogoutTest]];\n\n    return result;\n}\n\n+ (ZumoTest *)createApiPermissionsTestWithName:(NSString *)testName apiName:(NSString *)apiName shouldSucceed:(BOOL)shouldSucceed {\n    return [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        if (apiName == apiPublicName) {\n            // No key necessary\n            client = [MSClient clientWithApplicationURL:[client applicationURL]];\n        }\n        [client invokeAPI:apiName body:nil HTTPMethod:@\"GET\" parameters:@{@\"x\":@\"1\"} headers:nil completion:^(id result, NSURLResponse *response, NSError *error) {\n            if (shouldSucceed) {\n                if (error) {\n                    [test addLog:[NSString stringWithFormat:@\"Error, should have succeeded, but error = %@\", error]];\n                    completion(NO);\n                } else {\n                    [test addLog:[NSString stringWithFormat:@\"Ok, call should have succeeded and it did. Result = %@\", result]];\n                    completion(YES);\n                }\n            } else {\n                [test addLog:[NSString stringWithFormat:@\"Should have failed, and got an error (%@). Validating error code.\", error]];\n                NSHTTPURLResponse *httpResponse = [[error userInfo] objectForKey:MSErrorResponseKey];\n                if ([httpResponse statusCode] == 401) {\n                    [test addLog:@\"Received expected status code.\"];\n                    completion(YES);\n                } else {\n                    [test addLog:[NSString stringWithFormat:@\"Error, expected 401, received %d\", [httpResponse statusCode]]];\n                    completion(NO);\n                }\n            }\n        }];\n    }];\n}\n\n+ (ZumoTest *)createJsonBasedTestWithName:(NSString *)testName apiName:(NSString *)apiName httpMethod:(NSString *)httpMethod body:(id)body headers:(NSDictionary *)headers query:(NSDictionary *)query statusCode:(NSInteger)statusCode {\n\n    NSDictionary *queryParameters = query;\n    if (statusCode != 200) {\n        NSMutableDictionary *newQuery = [[NSMutableDictionary alloc] initWithDictionary:query copyItems:YES];\n        [newQuery setObject:[NSNumber numberWithInteger:statusCode] forKey:@\"status\"];\n        queryParameters = newQuery;\n    }\n\n    testName = [NSString stringWithFormat:@\"JSON-style selector: %@\", testName];\n\n    return [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        [client invokeAPI:apiName body:body HTTPMethod:httpMethod parameters:queryParameters headers:headers completion:^(id result, NSHTTPURLResponse *httpResponse, NSError *error) {\n            BOOL testPassed = YES;\n            \n            if (error && !httpResponse) {\n                httpResponse = [[error userInfo] objectForKey:MSErrorResponseKey];\n            }\n            \n            if (![self validateErrorForTest:test error:error expectedStatus:statusCode response:httpResponse result:result]) {\n                completion(NO);\n                return;\n            }\n            \n            if (![self validateResponseHeadersForTest:test expectedHeaders:headers httpResponse:httpResponse]) {\n                completion(NO);\n                return;\n            }\n            \n            NSMutableDictionary *expectedBody = [self createExpectedBodyForTest:test httpMethod:httpMethod query:query body:body];\n            \n            NSMutableArray *errors = [[NSMutableArray alloc] init];\n            id actualBody;\n            if (!error) {\n                actualBody = result;\n            } else {\n                NSString *bodyContents = [error localizedDescription];\n                NSData *bodyData = [bodyContents dataUsingEncoding:NSUTF8StringEncoding];\n                NSError *jsonError;\n                actualBody = [NSJSONSerialization JSONObjectWithData:bodyData options:0 error:&jsonError];\n                if (jsonError) {\n                    [test addLog:[NSString stringWithFormat:@\"Error reading response body as JSON. Body contents = %@\", bodyContents]];\n                    completion(NO);\n                    return;\n                }\n            }\n            \n            if ([ZumoTestGlobals compareJson:expectedBody with:actualBody log:errors]) {\n                [test addLog:@\"Comparison succeeded\"];\n            } else {\n                [test addLog:[NSString stringWithFormat:@\"Error comparing response. Expected: %@, actual: %@\", expectedBody, result]];\n                testPassed = NO;\n                for (NSString *log in errors) {\n                    [test addLog:log];\n                }\n                completion(NO);\n                return;\n            }\n\n            completion(testPassed);\n        }];\n    }];\n}\n\n+ (NSMutableDictionary *)createExpectedBodyForTest:(ZumoTest *)test httpMethod:(NSString *)httpMethod query:(NSDictionary *)query body:(id)body {\n    NSMutableDictionary *expectedBody = [[NSMutableDictionary alloc] init];\n    [expectedBody setObject:httpMethod forKey:@\"method\"];\n    if (query && [query count]) {\n        NSMutableDictionary *expectedQuery = [[NSMutableDictionary alloc] init];\n        [expectedBody setObject:expectedQuery forKey:@\"query\"];\n        for (NSString *key in [query allKeys]) {\n            [expectedQuery setObject:query[key] forKey:key];\n        }\n    }\n    \n    if (body) {\n        [expectedBody setObject:body forKey:@\"body\"];\n    }\n    \n    NSDictionary *userLevel = @{@\"level\":@\"anonymous\"};\n    [expectedBody setObject:userLevel forKey:@\"user\"];\n    \n    return expectedBody;\n}\n\n+ (BOOL)validateResponseHeadersForTest:(ZumoTest *)test expectedHeaders:(NSDictionary *)headers httpResponse:(NSHTTPURLResponse *)httpResponse; {\n    BOOL testPassed = YES;\n    if (headers && [headers count]) {\n        NSDictionary *responseHeaders = [httpResponse allHeaderFields];\n        for (NSString *key in [headers allKeys]) {\n            if ([key hasPrefix:@\"x-test-zumo-\"]) {\n                NSString *respHeader = [responseHeaders objectForKey:key];\n                NSString *expectedHeader = headers[key];\n                if (![expectedHeader isEqualToString:respHeader]) {\n                    [test addLog:[NSString stringWithFormat:@\"Invalid response header for %@. Expected: %@, actual: %@\", key, expectedHeader, respHeader]];\n                    testPassed = NO;\n                    break;\n                }\n            }\n        }\n        \n        if (testPassed) {\n            [test addLog:@\"All headers validated successfully\"];\n        } else {\n            testPassed = NO;\n        }\n    }\n    \n    return testPassed;\n}\n\n+ (BOOL)validateErrorForTest:(ZumoTest *)test error:(NSError *)error expectedStatus:(NSInteger)statusCode response:(NSHTTPURLResponse *)response result:(id)result {\n    BOOL testPassed = YES;\n    if (statusCode >= 400) {\n        // expected error\n        if (error) {\n            [test addLog:[NSString stringWithFormat:@\"Expected error, received: %@\", error]];\n            NSInteger actualStatusCode = [((NSHTTPURLResponse *)response) statusCode];\n            if (statusCode == actualStatusCode) {\n                [test addLog:@\"Received expected status code\"];\n            } else {\n                [test addLog:[NSString stringWithFormat:@\"Received incorrect status code. Expected %d, received %d\", statusCode, actualStatusCode]];\n                testPassed = NO;\n            }\n        } else {\n            [test addLog:[NSString stringWithFormat:@\"Error, expected error, but no error was received. Result: %@\", result]];\n            testPassed = NO;\n        }\n        \n        if (!testPassed) {\n            [test addLog:@\"Got expected non-2XX result.\"];\n        }\n        \n    } else {\n        if (error) {\n            [test addLog:[NSString stringWithFormat:@\"Unexpected error: %@\", error]];\n            NSHTTPURLResponse *errorResponse = [[error userInfo] objectForKey:MSErrorResponseKey];\n            [test addLog:[NSString stringWithFormat:@\"Response status code: %d; header: %@\", errorResponse.statusCode, errorResponse.allHeaderFields]];\n            testPassed = NO;\n        }\n    }\n    \n    return testPassed;\n}\n\n+ (NSString *)formatToString:(ApiDataFormat)format {\n    switch (format) {\n        case DataFormatJson:\n            return @\"json\";\n        case DataFormatXml:\n            return @\"xml\";\n        default:\n            return @\"other\";\n    }\n}\n\n+ (NSString *)convertToXmlFromJson:(NSDictionary *)json {\n    return [NSString stringWithFormat:@\"<root>%@</root>\", [self toXmlFromJson:json]];\n}\n\n+ (NSString *)toXmlFromJson:(id)json {\n    if (!json || [json isKindOfClass:[NSNull class]]) return @\"null\";\n    if ([json isKindOfClass:[NSString class]]) {\n        return (NSString *)json;\n    }\n    if ([json isKindOfClass:[NSNumber class]]) {\n        const char *cType = [json objCType];\n        if (strcmp(@encode(BOOL), cType) == 0) {\n            return [json boolValue] ? @\"true\" : @\"false\";\n        } else {\n            return [json description];\n        }\n    }\n    if ([json isKindOfClass:[NSArray class]]) {\n        NSMutableArray *xmlArray = [[NSMutableArray alloc] init];\n        for (id item in json) {\n            [xmlArray addObject:[NSString stringWithFormat:@\"<item>%@</item>\", [self toXmlFromJson:item]]];\n        }\n        return [NSString stringWithFormat:@\"<array>%@</array>\", [xmlArray componentsJoinedByString:@\"\"]];\n    }\n    if ([json isKindOfClass:[NSDictionary class]]) {\n        NSDictionary *jsonObject = json;\n        NSArray *keys = [[jsonObject allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {\n            NSString *str1 = obj1;\n            NSString *str2 = obj2;\n            return [str1 compare:str2];\n        }];\n        NSMutableArray *xmlArray = [[NSMutableArray alloc] init];\n        for (NSString *key in keys) {\n            [xmlArray addObject:[NSString stringWithFormat:@\"<%@>%@</%@>\", key, [self toXmlFromJson:jsonObject[key]], key]];\n        }\n        return [xmlArray componentsJoinedByString:@\"\"];\n    }\n    return [NSString stringWithFormat:@\"Error, invalid JSON type: %@\", json];\n}\n\n+ (ZumoTest *)createDataBasedTestWithName:(NSString *)testName apiName:(NSString *)apiName httpMethod:(NSString *)httpMethod body:(id)body headers:(NSDictionary *)headers query:(NSDictionary *)query statusCode:(NSInteger)statusCode inputFormat:(ApiDataFormat)inputFormat outputFormat:(ApiDataFormat)outputFormat {\n    \n    NSMutableDictionary *queryParameters = [[NSMutableDictionary alloc] initWithDictionary:query copyItems:YES];\n    [queryParameters setObject:[self formatToString:outputFormat] forKey:@\"format\"];\n    if (statusCode != 200) {\n        [queryParameters setObject:[NSNumber numberWithInteger:statusCode] forKey:@\"status\"];\n    }\n    \n    NSMutableDictionary *requestHeaders = [[NSMutableDictionary alloc] initWithDictionary:headers copyItems:YES];\n    \n    testName = [NSString stringWithFormat:@\"NSData-style selector: %@\", testName];\n    \n    return [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        NSData *requestBody = nil;\n        if (body) {\n            if ([body isKindOfClass:[NSString class]]) {\n                requestBody = [((NSString *)body) dataUsingEncoding:NSUTF8StringEncoding];\n            } else {\n                // assuming a JSON body\n                NSError *jsonError;\n                requestBody = [NSJSONSerialization dataWithJSONObject:body options:0 error:&jsonError];\n                if (jsonError) {\n                    [test addLog:[NSString stringWithFormat:@\"Error converting body to JSON: %@\", jsonError]];\n                    completion(NO);\n                    return;\n                }\n            }\n            \n            switch (inputFormat) {\n                case DataFormatJson:\n                    [requestHeaders setObject:@\"application/json\" forKey:@\"Content-Type\"];\n                    break;\n                    \n                case DataFormatXml:\n                    [requestHeaders setObject:@\"text/xml\" forKey:@\"Content-Type\"];\n                    break;\n                    \n                default:\n                    [requestHeaders setObject:@\"text/plain\" forKey:@\"Content-Type\"];\n                    break;\n            }\n        }\n\n        [client invokeAPI:apiName data:requestBody HTTPMethod:httpMethod parameters:queryParameters headers:requestHeaders completion:^(NSData *result, NSHTTPURLResponse *httpResponse, NSError *error) {\n\n            BOOL testPassed = YES;\n            if (error && !httpResponse) {\n                httpResponse = [[error userInfo] objectForKey:MSErrorResponseKey];\n            }\n            \n            if (![self validateErrorForTest:test error:error expectedStatus:statusCode response:httpResponse result:result]) {\n                completion(NO);\n                return;\n            }\n            \n            if (![self validateResponseHeadersForTest:test expectedHeaders:headers httpResponse:httpResponse]) {\n                completion(NO);\n                return;\n            }\n\n            NSMutableDictionary *expectedBody = [self createExpectedBodyForTest:test httpMethod:httpMethod query:query body:body];\n            if (outputFormat == DataFormatJson || outputFormat == DataFormatOther) {\n                NSMutableArray *errors = [[NSMutableArray alloc] init];\n                NSError *jsonError;\n                if (outputFormat == DataFormatOther) {\n                    // need to unescape the brackets and curly braces\n                    NSString *temp = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];\n                    [test addLog:[NSString stringWithFormat:@\"Actual response: %@\", temp]];\n                    temp = [temp stringByReplacingOccurrencesOfString:@\"__[__\" withString:@\"[\"];\n                    temp = [temp stringByReplacingOccurrencesOfString:@\"__]__\" withString:@\"]\"];\n                    temp = [temp stringByReplacingOccurrencesOfString:@\"__{__\" withString:@\"{\"];\n                    temp = [temp stringByReplacingOccurrencesOfString:@\"__}__\" withString:@\"}\"];\n                    [test addLog:[NSString stringWithFormat:@\"Unescaped response: %@\", temp]];\n                    result = [temp dataUsingEncoding:NSUTF8StringEncoding];\n                }\n                \n                NSData *responseBodyData = error == nil ? result : [[error localizedDescription] dataUsingEncoding:NSUTF8StringEncoding];\n                id resultJson = [NSJSONSerialization JSONObjectWithData:responseBodyData options:0 error:&jsonError];\n                if (jsonError) {\n                    [test addLog:[NSString stringWithFormat:@\"Error converting expected body to JSON: %@\", jsonError]];\n                    completion(NO);\n                    return;\n                }\n                if ([ZumoTestGlobals compareJson:expectedBody with:resultJson log:errors]) {\n                    [test addLog:@\"Comparison succeeded\"];\n                } else {\n                    [test addLog:[NSString stringWithFormat:@\"Error comparing response. Expected: %@, actual: %@\", expectedBody, resultJson]];\n                    testPassed = NO;\n                    for (NSString *log in errors) {\n                        [test addLog:log];\n                    }\n                }\n            } else {\n                NSString *expectedBodyString = [self convertToXmlFromJson:expectedBody];\n                NSString *actualResponseBody = error == nil ? [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding] : [error localizedDescription];\n                if ([actualResponseBody isEqualToString:expectedBodyString]) {\n                    [test addLog:@\"Result is expected\"];\n                } else {\n                    testPassed = NO;\n                    [test addLog:[NSString stringWithFormat:@\"Error comparing response body. Expected: %@; actual: %@\", expectedBodyString, actualResponseBody]];\n                }\n            }\n            \n            completion(testPassed);\n        }];\n    }];\n}\n\n+ (NSString *)groupDescription {\n    return @\"Tests to validate that the client SDK can correctly invoke custom APIs on the mobile service.\";\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoE2ETestApp-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.microsoft.azure.test.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoE2ETestApp-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'ZumoE2ETestApp' target in the 'ZumoE2ETestApp' project\n//\n\n#import <Availability.h>\n\n#ifndef __IPHONE_3_0\n#warning \"This project uses features only available in iOS SDK 3.0 and later.\"\n#endif\n\n#ifdef __OBJC__\n    #import <UIKit/UIKit.h>\n    #import <Foundation/Foundation.h>\n#endif\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoLogUpdater.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n@interface ZumoLogUpdater : NSObject\n\n-(void)uploadLogs:(NSString *)logText toUrl:(NSString *)url allTests:(BOOL) allTests;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoLogUpdater.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoLogUpdater.h\"\n#import \"ZumoTestGlobals.h\"\n\n@interface ZumoLogUpdater () <NSURLConnectionDelegate>\n{\n    NSMutableData *receivedData;\n    NSURLConnection *connection;\n}\n\n@end\n\n@implementation ZumoLogUpdater\n\n-(void)uploadLogs:(NSString *)logText toUrl:(NSString *)url allTests:(BOOL)allTests {\n    NSString *urlWithPlatform = [url stringByAppendingString:@\"?platform=iOS\"];\n    if (allTests) {\n        urlWithPlatform = [urlWithPlatform stringByAppendingString:@\"&allTests=true\"];\n    }\n    \n    NSString *runtimeVersion = [[[ZumoTestGlobals sharedInstance] globalTestParameters] objectForKey:RUNTIME_VERSION_KEY];\n    NSString *clientVersion = [[[ZumoTestGlobals sharedInstance] globalTestParameters] objectForKey:CLIENT_VERSION_KEY];\n    if (runtimeVersion) {\n        urlWithPlatform = [urlWithPlatform stringByAppendingString:@\"&runtimeVersion=\"];\n        urlWithPlatform = [urlWithPlatform stringByAppendingString:runtimeVersion];\n    }\n    if (clientVersion) {\n        urlWithPlatform = [urlWithPlatform stringByAppendingString:@\"&clientVersion=\"];\n        urlWithPlatform = [urlWithPlatform stringByAppendingString:clientVersion];\n    }\n\n    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlWithPlatform]];\n    [request setHTTPMethod:@\"POST\"];\n    [request setHTTPBody:[logText dataUsingEncoding:NSUTF8StringEncoding]];\n    [request setValue:@\"text/plain\" forHTTPHeaderField:@\"Content-Type\"];\n    \n    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];\n}\n\n- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {\n    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@\"Error uploading logs\" message:[error localizedDescription] delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\n    [av show];\n    receivedData = nil;\n}\n\n- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {\n    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;\n    if ([httpResponse statusCode] == 200 || [httpResponse statusCode] == 201) {\n        receivedData = [[NSMutableData alloc] init];\n    } else {\n        UIAlertView *av = [[UIAlertView alloc] initWithTitle:@\"Error\" message:[NSString stringWithFormat:@\"Response from upload service: %d\", [httpResponse statusCode]] delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\n        [av show];\n    }\n}\n\n- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {\n    [receivedData appendData:data];\n}\n\n- (void)connectionDidFinishLoading:(NSURLConnection *)connection {\n    if (receivedData) {\n        NSString *responseBody = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];\n        receivedData = nil;\n        UIAlertView *av = [[UIAlertView alloc] initWithTitle:@\"Logs uploaded\" message:responseBody delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\n        [av show];\n    }\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoLoginTests.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"ZumoTest.h\"\n\n@interface ZumoLoginTests : NSObject\n\n+ (NSArray *)createTests;\n+ (NSString *)groupDescription;\n\n+ (ZumoTest *)createLoginTestForProvider:(NSString *)provider usingSimplifiedMode:(BOOL)useSimplified;\n+ (ZumoTest *)createLogoutTest;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoLoginTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoLoginTests.h\"\n#import \"ZumoTest.h\"\n#import \"ZumoTestGlobals.h\"\n#import <WindowsAzureMobileServices/WindowsAzureMobileServices.h>\n\n@interface TimerTarget : NSObject\n{\n    ZumoTest *test;\n    ZumoTestCompletion completion;\n}\n\n- (id)initWithTest:(ZumoTest *)test completion:(ZumoTestCompletion)completion;\n- (void)completeTest:(NSTimer *)timer;\n\n@end\n\n@implementation TimerTarget\n\n- (id)initWithTest:(ZumoTest *)theTest completion:(ZumoTestCompletion)completionBlock {\n    self = [super init];\n    if (self) {\n        self->test = theTest;\n        self->completion = completionBlock;\n    }\n    \n    return self;\n}\n\n- (void)completeTest:(NSTimer *)timer {\n    [test addLog:@\"Timer fired, completing the test\"];\n    [test setTestStatus:TSPassed];\n    completion(YES);\n}\n\n@end\n\n@implementation ZumoLoginTests\n\nstatic NSString *lastUserIdentityObjectKey = @\"lastUserIdentityObject\";\n\n+ (NSArray *)createTests {\n    NSMutableArray *result = [[NSMutableArray alloc] init];\n    [result addObject:[self createClearAuthCookiesTest]];\n    [result addObject:[self createLogoutTest]];\n    [result addObject:[self createCRUDTestForProvider:nil forTable:@\"application\" ofType:ZumoTableApplication andAuthenticated:NO]];\n    [result addObject:[self createCRUDTestForProvider:nil forTable:@\"authenticated\" ofType:ZumoTableAuthenticated andAuthenticated:NO]];\n    [result addObject:[self createCRUDTestForProvider:nil forTable:@\"admin\" ofType:ZumoTableAdminScripts andAuthenticated:NO]];\n    \n    int indexOfLastUnattendedTest = [result count];\n    \n    NSArray *providers = @[@\"facebook\", @\"google\", @\"twitter\", @\"microsoftaccount\"];\n    NSArray *providersWithRecycledTokenSupport = @[@\"facebook\"]; //, @\"google\"]; Known bug - Drop login via Google token until Google client flow is reintroduced\n    NSString *provider;\n    \n    for (int useSimplifiedLogin = 0; useSimplifiedLogin <= 1; useSimplifiedLogin++) {\n        for (provider in providers) {\n            BOOL useSimplified = useSimplifiedLogin == 1;\n            [result addObject:[self createLogoutTest]];\n            [result addObject:[self createSleepTest:3]];\n            [result addObject:[self createLoginTestForProvider:provider usingSimplifiedMode:useSimplified]];\n            [result addObject:[self createCRUDTestForProvider:provider forTable:@\"application\" ofType:ZumoTableApplication andAuthenticated:YES]];\n            [result addObject:[self createCRUDTestForProvider:provider forTable:@\"authenticated\" ofType:ZumoTableAuthenticated andAuthenticated:YES]];\n            [result addObject:[self createCRUDTestForProvider:provider forTable:@\"admin\" ofType:ZumoTableAdminScripts andAuthenticated:YES]];\n            \n            if ([providersWithRecycledTokenSupport containsObject:provider]) {\n                [result addObject:[self createLogoutTest]];\n                [result addObject:[self createSleepTest:1]];\n                [result addObject:[self createClientSideLoginWithProvider:provider]];\n                [result addObject:[self createCRUDTestForProvider:provider forTable:@\"authenticated\" ofType:ZumoTableAuthenticated andAuthenticated:YES]];\n            }\n        }\n    }\n\n    for (int i = indexOfLastUnattendedTest; i < [result count]; i++) {\n        ZumoTest *test = result[i];\n        [test setCanRunUnattended:NO];\n    }\n    \n    [result addObject:[self createLogoutTest]];\n\n    return result;\n}\n\ntypedef enum { ZumoTableUnauthenticated, ZumoTableApplication, ZumoTableAuthenticated, ZumoTableAdminScripts } ZumoTableType;\n\n+ (ZumoTest *)createSleepTest:(int)seconds {\n    NSString *testName = [NSString stringWithFormat:@\"Sleep for %d seconds\", seconds];\n    return [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        [test addLog:@\"Starting the timer\"];\n        TimerTarget *timerTarget = [[TimerTarget alloc] initWithTest:test completion:completion];\n        NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:seconds target:timerTarget selector:@selector(completeTest:) userInfo:nil repeats:NO];\n        [test addLog:[NSString stringWithFormat:@\"Timer fire date: %@\", [timer fireDate]]];\n    }];\n}\n\n+ (ZumoTest *)createCRUDTestForProvider:(NSString *)providerName forTable:(NSString *)tableName ofType:(ZumoTableType)tableType andAuthenticated:(BOOL)isAuthenticated {\n    NSString *tableTypeName;\n    switch (tableType) {\n        case ZumoTableAdminScripts:\n            tableTypeName = @\"admin\";\n            break;\n            \n        case ZumoTableApplication:\n            tableTypeName = @\"application\";\n            break;\n            \n        case ZumoTableAuthenticated:\n            tableTypeName = @\"authenticated users\";\n            break;\n            \n        default:\n            tableTypeName = @\"public\";\n            break;\n    }\n    \n    if (!providerName) {\n        providerName = @\"no\";\n    }\n    \n    NSString *testName = [NSString stringWithFormat:@\"CRUD, %@ auth, table with %@ permissions\", providerName, tableTypeName];\n    BOOL crudShouldWork = tableType == ZumoTableUnauthenticated || tableType == ZumoTableApplication || (tableType == ZumoTableAuthenticated && isAuthenticated);\n    ZumoTest *result = [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:tableName];\n        [table insert:@{@\"name\":@\"john\"} completion:^(NSDictionary *inserted, NSError *insertError) {\n            if (![self validateCRUDResultForTest:test andOperation:@\"Insert\" andError:insertError andExpected:crudShouldWork]) {\n                completion(NO);\n                return;\n            }\n            \n            NSDictionary *toUpdate = crudShouldWork ? inserted : @{@\"name\":@\"jane\",@\"id\":[NSNumber numberWithInt:1]};\n            [table update:toUpdate completion:^(NSDictionary *updated, NSError *updateError) {\n                if (![self validateCRUDResultForTest:test andOperation:@\"Update\" andError:updateError andExpected:crudShouldWork]) {\n                    completion(NO);\n                    return;\n                }\n                \n                NSNumber *itemId = crudShouldWork ? [inserted objectForKey:@\"id\"] : [NSNumber numberWithInt:1];\n                [table readWithId:itemId completion:^(NSDictionary *read, NSError *readError) {\n                    if (![self validateCRUDResultForTest:test andOperation:@\"Read\" andError:readError andExpected:crudShouldWork]) {\n                        completion(NO);\n                        return;\n                    }\n                    \n                    if (!readError && tableType == ZumoTableAuthenticated) {\n                        id serverIdentities = [read objectForKey:@\"Identities\"];\n                        NSDictionary *identities;\n                        if ([serverIdentities isKindOfClass:[NSString class]]) {\n                            NSString *identitiesJson = serverIdentities;\n                            NSData *identitiesData = [identitiesJson dataUsingEncoding:NSUTF8StringEncoding];\n                            NSError *jsonError;\n                            identities = [NSJSONSerialization JSONObjectWithData:identitiesData options:0 error:&jsonError];\n                            if (jsonError) {\n                                [test addLog:[NSString stringWithFormat:@\"Identities value is not a valid JSON object: %@\", jsonError]];\n                                completion(NO);\n                                return;\n                            }\n                        } else if ([serverIdentities isKindOfClass:[NSDictionary class]]) {\n                            // it's already a dictionary\n                            identities = serverIdentities;\n                        } else {\n                            [test addLog:@\"Server identities is not a dictionary of values\"];\n                            completion(NO);\n                            return;\n                        }\n                        [[[ZumoTestGlobals sharedInstance] globalTestParameters] setObject:identities forKey:lastUserIdentityObjectKey];\n                    }\n                    \n                    [table deleteWithId:itemId completion:^(NSNumber *deletedId, NSError *deleteError) {\n                        if (![self validateCRUDResultForTest:test andOperation:@\"Delete\" andError:deleteError andExpected:crudShouldWork]) {\n                            completion(NO);\n                        } else {\n                            [test setTestStatus:TSPassed];\n                            [test addLog:@\"Validation succeeded for all operations\"];\n                            completion(YES);\n                        }\n                    }];\n                }];\n            }];\n        }];\n    }];\n    return result;\n}\n\n+ (BOOL)validateCRUDResultForTest:(ZumoTest *)test andOperation:(NSString *)operation andError:(NSError *)error andExpected:(BOOL)shouldSucceed {\n    if (shouldSucceed == (error == nil)) {\n        if (error) {\n            NSHTTPURLResponse *resp = [[error userInfo] objectForKey:MSErrorResponseKey];\n            if (resp.statusCode == 401) {\n                [test addLog:[NSString stringWithFormat:@\"Got expected response code for operation %@: %d\", operation, resp.statusCode]];\n                return YES;\n            } else {\n                [test addLog:[NSString stringWithFormat:@\"Got invalid response code for operation %@: %d\", operation, resp.statusCode]];\n                return NO;\n            }\n        } else {\n            return YES;\n        }\n    } else {\n        [test addLog:[NSString stringWithFormat:@\"Should%@ succeed for %@, but error = %@\", (shouldSucceed ? @\"\" : @\" not\"), operation, error]];\n        [test setTestStatus:TSFailed];\n        return NO;\n    }\n}\n\n+ (ZumoTest *)createClientSideLoginWithProvider:(NSString *)provider {\n    return [ZumoTest createTestWithName:[NSString stringWithFormat:@\"Login via token for %@\", provider] andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        NSDictionary *lastIdentity = [[[ZumoTestGlobals sharedInstance] globalTestParameters] objectForKey:lastUserIdentityObjectKey];\n        if (!lastIdentity) {\n            [test addLog:@\"Last identity is null. Cannot run this test.\"];\n            [test setTestStatus:TSFailed];\n            completion(NO);\n            return;\n        }\n        \n        [[[ZumoTestGlobals sharedInstance] globalTestParameters] removeObjectForKey:lastUserIdentityObjectKey];\n        \n        [test addLog:[NSString stringWithFormat:@\"Last user identity object: %@\", lastIdentity]];\n        NSDictionary *providerIdentity = [lastIdentity objectForKey:provider];\n        if (!providerIdentity) {\n            [test addLog:@\"Don't have identity for specified provider. Cannot run this test.\"];\n            [test setTestStatus:TSFailed];\n            completion(NO);\n            return;\n        }\n\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        NSDictionary *token = @{@\"access_token\": [providerIdentity objectForKey:@\"accessToken\"]};\n        [client loginWithProvider:provider token:token completion:^(MSUser *user, NSError *error) {\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error logging in: %@\", error]];\n                [test setTestStatus:TSFailed];\n                completion(NO);\n            } else {\n                [test addLog:[NSString stringWithFormat:@\"Logged in as %@\", [user userId]]];\n                [test setTestStatus:TSPassed];\n                completion(YES);\n            }\n        }];\n        \n    }];\n}\n\n+ (ZumoTest *)createLoginTestForProvider:(NSString *)provider usingSimplifiedMode:(BOOL)useSimplified {\n    ZumoTest *result = [ZumoTest createTestWithName:[NSString stringWithFormat:@\"%@Login for %@\", useSimplified ? @\"Simplified \" : @\"\", provider] andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        BOOL shouldDismissControllerInBlock = !useSimplified;\n        MSClientLoginBlock loginBlock = ^(MSUser *user, NSError *error) {\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error logging in: %@\", error]];\n                [test setTestStatus:TSFailed];\n                completion(NO);\n            } else {\n                [test addLog:[NSString stringWithFormat:@\"Logged in as %@\", [user userId]]];\n                [test setTestStatus:TSPassed];\n                completion(YES);\n            }\n            \n            if (shouldDismissControllerInBlock) {\n                [viewController dismissViewControllerAnimated:YES completion:nil];\n            }\n        };\n        \n        if (useSimplified) {\n            [client loginWithProvider:provider controller:viewController animated:YES completion:loginBlock];\n        } else {\n            UIViewController *loginController = [client loginViewControllerWithProvider:provider completion:loginBlock];\n            [viewController presentViewController:loginController animated:YES completion:nil];\n        }\n    }];\n    \n    return result;\n}\n\n+ (ZumoTest *)createClearAuthCookiesTest {\n    ZumoTest *result = [ZumoTest createTestWithName:@\"Clear login cookies\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];\n        NSPredicate *isAuthCookie = [NSPredicate predicateWithFormat:@\"domain ENDSWITH '.facebook.com' or domain ENDSWITH '.google.com' or domain ENDSWITH '.live.com' or domain ENDSWITH '.twitter.com'\"];\n        NSArray *cookiesToRemove = [[cookieStorage cookies] filteredArrayUsingPredicate:isAuthCookie];\n        for (NSHTTPCookie *cookie in cookiesToRemove) {\n            NSLog(@\"Removed cookie from %@\", [cookie domain]);\n            [cookieStorage deleteCookie:cookie];\n        }\n\n        [test addLog:@\"Removed authentication-related cookies from this app.\"];\n        completion(YES);\n    }];\n\n    return result;\n}\n\n+ (ZumoTest *)createLogoutTest {\n    ZumoTest *result = [ZumoTest createTestWithName:@\"Logout\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        [client logout];\n        [test addLog:@\"Logged out\"];\n        MSUser *loggedInUser = [client currentUser];\n        if (loggedInUser == nil) {\n            [test setTestStatus:TSPassed];\n            completion(YES);\n        } else {\n            [test addLog:[NSString stringWithFormat:@\"Error, user for client is not null: %@\", loggedInUser]];\n            [test setTestStatus:TSFailed];\n            completion(NO);\n        }\n    }];\n    \n    return result;\n}\n\n+ (NSString *)groupDescription {\n    return @\"Tests to validate all forms of the login operation in the client SDK.\";\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoMainTableHeader.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"8.00\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1552</int>\n\t\t<string key=\"IBDocument.SystemVersion\">12E55</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">3084</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1187.39</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">626.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t<string key=\"NS.object.0\">2083</string>\n\t\t</object>\n\t\t<array key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<string>IBProxyObject</string>\n\t\t\t<string>IBUIButton</string>\n\t\t\t<string>IBUILabel</string>\n\t\t\t<string>IBUITextField</string>\n\t\t\t<string>IBUIView</string>\n\t\t</array>\n\t\t<array key=\"IBDocument.PluginDependencies\">\n\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t</array>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<string key=\"NS.key.0\">PluginDependencyRecalculationVersion</string>\n\t\t\t<integer value=\"1\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<array class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<object class=\"IBProxyObject\" id=\"841351856\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFilesOwner</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBProxyObject\" id=\"371349661\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFirstResponder</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIView\" id=\"269299768\">\n\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t<array class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<object class=\"IBUILabel\" id=\"44913613\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"269299768\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 24}, {81, 21}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"269299768\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"78800005\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<int key=\"IBUIContentMode\">7</int>\n\t\t\t\t\t\t<bool key=\"IBUIUserInteractionEnabled\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\">App URL:</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUITextColor\" id=\"260137287\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MCAwIDAAA</bytes>\n\t\t\t\t\t\t\t<string key=\"IBUIColorCocoaTouchKeyPath\">darkTextColor</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<nil key=\"IBUIHighlightedColor\"/>\n\t\t\t\t\t\t<int key=\"IBUIBaselineAdjustment\">0</int>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\" id=\"133247506\">\n\t\t\t\t\t\t\t<int key=\"type\">1</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">17</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\" id=\"677885323\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">17</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIAdjustsFontSizeToFit\">NO</bool>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUILabel\" id=\"725989524\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"269299768\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 62}, {81, 21}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"269299768\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"603903225\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<int key=\"IBUIContentMode\">7</int>\n\t\t\t\t\t\t<bool key=\"IBUIUserInteractionEnabled\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\">App Key:</string>\n\t\t\t\t\t\t<reference key=\"IBUITextColor\" ref=\"260137287\"/>\n\t\t\t\t\t\t<nil key=\"IBUIHighlightedColor\"/>\n\t\t\t\t\t\t<int key=\"IBUIBaselineAdjustment\">0</int>\n\t\t\t\t\t\t<reference key=\"IBUIFontDescription\" ref=\"133247506\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"677885323\"/>\n\t\t\t\t\t\t<bool key=\"IBUIAdjustsFontSizeToFit\">NO</bool>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUITextField\" id=\"78800005\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"269299768\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">290</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{109, 20}, {191, 30}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"269299768\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"725989524\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<object class=\"IBUIAccessibilityConfiguration\" key=\"IBUIAccessibilityConfiguration\">\n\t\t\t\t\t\t\t<string key=\"IBUIAccessibilityHint\">txtAppUrl</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<string key=\"IBUIText\"/>\n\t\t\t\t\t\t<int key=\"IBUIBorderStyle\">3</int>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUITextColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MAA</bytes>\n\t\t\t\t\t\t\t<object class=\"NSColorSpace\" key=\"NSCustomColorSpace\" id=\"924571131\">\n\t\t\t\t\t\t\t\t<int key=\"NSID\">2</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIAdjustsFontSizeToFit\">YES</bool>\n\t\t\t\t\t\t<float key=\"IBUIMinimumFontSize\">17</float>\n\t\t\t\t\t\t<object class=\"IBUITextInputTraits\" key=\"IBUITextInputTraits\">\n\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\" id=\"1047625648\">\n\t\t\t\t\t\t\t<int key=\"type\">1</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">14</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\" id=\"50144214\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">14</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUITextField\" id=\"603903225\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"269299768\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">290</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{109, 58}, {191, 30}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"269299768\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"117881988\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<object class=\"IBUIAccessibilityConfiguration\" key=\"IBUIAccessibilityConfiguration\">\n\t\t\t\t\t\t\t<string key=\"IBUIAccessibilityHint\">txtAppKey</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<string key=\"IBUIText\"/>\n\t\t\t\t\t\t<int key=\"IBUIBorderStyle\">3</int>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUITextColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MAA</bytes>\n\t\t\t\t\t\t\t<reference key=\"NSCustomColorSpace\" ref=\"924571131\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIAdjustsFontSizeToFit\">YES</bool>\n\t\t\t\t\t\t<float key=\"IBUIMinimumFontSize\">17</float>\n\t\t\t\t\t\t<object class=\"IBUITextInputTraits\" key=\"IBUITextInputTraits\">\n\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"IBUIFontDescription\" ref=\"1047625648\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"50144214\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"269688034\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"269299768\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 137}, {60, 44}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"269299768\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"34522246\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIButtonType\">1</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Save</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIHighlightedTitleColor\" id=\"403050582\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleShadowColor\" id=\"887578589\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MC41AA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\" id=\"743604756\">\n\t\t\t\t\t\t\t<int key=\"type\">2</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">15</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\" id=\"952723217\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica-Bold</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">15</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"34522246\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"269299768\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{88, 137}, {60, 44}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"269299768\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIButtonType\">1</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Load</string>\n\t\t\t\t\t\t<reference key=\"IBUIHighlightedTitleColor\" ref=\"403050582\"/>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"IBUINormalTitleShadowColor\" ref=\"887578589\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFontDescription\" ref=\"743604756\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"952723217\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUITextField\" id=\"295141513\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"269299768\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">290</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{109, 95}, {191, 30}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"269299768\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"269688034\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<object class=\"IBUIAccessibilityConfiguration\" key=\"IBUIAccessibilityConfiguration\">\n\t\t\t\t\t\t\t<string key=\"IBUIAccessibilityHint\">txtLogsUrl</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<string key=\"IBUIText\"/>\n\t\t\t\t\t\t<int key=\"IBUIBorderStyle\">3</int>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUITextColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MAA</bytes>\n\t\t\t\t\t\t\t<reference key=\"NSCustomColorSpace\" ref=\"924571131\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIAdjustsFontSizeToFit\">YES</bool>\n\t\t\t\t\t\t<float key=\"IBUIMinimumFontSize\">17</float>\n\t\t\t\t\t\t<object class=\"IBUITextInputTraits\" key=\"IBUITextInputTraits\">\n\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"IBUIFontDescription\" ref=\"1047625648\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"50144214\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUILabel\" id=\"117881988\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"269299768\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 99}, {81, 21}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"269299768\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"295141513\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<int key=\"IBUIContentMode\">7</int>\n\t\t\t\t\t\t<bool key=\"IBUIUserInteractionEnabled\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\">Logs URL:</string>\n\t\t\t\t\t\t<reference key=\"IBUITextColor\" ref=\"260137287\"/>\n\t\t\t\t\t\t<nil key=\"IBUIHighlightedColor\"/>\n\t\t\t\t\t\t<int key=\"IBUIBaselineAdjustment\">0</int>\n\t\t\t\t\t\t<reference key=\"IBUIFontDescription\" ref=\"133247506\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"677885323\"/>\n\t\t\t\t\t\t<bool key=\"IBUIAdjustsFontSizeToFit\">NO</bool>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t\t<string key=\"NSFrameSize\">{320, 200}</string>\n\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"44913613\"/>\n\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t<reference key=\"NSCustomColorSpace\" ref=\"924571131\"/>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBUISimulatedSizeMetrics\" key=\"IBUISimulatedDestinationMetrics\">\n\t\t\t\t\t<string key=\"IBUISimulatedSizeMetricsClass\">IBUISimulatedFreeformSizeMetricsSentinel</string>\n\t\t\t\t\t<string key=\"IBUIDisplayName\">Freeform</string>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t</array>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<array class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">headerView</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"269299768\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">9</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">appUrlField</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"78800005\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">10</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">appKeyField</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"603903225\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">11</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">uploadUrlField</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"295141513\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">24</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">delegate</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"78800005\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"841351856\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">20</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">delegate</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"603903225\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"841351856\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">21</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">saveAppInfo:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"269688034\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"841351856\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">16</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">loadSavedApp:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"34522246\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"841351856\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">17</int>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<array key=\"orderedObjects\">\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<array key=\"object\" id=\"0\"/>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"371349661\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"269299768\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"78800005\"/>\n\t\t\t\t\t\t\t<reference ref=\"44913613\"/>\n\t\t\t\t\t\t\t<reference ref=\"725989524\"/>\n\t\t\t\t\t\t\t<reference ref=\"603903225\"/>\n\t\t\t\t\t\t\t<reference ref=\"269688034\"/>\n\t\t\t\t\t\t\t<reference ref=\"117881988\"/>\n\t\t\t\t\t\t\t<reference ref=\"295141513\"/>\n\t\t\t\t\t\t\t<reference ref=\"34522246\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"44913613\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"269299768\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">4</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"725989524\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"269299768\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">5</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"78800005\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"269299768\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">6</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"603903225\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"269299768\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">7</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"269688034\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"269299768\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">15</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"34522246\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"269299768\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">22</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"295141513\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"269299768\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">23</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"117881988\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"269299768\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t</object>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<string key=\"-1.CustomClassName\">ZumoMainTableViewController</string>\n\t\t\t\t<string key=\"-1.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"-2.CustomClassName\">UIResponder</string>\n\t\t\t\t<string key=\"-2.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"15.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"2.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"22.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"23.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"3.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"4.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"5.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"6.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"7.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t</dictionary>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"unlocalizedProperties\"/>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"localizations\"/>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">25</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<array class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">ZumoMainTableViewController</string>\n\t\t\t\t\t<string key=\"superclassName\">UITableViewController</string>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"actions\">\n\t\t\t\t\t\t<string key=\"loadSavedApp:\">id</string>\n\t\t\t\t\t\t<string key=\"runAllTestGroups:\">id</string>\n\t\t\t\t\t\t<string key=\"saveAppInfo:\">id</string>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"actionInfosByName\">\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"loadSavedApp:\">\n\t\t\t\t\t\t\t<string key=\"name\">loadSavedApp:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"runAllTestGroups:\">\n\t\t\t\t\t\t\t<string key=\"name\">runAllTestGroups:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"saveAppInfo:\">\n\t\t\t\t\t\t\t<string key=\"name\">saveAppInfo:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<string key=\"appKeyField\">UITextField</string>\n\t\t\t\t\t\t<string key=\"appUrlField\">UITextField</string>\n\t\t\t\t\t\t<string key=\"headerView\">UIView</string>\n\t\t\t\t\t\t<string key=\"uploadUrlField\">UITextField</string>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"appKeyField\">\n\t\t\t\t\t\t\t<string key=\"name\">appKeyField</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UITextField</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"appUrlField\">\n\t\t\t\t\t\t\t<string key=\"name\">appUrlField</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UITextField</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"headerView\">\n\t\t\t\t\t\t\t<string key=\"name\">headerView</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"uploadUrlField\">\n\t\t\t\t\t\t\t<string key=\"name\">uploadUrlField</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UITextField</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/ZumoMainTableViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<string key=\"IBCocoaTouchPluginVersion\">2083</string>\n\t</data>\n</archive>\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoMainTableViewController.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <UIKit/UIKit.h>\n#import \"ZumoTestGroupCallbacks.h\"\n\n@interface ZumoMainTableViewController : UITableViewController <ZumoTestGroupCallbacks, UITextFieldDelegate>\n{\n    IBOutlet UITextField *appUrlField;\n    IBOutlet UITextField *appKeyField;\n    IBOutlet UITextField *uploadUrlField;\n    IBOutlet UIView *headerView;\n    NSMutableArray *savedApps;\n}\n\n@property (nonatomic, copy) NSArray *testGroups;\n\n- (UIView *)headerView;\n- (IBAction)loadSavedApp:(id)sender;\n- (IBAction)saveAppInfo:(id)sender;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoMainTableViewController.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoMainTableViewController.h\"\n#import \"ZumoTestGroup.h\"\n#import \"ZumoTestGlobals.h\"\n#import \"ZumoTestGroupTableViewController.h\"\n#import \"ZumoSavedAppsTableViewController.h\"\n#import \"ZumoTestHelpViewController.h\"\n\n@interface ZumoMainTableViewController ()\n\n@end\n\n@implementation ZumoMainTableViewController\n\n@synthesize testGroups;\n\n- (id)init\n{\n    self = [super initWithStyle:UITableViewStyleGrouped];\n    if (self) {\n        NSString *savedAppsPath = [self savedAppsArchivePath];\n        savedApps = [NSKeyedUnarchiver unarchiveObjectWithFile:savedAppsPath];\n        if (!savedApps) {\n            savedApps = [[NSMutableArray alloc] init];\n        }\n    }\n    \n    return self;\n}\n\n- (id)initWithStyle:(UITableViewStyle)style\n{\n    return [self init];\n}\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n\n    [[self navigationItem] setTitle:@\"Azure Mobile Service E2E Tests\"];\n}\n\n- (NSString *)savedAppsArchivePath {\n    NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);\n    NSString *documentDirectory = [documentDirectories objectAtIndex:0];\n    return [documentDirectory stringByAppendingPathComponent:@\"savedapps.archive\"];\n}\n\n- (void)saveApps {\n    [NSKeyedArchiver archiveRootObject:self->savedApps toFile:[self savedAppsArchivePath]];\n}\n\n- (void)didReceiveMemoryWarning\n{\n    [super didReceiveMemoryWarning];\n    // Dispose of any resources that can be recreated.\n}\n\n- (IBAction)loadSavedApp:(id)sender {\n    if ([savedApps count] > 0) {\n        __block ZumoSavedAppsTableViewController *savedAppsController = [[ZumoSavedAppsTableViewController alloc] init];\n        ZumoSavedAppsTableViewController *weakControllerRef = savedAppsController;\n        [savedAppsController setSavedApps:savedApps];\n        [savedAppsController setCompletion:^(void) {\n            NSString *appUrl = [weakControllerRef selectedAppUrl];\n            NSString *appKey = [weakControllerRef selectedAppKey];\n            if (appUrl && appKey) {\n                [appUrlField setText:appUrl];\n                [appKeyField setText:appKey];\n            }\n            \n            if ([weakControllerRef savedAppsChanged]) {\n                NSArray *newApps = [weakControllerRef savedApps];\n                savedApps = [NSMutableArray arrayWithArray:newApps];\n                [self saveApps];\n                UIAlertView *av = [[UIAlertView alloc] initWithTitle:@\"Saved\" message:@\"The modifications in the saved apps were saved to the local storage.\" delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\n                [av show];\n            }\n        }];\n        [self presentViewController:savedAppsController animated:YES completion:nil];\n    } else {\n        UIAlertView *av = [[UIAlertView alloc] initWithTitle:@\"Error\" message:@\"No saved apps.\" delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\n        [av show];\n    }\n}\n\n- (IBAction)saveAppInfo:(id)sender {\n    NSString *appUrl = [appUrlField text];\n    NSString *appKey = [appKeyField text];\n    if ([self validateAppInfoForUrl:appUrl andKey:appKey]) {\n        [savedApps addObject:[NSArray arrayWithObjects:appUrl, appKey, nil]];\n        [self saveApps];\n        UIAlertView *av = [[UIAlertView alloc] initWithTitle:@\"Saved\" message:@\"The application URL and key were saved to the local storage.\" delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\n        [av show];\n    }\n}\n\n- (BOOL)validateAndRefreshClient {\n    MSClient *currentClient = [[ZumoTestGlobals sharedInstance] client];\n    NSString *appUrl = [appUrlField text];\n    NSString *appKey = [appKeyField text];\n    BOOL needRefreshClient;\n    if (!currentClient) {\n        // client not yet set\n        needRefreshClient = YES;\n    } else if ([[[currentClient applicationURL] absoluteString] isEqualToString:appUrl] && [[currentClient applicationKey] isEqualToString:appKey]) {\n        // Same application, no need to reinitialize the client\n        needRefreshClient = NO;\n    } else {\n        needRefreshClient = YES;\n    }\n    \n    if (needRefreshClient) {\n        if (![self validateAppInfoForUrl:appUrl andKey:appKey]) {\n            return NO;\n        } else {\n            [[ZumoTestGlobals sharedInstance] initializeClientWithAppUrl:appUrl andKey:appKey];\n        }\n    }\n    \n    [[ZumoTestGlobals sharedInstance] saveAppInfo:appUrl key:appKey];\n    NSString *uploadLogsUrl = [uploadUrlField text];\n    if (uploadLogsUrl && [uploadLogsUrl length]) {\n        [[ZumoTestGlobals sharedInstance] saveUploadLogsUrl:uploadLogsUrl];\n    }\n    \n    return YES;\n}\n\n#pragma mark - Table view data source\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView\n{\n    return 1;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section\n{\n    return [testGroups count];\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    static NSString *CellIdentifier = @\"UITableViewCell\";\n    \n    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];\n    if (!cell) {\n        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];\n    }\n\n    ZumoTestGroup *testGroup = [[self testGroups] objectAtIndex:[indexPath row]];\n    [[cell textLabel] setText:[NSString stringWithFormat:@\"%d. %@\", [indexPath row] + 1, [testGroup name]]];\n    \n    return cell;\n}\n\n- (UIView *)headerView {\n    if (!self->headerView) {\n        [[NSBundle mainBundle] loadNibNamed:@\"ZumoMainTableHeader\" owner:self options:nil];\n    }\n    \n    if (self->headerView) {\n        NSArray *lastUsedApp = [[ZumoTestGlobals sharedInstance] loadAppInfo];\n        if (lastUsedApp) {\n            [appUrlField setText:lastUsedApp[0]];\n            [appKeyField setText:lastUsedApp[1]];\n        }\n        \n        NSString *lastUploadUrl = [[ZumoTestGlobals sharedInstance] loadUploadLogsUrl];\n        if (lastUploadUrl) {\n            [uploadUrlField setText:lastUploadUrl];\n        }\n    }\n    \n    return self->headerView;\n}\n\n- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {\n    return [self headerView];\n}\n\n- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {\n    return [[self headerView] bounds].size.height;\n}\n\n- (BOOL)validateAppInfoForUrl:(NSString *)appUrl andKey:(NSString *)appKey {\n    if ([appUrl length] == 0 || [appKey length] == 0) {\n        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@\"Error\" message:@\"Please set the application URL and key before proceeding\" delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\n        [alert show];\n        return NO;\n    } else {\n        return YES;\n    }\n}\n\n#pragma mark - Table view delegate\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    if (![self validateAndRefreshClient]) {\n        return;\n    }\n\n    NSString *uploadLogsUrl = [uploadUrlField text];\n\n    ZumoTestGroup *subgroup = [[self testGroups] objectAtIndex:[indexPath row]];\n    ZumoTestGroupTableViewController *subview = [[ZumoTestGroupTableViewController alloc] init];\n    [subview setTestGroup:subgroup];\n    if (uploadLogsUrl && [uploadLogsUrl length]) {\n        [subview setLogUploadUrl:uploadLogsUrl];\n    }\n    [[self navigationController] pushViewController:subview animated:YES];\n}\n\n- (BOOL)textFieldShouldReturn:(UITextField *)textField {\n    [textField resignFirstResponder];\n    return YES;\n}\n\n#pragma mark - ZumoTestGroup delegate\n\n- (void)zumoTestGroupStarted:(NSString *)groupName {\n    NSLog(@\"Tests for %@ started.\", groupName);\n}\n\n- (void)zumoTestGroupFinished:(NSString *)groupName withPassed:(int)passedTests andFailed:(int)failedTests andSkipped:(int)skippedTests {\n    NSLog(@\"Tests for group %@ finished: pass: %d, fail: %d, skip: %d\", groupName, passedTests, failedTests, skippedTests);\n}\n\n- (void)zumoTestGroupSingleTestStarted:(int)testIndex {\n    \n}\n\n- (void)zumoTestGroupSingleTestFinished:(int)testIndex withResult:(TestStatus)testStatus {\n    \n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoMiscTests.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n@interface ZumoMiscTests : NSObject\n\n+ (NSArray *)createTests;\n+ (NSString *)groupDescription;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoMiscTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoMiscTests.h\"\n#import \"ZumoTest.h\"\n#import \"ZumoTestGlobals.h\"\n#import <WindowsAzureMobileServices/WindowsAzureMobileServices.h>\n\n// Private classes\n\n// Filter which will save the User-Agent request header\n@interface FilterToCaptureHttpTraffic : NSObject <MSFilter>\n\n@property (nonatomic, copy) NSString *userAgent;\n@property (nonatomic, copy) NSData *responseContent;\n@property (nonatomic, strong) NSDictionary *requestHeaders;\n@property (nonatomic, strong) NSDictionary *responseHeaders;\n\n@end\n\n@implementation FilterToCaptureHttpTraffic\n\n@synthesize userAgent;\n@synthesize requestHeaders = _requestHeaders;\n@synthesize responseHeaders = _responseHeaders;\n@synthesize responseContent = _responseContent;\n\n- (id)init {\n    self = [super init];\n    if (self) {\n        _requestHeaders = [[NSMutableDictionary alloc] init];\n        _responseHeaders = [[NSMutableDictionary alloc] init];\n    }\n    \n    return self;\n}\n\n- (void)handleRequest:(NSURLRequest *)request next:(MSFilterNextBlock)onNext response:(MSFilterResponseBlock)onResponse {\n    NSDictionary *headers = [request allHTTPHeaderFields];\n    _requestHeaders = [NSMutableDictionary new];\n    [_requestHeaders setValuesForKeysWithDictionary:headers];\n    userAgent = request.allHTTPHeaderFields[@\"User-Agent\"];\n    NSString *clientVersion = [NSString stringWithFormat:@\"%d.%d.%d.0\", WindowsAzureMobileServicesSdkMajorVersion, WindowsAzureMobileServicesSdkMinorVersion, WindowsAzureMobileServicesSdkBuildVersion];\n    [[[ZumoTestGlobals sharedInstance] globalTestParameters] setObject:clientVersion forKey:CLIENT_VERSION_KEY];\n    onNext(request, ^(NSHTTPURLResponse *response, NSData *data, NSError *error) {\n        NSDictionary *respHeaders = [response allHeaderFields];\n        _responseHeaders = [NSMutableDictionary new];\n        [_responseHeaders setValuesForKeysWithDictionary:respHeaders];\n        NSString *runtimeVersion = [_responseHeaders objectForKey:@\"x-zumo-version\"];\n        if (runtimeVersion) {\n            [[[ZumoTestGlobals sharedInstance] globalTestParameters] setObject:runtimeVersion forKey:RUNTIME_VERSION_KEY];\n        }\n        _responseContent = [NSData dataWithData:data];\n        onResponse(response, data, error);\n    });\n}\n\n@end\n\n// Filter which will bypass the service, responding directly to the caller\n@interface FilterToBypassService : NSObject <MSFilter>\n\n@property (nonatomic) int statusCode;\n@property (nonatomic, copy) NSString *contentType;\n@property (nonatomic, copy) NSString *body;\n@property (nonatomic, strong) NSError *errorToReturn;\n\n@end\n\n@implementation FilterToBypassService\n\n@synthesize statusCode, contentType, body, errorToReturn;\n\n- (void)handleRequest:(NSURLRequest *)request next:(MSFilterNextBlock)onNext response:(MSFilterResponseBlock)onResponse {\n    NSHTTPURLResponse *resp = nil;\n    NSData *data = nil;\n    NSError *error = nil;\n    if ([self errorToReturn]) {\n        error = [self errorToReturn];\n    } else {\n        resp = [[NSHTTPURLResponse alloc] initWithURL:[request URL] statusCode:[self statusCode] HTTPVersion:@\"1.1\" headerFields:@{@\"Content-Type\": [self contentType]}];\n        data = [[self body] dataUsingEncoding:NSUTF8StringEncoding];\n    }\n    \n    onResponse(resp, data, error);\n}\n\n@end\n\n// Filter which will send multiple requests instead of one,\n// returning the response of the last one\n@interface SendMultipleRequestsFilter : NSObject <MSFilter>\n\n@property (nonatomic) int numberOfRequests;\n@property (nonatomic) BOOL testFailed;\n@property (nonatomic) NSMutableArray *testLogs;\n\n@end\n\n@implementation SendMultipleRequestsFilter\n\n@synthesize testFailed = _testFailed;\n@synthesize testLogs = _testLogs;\n@synthesize numberOfRequests = _numberOfRequests;\n\n-(id)init {\n    self = [super init];\n    if (self) {\n        _numberOfRequests = 2;\n        _testFailed = NO;\n        _testLogs = [[NSMutableArray alloc] init];\n    }\n    \n    return self;\n}\n\n- (void)setNumberOfRequests:(int)numberOfRequests {\n    if (numberOfRequests >= 1 || numberOfRequests <= 4) {\n        _numberOfRequests = numberOfRequests;\n    } else {\n        _testFailed = YES;\n        [_testLogs addObject:@\"Number of requests must be between 1 and 4\"];\n        _numberOfRequests = 2;\n    }\n}\n\n- (void)handleRequest:(NSURLRequest *)request next:(MSFilterNextBlock)onNext response:(MSFilterResponseBlock)onResponse {\n    onNext(request, ^(NSHTTPURLResponse *response, NSData *data, NSError *error) {\n        [self addResponseToLog:response forRequest:request];\n        if (_numberOfRequests == 1) {\n            onResponse(response, data, error);\n        } else {\n            onNext(request, ^(NSHTTPURLResponse *response, NSData *data, NSError *error) {\n                [self addResponseToLog:response forRequest:request];\n                if (_numberOfRequests == 2) {\n                    onResponse(response, data, error);\n                } else {\n                    onNext(request, ^(NSHTTPURLResponse *response, NSData *data, NSError *error) {\n                        [self addResponseToLog:response forRequest:request];\n                        if (_numberOfRequests == 3) {\n                            onResponse(response, data, error);\n                        } else {\n                            onNext(request, ^(NSHTTPURLResponse *response, NSData *data, NSError *error) {\n                                [self addResponseToLog:response forRequest:request];\n                                onResponse(response, data, error);\n                            });\n                        }\n                    });\n                }\n            });\n        }\n    });\n}\n\n- (void)addResponseToLog:(NSHTTPURLResponse *)response forRequest:(NSURLRequest *)request {\n    [_testLogs addObject:[NSString stringWithFormat:@\"%@ request to %@: Response %d\", [request HTTPMethod], [request URL], response.statusCode]];\n}\n\n@end\n\n// Filter which will save the User-Agent request header\n@interface FilterToSimulateOptimisticConcurrency : NSObject <MSFilter>\n\n@end\n\n@implementation FilterToSimulateOptimisticConcurrency\n\n- (void)handleRequest:(NSURLRequest *)request next:(MSFilterNextBlock)onNext response:(MSFilterResponseBlock)onResponse {\n\n    // Append __systemProperties=* to request URI\n    NSString *url = [[request URL] absoluteString];\n    NSString *query, *urlWithoutQuery;\n    NSRange indexOfQuery = [url rangeOfString:@\"?\"];\n    if (indexOfQuery.location == NSNotFound) {\n        query = @\"\";\n        urlWithoutQuery = url;\n    } else {\n        query = [url substringFromIndex:(indexOfQuery.location + 1)];\n        query = [query stringByAppendingString:@\"&\"];\n        urlWithoutQuery = [url substringToIndex:indexOfQuery.location];\n    }\n    urlWithoutQuery = [urlWithoutQuery stringByAppendingString:@\"?\"];\n    query = [query stringByAppendingString:@\"__systemProperties=*\"];\n    url = [urlWithoutQuery stringByAppendingString:query];\n\n    // Clone the request and headers\n    NSMutableURLRequest *newRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];\n    NSString *HTTPMethod = [request HTTPMethod];\n    [newRequest setHTTPMethod:HTTPMethod];\n    NSDictionary *requestHeaders = [request allHTTPHeaderFields];\n    for (NSString *headerName in [requestHeaders keyEnumerator]) {\n        NSString *headerValue = [requestHeaders objectForKey:headerName];\n        [newRequest setValue:headerValue forHTTPHeaderField:headerName];\n    }\n    [newRequest setHTTPBody:[request HTTPBody]];\n    \n    // Remove the system properties from the request\n    if ([HTTPMethod isEqualToString:@\"PUT\"] || [HTTPMethod isEqualToString:@\"PATCH\"]) {\n        NSError *error;\n        NSData *requestBody = [request HTTPBody];\n        id body = [NSJSONSerialization JSONObjectWithData:requestBody options:0 error:&error];\n        if (error) {\n            onResponse(nil, nil, error);\n            return;\n        }\n        if ([body isKindOfClass:[NSDictionary class]]) {\n            NSDictionary *item = body;\n            NSString *version = nil;\n            NSMutableDictionary *newItem = [[NSMutableDictionary alloc] init];\n            BOOL propertyRemoved = NO;\n            for (NSString *key in [item allKeys]) {\n                if ([key hasPrefix:@\"__\"]) {\n                    propertyRemoved = YES;\n                    if ([key isEqualToString:@\"__version\"]) {\n                        version = [item objectForKey:key];\n                    }\n                } else {\n                    [newItem setValue:[item objectForKey:key] forKey:key];\n                }\n            }\n            \n            if (version) {\n                NSString *etag = [NSString stringWithFormat:@\"\\\"%@\\\"\", version];\n                [newRequest setValue:etag forHTTPHeaderField:@\"If-Match\"];\n            }\n            \n            if (propertyRemoved) {\n                NSData *newBody = [NSJSONSerialization dataWithJSONObject:newItem options:0 error:&error];\n                if (error) {\n                    onResponse(nil, nil, error);\n                    return;\n                }\n                [newRequest setHTTPBody:newBody];\n            }\n        }\n    }\n\n    // Now send the updated request\n    onNext(newRequest, ^(NSHTTPURLResponse *response, NSData *data, NSError *error) {\n        if (error) {\n            onResponse(response, data, error);\n            return;\n        }\n\n        // Move the response ETag header into a __version field\n        NSDictionary *respHeaders = [response allHeaderFields];\n        NSString *contentType = [respHeaders objectForKey:@\"Content-Type\"];\n        if ([contentType isEqualToString:@\"application/json\"]) {\n            NSString *etag = [respHeaders objectForKey:@\"ETag\"];\n            if (etag && data) {\n                if ([etag hasPrefix:@\"\\\"\"]) etag = [etag substringFromIndex:1];\n                if ([etag hasSuffix:@\"\\\"\"]) etag = [etag substringToIndex:([etag length] - 1)];\n                id body = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];\n                if (!error) {\n                    if ([body isKindOfClass:[NSDictionary class]]) {\n                        NSMutableDictionary *item = [[NSMutableDictionary alloc] initWithDictionary:body];\n                        [item setValue:etag forKey:@\"__version\"];\n                        data = [NSJSONSerialization dataWithJSONObject:item options:0 error:&error];\n                        if (error) data = nil;\n                    }\n                }\n            }\n        }\n\n        onResponse(response, data, error);\n    });\n}\n\n@end\n\ntypedef enum { CPClientWins, CPServerWins, CPTwoWayMerge } ConflictPolicy;\n\n// Main implementation\n@implementation ZumoMiscTests\n\nstatic NSString *stringIdTableName = @\"stringIdRoundTripTable\";\nstatic NSString *parameterTestTableName = @\"ParamsTestTable\";\n\n+ (NSArray *)createTests {\n    NSMutableArray *result = [[NSMutableArray alloc] init];\n    [result addObject:[self createUserAgentTest]];\n    [result addObject:[self createFilterWithMultipleRequestsTest]];\n    NSUInteger bypassFilterTestIndex = [result count];\n    [result addObject:[self createFilterTestWhichBypassesService]];\n    [result addObject:[self createFilterTestToEnsureWithFilterDoesNotChangeClient]];\n    NSUInteger parameterPassingTestIndex = [result count];\n    [result addObject:[self createParameterPassingTest]];\n    [result addObject:[self createOptimisticConcurrencyWithFilterTest]];\n    \n    [result addObject:[self createOptimisticConcurrencyTest:@\"Update conflicts (client side) - client wins\" conflictPolicy:CPClientWins]];\n    [result addObject:[self createOptimisticConcurrencyTest:@\"Update conflicts (client side) - server wins\" conflictPolicy:CPServerWins]];\n    [result addObject:[self createOptimisticConcurrencyTest:@\"Update conflicts (client side) - two-way merge\" conflictPolicy:CPTwoWayMerge]];\n    \n    [result addObject:[self createOptimisticConcurrencyWithServerResolvedConflictTest:@\"Update conflicts (server side) - client wins\" clientWins:YES]];\n    [result addObject:[self createOptimisticConcurrencyWithServerResolvedConflictTest:@\"Update conflicts (server side) - client wins\" clientWins:NO]];\n    \n    [result addObject:[self createSystemPropertiesTest]];\n    \n    for (NSUInteger i = 0; i < [result count]; i++) {\n        if (i != bypassFilterTestIndex && i != parameterPassingTestIndex) {\n            ZumoTest *test = [result objectAtIndex:i];\n            [test addRequiredFeature:FEATURE_STRING_ID_TABLES];\n        }\n    }\n\n    return result;\n}\n\n+ (ZumoTest *)createSystemPropertiesTest {\n    return [ZumoTest createTestWithName:@\"Accessing system properties\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:stringIdTableName];\n        [table setSystemProperties:(MSSystemPropertyCreatedAt | MSSystemPropertyUpdatedAt | MSSystemPropertyVersion)];\n        NSDictionary *item = @{@\"name\":@\"unused\"};\n        [table insert:item completion:^(NSDictionary *inserted, NSError *error) {\n            if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"Error inserting item\"]) {\n                return;\n            }\n            \n            [test addLog:[NSString stringWithFormat:@\"Inserted item: %@\", inserted]];\n            NSString *itemId = [inserted objectForKey:@\"id\"];\n            NSDate *createdAt = [inserted objectForKey:MSSystemColumnCreatedAt];\n            NSDate *updatedAt = [inserted objectForKey:MSSystemColumnUpdatedAt];\n            [test addLog:[NSString stringWithFormat:@\"Created at: %@\", [ZumoTestGlobals dateToString:createdAt]]];\n            [test addLog:[NSString stringWithFormat:@\"Updated at: %@\", [ZumoTestGlobals dateToString:updatedAt]]];\n            \n            [test addLog:@\"Now adding a new item\"];\n            NSDictionary *item2 = @{@\"name\":@\"unused\"};\n            [table insert:item2 completion:^(NSDictionary *inserted2, NSError *error) {\n                if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"Error inserting second item\"]) {\n                    return;\n                }\n                [test addLog:[NSString stringWithFormat:@\"Inserted second item: %@\", inserted2]];\n                NSString *itemId2 = [inserted2 objectForKey:@\"id\"];\n                NSDate *createdAt2 = [inserted2 objectForKey:MSSystemColumnCreatedAt];\n                NSDate *updatedAt2 = [inserted2 objectForKey:MSSystemColumnUpdatedAt];\n                [test addLog:[NSString stringWithFormat:@\"Second item, created at: %@\", [ZumoTestGlobals dateToString:createdAt2]]];\n                [test addLog:[NSString stringWithFormat:@\"Second item, updated at: %@\", [ZumoTestGlobals dateToString:updatedAt2]]];\n                \n                if ([createdAt2 compare:createdAt] == NSOrderedAscending) {\n                    [test addLog:[NSString stringWithFormat:@\"Error, second creation date is earlier than first\"]];\n                    completion(NO);\n                    return;\n                }\n                \n                if ([updatedAt2 compare:updatedAt] == NSOrderedAscending) {\n                    [test addLog:[NSString stringWithFormat:@\"Error, second update date is earlier than first\"]];\n                    completion(NO);\n                    return;\n                }\n                \n                [test addLog:@\"Now updating an item\"];\n                NSMutableDictionary *item3 = [[NSMutableDictionary alloc] initWithDictionary:inserted];\n                [item3 setValue:@\"unused again\" forKey:@\"name\"];\n                [table update:item3 completion:^(NSDictionary *updated, NSError *error) {\n                    if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"Error updating item\"]) {\n                        return;\n                    }\n                    [test addLog:[NSString stringWithFormat:@\"Updated first item: %@\", updated]];\n                    [test addLog:[NSString stringWithFormat:@\"New value for the '%@' column: %@\", MSSystemColumnUpdatedAt, [ZumoTestGlobals dateToString:updatedAt2]]];\n                   \n                    BOOL testPassed = YES;\n                    if (![createdAt isEqualToDate:[updated objectForKey:MSSystemColumnCreatedAt]]) {\n                        [test addLog:@\"Error, updating changed the creation time of the item\"];\n                        testPassed = NO;\n                    }\n                    \n                    NSDate *newUpdatedAt = [updated objectForKey:MSSystemColumnUpdatedAt];\n                    if ([newUpdatedAt compare:updatedAt] != NSOrderedDescending) {\n                        [test addLog:[NSString stringWithFormat:@\"Error, second update date has not been updated\"]];\n                        completion(NO);\n                        return;\n                    }\n                    \n                    [test addLog:@\"Clean up, deleting items...\"];\n                    [table deleteWithId:itemId completion:^(id itemId, NSError *error) {\n                        [table deleteWithId:itemId2 completion:^(id itemId, NSError *error) {\n                            [test addLog:@\"...done\"];\n                            completion(testPassed);\n                        }];\n                    }];\n                }];\n            }];\n        }];\n    }];\n}\n\n+ (ZumoTest *)createOptimisticConcurrencyWithServerResolvedConflictTest:(NSString *)testName clientWins:(BOOL)clientWins {\n    return [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:stringIdTableName];\n        [table setSystemProperties:MSSystemPropertyVersion];\n        MSClient *client2 = [MSClient clientWithApplicationURL:[client applicationURL] applicationKey:[client applicationKey]];\n        MSTable *table2 = [client2 tableWithName:stringIdTableName];\n        [table2 setSystemProperties:MSSystemPropertyVersion];\n        NSString *firstName = @\"John Doe\";\n        NSString *secondName = @\"Jane Roe\";\n        NSString *thirdName = @\"Jim Poe\";\n        NSNumber *firstNumber = @123;\n        NSNumber *secondNumber = @456;\n        NSDictionary *item = @{@\"name\":firstName,@\"number\":firstNumber};\n        [table insert:item completion:^(NSDictionary *inserted, NSError *error) {\n            if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"[client 1] Error inserting item\"]) {\n                return;\n            }\n            [test addLog:[NSString stringWithFormat:@\"[client 1] Inserted item: %@\", inserted]];\n            \n            [table2 readWithId:[inserted objectForKey:@\"id\"] completion:^(NSDictionary *retrieved, NSError *error) {\n                if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"[client 2] Error retrieving item\"]) {\n                    return;\n                }\n                [test addLog:[NSString stringWithFormat:@\"[client 2] Retrieved item: %@\", retrieved]];\n                \n                NSMutableDictionary *toUpdate = [[NSMutableDictionary alloc] initWithDictionary:retrieved];\n                [toUpdate setValue:secondName forKey:@\"name\"];\n                [toUpdate setValue:secondNumber forKey:@\"number\"];\n                [table2 update:toUpdate completion:^(NSDictionary *updated, NSError *error) {\n                    if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"[client 2] Error updating item\"]) {\n                        return;\n                    }\n\n                    [test addLog:[NSString stringWithFormat:@\"[client 2] Updated item: %@\", updated]];\n                    \n                    NSDictionary *params = @{@\"conflictPolicy\":(clientWins ? @\"clientWins\" : @\"serverWins\")};\n                    NSMutableDictionary *toUpdate1 = [[NSMutableDictionary alloc] initWithDictionary:inserted];\n                    [toUpdate1 setValue:thirdName forKey:@\"name\"];\n                    [test addLog:[NSString stringWithFormat:@\"[client 1] Will try to update with policy that '%@' wins with object: %@\", clientWins ? @\"client\" : @\"server\", toUpdate1]];\n                   \n                    NSString *oldName = [updated objectForKey:@\"name\"];\n                    NSString *newName = [toUpdate1 objectForKey:@\"name\"];\n\n                    [table update:toUpdate1 parameters:params completion:^(NSDictionary *itemOnClient1, NSError *error) {\n                        if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"[client 1] Error updating item\"]) {\n                            return;\n                        }\n                        \n                        [test addLog:[NSString stringWithFormat:@\"[client 1] Updated item: %@\", itemOnClient1]];\n\n                        [table2 readWithId:[inserted objectForKey:@\"id\"] completion:^(NSDictionary *itemOnClient2, NSError *error) {\n                            if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"[client 2] Error retrieving item\"]) {\n                                return;\n                            }\n                            \n                            [test addLog:[NSString stringWithFormat:@\"[client 2] Retrieved item: %@\", itemOnClient2]];\n\n                            BOOL testPassed = YES;\n                            NSString *client1Name = [itemOnClient1 objectForKey:@\"name\"];\n                            NSString *client2Name = [itemOnClient2 objectForKey:@\"name\"];\n                            if (clientWins) {\n                                if (![newName isEqualToString:client1Name] || ![newName isEqualToString:client2Name]) {\n                                    testPassed = NO;\n                                    [test addLog:@\"Error, name was not updated in a 'client wins' policy\"];\n                                }\n                            } else {\n                                // the name should have remained the old one\n                                if (![oldName isEqualToString:client1Name] || ![oldName isEqualToString:client2Name]) {\n                                    testPassed = NO;\n                                    [test addLog:@\"Error, name was updated in a 'server wins' policy\"];\n                                }\n                            }\n                            \n                            if (testPassed) {\n                                [test addLog:@\"Table operations behave as expected\"];\n                            }\n                            [test addLog:@\"Cleaning up...\"];\n                            [table delete:itemOnClient1 completion:^(id itemId, NSError *error) {\n                                if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"Error deleting item\"]) {\n                                    return;\n                                }\n                                \n                                completion(testPassed);\n                            }];\n                        }];\n                    }];\n                }];\n            }];\n        }];\n    }];\n}\n\n+ (ZumoTest *)createOptimisticConcurrencyTest:(NSString *)testName conflictPolicy:(ConflictPolicy)conflictPolicy {\n    return [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:stringIdTableName];\n        [table setSystemProperties:MSSystemPropertyVersion];\n        int firstNumber = 123;\n        int secondNumber = 456;\n        NSString *firstName = @\"John Doe\";\n        NSString *secondName = @\"Jane Roe\";\n        NSString *thirdName = @\"Jim Poe\";\n        NSDictionary *item = @{@\"name\":firstName,@\"number\":[NSNumber numberWithInt:firstNumber]};\n        [table insert:item completion:^(NSDictionary *inserted, NSError *error) {\n            if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"[client 1] Error inserting\"]) {\n                return;\n            }\n            \n            [test addLog:[NSString stringWithFormat:@\"[client 1] Inserted item: %@\", inserted]];\n            MSClient *client2 = [MSClient clientWithApplicationURL:[client applicationURL] applicationKey:[client applicationKey]];\n            MSTable *table2 = [client2 tableWithName:stringIdTableName];\n            [table2 setSystemProperties:MSSystemPropertyVersion];\n            [table2 readWithId:[inserted objectForKey:@\"id\"] completion:^(NSDictionary *retrieved, NSError *error) {\n                if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"[client 2] Error retrieving item\"]) {\n                    return;\n                }\n\n                [test addLog:[NSString stringWithFormat:@\"[client 2] Retrieved the item: %@\", retrieved]];\n                NSMutableDictionary *toUpdate = [[NSMutableDictionary alloc] initWithDictionary:retrieved];\n                [toUpdate setValue:secondName forKey:@\"name\"];\n                [toUpdate setValue:[NSNumber numberWithInt:secondNumber] forKey:@\"number\"];\n                [test addLog:@\"[client 2] Updated the item, will update in the server now\"];\n                [table2 update:toUpdate completion:^(NSDictionary *updated, NSError *error) {\n                    if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"[client 2] Error updating item\"]) {\n                        return;\n                    }\n                    \n                    [test addLog:[NSString stringWithFormat:@\"[client 2] Item has been updated: %@\", updated]];\n                    \n                    [test addLog:@\"[client 1] Will try to update again, should fail\"];\n                    NSMutableDictionary *toUpdate = [[NSMutableDictionary alloc] initWithDictionary:inserted];\n                    [toUpdate setValue:thirdName forKey:@\"name\"];\n                    [table update:toUpdate completion:^(NSDictionary *unused, NSError *error) {\n                        if (!error) {\n                            [test addLog:[NSString stringWithFormat:@\"[client 1] Error, the update succeeded but should have failed. Item = %@\", unused]];\n                            completion(NO);\n                            return;\n                        }\n                        \n                        [test addLog:[NSString stringWithFormat:@\"[client 1] Received expected error: %@\", error]];\n                        NSHTTPURLResponse *resp = [[error userInfo] objectForKey:MSErrorResponseKey];\n                        if ([resp statusCode] != 412) {\n                            [test addLog:[NSString stringWithFormat:@\"[client 1] Error, server should have responded with a 412 (Precondition Failed), actual status = %d\", [resp statusCode]]];\n                            completion(NO);\n                            return;\n                        }\n                        \n                        NSDictionary *serverItem = [[error userInfo] objectForKey:MSErrorServerItemKey];\n                        [test addLog:[NSString stringWithFormat:@\"[client 1] Got the expected (412) error. Server item: %@\", serverItem]];\n                        \n                        NSString *serverVersion = [serverItem objectForKey:MSSystemColumnVersion];\n                        NSString *client2Version = [updated objectForKey:MSSystemColumnVersion];\n                        if (![serverVersion isEqualToString:client2Version]) {\n                            [test addLog:@\"[client 1] Error, server item's version is not the same as the second item version\"];\n                            completion(NO);\n                            return;\n                        }\n                        \n                        NSMutableDictionary *mergedItem = [[NSMutableDictionary alloc] init];\n                        [mergedItem setValue:serverVersion forKey:MSSystemColumnVersion];\n                        [mergedItem setValue:[updated objectForKey:@\"id\"] forKey:@\"id\"];\n                        NSString *expectedMergedName;\n                        NSNumber *expectedMergedNumber;\n                        if (conflictPolicy == CPClientWins) {\n                            [test addLog:@\"[client 1] Merging with a 'client wins' policy\"];\n                            expectedMergedName = [toUpdate objectForKey:@\"name\"];\n                            expectedMergedName = [toUpdate objectForKey:@\"number\"];\n                        } else if (conflictPolicy == CPServerWins) {\n                            [test addLog:@\"[client 1] Merging with a 'server wins' policy\"];\n                            expectedMergedName = [serverItem objectForKey:@\"name\"];\n                            expectedMergedName = [serverItem objectForKey:@\"number\"];\n                        } else {\n                            [test addLog:@\"[client 1] Merging with a 'two-way merge' policy: name from client, number from server\"];\n                            expectedMergedName = [toUpdate objectForKey:@\"name\"];\n                            expectedMergedName = [serverItem objectForKey:@\"number\"];\n                        }\n                        [mergedItem setValue:expectedMergedName forKey:@\"name\"];\n                        [mergedItem setValue:expectedMergedNumber forKey:@\"number\"];\n\n                        [test addLog:[NSString stringWithFormat:@\"[client 1] Merged item: %@\", mergedItem]];\n                        [test addLog:@\"[client 1] Trying to update again, should work this time\"];\n                        [table update:mergedItem completion:^(NSDictionary *mergeUpdated, NSError *error) {\n                            if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"[client 1] Error updating item\"]) {\n                                return;\n                            }\n\n                            NSMutableArray *errors = [[NSMutableArray alloc] init];\n                            [test addLog:[NSString stringWithFormat:@\"[client 1] Item has been updated: %@\", mergeUpdated]];\n                            if (![ZumoTestGlobals compareObjects:mergedItem with:mergeUpdated ignoreKeys:@[@\"id\", MSSystemColumnVersion] log:errors]) {\n                                [test addLog:@\"Error, server version of the merged item doesn't match the client one\"];\n                                for (NSString *err in errors) {\n                                    [test addLog:[@\"  - \" stringByAppendingString:err]];\n                                }\n                                completion(NO);\n                                return;\n                            }\n                            \n                            [test addLog:@\"Clean up - deleting the item...\"];\n                            [table delete:mergeUpdated completion:^(id itemId, NSError *error) {\n                                if (![self validateErrorNotNullForTest:test error:error completion:completion errorMessage:@\"Error deleting item\"]) {\n                                    return;\n                                }\n                                \n                                [test addLog:@\"...done\"];\n                                completion(YES);\n                            }];\n                        }];\n                    }];\n                }];\n            }];\n        }];\n    }];\n}\n\n+ (BOOL)validateErrorNotNullForTest:(ZumoTest *)test error:(NSError *)error completion:(ZumoTestCompletion)completion errorMessage:(NSString *)errorMessage {\n    if (error) {\n        [test addLog:[NSString stringWithFormat:@\"%@: %@\", errorMessage, error]];\n        completion(NO);\n        return NO;\n    } else {\n        return YES;\n    }\n}\n\n+ (ZumoTest *)createOptimisticConcurrencyWithFilterTest {\n    return [ZumoTest createTestWithName:@\"Using filters to access optimistic concurrency feature\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        client = [client clientWithFilter:[[FilterToSimulateOptimisticConcurrency alloc] init]];\n        MSTable *table = [client tableWithName:stringIdTableName];\n        NSDictionary *item = @{@\"name\":@\"John Doe\",@\"number\":@123};\n        [table insert:item completion:^(NSDictionary *inserted, NSError *error) {\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error inserting first item: %@\", error]];\n                completion(NO);\n                return;\n            }\n            \n            [test addLog:[NSString stringWithFormat:@\"Inserted: %@\", inserted]];\n            id itemId = [inserted objectForKey:@\"id\"];\n            NSMutableDictionary *toUpdate = [[NSMutableDictionary alloc] initWithDictionary:inserted];\n            [toUpdate setValue:@\"Jane Roe\" forKey:@\"name\"];\n            [table update:toUpdate completion:^(NSDictionary *updated, NSError *error) {\n                if (error) {\n                    [test addLog:[NSString stringWithFormat:@\"Error updating item: %@\", error]];\n                    completion(NO);\n                    return;\n                }\n\n                [test addLog:[NSString stringWithFormat:@\"Updated: %@\", updated]];\n                [test addLog:@\"Now updating with incorrect version\"];\n                [toUpdate setValue:@\"incorrect\" forKey:@\"__version\"];\n                [table update:toUpdate completion:^(NSDictionary *updated2, NSError *error) {\n                    BOOL testPassed = NO;\n                    if (error) {\n                        [test addLog:[NSString stringWithFormat:@\"Got error as expected: %@\", error]];\n                        testPassed = YES;\n                    } else {\n                        [test addLog:[NSString stringWithFormat:@\"Error, update should not have worked, but it did: %@\", updated2]];\n                    }\n                    \n                    [test addLog:@\"Cleaning up...\"];\n                    [table deleteWithId:itemId completion:^(NSNumber *itemId, NSError *error) {\n                        [test addLog:[@\"Delete item result: \" stringByAppendingString:error ? @\"failed\" : @\"succeeded\"]];\n                        completion(testPassed);\n                    }];\n                }];\n            }];\n        }];\n    }];\n}\n\n+ (ZumoTest *)createParameterPassingTest {\n    return [ZumoTest createTestWithName:@\"Parameter passing tests\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:parameterTestTableName];\n        NSDictionary *baseDict = @{\n                               @\"item\": @\"simple\",\n                               @\"item\": @\"simple\" ,\n                               @\"empty\": @\"\" ,\n                               @\"spaces\": @\"with spaces\",\n                               @\"specialChars\": @\"`!@#$%^&*()-=[]\\\\;',./~_+{}|:\\\"<>?\",\n                               @\"latin\": @\"ãéìôü ÇñÑ\",\n                               @\"arabic\": @\"الكتاب على الطاولة\",\n                               @\"chinese\": @\"这本书在桌子上\",\n                               @\"japanese\": @\"本は机の上に\",\n                               @\"hebrew\": @\"הספר הוא על השולחן\",\n                               @\"name+with special&chars\": @\"should just work\"\n                               };\n        NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:baseDict];\n        [dict setValue:@\"insert\" forKey:@\"operation\"];\n        NSMutableDictionary *item = [[NSMutableDictionary alloc] initWithDictionary:@{@\"name\":@\"John Doe\"}];\n        [table insert:item parameters:dict completion:^(NSDictionary *inserted, NSError *error) {\n            if ([self handleIfError:error operation:@\"insert\" test:test completion:completion]) {\n                return;\n            }\n            if (![self validateParameters:test operation:@\"insert\" expected:dict actual:[self parseJson:inserted[@\"parameters\"]]]) {\n                completion(NO);\n                return;\n            }\n            \n            dict[@\"operation\"] = @\"update\";\n            [item setValue:@1 forKey:@\"id\"];\n            [table update:item parameters:dict completion:^(NSDictionary *updated, NSError *error) {\n                if ([self handleIfError:error operation:@\"update\" test:test completion:completion]) {\n                    return;\n                }\n                if (![self validateParameters:test operation:@\"update\" expected:dict actual:[self parseJson:updated[@\"parameters\"]]]) {\n                    completion(NO);\n                    return;\n                }\n                \n                dict[@\"operation\"] = @\"lookup\";\n                [table readWithId:@1 parameters:dict completion:^(NSDictionary *lookedUp, NSError *error) {\n                    if ([self handleIfError:error operation:@\"lookup\" test:test completion:completion]) {\n                        return;\n                    }\n                    if (![self validateParameters:test operation:@\"lookup\" expected:dict actual:[self parseJson:lookedUp[@\"parameters\"]]]) {\n                        completion(NO);\n                        return;\n                    }\n                    \n                    dict[@\"operation\"] = @\"read\";\n                    MSQuery *query = [table query];\n                    [query setParameters:dict];\n                    [query readWithCompletion:^(NSArray *readItems, NSInteger totalCount, NSError *error) {\n                        if ([self handleIfError:error operation:@\"read\" test:test completion:completion]) {\n                            return;\n                        }\n                        if (![self validateParameters:test operation:@\"read\" expected:dict actual:[self parseJson:readItems[0][@\"parameters\"]]]) {\n                            completion(NO);\n                            return;\n                        }\n                        \n                        dict[@\"operation\"] = @\"delete\";\n                        FilterToCaptureHttpTraffic *capturingFilter = [[FilterToCaptureHttpTraffic alloc] init];\n                        MSClient *filteredClient = [client clientWithFilter:capturingFilter];\n                        MSTable *filteredTable = [filteredClient tableWithName:parameterTestTableName];\n                        [filteredTable deleteWithId:@1 parameters:dict completion:^(NSNumber *itemId, NSError *error) {\n                            if ([self handleIfError:error operation:@\"delete\" test:test completion:completion]) {\n                                return;\n                            }\n\n                            NSString *responseContent = [[NSString alloc] initWithData:[capturingFilter responseContent] encoding:NSUTF8StringEncoding];\n                            NSDictionary *deleteBody = [self parseJson:responseContent];\n                            if (![self validateParameters:test operation:@\"delete\" expected:dict actual:[self parseJson:deleteBody[@\"parameters\"]]]) {\n                                completion(NO);\n                                return;\n                            }\n                            \n                            [test addLog:@\"All validations passed\"];\n                            completion(YES);\n                        }];\n                    }];\n                }];\n            }];\n        }];\n    }];\n}\n\n+ (NSDictionary *)parseJson:(NSString *)json {\n    NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];\n    NSError *error;\n    NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];\n    return result;\n}\n+ (BOOL)validateParameters:(ZumoTest *)test operation:(NSString *)operation expected:(NSDictionary *)expected actual:(NSDictionary *)actual {\n    BOOL same = YES;\n    NSString *paramaterName;\n    [test addLog:[NSString stringWithFormat:@\"Validating parameters for operation %@\", operation]];\n    for (paramaterName in [expected keyEnumerator]) {\n        NSString *expectedValue = expected[paramaterName];\n        NSString *actualValue = actual[paramaterName];\n        if (!actualValue) {\n            [test addLog:[NSString stringWithFormat:@\"Parameter %@ not found in the response\", paramaterName]];\n            same = NO;\n        } else {\n            if (![expectedValue isEqualToString:actualValue]) {\n                [test addLog:[NSString stringWithFormat:@\"Value of parameter %@ is incorrect. Expected: %@; actual: %@\", paramaterName, expectedValue, actualValue]];\n                same = NO;\n            }\n        }\n    }\n    \n    if (same) {\n        [test addLog:@\"All parameter validated correctly\"];\n    }\n    \n    return same;\n}\n\n+ (BOOL)handleIfError:(NSError *)error operation:(NSString *)operation test:(ZumoTest *)test completion:(ZumoTestCompletion) completion {\n    if (error) {\n        [test addLog:[[NSString alloc] initWithFormat:@\"Error during %@: %@\", operation, error]];\n        completion(NO);\n        return YES;\n    } else {\n        return NO;\n    }\n}\n\n+ (ZumoTest *)createUserAgentTest {\n    ZumoTest *result = [ZumoTest createTestWithName:@\"User-Agent test\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        FilterToCaptureHttpTraffic *filter = [[FilterToCaptureHttpTraffic alloc] init];\n        MSClient *filteredClient = [client clientWithFilter:filter];\n        MSTable *table = [filteredClient tableWithName:stringIdTableName];\n        NSDictionary *item = @{@\"name\":@\"john doe\"};\n        [table insert:item completion:^(NSDictionary *inserted, NSError *error) {\n            BOOL passed = NO;\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error: %@\", error]];\n            } else {\n                NSNumber *itemId = inserted[@\"id\"];\n                MSTable *unfilteredTable = [client tableWithName:stringIdTableName];\n                [unfilteredTable deleteWithId:itemId completion:nil]; // clean-up after this test\n                NSString *userAgent = [filter userAgent];\n                if ([userAgent rangeOfString:@\"objective-c\"].location == NSNotFound) {\n                    [test addLog:[NSString stringWithFormat:@\"Error, user-agent does not contain 'objective-c': %@\", userAgent]];\n                } else {\n                    passed = YES;\n                    [test addLog:[NSString stringWithFormat:@\"User-Agent: %@\", userAgent]];\n                }\n            }\n\n            [test setTestStatus:(passed ? TSPassed : TSFailed)];\n            completion(passed);\n        }];\n    }];\n    \n    return result;\n}\n\n+ (ZumoTest *)createFilterTestWhichBypassesService {\n    return [ZumoTest createTestWithName:@\"Filter which bypasses service\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        FilterToBypassService *filter = [[FilterToBypassService alloc] init];\n        NSString *json = @\"{\\\"id\\\":1,\\\"name\\\":\\\"John Doe\\\",\\\"age\\\":33}\";\n        [filter setBody:json];\n        [filter setContentType:@\"application/json\"];\n        [filter setStatusCode:201];\n        [filter setErrorToReturn:nil];\n        MSClient *mockedClient = [client clientWithFilter:filter];\n        MSTable *table = [mockedClient tableWithName:@\"TableWhichDoesNotExist\"];\n        [table insert:@{@\"does\":@\"not matter\"} completion:^(NSDictionary *item, NSError *error) {\n            BOOL passed = NO;\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error during insert: %@\", error]];\n            } else {\n                [test addLog:[NSString stringWithFormat:@\"Inserted item in the mocked service: %@\", item]];\n                NSString *name = item[@\"name\"];\n                NSNumber *age = item[@\"age\"];\n                if ([name isEqualToString:@\"John Doe\"] && [age intValue] == 33) {\n                    [test addLog:@\"Received the correct value from the filter\"];\n                    passed = YES;\n                } else {\n                    [test addLog:@\"Error, value received from the filter is not correct\"];\n                }\n            }\n            \n            [test setTestStatus:(passed ? TSPassed : TSFailed)];\n            completion(passed);\n        }];\n    }];\n}\n\n+ (ZumoTest *)createFilterTestToEnsureWithFilterDoesNotChangeClient {\n    return [ZumoTest createTestWithName:@\"MSClient clientWithFilter does not change client\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        FilterToBypassService *filter = [[FilterToBypassService alloc] init];\n        NSError *errorToReturn = [NSError errorWithDomain:@\"MyDomain\" code:-1234 userInfo:@{@\"one\":@\"two\"}];\n        [filter setErrorToReturn:errorToReturn];\n        MSClient *mockedClient = [client clientWithFilter:filter];\n        [test addLog:[NSString stringWithFormat:@\"Created a client with filter: %@\", mockedClient.filters]];\n        MSTable *table = [client tableWithName:stringIdTableName];\n        [table insert:@{@\"name\":@\"does not matter\"} completion:^(NSDictionary *item, NSError *error) {\n            BOOL passed = NO;\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error during insert: %@\", error]];\n            } else {\n                [test addLog:[NSString stringWithFormat:@\"Inserted succeeded: %@\", item]];\n                passed = YES;\n            }\n            \n            [test setTestStatus:(passed ? TSPassed : TSFailed)];\n            completion(passed);\n        }];\n    }];\n}\n\n+ (ZumoTest *)createFilterWithMultipleRequestsTest {\n    ZumoTest *result = [ZumoTest createTestWithName:@\"Filter which maps one request to many\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        SendMultipleRequestsFilter *filter = [[SendMultipleRequestsFilter alloc] init];\n        int numberOfRequests = rand() % 3 + 2; // between 2 and 4 requests sent\n        [test addLog:[NSString stringWithFormat:@\"Using a filter to send %d requests\", numberOfRequests]];\n        [filter setNumberOfRequests:numberOfRequests];\n        client = [client clientWithFilter:filter];\n        MSTable *table = [client tableWithName:stringIdTableName];\n        NSString *uuid = [[NSUUID UUID] UUIDString];\n        NSDictionary *item = @{@\"name\":uuid};\n        [table insert:item completion:^(NSDictionary *inserted, NSError *error) {\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error inserting: %@\", error]];\n                [test setTestStatus:TSFailed];\n                completion(NO);\n            } else {\n                if ([filter testFailed]) {\n                    for (NSString *log in [filter testLogs]) {\n                        [test addLog:log];\n                        [test setTestStatus:TSFailed];\n                        completion(NO);\n                    }\n                } else {\n                    NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"name = %@\", uuid];\n                    MSQuery *query = [table queryWithPredicate:predicate];\n                    [filter setNumberOfRequests:1];\n                    [query setSelectFields:@[@\"name\"]];\n                    [query readWithCompletion:^(NSArray *items, NSInteger totalCount, NSError *error) {\n                        BOOL passed = NO;\n                        [test addLog:@\"Filter logs:\"];\n                        for (NSString *log in [filter testLogs]) {\n                            [test addLog:log];\n                        }\n\n                        if (error || [filter testFailed]) {\n                            [test addLog:[NSString stringWithFormat:@\"Error reading: %@\", error]];\n                        } else {\n                            if ([items count] == numberOfRequests) {\n                                [test addLog:@\"Got correct number of items inserted\"];\n                                passed = YES;\n                            } else {\n                                [test addLog:[NSString stringWithFormat:@\"Error, expected %d items to be returned, but this is what was: %@\", numberOfRequests, items]];\n                            }\n                        }\n                        \n                        [test setTestStatus:(passed ? TSPassed : TSFailed)];\n                        completion(passed);\n                    }];\n                }\n            }\n        }];\n    }];\n    \n    return result;\n}\n\n+ (NSString *)groupDescription {\n    return @\"Tests to validate features which don't fit in other groups. Those include filters, correct user-agent header, and some replaying scenarios.\";\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoPushTests.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"ZumoTestGlobals.h\"\n\n@interface ZumoPushTests : NSObject\n\n+ (NSArray *)createTests;\n+ (NSString *)groupDescription;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoPushTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoPushTests.h\"\n#import \"ZumoTest.h\"\n#import \"ZumoTestGlobals.h\"\n\n// Helper class which will receive the push requests, and call a callback either\n// after a timer ends or after a push notification is received.\n@interface ZumoPushClient : NSObject <PushNotificationReceiver>\n{\n    NSTimer *timer;\n}\n\n@property (nonatomic, readonly, weak) ZumoTest *test;\n@property (nonatomic, readonly, strong) ZumoTestCompletion completion;\n@property (nonatomic, readonly, strong) NSDictionary *payload;\n\n@end\n\n@implementation ZumoPushClient\n\n@synthesize test = _test, completion = _completion;\n\n- (id)initForTest:(__weak ZumoTest*)test withPayload:(NSDictionary *)payload waitFor:(NSTimeInterval)seconds withTestCompletion:(ZumoTestCompletion)completion {\n    self = [super init];\n    if (self) {\n        _test = test;\n        _completion = completion;\n        _payload = [payload copy];\n        timer = [NSTimer scheduledTimerWithTimeInterval:seconds target:self selector:@selector(timerFired:) userInfo:nil repeats:NO];\n        [[ZumoTestGlobals sharedInstance] setPushNotificationDelegate:self];\n    }\n    \n    return self;\n}\n\n- (void)timerFired:(NSTimer *)theTimer {\n    if (_payload) {\n        [_test addLog:@\"Push notification not received within the allowed time. Need to retry?\"];\n        [_test setTestStatus:TSFailed];\n        _completion(NO);\n    } else {\n        [_test addLog:@\"Push notification not received for invalid payload - success.\"];\n        [_test setTestStatus:TSPassed];\n        _completion(YES);\n    }\n}\n\n- (void)pushReceived:(NSDictionary *)userInfo {\n    [timer invalidate];\n    [_test addLog:[NSString stringWithFormat:@\"Push notification received: %@\", userInfo]];\n    if (_payload) {\n\n        if ([self compareExpectedPayload:_payload withActual:userInfo]) {\n            [_test setTestStatus:TSPassed];\n            _completion(YES);\n        } else {\n            [_test addLog:[NSString stringWithFormat:@\"Error, payloads are different. Expected: %@, actual: %@\", _payload, userInfo]];\n            [_test setTestStatus:TSFailed];\n            _completion(NO);\n        }\n    } else {\n        [_test addLog:@\"This is a negative test, the payload should not have been received!\"];\n        [_test setTestStatus:TSFailed];\n        _completion(NO);\n    }\n}\n\n- (BOOL)compareExpectedPayload:(NSDictionary *)expected withActual:(NSDictionary *)actual {\n    BOOL allEqual = YES;\n    for (NSString *key in [expected keyEnumerator]) {\n        id actualValue = actual[key];\n        if (!actualValue) {\n            allEqual = NO;\n            [_test addLog:[NSString stringWithFormat:@\"Key %@ in the expected payload, but not in the push received\", key]];\n        } else {\n            id expectedValue = [expected objectForKey:key];\n            if ([actualValue isKindOfClass:[NSDictionary class]] && [expectedValue isKindOfClass:[NSDictionary class]]) {\n                // Compare recursively\n                if (![self compareExpectedPayload:(NSDictionary *)expectedValue withActual:(NSDictionary *)actualValue]) {\n                    [_test addLog:[NSString stringWithFormat:@\"Value for key %@ in the expected payload is different than the one on the push received\", key]];\n                    allEqual = NO;\n                }\n            } else {\n                // Use simple comparison\n                if (![expectedValue isEqual:actualValue]) {\n                    [_test addLog:[NSString stringWithFormat:@\"Value for key %@ in the expected payload (%@) is different than the one on the push received (%@)\", key, expectedValue, actualValue]];\n                    allEqual = NO;\n                }\n            }\n        }\n    }\n    \n    if (allEqual) {\n        for (NSString *key in [actual keyEnumerator]) {\n            if (!expected[key]) {\n                allEqual = NO;\n                [_test addLog:[NSString stringWithFormat:@\"Key %@ in the push received, but not in the expected payload\", key]];\n            }\n        }\n    }\n    \n    return allEqual;\n}\n\n@end\n\n// Main implementation\n@implementation ZumoPushTests\n\nstatic NSString *tableName = @\"iosPushTest\";\nstatic NSString *pushClientKey = @\"PushClientKey\";\n\n+ (NSArray *)createTests {\n    NSMutableArray *result = [[NSMutableArray alloc] init];\n    if ([self isRunningOnSimulator]) {\n        [result addObject:[ZumoTest createTestWithName:@\"No push on simulator\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n            [test addLog:@\"Running on a simulator, no push tests can be executed\"];\n            [test setTestStatus:TSPassed];\n            completion(YES);\n        }]];\n    } else {\n        [result addObject:[self createValidatePushRegistrationTest]];\n        \n        if (![ZumoPushTests isNhEnabled]) {\n            [result addObject:[self createFeedbackTest]];\n        }\n        \n        [result addObject:[self createPushTestWithName:@\"Push simple alert\" forPayload:@{@\"alert\":@\"push received\"} expectedPayload:@{@\"aps\":@{@\"alert\":@\"push received\"}} withDelay:0]];\n        [result addObject:[self createPushTestWithName:@\"Push simple badge\" forPayload:@{@\"badge\":@9} expectedPayload:@{@\"aps\":@{@\"badge\":@9}} withDelay:0]];\n        [result addObject:[self createPushTestWithName:@\"Push simple sound and alert\" forPayload:@{@\"alert\":@\"push received\",@\"sound\":@\"default\"} expectedPayload:@{@\"aps\":@{@\"alert\":@\"push received\",@\"sound\":@\"default\"}} withDelay:0]];\n        [result addObject:[self createPushTestWithName:@\"Push alert with loc info and parameters\" forPayload:@{@\"alert\":@{@\"loc-key\":@\"LOC_STRING\",@\"loc-args\":@[@\"first\",@\"second\"]}} expectedPayload:@{@\"aps\":@{@\"alert\":@{@\"loc-key\":@\"LOC_STRING\",@\"loc-args\":@[@\"first\",@\"second\"]}}} withDelay:0]];\n        [result addObject:[self createPushTestWithName:@\"Push with only custom info (no alert / badge / sound)\" forPayload:@{@\"aps\":@{},@\"foo\":@\"bar\"} expectedPayload:@{@\"aps\":@{},@\"foo\":@\"bar\"} withDelay:0]];\n        [result addObject:[self createPushTestWithName:@\"Push with alert, badge and sound\" forPayload:@{@\"aps\":@{@\"alert\":@\"simple alert\", @\"badge\":@7, @\"sound\":@\"default\"},@\"custom\":@\"value\"} expectedPayload:@{@\"aps\":@{@\"alert\":@\"simple alert\", @\"badge\":@7, @\"sound\":@\"default\"},@\"custom\":@\"value\"} withDelay:0]];\n        [result addObject:[self createPushTestWithName:@\"Push with alert with non-ASCII characters\" forPayload:@{@\"alert\":@\"Latin-ãéìôü ÇñÑ, arabic-لكتاب على الطاولة, chinese-这本书在桌子上\"} expectedPayload:@{@\"aps\":@{@\"alert\":@\"Latin-ãéìôü ÇñÑ, arabic-لكتاب على الطاولة, chinese-这本书在桌子上\"}} withDelay:0]];\n    \n        [result addObject:[self createPushTestWithName:@\"(Neg) Push with large payload\" forPayload:@{@\"alert\":[@\"\" stringByPaddingToLength:256 withString:@\"*\" startingAtIndex:0]} expectedPayload:nil withDelay:0]];\n    }\n    \n    return result;\n}\n\n+ (BOOL)isNhEnabled {\n    NSDictionary *runtimeFeatures = [[[ZumoTestGlobals sharedInstance] globalTestParameters] objectForKey:RUNTIME_FEATURES_KEY];\n    NSNumber *nhEnabledPropertyNames = [runtimeFeatures objectForKey:FEATURE_NH_PUSH_ENABLED];\n    return [nhEnabledPropertyNames boolValue];\n}\n\n+ (BOOL)isRunningOnSimulator {\n    NSString *deviceModel = [[UIDevice currentDevice] model];\n    if ([deviceModel rangeOfString:@\"Simulator\" options:NSCaseInsensitiveSearch].location == NSNotFound) {\n        return NO;\n    } else {\n        return YES;\n    }\n}\n\n+ (ZumoTest *)createValidatePushRegistrationTest {\n    ZumoTest *result = [ZumoTest createTestWithName:@\"Validate push registration\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        if ([self isRunningOnSimulator]) {\n            [test addLog:@\"Test running on a simulator, skipping test.\"];\n            [test setTestStatus:TSSkipped];\n            completion(YES);\n            return;\n        }\n        \n        ZumoTestGlobals *globals = [ZumoTestGlobals sharedInstance];\n        [test addLog:[globals remoteNotificationRegistrationStatus]];\n        if ([globals deviceToken]) {\n            [test addLog:[NSString stringWithFormat:@\"Device token: %@\", [globals deviceToken]]];\n            [test setTestStatus:TSPassed];\n            completion(YES);\n        } else {\n            UIAlertView *av = [[UIAlertView alloc] initWithTitle:@\"Error\" message:@\"Push tests will not work on the emulator; if this is the case, all subsequent tests will fail, and that's expected.\" delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\n            [av show];\n            [test setTestStatus:TSFailed];\n            completion(NO);\n        }\n    }];\n    \n    return result;\n}\n\n+ (void)sendNotificationViaInsert:(MSClient *)client test:(ZumoTest *)test seconds:(int)seconds deviceToken:(NSString *)deviceToken payload:(NSDictionary *)payload expectedPayload:(NSDictionary *)expectedPayload completion:(ZumoTestCompletion)completion {\n    MSTable *table = [client tableWithName:tableName];\n    NSURL *appUrl = [client applicationURL];\n    [test addLog:[NSString stringWithFormat:@\"Sending a request to %@ / table %@\", [appUrl description], tableName]];\n    NSDictionary *item = @{@\"method\" : @\"send\", @\"payload\" : payload, @\"token\": deviceToken, @\"delay\": @(seconds)};\n    [table insert:item completion:^(NSDictionary *insertedItem, NSError *error) {\n        if (error) {\n            [test addLog:[NSString stringWithFormat:@\"Error requesting push: %@\", error]];\n            [test setTestStatus:TSFailed];\n            completion(NO);\n        } else {\n            NSTimeInterval timeToWait = 15;\n            ZumoPushClient *pushClient = [[ZumoPushClient alloc] initForTest:test withPayload:expectedPayload waitFor:timeToWait withTestCompletion:completion];\n            [[test propertyBag] setValue:pushClient forKey:pushClientKey];\n            \n            // completion will be called on the push client...\n        }\n    }];\n}\n\n+ (ZumoTest *)createPushTestWithName:(NSString *)name forPayload:(NSDictionary *)payload expectedPayload:(NSDictionary *)expectedPayload withDelay:(int)seconds {\n    ZumoTest *result = [ZumoTest createTestWithName:name andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        if ([self isRunningOnSimulator]) {\n            [test addLog:@\"Test running on a simulator, skipping test.\"];\n            [test setTestStatus:TSSkipped];\n            completion(YES);\n            return;\n        }\n        \n        NSData *deviceToken = [[ZumoTestGlobals sharedInstance] deviceToken];\n        NSString *deviceTokenString = [[deviceToken.description stringByReplacingOccurrencesOfString:@\" \" withString:@\"\"] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@\"<>\"]];\n        if (!deviceToken) {\n            [test addLog:@\"Device not correctly registered for push\"];\n            [test setTestStatus:TSFailed];\n            completion(NO);\n        } else {\n            MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n            if ([ZumoPushTests isNhEnabled]) {\n                [client.push registerNativeWithDeviceToken:deviceToken tags:@[deviceTokenString] completion:^(NSError *error) {\n                    if (error) {\n                        [test addLog:[NSString stringWithFormat:@\"Encountered error registering with Mobile Service: %@\", error.description]];\n                        [test setTestStatus:TSFailed];\n                        completion(NO);\n                        return;\n                    }\n                    \n                    [self sendNotificationViaInsert:client test:test seconds:seconds deviceToken:deviceTokenString payload:payload expectedPayload:expectedPayload completion:completion];\n                }];\n            } else {\n                [self sendNotificationViaInsert:client test:test seconds:seconds deviceToken:deviceTokenString payload:payload expectedPayload:expectedPayload completion:completion];\n            }\n        }\n    }];\n    \n    return result;\n}\n\n+ (ZumoTest *)createFeedbackTest {\n    ZumoTest *result = [ZumoTest createTestWithName:@\"Simple feedback test\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        if ([self isRunningOnSimulator]) {\n            [test addLog:@\"Test running on a simulator, skipping test.\"];\n            [test setTestStatus:TSSkipped];\n            completion(YES);\n            return;\n        }\n        \n        if ([ZumoPushTests isNhEnabled]) {\n            [test addLog:@\"Service has enhanced push enabled. Skipping feedback test.\"];\n            [test setTestStatus:TSSkipped];\n            completion(YES);\n            return;\n        }\n\n        if (![[ZumoTestGlobals sharedInstance] deviceToken]) {\n            [test addLog:@\"Device not correctly registered for push\"];\n            [test setTestStatus:TSFailed];\n            completion(NO);\n        } else {\n            MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n            MSTable *table = [client tableWithName:tableName];\n            NSDictionary *item = @{@\"method\" : @\"getFeedback\"};\n            [table insert:item completion:^(NSDictionary *item, NSError *error) {\n                BOOL passed = NO;\n                if (error) {\n                    [test addLog:[NSString stringWithFormat:@\"Error requesting feedback: %@\", error]];\n                } else {\n                    NSArray *devices = item[@\"devices\"];\n                    if (devices) {\n                        [test addLog:[NSString stringWithFormat:@\"Retrieved devices from feedback script: %@\", devices]];\n                        passed = YES;\n                    } else {\n                        [test addLog:[NSString stringWithFormat:@\"No 'devices' field in response: %@\", item]];\n                    }\n                }\n                \n                [test setTestStatus:(passed ? TSPassed : TSFailed)];\n                completion(passed);\n            }];\n        }\n    }];\n    \n    return result;\n}\n\n+ (NSString *)groupDescription {\n    return @\"Tests to validate that the server-side push module can correctly deliver messages to the iOS client.\";\n}\n\n@end"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoQueryTestData.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n@interface ZumoQueryTestData : NSObject\n\n+ (NSArray *)getMovies;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoQueryTestData.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoQueryTestData.h\"\n#import \"ZumoTestGlobals.h\"\n\n@implementation ZumoQueryTestData\n\n+ (NSArray *)getMovies {\n\n    static NSArray *allItems = nil;\n    if (!allItems) {\n        allItems = @[\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(142),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1994 month:10 day:14],\n    @\"Title\": @\"The Shawshank Redemption\",\n    @\"Year\": @(1994)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(175),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1972 month:3 day:24],\n    @\"Title\": @\"The Godfather\",\n    @\"Year\": @(1972)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(200),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1974 month:12 day:20],\n    @\"Title\": @\"The Godfather: Part II\",\n    @\"Year\": @(1974)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(168),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1994 month:10 day:14],\n    @\"Title\": @\"Pulp Fiction\",\n    @\"Year\": @(1994)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(161),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1967 month:12 day:29],\n    @\"Title\": @\"The Good, the Bad and the Ugly\",\n    @\"Year\": @(1966)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(96),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1957 month:4 day:10],\n    @\"Title\": @\"12 Angry Men\",\n    @\"Year\": @(1957)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(152),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2008 month:7 day:18],\n    @\"Title\": @\"The Dark Knight\",\n    @\"Year\": @(2008)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(195),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1993 month:12 day:15],\n    @\"Title\": @\"Schindler's List\",\n    @\"Year\": @(1993)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(201),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2003 month:12 day:17],\n    @\"Title\": @\"The Lord of the Rings: The Return of the King\",\n    @\"Year\": @(2003)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(139),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1999 month:10 day:15],\n    @\"Title\": @\"Fight Club\",\n    @\"Year\": @(1999)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(127),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1980 month:5 day:21],\n    @\"Title\": @\"Star Wars: Episode V - The Empire Strikes Back\",\n    @\"Year\": @(1980)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(133),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1975 month:11 day:21],\n    @\"Title\": @\"One Flew Over the Cuckoo's Nest\",\n    @\"Year\": @(1975)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(178),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2001 month:12 day:19],\n    @\"Title\": @\"The Lord of the Rings: The Fellowship of the Ring\",\n    @\"Year\": @(2001)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(148),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2010 month:7 day:16],\n    @\"Title\": @\"Inception\",\n    @\"Year\": @(2010)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(146),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1990 month:9 day:19],\n    @\"Title\": @\"Goodfellas\",\n    @\"Year\": @(1990)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(121),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1977 month:5 day:25],\n    @\"Title\": @\"Star Wars\",\n    @\"Year\": @(1977)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(141),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1956 month:11 day:19],\n    @\"Title\": @\"Seven Samurai\",\n    @\"Year\": @(1954)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(136),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1999 month:3 day:31],\n    @\"Title\": @\"The Matrix\",\n    @\"Year\": @(1999)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(142),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1994 month:7 day:6],\n    @\"Title\": @\"Forrest Gump\",\n    @\"Year\": @(1994)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(130),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2002 month:1 day:1],\n    @\"Title\": @\"City of God\",\n    @\"Year\": @(2002)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(179),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2002 month:12 day:18],\n    @\"Title\": @\"The Lord of the Rings: The Two Towers\",\n    @\"Year\": @(2002)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(175),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1968 month:12 day:21],\n    @\"Title\": @\"Once Upon a Time in the West\",\n    @\"Year\": @(1968)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(127),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1995 month:9 day:22],\n    @\"Title\": @\"Se7en\",\n    @\"Year\": @(1995)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(118),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1991 month:2 day:14],\n    @\"Title\": @\"The Silence of the Lambs\",\n    @\"Year\": @(1991)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(102),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1943 month:1 day:23],\n    @\"Title\": @\"Casablanca\",\n    @\"Year\": @(1942)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(106),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1995 month:8 day:16],\n    @\"Title\": @\"The Usual Suspects\",\n    @\"Year\": @(1995)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(115),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1981 month:6 day:12],\n    @\"Title\": @\"Raiders of the Lost Ark\",\n    @\"Year\": @(1981)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(112),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1955 month:1 day:13],\n    @\"Title\": @\"Rear Window\",\n    @\"Year\": @(1954)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(109),\n    @\"MPAARating\": @\"TV-14\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1960 month:9 day:8],\n    @\"Title\": @\"Psycho\",\n    @\"Year\": @(1960)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(130),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1947 month:1 day:6],\n    @\"Title\": @\"It's a Wonderful Life\",\n    @\"Year\": @(1946)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(110),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1994 month:11 day:18],\n    @\"Title\": @\"Léon: The Professional\",\n    @\"Year\": @(1994)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(110),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1950 month:8 day:25],\n    @\"Title\": @\"Sunset Blvd.\",\n    @\"Year\": @(1950)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(113),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2000 month:10 day:11],\n    @\"Title\": @\"Memento\",\n    @\"Year\": @(2000)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(165),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2012 month:7 day:20],\n    @\"Title\": @\"The Dark Knight Rises\",\n    @\"Year\": @(2012)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(119),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1999 month:2 day:12],\n    @\"Title\": @\"American History X\",\n    @\"Year\": @(1998)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(153),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1979 month:8 day:15],\n    @\"Title\": @\"Apocalypse Now\",\n    @\"Year\": @(1979)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(152),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1991 month:7 day:3],\n    @\"Title\": @\"Terminator 2: Judgment Day\",\n    @\"Year\": @(1991)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(95),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1964 month:1 day:29],\n    @\"Title\": @\"Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb\",\n    @\"Year\": @(1964)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(169),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1998 month:7 day:24],\n    @\"Title\": @\"Saving Private Ryan\",\n    @\"Year\": @(1998)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(117),\n    @\"MPAARating\": @\"TV-14\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1979 month:5 day:25],\n    @\"Title\": @\"Alien\",\n    @\"Year\": @(1979)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(136),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1959 month:9 day:26],\n    @\"Title\": @\"North by Northwest\",\n    @\"Year\": @(1959)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(87),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1931 month:3 day:7],\n    @\"Title\": @\"City Lights\",\n    @\"Year\": @(1931)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(125),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2001 month:7 day:20],\n    @\"Title\": @\"Spirited Away\",\n    @\"Year\": @(2001)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(119),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1941 month:9 day:5],\n    @\"Title\": @\"Citizen Kane\",\n    @\"Year\": @(1941)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(87),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1936 month:2 day:25],\n    @\"Title\": @\"Modern Times\",\n    @\"Year\": @(1936)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(142),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1980 month:5 day:23],\n    @\"Title\": @\"The Shining\",\n    @\"Year\": @(1980)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(129),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1958 month:7 day:21],\n    @\"Title\": @\"Vertigo\",\n    @\"Year\": @(1958)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(116),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1985 month:7 day:3],\n    @\"Title\": @\"Back to the Future\",\n    @\"Year\": @(1985)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(122),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1999 month:10 day:1],\n    @\"Title\": @\"American Beauty\",\n    @\"Year\": @(1999)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(117),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1931 month:8 day:30],\n    @\"Title\": @\"M\",\n    @\"Year\": @(1931)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(150),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2003 month:3 day:28],\n    @\"Title\": @\"The Pianist\",\n    @\"Year\": @(2002)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(151),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2006 month:10 day:6],\n    @\"Title\": @\"The Departed\",\n    @\"Year\": @(2006)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(113),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1976 month:2 day:8],\n    @\"Title\": @\"Taxi Driver\",\n    @\"Year\": @(1976)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(103),\n    @\"MPAARating\": @\"G\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2010 month:6 day:18],\n    @\"Title\": @\"Toy Story 3\",\n    @\"Year\": @(2010)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(88),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1957 month:10 day:25],\n    @\"Title\": @\"Paths of Glory\",\n    @\"Year\": @(1957)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(118),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1999 month:2 day:12],\n    @\"Title\": @\"Life Is Beautiful\",\n    @\"Year\": @(1997)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(107),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1944 month:4 day:24],\n    @\"Title\": @\"Double Indemnity\",\n    @\"Year\": @(1944)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(154),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1986 month:7 day:18],\n    @\"Title\": @\"Aliens\",\n    @\"Year\": @(1986)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(98),\n    @\"MPAARating\": @\"G\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2008 month:6 day:27],\n    @\"Title\": @\"WALL-E\",\n    @\"Year\": @(2008)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(137),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2006 month:3 day:23],\n    @\"Title\": @\"The Lives of Others\",\n    @\"Year\": @(2006)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(136),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1972 month:2 day:2],\n    @\"Title\": @\"A Clockwork Orange\",\n    @\"Year\": @(1971)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(122),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2001 month:4 day:24],\n    @\"Title\": @\"Amélie\",\n    @\"Year\": @(2001)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(155),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2000 month:5 day:5],\n    @\"Title\": @\"Gladiator\",\n    @\"Year\": @(2000)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(189),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1999 month:12 day:10],\n    @\"Title\": @\"The Green Mile\",\n    @\"Year\": @(1999)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(112),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2011 month:11 day:2],\n    @\"Title\": @\"The Intouchables\",\n    @\"Year\": @(2011)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(227),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1963 month:1 day:30],\n    @\"Title\": @\"Lawrence of Arabia\",\n    @\"Year\": @(1962)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(129),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1963 month:3 day:16],\n    @\"Title\": @\"To Kill a Mockingbird\",\n    @\"Year\": @(1962)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(130),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2006 month:10 day:20],\n    @\"Title\": @\"The Prestige\",\n    @\"Year\": @(2006)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(125),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1941 month:3 day:7],\n    @\"Title\": @\"The Great Dictator\",\n    @\"Year\": @(1940)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(99),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1992 month:10 day:23],\n    @\"Title\": @\"Reservoir Dogs\",\n    @\"Year\": @(1992)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(149),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1982 month:2 day:10],\n    @\"Title\": @\"Das Boot\",\n    @\"Year\": @(1981)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(102),\n    @\"MPAARating\": @\"NC-17\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2000 month:10 day:27],\n    @\"Title\": @\"Requiem for a Dream\",\n    @\"Year\": @(2000)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(93),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1949 month:8 day:31],\n    @\"Title\": @\"The Third Man\",\n    @\"Year\": @(1949)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(126),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1948 month:1 day:24],\n    @\"Title\": @\"The Treasure of the Sierra Madre\",\n    @\"Year\": @(1948)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(108),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2004 month:3 day:19],\n    @\"Title\": @\"Eternal Sunshine of the Spotless Mind\",\n    @\"Year\": @(2004)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(155),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1990 month:2 day:23],\n    @\"Title\": @\"Cinema Paradiso\",\n    @\"Year\": @(1988)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(139),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1984 month:5 day:23],\n    @\"Title\": @\"Once Upon a Time in America\",\n    @\"Year\": @(1984)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(130),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1974 month:6 day:20],\n    @\"Title\": @\"Chinatown\",\n    @\"Year\": @(1974)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(138),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1997 month:9 day:19],\n    @\"Title\": @\"L.A. Confidential\",\n    @\"Year\": @(1997)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(89),\n    @\"MPAARating\": @\"G\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1994 month:6 day:24],\n    @\"Title\": @\"The Lion King\",\n    @\"Year\": @(1994)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(134),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1983 month:5 day:25],\n    @\"Title\": @\"Star Wars: Episode VI - Return of the Jedi\",\n    @\"Year\": @(1983)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(116),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1987 month:6 day:26],\n    @\"Title\": @\"Full Metal Jacket\",\n    @\"Year\": @(1987)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(91),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1975 month:5 day:25],\n    @\"Title\": @\"Monty Python and the Holy Grail\",\n    @\"Year\": @(1975)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(177),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1995 month:5 day:24],\n    @\"Title\": @\"Braveheart\",\n    @\"Year\": @(1995)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(103),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1952 month:4 day:11],\n    @\"Title\": @\"Singin' in the Rain\",\n    @\"Year\": @(1952)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(120),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2003 month:11 day:21],\n    @\"Title\": @\"Oldboy\",\n    @\"Year\": @(2003)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(120),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1959 month:3 day:29],\n    @\"Title\": @\"Some Like It Hot\",\n    @\"Year\": @(1959)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(160),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1984 month:9 day:19],\n    @\"Title\": @\"Amadeus\",\n    @\"Year\": @(1984)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(114),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1927 month:3 day:13],\n    @\"Title\": @\"Metropolis\",\n    @\"Year\": @(1927)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(88),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1951 month:12 day:26],\n    @\"Title\": @\"Rashomon\",\n    @\"Year\": @(1950)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(93),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1949 month:12 day:13],\n    @\"Title\": @\"Bicycle Thieves\",\n    @\"Year\": @(1948)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(141),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1968 month:4 day:6],\n    @\"Title\": @\"2001: A Space Odyssey\",\n    @\"Year\": @(1968)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(131),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1992 month:8 day:7],\n    @\"Title\": @\"Unforgiven\",\n    @\"Year\": @(1992)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(138),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1951 month:1 day:15],\n    @\"Title\": @\"All About Eve\",\n    @\"Year\": @(1950)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(125),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1960 month:9 day:16],\n    @\"Title\": @\"The Apartment\",\n    @\"Year\": @(1960)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(127),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1989 month:5 day:24],\n    @\"Title\": @\"Indiana Jones and the Last Crusade\",\n    @\"Year\": @(1989)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(129),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1974 month:1 day:10],\n    @\"Title\": @\"The Sting\",\n    @\"Year\": @(1973)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(129),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1980 month:12 day:19],\n    @\"Title\": @\"Raging Bull\",\n    @\"Year\": @(1980)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(161),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1957 month:12 day:14],\n    @\"Title\": @\"The Bridge on the River Kwai\",\n    @\"Year\": @(1957)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(131),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1988 month:7 day:15],\n    @\"Title\": @\"Die Hard\",\n    @\"Year\": @(1988)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(116),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1958 month:2 day:6],\n    @\"Title\": @\"Witness for the Prosecution\",\n    @\"Year\": @(1957)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(140),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2005 month:6 day:15],\n    @\"Title\": @\"Batman Begins\",\n    @\"Year\": @(2005)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(123),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2011 month:3 day:16],\n    @\"Title\": @\"A Separation\",\n    @\"Year\": @(2011)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(89),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1988 month:4 day:16],\n    @\"Title\": @\"Grave of the Fireflies\",\n    @\"Year\": @(1988)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(118),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2007 month:1 day:19],\n    @\"Title\": @\"Pan's Labyrinth\",\n    @\"Year\": @(2006)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(156),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2004 month:9 day:16],\n    @\"Title\": @\"Downfall\",\n    @\"Year\": @(2004)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(129),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1939 month:10 day:19],\n    @\"Title\": @\"Mr. Smith Goes to Washington\",\n    @\"Year\": @(1939)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(75),\n    @\"MPAARating\": @\"TV-MA\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1961 month:9 day:13],\n    @\"Title\": @\"Yojimbo\",\n    @\"Year\": @(1961)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(172),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1963 month:7 day:4],\n    @\"Title\": @\"The Great Escape\",\n    @\"Year\": @(1963)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(132),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1967 month:5 day:10],\n    @\"Title\": @\"For a Few Dollars More\",\n    @\"Year\": @(1965)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(102),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2001 month:1 day:19],\n    @\"Title\": @\"Snatch.\",\n    @\"Year\": @(2000)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(153),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2009 month:8 day:21],\n    @\"Title\": @\"Inglourious Basterds\",\n    @\"Year\": @(2009)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(108),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1954 month:6 day:24],\n    @\"Title\": @\"On the Waterfront\",\n    @\"Year\": @(1954)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(124),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1980 month:10 day:10],\n    @\"Title\": @\"The Elephant Man\",\n    @\"Year\": @(1980)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(96),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1958 month:10 day:13],\n    @\"Title\": @\"The Seventh Seal\",\n    @\"Year\": @(1957)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(81),\n    @\"MPAARating\": @\"TV-G\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1995 month:11 day:22],\n    @\"Title\": @\"Toy Story\",\n    @\"Year\": @(1995)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(100),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1941 month:10 day:18],\n    @\"Title\": @\"The Maltese Falcon\",\n    @\"Year\": @(1941)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(170),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1995 month:12 day:15],\n    @\"Title\": @\"Heat\",\n    @\"Year\": @(1995)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(75),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1927 month:2 day:24],\n    @\"Title\": @\"The General\",\n    @\"Year\": @(1926)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(116),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2009 month:1 day:9],\n    @\"Title\": @\"Gran Torino\",\n    @\"Year\": @(2008)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(130),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1940 month:4 day:12],\n    @\"Title\": @\"Rebecca\",\n    @\"Year\": @(1940)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(117),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1982 month:6 day:25],\n    @\"Title\": @\"Blade Runner\",\n    @\"Year\": @(1982)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(143),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2012 month:5 day:4],\n    @\"Title\": @\"The Avengers\",\n    @\"Year\": @(2012)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(91),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1959 month:6 day:22],\n    @\"Title\": @\"Wild Strawberries\",\n    @\"Year\": @(1957)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(98),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1996 month:4 day:5],\n    @\"Title\": @\"Fargo\",\n    @\"Year\": @(1996)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(68),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1921 month:2 day:6],\n    @\"Title\": @\"The Kid\",\n    @\"Year\": @(1921)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(170),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1983 month:12 day:9],\n    @\"Title\": @\"Scarface\",\n    @\"Year\": @(1983)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(108),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1958 month:6 day:8],\n    @\"Title\": @\"Touch of Evil\",\n    @\"Year\": @(1958)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(117),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1998 month:3 day:6],\n    @\"Title\": @\"The Big Lebowski\",\n    @\"Year\": @(1998)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(162),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1985 month:6 day:1],\n    @\"Title\": @\"Ran\",\n    @\"Year\": @(1985)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(182),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1979 month:2 day:23],\n    @\"Title\": @\"The Deer Hunter\",\n    @\"Year\": @(1978)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(126),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1967 month:11 day:1],\n    @\"Title\": @\"Cool Hand Luke\",\n    @\"Year\": @(1967)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(147),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2005 month:4 day:1],\n    @\"Title\": @\"Sin City\",\n    @\"Year\": @(2005)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(72),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1925 month:6 day:26],\n    @\"Title\": @\"The Gold Rush\",\n    @\"Year\": @(1925)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(101),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1951 month:6 day:30],\n    @\"Title\": @\"Strangers on a Train\",\n    @\"Year\": @(1951)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(105),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1934 month:2 day:23],\n    @\"Title\": @\"It Happened One Night\",\n    @\"Year\": @(1934)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(122),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2007 month:11 day:21],\n    @\"Title\": @\"No Country for Old Men\",\n    @\"Year\": @(2007)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(130),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1975 month:6 day:20],\n    @\"Title\": @\"Jaws\",\n    @\"Year\": @(1975)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(107),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1999 month:3 day:5],\n    @\"Title\": @\"Lock, Stock and Two Smoking Barrels\",\n    @\"Year\": @(1998)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(107),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1999 month:8 day:6],\n    @\"Title\": @\"The Sixth Sense\",\n    @\"Year\": @(1999)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(121),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2005 month:2 day:4],\n    @\"Title\": @\"Hotel Rwanda\",\n    @\"Year\": @(2004)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(85),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1952 month:7 day:30],\n    @\"Title\": @\"High Noon\",\n    @\"Year\": @(1952)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(120),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1986 month:12 day:24],\n    @\"Title\": @\"Platoon\",\n    @\"Year\": @(1986)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(109),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1982 month:6 day:25],\n    @\"Title\": @\"The Thing\",\n    @\"Year\": @(1982)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(110),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1969 month:10 day:24],\n    @\"Title\": @\"Butch Cassidy and the Sundance Kid\",\n    @\"Year\": @(1969)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(101),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1939 month:8 day:25],\n    @\"Title\": @\"The Wizard of Oz\",\n    @\"Year\": @(1939)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(178),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1995 month:11 day:22],\n    @\"Title\": @\"Casino\",\n    @\"Year\": @(1995)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(94),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1996 month:7 day:19],\n    @\"Title\": @\"Trainspotting\",\n    @\"Year\": @(1996)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(111),\n    @\"MPAARating\": @\"TV-14\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2003 month:10 day:10],\n    @\"Title\": @\"Kill Bill: Vol. 1\",\n    @\"Year\": @(2003)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(140),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2011 month:9 day:9],\n    @\"Title\": @\"Warrior\",\n    @\"Year\": @(2011)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(93),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1977 month:4 day:20],\n    @\"Title\": @\"Annie Hall\",\n    @\"Year\": @(1977)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(101),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1946 month:9 day:6],\n    @\"Title\": @\"Notorious\",\n    @\"Year\": @(1946)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(129),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2009 month:8 day:13],\n    @\"Title\": @\"The Secret in Their Eyes\",\n    @\"Year\": @(2009)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(238),\n    @\"MPAARating\": @\"G\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1940 month:1 day:17],\n    @\"Title\": @\"Gone with the Wind\",\n    @\"Year\": @(1939)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(126),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1998 month:1 day:9],\n    @\"Title\": @\"Good Will Hunting\",\n    @\"Year\": @(1997)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(118),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2010 month:12 day:24],\n    @\"Title\": @\"The King's Speech\",\n    @\"Year\": @(2010)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(129),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1940 month:3 day:15],\n    @\"Title\": @\"The Grapes of Wrath\",\n    @\"Year\": @(1940)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(148),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2007 month:9 day:21],\n    @\"Title\": @\"Into the Wild\",\n    @\"Year\": @(2007)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(94),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1979 month:8 day:17],\n    @\"Title\": @\"Life of Brian\",\n    @\"Year\": @(1979)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(100),\n    @\"MPAARating\": @\"G\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2003 month:5 day:30],\n    @\"Title\": @\"Finding Nemo\",\n    @\"Year\": @(2003)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(132),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2006 month:3 day:17],\n    @\"Title\": @\"V for Vendetta\",\n    @\"Year\": @(2005)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(98),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2010 month:3 day:26],\n    @\"Title\": @\"How to Train Your Dragon\",\n    @\"Year\": @(2010)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(86),\n    @\"MPAARating\": @\"G\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1988 month:4 day:16],\n    @\"Title\": @\"My Neighbor Totoro\",\n    @\"Year\": @(1988)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(114),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1946 month:8 day:31],\n    @\"Title\": @\"The Big Sleep\",\n    @\"Year\": @(1946)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(105),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1954 month:5 day:29],\n    @\"Title\": @\"Dial M for Murder\",\n    @\"Year\": @(1954)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(212),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1960 month:3 day:30],\n    @\"Title\": @\"Ben-Hur\",\n    @\"Year\": @(1959)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(107),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1984 month:10 day:26],\n    @\"Title\": @\"The Terminator\",\n    @\"Year\": @(1984)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(121),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1976 month:11 day:27],\n    @\"Title\": @\"Network\",\n    @\"Year\": @(1976)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(132),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2005 month:1 day:28],\n    @\"Title\": @\"Million Dollar Baby\",\n    @\"Year\": @(2004)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(108),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2010 month:12 day:17],\n    @\"Title\": @\"Black Swan\",\n    @\"Year\": @(2010)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(93),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1955 month:11 day:24],\n    @\"Title\": @\"The Night of the Hunter\",\n    @\"Year\": @(1955)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(158),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2008 month:1 day:25],\n    @\"Title\": @\"There Will Be Blood\",\n    @\"Year\": @(2007)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(89),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1986 month:8 day:8],\n    @\"Title\": @\"Stand by Me\",\n    @\"Year\": @(1986)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(113),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2002 month:1 day:30],\n    @\"Title\": @\"Donnie Darko\",\n    @\"Year\": @(2001)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(101),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1993 month:2 day:12],\n    @\"Title\": @\"Groundhog Day\",\n    @\"Year\": @(1993)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(125),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1975 month:9 day:21],\n    @\"Title\": @\"Dog Day Afternoon\",\n    @\"Year\": @(1975)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(129),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1996 month:1 day:5],\n    @\"Title\": @\"Twelve Monkeys\",\n    @\"Year\": @(1995)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(154),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2000 month:6 day:16],\n    @\"Title\": @\"Amores Perros\",\n    @\"Year\": @(2000)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(115),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2007 month:8 day:3],\n    @\"Title\": @\"The Bourne Ultimatum\",\n    @\"Year\": @(2007)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(92),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2009 month:4 day:9],\n    @\"Title\": @\"Mary and Max\",\n    @\"Year\": @(2009)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(99),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1959 month:11 day:16],\n    @\"Title\": @\"The 400 Blows\",\n    @\"Year\": @(1959)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(83),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1967 month:3 day:16],\n    @\"Title\": @\"Persona\",\n    @\"Year\": @(1966)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(106),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1967 month:12 day:22],\n    @\"Title\": @\"The Graduate\",\n    @\"Year\": @(1967)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(191),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1983 month:2 day:25],\n    @\"Title\": @\"Gandhi\",\n    @\"Year\": @(1982)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(85),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1956 month:6 day:6],\n    @\"Title\": @\"The Killing\",\n    @\"Year\": @(1956)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(119),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2005 month:6 day:17],\n    @\"Title\": @\"Howl's Moving Castle\",\n    @\"Year\": @(2004)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(100),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2012 month:1 day:20],\n    @\"Title\": @\"The Artist\",\n    @\"Year\": @(2011)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(98),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1987 month:9 day:25],\n    @\"Title\": @\"The Princess Bride\",\n    @\"Year\": @(1987)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(120),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2012 month:10 day:12],\n    @\"Title\": @\"Argo\",\n    @\"Year\": @(2012)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(120),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2009 month:1 day:23],\n    @\"Title\": @\"Slumdog Millionaire\",\n    @\"Year\": @(2008)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(131),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1966 month:6 day:22],\n    @\"Title\": @\"Who's Afraid of Virginia Woolf?\",\n    @\"Year\": @(1966)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(108),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1956 month:7 day:16],\n    @\"Title\": @\"La Strada\",\n    @\"Year\": @(1954)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(126),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1962 month:10 day:24],\n    @\"Title\": @\"The Manchurian Candidate\",\n    @\"Year\": @(1962)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(134),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1961 month:9 day:25],\n    @\"Title\": @\"The Hustler\",\n    @\"Year\": @(1961)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(135),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2002 month:1 day:4],\n    @\"Title\": @\"A Beautiful Mind\",\n    @\"Year\": @(2001)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(145),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1969 month:6 day:18],\n    @\"Title\": @\"The Wild Bunch\",\n    @\"Year\": @(1969)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(119),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1976 month:12 day:3],\n    @\"Title\": @\"Rocky\",\n    @\"Year\": @(1976)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(160),\n    @\"MPAARating\": @\"TV-PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1959 month:9 day:1],\n    @\"Title\": @\"Anatomy of a Murder\",\n    @\"Year\": @(1959)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(120),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1953 month:8 day:10],\n    @\"Title\": @\"Stalag 17\",\n    @\"Year\": @(1953)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(122),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1974 month:3 day:16],\n    @\"Title\": @\"The Exorcist\",\n    @\"Year\": @(1973)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(138),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1972 month:12 day:10],\n    @\"Title\": @\"Sleuth\",\n    @\"Year\": @(1972)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(80),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1948 month:8 day:28],\n    @\"Title\": @\"Rope\",\n    @\"Year\": @(1948)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(184),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1975 month:12 day:18],\n    @\"Title\": @\"Barry Lyndon\",\n    @\"Year\": @(1975)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(123),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1962 month:4 day:22],\n    @\"Title\": @\"The Man Who Shot Liberty Valance\",\n    @\"Year\": @(1962)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(112),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2009 month:8 day:14],\n    @\"Title\": @\"District 9\",\n    @\"Year\": @(2009)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(163),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1980 month:4 day:17],\n    @\"Title\": @\"Stalker\",\n    @\"Year\": @(1979)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(101),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2002 month:12 day:12],\n    @\"Title\": @\"Infernal Affairs\",\n    @\"Year\": @(2002)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(118),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1953 month:9 day:2],\n    @\"Title\": @\"Roman Holiday\",\n    @\"Year\": @(1953)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(103),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1998 month:6 day:5],\n    @\"Title\": @\"The Truman Show\",\n    @\"Year\": @(1998)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(111),\n    @\"MPAARating\": @\"G\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2007 month:6 day:29],\n    @\"Title\": @\"Ratatouille\",\n    @\"Year\": @(2007)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(143),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2003 month:7 day:9],\n    @\"Title\": @\"Pirates of the Caribbean: The Curse of the Black Pearl\",\n    @\"Year\": @(2003)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(106),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2008 month:12 day:12],\n    @\"Title\": @\"Ip Man\",\n    @\"Year\": @(2008)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(112),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2007 month:5 day:23],\n    @\"Title\": @\"The Diving Bell and the Butterfly\",\n    @\"Year\": @(2007)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(130),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2011 month:7 day:15],\n    @\"Title\": @\"Harry Potter and the Deathly Hallows: Part 2\",\n    @\"Year\": @(2011)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(99),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1967 month:1 day:18],\n    @\"Title\": @\"A Fistful of Dollars\",\n    @\"Year\": @(1964)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(125),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1951 month:12 day:1],\n    @\"Title\": @\"A Streetcar Named Desire\",\n    @\"Year\": @(1951)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(92),\n    @\"MPAARating\": @\"G\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2001 month:11 day:2],\n    @\"Title\": @\"Monsters, Inc.\",\n    @\"Year\": @(2001)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(133),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1994 month:2 day:25],\n    @\"Title\": @\"In the Name of the Father\",\n    @\"Year\": @(1993)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(127),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2009 month:5 day:8],\n    @\"Title\": @\"Star Trek\",\n    @\"Year\": @(2009)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(84),\n    @\"MPAARating\": @\"G\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1991 month:11 day:22],\n    @\"Title\": @\"Beauty and the Beast\",\n    @\"Year\": @(1991)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(136),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1968 month:6 day:12],\n    @\"Title\": @\"Rosemary's Baby\",\n    @\"Year\": @(1968)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(104),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1950 month:10 day:13],\n    @\"Title\": @\"Harvey\",\n    @\"Year\": @(1950)\n    },\n    @{\n        @\"BestPictureWinner\": @NO,\n        @\"Duration\": @(117),\n        @\"MPAARating\": @\"PG\",\n        @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1984 month:3 day:11],\n        @\"Title\": @\"Nauticaä of the Valley of the Wind\",\n        @\"Year\": @(1984)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(109),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2009 month:1 day:30],\n    @\"Title\": @\"The Wrestler\",\n    @\"Year\": @(2008)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(133),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1930 month:8 day:24],\n    @\"Title\": @\"All Quiet on the Western Front\",\n    @\"Year\": @(1930)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(98),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1996 month:2 day:23],\n    @\"Title\": @\"La Haine\",\n    @\"Year\": @(1995)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(133),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1988 month:12 day:16],\n    @\"Title\": @\"Rain Man\",\n    @\"Year\": @(1988)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(66),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1925 month:12 day:24],\n    @\"Title\": @\"Battleship Potemkin\",\n    @\"Year\": @(1925)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(138),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2010 month:2 day:19],\n    @\"Title\": @\"Shutter Island\",\n    @\"Year\": @(2010)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(81),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1929 month:6 day:3],\n    @\"Title\": @\"Nosferatu\",\n    @\"Year\": @(1922)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(103),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2003 month:9 day:19],\n    @\"Title\": @\"Spring, Summer, Fall, Winter... and Spring\",\n    @\"Year\": @(2003)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(96),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1979 month:4 day:25],\n    @\"Title\": @\"Manhattan\",\n    @\"Year\": @(1979)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(138),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2003 month:10 day:15],\n    @\"Title\": @\"Mystic River\",\n    @\"Year\": @(2003)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(102),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1938 month:2 day:18],\n    @\"Title\": @\"Bringing Up Baby\",\n    @\"Year\": @(1938)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(108),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1943 month:1 day:15],\n    @\"Title\": @\"Shadow of a Doubt\",\n    @\"Year\": @(1943)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(125),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2004 month:1 day:9],\n    @\"Title\": @\"Big Fish\",\n    @\"Year\": @(2003)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(124),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1986 month:8 day:2],\n    @\"Title\": @\"Castle in the Sky\",\n    @\"Year\": @(1986)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(151),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1973 month:12 day:16],\n    @\"Title\": @\"Papillon\",\n    @\"Year\": @(1973)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(76),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1993 month:10 day:29],\n    @\"Title\": @\"The Nightmare Before Christmas\",\n    @\"Year\": @(1993)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(119),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1987 month:6 day:3],\n    @\"Title\": @\"The Untouchables\",\n    @\"Year\": @(1987)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(127),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1993 month:6 day:11],\n    @\"Title\": @\"Jurassic Park\",\n    @\"Year\": @(1993)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(115),\n    @\"MPAARating\": @\"R\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2008 month:10 day:24],\n    @\"Title\": @\"Let the Right One In\",\n    @\"Year\": @(2008)\n    },\n    @{\n    @\"BestPictureWinner\": @YES,\n    @\"Duration\": @(109),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1967 month:10 day:14],\n    @\"Title\": @\"In the Heat of the Night\",\n    @\"Year\": @(1967)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(170),\n    @\"MPAARating\": @\"PG-13\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2009 month:12 day:24],\n    @\"Title\": @\"3 Idiots\",\n    @\"Year\": @(2009)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(118),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1944 month:9 day:23],\n    @\"Title\": @\"Arsenic and Old Lace\",\n    @\"Year\": @(1944)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(119),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1956 month:3 day:13],\n    @\"Title\": @\"The Searchers\",\n    @\"Year\": @(1956)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(98),\n    @\"MPAARating\": @\"PG\",\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:2000 month:9 day:29],\n    @\"Title\": @\"In the Mood for Love\",\n    @\"Year\": @(2000)\n    },\n    @{\n    @\"BestPictureWinner\": @NO,\n    @\"Duration\": @(141),\n    @\"MPAARating\": [NSNull null],\n    @\"ReleaseDate\": [ZumoTestGlobals createDateWithYear:1959 month:4 day:4],\n    @\"Title\": @\"Rio Bravo\",\n    @\"Year\": @(1959)\n    }\n    ];\n    }\n\n    return allItems;\n    \n}\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoQueryTests.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n@interface ZumoQueryTests : NSObject\n\n+ (NSArray *)createTests;\n+ (NSString *)groupDescription;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoQueryTests.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoQueryTests.h\"\n#import <WindowsAzureMobileServices/WindowsAzureMobileServices.h>\n#import \"ZumoTestGlobals.h\"\n#import \"ZumoTest.h\"\n#import \"ZumoQueryTestData.h\"\n\n@interface OrderByClause : NSObject\n\n@property (nonatomic, copy) NSString *fieldName;\n@property (nonatomic) BOOL isAscending;\n\n+(id)ascending:(NSString *)fieldName;\n+(id)descending:(NSString *)fieldName;\n\n@end\n\n@implementation OrderByClause\n\n@synthesize fieldName, isAscending;\n\n+(id)ascending:(NSString *)field {\n    OrderByClause *result = [[OrderByClause alloc] init];\n    [result setFieldName:field];\n    [result setIsAscending:YES];\n    return result;\n}\n\n+(id)descending:(NSString *)field {\n    OrderByClause *result = [[OrderByClause alloc] init];\n    [result setFieldName:field];\n    [result setIsAscending:NO];\n    return result;\n}\n\n@end\n\n@implementation ZumoQueryTests\n\nstatic NSString *queryTestsTableName = @\"intIdMovies\";\nstatic NSString *stringIdQueryTestsTableName = @\"stringIdMovies\";\n\n+ (NSArray *)createTests {\n    NSMutableArray *result = [[NSMutableArray alloc] init];\n    \n    [result addObject:[self createPopulateTest]];\n    [result addObject:[self createPopulateStringIdTableTest]];\n\n    [self addQueryTestToGroup:result name:@\"GreaterThan and LessThan - Movies from the 90s\" predicate:[NSPredicate predicateWithFormat:@\"(Year > 1989) and (Year < 2000)\"]];\n\n    // Numeric fields\n    [self addQueryTestToGroup:result name:@\"GreaterThan and LessThan - Movies from the 90s\" predicate:[NSPredicate predicateWithFormat:@\"(Year > 1989) and (Year < 2000)\"]];\n    [self addQueryTestToGroup:result name:@\"GreaterEqual and LessEqual - Movies from the 90s\" predicate:[NSPredicate predicateWithFormat:@\"(Year >= 1990) and (Year <= 1999)\"]];\n    [self addQueryTestToGroup:result name:@\"Compound statement - OR of ANDs - Movies from the 30s and 50s\" predicate:[NSPredicate predicateWithFormat:@\"((Year >= 1930) && (Year < 1940)) || ((Year >= 1950) && (Year < 1960))\"]];\n    [self addQueryTestToGroup:result name:@\"Division, equal and different - Movies from the year 2000 with rating other than R\" predicate:[NSPredicate predicateWithFormat:@\"((Year / 1000.0) = 2) and (MPAARating != 'R')\"]];\n    [self addQueryTestToGroup:result name:@\"Addition, subtraction, relational, AND - Movies from the 1980s which last less than 2 hours\" predicate:[NSPredicate predicateWithFormat:@\"((Year - 1900) >= 80) and (Year + 10 < 2000) and (Duration < 120)\"]];\n    \n    // String functions\n    [self addQueryTestToGroup:result name:@\"StartsWith - Movies which starts with 'The'\" predicate:[NSPredicate predicateWithFormat:@\"Title BEGINSWITH %@\", @\"The\"] top:@100 skip:nil];\n    [self addQueryTestToGroup:result name:@\"StartsWith, case insensitive - Movies which start with 'the'\" predicate:[NSPredicate predicateWithFormat:@\"Title BEGINSWITH[c] %@\", @\"the\"] top:@100 skip:nil];\n    [self addQueryTestToGroup:result name:@\"EndsWith, case insensitive - Movies which end with 'r'\" predicate:[NSPredicate predicateWithFormat:@\"Title ENDSWITH[c] 'r'\"]];\n    [self addQueryTestToGroup:result name:@\"Contains - Movies which contain the word 'one', case insensitive\" predicate:[NSPredicate predicateWithFormat:@\"Title CONTAINS[c] %@\", @\"one\"]];\n    [self addQueryTestToGroup:result name:@\"Contains (non-ASCII) - Movies containing the 'é' character\" predicate:[NSPredicate predicateWithFormat:@\"Title CONTAINS[c] 'é'\"]];\n    \n    // String fields\n    [self addQueryTestToGroup:result name:@\"Equals - Movies since 1980 with rating PG-13\" predicate:[NSPredicate predicateWithFormat:@\"MPAARating = 'PG-13' and Year >= 1980\"] top:@100 skip:nil];\n    [self addQueryTestToGroup:result name:@\"Comparison to nil - Movies since 1980 without a MPAA rating\" predicate:[NSPredicate predicateWithFormat:@\"MPAARating = %@ and Year >= 1980\", nil]];\n    [self addQueryTestToGroup:result name:@\"Comparison to nil (not NULL) - Movies before 1970 with a MPAA rating\" predicate:[NSPredicate predicateWithFormat:@\"MPAARating <> %@ and Year < 1970\", nil]];\n\n    // Numeric functions\n    [self addQueryTestToGroup:result name:@\"Floor - Movies which last more than 3 hours\" predicate:[NSPredicate predicateWithFormat:@\"floor(Duration / 60.0) >= 3\"]];\n    [self addQueryTestToGroup:result name:@\"Ceiling - Best picture winners which last at most 2 hours\" predicate:[NSPredicate predicateWithFormat:@\"BestPictureWinner = TRUE and ceiling(Duration / 60.0) = 2\"]];\n    \n    // Constant predicates\n    [self addQueryTestToGroup:result name:@\"TRUEPREDICATE - First 10 movies\" predicate:[NSPredicate predicateWithFormat:@\"TRUEPREDICATE\"] top:@10 skip:nil];\n    [self addQueryTestToGroup:result name:@\"FALSEPREDICATE - No movies\" predicate:[NSPredicate predicateWithFormat:@\"FALSEPREDICATE\"]];\n\n    // Date fields\n    [self addQueryTestToGroup:result name:@\"Date: Greater than, less than - Movies with release date in the 70s\" predicate:[NSPredicate predicateWithFormat:@\"ReleaseDate > %@ and ReleaseDate < %@\", [ZumoTestGlobals createDateWithYear:1969 month:12 day:31], [ZumoTestGlobals createDateWithYear:1980 month:1 day:1]]];\n    [self addQueryTestToGroup:result name:@\"Date: Greater or equal, less or equal - Movies with release date in the 80s\" predicate:[NSPredicate predicateWithFormat:@\"ReleaseDate >= %@ and ReleaseDate <= %@\", [ZumoTestGlobals createDateWithYear:1980 month:1 day:1], [ZumoTestGlobals createDateWithYear:1989 month:12 day:31]]];\n    [self addQueryTestToGroup:result name:@\"Date: Equal - Movies released on 1994-10-14 (Shawshank Redemption / Pulp Fiction)\" predicate:[NSPredicate predicateWithFormat:@\"ReleaseDate = %@\", [ZumoTestGlobals createDateWithYear:1994 month:10 day:14]]];\n\n    // Bool fields\n    [self addQueryTestToGroup:result name:@\"Bool: equal to TRUE - Best picture winners before 1950\" predicate:[NSPredicate predicateWithFormat:@\"BestPictureWinner = TRUE and Year < 1950\"]];\n    [self addQueryTestToGroup:result name:@\"Bool: equal to FALSE - Best picture winners after 2000\" predicate:[NSPredicate predicateWithFormat:@\"not(BestPictureWinner = FALSE) and Year >= 2000\"]];\n    [self addQueryTestToGroup:result name:@\"Bool: not equal to FALSE - Best picture winners after 2000\" predicate:[NSPredicate predicateWithFormat:@\"BestPictureWinner != FALSE and Year >= 2000\"]];\n    \n    // Predicate with substitution variables\n    [self addQueryTestToGroup:result name:@\"IN - Movies from the even years in the 2000s with rating PG, PG-13 or R\" predicate:[NSPredicate predicateWithFormat:@\"Year IN %@ and MPAARating IN %@\", @[@2000, @2002, @2004, @2006, @2008], @[@\"R\", @\"PG\", @\"PG-13\"]] top:@100 skip:nil];\n    [self addQueryTestToGroup:result name:@\"BETWEEN - Movies from the 1960s\" predicate:[NSPredicate predicateWithFormat:@\"Year BETWEEN %@\", @[@1960, @1970]]];\n    [self addQueryTestToGroup:result name:@\"%K, %d substitution - Movies from 2000 rated PG-13\" predicate:[NSPredicate predicateWithFormat:@\"%K >= %d and %K = %@\", @\"Year\", @2000, @\"MPAARating\", @\"PG-13\"]];\n\n    // Top and skip\n    [self addQueryTestToGroup:result name:@\"Get all using large $top - fetchLimit = 500\" predicate:nil top:@500 skip:nil];\n    [self addQueryTestToGroup:result name:@\"Skip all using large $skip - fetchOffset = 500\" predicate:nil top:nil skip:@500];\n    [self addQueryTestToGroup:result name:@\"Skip, take and includeTotalCount - Movies 11-20, ordered by title\" predicate:nil top:@10 skip:@10 orderBy:@[[OrderByClause ascending:@\"Title\"]] includeTotalCount:YES selectFields:nil];\n    [self addQueryTestToGroup:result name:@\"Skip, take and includeTotalCount with predicate - Movies 11-20 which won the best picture award, ordered by release date\" predicate:[NSPredicate predicateWithFormat:@\"BestPictureWinner = TRUE\"] top:@10 skip:@10 orderBy:[NSArray arrayWithObject:[OrderByClause descending:@\"Year\"]] includeTotalCount:YES selectFields:nil];\n    \n    // Order by\n    [self addQueryTestToGroup:result name:@\"Order by date and string - 50 movies, ordered by release date, then title\" predicate:nil top:@50 skip:nil orderBy:@[[OrderByClause descending:@\"ReleaseDate\"], [OrderByClause ascending:@\"Title\"]] includeTotalCount:NO selectFields:nil];\n    [self addQueryTestToGroup:result name:@\"Order by number - 30 shorter movies since 1970\" predicate:[NSPredicate predicateWithFormat:@\"Year >= 1970\"] top:@30 skip:nil orderBy:[NSArray arrayWithObjects:[OrderByClause ascending:@\"Duration\"], [OrderByClause ascending:@\"Title\"], nil] includeTotalCount:YES selectFields:nil];\n    \n    // Select\n    [self addQueryTestToGroup:result name:@\"Select single field - Title of movies since 2000\" predicate:[NSPredicate predicateWithFormat:@\"Year >= 2000\"] top:@200 skip:nil orderBy:nil includeTotalCount:NO selectFields:@[@\"Title\"]];\n    [self addQueryTestToGroup:result name:@\"Select multiple fields - Title, BestPictureWinner, Duration, ordered by release date, movies from the 1990\" predicate:[NSPredicate predicateWithFormat:@\"Year >= 1990 and Year < 2000\"] top:@300 skip:nil orderBy:@[[OrderByClause ascending:@\"Title\"]] includeTotalCount:NO selectFields:@[@\"Title\", @\"BestPictureWinner\", @\"Duration\"]];\n    \n    for (int i = -1; i <= 0; i++) {\n        ZumoTest *negativeLookupTest = [ZumoTest createTestWithName:[NSString stringWithFormat:@\"(Neg) MSTable readWithId:%d\", i] andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n            MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n            MSTable *table = [client tableWithName:queryTestsTableName];\n            [table readWithId:[NSNumber numberWithInt:i] completion:^(NSDictionary *item, NSError *err) {\n                BOOL passed = NO;\n                if (err) {\n                    if (i == 0) {\n                        if (err.code != MSInvalidItemIdWithRequest) {\n                            [test addLog:[NSString stringWithFormat:@\"Invalid error code: %d\", err.code]];\n                        } else {\n                            [test addLog:@\"Got expected error\"];\n                            NSHTTPURLResponse *response = [[err userInfo] objectForKey:MSErrorResponseKey];\n                            if (response) {\n                                [test addLog:[NSString stringWithFormat:@\"Error, response should be nil (request not sent), but its status code is %d\", [response statusCode]]];\n                                passed = NO;\n                            } else {\n                                [test addLog:@\"Success, request was not sent to the server\"];\n                                passed = YES;\n                            }\n                        }\n                    } else {\n                        if (err.code != MSErrorMessageErrorCode) {\n                            [test addLog:[NSString stringWithFormat:@\"Invalid error code: %d\", err.code]];\n                        } else {\n                            NSHTTPURLResponse *httpResponse = [[err userInfo] objectForKey:MSErrorResponseKey];\n                            int statusCode = [httpResponse statusCode];\n                            if (statusCode == 404) {\n                                [test addLog:@\"Got expected error\"];\n                                passed = YES;\n                            } else {\n                                [test addLog:[NSString stringWithFormat:@\"Invalid response status code: %d\", statusCode]];\n                                passed = NO;\n                            }\n                        }\n                    }\n                } else {\n                    [test addLog:[NSString stringWithFormat:@\"Expected error for lookup with id:%d, but got data back: %@\", i, item]];\n                }\n                \n                [test setTestStatus:(passed ? TSPassed : TSFailed)];\n                completion(passed);\n            }];\n        }];\n\n        [negativeLookupTest addRequiredFeature:@\"intIdTables\"];\n        [result addObject:negativeLookupTest];\n    }\n    \n    [result addObject:[self createNegativeTestWithName:@\"(Neg) Very large fetchOffset\" andQuerySettings:^(MSQuery *query) {\n        query.fetchLimit = 1000000;\n    } andQueryValidation:^(ZumoTest *test, NSError *err) {\n        if (err.code != MSErrorMessageErrorCode) {\n            [test addLog:[NSString stringWithFormat:@\"Invalid error code: %d\", err.code]];\n            return NO;\n        } else {\n            NSHTTPURLResponse *resp = [[err userInfo] objectForKey:MSErrorResponseKey];\n            if ([resp statusCode] == 400) {\n                return YES;\n            } else {\n                [test addLog:[NSString stringWithFormat:@\"Incorrect response status code: %d\", [resp statusCode]]];\n                return NO;\n            }\n        }\n    }]];\n    \n    NSArray *unsupportedPredicates = [NSArray arrayWithObjects:\n                                      @\"average(Duration) > 120\",\n                                      @\"predicate from block\",\n                                      nil];\n    for (NSString *unsupportedPredicate in unsupportedPredicates) {\n        ZumoTest *negTest = [ZumoTest createTestWithName:[NSString stringWithFormat:@\"(Neg) Unsupported predicate: %@\", unsupportedPredicate] andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n            MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n            MSTable *table = [client tableWithName:queryTestsTableName];\n            NSPredicate *predicate;\n            if ([unsupportedPredicate isEqualToString:@\"predicate from block\"]) {\n                predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {\n                    return [[(NSDictionary *)evaluatedObject objectForKey:@\"BestPictureWinner\"] boolValue];\n                }];\n            } else {\n                predicate = [NSPredicate predicateWithFormat:unsupportedPredicate];\n            }\n            \n            [table readWithPredicate:predicate completion:^(NSArray *items, NSInteger totalCount, NSError *error) {\n                BOOL passed = NO;\n                if (!error) {\n                    [test addLog:[NSString stringWithFormat:@\"Expected error, got result: %@\", items]];\n                } else {\n                    if ([error code] == MSPredicateNotSupported) {\n                        [test addLog:[NSString stringWithFormat:@\"Got expected error: %@\", error]];\n                        passed = YES;\n                    } else {\n                        [test addLog:[NSString stringWithFormat:@\"Wrong error received: %@\", error]];\n                    }\n                }\n                \n                [test setTestStatus:(passed ? TSPassed : TSFailed)];\n                completion(passed);\n            }];\n        }];\n        [negTest addRequiredFeature:@\"intIdTables\"];\n        [result addObject:negTest];\n    }\n    \n    return result;\n}\n\n+ (ZumoTest *)createPopulateTest {\n    ZumoTest *result = [ZumoTest createTestWithName:@\"Populate table, if necessary, for query tests\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        NSArray *movies = [ZumoQueryTestData getMovies];\n        NSDictionary *item = @{@\"movies\" : movies};\n        \n        MSTable *table = [client tableWithName:queryTestsTableName];\n        [table insert:item completion:^(NSDictionary *item, NSError *error) {\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error populating table: %@\", error]];\n                [test setTestStatus:TSFailed];\n                completion(NO);\n            } else {\n                [self isAllDataPopulated:table test:test expectCount:[movies count] retryTimes:20 completion:completion];\n            }\n        }];\n    }];\n    \n    [result addRequiredFeature:@\"intIdTables\"];\n    \n    return result;\n}\n\n+ (void)isAllDataPopulated:(MSTable *)table test:(ZumoTest *)test expectCount:(NSInteger)expectCount retryTimes:(NSInteger)retryTimes completion:(ZumoTestCompletion)completion {\n    MSQuery *query = [table query];\n    query.includeTotalCount = YES;\n    query.fetchLimit = 0;\n    \n    if(retryTimes-- == 0)\n    {\n        [test addLog:@\"Error populate table: Time out. Not populate enough data.\"];\n        [test setTestStatus:TSFailed];\n        completion(NO);\n        return;\n    }\n    \n    [query readWithCompletion:^(NSArray *items, NSInteger totalCount, NSError *error) {\n        if (!error) {\n            if (totalCount == expectCount){\n                [test addLog:@\"Table is populated and ready for query tests\"];\n                [test setTestStatus:TSPassed];\n                completion(YES);\n                return;\n            } else {\n                [test addLog:[NSString stringWithFormat:@\"Already inserted %zd items, waiting for insertion to complete\", (ssize_t)totalCount]];\n                [NSThread sleepForTimeInterval: 5];\n                [self isAllDataPopulated:table test:test expectCount:expectCount retryTimes:retryTimes completion:completion];\n            }\n        } else {\n            [test addLog:[NSString stringWithFormat:@\"Error querying table: %@\", error]];\n            [test setTestStatus:TSFailed];\n            completion(NO);\n\t\t\treturn;\n        }\n    }];\n}\n\n+ (ZumoTest *)createPopulateStringIdTableTest {\n    ZumoTest *result = [ZumoTest createTestWithName:@\"Populate table with string ids, if necessary, for query tests\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        NSArray *movies = [ZumoQueryTestData getMovies];\n        NSMutableArray *stringIdMovies = [[NSMutableArray alloc] init];\n        for (int i = 0; i < [movies count]; i++) {\n            NSMutableDictionary *strIdMovie = [NSMutableDictionary dictionaryWithDictionary:[movies objectAtIndex:i]];\n            NSString *movieId = [NSString stringWithFormat:@\"Movie %03d\", i];\n            [strIdMovie setValue:movieId forKey:@\"id\"];\n            [stringIdMovies addObject:strIdMovie];\n        }\n        NSDictionary *item = @{@\"movies\" : stringIdMovies};\n        MSTable *table = [client tableWithName:stringIdQueryTestsTableName];\n        [table insert:item completion:^(NSDictionary *item, NSError *error) {\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error populating table: %@\", error]];\n                [test setTestStatus:TSFailed];\n                completion(NO);\n            } else {\n                [self isAllDataPopulated:table test:test expectCount:[movies count] retryTimes:20 completion:completion];\n            }\n        }];\n    }];\n    \n    [result addRequiredFeature:@\"stringIdTables\"];\n    \n    return result;\n}\n\n\ntypedef void (^ActionQuery)(MSQuery *query);\ntypedef BOOL (^QueryValidation)(ZumoTest *test, NSError *error);\n\n+ (ZumoTest *)createNegativeTestWithName:(NSString *)name andQuerySettings:(ActionQuery)settings andQueryValidation:(QueryValidation)queryValidation {\n    ZumoTest *result = [ZumoTest createTestWithName:name andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:queryTestsTableName];\n        MSQuery *query = [table query];\n        settings(query);\n        [query readWithCompletion:^(NSArray *items, NSInteger totalCount, NSError *error) {\n            if (error) {\n                if (queryValidation(test, error)) {\n                    [test addLog:[NSString stringWithFormat:@\"Got expected error: %@\", error]];\n                    [test setTestStatus:TSPassed];\n                    completion(YES);\n                } else {\n                    [test addLog:[NSString stringWithFormat:@\"Error wasn't the expected one: %@\", error]];\n                    [test setTestStatus:TSFailed];\n                    completion(NO);\n                }\n            } else {\n                [test addLog:@\"Query should fail, but succeeded\"];\n                [test setTestStatus:TSFailed];\n                completion(NO);\n            }\n        }];\n    }];\n    \n    [result addRequiredFeature:@\"intIdTables\"];\n    return result;\n}\n\n+ (void)addQueryTestToGroup:(NSMutableArray *)testGroup name:(NSString *)name predicate:(NSPredicate *)predicate {\n    [self addQueryTestToGroup:testGroup name:name predicate:predicate top:nil skip:nil orderBy:nil includeTotalCount:NO selectFields:nil];\n}\n\n+ (void)addQueryTestToGroup:(NSMutableArray *)testGroup name:(NSString *)name predicate:(NSPredicate *)predicate top:(NSNumber *)top skip:(NSNumber *)skip {\n    [self addQueryTestToGroup:testGroup name:name predicate:predicate top:top skip:skip orderBy:nil includeTotalCount:NO selectFields:nil];\n}\n\n+ (void)addQueryTestToGroup:(NSMutableArray *)testGroup name:(NSString *)name predicate:(NSPredicate *)predicate top:(NSNumber *)top skip:(NSNumber *)skip orderBy:(NSArray *)orderByClauses includeTotalCount:(BOOL)includeTotalCount selectFields:(NSArray *)selectFields {\n    [testGroup addObject:[self createQueryTestWithName:name andPredicate:predicate andTop:top andSkip:skip andOrderBy:orderByClauses andIncludeTotalCount:includeTotalCount andSelectFields:selectFields useStringIdTable:NO]];\n    [testGroup addObject:[self createQueryTestWithName:name andPredicate:predicate andTop:top andSkip:skip andOrderBy:orderByClauses andIncludeTotalCount:includeTotalCount andSelectFields:selectFields useStringIdTable:YES]];\n}\n\n+ (ZumoTest *)createQueryTestWithName:(NSString *)name andPredicate:(NSPredicate *)predicate andTop:(NSNumber *)top andSkip:(NSNumber *)skip andOrderBy:(NSArray *)orderByClauses andIncludeTotalCount:(BOOL)includeTotalCount andSelectFields:(NSArray *)selectFields useStringIdTable:(BOOL)useStringIdTable {\n    NSString *testName = [NSString stringWithFormat:@\"[%@ id] %@\", useStringIdTable ? @\"string\" : @\"int\", name];\n    ZumoTest *result = [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:useStringIdTable ? stringIdQueryTestsTableName : queryTestsTableName];\n        NSArray *allItems = [ZumoQueryTestData getMovies];\n        if (!top && !skip && !orderByClauses && !includeTotalCount && !selectFields) {\n            // use simple readWithPredicate\n            [table readWithPredicate:predicate completion:^(NSArray *queriedItems, NSInteger totalCount2, NSError *readWhereError) {\n                if (readWhereError) {\n                    [test addLog:[NSString stringWithFormat:@\"Error calling readWhere: %@\", readWhereError]];\n                    [test setTestStatus:TSFailed];\n                    completion(NO);\n                } else {\n                    NSArray *filteredArray = [allItems filteredArrayUsingPredicate:predicate];\n                    BOOL passed = [self compareExpectedArray:filteredArray withActual:queriedItems forTest:test];\n\n                    int queriedCount = [queriedItems count];\n                    int maxTrace = queriedCount > 5 ? 5 : queriedCount;\n                    NSArray *toTrace = [queriedItems subarrayWithRange:NSMakeRange(0, maxTrace)];\n                    NSString *continuation = queriedCount > 5 ? @\" (and more items)\" : @\"\";\n                    [test addLog:[NSString stringWithFormat:@\"Queried items: %@%@\", toTrace, continuation]];\n                    \n                    if (passed) {\n                        [test addLog:@\"Test passed\"];\n                        [test setTestStatus:TSPassed];\n                        completion(YES);\n                    } else {\n                        [test setTestStatus:TSFailed];\n                        completion(NO);\n                    }\n                }\n            }];\n        } else {\n            MSQuery *query = predicate ? [table queryWithPredicate:predicate] : [table query];\n            if (top) {\n                [query setFetchLimit:[top integerValue]];\n            }\n\n            if (skip) {\n                [query setFetchOffset:[skip integerValue]];\n            }\n            \n            if (orderByClauses) {\n                for (OrderByClause *clause in orderByClauses) {\n                    if ([clause isAscending]) {\n                        [query orderByAscending:[clause fieldName]];\n                    } else {\n                        [query orderByDescending:[clause fieldName]];\n                    }\n                }\n            }\n            \n            if (includeTotalCount) {\n                [query setIncludeTotalCount:YES];\n            }\n            \n            if (selectFields) {\n                [query setSelectFields:selectFields];\n            }\n                    \n            [query readWithCompletion:^(NSArray *queriedItems, NSInteger totalCount, NSError *queryReadError) {\n                if (queryReadError) {\n                    [test addLog:[NSString stringWithFormat:@\"Error calling MSQuery readWithCompletion: %@\", queryReadError]];\n                    [test setTestStatus:TSFailed];\n                    completion(NO);\n                } else {\n                    NSArray *filteredArray;\n                    if (predicate) {\n                        filteredArray = [NSMutableArray arrayWithArray:[allItems filteredArrayUsingPredicate:predicate]];\n                    } else {\n                        filteredArray = [NSMutableArray arrayWithArray:allItems];\n                    }\n                    \n                    BOOL passed = NO;\n                    int expectedTotalItems = [filteredArray count];\n                    \n                    if (includeTotalCount && totalCount != expectedTotalItems) {\n                        [test addLog:[NSString stringWithFormat:@\"Error in 'totalCount'. Expected: %d, actual: %d\", expectedTotalItems, totalCount]];\n                    } else {\n                        if (orderByClauses) {\n                            if ([orderByClauses count] == 1 && [[orderByClauses[0] fieldName] isEqualToString:@\"Title\"] && [orderByClauses[0] isAscending]) {\n                                // Special case, need to ignore accents\n                                filteredArray = [filteredArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {\n                                    NSString *title1 = obj1[@\"Title\"];\n                                    NSString *title2 = obj2[@\"Title\"];\n                                    return [title1 compare:title2 options:NSDiacriticInsensitiveSearch];\n                                }];\n                            } else {\n                                NSMutableArray *sortDescriptors = [[NSMutableArray alloc] init];\n                                for (OrderByClause *clause in orderByClauses) {\n                                    [sortDescriptors addObject:[[NSSortDescriptor alloc] initWithKey:[clause fieldName] ascending:[clause isAscending]]];\n                                }\n                            \n                                filteredArray = [filteredArray sortedArrayUsingDescriptors:sortDescriptors];\n                            }\n                        }\n\n                        if (top || skip) {\n                            int rangeStart = skip ? [skip intValue] : 0;\n                            if (rangeStart > expectedTotalItems) {\n                                rangeStart = expectedTotalItems;\n                            }\n                        \n                            int rangeLen = top ? [top intValue] : expectedTotalItems;\n                            if ((rangeStart + rangeLen) > expectedTotalItems) {\n                                rangeLen = expectedTotalItems - rangeStart;\n                            }\n                            \n                            filteredArray = [filteredArray subarrayWithRange:NSMakeRange(rangeStart, rangeLen)];\n                        }\n                        \n                        if (selectFields) {\n                            NSMutableArray *projectedArray = [[NSMutableArray alloc] init];\n                            for (int i = 0; i < [filteredArray count]; i++) {\n                                NSDictionary *item = filteredArray[i];\n                                item = [item dictionaryWithValuesForKeys:selectFields];\n                                [projectedArray addObject:item];\n                            }\n                            \n                            filteredArray = projectedArray;\n                        }\n\n                        passed = [self compareExpectedArray:filteredArray withActual:queriedItems forTest:test];\n                    }\n                    \n                    if (passed) {\n                        [test addLog:@\"Received expected result\"];\n                        [test setTestStatus:TSPassed];\n                    } else {\n                        [test setTestStatus:TSFailed];\n                    }\n                    \n                    completion(passed);\n                }\n            }];\n        }\n    }];\n    \n    [result addRequiredFeature:(useStringIdTable ? @\"stringIdTables\" : @\"intIdTables\")];\n    return result;\n}\n\n+ (NSDictionary *)lowercaseKeysForDictionary:(NSDictionary *)item {\n    NSMutableDictionary *newItem = [[NSMutableDictionary alloc] init];\n    for (NSString *key in [newItem keyEnumerator]) {\n        [newItem setValue:[item objectForKey:key] forKey:[key lowercaseString]];\n    }\n    return newItem;\n}\n\n+ (BOOL)shouldNormalizeDictionaryKeys {\n    NSDictionary *runtimeFeatures = [[[ZumoTestGlobals sharedInstance] globalTestParameters] objectForKey:RUNTIME_FEATURES_KEY];\n    NSNumber *runtimeCamelCasesPropertyNames = [runtimeFeatures objectForKey:@\"alwaysCamelCaseProperties\"];\n    return (runtimeCamelCasesPropertyNames && [runtimeCamelCasesPropertyNames boolValue]);\n}\n\n+ (BOOL)compareExpectedArray:(NSArray *)expectedItems withActual:(NSArray *)actualItems forTest:(__weak ZumoTest *)test {\n    BOOL result = NO;\n    int actualCount = [actualItems count];\n    int expectedCount = [expectedItems count];\n    if (actualCount != expectedCount) {\n        [test addLog:[NSString stringWithFormat:@\"Expected %d items, but got %d\", expectedCount, actualCount]];\n        [test addLog:[NSString stringWithFormat:@\"Expected items: %@\", expectedItems]];\n        [test addLog:[NSString stringWithFormat:@\"Actual items: %@\", actualItems]];\n    } else {\n        BOOL allItemsEqual = YES;\n        for (int i = 0; i < actualCount; i++) {\n            NSDictionary *expectedItem = [expectedItems objectAtIndex:i];\n            NSDictionary *actualItem = [actualItems objectAtIndex:i];\n            if ([self shouldNormalizeDictionaryKeys]) {\n                expectedItem = [self lowercaseKeysForDictionary:expectedItem];\n                actualItem = [self lowercaseKeysForDictionary:actualItem];\n            }\n            BOOL allValuesEqual = YES;\n            for (NSString *key in [expectedItem keyEnumerator]) {\n                if ([key isEqualToString:@\"id\"]) continue; // don't care about id\n                id expectedValue = [expectedItem objectForKey:key];\n                id actualValue = [actualItem objectForKey:key];\n                if (![expectedValue isEqual:actualValue]) {\n                    allValuesEqual = NO;\n                    [test addLog:[NSString stringWithFormat:@\"Error comparing field %@ of item %d: expected - %@, actual - %@\", key, i, expectedValue, actualValue]];\n                    break;\n                }\n            }\n            \n            if (!allValuesEqual) {\n                allItemsEqual = NO;\n            }\n        }\n        \n        if (allItemsEqual) {\n            result = YES;\n        }\n    }\n    \n    return result;\n}\n\n+ (NSString *)groupDescription {\n    return @\"Tests for validating different query capabilities of the client SDK.\";\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoRoundTripTests.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n@interface ZumoRoundTripTests : NSObject\n\n+ (NSArray *)createTests;\n+ (NSString *)groupDescription;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoRoundTripTests.m",
    "content": "﻿// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoRoundTripTests.h\"\n#import \"ZumoTest.h\"\n#import \"ZumoTestGlobals.h\"\n#import <WindowsAzureMobileServices/WindowsAzureMobileServices.h>\n\n@implementation ZumoRoundTripTests\n\nstatic NSString *tableName = @\"iosRoundTripTable\";\nstatic NSString *stringIdTableName = @\"stringIdRoundTripTable\";\n\ntypedef enum { RTTString, RTTDouble, RTTBool, RTTInt, RTT8ByteLong, RTTDate } RoundTripTestColumnType;\n\n+ (NSArray *)createTests {\n    NSMutableArray *result = [[NSMutableArray alloc] init];\n\n    NSUInteger startOfIntIdTests = [result count];\n    [result addObject:[ZumoTest createTestWithName:@\"Setup dynamic schema\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:tableName];\n        NSDictionary *item = @{@\"string1\":@\"test\", @\"date1\": [ZumoTestGlobals createDateWithYear:2011 month:11 day:11], @\"bool1\": [NSNumber numberWithBool:NO], @\"number\": [NSNumber numberWithInt:-1], @\"longnum\":[NSNumber numberWithLongLong:0LL], @\"intnum\":[NSNumber numberWithInt:0], @\"setindex\":@\"setindex\"};\n        [table insert:item completion:^(NSDictionary *inserted, NSError *err) {\n            if (err) {\n                [test addLog:[NSString stringWithFormat:@\"Error inserting data to create schema: %@\", err]];\n                completion(NO);\n            } else {\n                [test addLog:@\"Inserted item to create schema\"];\n                completion(YES);\n            }\n        }];\n    }]];\n    \n    [result addObject:[self createRoundTripForType:RTTString withValue:@\"\" andName:@\"Round trip empty string\"]];\n    NSString *simpleString = [NSString stringWithFormat:@\"%c%c%c%c%c\",\n                              ' ' + (rand() % 95),\n                              ' ' + (rand() % 95),\n                              ' ' + (rand() % 95),\n                              ' ' + (rand() % 95),\n                              ' ' + (rand() % 95)];\n    [result addObject:[self createRoundTripForType:RTTString withValue:simpleString andName:@\"Round trip simple string\"]];\n    [result addObject:[self createRoundTripForType:RTTString withValue:[NSNull null] andName:@\"Round trip nil string\"]];\n    \n    [result addObject:[self createRoundTripForType:RTTString withValue:[@\"\" stringByPaddingToLength:1000 withString:@\"*\" startingAtIndex:0] andName:@\"Round trip large (1000) string\"]];\n    [result addObject:[self createRoundTripForType:RTTString withValue:[@\"\" stringByPaddingToLength:65537 withString:@\"*\" startingAtIndex:0] andName:@\"Round trip large (64k+) string\"]];\n\n    [result addObject:[self createRoundTripForType:RTTString withValue:@\"ãéìôü ÇñÑ\" andName:@\"String with non-ASCII characters - Latin\"]];\n    [result addObject:[self createRoundTripForType:RTTString withValue:@\"الكتاب على الطاولة\" andName:@\"String with non-ASCII characters - Arabic\"]];\n    [result addObject:[self createRoundTripForType:RTTString withValue:@\"这本书在桌子上\" andName:@\"String with non-ASCII characters - Chinese\"]];\n    [result addObject:[self createRoundTripForType:RTTString withValue:@\"⒈①Ⅻㄨㄩ 啊阿鼾齄 丂丄狚狛 狜狝﨨﨩 ˊˋ˙–〇 㐀㐁䶴䶵\" andName:@\"String with non-ASCII characters - Chinese 2\"]];\n    [result addObject:[self createRoundTripForType:RTTString withValue:@\"本は机の上に\" andName:@\"String with non-ASCII characters - Japanese\"]];\n    [result addObject:[self createRoundTripForType:RTTString withValue:@\"הספר הוא על השולחן\" andName:@\"String with non-ASCII characters - Hebrew\"]];\n\n    // Date scenarios\n    [result addObject:[self createRoundTripForType:RTTDate withValue:[NSDate date] andName:@\"Round trip current date\"]];\n    [result addObject:[self createRoundTripForType:RTTDate withValue:[ZumoTestGlobals createDateWithYear:2012 month:12 day:12] andName:@\"Round trip specific date\"]];\n    [result addObject:[self createRoundTripForType:RTTDate withValue:[ZumoTestGlobals createDateWithYear:1970 month:1 day:1] andName:@\"Round trip unix zero date\"]];\n    [result addObject:[self createRoundTripForType:RTTDate withValue:[NSDate dateWithTimeIntervalSince1970:-1] andName:@\"Round trip before unix zero date\"]];\n    [result addObject:[self createRoundTripForType:RTTDate withValue:[NSNull null] andName:@\"Round trip null date\"]];\n    \n    // Bool scenarios\n    [result addObject:[self createRoundTripForType:RTTBool withValue:[NSNumber numberWithBool:YES] andName:@\"Round trip (BOOL)YES\"]];\n    [result addObject:[self createRoundTripForType:RTTBool withValue:[NSNumber numberWithBool:NO] andName:@\"Round trip (BOOL)NO\"]];\n    \n    // Number scenarios\n    [result addObject:[self createRoundTripForType:RTTInt withValue:[NSNumber numberWithInt:rand()] andName:@\"Round trip positive number\"]];\n    [result addObject:[self createRoundTripForType:RTTInt withValue:[NSNumber numberWithInt:-rand()] andName:@\"Round trip negative number\"]];\n    [result addObject:[self createRoundTripForType:RTTInt withValue:[NSNumber numberWithInt:0] andName:@\"Round trip zero\"]];\n    [result addObject:[self createRoundTripForType:RTTDouble withValue:[NSNumber numberWithDouble:MAXFLOAT] andName:@\"Round trip MAXFLOAT\"]];\n    [result addObject:[self createRoundTripForType:RTT8ByteLong withValue:[NSNumber numberWithLongLong:123456789012345LL] andName:@\"Round trip long long number\"]];\n    [result addObject:[self createRoundTripForType:RTT8ByteLong withValue:[NSNumber numberWithLongLong:-123456789012345LL] andName:@\"Round trip negative long long\"]];\n    long long maxSupportedLong = 0x0020000000000000LL;\n    long long maxSupportedNegativeLong = 0xFFE0000000000000LL;\n    [result addObject:[self createRoundTripForType:RTT8ByteLong withValue:[NSNumber numberWithLongLong:maxSupportedLong] andName:@\"Round trip maximum long long\"]];\n    [result addObject:[self createRoundTripForType:RTT8ByteLong withValue:[NSNumber numberWithLongLong:maxSupportedNegativeLong] andName:@\"Round trip maximum negative long long\"]];\n    \n    // Complex object scenarios\n    [result addObject:[ZumoTest createTestWithName:@\"Object with complex member\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        NSDictionary *order = @{\n            @\"date\":[NSDate date],\n            @\"client\":@\"John Doe\",\n            @\"products\":@[\n                @{@\"name\":@\"Bread\",@\"price\":@2.99},\n                @{@\"name\":@\"Milk\",@\"price\":@2.50},\n                @{@\"name\":@\"Egg\",@\"price\":@3.29},\n            ]};\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:tableName];\n        [table insert:order completion:^(NSDictionary *item, NSError *error) {\n            BOOL passed = NO;\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error inserting complex object: %@\", error]];\n            } else {\n                double totalPrice = 0;\n                NSArray *products = order[@\"products\"];\n                int productCount = [products count];\n                for (int i = 0; i < productCount; i++) {\n                    totalPrice += [products[i][@\"price\"] doubleValue];\n                }\n                \n                double rtTotalPrice = [item[@\"totalPrice\"] doubleValue];\n                if (fabs(rtTotalPrice - totalPrice) > 0.000001) {\n                    [test addLog:[NSString stringWithFormat:@\"Incorrect round-tripped total price: expected = %lf, actual=%lf\", totalPrice, rtTotalPrice]];\n                } else {\n                    passed = YES;\n                }\n            }\n            \n            [test setTestStatus:(passed ? TSPassed : TSFailed)];\n            completion(passed);\n        }];\n    }]];\n    \n    // Negative scenarios\n    [result addObject:[ZumoTest createTestWithName:@\"(Neg) New column with null value\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:tableName];\n        [table insert:@{@\"ColumnWhichDoesNotExist\":[NSNull null]} completion:^(NSDictionary *item, NSError *err) {\n            BOOL passed;\n            if (!err) {\n                [test addLog:[NSString stringWithFormat:@\"Error, adding new column with null element should fail, but insert worked: %@\", item]];\n                passed = NO;\n            } else {\n                if (err.code == MSErrorMessageErrorCode) {\n                    [test addLog:@\"Test passed, got correct error\"];\n                    passed = YES;\n                } else {\n                    [test addLog:[NSString stringWithFormat:@\"Expected error code %d, got %d\", MSErrorMessageErrorCode, err.code]];\n                    passed = NO;\n                }\n            }\n            \n            [test setTestStatus:(passed ? TSPassed : TSFailed)];\n            completion(passed);\n        }];\n    }]];\n    \n    NSArray *idNames = @[@\"id\", @\"ID\", @\"Id\", @\"iD\"];\n    for (NSString *name in idNames) {\n        NSString *idName = name;\n        NSString *testName = [NSString stringWithFormat:@\"(Neg) Insert element with id field: '%@'\", idName];\n        [result addObject:[ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n            MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n            MSTable *table = [client tableWithName:tableName];\n            NSMutableDictionary *item = [[NSMutableDictionary alloc] init];\n            [item setValue:@\"hello\" forKey:@\"string1\"];\n            [item setValue:@1 forKey:idName];\n            [table insert:item completion:^(NSDictionary *inserted, NSError *err) {\n                BOOL passed;\n                if (!err) {\n                    [test addLog:[NSString stringWithFormat:@\"Error, adding item with 'id' field should fail, but insert worked: %@\", inserted]];\n                    passed = NO;\n                } else {\n                    if (err.code == MSExistingItemIdWithRequest) {\n                        [test addLog:@\"Test passed, got correct error\"];\n                        passed = YES;\n                    } else {\n                        [test addLog:[NSString stringWithFormat:@\"Expected error code %d, got %d\", MSExistingItemIdWithRequest, err.code]];\n                        passed = NO;\n                    }\n                }\n                \n                [test setTestStatus:(passed ? TSPassed : TSFailed)];\n                completion(passed);\n            }];\n\n        }]];\n    }\n\n    NSUInteger endOfIntIdTests = [result count];\n    NSUInteger startOfStringIdTests = [result count];\n\n    // Start of tests for tables with string ids\n    [result addObject:[ZumoTest createTestWithName:@\"Setup string id dynamic schema\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:stringIdTableName];\n        NSDictionary *item =\n        @{\n          @\"name\":@\"a string\",\n          @\"number\":@123.45,\n\t  @\"integer\":@12345,\n          @\"bool\":@YES,\n          @\"date1\":[NSDate date],\n          @\"complex\":@[@\"array with\", @\"string elements\"]\n          };\n        [table insert:item completion:^(NSDictionary *inserted, NSError *error) {\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error: %@\", error]];\n                completion(NO);\n            } else {\n                [test addLog:@\"Setup the dynamic schema\"];\n                [table delete:inserted completion:^(id itemId, NSError *error) {\n                    [test addLog:@\"Deleted the item (clean-up)\"];\n                    completion(YES);\n                }];\n            }\n        }];\n    }]];\n    \n    NSDictionary *validStringIds = @{\n                                @\"no id\": @\"\",\n                                @\"ascii\": @\"id\",\n                                @\"latin\": @\"ãéìôü ÇñÑ\",\n                                @\"arabic\": @\"الكتاب على الطاولة\",\n                                @\"chinese\": @\"这本书在桌子上\",\n                                @\"hebrew\": @\"הספר הוא על השולחן\"\n                                };\n    NSDictionary *templateItem = @{\n                                   @\"name\":@\"ãéìôü ÇñÑ - الكتاب على الطاولة - 这本书在桌子上 - ⒈①Ⅻㄨㄩ 啊阿鼾齄 丂丄狚狛 狜狝﨨﨩 ˊˋ˙–〇 㐀㐁䶴䶵 - 本は机の上に - הספר הוא על השולחן\",\n                                   @\"number\":@123.456,\n\t\t\t\t   @\"integer\":@12345,\n                                   @\"bool\":@YES,\n                                   @\"date1\":[NSDate date],\n                                   @\"complex\":@[@\"abc\",@\"def\",@\"ghi\"]\n                                   };\n    for (NSString *key in [validStringIds allKeys]) {\n        NSString *testName = [@\"String id - insert, id type = \" stringByAppendingString:key];\n        NSString *testId = [validStringIds objectForKey:key];\n        NSMutableDictionary *item = [[NSMutableDictionary alloc] initWithDictionary:templateItem];\n        if ([testId length] > 0) {\n            NSString *uniqueId = [[NSUUID UUID] UUIDString];\n            uniqueId = [@\"-\" stringByAppendingString:uniqueId];\n            [item setValue:[testId stringByAppendingString:uniqueId] forKey:@\"id\"];\n        }\n        [result addObject:[self createStringIdRoundTripTestWithName:testName item:item]];\n    }\n    \n    NSArray *invalidStringIds = @[@\".\",@\"..\",@\"control\\tcharacters\",[@\"large id - \" stringByPaddingToLength:260 withString:@\"*\" startingAtIndex:0]];\n    for (NSString *badId in invalidStringIds) {\n        NSString *testName = [@\"(Neg) String id - invalid id: \" stringByAppendingString:badId];\n        [result addObject:[ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n            MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n            MSTable *table = [client tableWithName:stringIdTableName];\n            NSDictionary *item = @{@\"id\":badId,@\"name\":@\"unused\"};\n            [table insert:item completion:^(NSDictionary *item, NSError *error) {\n                if (error) {\n                    [test addLog:@\"Ok, got expected error\"];\n                    completion(YES);\n                } else {\n                    [test addLog:[NSString stringWithFormat:@\"Error, insert should not have succeeded. Inserted item: %@\", item]];\n                    completion(NO);\n                }\n            }];\n        }]];\n    }\n\n    NSUInteger endOfStringIdTests = [result count];\n\n    for (NSUInteger i = startOfIntIdTests; i < endOfIntIdTests; i++) {\n        ZumoTest *test = [result objectAtIndex:i];\n        [test addRequiredFeature:@\"intIdTables\"];\n    }\n    \n    for (NSUInteger i = startOfStringIdTests; i < endOfStringIdTests; i++) {\n        ZumoTest *test = [result objectAtIndex:i];\n        [test addRequiredFeature:@\"stringIdTables\"];\n    }\n\n    return result;\n}\n\n+ (ZumoTest *)createStringIdRoundTripTestWithName:(NSString *)testName item:(NSDictionary *)item {\n    return [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:stringIdTableName];\n        NSString *itemId = [item objectForKey:@\"id\"];\n        BOOL hadId = itemId != nil;\n        [table insert:item completion:^(NSDictionary *inserted, NSError *error) {\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error inserting: %@\", error]];\n                completion(NO);\n                return;\n            }\n            \n            [test addLog:[NSString stringWithFormat:@\"Inserted item: %@\", inserted]];\n            id newId = [inserted objectForKey:@\"id\"];\n            if (!newId) {\n                [test addLog:@\"Error, inserted item does not have an 'id' property\"];\n                completion(NO);\n                return;\n            }\n            \n            if (![newId isKindOfClass:[NSString class]]) {\n                [test addLog:@\"Error, id should be a string\"];\n                completion(NO);\n                return;\n            }\n\n            if (hadId) {\n                if (![newId isEqualToString:itemId]) {\n                    [test addLog:[NSString stringWithFormat:@\"Error, id passed to insert (%@) is not the same as the one returned by the server (%@)\", itemId, newId]];\n                    completion(NO);\n                    return;\n                }\n            }\n            \n            [table readWithId:newId completion:^(NSDictionary *retrieved, NSError *error) {\n                if (error) {\n                    [test addLog:[NSString stringWithFormat:@\"Error retrieving: %@\", error]];\n                    completion(NO);\n                    return;\n                }\n\n                [test addLog:[NSString stringWithFormat:@\"Retrieved item: %@\", inserted]];\n                NSMutableArray *errors = [[NSMutableArray alloc] init];\n                if (![ZumoTestGlobals compareObjects:item with:retrieved log:errors]) {\n                    [test addLog:@\"Error comparing objects:\"];\n                    for (NSString *err in errors) {\n                        [test addLog:err];\n                    }\n                    completion(NO);\n                    return;\n                }\n\n                [test addLog:@\"Items compare successfully\"];\n                [test addLog:@\"Now trying to insert an item with an existing id (should fail)\"];\n                NSDictionary *badItem = @{@\"id\":newId,@\"name\":@\"unused\"};\n                [table insert:badItem completion:^(NSDictionary *item, NSError *error) {\n                    if (error) {\n                        [test addLog:@\"Ok, got expected error\"];\n                        completion(YES);\n                    } else {\n                        [test addLog:[NSString stringWithFormat:@\"Error, insert should not have succeeded. Inserted item: %@\", item]];\n                        completion(NO);\n                    }\n                }];\n            }];\n        }];\n    }];\n}\n\n+ (ZumoTest *)createRoundTripForType:(RoundTripTestColumnType)type withValue:(id)value andName:(NSString *)testName {\n    ZumoTest *result = [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        MSTable *table = [client tableWithName:tableName];\n        NSMutableDictionary *item = [[NSMutableDictionary alloc] init];\n        NSString *keyName = @\"\";\n        if (type == RTTString) {\n            keyName = @\"string1\";\n        } else if (type == RTTDouble) {\n            keyName = @\"number\";\n        } else if (type == RTTBool) {\n            keyName = @\"bool1\";\n        } else if (type == RTTInt) {\n            keyName = @\"intnum\";\n        } else if (type == RTT8ByteLong) {\n            keyName = @\"longnum\";\n        } else if (type == RTTDate) {\n            keyName = @\"date1\";\n        }\n\n        [item setObject:value forKey:keyName];\n        NSString *valueString = [self toLimitedString:value upTo:100];\n        [test addLog:[NSString stringWithFormat:@\"Inserting value %@, using key %@\", valueString, keyName]];\n\n        [table insert:item completion:^(NSDictionary *inserted, NSError *err) {\n            if (err) {\n                [test addLog:[NSString stringWithFormat:@\"Error inserting: %@\", err]];\n                [test setTestStatus:TSFailed];\n                completion(NO);\n            } else {\n                NSNumber *itemId = [inserted objectForKey:@\"id\"];\n                [table readWithId:itemId completion:^(NSDictionary *retrieved, NSError *err2) {\n                    if (err2) {\n                        [test addLog:[NSString stringWithFormat:@\"Error retrieving: %@\", err2]];\n                        [test setTestStatus:TSFailed];\n                        completion(NO);\n                    } else {\n                        NSString *retrievedString = [self toLimitedString:retrieved upTo:200];\n                        [test addLog:[NSString stringWithFormat:@\"Retrieved item: %@\", retrievedString]];\n                        BOOL failed = NO;\n                        if (type == RTTString) {\n                            NSString *rtString = [retrieved objectForKey:@\"string1\"];\n                            if ([value isKindOfClass:[NSNull class]] && [rtString isKindOfClass:[NSNull class]]) {\n                                // all are null, ok\n                            } else {\n                                if (![rtString isEqualToString:value]) {\n                                    [test addLog:[NSString stringWithFormat:@\"Value is incorrect: %@ != %@\", value, rtString]];\n                                    failed = YES;\n                                }\n                            }\n                        } else if (type == RTTBool) {\n                            NSNumber *rtBool = [retrieved objectForKey:@\"bool1\"];\n                            if ([rtBool boolValue] != [((NSNumber *)value) boolValue]) {\n                                failed = YES;\n                                [test addLog:[NSString stringWithFormat:@\"Value is incorrect: %@ != %@\", value, rtBool]];\n                            }\n                        } else if (type == RTTDate) {\n                            NSDate *rtDate = [retrieved objectForKey:@\"date1\"];\n                            if (![ZumoTestGlobals compareDate:rtDate withDate:((NSDate *)value)]) {\n                                failed = YES;\n                                [test addLog:[NSString stringWithFormat:@\"Value is incorrect: %@ != %@\", value, rtDate]];\n                            }\n                        } else if (type == RTTDouble) {\n                            NSNumber *rtNumber = [retrieved objectForKey:@\"number\"];\n                            double dbl1 = [((NSNumber *)value) doubleValue];\n                            double dbl2 = [rtNumber doubleValue];\n                            double delta = fabs(dbl1 - dbl2);\n                            double error = delta / dbl1;\n                            if (error > 0.000000001) {\n                                failed = YES;\n                                [test addLog:[NSString stringWithFormat:@\"Value is incorrect: %@ != %@\", value, rtNumber]];\n                            }\n                        } else if (type == RTTInt) {\n                            NSNumber *rtNumber = [retrieved objectForKey:@\"intnum\"];\n                            if (![rtNumber isEqualToNumber:value]) {\n                                failed = YES;\n                                [test addLog:[NSString stringWithFormat:@\"Value is incorrect: %@ != %@\", value, rtNumber]];\n                            }\n                        } else if (type == RTT8ByteLong) {\n                            NSNumber *rtNumber = [retrieved objectForKey:@\"longnum\"];\n                            [test addLog:[NSString stringWithFormat:@\"Retrieved number: %@\", rtNumber]];\n                            if (![rtNumber isEqualToNumber:value]) {\n                                failed = YES;\n                                [test addLog:[NSString stringWithFormat:@\"Value is incorrect: %@ != %@\", value, rtNumber]];\n                            }\n                        } else {\n                            failed = YES;\n                            [test addLog:@\"Test not implemented for this type\"];\n                        }\n                        \n                        if (failed) {\n                            [test setTestStatus:TSFailed];\n                            completion(NO);\n                        } else {\n                            if (type == RTTString && value != [NSNull null] && ((NSString *)value).length < 100) {\n                                // Additional validation: query for the inserted data\n                                NSString *rtString = value;\n                                NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"id == %d && string1 == %@\", [itemId intValue], rtString];\n                                [table readWithPredicate:predicate completion:^(NSArray *items, NSInteger totalCount, NSError *err3) {\n                                    BOOL passed = NO;\n                                    if (err3) {\n                                        [test addLog:[NSString stringWithFormat:@\"Error retrieving data: %@\", err3]];\n                                    } else {\n                                        if ([items count] != 1) {\n                                            [test addLog:[NSString stringWithFormat:@\"Expected to receive 1 element; received %d: %@\", [items count], items]];\n                                        } else {\n                                            NSNumber *readId = items[0][@\"id\"];\n                                            if ([itemId isEqualToNumber:readId]) {\n                                                [test addLog:@\"Test passed\"];\n                                                passed = YES;\n                                            } else {\n                                                [test addLog:[NSString stringWithFormat:@\"Received invalid item: %@\", items]];\n                                            }\n                                        }\n                                    }\n                                    \n                                    [test setTestStatus:(passed ? TSPassed : TSFailed)];\n                                    completion(passed);\n                                }];\n                            } else {\n                                [test addLog:@\"Test passed\"];\n                                [test setTestStatus:TSPassed];\n                                completion(YES);\n                            }\n                        }\n                    }\n                }];\n            }\n        }];\n    }];\n    \n    return result;\n}\n\n+ (NSString *)toLimitedString:(id)value upTo:(int)maxLength {\n    NSString *str = [NSString stringWithFormat:@\"%@\", value];\n    if ([str length] > maxLength) {\n        str = [NSString stringWithFormat:@\"%@ ... (len = %d)\", [str substringToIndex:maxLength], [str length]];\n    }\n    \n    return str;\n}\n\n+ (NSString *)groupDescription {\n    return @\"Tests for validating the insertion and retrieval of different types of data\";\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoSavedAppsHeader.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"8.00\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1536</int>\n\t\t<string key=\"IBDocument.SystemVersion\">12C60</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">2844</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1187.34</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">625.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t<string key=\"NS.object.0\">1930</string>\n\t\t</object>\n\t\t<array key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<string>IBProxyObject</string>\n\t\t\t<string>IBUIButton</string>\n\t\t\t<string>IBUIView</string>\n\t\t</array>\n\t\t<array key=\"IBDocument.PluginDependencies\">\n\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t</array>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<string key=\"NS.key.0\">PluginDependencyRecalculationVersion</string>\n\t\t\t<integer value=\"1\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<array class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<object class=\"IBProxyObject\" id=\"841351856\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFilesOwner</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBProxyObject\" id=\"371349661\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFirstResponder</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIView\" id=\"155087540\">\n\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t<array class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"200000154\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"155087540\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">289</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{149, 20}, {69, 44}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"155087540\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"735748891\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIButtonType\">1</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Select</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIHighlightedTitleColor\" id=\"774911795\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleShadowColor\" id=\"619261871\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MC41AA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\" id=\"14641643\">\n\t\t\t\t\t\t\t<int key=\"type\">2</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">15</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\" id=\"688884852\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica-Bold</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">15</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"516772551\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"155087540\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 20}, {92, 44}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"155087540\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"200000154\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIButtonType\">1</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Edit apps</string>\n\t\t\t\t\t\t<reference key=\"IBUIHighlightedTitleColor\" ref=\"774911795\"/>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"IBUINormalTitleShadowColor\" ref=\"619261871\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFontDescription\" ref=\"14641643\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"688884852\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"735748891\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"155087540\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">289</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{226, 20}, {74, 44}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"155087540\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIButtonType\">1</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Cancel</string>\n\t\t\t\t\t\t<reference key=\"IBUIHighlightedTitleColor\" ref=\"774911795\"/>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"IBUINormalTitleShadowColor\" ref=\"619261871\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFontDescription\" ref=\"14641643\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"688884852\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t\t<string key=\"NSFrameSize\">{320, 83}</string>\n\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"516772551\"/>\n\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t<object class=\"NSColorSpace\" key=\"NSCustomColorSpace\">\n\t\t\t\t\t\t<int key=\"NSID\">2</int>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBUISimulatedSizeMetrics\" key=\"IBUISimulatedDestinationMetrics\">\n\t\t\t\t\t<string key=\"IBUISimulatedSizeMetricsClass\">IBUISimulatedFreeformSizeMetricsSentinel</string>\n\t\t\t\t\t<string key=\"IBUIDisplayName\">Freeform</string>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t</array>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<array class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">editButton</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"516772551\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">18</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">headerView</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"155087540\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">19</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">selectApp:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"200000154\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"841351856\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">16</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">editApps:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"516772551\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"841351856\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">15</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">cancel:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"735748891\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"841351856\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">17</int>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<array key=\"orderedObjects\">\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<array key=\"object\" id=\"0\"/>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"371349661\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"155087540\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"735748891\"/>\n\t\t\t\t\t\t\t<reference ref=\"200000154\"/>\n\t\t\t\t\t\t\t<reference ref=\"516772551\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"200000154\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"155087540\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">6</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"516772551\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"155087540\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">10</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"735748891\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"155087540\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t</object>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<string key=\"-1.CustomClassName\">ZumoSavedAppsTableViewController</string>\n\t\t\t\t<string key=\"-1.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"-2.CustomClassName\">UIResponder</string>\n\t\t\t\t<string key=\"-2.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"10.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"2.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"3.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"6.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t</dictionary>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"unlocalizedProperties\"/>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"localizations\"/>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">19</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<array class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">ZumoSavedAppsTableViewController</string>\n\t\t\t\t\t<string key=\"superclassName\">UITableViewController</string>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"actions\">\n\t\t\t\t\t\t<string key=\"cancel:\">id</string>\n\t\t\t\t\t\t<string key=\"editApps:\">id</string>\n\t\t\t\t\t\t<string key=\"selectApp:\">id</string>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"actionInfosByName\">\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"cancel:\">\n\t\t\t\t\t\t\t<string key=\"name\">cancel:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"editApps:\">\n\t\t\t\t\t\t\t<string key=\"name\">editApps:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"selectApp:\">\n\t\t\t\t\t\t\t<string key=\"name\">selectApp:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<string key=\"editButton\">UIButton</string>\n\t\t\t\t\t\t<string key=\"headerView\">UIView</string>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"editButton\">\n\t\t\t\t\t\t\t<string key=\"name\">editButton</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIButton</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"headerView\">\n\t\t\t\t\t\t\t<string key=\"name\">headerView</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/ZumoSavedAppsTableViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<string key=\"IBCocoaTouchPluginVersion\">1930</string>\n\t</data>\n</archive>\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoSavedAppsTableViewController.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <UIKit/UIKit.h>\n\ntypedef void (^EmptyCompletionBlock)(void);\n\n@interface ZumoSavedAppsTableViewController : UITableViewController\n{\n    IBOutlet UIButton *editButton;\n    IBOutlet UIView *headerView;\n}\n\n@property (nonatomic) BOOL savedAppsChanged;\n@property (nonatomic, copy) NSString *selectedAppUrl;\n@property (nonatomic, copy) NSString *selectedAppKey;\n@property (nonatomic, copy) NSMutableArray *savedApps;\n@property (nonatomic, strong) EmptyCompletionBlock completion;\n\n- (IBAction)editApps:(id)sender;\n- (IBAction)cancel:(id)sender;\n- (IBAction)selectApp:(id)sender;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoSavedAppsTableViewController.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoSavedAppsTableViewController.h\"\n\n@interface ZumoSavedAppsTableViewController ()\n\n@end\n\n@implementation ZumoSavedAppsTableViewController\n\n@synthesize selectedAppUrl, selectedAppKey, completion, savedAppsChanged;\n@synthesize savedApps = _savedApps;\n\n- (id)initWithStyle:(UITableViewStyle)style\n{\n    self = [super initWithStyle:style];\n    if (self) {\n        [self setSavedAppsChanged:NO];\n    }\n    return self;\n}\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n\n    self.clearsSelectionOnViewWillAppear = YES;\n    self.navigationItem.rightBarButtonItem = self.editButtonItem;\n}\n\n- (void)didReceiveMemoryWarning\n{\n    [super didReceiveMemoryWarning];\n    // Dispose of any resources that can be recreated.\n}\n\n- (void)setSavedApps:(NSMutableArray *)savedApps {\n    _savedApps = [NSMutableArray arrayWithArray:savedApps];\n}\n\n- (IBAction)editApps:(id)sender {\n    if ([self isEditing]) {\n        [editButton setTitle:@\"Edit apps\" forState:UIControlStateNormal];\n        [self setEditing:NO animated:YES];\n    } else {\n        [editButton setTitle:@\"Done editing\" forState:UIControlStateNormal];\n        [self setEditing:YES animated:YES];\n    }\n}\n\n- (IBAction)cancel:(id)sender {\n    [self setSavedAppsChanged:NO];\n    [self setSavedApps:nil];\n    [self setSelectedAppUrl:nil];\n    [self setSelectedAppKey:nil];\n    [self dismissAndCallCompletion];\n}\n\n- (IBAction)selectApp:(id)sender {\n    if (selectedAppUrl && selectedAppKey) {\n        [self dismissAndCallCompletion];\n    } else if ([_savedApps count] == 0) {\n        // No saved apps, can return\n        [self dismissAndCallCompletion];\n    } else {\n        UIAlertView *av = [[UIAlertView alloc] initWithTitle:@\"Error\" message:@\"Please select an app\" delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\n        [av show];\n    }\n}\n\n- (void)dismissAndCallCompletion {\n    [[self presentingViewController] dismissViewControllerAnimated:YES completion:[self completion]];\n}\n\n#pragma mark - Table view data source\n\n- (UIView *)headerView {\n    if (!headerView) {\n        [[NSBundle mainBundle] loadNibNamed:@\"ZumoSavedAppsHeader\" owner:self options:nil];\n    }\n    \n    return headerView;\n}\n\n- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {\n    return [[self headerView] bounds].size.height;\n}\n\n- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {\n    return [self headerView];\n}\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView\n{\n    return 1;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section\n{\n    return [_savedApps count];\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    static NSString *CellIdentifier = @\"UITableViewCell\";\n    \n    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];\n    if (!cell) {\n        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];\n    }\n    \n    NSArray *appData = [[self savedApps] objectAtIndex:[indexPath row]];\n    NSString *appUrl = [appData objectAtIndex:0];\n    [[cell textLabel] setText:appUrl];\n    \n    return cell;\n}\n\n- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    return YES;\n}\n\n- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    if (editingStyle == UITableViewCellEditingStyleDelete) {\n        [self setSavedAppsChanged:YES];\n        [_savedApps removeObjectAtIndex:[indexPath row]];\n        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];\n    }\n}\n\n- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath\n{\n    int from = [fromIndexPath row];\n    int to = [toIndexPath row];\n    if (from == to) return;\n    [self setSavedAppsChanged:YES];\n    NSArray *item = [_savedApps objectAtIndex:from];\n    [_savedApps removeObjectAtIndex:from];\n    [_savedApps insertObject:item atIndex:to];\n}\n\n- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    return YES;\n}\n\n#pragma mark - Table view delegate\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    NSArray *appData = [_savedApps objectAtIndex:[indexPath row]];\n    [self setSelectedAppUrl:[appData objectAtIndex:0]];\n    [self setSelectedAppKey:[appData objectAtIndex:1]];\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTest.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"ZumoTestCallbacks.h\"\n\n// Forward decoration\n@class ZumoTest;\n\ntypedef void (^ZumoTestCompletion)(BOOL testPassed);\ntypedef void (^ZumoTestExecution)(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion);\n\n@interface ZumoTest : NSObject\n{\n    NSMutableArray *logs;\n}\n\n@property (nonatomic, weak) id<ZumoTestCallbacks> delegate;\n\n@property (nonatomic, strong) NSString *testName;\n@property (nonatomic, copy) ZumoTestExecution execution;\n@property (nonatomic) TestStatus testStatus;\n@property (nonatomic, strong) NSMutableDictionary *propertyBag;\n@property (nonatomic) BOOL canRunUnattended;\n@property (nonatomic, copy) NSDate *startTime;\n@property (nonatomic, copy) NSDate *endTime;\n@property (nonatomic, strong) NSMutableArray *requiredFeatures;\n\n+ (ZumoTest *)createTestWithName:(NSString *)name andExecution:(ZumoTestExecution)steps;\n\n- (void)resetStatus;\n- (void)startExecutingFrom:(UIViewController *)currentViewController;\n- (void)addLog:(NSString *)text;\n- (NSArray *)getLogs;\n- (void)addRequiredFeature:(NSString *)featureName;\n\n+ (NSString *)testStatusToString:(TestStatus)status;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTest.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoTest.h\"\n#import \"ZumoTestGlobals.h\"\n\n@implementation ZumoTest\n\n@synthesize testName, execution, delegate, testStatus, startTime, endTime;\n@synthesize propertyBag = _propertyBag;\n@synthesize canRunUnattended = _canRunUnattended;\n\n- (id)init {\n    self = [super init];\n    if (self) {\n        [self setTestStatus:TSNotRun];\n        logs = [[NSMutableArray alloc] init];\n        _propertyBag = [[NSMutableDictionary alloc] init];\n        _canRunUnattended = YES;\n        _requiredFeatures = [[NSMutableArray alloc] init];\n    }\n    \n    return self;\n}\n\n+ (ZumoTest *)createTestWithName:(NSString *)name andExecution:(ZumoTestExecution)steps {\n    ZumoTest *result = [[ZumoTest alloc] init];\n    [result setTestName:name];\n    [result setExecution:steps];\n    return result;\n}\n\n- (void)addRequiredFeature:(NSString *)featureName {\n    [self.requiredFeatures addObject:featureName];\n}\n\n- (BOOL)shouldBeSkipped {\n    NSDictionary *globalTestParams = [[ZumoTestGlobals sharedInstance] globalTestParameters];\n    NSDictionary *features = [globalTestParams objectForKey:RUNTIME_FEATURES_KEY];\n    if (!features) {\n        // By default, do not skip\n        return NO;\n    }\n    \n    for (NSString *requiredFeature in self.requiredFeatures) {\n        NSNumber *featureEnabled = [features objectForKey:requiredFeature];\n        if (!featureEnabled) {\n            [self addLog:[NSString stringWithFormat:@\"Test requires '%@' feature, but the value wasn't present in the runtime information.\", featureEnabled]];\n            [self setTestStatus:TSFailed];\n            return YES;\n        }\n        BOOL isEnabled = [featureEnabled boolValue];\n        if (!isEnabled) {\n            // Test requires feature, but it's not enabled. Skip it.\n            return YES;\n        }\n    }\n    \n    return NO;\n}\n\n- (void)startExecutingFrom:(UIViewController *)currentViewController {\n    [[self delegate] zumoTestStarted:[self testName]];\n    testStatus = TSRunning;\n    ZumoTestExecution steps = [self execution];\n    __weak ZumoTest *weakSelf = self;\n    [self setStartTime:[NSDate date]];\n    if ([self shouldBeSkipped]) {\n        [self setEndTime:[NSDate date]];\n        if ([self testStatus] == TSRunning) {\n            [self setTestStatus:TSSkipped];\n        }\n        [[self delegate] zumoTestFinished:[self testName] withResult:[self testStatus]];\n    } else {\n        steps(self, currentViewController, ^(BOOL testPassed) {\n            [weakSelf setEndTime:[NSDate date]];\n            TestStatus currentStatus = [weakSelf testStatus];\n            if (currentStatus != TSSkipped) {\n                // if test marked itself as 'skipped', don't set its status.\n                currentStatus = testPassed ? TSPassed : TSFailed;\n            }\n            [weakSelf setTestStatus:currentStatus];\n            [[weakSelf delegate] zumoTestFinished:[weakSelf testName] withResult:currentStatus];\n        });\n    }\n}\n\n- (void)resetStatus {\n    testStatus = TSNotRun;\n    [logs removeAllObjects];\n}\n\n- (void)addLog:(NSString *)text {\n    NSString *timestamped = [NSString stringWithFormat:@\"[%@] %@\", [ZumoTestGlobals dateToString:[NSDate date]], text];\n    [logs addObject:timestamped];\n    NSLog(@\"%@\", timestamped);\n}\n\n- (NSArray *)getLogs {\n    return [NSArray arrayWithArray:logs];\n}\n\n- (NSString *)description {\n    NSString *statusName = [ZumoTest testStatusToString:[self testStatus]];\n    return [NSString stringWithFormat:@\"%@ - %@\", [self testName], statusName];\n}\n\n+ (NSString *)testStatusToString:(TestStatus)status {\n    NSString *testStatus;\n    switch (status) {\n        case TSFailed:\n            testStatus = @\"Failed\";\n            break;\n            \n        case TSPassed:\n            testStatus = @\"Passed\";\n            break;\n            \n        case TSNotRun:\n            testStatus = @\"NotRun\";\n            break;\n            \n        case TSRunning:\n            testStatus = @\"Running\";\n            break;\n            \n        case TSSkipped:\n            testStatus = @\"Skipped\";\n            break;\n            \n        default:\n            testStatus = @\"Unkonwn\";\n            break;\n    }\n    \n    return testStatus;\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestCallbacks.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\ntypedef enum { TSNotRun, TSRunning, TSSkipped, TSFailed, TSPassed } TestStatus;\n\n@protocol ZumoTestCallbacks <NSObject>\n\n@required\n- (void)zumoTestStarted:(NSString *)testName;\n- (void)zumoTestFinished:(NSString *)testName withResult:(TestStatus)testResult;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestGlobals.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import <WindowsAzureMobileServices/WindowsAzureMobileServices.h>\n\ntypedef void (^ZumoHttpRequestCompletion)(NSHTTPURLResponse *response, NSData *responseBody, NSError *error);\n\nextern NSString *const RUNTIME_VERSION_KEY;\nextern NSString *const CLIENT_VERSION_KEY;\nextern NSString *const RUNTIME_FEATURES_KEY;\n\nextern NSString *const FEATURE_STRING_ID_TABLES;\nextern NSString *const FEATURE_INT_ID_TABLES;\nextern NSString *const FEATURE_NH_PUSH_ENABLED;\n\n@protocol PushNotificationReceiver <NSObject>\n\n@required\n- (void)pushReceived:(NSDictionary *)userInfo;\n\n@end\n\n@interface ZumoTestGlobals : NSObject\n{\n    NSMutableDictionary *globalTestParameters;\n}\n\n@property (nonatomic, strong) MSClient *client;\n@property (nonatomic, copy) NSData *deviceToken;\n@property (nonatomic, copy) NSString *remoteNotificationRegistrationStatus;\n@property (nonatomic, weak) id<PushNotificationReceiver> pushNotificationDelegate;\n\n+ (ZumoTestGlobals *)sharedInstance;\n- (void)initializeClientWithAppUrl:(NSString *)url andKey:(NSString *)appKey;\n- (void)saveAppInfo:(NSString *)appUrl key:(NSString *)appKey;\n- (NSArray *)loadAppInfo;\n- (void)saveUploadLogsUrl:(NSString *)url;\n- (NSString *)loadUploadLogsUrl;\n- (NSMutableDictionary *)globalTestParameters;\n\n// Helper methods\n+ (NSDate *)createDateWithYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day;\n+ (BOOL)compareDate:(NSDate *)date1 withDate:(NSDate *)date2;\n+ (BOOL)compareObjects:(NSDictionary *)obj1 with:(NSDictionary *)obj2 log:(NSMutableArray *)errors;\n+ (BOOL)compareObjects:(NSDictionary *)obj1 with:(NSDictionary *)obj2 ignoreKeys:(NSArray *)keys log:(NSMutableArray *)errors;\n+ (BOOL)compareJson:(id)json1 with:(id)json2 log:(NSMutableArray *)errors;\n+ (NSString *)dateToString:(NSDate *)date;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestGlobals.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoTestGlobals.h\"\n\nNSString *const UserDefaultApplicationUrl = @\"ZumoE2ETest_AppUrl\";\nNSString *const UserDefaultApplicationKey = @\"ZumoE2ETest_AppKey\";\nNSString *const UserDefaultUploadLogsUrl = @\"ZumoE2ETest_UploadLogUrl\";\nNSString *const RUNTIME_VERSION_KEY = @\"client-version\";\nNSString *const CLIENT_VERSION_KEY = @\"server-version\";\nNSString *const RUNTIME_FEATURES_KEY = @\"runtime-features\";\nNSString *const FEATURE_STRING_ID_TABLES = @\"stringIdTables\";\nNSString *const FEATURE_INT_ID_TABLES = @\"intIdTables\";\nNSString *const FEATURE_NH_PUSH_ENABLED = @\"nhPushEnabled\";\n\n@implementation ZumoTestGlobals\n\n@synthesize client, remoteNotificationRegistrationStatus, pushNotificationDelegate;\n\n+(ZumoTestGlobals *)sharedInstance {\n    static ZumoTestGlobals *instance = nil;\n    if (!instance) {\n        instance = [[ZumoTestGlobals alloc] init];\n    }\n    \n    return instance;\n}\n\n- (id)init {\n    self = [super init];\n    if (self) {\n        self->globalTestParameters = [[NSMutableDictionary alloc] init];\n    }\n    return self;\n}\n\n- (void)initializeClientWithAppUrl:(NSString *)url andKey:(NSString *)appKey {\n    [self setClient:[MSClient clientWithApplicationURLString:url applicationKey:appKey]];\n}\n\n- (NSMutableDictionary *)globalTestParameters {\n    return self->globalTestParameters;\n}\n\n- (void)saveAppInfo:(NSString *)appUrl key:(NSString *)appKey {\n    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n    [defaults setObject:appUrl forKey:UserDefaultApplicationUrl];\n    [defaults setObject:appKey forKey:UserDefaultApplicationKey];\n    [defaults synchronize];\n}\n\n- (NSArray *)loadAppInfo {\n    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n    NSString *appUrl = [defaults objectForKey:UserDefaultApplicationUrl];\n    NSString *appKey = [defaults objectForKey:UserDefaultApplicationKey];\n    if (appUrl && appKey) {\n        return [NSArray arrayWithObjects:appUrl, appKey, nil];\n    } else {\n        return nil;\n    }\n}\n\n- (void)saveUploadLogsUrl:(NSString *)url {\n    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n    [defaults setObject:url forKey:UserDefaultUploadLogsUrl];\n    [defaults synchronize];\n}\n\n- (NSString *)loadUploadLogsUrl {\n    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];\n    NSString *uploadLogsUrl = [defaults objectForKey:UserDefaultUploadLogsUrl];\n    return uploadLogsUrl;\n}\n\n+(NSDate *)createDateWithYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day {\n    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];\n    NSDateComponents *components = [[NSDateComponents alloc] init];\n    [components setYear:year];\n    [components setMonth:month];\n    [components setDay:day];\n    [components setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];\n    return [calendar dateFromComponents:components];\n}\n\n+(BOOL)compareDate:(NSDate *)date1 withDate:(NSDate *)date2 {\n    if ([date1 isKindOfClass:[NSNull class]] && [date2 isKindOfClass:[NSNull class]]) {\n        // both are null, ok\n        return YES;\n    }\n    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];\n    [formatter setDateFormat:@\"yyyy-MM-ddTHH:mm:ss\"];\n    NSString *str1 = [formatter stringFromDate:date1];\n    NSString *str2 = [formatter stringFromDate:date2];\n    return [str1 isEqualToString:str2];\n}\n\n+(NSString *)dateToString:(NSDate *)date{\n    static NSDateFormatter *formatter;\n    if (!formatter) {\n        formatter = [[NSDateFormatter alloc] init];\n        [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];\n        [formatter setDateFormat:@\"yyyy-MM-dd HH:mm:ss.SSS\"];\n    }\n    \n    return [formatter stringFromDate:date];\n}\n\n+(NSMutableDictionary *)propertyBag {\n    static NSMutableDictionary *dict = nil;\n    if (!dict) {\n        dict = [[NSMutableDictionary alloc] init];\n    }\n    \n    return dict;\n}\n\n+(BOOL)compareObjects:(NSDictionary *)obj1 with:(NSDictionary *)obj2 log:(NSMutableArray *)errors {\n    return [self compareObjects:obj1 with:obj2 ignoreKeys:@[@\"id\"] log:errors];\n}\n\n+ (BOOL)compareObjects:(NSDictionary *)obj1 with:(NSDictionary *)obj2 ignoreKeys:(NSArray *)keys log:(NSMutableArray *)errors {\n    NSDictionary *first = [self clone:obj1 removingKeys:keys];\n    NSDictionary *second = [self clone:obj2 removingKeys:keys];\n    return [self compareJson:first with:second log:errors];\n}\n\n+(NSDictionary *)clone:(NSDictionary *)dic removingKeys:(NSArray *)keys {\n    NSMutableDictionary *result = [[NSMutableDictionary alloc] init];\n    for (NSString *key in [dic allKeys]) {\n        BOOL copyValue = YES;\n        for (NSString *keyToRemove in keys) {\n            if ([key isEqualToString:keyToRemove]) {\n                copyValue = NO;\n                break;\n            }\n        }\n        if (copyValue) {\n            [result setValue:[dic objectForKey:key] forKey:key];\n        }\n    }\n    return result;\n}\n\n+(BOOL)compareJson:(id)json1 with:(id)json2 log:(NSMutableArray *)errors {\n    if (!json1 && !json2) return YES;\n    if ([json1 isKindOfClass:[NSNull class]] && [json2 isKindOfClass:[NSNull class]]) return YES;\n    if (!json1 || !json2 || [json1 isKindOfClass:[NSNull class]] || [json2 isKindOfClass:[NSNull class]]) {\n        [errors addObject:[NSString stringWithFormat:@\"Only one is null - json1 = %@, json2 = %@\", json1, json2]];\n        return NO;\n    }\n\n    BOOL firstIsString = [json1 isKindOfClass:[NSString class]];\n    BOOL secondIsString = [json2 isKindOfClass:[NSString class]];\n    if (firstIsString && secondIsString) {\n        NSString *str1 = json1;\n        NSString *str2 = json2;\n        if ([str1 isEqualToString:str2]) {\n            return YES;\n        } else {\n            [errors addObject:[NSString stringWithFormat:@\"Different strings - json1 = %@, json2 = %@\", str1, str2]];\n            return NO;\n        }\n    } else if (firstIsString || secondIsString) {\n        [errors addObject:[NSString stringWithFormat:@\"Only one is a string - json1 = %@, json2 = %@\", json1, json2]];\n        return NO;\n    }\n\n    BOOL firstIsNumber = [json1 isKindOfClass:[NSNumber class]];\n    BOOL secondIsNumber = [json2 isKindOfClass:[NSNumber class]];\n    if (firstIsNumber && secondIsNumber) {\n        NSNumber *num1 = json1;\n        NSNumber *num2 = json2;\n        if ([num1 isEqualToNumber:num2]) {\n            return YES;\n        } else {\n            [errors addObject:[NSString stringWithFormat:@\"Different number/bool - json1 = %@, json2 = %@\", num1, num2]];\n            return NO;\n        }\n    } else if (firstIsNumber || secondIsNumber) {\n        [errors addObject:[NSString stringWithFormat:@\"Only one is a number/bool - json1 = %@, json2 = %@\", json1, json2]];\n        return NO;\n    }\n    \n    BOOL firstIsDate = [json1 isKindOfClass:[NSDate class]];\n    BOOL secondIsDate = [json2 isKindOfClass:[NSDate class]];\n    if (firstIsDate && secondIsDate) {\n        NSDate *date1 = json1;\n        NSDate *date2 = json2;\n        if ([self compareDate:date1 withDate:date2]) {\n            return YES;\n        } else {\n            [errors addObject:[NSString stringWithFormat:@\"Different date - json1 = %@, json2 = %@\", date1, date2]];\n            return NO;\n        }\n    } else if (firstIsDate || secondIsDate) {\n        [errors addObject:[NSString stringWithFormat:@\"Only one is a date - json1 = %@, json2 = %@\", json1, json2]];\n        return NO;\n    }\n\n    BOOL firstIsArray = [json1 isKindOfClass:[NSArray class]];\n    BOOL secondIsArray = [json2 isKindOfClass:[NSArray class]];\n    if (firstIsArray && secondIsArray) {\n        NSArray *arr1 = json1;\n        NSArray *arr2 = json2;\n        if ([arr1 count] == [arr2 count]) {\n            for (int i = 0; i < [arr1 count]; i++) {\n                id value1 = [arr1 objectAtIndex:i];\n                id value2 = [arr2 objectAtIndex:i];\n                if (![self compareJson:value1 with:value2 log:errors]) {\n                    [errors addObject:[NSString stringWithFormat:@\"Error comparing element %d of the array\", i]];\n                    return NO;\n                }\n            }\n            return YES;\n        } else {\n            [errors addObject:[NSString stringWithFormat:@\"Different array sizes - json1.len = %d, json2.len = %d\", [arr1 count], [arr2 count]]];\n            return NO;\n        }\n    } else if (firstIsArray || secondIsArray) {\n        [errors addObject:[NSString stringWithFormat:@\"Only one is an array - json1 = %@, json2 = %@\", json1, json2]];\n        return NO;\n    }\n    \n    BOOL firstIsObject = [json1 isKindOfClass:[NSDictionary class]];\n    BOOL secondIsObject = [json2 isKindOfClass:[NSDictionary class]];\n    if (firstIsObject && secondIsObject) {\n        NSDictionary *dic1 = json1;\n        NSDictionary *dic2 = json2;\n        if ([dic1 count] == [dic2 count]) {\n            for (NSString *key in [dic1 allKeys]) {\n                id value1 = dic1[key];\n                id value2 = dic2[key];\n                if (![self compareJson:value1 with:value2 log:errors]) {\n                    [errors addObject:[NSString stringWithFormat:@\"Error comparing element with key '%@' of the dictionary\", key]];\n                    return NO;\n                }\n            }\n            return YES;\n        } else {\n            [errors addObject:[NSString stringWithFormat:@\"Different dictionary sizes - json1.len = %d, json2.len = %d\", [dic1 count], [dic2 count]]];\n            return NO;\n        }\n    } else if (firstIsObject || secondIsObject) {\n        [errors addObject:[NSString stringWithFormat:@\"Only one is an array - json1 = %@, json2 = %@\", json1, json2]];\n        return NO;\n    }\n    \n    [errors addObject:[NSString stringWithFormat:@\"Unknown types. json1 = %@, json2 = %@\", json1, json2]];\n    return NO;\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestGroup.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"ZumoTest.h\"\n#import \"ZumoTestGroupCallbacks.h\"\n\n@interface ZumoTestGroup : NSObject <ZumoTestCallbacks>\n{\n    BOOL runningTests;\n    UIViewController *associatedViewController;\n}\n\n@property (nonatomic) int testsPassed;\n@property (nonatomic) int testsFailed;\n@property (nonatomic) int testsSkipped;\n@property (nonatomic, strong) NSMutableArray *tests;\n@property (nonatomic, copy) NSString *name;\n@property (nonatomic, copy) NSString *groupDescription;\n@property (nonatomic, weak) id<ZumoTestGroupCallbacks> delegate;\n@property (nonatomic, copy) NSDate *startTime;\n@property (nonatomic, copy) NSDate *endTime;\n\n- (void)addTest:(ZumoTest *)test;\n- (void)startExecutingFrom:(UIViewController *)viewController;\n- (BOOL)haveTestsRun;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestGroup.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoTestGroup.h\"\n\n@implementation ZumoTestGroup\n\n@synthesize name, delegate, tests, groupDescription;\n@synthesize testsFailed = _testsFailed, testsPassed = _testsPassed, testsSkipped = _testsSkipped;\n@synthesize startTime, endTime;\n\n- (id)init {\n    self = [super init];\n    if (self) {\n        [self setTests:[[NSMutableArray alloc] init]];\n        runningTests = NO;\n        _testsFailed = _testsPassed = _testsSkipped = -1;\n    }\n    \n    return self;\n}\n\n- (void)addTest:(ZumoTest *)test {\n    [[self tests] addObject:test];\n    [test setDelegate:self];\n}\n\n- (void)startExecutingFrom:(UIViewController *)viewController {\n    _testsPassed = _testsFailed = _testsSkipped = 0;\n    [self setStartTime:[NSDate date]];\n    runningTests = YES;\n    associatedViewController = viewController;\n    [[self delegate] zumoTestGroupStarted:[self name]];\n    [self executeNextTest];\n}\n\n- (void)executeNextTest {\n    int testIndex = _testsFailed + _testsPassed + _testsSkipped;\n    if (testIndex >= [tests count]) {\n        runningTests = NO;\n        [self setEndTime:[NSDate date]];\n        associatedViewController = nil;\n        [[self delegate] zumoTestGroupFinished:[self name] withPassed:_testsPassed andFailed:_testsFailed andSkipped:_testsSkipped];\n    } else {\n        ZumoTest *nextTest = [[self tests] objectAtIndex:testIndex];\n        [nextTest startExecutingFrom:associatedViewController];\n    }\n}\n\n- (void)zumoTestStarted:(NSString *)testName {\n    [[self delegate] zumoTestGroupSingleTestStarted:(_testsFailed + _testsPassed + _testsSkipped)];\n    NSLog(@\"Starting test %@\", testName);\n}\n\n- (void)zumoTestFinished:(NSString *)testName withResult:(TestStatus)testResult {\n    [[self delegate] zumoTestGroupSingleTestFinished:(_testsPassed + _testsFailed + _testsSkipped) withResult:testResult];\n    NSString *testResultStr = (testResult == TSPassed) ? @\"PASS\" : (testResult == TSSkipped ? @\"SKIP\" : @\"FAIL\");\n    NSLog(@\"Finished test %@: %@\", testName, testResultStr);\n    if (testResult == TSPassed) {\n        _testsPassed++;\n    } else if (testResult == TSSkipped) {\n        _testsSkipped++;\n    } else {\n        _testsFailed++;\n    }\n    \n    [self executeNextTest];\n}\n\n- (BOOL)haveTestsRun {\n    return _testsFailed > 0 || _testsPassed > 0;\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestGroupCallbacks.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n#import \"ZumoTestCallbacks.h\"\n\n@protocol ZumoTestGroupCallbacks <NSObject>\n\n@required\n\n- (void)zumoTestGroupStarted:(NSString *)groupName;\n- (void)zumoTestGroupFinished:(NSString *)groupName withPassed:(int)passedTests andFailed:(int)failedTests andSkipped:(int)skippedTests;\n- (void)zumoTestGroupSingleTestStarted:(int)testIndex;\n- (void)zumoTestGroupSingleTestFinished:(int)testIndex withResult:(TestStatus)testStatus;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestGroupTableHeader.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"8.00\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1552</int>\n\t\t<string key=\"IBDocument.SystemVersion\">12E55</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">3084</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1187.39</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">626.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t<string key=\"NS.object.0\">2083</string>\n\t\t</object>\n\t\t<array key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<string>IBProxyObject</string>\n\t\t\t<string>IBUIButton</string>\n\t\t\t<string>IBUIView</string>\n\t\t</array>\n\t\t<array key=\"IBDocument.PluginDependencies\">\n\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t</array>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<string key=\"NS.key.0\">PluginDependencyRecalculationVersion</string>\n\t\t\t<integer value=\"1\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<array class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<object class=\"IBProxyObject\" id=\"841351856\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFilesOwner</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBProxyObject\" id=\"371349661\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFirstResponder</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIView\" id=\"958486553\">\n\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t<array class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"968056850\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"958486553\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 20}, {97, 44}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"958486553\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"1021521705\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIButtonType\">1</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Run Tests</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIHighlightedTitleColor\" id=\"341332787\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleShadowColor\" id=\"633233640\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MC41AA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\" id=\"296236343\">\n\t\t\t\t\t\t\t<int key=\"type\">2</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">15</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\" id=\"404725170\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica-Bold</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">15</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"1021521705\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"958486553\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{125, 20}, {65, 44}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"958486553\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"788174276\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIButtonType\">1</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Reset</string>\n\t\t\t\t\t\t<reference key=\"IBUIHighlightedTitleColor\" ref=\"341332787\"/>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"IBUINormalTitleShadowColor\" ref=\"633233640\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFontDescription\" ref=\"296236343\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"404725170\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"788174276\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"958486553\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">289</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{202, 20}, {96, 44}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"958486553\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIButtonType\">1</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Send logs</string>\n\t\t\t\t\t\t<reference key=\"IBUIHighlightedTitleColor\" ref=\"341332787\"/>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"IBUINormalTitleShadowColor\" ref=\"633233640\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFontDescription\" ref=\"296236343\"/>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"404725170\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t\t<string key=\"NSFrameSize\">{320, 83}</string>\n\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"968056850\"/>\n\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t<object class=\"NSColorSpace\" key=\"NSCustomColorSpace\">\n\t\t\t\t\t\t<int key=\"NSID\">2</int>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBUISimulatedSizeMetrics\" key=\"IBUISimulatedDestinationMetrics\">\n\t\t\t\t\t<string key=\"IBUISimulatedSizeMetricsClass\">IBUISimulatedFreeformSizeMetricsSentinel</string>\n\t\t\t\t\t<string key=\"IBUIDisplayName\">Freeform</string>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t</array>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<array class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">headerView</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"958486553\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">41</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">runTests:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"968056850\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"841351856\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">43</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">resetTests:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"1021521705\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"841351856\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">44</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">uploadLogs:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"788174276\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"841351856\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">46</int>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<array key=\"orderedObjects\">\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<array key=\"object\" id=\"0\"/>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"371349661\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"958486553\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"968056850\"/>\n\t\t\t\t\t\t\t<reference ref=\"1021521705\"/>\n\t\t\t\t\t\t\t<reference ref=\"788174276\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"968056850\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"958486553\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">14</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1021521705\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"958486553\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">19</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"788174276\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"958486553\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t</object>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<string key=\"-1.CustomClassName\">ZumoTestGroupTableViewController</string>\n\t\t\t\t<string key=\"-1.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"-2.CustomClassName\">UIResponder</string>\n\t\t\t\t<string key=\"-2.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"14.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"19.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"2.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"3.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t</dictionary>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"unlocalizedProperties\"/>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"localizations\"/>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">47</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<array class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">ZumoTestGroupTableViewController</string>\n\t\t\t\t\t<string key=\"superclassName\">UITableViewController</string>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"actions\">\n\t\t\t\t\t\t<string key=\"resetTests:\">id</string>\n\t\t\t\t\t\t<string key=\"runTests:\">id</string>\n\t\t\t\t\t\t<string key=\"showHelp:\">id</string>\n\t\t\t\t\t\t<string key=\"uploadLogs:\">id</string>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"actionInfosByName\">\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"resetTests:\">\n\t\t\t\t\t\t\t<string key=\"name\">resetTests:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"runTests:\">\n\t\t\t\t\t\t\t<string key=\"name\">runTests:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"showHelp:\">\n\t\t\t\t\t\t\t<string key=\"name\">showHelp:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"uploadLogs:\">\n\t\t\t\t\t\t\t<string key=\"name\">uploadLogs:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<string key=\"headerView\">UIView</string>\n\t\t\t\t\t\t<string key=\"uploadUrl\">UITextField</string>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"headerView\">\n\t\t\t\t\t\t\t<string key=\"name\">headerView</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"uploadUrl\">\n\t\t\t\t\t\t\t<string key=\"name\">uploadUrl</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UITextField</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/ZumoTestGroupTableViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<string key=\"IBCocoaTouchPluginVersion\">2083</string>\n\t</data>\n</archive>\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestGroupTableViewController.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <UIKit/UIKit.h>\n#import \"ZumoTestGroup.h\"\n#import \"ZumoTestGroupCallbacks.h\"\n\n@interface ZumoTestGroupTableViewController : UITableViewController <UITextFieldDelegate, ZumoTestGroupCallbacks>\n{\n    IBOutlet UIView *headerView;\n}\n\n@property (nonatomic, strong) ZumoTestGroup *testGroup;\n@property (nonatomic, strong) NSString *logUploadUrl;\n\n- (IBAction)runTests:(id)sender;\n- (IBAction)resetTests:(id)sender;\n- (IBAction)uploadLogs:(id)sender;\n\n- (UIView *)headerView;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestGroupTableViewController.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoTestGroupTableViewController.h\"\n#import \"ZumoTestHelpViewController.h\"\n#import \"ZumoLogUpdater.h\"\n#import \"ZumoTestGlobals.h\"\n#import \"ZumoTestStore.h\"\n\n@interface ZumoTestGroupTableViewController ()\n\n@end\n\n@implementation ZumoTestGroupTableViewController\n\n@synthesize testGroup, logUploadUrl;\n\n- (id)init\n{\n    self = [super initWithStyle:UITableViewStyleGrouped];\n    if (self) {\n        \n    }\n    \n    return self;\n}\n\n- (id)initWithStyle:(UITableViewStyle)style\n{\n    return [self init];\n}\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    NSString *groupName = [[self testGroup] name];\n    [[self navigationItem] setTitle:groupName];\n    if ([groupName hasPrefix:ALL_TESTS_GROUP_NAME]) {\n        // Start running the tests\n        [self runTests:nil];\n    }\n}\n\n- (void)didReceiveMemoryWarning\n{\n    [super didReceiveMemoryWarning];\n    // Dispose of any resources that can be recreated.\n}\n\n#pragma mark - Table view data source\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView\n{\n    return 1;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section\n{\n    return [[[self testGroup] tests] count];\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    static NSString *CellIdentifier = @\"UITableViewCell\";\n    \n    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];\n    if (!cell) {\n        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];\n    }\n    \n    ZumoTest *test = [[[self testGroup] tests] objectAtIndex:[indexPath row]];\n    UIColor *textColor;\n    if ([test testStatus] == TSFailed) {\n        textColor = [UIColor redColor];\n    } else if ([test testStatus] == TSPassed) {\n        textColor = [UIColor greenColor];\n    } else if ([test testStatus] == TSRunning) {\n        textColor = [UIColor grayColor];\n    } else if ([test testStatus] == TSSkipped) {\n        textColor = [UIColor magentaColor];\n    } else {\n        textColor = [UIColor blackColor];\n    }\n    [[cell textLabel] setTextColor:textColor];\n    [[cell textLabel] setText:[NSString stringWithFormat:@\"%d. %@\", [indexPath row] + 1, [test description]]];\n    \n    return cell;\n}\n\n- (UIView *)headerView {\n    if (!headerView) {\n        [[NSBundle mainBundle] loadNibNamed:@\"ZumoTestGroupTableHeader\" owner:self options:nil];\n    }\n    \n    return headerView;\n}\n\n- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {\n    return [[self headerView] bounds].size.height;\n}\n\n- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {\n    return [self headerView];\n}\n\n- (BOOL)textFieldShouldReturn:(UITextField *)textField {\n    [textField resignFirstResponder];\n    return YES;\n}\n\n- (IBAction)runTests:(id)sender {\n    NSLog(@\"Start running tests!\");\n    [[self testGroup] setDelegate:self];\n    __weak UIViewController *weakSelf = self;\n    [[self testGroup] startExecutingFrom:weakSelf];\n}\n\n- (IBAction)resetTests:(id)sender {\n    ZumoTest *test;\n    for (test in [[self testGroup] tests]) {\n        [test resetStatus];\n    }\n    \n    [[self tableView] reloadData];\n}\n\n- (IBAction)uploadLogs:(id)sender {\n    ZumoTestHelpViewController *helpController = [[ZumoTestHelpViewController alloc] init];\n    NSMutableArray *arr = [[NSMutableArray alloc] init];\n    ZumoTest *test;\n    if (![[self testGroup] haveTestsRun]) {\n        UIAlertView *av = [[UIAlertView alloc] initWithTitle:@\"No tests\" message:@\"No tests have run, no logs will be uploaded\" delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\n        [av show];\n        return;\n    }\n    \n    for (test in [[self testGroup] tests]) {\n        if ([test testStatus] != TSSkipped) {\n            NSString *testStatus = [ZumoTest testStatusToString:[test testStatus]];\n            NSString *testStartTime = [ZumoTestGlobals dateToString:[test startTime]];\n            [arr addObject:[NSString stringWithFormat:@\"[%@] Logs for test %@ (%@)\", testStartTime, [test testName], testStatus]];\n            NSString *logLine;\n            for (logLine in [test getLogs]) {\n                [arr addObject:logLine];\n            }\n            [arr addObject:[NSString stringWithFormat:@\"[%@] -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\", [ZumoTestGlobals dateToString:[test endTime]]]];\n        }\n    }\n    \n    NSString *allLogs = [arr componentsJoinedByString:@\"\\n\"];\n    [helpController setTitle:@\"Test logs\" andHelpText:allLogs];\n    [helpController setModalPresentationStyle:UIModalPresentationFullScreen];\n    NSString *urlToUpload = [self logUploadUrl];\n    if (urlToUpload && [urlToUpload length] && [[[self testGroup] name] hasPrefix:ALL_TESTS_GROUP_NAME]) {\n        ZumoLogUpdater *updater = [[ZumoLogUpdater alloc] init];\n        [updater uploadLogs:allLogs toUrl:urlToUpload allTests:YES];\n    } else {\n        [self presentViewController:helpController animated:YES completion:^(void) {\n            if (urlToUpload && [urlToUpload length]) {\n                ZumoLogUpdater *updater = [[ZumoLogUpdater alloc] init];\n                [updater uploadLogs:allLogs toUrl:urlToUpload allTests:NO];\n            }\n        }];\n    }\n}\n\n- (void)zumoTestGroupFinished:(NSString *)groupName withPassed:(int)passedTests andFailed:(int)failedTests andSkipped:(int)skippedTests {\n    if ([groupName hasPrefix:ALL_TESTS_GROUP_NAME] && [[self logUploadUrl] length] > 0) {\n        [self uploadLogs:nil];\n    }\n}\n\n- (void)zumoTestGroupSingleTestFinished:(int)testIndex withResult:(TestStatus)testStatus {\n    [[[[self testGroup] tests] objectAtIndex:testIndex] setTestStatus:testStatus];\n    [[self tableView] reloadData];\n}\n\n- (void)zumoTestGroupSingleTestStarted:(int)testIndex {\n    [[[[self testGroup] tests] objectAtIndex:testIndex] setTestStatus:TSRunning];\n}\n\n- (void)zumoTestGroupStarted:(NSString *)groupName {\n    NSLog(@\"Test group started: %@\", groupName);\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestHelpViewController.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <UIKit/UIKit.h>\n\n@interface ZumoTestHelpViewController : UIViewController\n{\n    IBOutlet UILabel *titleLabel;\n    IBOutlet UITextView *helpText;\n    NSString *strTitle;\n    NSString *strHelp;\n}\n\n- (IBAction)close:(id)sender;\n- (void)setTitle:(NSString *)theTitle andHelpText:(NSString *)theHelpText;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestHelpViewController.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoTestHelpViewController.h\"\n\n@interface ZumoTestHelpViewController ()\n\n@end\n\n@implementation ZumoTestHelpViewController\n\n- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil\n{\n    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];\n\n    if (self) {\n        // Custom initialization\n    }\n    return self;\n}\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    // Do any additional setup after loading the view from its nib.\n}\n\n- (void)didReceiveMemoryWarning\n{\n    [super didReceiveMemoryWarning];\n    // Dispose of any resources that can be recreated.\n}\n\n- (void)setTitle:(NSString *)theTitle andHelpText:(NSString *)theHelpText {\n    self->strTitle = theTitle;\n    self->strHelp = theHelpText;\n    [self performSelector:@selector(updateUI) withObject:self afterDelay:0.1];\n}\n\n- (void)updateUI {\n    [helpText setText:strHelp];\n    [titleLabel setText:strTitle];\n}\n\n- (void)close:(id)sender {\n    [self dismissViewControllerAnimated:YES completion:nil];\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestHelpViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"8.00\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1536</int>\n\t\t<string key=\"IBDocument.SystemVersion\">12C60</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">2844</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1187.34</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">625.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t<string key=\"NS.object.0\">1930</string>\n\t\t</object>\n\t\t<array key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<string>IBProxyObject</string>\n\t\t\t<string>IBUIButton</string>\n\t\t\t<string>IBUILabel</string>\n\t\t\t<string>IBUITextView</string>\n\t\t\t<string>IBUIView</string>\n\t\t</array>\n\t\t<array key=\"IBDocument.PluginDependencies\">\n\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t</array>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<string key=\"NS.key.0\">PluginDependencyRecalculationVersion</string>\n\t\t\t<integer value=\"1\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<array class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<object class=\"IBProxyObject\" id=\"372490531\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFilesOwner</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBProxyObject\" id=\"975951072\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFirstResponder</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIView\" id=\"191373211\">\n\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t<array class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<object class=\"IBUILabel\" id=\"946265227\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">294</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 20}, {207, 43}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"285661907\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<int key=\"IBUIContentMode\">7</int>\n\t\t\t\t\t\t<bool key=\"IBUIUserInteractionEnabled\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\">Section Title</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUITextColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MCAwIDAAA</bytes>\n\t\t\t\t\t\t\t<string key=\"IBUIColorCocoaTouchKeyPath\">darkTextColor</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<nil key=\"IBUIHighlightedColor\"/>\n\t\t\t\t\t\t<int key=\"IBUIBaselineAdjustment\">0</int>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\">\n\t\t\t\t\t\t\t<int key=\"type\">1</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">20</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">20</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIAdjustsFontSizeToFit\">NO</bool>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"285661907\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">289</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{235, 20}, {65, 44}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"3881816\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIButtonType\">1</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Close</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIHighlightedTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleShadowColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MC41AA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\">\n\t\t\t\t\t\t\t<int key=\"type\">2</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">15</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica-Bold</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">15</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUITextView\" id=\"3881816\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 71}, {280, 457}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MSAwLjkxNzM0NDE0MDIgMC43NTY2NDQ2ODk5AA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<bool key=\"IBUIMultipleTouchEnabled\">YES</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<bool key=\"IBUIEditable\">NO</bool>\n\t\t\t\t\t\t<string key=\"IBUIText\">Help text</string>\n\t\t\t\t\t\t<object class=\"IBUITextInputTraits\" key=\"IBUITextInputTraits\">\n\t\t\t\t\t\t\t<int key=\"IBUIAutocapitalizationType\">2</int>\n\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\">\n\t\t\t\t\t\t\t<int key=\"type\">1</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">14</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">14</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t\t<string key=\"NSFrame\">{{0, 20}, {320, 548}}</string>\n\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"946265227\"/>\n\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t<object class=\"NSColorSpace\" key=\"NSCustomColorSpace\">\n\t\t\t\t\t\t<int key=\"NSID\">2</int>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBUISimulatedStatusBarMetrics\" key=\"IBUISimulatedStatusBarMetrics\"/>\n\t\t\t\t<object class=\"IBUIScreenMetrics\" key=\"IBUISimulatedDestinationMetrics\">\n\t\t\t\t\t<string key=\"IBUISimulatedSizeMetricsClass\">IBUIScreenMetrics</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"IBUINormalizedOrientationToSizeMap\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<array key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<integer value=\"1\"/>\n\t\t\t\t\t\t\t<integer value=\"3\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<array key=\"dict.values\">\n\t\t\t\t\t\t\t<string>{320, 568}</string>\n\t\t\t\t\t\t\t<string>{568, 320}</string>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</object>\n\t\t\t\t\t<string key=\"IBUITargetRuntime\">IBCocoaTouchFramework</string>\n\t\t\t\t\t<string key=\"IBUIDisplayName\">Retina 4 Full Screen</string>\n\t\t\t\t\t<int key=\"IBUIType\">2</int>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t</array>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<array class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">view</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">3</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">titleLabel</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"946265227\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">34</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">helpText</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"3881816\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">35</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">close:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"285661907\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"372490531\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">36</int>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<array key=\"orderedObjects\">\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<array key=\"object\" id=\"0\"/>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"191373211\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<reference ref=\"285661907\"/>\n\t\t\t\t\t\t\t<reference ref=\"946265227\"/>\n\t\t\t\t\t\t\t<reference ref=\"3881816\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"975951072\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">4</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"946265227\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">12</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"285661907\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">18</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"3881816\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t</object>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<string key=\"-1.CustomClassName\">ZumoTestHelpViewController</string>\n\t\t\t\t<string key=\"-1.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"-2.CustomClassName\">UIResponder</string>\n\t\t\t\t<string key=\"-2.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"1.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"12.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"18.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"4.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t</dictionary>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"unlocalizedProperties\"/>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"localizations\"/>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">36</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<array class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">ZumoTestHelpViewController</string>\n\t\t\t\t\t<string key=\"superclassName\">UIViewController</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"actions\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">close:</string>\n\t\t\t\t\t\t<string key=\"NS.object.0\">id</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"actionInfosByName\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">close:</string>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"NS.object.0\">\n\t\t\t\t\t\t\t<string key=\"name\">close:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<string key=\"helpText\">UITextView</string>\n\t\t\t\t\t\t<string key=\"titleLabel\">UILabel</string>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"helpText\">\n\t\t\t\t\t\t\t<string key=\"name\">helpText</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UITextView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"titleLabel\">\n\t\t\t\t\t\t\t<string key=\"name\">titleLabel</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UILabel</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</dictionary>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/ZumoTestHelpViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<string key=\"IBCocoaTouchPluginVersion\">1930</string>\n\t</data>\n</archive>\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestRunSetup.h",
    "content": "//\n//  ZumoTestRunSetup.h\n//  ZumoE2ETestApp\n//\n//  Created by Carlos Figueira on 2/6/14.\n//  Copyright (c) 2014 Microsoft. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface ZumoTestRunSetup : NSObject\n\n+ (NSArray *)createTests;\n+ (NSString *)groupDescription;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestRunSetup.m",
    "content": "//\n//  ZumoTestRunSetup.m\n//  ZumoE2ETestApp\n//\n//  Created by Carlos Figueira on 2/6/14.\n//  Copyright (c) 2014 Microsoft. All rights reserved.\n//\n\n#import \"ZumoTestRunSetup.h\"\n#import \"ZumoTest.h\"\n#import \"ZumoTestGlobals.h\"\n\n@implementation ZumoTestRunSetup\n\n+ (NSArray *)createTests {\n    ZumoTest *test = [ZumoTest createTestWithName:@\"Retrieve runtime features\" andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        MSClient *client = [[ZumoTestGlobals sharedInstance] client];\n        [client invokeAPI:@\"runtimeInfo\" body:nil HTTPMethod:@\"GET\" parameters:nil headers:nil completion:^(id result, NSHTTPURLResponse *response, NSError *error) {\n            if (error) {\n                [test addLog:[NSString stringWithFormat:@\"Error retrieving runtime features: %@\", error]];\n                completion(NO);\n            } else {\n                NSDictionary *runtimeInfo = result;\n                [test addLog:[NSString stringWithFormat:@\"Runtime features: %@\", runtimeInfo]];\n                NSDictionary *features = [runtimeInfo objectForKey:@\"features\"];\n                NSDictionary *globalTestParams = [[ZumoTestGlobals sharedInstance] globalTestParameters];\n                [globalTestParams setValue:features forKey:RUNTIME_FEATURES_KEY];\n                completion(YES);\n            }\n        }];\n    }];\n\n    return @[test];\n}\n\n+ (NSString *)groupDescription {\n    return @\"Run before other tests to check the features enabled in the runtime.\";\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestStore.h",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <Foundation/Foundation.h>\n\n@interface ZumoTestStore : NSObject\n\n+ (NSArray *)createTests;\n\nextern NSString * const ALL_TESTS_GROUP_NAME;\nextern NSString * const ALL_UNATTENDED_TESTS_GROUP_NAME;\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/ZumoTestStore.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import \"ZumoTestStore.h\"\n#import \"ZumoTest.h\"\n#import \"ZumoTestGroup.h\"\n#import \"ZumoRoundTripTests.h\"\n#import \"ZumoQueryTests.h\"\n#import \"ZumoCUDTests.h\"\n#import \"ZumoLoginTests.h\"\n#import \"ZumoMiscTests.h\"\n#import \"ZumoPushTests.h\"\n#import \"ZumoCustomApiTests.h\"\n#import \"ZumoTestRunSetup.h\"\n\nNSString * const ALL_TESTS_GROUP_NAME = @\"All tests\";\nNSString * const ALL_UNATTENDED_TESTS_GROUP_NAME = @\"All tests (unattended)\";\n\n@implementation ZumoTestStore\n\n+ (NSArray *)createTests {\n    ZumoTestGroup *setupGroup = [[ZumoTestGroup alloc] init];\n    [setupGroup setName:@\"Test run setup\"];\n    NSMutableArray *result = [NSMutableArray arrayWithObjects:\n                              [self createGroupWithName:@\"Test run setup\" description:[ZumoTestRunSetup description] tests:[ZumoTestRunSetup createTests]],\n                              [self createGroupWithName:@\"Insert and verify\" description:[ZumoRoundTripTests description] tests:[ZumoRoundTripTests createTests]],\n                              [self createGroupWithName:@\"Query\" description:[ZumoQueryTests description] tests:[ZumoQueryTests createTests]],\n                              [self createGroupWithName:@\"Update / Delete\" description:[ZumoCUDTests description] tests:[ZumoCUDTests createTests]],\n                              [self createGroupWithName:@\"Login\" description:[ZumoLoginTests description] tests:[ZumoLoginTests createTests]],\n                              [self createGroupWithName:@\"Push notification\" description:[ZumoPushTests description] tests:[ZumoPushTests createTests]],\n                              [self createGroupWithName:@\"Other\" description:[ZumoMiscTests description] tests:[ZumoMiscTests createTests]],\n                              [self createGroupWithName:@\"Custom API\" description:[ZumoCustomApiTests description] tests:[ZumoCustomApiTests createTests]],\n            nil];\n    \n    ZumoTestGroup *allTests = [self createGroupWithAllTestsFromIndividualGroups:result onlyIncludeUnattended:NO];\n    ZumoTestGroup *allUnattendedTests = [self createGroupWithAllTestsFromIndividualGroups:result onlyIncludeUnattended:YES];\n    [result addObject:allUnattendedTests];\n    [result addObject:allTests];\n    \n    return result;\n}\n\n+ (ZumoTestGroup *)createGroupWithName:(NSString *)testGroupName description:(NSString *)description tests:(NSArray *)tests {\n    ZumoTestGroup *result = [[ZumoTestGroup alloc] init];\n    [result setName:testGroupName];\n    [result setGroupDescription:description];\n    ZumoTest *test;\n    for (test in tests) {\n        [result addTest:test];\n    }\n    \n    return result;\n}\n\n+ (ZumoTestGroup *)createGroupWithAllTestsFromIndividualGroups:(NSArray *)groups onlyIncludeUnattended:(BOOL)unattendedOnly {\n    ZumoTestGroup *result = [[ZumoTestGroup alloc] init];\n    [result setName:(unattendedOnly ? ALL_UNATTENDED_TESTS_GROUP_NAME : ALL_TESTS_GROUP_NAME)];\n    for (ZumoTestGroup *group in groups) {\n        NSString *groupHeaderName = [NSString stringWithFormat:@\"Start of group: %@\", [group name]];\n        [result addTest:[self createSeparatorTestWithName:groupHeaderName]];\n        \n        for (ZumoTest *test in [group tests]) {\n            if ([test canRunUnattended] || !unattendedOnly) {\n                ZumoTest *newTest = [[ZumoTest alloc] init];\n                [newTest setTestName:[test testName]];\n                [newTest setExecution:[test execution]];\n                newTest.requiredFeatures = test.requiredFeatures;\n                \n                [result addTest:newTest];\n            }\n        }\n        \n        [result addTest:[self createSeparatorTestWithName:@\"------------------\"]];\n    }\n    return result;\n}\n\n+ (ZumoTest *)createSeparatorTestWithName:(NSString *)testName {\n    return [ZumoTest createTestWithName:testName andExecution:^(ZumoTest *test, UIViewController *viewController, ZumoTestCompletion completion) {\n        completion(YES);\n    }];\n}\n\n@end\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp/main.m",
    "content": "// ----------------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// ----------------------------------------------------------------------------\n\n#import <UIKit/UIKit.h>\n\n#import \"ZumoAppDelegate.h\"\n\nint main(int argc, char *argv[])\n{\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([ZumoAppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "test/iOS/ZumoE2ETestApp/ZumoE2ETestApp.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t872B02BF1672A73B003613A1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 872B02BE1672A73B003613A1 /* UIKit.framework */; };\n\t\t872B02C11672A73B003613A1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 872B02C01672A73B003613A1 /* Foundation.framework */; };\n\t\t872B02C31672A73B003613A1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 872B02C21672A73B003613A1 /* CoreGraphics.framework */; };\n\t\t872B02C91672A73B003613A1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 872B02C71672A73B003613A1 /* InfoPlist.strings */; };\n\t\t872B02CB1672A73B003613A1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B02CA1672A73B003613A1 /* main.m */; };\n\t\t872B02CF1672A73B003613A1 /* ZumoAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B02CE1672A73B003613A1 /* ZumoAppDelegate.m */; };\n\t\t872B02D11672A73B003613A1 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 872B02D01672A73B003613A1 /* Default.png */; };\n\t\t872B02D31672A73B003613A1 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 872B02D21672A73B003613A1 /* Default@2x.png */; };\n\t\t872B02D51672A73B003613A1 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 872B02D41672A73B003613A1 /* Default-568h@2x.png */; };\n\t\t872B02E01672A8FC003613A1 /* ZumoTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B02DF1672A8FC003613A1 /* ZumoTest.m */; };\n\t\t872B02E31672A908003613A1 /* ZumoTestGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B02E21672A908003613A1 /* ZumoTestGroup.m */; };\n\t\t872B02ED1673EE91003613A1 /* ZumoTestHelpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B02EB1673EE91003613A1 /* ZumoTestHelpViewController.m */; };\n\t\t872B02EE1673EE91003613A1 /* ZumoTestHelpViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 872B02EC1673EE91003613A1 /* ZumoTestHelpViewController.xib */; };\n\t\t872B02FE1673F4CF003613A1 /* ZumoMainTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B02FD1673F4CF003613A1 /* ZumoMainTableViewController.m */; };\n\t\t872B03001673F594003613A1 /* ZumoMainTableHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = 872B02FF1673F594003613A1 /* ZumoMainTableHeader.xib */; };\n\t\t872B03031673F9D4003613A1 /* ZumoTestGlobals.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B03021673F9D4003613A1 /* ZumoTestGlobals.m */; };\n\t\t872B030D16758058003613A1 /* ZumoTestGroupTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B030C16758058003613A1 /* ZumoTestGroupTableViewController.m */; };\n\t\t872B030F167580A4003613A1 /* ZumoTestGroupTableHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = 872B030E167580A4003613A1 /* ZumoTestGroupTableHeader.xib */; };\n\t\t872B031316759F6D003613A1 /* ZumoRoundTripTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B031216759F6D003613A1 /* ZumoRoundTripTests.m */; };\n\t\t872B031616759FE2003613A1 /* ZumoQueryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B031516759FE2003613A1 /* ZumoQueryTests.m */; };\n\t\t872B031916759FF2003613A1 /* ZumoCUDTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B031816759FF1003613A1 /* ZumoCUDTests.m */; };\n\t\t872B031C16759FF9003613A1 /* ZumoLoginTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B031B16759FF9003613A1 /* ZumoLoginTests.m */; };\n\t\t872B031F1675A128003613A1 /* ZumoTestStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B031E1675A127003613A1 /* ZumoTestStore.m */; };\n\t\t872B0324167660C2003613A1 /* ZumoSavedAppsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 872B0323167660C2003613A1 /* ZumoSavedAppsTableViewController.m */; };\n\t\t872B032A16768EF0003613A1 /* ZumoSavedAppsHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = 872B032916768EF0003613A1 /* ZumoSavedAppsHeader.xib */; };\n\t\t8754390C18E1F3E5001B1381 /* WindowsAzureMobileServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8754390B18E1F3E5001B1381 /* WindowsAzureMobileServices.framework */; };\n\t\t8757386A18A40C2A0025024F /* ZumoTestRunSetup.m in Sources */ = {isa = PBXBuildFile; fileRef = 8757386918A40C2A0025024F /* ZumoTestRunSetup.m */; };\n\t\t87B36928167AE7D300F42BCE /* ZumoQueryTestData.m in Sources */ = {isa = PBXBuildFile; fileRef = 87B36927167AE7D300F42BCE /* ZumoQueryTestData.m */; };\n\t\t87B36932168050D700F42BCE /* ZumoLogUpdater.m in Sources */ = {isa = PBXBuildFile; fileRef = 87B36931168050D700F42BCE /* ZumoLogUpdater.m */; };\n\t\t87B3693516875B1100F42BCE /* ZumoPushTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 87B3693416875B1100F42BCE /* ZumoPushTests.m */; };\n\t\t87D8D9451678443D00CDE19A /* ZumoMiscTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 87D8D9441678443D00CDE19A /* ZumoMiscTests.m */; };\n\t\t87FA8406174FE58A0089EDEA /* ZumoCustomApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 87FA8405174FE58A0089EDEA /* ZumoCustomApiTests.m */; };\n\t\t87FA840B17569AB90089EDEA /* TestLoggingFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 87FA840A17569AB90089EDEA /* TestLoggingFilter.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t872B02BA1672A73B003613A1 /* ZumoE2ETestApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ZumoE2ETestApp.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t872B02BE1672A73B003613A1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\t872B02C01672A73B003613A1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t872B02C21672A73B003613A1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\t872B02C61672A73B003613A1 /* ZumoE2ETestApp-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"ZumoE2ETestApp-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t872B02C81672A73B003613A1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t872B02CA1672A73B003613A1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t872B02CC1672A73B003613A1 /* ZumoE2ETestApp-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"ZumoE2ETestApp-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t872B02CD1672A73B003613A1 /* ZumoAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZumoAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t872B02CE1672A73B003613A1 /* ZumoAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ZumoAppDelegate.m; sourceTree = \"<group>\"; };\n\t\t872B02D01672A73B003613A1 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = \"<group>\"; };\n\t\t872B02D21672A73B003613A1 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"Default@2x.png\"; sourceTree = \"<group>\"; };\n\t\t872B02D41672A73B003613A1 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"Default-568h@2x.png\"; sourceTree = \"<group>\"; };\n\t\t872B02DC1672A8E9003613A1 /* ZumoTestCallbacks.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZumoTestCallbacks.h; sourceTree = \"<group>\"; };\n\t\t872B02DD1672A8F4003613A1 /* ZumoTestGroupCallbacks.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZumoTestGroupCallbacks.h; sourceTree = \"<group>\"; };\n\t\t872B02DE1672A8FC003613A1 /* ZumoTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoTest.h; sourceTree = \"<group>\"; };\n\t\t872B02DF1672A8FC003613A1 /* ZumoTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoTest.m; sourceTree = \"<group>\"; };\n\t\t872B02E11672A908003613A1 /* ZumoTestGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoTestGroup.h; sourceTree = \"<group>\"; };\n\t\t872B02E21672A908003613A1 /* ZumoTestGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoTestGroup.m; sourceTree = \"<group>\"; };\n\t\t872B02EA1673EE91003613A1 /* ZumoTestHelpViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoTestHelpViewController.h; sourceTree = \"<group>\"; };\n\t\t872B02EB1673EE91003613A1 /* ZumoTestHelpViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoTestHelpViewController.m; sourceTree = \"<group>\"; };\n\t\t872B02EC1673EE91003613A1 /* ZumoTestHelpViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ZumoTestHelpViewController.xib; sourceTree = \"<group>\"; };\n\t\t872B02FC1673F4CF003613A1 /* ZumoMainTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoMainTableViewController.h; sourceTree = \"<group>\"; };\n\t\t872B02FD1673F4CF003613A1 /* ZumoMainTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoMainTableViewController.m; sourceTree = \"<group>\"; };\n\t\t872B02FF1673F594003613A1 /* ZumoMainTableHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ZumoMainTableHeader.xib; sourceTree = \"<group>\"; };\n\t\t872B03011673F9D4003613A1 /* ZumoTestGlobals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoTestGlobals.h; sourceTree = \"<group>\"; };\n\t\t872B03021673F9D4003613A1 /* ZumoTestGlobals.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoTestGlobals.m; sourceTree = \"<group>\"; };\n\t\t872B030B16758058003613A1 /* ZumoTestGroupTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoTestGroupTableViewController.h; sourceTree = \"<group>\"; };\n\t\t872B030C16758058003613A1 /* ZumoTestGroupTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoTestGroupTableViewController.m; sourceTree = \"<group>\"; };\n\t\t872B030E167580A4003613A1 /* ZumoTestGroupTableHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ZumoTestGroupTableHeader.xib; sourceTree = \"<group>\"; };\n\t\t872B031116759F6D003613A1 /* ZumoRoundTripTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoRoundTripTests.h; sourceTree = \"<group>\"; };\n\t\t872B031216759F6D003613A1 /* ZumoRoundTripTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoRoundTripTests.m; sourceTree = \"<group>\"; };\n\t\t872B031416759FE2003613A1 /* ZumoQueryTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoQueryTests.h; sourceTree = \"<group>\"; };\n\t\t872B031516759FE2003613A1 /* ZumoQueryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoQueryTests.m; sourceTree = \"<group>\"; };\n\t\t872B031716759FF1003613A1 /* ZumoCUDTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoCUDTests.h; sourceTree = \"<group>\"; };\n\t\t872B031816759FF1003613A1 /* ZumoCUDTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoCUDTests.m; sourceTree = \"<group>\"; };\n\t\t872B031A16759FF9003613A1 /* ZumoLoginTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoLoginTests.h; sourceTree = \"<group>\"; };\n\t\t872B031B16759FF9003613A1 /* ZumoLoginTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoLoginTests.m; sourceTree = \"<group>\"; };\n\t\t872B031D1675A127003613A1 /* ZumoTestStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoTestStore.h; sourceTree = \"<group>\"; };\n\t\t872B031E1675A127003613A1 /* ZumoTestStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoTestStore.m; sourceTree = \"<group>\"; };\n\t\t872B0322167660C2003613A1 /* ZumoSavedAppsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoSavedAppsTableViewController.h; sourceTree = \"<group>\"; };\n\t\t872B0323167660C2003613A1 /* ZumoSavedAppsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoSavedAppsTableViewController.m; sourceTree = \"<group>\"; };\n\t\t872B032916768EF0003613A1 /* ZumoSavedAppsHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ZumoSavedAppsHeader.xib; sourceTree = \"<group>\"; };\n\t\t8754390B18E1F3E5001B1381 /* WindowsAzureMobileServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = WindowsAzureMobileServices.framework; sourceTree = \"<group>\"; };\n\t\t8757386818A40C2A0025024F /* ZumoTestRunSetup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoTestRunSetup.h; sourceTree = \"<group>\"; };\n\t\t8757386918A40C2A0025024F /* ZumoTestRunSetup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoTestRunSetup.m; sourceTree = \"<group>\"; };\n\t\t87B36926167AE7D300F42BCE /* ZumoQueryTestData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoQueryTestData.h; sourceTree = \"<group>\"; };\n\t\t87B36927167AE7D300F42BCE /* ZumoQueryTestData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoQueryTestData.m; sourceTree = \"<group>\"; };\n\t\t87B36930168050D700F42BCE /* ZumoLogUpdater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoLogUpdater.h; sourceTree = \"<group>\"; };\n\t\t87B36931168050D700F42BCE /* ZumoLogUpdater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoLogUpdater.m; sourceTree = \"<group>\"; };\n\t\t87B3693316875B1100F42BCE /* ZumoPushTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoPushTests.h; sourceTree = \"<group>\"; };\n\t\t87B3693416875B1100F42BCE /* ZumoPushTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoPushTests.m; sourceTree = \"<group>\"; };\n\t\t87D8D9431678443D00CDE19A /* ZumoMiscTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoMiscTests.h; sourceTree = \"<group>\"; };\n\t\t87D8D9441678443D00CDE19A /* ZumoMiscTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoMiscTests.m; sourceTree = \"<group>\"; };\n\t\t87FA8404174FE58A0089EDEA /* ZumoCustomApiTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZumoCustomApiTests.h; sourceTree = \"<group>\"; };\n\t\t87FA8405174FE58A0089EDEA /* ZumoCustomApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZumoCustomApiTests.m; sourceTree = \"<group>\"; };\n\t\t87FA840917569AB90089EDEA /* TestLoggingFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestLoggingFilter.h; sourceTree = \"<group>\"; };\n\t\t87FA840A17569AB90089EDEA /* TestLoggingFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestLoggingFilter.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t872B02B71672A73B003613A1 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t872B02BF1672A73B003613A1 /* UIKit.framework in Frameworks */,\n\t\t\t\t872B02C11672A73B003613A1 /* Foundation.framework in Frameworks */,\n\t\t\t\t8754390C18E1F3E5001B1381 /* WindowsAzureMobileServices.framework in Frameworks */,\n\t\t\t\t872B02C31672A73B003613A1 /* CoreGraphics.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t872B02AF1672A73B003613A1 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t872B02C41672A73B003613A1 /* ZumoE2ETestApp */,\n\t\t\t\t872B02BD1672A73B003613A1 /* Frameworks */,\n\t\t\t\t872B02BB1672A73B003613A1 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t872B02BB1672A73B003613A1 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t872B02BA1672A73B003613A1 /* ZumoE2ETestApp.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t872B02BD1672A73B003613A1 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8754390B18E1F3E5001B1381 /* WindowsAzureMobileServices.framework */,\n\t\t\t\t872B02BE1672A73B003613A1 /* UIKit.framework */,\n\t\t\t\t872B02C01672A73B003613A1 /* Foundation.framework */,\n\t\t\t\t872B02C21672A73B003613A1 /* CoreGraphics.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t872B02C41672A73B003613A1 /* ZumoE2ETestApp */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t872B032116766077003613A1 /* SavedApplications */,\n\t\t\t\t872B031016759F56003613A1 /* Tests */,\n\t\t\t\t872B02FB1673F48B003613A1 /* TestTableViewControllers */,\n\t\t\t\t872B02E81673EE5D003613A1 /* HelpController */,\n\t\t\t\t872B02DB1672A8D6003613A1 /* TestFramework */,\n\t\t\t\t872B02CD1672A73B003613A1 /* ZumoAppDelegate.h */,\n\t\t\t\t872B02CE1672A73B003613A1 /* ZumoAppDelegate.m */,\n\t\t\t\t872B02C51672A73B003613A1 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = ZumoE2ETestApp;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t872B02C51672A73B003613A1 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t872B02C61672A73B003613A1 /* ZumoE2ETestApp-Info.plist */,\n\t\t\t\t872B02C71672A73B003613A1 /* InfoPlist.strings */,\n\t\t\t\t872B02CA1672A73B003613A1 /* main.m */,\n\t\t\t\t872B02CC1672A73B003613A1 /* ZumoE2ETestApp-Prefix.pch */,\n\t\t\t\t872B02D01672A73B003613A1 /* Default.png */,\n\t\t\t\t872B02D21672A73B003613A1 /* Default@2x.png */,\n\t\t\t\t872B02D41672A73B003613A1 /* Default-568h@2x.png */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t872B02DB1672A8D6003613A1 /* TestFramework */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t872B02DC1672A8E9003613A1 /* ZumoTestCallbacks.h */,\n\t\t\t\t872B02DD1672A8F4003613A1 /* ZumoTestGroupCallbacks.h */,\n\t\t\t\t872B02DE1672A8FC003613A1 /* ZumoTest.h */,\n\t\t\t\t872B02DF1672A8FC003613A1 /* ZumoTest.m */,\n\t\t\t\t872B02E11672A908003613A1 /* ZumoTestGroup.h */,\n\t\t\t\t872B02E21672A908003613A1 /* ZumoTestGroup.m */,\n\t\t\t\t872B03011673F9D4003613A1 /* ZumoTestGlobals.h */,\n\t\t\t\t872B03021673F9D4003613A1 /* ZumoTestGlobals.m */,\n\t\t\t);\n\t\t\tname = TestFramework;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t872B02E81673EE5D003613A1 /* HelpController */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t872B02EA1673EE91003613A1 /* ZumoTestHelpViewController.h */,\n\t\t\t\t872B02EB1673EE91003613A1 /* ZumoTestHelpViewController.m */,\n\t\t\t\t872B02EC1673EE91003613A1 /* ZumoTestHelpViewController.xib */,\n\t\t\t);\n\t\t\tname = HelpController;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t872B02FB1673F48B003613A1 /* TestTableViewControllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t872B02FC1673F4CF003613A1 /* ZumoMainTableViewController.h */,\n\t\t\t\t872B02FD1673F4CF003613A1 /* ZumoMainTableViewController.m */,\n\t\t\t\t872B02FF1673F594003613A1 /* ZumoMainTableHeader.xib */,\n\t\t\t\t872B030B16758058003613A1 /* ZumoTestGroupTableViewController.h */,\n\t\t\t\t872B030C16758058003613A1 /* ZumoTestGroupTableViewController.m */,\n\t\t\t\t872B030E167580A4003613A1 /* ZumoTestGroupTableHeader.xib */,\n\t\t\t\t87B36930168050D700F42BCE /* ZumoLogUpdater.h */,\n\t\t\t\t87B36931168050D700F42BCE /* ZumoLogUpdater.m */,\n\t\t\t);\n\t\t\tname = TestTableViewControllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t872B031016759F56003613A1 /* Tests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t872B031116759F6D003613A1 /* ZumoRoundTripTests.h */,\n\t\t\t\t872B031216759F6D003613A1 /* ZumoRoundTripTests.m */,\n\t\t\t\t872B031416759FE2003613A1 /* ZumoQueryTests.h */,\n\t\t\t\t872B031516759FE2003613A1 /* ZumoQueryTests.m */,\n\t\t\t\t87B36926167AE7D300F42BCE /* ZumoQueryTestData.h */,\n\t\t\t\t87B36927167AE7D300F42BCE /* ZumoQueryTestData.m */,\n\t\t\t\t872B031716759FF1003613A1 /* ZumoCUDTests.h */,\n\t\t\t\t872B031816759FF1003613A1 /* ZumoCUDTests.m */,\n\t\t\t\t872B031A16759FF9003613A1 /* ZumoLoginTests.h */,\n\t\t\t\t872B031B16759FF9003613A1 /* ZumoLoginTests.m */,\n\t\t\t\t87D8D9431678443D00CDE19A /* ZumoMiscTests.h */,\n\t\t\t\t87D8D9441678443D00CDE19A /* ZumoMiscTests.m */,\n\t\t\t\t872B031D1675A127003613A1 /* ZumoTestStore.h */,\n\t\t\t\t872B031E1675A127003613A1 /* ZumoTestStore.m */,\n\t\t\t\t87B3693316875B1100F42BCE /* ZumoPushTests.h */,\n\t\t\t\t87B3693416875B1100F42BCE /* ZumoPushTests.m */,\n\t\t\t\t87FA8404174FE58A0089EDEA /* ZumoCustomApiTests.h */,\n\t\t\t\t87FA8405174FE58A0089EDEA /* ZumoCustomApiTests.m */,\n\t\t\t\t87FA840917569AB90089EDEA /* TestLoggingFilter.h */,\n\t\t\t\t87FA840A17569AB90089EDEA /* TestLoggingFilter.m */,\n\t\t\t\t8757386818A40C2A0025024F /* ZumoTestRunSetup.h */,\n\t\t\t\t8757386918A40C2A0025024F /* ZumoTestRunSetup.m */,\n\t\t\t);\n\t\t\tname = Tests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t872B032116766077003613A1 /* SavedApplications */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t872B0322167660C2003613A1 /* ZumoSavedAppsTableViewController.h */,\n\t\t\t\t872B0323167660C2003613A1 /* ZumoSavedAppsTableViewController.m */,\n\t\t\t\t872B032916768EF0003613A1 /* ZumoSavedAppsHeader.xib */,\n\t\t\t);\n\t\t\tname = SavedApplications;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t872B02B91672A73B003613A1 /* ZumoE2ETestApp */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 872B02D81672A73B003613A1 /* Build configuration list for PBXNativeTarget \"ZumoE2ETestApp\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t872B02B61672A73B003613A1 /* Sources */,\n\t\t\t\t872B02B71672A73B003613A1 /* Frameworks */,\n\t\t\t\t872B02B81672A73B003613A1 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ZumoE2ETestApp;\n\t\t\tproductName = ZumoE2ETestApp;\n\t\t\tproductReference = 872B02BA1672A73B003613A1 /* ZumoE2ETestApp.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t872B02B11672A73B003613A1 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tCLASSPREFIX = Zumo;\n\t\t\t\tLastUpgradeCheck = 0450;\n\t\t\t\tORGANIZATIONNAME = Microsoft;\n\t\t\t};\n\t\t\tbuildConfigurationList = 872B02B41672A73B003613A1 /* Build configuration list for PBXProject \"ZumoE2ETestApp\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 872B02AF1672A73B003613A1;\n\t\t\tproductRefGroup = 872B02BB1672A73B003613A1 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t872B02B91672A73B003613A1 /* ZumoE2ETestApp */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t872B02B81672A73B003613A1 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t872B02C91672A73B003613A1 /* InfoPlist.strings in Resources */,\n\t\t\t\t872B02D11672A73B003613A1 /* Default.png in Resources */,\n\t\t\t\t872B02D31672A73B003613A1 /* Default@2x.png in Resources */,\n\t\t\t\t872B02D51672A73B003613A1 /* Default-568h@2x.png in Resources */,\n\t\t\t\t872B02EE1673EE91003613A1 /* ZumoTestHelpViewController.xib in Resources */,\n\t\t\t\t872B03001673F594003613A1 /* ZumoMainTableHeader.xib in Resources */,\n\t\t\t\t872B030F167580A4003613A1 /* ZumoTestGroupTableHeader.xib in Resources */,\n\t\t\t\t872B032A16768EF0003613A1 /* ZumoSavedAppsHeader.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t872B02B61672A73B003613A1 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t872B02CB1672A73B003613A1 /* main.m in Sources */,\n\t\t\t\t872B02CF1672A73B003613A1 /* ZumoAppDelegate.m in Sources */,\n\t\t\t\t872B02E01672A8FC003613A1 /* ZumoTest.m in Sources */,\n\t\t\t\t872B02E31672A908003613A1 /* ZumoTestGroup.m in Sources */,\n\t\t\t\t872B02ED1673EE91003613A1 /* ZumoTestHelpViewController.m in Sources */,\n\t\t\t\t872B02FE1673F4CF003613A1 /* ZumoMainTableViewController.m in Sources */,\n\t\t\t\t872B03031673F9D4003613A1 /* ZumoTestGlobals.m in Sources */,\n\t\t\t\t872B030D16758058003613A1 /* ZumoTestGroupTableViewController.m in Sources */,\n\t\t\t\t8757386A18A40C2A0025024F /* ZumoTestRunSetup.m in Sources */,\n\t\t\t\t872B031316759F6D003613A1 /* ZumoRoundTripTests.m in Sources */,\n\t\t\t\t872B031616759FE2003613A1 /* ZumoQueryTests.m in Sources */,\n\t\t\t\t872B031916759FF2003613A1 /* ZumoCUDTests.m in Sources */,\n\t\t\t\t872B031C16759FF9003613A1 /* ZumoLoginTests.m in Sources */,\n\t\t\t\t872B031F1675A128003613A1 /* ZumoTestStore.m in Sources */,\n\t\t\t\t872B0324167660C2003613A1 /* ZumoSavedAppsTableViewController.m in Sources */,\n\t\t\t\t87D8D9451678443D00CDE19A /* ZumoMiscTests.m in Sources */,\n\t\t\t\t87B36928167AE7D300F42BCE /* ZumoQueryTestData.m in Sources */,\n\t\t\t\t87B36932168050D700F42BCE /* ZumoLogUpdater.m in Sources */,\n\t\t\t\t87B3693516875B1100F42BCE /* ZumoPushTests.m in Sources */,\n\t\t\t\t87FA8406174FE58A0089EDEA /* ZumoCustomApiTests.m in Sources */,\n\t\t\t\t87FA840B17569AB90089EDEA /* TestLoggingFilter.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t872B02C71672A73B003613A1 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t872B02C81672A73B003613A1 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t872B02D61672A73B003613A1 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 6.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t872B02D71672A73B003613A1 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 6.0;\n\t\t\t\tOTHER_CFLAGS = \"-DNS_BLOCK_ASSERTIONS=1\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t872B02D91672A73B003613A1 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(SRCROOT)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"ZumoE2ETestApp/ZumoE2ETestApp-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"ZumoE2ETestApp/ZumoE2ETestApp-Info.plist\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t872B02DA1672A73B003613A1 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(SRCROOT)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"ZumoE2ETestApp/ZumoE2ETestApp-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"ZumoE2ETestApp/ZumoE2ETestApp-Info.plist\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t872B02B41672A73B003613A1 /* Build configuration list for PBXProject \"ZumoE2ETestApp\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t872B02D61672A73B003613A1 /* Debug */,\n\t\t\t\t872B02D71672A73B003613A1 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t872B02D81672A73B003613A1 /* Build configuration list for PBXNativeTarget \"ZumoE2ETestApp\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t872B02D91672A73B003613A1 /* Debug */,\n\t\t\t\t872B02DA1672A73B003613A1 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 872B02B11672A73B003613A1 /* Project object */;\n}\n"
  }
]